diff --git a/.ecrc b/.ecrc new file mode 100644 index 0000000000..aaa3297894 --- /dev/null +++ b/.ecrc @@ -0,0 +1,3 @@ +{ + "SpacesAftertabs": true +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae69e83693..b78c94fa14 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -113,7 +113,7 @@ jobs: run: | ls /tmp/bin/ec-linux-amd64 || \ cd /tmp && \ - wget https://github.com/editorconfig-checker/editorconfig-checker/releases/download/2.1.0/ec-linux-amd64.tar.gz && \ + wget https://github.com/editorconfig-checker/editorconfig-checker/releases/download/2.5.0/ec-linux-amd64.tar.gz && \ tar xvf ec-linux-amd64.tar.gz && \ chmod +x bin/ec-linux-amd64 - name: Check files @@ -128,10 +128,10 @@ jobs: uses: actions/checkout@v2 with: ref: ${{ needs.set-tags.outputs.git_ref }} - - name: Use Node.js 14.x + - name: Use Node.js 16.x uses: actions/setup-node@v2 with: - node-version: 14.x + node-version: 16.x - name: Check with Prettier run: npx prettier --check --ignore-path .prettierignore '**/*.(yml|js|ts|json)' @@ -338,20 +338,20 @@ jobs: with: name: moonbeam path: build - - name: Use Node.js 14.x + - name: Use Node.js 16.x uses: actions/setup-node@v2 with: - node-version: 14.x + node-version: 16.x - name: Typescript integration tests (against dev service) run: | chmod uog+x build/moonbeam #### Preparing the repository cd moonbeam-types-bundle - npm install + npm ci npm run build cd ../tests - npm install + npm ci cd .. #### Retrieving docker image as base to run tests @@ -393,6 +393,7 @@ jobs: if [[ $FILECOUNT -eq 0 ]]; then echo "All package-lock.json files are valid" else + git diff --cached echo "The following package-lock.json files have uncommitted changes" echo $DIFF_INDEX | grep package-lock.json false @@ -411,10 +412,10 @@ jobs: with: name: moonbeam path: build - - name: Use Node.js 14.x + - name: Use Node.js 16.x uses: actions/setup-node@v2 with: - node-version: 14.x + node-version: 16.x - name: Get tracing runtimes run: | ./scripts/build-last-tracing-runtime.sh ${{ needs.set-tags.outputs.git_branch }} @@ -425,14 +426,15 @@ jobs: BINARY_PATH: ../build/moonbeam ETHAPI_CMD: --ethapi=txpool,debug,trace FORCE_WASM_EXECUTION: true + FORCE_COMPILED_WASM: true WASM_RUNTIME_OVERRIDES: moonbase-overrides run: | chmod uog+x build/moonbeam cd moonbeam-types-bundle - npm install + npm ci npm run build cd ../tests - npm install + npm ci node_modules/.bin/mocha --exit --parallel -j 2 -r ts-node/register 'tracing-tests/**/test-*.ts' typescript-para-tests: @@ -461,10 +463,10 @@ jobs: docker create -ti --name dummy $DOCKER_TAG bash docker cp dummy:/usr/local/bin/polkadot build/polkadot docker rm -f dummy - - name: Use Node.js 14.x + - name: Use Node.js 16.x uses: actions/setup-node@v2 with: - node-version: 14.x + node-version: 16.x - name: Typescript integration tests (against dev service) env: OVERRIDE_RUNTIME_PATH: ./runtimes @@ -477,9 +479,9 @@ jobs: #### Preparing the repository cd moonbeam-types-bundle - npm install + npm ci cd ../tests - npm install + npm ci cd .. POLKADOT_REPO=${{ needs.set-tags.outputs.polkadot_repo }} diff --git a/.github/workflows/check-features.yml b/.github/workflows/check-features.yml new file mode 100644 index 0000000000..0928b25c77 --- /dev/null +++ b/.github/workflows/check-features.yml @@ -0,0 +1,26 @@ +name: Check rarely used build features + +on: + push: + branches: + - master + +jobs: + check: + name: check features + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v1 + - name: Setup Rust toolchain + run: rustup show + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-check-features-${{ hashFiles('**/Cargo.lock') }} + - name: cargo check + run: cargo check --features try-runtime,runtime-benchmarks diff --git a/.github/workflows/enforce-pr-labels.yml b/.github/workflows/enforce-pr-labels.yml index d6c8c35dae..a85481428a 100644 --- a/.github/workflows/enforce-pr-labels.yml +++ b/.github/workflows/enforce-pr-labels.yml @@ -7,7 +7,7 @@ jobs: enforce-noteworthiness-label: runs-on: ubuntu-latest steps: - - uses: yogevbd/enforce-label-action@2.2.0 + - uses: yogevbd/enforce-label-action@2.2.2 with: REQUIRED_LABELS_ANY: "B0-silent,B5-clientnoteworthy,B7-runtimenoteworthy" REQUIRED_LABELS_ALL: "" @@ -15,7 +15,7 @@ jobs: enforce-auditability-label: runs-on: ubuntu-latest steps: - - uses: yogevbd/enforce-label-action@2.2.0 + - uses: yogevbd/enforce-label-action@2.2.2 with: REQUIRED_LABELS_ANY: "D1-audited👍,D5-nicetohaveaudit⚠️,D9-needsaudit👮,D2-notlive,D3-trivial" REQUIRED_LABELS_ALL: "" diff --git a/.github/workflows/publish-runtime.yml b/.github/workflows/publish-runtime.yml index 733e95346c..c817d86206 100644 --- a/.github/workflows/publish-runtime.yml +++ b/.github/workflows/publish-runtime.yml @@ -27,12 +27,10 @@ jobs: ref: ${{ github.event.inputs.to }} - name: Srtool build id: srtool_build - uses: chevdor/srtool-actions@v0.4.0 - env: - BUILD_OPTS: --features on-chain-release-build + uses: chevdor/srtool-actions@v0.5.0 with: chain: ${{ matrix.chain }} - tag: 1.57.0 + tag: 1.62.0 - name: Summary run: | echo '${{ steps.srtool_build.outputs.json }}' | jq . > ${{ matrix.chain }}-srtool-digest.json diff --git a/.github/workflows/upgrade-typescript-api.yml b/.github/workflows/upgrade-typescript-api.yml index 55edbf7cda..0bafaefa3e 100644 --- a/.github/workflows/upgrade-typescript-api.yml +++ b/.github/workflows/upgrade-typescript-api.yml @@ -3,11 +3,11 @@ on: workflow_dispatch: inputs: spec_version: - description: runtime spec version + description: runtime spec version (ex. 1601) required: true jobs: - create-tracing-runtime: + upgrading-typescript-api: runs-on: ubuntu-latest steps: - name: Checkout @@ -25,6 +25,7 @@ jobs: - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: + base: master branch: "typescript-api-${{ github.event.inputs.spec_version }}" commit-message: typescript API v0.${{ github.event.inputs.spec_version }}.0" draft: true diff --git a/.gitignore b/.gitignore index c2513c4999..9327ffb291 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ /tests/binaries /tests/runtimes /tests/specs +/tests/build /tests/rococo*.json # Moonbeam-Launch diff --git a/.prettierignore b/.prettierignore index fb1563324f..c7da83624e 100644 --- a/.prettierignore +++ b/.prettierignore @@ -27,3 +27,6 @@ tests/util/tracer/blockscout_tracer* # Dist folders should not be formatted */dist/ + +# Typescript-api is autogenerated +/typescript-api/ diff --git a/Cargo.lock b/Cargo.lock index b325118a7a..a07de9b4b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,11 +25,11 @@ dependencies = [ "scale-info", "serde", "sha3 0.9.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", ] [[package]] @@ -64,7 +64,7 @@ checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if 1.0.0", "cipher", - "cpufeatures 0.2.2", + "cpufeatures", "opaque-debug 0.3.0", ] @@ -79,7 +79,7 @@ dependencies = [ "cipher", "ctr", "ghash", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -114,7 +114,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -250,9 +250,9 @@ dependencies = [ "parking", "polling", "slab", - "socket2 0.4.4", + "socket2", "waker-fn", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -287,7 +287,7 @@ dependencies = [ "libc", "once_cell", "signal-hook", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -301,6 +301,7 @@ dependencies = [ "async-global-executor", "async-io", "async-lock", + "async-process", "crossbeam-utils", "futures-channel", "futures-core", @@ -320,15 +321,16 @@ dependencies = [ [[package]] name = "async-std-resolver" -version = "0.20.4" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf3e776afdf3a2477ef4854b85ba0dff3bd85792f685fb3c68948b4d304e4f0" +checksum = "0f2f8a4a203be3325981310ab243a28e6e4ea55b6519bffce05d41ab60e09ad8" dependencies = [ "async-std", "async-trait", "futures-io", "futures-util", "pin-utils", + "socket2", "trust-dns-resolver", ] @@ -349,26 +351,13 @@ dependencies = [ "syn", ] -[[package]] -name = "asynchronous-codec" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4401f0a3622dad2e0763fa79e0eb328bc70fb7dccfdd645341f00d671247d6" -dependencies = [ - "bytes 1.1.0", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite 0.2.8", -] - [[package]] name = "asynchronous-codec" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0de5164e5edbf51c45fb8c2d9664ae1c095cce1b265ecf7569093c0d66ef690" dependencies = [ - "bytes 1.1.0", + "bytes", "futures-sink", "futures-util", "memchr", @@ -381,7 +370,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" dependencies = [ - "autocfg 1.1.0", + "autocfg", ] [[package]] @@ -398,7 +387,7 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -413,15 +402,6 @@ dependencies = [ "syn", ] -[[package]] -name = "autocfg" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" -dependencies = [ - "autocfg 1.1.0", -] - [[package]] name = "autocfg" version = "1.1.0" @@ -469,12 +449,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" -[[package]] -name = "base58" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" - [[package]] name = "base58" version = "0.2.0" @@ -493,12 +467,6 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" -[[package]] -name = "base64ct" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71acf5509fc522cce1b100ac0121c635129bfd4d91cdf036bcc9b9935f97ccf5" - [[package]] name = "beef" version = "0.5.1" @@ -511,7 +479,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "beefy-primitives", "fnv", @@ -520,7 +488,7 @@ dependencies = [ "hex", "log", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-chain-spec", "sc-client-api", "sc-finality-grandpa", @@ -528,14 +496,15 @@ dependencies = [ "sc-network", "sc-network-gossip", "sc-utils", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-keystore", + "sp-mmr-primitives", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", "wasm-timer", @@ -544,43 +513,40 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "beefy-gadget", "beefy-primitives", "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", + "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-rpc", "sc-utils", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "thiserror", ] [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] @@ -617,6 +583,22 @@ dependencies = [ "shlex", ] +[[package]] +name = "bip32" +version = "0.4.0" +source = "git+https://github.com/purestake/crates?branch=bip32-v0.4.0-fix#e64488955372fb10ee8c2d77bb02103f2edf9acb" +dependencies = [ + "bs58", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.11.0", + "rand_core 0.6.3", + "ripemd", + "sha2 0.10.2", + "subtle", + "zeroize", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -635,17 +617,6 @@ dependencies = [ "wyz", ] -[[package]] -name = "blake2" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", - "opaque-debug 0.3.0", -] - [[package]] name = "blake2" version = "0.10.4" @@ -667,39 +638,24 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "0.5.11" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +checksum = "72936ee4afc7f8f736d1c38383b56480b5497b4617b4a77bdbf1d2ababc76127" dependencies = [ "arrayref", - "arrayvec 0.5.2", + "arrayvec 0.7.2", "constant_time_eq", ] [[package]] name = "blake2s_simd" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e461a7034e85b211a4acb57ee2e6730b32912b06c08cc242243c39fc21ae6a2" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "constant_time_eq", -] - -[[package]] -name = "blake3" -version = "0.3.8" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3" +checksum = "db539cc2b5f6003621f1cd9ef92d7ded8ea5232c7de0f9faa2de251cd98730d4" dependencies = [ "arrayref", - "arrayvec 0.5.2", - "cc", - "cfg-if 0.1.10", + "arrayvec 0.7.2", "constant_time_eq", - "crypto-mac 0.8.0", - "digest 0.9.0", ] [[package]] @@ -778,9 +734,9 @@ dependencies = [ [[package]] name = "bounded-vec" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b47cca82fca99417fe405f09d93bb8fff90bdd03d13c631f18096ee123b4281c" +checksum = "3372be4090bf9d4da36bd8ba7ce6ca1669503d0cf6e667236c6df7f053153eb6" dependencies = [ "thiserror", ] @@ -788,142 +744,142 @@ dependencies = [ [[package]] name = "bp-header-chain" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-runtime", "finality-grandpa", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-finality-grandpa", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "bp-message-dispatch" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-runtime", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "scale-info", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-std", ] [[package]] name = "bp-messages" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitvec", "bp-runtime", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-std", ] [[package]] name = "bp-polkadot-core" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-messages", "bp-runtime", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-runtime", + "sp-std", + "sp-version", ] [[package]] name = "bp-rococo" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-messages", "bp-polkadot-core", "bp-runtime", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", + "sp-runtime", + "sp-std", + "sp-version", ] [[package]] name = "bp-runtime" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "hash-db", "num-traits", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", ] [[package]] name = "bp-test-utils" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-header-chain", "ed25519-dalek", "finality-grandpa", "parity-scale-codec", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", "sp-finality-grandpa", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "bp-wococo" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-messages", "bp-polkadot-core", "bp-rococo", "bp-runtime", "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-runtime", + "sp-std", ] [[package]] name = "bridge-runtime-common" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-message-dispatch", "bp-messages", "bp-runtime", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "hash-db", "pallet-bridge-dispatch", "pallet-bridge-grandpa", @@ -931,12 +887,12 @@ dependencies = [ "pallet-transaction-payment", "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", ] [[package]] @@ -944,6 +900,9 @@ name = "bs58" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" +dependencies = [ + "sha2 0.9.9", +] [[package]] name = "bstr" @@ -954,7 +913,6 @@ dependencies = [ "lazy_static", "memchr", "regex-automata", - "serde", ] [[package]] @@ -990,16 +948,6 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -dependencies = [ - "byteorder", - "iovec", -] - [[package]] name = "bytes" version = "1.1.0" @@ -1092,21 +1040,21 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chacha20" -version = "0.7.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fee7ad89dc1128635074c268ee661f90c3f7e83d9fd12910608c36b47d6c3412" +checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91" dependencies = [ "cfg-if 1.0.0", "cipher", - "cpufeatures 0.1.5", + "cpufeatures", "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1580317203210c517b6d44794abfbe600698276db18127e37ad3e69bf5e848e5" +checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a" dependencies = [ "aead", "chacha20", @@ -1125,18 +1073,20 @@ dependencies = [ "num-integer", "num-traits", "time", - "winapi 0.3.9", + "winapi", ] [[package]] name = "cid" -version = "0.6.1" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff0e3bc0b6446b3f9663c1a6aba6ef06c5aeaa1bc92bd18077be337198ab9768" +checksum = "fc949bff6704880faf064c42a4854032ab07bfcf3a4fcb82a57470acededb69c" dependencies = [ + "core2", "multibase", - "multihash 0.13.2", - "unsigned-varint 0.5.1", + "multihash", + "serde", + "unsigned-varint", ] [[package]] @@ -1185,16 +1135,16 @@ dependencies = [ [[package]] name = "clap" -version = "3.1.6" +version = "3.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123" +checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b" dependencies = [ "atty", "bitflags", "clap_derive", + "clap_lex", "indexmap", "lazy_static", - "os_str_bytes", "strsim 0.10.0", "termcolor", "textwrap 0.15.0", @@ -1202,9 +1152,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.1.4" +version = "3.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16" +checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c" dependencies = [ "heck 0.4.0", "proc-macro-error", @@ -1214,35 +1164,12 @@ dependencies = [ ] [[package]] -name = "cli-table" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84ed8652883003051b558c7f650be7668e68f73c9ef6574ba0be9119a2fec9d3" -dependencies = [ - "cli-table-derive", - "csv", - "termcolor", - "unicode-width", -] - -[[package]] -name = "cli-table-derive" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efe942512e068e15991cbcef4e8182884555febbb21b5b4faf5dd5561850141a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "cloudabi" -version = "0.0.3" +name = "clap_lex" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +checksum = "87eba3c8c7f42ef17f6c659fc7416d0f4758cd3e58861ee63c5fa4a4dde649e4" dependencies = [ - "bitflags", + "os_str_bytes", ] [[package]] @@ -1257,6 +1184,17 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "comfy-table" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b103d85ca6e209388771bfb7aa6b68a7aeec4afbf6f0a0264bfbf50360e5212e" +dependencies = [ + "strum 0.23.0", + "strum_macros 0.23.1", + "unicode-width", +] + [[package]] name = "concurrent-queue" version = "1.2.2" @@ -1276,7 +1214,7 @@ dependencies = [ "libc", "once_cell", "terminal_size", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1314,21 +1252,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] -name = "cpp_demangle" -version = "0.3.5" +name = "core2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" dependencies = [ - "cfg-if 1.0.0", + "memchr", ] [[package]] -name = "cpufeatures" -version = "0.1.5" +name = "cpp_demangle" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c99696f6c9dd7f35d486b9d04d7e6e202aa3e8c40d553f2fdf5e7e0c6a71ef" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" dependencies = [ - "libc", + "cfg-if 1.0.0", ] [[package]] @@ -1342,18 +1280,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62fc68cdb867b7d27b5f33cd65eb11376dfb41a2d09568a1a2c2bc1dc204f4ef" +checksum = "38faa2a16616c8e78a18d37b4726b98bfd2de192f2fdc8a39ddf568a408a0f75" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31253a44ab62588f8235a996cc9b0636d98a299190069ced9628b8547329b47a" +checksum = "26f192472a3ba23860afd07d2b0217dc628f21fcc72617aa1336d98e1671f33b" dependencies = [ "cranelift-bforest", "cranelift-codegen-meta", @@ -1362,51 +1300,51 @@ dependencies = [ "gimli", "log", "regalloc", - "smallvec 1.8.0", + "smallvec", "target-lexicon", ] [[package]] name = "cranelift-codegen-meta" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a20ab4627d30b702fb1b8a399882726d216b8164d3b3fa6189e3bf901506afe" +checksum = "0f32ddb89e9b89d3d9b36a5b7d7ea3261c98235a76ac95ba46826b8ec40b1a24" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6687d9668dacfed4468361f7578d86bded8ca4db978f734d9b631494bebbb5b8" +checksum = "01fd0d9f288cc1b42d9333b7a776b17e278fc888c28e6a0f09b5573d45a150bc" [[package]] name = "cranelift-entity" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77c5d72db97ba2cb36f69037a709edbae0d29cb25503775891e7151c5c874bf" +checksum = "9e3bfe172b83167604601faf9dc60453e0d0a93415b57a9c4d1a7ae6849185cf" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "426dca83f63c7c64ea459eb569aadc5e0c66536c0042ed5d693f91830e8750d0" +checksum = "a006e3e32d80ce0e4ba7f1f9ddf66066d052a8c884a110b91d05404d6ce26dce" dependencies = [ "cranelift-codegen", "log", - "smallvec 1.8.0", + "smallvec", "target-lexicon", ] [[package]] name = "cranelift-native" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8007864b5d0c49b026c861a15761785a2871124e401630c03ef1426e6d0d559e" +checksum = "501241b0cdf903412ec9075385ac9f2b1eb18a89044d1538e97fab603231f70c" dependencies = [ "cranelift-codegen", "libc", @@ -1415,16 +1353,16 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.80.1" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94cf12c071415ba261d897387ae5350c4d83c238376c8c5a96514ecfa2ea66a3" +checksum = "16d9e4211bbc3268042a96dd4de5bd979cda22434991d035f5f8eacba987fad2" dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", "itertools", "log", - "smallvec 1.8.0", + "smallvec", "wasmparser", "wasmtime-types", ] @@ -1469,7 +1407,7 @@ dependencies = [ "crossbeam-utils", "lazy_static", "memoffset", - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -1492,37 +1430,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "crowdloan-rewards-precompiles" -version = "0.6.0" -dependencies = [ - "cumulus-pallet-parachain-system", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-test-relay-sproof-builder", - "derive_more", - "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "num_enum", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-crowdloan-rewards", - "pallet-evm", - "pallet-scheduler", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parity-scale-codec", - "precompile-utils", - "rustc-hex", - "scale-info", - "serde", - "sha3 0.9.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - [[package]] name = "crunchy" version = "0.2.2" @@ -1537,7 +1444,7 @@ checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" dependencies = [ "generic-array 0.14.5", "rand_core 0.6.3", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -1551,16 +1458,6 @@ dependencies = [ "typenum 1.15.0", ] -[[package]] -name = "crypto-mac" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" -dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", -] - [[package]] name = "crypto-mac" version = "0.8.0" @@ -1568,7 +1465,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ "generic-array 0.14.5", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -1578,38 +1475,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ "generic-array 0.14.5", - "subtle 2.4.1", -] - -[[package]] -name = "csv" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" -dependencies = [ - "bstr", - "csv-core", - "itoa 0.4.8", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" -dependencies = [ - "memchr", -] - -[[package]] -name = "ct-logs" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8" -dependencies = [ - "sct 0.6.1", + "subtle", ] [[package]] @@ -1645,18 +1511,18 @@ dependencies = [ [[package]] name = "cumulus-client-cli" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ - "clap 3.1.6", + "clap 3.1.18", "sc-cli", "sc-service", - "url 2.2.2", + "url", ] [[package]] name = "cumulus-client-collator" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -1664,23 +1530,23 @@ dependencies = [ "cumulus-relay-chain-interface", "futures 0.3.21", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-node-primitives", "polkadot-node-subsystem", "polkadot-overseer", "polkadot-primitives", "sc-client-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "tracing", ] [[package]] name = "cumulus-client-consensus-common" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -1690,34 +1556,34 @@ dependencies = [ "polkadot-primitives", "sc-client-api", "sc-consensus", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-trie", "tracing", ] [[package]] name = "cumulus-client-consensus-relay-chain" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "async-trait", "cumulus-client-consensus-common", "cumulus-primitives-core", "cumulus-relay-chain-interface", "futures 0.3.21", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-client-api", "sc-consensus", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-runtime", "substrate-prometheus-endpoint", "tracing", ] @@ -1725,7 +1591,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -1733,24 +1599,24 @@ dependencies = [ "futures 0.3.21", "futures-timer", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-node-primitives", "polkadot-parachain", "polkadot-primitives", "sc-client-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-state-machine", "tracing", ] [[package]] name = "cumulus-client-pov-recovery" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-primitives-core", "cumulus-relay-chain-interface", @@ -1764,17 +1630,17 @@ dependencies = [ "rand 0.8.5", "sc-client-api", "sc-consensus", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-consensus", "sp-maybe-compressed-blob", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "tracing", ] [[package]] name = "cumulus-client-service" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-client-cli", "cumulus-client-collator", @@ -1783,7 +1649,7 @@ dependencies = [ "cumulus-primitives-core", "cumulus-relay-chain-interface", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-overseer", "polkadot-primitives", "sc-chain-spec", @@ -1793,28 +1659,28 @@ dependencies = [ "sc-service", "sc-telemetry", "sc-tracing", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "tracing", ] [[package]] name = "cumulus-pallet-dmp-queue" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", "xcm", "xcm-executor", ] @@ -1822,39 +1688,39 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-pallet-parachain-system-proc-macro", "cumulus-primitives-core", "cumulus-primitives-parachain-inherent", "environmental", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "impl-trait-for-tuples", "log", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "parity-scale-codec", "polkadot-parachain", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-externalities", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", + "sp-version", "xcm", ] [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -1863,34 +1729,34 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", "serde", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", "xcm", ] [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "rand_chacha 0.3.1", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", "xcm", "xcm-executor", ] @@ -1898,23 +1764,23 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain", "polkadot-primitives", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-runtime", + "sp-std", + "sp-trie", ] [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -1923,79 +1789,82 @@ dependencies = [ "parity-scale-codec", "sc-client-api", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-storage", + "sp-trie", "tracing", ] [[package]] name = "cumulus-primitives-timestamp" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-primitives-core", "futures 0.3.21", "parity-scale-codec", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-inherents", + "sp-std", + "sp-timestamp", ] [[package]] name = "cumulus-primitives-utility" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain", "polkadot-primitives", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", + "sp-trie", "xcm", ] [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "async-trait", "cumulus-primitives-core", "cumulus-relay-chain-interface", "futures 0.3.21", "futures-timer", - "parking_lot 0.12.0", + "parking_lot 0.12.1", + "polkadot-cli", "polkadot-client", "polkadot-service", + "sc-cli", "sc-client-api", "sc-consensus-babe", "sc-network", "sc-service", + "sc-sysinfo", "sc-telemetry", "sc-tracing", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-state-machine", "tracing", ] [[package]] name = "cumulus-relay-chain-interface" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2003,23 +1872,23 @@ dependencies = [ "futures 0.3.21", "jsonrpsee-core", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-overseer", "polkadot-service", "sc-client-api", "sc-service", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-state-machine", "thiserror", ] [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "async-trait", "backoff", @@ -2029,30 +1898,30 @@ dependencies = [ "futures-timer", "jsonrpsee", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-service", "sc-client-api", "sc-rpc-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-storage", "tracing", - "url 2.2.2", + "url", ] [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", "polkadot-primitives", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-state-machine", + "sp-std", ] [[package]] @@ -2064,7 +1933,7 @@ dependencies = [ "byteorder", "digest 0.8.1", "rand_core 0.5.1", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -2077,7 +1946,20 @@ dependencies = [ "byteorder", "digest 0.9.0", "rand_core 0.5.1", - "subtle 2.4.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "4.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4033478fbf70d6acf2655ac70da91ee65852d69daf7a67bf7a2f518fb47aafcf" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.6.3", + "subtle", "zeroize", ] @@ -2172,7 +2054,7 @@ checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ "block-buffer 0.10.2", "crypto-common", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -2202,7 +2084,7 @@ checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" dependencies = [ "libc", "redox_users", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2213,7 +2095,7 @@ checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2240,9 +2122,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "0.4.8" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" +checksum = "5caaa75cbd2b960ff1e5392d2cfb1f44717fffe12fc1f32b7b5d1267f99732a6" [[package]] name = "dyn-clonable" @@ -2279,6 +2161,7 @@ checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9" dependencies = [ "der", "elliptic-curve", + "rfc6979", "signature", ] @@ -2325,7 +2208,7 @@ dependencies = [ "group", "rand_core 0.6.3", "sec1", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -2337,9 +2220,9 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "enum-as-inner" -version = "0.3.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" +checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" dependencies = [ "heck 0.4.0", "proc-macro2", @@ -2369,9 +2252,9 @@ dependencies = [ [[package]] name = "enumn" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e58b112d5099aa0857c5d05f0eacab86406dd8c0f85fe5d320a13256d29ecf4" +checksum = "052bc8773a98bd051ff37db74a8a25f00e6bfa2cbd03373390c72e9f7afbf344" dependencies = [ "proc-macro2", "quote", @@ -2405,7 +2288,7 @@ checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" dependencies = [ "errno-dragonfly", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2451,7 +2334,7 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23750149fe8834c0e24bb9adcbacbe06c45b9861f15df53e09f26cb7c4ab91ef" dependencies = [ - "bytes 1.1.0", + "bytes", "ethereum-types", "hash-db", "hash256-std-hasher", @@ -2489,8 +2372,7 @@ checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" [[package]] name = "evm" version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8ff320c1e25e7f6d676858f16ffd9b0493d2cc67c3d900c6f2ed027b747f43" +source = "git+https://github.com/rust-blockchain/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "auto_impl", "environmental", @@ -2510,8 +2392,7 @@ dependencies = [ [[package]] name = "evm-core" version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d4537041d3a3438d59b2d01bd950ce89fb1ccb3cf21d9331193c10be12e849f" +source = "git+https://github.com/rust-blockchain/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "parity-scale-codec", "primitive-types", @@ -2522,8 +2403,7 @@ dependencies = [ [[package]] name = "evm-gasometer" version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6181da8734c86873ac9b3f9886d4e00105361039dcfb9f621be9a0ddb8f43961" +source = "git+https://github.com/rust-blockchain/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "environmental", "evm-core", @@ -2534,8 +2414,7 @@ dependencies = [ [[package]] name = "evm-runtime" version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6157af91ca70fcf3581afaea1fa25974a71b9ef63d454c08dfba93ab0c7715d" +source = "git+https://github.com/rust-blockchain/evm?branch=master#51b8c2ce3104265e1fd5bb0fe5cdfd2e0938239c" dependencies = [ "auto_impl", "environmental", @@ -2555,17 +2434,7 @@ dependencies = [ "evm-gasometer", "evm-runtime", "parity-scale-codec", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "exit-future" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8013f441e38e31c670e7f34ec8f1d5d3a2bd9d303c1ff83976ca886005e8f48" -dependencies = [ - "futures 0.1.31", - "parking_lot 0.7.1", + "sp-runtime-interface", ] [[package]] @@ -2583,7 +2452,7 @@ version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881" dependencies = [ - "blake3 1.3.1", + "blake3", "fs-err", "proc-macro2", "quote", @@ -2595,7 +2464,7 @@ version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3774182a5df13c3d1690311ad32fbe913feef26baba609fa2dd5f72042bd2ab6" dependencies = [ - "blake2 0.10.4", + "blake2", "fs-err", "proc-macro2", "quote", @@ -2647,7 +2516,7 @@ checksum = "f5aa1e3ae159e592ad222dc90c5acbad632b527779ba88486abe92782ab268bd" dependencies = [ "expander 0.0.4", "indexmap", - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -2657,7 +2526,7 @@ dependencies = [ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "async-trait", "fc-db", @@ -2665,32 +2534,34 @@ dependencies = [ "fp-rpc", "sc-client-api", "sc-consensus", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "thiserror", ] [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "fp-storage", "kvdb-rocksdb", + "parity-db", "parity-scale-codec", - "parking_lot 0.12.0", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "parking_lot 0.12.1", + "sc-client-db", + "sp-core", "sp-database", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", ] [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "fc-db", "fp-consensus", @@ -2699,15 +2570,15 @@ dependencies = [ "futures-timer", "log", "sc-client-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", ] [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "ethereum", "ethereum-types", @@ -2718,12 +2589,11 @@ dependencies = [ "fp-storage", "futures 0.3.21", "hex", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-pubsub", + "hex-literal", + "jsonrpsee", "libsecp256k1 0.7.0", "log", - "lru 0.6.6", + "lru 0.7.7", "pallet-ethereum", "parity-scale-codec", "prometheus", @@ -2735,13 +2605,13 @@ dependencies = [ "sc-service", "sc-transaction-pool", "sc-transaction-pool-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-storage", "substrate-prometheus-endpoint", "tokio", ] @@ -2749,14 +2619,11 @@ dependencies = [ [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "ethereum", "ethereum-types", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", + "jsonrpsee", "rlp", "rustc-hex", "serde", @@ -2779,7 +2646,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2958d04124b9f27f175eaeb9a9f383d026098aa837eadd8ba22c11f13a05b9e" dependencies = [ "rand_core 0.6.3", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -2861,7 +2728,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", ] @@ -2873,169 +2740,166 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" dependencies = [ "matches", - "percent-encoding 2.1.0", + "percent-encoding", ] [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" +dependencies = [ + "ethereum", + "parity-scale-codec", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "fp-ethereum" +version = "1.0.0-dev" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "ethereum", + "ethereum-types", + "fp-evm", + "frame-support", "parity-scale-codec", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-std", ] [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "evm", + "frame-support", "parity-scale-codec", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-std", ] [[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "ethereum", "ethereum-types", "fp-evm", "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "ethereum", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "parity-util-mem", "scale-info", "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", ] [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "frame-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "linregress", - "log", "parity-scale-codec", - "paste", - "scale-info", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", ] [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "frame-support", + "frame-system", "linregress", "log", "parity-scale-codec", "paste", "scale-info", "serde", - "sp-api 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", + "sp-storage", ] [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "Inflector", "chrono", - "clap 3.1.6", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "clap 3.1.18", + "comfy-table", + "frame-benchmarking", + "frame-support", + "frame-system", "handlebars", "hash-db", "hex", "itertools", "kvdb", + "lazy_static", "linked-hash-map", "log", "memory-db", "parity-scale-codec", "rand 0.8.5", + "rand_pcg 0.3.1", "sc-block-builder", "sc-cli", "sc-client-api", "sc-client-db", "sc-executor", "sc-service", + "sc-sysinfo", "serde", "serde_json", "serde_nanos", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-database", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-externalities", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-trie", + "tempfile", + "thiserror", "thousands", ] [[package]] name = "frame-election-provider-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -3044,33 +2908,33 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "frame-election-provider-solution-type", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", "sp-npos-elections", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", ] [[package]] @@ -3088,92 +2952,40 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "bitflags", "frame-metadata", - "frame-support-procedural 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support-procedural", "impl-trait-for-tuples", + "k256", "log", "once_cell", "parity-scale-codec", "paste", "scale-info", "serde", - "smallvec 1.8.0", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core-hashing-proc-macro 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-arithmetic", + "sp-core", + "sp-core-hashing-proc-macro", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-state-machine", + "sp-std", + "sp-tracing", "tt-call", ] [[package]] -name = "frame-support" +name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "bitflags", - "frame-metadata", - "frame-support-procedural 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "impl-trait-for-tuples", - "log", - "once_cell", - "parity-scale-codec", - "paste", - "scale-info", - "serde", - "smallvec 1.8.0", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-core-hashing-proc-macro 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "tt-call", -] - -[[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "Inflector", - "frame-support-procedural-tools 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "Inflector", - "frame-support-procedural-tools 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-support-procedural-tools-derive 3.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "proc-macro-crate 1.1.3", + "frame-support-procedural-tools", "proc-macro2", "quote", "syn", @@ -3182,20 +2994,10 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-support-procedural-tools-derive 3.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -3204,7 +3006,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "proc-macro2", "quote", @@ -3214,70 +3016,53 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "frame-system" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "frame-support", "log", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-version", ] [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", ] [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "sp-api", + "sp-runtime", + "sp-std", ] [[package]] @@ -3295,7 +3080,7 @@ dependencies = [ "lazy_static", "libc", "libloading 0.5.2", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3305,7 +3090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3314,28 +3099,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - [[package]] name = "funty" version = "2.0.0" @@ -3425,13 +3188,13 @@ dependencies = [ [[package]] name = "futures-rustls" -version = "0.21.1" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b" +checksum = "e01fe9932a224b72b45336d96040aa86386d674a31d0af27d800ea7bc8ca97fe" dependencies = [ "futures-io", - "rustls 0.19.1", - "webpki 0.21.4", + "rustls", + "webpki", ] [[package]] @@ -3576,7 +3339,7 @@ checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89" dependencies = [ "ff", "rand_core 0.6.3", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -3585,7 +3348,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b" dependencies = [ - "bytes 1.1.0", + "bytes", "fnv", "futures-core", "futures-sink", @@ -3690,16 +3453,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" -[[package]] -name = "hmac" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" -dependencies = [ - "crypto-mac 0.7.0", - "digest 0.8.1", -] - [[package]] name = "hmac" version = "0.8.1" @@ -3721,14 +3474,12 @@ dependencies = [ ] [[package]] -name = "hmac-drbg" -version = "0.2.0" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.8.1", - "generic-array 0.12.4", - "hmac 0.7.1", + "digest 0.10.3", ] [[package]] @@ -3750,7 +3501,7 @@ checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ "libc", "match_cfg", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3759,7 +3510,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" dependencies = [ - "bytes 1.1.0", + "bytes", "fnv", "itoa 1.0.1", ] @@ -3770,7 +3521,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" dependencies = [ - "bytes 1.1.0", + "bytes", "http", "pin-project-lite 0.2.8", ] @@ -3799,7 +3550,7 @@ version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ - "bytes 1.1.0", + "bytes", "futures-channel", "futures-core", "futures-util", @@ -3810,30 +3561,13 @@ dependencies = [ "httpdate", "itoa 1.0.1", "pin-project-lite 0.2.8", - "socket2 0.4.4", + "socket2", "tokio", "tower-service", "tracing", "want", ] -[[package]] -name = "hyper-rustls" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64" -dependencies = [ - "ct-logs", - "futures-util", - "hyper", - "log", - "rustls 0.19.1", - "rustls-native-certs 0.5.0", - "tokio", - "tokio-rustls 0.22.0", - "webpki 0.21.4", -] - [[package]] name = "hyper-rustls" version = "0.23.0" @@ -3843,22 +3577,10 @@ dependencies = [ "http", "hyper", "log", - "rustls 0.20.4", - "rustls-native-certs 0.6.1", + "rustls", + "rustls-native-certs", "tokio", - "tokio-rustls 0.23.3", - "webpki-roots 0.22.2", -] - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "tokio-rustls", ] [[package]] @@ -3874,39 +3596,30 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2273e421f7c4f0fc99e1934fe4776f59d8df2972f4199d703fc0da9f2a9f73de" -dependencies = [ - "if-addrs-sys", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "if-addrs-sys" -version = "0.3.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de74b9dd780476e837e5eb5ab7c88b49ed304126e412030a0adba99c8efe79ea" +checksum = "cbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9" dependencies = [ - "cc", "libc", + "winapi", ] [[package]] name = "if-watch" -version = "0.2.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8ab7f67bad3240049cb24fb9cb0b4c2c6af4c245840917fbbdededeee91179" +checksum = "ae8f4a3c3d4c89351ca83e120c1c00b27df945d38e05695668c9d4b4f7bc52f3" dependencies = [ "async-io", + "core-foundation", + "fnv", "futures 0.3.21", - "futures-lite", "if-addrs", "ipnet", - "libc", "log", - "winapi 0.3.9", + "rtnetlink", + "system-configuration", + "windows", ] [[package]] @@ -3953,7 +3666,7 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" dependencies = [ - "autocfg 1.1.0", + "autocfg", "hashbrown 0.11.2", "serde", ] @@ -3984,21 +3697,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ef6787e7f0faedc040f95716bdd0e62bcfcf4ba93da053b62dea2691c13864" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "iovec" -version = "0.1.4" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] +checksum = "ec58677acfea8a15352d42fc87d11d63596ade9239e0a7c9352914417515dbe6" [[package]] name = "ip_network" @@ -4008,13 +3709,13 @@ checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" [[package]] name = "ipconfig" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" +checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" dependencies = [ - "socket2 0.3.19", + "socket2", "widestring", - "winapi 0.3.9", + "winapi", "winreg", ] @@ -4063,186 +3764,60 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonrpc-client-transports" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b99d4207e2a04fb4581746903c2bb7eb376f88de9c699d0f3e10feeac0cd3a" -dependencies = [ - "derive_more", - "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-pubsub", - "log", - "serde", - "serde_json", - "url 1.7.2", -] - -[[package]] -name = "jsonrpc-core" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f7f76aef2d054868398427f6c54943cf3d1caa9a7ec7d0c38d69df97a965eb" -dependencies = [ - "futures 0.3.21", - "futures-executor", - "futures-util", - "log", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "jsonrpc-core-client" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b51da17abecbdab3e3d4f26b01c5ec075e88d3abe3ab3b05dc9aa69392764ec0" -dependencies = [ - "futures 0.3.21", - "jsonrpc-client-transports", -] - -[[package]] -name = "jsonrpc-derive" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b939a78fa820cdfcb7ee7484466746a7377760970f6f9c6fe19f9edcc8a38d2" -dependencies = [ - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "jsonrpc-http-server" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1dea6e07251d9ce6a552abfb5d7ad6bc290a4596c8dcc3d795fae2bbdc1f3ff" -dependencies = [ - "futures 0.3.21", - "hyper", - "jsonrpc-core", - "jsonrpc-server-utils", - "log", - "net2", - "parking_lot 0.11.2", - "unicase", -] - -[[package]] -name = "jsonrpc-ipc-server" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "382bb0206323ca7cda3dcd7e245cea86d37d02457a02a975e3378fb149a48845" -dependencies = [ - "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-server-utils", - "log", - "parity-tokio-ipc", - "parking_lot 0.11.2", - "tower-service", -] - -[[package]] -name = "jsonrpc-pubsub" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240f87695e6c6f62fb37f05c02c04953cf68d6408b8c1c89de85c7a0125b1011" -dependencies = [ - "futures 0.3.21", - "jsonrpc-core", - "lazy_static", - "log", - "parking_lot 0.11.2", - "rand 0.7.3", - "serde", -] - -[[package]] -name = "jsonrpc-server-utils" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4fdea130485b572c39a460d50888beb00afb3e35de23ccd7fad8ff19f0e0d4" -dependencies = [ - "bytes 1.1.0", - "futures 0.3.21", - "globset", - "jsonrpc-core", - "lazy_static", - "log", - "tokio", - "tokio-stream", - "tokio-util 0.6.9", - "unicase", -] - -[[package]] -name = "jsonrpc-ws-server" -version = "18.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f892c7d766369475ab7b0669f417906302d7c0fb521285c0a0c92e52e7c8e946" -dependencies = [ - "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-server-utils", - "log", - "parity-ws", - "parking_lot 0.11.2", - "slab", -] - [[package]] name = "jsonrpsee" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91dc760c341fa81173f9a434931aaf32baad5552b0230cc6c93e8fb7eaad4c19" +checksum = "a1f2ab5a60e558e74ea93bcf5164ebc47939a7fff8938fa9b5233bbc63e16061" dependencies = [ "jsonrpsee-core", - "jsonrpsee-http-client", + "jsonrpsee-http-server", "jsonrpsee-proc-macros", "jsonrpsee-types", "jsonrpsee-ws-client", + "jsonrpsee-ws-server", + "tracing", ] [[package]] name = "jsonrpsee-client-transport" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765f7a36d5087f74e3b3b47805c2188fef8eb54afcb587b078d9f8ebfe9c7220" +checksum = "26d682f4a55081a2be3e639280c640523070e4aeb8ee2fd8dd9168fdae57a9db" dependencies = [ - "futures 0.3.21", + "futures-util", "http", "jsonrpsee-core", "jsonrpsee-types", "pin-project 1.0.10", - "rustls-native-certs 0.6.1", + "rustls-native-certs", "soketto", "thiserror", "tokio", - "tokio-rustls 0.23.3", - "tokio-util 0.7.2", + "tokio-rustls", + "tokio-util 0.7.1", "tracing", - "webpki-roots 0.22.2", + "webpki-roots", ] [[package]] name = "jsonrpsee-core" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82ef77ecd20c2254d54f5da8c0738eacca61e6b6511268a8f2753e3148c6c706" +checksum = "6e27462b21279edf9a6a91f46ffbe125e9cdc58b901d2e08bf59b31a47d7d0ab" dependencies = [ "anyhow", "arrayvec 0.7.2", + "async-lock", "async-trait", "beef", "futures-channel", + "futures-timer", "futures-util", "hyper", "jsonrpsee-types", + "parking_lot 0.12.1", + "rand 0.8.5", "rustc-hash", "serde", "serde_json", @@ -4253,31 +3828,31 @@ dependencies = [ ] [[package]] -name = "jsonrpsee-http-client" -version = "0.10.1" +name = "jsonrpsee-http-server" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92709e0b8255691f4df954a0176b1cbc3312f151e7ed2e643812e8bd121f1d1c" +checksum = "7178f16eabd7154c094e24d295b9ee355ec1e5f24c328759c56255ff7bbd4548" dependencies = [ - "async-trait", + "futures-channel", + "futures-util", + "globset", "hyper", - "hyper-rustls 0.23.0", "jsonrpsee-core", "jsonrpsee-types", - "rustc-hash", - "serde", + "lazy_static", "serde_json", - "thiserror", "tokio", "tracing", + "unicase", ] [[package]] name = "jsonrpsee-proc-macros" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7291c72805bc7d413b457e50d8ef3e87aa554da65ecbbc278abb7dfc283e7f0" +checksum = "8b8d7f449cab3b747f12c3efc27f5cad537f3b597c6a3838b0fac628f4bf730a" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -4285,9 +3860,9 @@ dependencies = [ [[package]] name = "jsonrpsee-types" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b6aa52f322cbf20c762407629b8300f39bcc0cf0619840d9252a2f65fd2dd9" +checksum = "8fd11763134104122ddeb0f97e4bbe393058017dfb077db63fbf44b4dd0dd86e" dependencies = [ "anyhow", "beef", @@ -4299,15 +3874,32 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.10.1" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd66d18bab78d956df24dd0d2e41e4c00afbb818fda94a98264bdd12ce8506ac" +checksum = "76f15180afb3761c7a3a32c0a8b680788176dcfdfe725b24c1758c90b1d1595b" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", "jsonrpsee-types", ] +[[package]] +name = "jsonrpsee-ws-server" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfb6c21556c551582b56e4e8e6e6249b0bbdb69bb7fa39efe9b9a6b54af9f206" +dependencies = [ + "futures-channel", + "futures-util", + "jsonrpsee-core", + "jsonrpsee-types", + "serde_json", + "soketto", + "tokio", + "tokio-util 0.7.1", + "tracing", +] + [[package]] name = "k256" version = "0.10.4" @@ -4326,36 +3918,26 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "kusama-runtime" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "beefy-primitives", "bitvec", "frame-election-provider-support", "frame-executive", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-rpc-runtime-api", "frame-try-runtime", "kusama-runtime-constants", "log", "pallet-authority-discovery", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", "pallet-babe", "pallet-bags-list", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-bounties", "pallet-child-bounties", "pallet-collective", @@ -4368,19 +3950,19 @@ dependencies = [ "pallet-im-online", "pallet-indices", "pallet-membership", - "pallet-mmr-primitives", "pallet-multisig", "pallet-nicks", + "pallet-nomination-pools", "pallet-offences", "pallet-preimage", "pallet-proxy", "pallet-recovery", "pallet-scheduler", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-session", "pallet-society", "pallet-staking", "pallet-staking-reward-fn", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-tips", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", @@ -4396,23 +3978,24 @@ dependencies = [ "scale-info", "serde", "serde_derive", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", + "sp-arithmetic", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", "sp-npos-elections", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", "sp-transaction-pool", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-version", "static_assertions", "substrate-wasm-builder", "xcm", @@ -4422,14 +4005,14 @@ dependencies = [ [[package]] name = "kusama-runtime-constants" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "polkadot-primitives", "polkadot-runtime-common", - "smallvec 1.8.0", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-runtime", ] [[package]] @@ -4448,7 +4031,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a301d8ecb7989d4a6e2c57a49baca77d353bdbf879909debe3f375fe25d61f86" dependencies = [ "parity-util-mem", - "smallvec 1.8.0", + "smallvec", ] [[package]] @@ -4459,7 +4042,7 @@ checksum = "ece7e668abd21387aeb6628130a6f4c802787f014fa46bc83221448322250357" dependencies = [ "kvdb", "parity-util-mem", - "parking_lot 0.12.0", + "parking_lot 0.12.1", ] [[package]] @@ -4474,10 +4057,10 @@ dependencies = [ "num_cpus", "owning_ref", "parity-util-mem", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "regex", "rocksdb", - "smallvec 1.8.0", + "smallvec", ] [[package]] @@ -4508,7 +4091,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" dependencies = [ "cc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -4518,7 +4101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" dependencies = [ "cfg-if 1.0.0", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -4529,14 +4112,18 @@ checksum = "33a33a362ce288760ec6a508b94caaec573ae7d3bbbd91b87aa0bad4456839db" [[package]] name = "libp2p" -version = "0.40.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bec54343492ba5940a6c555e512c6721139835d28c59bc22febece72dfd0d9d" +checksum = "475ce2ac4a9727e53a519f6ee05b38abfcba8f0d39c4d24f103d184e36fd5b0f" dependencies = [ "atomic", - "bytes 1.1.0", + "bytes", "futures 0.3.21", + "futures-timer", + "getrandom 0.2.6", + "instant", "lazy_static", + "libp2p-autonat", "libp2p-core", "libp2p-deflate", "libp2p-dns", @@ -4562,17 +4149,36 @@ dependencies = [ "libp2p-websocket", "libp2p-yamux", "multiaddr", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "pin-project 1.0.10", - "smallvec 1.8.0", - "wasm-timer", + "rand 0.7.3", + "smallvec", +] + +[[package]] +name = "libp2p-autonat" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13b690e65046af6a09c0b27bd9508fa1cab0efce889de74b0b643b9d2a98f9a" +dependencies = [ + "async-trait", + "futures 0.3.21", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-request-response", + "libp2p-swarm", + "log", + "prost 0.9.0", + "prost-build", + "rand 0.8.5", ] [[package]] name = "libp2p-core" -version = "0.30.2" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86aad7d54df283db817becded03e611137698a6509d4237a96881976a162340c" +checksum = "db5b02602099fb75cb2d16f9ea860a320d6eb82ce41e95ab680912c454805cd5" dependencies = [ "asn1_der", "bs58", @@ -4586,28 +4192,28 @@ dependencies = [ "libsecp256k1 0.7.0", "log", "multiaddr", - "multihash 0.14.0", + "multihash", "multistream-select", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "pin-project 1.0.10", - "prost", + "prost 0.9.0", "prost-build", "rand 0.8.5", "ring", "rw-stream-sink", - "sha2 0.9.9", - "smallvec 1.8.0", + "sha2 0.10.2", + "smallvec", "thiserror", - "unsigned-varint 0.7.1", + "unsigned-varint", "void", "zeroize", ] [[package]] name = "libp2p-deflate" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51a800adb195f33de63f4b17b63fe64cfc23bf2c6a0d3d0d5321328664e65197" +checksum = "6b1d37f042f748e224f04785d0e987ae09a2aa518d6401d82d412dad83e360ed" dependencies = [ "flate2", "futures 0.3.21", @@ -4616,23 +4222,23 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.30.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb8f89d15cb6e3c5bc22afff7513b11bab7856f2872d3cfba86f7f63a06bc498" +checksum = "066e33e854e10b5c93fc650458bf2179c7e0d143db260b0963e44a94859817f1" dependencies = [ "async-std-resolver", "futures 0.3.21", "libp2p-core", "log", - "smallvec 1.8.0", + "smallvec", "trust-dns-resolver", ] [[package]] name = "libp2p-floodsub" -version = "0.31.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aab3d7210901ea51b7bae2b581aa34521797af8c4ec738c980bda4a06434067f" +checksum = "733d3ea6ebe7a7a85df2bc86678b93f24b015fae5fe3b3acc4c400e795a55d2d" dependencies = [ "cuckoofilter", "fnv", @@ -4640,86 +4246,90 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", + "prost 0.9.0", "prost-build", "rand 0.7.3", - "smallvec 1.8.0", + "smallvec", ] [[package]] name = "libp2p-gossipsub" -version = "0.33.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfeead619eb5dac46e65acc78c535a60aaec803d1428cca6407c3a4fc74d698d" +checksum = "a90c989a7c0969c2ab63e898da9bc735e3be53fb4f376e9c045ce516bcc9f928" dependencies = [ - "asynchronous-codec 0.6.0", + "asynchronous-codec", "base64 0.13.0", "byteorder", - "bytes 1.1.0", + "bytes", "fnv", "futures 0.3.21", "hex_fmt", + "instant", "libp2p-core", "libp2p-swarm", "log", - "prost", + "prometheus-client", + "prost 0.9.0", "prost-build", "rand 0.7.3", "regex", - "sha2 0.9.9", - "smallvec 1.8.0", - "unsigned-varint 0.7.1", + "sha2 0.10.2", + "smallvec", + "unsigned-varint", "wasm-timer", ] [[package]] name = "libp2p-identify" -version = "0.31.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca1275574183f288ff8b72d535d5ffa5ea9292ef7829af8b47dcb197c7b0dcd" +checksum = "c5ef5a5b57904c7c33d6713ef918d239dc6b7553458f3475d87f8a18e9c651c8" dependencies = [ "futures 0.3.21", + "futures-timer", "libp2p-core", "libp2p-swarm", "log", - "lru 0.6.6", - "prost", + "lru 0.7.7", + "prost 0.9.0", "prost-build", - "smallvec 1.8.0", - "wasm-timer", + "smallvec", ] [[package]] name = "libp2p-kad" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2297dc0ca285f3a09d1368bde02449e539b46f94d32d53233f53f6625bcd3ba" +checksum = "564e6bd64d177446399ed835b9451a8825b07929d6daa6a94e6405592974725e" dependencies = [ "arrayvec 0.5.2", - "asynchronous-codec 0.6.0", - "bytes 1.1.0", + "asynchronous-codec", + "bytes", "either", "fnv", "futures 0.3.21", + "futures-timer", + "instant", "libp2p-core", "libp2p-swarm", "log", - "prost", + "prost 0.9.0", "prost-build", "rand 0.7.3", - "sha2 0.9.9", - "smallvec 1.8.0", + "sha2 0.10.2", + "smallvec", + "thiserror", "uint", - "unsigned-varint 0.7.1", + "unsigned-varint", "void", - "wasm-timer", ] [[package]] name = "libp2p-mdns" -version = "0.32.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c864b64bdc8a84ff3910a0df88e6535f256191a450870f1e7e10cbf8e64d45" +checksum = "611ae873c8e280ccfab0d57c7a13cac5644f364529e233114ff07863946058b0" dependencies = [ "async-io", "data-encoding", @@ -4731,59 +4341,61 @@ dependencies = [ "libp2p-swarm", "log", "rand 0.8.5", - "smallvec 1.8.0", - "socket2 0.4.4", + "smallvec", + "socket2", "void", ] [[package]] name = "libp2p-metrics" -version = "0.1.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4af432fcdd2f8ba4579b846489f8f0812cfd738ced2c0af39df9b1c48bbb6ab2" +checksum = "985be799bb3796e0c136c768208c3c06604a38430571906a13dcfeda225a3b9d" dependencies = [ "libp2p-core", + "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", "libp2p-ping", + "libp2p-relay", "libp2p-swarm", - "open-metrics-client", + "prometheus-client", ] [[package]] name = "libp2p-mplex" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2cd64ef597f40e14bfce0497f50ecb63dd6d201c61796daeb4227078834fbf" +checksum = "442eb0c9fff0bf22a34f015724b4143ce01877e079ed0963c722d94c07c72160" dependencies = [ - "asynchronous-codec 0.6.0", - "bytes 1.1.0", + "asynchronous-codec", + "bytes", "futures 0.3.21", "libp2p-core", "log", "nohash-hasher", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "rand 0.7.3", - "smallvec 1.8.0", - "unsigned-varint 0.7.1", + "smallvec", + "unsigned-varint", ] [[package]] name = "libp2p-noise" -version = "0.33.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8772c7a99088221bb7ca9c5c0574bf55046a7ab4c319f3619b275f28c8fb87a" +checksum = "9dd7e0c94051cda67123be68cf6b65211ba3dde7277be9068412de3e7ffd63ef" dependencies = [ - "bytes 1.1.0", + "bytes", "curve25519-dalek 3.2.0", "futures 0.3.21", "lazy_static", "libp2p-core", "log", - "prost", + "prost 0.9.0", "prost-build", "rand 0.8.5", - "sha2 0.9.9", + "sha2 0.10.2", "snow", "static_assertions", "x25519-dalek", @@ -4792,33 +4404,34 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.31.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80ef7b0ec5cf06530d9eb6cf59ae49d46a2c45663bde31c25a12f682664adbcf" +checksum = "bf57a3c2e821331dda9fe612d4654d676ab6e33d18d9434a18cced72630df6ad" dependencies = [ "futures 0.3.21", + "futures-timer", + "instant", "libp2p-core", "libp2p-swarm", "log", "rand 0.7.3", "void", - "wasm-timer", ] [[package]] name = "libp2p-plaintext" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fba1a6ff33e4a274c89a3b1d78b9f34f32af13265cc5c46c16938262d4e945a" +checksum = "962c0fb0e7212fb96a69b87f2d09bcefd317935239bdc79cda900e7a8897a3fe" dependencies = [ - "asynchronous-codec 0.6.0", - "bytes 1.1.0", + "asynchronous-codec", + "bytes", "futures 0.3.21", "libp2p-core", "log", - "prost", + "prost 0.9.0", "prost-build", - "unsigned-varint 0.7.1", + "unsigned-varint", "void", ] @@ -4838,89 +4451,96 @@ dependencies = [ [[package]] name = "libp2p-relay" -version = "0.4.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2852b61c90fa8ce3c8fcc2aba76e6cefc20d648f9df29157d6b3a916278ef3e3" +checksum = "3aa754cb7bccef51ebc3c458c6bbcef89d83b578a9925438389be841527d408f" dependencies = [ - "asynchronous-codec 0.6.0", - "bytes 1.1.0", + "asynchronous-codec", + "bytes", + "either", "futures 0.3.21", "futures-timer", + "instant", "libp2p-core", "libp2p-swarm", "log", "pin-project 1.0.10", - "prost", + "prost 0.9.0", "prost-build", - "rand 0.7.3", - "smallvec 1.8.0", - "unsigned-varint 0.7.1", + "rand 0.8.5", + "smallvec", + "static_assertions", + "thiserror", + "unsigned-varint", "void", - "wasm-timer", ] [[package]] name = "libp2p-rendezvous" -version = "0.1.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14a6d2b9e7677eff61dc3d2854876aaf3976d84a01ef6664b610c77a0c9407c5" +checksum = "bbd0baab894c5b84da510b915d53264d566c3c35889f09931fe9edbd2a773bee" dependencies = [ - "asynchronous-codec 0.6.0", + "asynchronous-codec", "bimap", "futures 0.3.21", + "futures-timer", + "instant", "libp2p-core", "libp2p-swarm", "log", - "prost", + "prost 0.9.0", "prost-build", "rand 0.8.5", - "sha2 0.9.9", + "sha2 0.10.2", "thiserror", - "unsigned-varint 0.7.1", + "unsigned-varint", "void", - "wasm-timer", ] [[package]] name = "libp2p-request-response" -version = "0.13.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a877a4ced6d46bf84677e1974e8cf61fb434af73b2e96fb48d6cb6223a4634d8" +checksum = "b5e6a6fc6c9ad95661f46989473b34bd2993d14a4de497ff3b2668a910d4b869" dependencies = [ "async-trait", - "bytes 1.1.0", + "bytes", "futures 0.3.21", + "instant", "libp2p-core", "libp2p-swarm", "log", - "lru 0.7.5", "rand 0.7.3", - "smallvec 1.8.0", - "unsigned-varint 0.7.1", - "wasm-timer", + "smallvec", + "unsigned-varint", ] [[package]] name = "libp2p-swarm" -version = "0.31.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f5184a508f223bc100a12665517773fb8730e9f36fc09eefb670bf01b107ae9" +checksum = "8f0c69ad9e8f7c5fc50ad5ad9c7c8b57f33716532a2b623197f69f93e374d14c" dependencies = [ "either", + "fnv", "futures 0.3.21", + "futures-timer", + "instant", "libp2p-core", "log", + "pin-project 1.0.10", "rand 0.7.3", - "smallvec 1.8.0", + "smallvec", + "thiserror", "void", - "wasm-timer", ] [[package]] name = "libp2p-swarm-derive" -version = "0.25.0" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "072c290f727d39bdc4e9d6d1c847978693d25a673bd757813681e33e5f6c00c2" +checksum = "4f693c8c68213034d472cbb93a379c63f4f307d97c06f1c41e4985de481687a5" dependencies = [ "quote", "syn", @@ -4928,9 +4548,9 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7399c5b6361ef525d41c11fcf51635724f832baf5819b30d3d873eabb4fbae4b" +checksum = "193447aa729c85aac2376828df76d171c1a589c9e6b58fcc7f9d9a020734122c" dependencies = [ "async-io", "futures 0.3.21", @@ -4940,14 +4560,14 @@ dependencies = [ "libc", "libp2p-core", "log", - "socket2 0.4.4", + "socket2", ] [[package]] name = "libp2p-uds" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8b7563e46218165dfd60f64b96f7ce84590d75f53ecbdc74a7dd01450dc5973" +checksum = "24bdab114f7f2701757d6541266e1131b429bbae382008f207f2114ee4222dcb" dependencies = [ "async-std", "futures 0.3.21", @@ -4957,9 +4577,9 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" -version = "0.30.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1008a302b73c5020251f9708c653f5ed08368e530e247cc9cd2f109ff30042cf" +checksum = "4f6ea0f84a967ef59a16083f222c18115ae2e91db69809dce275df62e101b279" dependencies = [ "futures 0.3.21", "js-sys", @@ -4971,9 +4591,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.31.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e12df82d1ed64969371a9e65ea92b91064658604cc2576c2757f18ead9a1cf" +checksum = "c932834c3754501c368d1bf3d0fb458487a642b90fc25df082a3a2f3d3b32e37" dependencies = [ "either", "futures 0.3.21", @@ -4983,19 +4603,19 @@ dependencies = [ "quicksink", "rw-stream-sink", "soketto", - "url 2.2.2", - "webpki-roots 0.21.1", + "url", + "webpki-roots", ] [[package]] name = "libp2p-yamux" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7362abb8867d7187e7e93df17f460d554c997fc5c8ac57dc1259057f6889af" +checksum = "be902ebd89193cd020e89e89107726a38cfc0d16d18f613f4a37d046e92c7517" dependencies = [ "futures 0.3.21", "libp2p-core", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "thiserror", "yamux", ] @@ -5015,41 +4635,6 @@ dependencies = [ "tikv-jemalloc-sys", ] -[[package]] -name = "libsecp256k1" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" -dependencies = [ - "arrayref", - "crunchy", - "digest 0.8.1", - "hmac-drbg 0.2.0", - "rand 0.7.3", - "sha2 0.8.2", - "subtle 2.4.1", - "typenum 1.15.0", -] - -[[package]] -name = "libsecp256k1" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd1137239ab33b41aa9637a88a28249e5e70c40a42ccc92db7f12cc356c1fcd7" -dependencies = [ - "arrayref", - "base64 0.12.3", - "digest 0.9.0", - "hmac-drbg 0.3.0", - "libsecp256k1-core 0.2.2", - "libsecp256k1-gen-ecmult 0.2.1", - "libsecp256k1-gen-genmult 0.2.1", - "rand 0.7.3", - "serde", - "sha2 0.9.9", - "typenum 1.15.0", -] - [[package]] name = "libsecp256k1" version = "0.6.0" @@ -5059,7 +4644,7 @@ dependencies = [ "arrayref", "base64 0.12.3", "digest 0.9.0", - "hmac-drbg 0.3.0", + "hmac-drbg", "libsecp256k1-core 0.2.2", "libsecp256k1-gen-ecmult 0.2.1", "libsecp256k1-gen-genmult 0.2.1", @@ -5078,7 +4663,7 @@ dependencies = [ "arrayref", "base64 0.13.0", "digest 0.9.0", - "hmac-drbg 0.3.0", + "hmac-drbg", "libsecp256k1-core 0.3.0", "libsecp256k1-gen-ecmult 0.3.0", "libsecp256k1-gen-genmult 0.3.0", @@ -5096,7 +4681,7 @@ checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" dependencies = [ "crunchy", "digest 0.9.0", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -5107,7 +4692,7 @@ checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ "crunchy", "digest 0.9.0", - "subtle 2.4.1", + "subtle", ] [[package]] @@ -5184,19 +4769,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a261afc61b7a5e323933b402ca6a1765183687c614789b1e4db7762ed4230bca" - -[[package]] -name = "lock_api" -version = "0.1.5" +version = "0.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -dependencies = [ - "owning_ref", - "scopeguard 0.3.3", -] +checksum = "5284f00d480e1c39af34e72f8ad60b94f47007e3481cd3b731c1d67190ddc7b7" [[package]] name = "lock_api" @@ -5204,14 +4779,14 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" dependencies = [ - "scopeguard 1.1.0", + "scopeguard", ] [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", "value-bag", @@ -5228,9 +4803,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.7.5" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32613e41de4c47ab04970c348ca7ae7382cf116625755af070b008a15516a889" +checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a" dependencies = [ "hashbrown 0.11.2", ] @@ -5281,8 +4856,7 @@ dependencies = [ "flume", "futures 0.3.21", "hex-literal", - "jsonrpc-core", - "jsonrpc-derive", + "jsonrpsee", "parity-scale-codec", "tokio", "xcm", @@ -5324,18 +4898,21 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - [[package]] name = "memchr" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +[[package]] +name = "memfd" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6627dc657574b49d6ad27105ed671822be56e0d2547d413bfbf3e8d8fa92e7a" +dependencies = [ + "libc", +] + [[package]] name = "memmap2" version = "0.2.3" @@ -5360,7 +4937,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ - "autocfg 1.1.0", + "autocfg", ] [[package]] @@ -5389,12 +4966,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" -[[package]] -name = "memzero" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93c0d11ac30a033511ae414355d80f70d9f29a44a49140face477117a1ee90db" - [[package]] name = "merlin" version = "2.0.1" @@ -5407,21 +4978,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "metered-channel" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" -dependencies = [ - "coarsetime", - "crossbeam-queue", - "derive_more", - "futures 0.3.21", - "futures-timer", - "nanorand", - "thiserror", - "tracing-gum", -] - [[package]] name = "mick-jaeger" version = "0.1.8" @@ -5446,26 +5002,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" dependencies = [ "adler", - "autocfg 1.1.0", -] - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", + "autocfg", ] [[package]] @@ -5476,34 +5013,10 @@ checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" dependencies = [ "libc", "log", - "miow 0.3.7", + "miow", "ntapi", "wasi 0.11.0+wasi-snapshot-preview1", - "winapi 0.3.9", -] - -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio 0.6.23", - "slab", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", + "winapi", ] [[package]] @@ -5512,7 +5025,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -5520,7 +5033,6 @@ name = "moonbase-runtime" version = "0.8.4" dependencies = [ "account", - "crowdloan-rewards-precompiles", "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-xcm", @@ -5534,10 +5046,10 @@ dependencies = [ "fp-evm", "fp-rpc", "fp-self-contained", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", "frame-executive", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", "frame-try-runtime", @@ -5549,6 +5061,7 @@ dependencies = [ "moonbeam-relay-encoder", "moonbeam-rpc-primitives-debug", "moonbeam-rpc-primitives-txpool", + "moonbeam-runtime-common", "nimbus-primitives", "orml-traits", "orml-xcm-support", @@ -5557,79 +5070,84 @@ dependencies = [ "pallet-assets", "pallet-author-inherent", "pallet-author-mapping", - "pallet-author-mapping-precompiles", "pallet-author-slot-filter", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-base-fee", "pallet-collective", "pallet-crowdloan-rewards", "pallet-democracy", - "pallet-democracy-precompiles", "pallet-ethereum", "pallet-ethereum-chain-id", + "pallet-ethereum-xcm", "pallet-evm", - "pallet-evm-precompile-assets-erc20", + "pallet-evm-precompile-author-mapping", "pallet-evm-precompile-balances-erc20", + "pallet-evm-precompile-batch", "pallet-evm-precompile-blake2", "pallet-evm-precompile-bn128", + "pallet-evm-precompile-call-permit", + "pallet-evm-precompile-crowdloan-rewards", + "pallet-evm-precompile-democracy", "pallet-evm-precompile-dispatch", "pallet-evm-precompile-modexp", + "pallet-evm-precompile-parachain-staking", + "pallet-evm-precompile-randomness", + "pallet-evm-precompile-relay-encoder", "pallet-evm-precompile-sha3fips", "pallet-evm-precompile-simple", + "pallet-evm-precompile-xcm-transactor", + "pallet-evm-precompile-xtokens", + "pallet-evm-precompileset-assets-erc20", "pallet-identity", "pallet-maintenance-mode", "pallet-migrations", "pallet-moonbeam-orbiters", + "pallet-parachain-staking", "pallet-proxy", "pallet-proxy-genesis-companion", + "pallet-randomness", "pallet-randomness-collective-flip", "pallet-scheduler", "pallet-society", "pallet-sudo", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", "pallet-utility", "pallet-xcm", + "pallet-xcm-transactor", "parachain-info", - "parachain-staking", - "parachain-staking-precompiles", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain", "polkadot-runtime-parachains", "precompile-utils", - "relay-encoder-precompiles", "rlp", - "runtime-common", "scale-info", "serde", "session-keys-primitives", "sha3 0.8.2", "sha3 0.9.1", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", "sp-block-builder", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-debug-derive 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-debug-derive", + "sp-inherents", + "sp-io", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-std", "sp-transaction-pool", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-version", "substrate-wasm-builder", "xcm", "xcm-builder", "xcm-executor", "xcm-primitives", "xcm-simulator", - "xcm-transactor", - "xcm-transactor-precompiles", - "xtokens-precompiles", ] [[package]] @@ -5641,19 +5159,20 @@ dependencies = [ "hex", "moonbeam-cli", "moonbeam-service", - "nix", + "nix 0.23.1", "pallet-xcm", "serde", "serde_json", "tempfile", + "tracing-core", "xcm-builder", ] [[package]] name = "moonbeam-cli" -version = "0.23.0" +version = "0.25.0" dependencies = [ - "clap 3.1.6", + "clap 3.1.18", "cumulus-client-cli", "cumulus-client-service", "cumulus-primitives-core", @@ -5663,7 +5182,6 @@ dependencies = [ "moonbeam-service", "nimbus-primitives", "parity-scale-codec", - "perf-test", "polkadot-cli", "polkadot-parachain", "polkadot-primitives", @@ -5671,10 +5189,11 @@ dependencies = [ "sc-cli", "sc-finality-grandpa", "sc-service", + "sc-sysinfo", "sc-telemetry", "sc-tracing", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "substrate-build-script-utils", "substrate-prometheus-endpoint", "try-runtime-cli", @@ -5682,17 +5201,17 @@ dependencies = [ [[package]] name = "moonbeam-cli-opt" -version = "0.23.0" +version = "0.25.0" dependencies = [ "account", - "clap 3.1.6", + "bip32", + "clap 3.1.18", "libsecp256k1 0.6.0", "primitive-types", "sha3 0.9.1", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "tiny-bip39", - "tiny-hderive", - "url 2.2.2", + "url", ] [[package]] @@ -5706,7 +5225,7 @@ dependencies = [ "parity-scale-codec", "serde", "serde_json", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-std", ] [[package]] @@ -5715,8 +5234,8 @@ version = "0.1.1" dependencies = [ "account", "fp-self-contained", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", ] [[package]] @@ -5732,10 +5251,10 @@ dependencies = [ "moonbeam-primitives-ext", "pallet-evm", "parity-scale-codec", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -5745,13 +5264,12 @@ dependencies = [ "fc-db", "fc-rpc", "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-derive", + "jsonrpsee", "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "tokio", ] @@ -5762,9 +5280,9 @@ dependencies = [ "ethereum-types", "evm-tracing-events", "parity-scale-codec", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-externalities", + "sp-runtime-interface", + "sp-std", ] [[package]] @@ -5772,18 +5290,18 @@ name = "moonbeam-relay-encoder" version = "0.1.0" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "kusama-runtime", + "pallet-evm-precompile-relay-encoder", "pallet-proxy", "pallet-staking", "pallet-utility", "parity-scale-codec", "polkadot-runtime", - "relay-encoder-precompiles", "rococo-runtime", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", "westend-runtime", "xcm-primitives", ] @@ -5794,14 +5312,12 @@ version = "0.1.0" dependencies = [ "ethereum-types", "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "moonbeam-client-evm-tracing", "moonbeam-rpc-core-types", "serde", "serde_json", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", ] [[package]] @@ -5810,9 +5326,7 @@ version = "0.6.0" dependencies = [ "ethereum-types", "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "moonbeam-client-evm-tracing", "moonbeam-rpc-core-types", "serde", @@ -5826,9 +5340,7 @@ dependencies = [ "ethereum", "ethereum-types", "fc-rpc-core", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "serde", "serde_json", ] @@ -5854,19 +5366,19 @@ dependencies = [ "fp-rpc", "futures 0.3.21", "hex-literal", - "jsonrpc-core", + "jsonrpsee", "moonbeam-client-evm-tracing", "moonbeam-rpc-core-debug", "moonbeam-rpc-core-types", "moonbeam-rpc-primitives-debug", "sc-client-api", "sc-utils", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", "tokio", ] @@ -5881,11 +5393,11 @@ dependencies = [ "parity-scale-codec", "serde", "serde_json", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -5894,10 +5406,10 @@ version = "0.6.0" dependencies = [ "ethereum", "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -5911,7 +5423,7 @@ dependencies = [ "fc-rpc-core", "fp-rpc", "futures 0.3.21", - "jsonrpc-core", + "jsonrpsee", "moonbeam-client-evm-tracing", "moonbeam-rpc-core-trace", "moonbeam-rpc-core-types", @@ -5921,12 +5433,12 @@ dependencies = [ "sc-utils", "serde", "sha3 0.9.1", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", "sp-transaction-pool", "tokio", "tracing", @@ -5938,8 +5450,8 @@ version = "0.6.0" dependencies = [ "ethereum-types", "fc-rpc", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "jsonrpc-core", + "frame-system", + "jsonrpsee", "moonbeam-rpc-core-txpool", "moonbeam-rpc-primitives-txpool", "rlp", @@ -5947,11 +5459,11 @@ dependencies = [ "sc-transaction-pool-api", "serde", "sha3 0.9.1", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -5959,7 +5471,6 @@ name = "moonbeam-runtime" version = "0.8.4" dependencies = [ "account", - "crowdloan-rewards-precompiles", "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-xcm", @@ -5973,10 +5484,10 @@ dependencies = [ "fp-evm", "fp-rpc", "fp-self-contained", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", "frame-executive", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", "frame-try-runtime", @@ -5988,6 +5499,7 @@ dependencies = [ "moonbeam-relay-encoder", "moonbeam-rpc-primitives-debug", "moonbeam-rpc-primitives-txpool", + "moonbeam-runtime-common", "nimbus-primitives", "orml-traits", "orml-xcm-support", @@ -5996,87 +5508,115 @@ dependencies = [ "pallet-assets", "pallet-author-inherent", "pallet-author-mapping", - "pallet-author-mapping-precompiles", "pallet-author-slot-filter", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-base-fee", "pallet-collective", "pallet-crowdloan-rewards", "pallet-democracy", - "pallet-democracy-precompiles", "pallet-ethereum", "pallet-ethereum-chain-id", "pallet-evm", - "pallet-evm-precompile-assets-erc20", + "pallet-evm-precompile-author-mapping", "pallet-evm-precompile-balances-erc20", + "pallet-evm-precompile-batch", "pallet-evm-precompile-blake2", "pallet-evm-precompile-bn128", + "pallet-evm-precompile-crowdloan-rewards", + "pallet-evm-precompile-democracy", "pallet-evm-precompile-dispatch", "pallet-evm-precompile-modexp", + "pallet-evm-precompile-parachain-staking", + "pallet-evm-precompile-relay-encoder", "pallet-evm-precompile-sha3fips", "pallet-evm-precompile-simple", + "pallet-evm-precompile-xcm-transactor", + "pallet-evm-precompile-xtokens", + "pallet-evm-precompileset-assets-erc20", "pallet-identity", "pallet-maintenance-mode", "pallet-migrations", "pallet-moonbeam-orbiters", + "pallet-parachain-staking", "pallet-proxy", "pallet-proxy-genesis-companion", "pallet-randomness-collective-flip", "pallet-scheduler", "pallet-society", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", "pallet-utility", "pallet-xcm", + "pallet-xcm-transactor", "parachain-info", - "parachain-staking", - "parachain-staking-precompiles", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain", "polkadot-runtime-parachains", "precompile-utils", - "relay-encoder-precompiles", "rlp", - "runtime-common", "scale-info", "serde", "session-keys-primitives", "sha3 0.8.2", "sha3 0.9.1", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", "sp-block-builder", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-std", "sp-transaction-pool", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-version", "substrate-wasm-builder", "xcm", "xcm-builder", "xcm-executor", "xcm-primitives", "xcm-simulator", - "xcm-transactor", - "xcm-transactor-precompiles", - "xtokens-precompiles", +] + +[[package]] +name = "moonbeam-runtime-common" +version = "0.8.0-dev" +dependencies = [ + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-asset-manager", + "pallet-author-inherent", + "pallet-author-mapping", + "pallet-author-slot-filter", + "pallet-base-fee", + "pallet-collective", + "pallet-evm", + "pallet-migrations", + "pallet-parachain-staking", + "pallet-randomness", + "pallet-scheduler", + "pallet-xcm-transactor", + "sp-core", + "sp-runtime", + "sp-std", + "xcm", ] [[package]] name = "moonbeam-service" -version = "0.23.0" +version = "0.25.0" dependencies = [ "ansi_term", "assert_cmd", "async-io", "async-trait", + "bip32", "cumulus-client-cli", "cumulus-client-collator", "cumulus-client-consensus-common", @@ -6090,7 +5630,7 @@ dependencies = [ "cumulus-relay-chain-rpc-interface", "cumulus-test-relay-sproof-builder", "derive_more", - "exit-future 0.1.4", + "exit-future", "fc-consensus", "fc-db", "fc-mapping-sync", @@ -6100,13 +5640,12 @@ dependencies = [ "fp-consensus", "fp-rpc", "fp-storage", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", "frame-benchmarking-cli", "frame-system-rpc-runtime-api", "futures 0.3.21", "hex-literal", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpsee", "libsecp256k1 0.6.0", "log", "manual-xcm-rpc", @@ -6122,18 +5661,19 @@ dependencies = [ "moonbeam-rpc-trace", "moonbeam-rpc-txpool", "moonbeam-runtime", + "moonbeam-vrf", "moonriver-runtime", "nimbus-consensus", "nimbus-primitives", - "nix", + "nix 0.23.1", "pallet-author-inherent", "pallet-ethereum", + "pallet-parachain-staking", "pallet-sudo", "pallet-transaction-payment-rpc", "pallet-transaction-payment-rpc-runtime-api", - "parachain-staking", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-cli", "polkadot-parachain", "polkadot-primitives", @@ -6155,28 +5695,30 @@ dependencies = [ "sc-rpc", "sc-rpc-api", "sc-service", + "sc-sysinfo", "sc-telemetry", "sc-tracing", "sc-transaction-pool", "sc-transaction-pool-api", "serde", "serde_json", + "session-keys-primitives", "sha3 0.9.1", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-storage", + "sp-timestamp", "sp-transaction-pool", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-trie", "structopt", "substrate-build-script-utils", "substrate-frame-rpc-system", @@ -6184,17 +5726,32 @@ dependencies = [ "substrate-test-client", "substrate-test-runtime-client", "tiny-bip39", - "tiny-hderive", "tokio", "trie-root 0.15.2", "xcm", ] +[[package]] +name = "moonbeam-vrf" +version = "0.1.0" +dependencies = [ + "nimbus-primitives", + "parity-scale-codec", + "polkadot-primitives", + "session-keys-primitives", + "sp-api", + "sp-application-crypto", + "sp-consensus-vrf", + "sp-core", + "sp-keystore", + "sp-runtime", +] + [[package]] name = "moonkey" version = "0.1.1" dependencies = [ - "clap 3.1.6", + "clap 3.1.18", "moonbeam-cli-opt", ] @@ -6203,7 +5760,6 @@ name = "moonriver-runtime" version = "0.8.4" dependencies = [ "account", - "crowdloan-rewards-precompiles", "cumulus-pallet-dmp-queue", "cumulus-pallet-parachain-system", "cumulus-pallet-xcm", @@ -6217,10 +5773,10 @@ dependencies = [ "fp-evm", "fp-rpc", "fp-self-contained", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", "frame-executive", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-benchmarking", "frame-system-rpc-runtime-api", "frame-try-runtime", @@ -6232,6 +5788,7 @@ dependencies = [ "moonbeam-relay-encoder", "moonbeam-rpc-primitives-debug", "moonbeam-rpc-primitives-txpool", + "moonbeam-runtime-common", "nimbus-primitives", "orml-traits", "orml-xcm-support", @@ -6240,78 +5797,79 @@ dependencies = [ "pallet-assets", "pallet-author-inherent", "pallet-author-mapping", - "pallet-author-mapping-precompiles", "pallet-author-slot-filter", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-base-fee", "pallet-collective", "pallet-crowdloan-rewards", "pallet-democracy", - "pallet-democracy-precompiles", "pallet-ethereum", "pallet-ethereum-chain-id", "pallet-evm", - "pallet-evm-precompile-assets-erc20", + "pallet-evm-precompile-author-mapping", "pallet-evm-precompile-balances-erc20", + "pallet-evm-precompile-batch", "pallet-evm-precompile-blake2", "pallet-evm-precompile-bn128", + "pallet-evm-precompile-crowdloan-rewards", + "pallet-evm-precompile-democracy", "pallet-evm-precompile-dispatch", "pallet-evm-precompile-modexp", + "pallet-evm-precompile-parachain-staking", + "pallet-evm-precompile-relay-encoder", "pallet-evm-precompile-sha3fips", "pallet-evm-precompile-simple", + "pallet-evm-precompile-xcm-transactor", + "pallet-evm-precompile-xtokens", + "pallet-evm-precompileset-assets-erc20", "pallet-identity", "pallet-maintenance-mode", "pallet-migrations", "pallet-moonbeam-orbiters", + "pallet-parachain-staking", "pallet-proxy", "pallet-proxy-genesis-companion", "pallet-randomness-collective-flip", "pallet-scheduler", "pallet-society", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", "pallet-utility", "pallet-xcm", + "pallet-xcm-transactor", "parachain-info", - "parachain-staking", - "parachain-staking-precompiles", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain", "polkadot-runtime-parachains", "precompile-utils", - "relay-encoder-precompiles", "rlp", - "runtime-common", "scale-info", "serde", "session-keys-primitives", "sha3 0.8.2", "sha3 0.9.1", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", "sp-block-builder", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-debug-derive 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-debug-derive", + "sp-inherents", + "sp-io", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-std", "sp-transaction-pool", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-version", "substrate-wasm-builder", "xcm", "xcm-builder", "xcm-executor", "xcm-primitives", "xcm-simulator", - "xcm-transactor", - "xcm-transactor-precompiles", - "xtokens-precompiles", ] [[package]] @@ -6322,27 +5880,27 @@ checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" [[package]] name = "multiaddr" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ee4ea82141951ac6379f964f71b20876d43712bea8faf6dd1a375e08a46499" +checksum = "3c580bfdd8803cce319b047d239559a22f809094aaea4ac13902a1fdcfcd4261" dependencies = [ "arrayref", "bs58", "byteorder", "data-encoding", - "multihash 0.14.0", - "percent-encoding 2.1.0", + "multihash", + "percent-encoding", "serde", "static_assertions", - "unsigned-varint 0.7.1", - "url 2.2.2", + "unsigned-varint", + "url", ] [[package]] name = "multibase" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b78c60039650ff12e140ae867ef5299a58e19dded4d334c849dc7177083667e2" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" dependencies = [ "base-x", "data-encoding", @@ -6351,41 +5909,28 @@ dependencies = [ [[package]] name = "multihash" -version = "0.13.2" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dac63698b887d2d929306ea48b63760431ff8a24fac40ddb22f9c7f49fb7cab" +checksum = "e3db354f401db558759dfc1e568d010a5d4146f4d3f637be1275ec4a3cf09689" dependencies = [ "blake2b_simd", "blake2s_simd", - "blake3 0.3.8", - "digest 0.9.0", - "generic-array 0.14.5", - "multihash-derive", - "sha2 0.9.9", - "sha3 0.9.1", - "unsigned-varint 0.5.1", -] - -[[package]] -name = "multihash" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "752a61cd890ff691b4411423d23816d5866dd5621e4d1c5687a53b94b5a979d8" -dependencies = [ - "digest 0.9.0", - "generic-array 0.14.5", + "blake3", + "core2", + "digest 0.10.3", "multihash-derive", - "sha2 0.9.9", - "unsigned-varint 0.7.1", + "sha2 0.10.2", + "sha3 0.10.1", + "unsigned-varint", ] [[package]] name = "multihash-derive" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99" +checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro-error", "proc-macro2", "quote", @@ -6401,16 +5946,16 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "multistream-select" -version = "0.10.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56a336acba8bc87c8876f6425407dbbe6c417bf478b22015f8fb0994ef3bc0ab" +checksum = "363a84be6453a70e63513660f4894ef815daf88e3356bffcda9ca27d810ce83b" dependencies = [ - "bytes 1.1.0", + "bytes", "futures 0.3.21", "log", "pin-project 1.0.10", - "smallvec 1.8.0", - "unsigned-varint 0.7.1", + "smallvec", + "unsigned-varint", ] [[package]] @@ -6461,20 +6006,74 @@ dependencies = [ ] [[package]] -name = "net2" -version = "0.2.37" +name = "netlink-packet-core" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" dependencies = [ - "cfg-if 0.1.10", + "anyhow", + "byteorder", + "libc", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-route" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "733ea73609acfd7fa7ddadfb7bf709b0471668c456ad9513685af543a06342b2" +dependencies = [ + "anyhow", + "bitflags", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] + +[[package]] +name = "netlink-packet-utils" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25af9cf0dc55498b7bd94a1508af7a78706aa0ab715a73c5169273e03c84845e" +dependencies = [ + "anyhow", + "byteorder", + "paste", + "thiserror", +] + +[[package]] +name = "netlink-proto" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8785b8141e8432aa45fceb922a7e876d7da3fad37fa7e7ec702ace3aa0826b" +dependencies = [ + "bytes", + "futures 0.3.21", + "log", + "netlink-packet-core", + "netlink-sys", + "tokio", +] + +[[package]] +name = "netlink-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e4c9f9547a08241bee7b6558b9b98e1f290d187de8b7cfca2bbb4937bcaa8f8" +dependencies = [ + "async-io", + "bytes", + "futures 0.3.21", "libc", - "winapi 0.3.9", + "log", ] [[package]] name = "nimbus-consensus" version = "0.9.0" -source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.19#a37ae449a49bff64b76dcbbff60ef754f66707e4" +source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.23#51eaa2cdc905c8f2cbf6d468c82e194d91e13ffc" dependencies = [ "async-trait", "cumulus-client-consensus-common", @@ -6484,20 +6083,20 @@ dependencies = [ "log", "nimbus-primitives", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-client", "sc-client-api", "sc-consensus", "sc-consensus-manual-seal", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", "substrate-prometheus-endpoint", "tracing", ] @@ -6505,31 +6104,45 @@ dependencies = [ [[package]] name = "nimbus-primitives" version = "0.9.0" -source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.19#a37ae449a49bff64b76dcbbff60ef754f66707e4" +source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.23#51eaa2cdc905c8f2cbf6d468c82e194d91e13ffc" dependencies = [ "async-trait", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] name = "nix" -version = "0.17.0" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" dependencies = [ "bitflags", "cc", - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", - "void", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", ] [[package]] @@ -6560,7 +6173,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -6583,7 +6196,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-integer", "num-traits", ] @@ -6594,7 +6207,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-integer", "num-traits", ] @@ -6624,7 +6237,7 @@ version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-traits", ] @@ -6634,7 +6247,7 @@ version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-integer", "num-traits", ] @@ -6645,7 +6258,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-bigint 0.2.6", "num-integer", "num-traits", @@ -6657,7 +6270,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" dependencies = [ - "autocfg 1.1.0", + "autocfg", "num-bigint 0.4.3", "num-integer", "num-traits", @@ -6669,7 +6282,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg 1.1.0", + "autocfg", "libm", ] @@ -6698,7 +6311,7 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -6717,9 +6330,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" [[package]] name = "opaque-debug" @@ -6734,34 +6347,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] -name = "open-metrics-client" -version = "0.12.0" +name = "openssl-probe" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7337d80c23c2d8b1349563981bc4fb531220733743ba8115454a67b181173f0d" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "orchestra" +version = "0.0.1" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "dtoa", - "itoa 0.4.8", - "open-metrics-client-derive-text-encode", - "owning_ref", + "async-trait", + "dyn-clonable", + "futures 0.3.21", + "futures-timer", + "orchestra-proc-macro", + "pin-project 1.0.10", + "prioritized-metered-channel", + "thiserror", + "tracing", ] [[package]] -name = "open-metrics-client-derive-text-encode" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15c83b586f00268c619c1cb3340ec1a6f59dd9ba1d9833a273a68e6d5cd8ffc" +name = "orchestra-proc-macro" +version = "0.0.1" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ + "expander 0.0.6", + "petgraph", + "proc-macro-crate", "proc-macro2", "quote", "syn", ] -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - [[package]] name = "ordered-float" version = "1.1.1" @@ -6774,45 +6393,45 @@ dependencies = [ [[package]] name = "orml-traits" version = "0.4.1-dev" -source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.19#c0ebd08e83fb44beb3b77c39cf9f0126285e8f3d" +source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.23#599ae0ec7186fd4e1bc2be1b4a0493bfda685c76" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "impl-trait-for-tuples", "num-traits", "orml-utilities", "parity-scale-codec", "scale-info", "serde", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", "xcm", ] [[package]] name = "orml-utilities" version = "0.4.1-dev" -source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.19#c0ebd08e83fb44beb3b77c39cf9f0126285e8f3d" +source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.23#599ae0ec7186fd4e1bc2be1b4a0493bfda685c76" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "scale-info", "serde", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "orml-xcm-support" version = "0.4.1-dev" -source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.19#c0ebd08e83fb44beb3b77c39cf9f0126285e8f3d" +source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.23#599ae0ec7186fd4e1bc2be1b4a0493bfda685c76" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "orml-traits", "parity-scale-codec", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", "xcm", "xcm-executor", ] @@ -6820,19 +6439,19 @@ dependencies = [ [[package]] name = "orml-xtokens" version = "0.4.1-dev" -source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.19#c0ebd08e83fb44beb3b77c39cf9f0126285e8f3d" +source = "git+https://github.com/purestake/open-runtime-module-library?branch=moonbeam-polkadot-v0.9.23#599ae0ec7186fd4e1bc2be1b4a0493bfda685c76" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "orml-traits", "orml-xcm-support", "parity-scale-codec", "scale-info", "serde", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", "xcm", "xcm-executor", ] @@ -6842,9 +6461,6 @@ name = "os_str_bytes" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] [[package]] name = "owning_ref" @@ -6859,18 +6475,18 @@ dependencies = [ name = "pallet-asset-manager" version = "0.1.0" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "xcm", "xcm-primitives", ] @@ -6878,470 +6494,386 @@ dependencies = [ [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-author-inherent" version = "0.9.0" -source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.19#a37ae449a49bff64b76dcbbff60ef754f66707e4" +source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.23#51eaa2cdc905c8f2cbf6d468c82e194d91e13ffc" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "nimbus-primitives", "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-authorship", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-author-mapping" version = "2.0.5" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "nimbus-primitives", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "parity-scale-codec", "scale-info", "serde", "session-keys-primitives", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "pallet-author-mapping-precompiles" -version = "0.2.0" -dependencies = [ - "derive_more", - "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "hex-literal", - "log", - "nimbus-primitives", - "num_enum", - "pallet-author-mapping", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-evm", - "pallet-scheduler", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parity-scale-codec", - "precompile-utils", - "scale-info", - "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-author-slot-filter" version = "0.9.0" -source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.19#a37ae449a49bff64b76dcbbff60ef754f66707e4" +source = "git+https://github.com/purestake/nimbus?branch=moonbeam-polkadot-v0.9.23#51eaa2cdc905c8f2cbf6d468c82e194d91e13ffc" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "nimbus-primitives", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", + "pallet-session", "parity-scale-codec", "scale-info", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", "sp-authority-discovery", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "pallet-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "frame-support", + "frame-system", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", - "sp-authorship 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-authorship", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", + "pallet-session", + "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", "sp-consensus-babe", "sp-consensus-vrf", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", ] [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "frame-election-provider-support", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "parity-scale-codec", - "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "pallet-balances" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-base-fee" version = "1.0.0" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", ] [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "beefy-primitives", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", + "pallet-session", "parity-scale-codec", "scale-info", "serde", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "beefy-merkle-tree", "beefy-primitives", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "hex", - "k256", "log", "pallet-beefy", "pallet-mmr", - "pallet-mmr-primitives", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-session", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-bridge-dispatch" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-message-dispatch", "bp-runtime", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-bridge-grandpa" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bp-header-chain", "bp-runtime", "bp-test-utils", "finality-grandpa", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "num-traits", "parity-scale-codec", "scale-info", "serde", "sp-finality-grandpa", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", + "sp-trie", ] [[package]] name = "pallet-bridge-messages" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitvec", "bp-message-dispatch", "bp-messages", "bp-runtime", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-child-bounties" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "pallet-bounties", "pallet-treasury", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-crowdloan-rewards" version = "0.6.0" -source = "git+https://github.com/purestake/crowdloan-rewards?branch=moonbeam-polkadot-v0.9.19#38413c890426731af8827b8e42e9a3895bb6bef7" +source = "git+https://github.com/purestake/crowdloan-rewards?branch=moonbeam-polkadot-v0.9.23#9447c7075bf606c815cd8acd5d4f54579dc33de5" dependencies = [ "cumulus-pallet-parachain-system", "cumulus-primitives-core", "cumulus-primitives-parachain-inherent", "ed25519-dalek", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-utility", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-trie", ] [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parity-scale-codec", - "scale-info", - "serde", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "pallet-democracy-precompiles" -version = "0.2.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "derive_more", - "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "hex-literal", - "log", - "num_enum", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-democracy", - "pallet-evm", - "pallet-scheduler", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", - "precompile-utils", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", "frame-election-provider-support", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "rand 0.7.3", "scale-info", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", + "sp-core", + "sp-io", "sp-npos-elections", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", "static_assertions", "strum 0.23.0", ] @@ -7349,102 +6881,154 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", "sp-npos-elections", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "ethereum", "ethereum-types", "evm", "fp-consensus", + "fp-ethereum", "fp-evm", "fp-rpc", "fp-self-contained", "fp-storage", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "num_enum", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", "pallet-evm", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "parity-scale-codec", "rlp", "scale-info", "serde", - "sha3 0.10.1", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-ethereum-chain-id" version = "1.0.0" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "pallet-ethereum-xcm" +version = "1.0.0-dev" +dependencies = [ + "ethereum", + "ethereum-types", + "fp-ethereum", + "fp-evm", + "fp-rpc", + "fp-self-contained", + "frame-support", + "frame-system", + "hex", + "libsecp256k1 0.7.0", + "pallet-balances", + "pallet-ethereum", + "pallet-evm", + "pallet-timestamp", "parity-scale-codec", + "rlp", "scale-info", "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "xcm-primitives", ] [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "evm", "fp-evm", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "hex", "log", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "parity-scale-codec", "primitive-types", "rlp", "scale-info", "serde", - "sha3 0.10.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-evm-precompile-author-mapping" +version = "0.2.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal", + "log", + "nimbus-primitives", + "num_enum", + "pallet-author-mapping", + "pallet-balances", + "pallet-evm", + "pallet-scheduler", + "pallet-timestamp", + "parity-scale-codec", + "precompile-utils", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-evm-precompile-assets-erc20" +name = "pallet-evm-precompile-balances-erc20" version = "0.1.0" dependencies = [ "derive_more", "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "hex-literal", "libsecp256k1 0.7.0", "log", "num_enum", - "pallet-assets", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-evm", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "parity-scale-codec", "paste", "precompile-utils", @@ -7452,27 +7036,27 @@ dependencies = [ "serde", "sha3 0.8.2", "slices", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-evm-precompile-balances-erc20" +name = "pallet-evm-precompile-batch" version = "0.1.0" dependencies = [ "derive_more", + "evm", "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "hex-literal", - "libsecp256k1 0.7.0", "log", "num_enum", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-evm", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "parity-scale-codec", "paste", "precompile-utils", @@ -7480,16 +7064,16 @@ dependencies = [ "serde", "sha3 0.8.2", "slices", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-evm-precompile-blake2" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "fp-evm", ] @@ -7497,138 +7081,405 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-bn128" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "fp-evm", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "substrate-bn", ] [[package]] -name = "pallet-evm-precompile-dispatch" -version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +name = "pallet-evm-precompile-call-permit" +version = "0.1.0" dependencies = [ + "derive_more", + "evm", "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", + "hex-literal", + "libsecp256k1 0.7.0", + "log", + "num_enum", + "pallet-balances", "pallet-evm", + "pallet-timestamp", + "parity-scale-codec", + "paste", + "precompile-utils", + "scale-info", + "serde", + "sha3 0.8.2", + "slices", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-evm-precompile-modexp" -version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +name = "pallet-evm-precompile-crowdloan-rewards" +version = "0.6.0" dependencies = [ + "cumulus-pallet-parachain-system", + "cumulus-primitives-core", + "cumulus-primitives-parachain-inherent", + "cumulus-test-relay-sproof-builder", + "derive_more", "fp-evm", - "num", + "frame-support", + "frame-system", + "log", + "num_enum", + "pallet-balances", + "pallet-crowdloan-rewards", + "pallet-evm", + "pallet-scheduler", + "pallet-timestamp", + "parity-scale-codec", + "precompile-utils", + "rustc-hex", + "scale-info", + "serde", + "sha3 0.9.1", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-evm-precompile-sha3fips" -version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +name = "pallet-evm-precompile-democracy" +version = "0.2.0" dependencies = [ + "derive_more", "fp-evm", - "tiny-keccak", + "frame-support", + "frame-system", + "hex-literal", + "log", + "num_enum", + "pallet-balances", + "pallet-democracy", + "pallet-evm", + "pallet-scheduler", + "pallet-timestamp", + "parity-scale-codec", + "precompile-utils", + "scale-info", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-evm-precompile-simple" +name = "pallet-evm-precompile-dispatch" version = "2.0.0-dev" -source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.19#59d8fce56c96e1bc90dd632d9e77db933ad3afa3" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ "fp-evm", - "ripemd", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "pallet-evm", ] [[package]] -name = "pallet-gilt" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +name = "pallet-evm-precompile-modexp" +version = "2.0.0-dev" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parity-scale-codec", - "scale-info", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "fp-evm", + "num", ] [[package]] -name = "pallet-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +name = "pallet-evm-precompile-parachain-staking" +version = "1.0.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "log", + "num_enum", + "pallet-balances", + "pallet-evm", + "pallet-parachain-staking", + "pallet-timestamp", + "parity-scale-codec", + "precompile-utils", + "rustc-hex", + "scale-info", + "serde", + "sha3 0.9.1", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-evm-precompile-randomness" +version = "0.1.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal", + "log", + "nimbus-primitives", + "num_enum", + "pallet-author-mapping", + "pallet-balances", + "pallet-base-fee", + "pallet-evm", + "pallet-randomness", + "pallet-scheduler", + "pallet-timestamp", + "parity-scale-codec", + "precompile-utils", + "scale-info", + "serde", + "session-keys-primitives", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-evm-precompile-relay-encoder" +version = "0.1.0" +dependencies = [ + "cumulus-pallet-parachain-system", + "cumulus-primitives-core", + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal", + "log", + "num_enum", + "pallet-balances", + "pallet-evm", + "pallet-staking", + "pallet-timestamp", + "parity-scale-codec", + "precompile-utils", + "rustc-hex", + "scale-info", + "serde", + "sha3 0.9.1", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-evm-precompile-sha3fips" +version = "2.0.0-dev" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" +dependencies = [ + "fp-evm", + "tiny-keccak", +] + +[[package]] +name = "pallet-evm-precompile-simple" +version = "2.0.0-dev" +source = "git+https://github.com/purestake/frontier?branch=moonbeam-polkadot-v0.9.23#896f99a7c134981c728c732e4fb7f43f69ccf3d7" +dependencies = [ + "fp-evm", + "ripemd", + "sp-io", +] + +[[package]] +name = "pallet-evm-precompile-xcm-transactor" +version = "0.1.0" +dependencies = [ + "cumulus-primitives-core", + "derive_more", + "evm", + "fp-evm", + "frame-support", + "frame-system", + "log", + "num_enum", + "orml-traits", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "pallet-xcm", + "pallet-xcm-transactor", + "parity-scale-codec", + "precompile-utils", + "rustc-hex", + "scale-info", + "serde", + "sha3 0.9.1", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", + "xcm-builder", + "xcm-executor", + "xcm-primitives", +] + +[[package]] +name = "pallet-evm-precompile-xtokens" +version = "0.1.0" +dependencies = [ + "cumulus-primitives-core", + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "log", + "num_enum", + "orml-traits", + "orml-xtokens", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "pallet-xcm", + "parity-scale-codec", + "precompile-utils", + "rustc-hex", + "scale-info", + "serde", + "sha3 0.9.1", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", + "xcm-builder", + "xcm-executor", + "xcm-primitives", +] + +[[package]] +name = "pallet-evm-precompileset-assets-erc20" +version = "0.1.0" +dependencies = [ + "derive_more", + "fp-evm", + "frame-support", + "frame-system", + "hex-literal", + "libsecp256k1 0.7.0", + "log", + "num_enum", + "pallet-assets", + "pallet-balances", + "pallet-evm", + "pallet-timestamp", + "parity-scale-codec", + "paste", + "precompile-utils", + "scale-info", + "serde", + "sha3 0.8.2", + "slices", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-gilt" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-arithmetic", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-grandpa" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", + "pallet-session", "parity-scale-codec", "scale-info", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", + "sp-core", "sp-finality-grandpa", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", ] [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "enumflags2", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", "parity-scale-codec", "scale-info", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", ] [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", "sp-keyring", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] @@ -7636,32 +7487,32 @@ name = "pallet-maintenance-mode" version = "0.1.0" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] @@ -7669,305 +7520,330 @@ name = "pallet-migrations" version = "0.1.0" dependencies = [ "environmental", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "impl-trait-for-tuples", "log", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "ckb-merkle-mountain-range", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-mmr-primitives", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "pallet-mmr-primitives" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "parity-scale-codec", - "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-mmr-primitives", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "pallet-mmr-primitives", + "jsonrpsee", "parity-scale-codec", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-mmr-primitives", + "sp-runtime", ] [[package]] name = "pallet-moonbeam-orbiters" version = "0.1.0" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "nimbus-primitives", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-nomination-pools" +version = "1.0.0" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", + "log", "parity-scale-codec", "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-staking", + "sp-std", ] [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" +dependencies = [ + "frame-support", + "frame-system", + "log", + "pallet-balances", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-parachain-staking" +version = "3.0.0" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", + "pallet-balances", + "pallet-session", "parity-scale-codec", "scale-info", "serde", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "similar-asserts", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", + "substrate-fixed", ] [[package]] name = "pallet-preimage" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-proxy-genesis-companion" version = "0.1.0" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", + "pallet-balances", "pallet-proxy", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "pallet-randomness-collective-flip" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +name = "pallet-randomness" +version = "0.1.0" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "derive_more", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "nimbus-primitives", + "pallet-author-mapping", + "pallet-balances", + "pallet-evm", "parity-scale-codec", - "safe-mix", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "serde", + "session-keys-primitives", + "sp-consensus-vrf", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-recovery" +name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", + "safe-mix", "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-scheduler" +name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pallet-session" +name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "impl-trait-for-tuples", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "frame-support", + "frame-system", "impl-trait-for-tuples", "log", - "pallet-timestamp 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "pallet-timestamp", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-trie", ] [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "rand_chacha 0.2.2", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "frame-election-provider-support", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", + "pallet-session", "parity-scale-codec", "scale-info", "serde", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", ] [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -7976,254 +7852,211 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "log", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", ] [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parity-scale-codec", - "scale-info", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "pallet-timestamp" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-inherents 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "pallet-treasury", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", "serde", - "smallvec 1.8.0", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-rpc", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", ] [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-runtime", ] [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "impl-trait-for-tuples", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "parity-scale-codec", "scale-info", "serde", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "pallet-xcm" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", "xcm", "xcm-executor", ] [[package]] -name = "parachain-info" +name = "pallet-xcm-transactor" version = "0.1.0" -source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.19#82c9c1fd61b802d7b0c0511be5740dc0c8ce343c" dependencies = [ "cumulus-primitives-core", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "parachain-staking" -version = "3.0.0" -dependencies = [ - "frame-benchmarking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "frame-benchmarking", + "frame-support", + "frame-system", "log", - "pallet-authorship 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "pallet-balances 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "pallet-session 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "orml-traits", + "pallet-balances", + "pallet-timestamp", + "pallet-xcm", "parity-scale-codec", "scale-info", "serde", - "similar-asserts", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "substrate-fixed", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "xcm", + "xcm-builder", + "xcm-executor", + "xcm-primitives", ] [[package]] -name = "parachain-staking-precompiles" -version = "1.0.0" +name = "parachain-info" +version = "0.1.0" +source = "git+https://github.com/purestake/cumulus?branch=moonbeam-polkadot-v0.9.23#a8637639267afc5bacf0288c038bc6d28acd73aa" dependencies = [ - "derive_more", - "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "num_enum", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-evm", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parachain-staking", + "cumulus-primitives-core", + "frame-support", + "frame-system", "parity-scale-codec", - "precompile-utils", - "rustc-hex", "scale-info", "serde", - "sha3 0.9.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", ] [[package]] name = "parity-db" -version = "0.3.9" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d121a9af17a43efd0a38c6afa508b927ba07785bd4709efb2ac03bf77efef8d" +checksum = "966eb23bd3a09758b8dac09f82b9d417c00f14e5d46171bf04cffdd9cb2e1eb1" dependencies = [ "blake2-rfc", "crc32fast", @@ -8258,7 +8091,7 @@ version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c45ed1f39709f5a89338fab50e59816b2e8815f5bb58276e7ddf9afd495f73f8" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -8270,20 +8103,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" -[[package]] -name = "parity-tokio-ipc" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9981e32fb75e004cc148f5fb70342f393830e0a4aa62e3cc93b50976218d42b6" -dependencies = [ - "futures 0.3.21", - "libc", - "log", - "rand 0.7.3", - "tokio", - "winapi 0.3.9", -] - [[package]] name = "parity-util-mem" version = "0.11.0" @@ -8294,12 +8113,12 @@ dependencies = [ "ethereum-types", "hashbrown 0.12.0", "impl-trait-for-tuples", - "lru 0.7.5", + "lru 0.7.7", "parity-util-mem-derive", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "primitive-types", - "smallvec 1.8.0", - "winapi 0.3.9", + "smallvec", + "winapi", ] [[package]] @@ -8329,39 +8148,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be5e13c266502aadf83426d87d81a0f5d1ef45b8027f5a471c360abfe4bfae92" [[package]] -name = "parity-ws" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5983d3929ad50f12c3eb9a6743f19d691866ecd44da74c0a3308c3f8a56df0c6" -dependencies = [ - "byteorder", - "bytes 0.4.12", - "httparse", - "log", - "mio 0.6.23", - "mio-extras", - "rand 0.7.3", - "sha-1 0.8.2", - "slab", - "url 2.2.2", -] - -[[package]] -name = "parking" -version = "2.0.0" +name = "parking" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" -[[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" -dependencies = [ - "lock_api 0.1.5", - "parking_lot_core 0.4.0", -] - [[package]] name = "parking_lot" version = "0.11.2" @@ -8369,33 +8160,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", - "lock_api 0.4.6", + "lock_api", "parking_lot_core 0.8.5", ] [[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ - "lock_api 0.4.6", + "lock_api", "parking_lot_core 0.9.1", ] -[[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" -dependencies = [ - "libc", - "rand 0.6.5", - "rustc_version 0.2.3", - "smallvec 0.6.14", - "winapi 0.3.9", -] - [[package]] name = "parking_lot_core" version = "0.8.5" @@ -8406,8 +8184,8 @@ dependencies = [ "instant", "libc", "redox_syscall", - "smallvec 1.8.0", - "winapi 0.3.9", + "smallvec", + "winapi", ] [[package]] @@ -8419,7 +8197,7 @@ dependencies = [ "cfg-if 1.0.0", "libc", "redox_syscall", - "smallvec 1.8.0", + "smallvec", "windows-sys", ] @@ -8448,16 +8226,19 @@ dependencies = [ ] [[package]] -name = "peeking_take_while" -version = "0.1.2" +name = "pbkdf2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.3", +] [[package]] -name = "percent-encoding" -version = "1.0.1" +name = "peeking_take_while" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" @@ -8465,50 +8246,6 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" -[[package]] -name = "perf-test" -version = "0.1.0" -dependencies = [ - "async-io", - "clap 3.1.6", - "cli-table", - "cumulus-primitives-parachain-inherent", - "ethereum", - "fc-consensus", - "fc-rpc", - "fp-evm", - "fp-rpc", - "futures 0.3.21", - "hex", - "libsecp256k1 0.5.0", - "log", - "moonbase-runtime", - "moonbeam-cli-opt", - "moonbeam-service", - "nimbus-primitives", - "pallet-ethereum", - "rlp", - "sc-basic-authorship", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-consensus-manual-seal", - "sc-executor", - "sc-rpc", - "sc-service", - "sc-transaction-pool", - "serde", - "serde_json", - "sha3 0.8.2", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - [[package]] name = "pest" version = "2.1.3" @@ -8620,17 +8357,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkcs8" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" -dependencies = [ - "der", - "spki", - "zeroize", -] - [[package]] name = "pkg-config" version = "0.3.24" @@ -8645,8 +8371,8 @@ checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94" [[package]] name = "polkadot-approval-distribution" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "polkadot-node-network-protocol", @@ -8654,31 +8380,33 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", + "rand 0.8.5", "tracing-gum", ] [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", + "rand 0.8.5", "tracing-gum", ] [[package]] name = "polkadot-availability-distribution" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "derive_more", "fatality", "futures 0.3.21", - "lru 0.7.5", + "lru 0.7.7", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -8687,20 +8415,20 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "rand 0.8.5", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-keystore", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-availability-recovery" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "fatality", "futures 0.3.21", - "lru 0.7.5", + "lru 0.7.7", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -8716,10 +8444,10 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "clap 3.1.6", + "clap 3.1.18", "frame-benchmarking-cli", "futures 0.3.21", "log", @@ -8730,9 +8458,10 @@ dependencies = [ "polkadot-service", "sc-cli", "sc-service", + "sc-sysinfo", "sc-tracing", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-trie", "substrate-build-script-utils", "thiserror", "try-runtime-cli", @@ -8740,16 +8469,15 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "beefy-primitives", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-benchmarking", "frame-benchmarking-cli", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-system", "frame-system-rpc-runtime-api", "kusama-runtime", - "pallet-mmr-primitives", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "polkadot-core-primitives", @@ -8762,29 +8490,30 @@ dependencies = [ "sc-consensus", "sc-executor", "sc-service", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-authority-discovery", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-finality-grandpa", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-inherents", "sp-keyring", + "sp-mmr-primitives", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-storage", + "sp-timestamp", "sp-transaction-pool", "westend-runtime", ] [[package]] name = "polkadot-collator-protocol" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "always-assert", "fatality", @@ -8795,35 +8524,35 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-keystore", + "sp-runtime", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-core-primitives" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "parity-scale-codec", "parity-util-mem", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "polkadot-dispute-distribution" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "derive_more", "fatality", "futures 0.3.21", - "lru 0.7.5", + "lru 0.7.7", "parity-scale-codec", "polkadot-erasure-coding", "polkadot-node-network-protocol", @@ -8832,30 +8561,30 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "sc-network", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", + "sp-keystore", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-erasure-coding" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", "polkadot-primitives", "reed-solomon-novelpoly", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-trie", "thiserror", ] [[package]] name = "polkadot-gossip-support" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "futures-timer", @@ -8866,21 +8595,23 @@ dependencies = [ "rand 0.8.5", "rand_chacha 0.3.1", "sc-network", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", + "sp-core", + "sp-keystore", "tracing-gum", ] [[package]] name = "polkadot-network-bridge" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ + "always-assert", "async-trait", + "bytes", "futures 0.3.21", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-util", @@ -8893,8 +8624,8 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "parity-scale-codec", @@ -8903,7 +8634,7 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-maybe-compressed-blob", "thiserror", "tracing-gum", @@ -8911,15 +8642,15 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitvec", "derive_more", "futures 0.3.21", "futures-timer", "kvdb", - "lru 0.7.5", + "lru 0.7.7", "merlin", "parity-scale-codec", "polkadot-node-jaeger", @@ -8930,18 +8661,18 @@ dependencies = [ "polkadot-primitives", "sc-keystore", "schnorrkel", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", "sp-consensus", "sp-consensus-slots", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-av-store" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitvec", "futures 0.3.21", @@ -8960,10 +8691,11 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitvec", + "fatality", "futures 0.3.21", "polkadot-erasure-coding", "polkadot-node-primitives", @@ -8971,21 +8703,21 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-primitives", "polkadot-statement-table", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", "thiserror", "tracing-gum", "wasm-timer", @@ -8993,8 +8725,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "async-trait", "futures 0.3.21", @@ -9011,8 +8743,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "polkadot-node-subsystem", @@ -9026,8 +8758,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "futures-timer", @@ -9043,13 +8775,13 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "fatality", "futures 0.3.21", "kvdb", - "lru 0.7.5", + "lru 0.7.7", "parity-scale-codec", "polkadot-node-primitives", "polkadot-node-subsystem", @@ -9062,8 +8794,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "async-trait", "futures 0.3.21", @@ -9071,18 +8803,19 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-primitives", "sp-blockchain", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-inherents", + "sp-runtime", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitvec", + "fatality", "futures 0.3.21", "futures-timer", "polkadot-node-primitives", @@ -9096,8 +8829,8 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "always-assert", "assert_matches", @@ -9115,19 +8848,20 @@ dependencies = [ "sc-executor-common", "sc-executor-wasmtime", "slotmap", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-externalities", + "sp-io", "sp-maybe-compressed-blob", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-tracing", + "sp-wasm-interface", + "tempfile", "tracing-gum", ] [[package]] name = "polkadot-node-core-pvf-checker" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "polkadot-node-primitives", @@ -9135,15 +8869,15 @@ dependencies = [ "polkadot-node-subsystem-util", "polkadot-overseer", "polkadot-primitives", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "memory-lru", @@ -9151,43 +8885,42 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-authority-discovery", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", "tracing-gum", ] [[package]] name = "polkadot-node-jaeger" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "async-std", "lazy_static", "log", "mick-jaeger", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-node-primitives", "polkadot-primitives", "sc-network", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "thiserror", ] [[package]] name = "polkadot-node-metrics" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bs58", "futures 0.3.21", "futures-timer", "log", - "metered-channel", "parity-scale-codec", "polkadot-primitives", + "prioritized-metered-channel", "sc-cli", "sc-service", "sc-tracing", @@ -9197,26 +8930,29 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "async-trait", + "derive_more", "fatality", "futures 0.3.21", "parity-scale-codec", "polkadot-node-jaeger", "polkadot-node-primitives", "polkadot-primitives", + "rand 0.8.5", "sc-authority-discovery", "sc-network", "strum 0.24.0", "thiserror", + "tracing-gum", ] [[package]] name = "polkadot-node-primitives" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bounded-vec", "futures 0.3.21", @@ -9225,11 +8961,11 @@ dependencies = [ "polkadot-primitives", "schnorrkel", "serde", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", "sp-consensus-babe", "sp-consensus-vrf", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-keystore", "sp-maybe-compressed-blob", "thiserror", "zstd", @@ -9237,8 +8973,8 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -9247,27 +8983,27 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "derive_more", "futures 0.3.21", + "orchestra", "polkadot-node-jaeger", "polkadot-node-network-protocol", "polkadot-node-primitives", - "polkadot-overseer-gen", "polkadot-primitives", "polkadot-statement-table", "sc-network", - "smallvec 1.8.0", + "smallvec", "substrate-prometheus-endpoint", "thiserror", ] [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "async-trait", "derive_more", @@ -9275,8 +9011,7 @@ dependencies = [ "futures 0.3.21", "itertools", "kvdb", - "lru 0.7.5", - "metered-channel", + "lru 0.7.7", "parity-db", "parity-scale-codec", "parity-util-mem", @@ -9289,85 +9024,58 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-overseer", "polkadot-primitives", + "prioritized-metered-channel", "rand 0.8.5", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", + "sp-core", + "sp-keystore", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-overseer" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "futures 0.3.21", "futures-timer", - "lru 0.7.5", + "lru 0.7.7", + "orchestra", "parity-util-mem", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "polkadot-node-metrics", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem-types", - "polkadot-overseer-gen", "polkadot-primitives", "sc-client-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "tracing-gum", -] - -[[package]] -name = "polkadot-overseer-gen" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" -dependencies = [ - "async-trait", - "futures 0.3.21", - "futures-timer", - "metered-channel", - "pin-project 1.0.10", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-overseer-gen-proc-macro", - "thiserror", + "sp-api", + "sp-core", "tracing-gum", ] -[[package]] -name = "polkadot-overseer-gen-proc-macro" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" -dependencies = [ - "expander 0.0.6", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "polkadot-parachain" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "derive_more", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "parity-util-mem", "polkadot-core-primitives", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "polkadot-performance-test" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "env_logger", "kusama-runtime", @@ -9381,11 +9089,11 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitvec", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-system", "hex-literal", "parity-scale-codec", "parity-util-mem", @@ -9393,30 +9101,30 @@ dependencies = [ "polkadot-parachain", "scale-info", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", "sp-authority-discovery", "sp-consensus-slots", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-trie", + "sp-version", ] [[package]] name = "polkadot-rpc" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", - "jsonrpc-core", + "jsonrpsee", "pallet-mmr-rpc", "pallet-transaction-payment-rpc", "polkadot-primitives", @@ -9430,36 +9138,36 @@ dependencies = [ "sc-rpc", "sc-sync-state-rpc", "sc-transaction-pool-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", + "sp-runtime", "substrate-frame-rpc-system", "substrate-state-trie-migration-rpc", ] [[package]] name = "polkadot-runtime" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "beefy-primitives", "bitvec", "frame-election-provider-support", "frame-executive", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-rpc-runtime-api", "frame-try-runtime", "log", "pallet-authority-discovery", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", "pallet-babe", "pallet-bags-list", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-bounties", "pallet-child-bounties", "pallet-collective", @@ -9471,17 +9179,16 @@ dependencies = [ "pallet-im-online", "pallet-indices", "pallet-membership", - "pallet-mmr-primitives", "pallet-multisig", "pallet-nicks", "pallet-offences", "pallet-preimage", "pallet-proxy", "pallet-scheduler", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-session", "pallet-staking", "pallet-staking-reward-curve", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-tips", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", @@ -9498,22 +9205,23 @@ dependencies = [ "scale-info", "serde", "serde_derive", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", "sp-npos-elections", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", "sp-transaction-pool", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-version", "static_assertions", "substrate-wasm-builder", "xcm", @@ -9523,25 +9231,25 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "beefy-primitives", "bitvec", "frame-election-provider-support", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "impl-trait-for-tuples", "libsecp256k1 0.7.0", "log", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", "pallet-bags-list", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-beefy-mmr", "pallet-election-provider-multi-phase", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-session", "pallet-staking", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-transaction-payment", "pallet-treasury", "pallet-vesting", @@ -9553,61 +9261,61 @@ dependencies = [ "serde", "serde_derive", "slot-range-helper", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-inherents", + "sp-io", "sp-npos-elections", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", "static_assertions", "xcm", ] [[package]] name = "polkadot-runtime-constants" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "polkadot-primitives", "polkadot-runtime-common", - "smallvec 1.8.0", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-runtime", ] [[package]] name = "polkadot-runtime-metrics" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bs58", "parity-scale-codec", "polkadot-primitives", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-std", + "sp-tracing", ] [[package]] name = "polkadot-runtime-parachains" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "bitflags", "bitvec", "derive_more", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "pallet-authority-discovery", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", "pallet-babe", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", + "pallet-session", "pallet-staking", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-vesting", "parity-scale-codec", "polkadot-primitives", @@ -9617,23 +9325,23 @@ dependencies = [ "rustc-hex", "scale-info", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", "xcm", "xcm-executor", ] [[package]] name = "polkadot-service" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "async-trait", "beefy-gadget", @@ -9645,10 +9353,9 @@ dependencies = [ "kusama-runtime-constants", "kvdb", "kvdb-rocksdb", - "lru 0.7.5", + "lru 0.7.7", "pallet-babe", "pallet-im-online", - "pallet-mmr-primitives", "pallet-staking", "pallet-transaction-payment-rpc-runtime-api", "parity-db", @@ -9677,6 +9384,7 @@ dependencies = [ "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem", + "polkadot-node-subsystem-types", "polkadot-node-subsystem-util", "polkadot-overseer", "polkadot-parachain", @@ -9705,28 +9413,30 @@ dependencies = [ "sc-offchain", "sc-service", "sc-sync-state-rpc", + "sc-sysinfo", "sc-telemetry", "sc-transaction-pool", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "serde_json", + "sp-api", "sp-authority-discovery", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-finality-grandpa", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-inherents", + "sp-io", + "sp-keystore", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-storage", + "sp-timestamp", "sp-transaction-pool", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-trie", "substrate-prometheus-endpoint", "thiserror", "tracing-gum", @@ -9736,8 +9446,8 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "arrayvec 0.5.2", "fatality", @@ -9749,20 +9459,20 @@ dependencies = [ "polkadot-node-subsystem", "polkadot-node-subsystem-util", "polkadot-primitives", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", + "sp-staking", "thiserror", "tracing-gum", ] [[package]] name = "polkadot-statement-table" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "parity-scale-codec", "polkadot-primitives", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", ] [[package]] @@ -9775,7 +9485,7 @@ dependencies = [ "libc", "log", "wepoll-ffi", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -9784,7 +9494,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ - "cpufeatures 0.2.2", + "cpufeatures", "opaque-debug 0.3.0", "universal-hash", ] @@ -9796,7 +9506,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ "cfg-if 1.0.0", - "cpufeatures 0.2.2", + "cpufeatures", "opaque-debug 0.3.0", "universal-hash", ] @@ -9811,9 +9521,11 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" name = "precompile-utils" version = "0.1.0" dependencies = [ + "evm", "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", + "hex", "hex-literal", "impl-trait-for-tuples", "log", @@ -9822,9 +9534,10 @@ dependencies = [ "parity-scale-codec", "precompile-utils-macro", "sha3 0.9.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "similar-asserts", + "sp-core", + "sp-io", + "sp-std", "xcm", ] @@ -9880,12 +9593,18 @@ dependencies = [ ] [[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +name = "prioritized-metered-channel" +version = "0.2.0" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "toml", + "coarsetime", + "crossbeam-queue", + "derive_more", + "futures 0.3.21", + "futures-timer", + "nanorand", + "thiserror", + "tracing", ] [[package]] @@ -9933,26 +9652,59 @@ dependencies = [ [[package]] name = "prometheus" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f64969ffd5dd8f39bd57a68ac53c163a095ed9d0fb707146da1b27025a3504" +checksum = "cface98dfa6d645ea4c789839f176e4b072265d085bfcc48eaa8d137f58d3c39" dependencies = [ "cfg-if 1.0.0", "fnv", "lazy_static", "memchr", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "thiserror", ] +[[package]] +name = "prometheus-client" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a896938cc6018c64f279888b8c7559d3725210d5db9a3a1ee6bc7188d51d34" +dependencies = [ + "dtoa", + "itoa 1.0.1", + "owning_ref", + "prometheus-client-derive-text-encode", +] + +[[package]] +name = "prometheus-client-derive-text-encode" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8e12d01b9d66ad9eb4529c57666b6263fc1993cb30261d83ead658fdd932652" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "prost" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" dependencies = [ - "bytes 1.1.0", - "prost-derive", + "bytes", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e" +dependencies = [ + "bytes", + "prost-derive 0.10.1", ] [[package]] @@ -9961,14 +9713,14 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" dependencies = [ - "bytes 1.1.0", + "bytes", "heck 0.3.3", "itertools", "lazy_static", "log", "multimap", "petgraph", - "prost", + "prost 0.9.0", "prost-types", "regex", "tempfile", @@ -9988,14 +9740,27 @@ dependencies = [ "syn", ] +[[package]] +name = "prost-derive" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "prost-types" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" dependencies = [ - "bytes 1.1.0", - "prost", + "bytes", + "prost 0.9.0", ] [[package]] @@ -10045,25 +9810,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" -dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg 0.1.2", - "rand_xorshift", - "winapi 0.3.9", -] - [[package]] name = "rand" version = "0.7.3" @@ -10074,7 +9820,7 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc 0.2.0", + "rand_hc", "rand_pcg 0.2.1", ] @@ -10089,16 +9835,6 @@ dependencies = [ "rand_core 0.6.3", ] -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", -] - [[package]] name = "rand_chacha" version = "0.2.2" @@ -10119,21 +9855,6 @@ dependencies = [ "rand_core 0.6.3", ] -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.5.1" @@ -10162,15 +9883,6 @@ dependencies = [ "rand 0.8.5", ] -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rand_hc" version = "0.2.0" @@ -10180,50 +9892,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi 0.3.9", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi 0.3.9", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", -] - [[package]] name = "rand_pcg" version = "0.2.1" @@ -10234,12 +9902,12 @@ dependencies = [ ] [[package]] -name = "rand_xorshift" -version = "0.1.1" +name = "rand_pcg" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" dependencies = [ - "rand_core 0.3.1", + "rand_core 0.6.3", ] [[package]] @@ -10254,7 +9922,7 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" dependencies = [ - "autocfg 1.1.0", + "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -10273,15 +9941,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "redox_syscall" version = "0.2.12" @@ -10337,13 +9996,13 @@ dependencies = [ [[package]] name = "regalloc" -version = "0.0.33" +version = "0.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d808cff91dfca7b239d40b972ba628add94892b1d9e19a842aedc5cfae8ab1a" +checksum = "62446b1d3ebf980bdc68837700af1d77b37bc430e524bf95319c6eada2a4cc02" dependencies = [ "log", "rustc-hash", - "smallvec 1.8.0", + "smallvec", ] [[package]] @@ -10381,53 +10040,24 @@ dependencies = [ "bitflags", "libc", "mach", - "winapi 0.3.9", + "winapi", ] [[package]] -name = "relay-encoder-precompiles" -version = "0.1.0" +name = "remote-externalities" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "cumulus-pallet-parachain-system", - "cumulus-primitives-core", - "derive_more", - "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "hex-literal", - "log", - "num_enum", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-evm", - "pallet-staking", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "parity-scale-codec", - "precompile-utils", - "rustc-hex", - "scale-info", - "serde", - "sha3 0.9.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "remote-externalities" -version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "env_logger", - "jsonrpsee", + "env_logger", + "jsonrpsee", "log", "parity-scale-codec", "serde", "serde_json", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-version", ] [[package]] @@ -10436,7 +10066,7 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -10455,6 +10085,17 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086" +[[package]] +name = "rfc6979" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96ef608575f6392792f9ecf7890c00086591d29a83910939d430753f7c050525" +dependencies = [ + "crypto-bigint", + "hmac 0.11.0", + "zeroize", +] + [[package]] name = "ring" version = "0.16.20" @@ -10467,7 +10108,7 @@ dependencies = [ "spin 0.5.2", "untrusted", "web-sys", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -10485,7 +10126,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "999508abb0ae792aabed2460c45b89106d97fe4adac593bdaef433c2605847b5" dependencies = [ - "bytes 1.1.0", + "bytes", "rustc-hex", ] @@ -10512,8 +10153,8 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -10523,14 +10164,14 @@ dependencies = [ "bp-wococo", "bridge-runtime-common", "frame-executive", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-rpc-runtime-api", "log", "pallet-authority-discovery", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", "pallet-babe", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-beefy", "pallet-beefy-mmr", "pallet-bridge-dispatch", @@ -10542,14 +10183,13 @@ dependencies = [ "pallet-indices", "pallet-membership", "pallet-mmr", - "pallet-mmr-primitives", "pallet-multisig", "pallet-offences", "pallet-proxy", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-session", "pallet-staking", "pallet-sudo", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-utility", @@ -10563,21 +10203,22 @@ dependencies = [ "scale-info", "serde", "serde_derive", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", "sp-transaction-pool", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-version", "substrate-wasm-builder", "xcm", "xcm-builder", @@ -10586,14 +10227,14 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "polkadot-primitives", "polkadot-runtime-common", - "smallvec 1.8.0", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-runtime", ] [[package]] @@ -10603,31 +10244,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc936cf8a7ea60c58f030fd36a612a48f440610214dc54bc36431f9ea0c3efb" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] -name = "runtime-common" -version = "0.8.0-dev" +name = "rtnetlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f54290e54521dac3de4149d83ddf9f62a359b3cc93bcb494a794a41e6f4744b" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "impl-trait-for-tuples", + "async-global-executor", + "futures 0.3.21", "log", - "pallet-asset-manager", - "pallet-author-mapping", - "pallet-author-slot-filter", - "pallet-base-fee", - "pallet-collective", - "pallet-evm", - "pallet-migrations", - "pallet-scheduler", - "parachain-staking", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "xcm", - "xcm-transactor", + "netlink-packet-route", + "netlink-proto", + "nix 0.22.3", + "thiserror", ] [[package]] @@ -10657,15 +10289,6 @@ dependencies = [ "semver 0.9.0", ] -[[package]] -name = "rustc_version" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" -dependencies = [ - "semver 0.11.0", -] - [[package]] name = "rustc_version" version = "0.4.0" @@ -10677,29 +10300,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.31.3" +version = "0.33.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2dcfc2778a90e38f56a708bfc90572422e11d6c7ee233d053d1f782cf9df6d2" +checksum = "938a344304321a9da4973b9ff4f9f8db9caf4597dfd9dda6a60b523340a0fff0" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "winapi 0.3.9", -] - -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64 0.13.0", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", + "winapi", ] [[package]] @@ -10710,20 +10320,8 @@ checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" dependencies = [ "log", "ring", - "sct 0.7.0", - "webpki 0.22.0", -] - -[[package]] -name = "rustls-native-certs" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092" -dependencies = [ - "openssl-probe", - "rustls 0.19.1", - "schannel", - "security-framework", + "sct", + "webpki", ] [[package]] @@ -10800,18 +10398,18 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.1.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "log", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-wasm-interface", "thiserror", ] [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures 0.3.21", @@ -10820,17 +10418,17 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost", + "prost 0.10.4", "prost-build", "rand 0.7.3", "sc-client-api", "sc-network", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-authority-discovery", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-keystore", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", ] @@ -10838,7 +10436,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "futures-timer", @@ -10849,35 +10447,35 @@ dependencies = [ "sc-proposer-metrics", "sc-telemetry", "sc-transaction-pool-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-runtime", "substrate-prometheus-endpoint", ] [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "sc-client-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", ] [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "impl-trait-for-tuples", "memmap2 0.5.3", @@ -10887,16 +10485,16 @@ dependencies = [ "sc-telemetry", "serde", "serde_json", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", ] [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -10905,10 +10503,10 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "chrono", - "clap 3.1.6", + "clap 3.1.18", "fdlimit", "futures 0.3.21", "hex", @@ -10920,6 +10518,7 @@ dependencies = [ "regex", "rpassword", "sc-client-api", + "sc-client-db", "sc-keystore", "sc-network", "sc-service", @@ -10929,12 +10528,12 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-keyring", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-panic-handler 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", + "sp-panic-handler", + "sp-runtime", + "sp-version", "thiserror", "tiny-bip39", "tokio", @@ -10943,35 +10542,35 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "fnv", "futures 0.3.21", "hash-db", "log", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-executor", "sc-transaction-pool-api", "sc-utils", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-database", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-externalities", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-trie", "substrate-prometheus-endpoint", ] [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "hash-db", "kvdb", @@ -10981,38 +10580,38 @@ dependencies = [ "log", "parity-db", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-client-api", "sc-state-db", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-database", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-state-machine", + "sp-trie", ] [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures 0.3.21", "futures-timer", "libp2p", "log", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-client-api", "sc-utils", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-state-machine", "substrate-prometheus-endpoint", "thiserror", ] @@ -11020,7 +10619,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures 0.3.21", @@ -11031,17 +10630,17 @@ dependencies = [ "sc-consensus", "sc-consensus-slots", "sc-telemetry", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-aura", "sp-consensus-slots", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", ] @@ -11049,7 +10648,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "fork-tree", @@ -11060,7 +10659,7 @@ dependencies = [ "num-rational 0.2.4", "num-traits", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "rand 0.7.3", "retain_mut", "sc-client-api", @@ -11071,20 +10670,20 @@ dependencies = [ "sc-telemetry", "schnorrkel", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-consensus-slots", "sp-consensus-vrf", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-version", "substrate-prometheus-endpoint", "thiserror", ] @@ -11092,51 +10691,47 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "sc-consensus-babe", "sc-consensus-epochs", "sc-rpc-api", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-blockchain", "sp-consensus", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-keystore", + "sp-runtime", "thiserror", ] [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "fork-tree", "parity-scale-codec", "sc-client-api", "sc-consensus", "sp-blockchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", ] [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "assert_matches", "async-trait", "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "log", "parity-scale-codec", "sc-client-api", @@ -11147,17 +10742,17 @@ dependencies = [ "sc-transaction-pool", "sc-transaction-pool-api", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", "sp-consensus-aura", "sp-consensus-babe", "sp-consensus-slots", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-timestamp", "substrate-prometheus-endpoint", "thiserror", ] @@ -11165,7 +10760,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures 0.3.21", @@ -11175,52 +10770,52 @@ dependencies = [ "sc-client-api", "sc-consensus", "sc-telemetry", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", "sp-blockchain", "sp-consensus", "sp-consensus-slots", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-timestamp", "thiserror", ] [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "sc-client-api", - "sp-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-authorship", + "sp-runtime", "thiserror", ] [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "lazy_static", - "lru 0.7.5", + "lru 0.7.7", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-executor-common", "sc-executor-wasmi", "sc-executor-wasmtime", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core-hashing-proc-macro 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-panic-handler 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-core-hashing-proc-macro", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", "sp-tasks", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-trie", + "sp-version", + "sp-wasm-interface", "tracing", "wasmi", ] @@ -11228,15 +10823,15 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "environmental", "parity-scale-codec", "sc-allocator", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", "sp-maybe-compressed-blob", + "sp-sandbox", "sp-serializer", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-wasm-interface", "thiserror", "wasm-instrument", "wasmi", @@ -11245,23 +10840,22 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "log", "parity-scale-codec", "sc-allocator", "sc-executor-common", - "scoped-tls", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime-interface", + "sp-sandbox", + "sp-wasm-interface", "wasmi", ] [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "cfg-if 1.0.0", "libc", @@ -11270,16 +10864,16 @@ dependencies = [ "parity-wasm 0.42.2", "sc-allocator", "sc-executor-common", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime-interface", + "sp-sandbox", + "sp-wasm-interface", "wasmtime", ] [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "ahash", "async-trait", @@ -11291,7 +10885,7 @@ dependencies = [ "hex", "log", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "rand 0.8.5", "sc-block-builder", "sc-chain-spec", @@ -11303,15 +10897,15 @@ dependencies = [ "sc-telemetry", "sc-utils", "serde_json", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-finality-grandpa", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", ] @@ -11319,14 +10913,11 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "finality-grandpa", "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", + "jsonrpsee", "log", "parity-scale-codec", "sc-client-api", @@ -11335,15 +10926,15 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "thiserror", ] [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "ansi_term", "futures 0.3.21", @@ -11354,33 +10945,33 @@ dependencies = [ "sc-network", "sc-transaction-pool-api", "sp-blockchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", ] [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "hex", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "serde_json", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-application-crypto", + "sp-core", + "sp-keystore", "thiserror", ] [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", - "asynchronous-codec 0.5.0", + "asynchronous-codec", "bitflags", - "bytes 1.1.0", + "bytes", "cid", "either", "fnv", @@ -11393,75 +10984,140 @@ dependencies = [ "linked-hash-map", "linked_hash_set", "log", - "lru 0.7.5", + "lru 0.7.7", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project 1.0.10", - "prost", + "prost 0.10.4", "prost-build", "rand 0.7.3", "sc-block-builder", "sc-client-api", "sc-consensus", + "sc-network-common", + "sc-network-light", + "sc-network-sync", "sc-peerset", "sc-utils", "serde", "serde_json", - "smallvec 1.8.0", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-finality-grandpa", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "substrate-prometheus-endpoint", "thiserror", - "unsigned-varint 0.6.0", + "unsigned-varint", "void", "zeroize", ] +[[package]] +name = "sc-network-common" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" +dependencies = [ + "futures 0.3.21", + "libp2p", + "parity-scale-codec", + "prost-build", + "sc-peerset", + "smallvec", +] + [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "ahash", "futures 0.3.21", "futures-timer", "libp2p", "log", - "lru 0.7.5", + "lru 0.7.7", "sc-network", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "substrate-prometheus-endpoint", "tracing", ] +[[package]] +name = "sc-network-light" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" +dependencies = [ + "futures 0.3.21", + "libp2p", + "log", + "parity-scale-codec", + "prost 0.10.4", + "prost-build", + "sc-client-api", + "sc-network-common", + "sc-peerset", + "sp-blockchain", + "sp-core", + "sp-runtime", + "thiserror", +] + +[[package]] +name = "sc-network-sync" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" +dependencies = [ + "bitflags", + "either", + "fork-tree", + "futures 0.3.21", + "libp2p", + "log", + "lru 0.7.7", + "parity-scale-codec", + "prost 0.10.4", + "prost-build", + "sc-client-api", + "sc-consensus", + "sc-network-common", + "sc-peerset", + "smallvec", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-finality-grandpa", + "sp-runtime", + "thiserror", +] + [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "bytes 1.1.0", + "bytes", "fnv", "futures 0.3.21", "futures-timer", "hex", "hyper", - "hyper-rustls 0.22.1", + "hyper-rustls", "num_cpus", "once_cell", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "rand 0.7.3", "sc-client-api", "sc-network", "sc-utils", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "threadpool", "tracing", ] @@ -11469,7 +11125,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "libp2p", @@ -11482,7 +11138,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -11491,15 +11147,14 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "hash-db", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -11508,54 +11163,47 @@ dependencies = [ "sc-transaction-pool-api", "sc-utils", "serde_json", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-keystore", "sp-offchain", "sp-rpc", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-version", ] [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", + "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-chain-spec", "sc-transaction-pool-api", "scale-info", "serde", "serde_json", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-rpc", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-tracing", + "sp-version", "thiserror", ] [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-http-server", - "jsonrpc-ipc-server", - "jsonrpc-pubsub", - "jsonrpc-ws-server", + "jsonrpsee", "log", "serde_json", "substrate-prometheus-endpoint", @@ -11565,20 +11213,19 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "directories", - "exit-future 0.2.0", + "exit-future", "futures 0.3.21", "futures-timer", "hash-db", - "jsonrpc-core", - "jsonrpc-pubsub", + "jsonrpsee", "log", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project 1.0.10", "rand 0.7.3", "sc-block-builder", @@ -11590,9 +11237,11 @@ dependencies = [ "sc-informant", "sc-keystore", "sc-network", + "sc-network-common", "sc-offchain", "sc-rpc", "sc-rpc-server", + "sc-sysinfo", "sc-telemetry", "sc-tracing", "sc-transaction-pool", @@ -11600,24 +11249,24 @@ dependencies = [ "sc-utils", "serde", "serde_json", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-externalities", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-storage", + "sp-tracing", "sp-transaction-pool", "sp-transaction-storage-proof", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-trie", + "sp-version", "substrate-prometheus-endpoint", "tempfile", "thiserror", @@ -11629,25 +11278,23 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "log", "parity-scale-codec", "parity-util-mem", "parity-util-mem-derive", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "sc-client-api", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", ] [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "parity-scale-codec", "sc-chain-spec", "sc-client-api", @@ -11657,20 +11304,39 @@ dependencies = [ "serde", "serde_json", "sp-blockchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "thiserror", ] +[[package]] +name = "sc-sysinfo" +version = "6.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" +dependencies = [ + "futures 0.3.21", + "libc", + "log", + "rand 0.7.3", + "rand_pcg 0.2.1", + "regex", + "sc-telemetry", + "serde", + "serde_json", + "sp-core", + "sp-io", + "sp-std", +] + [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "chrono", "futures 0.3.21", "libp2p", "log", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project 1.0.10", "rand 0.7.3", "serde", @@ -11682,7 +11348,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "ansi_term", "atty", @@ -11691,19 +11357,19 @@ dependencies = [ "libc", "log", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "regex", "rustc-hash", "sc-client-api", "sc-rpc-server", "sc-tracing-proc-macro", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-rpc", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-tracing", "thiserror", "tracing", "tracing-log", @@ -11713,9 +11379,9 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -11724,7 +11390,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "futures-timer", @@ -11732,17 +11398,17 @@ dependencies = [ "log", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "retain_mut", "sc-client-api", "sc-transaction-pool-api", "sc-utils", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-tracing", "sp-transaction-pool", "substrate-prometheus-endpoint", "thiserror", @@ -11751,26 +11417,26 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "log", "serde", "sp-blockchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", "thiserror", ] [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "futures-timer", "lazy_static", "log", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "prometheus", ] @@ -11794,7 +11460,7 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50e334bb10a245e28e5fd755cabcafd96cfcd167c99ae63a46924ca8d8703a3c" dependencies = [ - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -11807,7 +11473,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ "lazy_static", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -11824,38 +11490,16 @@ dependencies = [ "rand 0.7.3", "rand_core 0.5.1", "sha2 0.8.2", - "subtle 2.4.1", + "subtle", "zeroize", ] -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - -[[package]] -name = "scopeguard" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" - [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sct" version = "0.7.0" @@ -11874,8 +11518,7 @@ checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" dependencies = [ "der", "generic-array 0.14.5", - "pkcs8", - "subtle 2.4.1", + "subtle", "zeroize", ] @@ -11935,7 +11578,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" dependencies = [ - "semver-parser 0.7.0", + "semver-parser", ] [[package]] @@ -11944,16 +11587,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser 0.7.0", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser 0.10.2", + "semver-parser", ] [[package]] @@ -11971,29 +11605,20 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - [[package]] name = "serde" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -12002,9 +11627,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ "itoa 1.0.1", "ryu", @@ -12024,11 +11649,20 @@ dependencies = [ name = "session-keys-primitives" version = "0.1.0" dependencies = [ + "async-trait", + "frame-support", "nimbus-primitives", "parity-scale-codec", "scale-info", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-consensus-babe", + "sp-consensus-vrf", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-std", ] [[package]] @@ -12051,7 +11685,7 @@ checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpufeatures 0.2.2", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] @@ -12076,7 +11710,7 @@ checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpufeatures 0.2.2", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] @@ -12088,7 +11722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" dependencies = [ "cfg-if 1.0.0", - "cpufeatures 0.2.2", + "cpufeatures", "digest 0.10.3", ] @@ -12167,6 +11801,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" dependencies = [ + "digest 0.9.0", "rand_core 0.6.3", ] @@ -12222,14 +11857,14 @@ dependencies = [ [[package]] name = "slot-range-helper" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "enumn", "parity-scale-codec", "paste", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] @@ -12241,15 +11876,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "smallvec" -version = "0.6.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0" -dependencies = [ - "maybe-uninit", -] - [[package]] name = "smallvec" version = "1.8.0" @@ -12264,31 +11890,19 @@ checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" [[package]] name = "snow" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6142f7c25e94f6fd25a32c3348ec230df9109b463f59c8c7acc4bd34936babb7" +checksum = "774d05a3edae07ce6d68ea6984f3c05e9bba8927e3dd591e3b479e5b03213d0d" dependencies = [ "aes-gcm", - "blake2 0.9.2", + "blake2", "chacha20poly1305", - "rand 0.8.5", + "curve25519-dalek 4.0.0-pre.1", "rand_core 0.6.3", "ring", - "rustc_version 0.3.3", - "sha2 0.9.9", - "subtle 2.4.1", - "x25519-dalek", -] - -[[package]] -name = "socket2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "winapi 0.3.9", + "rustc_version 0.4.0", + "sha2 0.10.2", + "subtle", ] [[package]] @@ -12298,7 +11912,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -12308,7 +11922,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" dependencies = [ "base64 0.13.0", - "bytes 1.1.0", + "bytes", "flate2", "futures 0.3.21", "httparse", @@ -12320,56 +11934,27 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "hash-db", - "log", - "parity-scale-codec", - "sp-api-proc-macro 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "thiserror", -] - -[[package]] -name = "sp-api" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "hash-db", "log", "parity-scale-codec", - "sp-api-proc-macro 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-api-proc-macro", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-version", "thiserror", ] [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "blake2 0.10.4", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-api-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "blake2 0.10.4", - "proc-macro-crate 1.1.3", + "blake2", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -12378,264 +11963,179 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "sp-application-crypto" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-std", ] [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "static_assertions", -] - -[[package]] -name = "sp-arithmetic" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "scale-info", - "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-debug-derive", + "sp-std", "static_assertions", ] [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "sp-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "async-trait", - "parity-scale-codec", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", + "sp-runtime", + "sp-std", ] [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "parity-scale-codec", - "sp-inherents 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "log", - "lru 0.7.5", + "lru 0.7.7", "parity-scale-codec", - "parking_lot 0.12.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "parking_lot 0.12.1", + "sp-api", "sp-consensus", "sp-database", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-state-machine", "thiserror", ] [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures 0.3.21", "futures-timer", "log", "parity-scale-codec", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-version", "thiserror", ] [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-consensus", "sp-consensus-slots", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "merlin", "parity-scale-codec", "scale-info", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-consensus", "sp-consensus-slots", "sp-consensus-vrf", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-keystore", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "parity-scale-codec", - "schnorrkel", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "sp-core" -version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "base58 0.2.0", - "bitflags", - "blake2-rfc", - "byteorder", - "dyn-clonable", - "ed25519-dalek", - "futures 0.3.21", - "hash-db", - "hash256-std-hasher", - "hex", - "impl-serde", - "lazy_static", - "libsecp256k1 0.7.0", - "log", - "merlin", - "num-traits", "parity-scale-codec", - "parity-util-mem", - "parking_lot 0.12.0", - "primitive-types", - "rand 0.7.3", - "regex", "scale-info", "schnorrkel", - "secp256k1", - "secrecy", - "serde", - "sp-core-hashing 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-debug-derive 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "ss58-registry", - "substrate-bip39", - "thiserror", - "tiny-bip39", - "wasmi", - "zeroize", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "base58 0.2.0", + "base58", "bitflags", "blake2-rfc", "byteorder", @@ -12653,7 +12153,7 @@ dependencies = [ "num-traits", "parity-scale-codec", "parity-util-mem", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "primitive-types", "rand 0.7.3", "regex", @@ -12662,12 +12162,12 @@ dependencies = [ "secp256k1", "secrecy", "serde", - "sp-core-hashing 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", "ss58-registry", "substrate-bip39", "thiserror", @@ -12679,196 +12179,111 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "blake2 0.10.4", + "blake2", "byteorder", "digest 0.10.3", "sha2 0.10.2", "sha3 0.10.1", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-std", "twox-hash", ] -[[package]] -name = "sp-core-hashing" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "blake2 0.10.4", - "byteorder", - "digest 0.10.3", - "sha2 0.10.2", - "sha3 0.10.1", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "twox-hash", -] - -[[package]] -name = "sp-core-hashing-proc-macro" -version = "5.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "proc-macro2", - "quote", - "sp-core-hashing 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "syn", -] - [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "proc-macro2", "quote", - "sp-core-hashing 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core-hashing", "syn", ] [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "kvdb", - "parking_lot 0.12.0", + "parking_lot 0.12.1", ] [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "sp-debug-derive" -version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-externalities" -version = "0.12.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "environmental", "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-std", + "sp-storage", ] [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "finality-grandpa", "log", "parity-scale-codec", "scale-info", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "sp-inherents" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "async-trait", - "impl-trait-for-tuples", - "parity-scale-codec", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "thiserror", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-keystore", + "sp-runtime", + "sp-std", ] [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core", + "sp-runtime", + "sp-std", "thiserror", ] [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "hash-db", "libsecp256k1 0.7.0", "log", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "secp256k1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "tracing", - "tracing-core", -] - -[[package]] -name = "sp-io" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "futures 0.3.21", - "hash-db", - "libsecp256k1 0.7.0", - "log", - "parity-scale-codec", - "parking_lot 0.12.0", - "secp256k1", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core", + "sp-externalities", + "sp-keystore", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", + "sp-wasm-interface", "tracing", "tracing-core", ] @@ -12876,94 +12291,83 @@ dependencies = [ [[package]] name = "sp-keyring" version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "lazy_static", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "strum 0.23.0", ] [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures 0.3.21", "merlin", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "schnorrkel", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "thiserror", -] - -[[package]] -name = "sp-keystore" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "async-trait", - "futures 0.3.21", - "merlin", - "parity-scale-codec", - "parking_lot 0.12.0", - "schnorrkel", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core", + "sp-externalities", "thiserror", ] [[package]] name = "sp-maybe-compressed-blob" version = "4.1.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "thiserror", "zstd", ] [[package]] -name = "sp-npos-elections" +name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ + "log", "parity-scale-codec", - "scale-info", "serde", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-debug-derive", + "sp-runtime", + "sp-std", ] [[package]] -name = "sp-offchain" +name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] -name = "sp-panic-handler" -version = "4.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +name = "sp-offchain" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "backtrace", - "lazy_static", - "regex", + "sp-api", + "sp-core", + "sp-runtime", ] [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "backtrace", "lazy_static", @@ -12973,39 +12377,17 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "rustc-hash", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "sp-runtime" -version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "either", - "hash256-std-hasher", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "parity-util-mem", - "paste", - "rand 0.7.3", - "scale-info", - "serde", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", ] [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "either", "hash256-std-hasher", @@ -13017,75 +12399,60 @@ dependencies = [ "rand 0.7.3", "scale-info", "serde", - "sp-application-crypto 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-arithmetic 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-std", ] [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "primitive-types", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface-proc-macro 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "static_assertions", -] - -[[package]] -name = "sp-runtime-interface" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime-interface-proc-macro 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-storage 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-tracing 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-wasm-interface 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", "static_assertions", ] [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "Inflector", - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", ] [[package]] -name = "sp-runtime-interface-proc-macro" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +name = "sp-sandbox" +version = "0.10.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "Inflector", - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", + "log", + "parity-scale-codec", + "sp-core", + "sp-io", + "sp-std", + "sp-wasm-interface", + "wasmi", ] [[package]] name = "sp-serializer" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "serde", "serde_json", @@ -13094,197 +12461,104 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "sp-session" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", -] - -[[package]] -name = "sp-staking" -version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-core", + "sp-runtime", + "sp-staking", + "sp-std", ] [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "scale-info", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-runtime", + "sp-std", ] [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "hash-db", "log", "num-traits", "parity-scale-codec", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "rand 0.7.3", - "smallvec 1.8.0", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-panic-handler 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-std", + "sp-trie", "thiserror", "tracing", "trie-root 0.17.0", ] -[[package]] -name = "sp-state-machine" -version = "0.12.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "hash-db", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.0", - "rand 0.7.3", - "smallvec 1.8.0", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-panic-handler 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "thiserror", - "tracing", - "trie-root 0.17.0", -] - -[[package]] -name = "sp-std" -version = "4.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" - [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" - -[[package]] -name = "sp-storage" -version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "impl-serde", "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-debug-derive", + "sp-std", ] [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "log", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime-interface", + "sp-std", ] [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures-timer", "log", "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "thiserror", -] - -[[package]] -name = "sp-timestamp" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "async-trait", - "futures-timer", - "log", - "parity-scale-codec", - "sp-api 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std", "thiserror", ] [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "tracing", - "tracing-core", - "tracing-subscriber", -] - -[[package]] -name = "sp-tracing" -version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-std", "tracing", "tracing-core", "tracing-subscriber", @@ -13293,109 +12567,65 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-runtime", ] [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "log", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", -] - -[[package]] -name = "sp-trie" -version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "hash-db", - "memory-db", - "parity-scale-codec", - "scale-info", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "thiserror", - "trie-db", - "trie-root 0.17.0", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-trie", ] [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "hash-db", "memory-db", "parity-scale-codec", "scale-info", - "sp-core 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "thiserror", - "trie-db", - "trie-root 0.17.0", -] - -[[package]] -name = "sp-version" -version = "5.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "parity-wasm 0.42.2", - "scale-info", - "serde", - "sp-core-hashing-proc-macro 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version-proc-macro 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-std", "thiserror", + "trie-db", + "trie-root 0.17.0", ] [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "impl-serde", "parity-scale-codec", "parity-wasm 0.42.2", "scale-info", "serde", - "sp-core-hashing-proc-macro 5.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "sp-version-proc-macro 4.0.0-dev (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", + "sp-core-hashing-proc-macro", + "sp-runtime", + "sp-std", + "sp-version-proc-macro", "thiserror", ] [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "parity-scale-codec", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sp-version-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -13406,28 +12636,16 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-std", "wasmi", "wasmtime", ] -[[package]] -name = "sp-wasm-interface" -version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" -dependencies = [ - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "sp-std 4.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.19)", - "wasmi", -] - [[package]] name = "spin" version = "0.5.2" @@ -13440,24 +12658,14 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" dependencies = [ - "lock_api 0.4.6", -] - -[[package]] -name = "spki" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" -dependencies = [ - "base64ct", - "der", + "lock_api", ] [[package]] name = "ss58-registry" -version = "1.17.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b84a70894df7a73666e0694f44b41a9571625e9546fb58a0818a565d2c7e084" +checksum = "5d804c8d48aeab838be31570866fce1130d275b563d49af08b4927a0bd561e7c" dependencies = [ "Inflector", "num-format", @@ -13627,7 +12835,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "platforms", ] @@ -13645,29 +12853,28 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.21", - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "log", "parity-scale-codec", "sc-client-api", "sc-rpc-api", "sc-transaction-pool-api", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "serde_json", + "sp-api", "sp-block-builder", "sp-blockchain", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", ] [[package]] name = "substrate-prometheus-endpoint" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures-util", "hyper", @@ -13680,30 +12887,28 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "4.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "jsonrpc-core", - "jsonrpc-core-client", - "jsonrpc-derive", + "jsonrpsee", "log", "parity-scale-codec", "sc-client-api", "sc-rpc-api", "scale-info", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-trie", "trie-db", ] [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "async-trait", "futures 0.3.21", @@ -13719,52 +12924,52 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", "sp-keyring", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-keystore", + "sp-runtime", + "sp-state-machine", ] [[package]] name = "substrate-test-runtime" version = "2.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "beefy-primitives", "cfg-if 1.0.0", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-rpc-runtime-api", "log", "memory-db", "pallet-babe", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "parity-scale-codec", "parity-util-mem", "sc-service", "scale-info", "serde", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-application-crypto 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", + "sp-application-crypto", "sp-block-builder", "sp-consensus-aura", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-externalities", "sp-finality-grandpa", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-inherents", + "sp-io", "sp-keyring", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime-interface 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-runtime-interface", + "sp-session", + "sp-state-machine", + "sp-std", "sp-transaction-pool", - "sp-trie 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-trie", + "sp-version", "substrate-wasm-builder", "trie-db", ] @@ -13772,18 +12977,18 @@ dependencies = [ [[package]] name = "substrate-test-runtime-client" version = "2.0.0" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "futures 0.3.21", "parity-scale-codec", "sc-block-builder", "sc-client-api", "sc-consensus", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-api", "sp-blockchain", "sp-consensus", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-runtime", "substrate-test-client", "substrate-test-runtime", ] @@ -13791,7 +12996,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ "ansi_term", "build-helper", @@ -13804,12 +13009,6 @@ dependencies = [ "wasm-gc-api", ] -[[package]] -name = "subtle" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" - [[package]] name = "subtle" version = "2.4.1" @@ -13818,9 +13017,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.95" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" +checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" dependencies = [ "proc-macro2", "quote", @@ -13839,6 +13038,27 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "system-configuration" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tap" version = "1.0.1" @@ -13862,7 +13082,7 @@ dependencies = [ "libc", "redox_syscall", "remove_dir_all", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -13881,7 +13101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -13907,18 +13127,18 @@ checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -13981,7 +13201,7 @@ checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", "wasi 0.10.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -14003,19 +13223,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "tiny-hderive" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b874a4992538d4b2f4fbbac11b9419d685f4b39bdc3fed95b04e07bfd76040" -dependencies = [ - "base58 0.1.0", - "hmac 0.7.1", - "libsecp256k1 0.3.5", - "memzero", - "sha2 0.8.2", -] - [[package]] name = "tiny-keccak" version = "2.0.2" @@ -14042,22 +13249,22 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.17.0" +version = "1.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" +checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" dependencies = [ - "bytes 1.1.0", + "bytes", "libc", "memchr", - "mio 0.8.2", + "mio", "num_cpus", "once_cell", - "parking_lot 0.12.0", + "parking_lot 0.12.1", "pin-project-lite 0.2.8", "signal-hook-registry", - "socket2 0.4.4", + "socket2", "tokio-macros", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -14071,37 +13278,15 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-rustls" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" -dependencies = [ - "rustls 0.19.1", - "tokio", - "webpki 0.21.4", -] - [[package]] name = "tokio-rustls" version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" dependencies = [ - "rustls 0.20.4", - "tokio", - "webpki 0.22.0", -] - -[[package]] -name = "tokio-stream" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" -dependencies = [ - "futures-core", - "pin-project-lite 0.2.8", + "rustls", "tokio", + "webpki", ] [[package]] @@ -14110,7 +13295,7 @@ version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" dependencies = [ - "bytes 1.1.0", + "bytes", "futures-core", "futures-sink", "log", @@ -14120,11 +13305,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c" +checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" dependencies = [ - "bytes 1.1.0", + "bytes", "futures-core", "futures-io", "futures-sink", @@ -14172,9 +13357,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" dependencies = [ "lazy_static", "valuable", @@ -14192,8 +13377,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "polkadot-node-jaeger", "polkadot-primitives", @@ -14203,11 +13388,11 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "expander 0.0.6", - "proc-macro-crate 1.1.3", + "proc-macro-crate", "proc-macro2", "quote", "syn", @@ -14215,12 +13400,14 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ + "ahash", "lazy_static", "log", + "lru 0.7.7", "tracing-core", ] @@ -14249,7 +13436,7 @@ dependencies = [ "serde", "serde_json", "sharded-slab", - "smallvec 1.8.0", + "smallvec", "thread_local", "tracing", "tracing-core", @@ -14267,7 +13454,7 @@ dependencies = [ "hashbrown 0.12.0", "log", "rustc-hex", - "smallvec 1.8.0", + "smallvec", ] [[package]] @@ -14300,9 +13487,9 @@ dependencies = [ [[package]] name = "trust-dns-proto" -version = "0.20.4" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca94d4e9feb6a181c690c4040d7a24ef34018d8313ac5044a61d21222ae24e31" +checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" dependencies = [ "async-trait", "cfg-if 1.0.0", @@ -14311,22 +13498,22 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna 0.2.3", + "idna", "ipnet", "lazy_static", "log", "rand 0.8.5", - "smallvec 1.8.0", + "smallvec", "thiserror", "tinyvec", - "url 2.2.2", + "url", ] [[package]] name = "trust-dns-resolver" -version = "0.20.4" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecae383baad9995efaa34ce8e57d12c3f305e545887472a492b838f4b5cfb77a" +checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" dependencies = [ "cfg-if 1.0.0", "futures-util", @@ -14334,9 +13521,9 @@ dependencies = [ "lazy_static", "log", "lru-cache", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "resolv-conf", - "smallvec 1.8.0", + "smallvec", "thiserror", "trust-dns-proto", ] @@ -14350,9 +13537,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19#174735ea1bb5fc4513519c45181d8df63d86f613" +source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.23#76522d7937ba94ff1becef4e4e3ca78e3e1de341" dependencies = [ - "clap 3.1.6", + "clap 3.1.18", "jsonrpsee", "log", "parity-scale-codec", @@ -14362,13 +13549,13 @@ dependencies = [ "sc-executor", "sc-service", "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-externalities 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-keystore 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-state-machine 0.12.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-externalities", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-version", "zstd", ] @@ -14478,25 +13665,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ "generic-array 0.14.5", - "subtle 2.4.1", -] - -[[package]] -name = "unsigned-varint" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fdeedbf205afadfe39ae559b75c3240f24e257d0ca27e85f85cb82aa19ac35" - -[[package]] -name = "unsigned-varint" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35581ff83d4101e58b582e607120c7f5ffb17e632a980b1f38334d76b36908b2" -dependencies = [ - "asynchronous-codec 0.5.0", - "bytes 1.1.0", - "futures-io", - "futures-util", + "subtle", ] [[package]] @@ -14505,8 +13674,8 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" dependencies = [ - "asynchronous-codec 0.6.0", - "bytes 1.1.0", + "asynchronous-codec", + "bytes", "futures-io", "futures-util", ] @@ -14517,17 +13686,6 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - [[package]] name = "url" version = "2.2.2" @@ -14535,9 +13693,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" dependencies = [ "form_urlencoded", - "idna 0.2.3", + "idna", "matches", - "percent-encoding 2.1.0", + "percent-encoding", ] [[package]] @@ -14548,9 +13706,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.0.0-alpha.8" +version = "1.0.0-alpha.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79923f7731dc61ebfba3633098bf3ac533bbd35ccd8c57e7088d9a5eebe0263f" +checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" dependencies = [ "ctor", "version_check", @@ -14602,7 +13760,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", - "winapi 0.3.9", + "winapi", "winapi-util", ] @@ -14743,6 +13901,7 @@ checksum = "ca00c5147c319a8ec91ec1a0edbec31e566ce2c9cc93b3f9bb86a9efd0eb795d" dependencies = [ "downcast-rs", "libc", + "libm", "memory_units", "num-rational 0.2.4", "num-traits", @@ -14761,31 +13920,30 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.81.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc" +checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a" [[package]] name = "wasmtime" -version = "0.33.1" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9c724da92e39a85d2231d4c2a942c8be295211441dbca581c6c3f3f45a9f00" +checksum = "21ffb4705016d5ca91e18a72ed6822dab50e6d5ddd7045461b17ef19071cdef1" dependencies = [ "anyhow", "backtrace", "bincode", "cfg-if 1.0.0", - "cpp_demangle", "indexmap", "lazy_static", "libc", "log", "object", + "once_cell", "paste", "psm", "rayon", "region", - "rustc-demangle", "serde", "target-lexicon", "wasmparser", @@ -14794,14 +13952,14 @@ dependencies = [ "wasmtime-environ", "wasmtime-jit", "wasmtime-runtime", - "winapi 0.3.9", + "winapi", ] [[package]] name = "wasmtime-cache" -version = "0.33.1" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4439d99100298344567c0eb6916ad5864e99e54760b8177c427e529077fb30" +checksum = "85c6ab24291fa7cb3a181f5669f6c72599b7ef781669759b45c7828c5999d0c0" dependencies = [ "anyhow", "base64 0.13.0", @@ -14813,15 +13971,15 @@ dependencies = [ "serde", "sha2 0.9.9", "toml", - "winapi 0.3.9", + "winapi", "zstd", ] [[package]] name = "wasmtime-cranelift" -version = "0.33.1" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1762765dd69245f00e5d9783b695039e449a7be0f9c5383e4c78465dd6131aeb" +checksum = "f04c810078a491b7bc4866ebe045f714d2b95e6b539e1f64009a4a7606be11de" dependencies = [ "anyhow", "cranelift-codegen", @@ -14841,9 +13999,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.33.1" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4468301d95ec71710bb6261382efe27d1296447711645e3dbabaea6e4de3504" +checksum = "61448266ea164b1ac406363cdcfac81c7c44db4d94c7a81c8620ac6c5c6cdf59" dependencies = [ "anyhow", "cranelift-entity", @@ -14861,41 +14019,56 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.33.1" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab0ae6e581ff014b470ec35847ea3c0b4c3ace89a55df5a04c802a11f4574e7d" +checksum = "156b4623c6b0d4b8c24afb846c20525922f538ef464cc024abab7ea8de2109a2" dependencies = [ "addr2line", "anyhow", "bincode", "cfg-if 1.0.0", + "cpp_demangle", "gimli", + "log", "object", "region", + "rustc-demangle", "rustix", "serde", "target-lexicon", "thiserror", "wasmtime-environ", + "wasmtime-jit-debug", "wasmtime-runtime", - "winapi 0.3.9", + "winapi", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5dc31f811760a6c76b2672c404866fd19b75e5fb3b0075a3e377a6846490654" +dependencies = [ + "lazy_static", + "object", + "rustix", ] [[package]] name = "wasmtime-runtime" -version = "0.33.1" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9c28877ae37a367cda7b52b8887589816152e95dde9b7c80cc686f52761961" +checksum = "f907beaff69d4d920fa4688411ee4cc75c0f01859e424677f9e426e2ef749864" dependencies = [ "anyhow", "backtrace", "cc", "cfg-if 1.0.0", "indexmap", - "lazy_static", "libc", "log", "mach", + "memfd", "memoffset", "more-asserts", "rand 0.8.5", @@ -14903,14 +14076,15 @@ dependencies = [ "rustix", "thiserror", "wasmtime-environ", - "winapi 0.3.9", + "wasmtime-jit-debug", + "winapi", ] [[package]] name = "wasmtime-types" -version = "0.33.1" +version = "0.35.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395726e8f5dd8c57cb0db445627b842343f7e29ed7489467fdf7953ed9d3cd4f" +checksum = "514ef0e5fd197b9609dc9eb74beba0c84d5a12b2417cbae55534633329ba4852" dependencies = [ "cranelift-entity", "serde", @@ -14928,16 +14102,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki" version = "0.22.0" @@ -14948,22 +14112,13 @@ dependencies = [ "untrusted", ] -[[package]] -name = "webpki-roots" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" -dependencies = [ - "webpki 0.21.4", -] - [[package]] name = "webpki-roots" version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" dependencies = [ - "webpki 0.22.0", + "webpki", ] [[package]] @@ -14977,23 +14132,23 @@ dependencies = [ [[package]] name = "westend-runtime" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "beefy-primitives", "bitvec", "frame-election-provider-support", "frame-executive", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "frame-system-rpc-runtime-api", "frame-try-runtime", "log", "pallet-authority-discovery", - "pallet-authorship 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-authorship", "pallet-babe", "pallet-bags-list", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-balances", "pallet-collective", "pallet-democracy", "pallet-election-provider-multi-phase", @@ -15003,20 +14158,20 @@ dependencies = [ "pallet-im-online", "pallet-indices", "pallet-membership", - "pallet-mmr-primitives", "pallet-multisig", "pallet-nicks", + "pallet-nomination-pools", "pallet-offences", "pallet-preimage", "pallet-proxy", "pallet-recovery", "pallet-scheduler", - "pallet-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-session", "pallet-society", "pallet-staking", "pallet-staking-reward-curve", "pallet-sudo", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "pallet-timestamp", "pallet-transaction-payment", "pallet-transaction-payment-rpc-runtime-api", "pallet-treasury", @@ -15032,22 +14187,23 @@ dependencies = [ "scale-info", "serde", "serde_derive", - "smallvec 1.8.0", - "sp-api 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-api", "sp-authority-discovery", "sp-block-builder", "sp-consensus-babe", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-inherents 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-core", + "sp-inherents", + "sp-io", + "sp-mmr-primitives", "sp-npos-elections", "sp-offchain", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-session 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-staking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", "sp-transaction-pool", - "sp-version 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-version", "substrate-wasm-builder", "westend-runtime-constants", "xcm", @@ -15057,14 +14213,14 @@ dependencies = [ [[package]] name = "westend-runtime-constants" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "polkadot-primitives", "polkadot-runtime-common", - "smallvec 1.8.0", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "smallvec", + "sp-runtime", ] [[package]] @@ -15080,15 +14236,9 @@ dependencies = [ [[package]] name = "widestring" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" - -[[package]] -name = "winapi" -version = "0.2.8" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" [[package]] name = "winapi" @@ -15100,12 +14250,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -15118,7 +14262,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -15127,37 +14271,74 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac7fef12f4b59cd0a29339406cc9203ab44e440ddff6b3f5a41455349fa9cf3" +dependencies = [ + "windows_aarch64_msvc 0.29.0", + "windows_i686_gnu 0.29.0", + "windows_i686_msvc 0.29.0", + "windows_x86_64_gnu 0.29.0", + "windows_x86_64_msvc 0.29.0", +] + [[package]] name = "windows-sys" version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6" dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "windows_aarch64_msvc 0.32.0", + "windows_i686_gnu 0.32.0", + "windows_i686_msvc 0.32.0", + "windows_x86_64_gnu 0.32.0", + "windows_x86_64_msvc 0.32.0", ] +[[package]] +name = "windows_aarch64_msvc" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d027175d00b01e0cbeb97d6ab6ebe03b12330a35786cbaca5252b1c4bf5d9b" + [[package]] name = "windows_aarch64_msvc" version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +[[package]] +name = "windows_i686_gnu" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8793f59f7b8e8b01eda1a652b2697d87b93097198ae85f823b969ca5b89bba58" + [[package]] name = "windows_i686_gnu" version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +[[package]] +name = "windows_i686_msvc" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8602f6c418b67024be2996c512f5f995de3ba417f4c75af68401ab8756796ae4" + [[package]] name = "windows_i686_msvc" version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +[[package]] +name = "windows_x86_64_gnu" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d615f419543e0bd7d2b3323af0d86ff19cbc4f816e6453f36a2c2ce889c354" + [[package]] name = "windows_x86_64_gnu" version = "0.32.0" @@ -15166,27 +14347,23 @@ checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" [[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "11d95421d9ed3672c280884da53201a5c46b7b2765ca6faf34b0d71cf34a3561" [[package]] -name = "winreg" -version = "0.6.2" +name = "windows_x86_64_msvc" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -dependencies = [ - "winapi 0.3.9", -] +checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" [[package]] -name = "ws2_32-sys" -version = "0.2.1" +name = "winreg" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "winapi", ] [[package]] @@ -15211,8 +14388,8 @@ dependencies = [ [[package]] name = "xcm" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -15224,38 +14401,38 @@ dependencies = [ [[package]] name = "xcm-builder" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", + "frame-system", "log", "pallet-transaction-payment", "parity-scale-codec", "polkadot-parachain", "scale-info", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", + "sp-io", + "sp-runtime", + "sp-std", "xcm", "xcm-executor", ] [[package]] name = "xcm-executor" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-arithmetic 5.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", "xcm", ] @@ -15263,8 +14440,10 @@ dependencies = [ name = "xcm-primitives" version = "0.1.0" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "ethereum", + "ethereum-types", + "frame-support", + "frame-system", "hex", "log", "orml-traits", @@ -15272,8 +14451,9 @@ dependencies = [ "scale-info", "serde", "sha3 0.8.2", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-runtime", + "sp-std", "xcm", "xcm-builder", "xcm-executor", @@ -15282,7 +14462,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "0.1.0" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ "Inflector", "proc-macro2", @@ -15292,133 +14472,40 @@ dependencies = [ [[package]] name = "xcm-simulator" -version = "0.9.19" -source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.19#b8559e1c5aa94ef1d41257218be56e3bf8609dcc" +version = "0.9.23" +source = "git+https://github.com/purestake/polkadot?branch=moonbeam-polkadot-v0.9.23#2fd38f09064ce74532cfd61295f2b6f8fdd1e31d" dependencies = [ - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "frame-support", "parity-scale-codec", "paste", "polkadot-core-primitives", "polkadot-parachain", "polkadot-runtime-parachains", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "xcm", - "xcm-executor", -] - -[[package]] -name = "xcm-transactor" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "frame-benchmarking 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "orml-traits", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-xcm", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "xcm", - "xcm-builder", - "xcm-executor", - "xcm-primitives", -] - -[[package]] -name = "xcm-transactor-precompiles" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "derive_more", - "evm", - "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "num_enum", - "orml-traits", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-evm", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-xcm", - "parity-scale-codec", - "precompile-utils", - "rustc-hex", - "scale-info", - "serde", - "sha3 0.9.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "xcm", - "xcm-builder", - "xcm-executor", - "xcm-primitives", - "xcm-transactor", -] - -[[package]] -name = "xtokens-precompiles" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "derive_more", - "fp-evm", - "frame-support 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "frame-system 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "log", - "num_enum", - "orml-traits", - "orml-xtokens", - "pallet-balances 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-evm", - "pallet-timestamp 4.0.0-dev (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "pallet-xcm", - "parity-scale-codec", - "precompile-utils", - "rustc-hex", - "scale-info", - "serde", - "sha3 0.9.1", - "sp-core 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-io 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-runtime 6.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", - "sp-std 4.0.0 (git+https://github.com/purestake/substrate?branch=moonbeam-polkadot-v0.9.19)", + "sp-io", + "sp-std", "xcm", - "xcm-builder", "xcm-executor", - "xcm-primitives", ] [[package]] name = "yamux" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d9028f208dd5e63c614be69f115c1b53cacc1111437d4c765185856666c107" +checksum = "0c0608f53c1dc0bad505d03a34bbd49fbf2ad7b51eb036123e896365532745a1" dependencies = [ "futures 0.3.21", "log", "nohash-hasher", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "rand 0.8.5", "static_assertions", ] [[package]] name = "zeroize" -version = "1.5.4" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb5728b8afd3f280a869ce1d4c554ffaed35f45c231fc41bfbd0381bef50317" +checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" dependencies = [ "zeroize_derive", ] @@ -15437,18 +14524,18 @@ dependencies = [ [[package]] name = "zstd" -version = "0.9.2+zstd.1.5.1" +version = "0.10.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2390ea1bf6c038c39674f22d95f0564725fc06034a47129179810b2fc58caa54" +checksum = "5f4a6bd64f22b5e3e94b4e238669ff9f10815c27a5180108b849d24174a83847" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "4.1.3+zstd.1.5.1" +version = "4.1.6+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e99d81b99fb3c2c2c794e3fe56c305c63d5173a16a46b5850b07c935ffc7db79" +checksum = "94b61c51bb270702d6167b8ce67340d2754b088d0c091b06e593aa772c3ee9bb" dependencies = [ "libc", "zstd-sys", @@ -15456,9 +14543,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.6.2+zstd.1.5.1" +version = "1.6.3+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f" +checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8" dependencies = [ "cc", "libc", diff --git a/Cargo.toml b/Cargo.toml index 927672fbdd..eee37946a9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "bin/utils/moonkey", "client/rpc/finality", "client/rpc/manual-xcm", + "client/vrf", "node", "node/cli", "node/service", @@ -11,8 +12,18 @@ members = [ "pallets/migrations", "pallets/moonbeam-orbiters", "pallets/proxy-genesis-companion", + "precompiles/author-mapping", "precompiles/balances-erc20", + "precompiles/batch", + "precompiles/call-permit", + "precompiles/crowdloan-rewards", + "precompiles/pallet-democracy", + "precompiles/parachain-staking", + "precompiles/randomness", + "precompiles/relay-encoder", "precompiles/utils/macro", + "precompiles/xcm-transactor", + "precompiles/xtokens", "runtime/moonbase", "runtime/moonbeam", "runtime/moonriver", diff --git a/README.md b/README.md index f516acc39c..3565b0f0cc 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Docker images are published for every tagged release. Learn more with `moonbeam ```bash # Join the public testnet -docker run --network="host" purestake/moonbeam:v0.23.0 --chain alphanet +docker run --network="host" purestake/moonbeam:v0.25.0 --chain alphanet ``` You can find more detailed instructions to [run a full node in our TestNet](https://docs.moonbeam.network/node-operators/networks/full-node/) @@ -27,7 +27,7 @@ service. ```bash # Run a dev service node -docker run --network="host" purestake/moonbeam:v0.23.0 --dev +docker run --network="host" purestake/moonbeam:v0.25.0 --dev ``` For more information, see our detailed instructions to [run a development node](https://docs.moonbeam.network/getting-started/local-node/setting-up-a-node/) @@ -38,10 +38,10 @@ The command above will start the node in instant seal mode. It creates a block w ```bash # Author a block every 6 seconds. -docker run --network="host" purestake/moonbeam:v0.23.0 --dev --sealing 6000 +docker run --network="host" purestake/moonbeam:v0.25.0 --dev --sealing 6000 # Manually control the block authorship and finality -docker run --network="host" purestake/moonbeam:v0.23.0 --dev --sealing manual +docker run --network="host" purestake/moonbeam:v0.25.0 --dev --sealing manual ``` ### Prefunded Development Addresses @@ -186,6 +186,8 @@ The following pallets are stored in `pallets/`. They are designed for Moonbeam's - _Author Inherent_: Allows block authors to include their identity in a block via an inherent - _Parachain Staking_: Minimal staking pallet that selects collators by total amount at stake +When modifying the git repository for these dependencies, a tool called [diener](https://github.com/bkchr/diener) can be used to replace the git URL and branch for each reference in all `Cargo.toml` files with a single command. This alleviates a lot of the repetitive modifications necessary when changing dependency versions. + ## Rustdocs Rustdocs for the Moonbeam codebase are automatically generated and published diff --git a/client/evm-tracing/Cargo.toml b/client/evm-tracing/Cargo.toml index ef7873046e..78fbb4b230 100644 --- a/client/evm-tracing/Cargo.toml +++ b/client/evm-tracing/Cargo.toml @@ -19,4 +19,4 @@ moonbeam-rpc-primitives-debug = { path = "../../primitives/rpc/debug" } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } diff --git a/client/evm-tracing/src/formatters/raw.rs b/client/evm-tracing/src/formatters/raw.rs index 3d8c8b0f5d..610caceaf0 100644 --- a/client/evm-tracing/src/formatters/raw.rs +++ b/client/evm-tracing/src/formatters/raw.rs @@ -24,10 +24,14 @@ impl super::ResponseFormatter for Formatter { type Response = TransactionTrace; fn format(listener: Listener) -> Option { - Some(TransactionTrace::Raw { - step_logs: listener.step_logs, - gas: listener.final_gas.into(), - return_value: listener.return_value, - }) + if listener.remaining_memory_usage.is_none() { + None + } else { + Some(TransactionTrace::Raw { + step_logs: listener.step_logs, + gas: listener.final_gas.into(), + return_value: listener.return_value, + }) + } } } diff --git a/client/evm-tracing/src/listeners/call_list.rs b/client/evm-tracing/src/listeners/call_list.rs index 92fbb234ca..eda7880442 100644 --- a/client/evm-tracing/src/listeners/call_list.rs +++ b/client/evm-tracing/src/listeners/call_list.rs @@ -513,6 +513,13 @@ impl Listener { self.insert_entry(key, entry); } } + EvmEvent::PrecompileSubcall { .. } => { + // In a precompile subcall there is no CALL opcode result to observe, thus + // we need this new event. Precompile subcall might use non-standard call + // behavior (like batch precompile does) thus we simply consider this a call. + self.call_type = Some(CallType::Call); + } + // We ignore other kinds of message if any (new ones may be added in the future). #[allow(unreachable_patterns)] _ => (), diff --git a/client/evm-tracing/src/listeners/raw.rs b/client/evm-tracing/src/listeners/raw.rs index b3fad0f2ca..14fb6501ee 100644 --- a/client/evm-tracing/src/listeners/raw.rs +++ b/client/evm-tracing/src/listeners/raw.rs @@ -35,6 +35,7 @@ pub struct Listener { pub step_logs: Vec, pub return_value: Vec, pub final_gas: u64, + pub remaining_memory_usage: Option, } #[derive(Debug)] @@ -64,11 +65,17 @@ struct Step { } impl Listener { - pub fn new(disable_storage: bool, disable_memory: bool, disable_stack: bool) -> Self { + pub fn new( + disable_storage: bool, + disable_memory: bool, + disable_stack: bool, + raw_max_memory_usage: usize, + ) -> Self { Self { disable_storage, disable_memory, disable_stack, + remaining_memory_usage: Some(raw_max_memory_usage), step_logs: vec![], return_value: vec![], @@ -155,22 +162,32 @@ impl Listener { memory: if self.disable_memory { None } else { - Some( - memory - .expect("memory data to not be filtered out") - .data - .clone(), - ) + let memory = memory.expect("memory data to not be filtered out"); + + self.remaining_memory_usage = self + .remaining_memory_usage + .and_then(|inner| inner.checked_sub(memory.data.len())); + + if self.remaining_memory_usage.is_none() { + return; + } + + Some(memory.data.clone()) }, stack: if self.disable_stack { None } else { - Some( - stack - .expect("stack data to not be filtered out") - .data - .clone(), - ) + let stack = stack.expect("stack data to not be filtered out"); + + self.remaining_memory_usage = self + .remaining_memory_usage + .and_then(|inner| inner.checked_sub(stack.data.len())); + + if self.remaining_memory_usage.is_none() { + return; + } + + Some(stack.data.clone()) }, }); } @@ -200,6 +217,15 @@ impl Listener { let storage = if self.disable_storage { None } else { + self.remaining_memory_usage = + self.remaining_memory_usage.and_then(|inner| { + inner.checked_sub(context.storage_cache.len() * 64) + }); + + if self.remaining_memory_usage.is_none() { + return; + } + Some(context.storage_cache.clone()) }; @@ -293,6 +319,10 @@ impl Listener { impl ListenerT for Listener { fn event(&mut self, event: Event) { + if self.remaining_memory_usage.is_none() { + return; + } + match event { Event::Gasometer(e) => self.gasometer_event(e), Event::Runtime(e) => self.runtime_event(e), diff --git a/client/rpc-core/debug/Cargo.toml b/client/rpc-core/debug/Cargo.toml index 939a07cb53..c0e976ae4e 100644 --- a/client/rpc-core/debug/Cargo.toml +++ b/client/rpc-core/debug/Cargo.toml @@ -10,12 +10,10 @@ version = "0.1.0" [dependencies] ethereum-types = "0.13.1" futures = { version = "0.3", features = [ "compat" ] } -jsonrpc-core = "18.0.0" -jsonrpc-core-client = "18.0.0" -jsonrpc-derive = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } moonbeam-client-evm-tracing = { path = "../../evm-tracing" } moonbeam-rpc-core-types = { path = "../types" } serde = { version = "1.0", features = [ "derive" ] } serde_json = "1.0" -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } diff --git a/client/rpc-core/debug/src/lib.rs b/client/rpc-core/debug/src/lib.rs index 2772f54bdf..0c10a35fe2 100644 --- a/client/rpc-core/debug/src/lib.rs +++ b/client/rpc-core/debug/src/lib.rs @@ -14,15 +14,11 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . use ethereum_types::H256; -use futures::future::BoxFuture; -use jsonrpc_core::Result as RpcResult; -use jsonrpc_derive::rpc; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; use moonbeam_client_evm_tracing::types::single; use moonbeam_rpc_core_types::RequestBlockId; use serde::Deserialize; -pub use rpc_impl_Debug::gen_server::Debug as DebugServer; - #[derive(Clone, Eq, PartialEq, Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub struct TraceParams { @@ -35,17 +31,18 @@ pub struct TraceParams { } #[rpc(server)] +#[jsonrpsee::core::async_trait] pub trait Debug { - #[rpc(name = "debug_traceTransaction")] - fn trace_transaction( + #[method(name = "debug_traceTransaction")] + async fn trace_transaction( &self, transaction_hash: H256, params: Option, - ) -> BoxFuture<'static, RpcResult>; - #[rpc(name = "debug_traceBlockByNumber", alias("debug_traceBlockByHash"))] - fn trace_block( + ) -> RpcResult; + #[method(name = "debug_traceBlockByNumber", aliases = ["debug_traceBlockByHash"])] + async fn trace_block( &self, id: RequestBlockId, params: Option, - ) -> BoxFuture<'static, RpcResult>>; + ) -> RpcResult>; } diff --git a/client/rpc-core/trace/Cargo.toml b/client/rpc-core/trace/Cargo.toml index 3e999d9561..a50972cf20 100644 --- a/client/rpc-core/trace/Cargo.toml +++ b/client/rpc-core/trace/Cargo.toml @@ -10,9 +10,7 @@ version = "0.6.0" [dependencies] ethereum-types = "0.13.1" futures = { version = "0.3.1", features = [ "compat" ] } -jsonrpc-core = "18.0.0" -jsonrpc-core-client = "18.0.0" -jsonrpc-derive = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } moonbeam-client-evm-tracing = { path = "../../evm-tracing" } moonbeam-rpc-core-types = { path = "../types" } serde = { version = "1.0", features = [ "derive" ] } diff --git a/client/rpc-core/trace/src/lib.rs b/client/rpc-core/trace/src/lib.rs index 2d35a984e4..e52a92540a 100644 --- a/client/rpc-core/trace/src/lib.rs +++ b/client/rpc-core/trace/src/lib.rs @@ -15,21 +15,16 @@ // along with Moonbeam. If not, see . use ethereum_types::H160; -use futures::future::BoxFuture; -use jsonrpc_derive::rpc; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; use moonbeam_client_evm_tracing::types::block::TransactionTrace; use moonbeam_rpc_core_types::RequestBlockId; use serde::Deserialize; -pub use rpc_impl_Trace::gen_server::Trace as TraceServer; - #[rpc(server)] +#[jsonrpsee::core::async_trait] pub trait Trace { - #[rpc(name = "trace_filter")] - fn filter( - &self, - filter: FilterRequest, - ) -> BoxFuture<'static, jsonrpc_core::Result>>; + #[method(name = "trace_filter")] + async fn filter(&self, filter: FilterRequest) -> RpcResult>; } #[derive(Clone, Eq, PartialEq, Debug, Deserialize)] diff --git a/client/rpc-core/txpool/Cargo.toml b/client/rpc-core/txpool/Cargo.toml index 83a9e61bf4..ef629efb3b 100644 --- a/client/rpc-core/txpool/Cargo.toml +++ b/client/rpc-core/txpool/Cargo.toml @@ -10,10 +10,8 @@ version = "0.6.0" [dependencies] ethereum = { version = "0.12.0", default-features = false, features = [ "with-codec" ] } ethereum-types = "0.13.1" -jsonrpc-core = "18.0.0" -jsonrpc-core-client = "18.0.0" -jsonrpc-derive = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } serde = { version = "1.0", features = [ "derive" ] } serde_json = "1.0" -fc-rpc-core = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } +fc-rpc-core = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } diff --git a/client/rpc-core/txpool/src/lib.rs b/client/rpc-core/txpool/src/lib.rs index 0bde869621..87d6dbe82f 100644 --- a/client/rpc-core/txpool/src/lib.rs +++ b/client/rpc-core/txpool/src/lib.rs @@ -15,23 +15,20 @@ // along with Moonbeam. If not, see . use ethereum_types::U256; -use jsonrpc_core::Result; -use jsonrpc_derive::rpc; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; mod types; pub use crate::types::{Get as GetT, Summary, Transaction, TransactionMap, TxPoolResult}; -pub use rpc_impl_TxPool::gen_server::TxPool as TxPoolServer; - #[rpc(server)] pub trait TxPool { - #[rpc(name = "txpool_content")] - fn content(&self) -> Result>>; + #[method(name = "txpool_content")] + fn content(&self) -> RpcResult>>; - #[rpc(name = "txpool_inspect")] - fn inspect(&self) -> Result>>; + #[method(name = "txpool_inspect")] + fn inspect(&self) -> RpcResult>>; - #[rpc(name = "txpool_status")] - fn status(&self) -> Result>; + #[method(name = "txpool_status")] + fn status(&self) -> RpcResult>; } diff --git a/client/rpc/debug/Cargo.toml b/client/rpc/debug/Cargo.toml index bd8cca46c0..14e832d5b0 100644 --- a/client/rpc/debug/Cargo.toml +++ b/client/rpc/debug/Cargo.toml @@ -10,7 +10,7 @@ version = "0.1.0" [dependencies] futures = { version = "0.3", features = [ "compat" ] } hex-literal = "0.3.4" -jsonrpc-core = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } tokio = { version = "1.10", features = [ "sync", "time" ] } # Moonbeam @@ -20,19 +20,19 @@ moonbeam-rpc-core-types = { path = "../../rpc-core/types" } moonbeam-rpc-primitives-debug = { path = "../../../primitives/rpc/debug" } # Substrate -sc-client-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-utils = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-block-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-blockchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } # Frontier ethereum = { version = "0.12.0", default-features = false, features = [ "with-codec" ] } ethereum-types = "0.13.1" -fc-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-db = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", features = [ "rpc_binary_search_estimate" ] } -fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } +fc-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fc-db = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", features = [ "rpc_binary_search_estimate" ] } +fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } diff --git a/client/rpc/debug/src/lib.rs b/client/rpc/debug/src/lib.rs index bf4d1302c4..5358225508 100644 --- a/client/rpc/debug/src/lib.rs +++ b/client/rpc/debug/src/lib.rs @@ -13,9 +13,9 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use futures::{future::BoxFuture, FutureExt, SinkExt, StreamExt}; -use jsonrpc_core::Result as RpcResult; -pub use moonbeam_rpc_core_debug::{Debug as DebugT, DebugServer, TraceParams}; +use futures::{SinkExt, StreamExt}; +use jsonrpsee::core::RpcResult; +pub use moonbeam_rpc_core_debug::{DebugServer, TraceParams}; use tokio::{ self, @@ -62,73 +62,64 @@ impl Debug { } } -impl DebugT for Debug { +#[jsonrpsee::core::async_trait] +impl DebugServer for Debug { /// Handler for `debug_traceTransaction` request. Communicates with the service-defined task /// using channels. - fn trace_transaction( + async fn trace_transaction( &self, transaction_hash: H256, params: Option, - ) -> BoxFuture<'static, RpcResult> { + ) -> RpcResult { let mut requester = self.requester.clone(); - async move { - let (tx, rx) = oneshot::channel(); - // Send a message from the rpc handler to the service level task. - requester - .send(((RequesterInput::Transaction(transaction_hash), params), tx)) - .await - .map_err(|err| { - internal_err(format!( - "failed to send request to debug service : {:?}", - err - )) - })?; - - // Receive a message from the service level task and send the rpc response. - rx.await - .map_err(|err| { - internal_err(format!("debug service dropped the channel : {:?}", err)) - })? - .map(|res| match res { - Response::Single(res) => res, - _ => unreachable!(), - }) - } - .boxed() + let (tx, rx) = oneshot::channel(); + // Send a message from the rpc handler to the service level task. + requester + .send(((RequesterInput::Transaction(transaction_hash), params), tx)) + .await + .map_err(|err| { + internal_err(format!( + "failed to send request to debug service : {:?}", + err + )) + })?; + + // Receive a message from the service level task and send the rpc response. + rx.await + .map_err(|err| internal_err(format!("debug service dropped the channel : {:?}", err)))? + .map(|res| match res { + Response::Single(res) => res, + _ => unreachable!(), + }) } - fn trace_block( + async fn trace_block( &self, id: RequestBlockId, params: Option, - ) -> BoxFuture<'static, RpcResult>> { + ) -> RpcResult> { let mut requester = self.requester.clone(); - async move { - let (tx, rx) = oneshot::channel(); - // Send a message from the rpc handler to the service level task. - requester - .send(((RequesterInput::Block(id), params), tx)) - .await - .map_err(|err| { - internal_err(format!( - "failed to send request to debug service : {:?}", - err - )) - })?; - - // Receive a message from the service level task and send the rpc response. - rx.await - .map_err(|err| { - internal_err(format!("debug service dropped the channel : {:?}", err)) - })? - .map(|res| match res { - Response::Block(res) => res, - _ => unreachable!(), - }) - } - .boxed() + let (tx, rx) = oneshot::channel(); + // Send a message from the rpc handler to the service level task. + requester + .send(((RequesterInput::Block(id), params), tx)) + .await + .map_err(|err| { + internal_err(format!( + "failed to send request to debug service : {:?}", + err + )) + })?; + + // Receive a message from the service level task and send the rpc response. + rx.await + .map_err(|err| internal_err(format!("debug service dropped the channel : {:?}", err)))? + .map(|res| match res { + Response::Block(res) => res, + _ => unreachable!(), + }) } } @@ -156,6 +147,7 @@ where frontier_backend: Arc>, permit_pool: Arc, overrides: Arc>, + raw_max_memory_usage: usize, ) -> (impl Future, DebugRequester) { let (tx, mut rx): (DebugRequester, _) = sc_utils::mpsc::tracing_unbounded("debug-requester"); @@ -185,6 +177,7 @@ where transaction_hash, params, overrides.clone(), + raw_max_memory_usage, ) }) .await @@ -426,6 +419,7 @@ where transaction_hash: H256, params: Option, overrides: Arc>, + raw_max_memory_usage: usize, ) -> RpcResult { let (tracer_input, trace_type) = Self::handle_params(params)?; @@ -547,11 +541,16 @@ where disable_storage, disable_memory, disable_stack, + raw_max_memory_usage, ); proxy.using(f)?; Ok(Response::Single( - moonbeam_client_evm_tracing::formatters::Raw::format(proxy) - .ok_or(internal_err("Fail to format proxy"))?, + moonbeam_client_evm_tracing::formatters::Raw::format(proxy).ok_or( + internal_err( + "replayed transaction generated too much data. \ + try disabling memory or storage?", + ), + )?, )) } single::TraceType::CallList => { diff --git a/client/rpc/finality/Cargo.toml b/client/rpc/finality/Cargo.toml index a9fd9a6b99..10101f970c 100644 --- a/client/rpc/finality/Cargo.toml +++ b/client/rpc/finality/Cargo.toml @@ -10,14 +10,13 @@ version = "0.1.0" [dependencies] futures = { version = "0.3", features = [ "compat" ] } -jsonrpc-core = "18.0.0" -jsonrpc-derive = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } parity-scale-codec = "3.0.0" tokio = { version = "1.12.0", features = [ "sync", "time" ] } -fc-db = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-blockchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +fc-db = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } diff --git a/client/rpc/finality/src/lib.rs b/client/rpc/finality/src/lib.rs index bf2da61b98..b8e6ea1621 100644 --- a/client/rpc/finality/src/lib.rs +++ b/client/rpc/finality/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2019-2021 PureStake Inc. +// Copyright 2019-2022 PureStake Inc. // This file is part of Moonbeam. // Moonbeam is free software: you can redistribute it and/or modify @@ -14,9 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . use fc_rpc::frontier_backend_client::{self, is_canon}; -use futures::{future::BoxFuture, FutureExt as _}; -use jsonrpc_core::Result as RpcResult; -use jsonrpc_derive::rpc; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; use sp_core::H256; use std::{marker::PhantomData, sync::Arc}; //TODO ideally we wouldn't depend on BlockId here. Can we change frontier @@ -31,13 +29,13 @@ use sp_runtime::traits::Block; pub trait MoonbeamFinalityApi { /// Reports whether a Substrate or Ethereum block is finalized. /// Returns false if the block is not found. - #[rpc(name = "moon_isBlockFinalized")] - fn is_block_finalized(&self, block_hash: H256) -> BoxFuture<'static, RpcResult>; + #[method(name = "moon_isBlockFinalized")] + fn is_block_finalized(&self, block_hash: H256) -> RpcResult; /// Reports whether an Ethereum transaction is finalized. /// Returns false if the transaction is not found - #[rpc(name = "moon_isTxFinalized")] - fn is_tx_finalized(&self, tx_hash: H256) -> BoxFuture<'static, RpcResult>; + #[method(name = "moon_isTxFinalized")] + fn is_tx_finalized(&self, tx_hash: H256) -> RpcResult; } pub struct MoonbeamFinality { @@ -56,34 +54,31 @@ impl MoonbeamFinality { } } -impl MoonbeamFinalityApi for MoonbeamFinality +impl MoonbeamFinalityApiServer for MoonbeamFinality where B: Block, C: HeaderBackend + Send + Sync + 'static, { - fn is_block_finalized(&self, raw_hash: H256) -> BoxFuture<'static, RpcResult> { + fn is_block_finalized(&self, raw_hash: H256) -> RpcResult { let backend = self.backend.clone(); let client = self.client.clone(); - async move { is_block_finalized_inner::(&backend, &client, raw_hash) }.boxed() + is_block_finalized_inner::(&backend, &client, raw_hash) } - fn is_tx_finalized(&self, tx_hash: H256) -> BoxFuture<'static, RpcResult> { + fn is_tx_finalized(&self, tx_hash: H256) -> RpcResult { let backend = self.backend.clone(); let client = self.client.clone(); - async move { - if let Some((ethereum_block_hash, _ethereum_index)) = - frontier_backend_client::load_transactions::( - &client, - backend.as_ref(), - tx_hash, - true, - )? { - is_block_finalized_inner::(&backend, &client, ethereum_block_hash) - } else { - Ok(false) - } + if let Some((ethereum_block_hash, _ethereum_index)) = + frontier_backend_client::load_transactions::( + &client, + backend.as_ref(), + tx_hash, + true, + )? { + is_block_finalized_inner::(&backend, &client, ethereum_block_hash) + } else { + Ok(false) } - .boxed() } } diff --git a/client/rpc/manual-xcm/Cargo.toml b/client/rpc/manual-xcm/Cargo.toml index 3ed4faf23b..042d655a3d 100644 --- a/client/rpc/manual-xcm/Cargo.toml +++ b/client/rpc/manual-xcm/Cargo.toml @@ -11,10 +11,9 @@ version = "0.1.0" flume = "0.10.9" futures = { version = "0.3", features = [ "compat" ] } hex-literal = "0.3.3" -jsonrpc-core = "18.0.0" -jsonrpc-derive = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } parity-scale-codec = "3.0.0" tokio = { version = "1.12.0", features = [ "sync", "time" ] } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } diff --git a/client/rpc/manual-xcm/src/lib.rs b/client/rpc/manual-xcm/src/lib.rs index 422271ad2b..66dc9ebc7c 100644 --- a/client/rpc/manual-xcm/src/lib.rs +++ b/client/rpc/manual-xcm/src/lib.rs @@ -15,9 +15,7 @@ // along with Moonbeam. If not, see . use cumulus_primitives_core::ParaId; use cumulus_primitives_core::XcmpMessageFormat; -use futures::{future::BoxFuture, FutureExt as _}; -use jsonrpc_core::Result as RpcResult; -use jsonrpc_derive::rpc; +use jsonrpsee::{core::RpcResult, proc_macros::rpc}; use parity_scale_codec::Encode; use xcm::latest::prelude::*; @@ -25,12 +23,13 @@ use xcm::latest::prelude::*; /// parachain-enabled runtime. This allows testing XCM logic in a controlled way in integration /// tests. #[rpc(server)] +#[jsonrpsee::core::async_trait] pub trait ManualXcmApi { /// Inject a downward xcm message - A message that comes from the relay chain. /// You may provide an arbitrary message, or if you provide an emtpy byte array, /// Then a default message (DOT transfer down to ALITH) will be injected - #[rpc(name = "xcm_injectDownwardMessage")] - fn inject_downward_message(&self, message: Vec) -> BoxFuture<'static, RpcResult<()>>; + #[method(name = "xcm_injectDownwardMessage")] + async fn inject_downward_message(&self, message: Vec) -> RpcResult<()>; /// Inject an HRMP message - A message that comes from a dedicated channel to a sibling /// parachain. @@ -43,12 +42,8 @@ pub trait ManualXcmApi { /// The method accepts a sending paraId and a bytearray representing an arbitrary message as /// parameters. If you provide an emtpy byte array, then a default message representing a /// transfer of the sending paraId's native token will be injected. - #[rpc(name = "xcm_injectHrmpMessage")] - fn inject_hrmp_message( - &self, - sender: ParaId, - message: Vec, - ) -> BoxFuture<'static, RpcResult<()>>; + #[method(name = "xcm_injectHrmpMessage")] + async fn inject_hrmp_message(&self, sender: ParaId, message: Vec) -> RpcResult<()>; } pub struct ManualXcm { @@ -56,17 +51,60 @@ pub struct ManualXcm { pub hrmp_message_channel: flume::Sender<(ParaId, Vec)>, } -impl ManualXcmApi for ManualXcm { - fn inject_downward_message(&self, msg: Vec) -> BoxFuture<'static, RpcResult<()>> { +#[jsonrpsee::core::async_trait] +impl ManualXcmApiServer for ManualXcm { + async fn inject_downward_message(&self, msg: Vec) -> RpcResult<()> { let downward_message_channel = self.downward_message_channel.clone(); - async move { - // If no message is supplied, inject a default one. - let msg = if msg.is_empty() { - xcm::VersionedXcm::<()>::V2(Xcm(vec![ - ReserveAssetDeposited((Parent, 10000000000000).into()), + // If no message is supplied, inject a default one. + let msg = if msg.is_empty() { + xcm::VersionedXcm::<()>::V2(Xcm(vec![ + ReserveAssetDeposited((Parent, 10000000000000).into()), + ClearOrigin, + BuyExecution { + fees: (Parent, 10000000000000).into(), + weight_limit: Limited(4_000_000_000), + }, + DepositAsset { + assets: All.into(), + max_assets: 1, + beneficiary: MultiLocation::new( + 0, + X1(AccountKey20 { + network: Any, + key: hex_literal::hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac"), + }), + ), + }, + ])) + .encode() + } else { + msg + }; + + // Push the message to the shared channel where it will be queued up + // to be injected in to an upcoming block. + downward_message_channel + .send_async(msg) + .await + .map_err(|err| internal_err(err.to_string()))?; + + Ok(()) + } + + async fn inject_hrmp_message(&self, sender: ParaId, msg: Vec) -> RpcResult<()> { + let hrmp_message_channel = self.hrmp_message_channel.clone(); + + // If no message is supplied, inject a default one. + let msg = if msg.is_empty() { + let mut mes = XcmpMessageFormat::ConcatenatedVersionedXcm.encode(); + mes.append( + &mut (xcm::VersionedXcm::<()>::V2(Xcm(vec![ + ReserveAssetDeposited( + ((Parent, Parachain(sender.into())), 10000000000000).into(), + ), ClearOrigin, BuyExecution { - fees: (Parent, 10000000000000).into(), + fees: ((Parent, Parachain(sender.into())), 10000000000000).into(), weight_limit: Limited(4_000_000_000), }, DepositAsset { @@ -81,83 +119,32 @@ impl ManualXcmApi for ManualXcm { ), }, ])) - .encode() - } else { - msg - }; - - // Push the message to the shared channel where it will be queued up - // to be injected in to an upcoming block. - downward_message_channel - .send_async(msg) - .await - .map_err(|err| internal_err(err))?; + .encode()), + ); + mes + } else { + msg + }; - Ok(()) - } - .boxed() - } - - fn inject_hrmp_message( - &self, - sender: ParaId, - msg: Vec, - ) -> BoxFuture<'static, RpcResult<()>> { - let hrmp_message_channel = self.hrmp_message_channel.clone(); + // Push the message to the shared channel where it will be queued up + // to be injected in to an upcoming block. + hrmp_message_channel + .send_async((sender, msg)) + .await + .map_err(|err| internal_err(err.to_string()))?; - async move { - // If no message is supplied, inject a default one. - let msg = if msg.is_empty() { - let mut mes = XcmpMessageFormat::ConcatenatedVersionedXcm.encode(); - mes.append( - &mut (xcm::VersionedXcm::<()>::V2(Xcm(vec![ - ReserveAssetDeposited( - ((Parent, Parachain(sender.into())), 10000000000000).into(), - ), - ClearOrigin, - BuyExecution { - fees: ((Parent, Parachain(sender.into())), 10000000000000).into(), - weight_limit: Limited(4_000_000_000), - }, - DepositAsset { - assets: All.into(), - max_assets: 1, - beneficiary: MultiLocation::new( - 0, - X1(AccountKey20 { - network: Any, - key: hex_literal::hex!( - "f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac" - ), - }), - ), - }, - ])) - .encode()), - ); - mes - } else { - msg - }; - - // Push the message to the shared channel where it will be queued up - // to be injected in to an upcoming block. - hrmp_message_channel - .send_async((sender, msg)) - .await - .map_err(|err| internal_err(err))?; - - Ok(()) - } - .boxed() + Ok(()) } } // This bit cribbed from frontier. -pub fn internal_err(message: T) -> jsonrpc_core::Error { - jsonrpc_core::Error { - code: jsonrpc_core::ErrorCode::InternalError, - message: message.to_string(), - data: None, - } +pub fn internal_err>(message: T) -> jsonrpsee::core::Error { + jsonrpsee::core::Error::Call(jsonrpsee::types::error::CallError::Custom( + jsonrpsee::types::error::ErrorObject::borrowed( + jsonrpsee::types::error::INTERNAL_ERROR_CODE, + &message, + None, + ) + .into_owned(), + )) } diff --git a/client/rpc/trace/Cargo.toml b/client/rpc/trace/Cargo.toml index 917ca11ea5..92026e9a82 100644 --- a/client/rpc/trace/Cargo.toml +++ b/client/rpc/trace/Cargo.toml @@ -11,7 +11,7 @@ version = "0.6.0" ethereum = { version = "0.12.0", features = [ "with-codec" ] } ethereum-types = "0.13.1" futures = { version = "0.3" } -jsonrpc-core = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } serde = { version = "1.0", features = [ "derive" ] } sha3 = "0.9" tokio = { version = "1.10", features = [ "sync", "time" ] } @@ -24,19 +24,19 @@ moonbeam-rpc-core-types = { path = "../../rpc-core/types" } moonbeam-rpc-primitives-debug = { path = "../../../primitives/rpc/debug" } # Substrate -sc-client-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-network = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-utils = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-block-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-blockchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } # Frontier -fc-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", features = [ "rpc_binary_search_estimate" ] } -fc-rpc-core = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } +fc-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", features = [ "rpc_binary_search_estimate" ] } +fc-rpc-core = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } diff --git a/client/rpc/trace/src/lib.rs b/client/rpc/trace/src/lib.rs index e43a0529aa..4349d28278 100644 --- a/client/rpc/trace/src/lib.rs +++ b/client/rpc/trace/src/lib.rs @@ -24,7 +24,7 @@ //! - For each traced block an async task responsible to wait for a permit, spawn a blocking //! task and waiting for the result, then send it to the main `CacheTask`. -use futures::{future::BoxFuture, select, stream::FuturesUnordered, FutureExt, SinkExt, StreamExt}; +use futures::{select, stream::FuturesUnordered, FutureExt, SinkExt, StreamExt}; use std::{collections::BTreeMap, future::Future, marker::PhantomData, sync::Arc, time::Duration}; use tokio::{ sync::{mpsc, oneshot, Semaphore}, @@ -32,7 +32,6 @@ use tokio::{ }; use tracing::{instrument, Instrument}; -use jsonrpc_core::Result; use sc_client_api::backend::{Backend, StateBackend, StorageProvider}; use sc_utils::mpsc::TracingUnboundedSender; use sp_api::{ApiExt, BlockId, Core, HeaderT, ProvideRuntimeApi}; @@ -43,17 +42,19 @@ use sp_blockchain::{ use sp_runtime::traits::{BlakeTwo256, Block as BlockT}; use ethereum_types::H256; -use fc_rpc::{frontier_backend_client, internal_err, OverrideHandle}; +use fc_rpc::{frontier_backend_client, OverrideHandle}; use fp_rpc::EthereumRuntimeRPCApi; use moonbeam_client_evm_tracing::{ formatters::ResponseFormatter, types::block::{self, TransactionTrace}, }; -pub use moonbeam_rpc_core_trace::{FilterRequest, Trace as TraceT, TraceServer}; +pub use moonbeam_rpc_core_trace::{FilterRequest, TraceServer}; use moonbeam_rpc_core_types::{RequestBlockId, RequestBlockTag}; use moonbeam_rpc_primitives_debug::DebugRuntimeApi; +type TxsTraceRes = Result, String>; + /// RPC handler. Will communicate with a `CacheTask` through a `CacheRequester`. pub struct Trace { _phantom: PhantomData, @@ -91,7 +92,7 @@ where } /// Convert an optional block ID (number or tag) to a block height. - fn block_id(&self, id: Option) -> Result { + fn block_id(&self, id: Option) -> Result { match id { Some(RequestBlockId::Number(n)) => Ok(n), None | Some(RequestBlockId::Tag(RequestBlockTag::Latest)) => { @@ -99,24 +100,24 @@ where } Some(RequestBlockId::Tag(RequestBlockTag::Earliest)) => Ok(0), Some(RequestBlockId::Tag(RequestBlockTag::Pending)) => { - Err(internal_err("'pending' is not supported")) + Err("'pending' is not supported") } - Some(RequestBlockId::Hash(_)) => Err(internal_err("Block hash not supported")), + Some(RequestBlockId::Hash(_)) => Err("Block hash not supported"), } } /// `trace_filter` endpoint (wrapped in the trait implementation with futures compatibilty) - async fn filter(self, req: FilterRequest) -> Result> { + async fn filter(self, req: FilterRequest) -> TxsTraceRes { let from_block = self.block_id(req.from_block)?; let to_block = self.block_id(req.to_block)?; let block_heights = from_block..=to_block; let count = req.count.unwrap_or(self.max_count); if count > self.max_count { - return Err(internal_err(format!( + return Err(format!( "count ({}) can't be greater than maximum ({})", count, self.max_count - ))); + )); } // Build a list of all the Substrate block hashes that need to be traced. @@ -131,14 +132,12 @@ where .client .header(block_id) .map_err(|e| { - internal_err(format!( + format!( "Error when fetching block {} header : {:?}", block_height, e - )) + ) })? - .ok_or_else(|| { - internal_err(format!("Block with height {} don't exist", block_height)) - })?; + .ok_or_else(|| format!("Block with height {} don't exist", block_height))?; let block_hash = block_header.hash(); @@ -163,7 +162,7 @@ where req: FilterRequest, block_hashes: &[H256], count: usize, - ) -> Result> { + ) -> TxsTraceRes { let from_address = req.from_address.unwrap_or_default(); let to_address = req.to_address.unwrap_or_default(); @@ -213,11 +212,11 @@ where // unless we used the default maximum, in which case we return an error. if traces_amount >= count { if req.count.is_none() { - return Err(internal_err(format!( + return Err(format!( "the amount of traces goes over the maximum ({}), please use 'after' \ and 'count' in your request", self.max_count - ))); + )); } traces = traces.into_iter().take(count).collect(); @@ -230,18 +229,22 @@ where } } -impl TraceT for Trace +#[jsonrpsee::core::async_trait] +impl TraceServer for Trace where B: BlockT + Send + Sync + 'static, B::Header: HeaderT, C: HeaderMetadata + HeaderBackend, C: Send + Sync + 'static, { - fn filter( + async fn filter( &self, filter: FilterRequest, - ) -> BoxFuture<'static, jsonrpc_core::Result>> { - self.clone().filter(filter).boxed() + ) -> jsonrpsee::core::RpcResult> { + self.clone() + .filter(filter) + .await + .map_err(|e| fc_rpc::internal_err(e)) } } @@ -263,7 +266,7 @@ enum CacheRequest { /// The task will answer only when it has processed this block. GetTraces { /// Returns the array of traces or an error. - sender: oneshot::Sender>>, + sender: oneshot::Sender, /// Hash of the block. block: H256, }, @@ -280,7 +283,7 @@ impl CacheRequester { /// Request to start caching the provided range of blocks. /// The task will add to blocks to its pool and immediately return the batch ID. #[instrument(skip(self))] - pub async fn start_batch(&self, blocks: Vec) -> Result { + pub async fn start_batch(&self, blocks: Vec) -> Result { let (response_tx, response_rx) = oneshot::channel(); let mut sender = self.0.clone(); @@ -291,17 +294,17 @@ impl CacheRequester { }) .await .map_err(|e| { - internal_err(format!( + format!( "Failed to send request to the trace cache task. Error : {:?}", e - )) + ) })?; response_rx.await.map_err(|e| { - internal_err(format!( + format!( "Trace cache task closed the response channel. Error : {:?}", e - )) + ) }) } @@ -310,7 +313,7 @@ impl CacheRequester { /// The block should be part of a batch first. If no batch has requested the block it will /// return an error. #[instrument(skip(self))] - pub async fn get_traces(&self, block: H256) -> Result> { + pub async fn get_traces(&self, block: H256) -> TxsTraceRes { let (response_tx, response_rx) = oneshot::channel(); let mut sender = self.0.clone(); @@ -321,21 +324,21 @@ impl CacheRequester { }) .await .map_err(|e| { - internal_err(format!( + format!( "Failed to send request to the trace cache task. Error : {:?}", e - )) + ) })?; response_rx .await .map_err(|e| { - internal_err(format!( + format!( "Trace cache task closed the response channel. Error : {:?}", e - )) + ) })? - .map_err(|e| internal_err(format!("Failed to replay block. Error : {:?}", e))) + .map_err(|e| format!("Failed to replay block. Error : {:?}", e)) } /// Notify the cache that it can stop the batch with that ID. Any block contained only in @@ -350,10 +353,10 @@ impl CacheRequester { .send(CacheRequest::StopBatch { batch_id }) .await .map_err(|e| { - internal_err(format!( + format!( "Failed to send request to the trace cache task. Error : {:?}", e - )) + ) }); } } @@ -378,7 +381,7 @@ enum CacheBlockState { /// Multiple requests might query the same block while it is pooled to be /// traced. They response channel is stored here, and the result will be /// sent in all of them when the tracing is finished. - waiting_requests: Vec>>>, + waiting_requests: Vec>, /// Channel used to unqueue a tracing that has not yet started. /// A tracing will be unqueued if it has not yet been started and the last batch /// needing this block is ended (ignoring the expiration delay). @@ -388,9 +391,7 @@ enum CacheBlockState { }, /// Tracing has completed and the result is available. No Runtime API call /// will be needed until this block cache is removed. - Cached { - traces: Result>, - }, + Cached { traces: TxsTraceRes }, } /// Tracing a block is done in a separate tokio blocking task to avoid clogging the async threads. @@ -404,7 +405,7 @@ enum BlockingTaskMessage { /// The tracing is finished and the result is send to the main task. Finished { block_hash: H256, - result: Result>, + result: TxsTraceRes, }, } @@ -580,13 +581,11 @@ where }) .await .map_err(|e| { - internal_err(format!( - "Tracing Substrate block {} panicked : {:?}", - block, e - )) + format!("Tracing Substrate block {} panicked : {:?}", block, e) })? } - .await; + .await + .map_err(|e| e.to_string()); tracing::trace!("Block tracing finished, sending result to main task."); @@ -631,11 +630,7 @@ where /// - If this block is missing from the cache, it means no batch asked for it. All requested /// blocks should be contained in a batch beforehand, and thus an error is returned. #[instrument(skip(self))] - fn request_get_traces( - &mut self, - sender: oneshot::Sender>>, - block: H256, - ) { + fn request_get_traces(&mut self, sender: oneshot::Sender, block: H256) { if let Some(block_cache) = self.cached_blocks.get_mut(&block) { match &mut block_cache.state { CacheBlockState::Pooled { @@ -649,7 +644,7 @@ where ); waiting_requests.push(sender); } - CacheBlockState::Cached { ref traces, .. } => { + CacheBlockState::Cached { traces, .. } => { tracing::warn!( "A request asked a cached block ({}), sending the traces directly.", block @@ -662,10 +657,10 @@ where "An RPC request asked to get a block ({}) which was not batched.", block ); - let _ = sender.send(Err(internal_err(format!( + let _ = sender.send(Err(format!( "RPC request asked a block ({}) that was not batched", block - )))); + ))); } } @@ -720,7 +715,7 @@ where /// A tracing blocking task notifies it has finished the tracing and provide the result. #[instrument(skip(self, result))] - fn blocking_finished(&mut self, block_hash: H256, result: Result>) { + fn blocking_finished(&mut self, block_hash: H256, result: TxsTraceRes) { // In some cases it might be possible to receive traces of a block // that has no entry in the cache because it was removed of the pool // and received a permit concurrently. We just ignore it. @@ -781,7 +776,7 @@ where backend: Arc, substrate_hash: H256, overrides: Arc>, - ) -> Result> { + ) -> TxsTraceRes { let substrate_block_id = BlockId::Hash(substrate_hash); // Get Subtrate block data. @@ -789,14 +784,12 @@ where let block_header = client .header(substrate_block_id) .map_err(|e| { - internal_err(format!( + format!( "Error when fetching substrate block {} header : {:?}", substrate_hash, e - )) + ) })? - .ok_or_else(|| { - internal_err(format!("Subtrate block {} don't exist", substrate_block_id)) - })?; + .ok_or_else(|| format!("Subtrate block {} don't exist", substrate_block_id))?; let height = *block_header.number(); let substrate_parent_id = BlockId::::Hash(*block_header.parent_hash()); @@ -814,18 +807,13 @@ where ) { (Some(a), Some(b)) => (a, b), _ => { - return Err(internal_err(format!( + return Err(format!( "Failed to get Ethereum block data for Substrate block {}", substrate_block_id - ))) + )) } }, - _ => { - return Err(internal_err(format!( - "No storage override at {:?}", - substrate_block_id - ))) - } + _ => return Err(format!("No storage override at {:?}", substrate_block_id)), }; let eth_block_hash = eth_block.header.hash(); @@ -839,41 +827,31 @@ where .blockchain() .body(substrate_block_id) .map_err(|e| { - internal_err(format!( + format!( "Blockchain error when fetching extrinsics of block {} : {:?}", height, e - )) + ) })? - .ok_or_else(|| { - internal_err(format!( - "Could not find block {} when fetching extrinsics.", - height - )) - })?; + .ok_or_else(|| format!("Could not find block {} when fetching extrinsics.", height))?; // Trace the block. - let f = || -> Result<_> { + let f = || -> Result<_, String> { api.initialize_block(&substrate_parent_id, &block_header) - .map_err(|e| internal_err(format!("Runtime api access error: {:?}", e)))?; + .map_err(|e| format!("Runtime api access error: {:?}", e))?; let _result = api .trace_block(&substrate_parent_id, extrinsics, eth_tx_hashes) - .map_err(|e| { - internal_err(format!( - "Blockchain error when replaying block {} : {:?}", - height, e - )) - })? + .map_err(|e| format!("Blockchain error when replaying block {} : {:?}", height, e))? .map_err(|e| { tracing::warn!( "Internal runtime error when replaying block {} : {:?}", height, e ); - internal_err(format!( + format!( "Internal runtime error when replaying block {} : {:?}", height, e - )) + ) })?; Ok(moonbeam_rpc_primitives_debug::Response::Block) }; @@ -882,7 +860,7 @@ where proxy.using(f)?; let mut traces: Vec<_> = moonbeam_client_evm_tracing::formatters::TraceFilter::format(proxy) - .ok_or(internal_err("Fail to format proxy"))?; + .ok_or("Fail to format proxy")?; // Fill missing data. for trace in traces.iter_mut() { trace.block_hash = eth_block_hash; @@ -895,10 +873,10 @@ where height ); - internal_err(format!( + format!( "Bug: A transaction has been replayed while it shouldn't (in block {}).", height - )) + ) })? .transaction_hash; diff --git a/client/rpc/txpool/Cargo.toml b/client/rpc/txpool/Cargo.toml index 8980e82095..47f91575ab 100644 --- a/client/rpc/txpool/Cargo.toml +++ b/client/rpc/txpool/Cargo.toml @@ -8,7 +8,7 @@ repository = "https://github.com/PureStake/moonbeam/" version = "0.6.0" [dependencies] -jsonrpc-core = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } rlp = "0.5" serde = { version = "1.0", features = [ "derive" ] } sha3 = "0.9" @@ -18,15 +18,15 @@ moonbeam-rpc-core-txpool = { path = "../../rpc-core/txpool" } moonbeam-rpc-primitives-txpool = { path = "../../../primitives/rpc/txpool" } # Substrate -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-transaction-pool-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-blockchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } # Frontier ethereum-types = "0.13.1" -fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", features = [ "rpc_binary_search_estimate" ] } +fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", features = [ "rpc_binary_search_estimate" ] } diff --git a/client/rpc/txpool/src/lib.rs b/client/rpc/txpool/src/lib.rs index 35e7da350f..65779c0254 100644 --- a/client/rpc/txpool/src/lib.rs +++ b/client/rpc/txpool/src/lib.rs @@ -16,9 +16,9 @@ use ethereum_types::{H160, H256, U256}; use fc_rpc::{internal_err, public_key}; -use jsonrpc_core::Result as RpcResult; +use jsonrpsee::core::RpcResult; pub use moonbeam_rpc_core_txpool::{ - GetT, Summary, Transaction, TransactionMap, TxPool as TxPoolT, TxPoolResult, TxPoolServer, + GetT, Summary, Transaction, TransactionMap, TxPoolResult, TxPoolServer, }; use sc_transaction_pool::{ChainApi, Pool}; use sc_transaction_pool_api::InPoolTransaction; @@ -157,7 +157,7 @@ impl TxPool { } } -impl TxPoolT for TxPool +impl TxPoolServer for TxPool where C: ProvideRuntimeApi, C: HeaderMetadata + HeaderBackend, diff --git a/client/vrf/Cargo.toml b/client/vrf/Cargo.toml new file mode 100644 index 0000000000..fc5b77b44f --- /dev/null +++ b/client/vrf/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "moonbeam-vrf" +authors = [ "PureStake" ] +edition = "2018" +homepage = "https://moonbeam.network" +license = "GPL-3.0-only" +repository = "https://github.com/PureStake/moonbeam/" +version = "0.1.0" + +[dependencies] +# Substrate +codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive" ] } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } + +# Moonbeam +session-keys-primitives = { path = "../../primitives/session-keys" } + +# Nimbus +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23" } + +# Polkadot +polkadot-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } diff --git a/client/vrf/src/lib.rs b/client/vrf/src/lib.rs new file mode 100644 index 0000000000..169e136604 --- /dev/null +++ b/client/vrf/src/lib.rs @@ -0,0 +1,75 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! VRF client primitives for client-side verification + +use nimbus_primitives::NimbusId; +use session_keys_primitives::{make_transcript, make_transcript_data, PreDigest, VrfApi, VrfId}; +use sp_application_crypto::{AppKey, ByteArray}; +use sp_consensus_vrf::schnorrkel::{PublicKey, VRFOutput, VRFProof}; +use sp_core::H256; +use sp_keystore::{SyncCryptoStore, SyncCryptoStorePtr}; + +/// Uses the runtime API to get the VRF inputs and sign them with the VRF key that +/// corresponds to the authoring NimbusId. +pub fn vrf_pre_digest( + client: &C, + keystore: &SyncCryptoStorePtr, + nimbus_id: NimbusId, + parent: H256, +) -> Option +where + B: sp_runtime::traits::Block, + C: sp_api::ProvideRuntimeApi, + C::Api: VrfApi, +{ + let at = sp_api::BlockId::Hash(parent); + let runtime_api = client.runtime_api(); + + // first ? for runtime API, second ? for if last vrf output is not available + let last_vrf_output = runtime_api.get_last_vrf_output(&at).ok()??; + // first ? for runtime API, second ? for not VRF key associated with NimbusId + let key: VrfId = runtime_api.vrf_key_lookup(&at, nimbus_id).ok()??; + let vrf_pre_digest = sign_vrf(last_vrf_output, key, &keystore)?; + Some(session_keys_primitives::digest::CompatibleDigestItem::vrf_pre_digest(vrf_pre_digest)) +} + +/// Signs the VrfInput using the private key corresponding to the input `key` public key +/// to be found in the input keystore +fn sign_vrf(last_vrf_output: H256, key: VrfId, keystore: &SyncCryptoStorePtr) -> Option { + let transcript = make_transcript(last_vrf_output.clone()); + let transcript_data = make_transcript_data(last_vrf_output); + let try_sign = + SyncCryptoStore::sr25519_vrf_sign(&**keystore, VrfId::ID, key.as_ref(), transcript_data); + if let Ok(Some(signature)) = try_sign { + let public = PublicKey::from_bytes(&key.to_raw_vec()).ok()?; + if signature + .output + .attach_input_hash(&public, transcript) + .is_err() + { + // VRF signature cannot be validated using key and transcript + return None; + } + Some(PreDigest { + vrf_output: VRFOutput(signature.output), + vrf_proof: VRFProof(signature.proof), + }) + } else { + // VRF key not found in keystore or VRF signing failed + None + } +} diff --git a/core-primitives/Cargo.toml b/core-primitives/Cargo.toml index 40aeda5a9f..240e273aeb 100644 --- a/core-primitives/Cargo.toml +++ b/core-primitives/Cargo.toml @@ -10,9 +10,9 @@ version = "0.1.1" [dependencies] account = { path = "../primitives/account", default-features = false } -fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] diff --git a/docker/moonbeam-fork-tests.Dockerfile b/docker/moonbeam-fork-tests.Dockerfile new file mode 100644 index 0000000000..1dee78c9ee --- /dev/null +++ b/docker/moonbeam-fork-tests.Dockerfile @@ -0,0 +1,31 @@ +# Node for Moonbase Parachains. +# +# Requires to run from repository root and to copy the binary in the build folder (part of the release workflow) + +FROM node:16 +LABEL maintainer "alan@purestake.com" +LABEL description="Moonbeam Fork Test image" + +RUN apt update +RUN apt install -y jq + +RUN mkdir /moonbeam-fork-tests && \ + chown -R node:node /moonbeam-fork-tests + +RUN apt install -y git clang curl libssl-dev llvm libudev-dev pkg-config make + +USER node + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +ENV PATH="/home/node/.cargo/bin:${PATH}" + +RUN rustup default stable && \ + rustup update && \ + rustup update nightly && \ + rustup target add wasm32-unknown-unknown --toolchain nightly + +COPY --chown=node ./run-fork-test.sh /moonbeam-fork-tests/run-fork-test.sh +RUN chmod uog+x /moonbeam-fork-tests/run-fork-test.sh + +ENV ROOT_FOLDER /moonbeam-fork-tests +CMD ["/moonbeam-fork-tests/run-fork-test.sh"] diff --git a/moonbeam-types-bundle/index.ts b/moonbeam-types-bundle/index.ts index 0c576c113f..e917bc3cfd 100644 --- a/moonbeam-types-bundle/index.ts +++ b/moonbeam-types-bundle/index.ts @@ -76,6 +76,18 @@ export const rpcDefinitions: Record", }, }, + moon: { + isBlockFinalized: { + description: "Returns whether an Ethereum block is finalized", + params: [{ name: "blockHash", type: "Hash" }], + type: "bool", + }, + isTxFinalized: { + description: "Returns whether an Ethereum transaction is finalized", + params: [{ name: "txHash", type: "Hash" }], + type: "bool", + }, + }, }; const TYPES_0_4: RegistryTypes = { @@ -507,3 +519,6 @@ export const typesBundleDeprecated = { moonriver: moonbeamDefinitionsDeprecated, }, } as OverrideBundleType; + +// default types to use +export const types = typesBundlePre900; diff --git a/moonbeam-types-bundle/package-lock.json b/moonbeam-types-bundle/package-lock.json index 6f749da979..08db8480a0 100644 --- a/moonbeam-types-bundle/package-lock.json +++ b/moonbeam-types-bundle/package-lock.json @@ -1,13 +1,1040 @@ { "name": "moonbeam-types-bundle", - "version": "2.0.4", - "lockfileVersion": 1, + "version": "2.0.5", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "moonbeam-types-bundle", + "version": "2.0.5", + "license": "GPL-3.0-only", + "dependencies": { + "@polkadot/api": "^8.8.2", + "typescript": "^4.7.4" + }, + "devDependencies": { + "@types/underscore": "^1.11.3", + "underscore": "^1.13.1" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@noble/hashes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", + "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" + }, + "node_modules/@noble/secp256k1": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", + "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@polkadot/api": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.8.2.tgz", + "integrity": "sha512-kqHYLGIivYAHGF0B19ApBANDrreUqeyXuqtNHxieQSe63yoAksyUbwTmdl58Z0WnvXg39fjXXNZzLXFt2/txIQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/api-derive": "8.8.2", + "@polkadot/keyring": "^9.4.1", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/types-known": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "eventemitter3": "^4.0.7", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.8.2.tgz", + "integrity": "sha512-c99guuBvHrGbFBD9x32YG4Yc5osP1jVkGz/hlriRuTZNMUa/ZBjeoZtbVchL4PlpNC1sjdvvrIC9j3uQhvYHJQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.8.2.tgz", + "integrity": "sha512-V04Hw6WJhWGUr5m50lNWE/9ao7ZjcJq005kVMtMRdI94HLmKDMnS3M4EI6USGtLWQ0VOlIMmlp7k2R3SyVFwQA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-derive": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.8.2.tgz", + "integrity": "sha512-ltHft5kp+TFasolSSQlip6zQpw3WFinu6CQZRmcAAyGaM7QgNweIWh3ZdoigrjnZaJPraGWNCfJv0pSg+2j0vg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.8.2", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/keyring": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.4.1.tgz", + "integrity": "sha512-op6Tj8E9GHeZYvEss38FRUrX+GlBj6qiwF4BlFrAvPqjPnRn8TT9NhRLroiCwvxeNg3uMtEF/5xB+vvdI0I6qw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.4.1", + "@polkadot/util-crypto": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.4.1", + "@polkadot/util-crypto": "9.4.1" + } + }, + "node_modules/@polkadot/networks": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.4.1.tgz", + "integrity": "sha512-ibH8bZ2/XMXv0XEsP1fGOqNnm2mg1rHo5kHXSJ3QBcZJFh1+xkI4Ovl2xrFfZ+SYATA3Wsl5R6knqimk2EqyJQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.4.1", + "@substrate/ss58-registry": "^1.22.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.8.2.tgz", + "integrity": "sha512-z9rOSmPvcS/YQSJIhM5F2uLyYZ6azll35V9xGs19hypO5wkwzLYByLbXQ7j1SFI267q/IIXVnri0yI6mtsQgzA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.8.2.tgz", + "integrity": "sha512-2MrIra52NYsvWv192sHM5b6dUXYYYzA8IB/rB7YF9Hm4aIDJbQJ/8uBivHZjMzyHsegxMDAe9WQSEkR0eagojQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.8.2.tgz", + "integrity": "sha512-LzzTTOxmqDndOcYdukYkpfEBq3GlbKAOb2pisKF4CtcGPcZ6bG0vktwx6qlWQ+Apmdu98rabt+iQPfwvOSg8sA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-support": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "@polkadot/x-fetch": "^9.4.1", + "@polkadot/x-global": "^9.4.1", + "@polkadot/x-ws": "^9.4.1", + "@substrate/connect": "0.7.5", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.8.2.tgz", + "integrity": "sha512-O90MEfGbpPh/FmUAv0m3LcweZLWH6pmkODb1EGnwBHjZadYLCHFjdFO50yhoch9hh3+aEFmac6ma8swsy6IjAw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.8.2.tgz", + "integrity": "sha512-WalxIz5Z0RPp2FS0cWvhBjYL7FKzDqkIBc+r/DN4vYRQzp5JBVNJjPWWUPtq9ucEl1wiaD2vJNG34rWIYVtObg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.8.2.tgz", + "integrity": "sha512-p3YZU8WZIMnnSxTKpoiCPi64T/sSR7dX7ObkpvUITulE6dzXUPUvkdSVS9YlTlb4R43pZ0iSyB18vpnlpq8LYQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-create": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.8.2.tgz", + "integrity": "sha512-YMpiLCVFs2KKpvn3n24HahUzneaLKmjgwwd+QvFCooJClV/0YK22kwvlEteLO3aWPx2jy8ySSpUFn8kd/oWEAA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-known": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.8.2.tgz", + "integrity": "sha512-Ywa7v7K+UIYpQM3gbl6oA0zKiriX1OJfoYBxX7BcVLKW8cWmdy2xH9W6qNqxDWGAc2LXqNLhn0uzaRxq1niCCQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/networks": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-support": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.8.2.tgz", + "integrity": "sha512-z4yjN8odDgFFlhGBrJAeHX4YsUeprmBAzWDCJMBeL4C/E1yIG7RyzQryVJNb3m/galiX1Tzuuch4kqE/jABnfw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/util": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.4.1.tgz", + "integrity": "sha512-z0HcnIe3zMWyK1s09wQIwc1M8gDKygSF9tDAbC8H9KDeIRZB2ldhwWEFx/1DJGOgFFrmRfkxeC6dcDpfzQhFow==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.4.1", + "@polkadot/x-global": "9.4.1", + "@polkadot/x-textdecoder": "9.4.1", + "@polkadot/x-textencoder": "9.4.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.4.1.tgz", + "integrity": "sha512-V6xMOjdd8Kt/QmXlcDYM4WJDAmKuH4vWSlIcMmkFHnwH/NtYVdYIDZswLQHKL8gjLijPfVTHpWaJqNFhGpZJEg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@noble/hashes": "1.0.0", + "@noble/secp256k1": "1.5.5", + "@polkadot/networks": "9.4.1", + "@polkadot/util": "9.4.1", + "@polkadot/wasm-crypto": "^6.1.1", + "@polkadot/x-bigint": "9.4.1", + "@polkadot/x-randomvalues": "9.4.1", + "@scure/base": "1.0.0", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.4.1" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.1.1.tgz", + "integrity": "sha512-Cy0k00VCu+HWxie+nn9GWPlSPdiZl8Id8ulSGA2FKET0jIbffmOo4e1E2FXNucfR1UPEpqov5BCF9T5YxEXZDg==", + "dependencies": { + "@babel/runtime": "^7.17.9" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.1.1.tgz", + "integrity": "sha512-hv9RCbMYtgjCy7+FKZFnO2Afu/whax9sk6udnZqGRBRiwaNagtyliWZGrKNGvaXMIO0VyaY4jWUwSzUgPrLu1A==", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-init": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1", + "@polkadot/wasm-util": "6.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.1.1.tgz", + "integrity": "sha512-gG4FStVumkyRNH7WcTB+hn3EEwCssJhQyi4B1BOUt+eYYmw9xJdzIhqjzSd9b/yF2e5sRaAzfnMj2srGufsE6A==", + "dependencies": { + "@babel/runtime": "^7.17.9" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.1.1.tgz", + "integrity": "sha512-rbBm/9FOOUjISL4gGNokjcKy2X+Af6Chaet4zlabatpImtPIAK26B2UUBGoaRUnvl/w6K3+GwBL4LuBC+CvzFw==", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.1.1.tgz", + "integrity": "sha512-zkz5Ct4KfTBT+YNEA5qbsHhTV58/FAxDave8wYIOaW4TrBnFPPs+J0WBWlGFertgIhPkvjFnQC/xzRyhet9prg==", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-util": "6.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.1.1.tgz", + "integrity": "sha512-DgpLoFXMT53UKcfZ8eT2GkJlJAOh89AWO+TP6a6qeZQpvXVe5f1yR45WQpkZlgZyUP+/19+kY56GK0pQxfslqg==", + "dependencies": { + "@babel/runtime": "^7.17.9" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.4.1.tgz", + "integrity": "sha512-KlbXboegENoyrpjj+eXfY13vsqrXgk4620zCAUhKNH622ogdvAepHbY/DpV6w0FLEC6MwN9zd5cRuDBEXVeWiw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.4.1.tgz", + "integrity": "sha512-CZFPZKgy09TOF5pOFRVVhGrAaAPdSMyrUSKwdO2I8DzdIE1tmjnol50dlnZja5t8zTD0n1uIY1H4CEWwc5NF/g==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1", + "@types/node-fetch": "^2.6.1", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-global": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.4.1.tgz", + "integrity": "sha512-eN4oZeRdIKQeUPNN7OtH5XeYp349d8V9+gW6W0BmCfB2lTg8TDlG1Nj+Cyxpjl9DNF5CiKudTq72zr0dDSRbwA==", + "dependencies": { + "@babel/runtime": "^7.18.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.4.1.tgz", + "integrity": "sha512-TLOQw3JNPgCrcq9WO2ipdeG8scsSreu3m9hwj3n7nX/QKlVzSf4G5bxJo5TW1dwcUdHwBuVox+3zgCmo+NPh+Q==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.4.1.tgz", + "integrity": "sha512-yLulcgVASFUBJqrvS6Ssy0ko9teAfbu1ajH0r3Jjnqkpmmz2DJ1CS7tAktVa7THd4GHPGeKAVfxl+BbV/LZl+w==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.4.1.tgz", + "integrity": "sha512-/47wa31jBa43ULqMO60vzcJigTG+ZAGNcyT5r6hFLrQzRzc8nIBjIOD8YWtnKM92r9NvlNv2wJhdamqyU0mntg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.4.1.tgz", + "integrity": "sha512-zQjVxXgHsBVn27u4bjY01cFO6XWxgv2b3MMOpNHTKTAs8SLEmFf0LcT7fBShimyyudyTeJld5pHApJ4qp1OXxA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@scure/base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", + "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@substrate/connect": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.5.tgz", + "integrity": "sha512-sdAZ6IGuTNxRGlH/O+6IaXvkYzZFwMK03VbQMgxUzry9dz1+JzyaNf8iOTVHxhMIUZc0h0E90JQz/hNiUYPlUw==", + "dependencies": { + "@substrate/connect-extension-protocol": "^1.0.0", + "@substrate/smoldot-light": "0.6.16", + "eventemitter3": "^4.0.7" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.0.tgz", + "integrity": "sha512-nFVuKdp71hMd/MGlllAOh+a2hAqt8m6J2G0aSsS/RcALZexxF9jodbFc62ni8RDtJboeOfXAHhenYOANvJKPIg==" + }, + "node_modules/@substrate/smoldot-light": { + "version": "0.6.16", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.16.tgz", + "integrity": "sha512-Ej0ZdNPTW0EXbp45gv/5Kt/JV+c9cmRZRYAXg+EALxXPm0hW9h2QdVLm61A2PAskOGptW4wnJ1WzzruaenwAXQ==", + "dependencies": { + "buffer": "^6.0.1", + "pako": "^2.0.4", + "websocket": "^1.0.32" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.22.0.tgz", + "integrity": "sha512-IKqrPY0B3AeIXEc5/JGgEhPZLy+SmVyQf+k0SIGcNSTqt1GLI3gQFEOFwSScJdem+iYZQUrn6YPPxC3TpdSC3A==" + }, + "node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/underscore": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", + "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", + "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ed2curve": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ed2curve/-/ed2curve-0.3.0.tgz", + "integrity": "sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==", + "dependencies": { + "tweetnacl": "1.x.x" + } + }, + "node_modules/es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mock-socket": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/nock": { + "version": "13.2.7", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.7.tgz", + "integrity": "sha512-R6NUw7RIPtKwgK7jskuKoEi4VFMqIHtV2Uu9K/Uegc4TA5cqe+oNMYslZcUmnVNQCTG6wcSqUBaGTDd7sq5srg==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/underscore": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", + "dev": true + }, + "node_modules/utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + } + }, "dependencies": { "@babel/runtime": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", - "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -23,325 +1050,356 @@ "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==" }, "@polkadot/api": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-7.14.3.tgz", - "integrity": "sha512-io5PiF4SLpiG6u4fTP2Rbqqgt0iBPehWlMvaG0HyDLd+3ZklXRLrgbWbGc5Q6y+3zfeLEHAmKNqbAFghinOVjQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/api-augment": "7.14.3", - "@polkadot/api-base": "7.14.3", - "@polkadot/api-derive": "7.14.3", - "@polkadot/keyring": "^8.7.1", - "@polkadot/rpc-augment": "7.14.3", - "@polkadot/rpc-core": "7.14.3", - "@polkadot/rpc-provider": "7.14.3", - "@polkadot/types": "7.14.3", - "@polkadot/types-augment": "7.14.3", - "@polkadot/types-codec": "7.14.3", - "@polkadot/types-create": "7.14.3", - "@polkadot/types-known": "7.14.3", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.8.2.tgz", + "integrity": "sha512-kqHYLGIivYAHGF0B19ApBANDrreUqeyXuqtNHxieQSe63yoAksyUbwTmdl58Z0WnvXg39fjXXNZzLXFt2/txIQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/api-derive": "8.8.2", + "@polkadot/keyring": "^9.4.1", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/types-known": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", "eventemitter3": "^4.0.7", "rxjs": "^7.5.5" } }, "@polkadot/api-augment": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-7.14.3.tgz", - "integrity": "sha512-40h2ynCbFqnH+dwtzQM6YhsRzw+X1cnc55QC7p3kr/NOyEmheDaJHFUFt8t/cBo4REscOJ+3Apu92oQBSLYxGw==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.8.2.tgz", + "integrity": "sha512-c99guuBvHrGbFBD9x32YG4Yc5osP1jVkGz/hlriRuTZNMUa/ZBjeoZtbVchL4PlpNC1sjdvvrIC9j3uQhvYHJQ==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/api-base": "7.14.3", - "@polkadot/rpc-augment": "7.14.3", - "@polkadot/types": "7.14.3", - "@polkadot/types-augment": "7.14.3", - "@polkadot/types-codec": "7.14.3", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" } }, "@polkadot/api-base": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-7.14.3.tgz", - "integrity": "sha512-dbTFxPlZrUWHv2AXCibpf9Xq6vpnakUUuvYDaa6nwhjcysBQODsR1RpPJjr2uINwOSI5dN2F313yoI3bQZrt4w==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/rpc-core": "7.14.3", - "@polkadot/types": "7.14.3", - "@polkadot/util": "^8.7.1", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.8.2.tgz", + "integrity": "sha512-V04Hw6WJhWGUr5m50lNWE/9ao7ZjcJq005kVMtMRdI94HLmKDMnS3M4EI6USGtLWQ0VOlIMmlp7k2R3SyVFwQA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", "rxjs": "^7.5.5" } }, "@polkadot/api-derive": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-7.14.3.tgz", - "integrity": "sha512-+/sDSgNAyINM66BnLTyTkI1JYxGfuD76g7Nhu4+NSIyhURuo6GWuhiFsxWpYWlh5UzkNcKrY3xVI9QeA5c/Qgw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/api": "7.14.3", - "@polkadot/api-augment": "7.14.3", - "@polkadot/api-base": "7.14.3", - "@polkadot/rpc-core": "7.14.3", - "@polkadot/types": "7.14.3", - "@polkadot/types-codec": "7.14.3", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.8.2.tgz", + "integrity": "sha512-ltHft5kp+TFasolSSQlip6zQpw3WFinu6CQZRmcAAyGaM7QgNweIWh3ZdoigrjnZaJPraGWNCfJv0pSg+2j0vg==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.8.2", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", "rxjs": "^7.5.5" } }, "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.4.1.tgz", + "integrity": "sha512-op6Tj8E9GHeZYvEss38FRUrX+GlBj6qiwF4BlFrAvPqjPnRn8TT9NhRLroiCwvxeNg3uMtEF/5xB+vvdI0I6qw==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.4.1", + "@polkadot/util-crypto": "9.4.1" } }, "@polkadot/networks": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-8.7.1.tgz", - "integrity": "sha512-8xAmhDW0ry5EKcEjp6VTuwoTm0DdDo/zHsmx88P6sVL87gupuFsL+B6TrsYLl8GcaqxujwrOlKB+CKTUg7qFKg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.4.1.tgz", + "integrity": "sha512-ibH8bZ2/XMXv0XEsP1fGOqNnm2mg1rHo5kHXSJ3QBcZJFh1+xkI4Ovl2xrFfZ+SYATA3Wsl5R6knqimk2EqyJQ==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@substrate/ss58-registry": "^1.17.0" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.4.1", + "@substrate/ss58-registry": "^1.22.0" } }, "@polkadot/rpc-augment": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-7.14.3.tgz", - "integrity": "sha512-bP+e95szj9zyn03hHXbh9L7HOBBUmZqll7XDK9+s4XtN5lrWtkoG2iL/50OQko7CDbyYl9bS6yWMde3RqBBypg==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.8.2.tgz", + "integrity": "sha512-z9rOSmPvcS/YQSJIhM5F2uLyYZ6azll35V9xGs19hypO5wkwzLYByLbXQ7j1SFI267q/IIXVnri0yI6mtsQgzA==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/rpc-core": "7.14.3", - "@polkadot/types": "7.14.3", - "@polkadot/types-codec": "7.14.3", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" } }, "@polkadot/rpc-core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-7.14.3.tgz", - "integrity": "sha512-903YO+kw85uuLZ8X29W/QFj0v+XWRABPHOI+joOenIRKMIn1wy5QeCe7HrIn2aST31LqVLFAd1jMNPx1tCkQfA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/rpc-augment": "7.14.3", - "@polkadot/rpc-provider": "7.14.3", - "@polkadot/types": "7.14.3", - "@polkadot/util": "^8.7.1", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.8.2.tgz", + "integrity": "sha512-2MrIra52NYsvWv192sHM5b6dUXYYYzA8IB/rB7YF9Hm4aIDJbQJ/8uBivHZjMzyHsegxMDAe9WQSEkR0eagojQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", "rxjs": "^7.5.5" } }, "@polkadot/rpc-provider": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-7.14.3.tgz", - "integrity": "sha512-Kl/kZ6OCDD+iG5mm45gcNwkMV34ONmIYUcMN8qIjtjQKLE3vt8RBl6puNpjhrhgPW3w4I/8bXxmIj05Od6yFKA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/keyring": "^8.7.1", - "@polkadot/types": "7.14.3", - "@polkadot/types-support": "7.14.3", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", - "@polkadot/x-fetch": "^8.7.1", - "@polkadot/x-global": "^8.7.1", - "@polkadot/x-ws": "^8.7.1", - "@substrate/connect": "0.7.0-alpha.0", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.8.2.tgz", + "integrity": "sha512-LzzTTOxmqDndOcYdukYkpfEBq3GlbKAOb2pisKF4CtcGPcZ6bG0vktwx6qlWQ+Apmdu98rabt+iQPfwvOSg8sA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-support": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "@polkadot/x-fetch": "^9.4.1", + "@polkadot/x-global": "^9.4.1", + "@polkadot/x-ws": "^9.4.1", + "@substrate/connect": "0.7.5", "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.2", - "nock": "^13.2.4" + "mock-socket": "^9.1.5", + "nock": "^13.2.6" } }, "@polkadot/types": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-7.14.3.tgz", - "integrity": "sha512-Nx6BeEcGe9EgmGif9SRd1fbRVlrxq7snZWMAhrJLq6cwoDsmtA6uRxwT8wWINwXCeCOa9RS5GAeDCeWYlFP1tQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/keyring": "^8.7.1", - "@polkadot/types-augment": "7.14.3", - "@polkadot/types-codec": "7.14.3", - "@polkadot/types-create": "7.14.3", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.8.2.tgz", + "integrity": "sha512-O90MEfGbpPh/FmUAv0m3LcweZLWH6pmkODb1EGnwBHjZadYLCHFjdFO50yhoch9hh3+aEFmac6ma8swsy6IjAw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", "rxjs": "^7.5.5" } }, "@polkadot/types-augment": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-7.14.3.tgz", - "integrity": "sha512-Vx2URwuXoTvVEPvpkIYkDPhWEAC72VmDTNpKIljF6e4hpIBDCj1FgiWzbhpxag10O5jsUx8Pymkq4pzFHTy/aA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.8.2.tgz", + "integrity": "sha512-WalxIz5Z0RPp2FS0cWvhBjYL7FKzDqkIBc+r/DN4vYRQzp5JBVNJjPWWUPtq9ucEl1wiaD2vJNG34rWIYVtObg==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/types": "7.14.3", - "@polkadot/types-codec": "7.14.3", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" } }, "@polkadot/types-codec": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-7.14.3.tgz", - "integrity": "sha512-Xb0oJ1yzXL40XHa7yyCN4PCLGVH+CLKX2HuDfGdOFMrPIOLBsBTOlilvKfdUS2PVACr7djF6CYeu8UO5vIx44w==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.8.2.tgz", + "integrity": "sha512-p3YZU8WZIMnnSxTKpoiCPi64T/sSR7dX7ObkpvUITulE6dzXUPUvkdSVS9YlTlb4R43pZ0iSyB18vpnlpq8LYQ==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" } }, "@polkadot/types-create": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-7.14.3.tgz", - "integrity": "sha512-UiaeMg/mLZ+eVruY2gCcs92xOF10uSvVtuFYvYkhs5MGhh4j1OrlBd2Abn+nJc6bzzJxGst3oRuaxs9Nlq3J7Q==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.8.2.tgz", + "integrity": "sha512-YMpiLCVFs2KKpvn3n24HahUzneaLKmjgwwd+QvFCooJClV/0YK22kwvlEteLO3aWPx2jy8ySSpUFn8kd/oWEAA==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/types-codec": "7.14.3", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" } }, "@polkadot/types-known": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-7.14.3.tgz", - "integrity": "sha512-u1DPow5hcY3IPWKMr7W9OGmhhal0wdUYsfu8SVe0/jqDZpZ4drOMpUEo60hR0N+8xmHQpkgsn65LoOqxPTB2WA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.8.2.tgz", + "integrity": "sha512-Ywa7v7K+UIYpQM3gbl6oA0zKiriX1OJfoYBxX7BcVLKW8cWmdy2xH9W6qNqxDWGAc2LXqNLhn0uzaRxq1niCCQ==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/networks": "^8.7.1", - "@polkadot/types": "7.14.3", - "@polkadot/types-codec": "7.14.3", - "@polkadot/types-create": "7.14.3", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/networks": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1" } }, "@polkadot/types-support": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-7.14.3.tgz", - "integrity": "sha512-gBrmjTpEsbaj5/SRZug/exOKwhg56GkOjouI/NYA4dikODPy1tOk3tx9SdvjLCQG5bd7GMY/sd9vbr1Rfu0Jnw==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.8.2.tgz", + "integrity": "sha512-z4yjN8odDgFFlhGBrJAeHX4YsUeprmBAzWDCJMBeL4C/E1yIG7RyzQryVJNb3m/galiX1Tzuuch4kqE/jABnfw==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" } }, "@polkadot/util": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-8.7.1.tgz", - "integrity": "sha512-XjY1bTo7V6OvOCe4yn8H2vifeuBciCy0gq0k5P1tlGUQLI/Yt0hvDmxcA0FEPtqg8CL+rYRG7WXGPVNjkrNvyQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-global": "8.7.1", - "@polkadot/x-textdecoder": "8.7.1", - "@polkadot/x-textencoder": "8.7.1", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.4.1.tgz", + "integrity": "sha512-z0HcnIe3zMWyK1s09wQIwc1M8gDKygSF9tDAbC8H9KDeIRZB2ldhwWEFx/1DJGOgFFrmRfkxeC6dcDpfzQhFow==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.4.1", + "@polkadot/x-global": "9.4.1", + "@polkadot/x-textdecoder": "9.4.1", + "@polkadot/x-textencoder": "9.4.1", "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", + "bn.js": "^5.2.1", "ip-regex": "^4.3.0" } }, "@polkadot/util-crypto": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-8.7.1.tgz", - "integrity": "sha512-TaSuJ2aNrB5sYK7YXszkEv24nYJKRFqjF2OrggoMg6uYxUAECvTkldFnhtgeizMweRMxJIBu6bMHlSIutbWgjw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.4.1.tgz", + "integrity": "sha512-V6xMOjdd8Kt/QmXlcDYM4WJDAmKuH4vWSlIcMmkFHnwH/NtYVdYIDZswLQHKL8gjLijPfVTHpWaJqNFhGpZJEg==", "requires": { - "@babel/runtime": "^7.17.8", + "@babel/runtime": "^7.18.3", "@noble/hashes": "1.0.0", "@noble/secp256k1": "1.5.5", - "@polkadot/networks": "8.7.1", - "@polkadot/util": "8.7.1", - "@polkadot/wasm-crypto": "^5.1.1", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-randomvalues": "8.7.1", + "@polkadot/networks": "9.4.1", + "@polkadot/util": "9.4.1", + "@polkadot/wasm-crypto": "^6.1.1", + "@polkadot/x-bigint": "9.4.1", + "@polkadot/x-randomvalues": "9.4.1", "@scure/base": "1.0.0", "ed2curve": "^0.3.0", "tweetnacl": "^1.0.3" } }, + "@polkadot/wasm-bridge": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.1.1.tgz", + "integrity": "sha512-Cy0k00VCu+HWxie+nn9GWPlSPdiZl8Id8ulSGA2FKET0jIbffmOo4e1E2FXNucfR1UPEpqov5BCF9T5YxEXZDg==", + "requires": { + "@babel/runtime": "^7.17.9" + } + }, "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.1.1.tgz", + "integrity": "sha512-hv9RCbMYtgjCy7+FKZFnO2Afu/whax9sk6udnZqGRBRiwaNagtyliWZGrKNGvaXMIO0VyaY4jWUwSzUgPrLu1A==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-init": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1", + "@polkadot/wasm-util": "6.1.1" } }, "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.1.1.tgz", + "integrity": "sha512-gG4FStVumkyRNH7WcTB+hn3EEwCssJhQyi4B1BOUt+eYYmw9xJdzIhqjzSd9b/yF2e5sRaAzfnMj2srGufsE6A==", + "requires": { + "@babel/runtime": "^7.17.9" + } + }, + "@polkadot/wasm-crypto-init": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.1.1.tgz", + "integrity": "sha512-rbBm/9FOOUjISL4gGNokjcKy2X+Af6Chaet4zlabatpImtPIAK26B2UUBGoaRUnvl/w6K3+GwBL4LuBC+CvzFw==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1" } }, "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.1.1.tgz", + "integrity": "sha512-zkz5Ct4KfTBT+YNEA5qbsHhTV58/FAxDave8wYIOaW4TrBnFPPs+J0WBWlGFertgIhPkvjFnQC/xzRyhet9prg==", + "requires": { + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-util": "6.1.1" + } + }, + "@polkadot/wasm-util": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.1.1.tgz", + "integrity": "sha512-DgpLoFXMT53UKcfZ8eT2GkJlJAOh89AWO+TP6a6qeZQpvXVe5f1yR45WQpkZlgZyUP+/19+kY56GK0pQxfslqg==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.17.9" } }, "@polkadot/x-bigint": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-8.7.1.tgz", - "integrity": "sha512-ClkhgdB/KqcAKk3zA6Qw8wBL6Wz67pYTPkrAtImpvoPJmR+l4RARauv+MH34JXMUNlNb3aUwqN6lq2Z1zN+mJg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.4.1.tgz", + "integrity": "sha512-KlbXboegENoyrpjj+eXfY13vsqrXgk4620zCAUhKNH622ogdvAepHbY/DpV6w0FLEC6MwN9zd5cRuDBEXVeWiw==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" } }, "@polkadot/x-fetch": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-8.7.1.tgz", - "integrity": "sha512-ygNparcalYFGbspXtdtZOHvNXZBkNgmNO+um9C0JYq74K5OY9/be93uyfJKJ8JcRJtOqBfVDsJpbiRkuJ1PRfg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.4.1.tgz", + "integrity": "sha512-CZFPZKgy09TOF5pOFRVVhGrAaAPdSMyrUSKwdO2I8DzdIE1tmjnol50dlnZja5t8zTD0n1uIY1H4CEWwc5NF/g==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1", "@types/node-fetch": "^2.6.1", "node-fetch": "^2.6.7" } }, "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.4.1.tgz", + "integrity": "sha512-eN4oZeRdIKQeUPNN7OtH5XeYp349d8V9+gW6W0BmCfB2lTg8TDlG1Nj+Cyxpjl9DNF5CiKudTq72zr0dDSRbwA==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.18.3" } }, "@polkadot/x-randomvalues": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-8.7.1.tgz", - "integrity": "sha512-njt17MlfN6yNyNEti7fL12lr5qM6A1aSGkWKVuqzc7XwSBesifJuW4km5u6r2gwhXjH2eHDv9SoQ7WXu8vrrkg==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.4.1.tgz", + "integrity": "sha512-TLOQw3JNPgCrcq9WO2ipdeG8scsSreu3m9hwj3n7nX/QKlVzSf4G5bxJo5TW1dwcUdHwBuVox+3zgCmo+NPh+Q==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" } }, "@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.4.1.tgz", + "integrity": "sha512-yLulcgVASFUBJqrvS6Ssy0ko9teAfbu1ajH0r3Jjnqkpmmz2DJ1CS7tAktVa7THd4GHPGeKAVfxl+BbV/LZl+w==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" } }, "@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.4.1.tgz", + "integrity": "sha512-/47wa31jBa43ULqMO60vzcJigTG+ZAGNcyT5r6hFLrQzRzc8nIBjIOD8YWtnKM92r9NvlNv2wJhdamqyU0mntg==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" } }, "@polkadot/x-ws": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-8.7.1.tgz", - "integrity": "sha512-Mt0tcNzGXyKnN3DQ06alkv+JLtTfXWu6zSypFrrKHSQe3u79xMQ1nSicmpT3gWLhIa8YF+8CYJXMrqaXgCnDhw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.4.1.tgz", + "integrity": "sha512-zQjVxXgHsBVn27u4bjY01cFO6XWxgv2b3MMOpNHTKTAs8SLEmFf0LcT7fBShimyyudyTeJld5pHApJ4qp1OXxA==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1", "@types/websocket": "^1.0.5", "websocket": "^1.0.34" } @@ -352,12 +1410,12 @@ "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==" }, "@substrate/connect": { - "version": "0.7.0-alpha.0", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.0-alpha.0.tgz", - "integrity": "sha512-fvO7w++M8R95R/pGJFW9+cWOt8OYnnTfgswxtlPqSgzqX4tta8xcNQ51crC72FcL5agwSGkA1gc2/+eyTj7O8A==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.5.tgz", + "integrity": "sha512-sdAZ6IGuTNxRGlH/O+6IaXvkYzZFwMK03VbQMgxUzry9dz1+JzyaNf8iOTVHxhMIUZc0h0E90JQz/hNiUYPlUw==", "requires": { "@substrate/connect-extension-protocol": "^1.0.0", - "@substrate/smoldot-light": "0.6.8", + "@substrate/smoldot-light": "0.6.16", "eventemitter3": "^4.0.7" } }, @@ -367,9 +1425,9 @@ "integrity": "sha512-nFVuKdp71hMd/MGlllAOh+a2hAqt8m6J2G0aSsS/RcALZexxF9jodbFc62ni8RDtJboeOfXAHhenYOANvJKPIg==" }, "@substrate/smoldot-light": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.8.tgz", - "integrity": "sha512-9lVwbG6wrtss0sd6013BJGe4WN4taujsGG49pwyt1Lj36USeL2Sb164TTUxmZF/g2NQEqDPwPROBdekQ2gFmgg==", + "version": "0.6.16", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.16.tgz", + "integrity": "sha512-Ej0ZdNPTW0EXbp45gv/5Kt/JV+c9cmRZRYAXg+EALxXPm0hW9h2QdVLm61A2PAskOGptW4wnJ1WzzruaenwAXQ==", "requires": { "buffer": "^6.0.1", "pako": "^2.0.4", @@ -377,9 +1435,9 @@ } }, "@substrate/ss58-registry": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.17.0.tgz", - "integrity": "sha512-YdQOxCtEZLnYZFg/zSzfROYtvIs5+iLD7p/VHoll7AVEhrPAmxgF5ggMDB2Dass7dfwABVx7heATbPFNg95Q8w==" + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.22.0.tgz", + "integrity": "sha512-IKqrPY0B3AeIXEc5/JGgEhPZLy+SmVyQf+k0SIGcNSTqt1GLI3gQFEOFwSScJdem+iYZQUrn6YPPxC3TpdSC3A==" }, "@types/bn.js": { "version": "5.1.0", @@ -390,14 +1448,14 @@ } }, "@types/node": { - "version": "17.0.23", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", - "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==" + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" }, "@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "requires": { "@types/node": "*", "form-data": "^3.0.0" @@ -420,7 +1478,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "base64-js": { "version": "1.5.1", @@ -428,9 +1486,9 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "buffer": { "version": "6.0.3", @@ -467,17 +1525,17 @@ } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "ed2curve": { "version": "0.3.0", @@ -488,9 +1546,9 @@ } }, "es5-ext": { - "version": "0.10.59", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.59.tgz", - "integrity": "sha512-cOgyhW0tIJyQY1Kfw6Kr0viu9ZlUctVchRMZ7R0HiH3dxTSp5zJDLecwxUqPUrGKMsgBI1wd1FL+d9Jxfi4cLw==", + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", "requires": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -500,7 +1558,7 @@ "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -559,17 +1617,17 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "mime-db": { "version": "1.52.0", @@ -585,14 +1643,14 @@ } }, "mock-socket": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.2.tgz", - "integrity": "sha512-XKZkCnQ9ISOlTnaPg4LYYSMj7+6i78HyadYzLA5JM4465ibLdjappZD9Csnqc3Tfzep/eEK/LCJ29BTaLHoB1A==" + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==" }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "next-tick": { "version": "1.1.0", @@ -600,29 +1658,14 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", + "version": "13.2.7", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.7.tgz", + "integrity": "sha512-R6NUw7RIPtKwgK7jskuKoEi4VFMqIHtV2Uu9K/Uegc4TA5cqe+oNMYslZcUmnVNQCTG6wcSqUBaGTDd7sq5srg==", "requires": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", + "lodash": "^4.17.21", "propagate": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "node-fetch": { @@ -634,9 +1677,9 @@ } }, "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" }, "pako": { "version": "2.0.4", @@ -664,12 +1707,12 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "tweetnacl": { "version": "1.0.3", @@ -690,9 +1733,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" }, "underscore": { "version": "1.13.2", @@ -711,7 +1754,7 @@ "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "websocket": { "version": "1.0.34", @@ -724,12 +1767,27 @@ "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } } }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -738,7 +1796,7 @@ "yaeti": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" } } } diff --git a/moonbeam-types-bundle/package.json b/moonbeam-types-bundle/package.json index 5594379519..6cbb8a9ab8 100644 --- a/moonbeam-types-bundle/package.json +++ b/moonbeam-types-bundle/package.json @@ -1,6 +1,6 @@ { "name": "moonbeam-types-bundle", - "version": "2.0.4", + "version": "2.0.7", "description": "Bundled types to instantiate the Polkadot JS api with a Moonbeam network", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -26,8 +26,8 @@ "url": "git+https://github.com/PureStake/moonbeam.git" }, "dependencies": { - "@polkadot/api": "^7.14.3", - "typescript": "^4.5.2" + "@polkadot/api": "^8.8.2", + "typescript": "^4.7.4" }, "devDependencies": { "@types/underscore": "^1.11.3", diff --git a/node/Cargo.toml b/node/Cargo.toml index c2c1a5adb4..b23712d63e 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -20,14 +20,15 @@ moonbeam-service = { path = "service", default-features = false } [dev-dependencies] assert_cmd = "0.12" hex = "0.4.3" -nix = "0.17" +nix = "0.23" serde = { version = "1.0.101", features = [ "derive" ] } serde_json = "1.0" tempfile = "3.2.0" +tracing-core = "=0.1.26" # Benchmarking -pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } [features] default = [ "moonbase-native", "moonbeam-native", "moonriver-native" ] diff --git a/node/cli-opt/Cargo.toml b/node/cli-opt/Cargo.toml index 75e6f15369..4c382adc2f 100644 --- a/node/cli-opt/Cargo.toml +++ b/node/cli-opt/Cargo.toml @@ -4,19 +4,19 @@ authors = [ "PureStake" ] edition = "2021" homepage = "https://moonbeam.network" license = "GPL-3.0-only" -version = "0.23.0" +version = "0.25.0" [dependencies] +bip32 = { git = "https://github.com/purestake/crates", branch = "bip32-v0.4.0-fix", default-features = false, features = [ "bip39" ] } clap = { version = "3.1", features = [ "derive" ] } libsecp256k1 = "0.6" primitive-types = "0.11.0" sha3 = "0.9" tiny-bip39 = "0.8" -tiny-hderive = "0.3.0" url = "2.2.2" # Moonbeam account = { path = "../../primitives/account" } # Substrate -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } diff --git a/node/cli-opt/src/account_key.rs b/node/cli-opt/src/account_key.rs index 15e6ed26e4..9b7a8ef0ca 100644 --- a/node/cli-opt/src/account_key.rs +++ b/node/cli-opt/src/account_key.rs @@ -14,12 +14,15 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . +use bip32::{ + Error as Bip32Error, ExtendedPrivateKey, PrivateKey as PrivateKeyT, PrivateKeyBytes, + PublicKey as PublicKeyT, PublicKeyBytes, +}; use bip39::{Language, Mnemonic, MnemonicType, Seed}; use clap::Parser; use libsecp256k1::{PublicKey, SecretKey}; use primitive_types::H256; use sp_runtime::traits::IdentifyAccount; -use tiny_hderive::bip32::ExtendedPrivKey; #[derive(Debug, Parser)] pub struct GenerateAccountKey { @@ -50,15 +53,20 @@ impl GenerateAccountKey { // Retrieves the seed from the mnemonic let seed = Seed::new(&mnemonic, ""); - - // Generate the derivation path from the account-index let derivation_path = format!("m/44'/60'/0'/0/{}", self.account_index.unwrap_or(0)); - - // Derives the private key from - let ext = ExtendedPrivKey::derive(seed.as_bytes(), derivation_path.as_str()) - .expect("invalid derivation path"); - let private_key = - SecretKey::parse_slice(&ext.secret()).expect("invalid extended private key"); + let private_key = if let Some(private_key) = + derivation_path.parse().ok().and_then(|derivation_path| { + let extended = ExtendedPrivateKey::::derive_from_path( + &seed, + &derivation_path, + ) + .expect("invalid extended private key"); + Some(extended.private_key().0) + }) { + private_key + } else { + panic!("invalid extended private key"); + }; // Retrieves the public key let public_key = PublicKey::from_secret_key(&private_key); @@ -73,3 +81,50 @@ impl GenerateAccountKey { println!("Path: {}", derivation_path); } } + +// `libsecp256k1::PublicKey` wrapped type +pub struct Secp256k1PublicKey(pub PublicKey); +// `libsecp256k1::Secret` wrapped type +pub struct Secp256k1SecretKey(pub SecretKey); + +impl PublicKeyT for Secp256k1PublicKey { + fn from_bytes(bytes: PublicKeyBytes) -> Result { + let public = PublicKey::parse_compressed(&bytes).map_err(|_| return Bip32Error::Decode)?; + Ok(Self(public)) + } + + fn to_bytes(&self) -> PublicKeyBytes { + self.0.serialize_compressed() + } + + fn derive_child(&self, other: PrivateKeyBytes) -> Result { + let mut child = self.0.clone(); + let secret = SecretKey::parse(&other).map_err(|_| return Bip32Error::Decode)?; + let _ = child.tweak_add_assign(&secret); + Ok(Self(child)) + } +} + +impl PrivateKeyT for Secp256k1SecretKey { + type PublicKey = Secp256k1PublicKey; + + fn from_bytes(bytes: &PrivateKeyBytes) -> Result { + let secret = SecretKey::parse(&bytes).map_err(|_| return Bip32Error::Decode)?; + Ok(Self(secret)) + } + + fn to_bytes(&self) -> PrivateKeyBytes { + self.0.serialize() + } + + fn derive_child(&self, other: PrivateKeyBytes) -> Result { + let mut child = self.0.clone(); + let secret = SecretKey::parse(&other).map_err(|_| return Bip32Error::Decode)?; + let _ = child.tweak_add_assign(&secret); + Ok(Self(child)) + } + + fn public_key(&self) -> Self::PublicKey { + Secp256k1PublicKey(PublicKey::from_secret_key(&self.0)) + } +} diff --git a/node/cli-opt/src/lib.rs b/node/cli-opt/src/lib.rs index 93f976e31a..977d40fc07 100644 --- a/node/cli-opt/src/lib.rs +++ b/node/cli-opt/src/lib.rs @@ -79,4 +79,5 @@ pub struct RpcConfig { pub fee_history_limit: u64, pub max_past_logs: u32, pub relay_chain_rpc_url: Option, + pub tracing_raw_max_memory_usage: usize, } diff --git a/node/cli/Cargo.toml b/node/cli/Cargo.toml index c20b7d67b0..cf60641e7a 100644 --- a/node/cli/Cargo.toml +++ b/node/cli/Cargo.toml @@ -2,7 +2,7 @@ name = "moonbeam-cli" authors = [ "PureStake" ] edition = "2021" -version = "0.23.0" +version = "0.25.0" [dependencies] clap = { version = "3.1", features = [ "derive" ] } @@ -11,35 +11,35 @@ parity-scale-codec = "3.0.0" # Moonbeam cli-opt = { package = "moonbeam-cli-opt", path = "../cli-opt", default-features = false } -perf-test = { path = "../perf-test" } service = { package = "moonbeam-service", path = "../service", default-features = false } # Substrate -frame-benchmarking-cli = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-cli = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-finality-grandpa = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-service = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-telemetry = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-tracing = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -substrate-prometheus-endpoint = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -try-runtime-cli = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true } # Cumulus / Nimbus -cumulus-client-cli = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-client-service = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19" } +cumulus-client-cli = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-client-service = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23" } # Polkadot -polkadot-cli = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -polkadot-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -polkadot-service = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +polkadot-cli = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +polkadot-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +polkadot-service = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "moonbase-native", "moonbeam-native", "moonriver-native", "wasmtime", "westend-native" ] @@ -50,10 +50,11 @@ moonbase-native = [ "service/moonbase-native", "westend-native" ] moonbeam-native = [ "service/moonbeam-native" ] moonriver-native = [ "service/moonriver-native" ] -moonbase-runtime-benchmarks = [ "service/moonbase-runtime-benchmarks" ] runtime-benchmarks = [ "service/runtime-benchmarks" ] try-runtime = [ "service/try-runtime", "try-runtime-cli", ] wasmtime = [ "sc-cli/wasmtime" ] + +moonbase-runtime-benchmarks = [ "service/moonbase-runtime-benchmarks" ] diff --git a/node/cli/src/cli.rs b/node/cli/src/cli.rs index d7f8454b80..bb0375192c 100644 --- a/node/cli/src/cli.rs +++ b/node/cli/src/cli.rs @@ -21,7 +21,6 @@ use clap::Parser; use cli_opt::{account_key::GenerateAccountKey, EthApi, Sealing}; -use perf_test::PerfCmd; use sc_cli::{Error as CliError, SubstrateCli}; use service::chain_spec; use std::path::PathBuf; @@ -58,9 +57,6 @@ pub enum Subcommand { /// Revert the chain to a previous state. Revert(sc_cli::RevertCmd), - /// Run hardware performance tests. - PerfTest(PerfCmd), - /// Sub-commands concerned with benchmarking. /// The pallet benchmarking moved to the `pallet` sub-command. #[clap(subcommand)] @@ -185,6 +181,11 @@ pub struct RunCmd { #[clap(long, default_value = "300000000")] pub eth_statuses_cache: usize, + /// Size in bytes of data a raw tracing request is allowed to use. + /// Bound the size of memory, stack and storage data. + #[clap(long, default_value = "20000000")] + pub tracing_raw_max_memory_usage: usize, + /// Maximum number of logs in a query. #[clap(long, default_value = "10000")] pub max_past_logs: u32, @@ -204,6 +205,16 @@ pub struct RunCmd { /// Maximum fee history cache size. #[clap(long, default_value = "2048")] pub fee_history_limit: u64, + + /// Disable automatic hardware benchmarks. + /// + /// By default these benchmarks are automatically ran at startup and measure + /// the CPU speed, the memory bandwidth and the disk speed. + /// + /// The results are then printed out in the logs, and also sent as part of + /// telemetry, if telemetry is enabled. + #[clap(long)] + pub no_hardware_benchmarks: bool, } impl std::ops::Deref for RunCmd { diff --git a/node/cli/src/command.rs b/node/cli/src/command.rs index db3ffd3069..54451b5004 100644 --- a/node/cli/src/command.rs +++ b/node/cli/src/command.rs @@ -23,17 +23,19 @@ use cumulus_primitives_core::ParaId; use frame_benchmarking_cli::BenchmarkCmd; use log::info; use parity_scale_codec::Encode; -use polkadot_parachain::primitives::AccountIdConversion; #[cfg(feature = "westend-native")] use polkadot_service::WestendChainSpec; use sc_cli::{ ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, NetworkParams, Result, RuntimeVersion, SharedParams, SubstrateCli, }; -use sc_service::config::{BasePath, PrometheusConfig}; +use sc_service::{ + config::{BasePath, PrometheusConfig}, + DatabaseSource, +}; use service::{chain_spec, frontier_database_dir, IdentifyVariant}; use sp_core::hexdisplay::HexDisplay; -use sp_runtime::traits::Block as _; +use sp_runtime::traits::{AccountIdConversion, Block as _}; use std::{io::Write, net::SocketAddr}; fn load_spec( @@ -310,9 +312,17 @@ pub fn run() -> Result<()> { cli.run.dev_service || relay_chain_id == Some("dev-service".to_string()); // Remove Frontier offchain db - let frontier_database_config = sc_service::DatabaseSource::RocksDb { - path: frontier_database_dir(&config), - cache_size: 0, + let frontier_database_config = match config.database { + DatabaseSource::RocksDb { .. } => DatabaseSource::RocksDb { + path: frontier_database_dir(&config, "db"), + cache_size: 0, + }, + DatabaseSource::ParityDb { .. } => DatabaseSource::ParityDb { + path: frontier_database_dir(&config, "paritydb"), + }, + _ => { + return Err(format!("Cannot purge `{:?}` database", config.database).into()) + } }; cmd.base.run(frontier_database_config)?; @@ -349,12 +359,8 @@ pub fn run() -> Result<()> { service::MoonriverExecutor, >(&mut config, false)?; - let aux_revert = Box::new(move |client, _, blocks| { - sc_finality_grandpa::revert(client, blocks)?; - Ok(()) - }); Ok(( - cmd.run(params.client, params.backend, Some(aux_revert)), + cmd.run(params.client, params.backend, None), params.task_manager, )) }), @@ -365,12 +371,8 @@ pub fn run() -> Result<()> { service::MoonbeamExecutor, >(&mut config, false)?; - let aux_revert = Box::new(move |client, _, blocks| { - sc_finality_grandpa::revert(client, blocks)?; - Ok(()) - }); Ok(( - cmd.run(params.client, params.backend, Some(aux_revert)), + cmd.run(params.client, params.backend, None), params.task_manager, )) }), @@ -381,12 +383,8 @@ pub fn run() -> Result<()> { service::MoonbaseExecutor, >(&mut config, false)?; - let aux_revert = Box::new(move |client, _, blocks| { - sc_finality_grandpa::revert(client, blocks)?; - Ok(()) - }); Ok(( - cmd.run(params.client, params.backend, Some(aux_revert)), + cmd.run(params.client, params.backend, None), params.task_manager, )) }), @@ -477,54 +475,9 @@ pub fn run() -> Result<()> { Ok(()) } - Some(Subcommand::PerfTest(cmd)) => { - if let Some(_) = cmd.shared_params.base_path { - log::warn!("base_path is overwritten by working_dir in perf-test"); - } - - let mut working_dir = cmd.working_dir.clone(); - working_dir.push("perf_test"); - if working_dir.exists() { - eprintln!("test subdir {:?} exists, please remove", working_dir); - std::process::exit(1); - } - - let mut cmd: perf_test::PerfCmd = cmd.clone(); - cmd.shared_params.base_path = Some(working_dir.clone()); - - let runner = cli.create_runner(&cmd)?; - let chain_spec = &runner.config().chain_spec; - match chain_spec { - #[cfg(feature = "moonbeam-native")] - spec if spec.is_moonbeam() => runner.sync_run(|config| { - cmd.run::( - &cmd, config, - ) - }), - #[cfg(feature = "moonriver-native")] - spec if spec.is_moonriver() => runner.sync_run(|config| { - cmd.run::( - &cmd, config, - ) - }), - #[cfg(feature = "moonbase-native")] - spec if spec.is_moonbase() => runner.sync_run(|config| { - cmd.run::( - &cmd, config, - ) - }), - _ => { - panic!("invalid chain spec"); - } - }?; - - log::debug!("removing temp perf_test dir {:?}", working_dir); - std::fs::remove_dir_all(working_dir)?; - - Ok(()) - } Some(Subcommand::Benchmark(cmd)) => { let runner = cli.create_runner(cmd)?; + // Switch on the concrete benchmark sub-command match cmd { BenchmarkCmd::Pallet(cmd) => { @@ -660,6 +613,14 @@ pub fn run() -> Result<()> { } } BenchmarkCmd::Overhead(_) => Err("Unsupported benchmarking command".into()), + BenchmarkCmd::Machine(cmd) => { + return runner.sync_run(|config| { + cmd.run( + &config, + frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE.clone(), + ) + }); + } } } #[cfg(feature = "try-runtime")] @@ -731,6 +692,15 @@ pub fn run() -> Result<()> { None => { let runner = cli.create_runner(&(*cli.run).normalize())?; runner.run_node_until_exit(|config| async move { + let hwbench = if !cli.run.no_hardware_benchmarks { + config.database.path().map(|database_path| { + let _ = std::fs::create_dir_all(&database_path); + sc_sysinfo::gather_hwbench(Some(database_path)) + }) + } else { + None + }; + let extension = chain_spec::Extensions::try_get(&*config.chain_spec); let para_id = extension.map(|e| e.para_id); let id = ParaId::from(cli.run.parachain_id.clone().or(para_id).unwrap_or(1000)); @@ -745,6 +715,7 @@ pub fn run() -> Result<()> { fee_history_limit: cli.run.fee_history_limit, max_past_logs: cli.run.max_past_logs, relay_chain_rpc_url: cli.run.base.relay_chain_rpc_url, + tracing_raw_max_memory_usage: cli.run.tracing_raw_max_memory_usage, }; // If dev service was requested, start up manual or instant seal. @@ -771,19 +742,19 @@ pub fn run() -> Result<()> { spec if spec.is_moonriver() => service::new_dev::< service::moonriver_runtime::RuntimeApi, service::MoonriverExecutor, - >(config, author_id, cli.run.sealing, rpc_config) + >(config, author_id, cli.run.sealing, rpc_config, hwbench) .map_err(Into::into), #[cfg(feature = "moonbeam-native")] spec if spec.is_moonbeam() => service::new_dev::< service::moonbeam_runtime::RuntimeApi, service::MoonbeamExecutor, - >(config, author_id, cli.run.sealing, rpc_config) + >(config, author_id, cli.run.sealing, rpc_config, hwbench) .map_err(Into::into), #[cfg(feature = "moonbase-native")] _ => service::new_dev::< service::moonbase_runtime::RuntimeApi, service::MoonbaseExecutor, - >(config, author_id, cli.run.sealing, rpc_config) + >(config, author_id, cli.run.sealing, rpc_config, hwbench) .map_err(Into::into), #[cfg(not(feature = "moonbase-native"))] _ => panic!("invalid chain spec"), @@ -798,7 +769,7 @@ pub fn run() -> Result<()> { ); let parachain_account = - AccountIdConversion::::into_account(&id); + AccountIdConversion::::into_account_truncating(&id); let state_version = RelayChainCli::native_runtime_version(&config.chain_spec).state_version(); @@ -840,7 +811,7 @@ pub fn run() -> Result<()> { spec if spec.is_moonriver() => service::start_node::< service::moonriver_runtime::RuntimeApi, service::MoonriverExecutor, - >(config, polkadot_config, id, rpc_config) + >(config, polkadot_config, id, rpc_config, hwbench) .await .map(|r| r.0) .map_err(Into::into), @@ -848,7 +819,7 @@ pub fn run() -> Result<()> { spec if spec.is_moonbeam() => service::start_node::< service::moonbeam_runtime::RuntimeApi, service::MoonbeamExecutor, - >(config, polkadot_config, id, rpc_config) + >(config, polkadot_config, id, rpc_config, hwbench) .await .map(|r| r.0) .map_err(Into::into), @@ -856,7 +827,7 @@ pub fn run() -> Result<()> { _ => service::start_node::< service::moonbase_runtime::RuntimeApi, service::MoonbaseExecutor, - >(config, polkadot_config, id, rpc_config) + >(config, polkadot_config, id, rpc_config, hwbench) .await .map(|r| r.0) .map_err(Into::into), diff --git a/node/perf-test/Cargo.toml b/node/perf-test/Cargo.toml deleted file mode 100644 index fac9ff7b14..0000000000 --- a/node/perf-test/Cargo.toml +++ /dev/null @@ -1,56 +0,0 @@ -[package] -name = "perf-test" -authors = [ "PureStake" ] -description = "Moonbeam Performance Tests" -edition = "2021" -version = "0.1.0" - -[dependencies] -async-io = "1.3" -clap = { version = "3.1", features = [ "derive" ] } -cli-table = "0.4" -futures = { version = "0.3.1", features = [ "compat" ] } -hex = "0.4.3" -libsecp256k1 = { version = "0.5" } -log = "0.4.8" -rlp = { version = "0.5" } -serde = { version = "1.0", features = [ "derive" ] } -serde_json = "1.0" -sha3 = { version = "0.8" } - -# Moonbeam - -cli-opt = { package = "moonbeam-cli-opt", path = "../cli-opt", default-features = false } -# TODO: handle different runtime builds -moonbase-runtime = { path = "../../runtime/moonbase" } -service = { package = "moonbeam-service", path = "../service", default-features = false } - -# Substrate -sc-basic-authorship = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-cli = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-client-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-client-db = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-consensus-manual-seal = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-executor = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-rpc = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-service = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-externalities = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-keystore = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-state-machine = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } - -# Frontier -ethereum = { version = "0.12.0" } -fc-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } - -# Cumulus / Nimbus -cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19" } diff --git a/node/perf-test/src/command.rs b/node/perf-test/src/command.rs deleted file mode 100644 index 07492f7ce1..0000000000 --- a/node/perf-test/src/command.rs +++ /dev/null @@ -1,527 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . - -use crate::{ - tests::{BlockCreationPerfTest, FibonacciPerfTest, StoragePerfTest, TestResults, TestRunner}, - txn_signer::UnsignedTransaction, - PerfCmd, -}; - -use cumulus_primitives_parachain_inherent::{ - MockValidationDataInherentDataProvider, MockXcmConfig, -}; -use ethereum::TransactionAction; -use fp_rpc::{ConvertTransactionRuntimeApi, EthereumRuntimeRPCApi}; -use nimbus_primitives::NimbusId; -use sc_cli::{CliConfiguration, Result as CliResult, SharedParams}; -use sc_client_api::HeaderBackend; -use sc_consensus_manual_seal::{run_manual_seal, CreatedBlock, EngineCommand, ManualSealParams}; -use sc_executor::{NativeElseWasmExecutor, NativeExecutionDispatch}; -use sc_service::{Configuration, TFullBackend, TFullClient, TaskManager, TransactionPool}; -use sp_api::{BlockId, ConstructRuntimeApi, ProvideRuntimeApi}; -use sp_core::{H160, H256, U256}; -use sp_runtime::transaction_validity::TransactionSource; -use std::{fs::File, io::prelude::*, marker::PhantomData, sync::Arc}; - -use futures::{ - channel::{mpsc, oneshot}, - SinkExt, Stream, -}; - -use cli_table::{print_stdout, WithTitle}; -use serde::Serialize; -use service::{chain_spec, rpc, Block, RuntimeApiCollection}; -use sha3::{Digest, Keccak256}; - -pub type FullClient = - TFullClient>; -pub type FullBackend = TFullBackend; - -pub struct TestContext -where - RuntimeApi: - ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - Executor: NativeExecutionDispatch + 'static, -{ - _task_manager: TaskManager, - client: Arc>, - manual_seal_command_sink: mpsc::Sender>, - pool: Arc>>, - - _marker1: PhantomData, - _marker2: PhantomData, -} - -impl TestContext -where - RuntimeApi: - ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - Executor: NativeExecutionDispatch + 'static, -{ - pub fn from_cmd(mut config: Configuration, _cmd: &PerfCmd) -> CliResult { - println!("perf-test from_cmd"); - let sc_service::PartialComponents { - client, - backend, - mut task_manager, - import_queue, - keystore_container, - select_chain: maybe_select_chain, - transaction_pool, - other: - ( - block_import, - filter_pool, - telemetry, - _telemetry_worker_handle, - frontier_backend, - fee_history_cache, - ), - } = service::new_partial::(&mut config, true)?; - - // TODO: review -- we don't need any actual networking - let (network, system_rpc_tx, network_starter) = - sc_service::build_network(sc_service::BuildNetworkParams { - config: &config, - client: client.clone(), - transaction_pool: transaction_pool.clone(), - spawn_handle: task_manager.spawn_handle(), - import_queue, - block_announce_validator_builder: None, - warp_sync: None, - })?; - - // TODO: maybe offchain worker needed? - - let author_id = chain_spec::get_from_seed::("Alice"); - - // TODO: no need for prometheus here... - let prometheus_registry = config.prometheus_registry().cloned(); - - let mut env = sc_basic_authorship::ProposerFactory::new( - task_manager.spawn_handle(), - client.clone(), - transaction_pool.clone(), - prometheus_registry.as_ref(), - telemetry.as_ref().map(|x| x.handle()), - ); - env.set_soft_deadline(service::SOFT_DEADLINE_PERCENT); - - let command_sink; - let command_stream: Box> + Send + Sync + Unpin> = { - let (sink, stream) = mpsc::channel(1000); - command_sink = sink; - Box::new(stream) - }; - - let select_chain = maybe_select_chain.expect( - "`new_partial` builds a `LongestChainRule` when building dev service.\ - We specified the dev service when calling `new_partial`.\ - Therefore, a `LongestChainRule` is present. qed.", - ); - - let client_set_aside_for_cidp = client.clone(); - - log::debug!("spawning authorship task..."); - task_manager.spawn_essential_handle().spawn_blocking( - "authorship_task", - Some("block-authoring"), - run_manual_seal(ManualSealParams { - block_import, - env, - client: client.clone(), - pool: transaction_pool.clone(), - commands_stream: command_stream, - select_chain, - consensus_data_provider: None, - create_inherent_data_providers: move |block: H256, ()| { - let current_para_block = client_set_aside_for_cidp - .number(block) - .expect("Header lookup should succeed") - .expect("Header passed in as parent should be present in backend."); - let author_id = author_id.clone(); - - let client_for_xcm = client_set_aside_for_cidp.clone(); - - async move { - let time = sp_timestamp::InherentDataProvider::from_system_time(); - - let mocked_parachain = MockValidationDataInherentDataProvider { - current_para_block, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - raw_downward_messages: Vec::new(), - raw_horizontal_messages: Vec::new(), - xcm_config: MockXcmConfig::new( - &*client_for_xcm, - block, - Default::default(), - Default::default(), - ), - }; - - let author = nimbus_primitives::InherentDataProvider::(author_id); - - Ok((time, mocked_parachain, author)) - } - }, - }), - ); - - let subscription_task_executor = - sc_rpc::SubscriptionTaskExecutor::new(task_manager.spawn_handle()); - let overrides = rpc::overrides_handle(client.clone()); - - let fee_history_limit = 2048; - service::rpc::spawn_essential_tasks(service::rpc::SpawnTasksParams { - task_manager: &task_manager, - client: client.clone(), - substrate_backend: backend.clone(), - frontier_backend: frontier_backend.clone(), - filter_pool: filter_pool.clone(), - overrides: overrides.clone(), - fee_history_limit, - fee_history_cache: fee_history_cache.clone(), - }); - - let command_sink_for_deps = Some(command_sink.clone()); - - let block_data_cache = Arc::new(fc_rpc::EthBlockDataCacheTask::new( - task_manager.spawn_handle(), - overrides.clone(), - 3000, - 3000, - prometheus_registry, - )); - - let rpc_extensions_builder = { - let client = client.clone(); - let pool = transaction_pool.clone(); - let backend = backend.clone(); - let network = network.clone(); - let max_past_logs = 1000; - let fee_history_cache = fee_history_cache.clone(); - let overrides = overrides.clone(); - let block_data_cache = block_data_cache.clone(); - - Box::new(move |deny_unsafe, _| { - let deps = rpc::FullDeps { - client: client.clone(), - pool: pool.clone(), - graph: pool.pool().clone(), - deny_unsafe, - is_authority: true, - network: network.clone(), - filter_pool: filter_pool.clone(), - ethapi_cmd: Default::default(), - command_sink: command_sink_for_deps.clone(), - frontier_backend: frontier_backend.clone(), - backend: backend.clone(), - max_past_logs, - fee_history_limit, - fee_history_cache: fee_history_cache.clone(), - xcm_senders: None, - overrides: overrides.clone(), - block_data_cache: block_data_cache.clone(), - }; - #[allow(unused_mut)] - let mut io = rpc::create_full(deps, subscription_task_executor.clone()); - Ok(io) - }) - }; - - let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { - network, - client: client.clone(), - keystore: keystore_container.sync_keystore(), - task_manager: &mut task_manager, - transaction_pool: transaction_pool.clone(), - rpc_extensions_builder, - backend, - system_rpc_tx, - config, - telemetry: None, - })?; - - network_starter.start_network(); - - Ok(TestContext { - _task_manager: task_manager, - client: client.clone(), - manual_seal_command_sink: command_sink, - pool: transaction_pool, - _marker1: Default::default(), - _marker2: Default::default(), - }) - } - - pub fn get_alice_details(&self) -> AccountDetails { - use std::str::FromStr; - - let alice_address = H160::from_str("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac") - .expect("valid hex provided; qed"); - - let block = BlockId::Hash(self.client.info().best_hash); - - let nonce = self - .client - .runtime_api() - .account_basic(&block, alice_address) - .expect("should be able to get alices' account info") - .nonce; - - AccountDetails { - address: alice_address, - privkey: H256::from_str( - "5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133", - ) - .expect("valid hex provided; qed"), - nonce: nonce, - } - } - - pub fn evm_call( - &self, - from: H160, - to: H160, - data: Vec, - value: U256, - gas_limit: U256, - max_fee_per_gas: Option, - max_priority_fee_per_gas: Option, - nonce: Option, - ) -> Result { - let hash = self.client.info().best_hash; - log::info!("evm_call best_hash: {:?}", hash); - - let result = self.client.runtime_api().call( - &BlockId::Hash(hash), - from, - to, - data, - value, - gas_limit, - max_fee_per_gas, - max_priority_fee_per_gas, - nonce, - false, - None, - ); - - result.expect("why is this a Result>???") // TODO - } - - pub fn evm_create( - &self, - from: H160, - data: Vec, - value: U256, - gas_limit: U256, - max_fee_per_gas: Option, - max_priority_fee_per_gas: Option, - nonce: Option, - ) -> Result { - let hash = self.client.info().best_hash; - log::info!("evm_create best_hash: {:?}", hash); - - let result = self.client.runtime_api().create( - &BlockId::Hash(hash), - from, - data, - value, - gas_limit, - max_fee_per_gas, - max_priority_fee_per_gas, - nonce, - false, - None, - ); - - result.expect("why is this a Result>???") // TODO - } - - /// Creates a transaction out of the given call/create arguments, signs it, and sends it - pub fn eth_sign_and_send_transaction( - &self, - signing_key: &H256, - to: Option, - data: Vec, - value: U256, - gas_limit: U256, - gas_price: U256, - nonce: U256, - ) -> Result { - const CHAIN_ID: u64 = 1281; // TODO: derive from CLI or from Moonbase - - let action = match to { - Some(addr) => TransactionAction::Call(addr), - None => TransactionAction::Create, - }; - - let unsigned = UnsignedTransaction { - chain_id: CHAIN_ID, - nonce, - gas_price, - gas_limit, - action, - value, - input: data, - }; - let signed = unsigned.sign(signing_key); - - let transaction_hash = - H256::from_slice(Keccak256::digest(&rlp::encode(&signed)).as_slice()); - - let block_hash = BlockId::hash(self.client.info().best_hash); - log::debug!("eth_sign_and_send_transaction best_hash: {:?}", block_hash); - - #[allow(deprecated)] - let extrinsic = self - .client - .runtime_api() - .convert_transaction_before_version_2(&block_hash, signed) - .map_err(|_| "ConvertTransactionRuntimeApi not found")?; - - let future = self - .pool - .submit_one(&block_hash, TransactionSource::Local, extrinsic); - - let _ = futures::executor::block_on(future); - - Ok(transaction_hash) - } - - /// Author a block through manual sealing - pub fn create_block(&self, create_empty: bool) -> CreatedBlock { - log::trace!("Issuing seal command..."); - let hash = self.client.info().best_hash; - - let mut sink = self.manual_seal_command_sink.clone(); - let future = async move { - // TODO: why use oneshot here? is it impacting txn pool? - let (sender, receiver) = oneshot::channel(); - let command = EngineCommand::SealNewBlock { - create_empty, - finalize: true, - parent_hash: Some(hash), - sender: Some(sender), - }; - let _ = sink.send(command).await; - receiver.await - }; - - log::trace!("waiting for SealNewBlock command to resolve..."); - futures::executor::block_on(future) - .expect("block_on failed") - .expect("Failed to receive SealNewBlock response") - } -} - -/// Struct representing account details, including private key -#[derive(Debug)] -pub struct AccountDetails { - pub address: H160, - pub privkey: H256, - pub nonce: U256, -} - -impl CliConfiguration for PerfCmd { - fn shared_params(&self) -> &SharedParams { - &self.shared_params - } - - // copied from BenchmarkCmd, might be useful - /* - fn chain_id(&self, _is_dev: bool) -> Result { - Ok(match self.shared_params.chain { - Some(ref chain) => chain.clone(), - None => "dev".into(), - }) - } - */ -} - -impl PerfCmd { - // taking a different approach and starting a full dev service - pub fn run(&self, cmd: &PerfCmd, config: Configuration) -> CliResult<()> - where - RuntimeApi: - ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - Executor: NativeExecutionDispatch + 'static, - { - // TODO: Joshy suggested looking at the substrate browser "test": - // /bin/node/browser-testing/src/lib.rs - let runner = TestContext::::from_cmd(config, &self)?; - - // create an empty block to warm the runtime cache... - runner.create_block(true); - - let tests: Vec>> = vec![ - Box::new(FibonacciPerfTest::new()), - Box::new(BlockCreationPerfTest::new()), - Box::new(StoragePerfTest::new()), - ]; - - let mut all_test_results: Vec = Default::default(); - - let (have_filter, enabled_tests) = if let Some(filter) = &cmd.tests { - let enabled_tests: Vec<&str> = filter.split(',').collect(); - (true, enabled_tests) - } else { - (false, Default::default()) - }; - - for mut test in tests { - if have_filter { - if !enabled_tests.contains(&test.name().as_str()) { - continue; - } - } - let mut results: Vec = (*test.run(&runner)?).to_vec(); - all_test_results.append(&mut results); - } - - #[derive(Serialize)] - struct AllResults { - test_results: Vec, - } - - let all_results = AllResults { - test_results: all_test_results.clone(), - }; - let results_str = - serde_json::to_string_pretty(&all_results).expect("fail to serialize AllResults"); - - if let Some(target) = &cmd.output_file { - let mut file = File::create(target)?; - file.write_all(&results_str.into_bytes())?; - println!("Results written to {:?}", target); - } else { - println!("System Information:\n{}", results_str); - } - - let table = all_test_results.with_title(); - print_stdout(table).expect("failed to print results"); - - Ok(()) - } -} diff --git a/node/perf-test/src/lib.rs b/node/perf-test/src/lib.rs deleted file mode 100644 index 84fbd56872..0000000000 --- a/node/perf-test/src/lib.rs +++ /dev/null @@ -1,52 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) 2020-2021 Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: Apache-2.0 - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -mod command; -mod tests; -mod txn_signer; - -use clap::Parser; -use std::path::PathBuf; - -#[derive(Debug, Clone, Parser)] -pub struct PerfCmd { - #[allow(missing_docs)] - #[clap(flatten)] - pub shared_params: sc_cli::SharedParams, - - #[clap( - long = "working-dir", - help = "Used for temp blockchain data. Should exist on desired test hardware.", - required = true - )] - pub working_dir: PathBuf, - - #[clap( - long = "output-file", - help = "File where results should be printed (STDOUT if omitted)." - )] - pub output_file: Option, - - #[clap(long, value_name = "CHAIN_SPEC", default_value = "dev")] - pub chain: String, - - #[clap( - long = "tests", - help = "Comma-separated list of tests to run (if omitted, runs all tests)" - )] - pub tests: Option, -} diff --git a/node/perf-test/src/tests/block_creation.rs b/node/perf-test/src/tests/block_creation.rs deleted file mode 100644 index 5004d86770..0000000000 --- a/node/perf-test/src/tests/block_creation.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . - -use crate::{ - command::{FullBackend, FullClient, TestContext}, - tests::{TestResults, TestRunner}, -}; - -use sc_service::NativeExecutionDispatch; -use sp_api::ConstructRuntimeApi; -use std::time::Instant; - -use service::{Block, RuntimeApiCollection}; - -const EXTRINSIC_GAS_LIMIT: u64 = 12_995_000; -const MIN_GAS_PRICE: u64 = 1_000_000_000; - -pub struct BlockCreationPerfTest {} - -impl BlockCreationPerfTest { - pub fn new() -> Self { - BlockCreationPerfTest {} - } -} - -impl TestRunner for BlockCreationPerfTest -where - RuntimeApi: - ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - Executor: NativeExecutionDispatch + 'static, -{ - fn name(&self) -> String { - "block_creation".into() - } - - fn run( - &mut self, - context: &TestContext, - ) -> Result, String> { - let mut results: Vec = Default::default(); - - let alice = context.get_alice_details(); - let mut alice_nonce = alice.nonce; - - const NUM_EMPTY_BLOCKS: u64 = 2048; - println!("Creating {} empty blocks...", NUM_EMPTY_BLOCKS); - let now = Instant::now(); - for _i in 1..NUM_EMPTY_BLOCKS { - context.create_block(true); - } - results.push(TestResults::new( - "empty blocks", - now.elapsed().as_micros(), - 17962999, - )); - - println!("Creating blocks with increasing nonce-dependent txns..."); - let now = Instant::now(); - for i in 1..67 { - for _ in 1..i { - let _txn_hash = context - .eth_sign_and_send_transaction( - &alice.privkey, - Some(alice.address), - Default::default(), - 1.into(), - EXTRINSIC_GAS_LIMIT.into(), - MIN_GAS_PRICE.into(), - alice_nonce, - ) - .expect("Failed to send funds in nonce-dependent test"); - - alice_nonce = alice_nonce.saturating_add(1.into()); - } - - context.create_block(true); - } - results.push(TestResults::new( - "nonce-dependent blocks", - now.elapsed().as_micros(), - 23069066, - )); - - Ok(results) - } -} diff --git a/node/perf-test/src/tests/fibonacci.rs b/node/perf-test/src/tests/fibonacci.rs deleted file mode 100644 index 70876bbe94..0000000000 --- a/node/perf-test/src/tests/fibonacci.rs +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . - -use crate::{ - command::{FullBackend, FullClient, TestContext}, - tests::{TestResults, TestRunner}, -}; - -use sc_service::NativeExecutionDispatch; -use sp_api::ConstructRuntimeApi; -use std::time::Instant; - -use service::{Block, RuntimeApiCollection}; - -const EXTRINSIC_GAS_LIMIT: u64 = 12_995_000; -const MIN_GAS_PRICE: u64 = 1_000_000_000; - -// source code for this contract can [currently] be found in: -// tests/contracts/sources.ts under "Fibonacci" -const FIBONACCI_HEX: &str = concat!( - "608060405234801561001057600080fd5b5061024b806100206000396000f3fe6080604052348015", - "61001057600080fd5b506004361061002b5760003560e01c80633a9bbfcd14610030575b600080fd", - "5b61004a600480360381019061004591906100d3565b610060565b604051610057919061010b565b", - "60405180910390f35b60008082141561007357600090506100b9565b600060019050600191506000", - "600290505b838110156100b6576000838361009a9190610126565b90508392508093505080806100", - "ae90610186565b915050610084565b50505b919050565b6000813590506100cd816101fe565b9291", - "5050565b6000602082840312156100e557600080fd5b60006100f3848285016100be565b91505092", - "915050565b6101058161017c565b82525050565b600060208201905061012060008301846100fc56", - "5b92915050565b60006101318261017c565b915061013c8361017c565b9250827fffffffffffffff", - "ffffffffffffffffffffffffffffffffffffffffffffffffff03821115610171576101706101cf56", - "5b5b828201905092915050565b6000819050919050565b60006101918261017c565b91507fffffff", - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156101c4576101c361", - "01cf565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000", - "000000000000000000600052601160045260246000fd5b6102078161017c565b8114610212576000", - "80fd5b5056fea264697066735822122046f6b28b441f2f3caa263c58109a043ec2c03d4823bf1d25", - "b1937cc1c684efab64736f6c63430008040033" -); - -pub struct FibonacciPerfTest {} - -impl FibonacciPerfTest { - pub fn new() -> Self { - FibonacciPerfTest {} - } -} - -impl TestRunner for FibonacciPerfTest -where - RuntimeApi: - ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - Executor: NativeExecutionDispatch + 'static, -{ - fn name(&self) -> String { - "fibonacci".into() - } - - fn run( - &mut self, - context: &TestContext, - ) -> Result, String> { - let mut results: Vec = Default::default(); - - let alice = context.get_alice_details(); - let mut alice_nonce = alice.nonce; - - // start by deploying a contract... - let fibonacci_bytecode = - hex::decode(FIBONACCI_HEX).expect("FIBONACCI_HEX is valid hex; qed"); - - // do a create() call (which doesn't persist) to see what our expected contract address - // will be. afterward we create a txn and produce a block so it will persist. - // TODO: better way to calculate new contract address - let _now = Instant::now(); - let create_info = context - .evm_create( - alice.address, - fibonacci_bytecode.clone(), - 0.into(), - EXTRINSIC_GAS_LIMIT.into(), - Some(MIN_GAS_PRICE.into()), - None, // max_priority_fee_per_gas - Some(alice_nonce), - ) - .expect("EVM create failed while estimating contract address"); - - let fibonacci_address = create_info.value; - log::debug!( - "Fibonacci fibonacci_address expected to be {:?}", - fibonacci_address - ); - - log::trace!("Issuing EVM create txn..."); - let _txn_hash = context - .eth_sign_and_send_transaction( - &alice.privkey, - None, - fibonacci_bytecode, - 0.into(), - EXTRINSIC_GAS_LIMIT.into(), - MIN_GAS_PRICE.into(), - alice_nonce, - ) - .expect("EVM create failed while trying to deploy Fibonacci contract"); - - let _now = Instant::now(); - context.create_block(true); - - // TODO: verify txn results - - alice_nonce = alice_nonce.saturating_add(1.into()); - let calldata_hex = - "3a9bbfcd0000000000000000000000000000000000000000000000000000000000000172"; - let calldata = hex::decode(calldata_hex).expect("calldata is valid hex; qed"); - - const NUM_FIB_370_CALLS: u32 = 4096; - println!("Calling fib[370] {} times...", NUM_FIB_370_CALLS); - let now = Instant::now(); - for _ in 0..NUM_FIB_370_CALLS { - let call_results = context - .evm_call( - alice.address, - fibonacci_address, - calldata.clone(), - 0.into(), - EXTRINSIC_GAS_LIMIT.into(), - Some(MIN_GAS_PRICE.into()), - None, // max_priority_fee_per_gas - Some(alice_nonce), - ) - .expect("EVM call failed while trying to invoke Fibonacci contract"); - - log::debug!("EVM call returned {:?}", call_results); - } - results.push(TestResults::new( - "fibonacci_calls", - now.elapsed().as_micros(), - 5476292, - )); - - Ok(results) - } -} diff --git a/node/perf-test/src/tests/mod.rs b/node/perf-test/src/tests/mod.rs deleted file mode 100644 index a820712748..0000000000 --- a/node/perf-test/src/tests/mod.rs +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . - -use crate::command::{FullBackend, FullClient, TestContext}; - -use sc_service::NativeExecutionDispatch; -use service::{Block, RuntimeApiCollection}; -use sp_api::ConstructRuntimeApi; - -use cli_table::{format::Justify, Table}; -use serde::Serialize; - -mod block_creation; -mod fibonacci; -mod storage; -pub use block_creation::BlockCreationPerfTest; -pub use fibonacci::FibonacciPerfTest; -pub use storage::StoragePerfTest; - -/// struct representing the test results of a single test -#[derive(Default, Clone, Table, Serialize)] -pub struct TestResults { - #[table(title = "Test Name")] - pub test_name: String, - #[table( - title = "Overall Time", - display_fn = "display_duration_usecs", - justify = "Justify::Right" - )] - pub overall_duration_usecs: u128, - #[table( - title = "Reference", - display_fn = "display_duration_usecs", - justify = "Justify::Right" - )] - pub reference_duration_usecs: u128, - #[table( - title = "Relative", - display_fn = "display_relative", - justify = "Justify::Right" - )] - pub relative: f64, -} - -impl TestResults { - pub fn new(name: &str, duration_usecs: u128, reference_duration_usecs: u128) -> Self { - let ours = duration_usecs as f64; - let reference = reference_duration_usecs as f64; - - std::assert!(reference > 0f64, "make sure reference is set and > 0"); - let relative = if ours > reference { - // the reference is better -- negative % expected - -(1f64 - (reference / ours)) - } else { - // we beat the reference -- positive % expected - (reference / ours) - 1f64 - }; - - TestResults { - test_name: name.into(), - overall_duration_usecs: duration_usecs, - reference_duration_usecs, - relative, - } - } -} - -pub trait TestRunner -where - RuntimeApi: - ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - Executor: NativeExecutionDispatch + 'static, -{ - /// Return a globally unique name for this test. This is used as a filter on the command line - /// so a CLI-friendly name is preferred. - fn name(&self) -> String; - - /// Run the test - fn run( - &mut self, - context: &TestContext, - ) -> Result, String>; -} - -fn display_duration_usecs(duration_usecs: &u128) -> impl std::fmt::Display { - let ms = duration_usecs / 1000; - let us = duration_usecs % 1000; - let as_decimal: f64 = ms as f64 + (us as f64 / 1000.0); - format!("{:.3} ms", as_decimal) -} - -fn display_relative(relative: &f64) -> impl std::fmt::Display { - format!("{:.1} %", relative * 100f64) -} diff --git a/node/perf-test/src/tests/storage.rs b/node/perf-test/src/tests/storage.rs deleted file mode 100644 index 6b9725c914..0000000000 --- a/node/perf-test/src/tests/storage.rs +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . - -use crate::{ - command::{FullBackend, FullClient, TestContext}, - tests::{TestResults, TestRunner}, -}; - -use sc_service::NativeExecutionDispatch; -use sp_api::ConstructRuntimeApi; -use sp_core::U256; -use std::time::Instant; - -use service::{Block, RuntimeApiCollection}; -use sha3::{Digest, Keccak256}; - -const EXTRINSIC_GAS_LIMIT: u64 = 12_995_000; -const MIN_GAS_PRICE: u64 = 1_000_000_000; - -// source code for this contract can [currently] be found in: -// tests/contracts/sources.ts under "StorageBloater" -const STORAGE_BLOATER_HEX: &str = concat!( - "6080604052600060015534801561001557600080fd5b5061040e806100256000396000f3fe6080", - "60405234801561001057600080fd5b50600436106100415760003560e01c806356f510a914610046", - "578063b5ee966014610062578063d9a902b414610092575b600080fd5b6100606004803603810190", - "61005b919061020d565b6100ae565b005b61007c600480360381019061007791906101a0565b6101", - "0a565b604051610089919061026f565b60405180910390f35b6100ac60048036038101906100a791", - "906101cd565b610122565b005b60005b828110156101045781816100c591906102e0565b846100d0", - "919061028a565b60008083876100df919061028a565b815260200190815260200160002081905550", - "80806100fc90610344565b9150506100b1565b50505050565b600060205280600052604060002060", - "00915090505481565b6000805b8281101561016c57600080828661013d919061028a565b81526020", - "019081526020016000205482610157919061028a565b9150808061016490610344565b9150506101", - "26565b50806001600082825461017f919061028a565b92505081905550505050565b600081359050", - "61019a816103c1565b92915050565b6000602082840312156101b6576101b56103bc565b5b600061", - "01c48482850161018b565b91505092915050565b600080604083850312156101e4576101e36103bc", - "565b5b60006101f28582860161018b565b92505060206102038582860161018b565b915050925092", - "9050565b600080600060608486031215610226576102256103bc565b5b6000610234868287016101", - "8b565b93505060206102458682870161018b565b92505060406102568682870161018b565b915050", - "9250925092565b6102698161033a565b82525050565b600060208201905061028460008301846102", - "60565b92915050565b60006102958261033a565b91506102a08361033a565b9250827fffffffffff", - "ffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156102d5576102d46103", - "8d565b5b828201905092915050565b60006102eb8261033a565b91506102f68361033a565b925081", - "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516", - "1561032f5761032e61038d565b5b828202905092915050565b6000819050919050565b600061034f", - "8261033a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "ff8214156103825761038161038d565b5b600182019050919050565b7f4e487b7100000000000000", - "000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b", - "6103ca8161033a565b81146103d557600080fd5b5056fea2646970667358221220abec915f4f93ce", - "2b1d8fce7509c4a05914401e30a8ad5f58d6aef8baf7fc905864736f6c63430008060033" -); - -pub struct StoragePerfTest {} - -impl StoragePerfTest { - pub fn new() -> Self { - StoragePerfTest {} - } -} - -impl TestRunner for StoragePerfTest -where - RuntimeApi: - ConstructRuntimeApi> + Send + Sync + 'static, - RuntimeApi::RuntimeApi: - RuntimeApiCollection>, - Executor: NativeExecutionDispatch + 'static, -{ - fn name(&self) -> String { - "storage".into() - } - - fn run( - &mut self, - context: &TestContext, - ) -> Result, String> { - let mut results: Vec = Default::default(); - - let alice = context.get_alice_details(); - let mut alice_nonce = alice.nonce; - - let calculate_bloat_storage_calldata = |start: u64, num_items: u64, seed: u64| { - let start = U256::from(start); - let num_items = U256::from(num_items); - let seed = U256::from(seed); - - let mut bytes = Vec::::with_capacity(4 + 32 + 32 + 32); - - bytes.extend_from_slice( - &Keccak256::digest(b"bloat_storage(uint256,uint256,uint256)")[0..4], - ); - bytes.resize(4 + 32 + 32 + 32, 0); - - U256::from(start).to_big_endian(&mut bytes[4..36]); - U256::from(num_items).to_big_endian(&mut bytes[36..68]); - U256::from(seed).to_big_endian(&mut bytes[68..100]); - - bytes - }; - - let calculate_calculate_sum_calldata = |start: u64, num_items: u64| { - let start = U256::from(start); - let num_items = U256::from(num_items); - - let mut bytes = Vec::::with_capacity(4 + 32 + 32); - - bytes.extend_from_slice(&Keccak256::digest(b"calculate_sum(uint256,uint256)")[0..4]); - bytes.resize(4 + 32 + 32, 0); - - U256::from(start).to_big_endian(&mut bytes[4..36]); - U256::from(num_items).to_big_endian(&mut bytes[36..68]); - - bytes - }; - - let storage_bloater_bytecode = - hex::decode(STORAGE_BLOATER_HEX).expect("STORAGE_BLOATER_HEX is valid hex; qed"); - - // precalculate contract address. - // TODO: need so much DRY.... - let create_info = context - .evm_create( - alice.address, - storage_bloater_bytecode.clone(), - 0.into(), - EXTRINSIC_GAS_LIMIT.into(), - Some(MIN_GAS_PRICE.into()), - None, // max_priority_fee_per_gas - Some(alice_nonce), - ) - .expect("EVM create failed while estimating contract address"); - let storage_bloater_address = create_info.value; - log::debug!( - "storage_bloater address expected to be {:?}", - storage_bloater_address - ); - - log::trace!("Issuing EVM create txn for stoarge_bloater..."); - let _txn_hash = context - .eth_sign_and_send_transaction( - &alice.privkey, - None, - storage_bloater_bytecode, - 0.into(), - EXTRINSIC_GAS_LIMIT.into(), - MIN_GAS_PRICE.into(), - alice_nonce, - ) - .expect("EVM create failed while trying to deploy storage_bloater contract"); - - alice_nonce = alice_nonce.saturating_add(1.into()); - - let _now = Instant::now(); - context.create_block(true); - - const NUM_STORAGE_ITEMS: u64 = 50000; - const NUM_STORAGE_ITEMS_PER_BLOCK: u64 = 500; - const NUM_BLOCKS: u64 = NUM_STORAGE_ITEMS / NUM_STORAGE_ITEMS_PER_BLOCK; - - assert!(NUM_BLOCKS == 100); - - // fill our storage contract with bloat - let now = Instant::now(); - for i in 0..NUM_BLOCKS { - // create calldata - let calldata = calculate_bloat_storage_calldata( - i * NUM_STORAGE_ITEMS_PER_BLOCK, - NUM_STORAGE_ITEMS_PER_BLOCK, - 0, - ); - - let _txn_hash = context - .eth_sign_and_send_transaction( - &alice.privkey, - Some(storage_bloater_address), - calldata.clone(), - 0.into(), - EXTRINSIC_GAS_LIMIT.into(), - MIN_GAS_PRICE.into(), - alice_nonce, - ) - .expect("EVM call failed while trying to call bloat_storage()"); - - context.create_block(true); - alice_nonce = alice_nonce.saturating_add(1.into()); - } - - results.push(TestResults::new( - "storage bloating", - now.elapsed().as_micros(), - 46188450, - )); - - const NUM_READS_PER_BLOCK: u64 = 5000; - const NUM_READ_BLOCKS: u64 = NUM_STORAGE_ITEMS / NUM_READS_PER_BLOCK; - assert!(NUM_READ_BLOCKS == 10); - - let now = Instant::now(); - for i in 0..NUM_READ_BLOCKS { - // now call calculate_sum to force a read of these items which were written - let calldata = - calculate_calculate_sum_calldata(i * NUM_READS_PER_BLOCK, NUM_READS_PER_BLOCK); - - let _txn_hash = context - .evm_call( - alice.address, - storage_bloater_address, - calldata.clone(), - 0.into(), - EXTRINSIC_GAS_LIMIT.into(), - Some(MIN_GAS_PRICE.into()), - None, // max_priority_fee_per_gas - Some(alice_nonce), - ) - .expect("EVM call failed while trying to call calculate_sum()"); - - // context.create_block(true); - } - - results.push(TestResults::new( - "storage bloat read", - now.elapsed().as_micros(), - 908941, - )); - - Ok(results) - } -} diff --git a/node/perf-test/src/txn_signer.rs b/node/perf-test/src/txn_signer.rs deleted file mode 100644 index 695a19660b..0000000000 --- a/node/perf-test/src/txn_signer.rs +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . - -use sha3::{Digest, Keccak256}; -use sp_core::{H256, U256}; - -use ethereum::{TransactionAction, TransactionSignature, TransactionV0 as Transaction}; -use rlp::*; - -/// Utilities for signing an Ethereum transaction. Taken from frontier's frame-ethereum test mock. - -pub struct UnsignedTransaction { - pub chain_id: u64, - pub nonce: U256, - pub gas_price: U256, - pub gas_limit: U256, - pub action: TransactionAction, - pub value: U256, - pub input: Vec, -} - -impl UnsignedTransaction { - fn signing_rlp_append(&self, s: &mut RlpStream) { - s.begin_list(9); - s.append(&self.nonce); - s.append(&self.gas_price); - s.append(&self.gas_limit); - s.append(&self.action); - s.append(&self.value); - s.append(&self.input); - s.append(&self.chain_id); - s.append(&0u8); - s.append(&0u8); - } - - fn signing_hash(&self) -> H256 { - let mut stream = RlpStream::new(); - self.signing_rlp_append(&mut stream); - H256::from_slice(&Keccak256::digest(&stream.out()).as_slice()) - } - - pub fn sign(&self, key: &H256) -> Transaction { - let hash = self.signing_hash(); - let msg = libsecp256k1::Message::parse(hash.as_fixed_bytes()); - let s = libsecp256k1::sign( - &msg, - &libsecp256k1::SecretKey::parse(&key.0).expect("invalid secret key"), - ); - let sig = s.0.serialize(); - - let sig = TransactionSignature::new( - s.1.serialize() as u64 % 2 + self.chain_id * 2 + 35, - H256::from_slice(&sig[0..32]), - H256::from_slice(&sig[32..64]), - ) - .expect("invalid transaction signature"); - - Transaction { - nonce: self.nonce, - gas_price: self.gas_price, - gas_limit: self.gas_limit, - action: self.action, - value: self.value, - input: self.input.clone(), - signature: sig, - } - } -} diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index bcfbb0112f..c6febac1f9 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -4,19 +4,19 @@ authors = [ "PureStake" ] edition = "2021" homepage = "https://moonbeam.network" license = "GPL-3.0-only" -version = "0.23.0" +version = "0.25.0" [dependencies] ansi_term = "0.12.1" async-io = "1.3" async-trait = "0.1.42" +bip32 = { git = "https://github.com/purestake/crates", branch = "bip32-v0.4.0-fix", default-features = false, features = [ "bip39" ] } derive_more = "0.99" -exit-future = "0.1.4" +exit-future = "0.2" flume = "0.10.9" futures = { version = "0.3.1", features = [ "compat" ] } hex-literal = "0.3.4" -jsonrpc-core = "18.0.0" -jsonrpc-pubsub = "18.0.0" +jsonrpsee = { version = "0.13.0", default-features = false, features = [ "macros", "server" ] } libsecp256k1 = { version = "0.6", features = [ "hmac" ] } log = "0.4" maplit = "1.0.2" @@ -26,7 +26,6 @@ serde_json = "1.0" sha3 = { version = "0.9", default-features = false } structopt = "0.3" tiny-bip39 = { version = "0.8", default-features = false } -tiny-hderive = { version = "0.3.0", default-features = false } tokio = { version = "1.13.0", features = [ "macros", "sync" ] } trie-root = "0.15.2" @@ -41,7 +40,9 @@ moonbeam-rpc-primitives-debug = { path = "../../primitives/rpc/debug" } moonbeam-rpc-primitives-txpool = { path = "../../primitives/rpc/txpool" } moonbeam-rpc-trace = { path = "../../client/rpc/trace" } moonbeam-rpc-txpool = { path = "../../client/rpc/txpool" } -parachain-staking = { path = "../../pallets/parachain-staking" } +moonbeam-vrf = { path = "../../client/vrf" } +pallet-parachain-staking = { path = "../../pallets/parachain-staking" } +session-keys-primitives = { path = "../../primitives/session-keys" } # Moonbeam runtimes moonbase-runtime = { path = "../../runtime/moonbase", optional = true } @@ -49,102 +50,103 @@ moonbeam-runtime = { path = "../../runtime/moonbeam", optional = true } moonriver-runtime = { path = "../../runtime/moonriver", optional = true } # Substrate -frame-system-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-transaction-payment-rpc = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } parity-scale-codec = "3.0.0" -sc-basic-authorship = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-chain-spec = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-cli = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", features = [ "wasmtime" ] } -sc-client-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-client-db = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-consensus = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-consensus-manual-seal = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-executor = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", features = [ "wasmtime" ] } -sc-finality-grandpa = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-informant = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-network = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-rpc = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-rpc-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-service = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-telemetry = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-tracing = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sc-transaction-pool-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-block-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-blockchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-consensus = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-inherents = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-keystore = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-offchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-session = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-storage = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-trie = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -substrate-frame-rpc-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -substrate-prometheus-endpoint = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", features = [ "wasmtime" ] } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-client-db = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", features = [ "wasmtime" ] } +sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-informant = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-trie = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } # Frontier -fc-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-db = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-mapping-sync = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", features = [ "rpc_binary_search_estimate" ] } -fc-rpc-core = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fp-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -fp-storage = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } -pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19" } +fc-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fc-db = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fc-mapping-sync = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fc-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", features = [ "rpc_binary_search_estimate" ] } +fc-rpc-core = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fp-consensus = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +fp-storage = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } # Cumulus / Nimbus -cumulus-client-cli = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-client-collator = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-client-consensus-common = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-client-consensus-relay-chain = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-client-network = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-client-service = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-relay-chain-inprocess-interface = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-relay-chain-interface = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-relay-chain-rpc-interface = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } -nimbus-consensus = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19" } +cumulus-client-cli = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-client-collator = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-client-consensus-common = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-client-consensus-relay-chain = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-client-network = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-client-service = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-relay-chain-interface = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-relay-chain-rpc-interface = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } +nimbus-consensus = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23" } # TODO we should be able to depend only on the primitives crate once we move the inherent data provider there. -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19" } -pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19" } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23" } +pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23" } # Polkadot -polkadot-cli = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -polkadot-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -polkadot-service = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +polkadot-cli = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +polkadot-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +polkadot-service = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Benchmarking -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -frame-benchmarking-cli = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [dev-dependencies] assert_cmd = "0.12" -nix = "0.17" +nix = "0.23" prometheus = { version = "0.13.0", default-features = false } rand = "0.7.3" # Polkadot dev-dependencies -polkadot-runtime-common = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +polkadot-runtime-common = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } # Substrate dev-dependencies -pallet-sudo = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -substrate-test-client = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -substrate-test-runtime-client = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-sudo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +substrate-test-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +substrate-test-runtime-client = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [build-dependencies] -substrate-build-script-utils = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ @@ -176,6 +178,10 @@ runtime-benchmarks = [ "pallet-ethereum/runtime-benchmarks", ] +try-runtime = [ + "moonbase-runtime", + "moonbase-runtime/try-runtime", +] moonbase-runtime-benchmarks = [ "moonbase-native", @@ -183,8 +189,3 @@ moonbase-runtime-benchmarks = [ "moonbase-runtime/runtime-benchmarks", "pallet-ethereum/runtime-benchmarks", ] - -try-runtime = [ - "moonbase-runtime", - "moonbase-runtime/try-runtime", -] diff --git a/node/service/src/chain_spec/mod.rs b/node/service/src/chain_spec/mod.rs index a94f47a684..4ed78bf409 100644 --- a/node/service/src/chain_spec/mod.rs +++ b/node/service/src/chain_spec/mod.rs @@ -13,14 +13,16 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . +use bip32::ExtendedPrivateKey; use bip39::{Language, Mnemonic, Seed}; +use cli_opt::account_key::Secp256k1SecretKey; +use libsecp256k1::{PublicKey, PublicKeyFormat}; use log::debug; pub use moonbeam_core_primitives::AccountId; use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}; use serde::{Deserialize, Serialize}; use sha3::{Digest, Keccak256}; use sp_core::{ecdsa, Pair, Public, H160, H256}; -use tiny_hderive::bip32::ExtendedPrivKey; pub mod fake_spec; #[cfg(feature = "moonbase-native")] @@ -94,11 +96,16 @@ pub fn derive_bip44_pairs_from_mnemonic( let mut childs = Vec::new(); for i in 0..num_accounts { - if let Some(child_pair) = - ExtendedPrivKey::derive(seed.as_bytes(), format!("m/44'/60'/0'/0/{}", i).as_ref()) - .ok() - .and_then(|account| TPublic::Pair::from_seed_slice(&account.secret()).ok()) - { + if let Some(child_pair) = format!("m/44'/60'/0'/0/{}", i) + .parse() + .ok() + .and_then(|derivation_path| { + ExtendedPrivateKey::::derive_from_path(&seed, &derivation_path) + .ok() + }) + .and_then(|extended| { + TPublic::Pair::from_seed_slice(&extended.private_key().0.serialize()).ok() + }) { childs.push(child_pair); } else { log::error!("An error ocurred while deriving key {} from parent", i) @@ -109,12 +116,9 @@ pub fn derive_bip44_pairs_from_mnemonic( /// Helper function to get an `AccountId` from an ECDSA Key Pair. pub fn get_account_id_from_pair(pair: ecdsa::Pair) -> Option { - let decompressed = libsecp256k1::PublicKey::parse_slice( - &pair.public().0, - Some(libsecp256k1::PublicKeyFormat::Compressed), - ) - .ok()? - .serialize(); + let decompressed = PublicKey::parse_slice(&pair.public().0, Some(PublicKeyFormat::Compressed)) + .ok()? + .serialize(); let mut m = [0u8; 64]; m.copy_from_slice(&decompressed[1..65]); diff --git a/node/service/src/chain_spec/moonbase.rs b/node/service/src/chain_spec/moonbase.rs index dc56628d6a..2f09945d61 100644 --- a/node/service/src/chain_spec/moonbase.rs +++ b/node/service/src/chain_spec/moonbase.rs @@ -136,7 +136,7 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { get_from_seed::("Alice"), 1_000 * UNIT, ), - // Bob -> Baltithar + // Bob -> Baltathar ( AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), get_from_seed::("Bob"), @@ -145,9 +145,12 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { ], // Delegations vec![], + // Endowed: Alith, Baltathar, Charleth and Dorothy vec![ AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), + AccountId::from(hex!("798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc")), + AccountId::from(hex!("773539d4Ac0e786233D90A233654ccEE26a613D9")), ], 3_000_000 * UNIT, para_id, @@ -179,11 +182,14 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { pub fn moonbeam_inflation_config() -> InflationInfo { fn to_round_inflation(annual: Range) -> Range { - use parachain_staking::inflation::{perbill_annual_to_perbill_round, BLOCKS_PER_YEAR}; + use pallet_parachain_staking::inflation::{ + perbill_annual_to_perbill_round, BLOCKS_PER_YEAR, + }; perbill_annual_to_perbill_round( annual, // rounds per year - BLOCKS_PER_YEAR / moonbase_runtime::get!(parachain_staking, DefaultBlocksPerRound, u32), + BLOCKS_PER_YEAR + / moonbase_runtime::get!(pallet_parachain_staking, DefaultBlocksPerRound, u32), ) } let annual = Range { diff --git a/node/service/src/chain_spec/moonbeam.rs b/node/service/src/chain_spec/moonbeam.rs index d7da6a07f2..5979ff0d80 100644 --- a/node/service/src/chain_spec/moonbeam.rs +++ b/node/service/src/chain_spec/moonbeam.rs @@ -112,11 +112,13 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { ChainType::Local, move || { testnet_genesis( + // Council members: Baltathar, Charleth and Dorothy vec![ AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), AccountId::from(hex!("798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc")), AccountId::from(hex!("773539d4Ac0e786233D90A233654ccEE26a613D9")), ], + // Tech comitee members: Alith and Baltathar vec![ AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), @@ -129,7 +131,7 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { get_from_seed::("Alice"), 1_000 * GLMR * SUPPLY_FACTOR, ), - // Bob -> Baltithar + // Bob -> Baltathar ( AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), get_from_seed::("Bob"), @@ -138,9 +140,12 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { ], // Delegations vec![], + // Endowed: Alith, Baltathar, Charleth and Dorothy vec![ AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), + AccountId::from(hex!("798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc")), + AccountId::from(hex!("773539d4Ac0e786233D90A233654ccEE26a613D9")), ], 1_500_000 * GLMR * SUPPLY_FACTOR, para_id, @@ -172,11 +177,13 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { pub fn moonbeam_inflation_config() -> InflationInfo { fn to_round_inflation(annual: Range) -> Range { - use parachain_staking::inflation::{perbill_annual_to_perbill_round, BLOCKS_PER_YEAR}; + use pallet_parachain_staking::inflation::{ + perbill_annual_to_perbill_round, BLOCKS_PER_YEAR, + }; perbill_annual_to_perbill_round( annual, // rounds per year - BLOCKS_PER_YEAR / get!(parachain_staking, DefaultBlocksPerRound, u32), + BLOCKS_PER_YEAR / get!(pallet_parachain_staking, DefaultBlocksPerRound, u32), ) } let annual = Range { diff --git a/node/service/src/chain_spec/moonriver.rs b/node/service/src/chain_spec/moonriver.rs index da41a052a3..267b366f02 100644 --- a/node/service/src/chain_spec/moonriver.rs +++ b/node/service/src/chain_spec/moonriver.rs @@ -130,7 +130,7 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { get_from_seed::("Alice"), 1_000 * MOVR, ), - // Bob -> Baltithar + // Bob -> Baltathar ( AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), get_from_seed::("Bob"), @@ -139,9 +139,12 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { ], // Delegations vec![], + // Endowed: Alith, Baltathar, Charleth and Dorothy vec![ AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), + AccountId::from(hex!("798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc")), + AccountId::from(hex!("773539d4Ac0e786233D90A233654ccEE26a613D9")), ], 3_000_000 * MOVR, para_id, @@ -173,12 +176,14 @@ pub fn get_chain_spec(para_id: ParaId) -> ChainSpec { pub fn moonbeam_inflation_config() -> InflationInfo { fn to_round_inflation(annual: Range) -> Range { - use parachain_staking::inflation::{perbill_annual_to_perbill_round, BLOCKS_PER_YEAR}; + use pallet_parachain_staking::inflation::{ + perbill_annual_to_perbill_round, BLOCKS_PER_YEAR, + }; perbill_annual_to_perbill_round( annual, // rounds per year BLOCKS_PER_YEAR - / moonriver_runtime::get!(parachain_staking, DefaultBlocksPerRound, u32), + / moonriver_runtime::get!(pallet_parachain_staking, DefaultBlocksPerRound, u32), ) } let annual = Range { diff --git a/node/service/src/chain_spec/test_spec.rs b/node/service/src/chain_spec/test_spec.rs index 5440b86320..f852902388 100644 --- a/node/service/src/chain_spec/test_spec.rs +++ b/node/service/src/chain_spec/test_spec.rs @@ -62,8 +62,13 @@ pub fn staking_spec(para_id: ParaId) -> ChainSpec { vec![], // Endowed accounts (each minted 1 << 80 balance) vec![ + // Alith, Baltathar, Charleth, Dorothy and Faith AccountId::from(hex!("6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b")), + AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), + AccountId::from(hex!("798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc")), + AccountId::from(hex!("773539d4Ac0e786233D90A233654ccEE26a613D9")), AccountId::from(hex!("C0F0f4ab324C46e55D02D0033343B4Be8A55532d")), + // Additional accounts AccountId::from(hex!("Ff64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB")), AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), ], diff --git a/node/service/src/client.rs b/node/service/src/client.rs index 686e8a5182..b2f3f0b33c 100644 --- a/node/service/src/client.rs +++ b/node/service/src/client.rs @@ -46,6 +46,7 @@ pub trait RuntimeApiCollection: + nimbus_primitives::NimbusApi + nimbus_primitives::AuthorFilterAPI + cumulus_primitives_core::CollectCollationInfo + + session_keys_primitives::VrfApi where >::StateBackend: sp_api::StateBackend, { @@ -67,7 +68,8 @@ where + moonbeam_rpc_primitives_txpool::TxPoolRuntimeApi + nimbus_primitives::NimbusApi + nimbus_primitives::AuthorFilterAPI - + cumulus_primitives_core::CollectCollationInfo, + + cumulus_primitives_core::CollectCollationInfo + + session_keys_primitives::VrfApi, >::StateBackend: sp_api::StateBackend, { } @@ -269,6 +271,10 @@ impl sc_client_api::BlockBackend for Client { ) -> sp_blockchain::Result { match_client!(self, has_indexed_transaction(hash)) } + + fn requires_full_sync(&self) -> bool { + match_client!(self, requires_full_sync()) + } } impl sc_client_api::StorageProvider for Client { diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index fc2291fb67..de12749892 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -24,6 +24,7 @@ use cli_opt::{EthApi as EthApiCmd, RpcConfig}; use fc_consensus::FrontierBlockImport; +use fc_db::DatabaseSource; use fc_rpc_core::types::{FeeHistoryCache, FilterPool}; use futures::StreamExt; use maplit::hashmap; @@ -186,7 +187,7 @@ impl IdentifyVariant for Box { } } -pub fn frontier_database_dir(config: &Configuration) -> std::path::PathBuf { +pub fn frontier_database_dir(config: &Configuration, path: &str) -> std::path::PathBuf { let config_dir = config .base_path .as_ref() @@ -194,7 +195,7 @@ pub fn frontier_database_dir(config: &Configuration) -> std::path::PathBuf { .unwrap_or_else(|| { BasePath::from_project("", "", "moonbeam").config_dir(config.chain_spec.id()) }); - config_dir.join("frontier").join("db") + config_dir.join("frontier").join(path) } // TODO This is copied from frontier. It should be imported instead after @@ -202,9 +203,22 @@ pub fn frontier_database_dir(config: &Configuration) -> std::path::PathBuf { pub fn open_frontier_backend(config: &Configuration) -> Result>, String> { Ok(Arc::new(fc_db::Backend::::new( &fc_db::DatabaseSettings { - source: fc_db::DatabaseSettingsSrc::RocksDb { - path: frontier_database_dir(&config), - cache_size: 0, + source: match config.database { + DatabaseSource::RocksDb { .. } => DatabaseSource::RocksDb { + path: frontier_database_dir(config, "db"), + cache_size: 0, + }, + DatabaseSource::ParityDb { .. } => DatabaseSource::ParityDb { + path: frontier_database_dir(config, "paritydb"), + }, + DatabaseSource::Auto { .. } => DatabaseSource::Auto { + rocksdb_path: frontier_database_dir(config, "db"), + paritydb_path: frontier_database_dir(config, "paritydb"), + cache_size: 0, + }, + _ => { + return Err("Supported db sources: `rocksdb` | `paritydb` | `auto`".to_string()) + } }, }, )?)) @@ -331,6 +345,9 @@ where { set_prometheus_registry(config)?; + // Use ethereum style for subscription ids + config.rpc_id_provider = Some(Box::new(fc_rpc::EthereumSubIdProvider)); + let telemetry = config .telemetry_endpoints .clone() @@ -431,6 +448,7 @@ async fn start_node_impl( polkadot_config: Configuration, id: polkadot_primitives::v2::Id, rpc_config: RpcConfig, + hwbench: Option, build_consensus: BIC, ) -> sc_service::error::Result<(TaskManager, Arc>)> where @@ -481,6 +499,7 @@ where ¶chain_config, telemetry_worker_handle, &mut task_manager, + None, ) .map_err(|e| match e { RelayChainError::ServiceError(polkadot_service::Error::Sub(x)) => x, @@ -507,8 +526,6 @@ where warp_sync: None, })?; - let subscription_task_executor = - sc_rpc::SubscriptionTaskExecutor::new(task_manager.spawn_handle()); let overrides = crate::rpc::overrides_handle(client.clone()); let fee_history_limit = rpc_config.fee_history_limit; @@ -549,8 +566,8 @@ where let block_data_cache = Arc::new(fc_rpc::EthBlockDataCacheTask::new( task_manager.spawn_handle(), overrides.clone(), - rpc_config.eth_log_block_cache as u64, - rpc_config.eth_statuses_cache as u64, + rpc_config.eth_log_block_cache, + rpc_config.eth_statuses_cache, prometheus_registry.clone(), )); @@ -558,7 +575,7 @@ where // save param `relay_chain_rpc_url` to be able to use it later. let relay_chain_rpc_url = rpc_config.relay_chain_rpc_url.clone(); - let rpc_extensions_builder = { + let rpc_builder = { let client = client.clone(); let pool = transaction_pool.clone(); let network = network.clone(); @@ -571,7 +588,7 @@ where let fee_history_cache = fee_history_cache.clone(); let block_data_cache = block_data_cache.clone(); - Box::new(move |deny_unsafe, _| { + move |deny_unsafe, subscription_task_executor| { let deps = rpc::FullDeps { backend: backend.clone(), client: client.clone(), @@ -591,22 +608,24 @@ where block_data_cache: block_data_cache.clone(), overrides: overrides.clone(), }; - #[allow(unused_mut)] - let mut io = rpc::create_full(deps, subscription_task_executor.clone()); if ethapi_cmd.contains(&EthApiCmd::Debug) || ethapi_cmd.contains(&EthApiCmd::Trace) { - rpc::tracing::extend_with_tracing( - client.clone(), - tracing_requesters.clone(), - rpc_config.ethapi_trace_max_count, - &mut io, - ); + rpc::create_full( + deps, + subscription_task_executor, + Some(crate::rpc::TracingConfig { + tracing_requesters: tracing_requesters.clone(), + trace_filter_max_count: rpc_config.ethapi_trace_max_count, + }), + ) + .map_err(Into::into) + } else { + rpc::create_full(deps, subscription_task_executor, None).map_err(Into::into) } - Ok(io) - }) + } }; sc_service::spawn_tasks(sc_service::SpawnTasksParams { - rpc_extensions_builder, + rpc_builder: Box::new(rpc_builder), client: client.clone(), transaction_pool: transaction_pool.clone(), task_manager: &mut task_manager, @@ -618,6 +637,19 @@ where telemetry: telemetry.as_mut(), })?; + if let Some(hwbench) = hwbench { + sc_sysinfo::print_hwbench(&hwbench); + + if let Some(ref mut telemetry) = telemetry { + let telemetry_handle = telemetry.handle(); + task_manager.spawn_handle().spawn( + "telemetry_hwbench", + None, + sc_sysinfo::initialize_hwbench_telemetry(telemetry_handle, hwbench), + ); + } + } + let announce_block = { let network = network.clone(); Arc::new(move |hash, data| network.announce_block(hash, data)) @@ -687,6 +719,7 @@ pub async fn start_node( polkadot_config: Configuration, id: polkadot_primitives::v2::Id, rpc_config: RpcConfig, + hwbench: Option, ) -> sc_service::error::Result<(TaskManager, Arc>)> where RuntimeApi: @@ -700,6 +733,7 @@ where polkadot_config, id, rpc_config, + hwbench, | client, prometheus_registry, @@ -720,7 +754,7 @@ where ); proposer_factory.set_soft_deadline(SOFT_DEADLINE_PERCENT); - let provider = move |_, (relay_parent, validation_data, author_id)| { + let provider = move |_, (relay_parent, validation_data, _author_id)| { let relay_chain_interface = relay_chain_interface.clone(); async move { let parachain_inherent = @@ -740,11 +774,24 @@ where ) })?; - let author = nimbus_primitives::InherentDataProvider::(author_id); + let author = nimbus_primitives::InherentDataProvider; + + let randomness = session_keys_primitives::InherentDataProvider; - Ok((time, parachain_inherent, author)) + Ok((time, parachain_inherent, author, randomness)) } }; + let client_clone = client.clone(); + let keystore_clone = keystore.clone(); + let maybe_provide_vrf_digest = move |nimbus_id: NimbusId, parent: Hash| + -> Option { + moonbeam_vrf::vrf_pre_digest::>( + &client_clone, + &keystore_clone, + nimbus_id, + parent, + ) + }; Ok(NimbusConsensus::build(BuildNimbusConsensusParams { para_id: id, @@ -754,6 +801,7 @@ where keystore, skip_prediction: force_authoring, create_inherent_data_providers: provider, + additional_digests_provider: maybe_provide_vrf_digest, })) }, ) @@ -764,9 +812,10 @@ where /// the parachain inherent. pub fn new_dev( mut config: Configuration, - _author_id: Option, + _author_id: Option, sealing: cli_opt::Sealing, rpc_config: RpcConfig, + hwbench: Option, ) -> Result where RuntimeApi: @@ -792,7 +841,7 @@ where ( block_import, filter_pool, - telemetry, + mut telemetry, _telemetry_worker_handle, frontier_backend, fee_history_cache, @@ -820,8 +869,6 @@ where } let prometheus_registry = config.prometheus_registry().cloned(); - let subscription_task_executor = - sc_rpc::SubscriptionTaskExecutor::new(task_manager.spawn_handle()); let overrides = crate::rpc::overrides_handle(client.clone()); let fee_history_limit = rpc_config.fee_history_limit; let mut command_sink = None; @@ -884,6 +931,18 @@ where let (hrmp_xcm_sender, hrmp_xcm_receiver) = flume::bounded::<(ParaId, Vec)>(100); xcm_senders = Some((downward_xcm_sender, hrmp_xcm_sender)); + let client_clone = client.clone(); + let keystore_clone = keystore_container.sync_keystore().clone(); + let maybe_provide_vrf_digest = + move |nimbus_id: NimbusId, parent: Hash| -> Option { + moonbeam_vrf::vrf_pre_digest::>( + &client_clone, + &keystore_clone, + nimbus_id, + parent, + ) + }; + task_manager.spawn_essential_handle().spawn_blocking( "authorship_task", Some("block-authoring"), @@ -897,6 +956,7 @@ where consensus_data_provider: Some(Box::new(NimbusManualSealConsensusDataProvider { keystore: keystore_container.sync_keystore(), client: client.clone(), + additional_digests_provider: maybe_provide_vrf_digest, })), create_inherent_data_providers: move |block: H256, ()| { let current_para_block = client_set_aside_for_cidp @@ -925,7 +985,9 @@ where raw_horizontal_messages: hrmp_xcm_receiver.drain().collect(), }; - Ok((time, mocked_parachain)) + let randomness = session_keys_primitives::InherentDataProvider; + + Ok((time, mocked_parachain, randomness)) } }, }), @@ -967,12 +1029,12 @@ where let block_data_cache = Arc::new(fc_rpc::EthBlockDataCacheTask::new( task_manager.spawn_handle(), overrides.clone(), - rpc_config.eth_log_block_cache as u64, - rpc_config.eth_statuses_cache as u64, + rpc_config.eth_log_block_cache, + rpc_config.eth_statuses_cache, prometheus_registry, )); - let rpc_extensions_builder = { + let rpc_builder = { let client = client.clone(); let pool = transaction_pool.clone(); let backend = backend.clone(); @@ -983,7 +1045,7 @@ where let fee_history_cache = fee_history_cache.clone(); let block_data_cache = block_data_cache.clone(); - Box::new(move |deny_unsafe, _| { + move |deny_unsafe, subscription_task_executor| { let deps = rpc::FullDeps { backend: backend.clone(), client: client.clone(), @@ -1003,18 +1065,21 @@ where overrides: overrides.clone(), block_data_cache: block_data_cache.clone(), }; - #[allow(unused_mut)] - let mut io = rpc::create_full(deps, subscription_task_executor.clone()); + if ethapi_cmd.contains(&EthApiCmd::Debug) || ethapi_cmd.contains(&EthApiCmd::Trace) { - rpc::tracing::extend_with_tracing( - client.clone(), - tracing_requesters.clone(), - rpc_config.ethapi_trace_max_count, - &mut io, - ); + rpc::create_full( + deps, + subscription_task_executor, + Some(crate::rpc::TracingConfig { + tracing_requesters: tracing_requesters.clone(), + trace_filter_max_count: rpc_config.ethapi_trace_max_count, + }), + ) + .map_err(Into::into) + } else { + rpc::create_full(deps, subscription_task_executor, None).map_err(Into::into) } - Ok(io) - }) + } }; let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { @@ -1023,13 +1088,26 @@ where keystore: keystore_container.sync_keystore(), task_manager: &mut task_manager, transaction_pool, - rpc_extensions_builder, + rpc_builder: Box::new(rpc_builder), backend, system_rpc_tx, config, telemetry: None, })?; + if let Some(hwbench) = hwbench { + sc_sysinfo::print_hwbench(&hwbench); + + if let Some(ref mut telemetry) = telemetry { + let telemetry_handle = telemetry.handle(); + task_manager.spawn_handle().spawn( + "telemetry_hwbench", + None, + sc_sysinfo::initialize_hwbench_telemetry(telemetry_handle, hwbench), + ); + } + } + log::info!("Development Service Ready"); network_starter.start_network(); @@ -1169,12 +1247,16 @@ mod tests { wasm_runtime_overrides: Default::default(), execution_strategies: Default::default(), rpc_http: None, + rpc_id_provider: None, rpc_ipc: None, rpc_ws: None, rpc_ws_max_connections: None, rpc_cors: None, rpc_methods: Default::default(), rpc_max_payload: None, + rpc_max_request_size: None, + rpc_max_response_size: None, + rpc_max_subs_per_conn: None, ws_max_out_buffer_capacity: None, prometheus_config: None, telemetry_endpoints: None, diff --git a/node/service/src/rpc.rs b/node/service/src/rpc.rs index 417bb8c62e..10be293980 100644 --- a/node/service/src/rpc.rs +++ b/node/service/src/rpc.rs @@ -28,26 +28,20 @@ use cli_opt::EthApi as EthApiCmd; use cumulus_primitives_core::ParaId; use fc_mapping_sync::{MappingSyncWorker, SyncStrategy}; use fc_rpc::{ - EthApi, EthApiServer, EthBlockDataCacheTask, EthFilterApi, EthFilterApiServer, EthPubSubApi, - EthPubSubApiServer, EthTask, HexEncodedIdProvider, NetApi, NetApiServer, OverrideHandle, - RuntimeApiStorageOverride, SchemaV1Override, SchemaV2Override, SchemaV3Override, - StorageOverride, Web3Api, Web3ApiServer, + EthBlockDataCacheTask, EthTask, OverrideHandle, RuntimeApiStorageOverride, SchemaV1Override, + SchemaV2Override, SchemaV3Override, StorageOverride, }; use fc_rpc_core::types::{FeeHistoryCache, FilterPool}; use fp_storage::EthereumStorageSchema; use futures::StreamExt; -use jsonrpc_pubsub::manager::SubscriptionManager; -use manual_xcm_rpc::{ManualXcm, ManualXcmApi}; +use jsonrpsee::RpcModule; use moonbeam_core_primitives::{Block, Hash}; -use moonbeam_finality_rpc::{MoonbeamFinality, MoonbeamFinalityApi}; -use moonbeam_rpc_txpool::{TxPool, TxPoolServer}; -use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi}; use sc_client_api::{ backend::{AuxStore, Backend, StateBackend, StorageProvider}, client::BlockchainEvents, BlockOf, }; -use sc_consensus_manual_seal::rpc::{EngineCommand, ManualSeal, ManualSealApi}; +use sc_consensus_manual_seal::rpc::{EngineCommand, ManualSeal, ManualSealApiServer}; use sc_network::NetworkService; use sc_rpc::SubscriptionTaskExecutor; use sc_rpc_api::DenyUnsafe; @@ -61,7 +55,6 @@ use sp_blockchain::{ use sp_core::H256; use sp_runtime::traits::{BlakeTwo256, Block as BlockT}; use std::collections::BTreeMap; -use substrate_frame_rpc_system::{FullSystem, SystemApi}; /// Full client dependencies. pub struct FullDeps { @@ -101,6 +94,11 @@ pub struct FullDeps { pub block_data_cache: Arc>, } +pub struct TracingConfig { + pub tracing_requesters: crate::rpc::tracing::RpcRequesters, + pub trace_filter_max_count: u32, +} + pub fn overrides_handle(client: Arc) -> Arc> where C: ProvideRuntimeApi + StorageProvider + AuxStore, @@ -137,7 +135,8 @@ where pub fn create_full( deps: FullDeps, subscription_task_executor: SubscriptionTaskExecutor, -) -> jsonrpc_core::IoHandler + maybe_tracing_config: Option, +) -> Result, Box> where BE: Backend + 'static, BE::State: StateBackend, @@ -150,7 +149,19 @@ where C::Api: RuntimeApiCollection, P: TransactionPool + 'static, { - let mut io = jsonrpc_core::IoHandler::default(); + use fc_rpc::{ + Eth, EthApiServer, EthFilter, EthFilterApiServer, EthPubSub, EthPubSubApiServer, Net, + NetApiServer, Web3, Web3ApiServer, + }; + use manual_xcm_rpc::{ManualXcm, ManualXcmApiServer}; + use moonbeam_finality_rpc::{MoonbeamFinality, MoonbeamFinalityApiServer}; + use moonbeam_rpc_debug::{Debug, DebugServer}; + use moonbeam_rpc_trace::{Trace, TraceServer}; + use moonbeam_rpc_txpool::{TxPool, TxPoolServer}; + use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; + use substrate_frame_rpc_system::{System, SystemApiServer}; + + let mut io = RpcModule::new(()); let FullDeps { client, pool, @@ -171,14 +182,9 @@ where block_data_cache, } = deps; - io.extend_with(SystemApi::to_delegate(FullSystem::new( - client.clone(), - pool.clone(), - deny_unsafe, - ))); - io.extend_with(TransactionPaymentApi::to_delegate(TransactionPayment::new( - client.clone(), - ))); + io.merge(System::new(Arc::clone(&client), Arc::clone(&pool), deny_unsafe).into_rpc())?; + io.merge(TransactionPayment::new(Arc::clone(&client)).into_rpc())?; + // TODO: are we supporting signing? let signers = Vec::new(); @@ -193,77 +199,102 @@ where } let convert_transaction: Option = None; - io.extend_with(EthApiServer::to_delegate(EthApi::new( - client.clone(), - pool.clone(), - graph.clone(), - convert_transaction, - network.clone(), - signers, - overrides.clone(), - frontier_backend.clone(), - is_authority, - block_data_cache.clone(), - fc_rpc::format::Geth, - fee_history_limit, - fee_history_cache, - ))); + io.merge( + Eth::new( + Arc::clone(&client), + Arc::clone(&pool), + graph.clone(), + convert_transaction, + Arc::clone(&network), + signers, + Arc::clone(&overrides), + Arc::clone(&frontier_backend), + is_authority, + Arc::clone(&block_data_cache), + fc_rpc::format::Geth, + fee_history_cache, + fee_history_limit, + ) + .into_rpc(), + )?; if let Some(filter_pool) = filter_pool { - io.extend_with(EthFilterApiServer::to_delegate(EthFilterApi::new( - client.clone(), - frontier_backend.clone(), - filter_pool, - 500_usize, // max stored filters - max_past_logs, - block_data_cache.clone(), - ))); + io.merge( + EthFilter::new( + client.clone(), + frontier_backend.clone(), + filter_pool, + 500_usize, // max stored filters + max_past_logs, + block_data_cache.clone(), + ) + .into_rpc(), + )?; } - io.extend_with(NetApiServer::to_delegate(NetApi::new( - client.clone(), - network.clone(), - true, - ))); - io.extend_with(Web3ApiServer::to_delegate(Web3Api::new(client.clone()))); - io.extend_with(EthPubSubApiServer::to_delegate(EthPubSubApi::new( - pool, - client.clone(), - network, - SubscriptionManager::::with_id_provider( - HexEncodedIdProvider::default(), - Arc::new(subscription_task_executor), - ), - overrides, - ))); - if ethapi_cmd.contains(&EthApiCmd::Txpool) { - io.extend_with(TxPoolServer::to_delegate(TxPool::new( + io.merge( + Net::new( Arc::clone(&client), - graph, - ))); + network.clone(), + // Whether to format the `peer_count` response as Hex (default) or not. + true, + ) + .into_rpc(), + )?; + + io.merge(Web3::new(Arc::clone(&client)).into_rpc())?; + io.merge( + EthPubSub::new( + pool, + Arc::clone(&client), + network, + subscription_task_executor, + overrides, + ) + .into_rpc(), + )?; + if ethapi_cmd.contains(&EthApiCmd::Txpool) { + io.merge(TxPool::new(Arc::clone(&client), graph).into_rpc())?; } - io.extend_with(MoonbeamFinalityApi::to_delegate(MoonbeamFinality::new( - client.clone(), - frontier_backend.clone(), - ))); + io.merge(MoonbeamFinality::new(client.clone(), frontier_backend.clone()).into_rpc())?; if let Some(command_sink) = command_sink { - io.extend_with( + io.merge( // We provide the rpc handler with the sending end of the channel to allow the rpc // send EngineCommands to the background block authorship task. - ManualSealApi::to_delegate(ManualSeal::new(command_sink)), - ); + ManualSeal::new(command_sink).into_rpc(), + )?; }; if let Some((downward_message_channel, hrmp_message_channel)) = xcm_senders { - io.extend_with(ManualXcmApi::to_delegate(ManualXcm { - downward_message_channel, - hrmp_message_channel, - })); + io.merge( + ManualXcm { + downward_message_channel, + hrmp_message_channel, + } + .into_rpc(), + )?; + } + + if let Some(tracing_config) = maybe_tracing_config { + if let Some(trace_filter_requester) = tracing_config.tracing_requesters.trace { + io.merge( + Trace::new( + client, + trace_filter_requester, + tracing_config.trace_filter_max_count, + ) + .into_rpc(), + )?; + } + + if let Some(debug_requester) = tracing_config.tracing_requesters.debug { + io.merge(Debug::new(debug_requester).into_rpc())?; + } } - io + Ok(io) } pub struct SpawnTasksParams<'a, B: BlockT, C, BE> { diff --git a/node/service/src/rpc/tracing.rs b/node/service/src/rpc/tracing.rs index 2a630400a2..66da891985 100644 --- a/node/service/src/rpc/tracing.rs +++ b/node/service/src/rpc/tracing.rs @@ -16,11 +16,8 @@ use super::*; -use moonbeam_rpc_debug::DebugHandler; -use moonbeam_rpc_debug::{Debug, DebugRequester, DebugServer}; -use moonbeam_rpc_trace::{ - CacheRequester as TraceFilterCacheRequester, CacheTask, Trace, TraceServer, -}; +use moonbeam_rpc_debug::{DebugHandler, DebugRequester}; +use moonbeam_rpc_trace::{CacheRequester as TraceFilterCacheRequester, CacheTask}; use tokio::sync::Semaphore; #[derive(Clone)] @@ -29,34 +26,6 @@ pub struct RpcRequesters { pub trace: Option, } -pub fn extend_with_tracing( - client: Arc, - requesters: RpcRequesters, - trace_filter_max_count: u32, - io: &mut jsonrpc_core::IoHandler, -) where - BE: Backend + 'static, - BE::State: StateBackend, - BE::Blockchain: BlockchainBackend, - C: ProvideRuntimeApi + StorageProvider + AuxStore, - C: BlockchainEvents, - C: HeaderBackend + HeaderMetadata + 'static, - C: Send + Sync + 'static, - C::Api: RuntimeApiCollection, -{ - if let Some(trace_filter_requester) = requesters.trace { - io.extend_with(TraceServer::to_delegate(Trace::new( - client, - trace_filter_requester, - trace_filter_max_count, - ))); - } - - if let Some(debug_requester) = requesters.debug { - io.extend_with(DebugServer::to_delegate(Debug::new(debug_requester))); - } -} - // Spawn the tasks that are required to run a Moonbeam tracing node. pub fn spawn_tracing_tasks( rpc_config: &cli_opt::RpcConfig, @@ -98,6 +67,7 @@ where Arc::clone(¶ms.frontier_backend), Arc::clone(&permit_pool), Arc::clone(¶ms.overrides), + rpc_config.tracing_raw_max_memory_usage, ); (Some(debug_task), Some(debug_requester)) } else { diff --git a/node/src/tests.rs b/node/src/tests.rs index f61661ff6a..0ef76bef72 100644 --- a/node/src/tests.rs +++ b/node/src/tests.rs @@ -172,6 +172,7 @@ fn export_genesis_state() { assert_eq!(expected, hex::encode(output.stdout.as_slice())) } +#[ignore] #[test] #[cfg(unix)] fn export_current_state() { diff --git a/pallets/asset-manager/Cargo.toml b/pallets/asset-manager/Cargo.toml index 9b4bacf749..210fb9732e 100644 --- a/pallets/asset-manager/Cargo.toml +++ b/pallets/asset-manager/Cargo.toml @@ -12,23 +12,23 @@ serde = { version = "1.0.124", optional = true } xcm-primitives = { path = "../../primitives/xcm/", default-features = false } # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Polkadot -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Benchmarks -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } [dev-dependencies] -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/pallets/asset-manager/src/lib.rs b/pallets/asset-manager/src/lib.rs index 60d4324cc3..929bc29399 100644 --- a/pallets/asset-manager/src/lib.rs +++ b/pallets/asset-manager/src/lib.rs @@ -680,7 +680,7 @@ pub mod pallet { impl Pallet { /// The account ID of AssetManager pub fn account_id() -> T::AccountId { - PALLET_ID.into_account() + PALLET_ID.into_account_truncating() } } } diff --git a/pallets/asset-manager/src/migrations.rs b/pallets/asset-manager/src/migrations.rs index ce082f592e..e48133480e 100644 --- a/pallets/asset-manager/src/migrations.rs +++ b/pallets/asset-manager/src/migrations.rs @@ -1,4 +1,4 @@ -// Copyright 2019-2021 PureStake Inc. +// Copyright 2019-2022 PureStake Inc. // This file is part of Moonbeam. // Moonbeam is free software: you can redistribute it and/or modify diff --git a/pallets/author-mapping/Cargo.toml b/pallets/author-mapping/Cargo.toml index 6a9cf0406a..8ee00ea26c 100644 --- a/pallets/author-mapping/Cargo.toml +++ b/pallets/author-mapping/Cargo.toml @@ -7,26 +7,26 @@ version = "2.0.5" [dependencies] log = { version = "0.4", default-features = false } -serde = { version = "1.0.101", optional = true } +serde = { version = "1.0.124", optional = true } # Substrate -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Nimbus -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } session-keys-primitives = { path = "../../primitives/session-keys", default-features = false } [dev-dependencies] -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/pallets/author-mapping/src/benchmarks.rs b/pallets/author-mapping/src/benchmarks.rs index 0724a61de9..06a2f102d6 100644 --- a/pallets/author-mapping/src/benchmarks.rs +++ b/pallets/author-mapping/src/benchmarks.rs @@ -17,7 +17,7 @@ #![cfg(feature = "runtime-benchmarks")] //! Benchmarking -use crate::{BalanceOf, Call, Config, Pallet}; +use crate::{keys_wrapper, BalanceOf, Call, Config, Pallet}; use frame_benchmarking::{account, benchmarks, impl_benchmark_test_suite}; use frame_support::{ assert_ok, @@ -79,14 +79,19 @@ benchmarks! { assert_eq!(Pallet::::account_id_of(&first_id), None); } - register_keys { + remove_keys { let caller = create_funded_user::(); let id = nimbus_id(1u8); - let key: T::Keys = nimbus_id(2u8).into(); - }: _(RawOrigin::Signed(caller.clone()), id.clone(), key.clone()) + let keys: T::Keys = nimbus_id(3u8).into(); + assert_ok!(Pallet::::set_keys( + RawOrigin::Signed(caller.clone()).into(), + keys_wrapper::(id.clone(), keys.clone()), + ) + ); + }: _(RawOrigin::Signed(caller.clone())) verify { - assert_eq!(Pallet::::account_id_of(&id), Some(caller)); - assert_eq!(Pallet::::keys_of(&id), Some(key)); + assert_eq!(Pallet::::account_id_of(&id), None); + assert_eq!(Pallet::::nimbus_id_of(&caller), None); } set_keys { @@ -95,16 +100,16 @@ benchmarks! { let first_keys: T::Keys = nimbus_id(3u8).into(); let second_id = nimbus_id(2u8); let second_keys: T::Keys = nimbus_id(3u8).into(); - assert_ok!(Pallet::::register_keys( + // we benchmark set_keys after already calling set_keys because + // key rotation is more common than initially setting them + assert_ok!(Pallet::::set_keys( RawOrigin::Signed(caller.clone()).into(), - first_id.clone(), - first_keys.clone(), + keys_wrapper::(first_id.clone(), + first_keys.clone()), ) ); - }: _(RawOrigin::Signed(caller.clone()), - first_id.clone(), - second_id.clone(), - second_keys.clone()) verify { + }: _(RawOrigin::Signed(caller.clone()), keys_wrapper::(second_id.clone(), second_keys.clone()) + ) verify { assert_eq!(Pallet::::account_id_of(&first_id), None); assert_eq!(Pallet::::keys_of(&first_id), None); assert_eq!(Pallet::::account_id_of(&second_id), Some(caller)); diff --git a/pallets/author-mapping/src/lib.rs b/pallets/author-mapping/src/lib.rs index 94bafb41f0..db391229f2 100644 --- a/pallets/author-mapping/src/lib.rs +++ b/pallets/author-mapping/src/lib.rs @@ -47,6 +47,7 @@ pub mod pallet { use frame_system::pallet_prelude::*; use nimbus_primitives::{AccountLookup, NimbusId}; use session_keys_primitives::KeysLookup; + use sp_std::{mem::size_of, vec::Vec}; pub type BalanceOf = <::DepositCurrency as Currency< ::AccountId, @@ -60,6 +61,18 @@ pub mod pallet { pub(crate) keys: T::Keys, } + /// Wrapper to form the input to `set_keys` from NimbusId + keys + pub fn keys_wrapper(nimbus_id: NimbusId, keys: T::Keys) -> Vec { + let mut r = nimbus_id.encode(); + r.extend(&keys.encode()); + r + } + + /// Size of NimbusId + T::Keys to check size of `set_keys` input before trying to decode + pub fn keys_size() -> usize { + size_of::() as usize + size_of::() as usize + } + #[pallet::pallet] #[pallet::without_storage_info] pub struct Pallet(PhantomData); @@ -91,26 +104,34 @@ pub mod pallet { CannotAffordSecurityDeposit, /// The NimbusId in question is already associated and cannot be overwritten AlreadyAssociated, + /// No existing NimbusId can be found for the account + OldAuthorIdNotFound, + /// Keys have wrong size + WrongKeySize, + /// Failed to decode NimbusId for `set_keys` + DecodeNimbusFailed, + /// Failed to decode T::Keys for `set_keys` + DecodeKeysFailed, } #[pallet::event] #[pallet::generate_deposit(pub(crate) fn deposit_event)] pub enum Event { /// A NimbusId has been registered and mapped to an AccountId. - AuthorRegistered { - author_id: NimbusId, + KeysRegistered { + nimbus_id: NimbusId, account_id: T::AccountId, keys: T::Keys, }, /// An NimbusId has been de-registered, and its AccountId mapping removed. - AuthorDeRegistered { - author_id: NimbusId, + KeysRemoved { + nimbus_id: NimbusId, account_id: T::AccountId, keys: T::Keys, }, /// An NimbusId has been registered, replacing a previous registration and its mapping. - AuthorRotated { - new_author_id: NimbusId, + KeysRotated { + new_nimbus_id: NimbusId, account_id: T::AccountId, new_keys: T::Keys, }, @@ -123,64 +144,31 @@ pub mod pallet { /// Users who have been (or will soon be) elected active collators in staking, /// should submit this extrinsic to have their blocks accepted and earn rewards. #[pallet::weight(::WeightInfo::add_association())] - pub fn add_association(origin: OriginFor, author_id: NimbusId) -> DispatchResult { + pub fn add_association(origin: OriginFor, nimbus_id: NimbusId) -> DispatchResult { let account_id = ensure_signed(origin)?; - ensure!( - MappingWithDeposit::::get(&author_id).is_none(), - Error::::AlreadyAssociated - ); - - Self::enact_registration(&author_id, &account_id, author_id.clone().into())?; - - >::deposit_event(Event::AuthorRegistered { - author_id: author_id.clone(), - account_id, - keys: author_id.into(), - }); - - Ok(()) + Self::register_keys(nimbus_id.clone(), account_id, nimbus_id.into()) } /// Change your Mapping. /// /// This is useful for normal key rotation or for when switching from one physical collator /// machine to another. No new security deposit is required. - /// This sets keys to new_author_id.into() by default. + /// This sets keys to new_nimbus_id.into() by default. #[pallet::weight(::WeightInfo::update_association())] pub fn update_association( origin: OriginFor, - old_author_id: NimbusId, - new_author_id: NimbusId, + old_nimbus_id: NimbusId, + new_nimbus_id: NimbusId, ) -> DispatchResult { let account_id = ensure_signed(origin)?; - let stored_info = MappingWithDeposit::::try_get(&old_author_id) - .map_err(|_| Error::::AssociationNotFound)?; - - ensure!( - account_id == stored_info.account, - Error::::NotYourAssociation - ); - ensure!( - MappingWithDeposit::::get(&new_author_id).is_none(), - Error::::AlreadyAssociated - ); - - MappingWithDeposit::::remove(&old_author_id); - let new_stored_info = RegistrationInfo { - keys: new_author_id.clone().into(), - ..stored_info - }; - MappingWithDeposit::::insert(&new_author_id, &new_stored_info); - - >::deposit_event(Event::AuthorRotated { - new_author_id: new_author_id, + Self::rotate_keys( + old_nimbus_id, + new_nimbus_id.clone(), account_id, - new_keys: new_stored_info.keys, - }); - - Ok(()) + new_nimbus_id.into(), + ) } /// Clear your Mapping. @@ -188,13 +176,50 @@ pub mod pallet { /// This is useful when you are no longer an author and would like to re-claim your security /// deposit. #[pallet::weight(::WeightInfo::clear_association())] - pub fn clear_association( - origin: OriginFor, - author_id: NimbusId, - ) -> DispatchResultWithPostInfo { + pub fn clear_association(origin: OriginFor, nimbus_id: NimbusId) -> DispatchResult { + let account_id = ensure_signed(origin)?; + + Self::rm_keys(nimbus_id, account_id) + } + + /// Remove your Mapping. + /// + /// This is useful when you are no longer an author and would like to re-claim your security + /// deposit. + #[pallet::weight(::WeightInfo::remove_keys())] + pub fn remove_keys(origin: OriginFor) -> DispatchResult { let account_id = ensure_signed(origin)?; + let nimbus_id = + Self::nimbus_id_of(&account_id).ok_or(Error::::OldAuthorIdNotFound)?; - let stored_info = MappingWithDeposit::::try_get(&author_id) + Self::rm_keys(nimbus_id, account_id) + } + + /// Set association and session keys at once. + /// + /// This is useful for key rotation to update Nimbus and VRF keys in one call. + /// No new security deposit is required. Will replace `update_association` which is kept + /// now for backwards compatibility reasons. + #[pallet::weight(::WeightInfo::set_keys())] + pub fn set_keys(origin: OriginFor, keys: Vec) -> DispatchResult { + let account_id = ensure_signed(origin)?; + ensure!(keys.len() == keys_size::(), Error::::WrongKeySize); + let encoded = &mut keys.as_slice(); + let new_nimbus_id = + NimbusId::decode(encoded).map_err(|_| Error::::DecodeNimbusFailed)?; + let keys = T::Keys::decode(encoded).map_err(|_| Error::::DecodeKeysFailed)?; + + if let Some(old_nimbus_id) = Self::nimbus_id_of(&account_id) { + Self::rotate_keys(old_nimbus_id, new_nimbus_id, account_id, keys) + } else { + Self::register_keys(new_nimbus_id, account_id, keys) + } + } + } + + impl Pallet { + fn rm_keys(nimbus_id: NimbusId, account_id: T::AccountId) -> DispatchResult { + let stored_info = MappingWithDeposit::::try_get(&nimbus_id) .map_err(|_| Error::::AssociationNotFound)?; ensure!( @@ -202,98 +227,80 @@ pub mod pallet { Error::::NotYourAssociation ); - MappingWithDeposit::::remove(&author_id); + MappingWithDeposit::::remove(&nimbus_id); + NimbusLookup::::remove(&account_id); T::DepositCurrency::unreserve(&account_id, stored_info.deposit); - >::deposit_event(Event::AuthorDeRegistered { - author_id, + >::deposit_event(Event::KeysRemoved { + nimbus_id, account_id, keys: stored_info.keys, }); - - Ok(().into()) + Ok(()) } - - /// Add association and set session keys - #[pallet::weight(::WeightInfo::register_keys())] - pub fn register_keys( - origin: OriginFor, - author_id: NimbusId, + fn register_keys( + nimbus_id: NimbusId, + account_id: T::AccountId, keys: T::Keys, ) -> DispatchResult { - let account_id = ensure_signed(origin)?; - ensure!( - MappingWithDeposit::::get(&author_id).is_none(), + MappingWithDeposit::::get(&nimbus_id).is_none(), Error::::AlreadyAssociated ); + Self::enact_registration(&nimbus_id, &account_id, keys.clone())?; - Self::enact_registration(&author_id, &account_id, keys.clone())?; - - >::deposit_event(Event::AuthorRegistered { - author_id, + >::deposit_event(Event::KeysRegistered { + nimbus_id, account_id, keys, }); - Ok(()) } - - /// Set association and session keys at once. - /// - /// This is useful for key rotation to update Nimbus and VRF keys in one call. - /// No new security deposit is required. Will replace `update_association` which is kept - /// now for backwards compatibility reasons. - #[pallet::weight(::WeightInfo::set_keys())] - pub fn set_keys( - origin: OriginFor, - old_author_id: NimbusId, - new_author_id: NimbusId, + fn rotate_keys( + old_nimbus_id: NimbusId, + new_nimbus_id: NimbusId, + account_id: T::AccountId, new_keys: T::Keys, ) -> DispatchResult { - let account_id = ensure_signed(origin)?; - - let stored_info = MappingWithDeposit::::try_get(&old_author_id) + let stored_info = MappingWithDeposit::::try_get(&old_nimbus_id) .map_err(|_| Error::::AssociationNotFound)?; ensure!( account_id == stored_info.account, Error::::NotYourAssociation ); - ensure!( - MappingWithDeposit::::get(&new_author_id).is_none(), - Error::::AlreadyAssociated - ); + if old_nimbus_id != new_nimbus_id { + // cannot overwrite a NimbusId if it is not yours + ensure!( + MappingWithDeposit::::get(&new_nimbus_id).is_none(), + Error::::AlreadyAssociated + ); + } - MappingWithDeposit::::remove(&old_author_id); - MappingWithDeposit::::insert( - &new_author_id, - &RegistrationInfo { - keys: new_keys.clone(), - ..stored_info - }, - ); + MappingWithDeposit::::remove(&old_nimbus_id); + let new_stored_info = RegistrationInfo { + keys: new_keys.clone(), + ..stored_info + }; + MappingWithDeposit::::insert(&new_nimbus_id, &new_stored_info); + NimbusLookup::::insert(&account_id, &new_nimbus_id); - >::deposit_event(Event::AuthorRotated { - new_author_id, + >::deposit_event(Event::KeysRotated { + new_nimbus_id, account_id, new_keys, }); - Ok(()) } - } - - impl Pallet { pub fn enact_registration( - author_id: &NimbusId, + nimbus_id: &NimbusId, account_id: &T::AccountId, keys: T::Keys, ) -> DispatchResult { let deposit = T::DepositAmount::get(); - T::DepositCurrency::reserve(&account_id, deposit) + T::DepositCurrency::reserve(account_id, deposit) .map_err(|_| Error::::CannotAffordSecurityDeposit)?; let info = RegistrationInfo { @@ -302,7 +309,8 @@ pub mod pallet { keys, }; - MappingWithDeposit::::insert(&author_id, &info); + MappingWithDeposit::::insert(nimbus_id, info); + NimbusLookup::::insert(account_id, nimbus_id); Ok(()) } @@ -315,6 +323,12 @@ pub mod pallet { pub type MappingWithDeposit = StorageMap<_, Blake2_128Concat, NimbusId, RegistrationInfo, OptionQuery>; + #[pallet::storage] + #[pallet::getter(fn nimbus_lookup)] + /// We maintain a reverse mapping from AccountIds to NimbusIDS + pub type NimbusLookup = + StorageMap<_, Blake2_128Concat, T::AccountId, NimbusId, OptionQuery>; + #[pallet::genesis_config] /// Genesis config for author mapping pallet pub struct GenesisConfig { @@ -332,11 +346,11 @@ pub mod pallet { #[pallet::genesis_build] impl GenesisBuild for GenesisConfig { fn build(&self) { - for (author_id, account_id) in &self.mappings { + for (nimbus_id, account_id) in &self.mappings { if let Err(e) = Pallet::::enact_registration( - &author_id, + &nimbus_id, &account_id, - author_id.clone().into(), + nimbus_id.clone().into(), ) { log::warn!("Error with genesis author mapping registration: {:?}", e); } @@ -359,12 +373,16 @@ pub mod pallet { impl Pallet { /// A helper function to lookup the account id associated with the given author id. This is /// the primary lookup that this pallet is responsible for. - pub fn account_id_of(author_id: &NimbusId) -> Option { - Self::account_and_deposit_of(author_id).map(|info| info.account) + pub fn account_id_of(nimbus_id: &NimbusId) -> Option { + Self::account_and_deposit_of(nimbus_id).map(|info| info.account) } /// A helper function to lookup the keys associated with the given author id. - pub fn keys_of(author_id: &NimbusId) -> Option { - Self::account_and_deposit_of(author_id).map(|info| info.keys) + pub fn keys_of(nimbus_id: &NimbusId) -> Option { + Self::account_and_deposit_of(nimbus_id).map(|info| info.keys) + } + /// A helper function to lookup NimbusId associated with a given AccountId + pub fn nimbus_id_of(account_id: &T::AccountId) -> Option { + NimbusLookup::::get(account_id) } } } diff --git a/pallets/author-mapping/src/migrations.rs b/pallets/author-mapping/src/migrations.rs index d42753e663..4d1facd954 100644 --- a/pallets/author-mapping/src/migrations.rs +++ b/pallets/author-mapping/src/migrations.rs @@ -14,10 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use crate::{BalanceOf, Config, MappingWithDeposit, RegistrationInfo}; +use crate::{BalanceOf, Config, Event, MappingWithDeposit, NimbusLookup, Pallet, RegistrationInfo}; use frame_support::{ pallet_prelude::PhantomData, - traits::{Get, OnRuntimeUpgrade}, + traits::{Get, OnRuntimeUpgrade, ReservableCurrency}, weights::Weight, }; use nimbus_primitives::NimbusId; @@ -25,6 +25,73 @@ use parity_scale_codec::{Decode, Encode}; #[cfg(feature = "try-runtime")] use scale_info::prelude::format; +/// Migrates MappingWithDeposit map value from RegistrationInfo to RegistrationInformation, +/// thereby adding a keys: T::Keys field to the value to support VRF keys that can be looked up +/// via NimbusId. +pub struct AddAccountIdToNimbusLookup(PhantomData); +impl OnRuntimeUpgrade for AddAccountIdToNimbusLookup { + fn on_runtime_upgrade() -> Weight { + log::info!(target: "AddAccountIdToNimbusLookup", "running migration"); + + let mut read_write_count = 0u64; + >::translate(|nimbus_id, registration_info: RegistrationInfo| { + read_write_count += 2u64; + if NimbusLookup::::get(®istration_info.account).is_none() { + >::insert(®istration_info.account, nimbus_id); + Some(registration_info) + } else { + // revoke the additional association and return the funds + T::DepositCurrency::unreserve( + ®istration_info.account, + registration_info.deposit, + ); + + >::deposit_event(Event::KeysRemoved { + nimbus_id, + account_id: registration_info.account, + keys: registration_info.keys, + }); + None + } + }); + // return weight + read_write_count.saturating_mul(T::DbWeight::get().read + T::DbWeight::get().write) + } + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result<(), &'static str> { + use frame_support::traits::OnRuntimeUpgradeHelpersExt; + use sp_std::vec::Vec; + + let mut nimbus_set: Vec = Vec::new(); + for (nimbus_id, info) in >::iter() { + if !nimbus_set.contains(&nimbus_id) { + Self::set_temp_storage( + info.account, + &format!("MappingWithDeposit{:?}Account", nimbus_id)[..], + ); + nimbus_set.push(nimbus_id); + } + } + Ok(()) + } + #[cfg(feature = "try-runtime")] + fn post_upgrade() -> Result<(), &'static str> { + use frame_support::traits::OnRuntimeUpgradeHelpersExt; + for (nimbus_id, _) in >::iter() { + let old_account: T::AccountId = + Self::get_temp_storage(&format!("MappingWithDeposit{:?}Account", nimbus_id)[..]) + .expect("qed"); + let maybe_account_of_nimbus = >::get(old_account); + assert_eq!( + Some(nimbus_id), + maybe_account_of_nimbus, + "New NimbusLookup dne expected NimbusID" + ); + } + Ok(()) + } +} + /// Migrates MappingWithDeposit map value from RegistrationInfo to RegistrationInformation, /// thereby adding a keys: T::Keys field to the value to support VRF keys that can be looked up /// via NimbusId. diff --git a/pallets/author-mapping/src/tests.rs b/pallets/author-mapping/src/tests.rs index 74c00e2326..355bd0d5af 100644 --- a/pallets/author-mapping/src/tests.rs +++ b/pallets/author-mapping/src/tests.rs @@ -16,11 +16,21 @@ //! Unit testing use crate::mock::{ - last_event, AuthorMapping, Balances, Event as MetaEvent, ExtBuilder, Origin, Runtime, System, - TestAuthor, + last_event, AuthorMapping, Balances, DepositAmount, Event as MetaEvent, ExtBuilder, Origin, + Runtime, System, TestAuthor, }; -use crate::{Error, Event}; -use frame_support::{assert_noop, assert_ok}; +use crate::{keys_size, keys_wrapper, Error, Event, MappingWithDeposit, RegistrationInfo}; +use frame_support::{ + assert_noop, assert_ok, + traits::{OnRuntimeUpgrade, ReservableCurrency}, +}; +use nimbus_primitives::NimbusId; + +#[test] +fn check_key_size() { + // NimbusId (32) + NimbusId (32) + assert_eq!(keys_size::(), 64usize); +} #[test] fn genesis_builder_works() { @@ -60,8 +70,8 @@ fn eligible_account_can_register() { assert_eq!( last_event(), - MetaEvent::AuthorMapping(Event::AuthorRegistered { - author_id: TestAuthor::Bob.into(), + MetaEvent::AuthorMapping(Event::KeysRegistered { + nimbus_id: TestAuthor::Bob.into(), account_id: 2, keys: TestAuthor::Bob.into(), }) @@ -109,8 +119,8 @@ fn double_registration_costs_twice_as_much() { assert_eq!( last_event(), - MetaEvent::AuthorMapping(Event::AuthorRegistered { - author_id: TestAuthor::Bob.into(), + MetaEvent::AuthorMapping(Event::KeysRegistered { + nimbus_id: TestAuthor::Bob.into(), account_id: 2, keys: TestAuthor::Bob.into(), }) @@ -131,8 +141,8 @@ fn double_registration_costs_twice_as_much() { assert_eq!( last_event(), - MetaEvent::AuthorMapping(Event::AuthorRegistered { - author_id: TestAuthor::Alice.into(), + MetaEvent::AuthorMapping(Event::KeysRegistered { + nimbus_id: TestAuthor::Alice.into(), account_id: 2, keys: TestAuthor::Alice.into(), }) @@ -153,10 +163,7 @@ fn registered_account_can_clear() { .with_mappings(vec![(TestAuthor::Alice.into(), 1)]) .build() .execute_with(|| { - assert_ok!(AuthorMapping::clear_association( - Origin::signed(1), - TestAuthor::Alice.into() - )); + assert_ok!(AuthorMapping::remove_keys(Origin::signed(1))); assert_eq!(Balances::free_balance(&1), 1000); assert_eq!(Balances::reserved_balance(&1), 0); @@ -167,8 +174,8 @@ fn registered_account_can_clear() { assert_eq!( last_event(), - MetaEvent::AuthorMapping(Event::AuthorDeRegistered { - author_id: TestAuthor::Alice.into(), + MetaEvent::AuthorMapping(Event::KeysRemoved { + nimbus_id: TestAuthor::Alice.into(), account_id: 1, keys: TestAuthor::Alice.into(), }) @@ -180,8 +187,8 @@ fn registered_account_can_clear() { fn unregistered_author_cannot_be_cleared() { ExtBuilder::default().build().execute_with(|| { assert_noop!( - AuthorMapping::clear_association(Origin::signed(1), TestAuthor::Alice.into()), - Error::::AssociationNotFound + AuthorMapping::remove_keys(Origin::signed(1)), + Error::::OldAuthorIdNotFound ); }) } @@ -272,20 +279,17 @@ fn registered_author_cannot_be_rotated_by_non_owner() { } #[test] -fn rotating_to_the_same_author_id_leaves_registration_in_tact() { +fn rotating_to_the_same_nimbus_id_leaves_registration_in_tact() { ExtBuilder::default() .with_balances(vec![(1, 1000)]) .with_mappings(vec![(TestAuthor::Alice.into(), 1)]) .build() .execute_with(|| { - assert_noop!( - AuthorMapping::update_association( - Origin::signed(1), - TestAuthor::Alice.into(), - TestAuthor::Alice.into() - ), - Error::::AlreadyAssociated - ); + assert_ok!(AuthorMapping::update_association( + Origin::signed(1), + TestAuthor::Alice.into(), + TestAuthor::Alice.into() + )); }) } @@ -295,10 +299,9 @@ fn eligible_account_can_full_register() { .with_balances(vec![(2, 1000)]) .build() .execute_with(|| { - assert_ok!(AuthorMapping::register_keys( + assert_ok!(AuthorMapping::set_keys( Origin::signed(2), - TestAuthor::Bob.into(), - TestAuthor::Alice.into(), + keys_wrapper::(TestAuthor::Bob.into(), TestAuthor::Alice.into()), )); assert_eq!(Balances::free_balance(&2), 900); @@ -310,8 +313,8 @@ fn eligible_account_can_full_register() { assert_eq!( last_event(), - MetaEvent::AuthorMapping(Event::AuthorRegistered { - author_id: TestAuthor::Bob.into(), + MetaEvent::AuthorMapping(Event::KeysRegistered { + nimbus_id: TestAuthor::Bob.into(), account_id: 2, keys: TestAuthor::Alice.into(), }) @@ -320,16 +323,15 @@ fn eligible_account_can_full_register() { } #[test] -fn cannot_register_keys_without_deposit() { +fn cannot_set_keys_without_deposit() { ExtBuilder::default() .with_balances(vec![(2, 10)]) .build() .execute_with(|| { assert_noop!( - AuthorMapping::register_keys( + AuthorMapping::set_keys( Origin::signed(2), - TestAuthor::Alice.into(), - TestAuthor::Bob.into(), + keys_wrapper::(TestAuthor::Alice.into(), TestAuthor::Bob.into()), ), Error::::CannotAffordSecurityDeposit ); @@ -339,66 +341,6 @@ fn cannot_register_keys_without_deposit() { }) } -#[test] -fn double_full_registration_counts_twice_as_much() { - ExtBuilder::default() - .with_balances(vec![(2, 1000)]) - .build() - .execute_with(|| { - // Register once as Bob - assert_ok!(AuthorMapping::register_keys( - Origin::signed(2), - TestAuthor::Bob.into(), - TestAuthor::Charlie.into(), - )); - - assert_eq!(Balances::free_balance(&2), 900); - assert_eq!(Balances::reserved_balance(&2), 100); - assert_eq!( - AuthorMapping::account_id_of(&TestAuthor::Bob.into()), - Some(2) - ); - - assert_eq!( - last_event(), - MetaEvent::AuthorMapping(Event::AuthorRegistered { - author_id: TestAuthor::Bob.into(), - account_id: 2, - keys: TestAuthor::Charlie.into(), - }) - ); - - // Register again as Alice - assert_ok!(AuthorMapping::register_keys( - Origin::signed(2), - TestAuthor::Alice.into(), - TestAuthor::Bob.into(), - )); - - assert_eq!(Balances::free_balance(&2), 800); - assert_eq!(Balances::reserved_balance(&2), 200); - assert_eq!( - AuthorMapping::account_id_of(&TestAuthor::Alice.into()), - Some(2) - ); - - assert_eq!( - last_event(), - MetaEvent::AuthorMapping(Event::AuthorRegistered { - author_id: TestAuthor::Alice.into(), - account_id: 2, - keys: TestAuthor::Bob.into(), - }) - ); - - // Should still be registered as Bob as well - assert_eq!( - AuthorMapping::account_id_of(&TestAuthor::Bob.into()), - Some(2) - ); - }) -} - #[test] fn full_registered_author_cannot_be_overwritten() { ExtBuilder::default() @@ -407,10 +349,9 @@ fn full_registered_author_cannot_be_overwritten() { .build() .execute_with(|| { assert_noop!( - AuthorMapping::register_keys( + AuthorMapping::set_keys( Origin::signed(2), - TestAuthor::Alice.into(), - TestAuthor::Bob.into() + keys_wrapper::(TestAuthor::Alice.into(), TestAuthor::Bob.into()), ), Error::::AlreadyAssociated ); @@ -426,9 +367,7 @@ fn registered_can_full_rotate() { .execute_with(|| { assert_ok!(AuthorMapping::set_keys( Origin::signed(2), - TestAuthor::Bob.into(), - TestAuthor::Charlie.into(), - TestAuthor::Charlie.into(), + keys_wrapper::(TestAuthor::Charlie.into(), TestAuthor::Charlie.into()) )); assert_eq!(AuthorMapping::account_id_of(&TestAuthor::Bob.into()), None); @@ -448,18 +387,16 @@ fn registered_can_full_rotate() { } #[test] -fn unregistered_author_cannot_be_full_rotated() { - ExtBuilder::default().build().execute_with(|| { - assert_noop!( - AuthorMapping::set_keys( +fn unregistered_author_can_be_full_rotated() { + ExtBuilder::default() + .with_balances(vec![(2, 1000)]) + .build() + .execute_with(|| { + assert_ok!(AuthorMapping::set_keys( Origin::signed(2), - TestAuthor::Alice.into(), - TestAuthor::Bob.into(), - TestAuthor::Bob.into(), - ), - Error::::AssociationNotFound - ); - }) + keys_wrapper::(TestAuthor::Bob.into(), TestAuthor::Bob.into()), + )); + }) } #[test] @@ -472,30 +409,69 @@ fn registered_author_cannot_be_full_rotated_by_non_owner() { assert_noop!( AuthorMapping::set_keys( Origin::signed(2), - TestAuthor::Alice.into(), - TestAuthor::Bob.into(), - TestAuthor::Bob.into(), + keys_wrapper::(TestAuthor::Alice.into(), TestAuthor::Bob.into()) ), - Error::::NotYourAssociation + Error::::AlreadyAssociated ); }) } #[test] -fn full_rotating_to_the_same_author_id_leaves_registration_in_tact() { +fn full_rotating_to_the_same_nimbus_id_leaves_registration_in_tact() { ExtBuilder::default() .with_balances(vec![(1, 1000)]) .with_mappings(vec![(TestAuthor::Alice.into(), 1)]) .build() .execute_with(|| { - assert_noop!( - AuthorMapping::set_keys( - Origin::signed(1), - TestAuthor::Alice.into(), - TestAuthor::Alice.into(), - TestAuthor::Alice.into(), - ), - Error::::AlreadyAssociated + assert_ok!(AuthorMapping::set_keys( + Origin::signed(1), + keys_wrapper::(TestAuthor::Alice.into(), TestAuthor::Alice.into()) + )); + }) +} + +#[test] +fn add_reverse_mapping_migration_works() { + ExtBuilder::default() + .with_balances(vec![(1, 300)]) + .build() + .execute_with(|| { + // register 3 NimbusId owned by 1 account + let alice_as_nimbus: NimbusId = TestAuthor::Alice.into(); + let bob_as_nimbus: NimbusId = TestAuthor::Bob.into(); + let charlie_as_nimbus: NimbusId = TestAuthor::Charlie.into(); + MappingWithDeposit::::insert( + alice_as_nimbus.clone(), + RegistrationInfo { + account: 1, + deposit: DepositAmount::get(), + keys: alice_as_nimbus.clone(), + }, + ); + MappingWithDeposit::::insert( + bob_as_nimbus.clone(), + RegistrationInfo { + account: 1, + deposit: DepositAmount::get(), + keys: bob_as_nimbus.clone(), + }, + ); + MappingWithDeposit::::insert( + charlie_as_nimbus.clone(), + RegistrationInfo { + account: 1, + deposit: DepositAmount::get(), + keys: charlie_as_nimbus.clone(), + }, ); + assert_ok!(Balances::reserve(&1, DepositAmount::get() * 3)); + // run migration + crate::migrations::AddAccountIdToNimbusLookup::::on_runtime_upgrade(); + // ensure last 2 mappings revoked => 200 unreserved but still 100 reserved + assert_eq!(Balances::free_balance(&1), DepositAmount::get() * 2); + assert_eq!(Balances::reserved_balance(&1), DepositAmount::get() * 1); + assert!(MappingWithDeposit::::get(bob_as_nimbus).is_some()); + assert!(MappingWithDeposit::::get(alice_as_nimbus).is_none()); + assert!(MappingWithDeposit::::get(charlie_as_nimbus).is_none()); }) } diff --git a/pallets/author-mapping/src/weights.rs b/pallets/author-mapping/src/weights.rs index 49b8042c95..b8ad64decd 100644 --- a/pallets/author-mapping/src/weights.rs +++ b/pallets/author-mapping/src/weights.rs @@ -62,7 +62,7 @@ pub trait WeightInfo { #[rustfmt::skip] fn clear_association() -> Weight; #[rustfmt::skip] - fn register_keys() -> Weight; + fn remove_keys() -> Weight; #[rustfmt::skip] fn set_keys() -> Weight; } @@ -73,41 +73,46 @@ pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { // Storage: AuthorMapping MappingWithDeposit (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: AuthorMapping NimbusLookup (r:0 w:1) #[rustfmt::skip] fn add_association() -> Weight { - (33_145_000 as Weight) + (34_709_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) } // Storage: AuthorMapping MappingWithDeposit (r:2 w:2) + // Storage: AuthorMapping NimbusLookup (r:0 w:1) #[rustfmt::skip] fn update_association() -> Weight { - (25_754_000 as Weight) + (29_759_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) } // Storage: AuthorMapping MappingWithDeposit (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: AuthorMapping NimbusLookup (r:0 w:1) #[rustfmt::skip] fn clear_association() -> Weight { - (36_253_000 as Weight) + (36_180_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) } + // Storage: AuthorMapping NimbusLookup (r:1 w:1) // Storage: AuthorMapping MappingWithDeposit (r:1 w:1) // Storage: System Account (r:1 w:1) #[rustfmt::skip] - fn register_keys() -> Weight { - (33_600_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + fn remove_keys() -> Weight { + (41_773_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) } + // Storage: AuthorMapping NimbusLookup (r:1 w:1) // Storage: AuthorMapping MappingWithDeposit (r:2 w:2) #[rustfmt::skip] fn set_keys() -> Weight { - (25_578_000 as Weight) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + (32_010_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) } } @@ -115,40 +120,45 @@ impl WeightInfo for SubstrateWeight { impl WeightInfo for () { // Storage: AuthorMapping MappingWithDeposit (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: AuthorMapping NimbusLookup (r:0 w:1) #[rustfmt::skip] fn add_association() -> Weight { - (33_145_000 as Weight) + (34_709_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) } // Storage: AuthorMapping MappingWithDeposit (r:2 w:2) + // Storage: AuthorMapping NimbusLookup (r:0 w:1) #[rustfmt::skip] fn update_association() -> Weight { - (25_754_000 as Weight) + (29_759_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) } // Storage: AuthorMapping MappingWithDeposit (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: AuthorMapping NimbusLookup (r:0 w:1) #[rustfmt::skip] fn clear_association() -> Weight { - (36_253_000 as Weight) + (36_180_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) } + // Storage: AuthorMapping NimbusLookup (r:1 w:1) // Storage: AuthorMapping MappingWithDeposit (r:1 w:1) // Storage: System Account (r:1 w:1) #[rustfmt::skip] - fn register_keys() -> Weight { - (33_600_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(2 as Weight)) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + fn remove_keys() -> Weight { + (41_773_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) } + // Storage: AuthorMapping NimbusLookup (r:1 w:1) // Storage: AuthorMapping MappingWithDeposit (r:2 w:2) #[rustfmt::skip] fn set_keys() -> Weight { - (25_578_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(2 as Weight)) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + (32_010_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) } } diff --git a/pallets/ethereum-chain-id/Cargo.toml b/pallets/ethereum-chain-id/Cargo.toml index 2b5a050c96..221aa4ab9e 100644 --- a/pallets/ethereum-chain-id/Cargo.toml +++ b/pallets/ethereum-chain-id/Cargo.toml @@ -8,8 +8,8 @@ version = "1.0.0" serde = { version = "1.0.101", optional = true, features = [ "derive" ] } # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } diff --git a/pallets/ethereum-xcm/Cargo.toml b/pallets/ethereum-xcm/Cargo.toml new file mode 100644 index 0000000000..f6ee265c2c --- /dev/null +++ b/pallets/ethereum-xcm/Cargo.toml @@ -0,0 +1,83 @@ +[package] +name = "pallet-ethereum-xcm" +authors = [ "Parity Technologies " ] +description = "Xcm Transact compatibility for pallet-etherum." +edition = "2021" +license = "Apache-2.0" +repository = "https://github.com/paritytech/frontier/" +version = "1.0.0-dev" + +[package.metadata.docs.rs] +targets = [ "x86_64-unknown-linux-gnu" ] + +[dependencies] +ethereum = { version = "0.12.0", default-features = false, features = [ "with-codec" ] } +serde = { version = "1.0.137", optional = true } + +# Parity +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } +ethereum-types = { version = "0.13.1", default-features = false } +rlp = { version = "0.5", default-features = false } +scale-info = { version = "2.1.2", default-features = false, features = [ "derive" ] } + +# Substrate +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "4.0.0-dev", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "4.0.0-dev", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "4.0.0-dev", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "6.0.0", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "6.0.0", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "4.0.0", default-features = false } + +# Frontier +fp-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-primitives = { path = "../../primitives/xcm/", default-features = false } + +[dev-dependencies] +pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23" } + +hex = "0.4.3" +# Parity +libsecp256k1 = { version = "0.7", features = [ "hmac", "static-context" ] } +# Substrate FRAME +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "4.0.0-dev" } +# Substrate +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", version = "6.0.0" } + +[features] +default = [ "std" ] +std = [ + # Parity + "codec/std", + "ethereum-types/std", + "ethereum/std", + # Frontier + "fp-ethereum/std", + "fp-evm/std", + "fp-rpc/std", + "fp-self-contained/std", + # Substrate FRAME + "frame-support/std", + "frame-system/std", + "pallet-evm/std", + "pallet-timestamp/std", + "rlp/std", + "scale-info/std", + "serde", + # Substrate + "sp-io/std", + "sp-runtime/std", + "sp-std/std", + "xcm-primitives/std", +] +runtime-benchmarks = [ + "frame-support/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "pallet-evm/runtime-benchmarks", + "pallet-timestamp/runtime-benchmarks", +] +try-runtime = [ "frame-support/try-runtime" ] diff --git a/pallets/ethereum-xcm/src/lib.rs b/pallets/ethereum-xcm/src/lib.rs new file mode 100644 index 0000000000..f12060fdf3 --- /dev/null +++ b/pallets/ethereum-xcm/src/lib.rs @@ -0,0 +1,178 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! # Ethereum Xcm pallet +//! +//! The Xcm Ethereum pallet is a bridge for Xcm Transact to Ethereum pallet + +// Ensure we're `no_std` when compiling for Wasm. +#![cfg_attr(not(feature = "std"), no_std)] +#![allow(clippy::comparison_chain, clippy::large_enum_variant)] + +#[cfg(all(feature = "std", test))] +mod mock; +#[cfg(all(feature = "std", test))] +mod tests; + +use ethereum_types::{H160, U256}; +use fp_ethereum::{TransactionData, ValidatedTransaction}; +use fp_evm::{CheckEvmTransaction, CheckEvmTransactionConfig, InvalidEvmTransactionError}; +#[cfg(feature = "try-runtime")] +use frame_support::traits::OnRuntimeUpgradeHelpersExt; +use frame_support::{ + codec::{Decode, Encode}, + dispatch::DispatchResultWithPostInfo, + scale_info::TypeInfo, + traits::{EnsureOrigin, Get}, + weights::{Pays, PostDispatchInfo, Weight}, +}; +use frame_system::pallet_prelude::OriginFor; +use pallet_evm::GasWeightMapping; +use sp_runtime::{traits::UniqueSaturatedInto, RuntimeDebug}; +use sp_std::{marker::PhantomData, prelude::*}; + +pub use ethereum::{ + AccessListItem, BlockV2 as Block, LegacyTransactionMessage, Log, ReceiptV3 as Receipt, + TransactionAction, TransactionV2 as Transaction, +}; +pub use fp_rpc::TransactionStatus; +pub use xcm_primitives::{EthereumXcmTransaction, XcmToEthereum}; + +#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +pub enum RawOrigin { + XcmEthereumTransaction(H160), +} + +pub fn ensure_xcm_ethereum_transaction(o: OuterOrigin) -> Result +where + OuterOrigin: Into>, +{ + match o.into() { + Ok(RawOrigin::XcmEthereumTransaction(n)) => Ok(n), + _ => Err("bad origin: expected to be a xcm Ethereum transaction"), + } +} + +pub struct EnsureXcmEthereumTransaction; +impl> + From> EnsureOrigin + for EnsureXcmEthereumTransaction +{ + type Success = H160; + fn try_origin(o: O) -> Result { + o.into().map(|o| match o { + RawOrigin::XcmEthereumTransaction(id) => id, + }) + } + + #[cfg(feature = "runtime-benchmarks")] + fn successful_origin() -> O { + O::from(RawOrigin::XcmEthereumTransaction(Default::default())) + } +} + +pub use self::pallet::*; + +#[frame_support::pallet] +pub mod pallet { + use super::*; + + #[pallet::config] + pub trait Config: frame_system::Config + pallet_timestamp::Config + pallet_evm::Config { + /// Invalid transaction error + type InvalidEvmTransactionError: From; + /// Handler for applying an already validated transaction + type ValidatedTransaction: ValidatedTransaction; + /// Origin for xcm transact + type XcmEthereumOrigin: EnsureOrigin; + /// Maximum Weight reserved for xcm in a block + type ReservedXcmpWeight: Get; + } + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + #[pallet::without_storage_info] + pub struct Pallet(PhantomData); + + #[pallet::origin] + pub type Origin = RawOrigin; + + #[pallet::call] + impl Pallet + where + OriginFor: Into>>, + { + /// Xcm Transact an Ethereum transaction. + #[pallet::weight(::GasWeightMapping::gas_to_weight({ + match xcm_transaction { + EthereumXcmTransaction::V1(v1_tx) => v1_tx.gas_limit.unique_saturated_into(), + EthereumXcmTransaction::V2(v2_tx) => v2_tx.gas_limit.unique_saturated_into() + } + }))] + pub fn transact( + origin: OriginFor, + xcm_transaction: EthereumXcmTransaction, + ) -> DispatchResultWithPostInfo { + let source = T::XcmEthereumOrigin::ensure_origin(origin)?; + + let (who, account_weight) = pallet_evm::Pallet::::account_basic(&source); + + let transaction: Option = + xcm_transaction.into_transaction_v2(U256::zero(), who.nonce); + if let Some(transaction) = transaction { + let transaction_data: TransactionData = (&transaction).into(); + + let _ = CheckEvmTransaction::::new( + CheckEvmTransactionConfig { + evm_config: T::config(), + block_gas_limit: U256::from( + ::GasWeightMapping::weight_to_gas( + T::ReservedXcmpWeight::get(), + ), + ), + base_fee: U256::zero(), + chain_id: 0u64, + is_transactional: true, + }, + transaction_data.into(), + ) + // We only validate the gas limit against the evm transaction cost. + // No need to validate fee payment, as it is handled by the xcm executor. + .validate_in_block_for(&who) + .map_err(|_| sp_runtime::DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(account_weight), + pays_fee: Pays::Yes, + }, + error: sp_runtime::DispatchError::Other( + "Failed to validate ethereum transaction", + ), + })?; + + T::ValidatedTransaction::apply(source, transaction) + } else { + Err(sp_runtime::DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(account_weight), + pays_fee: Pays::Yes, + }, + error: sp_runtime::DispatchError::Other( + "Cannot convert xcm payload to known type", + ), + }) + } + } + } +} diff --git a/pallets/ethereum-xcm/src/mock.rs b/pallets/ethereum-xcm/src/mock.rs new file mode 100644 index 0000000000..4e39599d9c --- /dev/null +++ b/pallets/ethereum-xcm/src/mock.rs @@ -0,0 +1,453 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Test utilities + +use ethereum::{TransactionAction, TransactionSignature}; +use frame_support::{ + parameter_types, + traits::{ConstU32, FindAuthor}, + weights::Weight, + ConsensusEngineId, PalletId, +}; +use pallet_evm::{AddressMapping, EnsureAddressTruncated, FeeCalculator}; +use rlp::RlpStream; +use sp_core::{hashing::keccak_256, H160, H256, U256}; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, + AccountId32, +}; + +use super::*; +use pallet_ethereum::IntermediateStateRoot; +use sp_runtime::{ + traits::DispatchInfoOf, + transaction_validity::{TransactionValidity, TransactionValidityError}, +}; + +pub type SignedExtra = (frame_system::CheckSpecVersion,); + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; + +frame_support::construct_runtime! { + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Timestamp: pallet_timestamp::{Pallet, Call, Storage}, + EVM: pallet_evm::{Pallet, Call, Storage, Config, Event}, + Ethereum: pallet_ethereum::{Pallet, Call, Storage, Event, Origin}, + EthereumXcm: crate::{Pallet, Call, Origin}, + } +} + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max(1024); +} + +impl frame_system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = u64; + type Hash = H256; + type Call = Call; + type Hashing = BlakeTwo256; + type AccountId = AccountId32; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = (); + type OnSetCode = (); + type MaxConsumers = ConstU32<16>; +} + +parameter_types! { + // For weight estimation, we assume that the most locks on an individual account will be 50. + // This number may need to be adjusted in the future if this assumption no longer holds true. + pub const MaxLocks: u32 = 50; + pub const ExistentialDeposit: u64 = 500; +} + +impl pallet_balances::Config for Test { + type MaxLocks = MaxLocks; + type Balance = u64; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); + type MaxReserves = (); + type ReserveIdentifier = (); +} + +parameter_types! { + pub const MinimumPeriod: u64 = 6000 / 2; +} + +impl pallet_timestamp::Config for Test { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +pub struct FixedGasPrice; +impl FeeCalculator for FixedGasPrice { + fn min_gas_price() -> (U256, Weight) { + (1.into(), 0u64) + } +} + +pub struct FindAuthorTruncated; +impl FindAuthor for FindAuthorTruncated { + fn find_author<'a, I>(_digests: I) -> Option + where + I: 'a + IntoIterator, + { + Some(address_build(0).address) + } +} + +parameter_types! { + pub const TransactionByteFee: u64 = 1; + pub const ChainId: u64 = 42; + pub const EVMModuleId: PalletId = PalletId(*b"py/evmpa"); + pub const BlockGasLimit: U256 = U256::MAX; +} + +pub struct HashedAddressMapping; + +impl AddressMapping for HashedAddressMapping { + fn into_account_id(address: H160) -> AccountId32 { + let mut data = [0u8; 32]; + data[0..20].copy_from_slice(&address[..]); + AccountId32::from(Into::<[u8; 32]>::into(data)) + } +} + +impl pallet_evm::Config for Test { + type FeeCalculator = FixedGasPrice; + type GasWeightMapping = (); + type CallOrigin = EnsureAddressTruncated; + type WithdrawOrigin = EnsureAddressTruncated; + type AddressMapping = HashedAddressMapping; + type Currency = Balances; + type Event = Event; + type PrecompilesType = (); + type PrecompilesValue = (); + type Runner = pallet_evm::runner::stack::Runner; + type ChainId = ChainId; + type BlockGasLimit = BlockGasLimit; + type OnChargeTransaction = (); + type FindAuthor = FindAuthorTruncated; + type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping; +} + +impl pallet_ethereum::Config for Test { + type Event = Event; + type StateRoot = IntermediateStateRoot; +} + +parameter_types! { + pub ReservedXcmpWeight: Weight = u64::max_value(); +} + +impl crate::Config for Test { + type InvalidEvmTransactionError = pallet_ethereum::InvalidTransactionWrapper; + type ValidatedTransaction = pallet_ethereum::ValidatedTransaction; + type XcmEthereumOrigin = crate::EnsureXcmEthereumTransaction; + type ReservedXcmpWeight = ReservedXcmpWeight; +} + +impl fp_self_contained::SelfContainedCall for Call { + type SignedInfo = H160; + + fn is_self_contained(&self) -> bool { + match self { + Call::Ethereum(call) => call.is_self_contained(), + _ => false, + } + } + + fn check_self_contained(&self) -> Option> { + match self { + Call::Ethereum(call) => call.check_self_contained(), + _ => None, + } + } + + fn validate_self_contained( + &self, + info: &Self::SignedInfo, + dispatch_info: &DispatchInfoOf, + len: usize, + ) -> Option { + match self { + Call::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len), + _ => None, + } + } + + fn pre_dispatch_self_contained( + &self, + info: &Self::SignedInfo, + dispatch_info: &DispatchInfoOf, + len: usize, + ) -> Option> { + match self { + Call::Ethereum(call) => call.pre_dispatch_self_contained(info, dispatch_info, len), + _ => None, + } + } + + fn apply_self_contained( + self, + info: Self::SignedInfo, + ) -> Option>> { + use sp_runtime::traits::Dispatchable as _; + match self { + call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch( + Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)), + )), + _ => None, + } + } +} + +pub struct AccountInfo { + pub address: H160, + pub account_id: AccountId32, + pub private_key: H256, +} + +fn address_build(seed: u8) -> AccountInfo { + let private_key = H256::from_slice(&[(seed + 1) as u8; 32]); + let secret_key = libsecp256k1::SecretKey::parse_slice(&private_key[..]).unwrap(); + let public_key = &libsecp256k1::PublicKey::from_secret_key(&secret_key).serialize()[1..65]; + let address = H160::from(H256::from(keccak_256(public_key))); + + let mut data = [0u8; 32]; + data[0..20].copy_from_slice(&address[..]); + + AccountInfo { + private_key, + account_id: AccountId32::from(Into::<[u8; 32]>::into(data)), + address, + } +} + +// This function basically just builds a genesis storage key/value store according to +// our desired mockup. +pub fn new_test_ext(accounts_len: usize) -> (Vec, sp_io::TestExternalities) { + // sc_cli::init_logger(""); + let mut ext = frame_system::GenesisConfig::default() + .build_storage::() + .unwrap(); + + let pairs = (0..accounts_len) + .map(|i| address_build(i as u8)) + .collect::>(); + + let balances: Vec<_> = (0..accounts_len) + .map(|i| (pairs[i].account_id.clone(), 10_000_000)) + .collect(); + + pallet_balances::GenesisConfig:: { balances } + .assimilate_storage(&mut ext) + .unwrap(); + + (pairs, ext.into()) +} + +pub struct LegacyUnsignedTransaction { + pub nonce: U256, + pub gas_price: U256, + pub gas_limit: U256, + pub action: TransactionAction, + pub value: U256, + pub input: Vec, +} + +impl LegacyUnsignedTransaction { + fn signing_rlp_append(&self, s: &mut RlpStream) { + s.begin_list(9); + s.append(&self.nonce); + s.append(&self.gas_price); + s.append(&self.gas_limit); + s.append(&self.action); + s.append(&self.value); + s.append(&self.input); + s.append(&ChainId::get()); + s.append(&0u8); + s.append(&0u8); + } + + fn signing_hash(&self) -> H256 { + let mut stream = RlpStream::new(); + self.signing_rlp_append(&mut stream); + H256::from(keccak_256(&stream.out())) + } + + pub fn sign(&self, key: &H256) -> Transaction { + self.sign_with_chain_id(key, ChainId::get()) + } + + pub fn sign_with_chain_id(&self, key: &H256, chain_id: u64) -> Transaction { + let hash = self.signing_hash(); + let msg = libsecp256k1::Message::parse(hash.as_fixed_bytes()); + let s = libsecp256k1::sign( + &msg, + &libsecp256k1::SecretKey::parse_slice(&key[..]).unwrap(), + ); + let sig = s.0.serialize(); + + let sig = TransactionSignature::new( + s.1.serialize() as u64 % 2 + chain_id * 2 + 35, + H256::from_slice(&sig[0..32]), + H256::from_slice(&sig[32..64]), + ) + .unwrap(); + + Transaction::Legacy(ethereum::LegacyTransaction { + nonce: self.nonce, + gas_price: self.gas_price, + gas_limit: self.gas_limit, + action: self.action, + value: self.value, + input: self.input.clone(), + signature: sig, + }) + } +} + +pub struct EIP2930UnsignedTransaction { + pub nonce: U256, + pub gas_price: U256, + pub gas_limit: U256, + pub action: TransactionAction, + pub value: U256, + pub input: Vec, +} + +impl EIP2930UnsignedTransaction { + pub fn sign(&self, secret: &H256, chain_id: Option) -> Transaction { + let secret = { + let mut sk: [u8; 32] = [0u8; 32]; + sk.copy_from_slice(&secret[0..]); + libsecp256k1::SecretKey::parse(&sk).unwrap() + }; + let chain_id = chain_id.unwrap_or(ChainId::get()); + let msg = ethereum::EIP2930TransactionMessage { + chain_id, + nonce: self.nonce, + gas_price: self.gas_price, + gas_limit: self.gas_limit, + action: self.action, + value: self.value, + input: self.input.clone(), + access_list: vec![], + }; + let signing_message = libsecp256k1::Message::parse_slice(&msg.hash()[..]).unwrap(); + + let (signature, recid) = libsecp256k1::sign(&signing_message, &secret); + let rs = signature.serialize(); + let r = H256::from_slice(&rs[0..32]); + let s = H256::from_slice(&rs[32..64]); + Transaction::EIP2930(ethereum::EIP2930Transaction { + chain_id: msg.chain_id, + nonce: msg.nonce, + gas_price: msg.gas_price, + gas_limit: msg.gas_limit, + action: msg.action, + value: msg.value, + input: msg.input.clone(), + access_list: msg.access_list, + odd_y_parity: recid.serialize() != 0, + r, + s, + }) + } +} + +pub struct EIP1559UnsignedTransaction { + pub nonce: U256, + pub max_priority_fee_per_gas: U256, + pub max_fee_per_gas: U256, + pub gas_limit: U256, + pub action: TransactionAction, + pub value: U256, + pub input: Vec, +} + +impl EIP1559UnsignedTransaction { + pub fn sign(&self, secret: &H256, chain_id: Option) -> Transaction { + let secret = { + let mut sk: [u8; 32] = [0u8; 32]; + sk.copy_from_slice(&secret[0..]); + libsecp256k1::SecretKey::parse(&sk).unwrap() + }; + let chain_id = chain_id.unwrap_or(ChainId::get()); + let msg = ethereum::EIP1559TransactionMessage { + chain_id, + nonce: self.nonce, + max_priority_fee_per_gas: self.max_priority_fee_per_gas, + max_fee_per_gas: self.max_fee_per_gas, + gas_limit: self.gas_limit, + action: self.action, + value: self.value, + input: self.input.clone(), + access_list: vec![], + }; + let signing_message = libsecp256k1::Message::parse_slice(&msg.hash()[..]).unwrap(); + + let (signature, recid) = libsecp256k1::sign(&signing_message, &secret); + let rs = signature.serialize(); + let r = H256::from_slice(&rs[0..32]); + let s = H256::from_slice(&rs[32..64]); + Transaction::EIP1559(ethereum::EIP1559Transaction { + chain_id: msg.chain_id, + nonce: msg.nonce, + max_priority_fee_per_gas: msg.max_priority_fee_per_gas, + max_fee_per_gas: msg.max_fee_per_gas, + gas_limit: msg.gas_limit, + action: msg.action, + value: msg.value, + input: msg.input.clone(), + access_list: msg.access_list, + odd_y_parity: recid.serialize() != 0, + r, + s, + }) + } +} diff --git a/pallets/ethereum-xcm/src/tests/mod.rs b/pallets/ethereum-xcm/src/tests/mod.rs new file mode 100644 index 0000000000..f476072f97 --- /dev/null +++ b/pallets/ethereum-xcm/src/tests/mod.rs @@ -0,0 +1,18 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +mod v1; +mod v2; diff --git a/pallets/ethereum-xcm/src/tests/res/erc20_contract_bytecode.txt b/pallets/ethereum-xcm/src/tests/res/erc20_contract_bytecode.txt new file mode 100644 index 0000000000..7b6692f115 --- /dev/null +++ b/pallets/ethereum-xcm/src/tests/res/erc20_contract_bytecode.txt @@ -0,0 +1 @@ +608060405234801561001057600080fd5b50610041337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61004660201b60201c565b610291565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156100e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6101028160025461020960201b610c7c1790919060201c565b60028190555061015d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461020960201b610c7c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600080828401905083811015610287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b610e3a806102a06000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806370a082311161005b57806370a08231146101fd578063a457c2d714610255578063a9059cbb146102bb578063dd62ed3e1461032157610088565b8063095ea7b31461008d57806318160ddd146100f357806323b872dd146101115780633950935114610197575b600080fd5b6100d9600480360360408110156100a357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610399565b604051808215151515815260200191505060405180910390f35b6100fb6103b7565b6040518082815260200191505060405180910390f35b61017d6004803603606081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506103c1565b604051808215151515815260200191505060405180910390f35b6101e3600480360360408110156101ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061049a565b604051808215151515815260200191505060405180910390f35b61023f6004803603602081101561021357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061054d565b6040518082815260200191505060405180910390f35b6102a16004803603604081101561026b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610595565b604051808215151515815260200191505060405180910390f35b610307600480360360408110156102d157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610662565b604051808215151515815260200191505060405180910390f35b6103836004803603604081101561033757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610680565b6040518082815260200191505060405180910390f35b60006103ad6103a6610707565b848461070f565b6001905092915050565b6000600254905090565b60006103ce848484610906565b61048f846103da610707565b61048a85604051806060016040528060288152602001610d7060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610440610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b600190509392505050565b60006105436104a7610707565b8461053e85600160006104b8610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b61070f565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006106586105a2610707565b8461065385604051806060016040528060258152602001610de160259139600160006105cc610707565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b61070f565b6001905092915050565b600061067661066f610707565b8484610906565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610795576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610dbd6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561081b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610d286022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610d986025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610d056023913960400191505060405180910390fd5b610a7d81604051806060016040528060268152602001610d4a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bbc9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b10816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c7c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c2e578082015181840152602081019050610c13565b50505050905090810190601f168015610c5b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015610cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a72315820c7a5ffabf642bda14700b2de42f8c57b36621af020441df825de45fd2b3e1c5c64736f6c63430005100032 diff --git a/pallets/ethereum-xcm/src/tests/v1.rs b/pallets/ethereum-xcm/src/tests/v1.rs new file mode 100644 index 0000000000..99beee09e5 --- /dev/null +++ b/pallets/ethereum-xcm/src/tests/v1.rs @@ -0,0 +1,24 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use frame_support::assert_ok; + +use crate::{mock::*, RawOrigin}; +use ethereum_types::{H160, H256, U256}; + +mod eip1559; +mod eip2930; +mod legacy; diff --git a/pallets/ethereum-xcm/src/tests/v1/eip1559.rs b/pallets/ethereum-xcm/src/tests/v1/eip1559.rs new file mode 100644 index 0000000000..4dcc2ba456 --- /dev/null +++ b/pallets/ethereum-xcm/src/tests/v1/eip1559.rs @@ -0,0 +1,214 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use super::*; +use frame_support::{ + assert_noop, + weights::{Pays, PostDispatchInfo}, +}; +use sp_runtime::{DispatchError, DispatchErrorWithPostInfo}; +use xcm_primitives::{EthereumXcmFee, EthereumXcmTransaction, EthereumXcmTransactionV1}; + +// pragma solidity ^0.6.6; +// contract Test { +// function foo() external pure returns (bool) { +// return true; +// } +// function bar() external pure { +// require(false, "error_msg"); +// } +// } +const CONTRACT: &str = "608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052\ + 348015600f57600080fd5b506004361060325760003560e01c8063c2985578146037578063\ + febb0f7e146057575b600080fd5b603d605f565b6040518082151515158152602001915050\ + 60405180910390f35b605d6068565b005b60006001905090565b600060db576040517f08c3\ + 79a00000000000000000000000000000000000000000000000000000000081526004018080\ + 602001828103825260098152602001807f6572726f725f6d73670000000000000000000000\ + 00000000000000000000000081525060200191505060405180910390fd5b56fea264697066\ + 7358221220fde68a3968e0e99b16fabf9b2997a78218b32214031f8e07e2c502daf603a69e\ + 64736f6c63430006060033"; + +fn xcm_evm_transfer_eip_1559_transaction(destination: H160, value: U256) -> EthereumXcmTransaction { + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Auto, + gas_limit: U256::from(0x5208), + action: ethereum::TransactionAction::Call(destination), + value, + input: vec![], + access_list: None, + }) +} + +fn xcm_evm_call_eip_1559_transaction(destination: H160, input: Vec) -> EthereumXcmTransaction { + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Auto, + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Call(destination), + value: U256::zero(), + input, + access_list: None, + }) +} + +fn xcm_erc20_creation_eip_1559_transaction() -> EthereumXcmTransaction { + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Auto, + + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + access_list: None, + }) +} + +#[test] +fn test_transact_xcm_evm_transfer() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let balances_before = System::account(&bob.account_id); + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_evm_transfer_eip_1559_transaction(bob.address, U256::from(100)), + ) + .expect("Failed to execute transaction"); + + assert_eq!( + System::account(&bob.account_id).data.free, + balances_before.data.free + 100 + ); + }); +} + +#[test] +fn test_transact_xcm_create() { + let (pairs, mut ext) = new_test_ext(1); + let alice = &pairs[0]; + + ext.execute_with(|| { + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_erc20_creation_eip_1559_transaction() + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Cannot convert xcm payload to known type"), + } + ); + }); +} + +#[test] +fn test_transact_xcm_evm_call_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let t = EIP1559UnsignedTransaction { + nonce: U256::zero(), + max_priority_fee_per_gas: U256::from(1), + max_fee_per_gas: U256::from(1), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + } + .sign(&alice.private_key, None); + assert_ok!(Ethereum::execute(alice.address, &t, None,)); + + let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); + let foo = hex::decode("c2985578").unwrap(); + let bar = hex::decode("febb0f7e").unwrap(); + + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_1559_transaction(H160::from_slice(&contract_address), foo), + ) + .expect("Failed to call `foo`"); + + // Evm call failing still succesfully dispatched + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_1559_transaction(H160::from_slice(&contract_address), bar), + ) + .expect("Failed to call `bar`"); + + let pending = Ethereum::pending(); + assert!(pending.len() == 2); + + // Transaction is in Pending storage, with nonce 0 and status 1 (evm succeed). + let (transaction_0, _, receipt_0) = &pending[0]; + match (transaction_0, receipt_0) { + (&crate::Transaction::EIP1559(ref t), &crate::Receipt::EIP1559(ref r)) => { + assert!(t.nonce == U256::from(0u8)); + assert!(r.status_code == 1u8); + } + _ => unreachable!(), + } + + // Transaction is in Pending storage, with nonce 1 and status 0 (evm failed). + let (transaction_1, _, receipt_1) = &pending[1]; + match (transaction_1, receipt_1) { + (&crate::Transaction::EIP1559(ref t), &crate::Receipt::EIP1559(ref r)) => { + assert!(t.nonce == U256::from(1u8)); + assert!(r.status_code == 0u8); + } + _ => unreachable!(), + } + }); +} + +#[test] +fn test_transact_xcm_validation_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + // Not enough gas limit to cover the transaction cost. + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(xcm_primitives::ManualEthereumXcmFee { + gas_price: Some(U256::from(0)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x5207), + action: ethereum::TransactionAction::Call(bob.address), + value: U256::from(1), + input: vec![], + access_list: None, + }), + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Failed to validate ethereum transaction"), + } + ); + }); +} diff --git a/pallets/ethereum-xcm/src/tests/v1/eip2930.rs b/pallets/ethereum-xcm/src/tests/v1/eip2930.rs new file mode 100644 index 0000000000..f280ac2e04 --- /dev/null +++ b/pallets/ethereum-xcm/src/tests/v1/eip2930.rs @@ -0,0 +1,229 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use super::*; +use frame_support::{ + assert_noop, + weights::{Pays, PostDispatchInfo}, +}; +use sp_runtime::{DispatchError, DispatchErrorWithPostInfo}; +use xcm_primitives::{ + EthereumXcmFee, EthereumXcmTransaction, EthereumXcmTransactionV1, ManualEthereumXcmFee, +}; + +// pragma solidity ^0.6.6; +// contract Test { +// function foo() external pure returns (bool) { +// return true; +// } +// function bar() external pure { +// require(false, "error_msg"); +// } +// } +const CONTRACT: &str = "608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052\ + 348015600f57600080fd5b506004361060325760003560e01c8063c2985578146037578063\ + febb0f7e146057575b600080fd5b603d605f565b6040518082151515158152602001915050\ + 60405180910390f35b605d6068565b005b60006001905090565b600060db576040517f08c3\ + 79a00000000000000000000000000000000000000000000000000000000081526004018080\ + 602001828103825260098152602001807f6572726f725f6d73670000000000000000000000\ + 00000000000000000000000081525060200191505060405180910390fd5b56fea264697066\ + 7358221220fde68a3968e0e99b16fabf9b2997a78218b32214031f8e07e2c502daf603a69e\ + 64736f6c63430006060033"; + +fn xcm_evm_transfer_eip_2930_transaction(destination: H160, value: U256) -> EthereumXcmTransaction { + let access_list = Some(vec![(H160::default(), vec![H256::default()])]); + + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Call(destination), + value, + input: vec![], + access_list, + }) +} + +fn xcm_evm_call_eip_2930_transaction(destination: H160, input: Vec) -> EthereumXcmTransaction { + let access_list = Some(vec![(H160::default(), vec![H256::default()])]); + + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Call(destination), + value: U256::zero(), + input, + access_list, + }) +} + +fn xcm_erc20_creation_eip_2930_transaction() -> EthereumXcmTransaction { + let access_list = Some(vec![(H160::default(), vec![H256::default()])]); + + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + access_list, + }) +} + +#[test] +fn test_transact_xcm_evm_transfer() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let balances_before = System::account(&bob.account_id); + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_evm_transfer_eip_2930_transaction(bob.address, U256::from(100)), + ) + .expect("Failed to execute transaction"); + + assert_eq!( + System::account(&bob.account_id).data.free, + balances_before.data.free + 100 + ); + }); +} + +#[test] +fn test_transact_xcm_create() { + let (pairs, mut ext) = new_test_ext(1); + let alice = &pairs[0]; + + ext.execute_with(|| { + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_erc20_creation_eip_2930_transaction() + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Cannot convert xcm payload to known type"), + } + ); + }); +} + +#[test] +fn test_transact_xcm_evm_call_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let t = EIP2930UnsignedTransaction { + nonce: U256::zero(), + gas_price: U256::from(1), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + } + .sign(&alice.private_key, None); + assert_ok!(Ethereum::execute(alice.address, &t, None,)); + + let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); + let foo = hex::decode("c2985578").unwrap(); + let bar = hex::decode("febb0f7e").unwrap(); + + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_2930_transaction(H160::from_slice(&contract_address), foo), + ) + .expect("Failed to call `foo`"); + + // Evm call failing still succesfully dispatched + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_2930_transaction(H160::from_slice(&contract_address), bar), + ) + .expect("Failed to call `bar`"); + + let pending = Ethereum::pending(); + assert!(pending.len() == 2); + + // Transaction is in Pending storage, with nonce 0 and status 1 (evm succeed). + let (transaction_0, _, receipt_0) = &pending[0]; + match (transaction_0, receipt_0) { + (&crate::Transaction::EIP2930(ref t), &crate::Receipt::EIP2930(ref r)) => { + assert!(t.nonce == U256::from(0u8)); + assert!(r.status_code == 1u8); + } + _ => unreachable!(), + } + + // Transaction is in Pending storage, with nonce 1 and status 0 (evm failed). + let (transaction_1, _, receipt_1) = &pending[1]; + match (transaction_1, receipt_1) { + (&crate::Transaction::EIP2930(ref t), &crate::Receipt::EIP2930(ref r)) => { + assert!(t.nonce == U256::from(1u8)); + assert!(r.status_code == 0u8); + } + _ => unreachable!(), + } + }); +} + +#[test] +fn test_transact_xcm_validation_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + // Not enough gas limit to cover the transaction cost. + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(xcm_primitives::ManualEthereumXcmFee { + gas_price: Some(U256::from(0)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x5207), + action: ethereum::TransactionAction::Call(bob.address), + value: U256::from(1), + input: vec![], + access_list: Some(vec![(H160::default(), vec![H256::default()])]), + }), + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Failed to validate ethereum transaction"), + } + ); + }); +} diff --git a/pallets/ethereum-xcm/src/tests/v1/legacy.rs b/pallets/ethereum-xcm/src/tests/v1/legacy.rs new file mode 100644 index 0000000000..fbcaafab9a --- /dev/null +++ b/pallets/ethereum-xcm/src/tests/v1/legacy.rs @@ -0,0 +1,226 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use super::*; +use frame_support::{ + assert_noop, + weights::{Pays, PostDispatchInfo}, +}; +use sp_runtime::{DispatchError, DispatchErrorWithPostInfo}; +use xcm_primitives::{ + EthereumXcmFee, EthereumXcmTransaction, EthereumXcmTransactionV1, ManualEthereumXcmFee, +}; + +// pragma solidity ^0.6.6; +// contract Test { +// function foo() external pure returns (bool) { +// return true; +// } +// function bar() external pure { +// require(false, "error_msg"); +// } +// } +const CONTRACT: &str = "608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052\ + 348015600f57600080fd5b506004361060325760003560e01c8063c2985578146037578063\ + febb0f7e146057575b600080fd5b603d605f565b6040518082151515158152602001915050\ + 60405180910390f35b605d6068565b005b60006001905090565b600060db576040517f08c3\ + 79a00000000000000000000000000000000000000000000000000000000081526004018080\ + 602001828103825260098152602001807f6572726f725f6d73670000000000000000000000\ + 00000000000000000000000081525060200191505060405180910390fd5b56fea264697066\ + 7358221220fde68a3968e0e99b16fabf9b2997a78218b32214031f8e07e2c502daf603a69e\ + 64736f6c63430006060033"; + +fn xcm_evm_transfer_legacy_transaction(destination: H160, value: U256) -> EthereumXcmTransaction { + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Call(destination), + value, + input: vec![], + access_list: None, + }) +} + +fn xcm_evm_call_eip_legacy_transaction( + destination: H160, + input: Vec, +) -> EthereumXcmTransaction { + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Call(destination), + value: U256::zero(), + input, + access_list: None, + }) +} + +fn xcm_erc20_creation_legacy_transaction() -> EthereumXcmTransaction { + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + access_list: None, + }) +} + +#[test] +fn test_transact_xcm_evm_transfer() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let balances_before = System::account(&bob.account_id); + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_evm_transfer_legacy_transaction(bob.address, U256::from(100)), + ) + .expect("Failed to execute transaction"); + + assert_eq!( + System::account(&bob.account_id).data.free, + balances_before.data.free + 100 + ); + }); +} + +#[test] +fn test_transact_xcm_create() { + let (pairs, mut ext) = new_test_ext(1); + let alice = &pairs[0]; + + ext.execute_with(|| { + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_erc20_creation_legacy_transaction() + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Cannot convert xcm payload to known type"), + } + ); + }); +} + +#[test] +fn test_transact_xcm_evm_call_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let t = LegacyUnsignedTransaction { + nonce: U256::zero(), + gas_price: U256::from(1), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + } + .sign(&alice.private_key); + assert_ok!(Ethereum::execute(alice.address, &t, None,)); + + let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); + let foo = hex::decode("c2985578").unwrap(); + let bar = hex::decode("febb0f7e").unwrap(); + + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_legacy_transaction(H160::from_slice(&contract_address), foo), + ) + .expect("Failed to call `foo`"); + + // Evm call failing still succesfully dispatched + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_legacy_transaction(H160::from_slice(&contract_address), bar), + ) + .expect("Failed to call `bar`"); + + let pending = Ethereum::pending(); + assert!(pending.len() == 2); + + // Transaction is in Pending storage, with nonce 0 and status 1 (evm succeed). + let (transaction_0, _, receipt_0) = &pending[0]; + match (transaction_0, receipt_0) { + (&crate::Transaction::Legacy(ref t), &crate::Receipt::Legacy(ref r)) => { + assert!(t.nonce == U256::from(0u8)); + assert!(r.status_code == 1u8); + } + _ => unreachable!(), + } + + // Transaction is in Pending storage, with nonce 1 and status 0 (evm failed). + let (transaction_1, _, receipt_1) = &pending[1]; + match (transaction_1, receipt_1) { + (&crate::Transaction::Legacy(ref t), &crate::Receipt::Legacy(ref r)) => { + assert!(t.nonce == U256::from(1u8)); + assert!(r.status_code == 0u8); + } + _ => unreachable!(), + } + }); +} + +#[test] +fn test_transact_xcm_validation_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + // Not enough gas limit to cover the transaction cost. + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + EthereumXcmTransaction::V1(EthereumXcmTransactionV1 { + fee_payment: EthereumXcmFee::Manual(xcm_primitives::ManualEthereumXcmFee { + gas_price: Some(U256::from(0)), + max_fee_per_gas: None, + }), + gas_limit: U256::from(0x5207), + action: ethereum::TransactionAction::Call(bob.address), + value: U256::from(1), + input: vec![], + access_list: None, + }), + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Failed to validate ethereum transaction"), + } + ); + }); +} diff --git a/pallets/ethereum-xcm/src/tests/v2.rs b/pallets/ethereum-xcm/src/tests/v2.rs new file mode 100644 index 0000000000..15e15931d1 --- /dev/null +++ b/pallets/ethereum-xcm/src/tests/v2.rs @@ -0,0 +1,206 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . +use crate::{mock::*, RawOrigin}; +use ethereum_types::{H160, U256}; +use frame_support::{ + assert_noop, assert_ok, + weights::{Pays, PostDispatchInfo}, +}; +use sp_runtime::{DispatchError, DispatchErrorWithPostInfo}; +use xcm_primitives::{EthereumXcmTransaction, EthereumXcmTransactionV2}; + +// pragma solidity ^0.6.6; +// contract Test { +// function foo() external pure returns (bool) { +// return true; +// } +// function bar() external pure { +// require(false, "error_msg"); +// } +// } +const CONTRACT: &str = "608060405234801561001057600080fd5b50610113806100206000396000f3fe6080604052\ + 348015600f57600080fd5b506004361060325760003560e01c8063c2985578146037578063\ + febb0f7e146057575b600080fd5b603d605f565b6040518082151515158152602001915050\ + 60405180910390f35b605d6068565b005b60006001905090565b600060db576040517f08c3\ + 79a00000000000000000000000000000000000000000000000000000000081526004018080\ + 602001828103825260098152602001807f6572726f725f6d73670000000000000000000000\ + 00000000000000000000000081525060200191505060405180910390fd5b56fea264697066\ + 7358221220fde68a3968e0e99b16fabf9b2997a78218b32214031f8e07e2c502daf603a69e\ + 64736f6c63430006060033"; + +fn xcm_evm_transfer_eip_1559_transaction(destination: H160, value: U256) -> EthereumXcmTransaction { + EthereumXcmTransaction::V2(EthereumXcmTransactionV2 { + gas_limit: U256::from(0x5208), + action: ethereum::TransactionAction::Call(destination), + value, + input: vec![], + access_list: None, + }) +} + +fn xcm_evm_call_eip_1559_transaction(destination: H160, input: Vec) -> EthereumXcmTransaction { + EthereumXcmTransaction::V2(EthereumXcmTransactionV2 { + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Call(destination), + value: U256::zero(), + input, + access_list: None, + }) +} + +fn xcm_erc20_creation_eip_1559_transaction() -> EthereumXcmTransaction { + EthereumXcmTransaction::V2(EthereumXcmTransactionV2 { + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + access_list: None, + }) +} + +#[test] +fn test_transact_xcm_evm_transfer() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let balances_before = System::account(&bob.account_id); + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_evm_transfer_eip_1559_transaction(bob.address, U256::from(100)), + ) + .expect("Failed to execute transaction"); + + assert_eq!( + System::account(&bob.account_id).data.free, + balances_before.data.free + 100 + ); + }); +} + +#[test] +fn test_transact_xcm_create() { + let (pairs, mut ext) = new_test_ext(1); + let alice = &pairs[0]; + + ext.execute_with(|| { + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + xcm_erc20_creation_eip_1559_transaction() + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Cannot convert xcm payload to known type"), + } + ); + }); +} + +#[test] +fn test_transact_xcm_evm_call_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + let t = EIP1559UnsignedTransaction { + nonce: U256::zero(), + max_priority_fee_per_gas: U256::from(1), + max_fee_per_gas: U256::from(1), + gas_limit: U256::from(0x100000), + action: ethereum::TransactionAction::Create, + value: U256::zero(), + input: hex::decode(CONTRACT).unwrap(), + } + .sign(&alice.private_key, None); + assert_ok!(Ethereum::execute(alice.address, &t, None,)); + + let contract_address = hex::decode("32dcab0ef3fb2de2fce1d2e0799d36239671f04a").unwrap(); + let foo = hex::decode("c2985578").unwrap(); + let bar = hex::decode("febb0f7e").unwrap(); + + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_1559_transaction(H160::from_slice(&contract_address), foo), + ) + .expect("Failed to call `foo`"); + + // Evm call failing still succesfully dispatched + let _ = EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(bob.address).into(), + xcm_evm_call_eip_1559_transaction(H160::from_slice(&contract_address), bar), + ) + .expect("Failed to call `bar`"); + + let pending = Ethereum::pending(); + assert!(pending.len() == 2); + + // Transaction is in Pending storage, with nonce 0 and status 1 (evm succeed). + let (transaction_0, _, receipt_0) = &pending[0]; + match (transaction_0, receipt_0) { + (&crate::Transaction::EIP1559(ref t), &crate::Receipt::EIP1559(ref r)) => { + assert!(t.nonce == U256::from(0u8)); + assert!(r.status_code == 1u8); + } + _ => unreachable!(), + } + + // Transaction is in Pending storage, with nonce 1 and status 0 (evm failed). + let (transaction_1, _, receipt_1) = &pending[1]; + match (transaction_1, receipt_1) { + (&crate::Transaction::EIP1559(ref t), &crate::Receipt::EIP1559(ref r)) => { + assert!(t.nonce == U256::from(1u8)); + assert!(r.status_code == 0u8); + } + _ => unreachable!(), + } + }); +} + +#[test] +fn test_transact_xcm_validation_works() { + let (pairs, mut ext) = new_test_ext(2); + let alice = &pairs[0]; + let bob = &pairs[1]; + + ext.execute_with(|| { + // Not enough gas limit to cover the transaction cost. + assert_noop!( + EthereumXcm::transact( + RawOrigin::XcmEthereumTransaction(alice.address).into(), + EthereumXcmTransaction::V2(EthereumXcmTransactionV2 { + gas_limit: U256::from(0x5207), + action: ethereum::TransactionAction::Call(bob.address), + value: U256::from(1), + input: vec![], + access_list: None, + }), + ), + DispatchErrorWithPostInfo { + post_info: PostDispatchInfo { + actual_weight: Some(0), + pays_fee: Pays::Yes, + }, + error: DispatchError::Other("Failed to validate ethereum transaction"), + } + ); + }); +} diff --git a/pallets/maintenance-mode/Cargo.toml b/pallets/maintenance-mode/Cargo.toml index 8a0617e214..7d182e0d57 100644 --- a/pallets/maintenance-mode/Cargo.toml +++ b/pallets/maintenance-mode/Cargo.toml @@ -9,18 +9,18 @@ version = "0.1.0" log = "0.4" # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", optional = true, default-features = false } [dev-dependencies] -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std", "xcm-support" ] diff --git a/pallets/migrations/Cargo.toml b/pallets/migrations/Cargo.toml index 861d4eec01..13a6a9f29b 100644 --- a/pallets/migrations/Cargo.toml +++ b/pallets/migrations/Cargo.toml @@ -10,18 +10,18 @@ impl-trait-for-tuples = "0.2.1" log = "0.4" # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [dev-dependencies] environmental = "1.1.2" -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/pallets/migrations/src/lib.rs b/pallets/migrations/src/lib.rs index c78a3deed9..b01088a43a 100644 --- a/pallets/migrations/src/lib.rs +++ b/pallets/migrations/src/lib.rs @@ -1,4 +1,4 @@ -// Copyright 2019-2020 PureStake Inc. +// Copyright 2019-2022 PureStake Inc. // This file is part of Moonbeam. // Moonbeam is free software: you can redistribute it and/or modify diff --git a/pallets/moonbeam-orbiters/Cargo.toml b/pallets/moonbeam-orbiters/Cargo.toml index db99abc407..c0a9315796 100644 --- a/pallets/moonbeam-orbiters/Cargo.toml +++ b/pallets/moonbeam-orbiters/Cargo.toml @@ -9,21 +9,21 @@ version = "0.1.0" log = "0.4" # Substrate -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Nimbus -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/pallets/moonbeam-orbiters/src/lib.rs b/pallets/moonbeam-orbiters/src/lib.rs index dd09a421e5..821a18c7ff 100644 --- a/pallets/moonbeam-orbiters/src/lib.rs +++ b/pallets/moonbeam-orbiters/src/lib.rs @@ -141,6 +141,11 @@ pub mod pallet { OptionQuery, >; + #[pallet::storage] + #[pallet::getter(fn orbiter)] + /// Check if account is an orbiter + pub type RegisteredOrbiter = StorageMap<_, Blake2_128Concat, T::AccountId, bool>; + #[pallet::genesis_config] pub struct GenesisConfig { pub min_orbiter_deposit: BalanceOf, @@ -228,6 +233,13 @@ pub mod pallet { old_orbiter: Option, new_orbiter: Option, }, + /// An orbiter has registered + OrbiterRegistered { + account: T::AccountId, + deposit: BalanceOf, + }, + /// An orbiter has unregistered + OrbiterUnregistered { account: T::AccountId }, } #[pallet::call] @@ -307,7 +319,13 @@ pub mod pallet { &T::OrbiterReserveIdentifier::get(), &orbiter, min_orbiter_deposit, - ) + )?; + RegisteredOrbiter::::insert(&orbiter, true); + Self::deposit_event(Event::OrbiterRegistered { + account: orbiter, + deposit: min_orbiter_deposit, + }); + Ok(()) } else { Err(Error::::MinOrbiterDepositNotSet.into()) } @@ -336,6 +354,8 @@ pub mod pallet { ); T::Currency::unreserve_all_named(&T::OrbiterReserveIdentifier::get(), &orbiter); + RegisteredOrbiter::::remove(&orbiter); + Self::deposit_event(Event::OrbiterUnregistered { account: orbiter }); Ok(()) } diff --git a/pallets/moonbeam-orbiters/src/tests.rs b/pallets/moonbeam-orbiters/src/tests.rs index 488ec3f060..f375493adf 100644 --- a/pallets/moonbeam-orbiters/src/tests.rs +++ b/pallets/moonbeam-orbiters/src/tests.rs @@ -180,6 +180,45 @@ fn test_collator_remove_orbiter() { }); } +#[test] +fn test_collator_remove_orbiter_then_add_orbiter() { + ExtBuilder::default() + .with_balances(vec![(2, 20_000), (3, 20_000)]) + .with_min_orbiter_deposit(10_000) + .build() + .execute_with(|| { + // Add a collator to the orbiter program + assert_ok!(MoonbeamOrbiters::add_collator(Origin::root(), 1),); + // Register an orbiter + assert_ok!(MoonbeamOrbiters::orbiter_register(Origin::signed(2)),); + assert_ok!(MoonbeamOrbiters::collator_add_orbiter(Origin::signed(1), 2),); + + // Try to remove an orbiter to a collator pool, should success + assert_ok!(MoonbeamOrbiters::collator_remove_orbiter( + Origin::signed(1), + 2 + ),); + System::assert_last_event( + Event::::OrbiterLeaveCollatorPool { + collator: 1, + orbiter: 2, + } + .into(), + ); + + // Try to register another orbiter, should success + assert_ok!(MoonbeamOrbiters::orbiter_register(Origin::signed(3)),); + assert_ok!(MoonbeamOrbiters::collator_add_orbiter(Origin::signed(1), 3),); + System::assert_last_event( + Event::::OrbiterJoinCollatorPool { + collator: 1, + orbiter: 3, + } + .into(), + ); + }); +} + #[test] fn test_orbiter_register_fail_if_insufficient_balance() { ExtBuilder::default() @@ -200,14 +239,23 @@ fn test_orbiter_register_ok() { .with_min_orbiter_deposit(10_000) .build() .execute_with(|| { + assert!(MoonbeamOrbiters::orbiter(1).is_none()); assert_ok!(MoonbeamOrbiters::orbiter_register(Origin::signed(1)),); - System::assert_last_event( + assert!(MoonbeamOrbiters::orbiter(1).is_some()); + System::assert_has_event( pallet_balances::Event::::Reserved { who: 1, amount: 10_000, } .into(), ); + System::assert_last_event( + Event::::OrbiterRegistered { + account: 1, + deposit: 10_000, + } + .into(), + ); }); } @@ -242,6 +290,16 @@ fn test_orbiter_unregister() { ); // Try to unregister an orbiter with right hint, should success + assert!(MoonbeamOrbiters::orbiter(2).is_some()); assert_ok!(MoonbeamOrbiters::orbiter_unregister(Origin::signed(2), 1),); + assert!(MoonbeamOrbiters::orbiter(2).is_none()); + System::assert_has_event( + pallet_balances::Event::::Unreserved { + who: 2, + amount: 10_000, + } + .into(), + ); + System::assert_last_event(Event::::OrbiterUnregistered { account: 2 }.into()); }); } diff --git a/pallets/moonbeam-orbiters/src/types.rs b/pallets/moonbeam-orbiters/src/types.rs index ba426a5024..ca32bc8af6 100644 --- a/pallets/moonbeam-orbiters/src/types.rs +++ b/pallets/moonbeam-orbiters/src/types.rs @@ -66,6 +66,9 @@ impl Default for CollatorPoolInfo { impl CollatorPoolInfo { pub(super) fn add_orbiter(&mut self, orbiter: AccountId) { + if self.next_orbiter > self.orbiters.len() as u32 { + self.next_orbiter = 0; + } self.orbiters.insert(self.next_orbiter as usize, orbiter); self.next_orbiter += 1; } diff --git a/pallets/moonbeam-orbiters/src/weights.rs b/pallets/moonbeam-orbiters/src/weights.rs index a1e871bf1d..4a7d9d3880 100644 --- a/pallets/moonbeam-orbiters/src/weights.rs +++ b/pallets/moonbeam-orbiters/src/weights.rs @@ -97,16 +97,18 @@ impl WeightInfo for SubstrateWeight { // Storage: MoonbeamOrbiters MinOrbiterDeposit (r:1 w:0) // Storage: Balances Reserves (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: MoonbeamOrbiters RegisteredOrbiter (r:0 w:1) #[rustfmt::skip] fn orbiter_register() -> Weight { (32_506_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) } // Storage: MoonbeamOrbiters CounterForCollatorsPool (r:1 w:0) // Storage: MoonbeamOrbiters CollatorsPool (r:1 w:0) // Storage: Balances Reserves (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: MoonbeamOrbiters RegisteredOrbiter (r:0 w:1) #[rustfmt::skip] fn orbiter_unregister(n: u32, ) -> Weight { (33_919_000 as Weight) @@ -114,7 +116,7 @@ impl WeightInfo for SubstrateWeight { .saturating_add((6_981_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(n as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) } // Storage: MoonbeamOrbiters CollatorsPool (r:1 w:1) // Storage: MoonbeamOrbiters CounterForCollatorsPool (r:1 w:1) diff --git a/pallets/parachain-staking/Cargo.toml b/pallets/parachain-staking/Cargo.toml index f312557cf7..06256cc95d 100644 --- a/pallets/parachain-staking/Cargo.toml +++ b/pallets/parachain-staking/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "parachain-staking" +name = "pallet-parachain-staking" authors = [ "PureStake" ] description = "parachain staking pallet for collator selection and reward distribution" edition = "2021" @@ -10,25 +10,25 @@ log = "0.4" serde = { version = "1.0.101", optional = true } # Substrate -frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", optional = true, default-features = false } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } substrate-fixed = { git = "https://github.com/encointer/substrate-fixed", default-features = false } -pallet-session = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false} -pallet-authorship = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false} -sp-staking = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false} +pallet-session = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false} +pallet-authorship = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false} +sp-staking = {git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false} [dev-dependencies] similar-asserts = "1.1.0" -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/pallets/parachain-staking/README.md b/pallets/parachain-staking/README.md index ff83118cd5..e169fe702a 100644 --- a/pallets/parachain-staking/README.md +++ b/pallets/parachain-staking/README.md @@ -15,7 +15,7 @@ Implements Delegated Proof of Stake to Links: -- [Rust Documentation](https://purestake.github.io/moonbeam/parachain_staking/index.html) +- [Rust Documentation](https://purestake.github.io/moonbeam/pallet_parachain_staking/index.html) - [Unofficial Documentation](https://meta5.world/parachain-staking-docs/) - [(Outdated) Blog Post with Justification](https://meta5.world/posts/parachain-staking) diff --git a/pallets/parachain-staking/src/benchmarks.rs b/pallets/parachain-staking/src/benchmarks.rs index 6025e9417c..8851891e8b 100644 --- a/pallets/parachain-staking/src/benchmarks.rs +++ b/pallets/parachain-staking/src/benchmarks.rs @@ -512,7 +512,11 @@ benchmarks! { )?; }: _(RawOrigin::Signed(caller.clone())) verify { - assert!(Pallet::::delegator_state(&caller).unwrap().is_leaving()); + assert!( + Pallet::::delegation_scheduled_requests(&collator) + .iter() + .any(|r| r.delegator == caller && matches!(r.action, DelegationAction::Revoke(_))) + ); } execute_leave_delegators { diff --git a/pallets/parachain-staking/src/delegation_requests.rs b/pallets/parachain-staking/src/delegation_requests.rs index fb08c8e3a2..07cef17781 100644 --- a/pallets/parachain-staking/src/delegation_requests.rs +++ b/pallets/parachain-staking/src/delegation_requests.rs @@ -16,18 +16,18 @@ //! Scheduled requests functionality for delegators +use crate::pallet::{ + BalanceOf, CandidateInfo, Config, DelegationScheduledRequests, DelegatorState, Error, Event, + Pallet, Round, RoundIndex, Total, +}; +use crate::{Delegator, DelegatorStatus}; use frame_support::ensure; -use frame_support::traits::{Get, ReservableCurrency}; +use frame_support::traits::Get; use frame_support::{dispatch::DispatchResultWithPostInfo, RuntimeDebug}; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_runtime::traits::Saturating; - -use crate::pallet::{ - BalanceOf, CandidateInfo, Config, DelegationScheduledRequests, DelegatorState, Error, Event, - Pallet, Round, RoundIndex, Total, -}; -use crate::Delegator; +use sp_std::{vec, vec::Vec}; /// An action that can be performed upon a delegation #[derive(Clone, Eq, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo, PartialOrd, Ord)] @@ -140,7 +140,7 @@ impl Pallet { ); // Net Total is total after pending orders are executed - let net_total = state.total.saturating_sub(state.less_total); + let net_total = state.total().saturating_sub(state.less_total); // Net Total is always >= MinDelegatorStk let max_subtracted_amount = net_total.saturating_sub(T::MinDelegatorStk::get().into()); ensure!( @@ -175,14 +175,11 @@ impl Pallet { ) -> DispatchResultWithPostInfo { let mut state = >::get(&delegator).ok_or(>::DelegatorDNE)?; let mut scheduled_requests = >::get(&collator); - let request_idx = scheduled_requests - .iter() - .position(|req| req.delegator == delegator) - .ok_or(>::PendingDelegationRequestDNE)?; - let request = scheduled_requests.remove(request_idx); - let amount = request.action.amount(); - state.less_total = state.less_total.saturating_sub(amount); + let request = + Self::cancel_request_with_state(&delegator, &mut state, &mut scheduled_requests) + .ok_or(>::PendingDelegationRequestDNE)?; + >::insert(collator.clone(), scheduled_requests); >::insert(delegator.clone(), state); @@ -194,6 +191,21 @@ impl Pallet { Ok(().into()) } + fn cancel_request_with_state( + delegator: &T::AccountId, + state: &mut Delegator>, + scheduled_requests: &mut Vec>>, + ) -> Option>> { + let request_idx = scheduled_requests + .iter() + .position(|req| &req.delegator == delegator)?; + + let request = scheduled_requests.remove(request_idx); + let amount = request.action.amount(); + state.less_total = state.less_total.saturating_sub(amount); + Some(request) + } + /// Executes the delegator's existing [ScheduledRequest] towards a given collator. pub(crate) fn delegation_execute_scheduled_request( collator: T::AccountId, @@ -220,7 +232,10 @@ impl Pallet { true } else { ensure!( - state.total.saturating_sub(T::MinDelegatorStk::get().into()) >= amount, + state + .total() + .saturating_sub(T::MinDelegatorStk::get().into()) + >= amount, >::DelegatorBondBelowMin ); false @@ -231,7 +246,7 @@ impl Pallet { state.less_total = state.less_total.saturating_sub(amount); // remove delegation from delegator state - state.rm_delegation(&collator); + state.rm_delegation::(&collator); // remove delegation from collator state delegations Self::delegator_leaves_candidate(collator.clone(), delegator.clone(), amount)?; @@ -264,19 +279,25 @@ impl Pallet { return if bond.amount > amount { let amount_before: BalanceOf = bond.amount.into(); bond.amount = bond.amount.saturating_sub(amount); - state.total = state.total.saturating_sub(amount); - let new_total: BalanceOf = state.total.into(); - ensure!( - new_total >= T::MinDelegation::get(), - >::DelegationBelowMin - ); - ensure!( - new_total >= T::MinDelegatorStk::get(), - >::DelegatorBondBelowMin - ); let mut collator_info = >::get(&collator) .ok_or(>::CandidateDNE)?; - T::Currency::unreserve(&delegator, amount); + + state.total_sub_if::(amount, |total| { + let new_total: BalanceOf = total.into(); + ensure!( + new_total >= T::MinDelegation::get(), + >::DelegationBelowMin + ); + ensure!( + new_total >= T::MinDelegatorStk::get(), + >::DelegatorBondBelowMin + ); + + Self::jit_ensure_delegator_reserve_migrated(&delegator)?; + + Ok(()) + })?; + // need to go into decrease_delegation let in_top = collator_info.decrease_delegation::( &collator, @@ -311,6 +332,226 @@ impl Pallet { } } + /// Schedules [DelegationAction::Revoke] for the delegator, towards all delegated collator. + /// The last fulfilled request causes the delegator to leave the set of delegators. + pub(crate) fn delegator_schedule_revoke_all( + delegator: T::AccountId, + ) -> DispatchResultWithPostInfo { + let mut state = >::get(&delegator).ok_or(>::DelegatorDNE)?; + let mut updated_scheduled_requests = vec![]; + let now = >::get().current; + let when = now.saturating_add(T::LeaveDelegatorsDelay::get()); + + // lazy migration for DelegatorStatus::Leaving + #[allow(deprecated)] + if matches!(state.status, DelegatorStatus::Leaving(_)) { + state.status = DelegatorStatus::Active; + >::insert(delegator.clone(), state.clone()); + } + + // it is assumed that a multiple delegations to the same collator does not exist, else this + // will cause a bug - the last duplicate delegation update will be the only one applied. + let mut existing_revoke_count = 0; + for bond in state.delegations.0.clone() { + let collator = bond.owner; + let bonded_amount = bond.amount; + let mut scheduled_requests = >::get(&collator); + + // cancel any existing requests + let request = + Self::cancel_request_with_state(&delegator, &mut state, &mut scheduled_requests); + let request = match request { + Some(revoke_req) if matches!(revoke_req.action, DelegationAction::Revoke(_)) => { + existing_revoke_count += 1; + revoke_req // re-insert the same Revoke request + } + _ => ScheduledRequest { + delegator: delegator.clone(), + action: DelegationAction::Revoke(bonded_amount.clone()), + when_executable: when, + }, + }; + + scheduled_requests.push(request); + state.less_total = state.less_total.saturating_add(bonded_amount); + updated_scheduled_requests.push((collator, scheduled_requests)); + } + + if existing_revoke_count == state.delegations.0.len() { + return Err(>::DelegatorAlreadyLeaving.into()); + } + + updated_scheduled_requests + .into_iter() + .for_each(|(collator, scheduled_requests)| { + >::insert(collator, scheduled_requests); + }); + + >::insert(delegator.clone(), state); + Self::deposit_event(Event::DelegatorExitScheduled { + round: now, + delegator, + scheduled_exit: when, + }); + Ok(().into()) + } + + /// Cancels every [DelegationAction::Revoke] request for a delegator towards a collator. + /// Each delegation must have a [DelegationAction::Revoke] scheduled that must be allowed to be + /// executed in the current round, for this function to succeed. + pub(crate) fn delegator_cancel_scheduled_revoke_all( + delegator: T::AccountId, + ) -> DispatchResultWithPostInfo { + let mut state = >::get(&delegator).ok_or(>::DelegatorDNE)?; + let mut updated_scheduled_requests = vec![]; + + // backwards compatible handling for DelegatorStatus::Leaving + #[allow(deprecated)] + if matches!(state.status, DelegatorStatus::Leaving(_)) { + state.status = DelegatorStatus::Active; + >::insert(delegator.clone(), state.clone()); + Self::deposit_event(Event::DelegatorExitCancelled { delegator }); + return Ok(().into()); + } + + // pre-validate that all delegations have a Revoke request. + for bond in &state.delegations.0 { + let collator = bond.owner.clone(); + let scheduled_requests = >::get(&collator); + scheduled_requests + .iter() + .find(|req| { + req.delegator == delegator && matches!(req.action, DelegationAction::Revoke(_)) + }) + .ok_or(>::DelegatorNotLeaving)?; + } + + // cancel all requests + for bond in state.delegations.0.clone() { + let collator = bond.owner.clone(); + let mut scheduled_requests = >::get(&collator); + Self::cancel_request_with_state(&delegator, &mut state, &mut scheduled_requests); + updated_scheduled_requests.push((collator, scheduled_requests)); + } + + updated_scheduled_requests + .into_iter() + .for_each(|(collator, scheduled_requests)| { + >::insert(collator, scheduled_requests); + }); + + >::insert(delegator.clone(), state); + Self::deposit_event(Event::DelegatorExitCancelled { delegator }); + + Ok(().into()) + } + + /// Executes every [DelegationAction::Revoke] request for a delegator towards a collator. + /// Each delegation must have a [DelegationAction::Revoke] scheduled that must be allowed to be + /// executed in the current round, for this function to succeed. + pub(crate) fn delegator_execute_scheduled_revoke_all( + delegator: T::AccountId, + delegation_count: u32, + ) -> DispatchResultWithPostInfo { + let mut state = >::get(&delegator).ok_or(>::DelegatorDNE)?; + ensure!( + delegation_count >= (state.delegations.0.len() as u32), + Error::::TooLowDelegationCountToLeaveDelegators + ); + let now = >::get().current; + + // backwards compatible handling for DelegatorStatus::Leaving + #[allow(deprecated)] + if let DelegatorStatus::Leaving(when) = state.status { + ensure!( + >::get().current >= when, + Error::::DelegatorCannotLeaveYet + ); + + for bond in state.delegations.0.clone() { + if let Err(error) = Self::delegator_leaves_candidate( + bond.owner.clone(), + delegator.clone(), + bond.amount, + ) { + log::warn!( + "STORAGE CORRUPTED \nDelegator leaving collator failed with error: {:?}", + error + ); + } + + Self::delegation_remove_request_with_state(&bond.owner, &delegator, &mut state); + } + >::remove(&delegator); + Self::deposit_event(Event::DelegatorLeft { + delegator, + unstaked_amount: state.total, + }); + return Ok(().into()); + } + + let mut validated_scheduled_requests = vec![]; + // pre-validate that all delegations have a Revoke request that can be executed now. + for bond in &state.delegations.0 { + let scheduled_requests = >::get(&bond.owner); + let request_idx = scheduled_requests + .iter() + .position(|req| { + req.delegator == delegator && matches!(req.action, DelegationAction::Revoke(_)) + }) + .ok_or(>::DelegatorNotLeaving)?; + let request = &scheduled_requests[request_idx]; + + ensure!( + request.when_executable <= now, + >::DelegatorCannotLeaveYet + ); + + validated_scheduled_requests.push((bond.clone(), scheduled_requests, request_idx)) + } + + let mut updated_scheduled_requests = vec![]; + // we do not update the delegator state, since the it will be completely removed + for (bond, mut scheduled_requests, request_idx) in validated_scheduled_requests { + let collator = bond.owner; + + if let Err(error) = + Self::delegator_leaves_candidate(collator.clone(), delegator.clone(), bond.amount) + { + log::warn!( + "STORAGE CORRUPTED \nDelegator {:?} leaving collator failed with error: {:?}", + delegator, + error + ); + } + + // remove the scheduled request, since it is fulfilled + scheduled_requests.remove(request_idx).action.amount(); + updated_scheduled_requests.push((collator, scheduled_requests)); + } + + // TODO: reveiew -- we're about to leave, so this is mostly extra work (extra writes) + Self::jit_ensure_delegator_reserve_migrated(&delegator)?; + + // set state.total so that state.adjust_bond_lock will remove lock + let unstaked_amount = state.total(); + state.total_sub::(unstaked_amount)?; + + updated_scheduled_requests + .into_iter() + .for_each(|(collator, scheduled_requests)| { + >::insert(collator, scheduled_requests); + }); + + Self::deposit_event(Event::DelegatorLeft { + delegator: delegator.clone(), + unstaked_amount, + }); + >::remove(&delegator); + + Ok(().into()) + } + /// Removes the delegator's existing [ScheduledRequest] towards a given collator, if exists. /// The state needs to be persisted by the caller of this function. pub(crate) fn delegation_remove_request_with_state( @@ -338,4 +579,124 @@ impl Pallet { .iter() .any(|req| &req.delegator == delegator) } + + /// Returns true if a [DelegationAction::Revoke] [ScheduledRequest] exists for a given delegation + pub fn delegation_request_revoke_exists( + collator: &T::AccountId, + delegator: &T::AccountId, + ) -> bool { + >::get(collator) + .iter() + .any(|req| { + &req.delegator == delegator && matches!(req.action, DelegationAction::Revoke(_)) + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{mock::Test, set::OrderedSet, Bond}; + + #[test] + fn test_cancel_request_with_state_removes_request_for_correct_delegator_and_updates_state() { + let mut state = Delegator { + id: 1, + delegations: OrderedSet::from(vec![Bond { + amount: 100, + owner: 2, + }]), + total: 100, + less_total: 100, + status: crate::DelegatorStatus::Active, + }; + let mut scheduled_requests = vec![ + ScheduledRequest { + delegator: 1, + when_executable: 1, + action: DelegationAction::Revoke(100), + }, + ScheduledRequest { + delegator: 2, + when_executable: 1, + action: DelegationAction::Decrease(50), + }, + ]; + let removed_request = + >::cancel_request_with_state(&1, &mut state, &mut scheduled_requests); + + assert_eq!( + removed_request, + Some(ScheduledRequest { + delegator: 1, + when_executable: 1, + action: DelegationAction::Revoke(100), + }) + ); + assert_eq!( + scheduled_requests, + vec![ScheduledRequest { + delegator: 2, + when_executable: 1, + action: DelegationAction::Decrease(50), + },] + ); + assert_eq!( + state, + Delegator { + id: 1, + delegations: OrderedSet::from(vec![Bond { + amount: 100, + owner: 2, + }]), + total: 100, + less_total: 0, + status: crate::DelegatorStatus::Active, + } + ); + } + + #[test] + fn test_cancel_request_with_state_does_nothing_when_request_does_not_exist() { + let mut state = Delegator { + id: 1, + delegations: OrderedSet::from(vec![Bond { + amount: 100, + owner: 2, + }]), + total: 100, + less_total: 100, + status: crate::DelegatorStatus::Active, + }; + let mut scheduled_requests = vec![ScheduledRequest { + delegator: 2, + when_executable: 1, + action: DelegationAction::Decrease(50), + }]; + let removed_request = + >::cancel_request_with_state(&1, &mut state, &mut scheduled_requests); + + assert_eq!(removed_request, None,); + assert_eq!( + scheduled_requests, + vec![ScheduledRequest { + delegator: 2, + when_executable: 1, + action: DelegationAction::Decrease(50), + },] + ); + assert_eq!( + state, + Delegator { + id: 1, + delegations: OrderedSet::from(vec![Bond { + amount: 100, + owner: 2, + }]), + total: 100, + less_total: 100, + status: crate::DelegatorStatus::Active, + } + ); + } } diff --git a/pallets/parachain-staking/src/inflation.rs b/pallets/parachain-staking/src/inflation.rs index f2181565e5..f6ec910b3d 100644 --- a/pallets/parachain-staking/src/inflation.rs +++ b/pallets/parachain-staking/src/inflation.rs @@ -26,13 +26,11 @@ use sp_runtime::{Perbill, RuntimeDebug}; use substrate_fixed::transcendental::pow as floatpow; use substrate_fixed::types::{I32F32, I64F64}; -const SECONDS_PER_YEAR: u32 = 31557600; -const SECONDS_PER_BLOCK: u32 = 12; -pub const BLOCKS_PER_YEAR: u32 = SECONDS_PER_YEAR / SECONDS_PER_BLOCK; - -fn rounds_per_year() -> u32 { - let blocks_per_round = >::round().length; - BLOCKS_PER_YEAR / blocks_per_round +fn rounds_per_year( + blocks_per_round: u32, + blocks_per_year: u32, +) -> u32 { + blocks_per_year / blocks_per_round } #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] @@ -84,8 +82,12 @@ pub fn perbill_annual_to_perbill_round( } } /// Convert annual inflation rate range to round inflation range -pub fn annual_to_round(annual: Range) -> Range { - let periods = rounds_per_year::(); +pub fn annual_to_round( + annual: Range, + blocks_per_round: u32, + blocks_per_year: u32, +) -> Range { + let periods = rounds_per_year(blocks_per_round, blocks_per_year); perbill_annual_to_perbill_round(annual, periods) } @@ -102,6 +104,10 @@ pub fn round_issuance_range(round: Range) -> Range { + /// blocks in a round + pub blocks_per_round: u32, + /// How many blocks are in a year. + pub blocks_per_year: u32, /// Staking expectations pub expect: Range, /// Annual inflation range @@ -111,24 +117,39 @@ pub struct InflationInfo { } impl InflationInfo { - pub fn new( + pub fn new( + blocks_per_round: u32, + blocks_per_year: u32, annual: Range, expect: Range, ) -> InflationInfo { + let round = annual_to_round( + annual, + blocks_per_round, + blocks_per_year, + ); InflationInfo { + blocks_per_year, + blocks_per_round, expect, annual, - round: annual_to_round::(annual), + round, } } /// Set round inflation range according to input annual inflation range - pub fn set_round_from_annual(&mut self, new: Range) { - self.round = annual_to_round::(new); + pub fn set_round_from_annual(&mut self, new: Range, blocks_per_round: u32) { + self.blocks_per_round = blocks_per_round; + self.round = annual_to_round( + new, + self.blocks_per_round, + self.blocks_per_year, + ); } /// Reset round inflation rate based on changes to round length pub fn reset_round(&mut self, new_length: u32) { - let periods = BLOCKS_PER_YEAR / new_length; - self.round = perbill_annual_to_perbill_round(self.annual, periods); + self.blocks_per_round = new_length; + let rounds_per_year = self.blocks_per_year / self.blocks_per_round; + self.round = perbill_annual_to_perbill_round(self.annual, rounds_per_year); } /// Set staking expectations pub fn set_expectations(&mut self, expect: Range) { diff --git a/pallets/parachain-staking/src/lib.rs b/pallets/parachain-staking/src/lib.rs index ba4eafe3ea..7d22c88d33 100644 --- a/pallets/parachain-staking/src/lib.rs +++ b/pallets/parachain-staking/src/lib.rs @@ -81,7 +81,10 @@ pub mod pallet { }; use crate::{set::OrderedSet, traits::*, types::*, InflationInfo, Range, WeightInfo}; use frame_support::pallet_prelude::*; - use frame_support::traits::{Currency, Get, Imbalance, ReservableCurrency}; + use frame_support::traits::{ + tokens::WithdrawReasons, Currency, Get, Imbalance, LockIdentifier, LockableCurrency, + ReservableCurrency, + }; use frame_system::pallet_prelude::*; use parity_scale_codec::Decode; use sp_runtime::{ @@ -100,13 +103,18 @@ pub mod pallet { pub type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; + pub const COLLATOR_LOCK_ID: LockIdentifier = *b"stkngcol"; + pub const DELEGATOR_LOCK_ID: LockIdentifier = *b"stkngdel"; + /// Configuration trait of this pallet. #[pallet::config] pub trait Config: frame_system::Config { /// Overarching event type type Event: From> + IsType<::Event>; /// The currency type - type Currency: Currency + ReservableCurrency; + type Currency: Currency + + ReservableCurrency + + LockableCurrency; /// The origin for monetary governance type MonetaryGovernanceOrigin: EnsureOrigin; /// Minimum number of blocks per round @@ -216,6 +224,7 @@ pub mod pallet { PendingDelegationRequestAlreadyExists, PendingDelegationRequestNotDueYet, CannotDelegateLessThanOrEqualToLowestBottomWhenFull, + PendingDelegationRevoke, } #[pallet::event] @@ -462,18 +471,6 @@ pub mod pallet { /// Current round index and next round scheduled transition pub(crate) type Round = StorageValue<_, RoundInfo, ValueQuery>; - #[pallet::storage] - #[pallet::getter(fn nominator_state2)] - /// DEPRECATED in favor of DelegatorState - /// Get nominator state associated with an account if account is nominating else None - pub(crate) type NominatorState2 = StorageMap< - _, - Twox64Concat, - T::AccountId, - Nominator2>, - OptionQuery, - >; - #[pallet::storage] #[pallet::getter(fn delegator_state)] /// Get delegator state associated with an account if account is delegating else None @@ -485,24 +482,22 @@ pub mod pallet { OptionQuery, >; - #[pallet::storage] - #[pallet::getter(fn candidate_state)] - /// DEPRECATED - /// Get collator candidate state associated with an account if account is a candidate else None - pub(crate) type CandidateState = StorageMap< - _, - Twox64Concat, - T::AccountId, - CollatorCandidate>, - OptionQuery, - >; - #[pallet::storage] #[pallet::getter(fn candidate_info)] /// Get collator candidate info associated with an account if account is candidate else None pub(crate) type CandidateInfo = StorageMap<_, Twox64Concat, T::AccountId, CandidateMetadata>, OptionQuery>; + #[pallet::storage] + /// Temporary storage item to track whether a given delegator's reserve has been migrated. + pub(crate) type DelegatorReserveToLockMigrations = + StorageMap<_, Twox64Concat, T::AccountId, bool, ValueQuery>; + + #[pallet::storage] + /// Temporary storage item to track whether a given collator's reserve has been migrated. + pub(crate) type CollatorReserveToLockMigrations = + StorageMap<_, Twox64Concat, T::AccountId, bool, ValueQuery>; + /// Stores outstanding delegation requests per collator. #[pallet::storage] #[pallet::getter(fn delegation_scheduled_requests)] @@ -536,18 +531,6 @@ pub mod pallet { OptionQuery, >; - #[pallet::storage] - #[pallet::getter(fn collator_state2)] - /// DEPRECATED in favor of CandidateState - /// Get collator state associated with an account if account is collating else None - pub(crate) type CollatorState2 = StorageMap< - _, - Twox64Concat, - T::AccountId, - Collator2>, - OptionQuery, - >; - #[pallet::storage] #[pallet::getter(fn selected_candidates)] /// The collator candidates selected for the current round @@ -638,7 +621,7 @@ pub mod pallet { // Initialize the candidates for &(ref candidate, balance) in &self.candidates { assert!( - T::Currency::free_balance(candidate) >= balance, + >::get_collator_stakable_free_balance(candidate) >= balance, "Account does not have enough balance to bond as a candidate." ); candidate_count = candidate_count.saturating_add(1u32); @@ -657,7 +640,7 @@ pub mod pallet { // Initialize the delegations for &(ref delegator, ref target, balance) in &self.delegations { assert!( - T::Currency::free_balance(delegator) >= balance, + >::get_delegator_stakable_free_balance(delegator) >= balance, "Account does not have enough balance to place delegation." ); let cd_count = if let Some(x) = col_delegator_count.get(target) { @@ -755,7 +738,7 @@ pub mod pallet { let mut config = >::get(); ensure!(config.annual != schedule, Error::::NoWritingSameValue); config.annual = schedule; - config.set_round_from_annual::(schedule); + config.set_round_from_annual(schedule, >::get().length); Self::deposit_event(Event::InflationSet { annual_min: config.annual.min, annual_ideal: config.annual.ideal, @@ -899,9 +882,14 @@ pub mod pallet { }), Error::::CandidateExists ); - T::Currency::reserve(&acc, bond)?; + ensure!( + Self::get_collator_stakable_free_balance(&acc) >= bond, + Error::::InsufficientBalance, + ); + T::Currency::set_lock(COLLATOR_LOCK_ID, &acc, bond, WithdrawReasons::all()); let candidate = CandidateMetadata::new(bond); >::insert(&acc, candidate); + >::insert(&acc, true); let empty_delegations: Delegations> = Default::default(); // insert empty top delegations >::insert(&acc, empty_delegations.clone()); @@ -960,15 +948,15 @@ pub mod pallet { Error::::TooLowCandidateDelegationCountToLeaveCandidates ); state.can_leave::()?; - let return_stake = |bond: Bond>| { - T::Currency::unreserve(&bond.owner, bond.amount); + let return_stake = |bond: Bond>| -> DispatchResult { // remove delegation from delegator state let mut delegator = DelegatorState::::get(&bond.owner).expect( "Collator state and delegator state are consistent. Collator state has a record of this delegation. Therefore, Delegator state also has a record. qed.", ); - if let Some(remaining) = delegator.rm_delegation(&candidate) { + + if let Some(remaining) = delegator.rm_delegation::(&candidate) { Self::delegation_remove_request_with_state( &candidate, &bond.owner, @@ -980,10 +968,16 @@ pub mod pallet { // since it is assumed that they were removed incrementally before only the // last delegation was left. >::remove(&bond.owner); + T::Currency::remove_lock(DELEGATOR_LOCK_ID, &bond.owner); } else { >::insert(&bond.owner, delegator); } + } else { + // TODO: review. we assume here that this delegator has no remaining staked + // balance, so we ensure the lock is cleared + T::Currency::remove_lock(DELEGATOR_LOCK_ID, &bond.owner); } + Ok(()) }; // total backing stake is at least the candidate self bond let mut total_backing = state.bond; @@ -991,19 +985,21 @@ pub mod pallet { let top_delegations = >::take(&candidate).expect("CandidateInfo existence checked"); for bond in top_delegations.delegations { - return_stake(bond); + return_stake(bond)?; } total_backing = total_backing.saturating_add(top_delegations.total); // return all bottom delegations let bottom_delegations = >::take(&candidate).expect("CandidateInfo existence checked"); for bond in bottom_delegations.delegations { - return_stake(bond); + return_stake(bond)?; } total_backing = total_backing.saturating_add(bottom_delegations.total); // return stake to collator - T::Currency::unreserve(&candidate, state.bond); + Self::jit_ensure_collator_reserve_migrated(&candidate)?; + T::Currency::remove_lock(COLLATOR_LOCK_ID, &candidate); >::remove(&candidate); + >::remove(&candidate); >::remove(&candidate); >::remove(&candidate); let new_total_staked = >::get().saturating_sub(total_backing); @@ -1158,11 +1154,11 @@ pub mod pallet { let delegator = ensure_signed(origin)?; // check that caller can reserve the amount before any changes to storage ensure!( - T::Currency::can_reserve(&delegator, amount), + Self::get_delegator_stakable_free_balance(&delegator) >= amount, Error::::InsufficientBalance ); - let delegator_state = if let Some(mut state) = >::get(&delegator) { - ensure!(state.is_active(), Error::::CannotDelegateIfLeaving); + let mut delegator_state = if let Some(mut state) = >::get(&delegator) + { // delegation after first ensure!( amount >= T::MinDelegation::get(), @@ -1183,6 +1179,7 @@ pub mod pallet { }), Error::::AlreadyDelegatedCandidate ); + Self::jit_ensure_delegator_reserve_migrated(&delegator)?; state } else { // first delegation @@ -1205,8 +1202,8 @@ pub mod pallet { amount, }, )?; - T::Currency::reserve(&delegator, amount) - .expect("verified can reserve at top of this extrinsic body"); + // TODO: causes redundant free_balance check + delegator_state.adjust_bond_lock::(BondAdjust::Increase(amount))?; // only is_some if kicked the lowest bottom as a consequence of this new delegation let net_total_increase = if let Some(less) = less_total_staked { amount.saturating_sub(less) @@ -1217,6 +1214,7 @@ pub mod pallet { >::put(new_total_locked); >::insert(&candidate, state); >::insert(&delegator, delegator_state); + >::insert(&delegator, true); Self::deposit_event(Event::Delegation { delegator: delegator, locked_amount: amount, @@ -1226,21 +1224,12 @@ pub mod pallet { Ok(().into()) } #[pallet::weight(::WeightInfo::schedule_leave_delegators())] - /// Request to leave the set of delegators. If successful, the caller is scheduled - /// to be allowed to exit. Success forbids future delegator actions until the request is - /// invoked or cancelled. + /// Request to leave the set of delegators. If successful, the caller is scheduled to be + /// allowed to exit via a [DelegationAction::Revoke] towards all existing delegations. + /// Success forbids future delegation requests until the request is invoked or cancelled. pub fn schedule_leave_delegators(origin: OriginFor) -> DispatchResultWithPostInfo { - let acc = ensure_signed(origin)?; - let mut state = >::get(&acc).ok_or(Error::::DelegatorDNE)?; - ensure!(!state.is_leaving(), Error::::DelegatorAlreadyLeaving); - let (now, when) = state.schedule_leave::(); - >::insert(&acc, state); - Self::deposit_event(Event::DelegatorExitScheduled { - round: now, - delegator: acc, - scheduled_exit: when, - }); - Ok(().into()) + let delegator = ensure_signed(origin)?; + Self::delegator_schedule_revoke_all(delegator) } #[pallet::weight(::WeightInfo::execute_leave_delegators(*delegation_count))] /// Execute the right to exit the set of delegators and revoke all ongoing delegations. @@ -1250,43 +1239,14 @@ pub mod pallet { delegation_count: u32, ) -> DispatchResultWithPostInfo { ensure_signed(origin)?; - let mut state = >::get(&delegator).ok_or(Error::::DelegatorDNE)?; - state.can_execute_leave::(delegation_count)?; - for bond in state.delegations.0.clone() { - if let Err(error) = Self::delegator_leaves_candidate( - bond.owner.clone(), - delegator.clone(), - bond.amount, - ) { - log::warn!( - "STORAGE CORRUPTED \nDelegator leaving collator failed with error: {:?}", - error - ); - } - - Self::delegation_remove_request_with_state(&bond.owner, &delegator, &mut state); - } - >::remove(&delegator); - Self::deposit_event(Event::DelegatorLeft { - delegator: delegator, - unstaked_amount: state.total, - }); - Ok(().into()) + Self::delegator_execute_scheduled_revoke_all(delegator, delegation_count) } #[pallet::weight(::WeightInfo::cancel_leave_delegators())] /// Cancel a pending request to exit the set of delegators. Success clears the pending exit /// request (thereby resetting the delay upon another `leave_delegators` call). pub fn cancel_leave_delegators(origin: OriginFor) -> DispatchResultWithPostInfo { let delegator = ensure_signed(origin)?; - // ensure delegator state exists - let mut state = >::get(&delegator).ok_or(Error::::DelegatorDNE)?; - // ensure state is leaving - ensure!(state.is_leaving(), Error::::DelegatorDNE); - // cancel exit request - state.cancel_leave(); - >::insert(&delegator, state); - Self::deposit_event(Event::DelegatorExitCancelled { delegator }); - Ok(().into()) + Self::delegator_cancel_scheduled_revoke_all(delegator) } #[pallet::weight(::WeightInfo::schedule_revoke_delegation())] @@ -1308,6 +1268,10 @@ pub mod pallet { more: BalanceOf, ) -> DispatchResultWithPostInfo { let delegator = ensure_signed(origin)?; + ensure!( + !Self::delegation_request_revoke_exists(&candidate, &delegator), + Error::::PendingDelegationRevoke + ); let mut state = >::get(&delegator).ok_or(Error::::DelegatorDNE)?; state.increase_delegation::(candidate.clone(), more)?; Ok(().into()) @@ -1344,6 +1308,114 @@ pub mod pallet { let delegator = ensure_signed(origin)?; Self::delegation_cancel_request(candidate, delegator) } + + /// Hotfix to remove existing empty entries for candidates that have left. + #[pallet::weight( + T::DbWeight::get().reads_writes(2 * candidates.len() as u64, candidates.len() as u64) + )] + pub fn hotfix_remove_delegation_requests_exited_candidates( + origin: OriginFor, + candidates: Vec, + ) -> DispatchResult { + ensure_signed(origin)?; + ensure!(candidates.len() < 100, >::InsufficientBalance); + for candidate in &candidates { + ensure!( + >::get(&candidate).is_none(), + >::CandidateNotLeaving + ); + ensure!( + >::get(&candidate).is_empty(), + >::CandidateNotLeaving + ); + } + + for candidate in candidates { + >::remove(candidate); + } + + Ok(().into()) + } + + /// Hotfix to migrate a delegator's reserve to a lock. For any given delegator in the + /// provided list: + /// * this fn is idempotent + /// * is safe to call if the delegator doesn't exist + /// * is safe to call if the delegator has been migrated + /// * is safe to call if the delegator is a collator (this is a no-op) + /// + /// weight calculation: + /// reads: + /// * DelegatorReserveToLockMigrations + /// * DelegatorState + /// writes: + /// * unreserve() + /// * set_lock() + /// * DelegatorReserveToLockMigrations + /// other: 50M flat weight + 100M weight per item + #[pallet::weight( + T::DbWeight::get().reads_writes( + 2 * delegators.len() as u64, + 3 * delegators.len() as u64 + ) + .saturating_add((delegators.len() as Weight).saturating_mul(100_000_000 as Weight)) + .saturating_add(50_000_000 as Weight) + )] + pub fn hotfix_migrate_delegators_from_reserve_to_locks( + origin: OriginFor, + delegators: Vec, + ) -> DispatchResult { + ensure_signed(origin)?; + ensure!( + delegators.len() < 100, + DispatchError::Other("Exceeded max allowed delegators.") + ); + for delegator in &delegators { + let _ = Self::jit_ensure_delegator_reserve_migrated(&delegator); // ignore error + } + + Ok(().into()) + } + + /// Hotfix to migrate a collator's reserve to a lock. For any given collator in the + /// provided list: + /// * this fn is idempotent + /// * is safe to call if the collator doesn't exist + /// * is safe to call if the collator has been migrated + /// * is safe to call if the collator is a collator (this is a no-op) + /// + /// weight calculation: + /// reads: + /// * CollatorReserveToLockMigrations + /// * CandidateInfo + /// writes: + /// * unreserve() + /// * set_lock() + /// * CollatorReserveToLockMigrations + /// other: 50M flat weight + 100M weight per item + #[pallet::weight( + T::DbWeight::get().reads_writes( + 2 * collators.len() as u64, + 3 * collators.len() as u64 + ) + .saturating_add((collators.len() as Weight).saturating_mul(100_000_000 as Weight)) + .saturating_add(50_000_000 as Weight) + )] + pub fn hotfix_migrate_collators_from_reserve_to_locks( + origin: OriginFor, + collators: Vec, + ) -> DispatchResult { + ensure_signed(origin)?; + ensure!( + collators.len() < 100, + DispatchError::Other("Exceeded max allowed collators.") + ); + for collator in &collators { + let _ = Self::jit_ensure_collator_reserve_migrated(&collator); // ignore error + } + + Ok(().into()) + } } impl Pallet { @@ -1356,6 +1428,22 @@ pub mod pallet { pub fn is_selected_candidate(acc: &T::AccountId) -> bool { >::get().binary_search(acc).is_ok() } + /// Returns an account's free balance which is not locked in delegation staking + pub fn get_delegator_stakable_free_balance(acc: &T::AccountId) -> BalanceOf { + let mut balance = T::Currency::free_balance(acc); + if let Some(state) = >::get(acc) { + balance = balance.saturating_sub(state.total()); + } + balance + } + /// Returns an account's free balance which is not locked in collator staking + pub fn get_collator_stakable_free_balance(acc: &T::AccountId) -> BalanceOf { + let mut balance = T::Currency::free_balance(acc); + if let Some(info) = >::get(acc) { + balance = balance.saturating_sub(info.bond); + } + balance + } /// Caller must ensure candidate is active before calling pub(crate) fn update_active(candidate: T::AccountId, total: BalanceOf) { let mut candidates = >::get(); @@ -1388,7 +1476,6 @@ pub mod pallet { ) -> DispatchResult { let mut state = >::get(&candidate).ok_or(Error::::CandidateDNE)?; state.rm_delegation_if_exists::(&candidate, delegator.clone(), amount)?; - T::Currency::unreserve(&delegator, amount); let new_total_locked = >::get().saturating_sub(amount); >::put(new_total_locked); let new_total = state.total_counted; @@ -1677,6 +1764,52 @@ pub mod pallet { }) .collect() } + + /// Temporary JIT migration of a single delegator's reserve -> lock. This will query + /// whether or not the given delegator has been migrated and migrate it if not. This should + /// be removeable once all on-chain delegators have been migrated. + pub(crate) fn jit_ensure_delegator_reserve_migrated( + delegator: &T::AccountId, + ) -> DispatchResult { + let is_migrated = >::get(&delegator); + if !is_migrated { + let delegator_state = + >::get(&delegator).ok_or(Error::::DelegatorDNE)?; + let reserved = delegator_state.total(); + let _remaining = T::Currency::unreserve(&delegator, reserved); + T::Currency::set_lock( + DELEGATOR_LOCK_ID, + &delegator, + reserved, + WithdrawReasons::all(), + ); + >::insert(&delegator, true); + } + Ok(()) + } + + /// Temporary JIT migration of a single collator's reserve -> lock. This will query + /// whether or not the given collator has been migrated and migrate it if not. This should + /// be removeable once all on-chain collators have been migrated. + pub(crate) fn jit_ensure_collator_reserve_migrated( + collator: &T::AccountId, + ) -> DispatchResult { + let is_migrated = >::get(&collator); + if !is_migrated { + let collator_info = + >::get(&collator).ok_or(Error::::CandidateDNE)?; + let reserved = collator_info.bond; + let _remaining = T::Currency::unreserve(&collator, reserved); + T::Currency::set_lock( + COLLATOR_LOCK_ID, + &collator, + reserved, + WithdrawReasons::all(), + ); + >::insert(&collator, true); + } + Ok(()) + } } // /// Add reward points to block authors: diff --git a/pallets/parachain-staking/src/migrations.rs b/pallets/parachain-staking/src/migrations.rs index de04580512..ea186fee95 100644 --- a/pallets/parachain-staking/src/migrations.rs +++ b/pallets/parachain-staking/src/migrations.rs @@ -24,9 +24,8 @@ use crate::pallet::{DelegationScheduledRequests, DelegatorState, Total}; use crate::types::deprecated::{DelegationChange, Delegator as OldDelegator}; use crate::types::Delegator; use crate::{ - BalanceOf, Bond, BottomDelegations, CandidateInfo, CandidateMetadata, CandidateState, - CapacityStatus, CollatorCandidate, Config, Delegations, Event, Pallet, Points, Round, Staked, - TopDelegations, + BalanceOf, Bond, BottomDelegations, CandidateInfo, CandidateMetadata, CapacityStatus, + CollatorCandidate, Config, Delegations, Event, Pallet, Points, Round, Staked, TopDelegations, }; #[cfg(feature = "try-runtime")] use frame_support::traits::OnRuntimeUpgradeHelpersExt; @@ -138,6 +137,7 @@ impl OnRuntimeUpgrade for SplitDelegatorStateIntoDelegationScheduledR less_total: old_state.requests.less_total, status: old_state.status, }; + Some(new_state) }, ); @@ -354,6 +354,7 @@ impl OnRuntimeUpgrade for PatchIncorrectDelegationSums { } } +/* /// Migration to split CandidateState and minimize unnecessary storage reads /// for PoV optimization /// This assumes Config::MaxTopDelegationsPerCandidate == OldConfig::MaxDelegatorsPerCandidate @@ -405,7 +406,7 @@ impl OnRuntimeUpgrade for SplitCandidateStateToDecreasePoV { let mut delegator_state = >::get(&owner) .expect("Delegation existence => DelegatorState existence"); let leaving = delegator_state.delegations.0.len() == 1usize; - delegator_state.rm_delegation(&account); + delegator_state.rm_delegation::(&account); Pallet::::deposit_event(Event::DelegationKicked { delegator: owner.clone(), candidate: account.clone(), @@ -521,95 +522,7 @@ impl OnRuntimeUpgrade for SplitCandidateStateToDecreasePoV { Ok(()) } } - -/// Migration to properly increase maximum delegations per collator -/// The logic may be used to recompute the top and bottom delegations whenever -/// MaxTopDelegationsPerCandidate changes (works for if decreases as well) -pub struct IncreaseMaxDelegationsPerCandidate(PhantomData); -impl OnRuntimeUpgrade for IncreaseMaxDelegationsPerCandidate { - fn on_runtime_upgrade() -> Weight { - let (mut reads, mut writes) = (0u64, 0u64); - for (account, state) in >::iter() { - reads = reads.saturating_add(1u64); - // 1. collect all delegations into single vec and order them - let mut all_delegations = state.top_delegations.clone(); - let mut starting_bottom_delegations = state.bottom_delegations.clone(); - all_delegations.append(&mut starting_bottom_delegations); - // sort all delegations from greatest to least - all_delegations.sort_unstable_by(|a, b| b.amount.cmp(&a.amount)); - let top_n = T::MaxTopDelegationsPerCandidate::get() as usize; - // 2. split them into top and bottom using the T::MaxNominatorsPerCollator - let top_delegations: Vec>> = - all_delegations.iter().take(top_n).cloned().collect(); - let bottom_delegations = if all_delegations.len() > top_n { - let rest = all_delegations.len() - top_n; - let bottom: Vec>> = - all_delegations.iter().rev().take(rest).cloned().collect(); - bottom - } else { - // empty, all nominations are in top - Vec::new() - }; - let (mut total_counted, mut total_backing): (BalanceOf, BalanceOf) = - (state.bond.into(), state.bond.into()); - for Bond { amount, .. } in &top_delegations { - total_counted = total_counted.saturating_add(*amount); - total_backing = total_backing.saturating_add(*amount); - } - for Bond { amount, .. } in &bottom_delegations { - total_backing = total_backing.saturating_add(*amount); - } - // update candidate pool with new total counted if it changed - if state.total_counted != total_counted && state.is_active() { - reads = reads.saturating_add(1u64); - writes = writes.saturating_add(1u64); - >::update_active(account.clone(), total_counted); - } - >::insert( - account, - CollatorCandidate { - top_delegations, - bottom_delegations, - total_counted, - total_backing, - ..state - }, - ); - writes = writes.saturating_add(1u64); - } - let weight = T::DbWeight::get(); - // 20% of the max block weight as safety margin for computation - weight.reads(reads) + weight.writes(writes) + 100_000_000_000 - } - #[cfg(feature = "try-runtime")] - fn pre_upgrade() -> Result<(), &'static str> { - // get delegation count for all candidates to check consistency - for (account, state) in >::iter() { - // insert top + bottom into some temp map? - let total_delegation_count = - state.top_delegations.len() as u32 + state.bottom_delegations.len() as u32; - Self::set_temp_storage( - total_delegation_count, - &format!("Candidate{:?}DelegationCount", account)[..], - ); - } - Ok(()) - } - - #[cfg(feature = "try-runtime")] - fn post_upgrade() -> Result<(), &'static str> { - // check that top + bottom are the same as the expected (stored in temp) - for (account, state) in >::iter() { - let expected_count: u32 = - Self::get_temp_storage(&format!("Candidate{:?}DelegationCount", account)[..]) - .expect("qed"); - let actual_count = - state.top_delegations.len() as u32 + state.bottom_delegations.len() as u32; - assert_eq!(expected_count, actual_count); - } - Ok(()) - } -} +*/ /// Migration to replace the automatic ExitQueue with a manual exits API. /// This migration is idempotent so it can be run more than once without any risk. diff --git a/pallets/parachain-staking/src/mock.rs b/pallets/parachain-staking/src/mock.rs index 06e2709602..3d24e6e9cd 100644 --- a/pallets/parachain-staking/src/mock.rs +++ b/pallets/parachain-staking/src/mock.rs @@ -15,11 +15,18 @@ // along with Moonbeam. If not, see . //! Test utilities -use crate as parachain_staking; -use crate::{pallet, AwardedPts, Config, InflationInfo, Points, Range}; +use crate as pallet_parachain_staking; +use crate::{ + pallet, AwardedPts, CandidateInfo, CollatorReserveToLockMigrations, Config, + DelegatorReserveToLockMigrations, DelegatorState, InflationInfo, Points, Range, + COLLATOR_LOCK_ID, DELEGATOR_LOCK_ID, +}; use frame_support::{ construct_runtime, parameter_types, - traits::{Everything, GenesisBuild, OnFinalize, OnInitialize}, + traits::{ + Everything, GenesisBuild, LockIdentifier, LockableCurrency, OnFinalize, OnInitialize, + ReservableCurrency, + }, weights::Weight, }; use sp_core::H256; @@ -46,7 +53,7 @@ construct_runtime!( { System: frame_system::{Pallet, Call, Config, Storage, Event}, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - ParachainStaking: parachain_staking::{Pallet, Call, Storage, Config, Event}, + ParachainStaking: pallet_parachain_staking::{Pallet, Call, Storage, Config, Event}, } ); @@ -161,6 +168,8 @@ impl Default for ExtBuilder { delegations: vec![], collators: vec![], inflation: InflationInfo { + blocks_per_round: MinBlocksPerRound::get(), + blocks_per_year: 31557600 / 12, expect: Range { min: 700, ideal: 700, @@ -218,7 +227,7 @@ impl ExtBuilder { } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); - parachain_staking::GenesisConfig:: { + pallet_parachain_staking::GenesisConfig:: { candidates: self.collators, delegations: self.delegations, inflation_config: self.inflation, @@ -405,6 +414,38 @@ pub(crate) fn set_author(round: u32, acc: u64, pts: u32) { >::mutate(round, acc, |p| *p += pts); } +/// fn to query the lock amount +pub(crate) fn query_lock_amount(account_id: u64, id: LockIdentifier) -> Option { + for lock in Balances::locks(&account_id) { + if lock.id == id { + return Some(lock.amount); + } + } + None +} + +/// fn to reverse-migrate a delegator account from locks back to reserve. +/// This is used to test the reserve -> lock migration. +pub(crate) fn unmigrate_delegator_from_lock_to_reserve(account_id: u64) { + >::remove(&account_id); + Balances::remove_lock(DELEGATOR_LOCK_ID, &account_id); + + if let Some(delegator_state) = >::get(&account_id) { + Balances::reserve(&account_id, delegator_state.total()).expect("reserve() failed"); + } +} + +/// fn to reverse-migrate a collator account from locks back to reserve. +/// This is used to test the reserve -> lock migration. +pub(crate) fn unmigrate_collator_from_lock_to_reserve(account_id: u64) { + >::remove(&account_id); + Balances::remove_lock(COLLATOR_LOCK_ID, &account_id); + + if let Some(collator_state) = >::get(&account_id) { + Balances::reserve(&account_id, collator_state.bond).expect("reserve() failed"); + } +} + #[test] fn geneses() { ExtBuilder::default() @@ -425,28 +466,45 @@ fn geneses() { .execute_with(|| { assert!(System::events().is_empty()); // collators - assert_eq!(Balances::reserved_balance(&1), 500); - assert_eq!(Balances::free_balance(&1), 500); + assert_eq!( + ParachainStaking::get_collator_stakable_free_balance(&1), + 500 + ); + assert_eq!(query_lock_amount(1, COLLATOR_LOCK_ID), Some(500)); assert!(ParachainStaking::is_candidate(&1)); - assert_eq!(Balances::reserved_balance(&2), 200); - assert_eq!(Balances::free_balance(&2), 100); + assert_eq!(query_lock_amount(2, COLLATOR_LOCK_ID), Some(200)); + assert_eq!( + ParachainStaking::get_collator_stakable_free_balance(&2), + 100 + ); assert!(ParachainStaking::is_candidate(&2)); // delegators for x in 3..7 { assert!(ParachainStaking::is_delegator(&x)); - assert_eq!(Balances::free_balance(&x), 0); - assert_eq!(Balances::reserved_balance(&x), 100); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&x), 0); + assert_eq!(query_lock_amount(x, DELEGATOR_LOCK_ID), Some(100)); } // uninvolved for x in 7..10 { assert!(!ParachainStaking::is_delegator(&x)); } - assert_eq!(Balances::free_balance(&7), 100); - assert_eq!(Balances::reserved_balance(&7), 0); - assert_eq!(Balances::free_balance(&8), 9); - assert_eq!(Balances::reserved_balance(&8), 0); - assert_eq!(Balances::free_balance(&9), 4); - assert_eq!(Balances::reserved_balance(&9), 0); + // no delegator staking locks + assert_eq!(query_lock_amount(7, DELEGATOR_LOCK_ID), None); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&7), + 100 + ); + assert_eq!(query_lock_amount(8, DELEGATOR_LOCK_ID), None); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&8), 9); + assert_eq!(query_lock_amount(9, DELEGATOR_LOCK_ID), None); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&9), 4); + // no collator staking locks + assert_eq!( + ParachainStaking::get_collator_stakable_free_balance(&7), + 100 + ); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&8), 9); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&9), 4); }); ExtBuilder::default() .with_balances(vec![ @@ -475,17 +533,20 @@ fn geneses() { // collators for x in 1..5 { assert!(ParachainStaking::is_candidate(&x)); - assert_eq!(Balances::free_balance(&x), 80); - assert_eq!(Balances::reserved_balance(&x), 20); + assert_eq!(query_lock_amount(x, COLLATOR_LOCK_ID), Some(20)); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&x), 80); } assert!(ParachainStaking::is_candidate(&5)); - assert_eq!(Balances::free_balance(&5), 90); - assert_eq!(Balances::reserved_balance(&5), 10); + assert_eq!(query_lock_amount(5, COLLATOR_LOCK_ID), Some(10)); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&5), 90); // delegators for x in 6..11 { assert!(ParachainStaking::is_delegator(&x)); - assert_eq!(Balances::free_balance(&x), 90); - assert_eq!(Balances::reserved_balance(&x), 10); + assert_eq!(query_lock_amount(x, DELEGATOR_LOCK_ID), Some(10)); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&x), + 90 + ); } }); } diff --git a/pallets/parachain-staking/src/tests.rs b/pallets/parachain-staking/src/tests.rs index 2b70dd7efe..4ef76e110e 100644 --- a/pallets/parachain-staking/src/tests.rs +++ b/pallets/parachain-staking/src/tests.rs @@ -27,13 +27,13 @@ use crate::mock::{ Event as MetaEvent, ExtBuilder, Origin, ParachainStaking, Test, }; use crate::{ - assert_eq_events, assert_eq_last_events, assert_event_emitted, assert_event_not_emitted, - assert_last_event, assert_tail_eq, set::OrderedSet, AtStake, Bond, BottomDelegations, - CandidateInfo, CandidateMetadata, CandidatePool, CandidateState, CapacityStatus, - CollatorCandidate, CollatorStatus, Config, Delegations, Delegator, DelegatorAdded, - DelegatorState, DelegatorStatus, Error, Event, Range, TopDelegations, Total, + assert_eq_events, assert_eq_last_events, assert_event_emitted, assert_last_event, + assert_tail_eq, set::OrderedSet, AtStake, Bond, BottomDelegations, CandidateInfo, + CandidateMetadata, CandidatePool, CapacityStatus, CollatorStatus, DelegationScheduledRequests, + Delegations, DelegatorAdded, DelegatorState, DelegatorStatus, Error, Event, Range, + TopDelegations, DELEGATOR_LOCK_ID, }; -use frame_support::{assert_noop, assert_ok, traits::ReservableCurrency}; +use frame_support::{assert_noop, assert_ok}; use sp_runtime::{traits::Zero, DispatchError, ModuleError, Perbill, Percent}; // ~~ ROOT ~~ @@ -656,15 +656,13 @@ fn join_candidates_reserves_balance() { .with_balances(vec![(1, 10)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&1), 0); - assert_eq!(Balances::free_balance(&1), 10); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 10); assert_ok!(ParachainStaking::join_candidates( Origin::signed(1), 10u128, 0u32 )); - assert_eq!(Balances::reserved_balance(&1), 10); - assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 0); }); } @@ -771,8 +769,8 @@ fn cannot_join_candidates_with_more_than_available_balance() { assert_noop!( ParachainStaking::join_candidates(Origin::signed(1), 501u128, 100u32), DispatchError::Module(ModuleError { - index: 1, - error: [2, 0, 0, 0], + index: 2, + error: [8, 0, 0, 0], message: Some("InsufficientBalance") }) ); @@ -1004,8 +1002,7 @@ fn execute_leave_candidates_unreserves_balance() { .with_candidates(vec![(1, 10)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&1), 10); - assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 0); assert_ok!(ParachainStaking::schedule_leave_candidates( Origin::signed(1), 1u32 @@ -1016,8 +1013,7 @@ fn execute_leave_candidates_unreserves_balance() { 1, 0 )); - assert_eq!(Balances::reserved_balance(&1), 0); - assert_eq!(Balances::free_balance(&1), 10); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 10); }); } @@ -1064,7 +1060,7 @@ fn execute_leave_candidates_removes_candidate_state() { 1, 0 )); - assert!(ParachainStaking::candidate_state(1).is_none()); + assert!(ParachainStaking::candidate_info(1).is_none()); }); } @@ -1104,13 +1100,17 @@ fn execute_leave_candidates_removes_pending_delegation_requests() { 1, 1 )); - assert!(ParachainStaking::candidate_state(1).is_none()); + assert!(ParachainStaking::candidate_info(1).is_none()); assert!( !ParachainStaking::delegation_scheduled_requests(&1) .iter() .any(|x| x.delegator == 2), "delegation request not removed" - ) + ); + assert!( + !>::contains_key(&1), + "the key was not removed from storage" + ); }); } @@ -1393,11 +1393,9 @@ fn candidate_bond_more_reserves_balance() { .with_candidates(vec![(1, 20)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&1), 20); - assert_eq!(Balances::free_balance(&1), 30); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 30); assert_ok!(ParachainStaking::candidate_bond_more(Origin::signed(1), 30)); - assert_eq!(Balances::reserved_balance(&1), 50); - assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 0); }); } @@ -1585,8 +1583,7 @@ fn execute_candidate_bond_less_unreserves_balance() { .with_candidates(vec![(1, 30)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&1), 30); - assert_eq!(Balances::free_balance(&1), 0); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 0); assert_ok!(ParachainStaking::schedule_candidate_bond_less( Origin::signed(1), 10 @@ -1596,8 +1593,7 @@ fn execute_candidate_bond_less_unreserves_balance() { Origin::signed(1), 1 )); - assert_eq!(Balances::reserved_balance(&1), 20); - assert_eq!(Balances::free_balance(&1), 10); + assert_eq!(ParachainStaking::get_collator_stakable_free_balance(&1), 10); }); } @@ -1760,11 +1756,12 @@ fn delegate_reserves_balance() { .with_candidates(vec![(1, 30)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&2), 0); - assert_eq!(Balances::free_balance(&2), 10); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&2), + 10 + ); assert_ok!(ParachainStaking::delegate(Origin::signed(2), 1, 10, 0, 0)); - assert_eq!(Balances::reserved_balance(&2), 10); - assert_eq!(Balances::free_balance(&2), 0); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&2), 0); }); } @@ -1779,7 +1776,7 @@ fn delegate_updates_delegator_state() { assert_ok!(ParachainStaking::delegate(Origin::signed(2), 1, 10, 0, 0)); let delegator_state = ParachainStaking::delegator_state(2).expect("just delegated => exists"); - assert_eq!(delegator_state.total, 10); + assert_eq!(delegator_state.total(), 10); assert_eq!(delegator_state.delegations.0[0].owner, 1); assert_eq!(delegator_state.delegations.0[0].amount, 10); }); @@ -1917,7 +1914,7 @@ fn can_delegate_if_full_and_new_delegation_greater_than_lowest_bottom() { } #[test] -fn cannot_delegate_if_leaving() { +fn can_still_delegate_if_leaving() { ExtBuilder::default() .with_balances(vec![(1, 20), (2, 20), (3, 20)]) .with_candidates(vec![(1, 20), (3, 20)]) @@ -1927,10 +1924,7 @@ fn cannot_delegate_if_leaving() { assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( 2 ))); - assert_noop!( - ParachainStaking::delegate(Origin::signed(2), 3, 10, 0, 1), - Error::::CannotDelegateIfLeaving - ); + assert_ok!(ParachainStaking::delegate(Origin::signed(2), 3, 10, 0, 1),); }); } @@ -2158,8 +2152,10 @@ fn execute_leave_delegators_unreserves_balance() { .with_delegations(vec![(2, 1, 10)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&2), 10); - assert_eq!(Balances::free_balance(&2), 0); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&2), + 00 + ); assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( 2 ))); @@ -2169,8 +2165,11 @@ fn execute_leave_delegators_unreserves_balance() { 2, 1 )); - assert_eq!(Balances::reserved_balance(&2), 0); - assert_eq!(Balances::free_balance(&2), 10); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&2), + 10 + ); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); }); } @@ -2330,6 +2329,41 @@ fn cannot_execute_leave_delegators_before_delay() { }); } +#[test] +fn cannot_execute_leave_delegators_if_single_delegation_revoke_manually_cancelled() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 20), (3, 30)]) + .with_candidates(vec![(1, 30), (3, 30)]) + .with_delegations(vec![(2, 1, 10), (2, 3, 10)]) + .build() + .execute_with(|| { + assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( + 2 + ))); + assert_ok!(ParachainStaking::cancel_delegation_request( + Origin::signed(2), + 3 + )); + roll_to(10); + assert_noop!( + ParachainStaking::execute_leave_delegators(Origin::signed(2), 2, 2), + Error::::DelegatorNotLeaving + ); + // can execute after manually scheduling revoke, and the round delay after which + // all revokes can be executed + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(2), + 3 + )); + roll_to(20); + assert_ok!(ParachainStaking::execute_leave_delegators( + Origin::signed(2), + 2, + 2 + )); + }); +} + #[test] fn insufficient_execute_leave_delegators_weight_hint_fails() { ExtBuilder::default() @@ -2415,6 +2449,36 @@ fn cancel_leave_delegators_updates_delegator_state() { }); } +#[test] +fn cannot_cancel_leave_delegators_if_single_delegation_revoke_manually_cancelled() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 20), (3, 30)]) + .with_candidates(vec![(1, 30), (3, 30)]) + .with_delegations(vec![(2, 1, 10), (2, 3, 10)]) + .build() + .execute_with(|| { + assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( + 2 + ))); + assert_ok!(ParachainStaking::cancel_delegation_request( + Origin::signed(2), + 3 + )); + roll_to(10); + assert_noop!( + ParachainStaking::cancel_leave_delegators(Origin::signed(2)), + Error::::DelegatorNotLeaving + ); + // can execute after manually scheduling revoke, without waiting for round delay after + // which all revokes can be executed + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(2), + 3 + )); + assert_ok!(ParachainStaking::cancel_leave_delegators(Origin::signed(2))); + }); +} + // SCHEDULE REVOKE DELEGATION #[test] @@ -2473,7 +2537,7 @@ fn can_revoke_delegation_if_revoking_another_delegation() { } #[test] -fn can_revoke_if_leaving() { +fn delegator_not_allowed_revoke_if_already_leaving() { ExtBuilder::default() .with_balances(vec![(1, 30), (2, 20), (3, 20)]) .with_candidates(vec![(1, 30), (3, 20)]) @@ -2483,10 +2547,10 @@ fn can_revoke_if_leaving() { assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( 2 ))); - assert_ok!(ParachainStaking::schedule_revoke_delegation( - Origin::signed(2), - 3 - )); + assert_noop!( + ParachainStaking::schedule_revoke_delegation(Origin::signed(2), 3), + >::PendingDelegationRequestAlreadyExists, + ); }); } @@ -2542,15 +2606,13 @@ fn delegator_bond_more_reserves_balance() { .with_delegations(vec![(2, 1, 10)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&2), 10); - assert_eq!(Balances::free_balance(&2), 5); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&2), 5); assert_ok!(ParachainStaking::delegator_bond_more( Origin::signed(2), 1, 5 )); - assert_eq!(Balances::reserved_balance(&2), 15); - assert_eq!(Balances::free_balance(&2), 0); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&2), 0); }); } @@ -2581,7 +2643,9 @@ fn delegator_bond_more_updates_delegator_state() { .build() .execute_with(|| { assert_eq!( - ParachainStaking::delegator_state(2).expect("exists").total, + ParachainStaking::delegator_state(2) + .expect("exists") + .total(), 10 ); assert_ok!(ParachainStaking::delegator_bond_more( @@ -2590,7 +2654,9 @@ fn delegator_bond_more_updates_delegator_state() { 5 )); assert_eq!( - ParachainStaking::delegator_state(2).expect("exists").total, + ParachainStaking::delegator_state(2) + .expect("exists") + .total(), 15 ); }); @@ -2726,6 +2792,46 @@ fn can_delegator_bond_more_for_leaving_candidate() { }); } +#[test] +fn delegator_bond_more_disallowed_when_revoke_scheduled() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(2), + 1 + )); + assert_noop!( + ParachainStaking::delegator_bond_more(Origin::signed(2), 1, 5), + >::PendingDelegationRevoke + ); + }); +} + +#[test] +fn delegator_bond_more_allowed_when_bond_decrease_scheduled() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 15)]) + .build() + .execute_with(|| { + assert_ok!(ParachainStaking::schedule_delegator_bond_less( + Origin::signed(2), + 1, + 5, + )); + assert_ok!(ParachainStaking::delegator_bond_more( + Origin::signed(2), + 1, + 5 + )); + }); +} + // DELEGATOR BOND LESS #[test] @@ -2778,7 +2884,7 @@ fn delegator_bond_less_updates_delegator_state() { } #[test] -fn can_delegator_bond_less_if_leaving() { +fn delegator_not_allowed_bond_less_if_leaving() { ExtBuilder::default() .with_balances(vec![(1, 30), (2, 15)]) .with_candidates(vec![(1, 30)]) @@ -2788,11 +2894,10 @@ fn can_delegator_bond_less_if_leaving() { assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( 2 ))); - assert_ok!(ParachainStaking::schedule_delegator_bond_less( - Origin::signed(2), - 1, - 1 - )); + assert_noop!( + ParachainStaking::schedule_delegator_bond_less(Origin::signed(2), 1, 1), + >::PendingDelegationRequestAlreadyExists, + ); }); } @@ -3037,8 +3142,7 @@ fn execute_revoke_delegation_unreserves_balance() { .with_delegations(vec![(2, 1, 10)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&2), 10); - assert_eq!(Balances::free_balance(&2), 0); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&2), 0); assert_ok!(ParachainStaking::schedule_revoke_delegation( Origin::signed(2), 1 @@ -3049,8 +3153,10 @@ fn execute_revoke_delegation_unreserves_balance() { 2, 1 )); - assert_eq!(Balances::reserved_balance(&2), 0); - assert_eq!(Balances::free_balance(&2), 10); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&2), + 10 + ); }); } @@ -3284,8 +3390,10 @@ fn delegator_bond_more_after_revoke_delegation_does_not_effect_exit() { 1 )); assert!(ParachainStaking::is_delegator(&2)); - assert_eq!(Balances::reserved_balance(&2), 20); - assert_eq!(Balances::free_balance(&2), 10); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&2), + 10 + ); }); } @@ -3336,8 +3444,10 @@ fn delegator_bond_less_after_revoke_delegation_does_not_effect_exit() { in_top: true })); assert!(ParachainStaking::is_delegator(&2)); - assert_eq!(Balances::reserved_balance(&2), 8); - assert_eq!(Balances::free_balance(&2), 22); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&2), + 22 + ); }); } @@ -3351,8 +3461,7 @@ fn execute_delegator_bond_less_unreserves_balance() { .with_delegations(vec![(2, 1, 10)]) .build() .execute_with(|| { - assert_eq!(Balances::reserved_balance(&2), 10); - assert_eq!(Balances::free_balance(&2), 0); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&2), 0); assert_ok!(ParachainStaking::schedule_delegator_bond_less( Origin::signed(2), 1, @@ -3364,8 +3473,7 @@ fn execute_delegator_bond_less_unreserves_balance() { 2, 1 )); - assert_eq!(Balances::reserved_balance(&2), 5); - assert_eq!(Balances::free_balance(&2), 5); + assert_eq!(ParachainStaking::get_delegator_stakable_free_balance(&2), 5); }); } @@ -3402,7 +3510,9 @@ fn execute_delegator_bond_less_updates_delegator_state() { .build() .execute_with(|| { assert_eq!( - ParachainStaking::delegator_state(2).expect("exists").total, + ParachainStaking::delegator_state(2) + .expect("exists") + .total(), 10 ); assert_ok!(ParachainStaking::schedule_delegator_bond_less( @@ -3417,7 +3527,9 @@ fn execute_delegator_bond_less_updates_delegator_state() { 1 )); assert_eq!( - ParachainStaking::delegator_state(2).expect("exists").total, + ParachainStaking::delegator_state(2) + .expect("exists") + .total(), 5 ); }); @@ -4227,10 +4339,6 @@ fn parachain_bond_inflation_reserve_matches_config() { account: 1, rewards: 24, }, - Event::Rewarded { - account: 6, - rewards: 6, - }, Event::Rewarded { account: 7, rewards: 6, @@ -4295,10 +4403,6 @@ fn parachain_bond_inflation_reserve_matches_config() { account: 1, rewards: 20, }, - Event::Rewarded { - account: 6, - rewards: 4, - }, Event::Rewarded { account: 7, rewards: 4, @@ -4317,7 +4421,7 @@ fn parachain_bond_inflation_reserve_matches_config() { let mut new4 = vec![ Event::ReservedForParachainBond { account: 11, - value: 32, + value: 31, }, Event::CollatorChosen { round: 9, @@ -4365,7 +4469,7 @@ fn parachain_bond_inflation_reserve_matches_config() { ]; expected.append(&mut new4); assert_eq_events!(expected.clone()); - assert_eq!(Balances::free_balance(&11), 127); + assert_eq!(Balances::free_balance(&11), 126); set_author(8, 1, 100); assert_ok!(ParachainStaking::delegate(Origin::signed(8), 1, 10, 10, 10)); roll_to(45); @@ -4427,7 +4531,7 @@ fn parachain_bond_inflation_reserve_matches_config() { ]; expected.append(&mut new5); assert_eq_events!(expected.clone()); - assert_eq!(Balances::free_balance(&11), 160); + assert_eq!(Balances::free_balance(&11), 159); set_author(9, 1, 100); set_author(10, 1, 100); roll_to(50); @@ -4483,13 +4587,13 @@ fn parachain_bond_inflation_reserve_matches_config() { ]; expected.append(&mut new6); assert_eq_events!(expected.clone()); - assert_eq!(Balances::free_balance(&11), 195); + assert_eq!(Balances::free_balance(&11), 194); roll_to(55); // new delegation is rewarded, 2 rounds after joining (`RewardPaymentDelay` is 2) let mut new7 = vec![ Event::ReservedForParachainBond { account: 11, - value: 37, + value: 36, }, Event::CollatorChosen { round: 12, @@ -4541,7 +4645,7 @@ fn parachain_bond_inflation_reserve_matches_config() { ]; expected.append(&mut new7); assert_eq_events!(expected); - assert_eq!(Balances::free_balance(&11), 232); + assert_eq!(Balances::free_balance(&11), 230); }); } @@ -5643,7 +5747,7 @@ fn multiple_delegations() { expected.append(&mut new3); assert_eq_events!(expected); // verify that delegations are removed after collator leaves, not before - assert_eq!(ParachainStaking::delegator_state(7).unwrap().total, 90); + assert_eq!(ParachainStaking::delegator_state(7).unwrap().total(), 90); assert_eq!( ParachainStaking::delegator_state(7) .unwrap() @@ -5652,7 +5756,7 @@ fn multiple_delegations() { .len(), 2usize ); - assert_eq!(ParachainStaking::delegator_state(6).unwrap().total, 40); + assert_eq!(ParachainStaking::delegator_state(6).unwrap().total(), 40); assert_eq!( ParachainStaking::delegator_state(6) .unwrap() @@ -5661,18 +5765,24 @@ fn multiple_delegations() { .len(), 4usize ); - assert_eq!(Balances::reserved_balance(&6), 40); - assert_eq!(Balances::reserved_balance(&7), 90); - assert_eq!(Balances::free_balance(&6), 60); - assert_eq!(Balances::free_balance(&7), 10); + assert_eq!(Balances::locks(&6)[0].amount, 40); + assert_eq!(Balances::locks(&7)[0].amount, 90); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&6), + 60 + ); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&7), + 10 + ); roll_to(40); assert_ok!(ParachainStaking::execute_leave_candidates( Origin::signed(2), 2, 5 )); - assert_eq!(ParachainStaking::delegator_state(7).unwrap().total, 10); - assert_eq!(ParachainStaking::delegator_state(6).unwrap().total, 30); + assert_eq!(ParachainStaking::delegator_state(7).unwrap().total(), 10); + assert_eq!(ParachainStaking::delegator_state(6).unwrap().total(), 30); assert_eq!( ParachainStaking::delegator_state(7) .unwrap() @@ -5689,10 +5799,14 @@ fn multiple_delegations() { .len(), 3usize ); - assert_eq!(Balances::reserved_balance(&6), 30); - assert_eq!(Balances::reserved_balance(&7), 10); - assert_eq!(Balances::free_balance(&6), 70); - assert_eq!(Balances::free_balance(&7), 90); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&6), + 70 + ); + assert_eq!( + ParachainStaking::get_delegator_stakable_free_balance(&7), + 90 + ); }); } @@ -6058,10 +6172,6 @@ fn payouts_follow_delegation_changes() { account: 1, rewards: 30, }, - Event::Rewarded { - account: 6, - rewards: 9, - }, Event::Rewarded { account: 7, rewards: 9, @@ -6103,11 +6213,7 @@ fn payouts_follow_delegation_changes() { }, Event::Rewarded { account: 1, - rewards: 32, - }, - Event::Rewarded { - account: 6, - rewards: 10, + rewards: 31, }, Event::Rewarded { account: 7, @@ -6161,11 +6267,11 @@ fn payouts_follow_delegation_changes() { }, Event::Rewarded { account: 7, - rewards: 13, + rewards: 12, }, Event::Rewarded { account: 10, - rewards: 13, + rewards: 12, }, ]; expected.append(&mut new4); @@ -6214,7 +6320,7 @@ fn payouts_follow_delegation_changes() { }, Event::Rewarded { account: 1, - rewards: 40, + rewards: 39, }, Event::Rewarded { account: 7, @@ -6264,7 +6370,7 @@ fn payouts_follow_delegation_changes() { }, Event::Rewarded { account: 1, - rewards: 42, + rewards: 41, }, Event::Rewarded { account: 7, @@ -6314,7 +6420,7 @@ fn payouts_follow_delegation_changes() { }, Event::Rewarded { account: 1, - rewards: 39, + rewards: 38, }, Event::Rewarded { account: 7, @@ -7272,876 +7378,53 @@ fn patch_incorrect_delegations_sums() { }); } -#[test] -/// Kicks extra bottom delegations to force leave delegators if last delegation -fn split_candidate_state_kicks_extra_bottom_delegators_to_exit() { - #[allow(deprecated)] - ExtBuilder::default() - .with_balances(vec![(11, 22), (12, 20)]) - .build() - .execute_with(|| { - for i in 11..13 { - let old_delegator_state = Delegator { - id: i, - delegations: OrderedSet::from(vec![ - Bond { - owner: 1, - amount: 10, - }, - Bond { - owner: 2, - amount: 10, - }, - ]), - total: 20, - less_total: 0, - status: DelegatorStatus::Active, - }; - >::insert(&i, old_delegator_state); - } - assert_ok!(::Currency::reserve(&11, 22)); - assert_ok!(::Currency::reserve(&12, 20)); - assert_eq!(Balances::reserved_balance(&11), 22); - assert_eq!(Balances::reserved_balance(&12), 20); - for i in 1..3 { - let old_candidate_state = CollatorCandidate { - id: i, - bond: 20, - delegators: OrderedSet::from(vec![3, 4, 5, 6, 7, 8, 9, 10, 11, 12]), - top_delegations: vec![ - Bond { - owner: 3, - amount: 19, - }, - Bond { - owner: 4, - amount: 18, - }, - Bond { - owner: 5, - amount: 17, - }, - Bond { - owner: 6, - amount: 16, - }, - ], - bottom_delegations: vec![ - Bond { - owner: 12, - amount: 10, - }, - Bond { - owner: 11, - amount: 11, - }, - Bond { - owner: 10, - amount: 12, - }, - Bond { - owner: 9, - amount: 13, - }, - Bond { - owner: 8, - amount: 14, - }, - Bond { - owner: 7, - amount: 15, - }, - ], - total_counted: 90, - total_backing: 165, - request: None, - state: CollatorStatus::Active, - }; - >::insert(&i, old_candidate_state); - } - // total is 165 * 2 = 330 - >::put(330); - assert!(ParachainStaking::is_delegator(&11)); - assert!(ParachainStaking::is_delegator(&12)); - crate::migrations::SplitCandidateStateToDecreasePoV::::on_runtime_upgrade(); - assert_event_emitted!(Event::DelegationKicked { - delegator: 11, - candidate: 1, - unstaked_amount: 11 - }); - assert_event_emitted!(Event::DelegationKicked { - delegator: 11, - candidate: 2, - unstaked_amount: 11 - }); - assert_event_emitted!(Event::DelegationKicked { - delegator: 12, - candidate: 1, - unstaked_amount: 10 - }); - assert_event_emitted!(Event::DelegationKicked { - delegator: 12, - candidate: 2, - unstaked_amount: 10 - }); - assert_event_emitted!(Event::DelegatorLeft { - delegator: 12, - unstaked_amount: 10 - }); - assert_event_emitted!(Event::DelegatorLeft { - delegator: 11, - unstaked_amount: 11 - }); - // kicked 11 and 12 and revoked them - assert_eq!(Balances::free_balance(&11), 22); - assert_eq!(Balances::free_balance(&12), 20); - assert!(!ParachainStaking::is_delegator(&11)); - assert!(!ParachainStaking::is_delegator(&12)); - for i in 1..3 { - let top_delegations = >::get(&i).unwrap(); - assert_eq!(top_delegations.total, 70); - assert_eq!( - top_delegations.delegations, - vec![ - Bond { - owner: 3, - amount: 19 - }, - Bond { - owner: 4, - amount: 18 - }, - Bond { - owner: 5, - amount: 17 - }, - Bond { - owner: 6, - amount: 16 - } - ] - ); - let bottom_delegations = >::get(&i).unwrap(); - assert_eq!(bottom_delegations.total, 54); - assert_eq!( - bottom_delegations.delegations, - vec![ - Bond { - owner: 7, - amount: 15 - }, - Bond { - owner: 8, - amount: 14 - }, - Bond { - owner: 9, - amount: 13 - }, - Bond { - owner: 10, - amount: 12 - } - ] - ); - let candidate_metadata = >::get(&i).unwrap(); - assert_eq!(candidate_metadata.top_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.bottom_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.lowest_top_delegation_amount, 16); - assert_eq!(candidate_metadata.highest_bottom_delegation_amount, 15); - assert_eq!(candidate_metadata.lowest_bottom_delegation_amount, 12); - } - }); -} - -#[test] -/// Force revokes candidate state -fn split_candidate_state_kicks_extra_bottom_delegations_without_exit() { - #[allow(deprecated)] - ExtBuilder::default() - .with_balances(vec![(11, 32), (12, 30)]) - .build() - .execute_with(|| { - for i in 11..13 { - let old_delegator_state = Delegator { - id: i, - delegations: OrderedSet::from(vec![ - Bond { - owner: 1, - amount: 10, - }, - Bond { - owner: 2, - amount: 10, - }, - Bond { - owner: 3, - amount: 10, - }, - ]), - total: 30, - less_total: 0, - status: DelegatorStatus::Active, - }; - >::insert(&i, old_delegator_state); - } - assert_ok!(::Currency::reserve(&11, 32)); - assert_ok!(::Currency::reserve(&12, 30)); - assert_eq!(Balances::reserved_balance(&11), 32); - assert_eq!(Balances::reserved_balance(&12), 30); - for i in 1..3 { - let old_candidate_state = CollatorCandidate { - id: i, - bond: 20, - delegators: OrderedSet::from(vec![3, 4, 5, 6, 7, 8, 9, 10, 11, 12]), - top_delegations: vec![ - Bond { - owner: 3, - amount: 19, - }, - Bond { - owner: 4, - amount: 18, - }, - Bond { - owner: 5, - amount: 17, - }, - Bond { - owner: 6, - amount: 16, - }, - ], - bottom_delegations: vec![ - Bond { - owner: 12, - amount: 10, - }, - Bond { - owner: 11, - amount: 11, - }, - Bond { - owner: 10, - amount: 12, - }, - Bond { - owner: 9, - amount: 13, - }, - Bond { - owner: 8, - amount: 14, - }, - Bond { - owner: 7, - amount: 15, - }, - ], - total_counted: 90, - total_backing: 165, - request: None, - state: CollatorStatus::Active, - }; - >::insert(&i, old_candidate_state); - } - // total is 165 * 2 + 20 = 330 - >::put(350); - assert!(ParachainStaking::is_delegator(&11)); - assert!(ParachainStaking::is_delegator(&12)); - crate::migrations::SplitCandidateStateToDecreasePoV::::on_runtime_upgrade(); - assert_event_emitted!(Event::DelegationKicked { - delegator: 11, - candidate: 1, - unstaked_amount: 11, - }); - assert_event_emitted!(Event::DelegationKicked { - delegator: 11, - candidate: 2, - unstaked_amount: 11, - }); - assert_event_emitted!(Event::DelegationKicked { - delegator: 12, - candidate: 1, - unstaked_amount: 10, - }); - assert_event_emitted!(Event::DelegationKicked { - delegator: 12, - candidate: 2, - unstaked_amount: 10, - }); - assert_event_not_emitted!(Event::DelegatorLeft { - delegator: 12, - unstaked_amount: 10, - }); - assert_event_not_emitted!(Event::DelegatorLeft { - delegator: 11, - unstaked_amount: 10, - }); - // kicked 11 and 12 and revoked them - assert_eq!(Balances::free_balance(&11), 22); - assert_eq!(Balances::free_balance(&12), 20); - assert_eq!(Balances::reserved_balance(&11), 10); - assert_eq!(Balances::reserved_balance(&12), 10); - assert!(ParachainStaking::is_delegator(&11)); - assert!(ParachainStaking::is_delegator(&12)); - for i in 1..3 { - let top_delegations = >::get(&i).unwrap(); - assert_eq!(top_delegations.total, 70); - assert_eq!( - top_delegations.delegations, - vec![ - Bond { - owner: 3, - amount: 19 - }, - Bond { - owner: 4, - amount: 18 - }, - Bond { - owner: 5, - amount: 17 - }, - Bond { - owner: 6, - amount: 16 - } - ] - ); - let bottom_delegations = >::get(&i).unwrap(); - assert_eq!(bottom_delegations.total, 54); - assert_eq!( - bottom_delegations.delegations, - vec![ - Bond { - owner: 7, - amount: 15 - }, - Bond { - owner: 8, - amount: 14 - }, - Bond { - owner: 9, - amount: 13 - }, - Bond { - owner: 10, - amount: 12 - } - ] - ); - let candidate_metadata = >::get(&i).unwrap(); - assert_eq!(candidate_metadata.top_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.bottom_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.lowest_top_delegation_amount, 16); - assert_eq!(candidate_metadata.highest_bottom_delegation_amount, 15); - assert_eq!(candidate_metadata.lowest_bottom_delegation_amount, 12); - } - }); -} - -#[test] -fn split_candidate_state_migrates_empty_delegations_correctly() { - ExtBuilder::default() - // .with_balances(vec![(1, 20), (2, 20), (3, 20), (4, 20)]) - // .with_candidates(vec![(1, 20), (2, 20), (3, 20), (4, 20)]) - .build() - .execute_with(|| { - // set candidate state as per commented out lines above - for i in 1..5 { - let old_candidate_state = CollatorCandidate { - id: i, - bond: 20, - delegators: OrderedSet::new(), - top_delegations: Vec::new(), - bottom_delegations: Vec::new(), - total_counted: 20, - total_backing: 20, - request: None, - state: CollatorStatus::Active, - }; - >::insert(&i, old_candidate_state); - } - crate::migrations::SplitCandidateStateToDecreasePoV::::on_runtime_upgrade(); - for i in 1..5 { - let top_delegations = >::get(&i).unwrap(); - assert_eq!(top_delegations.total, 0); - assert!(top_delegations.delegations.is_empty()); - let bottom_delegations = >::get(&i).unwrap(); - assert_eq!(bottom_delegations.total, 0); - assert!(bottom_delegations.delegations.is_empty()); - let candidate_metadata = >::get(&i).unwrap(); - assert_eq!(candidate_metadata.top_capacity, CapacityStatus::Empty); - assert_eq!(candidate_metadata.bottom_capacity, CapacityStatus::Empty); - assert_eq!(candidate_metadata.lowest_top_delegation_amount, 0); - assert_eq!(candidate_metadata.highest_bottom_delegation_amount, 0); - assert_eq!(candidate_metadata.lowest_bottom_delegation_amount, 0); - } - }); -} - -#[test] -fn split_candidate_state_migrates_partial_top_delegations_correctly() { - ExtBuilder::default() - // .with_balances(vec![(1, 20), (2, 20), (3, 20), (4, 20)]) - // .with_candidates(vec![(1, 20), (2, 20)]) - // .with_delegations(vec![(3, 1, 10), (4, 1, 10), (3, 2, 10), (4, 2, 10)]) - .build() - .execute_with(|| { - // set up candidate state as per commented out lines above - for i in 1..3 { - let old_candidate_state = CollatorCandidate { - id: i, - bond: 20, - delegators: OrderedSet::from(vec![3, 4]), - top_delegations: vec![ - Bond { - owner: 3, - amount: 10, - }, - Bond { - owner: 4, - amount: 10, - }, - ], - bottom_delegations: Vec::new(), - total_counted: 40, - total_backing: 40, - request: None, - state: CollatorStatus::Active, - }; - >::insert(&i, old_candidate_state); - } - crate::migrations::SplitCandidateStateToDecreasePoV::::on_runtime_upgrade(); - for i in 1..3 { - let top_delegations = >::get(&i).unwrap(); - assert_eq!(top_delegations.total, 20); - assert_eq!( - top_delegations.delegations, - vec![ - Bond { - owner: 3, - amount: 10 - }, - Bond { - owner: 4, - amount: 10 - } - ] - ); - let bottom_delegations = >::get(&i).unwrap(); - assert_eq!(bottom_delegations.total, 0); - assert!(bottom_delegations.delegations.is_empty()); - let candidate_metadata = >::get(&i).unwrap(); - assert_eq!(candidate_metadata.top_capacity, CapacityStatus::Partial); - assert_eq!(candidate_metadata.bottom_capacity, CapacityStatus::Empty); - assert_eq!(candidate_metadata.lowest_top_delegation_amount, 10); - assert_eq!(candidate_metadata.highest_bottom_delegation_amount, 0); - assert_eq!(candidate_metadata.lowest_bottom_delegation_amount, 0); - } - }); -} - -#[test] -fn split_candidate_state_migrates_full_top_delegations_correctly() { - ExtBuilder::default() - // .with_balances(vec![(1, 20), (2, 20), (3, 20), (4, 20), (5, 20), (6, 20)]) - // .with_candidates(vec![(1, 20), (2, 20)]) - // .with_delegations(vec![ - // (3, 1, 10), - // (4, 1, 10), - // (5, 1, 10), - // (6, 1, 10), - // (3, 2, 10), - // (4, 2, 10), - // (5, 2, 10), - // (6, 2, 10), - // ]) - .build() - .execute_with(|| { - // set up candidate state as per commented out lines - for i in 1..3 { - let old_candidate_state = CollatorCandidate { - id: i, - bond: 20, - delegators: OrderedSet::from(vec![3, 4, 5, 6]), - top_delegations: vec![ - Bond { - owner: 3, - amount: 10, - }, - Bond { - owner: 4, - amount: 10, - }, - Bond { - owner: 5, - amount: 10, - }, - Bond { - owner: 6, - amount: 10, - }, - ], - bottom_delegations: Vec::new(), - total_counted: 60, - total_backing: 60, - request: None, - state: CollatorStatus::Active, - }; - >::insert(&i, old_candidate_state); - } - crate::migrations::SplitCandidateStateToDecreasePoV::::on_runtime_upgrade(); - for i in 1..3 { - let top_delegations = >::get(&i).unwrap(); - assert_eq!(top_delegations.total, 40); - assert_eq!( - top_delegations.delegations, - vec![ - Bond { - owner: 3, - amount: 10 - }, - Bond { - owner: 4, - amount: 10 - }, - Bond { - owner: 5, - amount: 10 - }, - Bond { - owner: 6, - amount: 10 - } - ] - ); - let bottom_delegations = >::get(&i).unwrap(); - assert_eq!(bottom_delegations.total, 0); - assert!(bottom_delegations.delegations.is_empty()); - let candidate_metadata = >::get(&i).unwrap(); - assert_eq!(candidate_metadata.top_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.bottom_capacity, CapacityStatus::Empty); - assert_eq!(candidate_metadata.lowest_top_delegation_amount, 10); - assert_eq!(candidate_metadata.highest_bottom_delegation_amount, 0); - assert_eq!(candidate_metadata.lowest_bottom_delegation_amount, 0); - } - }); -} - -#[test] -fn split_candidate_state_migrates_full_top_partial_bottom_delegations_correctly() { - ExtBuilder::default() - // .with_balances(vec![ - // (1, 20), - // (2, 20), - // (3, 38), - // (4, 36), - // (5, 34), - // (6, 32), - // (7, 30), - // (8, 28), - // ]) - // .with_candidates(vec![(1, 20), (2, 20)]) - // .with_delegations(vec![ - // (3, 1, 19), - // (4, 1, 18), - // (5, 1, 17), - // (6, 1, 16), - // (7, 1, 15), - // (8, 1, 14), - // (3, 2, 19), - // (4, 2, 18), - // (5, 2, 17), - // (6, 2, 16), - // (7, 2, 15), - // (8, 2, 14), - // ]) - .build() - .execute_with(|| { - // set up candidate state as per commented out lines - for i in 1..3 { - let old_candidate_state = CollatorCandidate { - id: i, - bond: 20, - delegators: OrderedSet::from(vec![3, 4, 5, 6, 7, 8]), - top_delegations: vec![ - Bond { - owner: 3, - amount: 19, - }, - Bond { - owner: 4, - amount: 18, - }, - Bond { - owner: 5, - amount: 17, - }, - Bond { - owner: 6, - amount: 16, - }, - ], - bottom_delegations: vec![ - Bond { - owner: 8, - amount: 14, - }, - Bond { - owner: 7, - amount: 15, - }, - ], - total_counted: 90, - total_backing: 119, - request: None, - state: CollatorStatus::Active, - }; - >::insert(&i, old_candidate_state); - } - crate::migrations::SplitCandidateStateToDecreasePoV::::on_runtime_upgrade(); - for i in 1..3 { - let top_delegations = >::get(&i).unwrap(); - assert_eq!(top_delegations.total, 70); - assert_eq!( - top_delegations.delegations, - vec![ - Bond { - owner: 3, - amount: 19 - }, - Bond { - owner: 4, - amount: 18 - }, - Bond { - owner: 5, - amount: 17 - }, - Bond { - owner: 6, - amount: 16 - } - ] - ); - let bottom_delegations = >::get(&i).unwrap(); - assert_eq!(bottom_delegations.total, 29); - assert_eq!( - bottom_delegations.delegations, - vec![ - Bond { - owner: 7, - amount: 15 - }, - Bond { - owner: 8, - amount: 14 - } - ] - ); - let candidate_metadata = >::get(&i).unwrap(); - assert_eq!(candidate_metadata.top_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.bottom_capacity, CapacityStatus::Partial); - assert_eq!(candidate_metadata.lowest_top_delegation_amount, 16); - assert_eq!(candidate_metadata.highest_bottom_delegation_amount, 15); - assert_eq!(candidate_metadata.lowest_bottom_delegation_amount, 14); - } - }); -} - -#[test] -fn split_candidate_state_migrates_full_top_and_bottom_delegations_correctly() { - ExtBuilder::default() - // .with_balances(vec![ - // (1, 20), - // (2, 20), - // (3, 38), - // (4, 36), - // (5, 34), - // (6, 32), - // (7, 30), - // (8, 28), - // (9, 26), - // (10, 24), - // ]) - // .with_candidates(vec![(1, 20), (2, 20)]) - // .with_delegations(vec![ - // (3, 1, 19), - // (4, 1, 18), - // (5, 1, 17), - // (6, 1, 16), - // (7, 1, 15), - // (8, 1, 14), - // (9, 1, 13), - // (10, 1, 12), - // (3, 2, 19), - // (4, 2, 18), - // (5, 2, 17), - // (6, 2, 16), - // (7, 2, 15), - // (8, 2, 14), - // (9, 2, 13), - // (10, 2, 12), - // ]) - .build() - .execute_with(|| { - // set up candidate state as per commented out lines - for i in 1..3 { - let old_candidate_state = CollatorCandidate { - id: i, - bond: 20, - delegators: OrderedSet::from(vec![3, 4, 5, 6, 7, 8, 9, 10]), - top_delegations: vec![ - Bond { - owner: 3, - amount: 19, - }, - Bond { - owner: 4, - amount: 18, - }, - Bond { - owner: 5, - amount: 17, - }, - Bond { - owner: 6, - amount: 16, - }, - ], - bottom_delegations: vec![ - Bond { - owner: 10, - amount: 12, - }, - Bond { - owner: 9, - amount: 13, - }, - Bond { - owner: 8, - amount: 14, - }, - Bond { - owner: 7, - amount: 15, - }, - ], - total_counted: 90, - total_backing: 144, - request: None, - state: CollatorStatus::Active, - }; - >::insert(&i, old_candidate_state); - } - crate::migrations::SplitCandidateStateToDecreasePoV::::on_runtime_upgrade(); - for i in 1..3 { - let top_delegations = >::get(&i).unwrap(); - assert_eq!(top_delegations.total, 70); - assert_eq!( - top_delegations.delegations, - vec![ - Bond { - owner: 3, - amount: 19 - }, - Bond { - owner: 4, - amount: 18 - }, - Bond { - owner: 5, - amount: 17 - }, - Bond { - owner: 6, - amount: 16 - } - ] - ); - let bottom_delegations = >::get(&i).unwrap(); - assert_eq!(bottom_delegations.total, 54); - assert_eq!( - bottom_delegations.delegations, - vec![ - Bond { - owner: 7, - amount: 15 - }, - Bond { - owner: 8, - amount: 14 - }, - Bond { - owner: 9, - amount: 13 - }, - Bond { - owner: 10, - amount: 12 - } - ] - ); - let candidate_metadata = >::get(&i).unwrap(); - assert_eq!(candidate_metadata.top_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.bottom_capacity, CapacityStatus::Full); - assert_eq!(candidate_metadata.lowest_top_delegation_amount, 16); - assert_eq!(candidate_metadata.highest_bottom_delegation_amount, 15); - assert_eq!(candidate_metadata.lowest_bottom_delegation_amount, 12); - } - }); -} - -// #[test] -// fn remove_exit_queue_migration_migrates_leaving_candidates() { -// use crate::pallet::ExitQueue2; -// use crate::set::*; -// use crate::*; -// ExtBuilder::default() -// .with_balances(vec![(1, 20), (2, 20), (3, 20), (4, 20), (5, 20)]) -// .with_candidates(vec![(1, 20), (2, 20), (3, 20), (4, 20), (5, 20)]) -// .build() -// .execute_with(|| { -// // prepare leaving state for all 5 candidates before the migration -// for i in 1..6 { -// // manually change the CollatorState2 status -// >::insert( -// i, -// Collator2 { -// id: i, -// bond: 20, -// nominators: OrderedSet::new(), -// top_nominators: Vec::new(), -// bottom_nominators: Vec::new(), -// total_counted: 20, -// total_backing: 20, -// // set to leaving -// state: CollatorStatus::Leaving(3), -// }, -// ); -// } -// >::put(ExitQ { -// candidates: OrderedSet(vec![1, 2, 3, 4, 5]), -// candidate_schedule: vec![(1, 3), (2, 3), (3, 3), (4, 3), (5, 3)], -// ..Default::default() -// }); -// // execute migration -// migrations::RemoveExitQueue::::on_runtime_upgrade(); -// // check expected candidate state reflects previous state -// for i in 1..6 { -// assert!(>::get(i).is_none()); -// assert_eq!( -// >::get(i).unwrap().state, -// CollatorStatus::Leaving(3) -// ); -// } -// // exit queue should be empty -// assert_eq!(>::get(), ExitQ::default()); -// }); -// } +// #[test] +// fn remove_exit_queue_migration_migrates_leaving_candidates() { +// use crate::pallet::ExitQueue2; +// use crate::set::*; +// use crate::*; +// ExtBuilder::default() +// .with_balances(vec![(1, 20), (2, 20), (3, 20), (4, 20), (5, 20)]) +// .with_candidates(vec![(1, 20), (2, 20), (3, 20), (4, 20), (5, 20)]) +// .build() +// .execute_with(|| { +// // prepare leaving state for all 5 candidates before the migration +// for i in 1..6 { +// // manually change the CollatorState2 status +// >::insert( +// i, +// Collator2 { +// id: i, +// bond: 20, +// nominators: OrderedSet::new(), +// top_nominators: Vec::new(), +// bottom_nominators: Vec::new(), +// total_counted: 20, +// total_backing: 20, +// // set to leaving +// state: CollatorStatus::Leaving(3), +// }, +// ); +// } +// >::put(ExitQ { +// candidates: OrderedSet(vec![1, 2, 3, 4, 5]), +// candidate_schedule: vec![(1, 3), (2, 3), (3, 3), (4, 3), (5, 3)], +// ..Default::default() +// }); +// // execute migration +// migrations::RemoveExitQueue::::on_runtime_upgrade(); +// // check expected candidate state reflects previous state +// for i in 1..6 { +// assert!(>::get(i).is_none()); +// assert_eq!( +// >::get(i).unwrap().state, +// CollatorStatus::Leaving(3) +// ); +// } +// // exit queue should be empty +// assert_eq!(>::get(), ExitQ::default()); +// }); +// } // #[test] // fn remove_exit_queue_migration_migrates_leaving_delegators() { @@ -8685,3 +7968,1604 @@ fn test_delegator_scheduled_for_bond_decrease_is_rewarded_when_request_cancelled ); }); } + +#[test] +fn test_delegator_scheduled_for_leave_is_rewarded_for_previous_rounds_but_not_for_future() { + ExtBuilder::default() + .with_balances(vec![(1, 20), (2, 40), (3, 20), (4, 20)]) + .with_candidates(vec![(1, 20), (3, 20), (4, 20)]) + .with_delegations(vec![(2, 1, 10), (2, 3, 10)]) + .build() + .execute_with(|| { + // preset rewards for rounds 1, 2 and 3 + (1..=3).for_each(|round| set_author(round, 1, 1)); + + assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( + 2 + ),)); + assert_last_event!(MetaEvent::ParachainStaking(Event::DelegatorExitScheduled { + round: 1, + delegator: 2, + scheduled_exit: 3, + })); + let collator = ParachainStaking::candidate_info(1).expect("candidate must exist"); + assert_eq!( + 1, collator.delegation_count, + "collator's delegator count was reduced unexpectedly" + ); + assert_eq!( + 30, collator.total_counted, + "collator's total was reduced unexpectedly" + ); + + roll_to_round_begin(3); + assert_eq_last_events!( + vec![ + Event::::Rewarded { + account: 1, + rewards: 4, + }, + Event::::Rewarded { + account: 2, + rewards: 1, + }, + ], + "delegator was not rewarded as intended" + ); + + roll_to_round_begin(4); + assert_eq_last_events!( + vec![Event::::Rewarded { + account: 1, + rewards: 4, + },], + "delegator was rewarded unexpectedly" + ); + let collator_snapshot = + ParachainStaking::at_stake(ParachainStaking::round().current, 1); + assert_eq!( + 1, + collator_snapshot.delegations.len(), + "collator snapshot's delegator count was reduced unexpectedly" + ); + assert_eq!( + 30, collator_snapshot.total, + "collator snapshot's total was reduced unexpectedly", + ); + }); +} + +#[test] +fn test_delegator_scheduled_for_leave_is_rewarded_when_request_cancelled() { + ExtBuilder::default() + .with_balances(vec![(1, 20), (2, 40), (3, 20), (4, 20)]) + .with_candidates(vec![(1, 20), (3, 20), (4, 20)]) + .with_delegations(vec![(2, 1, 10), (2, 3, 10)]) + .build() + .execute_with(|| { + // preset rewards for rounds 2, 3 and 4 + (2..=4).for_each(|round| set_author(round, 1, 1)); + + assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( + 2 + ))); + assert_last_event!(MetaEvent::ParachainStaking(Event::DelegatorExitScheduled { + round: 1, + delegator: 2, + scheduled_exit: 3, + })); + let collator = ParachainStaking::candidate_info(1).expect("candidate must exist"); + assert_eq!( + 1, collator.delegation_count, + "collator's delegator count was reduced unexpectedly" + ); + assert_eq!( + 30, collator.total_counted, + "collator's total was reduced unexpectedly" + ); + + roll_to_round_begin(2); + assert_ok!(ParachainStaking::cancel_leave_delegators(Origin::signed(2))); + + roll_to_round_begin(4); + assert_eq_last_events!( + vec![Event::::Rewarded { + account: 1, + rewards: 4, + },], + "delegator was rewarded unexpectedly", + ); + let collator_snapshot = + ParachainStaking::at_stake(ParachainStaking::round().current, 1); + assert_eq!( + 1, + collator_snapshot.delegations.len(), + "collator snapshot's delegator count was reduced unexpectedly" + ); + assert_eq!( + 30, collator_snapshot.total, + "collator snapshot's total was reduced unexpectedly", + ); + + roll_to_round_begin(5); + assert_eq_last_events!( + vec![ + Event::::Rewarded { + account: 1, + rewards: 4, + }, + Event::::Rewarded { + account: 2, + rewards: 1, + }, + ], + "delegator was not rewarded as intended", + ); + }); +} + +#[test] +fn test_delegation_request_exists_returns_false_when_nothing_exists() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + assert!(!ParachainStaking::delegation_request_exists(&1, &2)); + }); +} + +#[test] +fn test_delegation_request_exists_returns_true_when_decrease_exists() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::insert( + 1, + vec![ScheduledRequest { + delegator: 2, + when_executable: 3, + action: DelegationAction::Decrease(5), + }], + ); + assert!(ParachainStaking::delegation_request_exists(&1, &2)); + }); +} + +#[test] +fn test_delegation_request_exists_returns_true_when_revoke_exists() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::insert( + 1, + vec![ScheduledRequest { + delegator: 2, + when_executable: 3, + action: DelegationAction::Revoke(5), + }], + ); + assert!(ParachainStaking::delegation_request_exists(&1, &2)); + }); +} + +#[test] +fn test_delegation_request_revoke_exists_returns_false_when_nothing_exists() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + assert!(!ParachainStaking::delegation_request_revoke_exists(&1, &2)); + }); +} + +#[test] +fn test_delegation_request_revoke_exists_returns_false_when_decrease_exists() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::insert( + 1, + vec![ScheduledRequest { + delegator: 2, + when_executable: 3, + action: DelegationAction::Decrease(5), + }], + ); + assert!(!ParachainStaking::delegation_request_revoke_exists(&1, &2)); + }); +} + +#[test] +fn test_delegation_request_revoke_exists_returns_true_when_revoke_exists() { + ExtBuilder::default() + .with_balances(vec![(1, 30), (2, 25)]) + .with_candidates(vec![(1, 30)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::insert( + 1, + vec![ScheduledRequest { + delegator: 2, + when_executable: 3, + action: DelegationAction::Revoke(5), + }], + ); + assert!(ParachainStaking::delegation_request_revoke_exists(&1, &2)); + }); +} + +#[test] +fn test_hotfix_remove_delegation_requests_exited_candidates_cleans_up() { + ExtBuilder::default() + .with_balances(vec![(1, 20)]) + .with_candidates(vec![(1, 20)]) + .build() + .execute_with(|| { + // invalid state + >::insert( + 2, + Vec::>::new(), + ); + >::insert( + 3, + Vec::>::new(), + ); + assert_ok!( + ParachainStaking::hotfix_remove_delegation_requests_exited_candidates( + Origin::signed(1), + vec![2, 3, 4] // 4 does not exist, but is OK for idempotency + ) + ); + + assert!(!>::contains_key(2)); + assert!(!>::contains_key(3)); + }); +} + +#[test] +fn test_hotfix_remove_delegation_requests_exited_candidates_cleans_up_only_specified_keys() { + ExtBuilder::default() + .with_balances(vec![(1, 20)]) + .with_candidates(vec![(1, 20)]) + .build() + .execute_with(|| { + // invalid state + >::insert( + 2, + Vec::>::new(), + ); + >::insert( + 3, + Vec::>::new(), + ); + assert_ok!( + ParachainStaking::hotfix_remove_delegation_requests_exited_candidates( + Origin::signed(1), + vec![2] + ) + ); + + assert!(!>::contains_key(2)); + assert!(>::contains_key(3)); + }); +} + +#[test] +fn test_hotfix_remove_delegation_requests_exited_candidates_errors_when_requests_not_empty() { + ExtBuilder::default() + .with_balances(vec![(1, 20)]) + .with_candidates(vec![(1, 20)]) + .build() + .execute_with(|| { + // invalid state + >::insert( + 2, + Vec::>::new(), + ); + >::insert( + 3, + vec![ScheduledRequest { + delegator: 10, + when_executable: 1, + action: DelegationAction::Revoke(10), + }], + ); + + assert_noop!( + ParachainStaking::hotfix_remove_delegation_requests_exited_candidates( + Origin::signed(1), + vec![2, 3] + ), + >::CandidateNotLeaving, + ); + }); +} + +#[test] +fn test_hotfix_remove_delegation_requests_exited_candidates_errors_when_candidate_not_exited() { + ExtBuilder::default() + .with_balances(vec![(1, 20)]) + .with_candidates(vec![(1, 20)]) + .build() + .execute_with(|| { + // invalid state + >::insert( + 1, + Vec::>::new(), + ); + assert_noop!( + ParachainStaking::hotfix_remove_delegation_requests_exited_candidates( + Origin::signed(1), + vec![1] + ), + >::CandidateNotLeaving, + ); + }); +} + +#[test] +fn locking_zero_amount_is_ignored() { + use frame_support::traits::{LockableCurrency, WithdrawReasons}; + + // this test demonstrates the behavior of pallet Balance's `LockableCurrency` implementation of + // `set_locks()` when an amount of 0 is provided: it is a no-op + + ExtBuilder::default() + .with_balances(vec![(1, 100)]) + .build() + .execute_with(|| { + assert_eq!(crate::mock::query_lock_amount(1, DELEGATOR_LOCK_ID), None); + + Balances::set_lock(DELEGATOR_LOCK_ID, &1, 1, WithdrawReasons::all()); + assert_eq!( + crate::mock::query_lock_amount(1, DELEGATOR_LOCK_ID), + Some(1) + ); + + Balances::set_lock(DELEGATOR_LOCK_ID, &1, 0, WithdrawReasons::all()); + // Note that we tried to call `set_lock(0)` and it ignored it, we still have our lock + assert_eq!( + crate::mock::query_lock_amount(1, DELEGATOR_LOCK_ID), + Some(1) + ); + }); +} + +#[test] +fn revoke_last_removes_lock() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 25), (2, 25)]) + .with_delegations(vec![(3, 1, 30), (3, 2, 25)]) + .build() + .execute_with(|| { + assert_eq!( + crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), + Some(55) + ); + + // schedule and remove one... + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(3), + 1 + )); + roll_to_round_begin(3); + assert_ok!(ParachainStaking::execute_delegation_request( + Origin::signed(3), + 3, + 1 + )); + assert_eq!( + crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), + Some(25) + ); + + // schedule and remove the other... + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(3), + 2 + )); + roll_to_round_begin(5); + assert_ok!(ParachainStaking::execute_delegation_request( + Origin::signed(3), + 3, + 2 + )); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + }); +} + +mod jit_migrate_reserve_to_locks_tests { + + use super::*; + use crate::{ + CollatorReserveToLockMigrations, DelegatorReserveToLockMigrations, COLLATOR_LOCK_ID, + }; + + pub fn ensure_delegator_unmigrated(account_id: u64, balance: u128) { + assert_eq!(Balances::reserved_balance(account_id), balance); + assert_eq!( + crate::mock::query_lock_amount(account_id, DELEGATOR_LOCK_ID), + None + ); + assert_eq!( + >::get(account_id), + false + ); + } + + pub fn ensure_delegator_migrated(account_id: u64, balance: u128) { + assert_eq!(Balances::reserved_balance(account_id), 0); + assert_eq!( + crate::mock::query_lock_amount(account_id, DELEGATOR_LOCK_ID), + Some(balance) + ); + assert_eq!( + >::get(account_id), + true + ); + } + + pub fn ensure_collator_unmigrated(account_id: u64, balance: u128) { + assert_eq!(Balances::reserved_balance(account_id), balance); + assert_eq!( + crate::mock::query_lock_amount(account_id, COLLATOR_LOCK_ID), + None + ); + assert_eq!( + >::get(account_id), + false + ); + } + + pub fn ensure_collator_migrated(account_id: u64, balance: u128) { + assert_eq!(Balances::reserved_balance(account_id), 0); + assert_eq!( + crate::mock::query_lock_amount(account_id, COLLATOR_LOCK_ID), + Some(balance) + ); + assert_eq!( + >::get(account_id), + true + ); + } + + #[test] + fn test_unmigrate() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 25)]) + .with_delegations(vec![(2, 1, 30)]) + .build() + .execute_with(|| { + // initially should use locks, not reserves + assert_eq!(Balances::reserved_balance(1), 0); + assert_eq!( + crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), + Some(25) + ); + assert_eq!(>::get(1), true); + + assert_eq!(Balances::reserved_balance(2), 0); + assert_eq!( + crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), + Some(30) + ); + assert_eq!(>::get(2), true); + + // now "unmigrate" back to reserves + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + assert_eq!(Balances::reserved_balance(1), 25); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None); + assert_eq!(>::get(1), false); + + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + assert_eq!(Balances::reserved_balance(2), 30); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + }); + } + + #[test] + fn test_first_delegation_sets_migrations_storage() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 25)]) + .build() + .execute_with(|| { + assert_eq!(>::get(2), false); + + assert_ok!(ParachainStaking::delegate(Origin::signed(2), 1, 15, 0, 0)); + assert_eq!(>::get(2), true); + }); + } + + #[test] + fn test_join_candidates_sets_migrations_storage() { + ExtBuilder::default() + .with_balances(vec![(1, 100)]) + .build() + .execute_with(|| { + assert_eq!(>::get(1), false); + + assert_ok!(ParachainStaking::join_candidates(Origin::signed(1), 10, 0)); + assert_eq!(>::get(1), true); + }); + } + + #[test] + fn test_non_first_delegate_migrates_account() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 25), (2, 25)]) + .with_delegations(vec![(3, 1, 10)]) + .build() + .execute_with(|| { + // 3 is initially a delegator to 1 + assert!(ParachainStaking::delegator_state(3).is_some()); + assert_eq!(>::get(3), true); + + // unmigrate so that delegator needs JIT + crate::mock::unmigrate_delegator_from_lock_to_reserve(3); + assert_eq!(Balances::reserved_balance(3), 10); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(3), false); + + // now delegate and expect JIT to kick in + assert_ok!(ParachainStaking::delegate(Origin::signed(3), 2, 15, 1, 1)); + assert_eq!( + crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), + Some(25) + ); + assert_eq!(>::get(3), true); + }); + } + + #[test] + fn test_candidate_bond_more_triggers_jit() { + ExtBuilder::default() + .with_balances(vec![(1, 100)]) + .with_candidates(vec![(1, 20)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + assert_eq!(Balances::reserved_balance(1), 20); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None); + assert_eq!(>::get(1), false); + + assert_ok!(ParachainStaking::candidate_bond_more(Origin::signed(1), 30)); + assert_eq!(Balances::reserved_balance(1), 0); + assert_eq!( + crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), + Some(50) + ); + assert_eq!(>::get(1), true); + }); + } + + #[test] + fn test_candidate_bond_less_triggers_jit() { + ExtBuilder::default() + .with_balances(vec![(1, 100)]) + .with_candidates(vec![(1, 50)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + assert_eq!(Balances::reserved_balance(1), 50); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None); + assert_eq!(>::get(1), false); + + assert_ok!(ParachainStaking::schedule_candidate_bond_less( + Origin::signed(1), + 5 + )); + + // should be a no-op until executed + assert_eq!(Balances::reserved_balance(1), 50); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None); + assert_eq!(>::get(1), false); + + // should fail to execute and not migrate (waiting period hasn't ellapsed yet) + assert_noop!( + ParachainStaking::execute_candidate_bond_less(Origin::signed(1), 1), + >::PendingCandidateRequestNotDueYet, + ); + assert_eq!(Balances::reserved_balance(1), 50); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None); + assert_eq!(>::get(1), false); + + roll_to(10); + + assert_ok!(ParachainStaking::execute_candidate_bond_less( + Origin::signed(1), + 1 + )); + assert_eq!(Balances::reserved_balance(1), 0); + assert_eq!( + crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), + Some(45) + ); + assert_eq!(>::get(1), true); + }); + } + + #[test] + fn test_delegator_bond_more_triggers_jit() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 20)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + assert_eq!(Balances::reserved_balance(2), 20); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + assert_ok!(ParachainStaking::delegator_bond_more( + Origin::signed(2), + 1, + 30 + )); + assert_eq!(Balances::reserved_balance(2), 0); + assert_eq!( + crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), + Some(50) + ); + assert_eq!(>::get(2), true); + }); + } + + #[test] + fn test_delegator_bond_less_triggers_jit() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 50)]) + .with_delegations(vec![(2, 1, 20)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + assert_eq!(Balances::reserved_balance(2), 20); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + assert_ok!(ParachainStaking::schedule_delegator_bond_less( + Origin::signed(2), + 1, + 5 + )); + + // should be a no-op until executed + assert_eq!(Balances::reserved_balance(2), 20); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + // should fail to execute and not migrate (waiting period hasn't ellapsed yet) + assert_noop!( + ParachainStaking::execute_delegation_request(Origin::signed(2), 2, 1), + >::PendingDelegationRequestNotDueYet, + ); + assert_eq!(Balances::reserved_balance(2), 20); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + roll_to(10); + + assert_ok!(ParachainStaking::execute_delegation_request( + Origin::signed(2), + 2, + 1 + )); + assert_eq!(Balances::reserved_balance(2), 0); + assert_eq!( + crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), + Some(15) + ); + assert_eq!(>::get(2), true); + }); + } + + #[test] + fn test_delegator_revoke_last_triggers_jit() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 50)]) + .with_delegations(vec![(2, 1, 20)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + assert_eq!(Balances::reserved_balance(2), 20); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(2), + 1 + )); + + // should be a no-op until executed + assert_eq!(Balances::reserved_balance(2), 20); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + // should fail to execute and not migrate (waiting period hasn't ellapsed yet) + assert_noop!( + ParachainStaking::execute_delegation_request(Origin::signed(2), 2, 1), + >::PendingDelegationRequestNotDueYet, + ); + assert_eq!(Balances::reserved_balance(2), 20); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + roll_to(10); + + assert_ok!(ParachainStaking::execute_delegation_request( + Origin::signed(2), + 2, + 1 + )); + assert_eq!(Balances::reserved_balance(2), 0); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), true); + }); + } + + #[test] + fn test_delegator_revoke_non_last_triggers_jit() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 50), (2, 50)]) + .with_delegations(vec![(3, 1, 20), (3, 2, 20)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(3); + assert_eq!(Balances::reserved_balance(3), 40); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(3), false); + + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(3), + 1 + )); + + // should be a no-op until executed + assert_eq!(Balances::reserved_balance(3), 40); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(3), false); + + roll_to(10); + + assert_ok!(ParachainStaking::execute_delegation_request( + Origin::signed(3), + 3, + 1 + )); + assert_eq!(Balances::reserved_balance(3), 0); + assert_eq!( + crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), + Some(20) + ); + assert_eq!(>::get(3), true); + }); + } + + #[test] + fn test_delegator_leave_delegators_unreserves() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 50), (2, 50)]) + .with_delegations(vec![(3, 1, 20), (3, 2, 20)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(3); + assert_eq!(Balances::reserved_balance(3), 40); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(3), false); + + assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( + 3 + ))); + + // should be a no-op until executed + assert_eq!(Balances::reserved_balance(3), 40); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(3), false); + + // should fail to execute and not migrate (waiting period hasn't ellapsed yet) + assert_noop!( + ParachainStaking::execute_leave_delegators(Origin::signed(3), 3, 2), + >::DelegatorCannotLeaveYet, + ); + assert_eq!(Balances::reserved_balance(3), 40); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(3), false); + + roll_to(10); + + assert_ok!(ParachainStaking::execute_leave_delegators( + Origin::signed(3), + 3, + 2 + )); + assert_eq!(Balances::reserved_balance(3), 0); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(3), true); + }); + } + + #[test] + fn test_unmigrated_reserve_doesnt_interfere_with_delegator_bond_more() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 51)]) // will result in reserve of > half free_balance + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + assert_eq!(Balances::reserved_balance(2), 51); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + assert_ok!(ParachainStaking::delegator_bond_more( + Origin::signed(2), + 1, + 49 + )); + assert_eq!(Balances::reserved_balance(2), 0); + assert_eq!( + crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), + Some(100) + ); + assert_eq!(>::get(2), true); + }); + } + + #[test] + fn test_unmigrated_reserve_doesnt_allow_excess_delegation() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 99)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + assert_eq!(Balances::reserved_balance(2), 99); + assert_eq!(crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), None); + assert_eq!(>::get(2), false); + + // TODO: why does this give me a useless array comparison error? + /* + assert_noop!( + ParachainStaking::delegator_bond_more(Origin::signed(2), 1, 99), + DispatchError::Module(ModuleError { + index: 2, + error: [8, 0, 0, 0], + message: Some("InsufficientBalance") + }) + ); + */ + + // TODO: confirm error (see above) + assert!(ParachainStaking::delegator_bond_more(Origin::signed(2), 1, 99).is_err()); + + // TODO: is this desired behavior? + // should migrate even though it failed + assert_eq!(Balances::reserved_balance(2), 0); + assert_eq!( + crate::mock::query_lock_amount(2, DELEGATOR_LOCK_ID), + Some(99), + ); + assert_eq!(>::get(2), true); + }); + } + + #[test] + fn test_unmigrated_reserve_doesnt_allow_excess_candidate_bond() { + ExtBuilder::default() + .with_balances(vec![(1, 100)]) + .with_candidates(vec![(1, 99)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + assert_eq!(Balances::reserved_balance(1), 99); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None); + assert_eq!(>::get(1), false); + + // TODO: why does this give me a useless array comparison error? + /* + assert_noop!( + ParachainStaking::candidate_bond_more(Origin::signed(1), 99), + >::InsufficientBalance, + ); + */ + + // TODO: confirm error (see above) + assert!(ParachainStaking::candidate_bond_more(Origin::signed(1), 99).is_err()); + + // TODO: is this desired behavior? + // should migrate even though it failed + assert_eq!(Balances::reserved_balance(1), 0); + assert_eq!( + crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), + Some(99), + ); + assert_eq!(>::get(1), true); + }); + } + + #[test] + fn test_cancelling_candidate_bond_less_leaves_reserves_unmigrated() { + ExtBuilder::default() + .with_balances(vec![(1, 100)]) + .with_candidates(vec![(1, 20)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + assert_eq!(Balances::reserved_balance(1), 20); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None); + assert_eq!(>::get(1), false); + + assert_ok!(ParachainStaking::schedule_candidate_bond_less( + Origin::signed(1), + 1 + )); + assert_ok!(ParachainStaking::cancel_candidate_bond_less( + Origin::signed(1) + )); + + // should remain unmigrated + assert_eq!(Balances::reserved_balance(1), 20); + assert_eq!(crate::mock::query_lock_amount(1, COLLATOR_LOCK_ID), None,); + assert_eq!(>::get(1), false); + }); + } + + #[test] + fn test_hotfix_migrate_delegators_works() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 50), (3, 1, 25)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + crate::mock::unmigrate_delegator_from_lock_to_reserve(3); + + ensure_delegator_unmigrated(2, 50); + ensure_delegator_unmigrated(3, 25); + + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(2), + vec![2, 3] + ) + ); + + ensure_delegator_migrated(2, 50); + ensure_delegator_migrated(3, 25); + }); + } + + #[test] + fn test_hotfix_migrate_collators_works() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 20), (2, 25), (3, 30)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + crate::mock::unmigrate_collator_from_lock_to_reserve(2); + crate::mock::unmigrate_collator_from_lock_to_reserve(3); + + ensure_collator_unmigrated(1, 20); + ensure_collator_unmigrated(2, 25); + ensure_collator_unmigrated(3, 30); + + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(1), + vec![1, 2, 3] + ) + ); + + ensure_collator_migrated(1, 20); + ensure_collator_migrated(2, 25); + ensure_collator_migrated(3, 30); + }); + } + + #[test] + fn test_hotfix_migrations_tolerate_dne() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .build() + .execute_with(|| { + // shouldn't fail + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(2), + vec![1] + ) + ); + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(2), + vec![1] + ) + ); + }); + } + + #[test] + fn test_hotfix_migrations_tolerate_wrong_type() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 25)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + + ensure_collator_unmigrated(1, 20); + ensure_delegator_unmigrated(2, 25); + + // shouldn't fail + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(3), + vec![1] + ) + ); + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(3), + vec![2] + ) + ); + + // both should remain unmigrated + ensure_collator_unmigrated(1, 20); + ensure_delegator_unmigrated(2, 25); + }); + } + + #[test] + fn test_hotfix_migrations_are_idempotent() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 25)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + + ensure_collator_unmigrated(1, 20); + ensure_delegator_unmigrated(2, 25); + + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(3), + vec![1] + ) + ); + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(3), + vec![2] + ) + ); + + ensure_collator_migrated(1, 20); + ensure_delegator_migrated(2, 25); + + // migrate again, should be ok + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(3), + vec![1] + ) + ); + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(3), + vec![2] + ) + ); + + // still migrated + ensure_collator_migrated(1, 20); + ensure_delegator_migrated(2, 25); + }); + } + + #[test] + fn test_hotfix_migrations_can_migrate_self() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 25)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + + ensure_collator_unmigrated(1, 20); + ensure_delegator_unmigrated(2, 25); + + // migrating self + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(1), + vec![1] + ) + ); + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(2), + vec![2] + ) + ); + + ensure_collator_migrated(1, 20); + ensure_delegator_migrated(2, 25); + }); + } + + #[test] + fn test_hotfix_migrations_can_migrate_others() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 25)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + + ensure_collator_unmigrated(1, 20); + ensure_delegator_unmigrated(2, 25); + + // 3 (not delegating or collating) can migrate + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(3), + vec![1] + ) + ); + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(3), + vec![2] + ) + ); + + ensure_collator_migrated(1, 20); + ensure_delegator_migrated(2, 25); + }); + } + + #[test] + fn test_hotfix_migrations_have_limit() { + use crate::tests::DispatchError::Other; + + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 25)]) + .build() + .execute_with(|| { + crate::mock::unmigrate_collator_from_lock_to_reserve(1); + crate::mock::unmigrate_delegator_from_lock_to_reserve(2); + + ensure_collator_unmigrated(1, 20); + ensure_delegator_unmigrated(2, 25); + + assert_noop!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(3), + vec![1; 100] + ), + Other("Exceeded max allowed collators."), + ); + assert_noop!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(3), + vec![2; 100] + ), + Other("Exceeded max allowed delegators."), + ); + + // remain unmigrated + ensure_collator_unmigrated(1, 20); + ensure_delegator_unmigrated(2, 25); + + // migrating same collator/delegator 99 times should be fine, though + assert_ok!( + ParachainStaking::hotfix_migrate_collators_from_reserve_to_locks( + Origin::signed(3), + vec![1; 99] + ) + ); + assert_ok!( + ParachainStaking::hotfix_migrate_delegators_from_reserve_to_locks( + Origin::signed(3), + vec![2; 99] + ) + ); + + // migrated at least once + ensure_collator_migrated(1, 20); + ensure_delegator_migrated(2, 25); + }); + } + + #[test] + fn test_bumping_bottom_delegator_from_add_bottom_doesnt_leave_reserve() { + use crate::DelegatorState; + + ExtBuilder::default() + .with_balances(vec![ + (100, 100), + (1, 100), + (2, 100), + (3, 100), + (4, 100), + (5, 100), + (6, 100), + (7, 100), + (8, 100), + (9, 100), + ]) + .with_candidates(vec![(100, 20)]) + // delegate candidate 100 enough to fill top and bottom delegations + .with_delegations(vec![ + (1, 100, 25), + (2, 100, 24), + (3, 100, 23), + (4, 100, 22), + (5, 100, 21), + (6, 100, 20), + (7, 100, 19), + (8, 100, 17), + ]) + .build() + .execute_with(|| { + assert_eq!( + crate::mock::MaxTopDelegationsPerCandidate::get(), + 4u32, + "Test will fail if MaxTopDelegationsPerCandidate is changed" + ); + assert_eq!( + crate::mock::MaxBottomDelegationsPerCandidate::get(), + 4u32, + "Test will fail if MaxBottomDelegationsPerCandidate is changed" + ); + + let top = >::get(100).expect("100 is collating"); + assert_eq!( + top.delegations.len() as u32, + crate::mock::MaxTopDelegationsPerCandidate::get(), + ); + + let bottom = >::get(100).expect("100 is collating"); + assert_eq!( + bottom.delegations.len() as u32, + crate::mock::MaxBottomDelegationsPerCandidate::get(), + ); + + // top and bottom delegations are full. now make sure the bottommost is unmigrated + crate::mock::unmigrate_delegator_from_lock_to_reserve(8); + ensure_delegator_unmigrated(8, 17); + assert!(>::get(8).is_some()); + + // delegate with delegator 9 (to the bottom) and kick delegator 8 out + assert_ok!(ParachainStaking::delegate(Origin::signed(9), 100, 18, 8, 0)); + + // 18 should have no reserved balance and should not be delegating + assert!(>::get(8).is_none()); + assert_eq!(Balances::reserved_balance(8), 0); + }); + } + + #[test] + fn test_bumping_bottom_delegator_from_add_top_doesnt_leave_reserve() { + use crate::DelegatorState; + + // same test as above, but we bump by inserting into the top instead of the bottom + + ExtBuilder::default() + .with_balances(vec![ + (100, 100), + (1, 100), + (2, 100), + (3, 100), + (4, 100), + (5, 100), + (6, 100), + (7, 100), + (8, 100), + (9, 100), + ]) + .with_candidates(vec![(100, 20)]) + // delegate candidate 100 enough to fill top and bottom delegations + .with_delegations(vec![ + (1, 100, 25), + (2, 100, 24), + (3, 100, 23), + (4, 100, 22), + (5, 100, 21), + (6, 100, 20), + (7, 100, 19), + (8, 100, 17), + ]) + .build() + .execute_with(|| { + assert_eq!( + crate::mock::MaxTopDelegationsPerCandidate::get(), + 4u32, + "Test will fail if MaxTopDelegationsPerCandidate is changed" + ); + assert_eq!( + crate::mock::MaxBottomDelegationsPerCandidate::get(), + 4u32, + "Test will fail if MaxBottomDelegationsPerCandidate is changed" + ); + + let top = >::get(100).expect("100 is collating"); + assert_eq!( + top.delegations.len() as u32, + crate::mock::MaxTopDelegationsPerCandidate::get(), + ); + + let bottom = >::get(100).expect("100 is collating"); + assert_eq!( + bottom.delegations.len() as u32, + crate::mock::MaxBottomDelegationsPerCandidate::get(), + ); + + // top and bottom delegations are full. now make sure the bottommost is unmigrated + crate::mock::unmigrate_delegator_from_lock_to_reserve(8); + ensure_delegator_unmigrated(8, 17); + assert!(>::get(8).is_some()); + + // delegate with delegator 9 (to the top) and kick delegator 8 out + assert_ok!(ParachainStaking::delegate(Origin::signed(9), 100, 25, 8, 0)); + + // 18 should have no reserved balance and should not be delegating + assert!(>::get(8).is_none()); + assert_eq!(Balances::reserved_balance(8), 0); + }); + } + + #[test] + fn test_hotfix_fees_are_known() { + use frame_support::{dispatch::GetDispatchInfo, weights::Weight}; + + ExtBuilder::default().build().execute_with(|| { + // test hotfix_migrate_delegators_from_reserve_to_locks with a few samples... + let test_with_num_delegators = |num_delegators: usize, expected_weight: u64| { + let call = crate::Call::hotfix_migrate_delegators_from_reserve_to_locks:: { + delegators: vec![Default::default(); num_delegators], + }; + let info = call.get_dispatch_info(); + assert_eq!(info.weight, expected_weight as Weight); + }; + test_with_num_delegators(0, 50_000_000u64); + test_with_num_delegators(1, 150_000_000u64); + test_with_num_delegators(10, 1_050_000_000u64); + test_with_num_delegators(99, 9_950_000_000u64); + + // can't call with 10000, but the weight fn still ramps up this high + test_with_num_delegators(10000, 1_000_050_000_000u64); + + // test hotfix_migrate_collators_from_reserve_to_locks with a few samples... + let test_with_num_collators = |num_collators: usize, expected_weight: u64| { + let call = crate::Call::hotfix_migrate_collators_from_reserve_to_locks:: { + collators: vec![Default::default(); num_collators], + }; + let info = call.get_dispatch_info(); + assert_eq!(info.weight, expected_weight as Weight); + }; + test_with_num_collators(0, 50_000_000u64); + test_with_num_collators(1, 150_000_000u64); + test_with_num_collators(10, 1_050_000_000u64); + test_with_num_collators(99, 9_950_000_000u64); + + // can't call with 10000, but the weight fn still ramps up this high + test_with_num_collators(10000, 1_000_050_000_000u64); + }) + } + + #[test] + fn revoke_last_on_unmigrated_removes_lock_and_reserve() { + ExtBuilder::default() + .with_balances(vec![(1, 100), (2, 100), (3, 100)]) + .with_candidates(vec![(1, 25), (2, 25)]) + .with_delegations(vec![(3, 1, 30), (3, 2, 25)]) + .build() + .execute_with(|| { + assert_eq!( + crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), + Some(55) + ); + + // schedule and remove one... + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(3), + 1 + )); + roll_to_round_begin(3); + assert_ok!(ParachainStaking::execute_delegation_request( + Origin::signed(3), + 3, + 1 + )); + assert_eq!( + crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), + Some(25) + ); + + // now pretend we are unmigrated... + crate::mock::unmigrate_delegator_from_lock_to_reserve(3); + ensure_delegator_unmigrated(3, 25); + + // schedule and remove the last... + assert_ok!(ParachainStaking::schedule_revoke_delegation( + Origin::signed(3), + 2 + )); + roll_to_round_begin(5); + assert_ok!(ParachainStaking::execute_delegation_request( + Origin::signed(3), + 3, + 2 + )); + assert_eq!(crate::mock::query_lock_amount(3, DELEGATOR_LOCK_ID), None); + assert_eq!(Balances::reserved_balance(&3), 0); + }); + } + + // TODO: more test ideas + // * more candidate_bond_more scenarios? + // * cancelling bond changes - triggers or no? + // * leave candidates then come back - leave should trigger (?) come back should be migrated + // * leave all delegators then come back - leaving should trigger (?) rejoining should be + // migrated + // * IMPORTANT: test that reserved currency that hasn't been migrated yet doesn't count + // against the liquidity checks for bonding more + // * other tests around lquidity checks (can't bond_more if not enough unlocked amount, etc) + // * request cancellation +} +#[allow(deprecated)] +#[test] +fn test_delegator_with_deprecated_status_leaving_can_schedule_leave_delegators_as_fix() { + ExtBuilder::default() + .with_balances(vec![(1, 20), (2, 40)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::mutate(2, |value| { + value.as_mut().map(|mut state| { + state.status = DelegatorStatus::Leaving(2); + }) + }); + let state = >::get(2); + assert!(matches!(state.unwrap().status, DelegatorStatus::Leaving(_))); + + assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( + 2 + ))); + assert!(>::get(1) + .iter() + .any(|r| r.delegator == 2 && matches!(r.action, DelegationAction::Revoke(_)))); + assert_last_event!(MetaEvent::ParachainStaking(Event::DelegatorExitScheduled { + round: 1, + delegator: 2, + scheduled_exit: 3 + })); + + let state = >::get(2); + assert!(matches!(state.unwrap().status, DelegatorStatus::Active)); + }); +} + +#[allow(deprecated)] +#[test] +fn test_delegator_with_deprecated_status_leaving_can_cancel_leave_delegators_as_fix() { + ExtBuilder::default() + .with_balances(vec![(1, 20), (2, 40)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::mutate(2, |value| { + value.as_mut().map(|mut state| { + state.status = DelegatorStatus::Leaving(2); + }) + }); + let state = >::get(2); + assert!(matches!(state.unwrap().status, DelegatorStatus::Leaving(_))); + + assert_ok!(ParachainStaking::cancel_leave_delegators(Origin::signed(2))); + assert_last_event!(MetaEvent::ParachainStaking(Event::DelegatorExitCancelled { + delegator: 2 + })); + + let state = >::get(2); + assert!(matches!(state.unwrap().status, DelegatorStatus::Active)); + }); +} + +#[allow(deprecated)] +#[test] +fn test_delegator_with_deprecated_status_leaving_can_execute_leave_delegators_as_fix() { + ExtBuilder::default() + .with_balances(vec![(1, 20), (2, 40)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::mutate(2, |value| { + value.as_mut().map(|mut state| { + state.status = DelegatorStatus::Leaving(2); + }) + }); + let state = >::get(2); + assert!(matches!(state.unwrap().status, DelegatorStatus::Leaving(_))); + + roll_to(10); + assert_ok!(ParachainStaking::execute_leave_delegators( + Origin::signed(2), + 2, + 1 + )); + assert_event_emitted!(Event::DelegatorLeft { + delegator: 2, + unstaked_amount: 10 + }); + + let state = >::get(2); + assert!(state.is_none()); + }); +} + +#[allow(deprecated)] +#[test] +fn test_delegator_with_deprecated_status_leaving_cannot_execute_leave_delegators_early_no_fix() { + ExtBuilder::default() + .with_balances(vec![(1, 20), (2, 40)]) + .with_candidates(vec![(1, 20)]) + .with_delegations(vec![(2, 1, 10)]) + .build() + .execute_with(|| { + >::mutate(2, |value| { + value.as_mut().map(|mut state| { + state.status = DelegatorStatus::Leaving(2); + }) + }); + let state = >::get(2); + assert!(matches!(state.unwrap().status, DelegatorStatus::Leaving(_))); + + assert_noop!( + ParachainStaking::execute_leave_delegators(Origin::signed(2), 2, 1), + Error::::DelegatorCannotLeaveYet + ); + }); +} diff --git a/pallets/parachain-staking/src/types.rs b/pallets/parachain-staking/src/types.rs index 8abb0e2c95..f371a26f5a 100644 --- a/pallets/parachain-staking/src/types.rs +++ b/pallets/parachain-staking/src/types.rs @@ -18,9 +18,12 @@ use crate::{ set::OrderedSet, BalanceOf, BottomDelegations, CandidateInfo, Config, DelegatorState, Error, - Event, Pallet, Round, RoundIndex, TopDelegations, Total, + Event, Pallet, Round, RoundIndex, TopDelegations, Total, COLLATOR_LOCK_ID, DELEGATOR_LOCK_ID, +}; +use frame_support::{ + pallet_prelude::*, + traits::{tokens::WithdrawReasons, LockableCurrency}, }; -use frame_support::{pallet_prelude::*, traits::ReservableCurrency}; use parity_scale_codec::{Decode, Encode}; use sp_runtime::{ traits::{AtLeast32BitUnsigned, Saturating, Zero}, @@ -408,10 +411,20 @@ impl< where BalanceOf: From, { - T::Currency::reserve(&who, more.into())?; + >::jit_ensure_collator_reserve_migrated(&who.clone())?; + ensure!( + >::get_collator_stakable_free_balance(&who) >= more.into(), + Error::::InsufficientBalance + ); let new_total = >::get().saturating_add(more.into()); >::put(new_total); self.bond = self.bond.saturating_add(more); + T::Currency::set_lock( + COLLATOR_LOCK_ID, + &who.clone(), + self.bond.into(), + WithdrawReasons::all(), + ); self.total_counted = self.total_counted.saturating_add(more); >::deposit_event(Event::CandidateBondedMore { candidate: who.clone(), @@ -460,12 +473,18 @@ impl< request.when_executable <= >::get().current, Error::::PendingCandidateRequestNotDueYet ); - T::Currency::unreserve(&who, request.amount.into()); let new_total_staked = >::get().saturating_sub(request.amount.into()); >::put(new_total_staked); // Arithmetic assumptions are self.bond > less && self.bond - less > CollatorMinBond // (assumptions enforced by `schedule_bond_less`; if storage corrupts, must re-verify) self.bond = self.bond.saturating_sub(request.amount); + >::jit_ensure_collator_reserve_migrated(&who.clone())?; + T::Currency::set_lock( + COLLATOR_LOCK_ID, + &who.clone(), + self.bond.into(), + WithdrawReasons::all(), + ); self.total_counted = self.total_counted.saturating_sub(request.amount); let event = Event::CandidateBondedLess { candidate: who.clone().into(), @@ -644,17 +663,12 @@ impl< .total .saturating_sub(lowest_bottom_to_be_kicked.amount); // update delegator state - // unreserve kicked bottom - T::Currency::unreserve( - &lowest_bottom_to_be_kicked.owner, - lowest_bottom_to_be_kicked.amount, - ); // total staked is updated via propagation of lowest bottom delegation amount prior // to call let mut delegator_state = >::get(&lowest_bottom_to_be_kicked.owner) .expect("Delegation existence => DelegatorState existence"); let leaving = delegator_state.delegations.0.len() == 1usize; - delegator_state.rm_delegation(candidate); + delegator_state.rm_delegation::(candidate); >::delegation_remove_request_with_state( &candidate, &lowest_bottom_to_be_kicked.owner, @@ -1197,11 +1211,13 @@ impl From> for CollatorSnapshot } } +#[allow(deprecated)] #[derive(Clone, PartialEq, Encode, Decode, RuntimeDebug, TypeInfo)] pub enum DelegatorStatus { /// Active with no scheduled exit Active, /// Schedule exit to revoke all ongoing delegations + #[deprecated(note = "must only be used for backwards compatibility reasons")] Leaving(RoundIndex), } @@ -1275,44 +1291,73 @@ impl< } } - pub fn is_active(&self) -> bool { - matches!(self.status, DelegatorStatus::Active) + pub fn default_with_total(id: AccountId, amount: Balance) -> Self { + Delegator { + id, + total: amount, + delegations: OrderedSet::from(vec![]), + less_total: Balance::zero(), + status: DelegatorStatus::Active, + } } - pub fn is_leaving(&self) -> bool { - matches!(self.status, DelegatorStatus::Leaving(_)) + + pub fn total(&self) -> Balance { + self.total } - /// Can only leave if the current round is less than or equal to scheduled execution round - /// - returns None if not in leaving state - pub fn can_execute_leave(&self, delegation_weight_hint: u32) -> DispatchResult { - ensure!( - delegation_weight_hint >= (self.delegations.0.len() as u32), - Error::::TooLowDelegationCountToLeaveDelegators - ); - if let DelegatorStatus::Leaving(when) = self.status { - ensure!( - >::get().current >= when, - Error::::DelegatorCannotLeaveYet - ); - Ok(()) - } else { - Err(Error::::DelegatorNotLeaving.into()) - } + + pub fn total_add_if(&mut self, amount: Balance, check: F) -> DispatchResult + where + T: Config, + T::AccountId: From, + BalanceOf: From, + F: Fn(Balance) -> DispatchResult, + { + let total = self.total.saturating_add(amount); + check(total)?; + self.total = total; + self.adjust_bond_lock::(BondAdjust::Increase(amount)) } - /// Set status to leaving - pub(crate) fn set_leaving(&mut self, when: RoundIndex) { - self.status = DelegatorStatus::Leaving(when); + + pub fn total_sub_if(&mut self, amount: Balance, check: F) -> DispatchResult + where + T: Config, + T::AccountId: From, + BalanceOf: From, + F: Fn(Balance) -> DispatchResult, + { + let total = self.total.saturating_sub(amount); + check(total)?; + self.total = total; + self.adjust_bond_lock::(BondAdjust::Decrease)?; + Ok(()) } - /// Schedule status to exit - pub fn schedule_leave(&mut self) -> (RoundIndex, RoundIndex) { - let now = >::get().current; - let when = now + T::LeaveDelegatorsDelay::get(); - self.set_leaving(when); - (now, when) + + pub fn total_add(&mut self, amount: Balance) -> DispatchResult + where + T: Config, + T::AccountId: From, + BalanceOf: From, + { + self.total = self.total.saturating_add(amount); + self.adjust_bond_lock::(BondAdjust::Increase(amount))?; + Ok(()) + } + + pub fn total_sub(&mut self, amount: Balance) -> DispatchResult + where + T: Config, + T::AccountId: From, + BalanceOf: From, + { + self.total = self.total.saturating_sub(amount); + self.adjust_bond_lock::(BondAdjust::Decrease)?; + Ok(()) } - /// Set delegator status to active - pub fn cancel_leave(&mut self) { - self.status = DelegatorStatus::Active + + pub fn is_active(&self) -> bool { + matches!(self.status, DelegatorStatus::Active) } + pub fn add_delegation(&mut self, bond: Bond) -> bool { let amt = bond.amount; if self.delegations.insert(bond) { @@ -1324,7 +1369,11 @@ impl< } // Return Some(remaining balance), must be more than MinDelegatorStk // Return None if delegation not found - pub fn rm_delegation(&mut self, collator: &AccountId) -> Option { + pub fn rm_delegation(&mut self, collator: &AccountId) -> Option + where + BalanceOf: From, + T::AccountId: From, + { let mut amt: Option = None; let delegations = self .delegations @@ -1341,7 +1390,9 @@ impl< .collect(); if let Some(balance) = amt { self.delegations = OrderedSet::from(delegations); - self.total = self.total.saturating_sub(balance); + let _ = >::jit_ensure_delegator_reserve_migrated(&self.id.clone().into()); + self.total_sub::(balance) + .expect("Decreasing lock cannot fail, qed"); Some(self.total) } else { None @@ -1365,11 +1416,13 @@ impl< if x.owner == candidate { let before_amount: BalanceOf = x.amount.into(); x.amount = x.amount.saturating_add(amount); - self.total = self.total.saturating_add(amount); + self.total_add_if::(amount, |_| { + >::jit_ensure_delegator_reserve_migrated(&delegator_id.clone()) + })?; + // update collator state delegation let mut collator_state = >::get(&candidate_id).ok_or(Error::::CandidateDNE)?; - T::Currency::reserve(&self.id.clone().into(), balance_amt)?; let before = collator_state.total_counted; let in_top = collator_state.increase_delegation::( &candidate_id, @@ -1398,6 +1451,52 @@ impl< Err(Error::::DelegationDNE.into()) } + /// Updates the bond locks for this delegator. + /// + /// This will take the current self.total and ensure that a lock of the same amount is applied + /// and when increasing the bond lock will also ensure that the account has enough free balance. + /// + /// `additional_required_balance` should reflect the change to the amount that should be locked if + /// positive, 0 otherwise (e.g. `min(0, change_in_total_bond)`). This is necessary because it is + /// not possible to query the amount that is locked for a given lock id. + pub fn adjust_bond_lock( + &mut self, + additional_required_balance: BondAdjust, + ) -> DispatchResult + where + BalanceOf: From, + T::AccountId: From, + { + match additional_required_balance { + BondAdjust::Increase(amount) => { + ensure!( + >::get_delegator_stakable_free_balance(&self.id.clone().into()) + >= amount.into(), + Error::::InsufficientBalance, + ); + + // additional sanity check: shouldn't ever want to lock more than total + if amount > self.total { + log::warn!("LOGIC ERROR: request to reserve more than bond total"); + return Err(DispatchError::Other("Invalid additional_required_balance")); + } + } + BondAdjust::Decrease => (), // do nothing on decrease + }; + + if self.total.is_zero() { + T::Currency::remove_lock(DELEGATOR_LOCK_ID, &self.id.clone().into()); + } else { + T::Currency::set_lock( + DELEGATOR_LOCK_ID, + &self.id.clone().into(), + self.total.into(), + WithdrawReasons::all(), + ); + } + Ok(()) + } + /// Retrieves the bond amount that a delegator has provided towards a collator. /// Returns `None` if missing. pub fn get_bond_amount(&self, collator: &AccountId) -> Option { @@ -1579,3 +1678,8 @@ impl Default for ParachainBondConfig { } } } + +pub enum BondAdjust { + Increase(Balance), + Decrease, +} diff --git a/pallets/parachain-staking/src/weights.rs b/pallets/parachain-staking/src/weights.rs index 18620b1337..52a52e69ad 100644 --- a/pallets/parachain-staking/src/weights.rs +++ b/pallets/parachain-staking/src/weights.rs @@ -17,12 +17,13 @@ //! Autogenerated weights for parachain_staking //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-04-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-05-23, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: // ./target/release/moonbeam // benchmark +// pallet // --chain // dev // --execution=wasm @@ -40,7 +41,7 @@ // --json-file // raw.json // --output -// ./benchmarks/ +// weights.rs #![allow(unused_parens)] #![allow(unused_imports)] @@ -123,42 +124,42 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking InflationConfig (r:1 w:1) #[rustfmt::skip] fn set_staking_expectations() -> Weight { - (18_965_000 as Weight) + (18_520_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking InflationConfig (r:1 w:1) #[rustfmt::skip] fn set_inflation() -> Weight { - (54_552_000 as Weight) + (53_196_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking ParachainBondInfo (r:1 w:1) #[rustfmt::skip] fn set_parachain_bond_account() -> Weight { - (18_127_000 as Weight) + (18_168_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking ParachainBondInfo (r:1 w:1) #[rustfmt::skip] fn set_parachain_bond_reserve_percent() -> Weight { - (17_902_000 as Weight) + (17_397_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking TotalSelected (r:1 w:1) #[rustfmt::skip] fn set_total_selected() -> Weight { - (20_823_000 as Weight) + (20_404_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking CollatorCommission (r:1 w:1) #[rustfmt::skip] fn set_collator_commission() -> Weight { - (17_257_000 as Weight) + (17_036_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } @@ -166,7 +167,7 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking InflationConfig (r:1 w:1) #[rustfmt::skip] fn set_blocks_per_round() -> Weight { - (59_571_000 as Weight) + (57_722_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } @@ -179,9 +180,9 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking BottomDelegations (r:0 w:1) #[rustfmt::skip] fn join_candidates(x: u32, ) -> Weight { - (65_756_000 as Weight) + (70_223_000 as Weight) // Standard Error: 1_000 - .saturating_add((73_000 as Weight).saturating_mul(x as Weight)) + .saturating_add((69_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } @@ -189,9 +190,9 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn schedule_leave_candidates(x: u32, ) -> Weight { - (63_558_000 as Weight) - // Standard Error: 2_000 - .saturating_add((50_000 as Weight).saturating_mul(x as Weight)) + (53_351_000 as Weight) + // Standard Error: 1_000 + .saturating_add((66_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -205,8 +206,8 @@ impl WeightInfo for SubstrateWeight { #[rustfmt::skip] fn execute_leave_candidates(x: u32, ) -> Weight { (0 as Weight) - // Standard Error: 94_000 - .saturating_add((33_442_000 as Weight).saturating_mul(x as Weight)) + // Standard Error: 99_000 + .saturating_add((33_350_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(x as Weight))) .saturating_add(T::DbWeight::get().writes(4 as Weight)) @@ -216,9 +217,9 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn cancel_leave_candidates(x: u32, ) -> Weight { - (62_425_000 as Weight) - // Standard Error: 2_000 - .saturating_add((49_000 as Weight).saturating_mul(x as Weight)) + (50_534_000 as Weight) + // Standard Error: 1_000 + .saturating_add((66_000 as Weight).saturating_mul(x as Weight)) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -226,7 +227,7 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn go_offline() -> Weight { - (28_328_000 as Weight) + (27_716_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -234,7 +235,7 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn go_online() -> Weight { - (28_177_000 as Weight) + (27_463_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -244,14 +245,14 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn candidate_bond_more() -> Weight { - (48_129_000 as Weight) + (45_671_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } // Storage: ParachainStaking CandidateInfo (r:1 w:1) #[rustfmt::skip] fn schedule_candidate_bond_less() -> Weight { - (26_339_000 as Weight) + (26_710_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } @@ -261,14 +262,14 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn execute_candidate_bond_less() -> Weight { - (56_074_000 as Weight) + (54_648_000 as Weight) .saturating_add(T::DbWeight::get().reads(4 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } // Storage: ParachainStaking CandidateInfo (r:1 w:1) #[rustfmt::skip] fn cancel_candidate_bond_less() -> Weight { - (23_146_000 as Weight) + (22_585_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } @@ -280,22 +281,24 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn delegate(x: u32, y: u32, ) -> Weight { - (114_601_000 as Weight) - // Standard Error: 11_000 - .saturating_add((23_000 as Weight).saturating_mul(x as Weight)) - // Standard Error: 4_000 - .saturating_add((94_000 as Weight).saturating_mul(y as Weight)) + (81_464_000 as Weight) + // Standard Error: 7_000 + .saturating_add((273_000 as Weight).saturating_mul(x as Weight)) + // Standard Error: 2_000 + .saturating_add((156_000 as Weight).saturating_mul(y as Weight)) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn schedule_leave_delegators() -> Weight { - (27_072_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + (32_060_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) // Storage: ParachainStaking CandidateInfo (r:1 w:1) // Storage: ParachainStaking TopDelegations (r:1 w:1) // Storage: ParachainStaking CandidatePool (r:1 w:1) @@ -304,28 +307,30 @@ impl WeightInfo for SubstrateWeight { #[rustfmt::skip] fn execute_leave_delegators(x: u32, ) -> Weight { (0 as Weight) - // Standard Error: 36_000 - .saturating_add((33_909_000 as Weight).saturating_mul(x as Weight)) - .saturating_add(T::DbWeight::get().reads(2 as Weight)) - .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(x as Weight))) - .saturating_add(T::DbWeight::get().writes(2 as Weight)) - .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(x as Weight))) + // Standard Error: 44_000 + .saturating_add((39_035_000 as Weight).saturating_mul(x as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(x as Weight))) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(x as Weight))) } // Storage: ParachainStaking DelegatorState (r:1 w:1) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn cancel_leave_delegators() -> Weight { - (24_002_000 as Weight) - .saturating_add(T::DbWeight::get().reads(1 as Weight)) - .saturating_add(T::DbWeight::get().writes(1 as Weight)) + (31_955_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn schedule_revoke_delegation() -> Weight { - (32_552_000 as Weight) + (31_793_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:0) // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking CandidateInfo (r:1 w:1) // Storage: System Account (r:1 w:1) @@ -334,20 +339,20 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn delegator_bond_more() -> Weight { - (63_313_000 as Weight) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) + (66_476_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(6 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn schedule_delegator_bond_less() -> Weight { - (32_393_000 as Weight) + (31_467_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) - // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:0) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) // Storage: ParachainStaking CandidateInfo (r:1 w:1) // Storage: ParachainStaking TopDelegations (r:1 w:1) // Storage: ParachainStaking CandidatePool (r:1 w:1) @@ -355,9 +360,9 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn execute_revoke_delegation() -> Weight { - (82_209_000 as Weight) + (82_319_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) - .saturating_add(T::DbWeight::get().writes(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(7 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) @@ -368,7 +373,7 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn execute_delegator_bond_less() -> Weight { - (76_987_000 as Weight) + (75_207_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(7 as Weight)) } @@ -376,7 +381,7 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn cancel_revoke_delegation() -> Weight { - (30_528_000 as Weight) + (29_497_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -384,7 +389,7 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn cancel_delegator_bond_less() -> Weight { - (36_326_000 as Weight) + (35_951_000 as Weight) .saturating_add(T::DbWeight::get().reads(2 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } @@ -402,18 +407,20 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking Total (r:1 w:0) // Storage: ParachainStaking AwardedPts (r:2 w:1) // Storage: ParachainStaking AtStake (r:1 w:10) + // Storage: MoonbeamOrbiters OrbiterPerRound (r:1 w:0) + // Storage: MoonbeamOrbiters CurrentRound (r:0 w:1) // Storage: ParachainStaking SelectedCandidates (r:0 w:1) // Storage: ParachainStaking DelayedPayouts (r:0 w:1) #[rustfmt::skip] fn round_transition_on_initialize(x: u32, y: u32, ) -> Weight { - (105_685_000 as Weight) - // Standard Error: 819_000 - .saturating_add((52_388_000 as Weight).saturating_mul(x as Weight)) + (5_114_000 as Weight) + // Standard Error: 796_000 + .saturating_add((52_172_000 as Weight).saturating_mul(x as Weight)) // Standard Error: 2_000 - .saturating_add((157_000 as Weight).saturating_mul(y as Weight)) - .saturating_add(T::DbWeight::get().reads(194 as Weight)) + .saturating_add((156_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(T::DbWeight::get().reads(195 as Weight)) .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(x as Weight))) - .saturating_add(T::DbWeight::get().writes(187 as Weight)) + .saturating_add(T::DbWeight::get().writes(188 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(x as Weight))) } // Storage: ParachainStaking DelayedPayouts (r:1 w:0) @@ -421,19 +428,20 @@ impl WeightInfo for SubstrateWeight { // Storage: ParachainStaking AwardedPts (r:2 w:1) // Storage: ParachainStaking AtStake (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: MoonbeamOrbiters OrbiterPerRound (r:1 w:0) #[rustfmt::skip] fn pay_one_collator_reward(y: u32, ) -> Weight { - (38_383_000 as Weight) - // Standard Error: 23_000 - .saturating_add((17_003_000 as Weight).saturating_mul(y as Weight)) - .saturating_add(T::DbWeight::get().reads(6 as Weight)) + (49_798_000 as Weight) + // Standard Error: 9_000 + .saturating_add((16_304_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(y as Weight))) .saturating_add(T::DbWeight::get().writes(3 as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(y as Weight))) } #[rustfmt::skip] fn base_on_initialize() -> Weight { - (5_103_000 as Weight) + (4_762_000 as Weight) } } @@ -442,42 +450,42 @@ impl WeightInfo for () { // Storage: ParachainStaking InflationConfig (r:1 w:1) #[rustfmt::skip] fn set_staking_expectations() -> Weight { - (18_965_000 as Weight) + (18_520_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking InflationConfig (r:1 w:1) #[rustfmt::skip] fn set_inflation() -> Weight { - (54_552_000 as Weight) + (53_196_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking ParachainBondInfo (r:1 w:1) #[rustfmt::skip] fn set_parachain_bond_account() -> Weight { - (18_127_000 as Weight) + (18_168_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking ParachainBondInfo (r:1 w:1) #[rustfmt::skip] fn set_parachain_bond_reserve_percent() -> Weight { - (17_902_000 as Weight) + (17_397_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking TotalSelected (r:1 w:1) #[rustfmt::skip] fn set_total_selected() -> Weight { - (20_823_000 as Weight) + (20_404_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: ParachainStaking CollatorCommission (r:1 w:1) #[rustfmt::skip] fn set_collator_commission() -> Weight { - (17_257_000 as Weight) + (17_036_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } @@ -485,7 +493,7 @@ impl WeightInfo for () { // Storage: ParachainStaking InflationConfig (r:1 w:1) #[rustfmt::skip] fn set_blocks_per_round() -> Weight { - (59_571_000 as Weight) + (57_722_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } @@ -498,9 +506,9 @@ impl WeightInfo for () { // Storage: ParachainStaking BottomDelegations (r:0 w:1) #[rustfmt::skip] fn join_candidates(x: u32, ) -> Weight { - (65_756_000 as Weight) + (70_223_000 as Weight) // Standard Error: 1_000 - .saturating_add((73_000 as Weight).saturating_mul(x as Weight)) + .saturating_add((69_000 as Weight).saturating_mul(x as Weight)) .saturating_add(RocksDbWeight::get().reads(5 as Weight)) .saturating_add(RocksDbWeight::get().writes(6 as Weight)) } @@ -508,9 +516,9 @@ impl WeightInfo for () { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn schedule_leave_candidates(x: u32, ) -> Weight { - (63_558_000 as Weight) - // Standard Error: 2_000 - .saturating_add((50_000 as Weight).saturating_mul(x as Weight)) + (53_351_000 as Weight) + // Standard Error: 1_000 + .saturating_add((66_000 as Weight).saturating_mul(x as Weight)) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -524,8 +532,8 @@ impl WeightInfo for () { #[rustfmt::skip] fn execute_leave_candidates(x: u32, ) -> Weight { (0 as Weight) - // Standard Error: 94_000 - .saturating_add((33_442_000 as Weight).saturating_mul(x as Weight)) + // Standard Error: 99_000 + .saturating_add((33_350_000 as Weight).saturating_mul(x as Weight)) .saturating_add(RocksDbWeight::get().reads(4 as Weight)) .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(x as Weight))) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) @@ -535,9 +543,9 @@ impl WeightInfo for () { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn cancel_leave_candidates(x: u32, ) -> Weight { - (62_425_000 as Weight) - // Standard Error: 2_000 - .saturating_add((49_000 as Weight).saturating_mul(x as Weight)) + (50_534_000 as Weight) + // Standard Error: 1_000 + .saturating_add((66_000 as Weight).saturating_mul(x as Weight)) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -545,7 +553,7 @@ impl WeightInfo for () { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn go_offline() -> Weight { - (28_328_000 as Weight) + (27_716_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -553,7 +561,7 @@ impl WeightInfo for () { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn go_online() -> Weight { - (28_177_000 as Weight) + (27_463_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -563,14 +571,14 @@ impl WeightInfo for () { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn candidate_bond_more() -> Weight { - (48_129_000 as Weight) + (45_671_000 as Weight) .saturating_add(RocksDbWeight::get().reads(4 as Weight)) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) } // Storage: ParachainStaking CandidateInfo (r:1 w:1) #[rustfmt::skip] fn schedule_candidate_bond_less() -> Weight { - (26_339_000 as Weight) + (26_710_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } @@ -580,14 +588,14 @@ impl WeightInfo for () { // Storage: ParachainStaking CandidatePool (r:1 w:1) #[rustfmt::skip] fn execute_candidate_bond_less() -> Weight { - (56_074_000 as Weight) + (54_648_000 as Weight) .saturating_add(RocksDbWeight::get().reads(4 as Weight)) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) } // Storage: ParachainStaking CandidateInfo (r:1 w:1) #[rustfmt::skip] fn cancel_candidate_bond_less() -> Weight { - (23_146_000 as Weight) + (22_585_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } @@ -599,22 +607,24 @@ impl WeightInfo for () { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn delegate(x: u32, y: u32, ) -> Weight { - (114_601_000 as Weight) - // Standard Error: 11_000 - .saturating_add((23_000 as Weight).saturating_mul(x as Weight)) - // Standard Error: 4_000 - .saturating_add((94_000 as Weight).saturating_mul(y as Weight)) + (81_464_000 as Weight) + // Standard Error: 7_000 + .saturating_add((273_000 as Weight).saturating_mul(x as Weight)) + // Standard Error: 2_000 + .saturating_add((156_000 as Weight).saturating_mul(y as Weight)) .saturating_add(RocksDbWeight::get().reads(6 as Weight)) .saturating_add(RocksDbWeight::get().writes(6 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn schedule_leave_delegators() -> Weight { - (27_072_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(1 as Weight)) - .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + (32_060_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) // Storage: ParachainStaking CandidateInfo (r:1 w:1) // Storage: ParachainStaking TopDelegations (r:1 w:1) // Storage: ParachainStaking CandidatePool (r:1 w:1) @@ -623,28 +633,30 @@ impl WeightInfo for () { #[rustfmt::skip] fn execute_leave_delegators(x: u32, ) -> Weight { (0 as Weight) - // Standard Error: 36_000 - .saturating_add((33_909_000 as Weight).saturating_mul(x as Weight)) - .saturating_add(RocksDbWeight::get().reads(2 as Weight)) - .saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(x as Weight))) - .saturating_add(RocksDbWeight::get().writes(2 as Weight)) - .saturating_add(RocksDbWeight::get().writes((2 as Weight).saturating_mul(x as Weight))) + // Standard Error: 44_000 + .saturating_add((39_035_000 as Weight).saturating_mul(x as Weight)) + .saturating_add(RocksDbWeight::get().reads(1 as Weight)) + .saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(x as Weight))) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + .saturating_add(RocksDbWeight::get().writes((3 as Weight).saturating_mul(x as Weight))) } // Storage: ParachainStaking DelegatorState (r:1 w:1) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn cancel_leave_delegators() -> Weight { - (24_002_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(1 as Weight)) - .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + (31_955_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn schedule_revoke_delegation() -> Weight { - (32_552_000 as Weight) + (31_793_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:0) // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking CandidateInfo (r:1 w:1) // Storage: System Account (r:1 w:1) @@ -653,20 +665,20 @@ impl WeightInfo for () { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn delegator_bond_more() -> Weight { - (63_313_000 as Weight) - .saturating_add(RocksDbWeight::get().reads(6 as Weight)) + (66_476_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(7 as Weight)) .saturating_add(RocksDbWeight::get().writes(6 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn schedule_delegator_bond_less() -> Weight { - (32_393_000 as Weight) + (31_467_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) - // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:0) + // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) // Storage: ParachainStaking CandidateInfo (r:1 w:1) // Storage: ParachainStaking TopDelegations (r:1 w:1) // Storage: ParachainStaking CandidatePool (r:1 w:1) @@ -674,9 +686,9 @@ impl WeightInfo for () { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn execute_revoke_delegation() -> Weight { - (82_209_000 as Weight) + (82_319_000 as Weight) .saturating_add(RocksDbWeight::get().reads(7 as Weight)) - .saturating_add(RocksDbWeight::get().writes(6 as Weight)) + .saturating_add(RocksDbWeight::get().writes(7 as Weight)) } // Storage: ParachainStaking DelegatorState (r:1 w:1) // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) @@ -687,7 +699,7 @@ impl WeightInfo for () { // Storage: ParachainStaking Total (r:1 w:1) #[rustfmt::skip] fn execute_delegator_bond_less() -> Weight { - (76_987_000 as Weight) + (75_207_000 as Weight) .saturating_add(RocksDbWeight::get().reads(7 as Weight)) .saturating_add(RocksDbWeight::get().writes(7 as Weight)) } @@ -695,7 +707,7 @@ impl WeightInfo for () { // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn cancel_revoke_delegation() -> Weight { - (30_528_000 as Weight) + (29_497_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -703,7 +715,7 @@ impl WeightInfo for () { // Storage: ParachainStaking DelegationScheduledRequests (r:1 w:1) #[rustfmt::skip] fn cancel_delegator_bond_less() -> Weight { - (36_326_000 as Weight) + (35_951_000 as Weight) .saturating_add(RocksDbWeight::get().reads(2 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } @@ -721,18 +733,20 @@ impl WeightInfo for () { // Storage: ParachainStaking Total (r:1 w:0) // Storage: ParachainStaking AwardedPts (r:2 w:1) // Storage: ParachainStaking AtStake (r:1 w:10) + // Storage: MoonbeamOrbiters OrbiterPerRound (r:1 w:0) + // Storage: MoonbeamOrbiters CurrentRound (r:0 w:1) // Storage: ParachainStaking SelectedCandidates (r:0 w:1) // Storage: ParachainStaking DelayedPayouts (r:0 w:1) #[rustfmt::skip] fn round_transition_on_initialize(x: u32, y: u32, ) -> Weight { - (105_685_000 as Weight) - // Standard Error: 819_000 - .saturating_add((52_388_000 as Weight).saturating_mul(x as Weight)) + (5_114_000 as Weight) + // Standard Error: 796_000 + .saturating_add((52_172_000 as Weight).saturating_mul(x as Weight)) // Standard Error: 2_000 - .saturating_add((157_000 as Weight).saturating_mul(y as Weight)) - .saturating_add(RocksDbWeight::get().reads(194 as Weight)) + .saturating_add((156_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(RocksDbWeight::get().reads(195 as Weight)) .saturating_add(RocksDbWeight::get().reads((3 as Weight).saturating_mul(x as Weight))) - .saturating_add(RocksDbWeight::get().writes(187 as Weight)) + .saturating_add(RocksDbWeight::get().writes(188 as Weight)) .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(x as Weight))) } // Storage: ParachainStaking DelayedPayouts (r:1 w:0) @@ -740,18 +754,19 @@ impl WeightInfo for () { // Storage: ParachainStaking AwardedPts (r:2 w:1) // Storage: ParachainStaking AtStake (r:1 w:1) // Storage: System Account (r:1 w:1) + // Storage: MoonbeamOrbiters OrbiterPerRound (r:1 w:0) #[rustfmt::skip] fn pay_one_collator_reward(y: u32, ) -> Weight { - (38_383_000 as Weight) - // Standard Error: 23_000 - .saturating_add((17_003_000 as Weight).saturating_mul(y as Weight)) - .saturating_add(RocksDbWeight::get().reads(6 as Weight)) + (49_798_000 as Weight) + // Standard Error: 9_000 + .saturating_add((16_304_000 as Weight).saturating_mul(y as Weight)) + .saturating_add(RocksDbWeight::get().reads(7 as Weight)) .saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(y as Weight))) .saturating_add(RocksDbWeight::get().writes(3 as Weight)) .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(y as Weight))) } #[rustfmt::skip] fn base_on_initialize() -> Weight { - (5_103_000 as Weight) + (4_762_000 as Weight) } } diff --git a/pallets/proxy-genesis-companion/Cargo.toml b/pallets/proxy-genesis-companion/Cargo.toml index 43dc482b4d..63788455ee 100644 --- a/pallets/proxy-genesis-companion/Cargo.toml +++ b/pallets/proxy-genesis-companion/Cargo.toml @@ -6,19 +6,19 @@ edition = "2021" version = "0.1.0" [dependencies] -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-proxy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-proxy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [dev-dependencies] serde = "1.0.124" -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/pallets/randomness/Cargo.toml b/pallets/randomness/Cargo.toml new file mode 100644 index 0000000000..a45b55aefc --- /dev/null +++ b/pallets/randomness/Cargo.toml @@ -0,0 +1,51 @@ +[package] +name = "pallet-randomness" +authors = [ "PureStake" ] +description = "Provides randomness" +edition = "2018" +version = "0.1.0" + +[dependencies] +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +log = "0.4" +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } +scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } +serde = { version = "1.0.101", optional = true } +session-keys-primitives = { path = "../../primitives/session-keys", default-features = false } +sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } + +# Frontier +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } + +[dev-dependencies] +derive_more = "0.99" +pallet-author-mapping = { path = "../author-mapping" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } + +[features] +default = [ "std" ] +std = [ + "frame-benchmarking/std", + "frame-support/std", + "frame-system/std", + "nimbus-primitives/std", + "pallet-evm/std", + "parity-scale-codec/std", + "scale-info/std", + "serde", + "session-keys-primitives/std", + "sp-consensus-vrf/std", + "sp-core/std", + "sp-io/std", + "sp-runtime/std", + "sp-std/std", +] +runtime-benchmarks = [ "frame-benchmarking" ] +# try-runtime = [ "frame-support/try-runtime" ] diff --git a/pallets/randomness/src/benchmarks.rs b/pallets/randomness/src/benchmarks.rs new file mode 100644 index 0000000000..f1bd61433d --- /dev/null +++ b/pallets/randomness/src/benchmarks.rs @@ -0,0 +1,184 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +#![cfg(feature = "runtime-benchmarks")] + +//! Benchmarking +use crate::{BalanceOf, Config, Pallet, RandomnessResults, Request, RequestType}; +use frame_benchmarking::{benchmarks, impl_benchmark_test_suite, Zero}; +use frame_support::{ + dispatch::DispatchResult, + traits::{Currency, Get}, +}; +use pallet_evm::AddressMapping; +use sp_core::{H160, H256}; +use sp_runtime::traits::One; + +/// Create a funded user from the input +fn fund_user(user: H160, fee: BalanceOf) { + let total_minted = fee + <::Deposit as Get>>::get(); + T::Currency::make_free_balance_be(&T::AddressMapping::into_account_id(user), total_minted); + T::Currency::issue(total_minted); +} + +benchmarks! { + // TODO: causes panic: + // Thread 'main' panicked at 'set in `set_validation_data`inherent => available before + // on_initialize', runtime/moonbase/src/lib.rs:1111 + // set_babe_randomness_results {}: _(RawOrigin::None) + // verify { } + + // // TODO: need to produce Vrf PreDigest using authoring NimbusId and insert both into digests + // set_output { + // // needs to be 2nd block to reflect expected costs every block + // crate::vrf::set_input::(); + // crate::vrf::set_output::(); + // crate::vrf::set_input::(); + // }: { + // crate::vrf::set_output::(); + // } + // verify {} + + request_randomness { + let more = <::Deposit as Get>>::get(); + fund_user::(H160::default(), more); + }: { + let result = Pallet::::request_randomness(Request { + refund_address: H160::default(), + contract_address: H160::default(), + fee: BalanceOf::::zero(), + gas_limit: 100u64, + num_words: 100u8, + salt: H256::default(), + info: RequestType::Local(10u32.into()) + }); + assert!(result.is_ok(), "Request Randomness Failed"); + } + verify { + assert!(Pallet::::requests(&0u64).is_some()); + assert!(Pallet::::requests(&1u64).is_none()); + } + + prepare_fulfillment { + let more = <::Deposit as Get>>::get(); + fund_user::(H160::default(), more); + let result = Pallet::::request_randomness(Request { + refund_address: H160::default(), + contract_address: H160::default(), + fee: BalanceOf::::zero(), + gas_limit: 100u64, + num_words: 100u8, + salt: H256::default(), + info: RequestType::Local(10u32.into()) + }); + let mut result = >::get(RequestType::Local(10u32.into())).unwrap(); + result.randomness = Some(Default::default()); + RandomnessResults::::insert(RequestType::Local(10u32.into()), result); + frame_system::Pallet::::set_block_number(10u32.into()); + }: { + let result = Pallet::::prepare_fulfillment(0u64); + assert!(result.is_ok(), "Prepare Fulfillment Failed"); + } + verify { } + + finish_fulfillment { + let more = <::Deposit as Get>>::get(); + fund_user::(H160::default(), more); + let result = Pallet::::request_randomness(Request { + refund_address: H160::default(), + contract_address: H160::default(), + fee: BalanceOf::::zero(), + gas_limit: 100u64, + num_words: 100u8, + salt: H256::default(), + info: RequestType::Local(10u32.into()) + }); + let mut result = >::get(RequestType::Local(10u32.into())).unwrap(); + result.randomness = Some(Default::default()); + RandomnessResults::::insert(RequestType::Local(10u32.into()), result); + frame_system::Pallet::::set_block_number(10u32.into()); + let result = Pallet::::prepare_fulfillment(0u64); + assert!(result.is_ok(), "Prepare Fulfillment Failed"); + }: { + let result = Pallet::::finish_fulfillment(0u64, Request { + refund_address: H160::default(), + contract_address: H160::default(), + fee: BalanceOf::::zero(), + gas_limit: 100u64, + num_words: 100u8, + salt: H256::default(), + info: RequestType::Local(10u32.into()).into() + }, more, &H160::default(), BalanceOf::::zero()); + assert!(Pallet::::requests(0u64).is_none()); + } + verify { } + + increase_fee { + let more = <::Deposit as Get>>::get(); + fund_user::(H160::default(), more); + let result = Pallet::::request_randomness(Request { + refund_address: H160::default(), + contract_address: H160::default(), + fee: BalanceOf::::zero(), + gas_limit: 100u64, + num_words: 100u8, + salt: H256::default(), + info: RequestType::Local(10u32.into()).into() + }); + }: { + let result = Pallet::::increase_request_fee(&H160::default(), 0u64, BalanceOf::::one()); + assert_eq!(result, DispatchResult::Ok(())); + } + verify { } + + execute_request_expiration { + let more = <::Deposit as Get>>::get(); + fund_user::(H160::default(), more); + let result = Pallet::::request_randomness(Request { + refund_address: H160::default(), + contract_address: H160::default(), + fee: BalanceOf::::zero(), + gas_limit: 100u64, + num_words: 100u8, + salt: H256::default(), + info: RequestType::Local(10u32.into()) + }); + frame_system::Pallet::::set_block_number(10_001u32.into()); + }: { + let result = Pallet::::execute_request_expiration(&H160::default(), 0u64); + assert_eq!(result, DispatchResult::Ok(())); + } + verify { } +} + +#[cfg(test)] +mod tests { + use crate::mock::Test; + use sp_io::TestExternalities; + + pub fn new_test_ext() -> TestExternalities { + let t = frame_system::GenesisConfig::default() + .build_storage::() + .unwrap(); + TestExternalities::new(t) + } +} + +impl_benchmark_test_suite!( + Pallet, + crate::benchmarks::tests::new_test_ext(), + crate::mock::Test +); diff --git a/pallets/randomness/src/lib.rs b/pallets/randomness/src/lib.rs new file mode 100644 index 0000000000..72d25a9bf8 --- /dev/null +++ b/pallets/randomness/src/lib.rs @@ -0,0 +1,397 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Randomness pallet + +#![cfg_attr(not(feature = "std"), no_std)] + +use frame_support::pallet; + +pub use pallet::*; + +#[cfg(any(test, feature = "runtime-benchmarks"))] +mod benchmarks; +pub mod types; +pub mod vrf; +pub use types::*; +pub mod weights; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +/// Read babe randomness info from the relay chain state proof +pub trait GetBabeData { + fn get_epoch_index() -> EpochIndex; + fn get_epoch_randomness() -> Randomness; +} + +#[pallet] +pub mod pallet { + use super::*; + use frame_support::traits::{Currency, ExistenceRequirement::KeepAlive}; + use frame_support::{pallet_prelude::*, PalletId}; + use frame_system::pallet_prelude::*; + use nimbus_primitives::NimbusId; + use pallet_evm::AddressMapping; + use session_keys_primitives::{InherentError, KeysLookup, VrfId, INHERENT_IDENTIFIER}; + use sp_core::{H160, H256}; + use sp_runtime::traits::{AccountIdConversion, Saturating}; + use sp_std::{convert::TryInto, vec::Vec}; + + /// The Randomness's pallet id + pub const PALLET_ID: PalletId = PalletId(*b"moonrand"); + + /// Request identifier, unique per request for randomness + pub type RequestId = u64; + + pub type BalanceOf = + <::Currency as Currency<::AccountId>>::Balance; + + #[pallet::pallet] + #[pallet::without_storage_info] + pub struct Pallet(PhantomData); + + /// Configuration trait of this pallet. + #[pallet::config] + pub trait Config: frame_system::Config { + /// Overarching event type + type Event: From> + IsType<::Event>; + /// Address mapping to convert from H160 to AccountId + type AddressMapping: AddressMapping; + /// Currency in which the security deposit will be taken. + type Currency: Currency; + /// Get the BABE data from the runtime + type BabeDataGetter: GetBabeData>; + /// Takes NimbusId to return VrfId + type VrfKeyLookup: KeysLookup; + #[pallet::constant] + /// The amount that should be taken as a security deposit when requesting randomness. + type Deposit: Get>; + #[pallet::constant] + /// Maximum number of random words that can be requested per request + type MaxRandomWords: Get; + #[pallet::constant] + /// Local per-block VRF requests must be at least this many blocks after the block in which + /// they were requested + type MinBlockDelay: Get; + #[pallet::constant] + /// Local per-block VRF requests must be at most this many blocks after the block in which + /// they were requested + type MaxBlockDelay: Get; + #[pallet::constant] + /// Local requests expire and can be purged from storage after this many blocks/epochs + type BlockExpirationDelay: Get; + #[pallet::constant] + /// Babe requests expire and can be purged from storage after this many blocks/epochs + type EpochExpirationDelay: Get; + } + + #[pallet::error] + pub enum Error { + RequestCounterOverflowed, + RequestFeeOverflowed, + MustRequestAtLeastOneWord, + CannotRequestMoreWordsThanMax, + CannotRequestRandomnessAfterMaxDelay, + CannotRequestRandomnessBeforeMinDelay, + RequestDNE, + RequestCannotYetBeFulfilled, + OnlyRequesterCanIncreaseFee, + RequestHasNotExpired, + RandomnessResultDNE, + RandomnessResultNotFilled, + } + + #[pallet::event] + #[pallet::generate_deposit(pub(crate) fn deposit_event)] + pub enum Event { + RandomnessRequestedBabeEpoch { + id: RequestId, + refund_address: H160, + contract_address: H160, + fee: BalanceOf, + gas_limit: u64, + num_words: u8, + salt: H256, + earliest_epoch: u64, + }, + RandomnessRequestedLocal { + id: RequestId, + refund_address: H160, + contract_address: H160, + fee: BalanceOf, + gas_limit: u64, + num_words: u8, + salt: H256, + earliest_block: T::BlockNumber, + }, + RequestFulfilled { + id: RequestId, + }, + RequestFeeIncreased { + id: RequestId, + new_fee: BalanceOf, + }, + RequestExpirationExecuted { + id: RequestId, + }, + } + + #[pallet::storage] + #[pallet::getter(fn requests)] + /// Randomness requests not yet fulfilled or purged + pub type Requests = StorageMap<_, Twox64Concat, RequestId, RequestState>; + + #[pallet::storage] + #[pallet::getter(fn request_count)] + /// Number of randomness requests made so far, used to generate the next request's uid + pub type RequestCount = StorageValue<_, RequestId, ValueQuery>; + + /// Current local per-block VRF randomness + /// Set in `on_initialize` + #[pallet::storage] + #[pallet::getter(fn local_vrf_output)] + pub type LocalVrfOutput = StorageValue<_, Option, ValueQuery>; + + /// Relay epoch + #[pallet::storage] + #[pallet::getter(fn relay_epoch)] + pub(crate) type RelayEpoch = StorageValue<_, u64, ValueQuery>; + + /// Ensures the mandatory inherent was included in the block + #[pallet::storage] + #[pallet::getter(fn inherent_included)] + pub(crate) type InherentIncluded = StorageValue<_, ()>; + + /// Records whether this is the first block (genesis or runtime upgrade) + #[pallet::storage] + #[pallet::getter(fn not_first_block)] + pub type NotFirstBlock = StorageValue<_, ()>; + + /// Snapshot of randomness to fulfill all requests that are for the same raw randomness + /// Removed once $value.request_count == 0 + #[pallet::storage] + #[pallet::getter(fn randomness_results)] + pub(crate) type RandomnessResults = + StorageMap<_, Twox64Concat, RequestType, RandomnessResult>; + + #[pallet::call] + impl Pallet { + /// Populates the `RandomnessResults` that are due this block with the raw values + // This inherent is a workaround to run code in every block after + // `ParachainSystem::set_validation_data` but before all extrinsics. + // the relevant storage item to validate the VRF output in this pallet's `on_initialize` + // This should go into on_post_inherents when it is ready + // https://github.com/paritytech/substrate/pull/10128 + // TODO: weight + #[pallet::weight((10_000, DispatchClass::Mandatory))] + pub fn set_babe_randomness_results(origin: OriginFor) -> DispatchResultWithPostInfo { + ensure_none(origin)?; + + let last_relay_epoch_index = >::get(); + // populate the `RandomnessResults` for BABE epoch randomness (1 and 2 ago) + let relay_epoch_index = T::BabeDataGetter::get_epoch_index(); + if relay_epoch_index > last_relay_epoch_index { + let babe_one_epoch_ago_this_block = RequestType::BabeEpoch(relay_epoch_index); + if let Some(mut results) = + >::get(&babe_one_epoch_ago_this_block) + { + if let Some(randomness) = T::BabeDataGetter::get_epoch_randomness() { + results.randomness = Some(randomness); + >::insert(babe_one_epoch_ago_this_block, results); + } else { + log::warn!( + "Failed to fill BABE epoch randomness results \ + REQUIRE HOTFIX TO FILL EPOCH RANDOMNESS RESULTS FOR EPOCH {:?}", + relay_epoch_index + ); + } + } + } + >::put(relay_epoch_index); + >::put(()); + + Ok(Pays::No.into()) + } + } + + #[pallet::inherent] + impl ProvideInherent for Pallet { + type Call = Call; + type Error = InherentError; + const INHERENT_IDENTIFIER: InherentIdentifier = INHERENT_IDENTIFIER; + + fn is_inherent_required(_: &InherentData) -> Result, Self::Error> { + // Return Ok(Some(_)) unconditionally because this inherent is required in every block + // If it is not found, throw a VrfInherentRequired error. + Ok(Some(InherentError::Other( + sp_runtime::RuntimeString::Borrowed( + "Inherent required to set babe randomness results", + ), + ))) + } + + // The empty-payload inherent extrinsic. + fn create_inherent(_data: &InherentData) -> Option { + Some(Call::set_babe_randomness_results {}) + } + + fn is_inherent(call: &Self::Call) -> bool { + matches!(call, Call::set_babe_randomness_results { .. }) + } + } + + #[pallet::hooks] + impl Hooks> for Pallet { + // Set this block's randomness using the VRF output + fn on_initialize(_now: BlockNumberFor) -> Weight { + // Set and validate VRF output + vrf::set_output::() + } + // Set next block's VRF input in storage + fn on_finalize(_now: BlockNumberFor) { + // Panics if set_babe_randomness_results inherent was not included + assert!( + >::take().is_some(), + "Mandatory randomness inherent not included; InherentIncluded storage item is empty" + ); + } + } + + // Utility function + impl Pallet { + pub fn account_id() -> T::AccountId { + PALLET_ID.into_account_truncating() + } + pub fn total_locked() -> BalanceOf { + // free balance is usable balance for the pallet account as it is not controlled + // by anyone so will never be locked + T::Currency::free_balance(&Self::account_id()) + } + pub(crate) fn concat_and_hash(a: T::Hash, b: H256, index: u8) -> Vec<[u8; 32]> { + let mut output: Vec<[u8; 32]> = Vec::new(); + let mut s = Vec::new(); + for i in 0u8..index { + s.extend_from_slice(a.as_ref()); + s.extend_from_slice(b.as_ref()); + s.extend_from_slice(&[i]); + output.push(sp_io::hashing::blake2_256(&s)); + s.clear(); + } + output + } + } + + // Public functions for precompile usage only + impl Pallet { + pub fn request_randomness( + request: Request, RequestType>, + ) -> Result { + let request = RequestState::new(request.into())?; + let (fee, contract_address, info) = ( + request.request.fee, + request.request.contract_address, + request.request.info.clone(), + ); + let total_to_reserve = T::Deposit::get().saturating_add(fee); + let contract_address = T::AddressMapping::into_account_id(contract_address); + // get new request ID + let request_id = >::get(); + let next_id = request_id + .checked_add(1u64) + .ok_or(Error::::RequestCounterOverflowed)?; + // send deposit to reserve account + T::Currency::transfer( + &contract_address, + &Self::account_id(), + total_to_reserve, + KeepAlive, + )?; + let info_key: RequestType = info.into(); + if let Some(existing_randomness_snapshot) = >::take(&info_key) { + >::insert( + &info_key, + existing_randomness_snapshot.increment_request_count(), + ); + } else { + >::insert(&info_key, RandomnessResult::new()); + } + // insert request + >::put(next_id); + request.request.emit_randomness_requested_event(request_id); + >::insert(request_id, request); + Ok(request_id) + } + /// Prepare fulfillment + /// Returns all arguments needed for fulfillment + pub fn prepare_fulfillment(id: RequestId) -> Result, DispatchError> { + >::get(id) + .ok_or(Error::::RequestDNE)? + .prepare_fulfill() + } + /// Finish fulfillment + /// Caller MUST ensure `id` corresponds to `request` or there will be side effects + pub fn finish_fulfillment( + id: RequestId, + request: Request, RequestInfo>, + deposit: BalanceOf, + caller: &H160, + cost_of_execution: BalanceOf, + ) { + request.finish_fulfill(deposit, caller, cost_of_execution); + let info_key: RequestType = request.info.into(); + if let Some(result) = RandomnessResults::::take(&info_key) { + if let Some(new_result) = result.decrement_request_count() { + RandomnessResults::::insert(&info_key, new_result); + } // else RandomnessResult is removed from storage + } + >::remove(id); + Self::deposit_event(Event::RequestFulfilled { id }); + } + /// Increase fee associated with request + pub fn increase_request_fee( + caller: &H160, + id: RequestId, + fee_increase: BalanceOf, + ) -> DispatchResult { + let mut request = >::get(id).ok_or(Error::::RequestDNE)?; + // Increase randomness request fee + let new_fee = request.increase_fee(caller, fee_increase)?; + >::insert(id, request); + Self::deposit_event(Event::RequestFeeIncreased { id, new_fee }); + Ok(()) + } + /// Execute request expiration + /// transfers fee to caller && purges request iff it has expired + /// does NOT try to fulfill the request + pub fn execute_request_expiration(caller: &H160, id: RequestId) -> DispatchResult { + let request = >::get(id).ok_or(Error::::RequestDNE)?; + let caller = T::AddressMapping::into_account_id(caller.clone()); + request.execute_expiration(&caller)?; + let info_key: RequestType = request.request.info.into(); + if let Some(result) = RandomnessResults::::take(&info_key) { + if let Some(new_result) = result.decrement_request_count() { + RandomnessResults::::insert(&info_key, new_result); + } // else RandomnessResult is removed from storage + } + >::remove(id); + Self::deposit_event(Event::RequestExpirationExecuted { id }); + Ok(()) + } + } +} diff --git a/pallets/randomness/src/mock.rs b/pallets/randomness/src/mock.rs new file mode 100644 index 0000000000..414583c8eb --- /dev/null +++ b/pallets/randomness/src/mock.rs @@ -0,0 +1,230 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! A minimal runtime including the pallet-randomness pallet +use super::*; +use crate as pallet_randomness; +use frame_support::{ + construct_runtime, parameter_types, + traits::{Everything, GenesisBuild}, + weights::Weight, +}; +use nimbus_primitives::NimbusId; +use pallet_evm::IdentityAddressMapping; +use session_keys_primitives::VrfId; +use sp_core::{H160, H256}; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, + Perbill, +}; +use sp_std::convert::{TryFrom, TryInto}; + +pub type AccountId = H160; +pub type Balance = u128; +pub type BlockNumber = u64; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; + +// Configure a mock runtime to test the pallet. +construct_runtime!( + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + AuthorMapping: pallet_author_mapping::{Pallet, Call, Storage, Config, Event}, + Randomness: pallet_randomness::{Pallet, Call, Storage, Event, Inherent}, + } +); + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub const MaximumBlockWeight: Weight = 1024; + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} +impl frame_system::Config for Test { + type BaseCallFilter = Everything; + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = BlockNumber; + type Call = Call; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} + +parameter_types! { + pub const ExistentialDeposit: u128 = 0; +} +impl pallet_balances::Config for Test { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); +} + +parameter_types! { + pub const DepositAmount: Balance = 100; +} +impl pallet_author_mapping::Config for Test { + type Event = Event; + type DepositCurrency = Balances; + type DepositAmount = DepositAmount; + type Keys = VrfId; + type WeightInfo = (); +} + +pub struct BabeDataGetter; +impl crate::GetBabeData> for BabeDataGetter { + fn get_epoch_index() -> u64 { + 1u64 + } + fn get_epoch_randomness() -> Option { + None + } +} + +parameter_types! { + pub const Deposit: u128 = 10; + pub const MaxRandomWords: u8 = 1; + pub const MinBlockDelay: u32 = 2; + pub const MaxBlockDelay: u32 = 20; +} +impl Config for Test { + type Event = Event; + type AddressMapping = IdentityAddressMapping; + type Currency = Balances; + type BabeDataGetter = BabeDataGetter; + type VrfKeyLookup = AuthorMapping; + type Deposit = Deposit; + type MaxRandomWords = MaxRandomWords; + type MinBlockDelay = MinBlockDelay; + type MaxBlockDelay = MaxBlockDelay; + type BlockExpirationDelay = MaxBlockDelay; + type EpochExpirationDelay = MaxBlockDelay; +} + +pub(crate) fn events() -> Vec> { + System::events() + .into_iter() + .map(|r| r.event) + .filter_map(|e| { + if let Event::Randomness(inner) = e { + Some(inner) + } else { + None + } + }) + .collect::>() +} + +/// Panics if an event is not found in the system log of events +#[macro_export] +macro_rules! assert_event_emitted { + ($event:expr) => { + match &$event { + e => { + assert!( + crate::mock::events().iter().find(|x| *x == e).is_some(), + "Event {:?} was not found in events: \n {:?}", + e, + crate::mock::events() + ); + } + } + }; +} + +/// Externality builder for pallet randomness mock runtime +pub(crate) struct ExtBuilder { + /// Balance amounts per AccountId + balances: Vec<(AccountId, Balance)>, + /// AuthorId -> AccountId mappings + mappings: Vec<(NimbusId, AccountId)>, +} + +impl Default for ExtBuilder { + fn default() -> ExtBuilder { + ExtBuilder { + balances: Vec::new(), + mappings: Vec::new(), + } + } +} + +impl ExtBuilder { + #[allow(dead_code)] + pub(crate) fn with_balances(mut self, balances: Vec<(AccountId, Balance)>) -> Self { + self.balances = balances; + self + } + + #[allow(dead_code)] + pub(crate) fn with_mappings(mut self, mappings: Vec<(NimbusId, AccountId)>) -> Self { + self.mappings = mappings; + self + } + + #[allow(dead_code)] + pub(crate) fn build(self) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::default() + .build_storage::() + .expect("Frame system builds valid default genesis config"); + + pallet_balances::GenesisConfig:: { + balances: self.balances, + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); + + pallet_author_mapping::GenesisConfig:: { + mappings: self.mappings, + } + .assimilate_storage(&mut t) + .expect("Pallet author mapping's storage can be assimilated"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} diff --git a/pallets/randomness/src/tests.rs b/pallets/randomness/src/tests.rs new file mode 100644 index 0000000000..0b96fff79b --- /dev/null +++ b/pallets/randomness/src/tests.rs @@ -0,0 +1,404 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! # Randomness Pallet Unit Tests +use crate::mock::*; +use crate::*; +use frame_support::{assert_noop, assert_ok}; +use sp_core::{H160, H256}; + +pub const ALICE: H160 = H160::repeat_byte(0xAA); +pub const BOB: H160 = H160::repeat_byte(0xBB); + +/// Helps test same effects for all 4 variants of RequestType +fn build_default_request(info: RequestType) -> Request, RequestType> { + Request { + refund_address: BOB, + contract_address: ALICE, + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info, + } +} + +// REQUEST RANDOMNESS + +#[test] +fn cannot_make_local_request_already_fulfillable() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 15)]) + .build() + .execute_with(|| { + let request = build_default_request(RequestType::Local(0u64)); + assert_noop!( + Randomness::request_randomness(request), + Error::::CannotRequestRandomnessBeforeMinDelay + ); + }); +} + +#[test] +fn cannot_make_request_fulfillable_past_expiry() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 15)]) + .build() + .execute_with(|| { + let request = build_default_request(RequestType::Local(22u64)); + assert_noop!( + Randomness::request_randomness(request), + Error::::CannotRequestRandomnessAfterMaxDelay + ); + }); +} + +#[test] +fn cannot_make_request_with_less_than_deposit() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 9)]) + .build() + .execute_with(|| { + let request = build_default_request(RequestType::BabeEpoch(16u64)); + assert_noop!( + Randomness::request_randomness(request), + sp_runtime::DispatchError::Module(sp_runtime::ModuleError { + index: 1, + error: [2, 0, 0, 0], + message: Some("InsufficientBalance") + }) + ); + let request = build_default_request(RequestType::Local(16u64)); + assert_noop!( + Randomness::request_randomness(request), + sp_runtime::DispatchError::Module(sp_runtime::ModuleError { + index: 1, + error: [2, 0, 0, 0], + message: Some("InsufficientBalance") + }) + ); + }); +} + +#[test] +fn cannot_make_request_with_less_than_deposit_plus_fee() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 14)]) + .build() + .execute_with(|| { + let request = build_default_request(RequestType::BabeEpoch(16u64)); + assert_noop!( + Randomness::request_randomness(request), + sp_runtime::DispatchError::Module(sp_runtime::ModuleError { + index: 1, + error: [2, 0, 0, 0], + message: Some("InsufficientBalance") + }) + ); + let request = build_default_request(RequestType::Local(16u64)); + assert_noop!( + Randomness::request_randomness(request), + sp_runtime::DispatchError::Module(sp_runtime::ModuleError { + index: 1, + error: [2, 0, 0, 0], + message: Some("InsufficientBalance") + }) + ); + }); +} + +#[test] +fn request_reserves_deposit_and_fee() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 30)]) + .build() + .execute_with(|| { + assert_eq!(Randomness::total_locked(), 0); + assert_eq!(Balances::free_balance(&ALICE), 30); + let request = build_default_request(RequestType::BabeEpoch(16u64)); + assert_ok!(Randomness::request_randomness(request)); + assert_eq!(Randomness::total_locked(), 15); + assert_eq!(Balances::free_balance(&ALICE), 15); + let request = build_default_request(RequestType::Local(16u64)); + assert_ok!(Randomness::request_randomness(request)); + assert_eq!(Randomness::total_locked(), 30); + assert_eq!(Balances::free_balance(&ALICE), 0); + }); +} + +#[test] +fn request_babe_current_block_randomness_increments_request_counter() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 60)]) + .build() + .execute_with(|| { + assert_eq!(Randomness::request_count(), 0); + let request = build_default_request(RequestType::BabeEpoch(16u64)); + assert_ok!(Randomness::request_randomness(request)); + assert_eq!(Randomness::request_count(), 1); + let request = build_default_request(RequestType::Local(16u64)); + assert_ok!(Randomness::request_randomness(request)); + assert_eq!(Randomness::request_count(), 2); + }); +} + +#[test] +fn request_babe_current_block_randomness_inserts_request_state() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 60)]) + .build() + .execute_with(|| { + let request = build_default_request(RequestType::BabeEpoch(16u64)); + assert_eq!(Randomness::requests(0), None); + assert_ok!(Randomness::request_randomness(request.clone())); + assert_eq!( + Randomness::requests(0), + Some(RequestState { + request: request.into(), + deposit: 10, + }) + ); + let request = build_default_request(RequestType::Local(16u64)); + assert_eq!(Randomness::requests(1), None); + assert_ok!(Randomness::request_randomness(request.clone())); + assert_eq!( + Randomness::requests(1), + Some(RequestState { + request: request.into(), + deposit: 10, + }) + ); + }); +} + +// REQUEST RANDOMNESS EVENTS EMIT BASED ON REQUESTED TYPE OF RANDOMNESS + +#[test] +fn request_babe_one_epoch_ago_randomness_emits_event() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 15)]) + .build() + .execute_with(|| { + let request = Request { + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info: RequestType::BabeEpoch(16u64), + }; + assert_ok!(Randomness::request_randomness(request)); + assert_event_emitted!(crate::Event::RandomnessRequestedBabeEpoch { + id: 0, + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + earliest_epoch: 16u64, + }); + }); +} + +#[test] +fn request_local_randomness_emits_event() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 15)]) + .build() + .execute_with(|| { + let request = Request { + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info: RequestType::Local(16u64), + }; + assert_ok!(Randomness::request_randomness(request)); + assert_event_emitted!(crate::Event::RandomnessRequestedLocal { + id: 0, + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + earliest_block: 16u64, + }); + }); +} + +#[test] +fn request_randomness_adds_new_randomness_result() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 15)]) + .build() + .execute_with(|| { + let request = Request { + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info: RequestType::Local(16u64), + }; + assert_ok!(Randomness::request_randomness(request)); + let result = Randomness::randomness_results(RequestType::Local(16u64)).unwrap(); + assert_eq!(result.request_count, 1u64); + assert!(result.randomness.is_none()); + }); +} + +#[test] +fn request_randomness_increments_randomness_result() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 30)]) + .build() + .execute_with(|| { + let request = Request { + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info: RequestType::Local(16u64), + }; + assert_ok!(Randomness::request_randomness(request.clone())); + assert_ok!(Randomness::request_randomness(request)); + let result = Randomness::randomness_results(RequestType::Local(16u64)).unwrap(); + assert_eq!(result.request_count, 2u64); + assert!(result.randomness.is_none()); + }); +} + +// PREPARE FULFILLMENT + +#[test] +fn prepare_fulfillment_for_local_works() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 30)]) + .build() + .execute_with(|| { + let request = Request { + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info: RequestType::Local(16u64), + }; + assert_ok!(Randomness::request_randomness(request)); + System::set_block_number(16u64); + let mut result = + crate::pallet::RandomnessResults::::get(RequestType::Local(16u64)).unwrap(); + result.randomness = Some(H256::default()); + crate::pallet::RandomnessResults::::insert(RequestType::Local(16u64), result); + assert_ok!(Randomness::prepare_fulfillment(0u64)); + }); +} + +#[test] +fn prepare_fulfillment_fails_before_can_be_fulfilled() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 30)]) + .build() + .execute_with(|| { + let request = Request { + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info: RequestType::Local(16u64), + }; + assert_ok!(Randomness::request_randomness(request.clone())); + assert_ok!(Randomness::request_randomness(request)); + assert_noop!( + Randomness::prepare_fulfillment(0u64), + Error::::RequestCannotYetBeFulfilled + ); + }); +} + +#[test] +fn prepare_fulfillment_fails_if_request_dne() { + ExtBuilder::default().build().execute_with(|| { + assert_noop!( + Randomness::prepare_fulfillment(0u64), + Error::::RequestDNE + ); + }); +} + +#[test] +fn prepare_fulfillment_uses_randomness_result_without_updating_count() { + ExtBuilder::default() + .with_balances(vec![(ALICE, 30)]) + .build() + .execute_with(|| { + let request = Request { + refund_address: BOB.into(), + contract_address: ALICE.into(), + fee: 5, + gas_limit: 100u64, + num_words: 1u8, + salt: H256::default(), + info: RequestType::Local(16u64), + }; + assert_ok!(Randomness::request_randomness(request)); + System::set_block_number(16u64); + let mut pre_result = + crate::pallet::RandomnessResults::::get(RequestType::Local(16u64)).unwrap(); + pre_result.randomness = Some(H256::default()); + crate::pallet::RandomnessResults::::insert(RequestType::Local(16u64), pre_result); + assert_ok!(Randomness::prepare_fulfillment(0u64)); + let post_result = + crate::pallet::RandomnessResults::::get(RequestType::Local(16u64)).unwrap(); + assert_eq!(post_result.request_count, 1); + }); +} + +#[test] +fn set_babe_randomness_results_is_mandatory() { + use frame_support::weights::{DispatchClass, GetDispatchInfo}; + + let info = crate::Call::::set_babe_randomness_results {}.get_dispatch_info(); + assert_eq!(info.class, DispatchClass::Mandatory); +} + +// FINISH FULFILLMENT + +// finish fulfillment decrements randomness result and will remove it if last +// test both cases separately + +// INCREASE REQUEST FEE + +// increase request fee updates the request fee + +// EXECUTE REQUEST EXPIRATION + +// execute request expiration fails before expired + +// execute request expiration succeeds + +// ON INITIALIZE LOGIC AND HOOKS diff --git a/pallets/randomness/src/types.rs b/pallets/randomness/src/types.rs new file mode 100644 index 0000000000..a12fef961e --- /dev/null +++ b/pallets/randomness/src/types.rs @@ -0,0 +1,348 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use crate::{BalanceOf, Config, Error, Event, Pallet, RandomnessResults, RelayEpoch, RequestId}; +use frame_support::pallet_prelude::*; +use frame_support::traits::{Currency, ExistenceRequirement::KeepAlive}; +use pallet_evm::AddressMapping; +use sp_core::{H160, H256}; +use sp_runtime::traits::{CheckedAdd, CheckedSub, Saturating}; +use sp_std::vec::Vec; + +#[derive(PartialEq, Copy, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +#[scale_info(skip_type_params(T))] +/// Shared request info, a subset of `RequestInfo` +pub enum RequestType { + /// Babe one epoch ago + BabeEpoch(u64), + /// Local per parachain block VRF output + Local(T::BlockNumber), +} + +#[derive(PartialEq, Copy, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +#[scale_info(skip_type_params(T))] +/// Type of request +/// Represents a request for the most recent randomness at or after the inner first field +/// Expiration is second inner field +pub enum RequestInfo { + /// Babe one epoch ago + BabeEpoch(u64, u64), + /// Local per parachain block VRF output + Local(T::BlockNumber, T::BlockNumber), +} + +impl From> for RequestInfo { + fn from(other: RequestType) -> RequestInfo { + // add expiration + match other { + RequestType::BabeEpoch(epoch) => RequestInfo::BabeEpoch( + epoch, + RelayEpoch::::get().saturating_add(T::EpochExpirationDelay::get()), + ), + RequestType::Local(block) => RequestInfo::Local( + block, + frame_system::Pallet::::block_number() + .saturating_add(T::BlockExpirationDelay::get()), + ), + } + } +} + +impl From> for RequestType { + fn from(other: RequestInfo) -> RequestType { + match other { + RequestInfo::BabeEpoch(epoch, _) => RequestType::BabeEpoch(epoch), + RequestInfo::Local(block, _) => RequestType::Local(block), + } + } +} + +#[derive(PartialEq, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +/// Raw randomness snapshot, the unique value for a `RequestType` in `RandomnessResults` map +pub struct RandomnessResult { + /// Randomness once available + pub randomness: Option, + /// Number of randomness requests for the type + pub request_count: u64, +} + +impl RandomnessResult { + pub fn new() -> RandomnessResult { + RandomnessResult { + randomness: None, + request_count: 1u64, + } + } + /// Increment request count + pub fn increment_request_count(&self) -> Self { + let new_request_count = self.request_count.saturating_add(1u64); + RandomnessResult { + randomness: self.randomness.clone(), + request_count: new_request_count, + } + } + /// Returns whether successfully decremented + /// Failure implies the randomness result should be removed from storage + pub fn decrement_request_count(&self) -> Option { + if let Some(new_request_count) = self.request_count.checked_sub(1u64) { + if new_request_count == 0u64 { + return None; + } + Some(RandomnessResult { + randomness: self.randomness.clone(), + request_count: new_request_count, + }) + } else { + None + } + } +} + +#[derive(PartialEq, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +/// Input arguments to request randomness +pub struct Request { + /// Fee is returned to this account upon execution + pub refund_address: H160, + /// Contract that consumes the randomness + pub contract_address: H160, + /// Fee to pay for execution + pub fee: Balance, + /// Gas limit for subcall + pub gas_limit: u64, + /// Number of random outputs requested + pub num_words: u8, + /// Salt to use once randomness is ready + pub salt: H256, + /// Details regarding request type + pub info: Info, +} + +impl From, RequestType>> + for Request, RequestInfo> +{ + fn from(other: Request, RequestType>) -> Request, RequestInfo> { + Request { + refund_address: other.refund_address, + contract_address: other.contract_address, + fee: other.fee, + gas_limit: other.gas_limit, + num_words: other.num_words, + salt: other.salt, + info: other.info.into(), + } + } +} + +impl Request, RequestInfo> { + pub fn is_expired(&self) -> bool { + match self.info { + RequestInfo::BabeEpoch(_, expires) => RelayEpoch::::get() >= expires, + RequestInfo::Local(_, expires) => frame_system::Pallet::::block_number() >= expires, + } + } + pub fn can_be_fulfilled(&self) -> bool { + match self.info { + RequestInfo::BabeEpoch(epoch_due, _) => epoch_due <= RelayEpoch::::get(), + RequestInfo::Local(block_due, _) => { + block_due <= frame_system::Pallet::::block_number() + } + } + } + pub fn validate(&mut self) -> DispatchResult { + ensure!( + self.num_words <= T::MaxRandomWords::get(), + Error::::CannotRequestMoreWordsThanMax + ); + ensure!(self.num_words >= 1u8, Error::::MustRequestAtLeastOneWord); + match self.info { + RequestInfo::Local(block_due, _) => { + let current_block = frame_system::Pallet::::block_number(); + ensure!( + block_due + <= current_block + .checked_add(&T::MaxBlockDelay::get()) + .ok_or(Error::::CannotRequestRandomnessAfterMaxDelay)?, + Error::::CannotRequestRandomnessAfterMaxDelay + ); + ensure!( + block_due + >= current_block + .checked_add(&T::MinBlockDelay::get()) + .ok_or(Error::::CannotRequestRandomnessBeforeMinDelay)?, + Error::::CannotRequestRandomnessBeforeMinDelay + ); + } + _ => (), // not necessary because epoch delay is not an input to precompile + } + Ok(()) + } + fn get_random_words(&self) -> Result, DispatchError> { + ensure!( + self.can_be_fulfilled(), + Error::::RequestCannotYetBeFulfilled + ); + let info_key: RequestType = self.info.clone().into(); + let randomness = >::get(&info_key) + // hitting this error is a bug because a RandomnessResult should exist if request exists + .ok_or(Error::::RandomnessResultDNE)? + .randomness + // hitting this error is a bug because a RandomnessResult should be updated if request + // can be fulfilled + .ok_or(Error::::RandomnessResultNotFilled)?; + // compute random output(s) using salt + let random_words = Pallet::::concat_and_hash(randomness, self.salt, self.num_words); + Ok(random_words) + } + pub(crate) fn emit_randomness_requested_event(&self, id: RequestId) { + let event = match self.info { + RequestInfo::BabeEpoch(index, _) => Event::::RandomnessRequestedBabeEpoch { + id, + refund_address: self.refund_address.clone(), + contract_address: self.contract_address.clone(), + fee: self.fee, + gas_limit: self.gas_limit, + num_words: self.num_words, + salt: self.salt, + earliest_epoch: index, + }, + RequestInfo::Local(block, _) => Event::::RandomnessRequestedLocal { + id, + refund_address: self.refund_address.clone(), + contract_address: self.contract_address.clone(), + fee: self.fee, + gas_limit: self.gas_limit, + num_words: self.num_words, + salt: self.salt, + earliest_block: block, + }, + }; + Pallet::::deposit_event(event); + } + /// Cleanup after fulfilling a request + pub(crate) fn finish_fulfill( + &self, + deposit: BalanceOf, + caller: &H160, + cost_of_execution: BalanceOf, + ) { + let refundable_amount = deposit.saturating_add(self.fee); + if let Some(excess) = refundable_amount.checked_sub(&cost_of_execution) { + // send excess to refund address + T::Currency::transfer( + &Pallet::::account_id(), + &T::AddressMapping::into_account_id(self.refund_address), + excess, + KeepAlive, + ) + .expect("excess should be transferrable"); + } + // refund cost_of_execution to caller of `fulfill` + T::Currency::transfer( + &Pallet::::account_id(), + &T::AddressMapping::into_account_id(caller.clone()), + cost_of_execution, + KeepAlive, + ) + .expect("cost_of_execution should be transferrable"); + } +} + +#[derive(PartialEq, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +#[scale_info(skip_type_params(T))] +pub struct RequestState { + /// Underlying request + pub request: Request, RequestInfo>, + /// Deposit taken for making request (stored in case config changes) + pub deposit: BalanceOf, +} + +#[derive(PartialEq, Clone, Encode, Decode, RuntimeDebug, TypeInfo)] +#[scale_info(skip_type_params(T))] +/// Data required to make the subcallback and finish fulfilling the request +pub struct FulfillArgs { + /// Original request + pub request: Request, RequestInfo>, + /// Deposit for request + pub deposit: BalanceOf, + /// Randomness + pub randomness: Vec<[u8; 32]>, +} + +impl RequestState { + pub(crate) fn new( + mut request: Request, RequestInfo>, + ) -> Result, DispatchError> { + request.validate()?; + Ok(RequestState { + request, + deposit: T::Deposit::get(), + }) + } + /// Returns Ok(FulfillArgs) if successful + /// This should be called before the callback + pub fn prepare_fulfill(&self) -> Result, DispatchError> { + // get the random words corresponding to the request + let randomness = self.request.get_random_words()?; + // No event emitted until fulfillment is complete + Ok(FulfillArgs { + request: self.request.clone(), + deposit: self.deposit, + randomness, + }) + } + pub fn increase_fee( + &mut self, + caller: &H160, + fee_increase: BalanceOf, + ) -> Result, DispatchError> { + ensure!( + caller == &self.request.contract_address, + Error::::OnlyRequesterCanIncreaseFee + ); + let new_fee = self + .request + .fee + .checked_add(&fee_increase) + .ok_or(Error::::RequestFeeOverflowed)?; + let caller = T::AddressMapping::into_account_id(caller.clone()); + T::Currency::transfer(&caller, &Pallet::::account_id(), fee_increase, KeepAlive)?; + self.request.fee = new_fee; + Ok(new_fee) + } + /// Transfer deposit back to contract_address + /// Transfer fee to caller + pub fn execute_expiration(&self, caller: &T::AccountId) -> DispatchResult { + ensure!(self.request.is_expired(), Error::::RequestHasNotExpired); + let contract_address = + T::AddressMapping::into_account_id(self.request.contract_address.clone()); + // TODO: is it worth optimizing when caller == contract_address to do one transfer here + T::Currency::transfer( + &Pallet::::account_id(), + &contract_address, + self.deposit, + KeepAlive, + ) + .expect("expect transferrable deposit + fee, transferring deposit"); + T::Currency::transfer( + &Pallet::::account_id(), + caller, + self.request.fee, + KeepAlive, + ) + .expect("expect transferrable deposit + fee, transferring fee"); + Ok(()) + } +} diff --git a/pallets/randomness/src/vrf.rs b/pallets/randomness/src/vrf.rs new file mode 100644 index 0000000000..0814939e78 --- /dev/null +++ b/pallets/randomness/src/vrf.rs @@ -0,0 +1,100 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! VRF logic +use crate::{Config, LocalVrfOutput, NotFirstBlock, RandomnessResults, RequestType}; +use frame_support::{pallet_prelude::Weight, traits::Get}; +use nimbus_primitives::{NimbusId, NIMBUS_ENGINE_ID}; +use parity_scale_codec::Decode; +pub use session_keys_primitives::make_transcript; +use session_keys_primitives::{KeysLookup, PreDigest, VrfId, VRF_ENGINE_ID, VRF_INOUT_CONTEXT}; +use sp_consensus_vrf::schnorrkel; +use sp_core::crypto::ByteArray; + +/// VRF output +type Randomness = schnorrkel::Randomness; + +/// Returns weight consumed in `on_initialize` +pub(crate) fn set_output() -> Weight { + // Do not set the output in the first block (genesis or runtime upgrade) + // because we do not have any input for author to sign (which would be set in last block) + if NotFirstBlock::::get().is_none() { + NotFirstBlock::::put(()); + LocalVrfOutput::::put(Some(T::Hash::default())); + return T::DbWeight::get().read + (T::DbWeight::get().write * 2); + } + let mut block_author_vrf_id: Option = None; + let PreDigest { + vrf_output, + vrf_proof, + } = >::digest() + .logs + .iter() + .filter_map(|s| s.as_pre_runtime()) + .filter_map(|(id, mut data)| { + if id == VRF_ENGINE_ID { + if let Ok(vrf_digest) = PreDigest::decode(&mut data) { + Some(vrf_digest) + } else { + panic!("failed to decode VRF PreDigest"); + } + } else { + if id == NIMBUS_ENGINE_ID { + let nimbus_id = NimbusId::decode(&mut data) + .expect("NimbusId encoded in pre-runtime digest must be valid"); + + block_author_vrf_id = Some( + T::VrfKeyLookup::lookup_keys(&nimbus_id) + .expect("No VRF Key Mapped to this NimbusId"), + ); + } + None + } + }) + .next() + .expect("VRF PreDigest was not included in the digests (check rand key is in keystore)"); + let block_author_vrf_id = + block_author_vrf_id.expect("VrfId encoded in pre-runtime digest must be valid"); + let pubkey = schnorrkel::PublicKey::from_bytes(block_author_vrf_id.as_slice()) + .expect("Expect VrfId to be valid schnorrkel public key"); + // VRF input is the previous VRF output + let transcript = make_transcript::(LocalVrfOutput::::get().unwrap_or_default()); + // Verify VRF output + proof using input transcript and VrfId + assert!( + pubkey + .vrf_verify(transcript.clone(), &vrf_output, &vrf_proof) + .is_ok(), + "VRF signature verification failed" + ); + let vrf_output: Randomness = vrf_output + .attach_input_hash(&pubkey, transcript) + .ok() + .map(|inout| inout.make_bytes(&VRF_INOUT_CONTEXT)) + .expect("VRF output encoded in pre-runtime digest must be valid"); + let randomness_output = T::Hash::decode(&mut &vrf_output[..]) + .ok() + .expect("VRF output bytes can be decode into T::Hash"); + LocalVrfOutput::::put(Some(randomness_output)); + // Supply randomness result + let local_vrf_this_block = RequestType::Local(frame_system::Pallet::::block_number()); + if let Some(mut results) = RandomnessResults::::get(&local_vrf_this_block) { + results.randomness = Some(randomness_output); + RandomnessResults::::insert(local_vrf_this_block, results); + } + // TODO: benchmark to fix this weight + // reads + writes + margin_of_safety = 5_000_000_000 + 6 * T::DbWeight::get().read + 2 * T::DbWeight::get().write + 5_000_000_000 +} diff --git a/pallets/randomness/src/weights.rs b/pallets/randomness/src/weights.rs new file mode 100644 index 0000000000..0c35f9ffdb --- /dev/null +++ b/pallets/randomness/src/weights.rs @@ -0,0 +1,162 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Autogenerated weights for pallet_randomness +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2022-07-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 + +// Executed Command: +// ./target/release/moonbeam +// benchmark +// pallet +// --chain +// dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet +// pallet_randomness +// --extrinsic +// * +// --steps +// 50 +// --repeat +// 20 +// --template=./benchmarking/frame-weight-template.hbs +// --record-proof +// --json-file +// raw.json +// --output +// weights.rs + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{ + traits::Get, + weights::{constants::RocksDbWeight, Weight}, +}; +use sp_std::marker::PhantomData; + +/// Weight functions needed for pallet_randomness. +pub trait WeightInfo { + #[rustfmt::skip] + fn request_randomness() -> Weight; + #[rustfmt::skip] + fn prepare_fulfillment() -> Weight; + #[rustfmt::skip] + fn finish_fulfillment() -> Weight; + #[rustfmt::skip] + fn increase_fee() -> Weight; + #[rustfmt::skip] + fn execute_request_expiration() -> Weight; +} + +/// Weights for pallet_randomness using the Substrate node and recommended hardware. +pub struct SubstrateWeight(pub PhantomData); +impl WeightInfo for SubstrateWeight { + // Storage: Randomness RequestCount (r:1 w:1) + // Storage: System Account (r:2 w:2) + // Storage: Randomness RandomnessResults (r:1 w:1) + // Storage: Randomness Requests (r:0 w:1) + #[rustfmt::skip] + fn request_randomness() -> Weight { + (58_126_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(5 as Weight)) + } + // Storage: Randomness Requests (r:1 w:0) + // Storage: Randomness RandomnessResults (r:1 w:0) + #[rustfmt::skip] + fn prepare_fulfillment() -> Weight { + (42_051_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + } + // Storage: System Account (r:2 w:2) + // Storage: Randomness RandomnessResults (r:1 w:1) + // Storage: Randomness Requests (r:0 w:1) + #[rustfmt::skip] + fn finish_fulfillment() -> Weight { + (46_585_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Randomness Requests (r:1 w:1) + // Storage: System Account (r:2 w:2) + #[rustfmt::skip] + fn increase_fee() -> Weight { + (42_952_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + // Storage: Randomness Requests (r:1 w:1) + // Storage: System Account (r:2 w:2) + // Storage: Randomness RandomnessResults (r:1 w:1) + #[rustfmt::skip] + fn execute_request_expiration() -> Weight { + (49_749_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + // Storage: Randomness RequestCount (r:1 w:1) + // Storage: System Account (r:2 w:2) + // Storage: Randomness RandomnessResults (r:1 w:1) + // Storage: Randomness Requests (r:0 w:1) + #[rustfmt::skip] + fn request_randomness() -> Weight { + (58_126_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().writes(5 as Weight)) + } + // Storage: Randomness Requests (r:1 w:0) + // Storage: Randomness RandomnessResults (r:1 w:0) + #[rustfmt::skip] + fn prepare_fulfillment() -> Weight { + (42_051_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(2 as Weight)) + } + // Storage: System Account (r:2 w:2) + // Storage: Randomness RandomnessResults (r:1 w:1) + // Storage: Randomness Requests (r:0 w:1) + #[rustfmt::skip] + fn finish_fulfillment() -> Weight { + (46_585_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } + // Storage: Randomness Requests (r:1 w:1) + // Storage: System Account (r:2 w:2) + #[rustfmt::skip] + fn increase_fee() -> Weight { + (42_952_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(3 as Weight)) + .saturating_add(RocksDbWeight::get().writes(3 as Weight)) + } + // Storage: Randomness Requests (r:1 w:1) + // Storage: System Account (r:2 w:2) + // Storage: Randomness RandomnessResults (r:1 w:1) + #[rustfmt::skip] + fn execute_request_expiration() -> Weight { + (49_749_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(4 as Weight)) + .saturating_add(RocksDbWeight::get().writes(4 as Weight)) + } +} diff --git a/pallets/xcm-transactor/Cargo.toml b/pallets/xcm-transactor/Cargo.toml index f0dd571373..b553dc5a63 100644 --- a/pallets/xcm-transactor/Cargo.toml +++ b/pallets/xcm-transactor/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "xcm-transactor" +name = "pallet-xcm-transactor" authors = [ "PureStake" ] edition = "2021" version = "0.1.0" @@ -12,32 +12,32 @@ serde = { version = "1.0.124", optional = true } xcm-primitives = { path = "../../primitives/xcm/", default-features = false } # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Cumulus -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Polkadot / XCM -orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Benchmarks -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } [dev-dependencies] -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } parity-scale-codec = { version = "3.0.0" } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/pallets/xcm-transactor/src/benchmarks.rs b/pallets/xcm-transactor/src/benchmarks.rs index c7d8f1dcbe..e1526bcde9 100644 --- a/pallets/xcm-transactor/src/benchmarks.rs +++ b/pallets/xcm-transactor/src/benchmarks.rs @@ -18,6 +18,7 @@ use crate::{Call, Config, Pallet}; use frame_benchmarking::{account, benchmarks, impl_benchmark_test_suite}; use frame_system::RawOrigin; use sp_std::boxed::Box; +use sp_std::vec; use xcm::latest::prelude::*; benchmarks! { @@ -48,33 +49,72 @@ benchmarks! { RawOrigin::Root, Box::new(xcm::VersionedMultiLocation::V1(location.clone())), extra_weight, - fee_per_second, - max_weight + max_weight, + None ) verify { assert_eq!(Pallet::::transact_info(&location), Some(crate::RemoteTransactInfoWithMaxWeight { transact_extra_weight: extra_weight, - fee_per_second, - max_weight + max_weight, + transact_extra_weight_signed: None })); } remove_transact_info { let extra_weight = 300000000u64; - let fee_per_second = 1; let max_weight = 20000000000u64; let location = MultiLocation::parent(); Pallet::::set_transact_info( RawOrigin::Root.into(), Box::new(xcm::VersionedMultiLocation::V1(location.clone())), extra_weight, - fee_per_second, - max_weight + max_weight, + None ).unwrap(); }: _(RawOrigin::Root, Box::new(xcm::VersionedMultiLocation::V1(location.clone()))) verify { assert!(Pallet::::transact_info(&location).is_none()); } + + set_fee_per_second { + let fee_per_second = 1; + let location = MultiLocation::parent(); + }: _( + RawOrigin::Root, + Box::new(xcm::VersionedMultiLocation::V1(location.clone())), + fee_per_second + ) + verify { + assert_eq!(Pallet::::dest_asset_fee_per_second(&location), Some(fee_per_second)); + } + + transact_through_signed_multilocation { + let fee_per_second = 1; + let extra_weight = 300000000u64; + let max_weight = 20000000000u64; + let location = MultiLocation::parent(); + let call = vec![1u8]; + let dest_weight = 100u64; + let user: T::AccountId = account("account id", 0u32, 0u32); + Pallet::::set_transact_info( + RawOrigin::Root.into(), + Box::new(xcm::VersionedMultiLocation::V1(location.clone())), + extra_weight, + max_weight, + Some(extra_weight) + ).unwrap(); + Pallet::::set_fee_per_second( + RawOrigin::Root.into(), + Box::new(xcm::VersionedMultiLocation::V1(location.clone())), + fee_per_second + ).unwrap(); + }: _( + RawOrigin::Signed(user.clone()), + Box::new(xcm::VersionedMultiLocation::V1(location.clone())), + Box::new(xcm::VersionedMultiLocation::V1(location.clone())), + dest_weight, + call + ) } #[cfg(test)] diff --git a/pallets/xcm-transactor/src/lib.rs b/pallets/xcm-transactor/src/lib.rs index e70f20e958..384f993bca 100644 --- a/pallets/xcm-transactor/src/lib.rs +++ b/pallets/xcm-transactor/src/lib.rs @@ -148,28 +148,42 @@ pub mod pallet { #[derive(Default, Clone, Encode, Decode, RuntimeDebug, PartialEq, scale_info::TypeInfo)] pub struct RemoteTransactInfoWithMaxWeight { /// Extra weight that transacting a call in a destination chain adds + /// Extra weight involved when transacting without DescendOrigin + /// This should always be possible in a destination chain, since + /// it involves going through the sovereign account pub transact_extra_weight: Weight, - /// Fee per weight in the destination chain - pub fee_per_second: u128, /// Max destination weight pub max_weight: Weight, + /// Whether we allow transacting through signed origins in another chain, and + /// how much extra cost implies + /// Extra weight involved when transacting with DescendOrigin + /// The reason for it being an option is because the destination chain + /// might not support constructing origins based on generic MultiLocations + pub transact_extra_weight_signed: Option, } - // Since we are using pallet-utility for account derivation (through AsDerivative), - // we need to provide an index for the account derivation. This storage item stores the index - // assigned for a given local account. These indices are usable as derivative in the relay chain + /// Since we are using pallet-utility for account derivation (through AsDerivative), + /// we need to provide an index for the account derivation. This storage item stores the index + /// assigned for a given local account. These indices are usable as derivative in the relay chain #[pallet::storage] #[pallet::getter(fn index_to_account)] pub type IndexToAccount = StorageMap<_, Blake2_128Concat, u16, T::AccountId>; - // Stores the transact info of a MultiLocation. This defines how much extra weight we need to - // add when we want to transact in the destination chain and how we convert weight to units - // in the destination chain + /// Stores the transact info of a MultiLocation. This defines how much extra weight we need to + /// add when we want to transact in the destination chain and maximum amount of weight allowed + /// by the destination chain #[pallet::storage] #[pallet::getter(fn transact_info)] pub type TransactInfoWithWeightLimit = StorageMap<_, Blake2_128Concat, MultiLocation, RemoteTransactInfoWithMaxWeight>; + /// Stores the fee per second for an asset in its reserve chain. This allows us to convert + /// from weight to fee + #[pallet::storage] + #[pallet::getter(fn dest_asset_fee_per_second)] + pub type DestinationAssetFeePerSecond = + StorageMap<_, Twox64Concat, MultiLocation, u128>; + /// An error that can occur while executing the mapping pallet's logic. #[pallet::error] pub enum Error { @@ -193,6 +207,9 @@ pub mod pallet { BadVersion, MaxWeightTransactReached, UnableToWithdrawAsset, + FeePerSecondNotSet, + SignedTransactNotAllowedForDestination, + FailedMultiLocationToJunction, } #[pallet::event] @@ -211,6 +228,12 @@ pub mod pallet { dest: MultiLocation, call: Vec, }, + /// Transacted the call through a signed account in a destination chain. + TransactedSigned { + fee_payer: T::AccountId, + dest: MultiLocation, + call: Vec, + }, /// Registered a derivative index for an account id. RegisteredDerivative { account_id: T::AccountId, @@ -232,6 +255,15 @@ pub mod pallet { TransactInfoRemoved { location: MultiLocation, }, + /// Set dest fee per second + DestFeePerSecondChanged { + location: MultiLocation, + fee_per_second: u128, + }, + /// Remove dest fee per second + DestFeePerSecondRemoved { + location: MultiLocation, + }, } #[pallet::call] @@ -319,7 +351,7 @@ pub mod pallet { // Grab the destination let dest = dest.destination(); - Self::transact_in_dest_chain_asset( + Self::transact_in_dest_chain_asset_non_signed( dest.clone(), who.clone(), fee_location, @@ -380,7 +412,7 @@ pub mod pallet { // Grab the destination let dest = dest.destination(); - Self::transact_in_dest_chain_asset( + Self::transact_in_dest_chain_asset_non_signed( dest.clone(), who.clone(), fee_location, @@ -428,7 +460,7 @@ pub mod pallet { let dest = MultiLocation::try_from(*dest).map_err(|()| Error::::BadVersion)?; // Grab the destination - Self::transact_in_dest_chain_asset( + Self::transact_in_dest_chain_asset_non_signed( dest.clone(), fee_payer.clone(), fee_location, @@ -453,16 +485,16 @@ pub mod pallet { origin: OriginFor, location: Box, transact_extra_weight: Weight, - fee_per_second: u128, max_weight: u64, + transact_extra_weight_signed: Option, ) -> DispatchResult { T::DerivativeAddressRegistrationOrigin::ensure_origin(origin)?; let location = MultiLocation::try_from(*location).map_err(|()| Error::::BadVersion)?; let remote_info = RemoteTransactInfoWithMaxWeight { transact_extra_weight, - fee_per_second, max_weight, + transact_extra_weight_signed, }; TransactInfoWithWeightLimit::::insert(&location, &remote_info); @@ -490,10 +522,128 @@ pub mod pallet { Self::deposit_event(Event::TransactInfoRemoved { location }); Ok(()) } + + /// Transact the call through the a signed origin in this chain + /// that should be converted to a transaction dispatch account in the destination chain + /// by any method implemented in the destination chains runtime + /// + /// This time we are giving the currency as a currencyId instead of multilocation + #[pallet::weight(T::WeightInfo::transact_through_signed_multilocation())] + pub fn transact_through_signed( + origin: OriginFor, + dest: Box, + fee_currency_id: T::CurrencyId, + dest_weight: Weight, + call: Vec, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + + let dest = MultiLocation::try_from(*dest).map_err(|()| Error::::BadVersion)?; + + let fee_location: MultiLocation = + T::CurrencyIdToMultiLocation::convert(fee_currency_id) + .ok_or(Error::::NotCrossChainTransferableCurrency)?; + + // Grab the destination + Self::transact_in_dest_chain_asset_signed( + dest.clone(), + who.clone(), + fee_location, + dest_weight, + call.clone(), + OriginKind::SovereignAccount, + )?; + + // Deposit event + Self::deposit_event(Event::::TransactedSigned { + fee_payer: who, + dest, + call, + }); + + Ok(()) + } + + /// Transact the call through the a signed origin in this chain + /// that should be converted to a transaction dispatch account in the destination chain + /// by any method implemented in the destination chains runtime + /// + /// This time we are giving the currency as a multilocation instead of currencyId + #[pallet::weight(T::WeightInfo::transact_through_signed_multilocation())] + pub fn transact_through_signed_multilocation( + origin: OriginFor, + dest: Box, + fee_location: Box, + dest_weight: Weight, + call: Vec, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + + let dest = MultiLocation::try_from(*dest).map_err(|()| Error::::BadVersion)?; + let fee_location = + MultiLocation::try_from(*fee_location).map_err(|()| Error::::BadVersion)?; + + // Grab the destination + Self::transact_in_dest_chain_asset_signed( + dest.clone(), + who.clone(), + fee_location, + dest_weight, + call.clone(), + OriginKind::SovereignAccount, + )?; + + // Deposit event + Self::deposit_event(Event::::TransactedSigned { + fee_payer: who, + dest, + call, + }); + + Ok(()) + } + + /// Set the fee per second of an asset on its reserve chain + #[pallet::weight(T::WeightInfo::set_fee_per_second())] + pub fn set_fee_per_second( + origin: OriginFor, + asset_location: Box, + fee_per_second: u128, + ) -> DispatchResult { + T::DerivativeAddressRegistrationOrigin::ensure_origin(origin)?; + let asset_location = + MultiLocation::try_from(*asset_location).map_err(|()| Error::::BadVersion)?; + + DestinationAssetFeePerSecond::::insert(&asset_location, &fee_per_second); + + Self::deposit_event(Event::DestFeePerSecondChanged { + location: asset_location, + fee_per_second, + }); + Ok(()) + } + + /// Remove the fee per second of an asset on its reserve chain + #[pallet::weight(T::WeightInfo::set_fee_per_second())] + pub fn remove_fee_per_second( + origin: OriginFor, + asset_location: Box, + ) -> DispatchResult { + T::DerivativeAddressRegistrationOrigin::ensure_origin(origin)?; + let asset_location = + MultiLocation::try_from(*asset_location).map_err(|()| Error::::BadVersion)?; + + DestinationAssetFeePerSecond::::remove(&asset_location); + + Self::deposit_event(Event::DestFeePerSecondRemoved { + location: asset_location, + }); + Ok(()) + } } impl Pallet { - fn transact_in_dest_chain_asset( + fn transact_in_dest_chain_asset_non_signed( dest: MultiLocation, fee_payer: T::AccountId, fee_location: MultiLocation, @@ -502,7 +652,7 @@ pub mod pallet { origin_kind: OriginKind, ) -> DispatchResult { // Grab transact info for the fee loation provided - let transactor_info = TransactInfoWithWeightLimit::::get(&fee_location) + let transactor_info = TransactInfoWithWeightLimit::::get(&dest) .ok_or(Error::::TransactorInfoNotSet)?; // Calculate the total weight that the xcm message is going to spend in the @@ -516,16 +666,8 @@ pub mod pallet { Error::::MaxWeightTransactReached ); - // Multiply weight*destination_units_per_second to see how much we should charge for - // this weight execution - let amount = - Self::calculate_fee_per_second(total_weight, transactor_info.fee_per_second); - - // Construct MultiAsset - let fee = MultiAsset { - id: Concrete(fee_location), - fun: Fungible(amount), - }; + // Calculate fee based on FeePerSecond and total_weight + let fee = Self::calculate_fee(fee_location, total_weight)?; // Ensure the asset is a reserve Self::transfer_allowed(&fee, &dest)?; @@ -558,6 +700,94 @@ pub mod pallet { Ok(()) } + + fn transact_in_dest_chain_asset_signed( + dest: MultiLocation, + fee_payer: T::AccountId, + fee_location: MultiLocation, + dest_weight: Weight, + call: Vec, + origin_kind: OriginKind, + ) -> DispatchResult { + // Grab transact info for the fee loation provided + let transactor_info = TransactInfoWithWeightLimit::::get(&dest) + .ok_or(Error::::TransactorInfoNotSet)?; + + // If this storage item is not set, it means that the destination chain + // does not support this kind of transact message + let transact_in_dest_as_signed_weight = transactor_info + .transact_extra_weight_signed + .ok_or(Error::::SignedTransactNotAllowedForDestination)?; + + // Calculate the total weight that the xcm message is going to spend in the + // destination chain + let total_weight = dest_weight + .checked_add(transact_in_dest_as_signed_weight) + .ok_or(Error::::WeightOverflow)?; + + ensure!( + total_weight < transactor_info.max_weight, + Error::::MaxWeightTransactReached + ); + + // Calculate fee based on FeePerSecond and total_weight + let fee = Self::calculate_fee(fee_location, total_weight)?; + + // Convert origin to multilocation + let origin_as_mult = T::AccountIdToMultiLocation::convert(fee_payer); + + // Construct the transact message. This is composed of WithdrawAsset||BuyExecution|| + // Transact. + // WithdrawAsset: Withdraws "amount" from the sovereign account. These tokens will be + // used to pay fees + // BuyExecution: Buys "execution power" in the destination chain + // Transact: Issues the transaction + let mut transact_message: Xcm<()> = Self::transact_message( + dest.clone(), + fee, + total_weight, + call, + dest_weight, + origin_kind, + )?; + + // We append DescendOrigin as the first instruction in the message + // The new message looks like DescendOrigin||WithdrawAsset||BuyExecution|| + // Transact. + let interior: Junctions = origin_as_mult + .clone() + .try_into() + .map_err(|_| Error::::FailedMultiLocationToJunction)?; + transact_message.0.insert(0, DescendOrigin(interior)); + + // Send to destination chain + T::XcmSender::send_xcm(dest, transact_message).map_err(|_| Error::::ErrorSending)?; + + Ok(()) + } + + /// Calculate the amount of fee based on the multilocation of the fee asset and + /// the total weight to be spent + fn calculate_fee( + fee_location: MultiLocation, + total_weight: Weight, + ) -> Result { + // Grab how much fee per second the destination chain charges in the fee asset + // location + let fee_per_second = DestinationAssetFeePerSecond::::get(&fee_location) + .ok_or(Error::::FeePerSecondNotSet)?; + + // Multiply weight*destination_units_per_second to see how much we should charge for + // this weight execution + let amount = Self::calculate_fee_per_second(total_weight, fee_per_second); + + // Construct MultiAsset + Ok(MultiAsset { + id: Concrete(fee_location), + fun: Fungible(amount), + }) + } + /// Construct the transact xcm message with the provided parameters fn transact_message( dest: MultiLocation, @@ -742,10 +972,17 @@ pub mod pallet { } /// Returns the fee for a given set of parameters + /// We always round up in case of fractional division pub fn calculate_fee_per_second(weight: Weight, fee_per_second: u128) -> u128 { - let weight_fee = - fee_per_second.saturating_mul(weight as u128) / (WEIGHT_PER_SECOND as u128); - return weight_fee; + // grab WEIGHT_PER_SECOND as u128 + let weight_per_second_u128 = WEIGHT_PER_SECOND as u128; + + // we add WEIGHT_PER_SECOND -1 after multiplication to make sure that + // if there is a fractional part we round up the result + let fee_mul_rounded_up = (fee_per_second.saturating_mul(weight as u128)) + .saturating_add(weight_per_second_u128 - 1); + + fee_mul_rounded_up / weight_per_second_u128 } } } diff --git a/pallets/xcm-transactor/src/migrations.rs b/pallets/xcm-transactor/src/migrations.rs index a052688dd9..9e460e3d99 100644 --- a/pallets/xcm-transactor/src/migrations.rs +++ b/pallets/xcm-transactor/src/migrations.rs @@ -1,4 +1,4 @@ -// Copyright 2019-2021 PureStake Inc. +// Copyright 2019-2022 PureStake Inc. // This file is part of Moonbeam. // Moonbeam is free software: you can redistribute it and/or modify @@ -14,12 +14,15 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use crate::{Config, RemoteTransactInfoWithMaxWeight, TransactInfoWithWeightLimit}; +use crate::{ + Config, DestinationAssetFeePerSecond, RemoteTransactInfoWithMaxWeight, + TransactInfoWithWeightLimit, +}; use frame_support::{ pallet_prelude::PhantomData, - storage::migration::{remove_storage_prefix, storage_key_iter}, + storage::migration::storage_key_iter, traits::{Get, OnRuntimeUpgrade}, - weights::{constants::WEIGHT_PER_SECOND, Weight}, + weights::Weight, Blake2_128Concat, }; use parity_scale_codec::{Decode, Encode}; @@ -44,7 +47,18 @@ pub struct OldRemoteTransactInfo { pub fee_per_weight: u128, } -pub struct MaxTransactWeight(PhantomData); +// This is the old storage, we write it here so that we know how to decode existing data +#[derive(Default, Clone, Encode, Decode, RuntimeDebug, PartialEq, scale_info::TypeInfo)] +pub struct OldRemoteTransactInfoWithFeePerSecond { + /// Extra weight that transacting a call in a destination chain adds + pub transact_extra_weight: Weight, + /// Fee per second + pub fee_per_second: u128, + /// MaxWeight + pub max_weight: u64, +} + +/*pub struct MaxTransactWeight(PhantomData); impl OnRuntimeUpgrade for MaxTransactWeight { fn on_runtime_upgrade() -> Weight { log::info!(target: "MaxTransactWeight", "actually running it"); @@ -93,6 +107,7 @@ impl OnRuntimeUpgrade for MaxTransactWeight { .saturating_mul(WEIGHT_PER_SECOND as u128), /// Max destination weight max_weight: 20000000000, + transact_extra_weight_signed: None, } }); } @@ -174,6 +189,135 @@ impl OnRuntimeUpgrade for MaxTransactWeight { assert_eq!(migrated_info.max_weight, 20000000000) } + Ok(()) + } +}*/ + +pub struct TransactSignedWeightAndFeePerSecond(PhantomData); +impl OnRuntimeUpgrade for TransactSignedWeightAndFeePerSecond { + fn on_runtime_upgrade() -> Weight { + log::info!(target: "TransactSignedWeightAndFeePerSecond", "actually running it"); + let pallet_prefix: &[u8] = b"XcmTransactor"; + let storage_item_prefix: &[u8] = b"TransactInfoWithWeightLimit"; + + // Read all the data into memory. + // https://crates.parity.io/frame_support/storage/migration/fn.storage_key_iter.html + let stored_data: Vec<_> = storage_key_iter::< + MultiLocation, + OldRemoteTransactInfoWithFeePerSecond, + Blake2_128Concat, + >(pallet_prefix, storage_item_prefix) + .collect(); + + let migrated_count: Weight = stored_data + .len() + .try_into() + .expect("There are between 0 and 2**64 mappings stored."); + + log::info!( + target: "TransactSignedWeightAndFeePerSecond", "Migrating {:?} elements", migrated_count); + + // Write to storage with removed and added fields + for (location, info) in stored_data { + TransactInfoWithWeightLimit::::insert(&location, { + RemoteTransactInfoWithMaxWeight { + transact_extra_weight: info.transact_extra_weight, + /// Max destination weight + max_weight: info.max_weight, + transact_extra_weight_signed: None, + } + }); + + DestinationAssetFeePerSecond::::insert(&location, info.fee_per_second); + } + + log::info!(target: "MaxTransactWeight", "almost done"); + + // Return the weight used. For each migrated mapping there is a red to get it into + // memory, a write to clear the old stored value, and a write to re-store it. + let db_weights = T::DbWeight::get(); + migrated_count.saturating_mul(2 * db_weights.write + db_weights.read) + } + + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result<(), &'static str> { + use frame_support::traits::OnRuntimeUpgradeHelpersExt; + + let pallet_prefix: &[u8] = b"XcmTransactor"; + let storage_item_prefix: &[u8] = b"TransactInfoWithWeightLimit"; + + // We want to test that: + // The same number of mappings exist before and after + // As long as there are some mappings stored, one representative key maps to the + // same value after the migration. + // There are no entries in the new DestinationAssetFeePerSecond beforehand + + // Assert DestinationAssetFeePerSecond storage is empty + assert!(DestinationAssetFeePerSecond::::iter().next().is_none()); + + // Check number of entries, and set it aside in temp storage + let stored_data: Vec<_> = storage_key_iter::< + MultiLocation, + OldRemoteTransactInfo, + Blake2_128Concat, + >(pallet_prefix, storage_item_prefix) + .collect(); + let mapping_count = stored_data.len(); + Self::set_temp_storage(mapping_count as u32, "mapping_count"); + + // Read an example pair from old storage and set it aside in temp storage + if mapping_count > 0 { + let example_pair = stored_data + .iter() + .next() + .expect("We already confirmed that there was at least one item stored"); + + Self::set_temp_storage(example_pair, "example_pair"); + } + + Ok(()) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade() -> Result<(), &'static str> { + use frame_support::traits::OnRuntimeUpgradeHelpersExt; + + // Check number of entries matches what was set aside in pre_upgrade + let old_mapping_count: u64 = Self::get_temp_storage("mapping_count") + .expect("We stored a mapping count; it should be there; qed"); + let new_mapping_count_transact_info = + TransactInfoWithWeightLimit::::iter().count() as u64; + let new_mapping_count_fee_per_second = + DestinationAssetFeePerSecond::::iter().count() as u64; + + assert_eq!(old_mapping_count, new_mapping_count_transact_info); + assert_eq!(old_mapping_count, new_mapping_count_fee_per_second); + + // Check that our example pair is still well-mapped after the migration + if new_mapping_count_transact_info > 0 { + let (location, original_info): (MultiLocation, OldRemoteTransactInfoWithFeePerSecond) = + Self::get_temp_storage("example_pair").expect("qed"); + let migrated_info_transact_info = + TransactInfoWithWeightLimit::::get(&location).expect("qed"); + let migrated_info_fee_per_second = + DestinationAssetFeePerSecond::::get(&location).expect("qed"); + // Check all the other params are equal + assert_eq!( + original_info.transact_extra_weight, + migrated_info_transact_info.transact_extra_weight + ); + assert_eq!( + original_info.max_weight, + migrated_info_transact_info.max_weight + ); + // Check that transact_extra_weight_signed is None + assert_eq!( + migrated_info_transact_info.transact_extra_weight_signed, + None + ); + assert_eq!(original_info.fee_per_second, migrated_info_fee_per_second); + } + Ok(()) } } diff --git a/pallets/xcm-transactor/src/mock.rs b/pallets/xcm-transactor/src/mock.rs index 4320e77a71..5a915dfe05 100644 --- a/pallets/xcm-transactor/src/mock.rs +++ b/pallets/xcm-transactor/src/mock.rs @@ -16,7 +16,7 @@ //! Test utilities use super::*; -use crate::{self as xcm_transactor}; +use crate as pallet_xcm_transactor; use frame_support::{construct_runtime, parameter_types}; use frame_support::{traits::PalletInfo as PalletInfoTrait, weights::Weight}; use frame_system::EnsureRoot; @@ -53,7 +53,7 @@ construct_runtime!( System: frame_system::{Pallet, Call, Config, Storage, Event}, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, - XcmTransactor: xcm_transactor::{Pallet, Call, Event}, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Event}, } ); @@ -176,7 +176,7 @@ impl sp_runtime::traits::Convert for AccountIdToMultiLocatio fn convert(_account: u64) -> MultiLocation { let as_h160: H160 = H160::repeat_byte(0xAA); MultiLocation::new( - 1, + 0, Junctions::X1(AccountKey20 { network: NetworkId::Any, key: as_h160.as_fixed_bytes().clone(), diff --git a/pallets/xcm-transactor/src/tests.rs b/pallets/xcm-transactor/src/tests.rs index 158565e0c2..0d71266678 100644 --- a/pallets/xcm-transactor/src/tests.rs +++ b/pallets/xcm-transactor/src/tests.rs @@ -71,19 +71,32 @@ fn test_transact_through_derivative_errors() { // Root can register assert_ok!(XcmTransactor::register(Origin::root(), 1u64, 1)); + // TransactInfo not yet set + assert_noop!( + XcmTransactor::transact_through_derivative_multilocation( + Origin::signed(1u64), + Transactors::Relay, + 1, + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::new( + 1, + Junctions::X1(Junction::Parachain(1000)) + ))), + 100u64, + vec![0u8] + ), + Error::::TransactorInfoNotSet + ); + // Root can set transact info assert_ok!(XcmTransactor::set_transact_info( Origin::root(), - Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::new( - 1, - Junctions::X1(Junction::Parachain(1000)) - ))), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 0, - 1, - 10000 + 10000, + None )); - // Not using the same fee asset as the destination chain, so error + // TransactInfo present, but FeePerSecond not set assert_noop!( XcmTransactor::transact_through_derivative_multilocation( Origin::signed(1u64), @@ -96,10 +109,20 @@ fn test_transact_through_derivative_errors() { 100u64, vec![0u8] ), - Error::::AssetIsNotReserveInDestination + Error::::FeePerSecondNotSet ); - // Reserve but info not present, error + // Set fee per second + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::new( + 1, + Junctions::X1(Junction::Parachain(1000)) + ))), + 1 + )); + + // TransactInfo present, but the asset is not a reserve of dest assert_noop!( XcmTransactor::transact_through_derivative_multilocation( Origin::signed(1u64), @@ -107,21 +130,19 @@ fn test_transact_through_derivative_errors() { 1, Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::new( 1, - Junctions::X1(Junction::PalletInstance(1)) + Junctions::X1(Junction::Parachain(1000)) ))), 100u64, vec![0u8] ), - Error::::TransactorInfoNotSet + Error::::AssetIsNotReserveInDestination ); - // Root can set transact info - assert_ok!(XcmTransactor::set_transact_info( + // Set fee per second + assert_ok!(XcmTransactor::set_fee_per_second( Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), - 0, - 1, - 10000 + 1 )); // Cannot exceed the max weight @@ -153,8 +174,15 @@ fn test_transact_through_derivative_multilocation_success() { Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 0, - 1, - 10000 + 10000, + None + )); + + // Set fee per second + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 )); // fee as destination are the same, this time it should work @@ -175,10 +203,14 @@ fn test_transact_through_derivative_multilocation_success() { location: MultiLocation::parent(), remote_info: RemoteTransactInfoWithMaxWeight { transact_extra_weight: 0, - fee_per_second: 1, max_weight: 10000, + transact_extra_weight_signed: None, }, }, + crate::Event::DestFeePerSecondChanged { + location: MultiLocation::parent(), + fee_per_second: 1, + }, crate::Event::TransactedDerivative { account_id: 1u64, dest: MultiLocation::parent(), @@ -205,8 +237,15 @@ fn test_transact_through_derivative_success() { Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 0, - 1, - 10000 + 10000, + None + )); + + // Set fee per second + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 )); // fee as destination are the same, this time it should work @@ -227,10 +266,14 @@ fn test_transact_through_derivative_success() { location: MultiLocation::parent(), remote_info: RemoteTransactInfoWithMaxWeight { transact_extra_weight: 0, - fee_per_second: 1, max_weight: 10000, + transact_extra_weight_signed: None, }, }, + crate::Event::DestFeePerSecondChanged { + location: MultiLocation::parent(), + fee_per_second: 1, + }, crate::Event::TransactedDerivative { account_id: 1u64, dest: MultiLocation::parent(), @@ -268,8 +311,15 @@ fn test_root_can_transact_through_sovereign() { Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 0, - 1, - 10000 + 10000, + None + )); + + // Set fee per second + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 )); // fee as destination are the same, this time it should work @@ -288,10 +338,14 @@ fn test_root_can_transact_through_sovereign() { location: MultiLocation::parent(), remote_info: RemoteTransactInfoWithMaxWeight { transact_extra_weight: 0, - fee_per_second: 1, max_weight: 10000, + transact_extra_weight_signed: None, }, }, + crate::Event::DestFeePerSecondChanged { + location: MultiLocation::parent(), + fee_per_second: 1, + }, crate::Event::TransactedSovereign { fee_payer: 1u64, dest: MultiLocation::parent(), @@ -315,48 +369,20 @@ fn test_fee_calculation_works() { }) } +// Kusama case #[test] -fn test_max_transact_weight_migration_works() { +fn test_fee_calculation_works_kusama_0_9_20_case() { ExtBuilder::default() .with_balances(vec![]) .build() .execute_with(|| { - let pallet_prefix: &[u8] = b"XcmTransactor"; - let storage_item_prefix: &[u8] = b"TransactInfo"; - use frame_support::traits::OnRuntimeUpgrade; - use frame_support::StorageHasher; - use parity_scale_codec::Encode; - - // This is the previous struct, which we have moved to migrations - let old_transact_info = migrations::OldRemoteTransactInfo { - transact_extra_weight: 0, - fee_per_byte: 0, - base_weight: 0, - fee_per_weight: 1, - metadata_size: 0, - }; - // This is the new struct - let expected_transacted_info = RemoteTransactInfoWithMaxWeight { - transact_extra_weight: 0, - fee_per_second: 1 * WEIGHT_PER_SECOND as u128, - max_weight: 20000000000, - }; - - // We populate the previous key with the previous struct - put_storage_value( - pallet_prefix, - storage_item_prefix, - &Blake2_128Concat::hash(&MultiLocation::parent().encode()), - old_transact_info, - ); - // We run the migration - crate::migrations::MaxTransactWeight::::on_runtime_upgrade(); - - // We make sure that the new storage key is populated + // 38620923000 * 319324000/1e12 = 12332587.6161 + // integer arithmetic would round this to 12332587 + // we test here that it rounds up to 12332588 instead assert_eq!( - XcmTransactor::transact_info(MultiLocation::parent()).unwrap(), - expected_transacted_info, - ) + XcmTransactor::calculate_fee_per_second(319324000, 38620923000), + 12332588 + ); }) } @@ -397,8 +423,8 @@ fn removing_transact_info_works() { Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 0, - 1, - 10000 + 10000, + None )); // Root can remove transact info @@ -414,8 +440,8 @@ fn removing_transact_info_works() { location: MultiLocation::parent(), remote_info: RemoteTransactInfoWithMaxWeight { transact_extra_weight: 0, - fee_per_second: 1, max_weight: 10000, + transact_extra_weight_signed: None, }, }, crate::Event::TransactInfoRemoved { @@ -425,3 +451,245 @@ fn removing_transact_info_works() { assert_eq!(events(), expected); }) } + +#[test] +fn test_transact_through_signed_fails_if_transact_info_not_set_at_all() { + ExtBuilder::default() + .with_balances(vec![]) + .build() + .execute_with(|| { + // fee as destination are the same, this time it should work + assert_noop!( + XcmTransactor::transact_through_signed( + Origin::signed(1u64), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + CurrencyId::OtherReserve(0), + 100u64, + vec![1u8], + ), + Error::::TransactorInfoNotSet + ); + }) +} + +#[test] +fn test_transact_through_signed_fails_if_weight_is_not_set() { + ExtBuilder::default() + .with_balances(vec![]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000, + None + )); + + // weight value not set for signed transact, fails + assert_noop!( + XcmTransactor::transact_through_signed( + Origin::signed(1u64), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + CurrencyId::OtherReserve(0), + 100u64, + vec![1u8], + ), + Error::::SignedTransactNotAllowedForDestination + ); + }) +} + +#[test] +fn test_transact_through_signed_fails_if_weight_overflows() { + ExtBuilder::default() + .with_balances(vec![]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000, + Some(u64::MAX) + )); + + // weight should overflow + assert_noop!( + XcmTransactor::transact_through_signed( + Origin::signed(1u64), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + CurrencyId::OtherReserve(0), + 100u64, + vec![1u8], + ), + Error::::WeightOverflow + ); + }) +} + +#[test] +fn test_transact_through_signed_fails_if_weight_is_bigger_than_max_weight() { + ExtBuilder::default() + .with_balances(vec![]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000, + Some(1) + )); + + // 10000 + 1 > 10000 (max weight permitted by dest chain) + assert_noop!( + XcmTransactor::transact_through_signed( + Origin::signed(1u64), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + CurrencyId::OtherReserve(0), + 10000u64, + vec![1u8], + ), + Error::::MaxWeightTransactReached + ); + }) +} + +#[test] +fn test_transact_through_signed_fails_if_fee_per_second_not_set() { + ExtBuilder::default() + .with_balances(vec![]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000, + Some(1) + )); + + // fee per second not set, fails + assert_noop!( + XcmTransactor::transact_through_signed( + Origin::signed(1u64), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + CurrencyId::OtherReserve(0), + 100u64, + vec![1u8], + ), + Error::::FeePerSecondNotSet + ); + }) +} + +#[test] +fn test_transact_through_signed_works() { + ExtBuilder::default() + .with_balances(vec![]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000, + Some(1) + )); + + // Set fee per second + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + // transact info and fee per second set + // this time it should work + assert_ok!(XcmTransactor::transact_through_signed( + Origin::signed(1u64), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + CurrencyId::OtherReserve(0), + 100u64, + vec![1u8], + )); + + let expected = vec![ + crate::Event::TransactInfoChanged { + location: MultiLocation::parent(), + remote_info: RemoteTransactInfoWithMaxWeight { + transact_extra_weight: 0, + max_weight: 10000, + transact_extra_weight_signed: Some(1), + }, + }, + crate::Event::DestFeePerSecondChanged { + location: MultiLocation::parent(), + fee_per_second: 1, + }, + crate::Event::TransactedSigned { + fee_payer: 1u64, + dest: MultiLocation::parent(), + call: vec![1u8], + }, + ]; + assert_eq!(events(), expected); + }) +} + +#[test] +fn test_signed_weight_and_fee_per_second_migration_works() { + ExtBuilder::default() + .with_balances(vec![]) + .build() + .execute_with(|| { + let pallet_prefix: &[u8] = b"XcmTransactor"; + let storage_item_prefix: &[u8] = b"TransactInfoWithWeightLimit"; + use frame_support::traits::OnRuntimeUpgrade; + use frame_support::StorageHasher; + use parity_scale_codec::Encode; + + // This is the previous struct, which we have moved to migrations + let old_transact_info_with_fee_per_sec = + migrations::OldRemoteTransactInfoWithFeePerSecond { + transact_extra_weight: 1, + fee_per_second: 2, + max_weight: 3, + }; + // This is the new struct + let expected_transacted_info = RemoteTransactInfoWithMaxWeight { + transact_extra_weight: 1, + max_weight: 3, + transact_extra_weight_signed: None, + }; + // This is the new struct + let expected_destination_fee_per_second = 2u128; + + // We populate the previous key with the previous struct + put_storage_value( + pallet_prefix, + storage_item_prefix, + &Blake2_128Concat::hash(&MultiLocation::parent().encode()), + old_transact_info_with_fee_per_sec, + ); + // We run the migration + crate::migrations::TransactSignedWeightAndFeePerSecond::::on_runtime_upgrade(); + + // We make sure that the new storage key is populated + assert_eq!( + XcmTransactor::transact_info(MultiLocation::parent()).unwrap(), + expected_transacted_info, + ); + // We make sure that the new storage key is populated + assert_eq!( + XcmTransactor::dest_asset_fee_per_second(MultiLocation::parent()).unwrap(), + expected_destination_fee_per_second, + ); + }) +} diff --git a/pallets/xcm-transactor/src/weights.rs b/pallets/xcm-transactor/src/weights.rs index 7681c98875..d8f44e5350 100644 --- a/pallets/xcm-transactor/src/weights.rs +++ b/pallets/xcm-transactor/src/weights.rs @@ -17,7 +17,7 @@ //! Autogenerated weights for xcm_transactor //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2022-03-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2022-04-28, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 // Executed Command: @@ -28,7 +28,7 @@ // --execution=wasm // --wasm-execution=compiled // --pallet -// * +// xcm_transactor // --extrinsic // * // --steps @@ -40,7 +40,7 @@ // --json-file // raw.json // --output -// ./benchmarks/ +// weights.rs #![allow(unused_parens)] #![allow(unused_imports)] @@ -61,6 +61,10 @@ pub trait WeightInfo { fn set_transact_info() -> Weight; #[rustfmt::skip] fn remove_transact_info() -> Weight; + #[rustfmt::skip] + fn set_fee_per_second() -> Weight; + #[rustfmt::skip] + fn transact_through_signed_multilocation() -> Weight; } /// Weights for xcm_transactor using the Substrate node and recommended hardware. @@ -69,28 +73,47 @@ impl WeightInfo for SubstrateWeight { // Storage: XcmTransactor IndexToAccount (r:1 w:1) #[rustfmt::skip] fn register() -> Weight { - (19_401_000 as Weight) + (17_998_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: XcmTransactor IndexToAccount (r:0 w:1) #[rustfmt::skip] fn deregister() -> Weight { - (16_181_000 as Weight) + (14_817_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: XcmTransactor TransactInfoWithWeightLimit (r:0 w:1) #[rustfmt::skip] fn set_transact_info() -> Weight { - (19_595_000 as Weight) + (17_470_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } // Storage: XcmTransactor TransactInfoWithWeightLimit (r:0 w:1) #[rustfmt::skip] fn remove_transact_info() -> Weight { - (18_691_000 as Weight) + (16_694_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } + // Storage: XcmTransactor DestinationFeePerSecond (r:0 w:1) + #[rustfmt::skip] + fn set_fee_per_second() -> Weight { + (16_640_000 as Weight) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: XcmTransactor TransactInfoWithWeightLimit (r:1 w:0) + // Storage: XcmTransactor DestinationAssetFeePerSecond (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + #[rustfmt::skip] + fn transact_through_signed_multilocation() -> Weight { + (53_130_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } } // For backwards compatibility and tests @@ -98,26 +121,45 @@ impl WeightInfo for () { // Storage: XcmTransactor IndexToAccount (r:1 w:1) #[rustfmt::skip] fn register() -> Weight { - (19_401_000 as Weight) + (17_998_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: XcmTransactor IndexToAccount (r:0 w:1) #[rustfmt::skip] fn deregister() -> Weight { - (16_181_000 as Weight) + (14_817_000 as Weight) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: XcmTransactor TransactInfoWithWeightLimit (r:0 w:1) #[rustfmt::skip] fn set_transact_info() -> Weight { - (19_595_000 as Weight) + (17_470_000 as Weight) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } // Storage: XcmTransactor TransactInfoWithWeightLimit (r:0 w:1) #[rustfmt::skip] fn remove_transact_info() -> Weight { - (18_691_000 as Weight) + (16_694_000 as Weight) + .saturating_add(RocksDbWeight::get().writes(1 as Weight)) + } + // Storage: XcmTransactor DestinationFeePerSecond (r:0 w:1) + #[rustfmt::skip] + fn set_fee_per_second() -> Weight { + (16_640_000 as Weight) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } + // Storage: XcmTransactor TransactInfoWithWeightLimit (r:1 w:0) + // Storage: XcmTransactor DestinationAssetFeePerSecond (r:1 w:0) + // Storage: PolkadotXcm SupportedVersion (r:1 w:0) + // Storage: PolkadotXcm VersionDiscoveryQueue (r:1 w:1) + // Storage: PolkadotXcm SafeXcmVersion (r:1 w:0) + // Storage: ParachainSystem HostConfiguration (r:1 w:0) + // Storage: ParachainSystem PendingUpwardMessages (r:1 w:1) + #[rustfmt::skip] + fn transact_through_signed_multilocation() -> Weight { + (53_130_000 as Weight) + .saturating_add(RocksDbWeight::get().reads(7 as Weight)) + .saturating_add(RocksDbWeight::get().writes(2 as Weight)) + } } diff --git a/precompiles/assets-erc20/Cargo.toml b/precompiles/assets-erc20/Cargo.toml index b55c127855..968e3743e8 100644 --- a/precompiles/assets-erc20/Cargo.toml +++ b/precompiles/assets-erc20/Cargo.toml @@ -1,7 +1,7 @@ [package] -name = "pallet-evm-precompile-assets-erc20" +name = "pallet-evm-precompileset-assets-erc20" authors = [ "PureStake" ] -description = "A Precompile to expose a Assets pallet through an ERC20-compliant interface." +description = "A Precompile to expose Assets pallet through an ERC20-compliant interface." edition = "2021" version = "0.1.0" @@ -16,20 +16,20 @@ precompile-utils = { path = "../utils", default-features = false } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-assets = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-assets = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = { version = "0.99" } @@ -38,10 +38,13 @@ libsecp256k1 = "0.7" serde = { version = "1.0.100" } sha3 = "0.8" +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } + codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "max-encoded-len" ] } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/precompiles/assets-erc20/LocalAsset.sol b/precompiles/assets-erc20/LocalAsset.sol index 2e7a055224..d843836472 100644 --- a/precompiles/assets-erc20/LocalAsset.sol +++ b/precompiles/assets-erc20/LocalAsset.sol @@ -7,7 +7,7 @@ pragma solidity ^0.8.0; interface LocalAsset { /** * @dev Mint tokens to an address - * Selector: 23b872dd + * Selector: 40c10f19 * @param to address The address to which you want to mint tokens * @param value uint256 the amount of tokens to be minted */ @@ -16,7 +16,7 @@ interface LocalAsset { /** * @dev Burn tokens from an address - * Selector: 23b872dd + * Selector: 9dc29fac * @param from address The address from which you want to burn tokens * @param value uint256 the amount of tokens to be burnt */ @@ -25,7 +25,7 @@ interface LocalAsset { /** * @dev Freeze an account, preventing it from operating with the asset - * Selector: 23b872dd + * Selector: 8d1fdf2f * @param account address The address that you want to freeze */ function freeze(address account) @@ -33,7 +33,7 @@ interface LocalAsset { /** * @dev Unfreeze an account, letting it from operating againt with the asset - * Selector: 23b872dd + * Selector: 5ea20216 * @param account address The address that you want to unfreeze */ function thaw(address account) @@ -41,21 +41,21 @@ interface LocalAsset { /** * @dev Freeze the entire asset operations - * Selector: 23b872dd + * Selector: 6b8751c1 */ function freeze_asset() external returns (bool); /** * @dev Unfreeze the entire asset operations - * Selector: 23b872dd + * Selector: 1cddec19 */ function thaw_asset() external returns (bool); /** * @dev Transfer the ownership of an asset to a new account - * Selector: 23b872dd + * Selector: f0350c04 * @param owner address The address of the new owner */ function transfer_ownership(address owner) @@ -63,7 +63,7 @@ interface LocalAsset { /** * @dev Specify the issuer, admin and freezer of an asset - * Selector: 23b872dd + * Selector: f8bf8e95 * @param issuer address The address capable of issuing tokens * @param admin address The address capable of burning tokens and unfreezing accounts/assets * @param freezer address The address capable of freezing accounts/asset @@ -73,7 +73,7 @@ interface LocalAsset { /** * @dev Specify the name, symbol and decimals of your asset - * Selector: 23b872dd + * Selector: ee5dc1e4 * @param name string The name of the asset * @param symbol string The symbol of the asset * @param decimals uint8 The number of decimals of your asset @@ -83,7 +83,7 @@ interface LocalAsset { /** * @dev Clear the name, symbol and decimals of your asset - * Selector: 23b872dd + * Selector: d3ba4b9e */ function clear_metadata() external returns (bool); diff --git a/precompiles/assets-erc20/src/eip2612.rs b/precompiles/assets-erc20/src/eip2612.rs index 786f1d8a30..8a133e47d8 100644 --- a/precompiles/assets-erc20/src/eip2612.rs +++ b/precompiles/assets-erc20/src/eip2612.rs @@ -186,25 +186,26 @@ where // Translated from // https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2ERC20.sol#L81 pub(crate) fn permit( - address: H160, asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + + let mut input = handle.read_input()?; + let owner: H160 = input.read::
()?.into(); + let spender: H160 = input.read::
()?.into(); + let value: U256 = input.read()?; + let deadline: U256 = input.read()?; + let v: u8 = input.read()?; + let r: H256 = input.read()?; + let s: H256 = input.read()?; - let owner: H160 = input.read::
(gasometer)?.into(); - let spender: H160 = input.read::
(gasometer)?.into(); - let value: U256 = input.read(gasometer)?; - let deadline: U256 = input.read(gasometer)?; - let v: u8 = input.read(gasometer)?; - let r: H256 = input.read(gasometer)?; - let s: H256 = input.read(gasometer)?; + let address = handle.code_address(); // pallet_timestamp is in ms while Ethereum use second timestamps. let timestamp: U256 = (pallet_timestamp::Pallet::::get()).into() / 1000; - ensure!(deadline >= timestamp, gasometer.revert("permit expired")); + ensure!(deadline >= timestamp, revert("permit expired")); let nonce = NoncesStorage::::get(address, owner); @@ -217,68 +218,57 @@ where sig[64] = v; let signer = sp_io::crypto::secp256k1_ecdsa_recover(&sig, &permit) - .map_err(|_| gasometer.revert("invalid permit"))?; + .map_err(|_| revert("invalid permit"))?; let signer = H160::from(H256::from_slice(keccak_256(&signer).as_slice())); ensure!( signer != H160::zero() && signer == owner, - gasometer.revert("invalid permit") + revert("invalid permit") ); NoncesStorage::::insert(address, owner, nonce + U256::one()); Erc20AssetsPrecompileSet::::approve_inner( - asset_id, gasometer, owner, spender, value, + asset_id, handle, owner, spender, value, )?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: vec![], - logs: LogsBuilder::new(address) - .log3( - SELECTOR_LOG_APPROVAL, - owner, - spender, - EvmDataWriter::new().write(value).build(), - ) - .build(), - }) + log3( + address, + SELECTOR_LOG_APPROVAL, + owner, + spender, + EvmDataWriter::new().write(value).build(), + ) + .record(handle)?; + + Ok(succeed([])) } pub(crate) fn nonces( - address: H160, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + _asset_id: AssetIdOf, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let owner: H160 = input.read::
(gasometer)?.into(); + let mut input = handle.read_input()?; + let owner: H160 = input.read::
()?.into(); - let nonce = NoncesStorage::::get(address, owner); + let nonce = NoncesStorage::::get(handle.code_address(), owner); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(nonce).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(nonce).build())) } pub(crate) fn domain_separator( - address: H160, asset_id: AssetIdOf, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let domain_separator: H256 = Self::compute_domain_separator(address, asset_id).into(); + let domain_separator: H256 = + Self::compute_domain_separator(handle.code_address(), asset_id).into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(domain_separator).build(), - logs: vec![], - }) + Ok(succeed( + EvmDataWriter::new().write(domain_separator).build(), + )) } } diff --git a/precompiles/assets-erc20/src/lib.rs b/precompiles/assets-erc20/src/lib.rs index ecafc6b9b9..68768553d4 100644 --- a/precompiles/assets-erc20/src/lib.rs +++ b/precompiles/assets-erc20/src/lib.rs @@ -18,7 +18,7 @@ #![cfg_attr(test, feature(assert_matches))] use core::fmt::Display; -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{PrecompileHandle, PrecompileOutput}; use frame_support::traits::fungibles::approvals::Inspect as ApprovalInspect; use frame_support::traits::fungibles::metadata::Inspect as MetadataInspect; use frame_support::traits::fungibles::Inspect; @@ -28,10 +28,7 @@ use frame_support::{ sp_runtime::traits::StaticLookup, }; use pallet_evm::{AddressMapping, PrecompileSet}; -use precompile_utils::{ - keccak256, Address, Bytes, EvmData, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, - Gasometer, LogsBuilder, RuntimeHelper, -}; +use precompile_utils::prelude::*; use sp_runtime::traits::Bounded; use sp_std::vec::Vec; @@ -39,7 +36,6 @@ use sp_core::{H160, U256}; use sp_std::{ convert::{TryFrom, TryInto}, marker::PhantomData, - vec, }; mod eip2612; @@ -65,7 +61,7 @@ pub type AssetIdOf = ; pub type IsForeign = ConstBool; -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] pub enum Action { TotalSupply = "totalSupply()", @@ -121,6 +117,18 @@ pub struct Erc20AssetsPrecompileSet( PhantomData<(Runtime, IsLocal, Instance)>, ); +impl Clone for Erc20AssetsPrecompileSet { + fn clone(&self) -> Self { + Self(PhantomData) + } +} + +impl Default for Erc20AssetsPrecompileSet { + fn default() -> Self { + Self(PhantomData) + } +} + impl PrecompileSet for Erc20AssetsPrecompileSet where @@ -139,85 +147,59 @@ where ::Moment: Into, AssetIdOf: Display, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - if let Some((_, asset_id)) = - Runtime::account_to_asset_id(Runtime::AddressMapping::into_account_id(address)) - { + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + if let Some((_, asset_id)) = Runtime::account_to_asset_id( + Runtime::AddressMapping::into_account_id(handle.code_address()), + ) { // We check maybe_total_supply. This function returns Some if the asset exists, // which is all we care about at this point if pallet_assets::Pallet::::maybe_total_supply(asset_id).is_some() { let result = { - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; - - let (mut input, selector) = - match EvmDataReader::new_with_selector(gasometer, input) { - Ok((input, selector)) => (input, selector), - Err(e) => return Some(Err(e)), - }; - let input = &mut input; - - if let Err(err) = gasometer.check_function_modifier( - context, - is_static, - match selector { - Action::Approve | Action::Transfer | Action::TransferFrom => { - FunctionModifier::NonPayable - } - _ => FunctionModifier::View, - }, - ) { + let selector = match handle.read_selector() { + Ok(selector) => selector, + Err(e) => return Some(Err(e)), + }; + + if let Err(err) = handle.check_function_modifier(match selector { + Action::Approve | Action::Transfer | Action::TransferFrom => { + FunctionModifier::NonPayable + } + _ => FunctionModifier::View, + }) { return Some(Err(err)); } match selector { // Local and Foreign common - Action::TotalSupply => Self::total_supply(asset_id, input, gasometer), - Action::BalanceOf => Self::balance_of(asset_id, input, gasometer), - Action::Allowance => Self::allowance(asset_id, input, gasometer), - Action::Approve => Self::approve(asset_id, input, gasometer, context), - Action::Transfer => Self::transfer(asset_id, input, gasometer, context), - Action::TransferFrom => { - Self::transfer_from(asset_id, input, gasometer, context) - } - Action::Name => Self::name(asset_id, gasometer), - Action::Symbol => Self::symbol(asset_id, gasometer), - Action::Decimals => Self::decimals(asset_id, gasometer), + Action::TotalSupply => Self::total_supply(asset_id, handle), + Action::BalanceOf => Self::balance_of(asset_id, handle), + Action::Allowance => Self::allowance(asset_id, handle), + Action::Approve => Self::approve(asset_id, handle), + Action::Transfer => Self::transfer(asset_id, handle), + Action::TransferFrom => Self::transfer_from(asset_id, handle), + Action::Name => Self::name(asset_id, handle), + Action::Symbol => Self::symbol(asset_id, handle), + Action::Decimals => Self::decimals(asset_id, handle), // Only local - Action::Mint => Self::mint(asset_id, input, gasometer, context), - Action::Burn => Self::burn(asset_id, input, gasometer, context), - Action::Freeze => Self::freeze(asset_id, input, gasometer, context), - Action::Thaw => Self::thaw(asset_id, input, gasometer, context), - Action::FreezeAsset => Self::freeze_asset(asset_id, gasometer, context), - Action::ThawAsset => Self::thaw_asset(asset_id, gasometer, context), - Action::TransferOwnership => { - Self::transfer_ownership(asset_id, input, gasometer, context) - } - Action::SetTeam => Self::set_team(asset_id, input, gasometer, context), - Action::SetMetadata => { - Self::set_metadata(asset_id, input, gasometer, context) - } - Action::ClearMetadata => Self::clear_metadata(asset_id, gasometer, context), + Action::Mint => Self::mint(asset_id, handle), + Action::Burn => Self::burn(asset_id, handle), + Action::Freeze => Self::freeze(asset_id, handle), + Action::Thaw => Self::thaw(asset_id, handle), + Action::FreezeAsset => Self::freeze_asset(asset_id, handle), + Action::ThawAsset => Self::thaw_asset(asset_id, handle), + Action::TransferOwnership => Self::transfer_ownership(asset_id, handle), + Action::SetTeam => Self::set_team(asset_id, handle), + Action::SetMetadata => Self::set_metadata(asset_id, handle), + Action::ClearMetadata => Self::clear_metadata(asset_id, handle), Action::Eip2612Permit => { - eip2612::Eip2612::::permit( - address, asset_id, input, gasometer, - ) + eip2612::Eip2612::::permit(asset_id, handle) } Action::Eip2612Nonces => { - eip2612::Eip2612::::nonces( - address, input, gasometer, - ) + eip2612::Eip2612::::nonces(asset_id, handle) } Action::Eip2612DomainSeparator => { eip2612::Eip2612::::domain_separator( - address, asset_id, gasometer, + asset_id, handle, ) } } @@ -266,38 +248,33 @@ where { fn total_supply( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Parse input. - input.expect_arguments(gasometer, 0)?; + let input = handle.read_input()?; + input.expect_arguments(0)?; // Fetch info. let amount: U256 = pallet_assets::Pallet::::total_issuance(asset_id).into(); // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(amount).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(amount).build())) } fn balance_of( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Read input. - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let owner: H160 = input.read::
(gasometer)?.into(); + let owner: H160 = input.read::
()?.into(); // Fetch info. let amount: U256 = { @@ -306,26 +283,21 @@ where }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(amount).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(amount).build())) } fn allowance( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Read input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let owner: H160 = input.read::
(gasometer)?.into(); - let spender: H160 = input.read::
(gasometer)?.into(); + let owner: H160 = input.read::
()?.into(); + let spender: H160 = input.read::
()?.into(); // Fetch info. let amount: U256 = { @@ -337,49 +309,40 @@ where }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(amount).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(amount).build())) } fn approve( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_log_costs_manual(3, 32)?; + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let spender: H160 = input.read::
(gasometer)?.into(); - let amount: U256 = input.read(gasometer)?; + let spender: H160 = input.read::
()?.into(); + let amount: U256 = input.read()?; - Self::approve_inner(asset_id, gasometer, context.caller, spender, amount)?; + Self::approve_inner(asset_id, handle, handle.context().caller, spender, amount)?; + + log3( + handle.context().address, + SELECTOR_LOG_APPROVAL, + handle.context().caller, + spender, + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_APPROVAL, - context.caller, - spender, - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn approve_inner( asset_id: AssetIdOf, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, owner: H160, spender: H160, value: U256, @@ -391,97 +354,92 @@ where value.try_into().unwrap_or_else(|_| Bounded::max_value()); // Allowance read - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // If previous approval exists, we need to clean it if pallet_assets::Pallet::::allowance(asset_id, &owner, &spender) != 0u32.into() { RuntimeHelper::::try_dispatch( + handle, Some(owner.clone()).into(), pallet_assets::Call::::cancel_approval { id: asset_id, delegate: Runtime::Lookup::unlookup(spender.clone()), }, - gasometer, )?; } // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(owner).into(), pallet_assets::Call::::approve_transfer { id: asset_id, delegate: Runtime::Lookup::unlookup(spender), amount, }, - gasometer, ) } fn transfer( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_log_costs_manual(3, 32)?; + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let to: H160 = input.read::
(gasometer)?.into(); - let amount = input.read::>(gasometer)?; + let to: H160 = input.read::
()?.into(); + let amount = input.read::>()?; // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let to = Runtime::AddressMapping::into_account_id(to); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::transfer { id: asset_id, target: Runtime::Lookup::unlookup(to), amount, }, - gasometer, )?; } + log3( + handle.context().address, + SELECTOR_LOG_TRANSFER, + handle.context().caller, + to, + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_TRANSFER, - context.caller, - to, - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn transfer_from( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_log_costs_manual(3, 32)?; + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 3)?; - let from: H160 = input.read::
(gasometer)?.into(); - let to: H160 = input.read::
(gasometer)?.into(); - let amount = input.read::>(gasometer)?; + let mut input = handle.read_input()?; + input.expect_arguments(3)?; + let from: H160 = input.read::
()?.into(); + let to: H160 = input.read::
()?.into(); + let amount = input.read::>()?; { let caller: Runtime::AccountId = - Runtime::AddressMapping::into_account_id(context.caller); + Runtime::AddressMapping::into_account_id(handle.context().caller); let from: Runtime::AccountId = Runtime::AddressMapping::into_account_id(from.clone()); let to: Runtime::AccountId = Runtime::AddressMapping::into_account_id(to); @@ -489,6 +447,7 @@ where if caller != from { // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(caller).into(), pallet_assets::Call::::transfer_approved { id: asset_id, @@ -496,407 +455,357 @@ where destination: Runtime::Lookup::unlookup(to), amount, }, - gasometer, )?; } else { // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(from).into(), pallet_assets::Call::::transfer { id: asset_id, target: Runtime::Lookup::unlookup(to), amount, }, - gasometer, )?; } } + + log3( + handle.context().address, + SELECTOR_LOG_TRANSFER, + from, + to, + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_TRANSFER, - from, - to, - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn name( asset_id: AssetIdOf, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new() + Ok(succeed( + EvmDataWriter::new() .write::( pallet_assets::Pallet::::name(asset_id) .as_slice() .into(), ) .build(), - logs: Default::default(), - }) + )) } fn symbol( asset_id: AssetIdOf, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new() + Ok(succeed( + EvmDataWriter::new() .write::( pallet_assets::Pallet::::symbol(asset_id) .as_slice() .into(), ) .build(), - logs: Default::default(), - }) + )) } fn decimals( asset_id: AssetIdOf, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new() + Ok(succeed( + EvmDataWriter::new() .write::(pallet_assets::Pallet::::decimals( asset_id, )) .build(), - logs: Default::default(), - }) + )) } // From here: only for locals, we need to check whether we are in local assets otherwise fail fn mint( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } - gasometer.record_log_costs_manual(3, 32)?; + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let to: H160 = input.read::
(gasometer)?.into(); - let amount = input.read::>(gasometer)?; + let to: H160 = input.read::
()?.into(); + let amount = input.read::>()?; // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let to = Runtime::AddressMapping::into_account_id(to); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::mint { id: asset_id, beneficiary: Runtime::Lookup::unlookup(to), amount, }, - gasometer, )?; } + log3( + handle.context().address, + SELECTOR_LOG_TRANSFER, + H160::default(), + to, + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::default(), - to, - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn burn( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } - gasometer.record_log_costs_manual(3, 32)?; + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let to: H160 = input.read::
(gasometer)?.into(); - let amount = input.read::>(gasometer)?; + let to: H160 = input.read::
()?.into(); + let amount = input.read::>()?; // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let to = Runtime::AddressMapping::into_account_id(to); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::burn { id: asset_id, who: Runtime::Lookup::unlookup(to), amount, }, - gasometer, )?; } + log3( + handle.context().address, + SELECTOR_LOG_TRANSFER, + to, + H160::default(), + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_TRANSFER, - to, - H160::default(), - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn freeze( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Parse input. - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let to: H160 = input.read::
(gasometer)?.into(); + let to: H160 = input.read::
()?.into(); // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let to = Runtime::AddressMapping::into_account_id(to); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::freeze { id: asset_id, who: Runtime::Lookup::unlookup(to), }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn thaw( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Parse input. - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let to: H160 = input.read::
(gasometer)?.into(); + let to: H160 = input.read::
()?.into(); // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let to = Runtime::AddressMapping::into_account_id(to); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::thaw { id: asset_id, who: Runtime::Lookup::unlookup(to), }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn freeze_asset( asset_id: AssetIdOf, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::freeze_asset { id: asset_id }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn thaw_asset( asset_id: AssetIdOf, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::thaw_asset { id: asset_id }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn transfer_ownership( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Parse input. - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let owner: H160 = input.read::
(gasometer)?.into(); + let owner: H160 = input.read::
()?.into(); // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let owner = Runtime::AddressMapping::into_account_id(owner); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::transfer_ownership { id: asset_id, owner: Runtime::Lookup::unlookup(owner), }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn set_team( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Parse input. - input.expect_arguments(gasometer, 3)?; + let mut input = handle.read_input()?; + input.expect_arguments(3)?; - let issuer: H160 = input.read::
(gasometer)?.into(); - let admin: H160 = input.read::
(gasometer)?.into(); - let freezer: H160 = input.read::
(gasometer)?.into(); + let issuer: H160 = input.read::
()?.into(); + let admin: H160 = input.read::
()?.into(); + let freezer: H160 = input.read::
()?.into(); // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let issuer = Runtime::AddressMapping::into_account_id(issuer); let admin = Runtime::AddressMapping::into_account_id(admin); let freezer = Runtime::AddressMapping::into_account_id(freezer); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::set_team { id: asset_id, @@ -904,42 +813,36 @@ where admin: Runtime::Lookup::unlookup(admin), freezer: Runtime::Lookup::unlookup(freezer), }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn set_metadata( asset_id: AssetIdOf, - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Parse input. - input.expect_arguments(gasometer, 3)?; + let mut input = handle.read_input()?; + input.expect_arguments(3)?; - let name: Bytes = input.read::(gasometer)?.into(); - let symbol: Bytes = input.read::(gasometer)?.into(); - let decimals: u8 = input.read::(gasometer)?.into(); + let name: Bytes = input.read::()?.into(); + let symbol: Bytes = input.read::()?.into(); + let decimals: u8 = input.read::()?.into(); // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::set_metadata { id: asset_id, @@ -947,46 +850,34 @@ where symbol: symbol.into(), decimals, }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } fn clear_metadata( asset_id: AssetIdOf, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { if !IsLocal::get() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_assets::Call::::clear_metadata { id: asset_id }, - gasometer, )?; } // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } } diff --git a/precompiles/assets-erc20/src/mock.rs b/precompiles/assets-erc20/src/mock.rs index 135a4f07d9..16d6c0858e 100644 --- a/precompiles/assets-erc20/src/mock.rs +++ b/precompiles/assets-erc20/src/mock.rs @@ -230,6 +230,7 @@ impl pallet_balances::Config for Runtime { } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub const PrecompilesValue: Precompiles = Precompiles(PhantomData); } @@ -246,10 +247,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesValue = PrecompilesValue; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } type ForeignAssetInstance = pallet_assets::Instance1; @@ -358,24 +358,17 @@ where Erc20AssetsPrecompileSet: PrecompileSet, Erc20AssetsPrecompileSet: PrecompileSet, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { // If the address matches asset prefix, the we route through the foreign asset precompile set a if &a.to_fixed_bytes()[0..4] == LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX => { Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) + .execute(handle) } // If the address matches asset prefix, the we route through the local asset precompile set a if &a.to_fixed_bytes()[0..4] == FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX => { Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) + .execute(handle) } _ => None, } diff --git a/precompiles/assets-erc20/src/tests.rs b/precompiles/assets-erc20/src/tests.rs index 615b9903d8..ae2dc09909 100644 --- a/precompiles/assets-erc20/src/tests.rs +++ b/precompiles/assets-erc20/src/tests.rs @@ -15,15 +15,13 @@ // along with Moonbeam. If not, see . use frame_support::assert_ok; -use std::{assert_matches::assert_matches, str::from_utf8}; +use std::str::from_utf8; use crate::{eip2612::Eip2612, mock::*, *}; -use fp_evm::{Context, PrecompileFailure}; use hex_literal::hex; use libsecp256k1::{sign, Message, SecretKey}; -use pallet_evm::PrecompileSet; -use precompile_utils::{EvmDataWriter, LogsBuilder}; +use precompile_utils::testing::*; use sha3::{Digest, Keccak256}; use sp_core::H256; @@ -42,23 +40,13 @@ fn selector_less_than_four_bytes() { 1 )); // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &bogus_selector, - None, - &Context { - address: Account::ForeignAssetId(1u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, .. })) - if output == b"tried to parse selector out of bounds" - ); + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + vec![1u8, 2u8, 3u8], + ) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); }); } @@ -72,23 +60,14 @@ fn no_selector_exists_but_length_is_right() { true, 1 )); - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &bogus_selector, - None, - &Context { - address: Account::ForeignAssetId(1u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, .. })) - if output == b"unknown selector" - ); + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + vec![1u8, 2u8, 3u8, 4u8], + ) + .execute_reverts(|output| output == b"unknown selector"); }); } @@ -137,25 +116,16 @@ fn get_total_supply() { Account::Alice.into(), 1000 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TotalSupply).build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000u64)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TotalSupply).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000u64)).build()); }); } @@ -178,27 +148,18 @@ fn get_balances_known_user() { Account::Alice.into(), 1000 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000u64)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000u64)).build()); }); } @@ -215,27 +176,18 @@ fn get_balances_unknown_user() { true, 1 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u64)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u64)).build()); }); } @@ -259,35 +211,24 @@ fn approve() { 1000 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Approve) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) .write(Address(Account::Bob.into())) .write(U256::from(500)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 30832756u64, - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build(), - })) - ); + ) + .expect_cost(31253756u64) + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(500)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -311,58 +252,37 @@ fn approve_saturating() { 1000 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Approve) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) .write(Address(Account::Bob.into())) .write(U256::MAX) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 30832756u64, - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::MAX).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .expect_cost(31253756u64) + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::MAX).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(u128::MAX)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0u64) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(u128::MAX)).build()); }); } @@ -386,43 +306,29 @@ fn check_allowance_existing() { 1000 )); - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Approve) - .write(Address(Account::Bob.into())) - .write(U256::from(500)) - .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(500)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(500u64)).build(), - cost: 0u64, - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(500u64)).build()); }); } @@ -439,28 +345,19 @@ fn check_allowance_not_existing() { true, 1 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u64)).build(), - cost: 0u64, - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u64)).build()); }); } @@ -484,79 +381,48 @@ fn transfer() { 1000 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Transfer) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Transfer) .write(Address(Account::Bob.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 44001756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(44055756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(600)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(600)).build()); }); } @@ -580,26 +446,21 @@ fn transfer_not_enough_founds() { 1 )); - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Transfer) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Transfer) .write(Address(Account::Charlie.into())) .write(U256::from(50)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output: str, ..})) - if from_utf8(&str).unwrap() + ) + .execute_reverts(|output| { + from_utf8(&output) + .unwrap() .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") - && from_utf8(&str).unwrap().contains("BalanceLow") - ); + && from_utf8(&output).unwrap().contains("BalanceLow") + }); }); } @@ -623,117 +484,83 @@ fn transfer_from() { 1000 )); - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Approve) - .write(Address(Account::Bob.into())) - .write(U256::from(500)) - .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TransferFrom) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(500)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(500)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Bob, // Bob is the one sending transferFrom! + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferFrom) .write(Address(Account::Alice.into())) .write(Address(Account::Charlie.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Bob.into(), // Bob is the one sending transferFrom! - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 56268756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Alice, - Account::Charlie, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(55282756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Alice, + Account::Charlie, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(600)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(600)).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); + + precompiles() + .prepare_test( + Account::Charlie, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Charlie.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); }); } @@ -758,93 +585,66 @@ fn transfer_from_non_incremental_approval() { )); // We first approve 500 - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Approve) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) .write(Address(Account::Bob.into())) .write(U256::from(500)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 30832756u64, - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build(), - })) - ); + ) + .expect_cost(31253756u64) + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(500)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // We then approve 300. Non-incremental, so this is // the approved new value // Additionally, the gas used in this approval is higher because we // need to clear the previous one - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Approve) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) .write(Address(Account::Bob.into())) .write(U256::from(300)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 62796756u64, - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(300)).build(), - ) - .build(), - })) - ); + ) + .expect_cost(62037756u64) + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(300)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // This should fail, as now the new approved quantity is 300 - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TransferFrom) + precompiles() + .prepare_test( + Account::Bob, // Bob is the one sending transferFrom! + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferFrom) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .write(U256::from(500)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Bob.into(), // Bob is the one sending transferFrom! - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"Dispatched call failed with error: DispatchErrorWithPostInfo { \ + ) + .execute_reverts(|output| { + output + == b"Dispatched call failed with error: DispatchErrorWithPostInfo { \ post_info: PostDispatchInfo { actual_weight: None, pays_fee: Pays::Yes }, \ error: Module(ModuleError { index: 2, error: [10, 0, 0, 0], \ message: Some(\"Unapproved\") }) }" - ); + }); }); } @@ -868,43 +668,34 @@ fn transfer_from_above_allowance() { 1000 )); - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Approve) - .write(Address(Account::Bob.into())) - .write(U256::from(300)) - .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ); - - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TransferFrom) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(300)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Bob, // Bob is the one sending transferFrom! + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferFrom) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Bob.into(), // Bob is the one sending transferFrom! - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"Dispatched call failed with error: DispatchErrorWithPostInfo { \ + ) + .execute_reverts(|output| { + output + == b"Dispatched call failed with error: DispatchErrorWithPostInfo { \ post_info: PostDispatchInfo { actual_weight: None, pays_fee: Pays::Yes }, \ error: Module(ModuleError { index: 2, error: [10, 0, 0, 0], \ message: Some(\"Unapproved\") }) }" - ); + }); }); } @@ -928,81 +719,49 @@ fn transfer_from_self() { 1000 )); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TransferFrom) + precompiles() + .prepare_test( + Account::Alice, // Alice sending transferFrom herself, no need for allowance. + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferFrom) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 44001756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(44055756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(600)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(600)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); }); } @@ -1027,72 +786,40 @@ fn get_metadata() { 12, false )); - { - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Name).build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new() - .write::("TestToken".into()) - .build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Symbol).build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write::("Test".into()).build(), - cost: Default::default(), - logs: Default::default(), - })) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Name).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write::("TestToken".into()) + .build(), ); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Decimals).build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(12u8).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Symbol).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write::("Test".into()).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Decimals).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(12u8).build()); }); } @@ -1117,46 +844,28 @@ fn local_functions_cannot_be_accessed_by_foreign_assets() { 12, false )); - { - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Mint) - .write(Address(Account::Bob.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, .. })) - if output == b"unknown selector" - ); - }; - { - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Burn) - .write(Address(Account::Bob.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, .. })) - if output == b"unknown selector" - ); - }; + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Mint) + .write(Address(Account::Bob.into())) + .write(U256::from(400)) + .build(), + ) + .execute_reverts(|output| output == b"unknown selector"); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Burn) + .write(Address(Account::Bob.into())) + .write(U256::from(400)) + .build(), + ) + .execute_reverts(|output| output == b"unknown selector"); }); } @@ -1181,59 +890,37 @@ fn mint_local_assets() { 12, false )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Mint) - .write(Address(Account::Bob.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 26633756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::LocalAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Zero, - Account::Bob, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Mint) + .write(Address(Account::Bob.into())) + .write(U256::from(400)) + .build(), + ) + .expect_cost(25994756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::LocalAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Zero, + Account::Bob, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); }); } @@ -1264,59 +951,37 @@ fn burn_local_assets() { Account::Alice.into(), 1000 )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Burn) - .write(Address(Account::Alice.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 30049756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::LocalAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Alice, - Account::Zero, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) - .write(Address(Account::Alice.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(600)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Burn) + .write(Address(Account::Alice.into())) + .write(U256::from(400)) + .build(), + ) + .expect_cost(30796756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::LocalAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Alice, + Account::Zero, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) + .write(Address(Account::Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(600)).build()); }); } @@ -1347,50 +1012,34 @@ fn freeze_local_assets() { Account::Bob.into(), 1000 )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Freeze) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 18309000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - assert_matches!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Transfer) - .write(Address(Account::Alice.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output: str, ..})) - if from_utf8(&str).unwrap() - .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") - && from_utf8(&str).unwrap().contains("Frozen") - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Freeze) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(18381000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Transfer) + .write(Address(Account::Alice.into())) + .write(U256::from(400)) + .build(), + ) + .execute_reverts(|output| { + from_utf8(&output) + .unwrap() + .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") + && from_utf8(&output).unwrap().contains("Frozen") + }); }); } @@ -1421,81 +1070,49 @@ fn thaw_local_assets() { Account::Bob.into(), 1000 )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Freeze) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 18309000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Thaw) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 18290000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Transfer) - .write(Address(Account::Alice.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 44001756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::LocalAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Bob, - Account::Alice, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Freeze) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(18381000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Thaw) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(18215000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Transfer) + .write(Address(Account::Alice.into())) + .write(U256::from(400)) + .build(), + ) + .expect_cost(44055756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::LocalAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Bob, + Account::Alice, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -1526,48 +1143,32 @@ fn freeze_asset_local_asset() { Account::Bob.into(), 1000 )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::FreezeAsset).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 14744000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - assert_matches!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Transfer) - .write(Address(Account::Alice.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output: str, ..})) - if from_utf8(&str).unwrap() - .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") - && from_utf8(&str).unwrap().contains("Frozen") - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::FreezeAsset).build(), + ) + .expect_cost(14885000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Transfer) + .write(Address(Account::Alice.into())) + .write(U256::from(400)) + .build(), + ) + .execute_reverts(|output| { + from_utf8(&output) + .unwrap() + .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") + && from_utf8(&output).unwrap().contains("Frozen") + }); }); } @@ -1598,77 +1199,45 @@ fn thaw_asset_local_assets() { Account::Bob.into(), 1000 )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::FreezeAsset).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 14744000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::ThawAsset).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 14833000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Transfer) - .write(Address(Account::Alice.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 44001756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::LocalAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Bob, - Account::Alice, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::FreezeAsset).build(), + ) + .expect_cost(14885000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::ThawAsset).build(), + ) + .expect_cost(14834000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Transfer) + .write(Address(Account::Alice.into())) + .write(U256::from(400)) + .build(), + ) + .expect_cost(44055756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::LocalAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Bob, + Account::Alice, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -1693,72 +1262,46 @@ fn transfer_ownership_local_assets() { 12, false )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TransferOwnership) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 16654000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - // Now Bob should be able to change ownership, and not Alice - assert_matches!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TransferOwnership) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output: str, ..})) - if from_utf8(&str).unwrap() - .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") - && from_utf8(&str).unwrap().contains("NoPermission") - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::TransferOwnership) - .write(Address(Account::Alice.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 16654000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferOwnership) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(16033000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + // Now Bob should be able to change ownership, and not Alice + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferOwnership) + .write(Address(Account::Bob.into())) + .build(), + ) + .execute_reverts(|output| { + from_utf8(&output) + .unwrap() + .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") + && from_utf8(&output).unwrap().contains("NoPermission") + }); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferOwnership) + .write(Address(Account::Alice.into())) + .build(), + ) + .expect_cost(16033000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -1783,105 +1326,68 @@ fn set_team_local_assets() { 12, false )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::SetTeam) - .write(Address(Account::Bob.into())) - .write(Address(Account::Bob.into())) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 15351000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - - // Now Bob should be able to mint, and not Alice - assert_matches!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Mint) - .write(Address(Account::Bob.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output: str, ..})) - if from_utf8(&str).unwrap() - .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") - && from_utf8(&str).unwrap().contains("NoPermission") - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Mint) - .write(Address(Account::Bob.into())) - .write(U256::from(400)) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 26633756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::LocalAssetId(0u128).into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Zero, - Account::Bob, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) - .write(Address(Account::Bob.into())) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Bob.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::SetTeam) + .write(Address(Account::Bob.into())) + .write(Address(Account::Bob.into())) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(14344000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + // Now Bob should be able to mint, and not Alice + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Mint) + .write(Address(Account::Bob.into())) + .write(U256::from(400)) + .build(), + ) + .execute_reverts(|output| { + from_utf8(&output) + .unwrap() + .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") + && from_utf8(&output).unwrap().contains("NoPermission") + }); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Mint) + .write(Address(Account::Bob.into())) + .write(U256::from(400)) + .build(), + ) + .expect_cost(25994756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Account::LocalAssetId(0u128), + SELECTOR_LOG_TRANSFER, + Account::Zero, + Account::Bob, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Bob, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); }); } @@ -1906,96 +1412,54 @@ fn set_metadata() { 12, false )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::SetMetadata) - .write::("TestToken".into()) - .write::("Test".into()) - .write::(12) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 27654000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Name).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new() - .write::("TestToken".into()) - .build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Symbol).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write::("Test".into()).build(), - cost: Default::default(), - logs: Default::default(), - })) + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::SetMetadata) + .write::("TestToken".into()) + .write::("Test".into()) + .write::(12) + .build(), + ) + .expect_cost(27805000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Name).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write::("TestToken".into()) + .build(), ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Decimals).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(12u8).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Symbol).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write::("Test".into()).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Decimals).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(12u8).build()); }); } @@ -2020,111 +1484,60 @@ fn clear_metadata() { 12, false )); - { - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::SetMetadata) - .write::("TestToken".into()) - .write::("Test".into()) - .write::(12) - .build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 27654000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::ClearMetadata).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 27710000u64, // 1 weight => 1 gas in mock - logs: vec![], - })) - ); - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Name).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write::("".into()).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Symbol).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write::("".into()).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::LocalAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Decimals).build(), - None, - &Context { - address: Account::LocalAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(0u8).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - }; + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::SetMetadata) + .write::("TestToken".into()) + .write::("Test".into()) + .write::(12) + .build(), + ) + .expect_cost(27805000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::ClearMetadata).build(), + ) + .expect_cost(28466000u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Name).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write::("".into()).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Symbol).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write::("".into()).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Decimals).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(0u8).build()); }); } @@ -2167,32 +1580,23 @@ fn permit_valid() { let message = Message::parse(&permit); let (rs, v) = sign(&message, &secret_key); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -2201,73 +1605,41 @@ fn permit_valid() { .write(H256::from(rs.r.b32())) .write(H256::from(rs.s.b32())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: vec![], - cost: 30831000u64, - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .expect_cost(31252000u64) + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(500)).build(), + )) + .execute_returns(vec![]); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(500u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(500u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1u8)).build()); }); } @@ -2317,32 +1689,23 @@ fn permit_valid_named_asset() { let message = Message::parse(&permit); let (rs, v) = sign(&message, &secret_key); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -2351,73 +1714,41 @@ fn permit_valid_named_asset() { .write(H256::from(rs.r.b32())) .write(H256::from(rs.s.b32())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: vec![], - cost: 30831000u64, - logs: LogsBuilder::new(Account::ForeignAssetId(0u128).into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .expect_cost(31252000u64) + .expect_log(log3( + Account::ForeignAssetId(0u128), + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(500)).build(), + )) + .execute_returns(vec![]); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(500u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(500u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1u8)).build()); }); } @@ -2460,32 +1791,23 @@ fn permit_invalid_nonce() { let message = Message::parse(&permit); let (rs, v) = sign(&message, &secret_key); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -2494,62 +1816,33 @@ fn permit_invalid_nonce() { .write(H256::from(rs.r.b32())) .write(H256::from(rs.s.b32())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"invalid permit" - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .execute_reverts(|output| output == b"invalid permit"); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); }); } @@ -2578,32 +1871,23 @@ fn permit_invalid_signature() { let value: U256 = 500u16.into(); let deadline: U256 = 0u8.into(); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -2612,62 +1896,33 @@ fn permit_invalid_signature() { .write(H256::random()) .write(H256::random()) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"invalid permit" - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .execute_reverts(|output| output == b"invalid permit"); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); }); } @@ -2712,32 +1967,23 @@ fn permit_invalid_deadline() { let message = Message::parse(&permit); let (rs, v) = sign(&message, &secret_key); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_matches!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -2746,62 +1992,33 @@ fn permit_invalid_deadline() { .write(H256::from(rs.r.b32())) .write(H256::from(rs.s.b32())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"permit expired" - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .execute_reverts(|output| output == b"permit expired"); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(0u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::ForeignAssetId(0u128).into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); }); } @@ -2962,10 +2179,11 @@ fn permit_valid_with_metamask_signed_data() { let r_real: [u8; 32] = r.try_into().unwrap(); let s_real: [u8; 32] = s.try_into().unwrap(); - assert_eq!( - precompiles().execute( - Account::ForeignAssetId(1u128).into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + precompiles() + .prepare_test( + Account::Charlie, + Account::ForeignAssetId(1u128), + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -2974,27 +2192,212 @@ fn permit_valid_with_metamask_signed_data() { .write(H256::from(r_real)) .write(H256::from(s_real)) .build(), - None, - &Context { - address: Account::ForeignAssetId(1u128).into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: vec![], - cost: 30831000u64, - logs: LogsBuilder::new(Account::ForeignAssetId(1u128).into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(1000)).build(), - ) - .build(), - })) - ); + ) + .expect_cost(31252000u64) + .expect_log(log3( + Account::ForeignAssetId(1u128), + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(1000)).build(), + )) + .execute_returns(vec![]); + }); +} + +#[test] +fn transfer_amount_overflow() { + ExtBuilder::default() + .with_balances(vec![(Account::Alice, 1000)]) + .build() + .execute_with(|| { + assert_ok!(ForeignAssets::force_create( + Origin::root(), + 0u128, + Account::Alice.into(), + true, + 1 + )); + assert_ok!(ForeignAssets::mint( + Origin::signed(Account::Alice), + 0u128, + Account::Alice.into(), + 1000 + )); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Transfer) + .write(Address(Account::Bob.into())) + .write(U256::from(u128::MAX) + 1) + .build(), + ) + .expect_cost(1756u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_reverts(|e| e == b"value too big for u128"); + + precompiles() + .prepare_test( + Account::Bob, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) + .write(Address(Account::Bob.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::BalanceOf) + .write(Address(Account::Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000)).build()); + }); +} + +#[test] +fn transfer_from_overflow() { + ExtBuilder::default() + .with_balances(vec![(Account::Alice, 1000)]) + .build() + .execute_with(|| { + assert_ok!(ForeignAssets::force_create( + Origin::root(), + 0u128, + Account::Alice.into(), + true, + 1 + )); + assert_ok!(ForeignAssets::mint( + Origin::signed(Account::Alice), + 0u128, + Account::Alice.into(), + 1000 + )); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(500)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Alice, + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(500)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Bob, // Bob is the one sending transferFrom! + Account::ForeignAssetId(0u128), + EvmDataWriter::new_with_selector(Action::TransferFrom) + .write(Address(Account::Alice.into())) + .write(Address(Account::Charlie.into())) + .write(U256::from(u128::MAX) + 1) + .build(), + ) + .expect_cost(1756u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_reverts(|e| e == b"value too big for u128"); + }); +} + +#[test] +fn mint_overflow() { + ExtBuilder::default() + .with_balances(vec![(Account::Alice, 1000), (Account::Bob, 2500)]) + .build() + .execute_with(|| { + assert_ok!(LocalAssets::force_create( + Origin::root(), + 0u128, + Account::Alice.into(), + true, + 1 + )); + assert_ok!(LocalAssets::force_set_metadata( + Origin::root(), + 0u128, + b"TestToken".to_vec(), + b"Test".to_vec(), + 12, + false + )); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Mint) + .write(Address(Account::Bob.into())) + .write(U256::from(u128::MAX) + 1) + .build(), + ) + .expect_cost(1756u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_reverts(|e| e == b"value too big for u128"); + }); +} + +#[test] +fn burn_overflow() { + ExtBuilder::default() + .with_balances(vec![(Account::Alice, 1000), (Account::Bob, 2500)]) + .build() + .execute_with(|| { + assert_ok!(LocalAssets::force_create( + Origin::root(), + 0u128, + Account::Alice.into(), + true, + 1 + )); + assert_ok!(LocalAssets::force_set_metadata( + Origin::root(), + 0u128, + b"TestToken".to_vec(), + b"Test".to_vec(), + 12, + false + )); + assert_ok!(LocalAssets::mint( + Origin::signed(Account::Alice), + 0u128, + Account::Alice.into(), + 1000 + )); + + precompiles() + .prepare_test( + Account::Alice, + Account::LocalAssetId(0u128), + EvmDataWriter::new_with_selector(Action::Burn) + .write(Address(Account::Alice.into())) + .write(U256::from(u128::MAX) + 1) + .build(), + ) + .expect_cost(1756u64) // 1 weight => 1 gas in mock + .expect_no_logs() + .execute_reverts(|e| e == b"value too big for u128"); }); } diff --git a/precompiles/author-mapping/AuthorMappingInterface.sol b/precompiles/author-mapping/AuthorMappingInterface.sol index 262c1a4a8e..502eeb2909 100644 --- a/precompiles/author-mapping/AuthorMappingInterface.sol +++ b/precompiles/author-mapping/AuthorMappingInterface.sol @@ -28,7 +28,7 @@ interface AuthorMapping { external; /** - * Clear existing associationg + * Clear existing association * Selector: 7354c91d * * @param nimbus_id The nimbusId to be cleared @@ -36,25 +36,17 @@ interface AuthorMapping { function clear_association(bytes32 nimbus_id) external; /** - * Register association and session keys - * Selector: 4f50accf + * Remove keys + * Selector: 3b6c4284 * - * @param author_id The new author id registered - * @param keys The session keys */ - function register_keys(bytes32 author_id, bytes32 keys) external; + function remove_keys() external; /** * Set keys - * Selector: a8259c85 + * Selector: bcb24ddc * - * @param old_author_id The old nimbusId to be replaced - * @param new_author_id The new nimbusId to be associated - * @param new_keys The new session keys + * @param keys The new session keys */ - function set_keys( - bytes32 old_author_id, - bytes32 new_author_id, - bytes32 new_keys - ) external; + function set_keys(bytes memory keys) external; } diff --git a/precompiles/author-mapping/Cargo.toml b/precompiles/author-mapping/Cargo.toml index c127fe48b1..6812e62864 100644 --- a/precompiles/author-mapping/Cargo.toml +++ b/precompiles/author-mapping/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "pallet-author-mapping-precompiles" +name = "pallet-evm-precompile-author-mapping" authors = [ "PureStake" ] description = "A Precompile to make pallet-author-mapping accessible to pallet-evm" edition = "2021" @@ -15,30 +15,34 @@ precompile-utils = { path = "../utils", default-features = false } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Nimbus -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = "0.99" hex-literal = "0.3.4" serde = "1.0.100" +# Moonbeam +pallet-author-mapping = { path = "../../pallets/author-mapping" } +precompile-utils = { path = "../utils", features = [ "testing" ] } + # Substrate -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-scheduler = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/precompiles/author-mapping/src/lib.rs b/precompiles/author-mapping/src/lib.rs index 8b50212ede..78cb750a3d 100644 --- a/precompiles/author-mapping/src/lib.rs +++ b/precompiles/author-mapping/src/lib.rs @@ -19,13 +19,11 @@ #![cfg_attr(not(feature = "std"), no_std)] #![feature(assert_matches)] -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{PrecompileHandle, PrecompileOutput}; use frame_support::dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}; -use nimbus_primitives::NimbusId; use pallet_author_mapping::Call as AuthorMappingCall; -use pallet_evm::AddressMapping; -use pallet_evm::Precompile; -use precompile_utils::{EvmDataReader, EvmResult, FunctionModifier, Gasometer, RuntimeHelper}; +use pallet_evm::{AddressMapping, Precompile}; +use precompile_utils::prelude::*; use sp_core::crypto::UncheckedFrom; use sp_core::H256; use sp_std::{fmt::Debug, marker::PhantomData}; @@ -35,14 +33,14 @@ mod mock; #[cfg(test)] mod tests; -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] pub enum Action { AddAssociation = "add_association(bytes32)", UpdateAssociation = "update_association(bytes32,bytes32)", ClearAssociation = "clear_association(bytes32)", - RegisterKeys = "register_keys(bytes32,bytes32)", - SetKeys = "set_keys(bytes32,bytes32,bytes32)", + RemoveKeys = "remove_keys()", + SetKeys = "set_keys(bytes)", } /// A precompile to wrap the functionality from pallet author mapping. @@ -56,29 +54,20 @@ where Runtime::Call: From>, Runtime::Hash: From, { - fn execute( - input: &[u8], //Reminder this is big-endian - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { log::trace!(target: "author-mapping-precompile", "In author mapping wrapper"); - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; + let selector = handle.read_selector()?; - let (mut input, selector) = EvmDataReader::new_with_selector(gasometer, input)?; - let input = &mut input; - - gasometer.check_function_modifier(context, is_static, FunctionModifier::NonPayable)?; + handle.check_function_modifier(FunctionModifier::NonPayable)?; match selector { // Dispatchables - Action::AddAssociation => Self::add_association(input, gasometer, context), - Action::UpdateAssociation => Self::update_association(input, gasometer, context), - Action::ClearAssociation => Self::clear_association(input, gasometer, context), - Action::RegisterKeys => Self::register_keys(input, gasometer, context), - Action::SetKeys => Self::set_keys(input, gasometer, context), + Action::AddAssociation => Self::add_association(handle), + Action::UpdateAssociation => Self::update_association(handle), + Action::ClearAssociation => Self::clear_association(handle), + Action::RemoveKeys => Self::remove_keys(handle), + Action::SetKeys => Self::set_keys(handle), } } } @@ -92,170 +81,93 @@ where Runtime::Hash: From, { // The dispatchable wrappers are next. They dispatch a Substrate inner Call. - fn add_association( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn add_association(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + // Bound check - input.expect_arguments(gasometer, 1)?; + input.expect_arguments(1)?; - let nimbus_id = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); + let nimbus_id = sp_core::sr25519::Public::unchecked_from(input.read::()?).into(); log::trace!( target: "author-mapping-precompile", "Associating author id {:?}", nimbus_id ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = AuthorMappingCall::::add_association { - author_id: nimbus_id, - }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = AuthorMappingCall::::add_association { nimbus_id }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn update_association( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn update_association(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 2)?; + input.expect_arguments(2)?; - let old_nimbus_id = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); - let new_nimbus_id = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); + let old_nimbus_id = sp_core::sr25519::Public::unchecked_from(input.read::()?).into(); + let new_nimbus_id = sp_core::sr25519::Public::unchecked_from(input.read::()?).into(); log::trace!( target: "author-mapping-precompile", "Updating author id {:?} for {:?}", old_nimbus_id, new_nimbus_id ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = AuthorMappingCall::::update_association { - old_author_id: old_nimbus_id, - new_author_id: new_nimbus_id, + old_nimbus_id, + new_nimbus_id, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn clear_association( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn clear_association(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 1)?; - let nimbus_id = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); + input.expect_arguments(1)?; + let nimbus_id = sp_core::sr25519::Public::unchecked_from(input.read::()?).into(); log::trace!( target: "author-mapping-precompile", "Clearing author id {:?}", nimbus_id ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = AuthorMappingCall::::clear_association { - author_id: nimbus_id, - }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = AuthorMappingCall::::clear_association { nimbus_id }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn register_keys( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - // Bound check - input.expect_arguments(gasometer, 2)?; - let nimbus_id = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); - let keys_as_nimbus_id: NimbusId = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); - let keys: ::Keys = keys_as_nimbus_id.into(); - + fn remove_keys(handle: &mut impl PrecompileHandle) -> EvmResult { log::trace!( target: "author-mapping-precompile", - "Adding full association with author id {:?} keys {:?}", nimbus_id, keys + "Removing keys" ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = AuthorMappingCall::::register_keys { - author_id: nimbus_id, - keys, - }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = AuthorMappingCall::::remove_keys {}; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn set_keys( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - input.expect_arguments(gasometer, 3)?; - let old_author_id = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); - let new_author_id = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); - let new_keys_as_nimbus_id: NimbusId = - sp_core::sr25519::Public::unchecked_from(input.read::(gasometer)?).into(); - let new_keys: ::Keys = - new_keys_as_nimbus_id.into(); - - log::trace!( - target: "author-mapping-precompile", - "Setting keys old author id {:?} new author id {:?} new keys {:?}", - old_author_id, new_author_id, new_keys - ); - - let origin = Runtime::AddressMapping::into_account_id(context.caller); + fn set_keys(handle: &mut impl PrecompileHandle) -> EvmResult { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = AuthorMappingCall::::set_keys { - old_author_id, - new_author_id, - new_keys, + // Taking all input minus selector (4 bytes) + keys: handle.input()[4..].to_vec(), }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } } diff --git a/precompiles/author-mapping/src/mock.rs b/precompiles/author-mapping/src/mock.rs index 6429e314ab..4a81bc9b02 100644 --- a/precompiles/author-mapping/src/mock.rs +++ b/precompiles/author-mapping/src/mock.rs @@ -27,14 +27,14 @@ use pallet_evm::{ }; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; -use sp_core::{H160, H256}; +use sp_core::{H160, H256, U256}; use sp_io; use sp_runtime::{ testing::Header, traits::{BlakeTwo256, IdentityLookup}, }; -pub type AccountId = TestAccount; +pub type AccountId = Account; pub type Balance = u128; pub type BlockNumber = u64; @@ -58,7 +58,7 @@ pub const PRECOMPILE_ADDRESS: u64 = 1; derive_more::Display, TypeInfo, )] -pub enum TestAccount { +pub enum Account { Alice, Bob, Charlie, @@ -66,14 +66,14 @@ pub enum TestAccount { Precompile, } -impl Default for TestAccount { +impl Default for Account { fn default() -> Self { Self::Bogus } } -impl AddressMapping for TestAccount { - fn into_account_id(h160_account: H160) -> TestAccount { +impl AddressMapping for Account { + fn into_account_id(h160_account: H160) -> Account { match h160_account { a if a == H160::repeat_byte(0xAA) => Self::Alice, a if a == H160::repeat_byte(0xBB) => Self::Bob, @@ -84,20 +84,20 @@ impl AddressMapping for TestAccount { } } -impl From for TestAccount { - fn from(x: H160) -> TestAccount { - TestAccount::into_account_id(x) +impl From for Account { + fn from(x: H160) -> Account { + Account::into_account_id(x) } } -impl From for H160 { - fn from(value: TestAccount) -> H160 { +impl From for H160 { + fn from(value: Account) -> H160 { match value { - TestAccount::Alice => H160::repeat_byte(0xAA), - TestAccount::Bob => H160::repeat_byte(0xBB), - TestAccount::Charlie => H160::repeat_byte(0xCC), - TestAccount::Precompile => H160::from_low_u64_be(PRECOMPILE_ADDRESS), - TestAccount::Bogus => Default::default(), + Account::Alice => H160::repeat_byte(0xAA), + Account::Bob => H160::repeat_byte(0xBB), + Account::Charlie => H160::repeat_byte(0xCC), + Account::Precompile => H160::from_low_u64_be(PRECOMPILE_ADDRESS), + Account::Bogus => Default::default(), } } } @@ -131,7 +131,7 @@ impl frame_system::Config for Runtime { type Call = Call; type Hash = H256; type Hashing = BlakeTwo256; - type AccountId = TestAccount; + type AccountId = Account; type Lookup = IdentityLookup; type Header = Header; type Event = Event; @@ -164,15 +164,16 @@ impl pallet_balances::Config for Runtime { } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub const PrecompilesValue: Precompiles = Precompiles(PhantomData); } impl pallet_evm::Config for Runtime { type FeeCalculator = (); type GasWeightMapping = (); - type CallOrigin = EnsureAddressRoot; - type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = TestAccount; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = Account; type Currency = Balances; type Event = Event; type Runner = pallet_evm::runner::stack::Runner; @@ -180,10 +181,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesValue = PrecompilesValue; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } parameter_types! { @@ -214,7 +214,7 @@ impl pallet_scheduler::Config for Runtime { type PalletsOrigin = OriginCaller; type Call = Call; type MaximumWeight = (); - type ScheduleOrigin = EnsureRoot; + type ScheduleOrigin = EnsureRoot; type MaxScheduledPerBlock = (); type WeightInfo = (); type OriginPrivilegeCmp = EqualPrivilegeOnly; // TODO : Simplest type, maybe there is better ? @@ -229,18 +229,9 @@ impl PrecompileSet for Precompiles where AuthorMappingWrapper: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == hash(PRECOMPILE_ADDRESS) => Some(AuthorMappingWrapper::::execute( - input, target_gas, context, is_static, - )), + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == hash(PRECOMPILE_ADDRESS) => Some(AuthorMappingWrapper::::execute(handle)), _ => None, } } @@ -295,51 +286,31 @@ pub(crate) fn events() -> Vec { .collect::>() } -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> fp_evm::Context { - fp_evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} - #[test] fn test_account_id_mapping_works() { // Bidirectional conversions for normal accounts assert_eq!( - TestAccount::Alice, - TestAccount::into_account_id(TestAccount::Alice.into()) - ); - assert_eq!( - TestAccount::Bob, - TestAccount::into_account_id(TestAccount::Bob.into()) + Account::Alice, + Account::into_account_id(Account::Alice.into()) ); + assert_eq!(Account::Bob, Account::into_account_id(Account::Bob.into())); assert_eq!( - TestAccount::Charlie, - TestAccount::into_account_id(TestAccount::Charlie.into()) + Account::Charlie, + Account::into_account_id(Account::Charlie.into()) ); // Bidirectional conversion between bogus and default H160 - assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::default()) - ); - assert_eq!(H160::default(), TestAccount::Bogus.into()); + assert_eq!(Account::Bogus, Account::into_account_id(H160::default())); + assert_eq!(H160::default(), Account::Bogus.into()); // All other H160s map to bogus + assert_eq!(Account::Bogus, Account::into_account_id(H160::zero())); assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::zero()) - ); - assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::repeat_byte(0x12)) + Account::Bogus, + Account::into_account_id(H160::repeat_byte(0x12)) ); assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::repeat_byte(0xFF)) + Account::Bogus, + Account::into_account_id(H160::repeat_byte(0xFF)) ); } diff --git a/precompiles/author-mapping/src/tests.rs b/precompiles/author-mapping/src/tests.rs index 7741a00d28..f20ac26fc8 100644 --- a/precompiles/author-mapping/src/tests.rs +++ b/precompiles/author-mapping/src/tests.rs @@ -16,21 +16,20 @@ use crate::{ mock::{ - events, evm_test_context, Call, ExtBuilder, Origin, Precompiles, PrecompilesValue, Runtime, - TestAccount::{Alice, Precompile}, + events, + Account::{Alice, Precompile}, + Call, ExtBuilder, Origin, Precompiles, PrecompilesValue, Runtime, }, Action, }; -use fp_evm::PrecompileFailure; use frame_support::{assert_ok, dispatch::Dispatchable}; use nimbus_primitives::NimbusId; -use pallet_author_mapping::{Call as AuthorMappingCall, Event as AuthorMappingEvent}; +use pallet_author_mapping::{keys_wrapper, Call as AuthorMappingCall, Event as AuthorMappingEvent}; use pallet_balances::Event as BalancesEvent; -use pallet_evm::{Call as EvmCall, Event as EvmEvent, PrecompileSet}; -use precompile_utils::EvmDataWriter; +use pallet_evm::{Call as EvmCall, Event as EvmEvent}; +use precompile_utils::{prelude::*, testing::*}; use sp_core::crypto::UncheckedFrom; use sp_core::U256; -use std::assert_matches::assert_matches; fn precompiles() -> Precompiles { PrecompilesValue::get() @@ -54,38 +53,18 @@ fn evm_call(input: Vec) -> EvmCall { fn selector_less_than_four_bytes() { ExtBuilder::default().build().execute_with(|| { // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - Precompile.into(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"tried to parse selector out of bounds", - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8]) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); }); } #[test] fn no_selector_exists_but_length_is_right() { ExtBuilder::default().build().execute_with(|| { - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - - assert_matches!( - precompiles().execute( - Precompile.into(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"unknown selector", - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8, 4u8]) + .execute_reverts(|output| output == b"unknown selector"); }); } @@ -94,8 +73,8 @@ fn selectors() { assert_eq!(Action::AddAssociation as u32, 0xaa5ac585); assert_eq!(Action::UpdateAssociation as u32, 0xd9cef879); assert_eq!(Action::ClearAssociation as u32, 0x7354c91d); - assert_eq!(Action::RegisterKeys as u32, 0x4f50accf); - assert_eq!(Action::SetKeys as u32, 0xa8259c85); + assert_eq!(Action::RemoveKeys as u32, 0x3b6c4284); + assert_eq!(Action::SetKeys as u32, 0xbcb24ddc); } #[test] @@ -123,8 +102,8 @@ fn add_association_works() { amount: 10 } .into(), - AuthorMappingEvent::AuthorRegistered { - author_id: expected_nimbus_id.clone(), + AuthorMappingEvent::KeysRegistered { + nimbus_id: expected_nimbus_id.clone(), account_id: Alice, keys: expected_nimbus_id.into(), } @@ -147,7 +126,7 @@ fn update_association_works() { sp_core::sr25519::Public::unchecked_from([2u8; 32]).into(); assert_ok!(Call::AuthorMapping(AuthorMappingCall::add_association { - author_id: first_nimbus_id.clone(), + nimbus_id: first_nimbus_id.clone(), }) .dispatch(Origin::signed(Alice))); @@ -168,14 +147,14 @@ fn update_association_works() { amount: 10 } .into(), - AuthorMappingEvent::AuthorRegistered { - author_id: first_nimbus_id.clone(), + AuthorMappingEvent::KeysRegistered { + nimbus_id: first_nimbus_id.clone(), account_id: Alice, keys: first_nimbus_id.into(), } .into(), - AuthorMappingEvent::AuthorRotated { - new_author_id: second_nimbus_id.clone(), + AuthorMappingEvent::KeysRotated { + new_nimbus_id: second_nimbus_id.clone(), account_id: Alice, new_keys: second_nimbus_id.into(), } @@ -195,7 +174,7 @@ fn clear_association_works() { let nimbus_id: NimbusId = sp_core::sr25519::Public::unchecked_from([1u8; 32]).into(); assert_ok!(Call::AuthorMapping(AuthorMappingCall::add_association { - author_id: nimbus_id.clone(), + nimbus_id: nimbus_id.clone(), }) .dispatch(Origin::signed(Alice))); @@ -215,8 +194,8 @@ fn clear_association_works() { amount: 10 } .into(), - AuthorMappingEvent::AuthorRegistered { - author_id: nimbus_id.clone(), + AuthorMappingEvent::KeysRegistered { + nimbus_id: nimbus_id.clone(), account_id: Alice, keys: nimbus_id.clone().into(), } @@ -226,8 +205,8 @@ fn clear_association_works() { amount: 10 } .into(), - AuthorMappingEvent::AuthorDeRegistered { - author_id: nimbus_id.clone(), + AuthorMappingEvent::KeysRemoved { + nimbus_id: nimbus_id.clone(), account_id: Alice, keys: nimbus_id.into(), } @@ -239,20 +218,19 @@ fn clear_association_works() { } #[test] -fn register_keys_works() { +fn remove_keys_works() { ExtBuilder::default() .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let expected_nimbus_id: NimbusId = - sp_core::sr25519::Public::unchecked_from([1u8; 32]).into(); - let first_vrf_key: NimbusId = - sp_core::sr25519::Public::unchecked_from([3u8; 32]).into(); + let nimbus_id: NimbusId = sp_core::sr25519::Public::unchecked_from([1u8; 32]).into(); - let input = EvmDataWriter::new_with_selector(Action::RegisterKeys) - .write(sp_core::H256::from([1u8; 32])) - .write(sp_core::H256::from([3u8; 32])) - .build(); + assert_ok!(Call::AuthorMapping(AuthorMappingCall::add_association { + nimbus_id: nimbus_id.clone(), + }) + .dispatch(Origin::signed(Alice))); + + let input = EvmDataWriter::new_with_selector(Action::RemoveKeys).build(); // Make sure the call goes through successfully assert_ok!(Call::Evm(evm_call(input)).dispatch(Origin::root())); @@ -266,10 +244,21 @@ fn register_keys_works() { amount: 10 } .into(), - AuthorMappingEvent::AuthorRegistered { - author_id: expected_nimbus_id.clone(), + AuthorMappingEvent::KeysRegistered { + nimbus_id: nimbus_id.clone(), account_id: Alice, - keys: first_vrf_key.into(), + keys: nimbus_id.clone().into(), + } + .into(), + BalancesEvent::Unreserved { + who: Alice, + amount: 10 + } + .into(), + AuthorMappingEvent::KeysRemoved { + nimbus_id: nimbus_id.clone(), + account_id: Alice, + keys: nimbus_id.into(), } .into(), EvmEvent::Executed(Precompile.into()).into(), @@ -293,14 +282,12 @@ fn set_keys_works() { let second_vrf_key: NimbusId = sp_core::sr25519::Public::unchecked_from([4u8; 32]).into(); - assert_ok!(Call::AuthorMapping(AuthorMappingCall::register_keys { - author_id: first_nimbus_id.clone(), - keys: first_vrf_key.clone(), + assert_ok!(Call::AuthorMapping(AuthorMappingCall::set_keys { + keys: keys_wrapper::(first_nimbus_id.clone(), first_vrf_key.clone()), }) .dispatch(Origin::signed(Alice))); let input = EvmDataWriter::new_with_selector(Action::SetKeys) - .write(sp_core::H256::from([1u8; 32])) .write(sp_core::H256::from([2u8; 32])) .write(sp_core::H256::from([4u8; 32])) .build(); @@ -317,14 +304,14 @@ fn set_keys_works() { amount: 10 } .into(), - AuthorMappingEvent::AuthorRegistered { - author_id: first_nimbus_id.clone(), + AuthorMappingEvent::KeysRegistered { + nimbus_id: first_nimbus_id.clone(), account_id: Alice, keys: first_vrf_key.into(), } .into(), - AuthorMappingEvent::AuthorRotated { - new_author_id: second_nimbus_id.clone(), + AuthorMappingEvent::KeysRotated { + new_nimbus_id: second_nimbus_id.clone(), account_id: Alice, new_keys: second_vrf_key.into(), } diff --git a/precompiles/balances-erc20/Cargo.toml b/precompiles/balances-erc20/Cargo.toml index 7c3132fd5b..3751c70e0d 100644 --- a/precompiles/balances-erc20/Cargo.toml +++ b/precompiles/balances-erc20/Cargo.toml @@ -16,17 +16,17 @@ precompile-utils = { path = "../utils", default-features = false } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = { version = "0.99" } @@ -35,9 +35,12 @@ libsecp256k1 = "0.7" serde = { version = "1.0.100" } sha3 = "0.8" -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } + +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/precompiles/balances-erc20/ERC20.sol b/precompiles/balances-erc20/ERC20.sol index 6b7838cf78..8bf365479c 100644 --- a/precompiles/balances-erc20/ERC20.sol +++ b/precompiles/balances-erc20/ERC20.sol @@ -1,4 +1,4 @@ -pragma solidity ^0.4.24; +pragma solidity ^0.8.0; /** * @title ERC20 interface @@ -130,7 +130,7 @@ interface WrappedNativeCurrency { * @dev Provide compatibility for contracts that expect wETH design. * Does nothing. * Selector: 2e1a7d4d - * @param Amount to withdraw/unwrap. + * @param value uint256 The amount to withdraw/unwrap. */ function withdraw(uint256 value) external; diff --git a/precompiles/balances-erc20/src/eip2612.rs b/precompiles/balances-erc20/src/eip2612.rs index f08899cd15..4a0184362d 100644 --- a/precompiles/balances-erc20/src/eip2612.rs +++ b/precompiles/balances-erc20/src/eip2612.rs @@ -90,29 +90,33 @@ where // Translated from // https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2ERC20.sol#L81 - pub(crate) fn permit( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - - let owner: H160 = input.read::
(gasometer)?.into(); - let spender: H160 = input.read::
(gasometer)?.into(); - let value: U256 = input.read(gasometer)?; - let deadline: U256 = input.read(gasometer)?; - let v: u8 = input.read(gasometer)?; - let r: H256 = input.read(gasometer)?; - let s: H256 = input.read(gasometer)?; + pub(crate) fn permit(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + + let mut input = EvmDataReader::new_skip_selector(handle.input())?; + let owner: H160 = input.read::
()?.into(); + let spender: H160 = input.read::
()?.into(); + let value: U256 = input.read()?; + let deadline: U256 = input.read()?; + let v: u8 = input.read()?; + let r: H256 = input.read()?; + let s: H256 = input.read()?; // pallet_timestamp is in ms while Ethereum use second timestamps. let timestamp: U256 = (pallet_timestamp::Pallet::::get()).into() / 1000; - ensure!(deadline >= timestamp, gasometer.revert("permit expired")); + ensure!(deadline >= timestamp, revert("permit expired")); let nonce = NoncesStorage::::get(owner); - let permit = Self::generate_permit(context.address, owner, spender, value, nonce, deadline); + let permit = Self::generate_permit( + handle.context().address, + owner, + spender, + value, + nonce, + deadline, + ); let mut sig = [0u8; 65]; sig[0..32].copy_from_slice(&r.as_bytes()); @@ -120,74 +124,59 @@ where sig[64] = v; let signer = sp_io::crypto::secp256k1_ecdsa_recover(&sig, &permit) - .map_err(|_| gasometer.revert("invalid permit"))?; + .map_err(|_| revert("invalid permit"))?; let signer = H160::from(H256::from_slice(keccak_256(&signer).as_slice())); ensure!( signer != H160::zero() && signer == owner, - gasometer.revert("invalid permit") + revert("invalid permit") ); NoncesStorage::::insert(owner, nonce + U256::one()); { - let amount = Erc20BalancesPrecompile::::u256_to_amount( - &mut gasometer.clone(), - value, - ) - .unwrap_or_else(|_| Bounded::max_value()); + let amount = + Erc20BalancesPrecompile::::u256_to_amount(value) + .unwrap_or_else(|_| Bounded::max_value()); let owner: Runtime::AccountId = Runtime::AddressMapping::into_account_id(owner); let spender: Runtime::AccountId = Runtime::AddressMapping::into_account_id(spender); ApprovesStorage::::insert(owner, spender, amount); } - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: vec![], - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_APPROVAL, - owner, - spender, - EvmDataWriter::new().write(value).build(), - ) - .build(), - }) + log3( + handle.context().address, + SELECTOR_LOG_APPROVAL, + owner, + spender, + EvmDataWriter::new().write(value).build(), + ) + .record(handle)?; + + Ok(succeed([])) } - pub(crate) fn nonces( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + pub(crate) fn nonces(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let owner: H160 = input.read::
(gasometer)?.into(); + let mut input = EvmDataReader::new_skip_selector(handle.input())?; + let owner: H160 = input.read::
()?.into(); let nonce = NoncesStorage::::get(owner); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(nonce).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(nonce).build())) } pub(crate) fn domain_separator( - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let domain_separator: H256 = Self::compute_domain_separator(context.address).into(); + let domain_separator: H256 = + Self::compute_domain_separator(handle.context().address).into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(domain_separator).build(), - logs: vec![], - }) + Ok(succeed( + EvmDataWriter::new().write(domain_separator).build(), + )) } } diff --git a/precompiles/balances-erc20/src/lib.rs b/precompiles/balances-erc20/src/lib.rs index 198a632b1a..6a5735052d 100644 --- a/precompiles/balances-erc20/src/lib.rs +++ b/precompiles/balances-erc20/src/lib.rs @@ -19,7 +19,7 @@ #![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(test, feature(assert_matches))] -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{Precompile, PrecompileHandle, PrecompileOutput}; use frame_support::{ dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, sp_runtime::traits::{Bounded, CheckedSub, StaticLookup}, @@ -31,16 +31,12 @@ use pallet_balances::pallet::{ Instance1, Instance10, Instance11, Instance12, Instance13, Instance14, Instance15, Instance16, Instance2, Instance3, Instance4, Instance5, Instance6, Instance7, Instance8, Instance9, }; -use pallet_evm::{AddressMapping, Precompile}; -use precompile_utils::{ - keccak256, Address, Bytes, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, - Gasometer, LogsBuilder, RuntimeHelper, -}; +use pallet_evm::AddressMapping; +use precompile_utils::prelude::*; use sp_core::{H160, U256}; use sp_std::{ convert::{TryFrom, TryInto}, marker::PhantomData, - vec, }; mod eip2612; @@ -158,7 +154,7 @@ pub type NoncesStorage = StorageMap< ValueQuery, >; -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] pub enum Action { TotalSupply = "totalSupply()", @@ -213,53 +209,37 @@ where BalanceOf: TryFrom + Into, ::Moment: Into, { - fn execute( - input: &[u8], //Reminder this is big-endian - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; - - let (mut input, selector) = EvmDataReader::new_with_selector(gasometer, input) - .unwrap_or_else(|_| (EvmDataReader::new(input), Action::Deposit)); - let input = &mut input; - - gasometer.check_function_modifier( - context, - is_static, - match selector { - Action::Approve | Action::Transfer | Action::TransferFrom | Action::Withdraw => { - FunctionModifier::NonPayable - } - Action::Deposit => FunctionModifier::Payable, - _ => FunctionModifier::View, - }, - )?; + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector().unwrap_or_else(|_| Action::Deposit); + + handle.check_function_modifier(match selector { + Action::Approve | Action::Transfer | Action::TransferFrom | Action::Withdraw => { + FunctionModifier::NonPayable + } + Action::Deposit => FunctionModifier::Payable, + _ => FunctionModifier::View, + })?; match selector { - Action::TotalSupply => Self::total_supply(input, gasometer), - Action::BalanceOf => Self::balance_of(input, gasometer), - Action::Allowance => Self::allowance(input, gasometer), - Action::Approve => Self::approve(input, gasometer, context), - Action::Transfer => Self::transfer(input, gasometer, context), - Action::TransferFrom => Self::transfer_from(input, gasometer, context), - Action::Name => Self::name(input, gasometer, context), - Action::Symbol => Self::symbol(input, gasometer, context), - Action::Decimals => Self::decimals(input, gasometer, context), - Action::Deposit => Self::deposit(input, gasometer, context), - Action::Withdraw => Self::withdraw(input, gasometer, context), + Action::TotalSupply => Self::total_supply(handle), + Action::BalanceOf => Self::balance_of(handle), + Action::Allowance => Self::allowance(handle), + Action::Approve => Self::approve(handle), + Action::Transfer => Self::transfer(handle), + Action::TransferFrom => Self::transfer_from(handle), + Action::Name => Self::name(), + Action::Symbol => Self::symbol(), + Action::Decimals => Self::decimals(), + Action::Deposit => Self::deposit(handle), + Action::Withdraw => Self::withdraw(handle), Action::Eip2612Permit => { - eip2612::Eip2612::::permit(input, gasometer, context) + eip2612::Eip2612::::permit(handle) } Action::Eip2612Nonces => { - eip2612::Eip2612::::nonces(input, gasometer) + eip2612::Eip2612::::nonces(handle) } Action::Eip2612DomainSeparator => { - eip2612::Eip2612::::domain_separator( - gasometer, context, - ) + eip2612::Eip2612::::domain_separator(handle) } } } @@ -276,37 +256,28 @@ where BalanceOf: TryFrom + Into, ::Moment: Into, { - fn total_supply( - input: &EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn total_supply(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Parse input. - input.expect_arguments(gasometer, 0)?; + let input = handle.read_input()?; + input.expect_arguments(0)?; // Fetch info. let amount: U256 = pallet_balances::Pallet::::total_issuance().into(); // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(amount).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(amount).build())) } - fn balance_of( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn balance_of(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Read input. - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let owner: H160 = input.read::
(gasometer)?.into(); + let owner: H160 = input.read::
()?.into(); // Fetch info. let amount: U256 = { @@ -315,25 +286,18 @@ where }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(amount).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(amount).build())) } - fn allowance( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn allowance(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // Read input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let owner: H160 = input.read::
(gasometer)?.into(); - let spender: H160 = input.read::
(gasometer)?.into(); + let owner: H160 = input.read::
()?.into(); + let spender: H160 = input.read::
()?.into(); // Fetch info. let amount: U256 = { @@ -346,304 +310,246 @@ where }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(amount).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(amount).build())) } - fn approve( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_write_gas_cost())?; - gasometer.record_log_costs_manual(3, 32)?; + fn approve(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_write_gas_cost())?; + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let spender: H160 = input.read::
(gasometer)?.into(); - let amount: U256 = input.read(gasometer)?; + let spender: H160 = input.read::
()?.into(); + let amount: U256 = input.read()?; // Write into storage. { let caller: Runtime::AccountId = - Runtime::AddressMapping::into_account_id(context.caller); + Runtime::AddressMapping::into_account_id(handle.context().caller); let spender: Runtime::AccountId = Runtime::AddressMapping::into_account_id(spender); // Amount saturate if too high. - let amount = Self::u256_to_amount(&mut gasometer.clone(), amount) - .unwrap_or_else(|_| Bounded::max_value()); + let amount = Self::u256_to_amount(amount).unwrap_or_else(|_| Bounded::max_value()); ApprovesStorage::::insert(caller, spender, amount); } + log3( + handle.context().address, + SELECTOR_LOG_APPROVAL, + handle.context().caller, + spender, + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_APPROVAL, - context.caller, - spender, - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } - fn transfer( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - gasometer.record_log_costs_manual(3, 32)?; + fn transfer(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let to: H160 = input.read::
(gasometer)?.into(); - let amount: U256 = input.read(gasometer)?; + let to: H160 = input.read::
()?.into(); + let amount: U256 = input.read()?; // Build call with origin. { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let to = Runtime::AddressMapping::into_account_id(to); - let amount = Self::u256_to_amount(gasometer, amount)?; + let amount = Self::u256_to_amount(amount)?; // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(origin).into(), pallet_balances::Call::::transfer { dest: Runtime::Lookup::unlookup(to), value: amount, }, - gasometer, )?; } + log3( + handle.context().address, + SELECTOR_LOG_TRANSFER, + handle.context().caller, + to, + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_TRANSFER, - context.caller, - to, - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } - fn transfer_from( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - gasometer.record_cost(RuntimeHelper::::db_write_gas_cost())?; - gasometer.record_log_costs_manual(3, 32)?; + fn transfer_from(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_write_gas_cost())?; + handle.record_log_costs_manual(3, 32)?; // Parse input. - input.expect_arguments(gasometer, 3)?; - let from: H160 = input.read::
(gasometer)?.into(); - let to: H160 = input.read::
(gasometer)?.into(); - let amount: U256 = input.read(gasometer)?; + let mut input = handle.read_input()?; + input.expect_arguments(3)?; + let from: H160 = input.read::
()?.into(); + let to: H160 = input.read::
()?.into(); + let amount: U256 = input.read()?; { let caller: Runtime::AccountId = - Runtime::AddressMapping::into_account_id(context.caller); + Runtime::AddressMapping::into_account_id(handle.context().caller); let from: Runtime::AccountId = Runtime::AddressMapping::into_account_id(from); let to: Runtime::AccountId = Runtime::AddressMapping::into_account_id(to); - let amount = Self::u256_to_amount(gasometer, amount)?; + let amount = Self::u256_to_amount(amount)?; // If caller is "from", it can spend as much as it wants. if caller != from { ApprovesStorage::::mutate(from.clone(), caller, |entry| { // Get current value, exit if None. - let value = entry.ok_or(gasometer.revert("spender not allowed"))?; + let value = entry.ok_or(revert("spender not allowed"))?; // Remove "amount" from allowed, exit if underflow. let new_value = value .checked_sub(&amount) - .ok_or_else(|| gasometer.revert("trying to spend more than allowed"))?; + .ok_or_else(|| revert("trying to spend more than allowed"))?; // Update value. *entry = Some(new_value); - Ok(()) + EvmResult::Ok(()) })?; } // Build call with origin. Here origin is the "from"/owner field. // Dispatch call (if enough gas). RuntimeHelper::::try_dispatch( + handle, Some(from).into(), pallet_balances::Call::::transfer { dest: Runtime::Lookup::unlookup(to), value: amount, }, - gasometer, )?; } + log3( + handle.context().address, + SELECTOR_LOG_TRANSFER, + from, + to, + EvmDataWriter::new().write(amount).build(), + ) + .record(handle)?; + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(true).build(), - logs: LogsBuilder::new(context.address) - .log3( - SELECTOR_LOG_TRANSFER, - from, - to, - EvmDataWriter::new().write(amount).build(), - ) - .build(), - }) + Ok(succeed(EvmDataWriter::new().write(true).build())) } - fn name( - _: &mut EvmDataReader, - gasometer: &mut Gasometer, - _: &Context, - ) -> EvmResult { + fn name() -> EvmResult { // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new() + Ok(succeed( + EvmDataWriter::new() .write::(Metadata::name().into()) .build(), - logs: Default::default(), - }) + )) } - fn symbol( - _: &mut EvmDataReader, - gasometer: &mut Gasometer, - _: &Context, - ) -> EvmResult { + fn symbol() -> EvmResult { // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new() + Ok(succeed( + EvmDataWriter::new() .write::(Metadata::symbol().into()) .build(), - logs: Default::default(), - }) + )) } - fn decimals( - _: &mut EvmDataReader, - gasometer: &mut Gasometer, - _: &Context, - ) -> EvmResult { + fn decimals() -> EvmResult { // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(Metadata::decimals()).build(), - logs: Default::default(), - }) + Ok(succeed( + EvmDataWriter::new().write(Metadata::decimals()).build(), + )) } - fn deposit( - _: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn deposit(handle: &mut impl PrecompileHandle) -> EvmResult { // Deposit only makes sense for the native currency. if !Metadata::is_native_currency() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } - let caller: Runtime::AccountId = Runtime::AddressMapping::into_account_id(context.caller); - let precompile = Runtime::AddressMapping::into_account_id(context.address); - let amount = Self::u256_to_amount(gasometer, context.apparent_value)?; + let caller: Runtime::AccountId = + Runtime::AddressMapping::into_account_id(handle.context().caller); + let precompile = Runtime::AddressMapping::into_account_id(handle.context().address); + let amount = Self::u256_to_amount(handle.context().apparent_value)?; if amount.into() == U256::from(0u32) { - return Err(gasometer.revert("deposited amount must be non-zero")); + return Err(revert("deposited amount must be non-zero")); } - gasometer.record_log_costs_manual(2, 32)?; + handle.record_log_costs_manual(2, 32)?; // Send back funds received by the precompile. RuntimeHelper::::try_dispatch( + handle, Some(precompile).into(), pallet_balances::Call::::transfer { dest: Runtime::Lookup::unlookup(caller), value: amount, }, - gasometer, )?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: LogsBuilder::new(context.address) - .log2( - SELECTOR_LOG_DEPOSIT, - context.caller, - EvmDataWriter::new().write(context.apparent_value).build(), - ) + log2( + handle.context().address, + SELECTOR_LOG_DEPOSIT, + handle.context().caller, + EvmDataWriter::new() + .write(handle.context().apparent_value) .build(), - }) + ) + .record(handle)?; + + Ok(succeed([])) } - fn withdraw( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn withdraw(handle: &mut impl PrecompileHandle) -> EvmResult { // Withdraw only makes sense for the native currency. if !Metadata::is_native_currency() { - return Err(gasometer.revert("unknown selector")); + return Err(revert("unknown selector")); } - gasometer.record_log_costs_manual(2, 32)?; + handle.record_log_costs_manual(2, 32)?; - let withdrawn_amount: U256 = input.read(gasometer)?; + let mut input = handle.read_input()?; + let withdrawn_amount: U256 = input.read()?; let account_amount: U256 = { let owner: Runtime::AccountId = - Runtime::AddressMapping::into_account_id(context.caller); + Runtime::AddressMapping::into_account_id(handle.context().caller); pallet_balances::Pallet::::usable_balance(&owner).into() }; if withdrawn_amount > account_amount { - return Err(gasometer.revert("trying to withdraw more than owned")); + return Err(revert("trying to withdraw more than owned")); } - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: LogsBuilder::new(context.address) - .log2( - SELECTOR_LOG_WITHDRAWAL, - context.caller, - EvmDataWriter::new().write(withdrawn_amount).build(), - ) - .build(), - }) + log2( + handle.context().address, + SELECTOR_LOG_WITHDRAWAL, + handle.context().caller, + EvmDataWriter::new().write(withdrawn_amount).build(), + ) + .record(handle)?; + + Ok(succeed([])) } - fn u256_to_amount( - gasometer: &mut Gasometer, - value: U256, - ) -> EvmResult> { + fn u256_to_amount(value: U256) -> EvmResult> { value .try_into() - .map_err(|_| gasometer.revert("amount is too large for provided balance type")) + .map_err(|_| revert("amount is too large for provided balance type")) } } diff --git a/precompiles/balances-erc20/src/mock.rs b/precompiles/balances-erc20/src/mock.rs index 05ee6b833c..c691d21e90 100644 --- a/precompiles/balances-erc20/src/mock.rs +++ b/precompiles/balances-erc20/src/mock.rs @@ -23,7 +23,7 @@ use frame_support::{construct_runtime, parameter_types, traits::Everything}; use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot, PrecompileSet}; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; -use sp_core::{H160, H256}; +use sp_core::{H160, H256, U256}; use sp_runtime::{ testing::Header, traits::{BlakeTwo256, IdentityLookup}, @@ -172,7 +172,8 @@ impl pallet_balances::Config for Runtime { } parameter_types! { - pub const PrecompilesValue: Precompiles = Precompiles(PhantomData); + pub BlockGasLimit: U256 = U256::max_value(); + pub const PrecompilesValue: Precompiles = Precompiles(PhantomData); } impl pallet_evm::Config for Runtime { @@ -188,10 +189,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesValue = PrecompilesValue; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } // Configure a mock runtime to test the pallet. @@ -241,20 +241,12 @@ impl PrecompileSet for Precompiles where Erc20BalancesPrecompile: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == hash(PRECOMPILE_ADDRESS) => { - Some(Erc20BalancesPrecompile::::execute( - input, target_gas, context, is_static, - )) - } + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == hash(PRECOMPILE_ADDRESS) => Some(Erc20BalancesPrecompile::< + R, + NativeErc20Metadata, + >::execute(handle)), _ => None, } } diff --git a/precompiles/balances-erc20/src/tests.rs b/precompiles/balances-erc20/src/tests.rs index 95cb8de5fb..a8dde5b48d 100644 --- a/precompiles/balances-erc20/src/tests.rs +++ b/precompiles/balances-erc20/src/tests.rs @@ -14,14 +14,16 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use std::{assert_matches::assert_matches, str::from_utf8}; +use std::str::from_utf8; -use crate::{eip2612::Eip2612, mock::*, *}; +use crate::{ + eip2612::Eip2612, + mock::{Account::*, *}, + *, +}; -use fp_evm::{Context, PrecompileFailure}; use libsecp256k1::{sign, Message, SecretKey}; -use pallet_evm::PrecompileSet; -use precompile_utils::{Bytes, EvmDataWriter, LogsBuilder}; +use precompile_utils::testing::*; use sha3::{Digest, Keccak256}; use sp_core::{H256, U256}; @@ -73,25 +75,15 @@ fn get_total_supply() { .with_balances(vec![(Account::Alice, 1000), (Account::Bob, 2500)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TotalSupply).build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(3500u64)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::TotalSupply).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(3500u64)).build()); }); } @@ -101,27 +93,17 @@ fn get_balances_known_user() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000u64)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000u64)).build()); }); } @@ -131,27 +113,17 @@ fn get_balances_unknown_user() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u64)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u64)).build()); }); } @@ -161,35 +133,24 @@ fn approve() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Approve) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Approve) .write(Address(Account::Bob.into())) .write(U256::from(500)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 1756u64, - logs: LogsBuilder::new(Account::Precompile.into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build(), - })) - ); + ) + .expect_cost(1756) + .expect_log(log3( + Precompile, + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(500)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -199,58 +160,37 @@ fn approve_saturating() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Approve) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Approve) .write(Address(Account::Bob.into())) .write(U256::MAX) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 1756u64, - logs: LogsBuilder::new(Account::Precompile.into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::MAX).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .expect_cost(1756u64) + .expect_log(log3( + Precompile, + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::MAX).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(u128::MAX)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(u128::MAX)).build()); }); } @@ -260,43 +200,29 @@ fn check_allowance_existing() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Approve) - .write(Address(Account::Bob.into())) - .write(U256::from(500)) - .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(500)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(500u64)).build(), - cost: 0u64, - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(500u64)).build()); }); } @@ -306,28 +232,18 @@ fn check_allowance_not_existing() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u64)).build(), - cost: 0u64, - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u64)).build()); }); } @@ -337,79 +253,48 @@ fn transfer() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Transfer) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Transfer) .write(Address(Account::Bob.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 159201756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::Precompile.into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(160279756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Precompile, + SELECTOR_LOG_TRANSFER, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(600)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(600)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); }); } @@ -419,26 +304,21 @@ fn transfer_not_enough_funds() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_matches!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Transfer) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Transfer) .write(Address(Account::Bob.into())) .write(U256::from(1400)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output: str, .. })) - if from_utf8(&str).unwrap() + ) + .execute_reverts(|output| { + from_utf8(&output) + .unwrap() .contains("Dispatched call failed with error: DispatchErrorWithPostInfo") - && from_utf8(&str).unwrap().contains("InsufficientBalance") - ); + && from_utf8(&output).unwrap().contains("InsufficientBalance") + }); }); } @@ -448,118 +328,73 @@ fn transfer_from() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Approve) - .write(Address(Account::Bob.into())) - .write(U256::from(500)) - .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferFrom) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(500)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Bob, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::TransferFrom) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Bob.into(), // Bob is the one sending transferFrom! - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 159201756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::Precompile.into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(160279756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Precompile, + SELECTOR_LOG_TRANSFER, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(600)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(600)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(100u64)).build(), - cost: 0u64, - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(100u64)).build()); }); } @@ -569,40 +404,28 @@ fn transfer_from_above_allowance() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Approve) - .write(Address(Account::Bob.into())) - .write(U256::from(300)) - .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ); - - assert_matches!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferFrom) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Approve) + .write(Address(Account::Bob.into())) + .write(U256::from(300)) + .build(), + ) + .execute_some(); + + precompiles() + .prepare_test( + Account::Bob, // Bob is the one sending transferFrom! + Account::Precompile, + EvmDataWriter::new_with_selector(Action::TransferFrom) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Bob.into(), // Bob is the one sending transferFrom! - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"trying to spend more than allowed", - ); + ) + .execute_reverts(|output| output == b"trying to spend more than allowed"); }); } @@ -612,81 +435,49 @@ fn transfer_from_self() { .with_balances(vec![(Account::Alice, 1000)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferFrom) + precompiles() + .prepare_test( + Account::Alice, // Alice sending transferFrom herself, no need for allowance. + Account::Precompile, + EvmDataWriter::new_with_selector(Action::TransferFrom) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .write(U256::from(400)) .build(), - None, - &Context { - address: Account::Precompile.into(), - // Alice sending transferFrom herself, no need for allowance. - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 159201756u64, // 1 weight => 1 gas in mock - logs: LogsBuilder::new(Account::Precompile.into()) - .log3( - SELECTOR_LOG_TRANSFER, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(400)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(160279756u64) // 1 weight => 1 gas in mock + .expect_log(log3( + Precompile, + SELECTOR_LOG_TRANSFER, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(400)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(600)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(600)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400)).build()); }); } @@ -696,27 +487,19 @@ fn get_metadata_name() { .with_balances(vec![(Account::Alice, 1000), (Account::Bob, 2500)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Name).build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new() + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Name).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() .write::("Mock token".into()) .build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ); }); } @@ -726,25 +509,15 @@ fn get_metadata_symbol() { .with_balances(vec![(Account::Alice, 1000), (Account::Bob, 2500)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Symbol).build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write::("MOCK".into()).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Symbol).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write::("MOCK".into()).build()); }); } @@ -754,25 +527,15 @@ fn get_metadata_decimals() { .with_balances(vec![(Account::Alice, 1000), (Account::Bob, 2500)]) .build() .execute_with(|| { - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Decimals).build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(18u8).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Decimals).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(18u8).build()); }); } @@ -782,27 +545,17 @@ fn deposit(data: Vec) { .build() .execute_with(|| { // Check precompile balance is 0. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Precompile.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); // Deposit // We need to call using EVM pallet so we can check the EVM correctly sends the amount @@ -844,65 +597,41 @@ fn deposit(data: Vec) { amount: 500 }), // Log is correctly emited. - Event::Evm(pallet_evm::Event::Log( - LogsBuilder::new(Account::Precompile.into()) - .log2( - SELECTOR_LOG_DEPOSIT, - Account::Alice, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build()[0] - .clone() - )), + Event::Evm(pallet_evm::Event::Log(log2( + Precompile, + SELECTOR_LOG_DEPOSIT, + Account::Alice, + EvmDataWriter::new().write(U256::from(500)).build(), + ))), Event::Evm(pallet_evm::Event::Executed(Account::Precompile.into())), ] ); // Check precompile balance is still 0. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Precompile.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); // Check Alice balance is still 1000. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000)).build()); }); } @@ -928,27 +657,17 @@ fn deposit_zero() { .build() .execute_with(|| { // Check precompile balance is 0. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Precompile.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); // Deposit // We need to call using EVM pallet so we can check the EVM correctly sends the amount @@ -975,50 +694,30 @@ fn deposit_zero() { ); // Check precompile balance is still 0. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Precompile.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); // Check Alice balance is still 1000. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000)).build()); }); } @@ -1029,79 +728,48 @@ fn withdraw() { .build() .execute_with(|| { // Check precompile balance is 0. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Precompile.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); // Withdraw - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Withdraw) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Withdraw) .write(U256::from(500)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().build(), - cost: 1381, - logs: LogsBuilder::new(Account::Precompile.into()) - .log2( - SELECTOR_LOG_WITHDRAWAL, - Account::Alice, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build(), - })) - ); + ) + .expect_cost(1381) + .expect_log(log2( + Precompile, + SELECTOR_LOG_WITHDRAWAL, + Account::Alice, + EvmDataWriter::new().write(U256::from(500)).build(), + )) + .execute_returns(vec![]); // Check Alice balance is still 1000. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000)).build()); }); } @@ -1112,69 +780,41 @@ fn withdraw_more_than_owned() { .build() .execute_with(|| { // Check precompile balance is 0. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Precompile.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0)).build()); // Withdraw - assert_matches!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Withdraw) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Withdraw) .write(U256::from(1001)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output: str, .. })) - if str == b"trying to withdraw more than owned" - ); + ) + .execute_reverts(|output| output == b"trying to withdraw more than owned"); // Check Alice balance is still 1000. - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::BalanceOf) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::BalanceOf) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000)).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000)).build()); }); } @@ -1202,32 +842,23 @@ fn permit_valid() { let message = Message::parse(&permit); let (rs, v) = sign(&message, &secret_key); - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, // can be anyone + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -1236,73 +867,41 @@ fn permit_valid() { .write(H256::from(rs.r.b32())) .write(H256::from(rs.s.b32())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: vec![], - cost: 0u64, - logs: LogsBuilder::new(Account::Precompile.into()) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(500)).build(), - ) - .build(), - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_log(log3( + Precompile, + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(value)).build(), + )) + .execute_returns(vec![]); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(500u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(500u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1u8)).build()); }); } @@ -1330,32 +929,23 @@ fn permit_invalid_nonce() { let message = Message::parse(&permit); let (rs, v) = sign(&message, &secret_key); - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_matches!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, // can be anyone + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -1364,62 +954,33 @@ fn permit_invalid_nonce() { .write(H256::from(rs.r.b32())) .write(H256::from(rs.s.b32())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"invalid permit" - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .execute_reverts(|output| output == b"invalid permit"); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); }); } @@ -1434,96 +995,58 @@ fn permit_invalid_signature() { let value: U256 = 500u16.into(); let deadline: U256 = 0u8.into(); - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_matches!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, // can be anyone + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) .write(deadline) .write(0u8) - .write(H256::random()) - .write(H256::random()) + .write(H256::repeat_byte(0x11)) + .write(H256::repeat_byte(0x11)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"invalid permit" - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .execute_reverts(|output| output == b"invalid permit"); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); }); } @@ -1553,32 +1076,23 @@ fn permit_invalid_deadline() { let message = Message::parse(&permit); let (rs, v) = sign(&message, &secret_key); - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_matches!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Account::Charlie, // can be anyone + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -1587,62 +1101,33 @@ fn permit_invalid_deadline() { .write(H256::from(rs.r.b32())) .write(H256::from(rs.s.b32())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"permit expired" - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Allowance) + ) + .execute_reverts(|output| output == b"permit expired"); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Allowance) .write(Address(Account::Alice.into())) .write(Address(Account::Bob.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u16)).build(), - cost: 0u64, - logs: vec![], - })) - ); - - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Nonces) + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u16)).build()); + + precompiles() + .prepare_test( + Account::Alice, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Nonces) .write(Address(Account::Alice.into())) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(0u8)).build(), - cost: 0u64, - logs: vec![], - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); }); } @@ -1788,10 +1273,11 @@ fn permit_valid_with_metamask_signed_data() { let r_real: [u8; 32] = r.try_into().unwrap(); let s_real: [u8; 32] = s.try_into().unwrap(); - assert_eq!( - precompiles().execute( - Account::Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Eip2612Permit) + precompiles() + .prepare_test( + Account::Charlie, // can be anyone, + Account::Precompile, + EvmDataWriter::new_with_selector(Action::Eip2612Permit) .write(Address(owner)) .write(Address(spender)) .write(value) @@ -1800,27 +1286,15 @@ fn permit_valid_with_metamask_signed_data() { .write(H256::from(r_real)) .write(H256::from(s_real)) .build(), - None, - &Context { - address: Account::Precompile.into(), - caller: Account::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: vec![], - cost: 0u64, - logs: LogsBuilder::new(Account::Precompile.into(),) - .log3( - SELECTOR_LOG_APPROVAL, - Account::Alice, - Account::Bob, - EvmDataWriter::new().write(U256::from(1000)).build(), - ) - .build(), - })) - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_log(log3( + Precompile, + SELECTOR_LOG_APPROVAL, + Account::Alice, + Account::Bob, + EvmDataWriter::new().write(U256::from(1000)).build(), + )) + .execute_returns(vec![]); }); } diff --git a/precompiles/batch/Batch.sol b/precompiles/batch/Batch.sol new file mode 100644 index 0000000000..98a92576e2 --- /dev/null +++ b/precompiles/batch/Batch.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +/// @title Batch precompile +/// Allows to perform multiple calls throught one call to the precompile. +/// Can be used by EOA to do multiple calls in a single transaction. +/// Address: 0x0000000000000000000000000000000000000808 +interface Batch { + /// @dev Batch multiple calls into a single transaction. + /// All calls are performed from the address calling this precompile. + /// + /// In case of one subcall reverting following subcalls will still be attempted. + /// + /// @param to List of addresses to call. + /// @param value List of values for each subcall. If array is shorter than "to" then additional + /// calls will be performed with a value of 0. + /// @param call_data Call data for each `to` address. If array is shorter than "to" then + /// additional calls will be performed with an empty call data. + /// @param gas_limit Gas limit for each `to` address. Use 0 to forward all the remaining gas. + /// If array is shorter than "to" then the remaining gas available will be used. + /// Selector: 79df4b9c + function batchSome( + address[] memory to, + uint256[] memory value, + bytes[] memory call_data, + uint64[] memory gas_limit + ) external; + + /// @dev Batch multiple calls into a single transaction. + /// All calls are performed from the address calling this precompile. + /// + /// In case of one subcall reverting, no more subcalls will be executed but + /// the batch transaction will succeed. Use batchAll to revert on any subcall revert. + /// + /// @param to List of addresses to call. + /// @param value List of values for each subcall. If array is shorter than "to" then additional + /// calls will be performed with a value of 0. + /// @param call_data Call data for each `to` address. If array is shorter than "to" then + /// additional calls will be performed with an empty call data. + /// @param gas_limit Gas limit for each `to` address. Use 0 to forward all the remaining gas. + /// If array is shorter than "to" then the remaining gas available will be used. + /// Selector: cf0491c7 + function batchSomeUntilFailure( + address[] memory to, + uint256[] memory value, + bytes[] memory call_data, + uint64[] memory gas_limit + ) external; + + /// @dev Batch multiple calls into a single transaction. + /// All calls are performed from the address calling this precompile. + /// + /// In case of one subcall reverting, the entire batch will revert. + /// + /// @param to List of addresses to call. + /// @param value List of values for each subcall. If array is shorter than "to" then additional + /// calls will be performed with a value of 0. + /// @param call_data Call data for each `to` address. If array is shorter than "to" then + /// additional calls will be performed with an empty call data. + /// @param gas_limit Gas limit for each `to` address. Use 0 to forward all the remaining gas. + /// If array is shorter than "to" then the remaining gas available will be used. + /// Selector: 96e292b8 + function batchAll( + address[] memory to, + uint256[] memory value, + bytes[] memory call_data, + uint64[] memory gas_limit + ) external; + + /// Emitted when a subcall succeeds. + event SubcallSucceeded(uint256 index); + + /// Emitted when a subcall fails. + event SubcallFailed(uint256 index); +} diff --git a/precompiles/batch/Cargo.toml b/precompiles/batch/Cargo.toml new file mode 100644 index 0000000000..a0a0bf004a --- /dev/null +++ b/precompiles/batch/Cargo.toml @@ -0,0 +1,55 @@ +[package] +name = "pallet-evm-precompile-batch" +authors = [ "PureStake" ] +description = "A Precompile to batch multiple calls." +edition = "2021" +version = "0.1.0" + +[dependencies] +log = "0.4" +num_enum = { version = "0.5.3", default-features = false } +paste = "1.0.6" +slices = "0.2.0" + +# Moonbeam +precompile-utils = { path = "../utils", default-features = false } + +# Substrate +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } + +# Frontier +evm = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false, features = [ "with-codec" ] } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } + +[dev-dependencies] +derive_more = { version = "0.99" } +hex-literal = "0.3.4" +serde = { version = "1.0.100" } +sha3 = "0.8" + +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +precompile-utils = { path = "../utils", features = [ "testing" ] } +scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } + +[features] +default = [ "std" ] +std = [ + "codec/std", + "fp-evm/std", + "frame-support/std", + "frame-system/std", + "pallet-evm/std", + "precompile-utils/std", + "sp-core/std", + "sp-io/std", + "sp-std/std", +] diff --git a/precompiles/batch/src/lib.rs b/precompiles/batch/src/lib.rs new file mode 100644 index 0000000000..39a514a036 --- /dev/null +++ b/precompiles/batch/src/lib.rs @@ -0,0 +1,248 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Precompile to interact with pallet_balances instances using the ERC20 interface standard. + +#![cfg_attr(not(feature = "std"), no_std)] + +use evm::{ExitError, ExitReason}; +use fp_evm::{ + Context, Log, Precompile, PrecompileFailure, PrecompileHandle, PrecompileOutput, Transfer, +}; +use precompile_utils::{costs::call_cost, prelude::*}; +use sp_core::{H160, U256}; +use sp_std::{iter::repeat, marker::PhantomData, vec, vec::Vec}; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +#[generate_function_selector] +#[derive(Copy, Clone, Debug, PartialEq)] +pub enum Action { + BatchSome = "batchSome(address[],uint256[],bytes[],uint64[])", + BatchSomeUntilFailure = "batchSomeUntilFailure(address[],uint256[],bytes[],uint64[])", + BatchAll = "batchAll(address[],uint256[],bytes[],uint64[])", +} + +pub const LOG_SUBCALL_SUCCEEDED: [u8; 32] = keccak256!("SubcallSucceeded(uint256)"); +pub const LOG_SUBCALL_FAILED: [u8; 32] = keccak256!("SubcallFailed(uint256)"); + +pub fn log_subcall_succeeded(address: impl Into, index: usize) -> Log { + log1( + address, + LOG_SUBCALL_SUCCEEDED, + EvmDataWriter::new().write(U256::from(index)).build(), + ) +} + +pub fn log_subcall_failed(address: impl Into, index: usize) -> Log { + log1( + address, + LOG_SUBCALL_FAILED, + EvmDataWriter::new().write(U256::from(index)).build(), + ) +} + +/// Batch precompile. +#[derive(Debug, Clone)] +pub struct BatchPrecompile(PhantomData); + +impl Precompile for BatchPrecompile +where + Runtime: pallet_evm::Config, +{ + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector()?; + + // No funds are transfered to the precompile address. + // Transfers will directly be made on the behalf of the user by the precompile. + handle.check_function_modifier(FunctionModifier::NonPayable)?; + + Self::batch(handle, selector) + } +} + +impl BatchPrecompile +where + Runtime: pallet_evm::Config, +{ + fn batch(handle: &mut impl PrecompileHandle, action: Action) -> EvmResult { + let mut input = handle.read_input()?; + let addresses: Vec
= input.read()?; + let values: Vec = input.read()?; + let calls_data: Vec = input.read()?; + let gas_limits: Vec = input.read()?; + + let addresses = addresses.into_iter().enumerate(); + let values = values.into_iter().map(|x| Some(x)).chain(repeat(None)); + let calls_data = calls_data.into_iter().map(|x| Some(x)).chain(repeat(None)); + let gas_limits = gas_limits.into_iter().map(|x| + // x = 0 => forward all remaining gas + if x == 0 { + None + } else { + Some(x) + } + ).chain(repeat(None)); + + // Cost of batch log. (doesn't change when index changes) + let log_cost = log_subcall_failed(handle.code_address(), 0) + .compute_cost() + .map_err(|_| revert("failed to compute log cost"))?; + + for ((i, address), (value, (call_data, gas_limit))) in + addresses.zip(values.zip(calls_data.zip(gas_limits))) + { + let address = address.0; + let value = value.unwrap_or(U256::zero()); + let call_data = call_data.unwrap_or(Bytes(vec![])).0; + + let sub_context = Context { + caller: handle.context().caller, + address: address.clone(), + apparent_value: value, + }; + + let transfer = if value.is_zero() { + None + } else { + Some(Transfer { + source: handle.context().caller, + target: address.clone(), + value, + }) + }; + + // We reserve enough gas to emit a final log and perform the subcall itself. + // If not enough gas we stop there according to Action strategy. + let remaining_gas = handle.remaining_gas(); + + let forwarded_gas = match (remaining_gas.checked_sub(log_cost), action) { + (Some(remaining), _) => remaining, + (None, Action::BatchAll) => { + return Err(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + }) + } + (None, _) => { + return Ok(succeed([])); + } + }; + + // Cost of the call itself that the batch precompile must pay. + let call_cost = call_cost(value, ::config()); + + let forwarded_gas = match forwarded_gas.checked_sub(call_cost) { + Some(remaining) => remaining, + None => { + let log = log_subcall_failed(handle.code_address(), i); + handle.record_log_costs(&[&log])?; + log.record(handle)?; + + match action { + Action::BatchAll => { + return Err(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + }) + } + Action::BatchSomeUntilFailure => return Ok(succeed([])), + Action::BatchSome => continue, + } + } + }; + + // If there is a provided gas limit we ensure there is enough gas remaining. + let forwarded_gas = match gas_limit { + None => forwarded_gas, // provide all gas if no gas limit, + Some(limit) => { + if limit > forwarded_gas { + let log = log_subcall_failed(handle.code_address(), i); + handle.record_log_costs(&[&log])?; + log.record(handle)?; + + match action { + Action::BatchAll => { + return Err(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + }) + } + Action::BatchSomeUntilFailure => return Ok(succeed([])), + Action::BatchSome => continue, + } + } + limit + } + }; + + let (reason, output) = handle.call( + address, + transfer, + call_data, + Some(forwarded_gas), + false, + &sub_context, + ); + + // Logs + // We reserved enough gas so this should not OOG. + match reason { + ExitReason::Revert(_) | ExitReason::Error(_) => { + let log = log_subcall_failed(handle.code_address(), i); + handle.record_log_costs(&[&log])?; + log.record(handle)? + } + ExitReason::Succeed(_) => { + let log = log_subcall_succeeded(handle.code_address(), i); + handle.record_log_costs(&[&log])?; + log.record(handle)? + } + _ => (), + } + + // How to proceed + match (action, reason) { + // _: Fatal is always fatal + (_, ExitReason::Fatal(exit_status)) => { + return Err(PrecompileFailure::Fatal { exit_status }) + } + + // BatchAll : Reverts and errors are immediatly forwarded. + (Action::BatchAll, ExitReason::Revert(exit_status)) => { + return Err(PrecompileFailure::Revert { + exit_status, + output, + }) + } + (Action::BatchAll, ExitReason::Error(exit_status)) => { + return Err(PrecompileFailure::Error { exit_status }) + } + + // BatchSomeUntilFailure : Reverts and errors prevent subsequent subcalls to + // be executed but the precompile still succeed. + (Action::BatchSomeUntilFailure, ExitReason::Revert(_) | ExitReason::Error(_)) => { + return Ok(succeed([])) + } + + // Success or ignored revert/error. + (_, _) => (), + } + } + + Ok(succeed([])) + } +} diff --git a/precompiles/batch/src/mock.rs b/precompiles/batch/src/mock.rs new file mode 100644 index 0000000000..954459d69d --- /dev/null +++ b/precompiles/batch/src/mock.rs @@ -0,0 +1,252 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Test utilities +use super::*; + +use codec::{Decode, Encode, MaxEncodedLen}; +use frame_support::traits::Everything; +use frame_support::{construct_runtime, pallet_prelude::*, parameter_types}; +use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot}; +use precompile_utils::precompile_set::*; +use serde::{Deserialize, Serialize}; +use sp_core::H160; +use sp_core::H256; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, + Perbill, +}; + +pub type AccountId = Account; +pub type Balance = u128; +pub type BlockNumber = u64; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; + +construct_runtime!( + pub enum Runtime where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Evm: pallet_evm::{Pallet, Call, Storage, Event}, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, + } +); + +// FRom https://github.com/PureStake/moonbeam/pull/518. Merge to common once is merged +#[derive( + Eq, + PartialEq, + Ord, + PartialOrd, + Clone, + Encode, + Decode, + Debug, + MaxEncodedLen, + Serialize, + Deserialize, + derive_more::Display, + scale_info::TypeInfo, +)] +pub enum Account { + Alice, + Bob, + Charlie, + David, + Bogus, + Precompile, + Revert, +} + +impl Default for Account { + fn default() -> Self { + Self::Bogus + } +} + +impl Into for Account { + fn into(self) -> H160 { + match self { + Account::Alice => H160::repeat_byte(0xAA), + Account::Bob => H160::repeat_byte(0xBB), + Account::Charlie => H160::repeat_byte(0xCC), + Account::David => H160::repeat_byte(0xDD), + Account::Bogus => H160::repeat_byte(0xFF), + Account::Precompile => H160::from_low_u64_be(1), + Account::Revert => H160::from_low_u64_be(2), + } + } +} + +impl AddressMapping for Account { + fn into_account_id(h160_account: H160) -> Account { + match h160_account { + a if a == H160::repeat_byte(0xAA) => Self::Alice, + a if a == H160::repeat_byte(0xBB) => Self::Bob, + a if a == H160::repeat_byte(0xCC) => Self::Charlie, + a if a == H160::repeat_byte(0xDD) => Self::David, + a if a == H160::from_low_u64_be(1) => Self::Precompile, + a if a == H160::from_low_u64_be(2) => Self::Revert, + _ => Self::Bogus, + } + } +} + +impl From for Account { + fn from(x: H160) -> Account { + Account::into_account_id(x) + } +} + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub const MaximumBlockWeight: Weight = 1024; + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = BlockNumber; + type Call = Call; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); +} + +pub type TestPrecompiles = PrecompileSetBuilder< + R, + ( + PrecompileAt, BatchPrecompile, LimitRecursionTo<1>>, + RevertPrecompile>, + ), +>; + +parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); + pub PrecompilesValue: TestPrecompiles = TestPrecompiles::new(); +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = (); + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type Event = Event; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = TestPrecompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = BlockGasLimit; + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +pub(crate) struct ExtBuilder { + // endowed accounts with balances + balances: Vec<(AccountId, Balance)>, +} + +impl Default for ExtBuilder { + fn default() -> ExtBuilder { + ExtBuilder { balances: vec![] } + } +} + +impl ExtBuilder { + pub(crate) fn with_balances(mut self, balances: Vec<(AccountId, Balance)>) -> Self { + self.balances = balances; + self + } + + pub(crate) fn build(self) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::default() + .build_storage::() + .expect("Frame system builds valid default genesis config"); + + pallet_balances::GenesisConfig:: { + balances: self.balances, + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| { + System::set_block_number(1); + pallet_evm::Pallet::::create_account( + Account::Revert.into(), + hex_literal::hex!("1460006000fd").to_vec(), + ); + }); + ext + } +} + +pub fn balance(account: impl Into) -> Balance { + pallet_balances::Pallet::::usable_balance(account.into()) +} diff --git a/precompiles/batch/src/tests.rs b/precompiles/batch/src/tests.rs new file mode 100644 index 0000000000..5c5841814b --- /dev/null +++ b/precompiles/batch/src/tests.rs @@ -0,0 +1,965 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use crate::mock::{ + balance, + Account::{Alice, Bob, Charlie, David, Precompile, Revert}, + Call, ExtBuilder, Origin, PrecompilesValue, Runtime, TestPrecompiles, +}; +use crate::{ + log_subcall_failed, log_subcall_succeeded, Action, LOG_SUBCALL_FAILED, LOG_SUBCALL_SUCCEEDED, +}; +use evm::ExitReason; +use fp_evm::{ExitError, ExitRevert, ExitSucceed}; +use frame_support::{assert_ok, dispatch::Dispatchable}; +use pallet_evm::Call as EvmCall; +use precompile_utils::{costs::call_cost, prelude::*, testing::*}; +use sp_core::{H160, H256, U256}; + +fn precompiles() -> TestPrecompiles { + PrecompilesValue::get() +} + +fn evm_call(from: impl Into, input: Vec) -> EvmCall { + EvmCall::call { + source: from.into(), + target: Precompile.into(), + input, + value: U256::zero(), // No value sent in EVM + gas_limit: u64::max_value(), + max_fee_per_gas: 0.into(), + max_priority_fee_per_gas: Some(U256::zero()), + nonce: None, // Use the next nonce + access_list: Vec::new(), + } +} + +fn costs() -> (u64, u64) { + let return_log_cost = log_subcall_failed(Precompile, 0).compute_cost().unwrap(); + let call_cost = + return_log_cost + call_cost(U256::one(), ::config()); + (return_log_cost, call_cost) +} + +#[test] +fn selectors() { + assert_eq!(Action::BatchSome as u32, 0x79df4b9c); + assert_eq!(Action::BatchSomeUntilFailure as u32, 0xcf0491c7); + assert_eq!(Action::BatchAll as u32, 0x96e292b8); + assert_eq!( + LOG_SUBCALL_FAILED, + hex_literal::hex!("dbc5d06f4f877f959b1ff12d2161cdd693fa8e442ee53f1790b2804b24881f05") + ); + assert_eq!( + LOG_SUBCALL_SUCCEEDED, + hex_literal::hex!("bf855484633929c3d6688eb3caf8eff910fb4bef030a8d7dbc9390d26759714d") + ); +} + +#[test] +fn batch_some_empty() { + ExtBuilder::default().build().execute_with(|| { + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::BatchSome) + .write::>(vec![]) + .write::>(vec![]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + ) + .with_subcall_handle(|Subcall { .. }| panic!("there should be no subcall")) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_some_until_failure_empty() { + ExtBuilder::default().build().execute_with(|| { + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::BatchSomeUntilFailure) + .write::>(vec![]) + .write::>(vec![]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + ) + .with_subcall_handle(|Subcall { .. }| panic!("there should be no subcall")) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_all_empty() { + ExtBuilder::default().build().execute_with(|| { + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::BatchAll) + .write::>(vec![]) + .write::>(vec![]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + ) + .with_subcall_handle(|Subcall { .. }| panic!("there should be no subcall")) + .execute_returns(Vec::new()) + }) +} + +fn batch_returns( + precompiles: &TestPrecompiles, + action: Action, +) -> PrecompilesTester> { + let mut counter = 0; + + let (_, total_call_cost) = costs(); + + precompiles + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(action) + .write(vec![Address(Bob.into()), Address(Charlie.into())]) + .write(vec![U256::from(1u8), U256::from(2u8)]) + .write(vec![ + Bytes::from(b"one".as_slice()), + Bytes::from(b"two".as_slice()), + ]) + .write::>(vec![]) + .build(), + ) + .with_target_gas(Some(100_000)) + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas, + is_static, + context, + } = subcall; + + // Called from the precompile caller. + assert_eq!(context.caller, Alice.into()); + assert_eq!(is_static, false); + + match address { + a if a == Bob.into() => { + assert_eq!(counter, 0, "this is the first call"); + counter += 1; + + assert_eq!( + target_gas, + Some(100_000 - total_call_cost), + "batch forward all gas" + ); + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Bob.into()); + assert_eq!(transfer.value, 1u8.into()); + + assert_eq!(context.address, Bob.into()); + assert_eq!(context.apparent_value, 1u8.into()); + + assert_eq!(&input, b"one"); + + SubcallOutput { + reason: ExitReason::Succeed(ExitSucceed::Returned), + output: Vec::new(), + cost: 13, + logs: vec![log1(Bob, H256::repeat_byte(0x11), vec![])], + } + } + a if a == Charlie.into() => { + assert_eq!(counter, 1, "this is the second call"); + counter += 1; + + assert_eq!( + target_gas, + Some(100_000 - 13 - total_call_cost * 2), + "batch forward all gas" + ); + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Charlie.into()); + assert_eq!(transfer.value, 2u8.into()); + + assert_eq!(context.address, Charlie.into()); + assert_eq!(context.apparent_value, 2u8.into()); + + assert_eq!(&input, b"two"); + + SubcallOutput { + reason: ExitReason::Succeed(ExitSucceed::Returned), + output: Vec::new(), + cost: 17, + logs: vec![log1(Charlie, H256::repeat_byte(0x22), vec![])], + } + } + _ => panic!("unexpected subcall"), + } + }) + .expect_cost(13 + 17 + total_call_cost * 2) +} + +#[test] +fn batch_some_returns() { + ExtBuilder::default().build().execute_with(|| { + batch_returns(&precompiles(), Action::BatchSome) + .expect_log(log1(Bob, H256::repeat_byte(0x11), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 0)) + .expect_log(log1(Charlie, H256::repeat_byte(0x22), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 1)) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_some_until_failure_returns() { + ExtBuilder::default().build().execute_with(|| { + batch_returns(&precompiles(), Action::BatchSomeUntilFailure) + .expect_log(log1(Bob, H256::repeat_byte(0x11), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 0)) + .expect_log(log1(Charlie, H256::repeat_byte(0x22), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 1)) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_all_returns() { + ExtBuilder::default().build().execute_with(|| { + batch_returns(&precompiles(), Action::BatchAll) + .expect_log(log1(Bob, H256::repeat_byte(0x11), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 0)) + .expect_log(log1(Charlie, H256::repeat_byte(0x22), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 1)) + .execute_returns(Vec::new()) + }) +} + +fn batch_out_of_gas( + precompiles: &TestPrecompiles, + action: Action, +) -> PrecompilesTester> { + let (_, total_call_cost) = costs(); + + precompiles + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(action) + .write(vec![Address(Bob.into())]) + .write(vec![U256::from(1u8)]) + .write(vec![Bytes::from(b"one".as_slice())]) + .write::>(vec![]) + .build(), + ) + .with_target_gas(Some(50_000)) + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas, + is_static, + context, + } = subcall; + + // Called from the precompile caller. + assert_eq!(context.caller, Alice.into()); + assert_eq!(is_static, false); + + match address { + a if a == Bob.into() => { + assert_eq!( + target_gas, + Some(50_000 - total_call_cost), + "batch forward all gas" + ); + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Bob.into()); + assert_eq!(transfer.value, 1u8.into()); + + assert_eq!(context.address, Bob.into()); + assert_eq!(context.apparent_value, 1u8.into()); + + assert_eq!(&input, b"one"); + + SubcallOutput { + reason: ExitReason::Error(ExitError::OutOfGas), + output: Vec::new(), + cost: 11_000, + logs: vec![], + } + } + _ => panic!("unexpected subcall"), + } + }) +} + +#[test] +fn batch_some_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_out_of_gas(&precompiles(), Action::BatchSome) + .expect_log(log_subcall_failed(Precompile, 0)) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_some_until_failure_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_out_of_gas(&precompiles(), Action::BatchSomeUntilFailure) + .expect_log(log_subcall_failed(Precompile, 0)) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_all_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_out_of_gas(&precompiles(), Action::BatchAll).execute_error(ExitError::OutOfGas) + }) +} + +fn batch_incomplete( + precompiles: &TestPrecompiles, + action: Action, +) -> PrecompilesTester> { + let mut counter = 0; + + let (_, total_call_cost) = costs(); + + precompiles + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(action) + .write(vec![ + Address(Bob.into()), + Address(Charlie.into()), + Address(Alice.into()), + ]) + .write(vec![U256::from(1u8), U256::from(2u8), U256::from(3u8)]) + .write(vec![Bytes::from(b"one".as_slice())]) + .write::>(vec![]) + .build(), + ) + .with_target_gas(Some(300_000)) + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas, + is_static, + context, + } = subcall; + + // Called from the precompile caller. + assert_eq!(context.caller, Alice.into()); + assert_eq!(is_static, false); + + match address { + a if a == Bob.into() => { + assert_eq!(counter, 0, "this is the first call"); + counter += 1; + + assert_eq!( + target_gas, + Some(300_000 - total_call_cost), + "batch forward all gas" + ); + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Bob.into()); + assert_eq!(transfer.value, 1u8.into()); + + assert_eq!(context.address, Bob.into()); + assert_eq!(context.apparent_value, 1u8.into()); + + assert_eq!(&input, b"one"); + + SubcallOutput { + reason: ExitReason::Succeed(ExitSucceed::Returned), + output: Vec::new(), + cost: 13, + logs: vec![log1(Bob, H256::repeat_byte(0x11), vec![])], + } + } + a if a == Charlie.into() => { + assert_eq!(counter, 1, "this is the second call"); + counter += 1; + + assert_eq!( + target_gas, + Some(300_000 - 13 - total_call_cost * 2), + "batch forward all gas" + ); + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Charlie.into()); + assert_eq!(transfer.value, 2u8.into()); + + assert_eq!(context.address, Charlie.into()); + assert_eq!(context.apparent_value, 2u8.into()); + + assert_eq!(&input, b""); + + SubcallOutput { + reason: ExitReason::Revert(ExitRevert::Reverted), + output: b"Revert message".to_vec(), + cost: 17, + logs: vec![], + } + } + a if a == Alice.into() => { + assert_eq!(counter, 2, "this is the third call"); + counter += 1; + + assert_eq!( + target_gas, + Some(300_000 - 13 - 17 - total_call_cost * 3), + "batch forward all gas" + ); + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Alice.into()); + assert_eq!(transfer.value, 3u8.into()); + + assert_eq!(context.address, Alice.into()); + assert_eq!(context.apparent_value, 3u8.into()); + + assert_eq!(&input, b""); + + SubcallOutput { + reason: ExitReason::Succeed(ExitSucceed::Returned), + output: Vec::new(), + cost: 19, + logs: vec![log1(Alice, H256::repeat_byte(0x33), vec![])], + } + } + _ => panic!("unexpected subcall"), + } + }) +} + +#[test] +fn batch_some_incomplete() { + ExtBuilder::default().build().execute_with(|| { + let (_, total_call_cost) = costs(); + + batch_incomplete(&precompiles(), Action::BatchSome) + .expect_log(log1(Bob, H256::repeat_byte(0x11), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 0)) + .expect_log(log_subcall_failed(Precompile, 1)) + .expect_log(log1(Alice, H256::repeat_byte(0x33), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 2)) + .expect_cost(13 + 17 + 19 + total_call_cost * 3) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_some_until_failure_incomplete() { + ExtBuilder::default().build().execute_with(|| { + let (_, total_call_cost) = costs(); + + batch_incomplete(&precompiles(), Action::BatchSomeUntilFailure) + .expect_log(log1(Bob, H256::repeat_byte(0x11), vec![])) + .expect_log(log_subcall_succeeded(Precompile, 0)) + .expect_log(log_subcall_failed(Precompile, 1)) + .expect_cost(13 + 17 + total_call_cost * 2) + .execute_returns(Vec::new()) + }) +} + +#[test] +fn batch_all_incomplete() { + ExtBuilder::default().build().execute_with(|| { + batch_incomplete(&precompiles(), Action::BatchAll) + .execute_reverts(|output| output == b"Revert message") + }) +} + +fn batch_log_out_of_gas( + precompiles: &TestPrecompiles, + action: Action, +) -> PrecompilesTester> { + let (log_cost, _) = costs(); + + precompiles + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(action) + .write(vec![Address(Bob.into())]) + .write(vec![U256::from(1u8)]) + .write(vec![Bytes::from(b"one".as_slice())]) + .write::>(vec![]) + .build(), + ) + .with_target_gas(Some(log_cost - 1)) + .with_subcall_handle(move |_subcall| panic!("there shouldn't be any subcalls")) +} + +#[test] +fn batch_all_log_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_log_out_of_gas(&precompiles(), Action::BatchAll).execute_error(ExitError::OutOfGas); + }) +} + +#[test] +fn batch_some_log_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_log_out_of_gas(&precompiles(), Action::BatchSome) + .expect_no_logs() + .execute_returns(Vec::new()); + }) +} + +#[test] +fn batch_some_until_failure_log_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_log_out_of_gas(&precompiles(), Action::BatchSomeUntilFailure) + .expect_no_logs() + .execute_returns(Vec::new()); + }) +} + +fn batch_call_out_of_gas( + precompiles: &TestPrecompiles, + action: Action, +) -> PrecompilesTester> { + let (_, total_call_cost) = costs(); + + precompiles + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(action) + .write(vec![Address(Bob.into())]) + .write(vec![U256::from(1u8)]) + .write(vec![Bytes::from(b"one".as_slice())]) + .write::>(vec![]) + .build(), + ) + .with_target_gas(Some(total_call_cost - 1)) + .with_subcall_handle(move |_subcall| panic!("there shouldn't be any subcalls")) +} + +#[test] +fn batch_all_call_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_call_out_of_gas(&precompiles(), Action::BatchAll).execute_error(ExitError::OutOfGas); + }) +} + +#[test] +fn batch_some_call_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_call_out_of_gas(&precompiles(), Action::BatchSome) + .expect_log(log_subcall_failed(Precompile, 0)) + .execute_returns(Vec::new()); + }) +} + +#[test] +fn batch_some_until_failure_call_out_of_gas() { + ExtBuilder::default().build().execute_with(|| { + batch_call_out_of_gas(&precompiles(), Action::BatchSomeUntilFailure) + .expect_log(log_subcall_failed(Precompile, 0)) + .execute_returns(Vec::new()); + }) +} + +fn batch_gas_limit( + precompiles: &TestPrecompiles, + action: Action, +) -> PrecompilesTester> { + let (_, total_call_cost) = costs(); + + precompiles + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(action) + .write(vec![Address(Bob.into())]) + .write(vec![U256::from(1u8)]) + .write(vec![Bytes::from(b"one".as_slice())]) + .write(vec![50_000 - total_call_cost + 1]) + .build(), + ) + .with_target_gas(Some(50_000)) + .with_subcall_handle(move |_subcall| panic!("there shouldn't be any subcalls")) +} + +#[test] +fn batch_all_gas_limit() { + ExtBuilder::default().build().execute_with(|| { + batch_gas_limit(&precompiles(), Action::BatchAll).execute_error(ExitError::OutOfGas); + }) +} + +#[test] +fn batch_some_gas_limit() { + ExtBuilder::default().build().execute_with(|| { + let (return_log_cost, _) = costs(); + + batch_gas_limit(&precompiles(), Action::BatchSome) + .expect_log(log_subcall_failed(Precompile, 0)) + .expect_cost(return_log_cost) + .execute_returns(Vec::new()); + }) +} + +#[test] +fn batch_some_until_failure_gas_limit() { + ExtBuilder::default().build().execute_with(|| { + batch_gas_limit(&precompiles(), Action::BatchSomeUntilFailure) + .expect_log(log_subcall_failed(Precompile, 0)) + .execute_returns(Vec::new()); + }) +} + +#[test] +fn evm_batch_some_transfers_enough() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchSome) + .write(vec![Address(Bob.into()), Address(Charlie.into()),]) + .write(vec![U256::from(1_000u16), U256::from(2_000u16)]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + }) +} + +#[test] +fn evm_batch_some_until_failure_transfers_enough() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchSomeUntilFailure) + .write(vec![Address(Bob.into()), Address(Charlie.into()),]) + .write(vec![U256::from(1_000u16), U256::from(2_000u16)]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + }) +} + +#[test] +fn evm_batch_all_transfers_enough() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchAll) + .write(vec![Address(Bob.into()), Address(Charlie.into()),]) + .write(vec![U256::from(1_000u16), U256::from(2_000u16)]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + + assert_eq!(balance(Bob), 1_000); + assert_eq!(balance(Charlie), 2_000); + }) +} + +#[test] +fn evm_batch_some_transfers_too_much() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchSome) + .write(vec![ + Address(Bob.into()), + Address(Charlie.into()), + Address(David.into()), + ]) + .write(vec![ + U256::from(9_000u16), + U256::from(2_000u16), + U256::from(500u16) + ]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + + assert_eq!(balance(Alice), 500); // gasprice = 0 + assert_eq!(balance(Bob), 9_000); + assert_eq!(balance(Charlie), 0); + assert_eq!(balance(David), 500); + }) +} + +#[test] +fn evm_batch_some_until_failure_transfers_too_much() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchSomeUntilFailure) + .write(vec![ + Address(Bob.into()), + Address(Charlie.into()), + Address(David.into()), + ]) + .write(vec![ + U256::from(9_000u16), + U256::from(2_000u16), + U256::from(500u16) + ]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + + assert_eq!(balance(Alice), 1_000); // gasprice = 0 + assert_eq!(balance(Bob), 9_000); + assert_eq!(balance(Charlie), 0); + assert_eq!(balance(David), 0); + }) +} + +#[test] +fn evm_batch_all_transfers_too_much() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchAll) + .write(vec![ + Address(Bob.into()), + Address(Charlie.into()), + Address(David.into()), + ]) + .write(vec![ + U256::from(9_000u16), + U256::from(2_000u16), + U256::from(500u16) + ]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + + assert_eq!(balance(Alice), 10_000); // gasprice = 0 + assert_eq!(balance(Bob), 0); + assert_eq!(balance(Charlie), 0); + assert_eq!(balance(David), 0); + }) +} + +#[test] +fn evm_batch_some_contract_revert() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchSome) + .write(vec![ + Address(Bob.into()), + Address(Revert.into()), + Address(David.into()), + ]) + .write(vec![ + U256::from(1_000u16), + U256::from(2_000), + U256::from(3_000u16) + ]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + + assert_eq!(balance(Alice), 6_000); // gasprice = 0 + assert_eq!(balance(Bob), 1_000); + assert_eq!(balance(Revert), 0); + assert_eq!(balance(David), 3_000); + }) +} + +#[test] +fn evm_batch_some_until_failure_contract_revert() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchSomeUntilFailure) + .write(vec![ + Address(Bob.into()), + Address(Revert.into()), + Address(David.into()), + ]) + .write(vec![ + U256::from(1_000u16), + U256::from(2_000), + U256::from(3_000u16) + ]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + + assert_eq!(balance(Alice), 9_000); // gasprice = 0 + assert_eq!(balance(Bob), 1_000); + assert_eq!(balance(Revert), 0); + assert_eq!(balance(David), 0); + }) +} + +#[test] +fn evm_batch_all_contract_revert() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + assert_ok!(Call::Evm(evm_call( + Alice, + EvmDataWriter::new_with_selector(Action::BatchAll) + .write(vec![ + Address(Bob.into()), + Address(Revert.into()), + Address(David.into()), + ]) + .write(vec![ + U256::from(1_000u16), + U256::from(2_000), + U256::from(3_000u16) + ]) + .write::>(vec![]) + .write::>(vec![]) + .build() + )) + .dispatch(Origin::root())); + + assert_eq!(balance(Alice), 10_000); // gasprice = 0 + assert_eq!(balance(Bob), 0); + assert_eq!(balance(Revert), 0); + assert_eq!(balance(David), 0); + }) +} + +#[test] +fn evm_batch_recursion_under_limit() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + // Mock sets the recursion limit to 2, and we 2 nested batch. + // Thus it succeeds. + + let input = EvmDataWriter::new_with_selector(Action::BatchAll) + .write::>(vec![Address(Precompile.into())]) + .write::>(vec![]) + .write::>(vec![Bytes( + EvmDataWriter::new_with_selector(Action::BatchAll) + .write::>(vec![Address(Bob.into())]) + .write::>(vec![1000_u32.into()]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + )]) + .write::>(vec![]) + .build(); + + assert_ok!(Call::Evm(evm_call(Alice, input)).dispatch(Origin::root())); + + assert_eq!(balance(Alice), 9_000); // gasprice = 0 + assert_eq!(balance(Bob), 1_000); + }) +} + +#[test] +fn evm_batch_recursion_over_limit() { + ExtBuilder::default() + .with_balances(vec![(Alice, 10_000)]) + .build() + .execute_with(|| { + // Mock sets the recursion limit to 2, and we 3 nested batch. + // Thus it reverts. + + let input = EvmDataWriter::new_with_selector(Action::BatchAll) + .write::>(vec![Address(Precompile.into())]) + .write::>(vec![]) + .write::>(vec![Bytes( + EvmDataWriter::new_with_selector(Action::BatchAll) + .write::>(vec![Address(Precompile.into())]) + .write::>(vec![]) + .write::>(vec![Bytes( + EvmDataWriter::new_with_selector(Action::BatchAll) + .write::>(vec![Address(Bob.into())]) + .write::>(vec![1000_u32.into()]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + )]) + .write::>(vec![]) + .build(), + )]) + .write::>(vec![]) + .build(); + + assert_ok!(Call::Evm(evm_call(Alice, input)).dispatch(Origin::root())); + + assert_eq!(balance(Alice), 10_000); // gasprice = 0 + assert_eq!(balance(Bob), 0); + }) +} diff --git a/precompiles/call-permit/CallPermit.sol b/precompiles/call-permit/CallPermit.sol new file mode 100644 index 0000000000..02b58fe437 --- /dev/null +++ b/precompiles/call-permit/CallPermit.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +interface CallPermit { + /// @dev Dispatch a call on the behalf of an other user with a EIP712 permit. + /// Will revert if the permit is not valid or if the dispatched call reverts or errors (such as + /// out of gas). + /// If successful the EIP712 nonce is increased to prevent this permit to be replayed. + /// @param from Who made the permit and want its call to be dispatched on their behalf. + /// @param to Which address the call is made to. + /// @param value Value being transfered from the "from" account. + /// @param data Call data + /// @param gaslimit Gaslimit the dispatched call requires. + /// Providing it prevents the dispatcher to manipulate the gaslimit. + /// @param deadline Deadline in UNIX seconds after which the permit will no longer be valid. + /// @param v V part of the signature. + /// @param r R part of the signature. + /// @param s S part of the signature. + /// @return output Output of the call. + /// Selector: b5ea0966 + function dispatch( + address from, + address to, + uint256 value, + bytes memory data, + uint64 gaslimit, + uint256 deadline, + uint8 v, + bytes32 r, + bytes32 s + ) external returns (bytes memory output); + + /** + * @dev Returns the current nonce for given owner. + * A permit must have this nonce to be consumed, which will + * increase the nonce by one. + * Selector: 0x7ecebe00 + */ + function nonces(address owner) external view returns (uint256); + + /** + * @dev Returns the EIP712 domain separator. It is used to avoid replay + * attacks accross assets or other similar EIP712 message structures. + * Selector: 0x3644e515 + */ + function DOMAIN_SEPARATOR() external view returns (bytes32); +} diff --git a/precompiles/call-permit/Cargo.toml b/precompiles/call-permit/Cargo.toml new file mode 100644 index 0000000000..6ccd8aaea4 --- /dev/null +++ b/precompiles/call-permit/Cargo.toml @@ -0,0 +1,57 @@ +[package] +name = "pallet-evm-precompile-call-permit" +authors = [ "PureStake" ] +description = "A Precompile to dispatch a call with a ERC712 permit." +edition = "2021" +version = "0.1.0" + +[dependencies] +log = "0.4" +num_enum = { version = "0.5.3", default-features = false } +paste = "1.0.6" +slices = "0.2.0" + +# Moonbeam +precompile-utils = { path = "../utils", default-features = false } + +# Substrate +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } + +# Frontier +evm = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false, features = [ "with-codec" ] } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } + +[dev-dependencies] +derive_more = { version = "0.99" } +hex-literal = "0.3.4" +libsecp256k1 = "0.7" +serde = { version = "1.0.100" } +sha3 = "0.8" + +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +precompile-utils = { path = "../utils", features = [ "testing" ] } +scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } + +[features] +default = [ "std" ] +std = [ + "codec/std", + "fp-evm/std", + "frame-support/std", + "frame-system/std", + "pallet-evm/std", + "precompile-utils/std", + "sp-core/std", + "sp-io/std", + "sp-std/std", +] diff --git a/precompiles/call-permit/README.md b/precompiles/call-permit/README.md new file mode 100644 index 0000000000..52d68faec4 --- /dev/null +++ b/precompiles/call-permit/README.md @@ -0,0 +1,101 @@ +# Call Permit Precompile + +This precompile aims to be a general-purpose tool to perform gas-less +transactions. + +It allows a user (we'll call her **Alice**) to sign a **call permit** with +MetaMask (using the EIP712 standard), which can then be dispatched by another +user (we'll call him **Bob**) with a transaction. + +**Bob** can make a transaction to the **Call Permit Precompile** with the call +data and **Alice**'s signature. If the permit and signature are valid, the +precompile will perform the call on the behalf of **Alice**, as if **Alice** +made a transaction herself. **Bob** is thus paying the transaction fees and +**Alice** can perform a call without having any native currency to pay for fees +(she'll still need to have some if the call includes a transfer). + +## How to sign the permit + +The following code is an exemple that is working in a Metamask-injected webpage. +**Bob** then need to make a transaction towards the precompile address with the same +data and **Alice**'s signature. + +```js +await window.ethereum.enable(); +const accounts = await window.ethereum.request({ + method: "eth_requestAccounts", +}); + +const from = accounts[0]; +const to = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; +const value = 42; +const data = "0xdeadbeef"; +const gaslimit = 100000; +const nonce = 0; +const deadline = 1000; + +const createPermitMessageData = function () { + const message = { + from: from, + to: to, + value: value, + data: data, + gaslimit: gaslimit, + nonce: nonce, + deadline: deadline, + }; + + const typedData = JSON.stringify({ + types: { + EIP712Domain: [ + { name: "name", type: "string" }, + { name: "version", type: "string" }, + { name: "chainId", type: "uint256" }, + { name: "verifyingContract", type: "address" }, + ], + CallPermit: [ + { name: "from", type: "address" }, + { name: "to", type: "address" }, + { name: "value", type: "uint256" }, + { name: "data", type: "bytes" }, + { name: "gaslimit", type: "uint64" }, + { name: "nonce", type: "uint256" }, + { name: "deadline", type: "uint256" }, + ], + }, + primaryType: "CallPermit", + domain: { + name: "Call Permit Precompile", + version: "1", + chainId: 0, + verifyingContract: "0x000000000000000000000000000000000000080a", + }, + message: message, + }); + + return { + typedData, + message, + }; +}; + +const method = "eth_signTypedData_v4"; +const messageData = createPermitMessageData(); +const params = [from, messageData.typedData]; + +web3.currentProvider.sendAsync( + { + method, + params, + from, + }, + function (err, result) { + if (err) return console.dir(err); + if (result.error) { + alert(result.error.message); + return console.error("ERROR", result); + } + console.log("Signature:" + JSON.stringify(result.result)); + } +); +``` diff --git a/precompiles/call-permit/src/lib.rs b/precompiles/call-permit/src/lib.rs new file mode 100644 index 0000000000..febef85d3a --- /dev/null +++ b/precompiles/call-permit/src/lib.rs @@ -0,0 +1,276 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +#![cfg_attr(not(feature = "std"), no_std)] + +use core::marker::PhantomData; +use evm::ExitReason; +use fp_evm::{ + Context, Precompile, PrecompileFailure, PrecompileHandle, PrecompileOutput, Transfer, +}; +use frame_support::{ + ensure, + storage::types::{StorageMap, ValueQuery}, + traits::{Get, StorageInstance}, + Blake2_128Concat, +}; +use precompile_utils::{costs::call_cost, prelude::*}; +use sp_core::{H160, H256, U256}; +use sp_io::hashing::keccak_256; +use sp_std::vec::Vec; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +/// Storage prefix for nonces. +pub struct Nonces; + +impl StorageInstance for Nonces { + const STORAGE_PREFIX: &'static str = "Nonces"; + + fn pallet_prefix() -> &'static str { + "PrecompileCallPermit" + } +} + +/// Storage type used to store EIP2612 nonces. +pub type NoncesStorage = StorageMap< + Nonces, + // From + Blake2_128Concat, + H160, + // Nonce + U256, + ValueQuery, +>; + +/// EIP712 permit typehash. +pub const PERMIT_TYPEHASH: [u8; 32] = keccak256!( + "CallPermit(address from,address to,uint256 value,bytes data,uint64 gaslimit\ +,uint256 nonce,uint256 deadline)" +); + +/// EIP712 permit domain used to compute an individualized domain separator. +const PERMIT_DOMAIN: [u8; 32] = keccak256!( + "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" +); + +#[generate_function_selector] +#[derive(Debug, PartialEq)] +pub enum Action { + Dispatch = "dispatch(address,address,uint256,bytes,uint64,uint256,uint8,bytes32,bytes32)", + Nonces = "nonces(address)", + DomainSeparator = "DOMAIN_SEPARATOR()", +} + +/// Precompile allowing to issue and dispatch call permits for gasless transactions. +/// A user can sign a permit for a call that can be dispatched and paid by another user or +/// smart contract. +pub struct CallPermitPrecompile(PhantomData); + +impl Precompile for CallPermitPrecompile +where + Runtime: pallet_evm::Config + pallet_timestamp::Config, + ::Moment: Into, +{ + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector()?; + + handle.check_function_modifier(match selector { + Action::Dispatch => FunctionModifier::NonPayable, + _ => FunctionModifier::View, + })?; + + match selector { + Action::Dispatch => Self::dispatch(handle), + Action::Nonces => Self::nonces(handle), + Action::DomainSeparator => Self::domain_separator(handle), + } + } +} + +impl CallPermitPrecompile +where + Runtime: pallet_evm::Config + pallet_timestamp::Config, + ::Moment: Into, +{ + fn compute_domain_separator(address: H160) -> [u8; 32] { + let name: H256 = keccak_256(b"Call Permit Precompile").into(); + let version: H256 = keccak256!("1").into(); + let chain_id: U256 = Runtime::ChainId::get().into(); + + let domain_separator_inner = EvmDataWriter::new() + .write(H256::from(PERMIT_DOMAIN)) + .write(name) + .write(version) + .write(chain_id) + .write(Address(address)) + .build(); + + keccak_256(&domain_separator_inner).into() + } + + pub fn generate_permit( + address: H160, + from: H160, + to: H160, + value: U256, + data: Vec, + gaslimit: u64, + nonce: U256, + deadline: U256, + ) -> [u8; 32] { + let domain_separator = Self::compute_domain_separator(address); + + let permit_content = EvmDataWriter::new() + .write(H256::from(PERMIT_TYPEHASH)) + .write(Address(from)) + .write(Address(to)) + .write(value) + // bytes are encoded as the keccak_256 of the content + .write(H256::from(keccak_256(&data))) + .write(gaslimit) + .write(nonce) + .write(deadline) + .build(); + let permit_content = keccak_256(&permit_content); + + let mut pre_digest = Vec::with_capacity(2 + 32 + 32); + pre_digest.extend_from_slice(b"\x19\x01"); + pre_digest.extend_from_slice(&domain_separator); + pre_digest.extend_from_slice(&permit_content); + keccak_256(&pre_digest) + } + + pub fn dispatch_inherent_cost() -> u64 { + 3_000 // cost of ECRecover precompile for reference + + RuntimeHelper::::db_read_gas_cost() * 2 // we read nonce and timestamp + + RuntimeHelper::::db_write_gas_cost() // we write nonce + } + + fn dispatch(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(Self::dispatch_inherent_cost())?; + + // PARSE INPUT + let mut input = handle.read_input()?; + let from = input.read::
()?.0; + let to = input.read::
()?.0; + let value: U256 = input.read()?; + let data = input.read::()?.0; + let gas_limit: u64 = input.read()?; + let deadline: U256 = input.read()?; + let v: u8 = input.read()?; + let r: H256 = input.read()?; + let s: H256 = input.read()?; + + // ENSURE GASLIMIT IS SUFFICIENT + let call_cost = call_cost(value, ::config()); + + let total_cost = gas_limit + .checked_add(call_cost) + .ok_or_else(|| revert("call require too much gas (u64 overflow)"))?; + + if total_cost > handle.remaining_gas() { + return Err(revert("gaslimit is too low to dispatch provided call")); + } + + // VERIFY PERMIT + + // pallet_timestamp is in ms while Ethereum use second timestamps. + let timestamp: U256 = (pallet_timestamp::Pallet::::get()).into() / 1000; + ensure!(deadline >= timestamp, revert("permit expired")); + + let nonce = NoncesStorage::get(from); + + let permit = Self::generate_permit( + handle.context().address, + from, + to, + value, + data.clone(), + gas_limit, + nonce, + deadline, + ); + + let mut sig = [0u8; 65]; + sig[0..32].copy_from_slice(&r.as_bytes()); + sig[32..64].copy_from_slice(&s.as_bytes()); + sig[64] = v; + + let signer = sp_io::crypto::secp256k1_ecdsa_recover(&sig, &permit) + .map_err(|_| revert("invalid permit"))?; + let signer = H160::from(H256::from_slice(keccak_256(&signer).as_slice())); + + ensure!( + signer != H160::zero() && signer == from, + revert("invalid permit") + ); + + NoncesStorage::insert(from, nonce + U256::one()); + + // DISPATCH CALL + let sub_context = Context { + caller: from, + address: to.clone(), + apparent_value: value, + }; + + let transfer = if value.is_zero() { + None + } else { + Some(Transfer { + source: from, + target: to.clone(), + value, + }) + }; + + let (reason, output) = + handle.call(to, transfer, data, Some(gas_limit), false, &sub_context); + + match reason { + ExitReason::Error(exit_status) => Err(PrecompileFailure::Error { exit_status }), + ExitReason::Fatal(exit_status) => Err(PrecompileFailure::Fatal { exit_status }), + ExitReason::Revert(_) => Err(revert(output)), + ExitReason::Succeed(_) => Ok(succeed(output)), + } + } + + fn nonces(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + + let mut input = handle.read_input()?; + let from: H160 = input.read::
()?.into(); + + let nonce = NoncesStorage::get(from); + + Ok(succeed(EvmDataWriter::new().write(nonce).build())) + } + + fn domain_separator(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + + let domain_separator: H256 = + Self::compute_domain_separator(handle.context().address).into(); + + Ok(succeed( + EvmDataWriter::new().write(domain_separator).build(), + )) + } +} diff --git a/precompiles/call-permit/src/mock.rs b/precompiles/call-permit/src/mock.rs new file mode 100644 index 0000000000..eaed8bfea0 --- /dev/null +++ b/precompiles/call-permit/src/mock.rs @@ -0,0 +1,275 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Test utilities +use super::*; + +use codec::{Decode, Encode, MaxEncodedLen}; +use frame_support::traits::Everything; +use frame_support::{construct_runtime, pallet_prelude::*, parameter_types}; +use pallet_evm::{ + AddressMapping, EnsureAddressNever, EnsureAddressRoot, Precompile, PrecompileSet, +}; +use precompile_utils::revert; +use serde::{Deserialize, Serialize}; +use sp_core::H160; +use sp_core::H256; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, + Perbill, +}; + +/// To test EIP2612 permits we need to have cryptographic accounts. +pub const ALICE_PUBLIC_KEY: [u8; 20] = + hex_literal::hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac"); + +/// To test EIP2612 permits we need to have cryptographic accounts. +pub const ALICE_SECRET_KEY: [u8; 32] = + hex_literal::hex!("5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"); + +pub type AccountId = Account; +pub type Balance = u128; +pub type BlockNumber = u64; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; + +construct_runtime!( + pub enum Runtime where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + Evm: pallet_evm::{Pallet, Call, Storage, Event}, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, + } +); + +// FRom https://github.com/PureStake/moonbeam/pull/518. Merge to common once is merged +#[derive( + Eq, + PartialEq, + Ord, + PartialOrd, + Clone, + Encode, + Decode, + Debug, + MaxEncodedLen, + Serialize, + Deserialize, + derive_more::Display, + scale_info::TypeInfo, +)] +pub enum Account { + Alice, + Bob, + Charlie, + David, + Bogus, + Precompile, + Revert, +} + +impl Default for Account { + fn default() -> Self { + Self::Bogus + } +} + +impl Into for Account { + fn into(self) -> H160 { + match self { + Account::Alice => H160::from(&ALICE_PUBLIC_KEY), + Account::Bob => H160::repeat_byte(0xBB), + Account::Charlie => H160::repeat_byte(0xCC), + Account::David => H160::repeat_byte(0xDD), + Account::Bogus => H160::repeat_byte(0xFF), + Account::Precompile => H160::from_low_u64_be(1), + Account::Revert => H160::from_low_u64_be(2), + } + } +} + +impl AddressMapping for Account { + fn into_account_id(h160_account: H160) -> Account { + match h160_account { + a if a == H160::from(&ALICE_PUBLIC_KEY) => Self::Alice, + a if a == H160::repeat_byte(0xBB) => Self::Bob, + a if a == H160::repeat_byte(0xCC) => Self::Charlie, + a if a == H160::repeat_byte(0xDD) => Self::David, + a if a == H160::from_low_u64_be(1) => Self::Precompile, + a if a == H160::from_low_u64_be(2) => Self::Revert, + _ => Self::Bogus, + } + } +} + +impl From for Account { + fn from(x: H160) -> Account { + Account::into_account_id(x) + } +} + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub const MaximumBlockWeight: Weight = 1024; + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} + +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = BlockNumber; + type Call = Call; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); +} + +#[derive(Debug, Clone, Copy)] +pub struct TestPrecompiles(PhantomData); + +impl PrecompileSet for TestPrecompiles +where + CallPermitPrecompile: Precompile, +{ + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == Account::Precompile.into() => { + Some(CallPermitPrecompile::::execute(handle)) + } + a if a == Account::Revert.into() => Some(EvmResult::Err(revert("revert"))), + _ => None, + } + } + + fn is_precompile(&self, address: H160) -> bool { + address == Account::Precompile.into() + } +} + +parameter_types! { + pub PrecompilesValue: TestPrecompiles = TestPrecompiles(Default::default()); +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = (); + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = AccountId; + type Currency = Balances; + type Event = Event; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = TestPrecompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = (); + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +pub(crate) struct ExtBuilder { + // endowed accounts with balances + balances: Vec<(AccountId, Balance)>, +} + +impl Default for ExtBuilder { + fn default() -> ExtBuilder { + ExtBuilder { balances: vec![] } + } +} + +impl ExtBuilder { + pub(crate) fn with_balances(mut self, balances: Vec<(AccountId, Balance)>) -> Self { + self.balances = balances; + self + } + + pub(crate) fn build(self) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::default() + .build_storage::() + .expect("Frame system builds valid default genesis config"); + + pallet_balances::GenesisConfig:: { + balances: self.balances, + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| { + System::set_block_number(1); + pallet_evm::Pallet::::create_account( + Account::Revert.into(), + hex_literal::hex!("1460006000fd").to_vec(), + ); + }); + ext + } +} + +// pub fn balance(account: impl Into) -> Balance { +// pallet_balances::Pallet::::usable_balance(account.into()) +// } diff --git a/precompiles/call-permit/src/tests.rs b/precompiles/call-permit/src/tests.rs new file mode 100644 index 0000000000..4133993974 --- /dev/null +++ b/precompiles/call-permit/src/tests.rs @@ -0,0 +1,662 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use crate::{ + mock::{ + Account::{Alice, Bob, Charlie, Precompile}, + ExtBuilder, PrecompilesValue, Runtime, TestPrecompiles, ALICE_SECRET_KEY, + }, + Action, CallPermitPrecompile, +}; +use evm::ExitReason; +use fp_evm::{ExitRevert, ExitSucceed}; +use libsecp256k1::{sign, Message, SecretKey}; +use precompile_utils::{costs::call_cost, prelude::*, testing::*}; +use sp_core::{H160, H256, U256}; + +fn precompiles() -> TestPrecompiles { + PrecompilesValue::get() +} + +fn dispatch_cost() -> u64 { + CallPermitPrecompile::::dispatch_inherent_cost() +} + +#[test] +fn selectors() { + assert_eq!(Action::Dispatch as u32, 0xb5ea0966); + assert_eq!(Action::Nonces as u32, 0x7ecebe00); + assert_eq!(Action::DomainSeparator as u32, 0x3644e515); +} + +#[test] +fn valid_permit_returns() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let from: H160 = Alice.into(); + let to: H160 = Bob.into(); + let value: U256 = 42u8.into(); + let data: Vec = b"Test".to_vec(); + let gas_limit = 100_000u64; + let nonce: U256 = 0u8.into(); + let deadline: U256 = 1_000u32.into(); + + let permit = CallPermitPrecompile::::generate_permit( + Precompile.into(), + from, + to, + value, + data.clone(), + gas_limit, + nonce, + deadline, + ); + + let secret_key = SecretKey::parse(&ALICE_SECRET_KEY).unwrap(); + let message = Message::parse(&permit); + let (rs, v) = sign(&message, &secret_key); + + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Nonces) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + let call_cost = call_cost(value, ::config()); + + precompiles() + .prepare_test( + Charlie, // can be anyone + Precompile, + EvmDataWriter::new_with_selector(Action::Dispatch) + .write(Address(from)) + .write(Address(to)) + .write(value) + .write(Bytes(data)) + .write(gas_limit) + .write(deadline) + .write(v.serialize()) + .write(H256::from(rs.r.b32())) + .write(H256::from(rs.s.b32())) + .build(), + ) + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas, + is_static, + context, + } = subcall; + + // Called on the behalf of the permit maker. + assert_eq!(context.caller, Alice.into()); + assert_eq!(address, Bob.into()); + assert_eq!(is_static, false); + assert_eq!(target_gas, Some(100_000), "forward requested gas"); + + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Bob.into()); + assert_eq!(transfer.value, 42u8.into()); + + assert_eq!(context.address, Bob.into()); + assert_eq!(context.apparent_value, 42u8.into()); + + assert_eq!(&input, b"Test"); + + SubcallOutput { + reason: ExitReason::Succeed(ExitSucceed::Returned), + output: b"TEST".to_vec(), + cost: 13, + logs: vec![log1(Bob, H256::repeat_byte(0x11), vec![])], + } + }) + .with_target_gas(Some(call_cost + 100_000 + dispatch_cost())) + .expect_cost(call_cost + 13 + dispatch_cost()) + .expect_log(log1(Bob, H256::repeat_byte(0x11), vec![])) + .execute_returns(b"TEST".to_vec()); + }) +} + +#[test] +fn valid_permit_reverts() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let from: H160 = Alice.into(); + let to: H160 = Bob.into(); + let value: U256 = 42u8.into(); + let data: Vec = b"Test".to_vec(); + let gas_limit = 100_000u64; + let nonce: U256 = 0u8.into(); + let deadline: U256 = 1_000u32.into(); + + let permit = CallPermitPrecompile::::generate_permit( + Precompile.into(), + from, + to, + value, + data.clone(), + gas_limit, + nonce, + deadline, + ); + + let secret_key = SecretKey::parse(&ALICE_SECRET_KEY).unwrap(); + let message = Message::parse(&permit); + let (rs, v) = sign(&message, &secret_key); + + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Nonces) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + let call_cost = call_cost(value, ::config()); + + precompiles() + .prepare_test( + Charlie, // can be anyone + Precompile, + EvmDataWriter::new_with_selector(Action::Dispatch) + .write(Address(from)) + .write(Address(to)) + .write(value) + .write(Bytes(data)) + .write(gas_limit) + .write(deadline) + .write(v.serialize()) + .write(H256::from(rs.r.b32())) + .write(H256::from(rs.s.b32())) + .build(), + ) + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas, + is_static, + context, + } = subcall; + + // Called on the behalf of the permit maker. + assert_eq!(context.caller, Alice.into()); + assert_eq!(address, Bob.into()); + assert_eq!(is_static, false); + assert_eq!(target_gas, Some(100_000), "forward requested gas"); + + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Bob.into()); + assert_eq!(transfer.value, 42u8.into()); + + assert_eq!(context.address, Bob.into()); + assert_eq!(context.apparent_value, 42u8.into()); + + assert_eq!(&input, b"Test"); + + SubcallOutput { + reason: ExitReason::Revert(ExitRevert::Reverted), + output: b"TEST".to_vec(), + cost: 13, + logs: vec![], + } + }) + .with_target_gas(Some(call_cost + 100_000 + dispatch_cost())) + .expect_cost(call_cost + 13 + dispatch_cost()) + .expect_no_logs() + .execute_reverts(|x| x == b"TEST".to_vec()); + }) +} + +#[test] +fn invalid_permit_nonce() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let from: H160 = Alice.into(); + let to: H160 = Bob.into(); + let value: U256 = 42u8.into(); + let data: Vec = b"Test".to_vec(); + let gas_limit = 100_000u64; + let nonce: U256 = 1u8.into(); // WRONG NONCE + let deadline: U256 = 1_000u32.into(); + + let permit = CallPermitPrecompile::::generate_permit( + Precompile.into(), + from, + to, + value, + data.clone(), + gas_limit, + nonce, + deadline, + ); + + let secret_key = SecretKey::parse(&ALICE_SECRET_KEY).unwrap(); + let message = Message::parse(&permit); + let (rs, v) = sign(&message, &secret_key); + + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Nonces) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + let call_cost = call_cost(value, ::config()); + + precompiles() + .prepare_test( + Charlie, // can be anyone + Precompile, + EvmDataWriter::new_with_selector(Action::Dispatch) + .write(Address(from)) + .write(Address(to)) + .write(value) + .write(Bytes(data)) + .write(gas_limit) + .write(deadline) + .write(v.serialize()) + .write(H256::from(rs.r.b32())) + .write(H256::from(rs.s.b32())) + .build(), + ) + .with_subcall_handle(move |_| panic!("should not perform subcall")) + .with_target_gas(Some(call_cost + 100_000 + dispatch_cost())) + .expect_cost(dispatch_cost()) + .execute_reverts(|x| x == b"invalid permit"); + }) +} + +#[test] +fn invalid_permit_gas_limit_too_low() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let from: H160 = Alice.into(); + let to: H160 = Bob.into(); + let value: U256 = 42u8.into(); + let data: Vec = b"Test".to_vec(); + let gas_limit = 100_000u64; + let nonce: U256 = 0u8.into(); + let deadline: U256 = 1_000u32.into(); + + let permit = CallPermitPrecompile::::generate_permit( + Precompile.into(), + from, + to, + value, + data.clone(), + gas_limit, + nonce, + deadline, + ); + + let secret_key = SecretKey::parse(&ALICE_SECRET_KEY).unwrap(); + let message = Message::parse(&permit); + let (rs, v) = sign(&message, &secret_key); + + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Nonces) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + let call_cost = call_cost(value, ::config()); + + precompiles() + .prepare_test( + Charlie, // can be anyone + Precompile, + EvmDataWriter::new_with_selector(Action::Dispatch) + .write(Address(from)) + .write(Address(to)) + .write(value) + .write(Bytes(data)) + .write(gas_limit) + .write(deadline) + .write(v.serialize()) + .write(H256::from(rs.r.b32())) + .write(H256::from(rs.s.b32())) + .build(), + ) + .with_subcall_handle(move |_| panic!("should not perform subcall")) + .with_target_gas(Some(call_cost + 99_999 + dispatch_cost())) + .expect_cost(dispatch_cost()) + .execute_reverts(|x| x == b"gaslimit is too low to dispatch provided call"); + }) +} + +#[test] +fn invalid_permit_gas_limit_overflow() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let from: H160 = Alice.into(); + let to: H160 = Bob.into(); + let value: U256 = 42u8.into(); + let data: Vec = b"Test".to_vec(); + let gas_limit = u64::MAX; + let nonce: U256 = 0u8.into(); + let deadline: U256 = 1_000u32.into(); + + let permit = CallPermitPrecompile::::generate_permit( + Precompile.into(), + from, + to, + value, + data.clone(), + gas_limit, + nonce, + deadline, + ); + + dbg!(H256::from(permit)); + + let secret_key = SecretKey::parse(&ALICE_SECRET_KEY).unwrap(); + let message = Message::parse(&permit); + let (rs, v) = sign(&message, &secret_key); + + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Nonces) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + precompiles() + .prepare_test( + Charlie, // can be anyone + Precompile, + EvmDataWriter::new_with_selector(Action::Dispatch) + .write(Address(from)) + .write(Address(to)) + .write(value) + .write(Bytes(data)) + .write(gas_limit) + .write(deadline) + .write(v.serialize()) + .write(H256::from(rs.r.b32())) + .write(H256::from(rs.s.b32())) + .build(), + ) + .with_subcall_handle(move |_| panic!("should not perform subcall")) + .with_target_gas(Some(100_000 + dispatch_cost())) + .expect_cost(dispatch_cost()) + .execute_reverts(|x| x == b"call require too much gas (u64 overflow)"); + }) +} + +// // This test checks the validity of a metamask signed message against the permit precompile +// // The code used to generate the signature is the following. +// // You will need to import ALICE_PRIV_KEY in metamask. +// // If you put this code in the developer tools console, it will log the signature + +// await window.ethereum.enable(); +// const accounts = await window.ethereum.request({ method: "eth_requestAccounts" }); + +// const from = accounts[0]; +// const to = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; +// const value = 42; +// const data = "0xdeadbeef"; +// const gaslimit = 100000; +// const nonce = 0; +// const deadline = 1000; + +// const createPermitMessageData = function () { +// const message = { +// from: from, +// to: to, +// value: value, +// data: data, +// gaslimit: gaslimit, +// nonce: nonce, +// deadline: deadline, +// }; + +// const typedData = JSON.stringify({ +// types: { +// EIP712Domain: [ +// { +// name: "name", +// type: "string", +// }, +// { +// name: "version", +// type: "string", +// }, +// { +// name: "chainId", +// type: "uint256", +// }, +// { +// name: "verifyingContract", +// type: "address", +// }, +// ], +// CallPermit: [ +// { +// name: "from", +// type: "address", +// }, +// { +// name: "to", +// type: "address", +// }, +// { +// name: "value", +// type: "uint256", +// }, +// { +// name: "data", +// type: "bytes", +// }, +// { +// name: "gaslimit", +// type: "uint64", +// }, +// { +// name: "nonce", +// type: "uint256", +// }, +// { +// name: "deadline", +// type: "uint256", +// }, +// ], +// }, +// primaryType: "CallPermit", +// domain: { +// name: "Call Permit Precompile", +// version: "1", +// chainId: 0, +// verifyingContract: "0x0000000000000000000000000000000000000001", +// }, +// message: message, +// }); + +// return { +// typedData, +// message, +// }; +// }; + +// const method = "eth_signTypedData_v4" +// const messageData = createPermitMessageData(); +// const params = [from, messageData.typedData]; + +// web3.currentProvider.sendAsync( +// { +// method, +// params, +// from, +// }, +// function (err, result) { +// if (err) return console.dir(err); +// if (result.error) { +// alert(result.error.message); +// } +// if (result.error) return console.error('ERROR', result); +// console.log('TYPED SIGNED:' + JSON.stringify(result.result)); + +// const recovered = sigUtil.recoverTypedSignature_v4({ +// data: JSON.parse(msgParams), +// sig: result.result, +// }); + +// if ( +// ethUtil.toChecksumAddress(recovered) === ethUtil.toChecksumAddress(from) +// ) { +// alert('Successfully recovered signer as ' + from); +// } else { +// alert( +// 'Failed to verify signer when comparing ' + result + ' to ' + from +// ); +// } +// } +// ); +#[test] +fn valid_permit_returns_with_metamask_signed_data() { + ExtBuilder::default() + .with_balances(vec![(Alice, 2000)]) + .build() + .execute_with(|| { + let from: H160 = Alice.into(); + let to: H160 = Bob.into(); + let value: U256 = 42u8.into(); + let data: Vec = hex_literal::hex!("deadbeef").to_vec(); + let gas_limit = 100_000u64; + let deadline: U256 = 1_000u32.into(); + + // Made with MetaMask + let rsv = hex_literal::hex!( + "56b497d556cb1b57a16aac6e8d53f3cbf1108df467ffcb937a3744369a27478f608de05 + 34b8e0385e55ffd97cbafcfeac12ab52d0b74a2dea582bc8de46f257d1c" + ) + .as_slice(); + let (r, sv) = rsv.split_at(32); + let (s, v) = sv.split_at(32); + let v_real = v[0]; + let r_real: [u8; 32] = r.try_into().unwrap(); + let s_real: [u8; 32] = s.try_into().unwrap(); + + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Nonces) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(0u8)).build()); + + let call_cost = call_cost(value, ::config()); + + precompiles() + .prepare_test( + Charlie, // can be anyone + Precompile, + EvmDataWriter::new_with_selector(Action::Dispatch) + .write(Address(from)) + .write(Address(to)) + .write(value) + .write(Bytes(data.clone())) + .write(gas_limit) + .write(deadline) + .write(v_real) + .write(H256::from(r_real)) + .write(H256::from(s_real)) + .build(), + ) + .with_subcall_handle(move |subcall| { + let Subcall { + address, + transfer, + input, + target_gas, + is_static, + context, + } = subcall; + + // Called on the behalf of the permit maker. + assert_eq!(context.caller, Alice.into()); + assert_eq!(address, Bob.into()); + assert_eq!(is_static, false); + assert_eq!(target_gas, Some(100_000), "forward requested gas"); + + let transfer = transfer.expect("there is a transfer"); + assert_eq!(transfer.source, Alice.into()); + assert_eq!(transfer.target, Bob.into()); + assert_eq!(transfer.value, 42u8.into()); + + assert_eq!(context.address, Bob.into()); + assert_eq!(context.apparent_value, 42u8.into()); + + assert_eq!(&input, &data); + + SubcallOutput { + reason: ExitReason::Succeed(ExitSucceed::Returned), + output: b"TEST".to_vec(), + cost: 13, + logs: vec![log1(Bob, H256::repeat_byte(0x11), vec![])], + } + }) + .with_target_gas(Some(call_cost + 100_000 + dispatch_cost())) + .expect_cost(call_cost + 13 + dispatch_cost()) + .expect_log(log1(Bob, H256::repeat_byte(0x11), vec![])) + .execute_returns(b"TEST".to_vec()); + }) +} diff --git a/precompiles/crowdloan-rewards/Cargo.toml b/precompiles/crowdloan-rewards/Cargo.toml index 220eb7b4dd..ca4a45daee 100644 --- a/precompiles/crowdloan-rewards/Cargo.toml +++ b/precompiles/crowdloan-rewards/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "crowdloan-rewards-precompiles" +name = "pallet-evm-precompile-crowdloan-rewards" authors = [ "PureStake" ] description = "A Precompile to make crowdloan rewards accessible to pallet-evm" edition = "2021" @@ -11,36 +11,41 @@ num_enum = { version = "0.5.3", default-features = false } rustc-hex = { version = "2.0.1", default-features = false } # Moonbeam +pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.23", default-features = false } precompile-utils = { path = "../utils", default-features = false } # Substrate -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } + +# Frontier +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = "0.99" serde = "1.0.100" sha3 = "0.9" +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } + # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-scheduler = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } # Cumulus -cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] diff --git a/precompiles/crowdloan-rewards/src/lib.rs b/precompiles/crowdloan-rewards/src/lib.rs index 2ff49b5e9e..91d660450c 100644 --- a/precompiles/crowdloan-rewards/src/lib.rs +++ b/precompiles/crowdloan-rewards/src/lib.rs @@ -19,15 +19,13 @@ #![cfg_attr(not(feature = "std"), no_std)] #![feature(assert_matches)] -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{Precompile, PrecompileHandle, PrecompileOutput}; use frame_support::{ dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, traits::Currency, }; -use pallet_evm::{AddressMapping, Precompile}; -use precompile_utils::{ - Address, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, Gasometer, RuntimeHelper, -}; +use pallet_evm::AddressMapping; +use precompile_utils::prelude::*; use sp_core::{H160, U256}; use sp_std::{ @@ -46,9 +44,9 @@ pub type BalanceOf = ::AccountId, >>::Balance; -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] -enum Action { +pub enum Action { IsContributor = "is_contributor(address)", RewardInfo = "reward_info(address)", Claim = "claim()", @@ -66,32 +64,20 @@ where ::Origin: From>, Runtime::Call: From>, { - fn execute( - input: &[u8], //Reminder this is big-endian - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { - let mut gasometer = Gasometer::new(target_gas); - let (mut input, selector) = EvmDataReader::new_with_selector(&mut gasometer, input)?; - - gasometer.check_function_modifier( - context, - is_static, - match selector { - Action::Claim | Action::UpdateRewardAddress => FunctionModifier::NonPayable, - _ => FunctionModifier::View, - }, - )?; + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector()?; + + handle.check_function_modifier(match selector { + Action::Claim | Action::UpdateRewardAddress => FunctionModifier::NonPayable, + _ => FunctionModifier::View, + })?; match selector { // Check for accessor methods first. These return results immediately - Action::IsContributor => Self::is_contributor(&mut input, &mut gasometer), - Action::RewardInfo => Self::reward_info(&mut input, &mut gasometer), - Action::Claim => Self::claim(&mut gasometer, context), - Action::UpdateRewardAddress => { - Self::update_reward_address(&mut input, &mut gasometer, context) - } + Action::IsContributor => Self::is_contributor(handle), + Action::RewardInfo => Self::reward_info(handle), + Action::Claim => Self::claim(handle), + Action::UpdateRewardAddress => Self::update_reward_address(handle), } } } @@ -104,18 +90,16 @@ where ::Origin: From>, Runtime::Call: From>, { - // The accessors are first. They directly return their result. - fn is_contributor( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; // accounts_payable + // The accessors are first. + fn is_contributor(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // accounts_payable // Bound check - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; // parse the address - let contributor: H160 = input.read::
(gasometer)?.into(); + let contributor: H160 = input.read::
()?.into(); let account = Runtime::AddressMapping::into_account_id(contributor); @@ -131,25 +115,18 @@ where log::trace!(target: "crowldoan-rewards-precompile", "Result from pallet is {:?}", is_contributor); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(is_contributor).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(is_contributor).build())) } - fn reward_info( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; // accounts_payable + fn reward_info(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // accounts_payable // Bound check - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; // parse the address - let contributor: H160 = input.read::
(gasometer)?.into(); + let contributor: H160 = input.read::
()?.into(); let account = Runtime::AddressMapping::into_account_id(contributor); @@ -162,78 +139,63 @@ where // fetch data from pallet let reward_info = pallet_crowdloan_rewards::Pallet::::accounts_payable(account); - let (total, claimed): (U256, U256) = - if let Some(reward_info) = reward_info { - let total_reward: u128 = reward_info.total_reward.try_into().map_err(|_| { - gasometer.revert("Amount is too large for provided balance type") - })?; - let claimed_reward: u128 = reward_info.claimed_reward.try_into().map_err(|_| { - gasometer.revert("Amount is too large for provided balance type") - })?; - - (total_reward.into(), claimed_reward.into()) - } else { - (0u128.into(), 0u128.into()) - }; + let (total, claimed): (U256, U256) = if let Some(reward_info) = reward_info { + let total_reward: u128 = reward_info + .total_reward + .try_into() + .map_err(|_| revert("Amount is too large for provided balance type"))?; + let claimed_reward: u128 = reward_info + .claimed_reward + .try_into() + .map_err(|_| revert("Amount is too large for provided balance type"))?; + + (total_reward.into(), claimed_reward.into()) + } else { + (0u128.into(), 0u128.into()) + }; log::trace!( target: "crowldoan-rewards-precompile", "Result from pallet is {:?} {:?}", total, claimed ); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(total).write(claimed).build(), - logs: Default::default(), - }) + Ok(succeed( + EvmDataWriter::new().write(total).write(claimed).build(), + )) } - fn claim(gasometer: &mut Gasometer, context: &Context) -> EvmResult { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + fn claim(handle: &mut impl PrecompileHandle) -> EvmResult { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = pallet_crowdloan_rewards::Call::::claim {}; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn update_reward_address( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn update_reward_address(handle: &mut impl PrecompileHandle) -> EvmResult { log::trace!( target: "crowdloan-rewards-precompile", "In update_reward_address dispatchable wrapper" ); // Bound check - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; // parse the address - let new_address: H160 = input.read::
(gasometer)?.into(); + let new_address: H160 = input.read::
()?.into(); let new_reward_account = Runtime::AddressMapping::into_account_id(new_address); log::trace!(target: "crowdloan-rewards-precompile", "New account is {:?}", new_address); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = pallet_crowdloan_rewards::Call::::update_reward_address { new_reward_account }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } } diff --git a/precompiles/crowdloan-rewards/src/mock.rs b/precompiles/crowdloan-rewards/src/mock.rs index c7ce69fa76..607e3458e6 100644 --- a/precompiles/crowdloan-rewards/src/mock.rs +++ b/precompiles/crowdloan-rewards/src/mock.rs @@ -32,13 +32,14 @@ use frame_support::{ use frame_system::{EnsureSigned, RawOrigin}; use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot, PrecompileSet}; use serde::{Deserialize, Serialize}; -use sp_core::H256; +use sp_core::{H256, U256}; use sp_io; use sp_runtime::{ testing::Header, traits::{BlakeTwo256, IdentityLookup}, Perbill, }; + pub type AccountId = H160; pub type Balance = u128; pub type BlockNumber = u64; @@ -80,7 +81,7 @@ construct_runtime!( derive_more::Display, scale_info::TypeInfo, )] -pub enum TestAccount { +pub enum Account { Alice, Bob, Charlie, @@ -99,20 +100,20 @@ impl> AddressMapping for IntoAddressMapping { } } -impl Default for TestAccount { +impl Default for Account { fn default() -> Self { Self::Bogus } } -impl From for H160 { - fn from(value: TestAccount) -> H160 { +impl From for H160 { + fn from(value: Account) -> H160 { match value { - TestAccount::Alice => H160::repeat_byte(0xAA), - TestAccount::Bob => H160::repeat_byte(0xBB), - TestAccount::Charlie => H160::repeat_byte(0xCC), - TestAccount::Precompile => H160::from_low_u64_be(PRECOMPILE_ADDRESS), - TestAccount::Bogus => Default::default(), + Account::Alice => H160::repeat_byte(0xAA), + Account::Bob => H160::repeat_byte(0xBB), + Account::Charlie => H160::repeat_byte(0xCC), + Account::Precompile => H160::from_low_u64_be(PRECOMPILE_ADDRESS), + Account::Bogus => Default::default(), } } } @@ -177,11 +178,6 @@ impl pallet_balances::Config for Runtime { type WeightInfo = (); } -/// The crowdloan precompile is available at address one in the mock runtime. -pub fn precompile_address() -> H160 { - H160::from_low_u64_be(1) -} - #[derive(Debug, Clone, Copy)] pub struct TestPrecompiles(PhantomData); @@ -189,28 +185,22 @@ impl PrecompileSet for TestPrecompiles where CrowdloanRewardsWrapper: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == precompile_address() => Some(CrowdloanRewardsWrapper::::execute( - input, target_gas, context, is_static, - )), + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == Account::Precompile.into() => { + Some(CrowdloanRewardsWrapper::::execute(handle)) + } _ => None, } } fn is_precompile(&self, address: H160) -> bool { - address == precompile_address() + address == Account::Precompile.into() } } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub const PrecompilesValue: TestPrecompiles = TestPrecompiles(PhantomData); } @@ -227,10 +217,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesType = TestPrecompiles; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } parameter_types! { @@ -367,14 +356,3 @@ pub(crate) fn events() -> Vec { .map(|r| r.event) .collect::>() } - -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> fp_evm::Context { - fp_evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} diff --git a/precompiles/crowdloan-rewards/src/tests.rs b/precompiles/crowdloan-rewards/src/tests.rs index c1a9d7dc84..f6190573c0 100644 --- a/precompiles/crowdloan-rewards/src/tests.rs +++ b/precompiles/crowdloan-rewards/src/tests.rs @@ -14,20 +14,16 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use std::assert_matches::assert_matches; - use crate::mock::{ - events, evm_test_context, precompile_address, roll_to, Call, Crowdloan, ExtBuilder, Origin, - PrecompilesValue, Runtime, TestAccount::Alice, TestAccount::Bob, TestAccount::Charlie, - TestPrecompiles, + events, roll_to, + Account::{Alice, Bob, Charlie, Precompile}, + Call, Crowdloan, ExtBuilder, Origin, PrecompilesValue, Runtime, TestPrecompiles, }; -use crate::{Action, PrecompileOutput}; -use fp_evm::PrecompileFailure; +use crate::Action; use frame_support::{assert_ok, dispatch::Dispatchable}; -use num_enum::TryFromPrimitive; use pallet_crowdloan_rewards::{Call as CrowdloanCall, Event as CrowdloanEvent}; -use pallet_evm::{Call as EvmCall, ExitSucceed, PrecompileSet}; -use precompile_utils::{Address, EvmDataWriter}; +use pallet_evm::Call as EvmCall; +use precompile_utils::{prelude::*, testing::*}; use sha3::{Digest, Keccak256}; use sp_core::{H160, U256}; @@ -38,7 +34,7 @@ fn precompiles() -> TestPrecompiles { fn evm_call(input: Vec) -> EvmCall { EvmCall::call { source: Alice.into(), - target: precompile_address(), + target: Precompile.into(), input, value: U256::zero(), // No value sent in EVM gas_limit: u64::max_value(), @@ -51,65 +47,28 @@ fn evm_call(input: Vec) -> EvmCall { #[test] fn test_selector_enum() { - let mut buffer = [0u8; 4]; - buffer.copy_from_slice(&Keccak256::digest(b"is_contributor(address)")[0..4]); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::IsContributor, - ); - buffer.copy_from_slice(&Keccak256::digest(b"claim()")[0..4]); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::Claim, - ); - buffer.copy_from_slice(&Keccak256::digest(b"reward_info(address)")[0..4]); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::RewardInfo, - ); - buffer.copy_from_slice(&Keccak256::digest(b"update_reward_address(address)")[0..4]); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::UpdateRewardAddress, - ); + assert_eq!(Action::IsContributor as u32, 0x53440c90); + assert_eq!(Action::RewardInfo as u32, 0x76f70249); + assert_eq!(Action::Claim as u32, 0x4e71d92d); + assert_eq!(Action::UpdateRewardAddress as u32, 0xaaac61d6); } #[test] fn selector_less_than_four_bytes() { ExtBuilder::default().build().execute_with(|| { // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"tried to parse selector out of bounds" - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8]) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); }); } #[test] fn no_selector_exists_but_length_is_right() { ExtBuilder::default().build().execute_with(|| { - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"unknown selector", - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8, 4u8]) + .execute_reverts(|output| output == b"unknown selector"); }); } @@ -119,29 +78,17 @@ fn is_contributor_returns_false() { .with_balances(vec![(Alice.into(), 1000)]) .build() .execute_with(|| { - let input = EvmDataWriter::new_with_selector(Action::IsContributor) - .write(Address(H160::from(Alice))) - .build(); - - // Expected result is one - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that no props have been opened. - assert_eq!( - precompiles().execute( - precompile_address(), - &input, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsContributor) + .write(Address(H160::from(Alice))) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); }); } @@ -170,26 +117,18 @@ fn is_contributor_returns_true() { init_block + VESTING )); - let input = EvmDataWriter::new_with_selector(Action::IsContributor) - .write(Address(H160::from(Alice))) - .build(); - // Assert that no props have been opened. - assert_eq!( - precompiles().execute( - precompile_address(), - &input, - None, - &evm_test_context(), - false - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsContributor) + .write(Address(H160::from(Alice))) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -258,29 +197,23 @@ fn reward_info_works() { roll_to(5); - let input = EvmDataWriter::new_with_selector(Action::RewardInfo) - .write(Address(H160::from(Alice))) - .build(); - // Assert that no props have been opened. - assert_eq!( - precompiles().execute( - precompile_address(), - &input, - None, - &evm_test_context(), - false - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new() + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::RewardInfo) + .write(Address(H160::from(Alice))) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() .write(U256::from(50u64)) .write(U256::from(10u64)) .build(), - cost: Default::default(), - logs: Default::default(), - })) - ); + ); }); } @@ -338,16 +271,8 @@ fn test_bound_checks_for_address_parsing() { let mut input = Keccak256::digest(b"update_reward_address(address)")[0..4].to_vec(); input.extend_from_slice(&[1u8; 4]); // incomplete data - assert_matches!( - precompiles().execute( - precompile_address(), - &input, - None, - &evm_test_context(), - false - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"input doesn't match expected length", - ); + precompiles() + .prepare_test(Alice, Precompile, input) + .execute_reverts(|output| output == b"input doesn't match expected length") }) } diff --git a/precompiles/pallet-democracy/Cargo.toml b/precompiles/pallet-democracy/Cargo.toml index 6b3d511eb4..4870d4bf73 100644 --- a/precompiles/pallet-democracy/Cargo.toml +++ b/precompiles/pallet-democracy/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "pallet-democracy-precompiles" +name = "pallet-evm-precompile-democracy" authors = [ "PureStake" ] description = "A Precompile to make Substrate's pallet-democracy accessible to pallet-evm" edition = "2021" @@ -14,29 +14,32 @@ precompile-utils = { path = "../utils", default-features = false } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-democracy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-democracy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = "0.99" hex-literal = "0.3.4" serde = "1.0.100" +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } + # Substrate -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-scheduler = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/precompiles/pallet-democracy/src/lib.rs b/precompiles/pallet-democracy/src/lib.rs index 301e6d1940..bf64cadaef 100644 --- a/precompiles/pallet-democracy/src/lib.rs +++ b/precompiles/pallet-democracy/src/lib.rs @@ -19,16 +19,12 @@ #![cfg_attr(not(feature = "std"), no_std)] #![feature(assert_matches)] -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{PrecompileHandle, PrecompileOutput}; use frame_support::dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::Currency; use pallet_democracy::{AccountVote, Call as DemocracyCall, Vote}; -use pallet_evm::AddressMapping; -use pallet_evm::Precompile; -use precompile_utils::{ - Address, Bytes, EvmData, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, Gasometer, - RuntimeHelper, -}; +use pallet_evm::{AddressMapping, Precompile}; +use precompile_utils::prelude::*; use sp_core::{H160, H256, U256}; use sp_std::{ convert::{TryFrom, TryInto}, @@ -48,7 +44,7 @@ type BalanceOf = <::Currency as Cu type DemocracyOf = pallet_democracy::Pallet; -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] enum Action { PublicPropCount = "public_prop_count()", @@ -74,6 +70,7 @@ enum Action { /// For an example of a political party that operates as a DAO, see PoliticalPartyDao.sol pub struct DemocracyWrapper(PhantomData); +// TODO: Migrate to precompile_utils::Precompile. impl Precompile for DemocracyWrapper where Runtime: pallet_democracy::Config + pallet_evm::Config + frame_system::Config, @@ -83,55 +80,42 @@ where Runtime::Call: From>, Runtime::Hash: From, { - fn execute( - input: &[u8], //Reminder this is big-endian - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { log::trace!(target: "democracy-precompile", "In democracy wrapper"); - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; - - let (mut input, selector) = EvmDataReader::new_with_selector(gasometer, input)?; - let input = &mut input; - - gasometer.check_function_modifier( - context, - is_static, - match selector { - Action::Propose - | Action::Second - | Action::StandardVote - | Action::RemoveVote - | Action::Delegate - | Action::UnDelegate - | Action::Unlock - | Action::NotePreimage - | Action::NoteImminentPreimage => FunctionModifier::NonPayable, - _ => FunctionModifier::View, - }, - )?; + let selector = handle.read_selector()?; + + handle.check_function_modifier(match selector { + Action::Propose + | Action::Second + | Action::StandardVote + | Action::RemoveVote + | Action::Delegate + | Action::UnDelegate + | Action::Unlock + | Action::NotePreimage + | Action::NoteImminentPreimage => FunctionModifier::NonPayable, + _ => FunctionModifier::View, + })?; match selector { // Storage Accessors - Action::PublicPropCount => Self::public_prop_count(gasometer), - Action::DepositOf => Self::deposit_of(input, gasometer), - Action::LowestUnbaked => Self::lowest_unbaked(gasometer), - Action::OngoingReferendumInfo => Self::ongoing_referendum_info(input, gasometer), - Action::FinishedReferendumInfo => Self::finished_referendum_info(input, gasometer), + Action::PublicPropCount => Self::public_prop_count(handle), + Action::DepositOf => Self::deposit_of(handle), + Action::LowestUnbaked => Self::lowest_unbaked(handle), + Action::OngoingReferendumInfo => Self::ongoing_referendum_info(handle), + Action::FinishedReferendumInfo => Self::finished_referendum_info(handle), // Dispatchables - Action::Propose => Self::propose(input, gasometer, context), - Action::Second => Self::second(input, gasometer, context), - Action::StandardVote => Self::standard_vote(input, gasometer, context), - Action::RemoveVote => Self::remove_vote(input, gasometer, context), - Action::Delegate => Self::delegate(input, gasometer, context), - Action::UnDelegate => Self::un_delegate(gasometer, context), - Action::Unlock => Self::unlock(input, gasometer, context), - Action::NotePreimage => Self::note_preimage(input, gasometer, context), - Action::NoteImminentPreimage => Self::note_imminent_preimage(input, gasometer, context), + Action::Propose => Self::propose(handle), + Action::Second => Self::second(handle), + Action::StandardVote => Self::standard_vote(handle), + Action::RemoveVote => Self::remove_vote(handle), + Action::Delegate => Self::delegate(handle), + Action::UnDelegate => Self::un_delegate(handle), + Action::Unlock => Self::unlock(handle), + Action::NotePreimage => Self::note_preimage(handle), + Action::NoteImminentPreimage => Self::note_imminent_preimage(handle), } } } @@ -146,33 +130,25 @@ where Runtime::Hash: From, { // The accessors are first. They directly return their result. - - fn public_prop_count(gasometer: &mut Gasometer) -> EvmResult { + fn public_prop_count(handle: &mut impl PrecompileHandle) -> EvmResult { // Fetch data from pallet - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; let prop_count = DemocracyOf::::public_prop_count(); log::trace!(target: "democracy-precompile", "Prop count from pallet is {:?}", prop_count); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(prop_count).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(prop_count).build())) } - fn deposit_of( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { + fn deposit_of(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 1)?; - let prop_index: u32 = input.read(gasometer)?; + input.expect_arguments(1)?; + let prop_index: u32 = input.read()?; // Fetch data from pallet - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; let deposit = DemocracyOf::::deposit_of(prop_index) - .ok_or_else(|| gasometer.revert("No such proposal in pallet democracy"))? + .ok_or_else(|| revert("No such proposal in pallet democracy"))? .1; log::trace!( @@ -180,40 +156,28 @@ where "Deposit of proposal {:?} is {:?}", prop_index, deposit ); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(deposit).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(deposit).build())) } - fn lowest_unbaked(gasometer: &mut Gasometer) -> EvmResult { + fn lowest_unbaked(handle: &mut impl PrecompileHandle) -> EvmResult { // Fetch data from pallet - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; let lowest_unbaked = DemocracyOf::::lowest_unbaked(); log::trace!( target: "democracy-precompile", "lowest unbaked referendum is {:?}", lowest_unbaked ); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(lowest_unbaked).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(lowest_unbaked).build())) } // This method is not yet implemented because it depends on // https://github.com/paritytech/substrate/pull/9565 which has been merged into Substrate // master, but is not on the release branches that we are following - fn ongoing_referendum_info( - _input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - Err(gasometer - .revert("This method depends on https://github.com/paritytech/substrate/pull/9565")) + fn ongoing_referendum_info(_handle: &mut impl PrecompileHandle) -> EvmResult { + Err(revert( + "This method depends on https://github.com/paritytech/substrate/pull/9565", + )) // let mut gasometer = Gasometer::new(target_gas); // // Bound check @@ -261,93 +225,74 @@ where // https://github.com/paritytech/substrate/pull/9565 which has been merged into Substrate // master, but is not on the release branches that we are following fn finished_referendum_info( - _input: &mut EvmDataReader, - gasometer: &mut Gasometer, + _handle: &mut impl PrecompileHandle, ) -> EvmResult { - Err(gasometer - .revert("This method depends on https://github.com/paritytech/substrate/pull/9565")) + Err(revert( + "This method depends on https://github.com/paritytech/substrate/pull/9565", + )) } // The dispatchable wrappers are next. They dispatch a Substrate inner Call. - fn propose( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn propose(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 2)?; + input.expect_arguments(2)?; - let proposal_hash = input.read::(gasometer)?.into(); - let amount = input.read::>(gasometer)?; + let proposal_hash = input.read::()?.into(); + let amount = input.read::>()?; log::trace!( target: "democracy-precompile", "Proposing with hash {:?}, and amount {:?}", proposal_hash, amount ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::propose { proposal_hash, value: amount, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn second( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn second(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 2)?; + input.expect_arguments(2)?; - let proposal = input.read(gasometer)?; - let seconds_upper_bound = input.read(gasometer)?; + let proposal = input.read()?; + let seconds_upper_bound = input.read()?; log::trace!( target: "democracy-precompile", "Seconding proposal {:?}, with bound {:?}", proposal, seconds_upper_bound ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::second { proposal, seconds_upper_bound, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn standard_vote( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn standard_vote(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 4)?; + input.expect_arguments(4)?; - let ref_index = input.read(gasometer)?; - let aye = input.read(gasometer)?; - let balance = input.read(gasometer)?; + let ref_index = input.read()?; + let aye = input.read()?; + let balance = input.read()?; let conviction = input - .read::(gasometer)? + .read::()? .try_into() - .map_err(|_| gasometer.revert("Conviction must be an integer in the range 0-6"))?; + .map_err(|_| revert("Conviction must be an integer in the range 0-6"))?; let vote = AccountVote::Standard { vote: Vote { aye, conviction }, balance, @@ -358,28 +303,20 @@ where aye, ref_index, conviction ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::vote { ref_index, vote }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn remove_vote( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn remove_vote(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 1)?; + input.expect_arguments(1)?; - let referendum_index = input.read(gasometer)?; + let referendum_index = input.read()?; log::trace!( target: "democracy-precompile", @@ -387,82 +324,61 @@ where referendum_index ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::remove_vote { index: referendum_index, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn delegate( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn delegate(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 3)?; + input.expect_arguments(3)?; - let to: H160 = input.read::
(gasometer)?.into(); + let to: H160 = input.read::
()?.into(); let to = Runtime::AddressMapping::into_account_id(to); let conviction = input - .read::(gasometer)? + .read::()? .try_into() - .map_err(|_| gasometer.revert("Conviction must be an integer in the range 0-6"))?; - let balance = input.read(gasometer)?; + .map_err(|_| revert("Conviction must be an integer in the range 0-6"))?; + let balance = input.read()?; log::trace!(target: "democracy-precompile", "Delegating vote to {:?} with balance {:?} and {:?}", to, conviction, balance ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::delegate { to, conviction, balance, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn un_delegate(gasometer: &mut Gasometer, context: &Context) -> EvmResult { - let origin = Runtime::AddressMapping::into_account_id(context.caller); + fn un_delegate(handle: &mut impl PrecompileHandle) -> EvmResult { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::undelegate {}; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn unlock( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn unlock(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // Bound check - input.expect_arguments(gasometer, 1)?; + input.expect_arguments(1)?; - let target: H160 = input.read::
(gasometer)?.into(); + let target: H160 = input.read::
()?.into(); let target = Runtime::AddressMapping::into_account_id(target); log::trace!( @@ -470,66 +386,45 @@ where "Unlocking democracy tokens for {:?}", target ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::unlock { target }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn note_preimage( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - let encoded_proposal: Vec = input.read::(gasometer)?.into(); + fn note_preimage(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + let encoded_proposal: Vec = input.read::()?.into(); log::trace!( target: "democracy-precompile", "Noting preimage {:?}", encoded_proposal ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::note_preimage { encoded_proposal }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn note_imminent_preimage( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - let encoded_proposal: Vec = input.read::(gasometer)?.into(); + fn note_imminent_preimage(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + let encoded_proposal: Vec = input.read::()?.into(); log::trace!( target: "democracy-precompile", "Noting imminent preimage {:?}", encoded_proposal ); - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call = DemocracyCall::::note_imminent_preimage { encoded_proposal }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Stopped, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } } diff --git a/precompiles/pallet-democracy/src/mock.rs b/precompiles/pallet-democracy/src/mock.rs index a2ed70e387..9b8ad35c39 100644 --- a/precompiles/pallet-democracy/src/mock.rs +++ b/precompiles/pallet-democracy/src/mock.rs @@ -28,14 +28,14 @@ use pallet_evm::{ }; use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; -use sp_core::H256; +use sp_core::{H256, U256}; use sp_io; use sp_runtime::{ testing::Header, traits::{BlakeTwo256, IdentityLookup}, }; -pub type AccountId = TestAccount; +pub type AccountId = Account; pub type Balance = u128; pub type BlockNumber = u64; @@ -44,11 +44,6 @@ type Block = frame_system::mocking::MockBlock; pub const PRECOMPILE_ADDRESS: u64 = 1; -/// The democracy precompile is available at address one in the mock runtime. -pub fn precompile_address() -> H160 { - H160::from_low_u64_be(1) -} - #[derive( Eq, PartialEq, @@ -64,7 +59,7 @@ pub fn precompile_address() -> H160 { derive_more::Display, TypeInfo, )] -pub enum TestAccount { +pub enum Account { Alice, Bob, Charlie, @@ -72,14 +67,14 @@ pub enum TestAccount { Precompile, } -impl Default for TestAccount { +impl Default for Account { fn default() -> Self { Self::Bogus } } -impl AddressMapping for TestAccount { - fn into_account_id(h160_account: H160) -> TestAccount { +impl AddressMapping for Account { + fn into_account_id(h160_account: H160) -> Account { match h160_account { a if a == H160::repeat_byte(0xAA) => Self::Alice, a if a == H160::repeat_byte(0xBB) => Self::Bob, @@ -90,20 +85,20 @@ impl AddressMapping for TestAccount { } } -impl From for TestAccount { - fn from(x: H160) -> TestAccount { - TestAccount::into_account_id(x) +impl From for Account { + fn from(x: H160) -> Account { + Account::into_account_id(x) } } -impl From for H160 { - fn from(value: TestAccount) -> H160 { +impl From for H160 { + fn from(value: Account) -> H160 { match value { - TestAccount::Alice => H160::repeat_byte(0xAA), - TestAccount::Bob => H160::repeat_byte(0xBB), - TestAccount::Charlie => H160::repeat_byte(0xCC), - TestAccount::Precompile => H160::from_low_u64_be(PRECOMPILE_ADDRESS), - TestAccount::Bogus => Default::default(), + Account::Alice => H160::repeat_byte(0xAA), + Account::Bob => H160::repeat_byte(0xBB), + Account::Charlie => H160::repeat_byte(0xCC), + Account::Precompile => H160::from_low_u64_be(PRECOMPILE_ADDRESS), + Account::Bogus => Default::default(), } } } @@ -137,7 +132,7 @@ impl frame_system::Config for Runtime { type Call = Call; type Hash = H256; type Hashing = BlakeTwo256; - type AccountId = TestAccount; + type AccountId = Account; type Lookup = IdentityLookup; type Header = Header; type Event = Event; @@ -170,15 +165,16 @@ impl pallet_balances::Config for Runtime { } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub const PrecompilesValue: Precompiles = Precompiles(PhantomData); } impl pallet_evm::Config for Runtime { type FeeCalculator = (); type GasWeightMapping = (); - type CallOrigin = EnsureAddressRoot; - type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = TestAccount; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = Account; type Currency = Balances; type Event = Event; type Runner = pallet_evm::runner::stack::Runner; @@ -186,10 +182,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesValue = PrecompilesValue; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } parameter_types! { @@ -252,7 +247,7 @@ impl pallet_scheduler::Config for Runtime { type PalletsOrigin = OriginCaller; type Call = Call; type MaximumWeight = (); - type ScheduleOrigin = EnsureRoot; + type ScheduleOrigin = EnsureRoot; type MaxScheduledPerBlock = (); type WeightInfo = (); type OriginPrivilegeCmp = EqualPrivilegeOnly; // TODO : Simplest type, maybe there is better ? @@ -267,18 +262,9 @@ impl PrecompileSet for Precompiles where DemocracyWrapper: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == hash(PRECOMPILE_ADDRESS) => Some(DemocracyWrapper::::execute( - input, target_gas, context, is_static, - )), + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == hash(PRECOMPILE_ADDRESS) => Some(DemocracyWrapper::::execute(handle)), _ => None, } } @@ -381,51 +367,31 @@ pub(crate) fn events() -> Vec { .collect::>() } -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> fp_evm::Context { - fp_evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} - #[test] fn test_account_id_mapping_works() { // Bidirectional conversions for normal accounts assert_eq!( - TestAccount::Alice, - TestAccount::into_account_id(TestAccount::Alice.into()) + Account::Alice, + Account::into_account_id(Account::Alice.into()) ); + assert_eq!(Account::Bob, Account::into_account_id(Account::Bob.into())); assert_eq!( - TestAccount::Bob, - TestAccount::into_account_id(TestAccount::Bob.into()) - ); - assert_eq!( - TestAccount::Charlie, - TestAccount::into_account_id(TestAccount::Charlie.into()) + Account::Charlie, + Account::into_account_id(Account::Charlie.into()) ); // Bidirectional conversion between bogus and default H160 - assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::default()) - ); - assert_eq!(H160::default(), TestAccount::Bogus.into()); + assert_eq!(Account::Bogus, Account::into_account_id(H160::default())); + assert_eq!(H160::default(), Account::Bogus.into()); // All other H160s map to bogus + assert_eq!(Account::Bogus, Account::into_account_id(H160::zero())); assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::zero()) - ); - assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::repeat_byte(0x12)) + Account::Bogus, + Account::into_account_id(H160::repeat_byte(0x12)) ); assert_eq!( - TestAccount::Bogus, - TestAccount::into_account_id(H160::repeat_byte(0xFF)) + Account::Bogus, + Account::into_account_id(H160::repeat_byte(0xFF)) ); } diff --git a/precompiles/pallet-democracy/src/tests.rs b/precompiles/pallet-democracy/src/tests.rs index addab43807..e8cb1904a9 100644 --- a/precompiles/pallet-democracy/src/tests.rs +++ b/precompiles/pallet-democracy/src/tests.rs @@ -16,23 +16,22 @@ use crate::{ mock::{ - events, evm_test_context, precompile_address, roll_to, Balances, Call, Democracy, - ExtBuilder, Origin, Precompiles, PrecompilesValue, Runtime, - TestAccount::{self, Alice, Bob, Precompile}, + events, roll_to, + Account::{self, Alice, Bob, Precompile}, + Balances, Call, Democracy, ExtBuilder, Origin, Precompiles, PrecompilesValue, Runtime, }, Action, }; -use fp_evm::{PrecompileFailure, PrecompileOutput}; use frame_support::{assert_ok, dispatch::Dispatchable, traits::Currency}; use pallet_balances::Event as BalancesEvent; use pallet_democracy::{ AccountVote, Call as DemocracyCall, Config as DemocracyConfig, Event as DemocracyEvent, PreimageStatus, Vote, VoteThreshold, Voting, }; -use pallet_evm::{Call as EvmCall, Event as EvmEvent, ExitSucceed, PrecompileSet}; -use precompile_utils::{Address, Bytes, EvmDataWriter}; +use pallet_evm::{Call as EvmCall, Event as EvmEvent}; +use precompile_utils::{prelude::*, testing::*}; use sp_core::{H160, U256}; -use std::{assert_matches::assert_matches, convert::TryInto, str::from_utf8}; +use std::{convert::TryInto, str::from_utf8}; fn precompiles() -> Precompiles { PrecompilesValue::get() @@ -56,38 +55,18 @@ fn evm_call(input: Vec) -> EvmCall { fn selector_less_than_four_bytes() { ExtBuilder::default().build().execute_with(|| { // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - Precompile.into(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"tried to parse selector out of bounds", - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8]) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); }); } #[test] fn no_selector_exists_but_length_is_right() { ExtBuilder::default().build().execute_with(|| { - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - - assert_matches!( - precompiles().execute( - Precompile.into(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"unknown selector", - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8, 4u8]) + .execute_reverts(|output| output == b"unknown selector"); }); } @@ -112,22 +91,16 @@ fn selectors() { #[test] fn prop_count_zero() { ExtBuilder::default().build().execute_with(|| { - // Construct data to read prop count - let input = EvmDataWriter::new_with_selector(Action::PublicPropCount).build(); - - // Expected result is zero. because no props are open yet. - let expected_zero_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Vec::from([0u8; 32]), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that no props have been opened. - assert_eq!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - expected_zero_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::PublicPropCount).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns([0u8; 32].into()) }); } @@ -144,22 +117,15 @@ fn prop_count_non_zero() { }) .dispatch(Origin::signed(Alice))); - // Construct data to read prop count - let input = EvmDataWriter::new_with_selector(Action::PublicPropCount).build(); - - // Expected result is one - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(1u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that no props have been opened. - assert_eq!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::PublicPropCount).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(1u32).build()); }); } @@ -178,60 +144,47 @@ fn deposit_of_non_zero() { }) .dispatch(Origin::signed(Alice))); - // Construct data to read prop count - let input = EvmDataWriter::new_with_selector(Action::DepositOf) - .write(0u32) - .build(); - - // Expected result is Alice's deposit of 1000 - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(1000u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - expected_result - ) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::DepositOf) + .write(0u32) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(1000u32).build()); }); } #[test] fn deposit_of_bad_index() { ExtBuilder::default().build().execute_with(|| { - // Construct data to read prop count - let input = EvmDataWriter::new_with_selector(Action::DepositOf) - .write(10u32) - .build(); - - assert_matches!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"No such proposal in pallet democracy", - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::DepositOf) + .write(10u32) + .build(), + ) + .execute_reverts(|output| output == b"No such proposal in pallet democracy"); }); } #[test] fn lowest_unbaked_zero() { ExtBuilder::default().build().execute_with(|| { - // Construct data to read lowest unbaked referendum index - let input = EvmDataWriter::new_with_selector(Action::LowestUnbaked).build(); - - // Expected result is zero - let expected_zero_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(0u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - expected_zero_result - ) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::LowestUnbaked).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(0u32).build()); }); } @@ -287,21 +240,15 @@ fn lowest_unbaked_non_zero() { + 1000, ); - // Construct data to read lowest unbaked referendum index - let input = EvmDataWriter::new_with_selector(Action::LowestUnbaked).build(); - - // Expected result is one - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(1u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - expected_one_result - ) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::LowestUnbaked).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(1u32).build()); }); } @@ -675,19 +622,15 @@ fn remove_vote_dne() { // Wait until it becomes a referendum roll_to(::LaunchPeriod::get()); - // Construct input data to remove a non-existant vote - let input = EvmDataWriter::new_with_selector(Action::RemoveVote) - .write(0u32) // Referendum index 0 - .build(); - - // Expected result is an error from the pallet - if let Some(Err(PrecompileFailure::Revert { output: e, .. })) = - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false) - { - assert!(from_utf8(&e).unwrap().contains("NotVoter")); - } else { - panic!("Expected an ExitError, but didn't get one.") - } + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::RemoveVote) + .write(0u32) // Referendum index 0 + .build(), + ) + .execute_reverts(|output| from_utf8(&output).unwrap().contains("NotVoter")); }) } @@ -798,17 +741,13 @@ fn undelegate_works() { #[test] fn undelegate_dne() { ExtBuilder::default().build().execute_with(|| { - // Construct input data to un-delegate Alice - let input = EvmDataWriter::new_with_selector(Action::UnDelegate).build(); - - // Expected result is an error from the pallet - if let Some(Err(PrecompileFailure::Revert { output: e, .. })) = - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false) - { - assert!(from_utf8(&e).unwrap().contains("NotDelegating")); - } else { - panic!("Expected an ExitError, but didn't get one.") - } + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::UnDelegate).build(), + ) + .execute_reverts(|output| from_utf8(&output).unwrap().contains("NotDelegating")); }) } @@ -843,10 +782,7 @@ fn unlock_works() { // One possible way to look further: I just noticed there is a `Locks` storage item in // the pallet. // And also, maybe write a test in the pallet to ensure the locks work as expected. - assert_eq!( - >::free_balance(&Alice), - 900 - ); + assert_eq!(>::free_balance(&Alice), 900); // Let time elapse until she wins the vote and gets her tokens locked roll_to(11); @@ -1010,7 +946,7 @@ fn note_preimage_works_with_real_data() { // Make sure the call goes through successfully assert_ok!(Call::Evm(EvmCall::call { source: Alice.into(), - target: precompile_address(), + target: Precompile.into(), input, value: U256::zero(), // No value sent in EVM gas_limit: u64::max_value(), @@ -1036,7 +972,7 @@ fn note_preimage_works_with_real_data() { deposit: expected_deposit } .into(), - EvmEvent::Executed(precompile_address()).into(), + EvmEvent::Executed(Precompile.into()).into(), ] ); diff --git a/precompiles/parachain-staking/Cargo.toml b/precompiles/parachain-staking/Cargo.toml index 42f9869e48..471bcfc11f 100644 --- a/precompiles/parachain-staking/Cargo.toml +++ b/precompiles/parachain-staking/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "parachain-staking-precompiles" +name = "pallet-evm-precompile-parachain-staking" authors = [ "PureStake" ] description = "A Precompile to make parachain staking accessible to pallet-evm" edition = "2021" @@ -11,32 +11,35 @@ num_enum = { version = "0.5.3", default-features = false } rustc-hex = { version = "2.0.1", default-features = false } # Moonbeam -parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } +pallet-parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } precompile-utils = { path = "../utils", default-features = false } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = "0.99" serde = "1.0.100" sha3 = "0.9" +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } + # Substrate -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] @@ -45,7 +48,7 @@ std = [ "fp-evm/std", "frame-support/std", "frame-system/std", - "parachain-staking/std", + "pallet-parachain-staking/std", "precompile-utils/std", "sp-core/std", "sp-std/std", diff --git a/precompiles/parachain-staking/StakingInterface.sol b/precompiles/parachain-staking/StakingInterface.sol index e4ff5c6a04..4f92ec1578 100644 --- a/precompiles/parachain-staking/StakingInterface.sol +++ b/precompiles/parachain-staking/StakingInterface.sol @@ -118,15 +118,6 @@ interface ParachainStaking { view returns (bool); - /// @dev Whether there exists a pending exit for delegator - /// Selector: dc3ec64b - /// @param delegator the delegator that made the exit request - /// @return Whether a pending exit exists for delegator - function delegator_exit_is_pending(address delegator) - external - view - returns (bool); - /// @dev Whether there exists a pending exit for candidate /// Selector: eb613b8a /// @param candidate the candidate for which the exit request was made @@ -245,10 +236,12 @@ interface ParachainStaking { /// @param nominatorNominationCount The number of active nominations to be revoked by caller function leave_nominators(uint256 nominatorNominationCount) external; + /// DEPRECATED, schedule individual revokes instead /// @dev Request to leave the set of delegators /// Selector: 65a5bbd0 function schedule_leave_delegators() external; + /// DEPRECATED, execute individual revokes instead /// @dev Execute request to leave the set of delegators and revoke all delegations /// Selector: a84a7468 /// @param delegator The leaving delegator @@ -258,6 +251,7 @@ interface ParachainStaking { uint256 delegatorDelegationCount ) external; + /// DEPRECATED, cancel individual revokes instead /// @dev Cancel request to leave the set of delegators /// Selector: 2a987643 function cancel_leave_delegators() external; diff --git a/precompiles/parachain-staking/src/lib.rs b/precompiles/parachain-staking/src/lib.rs index 85cff14622..636e50dffe 100644 --- a/precompiles/parachain-staking/src/lib.rs +++ b/precompiles/parachain-staking/src/lib.rs @@ -24,77 +24,50 @@ mod mock; #[cfg(test)] mod tests; -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{PrecompileHandle, PrecompileOutput}; use frame_support::dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::{Currency, Get}; use pallet_evm::AddressMapping; -use pallet_evm::Precompile; -use precompile_utils::{ - Address, EvmData, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, Gasometer, - RuntimeHelper, -}; +use precompile_utils::prelude::*; use sp_core::H160; -use sp_std::{convert::TryInto, fmt::Debug, marker::PhantomData, vec, vec::Vec}; +use sp_std::{convert::TryInto, fmt::Debug, marker::PhantomData, vec::Vec}; -type BalanceOf = <::Currency as Currency< +type BalanceOf = <::Currency as Currency< ::AccountId, >>::Balance; -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] enum Action { - // DEPRECATED - MinNomination = "min_nomination()", MinDelegation = "min_delegation()", Points = "points(uint256)", CandidateCount = "candidate_count()", Round = "round()", - // DEPRECATED - CollatorNominationCount = "collator_nomination_count(address)", - // DEPRECATED - NominatorNominationCount = "nominator_nomination_count(address)", CandidateDelegationCount = "candidate_delegation_count(address)", DelegatorDelegationCount = "delegator_delegation_count(address)", SelectedCandidates = "selected_candidates()", - // DEPRECATED - IsNominator = "is_nominator(address)", IsDelegator = "is_delegator(address)", IsCandidate = "is_candidate(address)", IsSelectedCandidate = "is_selected_candidate(address)", DelegationRequestIsPending = "delegation_request_is_pending(address,address)", - DelegatorExitIsPending = "delegator_exit_is_pending(address)", CandidateExitIsPending = "candidate_exit_is_pending(address)", CandidateRequestIsPending = "candidate_request_is_pending(address)", JoinCandidates = "join_candidates(uint256,uint256)", - // DEPRECATED - LeaveCandidates = "leave_candidates(uint256)", ScheduleLeaveCandidates = "schedule_leave_candidates(uint256)", ExecuteLeaveCandidates = "execute_leave_candidates(address,uint256)", CancelLeaveCandidates = "cancel_leave_candidates(uint256)", GoOffline = "go_offline()", GoOnline = "go_online()", - // DEPRECATED - CandidateBondLess = "candidate_bond_less(uint256)", ScheduleCandidateBondLess = "schedule_candidate_bond_less(uint256)", CandidateBondMore = "candidate_bond_more(uint256)", ExecuteCandidateBondLess = "execute_candidate_bond_less(address)", CancelCandidateBondLess = "cancel_candidate_bond_less()", - // DEPRECATED - Nominate = "nominate(address,uint256,uint256,uint256)", Delegate = "delegate(address,uint256,uint256,uint256)", - // DEPRECATED - LeaveNominators = "leave_nominators(uint256)", ScheduleLeaveDelegators = "schedule_leave_delegators()", ExecuteLeaveDelegators = "execute_leave_delegators(address,uint256)", CancelLeaveDelegators = "cancel_leave_delegators()", - // DEPRECATED - RevokeNomination = "revoke_nomination(address)", ScheduleRevokeDelegation = "schedule_revoke_delegation(address)", - // DEPRECATED - NominatorBondLess = "nominator_bond_less(address,uint256)", ScheduleDelegatorBondLess = "schedule_delegator_bond_less(address,uint256)", - // DEPRECATED - NominatorBondMore = "nominator_bond_more(address,uint256)", DelegatorBondMore = "delegator_bond_more(address,uint256)", ExecuteDelegationRequest = "execute_delegation_request(address,address)", CancelDelegationRequest = "cancel_delegation_request(address)", @@ -109,567 +82,404 @@ enum Action { /// supporters who want to donate toward a perpetual nomination fund. pub struct ParachainStakingWrapper(PhantomData); -impl Precompile for ParachainStakingWrapper +// TODO: Migrate to precompile_utils::Precompile. +impl pallet_evm::Precompile for ParachainStakingWrapper where - Runtime: parachain_staking::Config + pallet_evm::Config, + Runtime: pallet_parachain_staking::Config + pallet_evm::Config, BalanceOf: EvmData, Runtime::AccountId: Into, Runtime::Call: Dispatchable + GetDispatchInfo, ::Origin: From>, - Runtime::Call: From>, + Runtime::Call: From>, { - fn execute( - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; - - let (mut input, selector) = EvmDataReader::new_with_selector(gasometer, input)?; - let input = &mut input; - - gasometer.check_function_modifier( - context, - is_static, - match selector { - Action::IsNominator - | Action::IsDelegator - | Action::IsCandidate - | Action::IsSelectedCandidate - | Action::Points - | Action::MinNomination - | Action::MinDelegation - | Action::CandidateCount - | Action::CollatorNominationCount - | Action::CandidateDelegationCount - | Action::NominatorNominationCount - | Action::DelegatorDelegationCount - | Action::SelectedCandidates => FunctionModifier::View, - _ => FunctionModifier::NonPayable, - }, - )?; + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector()?; + + handle.check_function_modifier(match selector { + // Views + Action::IsDelegator + | Action::IsCandidate + | Action::IsSelectedCandidate + | Action::MinDelegation + | Action::Points + | Action::CandidateCount + | Action::Round + | Action::CandidateDelegationCount + | Action::DelegatorDelegationCount + | Action::SelectedCandidates + | Action::DelegationRequestIsPending + | Action::CandidateExitIsPending + | Action::CandidateRequestIsPending => FunctionModifier::View, + // Non-payables + Action::JoinCandidates + | Action::ScheduleLeaveCandidates + | Action::ExecuteLeaveCandidates + | Action::CancelLeaveCandidates + | Action::GoOffline + | Action::GoOnline + | Action::ScheduleCandidateBondLess + | Action::CandidateBondMore + | Action::ExecuteCandidateBondLess + | Action::CancelCandidateBondLess + | Action::Delegate + | Action::ScheduleLeaveDelegators + | Action::ExecuteLeaveDelegators + | Action::CancelLeaveDelegators + | Action::ScheduleRevokeDelegation + | Action::ScheduleDelegatorBondLess + | Action::DelegatorBondMore + | Action::ExecuteDelegationRequest + | Action::CancelDelegationRequest => FunctionModifier::NonPayable, + })?; // Return early if storage getter; return (origin, call) if dispatchable let (origin, call) = match selector { - // DEPRECATED - Action::MinNomination => return Self::min_delegation(gasometer), - Action::MinDelegation => return Self::min_delegation(gasometer), - Action::Points => return Self::points(input, gasometer), - Action::CandidateCount => return Self::candidate_count(gasometer), - Action::Round => return Self::round(gasometer), - // DEPRECATED - Action::CollatorNominationCount => { - return Self::candidate_delegation_count(input, gasometer) - } - // DEPRECATED - Action::NominatorNominationCount => { - return Self::delegator_delegation_count(input, gasometer) - } - Action::CandidateDelegationCount => { - return Self::candidate_delegation_count(input, gasometer) - } - Action::DelegatorDelegationCount => { - return Self::delegator_delegation_count(input, gasometer) - } - Action::SelectedCandidates => return Self::selected_candidates(gasometer), - // DEPRECATED - Action::IsNominator => return Self::is_delegator(input, gasometer), - Action::IsDelegator => return Self::is_delegator(input, gasometer), - Action::IsCandidate => return Self::is_candidate(input, gasometer), - Action::IsSelectedCandidate => return Self::is_selected_candidate(input, gasometer), + Action::MinDelegation => return Self::min_delegation(handle), + Action::Points => return Self::points(handle), + Action::CandidateCount => return Self::candidate_count(handle), + Action::Round => return Self::round(handle), + Action::CandidateDelegationCount => return Self::candidate_delegation_count(handle), + Action::DelegatorDelegationCount => return Self::delegator_delegation_count(handle), + Action::SelectedCandidates => return Self::selected_candidates(handle), + Action::IsDelegator => return Self::is_delegator(handle), + Action::IsCandidate => return Self::is_candidate(handle), + Action::IsSelectedCandidate => return Self::is_selected_candidate(handle), Action::DelegationRequestIsPending => { - return Self::delegation_request_is_pending(input, gasometer) - } - Action::DelegatorExitIsPending => { - return Self::delegator_exit_is_pending(input, gasometer) - } - Action::CandidateExitIsPending => { - return Self::candidate_exit_is_pending(input, gasometer) - } - Action::CandidateRequestIsPending => { - return Self::candidate_request_is_pending(input, gasometer) + return Self::delegation_request_is_pending(handle) } + Action::CandidateExitIsPending => return Self::candidate_exit_is_pending(handle), + Action::CandidateRequestIsPending => return Self::candidate_request_is_pending(handle), // runtime methods (dispatchables) - Action::JoinCandidates => Self::join_candidates(input, gasometer, context)?, - // DEPRECATED - Action::LeaveCandidates => Self::schedule_leave_candidates(input, gasometer, context)?, - Action::ScheduleLeaveCandidates => { - Self::schedule_leave_candidates(input, gasometer, context)? - } - Action::ExecuteLeaveCandidates => { - Self::execute_leave_candidates(input, gasometer, context)? - } - Action::CancelLeaveCandidates => { - Self::cancel_leave_candidates(input, gasometer, context)? - } - Action::GoOffline => Self::go_offline(context)?, - Action::GoOnline => Self::go_online(context)?, - // DEPRECATED - Action::CandidateBondLess => { - Self::schedule_candidate_bond_less(input, gasometer, context)? - } - Action::ScheduleCandidateBondLess => { - Self::schedule_candidate_bond_less(input, gasometer, context)? - } - Action::CandidateBondMore => Self::candidate_bond_more(input, gasometer, context)?, - Action::ExecuteCandidateBondLess => { - Self::execute_candidate_bond_less(input, gasometer, context)? - } - Action::CancelCandidateBondLess => Self::cancel_candidate_bond_less(context)?, - // DEPRECATED - Action::Nominate => Self::delegate(input, gasometer, context)?, - Action::Delegate => Self::delegate(input, gasometer, context)?, - // DEPRECATED - Action::LeaveNominators => Self::schedule_leave_delegators(context)?, - Action::ScheduleLeaveDelegators => Self::schedule_leave_delegators(context)?, - Action::ExecuteLeaveDelegators => { - Self::execute_leave_delegators(input, gasometer, context)? - } - Action::CancelLeaveDelegators => Self::cancel_leave_delegators(context)?, - // DEPRECATED - Action::RevokeNomination => { - Self::schedule_revoke_delegation(input, gasometer, context)? - } - Action::ScheduleRevokeDelegation => { - Self::schedule_revoke_delegation(input, gasometer, context)? - } - // DEPRECATED - Action::NominatorBondLess => { - Self::schedule_delegator_bond_less(input, gasometer, context)? - } - Action::ScheduleDelegatorBondLess => { - Self::schedule_delegator_bond_less(input, gasometer, context)? - } - // DEPRECATED - Action::NominatorBondMore => Self::delegator_bond_more(input, gasometer, context)?, - Action::DelegatorBondMore => Self::delegator_bond_more(input, gasometer, context)?, - Action::ExecuteDelegationRequest => { - Self::execute_delegation_request(input, gasometer, context)? - } - Action::CancelDelegationRequest => { - Self::cancel_delegation_request(input, gasometer, context)? - } + Action::JoinCandidates => Self::join_candidates(handle)?, + Action::ScheduleLeaveCandidates => Self::schedule_leave_candidates(handle)?, + Action::ExecuteLeaveCandidates => Self::execute_leave_candidates(handle)?, + Action::CancelLeaveCandidates => Self::cancel_leave_candidates(handle)?, + Action::GoOffline => Self::go_offline(handle)?, + Action::GoOnline => Self::go_online(handle)?, + Action::ScheduleCandidateBondLess => Self::schedule_candidate_bond_less(handle)?, + Action::CandidateBondMore => Self::candidate_bond_more(handle)?, + Action::ExecuteCandidateBondLess => Self::execute_candidate_bond_less(handle)?, + Action::CancelCandidateBondLess => Self::cancel_candidate_bond_less(handle)?, + Action::Delegate => Self::delegate(handle)?, + Action::ScheduleLeaveDelegators => Self::schedule_leave_delegators(handle)?, + Action::ExecuteLeaveDelegators => Self::execute_leave_delegators(handle)?, + Action::CancelLeaveDelegators => Self::cancel_leave_delegators(handle)?, + Action::ScheduleRevokeDelegation => Self::schedule_revoke_delegation(handle)?, + Action::ScheduleDelegatorBondLess => Self::schedule_delegator_bond_less(handle)?, + Action::DelegatorBondMore => Self::delegator_bond_more(handle)?, + Action::ExecuteDelegationRequest => Self::execute_delegation_request(handle)?, + Action::CancelDelegationRequest => Self::cancel_delegation_request(handle)?, }; // Dispatch call (if enough gas). - RuntimeHelper::::try_dispatch(origin, call, gasometer)?; - - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: vec![], - logs: vec![], - }) + RuntimeHelper::::try_dispatch(handle, origin, call)?; + + Ok(succeed([])) } } impl ParachainStakingWrapper where - Runtime: parachain_staking::Config + pallet_evm::Config, + Runtime: pallet_parachain_staking::Config + pallet_evm::Config, BalanceOf: EvmData, Runtime::AccountId: Into, Runtime::Call: Dispatchable + GetDispatchInfo, ::Origin: From>, - Runtime::Call: From>, + Runtime::Call: From>, { // Constants - fn min_delegation(gasometer: &mut Gasometer) -> EvmResult { + fn min_delegation(handle: &mut impl PrecompileHandle) -> EvmResult { // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let min_nomination: u128 = <::MinDelegation as Get< - BalanceOf, - >>::get() - .try_into() - .map_err(|_| gasometer.revert("Amount is too large for provided balance type"))?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let min_nomination: u128 = + <::MinDelegation as Get< + BalanceOf, + >>::get() + .try_into() + .map_err(|_| revert("Amount is too large for provided balance type"))?; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(min_nomination).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(min_nomination).build())) } // Storage Getters - fn points(input: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { + fn points(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let round = input.read::(gasometer)?; + input.expect_arguments(1)?; + let round = input.read::()?; // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let points: u32 = parachain_staking::Pallet::::points(round); + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let points: u32 = pallet_parachain_staking::Pallet::::points(round); // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(points).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(points).build())) } - fn candidate_count(gasometer: &mut Gasometer) -> EvmResult { + fn candidate_count(handle: &mut impl PrecompileHandle) -> EvmResult { // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let candidate_count: u32 = >::candidate_pool() + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let candidate_count: u32 = >::candidate_pool() .0 .len() as u32; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(candidate_count).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(candidate_count).build())) } - fn round(gasometer: &mut Gasometer) -> EvmResult { + fn round(handle: &mut impl PrecompileHandle) -> EvmResult { // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let round: u32 = >::round().current; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let round: u32 = >::round().current; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(round).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(round).build())) } fn candidate_delegation_count( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let address = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let address = input.read::
()?.0; let address = Runtime::AddressMapping::into_account_id(address); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let result = - if let Some(state) = >::candidate_info(&address) { - let candidate_delegation_count: u32 = state.delegation_count; - - log::trace!( - target: "staking-precompile", - "Result from pallet is {:?}", - candidate_delegation_count - ); + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let result = if let Some(state) = + >::candidate_info(&address) + { + let candidate_delegation_count: u32 = state.delegation_count; + + log::trace!( + target: "staking-precompile", + "Result from pallet is {:?}", candidate_delegation_count - } else { - log::trace!( - target: "staking-precompile", - "Candidate {:?} not found, so delegation count is 0", - address - ); - 0u32 - }; + ); + candidate_delegation_count + } else { + log::trace!( + target: "staking-precompile", + "Candidate {:?} not found, so delegation count is 0", + address + ); + 0u32 + }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(result).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(result).build())) } fn delegator_delegation_count( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let address = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let address = input.read::
()?.0; let address = Runtime::AddressMapping::into_account_id(address); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let result = - if let Some(state) = >::delegator_state(&address) { - let delegator_delegation_count: u32 = state.delegations.0.len() as u32; - - log::trace!( - target: "staking-precompile", - "Result from pallet is {:?}", - delegator_delegation_count - ); + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let result = if let Some(state) = + >::delegator_state(&address) + { + let delegator_delegation_count: u32 = state.delegations.0.len() as u32; + log::trace!( + target: "staking-precompile", + "Result from pallet is {:?}", delegator_delegation_count - } else { - log::trace!( - target: "staking-precompile", - "Delegator {:?} not found, so delegation count is 0", - address - ); - 0u32 - }; + ); + + delegator_delegation_count + } else { + log::trace!( + target: "staking-precompile", + "Delegator {:?} not found, so delegation count is 0", + address + ); + 0u32 + }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(result).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(result).build())) } - fn selected_candidates(gasometer: &mut Gasometer) -> EvmResult { + fn selected_candidates(handle: &mut impl PrecompileHandle) -> EvmResult { // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; let selected_candidates: Vec
= - parachain_staking::Pallet::::selected_candidates() + pallet_parachain_staking::Pallet::::selected_candidates() .into_iter() .map(|address| Address(address.into())) .collect(); + // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(selected_candidates).build(), - logs: vec![], - }) + Ok(succeed( + EvmDataWriter::new().write(selected_candidates).build(), + )) } // Role Verifiers - fn is_delegator( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { + fn is_delegator(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let address = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let address = input.read::
()?.0; let address = Runtime::AddressMapping::into_account_id(address); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let is_delegator = parachain_staking::Pallet::::is_delegator(&address); + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let is_delegator = pallet_parachain_staking::Pallet::::is_delegator(&address); // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(is_delegator).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(is_delegator).build())) } - fn is_candidate( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { + fn is_candidate(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let address = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let address = input.read::
()?.0; let address = Runtime::AddressMapping::into_account_id(address); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let is_candidate = parachain_staking::Pallet::::is_candidate(&address); + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let is_candidate = pallet_parachain_staking::Pallet::::is_candidate(&address); // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(is_candidate).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(is_candidate).build())) } - fn is_selected_candidate( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { + fn is_selected_candidate(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let address = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let address = input.read::
()?.0; let address = Runtime::AddressMapping::into_account_id(address); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let is_selected = parachain_staking::Pallet::::is_selected_candidate(&address); + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let is_selected = + pallet_parachain_staking::Pallet::::is_selected_candidate(&address); // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(is_selected).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(is_selected).build())) } fn delegation_request_is_pending( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 2)?; + input.expect_arguments(2)?; // First argument is delegator - let delegator = - Runtime::AddressMapping::into_account_id(input.read::
(gasometer)?.0); + let delegator = Runtime::AddressMapping::into_account_id(input.read::
()?.0); // Second argument is candidate - let candidate = - Runtime::AddressMapping::into_account_id(input.read::
(gasometer)?.0); + let candidate = Runtime::AddressMapping::into_account_id(input.read::
()?.0); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // If we are not able to get delegator state, we return false // Users can call `is_delegator` to determine when this happens - let pending = - >::delegation_request_exists(&candidate, &delegator); + let pending = >::delegation_request_exists( + &candidate, &delegator, + ); // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(pending).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(pending).build())) } - fn delegator_exit_is_pending( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + fn candidate_exit_is_pending( + handle: &mut impl PrecompileHandle, ) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; + input.expect_arguments(1)?; - // Only argument is delegator - let delegator = - Runtime::AddressMapping::into_account_id(input.read::
(gasometer)?.0); + // Only argument is candidate + let candidate = Runtime::AddressMapping::into_account_id(input.read::
()?.0); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // If we are not able to get delegator state, we return false - // Users can call `is_delegator` to determine when this happens + // Users can call `is_candidate` to determine when this happens let pending = if let Some(state) = - >::delegator_state(&delegator) + >::candidate_info(&candidate) { state.is_leaving() } else { log::trace!( target: "staking-precompile", - "Delegator state for {:?} not found, so pending exit is false", - delegator + "Candidate state for {:?} not found, so pending exit is false", + candidate ); false }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(pending).build(), - logs: vec![], - }) - } - - fn candidate_exit_is_pending( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - // Read input. - input.expect_arguments(gasometer, 1)?; - - // Only argument is candidate - let candidate = - Runtime::AddressMapping::into_account_id(input.read::
(gasometer)?.0); - - // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - - // If we are not able to get delegator state, we return false - // Users can call `is_candidate` to determine when this happens - let pending = - if let Some(state) = >::candidate_info(&candidate) { - state.is_leaving() - } else { - log::trace!( - target: "staking-precompile", - "Candidate state for {:?} not found, so pending exit is false", - candidate - ); - false - }; - - // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(pending).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(pending).build())) } fn candidate_request_is_pending( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, + handle: &mut impl PrecompileHandle, ) -> EvmResult { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; + input.expect_arguments(1)?; // Only argument is candidate - let candidate = - Runtime::AddressMapping::into_account_id(input.read::
(gasometer)?.0); + let candidate = Runtime::AddressMapping::into_account_id(input.read::
()?.0); // Fetch info. - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; // If we are not able to get candidate metadata, we return false // Users can call `is_candidate` to determine when this happens - let pending = - if let Some(state) = >::candidate_info(&candidate) { - state.request.is_some() - } else { - log::trace!( - target: "staking-precompile", - "Candidate metadata for {:?} not found, so pending request is false", - candidate - ); - false - }; + let pending = if let Some(state) = + >::candidate_info(&candidate) + { + state.request.is_some() + } else { + log::trace!( + target: "staking-precompile", + "Candidate metadata for {:?} not found, so pending request is false", + candidate + ); + false + }; // Build output. - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(pending).build(), - logs: vec![], - }) + Ok(succeed(EvmDataWriter::new().write(pending).build())) } // Runtime Methods (dispatchables) fn join_candidates( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 2)?; - let bond: BalanceOf = input.read(gasometer)?; - let candidate_count = input.read(gasometer)?; + input.expect_arguments(2)?; + let bond: BalanceOf = input.read()?; + let candidate_count = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::join_candidates { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::join_candidates { bond, candidate_count, }; @@ -679,43 +489,42 @@ where } fn schedule_leave_candidates( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let candidate_count = input.read(gasometer)?; + input.expect_arguments(1)?; + let candidate_count = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = - parachain_staking::Call::::schedule_leave_candidates { candidate_count }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::schedule_leave_candidates { + candidate_count, + }; // Return call information Ok((Some(origin).into(), call)) } fn execute_leave_candidates( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let candidate = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let candidate = input.read::
()?.0; let candidate = Runtime::AddressMapping::into_account_id(candidate); - let candidate_delegation_count = input.read(gasometer)?; + let candidate_delegation_count = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::execute_leave_candidates { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::execute_leave_candidates { candidate, candidate_delegation_count, }; @@ -725,147 +534,143 @@ where } fn cancel_leave_candidates( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let candidate_count = input.read(gasometer)?; + input.expect_arguments(1)?; + let candidate_count = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::cancel_leave_candidates { candidate_count }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = + pallet_parachain_staking::Call::::cancel_leave_candidates { candidate_count }; // Return call information Ok((Some(origin).into(), call)) } fn go_offline( - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::go_offline {}; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::go_offline {}; // Return call information Ok((Some(origin).into(), call)) } fn go_online( - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::go_online {}; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::go_online {}; // Return call information Ok((Some(origin).into(), call)) } fn candidate_bond_more( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let more: BalanceOf = input.read(gasometer)?; + input.expect_arguments(1)?; + let more: BalanceOf = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::candidate_bond_more { more }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::candidate_bond_more { more }; // Return call information Ok((Some(origin).into(), call)) } fn schedule_candidate_bond_less( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let less: BalanceOf = input.read(gasometer)?; + input.expect_arguments(1)?; + let less: BalanceOf = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::schedule_candidate_bond_less { less }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::schedule_candidate_bond_less { less }; // Return call information Ok((Some(origin).into(), call)) } fn execute_candidate_bond_less( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let candidate = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let candidate = input.read::
()?.0; let candidate = Runtime::AddressMapping::into_account_id(candidate); // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::execute_candidate_bond_less { candidate }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = + pallet_parachain_staking::Call::::execute_candidate_bond_less { candidate }; // Return call information Ok((Some(origin).into(), call)) } fn cancel_candidate_bond_less( - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::cancel_candidate_bond_less {}; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::cancel_candidate_bond_less {}; // Return call information Ok((Some(origin).into(), call)) } fn delegate( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 4)?; - let candidate = - Runtime::AddressMapping::into_account_id(input.read::
(gasometer)?.0); - let amount: BalanceOf = input.read(gasometer)?; - let candidate_delegation_count = input.read(gasometer)?; - let delegation_count = input.read(gasometer)?; + input.expect_arguments(4)?; + let candidate = Runtime::AddressMapping::into_account_id(input.read::
()?.0); + let amount: BalanceOf = input.read()?; + let candidate_delegation_count = input.read()?; + let delegation_count = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::delegate { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::delegate { candidate, amount, candidate_delegation_count, @@ -877,36 +682,35 @@ where } fn schedule_leave_delegators( - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::schedule_leave_delegators {}; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::schedule_leave_delegators {}; // Return call information Ok((Some(origin).into(), call)) } fn execute_leave_delegators( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 2)?; - let delegator = input.read::
(gasometer)?.0; + input.expect_arguments(2)?; + let delegator = input.read::
()?.0; let delegator = Runtime::AddressMapping::into_account_id(delegator); - let delegation_count = input.read(gasometer)?; + let delegation_count = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::execute_leave_delegators { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::execute_leave_delegators { delegator, delegation_count, }; @@ -916,103 +720,103 @@ where } fn cancel_leave_delegators( - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::cancel_leave_delegators {}; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::cancel_leave_delegators {}; // Return call information Ok((Some(origin).into(), call)) } fn schedule_revoke_delegation( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let collator = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let collator = input.read::
()?.0; let collator = Runtime::AddressMapping::into_account_id(collator); // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::schedule_revoke_delegation { collator }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = + pallet_parachain_staking::Call::::schedule_revoke_delegation { collator }; // Return call information Ok((Some(origin).into(), call)) } fn delegator_bond_more( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 2)?; - let candidate = input.read::
(gasometer)?.0; + input.expect_arguments(2)?; + let candidate = input.read::
()?.0; let candidate = Runtime::AddressMapping::into_account_id(candidate); - let more: BalanceOf = input.read(gasometer)?; + let more: BalanceOf = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::delegator_bond_more { candidate, more }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = + pallet_parachain_staking::Call::::delegator_bond_more { candidate, more }; // Return call information Ok((Some(origin).into(), call)) } fn schedule_delegator_bond_less( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 2)?; - let candidate = input.read::
(gasometer)?.0; + input.expect_arguments(2)?; + let candidate = input.read::
()?.0; let candidate = Runtime::AddressMapping::into_account_id(candidate); - let less: BalanceOf = input.read(gasometer)?; + let less: BalanceOf = input.read()?; // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = - parachain_staking::Call::::schedule_delegator_bond_less { candidate, less }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::schedule_delegator_bond_less { + candidate, + less, + }; // Return call information Ok((Some(origin).into(), call)) } fn execute_delegation_request( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 2)?; - let delegator = input.read::
(gasometer)?.0; + input.expect_arguments(2)?; + let delegator = input.read::
()?.0; let delegator = Runtime::AddressMapping::into_account_id(delegator); - let candidate = input.read::
(gasometer)?.0; + let candidate = input.read::
()?.0; let candidate = Runtime::AddressMapping::into_account_id(candidate); // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::execute_delegation_request { + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_parachain_staking::Call::::execute_delegation_request { delegator, candidate, }; @@ -1022,21 +826,21 @@ where } fn cancel_delegation_request( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult<( ::Origin, - parachain_staking::Call, + pallet_parachain_staking::Call, )> { + let mut input = EvmDataReader::new_skip_selector(handle.input())?; // Read input. - input.expect_arguments(gasometer, 1)?; - let candidate = input.read::
(gasometer)?.0; + input.expect_arguments(1)?; + let candidate = input.read::
()?.0; let candidate = Runtime::AddressMapping::into_account_id(candidate); // Build call with origin. - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = parachain_staking::Call::::cancel_delegation_request { candidate }; + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = + pallet_parachain_staking::Call::::cancel_delegation_request { candidate }; // Return call information Ok((Some(origin).into(), call)) diff --git a/precompiles/parachain-staking/src/mock.rs b/precompiles/parachain-staking/src/mock.rs index a4ac28cc90..89273a062f 100644 --- a/precompiles/parachain-staking/src/mock.rs +++ b/precompiles/parachain-staking/src/mock.rs @@ -22,10 +22,12 @@ use frame_support::{ traits::{Everything, GenesisBuild, OnFinalize, OnInitialize}, weights::Weight, }; -use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot, PrecompileSet}; -use parachain_staking::{AwardedPts, InflationInfo, Points, Range}; +use pallet_evm::{ + AddressMapping, EnsureAddressNever, EnsureAddressRoot, Precompile, PrecompileSet, +}; +use pallet_parachain_staking::{AwardedPts, InflationInfo, Points, Range}; use serde::{Deserialize, Serialize}; -use sp_core::{H160, H256}; +use sp_core::{H160, H256, U256}; use sp_io; use sp_runtime::{ testing::Header, @@ -33,7 +35,7 @@ use sp_runtime::{ Perbill, Percent, }; -pub type AccountId = TestAccount; +pub type AccountId = Account; pub type Balance = u128; pub type BlockNumber = u64; @@ -50,7 +52,7 @@ construct_runtime!( Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, Evm: pallet_evm::{Pallet, Call, Storage, Event}, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, - ParachainStaking: parachain_staking::{Pallet, Call, Storage, Config, Event}, + ParachainStaking: pallet_parachain_staking::{Pallet, Call, Storage, Config, Event}, } ); @@ -70,55 +72,47 @@ construct_runtime!( derive_more::Display, scale_info::TypeInfo, )] -pub enum TestAccount { +pub enum Account { Alice, Bob, Charlie, Bogus, + Precompile, } -impl Default for TestAccount { +impl Default for Account { fn default() -> Self { Self::Bogus } } -impl Into for TestAccount { +impl Into for Account { fn into(self) -> H160 { match self { - TestAccount::Alice => H160::repeat_byte(0xAA), - TestAccount::Bob => H160::repeat_byte(0xBB), - TestAccount::Charlie => H160::repeat_byte(0xCC), - TestAccount::Bogus => H160::repeat_byte(0xDD), + Account::Alice => H160::repeat_byte(0xAA), + Account::Bob => H160::repeat_byte(0xBB), + Account::Charlie => H160::repeat_byte(0xCC), + Account::Bogus => H160::repeat_byte(0xDD), + Account::Precompile => H160::from_low_u64_be(1), } } } -impl AddressMapping for TestAccount { - fn into_account_id(h160_account: H160) -> TestAccount { +impl AddressMapping for Account { + fn into_account_id(h160_account: H160) -> Account { match h160_account { a if a == H160::repeat_byte(0xAA) => Self::Alice, a if a == H160::repeat_byte(0xBB) => Self::Bob, a if a == H160::repeat_byte(0xCC) => Self::Charlie, + a if a == H160::from_low_u64_be(1) => Self::Precompile, _ => Self::Bogus, } } } -impl TestAccount { - pub(crate) fn to_h160(&self) -> H160 { - match self { - Self::Alice => H160::repeat_byte(0xAA), - Self::Bob => H160::repeat_byte(0xBB), - Self::Charlie => H160::repeat_byte(0xCC), - Self::Bogus => Default::default(), - } - } -} - -impl From for TestAccount { - fn from(x: H160) -> TestAccount { - TestAccount::into_account_id(x) +impl From for Account { + fn from(x: H160) -> Account { + Account::into_account_id(x) } } @@ -182,18 +176,9 @@ impl PrecompileSet for TestPrecompiles where ParachainStakingWrapper: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == precompile_address() => Some(ParachainStakingWrapper::::execute( - input, target_gas, context, is_static, - )), + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == precompile_address() => Some(ParachainStakingWrapper::::execute(handle)), _ => None, } } @@ -204,6 +189,7 @@ where } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub PrecompilesValue: TestPrecompiles = TestPrecompiles(Default::default()); } @@ -220,10 +206,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesValue = PrecompilesValue; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } parameter_types! { @@ -255,7 +240,7 @@ parameter_types! { pub const MinDelegatorStk: u128 = 5; pub const MinDelegation: u128 = 3; } -impl parachain_staking::Config for Runtime { +impl pallet_parachain_staking::Config for Runtime { type Event = Event; type Currency = Balances; type MonetaryGovernanceOrigin = frame_system::EnsureRoot; @@ -357,7 +342,7 @@ impl ExtBuilder { } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); - parachain_staking::GenesisConfig:: { + pallet_parachain_staking::GenesisConfig:: { candidates: self.collators, delegations: self.delegations, inflation_config: self.inflation, @@ -372,7 +357,7 @@ impl ExtBuilder { } // Sets the same storage changes as EventHandler::note_author impl -pub(crate) fn set_points(round: u32, acc: TestAccount, pts: u32) { +pub(crate) fn set_points(round: u32, acc: Account, pts: u32) { >::mutate(round, |p| *p += pts); >::mutate(round, acc, |p| *p += pts); } @@ -402,14 +387,3 @@ pub(crate) fn events() -> Vec { .map(|r| r.event) .collect::>() } - -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> fp_evm::Context { - fp_evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} diff --git a/precompiles/parachain-staking/src/tests.rs b/precompiles/parachain-staking/src/tests.rs index 5a090ce54a..d02174dcf4 100644 --- a/precompiles/parachain-staking/src/tests.rs +++ b/precompiles/parachain-staking/src/tests.rs @@ -15,27 +15,25 @@ // along with Moonbeam. If not, see . use crate::mock::{ - events, evm_test_context, precompile_address, roll_to, roll_to_round_begin, set_points, Call, - ExtBuilder, Origin, ParachainStaking, PrecompilesValue, Runtime, TestAccount, TestPrecompiles, + events, roll_to, roll_to_round_begin, set_points, + Account::{self, Alice, Bob, Bogus, Charlie, Precompile}, + Call, ExtBuilder, Origin, ParachainStaking, PrecompilesValue, Runtime, TestPrecompiles, }; -use crate::{Action, PrecompileOutput}; -use fp_evm::{Context, PrecompileFailure}; +use crate::Action; use frame_support::{assert_ok, dispatch::Dispatchable}; -use pallet_evm::{Call as EvmCall, ExitSucceed, PrecompileSet}; -use parachain_staking::Event as StakingEvent; -use precompile_utils::{Address, EvmDataWriter}; -use sha3::{Digest, Keccak256}; +use pallet_evm::Call as EvmCall; +use pallet_parachain_staking::Event as StakingEvent; +use precompile_utils::{prelude::*, testing::*}; use sp_core::U256; -use std::assert_matches::assert_matches; fn precompiles() -> TestPrecompiles { PrecompilesValue::get() } -fn evm_call(source: TestAccount, input: Vec) -> EvmCall { +fn evm_call(source: Account, input: Vec) -> EvmCall { EvmCall::call { - source: source.to_h160(), - target: precompile_address(), + source: source.into(), + target: Precompile.into(), input, value: U256::zero(), // No value sent in EVM gas_limit: u64::max_value(), @@ -48,61 +46,38 @@ fn evm_call(source: TestAccount, input: Vec) -> EvmCall { #[test] fn selectors() { - // DEPRECATED - assert_eq!(Action::IsNominator as u32, 0x8e5080e7); assert_eq!(Action::IsDelegator as u32, 0x1f030587); assert_eq!(Action::IsCandidate as u32, 0x8545c833); assert_eq!(Action::IsSelectedCandidate as u32, 0x8f6d27c7); assert_eq!(Action::Points as u32, 0x9799b4e7); - // DEPRECATED - assert_eq!(Action::MinNomination as u32, 0xc9f593b2); assert_eq!(Action::MinDelegation as u32, 0x72ce8933); assert_eq!(Action::CandidateCount as u32, 0x4b1c4c29); assert_eq!(Action::Round as u32, 0x146ca531); - assert_eq!(Action::CollatorNominationCount as u32, 0x0ad6a7be); assert_eq!(Action::CandidateDelegationCount as u32, 0x815b796c); - assert_eq!(Action::NominatorNominationCount as u32, 0xdae5659b); assert_eq!(Action::DelegatorDelegationCount as u32, 0xfbc51bca); assert_eq!(Action::SelectedCandidates as u32, 0x89f47a21); assert_eq!(Action::DelegationRequestIsPending as u32, 0x192e1db3); - assert_eq!(Action::DelegatorExitIsPending as u32, 0xdc3ec64b); assert_eq!(Action::CandidateExitIsPending as u32, 0xeb613b8a); assert_eq!(Action::CandidateRequestIsPending as u32, 0x26ab05fb); assert_eq!(Action::JoinCandidates as u32, 0x0a1bff60); - // DEPRECATED - assert_eq!(Action::LeaveCandidates as u32, 0x72b02a31); assert_eq!(Action::ScheduleLeaveCandidates as u32, 0x60afbac6); assert_eq!(Action::ExecuteLeaveCandidates as u32, 0x3fdc4c30); assert_eq!(Action::CancelLeaveCandidates as u32, 0x0880b3e2); assert_eq!(Action::GoOffline as u32, 0x767e0450); assert_eq!(Action::GoOnline as u32, 0xd2f73ceb); assert_eq!(Action::CandidateBondMore as u32, 0xc57bd3a8); - // DEPRECATED - assert_eq!(Action::CandidateBondLess as u32, 0x289b6ba7); assert_eq!(Action::ScheduleCandidateBondLess as u32, 0x034c47bc); assert_eq!(Action::ExecuteCandidateBondLess as u32, 0xa9a2b8b7); assert_eq!(Action::CancelCandidateBondLess as u32, 0x583d0fdc); - // DEPRECATED - assert_eq!(Action::Nominate as u32, 0x49df6eb3); assert_eq!(Action::Delegate as u32, 0x829f5ee3); - // DEPRECATED - assert_eq!(Action::LeaveNominators as u32, 0xb71d2153); assert_eq!(Action::ScheduleLeaveDelegators as u32, 0x65a5bbd0); assert_eq!(Action::ExecuteLeaveDelegators as u32, 0xa84a7468); assert_eq!(Action::CancelLeaveDelegators as u32, 0x2a987643); - // DEPRECATED - assert_eq!(Action::RevokeNomination as u32, 0x4b65c34b); assert_eq!(Action::ScheduleRevokeDelegation as u32, 0x22266e75); assert_eq!(Action::ExecuteLeaveDelegators as u32, 0xa84a7468); assert_eq!(Action::CancelLeaveDelegators as u32, 0x2a987643); - // DEPRECATED - assert_eq!(Action::RevokeNomination as u32, 0x4b65c34b); assert_eq!(Action::ScheduleRevokeDelegation as u32, 0x22266e75); - // DEPRECATED - assert_eq!(Action::NominatorBondMore as u32, 0x971d44c8); assert_eq!(Action::DelegatorBondMore as u32, 0xf8331108); - // DEPRECATED - assert_eq!(Action::NominatorBondLess as u32, 0xf6a52569); assert_eq!(Action::ScheduleDelegatorBondLess as u32, 0x00043acf); assert_eq!(Action::ExecuteDelegationRequest as u32, 0xe42366a6); assert_eq!(Action::CancelDelegationRequest as u32, 0x7284cf50); @@ -111,791 +86,358 @@ fn selectors() { #[test] fn selector_less_than_four_bytes() { ExtBuilder::default().build().execute_with(|| { - // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if &output == b"tried to parse selector out of bounds" - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8]) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); }); } #[test] fn no_selector_exists_but_length_is_right() { ExtBuilder::default().build().execute_with(|| { - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if &output == b"unknown selector" - ); - }); -} - -// DEPRECATED -#[test] -fn min_nomination_works() { - ExtBuilder::default().build().execute_with(|| { - let selector = &Keccak256::digest(b"min_nomination()")[0..4]; - - // Construct data to read minimum nomination constant - let mut input_data = Vec::::from([0u8; 4]); - input_data[0..4].copy_from_slice(&selector); - - // Expected result is 3 - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(3u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8, 4u8]) + .execute_reverts(|output| output == b"unknown selector"); }); } #[test] fn min_delegation_works() { ExtBuilder::default().build().execute_with(|| { - let selector = &Keccak256::digest(b"min_delegation()")[0..4]; - - // Construct data to read minimum nomination constant - let mut input_data = Vec::::from([0u8; 4]); - input_data[0..4].copy_from_slice(&selector); - - // Expected result is 3 - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(3u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::MinDelegation).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(3u32).build()) }); } #[test] fn points_zero() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"points(uint256)")[0..4]; - - // Construct data to read points for round 1 - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - U256::one().to_big_endian(&mut input_data[4..36]); - - // Expected result is 0 points - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(0u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that there are total 0 points in round 1 - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + // Assert that there are total 0 points in round 1 + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Points) + .write(U256::one()) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(0u32).build()); }); } #[test] fn points_non_zero() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"points(uint256)")[0..4]; - - // Construct data to read points for round 1 - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - U256::one().to_big_endian(&mut input_data[4..36]); - - // Expected result is 100 points - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(100u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - set_points(1u32, TestAccount::Alice, 100); + set_points(1u32, Alice, 100); // Assert that there are total 100 points in round 1 - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Points) + .write(U256::one()) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(100u32).build()); }); } #[test] fn round_works() { ExtBuilder::default().build().execute_with(|| { - // Expected starts at round 1 - let mut expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(1u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that round is 1 - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::Round).build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Round).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(1u32).build()); + // test next `ROUNDS_TO_TEST` rounds const ROUNDS_TO_TEST: u64 = 10; let mut current_round: u64 = 1; while current_round < ROUNDS_TO_TEST { current_round += 1; roll_to_round_begin(current_round); - expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(current_round).build(), - cost: Default::default(), - logs: Default::default(), - })); + // Assert that round is equal to expectation - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::Round).build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Round).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(current_round).build()); } }); } -// DEPRECATED -#[test] -fn collator_nomination_count_works() { - ExtBuilder::default() - .with_balances(vec![ - (TestAccount::Alice, 1_000), - (TestAccount::Bob, 50), - (TestAccount::Charlie, 50), - (TestAccount::Bogus, 50), - ]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![ - (TestAccount::Bob, TestAccount::Alice, 50), - (TestAccount::Charlie, TestAccount::Alice, 50), - (TestAccount::Bogus, TestAccount::Alice, 50), - ]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"collator_nomination_count(address)")[0..4]; - - // Construct data to read collator nomination count - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - - // Expected result 3 - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(3u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that there 3 nominations for Alice - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); - }); -} - #[test] fn candidate_delegation_count_works() { ExtBuilder::default() - .with_balances(vec![ - (TestAccount::Alice, 1_000), - (TestAccount::Bob, 50), - (TestAccount::Charlie, 50), - (TestAccount::Bogus, 50), - ]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 50), (Charlie, 50), (Bogus, 50)]) + .with_candidates(vec![(Alice, 1_000)]) .with_delegations(vec![ - (TestAccount::Bob, TestAccount::Alice, 50), - (TestAccount::Charlie, TestAccount::Alice, 50), - (TestAccount::Bogus, TestAccount::Alice, 50), + (Bob, Alice, 50), + (Charlie, Alice, 50), + (Bogus, Alice, 50), ]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"candidate_delegation_count(address)")[0..4]; - - // Construct data to read candidate delegation count - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - - // Expected result 3 - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(3u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that there 3 delegations to Alice - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); - }); -} - -// DEPRECATED -#[test] -fn nominator_nomination_count_works() { - ExtBuilder::default() - .with_balances(vec![ - (TestAccount::Alice, 1_000), - (TestAccount::Bob, 1_000), - (TestAccount::Charlie, 200), - ]) - .with_candidates(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_delegations(vec![ - (TestAccount::Charlie, TestAccount::Alice, 100), - (TestAccount::Charlie, TestAccount::Bob, 100), - ]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"nominator_nomination_count(address)")[0..4]; - - // Construct data to read delegator delegation count - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Charlie.to_h160().0); - - // Expected result is 2 - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(2u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that Charlie has 2 outstanding delegations - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::CandidateDelegationCount) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(3u32).build()); }); } #[test] fn delegator_delegation_count_works() { ExtBuilder::default() - .with_balances(vec![ - (TestAccount::Alice, 1_000), - (TestAccount::Bob, 1_000), - (TestAccount::Charlie, 200), - ]) - .with_candidates(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_delegations(vec![ - (TestAccount::Charlie, TestAccount::Alice, 100), - (TestAccount::Charlie, TestAccount::Bob, 100), - ]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000), (Charlie, 200)]) + .with_candidates(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_delegations(vec![(Charlie, Alice, 100), (Charlie, Bob, 100)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"delegator_delegation_count(address)")[0..4]; - - // Construct data to read delegator delegation count - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Charlie.to_h160().0); - - // Expected result is 2 - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(2u32).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that Charlie has 2 outstanding nominations - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); - }); -} - -// DEPRECATED -#[test] -fn is_nominator_true_false() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 50)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 50)]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"is_nominator(address)")[0..4]; - - // Construct data to read is_nominator for Charlie - let mut charlie_input_data = Vec::::from([0u8; 36]); - charlie_input_data[0..4].copy_from_slice(&selector); - charlie_input_data[16..36].copy_from_slice(&TestAccount::Charlie.to_h160().0); - - // Expected result is false - let expected_false_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that Charlie is not a delegator - assert_eq!( - precompiles().execute( - precompile_address(), - &charlie_input_data, - None, - &evm_test_context(), - false, - ), - expected_false_result - ); - - // Construct data to read is_nominator for Bob - let mut bob_input_data = Vec::::from([0u8; 36]); - bob_input_data[0..4].copy_from_slice(&selector); - bob_input_data[16..36].copy_from_slice(&TestAccount::Bob.to_h160().0); - - // Expected result is true - let expected_true_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that Bob is a delegator - assert_eq!( - precompiles().execute( - precompile_address(), - &bob_input_data, - None, - &evm_test_context(), - false - ), - expected_true_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::DelegatorDelegationCount) + .write(Address(Charlie.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(2u32).build()); }); } #[test] fn is_delegator_false() { ExtBuilder::default().build().execute_with(|| { - let selector = &Keccak256::digest(b"is_delegator(address)")[0..4]; - - // Construct data to read is_delegator - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Charlie.to_h160().0); - - // Expected result is false - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that Charlie is not a delegator - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsDelegator) + .write(Address(Charlie.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); }); } #[test] fn is_delegator_true() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 50)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 50)]) + .with_balances(vec![(Alice, 1_000), (Bob, 50)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 50)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"is_delegator(address)")[0..4]; - - // Construct data to read is_delegator - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Bob.to_h160().0); - - // Expected result is true - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that Bob is a delegator - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsDelegator) + .write(Address(Bob.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }); } #[test] fn is_candidate_false() { ExtBuilder::default().build().execute_with(|| { - let selector = &Keccak256::digest(b"is_candidate(address)")[0..4]; - - // Construct data to read is_candidate - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - - // Expected result is false - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that Alice is not a candidate - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsCandidate) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); }); } #[test] fn is_candidate_true() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"is_candidate(address)")[0..4]; - - // Construct data to read is_candidate - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - - // Expected result is true - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that Alice is a candidate - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsCandidate) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }); } #[test] fn is_selected_candidate_false() { ExtBuilder::default().build().execute_with(|| { - let selector = &Keccak256::digest(b"is_selected_candidate(address)")[0..4]; - - // Construct data to read is_selected_candidate - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - - // Expected result is false - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that Alice is not a selected candidate - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsSelectedCandidate) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); }); } #[test] fn is_selected_candidate_true() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"is_selected_candidate(address)")[0..4]; - - // Construct data to read is_selected_candidate - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - - // Expected result is true - let expected_one_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that Alice is a selected candidate - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_one_result - ); + // Assert that Alice is not a selected candidate + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::IsSelectedCandidate) + .write(Address(Alice.into())) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }); } #[test] fn selected_candidates_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let input_data = EvmDataWriter::new_with_selector(Action::SelectedCandidates).build(); - // Alice is only selected candidates - let expected_selected_candidate = vec![TestAccount::Alice]; - let evm_expected_selected_candidate: Vec
= expected_selected_candidate - .into_iter() - .map(|x| Address(x.into())) - .collect(); - // Expected result is bogus selected repeated candidates - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new() - .write(evm_expected_selected_candidate) - .build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that Alice is a selected candidate - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::SelectedCandidates).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(vec![Address(Alice.into())]) + .build(), + ); }); } #[test] fn delegation_request_is_pending_works() { ExtBuilder::default() - .with_balances(vec![ - (TestAccount::Alice, 1_000), - (TestAccount::Charlie, 50), - (TestAccount::Bogus, 50), - ]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Charlie, TestAccount::Alice, 50)]) + .with_balances(vec![(Alice, 1_000), (Charlie, 50), (Bogus, 50)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Charlie, Alice, 50)]) .build() .execute_with(|| { - // Expected false because we dont have pending requests yet - let mut expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); // Assert that we dont have pending requests - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::DelegationRequestIsPending) - .write(Address(TestAccount::Charlie.into())) - .write(Address(TestAccount::Alice.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::DelegationRequestIsPending) + .write(Address(Charlie.into())) + .write(Address(Alice.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); // Schedule Revoke request - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::ScheduleRevokeDelegation) - .write(Address(TestAccount::Alice.into())) + precompiles() + .prepare_test( + Charlie, + Precompile, + EvmDataWriter::new_with_selector(Action::ScheduleRevokeDelegation) + .write(Address(Alice.into())) .build(), - None, - &Context { - address: precompile_address(), - caller: TestAccount::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 282552000, - logs: Default::default(), - })) - ); - - // Expected true because we scheduled a revoke request - expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); + ) + .expect_cost(281793000) + .expect_no_logs() + .execute_returns(vec![]); + // Assert that we have pending requests - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::DelegationRequestIsPending) - .write(Address(TestAccount::Charlie.into())) - .write(Address(TestAccount::Alice.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::DelegationRequestIsPending) + .write(Address(Charlie.into())) + .write(Address(Alice.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }) } @@ -903,203 +445,66 @@ fn delegation_request_is_pending_works() { fn delegation_request_is_pending_returns_false_for_non_existing_delegator() { ExtBuilder::default().build().execute_with(|| { // Expected false because delegator Bob does not exist - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that we return false - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::DelegationRequestIsPending) - .write(Address(TestAccount::Bob.into())) - .write(Address(TestAccount::Alice.into())) - .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); - }) -} - -#[test] -fn delegation_exit_is_pending_works() { - ExtBuilder::default() - .with_balances(vec![ - (TestAccount::Alice, 1_000), - (TestAccount::Charlie, 50), - (TestAccount::Bogus, 50), - ]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Charlie, TestAccount::Alice, 50)]) - .build() - .execute_with(|| { - // Expected false because we dont have pending requests yet - let mut expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that we don't have pending requests - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::DelegatorExitIsPending) - .write(Address(TestAccount::Charlie.into())) - .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); - - // Schedule exit request - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::ScheduleLeaveDelegators).build(), - None, - &Context { - address: precompile_address(), - caller: TestAccount::Charlie.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 152072000, - logs: Default::default(), - })) - ); - - // Expected true because we scheduled exit - expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that we have pending exit - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::DelegatorExitIsPending) - .write(Address(TestAccount::Charlie.into())) - .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); - }) -} - -#[test] -fn delegation_exit_is_pending_returns_false_for_non_existing_delegator() { - ExtBuilder::default().build().execute_with(|| { - // Expected false because delegator Bob does not exist - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that we return false - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::DelegatorExitIsPending) - .write(Address(TestAccount::Bob.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::DelegationRequestIsPending) + .write(Address(Bob.into())) + .write(Address(Alice.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); }) } #[test] fn candidate_exit_is_pending_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - // Expected false because we dont have pending requests yet - let mut expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); // Assert that we don't have pending requests - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::CandidateExitIsPending) - .write(Address(TestAccount::Alice.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::CandidateExitIsPending) + .write(Address(Alice.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); // Schedule exit request - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::ScheduleLeaveCandidates) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::ScheduleLeaveCandidates) .write(U256::one()) .build(), - None, - &Context { - address: precompile_address(), - caller: TestAccount::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 313608000, - logs: Default::default(), - })) - ); - - // Expected true because we scheduled exit - expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); + ) + .expect_cost(303417000) + .expect_no_logs() + .execute_returns(vec![]); + // Assert that we have pending exit - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::CandidateExitIsPending) - .write(Address(TestAccount::Alice.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::CandidateExitIsPending) + .write(Address(Alice.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }) } @@ -1107,99 +512,65 @@ fn candidate_exit_is_pending_works() { fn candidate_exit_is_pending_returns_false_for_non_existing_delegator() { ExtBuilder::default().build().execute_with(|| { // Expected false because candidate Bob does not exist - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that we return false - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::CandidateExitIsPending) - .write(Address(TestAccount::Bob.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::CandidateExitIsPending) + .write(Address(Bob.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); }) } #[test] fn candidate_request_is_pending_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_050)]) - .with_candidates(vec![(TestAccount::Alice, 1_050)]) + .with_balances(vec![(Alice, 1_050)]) + .with_candidates(vec![(Alice, 1_050)]) .build() .execute_with(|| { - // Expected false because we dont have pending requests yet - let mut expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); // Assert that we dont have pending requests - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::CandidateRequestIsPending) - .write(Address(TestAccount::Alice.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::CandidateRequestIsPending) + .write(Address(Alice.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); // Schedule bond less request - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::ScheduleCandidateBondLess) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::ScheduleCandidateBondLess) .write(U256::zero()) .build(), - None, - &Context { - address: precompile_address(), - caller: TestAccount::Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 151339000, - logs: Default::default(), - })) - ); - - // Expected true because we scheduled a bond less request - expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: Default::default(), - logs: Default::default(), - })); + ) + .expect_cost(151710000) + .expect_no_logs() + .execute_returns(vec![]); + // Assert that we have pending requests - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::CandidateRequestIsPending) - .write(Address(TestAccount::Alice.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::CandidateRequestIsPending) + .write(Address(Alice.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }) } @@ -1207,49 +578,36 @@ fn candidate_request_is_pending_works() { fn candidate_request_is_pending_returns_false_for_non_existing_candidate() { ExtBuilder::default().build().execute_with(|| { // Expected false because candidate Bob does not exist - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(false).build(), - cost: Default::default(), - logs: Default::default(), - })); - // Assert that we return false - assert_eq!( - precompiles().execute( - precompile_address(), - &EvmDataWriter::new_with_selector(Action::CandidateRequestIsPending) - .write(Address(TestAccount::Bob.into())) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::CandidateRequestIsPending) + .write(Address(Bob.into())) .build(), - None, - &evm_test_context(), - false - ), - expected_result - ); + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); }) } #[test] fn join_candidates_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"join_candidates(uint256,uint256)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4].copy_from_slice(&selector); - let amount: U256 = 1000.into(); - amount.to_big_endian(&mut input_data[4..36]); - let candidate_count = U256::zero(); - candidate_count.to_big_endian(&mut input_data[36..]); + let input_data = EvmDataWriter::new_with_selector(Action::JoinCandidates) + .write(U256::from(1000u32)) + .write(U256::zero()) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::JoinedCollatorCandidates { - account: TestAccount::Alice, + account: Alice, amount_locked: 1000, new_total_amt_locked: 1000, } @@ -1260,57 +618,23 @@ fn join_candidates_works() { }); } -// DEPRECATED -#[test] -fn leave_candidates_works() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"leave_candidates(uint256)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - let candidate_count = U256::one(); - candidate_count.to_big_endian(&mut input_data[4..]); - - // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); - - let expected: crate::mock::Event = StakingEvent::CandidateScheduledExit { - exit_allowed_round: 1, - candidate: TestAccount::Alice, - scheduled_exit: 3, - } - .into(); - // Assert that the events vector contains the one expected - assert!(events().contains(&expected)); - }); -} - #[test] fn schedule_leave_candidates_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"schedule_leave_candidates(uint256)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - let candidate_count = U256::one(); - candidate_count.to_big_endian(&mut input_data[4..]); + let input_data = EvmDataWriter::new_with_selector(Action::ScheduleLeaveCandidates) + .write(U256::one()) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CandidateScheduledExit { exit_allowed_round: 1, - candidate: TestAccount::Alice, + candidate: Alice, scheduled_exit: 3, } .into(); @@ -1322,29 +646,26 @@ fn schedule_leave_candidates_works() { #[test] fn execute_leave_candidates_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_leave_candidates( - Origin::signed(TestAccount::Alice), + Origin::signed(Alice), 1 )); roll_to(10); - let selector = &Keccak256::digest(b"execute_leave_candidates(address,uint256)")[0..4]; - // Construct data - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - let candidate_delegation_count = U256::zero(); - candidate_delegation_count.to_big_endian(&mut input_data[36..]); + let input_data = EvmDataWriter::new_with_selector(Action::ExecuteLeaveCandidates) + .write(Address(Alice.into())) + .write(U256::zero()) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CandidateLeft { - ex_candidate: TestAccount::Alice, + ex_candidate: Alice, unlocked_amount: 1_000, new_total_amt_locked: 0, } @@ -1357,29 +678,24 @@ fn execute_leave_candidates_works() { #[test] fn cancel_leave_candidates_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_leave_candidates( - Origin::signed(TestAccount::Alice), + Origin::signed(Alice), 1 )); - let selector = &Keccak256::digest(b"cancel_leave_candidates(uint256)")[0..4]; - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - let candidate_count = U256::zero(); - candidate_count.to_big_endian(&mut input_data[4..]); + let input_data = EvmDataWriter::new_with_selector(Action::CancelLeaveCandidates) + .write(U256::zero()) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); - let expected: crate::mock::Event = StakingEvent::CancelledCandidateExit { - candidate: TestAccount::Alice, - } - .into(); + let expected: crate::mock::Event = + StakingEvent::CancelledCandidateExit { candidate: Alice }.into(); // Assert that the events vector contains the one expected assert!(events().contains(&expected)); }); @@ -1388,26 +704,19 @@ fn cancel_leave_candidates_works() { #[test] fn go_online_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - assert_ok!(ParachainStaking::go_offline(Origin::signed( - TestAccount::Alice - ))); - let selector = &Keccak256::digest(b"go_online()")[0..4]; + assert_ok!(ParachainStaking::go_offline(Origin::signed(Alice))); - // Construct data - let mut input_data = Vec::::from([0u8; 4]); - input_data[0..4].copy_from_slice(&selector); + let input_data = EvmDataWriter::new_with_selector(Action::GoOnline).build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); - let expected: crate::mock::Event = StakingEvent::CandidateBackOnline { - candidate: TestAccount::Alice, - } - .into(); + let expected: crate::mock::Event = + StakingEvent::CandidateBackOnline { candidate: Alice }.into(); // Assert that the events vector contains the one expected assert!(events().contains(&expected)); }); @@ -1416,23 +725,16 @@ fn go_online_works() { #[test] fn go_offline_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"go_offline()")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 4]); - input_data[0..4].copy_from_slice(&selector); - + let input_data = EvmDataWriter::new_with_selector(Action::GoOffline).build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); - let expected: crate::mock::Event = StakingEvent::CandidateWentOffline { - candidate: TestAccount::Alice, - } - .into(); + let expected: crate::mock::Event = + StakingEvent::CandidateWentOffline { candidate: Alice }.into(); // Assert that the events vector contains the one expected assert!(events().contains(&expected)); }); @@ -1441,23 +743,19 @@ fn go_offline_works() { #[test] fn candidate_bond_more_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_500)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_500)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"candidate_bond_more(uint256)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - let bond_more_amount: U256 = 500.into(); - bond_more_amount.to_big_endian(&mut input_data[4..36]); + let input_data = EvmDataWriter::new_with_selector(Action::CandidateBondMore) + .write(U256::from(500)) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CandidateBondedMore { - candidate: TestAccount::Alice, + candidate: Alice, amount: 500, new_total_bond: 1500, } @@ -1467,56 +765,22 @@ fn candidate_bond_more_works() { }); } -// DEPRECATED -#[test] -fn candidate_bond_less_works() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"candidate_bond_less(uint256)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - let bond_less_amount: U256 = 500.into(); - bond_less_amount.to_big_endian(&mut input_data[4..36]); - - // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); - - let expected: crate::mock::Event = StakingEvent::CandidateBondLessRequested { - candidate: TestAccount::Alice, - amount_to_decrease: 500, - execute_round: 3, - } - .into(); - // Assert that the events vector contains the one expected - assert!(events().contains(&expected)); - }); -} - #[test] fn schedule_candidate_bond_less_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"schedule_candidate_bond_less(uint256)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - let bond_less_amount: U256 = 500.into(); - bond_less_amount.to_big_endian(&mut input_data[4..36]); + let input_data = EvmDataWriter::new_with_selector(Action::ScheduleCandidateBondLess) + .write(U256::from(500)) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CandidateBondLessRequested { - candidate: TestAccount::Alice, + candidate: Alice, amount_to_decrease: 500, execute_round: 3, } @@ -1529,28 +793,25 @@ fn schedule_candidate_bond_less_works() { #[test] fn execute_candidate_bond_less_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_500)]) - .with_candidates(vec![(TestAccount::Alice, 1_500)]) + .with_balances(vec![(Alice, 1_500)]) + .with_candidates(vec![(Alice, 1_500)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"execute_candidate_bond_less(address)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - assert_ok!(ParachainStaking::schedule_candidate_bond_less( - Origin::signed(TestAccount::Alice), + Origin::signed(Alice), 500 )); roll_to(10); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + let input_data = EvmDataWriter::new_with_selector(Action::ExecuteCandidateBondLess) + .write(Address(Alice.into())) + .build(); + + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CandidateBondedLess { - candidate: TestAccount::Alice, + candidate: Alice, amount: 500, new_bond: 1000, } @@ -1563,26 +824,23 @@ fn execute_candidate_bond_less_works() { #[test] fn cancel_candidate_bond_less_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_200)]) - .with_candidates(vec![(TestAccount::Alice, 1_200)]) + .with_balances(vec![(Alice, 1_200)]) + .with_candidates(vec![(Alice, 1_200)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"cancel_candidate_bond_less()")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - assert_ok!(ParachainStaking::schedule_candidate_bond_less( - Origin::signed(TestAccount::Alice), + Origin::signed(Alice), 200 )); + let input_data = + EvmDataWriter::new_with_selector(Action::CancelCandidateBondLess).build(); + // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CancelledCandidateBondLess { - candidate: TestAccount::Alice, + candidate: Alice, amount: 200, execute_round: 3, } @@ -1592,76 +850,30 @@ fn cancel_candidate_bond_less_works() { }); } -// DEPRECATED -#[test] -fn nominate_works() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"nominate(address,uint256,uint256,uint256)")[0..4]; - - // Construct selector for nominate - let mut input_data = Vec::::from([0u8; 132]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - let delegation_amount: U256 = 1_000.into(); - delegation_amount.to_big_endian(&mut input_data[36..68]); - let collator_delegation_count = U256::zero(); - collator_delegation_count.to_big_endian(&mut input_data[68..100]); - let delegation_count = U256::zero(); - delegation_count.to_big_endian(&mut input_data[100..]); - - // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); - - assert!(ParachainStaking::is_delegator(&TestAccount::Bob)); - - let expected: crate::mock::Event = StakingEvent::Delegation { - delegator: TestAccount::Bob, - locked_amount: 1_000, - candidate: TestAccount::Alice, - delegator_position: parachain_staking::DelegatorAdded::AddedToTop { - new_total: 2_000, - }, - } - .into(); - // Assert that the events vector contains the one expected - assert!(events().contains(&expected)); - }); -} - #[test] fn delegate_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"delegate(address,uint256,uint256,uint256)")[0..4]; - - // Construct selector for nominate - let mut input_data = Vec::::from([0u8; 132]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - let delegation_amount: U256 = 1_000.into(); - delegation_amount.to_big_endian(&mut input_data[36..68]); - let collator_delegation_count = U256::zero(); - collator_delegation_count.to_big_endian(&mut input_data[68..100]); - let delegation_count = U256::zero(); - delegation_count.to_big_endian(&mut input_data[100..]); + let input_data = EvmDataWriter::new_with_selector(Action::Delegate) + .write(Address(Alice.into())) + .write(U256::from(1_000)) + .write(U256::zero()) + .write(U256::zero()) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); - assert!(ParachainStaking::is_delegator(&TestAccount::Bob)); + assert!(ParachainStaking::is_delegator(&Bob)); let expected: crate::mock::Event = StakingEvent::Delegation { - delegator: TestAccount::Bob, + delegator: Bob, locked_amount: 1_000, - candidate: TestAccount::Alice, - delegator_position: parachain_staking::DelegatorAdded::AddedToTop { + candidate: Alice, + delegator_position: pallet_parachain_staking::DelegatorAdded::AddedToTop { new_total: 2_000, }, } @@ -1671,57 +883,23 @@ fn delegate_works() { }); } -// DEPRECATED -#[test] -fn leave_nominators_works() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"leave_nominators(uint256)")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - let delegation_count = U256::one(); - delegation_count.to_big_endian(&mut input_data[4..]); - - // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); - - let expected: crate::mock::Event = StakingEvent::DelegatorExitScheduled { - round: 1, - delegator: TestAccount::Bob, - scheduled_exit: 3, - } - .into(); - // Assert that the events vector contains the one expected - assert!(events().contains(&expected)); - }); -} - #[test] fn schedule_leave_delegators_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"schedule_leave_delegators()")[0..4]; - - // Construct data - let mut input_data = Vec::::from([0u8; 4]); - input_data[0..4].copy_from_slice(&selector); + let input_data = + EvmDataWriter::new_with_selector(Action::ScheduleLeaveDelegators).build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::DelegatorExitScheduled { round: 1, - delegator: TestAccount::Bob, + delegator: Bob, scheduled_exit: 3, } .into(); @@ -1733,29 +911,26 @@ fn schedule_leave_delegators_works() { #[test] fn execute_leave_delegators_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 500)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 500)]) + .with_balances(vec![(Alice, 1_000), (Bob, 500)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 500)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( - TestAccount::Bob + Bob ))); roll_to(10); - let selector = &Keccak256::digest(b"execute_leave_delegators(address,uint256)")[0..4]; - // Construct data - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Bob.to_h160().0); - let delegation_count = U256::one(); - delegation_count.to_big_endian(&mut input_data[36..]); + let input_data = EvmDataWriter::new_with_selector(Action::ExecuteLeaveDelegators) + .write(Address(Bob.into())) + .write(U256::one()) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::DelegatorLeft { - delegator: TestAccount::Bob, + delegator: Bob, unstaked_amount: 500, } .into(); @@ -1767,58 +942,23 @@ fn execute_leave_delegators_works() { #[test] fn cancel_leave_delegators_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 500)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 500)]) + .with_balances(vec![(Alice, 1_000), (Bob, 500)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 500)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_leave_delegators(Origin::signed( - TestAccount::Bob + Bob ))); - let selector = &Keccak256::digest(b"cancel_leave_delegators()")[0..4]; - // Construct data - let mut input_data = Vec::::from([0u8; 4]); - input_data[0..4].copy_from_slice(&selector); + let input_data = + EvmDataWriter::new_with_selector(Action::CancelLeaveDelegators).build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); - let expected: crate::mock::Event = StakingEvent::DelegatorExitCancelled { - delegator: TestAccount::Bob, - } - .into(); - // Assert that the events vector contains the one expected - assert!(events().contains(&expected)); - }); -} - -// DEPRECATED -#[test] -fn revoke_nomination_works() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) - .build() - .execute_with(|| { - let selector = &Keccak256::digest(b"revoke_nomination(address)")[0..4]; - - // Construct selector for revoke_nomination - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - - // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); - - let expected: crate::mock::Event = StakingEvent::DelegationRevocationScheduled { - round: 1, - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, - scheduled_exit: 3, - } - .into(); + let expected: crate::mock::Event = + StakingEvent::DelegatorExitCancelled { delegator: Bob }.into(); // Assert that the events vector contains the one expected assert!(events().contains(&expected)); }); @@ -1827,25 +967,22 @@ fn revoke_nomination_works() { #[test] fn schedule_revoke_delegation_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 1_000)]) .build() .execute_with(|| { - let selector = &Keccak256::digest(b"schedule_revoke_delegation(address)")[0..4]; - - // Construct selector for schedule_revoke_delegation - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); + let input_data = EvmDataWriter::new_with_selector(Action::ScheduleRevokeDelegation) + .write(Address(Alice.into())) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::DelegationRevocationScheduled { round: 1, - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, + delegator: Bob, + candidate: Alice, scheduled_exit: 3, } .into(); @@ -1854,58 +991,24 @@ fn schedule_revoke_delegation_works() { }); } -// DEPRECATED -#[test] -fn nominator_bond_more_works() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_500)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 500)]) - .build() - .execute_with(|| { - // Construct the delegator_bond_more call - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"nominator_bond_more(address,uint256)")[0..4]); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - let bond_more_amount: U256 = 500.into(); - bond_more_amount.to_big_endian(&mut input_data[36..68]); - - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); - - let expected: crate::mock::Event = StakingEvent::DelegationIncreased { - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, - amount: 500, - in_top: true, - } - .into(); - // Assert that the events vector contains the one expected - assert!(events().contains(&expected)); - }); -} - #[test] fn delegator_bond_more_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_500)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 500)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_500)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 500)]) .build() .execute_with(|| { - // Construct the delegator_bond_more call - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"delegator_bond_more(address,uint256)")[0..4]); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - let bond_more_amount: U256 = 500.into(); - bond_more_amount.to_big_endian(&mut input_data[36..68]); + let input_data = EvmDataWriter::new_with_selector(Action::DelegatorBondMore) + .write(Address(Alice.into())) + .write(U256::from(500)) + .build(); - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::DelegationIncreased { - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, + delegator: Bob, + candidate: Alice, amount: 500, in_top: true, } @@ -1915,61 +1018,25 @@ fn delegator_bond_more_works() { }); } -// DEPRECATED -#[test] -fn nominator_bond_less_works() { - ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_500)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_500)]) - .build() - .execute_with(|| { - // Construct the delegator_bond_less call - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"nominator_bond_less(address,uint256)")[0..4]); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - let bond_less_amount: U256 = 500.into(); - bond_less_amount.to_big_endian(&mut input_data[36..68]); - - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); - - // Check for the right events. - let expected_event: crate::mock::Event = StakingEvent::DelegationDecreaseScheduled { - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, - amount_to_decrease: 500, - execute_round: 3, - } - .into(); - - assert!(events().contains(&expected_event)); - }); -} - #[test] fn schedule_delegator_bond_less_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_500)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_500)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_500)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 1_500)]) .build() .execute_with(|| { - // Construct the delegator_bond_less call - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4].copy_from_slice( - &Keccak256::digest(b"schedule_delegator_bond_less(address,uint256)")[0..4], - ); - input_data[16..36].copy_from_slice(&TestAccount::Alice.to_h160().0); - let bond_less_amount: U256 = 500.into(); - bond_less_amount.to_big_endian(&mut input_data[36..68]); + let input_data = EvmDataWriter::new_with_selector(Action::ScheduleDelegatorBondLess) + .write(Address(Alice.into())) + .write(U256::from(500)) + .build(); - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); // Check for the right events. let expected_event: crate::mock::Event = StakingEvent::DelegationDecreaseScheduled { - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, + delegator: Bob, + candidate: Alice, amount_to_decrease: 500, execute_round: 3, } @@ -1982,30 +1049,28 @@ fn schedule_delegator_bond_less_works() { #[test] fn execute_revoke_delegation_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 1_000)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_revoke_delegation( - Origin::signed(TestAccount::Bob), - TestAccount::Alice + Origin::signed(Bob), + Alice )); roll_to(10); - let selector = &Keccak256::digest(b"execute_delegation_request(address,address)")[0..4]; - // Construct selector - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Bob.to_h160().0); - input_data[48..].copy_from_slice(&TestAccount::Alice.to_h160().0); + let input_data = EvmDataWriter::new_with_selector(Action::ExecuteDelegationRequest) + .write(Address(Bob.into())) + .write(Address(Alice.into())) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::DelegationRevoked { - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, + delegator: Bob, + candidate: Alice, unstaked_amount: 1_000, } .into(); @@ -2017,31 +1082,29 @@ fn execute_revoke_delegation_works() { #[test] fn execute_delegator_bond_less_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 1_000)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_delegator_bond_less( - Origin::signed(TestAccount::Bob), - TestAccount::Alice, + Origin::signed(Bob), + Alice, 500 )); roll_to(10); - let selector = &Keccak256::digest(b"execute_delegation_request(address,address)")[0..4]; - // Construct selector - let mut input_data = Vec::::from([0u8; 68]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..36].copy_from_slice(&TestAccount::Bob.to_h160().0); - input_data[48..].copy_from_slice(&TestAccount::Alice.to_h160().0); + let input_data = EvmDataWriter::new_with_selector(Action::ExecuteDelegationRequest) + .write(Address(Bob.into())) + .write(Address(Alice.into())) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Alice, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Alice, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::DelegationDecreased { - delegator: TestAccount::Bob, - candidate: TestAccount::Alice, + delegator: Bob, + candidate: Alice, amount: 500, in_top: true, } @@ -2054,31 +1117,29 @@ fn execute_delegator_bond_less_works() { #[test] fn cancel_revoke_delegation_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 1_000)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_revoke_delegation( - Origin::signed(TestAccount::Bob), - TestAccount::Alice + Origin::signed(Bob), + Alice )); - let selector = &Keccak256::digest(b"cancel_delegation_request(address)")[0..4]; - // Construct selector - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..].copy_from_slice(&TestAccount::Alice.to_h160().0); + let input_data = EvmDataWriter::new_with_selector(Action::CancelDelegationRequest) + .write(Address(Alice.into())) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CancelledDelegationRequest { - delegator: TestAccount::Bob, - collator: TestAccount::Alice, - cancelled_request: parachain_staking::CancelledScheduledRequest { + delegator: Bob, + collator: Alice, + cancelled_request: pallet_parachain_staking::CancelledScheduledRequest { when_executable: 3, - action: parachain_staking::DelegationAction::Revoke(1_000), + action: pallet_parachain_staking::DelegationAction::Revoke(1_000), }, } .into(); @@ -2090,32 +1151,30 @@ fn cancel_revoke_delegation_works() { #[test] fn cancel_delegator_bonded_less_works() { ExtBuilder::default() - .with_balances(vec![(TestAccount::Alice, 1_000), (TestAccount::Bob, 1_000)]) - .with_candidates(vec![(TestAccount::Alice, 1_000)]) - .with_delegations(vec![(TestAccount::Bob, TestAccount::Alice, 1_000)]) + .with_balances(vec![(Alice, 1_000), (Bob, 1_000)]) + .with_candidates(vec![(Alice, 1_000)]) + .with_delegations(vec![(Bob, Alice, 1_000)]) .build() .execute_with(|| { assert_ok!(ParachainStaking::schedule_delegator_bond_less( - Origin::signed(TestAccount::Bob), - TestAccount::Alice, + Origin::signed(Bob), + Alice, 500 )); - let selector = &Keccak256::digest(b"cancel_delegation_request(address)")[0..4]; - // Construct selector - let mut input_data = Vec::::from([0u8; 36]); - input_data[0..4].copy_from_slice(&selector); - input_data[16..].copy_from_slice(&TestAccount::Alice.to_h160().0); + let input_data = EvmDataWriter::new_with_selector(Action::CancelDelegationRequest) + .write(Address(Alice.into())) + .build(); // Make sure the call goes through successfully - assert_ok!(Call::Evm(evm_call(TestAccount::Bob, input_data)).dispatch(Origin::root())); + assert_ok!(Call::Evm(evm_call(Bob, input_data)).dispatch(Origin::root())); let expected: crate::mock::Event = StakingEvent::CancelledDelegationRequest { - delegator: TestAccount::Bob, - collator: TestAccount::Alice, - cancelled_request: parachain_staking::CancelledScheduledRequest { + delegator: Bob, + collator: Alice, + cancelled_request: pallet_parachain_staking::CancelledScheduledRequest { when_executable: 3, - action: parachain_staking::DelegationAction::Decrease(500), + action: pallet_parachain_staking::DelegationAction::Decrease(500), }, } .into(); diff --git a/precompiles/randomness/Cargo.toml b/precompiles/randomness/Cargo.toml new file mode 100644 index 0000000000..f7361eb555 --- /dev/null +++ b/precompiles/randomness/Cargo.toml @@ -0,0 +1,64 @@ +[package] +name = "pallet-evm-precompile-randomness" +authors = [ "PureStake" ] +description = "A Precompile to make randomness accessible to pallet-evm" +edition = "2021" +version = "0.1.0" + +[dependencies] +log = "0.4" +num_enum = { version = "0.5.3", default-features = false } + +# Moonbeam +pallet-randomness = { path = "../../pallets/randomness", default-features = false } +precompile-utils = { path = "../utils", default-features = false } + +# Substrate +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } + +# Frontier +pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } + +# Nimbus +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } + +[dev-dependencies] +derive_more = "0.99" +hex-literal = "0.3.4" +serde = "1.0.100" + +# Moonbeam +pallet-author-mapping = { path = "../../pallets/author-mapping" } +precompile-utils = { path = "../utils", features = [ "testing" ] } +session-keys-primitives = { path = "../../primitives/session-keys" } + +# Substrate +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } + +[features] +default = [ "std" ] +std = [ + "codec/std", + "fp-evm/std", + "frame-support/std", + "frame-system/std", + "nimbus-primitives/std", + "pallet-base-fee/std", + "pallet-evm/std", + "pallet-randomness/std", + "precompile-utils/std", + "sp-core/std", + "sp-io/std", + "sp-std/std", +] diff --git a/precompiles/randomness/Randomness.sol b/precompiles/randomness/Randomness.sol new file mode 100644 index 0000000000..f041f648d1 --- /dev/null +++ b/precompiles/randomness/Randomness.sol @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +/// @dev Maximum number of random words being requested +uint32 constant MAX_RANDOM_WORDS = 100; +/// @dev Minimum number of blocks before a request can be fulfilled for Local VRF Request +uint32 constant MIN_VRF_BLOCKS_DELAY = 2; +/// @dev Maximum number of blocks before a request can be fulfilled for Local VRF Request +uint32 constant MAX_VRF_BLOCKS_DELAY = 2000; +/// @dev The deposit amount needed to request random words. There is 1 deposit per request +uint256 constant REQUEST_DEPOSIT_AMOUNT = 1000000000000000000; + +interface Randomness { + /// @notice Event emitted when the request has been successfully executed + event FulFillmentSucceeded(); + /// @notice Event emitted when the request has failed to execute fulfillment + event FulFillmentFailed(); + + /// @notice The status of the request + /// @param DoesNotExist The request doesn't exist + /// @param Pending The request cannot be fulfilled yet + /// @param Ready The request is ready to be fulfilled + /// @param Expired The request has expired + enum RequestStatus { + DoesNotExist, + Pending, + Ready, + Expired + } + + /// @notice The type of randomness source + /// @param LocalVRF Randomness VRF using the parachain material as seed + /// @param RelayBabeEpoch Randomness VRF using relay material from previous epoch + enum RandomnessSource { + LocalVRF, + RelayBabeEpoch + } + + /// @notice The request details + /// @param id The id of the request (is always < 2**64) + /// @param refundAddress The address receiving the left-over fees after the fulfillment + /// @param contractAddress The address of the contract being called back during fulfillment + /// @param fee The amount to set aside to pay for the fulfillment + /// @param gasLimit The gas limit to use for the fulfillment + /// @param salt A string being mixed with the randomness seed to obtain different random words + /// @param numWords The number of random words requested (from 1 to MAX_RANDOM_WORDS) + /// @param randomnessSource The type of randomness source used to generate the random words + /// @param fulfillmentBlock The parachain block number at which the request can be fulfilled (for LocalVRF only) + /// @param fulfillmentEpochIndex The relay epoch index at which the request can be fulfilled (for RelayBabeEpoch) + /// @param expirationBlock The parachain block number at which the request expires (for LocalVRF only) + /// @param expirationEpochIndex The relay epoch index at which the request expires (for RelayBabeEpoch) + /// @param status The current status of the request + struct Request { + uint256 id; + address refundAddress; + address contractAddress; + uint256 fee; + uint256 gasLimit; + bytes32 salt; + uint32 numWords; + RandomnessSource randomnessSource; + uint32 fulfillmentBlock; + uint32 fulfillmentEpochIndex; + uint32 expirationBlock; + uint32 expirationEpochIndex; + RequestStatus status; + } + + /// Return the current relay epoch index + /// @dev An epoch represents real time and not a block number + /// @dev Currently, time between epoch changes cannot be longer than: + /// @dev - Kusama/Westend/Rococo: 600 relay blocks (1 hour) + /// @dev - Polkadot: 2400 relay blocks (4 hours) + /// Selector: 81797566 + function relayEpochIndex() external view returns (uint64); + + /// Return the deposit required to perform a request + /// @dev Each request will need a deposit. + /// Selector: fb7cfdd7 + function requiredDeposit() external view returns (uint256); + + /// @notice Returns the request status + /// @param requestId The id of the request to check (must be < 2**64) + /// @return status Status of the request + /// Selector: d8a4676f + function getRequestStatus(uint256 requestId) + external + view + returns (RequestStatus status); + + /// @notice Returns the request or revert + /// @param requestId The id of the request to check (must be < 2**64) + /// @return request The request + /// Selector: c58343ef + function getRequest(uint256 requestId) + external + view + returns (Request memory request); + + /// @notice Request random words generated from the parachain VRF + /// @dev This is using pseudo-random VRF executed by the collator at the fulfillment + /// @dev Warning: + /// @dev The collator in charge of producing the block at fulfillment can decide to skip + /// @dev producing the block in order to have a different random word generated by the next + /// @dev collator, at the cost of a block reward. It is therefore economically viable to use + /// @dev this randomness source only if the financial reward at stake is lower than the block + /// @dev reward. + /// @dev In order to reduce the risk of a collator being able to predict the random words + /// @dev when the request is performed, it is possible to increase the delay to multiple blocks + /// @dev The higher the delay is, the less likely the collator will be able to know which + /// @dev collator will be in charge of fulfilling the request. + /// @dev Fulfillment is manual and can be executed by anyone (for free) after the given delay + /// @param refundAddress The address receiving the left-over fees after the fulfillment + /// @param fee The amount to set aside to pay for the fulfillment + /// @param gasLimit The gas limit to use for the fulfillment + /// @param salt A string being mixed with the randomness seed to obtain different random words + /// @param numWords The number of random words requested (from 1 to MAX_RANDOM_WORDS) + /// @param delay The number of blocks until the request can be fulfilled (between MIN_DELAY_BLOCKS and MAX_DELAY_BLOCKS) + /// @return requestId The id of the request requestLocalVRFRandomWords + /// Selector: 4c9c81a8 + function requestLocalVRFRandomWords( + address refundAddress, + uint256 fee, + uint64 gasLimit, + bytes32 salt, + uint8 numWords, + uint64 delay + ) external returns (uint256); + + /// @notice Request random words generated from the relaychain Babe consensus + /// @dev The random words are generated from the hash of the all the VRF provided by the + /// @dev relaychain validator during 1 epoch. + /// @dev It requires a delay of at least 1 epoch after the current epoch to be unpredictable + /// @dev at the time the request is performed. + /// @dev Warning: + /// @dev The validator (on the relaychain) of the last block of an epoch can decide to skip + /// @dev producing the block in order to choose the previous generated epoch random number + /// @dev at the cost of a relaychain block rewards. It is therefore economically viable to use + /// @dev this randomness source only if the financial reward at stake is lower than the relaychain + /// @dev block reward. + /// @dev (see https://crates.parity.io/pallet_babe/struct.RandomnessFromOneEpochAgo.html) + /// @dev Fulfillment is manual and can be executed by anyone (for free) at + /// @dev the beginning of the 2nd relay epoch following the current one + /// @param refundAddress The address receiving the left-over fees after the fulfillment + /// @param fee Amount to set aside to pay for the fulfillment. Those fees are taken from the contract + /// @param gasLimit Gas limit for the fulfillment + /// @param salt Salt to be mixed with raw randomness to get output + /// @param numWords Number of random words to be returned (limited to MAX_RANDOM_WORDS) + /// @return requestId The id of the request + /// Selector: bd063318 + function requestRelayBabeEpochRandomWords( + address refundAddress, + uint256 fee, + uint64 gasLimit, + bytes32 salt, + uint8 numWords + ) external returns (uint256); + + /// @dev fulFill the request which will call the contract method "fulfillRandomWords" + /// @dev Fees of the caller are refunded if the request is fulfillable + /// @param requestId Request to be fulfilled (must be < 2**64) + /// Selector: 9a91eb0d + function fulfillRequest(uint256 requestId) external; + + /// @param requestId Request receiving the additional fees (must be < 2**64) + /// @param feeIncrease Amount to increase + /// Selector: d0408a7f + function increaseRequestFee(uint256 requestId, uint256 feeIncrease) + external; + + /// @param requestId Request to be purged (must be < 2**64) + /// Selector: 1d26cbab + function purgeExpiredRequest(uint256 requestId) external; +} diff --git a/precompiles/randomness/RandomnessConsumer.sol b/precompiles/randomness/RandomnessConsumer.sol new file mode 100644 index 0000000000..c30379e753 --- /dev/null +++ b/precompiles/randomness/RandomnessConsumer.sol @@ -0,0 +1,123 @@ +// Inspired by: https://raw.githubusercontent.com/smartcontractkit/chainlink/8e8a996fd882c0861bdc9824c1ca27c857c87d03/contracts/src/v0.8/VRFConsumerBaseV2.sol +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.4; + +/** **************************************************************************** + * @notice Interface for contracts using VRF randomness + * ***************************************************************************** + * @dev PURPOSE + * + * @dev The purpose of this contract is to make it easy for contracts to talk to + * @dev the Randomness Precompile. It ensures 2 things: + * @dev 1. The fulfillment came from the Randomness Precompile + * @dev 2. The consumer contract implements fulfillRandomWords. + * ***************************************************************************** + * @dev USAGE + * + * @dev Calling contracts must inherit from RandomnessConsumer + * + * @dev Call one of the randomness request functions: + * @dev 1. requestLocalVRFRandomWords(refundAddress, fee, gasLimit, salt + * @dev numWords, delay), + * @dev 2. requestRelayBabeEpochRandomWords(refundAddress, fee, gasLimit, salt + * @dev numWords), + * @dev see (Randomness.sol for a description of each function and their arguments). + * + * @dev Once the request has been registered and the minimum delay is passed, the + * @dev request then can be executed (for 0 fee) by anyone. it will call your + * @dev contract's fulfillRandomWords method. + * + * @dev The randomness argument to fulfillRandomWords is a set of random words + * @dev generated from your requestId. + * + * @dev If your contract could have concurrent requests open, you can use the + * @dev requestId returned from requestRandomWords to track which response is associated + * @dev with which randomness request. + * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, + * @dev if your contract could have multiple requests in flight simultaneously. + * + * @dev Colliding `requestId`s are cryptographically impossible as long as seeds + * @dev differ. + * + * ***************************************************************************** + * @dev SECURITY CONSIDERATIONS + * + * @dev A method with the ability to call your fulfillRandomness method directly + * @dev could spoof a VRF response with any random value, so it's critical that + * @dev it cannot be directly called by anything other than this base contract + * @dev (specifically, by the RandomnessConsumer.rawFulfillRandomness method). + * + * @dev For your users to trust that your contract's random behavior is free + * @dev from malicious interference, it's best if you can write it so that all + * @dev behaviors implied by a VRF response are executed *during* your + * @dev fulfillRandomness method. If your contract must store the response (or + * @dev anything derived from it) and use it later, you must ensure that any + * @dev user-significant behavior which depends on that stored value cannot be + * @dev manipulated by a subsequent VRF request. + * + * @dev Similarly, the collators have some influence over the order in which + * @dev VRF responses appear on the blockchain, so if your contract could have + * @dev multiple VRF requests in flight simultaneously, you must ensure that + * @dev the order in which the VRF responses arrive cannot be used to manipulate + * @dev your contract's user-significant behavior. + * + * @dev Since the output of the random words generated for + * @dev *requestLocalVRFRandomWords* is dependant of the collator producing the + * @dev block at fulfillment, the collator could skip its block forcing the + * @dev fulfillment to be executed by a different collator, and therefore + * @dev generating a different VRF. + * @dev However, such an attack would incur the cost of losing the block reward to + * @dev the collator. + * @dev It is also possible for a collator to be able to predict some of the + * @dev possible outcome of the VRF if the delay between the request and the + * @dev fulfillment is too short. It is for this reason that we allow to provide + * @dev a higher delay + * + * @dev Since the output of the random words generated for + * @dev *requestRelayBabeEpochRandomWords* is dependant of the relaychain + * @dev validator producing the blocks during an epoch, it is possible for + * @dev the last validator of an epoch to choose between 2 possible VRF + * @dev outputs by skipping the production of a block. + * @dev However, such an attack would incur the cost of losing the block reward to + * @dev the validator + * @dev It is not possible for a parachain collator to predict nor influence + * @dev the output of the relaychain VRF, not to censor the fulfillment as long as + * @dev there is one honest collator. + */ +abstract contract RandomnessConsumer { + error OnlyRandomnessPrecompileCanFulfill(address have, address want); + + /** + * @notice fulfillRandomness handles the VRF response. Your contract must + * @notice implement it. See "SECURITY CONSIDERATIONS" above for important + * @notice principles to keep in mind when implementing your fulfillRandomness + * @notice method. + * + * @dev RandomnessConsumer expects its subcontracts to have a method with this + * @dev signature, and will call it once it has verified the proof + * @dev associated with the randomness. (It is triggered via a call to + * @dev rawFulfillRandomness, below.) + * + * @param requestId The Id initially returned by requestLocalVRFRandomWords or requestRelayBabeEpochRandomWords + * @param randomWords The VRF output expanded to the requested number of words + */ + function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) + internal + virtual; + + // rawFulfillRandomness is called by Randomness Precompile when the executeFulfillement + // is called. rawFulfillRandomness then calls fulfillRandomness, after validating + // the origin of the call + function rawFulfillRandomWords( + uint256 requestId, + uint256[] memory randomWords + ) external { + if (msg.sender != 0x0000000000000000000000000000000000000809) { + revert OnlyRandomnessPrecompileCanFulfill( + msg.sender, + 0x0000000000000000000000000000000000000809 + ); + } + fulfillRandomWords(requestId, randomWords); + } +} diff --git a/precompiles/randomness/src/lib.rs b/precompiles/randomness/src/lib.rs new file mode 100644 index 0000000000..254ca7e242 --- /dev/null +++ b/precompiles/randomness/src/lib.rs @@ -0,0 +1,466 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Precompile to interact with randomness through an evm precompile. + +#![cfg_attr(not(feature = "std"), no_std)] +#![feature(assert_matches)] + +extern crate alloc; + +use fp_evm::{ + Context, ExitReason, ExitSucceed, Log, Precompile, PrecompileHandle, PrecompileOutput, +}; +use pallet_randomness::{ + BalanceOf, GetBabeData, Pallet, Request, RequestInfo, RequestState, RequestType, +}; +use precompile_utils::{costs::call_cost, prelude::*}; +use sp_core::{H160, H256, U256}; +use sp_std::{fmt::Debug, marker::PhantomData, vec, vec::Vec}; + +// #[cfg(test)] +// mod mock; +mod solidity_types; +#[cfg(test)] +mod tests; +use solidity_types::*; + +#[generate_function_selector] +#[derive(Debug, PartialEq)] +pub enum Action { + RelayEpochIndex = "relayEpochIndex()", + GetRequestStatus = "getRequestStatus(uint256)", + GetRequest = "getRequest(uint256)", + RequestRelayBabeEpochRandomWords = + "requestRelayBabeEpochRandomWords(address,uint256,uint64,bytes32,uint8)", + RequestLocalVRFRandomWords = + "requestLocalVRFRandomWords(address,uint256,uint64,bytes32,uint8,uint64)", + FulfillRequest = "fulfillRequest(uint256)", + IncreaseRequestFee = "increaseRequestFee(uint256,uint256)", + PurgeExpiredRequest = "purgeExpiredRequest(uint256)", +} + +// Tests to verify equal to weight_to_gas(weight) in runtime integration tests +pub const REQUEST_RANDOMNESS_ESTIMATED_COST: u64 = 26325; +pub const FULFILLMENT_OVERHEAD_ESTIMATED_COST: u64 = 24545; +pub const INCREASE_REQUEST_FEE_ESTIMATED_COST: u64 = 16718; +pub const EXECUTE_EXPIRATION_ESTIMATED_COST: u64 = 21989; +pub const LOG_FULFILLMENT_SUCCEEDED: [u8; 32] = keccak256!("FulFillmentSucceeded()"); +pub const LOG_FULFILLMENT_FAILED: [u8; 32] = keccak256!("FulFillmentFailed()"); + +pub fn log_fulfillment_succeeded(address: impl Into) -> Log { + log1(address, LOG_FULFILLMENT_SUCCEEDED, vec![]) +} + +pub fn log_fulfillment_failed(address: impl Into) -> Log { + log1(address, LOG_FULFILLMENT_FAILED, vec![]) +} + +/// Reverts if fees and gas_limit are not sufficient to make subcall and cleanup +fn ensure_can_provide_randomness( + code_address: H160, + gas_limit: u64, + request_fee: BalanceOf, + clean_up_cost: u64, +) -> EvmResult<()> +where + Runtime: pallet_randomness::Config + pallet_evm::Config + pallet_base_fee::Config, + BalanceOf: Into, +{ + // assert fee > gasLimit * base_fee + let gas_limit_as_u256: U256 = gas_limit.into(); + if let Some(gas_limit_times_base_fee) = + gas_limit_as_u256.checked_mul(pallet_base_fee::Pallet::::base_fee_per_gas()) + { + if gas_limit_times_base_fee >= request_fee.into() { + return Err(revert( + "Gas limit at current price must be less than fees allotted", + )); + } + } else { + return Err(revert("Gas limit times base fee overflowed U256")); + } + let log_cost = log_fulfillment_failed(code_address) + .compute_cost() + .map_err(|_| revert("failed to compute log cost"))?; + // Cost of the call itself that the batch precompile must pay. + let call_cost = call_cost(U256::zero(), ::config()); + // assert gasLimit > overhead cost + let overhead = call_cost + log_cost + clean_up_cost; + if gas_limit <= overhead { + return Err(revert("Gas limit must exceed overhead call cost")); + } + Ok(()) +} + +/// Subcall to provide randomness +/// caller must call `ensure_can_provide_randomness` before calling this function +fn provide_randomness( + handle: &mut impl PrecompileHandle, + request_id: u64, + gas_limit: u64, + contract: H160, + randomness: Vec, +) -> EvmResult<()> { + let (reason, _) = handle.call( + contract, + None, + // callback function selector: keccak256("rawFulfillRandomWords(uint256,uint256[])") + EvmDataWriter::new_with_selector(0x1fe543e3_u32) + .write(request_id) + .write(randomness) + .build(), + Some(gas_limit), + false, + &Context { + caller: handle.context().address, + address: contract, + apparent_value: U256::zero(), + }, + ); + // Logs + // We reserved enough gas so this should not OOG. + match reason { + ExitReason::Revert(_) | ExitReason::Error(_) => { + let log = log_fulfillment_failed(handle.code_address()); + handle.record_log_costs(&[&log])?; + log.record(handle)? + } + ExitReason::Succeed(_) => { + let log = log_fulfillment_succeeded(handle.code_address()); + handle.record_log_costs(&[&log])?; + log.record(handle)? + } + _ => (), + } + Ok(()) +} + +/// A precompile to wrap the functionality from pallet-randomness +pub struct RandomnessWrapper(PhantomData); + +impl Precompile for RandomnessWrapper +where + Runtime: pallet_randomness::Config + pallet_evm::Config + pallet_base_fee::Config, + ::BlockNumber: From, + BalanceOf: TryFrom + Into, +{ + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + log::trace!(target: "randomness-precompile", "In randomness wrapper"); + + let selector = handle.read_selector()?; + + handle.check_function_modifier(match selector { + Action::RelayEpochIndex | Action::GetRequestStatus | Action::GetRequest => { + FunctionModifier::View + } + _ => FunctionModifier::NonPayable, + })?; + + match selector { + Action::RelayEpochIndex => Self::relay_epoch_index(handle), + Action::GetRequestStatus => Self::get_request_status(handle), + Action::GetRequest => Self::get_request(handle), + Action::RequestRelayBabeEpochRandomWords => Self::request_babe_randomness(handle), + Action::RequestLocalVRFRandomWords => Self::request_local_randomness(handle), + Action::FulfillRequest => Self::fulfill_request(handle), + Action::IncreaseRequestFee => Self::increase_request_fee(handle), + Action::PurgeExpiredRequest => Self::execute_request_expiration(handle), + } + } +} + +impl RandomnessWrapper +where + Runtime: pallet_randomness::Config + pallet_evm::Config + pallet_base_fee::Config, + ::BlockNumber: TryInto + TryFrom, + BalanceOf: TryFrom + Into, +{ + fn relay_epoch_index(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let relay_epoch_index = + ::BabeDataGetter::get_epoch_index(); + Ok(succeed( + EvmDataWriter::new().write(relay_epoch_index).build(), + )) + } + fn get_request_status(handle: &mut impl PrecompileHandle) -> EvmResult { + let request_id: u64 = handle + .read_input()? + .read::()? + .try_into() + .map_err(|_| error("Input RequestId overflows u64 type set in Pallet"))?; + // record cost of 2 DB reads + handle.record_cost(RuntimeHelper::::db_read_gas_cost() * 2)?; + let status = + if let Some(RequestState { request, .. }) = Pallet::::requests(request_id) { + if request.is_expired() { + RequestStatus::Expired + } else if request.can_be_fulfilled() { + RequestStatus::Ready + } else { + RequestStatus::Pending + } + } else { + RequestStatus::DoesNotExist + }; + Ok(succeed(EvmDataWriter::new().write(status).build())) + } + fn get_request(handle: &mut impl PrecompileHandle) -> EvmResult { + let request_id: u64 = handle + .read_input()? + .read::()? + .try_into() + .map_err(|_| error("Input RequestId overflows u64 type set in Pallet"))?; + // record cost of 2 DB reads + handle.record_cost(RuntimeHelper::::db_read_gas_cost() * 2)?; + let RequestState { request, .. } = + Pallet::::requests(request_id).ok_or(error("Request Does Not Exist"))?; + let status = if request.is_expired() { + RequestStatus::Expired + } else if request.can_be_fulfilled() { + RequestStatus::Ready + } else { + RequestStatus::Pending + }; + let ( + randomness_source, + fulfillment_block, + fulfillment_epoch, + expiration_block, + expiration_epoch, + request_status, + ) = match request.info { + RequestInfo::BabeEpoch(epoch_due, epoch_expired) => ( + RandomnessSource::RelayBabeEpoch, + 0u64, + epoch_due, + 0u64, + epoch_expired, + status, + ), + RequestInfo::Local(block_due, block_expired) => ( + RandomnessSource::LocalVRF, + block_due + .try_into() + .map_err(|_| revert("block number overflowed u32"))?, + 0u64, + block_expired + .try_into() + .map_err(|_| revert("block number overflowed u32"))?, + 0u64, + status, + ), + }; + let (refund_address, contract_address, fee): (Address, Address, U256) = ( + request.refund_address.into(), + request.contract_address.into(), + request.fee.into(), + ); + let writer = EvmDataWriter::new() + .write(request_id) + .write(refund_address) + .write(contract_address) + .write(fee) + .write(request.gas_limit) + .write(request.salt) + .write(request.num_words) + .write(randomness_source) + .write(fulfillment_block) + .write(fulfillment_epoch) + .write(expiration_block) + .write(expiration_epoch) + .write(request_status) + .build(); + Ok(succeed(writer)) + } + /// Make request for babe randomness one epoch ago + fn request_babe_randomness(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + let contract_address = handle.context().caller; + let refund_address = input.read::
()?.0; + let fee: BalanceOf = input + .read::()? + .try_into() + .map_err(|_| revert("amount is too large for provided balance type"))?; + let gas_limit = input.read::()?; + let salt = input.read::()?; + let num_words = input.read::()?; + handle.record_cost( + REQUEST_RANDOMNESS_ESTIMATED_COST + RuntimeHelper::::db_read_gas_cost(), + )?; + let two_epochs_later = + ::BabeDataGetter::get_epoch_index() + .checked_add(2u64) + .ok_or(error("Epoch Index (u64) overflowed"))?; + let request = Request { + refund_address, + contract_address, + fee, + gas_limit, + num_words, + salt, + info: RequestType::BabeEpoch(two_epochs_later), + }; + + let request_id: U256 = Pallet::::request_randomness(request) + .map_err(|e| error(alloc::format!("{:?}", e)))? + .into(); + + Ok(PrecompileOutput { + exit_status: ExitSucceed::Returned, + output: EvmDataWriter::new().write(request_id).build(), + }) + } + /// Make request for local VRF randomness + fn request_local_randomness(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + let contract_address = handle.context().caller; + let refund_address = input.read::
()?.0; + let fee: BalanceOf = input + .read::()? + .try_into() + .map_err(|_| revert("amount is too large for provided balance type"))?; + let gas_limit = input.read::()?; + let salt = input.read::()?; + let num_words = input.read::()?; + let blocks_after_current = input.read::()?; + handle.record_cost( + REQUEST_RANDOMNESS_ESTIMATED_COST + RuntimeHelper::::db_read_gas_cost(), + )?; + let current_block_number: u64 = >::block_number() + .try_into() + .map_err(|_| revert("block number overflowed u64"))?; + let requested_block_number = blocks_after_current + .checked_add(current_block_number) + .ok_or(error("addition result overflowed u64"))? + .try_into() + .map_err(|_| revert("u64 addition result overflowed block number type"))?; + let request = Request { + refund_address, + contract_address, + fee, + gas_limit, + num_words, + salt, + info: RequestType::Local(requested_block_number), + }; + + let request_id: U256 = Pallet::::request_randomness(request) + .map_err(|e| error(alloc::format!("{:?}", e)))? + .into(); + + Ok(PrecompileOutput { + exit_status: ExitSucceed::Returned, + output: EvmDataWriter::new().write(request_id).build(), + }) + } + /// Fulfill a randomness request due to be fulfilled + fn fulfill_request(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + let request_id: u64 = input + .read::()? + .try_into() + .map_err(|_| error("Input RequestId overflows u64 type set in Pallet"))?; + // read all the inputs + let pallet_randomness::FulfillArgs { + request, + deposit, + randomness, + } = Pallet::::prepare_fulfillment(request_id) + .map_err(|e| error(alloc::format!("{:?}", e)))?; + // check that randomness can be provided + ensure_can_provide_randomness::( + handle.code_address(), + request.gas_limit, + request.fee, + FULFILLMENT_OVERHEAD_ESTIMATED_COST, + )?; + // get gas before subcall + let before_remaining_gas = handle.remaining_gas(); + provide_randomness( + handle, + request_id, + request.gas_limit, + request.contract_address.clone().into(), + randomness.into_iter().map(|x| H256(x)).collect(), + )?; + // get gas after subcall + let after_remaining_gas = handle.remaining_gas(); + let gas_used: U256 = before_remaining_gas + .checked_sub(after_remaining_gas) + .ok_or(revert("Before remaining gas < After remaining gas"))? + .into(); + // cost of execution is before_remaining_gas less after_remaining_gas + let cost_of_execution: BalanceOf = gas_used + .checked_mul(pallet_base_fee::Pallet::::base_fee_per_gas()) + .ok_or(revert("Multiply gas used by base fee overflowed"))? + .try_into() + .map_err(|_| revert("amount is too large for provided balance type"))?; + // Finish fulfillment to + // refund cost of execution to caller + // refund excess fee to the refund_address + // remove request state + Pallet::::finish_fulfillment( + request_id, + request, + deposit, + &handle.context().caller, + cost_of_execution, + ); + Ok(PrecompileOutput { + exit_status: ExitSucceed::Returned, + output: Default::default(), + }) + } + /// Increase the fee used to refund fulfillment of the request + fn increase_request_fee(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + let request_id: u64 = input + .read::()? + .try_into() + .map_err(|_| error("Input RequestId overflows u64 type set in Pallet"))?; + let fee_increase: BalanceOf = input + .read::()? + .try_into() + .map_err(|_| revert("amount is too large for provided balance type"))?; + handle.record_cost(INCREASE_REQUEST_FEE_ESTIMATED_COST)?; + Pallet::::increase_request_fee(&handle.context().caller, request_id, fee_increase) + .map_err(|e| error(alloc::format!("{:?}", e)))?; + Ok(PrecompileOutput { + exit_status: ExitSucceed::Returned, + output: Default::default(), + }) + } + /// Execute request expiration to remove the request from storage + /// Transfers `fee` to caller and `deposit` back to `contract_address` + fn execute_request_expiration( + handle: &mut impl PrecompileHandle, + ) -> EvmResult { + let mut input = handle.read_input()?; + let request_id: u64 = input + .read::()? + .try_into() + .map_err(|_| error("Input RequestId overflows u64 type set in Pallet"))?; + handle.record_cost(EXECUTE_EXPIRATION_ESTIMATED_COST)?; + Pallet::::execute_request_expiration(&handle.context().caller, request_id) + .map_err(|e| error(alloc::format!("{:?}", e)))?; + Ok(PrecompileOutput { + exit_status: ExitSucceed::Returned, + output: Default::default(), + }) + } +} diff --git a/precompiles/randomness/src/mock.rs b/precompiles/randomness/src/mock.rs new file mode 100644 index 0000000000..2ba6b7fe3e --- /dev/null +++ b/precompiles/randomness/src/mock.rs @@ -0,0 +1,284 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! A minimal precompile runtime including the pallet-randomness pallet +use super::*; +use codec::{Decode, Encode, MaxEncodedLen}; +use pallet_evm::{ + IdentityAddressMapping, EnsureAddressNever, EnsureAddressRoot, Precompile, PrecompileSet, +}; +use pallet_randomness::{Config, VrfInput}; +use frame_support::{ + construct_runtime, parameter_types, + traits::{Everything, GenesisBuild}, + weights::Weight, +}; +use nimbus_primitives::NimbusId; +use serde::{Deserialize, Serialize}; +use session_keys_primitives::VrfId; +use sp_consensus_babe::Slot; +use sp_core::{H160, H256}; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, + Perbill, +}; +use sp_std::convert::{TryFrom, TryInto}; +use precompile_utils::precompile_set::*; + +pub type AccountId = H160; +pub type Balance = u128; +pub type BlockNumber = u64; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; + +// Configure a mock runtime to test the pallet. +construct_runtime!( + pub enum Runtime where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + AuthorMapping: pallet_author_mapping::{Pallet, Call, Storage, Config, Event}, + Evm: pallet_evm::{Pallet, Call, Storage, Event}, + Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, + Randomness: pallet_randomness::{Pallet, Call, Storage, Event, Inherent}, + } +); + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub const MaximumBlockWeight: Weight = 1024; + pub const MaximumBlockLength: u32 = 2 * 1024; + pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const SS58Prefix: u8 = 42; +} +impl frame_system::Config for Runtime { + type BaseCallFilter = Everything; + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = BlockNumber; + type Call = Call; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type BlockWeights = (); + type BlockLength = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; +} + +parameter_types! { + pub const ExistentialDeposit: u128 = 0; +} +impl pallet_balances::Config for Runtime { + type MaxReserves = (); + type ReserveIdentifier = [u8; 4]; + type MaxLocks = (); + type Balance = Balance; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); +} + +/// The randomness precompile is available at address one in the mock runtime. +pub fn precompile_address() -> H160 { + H160::from_low_u64_be(1) +} + +pub type TestPrecompiles = PrecompileSetBuilder< + R, + ( + PrecompileAt, RandomnessWrapper, LimitRecursionTo<1>>, + RevertPrecompile>, + ), +>; + +parameter_types! { + pub PrecompilesValue: TestPrecompiles = TestPrecompiles::new(); +} + +impl pallet_evm::Config for Runtime { + type FeeCalculator = (); + type GasWeightMapping = (); + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = IdentityAddressMapping; + type Currency = Balances; + type Event = Event; + type Runner = pallet_evm::runner::stack::Runner; + type PrecompilesType = TestPrecompiles; + type PrecompilesValue = PrecompilesValue; + type ChainId = (); + type OnChargeTransaction = (); + type BlockGasLimit = (); + type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; + type FindAuthor = (); + type WeightInfo = (); +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Config for Runtime { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; + type WeightInfo = (); +} + +parameter_types! { + pub const DepositAmount: Balance = 100; +} +impl pallet_author_mapping::Config for Runtime { + type Event = Event; + type DepositCurrency = Balances; + type DepositAmount = DepositAmount; + type Keys = VrfId; + type WeightInfo = (); +} + +pub struct BabeDataGetter; +impl pallet_randomness::traits::GetBabeData> for BabeDataGetter { + fn get_epoch_index() -> u64 { + 1u64 + } + fn get_epoch_randomness() -> Option { + None + } +} + +parameter_types! { + pub const Deposit: u128 = 10; + pub const MaxBlockDelay: u32 = 5; + pub const MaxEpochDelay: u32 = 5; + pub const MinBlockDelay: u32 = 2; + pub const MinEpochDelay: u32 = 2; +} +impl Config for Runtime { + type Event = Event; + type AddressMapping = IdentityAddressMapping; + type Currency = Balances; + type BabeDataGetter = BabeDataGetter; + type VrfKeyLookup = AuthorMapping; + type Deposit = Deposit; + type MinBlockDelay = MinBlockDelay; + type MaxBlockDelay = MaxBlockDelay; + type BlockExpirationDelay = MaxBlockDelay; + type EpochExpirationDelay = MaxEpochDelay; +} + +pub(crate) fn events() -> Vec> { + System::events() + .into_iter() + .map(|r| r.event) + .filter_map(|e| { + if let Event::Randomness(inner) = e { + Some(inner) + } else { + None + } + }) + .collect::>() +} + +/// Panics if an event is not found in the system log of events +#[macro_export] +macro_rules! assert_event_emitted { + ($event:expr) => { + match &$event { + e => { + assert!( + crate::mock::events().iter().find(|x| *x == e).is_some(), + "Event {:?} was not found in events: \n {:?}", + e, + crate::mock::events() + ); + } + } + }; +} + +/// Externality builder for pallet randomness mock runtime +pub(crate) struct ExtBuilder { + /// Balance amounts per AccountId + balances: Vec<(AccountId, Balance)>, + /// AuthorId -> AccountId mappings + mappings: Vec<(NimbusId, AccountId)>, +} + +impl Default for ExtBuilder { + fn default() -> ExtBuilder { + ExtBuilder { + balances: Vec::new(), + mappings: Vec::new(), + } + } +} + +impl ExtBuilder { + #[allow(dead_code)] + pub(crate) fn with_balances(mut self, balances: Vec<(Account, Balance)>) -> Self { + self.balances = balances; + self + } + + #[allow(dead_code)] + pub(crate) fn with_mappings(mut self, mappings: Vec<(NimbusId, Account)>) -> Self { + self.mappings = mappings; + self + } + + #[allow(dead_code)] + pub(crate) fn build(self) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::default() + .build_storage::() + .expect("Frame system builds valid default genesis config"); + + pallet_balances::GenesisConfig:: { + balances: self.balances, + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); + + pallet_author_mapping::GenesisConfig:: { + mappings: self.mappings, + } + .assimilate_storage(&mut t) + .expect("Pallet author mapping's storage can be assimilated"); + + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(1)); + ext + } +} diff --git a/precompiles/randomness/src/solidity_types.rs b/precompiles/randomness/src/solidity_types.rs new file mode 100644 index 0000000000..ab28f17f7f --- /dev/null +++ b/precompiles/randomness/src/solidity_types.rs @@ -0,0 +1,78 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Solidity types for randomness precompile. +use precompile_utils::prelude::*; + +pub enum RequestStatus { + DoesNotExist, + Pending, + Ready, + Expired, +} + +pub enum RandomnessSource { + LocalVRF, + RelayBabeEpoch, +} + +impl EvmData for RequestStatus { + fn read(reader: &mut EvmDataReader) -> EvmResult { + match reader.read()? { + 0u8 => Ok(RequestStatus::DoesNotExist), + 1u8 => Ok(RequestStatus::Pending), + 2u8 => Ok(RequestStatus::Ready), + 3u8 => Ok(RequestStatus::Expired), + _ => Err(revert("Not available enum")), + } + } + + fn write(writer: &mut EvmDataWriter, value: Self) { + let encoded: u8 = match value { + RequestStatus::DoesNotExist => 0u8, + RequestStatus::Pending => 1u8, + RequestStatus::Ready => 2u8, + RequestStatus::Expired => 3u8, + }; + EvmData::write(writer, encoded); + } + + fn has_static_size() -> bool { + true + } +} + +impl EvmData for RandomnessSource { + fn read(reader: &mut EvmDataReader) -> EvmResult { + match reader.read()? { + 0u8 => Ok(RandomnessSource::LocalVRF), + 1u8 => Ok(RandomnessSource::RelayBabeEpoch), + _ => Err(revert("Not available enum")), + } + } + + fn write(writer: &mut EvmDataWriter, value: Self) { + let encoded: u8 = match value { + RandomnessSource::LocalVRF => 0u8, + RandomnessSource::RelayBabeEpoch => 1u8, + }; + EvmData::write(writer, encoded); + } + + fn has_static_size() -> bool { + true + } +} diff --git a/precompiles/randomness/src/tests.rs b/precompiles/randomness/src/tests.rs new file mode 100644 index 0000000000..08f9055494 --- /dev/null +++ b/precompiles/randomness/src/tests.rs @@ -0,0 +1,71 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Randomness precompile unit tests + +// use std::collections::HashSet; + +// use precompile_utils::solidity; + +// use crate::Action; +// use crate::mock::*; + +// #[test] +// fn test_all_actions_are_implemented_in_solidity_interface() { +// let selectors = solidity::get_selectors("Randomness.sol") +// .into_iter() +// .map(|sf| sf.compute_selector()) +// .collect::>(); + +// assert_eq!(Action::RelayEpochIndex as u32, 0x81797566); +// assert!(selectors.contains(&(Action::RelayEpochIndex as u32))); + +// assert_eq!(Action::RequestBabeRandomness as u32, 0xbbc9e95f); +// assert!(selectors.contains(&(Action::RequestBabeRandomness as u32))); + +// assert_eq!(Action::RequestLocalRandomness as u32, 0xb4a11763); +// assert!(selectors.contains(&(Action::RequestLocalRandomness as u32))); + +// assert_eq!(Action::FulfillRequest as u32, 0xb9904a86); +// assert!(selectors.contains(&(Action::FulfillRequest as u32))); + +// assert_eq!(Action::IncreaseRequestFee as u32, 0x6a5b3380); +// assert!(selectors.contains(&(Action::IncreaseRequestFee as u32))); + +// assert_eq!(Action::ExecuteRequestExpiration as u32, 0x8fcdcc49); +// assert!(selectors.contains(&(Action::ExecuteRequestExpiration as u32))); +// } + +// #[test] +// fn test_solidity_interface_has_all_function_selectors_documented_and_implemented() { +// for solidity_fn in solidity::get_selectors("Randomness.sol") { +// assert_eq!( +// solidity_fn.compute_selector_hex(), +// solidity_fn.docs_selector, +// "documented selector for '{}' did not match", +// solidity_fn.signature() +// ); + +// let selector = solidity_fn.compute_selector(); +// if Action::try_from(selector).is_err() { +// panic!( +// "failed decoding selector 0x{:x} => '{}' as Action", +// selector, +// solidity_fn.signature() +// ) +// } +// } +// } diff --git a/precompiles/relay-encoder/Cargo.toml b/precompiles/relay-encoder/Cargo.toml index 3bcca5c32a..844467816d 100644 --- a/precompiles/relay-encoder/Cargo.toml +++ b/precompiles/relay-encoder/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "relay-encoder-precompiles" +name = "pallet-evm-precompile-relay-encoder" authors = [ "PureStake" ] description = "A Precompile to make relay staking calls encoding accessible to pallet-evm" edition = "2021" @@ -14,21 +14,21 @@ rustc-hex = { version = "2.0.1", default-features = false } precompile-utils = { path = "../utils", default-features = false } # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-staking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Cumulus -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = "0.99" @@ -36,14 +36,17 @@ hex-literal = "0.3.3" serde = "1.0.100" sha3 = "0.9" +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } + # Substrate -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Cumulus -cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } +cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/precompiles/relay-encoder/RelayEncoder.sol b/precompiles/relay-encoder/RelayEncoder.sol index ef14e080da..53905fc1cb 100644 --- a/precompiles/relay-encoder/RelayEncoder.sol +++ b/precompiles/relay-encoder/RelayEncoder.sol @@ -10,32 +10,44 @@ pragma solidity >=0.8.0; */ interface RelayEncoder { - // dev Encode 'bond' relay call // Selector: 31627376 // @param controller_address: Address of the controller // @param amount: The amount to bond // @param reward_destination: the account that should receive the reward // @returns The bytes associated with the encoded call - function encode_bond(uint256 controller_address, uint256 amount, bytes memory reward_destination) external pure returns (bytes memory result); + function encode_bond( + uint256 controller_address, + uint256 amount, + bytes memory reward_destination + ) external pure returns (bytes memory result); // dev Encode 'bond_extra' relay call // Selector: 49def326 // @param amount: The extra amount to bond // @returns The bytes associated with the encoded call - function encode_bond_extra(uint256 amount) external pure returns (bytes memory result); + function encode_bond_extra(uint256 amount) + external + pure + returns (bytes memory result); // dev Encode 'unbond' relay call - // Selector: bc4b2187 + // Selector: 2cd61217 // @param amount: The amount to unbond // @returns The bytes associated with the encoded call - function encode_unbond(uint256 amount) external pure returns (bytes memory result); + function encode_unbond(uint256 amount) + external + pure + returns (bytes memory result); // dev Encode 'withdraw_unbonded' relay call // Selector: 2d220331 // @param slashes: Weight hint, number of slashing spans // @returns The bytes associated with the encoded call - function encode_withdraw_unbonded(uint32 slashes) external pure returns (bytes memory result); + function encode_withdraw_unbonded(uint32 slashes) + external + pure + returns (bytes memory result); // dev Encode 'validate' relay call // Selector: 3a0d803a @@ -43,14 +55,20 @@ interface RelayEncoder { // @param blocked: Whether or not the validator is accepting more nominations // @returns The bytes associated with the encoded call // selector: 3a0d803a - function encode_validate(uint256 comission, bool blocked) external pure returns (bytes memory result); + function encode_validate(uint256 comission, bool blocked) + external + pure + returns (bytes memory result); // dev Encode 'nominate' relay call // Selector: a7cb124b // @param nominees: An array of AccountIds corresponding to the accounts we will nominate // @param blocked: Whether or not the validator is accepting more nominations // @returns The bytes associated with the encoded call - function encode_nominate(uint256 [] memory nominees) external pure returns (bytes memory result); + function encode_nominate(uint256[] memory nominees) + external + pure + returns (bytes memory result); // dev Encode 'chill' relay call // Selector: bc4b2187 @@ -61,18 +79,26 @@ interface RelayEncoder { // Selector: 9801b147 // @param reward_destination: the account that should receive the reward // @returns The bytes associated with the encoded call - function encode_set_payee(bytes memory reward_destination) external pure returns (bytes memory result); + function encode_set_payee(bytes memory reward_destination) + external + pure + returns (bytes memory result); // dev Encode 'set_controller' relay call // Selector: 7a8f48c2 // @param controller: The controller address // @returns The bytes associated with the encoded call - function encode_set_controller(uint256 controller) external pure returns (bytes memory result); + function encode_set_controller(uint256 controller) + external + pure + returns (bytes memory result); // dev Encode 'rebond' relay call // Selector: add6b3bf // @param amount: The amount to rebond // @returns The bytes associated with the encoded call - function encode_rebond(uint256 amount) external pure returns (bytes memory result); - -} \ No newline at end of file + function encode_rebond(uint256 amount) + external + pure + returns (bytes memory result); +} diff --git a/precompiles/relay-encoder/src/lib.rs b/precompiles/relay-encoder/src/lib.rs index 1afacd1d5d..69336f3d32 100644 --- a/precompiles/relay-encoder/src/lib.rs +++ b/precompiles/relay-encoder/src/lib.rs @@ -20,17 +20,13 @@ #![cfg_attr(test, feature(assert_matches))] use cumulus_primitives_core::relay_chain; -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{Precompile, PrecompileHandle, PrecompileOutput}; use frame_support::{ dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, ensure, }; -use pallet_evm::Precompile; use pallet_staking::RewardDestination; -use precompile_utils::{ - Bytes, EvmData, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, Gasometer, - RuntimeHelper, -}; +use precompile_utils::prelude::*; use sp_core::{H256, U256}; use sp_runtime::AccountId32; use sp_runtime::Perbill; @@ -65,7 +61,7 @@ pub trait StakeEncodeCall { fn encode_call(call: AvailableStakeCalls) -> Vec; } -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] enum Action { EncodeBond = "encode_bond(uint256,uint256,bytes)", @@ -83,25 +79,17 @@ enum Action { /// A precompile to provide relay stake calls encoding through evm pub struct RelayEncoderWrapper(PhantomData<(Runtime, RelayRuntime)>); +// TODO: Migrate to precompile_utils::Precompile. impl Precompile for RelayEncoderWrapper where RelayRuntime: StakeEncodeCall, Runtime: pallet_evm::Config, Runtime::Call: Dispatchable + GetDispatchInfo, { - fn execute( - input: &[u8], //Reminder this is big-endian - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; - - let (mut input, selector) = EvmDataReader::new_with_selector(gasometer, input)?; - let input = &mut input; + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector()?; - gasometer.check_function_modifier(context, is_static, FunctionModifier::View)?; + handle.check_function_modifier(FunctionModifier::View)?; // Parse the function selector // These are the four-byte function selectors calculated from the RelayEncoder.sol @@ -109,16 +97,16 @@ where // https://docs.soliditylang.org/en/v0.8.0/abi-spec.html#function-selector match selector { // Storage Accessors - Action::EncodeBond => Self::encode_bond(input, gasometer), - Action::EncodeBondExtra => Self::encode_bond_extra(input, gasometer), - Action::EncodeUnbond => Self::encode_unbond(input, gasometer), - Action::EncodeWithdrawUnbonded => Self::encode_withdraw_unbonded(input, gasometer), - Action::EncodeValidate => Self::encode_validate(input, gasometer), - Action::EncodeNominate => Self::encode_nominate(input, gasometer), - Action::EncodeChill => Self::encode_chill(input, gasometer), - Action::EncodeSetPayee => Self::encode_set_payee(input, gasometer), - Action::EncodeSetController => Self::encode_set_controller(input, gasometer), - Action::EncodeRebond => Self::encode_rebond(input, gasometer), + Action::EncodeBond => Self::encode_bond(handle), + Action::EncodeBondExtra => Self::encode_bond_extra(handle), + Action::EncodeUnbond => Self::encode_unbond(handle), + Action::EncodeWithdrawUnbonded => Self::encode_withdraw_unbonded(handle), + Action::EncodeValidate => Self::encode_validate(handle), + Action::EncodeNominate => Self::encode_nominate(handle), + Action::EncodeChill => Self::encode_chill(handle), + Action::EncodeSetPayee => Self::encode_set_payee(handle), + Action::EncodeSetController => Self::encode_set_controller(handle), + Action::EncodeRebond => Self::encode_rebond(handle), } } } @@ -129,19 +117,17 @@ where Runtime: pallet_evm::Config, Runtime::Call: Dispatchable + GetDispatchInfo, { - fn encode_bond( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_bond(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 4)?; + let mut input = handle.read_input()?; + input.expect_arguments(4)?; - let address: [u8; 32] = input.read::(gasometer)?.into(); - let amount: U256 = input.read(gasometer)?; - let relay_amount = u256_to_relay_amount(gasometer, amount)?; + let address: [u8; 32] = input.read::()?.into(); + let amount: U256 = input.read()?; + let relay_amount = u256_to_relay_amount(amount)?; - let reward_destination = input.read::(gasometer)?.into(); + let reward_destination = input.read::()?.into(); let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::Bond( address.into(), relay_amount, @@ -150,91 +136,63 @@ where .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_bond_extra( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_bond_extra(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 1)?; - let amount: U256 = input.read(gasometer)?; - let relay_amount = u256_to_relay_amount(gasometer, amount)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; + let amount: U256 = input.read()?; + let relay_amount = u256_to_relay_amount(amount)?; let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::BondExtra(relay_amount)) .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_unbond( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_unbond(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let amount: U256 = input.read(gasometer)?; - let relay_amount = u256_to_relay_amount(gasometer, amount)?; + let amount: U256 = input.read()?; + let relay_amount = u256_to_relay_amount(amount)?; let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::Unbond(relay_amount)) .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_withdraw_unbonded( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_withdraw_unbonded(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let num_slashing_spans: u32 = input.read(gasometer)?; + let num_slashing_spans: u32 = input.read()?; let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::WithdrawUnbonded(num_slashing_spans)) .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_validate( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_validate(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let parst_per_billion: u32 = input.read(gasometer)?; - let blocked: bool = input.read(gasometer)?; + let parst_per_billion: u32 = input.read()?; + let blocked: bool = input.read()?; let fraction = Perbill::from_parts(parst_per_billion); let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::Validate( pallet_staking::ValidatorPrefs { @@ -245,21 +203,14 @@ where .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_nominate( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_nominate(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let nominated_as_h256: Vec = input.read(gasometer)?; + let mut input = handle.read_input()?; + let nominated_as_h256: Vec = input.read()?; let nominated: Vec = nominated_as_h256 .iter() @@ -272,108 +223,72 @@ where .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_chill( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_chill(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 0)?; + let input = handle.read_input()?; + input.expect_arguments(0)?; let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::Chill) .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_set_payee( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_set_payee(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 2)?; + let mut input = handle.read_input()?; + input.expect_arguments(2)?; - let reward_destination = input.read::(gasometer)?.into(); + let reward_destination = input.read::()?.into(); let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::SetPayee(reward_destination)) .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_set_controller( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_set_controller(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let controller: [u8; 32] = input.read::(gasometer)?.into(); + let mut input = handle.read_input()?; + let controller: [u8; 32] = input.read::()?.into(); let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::SetController(controller.into())) .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } - fn encode_rebond( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; + fn encode_rebond(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; - input.expect_arguments(gasometer, 1)?; + let mut input = handle.read_input()?; + input.expect_arguments(1)?; - let amount: U256 = input.read(gasometer)?; - let relay_amount = u256_to_relay_amount(gasometer, amount)?; + let amount: U256 = input.read()?; + let relay_amount = u256_to_relay_amount(amount)?; let encoded: Bytes = RelayRuntime::encode_call(AvailableStakeCalls::Rebond(relay_amount)) .as_slice() .into(); - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(encoded).build(), - logs: Default::default(), - }) + Ok(succeed(EvmDataWriter::new().write(encoded).build())) } } -pub fn u256_to_relay_amount( - gasometer: &mut Gasometer, - value: U256, -) -> EvmResult { +pub fn u256_to_relay_amount(value: U256) -> EvmResult { value .try_into() - .map_err(|_| gasometer.revert("amount is too large for provided balance type")) + .map_err(|_| revert("amount is too large for provided balance type")) } // A wrapper to be able to implement here the EvmData reader @@ -393,31 +308,31 @@ impl Into> for RewardDestinationWrapper { } impl EvmData for RewardDestinationWrapper { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let reward_destination = reader.read::(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let reward_destination = reader.read::()?; let reward_destination_bytes = reward_destination.as_bytes(); ensure!( reward_destination_bytes.len() > 0, - gasometer.revert("Reward destinations cannot be empty") + revert("Reward destinations cannot be empty") ); // For simplicity we use an EvmReader here let mut encoded_reward_destination = EvmDataReader::new(&reward_destination_bytes); // We take the first byte - let enum_selector = encoded_reward_destination.read_raw_bytes(gasometer, 1)?; + let enum_selector = encoded_reward_destination.read_raw_bytes(1)?; // The firs byte selects the enum variant match enum_selector[0] { 0u8 => Ok(RewardDestinationWrapper(RewardDestination::Staked)), 1u8 => Ok(RewardDestinationWrapper(RewardDestination::Stash)), 2u8 => Ok(RewardDestinationWrapper(RewardDestination::Controller)), 3u8 => { - let address = encoded_reward_destination.read::(gasometer)?; + let address = encoded_reward_destination.read::()?; Ok(RewardDestinationWrapper(RewardDestination::Account( address.as_fixed_bytes().clone().into(), ))) } 4u8 => Ok(RewardDestinationWrapper(RewardDestination::None)), - _ => Err(gasometer.revert("Not available enum")), + _ => Err(revert("Not available enum")), } } diff --git a/precompiles/relay-encoder/src/mock.rs b/precompiles/relay-encoder/src/mock.rs index 1e41db87d6..7e0fdf8267 100644 --- a/precompiles/relay-encoder/src/mock.rs +++ b/precompiles/relay-encoder/src/mock.rs @@ -32,7 +32,7 @@ use sp_runtime::{ Perbill, }; -pub type AccountId = TestAccount; +pub type AccountId = Account; pub type Balance = u128; pub type BlockNumber = u64; @@ -70,41 +70,50 @@ construct_runtime!( derive_more::Display, scale_info::TypeInfo, )] -pub enum TestAccount { +pub enum Account { Alice, Bob, Charlie, Bogus, + Precompile, } -impl Default for TestAccount { +impl Default for Account { fn default() -> Self { Self::Bogus } } -impl AddressMapping for TestAccount { - fn into_account_id(h160_account: H160) -> TestAccount { +impl Into for Account { + fn into(self) -> H160 { + match self { + Account::Alice => H160::repeat_byte(0xAA), + Account::Bob => H160::repeat_byte(0xBB), + Account::Charlie => H160::repeat_byte(0xCC), + Account::Bogus => H160::repeat_byte(0xDD), + Account::Precompile => H160::from_low_u64_be(1), + } + } +} + +impl AddressMapping for Account { + fn into_account_id(h160_account: H160) -> Account { match h160_account { a if a == H160::repeat_byte(0xAA) => Self::Alice, a if a == H160::repeat_byte(0xBB) => Self::Bob, a if a == H160::repeat_byte(0xCC) => Self::Charlie, + a if a == H160::from_low_u64_be(1) => Self::Precompile, _ => Self::Bogus, } } } -impl From for TestAccount { - fn from(x: H160) -> TestAccount { - TestAccount::into_account_id(x) +impl From for Account { + fn from(x: H160) -> Account { + Account::into_account_id(x) } } -/// The relay encoder precompile is available at address one in the mock runtime. -pub fn precompile_address() -> H160 { - H160::from_low_u64_be(1) -} - parameter_types! { pub const BlockHashCount: u64 = 250; pub const SS58Prefix: u8 = 42; @@ -118,7 +127,7 @@ impl frame_system::Config for Runtime { type Call = Call; type Hash = H256; type Hashing = BlakeTwo256; - type AccountId = TestAccount; + type AccountId = Account; type Lookup = IdentityLookup; type Header = Header; type Event = Event; @@ -173,40 +182,31 @@ impl PrecompileSet for TestPrecompiles where RelayEncoderWrapper: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == precompile_address() => Some(RelayEncoderWrapper::< - R, - test_relay_runtime::TestEncoder, - >::execute( - input, target_gas, context, is_static - )), + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == H160::from_low_u64_be(1) => { + Some(RelayEncoderWrapper::::execute(handle)) + } _ => None, } } fn is_precompile(&self, address: H160) -> bool { - address == precompile_address() + address == H160::from_low_u64_be(1) } } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub const PrecompilesValue: TestPrecompiles = TestPrecompiles(PhantomData); } impl pallet_evm::Config for Runtime { type FeeCalculator = (); type GasWeightMapping = (); - type CallOrigin = EnsureAddressRoot; - type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = TestAccount; + type CallOrigin = EnsureAddressRoot; + type WithdrawOrigin = EnsureAddressNever; + type AddressMapping = Account; type Currency = Balances; type Event = Event; type Runner = pallet_evm::runner::stack::Runner; @@ -214,10 +214,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesType = TestPrecompiles; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } parameter_types! { @@ -270,14 +269,3 @@ impl ExtBuilder { ext } } - -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> fp_evm::Context { - fp_evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} diff --git a/precompiles/relay-encoder/src/tests.rs b/precompiles/relay-encoder/src/tests.rs index cb66b308e3..fc624216ad 100644 --- a/precompiles/relay-encoder/src/tests.rs +++ b/precompiles/relay-encoder/src/tests.rs @@ -13,24 +13,17 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . - -use std::assert_matches::assert_matches; - use crate::mock::{ - evm_test_context, precompile_address, ExtBuilder, PrecompilesValue, Runtime, - TestAccount::Alice, TestPrecompiles, + Account::{Alice, Precompile}, + ExtBuilder, PrecompilesValue, Runtime, TestPrecompiles, }; use crate::test_relay_runtime::TestEncoder; +use crate::AvailableStakeCalls; use crate::StakeEncodeCall; use crate::*; -use crate::{AvailableStakeCalls, PrecompileOutput}; -use fp_evm::PrecompileFailure; -use num_enum::TryFromPrimitive; -use pallet_evm::{ExitSucceed, PrecompileSet}; use pallet_staking::RewardDestination; use pallet_staking::ValidatorPrefs; -use precompile_utils::{Bytes, EvmDataWriter}; -use sha3::{Digest, Keccak256}; +use precompile_utils::testing::*; use sp_core::{H256, U256}; use sp_runtime::Perbill; @@ -40,113 +33,33 @@ fn precompiles() -> TestPrecompiles { #[test] fn test_selector_enum() { - let mut buffer = [0u8; 4]; - buffer.copy_from_slice(&Keccak256::digest(b"encode_bond(uint256,uint256,bytes)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeBond, - ); - buffer.copy_from_slice(&Keccak256::digest(b"encode_bond_extra(uint256)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeBondExtra, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_chill()")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeChill, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_nominate(uint256[])")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeNominate, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_rebond(uint256)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeRebond, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_set_controller(uint256)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeSetController, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_set_payee(bytes)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeSetPayee, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_unbond(uint256)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeUnbond, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_validate(uint256,bool)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeValidate, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"encode_withdraw_unbonded(uint32)")[0..4]); - - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::EncodeWithdrawUnbonded, - ); + assert_eq!(Action::EncodeBond as u32, 0x31627376); + assert_eq!(Action::EncodeBondExtra as u32, 0x49def326); + assert_eq!(Action::EncodeUnbond as u32, 0x2cd61217); + assert_eq!(Action::EncodeWithdrawUnbonded as u32, 0x2d220331); + assert_eq!(Action::EncodeValidate as u32, 0x3a0d803a); + assert_eq!(Action::EncodeNominate as u32, 0xa7cb124b); + assert_eq!(Action::EncodeChill as u32, 0xbc4b2187); + assert_eq!(Action::EncodeSetPayee as u32, 0x9801b147); + assert_eq!(Action::EncodeSetController as u32, 0x7a8f48c2); + assert_eq!(Action::EncodeRebond as u32, 0xadd6b3bf); } #[test] fn selector_less_than_four_bytes() { ExtBuilder::default().build().execute_with(|| { - // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, .. })) - if &output == b"tried to parse selector out of bounds" - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8]) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); }); } #[test] fn no_selector_exists_but_length_is_right() { ExtBuilder::default().build().execute_with(|| { - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if &output == b"unknown selector" - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8, 4u8]) + .execute_reverts(|output| output == b"unknown selector"); }); } @@ -156,40 +69,30 @@ fn test_encode_bond() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let controller_address: H256 = [1u8; 32].into(); - let amount: U256 = 100u32.into(); - - let input_data = EvmDataWriter::new_with_selector(Action::EncodeBond) - .write(controller_address) - .write(amount) - .write(RewardDestinationWrapper(RewardDestination::Controller)) - .build(); - - let expected_bytes: Bytes = TestEncoder::encode_call(AvailableStakeCalls::Bond( - [1u8; 32].into(), - 100u32.into(), - RewardDestination::Controller, - )) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeBond) + .write(H256::from([1u8; 32])) + .write(U256::from(100)) + .write(RewardDestinationWrapper(RewardDestination::Controller)) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::Bond( + [1u8; 32].into(), + 100u32.into(), + RewardDestination::Controller, + )) + .as_slice(), + )) + .build(), + ); }); } @@ -199,33 +102,24 @@ fn test_encode_bond_more() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let amount: U256 = 100u32.into(); - let input_data = EvmDataWriter::new_with_selector(Action::EncodeBondExtra) - .write(amount) - .build(); - - let expected_bytes: Bytes = - TestEncoder::encode_call(AvailableStakeCalls::BondExtra(100u32.into())) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeBondExtra) + .write(U256::from(100)) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::BondExtra(100u32.into())) + .as_slice(), + )) + .build(), + ); }); } @@ -235,29 +129,21 @@ fn test_encode_chill() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let input_data = EvmDataWriter::new_with_selector(Action::EncodeChill).build(); - - let expected_bytes: Bytes = TestEncoder::encode_call(AvailableStakeCalls::Chill) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeChill).build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::Chill).as_slice(), + )) + .build(), + ); }); } @@ -267,37 +153,27 @@ fn test_encode_nominate() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let array: Vec = vec![[1u8; 32].into(), [2u8; 32].into()]; - - let input_data = EvmDataWriter::new_with_selector(Action::EncodeNominate) - .write(array) - .build(); - - let expected_bytes: Bytes = - TestEncoder::encode_call(AvailableStakeCalls::Nominate(vec![ - [1u8; 32].into(), - [2u8; 32].into(), - ])) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeNominate) + .write(vec![H256::from([1u8; 32]), H256::from([2u8; 32])]) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::Nominate(vec![ + [1u8; 32].into(), + [2u8; 32].into(), + ])) + .as_slice(), + )) + .build(), + ); }); } @@ -307,34 +183,24 @@ fn test_encode_rebond() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let amount: U256 = 100u32.into(); - - let input_data = EvmDataWriter::new_with_selector(Action::EncodeRebond) - .write(amount) - .build(); - - let expected_bytes: Bytes = - TestEncoder::encode_call(AvailableStakeCalls::Rebond(100u128)) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeRebond) + .write(U256::from(100)) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::Rebond(100u128)) + .as_slice(), + )) + .build(), + ); }); } @@ -344,34 +210,26 @@ fn test_encode_set_controller() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let controller: H256 = [1u8; 32].into(); - - let input_data = EvmDataWriter::new_with_selector(Action::EncodeSetController) - .write(controller) - .build(); - - let expected_bytes: Bytes = - TestEncoder::encode_call(AvailableStakeCalls::SetController([1u8; 32].into())) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeSetController) + .write(H256::from([1u8; 32])) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::SetController( + [1u8; 32].into(), + )) + .as_slice(), + )) + .build(), + ) }); } @@ -381,33 +239,26 @@ fn test_encode_set_payee() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let input_data = EvmDataWriter::new_with_selector(Action::EncodeSetPayee) - .write(RewardDestinationWrapper(RewardDestination::Controller)) - .build(); - - let expected_bytes: Bytes = TestEncoder::encode_call(AvailableStakeCalls::SetPayee( - RewardDestination::Controller, - )) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeSetPayee) + .write(RewardDestinationWrapper(RewardDestination::Controller)) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::SetPayee( + RewardDestination::Controller, + )) + .as_slice(), + )) + .build(), + ); }); } @@ -417,36 +268,24 @@ fn test_encode_unbond() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let amount: U256 = 100u32.into(); - - let input_data = EvmDataWriter::new_with_selector(Action::EncodeUnbond) - .write(amount) - .build(); - - let expected_bytes: Bytes = - TestEncoder::encode_call(AvailableStakeCalls::Unbond(100u32.into())) - .as_slice() - .into(); - - // Expected result is one - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that no props have been opened. - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeUnbond) + .write(U256::from(100)) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::Unbond(100u32.into())) + .as_slice(), + )) + .build(), + ); }); } @@ -456,41 +295,30 @@ fn test_encode_validate() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let amount: U256 = 100u32.into(); - let blocked = true; - - let input_data = EvmDataWriter::new_with_selector(Action::EncodeValidate) - .write(amount) - .write(blocked) - .build(); - - let expected_bytes: Bytes = - TestEncoder::encode_call(AvailableStakeCalls::Validate(ValidatorPrefs { - commission: Perbill::from_parts(100u32.into()), - blocked: true, - })) - .as_slice() - .into(); - - // Expected result is one - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - // Assert that no props have been opened. - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeValidate) + .write(U256::from(100)) + .write(true) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::Validate( + ValidatorPrefs { + commission: Perbill::from_parts(100u32.into()), + blocked: true, + }, + )) + .as_slice(), + )) + .build(), + ); }); } @@ -500,34 +328,25 @@ fn test_encode_withdraw_unbonded() { .with_balances(vec![(Alice, 1000)]) .build() .execute_with(|| { - let amount: U256 = 100u32.into(); - - let input_data = EvmDataWriter::new_with_selector(Action::EncodeWithdrawUnbonded) - .write(amount) - .build(); - - // Ethereum style - let expected_bytes: Bytes = - TestEncoder::encode_call(AvailableStakeCalls::WithdrawUnbonded(100u32.into())) - .as_slice() - .into(); - - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(expected_bytes).build(), - cost: Default::default(), - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute( - precompile_address(), - &input_data, - None, - &evm_test_context(), - false - ), - expected_result - ); + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::EncodeWithdrawUnbonded) + .write(U256::from(100)) + .build(), + ) + .expect_cost(0) // TODO: Test db read/write costs + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Bytes::from( + TestEncoder::encode_call(AvailableStakeCalls::WithdrawUnbonded( + 100u32.into(), + )) + .as_slice(), + )) + .build(), + ); }); } diff --git a/precompiles/utils/Cargo.toml b/precompiles/utils/Cargo.toml index 7e2b1b2179..329b0009a2 100644 --- a/precompiles/utils/Cargo.toml +++ b/precompiles/utils/Cargo.toml @@ -6,28 +6,31 @@ edition = "2021" version = "0.1.0" [dependencies] +hex = { version = "0.4.3", default-features = false } impl-trait-for-tuples = "0.2.2" log = "0.4" num_enum = { version = "0.5.3", default-features = false } sha3 = { version = "0.9", default-features = false } +similar-asserts = { version = "1.1.0", optional = true } # Moonbeam precompile-utils-macro = { path = "macro" } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +evm = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false, features = [ "with-codec" ] } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Polkadot / XCM -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] hex-literal = "0.3.1" @@ -44,3 +47,4 @@ std = [ "sp-io/std", "sp-std/std", ] +testing = [ "similar-asserts", "std" ] diff --git a/precompiles/utils/macro/src/lib.rs b/precompiles/utils/macro/src/lib.rs index e0fff1420d..b11f116c46 100644 --- a/precompiles/utils/macro/src/lib.rs +++ b/precompiles/utils/macro/src/lib.rs @@ -18,7 +18,9 @@ use proc_macro::TokenStream; use proc_macro2::Literal; use quote::{quote, quote_spanned}; use sha3::{Digest, Keccak256}; -use syn::{parse_macro_input, spanned::Spanned, Expr, ExprLit, Ident, ItemEnum, Lit, LitStr}; +use syn::{ + parse_macro_input, spanned::Spanned, Attribute, Expr, ExprLit, Ident, ItemEnum, Lit, LitStr, +}; struct Bytes(Vec); @@ -93,6 +95,7 @@ pub fn generate_function_selector(_: TokenStream, input: TokenStream) -> TokenSt let mut ident_expressions: Vec = vec![]; let mut variant_expressions: Vec = vec![]; + let mut variant_attrs: Vec> = vec![]; for variant in variants { match variant.discriminant { Some((_, Expr::Lit(ExprLit { lit, .. }))) => { @@ -104,6 +107,7 @@ pub fn generate_function_selector(_: TokenStream, input: TokenStream) -> TokenSt lit: Lit::Verbatim(Literal::u32_suffixed(selector)), attrs: Default::default(), })); + variant_attrs.push(variant.attrs); } else { return quote_spanned! { lit.span() => compile_error("Expected literal string"); @@ -132,6 +136,7 @@ pub fn generate_function_selector(_: TokenStream, input: TokenStream) -> TokenSt #[repr(u32)] #vis #enum_token #ident { #( + #(#variant_attrs)* #ident_expressions = #variant_expressions, )* } diff --git a/precompiles/utils/src/costs.rs b/precompiles/utils/src/costs.rs new file mode 100644 index 0000000000..5f2abd2541 --- /dev/null +++ b/precompiles/utils/src/costs.rs @@ -0,0 +1,117 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Cost calculations. +//! TODO: PR EVM to make those cost calculations public. + +use { + crate::EvmResult, + fp_evm::{ExitError, PrecompileFailure}, + sp_core::U256, +}; + +pub fn log_costs(topics: usize, data_len: usize) -> EvmResult { + // Cost calculation is copied from EVM code that is not publicly exposed by the crates. + // https://github.com/rust-blockchain/evm/blob/master/gasometer/src/costs.rs#L148 + + const G_LOG: u64 = 375; + const G_LOGDATA: u64 = 8; + const G_LOGTOPIC: u64 = 375; + + let topic_cost = G_LOGTOPIC + .checked_mul(topics as u64) + .ok_or(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + })?; + + let data_cost = G_LOGDATA + .checked_mul(data_len as u64) + .ok_or(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + })?; + + G_LOG + .checked_add(topic_cost) + .ok_or(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + })? + .checked_add(data_cost) + .ok_or(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + }) +} + +// Compute the cost of doing a subcall. +// Some parameters cannot be known in advance, so we estimate the worst possible cost. +pub fn call_cost(value: U256, config: &evm::Config) -> u64 { + // Copied from EVM code since not public. + pub const G_CALLVALUE: u64 = 9000; + pub const G_NEWACCOUNT: u64 = 25000; + + fn address_access_cost(is_cold: bool, regular_value: u64, config: &evm::Config) -> u64 { + if config.increase_state_access_gas { + if is_cold { + config.gas_account_access_cold + } else { + config.gas_storage_read_warm + } + } else { + regular_value + } + } + + fn xfer_cost(is_call_or_callcode: bool, transfers_value: bool) -> u64 { + if is_call_or_callcode && transfers_value { + G_CALLVALUE + } else { + 0 + } + } + + fn new_cost( + is_call_or_staticcall: bool, + new_account: bool, + transfers_value: bool, + config: &evm::Config, + ) -> u64 { + let eip161 = !config.empty_considered_exists; + if is_call_or_staticcall { + if eip161 { + if transfers_value && new_account { + G_NEWACCOUNT + } else { + 0 + } + } else if new_account { + G_NEWACCOUNT + } else { + 0 + } + } else { + 0 + } + } + + let transfers_value = value != U256::default(); + let is_cold = true; + let is_call_or_callcode = true; + let is_call_or_staticcall = true; + let new_account = true; + + address_access_cost(is_cold, config.gas_call, config) + + xfer_cost(is_call_or_callcode, transfers_value) + + new_cost(is_call_or_staticcall, new_account, transfers_value, config) +} diff --git a/precompiles/utils/src/data.rs b/precompiles/utils/src/data/mod.rs similarity index 68% rename from precompiles/utils/src/data.rs rename to precompiles/utils/src/data/mod.rs index b136f1e7ac..778fa16c13 100644 --- a/precompiles/utils/src/data.rs +++ b/precompiles/utils/src/data/mod.rs @@ -14,16 +14,17 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use crate::{EvmResult, Gasometer}; - -use alloc::borrow::ToOwned; -use core::{any::type_name, ops::Range}; -use impl_trait_for_tuples::impl_for_tuples; -use sp_core::{H160, H256, U256}; -use sp_std::{convert::TryInto, vec, vec::Vec}; - pub mod xcm; +use { + crate::{revert, EvmResult}, + alloc::borrow::ToOwned, + core::{any::type_name, ops::Range}, + impl_trait_for_tuples::impl_for_tuples, + sp_core::{H160, H256, U256}, + sp_std::{convert::TryInto, vec, vec::Vec}, +}; + /// The `address` type of Solidity. /// H160 could represent 2 types of data (bytes20 and address) that are not encoded the same way. /// To avoid issues writing H160 is thus not supported. @@ -94,12 +95,12 @@ impl<'a> EvmDataReader<'a> { } /// Create a new input parser from a selector-initial input. - pub fn new_with_selector(gasometer: &mut Gasometer, input: &'a [u8]) -> EvmResult<(Self, T)> + pub fn read_selector(input: &'a [u8]) -> EvmResult where T: num_enum::TryFromPrimitive, { if input.len() < 4 { - return Err(gasometer.revert("tried to parse selector out of bounds")); + return Err(revert("tried to parse selector out of bounds")); } let mut buffer = [0u8; 4]; @@ -110,52 +111,59 @@ impl<'a> EvmDataReader<'a> { "Failed to match function selector for {}", type_name::() ); - gasometer.revert("unknown selector") + revert("unknown selector") })?; - Ok((Self::new(&input[4..]), selector)) + Ok(selector) + } + + /// Create a new input parser from a selector-initial input. + pub fn new_skip_selector(input: &'a [u8]) -> EvmResult { + if input.len() < 4 { + return Err(revert("input is too short")); + } + + Ok(Self::new(&input[4..])) } /// Check the input has at least the correct amount of arguments before the end (32 bytes values). - pub fn expect_arguments(&self, gasometer: &mut Gasometer, args: usize) -> EvmResult { + pub fn expect_arguments(&self, args: usize) -> EvmResult { if self.input.len() >= self.cursor + args * 32 { Ok(()) } else { - Err(gasometer.revert("input doesn't match expected length")) + Err(revert("input doesn't match expected length")) } } /// Read data from the input. - /// Must be provided a gasometer to generate correct Revert errors. - /// TODO : Benchmark and add cost of parsing to gasometer ? - pub fn read(&mut self, gasometer: &mut Gasometer) -> EvmResult { - T::read(self, gasometer) + pub fn read(&mut self) -> EvmResult { + T::read(self) } /// Read raw bytes from the input. /// Doesn't handle any alignment checks, prefer using `read` instead of possible. /// Returns an error if trying to parse out of bounds. - pub fn read_raw_bytes(&mut self, gasometer: &mut Gasometer, len: usize) -> EvmResult<&[u8]> { - let range = self.move_cursor(gasometer, len)?; + pub fn read_raw_bytes(&mut self, len: usize) -> EvmResult<&[u8]> { + let range = self.move_cursor(len)?; let data = self .input .get(range) - .ok_or_else(|| gasometer.revert("tried to parse raw bytes out of bounds"))?; + .ok_or_else(|| revert("tried to parse raw bytes out of bounds"))?; Ok(data) } /// Reads a pointer, returning a reader targetting the pointed location. - pub fn read_pointer(&mut self, gasometer: &mut Gasometer) -> EvmResult { + pub fn read_pointer(&mut self) -> EvmResult { let offset: usize = self - .read::(gasometer) - .map_err(|_| gasometer.revert("tried to parse array offset out of bounds"))? + .read::() + .map_err(|_| revert("tried to parse array offset out of bounds"))? .try_into() - .map_err(|_| gasometer.revert("array offset is too large"))?; + .map_err(|_| revert("array offset is too large"))?; if offset >= self.input.len() { - return Err(gasometer.revert("pointer points out of bounds")); + return Err(revert("pointer points out of bounds")); } Ok(Self { @@ -165,13 +173,13 @@ impl<'a> EvmDataReader<'a> { } /// Read remaining bytes - pub fn read_till_end(&mut self, gasometer: &mut Gasometer) -> EvmResult<&[u8]> { - let range = self.move_cursor(gasometer, self.input.len() - self.cursor)?; + pub fn read_till_end(&mut self) -> EvmResult<&[u8]> { + let range = self.move_cursor(self.input.len() - self.cursor)?; let data = self .input .get(range) - .ok_or_else(|| gasometer.revert("tried to parse raw bytes out of bounds"))?; + .ok_or_else(|| revert("tried to parse raw bytes out of bounds"))?; Ok(data) } @@ -179,12 +187,12 @@ impl<'a> EvmDataReader<'a> { /// Move the reading cursor with provided length, and return a range from the previous cursor /// location to the new one. /// Checks cursor overflows. - fn move_cursor(&mut self, gasometer: &mut Gasometer, len: usize) -> EvmResult> { + fn move_cursor(&mut self, len: usize) -> EvmResult> { let start = self.cursor; let end = self .cursor .checked_add(len) - .ok_or_else(|| gasometer.revert("data reading cursor overflow"))?; + .ok_or_else(|| revert("data reading cursor overflow"))?; self.cursor = end; @@ -311,7 +319,7 @@ impl Default for EvmDataWriter { /// Data that can be converted from and to EVM data types. pub trait EvmData: Sized { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult; + fn read(reader: &mut EvmDataReader) -> EvmResult; fn write(writer: &mut EvmDataWriter, value: Self); fn has_static_size() -> bool; } @@ -322,12 +330,12 @@ impl EvmData for Tuple { for_tuples!(#( Tuple::has_static_size() )&*) } - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { + fn read(reader: &mut EvmDataReader) -> EvmResult { if !Self::has_static_size() { - let reader = &mut reader.read_pointer(gasometer)?; - Ok(for_tuples!( ( #( reader.read::(gasometer)? ),* ) )) + let reader = &mut reader.read_pointer()?; + Ok(for_tuples!( ( #( reader.read::()? ),* ) )) } else { - Ok(for_tuples!( ( #( reader.read::(gasometer)? ),* ) )) + Ok(for_tuples!( ( #( reader.read::()? ),* ) )) } } @@ -343,13 +351,13 @@ impl EvmData for Tuple { } impl EvmData for H256 { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let range = reader.move_cursor(gasometer, 32)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let range = reader.move_cursor(32)?; let data = reader .input .get(range) - .ok_or_else(|| gasometer.revert("tried to parse H256 out of bounds"))?; + .ok_or_else(|| revert("tried to parse H256 out of bounds"))?; Ok(H256::from_slice(data)) } @@ -364,13 +372,13 @@ impl EvmData for H256 { } impl EvmData for Address { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let range = reader.move_cursor(gasometer, 32)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let range = reader.move_cursor(32)?; let data = reader .input .get(range) - .ok_or_else(|| gasometer.revert("tried to parse H160 out of bounds"))?; + .ok_or_else(|| revert("tried to parse H160 out of bounds"))?; Ok(H160::from_slice(&data[12..32]).into()) } @@ -385,13 +393,13 @@ impl EvmData for Address { } impl EvmData for U256 { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let range = reader.move_cursor(gasometer, 32)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let range = reader.move_cursor(32)?; let data = reader .input .get(range) - .ok_or_else(|| gasometer.revert("tried to parse U256 out of bounds"))?; + .ok_or_else(|| revert("tried to parse U256 out of bounds"))?; Ok(U256::from_big_endian(data)) } @@ -411,25 +419,19 @@ macro_rules! impl_evmdata_for_uints { ($($uint:ty, )*) => { $( impl EvmData for $uint { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let range = reader.move_cursor(gasometer, 32)?; - - let data = reader - .input - .get(range) - .ok_or_else(|| gasometer.revert(alloc::format!( - "tried to parse {} out of bounds", core::any::type_name::() - )))?; - - let mut buffer = [0u8; core::mem::size_of::()]; - buffer.copy_from_slice(&data[32 - core::mem::size_of::()..]); - Ok(Self::from_be_bytes(buffer)) + fn read(reader: &mut EvmDataReader) -> EvmResult { + let value256: U256 = reader.read()?; + + value256 + .try_into() + .map_err(|_| revert(alloc::format!( + "value too big for {}", + core::any::type_name::() + ))) } fn write(writer: &mut EvmDataWriter, value: Self) { - let mut buffer = [0u8; 32]; - buffer[32 - core::mem::size_of::()..].copy_from_slice(&value.to_be_bytes()); - writer.data.extend_from_slice(&buffer); + U256::write(writer, value.into()); } fn has_static_size() -> bool { @@ -440,37 +442,11 @@ macro_rules! impl_evmdata_for_uints { }; } -impl_evmdata_for_uints!(u16, u32, u64, u128,); - -// The implementation for u8 is specific, for performance reasons. -impl EvmData for u8 { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let range = reader.move_cursor(gasometer, 32)?; - - let data = reader - .input - .get(range) - .ok_or_else(|| gasometer.revert("tried to parse u64 out of bounds"))?; - - Ok(data[31]) - } - - fn write(writer: &mut EvmDataWriter, value: Self) { - let mut buffer = [0u8; 32]; - buffer[31] = value; - - writer.data.extend_from_slice(&buffer); - } - - fn has_static_size() -> bool { - true - } -} +impl_evmdata_for_uints!(u8, u16, u32, u64, u128,); impl EvmData for bool { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let h256 = H256::read(reader, gasometer) - .map_err(|_| gasometer.revert("tried to parse bool out of bounds"))?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let h256 = H256::read(reader).map_err(|_| revert("tried to parse bool out of bounds"))?; Ok(!h256.is_zero()) } @@ -490,14 +466,14 @@ impl EvmData for bool { } impl EvmData for Vec { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let mut inner_reader = reader.read_pointer(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let mut inner_reader = reader.read_pointer()?; let array_size: usize = inner_reader - .read::(gasometer) - .map_err(|_| gasometer.revert("tried to parse array length out of bounds"))? + .read::() + .map_err(|_| revert("tried to parse array length out of bounds"))? .try_into() - .map_err(|_| gasometer.revert("array length is too large"))?; + .map_err(|_| revert("array length is too large"))?; let mut array = vec![]; @@ -505,12 +481,12 @@ impl EvmData for Vec { input: inner_reader .input .get(32..) - .ok_or_else(|| gasometer.revert("try to read array items out of bound"))?, + .ok_or_else(|| revert("try to read array items out of bound"))?, cursor: 0, }; for _ in 0..array_size { - array.push(item_reader.read(gasometer)?); + array.push(item_reader.read()?); } Ok(array) @@ -544,23 +520,23 @@ impl EvmData for Vec { } impl EvmData for Bytes { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let mut inner_reader = reader.read_pointer(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let mut inner_reader = reader.read_pointer()?; // Read bytes/string size. let array_size: usize = inner_reader - .read::(gasometer) - .map_err(|_| gasometer.revert("tried to parse bytes/string length out of bounds"))? + .read::() + .map_err(|_| revert("tried to parse bytes/string length out of bounds"))? .try_into() - .map_err(|_| gasometer.revert("bytes/string length is too large"))?; + .map_err(|_| revert("bytes/string length is too large"))?; // Get valid range over the bytes data. - let range = inner_reader.move_cursor(gasometer, array_size)?; + let range = inner_reader.move_cursor(array_size)?; let data = inner_reader .input .get(range) - .ok_or_else(|| gasometer.revert("tried to parse bytes/string out of bounds"))?; + .ok_or_else(|| revert("tried to parse bytes/string out of bounds"))?; let bytes = Self(data.to_owned()); diff --git a/precompiles/utils/src/data/xcm.rs b/precompiles/utils/src/data/xcm.rs index 36ca662c00..578878d1b3 100644 --- a/precompiles/utils/src/data/xcm.rs +++ b/precompiles/utils/src/data/xcm.rs @@ -16,12 +16,15 @@ //! Encoding of XCM types for solidity -use crate::{Bytes, EvmData, EvmDataReader, EvmDataWriter, EvmResult, Gasometer}; - -use frame_support::ensure; -use sp_std::vec::Vec; -use xcm::latest::{Junction, Junctions, MultiLocation, NetworkId}; - +use { + crate::{ + data::{Bytes, EvmData, EvmDataReader, EvmDataWriter}, + revert, EvmResult, + }, + frame_support::ensure, + sp_std::vec::Vec, + xcm::latest::{Junction, Junctions, MultiLocation, NetworkId}, +}; // Function to convert network id to bytes // We don't implement EVMData here as these bytes will be appended only // to certain Junction variants @@ -55,101 +58,95 @@ pub(crate) fn network_id_to_bytes(network_id: NetworkId) -> Vec { } // Function to convert bytes to networkId -pub(crate) fn network_id_from_bytes( - gasometer: &mut Gasometer, - encoded_bytes: Vec, -) -> EvmResult { - ensure!( - encoded_bytes.len() > 0, - gasometer.revert("Junctions cannot be empty") - ); +pub(crate) fn network_id_from_bytes(encoded_bytes: Vec) -> EvmResult { + ensure!(encoded_bytes.len() > 0, revert("Junctions cannot be empty")); let mut encoded_network_id = EvmDataReader::new(&encoded_bytes); - let network_selector = encoded_network_id.read_raw_bytes(gasometer, 1)?; + let network_selector = encoded_network_id.read_raw_bytes(1)?; match network_selector[0] { 0 => Ok(NetworkId::Any), 1 => Ok(NetworkId::Named( - encoded_network_id.read_till_end(gasometer)?.to_vec(), + encoded_network_id.read_till_end()?.to_vec(), )), 2 => Ok(NetworkId::Polkadot), 3 => Ok(NetworkId::Kusama), - _ => Err(gasometer.revert("Non-valid Network Id")), + _ => Err(revert("Non-valid Network Id")), } } impl EvmData for Junction { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let junction = reader.read::(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let junction = reader.read::()?; let junction_bytes = junction.as_bytes(); ensure!( junction_bytes.len() > 0, - gasometer.revert("Junctions cannot be empty") + revert("Junctions cannot be empty") ); // For simplicity we use an EvmReader here let mut encoded_junction = EvmDataReader::new(&junction_bytes); // We take the first byte - let enum_selector = encoded_junction.read_raw_bytes(gasometer, 1)?; + let enum_selector = encoded_junction.read_raw_bytes(1)?; // The firs byte selects the enum variant match enum_selector[0] { 0 => { // In the case of Junction::Parachain, we need 4 additional bytes let mut data: [u8; 4] = Default::default(); - data.copy_from_slice(&encoded_junction.read_raw_bytes(gasometer, 4)?); + data.copy_from_slice(&encoded_junction.read_raw_bytes(4)?); let para_id = u32::from_be_bytes(data); Ok(Junction::Parachain(para_id)) } 1 => { // In the case of Junction::AccountId32, we need 32 additional bytes plus NetworkId let mut account: [u8; 32] = Default::default(); - account.copy_from_slice(&encoded_junction.read_raw_bytes(gasometer, 32)?); + account.copy_from_slice(&encoded_junction.read_raw_bytes(32)?); - let network = encoded_junction.read_till_end(gasometer)?.to_vec(); + let network = encoded_junction.read_till_end()?.to_vec(); Ok(Junction::AccountId32 { - network: network_id_from_bytes(gasometer, network)?, + network: network_id_from_bytes(network)?, id: account, }) } 2 => { // In the case of Junction::AccountIndex64, we need 8 additional bytes plus NetworkId let mut index: [u8; 8] = Default::default(); - index.copy_from_slice(&encoded_junction.read_raw_bytes(gasometer, 8)?); + index.copy_from_slice(&encoded_junction.read_raw_bytes(8)?); // Now we read the network - let network = encoded_junction.read_till_end(gasometer)?.to_vec(); + let network = encoded_junction.read_till_end()?.to_vec(); Ok(Junction::AccountIndex64 { - network: network_id_from_bytes(gasometer, network)?, + network: network_id_from_bytes(network)?, index: u64::from_be_bytes(index), }) } 3 => { // In the case of Junction::AccountKey20, we need 20 additional bytes plus NetworkId let mut account: [u8; 20] = Default::default(); - account.copy_from_slice(&encoded_junction.read_raw_bytes(gasometer, 20)?); + account.copy_from_slice(&encoded_junction.read_raw_bytes(20)?); - let network = encoded_junction.read_till_end(gasometer)?.to_vec(); + let network = encoded_junction.read_till_end()?.to_vec(); Ok(Junction::AccountKey20 { - network: network_id_from_bytes(gasometer, network)?, + network: network_id_from_bytes(network)?, key: account, }) } 4 => Ok(Junction::PalletInstance( - encoded_junction.read_raw_bytes(gasometer, 1)?[0], + encoded_junction.read_raw_bytes(1)?[0], )), 5 => { // In the case of Junction::GeneralIndex, we need 16 additional bytes let mut general_index: [u8; 16] = Default::default(); - general_index.copy_from_slice(&encoded_junction.read_raw_bytes(gasometer, 16)?); + general_index.copy_from_slice(&encoded_junction.read_raw_bytes(16)?); Ok(Junction::GeneralIndex(u128::from_be_bytes(general_index))) } 6 => Ok(Junction::GeneralKey( - encoded_junction.read_till_end(gasometer)?.to_vec(), + encoded_junction.read_till_end()?.to_vec(), )), 7 => Ok(Junction::OnlyChild), - _ => Err(gasometer.revert("No selector for this")), + _ => Err(revert("No selector for this")), } } @@ -211,13 +208,13 @@ impl EvmData for Junction { } impl EvmData for Junctions { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let junctions_bytes: Vec = reader.read(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let junctions_bytes: Vec = reader.read()?; let mut junctions = Junctions::Here; for item in junctions_bytes { junctions .push(item) - .map_err(|_| gasometer.revert("overflow when reading junctions"))?; + .map_err(|_| revert("overflow when reading junctions"))?; } Ok(junctions) @@ -234,8 +231,8 @@ impl EvmData for Junctions { } impl EvmData for MultiLocation { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let (parents, interior) = reader.read(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let (parents, interior) = reader.read()?; Ok(MultiLocation { parents, interior }) } diff --git a/precompiles/utils/src/handle.rs b/precompiles/utils/src/handle.rs new file mode 100644 index 0000000000..c66f877daf --- /dev/null +++ b/precompiles/utils/src/handle.rs @@ -0,0 +1,89 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use { + crate::{data::EvmDataReader, modifier::FunctionModifier, EvmResult}, + fp_evm::{Log, PrecompileHandle}, +}; + +pub trait PrecompileHandleExt: PrecompileHandle { + /// Record cost of a log manually. + /// This can be useful to record log costs early when their content have static size. + #[must_use] + fn record_log_costs_manual(&mut self, topics: usize, data_len: usize) -> EvmResult; + + /// Record cost of logs. + #[must_use] + fn record_log_costs(&mut self, logs: &[&Log]) -> EvmResult; + + #[must_use] + /// Check that a function call is compatible with the context it is + /// called into. + fn check_function_modifier(&self, modifier: FunctionModifier) -> EvmResult; + + #[must_use] + /// Read the selector from the input data. + fn read_selector(&self) -> EvmResult + where + T: num_enum::TryFromPrimitive; + + #[must_use] + /// Returns a reader of the input, skipping the selector. + fn read_input(&self) -> EvmResult; +} + +impl PrecompileHandleExt for T { + /// Record cost of a log manualy. + /// This can be useful to record log costs early when their content have static size. + #[must_use] + fn record_log_costs_manual(&mut self, topics: usize, data_len: usize) -> EvmResult { + self.record_cost(crate::costs::log_costs(topics, data_len)?)?; + + Ok(()) + } + + /// Record cost of logs. + #[must_use] + fn record_log_costs(&mut self, logs: &[&Log]) -> EvmResult { + for log in logs { + self.record_log_costs_manual(log.topics.len(), log.data.len())?; + } + + Ok(()) + } + + #[must_use] + /// Check that a function call is compatible with the context it is + /// called into. + fn check_function_modifier(&self, modifier: FunctionModifier) -> EvmResult { + crate::modifier::check_function_modifier(self.context(), self.is_static(), modifier) + } + + #[must_use] + /// Read the selector from the input data. + fn read_selector(&self) -> EvmResult + where + S: num_enum::TryFromPrimitive, + { + EvmDataReader::read_selector(self.input()) + } + + #[must_use] + /// Returns a reader of the input, skipping the selector. + fn read_input(&self) -> EvmResult { + EvmDataReader::new_skip_selector(self.input()) + } +} diff --git a/precompiles/utils/src/lib.rs b/precompiles/utils/src/lib.rs index a9683a19f3..32384768d5 100644 --- a/precompiles/utils/src/lib.rs +++ b/precompiles/utils/src/lib.rs @@ -15,364 +15,92 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +#![feature(assert_matches)] extern crate alloc; -use crate::alloc::borrow::ToOwned; -use fp_evm::{Context, ExitError, ExitRevert, PrecompileFailure}; -use frame_support::{ - dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, - traits::Get, -}; -use pallet_evm::{GasWeightMapping, Log}; -use sp_core::{H160, H256, U256}; -use sp_std::{marker::PhantomData, vec, vec::Vec}; +pub mod costs; +pub mod handle; +pub mod logs; +pub mod modifier; +pub mod precompile_set; +pub mod substrate; -mod data; +#[cfg(feature = "testing")] +pub mod solidity; -pub use data::{Address, Bytes, EvmData, EvmDataReader, EvmDataWriter}; -pub use precompile_utils_macro::{generate_function_selector, keccak256}; +#[cfg(feature = "testing")] +pub mod testing; #[cfg(test)] mod tests; -/// Alias for Result returning an EVM precompile error. -pub type EvmResult = Result; +use crate::alloc::borrow::ToOwned; +use fp_evm::{ + ExitError, ExitRevert, ExitSucceed, PrecompileFailure, PrecompileHandle, PrecompileOutput, +}; + +pub mod data; + +// pub use data::{Address, Bytes, EvmData, EvmDataReader, EvmDataWriter}; +// pub use fp_evm::Precompile; +// pub use precompile_utils_macro::{generate_function_selector, keccak256}; /// Return an error with provided (static) text. /// Using the `revert` function of `Gasometer` is preferred as erroring /// consumed all the gas limit and the error message is not easily /// retrievable. +#[must_use] pub fn error>>(text: T) -> PrecompileFailure { PrecompileFailure::Error { exit_status: ExitError::Other(text.into()), } } -/// Builder for PrecompileOutput. -#[derive(Clone, Debug)] -pub struct LogsBuilder { - address: H160, - logs: Vec, -} - -impl LogsBuilder { - /// Create a new builder with no logs. - /// Takes the address of the precompile (usually `context.address`). - pub fn new(address: H160) -> Self { - Self { - logs: vec![], - address, - } - } - - /// Returns the logs array. - pub fn build(self) -> Vec { - self.logs - } - - /// Add a 0-topic log. - pub fn log0(mut self, data: D) -> Self - where - D: Into>, - { - self.logs.push(Log { - address: self.address, - data: data.into(), - topics: vec![], - }); - self - } - - /// Add a 1-topic log. - pub fn log1(mut self, topic0: T0, data: D) -> Self - where - D: Into>, - T0: Into, - { - self.logs.push(Log { - address: self.address, - data: data.into(), - topics: vec![topic0.into()], - }); - self - } - - /// Add a 2-topics log. - pub fn log2(mut self, topic0: T0, topic1: T1, data: D) -> Self - where - D: Into>, - T0: Into, - T1: Into, - { - self.logs.push(Log { - address: self.address, - data: data.into(), - topics: vec![topic0.into(), topic1.into()], - }); - self - } - - /// Add a 3-topics log. - pub fn log3(mut self, topic0: T0, topic1: T1, topic2: T2, data: D) -> Self - where - D: Into>, - T0: Into, - T1: Into, - T2: Into, - { - self.logs.push(Log { - address: self.address, - data: data.into(), - topics: vec![topic0.into(), topic1.into(), topic2.into()], - }); - self - } - - /// Add a 4-topics log. - pub fn log4( - mut self, - topic0: T0, - topic1: T1, - topic2: T2, - topic3: T3, - data: D, - ) -> Self - where - D: Into>, - T0: Into, - T1: Into, - T2: Into, - T3: Into, - { - self.logs.push(Log { - address: self.address, - data: data.into(), - topics: vec![topic0.into(), topic1.into(), topic2.into(), topic3.into()], - }); - self +#[must_use] +pub fn revert(output: impl AsRef<[u8]>) -> PrecompileFailure { + PrecompileFailure::Revert { + exit_status: ExitRevert::Reverted, + output: output.as_ref().to_owned(), } } -/// Helper functions requiring a Runtime. -/// This runtime must of course implement `pallet_evm::Config`. -#[derive(Clone, Copy, Debug)] -pub struct RuntimeHelper(PhantomData); - -impl RuntimeHelper -where - Runtime: pallet_evm::Config, - Runtime::Call: Dispatchable + GetDispatchInfo, -{ - /// Try to dispatch a Substrate call. - /// Return an error if there are not enough gas, or if the call fails. - /// If successful returns the used gas using the Runtime GasWeightMapping. - pub fn try_dispatch( - origin: ::Origin, - call: Call, - gasometer: &mut Gasometer, - ) -> EvmResult<()> - where - Runtime::Call: From, - { - let call = Runtime::Call::from(call); - let dispatch_info = call.get_dispatch_info(); - - // Make sure there is enough gas. - if let Some(gas_limit) = gasometer.remaining_gas()? { - let required_gas = Runtime::GasWeightMapping::weight_to_gas(dispatch_info.weight); - if required_gas > gas_limit { - return Err(PrecompileFailure::Error { - exit_status: ExitError::OutOfGas, - }); - } - } - - // Dispatch call. - // It may be possible to not record gas cost if the call returns Pays::No. - // However while Substrate handle checking weight while not making the sender pay for it, - // the EVM doesn't. It seems this safer to always record the costs to avoid unmetered - // computations. - let used_weight = call - .dispatch(origin) - .map_err(|e| { - gasometer.revert(alloc::format!("Dispatched call failed with error: {:?}", e)) - })? - .actual_weight; - - let used_gas = - Runtime::GasWeightMapping::weight_to_gas(used_weight.unwrap_or(dispatch_info.weight)); - - gasometer.record_cost(used_gas)?; - - Ok(()) +#[must_use] +pub fn succeed(output: impl AsRef<[u8]>) -> PrecompileOutput { + PrecompileOutput { + exit_status: ExitSucceed::Returned, + output: output.as_ref().to_owned(), } } -impl RuntimeHelper -where - Runtime: pallet_evm::Config, -{ - /// Cost of a Substrate DB write in gas. - pub fn db_write_gas_cost() -> u64 { - ::GasWeightMapping::weight_to_gas( - ::DbWeight::get().write, - ) - } - - /// Cost of a Substrate DB read in gas. - pub fn db_read_gas_cost() -> u64 { - ::GasWeightMapping::weight_to_gas( - ::DbWeight::get().read, - ) - } -} +/// Alias for Result returning an EVM precompile error. +pub type EvmResult = Result; -/// Represents modifiers a Solidity function can be annotated with. -#[derive(Copy, Clone, PartialEq, Eq)] -pub enum FunctionModifier { - /// Function that doesn't modify the state. - View, - /// Function that modifies the state but refuse receiving funds. - /// Correspond to a Solidity function with no modifiers. - NonPayable, - /// Function that modifies the state and accept funds. - Payable, -} +/// Trait similar to `fp_evm::Precompile` but with a `&self` parameter to manage some +/// state (this state is only kept in a single transaction and is lost afterward). +pub trait StatefulPrecompile { + /// Instanciate the precompile. + /// Will be called once when building the PrecompileSet at the start of each + /// Ethereum transaction. + fn new() -> Self; -/// Custom Gasometer to record costs in precompiles. -/// It is advised to record known costs as early as possible to -/// avoid unnecessary computations if there is an Out of Gas. -/// -/// Provides functions related to reverts, as reverts takes the recorded amount -/// of gas into account. -#[derive(Clone, Copy, Debug)] -pub struct Gasometer { - target_gas: Option, - used_gas: u64, + /// Execute the precompile with a reference to its state. + fn execute(&self, handle: &mut impl PrecompileHandle) -> EvmResult; } -impl Gasometer { - /// Create a new Gasometer with provided gas limit. - /// None is no limit. - pub fn new(target_gas: Option) -> Self { - Self { - target_gas, - used_gas: 0, - } - } - - /// Get used gas. - pub fn used_gas(&self) -> u64 { - self.used_gas - } - - /// Record cost, and return error if it goes out of gas. - #[must_use] - pub fn record_cost(&mut self, cost: u64) -> EvmResult { - self.used_gas = self - .used_gas - .checked_add(cost) - .ok_or(PrecompileFailure::Error { - exit_status: ExitError::OutOfGas, - })?; - - match self.target_gas { - Some(gas_limit) if self.used_gas > gas_limit => Err(PrecompileFailure::Error { - exit_status: ExitError::OutOfGas, - }), - _ => Ok(()), - } - } - - /// Record cost of a log manually. - /// This can be useful to record log costs early when their content have static size. - #[must_use] - pub fn record_log_costs_manual(&mut self, topics: usize, data_len: usize) -> EvmResult { - // Cost calculation is copied from EVM code that is not publicly exposed by the crates. - // https://github.com/rust-blockchain/evm/blob/master/gasometer/src/costs.rs#L148 - - const G_LOG: u64 = 375; - const G_LOGDATA: u64 = 8; - const G_LOGTOPIC: u64 = 375; - - let topic_cost = G_LOGTOPIC - .checked_mul(topics as u64) - .ok_or(PrecompileFailure::Error { - exit_status: ExitError::OutOfGas, - })?; - - let data_cost = G_LOGDATA - .checked_mul(data_len as u64) - .ok_or(PrecompileFailure::Error { - exit_status: ExitError::OutOfGas, - })?; - - self.record_cost(G_LOG)?; - self.record_cost(topic_cost)?; - self.record_cost(data_cost)?; - - Ok(()) - } - - /// Record cost of logs. - #[must_use] - pub fn record_log_costs(&mut self, logs: &[Log]) -> EvmResult { - for log in logs { - self.record_log_costs_manual(log.topics.len(), log.data.len())?; - } - - Ok(()) - } - - /// Compute remaining gas. - /// Returns error if out of gas. - /// Returns None if no gas limit. - #[must_use] - pub fn remaining_gas(&self) -> EvmResult> { - Ok(match self.target_gas { - None => None, - Some(gas_limit) => Some(gas_limit.checked_sub(self.used_gas).ok_or( - PrecompileFailure::Error { - exit_status: ExitError::OutOfGas, - }, - )?), - }) - } - - /// Revert the execution, making the user pay for the the currently - /// recorded cost. It is better to **revert** instead of **error** as - /// erroring consumes the entire gas limit, and **revert** returns an error - /// message to the calling contract. - /// - /// TODO : Record cost of the input based on its size and handle Out of Gas ? - /// This might be required if we format revert messages using user data. - #[must_use] - pub fn revert(&self, output: impl AsRef<[u8]>) -> PrecompileFailure { - PrecompileFailure::Revert { - exit_status: ExitRevert::Reverted, - output: output.as_ref().to_owned(), - cost: self.used_gas, - } - } - - #[must_use] - /// Check that a function call is compatible with the context it is - /// called into. - pub fn check_function_modifier( - &self, - context: &Context, - is_static: bool, - modifier: FunctionModifier, - ) -> EvmResult { - if is_static && modifier != FunctionModifier::View { - return Err(self.revert("can't call non-static function in static context")); - } - - if modifier != FunctionModifier::Payable && context.apparent_value > U256::zero() { - return Err(self.revert("function is not payable")); - } - - Ok(()) - } +pub mod prelude { + pub use { + crate::{ + data::{Address, Bytes, EvmData, EvmDataReader, EvmDataWriter}, + error, + handle::PrecompileHandleExt, + logs::{log0, log1, log2, log3, log4, LogExt}, + modifier::{check_function_modifier, FunctionModifier}, + revert, + substrate::RuntimeHelper, + succeed, EvmResult, StatefulPrecompile, + }, + pallet_evm::PrecompileHandle, + precompile_utils_macro::{generate_function_selector, keccak256}, + }; } diff --git a/precompiles/utils/src/logs.rs b/precompiles/utils/src/logs.rs new file mode 100644 index 0000000000..85238bc9d3 --- /dev/null +++ b/precompiles/utils/src/logs.rs @@ -0,0 +1,108 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use { + crate::EvmResult, + pallet_evm::{Log, PrecompileHandle}, + sp_core::{H160, H256}, + sp_std::{vec, vec::Vec}, +}; + +/// Create a 0-topic log. +#[must_use] +pub fn log0(address: impl Into, data: impl Into>) -> Log { + Log { + address: address.into(), + topics: vec![], + data: data.into(), + } +} + +/// Create a 1-topic log. +#[must_use] +pub fn log1(address: impl Into, topic0: impl Into, data: impl Into>) -> Log { + Log { + address: address.into(), + topics: vec![topic0.into()], + data: data.into(), + } +} + +/// Create a 2-topics log. +#[must_use] +pub fn log2( + address: impl Into, + topic0: impl Into, + topic1: impl Into, + data: impl Into>, +) -> Log { + Log { + address: address.into(), + topics: vec![topic0.into(), topic1.into()], + data: data.into(), + } +} + +/// Create a 3-topics log. +#[must_use] +pub fn log3( + address: impl Into, + topic0: impl Into, + topic1: impl Into, + topic2: impl Into, + data: impl Into>, +) -> Log { + Log { + address: address.into(), + topics: vec![topic0.into(), topic1.into(), topic2.into()], + data: data.into(), + } +} + +/// Create a 4-topics log. +#[must_use] +pub fn log4( + address: impl Into, + topic0: impl Into, + topic1: impl Into, + topic2: impl Into, + topic3: impl Into, + data: impl Into>, +) -> Log { + Log { + address: address.into(), + topics: vec![topic0.into(), topic1.into(), topic2.into(), topic3.into()], + data: data.into(), + } +} + +/// Extension trait allowing to record logs into a PrecompileHandle. +pub trait LogExt { + fn record(self, handle: &mut impl PrecompileHandle) -> EvmResult; + + fn compute_cost(&self) -> EvmResult; +} + +impl LogExt for Log { + fn record(self, handle: &mut impl PrecompileHandle) -> EvmResult { + handle.log(self.address, self.topics, self.data)?; + Ok(()) + } + + fn compute_cost(&self) -> EvmResult { + crate::costs::log_costs(self.topics.len(), self.data.len()) + } +} diff --git a/precompiles/utils/src/modifier.rs b/precompiles/utils/src/modifier.rs new file mode 100644 index 0000000000..0dcb1537f7 --- /dev/null +++ b/precompiles/utils/src/modifier.rs @@ -0,0 +1,54 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Provide checks related to function modifiers (view/payable). + +use { + crate::{revert, EvmResult}, + evm::Context, + sp_core::U256, +}; + +/// Represents modifiers a Solidity function can be annotated with. +#[derive(Copy, Clone, PartialEq, Eq)] +pub enum FunctionModifier { + /// Function that doesn't modify the state. + View, + /// Function that modifies the state but refuse receiving funds. + /// Correspond to a Solidity function with no modifiers. + NonPayable, + /// Function that modifies the state and accept funds. + Payable, +} + +#[must_use] +/// Check that a function call is compatible with the context it is +/// called into. +pub fn check_function_modifier( + context: &Context, + is_static: bool, + modifier: FunctionModifier, +) -> EvmResult { + if is_static && modifier != FunctionModifier::View { + return Err(revert("can't call non-static function in static context")); + } + + if modifier != FunctionModifier::Payable && context.apparent_value > U256::zero() { + return Err(revert("function is not payable")); + } + + Ok(()) +} diff --git a/precompiles/utils/src/precompile_set.rs b/precompiles/utils/src/precompile_set.rs new file mode 100644 index 0000000000..c097b6834a --- /dev/null +++ b/precompiles/utils/src/precompile_set.rs @@ -0,0 +1,543 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Provide utils assemble precompiles and precompilesets into a +//! final precompile set with security checks. All security checks are enabled by +//! default and must be disabled explicely throught type annotations. + +use crate::{revert, StatefulPrecompile}; +use fp_evm::{Precompile, PrecompileHandle, PrecompileResult, PrecompileSet}; +use frame_support::pallet_prelude::Get; +use impl_trait_for_tuples::impl_for_tuples; +use pallet_evm::AddressMapping; +use sp_core::H160; +use sp_std::{ + cell::RefCell, collections::btree_map::BTreeMap, marker::PhantomData, ops::RangeInclusive, vec, + vec::Vec, +}; + +// CONFIGURATION TYPES + +mod sealed { + pub trait Sealed {} +} + +/// How much recursion is allows for a precompile. +pub trait RecursionLimit: sealed::Sealed { + fn recursion_limit() -> Option; +} + +/// There is no limit to the amount times a precompiles can +/// call itself recursively. +/// Should be used with care as it could cause stack overflows. +pub struct UnlimitedRecursion; +impl sealed::Sealed for UnlimitedRecursion {} +impl RecursionLimit for UnlimitedRecursion { + #[inline(always)] + fn recursion_limit() -> Option { + None + } +} + +/// A precompile can (even indirectly) call itself with N levels of nesting. +/// 0 = anyone can call the precompile but a subcall of the precompile will not be able to call it +/// back (re-entrancy protection). +pub struct LimitRecursionTo; +impl sealed::Sealed for LimitRecursionTo {} +impl RecursionLimit for LimitRecursionTo { + #[inline(always)] + fn recursion_limit() -> Option { + Some(N) + } +} + +pub type ForbidRecursion = LimitRecursionTo<0>; + +/// Is DELEGATECALL allowed to use for a precompile. +pub trait DelegateCallSupport: sealed::Sealed { + fn allow_delegate_call() -> bool; +} + +/// DELEGATECALL is forbiden. +pub struct ForbidDelegateCall; +impl sealed::Sealed for ForbidDelegateCall {} +impl DelegateCallSupport for ForbidDelegateCall { + #[inline(always)] + fn allow_delegate_call() -> bool { + false + } +} + +/// DELEGATECALL is allowed. +/// Should be used with care if the precompile use +/// custom storage, as the caller could impersonate its own caller. +pub struct AllowDelegateCall; +impl sealed::Sealed for AllowDelegateCall {} +impl DelegateCallSupport for AllowDelegateCall { + #[inline(always)] + fn allow_delegate_call() -> bool { + true + } +} + +pub struct AddressU64; +impl Get for AddressU64 { + #[inline(always)] + fn get() -> H160 { + H160::from_low_u64_be(N) + } +} + +// INDIVIDUAL PRECOMPILE(SET) + +/// A fragment of a PrecompileSet. Should be implemented as is it +/// was a PrecompileSet containing only the precompile(set) it wraps. +/// They can be combined into a real PrecompileSet using `PrecompileSetBuilder`. +pub trait PrecompileSetFragment { + /// Instanciate the fragment. + fn new() -> Self; + + /// Execute the fragment. + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option; + + /// Is the provided address a precompile in this fragment? + fn is_precompile(&self, address: H160) -> bool; + + /// Return the list of addresses covered by this fragment. + fn used_addresses(&self) -> Vec; +} + +/// Wraps a stateless precompile: a type implementing the `Precompile` trait. +/// Type parameters allow to define: +/// - A: The address of the precompile +/// - R: The recursion limit (defaults to 1) +/// - D: If DELEGATECALL is supported (default to no) +pub struct PrecompileAt { + current_recursion_level: RefCell, + _phantom: PhantomData<(A, P, R, D)>, +} + +impl PrecompileSetFragment for PrecompileAt +where + A: Get, + P: Precompile, + R: RecursionLimit, + D: DelegateCallSupport, +{ + #[inline(always)] + fn new() -> Self { + Self { + current_recursion_level: RefCell::new(0), + _phantom: PhantomData, + } + } + + #[inline(always)] + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option { + let code_address = handle.code_address(); + + // Check if this is the address of the precompile. + if A::get() != code_address { + return None; + } + + // Check DELEGATECALL config. + if !D::allow_delegate_call() && code_address != handle.context().address { + return Some(Err(revert( + "cannot be called with DELEGATECALL or CALLCODE", + ))); + } + + // Check and increase recursion level if needed. + if let Some(max_recursion_level) = R::recursion_limit() { + match self.current_recursion_level.try_borrow_mut() { + Ok(mut recursion_level) => { + if *recursion_level > max_recursion_level { + return Some(Err(revert("precompile is called with too high nesting"))); + } + + *recursion_level += 1; + } + // We don't hold the borrow and are in single-threaded code, thus we should + // not be able to fail borrowing in nested calls. + Err(_) => return Some(Err(revert("couldn't check precompile nesting"))), + } + } + + let res = P::execute(handle); + + // Decrease recursion level if needed. + if R::recursion_limit().is_some() { + match self.current_recursion_level.try_borrow_mut() { + Ok(mut recursion_level) => { + *recursion_level -= 1; + } + // We don't hold the borrow and are in single-threaded code, thus we should + // not be able to fail borrowing in nested calls. + Err(_) => return Some(Err(revert("couldn't check precompile nesting"))), + } + } + + Some(res) + } + + #[inline(always)] + fn is_precompile(&self, address: H160) -> bool { + address == A::get() + } + + #[inline(always)] + fn used_addresses(&self) -> Vec { + vec![A::get()] + } +} + +/// Wraps a stateful precompile: a type implementing the `StatefulPrecompile` trait. +/// Type parameters allow to define: +/// - A: The address of the precompile +/// - R: The recursion limit (defaults to 1) +/// - D: If DELEGATECALL is supported (default to no) +pub struct StatefulPrecompileAt { + precompile: P, + current_recursion_level: RefCell, + _phantom: PhantomData<(A, R, D)>, +} + +impl PrecompileSetFragment for StatefulPrecompileAt +where + A: Get, + P: StatefulPrecompile, + R: RecursionLimit, + D: DelegateCallSupport, +{ + #[inline(always)] + fn new() -> Self { + Self { + precompile: P::new(), + current_recursion_level: RefCell::new(0), + _phantom: PhantomData, + } + } + + #[inline(always)] + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option { + let code_address = handle.code_address(); + + // Check if this is the address of the precompile. + if A::get() != code_address { + return None; + } + + // Check DELEGATECALL config. + if !D::allow_delegate_call() && code_address != handle.context().address { + return Some(Err(revert( + "cannot be called with DELEGATECALL or CALLCODE", + ))); + } + + // Check and increase recursion level if needed. + if let Some(max_recursion_level) = R::recursion_limit() { + match self.current_recursion_level.try_borrow_mut() { + Ok(mut recursion_level) => { + if *recursion_level > max_recursion_level { + return Some(Err(revert("precompile is called with too high nesting"))); + } + + *recursion_level += 1; + } + // We don't hold the borrow and are in single-threaded code, thus we should + // not be able to fail borrowing in nested calls. + Err(_) => return Some(Err(revert("couldn't check precompile nesting"))), + } + } + + let res = self.precompile.execute(handle); + + // Decrease recursion level if needed. + if R::recursion_limit().is_some() { + match self.current_recursion_level.try_borrow_mut() { + Ok(mut recursion_level) => { + *recursion_level -= 1; + } + // We don't hold the borrow and are in single-threaded code, thus we should + // not be able to fail borrowing in nested calls. + Err(_) => return Some(Err(revert("couldn't check precompile nesting"))), + } + } + + Some(res) + } + + #[inline(always)] + fn is_precompile(&self, address: H160) -> bool { + address == A::get() + } + + #[inline(always)] + fn used_addresses(&self) -> Vec { + vec![A::get()] + } +} + +/// Wraps an inner PrecompileSet with all its addresses starting with +/// a common prefix. +/// Type parameters allow to define: +/// - A: The common prefix +/// - D: If DELEGATECALL is supported (default to no) +pub struct PrecompileSetStartingWith { + precompile_set: P, + current_recursion_level: RefCell>, + _phantom: PhantomData<(A, R, D)>, +} + +impl PrecompileSetFragment for PrecompileSetStartingWith +where + A: Get<&'static [u8]>, + P: PrecompileSet + Default, + R: RecursionLimit, + D: DelegateCallSupport, +{ + #[inline(always)] + fn new() -> Self { + Self { + precompile_set: P::default(), + current_recursion_level: RefCell::new(BTreeMap::new()), + _phantom: PhantomData, + } + } + + #[inline(always)] + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option { + let code_address = handle.code_address(); + + if !self.is_precompile(code_address) { + return None; + } + + // Check DELEGATECALL config. + if !D::allow_delegate_call() && code_address != handle.context().address { + return Some(Err(revert( + "cannot be called with DELEGATECALL or CALLCODE", + ))); + } + + // Check and increase recursion level if needed. + if let Some(max_recursion_level) = R::recursion_limit() { + match self.current_recursion_level.try_borrow_mut() { + Ok(mut recursion_level_map) => { + let recursion_level = recursion_level_map.entry(code_address).or_insert(0); + + if *recursion_level > max_recursion_level { + return Some(Err(revert("precompile is called with too high nesting"))); + } + + *recursion_level += 1; + } + // We don't hold the borrow and are in single-threaded code, thus we should + // not be able to fail borrowing in nested calls. + Err(_) => return Some(Err(revert("couldn't check precompile nesting"))), + } + } + + let res = self.precompile_set.execute(handle); + + // Decrease recursion level if needed. + if R::recursion_limit().is_some() { + match self.current_recursion_level.try_borrow_mut() { + Ok(mut recursion_level_map) => { + let recursion_level = match recursion_level_map.get_mut(&code_address) { + Some(recursion_level) => recursion_level, + None => return Some(Err(revert("couldn't retreive precompile nesting"))), + }; + + *recursion_level -= 1; + } + // We don't hold the borrow and are in single-threaded code, thus we should + // not be able to fail borrowing in nested calls. + Err(_) => return Some(Err(revert("couldn't check precompile nesting"))), + } + } + + res + } + + #[inline(always)] + fn is_precompile(&self, address: H160) -> bool { + address.as_bytes().starts_with(A::get()) && self.precompile_set.is_precompile(address) + } + + #[inline(always)] + fn used_addresses(&self) -> Vec { + // TODO: We currently can't get the list of used addresses. + vec![] + } +} + +/// Make a precompile that always revert. +/// Can be useful when writing tests. +pub struct RevertPrecompile(PhantomData); + +impl PrecompileSetFragment for RevertPrecompile +where + A: Get, +{ + #[inline(always)] + fn new() -> Self { + Self(PhantomData) + } + + #[inline(always)] + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option { + if A::get() == handle.code_address() { + Some(Err(revert("revert"))) + } else { + None + } + } + + #[inline(always)] + fn is_precompile(&self, address: H160) -> bool { + address == A::get() + } + + #[inline(always)] + fn used_addresses(&self) -> Vec { + vec![A::get()] + } +} + +// COMPOSITION OF PARTS +#[impl_for_tuples(1, 100)] +impl PrecompileSetFragment for Tuple { + #[inline(always)] + fn new() -> Self { + (for_tuples!(#( + Tuple::new() + ),*)) + } + + #[inline(always)] + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option { + for_tuples!(#( + if let Some(res) = self.Tuple.execute(handle) { + return Some(res); + } + )*); + + None + } + + #[inline(always)] + fn is_precompile(&self, address: H160) -> bool { + for_tuples!(#( + if self.Tuple.is_precompile(address) { + return true; + } + )*); + + false + } + + #[inline(always)] + fn used_addresses(&self) -> Vec { + let mut used_addresses = vec![]; + + for_tuples!(#( + let mut inner = self.Tuple.used_addresses(); + used_addresses.append(&mut inner); + )*); + + used_addresses + } +} + +/// Wraps a precompileset fragment into a range, and will skip processing it if the address +/// is out of the range. +pub struct PrecompilesInRangeInclusive { + inner: P, + range: RangeInclusive, + _phantom: PhantomData, +} + +impl PrecompileSetFragment for PrecompilesInRangeInclusive<(S, E), P> +where + S: Get, + E: Get, + P: PrecompileSetFragment, +{ + fn new() -> Self { + Self { + inner: P::new(), + range: RangeInclusive::new(S::get(), E::get()), + _phantom: PhantomData, + } + } + + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option { + if self.range.contains(&handle.code_address()) { + self.inner.execute(handle) + } else { + None + } + } + + fn is_precompile(&self, address: H160) -> bool { + if self.range.contains(&address) { + self.inner.is_precompile(address) + } else { + false + } + } + + fn used_addresses(&self) -> Vec { + self.inner.used_addresses() + } +} + +/// Wraps a tuple of `PrecompileSetFragment` to make a real `PrecompileSet`. +pub struct PrecompileSetBuilder { + inner: P, + _phantom: PhantomData, +} + +impl PrecompileSet for PrecompileSetBuilder { + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option { + self.inner.execute(handle) + } + + fn is_precompile(&self, address: H160) -> bool { + self.inner.is_precompile(address) + } +} + +impl PrecompileSetBuilder { + /// Create a new instance of the PrecompileSet. + pub fn new() -> Self { + Self { + inner: P::new(), + _phantom: PhantomData, + } + } + + /// Return the list of addresses contained in this PrecompileSet. + pub fn used_addresses() -> impl Iterator { + Self::new() + .inner + .used_addresses() + .into_iter() + .map(|x| R::AddressMapping::into_account_id(x)) + } +} diff --git a/precompiles/utils/src/solidity.rs b/precompiles/utils/src/solidity.rs new file mode 100644 index 0000000000..0e64f01071 --- /dev/null +++ b/precompiles/utils/src/solidity.rs @@ -0,0 +1,263 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Utility module to interact with solidity file. + +use sp_io::hashing::keccak_256; +use std::{ + collections::HashMap, + fs::File, + io::{BufRead, BufReader, Read}, +}; + +/// Represents a declared custom type struct within a solidity file +#[derive(Clone, Default)] +pub struct SolidityStruct { + /// Struct name + pub name: String, + /// List of parameter types + pub params: Vec, +} + +impl SolidityStruct { + /// Returns the representative signature for the solidity struct + pub fn signature(&self) -> String { + format!("({})", self.params.join(",")) + } +} + +/// Represents a declared function within a solidity file +#[derive(Clone, Default)] +pub struct SolidityFunction { + /// Function name + pub name: String, + /// List of function parameter types + pub args: Vec, + /// The declared selector in the file + pub docs_selector: String, +} + +impl SolidityFunction { + /// Returns the representative signature for the solidity function + pub fn signature(&self) -> String { + format!("{}({})", self.name, self.args.join(",")) + } + + /// Computes the selector code for the solidity function + pub fn compute_selector(&self) -> u32 { + let output = keccak_256(self.signature().as_bytes()); + let mut buf = [0u8; 4]; + buf.clone_from_slice(&output[..4]); + u32::from_be_bytes(buf) + } + + /// Computes the selector code as a hex string for the solidity function + pub fn compute_selector_hex(&self) -> String { + format!("{:0>8x}", self.compute_selector()) + } +} + +/// Returns a list of [SolidityFunction] defined in a solidity file +pub fn get_selectors(filename: &str) -> Vec { + let file = File::open(filename).expect("failed opening file"); + get_selectors_from_reader(file) +} + +fn get_selectors_from_reader(reader: R) -> Vec { + #[derive(Clone, Copy)] + enum Stage { + Start, + Struct, + StructParams, + FnName, + Args, + } + #[derive(Clone, Copy)] + enum Pair { + First, + Second, + } + impl Pair { + fn next(&mut self) { + *self = match self { + Pair::First => Pair::Second, + Pair::Second => Pair::First, + } + } + } + + let reader = BufReader::new(reader); + let mut functions = vec![]; + let mut custom_types = HashMap::new(); + let mut solidity_struct = SolidityStruct::default(); + + let mut stage = Stage::Start; + let mut pair = Pair::First; + let mut solidity_fn = SolidityFunction::default(); + for line in reader.lines() { + let line = line.expect("failed unwrapping line").trim().to_string(); + // identify declared selector + if line.starts_with("/// Selector: ") && matches!(stage, Stage::Start) { + solidity_fn.docs_selector = line.replace("/// Selector: ", "").to_string(); + } + + // skip comments + if line.starts_with("//") { + continue; + } + + for word in line.split(&[';', ',', '(', ')', ' ']) { + // skip whitespace + if word.trim().is_empty() { + continue; + } + match (stage, pair, word) { + // parse custom type structs + (Stage::Start, Pair::First, "struct") => { + stage = Stage::Struct; + pair.next(); + } + (Stage::Struct, Pair::Second, _) => { + solidity_struct.name = word.to_string(); + stage = Stage::StructParams; + pair.next(); + } + (Stage::StructParams, Pair::First, "{") => (), + (Stage::StructParams, Pair::First, "}") => { + custom_types.insert(solidity_struct.name.clone(), solidity_struct); + stage = Stage::Start; + solidity_struct = SolidityStruct::default(); + } + (Stage::StructParams, Pair::First, _) => { + solidity_struct.params.push(word.to_string()); + pair.next(); + } + (Stage::StructParams, Pair::Second, _) => { + pair.next(); + } + + // parse function + (Stage::Start, Pair::First, "function") => { + stage = Stage::FnName; + pair.next(); + } + (Stage::FnName, Pair::Second, _) => { + solidity_fn.name = word.to_string(); + stage = Stage::Args; + pair.next(); + } + (Stage::Args, Pair::First, "external") => { + functions.push(solidity_fn); + stage = Stage::Start; + pair = Pair::First; + solidity_fn = SolidityFunction::default() + } + (Stage::Args, Pair::First, _) => { + let mut arg = word.to_string(); + if let Some(t) = custom_types.get(&arg) { + arg = t.signature() + } + solidity_fn.args.push(arg); + pair.next(); + } + (Stage::Args, Pair::Second, "memory") => (), + (Stage::Args, Pair::Second, _) => pair.next(), + _ => { + stage = Stage::Start; + pair = Pair::First; + solidity_fn = SolidityFunction::default() + } + } + } + } + + functions +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_selectors_are_parsed() { + let actual = get_selectors("tests/solidity_test.sol") + .into_iter() + .map(|sol_fn| { + ( + sol_fn.compute_selector_hex(), + sol_fn.docs_selector.clone(), + sol_fn.signature(), + ) + }) + .collect::>(); + let expected = vec![ + ( + String::from("f7af8d91"), + String::from(""), + String::from("fnNoArgs()"), + ), + ( + String::from("d43a9a43"), + String::from("c4921133"), + String::from("fnOneArg(address)"), + ), + ( + String::from("40d6a43d"), + String::from("67ea837e"), + String::from("fnTwoArgs(address,uint256)"), + ), + ( + String::from("cee150c8"), + String::from("d6b423d9"), + String::from("fnSameArgs(uint64,uint64)"), + ), + ( + String::from("c6024207"), + String::from("b9904a86"), + String::from("fnOneArgSameLine(uint64)"), + ), + ( + String::from("fcbc04c3"), + String::from("28f0c44e"), + String::from("fnTwoArgsSameLine(uint64,bytes32)"), + ), + ( + String::from("c590304c"), + String::from("06f0c1ce"), + String::from("fnTwoArgsSameLineExternalSplit(uint64,bytes32)"), + ), + ( + String::from("a19a07e1"), + String::from("18001a4e"), + String::from("fnMemoryArrayArgs(address[],uint256[],bytes[])"), + ), + ( + String::from("f29f96de"), + String::from("d8af1a4e"), + String::from("fnCustomArgs((uint8,bytes[]),bytes[],uint64)"), + ), + ( + String::from("b2c9f1a3"), + String::from("550c1a4e"), + String::from( + "fnCustomArgsMultiple((uint8,bytes[]),(address[],uint256[],bytes[])".to_owned() + + ",bytes[],uint64)", + ), + ), + ]; + assert_eq!(expected, actual); + } +} diff --git a/precompiles/utils/src/substrate.rs b/precompiles/utils/src/substrate.rs new file mode 100644 index 0000000000..c0ffd23a43 --- /dev/null +++ b/precompiles/utils/src/substrate.rs @@ -0,0 +1,101 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Utils related to Substrate features: +//! - Substrate call dispatch. +//! - Substrate DB read and write costs + +use { + crate::{revert, EvmResult}, + core::marker::PhantomData, + fp_evm::{ExitError, PrecompileFailure, PrecompileHandle}, + frame_support::{ + dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, + traits::Get, + }, + pallet_evm::GasWeightMapping, +}; + +/// Helper functions requiring a Substrate runtime. +/// This runtime must of course implement `pallet_evm::Config`. +#[derive(Clone, Copy, Debug)] +pub struct RuntimeHelper(PhantomData); + +impl RuntimeHelper +where + Runtime: pallet_evm::Config, + Runtime::Call: Dispatchable + GetDispatchInfo, +{ + /// Try to dispatch a Substrate call. + /// Return an error if there are not enough gas, or if the call fails. + /// If successful returns the used gas using the Runtime GasWeightMapping. + pub fn try_dispatch( + handle: &mut impl PrecompileHandle, + origin: ::Origin, + call: Call, + ) -> EvmResult<()> + where + Runtime::Call: From, + { + let call = Runtime::Call::from(call); + let dispatch_info = call.get_dispatch_info(); + + // Make sure there is enough gas. + let remaining_gas = handle.remaining_gas(); + let required_gas = Runtime::GasWeightMapping::weight_to_gas(dispatch_info.weight); + if required_gas > remaining_gas { + return Err(PrecompileFailure::Error { + exit_status: ExitError::OutOfGas, + }); + } + + // Dispatch call. + // It may be possible to not record gas cost if the call returns Pays::No. + // However while Substrate handle checking weight while not making the sender pay for it, + // the EVM doesn't. It seems this safer to always record the costs to avoid unmetered + // computations. + let used_weight = call + .dispatch(origin) + .map_err(|e| revert(alloc::format!("Dispatched call failed with error: {:?}", e)))? + .actual_weight; + + let used_gas = + Runtime::GasWeightMapping::weight_to_gas(used_weight.unwrap_or(dispatch_info.weight)); + + handle.record_cost(used_gas)?; + + Ok(()) + } +} + +impl RuntimeHelper +where + Runtime: pallet_evm::Config, +{ + /// Cost of a Substrate DB write in gas. + pub fn db_write_gas_cost() -> u64 { + ::GasWeightMapping::weight_to_gas( + ::DbWeight::get().write, + ) + } + + /// Cost of a Substrate DB read in gas. + pub fn db_read_gas_cost() -> u64 { + ::GasWeightMapping::weight_to_gas( + ::DbWeight::get().read, + ) + } +} diff --git a/precompiles/utils/src/testing.rs b/precompiles/utils/src/testing.rs new file mode 100644 index 0000000000..42b9c51f85 --- /dev/null +++ b/precompiles/utils/src/testing.rs @@ -0,0 +1,379 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use { + core::assert_matches::assert_matches, + fp_evm::{ + Context, ExitError, ExitReason, ExitSucceed, Log, PrecompileFailure, PrecompileHandle, + PrecompileOutput, PrecompileResult, PrecompileSet, Transfer, + }, + sp_core::{H160, H256, U256}, + sp_std::boxed::Box, +}; + +pub struct Subcall { + pub address: H160, + pub transfer: Option, + pub input: Vec, + pub target_gas: Option, + pub is_static: bool, + pub context: Context, +} + +pub struct SubcallOutput { + pub reason: ExitReason, + pub output: Vec, + pub cost: u64, + pub logs: Vec, +} + +pub trait SubcallTrait: FnMut(Subcall) -> SubcallOutput + 'static {} + +impl SubcallOutput + 'static> SubcallTrait for T {} + +pub type SubcallHandle = Box; + +/// Mock handle to write tests for precompiles. +pub struct MockHandle { + pub gas_limit: u64, + pub gas_used: u64, + pub logs: Vec, + pub subcall_handle: Option, + pub code_address: H160, + pub input: Vec, + pub context: Context, + pub is_static: bool, +} + +impl MockHandle { + pub fn new(code_address: H160, context: Context) -> Self { + Self { + gas_limit: u64::MAX, + gas_used: 0, + logs: vec![], + subcall_handle: None, + code_address, + input: Vec::new(), + context, + is_static: false, + } + } +} + +impl PrecompileHandle for MockHandle { + /// Perform subcall in provided context. + /// Precompile specifies in which context the subcall is executed. + fn call( + &mut self, + address: H160, + transfer: Option, + input: Vec, + target_gas: Option, + is_static: bool, + context: &Context, + ) -> (ExitReason, Vec) { + if self + .record_cost(crate::costs::call_cost( + context.apparent_value, + &evm::Config::london(), + )) + .is_err() + { + return (ExitReason::Error(ExitError::OutOfGas), vec![]); + } + + match &mut self.subcall_handle { + Some(handle) => { + let SubcallOutput { + reason, + output, + cost, + logs, + } = handle(Subcall { + address, + transfer, + input, + target_gas, + is_static, + context: context.clone(), + }); + + if self.record_cost(cost).is_err() { + return (ExitReason::Error(ExitError::OutOfGas), vec![]); + } + + for log in logs { + self.log(log.address, log.topics, log.data) + .expect("cannot fail"); + } + + (reason, output) + } + None => panic!("no subcall handle registered"), + } + } + + fn record_cost(&mut self, cost: u64) -> Result<(), ExitError> { + self.gas_used += cost; + + if self.gas_used > self.gas_limit { + Err(ExitError::OutOfGas) + } else { + Ok(()) + } + } + + fn remaining_gas(&self) -> u64 { + self.gas_limit - self.gas_used + } + + fn log(&mut self, address: H160, topics: Vec, data: Vec) -> Result<(), ExitError> { + self.logs.push(PrettyLog(Log { + address, + topics, + data, + })); + Ok(()) + } + + /// Retreive the code address (what is the address of the precompile being called). + fn code_address(&self) -> H160 { + self.code_address + } + + /// Retreive the input data the precompile is called with. + fn input(&self) -> &[u8] { + &self.input + } + + /// Retreive the context in which the precompile is executed. + fn context(&self) -> &Context { + &self.context + } + + /// Is the precompile call is done statically. + fn is_static(&self) -> bool { + self.is_static + } + + /// Retreive the gas limit of this call. + fn gas_limit(&self) -> Option { + Some(self.gas_limit) + } +} + +pub struct PrecompilesTester<'p, P> { + precompiles: &'p P, + handle: MockHandle, + + target_gas: Option, + subcall_handle: Option, + + expected_cost: Option, + expected_logs: Option>, +} + +impl<'p, P: PrecompileSet> PrecompilesTester<'p, P> { + pub fn new( + precompiles: &'p P, + from: impl Into, + to: impl Into, + data: Vec, + ) -> Self { + let to = to.into(); + let mut handle = MockHandle::new( + to.clone(), + Context { + address: to, + caller: from.into(), + apparent_value: U256::zero(), + }, + ); + + handle.input = data; + + Self { + precompiles, + handle, + + target_gas: None, + subcall_handle: None, + + expected_cost: None, + expected_logs: None, + } + } + + pub fn with_value(mut self, value: impl Into) -> Self { + self.handle.context.apparent_value = value.into(); + self + } + + pub fn with_subcall_handle(mut self, subcall_handle: impl SubcallTrait) -> Self { + self.subcall_handle = Some(Box::new(subcall_handle)); + self + } + + pub fn with_target_gas(mut self, target_gas: Option) -> Self { + self.target_gas = target_gas; + self + } + + pub fn expect_cost(mut self, cost: u64) -> Self { + self.expected_cost = Some(cost); + self + } + + pub fn expect_no_logs(mut self) -> Self { + self.expected_logs = Some(vec![]); + self + } + + pub fn expect_log(mut self, log: Log) -> Self { + self.expected_logs = Some({ + let mut logs = self.expected_logs.unwrap_or_else(Vec::new); + logs.push(PrettyLog(log)); + logs + }); + self + } + + fn assert_optionals(&self) { + if let Some(cost) = &self.expected_cost { + assert_eq!(&self.handle.gas_used, cost); + } + + if let Some(logs) = &self.expected_logs { + similar_asserts::assert_eq!(&self.handle.logs, logs); + } + } + + fn execute(&mut self) -> Option { + let handle = &mut self.handle; + handle.subcall_handle = self.subcall_handle.take(); + + if let Some(gas_limit) = self.target_gas { + handle.gas_limit = gas_limit; + } + + let res = self.precompiles.execute( + handle, + // self.to, + // &self.data, + // self.target_gas, + // &self.context, + // self.is_static, + ); + + self.subcall_handle = handle.subcall_handle.take(); + + res + } + + /// Execute the precompile set and expect some precompile to have been executed, regardless of the + /// result. + pub fn execute_some(mut self) { + let res = self.execute(); + assert!(res.is_some()); + self.assert_optionals(); + } + + /// Execute the precompile set and expect no precompile to have been executed. + pub fn execute_none(mut self) { + let res = self.execute(); + assert!(res.is_some()); + self.assert_optionals(); + } + + /// Execute the precompile set and check it returns provided output. + pub fn execute_returns(mut self, output: Vec) { + let res = self.execute(); + assert_eq!( + res, + Some(Ok(PrecompileOutput { + exit_status: ExitSucceed::Returned, + output + })) + ); + self.assert_optionals(); + } + + /// Execute the precompile set and check if it reverts. + /// Take a closure allowing to perform custom matching on the output. + pub fn execute_reverts(mut self, check: impl Fn(&[u8]) -> bool) { + let res = self.execute(); + assert_matches!( + res, + Some(Err(PrecompileFailure::Revert { output, ..})) + if check(&output) + ); + self.assert_optionals(); + } + + /// Execute the precompile set and check it returns provided output. + pub fn execute_error(mut self, error: ExitError) { + let res = self.execute(); + assert_eq!( + res, + Some(Err(PrecompileFailure::Error { exit_status: error })) + ); + self.assert_optionals(); + } +} + +pub trait PrecompileTesterExt: PrecompileSet + Sized { + fn prepare_test( + &self, + from: impl Into, + to: impl Into, + data: Vec, + ) -> PrecompilesTester; +} + +impl PrecompileTesterExt for T { + fn prepare_test( + &self, + from: impl Into, + to: impl Into, + data: Vec, + ) -> PrecompilesTester { + PrecompilesTester::new(self, from, to, data) + } +} + +#[derive(Clone, PartialEq, Eq)] +pub struct PrettyLog(Log); + +impl core::fmt::Debug for PrettyLog { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> Result<(), core::fmt::Error> { + let bytes = self + .0 + .data + .iter() + .map(|b| format!("{:02X}", b)) + .collect::>() + .join(""); + + let message = String::from_utf8(self.0.data.clone()).ok(); + + f.debug_struct("Log") + .field("address", &self.0.address) + .field("topics", &self.0.topics) + .field("data", &bytes) + .field("data_utf8", &message) + .finish() + } +} diff --git a/precompiles/utils/src/tests.rs b/precompiles/utils/src/tests.rs index ec735e5d71..8d9851bf7b 100644 --- a/precompiles/utils/src/tests.rs +++ b/precompiles/utils/src/tests.rs @@ -14,12 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use super::*; -use crate::data::xcm::{network_id_from_bytes, network_id_to_bytes}; -use hex_literal::hex; -use sp_core::{H256, U256}; -use sp_std::convert::TryInto; -use xcm::latest::{Junction, Junctions, NetworkId}; +use { + crate::{ + data::xcm::{network_id_from_bytes, network_id_to_bytes}, + prelude::*, + }, + fp_evm::PrecompileFailure, + hex_literal::hex, + pallet_evm::Context, + sp_core::{H160, H256, U256}, + sp_std::convert::TryInto, + xcm::latest::{Junction, Junctions, NetworkId}, +}; + fn u256_repeat_byte(byte: u8) -> U256 { let value = H256::repeat_byte(byte); @@ -53,11 +60,8 @@ fn read_bool() { let writer_output = EvmDataWriter::new().write(value).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output); - let parsed: bool = reader - .read(&mut gasometer) - .expect("to correctly parse bool"); + let parsed: bool = reader.read().expect("to correctly parse bool"); assert_eq!(value, parsed); } @@ -79,9 +83,8 @@ fn read_u64() { let value = 42u64; let writer_output = EvmDataWriter::new().write(value).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output); - let parsed: u64 = reader.read(&mut gasometer).expect("to correctly parse u64"); + let parsed: u64 = reader.read().expect("to correctly parse u64"); assert_eq!(value, parsed); } @@ -103,11 +106,8 @@ fn read_u128() { let value = 42u128; let writer_output = EvmDataWriter::new().write(value).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output); - let parsed: u128 = reader - .read(&mut gasometer) - .expect("to correctly parse u128"); + let parsed: u128 = reader.read().expect("to correctly parse u128"); assert_eq!(value, parsed); } @@ -129,11 +129,8 @@ fn read_u256() { let value = U256::from(42); let writer_output = EvmDataWriter::new().write(value).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output); - let parsed: U256 = reader - .read(&mut gasometer) - .expect("to correctly parse U256"); + let parsed: U256 = reader.read().expect("to correctly parse U256"); assert_eq!(value, parsed); } @@ -150,10 +147,9 @@ fn read_selector() { let selector = &Keccak256::digest(b"action1()")[0..4]; - let mut gasometer = Gasometer::new(None); - let (_, parsed_selector) = - EvmDataReader::new_with_selector::(&mut gasometer, selector) - .expect("there is a selector"); + let parsed_selector = + EvmDataReader::read_selector::(selector).expect("there is a selector"); + EvmDataReader::new_skip_selector(selector).expect("there is a selector"); assert_eq!(parsed_selector, FakeAction::Action1) } @@ -164,11 +160,8 @@ fn read_u256_too_short() { let value = U256::from(42); let writer_output = EvmDataWriter::new().write(value).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output[0..31]); - let _: U256 = reader - .read(&mut gasometer) - .expect("to correctly parse U256"); + let _: U256 = reader.read().expect("to correctly parse U256"); } #[test] @@ -200,11 +193,8 @@ fn read_h256() { let value = H256::from(raw); let writer_output = EvmDataWriter::new().write(value).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output); - let parsed: H256 = reader - .read(&mut gasometer) - .expect("to correctly parse H256"); + let parsed: H256 = reader.read().expect("to correctly parse H256"); assert_eq!(value, parsed); } @@ -219,11 +209,8 @@ fn read_h256_too_short() { let value = H256::from(raw); let writer_output = EvmDataWriter::new().write(value).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output[0..31]); - let _: H256 = reader - .read(&mut gasometer) - .expect("to correctly parse H256"); + let _: H256 = reader.read().expect("to correctly parse H256"); } #[test] @@ -241,11 +228,8 @@ fn read_address() { let value = H160::repeat_byte(0xAA); let writer_output = EvmDataWriter::new().write(Address(value)).build(); - let mut gasometer = Gasometer::new(None); let mut reader = EvmDataReader::new(&writer_output); - let parsed: Address = reader - .read(&mut gasometer) - .expect("to correctly parse Address"); + let parsed: Address = reader.read().expect("to correctly parse Address"); assert_eq!(value, parsed.0); } @@ -263,17 +247,15 @@ fn write_h256_array() { assert_eq!(writer_output.len(), 0xE0); // We can read this "manualy" using simpler functions since arrays are 32-byte aligned. - let mut gm = Gasometer::new(None); - let gm = &mut gm; let mut reader = EvmDataReader::new(&writer_output); - assert_eq!(reader.read::(gm).expect("read offset"), 32.into()); - assert_eq!(reader.read::(gm).expect("read size"), 5.into()); - assert_eq!(reader.read::(gm).expect("read 1st"), array[0]); - assert_eq!(reader.read::(gm).expect("read 2nd"), array[1]); - assert_eq!(reader.read::(gm).expect("read 3rd"), array[2]); - assert_eq!(reader.read::(gm).expect("read 4th"), array[3]); - assert_eq!(reader.read::(gm).expect("read 5th"), array[4]); + assert_eq!(reader.read::().expect("read offset"), 32.into()); + assert_eq!(reader.read::().expect("read size"), 5.into()); + assert_eq!(reader.read::().expect("read 1st"), array[0]); + assert_eq!(reader.read::().expect("read 2nd"), array[1]); + assert_eq!(reader.read::().expect("read 3rd"), array[2]); + assert_eq!(reader.read::().expect("read 4th"), array[3]); + assert_eq!(reader.read::().expect("read 5th"), array[4]); } #[test] @@ -288,10 +270,7 @@ fn read_h256_array() { let writer_output = EvmDataWriter::new().write(array.clone()).build(); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Vec = reader - .read(&mut gasometer) - .expect("to correctly parse Vec"); + let parsed: Vec = reader.read().expect("to correctly parse Vec"); assert_eq!(array, parsed); } @@ -309,17 +288,15 @@ fn write_u256_array() { assert_eq!(writer_output.len(), 0xE0); // We can read this "manualy" using simpler functions since arrays are 32-byte aligned. - let mut gm = Gasometer::new(None); - let gm = &mut gm; let mut reader = EvmDataReader::new(&writer_output); - assert_eq!(reader.read::(gm).expect("read offset"), 32.into()); - assert_eq!(reader.read::(gm).expect("read size"), 5.into()); - assert_eq!(reader.read::(gm).expect("read 1st"), array[0]); - assert_eq!(reader.read::(gm).expect("read 2nd"), array[1]); - assert_eq!(reader.read::(gm).expect("read 3rd"), array[2]); - assert_eq!(reader.read::(gm).expect("read 4th"), array[3]); - assert_eq!(reader.read::(gm).expect("read 5th"), array[4]); + assert_eq!(reader.read::().expect("read offset"), 32.into()); + assert_eq!(reader.read::().expect("read size"), 5.into()); + assert_eq!(reader.read::().expect("read 1st"), array[0]); + assert_eq!(reader.read::().expect("read 2nd"), array[1]); + assert_eq!(reader.read::().expect("read 3rd"), array[2]); + assert_eq!(reader.read::().expect("read 4th"), array[3]); + assert_eq!(reader.read::().expect("read 5th"), array[4]); } #[test] @@ -334,10 +311,7 @@ fn read_u256_array() { let writer_output = EvmDataWriter::new().write(array.clone()).build(); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Vec = reader - .read(&mut gasometer) - .expect("to correctly parse Vec"); + let parsed: Vec = reader.read().expect("to correctly parse Vec"); assert_eq!(array, parsed); } @@ -355,16 +329,14 @@ fn write_address_array() { // We can read this "manualy" using simpler functions since arrays are 32-byte aligned. let mut reader = EvmDataReader::new(&writer_output); - let mut gm = Gasometer::new(None); - let gm = &mut gm; - - assert_eq!(reader.read::(gm).expect("read offset"), 32.into()); - assert_eq!(reader.read::(gm).expect("read size"), 5.into()); - assert_eq!(reader.read::
(gm).expect("read 1st"), array[0]); - assert_eq!(reader.read::
(gm).expect("read 2nd"), array[1]); - assert_eq!(reader.read::
(gm).expect("read 3rd"), array[2]); - assert_eq!(reader.read::
(gm).expect("read 4th"), array[3]); - assert_eq!(reader.read::
(gm).expect("read 5th"), array[4]); + + assert_eq!(reader.read::().expect("read offset"), 32.into()); + assert_eq!(reader.read::().expect("read size"), 5.into()); + assert_eq!(reader.read::
().expect("read 1st"), array[0]); + assert_eq!(reader.read::
().expect("read 2nd"), array[1]); + assert_eq!(reader.read::
().expect("read 3rd"), array[2]); + assert_eq!(reader.read::
().expect("read 4th"), array[3]); + assert_eq!(reader.read::
().expect("read 5th"), array[4]); } #[test] @@ -379,10 +351,7 @@ fn read_address_array() { let writer_output = EvmDataWriter::new().write(array.clone()).build(); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Vec
= reader - .read(&mut gasometer) - .expect("to correctly parse Vec"); + let parsed: Vec
= reader.read().expect("to correctly parse Vec"); assert_eq!(array, parsed); } @@ -401,9 +370,8 @@ fn read_address_array_size_too_big() { U256::from(6u32).to_big_endian(&mut writer_output[0x20..0x40]); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - match reader.read::>(&mut gasometer) { + match reader.read::>() { Ok(_) => panic!("should not parse correctly"), Err(PrecompileFailure::Revert { output: err, .. }) => { assert_eq!(err, b"tried to parse H160 out of bounds") @@ -430,26 +398,18 @@ fn write_address_nested_array() { // We can read this "manualy" using simpler functions since arrays are 32-byte aligned. let mut reader = EvmDataReader::new(&writer_output); - let mut gm = Gasometer::new(None); - let gm = &mut gm; - assert_eq!(reader.read::(gm).expect("read offset"), 0x20.into()); // 0x00 - assert_eq!(reader.read::(gm).expect("read size"), 2.into()); // 0x20 - assert_eq!( - reader.read::(gm).expect("read 1st offset"), - 0x40.into() - ); // 0x40 - assert_eq!( - reader.read::(gm).expect("read 2st offset"), - 0xc0.into() - ); // 0x60 - assert_eq!(reader.read::(gm).expect("read 1st size"), 3.into()); // 0x80 - assert_eq!(reader.read::
(gm).expect("read 1-1"), array[0][0]); // 0xA0 - assert_eq!(reader.read::
(gm).expect("read 1-2"), array[0][1]); // 0xC0 - assert_eq!(reader.read::
(gm).expect("read 1-3"), array[0][2]); // 0xE0 - assert_eq!(reader.read::(gm).expect("read 2nd size"), 2.into()); // 0x100 - assert_eq!(reader.read::
(gm).expect("read 2-1"), array[1][0]); // 0x120 - assert_eq!(reader.read::
(gm).expect("read 2-2"), array[1][1]); // 0x140 + assert_eq!(reader.read::().expect("read offset"), 0x20.into()); // 0x00 + assert_eq!(reader.read::().expect("read size"), 2.into()); // 0x20 + assert_eq!(reader.read::().expect("read 1st offset"), 0x40.into()); // 0x40 + assert_eq!(reader.read::().expect("read 2st offset"), 0xc0.into()); // 0x60 + assert_eq!(reader.read::().expect("read 1st size"), 3.into()); // 0x80 + assert_eq!(reader.read::
().expect("read 1-1"), array[0][0]); // 0xA0 + assert_eq!(reader.read::
().expect("read 1-2"), array[0][1]); // 0xC0 + assert_eq!(reader.read::
().expect("read 1-3"), array[0][2]); // 0xE0 + assert_eq!(reader.read::().expect("read 2nd size"), 2.into()); // 0x100 + assert_eq!(reader.read::
().expect("read 2-1"), array[1][0]); // 0x120 + assert_eq!(reader.read::
().expect("read 2-2"), array[1][1]); // 0x140 } #[test] @@ -468,10 +428,7 @@ fn read_address_nested_array() { let writer_output = EvmDataWriter::new().write(array.clone()).build(); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Vec> = reader - .read(&mut gasometer) - .expect("to correctly parse Vec>"); + let parsed: Vec> = reader.read().expect("to correctly parse Vec>"); assert_eq!(array, parsed); } @@ -496,24 +453,16 @@ fn write_multiple_arrays() { // We can read this "manualy" using simpler functions since arrays are 32-byte aligned. let mut reader = EvmDataReader::new(&writer_output); - let mut gm = Gasometer::new(None); - let gm = &mut gm; - assert_eq!( - reader.read::(gm).expect("read 1st offset"), - 0x40.into() - ); // 0x00 - assert_eq!( - reader.read::(gm).expect("read 2nd offset"), - 0xc0.into() - ); // 0x20 - assert_eq!(reader.read::(gm).expect("read 1st size"), 3.into()); // 0x40 - assert_eq!(reader.read::
(gm).expect("read 1-1"), array1[0]); // 0x60 - assert_eq!(reader.read::
(gm).expect("read 1-2"), array1[1]); // 0x80 - assert_eq!(reader.read::
(gm).expect("read 1-3"), array1[2]); // 0xA0 - assert_eq!(reader.read::(gm).expect("read 2nd size"), 2.into()); // 0xC0 - assert_eq!(reader.read::(gm).expect("read 2-1"), array2[0]); // 0xE0 - assert_eq!(reader.read::(gm).expect("read 2-2"), array2[1]); // 0x100 + assert_eq!(reader.read::().expect("read 1st offset"), 0x40.into()); // 0x00 + assert_eq!(reader.read::().expect("read 2nd offset"), 0xc0.into()); // 0x20 + assert_eq!(reader.read::().expect("read 1st size"), 3.into()); // 0x40 + assert_eq!(reader.read::
().expect("read 1-1"), array1[0]); // 0x60 + assert_eq!(reader.read::
().expect("read 1-2"), array1[1]); // 0x80 + assert_eq!(reader.read::
().expect("read 1-3"), array1[2]); // 0xA0 + assert_eq!(reader.read::().expect("read 2nd size"), 2.into()); // 0xC0 + assert_eq!(reader.read::().expect("read 2-1"), array2[0]); // 0xE0 + assert_eq!(reader.read::().expect("read 2-2"), array2[1]); // 0x100 } #[test] @@ -540,16 +489,11 @@ fn read_multiple_arrays() { assert_eq!(writer_output.len(), 0x120); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Vec
= reader - .read(&mut gasometer) - .expect("to correctly parse Vec
"); + let parsed: Vec
= reader.read().expect("to correctly parse Vec
"); assert_eq!(array1, parsed); - let parsed: Vec = reader - .read(&mut gasometer) - .expect("to correctly parse Vec"); + let parsed: Vec = reader.read().expect("to correctly parse Vec"); assert_eq!(array2, parsed); } @@ -560,10 +504,7 @@ fn read_bytes() { let writer_output = EvmDataWriter::new().write(Bytes::from(&data[..])).build(); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Bytes = reader - .read(&mut gasometer) - .expect("to correctly parse Bytes"); + let parsed: Bytes = reader.read().expect("to correctly parse Bytes"); assert_eq!(data, parsed.as_bytes()); } @@ -577,20 +518,15 @@ fn write_bytes() { // We can read this "manualy" using simpler functions. let mut reader = EvmDataReader::new(&writer_output); - let mut gm = Gasometer::new(None); - let gm = &mut gm; // We pad data to a multiple of 32 bytes. let mut padded = data.to_vec(); assert!(data.len() < 0x80); padded.resize(0x80, 0); - assert_eq!(reader.read::(gm).expect("read offset"), 32.into()); - assert_eq!( - reader.read::(gm).expect("read size"), - data.len().into() - ); - let mut read = |e| reader.read::(gm).expect(e); // shorthand + assert_eq!(reader.read::().expect("read offset"), 32.into()); + assert_eq!(reader.read::().expect("read size"), data.len().into()); + let mut read = |e| reader.read::().expect(e); // shorthand assert_eq!(read("read part 1"), H256::from_slice(&padded[0x00..0x20])); assert_eq!(read("read part 2"), H256::from_slice(&padded[0x20..0x40])); assert_eq!(read("read part 3"), H256::from_slice(&padded[0x40..0x60])); @@ -604,10 +540,7 @@ fn read_string() { let writer_output = EvmDataWriter::new().write(Bytes::from(data)).build(); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Bytes = reader - .read(&mut gasometer) - .expect("to correctly parse Bytes"); + let parsed: Bytes = reader.read().expect("to correctly parse Bytes"); assert_eq!(data, parsed.as_str().expect("valid utf8")); } @@ -621,20 +554,15 @@ fn write_string() { // We can read this "manualy" using simpler functions. let mut reader = EvmDataReader::new(&writer_output); - let mut gm = Gasometer::new(None); - let gm = &mut gm; // We pad data to next multiple of 32 bytes. let mut padded = data.as_bytes().to_vec(); assert!(data.len() < 0x80); padded.resize(0x80, 0); - assert_eq!(reader.read::(gm).expect("read offset"), 32.into()); - assert_eq!( - reader.read::(gm).expect("read size"), - data.len().into() - ); - let mut read = |e| reader.read::(gm).expect(e); // shorthand + assert_eq!(reader.read::().expect("read offset"), 32.into()); + assert_eq!(reader.read::().expect("read size"), data.len().into()); + let mut read = |e| reader.read::().expect(e); // shorthand assert_eq!(read("read part 1"), H256::from_slice(&padded[0x00..0x20])); assert_eq!(read("read part 2"), H256::from_slice(&padded[0x20..0x40])); assert_eq!(read("read part 3"), H256::from_slice(&padded[0x40..0x60])); @@ -661,41 +589,33 @@ fn write_vec_bytes() { padded.resize(0x80, 0); let mut reader = EvmDataReader::new(&writer_output); - let mut gm = Gasometer::new(None); - let gm = &mut gm; // Offset of vec - assert_eq!(reader.read::(gm).expect("read offset"), 32.into()); + assert_eq!(reader.read::().expect("read offset"), 32.into()); // Length of vec - assert_eq!(reader.read::(gm).expect("read offset"), 2.into()); + assert_eq!(reader.read::().expect("read offset"), 2.into()); // Relative offset of first bytgmes object - assert_eq!(reader.read::(gm).expect("read offset"), 0x40.into()); + assert_eq!(reader.read::().expect("read offset"), 0x40.into()); // Relative offset of second bytes object - assert_eq!(reader.read::(gm).expect("read offset"), 0xe0.into()); + assert_eq!(reader.read::().expect("read offset"), 0xe0.into()); // Length of first bytes object - assert_eq!( - reader.read::(gm).expect("read size"), - data.len().into() - ); + assert_eq!(reader.read::().expect("read size"), data.len().into()); // First byte objects data - let mut read = |e| reader.read::(gm).expect(e); // shorthand + let mut read = |e| reader.read::().expect(e); // shorthand assert_eq!(read("read part 1"), H256::from_slice(&padded[0x00..0x20])); assert_eq!(read("read part 2"), H256::from_slice(&padded[0x20..0x40])); assert_eq!(read("read part 3"), H256::from_slice(&padded[0x40..0x60])); assert_eq!(read("read part 4"), H256::from_slice(&padded[0x60..0x80])); // Length of second bytes object - assert_eq!( - reader.read::(gm).expect("read size"), - data.len().into() - ); + assert_eq!(reader.read::().expect("read size"), data.len().into()); // Second byte objects data - let mut read = |e| reader.read::(gm).expect(e); // shorthand + let mut read = |e| reader.read::().expect(e); // shorthand assert_eq!(read("read part 1"), H256::from_slice(&padded[0x00..0x20])); assert_eq!(read("read part 2"), H256::from_slice(&padded[0x20..0x40])); assert_eq!(read("read part 3"), H256::from_slice(&padded[0x40..0x60])); @@ -717,10 +637,7 @@ fn read_vec_of_bytes() { .for_each(|hash| println!("{:?}", hash)); let mut reader = EvmDataReader::new(&writer_output); - let mut gasometer = Gasometer::new(None); - let parsed: Vec = reader - .read(&mut gasometer) - .expect("to correctly parse Vec"); + let parsed: Vec = reader.read().expect("to correctly parse Vec"); assert_eq!(vec![Bytes::from(&data[..]), Bytes::from(&data[..])], parsed); } @@ -750,8 +667,8 @@ struct MultiLocation { } impl EvmData for MultiLocation { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let (parents, interior) = reader.read(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let (parents, interior) = reader.read()?; Ok(MultiLocation { parents, interior }) } @@ -764,7 +681,7 @@ impl EvmData for MultiLocation { } } -#[crate::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] pub enum Action { TransferMultiAsset = "transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)", @@ -797,16 +714,13 @@ fn read_complex_solidity_function() { 0100000000000000000000000000000000000000000000000000000000000000" ); - let mut gm = Gasometer::new(None); - let gm = &mut gm; - - let (mut reader, selector) = - EvmDataReader::new_with_selector::(gm, &data).expect("to read selector"); + let selector = EvmDataReader::read_selector::(&data).expect("to read selector"); + let mut reader = EvmDataReader::new_skip_selector(&data).expect("to read selector"); assert_eq!(selector, Action::TransferMultiAsset); // asset assert_eq!( - reader.read::(gm).unwrap(), + reader.read::().unwrap(), MultiLocation { parents: 1, interior: vec![ @@ -817,11 +731,11 @@ fn read_complex_solidity_function() { ); // amount - assert_eq!(reader.read::(gm).unwrap(), 100u32.into()); + assert_eq!(reader.read::().unwrap(), 100u32.into()); // destination assert_eq!( - reader.read::(gm).unwrap(), + reader.read::().unwrap(), MultiLocation { parents: 1, interior: vec![Bytes::from( @@ -831,21 +745,18 @@ fn read_complex_solidity_function() { ); // weight - assert_eq!(reader.read::(gm).unwrap(), 100u32.into()); + assert_eq!(reader.read::().unwrap(), 100u32.into()); } #[test] fn junctions_decoder_works() { - let mut gm = Gasometer::new(None); - let gm = &mut gm; - let writer_output = EvmDataWriter::new() .write(Junctions::X1(Junction::OnlyChild)) .build(); let mut reader = EvmDataReader::new(&writer_output); let parsed: Junctions = reader - .read::(gm) + .read::() .expect("to correctly parse Junctions"); assert_eq!(parsed, Junctions::X1(Junction::OnlyChild)); @@ -856,7 +767,7 @@ fn junctions_decoder_works() { let mut reader = EvmDataReader::new(&writer_output); let parsed: Junctions = reader - .read::(gm) + .read::() .expect("to correctly parse Junctions"); assert_eq!( @@ -874,7 +785,7 @@ fn junctions_decoder_works() { let mut reader = EvmDataReader::new(&writer_output); let parsed: Junctions = reader - .read::(gm) + .read::() .expect("to correctly parse Junctions"); assert_eq!( @@ -889,14 +800,11 @@ fn junctions_decoder_works() { #[test] fn junction_decoder_works() { - let mut gm = Gasometer::new(None); - let gm = &mut gm; - let writer_output = EvmDataWriter::new().write(Junction::Parachain(0)).build(); let mut reader = EvmDataReader::new(&writer_output); let parsed: Junction = reader - .read::(gm) + .read::() .expect("to correctly parse Junctions"); assert_eq!(parsed, Junction::Parachain(0)); @@ -910,7 +818,7 @@ fn junction_decoder_works() { let mut reader = EvmDataReader::new(&writer_output); let parsed: Junction = reader - .read::(gm) + .read::() .expect("to correctly parse Junctions"); assert_eq!( @@ -930,7 +838,7 @@ fn junction_decoder_works() { let mut reader = EvmDataReader::new(&writer_output); let parsed: Junction = reader - .read::(gm) + .read::() .expect("to correctly parse Junctions"); assert_eq!( @@ -950,7 +858,7 @@ fn junction_decoder_works() { let mut reader = EvmDataReader::new(&writer_output); let parsed: Junction = reader - .read::(gm) + .read::() .expect("to correctly parse Junctions"); assert_eq!( @@ -964,100 +872,92 @@ fn junction_decoder_works() { #[test] fn network_id_decoder_works() { - let mut gm = Gasometer::new(None); - let gm = &mut gm; assert_eq!( - network_id_from_bytes(gm, network_id_to_bytes(NetworkId::Any)), + network_id_from_bytes(network_id_to_bytes(NetworkId::Any)), Ok(NetworkId::Any) ); assert_eq!( - network_id_from_bytes( - gm, - network_id_to_bytes(NetworkId::Named(b"myname".to_vec())) - ), + network_id_from_bytes(network_id_to_bytes(NetworkId::Named(b"myname".to_vec()))), Ok(NetworkId::Named(b"myname".to_vec())) ); assert_eq!( - network_id_from_bytes(gm, network_id_to_bytes(NetworkId::Kusama)), + network_id_from_bytes(network_id_to_bytes(NetworkId::Kusama)), Ok(NetworkId::Kusama) ); assert_eq!( - network_id_from_bytes(gm, network_id_to_bytes(NetworkId::Polkadot)), + network_id_from_bytes(network_id_to_bytes(NetworkId::Polkadot)), Ok(NetworkId::Polkadot) ); } #[test] -fn check_function_modifier() { - let mut gasometer = Gasometer::new(None); - let _ = gasometer.record_cost(500); - +fn test_check_function_modifier() { let context = |value: u32| Context { address: H160::zero(), caller: H160::zero(), apparent_value: U256::from(value), }; - let payable_error = || gasometer.revert("function is not payable"); - let static_error = || gasometer.revert("can't call non-static function in static context"); + let payable_error = || revert("function is not payable"); + let static_error = || revert("can't call non-static function in static context"); // Can't call non-static functions in static context. assert_eq!( - gasometer.check_function_modifier(&context(0), true, FunctionModifier::Payable), + check_function_modifier(&context(0), true, FunctionModifier::Payable), Err(static_error()) ); assert_eq!( - gasometer.check_function_modifier(&context(0), true, FunctionModifier::NonPayable), + check_function_modifier(&context(0), true, FunctionModifier::NonPayable), Err(static_error()) ); assert_eq!( - gasometer.check_function_modifier(&context(0), true, FunctionModifier::View), + check_function_modifier(&context(0), true, FunctionModifier::View), Ok(()) ); // Static check is performed before non-payable check. assert_eq!( - gasometer.check_function_modifier(&context(1), true, FunctionModifier::Payable), + check_function_modifier(&context(1), true, FunctionModifier::Payable), Err(static_error()) ); assert_eq!( - gasometer.check_function_modifier(&context(1), true, FunctionModifier::NonPayable), + check_function_modifier(&context(1), true, FunctionModifier::NonPayable), Err(static_error()) ); // FunctionModifier::View pass static check but fail for payable. assert_eq!( - gasometer.check_function_modifier(&context(1), true, FunctionModifier::View), + check_function_modifier(&context(1), true, FunctionModifier::View), Err(payable_error()) ); // Can't send funds to non payable function assert_eq!( - gasometer.check_function_modifier(&context(1), false, FunctionModifier::Payable), + check_function_modifier(&context(1), false, FunctionModifier::Payable), Ok(()) ); assert_eq!( - gasometer.check_function_modifier(&context(1), false, FunctionModifier::NonPayable), + check_function_modifier(&context(1), false, FunctionModifier::NonPayable), Err(payable_error()) ); assert_eq!( - gasometer.check_function_modifier(&context(1), false, FunctionModifier::View), + check_function_modifier(&context(1), false, FunctionModifier::View), Err(payable_error()) ); // Any function can be called without funds. assert_eq!( - gasometer.check_function_modifier(&context(0), false, FunctionModifier::Payable), + check_function_modifier(&context(0), false, FunctionModifier::Payable), Ok(()) ); assert_eq!( - gasometer.check_function_modifier(&context(0), false, FunctionModifier::NonPayable), + check_function_modifier(&context(0), false, FunctionModifier::NonPayable), Ok(()) ); assert_eq!( - gasometer.check_function_modifier(&context(0), false, FunctionModifier::View), + check_function_modifier(&context(0), false, FunctionModifier::View), Ok(()) ); } @@ -1070,13 +970,10 @@ fn read_static_size_tuple() { 0000000000000000000000000000000000000000000000000000000000000001" ); - let mut gm = Gasometer::new(None); - let gm = &mut gm; - let mut reader = EvmDataReader::new(&data); assert_eq!( - reader.read::<(Address, U256)>(gm).unwrap(), + reader.read::<(Address, U256)>().unwrap(), (Address(H160::repeat_byte(0x11)), U256::from(1u8)) ); } @@ -1094,13 +991,10 @@ fn read_dynamic_size_tuple() { 0100000000000000000000000000000000000000000000000000000000000000" ); - let mut gm = Gasometer::new(None); - let gm = &mut gm; - let mut reader = EvmDataReader::new(&data); assert_eq!( - reader.read::<(u8, Vec)>(gm).unwrap(), + reader.read::<(u8, Vec)>().unwrap(), (1, vec![Bytes(vec![0x01])]) ); } diff --git a/precompiles/utils/tests/solidity_test.sol b/precompiles/utils/tests/solidity_test.sol new file mode 100644 index 0000000000..8b1a1e9474 --- /dev/null +++ b/precompiles/utils/tests/solidity_test.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +/// @title Solidity test file with incorrectly defined selectors +interface SolidityTest { + /// A custom type + struct CustomArg0 { + uint8 p0; + bytes[] p1; + } + + /// A custom type + struct CustomArg1 { + address[] p0; + uint256[] p1; + bytes[] p2; + } + + /// @dev Function without params and no selector + function fnNoArgs() external; + + /// @dev Function info + /// + /// @param arg0 Arg0 Description + /// Selector: c4921133 + function fnOneArg(address arg0) external; + + /// @param arg0 Arg0 Description + /// @param arg1 Arg1 Description + /// Selector: 67ea837e + function fnTwoArgs(address arg0, uint256 arg1) external; + + /// @param arg0 Arg0 Description + /// @param arg1 Arg1 Description + /// Selector: d6b423d9 + function fnSameArgs(uint64 arg0, uint64 arg1) external; + + /// @param arg0 Arg0 Description + /// Selector: b9904a86 + function fnOneArgSameLine(uint64 arg0) external; + + /// @param arg0 Arg0 Description + /// @param arg1 Arg1 Description + /// Selector: 28f0c44e + function fnTwoArgsSameLine(uint64 arg0, bytes32 arg1) external; + + /// @param arg0 Arg0 Description + /// @param arg1 Arg1 Description + /// Selector: 06f0c1ce + function fnTwoArgsSameLineExternalSplit(uint64 arg0, bytes32 arg1) external; + + /// @param arg0 Arg0 Description + /// @param arg1 Arg1 Description + /// @param arg2 Arg2 Description + /// Selector: 18001a4e + function fnMemoryArrayArgs( + address[] memory arg0, + uint256[] memory arg1, + bytes[] memory arg2 + ) external; + + /// @param arg0 Arg0 Description + /// @param arg1 Arg1 Description + /// @param arg2 Arg2 Description + /// Selector: d8af1a4e + function fnCustomArgs( + CustomArg0 memory arg0, + bytes[] memory arg1, + uint64 arg2 + ) external; + + /// @param arg0 Arg0 Description + /// @param arg1 Arg1 Description + /// @param arg2 Arg2 Description + /// @param arg3 Arg3 Description + /// Selector: 550c1a4e + function fnCustomArgsMultiple( + CustomArg0 memory arg0, + CustomArg1 memory arg1, + bytes[] memory arg2, + uint64 arg3 + ) external; +} diff --git a/precompiles/xcm-transactor/Cargo.toml b/precompiles/xcm-transactor/Cargo.toml new file mode 100644 index 0000000000..1b95e91a7b --- /dev/null +++ b/precompiles/xcm-transactor/Cargo.toml @@ -0,0 +1,71 @@ +[package] +name = "pallet-evm-precompile-xcm-transactor" +authors = [ "PureStake" ] +description = "A Precompile to make xcm-transactor accessible to pallet-evm" +edition = "2021" +version = "0.1.0" + +[dependencies] +log = "0.4" +num_enum = { version = "0.5.3", default-features = false } +rustc-hex = { version = "2.0.1", default-features = false } + +# Moonbeam +pallet-xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } +precompile-utils = { path = "../utils", default-features = false } +xcm-primitives = { path = "../../primitives/xcm/", default-features = false } + +# Substrate +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } + +# Frontier +evm = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false, features = [ "with-codec" ] } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } + +# Polkadot +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } + +[dev-dependencies] +derive_more = "0.99" +serde = "1.0.100" +sha3 = "0.9" + +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } +xcm-primitives = { path = "../../primitives/xcm/" } + +# Substrate +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } + +# Cumulus +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } + +# Polkadot +pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } + +# ORML +orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23" } + +[features] +default = [ "std" ] +std = [ + "frame-support/std", + "frame-system/std", + "pallet-evm/std", + "pallet-xcm-transactor/std", + "precompile-utils/std", + "sp-core/std", + "sp-std/std", + "xcm-primitives/std", +] diff --git a/precompiles/xcm-transactor/XcmTransactor.sol b/precompiles/xcm-transactor/XcmTransactor.sol new file mode 100644 index 0000000000..5b56d9d914 --- /dev/null +++ b/precompiles/xcm-transactor/XcmTransactor.sol @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +/** + * @title Xcm Transactor Interface + * The interface through which solidity contracts will interact with xcm transactor pallet + * Address : 0x0000000000000000000000000000000000000806 + */ + +interface XcmTransactor { + + // A multilocation is defined by its number of parents and the encoded junctions (interior) + struct Multilocation { + uint8 parents; + bytes [] interior; + } + + /** Get index of an account in xcm transactor + * Selector 71b0edfa + * @param index The index of which we want to retrieve the account + * @return owner The owner of the derivative index + */ + function index_to_account(uint16 index) external view returns(address owner); + + /// DEPRECATED, replaced by transact_info_with_signed + /** Get transact info of a multilocation + * Selector f87f493f + * @param multilocation The location for which we want to know the transact info + * @return transact_extra_weight The extra weight involved in the XCM message of using derivative + * @return fee_per_second The amount of fee charged for a second of execution in the dest + * @return max_weight Maximum allowed weight for a single message in dest + */ + function transact_info(Multilocation memory multilocation) external view + returns(uint64 transact_extra_weight, uint256 fee_per_second, uint64 max_weight); + + /** Get transact info of a multilocation + * Selector cb26bf32 + * @param multilocation The location for which we want to know the transact info + * @return transact_extra_weight The extra weight involved in the XCM message of using derivative + * @return transact_extra_weight_signed The extra weight involved in the XCM message of using signed + * @return max_weight Maximum allowed weight for a single message in dest + */ + function transact_info_with_signed(Multilocation memory multilocation) external view + returns(uint64 transact_extra_weight, uint64 transact_extra_weight_signed, uint64 max_weight); + + /** Get fee per second charged in its reserve chain for an asset + * Selector 83f09082 + * @param multilocation The asset location for which we want to know the fee per second value + * @return fee_per_second The fee per second that the reserve chain charges for this asset + */ + function fee_per_second(Multilocation memory multilocation) external view + returns(uint256 fee_per_second); + + /** Transact through XCM using fee based on its multilocation + * Selector 9f89f03e + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param transactor The transactor to be used + * @param index The index to be used + * @param fee_asset The asset in which we want to pay fees. + * It has to be a reserve of the destination chain + * @param weight The weight we want to buy in the destination chain + * @param inner_call The inner call to be executed in the destination chain + */ + function transact_through_derivative_multilocation( + uint8 transactor, + uint16 index, + Multilocation memory fee_asset, + uint64 weight, + bytes memory inner_call + ) external; + + /** Transact through XCM using fee based on its currency_id + * Selector 267d4062 + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param transactor The transactor to be used + * @param index The index to be used + * @param currency_id Address of the currencyId of the asset to be used for fees + * It has to be a reserve of the destination chain + * @param weight The weight we want to buy in the destination chain + * @param inner_call The inner call to be executed in the destination chain + */ + function transact_through_derivative( + uint8 transactor, + uint16 index, + address currency_id, + uint64 weight, + bytes memory inner_call + ) external; + + /** Transact through XCM using fee based on its multilocation through signed origins + * Selector 19760407 + * @dev No token is burnt before sending the message. The caller must ensure the destination + * is able to undertand the DescendOrigin message, and create a unique account from which + * dispatch the call + * @param dest The destination chain (as multilocation) where to send the message + * @param fee_location The asset multilocation that indentifies the fee payment currency + * It has to be a reserve of the destination chain + * @param weight The weight we want to buy in the destination chain for the call to be made + * @param call The call to be executed in the destination chain + */ + function transact_through_signed_multilocation( + Multilocation memory dest, + Multilocation memory fee_location, + uint64 weight, + bytes memory call + ) external; + + /** Transact through XCM using fee based on its erc20 address through signed origins + * Selector 0139d697 + * @dev No token is burnt before sending the message. The caller must ensure the destination + * is able to undertand the DescendOrigin message, and create a unique account from which + * dispatch the call + * @param dest The destination chain (as multilocation) where to send the message + * @param fee_location_address The ERC20 address of the token we want to use to pay for fees + * only callable if such an asset has been BRIDGED to our chain + * @param weight The weight we want to buy in the destination chain for the call to be made + * @param call The call to be executed in the destination chain + */ + function transact_through_signed( + Multilocation memory dest, + address fee_location_address, + uint64 weight, + bytes memory call + ) external; +} \ No newline at end of file diff --git a/precompiles/xcm-transactor/src/lib.rs b/precompiles/xcm-transactor/src/lib.rs new file mode 100644 index 0000000000..30e450f831 --- /dev/null +++ b/precompiles/xcm-transactor/src/lib.rs @@ -0,0 +1,362 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! Precompile to xcm transactor runtime methods via the EVM + +#![cfg_attr(not(feature = "std"), no_std)] +#![feature(assert_matches)] + +use fp_evm::PrecompileHandle; +use frame_support::dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}; +use pallet_evm::{AddressMapping, PrecompileOutput}; +use pallet_xcm_transactor::RemoteTransactInfoWithMaxWeight; +use precompile_utils::prelude::*; +use sp_core::H160; +use sp_std::{ + boxed::Box, + convert::{TryFrom, TryInto}, + fmt::Debug, + marker::PhantomData, +}; +use xcm::latest::MultiLocation; +use xcm_primitives::AccountIdToCurrencyId; + +#[cfg(test)] +mod mock; +#[cfg(test)] +mod tests; + +pub type TransactorOf = ::Transactor; +pub type CurrencyIdOf = ::CurrencyId; + +#[generate_function_selector] +#[derive(Debug, PartialEq)] +pub enum Action { + IndexToAccount = "index_to_account(uint16)", + // DEPRECATED + TransactInfo = "transact_info((uint8,bytes[]))", + TransactThroughDerivativeMultiLocation = + "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)", + TransactThroughDerivative = "transact_through_derivative(uint8,uint16,address,uint64,bytes)", + TransactInfoWithSigned = "transact_info_with_signed((uint8,bytes[]))", + FeePerSecond = "fee_per_second((uint8,bytes[]))", + TransactThroughSignedMultiLocation = + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)", + TransactThroughSigned = "transact_through_signed((uint8,bytes[]),address,uint64,bytes)", +} + +/// A precompile to wrap the functionality from xcm transactor +pub struct XcmTransactorWrapper(PhantomData); + +impl pallet_evm::Precompile for XcmTransactorWrapper +where + Runtime: pallet_xcm_transactor::Config + pallet_evm::Config + frame_system::Config, + Runtime::Call: Dispatchable + GetDispatchInfo, + Runtime::Call: From>, + ::Origin: From>, + TransactorOf: TryFrom, + Runtime::AccountId: Into, + Runtime: AccountIdToCurrencyId>, +{ + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector()?; + + handle.check_function_modifier(match selector { + Action::TransactThroughDerivativeMultiLocation + | Action::TransactThroughDerivative + | Action::TransactThroughSignedMultiLocation + | Action::TransactThroughSigned => FunctionModifier::NonPayable, + _ => FunctionModifier::View, + })?; + + match selector { + // Check for accessor methods first. These return results immediately + Action::IndexToAccount => Self::account_index(handle), + // DEPRECATED + Action::TransactInfo => Self::transact_info(handle), + Action::TransactInfoWithSigned => Self::transact_info_with_signed(handle), + Action::FeePerSecond => Self::fee_per_second(handle), + Action::TransactThroughDerivativeMultiLocation => { + Self::transact_through_derivative_multilocation(handle) + } + Action::TransactThroughDerivative => Self::transact_through_derivative(handle), + Action::TransactThroughSignedMultiLocation => { + Self::transact_through_signed_multilocation(handle) + } + Action::TransactThroughSigned => Self::transact_through_signed(handle), + } + } +} + +impl XcmTransactorWrapper +where + Runtime: pallet_xcm_transactor::Config + pallet_evm::Config + frame_system::Config, + Runtime::Call: Dispatchable + GetDispatchInfo, + Runtime::Call: From>, + ::Origin: From>, + TransactorOf: TryFrom, + Runtime::AccountId: Into, + Runtime: AccountIdToCurrencyId>, +{ + fn account_index(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + + // Bound check + let mut input = handle.read_input()?; + input.expect_arguments(1)?; + let index: u16 = input.read::()?; + + // fetch data from pallet + let account: H160 = pallet_xcm_transactor::Pallet::::index_to_account(index) + .ok_or(revert("No index assigned"))? + .into(); + + Ok(succeed( + EvmDataWriter::new().write(Address(account)).build(), + )) + } + + fn transact_info(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(2 * RuntimeHelper::::db_read_gas_cost())?; + + let mut input = handle.read_input()?; + let multilocation: MultiLocation = input.read::()?; + + // fetch data from pallet + let remote_transact_info: RemoteTransactInfoWithMaxWeight = + pallet_xcm_transactor::Pallet::::transact_info(&multilocation) + .ok_or(revert("Transact Info not set"))?; + + // fetch data from pallet + let fee_per_second: u128 = + pallet_xcm_transactor::Pallet::::dest_asset_fee_per_second(&multilocation) + .ok_or(revert("Fee Per Second not set"))?; + + Ok(succeed( + EvmDataWriter::new() + .write(remote_transact_info.transact_extra_weight) + .write(fee_per_second) + .write(remote_transact_info.max_weight) + .build(), + )) + } + + fn transact_info_with_signed( + handle: &mut impl PrecompileHandle, + ) -> EvmResult { + handle.record_cost(1 * RuntimeHelper::::db_read_gas_cost())?; + + let mut input = handle.read_input()?; + let multilocation: MultiLocation = input.read::()?; + + // fetch data from pallet + let remote_transact_info: RemoteTransactInfoWithMaxWeight = + pallet_xcm_transactor::Pallet::::transact_info(multilocation) + .ok_or(revert("Transact Info not set"))?; + + let transact_extra_weight_signed = remote_transact_info + .transact_extra_weight_signed + .unwrap_or(0); + Ok(succeed( + EvmDataWriter::new() + .write(remote_transact_info.transact_extra_weight) + .write(transact_extra_weight_signed) + .write(remote_transact_info.max_weight) + .build(), + )) + } + + fn fee_per_second(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(1 * RuntimeHelper::::db_read_gas_cost())?; + let mut input = handle.read_input()?; + + let multilocation: MultiLocation = input.read::()?; + + // fetch data from pallet + let fee_per_second: u128 = + pallet_xcm_transactor::Pallet::::dest_asset_fee_per_second(multilocation) + .ok_or(revert("Fee Per Second not set"))?; + + Ok(succeed(EvmDataWriter::new().write(fee_per_second).build())) + } + + fn transact_through_derivative_multilocation( + handle: &mut impl PrecompileHandle, + ) -> EvmResult { + let mut input = handle.read_input()?; + // Bound check + input.expect_arguments(5)?; + + // Does not need DB read + let transactor: TransactorOf = input + .read::()? + .try_into() + .map_err(|_| revert("Non-existent transactor"))?; + let index: u16 = input.read::()?; + + // read fee location + // defined as a multiLocation. For now we are assuming these are concrete + // fungible assets + let fee_multilocation: MultiLocation = input.read::()?; + // read fee amount + let weight: u64 = input.read::()?; + + // inner call + let inner_call = input.read::()?; + + // Depending on the Runtime, this might involve a DB read. This is not the case in + // moonbeam, as we are using IdentityMapping + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = + pallet_xcm_transactor::Call::::transact_through_derivative_multilocation { + dest: transactor, + index, + fee_location: Box::new(xcm::VersionedMultiLocation::V1(fee_multilocation)), + dest_weight: weight, + inner_call: inner_call.0, + }; + + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; + + Ok(succeed([])) + } + + fn transact_through_derivative( + handle: &mut impl PrecompileHandle, + ) -> EvmResult { + let mut input = handle.read_input()?; + // Bound check + input.expect_arguments(5)?; + let transactor: TransactorOf = input + .read::()? + .try_into() + .map_err(|_| revert("Non-existent transactor"))?; + let index: u16 = input.read::()?; + + // read currencyId + let to_address: H160 = input.read::
()?.into(); + + // read fee amount + let weight: u64 = input.read::()?; + + // inner call + let inner_call = input.read::()?; + + let to_account = Runtime::AddressMapping::into_account_id(to_address); + + // We convert the address into a currency + // This involves a DB read in moonbeam, hence the db Read + handle.record_cost(RuntimeHelper::::db_read_gas_cost())?; + let currency_id: ::CurrencyId = + Runtime::account_to_currency_id(to_account) + .ok_or(revert("cannot convert into currency id"))?; + + // Depending on the Runtime, this might involve a DB read. This is not the case in + // moonbeam, as we are using IdentityMapping + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_xcm_transactor::Call::::transact_through_derivative { + dest: transactor, + index, + currency_id, + dest_weight: weight, + inner_call: inner_call.0, + }; + + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; + + Ok(succeed([])) + } + + fn transact_through_signed_multilocation( + handle: &mut impl PrecompileHandle, + ) -> EvmResult { + let mut input = handle.read_input()?; + + // Bound check + input.expect_arguments(4)?; + + // read destination + let dest: MultiLocation = input.read::()?; + + // read fee location + // defined as a multiLocation. For now we are assuming these are concrete + // fungible assets + let fee_multilocation: MultiLocation = input.read::()?; + // read weight amount + let weight: u64 = input.read::()?; + + // call + let call = input.read::()?; + + // Depending on the Runtime, this might involve a DB read. This is not the case in + // moonbeam, as we are using IdentityMapping + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_xcm_transactor::Call::::transact_through_signed_multilocation { + dest: Box::new(xcm::VersionedMultiLocation::V1(dest)), + fee_location: Box::new(xcm::VersionedMultiLocation::V1(fee_multilocation)), + dest_weight: weight, + call: call.0, + }; + + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; + + Ok(succeed([])) + } + + fn transact_through_signed(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_cost(1 * RuntimeHelper::::db_read_gas_cost())?; + + let mut input = handle.read_input()?; + + // Bound check + input.expect_arguments(4)?; + + // read destination + let dest: MultiLocation = input.read::()?; + + // read currencyId + let to_address: H160 = input.read::
()?.into(); + + let to_account = Runtime::AddressMapping::into_account_id(to_address); + + // We convert the address into a currency + // This involves a DB read in moonbeam, hence the db Read + + let currency_id: ::CurrencyId = + Runtime::account_to_currency_id(to_account) + .ok_or(revert("cannot convert into currency id"))?; + + // read weight amount + let weight: u64 = input.read::()?; + + // call + let call = input.read::()?; + + // Depending on the Runtime, this might involve a DB read. This is not the case in + // moonbeam, as we are using IdentityMapping + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); + let call = pallet_xcm_transactor::Call::::transact_through_signed { + dest: Box::new(xcm::VersionedMultiLocation::V1(dest)), + fee_currency_id: currency_id, + dest_weight: weight, + call: call.0, + }; + + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; + + Ok(succeed([])) + } +} diff --git a/precompiles/xcm_transactor/src/mock.rs b/precompiles/xcm-transactor/src/mock.rs similarity index 94% rename from precompiles/xcm_transactor/src/mock.rs rename to precompiles/xcm-transactor/src/mock.rs index c1d45aa771..e44321028f 100644 --- a/precompiles/xcm_transactor/src/mock.rs +++ b/precompiles/xcm-transactor/src/mock.rs @@ -18,17 +18,17 @@ use super::*; use codec::{Decode, Encode, MaxEncodedLen}; use frame_support::{ + construct_runtime, parameter_types, traits::{EnsureOrigin, Everything, OriginTrait, PalletInfo as PalletInfoTrait}, weights::{RuntimeDbWeight, Weight}, }; - -use frame_support::{construct_runtime, parameter_types}; - use pallet_evm::{ - AddressMapping, EnsureAddressNever, EnsureAddressRoot, GasWeightMapping, PrecompileSet, + AddressMapping, EnsureAddressNever, EnsureAddressRoot, GasWeightMapping, Precompile, + PrecompileSet, }; +use scale_info::TypeInfo; use serde::{Deserialize, Serialize}; -use sp_core::H256; +use sp_core::{H256, U256}; use sp_io; use sp_runtime::{ testing::Header, @@ -39,10 +39,7 @@ use xcm::latest::{ Junction::{AccountKey20, GeneralIndex, PalletInstance, Parachain}, Junctions, MultiAsset, MultiLocation, NetworkId, Result as XcmResult, SendResult, SendXcm, Xcm, }; - use xcm_builder::FixedWeightBounds; - -use scale_info::TypeInfo; use xcm_executor::{ traits::{InvertLocation, TransactAsset, WeightTrader}, Assets, @@ -67,7 +64,7 @@ construct_runtime!( Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, Evm: pallet_evm::{Pallet, Call, Storage, Event}, Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent}, - XcmTransactor: xcm_transactor::{Pallet, Call, Storage, Event}, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Storage, Event}, } ); @@ -151,7 +148,7 @@ impl sp_runtime::traits::Convert for AccountIdToMult fn convert(account: TestAccount) -> MultiLocation { let as_h160: H160 = account.into(); MultiLocation::new( - 1, + 0, Junctions::X1(AccountKey20 { network: NetworkId::Any, key: as_h160.as_fixed_bytes().clone(), @@ -232,18 +229,9 @@ impl PrecompileSet for TestPrecompiles where XcmTransactorWrapper: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == precompile_address() => Some(XcmTransactorWrapper::::execute( - input, target_gas, context, is_static, - )), + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == precompile_address() => Some(XcmTransactorWrapper::::execute(handle)), _ => None, } } @@ -258,6 +246,7 @@ pub fn precompile_address() -> H160 { } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub const PrecompilesValue: TestPrecompiles = TestPrecompiles(PhantomData); } @@ -286,10 +275,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesType = TestPrecompiles; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } parameter_types! { @@ -378,7 +366,7 @@ parameter_types! { pub MaxInstructions: u32 = 100; } -impl xcm_transactor::Config for Runtime { +impl pallet_xcm_transactor::Config for Runtime { type Event = Event; type Balance = Balance; type Transactor = MockTransactors; @@ -529,13 +517,3 @@ impl ExtBuilder { ext } } -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> evm::Context { - evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} diff --git a/precompiles/xcm-transactor/src/tests.rs b/precompiles/xcm-transactor/src/tests.rs new file mode 100644 index 0000000000..fadfb44238 --- /dev/null +++ b/precompiles/xcm-transactor/src/tests.rs @@ -0,0 +1,396 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . +use crate::mock::{ + ExtBuilder, Origin, PrecompilesValue, Runtime, TestAccount::*, TestPrecompiles, XcmTransactor, +}; +use crate::Action; + +use frame_support::assert_ok; +use precompile_utils::{prelude::*, testing::*}; +use sp_core::{H160, U256}; +use sp_std::boxed::Box; +use xcm::v1::MultiLocation; + +fn precompiles() -> TestPrecompiles { + PrecompilesValue::get() +} + +#[test] +fn test_selector_enum() { + assert_eq!(Action::IndexToAccount as u32, 0x71b0edfa); + assert_eq!(Action::TransactInfo as u32, 0xf87f493f); + assert_eq!( + Action::TransactThroughDerivativeMultiLocation as u32, + 0x9f89f03e + ); + assert_eq!(Action::TransactThroughDerivative as u32, 0x267d4062); +} + +#[test] +fn selector_less_than_four_bytes() { + ExtBuilder::default().build().execute_with(|| { + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8]) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); + }); +} + +#[test] +fn no_selector_exists_but_length_is_right() { + ExtBuilder::default().build().execute_with(|| { + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8, 4u8]) + .execute_reverts(|output| output == b"unknown selector"); + }); +} + +#[test] +fn take_index_for_account() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let input = EvmDataWriter::new_with_selector(Action::IndexToAccount) + .write(0u16) + .build(); + + // Assert that errors since no index is assigned + precompiles() + .prepare_test(Alice, Precompile, input.clone()) + .execute_reverts(|output| output == b"No index assigned"); + + // register index + assert_ok!(XcmTransactor::register(Origin::root(), Alice.into(), 0)); + + // Expected result is zero + precompiles() + .prepare_test(Alice, Precompile, input) + .expect_cost(1) + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(Address(H160::from(Alice))) + .build(), + ); + }); +} + +#[test] +fn take_transact_info() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let input = EvmDataWriter::new_with_selector(Action::TransactInfo) + .write(MultiLocation::parent()) + .build(); + + // Assert that errors since no index is assigned + precompiles() + .prepare_test(Alice, Precompile, input.clone()) + .execute_reverts(|output| output == b"Transact Info not set"); + + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000u64, + None + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + precompiles() + .prepare_test(Alice, Precompile, input) + .expect_cost(2) + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(0u64) + .write(1u128) + .write(10000u64) + .build(), + ); + }); +} +#[test] +fn take_transact_info_with_signed() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let input = EvmDataWriter::new_with_selector(Action::TransactInfoWithSigned) + .write(MultiLocation::parent()) + .build(); + + // Assert that errors since no index is assigned + precompiles() + .prepare_test(Alice, Precompile, input.clone()) + .execute_reverts(|output| output == b"Transact Info not set"); + + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000u64, + Some(1) + )); + + // Root can set fee per second + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + precompiles() + .prepare_test(Alice, Precompile, input) + .expect_cost(1) + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(0u64) + .write(1u128) + .write(10000u64) + .build(), + ); + }); +} + +#[test] +fn take_fee_per_second() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + let input = EvmDataWriter::new_with_selector(Action::FeePerSecond) + .write(MultiLocation::parent()) + .build(); + + // Assert that errors + precompiles() + .prepare_test(Alice, Precompile, input.clone()) + .execute_reverts(|output| output == b"Fee Per Second not set"); + + // Root can set fee per secnd + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + precompiles() + .prepare_test(Alice, Precompile, input) + .expect_cost(1) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(1u64).build()); + }); +} + +#[test] +fn test_transactor_multilocation() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + // register index + assert_ok!(XcmTransactor::register(Origin::root(), Alice.into(), 0)); + + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000000, + None + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + // we pay with our current self reserve. + let fee_payer_asset = MultiLocation::parent(); + + let bytes = Bytes(vec![1u8, 2u8, 3u8]); + + // We are transferring asset 0, which we have instructed to be the relay asset + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector( + Action::TransactThroughDerivativeMultiLocation, + ) + .write(0u8) + .write(0u16) + .write(fee_payer_asset) + .write(U256::from(4000000)) + .write(bytes) + .build(), + ) + .expect_cost(4004000) + .expect_no_logs() + .execute_returns(vec![]); + }); +} + +#[test] +fn test_transactor() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + // register index + assert_ok!(XcmTransactor::register(Origin::root(), Alice.into(), 0)); + + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000000, + None + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + let bytes = Bytes(vec![1u8, 2u8, 3u8]); + + // We are transferring asset 0, which we have instructed to be the relay asset + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransactThroughDerivative) + .write(0u8) + .write(0u16) + .write(Address(AssetId(0).into())) + .write(U256::from(4000000)) + .write(bytes) + .build(), + ) + .expect_cost(4004001) + .expect_no_logs() + .execute_returns(vec![]); + }); +} + +#[test] +fn test_transact_signed() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000000, + Some(1) + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + // Destination + let dest = MultiLocation::parent(); + + let bytes: Bytes = vec![1u8, 2u8, 3u8].as_slice().into(); + + // We are transferring asset 0, which we have instructed to be the relay asset + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransactThroughSigned) + .write(dest) + .write(Address(AssetId(0).into())) + .write(U256::from(4000000)) + .write(bytes) + .build(), + ) + .expect_cost(428130001) + .expect_no_logs() + .execute_returns(vec![]); + }); +} + +#[test] +fn test_transact_signed_multilocation() { + ExtBuilder::default() + .with_balances(vec![(Alice, 1000)]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 0, + 10000000, + Some(1) + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + // Destination + let dest = MultiLocation::parent(); + + let fee_payer_asset = MultiLocation::parent(); + + let bytes: Bytes = vec![1u8, 2u8, 3u8].as_slice().into(); + + // We are transferring asset 0, which we have instructed to be the relay asset + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransactThroughSignedMultiLocation) + .write(dest) + .write(fee_payer_asset) + .write(U256::from(4000000)) + .write(bytes) + .build(), + ) + .expect_cost(428130000) + .expect_no_logs() + .execute_returns(vec![]); + }); +} diff --git a/precompiles/xcm_transactor/Cargo.toml b/precompiles/xcm_transactor/Cargo.toml deleted file mode 100644 index ffe67c3bd2..0000000000 --- a/precompiles/xcm_transactor/Cargo.toml +++ /dev/null @@ -1,71 +0,0 @@ -[package] -name = "xcm-transactor-precompiles" -authors = [ "PureStake" ] -description = "A Precompile to make xcm-transactor accessible to pallet-evm" -edition = "2021" -version = "0.1.0" - -[dependencies] -log = "0.4" -num_enum = { version = "0.5.3", default-features = false } -rustc-hex = { version = "2.0.1", default-features = false } - -# Moonbeam -precompile-utils = { path = "../utils", default-features = false } -xcm-primitives = { path = "../../primitives/xcm/", default-features = false } -xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } - -# Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } - -# Frontier -evm = { version = "0.35.0", default-features = false, features = [ "with-codec" ] } -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } - -# Polkadot -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } - -[dev-dependencies] -derive_more = "0.99" -serde = "1.0.100" -sha3 = "0.9" - -# Moonbeam -xcm-primitives = { path = "../../primitives/xcm/" } - -# Substrate -codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } - -# Cumulus -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } - -# Polkadot -pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } - -# ORML -orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19" } - -[features] -default = [ "std" ] -std = [ - "evm/std", - "frame-support/std", - "frame-system/std", - "pallet-evm/std", - "precompile-utils/std", - "sp-core/std", - "sp-std/std", - "xcm-primitives/std", - "xcm-transactor/std", -] diff --git a/precompiles/xcm_transactor/XcmTransactor.sol b/precompiles/xcm_transactor/XcmTransactor.sol deleted file mode 100644 index bf4972303e..0000000000 --- a/precompiles/xcm_transactor/XcmTransactor.sol +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.0; - -/** - * @title Xcm Transactor Interface - * The interface through which solidity contracts will interact with xcm transactor pallet - * Address : 0x0000000000000000000000000000000000000806 - */ - -interface XcmTransactor { - - // A multilocation is defined by its number of parents and the encoded junctions (interior) - struct Multilocation { - uint8 parents; - bytes [] interior; - } - - /** Get index of an account in xcm transactor - * Selector 71b0edfa - * @param index The index of which we want to retrieve the account - */ - function index_to_account(uint16 index) external view returns(address); - - /** Get transact info of a multilocation - * Selector f87f493f - * @param index The index of which we want to retrieve the account - */ - function transact_info(Multilocation memory multilocation) external view - returns(uint64, uint256, uint64, uint64, uint256); - - /** Transact through XCM using fee based on its multilocation - * Selector 9f89f03e - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param transactor The transactor to be used - * @param index The index to be used - * @param fee_asset The asset in which we want to pay fees. - * It has to be a reserve of the destination chain - * @param weight The weight we want to buy in the destination chain - * @param inner_call The inner call to be executed in the destination chain - */ - function transact_through_derivative_multilocation( - uint8 transactor, - uint16 index, - Multilocation memory fee_asset, - uint64 weight, - bytes memory inner_call - ) external; - - /** Transact through XCM using fee based on its currency_id - * Selector 267d4062 - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param transactor The transactor to be used - * @param index The index to be used - * @param currency_id Address of the currencyId of the asset to be used for fees - * It has to be a reserve of the destination chain - * @param weight The weight we want to buy in the destination chain - * @param inner_call The inner call to be executed in the destination chain - */ - function transact_through_derivative( - uint8 transactor, - uint16 index, - address currency_id, - uint64 weight, - bytes memory inner_call - ) external; - -} \ No newline at end of file diff --git a/precompiles/xcm_transactor/src/lib.rs b/precompiles/xcm_transactor/src/lib.rs deleted file mode 100644 index 527076172c..0000000000 --- a/precompiles/xcm_transactor/src/lib.rs +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . - -//! Precompile to xcm transactor runtime methods via the EVM - -#![cfg_attr(not(feature = "std"), no_std)] -#![feature(assert_matches)] - -use evm::{executor::stack::PrecompileOutput, Context, ExitSucceed}; -use frame_support::dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}; -use pallet_evm::{AddressMapping, Precompile}; -use precompile_utils::{ - Address, Bytes, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, Gasometer, - RuntimeHelper, -}; - -use sp_core::H160; -use sp_std::{ - boxed::Box, - convert::{TryFrom, TryInto}, - fmt::Debug, - marker::PhantomData, -}; -use xcm::latest::MultiLocation; -use xcm_primitives::AccountIdToCurrencyId; -use xcm_transactor::RemoteTransactInfoWithMaxWeight; -#[cfg(test)] -mod mock; -#[cfg(test)] -mod tests; - -pub type TransactorOf = ::Transactor; - -pub type CurrencyIdOf = ::CurrencyId; - -#[precompile_utils::generate_function_selector] -#[derive(Debug, PartialEq)] -pub enum Action { - IndexToAccount = "index_to_account(uint16)", - TransactInfo = "transact_info((uint8,bytes[]))", - TransactThroughDerivativeMultiLocation = - "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)", - TransactThroughDerivative = "transact_through_derivative(uint8,uint16,address,uint64,bytes)", -} - -/// A precompile to wrap the functionality from xcm transactor -pub struct XcmTransactorWrapper(PhantomData); - -impl Precompile for XcmTransactorWrapper -where - Runtime: xcm_transactor::Config + pallet_evm::Config + frame_system::Config, - Runtime::Call: Dispatchable + GetDispatchInfo, - Runtime::Call: From>, - ::Origin: From>, - TransactorOf: TryFrom, - Runtime::AccountId: Into, - Runtime: AccountIdToCurrencyId>, -{ - fn execute( - input: &[u8], //Reminder this is big-endian - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; - let (mut input, selector) = EvmDataReader::new_with_selector(gasometer, input)?; - let input = &mut input; - - gasometer.check_function_modifier( - context, - is_static, - match selector { - Action::TransactThroughDerivativeMultiLocation - | Action::TransactThroughDerivative => FunctionModifier::NonPayable, - _ => FunctionModifier::View, - }, - )?; - - match selector { - // Check for accessor methods first. These return results immediately - Action::IndexToAccount => Self::account_index(input, gasometer), - Action::TransactInfo => Self::transact_info(input, gasometer), - Action::TransactThroughDerivativeMultiLocation => { - Self::transact_through_derivative_multilocation(input, gasometer, context) - } - Action::TransactThroughDerivative => { - Self::transact_through_derivative(input, gasometer, context) - } - } - } -} - -impl XcmTransactorWrapper -where - Runtime: xcm_transactor::Config + pallet_evm::Config + frame_system::Config, - Runtime::Call: Dispatchable + GetDispatchInfo, - Runtime::Call: From>, - ::Origin: From>, - TransactorOf: TryFrom, - Runtime::AccountId: Into, - Runtime: AccountIdToCurrencyId>, -{ - fn account_index( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - - // Bound check - input.expect_arguments(gasometer, 1)?; - let index: u16 = input.read::(gasometer)?; - - // fetch data from pallet - let account: H160 = xcm_transactor::Pallet::::index_to_account(index) - .ok_or(gasometer.revert("No index assigned"))? - .into(); - - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new().write(Address(account)).build(), - logs: Default::default(), - }) - } - - fn transact_info( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - ) -> EvmResult { - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - - let multilocation: MultiLocation = input.read::(gasometer)?; - - // fetch data from pallet - let remote_transact_info: RemoteTransactInfoWithMaxWeight = - xcm_transactor::Pallet::::transact_info(multilocation) - .ok_or(gasometer.revert("Transact Info not set"))?; - - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: EvmDataWriter::new() - .write(remote_transact_info.transact_extra_weight) - .write(remote_transact_info.fee_per_second) - .write(remote_transact_info.max_weight) - .build(), - logs: Default::default(), - }) - } - - fn transact_through_derivative_multilocation( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - // Bound check - input.expect_arguments(gasometer, 5)?; - - // Does not need DB read - let transactor: TransactorOf = input - .read::(gasometer)? - .try_into() - .map_err(|_| gasometer.revert("Non-existent transactor"))?; - let index: u16 = input.read::(gasometer)?; - - // read fee location - // defined as a multiLocation. For now we are assuming these are concrete - // fungible assets - let fee_multilocation: MultiLocation = input.read::(gasometer)?; - // read fee amount - let weight: u64 = input.read::(gasometer)?; - - // inner call - let inner_call = input.read::(gasometer)?; - - // Depending on the Runtime, this might involve a DB read. This is not the case in - // moonbeam, as we are using IdentityMapping - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = xcm_transactor::Call::::transact_through_derivative_multilocation { - dest: transactor, - index, - fee_location: Box::new(xcm::VersionedMultiLocation::V1(fee_multilocation)), - dest_weight: weight, - inner_call: inner_call.0, - }; - - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; - - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) - } - - fn transact_through_derivative( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - // Bound check - input.expect_arguments(gasometer, 5)?; - let transactor: TransactorOf = input - .read::(gasometer)? - .try_into() - .map_err(|_| gasometer.revert("Non-existent transactor"))?; - let index: u16 = input.read::(gasometer)?; - - // read currencyId - let to_address: H160 = input.read::
(gasometer)?.into(); - - let to_account = Runtime::AddressMapping::into_account_id(to_address); - - // We convert the address into a currency - // This involves a DB read in moonbeam, hence the db Read - gasometer.record_cost(RuntimeHelper::::db_read_gas_cost())?; - let currency_id: ::CurrencyId = - Runtime::account_to_currency_id(to_account) - .ok_or(gasometer.revert("cannot convert into currency id"))?; - - // read fee amount - let weight: u64 = input.read::(gasometer)?; - - // inner call - let inner_call = input.read::(gasometer)?; - - // Depending on the Runtime, this might involve a DB read. This is not the case in - // moonbeam, as we are using IdentityMapping - let origin = Runtime::AddressMapping::into_account_id(context.caller); - let call = xcm_transactor::Call::::transact_through_derivative { - dest: transactor, - index, - currency_id, - dest_weight: weight, - inner_call: inner_call.0, - }; - - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; - - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) - } -} diff --git a/precompiles/xcm_transactor/src/tests.rs b/precompiles/xcm_transactor/src/tests.rs deleted file mode 100644 index 5c859bd6a8..0000000000 --- a/precompiles/xcm_transactor/src/tests.rs +++ /dev/null @@ -1,292 +0,0 @@ -// Copyright 2019-2022 PureStake Inc. -// This file is part of Moonbeam. - -// Moonbeam is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Moonbeam is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Moonbeam. If not, see . -use crate::mock::{ - evm_test_context, ExtBuilder, Origin, PrecompilesValue, Runtime, TestAccount::*, - TestPrecompiles, XcmTransactor, -}; -use crate::{Action, PrecompileOutput}; - -use fp_evm::PrecompileFailure; -use frame_support::assert_ok; -use num_enum::TryFromPrimitive; -use pallet_evm::{ExitSucceed, PrecompileSet}; -use precompile_utils::{Address, Bytes, EvmDataWriter}; -use sha3::{Digest, Keccak256}; -use sp_core::{H160, U256}; -use sp_std::boxed::Box; -use std::assert_matches::assert_matches; -use xcm::v1::MultiLocation; - -fn precompiles() -> TestPrecompiles { - PrecompilesValue::get() -} - -#[test] -fn test_selector_enum() { - let mut buffer = [0u8; 4]; - buffer.copy_from_slice(&Keccak256::digest(b"index_to_account(uint16)")[0..4]); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::IndexToAccount, - ); - - buffer.copy_from_slice(&Keccak256::digest(b"transact_info((uint8,bytes[]))")[0..4]); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::TransactInfo, - ); - buffer.copy_from_slice( - &Keccak256::digest( - b"transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)", - )[0..4], - ); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::TransactThroughDerivativeMultiLocation, - ); - - buffer.copy_from_slice( - &Keccak256::digest(b"transact_through_derivative(uint8,uint16,address,uint64,bytes)")[0..4], - ); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::TransactThroughDerivative, - ); -} - -#[test] -fn selector_less_than_four_bytes() { - ExtBuilder::default().build().execute_with(|| { - // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - Precompile.into(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"tried to parse selector out of bounds", - ); - }); -} - -#[test] -fn no_selector_exists_but_length_is_right() { - ExtBuilder::default().build().execute_with(|| { - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - - assert_matches!( - precompiles().execute( - Precompile.into(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"unknown selector", - ); - }); -} - -#[test] -fn take_index_for_account() { - ExtBuilder::default() - .with_balances(vec![(Alice, 1000)]) - .build() - .execute_with(|| { - let input = EvmDataWriter::new_with_selector(Action::IndexToAccount) - .write(0u16) - .build(); - - // Assert that errors since no index is assigned - assert_matches!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"No index assigned" - ); - - // register index - assert_ok!(XcmTransactor::register(Origin::root(), Alice.into(), 0)); - - // Expected result is zero - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new() - .write(Address(H160::from(Alice))) - .build(), - cost: 1, - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - expected_result - ); - }); -} - -#[test] -fn take_transact_info() { - ExtBuilder::default() - .with_balances(vec![(Alice, 1000)]) - .build() - .execute_with(|| { - let input = EvmDataWriter::new_with_selector(Action::TransactInfo) - .write(MultiLocation::parent()) - .build(); - - // Assert that errors since no index is assigned - assert_matches!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"Transact Info not set" - ); - - // Root can set transact info - assert_ok!(XcmTransactor::set_transact_info( - Origin::root(), - Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), - 0, - 1, - 10000, - )); - - // Expected result is zero - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new() - .write(0u64) - .write(1u128) - .write(10000u64) - .build(), - cost: 1, - logs: Default::default(), - })); - - assert_eq!( - precompiles().execute(Precompile.into(), &input, None, &evm_test_context(), false), - expected_result - ); - }); -} - -#[test] -fn test_transactor_multilocation() { - ExtBuilder::default() - .with_balances(vec![(Alice, 1000)]) - .build() - .execute_with(|| { - // register index - assert_ok!(XcmTransactor::register(Origin::root(), Alice.into(), 0)); - - // Root can set transact info - assert_ok!(XcmTransactor::set_transact_info( - Origin::root(), - Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), - 0, - 1, - 10000000 - )); - - // we pay with our current self reserve. - let fee_payer_asset = MultiLocation::parent(); - - let bytes: Bytes = vec![1u8, 2u8, 3u8].as_slice().into(); - - // We are transferring asset 0, which we have instructed to be the relay asset - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector( - Action::TransactThroughDerivativeMultiLocation - ) - .write(0u8) - .write(0u16) - .write(fee_payer_asset) - .write(U256::from(4000000)) - .write(bytes) - .build(), - None, - &evm::Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 4004000, - output: vec![], - logs: vec![] - })) - ); - }); -} - -#[test] -fn test_transactor() { - ExtBuilder::default() - .with_balances(vec![(Alice, 1000)]) - .build() - .execute_with(|| { - // register index - assert_ok!(XcmTransactor::register(Origin::root(), Alice.into(), 0)); - - // Root can set transact info - assert_ok!(XcmTransactor::set_transact_info( - Origin::root(), - Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), - 0, - 1, - 10000000 - )); - - let bytes: Bytes = vec![1u8, 2u8, 3u8].as_slice().into(); - - // We are transferring asset 0, which we have instructed to be the relay asset - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransactThroughDerivative) - .write(0u8) - .write(0u16) - .write(Address(AssetId(0).into())) - .write(U256::from(4000000)) - .write(bytes) - .build(), - None, - &evm::Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 4004001, - output: vec![], - logs: vec![] - })) - ); - }); -} diff --git a/precompiles/xtokens/Cargo.toml b/precompiles/xtokens/Cargo.toml index 59dfe2cc9f..fb8c71d721 100644 --- a/precompiles/xtokens/Cargo.toml +++ b/precompiles/xtokens/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "xtokens-precompiles" +name = "pallet-evm-precompile-xtokens" authors = [ "PureStake" ] description = "A Precompile to make xtokens accessible to pallet-evm" edition = "2021" @@ -15,40 +15,43 @@ precompile-utils = { path = "../utils", default-features = false } xcm-primitives = { path = "../../primitives/xcm/", default-features = false } # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Polkadot / XCM -orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] derive_more = "0.99" serde = "1.0.100" sha3 = "0.9" +# Moonbeam +precompile-utils = { path = "../utils", features = [ "testing" ] } + # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [ "max-encoded-len" ] } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } scale-info = { version = "2.0", features = [ "derive" ] } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } # Cumulus -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19" } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23" } # Polkadot -orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19" } -pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23" } +pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } [features] default = [ "std" ] diff --git a/precompiles/xtokens/Xtokens.sol b/precompiles/xtokens/Xtokens.sol index bdc83346f6..93fbd4ce5b 100644 --- a/precompiles/xtokens/Xtokens.sol +++ b/precompiles/xtokens/Xtokens.sol @@ -11,7 +11,7 @@ interface Xtokens { // A multilocation is defined by its number of parents and the encoded junctions (interior) struct Multilocation { uint8 parents; - bytes [] interior; + bytes[] interior; } // A MultiAsset is defined by a multilocation and an amount @@ -27,13 +27,14 @@ interface Xtokens { } /** Transfer a token through XCM based on its currencyId - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param currency_address The ERC20 address of the currency we want to transfer - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ + * + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param currency_address The ERC20 address of the currency we want to transfer + * @param amount The amount of tokens we want to transfer + * @param destination The Multilocation to which we want to send the tokens + * @param destination The weight we want to buy in the destination chain + * Selector: b9f813ff + */ function transfer( address currency_address, uint256 amount, @@ -42,13 +43,13 @@ interface Xtokens { ) external; /** Transfer a token through XCM based on its currencyId specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param currency_address The ERC20 address of the currency we want to transfer - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ + * + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param currency_address The ERC20 address of the currency we want to transfer + * @param amount The amount of tokens we want to transfer + * @param destination The Multilocation to which we want to send the tokens + * @param destination The weight we want to buy in the destination chain + */ function transfer_with_fee( address currency_address, uint256 amount, @@ -58,42 +59,49 @@ interface Xtokens { ) external; /** Transfer a token through XCM based on its MultiLocation - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param asset The asset we want to transfer, defined by its multilocation. - * Currently only Concrete Fungible assets - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ + * + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param asset The asset we want to transfer, defined by its multilocation. + * Currently only Concrete Fungible assets + * @param amount The amount of tokens we want to transfer + * @param destination The Multilocation to which we want to send the tokens + * @param destination The weight we want to buy in the destination chain + * Selector: b38c60fa + */ function transfer_multiasset( Multilocation memory asset, uint256 amount, - Multilocation memory destination, uint64 weight) external; - + Multilocation memory destination, + uint64 weight + ) external; + /** Transfer a token through XCM based on its MultiLocation specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param asset The asset we want to transfer, defined by its multilocation. - * Currently only Concrete Fungible assets - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ + * + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param asset The asset we want to transfer, defined by its multilocation. + * Currently only Concrete Fungible assets + * @param amount The amount of tokens we want to transfer + * @param destination The Multilocation to which we want to send the tokens + * @param destination The weight we want to buy in the destination chain + * Selector: 89a570fc + */ function transfer_multiasset_with_fee( Multilocation memory asset, uint256 amount, uint256 fee, - Multilocation memory destination, uint64 weight) external; + Multilocation memory destination, + uint64 weight + ) external; /** Transfer several tokens at once through XCM based on its address specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param currencies The currencies we want to transfer, defined by their address and amount. - * @param fee_item Which of the currencies to be used as fee - * @param destination The Multilocation to which we want to send the tokens - * @param weight The weight we want to buy in the destination chain - */ + * + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param currencies The currencies we want to transfer, defined by their address and amount. + * @param fee_item Which of the currencies to be used as fee + * @param destination The Multilocation to which we want to send the tokens + * @param weight The weight we want to buy in the destination chain + * Selector: 8a362d5c + */ function transfer_multi_currencies( Currency[] memory currencies, uint32 fee_item, @@ -102,13 +110,14 @@ interface Xtokens { ) external; /** Transfer several tokens at once through XCM based on its location specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param assets The assets we want to transfer, defined by their location and amount. - * @param fee_item Which of the currencies to be used as fee - * @param destination The Multilocation to which we want to send the tokens - * @param weight The weight we want to buy in the destination chain - */ + * + * @dev The token transfer burns/transfers the corresponding amount before sending + * @param assets The assets we want to transfer, defined by their location and amount. + * @param fee_item Which of the currencies to be used as fee + * @param destination The Multilocation to which we want to send the tokens + * @param weight The weight we want to buy in the destination chain + * Selector: b38c60fa + */ function transfer_multi_assets( MultiAsset[] memory assets, uint32 fee_item, diff --git a/precompiles/xtokens/src/lib.rs b/precompiles/xtokens/src/lib.rs index 61605dd113..b932f34cbe 100644 --- a/precompiles/xtokens/src/lib.rs +++ b/precompiles/xtokens/src/lib.rs @@ -19,28 +19,26 @@ #![cfg_attr(not(feature = "std"), no_std)] #![feature(assert_matches)] -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::{PrecompileHandle, PrecompileOutput}; use frame_support::{ dispatch::{Dispatchable, GetDispatchInfo, PostDispatchInfo}, ensure, traits::Get, }; use pallet_evm::{AddressMapping, Precompile}; -use precompile_utils::{ - Address, EvmData, EvmDataReader, EvmDataWriter, EvmResult, FunctionModifier, Gasometer, - RuntimeHelper, -}; - +use precompile_utils::prelude::*; use sp_core::{H160, U256}; -use sp_std::boxed::Box; use sp_std::{ + boxed::Box, convert::{TryFrom, TryInto}, fmt::Debug, marker::PhantomData, vec::Vec, }; -use xcm::latest::{AssetId, Fungibility, MultiAsset, MultiAssets, MultiLocation}; -use xcm::{VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation}; +use xcm::{ + latest::{AssetId, Fungibility, MultiAsset, MultiAssets, MultiLocation}, + VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, +}; use xcm_primitives::AccountIdToCurrencyId; #[cfg(test)] @@ -53,7 +51,7 @@ pub type MaxAssetsForTransfer = ::MaxA pub type CurrencyIdOf = ::CurrencyId; -#[precompile_utils::generate_function_selector] +#[generate_function_selector] #[derive(Debug, PartialEq)] pub enum Action { Transfer = "transfer(address,uint256,(uint8,bytes[]),uint64)", @@ -80,31 +78,18 @@ where XBalanceOf: TryFrom + Into + EvmData, Runtime: AccountIdToCurrencyId>, { - fn execute( - input: &[u8], //Reminder this is big-endian - target_gas: Option, - context: &Context, - is_static: bool, - ) -> EvmResult { - let mut gasometer = Gasometer::new(target_gas); - let gasometer = &mut gasometer; - - let (mut input, selector) = EvmDataReader::new_with_selector(gasometer, input)?; - let input = &mut input; + fn execute(handle: &mut impl PrecompileHandle) -> EvmResult { + let selector = handle.read_selector()?; - gasometer.check_function_modifier(context, is_static, FunctionModifier::NonPayable)?; + handle.check_function_modifier(FunctionModifier::NonPayable)?; match selector { - Action::Transfer => Self::transfer(input, gasometer, context), - Action::TransferWithFee => Self::transfer_with_fee(input, gasometer, context), - Action::TransferMultiAsset => Self::transfer_multiasset(input, gasometer, context), - Action::TransferMultiAssetWithFee => { - Self::transfer_multiasset_with_fee(input, gasometer, context) - } - Action::TransferMultiCurrencies => { - Self::transfer_multi_currencies(input, gasometer, context) - } - Action::TransferMultiAssets => Self::transfer_multi_assets(input, gasometer, context), + Action::Transfer => Self::transfer(handle), + Action::TransferWithFee => Self::transfer_with_fee(handle), + Action::TransferMultiAsset => Self::transfer_multiasset(handle), + Action::TransferMultiAssetWithFee => Self::transfer_multiasset_with_fee(handle), + Action::TransferMultiCurrencies => Self::transfer_multi_currencies(handle), + Action::TransferMultiAssets => Self::transfer_multi_assets(handle), } } } @@ -118,34 +103,32 @@ where XBalanceOf: TryFrom + Into + EvmData, Runtime: AccountIdToCurrencyId>, { - fn transfer( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn transfer(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + // Bound check - input.expect_arguments(gasometer, 2)?; - let to_address: H160 = input.read::
(gasometer)?.into(); - let amount: U256 = input.read(gasometer)?; + input.expect_arguments(2)?; + let to_address: H160 = input.read::
()?.into(); + let amount: U256 = input.read()?; // We use the MultiLocation, which we have instructed how to read // In the end we are using the encoding - let destination: MultiLocation = input.read::(gasometer)?; + let destination: MultiLocation = input.read::()?; // Bound check - input.expect_arguments(gasometer, 1)?; - let dest_weight: u64 = input.read::(gasometer)?; + input.expect_arguments(1)?; + let dest_weight: u64 = input.read::()?; let to_account = Runtime::AddressMapping::into_account_id(to_address); // We convert the address into a currency id xtokens understands let currency_id: ::CurrencyId = Runtime::account_to_currency_id(to_account) - .ok_or(gasometer.revert("cannot convert into currency id"))?; + .ok_or(revert("cannot convert into currency id"))?; - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let amount = amount .try_into() - .map_err(|_| gasometer.revert("Amount is too large for provided balance type"))?; + .map_err(|_| revert("Amount is too large for provided balance type"))?; let call = orml_xtokens::Call::::transfer { currency_id, @@ -154,50 +137,42 @@ where dest_weight, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn transfer_with_fee( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - input.expect_arguments(gasometer, 5)?; + fn transfer_with_fee(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + input.expect_arguments(5)?; - let to_address: H160 = input.read::
(gasometer)?.into(); - let amount: U256 = input.read(gasometer)?; - let fee: U256 = input.read(gasometer)?; + let to_address: H160 = input.read::
()?.into(); + let amount: U256 = input.read()?; + let fee: U256 = input.read()?; // We use the MultiLocation, which we have instructed how to read // In the end we are using the encoding - let destination: MultiLocation = input.read::(gasometer)?; + let destination: MultiLocation = input.read::()?; - let dest_weight: u64 = input.read::(gasometer)?; + let dest_weight: u64 = input.read::()?; let to_account = Runtime::AddressMapping::into_account_id(to_address); // We convert the address into a currency id xtokens understands let currency_id: ::CurrencyId = Runtime::account_to_currency_id(to_account) - .ok_or(gasometer.revert("cannot convert into currency id"))?; + .ok_or(revert("cannot convert into currency id"))?; - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); // Transferred amount let amount = amount .try_into() - .map_err(|_| gasometer.revert("Amount is too large for provided balance type"))?; + .map_err(|_| revert("Amount is too large for provided balance type"))?; // Fee amount let fee = fee .try_into() - .map_err(|_| gasometer.revert("Amount is too large for provided balance type"))?; + .map_err(|_| revert("Amount is too large for provided balance type"))?; let call = orml_xtokens::Call::::transfer_with_fee { currency_id, @@ -207,39 +182,31 @@ where dest_weight, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn transfer_multiasset( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { + fn transfer_multiasset(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; // asset is defined as a multiLocation. For now we are assuming these are concrete // fungible assets - let asset_multilocation: MultiLocation = input.read::(gasometer)?; + let asset_multilocation: MultiLocation = input.read::()?; // Bound check - input.expect_arguments(gasometer, 1)?; - let amount: U256 = input.read(gasometer)?; + input.expect_arguments(1)?; + let amount: U256 = input.read()?; // read destination - let destination: MultiLocation = input.read::(gasometer)?; + let destination: MultiLocation = input.read::()?; // Bound check - input.expect_arguments(gasometer, 1)?; - let dest_weight: u64 = input.read::(gasometer)?; + input.expect_arguments(1)?; + let dest_weight: u64 = input.read::()?; - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let to_balance = amount .try_into() - .map_err(|_| gasometer.revert("Amount is too large for provided balance type"))?; + .map_err(|_| revert("Amount is too large for provided balance type"))?; let call = orml_xtokens::Call::::transfer_multiasset { asset: Box::new(VersionedMultiAsset::V1(MultiAsset { @@ -250,41 +217,35 @@ where dest_weight, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } fn transfer_multiasset_with_fee( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - input.expect_arguments(gasometer, 5)?; + let mut input = handle.read_input()?; + input.expect_arguments(5)?; // asset is defined as a multiLocation. For now we are assuming these are concrete // fungible assets - let asset_multilocation: MultiLocation = input.read::(gasometer)?; - let amount: U256 = input.read(gasometer)?; - let fee: U256 = input.read(gasometer)?; + let asset_multilocation: MultiLocation = input.read::()?; + let amount: U256 = input.read()?; + let fee: U256 = input.read()?; // read destination - let destination: MultiLocation = input.read::(gasometer)?; + let destination: MultiLocation = input.read::()?; - let dest_weight: u64 = input.read::(gasometer)?; + let dest_weight: u64 = input.read::()?; - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let amount = amount .try_into() - .map_err(|_| gasometer.revert("Amount is too large for provided balance type"))?; + .map_err(|_| revert("Amount is too large for provided balance type"))?; let fee = fee .try_into() - .map_err(|_| gasometer.revert("Amount is too large for provided balance type"))?; + .map_err(|_| revert("Amount is too large for provided balance type"))?; let call = orml_xtokens::Call::::transfer_multiasset_with_fee { asset: Box::new(VersionedMultiAsset::V1(MultiAsset { @@ -299,40 +260,34 @@ where dest_weight, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } fn transfer_multi_currencies( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, + handle: &mut impl PrecompileHandle, ) -> EvmResult { - input.expect_arguments(gasometer, 4)?; - let non_mapped_currencies: Vec = input.read::>(gasometer)?; + let mut input = handle.read_input()?; + input.expect_arguments(4)?; + let non_mapped_currencies: Vec = input.read::>()?; let max_assets = MaxAssetsForTransfer::::get(); // We check this here so that we avoid iterating over the vec // if the len is more than the max permitted ensure!( max_assets >= non_mapped_currencies.len(), - gasometer.revert("More than max number of assets given") + revert("More than max number of assets given") ); - let fee_item: u32 = input.read::(gasometer)?; + let fee_item: u32 = input.read::()?; // read destination - let destination: MultiLocation = input.read::(gasometer)?; + let destination: MultiLocation = input.read::()?; - let dest_weight: u64 = input.read::(gasometer)?; + let dest_weight: u64 = input.read::()?; - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); // Build all currencies let currencies: EvmResult< @@ -344,15 +299,17 @@ where .iter() .map(|currency| { let address_as_h160: H160 = currency.address.clone().into(); - let amount = currency.amount.clone().try_into().map_err(|_| { - gasometer.revert("Amount is too large for provided balance type") - })?; + let amount = currency + .amount + .clone() + .try_into() + .map_err(|_| revert("Amount is too large for provided balance type"))?; Ok(( Runtime::account_to_currency_id(Runtime::AddressMapping::into_account_id( address_as_h160, )) - .ok_or(gasometer.revert("cannot convert into currency id"))?, + .ok_or(revert("cannot convert into currency id"))?, amount, )) }) @@ -367,47 +324,41 @@ where dest_weight, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } - fn transfer_multi_assets( - input: &mut EvmDataReader, - gasometer: &mut Gasometer, - context: &Context, - ) -> EvmResult { - input.expect_arguments(gasometer, 4)?; - let assets: Vec = input.read::>(gasometer)?; + fn transfer_multi_assets(handle: &mut impl PrecompileHandle) -> EvmResult { + let mut input = handle.read_input()?; + input.expect_arguments(4)?; + let assets: Vec = input.read::>()?; let max_assets = MaxAssetsForTransfer::::get(); // We check this here so that we avoid iterating over the vec // if the len is more than the max permitted ensure!( max_assets >= assets.len(), - gasometer.revert("More than max number of assets given") + revert("More than max number of assets given") ); - let fee_item: u32 = input.read::(gasometer)?; + let fee_item: u32 = input.read::()?; // read destination - let destination: MultiLocation = input.read::(gasometer)?; + let destination: MultiLocation = input.read::()?; - let dest_weight: u64 = input.read::(gasometer)?; + let dest_weight: u64 = input.read::()?; - let origin = Runtime::AddressMapping::into_account_id(context.caller); + let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let multiasset_vec: EvmResult> = assets .iter() .map(|evm_multiasset| { - let to_balance: u128 = evm_multiasset.amount.clone().try_into().map_err(|_| { - gasometer.revert("Amount is too large for provided balance type") - })?; + let to_balance: u128 = evm_multiasset + .amount + .clone() + .try_into() + .map_err(|_| revert("Amount is too large for provided balance type"))?; Ok((evm_multiasset.location.clone(), to_balance).into()) }) .collect(); @@ -415,7 +366,7 @@ where // Since multiassets sorts them, we need to check whether the index is still correct, // and error otherwise as there is not much we can do other than that let multiassets = MultiAssets::from_sorted_and_deduplicated(multiasset_vec?) - .map_err(|_| gasometer.revert("Provided vector either not sorted nor deduplicated"))?; + .map_err(|_| revert("Provided vector either not sorted nor deduplicated"))?; let call = orml_xtokens::Call::::transfer_multiassets { assets: Box::new(VersionedMultiAssets::V1(multiassets)), @@ -424,14 +375,9 @@ where dest_weight, }; - RuntimeHelper::::try_dispatch(Some(origin).into(), call, gasometer)?; + RuntimeHelper::::try_dispatch(handle, Some(origin).into(), call)?; - Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: gasometer.used_gas(), - output: Default::default(), - logs: Default::default(), - }) + Ok(succeed([])) } } @@ -442,8 +388,8 @@ pub struct Currency { } // For Currencies impl EvmData for Currency { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let (address, amount) = reader.read(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let (address, amount) = reader.read()?; Ok(Currency { address, amount }) } @@ -472,8 +418,8 @@ pub struct EvmMultiAsset { } impl EvmData for EvmMultiAsset { - fn read(reader: &mut EvmDataReader, gasometer: &mut Gasometer) -> EvmResult { - let (location, amount) = reader.read(gasometer)?; + fn read(reader: &mut EvmDataReader) -> EvmResult { + let (location, amount) = reader.read()?; Ok(EvmMultiAsset { location, amount }) } diff --git a/precompiles/xtokens/src/mock.rs b/precompiles/xtokens/src/mock.rs index 1416d4d3d0..7b91ddfbee 100644 --- a/precompiles/xtokens/src/mock.rs +++ b/precompiles/xtokens/src/mock.rs @@ -17,13 +17,11 @@ //! Test utilities use super::*; use codec::{Decode, Encode, MaxEncodedLen}; +use frame_support::{construct_runtime, parameter_types}; use frame_support::{ traits::{EnsureOrigin, Everything, OriginTrait, PalletInfo as PalletInfoTrait}, weights::Weight, }; - -use frame_support::{construct_runtime, parameter_types}; - use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key}; use pallet_evm::{AddressMapping, EnsureAddressNever, EnsureAddressRoot, PrecompileSet}; use serde::{Deserialize, Serialize}; @@ -220,18 +218,9 @@ impl PrecompileSet for TestPrecompiles where XtokensWrapper: Precompile, { - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option> { - match address { - a if a == precompile_address() => Some(XtokensWrapper::::execute( - input, target_gas, context, is_static, - )), + fn execute(&self, handle: &mut impl PrecompileHandle) -> Option> { + match handle.code_address() { + a if a == precompile_address() => Some(XtokensWrapper::::execute(handle)), _ => None, } } @@ -246,6 +235,7 @@ pub fn precompile_address() -> H160 { } parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); pub const PrecompilesValue: TestPrecompiles = TestPrecompiles(PhantomData); } @@ -262,10 +252,9 @@ impl pallet_evm::Config for Runtime { type PrecompilesValue = PrecompilesValue; type ChainId = (); type OnChargeTransaction = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } parameter_types! { @@ -368,6 +357,7 @@ impl xcm_executor::Config for XcmConfig { type SubscriptionService = (); type AssetTrap = (); type AssetClaims = (); + type CallDispatcher = Call; } #[derive(Clone, Eq, Debug, PartialEq, Ord, PartialOrd, Encode, Decode, TypeInfo)] @@ -456,8 +446,8 @@ parameter_types! { } parameter_type_with_key! { - pub ParachainMinFee: |_location: MultiLocation| -> u128 { - u128::MAX + pub ParachainMinFee: |_location: MultiLocation| -> Option { + Some(u128::MAX) }; } @@ -517,14 +507,3 @@ pub(crate) fn events() -> Vec { .map(|r| r.event) .collect::>() } - -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> fp_evm::Context { - fp_evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} diff --git a/precompiles/xtokens/src/tests.rs b/precompiles/xtokens/src/tests.rs index 9cc9cd358f..2d0b292b84 100644 --- a/precompiles/xtokens/src/tests.rs +++ b/precompiles/xtokens/src/tests.rs @@ -14,19 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -use std::assert_matches::assert_matches; - use crate::mock::{ - events, evm_test_context, precompile_address, CurrencyId, CurrencyIdToMultiLocation, - ExtBuilder, PrecompilesValue, Runtime, TestAccount::*, TestPrecompiles, + events, CurrencyId, CurrencyIdToMultiLocation, ExtBuilder, PrecompilesValue, Runtime, + TestAccount::*, TestPrecompiles, }; -use crate::{Action, Currency, EvmMultiAsset, PrecompileOutput}; -use fp_evm::{Context, PrecompileFailure}; -use num_enum::TryFromPrimitive; +use crate::{Action, Currency, EvmMultiAsset}; use orml_xtokens::Event as XtokensEvent; -use pallet_evm::{ExitSucceed, PrecompileSet}; -use precompile_utils::{Address, EvmDataWriter}; -use sha3::{Digest, Keccak256}; +use precompile_utils::{prelude::*, testing::*}; use sp_core::U256; use sp_runtime::traits::Convert; use xcm::latest::{ @@ -39,80 +33,28 @@ fn precompiles() -> TestPrecompiles { #[test] fn test_selector_enum() { - let mut buffer = [0u8; 4]; - buffer.copy_from_slice( - &Keccak256::digest(b"transfer(address,uint256,(uint8,bytes[]),uint64)")[0..4], - ); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::Transfer, - ); - - buffer.copy_from_slice( - &Keccak256::digest(b"transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)") - [0..4], - ); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::TransferMultiAsset, - ); - - buffer.copy_from_slice( - &Keccak256::digest(b"transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)") - [0..4], - ); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::TransferWithFee, - ); - - buffer.copy_from_slice( - &Keccak256::digest( - b"transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)", - )[0..4], - ); - assert_eq!( - Action::try_from_primitive(u32::from_be_bytes(buffer)).unwrap(), - Action::TransferMultiAssetWithFee, - ); + assert_eq!(Action::Transfer as u32, 0xb9f813ff); + assert_eq!(Action::TransferMultiAsset as u32, 0xb38c60fa); + assert_eq!(Action::TransferMultiCurrencies as u32, 0x8a362d5c); + assert_eq!(Action::TransferWithFee as u32, 0x94f69115); + assert_eq!(Action::TransferMultiAssetWithFee as u32, 0x89a570fc); } #[test] fn selector_less_than_four_bytes() { ExtBuilder::default().build().execute_with(|| { - // This selector is only three bytes long when four are required. - let bogus_selector = vec![1u8, 2u8, 3u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"tried to parse selector out of bounds", - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8]) + .execute_reverts(|output| output == b"tried to parse selector out of bounds"); }); } #[test] fn no_selector_exists_but_length_is_right() { ExtBuilder::default().build().execute_with(|| { - let bogus_selector = vec![1u8, 2u8, 3u8, 4u8]; - - assert_matches!( - precompiles().execute( - precompile_address(), - &bogus_selector, - None, - &evm_test_context(), - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"unknown selector", - ); + precompiles() + .prepare_test(Alice, Precompile, vec![1u8, 2u8, 3u8, 4u8]) + .execute_reverts(|output| output == b"unknown selector"); }); } @@ -130,30 +72,21 @@ fn transfer_self_reserve_works() { }), ); - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Transfer) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Transfer) .write(Address(SelfReserve.into())) .write(U256::from(500u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(2000) + .expect_no_logs() + .execute_returns(vec![]); + let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete( CurrencyIdToMultiLocation::convert(CurrencyId::SelfReserve).unwrap(), @@ -186,30 +119,21 @@ fn transfer_to_reserve_works() { }), ); // We are transferring asset 0, which we have instructed to be the relay asset - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Transfer) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Transfer) .write(Address(AssetId(0u128).into())) .write(U256::from(500u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); + let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete( CurrencyIdToMultiLocation::convert(CurrencyId::OtherReserve(0u128)).unwrap(), @@ -243,31 +167,21 @@ fn transfer_to_reserve_with_fee_works() { ); // We are transferring asset 0, which we have instructed to be the relay asset // Fees are not trully charged, so no worries - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferWithFee) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferWithFee) .write(Address(AssetId(0u128).into())) .write(U256::from(500u64)) .write(U256::from(50u64)) .write(destination.clone()) .write(U256::from(4000000u64)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete( @@ -309,30 +223,20 @@ fn transfer_non_reserve_to_non_reserve_works() { ); // We are transferring asset 1, which corresponds to another parachain Id asset - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::Transfer) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::Transfer) .write(Address(AssetId(1u128).into())) .write(U256::from(500u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete( @@ -367,31 +271,22 @@ fn transfer_non_reserve_to_non_reserve_with_fee_works() { ); // We are transferring asset 1, which corresponds to another parachain Id asset - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferWithFee) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferWithFee) .write(Address(AssetId(1u128).into())) .write(U256::from(500u32)) .write(U256::from(50u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); + let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete( CurrencyIdToMultiLocation::convert(CurrencyId::OtherReserve(1u128)).unwrap(), @@ -432,30 +327,20 @@ fn transfer_multi_asset_to_reserve_works() { let asset = MultiLocation::parent(); - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAsset) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAsset) .write(asset.clone()) .write(U256::from(500u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete(asset), @@ -490,30 +375,20 @@ fn transfer_multi_asset_self_reserve_works() { let self_reserve = crate::mock::SelfReserve::get(); - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAsset) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAsset) .write(self_reserve.clone()) .write(U256::from(500u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(2000) + .expect_no_logs() + .execute_returns(vec![]); let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete(self_reserve), @@ -547,31 +422,21 @@ fn transfer_multi_asset_self_reserve_with_fee_works() { let self_reserve = crate::mock::SelfReserve::get(); - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAssetWithFee) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAssetWithFee) .write(self_reserve.clone()) .write(U256::from(500u32)) .write(U256::from(50u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(2000) + .expect_no_logs() + .execute_returns(vec![]); let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete(self_reserve.clone()), @@ -612,30 +477,20 @@ fn transfer_multi_asset_non_reserve_to_non_reserve() { Junctions::X2(Junction::Parachain(2), Junction::GeneralIndex(5u128)), ); - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAsset) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAsset) .write(asset_location.clone()) .write(U256::from(500u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete(asset_location), @@ -672,31 +527,21 @@ fn transfer_multi_asset_non_reserve_to_non_reserve_with_fee() { Junctions::X2(Junction::Parachain(2), Junction::GeneralIndex(5u128)), ); - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAssetWithFee) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAssetWithFee) .write(asset_location.clone()) .write(U256::from(500u32)) .write(U256::from(50u32)) .write(destination.clone()) .write(U256::from(4000000u32)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0u32), - }, - false - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); let expected_asset: MultiAsset = MultiAsset { id: AssetId::Concrete(asset_location.clone()), @@ -737,30 +582,21 @@ fn transfer_multi_currencies() { ]; // We are transferring 2 assets - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiCurrencies) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiCurrencies) .write(currencies) .write(0u32) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); + let expected_asset_1: MultiAsset = MultiAsset { id: AssetId::Concrete( CurrencyIdToMultiLocation::convert(CurrencyId::OtherReserve(1u128)).unwrap(), @@ -823,30 +659,21 @@ fn transfer_multi_assets() { .unwrap(); // We are transferring 2 assets - assert_eq!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAssets) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAssets) .write(assets) .write(0u32) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 3000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(3000) + .expect_no_logs() + .execute_returns(vec![]); + let expected: crate::mock::Event = XtokensEvent::TransferredMultiAssets { sender: Alice, assets: multiassets, @@ -881,26 +708,18 @@ fn transfer_multi_currencies_cannot_insert_more_than_max() { ]; // We are transferring 3 assets, when max is 2 - assert_matches!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiCurrencies) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiCurrencies) .write(currencies) .write(0u32) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"More than max number of assets given", - ); + ) + .execute_reverts(|output| output == b"More than max number of assets given"); }); } @@ -942,26 +761,18 @@ fn transfer_multi_assets_cannot_insert_more_than_max() { ]; // We are transferring 3 assets, when max is 2 - assert_matches!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAssets) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAssets) .write(assets) .write(0u32) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"More than max number of assets given", - ); + ) + .execute_reverts(|output| output == b"More than max number of assets given"); }); } @@ -998,25 +809,19 @@ fn transfer_multi_assets_is_not_sorted_error() { ]; // We are transferring 3 assets, when max is 2 - assert_matches!( - precompiles().execute( - Precompile.into(), - &EvmDataWriter::new_with_selector(Action::TransferMultiAssets) + precompiles() + .prepare_test( + Alice, + Precompile, + EvmDataWriter::new_with_selector(Action::TransferMultiAssets) .write(assets) .write(0u32) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: Precompile.into(), - caller: Alice.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Err(PrecompileFailure::Revert { output, ..})) - if output == b"Provided vector either not sorted nor deduplicated", - ); + ) + .execute_reverts(|output| { + output == b"Provided vector either not sorted nor deduplicated" + }); }); } diff --git a/primitives/account/Cargo.toml b/primitives/account/Cargo.toml index da5f372168..a607d8d265 100644 --- a/primitives/account/Cargo.toml +++ b/primitives/account/Cargo.toml @@ -22,11 +22,11 @@ sha3 = { version = "0.9", default-features = false } # Substrate parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime-interface = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime-interface = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [dev-dependencies] hex = "0.4.3" diff --git a/primitives/ext/Cargo.toml b/primitives/ext/Cargo.toml index 31e0a94ff0..f8c6f7aea8 100644 --- a/primitives/ext/Cargo.toml +++ b/primitives/ext/Cargo.toml @@ -15,9 +15,9 @@ evm-tracing-events = { path = "../rpc/evm-tracing-events", default-features = fa # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -sp-externalities = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime-interface = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime-interface = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] diff --git a/primitives/rpc/debug/Cargo.toml b/primitives/rpc/debug/Cargo.toml index 05daceb798..687bd0cc19 100644 --- a/primitives/rpc/debug/Cargo.toml +++ b/primitives/rpc/debug/Cargo.toml @@ -17,11 +17,11 @@ serde_json = { version = "1.0", optional = true } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] diff --git a/primitives/rpc/evm-tracing-events/Cargo.toml b/primitives/rpc/evm-tracing-events/Cargo.toml index da4a9530f0..7705881ea3 100644 --- a/primitives/rpc/evm-tracing-events/Cargo.toml +++ b/primitives/rpc/evm-tracing-events/Cargo.toml @@ -12,14 +12,14 @@ environmental = { version = "1.1.2", default-features = false } # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -sp-runtime-interface = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-runtime-interface = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Ethereum ethereum = { version = "0.12.0", default-features = false, features = [ "with-codec" ] } ethereum-types = { version = "0.13.1", default-features = false } -evm = { version = "0.35.0", default-features = false, features = [ "with-codec" ] } -evm-gasometer = { version = "0.35.0", default-features = false } -evm-runtime = { version = "0.35.0", default-features = false } +evm = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false, features = [ "with-codec" ] } +evm-gasometer = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false } +evm-runtime = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false } [features] default = [ "std" ] diff --git a/primitives/rpc/evm-tracing-events/src/evm.rs b/primitives/rpc/evm-tracing-events/src/evm.rs index 8154dbb200..9a33209b66 100644 --- a/primitives/rpc/evm-tracing-events/src/evm.rs +++ b/primitives/rpc/evm-tracing-events/src/evm.rs @@ -128,6 +128,14 @@ pub enum EvmEvent { gas_limit: u64, address: H160, }, + PrecompileSubcall { + code_address: H160, + transfer: Option, + input: Vec, + target_gas: Option, + is_static: bool, + context: super::Context, + }, } #[cfg(feature = "evm-tracing")] @@ -225,6 +233,25 @@ impl<'a> From> for EvmEvent { gas_limit, address, }, + evm::tracing::Event::PrecompileSubcall { + code_address, + transfer, + input, + target_gas, + is_static, + context, + } => Self::PrecompileSubcall { + code_address, + transfer: if let Some(transfer) = transfer { + Some(transfer.clone().into()) + } else { + None + }, + input: input.to_vec(), + target_gas, + is_static, + context: context.clone().into(), + }, } } } diff --git a/primitives/rpc/txpool/Cargo.toml b/primitives/rpc/txpool/Cargo.toml index 98a18d6aeb..e5ac7de1db 100644 --- a/primitives/rpc/txpool/Cargo.toml +++ b/primitives/rpc/txpool/Cargo.toml @@ -12,10 +12,10 @@ ethereum = { version = "0.12.0", default-features = false, features = [ "with-co # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] diff --git a/primitives/session-keys/Cargo.toml b/primitives/session-keys/Cargo.toml index eec1005699..6c7f5ece58 100644 --- a/primitives/session-keys/Cargo.toml +++ b/primitives/session-keys/Cargo.toml @@ -6,18 +6,36 @@ edition = "2021" version = "0.1.0" [dependencies] -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +async-trait = { version = "0.1", optional = true } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-application-crypto = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] std = [ + "async-trait", + "frame-support/std", "nimbus-primitives/std", "parity-scale-codec/std", "scale-info/std", + "sp-api/std", "sp-application-crypto/std", + "sp-consensus-babe/std", + "sp-consensus-vrf/std", + "sp-core/std", + "sp-inherents/std", + "sp-keystore", "sp-runtime/std", + "sp-std/std", ] diff --git a/primitives/session-keys/src/digest.rs b/primitives/session-keys/src/digest.rs new file mode 100644 index 0000000000..c82cf7f92f --- /dev/null +++ b/primitives/session-keys/src/digest.rs @@ -0,0 +1,63 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +//! VRF pre digest object and conversion to DigestItem +use crate::vrf::{VrfSignature, VRF_ENGINE_ID}; +use parity_scale_codec::{Decode, Encode}; +use sp_consensus_vrf::schnorrkel::{VRFOutput, VRFProof}; +use sp_runtime::{generic::DigestItem, RuntimeDebug}; + +/// Raw VRF pre-digest. +#[derive(Clone, RuntimeDebug, Encode, Decode)] +pub struct PreDigest { + /// VRF output + pub vrf_output: VRFOutput, + /// VRF proof + pub vrf_proof: VRFProof, +} + +/// A digest item which is usable with moonbeam VRF. +pub trait CompatibleDigestItem: Sized { + /// Construct a digest item which contains a VRF pre-digest. + fn vrf_pre_digest(seal: PreDigest) -> Self; + + /// If this item is an VRF pre-digest, return it. + fn as_vrf_pre_digest(&self) -> Option; + + /// Construct a digest item which contains a VRF seal. + fn vrf_seal(signature: VrfSignature) -> Self; + + /// If this item is a VRF signature, return the signature. + fn as_vrf_seal(&self) -> Option; +} + +impl CompatibleDigestItem for DigestItem { + fn vrf_pre_digest(digest: PreDigest) -> Self { + DigestItem::PreRuntime(VRF_ENGINE_ID, digest.encode()) + } + + fn as_vrf_pre_digest(&self) -> Option { + self.pre_runtime_try_to(&VRF_ENGINE_ID) + } + + fn vrf_seal(signature: VrfSignature) -> Self { + DigestItem::Seal(VRF_ENGINE_ID, signature.encode()) + } + + fn as_vrf_seal(&self) -> Option { + self.seal_try_to(&VRF_ENGINE_ID) + } +} diff --git a/primitives/session-keys/src/inherent.rs b/primitives/session-keys/src/inherent.rs new file mode 100644 index 0000000000..f2948739d1 --- /dev/null +++ b/primitives/session-keys/src/inherent.rs @@ -0,0 +1,76 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . +use parity_scale_codec::{Decode, Encode}; +use sp_inherents::{Error, InherentData, InherentIdentifier, IsFatalError}; +use sp_runtime::RuntimeString; + +#[derive(Encode)] +#[cfg_attr(feature = "std", derive(Debug, Decode))] +pub enum InherentError { + Other(RuntimeString), +} + +impl IsFatalError for InherentError { + fn is_fatal_error(&self) -> bool { + match *self { + InherentError::Other(_) => true, + } + } +} + +impl InherentError { + /// Try to create an instance ouf of the given identifier and data. + #[cfg(feature = "std")] + pub fn try_from(id: &InherentIdentifier, data: &[u8]) -> Option { + if id == &INHERENT_IDENTIFIER { + ::decode(&mut &*data).ok() + } else { + None + } + } +} + +/// The InherentIdentifier to set the babe randomness results +pub const INHERENT_IDENTIFIER: InherentIdentifier = *b"baberand"; + +/// A bare minimum inherent data provider that provides no real data. +/// The inherent is simply used as a way to kick off some computation +/// until https://github.com/paritytech/substrate/pull/10128 lands. +pub struct InherentDataProvider; + +#[cfg(feature = "std")] +#[async_trait::async_trait] +impl sp_inherents::InherentDataProvider for InherentDataProvider { + fn provide_inherent_data(&self, inherent_data: &mut InherentData) -> Result<(), Error> { + inherent_data.put_data(INHERENT_IDENTIFIER, &()) + } + + async fn try_handle_error( + &self, + identifier: &InherentIdentifier, + _error: &[u8], + ) -> Option> { + // Don't process modules from other inherents + if *identifier != INHERENT_IDENTIFIER { + return None; + } + + // All errors with the randomness inherent are fatal + Some(Err(Error::Application(Box::from(String::from( + "Error processing dummy randomness inherent", + ))))) + } +} diff --git a/primitives/session-keys/src/lib.rs b/primitives/session-keys/src/lib.rs index d8e48983bd..13f389868a 100644 --- a/primitives/session-keys/src/lib.rs +++ b/primitives/session-keys/src/lib.rs @@ -17,7 +17,11 @@ //! Primitives for session keys #![cfg_attr(not(feature = "std"), no_std)] +pub mod digest; +pub mod inherent; pub mod vrf; +pub use digest::*; +pub use inherent::*; pub use vrf::*; /// A Trait to lookup keys from AuthorIds diff --git a/primitives/session-keys/src/vrf.rs b/primitives/session-keys/src/vrf.rs index 36280b0dca..b8a1a8ddb9 100644 --- a/primitives/session-keys/src/vrf.rs +++ b/primitives/session-keys/src/vrf.rs @@ -14,11 +14,33 @@ // You should have received a copy of the GNU General Public License // along with Moonbeam. If not, see . -//! VRF Key type, which is sr25519 +//! VRF Key type use nimbus_primitives::NimbusId; use sp_application_crypto::{sr25519, KeyTypeId, UncheckedFrom}; +use sp_consensus_babe::Transcript; +#[cfg(feature = "std")] +use sp_keystore::vrf::{VRFTranscriptData, VRFTranscriptValue}; use sp_runtime::{BoundToRuntimeAppPublic, ConsensusEngineId}; +/// Make VRF transcript from the VrfInput +pub fn make_transcript>(last_vrf_output: Hash) -> Transcript { + let mut transcript = Transcript::new(&VRF_ENGINE_ID); + transcript.append_message(b"last vrf output", last_vrf_output.as_ref()); + transcript +} + +/// Make a VRF transcript data container +#[cfg(feature = "std")] +pub fn make_transcript_data>(last_vrf_output: Hash) -> VRFTranscriptData { + VRFTranscriptData { + label: &VRF_ENGINE_ID, + items: vec![( + "last vrf output", + VRFTranscriptValue::Bytes(last_vrf_output.as_ref().to_vec()), + )], + } +} + /// Struct to implement `BoundToRuntimeAppPublic` by assigning Public = VrfId pub struct VrfSessionKey; @@ -40,6 +62,9 @@ pub const VRF_ENGINE_ID: ConsensusEngineId = *b"rand"; /// The KeyTypeId used for VRF keys pub const VRF_KEY_ID: KeyTypeId = KeyTypeId(VRF_ENGINE_ID); +/// VRFInOut context. +pub static VRF_INOUT_CONTEXT: &[u8] = b"VRFInOutContext"; + // The strongly-typed crypto wrappers to be used by VRF in the keystore mod vrf_crypto { use sp_application_crypto::{app_crypto, sr25519}; @@ -57,6 +82,13 @@ sp_application_crypto::with_pair! { pub type VrfPair = vrf_crypto::Pair; } +sp_api::decl_runtime_apis! { + pub trait VrfApi { + fn get_last_vrf_output() -> Option; + fn vrf_key_lookup(nimbus_id: nimbus_primitives::NimbusId) -> Option; + } +} + #[test] fn nimbus_to_vrf_id() { for x in 0u8..10u8 { diff --git a/primitives/xcm/Cargo.toml b/primitives/xcm/Cargo.toml index d772fba00f..5f5c12fa39 100644 --- a/primitives/xcm/Cargo.toml +++ b/primitives/xcm/Cargo.toml @@ -11,24 +11,27 @@ version = "0.1.0" targets = [ "x86_64-unknown-linux-gnu" ] [dependencies] +ethereum = { version = "0.12.0", default-features = false, features = [ "with-codec" ] } +ethereum-types = { version = "0.13.1", default-features = false } hex = { version = "0.4", default-features = false } log = "0.4" serde = { version = "1.0.101", optional = true, default-features = false, features = [ "derive" ] } sha3 = { version = "0.8", default-features = false } # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Polkadot / XCM -orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] @@ -37,6 +40,7 @@ std = [ "parity-scale-codec/std", "serde/std", "sha3/std", + "sp-io/std", "sp-runtime/std", "sp-std/std", "xcm-builder/std", diff --git a/primitives/xcm/src/asset_id_conversions.rs b/primitives/xcm/src/asset_id_conversions.rs new file mode 100644 index 0000000000..6638b3a0e6 --- /dev/null +++ b/primitives/xcm/src/asset_id_conversions.rs @@ -0,0 +1,69 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +/// Converter struct implementing `AssetIdConversion` converting a numeric asset ID +/// (must be `TryFrom/TryInto`) into a MultiLocation Value and vice versa through +/// an intermediate generic type AssetType. +/// The trait bounds enforce is that the AssetTypeGetter trait is also implemented for +/// AssetIdInfoGetter +use sp_std::{borrow::Borrow, marker::PhantomData}; +use xcm::latest::MultiLocation; + +pub struct AsAssetType( + PhantomData<(AssetId, AssetType, AssetIdInfoGetter)>, +); +impl xcm_executor::traits::Convert + for AsAssetType +where + AssetId: Clone, + AssetType: From + Into> + Clone, + AssetIdInfoGetter: AssetTypeGetter, +{ + fn convert_ref(id: impl Borrow) -> Result { + if let Some(asset_id) = AssetIdInfoGetter::get_asset_id(id.borrow().clone().into()) { + Ok(asset_id) + } else { + Err(()) + } + } + fn reverse_ref(what: impl Borrow) -> Result { + if let Some(asset_type) = AssetIdInfoGetter::get_asset_type(what.borrow().clone()) { + if let Some(location) = asset_type.into() { + Ok(location) + } else { + Err(()) + } + } else { + Err(()) + } + } +} + +// Defines the trait to obtain a generic AssetType from a generic AssetId and vice versa +pub trait AssetTypeGetter { + // Get asset type from assetId + fn get_asset_type(asset_id: AssetId) -> Option; + + // Get assetId from assetType + fn get_asset_id(asset_type: AssetType) -> Option; +} + +/// This trait ensure we can convert AccountIds to CurrencyIds +/// We will require Runtime to have this trait implemented +pub trait AccountIdToCurrencyId { + // Get assetId from account + fn account_to_currency_id(account: Account) -> Option; +} diff --git a/primitives/xcm/src/barriers.rs b/primitives/xcm/src/barriers.rs new file mode 100644 index 0000000000..32fd9a3e2c --- /dev/null +++ b/primitives/xcm/src/barriers.rs @@ -0,0 +1,77 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use frame_support::{ensure, traits::Contains, weights::Weight}; +/// Allows execution from `origin` if it is contained in `T` (i.e. `T::Contains(origin)`) taking +/// payments into account and if it starts with DescendOrigin. +/// +/// Only allows for `DescendOrigin` + `WithdrawAsset`, + `BuyExecution` +use sp_std::marker::PhantomData; +use xcm::latest::{ + prelude::{BuyExecution, DescendOrigin, WithdrawAsset}, + MultiLocation, + WeightLimit::{Limited, Unlimited}, + Xcm, +}; +use xcm_executor::traits::ShouldExecute; + +pub struct AllowDescendOriginFromLocal(PhantomData); +impl> ShouldExecute for AllowDescendOriginFromLocal { + fn should_execute( + origin: &MultiLocation, + message: &mut Xcm, + max_weight: Weight, + _weight_credit: &mut Weight, + ) -> Result<(), ()> { + log::trace!( + target: "xcm::barriers", + "AllowTopLevelPaidExecutionFromLocal origin: + {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, message, max_weight, _weight_credit, + ); + ensure!(T::contains(origin), ()); + let mut iter = message.0.iter_mut(); + // Make sure the first instruction is DescendOrigin + iter.next() + .filter(|instruction| matches!(instruction, DescendOrigin(_))) + .ok_or(())?; + + // Then WithdrawAsset + iter.next() + .filter(|instruction| matches!(instruction, WithdrawAsset(_))) + .ok_or(())?; + + // Then BuyExecution + let i = iter.next().ok_or(())?; + match i { + BuyExecution { + weight_limit: Limited(ref mut weight), + .. + } if *weight >= max_weight => { + *weight = max_weight; + Ok(()) + } + BuyExecution { + ref mut weight_limit, + .. + } if weight_limit == &Unlimited => { + *weight_limit = Limited(max_weight); + Ok(()) + } + _ => Err(()), + } + } +} diff --git a/primitives/xcm/src/ethereum_xcm.rs b/primitives/xcm/src/ethereum_xcm.rs new file mode 100644 index 0000000000..aa7a700d80 --- /dev/null +++ b/primitives/xcm/src/ethereum_xcm.rs @@ -0,0 +1,357 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use ethereum::{ + AccessList, AccessListItem, EIP1559Transaction, EIP2930Transaction, LegacyTransaction, + TransactionAction, TransactionSignature, TransactionV2, +}; +use ethereum_types::{H160, H256, U256}; +use parity_scale_codec::{Decode, Encode}; +use scale_info::TypeInfo; +use sp_std::vec::Vec; + +#[derive(Clone, Debug, Eq, PartialEq, Encode, Decode, TypeInfo)] +/// Manually sets a gas fee. +pub struct ManualEthereumXcmFee { + /// Legacy or Eip-2930, all fee will be used. + pub gas_price: Option, + /// Eip-1559, must be at least the on-chain base fee at the time of applying the xcm + /// and will use up to the defined value. + pub max_fee_per_gas: Option, +} + +/// Xcm transact's Ethereum transaction configurable fee. +#[derive(Clone, Debug, Eq, PartialEq, Encode, Decode, TypeInfo)] +pub enum EthereumXcmFee { + /// Manually set gas fee. + Manual(ManualEthereumXcmFee), + /// Use the on-chain base fee at the time of processing the xcm. + Auto, +} + +/// Xcm transact's Ethereum transaction. +#[derive(Clone, Debug, Eq, PartialEq, Encode, Decode, TypeInfo)] +pub enum EthereumXcmTransaction { + V1(EthereumXcmTransactionV1), + V2(EthereumXcmTransactionV2), +} + +/// Value for `r` and `s` for the invalid signature included in Xcm transact's Ethereum transaction. +pub fn rs_id() -> H256 { + H256::from_low_u64_be(1u64) +} + +#[derive(Clone, Debug, Eq, PartialEq, Encode, Decode, TypeInfo)] +pub struct EthereumXcmTransactionV1 { + /// Gas limit to be consumed by EVM execution. + pub gas_limit: U256, + /// Fee configuration of choice. + pub fee_payment: EthereumXcmFee, + /// Either a Call (the callee, account or contract address) or Create (currently unsupported). + pub action: TransactionAction, + /// Value to be transfered. + pub value: U256, + /// Input data for a contract call. + pub input: Vec, + /// Map of addresses to be pre-paid to warm storage. + pub access_list: Option)>>, +} + +#[derive(Clone, Debug, Eq, PartialEq, Encode, Decode, TypeInfo)] +pub struct EthereumXcmTransactionV2 { + /// Gas limit to be consumed by EVM execution. + pub gas_limit: U256, + /// Either a Call (the callee, account or contract address) or Create (currently unsupported). + pub action: TransactionAction, + /// Value to be transfered. + pub value: U256, + /// Input data for a contract call. + pub input: Vec, + /// Map of addresses to be pre-paid to warm storage. + pub access_list: Option)>>, +} + +pub trait XcmToEthereum { + fn into_transaction_v2(&self, base_fee: U256, nonce: U256) -> Option; +} + +impl XcmToEthereum for EthereumXcmTransaction { + fn into_transaction_v2(&self, base_fee: U256, nonce: U256) -> Option { + match self { + EthereumXcmTransaction::V1(v1_tx) => v1_tx.into_transaction_v2(base_fee, nonce), + EthereumXcmTransaction::V2(v2_tx) => v2_tx.into_transaction_v2(base_fee, nonce), + } + } +} + +impl XcmToEthereum for EthereumXcmTransactionV1 { + fn into_transaction_v2(&self, base_fee: U256, nonce: U256) -> Option { + // We dont support creates for now + if self.action == TransactionAction::Create { + return None; + } + let from_tuple_to_access_list = |t: &Vec<(H160, Vec)>| -> AccessList { + t.iter() + .map(|item| AccessListItem { + address: item.0.clone(), + storage_keys: item.1.clone(), + }) + .collect::>() + }; + + let (gas_price, max_fee) = match &self.fee_payment { + EthereumXcmFee::Manual(fee_config) => { + (fee_config.gas_price, fee_config.max_fee_per_gas) + } + EthereumXcmFee::Auto => (None, Some(base_fee)), + }; + match (gas_price, max_fee) { + (Some(gas_price), None) => { + // Legacy or Eip-2930 + if let Some(ref access_list) = self.access_list { + // Eip-2930 + Some(TransactionV2::EIP2930(EIP2930Transaction { + chain_id: 0, + nonce, + gas_price, + gas_limit: self.gas_limit, + action: self.action, + value: self.value, + input: self.input.clone(), + access_list: from_tuple_to_access_list(access_list), + odd_y_parity: true, + r: rs_id(), + s: rs_id(), + })) + } else { + // Legacy + Some(TransactionV2::Legacy(LegacyTransaction { + nonce, + gas_price, + gas_limit: self.gas_limit, + action: self.action, + value: self.value, + input: self.input.clone(), + signature: TransactionSignature::new(42, rs_id(), rs_id())?, + })) + } + } + (None, Some(max_fee)) => { + // Eip-1559 + Some(TransactionV2::EIP1559(EIP1559Transaction { + chain_id: 0, + nonce, + max_fee_per_gas: max_fee, + max_priority_fee_per_gas: U256::zero(), + gas_limit: self.gas_limit, + action: self.action, + value: self.value, + input: self.input.clone(), + access_list: if let Some(ref access_list) = self.access_list { + from_tuple_to_access_list(access_list) + } else { + Vec::new() + }, + odd_y_parity: true, + r: rs_id(), + s: rs_id(), + })) + } + _ => return None, + } + } +} + +impl XcmToEthereum for EthereumXcmTransactionV2 { + fn into_transaction_v2(&self, _base_fee: U256, nonce: U256) -> Option { + // We dont support creates for now + if self.action == TransactionAction::Create { + return None; + } + let from_tuple_to_access_list = |t: &Vec<(H160, Vec)>| -> AccessList { + t.iter() + .map(|item| AccessListItem { + address: item.0.clone(), + storage_keys: item.1.clone(), + }) + .collect::>() + }; + // Eip-1559 + Some(TransactionV2::EIP1559(EIP1559Transaction { + chain_id: 0, + nonce, + max_fee_per_gas: U256::zero(), + max_priority_fee_per_gas: U256::zero(), + gas_limit: self.gas_limit, + action: self.action, + value: self.value, + input: self.input.clone(), + access_list: if let Some(ref access_list) = self.access_list { + from_tuple_to_access_list(access_list) + } else { + Vec::new() + }, + odd_y_parity: true, + r: rs_id(), + s: rs_id(), + })) + } +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn test_into_ethereum_tx_with_auto_fee_v1() { + let xcm_transaction = EthereumXcmTransactionV1 { + gas_limit: U256::from(1), + fee_payment: EthereumXcmFee::Auto, + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + access_list: None, + }; + let nonce = U256::from(0); + let base_fee = U256::from(1); + let expected_tx = Some(TransactionV2::EIP1559(EIP1559Transaction { + chain_id: 0, + nonce, + max_fee_per_gas: base_fee, + max_priority_fee_per_gas: U256::zero(), + gas_limit: U256::from(1), + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + access_list: vec![], + odd_y_parity: true, + r: H256::from_low_u64_be(1u64), + s: H256::from_low_u64_be(1u64), + })); + + assert_eq!( + xcm_transaction.into_transaction_v2(base_fee, nonce), + expected_tx + ); + } + + #[test] + fn test_legacy_v1() { + let xcm_transaction = EthereumXcmTransactionV1 { + gas_limit: U256::from(1), + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + access_list: None, + }; + let nonce = U256::from(0); + let gas_price = U256::from(1); + let expected_tx = Some(TransactionV2::Legacy(LegacyTransaction { + nonce, + gas_price, + gas_limit: U256::from(1), + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + signature: TransactionSignature::new(42, rs_id(), rs_id()).unwrap(), + })); + + assert_eq!( + xcm_transaction.into_transaction_v2(gas_price, nonce), + expected_tx + ); + } + #[test] + fn test_eip_2930_v1() { + let access_list = Some(vec![(H160::default(), vec![H256::default()])]); + let from_tuple_to_access_list = |t: &Vec<(H160, Vec)>| -> AccessList { + t.iter() + .map(|item| AccessListItem { + address: item.0.clone(), + storage_keys: item.1.clone(), + }) + .collect::>() + }; + + let xcm_transaction = EthereumXcmTransactionV1 { + gas_limit: U256::from(1), + fee_payment: EthereumXcmFee::Manual(ManualEthereumXcmFee { + gas_price: Some(U256::from(1)), + max_fee_per_gas: None, + }), + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + access_list: access_list.clone(), + }; + + let nonce = U256::from(0); + let gas_price = U256::from(1); + let expected_tx = Some(TransactionV2::EIP2930(EIP2930Transaction { + chain_id: 0, + nonce, + gas_price, + gas_limit: U256::from(1), + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + access_list: from_tuple_to_access_list(&access_list.unwrap()), + odd_y_parity: true, + r: H256::from_low_u64_be(1u64), + s: H256::from_low_u64_be(1u64), + })); + + assert_eq!( + xcm_transaction.into_transaction_v2(gas_price, nonce), + expected_tx + ); + } + + #[test] + fn test_eip1559_v2() { + let xcm_transaction = EthereumXcmTransactionV2 { + gas_limit: U256::from(1), + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + access_list: None, + }; + let nonce = U256::from(0); + let base_fee = U256::from(0); + let expected_tx = Some(TransactionV2::EIP1559(EIP1559Transaction { + chain_id: 0, + nonce, + max_fee_per_gas: U256::from(0), + max_priority_fee_per_gas: U256::zero(), + gas_limit: U256::from(1), + action: TransactionAction::Call(H160::default()), + value: U256::from(0), + input: vec![1u8], + access_list: vec![], + odd_y_parity: true, + r: H256::from_low_u64_be(1u64), + s: H256::from_low_u64_be(1u64), + })); + + assert_eq!( + xcm_transaction.into_transaction_v2(base_fee, nonce), + expected_tx + ); + } +} diff --git a/primitives/xcm/src/fee_handlers.rs b/primitives/xcm/src/fee_handlers.rs new file mode 100644 index 0000000000..df17e64d91 --- /dev/null +++ b/primitives/xcm/src/fee_handlers.rs @@ -0,0 +1,419 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +// We need to know how to charge for incoming assets +// We assume AssetIdInfoGetter is implemented and is capable of getting how much units we should +// charge for a given asset +// This takes the first fungible asset, and takes whatever UnitPerSecondGetter establishes +// UnitsToWeightRatio trait, which needs to be implemented by AssetIdInfoGetter + +use frame_support::{ + traits::{tokens::fungibles::Mutate, Get}, + weights::{constants::WEIGHT_PER_SECOND, Weight}, +}; +use sp_runtime::traits::Zero; +use sp_std::marker::PhantomData; +use xcm::latest::{ + AssetId as xcmAssetId, Error as XcmError, Fungibility, MultiAsset, MultiLocation, +}; + +use xcm_builder::TakeRevenue; +use xcm_executor::traits::{MatchesFungibles, WeightTrader}; + +pub struct FirstAssetTrader< + AssetType: From + Clone, + AssetIdInfoGetter: UnitsToWeightRatio, + R: TakeRevenue, +>( + Weight, + Option<(MultiLocation, u128, u128)>, // id, amount, units_per_second + PhantomData<(AssetType, AssetIdInfoGetter, R)>, +); +impl< + AssetType: From + Clone, + AssetIdInfoGetter: UnitsToWeightRatio, + R: TakeRevenue, + > WeightTrader for FirstAssetTrader +{ + fn new() -> Self { + FirstAssetTrader(0, None, PhantomData) + } + fn buy_weight( + &mut self, + weight: Weight, + payment: xcm_executor::Assets, + ) -> Result { + // can only call one time + if self.1.is_some() { + // TODO: better error + return Err(XcmError::NotWithdrawable); + } + + assert_eq!(self.0, 0); + let first_asset = payment + .clone() + .fungible_assets_iter() + .next() + .ok_or(XcmError::TooExpensive)?; + + // We are only going to check first asset for now. This should be sufficient for simple token + // transfers. We will see later if we change this. + match (first_asset.id, first_asset.fun) { + (xcmAssetId::Concrete(id), Fungibility::Fungible(_)) => { + let asset_type: AssetType = id.clone().into(); + // Shortcut if we know the asset is not supported + // This involves the same db read per block, mitigating any attack based on + // non-supported assets + if !AssetIdInfoGetter::payment_is_supported(asset_type.clone()) { + return Err(XcmError::TooExpensive); + } + if let Some(units_per_second) = AssetIdInfoGetter::get_units_per_second(asset_type) + { + let amount = units_per_second.saturating_mul(weight as u128) + / (WEIGHT_PER_SECOND as u128); + + // We dont need to proceed if the amount is 0 + // For cases (specially tests) where the asset is very cheap with respect + // to the weight needed + if amount.is_zero() { + return Ok(payment); + } + + let required = MultiAsset { + fun: Fungibility::Fungible(amount), + id: xcmAssetId::Concrete(id.clone()), + }; + let unused = payment + .checked_sub(required) + .map_err(|_| XcmError::TooExpensive)?; + + self.0 = weight; + self.1 = Some((id, amount, units_per_second)); + + return Ok(unused); + } else { + return Err(XcmError::TooExpensive); + }; + } + _ => return Err(XcmError::TooExpensive), + } + } + + // Refund weight. We will refund in whatever asset is stored in self. + fn refund_weight(&mut self, weight: Weight) -> Option { + if let Some((id, prev_amount, units_per_second)) = self.1.clone() { + let weight = weight.min(self.0); + self.0 -= weight; + let amount = units_per_second * (weight as u128) / (WEIGHT_PER_SECOND as u128); + let amount = amount.min(prev_amount); + self.1 = Some(( + id.clone(), + prev_amount.saturating_sub(amount), + units_per_second, + )); + Some(MultiAsset { + fun: Fungibility::Fungible(amount), + id: xcmAssetId::Concrete(id.clone()), + }) + } else { + None + } + } +} + +/// Deal with spent fees, deposit them as dictated by R +impl< + AssetType: From + Clone, + AssetIdInfoGetter: UnitsToWeightRatio, + R: TakeRevenue, + > Drop for FirstAssetTrader +{ + fn drop(&mut self) { + if let Some((id, amount, _)) = self.1.clone() { + R::take_revenue((id, amount).into()); + } + } +} + +/// XCM fee depositor to which we implement the TakeRevenue trait +/// It receives a fungibles::Mutate implemented argument, a matcher to convert MultiAsset into +/// AssetId and amount, and the fee receiver account +pub struct XcmFeesToAccount( + PhantomData<(Assets, Matcher, AccountId, ReceiverAccount)>, +); +impl< + Assets: Mutate, + Matcher: MatchesFungibles, + AccountId: Clone, + ReceiverAccount: Get, + > TakeRevenue for XcmFeesToAccount +{ + fn take_revenue(revenue: MultiAsset) { + match Matcher::matches_fungibles(&revenue) { + Ok((asset_id, amount)) => { + if !amount.is_zero() { + let ok = Assets::mint_into(asset_id, &ReceiverAccount::get(), amount).is_ok(); + debug_assert!(ok, "`mint_into` cannot generally fail; qed"); + } + } + Err(_) => log::debug!( + target: "xcm", + "take revenue failed matching fungible" + ), + } + } +} + +// Defines the trait to obtain the units per second of a give asset_type for local execution +// This parameter will be used to charge for fees upon asset_type deposit +pub trait UnitsToWeightRatio { + // Whether payment in a particular asset_type is suppotrted + fn payment_is_supported(asset_type: AssetType) -> bool; + // Get units per second from asset type + fn get_units_per_second(asset_type: AssetType) -> Option; +} + +#[cfg(test)] +mod test { + use super::*; + use xcm::latest::{AssetId, Fungibility, Junction, Junctions}; + use xcm_executor::Assets; + + const ARBITRARY_ID: AssetId = AssetId::Concrete(MultiLocation { + parents: 0u8, + interior: Junctions::Here, + }); + + impl UnitsToWeightRatio for () { + fn payment_is_supported(_asset_type: MultiLocation) -> bool { + true + } + fn get_units_per_second(_asset_type: MultiLocation) -> Option { + // return WEIGHT_PER_SECOND to cancel the division out in buy_weight() + // this should make weight and payment amounts directly comparable + Some(WEIGHT_PER_SECOND as u128) + } + } + + #[test] + fn test_buy_weight_accounts_weight_properly() { + let amount = 1000u128; + + let mut payment = Assets::new(); + payment.subsume(MultiAsset { + id: AssetId::Concrete(MultiLocation { + parents: 0u8, + interior: Junctions::Here, + }), + fun: Fungibility::Fungible(amount), + }); + + let mut trader: FirstAssetTrader = FirstAssetTrader::new(); + let unused = trader + .buy_weight(amount as Weight, payment.clone()) + .expect("can buy weight once"); + assert!(unused.is_empty()); + assert_eq!(trader.0, 1000u64); + } + + #[test] + fn cant_call_buy_weight_twice() { + let mut trader: FirstAssetTrader = FirstAssetTrader::new(); + + // should be able to buy once + let mut asset_one_payment = Assets::new(); + asset_one_payment.subsume(MultiAsset { + id: AssetId::Concrete(MultiLocation { + parents: 0u8, + interior: Junctions::X1(Junction::Parachain(1000)), + }), + fun: Fungibility::Fungible(100u128), + }); + let buy_one_results = trader + .buy_weight(100u32 as Weight, asset_one_payment.clone()) + .expect("can buy weight once"); + assert_eq!(buy_one_results.fungible.len(), 0); // no unused amount + assert_eq!(trader.0, 100u64); + assert_eq!( + trader.1, + Some(( + MultiLocation { + parents: 0u8, + interior: Junctions::X1(Junction::Parachain(1000)) + }, + 100, + WEIGHT_PER_SECOND as u128 + )) + ); + + // but not twice + let mut asset_two_payment = xcm_executor::Assets::new(); + asset_two_payment.subsume(MultiAsset { + id: AssetId::Concrete(MultiLocation { + parents: 0u8, + interior: Junctions::X1(Junction::Parachain(1001)), + }), + fun: Fungibility::Fungible(10_000u128), + }); + assert_eq!( + trader.buy_weight(10_000u32 as Weight, asset_two_payment.clone()), + Err(XcmError::NotWithdrawable), + ); + + // state should be unchanged + assert_eq!(trader.0, 100u64); + assert_eq!( + trader.1, + Some(( + MultiLocation { + parents: 0u8, + interior: Junctions::X1(Junction::Parachain(1000)) + }, + 100, + WEIGHT_PER_SECOND as u128 + )) + ); + } + + #[test] + fn can_call_refund_weight_with_all_weight() { + let amount = 1000u128; + + let mut payment = Assets::new(); + payment.subsume(MultiAsset { + id: ARBITRARY_ID, + fun: Fungibility::Fungible(amount), + }); + + let mut trader: FirstAssetTrader = FirstAssetTrader::new(); + let unused = trader + .buy_weight(amount as Weight, payment.clone()) + .expect("can buy weight once"); + assert!(unused.is_empty()); + assert_eq!(trader.0, 1000u64); + + assert_eq!( + trader.refund_weight(1000u64), + Some(MultiAsset { + fun: Fungibility::Fungible(1000), + id: ARBITRARY_ID, + }) + ); + } + + #[test] + fn can_call_refund_multiple_times() { + let amount = 1000u128; + + let mut payment = Assets::new(); + payment.subsume(MultiAsset { + id: ARBITRARY_ID, + fun: Fungibility::Fungible(amount), + }); + + let mut trader: FirstAssetTrader = FirstAssetTrader::new(); + let unused = trader + .buy_weight(amount as Weight, payment.clone()) + .expect("can buy weight once"); + assert!(unused.is_empty()); + assert_eq!(trader.0, 1000u64); + + assert_eq!( + trader.refund_weight(100u64), + Some(MultiAsset { + fun: Fungibility::Fungible(100), + id: ARBITRARY_ID, + }) + ); + + // should reflect 100 weight and 100 currency deducted + assert_eq!(trader.0, 900); + assert_eq!(trader.1.clone().unwrap().1, 900); + + // can call again + assert_eq!( + trader.refund_weight(200u64), + Some(MultiAsset { + fun: Fungibility::Fungible(200), + id: ARBITRARY_ID, + }) + ); + + // should reflect another 200 weight and 200 currency deducted + assert_eq!(trader.0, 700); + assert_eq!(trader.1.clone().unwrap().1, 700); + } + + #[test] + fn refund_weight_caps_weight() { + let amount = 1000u128; + + let mut payment = Assets::new(); + payment.subsume(MultiAsset { + id: ARBITRARY_ID, + fun: Fungibility::Fungible(amount), + }); + + let mut trader: FirstAssetTrader = FirstAssetTrader::new(); + let unused = trader + .buy_weight(amount as Weight, payment.clone()) + .expect("can buy weight once"); + assert!(unused.is_empty()); + assert_eq!(trader.0, 1000u64); + + // can't call with more weight + assert_eq!( + trader.refund_weight(9999u64), + Some(MultiAsset { + fun: Fungibility::Fungible(1000), + id: ARBITRARY_ID, + }) + ); + assert_eq!(trader.0, 0); + } + + #[test] + fn refund_weight_caps_currency() { + let amount = 1000u128; + + let mut payment = Assets::new(); + payment.subsume(MultiAsset { + id: ARBITRARY_ID, + fun: Fungibility::Fungible(amount), + }); + + let mut trader: FirstAssetTrader = FirstAssetTrader::new(); + let unused = trader + .buy_weight(amount as Weight, payment.clone()) + .expect("can buy weight once"); + assert!(unused.is_empty()); + assert_eq!(trader.0, 1000u64); + + // adjust weight so that it will allow a higher amount -- we want to see that the currency + // (self.1.1) is capped even when weight is not + trader.0 = trader.0 + 1000; + + // can't call with more weight + assert_eq!( + trader.refund_weight(1500u64), + Some(MultiAsset { + fun: Fungibility::Fungible(1000), + id: ARBITRARY_ID, + }) + ); + assert_eq!(trader.0, 500); // still thinks we have unreturned weight + } +} diff --git a/primitives/xcm/src/lib.rs b/primitives/xcm/src/lib.rs index f1e23fb0a2..acf4eeb392 100644 --- a/primitives/xcm/src/lib.rs +++ b/primitives/xcm/src/lib.rs @@ -18,329 +18,23 @@ #![cfg_attr(not(feature = "std"), no_std)] -use frame_support::{ - traits::{tokens::fungibles::Mutate, Get, OriginTrait}, - weights::{constants::WEIGHT_PER_SECOND, Weight}, -}; -use orml_traits::location::{RelativeReserveProvider, Reserve}; -use sp_runtime::traits::Zero; -use sp_std::{borrow::Borrow, vec::Vec}; -use sp_std::{convert::TryInto, marker::PhantomData}; -use xcm::latest::{ - AssetId as xcmAssetId, Error as XcmError, Fungibility, Junction::AccountKey20, Junctions::*, - MultiAsset, MultiLocation, NetworkId, -}; -use xcm_builder::TakeRevenue; -use xcm_executor::traits::{MatchesFungibles, WeightTrader}; +mod asset_id_conversions; +pub use asset_id_conversions::*; -/// Converter struct implementing `AssetIdConversion` converting a numeric asset ID -/// (must be `TryFrom/TryInto`) into a MultiLocation Value and vice versa through -/// an intermediate generic type AssetType. -/// The trait bounds enforce is that the AssetTypeGetter trait is also implemented for -/// AssetIdInfoGetter -pub struct AsAssetType( - PhantomData<(AssetId, AssetType, AssetIdInfoGetter)>, -); -impl xcm_executor::traits::Convert - for AsAssetType -where - AssetId: Clone, - AssetType: From + Into> + Clone, - AssetIdInfoGetter: AssetTypeGetter, -{ - fn convert_ref(id: impl Borrow) -> Result { - if let Some(asset_id) = AssetIdInfoGetter::get_asset_id(id.borrow().clone().into()) { - Ok(asset_id) - } else { - Err(()) - } - } - fn reverse_ref(what: impl Borrow) -> Result { - if let Some(asset_type) = AssetIdInfoGetter::get_asset_type(what.borrow().clone()) { - if let Some(location) = asset_type.into() { - Ok(location) - } else { - Err(()) - } - } else { - Err(()) - } - } -} +mod barriers; +pub use barriers::*; -/// Instructs how to convert a 20 byte accountId into a MultiLocation -pub struct AccountIdToMultiLocation(sp_std::marker::PhantomData); -impl sp_runtime::traits::Convert - for AccountIdToMultiLocation -where - AccountId: Into<[u8; 20]>, -{ - fn convert(account: AccountId) -> MultiLocation { - MultiLocation { - parents: 0, - interior: X1(AccountKey20 { - network: NetworkId::Any, - key: account.into(), - }), - } - } -} +mod fee_handlers; +pub use fee_handlers::*; -// Convert a local Origin (i.e., a signed 20 byte account Origin) to a Multilocation -pub struct SignedToAccountId20( - sp_std::marker::PhantomData<(Origin, AccountId, Network)>, -); -impl, Network: Get> - xcm_executor::traits::Convert - for SignedToAccountId20 -where - Origin::PalletsOrigin: From> - + TryInto, Error = Origin::PalletsOrigin>, -{ - fn convert(o: Origin) -> Result { - o.try_with_caller(|caller| match caller.try_into() { - Ok(frame_system::RawOrigin::Signed(who)) => Ok(AccountKey20 { - key: who.into(), - network: Network::get(), - } - .into()), - Ok(other) => Err(other.into()), - Err(other) => Err(other), - }) - } -} +mod location_conversion; +pub use location_conversion::*; -// We need to know how to charge for incoming assets -// We assume AssetIdInfoGetter is implemented and is capable of getting how much units we should -// charge for a given asset -// This takes the first fungible asset, and takes whatever UnitPerSecondGetter establishes -// UnitsToWeightRatio trait, which needs to be implemented by AssetIdInfoGetter -pub struct FirstAssetTrader< - AssetType: From + Clone, - AssetIdInfoGetter: UnitsToWeightRatio, - R: TakeRevenue, ->( - Weight, - Option<(MultiLocation, u128, u128)>, - PhantomData<(AssetType, AssetIdInfoGetter, R)>, -); -impl< - AssetType: From + Clone, - AssetIdInfoGetter: UnitsToWeightRatio, - R: TakeRevenue, - > WeightTrader for FirstAssetTrader -{ - fn new() -> Self { - FirstAssetTrader(0, None, PhantomData) - } - fn buy_weight( - &mut self, - weight: Weight, - payment: xcm_executor::Assets, - ) -> Result { - let first_asset = payment - .clone() - .fungible_assets_iter() - .next() - .ok_or(XcmError::TooExpensive)?; +mod origin_conversion; +pub use origin_conversion::*; - // We are only going to check first asset for now. This should be sufficient for simple token - // transfers. We will see later if we change this. - match (first_asset.id, first_asset.fun) { - (xcmAssetId::Concrete(id), Fungibility::Fungible(_)) => { - let asset_type: AssetType = id.clone().into(); - // Shortcut if we know the asset is not supported - // This involves the same db read per block, mitigating any attack based on - // non-supported assets - if !AssetIdInfoGetter::payment_is_supported(asset_type.clone()) { - return Err(XcmError::TooExpensive); - } - if let Some(units_per_second) = AssetIdInfoGetter::get_units_per_second(asset_type) - { - let amount = units_per_second.saturating_mul(weight as u128) - / (WEIGHT_PER_SECOND as u128); +mod transactor_traits; +pub use transactor_traits::*; - // We dont need to proceed if the amount is 0 - // For cases (specially tests) where the asset is very cheap with respect - // to the weight needed - if amount.is_zero() { - return Ok(payment); - } - - let required = MultiAsset { - fun: Fungibility::Fungible(amount), - id: xcmAssetId::Concrete(id.clone()), - }; - let unused = payment - .checked_sub(required) - .map_err(|_| XcmError::TooExpensive)?; - self.0 = self.0.saturating_add(weight); - - // In case the asset matches the one the trader already stored before, add - // to later refund - - // Else we are always going to subtract the weight if we can, but we latter do - // not refund it - - // In short, we only refund on the asset the trader first successfully was able - // to pay for an execution - let new_asset = match self.1.clone() { - Some((prev_id, prev_amount, units_per_second)) => { - if prev_id == id.clone() { - Some((id, prev_amount.saturating_add(amount), units_per_second)) - } else { - None - } - } - None => Some((id, amount, units_per_second)), - }; - - // Due to the trait bound, we can only refund one asset. - if let Some(new_asset) = new_asset { - self.0 = self.0.saturating_add(weight); - self.1 = Some(new_asset); - }; - return Ok(unused); - } else { - return Err(XcmError::TooExpensive); - }; - } - _ => return Err(XcmError::TooExpensive), - } - } - - // Refund weight. We will refund in whatever asset is stored in self. - fn refund_weight(&mut self, weight: Weight) -> Option { - if let Some((id, prev_amount, units_per_second)) = self.1.clone() { - let weight = weight.min(self.0); - self.0 -= weight; - let amount = units_per_second * (weight as u128) / (WEIGHT_PER_SECOND as u128); - self.1 = Some(( - id.clone(), - prev_amount.saturating_sub(amount), - units_per_second, - )); - Some(MultiAsset { - fun: Fungibility::Fungible(amount), - id: xcmAssetId::Concrete(id.clone()), - }) - } else { - None - } - } -} - -/// Deal with spent fees, deposit them as dictated by R -impl< - AssetType: From + Clone, - AssetIdInfoGetter: UnitsToWeightRatio, - R: TakeRevenue, - > Drop for FirstAssetTrader -{ - fn drop(&mut self) { - if let Some((id, amount, _)) = self.1.clone() { - R::take_revenue((id, amount).into()); - } - } -} - -/// This struct offers uses RelativeReserveProvider to output relative views of multilocations -/// However, additionally accepts a MultiLocation that aims at representing the chain part -/// (parent: 1, Parachain(paraId)) of the absolute representation of our chain. -/// If a token reserve matches against this absolute view, we return Some(MultiLocation::here()) -/// This helps users by preventing errors when they try to transfer a token through xtokens -/// to our chain (either inserting the relative or the absolute value). -pub struct AbsoluteAndRelativeReserve(PhantomData); -impl Reserve for AbsoluteAndRelativeReserve -where - AbsoluteMultiLocation: Get, -{ - fn reserve(asset: &MultiAsset) -> Option { - RelativeReserveProvider::reserve(asset).map(|relative_reserve| { - if relative_reserve == AbsoluteMultiLocation::get() { - MultiLocation::here() - } else { - relative_reserve - } - }) - } -} - -// Defines the trait to obtain a generic AssetType from a generic AssetId and vice versa -pub trait AssetTypeGetter { - // Get asset type from assetId - fn get_asset_type(asset_id: AssetId) -> Option; - - // Get assetId from assetType - fn get_asset_id(asset_type: AssetType) -> Option; -} - -// Defines the trait to obtain the units per second of a give asset_type for local execution -// This parameter will be used to charge for fees upon asset_type deposit -pub trait UnitsToWeightRatio { - // Whether payment in a particular asset_type is suppotrted - fn payment_is_supported(asset_type: AssetType) -> bool; - // Get units per second from asset type - fn get_units_per_second(asset_type: AssetType) -> Option; -} - -// The utility calls that need to be implemented as part of -// this pallet -#[derive(Debug, PartialEq, Eq)] -pub enum UtilityAvailableCalls { - AsDerivative(u16, Vec), -} - -// Trait that the ensures we can encode a call with utility functions. -// With this trait we ensure that the user cannot control entirely the call -// to be performed in the destination chain. It only can control the call inside -// the as_derivative extrinsic, and thus, this call can only be dispatched from the -// derivative account -pub trait UtilityEncodeCall { - fn encode_call(self, call: UtilityAvailableCalls) -> Vec; -} - -// Trait to ensure we can retrieve the destination if a given type -// It must implement UtilityEncodeCall -// We separate this in two traits to be able to implement UtilityEncodeCall separately -// for different runtimes of our choice -pub trait XcmTransact: UtilityEncodeCall { - /// Encode call from the relay. - fn destination(self) -> MultiLocation; -} - -/// This trait ensure we can convert AccountIds to CurrencyIds -/// We will require Runtime to have this trait implemented -pub trait AccountIdToCurrencyId { - // Get assetId from account - fn account_to_currency_id(account: Account) -> Option; -} - -/// XCM fee depositor to which we implement the TakeRevenue trait -/// It receives a fungibles::Mutate implemented argument, a matcher to convert MultiAsset into -/// AssetId and amount, and the fee receiver account -pub struct XcmFeesToAccount( - PhantomData<(Assets, Matcher, AccountId, ReceiverAccount)>, -); -impl< - Assets: Mutate, - Matcher: MatchesFungibles, - AccountId: Clone, - ReceiverAccount: Get, - > TakeRevenue for XcmFeesToAccount -{ - fn take_revenue(revenue: MultiAsset) { - match Matcher::matches_fungibles(&revenue) { - Ok((asset_id, amount)) => { - if !amount.is_zero() { - let ok = Assets::mint_into(asset_id, &ReceiverAccount::get(), amount).is_ok(); - debug_assert!(ok, "`mint_into` cannot generally fail; qed"); - } - } - Err(_) => log::debug!( - target: "xcm", - "take revenue failed matching fungible" - ), - } - } -} +mod ethereum_xcm; +pub use ethereum_xcm::*; diff --git a/primitives/xcm/src/location_conversion.rs b/primitives/xcm/src/location_conversion.rs new file mode 100644 index 0000000000..afc318d343 --- /dev/null +++ b/primitives/xcm/src/location_conversion.rs @@ -0,0 +1,43 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use parity_scale_codec::Encode; +use sp_io::hashing::blake2_256; +use sp_std::borrow::Borrow; +use sp_std::marker::PhantomData; +use xcm::latest::MultiLocation; + +use xcm_executor::traits::Convert; + +// Struct that converts a given MultiLocation into a 20 bytes account id by hashing +// with blake2_256 and taking the first 20 bytes +pub struct Account20Hash(PhantomData); +impl + Into<[u8; 20]> + Clone> Convert + for Account20Hash +{ + fn convert_ref(location: impl Borrow) -> Result { + let hash: [u8; 32] = ("multiloc", location.borrow()) + .borrow() + .using_encoded(blake2_256); + let mut account_id = [0u8; 20]; + account_id.copy_from_slice(&hash[0..20]); + Ok(account_id.into()) + } + + fn reverse_ref(_: impl Borrow) -> Result { + Err(()) + } +} diff --git a/primitives/xcm/src/origin_conversion.rs b/primitives/xcm/src/origin_conversion.rs new file mode 100644 index 0000000000..6ccb5ebe7b --- /dev/null +++ b/primitives/xcm/src/origin_conversion.rs @@ -0,0 +1,84 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +use frame_support::traits::{Get, OriginTrait}; +use orml_traits::location::{RelativeReserveProvider, Reserve}; +use sp_std::{convert::TryInto, marker::PhantomData}; +use xcm::latest::{Junction::AccountKey20, Junctions::*, MultiAsset, MultiLocation, NetworkId}; + +/// Instructs how to convert a 20 byte accountId into a MultiLocation +pub struct AccountIdToMultiLocation(sp_std::marker::PhantomData); +impl sp_runtime::traits::Convert + for AccountIdToMultiLocation +where + AccountId: Into<[u8; 20]>, +{ + fn convert(account: AccountId) -> MultiLocation { + MultiLocation { + parents: 0, + interior: X1(AccountKey20 { + network: NetworkId::Any, + key: account.into(), + }), + } + } +} + +// Convert a local Origin (i.e., a signed 20 byte account Origin) to a Multilocation +pub struct SignedToAccountId20( + sp_std::marker::PhantomData<(Origin, AccountId, Network)>, +); +impl, Network: Get> + xcm_executor::traits::Convert + for SignedToAccountId20 +where + Origin::PalletsOrigin: From> + + TryInto, Error = Origin::PalletsOrigin>, +{ + fn convert(o: Origin) -> Result { + o.try_with_caller(|caller| match caller.try_into() { + Ok(frame_system::RawOrigin::Signed(who)) => Ok(AccountKey20 { + key: who.into(), + network: Network::get(), + } + .into()), + Ok(other) => Err(other.into()), + Err(other) => Err(other), + }) + } +} + +/// This struct offers uses RelativeReserveProvider to output relative views of multilocations +/// However, additionally accepts a MultiLocation that aims at representing the chain part +/// (parent: 1, Parachain(paraId)) of the absolute representation of our chain. +/// If a token reserve matches against this absolute view, we return Some(MultiLocation::here()) +/// This helps users by preventing errors when they try to transfer a token through xtokens +/// to our chain (either inserting the relative or the absolute value). +pub struct AbsoluteAndRelativeReserve(PhantomData); +impl Reserve for AbsoluteAndRelativeReserve +where + AbsoluteMultiLocation: Get, +{ + fn reserve(asset: &MultiAsset) -> Option { + RelativeReserveProvider::reserve(asset).map(|relative_reserve| { + if relative_reserve == AbsoluteMultiLocation::get() { + MultiLocation::here() + } else { + relative_reserve + } + }) + } +} diff --git a/primitives/xcm/src/transactor_traits.rs b/primitives/xcm/src/transactor_traits.rs new file mode 100644 index 0000000000..1776d7d46e --- /dev/null +++ b/primitives/xcm/src/transactor_traits.rs @@ -0,0 +1,42 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License + +use sp_std::vec::Vec; +use xcm::latest::MultiLocation; + +// The utility calls that need to be implemented as part of +// this pallet +#[derive(Debug, PartialEq, Eq)] +pub enum UtilityAvailableCalls { + AsDerivative(u16, Vec), +} + +// Trait that the ensures we can encode a call with utility functions. +// With this trait we ensure that the user cannot control entirely the call +// to be performed in the destination chain. It only can control the call inside +// the as_derivative extrinsic, and thus, this call can only be dispatched from the +// derivative account +pub trait UtilityEncodeCall { + fn encode_call(self, call: UtilityAvailableCalls) -> Vec; +} + +// Trait to ensure we can retrieve the destination if a given type +// It must implement UtilityEncodeCall +// We separate this in two traits to be able to implement UtilityEncodeCall separately +// for different runtimes of our choice +pub trait XcmTransact: UtilityEncodeCall { + /// Encode call from the relay. + fn destination(self) -> MultiLocation; +} diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 3577b41cbd..0d0ea524d5 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "runtime-common" +name = "moonbeam-runtime-common" authors = [ "PureStake" ] description = "Common code shared between runtimes" edition = "2021" @@ -12,49 +12,52 @@ impl-trait-for-tuples = "0.2.1" log = "0.4" # Moonbeam -pallet-asset-manager = { path = "../../pallets/asset-manager", optional = true, default-features = false } +pallet-asset-manager = { path = "../../pallets/asset-manager", default-features = false } pallet-author-mapping = { path = "../../pallets/author-mapping", default-features = false } pallet-migrations = { path = "../../pallets/migrations", default-features = false } -parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } -xcm-transactor = { path = "../../pallets/xcm-transactor", optional = true, default-features = false } +pallet-parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } +pallet-randomness = { path = "../../pallets/randomness", default-features = false } +pallet-xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } # Substrate -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-collective = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-scheduler = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Nimbus -pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Polkadot -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [features] std = [ "frame-support/std", "pallet-asset-manager/std", + "pallet-author-inherent/std", "pallet-author-mapping/std", "pallet-base-fee/std", "pallet-evm/std", "pallet-migrations/std", + "pallet-parachain-staking/std", + "pallet-randomness/std", "pallet-scheduler/std", - "parachain-staking/std", + "pallet-xcm-transactor/std", "sp-core/std", "sp-runtime/std", "sp-std/std", - "xcm-transactor/std", "xcm/std", ] try-runtime = [ "frame-support/try-runtime", "pallet-migrations/try-runtime", ] -xcm-support = [ "pallet-asset-manager", "xcm", "xcm-transactor" ] diff --git a/runtime/common/src/apis.rs b/runtime/common/src/apis.rs index db9c51ce41..2c8f0b6f42 100644 --- a/runtime/common/src/apis.rs +++ b/runtime/common/src/apis.rs @@ -195,11 +195,13 @@ macro_rules! impl_runtime_apis_plus_common { } fn account_basic(address: H160) -> EVMAccount { - EVM::account_basic(&address) + let (account, _) = EVM::account_basic(&address); + account } fn gas_price() -> U256 { - ::FeeCalculator::min_gas_price() + let (gas_price, _) = ::FeeCalculator::min_gas_price(); + gas_price } fn account_code_at(address: H160) -> Vec { @@ -236,6 +238,7 @@ macro_rules! impl_runtime_apis_plus_common { None }; let is_transactional = false; + let validate = true; ::Runner::call( from, to, @@ -245,10 +248,11 @@ macro_rules! impl_runtime_apis_plus_common { max_fee_per_gas, max_priority_fee_per_gas, nonce, - Vec::new(), + access_list.unwrap_or_default(), is_transactional, + validate, config.as_ref().unwrap_or(::config()), - ).map_err(|err| err.into()) + ).map_err(|err| err.error.into()) } fn create( @@ -270,6 +274,7 @@ macro_rules! impl_runtime_apis_plus_common { None }; let is_transactional = false; + let validate = true; #[allow(clippy::or_fun_call)] // suggestion not helpful here ::Runner::create( from, @@ -279,10 +284,11 @@ macro_rules! impl_runtime_apis_plus_common { max_fee_per_gas, max_priority_fee_per_gas, nonce, - Vec::new(), + access_list.unwrap_or_default(), is_transactional, + validate, config.as_ref().unwrap_or(::config()), - ).map_err(|err| err.into()) + ).map_err(|err| err.error.into()) } fn current_transaction_statuses() -> Option> { @@ -372,7 +378,7 @@ macro_rules! impl_runtime_apis_plus_common { // Because the staking solution calculates the next staking set at the beginning // of the first block in the new round, the only way to accurately predict the // authors is to compute the selection during prediction. - if parachain_staking::Pallet::::round().should_update(block_number) { + if pallet_parachain_staking::Pallet::::round().should_update(block_number) { // get author account id use nimbus_primitives::AccountLookup; let author_account_id = if let Some(account) = @@ -385,7 +391,7 @@ macro_rules! impl_runtime_apis_plus_common { // predict eligibility post-selection by computing selection results now let (eligible, _) = pallet_author_slot_filter::compute_pseudo_random_subset::( - parachain_staking::Pallet::::compute_top_candidates(), + pallet_parachain_staking::Pallet::::compute_top_candidates(), &slot ); eligible.contains(&author_account_id) @@ -421,14 +427,16 @@ macro_rules! impl_runtime_apis_plus_common { use frame_support::traits::StorageInfoTrait; use frame_system_benchmarking::Pallet as SystemBench; use pallet_crowdloan_rewards::Pallet as PalletCrowdloanRewardsBench; - use parachain_staking::Pallet as ParachainStakingBench; + use pallet_parachain_staking::Pallet as ParachainStakingBench; use pallet_author_mapping::Pallet as PalletAuthorMappingBench; use pallet_author_slot_filter::Pallet as PalletAuthorSlotFilter; use pallet_moonbeam_orbiters::Pallet as PalletMoonbeamOrbiters; - #[cfg(feature = "moonbase-runtime-benchmarks")] + use pallet_author_inherent::Pallet as PalletAuthorInherent; use pallet_asset_manager::Pallet as PalletAssetManagerBench; + use pallet_xcm_transactor::Pallet as XcmTransactorBench; + #[cfg(feature = "moonbase-runtime-benchmarks")] - use xcm_transactor::Pallet as XcmTransactorBench; + use pallet_randomness::Pallet as RandomnessBench; let mut list = Vec::::new(); @@ -438,11 +446,13 @@ macro_rules! impl_runtime_apis_plus_common { list_benchmark!(list, extra, pallet_author_mapping, PalletAuthorMappingBench::); list_benchmark!(list, extra, pallet_author_slot_filter, PalletAuthorSlotFilter::); list_benchmark!(list, extra, pallet_moonbeam_orbiters, PalletMoonbeamOrbiters::); - #[cfg(feature = "moonbase-runtime-benchmarks")] + list_benchmark!(list, extra, pallet_author_inherent, PalletAuthorInherent::); list_benchmark!(list, extra, pallet_asset_manager, PalletAssetManagerBench::); - #[cfg(feature = "moonbase-runtime-benchmarks")] list_benchmark!(list, extra, xcm_transactor, XcmTransactorBench::); + #[cfg(feature = "moonbase-runtime-benchmarks")] + list_benchmark!(list, extra, pallet_randomness, RandomnessBench::); + let storage_info = AllPalletsWithSystem::storage_info(); return (list, storage_info) @@ -459,14 +469,16 @@ macro_rules! impl_runtime_apis_plus_common { impl frame_system_benchmarking::Config for Runtime {} use pallet_crowdloan_rewards::Pallet as PalletCrowdloanRewardsBench; - use parachain_staking::Pallet as ParachainStakingBench; + use pallet_parachain_staking::Pallet as ParachainStakingBench; use pallet_author_mapping::Pallet as PalletAuthorMappingBench; use pallet_author_slot_filter::Pallet as PalletAuthorSlotFilter; use pallet_moonbeam_orbiters::Pallet as PalletMoonbeamOrbiters; - #[cfg(feature = "moonbase-runtime-benchmarks")] + use pallet_author_inherent::Pallet as PalletAuthorInherent; use pallet_asset_manager::Pallet as PalletAssetManagerBench; + use pallet_xcm_transactor::Pallet as XcmTransactorBench; + #[cfg(feature = "moonbase-runtime-benchmarks")] - use xcm_transactor::Pallet as XcmTransactorBench; + use pallet_randomness::Pallet as RandomnessBench; let whitelist: Vec = vec![ // Block Number @@ -515,6 +527,10 @@ macro_rules! impl_runtime_apis_plus_common { hex_literal::hex!( "a686a3043d0adcf2fa655e57bc595a78" "13792e785168f725b60e2969c7fc2552") .to_vec().into(), + // ParachainInfo ParachainId + hex_literal::hex!( "0d715f2646c8f85767b5d2764bb27826" + "04a74d81251e398fd8a0a4d55023bb3f") + .to_vec().into(), ]; @@ -552,14 +568,18 @@ macro_rules! impl_runtime_apis_plus_common { pallet_moonbeam_orbiters, PalletMoonbeamOrbiters:: ); - #[cfg(feature = "moonbase-runtime-benchmarks")] + add_benchmark!( + params, + batches, + pallet_author_inherent, + PalletAuthorInherent:: + ); add_benchmark!( params, batches, pallet_asset_manager, PalletAssetManagerBench:: ); - #[cfg(feature = "moonbase-runtime-benchmarks")] add_benchmark!( params, batches, @@ -567,6 +587,14 @@ macro_rules! impl_runtime_apis_plus_common { XcmTransactorBench:: ); + #[cfg(feature = "moonbase-runtime-benchmarks")] + add_benchmark!( + params, + batches, + pallet_randomness, + RandomnessBench:: + ); + if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()); } diff --git a/runtime/common/src/impl_moonbeam_xcm_call.rs b/runtime/common/src/impl_moonbeam_xcm_call.rs new file mode 100644 index 0000000000..b1e51076e9 --- /dev/null +++ b/runtime/common/src/impl_moonbeam_xcm_call.rs @@ -0,0 +1,47 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +#[macro_export] +macro_rules! impl_moonbeam_xcm_call { + {} => { + + pub struct MoonbeamCall; + impl CallDispatcher for MoonbeamCall { + fn dispatch( + call: Call, + origin: Origin, + ) -> Result, DispatchErrorWithPostInfo>> { + if let Ok(raw_origin) = TryInto::>::try_into(origin.clone().caller) { + match (call.clone(), raw_origin) { + ( + Call::EthereumXcm(pallet_ethereum_xcm::Call::transact { .. }), + RawOrigin::Signed(account_id) + ) => { + return Call::dispatch( + call, + pallet_ethereum_xcm::Origin::XcmEthereumTransaction( + account_id.into() + ).into() + ); + }, + _ => {} + } + } + Call::dispatch(call, origin) + } + } + } +} diff --git a/runtime/common/src/impl_on_charge_evm_transaction.rs b/runtime/common/src/impl_on_charge_evm_transaction.rs new file mode 100644 index 0000000000..30e4ac9295 --- /dev/null +++ b/runtime/common/src/impl_on_charge_evm_transaction.rs @@ -0,0 +1,64 @@ +// Copyright 2019-2022 PureStake Inc. +// This file is part of Moonbeam. + +// Moonbeam is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Moonbeam is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Moonbeam. If not, see . + +#[macro_export] +macro_rules! impl_on_charge_evm_transaction { + {} => { + type CurrencyAccountId = ::AccountId; + + type BalanceFor = + <::Currency as CurrencyT>>::Balance; + + type PositiveImbalanceFor = + <::Currency as CurrencyT>>::PositiveImbalance; + + type NegativeImbalanceFor = + <::Currency as CurrencyT>>::NegativeImbalance; + + pub struct OnChargeEVMTransaction(sp_std::marker::PhantomData); + impl OnChargeEVMTransactionT for OnChargeEVMTransaction + where + T: pallet_evm::Config, + PositiveImbalanceFor: Imbalance, Opposite = NegativeImbalanceFor>, + NegativeImbalanceFor: Imbalance, Opposite = PositiveImbalanceFor>, + OU: OnUnbalanced>, + U256: UniqueSaturatedInto> + { + type LiquidityInfo = Option>; + + fn withdraw_fee(who: &H160, fee: U256) -> Result> { + EVMCurrencyAdapter::<::Currency, ()>::withdraw_fee(who, fee) + } + + fn correct_and_deposit_fee( + who: &H160, + corrected_fee: U256, + base_fee: U256, + already_withdrawn: Self::LiquidityInfo, + ) -> Self::LiquidityInfo { + ::Currency, OU> as OnChargeEVMTransactionT< + T, + >>::correct_and_deposit_fee(who, corrected_fee, base_fee, already_withdrawn) + } + + fn pay_priority_fee(tip: Self::LiquidityInfo) { + if let Some(tip) = tip { + OU::on_unbalanced(tip); + } + } + } + } +} diff --git a/runtime/common/src/impl_self_contained_call.rs b/runtime/common/src/impl_self_contained_call.rs index e63fbb38ff..5be78cb2b3 100644 --- a/runtime/common/src/impl_self_contained_call.rs +++ b/runtime/common/src/impl_self_contained_call.rs @@ -38,12 +38,12 @@ macro_rules! impl_self_contained_call { fn validate_self_contained( &self, - signed_info: &Self::SignedInfo + signed_info: &Self::SignedInfo, + dispatch_info: &DispatchInfoOf, + len: usize, ) -> Option { match self { - Call::Ethereum(ref call) => { - Some(validate_self_contained_inner(&self, &call, signed_info)) - } + Call::Ethereum(call) => call.validate_self_contained(signed_info, dispatch_info, len), _ => None, } } @@ -51,9 +51,11 @@ macro_rules! impl_self_contained_call { fn pre_dispatch_self_contained( &self, info: &Self::SignedInfo, + dispatch_info: &DispatchInfoOf, + len: usize, ) -> Option> { match self { - Call::Ethereum(call) => call.pre_dispatch_self_contained(info), + Call::Ethereum(call) => call.pre_dispatch_self_contained(info, dispatch_info, len), _ => None, } } @@ -72,40 +74,5 @@ macro_rules! impl_self_contained_call { } } } - - fn validate_self_contained_inner( - call: &Call, - eth_call: &pallet_ethereum::Call, - signed_info: &::SignedInfo - ) -> TransactionValidity { - if let pallet_ethereum::Call::transact { ref transaction } = eth_call { - // Previously, ethereum transactions were contained in an unsigned - // extrinsic, we now use a new form of dedicated extrinsic defined by - // frontier, but to keep the same behavior as before, we must perform - // the controls that were performed on the unsigned extrinsic. - use sp_runtime::traits::SignedExtension as _; - let input_len = match transaction { - pallet_ethereum::Transaction::Legacy(t) => t.input.len(), - pallet_ethereum::Transaction::EIP2930(t) => t.input.len(), - pallet_ethereum::Transaction::EIP1559(t) => t.input.len(), - }; - let extra_validation = SignedExtra::validate_unsigned( - call, - &call.get_dispatch_info(), - input_len, - )?; - // Then, do the controls defined by the ethereum pallet. - use fp_self_contained::SelfContainedCall as _; - let self_contained_validation = eth_call - .validate_self_contained(signed_info) - .ok_or(TransactionValidityError::Invalid(InvalidTransaction::BadProof))??; - - Ok(extra_validation.combine_with(self_contained_validation)) - } else { - Err(TransactionValidityError::Unknown( - sp_runtime::transaction_validity::UnknownTransaction::CannotLookup - )) - } - } } } diff --git a/runtime/common/src/lib.rs b/runtime/common/src/lib.rs index 65503bd30c..4f39782d56 100644 --- a/runtime/common/src/lib.rs +++ b/runtime/common/src/lib.rs @@ -19,6 +19,8 @@ use sp_core::H160; mod apis; +mod impl_moonbeam_xcm_call; +mod impl_on_charge_evm_transaction; mod impl_self_contained_call; pub mod migrations; diff --git a/runtime/common/src/migrations.rs b/runtime/common/src/migrations.rs index 971e130d64..21153e92cc 100644 --- a/runtime/common/src/migrations.rs +++ b/runtime/common/src/migrations.rs @@ -1,4 +1,4 @@ -// Copyright 2019-2020 PureStake Inc. +// Copyright 2019-2022 PureStake Inc. // This file is part of Moonbeam. // Moonbeam is free software: you can redistribute it and/or modify @@ -24,7 +24,6 @@ use frame_support::{ traits::{Get, OnRuntimeUpgrade, PalletInfoAccess}, weights::Weight, }; -#[cfg(feature = "xcm-support")] use pallet_asset_manager::{ migrations::{ ChangeStateminePrefixes, PopulateAssetTypeIdStorage, PopulateSupportedFeePaymentAssets, @@ -32,28 +31,55 @@ use pallet_asset_manager::{ }, Config as AssetManagerConfig, }; -use pallet_author_mapping::{migrations::AddKeysToRegistrationInfo, Config as AuthorMappingConfig}; +use pallet_author_mapping::{ + migrations::{AddAccountIdToNimbusLookup, AddKeysToRegistrationInfo}, + Config as AuthorMappingConfig, +}; use pallet_author_slot_filter::migration::EligibleRatioToEligiblityCount; use pallet_author_slot_filter::Config as AuthorSlotFilterConfig; use pallet_base_fee::Config as BaseFeeConfig; use pallet_migrations::{GetMigrations, Migration}; -use parachain_staking::{ +use pallet_parachain_staking::{ migrations::{ - IncreaseMaxDelegationsPerCandidate, PatchIncorrectDelegationSums, PurgeStaleStorage, - SplitCandidateStateToDecreasePoV, SplitDelegatorStateIntoDelegationScheduledRequests, + PatchIncorrectDelegationSums, PurgeStaleStorage, + SplitDelegatorStateIntoDelegationScheduledRequests, }, Config as ParachainStakingConfig, }; +use pallet_xcm_transactor::{ + migrations::TransactSignedWeightAndFeePerSecond, Config as XcmTransactorConfig, +}; use sp_runtime::Permill; use sp_std::{marker::PhantomData, prelude::*}; -#[cfg(feature = "xcm-support")] use xcm::latest::MultiLocation; -#[cfg(feature = "xcm-support")] -use xcm_transactor::{migrations::MaxTransactWeight, Config as XcmTransactorConfig}; /// This module acts as a registry where each migration is defined. Each migration should implement /// the "Migration" trait declared in the pallet-migrations crate. +/// A moonbeam migration wrapping the similarly named migration in pallet-author-mapping +pub struct AuthorMappingAddAccountIdToNimbusLookup(PhantomData); +impl Migration for AuthorMappingAddAccountIdToNimbusLookup { + fn friendly_name(&self) -> &str { + "MM_Author_Mapping_AddAccountIdToNimbusLookup" + } + + fn migrate(&self, _available_weight: Weight) -> Weight { + AddAccountIdToNimbusLookup::::on_runtime_upgrade() + } + + /// Run a standard pre-runtime test. This works the same way as in a normal runtime upgrade. + #[cfg(feature = "try-runtime")] + fn pre_upgrade(&self) -> Result<(), &'static str> { + AddAccountIdToNimbusLookup::::pre_upgrade() + } + + /// Run a standard post-runtime test. This works the same way as in a normal runtime upgrade. + #[cfg(feature = "try-runtime")] + fn post_upgrade(&self) -> Result<(), &'static str> { + AddAccountIdToNimbusLookup::::post_upgrade() + } +} + /// A moonbeam migration wrapping the similarly named migration in pallet-author-mapping pub struct AuthorMappingAddKeysToRegistrationInfo(PhantomData); impl Migration for AuthorMappingAddKeysToRegistrationInfo { @@ -102,7 +128,7 @@ impl Migration for ParachainStakingPatchIncorrectDele } } -/// Staking split delegator state into [parachain_staking::DelegatorScheduledRequests] +/// Staking split delegator state into [pallet_parachain_staking::DelegatorScheduledRequests] pub struct ParachainStakingSplitDelegatorStateIntoDelegationScheduledRequests(PhantomData); impl Migration for ParachainStakingSplitDelegatorStateIntoDelegationScheduledRequests @@ -128,56 +154,6 @@ impl Migration } } -/// Staking split candidate state -pub struct ParachainStakingSplitCandidateState(PhantomData); -impl Migration for ParachainStakingSplitCandidateState { - fn friendly_name(&self) -> &str { - "MM_Parachain_Staking_Split_Candidate_State" - } - - fn migrate(&self, _available_weight: Weight) -> Weight { - SplitCandidateStateToDecreasePoV::::on_runtime_upgrade() - } - - /// Run a standard pre-runtime test. This works the same way as in a normal runtime upgrade. - #[cfg(feature = "try-runtime")] - fn pre_upgrade(&self) -> Result<(), &'static str> { - SplitCandidateStateToDecreasePoV::::pre_upgrade() - } - - /// Run a standard post-runtime test. This works the same way as in a normal runtime upgrade. - #[cfg(feature = "try-runtime")] - fn post_upgrade(&self) -> Result<(), &'static str> { - SplitCandidateStateToDecreasePoV::::post_upgrade() - } -} - -/// Staking increase max counted delegations per collator candidate -pub struct ParachainStakingIncreaseMaxDelegationsPerCandidate(PhantomData); -impl Migration - for ParachainStakingIncreaseMaxDelegationsPerCandidate -{ - fn friendly_name(&self) -> &str { - "MM_Parachain_Staking_IncreaseMaxDelegationsPerCandidate_v2" - } - - fn migrate(&self, _available_weight: Weight) -> Weight { - IncreaseMaxDelegationsPerCandidate::::on_runtime_upgrade() - } - - /// Run a standard pre-runtime test. This works the same way as in a normal runtime upgrade. - #[cfg(feature = "try-runtime")] - fn pre_upgrade(&self) -> Result<(), &'static str> { - IncreaseMaxDelegationsPerCandidate::::pre_upgrade() - } - - /// Run a standard post-runtime test. This works the same way as in a normal runtime upgrade. - #[cfg(feature = "try-runtime")] - fn post_upgrade(&self) -> Result<(), &'static str> { - IncreaseMaxDelegationsPerCandidate::::post_upgrade() - } -} - // /// Staking transition from automatic to manual exits, delay bond_{more, less} requests // pub struct ParachainStakingManualExits(PhantomData); // impl Migration for ParachainStakingManualExits { @@ -391,34 +367,54 @@ impl Migration for MigrateBaseFeePerGas { } } -#[cfg(feature = "xcm-support")] -pub struct XcmTransactorMaxTransactWeight(PhantomData); -#[cfg(feature = "xcm-support")] -impl Migration for XcmTransactorMaxTransactWeight { +// #[cfg(feature = "xcm-support")] +// pub struct XcmTransactorMaxTransactWeight(PhantomData); +// #[cfg(feature = "xcm-support")] +// impl Migration for XcmTransactorMaxTransactWeight { +// fn friendly_name(&self) -> &str { +// "MM_Xcm_Transactor_MaxTransactWeight" +// } + +// fn migrate(&self, _available_weight: Weight) -> Weight { +// MaxTransactWeight::::on_runtime_upgrade() +// } + +// /// Run a standard pre-runtime test. This works the same way as in a normal runtime upgrade. +// #[cfg(feature = "try-runtime")] +// fn pre_upgrade(&self) -> Result<(), &'static str> { +// MaxTransactWeight::::pre_upgrade() +// } + +// /// Run a standard post-runtime test. This works the same way as in a normal runtime upgrade. +// #[cfg(feature = "try-runtime")] +// fn post_upgrade(&self) -> Result<(), &'static str> { +// MaxTransactWeight::::post_upgrade() +// } +// } + +pub struct XcmTransactorTransactSignedWeightAndFeePerSecond(PhantomData); +impl Migration for XcmTransactorTransactSignedWeightAndFeePerSecond { fn friendly_name(&self) -> &str { - "MM_Xcm_Transactor_MaxTransactWeight" + "MM_Xcm_Transactor_TransactSignedWeightAndFeePerSecond" } fn migrate(&self, _available_weight: Weight) -> Weight { - MaxTransactWeight::::on_runtime_upgrade() + TransactSignedWeightAndFeePerSecond::::on_runtime_upgrade() } /// Run a standard pre-runtime test. This works the same way as in a normal runtime upgrade. #[cfg(feature = "try-runtime")] fn pre_upgrade(&self) -> Result<(), &'static str> { - MaxTransactWeight::::pre_upgrade() + TransactSignedWeightAndFeePerSecond::::pre_upgrade() } /// Run a standard post-runtime test. This works the same way as in a normal runtime upgrade. #[cfg(feature = "try-runtime")] fn post_upgrade(&self) -> Result<(), &'static str> { - MaxTransactWeight::::post_upgrade() + TransactSignedWeightAndFeePerSecond::::post_upgrade() } } - -#[cfg(feature = "xcm-support")] pub struct AssetManagerUnitsWithAssetType(PhantomData); -#[cfg(feature = "xcm-support")] impl Migration for AssetManagerUnitsWithAssetType { fn friendly_name(&self) -> &str { "MM_Asset_Manager_UnitsWithAssetType" @@ -441,9 +437,7 @@ impl Migration for AssetManagerUnitsWithAssetType { } } -#[cfg(feature = "xcm-support")] pub struct AssetManagerPopulateAssetTypeIdStorage(PhantomData); -#[cfg(feature = "xcm-support")] impl Migration for AssetManagerPopulateAssetTypeIdStorage { fn friendly_name(&self) -> &str { "MM_Asset_Manager_PopulateAssetTypeIdStorage" @@ -466,11 +460,9 @@ impl Migration for AssetManagerPopulateAssetTypeIdStorage } } -#[cfg(feature = "xcm-support")] pub struct AssetManagerChangeStateminePrefixes( PhantomData<(T, StatemineParaIdInfo, StatemineAssetsPalletInfo)>, ); -#[cfg(feature = "xcm-support")] impl Migration for AssetManagerChangeStateminePrefixes where @@ -503,10 +495,7 @@ where ChangeStateminePrefixes::::post_upgrade() } } - -#[cfg(feature = "xcm-support")] pub struct XcmPaymentSupportedAssets(PhantomData); -#[cfg(feature = "xcm-support")] impl Migration for XcmPaymentSupportedAssets { fn friendly_name(&self) -> &str { "MM_Xcm_Payment_Supported_Assets" @@ -581,7 +570,7 @@ pub struct CommonMigrations(PhantomData<(Runtime, Counci impl GetMigrations for CommonMigrations where Runtime: pallet_author_mapping::Config, - Runtime: parachain_staking::Config, + Runtime: pallet_parachain_staking::Config, Runtime: pallet_scheduler::Config, Runtime: pallet_base_fee::Config, Runtime: AuthorSlotFilterConfig, @@ -611,50 +600,17 @@ where // TODO: this is a lot of allocation to do upon every get() call. this *should* be avoided // except when pallet_migrations undergoes a runtime upgrade -- but TODO: review - let migration_author_slot_filter_eligible_ratio_to_eligibility_count = - AuthorSlotFilterEligibleRatioToEligiblityCount::(Default::default()); - let migration_author_mapping_add_keys_to_registration_info = - AuthorMappingAddKeysToRegistrationInfo::(Default::default()); - let staking_delegator_state_requests = - ParachainStakingSplitDelegatorStateIntoDelegationScheduledRequests::( - Default::default(), - ); - vec![ - // completed in runtime 800 - // Box::new(migration_author_mapping_twox_to_blake), - // completed in runtime 900 - // completed in runtime 1000 - // Box::new(migration_parachain_staking_purge_stale_storage), - // completed in runtime 1000 - // Box::new(migration_parachain_staking_manual_exits), - // completed in runtime 1101 - // Box::new(migration_parachain_staking_increase_max_delegations_per_candidate), - // completed in runtime 1201 - // Box::new(migration_parachain_staking_split_candidate_state), - // completed in runtime 1300 - // Box::new(migration_scheduler_v3), - // completed in runtime 1300 - // Box::new(migration_parachain_staking_patch_incorrect_delegation_sums), - // completed in runtime 1300 - // Box::new(migration_base_fee), - Box::new(migration_author_slot_filter_eligible_ratio_to_eligibility_count), - Box::new(migration_author_mapping_add_keys_to_registration_info), - Box::new(staking_delegator_state_requests), - ] - } -} - -#[cfg(feature = "xcm-support")] -pub struct XcmMigrations(PhantomData); + // let migration_author_slot_filter_eligible_ratio_to_eligibility_count = + // AuthorSlotFilterEligibleRatioToEligiblityCount::(Default::default()); + // let migration_author_mapping_add_keys_to_registration_info = + // AuthorMappingAddKeysToRegistrationInfo::(Default::default()); + // let staking_delegator_state_requests = + // ParachainStakingSplitDelegatorStateIntoDelegationScheduledRequests::( + // Default::default(), + // ); + // let migration_author_mapping_add_account_id_to_nimbus_lookup = + // AuthorMappingAddAccountIdToNimbusLookup::(Default::default()); -#[cfg(feature = "xcm-support")] -impl GetMigrations for XcmMigrations -where - Runtime: xcm_transactor::Config + pallet_migrations::Config + pallet_asset_manager::Config, - ::ForeignAssetType: - Into> + From, -{ - fn get_migrations() -> Vec> { // let xcm_transactor_max_weight = // XcmTransactorMaxTransactWeight::(Default::default()); @@ -672,10 +628,18 @@ where // let xcm_supported_assets = XcmPaymentSupportedAssets::(Default::default()); - // TODO: this is a lot of allocation to do upon every get() call. this *should* be avoided - // except when pallet_migrations undergoes a runtime upgrade -- but TODO: review - vec![ + // completed in runtime 800 + // Box::new(migration_author_mapping_twox_to_blake), + // completed in runtime 900 + // completed in runtime 1000 + // Box::new(migration_parachain_staking_purge_stale_storage), + // completed in runtime 1000 + // Box::new(migration_parachain_staking_manual_exits), + // completed in runtime 1101 + // Box::new(migration_parachain_staking_increase_max_delegations_per_candidate), + // completed in runtime 1201 + // Box::new(migration_parachain_staking_split_candidate_state), // completed in runtime 1201 // Box::new(xcm_transactor_max_weight), // completed in runtime 1201 @@ -685,7 +649,22 @@ where // completed in runtime 1201 // Box::new(asset_manager_populate_asset_type_id_storage), // completed in runtime 1300 + // Box::new(migration_scheduler_v3), + // completed in runtime 1300 + // Box::new(migration_parachain_staking_patch_incorrect_delegation_sums), + // completed in runtime 1300 + // Box::new(migration_base_fee), + // completed in runtime 1300 // Box::new(xcm_supported_assets), + // completed in runtime 1500 + // Box::new(migration_author_slot_filter_eligible_ratio_to_eligibility_count), + // Box::new(migration_author_mapping_add_keys_to_registration_info), + // Box::new(staking_delegator_state_requests), + + // completed in runtime 1600 + // Box::new(migration_author_mapping_add_account_id_to_nimbus_lookup), + // completed in runtime 1600 + // Box::new(xcm_transactor_transact_signed), ] } } diff --git a/runtime/evm_tracer/Cargo.toml b/runtime/evm_tracer/Cargo.toml index 6987d3ad7e..e28db7bb60 100644 --- a/runtime/evm_tracer/Cargo.toml +++ b/runtime/evm_tracer/Cargo.toml @@ -15,18 +15,18 @@ moonbeam-primitives-ext = { path = "../../primitives/ext", default-features = fa # Substrate codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier ethereum-types = { version = "0.13.1", default-features = false } -evm = { version = "0.35.0", default-features = false, features = [ "with-codec" ] } -evm-gasometer = { version = "0.35.0", default-features = false } -evm-runtime = { version = "0.35.0", default-features = false } -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +evm = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false, features = [ "with-codec" ] } +evm-gasometer = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false } +evm-runtime = { git = "https://github.com/rust-blockchain/evm", branch = "master", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [features] default = [ "std" ] diff --git a/runtime/moonbase/Cargo.toml b/runtime/moonbase/Cargo.toml index cac8549760..95f7f82019 100644 --- a/runtime/moonbase/Cargo.toml +++ b/runtime/moonbase/Cargo.toml @@ -20,33 +20,38 @@ smallvec = "1.8.0" account = { path = "../../primitives/account/", default-features = false } moonbeam-core-primitives = { path = "../../core-primitives", default-features = false } moonbeam-relay-encoder = { path = "../relay-encoder", default-features = false } +moonbeam-runtime-common = { path = "../common", default-features = false } precompile-utils = { path = "../../precompiles/utils", default-features = false } -runtime-common = { path = "../common", default-features = false, features = [ "xcm-support" ] } session-keys-primitives = { path = "../../primitives/session-keys", default-features = false } xcm-primitives = { path = "../../primitives/xcm/", default-features = false } # Moonbeam pallets pallet-asset-manager = { path = "../../pallets/asset-manager", default-features = false } pallet-author-mapping = { path = "../../pallets/author-mapping", default-features = false } -pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.23", default-features = false } pallet-ethereum-chain-id = { path = "../../pallets/ethereum-chain-id", default-features = false } +pallet-ethereum-xcm = { path = "../../pallets/ethereum-xcm", default-features = false } pallet-maintenance-mode = { path = "../../pallets/maintenance-mode", default-features = false, features = [ "xcm-support" ] } pallet-migrations = { path = "../../pallets/migrations", default-features = false } pallet-moonbeam-orbiters = { path = "../../pallets/moonbeam-orbiters", default-features = false } +pallet-parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } pallet-proxy-genesis-companion = { path = "../../pallets/proxy-genesis-companion", default-features = false } -parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } -xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } +pallet-randomness = { path = "../../pallets/randomness", default-features = false } +pallet-xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } # Moonbeam precompiles -crowdloan-rewards-precompiles = { path = "../../precompiles/crowdloan-rewards", default-features = false } -pallet-author-mapping-precompiles = { path = "../../precompiles/author-mapping", default-features = false } -pallet-democracy-precompiles = { path = "../../precompiles/pallet-democracy", default-features = false } -pallet-evm-precompile-assets-erc20 = { path = "../../precompiles/assets-erc20", default-features = false } +pallet-evm-precompile-author-mapping = { path = "../../precompiles/author-mapping", default-features = false } pallet-evm-precompile-balances-erc20 = { path = "../../precompiles/balances-erc20", default-features = false } -parachain-staking-precompiles = { path = "../../precompiles/parachain-staking", default-features = false } -relay-encoder-precompiles = { path = "../../precompiles/relay-encoder", default-features = false } -xcm-transactor-precompiles = { path = "../../precompiles/xcm_transactor", default-features = false } -xtokens-precompiles = { path = "../../precompiles/xtokens", default-features = false } +pallet-evm-precompile-batch = { path = "../../precompiles/batch", default-features = false } +pallet-evm-precompile-call-permit = { path = "../../precompiles/call-permit", default-features = false } +pallet-evm-precompile-crowdloan-rewards = { path = "../../precompiles/crowdloan-rewards", default-features = false } +pallet-evm-precompile-democracy = { path = "../../precompiles/pallet-democracy", default-features = false } +pallet-evm-precompile-parachain-staking = { path = "../../precompiles/parachain-staking", default-features = false } +pallet-evm-precompile-randomness = { path = "../../precompiles/randomness", default-features = false } +pallet-evm-precompile-relay-encoder = { path = "../../precompiles/relay-encoder", default-features = false } +pallet-evm-precompile-xcm-transactor = { path = "../../precompiles/xcm-transactor", default-features = false } +pallet-evm-precompile-xtokens = { path = "../../precompiles/xtokens", default-features = false } +pallet-evm-precompileset-assets-erc20 = { path = "../../precompiles/assets-erc20", default-features = false } # Moonbeam tracing evm-tracing-events = { path = "../../primitives/rpc/evm-tracing-events", optional = true, default-features = false } @@ -55,96 +60,98 @@ moonbeam-rpc-primitives-debug = { path = "../../primitives/rpc/debug", default-f moonbeam-rpc-primitives-txpool = { path = "../../primitives/rpc/txpool", default-features = false } # Substrate -frame-executive = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-assets = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-collective = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-democracy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-identity = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-proxy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-randomness-collective-flip = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-scheduler = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-society = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-sudo = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-transaction-payment = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-treasury = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-utility = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-executive = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-assets = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-democracy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-identity = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-proxy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-society = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-sudo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-utility = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive", "max-encoded-len" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-block-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-debug-derive = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-inherents = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-offchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-session = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-version = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-debug-derive = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-blake2 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-bn128 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-dispatch = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-modexp = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-sha3fips = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-simple = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-blake2 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-bn128 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-dispatch = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-modexp = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-sha3fips = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-simple = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Cumulus / Nimbus -cumulus-pallet-dmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-xcm = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-xcmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-timestamp = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-utility = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -parachain-info = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-pallet-dmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-xcm = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-xcmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-timestamp = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-utility = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +parachain-info = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Polkadot / XCM -orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -orml-xcm-support = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -polkadot-core-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +orml-xcm-support = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +polkadot-core-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Benchmarking -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-system-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-try-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } [dev-dependencies] hex = "0.4" rlp = "0.5" sha3 = "0.9" -cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } -polkadot-runtime-parachains = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-simulator = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +polkadot-runtime-parachains = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-simulator = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } + +precompile-utils = { path = "../../precompiles/utils", default-features = false, features = [ "testing" ] } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] @@ -169,32 +176,42 @@ std = [ "moonbeam-evm-tracer/std", "moonbeam-rpc-primitives-debug/std", "moonbeam-rpc-primitives-txpool/std", + "moonbeam-runtime-common/std", "nimbus-primitives/std", "orml-xtokens/std", "pallet-asset-manager/std", "pallet-assets/std", "pallet-author-inherent/std", - "pallet-author-mapping-precompiles/std", "pallet-author-mapping/std", "pallet-author-slot-filter/std", "pallet-balances/std", "pallet-base-fee/std", "pallet-collective/std", "pallet-crowdloan-rewards/std", - "pallet-democracy-precompiles/std", "pallet-democracy/std", "pallet-ethereum-chain-id/std", + "pallet-ethereum-xcm/std", "pallet-ethereum/std", - "pallet-evm-precompile-assets-erc20/std", + "pallet-evm-precompile-author-mapping/std", "pallet-evm-precompile-balances-erc20/std", + "pallet-evm-precompile-batch/std", + "pallet-evm-precompile-call-permit/std", + "pallet-evm-precompile-democracy/std", + "pallet-evm-precompile-parachain-staking/std", + "pallet-evm-precompile-randomness/std", + "pallet-evm-precompile-xcm-transactor/std", + "pallet-evm-precompile-xtokens/std", + "pallet-evm-precompileset-assets-erc20/std", "pallet-evm/std", "pallet-identity/std", "pallet-maintenance-mode/std", "pallet-migrations/std", "pallet-moonbeam-orbiters/std", + "pallet-parachain-staking/std", "pallet-proxy-genesis-companion/std", "pallet-proxy/std", "pallet-randomness-collective-flip/std", + "pallet-randomness/std", "pallet-scheduler/std", "pallet-society/std", "pallet-sudo/std", @@ -203,13 +220,11 @@ std = [ "pallet-transaction-payment/std", "pallet-treasury/std", "pallet-utility/std", + "pallet-xcm-transactor/std", "pallet-xcm/std", "parachain-info/std", - "parachain-staking-precompiles/std", - "parachain-staking/std", "parity-scale-codec/std", "precompile-utils/std", - "runtime-common/std", "scale-info/std", "serde", "session-keys-primitives/std", @@ -227,10 +242,7 @@ std = [ "xcm-builder/std", "xcm-executor/std", "xcm-primitives/std", - "xcm-transactor-precompiles/std", - "xcm-transactor/std", "xcm/std", - "xtokens-precompiles/std", ] # Must be enabled for tracing runtimes only @@ -247,33 +259,37 @@ runtime-wasm = [] # to make it smaller like logging for example. on-chain-release-build = [ "sp-api/disable-logging" ] -moonbase-runtime-benchmarks = [] runtime-benchmarks = [ + "cumulus-pallet-parachain-system/runtime-benchmarks", "frame-benchmarking", "frame-support/runtime-benchmarks", "frame-system-benchmarking", "frame-system/runtime-benchmarks", "hex-literal", "pallet-asset-manager/runtime-benchmarks", + "pallet-author-inherent/runtime-benchmarks", "pallet-author-mapping/runtime-benchmarks", "pallet-author-slot-filter/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-collective/runtime-benchmarks", "pallet-crowdloan-rewards/runtime-benchmarks", + "pallet-ethereum-xcm/runtime-benchmarks", "pallet-ethereum/runtime-benchmarks", "pallet-moonbeam-orbiters/runtime-benchmarks", + "pallet-parachain-staking/runtime-benchmarks", + "pallet-randomness/runtime-benchmarks", "pallet-society/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", + "pallet-xcm-transactor/runtime-benchmarks", "pallet-xcm/runtime-benchmarks", - "parachain-staking/runtime-benchmarks", "sp-runtime/runtime-benchmarks", "xcm-builder/runtime-benchmarks", - "xcm-transactor/runtime-benchmarks", ] try-runtime = [ "frame-executive/try-runtime", "frame-system/try-runtime", "frame-try-runtime", + "moonbeam-runtime-common/try-runtime", "pallet-asset-manager/try-runtime", "pallet-author-mapping/try-runtime", "pallet-author-slot-filter/try-runtime", @@ -283,9 +299,10 @@ try-runtime = [ #"pallet-crowdloan-rewards/try-runtime", "pallet-maintenance-mode/try-runtime", "pallet-migrations/try-runtime", + "pallet-parachain-staking/try-runtime", "pallet-scheduler/try-runtime", "pallet-society/try-runtime", "pallet-timestamp/try-runtime", - "parachain-staking/try-runtime", - "runtime-common/try-runtime", ] + +moonbase-runtime-benchmarks = [] diff --git a/runtime/moonbase/src/asset_config.rs b/runtime/moonbase/src/asset_config.rs index faf31fe888..8646d8eed2 100644 --- a/runtime/moonbase/src/asset_config.rs +++ b/runtime/moonbase/src/asset_config.rs @@ -23,7 +23,7 @@ use super::{ LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; -use pallet_evm_precompile_assets_erc20::AccountIdAssetIdConversion; +use pallet_evm_precompileset_assets_erc20::AccountIdAssetIdConversion; use sp_runtime::traits::Hash as THash; use frame_support::{ @@ -234,8 +234,8 @@ impl pallet_asset_manager::LocalAssetIdCreator for LocalAssetIdCreator // Our means of converting a local asset counter to an assetId // We basically hash (local asset counter) let mut result: [u8; 16] = [0u8; 16]; - let to_hash = local_asset_counter.encode(); - let hash: H256 = to_hash.using_encoded(::Hashing::hash); + let hash: H256 = + local_asset_counter.using_encoded(::Hashing::hash); result.copy_from_slice(&hash.as_fixed_bytes()[0..16]); u128::from_le_bytes(result) } diff --git a/runtime/moonbase/src/lib.rs b/runtime/moonbase/src/lib.rs index 2e8fb30955..4d96dab2f4 100644 --- a/runtime/moonbase/src/lib.rs +++ b/runtime/moonbase/src/lib.rs @@ -28,7 +28,8 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -use cumulus_pallet_parachain_system::RelaychainBlockNumberProvider; +use cumulus_pallet_parachain_system::{RelayChainStateProof, RelaychainBlockNumberProvider}; +use cumulus_primitives_core::relay_chain; use fp_rpc::TransactionStatus; use account::AccountId20; @@ -47,8 +48,8 @@ use frame_support::{ }, weights::{ constants::{RocksDbWeight, WEIGHT_PER_SECOND}, - ConstantMultiplier, DispatchClass, GetDispatchInfo, IdentityFee, Weight, - WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, + ConstantMultiplier, DispatchClass, GetDispatchInfo, Weight, WeightToFeeCoefficient, + WeightToFeeCoefficients, WeightToFeePolynomial, }, PalletId, }; @@ -69,15 +70,18 @@ use pallet_evm::{ Account as EVMAccount, EVMCurrencyAdapter, EnsureAddressNever, EnsureAddressRoot, FeeCalculator, GasWeightMapping, OnChargeEVMTransaction as OnChargeEVMTransactionT, Runner, }; +pub use pallet_parachain_staking::{InflationInfo, Range}; use pallet_transaction_payment::{CurrencyAdapter, Multiplier, TargetedFeeAdjustment}; -pub use parachain_staking::{InflationInfo, Range}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_api::impl_runtime_apis; use sp_core::{OpaqueMetadata, H160, H256, U256}; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - traits::{BlakeTwo256, Block as BlockT, Dispatchable, IdentityLookup, PostDispatchInfoOf}, + traits::{ + BlakeTwo256, Block as BlockT, DispatchInfoOf, Dispatchable, IdentityLookup, + PostDispatchInfoOf, UniqueSaturatedInto, + }, transaction_validity::{ InvalidTransaction, TransactionSource, TransactionValidity, TransactionValidityError, }, @@ -126,7 +130,7 @@ pub mod currency { pub const UNIT: Balance = 1_000_000_000_000_000_000; pub const KILOUNIT: Balance = 1_000_000_000_000_000_000_000; - pub const TRANSACTION_BYTE_FEE: Balance = 10 * MICROUNIT * SUPPLY_FACTOR; + pub const TRANSACTION_BYTE_FEE: Balance = 1 * GIGAWEI * SUPPLY_FACTOR; pub const STORAGE_BYTE_FEE: Balance = 100 * MICROUNIT * SUPPLY_FACTOR; pub const WEIGHT_FEE: Balance = 50 * KILOWEI * SUPPLY_FACTOR; @@ -169,8 +173,8 @@ pub mod opaque { pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("moonbase"), impl_name: create_runtime_str!("moonbase"), - authoring_version: 3, - spec_version: 1600, + authoring_version: 4, + spec_version: 1700, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 2, @@ -297,37 +301,33 @@ where } } -pub struct WeightToFee; -impl WeightToFeePolynomial for WeightToFee { +pub struct LengthToFee; +impl WeightToFeePolynomial for LengthToFee { type Balance = Balance; - /// Return a vec of coefficients. Here we just use one coefficient and reduce it to a constant - /// modifier in order to closely match Ethereum-based fees. - /// - /// Calculation, per the documentation in `frame_support`: - /// - /// ```ignore - /// coeff_integer * x^(degree) + coeff_frac * x^(degree) - /// ``` fn polynomial() -> WeightToFeeCoefficients { - smallvec![WeightToFeeCoefficient { - degree: 1, - coeff_frac: Perbill::zero(), - coeff_integer: currency::WEIGHT_FEE, - negative: false, - }] + smallvec![ + WeightToFeeCoefficient { + degree: 1, + coeff_frac: Perbill::zero(), + coeff_integer: currency::TRANSACTION_BYTE_FEE, + negative: false, + }, + WeightToFeeCoefficient { + degree: 3, + coeff_frac: Perbill::zero(), + coeff_integer: 1 * currency::SUPPLY_FACTOR, + negative: false, + }, + ] } } -parameter_types! { - pub const TransactionByteFee: Balance = currency::TRANSACTION_BYTE_FEE; -} - impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter>; type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = IdentityFee; - type LengthToFee = ConstantMultiplier; + type WeightToFee = ConstantMultiplier>; + type LengthToFee = LengthToFee; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; } @@ -381,8 +381,11 @@ parameter_types! { pub struct FixedGasPrice; impl FeeCalculator for FixedGasPrice { - fn min_gas_price() -> U256 { - (1 * currency::GIGAWEI * currency::SUPPLY_FACTOR).into() + fn min_gas_price() -> (U256, Weight) { + ( + (1 * currency::GIGAWEI * currency::SUPPLY_FACTOR).into(), + 0u64, + ) } } @@ -417,43 +420,7 @@ where } } -type CurrencyAccountId = ::AccountId; - -type BalanceFor = - <::Currency as CurrencyT>>::Balance; - -type PositiveImbalanceFor = - <::Currency as CurrencyT>>::PositiveImbalance; - -type NegativeImbalanceFor = - <::Currency as CurrencyT>>::NegativeImbalance; - -pub struct OnChargeEVMTransaction(sp_std::marker::PhantomData); -impl OnChargeEVMTransactionT for OnChargeEVMTransaction -where - T: pallet_evm::Config, - PositiveImbalanceFor: Imbalance, Opposite = NegativeImbalanceFor>, - NegativeImbalanceFor: Imbalance, Opposite = PositiveImbalanceFor>, - OU: OnUnbalanced>, -{ - type LiquidityInfo = Option>; - - fn withdraw_fee(who: &H160, fee: U256) -> Result> { - EVMCurrencyAdapter::<::Currency, ()>::withdraw_fee(who, fee) - } - - fn correct_and_deposit_fee( - who: &H160, - corrected_fee: U256, - already_withdrawn: Self::LiquidityInfo, - ) { - ::Currency, OU> as OnChargeEVMTransactionT< - T, - >>::correct_and_deposit_fee(who, corrected_fee, already_withdrawn) - } - - fn pay_priority_fee(_tip: U256) {} -} +moonbeam_runtime_common::impl_on_charge_evm_transaction!(); impl pallet_evm::Config for Runtime { type FeeCalculator = FixedGasPrice; @@ -461,7 +428,7 @@ impl pallet_evm::Config for Runtime { type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping; type CallOrigin = EnsureAddressRoot; type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = runtime_common::IntoAddressMapping; + type AddressMapping = moonbeam_runtime_common::IntoAddressMapping; type Currency = Balances; type Event = Event; type Runner = pallet_evm::runner::stack::Runner; @@ -471,7 +438,6 @@ impl pallet_evm::Config for Runtime { type OnChargeTransaction = OnChargeEVMTransaction>; type BlockGasLimit = BlockGasLimit; type FindAuthor = FindAuthorAdapter; - type WeightInfo = pallet_evm::weights::SubstrateWeight; } parameter_types! { @@ -668,6 +634,13 @@ impl pallet_ethereum::Config for Runtime { type StateRoot = pallet_ethereum::IntermediateStateRoot; } +impl pallet_ethereum_xcm::Config for Runtime { + type InvalidEvmTransactionError = pallet_ethereum::InvalidTransactionWrapper; + type ValidatedTransaction = pallet_ethereum::ValidatedTransaction; + type XcmEthereumOrigin = pallet_ethereum_xcm::EnsureXcmEthereumTransaction; + type ReservedXcmpWeight = ReservedXcmpWeight; +} + parameter_types! { pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4; @@ -694,9 +667,9 @@ parameter_types! { } pub struct OnCollatorPayout; -impl parachain_staking::OnCollatorPayout for OnCollatorPayout { +impl pallet_parachain_staking::OnCollatorPayout for OnCollatorPayout { fn on_collator_payout( - for_round: parachain_staking::RoundIndex, + for_round: pallet_parachain_staking::RoundIndex, collator_id: AccountId, amount: Balance, ) -> Weight { @@ -704,13 +677,13 @@ impl parachain_staking::OnCollatorPayout for OnCollatorPayou } } pub struct OnNewRound; -impl parachain_staking::OnNewRound for OnNewRound { - fn on_new_round(round_index: parachain_staking::RoundIndex) -> Weight { +impl pallet_parachain_staking::OnNewRound for OnNewRound { + fn on_new_round(round_index: pallet_parachain_staking::RoundIndex) -> Weight { MoonbeamOrbiters::on_new_round(round_index) } } -impl parachain_staking::Config for Runtime { +impl pallet_parachain_staking::Config for Runtime { type Event = Event; type Currency = Balances; type MonetaryGovernanceOrigin = EnsureRoot; @@ -745,19 +718,20 @@ impl parachain_staking::Config for Runtime { /// Minimum stake required to be reserved to be a candidate type MinCandidateStk = ConstU128<{ 500 * currency::UNIT * currency::SUPPLY_FACTOR }>; /// Minimum stake required to be reserved to be a delegator - type MinDelegation = ConstU128<{ 5 * currency::UNIT * currency::SUPPLY_FACTOR }>; + type MinDelegation = ConstU128<{ 1 * currency::UNIT * currency::SUPPLY_FACTOR }>; /// Minimum stake required to be reserved to be a delegator - type MinDelegatorStk = ConstU128<{ 5 * currency::UNIT * currency::SUPPLY_FACTOR }>; + type MinDelegatorStk = ConstU128<{ 1 * currency::UNIT * currency::SUPPLY_FACTOR }>; type OnCollatorPayout = OnCollatorPayout; type OnNewRound = OnNewRound; - type WeightInfo = parachain_staking::weights::SubstrateWeight; + type WeightInfo = pallet_parachain_staking::weights::SubstrateWeight; } impl pallet_author_inherent::Config for Runtime { type SlotBeacon = RelaychainBlockNumberProvider; - type AccountLookup = AuthorMapping; + type AccountLookup = MoonbeamOrbiters; type EventHandler = ParachainStaking; type CanAuthor = AuthorFilter; + type WeightInfo = pallet_author_inherent::weights::SubstrateWeight; } impl pallet_author_slot_filter::Config for Runtime { @@ -823,6 +797,8 @@ pub enum ProxyType { Balances = 5, /// Allow extrinsic related to AuthorMapping. AuthorMapping = 6, + /// Allow extrinsic related to IdentityJudgement. + IdentityJudgement = 7, } impl Default for ProxyType { @@ -866,6 +842,10 @@ impl InstanceFilter for ProxyType { ), ProxyType::Balances => matches!(c, Call::Balances(..) | Call::Utility(..)), ProxyType::AuthorMapping => matches!(c, Call::AuthorMapping(..)), + ProxyType::IdentityJudgement => matches!( + c, + Call::Identity(pallet_identity::Call::provide_judgement { .. }) | Call::Utility(..) + ), } } @@ -902,15 +882,13 @@ impl pallet_proxy::Config for Runtime { impl pallet_migrations::Config for Runtime { type Event = Event; - //TODO wire up our correct list of migrations here. Maybe this shouldn't be in `runtime_common`. - type MigrationsList = ( - runtime_common::migrations::CommonMigrations< - Runtime, - CouncilCollective, - TechCommitteeCollective, - >, - runtime_common::migrations::XcmMigrations, - ); + // TODO wire up our correct list of migrations here. Maybe this shouldn't be in + // `moonbeam_runtime_common`. + type MigrationsList = moonbeam_runtime_common::migrations::CommonMigrations< + Runtime, + CouncilCollective, + TechCommitteeCollective, + >; } /// Maintenance mode Call filter @@ -969,6 +947,13 @@ impl Contains for NormalFilter { pallet_xcm::Call::force_default_xcm_version { .. } => true, _ => false, }, + // We filter anonymous proxy as they make "reserve" inconsistent + // See: https://github.com/paritytech/substrate/blob/37cca710eed3dadd4ed5364c7686608f5175cce1/frame/proxy/src/lib.rs#L270 // editorconfig-checker-disable-line + Call::Proxy(method) => match method { + pallet_proxy::Call::anonymous { .. } => false, + pallet_proxy::Call::kill_anonymous { .. } => false, + _ => true, + }, _ => true, } } @@ -1107,10 +1092,53 @@ impl pallet_moonbeam_orbiters::Config for Runtime { type OrbiterReserveIdentifier = OrbiterReserveIdentifier; type RotatePeriod = ConstU32<3>; /// Round index type. - type RoundIndex = parachain_staking::RoundIndex; + type RoundIndex = pallet_parachain_staking::RoundIndex; type WeightInfo = pallet_moonbeam_orbiters::weights::SubstrateWeight; } +/// Only callable after `set_validation_data` is called which forms this proof the same way +fn relay_chain_state_proof() -> RelayChainStateProof { + let relay_storage_root = ParachainSystem::validation_data() + .expect("set in `set_validation_data`") + .relay_parent_storage_root; + let relay_chain_state = + ParachainSystem::relay_state_proof().expect("set in `set_validation_data`"); + RelayChainStateProof::new(ParachainInfo::get(), relay_storage_root, relay_chain_state) + .expect("Invalid relay chain state proof, already constructed in `set_validation_data`") +} + +pub struct BabeDataGetter; +impl pallet_randomness::GetBabeData> for BabeDataGetter { + // Tolerate panic here because only ever called in inherent (so can be omitted) + fn get_epoch_index() -> u64 { + relay_chain_state_proof() + .read_optional_entry(relay_chain::well_known_keys::EPOCH_INDEX) + .ok() + .flatten() + .expect("expected to be able to read epoch index from relay chain state proof") + } + fn get_epoch_randomness() -> Option { + relay_chain_state_proof() + .read_optional_entry(relay_chain::well_known_keys::ONE_EPOCH_AGO_RANDOMNESS) + .ok() + .flatten() + } +} + +impl pallet_randomness::Config for Runtime { + type Event = Event; + type AddressMapping = moonbeam_runtime_common::IntoAddressMapping; + type Currency = Balances; + type BabeDataGetter = BabeDataGetter; + type VrfKeyLookup = AuthorMapping; + type Deposit = ConstU128<{ 1 * currency::UNIT * currency::SUPPLY_FACTOR }>; + type MaxRandomWords = ConstU8<100>; + type MinBlockDelay = ConstU32<2>; + type MaxBlockDelay = ConstU32<2_000>; + type BlockExpirationDelay = ConstU32<10_000>; + type EpochExpirationDelay = ConstU64<10_000>; +} + construct_runtime! { pub enum Runtime where Block = Block, @@ -1129,7 +1157,7 @@ construct_runtime! { EthereumChainId: pallet_ethereum_chain_id::{Pallet, Storage, Config} = 9, EVM: pallet_evm::{Pallet, Config, Call, Storage, Event} = 10, Ethereum: pallet_ethereum::{Pallet, Call, Storage, Event, Origin, Config} = 11, - ParachainStaking: parachain_staking::{Pallet, Call, Storage, Event, Config} = 12, + ParachainStaking: pallet_parachain_staking::{Pallet, Call, Storage, Event, Config} = 12, Scheduler: pallet_scheduler::{Pallet, Storage, Event, Call} = 13, Democracy: pallet_democracy::{Pallet, Storage, Config, Event, Call} = 14, CouncilCollective: @@ -1152,12 +1180,13 @@ construct_runtime! { XTokens: orml_xtokens::{Pallet, Call, Storage, Event} = 30, AssetManager: pallet_asset_manager::{Pallet, Call, Storage, Event} = 31, Migrations: pallet_migrations::{Pallet, Storage, Config, Event} = 32, - XcmTransactor: xcm_transactor::{Pallet, Call, Storage, Event} = 33, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Storage, Event} = 33, ProxyGenesisCompanion: pallet_proxy_genesis_companion::{Pallet, Config} = 34, BaseFee: pallet_base_fee::{Pallet, Call, Storage, Config, Event} = 35, LocalAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 36, MoonbeamOrbiters: pallet_moonbeam_orbiters::{Pallet, Call, Storage, Event} = 37, - + EthereumXcm: pallet_ethereum_xcm::{Pallet, Call, Origin} = 38, + Randomness: pallet_randomness::{Pallet, Call, Storage, Event, Inherent} = 39, } } @@ -1202,7 +1231,23 @@ pub type Executive = frame_executive::Executive< // // Specific impls provided to the `impl_runtime_apis_plus_common!` macro. // } // ``` -runtime_common::impl_runtime_apis_plus_common! { +moonbeam_runtime_common::impl_runtime_apis_plus_common! { + impl session_keys_primitives::VrfApi for Runtime { + fn get_last_vrf_output() -> Option<::Hash> { + // TODO: remove in future runtime upgrade along with storage item + if pallet_randomness::Pallet::::not_first_block().is_none() { + return None; + } + pallet_randomness::Pallet::::local_vrf_output() + } + fn vrf_key_lookup( + nimbus_id: nimbus_primitives::NimbusId + ) -> Option { + use session_keys_primitives::KeysLookup; + AuthorMapping::lookup_keys(&nimbus_id) + } + } + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { fn validate_transaction( source: TransactionSource, @@ -1287,7 +1332,7 @@ struct CheckInherents; impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { fn check_inherents( block: &Block, - relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, + relay_state_proof: &RelayChainStateProof, ) -> sp_inherents::CheckInherentsResult { let relay_chain_slot = relay_state_proof .read_slot() @@ -1312,7 +1357,7 @@ cumulus_pallet_parachain_system::register_validate_block!( CheckInherents = CheckInherents, ); -runtime_common::impl_self_contained_call!(); +moonbeam_runtime_common::impl_self_contained_call!(); // Shorthand for a Get field of a pallet Config. #[macro_export] @@ -1337,7 +1382,9 @@ mod tests { ); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); - assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); + assert!( + std::mem::size_of::>() <= CALL_ALIGN as usize + ); assert!( std::mem::size_of::>() <= CALL_ALIGN as usize ); @@ -1354,7 +1401,7 @@ mod tests { assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); - assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); + assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); assert!( std::mem::size_of::>() <= CALL_ALIGN as usize @@ -1366,13 +1413,13 @@ mod tests { assert_eq!(SUPPLY_FACTOR, 1); // txn fees - assert_eq!(TRANSACTION_BYTE_FEE, Balance::from(10 * MICROUNIT)); + assert_eq!(TRANSACTION_BYTE_FEE, Balance::from(1 * GIGAWEI)); assert_eq!( get!(pallet_transaction_payment, OperationalFeeMultiplier, u8), 5_u8 ); assert_eq!(STORAGE_BYTE_FEE, Balance::from(100 * MICROUNIT)); - assert_eq!(FixedGasPrice::min_gas_price(), (1 * GIGAWEI).into()); + assert_eq!(FixedGasPrice::min_gas_price().0, (1 * GIGAWEI).into()); // democracy minimums assert_eq!( @@ -1404,20 +1451,20 @@ mod tests { // staking minimums assert_eq!( - get!(parachain_staking, MinCollatorStk, u128), + get!(pallet_parachain_staking, MinCollatorStk, u128), Balance::from(1 * KILOUNIT) ); assert_eq!( - get!(parachain_staking, MinCandidateStk, u128), + get!(pallet_parachain_staking, MinCandidateStk, u128), Balance::from(500 * UNIT) ); assert_eq!( - get!(parachain_staking, MinDelegation, u128), - Balance::from(5 * UNIT) + get!(pallet_parachain_staking, MinDelegation, u128), + Balance::from(1 * UNIT) ); assert_eq!( - get!(parachain_staking, MinDelegatorStk, u128), - Balance::from(5 * UNIT) + get!(pallet_parachain_staking, MinDelegatorStk, u128), + Balance::from(1 * UNIT) ); // crowdloan min reward @@ -1452,15 +1499,20 @@ mod tests { } #[test] - // Required migration is parachain_staking::migrations::IncreaseMaxTopDelegationsPerCandidate + // Required migration is + // pallet_parachain_staking::migrations::IncreaseMaxTopDelegationsPerCandidate // Purpose of this test is to remind of required migration if constant is ever changed fn updating_maximum_delegators_per_candidate_requires_configuring_required_migration() { assert_eq!( - get!(parachain_staking, MaxTopDelegationsPerCandidate, u32), + get!(pallet_parachain_staking, MaxTopDelegationsPerCandidate, u32), 300 ); assert_eq!( - get!(parachain_staking, MaxBottomDelegationsPerCandidate, u32), + get!( + pallet_parachain_staking, + MaxBottomDelegationsPerCandidate, + u32 + ), 50 ); } diff --git a/runtime/moonbase/src/precompiles.rs b/runtime/moonbase/src/precompiles.rs index 68822c10dc..705330449a 100644 --- a/runtime/moonbase/src/precompiles.rs +++ b/runtime/moonbase/src/precompiles.rs @@ -15,27 +15,27 @@ // along with Moonbeam. If not, see . use crate::asset_config::{ForeignAssetInstance, LocalAssetInstance}; -use crowdloan_rewards_precompiles::CrowdloanRewardsWrapper; -use fp_evm::Context; +use frame_support::parameter_types; use moonbeam_relay_encoder::westend::WestendEncoder; -use pallet_author_mapping_precompiles::AuthorMappingWrapper; -use pallet_democracy_precompiles::DemocracyWrapper; -use pallet_evm::{AddressMapping, Precompile, PrecompileResult, PrecompileSet}; -use pallet_evm_precompile_assets_erc20::{Erc20AssetsPrecompileSet, IsForeign, IsLocal}; +use pallet_evm_precompile_author_mapping::AuthorMappingWrapper; use pallet_evm_precompile_balances_erc20::{Erc20BalancesPrecompile, Erc20Metadata}; +use pallet_evm_precompile_batch::BatchPrecompile; use pallet_evm_precompile_blake2::Blake2F; use pallet_evm_precompile_bn128::{Bn128Add, Bn128Mul, Bn128Pairing}; +use pallet_evm_precompile_call_permit::CallPermitPrecompile; +use pallet_evm_precompile_crowdloan_rewards::CrowdloanRewardsWrapper; +use pallet_evm_precompile_democracy::DemocracyWrapper; use pallet_evm_precompile_dispatch::Dispatch; use pallet_evm_precompile_modexp::Modexp; +use pallet_evm_precompile_parachain_staking::ParachainStakingWrapper; +use pallet_evm_precompile_randomness::RandomnessWrapper; +use pallet_evm_precompile_relay_encoder::RelayEncoderWrapper; use pallet_evm_precompile_sha3fips::Sha3FIPS256; use pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256}; -use parachain_staking_precompiles::ParachainStakingWrapper; -use relay_encoder_precompiles::RelayEncoderWrapper; -use sp_core::H160; -use sp_std::fmt::Debug; -use sp_std::marker::PhantomData; -use xcm_transactor_precompiles::XcmTransactorWrapper; -use xtokens_precompiles::XtokensWrapper; +use pallet_evm_precompile_xcm_transactor::XcmTransactorWrapper; +use pallet_evm_precompile_xtokens::XtokensWrapper; +use pallet_evm_precompileset_assets_erc20::{Erc20AssetsPrecompileSet, IsForeign, IsLocal}; +use precompile_utils::precompile_set::*; /// ERC20 metadata for the native token. pub struct NativeErc20Metadata; @@ -70,127 +70,63 @@ pub const FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8; 4]; /// to Erc20AssetsPrecompileSet being marked as local pub const LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8, 255u8, 255u8, 254u8]; +parameter_types! { + pub ForeignAssetPrefix: &'static [u8] = FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX; + pub LocalAssetPrefix: &'static [u8] = LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX; +} + /// The PrecompileSet installed in the Moonbase runtime. /// We include the nine Istanbul precompiles /// (https://github.com/ethereum/go-ethereum/blob/3c46f557/core/vm/contracts.go#L69) /// as well as a special precompile for dispatching Substrate extrinsics -#[derive(Debug, Clone, Copy)] -pub struct MoonbasePrecompiles(PhantomData); - -impl MoonbasePrecompiles -where - R: pallet_evm::Config, -{ - pub fn new() -> Self { - Self(Default::default()) - } - /// Return all addresses that contain precompiles. This can be used to populate dummy code - /// under the precompile. - pub fn used_addresses() -> impl Iterator { - sp_std::vec![ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 1024, 1025, 1026, 2048, 2049, 2050, 2051, 2052, 2053, 2054, - 2055 - ] - .into_iter() - .map(|x| R::AddressMapping::into_account_id(hash(x))) - } -} - -impl PrecompileSet for MoonbasePrecompiles -where - Dispatch: Precompile, - ParachainStakingWrapper: Precompile, - CrowdloanRewardsWrapper: Precompile, - Erc20BalancesPrecompile: Precompile, - // We require PrecompileSet here because indeed we are dealing with a set of precompiles - // This precompile set does additional checks, e.g., total supply not being 0 - Erc20AssetsPrecompileSet: PrecompileSet, - Erc20AssetsPrecompileSet: PrecompileSet, - DemocracyWrapper: Precompile, - XtokensWrapper: Precompile, - RelayEncoderWrapper: Precompile, - XcmTransactorWrapper: Precompile, - AuthorMappingWrapper: Precompile, - R: pallet_evm::Config, -{ - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option { - match address { - // Ethereum precompiles : - a if a == hash(1) => Some(ECRecover::execute(input, target_gas, context, is_static)), - a if a == hash(2) => Some(Sha256::execute(input, target_gas, context, is_static)), - a if a == hash(3) => Some(Ripemd160::execute(input, target_gas, context, is_static)), - a if a == hash(5) => Some(Modexp::execute(input, target_gas, context, is_static)), - a if a == hash(4) => Some(Identity::execute(input, target_gas, context, is_static)), - a if a == hash(6) => Some(Bn128Add::execute(input, target_gas, context, is_static)), - a if a == hash(7) => Some(Bn128Mul::execute(input, target_gas, context, is_static)), - a if a == hash(8) => Some(Bn128Pairing::execute(input, target_gas, context, is_static)), - a if a == hash(9) => Some(Blake2F::execute(input, target_gas, context, is_static)), - // Non-Moonbeam specific nor Ethereum precompiles : - a if a == hash(1024) => { - Some(Sha3FIPS256::execute(input, target_gas, context, is_static)) - } - a if a == hash(1025) => Some(Dispatch::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(1026) => Some(ECRecoverPublicKey::execute( - input, target_gas, context, is_static, - )), - // Moonbeam specific precompiles : - a if a == hash(2048) => Some(ParachainStakingWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2049) => Some(CrowdloanRewardsWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2050) => { - Some(Erc20BalancesPrecompile::::execute( - input, target_gas, context, is_static, - )) - } - a if a == hash(2051) => Some(DemocracyWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2052) => Some(XtokensWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2053) => Some(RelayEncoderWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2054) => Some(XcmTransactorWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2055) => Some(AuthorMappingWrapper::::execute( - input, target_gas, context, is_static, - )), - // If the address matches asset prefix, the we route through the asset precompile set - a if &a.to_fixed_bytes()[0..4] == FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX => { - Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) - } - // If the address matches asset prefix, the we route through the asset precompile set - a if &a.to_fixed_bytes()[0..4] == LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX => { - Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) - } - _ => None, - } - } - fn is_precompile(&self, address: H160) -> bool { - Self::used_addresses().any(|x| x == R::AddressMapping::into_account_id(address)) - || Erc20AssetsPrecompileSet::::new() - .is_precompile(address) - || Erc20AssetsPrecompileSet::::new() - .is_precompile(address) - } -} - -fn hash(a: u64) -> H160 { - H160::from_low_u64_be(a) -} +/// The following distribution has been decided for the precompiles +/// 0-1023: Ethereum Mainnet Precompiles +/// 1024-2047 Precompiles that are not in Ethereum Mainnet but are neither Moonbeam specific +/// 2048-4095 Moonbeam specific precompiles +pub type MoonbasePrecompiles = PrecompileSetBuilder< + R, + ( + // Skip precompiles if out of range. + PrecompilesInRangeInclusive< + (AddressU64<1>, AddressU64<4095>), + ( + // Ethereum precompiles: + // We allow DELEGATECALL to stay compliant with Ethereum behavior. + PrecompileAt, ECRecover, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Sha256, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Ripemd160, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Identity, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Modexp, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Add, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Mul, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Pairing, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Blake2F, ForbidRecursion, AllowDelegateCall>, + // Non-Moonbeam specific nor Ethereum precompiles : + PrecompileAt, Sha3FIPS256>, + PrecompileAt, Dispatch>, + PrecompileAt, ECRecoverPublicKey>, + // Moonbeam specific precompiles: + PrecompileAt, ParachainStakingWrapper>, + PrecompileAt, CrowdloanRewardsWrapper>, + PrecompileAt, Erc20BalancesPrecompile>, + PrecompileAt, DemocracyWrapper>, + PrecompileAt, XtokensWrapper>, + PrecompileAt, RelayEncoderWrapper>, + PrecompileAt, XcmTransactorWrapper>, + PrecompileAt, AuthorMappingWrapper>, + PrecompileAt, BatchPrecompile, LimitRecursionTo<2>>, + PrecompileAt, RandomnessWrapper>, + PrecompileAt, CallPermitPrecompile>, + ), + >, + // Prefixed precompile sets (XC20) + PrecompileSetStartingWith< + ForeignAssetPrefix, + Erc20AssetsPrecompileSet, + >, + PrecompileSetStartingWith< + LocalAssetPrefix, + Erc20AssetsPrecompileSet, + >, + ), +>; diff --git a/runtime/moonbase/src/xcm_config.rs b/runtime/moonbase/src/xcm_config.rs index 97335ed850..43348a1f02 100644 --- a/runtime/moonbase/src/xcm_config.rs +++ b/runtime/moonbase/src/xcm_config.rs @@ -19,12 +19,15 @@ use super::{ AccountId, AssetId, AssetManager, Assets, Balance, Balances, Call, DealWithFees, Event, - LocalAssets, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, Treasury, - WeightToFee, XcmpQueue, FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, + LocalAssets, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, Treasury, XcmpQueue, + FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; -use pallet_evm_precompile_assets_erc20::AccountIdAssetIdConversion; -use sp_runtime::traits::Hash as THash; +use pallet_evm_precompileset_assets_erc20::AccountIdAssetIdConversion; +use sp_runtime::{ + traits::{Hash as THash, PostDispatchInfoOf}, + DispatchErrorWithPostInfo, +}; use frame_support::{ parameter_types, @@ -32,7 +35,7 @@ use frame_support::{ weights::Weight, }; -use frame_system::EnsureRoot; +use frame_system::{EnsureRoot, RawOrigin}; use sp_core::{H160, H256}; use xcm_builder::{ @@ -45,7 +48,7 @@ use xcm_builder::{ }; use xcm::latest::prelude::*; -use xcm_executor::traits::JustTry; +use xcm_executor::traits::{CallDispatcher, JustTry}; use orml_xcm_support::MultiNativeAsset; use xcm_primitives::{ @@ -103,6 +106,8 @@ pub type LocationToAccountId = ( SiblingParachainConvertsVia, // If we receive a MultiLocation of type AccountKey20, just generate a native account AccountKey20Aliases, + // The rest of multilocations convert via hashing it + xcm_primitives::Account20Hash, ); // The non-reserve fungible transactor type @@ -223,6 +228,7 @@ pub type XcmWeigher = FixedWeightBounds; // Allow paid executions pub type XcmBarrier = ( TakeWeightCredit, + xcm_primitives::AllowDescendOriginFromLocal, AllowTopLevelPaidExecutionFrom, AllowKnownQueryResponses, // Subscriptions for version tracking are OK. @@ -251,6 +257,10 @@ pub type XcmFeesToAccount = xcm_primitives::XcmFeesToAccount< XcmFeesAccount, >; +// Our implementation of the Moonbeam Call +// Attachs the right origin in case the call is made to pallet-ethereum-xcm +moonbeam_runtime_common::impl_moonbeam_xcm_call!(); + pub struct XcmExecutorConfig; impl xcm_executor::Config for XcmExecutorConfig { type Call = Call; @@ -272,13 +282,20 @@ impl xcm_executor::Config for XcmExecutorConfig { // When we receive a non-reserve asset, we use AssetManager to fetch how many // units per second we should charge type Trader = ( - UsingComponents>, + UsingComponents< + ::WeightToFee, + SelfReserve, + AccountId, + Balances, + DealWithFees, + >, FirstAssetTrader, ); type ResponseHandler = PolkadotXcm; type SubscriptionService = PolkadotXcm; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; + type CallDispatcher = MoonbeamCall; } type XcmExecutor = xcm_executor::XcmExecutor; @@ -444,8 +461,8 @@ parameter_types! { } parameter_type_with_key! { - pub ParachainMinFee: |_location: MultiLocation| -> u128 { - u128::MAX + pub ParachainMinFee: |_location: MultiLocation| -> Option { + Some(u128::MAX) }; } @@ -503,7 +520,7 @@ impl XcmTransact for Transactors { } } -impl xcm_transactor::Config for Runtime { +impl pallet_xcm_transactor::Config for Runtime { type Event = Event; type Balance = Balance; type Transactor = Transactors; @@ -520,5 +537,5 @@ impl xcm_transactor::Config for Runtime { type BaseXcmWeight = BaseXcmWeight; type AssetTransactor = AssetTransactors; type ReserveProvider = AbsoluteAndRelativeReserve; - type WeightInfo = xcm_transactor::weights::SubstrateWeight; + type WeightInfo = pallet_xcm_transactor::weights::SubstrateWeight; } diff --git a/runtime/moonbase/tests/common/mod.rs b/runtime/moonbase/tests/common/mod.rs index ae0024f6b6..8fcb39fd74 100644 --- a/runtime/moonbase/tests/common/mod.rs +++ b/runtime/moonbase/tests/common/mod.rs @@ -87,17 +87,6 @@ pub fn last_event() -> Event { System::events().pop().expect("Event expected").event } -// Helper function to give a simple evm context suitable for tests. -// We can remove this once https://github.com/rust-blockchain/evm/pull/35 -// is in our dependency graph. -pub fn evm_test_context() -> fp_evm::Context { - fp_evm::Context { - address: Default::default(), - caller: Default::default(), - apparent_value: From::from(0), - } -} - // Test struct with the purpose of initializing xcm assets #[derive(Clone)] pub struct XcmAssetInitialization { @@ -233,7 +222,7 @@ impl ExtBuilder { .assimilate_storage(&mut t) .unwrap(); - parachain_staking::GenesisConfig:: { + pallet_parachain_staking::GenesisConfig:: { candidates: self.collators, delegations: self.delegations, inflation_config: self.inflation, diff --git a/runtime/moonbase/tests/integration_test.rs b/runtime/moonbase/tests/integration_test.rs index 74b1cd904d..a9e8db8a5c 100644 --- a/runtime/moonbase/tests/integration_test.rs +++ b/runtime/moonbase/tests/integration_test.rs @@ -19,35 +19,43 @@ mod common; use common::*; -use precompile_utils::{Address as EvmAddress, EvmDataWriter, LogsBuilder}; +use precompile_utils::{prelude::*, testing::*}; -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::Context; use frame_support::{ assert_noop, assert_ok, dispatch::Dispatchable, traits::{ - fungible::Inspect, fungibles::Inspect as FungiblesInspect, EnsureOrigin, PalletInfo, - StorageInfo, StorageInfoTrait, + fungible::Inspect, fungibles::Inspect as FungiblesInspect, Currency as CurrencyT, + EnsureOrigin, PalletInfo, StorageInfo, StorageInfoTrait, }, weights::{DispatchClass, Weight}, StorageHasher, Twox128, }; use moonbase_runtime::{ - asset_config::AssetRegistrarMetadata, asset_config::LocalAssetInstance, currency::UNIT, get, + asset_config::AssetRegistrarMetadata, asset_config::LocalAssetInstance, get, xcm_config::AssetType, AccountId, AssetId, AssetManager, Assets, Balances, BaseFee, BlockWeights, Call, CrowdloanRewards, Event, LocalAssets, ParachainStaking, PolkadotXcm, Precompiles, Runtime, System, XTokens, XcmTransactor, FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; +use precompile_utils::testing::MockHandle; use nimbus_primitives::NimbusId; -use pallet_author_mapping_precompiles::Action as AuthorMappingAction; +use pallet_evm::GasWeightMapping; use pallet_evm::PrecompileSet; -use pallet_evm_precompile_assets_erc20::{ +use pallet_evm_precompile_author_mapping::Action as AuthorMappingAction; +use pallet_evm_precompile_batch::Action as BatchAction; +use pallet_evm_precompile_crowdloan_rewards::Action as CrowdloanAction; +use pallet_evm_precompile_randomness::{ + EXECUTE_EXPIRATION_ESTIMATED_COST, FULFILLMENT_OVERHEAD_ESTIMATED_COST, + INCREASE_REQUEST_FEE_ESTIMATED_COST, REQUEST_RANDOMNESS_ESTIMATED_COST, +}; +use pallet_evm_precompile_xtokens::Action as XtokensAction; +use pallet_evm_precompileset_assets_erc20::{ AccountIdAssetIdConversion, Action as AssetAction, SELECTOR_LOG_APPROVAL, SELECTOR_LOG_TRANSFER, }; -use xtokens_precompiles::Action as XtokensAction; - +use pallet_randomness::weights::{SubstrateWeight, WeightInfo}; use pallet_transaction_payment::Multiplier; use parity_scale_codec::Encode; use sha3::{Digest, Keccak256}; @@ -58,6 +66,30 @@ use sp_runtime::{ }; use xcm::latest::prelude::*; +#[test] +fn verify_randomness_precompile_gas_constants() { + let weight_to_gas = |weight| { + ::GasWeightMapping::weight_to_gas(weight) + }; + type Weight = SubstrateWeight; + assert_eq!( + weight_to_gas(Weight::request_randomness()), + REQUEST_RANDOMNESS_ESTIMATED_COST + ); + assert_eq!( + weight_to_gas(Weight::prepare_fulfillment() + Weight::finish_fulfillment()), + FULFILLMENT_OVERHEAD_ESTIMATED_COST + ); + assert_eq!( + weight_to_gas(Weight::increase_fee()), + INCREASE_REQUEST_FEE_ESTIMATED_COST + ); + assert_eq!( + weight_to_gas(Weight::execute_request_expiration()), + EXECUTE_EXPIRATION_ESTIMATED_COST + ); +} + #[test] fn xcmp_queue_controller_origin_is_root() { // important for the XcmExecutionManager impl of PauseExecution which uses root origin @@ -272,6 +304,7 @@ fn verify_proxy_type_indices() { assert_eq!(moonbase_runtime::ProxyType::CancelProxy as u8, 4); assert_eq!(moonbase_runtime::ProxyType::Balances as u8, 5); assert_eq!(moonbase_runtime::ProxyType::AuthorMapping as u8, 6); + assert_eq!(moonbase_runtime::ProxyType::IdentityJudgement as u8, 7); } #[test] @@ -299,7 +332,7 @@ fn join_collator_candidates() { 1_000 * UNIT, 2u32 ), - parachain_staking::Error::::CandidateExists + pallet_parachain_staking::Error::::CandidateExists ); assert_noop!( ParachainStaking::join_candidates( @@ -307,7 +340,7 @@ fn join_collator_candidates() { 1_000 * UNIT, 2u32 ), - parachain_staking::Error::::DelegatorExists + pallet_parachain_staking::Error::::DelegatorExists ); assert!(System::events().is_empty()); assert_ok!(ParachainStaking::join_candidates( @@ -317,11 +350,13 @@ fn join_collator_candidates() { )); assert_eq!( last_event(), - Event::ParachainStaking(parachain_staking::Event::JoinedCollatorCandidates { - account: AccountId::from(DAVE), - amount_locked: 1_000 * UNIT, - new_total_amt_locked: 3_100 * UNIT - }) + Event::ParachainStaking( + pallet_parachain_staking::Event::JoinedCollatorCandidates { + account: AccountId::from(DAVE), + amount_locked: 1_000 * UNIT, + new_total_amt_locked: 3_100 * UNIT + } + ) ); let candidates = ParachainStaking::candidate_pool(); assert_eq!(candidates.0[0].owner, AccountId::from(ALICE)); @@ -347,8 +382,8 @@ fn transfer_through_evm_to_stake() { 0u32 ), DispatchError::Module(ModuleError { - index: 3, - error: [2, 0, 0, 0], + index: 12, + error: [8, 0, 0, 0], message: Some("InsufficientBalance") }) ); @@ -418,16 +453,19 @@ fn reward_block_authors() { run_to_block(x, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); } // no rewards doled out yet - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 1_000 * UNIT,); - assert_eq!(Balances::free_balance(AccountId::from(BOB)), 500 * UNIT,); + assert_eq!( + Balances::usable_balance(AccountId::from(ALICE)), + 1_000 * UNIT, + ); + assert_eq!(Balances::usable_balance(AccountId::from(BOB)), 500 * UNIT,); run_to_block(1200, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); // rewards minted and distributed assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 1113666666584000000000, ); assert_eq!( - Balances::free_balance(AccountId::from(BOB)), + Balances::usable_balance(AccountId::from(BOB)), 541333333292000000000, ); }); @@ -463,22 +501,25 @@ fn reward_block_authors_with_parachain_bond_reserved() { run_to_block(x, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); } // no rewards doled out yet - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 1_000 * UNIT,); - assert_eq!(Balances::free_balance(AccountId::from(BOB)), 500 * UNIT,); - assert_eq!(Balances::free_balance(AccountId::from(CHARLIE)), UNIT,); + assert_eq!( + Balances::usable_balance(AccountId::from(ALICE)), + 1_000 * UNIT, + ); + assert_eq!(Balances::usable_balance(AccountId::from(BOB)), 500 * UNIT,); + assert_eq!(Balances::usable_balance(AccountId::from(CHARLIE)), UNIT,); run_to_block(1200, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); // rewards minted and distributed assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 1082693333281650000000, ); assert_eq!( - Balances::free_balance(AccountId::from(BOB)), + Balances::usable_balance(AccountId::from(BOB)), 525841666640825000000, ); // 30% reserved for parachain bond assert_eq!( - Balances::free_balance(AccountId::from(CHARLIE)), + Balances::usable_balance(AccountId::from(CHARLIE)), 47515000000000000000, ); }); @@ -838,61 +879,31 @@ fn is_contributor_via_precompile() { let crowdloan_precompile_address = H160::from_low_u64_be(2049); - // Construct the input data to check if Bob is a contributor - let mut bob_input_data = Vec::::from([0u8; 36]); - bob_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"is_contributor(address)")[0..4]); - bob_input_data[16..36].copy_from_slice(&BOB); - - // Expected result is an EVM boolean false which is 256 bits long. - let mut expected_bytes = Vec::from([0u8; 32]); - expected_bytes[31] = 0; - let expected_false_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - // Assert precompile reports Bob is not a contributor - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &bob_input_data, - None, // target_gas is not necessary right now because consumed none now - &evm_test_context(), - false - ), - expected_false_result - ); - - // Construct the input data to check if Charlie is a contributor - let mut charlie_input_data = Vec::::from([0u8; 36]); - charlie_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"is_contributor(address)")[0..4]); - charlie_input_data[16..36].copy_from_slice(&CHARLIE); - - // Expected result is an EVM boolean true which is 256 bits long. - let mut expected_bytes = Vec::from([0u8; 32]); - expected_bytes[31] = 1; - let expected_true_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - - // Assert precompile reports Bob is a nominator - assert_eq!( - Precompiles::new().execute( + EvmDataWriter::new_with_selector(CrowdloanAction::IsContributor) + .write(Address(BOB.into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); + + // Assert precompile reports Charlie is a nominator + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &charlie_input_data, - None, // target_gas is not necessary right now because consumed none now - &evm_test_context(), - false, - ), - expected_true_result - ); + EvmDataWriter::new_with_selector(CrowdloanAction::IsContributor) + .write(Address(CHARLIE.into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }) } @@ -948,37 +959,26 @@ fn reward_info_via_precompile() { let crowdloan_precompile_address = H160::from_low_u64_be(2049); - // Construct the input data to check if Bob is a contributor - let mut charlie_input_data = Vec::::from([0u8; 36]); - charlie_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"reward_info(address)")[0..4]); - charlie_input_data[16..36].copy_from_slice(&CHARLIE); - let expected_total: U256 = (1_500_000 * UNIT).into(); let expected_claimed: U256 = (450_000 * UNIT).into(); - // Expected result is two EVM u256 false which are 256 bits long. - let mut expected_bytes = Vec::from([0u8; 64]); - expected_total.to_big_endian(&mut expected_bytes[0..32]); - expected_claimed.to_big_endian(&mut expected_bytes[32..64]); - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - - // Assert precompile reports Bob is not a contributor - assert_eq!( - Precompiles::new().execute( + // Assert precompile reports correct Charlie reward info. + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &charlie_input_data, - None, // target_gas is not necessary right now because consumed none now - &evm_test_context(), - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(CrowdloanAction::RewardInfo) + .write(Address(AccountId::from(CHARLIE).into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(expected_total) + .write(expected_claimed) + .build(), + ); }) } @@ -1127,50 +1127,31 @@ fn asset_erc20_precompiles_supply_and_balance() { // Convert the assetId to its corresponding precompile address let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // The expected result for both total supply and balance of is the same, as only Alice - // holds balance - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000 * UNIT)).build(), - cost: 1000, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); - // Access totalSupply through precompile. Important that the context is correct - assert_eq!( - Precompiles::new().execute( + // Access totalSupply through precompile. + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * UNIT)).build()); // Access balanceOf through precompile - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * UNIT)).build()); }); } @@ -1189,67 +1170,40 @@ fn asset_erc20_precompiles_transfer() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); - // Expected result for a transfer - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 23516u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - ) - .build(), - })); - - // Transfer tokens from Aice to Bob, 400 unit. - assert_eq!( - Precompiles::new().execute( + // Transfer tokens from Alice to Bob, 400 UNIT. + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Transfer) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Transfer) + .write(Address(BOB.into())) .write(U256::from(400 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balanceOf BOB - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - cost: 1000, - logs: Default::default(), - })); - - // Make sure BOB has 400 unit - assert_eq!( - Precompiles::new().execute( + ) + .expect_cost(23518u64) + .expect_log(log3( asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(BOB.into())) + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + // Make sure BOB has 400 UNIT + Precompiles::new() + .prepare_test( + BOB, + asset_precompile_address, + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * UNIT)).build()); }); } @@ -1268,102 +1222,61 @@ fn asset_erc20_precompiles_approve() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 13989u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_APPROVAL, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); - // Aprove Bob for spending 400 unit from Alice - assert_eq!( - Precompiles::new().execute( + // Aprove Bob for spending 400 UNIT from Alice + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Approve) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Approve) + .write(Address(BOB.into())) .write(U256::from(400 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for transfer_from - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 29006u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(CHARLIE), - EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - ) - .build(), - })); + ) + .expect_cost(14006) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_APPROVAL, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferFrom) - .write(EvmAddress(ALICE.into())) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferFrom) + .write(Address(ALICE.into())) + .write(Address(CHARLIE.into())) .write(U256::from(400 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balance of CHARLIE - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - cost: 1000, - logs: Default::default(), - })); - - // Make sure CHARLIE has 400 unit - assert_eq!( - Precompiles::new().execute( + ) + .expect_cost(28967) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(CHARLIE), + EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + // Make sure CHARLIE has 400 UNIT + Precompiles::new() + .prepare_test( + CHARLIE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(CHARLIE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: CHARLIE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * UNIT)).build()); }); } @@ -1382,41 +1295,27 @@ fn asset_erc20_precompiles_mint_burn() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 12821u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::default(), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(1000 * UNIT)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); - // Mint 1000 UNITS to BOB - assert_eq!( - Precompiles::new().execute( + // Mint 1000 MOVRS to BOB + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Mint) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Mint) + .write(Address(BOB.into())) .write(U256::from(1000 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(12795) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::default(), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(1000 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert the asset has been minted assert_eq!(LocalAssets::total_supply(0u128), 2_000 * UNIT); @@ -1425,39 +1324,25 @@ fn asset_erc20_precompiles_mint_burn() { 1_000 * UNIT ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 12957u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(BOB), - H160::default(), - EvmDataWriter::new().write(U256::from(500 * UNIT)).build(), - ) - .build(), - })); - - // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + // Burn tokens + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Burn) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Burn) + .write(Address(BOB.into())) .write(U256::from(500 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(12987) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(BOB), + H160::default(), + EvmDataWriter::new().write(U256::from(500 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert the asset has been burnt assert_eq!(LocalAssets::total_supply(0u128), 1_500 * UNIT); @@ -1483,33 +1368,20 @@ fn asset_erc20_precompiles_freeze_thaw_account() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6732u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Freeze Account - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Freeze) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::Freeze) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6735) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is frozen assert_eq!( @@ -1517,31 +1389,18 @@ fn asset_erc20_precompiles_freeze_thaw_account() { Err(TokenError::Frozen.into()) ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6731u64, - logs: Default::default(), - })); - // Thaw Account - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Thaw) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::Thaw) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6728) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is not frozen assert!(LocalAssets::can_withdraw(0u128, &AccountId::from(ALICE), 1) @@ -1565,31 +1424,18 @@ fn asset_erc20_precompiles_freeze_thaw_asset() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5589u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Freeze Asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::FreezeAsset).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::FreezeAsset).build(), + ) + .expect_cost(5595) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is frozen assert_eq!( @@ -1597,34 +1443,16 @@ fn asset_erc20_precompiles_freeze_thaw_asset() { Err(TokenError::Frozen.into()) ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5593u64, - logs: Default::default(), - })); - // Thaw Asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::ThawAsset).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Assert account is not frozen - assert!(LocalAssets::can_withdraw(0u128, &AccountId::from(ALICE), 1) - .into_result() - .is_ok()); + EvmDataWriter::new_with_selector(AssetAction::ThawAsset).build(), + ) + .expect_cost(5593) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -1643,41 +1471,20 @@ fn asset_erc20_precompiles_freeze_transfer_ownership() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6666u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Transfer ownerhsip of an asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferOwnership) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferOwnership) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // No clear way of testing BOB is new owner, other than doing a priviledged function - // e.g., transfer_ownership again - assert_ok!(LocalAssets::transfer_ownership( - origin_of(AccountId::from(BOB)), - 0u128, - AccountId::from(ALICE) - )); + ) + .expect_cost(6641) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }); } @@ -1696,35 +1503,22 @@ fn asset_erc20_precompiles_freeze_set_team() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5614u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Set Bob as issuer, admin and freezer - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::SetTeam) - .write(EvmAddress(BOB.into())) - .write(EvmAddress(BOB.into())) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::SetTeam) + .write(Address(BOB.into())) + .write(Address(BOB.into())) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(5573) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Bob should be able to mint, freeze, and thaw assert_ok!(LocalAssets::mint( @@ -1773,54 +1567,34 @@ fn xcm_asset_erc20_precompiles_supply_and_balance() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); + ); // Assert the asset has been created with the correct supply assert_eq!(Assets::total_supply(relay_asset_id), 1_000 * UNIT); - // The expected result for both total supply and balance of is the same, as only Alice - // holds balance - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000 * UNIT)).build(), - cost: 1000, - logs: Default::default(), - })); - // Access totalSupply through precompile. Important that the context is correct - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * UNIT)).build()); // Access balanceOf through precompile - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * UNIT)).build()); }); } @@ -1851,68 +1625,40 @@ fn xcm_asset_erc20_precompiles_transfer() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); - - // Expected result for a transfer - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 23516u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - ) - .build(), - })); + ); - // Transfer tokens from Aice to Bob, 400 unit. - assert_eq!( - Precompiles::new().execute( + // Transfer tokens from Alice to Bob, 400 UNIT. + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Transfer) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Transfer) + .write(Address(BOB.into())) .write(U256::from(400 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balanceOf BOB - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - cost: 1000, - logs: Default::default(), - })); - - // Make sure BOB has 400 unit - assert_eq!( - Precompiles::new().execute( + ) + .expect_cost(23518) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + // Make sure BOB has 400 UNIT + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * UNIT)).build()); }); } @@ -1943,103 +1689,61 @@ fn xcm_asset_erc20_precompiles_approve() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 13989u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_APPROVAL, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - ) - .build(), - })); + ); - // Aprove Bob for spending 400 unit from Alice - assert_eq!( - Precompiles::new().execute( + // Aprove Bob for spending 400 UNIT from Alice + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Approve) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Approve) + .write(Address(BOB.into())) .write(U256::from(400 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for transfer_from - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 29006u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(CHARLIE), - EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - ) - .build(), - })); + ) + .expect_cost(14006) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_APPROVAL, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferFrom) - .write(EvmAddress(ALICE.into())) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferFrom) + .write(Address(ALICE.into())) + .write(Address(CHARLIE.into())) .write(U256::from(400 * UNIT)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balance of CHARLIE - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), - cost: 1000, - logs: Default::default(), - })); - - // Make sure CHARLIE has 400 unit - assert_eq!( - Precompiles::new().execute( + ) + .expect_cost(28967) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(CHARLIE), + EvmDataWriter::new().write(U256::from(400 * UNIT)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); + + // Make sure CHARLIE has 400 UNIT + Precompiles::new() + .prepare_test( + CHARLIE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(CHARLIE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: CHARLIE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * UNIT)).build()); }); } @@ -2073,8 +1777,7 @@ fn xtokens_precompiles_transfer() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); + ); // Alice has 1000 tokens. She should be able to send through precompile let destination = MultiLocation::new( @@ -2085,31 +1788,21 @@ fn xtokens_precompiles_transfer() { }), ); - // We use the address of the asset as an identifier of the asset we want to transferS - assert_eq!( - Precompiles::new().execute( + // We use the address of the asset as an identifier of the asset we want to transfer + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::Transfer) - .write(EvmAddress(asset_precompile_address)) + EvmDataWriter::new_with_selector(XtokensAction::Transfer) + .write(Address(asset_precompile_address.into())) .write(U256::from(500_000_000_000_000u128)) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 12000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(12000) + .expect_no_logs() + .execute_returns(vec![]) }) } @@ -2147,31 +1840,21 @@ fn xtokens_precompiles_transfer_multiasset() { // This time we transfer it through TransferMultiAsset // Instead of the address, we encode directly the multilocation referencing the asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::TransferMultiAsset) + EvmDataWriter::new_with_selector(XtokensAction::TransferMultiAsset) // We want to transfer the relay token .write(MultiLocation::parent()) .write(U256::from(500_000_000_000_000u128)) .write(destination) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 12000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(12000) + .expect_no_logs() + .execute_returns(vec![]); }) } @@ -2199,31 +1882,21 @@ fn xtokens_precompiles_transfer_native() { }), ); - // We use the address of the asset as an identifier of the asset we want to transferS - assert_eq!( - Precompiles::new().execute( + // We use the address of the asset as an identifier of the asset we want to transfer + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::Transfer) - .write(EvmAddress(asset_precompile_address)) + EvmDataWriter::new_with_selector(XtokensAction::Transfer) + .write(Address(asset_precompile_address)) .write(U256::from(500 * UNIT)) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 12000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(8000) + .expect_no_logs() + .execute_returns(vec![]); }) } @@ -2257,31 +1930,21 @@ fn xtokens_precompile_transfer_local_asset() { }), ); - // We use the address of the asset as an identifier of the asset we want to transferS - assert_eq!( - Precompiles::new().execute( + // We use the address of the asset as an identifier of the asset we want to transfer + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::Transfer) - .write(EvmAddress(asset_precompile_address)) + EvmDataWriter::new_with_selector(XtokensAction::Transfer) + .write(Address(asset_precompile_address)) .write(U256::from(500 * UNIT)) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 12000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(8000) + .expect_no_logs() + .execute_returns(vec![]); }) } @@ -2299,6 +1962,41 @@ where }); } +#[test] +#[rustfmt::skip] +fn length_fee_is_sensible() { + use sp_runtime::testing::TestXt; + + // tests that length fee is sensible for a few hypothetical transactions + ExtBuilder::default().build().execute_with(|| { + let call = frame_system::Call::remark:: { remark: vec![] }; + let uxt: TestXt<_, ()> = TestXt::new(call, Some((1u64, ()))); + + let calc_fee = |len: u32| -> Balance { + moonbase_runtime::TransactionPayment::query_fee_details(uxt.clone(), len) + .inclusion_fee + .expect("fee should be calculated") + .len_fee + }; + + // editorconfig-checker-disable + // left: cost of length fee, right: size in bytes + // /------------- proportional component: O(N * 1B) + // | /- exponential component: O(N ** 3) + // | | + assert_eq!( 1_000_000_001, calc_fee(1)); + assert_eq!( 10_000_001_000, calc_fee(10)); + assert_eq!( 100_001_000_000, calc_fee(100)); + assert_eq!( 1_001_000_000_000, calc_fee(1_000)); + assert_eq!( 11_000_000_000_000, calc_fee(10_000)); // inflection point + assert_eq!( 1_100_000_000_000_000, calc_fee(100_000)); + assert_eq!( 1_001_000_000_000_000_000, calc_fee(1_000_000)); // one UNIT, ~ 1MB + assert_eq!( 1_000_010_000_000_000_000_000, calc_fee(10_000_000)); + assert_eq!(1_000_000_100_000_000_000_000_000, calc_fee(100_000_000)); + // editorconfig-checker-enable + }); +} + #[test] fn multiplier_can_grow_from_zero() { let minimum_multiplier = moonbase_runtime::MinimumMultiplier::get(); @@ -2444,6 +2142,112 @@ fn refund_ed_0_evm() { }); } +#[test] +fn author_does_not_receive_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * UNIT) + (21_000 * (500 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + // Some block author as seen by pallet-evm. + let author = AccountId::from(>::find_author()); + // Currently the default impl of the evm uses `deposit_into_existing`. + // If we were to use this implementation, and for an author to receive eventual tips, + // the account needs to be somehow initialized, otherwise the deposit would fail. + Balances::make_free_balance_be(&author, 100 * UNIT); + + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * UNIT).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(300 * GIGAWEI), + max_priority_fee_per_gas: Some(U256::from(200 * GIGAWEI)), + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + // Author free balance didn't change. + assert_eq!(Balances::free_balance(author), 100 * UNIT,); + }); +} + +#[test] +fn total_issuance_after_evm_transaction_with_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * UNIT) + (21_000 * (2 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + let issuance_before = ::Currency::total_issuance(); + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * UNIT).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(2 * GIGAWEI), + max_priority_fee_per_gas: Some(U256::from(1 * GIGAWEI)), + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let issuance_after = ::Currency::total_issuance(); + // Fee is 1 GWEI base fee + 1 GWEI tip. + let fee = ((2 * GIGAWEI) * 21_000) as f64; + // 80% was burned. + let expected_burn = (fee * 0.8) as u128; + assert_eq!(issuance_after, issuance_before - expected_burn,); + // 20% was sent to treasury. + let expected_treasury = (fee * 0.2) as u128; + assert_eq!(moonbase_runtime::Treasury::pot(), expected_treasury); + }); +} + +#[test] +fn total_issuance_after_evm_transaction_without_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * UNIT) + (21_000 * (2 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + let issuance_before = ::Currency::total_issuance(); + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * UNIT).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(1 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let issuance_after = ::Currency::total_issuance(); + // Fee is 1 GWEI base fee. + let fee = ((1 * GIGAWEI) * 21_000) as f64; + // 80% was burned. + let expected_burn = (fee * 0.8) as u128; + assert_eq!(issuance_after, issuance_before - expected_burn,); + // 20% was sent to treasury. + let expected_treasury = (fee * 0.2) as u128; + assert_eq!(moonbase_runtime::Treasury::pot(), expected_treasury); + }); +} + #[test] fn root_can_change_default_xcm_vers() { ExtBuilder::default() @@ -2530,14 +2334,21 @@ fn transactor_cannot_use_more_than_max_weight() { AccountId::from(ALICE), 0, )); + // Root can set transact info assert_ok!(XcmTransactor::set_transact_info( root_origin(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000, + None + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1, - 20000 )); assert_noop!( @@ -2550,7 +2361,7 @@ fn transactor_cannot_use_more_than_max_weight() { 17000, vec![], ), - xcm_transactor::Error::::MaxWeightTransactReached + pallet_xcm_transactor::Error::::MaxWeightTransactReached ); assert_noop!( XcmTransactor::transact_through_derivative( @@ -2562,7 +2373,7 @@ fn transactor_cannot_use_more_than_max_weight() { 17000, vec![], ), - xcm_transactor::Error::::MaxWeightTransactReached + pallet_xcm_transactor::Error::::MaxWeightTransactReached ); }) } @@ -2591,101 +2402,65 @@ fn author_mapping_precompile_associate_update_and_clear() { let second_vrf_id: session_keys_primitives::VrfId = sp_core::sr25519::Public::unchecked_from([2u8; 32]).into(); - let associate_expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 11325u64, - logs: Default::default(), - })); - // Associate it - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, author_mapping_precompile_address, - &EvmDataWriter::new_with_selector(AuthorMappingAction::AddAssociation) + EvmDataWriter::new_with_selector(AuthorMappingAction::AddAssociation) .write(sp_core::H256::from([1u8; 32])) .build(), - None, - &Context { - address: author_mapping_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - associate_expected_result - ); + ) + .expect_cost(15388) + .expect_no_logs() + .execute_returns(vec![]); let expected_associate_event = - Event::AuthorMapping(pallet_author_mapping::Event::AuthorRegistered { - author_id: first_nimbus_id.clone(), + Event::AuthorMapping(pallet_author_mapping::Event::KeysRegistered { + nimbus_id: first_nimbus_id.clone(), account_id: AccountId::from(ALICE), keys: first_vrf_id.clone(), }); assert_eq!(last_event(), expected_associate_event); - let update_expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 11030u64, - logs: Default::default(), - })); - // Update it - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, author_mapping_precompile_address, - &EvmDataWriter::new_with_selector(AuthorMappingAction::UpdateAssociation) + EvmDataWriter::new_with_selector(AuthorMappingAction::UpdateAssociation) .write(sp_core::H256::from([1u8; 32])) .write(sp_core::H256::from([2u8; 32])) .build(), - None, - &Context { - address: author_mapping_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - update_expected_result - ); + ) + .expect_cost(15190) + .expect_no_logs() + .execute_returns(vec![]); let expected_update_event = - Event::AuthorMapping(pallet_author_mapping::Event::AuthorRotated { - new_author_id: second_nimbus_id.clone(), + Event::AuthorMapping(pallet_author_mapping::Event::KeysRotated { + new_nimbus_id: second_nimbus_id.clone(), account_id: AccountId::from(ALICE), new_keys: second_vrf_id.clone(), }); assert_eq!(last_event(), expected_update_event); - let clear_expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 11450u64, - logs: Default::default(), - })); - // Clear it - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, author_mapping_precompile_address, - &EvmDataWriter::new_with_selector(AuthorMappingAction::ClearAssociation) + EvmDataWriter::new_with_selector(AuthorMappingAction::ClearAssociation) .write(sp_core::H256::from([2u8; 32])) .build(), - None, - &Context { - address: author_mapping_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - clear_expected_result - ); + ) + .expect_cost(15447) + .expect_no_logs() + .execute_returns(vec![]); let expected_clear_event = - Event::AuthorMapping(pallet_author_mapping::Event::AuthorDeRegistered { - author_id: second_nimbus_id, + Event::AuthorMapping(pallet_author_mapping::Event::KeysRemoved { + nimbus_id: second_nimbus_id, account_id: AccountId::from(ALICE), keys: second_vrf_id, }); @@ -2709,70 +2484,45 @@ fn author_mapping_register_and_set_keys() { let second_vrf_key: session_keys_primitives::VrfId = sp_core::sr25519::Public::unchecked_from([4u8; 32]).into(); - let associate_expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 11344u64, - logs: Default::default(), - })); - // Associate it - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, author_mapping_precompile_address, - &EvmDataWriter::new_with_selector(AuthorMappingAction::RegisterKeys) + EvmDataWriter::new_with_selector(AuthorMappingAction::SetKeys) .write(sp_core::H256::from([1u8; 32])) .write(sp_core::H256::from([3u8; 32])) .build(), - None, - &Context { - address: author_mapping_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - associate_expected_result - ); + ) + .expect_cost(16280) + .expect_no_logs() + .execute_returns(vec![]); let expected_associate_event = - Event::AuthorMapping(pallet_author_mapping::Event::AuthorRegistered { - author_id: first_nimbus_id.clone(), + Event::AuthorMapping(pallet_author_mapping::Event::KeysRegistered { + nimbus_id: first_nimbus_id.clone(), account_id: AccountId::from(ALICE), keys: first_vrf_key.clone(), }); assert_eq!(last_event(), expected_associate_event); - let update_expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: Default::default(), - cost: 11023u64, - logs: Default::default(), - })); - // Update it - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, author_mapping_precompile_address, - &EvmDataWriter::new_with_selector(AuthorMappingAction::SetKeys) - .write(sp_core::H256::from([1u8; 32])) + EvmDataWriter::new_with_selector(AuthorMappingAction::SetKeys) .write(sp_core::H256::from([2u8; 32])) .write(sp_core::H256::from([4u8; 32])) .build(), - None, - &Context { - address: author_mapping_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - update_expected_result - ); + ) + .expect_cost(16280) + .expect_no_logs() + .execute_returns(vec![]); let expected_update_event = - Event::AuthorMapping(pallet_author_mapping::Event::AuthorRotated { - new_author_id: second_nimbus_id.clone(), + Event::AuthorMapping(pallet_author_mapping::Event::KeysRotated { + new_nimbus_id: second_nimbus_id.clone(), account_id: AccountId::from(ALICE), new_keys: second_vrf_key.clone(), }); @@ -2786,7 +2536,7 @@ fn precompile_existence() { let precompiles = Precompiles::new(); let precompile_addresses: std::collections::BTreeSet<_> = vec![ 1, 2, 3, 4, 5, 6, 7, 8, 9, 1024, 1025, 1026, 2048, 2049, 2050, 2051, 2052, 2053, 2054, - 2055, + 2055, 2056, 2057, 2058, ] .into_iter() .map(H160::from_low_u64_be) @@ -2804,17 +2554,14 @@ fn precompile_existence() { assert!( precompiles - .execute( + .execute(&mut MockHandle::new( address, - &vec![], - None, - &Context { + Context { address, caller: H160::zero(), apparent_value: U256::zero() - }, - false - ) + } + ),) .is_some(), "execute({},..) should return Some(_)", i @@ -2828,17 +2575,14 @@ fn precompile_existence() { assert!( precompiles - .execute( + .execute(&mut MockHandle::new( address, - &vec![], - None, - &Context { + Context { address, caller: H160::zero(), apparent_value: U256::zero() - }, - false - ) + } + ),) .is_none(), "execute({},..) should return None", i @@ -2857,3 +2601,81 @@ fn base_fee_should_default_to_associate_type_value() { ); }); } + +#[test] +fn evm_revert_substrate_events() { + ExtBuilder::default() + .with_balances(vec![(AccountId::from(ALICE), 1_000 * UNIT)]) + .build() + .execute_with(|| { + let batch_precompile_address = H160::from_low_u64_be(2056); + + // Batch a transfer followed by an invalid call to batch. + // Thus BatchAll will revert the transfer. + assert_ok!(Call::EVM(pallet_evm::Call::call { + source: ALICE.into(), + target: batch_precompile_address, + input: EvmDataWriter::new_with_selector(BatchAction::BatchAll) + .write(vec![Address(BOB.into()), Address(batch_precompile_address)]) + .write(vec![U256::from(1 * UNIT), U256::zero()]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + value: U256::zero(), // No value sent in EVM + gas_limit: 500_000, + max_fee_per_gas: U256::from(1 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let transfer_count = System::events() + .iter() + .filter(|r| match r.event { + Event::Balances(pallet_balances::Event::Transfer { .. }) => true, + _ => false, + }) + .count(); + + assert_eq!(transfer_count, 0, "there should be no transfer event"); + }); +} + +#[test] +fn evm_success_keeps_substrate_events() { + ExtBuilder::default() + .with_balances(vec![(AccountId::from(ALICE), 1_000 * UNIT)]) + .build() + .execute_with(|| { + let batch_precompile_address = H160::from_low_u64_be(2056); + + assert_ok!(Call::EVM(pallet_evm::Call::call { + source: ALICE.into(), + target: batch_precompile_address, + input: EvmDataWriter::new_with_selector(BatchAction::BatchAll) + .write(vec![Address(BOB.into())]) + .write(vec![U256::from(1 * UNIT)]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + value: U256::zero(), // No value sent in EVM + gas_limit: 500_000, + max_fee_per_gas: U256::from(1 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let transfer_count = System::events() + .iter() + .filter(|r| match r.event { + Event::Balances(pallet_balances::Event::Transfer { .. }) => true, + _ => false, + }) + .count(); + + assert_eq!(transfer_count, 1, "there should be 1 transfer event"); + }); +} diff --git a/runtime/moonbase/tests/runtime_apis.rs b/runtime/moonbase/tests/runtime_apis.rs index 405130c76a..1f03e3aac4 100644 --- a/runtime/moonbase/tests/runtime_apis.rs +++ b/runtime/moonbase/tests/runtime_apis.rs @@ -54,7 +54,7 @@ fn ethereum_runtime_rpc_api_account_basic() { #[test] fn ethereum_runtime_rpc_api_gas_price() { ExtBuilder::default().build().execute_with(|| { - assert_eq!(Runtime::gas_price(), FixedGasPrice::min_gas_price()); + assert_eq!(Runtime::gas_price(), FixedGasPrice::min_gas_price().0); }); } diff --git a/runtime/moonbase/tests/xcm_mock/mod.rs b/runtime/moonbase/tests/xcm_mock/mod.rs index 969f1e65b0..5a4505621d 100644 --- a/runtime/moonbase/tests/xcm_mock/mod.rs +++ b/runtime/moonbase/tests/xcm_mock/mod.rs @@ -18,7 +18,7 @@ pub mod parachain; pub mod relay_chain; pub mod statemint_like; use cumulus_primitives_core::ParaId; -use polkadot_parachain::primitives::AccountIdConversion; +use sp_runtime::traits::AccountIdConversion; use sp_runtime::AccountId32; use xcm_simulator::{decl_test_network, decl_test_parachain, decl_test_relay_chain}; @@ -29,7 +29,11 @@ pub const PARAALICE: [u8; 20] = [1u8; 20]; pub const RELAYALICE: AccountId32 = AccountId32::new([0u8; 32]); pub fn para_a_account() -> AccountId32 { - ParaId::from(1).into_account() + ParaId::from(1).into_account_truncating() +} + +pub fn para_a_account_20() -> parachain::AccountId { + ParaId::from(1).into_account_truncating() } pub fn evm_account() -> H160 { @@ -195,4 +199,4 @@ pub type AssetManager = pallet_asset_manager::Pallet; pub type XTokens = orml_xtokens::Pallet; pub type RelayBalances = pallet_balances::Pallet; pub type ParaBalances = pallet_balances::Pallet; -pub type XcmTransactor = xcm_transactor::Pallet; +pub type XcmTransactor = pallet_xcm_transactor::Pallet; diff --git a/runtime/moonbase/tests/xcm_mock/parachain.rs b/runtime/moonbase/tests/xcm_mock/parachain.rs index 96be82a190..686b3b40c7 100644 --- a/runtime/moonbase/tests/xcm_mock/parachain.rs +++ b/runtime/moonbase/tests/xcm_mock/parachain.rs @@ -86,7 +86,7 @@ impl frame_system::Config for Runtime { type OnNewAccount = (); type OnKilledAccount = (); type DbWeight = (); - type BaseCallFilter = Nothing; + type BaseCallFilter = Everything; type SystemWeightInfo = (); type SS58Prefix = (); type OnSetCode = (); @@ -167,6 +167,8 @@ pub type LocationToAccountId = ( // Sibling parachain origins convert to AccountId via the `ParaId::into`. SiblingParachainConvertsVia, AccountKey20Aliases, + // The rest of multilocations convert via hashing it + xcm_primitives::Account20Hash, ); /// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, @@ -265,10 +267,12 @@ pub type AssetTransactors = ( ForeignFungiblesTransactor, LocalFungiblesTransactor, ); + pub type XcmRouter = super::ParachainXcmRouter; pub type Barrier = ( TakeWeightCredit, + xcm_primitives::AllowDescendOriginFromLocal, AllowTopLevelPaidExecutionFrom, // Expected responses are OK. AllowKnownQueryResponses, @@ -328,6 +332,13 @@ parameter_types! { ) }; } + +use frame_system::RawOrigin; +use sp_runtime::traits::PostDispatchInfoOf; +use sp_runtime::DispatchErrorWithPostInfo; +use xcm_executor::traits::CallDispatcher; +moonbeam_runtime_common::impl_moonbeam_xcm_call!(); + pub struct XcmConfig; impl Config for XcmConfig { type Call = Call; @@ -354,6 +365,7 @@ impl Config for XcmConfig { type SubscriptionService = PolkadotXcm; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; + type CallDispatcher = MoonbeamCall; } impl cumulus_pallet_xcm::Config for Runtime { @@ -410,8 +422,8 @@ parameter_types! { } parameter_type_with_key! { - pub ParachainMinFee: |_location: MultiLocation| -> u128 { - u128::MAX + pub ParachainMinFee: |_location: MultiLocation| -> Option { + Some(u128::MAX) }; } @@ -807,8 +819,8 @@ impl pallet_asset_manager::LocalAssetIdCreator for LocalAssetIdCreator // Our means of converting a local asset counter to an assetId // We basically hash (local asset counter) let mut result: [u8; 16] = [0u8; 16]; - let to_hash = local_asset_counter.encode(); - let hash: H256 = to_hash.using_encoded(::Hashing::hash); + let hash: H256 = + local_asset_counter.using_encoded(::Hashing::hash); result.copy_from_slice(&hash.as_fixed_bytes()[0..16]); u128::from_le_bytes(result) } @@ -830,7 +842,7 @@ impl pallet_asset_manager::Config for Runtime { type WeightInfo = (); } -impl xcm_transactor::Config for Runtime { +impl pallet_xcm_transactor::Config for Runtime { type Event = Event; type Balance = Balance; type Transactor = MockTransactors; @@ -860,6 +872,12 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = (); } +use sp_core::U256; + +parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); +} + impl pallet_evm::Config for Runtime { type FeeCalculator = (); type GasWeightMapping = (); @@ -867,7 +885,7 @@ impl pallet_evm::Config for Runtime { type CallOrigin = pallet_evm::EnsureAddressRoot; type WithdrawOrigin = pallet_evm::EnsureAddressNever; - type AddressMapping = runtime_common::IntoAddressMapping; + type AddressMapping = moonbeam_runtime_common::IntoAddressMapping; type Currency = Balances; type Runner = pallet_evm::runner::stack::Runner; @@ -875,11 +893,10 @@ impl pallet_evm::Config for Runtime { type PrecompilesType = (); type PrecompilesValue = (); type ChainId = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type OnChargeTransaction = (); type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } pub struct NormalFilter; @@ -933,6 +950,22 @@ impl xcm_primitives::UtilityEncodeCall for MockTransactors { } } +impl pallet_ethereum::Config for Runtime { + type Event = Event; + type StateRoot = pallet_ethereum::IntermediateStateRoot; +} + +parameter_types! { + pub ReservedXcmpWeight: Weight = u64::max_value(); +} + +impl pallet_ethereum_xcm::Config for Runtime { + type InvalidEvmTransactionError = pallet_ethereum::InvalidTransactionWrapper; + type ValidatedTransaction = pallet_ethereum::ValidatedTransaction; + type XcmEthereumOrigin = pallet_ethereum_xcm::EnsureXcmEthereumTransaction; + type ReservedXcmpWeight = ReservedXcmpWeight; +} + type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; @@ -952,13 +985,14 @@ construct_runtime!( CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin}, XTokens: orml_xtokens::{Pallet, Call, Storage, Event}, AssetManager: pallet_asset_manager::{Pallet, Call, Storage, Event}, - XcmTransactor: xcm_transactor::{Pallet, Call, Storage, Event}, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Storage, Event}, Treasury: pallet_treasury::{Pallet, Storage, Config, Event, Call}, LocalAssets: pallet_assets::::{Pallet, Call, Storage, Event}, Timestamp: pallet_timestamp::{Pallet, Call, Storage}, EVM: pallet_evm::{Pallet, Call, Storage, Config, Event}, - + Ethereum: pallet_ethereum::{Pallet, Call, Storage, Event, Origin, Config}, + EthereumXcm: pallet_ethereum_xcm::{Pallet, Call, Origin}, } ); diff --git a/runtime/moonbase/tests/xcm_mock/relay_chain.rs b/runtime/moonbase/tests/xcm_mock/relay_chain.rs index 29d4986a85..af9adfcd53 100644 --- a/runtime/moonbase/tests/xcm_mock/relay_chain.rs +++ b/runtime/moonbase/tests/xcm_mock/relay_chain.rs @@ -28,7 +28,7 @@ use polkadot_parachain::primitives::Id as ParaId; use polkadot_runtime_parachains::{configuration, origin, shared, ump}; use xcm::latest::prelude::*; use xcm_builder::{ - AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, + Account32Hash, AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, IsConcrete, LocationInverter, SignedAccountId32AsNative, @@ -111,6 +111,9 @@ parameter_types! { pub type SovereignAccountOf = ( ChildParachainConvertsVia, AccountId32Aliases, + // Not enabled in the relay per se, but we enable it to test + // the transact_through_signed extrinsic + Account32Hash, ); pub type LocalAssetTransactor = @@ -132,6 +135,7 @@ parameter_types! { pub type XcmRouter = super::RelayChainXcmRouter; pub type Barrier = ( TakeWeightCredit, + xcm_primitives::AllowDescendOriginFromLocal, AllowTopLevelPaidExecutionFrom, // Expected responses are OK. AllowKnownQueryResponses, @@ -155,6 +159,7 @@ impl Config for XcmConfig { type AssetTrap = XcmPallet; type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type CallDispatcher = Call; } pub type LocalOriginToLocation = SignedToAccountId32; diff --git a/runtime/moonbase/tests/xcm_mock/statemint_like.rs b/runtime/moonbase/tests/xcm_mock/statemint_like.rs index 329965f19b..e6b505d8c5 100644 --- a/runtime/moonbase/tests/xcm_mock/statemint_like.rs +++ b/runtime/moonbase/tests/xcm_mock/statemint_like.rs @@ -263,6 +263,7 @@ impl Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; + type CallDispatcher = Call; } /// No local origins on this chain are allowed to dispatch XCM sends/executions. diff --git a/runtime/moonbase/tests/xcm_tests.rs b/runtime/moonbase/tests/xcm_tests.rs index d738992a38..db950281a1 100644 --- a/runtime/moonbase/tests/xcm_tests.rs +++ b/runtime/moonbase/tests/xcm_tests.rs @@ -959,8 +959,14 @@ fn transact_through_derivative_multilocation() { Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000000000, + None + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1 * WEIGHT_PER_SECOND as u128, - 20000000000 )); }); @@ -1111,9 +1117,16 @@ fn transact_through_sovereign() { assert_ok!(XcmTransactor::set_transact_info( parachain::Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000000000, + None + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1 * WEIGHT_PER_SECOND as u128, - 20000000000 )); }); @@ -2148,6 +2161,320 @@ fn send_para_a_local_asset_to_para_b_and_send_it_back_together_with_some_dev() { }); } +#[test] +fn transact_through_signed_multilocation() { + MockNet::reset(); + let mut ancestry = MultiLocation::parent(); + + ParaA::execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 + 3000, + 20000000000, + // 4 instructions in transact through signed + Some(4000) + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 * WEIGHT_PER_SECOND as u128, + )); + ancestry = parachain::Ancestry::get(); + }); + + // Let's construct the Junction that we will append with DescendOrigin + let signed_origin: Junctions = X1(AccountKey20 { + network: NetworkId::Any, + key: PARAALICE, + }); + + let mut descend_origin_multilocation = parachain::SelfLocation::get(); + descend_origin_multilocation + .append_with(signed_origin) + .unwrap(); + + // To convert it to what the relay will see instead of us + descend_origin_multilocation + .reanchor(&MultiLocation::parent(), &ancestry) + .unwrap(); + + let derived = xcm_builder::Account32Hash::< + relay_chain::KusamaNetwork, + relay_chain::AccountId, + >::convert_ref(descend_origin_multilocation) + .unwrap(); + + Relay::execute_with(|| { + // free execution, full amount received + assert_ok!(RelayBalances::transfer( + relay_chain::Origin::signed(RELAYALICE), + derived.clone(), + 4000004100u128, + )); + // derived account has all funds + assert!(RelayBalances::free_balance(&derived) == 4000004100); + // sovereign account has 0 funds + assert!(RelayBalances::free_balance(¶_a_account()) == 0); + }); + + // Encode the call. Balances transact to para_a_account + // First index + let mut encoded: Vec = Vec::new(); + let index = ::PalletInfo::index::< + relay_chain::Balances, + >() + .unwrap() as u8; + + encoded.push(index); + + // Then call bytes + let mut call_bytes = pallet_balances::Call::::transfer { + // 100 to sovereign + dest: para_a_account(), + value: 100u32.into(), + } + .encode(); + encoded.append(&mut call_bytes); + + ParaA::execute_with(|| { + assert_ok!(XcmTransactor::transact_through_signed_multilocation( + parachain::Origin::signed(PARAALICE.into()), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // 4000000000 for transfer + 4000 for XCM + // 1-1 to fee + 4000000000, + encoded, + )); + }); + + Relay::execute_with(|| { + assert!(RelayBalances::free_balance(¶_a_account()) == 100); + + assert!(RelayBalances::free_balance(&derived) == 0); + }); +} + +#[test] +fn transact_through_signed_multilocation_para_to_para() { + MockNet::reset(); + let mut ancestry = MultiLocation::parent(); + + let para_b_location = MultiLocation::new(1, X1(Parachain(2))); + + let para_b_balances = MultiLocation::new(1, X2(Parachain(2), PalletInstance(1u8))); + + ParaA::execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + parachain::Origin::root(), + // ParaB + Box::new(xcm::VersionedMultiLocation::V1(para_b_location.clone())), + // Para charges 1000 for every instruction, and we have 3, so 3 + 3, + 20000000000, + // 4 instructions in transact through signed + Some(4) + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(para_b_balances.clone())), + parachain::ParaTokensPerSecond::get().1 as u128, + )); + ancestry = parachain::Ancestry::get(); + }); + + // Let's construct the Junction that we will append with DescendOrigin + let signed_origin: Junctions = X1(AccountKey20 { + network: NetworkId::Any, + key: PARAALICE, + }); + + let mut descend_origin_multilocation = parachain::SelfLocation::get(); + descend_origin_multilocation + .append_with(signed_origin) + .unwrap(); + + // To convert it to what the paraB will see instead of us + descend_origin_multilocation + .reanchor(¶_b_location, &ancestry) + .unwrap(); + + let derived = xcm_primitives::Account20Hash::::convert_ref( + descend_origin_multilocation, + ) + .unwrap(); + + ParaB::execute_with(|| { + // free execution, full amount received + assert_ok!(ParaBalances::transfer( + parachain::Origin::signed(PARAALICE.into()), + derived.clone(), + 4000000104u128, + )); + // derived account has all funds + assert!(ParaBalances::free_balance(&derived) == 4000000104); + // sovereign account has 0 funds + assert!(ParaBalances::free_balance(¶_a_account_20()) == 0); + }); + + // Encode the call. Balances transact to para_a_account + // First index + let mut encoded: Vec = Vec::new(); + let index = + ::PalletInfo::index::() + .unwrap() as u8; + + encoded.push(index); + + // Then call bytes + let mut call_bytes = pallet_balances::Call::::transfer { + // 100 to sovereign + dest: para_a_account_20(), + value: 100u32.into(), + } + .encode(); + encoded.append(&mut call_bytes); + + ParaA::execute_with(|| { + assert_ok!(XcmTransactor::transact_through_signed_multilocation( + parachain::Origin::signed(PARAALICE.into()), + Box::new(xcm::VersionedMultiLocation::V1(para_b_location)), + Box::new(xcm::VersionedMultiLocation::V1(para_b_balances)), + // 4000000000 for transfer + 4000 for XCM + // 1-1 to fee + 4000000000, + encoded, + )); + }); + + ParaB::execute_with(|| { + assert!(ParaBalances::free_balance(&derived) == 0); + + assert!(ParaBalances::free_balance(¶_a_account_20()) == 100); + }); +} + +#[test] +fn transact_through_signed_multilocation_para_to_para_ethereum() { + MockNet::reset(); + let mut ancestry = MultiLocation::parent(); + + let para_b_location = MultiLocation::new(1, X1(Parachain(2))); + + let para_b_balances = MultiLocation::new(1, X2(Parachain(2), PalletInstance(1u8))); + + ParaA::execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + parachain::Origin::root(), + // ParaB + Box::new(xcm::VersionedMultiLocation::V1(para_b_location.clone())), + // Para charges 1000 for every instruction, and we have 3, so 3 + 3, + 20000000000, + // 4 instructions in transact through signed + Some(4) + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(para_b_balances.clone())), + parachain::ParaTokensPerSecond::get().1 as u128, + )); + ancestry = parachain::Ancestry::get(); + }); + + // Let's construct the Junction that we will append with DescendOrigin + let signed_origin: Junctions = X1(AccountKey20 { + network: NetworkId::Any, + key: PARAALICE, + }); + + let mut descend_origin_multilocation = parachain::SelfLocation::get(); + descend_origin_multilocation + .append_with(signed_origin) + .unwrap(); + + // To convert it to what the paraB will see instead of us + descend_origin_multilocation + .reanchor(¶_b_location, &ancestry) + .unwrap(); + + let derived = xcm_primitives::Account20Hash::::convert_ref( + descend_origin_multilocation, + ) + .unwrap(); + + let mut parachain_b_alice_balances_before = 0; + ParaB::execute_with(|| { + assert_ok!(ParaBalances::transfer( + parachain::Origin::signed(PARAALICE.into()), + derived.clone(), + 4000000104u128, + )); + // derived account has all funds + assert!(ParaBalances::free_balance(&derived) == 4000000104); + // sovereign account has 0 funds + assert!(ParaBalances::free_balance(¶_a_account_20()) == 0); + + parachain_b_alice_balances_before = ParaBalances::free_balance(&PARAALICE.into()) + }); + + // Encode the call. Balances transact to para_a_account + // First index + let mut encoded: Vec = Vec::new(); + let index = + ::PalletInfo::index::() + .unwrap() as u8; + + encoded.push(index); + + use sp_core::U256; + // Let's do a EVM transfer + let eth_tx = + xcm_primitives::EthereumXcmTransaction::V1(xcm_primitives::EthereumXcmTransactionV1 { + gas_limit: U256::from(21000), + fee_payment: xcm_primitives::EthereumXcmFee::Auto, + action: pallet_ethereum::TransactionAction::Call(PARAALICE.into()), + value: U256::from(100), + input: vec![], + access_list: None, + }); + + // Then call bytes + let mut call_bytes = pallet_ethereum_xcm::Call::::transact { + xcm_transaction: eth_tx, + } + .encode(); + encoded.append(&mut call_bytes); + + ParaA::execute_with(|| { + assert_ok!(XcmTransactor::transact_through_signed_multilocation( + parachain::Origin::signed(PARAALICE.into()), + Box::new(xcm::VersionedMultiLocation::V1(para_b_location)), + Box::new(xcm::VersionedMultiLocation::V1(para_b_balances)), + // 4000000000 for transfer + 4000 for XCM + // 1-1 to fee + 4000000000, + encoded, + )); + }); + + ParaB::execute_with(|| { + // Make sure the EVM transfer went through + assert!( + ParaBalances::free_balance(&PARAALICE.into()) + == parachain_b_alice_balances_before + 100 + ); + }); +} + use parity_scale_codec::{Decode, Encode}; use sp_io::hashing::blake2_256; diff --git a/runtime/moonbeam/Cargo.toml b/runtime/moonbeam/Cargo.toml index 6aa666c3e7..0830b9e8f2 100644 --- a/runtime/moonbeam/Cargo.toml +++ b/runtime/moonbeam/Cargo.toml @@ -20,33 +20,34 @@ smallvec = "1.8.0" account = { path = "../../primitives/account/", default-features = false } moonbeam-core-primitives = { path = "../../core-primitives", default-features = false } moonbeam-relay-encoder = { path = "../relay-encoder", default-features = false } +moonbeam-runtime-common = { path = "../common", default-features = false } precompile-utils = { path = "../../precompiles/utils", default-features = false } -runtime-common = { path = "../common", default-features = false } session-keys-primitives = { path = "../../primitives/session-keys", default-features = false } xcm-primitives = { path = "../../primitives/xcm/", default-features = false } # Moonbeam pallets pallet-asset-manager = { path = "../../pallets/asset-manager", default-features = false } pallet-author-mapping = { path = "../../pallets/author-mapping", default-features = false } -pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.23", default-features = false } pallet-ethereum-chain-id = { path = "../../pallets/ethereum-chain-id", default-features = false } pallet-maintenance-mode = { path = "../../pallets/maintenance-mode", default-features = false, features = [ "xcm-support" ] } pallet-migrations = { path = "../../pallets/migrations", default-features = false } pallet-moonbeam-orbiters = { path = "../../pallets/moonbeam-orbiters", default-features = false } +pallet-parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } pallet-proxy-genesis-companion = { path = "../../pallets/proxy-genesis-companion", default-features = false } -parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } -xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } +pallet-xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } # Moonbeam precompiles -crowdloan-rewards-precompiles = { path = "../../precompiles/crowdloan-rewards", default-features = false } -pallet-author-mapping-precompiles = { path = "../../precompiles/author-mapping", default-features = false } -pallet-democracy-precompiles = { path = "../../precompiles/pallet-democracy", default-features = false } -pallet-evm-precompile-assets-erc20 = { path = "../../precompiles/assets-erc20", default-features = false } +pallet-evm-precompile-author-mapping = { path = "../../precompiles/author-mapping", default-features = false } pallet-evm-precompile-balances-erc20 = { path = "../../precompiles/balances-erc20", default-features = false } -parachain-staking-precompiles = { path = "../../precompiles/parachain-staking", default-features = false } -relay-encoder-precompiles = { path = "../../precompiles/relay-encoder", default-features = false } -xcm-transactor-precompiles = { path = "../../precompiles/xcm_transactor", default-features = false } -xtokens-precompiles = { path = "../../precompiles/xtokens", default-features = false } +pallet-evm-precompile-batch = { path = "../../precompiles/batch", default-features = false } +pallet-evm-precompile-crowdloan-rewards = { path = "../../precompiles/crowdloan-rewards", default-features = false } +pallet-evm-precompile-democracy = { path = "../../precompiles/pallet-democracy", default-features = false } +pallet-evm-precompile-parachain-staking = { path = "../../precompiles/parachain-staking", default-features = false } +pallet-evm-precompile-relay-encoder = { path = "../../precompiles/relay-encoder", default-features = false } +pallet-evm-precompile-xcm-transactor = { path = "../../precompiles/xcm-transactor", default-features = false } +pallet-evm-precompile-xtokens = { path = "../../precompiles/xtokens", default-features = false } +pallet-evm-precompileset-assets-erc20 = { path = "../../precompiles/assets-erc20", default-features = false } # Moonbeam tracing evm-tracing-events = { path = "../../primitives/rpc/evm-tracing-events", optional = true, default-features = false } @@ -55,94 +56,96 @@ moonbeam-rpc-primitives-debug = { path = "../../primitives/rpc/debug", default-f moonbeam-rpc-primitives-txpool = { path = "../../primitives/rpc/txpool", default-features = false } # Substrate -frame-executive = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-assets = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-collective = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-democracy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-identity = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-proxy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-randomness-collective-flip = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-scheduler = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-society = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-transaction-payment = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-treasury = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-utility = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-executive = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-assets = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-democracy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-identity = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-proxy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-society = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-utility = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive", "max-encoded-len" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-block-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-inherents = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-offchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-session = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-version = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-blake2 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-bn128 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-dispatch = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-modexp = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-sha3fips = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-simple = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-blake2 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-bn128 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-dispatch = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-modexp = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-sha3fips = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-simple = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Cumulus / Nimbus -cumulus-pallet-dmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-xcm = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-xcmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-timestamp = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-utility = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -parachain-info = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-pallet-dmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-xcm = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-xcmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-timestamp = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-utility = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +parachain-info = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Polkadot / XCM -orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -orml-xcm-support = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -polkadot-core-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +orml-xcm-support = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +polkadot-core-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Benchmarking -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-system-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-try-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } [dev-dependencies] hex = "0.4" rlp = "0.5" sha3 = "0.9" -cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } -polkadot-runtime-parachains = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-simulator = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +polkadot-runtime-parachains = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-simulator = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } + +precompile-utils = { path = "../../precompiles/utils", default-features = false, features = [ "testing" ] } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] @@ -168,12 +171,12 @@ std = [ "moonbeam-relay-encoder/std", "moonbeam-rpc-primitives-debug/std", "moonbeam-rpc-primitives-txpool/std", + "moonbeam-runtime-common/std", "nimbus-primitives/std", "orml-xtokens/std", "pallet-asset-manager/std", "pallet-assets/std", "pallet-author-inherent/std", - "pallet-author-mapping-precompiles/std", "pallet-author-mapping/std", "pallet-author-slot-filter/std", "pallet-balances/std", @@ -183,13 +186,20 @@ std = [ "pallet-democracy/std", "pallet-ethereum-chain-id/std", "pallet-ethereum/std", - "pallet-evm-precompile-assets-erc20/std", + "pallet-evm-precompile-author-mapping/std", "pallet-evm-precompile-balances-erc20/std", + "pallet-evm-precompile-batch/std", + "pallet-evm-precompile-parachain-staking/std", + "pallet-evm-precompile-relay-encoder/std", + "pallet-evm-precompile-xcm-transactor/std", + "pallet-evm-precompile-xtokens/std", + "pallet-evm-precompileset-assets-erc20/std", "pallet-evm/std", "pallet-identity/std", "pallet-maintenance-mode/std", "pallet-migrations/std", "pallet-moonbeam-orbiters/std", + "pallet-parachain-staking/std", "pallet-proxy-genesis-companion/std", "pallet-proxy/std", "pallet-randomness-collective-flip/std", @@ -200,14 +210,11 @@ std = [ "pallet-transaction-payment/std", "pallet-treasury/std", "pallet-utility/std", + "pallet-xcm-transactor/std", "pallet-xcm/std", "parachain-info/std", - "parachain-staking-precompiles/std", - "parachain-staking/std", "parity-scale-codec/std", "precompile-utils/std", - "relay-encoder-precompiles/std", - "runtime-common/std", "scale-info/std", "serde", "session-keys-primitives/std", @@ -225,10 +232,7 @@ std = [ "xcm-builder/std", "xcm-executor/std", "xcm-primitives/std", - "xcm-transactor-precompiles/std", - "xcm-transactor/std", "xcm/std", - "xtokens-precompiles/std", ] evm-tracing = [ "evm-tracing-events", "moonbeam-evm-tracer", "rlp", "sha3" ] @@ -241,12 +245,14 @@ runtime-wasm = [] on-chain-release-build = [ "sp-api/disable-logging" ] runtime-benchmarks = [ + "cumulus-pallet-parachain-system/runtime-benchmarks", "frame-benchmarking", "frame-support/runtime-benchmarks", "frame-system-benchmarking", "frame-system/runtime-benchmarks", "hex-literal", "pallet-asset-manager/runtime-benchmarks", + "pallet-author-inherent/runtime-benchmarks", "pallet-author-mapping/runtime-benchmarks", "pallet-author-slot-filter/runtime-benchmarks", "pallet-balances/runtime-benchmarks", @@ -254,11 +260,11 @@ runtime-benchmarks = [ "pallet-crowdloan-rewards/runtime-benchmarks", "pallet-ethereum/runtime-benchmarks", "pallet-moonbeam-orbiters/runtime-benchmarks", + "pallet-parachain-staking/runtime-benchmarks", "pallet-society/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", + "pallet-xcm-transactor/runtime-benchmarks", "pallet-xcm/runtime-benchmarks", - "parachain-staking/runtime-benchmarks", - "parachain-staking/runtime-benchmarks", "sp-runtime/runtime-benchmarks", "xcm-builder/runtime-benchmarks", ] @@ -267,6 +273,7 @@ try-runtime = [ "frame-executive/try-runtime", "frame-system/try-runtime", "frame-try-runtime", + "moonbeam-runtime-common/try-runtime", "pallet-asset-manager/try-runtime", "pallet-author-mapping/try-runtime", "pallet-author-slot-filter/try-runtime", @@ -275,9 +282,8 @@ try-runtime = [ "pallet-maintenance-mode/try-runtime", #"pallet-crowdloan-rewards/try-runtime", "pallet-migrations/try-runtime", + "pallet-parachain-staking/try-runtime", "pallet-scheduler/try-runtime", "pallet-society/try-runtime", "pallet-timestamp/try-runtime", - "parachain-staking/try-runtime", - "runtime-common/try-runtime", ] diff --git a/runtime/moonbeam/src/asset_config.rs b/runtime/moonbeam/src/asset_config.rs index 002c08a24b..0df1a59a48 100644 --- a/runtime/moonbeam/src/asset_config.rs +++ b/runtime/moonbeam/src/asset_config.rs @@ -23,7 +23,7 @@ use super::{ LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; -use pallet_evm_precompile_assets_erc20::AccountIdAssetIdConversion; +use pallet_evm_precompileset_assets_erc20::AccountIdAssetIdConversion; use sp_runtime::traits::Hash as THash; use frame_support::{ @@ -233,8 +233,8 @@ impl pallet_asset_manager::LocalAssetIdCreator for LocalAssetIdCreator // Our means of converting a local asset counter to an assetId // We basically hash (local asset counter) let mut result: [u8; 16] = [0u8; 16]; - let to_hash = local_asset_counter.encode(); - let hash: H256 = to_hash.using_encoded(::Hashing::hash); + let hash: H256 = + local_asset_counter.using_encoded(::Hashing::hash); result.copy_from_slice(&hash.as_fixed_bytes()[0..16]); u128::from_le_bytes(result) } diff --git a/runtime/moonbeam/src/lib.rs b/runtime/moonbeam/src/lib.rs index aa4c1f07d6..d15411bca8 100644 --- a/runtime/moonbeam/src/lib.rs +++ b/runtime/moonbeam/src/lib.rs @@ -41,13 +41,14 @@ use frame_support::{ pallet_prelude::DispatchResult, parameter_types, traits::{ - ConstBool, ConstU128, ConstU16, ConstU32, ConstU64, ConstU8, Contains, EnsureOneOf, - EqualPrivilegeOnly, Imbalance, InstanceFilter, OffchainWorker, OnFinalize, OnIdle, - OnInitialize, OnRuntimeUpgrade, OnUnbalanced, + ConstBool, ConstU128, ConstU16, ConstU32, ConstU64, ConstU8, Contains, + Currency as CurrencyT, EnsureOneOf, EqualPrivilegeOnly, Imbalance, InstanceFilter, + OffchainWorker, OnFinalize, OnIdle, OnInitialize, OnRuntimeUpgrade, OnUnbalanced, }, weights::{ constants::{RocksDbWeight, WEIGHT_PER_SECOND}, - ConstantMultiplier, DispatchClass, GetDispatchInfo, IdentityFee, Weight, + ConstantMultiplier, DispatchClass, GetDispatchInfo, Weight, WeightToFeeCoefficient, + WeightToFeeCoefficients, WeightToFeePolynomial, }, PalletId, }; @@ -61,18 +62,22 @@ use pallet_balances::NegativeImbalance; use pallet_ethereum::Call::transact; use pallet_ethereum::Transaction as EthereumTransaction; use pallet_evm::{ - Account as EVMAccount, EnsureAddressNever, EnsureAddressRoot, FeeCalculator, GasWeightMapping, - Runner, + Account as EVMAccount, EVMCurrencyAdapter, EnsureAddressNever, EnsureAddressRoot, + FeeCalculator, GasWeightMapping, OnChargeEVMTransaction as OnChargeEVMTransactionT, Runner, }; +pub use pallet_parachain_staking::{InflationInfo, Range}; use pallet_transaction_payment::{CurrencyAdapter, Multiplier, TargetedFeeAdjustment}; -pub use parachain_staking::{InflationInfo, Range}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; +use smallvec::smallvec; use sp_api::impl_runtime_apis; use sp_core::{OpaqueMetadata, H160, H256, U256}; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - traits::{BlakeTwo256, Block as BlockT, Dispatchable, IdentityLookup, PostDispatchInfoOf}, + traits::{ + BlakeTwo256, Block as BlockT, DispatchInfoOf, Dispatchable, IdentityLookup, + PostDispatchInfoOf, UniqueSaturatedInto, + }, transaction_validity::{ InvalidTransaction, TransactionSource, TransactionValidity, TransactionValidityError, }, @@ -119,9 +124,9 @@ pub mod currency { pub const GLMR: Balance = 1_000_000_000_000_000_000; pub const KILOGLMR: Balance = 1_000_000_000_000_000_000_000; - pub const TRANSACTION_BYTE_FEE: Balance = 10 * MICROGLMR * SUPPLY_FACTOR; + pub const TRANSACTION_BYTE_FEE: Balance = 1 * GIGAWEI * SUPPLY_FACTOR; pub const STORAGE_BYTE_FEE: Balance = 100 * MICROGLMR * SUPPLY_FACTOR; - pub const WEIGHT_FEE: Balance = 100 * KILOWEI * SUPPLY_FACTOR; + pub const WEIGHT_FEE: Balance = 50 * KILOWEI * SUPPLY_FACTOR; pub const fn deposit(items: u32, bytes: u32) -> Balance { items as Balance * 100 * MILLIGLMR * SUPPLY_FACTOR + (bytes as Balance) * STORAGE_BYTE_FEE @@ -164,7 +169,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("moonbeam"), impl_name: create_runtime_str!("moonbeam"), authoring_version: 3, - spec_version: 1600, + spec_version: 1700, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 2, @@ -291,15 +296,33 @@ where } } -parameter_types! { - pub const TransactionByteFee: Balance = currency::TRANSACTION_BYTE_FEE; +pub struct LengthToFee; +impl WeightToFeePolynomial for LengthToFee { + type Balance = Balance; + + fn polynomial() -> WeightToFeeCoefficients { + smallvec![ + WeightToFeeCoefficient { + degree: 1, + coeff_frac: Perbill::zero(), + coeff_integer: currency::TRANSACTION_BYTE_FEE, + negative: false, + }, + WeightToFeeCoefficient { + degree: 3, + coeff_frac: Perbill::zero(), + coeff_integer: 1 * currency::SUPPLY_FACTOR, + negative: false, + }, + ] + } } impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter>; type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = IdentityFee; - type LengthToFee = ConstantMultiplier; + type WeightToFee = ConstantMultiplier>; + type LengthToFee = LengthToFee; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; } @@ -348,8 +371,11 @@ parameter_types! { pub struct FixedGasPrice; impl FeeCalculator for FixedGasPrice { - fn min_gas_price() -> U256 { - (1 * currency::GIGAWEI * currency::SUPPLY_FACTOR).into() + fn min_gas_price() -> (U256, Weight) { + ( + (1 * currency::GIGAWEI * currency::SUPPLY_FACTOR).into(), + 0u64, + ) } } @@ -387,23 +413,24 @@ where } } +moonbeam_runtime_common::impl_on_charge_evm_transaction!(); + impl pallet_evm::Config for Runtime { type FeeCalculator = FixedGasPrice; type GasWeightMapping = MoonbeamGasWeightMapping; type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping; type CallOrigin = EnsureAddressRoot; type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = runtime_common::IntoAddressMapping; + type AddressMapping = moonbeam_runtime_common::IntoAddressMapping; type Currency = Balances; type Event = Event; type Runner = pallet_evm::runner::stack::Runner; type PrecompilesType = MoonbeamPrecompiles; type PrecompilesValue = PrecompilesValue; type ChainId = EthereumChainId; - type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter>; + type OnChargeTransaction = OnChargeEVMTransaction>; type BlockGasLimit = BlockGasLimit; type FindAuthor = FindAuthorAdapter; - type WeightInfo = pallet_evm::weights::SubstrateWeight; } parameter_types! { @@ -645,9 +672,9 @@ parameter_types! { } pub struct OnCollatorPayout; -impl parachain_staking::OnCollatorPayout for OnCollatorPayout { +impl pallet_parachain_staking::OnCollatorPayout for OnCollatorPayout { fn on_collator_payout( - for_round: parachain_staking::RoundIndex, + for_round: pallet_parachain_staking::RoundIndex, collator_id: AccountId, amount: Balance, ) -> Weight { @@ -655,13 +682,13 @@ impl parachain_staking::OnCollatorPayout for OnCollatorPayou } } pub struct OnNewRound; -impl parachain_staking::OnNewRound for OnNewRound { - fn on_new_round(round_index: parachain_staking::RoundIndex) -> Weight { +impl pallet_parachain_staking::OnNewRound for OnNewRound { + fn on_new_round(round_index: pallet_parachain_staking::RoundIndex) -> Weight { MoonbeamOrbiters::on_new_round(round_index) } } -impl parachain_staking::Config for Runtime { +impl pallet_parachain_staking::Config for Runtime { type Event = Event; type Currency = Balances; type MonetaryGovernanceOrigin = EnsureRoot; @@ -701,14 +728,15 @@ impl parachain_staking::Config for Runtime { type MinDelegatorStk = ConstU128<{ 500 * currency::MILLIGLMR * currency::SUPPLY_FACTOR }>; type OnCollatorPayout = OnCollatorPayout; type OnNewRound = OnNewRound; - type WeightInfo = parachain_staking::weights::SubstrateWeight; + type WeightInfo = pallet_parachain_staking::weights::SubstrateWeight; } impl pallet_author_inherent::Config for Runtime { type SlotBeacon = RelaychainBlockNumberProvider; - type AccountLookup = AuthorMapping; + type AccountLookup = MoonbeamOrbiters; type EventHandler = ParachainStaking; type CanAuthor = AuthorFilter; + type WeightInfo = pallet_author_inherent::weights::SubstrateWeight; } impl pallet_author_slot_filter::Config for Runtime { @@ -772,6 +800,8 @@ pub enum ProxyType { Balances = 5, /// Allow extrinsic related to AuthorMapping. AuthorMapping = 6, + /// Allow extrinsic related to IdentityJudgement. + IdentityJudgement = 7, } impl Default for ProxyType { @@ -815,6 +845,10 @@ impl InstanceFilter for ProxyType { ), ProxyType::Balances => matches!(c, Call::Balances(..) | Call::Utility(..)), ProxyType::AuthorMapping => matches!(c, Call::AuthorMapping(..)), + ProxyType::IdentityJudgement => matches!( + c, + Call::Identity(pallet_identity::Call::provide_judgement { .. }) | Call::Utility(..) + ), } } @@ -851,7 +885,7 @@ impl pallet_proxy::Config for Runtime { impl pallet_migrations::Config for Runtime { type Event = Event; - type MigrationsList = runtime_common::migrations::CommonMigrations< + type MigrationsList = moonbeam_runtime_common::migrations::CommonMigrations< Runtime, CouncilCollective, TechCommitteeCollective, @@ -914,6 +948,19 @@ impl Contains for NormalFilter { pallet_xcm::Call::force_default_xcm_version { .. } => true, _ => false, }, + // We filter anonymous proxy as they make "reserve" inconsistent + // See: https://github.com/paritytech/substrate/blob/37cca710eed3dadd4ed5364c7686608f5175cce1/frame/proxy/src/lib.rs#L270 // editorconfig-checker-disable-line + Call::Proxy(method) => match method { + pallet_proxy::Call::anonymous { .. } => false, + pallet_proxy::Call::kill_anonymous { .. } => false, + _ => true, + }, + // We filter for now transact through signed + Call::XcmTransactor(method) => match method { + pallet_xcm_transactor::Call::transact_through_signed_multilocation { .. } => false, + pallet_xcm_transactor::Call::transact_through_signed { .. } => false, + _ => true, + }, _ => true, } } @@ -1025,7 +1072,7 @@ impl pallet_moonbeam_orbiters::Config for Runtime { type OrbiterReserveIdentifier = OrbiterReserveIdentifier; type RotatePeriod = ConstU32<1>; /// Round index type. - type RoundIndex = parachain_staking::RoundIndex; + type RoundIndex = pallet_parachain_staking::RoundIndex; type WeightInfo = pallet_moonbeam_orbiters::weights::SubstrateWeight; } @@ -1047,7 +1094,7 @@ construct_runtime! { TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 11, // Consensus support. - ParachainStaking: parachain_staking::{Pallet, Call, Storage, Event, Config} = 20, + ParachainStaking: pallet_parachain_staking::{Pallet, Call, Storage, Event, Config} = 20, AuthorInherent: pallet_author_inherent::{Pallet, Call, Storage, Inherent} = 21, AuthorFilter: pallet_author_slot_filter::{Pallet, Call, Storage, Event, Config} = 22, AuthorMapping: pallet_author_mapping::{Pallet, Call, Config, Storage, Event} = 23, @@ -1094,7 +1141,7 @@ construct_runtime! { Assets: pallet_assets::{Pallet, Call, Storage, Event} = 104, AssetManager: pallet_asset_manager::{Pallet, Call, Storage, Event} = 105, XTokens: orml_xtokens::{Pallet, Call, Storage, Event} = 106, - XcmTransactor: xcm_transactor::{Pallet, Call, Storage, Event} = 107, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Storage, Event} = 107, LocalAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 108, } } @@ -1140,7 +1187,19 @@ pub type Executive = frame_executive::Executive< // // Specific impls provided to the `impl_runtime_apis_plus_common!` macro. // } // ``` -runtime_common::impl_runtime_apis_plus_common! { +moonbeam_runtime_common::impl_runtime_apis_plus_common! { + impl session_keys_primitives::VrfApi for Runtime { + fn get_last_vrf_output() -> Option<::Hash> { + None + } + fn vrf_key_lookup( + nimbus_id: nimbus_primitives::NimbusId + ) -> Option { + use session_keys_primitives::KeysLookup; + AuthorMapping::lookup_keys(&nimbus_id) + } + } + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { fn validate_transaction( source: TransactionSource, @@ -1250,7 +1309,7 @@ cumulus_pallet_parachain_system::register_validate_block!( CheckInherents = CheckInherents, ); -runtime_common::impl_self_contained_call!(); +moonbeam_runtime_common::impl_self_contained_call!(); // Shorthand for a Get field of a pallet Config. #[macro_export] @@ -1275,7 +1334,9 @@ mod tests { ); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); - assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); + assert!( + std::mem::size_of::>() <= CALL_ALIGN as usize + ); assert!( std::mem::size_of::>() <= CALL_ALIGN as usize ); @@ -1301,13 +1362,13 @@ mod tests { assert_eq!(SUPPLY_FACTOR, 100); // txn fees - assert_eq!(TRANSACTION_BYTE_FEE, Balance::from(1 * MILLIGLMR)); + assert_eq!(TRANSACTION_BYTE_FEE, Balance::from(100 * GIGAWEI)); assert_eq!( get!(pallet_transaction_payment, OperationalFeeMultiplier, u8), 5_u8 ); assert_eq!(STORAGE_BYTE_FEE, Balance::from(10 * MILLIGLMR)); - assert_eq!(FixedGasPrice::min_gas_price(), (100 * GIGAWEI).into()); + assert_eq!(FixedGasPrice::min_gas_price().0, (100 * GIGAWEI).into()); // democracy minimums assert_eq!( @@ -1339,19 +1400,19 @@ mod tests { // staking minimums assert_eq!( - get!(parachain_staking, MinCollatorStk, u128), + get!(pallet_parachain_staking, MinCollatorStk, u128), Balance::from(100 * KILOGLMR) ); assert_eq!( - get!(parachain_staking, MinCandidateStk, u128), + get!(pallet_parachain_staking, MinCandidateStk, u128), Balance::from(100 * KILOGLMR) ); assert_eq!( - get!(parachain_staking, MinDelegation, u128), + get!(pallet_parachain_staking, MinDelegation, u128), Balance::from(50 * GLMR) ); assert_eq!( - get!(parachain_staking, MinDelegatorStk, u128), + get!(pallet_parachain_staking, MinDelegatorStk, u128), Balance::from(50 * GLMR) ); @@ -1387,15 +1448,20 @@ mod tests { } #[test] - // Required migration is parachain_staking::migrations::IncreaseMaxTopDelegationsPerCandidate + // Required migration is + // pallet_parachain_staking::migrations::IncreaseMaxTopDelegationsPerCandidate // Purpose of this test is to remind of required migration if constant is ever changed fn updating_maximum_delegators_per_candidate_requires_configuring_required_migration() { assert_eq!( - get!(parachain_staking, MaxTopDelegationsPerCandidate, u32), + get!(pallet_parachain_staking, MaxTopDelegationsPerCandidate, u32), 300 ); assert_eq!( - get!(parachain_staking, MaxBottomDelegationsPerCandidate, u32), + get!( + pallet_parachain_staking, + MaxBottomDelegationsPerCandidate, + u32 + ), 50 ); } diff --git a/runtime/moonbeam/src/precompiles.rs b/runtime/moonbeam/src/precompiles.rs index 47c6e4ff56..74f7bd0506 100644 --- a/runtime/moonbeam/src/precompiles.rs +++ b/runtime/moonbeam/src/precompiles.rs @@ -15,27 +15,25 @@ // along with Moonbeam. If not, see . use crate::asset_config::{ForeignAssetInstance, LocalAssetInstance}; -use crowdloan_rewards_precompiles::CrowdloanRewardsWrapper; -use fp_evm::Context; +use frame_support::parameter_types; use moonbeam_relay_encoder::polkadot::PolkadotEncoder; -use pallet_author_mapping_precompiles::AuthorMappingWrapper; -use pallet_democracy_precompiles::DemocracyWrapper; -use pallet_evm::{AddressMapping, Precompile, PrecompileResult, PrecompileSet}; -use pallet_evm_precompile_assets_erc20::{Erc20AssetsPrecompileSet, IsForeign, IsLocal}; +use pallet_evm_precompile_author_mapping::AuthorMappingWrapper; use pallet_evm_precompile_balances_erc20::{Erc20BalancesPrecompile, Erc20Metadata}; +use pallet_evm_precompile_batch::BatchPrecompile; use pallet_evm_precompile_blake2::Blake2F; use pallet_evm_precompile_bn128::{Bn128Add, Bn128Mul, Bn128Pairing}; +use pallet_evm_precompile_crowdloan_rewards::CrowdloanRewardsWrapper; +use pallet_evm_precompile_democracy::DemocracyWrapper; use pallet_evm_precompile_dispatch::Dispatch; use pallet_evm_precompile_modexp::Modexp; +use pallet_evm_precompile_parachain_staking::ParachainStakingWrapper; +use pallet_evm_precompile_relay_encoder::RelayEncoderWrapper; use pallet_evm_precompile_sha3fips::Sha3FIPS256; use pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256}; -use parachain_staking_precompiles::ParachainStakingWrapper; -use relay_encoder_precompiles::RelayEncoderWrapper; -use sp_core::H160; -use sp_std::fmt::Debug; -use sp_std::marker::PhantomData; -use xcm_transactor_precompiles::XcmTransactorWrapper; -use xtokens_precompiles::XtokensWrapper; +use pallet_evm_precompile_xcm_transactor::XcmTransactorWrapper; +use pallet_evm_precompile_xtokens::XtokensWrapper; +use pallet_evm_precompileset_assets_erc20::{Erc20AssetsPrecompileSet, IsForeign, IsLocal}; +use precompile_utils::precompile_set::*; pub struct NativeErc20Metadata; @@ -63,134 +61,68 @@ impl Erc20Metadata for NativeErc20Metadata { } } -/// The PrecompileSet installed in the Moonbeam runtime. -/// We include the nine Istanbul precompiles -/// (https://github.com/ethereum/go-ethereum/blob/3c46f557/core/vm/contracts.go#L69) -/// as well as a special precompile for dispatching Substrate extrinsics -#[derive(Debug, Clone, Copy)] -pub struct MoonbeamPrecompiles(PhantomData); - -impl MoonbeamPrecompiles -where - R: pallet_evm::Config, -{ - pub fn new() -> Self { - Self(Default::default()) - } - /// Return all addresses that contain precompiles. This can be used to populate dummy code - /// under the precompile. - pub fn used_addresses() -> impl Iterator { - sp_std::vec![ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 1024, 1025, 1026, 2048, 2049, 2050, 2051, 2052, 2053, 2054, - 2055 - ] - .into_iter() - .map(|x| R::AddressMapping::into_account_id(hash(x))) - } -} - /// The asset precompile address prefix. Addresses that match against this prefix will be routed -/// to Erc20AssetsPrecompileSet +/// to Erc20AssetsPrecompileSet being marked as foreign pub const FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8; 4]; +/// The asset precompile address prefix. Addresses that match against this prefix will be routed +/// to Erc20AssetsPrecompileSet being marked as local pub const LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8, 255u8, 255u8, 254u8]; +parameter_types! { + pub ForeignAssetPrefix: &'static [u8] = FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX; + pub LocalAssetPrefix: &'static [u8] = LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX; +} + +/// The PrecompileSet installed in the Moonbeam runtime. +/// We include the nine Istanbul precompiles +/// (https://github.com/ethereum/go-ethereum/blob/3c46f557/core/vm/contracts.go#L69) +/// as well as a special precompile for dispatching Substrate extrinsics /// The following distribution has been decided for the precompiles /// 0-1023: Ethereum Mainnet Precompiles /// 1024-2047 Precompiles that are not in Ethereum Mainnet but are neither Moonbeam specific /// 2048-4095 Moonbeam specific precompiles -impl PrecompileSet for MoonbeamPrecompiles -where - Dispatch: Precompile, - ParachainStakingWrapper: Precompile, - CrowdloanRewardsWrapper: Precompile, - Erc20BalancesPrecompile: Precompile, - Erc20AssetsPrecompileSet: PrecompileSet, - Erc20AssetsPrecompileSet: PrecompileSet, - XtokensWrapper: Precompile, - RelayEncoderWrapper: Precompile, - XcmTransactorWrapper: Precompile, - DemocracyWrapper: Precompile, - AuthorMappingWrapper: Precompile, - R: pallet_evm::Config, -{ - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option { - match address { - // Ethereum precompiles : - a if a == hash(1) => Some(ECRecover::execute(input, target_gas, context, is_static)), - a if a == hash(2) => Some(Sha256::execute(input, target_gas, context, is_static)), - a if a == hash(3) => Some(Ripemd160::execute(input, target_gas, context, is_static)), - a if a == hash(4) => Some(Identity::execute(input, target_gas, context, is_static)), - a if a == hash(5) => Some(Modexp::execute(input, target_gas, context, is_static)), - a if a == hash(6) => Some(Bn128Add::execute(input, target_gas, context, is_static)), - a if a == hash(7) => Some(Bn128Mul::execute(input, target_gas, context, is_static)), - a if a == hash(8) => Some(Bn128Pairing::execute(input, target_gas, context, is_static)), - a if a == hash(9) => Some(Blake2F::execute(input, target_gas, context, is_static)), - // Non-Moonbeam specific nor Ethereum precompiles : - a if a == hash(1024) => { - Some(Sha3FIPS256::execute(input, target_gas, context, is_static)) - } - a if a == hash(1025) => Some(Dispatch::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(1026) => Some(ECRecoverPublicKey::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2048) => Some(ParachainStakingWrapper::::execute( - // Moonbeam specific precompiles : - input, target_gas, context, is_static, - )), - a if a == hash(2049) => Some(CrowdloanRewardsWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2050) => { - Some(Erc20BalancesPrecompile::::execute( - input, target_gas, context, is_static, - )) - } - a if a == hash(2051) => Some(DemocracyWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2052) => Some(XtokensWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2053) => Some(RelayEncoderWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2054) => Some(XcmTransactorWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2055) => Some(AuthorMappingWrapper::::execute( - input, target_gas, context, is_static, - )), - // If the address matches asset prefix, the we route through the asset precompile set - a if &a.to_fixed_bytes()[0..4] == FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX => { - Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) - } - // If the address matches asset prefix, the we route through the asset precompile set - a if &a.to_fixed_bytes()[0..4] == LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX => { - Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) - } - _ => None, - } - } - fn is_precompile(&self, address: H160) -> bool { - Self::used_addresses().any(|x| x == R::AddressMapping::into_account_id(address)) - || Erc20AssetsPrecompileSet::::new() - .is_precompile(address) - || Erc20AssetsPrecompileSet::::new() - .is_precompile(address) - } -} - -fn hash(a: u64) -> H160 { - H160::from_low_u64_be(a) -} +pub type MoonbeamPrecompiles = PrecompileSetBuilder< + R, + ( + // Skip precompiles if out of range. + PrecompilesInRangeInclusive< + (AddressU64<1>, AddressU64<4095>), + ( + // Ethereum precompiles: + // We allow DELEGATECALL to stay compliant with Ethereum behavior. + PrecompileAt, ECRecover, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Sha256, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Ripemd160, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Identity, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Modexp, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Add, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Mul, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Pairing, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Blake2F, ForbidRecursion, AllowDelegateCall>, + // Non-Moonbeam specific nor Ethereum precompiles : + PrecompileAt, Sha3FIPS256>, + PrecompileAt, Dispatch>, + PrecompileAt, ECRecoverPublicKey>, + // Moonbeam specific precompiles: + PrecompileAt, ParachainStakingWrapper>, + PrecompileAt, CrowdloanRewardsWrapper>, + PrecompileAt, Erc20BalancesPrecompile>, + PrecompileAt, DemocracyWrapper>, + PrecompileAt, XtokensWrapper>, + PrecompileAt, RelayEncoderWrapper>, + PrecompileAt, XcmTransactorWrapper>, + PrecompileAt, AuthorMappingWrapper>, + PrecompileAt, BatchPrecompile, LimitRecursionTo<2>>, + ), + >, + // Prefixed precompile sets (XC20) + PrecompileSetStartingWith< + ForeignAssetPrefix, + Erc20AssetsPrecompileSet, + >, + PrecompileSetStartingWith< + LocalAssetPrefix, + Erc20AssetsPrecompileSet, + >, + ), +>; diff --git a/runtime/moonbeam/src/xcm_config.rs b/runtime/moonbeam/src/xcm_config.rs index 09323559d1..5104e42426 100644 --- a/runtime/moonbeam/src/xcm_config.rs +++ b/runtime/moonbeam/src/xcm_config.rs @@ -23,13 +23,13 @@ use super::{ FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; -use pallet_evm_precompile_assets_erc20::AccountIdAssetIdConversion; +use pallet_evm_precompileset_assets_erc20::AccountIdAssetIdConversion; use sp_runtime::traits::Hash as THash; use frame_support::{ parameter_types, traits::{Everything, Nothing, PalletInfoAccess}, - weights::{IdentityFee, Weight}, + weights::Weight, }; use frame_system::EnsureRoot; @@ -261,7 +261,7 @@ impl xcm_executor::Config for XcmExecutorConfig { // units per second we should charge type Trader = ( UsingComponents< - IdentityFee, + ::WeightToFee, SelfReserve, AccountId, Balances, @@ -273,6 +273,7 @@ impl xcm_executor::Config for XcmExecutorConfig { type SubscriptionService = PolkadotXcm; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; + type CallDispatcher = Call; } type XcmExecutor = xcm_executor::XcmExecutor; @@ -435,8 +436,8 @@ parameter_types! { } parameter_type_with_key! { - pub ParachainMinFee: |_location: MultiLocation| -> u128 { - u128::MAX + pub ParachainMinFee: |_location: MultiLocation| -> Option { + Some(u128::MAX) }; } @@ -495,7 +496,7 @@ impl XcmTransact for Transactors { } } -impl xcm_transactor::Config for Runtime { +impl pallet_xcm_transactor::Config for Runtime { type Event = Event; type Balance = Balance; type Transactor = Transactors; @@ -512,5 +513,5 @@ impl xcm_transactor::Config for Runtime { type BaseXcmWeight = BaseXcmWeight; type AssetTransactor = AssetTransactors; type ReserveProvider = AbsoluteAndRelativeReserve; - type WeightInfo = xcm_transactor::weights::SubstrateWeight; + type WeightInfo = pallet_xcm_transactor::weights::SubstrateWeight; } diff --git a/runtime/moonbeam/tests/common/mod.rs b/runtime/moonbeam/tests/common/mod.rs index 969957ec74..166983e517 100644 --- a/runtime/moonbeam/tests/common/mod.rs +++ b/runtime/moonbeam/tests/common/mod.rs @@ -234,7 +234,7 @@ impl ExtBuilder { .assimilate_storage(&mut t) .unwrap(); - parachain_staking::GenesisConfig:: { + pallet_parachain_staking::GenesisConfig:: { candidates: self.collators, delegations: self.delegations, inflation_config: self.inflation, diff --git a/runtime/moonbeam/tests/integration_test.rs b/runtime/moonbeam/tests/integration_test.rs index 2dd64a2a95..487e88eff3 100644 --- a/runtime/moonbeam/tests/integration_test.rs +++ b/runtime/moonbeam/tests/integration_test.rs @@ -21,13 +21,13 @@ mod common; use common::*; -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::Context; use frame_support::{ assert_noop, assert_ok, dispatch::Dispatchable, traits::{ - fungible::Inspect, fungibles::Inspect as FungiblesInspect, EnsureOrigin, PalletInfo, - StorageInfo, StorageInfoTrait, + fungible::Inspect, fungibles::Inspect as FungiblesInspect, Currency as CurrencyT, + EnsureOrigin, PalletInfo, StorageInfo, StorageInfoTrait, }, weights::{DispatchClass, Weight}, StorageHasher, Twox128, @@ -40,12 +40,15 @@ use moonbeam_runtime::{ }; use nimbus_primitives::NimbusId; use pallet_evm::PrecompileSet; -use pallet_evm_precompile_assets_erc20::{ +use pallet_evm_precompile_batch::Action as BatchAction; +use pallet_evm_precompile_crowdloan_rewards::Action as CrowdloanAction; +use pallet_evm_precompile_xtokens::Action as XtokensAction; +use pallet_evm_precompileset_assets_erc20::{ AccountIdAssetIdConversion, Action as AssetAction, SELECTOR_LOG_APPROVAL, SELECTOR_LOG_TRANSFER, }; use pallet_transaction_payment::Multiplier; use parity_scale_codec::Encode; -use precompile_utils::{Address as EvmAddress, EvmDataWriter, LogsBuilder}; +use precompile_utils::{prelude::*, testing::*}; use sha3::{Digest, Keccak256}; use sp_core::{ByteArray, Pair, H160, U256}; use sp_runtime::{ @@ -54,7 +57,6 @@ use sp_runtime::{ }; use xcm::latest::prelude::*; use xcm::{VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation}; -use xtokens_precompiles::Action as XtokensAction; #[test] fn xcmp_queue_controller_origin_is_root() { @@ -273,6 +275,7 @@ fn verify_proxy_type_indices() { assert_eq!(moonbeam_runtime::ProxyType::CancelProxy as u8, 4); assert_eq!(moonbeam_runtime::ProxyType::Balances as u8, 5); assert_eq!(moonbeam_runtime::ProxyType::AuthorMapping as u8, 6); + assert_eq!(moonbeam_runtime::ProxyType::IdentityJudgement as u8, 7); } #[test] @@ -304,7 +307,7 @@ fn join_collator_candidates() { 100_000 * GLMR, 2u32 ), - parachain_staking::Error::::CandidateExists + pallet_parachain_staking::Error::::CandidateExists ); assert_noop!( ParachainStaking::join_candidates( @@ -312,7 +315,7 @@ fn join_collator_candidates() { 100_000 * GLMR, 2u32 ), - parachain_staking::Error::::DelegatorExists + pallet_parachain_staking::Error::::DelegatorExists ); assert!(System::events().is_empty()); assert_ok!(ParachainStaking::join_candidates( @@ -322,11 +325,13 @@ fn join_collator_candidates() { )); assert_eq!( last_event(), - Event::ParachainStaking(parachain_staking::Event::JoinedCollatorCandidates { - account: AccountId::from(DAVE), - amount_locked: 100_000 * GLMR, - new_total_amt_locked: 310_000 * GLMR - }) + Event::ParachainStaking( + pallet_parachain_staking::Event::JoinedCollatorCandidates { + account: AccountId::from(DAVE), + amount_locked: 100_000 * GLMR, + new_total_amt_locked: 310_000 * GLMR + } + ) ); let candidates = ParachainStaking::candidate_pool(); assert_eq!(candidates.0[0].owner, AccountId::from(ALICE)); @@ -352,8 +357,8 @@ fn transfer_through_evm_to_stake() { 2u32 ), DispatchError::Module(ModuleError { - index: 10, - error: [2, 0, 0, 0], + index: 20, + error: [8, 0, 0, 0], message: Some("InsufficientBalance") }) ); @@ -423,18 +428,21 @@ fn reward_block_authors() { } // no rewards doled out yet assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 100_000 * GLMR, ); - assert_eq!(Balances::free_balance(AccountId::from(BOB)), 50_000 * GLMR,); + assert_eq!( + Balances::usable_balance(AccountId::from(BOB)), + 50_000 * GLMR, + ); run_to_block(3600, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); // rewards minted and distributed assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 111366666658400000000000, ); assert_eq!( - Balances::free_balance(AccountId::from(BOB)), + Balances::usable_balance(AccountId::from(BOB)), 54133333329200000000000, ); }); @@ -471,24 +479,30 @@ fn reward_block_authors_with_parachain_bond_reserved() { } // no rewards doled out yet assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 100_000 * GLMR, ); - assert_eq!(Balances::free_balance(AccountId::from(BOB)), 50_000 * GLMR,); - assert_eq!(Balances::free_balance(AccountId::from(CHARLIE)), 100 * GLMR,); + assert_eq!( + Balances::usable_balance(AccountId::from(BOB)), + 50_000 * GLMR, + ); + assert_eq!( + Balances::usable_balance(AccountId::from(CHARLIE)), + 100 * GLMR, + ); run_to_block(3600, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); // rewards minted and distributed assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 108269333328165000000000, ); assert_eq!( - Balances::free_balance(AccountId::from(BOB)), + Balances::usable_balance(AccountId::from(BOB)), 52584166664082500000000, ); // 30% reserved for parachain bond assert_eq!( - Balances::free_balance(AccountId::from(CHARLIE)), + Balances::usable_balance(AccountId::from(CHARLIE)), 4751500000000000000000, ); }); @@ -852,71 +866,31 @@ fn is_contributor_via_precompile() { let crowdloan_precompile_address = H160::from_low_u64_be(2049); - // Construct the input data to check if Bob is a contributor - let mut bob_input_data = Vec::::from([0u8; 36]); - bob_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"is_contributor(address)")[0..4]); - bob_input_data[16..36].copy_from_slice(&BOB); - - // Expected result is an EVM boolean false which is 256 bits long. - let mut expected_bytes = Vec::from([0u8; 32]); - expected_bytes[31] = 0; - let expected_false_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - // Assert precompile reports Bob is not a contributor - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &bob_input_data, - None, // target_gas is not necessary right now because consumed none now - &Context { - // This context copied from Sacrifice tests, it's not great. - address: Default::default(), - caller: Default::default(), - apparent_value: U256::zero(), - }, - false, - ), - expected_false_result - ); - - // Construct the input data to check if Charlie is a contributor - let mut charlie_input_data = Vec::::from([0u8; 36]); - charlie_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"is_contributor(address)")[0..4]); - charlie_input_data[16..36].copy_from_slice(&CHARLIE); - - // Expected result is an EVM boolean true which is 256 bits long. - let mut expected_bytes = Vec::from([0u8; 32]); - expected_bytes[31] = 1; - let expected_true_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - - // Assert precompile reports Bob is a nominator - assert_eq!( - Precompiles::new().execute( + EvmDataWriter::new_with_selector(CrowdloanAction::IsContributor) + .write(Address(AccountId::from(BOB).into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); + + // Assert precompile reports Charlie is a nominator + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &charlie_input_data, - None, // target_gas is not necessary right now because consumed none now - &Context { - // This context copied from Sacrifice tests, it's not great. - address: Default::default(), - caller: Default::default(), - apparent_value: U256::zero(), - }, - false, - ), - expected_true_result - ); + EvmDataWriter::new_with_selector(CrowdloanAction::IsContributor) + .write(Address(AccountId::from(CHARLIE).into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }) } @@ -972,42 +946,26 @@ fn reward_info_via_precompile() { let crowdloan_precompile_address = H160::from_low_u64_be(2049); - // Construct the input data to check if Bob is a contributor - let mut charlie_input_data = Vec::::from([0u8; 36]); - charlie_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"reward_info(address)")[0..4]); - charlie_input_data[16..36].copy_from_slice(&CHARLIE); - let expected_total: U256 = (1_500_000 * GLMR).into(); let expected_claimed: U256 = (450_000 * GLMR).into(); - // Expected result is two EVM u256 false which are 256 bits long. - let mut expected_bytes = Vec::from([0u8; 64]); - expected_total.to_big_endian(&mut expected_bytes[0..32]); - expected_claimed.to_big_endian(&mut expected_bytes[32..64]); - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - - // Assert precompile reports Bob is not a contributor - assert_eq!( - Precompiles::new().execute( + // Assert precompile reports correct Charlie reward info. + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &charlie_input_data, - None, // target_gas is not necessary right now because consumed none now - &Context { - // This context copied from Sacrifice tests, it's not great. - address: Default::default(), - caller: Default::default(), - apparent_value: U256::zero(), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(CrowdloanAction::RewardInfo) + .write(Address(AccountId::from(CHARLIE).into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(expected_total) + .write(expected_claimed) + .build(), + ); }) } @@ -1110,6 +1068,41 @@ where }); } +#[test] +#[rustfmt::skip] +fn length_fee_is_sensible() { + use sp_runtime::testing::TestXt; + + // tests that length fee is sensible for a few hypothetical transactions + ExtBuilder::default().build().execute_with(|| { + let call = frame_system::Call::remark:: { remark: vec![] }; + let uxt: TestXt<_, ()> = TestXt::new(call, Some((1u64, ()))); + + let calc_fee = |len: u32| -> Balance { + moonbeam_runtime::TransactionPayment::query_fee_details(uxt.clone(), len) + .inclusion_fee + .expect("fee should be calculated") + .len_fee + }; + + // editorconfig-checker-disable + // left: cost of length fee, right: size in bytes + // /------------- proportional component: O(N * 1B) + // | /- exponential component: O(N ** 3) + // | | + assert_eq!( 100_000_000_100, calc_fee(1)); + assert_eq!( 1_000_000_100_000, calc_fee(10)); + assert_eq!( 10_000_100_000_000, calc_fee(100)); + assert_eq!( 100_100_000_000_000, calc_fee(1_000)); + assert_eq!( 1_100_000_000_000_000, calc_fee(10_000)); // inflection point + assert_eq!( 110_000_000_000_000_000, calc_fee(100_000)); + assert_eq!( 100_100_000_000_000_000_000, calc_fee(1_000_000)); // 100 GLMR, ~ 1MB + assert_eq!( 100_001_000_000_000_000_000_000, calc_fee(10_000_000)); + assert_eq!(100_000_010_000_000_000_000_000_000, calc_fee(100_000_000)); + // editorconfig-checker-enable + }); +} + #[test] fn multiplier_can_grow_from_zero() { let minimum_multiplier = moonbeam_runtime::MinimumMultiplier::get(); @@ -1255,6 +1248,112 @@ fn refund_ed_0_evm() { }); } +#[test] +fn author_does_not_receive_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * GLMR) + (21_000 * (500 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + // Some block author as seen by pallet-evm. + let author = AccountId::from(>::find_author()); + // Currently the default impl of the evm uses `deposit_into_existing`. + // If we were to use this implementation, and for an author to receive eventual tips, + // the account needs to be somehow initialized, otherwise the deposit would fail. + Balances::make_free_balance_be(&author, 100 * GLMR); + + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * GLMR).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(300 * GIGAWEI), + max_priority_fee_per_gas: Some(U256::from(200 * GIGAWEI)), + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + // Author free balance didn't change. + assert_eq!(Balances::free_balance(author), 100 * GLMR,); + }); +} + +#[test] +fn total_issuance_after_evm_transaction_with_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * GLMR) + (21_000 * (200 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + let issuance_before = ::Currency::total_issuance(); + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * GLMR).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(200 * GIGAWEI), + max_priority_fee_per_gas: Some(U256::from(100 * GIGAWEI)), + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let issuance_after = ::Currency::total_issuance(); + // Fee is 100 GWEI base fee + 100 GWEI tip. + let fee = ((200 * GIGAWEI) * 21_000) as f64; + // 80% was burned. + let expected_burn = (fee * 0.8) as u128; + assert_eq!(issuance_after, issuance_before - expected_burn,); + // 20% was sent to treasury. + let expected_treasury = (fee * 0.2) as u128; + assert_eq!(moonbeam_runtime::Treasury::pot(), expected_treasury); + }); +} + +#[test] +fn total_issuance_after_evm_transaction_without_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * GLMR) + (21_000 * (200 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + let issuance_before = ::Currency::total_issuance(); + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * GLMR).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(100 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let issuance_after = ::Currency::total_issuance(); + // Fee is 100 GWEI base fee. + let fee = ((100 * GIGAWEI) * 21_000) as f64; + // 80% was burned. + let expected_burn = (fee * 0.8) as u128; + assert_eq!(issuance_after, issuance_before - expected_burn,); + // 20% was sent to treasury. + let expected_treasury = (fee * 0.2) as u128; + assert_eq!(moonbeam_runtime::Treasury::pot(), expected_treasury); + }); +} + #[test] fn root_can_change_default_xcm_vers() { ExtBuilder::default() @@ -1374,50 +1473,31 @@ fn asset_erc20_precompiles_supply_and_balance() { // Convert the assetId to its corresponding precompile address let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); - // The expected result for both total supply and balance of is the same, as only Alice - // holds balance - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000 * GLMR)).build(), - cost: 1000, - logs: Default::default(), - })); - - // Access totalSupply through precompile. Important that the context is correct - assert_eq!( - Precompiles::new().execute( + // Access totalSupply through precompile. + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * GLMR)).build()); // Access balanceOf through precompile - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * GLMR)).build()); }); } @@ -1436,67 +1516,40 @@ fn asset_erc20_precompiles_transfer() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for a transfer - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 23516u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Transfer tokens from Aice to Bob, 400 GLMR. - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Transfer) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Transfer) + .write(Address(BOB.into())) .write(U256::from(400 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balanceOf BOB - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(23518u64) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure BOB has 400 GLMR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * GLMR)).build()); }); } @@ -1515,102 +1568,61 @@ fn asset_erc20_precompiles_approve() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 13989u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_APPROVAL, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Aprove Bob for spending 400 GLMR from Alice - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Approve) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Approve) + .write(Address(BOB.into())) .write(U256::from(400 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for transfer_from - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 29006u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(CHARLIE), - EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - ) - .build(), - })); + ) + .expect_cost(14006) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_APPROVAL, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferFrom) - .write(EvmAddress(ALICE.into())) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferFrom) + .write(Address(ALICE.into())) + .write(Address(CHARLIE.into())) .write(U256::from(400 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balance of CHARLIE - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(28967) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(CHARLIE), + EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure CHARLIE has 400 GLMR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + CHARLIE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(CHARLIE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: CHARLIE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * GLMR)).build()); }); } @@ -1629,41 +1641,27 @@ fn asset_erc20_precompiles_mint_burn() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 12821u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::default(), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(1000 * GLMR)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); - // Mint 1000 GLMRS to BOB - assert_eq!( - Precompiles::new().execute( + // Mint 1000 MOVRS to BOB + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Mint) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Mint) + .write(Address(BOB.into())) .write(U256::from(1000 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(12795) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::default(), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(1000 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert the asset has been minted assert_eq!(LocalAssets::total_supply(0u128), 2_000 * GLMR); @@ -1672,39 +1670,25 @@ fn asset_erc20_precompiles_mint_burn() { 1_000 * GLMR ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 12957u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(BOB), - H160::default(), - EvmDataWriter::new().write(U256::from(500 * GLMR)).build(), - ) - .build(), - })); - - // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + // Burn tokens + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Burn) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Burn) + .write(Address(BOB.into())) .write(U256::from(500 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(12987) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(BOB), + H160::default(), + EvmDataWriter::new().write(U256::from(500 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert the asset has been burnt assert_eq!(LocalAssets::total_supply(0u128), 1_500 * GLMR); @@ -1730,33 +1714,20 @@ fn asset_erc20_precompiles_freeze_thaw_account() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6732u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); - // Freeze Account - assert_eq!( - Precompiles::new().execute( + // Freeze account + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Freeze) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::Freeze) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6735) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is frozen assert_eq!( @@ -1764,31 +1735,18 @@ fn asset_erc20_precompiles_freeze_thaw_account() { Err(TokenError::Frozen.into()) ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6731u64, - logs: Default::default(), - })); - // Thaw Account - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Thaw) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::Thaw) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6728) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is not frozen assert!(LocalAssets::can_withdraw(0u128, &AccountId::from(ALICE), 1) @@ -1812,31 +1770,18 @@ fn asset_erc20_precompiles_freeze_thaw_asset() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5589u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Freeze Asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::FreezeAsset).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::FreezeAsset).build(), + ) + .expect_cost(5595) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is frozen assert_eq!( @@ -1844,29 +1789,16 @@ fn asset_erc20_precompiles_freeze_thaw_asset() { Err(TokenError::Frozen.into()) ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5593u64, - logs: Default::default(), - })); - // Thaw Asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::ThawAsset).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::ThawAsset).build(), + ) + .expect_cost(5593) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is not frozen assert!(LocalAssets::can_withdraw(0u128, &AccountId::from(ALICE), 1) @@ -1890,33 +1822,20 @@ fn asset_erc20_precompiles_freeze_transfer_ownership() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6666u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Transfer ownerhsip of an asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferOwnership) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferOwnership) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6641) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // No clear way of testing BOB is new owner, other than doing a priviledged function // e.g., transfer_ownership again @@ -1943,35 +1862,22 @@ fn asset_erc20_precompiles_freeze_set_team() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5614u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Set Bob as issuer, admin and freezer - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::SetTeam) - .write(EvmAddress(BOB.into())) - .write(EvmAddress(BOB.into())) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::SetTeam) + .write(Address(BOB.into())) + .write(Address(BOB.into())) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(5573) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Bob should be able to mint, freeze, and thaw assert_ok!(LocalAssets::mint( @@ -2021,54 +1927,34 @@ fn xcm_asset_erc20_precompiles_supply_and_balance() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); + ); // Assert the asset has been created with the correct supply assert_eq!(Assets::total_supply(relay_asset_id), 1_000 * GLMR); - // The expected result for both total supply and balance of is the same, as only Alice - // holds balance - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000 * GLMR)).build(), - cost: 1000, - logs: Default::default(), - })); - // Access totalSupply through precompile. Important that the context is correct - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * GLMR)).build()); // Access balanceOf through precompile - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * GLMR)).build()); }); } @@ -2100,68 +1986,40 @@ fn xcm_asset_erc20_precompiles_transfer() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); - - // Expected result for a transfer - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 23516u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - ) - .build(), - })); + ); // Transfer tokens from Aice to Bob, 400 GLMR. - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Transfer) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Transfer) + .write(Address(BOB.into())) .write(U256::from(400 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balanceOf BOB - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(23518) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure BOB has 400 GLMR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * GLMR)).build()); }); } @@ -2193,103 +2051,61 @@ fn xcm_asset_erc20_precompiles_approve() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 13989u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_APPROVAL, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - ) - .build(), - })); + ); // Aprove Bob for spending 400 GLMR from Alice - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Approve) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Approve) + .write(Address(BOB.into())) .write(U256::from(400 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for transfer_from - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 29006u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(CHARLIE), - EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - ) - .build(), - })); + ) + .expect_cost(14006) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_APPROVAL, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferFrom) - .write(EvmAddress(ALICE.into())) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferFrom) + .write(Address(ALICE.into())) + .write(Address(CHARLIE.into())) .write(U256::from(400 * GLMR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balance of CHARLIE - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(28967) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(CHARLIE), + EvmDataWriter::new().write(U256::from(400 * GLMR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure CHARLIE has 400 GLMR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + CHARLIE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(CHARLIE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: CHARLIE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * GLMR)).build()); }); } @@ -2324,8 +2140,7 @@ fn xtokens_precompiles_transfer() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); + ); // Alice has 1000 tokens. She should be able to send through precompile let destination = MultiLocation::new( @@ -2336,31 +2151,21 @@ fn xtokens_precompiles_transfer() { }), ); - // We use the address of the asset as an identifier of the asset we want to transferS - assert_eq!( - Precompiles::new().execute( + // We use the address of the asset as an identifier of the asset we want to transfer + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::Transfer) - .write(EvmAddress(asset_precompile_address)) + EvmDataWriter::new_with_selector(XtokensAction::Transfer) + .write(Address(asset_precompile_address.into())) .write(U256::from(500_000_000_000_000u128)) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 20000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(20000) + .expect_no_logs() + .execute_returns(vec![]) }) } @@ -2398,31 +2203,21 @@ fn xtokens_precompiles_transfer_multiasset() { // This time we transfer it through TransferMultiAsset // Instead of the address, we encode directly the multilocation referencing the asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::TransferMultiAsset) + EvmDataWriter::new_with_selector(XtokensAction::TransferMultiAsset) // We want to transfer the relay token .write(MultiLocation::parent()) .write(U256::from(500_000_000_000_000u128)) .write(destination) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 20000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(20000) + .expect_no_logs() + .execute_returns(vec![]); }) } @@ -2534,6 +2329,121 @@ fn make_sure_polkadot_xcm_cannot_be_called() { }); } +#[test] +fn transact_through_signed_mult_not_enabled() { + ExtBuilder::default() + .with_balances(vec![ + (AccountId::from(ALICE), 2_000 * GLMR), + (AccountId::from(BOB), 1_000 * GLMR), + ]) + .with_xcm_assets(vec![XcmAssetInitialization { + asset_type: AssetType::Xcm(MultiLocation::parent()), + metadata: AssetRegistrarMetadata { + name: b"RelayToken".to_vec(), + symbol: b"Relay".to_vec(), + decimals: 12, + is_frozen: false, + }, + balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], + is_sufficient: true, + }]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 + 3000, + 20000, + // lets say 1000 per instruction + Some(4000) + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + assert_noop!( + Call::XcmTransactor( + pallet_xcm_transactor::Call::::transact_through_signed_multilocation { + dest: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + fee_location: Box::new(xcm::VersionedMultiLocation::V1( + MultiLocation::parent() + )), + dest_weight: 11000, + call: vec![], + } + ) + .dispatch(::Origin::signed( + AccountId::from(ALICE) + )), + frame_system::Error::::CallFiltered + ); + }) +} + +#[test] +fn transact_through_signed_not_enabled() { + ExtBuilder::default() + .with_balances(vec![ + (AccountId::from(ALICE), 2_000 * GLMR), + (AccountId::from(BOB), 1_000 * GLMR), + ]) + .with_xcm_assets(vec![XcmAssetInitialization { + asset_type: AssetType::Xcm(MultiLocation::parent()), + metadata: AssetRegistrarMetadata { + name: b"RelayToken".to_vec(), + symbol: b"Relay".to_vec(), + decimals: 12, + is_frozen: false, + }, + balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], + is_sufficient: true, + }]) + .build() + .execute_with(|| { + let source_location = AssetType::Xcm(MultiLocation::parent()); + let source_id: moonbeam_runtime::AssetId = source_location.clone().into(); + + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 + 3000, + 20000, + // lets say 1000 per instruction + Some(4000) + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + assert_noop!( + Call::XcmTransactor( + pallet_xcm_transactor::Call::::transact_through_signed { + dest: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + fee_currency_id: CurrencyId::ForeignAsset(source_id), + dest_weight: 11000, + call: vec![], + } + ) + .dispatch(::Origin::signed( + AccountId::from(ALICE) + )), + frame_system::Error::::CallFiltered + ); + }) +} + #[test] fn transactor_cannot_use_more_than_max_weight() { ExtBuilder::default() @@ -2568,8 +2478,15 @@ fn transactor_cannot_use_more_than_max_weight() { Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000, + None + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1, - 20000 )); assert_noop!( @@ -2582,7 +2499,7 @@ fn transactor_cannot_use_more_than_max_weight() { 17000, vec![], ), - xcm_transactor::Error::::MaxWeightTransactReached + pallet_xcm_transactor::Error::::MaxWeightTransactReached ); assert_noop!( XcmTransactor::transact_through_derivative( @@ -2594,7 +2511,7 @@ fn transactor_cannot_use_more_than_max_weight() { 17000, vec![], ), - xcm_transactor::Error::::MaxWeightTransactReached + pallet_xcm_transactor::Error::::MaxWeightTransactReached ); }) } @@ -2654,7 +2571,7 @@ fn precompile_existence() { let precompiles = Precompiles::new(); let precompile_addresses: std::collections::BTreeSet<_> = vec![ 1, 2, 3, 4, 5, 6, 7, 8, 9, 1024, 1025, 1026, 2048, 2049, 2050, 2051, 2052, 2053, 2054, - 2055, + 2055, 2056, ] .into_iter() .map(H160::from_low_u64_be) @@ -2672,17 +2589,14 @@ fn precompile_existence() { assert!( precompiles - .execute( + .execute(&mut MockHandle::new( address, - &vec![], - None, - &Context { + Context { address, caller: H160::zero(), apparent_value: U256::zero() - }, - false - ) + } + ),) .is_some(), "execute({},..) should return Some(_)", i @@ -2696,17 +2610,14 @@ fn precompile_existence() { assert!( precompiles - .execute( + .execute(&mut MockHandle::new( address, - &vec![], - None, - &Context { + Context { address, caller: H160::zero(), apparent_value: U256::zero() - }, - false - ) + } + ),) .is_none(), "execute({},..) should return None", i @@ -2725,3 +2636,81 @@ fn base_fee_should_default_to_associate_type_value() { ); }); } + +#[test] +fn evm_revert_substrate_events() { + ExtBuilder::default() + .with_balances(vec![(AccountId::from(ALICE), 100_000 * GLMR)]) + .build() + .execute_with(|| { + let batch_precompile_address = H160::from_low_u64_be(2056); + + // Batch a transfer followed by an invalid call to batch. + // Thus BatchAll will revert the transfer. + assert_ok!(Call::EVM(pallet_evm::Call::call { + source: ALICE.into(), + target: batch_precompile_address, + input: EvmDataWriter::new_with_selector(BatchAction::BatchAll) + .write(vec![Address(BOB.into()), Address(batch_precompile_address)]) + .write(vec![U256::from(1 * GLMR), U256::zero()]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + value: U256::zero(), // No value sent in EVM + gas_limit: 500_000, + max_fee_per_gas: U256::from(100 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let transfer_count = System::events() + .iter() + .filter(|r| match r.event { + Event::Balances(pallet_balances::Event::Transfer { .. }) => true, + _ => false, + }) + .count(); + + assert_eq!(transfer_count, 0, "there should be no transfer event"); + }); +} + +#[test] +fn evm_success_keeps_substrate_events() { + ExtBuilder::default() + .with_balances(vec![(AccountId::from(ALICE), 100_000 * GLMR)]) + .build() + .execute_with(|| { + let batch_precompile_address = H160::from_low_u64_be(2056); + + assert_ok!(Call::EVM(pallet_evm::Call::call { + source: ALICE.into(), + target: batch_precompile_address, + input: EvmDataWriter::new_with_selector(BatchAction::BatchAll) + .write(vec![Address(BOB.into())]) + .write(vec![U256::from(1 * GLMR)]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + value: U256::zero(), // No value sent in EVM + gas_limit: 500_000, + max_fee_per_gas: U256::from(100 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let transfer_count = System::events() + .iter() + .filter(|r| match r.event { + Event::Balances(pallet_balances::Event::Transfer { .. }) => true, + _ => false, + }) + .count(); + + assert_eq!(transfer_count, 1, "there should be 1 transfer event"); + }); +} diff --git a/runtime/moonbeam/tests/runtime_apis.rs b/runtime/moonbeam/tests/runtime_apis.rs index 5c813c8b54..c6c3054249 100644 --- a/runtime/moonbeam/tests/runtime_apis.rs +++ b/runtime/moonbeam/tests/runtime_apis.rs @@ -54,7 +54,7 @@ fn ethereum_runtime_rpc_api_account_basic() { #[test] fn ethereum_runtime_rpc_api_gas_price() { ExtBuilder::default().build().execute_with(|| { - assert_eq!(Runtime::gas_price(), FixedGasPrice::min_gas_price()); + assert_eq!(Runtime::gas_price(), FixedGasPrice::min_gas_price().0); }); } diff --git a/runtime/moonbeam/tests/xcm_mock/mod.rs b/runtime/moonbeam/tests/xcm_mock/mod.rs index ca0bab9703..e41170c713 100644 --- a/runtime/moonbeam/tests/xcm_mock/mod.rs +++ b/runtime/moonbeam/tests/xcm_mock/mod.rs @@ -19,7 +19,7 @@ pub mod relay_chain; pub mod statemint_like; use cumulus_primitives_core::ParaId; -use polkadot_parachain::primitives::AccountIdConversion; +use sp_runtime::traits::AccountIdConversion; use sp_runtime::AccountId32; use xcm_simulator::{decl_test_network, decl_test_parachain, decl_test_relay_chain}; @@ -30,7 +30,7 @@ pub const PARAALICE: [u8; 20] = [1u8; 20]; pub const RELAYALICE: AccountId32 = AccountId32::new([0u8; 32]); pub fn para_a_account() -> AccountId32 { - ParaId::from(1).into_account() + ParaId::from(1).into_account_truncating() } pub fn evm_account() -> H160 { @@ -193,4 +193,4 @@ pub type AssetManager = pallet_asset_manager::Pallet; pub type XTokens = orml_xtokens::Pallet; pub type RelayBalances = pallet_balances::Pallet; pub type ParaBalances = pallet_balances::Pallet; -pub type XcmTransactor = xcm_transactor::Pallet; +pub type XcmTransactor = pallet_xcm_transactor::Pallet; diff --git a/runtime/moonbeam/tests/xcm_mock/parachain.rs b/runtime/moonbeam/tests/xcm_mock/parachain.rs index 1d71c81acb..80b9ef7b5b 100644 --- a/runtime/moonbeam/tests/xcm_mock/parachain.rs +++ b/runtime/moonbeam/tests/xcm_mock/parachain.rs @@ -317,6 +317,7 @@ parameter_types! { }; } + pub struct XcmConfig; impl Config for XcmConfig { type Call = Call; @@ -342,6 +343,7 @@ impl Config for XcmConfig { type SubscriptionService = PolkadotXcm; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; + type CallDispatcher = Call; } impl cumulus_pallet_xcm::Config for Runtime { @@ -393,8 +395,8 @@ parameter_types! { } parameter_type_with_key! { - pub ParachainMinFee: |_location: MultiLocation| -> u128 { - u128::MAX + pub ParachainMinFee: |_location: MultiLocation| -> Option { + Some(u128::MAX) }; } @@ -791,8 +793,8 @@ impl pallet_asset_manager::LocalAssetIdCreator for LocalAssetIdCreator // Our means of converting a local asset counter to an assetId // We basically hash (local asset counter) let mut result: [u8; 16] = [0u8; 16]; - let to_hash = local_asset_counter.encode(); - let hash: H256 = to_hash.using_encoded(::Hashing::hash); + let hash: H256 = + local_asset_counter.using_encoded(::Hashing::hash); result.copy_from_slice(&hash.as_fixed_bytes()[0..16]); u128::from_le_bytes(result) } @@ -814,7 +816,7 @@ impl pallet_asset_manager::Config for Runtime { type WeightInfo = (); } -impl xcm_transactor::Config for Runtime { +impl pallet_xcm_transactor::Config for Runtime { type Event = Event; type Balance = Balance; type Transactor = MockTransactors; @@ -844,6 +846,12 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = (); } +use sp_core::U256; + +parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); +} + impl pallet_evm::Config for Runtime { type FeeCalculator = (); type GasWeightMapping = (); @@ -851,7 +859,7 @@ impl pallet_evm::Config for Runtime { type CallOrigin = pallet_evm::EnsureAddressRoot; type WithdrawOrigin = pallet_evm::EnsureAddressNever; - type AddressMapping = runtime_common::IntoAddressMapping; + type AddressMapping = moonbeam_runtime_common::IntoAddressMapping; type Currency = Balances; type Runner = pallet_evm::runner::stack::Runner; @@ -859,11 +867,10 @@ impl pallet_evm::Config for Runtime { type PrecompilesType = (); type PrecompilesValue = (); type ChainId = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type OnChargeTransaction = (); type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } pub struct NormalFilter; @@ -917,6 +924,11 @@ impl xcm_primitives::UtilityEncodeCall for MockTransactors { } } +impl pallet_ethereum::Config for Runtime { + type Event = Event; + type StateRoot = pallet_ethereum::IntermediateStateRoot; +} + type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; @@ -936,12 +948,13 @@ construct_runtime!( CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin}, XTokens: orml_xtokens::{Pallet, Call, Storage, Event}, AssetManager: pallet_asset_manager::{Pallet, Call, Storage, Event}, - XcmTransactor: xcm_transactor::{Pallet, Call, Storage, Event}, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Storage, Event}, Treasury: pallet_treasury::{Pallet, Storage, Config, Event, Call}, LocalAssets: pallet_assets::::{Pallet, Call, Storage, Event}, Timestamp: pallet_timestamp::{Pallet, Call, Storage}, EVM: pallet_evm::{Pallet, Call, Storage, Config, Event}, + Ethereum: pallet_ethereum::{Pallet, Call, Storage, Event, Origin, Config}, } ); diff --git a/runtime/moonbeam/tests/xcm_mock/relay_chain.rs b/runtime/moonbeam/tests/xcm_mock/relay_chain.rs index 29d4986a85..bc4f35e5d3 100644 --- a/runtime/moonbeam/tests/xcm_mock/relay_chain.rs +++ b/runtime/moonbeam/tests/xcm_mock/relay_chain.rs @@ -28,7 +28,7 @@ use polkadot_parachain::primitives::Id as ParaId; use polkadot_runtime_parachains::{configuration, origin, shared, ump}; use xcm::latest::prelude::*; use xcm_builder::{ - AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, + Account32Hash, AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, IsConcrete, LocationInverter, SignedAccountId32AsNative, @@ -111,6 +111,9 @@ parameter_types! { pub type SovereignAccountOf = ( ChildParachainConvertsVia, AccountId32Aliases, + // Not enabled in the relay per se, but we enable it to test + // the transact_through_signed extrinsic + Account32Hash, ); pub type LocalAssetTransactor = @@ -129,9 +132,67 @@ parameter_types! { pub const MaxInstructions: u32 = 100; } +use frame_support::ensure; +use frame_support::traits::Contains; +use sp_std::marker::PhantomData; +use xcm_executor::traits::ShouldExecute; +/// Allows execution from `origin` if it is contained in `T` (i.e. `T::Contains(origin)`) taking +/// payments into account. +/// +/// Only allows for `DescendOrigin` + `WithdrawAsset`, + `BuyExecution` +pub struct AllowDescendOriginFromLocal(PhantomData); +impl> ShouldExecute for AllowDescendOriginFromLocal { + fn should_execute( + origin: &MultiLocation, + message: &mut Xcm, + max_weight: Weight, + _weight_credit: &mut Weight, + ) -> Result<(), ()> { + log::trace!( + target: "xcm::barriers", + "AllowTopLevelPaidExecutionFromLocal origin: + {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, message, max_weight, _weight_credit, + ); + ensure!(T::contains(origin), ()); + let mut iter = message.0.iter_mut(); + let mut i = iter.next().ok_or(())?; + match i { + DescendOrigin(..) => (), + _ => return Err(()), + } + + i = iter.next().ok_or(())?; + match i { + WithdrawAsset(..) => (), + _ => return Err(()), + } + + i = iter.next().ok_or(())?; + match i { + BuyExecution { + weight_limit: Limited(ref mut weight), + .. + } if *weight >= max_weight => { + *weight = max_weight; + Ok(()) + } + BuyExecution { + ref mut weight_limit, + .. + } if weight_limit == &Unlimited => { + *weight_limit = Limited(max_weight); + Ok(()) + } + _ => Err(()), + } + } +} + pub type XcmRouter = super::RelayChainXcmRouter; pub type Barrier = ( TakeWeightCredit, + AllowDescendOriginFromLocal, AllowTopLevelPaidExecutionFrom, // Expected responses are OK. AllowKnownQueryResponses, @@ -155,6 +216,7 @@ impl Config for XcmConfig { type AssetTrap = XcmPallet; type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type CallDispatcher = Call; } pub type LocalOriginToLocation = SignedToAccountId32; diff --git a/runtime/moonbeam/tests/xcm_mock/statemint_like.rs b/runtime/moonbeam/tests/xcm_mock/statemint_like.rs index 329965f19b..e6b505d8c5 100644 --- a/runtime/moonbeam/tests/xcm_mock/statemint_like.rs +++ b/runtime/moonbeam/tests/xcm_mock/statemint_like.rs @@ -263,6 +263,7 @@ impl Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; + type CallDispatcher = Call; } /// No local origins on this chain are allowed to dispatch XCM sends/executions. diff --git a/runtime/moonbeam/tests/xcm_tests.rs b/runtime/moonbeam/tests/xcm_tests.rs index 6fa690b3c3..66d911d67e 100644 --- a/runtime/moonbeam/tests/xcm_tests.rs +++ b/runtime/moonbeam/tests/xcm_tests.rs @@ -849,8 +849,14 @@ fn transact_through_derivative_multilocation() { Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000000000, + None + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1 * WEIGHT_PER_SECOND as u128, - 20000000000 )); }); @@ -990,9 +996,16 @@ fn transact_through_sovereign() { assert_ok!(XcmTransactor::set_transact_info( parachain::Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000000000, + None + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1 * WEIGHT_PER_SECOND as u128, - 20000000000 )); }); @@ -1873,6 +1886,104 @@ fn send_para_a_local_asset_to_para_b_and_send_it_back_together_with_some_glmr() }); } +#[test] +fn transact_through_signed_multilocation() { + MockNet::reset(); + let mut ancestry = MultiLocation::parent(); + + ParaA::execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 + 3000, + 20000000000, + // 4 instructions in transact through signed + Some(4000) + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 * WEIGHT_PER_SECOND as u128, + )); + ancestry = parachain::Ancestry::get(); + }); + + // Let's construct the Junction that we will append with DescendOrigin + let signed_origin: Junctions = X1(AccountKey20 { + network: NetworkId::Any, + key: PARAALICE, + }); + + let mut descend_origin_multilocation = parachain::SelfLocation::get(); + descend_origin_multilocation + .append_with(signed_origin) + .unwrap(); + + // To convert it to what the relay will see instead of us + descend_origin_multilocation + .reanchor(&MultiLocation::parent(), &ancestry) + .unwrap(); + + let derived = xcm_builder::Account32Hash::< + relay_chain::KusamaNetwork, + relay_chain::AccountId, + >::convert_ref(descend_origin_multilocation) + .unwrap(); + + Relay::execute_with(|| { + // free execution, full amount received + assert_ok!(RelayBalances::transfer( + relay_chain::Origin::signed(RELAYALICE), + derived.clone(), + 4000004100u128, + )); + // derived account has all funds + assert!(RelayBalances::free_balance(&derived) == 4000004100); + // sovereign account has 0 funds + assert!(RelayBalances::free_balance(¶_a_account()) == 0); + }); + + // Encode the call. Balances transact to para_a_account + // First index + let mut encoded: Vec = Vec::new(); + let index = ::PalletInfo::index::< + relay_chain::Balances, + >() + .unwrap() as u8; + + encoded.push(index); + + // Then call bytes + let mut call_bytes = pallet_balances::Call::::transfer { + // 100 to sovereign + dest: para_a_account(), + value: 100u32.into(), + } + .encode(); + encoded.append(&mut call_bytes); + + ParaA::execute_with(|| { + assert_ok!(XcmTransactor::transact_through_signed_multilocation( + parachain::Origin::signed(PARAALICE.into()), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // 4000000000 for transfer + 4000 for XCM + // 1-1 to fee + 4000000000, + encoded, + )); + }); + + Relay::execute_with(|| { + assert!(RelayBalances::free_balance(¶_a_account()) == 100); + + assert!(RelayBalances::free_balance(&derived) == 0); + }); +} + use parity_scale_codec::{Decode, Encode}; use sp_io::hashing::blake2_256; diff --git a/runtime/moonriver/Cargo.toml b/runtime/moonriver/Cargo.toml index 7c9737ac5c..45aed5581e 100644 --- a/runtime/moonriver/Cargo.toml +++ b/runtime/moonriver/Cargo.toml @@ -20,33 +20,34 @@ smallvec = "1.8.0" account = { path = "../../primitives/account/", default-features = false } moonbeam-core-primitives = { path = "../../core-primitives", default-features = false } moonbeam-relay-encoder = { path = "../relay-encoder", default-features = false } +moonbeam-runtime-common = { path = "../common", default-features = false } precompile-utils = { path = "../../precompiles/utils", default-features = false } -runtime-common = { path = "../common", default-features = false, features = [ "xcm-support" ] } session-keys-primitives = { path = "../../primitives/session-keys", default-features = false } xcm-primitives = { path = "../../primitives/xcm/", default-features = false } # Moonbeam pallets pallet-asset-manager = { path = "../../pallets/asset-manager", default-features = false } pallet-author-mapping = { path = "../../pallets/author-mapping", default-features = false } -pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +pallet-crowdloan-rewards = { git = "https://github.com/purestake/crowdloan-rewards", branch = "moonbeam-polkadot-v0.9.23", default-features = false } pallet-ethereum-chain-id = { path = "../../pallets/ethereum-chain-id", default-features = false } pallet-maintenance-mode = { path = "../../pallets/maintenance-mode", default-features = false, features = [ "xcm-support" ] } pallet-migrations = { path = "../../pallets/migrations", default-features = false } pallet-moonbeam-orbiters = { path = "../../pallets/moonbeam-orbiters", default-features = false } +pallet-parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } pallet-proxy-genesis-companion = { path = "../../pallets/proxy-genesis-companion", default-features = false } -parachain-staking = { path = "../../pallets/parachain-staking", default-features = false } -xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } +pallet-xcm-transactor = { path = "../../pallets/xcm-transactor", default-features = false } # Moonbeam precompiles -crowdloan-rewards-precompiles = { path = "../../precompiles/crowdloan-rewards", default-features = false } -pallet-author-mapping-precompiles = { path = "../../precompiles/author-mapping", default-features = false } -pallet-democracy-precompiles = { path = "../../precompiles/pallet-democracy", default-features = false } -pallet-evm-precompile-assets-erc20 = { path = "../../precompiles/assets-erc20", default-features = false } +pallet-evm-precompile-author-mapping = { path = "../../precompiles/author-mapping", default-features = false } pallet-evm-precompile-balances-erc20 = { path = "../../precompiles/balances-erc20", default-features = false } -parachain-staking-precompiles = { path = "../../precompiles/parachain-staking", default-features = false } -relay-encoder-precompiles = { path = "../../precompiles/relay-encoder", default-features = false } -xcm-transactor-precompiles = { path = "../../precompiles/xcm_transactor", default-features = false } -xtokens-precompiles = { path = "../../precompiles/xtokens", default-features = false } +pallet-evm-precompile-batch = { path = "../../precompiles/batch", default-features = false } +pallet-evm-precompile-crowdloan-rewards = { path = "../../precompiles/crowdloan-rewards", default-features = false } +pallet-evm-precompile-democracy = { path = "../../precompiles/pallet-democracy", default-features = false } +pallet-evm-precompile-parachain-staking = { path = "../../precompiles/parachain-staking", default-features = false } +pallet-evm-precompile-relay-encoder = { path = "../../precompiles/relay-encoder", default-features = false } +pallet-evm-precompile-xcm-transactor = { path = "../../precompiles/xcm-transactor", default-features = false } +pallet-evm-precompile-xtokens = { path = "../../precompiles/xtokens", default-features = false } +pallet-evm-precompileset-assets-erc20 = { path = "../../precompiles/assets-erc20", default-features = false } # Moonbeam tracing evm-tracing-events = { path = "../../primitives/rpc/evm-tracing-events", optional = true, default-features = false } @@ -55,95 +56,97 @@ moonbeam-rpc-primitives-debug = { path = "../../primitives/rpc/debug", default-f moonbeam-rpc-primitives-txpool = { path = "../../primitives/rpc/txpool", default-features = false } # Substrate -frame-executive = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-assets = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-balances = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-collective = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-democracy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-identity = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-proxy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-randomness-collective-flip = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-scheduler = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-society = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-timestamp = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-transaction-payment = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-treasury = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-utility = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-executive = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-assets = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-democracy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-identity = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-proxy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-randomness-collective-flip = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-society = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-utility = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive", "max-encoded-len" ] } scale-info = { version = "2.0", default-features = false, features = [ "derive" ] } -sp-api = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-block-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-debug-derive = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-inherents = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-io = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-offchain = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-session = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-transaction-pool = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-version = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-debug-derive = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-version = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Frontier -fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-blake2 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-bn128 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-dispatch = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-modexp = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-sha3fips = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-evm-precompile-simple = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +fp-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-rpc = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +fp-self-contained = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-base-fee = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-ethereum = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-blake2 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-bn128 = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-dispatch = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-modexp = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-sha3fips = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-evm-precompile-simple = { git = "https://github.com/purestake/frontier", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Cumulus / Nimbus -cumulus-pallet-dmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-xcm = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-pallet-xcmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-timestamp = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-primitives-utility = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -parachain-info = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-pallet-dmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-parachain-system = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-xcm = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-pallet-xcmp-queue = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-timestamp = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-primitives-utility = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +nimbus-primitives = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-author-inherent = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-author-slot-filter = { git = "https://github.com/purestake/nimbus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +parachain-info = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Polkadot / XCM -orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -orml-xcm-support = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -polkadot-core-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +orml-traits = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +orml-xcm-support = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +orml-xtokens = { git = "https://github.com/purestake/open-runtime-module-library", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +pallet-xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +polkadot-core-primitives = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +polkadot-parachain = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-builder = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +xcm-executor = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23", default-features = false } # Benchmarking -frame-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-system-benchmarking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } -frame-try-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", optional = true, default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-system-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", optional = true, default-features = false } [dev-dependencies] hex = "0.4" rlp = "0.5" sha3 = "0.9" -cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-primitives-parachain-inherent = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } +cumulus-test-relay-sproof-builder = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } -polkadot-runtime-parachains = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -xcm-simulator = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +polkadot-runtime-parachains = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +xcm-simulator = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } + +precompile-utils = { path = "../../precompiles/utils", default-features = false, features = [ "testing" ] } [build-dependencies] -substrate-wasm-builder = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } [features] default = [ "std" ] @@ -168,28 +171,34 @@ std = [ "moonbeam-evm-tracer/std", "moonbeam-rpc-primitives-debug/std", "moonbeam-rpc-primitives-txpool/std", + "moonbeam-runtime-common/std", "nimbus-primitives/std", "orml-xtokens/std", "pallet-asset-manager/std", "pallet-assets/std", "pallet-author-inherent/std", - "pallet-author-mapping-precompiles/std", "pallet-author-mapping/std", "pallet-author-slot-filter/std", "pallet-balances/std", "pallet-base-fee/std", "pallet-collective/std", "pallet-crowdloan-rewards/std", - "pallet-democracy-precompiles/std", "pallet-democracy/std", "pallet-ethereum-chain-id/std", "pallet-ethereum/std", + "pallet-evm-precompile-author-mapping/std", "pallet-evm-precompile-balances-erc20/std", + "pallet-evm-precompile-batch/std", + "pallet-evm-precompile-democracy/std", + "pallet-evm-precompile-parachain-staking/std", + "pallet-evm-precompile-xcm-transactor/std", + "pallet-evm-precompile-xtokens/std", "pallet-evm/std", "pallet-identity/std", "pallet-maintenance-mode/std", "pallet-migrations/std", "pallet-moonbeam-orbiters/std", + "pallet-parachain-staking/std", "pallet-proxy-genesis-companion/std", "pallet-proxy/std", "pallet-randomness-collective-flip/std", @@ -200,13 +209,11 @@ std = [ "pallet-transaction-payment/std", "pallet-treasury/std", "pallet-utility/std", + "pallet-xcm-transactor/std", "pallet-xcm/std", "parachain-info/std", - "parachain-staking-precompiles/std", - "parachain-staking/std", "parity-scale-codec/std", "precompile-utils/std", - "runtime-common/std", "scale-info/std", "serde", "session-keys-primitives/std", @@ -224,10 +231,7 @@ std = [ "xcm-builder/std", "xcm-executor/std", "xcm-primitives/std", - "xcm-transactor-precompiles/std", - "xcm-transactor/std", "xcm/std", - "xtokens-precompiles/std", ] # Must be enabled for tracing runtimes only @@ -245,11 +249,14 @@ runtime-wasm = [] on-chain-release-build = [ "sp-api/disable-logging" ] runtime-benchmarks = [ + "cumulus-pallet-parachain-system/runtime-benchmarks", "frame-benchmarking", "frame-support/runtime-benchmarks", "frame-system-benchmarking", "frame-system/runtime-benchmarks", "hex-literal", + "pallet-asset-manager/runtime-benchmarks", + "pallet-author-inherent/runtime-benchmarks", "pallet-author-mapping/runtime-benchmarks", "pallet-author-slot-filter/runtime-benchmarks", "pallet-balances/runtime-benchmarks", @@ -257,10 +264,11 @@ runtime-benchmarks = [ "pallet-crowdloan-rewards/runtime-benchmarks", "pallet-ethereum/runtime-benchmarks", "pallet-moonbeam-orbiters/runtime-benchmarks", + "pallet-parachain-staking/runtime-benchmarks", "pallet-society/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", + "pallet-xcm-transactor/runtime-benchmarks", "pallet-xcm/runtime-benchmarks", - "parachain-staking/runtime-benchmarks", "sp-runtime/runtime-benchmarks", "xcm-builder/runtime-benchmarks", ] @@ -268,6 +276,7 @@ try-runtime = [ "frame-executive/try-runtime", "frame-system/try-runtime", "frame-try-runtime", + "moonbeam-runtime-common/try-runtime", "pallet-asset-manager/try-runtime", "pallet-author-mapping/try-runtime", "pallet-author-slot-filter/try-runtime", @@ -276,9 +285,8 @@ try-runtime = [ "pallet-maintenance-mode/try-runtime", #"pallet-crowdloan-rewards/try-runtime", "pallet-migrations/try-runtime", + "pallet-parachain-staking/try-runtime", "pallet-scheduler/try-runtime", "pallet-society/try-runtime", "pallet-timestamp/try-runtime", - "parachain-staking/try-runtime", - "runtime-common/try-runtime", ] diff --git a/runtime/moonriver/src/asset_config.rs b/runtime/moonriver/src/asset_config.rs index 15589d35bc..5c4ac4c438 100644 --- a/runtime/moonriver/src/asset_config.rs +++ b/runtime/moonriver/src/asset_config.rs @@ -23,7 +23,7 @@ use super::{ LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; -use pallet_evm_precompile_assets_erc20::AccountIdAssetIdConversion; +use pallet_evm_precompileset_assets_erc20::AccountIdAssetIdConversion; use sp_runtime::traits::Hash as THash; use frame_support::{ @@ -234,8 +234,8 @@ impl pallet_asset_manager::LocalAssetIdCreator for LocalAssetIdCreator // Our means of converting a local asset counter to an assetId // We basically hash (local asset counter) let mut result: [u8; 16] = [0u8; 16]; - let to_hash = local_asset_counter.encode(); - let hash: H256 = to_hash.using_encoded(::Hashing::hash); + let hash: H256 = + local_asset_counter.using_encoded(::Hashing::hash); result.copy_from_slice(&hash.as_fixed_bytes()[0..16]); u128::from_le_bytes(result) } diff --git a/runtime/moonriver/src/lib.rs b/runtime/moonriver/src/lib.rs index 77b04b0707..24b6675617 100644 --- a/runtime/moonriver/src/lib.rs +++ b/runtime/moonriver/src/lib.rs @@ -41,14 +41,14 @@ use frame_support::{ pallet_prelude::DispatchResult, parameter_types, traits::{ - ConstBool, ConstU128, ConstU16, ConstU32, ConstU64, ConstU8, Contains, EnsureOneOf, - EqualPrivilegeOnly, Imbalance, InstanceFilter, OffchainWorker, OnFinalize, OnIdle, - OnInitialize, OnRuntimeUpgrade, OnUnbalanced, + ConstBool, ConstU128, ConstU16, ConstU32, ConstU64, ConstU8, Contains, + Currency as CurrencyT, EnsureOneOf, EqualPrivilegeOnly, Imbalance, InstanceFilter, + OffchainWorker, OnFinalize, OnIdle, OnInitialize, OnRuntimeUpgrade, OnUnbalanced, }, weights::{ constants::{RocksDbWeight, WEIGHT_PER_SECOND}, - ConstantMultiplier, DispatchClass, GetDispatchInfo, IdentityFee, Weight, - WeightToFeeCoefficient, WeightToFeeCoefficients, WeightToFeePolynomial, + ConstantMultiplier, DispatchClass, GetDispatchInfo, Weight, WeightToFeeCoefficient, + WeightToFeeCoefficients, WeightToFeePolynomial, }, PalletId, }; @@ -62,18 +62,21 @@ use pallet_balances::NegativeImbalance; use pallet_ethereum::Call::transact; use pallet_ethereum::Transaction as EthereumTransaction; use pallet_evm::{ - Account as EVMAccount, EnsureAddressNever, EnsureAddressRoot, FeeCalculator, GasWeightMapping, - Runner, + Account as EVMAccount, EVMCurrencyAdapter, EnsureAddressNever, EnsureAddressRoot, + FeeCalculator, GasWeightMapping, OnChargeEVMTransaction as OnChargeEVMTransactionT, Runner, }; +pub use pallet_parachain_staking::{InflationInfo, Range}; use pallet_transaction_payment::{CurrencyAdapter, Multiplier, TargetedFeeAdjustment}; -pub use parachain_staking::{InflationInfo, Range}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_api::impl_runtime_apis; use sp_core::{OpaqueMetadata, H160, H256, U256}; use sp_runtime::{ create_runtime_str, generic, impl_opaque_keys, - traits::{BlakeTwo256, Block as BlockT, Dispatchable, IdentityLookup, PostDispatchInfoOf}, + traits::{ + BlakeTwo256, Block as BlockT, DispatchInfoOf, Dispatchable, IdentityLookup, + PostDispatchInfoOf, UniqueSaturatedInto, + }, transaction_validity::{ InvalidTransaction, TransactionSource, TransactionValidity, TransactionValidityError, }, @@ -120,9 +123,9 @@ pub mod currency { pub const MOVR: Balance = 1_000_000_000_000_000_000; pub const KILOMOVR: Balance = 1_000_000_000_000_000_000_000; - pub const TRANSACTION_BYTE_FEE: Balance = 10 * MICROMOVR * SUPPLY_FACTOR; + pub const TRANSACTION_BYTE_FEE: Balance = 1 * GIGAWEI * SUPPLY_FACTOR; pub const STORAGE_BYTE_FEE: Balance = 100 * MICROMOVR * SUPPLY_FACTOR; - pub const WEIGHT_FEE: Balance = 100 * KILOWEI * SUPPLY_FACTOR; + pub const WEIGHT_FEE: Balance = 50 * KILOWEI * SUPPLY_FACTOR; pub const fn deposit(items: u32, bytes: u32) -> Balance { items as Balance * 1 * MOVR * SUPPLY_FACTOR + (bytes as Balance) * STORAGE_BYTE_FEE @@ -164,7 +167,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("moonriver"), impl_name: create_runtime_str!("moonriver"), authoring_version: 3, - spec_version: 1600, + spec_version: 1700, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 2, @@ -291,37 +294,33 @@ where } } -pub struct WeightToFee; -impl WeightToFeePolynomial for WeightToFee { +pub struct LengthToFee; +impl WeightToFeePolynomial for LengthToFee { type Balance = Balance; - /// Return a vec of coefficients. Here we just use one coefficient and reduce it to a constant - /// modifier in order to closely match Ethereum-based fees. - /// - /// Calculation, per the documentation in `frame_support`: - /// - /// ```ignore - /// coeff_integer * x^(degree) + coeff_frac * x^(degree) - /// ``` fn polynomial() -> WeightToFeeCoefficients { - smallvec![WeightToFeeCoefficient { - degree: 1, - coeff_frac: Perbill::zero(), - coeff_integer: currency::WEIGHT_FEE, - negative: false, - }] + smallvec![ + WeightToFeeCoefficient { + degree: 1, + coeff_frac: Perbill::zero(), + coeff_integer: currency::TRANSACTION_BYTE_FEE, + negative: false, + }, + WeightToFeeCoefficient { + degree: 3, + coeff_frac: Perbill::zero(), + coeff_integer: 1 * currency::SUPPLY_FACTOR, + negative: false, + }, + ] } } -parameter_types! { - pub const TransactionByteFee: Balance = currency::TRANSACTION_BYTE_FEE; -} - impl pallet_transaction_payment::Config for Runtime { type OnChargeTransaction = CurrencyAdapter>; type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = IdentityFee; - type LengthToFee = ConstantMultiplier; + type WeightToFee = ConstantMultiplier>; + type LengthToFee = LengthToFee; type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; } @@ -370,8 +369,11 @@ parameter_types! { pub struct FixedGasPrice; impl FeeCalculator for FixedGasPrice { - fn min_gas_price() -> U256 { - (1 * currency::GIGAWEI * currency::SUPPLY_FACTOR).into() + fn min_gas_price() -> (U256, Weight) { + ( + (1 * currency::GIGAWEI * currency::SUPPLY_FACTOR).into(), + 0u64, + ) } } @@ -409,23 +411,24 @@ where } } +moonbeam_runtime_common::impl_on_charge_evm_transaction!(); + impl pallet_evm::Config for Runtime { type FeeCalculator = FixedGasPrice; type GasWeightMapping = MoonbeamGasWeightMapping; type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping; type CallOrigin = EnsureAddressRoot; type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = runtime_common::IntoAddressMapping; + type AddressMapping = moonbeam_runtime_common::IntoAddressMapping; type Currency = Balances; type Event = Event; type Runner = pallet_evm::runner::stack::Runner; type PrecompilesType = MoonriverPrecompiles; type PrecompilesValue = PrecompilesValue; type ChainId = EthereumChainId; - type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter>; + type OnChargeTransaction = OnChargeEVMTransaction>; type BlockGasLimit = BlockGasLimit; type FindAuthor = FindAuthorAdapter; - type WeightInfo = pallet_evm::weights::SubstrateWeight; } parameter_types! { @@ -674,9 +677,9 @@ parameter_types! { } pub struct OnCollatorPayout; -impl parachain_staking::OnCollatorPayout for OnCollatorPayout { +impl pallet_parachain_staking::OnCollatorPayout for OnCollatorPayout { fn on_collator_payout( - for_round: parachain_staking::RoundIndex, + for_round: pallet_parachain_staking::RoundIndex, collator_id: AccountId, amount: Balance, ) -> Weight { @@ -684,13 +687,13 @@ impl parachain_staking::OnCollatorPayout for OnCollatorPayou } } pub struct OnNewRound; -impl parachain_staking::OnNewRound for OnNewRound { - fn on_new_round(round_index: parachain_staking::RoundIndex) -> Weight { +impl pallet_parachain_staking::OnNewRound for OnNewRound { + fn on_new_round(round_index: pallet_parachain_staking::RoundIndex) -> Weight { MoonbeamOrbiters::on_new_round(round_index) } } -impl parachain_staking::Config for Runtime { +impl pallet_parachain_staking::Config for Runtime { type Event = Event; type Currency = Balances; type MonetaryGovernanceOrigin = EnsureRoot; @@ -730,14 +733,15 @@ impl parachain_staking::Config for Runtime { type MinDelegatorStk = ConstU128<{ 5 * currency::MOVR * currency::SUPPLY_FACTOR }>; type OnCollatorPayout = OnCollatorPayout; type OnNewRound = OnNewRound; - type WeightInfo = parachain_staking::weights::SubstrateWeight; + type WeightInfo = pallet_parachain_staking::weights::SubstrateWeight; } impl pallet_author_inherent::Config for Runtime { type SlotBeacon = RelaychainBlockNumberProvider; - type AccountLookup = AuthorMapping; + type AccountLookup = MoonbeamOrbiters; type EventHandler = ParachainStaking; type CanAuthor = AuthorFilter; + type WeightInfo = pallet_author_inherent::weights::SubstrateWeight; } impl pallet_author_slot_filter::Config for Runtime { @@ -802,6 +806,8 @@ pub enum ProxyType { Balances = 5, /// Allow extrinsic related to AuthorMapping. AuthorMapping = 6, + /// Allow extrinsic related to IdentityJudgement. + IdentityJudgement = 7, } impl Default for ProxyType { @@ -845,6 +851,10 @@ impl InstanceFilter for ProxyType { ), ProxyType::Balances => matches!(c, Call::Balances(..) | Call::Utility(..)), ProxyType::AuthorMapping => matches!(c, Call::AuthorMapping(..)), + ProxyType::IdentityJudgement => matches!( + c, + Call::Identity(pallet_identity::Call::provide_judgement { .. }) | Call::Utility(..) + ), } } @@ -881,14 +891,11 @@ impl pallet_proxy::Config for Runtime { impl pallet_migrations::Config for Runtime { type Event = Event; - type MigrationsList = ( - runtime_common::migrations::CommonMigrations< - Runtime, - CouncilCollective, - TechCommitteeCollective, - >, - runtime_common::migrations::XcmMigrations, - ); + type MigrationsList = moonbeam_runtime_common::migrations::CommonMigrations< + Runtime, + CouncilCollective, + TechCommitteeCollective, + >; } /// Maintenance mode Call filter @@ -947,6 +954,19 @@ impl Contains for NormalFilter { pallet_xcm::Call::force_default_xcm_version { .. } => true, _ => false, }, + // We filter anonymous proxy as they make "reserve" inconsistent + // See: https://github.com/paritytech/substrate/blob/37cca710eed3dadd4ed5364c7686608f5175cce1/frame/proxy/src/lib.rs#L270 // editorconfig-checker-disable-line + Call::Proxy(method) => match method { + pallet_proxy::Call::anonymous { .. } => false, + pallet_proxy::Call::kill_anonymous { .. } => false, + _ => true, + }, + // We filter for now transact through signed + Call::XcmTransactor(method) => match method { + pallet_xcm_transactor::Call::transact_through_signed_multilocation { .. } => false, + pallet_xcm_transactor::Call::transact_through_signed { .. } => false, + _ => true, + }, _ => true, } } @@ -1058,7 +1078,7 @@ impl pallet_moonbeam_orbiters::Config for Runtime { type OrbiterReserveIdentifier = OrbiterReserveIdentifier; type RotatePeriod = ConstU32<3>; /// Round index type. - type RoundIndex = parachain_staking::RoundIndex; + type RoundIndex = pallet_parachain_staking::RoundIndex; type WeightInfo = pallet_moonbeam_orbiters::weights::SubstrateWeight; } @@ -1080,7 +1100,7 @@ construct_runtime! { TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 11, // Consensus support. - ParachainStaking: parachain_staking::{Pallet, Call, Storage, Event, Config} = 20, + ParachainStaking: pallet_parachain_staking::{Pallet, Call, Storage, Event, Config} = 20, AuthorInherent: pallet_author_inherent::{Pallet, Call, Storage, Inherent} = 21, AuthorFilter: pallet_author_slot_filter::{Pallet, Call, Storage, Event, Config} = 22, AuthorMapping: pallet_author_mapping::{Pallet, Call, Config, Storage, Event} = 23, @@ -1126,7 +1146,7 @@ construct_runtime! { Assets: pallet_assets::{Pallet, Call, Storage, Event} = 104, AssetManager: pallet_asset_manager::{Pallet, Call, Storage, Event} = 105, XTokens: orml_xtokens::{Pallet, Call, Storage, Event} = 106, - XcmTransactor: xcm_transactor::{Pallet, Call, Storage, Event} = 107, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Storage, Event} = 107, LocalAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 108, } } @@ -1172,7 +1192,19 @@ pub type Executive = frame_executive::Executive< // // Specific impls provided to the `impl_runtime_apis_plus_common!` macro. // } // ``` -runtime_common::impl_runtime_apis_plus_common! { +moonbeam_runtime_common::impl_runtime_apis_plus_common! { + impl session_keys_primitives::VrfApi for Runtime { + fn get_last_vrf_output() -> Option<::Hash> { + None + } + fn vrf_key_lookup( + nimbus_id: nimbus_primitives::NimbusId + ) -> Option { + use session_keys_primitives::KeysLookup; + AuthorMapping::lookup_keys(&nimbus_id) + } + } + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { fn validate_transaction( source: TransactionSource, @@ -1282,7 +1314,7 @@ cumulus_pallet_parachain_system::register_validate_block!( CheckInherents = CheckInherents, ); -runtime_common::impl_self_contained_call!(); +moonbeam_runtime_common::impl_self_contained_call!(); // Shorthand for a Get field of a pallet Config. #[macro_export] @@ -1307,7 +1339,9 @@ mod tests { ); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); - assert!(std::mem::size_of::>() <= CALL_ALIGN as usize); + assert!( + std::mem::size_of::>() <= CALL_ALIGN as usize + ); assert!( std::mem::size_of::>() <= CALL_ALIGN as usize ); @@ -1333,13 +1367,13 @@ mod tests { assert_eq!(SUPPLY_FACTOR, 1); // txn fees - assert_eq!(TRANSACTION_BYTE_FEE, Balance::from(10 * MICROMOVR)); + assert_eq!(TRANSACTION_BYTE_FEE, Balance::from(1 * GIGAWEI)); assert_eq!( get!(pallet_transaction_payment, OperationalFeeMultiplier, u8), 5_u8 ); assert_eq!(STORAGE_BYTE_FEE, Balance::from(100 * MICROMOVR)); - assert_eq!(FixedGasPrice::min_gas_price(), (1 * GIGAWEI).into()); + assert_eq!(FixedGasPrice::min_gas_price().0, (1 * GIGAWEI).into()); // democracy minimums assert_eq!( @@ -1371,19 +1405,19 @@ mod tests { // staking minimums assert_eq!( - get!(parachain_staking, MinCollatorStk, u128), + get!(pallet_parachain_staking, MinCollatorStk, u128), Balance::from(1 * KILOMOVR) ); assert_eq!( - get!(parachain_staking, MinCandidateStk, u128), + get!(pallet_parachain_staking, MinCandidateStk, u128), Balance::from(500 * MOVR) ); assert_eq!( - get!(parachain_staking, MinDelegation, u128), + get!(pallet_parachain_staking, MinDelegation, u128), Balance::from(5 * MOVR) ); assert_eq!( - get!(parachain_staking, MinDelegatorStk, u128), + get!(pallet_parachain_staking, MinDelegatorStk, u128), Balance::from(5 * MOVR) ); @@ -1419,15 +1453,20 @@ mod tests { } #[test] - // Required migration is parachain_staking::migrations::IncreaseMaxTopDelegationsPerCandidate + // Required migration is + // pallet_parachain_staking::migrations::IncreaseMaxTopDelegationsPerCandidate // Purpose of this test is to remind of required migration if constant is ever changed fn updating_maximum_delegators_per_candidate_requires_configuring_required_migration() { assert_eq!( - get!(parachain_staking, MaxTopDelegationsPerCandidate, u32), + get!(pallet_parachain_staking, MaxTopDelegationsPerCandidate, u32), 300 ); assert_eq!( - get!(parachain_staking, MaxBottomDelegationsPerCandidate, u32), + get!( + pallet_parachain_staking, + MaxBottomDelegationsPerCandidate, + u32 + ), 50 ); } diff --git a/runtime/moonriver/src/precompiles.rs b/runtime/moonriver/src/precompiles.rs index e49be1eb2a..b0c24b31e4 100644 --- a/runtime/moonriver/src/precompiles.rs +++ b/runtime/moonriver/src/precompiles.rs @@ -15,27 +15,25 @@ // along with Moonbeam. If not, see . use crate::asset_config::{ForeignAssetInstance, LocalAssetInstance}; -use crowdloan_rewards_precompiles::CrowdloanRewardsWrapper; -use fp_evm::Context; +use frame_support::parameter_types; use moonbeam_relay_encoder::kusama::KusamaEncoder; -use pallet_author_mapping_precompiles::AuthorMappingWrapper; -use pallet_democracy_precompiles::DemocracyWrapper; -use pallet_evm::{AddressMapping, Precompile, PrecompileResult, PrecompileSet}; -use pallet_evm_precompile_assets_erc20::{Erc20AssetsPrecompileSet, IsForeign, IsLocal}; +use pallet_evm_precompile_author_mapping::AuthorMappingWrapper; use pallet_evm_precompile_balances_erc20::{Erc20BalancesPrecompile, Erc20Metadata}; +use pallet_evm_precompile_batch::BatchPrecompile; use pallet_evm_precompile_blake2::Blake2F; use pallet_evm_precompile_bn128::{Bn128Add, Bn128Mul, Bn128Pairing}; +use pallet_evm_precompile_crowdloan_rewards::CrowdloanRewardsWrapper; +use pallet_evm_precompile_democracy::DemocracyWrapper; use pallet_evm_precompile_dispatch::Dispatch; use pallet_evm_precompile_modexp::Modexp; +use pallet_evm_precompile_parachain_staking::ParachainStakingWrapper; +use pallet_evm_precompile_relay_encoder::RelayEncoderWrapper; use pallet_evm_precompile_sha3fips::Sha3FIPS256; use pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256}; -use parachain_staking_precompiles::ParachainStakingWrapper; -use relay_encoder_precompiles::RelayEncoderWrapper; -use sp_core::H160; -use sp_std::fmt::Debug; -use sp_std::marker::PhantomData; -use xcm_transactor_precompiles::XcmTransactorWrapper; -use xtokens_precompiles::XtokensWrapper; +use pallet_evm_precompile_xcm_transactor::XcmTransactorWrapper; +use pallet_evm_precompile_xtokens::XtokensWrapper; +use pallet_evm_precompileset_assets_erc20::{Erc20AssetsPrecompileSet, IsForeign, IsLocal}; +use precompile_utils::precompile_set::*; pub struct NativeErc20Metadata; @@ -64,133 +62,67 @@ impl Erc20Metadata for NativeErc20Metadata { } /// The asset precompile address prefix. Addresses that match against this prefix will be routed -/// to Erc20AssetsPrecompileSet +/// to Erc20AssetsPrecompileSet being marked as foreign pub const FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8; 4]; +/// The asset precompile address prefix. Addresses that match against this prefix will be routed +/// to Erc20AssetsPrecompileSet being marked as local pub const LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8, 255u8, 255u8, 254u8]; +parameter_types! { + pub ForeignAssetPrefix: &'static [u8] = FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX; + pub LocalAssetPrefix: &'static [u8] = LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX; +} + /// The PrecompileSet installed in the Moonriver runtime. /// We include the nine Istanbul precompiles /// (https://github.com/ethereum/go-ethereum/blob/3c46f557/core/vm/contracts.go#L69) /// as well as a special precompile for dispatching Substrate extrinsics -#[derive(Debug, Clone, Copy)] -pub struct MoonriverPrecompiles(PhantomData); - -impl MoonriverPrecompiles -where - R: pallet_evm::Config, -{ - pub fn new() -> Self { - Self(Default::default()) - } - /// Return all addresses that contain precompiles. This can be used to populate dummy code - /// under the precompile. - pub fn used_addresses() -> impl Iterator { - sp_std::vec![ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 1024, 1025, 1026, 2048, 2049, 2050, 2051, 2052, 2053, 2054, - 2055 - ] - .into_iter() - .map(|x| R::AddressMapping::into_account_id(hash(x))) - } -} - /// The following distribution has been decided for the precompiles /// 0-1023: Ethereum Mainnet Precompiles /// 1024-2047 Precompiles that are not in Ethereum Mainnet but are neither Moonbeam specific /// 2048-4095 Moonbeam specific precompiles -impl PrecompileSet for MoonriverPrecompiles -where - Dispatch: Precompile, - ParachainStakingWrapper: Precompile, - CrowdloanRewardsWrapper: Precompile, - Erc20BalancesPrecompile: Precompile, - Erc20AssetsPrecompileSet: PrecompileSet, - Erc20AssetsPrecompileSet: PrecompileSet, - XtokensWrapper: Precompile, - RelayEncoderWrapper: Precompile, - XcmTransactorWrapper: Precompile, - DemocracyWrapper: Precompile, - AuthorMappingWrapper: Precompile, - R: pallet_evm::Config, -{ - fn execute( - &self, - address: H160, - input: &[u8], - target_gas: Option, - context: &Context, - is_static: bool, - ) -> Option { - match address { - // Ethereum precompiles : - a if a == hash(1) => Some(ECRecover::execute(input, target_gas, context, is_static)), - a if a == hash(2) => Some(Sha256::execute(input, target_gas, context, is_static)), - a if a == hash(3) => Some(Ripemd160::execute(input, target_gas, context, is_static)), - a if a == hash(4) => Some(Identity::execute(input, target_gas, context, is_static)), - a if a == hash(5) => Some(Modexp::execute(input, target_gas, context, is_static)), - a if a == hash(6) => Some(Bn128Add::execute(input, target_gas, context, is_static)), - a if a == hash(7) => Some(Bn128Mul::execute(input, target_gas, context, is_static)), - a if a == hash(8) => Some(Bn128Pairing::execute(input, target_gas, context, is_static)), - a if a == hash(9) => Some(Blake2F::execute(input, target_gas, context, is_static)), - // Non-Moonbeam specific nor Ethereum precompiles : - a if a == hash(1024) => { - Some(Sha3FIPS256::execute(input, target_gas, context, is_static)) - } - a if a == hash(1025) => Some(Dispatch::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(1026) => Some(ECRecoverPublicKey::execute( - input, target_gas, context, is_static, - )), - // Moonbeam specific precompiles : - a if a == hash(2048) => Some(ParachainStakingWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2049) => Some(CrowdloanRewardsWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2050) => { - Some(Erc20BalancesPrecompile::::execute( - input, target_gas, context, is_static, - )) - } - a if a == hash(2051) => Some(DemocracyWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2052) => Some(XtokensWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2053) => Some(RelayEncoderWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2054) => Some(XcmTransactorWrapper::::execute( - input, target_gas, context, is_static, - )), - a if a == hash(2055) => Some(AuthorMappingWrapper::::execute( - input, target_gas, context, is_static, - )), - // If the address matches asset prefix, the we route through the asset precompile set - a if &a.to_fixed_bytes()[0..4] == FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX => { - Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) - } - // If the address matches asset prefix, the we route through the asset precompile set - a if &a.to_fixed_bytes()[0..4] == LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX => { - Erc20AssetsPrecompileSet::::new() - .execute(address, input, target_gas, context, is_static) - } - _ => None, - } - } - fn is_precompile(&self, address: H160) -> bool { - Self::used_addresses().any(|x| x == R::AddressMapping::into_account_id(address)) - || Erc20AssetsPrecompileSet::::new() - .is_precompile(address) - || Erc20AssetsPrecompileSet::::new() - .is_precompile(address) - } -} - -fn hash(a: u64) -> H160 { - H160::from_low_u64_be(a) -} +pub type MoonriverPrecompiles = PrecompileSetBuilder< + R, + ( + // Skip precompiles if out of range. + PrecompilesInRangeInclusive< + (AddressU64<1>, AddressU64<4095>), + ( + // Ethereum precompiles: + // We allow DELEGATECALL to stay compliant with Ethereum behavior. + PrecompileAt, ECRecover, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Sha256, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Ripemd160, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Identity, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Modexp, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Add, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Mul, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Bn128Pairing, ForbidRecursion, AllowDelegateCall>, + PrecompileAt, Blake2F, ForbidRecursion, AllowDelegateCall>, + // Non-Moonbeam specific nor Ethereum precompiles : + PrecompileAt, Sha3FIPS256>, + PrecompileAt, Dispatch>, + PrecompileAt, ECRecoverPublicKey>, + // Moonbeam specific precompiles: + PrecompileAt, ParachainStakingWrapper>, + PrecompileAt, CrowdloanRewardsWrapper>, + PrecompileAt, Erc20BalancesPrecompile>, + PrecompileAt, DemocracyWrapper>, + PrecompileAt, XtokensWrapper>, + PrecompileAt, RelayEncoderWrapper>, + PrecompileAt, XcmTransactorWrapper>, + PrecompileAt, AuthorMappingWrapper>, + PrecompileAt, BatchPrecompile, LimitRecursionTo<2>>, + ), + >, + // Prefixed precompile sets (XC20) + PrecompileSetStartingWith< + ForeignAssetPrefix, + Erc20AssetsPrecompileSet, + >, + PrecompileSetStartingWith< + LocalAssetPrefix, + Erc20AssetsPrecompileSet, + >, + ), +>; diff --git a/runtime/moonriver/src/xcm_config.rs b/runtime/moonriver/src/xcm_config.rs index b60c0dc4a2..e0220df65b 100644 --- a/runtime/moonriver/src/xcm_config.rs +++ b/runtime/moonriver/src/xcm_config.rs @@ -19,11 +19,11 @@ use super::{ AccountId, AssetId, AssetManager, Assets, Balance, Balances, Call, DealWithFees, Event, - LocalAssets, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, Treasury, - WeightToFee, XcmpQueue, FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, + LocalAssets, Origin, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, Treasury, XcmpQueue, + FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, }; -use pallet_evm_precompile_assets_erc20::AccountIdAssetIdConversion; +use pallet_evm_precompileset_assets_erc20::AccountIdAssetIdConversion; use sp_runtime::traits::Hash as THash; use frame_support::{ @@ -267,13 +267,20 @@ impl xcm_executor::Config for XcmExecutorConfig { // When we receive a non-reserve asset, we use AssetManager to fetch how many // units per second we should charge type Trader = ( - UsingComponents>, + UsingComponents< + ::WeightToFee, + SelfReserve, + AccountId, + Balances, + DealWithFees, + >, FirstAssetTrader, ); type ResponseHandler = PolkadotXcm; type SubscriptionService = PolkadotXcm; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; + type CallDispatcher = Call; } type XcmExecutor = xcm_executor::XcmExecutor; @@ -442,8 +449,8 @@ parameter_types! { } parameter_type_with_key! { - pub ParachainMinFee: |_location: MultiLocation| -> u128 { - u128::MAX + pub ParachainMinFee: |_location: MultiLocation| -> Option { + Some(u128::MAX) }; } @@ -501,7 +508,7 @@ impl XcmTransact for Transactors { } } -impl xcm_transactor::Config for Runtime { +impl pallet_xcm_transactor::Config for Runtime { type Event = Event; type Balance = Balance; type Transactor = Transactors; @@ -518,5 +525,5 @@ impl xcm_transactor::Config for Runtime { type BaseXcmWeight = BaseXcmWeight; type AssetTransactor = AssetTransactors; type ReserveProvider = AbsoluteAndRelativeReserve; - type WeightInfo = xcm_transactor::weights::SubstrateWeight; + type WeightInfo = pallet_xcm_transactor::weights::SubstrateWeight; } diff --git a/runtime/moonriver/tests/common/mod.rs b/runtime/moonriver/tests/common/mod.rs index 15966930e9..3a037b878d 100644 --- a/runtime/moonriver/tests/common/mod.rs +++ b/runtime/moonriver/tests/common/mod.rs @@ -234,7 +234,7 @@ impl ExtBuilder { .assimilate_storage(&mut t) .unwrap(); - parachain_staking::GenesisConfig:: { + pallet_parachain_staking::GenesisConfig:: { candidates: self.collators, delegations: self.delegations, inflation_config: self.inflation, diff --git a/runtime/moonriver/tests/integration_test.rs b/runtime/moonriver/tests/integration_test.rs index 928421532e..b297d076e1 100644 --- a/runtime/moonriver/tests/integration_test.rs +++ b/runtime/moonriver/tests/integration_test.rs @@ -21,13 +21,13 @@ mod common; use common::*; -use fp_evm::{Context, ExitSucceed, PrecompileOutput}; +use fp_evm::Context; use frame_support::{ assert_noop, assert_ok, dispatch::Dispatchable, traits::{ - fungible::Inspect, fungibles::Inspect as FungiblesInspect, EnsureOrigin, PalletInfo, - StorageInfo, StorageInfoTrait, + fungible::Inspect, fungibles::Inspect as FungiblesInspect, Currency as CurrencyT, + EnsureOrigin, PalletInfo, StorageInfo, StorageInfoTrait, }, weights::{DispatchClass, Weight}, StorageHasher, Twox128, @@ -39,12 +39,15 @@ use moonriver_runtime::{ }; use nimbus_primitives::NimbusId; use pallet_evm::PrecompileSet; -use pallet_evm_precompile_assets_erc20::{ +use pallet_evm_precompile_batch::Action as BatchAction; +use pallet_evm_precompile_crowdloan_rewards::Action as CrowdloanAction; +use pallet_evm_precompile_xtokens::Action as XtokensAction; +use pallet_evm_precompileset_assets_erc20::{ AccountIdAssetIdConversion, Action as AssetAction, SELECTOR_LOG_APPROVAL, SELECTOR_LOG_TRANSFER, }; use pallet_transaction_payment::Multiplier; use parity_scale_codec::Encode; -use precompile_utils::{Address as EvmAddress, EvmDataWriter, LogsBuilder}; +use precompile_utils::{prelude::*, testing::*}; use sha3::{Digest, Keccak256}; use sp_core::{ByteArray, Pair, H160, U256}; use sp_runtime::{ @@ -53,7 +56,6 @@ use sp_runtime::{ }; use xcm::latest::prelude::*; use xcm::{VersionedMultiAssets, VersionedMultiLocation}; -use xtokens_precompiles::Action as XtokensAction; #[test] fn xcmp_queue_controller_origin_is_root() { @@ -272,6 +274,7 @@ fn verify_proxy_type_indices() { assert_eq!(moonriver_runtime::ProxyType::CancelProxy as u8, 4); assert_eq!(moonriver_runtime::ProxyType::Balances as u8, 5); assert_eq!(moonriver_runtime::ProxyType::AuthorMapping as u8, 6); + assert_eq!(moonriver_runtime::ProxyType::IdentityJudgement as u8, 7); } #[test] @@ -299,7 +302,7 @@ fn join_collator_candidates() { 1_000 * MOVR, 2u32 ), - parachain_staking::Error::::CandidateExists + pallet_parachain_staking::Error::::CandidateExists ); assert_noop!( ParachainStaking::join_candidates( @@ -307,7 +310,7 @@ fn join_collator_candidates() { 1_000 * MOVR, 2u32 ), - parachain_staking::Error::::DelegatorExists + pallet_parachain_staking::Error::::DelegatorExists ); assert!(System::events().is_empty()); assert_ok!(ParachainStaking::join_candidates( @@ -317,11 +320,13 @@ fn join_collator_candidates() { )); assert_eq!( last_event(), - Event::ParachainStaking(parachain_staking::Event::JoinedCollatorCandidates { - account: AccountId::from(DAVE), - amount_locked: 1_000 * MOVR, - new_total_amt_locked: 3_100 * MOVR - }) + Event::ParachainStaking( + pallet_parachain_staking::Event::JoinedCollatorCandidates { + account: AccountId::from(DAVE), + amount_locked: 1_000 * MOVR, + new_total_amt_locked: 3_100 * MOVR + } + ) ); let candidates = ParachainStaking::candidate_pool(); assert_eq!(candidates.0[0].owner, AccountId::from(ALICE)); @@ -347,8 +352,8 @@ fn transfer_through_evm_to_stake() { 2u32 ), DispatchError::Module(ModuleError { - index: 10, - error: [2, 0, 0, 0], + index: 20, + error: [8, 0, 0, 0], message: Some("InsufficientBalance") }) ); @@ -417,16 +422,19 @@ fn reward_block_authors() { run_to_block(x, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); } // no rewards doled out yet - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 1_000 * MOVR,); - assert_eq!(Balances::free_balance(AccountId::from(BOB)), 500 * MOVR,); + assert_eq!( + Balances::usable_balance(AccountId::from(ALICE)), + 1_000 * MOVR, + ); + assert_eq!(Balances::usable_balance(AccountId::from(BOB)), 500 * MOVR,); run_to_block(1200, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); // rewards minted and distributed assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 1113666666584000000000, ); assert_eq!( - Balances::free_balance(AccountId::from(BOB)), + Balances::usable_balance(AccountId::from(BOB)), 541333333292000000000, ); }); @@ -462,22 +470,25 @@ fn reward_block_authors_with_parachain_bond_reserved() { run_to_block(x, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); } // no rewards doled out yet - assert_eq!(Balances::free_balance(AccountId::from(ALICE)), 1_000 * MOVR,); - assert_eq!(Balances::free_balance(AccountId::from(BOB)), 500 * MOVR,); - assert_eq!(Balances::free_balance(AccountId::from(CHARLIE)), MOVR,); + assert_eq!( + Balances::usable_balance(AccountId::from(ALICE)), + 1_000 * MOVR, + ); + assert_eq!(Balances::usable_balance(AccountId::from(BOB)), 500 * MOVR,); + assert_eq!(Balances::usable_balance(AccountId::from(CHARLIE)), MOVR,); run_to_block(1200, Some(NimbusId::from_slice(&ALICE_NIMBUS).unwrap())); // rewards minted and distributed assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), + Balances::usable_balance(AccountId::from(ALICE)), 1082693333281650000000, ); assert_eq!( - Balances::free_balance(AccountId::from(BOB)), + Balances::usable_balance(AccountId::from(BOB)), 525841666640825000000, ); // 30% reserved for parachain bond assert_eq!( - Balances::free_balance(AccountId::from(CHARLIE)), + Balances::usable_balance(AccountId::from(CHARLIE)), 47515000000000000000, ); }); @@ -839,71 +850,31 @@ fn is_contributor_via_precompile() { let crowdloan_precompile_address = H160::from_low_u64_be(2049); - // Construct the input data to check if Bob is a contributor - let mut bob_input_data = Vec::::from([0u8; 36]); - bob_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"is_contributor(address)")[0..4]); - bob_input_data[16..36].copy_from_slice(&BOB); - - // Expected result is an EVM boolean false which is 256 bits long. - let mut expected_bytes = Vec::from([0u8; 32]); - expected_bytes[31] = 0; - let expected_false_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - // Assert precompile reports Bob is not a contributor - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &bob_input_data, - None, // target_gas is not necessary right now because consumed none now - &Context { - // This context copied from Sacrifice tests, it's not great. - address: Default::default(), - caller: Default::default(), - apparent_value: U256::zero(), - }, - false, - ), - expected_false_result - ); - - // Construct the input data to check if Charlie is a contributor - let mut charlie_input_data = Vec::::from([0u8; 36]); - charlie_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"is_contributor(address)")[0..4]); - charlie_input_data[16..36].copy_from_slice(&CHARLIE); - - // Expected result is an EVM boolean true which is 256 bits long. - let mut expected_bytes = Vec::from([0u8; 32]); - expected_bytes[31] = 1; - let expected_true_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - - // Assert precompile reports Bob is a nominator - assert_eq!( - Precompiles::new().execute( + EvmDataWriter::new_with_selector(CrowdloanAction::IsContributor) + .write(Address(AccountId::from(BOB).into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(false).build()); + + // Assert precompile reports Charlie is a nominator + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &charlie_input_data, - None, // target_gas is not necessary right now because consumed none now - &Context { - // This context copied from Sacrifice tests, it's not great. - address: Default::default(), - caller: Default::default(), - apparent_value: U256::zero(), - }, - false, - ), - expected_true_result - ); + EvmDataWriter::new_with_selector(CrowdloanAction::IsContributor) + .write(Address(AccountId::from(CHARLIE).into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); }) } @@ -959,42 +930,26 @@ fn reward_info_via_precompile() { let crowdloan_precompile_address = H160::from_low_u64_be(2049); - // Construct the input data to check if Bob is a contributor - let mut charlie_input_data = Vec::::from([0u8; 36]); - charlie_input_data[0..4] - .copy_from_slice(&Keccak256::digest(b"reward_info(address)")[0..4]); - charlie_input_data[16..36].copy_from_slice(&CHARLIE); - let expected_total: U256 = (1_500_000 * MOVR).into(); let expected_claimed: U256 = (450_000 * MOVR).into(); - // Expected result is two EVM u256 false which are 256 bits long. - let mut expected_bytes = Vec::from([0u8; 64]); - expected_total.to_big_endian(&mut expected_bytes[0..32]); - expected_claimed.to_big_endian(&mut expected_bytes[32..64]); - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: expected_bytes, - cost: 1000, - logs: Default::default(), - })); - - // Assert precompile reports Bob is not a contributor - assert_eq!( - Precompiles::new().execute( + // Assert precompile reports correct Charlie reward info. + Precompiles::new() + .prepare_test( + ALICE, crowdloan_precompile_address, - &charlie_input_data, - None, // target_gas is not necessary right now because consumed none now - &Context { - // This context copied from Sacrifice tests, it's not great. - address: Default::default(), - caller: Default::default(), - apparent_value: U256::zero(), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(CrowdloanAction::RewardInfo) + .write(Address(AccountId::from(CHARLIE).into())) + .build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns( + EvmDataWriter::new() + .write(expected_total) + .write(expected_claimed) + .build(), + ); }) } @@ -1097,6 +1052,41 @@ where }); } +#[test] +#[rustfmt::skip] +fn length_fee_is_sensible() { + use sp_runtime::testing::TestXt; + + // tests that length fee is sensible for a few hypothetical transactions + ExtBuilder::default().build().execute_with(|| { + let call = frame_system::Call::remark:: { remark: vec![] }; + let uxt: TestXt<_, ()> = TestXt::new(call, Some((1u64, ()))); + + let calc_fee = |len: u32| -> Balance { + moonriver_runtime::TransactionPayment::query_fee_details(uxt.clone(), len) + .inclusion_fee + .expect("fee should be calculated") + .len_fee + }; + + // editorconfig-checker-disable + // left: cost of length fee, right: size in bytes + // /------------- proportional component: O(N * 1B) + // | /- exponential component: O(N ** 3) + // | | + assert_eq!( 1_000_000_001, calc_fee(1)); + assert_eq!( 10_000_001_000, calc_fee(10)); + assert_eq!( 100_001_000_000, calc_fee(100)); + assert_eq!( 1_001_000_000_000, calc_fee(1_000)); + assert_eq!( 11_000_000_000_000, calc_fee(10_000)); // inflection point + assert_eq!( 1_100_000_000_000_000, calc_fee(100_000)); + assert_eq!( 1_001_000_000_000_000_000, calc_fee(1_000_000)); // one MOVR, ~ 1MB + assert_eq!( 1_000_010_000_000_000_000_000, calc_fee(10_000_000)); + assert_eq!(1_000_000_100_000_000_000_000_000, calc_fee(100_000_000)); + // editorconfig-checker-enable + }); +} + #[test] fn multiplier_can_grow_from_zero() { let minimum_multiplier = moonriver_runtime::MinimumMultiplier::get(); @@ -1243,6 +1233,112 @@ fn refund_ed_0_evm() { }); } +#[test] +fn author_does_not_receive_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * MOVR) + (21_000 * (500 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + // Some block author as seen by pallet-evm. + let author = AccountId::from(>::find_author()); + // Currently the default impl of the evm uses `deposit_into_existing`. + // If we were to use this implementation, and for an author to receive eventual tips, + // the account needs to be somehow initialized, otherwise the deposit would fail. + Balances::make_free_balance_be(&author, 100 * MOVR); + + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * MOVR).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(300 * GIGAWEI), + max_priority_fee_per_gas: Some(U256::from(200 * GIGAWEI)), + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + // Author free balance didn't change. + assert_eq!(Balances::free_balance(author), 100 * MOVR,); + }); +} + +#[test] +fn total_issuance_after_evm_transaction_with_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * MOVR) + (21_000 * (2 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + let issuance_before = ::Currency::total_issuance(); + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * MOVR).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(2 * GIGAWEI), + max_priority_fee_per_gas: Some(U256::from(1 * GIGAWEI)), + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let issuance_after = ::Currency::total_issuance(); + // Fee is 1 GWEI base fee + 1 GWEI tip. + let fee = ((2 * GIGAWEI) * 21_000) as f64; + // 80% was burned. + let expected_burn = (fee * 0.8) as u128; + assert_eq!(issuance_after, issuance_before - expected_burn,); + // 20% was sent to treasury. + let expected_treasury = (fee * 0.2) as u128; + assert_eq!(moonriver_runtime::Treasury::pot(), expected_treasury); + }); +} + +#[test] +fn total_issuance_after_evm_transaction_without_priority_fee() { + ExtBuilder::default() + .with_balances(vec![( + AccountId::from(BOB), + (1 * MOVR) + (21_000 * (2 * GIGAWEI)), + )]) + .build() + .execute_with(|| { + let issuance_before = ::Currency::total_issuance(); + // EVM transfer. + assert_ok!(Call::EVM(pallet_evm::Call::::call { + source: H160::from(BOB), + target: H160::from(ALICE), + input: Vec::new(), + value: (1 * MOVR).into(), + gas_limit: 21_000u64, + max_fee_per_gas: U256::from(1 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let issuance_after = ::Currency::total_issuance(); + // Fee is 1 GWEI base fee. + let fee = ((1 * GIGAWEI) * 21_000) as f64; + // 80% was burned. + let expected_burn = (fee * 0.8) as u128; + assert_eq!(issuance_after, issuance_before - expected_burn,); + // 20% was sent to treasury. + let expected_treasury = (fee * 0.2) as u128; + assert_eq!(moonriver_runtime::Treasury::pot(), expected_treasury); + }); +} + #[test] fn root_can_change_default_xcm_vers() { ExtBuilder::default() @@ -1362,50 +1458,34 @@ fn asset_erc20_precompiles_supply_and_balance() { // Convert the assetId to its corresponding precompile address let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // The expected result for both total supply and balance of is the same, as only Alice - // holds balance - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000 * MOVR)).build(), - cost: 1000, - logs: Default::default(), - })); + // holds balance. - // Access totalSupply through precompile. Important that the context is correct - assert_eq!( - Precompiles::new().execute( + // Access totalSupply through precompile. + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * MOVR)).build()); // Access balanceOf through precompile - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * MOVR)).build()); }); } @@ -1424,67 +1504,40 @@ fn asset_erc20_precompiles_transfer() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for a transfer - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 23516u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Transfer tokens from Aice to Bob, 400 MOVR. - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Transfer) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Transfer) + .write(Address(BOB.into())) .write(U256::from(400 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balanceOf BOB - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(23518u64) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure BOB has 400 MOVR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * MOVR)).build()); }); } @@ -1503,102 +1556,61 @@ fn asset_erc20_precompiles_approve() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 13989u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_APPROVAL, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Aprove Bob for spending 400 MOVR from Alice - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Approve) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Approve) + .write(Address(BOB.into())) .write(U256::from(400 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for transfer_from - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 29006u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(CHARLIE), - EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - ) - .build(), - })); + ) + .expect_cost(14006) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_APPROVAL, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferFrom) - .write(EvmAddress(ALICE.into())) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferFrom) + .write(Address(ALICE.into())) + .write(Address(CHARLIE.into())) .write(U256::from(400 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balance of CHARLIE - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(28967) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(CHARLIE), + EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure CHARLIE has 400 MOVR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + CHARLIE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(CHARLIE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: CHARLIE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * MOVR)).build()); }); } @@ -1617,41 +1629,27 @@ fn asset_erc20_precompiles_mint_burn() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 12821u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::default(), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(1000 * MOVR)).build(), - ) - .build(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Mint 1000 MOVRS to BOB - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Mint) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Mint) + .write(Address(BOB.into())) .write(U256::from(1000 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(12795) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::default(), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(1000 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert the asset has been minted assert_eq!(LocalAssets::total_supply(0u128), 2_000 * MOVR); @@ -1660,39 +1658,25 @@ fn asset_erc20_precompiles_mint_burn() { 1_000 * MOVR ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 12957u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(BOB), - H160::default(), - EvmDataWriter::new().write(U256::from(500 * MOVR)).build(), - ) - .build(), - })); - - // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + // Burn tokens + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Burn) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Burn) + .write(Address(BOB.into())) .write(U256::from(500 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(12987) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(BOB), + H160::default(), + EvmDataWriter::new().write(U256::from(500 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert the asset has been burnt assert_eq!(LocalAssets::total_supply(0u128), 1_500 * MOVR); @@ -1718,33 +1702,20 @@ fn asset_erc20_precompiles_freeze_thaw_account() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6732u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Freeze Account - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Freeze) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::Freeze) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6735) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is frozen assert_eq!( @@ -1752,31 +1723,18 @@ fn asset_erc20_precompiles_freeze_thaw_account() { Err(TokenError::Frozen.into()) ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6731u64, - logs: Default::default(), - })); - // Thaw Account - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Thaw) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::Thaw) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6728) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is not frozen assert!(LocalAssets::can_withdraw(0u128, &AccountId::from(ALICE), 1) @@ -1800,31 +1758,18 @@ fn asset_erc20_precompiles_freeze_thaw_asset() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5589u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Freeze Asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::FreezeAsset).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::FreezeAsset).build(), + ) + .expect_cost(5595) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is frozen assert_eq!( @@ -1832,29 +1777,16 @@ fn asset_erc20_precompiles_freeze_thaw_asset() { Err(TokenError::Frozen.into()) ); - // Expected result for burn - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5593u64, - logs: Default::default(), - })); - // Thaw Asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::ThawAsset).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::ThawAsset).build(), + ) + .expect_cost(5593) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Assert account is not frozen assert!(LocalAssets::can_withdraw(0u128, &AccountId::from(ALICE), 1) @@ -1878,33 +1810,20 @@ fn asset_erc20_precompiles_freeze_transfer_ownership() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 6666u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Transfer ownerhsip of an asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferOwnership) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferOwnership) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(6641) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // No clear way of testing BOB is new owner, other than doing a priviledged function // e.g., transfer_ownership again @@ -1931,35 +1850,22 @@ fn asset_erc20_precompiles_freeze_set_team() { .build() .execute_with(|| { let asset_precompile_address = - Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128).into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 5614u64, - logs: Default::default(), - })); + Runtime::asset_id_to_account(LOCAL_ASSET_PRECOMPILE_ADDRESS_PREFIX, 0u128); // Set Bob as issuer, admin and freezer - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::SetTeam) - .write(EvmAddress(BOB.into())) - .write(EvmAddress(BOB.into())) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::SetTeam) + .write(Address(BOB.into())) + .write(Address(BOB.into())) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(5573) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(true).build()); // Bob should be able to mint, freeze, and thaw assert_ok!(LocalAssets::mint( @@ -2008,54 +1914,34 @@ fn xcm_asset_erc20_precompiles_supply_and_balance() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); + ); // Assert the asset has been created with the correct supply assert_eq!(Assets::total_supply(relay_asset_id), 1_000 * MOVR); - // The expected result for both total supply and balance of is the same, as only Alice - // holds balance - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(1000 * MOVR)).build(), - cost: 1000, - logs: Default::default(), - })); - // Access totalSupply through precompile. Important that the context is correct - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + EvmDataWriter::new_with_selector(AssetAction::TotalSupply).build(), + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * MOVR)).build()); // Access balanceOf through precompile - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(ALICE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(ALICE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(1000 * MOVR)).build()); }); } @@ -2086,68 +1972,40 @@ fn xcm_asset_erc20_precompiles_transfer() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); - - // Expected result for a transfer - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 23516u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - ) - .build(), - })); + ); // Transfer tokens from Aice to Bob, 400 MOVR. - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Transfer) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Transfer) + .write(Address(BOB.into())) .write(U256::from(400 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balanceOf BOB - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(23518) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure BOB has 400 MOVR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(BOB.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * MOVR)).build()); }); } @@ -2178,103 +2036,61 @@ fn xcm_asset_erc20_precompiles_approve() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); - - // Expected result for approve - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 13989u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_APPROVAL, - H160::from(ALICE), - H160::from(BOB), - EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - ) - .build(), - })); + ); // Aprove Bob for spending 400 MOVR from Alice - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::Approve) - .write(EvmAddress(BOB.into())) + EvmDataWriter::new_with_selector(AssetAction::Approve) + .write(Address(BOB.into())) .write(U256::from(400 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for transfer_from - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(true).build(), - cost: 29006u64, - logs: LogsBuilder::new(asset_precompile_address) - .log3( - SELECTOR_LOG_TRANSFER, - H160::from(ALICE), - H160::from(CHARLIE), - EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - ) - .build(), - })); + ) + .expect_cost(14006) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_APPROVAL, + H160::from(ALICE), + H160::from(BOB), + EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Transfer tokens from Alice to Charlie by using BOB as origin - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + BOB, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::TransferFrom) - .write(EvmAddress(ALICE.into())) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::TransferFrom) + .write(Address(ALICE.into())) + .write(Address(CHARLIE.into())) .write(U256::from(400 * MOVR)) .build(), - None, - &Context { - address: asset_precompile_address, - caller: BOB.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); - - // Expected result for balance of CHARLIE - let expected_result = Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - output: EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), - cost: 1000, - logs: Default::default(), - })); + ) + .expect_cost(28967) + .expect_log(log3( + asset_precompile_address, + SELECTOR_LOG_TRANSFER, + H160::from(ALICE), + H160::from(CHARLIE), + EvmDataWriter::new().write(U256::from(400 * MOVR)).build(), + )) + .execute_returns(EvmDataWriter::new().write(true).build()); // Make sure CHARLIE has 400 MOVR - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + CHARLIE, asset_precompile_address, - &EvmDataWriter::new_with_selector(AssetAction::BalanceOf) - .write(EvmAddress(CHARLIE.into())) + EvmDataWriter::new_with_selector(AssetAction::BalanceOf) + .write(Address(CHARLIE.into())) .build(), - None, - &Context { - address: asset_precompile_address, - caller: CHARLIE.into(), - apparent_value: From::from(0), - }, - false, - ), - expected_result - ); + ) + .expect_cost(1000) + .expect_no_logs() + .execute_returns(EvmDataWriter::new().write(U256::from(400 * MOVR)).build()); }); } @@ -2309,8 +2125,7 @@ fn xtokens_precompiles_transfer() { let asset_precompile_address = Runtime::asset_id_to_account( FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, relay_asset_id, - ) - .into(); + ); // Alice has 1000 tokens. She should be able to send through precompile let destination = MultiLocation::new( @@ -2322,30 +2137,20 @@ fn xtokens_precompiles_transfer() { ); // We use the address of the asset as an identifier of the asset we want to transferS - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::Transfer) - .write(EvmAddress(asset_precompile_address)) + EvmDataWriter::new_with_selector(XtokensAction::Transfer) + .write(Address(asset_precompile_address.into())) .write(U256::from(500_000_000_000_000u128)) .write(destination.clone()) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 20000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(20000) + .expect_no_logs() + .execute_returns(vec![]) }) } @@ -2383,31 +2188,21 @@ fn xtokens_precompiles_transfer_multiasset() { // This time we transfer it through TransferMultiAsset // Instead of the address, we encode directly the multilocation referencing the asset - assert_eq!( - Precompiles::new().execute( + Precompiles::new() + .prepare_test( + ALICE, xtokens_precompile_address, - &EvmDataWriter::new_with_selector(XtokensAction::TransferMultiAsset) + EvmDataWriter::new_with_selector(XtokensAction::TransferMultiAsset) // We want to transfer the relay token .write(MultiLocation::parent()) .write(U256::from(500_000_000_000_000u128)) .write(destination) .write(U256::from(4000000)) .build(), - None, - &Context { - address: xtokens_precompile_address, - caller: ALICE.into(), - apparent_value: From::from(0), - }, - false, - ), - Some(Ok(PrecompileOutput { - exit_status: ExitSucceed::Returned, - cost: 20000, - output: vec![], - logs: vec![] - })) - ); + ) + .expect_cost(20000) + .expect_no_logs() + .execute_returns(vec![]); }) } @@ -2487,8 +2282,15 @@ fn transactor_cannot_use_more_than_max_weight() { Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, - 1, - 20000 + 20000, + None + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 )); assert_noop!( @@ -2501,7 +2303,7 @@ fn transactor_cannot_use_more_than_max_weight() { 17000, vec![], ), - xcm_transactor::Error::::MaxWeightTransactReached + pallet_xcm_transactor::Error::::MaxWeightTransactReached ); assert_noop!( XcmTransactor::transact_through_derivative( @@ -2513,7 +2315,122 @@ fn transactor_cannot_use_more_than_max_weight() { 17000, vec![], ), - xcm_transactor::Error::::MaxWeightTransactReached + pallet_xcm_transactor::Error::::MaxWeightTransactReached + ); + }) +} + +#[test] +fn transact_through_signed_mult_not_enabled() { + ExtBuilder::default() + .with_balances(vec![ + (AccountId::from(ALICE), 2_000 * MOVR), + (AccountId::from(BOB), 1_000 * MOVR), + ]) + .with_xcm_assets(vec![XcmAssetInitialization { + asset_type: AssetType::Xcm(MultiLocation::parent()), + metadata: AssetRegistrarMetadata { + name: b"RelayToken".to_vec(), + symbol: b"Relay".to_vec(), + decimals: 12, + is_frozen: false, + }, + balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], + is_sufficient: true, + }]) + .build() + .execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 + 3000, + 20000, + // lets say 1000 per instruction + Some(4000) + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + assert_noop!( + Call::XcmTransactor( + pallet_xcm_transactor::Call::::transact_through_signed_multilocation { + dest: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + fee_location: Box::new(xcm::VersionedMultiLocation::V1( + MultiLocation::parent() + )), + dest_weight: 11000, + call: vec![], + } + ) + .dispatch(::Origin::signed( + AccountId::from(ALICE) + )), + frame_system::Error::::CallFiltered + ); + }) +} + +#[test] +fn transact_through_signed_not_enabled() { + ExtBuilder::default() + .with_balances(vec![ + (AccountId::from(ALICE), 2_000 * MOVR), + (AccountId::from(BOB), 1_000 * MOVR), + ]) + .with_xcm_assets(vec![XcmAssetInitialization { + asset_type: AssetType::Xcm(MultiLocation::parent()), + metadata: AssetRegistrarMetadata { + name: b"RelayToken".to_vec(), + symbol: b"Relay".to_vec(), + decimals: 12, + is_frozen: false, + }, + balances: vec![(AccountId::from(ALICE), 1_000_000_000_000_000)], + is_sufficient: true, + }]) + .build() + .execute_with(|| { + let source_location = AssetType::Xcm(MultiLocation::parent()); + let source_id: moonriver_runtime::AssetId = source_location.clone().into(); + + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 + 3000, + 20000, + // lets say 1000 per instruction + Some(4000) + )); + + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + root_origin(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 + )); + + assert_noop!( + Call::XcmTransactor( + pallet_xcm_transactor::Call::::transact_through_signed { + dest: Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + fee_currency_id: CurrencyId::ForeignAsset(source_id), + dest_weight: 11000, + call: vec![], + } + ) + .dispatch(::Origin::signed( + AccountId::from(ALICE) + )), + frame_system::Error::::CallFiltered ); }) } @@ -2573,7 +2490,7 @@ fn precompile_existence() { let precompiles = Precompiles::new(); let precompile_addresses: std::collections::BTreeSet<_> = vec![ 1, 2, 3, 4, 5, 6, 7, 8, 9, 1024, 1025, 1026, 2048, 2049, 2050, 2051, 2052, 2053, 2054, - 2055, + 2055, 2056, ] .into_iter() .map(H160::from_low_u64_be) @@ -2591,17 +2508,14 @@ fn precompile_existence() { assert!( precompiles - .execute( + .execute(&mut MockHandle::new( address, - &vec![], - None, - &Context { + Context { address, caller: H160::zero(), apparent_value: U256::zero() - }, - false - ) + } + ),) .is_some(), "execute({},..) should return Some(_)", i @@ -2615,17 +2529,14 @@ fn precompile_existence() { assert!( precompiles - .execute( + .execute(&mut MockHandle::new( address, - &vec![], - None, - &Context { + Context { address, caller: H160::zero(), apparent_value: U256::zero() - }, - false - ) + } + ),) .is_none(), "execute({},..) should return None", i @@ -2644,3 +2555,81 @@ fn base_fee_should_default_to_associate_type_value() { ); }); } + +#[test] +fn evm_revert_substrate_events() { + ExtBuilder::default() + .with_balances(vec![(AccountId::from(ALICE), 1_000 * MOVR)]) + .build() + .execute_with(|| { + let batch_precompile_address = H160::from_low_u64_be(2056); + + // Batch a transfer followed by an invalid call to batch. + // Thus BatchAll will revert the transfer. + assert_ok!(Call::EVM(pallet_evm::Call::call { + source: ALICE.into(), + target: batch_precompile_address, + input: EvmDataWriter::new_with_selector(BatchAction::BatchAll) + .write(vec![Address(BOB.into()), Address(batch_precompile_address)]) + .write(vec![U256::from(1 * MOVR), U256::zero()]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + value: U256::zero(), // No value sent in EVM + gas_limit: 500_000, + max_fee_per_gas: U256::from(1 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let transfer_count = System::events() + .iter() + .filter(|r| match r.event { + Event::Balances(pallet_balances::Event::Transfer { .. }) => true, + _ => false, + }) + .count(); + + assert_eq!(transfer_count, 0, "there should be no transfer event"); + }); +} + +#[test] +fn evm_success_keeps_substrate_events() { + ExtBuilder::default() + .with_balances(vec![(AccountId::from(ALICE), 1_000 * MOVR)]) + .build() + .execute_with(|| { + let batch_precompile_address = H160::from_low_u64_be(2056); + + assert_ok!(Call::EVM(pallet_evm::Call::call { + source: ALICE.into(), + target: batch_precompile_address, + input: EvmDataWriter::new_with_selector(BatchAction::BatchAll) + .write(vec![Address(BOB.into())]) + .write(vec![U256::from(1 * MOVR)]) + .write::>(vec![]) + .write::>(vec![]) + .build(), + value: U256::zero(), // No value sent in EVM + gas_limit: 500_000, + max_fee_per_gas: U256::from(1 * GIGAWEI), + max_priority_fee_per_gas: None, + nonce: Some(U256::from(0)), + access_list: Vec::new(), + }) + .dispatch(::Origin::root())); + + let transfer_count = System::events() + .iter() + .filter(|r| match r.event { + Event::Balances(pallet_balances::Event::Transfer { .. }) => true, + _ => false, + }) + .count(); + + assert_eq!(transfer_count, 1, "there should be 1 transfer event"); + }); +} diff --git a/runtime/moonriver/tests/runtime_apis.rs b/runtime/moonriver/tests/runtime_apis.rs index 0d5a5f4f03..90016d63e5 100644 --- a/runtime/moonriver/tests/runtime_apis.rs +++ b/runtime/moonriver/tests/runtime_apis.rs @@ -54,7 +54,7 @@ fn ethereum_runtime_rpc_api_account_basic() { #[test] fn ethereum_runtime_rpc_api_gas_price() { ExtBuilder::default().build().execute_with(|| { - assert_eq!(Runtime::gas_price(), FixedGasPrice::min_gas_price()); + assert_eq!(Runtime::gas_price(), FixedGasPrice::min_gas_price().0); }); } diff --git a/runtime/moonriver/tests/xcm_mock/mod.rs b/runtime/moonriver/tests/xcm_mock/mod.rs index 334dbeb46a..bf6aacca7c 100644 --- a/runtime/moonriver/tests/xcm_mock/mod.rs +++ b/runtime/moonriver/tests/xcm_mock/mod.rs @@ -19,7 +19,7 @@ pub mod relay_chain; pub mod statemine_like; use cumulus_primitives_core::ParaId; -use polkadot_parachain::primitives::AccountIdConversion; +use sp_runtime::traits::AccountIdConversion; use sp_runtime::AccountId32; use xcm_simulator::{decl_test_network, decl_test_parachain, decl_test_relay_chain}; @@ -30,7 +30,7 @@ pub const PARAALICE: [u8; 20] = [1u8; 20]; pub const RELAYALICE: AccountId32 = AccountId32::new([0u8; 32]); pub fn para_a_account() -> AccountId32 { - ParaId::from(1).into_account() + ParaId::from(1).into_account_truncating() } pub fn evm_account() -> H160 { @@ -196,4 +196,4 @@ pub type AssetManager = pallet_asset_manager::Pallet; pub type XTokens = orml_xtokens::Pallet; pub type RelayBalances = pallet_balances::Pallet; pub type ParaBalances = pallet_balances::Pallet; -pub type XcmTransactor = xcm_transactor::Pallet; +pub type XcmTransactor = pallet_xcm_transactor::Pallet; diff --git a/runtime/moonriver/tests/xcm_mock/parachain.rs b/runtime/moonriver/tests/xcm_mock/parachain.rs index 76aa2cd85d..fbdff108c1 100644 --- a/runtime/moonriver/tests/xcm_mock/parachain.rs +++ b/runtime/moonriver/tests/xcm_mock/parachain.rs @@ -324,6 +324,7 @@ parameter_types! { ) }; } + pub struct XcmConfig; impl Config for XcmConfig { type Call = Call; @@ -350,6 +351,7 @@ impl Config for XcmConfig { type SubscriptionService = PolkadotXcm; type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; + type CallDispatcher = Call; } impl cumulus_pallet_xcm::Config for Runtime { @@ -406,8 +408,8 @@ parameter_types! { } parameter_type_with_key! { - pub ParachainMinFee: |_location: MultiLocation| -> u128 { - u128::MAX + pub ParachainMinFee: |_location: MultiLocation| -> Option { + Some(u128::MAX) }; } @@ -802,8 +804,8 @@ impl pallet_asset_manager::LocalAssetIdCreator for LocalAssetIdCreator // Our means of converting a creator to an assetId // We basically hash (local asset counter) let mut result: [u8; 16] = [0u8; 16]; - let to_hash = local_asset_counter.encode(); - let hash: H256 = to_hash.using_encoded(::Hashing::hash); + let hash: H256 = + local_asset_counter.using_encoded(::Hashing::hash); result.copy_from_slice(&hash.as_fixed_bytes()[0..16]); u128::from_le_bytes(result) } @@ -825,7 +827,7 @@ impl pallet_asset_manager::Config for Runtime { type WeightInfo = (); } -impl xcm_transactor::Config for Runtime { +impl pallet_xcm_transactor::Config for Runtime { type Event = Event; type Balance = Balance; type Transactor = MockTransactors; @@ -855,6 +857,12 @@ impl pallet_timestamp::Config for Runtime { type WeightInfo = (); } +use sp_core::U256; + +parameter_types! { + pub BlockGasLimit: U256 = U256::max_value(); +} + impl pallet_evm::Config for Runtime { type FeeCalculator = (); type GasWeightMapping = (); @@ -862,7 +870,7 @@ impl pallet_evm::Config for Runtime { type CallOrigin = pallet_evm::EnsureAddressRoot; type WithdrawOrigin = pallet_evm::EnsureAddressNever; - type AddressMapping = runtime_common::IntoAddressMapping; + type AddressMapping = moonbeam_runtime_common::IntoAddressMapping; type Currency = Balances; type Runner = pallet_evm::runner::stack::Runner; @@ -870,11 +878,10 @@ impl pallet_evm::Config for Runtime { type PrecompilesType = (); type PrecompilesValue = (); type ChainId = (); - type BlockGasLimit = (); + type BlockGasLimit = BlockGasLimit; type OnChargeTransaction = (); type BlockHashMapping = pallet_evm::SubstrateBlockHashMapping; type FindAuthor = (); - type WeightInfo = (); } pub struct NormalFilter; @@ -928,6 +935,11 @@ impl xcm_primitives::UtilityEncodeCall for MockTransactors { } } +impl pallet_ethereum::Config for Runtime { + type Event = Event; + type StateRoot = pallet_ethereum::IntermediateStateRoot; +} + type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; type Block = frame_system::mocking::MockBlock; @@ -947,12 +959,13 @@ construct_runtime!( CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin}, XTokens: orml_xtokens::{Pallet, Call, Storage, Event}, AssetManager: pallet_asset_manager::{Pallet, Call, Storage, Event}, - XcmTransactor: xcm_transactor::{Pallet, Call, Storage, Event}, + XcmTransactor: pallet_xcm_transactor::{Pallet, Call, Storage, Event}, Treasury: pallet_treasury::{Pallet, Storage, Config, Event, Call}, LocalAssets: pallet_assets::::{Pallet, Call, Storage, Event}, Timestamp: pallet_timestamp::{Pallet, Call, Storage}, EVM: pallet_evm::{Pallet, Call, Storage, Config, Event}, + Ethereum: pallet_ethereum::{Pallet, Call, Storage, Event, Origin, Config}, } ); diff --git a/runtime/moonriver/tests/xcm_mock/relay_chain.rs b/runtime/moonriver/tests/xcm_mock/relay_chain.rs index 29d4986a85..bc4f35e5d3 100644 --- a/runtime/moonriver/tests/xcm_mock/relay_chain.rs +++ b/runtime/moonriver/tests/xcm_mock/relay_chain.rs @@ -28,7 +28,7 @@ use polkadot_parachain::primitives::Id as ParaId; use polkadot_runtime_parachains::{configuration, origin, shared, ump}; use xcm::latest::prelude::*; use xcm_builder::{ - AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, + Account32Hash, AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, AllowTopLevelPaidExecutionFrom, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, CurrencyAdapter as XcmCurrencyAdapter, FixedRateOfFungible, FixedWeightBounds, IsConcrete, LocationInverter, SignedAccountId32AsNative, @@ -111,6 +111,9 @@ parameter_types! { pub type SovereignAccountOf = ( ChildParachainConvertsVia, AccountId32Aliases, + // Not enabled in the relay per se, but we enable it to test + // the transact_through_signed extrinsic + Account32Hash, ); pub type LocalAssetTransactor = @@ -129,9 +132,67 @@ parameter_types! { pub const MaxInstructions: u32 = 100; } +use frame_support::ensure; +use frame_support::traits::Contains; +use sp_std::marker::PhantomData; +use xcm_executor::traits::ShouldExecute; +/// Allows execution from `origin` if it is contained in `T` (i.e. `T::Contains(origin)`) taking +/// payments into account. +/// +/// Only allows for `DescendOrigin` + `WithdrawAsset`, + `BuyExecution` +pub struct AllowDescendOriginFromLocal(PhantomData); +impl> ShouldExecute for AllowDescendOriginFromLocal { + fn should_execute( + origin: &MultiLocation, + message: &mut Xcm, + max_weight: Weight, + _weight_credit: &mut Weight, + ) -> Result<(), ()> { + log::trace!( + target: "xcm::barriers", + "AllowTopLevelPaidExecutionFromLocal origin: + {:?}, message: {:?}, max_weight: {:?}, weight_credit: {:?}", + origin, message, max_weight, _weight_credit, + ); + ensure!(T::contains(origin), ()); + let mut iter = message.0.iter_mut(); + let mut i = iter.next().ok_or(())?; + match i { + DescendOrigin(..) => (), + _ => return Err(()), + } + + i = iter.next().ok_or(())?; + match i { + WithdrawAsset(..) => (), + _ => return Err(()), + } + + i = iter.next().ok_or(())?; + match i { + BuyExecution { + weight_limit: Limited(ref mut weight), + .. + } if *weight >= max_weight => { + *weight = max_weight; + Ok(()) + } + BuyExecution { + ref mut weight_limit, + .. + } if weight_limit == &Unlimited => { + *weight_limit = Limited(max_weight); + Ok(()) + } + _ => Err(()), + } + } +} + pub type XcmRouter = super::RelayChainXcmRouter; pub type Barrier = ( TakeWeightCredit, + AllowDescendOriginFromLocal, AllowTopLevelPaidExecutionFrom, // Expected responses are OK. AllowKnownQueryResponses, @@ -155,6 +216,7 @@ impl Config for XcmConfig { type AssetTrap = XcmPallet; type AssetClaims = XcmPallet; type SubscriptionService = XcmPallet; + type CallDispatcher = Call; } pub type LocalOriginToLocation = SignedToAccountId32; diff --git a/runtime/moonriver/tests/xcm_mock/statemine_like.rs b/runtime/moonriver/tests/xcm_mock/statemine_like.rs index 8ba0a2f143..205893579b 100644 --- a/runtime/moonriver/tests/xcm_mock/statemine_like.rs +++ b/runtime/moonriver/tests/xcm_mock/statemine_like.rs @@ -263,6 +263,7 @@ impl Config for XcmConfig { type AssetTrap = PolkadotXcm; type AssetClaims = PolkadotXcm; type SubscriptionService = PolkadotXcm; + type CallDispatcher = Call; } /// No local origins on this chain are allowed to dispatch XCM sends/executions. diff --git a/runtime/moonriver/tests/xcm_tests.rs b/runtime/moonriver/tests/xcm_tests.rs index 59c48d59e0..1cdf3e695f 100644 --- a/runtime/moonriver/tests/xcm_tests.rs +++ b/runtime/moonriver/tests/xcm_tests.rs @@ -1003,8 +1003,14 @@ fn transact_through_derivative_multilocation() { Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000000000, + None + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1 * WEIGHT_PER_SECOND as u128, - 20000000000 )); }); @@ -1144,9 +1150,16 @@ fn transact_through_sovereign() { assert_ok!(XcmTransactor::set_transact_info( parachain::Origin::root(), Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 3000, + 20000000000, + None + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), 1 * WEIGHT_PER_SECOND as u128, - 20000000000 )); }); @@ -2181,6 +2194,104 @@ fn send_para_a_local_asset_to_para_b_and_send_it_back_together_with_some_dev() { }); } +#[test] +fn transact_through_signed_multilocation() { + MockNet::reset(); + let mut ancestry = MultiLocation::parent(); + + ParaA::execute_with(|| { + // Root can set transact info + assert_ok!(XcmTransactor::set_transact_info( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // Relay charges 1000 for every instruction, and we have 3, so 3000 + 3000, + 20000000000, + // 4 instructions in transact through signed + Some(4000) + )); + // Root can set transact info + assert_ok!(XcmTransactor::set_fee_per_second( + parachain::Origin::root(), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + 1 * WEIGHT_PER_SECOND as u128, + )); + ancestry = parachain::Ancestry::get(); + }); + + // Let's construct the Junction that we will append with DescendOrigin + let signed_origin: Junctions = X1(AccountKey20 { + network: NetworkId::Any, + key: PARAALICE, + }); + + let mut descend_origin_multilocation = parachain::SelfLocation::get(); + descend_origin_multilocation + .append_with(signed_origin) + .unwrap(); + + // To convert it to what the relay will see instead of us + descend_origin_multilocation + .reanchor(&MultiLocation::parent(), &ancestry) + .unwrap(); + + let derived = xcm_builder::Account32Hash::< + relay_chain::KusamaNetwork, + relay_chain::AccountId, + >::convert_ref(descend_origin_multilocation) + .unwrap(); + + Relay::execute_with(|| { + // free execution, full amount received + assert_ok!(RelayBalances::transfer( + relay_chain::Origin::signed(RELAYALICE), + derived.clone(), + 4000004100u128, + )); + // derived account has all funds + assert!(RelayBalances::free_balance(&derived) == 4000004100); + // sovereign account has 0 funds + assert!(RelayBalances::free_balance(¶_a_account()) == 0); + }); + + // Encode the call. Balances transact to para_a_account + // First index + let mut encoded: Vec = Vec::new(); + let index = ::PalletInfo::index::< + relay_chain::Balances, + >() + .unwrap() as u8; + + encoded.push(index); + + // Then call bytes + let mut call_bytes = pallet_balances::Call::::transfer { + // 100 to sovereign + dest: para_a_account(), + value: 100u32.into(), + } + .encode(); + encoded.append(&mut call_bytes); + + ParaA::execute_with(|| { + assert_ok!(XcmTransactor::transact_through_signed_multilocation( + parachain::Origin::signed(PARAALICE.into()), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + Box::new(xcm::VersionedMultiLocation::V1(MultiLocation::parent())), + // 4000000000 for transfer + 4000 for XCM + // 1-1 to fee + 4000000000, + encoded, + )); + }); + + Relay::execute_with(|| { + assert!(RelayBalances::free_balance(¶_a_account()) == 100); + + assert!(RelayBalances::free_balance(&derived) == 0); + }); +} + use parity_scale_codec::{Decode, Encode}; use sp_io::hashing::blake2_256; diff --git a/runtime/relay-encoder/Cargo.toml b/runtime/relay-encoder/Cargo.toml index 70610b2b4e..9b789f06a8 100644 --- a/runtime/relay-encoder/Cargo.toml +++ b/runtime/relay-encoder/Cargo.toml @@ -10,38 +10,38 @@ version = "0.1.0" [dependencies] # Moonbeam -relay-encoder-precompiles = { path = "../../precompiles/relay-encoder/", default-features = false } +pallet-evm-precompile-relay-encoder = { path = "../../precompiles/relay-encoder/", default-features = false } xcm-primitives = { path = "../../primitives/xcm", default-features = false } # Substrate -frame-system = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -pallet-staking = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +pallet-staking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } parity-scale-codec = { version = "3.0.0", default-features = false, features = [ "derive" ] } -sp-runtime = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } -sp-std = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23", default-features = false } # Cumulus -cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.19", default-features = false } +cumulus-primitives-core = { git = "https://github.com/purestake/cumulus", branch = "moonbeam-polkadot-v0.9.23", default-features = false } [dev-dependencies] -frame-support = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-proxy = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } -pallet-utility = { git = "https://github.com/purestake/substrate", branch = "moonbeam-polkadot-v0.9.19" } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-proxy = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } +pallet-utility = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.23" } -kusama-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -polkadot-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -rococo-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } -westend-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.19" } +kusama-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +polkadot-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +rococo-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } +westend-runtime = { git = "https://github.com/purestake/polkadot", branch = "moonbeam-polkadot-v0.9.23" } [features] default = [ "std" ] std = [ "cumulus-primitives-core/std", "frame-system/std", + "pallet-evm-precompile-relay-encoder/std", "pallet-staking/std", "parity-scale-codec/std", "parity-scale-codec/std", - "relay-encoder-precompiles/std", "sp-runtime/std", "sp-std/std", "xcm-primitives/std", diff --git a/runtime/relay-encoder/src/kusama.rs b/runtime/relay-encoder/src/kusama.rs index 5e8567f557..09aeca625a 100644 --- a/runtime/relay-encoder/src/kusama.rs +++ b/runtime/relay-encoder/src/kusama.rs @@ -83,46 +83,46 @@ impl xcm_primitives::UtilityEncodeCall for KusamaEncoder { } } -impl relay_encoder_precompiles::StakeEncodeCall for KusamaEncoder { - fn encode_call(call: relay_encoder_precompiles::AvailableStakeCalls) -> Vec { +impl pallet_evm_precompile_relay_encoder::StakeEncodeCall for KusamaEncoder { + fn encode_call(call: pallet_evm_precompile_relay_encoder::AvailableStakeCalls) -> Vec { match call { - relay_encoder_precompiles::AvailableStakeCalls::Bond(a, b, c) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Bond(a, b, c) => { RelayCall::Stake(StakeCall::Bond(a.into(), b, c)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::BondExtra(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::BondExtra(a) => { RelayCall::Stake(StakeCall::BondExtra(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Unbond(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Unbond(a) => { RelayCall::Stake(StakeCall::Unbond(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::WithdrawUnbonded(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::WithdrawUnbonded(a) => { RelayCall::Stake(StakeCall::WithdrawUnbonded(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Validate(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Validate(a) => { RelayCall::Stake(StakeCall::Validate(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Chill => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill => { RelayCall::Stake(StakeCall::Chill).encode() } - relay_encoder_precompiles::AvailableStakeCalls::SetPayee(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetPayee(a) => { RelayCall::Stake(StakeCall::SetPayee(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::SetController(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetController(a) => { RelayCall::Stake(StakeCall::SetController(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Rebond(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Rebond(a) => { RelayCall::Stake(StakeCall::Rebond(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Nominate(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Nominate(a) => { let nominated: Vec< as StaticLookup>::Source> = a.iter().map(|add| (*add).clone().into()).collect(); @@ -137,7 +137,7 @@ mod tests { use super::*; use crate::kusama::KusamaEncoder; use frame_support::traits::PalletInfo; - use relay_encoder_precompiles::StakeEncodeCall; + use pallet_evm_precompile_relay_encoder::StakeEncodeCall; use sp_runtime::Perbill; #[test] @@ -160,7 +160,7 @@ mod tests { expected_encoded.append(&mut expected); let call_bytes = ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Chill, + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill, ); expected_encoded.append(&mut expected); @@ -195,7 +195,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Bond( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Bond( relay_account.into(), 100u32.into(), pallet_staking::RewardDestination::Controller @@ -222,7 +222,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::BondExtra(100u32.into(),) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::BondExtra(100u32.into(),) ), expected_encoded ); @@ -245,7 +245,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Unbond(100u32.into(),) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Unbond(100u32.into(),) ), expected_encoded ); @@ -268,7 +268,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::WithdrawUnbonded(100u32,) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::WithdrawUnbonded(100u32,) ), expected_encoded ); @@ -296,7 +296,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Validate(validator_prefs) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Validate(validator_prefs) ), expected_encoded ); @@ -320,9 +320,9 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Nominate( - vec![relay_account.into()] - ) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Nominate(vec![ + relay_account.into() + ]) ), expected_encoded ); @@ -342,7 +342,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Chill + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill ), expected_encoded ); @@ -366,7 +366,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::SetPayee( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetPayee( pallet_staking::RewardDestination::Controller ) ), @@ -393,7 +393,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::SetController( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetController( relay_account.clone().into() ) ), @@ -418,7 +418,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Rebond(100u32.into()) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Rebond(100u32.into()) ), expected_encoded ); diff --git a/runtime/relay-encoder/src/polkadot.rs b/runtime/relay-encoder/src/polkadot.rs index 48101ee4aa..ca326b1de9 100644 --- a/runtime/relay-encoder/src/polkadot.rs +++ b/runtime/relay-encoder/src/polkadot.rs @@ -85,46 +85,46 @@ impl xcm_primitives::UtilityEncodeCall for PolkadotEncoder { } } -impl relay_encoder_precompiles::StakeEncodeCall for PolkadotEncoder { - fn encode_call(call: relay_encoder_precompiles::AvailableStakeCalls) -> Vec { +impl pallet_evm_precompile_relay_encoder::StakeEncodeCall for PolkadotEncoder { + fn encode_call(call: pallet_evm_precompile_relay_encoder::AvailableStakeCalls) -> Vec { match call { - relay_encoder_precompiles::AvailableStakeCalls::Bond(a, b, c) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Bond(a, b, c) => { RelayCall::Stake(StakeCall::Bond(a.into(), b, c)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::BondExtra(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::BondExtra(a) => { RelayCall::Stake(StakeCall::BondExtra(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Unbond(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Unbond(a) => { RelayCall::Stake(StakeCall::Unbond(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::WithdrawUnbonded(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::WithdrawUnbonded(a) => { RelayCall::Stake(StakeCall::WithdrawUnbonded(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Validate(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Validate(a) => { RelayCall::Stake(StakeCall::Validate(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Chill => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill => { RelayCall::Stake(StakeCall::Chill).encode() } - relay_encoder_precompiles::AvailableStakeCalls::SetPayee(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetPayee(a) => { RelayCall::Stake(StakeCall::SetPayee(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::SetController(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetController(a) => { RelayCall::Stake(StakeCall::SetController(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Rebond(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Rebond(a) => { RelayCall::Stake(StakeCall::Rebond(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Nominate(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Nominate(a) => { let nominated: Vec< as StaticLookup>::Source> = a.iter().map(|add| (*add).clone().into()).collect(); @@ -139,7 +139,7 @@ mod tests { use super::*; use crate::polkadot::PolkadotEncoder; use frame_support::traits::PalletInfo; - use relay_encoder_precompiles::StakeEncodeCall; + use pallet_evm_precompile_relay_encoder::StakeEncodeCall; use sp_runtime::Perbill; #[test] @@ -162,7 +162,7 @@ mod tests { expected_encoded.append(&mut expected); let call_bytes = ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Chill, + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill, ); expected_encoded.append(&mut expected); @@ -197,7 +197,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Bond( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Bond( relay_account.into(), 100u32.into(), pallet_staking::RewardDestination::Controller @@ -224,7 +224,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::BondExtra(100u32.into(),) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::BondExtra(100u32.into(),) ), expected_encoded ); @@ -247,7 +247,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Unbond(100u32.into(),) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Unbond(100u32.into(),) ), expected_encoded ); @@ -270,7 +270,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::WithdrawUnbonded(100u32,) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::WithdrawUnbonded(100u32,) ), expected_encoded ); @@ -298,7 +298,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Validate(validator_prefs) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Validate(validator_prefs) ), expected_encoded ); @@ -322,9 +322,9 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Nominate( - vec![relay_account.into()] - ) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Nominate(vec![ + relay_account.into() + ]) ), expected_encoded ); @@ -344,7 +344,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Chill + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill ), expected_encoded ); @@ -368,7 +368,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::SetPayee( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetPayee( pallet_staking::RewardDestination::Controller ) ), @@ -395,7 +395,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::SetController( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetController( relay_account.clone().into() ) ), @@ -420,7 +420,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Rebond(100u32.into()) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Rebond(100u32.into()) ), expected_encoded ); diff --git a/runtime/relay-encoder/src/westend.rs b/runtime/relay-encoder/src/westend.rs index b4fa91382b..677337066e 100644 --- a/runtime/relay-encoder/src/westend.rs +++ b/runtime/relay-encoder/src/westend.rs @@ -84,46 +84,46 @@ impl xcm_primitives::UtilityEncodeCall for WestendEncoder { } } -impl relay_encoder_precompiles::StakeEncodeCall for WestendEncoder { - fn encode_call(call: relay_encoder_precompiles::AvailableStakeCalls) -> Vec { +impl pallet_evm_precompile_relay_encoder::StakeEncodeCall for WestendEncoder { + fn encode_call(call: pallet_evm_precompile_relay_encoder::AvailableStakeCalls) -> Vec { match call { - relay_encoder_precompiles::AvailableStakeCalls::Bond(a, b, c) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Bond(a, b, c) => { RelayCall::Stake(StakeCall::Bond(a.into(), b, c)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::BondExtra(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::BondExtra(a) => { RelayCall::Stake(StakeCall::BondExtra(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Unbond(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Unbond(a) => { RelayCall::Stake(StakeCall::Unbond(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::WithdrawUnbonded(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::WithdrawUnbonded(a) => { RelayCall::Stake(StakeCall::WithdrawUnbonded(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Validate(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Validate(a) => { RelayCall::Stake(StakeCall::Validate(a)).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Chill => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill => { RelayCall::Stake(StakeCall::Chill).encode() } - relay_encoder_precompiles::AvailableStakeCalls::SetPayee(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetPayee(a) => { RelayCall::Stake(StakeCall::SetPayee(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::SetController(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetController(a) => { RelayCall::Stake(StakeCall::SetController(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Rebond(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Rebond(a) => { RelayCall::Stake(StakeCall::Rebond(a.into())).encode() } - relay_encoder_precompiles::AvailableStakeCalls::Nominate(a) => { + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Nominate(a) => { let nominated: Vec< as StaticLookup>::Source> = a.iter().map(|add| (*add).clone().into()).collect(); @@ -138,7 +138,7 @@ mod tests { use super::*; use crate::westend::WestendEncoder; use frame_support::traits::PalletInfo; - use relay_encoder_precompiles::StakeEncodeCall; + use pallet_evm_precompile_relay_encoder::StakeEncodeCall; use sp_runtime::Perbill; #[test] @@ -161,7 +161,7 @@ mod tests { expected_encoded.append(&mut expected); let call_bytes = ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Chill, + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill, ); expected_encoded.append(&mut expected); @@ -196,7 +196,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Bond( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Bond( relay_account.into(), 100u32.into(), pallet_staking::RewardDestination::Controller @@ -223,7 +223,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::BondExtra(100u32.into(),) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::BondExtra(100u32.into(),) ), expected_encoded ); @@ -246,7 +246,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Unbond(100u32.into(),) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Unbond(100u32.into(),) ), expected_encoded ); @@ -269,7 +269,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::WithdrawUnbonded(100u32,) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::WithdrawUnbonded(100u32,) ), expected_encoded ); @@ -297,7 +297,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Validate(validator_prefs) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Validate(validator_prefs) ), expected_encoded ); @@ -321,9 +321,9 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Nominate( - vec![relay_account.into()] - ) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Nominate(vec![ + relay_account.into() + ]) ), expected_encoded ); @@ -343,7 +343,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Chill + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Chill ), expected_encoded ); @@ -367,7 +367,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::SetPayee( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetPayee( pallet_staking::RewardDestination::Controller ) ), @@ -394,7 +394,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::SetController( + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::SetController( relay_account.clone().into() ) ), @@ -419,7 +419,7 @@ mod tests { assert_eq!( ::encode_call( - relay_encoder_precompiles::AvailableStakeCalls::Rebond(100u32.into()) + pallet_evm_precompile_relay_encoder::AvailableStakeCalls::Rebond(100u32.into()) ), expected_encoded ); diff --git a/rust-toolchain b/rust-toolchain index eefe9ecc7e..d5cdfc7a5a 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1,5 +1,5 @@ [toolchain] -channel = "nightly-2022-02-20" +channel = "nightly-2022-04-20" components = [ "rustfmt", "clippy" ] targets = [ "wasm32-unknown-unknown" ] profile = "minimal" diff --git a/scripts/README.md b/scripts/README.md index 7c99b674ed..eaeffa9e6d 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -80,7 +80,7 @@ The script [tools/launch.ts] contains a list of presets to execute the different Ex: ``` -yarn launch --parachain moonbase-0.23.0 +yarn launch --parachain moonbase-0.25.0 ``` (More details in [tools/README.md]) diff --git a/scripts/benchmarking.sh b/scripts/benchmarking.sh index a563819291..a0e1861200 100755 --- a/scripts/benchmarking.sh +++ b/scripts/benchmarking.sh @@ -22,14 +22,16 @@ function help { echo " ${0} [ ] [--check]" echo "" echo "EXAMPLES:" - echo " ${0} " "list all benchmarks and provide a selection to choose from" - echo " ${0} --check " "list all benchmarks and provide a selection to choose from, runs in 'check' mode (reduced steps and repetitions)" - echo " ${0} foo bar " "run a benchmark for pallet 'foo' and benchmark 'bar'" - echo " ${0} foo bar --check " "run a benchmark for pallet 'foo' and benchmark 'bar' in 'check' mode (reduced steps and repetitions)" + echo " ${0} " "list all benchmarks and provide a selection to choose from" + echo " ${0} --check " "list all benchmarks and provide a selection to choose from, runs in 'check' mode (reduced steps and repetitions)" + echo " ${0} foo bar " "run a benchmark for pallet 'foo' and benchmark 'bar'" + echo " ${0} foo bar --check " "run a benchmark for pallet 'foo' and benchmark 'bar' in 'check' mode (reduced steps and repetitions)" + echo " ${0} foo bar --all " "run a benchmark for all pallets" + echo " ${0} foo bar --all --check " "run a benchmark for all pallets in 'check' mode (reduced steps and repetitions)" } function choose_and_bench { - readarray -t options < <(${BINARY} benchmark --list | sed 1d) + readarray -t options < <(${BINARY} benchmark pallet --list | sed 1d) options+=('EXIT') select opt in "${options[@]}"; do @@ -42,7 +44,10 @@ function choose_and_bench { } function bench { - echo "benchmarking '${1}::${2}' --check=${3}" + OUTPUT=${4:-weights.rs} + echo "benchmarking '${1}::${2}' --check=${3}, writing results to '${OUTPUT}'" + + # Check enabled if [[ "${3}" -eq 1 ]]; then STEPS=16 REPEAT=1 @@ -59,7 +64,7 @@ function bench { --template=./benchmarking/frame-weight-template.hbs \ --record-proof \ --json-file raw.json \ - --output weights.rs + --output "${OUTPUT}" } if [[ "${@}" =~ "--help" ]]; then @@ -71,7 +76,15 @@ else set -o noglob && set -- ${@/'--check'} && set +o noglob fi - if [[ $# -ne 2 ]]; then + ALL=0 + if [[ "${@}" =~ "--all" ]]; then + ALL=1 + fi + + if [[ "${ALL}" -eq 1 ]]; then + mkdir -p weights/ + bench '*' '*' "${CHECK}" "weights/" + elif [[ $# -ne 2 ]]; then choose_and_bench "${CHECK}" else bench "${1}" "${2}" "${CHECK}" diff --git a/scripts/build-last-tracing-runtime.sh b/scripts/build-last-tracing-runtime.sh index 51ce137de3..84e9a3acc8 100755 --- a/scripts/build-last-tracing-runtime.sh +++ b/scripts/build-last-tracing-runtime.sh @@ -11,6 +11,5 @@ git clone --depth 1 -b master-without-wasm https://github.com/PureStake/moonbeam cd build/moonbeam-runtime-overrides ./scripts/import-tracing-runtime.sh local ${1:-"$LOCAL_GIT_BRANCH"} -cd tracing/local && cargo update -p evm && cd ../.. ./scripts/build-tracing-runtime.sh local moonbase mv wasm/moonbase-runtime-local-substitute-tracing.wasm ../wasm/moonbase-runtime-local-substitute-tracing.wasm diff --git a/scripts/run-fork-chain.sh b/scripts/run-fork-chain.sh new file mode 100755 index 0000000000..7e1f383172 --- /dev/null +++ b/scripts/run-fork-chain.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +# This script is expected to be included in a docker image (with node) +set -e + +export RUNTIME_NAME=${RUNTIME_NAME:-"moonbeam"} +export NETWORK=${NETWORK:-"moonbeam"} #moonbase-alpha for alphanet +export PORT_PREFIX=${PORT_PREFIX:-"51"} +export ROOT_FOLDER=${ROOT_FOLDER:-"/data"} +export GIT_TAG=${GIT_TAG:-"master"} +export SKIP_INTERMEDIATE_RUNTIME=${SKIP_INTERMEDIATE_RUNTIME:-false} +export FORCE_COMPILED_WASM=${FORCE_COMPILED_WASM:-true} +export SINGLE_PARACHAIN_NODE=${SINGLE_PARACHAIN_NODE:-true} +export SKIP_DOWNLOAD=${SKIP_DOWNLOAD:-false} +export SKIP_COMPILATION=${SKIP_COMPILATION:-false} +export SKIP_STATE_MODIFICATION=${SKIP_STATE_MODIFICATION:-false} + +export BINARY_PATH=${BINARY_PATH:-$ROOT_FOLDER/moonbeam/binaries/moonbeam}; +export RELAY_BINARY_PATH=${RELAY_BINARY_PATH:-$ROOT_FOLDER/moonbeam/binaries/polkadot}; +export SPEC_FILE=$ROOT_FOLDER/states/${NETWORK}-state.mod.json +export NODE_OPTIONS=--max-old-space-size=16000 + +echo "=========== Variables ===========" +echo "RUNTIME_NAME: ${RUNTIME_NAME}" +echo "NETWORK: ${NETWORK}" +echo "PORT_PREFIX: ${PORT_PREFIX}" +echo "ROOT_FOLDER: ${ROOT_FOLDER}" +echo "GIT_TAG: ${GIT_TAG}" +echo "SKIP_INTERMEDIATE_RUNTIME: ${SKIP_INTERMEDIATE_RUNTIME}" +echo "FORCE_COMPILED_WASM: ${FORCE_COMPILED_WASM}" +echo "SINGLE_PARACHAIN_NODE: ${SINGLE_PARACHAIN_NODE}" +echo "SKIP_DOWNLOAD: ${SKIP_DOWNLOAD}" +echo "SKIP_COMPILATION: ${SKIP_COMPILATION}" +echo "SKIP_STATE_MODIFICATION: ${SKIP_STATE_MODIFICATION}" +echo "BINARY_PATH: ${BINARY_PATH}" +echo "RELAY_BINARY_PATH: ${RELAY_BINARY_PATH}" +echo "SPEC_FILE: ${SPEC_FILE}" +echo "NODE_OPTIONS: ${NODE_OPTIONS}" +echo "================================" + +if [[ $PARA_ID == "" ]]; then + if [[ $NETWORK == "moonbeam" ]]; then + export PARA_ID=2004 + elif [[ $NETWORK == "moonriver" ]]; then + export PARA_ID=2023 + elif [[ $NETWORK == "moonbase-alpha" ]]; then + export PARA_ID=1000 + else + export PARA_ID=1000 + fi +fi + +echo "Preparation..." +echo " - moonbeam: ${GIT_TAG} [folder: ${ROOT_FOLDER} - port-prefix: ${PORT_PREFIX}]" +echo " - network: ${NETWORK} [runtime: ${RUNTIME_NAME} - id: ${PARA_ID}]" +trap "trap - TERM && kill -- -$$" INT TERM EXIT + +mkdir -p $ROOT_FOLDER/states +cd $ROOT_FOLDER + +if [[ $SKIP_DOWNLOAD != true ]] +then + # Clone moonbeam repo & building + echo "Cloning repository..." + git clone https://github.com/purestake/moonbeam + cd $ROOT_FOLDER/moonbeam + mkdir binaries + + echo "Retrieving binaries..." + MOONBEAM_CLIENT_TAG=`curl -s https://api.github.com/repos/purestake/moonbeam/releases | jq -r '.[] | .tag_name' | grep '^v' | head -1` + POLKADOT_CLIENT_TAG=`curl -s https://api.github.com/repos/paritytech/polkadot/releases | jq -r '.[] | .tag_name' | grep '^v' | head -1` + + if [[ ! -f $BINARY_PATH ]] + then + echo "Downloading moonbeam ${MOONBEAM_CLIENT_TAG}" + wget -q https://github.com/PureStake/moonbeam/releases/download/${MOONBEAM_CLIENT_TAG}/moonbeam \ + -O $BINARY_PATH + chmod uog+x $BINARY_PATH + fi + + if [[ ! -f $RELAY_BINARY_PATH ]] + then + echo "Downloading polkadot ${POLKADOT_CLIENT_TAG}" + wget -q https://github.com/paritytech/polkadot/releases/download/${POLKADOT_CLIENT_TAG}/polkadot \ + -O $RELAY_BINARY_PATH + chmod uog+x $RELAY_BINARY_PATH + fi + + echo " - moonbeam binary: $BINARY_PATH" + echo " - $($BINARY_PATH --version)" + echo " - polkadot binary: $RELAY_BINARY_PATH" + echo " - $($RELAY_BINARY_PATH --version)" + + echo "Retrieving ${NETWORK} state... (few minutes)" + wget -q https://s3.us-east-2.amazonaws.com/snapshots.moonbeam.network/${NETWORK}/latest/${NETWORK}-state.json \ + -O $ROOT_FOLDER/states/${NETWORK}-state.json; +fi + +if [[ $SKIP_COMPILATION != true ]] +then + ## Build the runtime to test + echo "Building $GIT_TAG $RUNTIME_NAME runtime... (5 minutes)" + cd $ROOT_FOLDER/moonbeam + git checkout $GIT_TAG + cargo build --release -p ${RUNTIME_NAME}-runtime + + echo "Preparing tests... (3 minutes)" + cd $ROOT_FOLDER/moonbeam/moonbeam-types-bundle + npm ci + cd $ROOT_FOLDER/moonbeam/tools + npm ci + + cd $ROOT_FOLDER/moonbeam/tests + git checkout crystalin-fork-test-preparation + npm ci +fi + + +if [[ $SKIP_STATE_MODIFICATION != true ]] +then + # Modify state + cd $ROOT_FOLDER/moonbeam/tests + echo "Customizing $NETWORK forked state..." + node_modules/.bin/ts-node state-modifier.ts $ROOT_FOLDER/states/${NETWORK}-state.json +fi + +# Run the node +echo "Running nodes..." +cd $ROOT_FOLDER/moonbeam/tests +./node_modules/.bin/ts-node spawn-fork-node.ts 2>&1 > spawn-node.log \ No newline at end of file diff --git a/scripts/run-fork-test.sh b/scripts/run-fork-test.sh new file mode 100755 index 0000000000..3cadf56259 --- /dev/null +++ b/scripts/run-fork-test.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# This script is expected to be included in a docker image (with node) +set -e + +export RUNTIME_NAME=${RUNTIME_NAME:-"moonbeam"} +export NETWORK=${NETWORK:-"moonbeam"} #moonbase-alpha for alphanet +export PORT_PREFIX=${PORT_PREFIX:-"51"} +export ROOT_FOLDER=${ROOT_FOLDER:-"/data"} +export GIT_TAG=${GIT_TAG:-"master"} +export SKIP_INTERMEDIATE_RUNTIME=${SKIP_INTERMEDIATE_RUNTIME:-false} +export FORCE_COMPILED_WASM=${FORCE_COMPILED_WASM:-true} +export SINGLE_PARACHAIN_NODE=${SINGLE_PARACHAIN_NODE:-true} +export SKIP_DOWNLOAD=${SKIP_DOWNLOAD:-false} +export SKIP_COMPILATION=${SKIP_COMPILATION:-false} +export SKIP_STATE_MODIFICATION=${SKIP_STATE_MODIFICATION:-false} + +export BINARY_PATH=${BINARY_PATH:-$ROOT_FOLDER/moonbeam/binaries/moonbeam}; +export RELAY_BINARY_PATH=${RELAY_BINARY_PATH:-$ROOT_FOLDER/moonbeam/binaries/polkadot}; +export SPEC_FILE=$ROOT_FOLDER/states/${NETWORK}-state.mod.json +export NODE_OPTIONS=--max-old-space-size=16000 + +echo "=========== Variables ===========" +echo "RUNTIME_NAME: ${RUNTIME_NAME}" +echo "NETWORK: ${NETWORK}" +echo "PORT_PREFIX: ${PORT_PREFIX}" +echo "ROOT_FOLDER: ${ROOT_FOLDER}" +echo "GIT_TAG: ${GIT_TAG}" +echo "SKIP_INTERMEDIATE_RUNTIME: ${SKIP_INTERMEDIATE_RUNTIME}" +echo "FORCE_COMPILED_WASM: ${FORCE_COMPILED_WASM}" +echo "SINGLE_PARACHAIN_NODE: ${SINGLE_PARACHAIN_NODE}" +echo "SKIP_DOWNLOAD: ${SKIP_DOWNLOAD}" +echo "SKIP_COMPILATION: ${SKIP_COMPILATION}" +echo "SKIP_STATE_MODIFICATION: ${SKIP_STATE_MODIFICATION}" +echo "BINARY_PATH: ${BINARY_PATH}" +echo "RELAY_BINARY_PATH: ${RELAY_BINARY_PATH}" +echo "SPEC_FILE: ${SPEC_FILE}" +echo "NODE_OPTIONS: ${NODE_OPTIONS}" +echo "================================" + +if [[ $PARA_ID == "" ]]; then + if [[ $NETWORK == "moonbeam" ]]; then + export PARA_ID=2004 + elif [[ $NETWORK == "moonriver" ]]; then + export PARA_ID=2023 + elif [[ $NETWORK == "moonbase-alpha" ]]; then + export PARA_ID=1000 + else + export PARA_ID=1000 + fi +fi + +echo "Preparation..." +echo " - moonbeam: ${GIT_TAG} [folder: ${ROOT_FOLDER} - port-prefix: ${PORT_PREFIX}]" +echo " - network: ${NETWORK} [runtime: ${RUNTIME_NAME} - id: ${PARA_ID}]" +trap "trap - TERM && kill -- -$$" INT TERM EXIT + +mkdir -p $ROOT_FOLDER/states +cd $ROOT_FOLDER + +if [[ $SKIP_DOWNLOAD != true ]] +then + # Clone moonbeam repo & building + echo "Cloning repository..." + git clone https://github.com/purestake/moonbeam + cd $ROOT_FOLDER/moonbeam + mkdir binaries + + echo "Retrieving binaries..." + MOONBEAM_CLIENT_TAG=`curl -s https://api.github.com/repos/purestake/moonbeam/releases | jq -r '.[] | .tag_name' | grep '^v' | head -1` + POLKADOT_CLIENT_TAG=`curl -s https://api.github.com/repos/paritytech/polkadot/releases | jq -r '.[] | .tag_name' | grep '^v' | head -1` + + if [[ ! -f $BINARY_PATH ]] + then + echo "Downloading moonbeam ${MOONBEAM_CLIENT_TAG}" + wget -q https://github.com/PureStake/moonbeam/releases/download/${MOONBEAM_CLIENT_TAG}/moonbeam \ + -O $BINARY_PATH + chmod uog+x $BINARY_PATH + fi + + if [[ ! -f $RELAY_BINARY_PATH ]] + then + echo "Downloading polkadot ${POLKADOT_CLIENT_TAG}" + wget -q https://github.com/paritytech/polkadot/releases/download/${POLKADOT_CLIENT_TAG}/polkadot \ + -O $RELAY_BINARY_PATH + chmod uog+x $RELAY_BINARY_PATH + fi + + echo " - moonbeam binary: $BINARY_PATH" + echo " - $($BINARY_PATH --version)" + echo " - polkadot binary: $RELAY_BINARY_PATH" + echo " - $($RELAY_BINARY_PATH --version)" + + echo "Retrieving ${NETWORK} state... (few minutes)" + wget -q https://s3.us-east-2.amazonaws.com/snapshots.moonbeam.network/${NETWORK}/latest/${NETWORK}-state.json \ + -O $ROOT_FOLDER/states/${NETWORK}-state.json; +fi + +if [[ $SKIP_COMPILATION != true ]] +then + ## Build the runtime to test + echo "Building $GIT_TAG $RUNTIME_NAME runtime... (5 minutes)" + cd $ROOT_FOLDER/moonbeam + git checkout $GIT_TAG + cargo build --release -p ${RUNTIME_NAME}-runtime + + echo "Preparing tests... (3 minutes)" + cd $ROOT_FOLDER/moonbeam/moonbeam-types-bundle + npm ci + cd $ROOT_FOLDER/moonbeam/tools + npm ci + + cd $ROOT_FOLDER/moonbeam/tests + git checkout crystalin-fork-test-preparation + npm ci +fi + + +if [[ $SKIP_STATE_MODIFICATION != true ]] +then + # Modify state + cd $ROOT_FOLDER/moonbeam/tests + echo "Customizing $NETWORK forked state..." + node_modules/.bin/ts-node state-modifier.ts $ROOT_FOLDER/states/${NETWORK}-state.json +fi + +# Run the node +echo "Running nodes..." +cd $ROOT_FOLDER/moonbeam/tests +./node_modules/.bin/ts-node spawn-fork-node.ts 2>&1 > spawn-node.log & +PID=$! + +# Wait for the node to start +echo "Waiting nodes... (10 minutes)" +sleep 5 +( tail -f -n0 spawn-node.log & ) | grep -q 'POLKADOT LAUNCH COMPLETE' + +export RELAY_WSS_URL=ws://localhost:51002 +export WSS_URL=ws://localhost:51102 +# Run the fork test (without spawning the node using DEBUG_MODE) +echo "Running fork tests... (10 minutes)" +SUCCESS_UPGRADE=false +DEBUG_MODE=true DEBUG=test:setup* npm run fork-test && SUCCESS_UPGRADE=true || \ + "Failed to do runtime upgrade" + +if [[ $SUCCESS_UPGRADE == "true" ]] +then + echo "Running smoke tests... (10 minutes)" + SKIP_BLOCK_CONSISTENCY_TESTS=true SKIP_RELAY_TESTS=true DEBUG=smoke:* npm run smoke-test +fi + +echo "Retrieving runtime stats..." +cd $ROOT_FOLDER/moonbeam/tools +node_modules/.bin/ts-node extract-migration-logs.ts --log ../tests/51102.log + +echo "Done !!" +[[ $SUCCESS_UPGRADE == "true" ]] && exit 0 || exit 1 \ No newline at end of file diff --git a/tests/README.md b/tests/README.md index e0e998c0c6..dc14392cf0 100644 --- a/tests/README.md +++ b/tests/README.md @@ -161,3 +161,66 @@ are the ports used by the debug node. A VSCode test allow to quickly run the `test-single` test in debug mode. To run another test, change the command in the `package.json`. Note that you should restart the node after running one test file. + +## Fork Tests + +Those tests are intended to run using an exported state from an existing network. +They require to specify the exported state, the runtime name and the parachain id. +Also the exported state needs to be modified using the state-modifier.ts script. + +### End to end script (automated) + +You can run the full process using the docker image: + +``` +docker run -e GIT_TAG=perm-runtime-1605 -e NETWORK=moonriver -e RUNTIME_NAME=moonriver purestake/moonbeam-fork-tests:0.0.1 +``` + +or locally (for debugging pruposes) with the script: + +``` +ROOT_FOLDER=/tmp/moonbeam-states GIT_TAG=perm-runtime-1604 NETWORK=moonbase-alpha RUNTIME_NAME=moobase ./scripts/run-fork-test.sh +``` + +Where `ROOT_FOLDER` should be an empty folder + +### Retrieving exported state (manual step 1) + +``` +mkdir -p ~/projects/moonbeam-states +for network in moonbase-alpha moonriver moonbeam; do wget https://s3.us-east-2.amazonaws.com/snapshots.moonbeam.network/${network}/latest/${network}-state.json -O ~/projects/moonbeam-states/${network}-state.json; done +``` + +### Modifying exported state (manual step 2) + +``` +for network in moonbase-alpha moonriver moonbeam; do node_modules/.bin/ts-node state-modifier.ts ~/projects/moonbeam-states/${network}-state.json; done +``` + +### Executing the tests (manual step 3a) + +Here is an exemple of the command to run: + +``` +SKIP_INTERMEDIATE_RUNTIME=true RUNTIME_NAME=moonbeam SPEC_FILE=~/projects/moonbeam-states/moonbeam-state.mod.json PARA_ID=2004 PORT_PREFIX=51 npm run fork-test + +SKIP_INTERMEDIATE_RUNTIME=true RUNTIME_NAME=moonbase SPEC_FILE=~/projects/moonbeam-states/moonbase-alpha-state.mod.json PARA_ID=1000 PORT_PREFIX=52 npm run fork-test + +SKIP_INTERMEDIATE_RUNTIME=true RUNTIME_NAME=moonriver SPEC_FILE=~/projects/moonbeam-states/moonriver-state.mod.json PARA_ID=2023 PORT_PREFIX=53 npm run fork-test +``` + +### Starting the node separately + +If you want to inspect the forkned network or keep it running after the tests + +``` +PARA_ID=2004 PORT_PREFIX=51 ./node_modules/.bin/ts-node spawn-fork-node.ts +PARA_ID=1000 PORT_PREFIX=51 ./node_modules/.bin/ts-node spawn-fork-node.ts +PARA_ID=2023 PORT_PREFIX=51 ./node_modules/.bin/ts-node spawn-fork-node.ts +``` + +### Generating moonbeam-fork-test image + +``` +docker build ./scripts -t purestake/moonbeam-fork-tests:0.0.1 -f docker/moonbeam-fork-tests.Dockerfile +``` diff --git a/tests/contracts/compiled/AuthorMapping.json b/tests/contracts/compiled/AuthorMapping.json index 22264ddfa7..fafd9d5910 100644 --- a/tests/contracts/compiled/AuthorMapping.json +++ b/tests/contracts/compiled/AuthorMapping.json @@ -20,6 +20,22 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "remove_keys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "bytes", "name": "keys", "type": "bytes" } + ], + "name": "set_keys", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -48,6 +64,7 @@ "clear_association(bytes32)": { "params": { "nimbus_id": "The nimbusId to be cleared" } }, + "set_keys(bytes)": { "params": { "keys": "The new session keys" } }, "update_association(bytes32,bytes32)": { "params": { "new_nimbus_id": "The new nimbusId to be associated", @@ -55,7 +72,7 @@ } } }, - "title": "Pallet AuthorMapping Interface The interface through which solidity contracts will interact with pallet-author.mapping", + "title": "Pallet AuthorMapping Interface The interface through which solidity contracts will interact with pallet-author.mapping Address : 0x0000000000000000000000000000000000000807", "version": 1 }, "evm": { @@ -82,21 +99,25 @@ "methodIdentifiers": { "add_association(bytes32)": "aa5ac585", "clear_association(bytes32)": "7354c91d", + "remove_keys()": "3b6c4284", + "set_keys(bytes)": "bcb24ddc", "update_association(bytes32,bytes32)": "d9cef879" } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nimbus_id\",\"type\":\"bytes32\"}],\"name\":\"add_association\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nimbus_id\",\"type\":\"bytes32\"}],\"name\":\"clear_association\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"old_nimbus_id\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"new_nimbus_id\",\"type\":\"bytes32\"}],\"name\":\"update_association\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"add_association(bytes32)\":{\"params\":{\"nimbus_id\":\"The nimbusId to be associated\"}},\"clear_association(bytes32)\":{\"params\":{\"nimbus_id\":\"The nimbusId to be cleared\"}},\"update_association(bytes32,bytes32)\":{\"params\":{\"new_nimbus_id\":\"The new nimbusId to be associated\",\"old_nimbus_id\":\"The old nimbusId to be replaced\"}}},\"title\":\"Pallet AuthorMapping Interface The interface through which solidity contracts will interact with pallet-author.mapping\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"add_association(bytes32)\":{\"notice\":\"Add association Selector: aa5ac585 \"},\"clear_association(bytes32)\":{\"notice\":\"Clear existing associationg Selector: 7354c91d\"},\"update_association(bytes32,bytes32)\":{\"notice\":\"Update existing association Selector: d9cef879\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"AuthorMapping\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xc4e97f608af8bc5ff49b3f43e1e3014fc00bedc0fda5f33c8a807b467097995c\",\"urls\":[\"bzz-raw://240a3a86196164e168ce024af0e5d94592e7f16e512785353964e6e1d1e4f79f\",\"dweb:/ipfs/QmXZGwpd4dFYkcfhhgpM7jAhfqYnm3szvbH4h7xQkD2gL8\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nimbus_id\",\"type\":\"bytes32\"}],\"name\":\"add_association\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nimbus_id\",\"type\":\"bytes32\"}],\"name\":\"clear_association\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remove_keys\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"keys\",\"type\":\"bytes\"}],\"name\":\"set_keys\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"old_nimbus_id\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"new_nimbus_id\",\"type\":\"bytes32\"}],\"name\":\"update_association\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"add_association(bytes32)\":{\"params\":{\"nimbus_id\":\"The nimbusId to be associated\"}},\"clear_association(bytes32)\":{\"params\":{\"nimbus_id\":\"The nimbusId to be cleared\"}},\"set_keys(bytes)\":{\"params\":{\"keys\":\"The new session keys\"}},\"update_association(bytes32,bytes32)\":{\"params\":{\"new_nimbus_id\":\"The new nimbusId to be associated\",\"old_nimbus_id\":\"The old nimbusId to be replaced\"}}},\"title\":\"Pallet AuthorMapping Interface The interface through which solidity contracts will interact with pallet-author.mapping Address : 0x0000000000000000000000000000000000000807\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"add_association(bytes32)\":{\"notice\":\"Add association Selector: aa5ac585\"},\"clear_association(bytes32)\":{\"notice\":\"Clear existing association Selector: 7354c91d\"},\"remove_keys()\":{\"notice\":\"Remove keys Selector: 3b6c4284\"},\"set_keys(bytes)\":{\"notice\":\"Set keys Selector: bcb24ddc\"},\"update_association(bytes32,bytes32)\":{\"notice\":\"Update existing association Selector: d9cef879\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"AuthorMapping\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x72e9576fd1c0deecbdbef4b5649da42d7cb4b487ba7f9dd766dc8526353a52a8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://678fe86166cf7a8af1cd3c1fc04ae56db0639fd2fa0317022b767ca657176a85\",\"dweb:/ipfs/QmZaWnDsANKyjBkb9yYasAudDrszENQ73a4REnCQQ6o5EE\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null }, "userdoc": { "kind": "user", "methods": { "add_association(bytes32)": { - "notice": "Add association Selector: aa5ac585 " + "notice": "Add association Selector: aa5ac585" }, "clear_association(bytes32)": { - "notice": "Clear existing associationg Selector: 7354c91d" + "notice": "Clear existing association Selector: 7354c91d" }, + "remove_keys()": { "notice": "Remove keys Selector: 3b6c4284" }, + "set_keys(bytes)": { "notice": "Set keys Selector: bcb24ddc" }, "update_association(bytes32,bytes32)": { "notice": "Update existing association Selector: d9cef879" } @@ -104,5 +125,5 @@ "version": 1 } }, - "sourceCode": "\n pragma solidity >=0.8.0;\n\n /**\n * @title Pallet AuthorMapping Interface\n *\n * The interface through which solidity contracts will interact with pallet-author.mapping\n */\n interface AuthorMapping {\n /**\n * Add association\n * Selector: aa5ac585 \n *\n * @param nimbus_id The nimbusId to be associated\n */\n function add_association(bytes32 nimbus_id) external;\n\n /**\n * Update existing association\n * Selector: d9cef879\n *\n * @param old_nimbus_id The old nimbusId to be replaced\n * @param new_nimbus_id The new nimbusId to be associated\n */\n function update_association(bytes32 old_nimbus_id, bytes32 new_nimbus_id) external;\n\n /**\n * Clear existing associationg\n * Selector: 7354c91d\n *\n * @param nimbus_id The nimbusId to be cleared\n */\n function clear_association(bytes32 nimbus_id) external;\n }\n\n\n contract AuthorMappingInstance is AuthorMapping {\n\n /// The Xtokens wrapper at the known pre-compile address.\n AuthorMapping public author_mapping = AuthorMapping(0x0000000000000000000000000000000000000807);\n\n function add_association(\n bytes32 nimbus_id\n ) override external {\n author_mapping.add_association(nimbus_id);\n }\n function update_association(\n bytes32 old_nimbus_id,\n bytes32 new_nimbus_id\n ) override external {\n author_mapping.update_association(old_nimbus_id, new_nimbus_id);\n }\n function clear_association(\n bytes32 nimbus_id\n ) override external {\n author_mapping.clear_association(nimbus_id);\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @title Pallet AuthorMapping Interface\n *\n * The interface through which solidity contracts will interact with pallet-author.mapping\n * Address : 0x0000000000000000000000000000000000000807\n */\n\ninterface AuthorMapping {\n /**\n * Add association\n * Selector: aa5ac585\n *\n * @param nimbus_id The nimbusId to be associated\n */\n function add_association(bytes32 nimbus_id) external;\n\n /**\n * Update existing association\n * Selector: d9cef879\n *\n * @param old_nimbus_id The old nimbusId to be replaced\n * @param new_nimbus_id The new nimbusId to be associated\n */\n function update_association(bytes32 old_nimbus_id, bytes32 new_nimbus_id)\n external;\n\n /**\n * Clear existing association\n * Selector: 7354c91d\n *\n * @param nimbus_id The nimbusId to be cleared\n */\n function clear_association(bytes32 nimbus_id) external;\n\n /**\n * Remove keys\n * Selector: 3b6c4284\n *\n */\n function remove_keys() external;\n\n /**\n * Set keys\n * Selector: bcb24ddc\n *\n * @param keys The new session keys\n */\n function set_keys(bytes memory keys) external;\n}\n" } diff --git a/tests/contracts/compiled/Batch.json b/tests/contracts/compiled/Batch.json new file mode 100644 index 0000000000..382f13f607 --- /dev/null +++ b/tests/contracts/compiled/Batch.json @@ -0,0 +1,157 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "SubcallFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "SubcallSucceeded", + "type": "event" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "to", "type": "address[]" }, + { "internalType": "uint256[]", "name": "value", "type": "uint256[]" }, + { "internalType": "bytes[]", "name": "call_data", "type": "bytes[]" }, + { + "internalType": "uint64[]", + "name": "gas_limit", + "type": "uint64[]" + } + ], + "name": "batchAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "to", "type": "address[]" }, + { "internalType": "uint256[]", "name": "value", "type": "uint256[]" }, + { "internalType": "bytes[]", "name": "call_data", "type": "bytes[]" }, + { + "internalType": "uint64[]", + "name": "gas_limit", + "type": "uint64[]" + } + ], + "name": "batchSome", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "to", "type": "address[]" }, + { "internalType": "uint256[]", "name": "value", "type": "uint256[]" }, + { "internalType": "bytes[]", "name": "call_data", "type": "bytes[]" }, + { + "internalType": "uint64[]", + "name": "gas_limit", + "type": "uint64[]" + } + ], + "name": "batchSomeUntilFailure", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "batchAll(address[],uint256[],bytes[],uint64[])": { + "details": "Batch multiple calls into a single transaction. All calls are performed from the address calling this precompile. In case of one subcall reverting, the entire batch will revert.", + "params": { + "call_data": "Call data for each `to` address. If array is shorter than \"to\" then additional calls will be performed with an empty call data.", + "gas_limit": "Gas limit for each `to` address. Use 0 to forward all the remaining gas. If array is shorter than \"to\" then the remaining gas available will be used. Selector: 96e292b8", + "to": "List of addresses to call.", + "value": "List of values for each subcall. If array is shorter than \"to\" then additional calls will be performed with a value of 0." + } + }, + "batchSome(address[],uint256[],bytes[],uint64[])": { + "details": "Batch multiple calls into a single transaction. All calls are performed from the address calling this precompile. In case of one subcall reverting following subcalls will still be attempted.", + "params": { + "call_data": "Call data for each `to` address. If array is shorter than \"to\" then additional calls will be performed with an empty call data.", + "gas_limit": "Gas limit for each `to` address. Use 0 to forward all the remaining gas. If array is shorter than \"to\" then the remaining gas available will be used. Selector: 79df4b9c", + "to": "List of addresses to call.", + "value": "List of values for each subcall. If array is shorter than \"to\" then additional calls will be performed with a value of 0." + } + }, + "batchSomeUntilFailure(address[],uint256[],bytes[],uint64[])": { + "details": "Batch multiple calls into a single transaction. All calls are performed from the address calling this precompile. In case of one subcall reverting, no more subcalls will be executed but the batch transaction will succeed. Use batchAll to revert on any subcall revert.", + "params": { + "call_data": "Call data for each `to` address. If array is shorter than \"to\" then additional calls will be performed with an empty call data.", + "gas_limit": "Gas limit for each `to` address. Use 0 to forward all the remaining gas. If array is shorter than \"to\" then the remaining gas available will be used. Selector: cf0491c7", + "to": "List of addresses to call.", + "value": "List of values for each subcall. If array is shorter than \"to\" then additional calls will be performed with a value of 0." + } + } + }, + "title": "Batch precompile Allows to perform multiple calls throught one call to the precompile. Can be used by EOA to do multiple calls in a single transaction. Address: 0x0000000000000000000000000000000000000808", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "batchAll(address[],uint256[],bytes[],uint64[])": "96e292b8", + "batchSome(address[],uint256[],bytes[],uint64[])": "79df4b9c", + "batchSomeUntilFailure(address[],uint256[],bytes[],uint64[])": "cf0491c7" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"SubcallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"SubcallSucceeded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"call_data\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"gas_limit\",\"type\":\"uint64[]\"}],\"name\":\"batchAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"call_data\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"gas_limit\",\"type\":\"uint64[]\"}],\"name\":\"batchSome\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"call_data\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"gas_limit\",\"type\":\"uint64[]\"}],\"name\":\"batchSomeUntilFailure\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"batchAll(address[],uint256[],bytes[],uint64[])\":{\"details\":\"Batch multiple calls into a single transaction. All calls are performed from the address calling this precompile. In case of one subcall reverting, the entire batch will revert.\",\"params\":{\"call_data\":\"Call data for each `to` address. If array is shorter than \\\"to\\\" then additional calls will be performed with an empty call data.\",\"gas_limit\":\"Gas limit for each `to` address. Use 0 to forward all the remaining gas. If array is shorter than \\\"to\\\" then the remaining gas available will be used. Selector: 96e292b8\",\"to\":\"List of addresses to call.\",\"value\":\"List of values for each subcall. If array is shorter than \\\"to\\\" then additional calls will be performed with a value of 0.\"}},\"batchSome(address[],uint256[],bytes[],uint64[])\":{\"details\":\"Batch multiple calls into a single transaction. All calls are performed from the address calling this precompile. In case of one subcall reverting following subcalls will still be attempted.\",\"params\":{\"call_data\":\"Call data for each `to` address. If array is shorter than \\\"to\\\" then additional calls will be performed with an empty call data.\",\"gas_limit\":\"Gas limit for each `to` address. Use 0 to forward all the remaining gas. If array is shorter than \\\"to\\\" then the remaining gas available will be used. Selector: 79df4b9c\",\"to\":\"List of addresses to call.\",\"value\":\"List of values for each subcall. If array is shorter than \\\"to\\\" then additional calls will be performed with a value of 0.\"}},\"batchSomeUntilFailure(address[],uint256[],bytes[],uint64[])\":{\"details\":\"Batch multiple calls into a single transaction. All calls are performed from the address calling this precompile. In case of one subcall reverting, no more subcalls will be executed but the batch transaction will succeed. Use batchAll to revert on any subcall revert.\",\"params\":{\"call_data\":\"Call data for each `to` address. If array is shorter than \\\"to\\\" then additional calls will be performed with an empty call data.\",\"gas_limit\":\"Gas limit for each `to` address. Use 0 to forward all the remaining gas. If array is shorter than \\\"to\\\" then the remaining gas available will be used. Selector: cf0491c7\",\"to\":\"List of addresses to call.\",\"value\":\"List of values for each subcall. If array is shorter than \\\"to\\\" then additional calls will be performed with a value of 0.\"}}},\"title\":\"Batch precompile Allows to perform multiple calls throught one call to the precompile. Can be used by EOA to do multiple calls in a single transaction. Address: 0x0000000000000000000000000000000000000808\",\"version\":1},\"userdoc\":{\"events\":{\"SubcallFailed(uint256)\":{\"notice\":\"Emitted when a subcall fails.\"},\"SubcallSucceeded(uint256)\":{\"notice\":\"Emitted when a subcall succeeds.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Batch\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xd3b2517d87efe292b72c4dc1a38f4c14f46257743975b0e9f3e5555349051d04\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://fedc784801f18921dfe6dc04bef015166522585943d561fa7e25dc6a44e4be86\",\"dweb:/ipfs/Qmcj824RoE3MSnBjN7Q8Mr2cjZ2wknFhSes5mb7a72gjn2\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { + "events": { + "SubcallFailed(uint256)": { "notice": "Emitted when a subcall fails." }, + "SubcallSucceeded(uint256)": { + "notice": "Emitted when a subcall succeeds." + } + }, + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/// @title Batch precompile\n/// Allows to perform multiple calls throught one call to the precompile.\n/// Can be used by EOA to do multiple calls in a single transaction.\n/// Address: 0x0000000000000000000000000000000000000808\ninterface Batch {\n /// @dev Batch multiple calls into a single transaction.\n /// All calls are performed from the address calling this precompile.\n ///\n /// In case of one subcall reverting following subcalls will still be attempted.\n ///\n /// @param to List of addresses to call.\n /// @param value List of values for each subcall. If array is shorter than \"to\" then additional\n /// calls will be performed with a value of 0.\n /// @param call_data Call data for each `to` address. If array is shorter than \"to\" then\n /// additional calls will be performed with an empty call data.\n /// @param gas_limit Gas limit for each `to` address. Use 0 to forward all the remaining gas.\n /// If array is shorter than \"to\" then the remaining gas available will be used.\n /// Selector: 79df4b9c\n function batchSome(\n address[] memory to,\n uint256[] memory value,\n bytes[] memory call_data,\n uint64[] memory gas_limit\n ) external;\n\n /// @dev Batch multiple calls into a single transaction.\n /// All calls are performed from the address calling this precompile.\n ///\n /// In case of one subcall reverting, no more subcalls will be executed but\n /// the batch transaction will succeed. Use batchAll to revert on any subcall revert.\n ///\n /// @param to List of addresses to call.\n /// @param value List of values for each subcall. If array is shorter than \"to\" then additional\n /// calls will be performed with a value of 0.\n /// @param call_data Call data for each `to` address. If array is shorter than \"to\" then\n /// additional calls will be performed with an empty call data.\n /// @param gas_limit Gas limit for each `to` address. Use 0 to forward all the remaining gas.\n /// If array is shorter than \"to\" then the remaining gas available will be used.\n /// Selector: cf0491c7\n function batchSomeUntilFailure(\n address[] memory to,\n uint256[] memory value,\n bytes[] memory call_data,\n uint64[] memory gas_limit\n ) external;\n\n /// @dev Batch multiple calls into a single transaction.\n /// All calls are performed from the address calling this precompile.\n ///\n /// In case of one subcall reverting, the entire batch will revert.\n ///\n /// @param to List of addresses to call.\n /// @param value List of values for each subcall. If array is shorter than \"to\" then additional\n /// calls will be performed with a value of 0.\n /// @param call_data Call data for each `to` address. If array is shorter than \"to\" then\n /// additional calls will be performed with an empty call data.\n /// @param gas_limit Gas limit for each `to` address. Use 0 to forward all the remaining gas.\n /// If array is shorter than \"to\" then the remaining gas available will be used.\n /// Selector: 96e292b8\n function batchAll(\n address[] memory to,\n uint256[] memory value,\n bytes[] memory call_data,\n uint64[] memory gas_limit\n ) external;\n\n /// Emitted when a subcall succeeds.\n event SubcallSucceeded(uint256 index);\n\n /// Emitted when a subcall fails.\n event SubcallFailed(uint256 index);\n}\n" +} diff --git a/tests/contracts/compiled/Blake2Check.json b/tests/contracts/compiled/Blake2Check.json deleted file mode 100644 index 94a32d0844..0000000000 --- a/tests/contracts/compiled/Blake2Check.json +++ /dev/null @@ -1,13485 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b50610b18806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806372de3cbd1461003b578063fc75ac471461006b575b600080fd5b610055600480360381019061005091906107fc565b610089565b6040516100629190610924565b60405180910390f35b6100736101b5565b6040516100809190610924565b60405180910390f35b6100916103dc565b6100996103dc565b600087876000600281106100b0576100af61093f565b5b6020020151886001600281106100c9576100c861093f565b5b6020020151886000600481106100e2576100e161093f565b5b6020020151896001600481106100fb576100fa61093f565b5b60200201518a6002600481106101145761011361093f565b5b60200201518b60036004811061012d5761012c61093f565b5b60200201518b6000600281106101465761014561093f565b5b60200201518c60016002811061015f5761015e61093f565b5b60200201518c60405160200161017e9a99989796959493929190610a2e565b604051602081830303815290604052905060408260d5602084016009600019fa6101a757600080fd5b819250505095945050505050565b6101bd6103dc565b6000600c90506101cb6103dc565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581600060028110610200576101ff61093f565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b8160016002811061023e5761023d61093f565b5b60200201818152505061024f6103fe565b7f6162630000000000000000000000000000000000000000000000000000000000816000600481106102845761028361093f565b5b6020020181815250506000816001600481106102a3576102a261093f565b5b6020020181815250506000816002600481106102c2576102c161093f565b5b6020020181815250506000816003600481106102e1576102e061093f565b5b6020020181815250506102f2610420565b7f0300000000000000000000000000000000000000000000000000000000000000816000600281106103275761032661093f565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff19168152505060008160016002811061037e5761037d61093f565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250506000600190506103d28585858585610089565b9550505050505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b600063ffffffff82169050919050565b61046a81610451565b811461047557600080fd5b50565b60008135905061048781610461565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6104db82610492565b810181811067ffffffffffffffff821117156104fa576104f96104a3565b5b80604052505050565b600061050d610442565b905061051982826104d2565b919050565b600067ffffffffffffffff821115610539576105386104a3565b5b602082029050919050565b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b600061059261058d8461051e565b610503565b905080602084028301858111156105ac576105ab610544565b5b835b818110156105d557806105c1888261056a565b8452602084019350506020810190506105ae565b5050509392505050565b600082601f8301126105f4576105f361048d565b5b600261060184828561057f565b91505092915050565b600067ffffffffffffffff821115610625576106246104a3565b5b602082029050919050565b600061064361063e8461060a565b610503565b9050806020840283018581111561065d5761065c610544565b5b835b818110156106865780610672888261056a565b84526020840193505060208101905061065f565b5050509392505050565b600082601f8301126106a5576106a461048d565b5b60046106b2848285610630565b91505092915050565b600067ffffffffffffffff8211156106d6576106d56104a3565b5b602082029050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b610716816106e1565b811461072157600080fd5b50565b6000813590506107338161070d565b92915050565b600061074c610747846106bb565b610503565b9050806020840283018581111561076657610765610544565b5b835b8181101561078f578061077b8882610724565b845260208401935050602081019050610768565b5050509392505050565b600082601f8301126107ae576107ad61048d565b5b60026107bb848285610739565b91505092915050565b60008115159050919050565b6107d9816107c4565b81146107e457600080fd5b50565b6000813590506107f6816107d0565b92915050565b600080600080600061014086880312156108195761081861044c565b5b600061082788828901610478565b9550506020610838888289016105df565b945050606061084988828901610690565b93505060e061085a88828901610799565b92505061012061086c888289016107e7565b9150509295509295909350565b600060029050919050565b600081905092915050565b6000819050919050565b6108a281610549565b82525050565b60006108b48383610899565b60208301905092915050565b6000602082019050919050565b6108d681610879565b6108e08184610884565b92506108eb8261088f565b8060005b8381101561091c57815161090387826108a8565b965061090e836108c0565b9250506001810190506108ef565b505050505050565b600060408201905061093960008301846108cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160e01b9050919050565b60006109868261096e565b9050919050565b61099e61099982610451565b61097b565b82525050565b6000819050919050565b6109bf6109ba82610549565b6109a4565b82525050565b6000819050919050565b6109e06109db826106e1565b6109c5565b82525050565b60008160f81b9050919050565b60006109fe826109e6565b9050919050565b6000610a10826109f3565b9050919050565b610a28610a23826107c4565b610a05565b82525050565b6000610a3a828d61098d565b600482019150610a4a828c6109ae565b602082019150610a5a828b6109ae565b602082019150610a6a828a6109ae565b602082019150610a7a82896109ae565b602082019150610a8a82886109ae565b602082019150610a9a82876109ae565b602082019150610aaa82866109cf565b600882019150610aba82856109cf565b600882019150610aca8284610a17565b6001820191508190509b9a505050505050505050505056fea264697066735822122091fe99b24b03429f1e07ab657ba546fcf0c5f38850a0c9471f215bb9842c763864736f6c63430008090033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "rounds", "type": "uint32" }, - { "internalType": "bytes32[2]", "name": "h", "type": "bytes32[2]" }, - { "internalType": "bytes32[4]", "name": "m", "type": "bytes32[4]" }, - { "internalType": "bytes8[2]", "name": "t", "type": "bytes8[2]" }, - { "internalType": "bool", "name": "f", "type": "bool" } - ], - "name": "F", - "outputs": [ - { "internalType": "bytes32[2]", "name": "", "type": "bytes32[2]" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "callF", - "outputs": [ - { "internalType": "bytes32[2]", "name": "", "type": "bytes32[2]" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":35:1540 contract Blake2Check {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":35:1540 contract Blake2Check {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x72de3cbd\n eq\n tag_3\n jumpi\n dup1\n 0xfc75ac47\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":65:524 function F(uint32 rounds, bytes32[2] memory h, bytes32[4] memory m, bytes8[2] memory t, bool f) public view returns (bytes32[2] memory) {... */\n tag_3:\n tag_5\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n tag_8\n jump\t// in\n tag_5:\n mload(0x40)\n tag_9\n swap2\n swap1\n tag_10\n jump\t// in\n tag_9:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":532:1534 function callF() public view returns (bytes32[2] memory) {... */\n tag_4:\n tag_11\n tag_12\n jump\t// in\n tag_11:\n mload(0x40)\n tag_13\n swap2\n swap1\n tag_10\n jump\t// in\n tag_13:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":65:524 function F(uint32 rounds, bytes32[2] memory h, bytes32[4] memory m, bytes8[2] memory t, bool f) public view returns (bytes32[2] memory) {... */\n tag_8:\n /* \"main.sol\":182:199 bytes32[2] memory */\n tag_14\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":211:235 bytes32[2] memory output */\n tag_17\n tag_15\n jump\t// in\n tag_17:\n /* \"main.sol\":246:263 bytes memory args */\n 0x00\n /* \"main.sol\":283:289 rounds */\n dup8\n /* \"main.sol\":291:292 h */\n dup8\n /* \"main.sol\":293:294 0 */\n 0x00\n /* \"main.sol\":291:295 h[0] */\n 0x02\n dup2\n lt\n tag_18\n jumpi\n tag_19\n tag_20\n jump\t// in\n tag_19:\n tag_18:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":297:298 h */\n dup9\n /* \"main.sol\":299:300 1 */\n 0x01\n /* \"main.sol\":297:301 h[1] */\n 0x02\n dup2\n lt\n tag_21\n jumpi\n tag_22\n tag_20\n jump\t// in\n tag_22:\n tag_21:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":303:304 m */\n dup9\n /* \"main.sol\":305:306 0 */\n 0x00\n /* \"main.sol\":303:307 m[0] */\n 0x04\n dup2\n lt\n tag_23\n jumpi\n tag_24\n tag_20\n jump\t// in\n tag_24:\n tag_23:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":309:310 m */\n dup10\n /* \"main.sol\":311:312 1 */\n 0x01\n /* \"main.sol\":309:313 m[1] */\n 0x04\n dup2\n lt\n tag_25\n jumpi\n tag_26\n tag_20\n jump\t// in\n tag_26:\n tag_25:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":315:316 m */\n dup11\n /* \"main.sol\":317:318 2 */\n 0x02\n /* \"main.sol\":315:319 m[2] */\n 0x04\n dup2\n lt\n tag_27\n jumpi\n tag_28\n tag_20\n jump\t// in\n tag_28:\n tag_27:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":321:322 m */\n dup12\n /* \"main.sol\":323:324 3 */\n 0x03\n /* \"main.sol\":321:325 m[3] */\n 0x04\n dup2\n lt\n tag_29\n jumpi\n tag_30\n tag_20\n jump\t// in\n tag_30:\n tag_29:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":327:328 t */\n dup12\n /* \"main.sol\":329:330 0 */\n 0x00\n /* \"main.sol\":327:331 t[0] */\n 0x02\n dup2\n lt\n tag_31\n jumpi\n tag_32\n tag_20\n jump\t// in\n tag_32:\n tag_31:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":333:334 t */\n dup13\n /* \"main.sol\":335:336 1 */\n 0x01\n /* \"main.sol\":333:337 t[1] */\n 0x02\n dup2\n lt\n tag_33\n jumpi\n tag_34\n tag_20\n jump\t// in\n tag_34:\n tag_33:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":339:340 f */\n dup13\n /* \"main.sol\":266:341 abi.encodePacked(rounds, h[0], h[1], m[0], m[1], m[2], m[3], t[0], t[1], f) */\n add(0x20, mload(0x40))\n tag_35\n swap11\n swap10\n swap9\n swap8\n swap7\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_36\n jump\t// in\n tag_35:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n /* \"main.sol\":246:341 bytes memory args = abi.encodePacked(rounds, h[0], h[1], m[0], m[1], m[2], m[3], t[0], t[1], f) */\n swap1\n pop\n /* \"main.sol\":437:441 0x40 */\n 0x40\n /* \"main.sol\":429:435 output */\n dup3\n /* \"main.sol\":423:427 0xd5 */\n 0xd5\n /* \"main.sol\":418:420 32 */\n 0x20\n /* \"main.sol\":412:416 args */\n dup5\n /* \"main.sol\":408:421 add(args, 32) */\n add\n /* \"main.sol\":402:406 0x09 */\n 0x09\n /* \"main.sol\":398:399 0 */\n 0x00\n /* \"main.sol\":394:400 not(0) */\n not\n /* \"main.sol\":383:442 staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40) */\n staticcall\n /* \"main.sol\":373:482 if iszero(staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40)) {... */\n tag_37\n jumpi\n /* \"main.sol\":468:469 0 */\n 0x00\n /* \"main.sol\":465:466 0 */\n dup1\n /* \"main.sol\":458:470 revert(0, 0) */\n revert\n /* \"main.sol\":373:482 if iszero(staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40)) {... */\n tag_37:\n /* \"main.sol\":509:515 output */\n dup2\n /* \"main.sol\":502:515 return output */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":65:524 function F(uint32 rounds, bytes32[2] memory h, bytes32[4] memory m, bytes8[2] memory t, bool f) public view returns (bytes32[2] memory) {... */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":532:1534 function callF() public view returns (bytes32[2] memory) {... */\n tag_12:\n /* \"main.sol\":570:587 bytes32[2] memory */\n tag_38\n tag_15\n jump\t// in\n tag_38:\n /* \"main.sol\":599:612 uint32 rounds */\n 0x00\n /* \"main.sol\":615:617 12 */\n 0x0c\n /* \"main.sol\":599:617 uint32 rounds = 12 */\n swap1\n pop\n /* \"main.sol\":628:647 bytes32[2] memory h */\n tag_40\n tag_15\n jump\t// in\n tag_40:\n /* \"main.sol\":657:733 h[0] = hex\"48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5\" */\n 0x48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5\n /* \"main.sol\":657:658 h */\n dup2\n /* \"main.sol\":659:660 0 */\n 0x00\n /* \"main.sol\":657:661 h[0] */\n 0x02\n dup2\n lt\n tag_41\n jumpi\n tag_42\n tag_20\n jump\t// in\n tag_42:\n tag_41:\n 0x20\n mul\n add\n /* \"main.sol\":657:733 h[0] = hex\"48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5\" */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":743:819 h[1] = hex\"d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b\" */\n 0xd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b\n /* \"main.sol\":743:744 h */\n dup2\n /* \"main.sol\":745:746 1 */\n 0x01\n /* \"main.sol\":743:747 h[1] */\n 0x02\n dup2\n lt\n tag_43\n jumpi\n tag_44\n tag_20\n jump\t// in\n tag_44:\n tag_43:\n 0x20\n mul\n add\n /* \"main.sol\":743:819 h[1] = hex\"d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b\" */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":830:849 bytes32[4] memory m */\n tag_45\n tag_46\n jump\t// in\n tag_45:\n /* \"main.sol\":859:935 m[0] = hex\"6162630000000000000000000000000000000000000000000000000000000000\" */\n 0x6162630000000000000000000000000000000000000000000000000000000000\n /* \"main.sol\":859:860 m */\n dup2\n /* \"main.sol\":861:862 0 */\n 0x00\n /* \"main.sol\":859:863 m[0] */\n 0x04\n dup2\n lt\n tag_47\n jumpi\n tag_48\n tag_20\n jump\t// in\n tag_48:\n tag_47:\n 0x20\n mul\n add\n /* \"main.sol\":859:935 m[0] = hex\"6162630000000000000000000000000000000000000000000000000000000000\" */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":945:1021 m[1] = hex\"0000000000000000000000000000000000000000000000000000000000000000\" */\n 0x00\n /* \"main.sol\":945:946 m */\n dup2\n /* \"main.sol\":947:948 1 */\n 0x01\n /* \"main.sol\":945:949 m[1] */\n 0x04\n dup2\n lt\n tag_49\n jumpi\n tag_50\n tag_20\n jump\t// in\n tag_50:\n tag_49:\n 0x20\n mul\n add\n /* \"main.sol\":945:1021 m[1] = hex\"0000000000000000000000000000000000000000000000000000000000000000\" */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":1031:1107 m[2] = hex\"0000000000000000000000000000000000000000000000000000000000000000\" */\n 0x00\n /* \"main.sol\":1031:1032 m */\n dup2\n /* \"main.sol\":1033:1034 2 */\n 0x02\n /* \"main.sol\":1031:1035 m[2] */\n 0x04\n dup2\n lt\n tag_51\n jumpi\n tag_52\n tag_20\n jump\t// in\n tag_52:\n tag_51:\n 0x20\n mul\n add\n /* \"main.sol\":1031:1107 m[2] = hex\"0000000000000000000000000000000000000000000000000000000000000000\" */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":1117:1193 m[3] = hex\"0000000000000000000000000000000000000000000000000000000000000000\" */\n 0x00\n /* \"main.sol\":1117:1118 m */\n dup2\n /* \"main.sol\":1119:1120 3 */\n 0x03\n /* \"main.sol\":1117:1121 m[3] */\n 0x04\n dup2\n lt\n tag_53\n jumpi\n tag_54\n tag_20\n jump\t// in\n tag_54:\n tag_53:\n 0x20\n mul\n add\n /* \"main.sol\":1117:1193 m[3] = hex\"0000000000000000000000000000000000000000000000000000000000000000\" */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":1204:1222 bytes8[2] memory t */\n tag_55\n tag_56\n jump\t// in\n tag_55:\n /* \"main.sol\":1232:1252 t[0] = hex\"03000000\" */\n 0x0300000000000000000000000000000000000000000000000000000000000000\n /* \"main.sol\":1232:1233 t */\n dup2\n /* \"main.sol\":1234:1235 0 */\n 0x00\n /* \"main.sol\":1232:1236 t[0] */\n 0x02\n dup2\n lt\n tag_57\n jumpi\n tag_58\n tag_20\n jump\t// in\n tag_58:\n tag_57:\n 0x20\n mul\n add\n /* \"main.sol\":1232:1252 t[0] = hex\"03000000\" */\n swap1\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n swap1\n dup2\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":1262:1282 t[1] = hex\"00000000\" */\n 0x00\n /* \"main.sol\":1262:1263 t */\n dup2\n /* \"main.sol\":1264:1265 1 */\n 0x01\n /* \"main.sol\":1262:1266 t[1] */\n 0x02\n dup2\n lt\n tag_59\n jumpi\n tag_60\n tag_20\n jump\t// in\n tag_60:\n tag_59:\n 0x20\n mul\n add\n /* \"main.sol\":1262:1282 t[1] = hex\"00000000\" */\n swap1\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n swap1\n dup2\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":1293:1299 bool f */\n 0x00\n /* \"main.sol\":1302:1306 true */\n 0x01\n /* \"main.sol\":1293:1306 bool f = true */\n swap1\n pop\n /* \"main.sol\":1504:1525 F(rounds, h, m, t, f) */\n tag_61\n /* \"main.sol\":1506:1512 rounds */\n dup6\n /* \"main.sol\":1514:1515 h */\n dup6\n /* \"main.sol\":1517:1518 m */\n dup6\n /* \"main.sol\":1520:1521 t */\n dup6\n /* \"main.sol\":1523:1524 f */\n dup6\n /* \"main.sol\":1504:1505 F */\n tag_8\n /* \"main.sol\":1504:1525 F(rounds, h, m, t, f) */\n jump\t// in\n tag_61:\n /* \"main.sol\":1497:1525 return F(rounds, h, m, t, f) */\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n /* \"main.sol\":532:1534 function callF() public view returns (bytes32[2] memory) {... */\n swap1\n jump\t// out\n tag_15:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n tag_46:\n mload(0x40)\n dup1\n 0x80\n add\n 0x40\n mstore\n dup1\n 0x04\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n tag_56:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_62:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_63:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:427 */\n tag_65:\n /* \"#utility.yul\":370:377 */\n 0x00\n /* \"#utility.yul\":410:420 */\n 0xffffffff\n /* \"#utility.yul\":403:408 */\n dup3\n /* \"#utility.yul\":399:421 */\n and\n /* \"#utility.yul\":388:421 */\n swap1\n pop\n /* \"#utility.yul\":334:427 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":433:553 */\n tag_66:\n /* \"#utility.yul\":505:528 */\n tag_116\n /* \"#utility.yul\":522:527 */\n dup2\n /* \"#utility.yul\":505:528 */\n tag_65\n jump\t// in\n tag_116:\n /* \"#utility.yul\":498:503 */\n dup2\n /* \"#utility.yul\":495:529 */\n eq\n /* \"#utility.yul\":485:547 */\n tag_117\n jumpi\n /* \"#utility.yul\":543:544 */\n 0x00\n /* \"#utility.yul\":540:541 */\n dup1\n /* \"#utility.yul\":533:545 */\n revert\n /* \"#utility.yul\":485:547 */\n tag_117:\n /* \"#utility.yul\":433:553 */\n pop\n jump\t// out\n /* \"#utility.yul\":559:696 */\n tag_67:\n /* \"#utility.yul\":604:609 */\n 0x00\n /* \"#utility.yul\":642:648 */\n dup2\n /* \"#utility.yul\":629:649 */\n calldataload\n /* \"#utility.yul\":620:649 */\n swap1\n pop\n /* \"#utility.yul\":658:690 */\n tag_119\n /* \"#utility.yul\":684:689 */\n dup2\n /* \"#utility.yul\":658:690 */\n tag_66\n jump\t// in\n tag_119:\n /* \"#utility.yul\":559:696 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":702:819 */\n tag_68:\n /* \"#utility.yul\":811:812 */\n 0x00\n /* \"#utility.yul\":808:809 */\n dup1\n /* \"#utility.yul\":801:813 */\n revert\n /* \"#utility.yul\":825:927 */\n tag_69:\n /* \"#utility.yul\":866:872 */\n 0x00\n /* \"#utility.yul\":917:919 */\n 0x1f\n /* \"#utility.yul\":913:920 */\n not\n /* \"#utility.yul\":908:910 */\n 0x1f\n /* \"#utility.yul\":901:906 */\n dup4\n /* \"#utility.yul\":897:911 */\n add\n /* \"#utility.yul\":893:921 */\n and\n /* \"#utility.yul\":883:921 */\n swap1\n pop\n /* \"#utility.yul\":825:927 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":933:1113 */\n tag_70:\n /* \"#utility.yul\":981:1058 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":978:979 */\n 0x00\n /* \"#utility.yul\":971:1059 */\n mstore\n /* \"#utility.yul\":1078:1082 */\n 0x41\n /* \"#utility.yul\":1075:1076 */\n 0x04\n /* \"#utility.yul\":1068:1083 */\n mstore\n /* \"#utility.yul\":1102:1106 */\n 0x24\n /* \"#utility.yul\":1099:1100 */\n 0x00\n /* \"#utility.yul\":1092:1107 */\n revert\n /* \"#utility.yul\":1119:1400 */\n tag_71:\n /* \"#utility.yul\":1202:1229 */\n tag_124\n /* \"#utility.yul\":1224:1228 */\n dup3\n /* \"#utility.yul\":1202:1229 */\n tag_69\n jump\t// in\n tag_124:\n /* \"#utility.yul\":1194:1200 */\n dup2\n /* \"#utility.yul\":1190:1230 */\n add\n /* \"#utility.yul\":1332:1338 */\n dup2\n /* \"#utility.yul\":1320:1330 */\n dup2\n /* \"#utility.yul\":1317:1339 */\n lt\n /* \"#utility.yul\":1296:1314 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1284:1294 */\n dup3\n /* \"#utility.yul\":1281:1315 */\n gt\n /* \"#utility.yul\":1278:1340 */\n or\n /* \"#utility.yul\":1275:1363 */\n iszero\n tag_125\n jumpi\n /* \"#utility.yul\":1343:1361 */\n tag_126\n tag_70\n jump\t// in\n tag_126:\n /* \"#utility.yul\":1275:1363 */\n tag_125:\n /* \"#utility.yul\":1383:1393 */\n dup1\n /* \"#utility.yul\":1379:1381 */\n 0x40\n /* \"#utility.yul\":1372:1394 */\n mstore\n /* \"#utility.yul\":1162:1400 */\n pop\n /* \"#utility.yul\":1119:1400 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1406:1535 */\n tag_72:\n /* \"#utility.yul\":1440:1446 */\n 0x00\n /* \"#utility.yul\":1467:1487 */\n tag_128\n tag_62\n jump\t// in\n tag_128:\n /* \"#utility.yul\":1457:1487 */\n swap1\n pop\n /* \"#utility.yul\":1496:1529 */\n tag_129\n /* \"#utility.yul\":1524:1528 */\n dup3\n /* \"#utility.yul\":1516:1522 */\n dup3\n /* \"#utility.yul\":1496:1529 */\n tag_71\n jump\t// in\n tag_129:\n /* \"#utility.yul\":1406:1535 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1541:1790 */\n tag_73:\n /* \"#utility.yul\":1616:1620 */\n 0x00\n /* \"#utility.yul\":1706:1724 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1698:1704 */\n dup3\n /* \"#utility.yul\":1695:1725 */\n gt\n /* \"#utility.yul\":1692:1748 */\n iszero\n tag_131\n jumpi\n /* \"#utility.yul\":1728:1746 */\n tag_132\n tag_70\n jump\t// in\n tag_132:\n /* \"#utility.yul\":1692:1748 */\n tag_131:\n /* \"#utility.yul\":1778:1782 */\n 0x20\n /* \"#utility.yul\":1770:1776 */\n dup3\n /* \"#utility.yul\":1766:1783 */\n mul\n /* \"#utility.yul\":1758:1783 */\n swap1\n pop\n /* \"#utility.yul\":1541:1790 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1796:1913 */\n tag_74:\n /* \"#utility.yul\":1905:1906 */\n 0x00\n /* \"#utility.yul\":1902:1903 */\n dup1\n /* \"#utility.yul\":1895:1907 */\n revert\n /* \"#utility.yul\":1919:1996 */\n tag_75:\n /* \"#utility.yul\":1956:1963 */\n 0x00\n /* \"#utility.yul\":1985:1990 */\n dup2\n /* \"#utility.yul\":1974:1990 */\n swap1\n pop\n /* \"#utility.yul\":1919:1996 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2002:2124 */\n tag_76:\n /* \"#utility.yul\":2075:2099 */\n tag_136\n /* \"#utility.yul\":2093:2098 */\n dup2\n /* \"#utility.yul\":2075:2099 */\n tag_75\n jump\t// in\n tag_136:\n /* \"#utility.yul\":2068:2073 */\n dup2\n /* \"#utility.yul\":2065:2100 */\n eq\n /* \"#utility.yul\":2055:2118 */\n tag_137\n jumpi\n /* \"#utility.yul\":2114:2115 */\n 0x00\n /* \"#utility.yul\":2111:2112 */\n dup1\n /* \"#utility.yul\":2104:2116 */\n revert\n /* \"#utility.yul\":2055:2118 */\n tag_137:\n /* \"#utility.yul\":2002:2124 */\n pop\n jump\t// out\n /* \"#utility.yul\":2130:2269 */\n tag_77:\n /* \"#utility.yul\":2176:2181 */\n 0x00\n /* \"#utility.yul\":2214:2220 */\n dup2\n /* \"#utility.yul\":2201:2221 */\n calldataload\n /* \"#utility.yul\":2192:2221 */\n swap1\n pop\n /* \"#utility.yul\":2230:2263 */\n tag_139\n /* \"#utility.yul\":2257:2262 */\n dup2\n /* \"#utility.yul\":2230:2263 */\n tag_76\n jump\t// in\n tag_139:\n /* \"#utility.yul\":2130:2269 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2293:2936 */\n tag_78:\n /* \"#utility.yul\":2387:2392 */\n 0x00\n /* \"#utility.yul\":2412:2491 */\n tag_141\n /* \"#utility.yul\":2428:2490 */\n tag_142\n /* \"#utility.yul\":2483:2489 */\n dup5\n /* \"#utility.yul\":2428:2490 */\n tag_73\n jump\t// in\n tag_142:\n /* \"#utility.yul\":2412:2491 */\n tag_72\n jump\t// in\n tag_141:\n /* \"#utility.yul\":2403:2491 */\n swap1\n pop\n /* \"#utility.yul\":2511:2516 */\n dup1\n /* \"#utility.yul\":2564:2568 */\n 0x20\n /* \"#utility.yul\":2556:2562 */\n dup5\n /* \"#utility.yul\":2552:2569 */\n mul\n /* \"#utility.yul\":2544:2550 */\n dup4\n /* \"#utility.yul\":2540:2570 */\n add\n /* \"#utility.yul\":2593:2596 */\n dup6\n /* \"#utility.yul\":2585:2591 */\n dup2\n /* \"#utility.yul\":2582:2597 */\n gt\n /* \"#utility.yul\":2579:2701 */\n iszero\n tag_143\n jumpi\n /* \"#utility.yul\":2612:2691 */\n tag_144\n tag_74\n jump\t// in\n tag_144:\n /* \"#utility.yul\":2579:2701 */\n tag_143:\n /* \"#utility.yul\":2727:2733 */\n dup4\n /* \"#utility.yul\":2710:2930 */\n tag_145:\n /* \"#utility.yul\":2744:2750 */\n dup2\n /* \"#utility.yul\":2739:2742 */\n dup2\n /* \"#utility.yul\":2736:2751 */\n lt\n /* \"#utility.yul\":2710:2930 */\n iszero\n tag_147\n jumpi\n /* \"#utility.yul\":2819:2822 */\n dup1\n /* \"#utility.yul\":2848:2885 */\n tag_148\n /* \"#utility.yul\":2881:2884 */\n dup9\n /* \"#utility.yul\":2869:2879 */\n dup3\n /* \"#utility.yul\":2848:2885 */\n tag_77\n jump\t// in\n tag_148:\n /* \"#utility.yul\":2843:2846 */\n dup5\n /* \"#utility.yul\":2836:2886 */\n mstore\n /* \"#utility.yul\":2915:2919 */\n 0x20\n /* \"#utility.yul\":2910:2913 */\n dup5\n /* \"#utility.yul\":2906:2920 */\n add\n /* \"#utility.yul\":2899:2920 */\n swap4\n pop\n /* \"#utility.yul\":2786:2930 */\n pop\n /* \"#utility.yul\":2770:2774 */\n 0x20\n /* \"#utility.yul\":2765:2768 */\n dup2\n /* \"#utility.yul\":2761:2775 */\n add\n /* \"#utility.yul\":2754:2775 */\n swap1\n pop\n /* \"#utility.yul\":2710:2930 */\n jump(tag_145)\n tag_147:\n /* \"#utility.yul\":2714:2735 */\n pop\n /* \"#utility.yul\":2393:2936 */\n pop\n pop\n /* \"#utility.yul\":2293:2936 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2960:3299 */\n tag_79:\n /* \"#utility.yul\":3029:3034 */\n 0x00\n /* \"#utility.yul\":3078:3081 */\n dup3\n /* \"#utility.yul\":3071:3075 */\n 0x1f\n /* \"#utility.yul\":3063:3069 */\n dup4\n /* \"#utility.yul\":3059:3076 */\n add\n /* \"#utility.yul\":3055:3082 */\n slt\n /* \"#utility.yul\":3045:3167 */\n tag_150\n jumpi\n /* \"#utility.yul\":3086:3165 */\n tag_151\n tag_68\n jump\t// in\n tag_151:\n /* \"#utility.yul\":3045:3167 */\n tag_150:\n /* \"#utility.yul\":3190:3194 */\n 0x02\n /* \"#utility.yul\":3212:3293 */\n tag_152\n /* \"#utility.yul\":3289:3292 */\n dup5\n /* \"#utility.yul\":3281:3287 */\n dup3\n /* \"#utility.yul\":3273:3279 */\n dup6\n /* \"#utility.yul\":3212:3293 */\n tag_78\n jump\t// in\n tag_152:\n /* \"#utility.yul\":3203:3293 */\n swap2\n pop\n /* \"#utility.yul\":3035:3299 */\n pop\n /* \"#utility.yul\":2960:3299 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3305:3554 */\n tag_80:\n /* \"#utility.yul\":3380:3384 */\n 0x00\n /* \"#utility.yul\":3470:3488 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3462:3468 */\n dup3\n /* \"#utility.yul\":3459:3489 */\n gt\n /* \"#utility.yul\":3456:3512 */\n iszero\n tag_154\n jumpi\n /* \"#utility.yul\":3492:3510 */\n tag_155\n tag_70\n jump\t// in\n tag_155:\n /* \"#utility.yul\":3456:3512 */\n tag_154:\n /* \"#utility.yul\":3542:3546 */\n 0x20\n /* \"#utility.yul\":3534:3540 */\n dup3\n /* \"#utility.yul\":3530:3547 */\n mul\n /* \"#utility.yul\":3522:3547 */\n swap1\n pop\n /* \"#utility.yul\":3305:3554 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3578:4221 */\n tag_81:\n /* \"#utility.yul\":3672:3677 */\n 0x00\n /* \"#utility.yul\":3697:3776 */\n tag_157\n /* \"#utility.yul\":3713:3775 */\n tag_158\n /* \"#utility.yul\":3768:3774 */\n dup5\n /* \"#utility.yul\":3713:3775 */\n tag_80\n jump\t// in\n tag_158:\n /* \"#utility.yul\":3697:3776 */\n tag_72\n jump\t// in\n tag_157:\n /* \"#utility.yul\":3688:3776 */\n swap1\n pop\n /* \"#utility.yul\":3796:3801 */\n dup1\n /* \"#utility.yul\":3849:3853 */\n 0x20\n /* \"#utility.yul\":3841:3847 */\n dup5\n /* \"#utility.yul\":3837:3854 */\n mul\n /* \"#utility.yul\":3829:3835 */\n dup4\n /* \"#utility.yul\":3825:3855 */\n add\n /* \"#utility.yul\":3878:3881 */\n dup6\n /* \"#utility.yul\":3870:3876 */\n dup2\n /* \"#utility.yul\":3867:3882 */\n gt\n /* \"#utility.yul\":3864:3986 */\n iszero\n tag_159\n jumpi\n /* \"#utility.yul\":3897:3976 */\n tag_160\n tag_74\n jump\t// in\n tag_160:\n /* \"#utility.yul\":3864:3986 */\n tag_159:\n /* \"#utility.yul\":4012:4018 */\n dup4\n /* \"#utility.yul\":3995:4215 */\n tag_161:\n /* \"#utility.yul\":4029:4035 */\n dup2\n /* \"#utility.yul\":4024:4027 */\n dup2\n /* \"#utility.yul\":4021:4036 */\n lt\n /* \"#utility.yul\":3995:4215 */\n iszero\n tag_163\n jumpi\n /* \"#utility.yul\":4104:4107 */\n dup1\n /* \"#utility.yul\":4133:4170 */\n tag_164\n /* \"#utility.yul\":4166:4169 */\n dup9\n /* \"#utility.yul\":4154:4164 */\n dup3\n /* \"#utility.yul\":4133:4170 */\n tag_77\n jump\t// in\n tag_164:\n /* \"#utility.yul\":4128:4131 */\n dup5\n /* \"#utility.yul\":4121:4171 */\n mstore\n /* \"#utility.yul\":4200:4204 */\n 0x20\n /* \"#utility.yul\":4195:4198 */\n dup5\n /* \"#utility.yul\":4191:4205 */\n add\n /* \"#utility.yul\":4184:4205 */\n swap4\n pop\n /* \"#utility.yul\":4071:4215 */\n pop\n /* \"#utility.yul\":4055:4059 */\n 0x20\n /* \"#utility.yul\":4050:4053 */\n dup2\n /* \"#utility.yul\":4046:4060 */\n add\n /* \"#utility.yul\":4039:4060 */\n swap1\n pop\n /* \"#utility.yul\":3995:4215 */\n jump(tag_161)\n tag_163:\n /* \"#utility.yul\":3999:4020 */\n pop\n /* \"#utility.yul\":3678:4221 */\n pop\n pop\n /* \"#utility.yul\":3578:4221 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4245:4584 */\n tag_82:\n /* \"#utility.yul\":4314:4319 */\n 0x00\n /* \"#utility.yul\":4363:4366 */\n dup3\n /* \"#utility.yul\":4356:4360 */\n 0x1f\n /* \"#utility.yul\":4348:4354 */\n dup4\n /* \"#utility.yul\":4344:4361 */\n add\n /* \"#utility.yul\":4340:4367 */\n slt\n /* \"#utility.yul\":4330:4452 */\n tag_166\n jumpi\n /* \"#utility.yul\":4371:4450 */\n tag_167\n tag_68\n jump\t// in\n tag_167:\n /* \"#utility.yul\":4330:4452 */\n tag_166:\n /* \"#utility.yul\":4475:4479 */\n 0x04\n /* \"#utility.yul\":4497:4578 */\n tag_168\n /* \"#utility.yul\":4574:4577 */\n dup5\n /* \"#utility.yul\":4566:4572 */\n dup3\n /* \"#utility.yul\":4558:4564 */\n dup6\n /* \"#utility.yul\":4497:4578 */\n tag_81\n jump\t// in\n tag_168:\n /* \"#utility.yul\":4488:4578 */\n swap2\n pop\n /* \"#utility.yul\":4320:4584 */\n pop\n /* \"#utility.yul\":4245:4584 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4590:4838 */\n tag_83:\n /* \"#utility.yul\":4664:4668 */\n 0x00\n /* \"#utility.yul\":4754:4772 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4746:4752 */\n dup3\n /* \"#utility.yul\":4743:4773 */\n gt\n /* \"#utility.yul\":4740:4796 */\n iszero\n tag_170\n jumpi\n /* \"#utility.yul\":4776:4794 */\n tag_171\n tag_70\n jump\t// in\n tag_171:\n /* \"#utility.yul\":4740:4796 */\n tag_170:\n /* \"#utility.yul\":4826:4830 */\n 0x20\n /* \"#utility.yul\":4818:4824 */\n dup3\n /* \"#utility.yul\":4814:4831 */\n mul\n /* \"#utility.yul\":4806:4831 */\n swap1\n pop\n /* \"#utility.yul\":4590:4838 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4844:4993 */\n tag_84:\n /* \"#utility.yul\":4880:4887 */\n 0x00\n /* \"#utility.yul\":4920:4986 */\n 0xffffffffffffffff000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":4913:4918 */\n dup3\n /* \"#utility.yul\":4909:4987 */\n and\n /* \"#utility.yul\":4898:4987 */\n swap1\n pop\n /* \"#utility.yul\":4844:4993 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4999:5119 */\n tag_85:\n /* \"#utility.yul\":5071:5094 */\n tag_174\n /* \"#utility.yul\":5088:5093 */\n dup2\n /* \"#utility.yul\":5071:5094 */\n tag_84\n jump\t// in\n tag_174:\n /* \"#utility.yul\":5064:5069 */\n dup2\n /* \"#utility.yul\":5061:5095 */\n eq\n /* \"#utility.yul\":5051:5113 */\n tag_175\n jumpi\n /* \"#utility.yul\":5109:5110 */\n 0x00\n /* \"#utility.yul\":5106:5107 */\n dup1\n /* \"#utility.yul\":5099:5111 */\n revert\n /* \"#utility.yul\":5051:5113 */\n tag_175:\n /* \"#utility.yul\":4999:5119 */\n pop\n jump\t// out\n /* \"#utility.yul\":5125:5262 */\n tag_86:\n /* \"#utility.yul\":5170:5175 */\n 0x00\n /* \"#utility.yul\":5208:5214 */\n dup2\n /* \"#utility.yul\":5195:5215 */\n calldataload\n /* \"#utility.yul\":5186:5215 */\n swap1\n pop\n /* \"#utility.yul\":5224:5256 */\n tag_177\n /* \"#utility.yul\":5250:5255 */\n dup2\n /* \"#utility.yul\":5224:5256 */\n tag_85\n jump\t// in\n tag_177:\n /* \"#utility.yul\":5125:5262 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5285:5925 */\n tag_87:\n /* \"#utility.yul\":5378:5383 */\n 0x00\n /* \"#utility.yul\":5403:5481 */\n tag_179\n /* \"#utility.yul\":5419:5480 */\n tag_180\n /* \"#utility.yul\":5473:5479 */\n dup5\n /* \"#utility.yul\":5419:5480 */\n tag_83\n jump\t// in\n tag_180:\n /* \"#utility.yul\":5403:5481 */\n tag_72\n jump\t// in\n tag_179:\n /* \"#utility.yul\":5394:5481 */\n swap1\n pop\n /* \"#utility.yul\":5501:5506 */\n dup1\n /* \"#utility.yul\":5554:5558 */\n 0x20\n /* \"#utility.yul\":5546:5552 */\n dup5\n /* \"#utility.yul\":5542:5559 */\n mul\n /* \"#utility.yul\":5534:5540 */\n dup4\n /* \"#utility.yul\":5530:5560 */\n add\n /* \"#utility.yul\":5583:5586 */\n dup6\n /* \"#utility.yul\":5575:5581 */\n dup2\n /* \"#utility.yul\":5572:5587 */\n gt\n /* \"#utility.yul\":5569:5691 */\n iszero\n tag_181\n jumpi\n /* \"#utility.yul\":5602:5681 */\n tag_182\n tag_74\n jump\t// in\n tag_182:\n /* \"#utility.yul\":5569:5691 */\n tag_181:\n /* \"#utility.yul\":5717:5723 */\n dup4\n /* \"#utility.yul\":5700:5919 */\n tag_183:\n /* \"#utility.yul\":5734:5740 */\n dup2\n /* \"#utility.yul\":5729:5732 */\n dup2\n /* \"#utility.yul\":5726:5741 */\n lt\n /* \"#utility.yul\":5700:5919 */\n iszero\n tag_185\n jumpi\n /* \"#utility.yul\":5809:5812 */\n dup1\n /* \"#utility.yul\":5838:5874 */\n tag_186\n /* \"#utility.yul\":5870:5873 */\n dup9\n /* \"#utility.yul\":5858:5868 */\n dup3\n /* \"#utility.yul\":5838:5874 */\n tag_86\n jump\t// in\n tag_186:\n /* \"#utility.yul\":5833:5836 */\n dup5\n /* \"#utility.yul\":5826:5875 */\n mstore\n /* \"#utility.yul\":5904:5908 */\n 0x20\n /* \"#utility.yul\":5899:5902 */\n dup5\n /* \"#utility.yul\":5895:5909 */\n add\n /* \"#utility.yul\":5888:5909 */\n swap4\n pop\n /* \"#utility.yul\":5776:5919 */\n pop\n /* \"#utility.yul\":5760:5764 */\n 0x20\n /* \"#utility.yul\":5755:5758 */\n dup2\n /* \"#utility.yul\":5751:5765 */\n add\n /* \"#utility.yul\":5744:5765 */\n swap1\n pop\n /* \"#utility.yul\":5700:5919 */\n jump(tag_183)\n tag_185:\n /* \"#utility.yul\":5704:5725 */\n pop\n /* \"#utility.yul\":5384:5925 */\n pop\n pop\n /* \"#utility.yul\":5285:5925 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5948:6285 */\n tag_88:\n /* \"#utility.yul\":6016:6021 */\n 0x00\n /* \"#utility.yul\":6065:6068 */\n dup3\n /* \"#utility.yul\":6058:6062 */\n 0x1f\n /* \"#utility.yul\":6050:6056 */\n dup4\n /* \"#utility.yul\":6046:6063 */\n add\n /* \"#utility.yul\":6042:6069 */\n slt\n /* \"#utility.yul\":6032:6154 */\n tag_188\n jumpi\n /* \"#utility.yul\":6073:6152 */\n tag_189\n tag_68\n jump\t// in\n tag_189:\n /* \"#utility.yul\":6032:6154 */\n tag_188:\n /* \"#utility.yul\":6177:6181 */\n 0x02\n /* \"#utility.yul\":6199:6279 */\n tag_190\n /* \"#utility.yul\":6275:6278 */\n dup5\n /* \"#utility.yul\":6267:6273 */\n dup3\n /* \"#utility.yul\":6259:6265 */\n dup6\n /* \"#utility.yul\":6199:6279 */\n tag_87\n jump\t// in\n tag_190:\n /* \"#utility.yul\":6190:6279 */\n swap2\n pop\n /* \"#utility.yul\":6022:6285 */\n pop\n /* \"#utility.yul\":5948:6285 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6291:6381 */\n tag_89:\n /* \"#utility.yul\":6325:6332 */\n 0x00\n /* \"#utility.yul\":6368:6373 */\n dup2\n /* \"#utility.yul\":6361:6374 */\n iszero\n /* \"#utility.yul\":6354:6375 */\n iszero\n /* \"#utility.yul\":6343:6375 */\n swap1\n pop\n /* \"#utility.yul\":6291:6381 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6387:6503 */\n tag_90:\n /* \"#utility.yul\":6457:6478 */\n tag_193\n /* \"#utility.yul\":6472:6477 */\n dup2\n /* \"#utility.yul\":6457:6478 */\n tag_89\n jump\t// in\n tag_193:\n /* \"#utility.yul\":6450:6455 */\n dup2\n /* \"#utility.yul\":6447:6479 */\n eq\n /* \"#utility.yul\":6437:6497 */\n tag_194\n jumpi\n /* \"#utility.yul\":6493:6494 */\n 0x00\n /* \"#utility.yul\":6490:6491 */\n dup1\n /* \"#utility.yul\":6483:6495 */\n revert\n /* \"#utility.yul\":6437:6497 */\n tag_194:\n /* \"#utility.yul\":6387:6503 */\n pop\n jump\t// out\n /* \"#utility.yul\":6509:6642 */\n tag_91:\n /* \"#utility.yul\":6552:6557 */\n 0x00\n /* \"#utility.yul\":6590:6596 */\n dup2\n /* \"#utility.yul\":6577:6597 */\n calldataload\n /* \"#utility.yul\":6568:6597 */\n swap1\n pop\n /* \"#utility.yul\":6606:6636 */\n tag_196\n /* \"#utility.yul\":6630:6635 */\n dup2\n /* \"#utility.yul\":6606:6636 */\n tag_90\n jump\t// in\n tag_196:\n /* \"#utility.yul\":6509:6642 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6648:7688 */\n tag_7:\n /* \"#utility.yul\":6807:6813 */\n 0x00\n /* \"#utility.yul\":6815:6821 */\n dup1\n /* \"#utility.yul\":6823:6829 */\n 0x00\n /* \"#utility.yul\":6831:6837 */\n dup1\n /* \"#utility.yul\":6839:6845 */\n 0x00\n /* \"#utility.yul\":6888:6891 */\n 0x0140\n /* \"#utility.yul\":6876:6885 */\n dup7\n /* \"#utility.yul\":6867:6874 */\n dup9\n /* \"#utility.yul\":6863:6886 */\n sub\n /* \"#utility.yul\":6859:6892 */\n slt\n /* \"#utility.yul\":6856:6976 */\n iszero\n tag_198\n jumpi\n /* \"#utility.yul\":6895:6974 */\n tag_199\n tag_63\n jump\t// in\n tag_199:\n /* \"#utility.yul\":6856:6976 */\n tag_198:\n /* \"#utility.yul\":7015:7016 */\n 0x00\n /* \"#utility.yul\":7040:7092 */\n tag_200\n /* \"#utility.yul\":7084:7091 */\n dup9\n /* \"#utility.yul\":7075:7081 */\n dup3\n /* \"#utility.yul\":7064:7073 */\n dup10\n /* \"#utility.yul\":7060:7082 */\n add\n /* \"#utility.yul\":7040:7092 */\n tag_67\n jump\t// in\n tag_200:\n /* \"#utility.yul\":7030:7092 */\n swap6\n pop\n /* \"#utility.yul\":6986:7102 */\n pop\n /* \"#utility.yul\":7141:7143 */\n 0x20\n /* \"#utility.yul\":7167:7243 */\n tag_201\n /* \"#utility.yul\":7235:7242 */\n dup9\n /* \"#utility.yul\":7226:7232 */\n dup3\n /* \"#utility.yul\":7215:7224 */\n dup10\n /* \"#utility.yul\":7211:7233 */\n add\n /* \"#utility.yul\":7167:7243 */\n tag_79\n jump\t// in\n tag_201:\n /* \"#utility.yul\":7157:7243 */\n swap5\n pop\n /* \"#utility.yul\":7112:7253 */\n pop\n /* \"#utility.yul\":7292:7294 */\n 0x60\n /* \"#utility.yul\":7318:7394 */\n tag_202\n /* \"#utility.yul\":7386:7393 */\n dup9\n /* \"#utility.yul\":7377:7383 */\n dup3\n /* \"#utility.yul\":7366:7375 */\n dup10\n /* \"#utility.yul\":7362:7384 */\n add\n /* \"#utility.yul\":7318:7394 */\n tag_82\n jump\t// in\n tag_202:\n /* \"#utility.yul\":7308:7394 */\n swap4\n pop\n /* \"#utility.yul\":7263:7404 */\n pop\n /* \"#utility.yul\":7443:7446 */\n 0xe0\n /* \"#utility.yul\":7470:7545 */\n tag_203\n /* \"#utility.yul\":7537:7544 */\n dup9\n /* \"#utility.yul\":7528:7534 */\n dup3\n /* \"#utility.yul\":7517:7526 */\n dup10\n /* \"#utility.yul\":7513:7535 */\n add\n /* \"#utility.yul\":7470:7545 */\n tag_88\n jump\t// in\n tag_203:\n /* \"#utility.yul\":7460:7545 */\n swap3\n pop\n /* \"#utility.yul\":7414:7555 */\n pop\n /* \"#utility.yul\":7594:7597 */\n 0x0120\n /* \"#utility.yul\":7621:7671 */\n tag_204\n /* \"#utility.yul\":7663:7670 */\n dup9\n /* \"#utility.yul\":7654:7660 */\n dup3\n /* \"#utility.yul\":7643:7652 */\n dup10\n /* \"#utility.yul\":7639:7661 */\n add\n /* \"#utility.yul\":7621:7671 */\n tag_91\n jump\t// in\n tag_204:\n /* \"#utility.yul\":7611:7671 */\n swap2\n pop\n /* \"#utility.yul\":7565:7681 */\n pop\n /* \"#utility.yul\":6648:7688 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":7694:7798 */\n tag_92:\n /* \"#utility.yul\":7759:7765 */\n 0x00\n /* \"#utility.yul\":7787:7791 */\n 0x02\n /* \"#utility.yul\":7777:7791 */\n swap1\n pop\n /* \"#utility.yul\":7694:7798 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7804:7947 */\n tag_93:\n /* \"#utility.yul\":7901:7912 */\n 0x00\n /* \"#utility.yul\":7938:7941 */\n dup2\n /* \"#utility.yul\":7923:7941 */\n swap1\n pop\n /* \"#utility.yul\":7804:7947 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7953:8051 */\n tag_94:\n /* \"#utility.yul\":8018:8022 */\n 0x00\n /* \"#utility.yul\":8041:8044 */\n dup2\n /* \"#utility.yul\":8033:8044 */\n swap1\n pop\n /* \"#utility.yul\":7953:8051 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8057:8165 */\n tag_95:\n /* \"#utility.yul\":8134:8158 */\n tag_209\n /* \"#utility.yul\":8152:8157 */\n dup2\n /* \"#utility.yul\":8134:8158 */\n tag_75\n jump\t// in\n tag_209:\n /* \"#utility.yul\":8129:8132 */\n dup3\n /* \"#utility.yul\":8122:8159 */\n mstore\n /* \"#utility.yul\":8057:8165 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8171:8350 */\n tag_96:\n /* \"#utility.yul\":8240:8250 */\n 0x00\n /* \"#utility.yul\":8261:8307 */\n tag_211\n /* \"#utility.yul\":8303:8306 */\n dup4\n /* \"#utility.yul\":8295:8301 */\n dup4\n /* \"#utility.yul\":8261:8307 */\n tag_95\n jump\t// in\n tag_211:\n /* \"#utility.yul\":8339:8343 */\n 0x20\n /* \"#utility.yul\":8334:8337 */\n dup4\n /* \"#utility.yul\":8330:8344 */\n add\n /* \"#utility.yul\":8316:8344 */\n swap1\n pop\n /* \"#utility.yul\":8171:8350 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8356:8467 */\n tag_97:\n /* \"#utility.yul\":8424:8428 */\n 0x00\n /* \"#utility.yul\":8456:8460 */\n 0x20\n /* \"#utility.yul\":8451:8454 */\n dup3\n /* \"#utility.yul\":8447:8461 */\n add\n /* \"#utility.yul\":8439:8461 */\n swap1\n pop\n /* \"#utility.yul\":8356:8467 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8505:9199 */\n tag_98:\n /* \"#utility.yul\":8641:8693 */\n tag_214\n /* \"#utility.yul\":8687:8692 */\n dup2\n /* \"#utility.yul\":8641:8693 */\n tag_92\n jump\t// in\n tag_214:\n /* \"#utility.yul\":8709:8793 */\n tag_215\n /* \"#utility.yul\":8786:8792 */\n dup2\n /* \"#utility.yul\":8781:8784 */\n dup5\n /* \"#utility.yul\":8709:8793 */\n tag_93\n jump\t// in\n tag_215:\n /* \"#utility.yul\":8702:8793 */\n swap3\n pop\n /* \"#utility.yul\":8817:8871 */\n tag_216\n /* \"#utility.yul\":8865:8870 */\n dup3\n /* \"#utility.yul\":8817:8871 */\n tag_94\n jump\t// in\n tag_216:\n /* \"#utility.yul\":8894:8901 */\n dup1\n /* \"#utility.yul\":8925:8926 */\n 0x00\n /* \"#utility.yul\":8910:9192 */\n tag_217:\n /* \"#utility.yul\":8935:8941 */\n dup4\n /* \"#utility.yul\":8932:8933 */\n dup2\n /* \"#utility.yul\":8929:8942 */\n lt\n /* \"#utility.yul\":8910:9192 */\n iszero\n tag_219\n jumpi\n /* \"#utility.yul\":9011:9017 */\n dup2\n /* \"#utility.yul\":9005:9018 */\n mload\n /* \"#utility.yul\":9038:9101 */\n tag_220\n /* \"#utility.yul\":9097:9100 */\n dup8\n /* \"#utility.yul\":9082:9095 */\n dup3\n /* \"#utility.yul\":9038:9101 */\n tag_96\n jump\t// in\n tag_220:\n /* \"#utility.yul\":9031:9101 */\n swap7\n pop\n /* \"#utility.yul\":9124:9182 */\n tag_221\n /* \"#utility.yul\":9175:9181 */\n dup4\n /* \"#utility.yul\":9124:9182 */\n tag_97\n jump\t// in\n tag_221:\n /* \"#utility.yul\":9114:9182 */\n swap3\n pop\n /* \"#utility.yul\":8970:9192 */\n pop\n /* \"#utility.yul\":8957:8958 */\n 0x01\n /* \"#utility.yul\":8954:8955 */\n dup2\n /* \"#utility.yul\":8950:8959 */\n add\n /* \"#utility.yul\":8945:8959 */\n swap1\n pop\n /* \"#utility.yul\":8910:9192 */\n jump(tag_217)\n tag_219:\n /* \"#utility.yul\":8914:8928 */\n pop\n /* \"#utility.yul\":8617:9199 */\n pop\n pop\n pop\n /* \"#utility.yul\":8505:9199 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9205:9519 */\n tag_10:\n /* \"#utility.yul\":9344:9348 */\n 0x00\n /* \"#utility.yul\":9382:9384 */\n 0x40\n /* \"#utility.yul\":9371:9380 */\n dup3\n /* \"#utility.yul\":9367:9385 */\n add\n /* \"#utility.yul\":9359:9385 */\n swap1\n pop\n /* \"#utility.yul\":9395:9512 */\n tag_223\n /* \"#utility.yul\":9509:9510 */\n 0x00\n /* \"#utility.yul\":9498:9507 */\n dup4\n /* \"#utility.yul\":9494:9511 */\n add\n /* \"#utility.yul\":9485:9491 */\n dup5\n /* \"#utility.yul\":9395:9512 */\n tag_98\n jump\t// in\n tag_223:\n /* \"#utility.yul\":9205:9519 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9525:9705 */\n tag_20:\n /* \"#utility.yul\":9573:9650 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":9570:9571 */\n 0x00\n /* \"#utility.yul\":9563:9651 */\n mstore\n /* \"#utility.yul\":9670:9674 */\n 0x32\n /* \"#utility.yul\":9667:9668 */\n 0x04\n /* \"#utility.yul\":9660:9675 */\n mstore\n /* \"#utility.yul\":9694:9698 */\n 0x24\n /* \"#utility.yul\":9691:9692 */\n 0x00\n /* \"#utility.yul\":9684:9699 */\n revert\n /* \"#utility.yul\":9711:9807 */\n tag_99:\n /* \"#utility.yul\":9745:9753 */\n 0x00\n /* \"#utility.yul\":9794:9799 */\n dup2\n /* \"#utility.yul\":9789:9792 */\n 0xe0\n /* \"#utility.yul\":9785:9800 */\n shl\n /* \"#utility.yul\":9764:9800 */\n swap1\n pop\n /* \"#utility.yul\":9711:9807 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":9813:9907 */\n tag_100:\n /* \"#utility.yul\":9851:9858 */\n 0x00\n /* \"#utility.yul\":9880:9901 */\n tag_227\n /* \"#utility.yul\":9895:9900 */\n dup3\n /* \"#utility.yul\":9880:9901 */\n tag_99\n jump\t// in\n tag_227:\n /* \"#utility.yul\":9869:9901 */\n swap1\n pop\n /* \"#utility.yul\":9813:9907 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":9913:10066 */\n tag_101:\n /* \"#utility.yul\":10016:10059 */\n tag_229\n /* \"#utility.yul\":10035:10058 */\n tag_230\n /* \"#utility.yul\":10052:10057 */\n dup3\n /* \"#utility.yul\":10035:10058 */\n tag_65\n jump\t// in\n tag_230:\n /* \"#utility.yul\":10016:10059 */\n tag_100\n jump\t// in\n tag_229:\n /* \"#utility.yul\":10011:10014 */\n dup3\n /* \"#utility.yul\":10004:10060 */\n mstore\n /* \"#utility.yul\":9913:10066 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10072:10151 */\n tag_102:\n /* \"#utility.yul\":10111:10118 */\n 0x00\n /* \"#utility.yul\":10140:10145 */\n dup2\n /* \"#utility.yul\":10129:10145 */\n swap1\n pop\n /* \"#utility.yul\":10072:10151 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10157:10314 */\n tag_103:\n /* \"#utility.yul\":10262:10307 */\n tag_233\n /* \"#utility.yul\":10282:10306 */\n tag_234\n /* \"#utility.yul\":10300:10305 */\n dup3\n /* \"#utility.yul\":10282:10306 */\n tag_75\n jump\t// in\n tag_234:\n /* \"#utility.yul\":10262:10307 */\n tag_102\n jump\t// in\n tag_233:\n /* \"#utility.yul\":10257:10260 */\n dup3\n /* \"#utility.yul\":10250:10308 */\n mstore\n /* \"#utility.yul\":10157:10314 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10320:10398 */\n tag_104:\n /* \"#utility.yul\":10358:10365 */\n 0x00\n /* \"#utility.yul\":10387:10392 */\n dup2\n /* \"#utility.yul\":10376:10392 */\n swap1\n pop\n /* \"#utility.yul\":10320:10398 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10404:10557 */\n tag_105:\n /* \"#utility.yul\":10507:10550 */\n tag_237\n /* \"#utility.yul\":10526:10549 */\n tag_238\n /* \"#utility.yul\":10543:10548 */\n dup3\n /* \"#utility.yul\":10526:10549 */\n tag_84\n jump\t// in\n tag_238:\n /* \"#utility.yul\":10507:10550 */\n tag_104\n jump\t// in\n tag_237:\n /* \"#utility.yul\":10502:10505 */\n dup3\n /* \"#utility.yul\":10495:10551 */\n mstore\n /* \"#utility.yul\":10404:10557 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10563:10659 */\n tag_106:\n /* \"#utility.yul\":10597:10605 */\n 0x00\n /* \"#utility.yul\":10646:10651 */\n dup2\n /* \"#utility.yul\":10641:10644 */\n 0xf8\n /* \"#utility.yul\":10637:10652 */\n shl\n /* \"#utility.yul\":10616:10652 */\n swap1\n pop\n /* \"#utility.yul\":10563:10659 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10665:10758 */\n tag_107:\n /* \"#utility.yul\":10702:10709 */\n 0x00\n /* \"#utility.yul\":10731:10752 */\n tag_241\n /* \"#utility.yul\":10746:10751 */\n dup3\n /* \"#utility.yul\":10731:10752 */\n tag_106\n jump\t// in\n tag_241:\n /* \"#utility.yul\":10720:10752 */\n swap1\n pop\n /* \"#utility.yul\":10665:10758 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10764:10859 */\n tag_108:\n /* \"#utility.yul\":10800:10807 */\n 0x00\n /* \"#utility.yul\":10829:10853 */\n tag_243\n /* \"#utility.yul\":10847:10852 */\n dup3\n /* \"#utility.yul\":10829:10853 */\n tag_107\n jump\t// in\n tag_243:\n /* \"#utility.yul\":10818:10853 */\n swap1\n pop\n /* \"#utility.yul\":10764:10859 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10865:11010 */\n tag_109:\n /* \"#utility.yul\":10964:11003 */\n tag_245\n /* \"#utility.yul\":10981:11002 */\n tag_246\n /* \"#utility.yul\":10996:11001 */\n dup3\n /* \"#utility.yul\":10981:11002 */\n tag_89\n jump\t// in\n tag_246:\n /* \"#utility.yul\":10964:11003 */\n tag_108\n jump\t// in\n tag_245:\n /* \"#utility.yul\":10959:10962 */\n dup3\n /* \"#utility.yul\":10952:11004 */\n mstore\n /* \"#utility.yul\":10865:11010 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11016:12513 */\n tag_36:\n /* \"#utility.yul\":11368:11371 */\n 0x00\n /* \"#utility.yul\":11383:11456 */\n tag_248\n /* \"#utility.yul\":11452:11455 */\n dup3\n /* \"#utility.yul\":11443:11449 */\n dup14\n /* \"#utility.yul\":11383:11456 */\n tag_101\n jump\t// in\n tag_248:\n /* \"#utility.yul\":11481:11482 */\n 0x04\n /* \"#utility.yul\":11476:11479 */\n dup3\n /* \"#utility.yul\":11472:11483 */\n add\n /* \"#utility.yul\":11465:11483 */\n swap2\n pop\n /* \"#utility.yul\":11493:11568 */\n tag_249\n /* \"#utility.yul\":11564:11567 */\n dup3\n /* \"#utility.yul\":11555:11561 */\n dup13\n /* \"#utility.yul\":11493:11568 */\n tag_103\n jump\t// in\n tag_249:\n /* \"#utility.yul\":11593:11595 */\n 0x20\n /* \"#utility.yul\":11588:11591 */\n dup3\n /* \"#utility.yul\":11584:11596 */\n add\n /* \"#utility.yul\":11577:11596 */\n swap2\n pop\n /* \"#utility.yul\":11606:11681 */\n tag_250\n /* \"#utility.yul\":11677:11680 */\n dup3\n /* \"#utility.yul\":11668:11674 */\n dup12\n /* \"#utility.yul\":11606:11681 */\n tag_103\n jump\t// in\n tag_250:\n /* \"#utility.yul\":11706:11708 */\n 0x20\n /* \"#utility.yul\":11701:11704 */\n dup3\n /* \"#utility.yul\":11697:11709 */\n add\n /* \"#utility.yul\":11690:11709 */\n swap2\n pop\n /* \"#utility.yul\":11719:11794 */\n tag_251\n /* \"#utility.yul\":11790:11793 */\n dup3\n /* \"#utility.yul\":11781:11787 */\n dup11\n /* \"#utility.yul\":11719:11794 */\n tag_103\n jump\t// in\n tag_251:\n /* \"#utility.yul\":11819:11821 */\n 0x20\n /* \"#utility.yul\":11814:11817 */\n dup3\n /* \"#utility.yul\":11810:11822 */\n add\n /* \"#utility.yul\":11803:11822 */\n swap2\n pop\n /* \"#utility.yul\":11832:11907 */\n tag_252\n /* \"#utility.yul\":11903:11906 */\n dup3\n /* \"#utility.yul\":11894:11900 */\n dup10\n /* \"#utility.yul\":11832:11907 */\n tag_103\n jump\t// in\n tag_252:\n /* \"#utility.yul\":11932:11934 */\n 0x20\n /* \"#utility.yul\":11927:11930 */\n dup3\n /* \"#utility.yul\":11923:11935 */\n add\n /* \"#utility.yul\":11916:11935 */\n swap2\n pop\n /* \"#utility.yul\":11945:12020 */\n tag_253\n /* \"#utility.yul\":12016:12019 */\n dup3\n /* \"#utility.yul\":12007:12013 */\n dup9\n /* \"#utility.yul\":11945:12020 */\n tag_103\n jump\t// in\n tag_253:\n /* \"#utility.yul\":12045:12047 */\n 0x20\n /* \"#utility.yul\":12040:12043 */\n dup3\n /* \"#utility.yul\":12036:12048 */\n add\n /* \"#utility.yul\":12029:12048 */\n swap2\n pop\n /* \"#utility.yul\":12058:12133 */\n tag_254\n /* \"#utility.yul\":12129:12132 */\n dup3\n /* \"#utility.yul\":12120:12126 */\n dup8\n /* \"#utility.yul\":12058:12133 */\n tag_103\n jump\t// in\n tag_254:\n /* \"#utility.yul\":12158:12160 */\n 0x20\n /* \"#utility.yul\":12153:12156 */\n dup3\n /* \"#utility.yul\":12149:12161 */\n add\n /* \"#utility.yul\":12142:12161 */\n swap2\n pop\n /* \"#utility.yul\":12171:12244 */\n tag_255\n /* \"#utility.yul\":12240:12243 */\n dup3\n /* \"#utility.yul\":12231:12237 */\n dup7\n /* \"#utility.yul\":12171:12244 */\n tag_105\n jump\t// in\n tag_255:\n /* \"#utility.yul\":12269:12270 */\n 0x08\n /* \"#utility.yul\":12264:12267 */\n dup3\n /* \"#utility.yul\":12260:12271 */\n add\n /* \"#utility.yul\":12253:12271 */\n swap2\n pop\n /* \"#utility.yul\":12281:12354 */\n tag_256\n /* \"#utility.yul\":12350:12353 */\n dup3\n /* \"#utility.yul\":12341:12347 */\n dup6\n /* \"#utility.yul\":12281:12354 */\n tag_105\n jump\t// in\n tag_256:\n /* \"#utility.yul\":12379:12380 */\n 0x08\n /* \"#utility.yul\":12374:12377 */\n dup3\n /* \"#utility.yul\":12370:12381 */\n add\n /* \"#utility.yul\":12363:12381 */\n swap2\n pop\n /* \"#utility.yul\":12391:12460 */\n tag_257\n /* \"#utility.yul\":12456:12459 */\n dup3\n /* \"#utility.yul\":12447:12453 */\n dup5\n /* \"#utility.yul\":12391:12460 */\n tag_109\n jump\t// in\n tag_257:\n /* \"#utility.yul\":12485:12486 */\n 0x01\n /* \"#utility.yul\":12480:12483 */\n dup3\n /* \"#utility.yul\":12476:12487 */\n add\n /* \"#utility.yul\":12469:12487 */\n swap2\n pop\n /* \"#utility.yul\":12504:12507 */\n dup2\n /* \"#utility.yul\":12497:12507 */\n swap1\n pop\n /* \"#utility.yul\":11016:12513 */\n swap12\n swap11\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122091fe99b24b03429f1e07ab657ba546fcf0c5f38850a0c9471f215bb9842c763864736f6c63430008090033\n}\n", - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50610b18806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806372de3cbd1461003b578063fc75ac471461006b575b600080fd5b610055600480360381019061005091906107fc565b610089565b6040516100629190610924565b60405180910390f35b6100736101b5565b6040516100809190610924565b60405180910390f35b6100916103dc565b6100996103dc565b600087876000600281106100b0576100af61093f565b5b6020020151886001600281106100c9576100c861093f565b5b6020020151886000600481106100e2576100e161093f565b5b6020020151896001600481106100fb576100fa61093f565b5b60200201518a6002600481106101145761011361093f565b5b60200201518b60036004811061012d5761012c61093f565b5b60200201518b6000600281106101465761014561093f565b5b60200201518c60016002811061015f5761015e61093f565b5b60200201518c60405160200161017e9a99989796959493929190610a2e565b604051602081830303815290604052905060408260d5602084016009600019fa6101a757600080fd5b819250505095945050505050565b6101bd6103dc565b6000600c90506101cb6103dc565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581600060028110610200576101ff61093f565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b8160016002811061023e5761023d61093f565b5b60200201818152505061024f6103fe565b7f6162630000000000000000000000000000000000000000000000000000000000816000600481106102845761028361093f565b5b6020020181815250506000816001600481106102a3576102a261093f565b5b6020020181815250506000816002600481106102c2576102c161093f565b5b6020020181815250506000816003600481106102e1576102e061093f565b5b6020020181815250506102f2610420565b7f0300000000000000000000000000000000000000000000000000000000000000816000600281106103275761032661093f565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff19168152505060008160016002811061037e5761037d61093f565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250506000600190506103d28585858585610089565b9550505050505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b600063ffffffff82169050919050565b61046a81610451565b811461047557600080fd5b50565b60008135905061048781610461565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6104db82610492565b810181811067ffffffffffffffff821117156104fa576104f96104a3565b5b80604052505050565b600061050d610442565b905061051982826104d2565b919050565b600067ffffffffffffffff821115610539576105386104a3565b5b602082029050919050565b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b600061059261058d8461051e565b610503565b905080602084028301858111156105ac576105ab610544565b5b835b818110156105d557806105c1888261056a565b8452602084019350506020810190506105ae565b5050509392505050565b600082601f8301126105f4576105f361048d565b5b600261060184828561057f565b91505092915050565b600067ffffffffffffffff821115610625576106246104a3565b5b602082029050919050565b600061064361063e8461060a565b610503565b9050806020840283018581111561065d5761065c610544565b5b835b818110156106865780610672888261056a565b84526020840193505060208101905061065f565b5050509392505050565b600082601f8301126106a5576106a461048d565b5b60046106b2848285610630565b91505092915050565b600067ffffffffffffffff8211156106d6576106d56104a3565b5b602082029050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b610716816106e1565b811461072157600080fd5b50565b6000813590506107338161070d565b92915050565b600061074c610747846106bb565b610503565b9050806020840283018581111561076657610765610544565b5b835b8181101561078f578061077b8882610724565b845260208401935050602081019050610768565b5050509392505050565b600082601f8301126107ae576107ad61048d565b5b60026107bb848285610739565b91505092915050565b60008115159050919050565b6107d9816107c4565b81146107e457600080fd5b50565b6000813590506107f6816107d0565b92915050565b600080600080600061014086880312156108195761081861044c565b5b600061082788828901610478565b9550506020610838888289016105df565b945050606061084988828901610690565b93505060e061085a88828901610799565b92505061012061086c888289016107e7565b9150509295509295909350565b600060029050919050565b600081905092915050565b6000819050919050565b6108a281610549565b82525050565b60006108b48383610899565b60208301905092915050565b6000602082019050919050565b6108d681610879565b6108e08184610884565b92506108eb8261088f565b8060005b8381101561091c57815161090387826108a8565b965061090e836108c0565b9250506001810190506108ef565b505050505050565b600060408201905061093960008301846108cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160e01b9050919050565b60006109868261096e565b9050919050565b61099e61099982610451565b61097b565b82525050565b6000819050919050565b6109bf6109ba82610549565b6109a4565b82525050565b6000819050919050565b6109e06109db826106e1565b6109c5565b82525050565b60008160f81b9050919050565b60006109fe826109e6565b9050919050565b6000610a10826109f3565b9050919050565b610a28610a23826107c4565b610a05565b82525050565b6000610a3a828d61098d565b600482019150610a4a828c6109ae565b602082019150610a5a828b6109ae565b602082019150610a6a828a6109ae565b602082019150610a7a82896109ae565b602082019150610a8a82886109ae565b602082019150610a9a82876109ae565b602082019150610aaa82866109cf565b600882019150610aba82856109cf565b600882019150610aca8284610a17565b6001820191508190509b9a505050505050505050505056fea264697066735822122091fe99b24b03429f1e07ab657ba546fcf0c5f38850a0c9471f215bb9842c763864736f6c63430008090033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB18 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x72DE3CBD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xFC75AC47 EQ PUSH2 0x6B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x7FC JUMP JUMPDEST PUSH2 0x89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x62 SWAP2 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH2 0x1B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x91 PUSH2 0x3DC JUMP JUMPDEST PUSH2 0x99 PUSH2 0x3DC JUMP JUMPDEST PUSH1 0x0 DUP8 DUP8 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xB0 JUMPI PUSH2 0xAF PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xC9 JUMPI PUSH2 0xC8 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0xE2 JUMPI PUSH2 0xE1 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP10 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0xFB JUMPI PUSH2 0xFA PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP11 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0x114 JUMPI PUSH2 0x113 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x146 JUMPI PUSH2 0x145 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x15F JUMPI PUSH2 0x15E PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17E SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA2E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH1 0x40 DUP3 PUSH1 0xD5 PUSH1 0x20 DUP5 ADD PUSH1 0x9 PUSH1 0x0 NOT STATICCALL PUSH2 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x3DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC SWAP1 POP PUSH2 0x1CB PUSH2 0x3DC JUMP JUMPDEST PUSH32 0x48C9BDF267E6096A3BA7CA8485AE67BB2BF894FE72F36E3CF1361D5F3AF54FA5 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x200 JUMPI PUSH2 0x1FF PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH32 0xD182E6AD7F520E511F6C3E2B8C68059B6BBD41FBABD9831F79217E1319CDE05B DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x23E JUMPI PUSH2 0x23D PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x24F PUSH2 0x3FE JUMP JUMPDEST PUSH32 0x6162630000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0x284 JUMPI PUSH2 0x283 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0x2A3 JUMPI PUSH2 0x2A2 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0x2C2 JUMPI PUSH2 0x2C1 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0x2E1 JUMPI PUSH2 0x2E0 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x2F2 PUSH2 0x420 JUMP JUMPDEST PUSH32 0x300000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x327 JUMPI PUSH2 0x326 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x37E JUMPI PUSH2 0x37D PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH2 0x3D2 DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x89 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x46A DUP2 PUSH2 0x451 JUMP JUMPDEST DUP2 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x487 DUP2 PUSH2 0x461 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x4DB DUP3 PUSH2 0x492 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x4FA JUMPI PUSH2 0x4F9 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x50D PUSH2 0x442 JUMP JUMPDEST SWAP1 POP PUSH2 0x519 DUP3 DUP3 PUSH2 0x4D2 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x539 JUMPI PUSH2 0x538 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x55C DUP2 PUSH2 0x549 JUMP JUMPDEST DUP2 EQ PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x579 DUP2 PUSH2 0x553 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x592 PUSH2 0x58D DUP5 PUSH2 0x51E JUMP JUMPDEST PUSH2 0x503 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5AC JUMPI PUSH2 0x5AB PUSH2 0x544 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D5 JUMPI DUP1 PUSH2 0x5C1 DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5AE JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5F4 JUMPI PUSH2 0x5F3 PUSH2 0x48D JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x601 DUP5 DUP3 DUP6 PUSH2 0x57F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x625 JUMPI PUSH2 0x624 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x643 PUSH2 0x63E DUP5 PUSH2 0x60A JUMP JUMPDEST PUSH2 0x503 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x65D JUMPI PUSH2 0x65C PUSH2 0x544 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x686 JUMPI DUP1 PUSH2 0x672 DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x65F JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6A5 JUMPI PUSH2 0x6A4 PUSH2 0x48D JUMP JUMPDEST JUMPDEST PUSH1 0x4 PUSH2 0x6B2 DUP5 DUP3 DUP6 PUSH2 0x630 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x6D6 JUMPI PUSH2 0x6D5 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x716 DUP2 PUSH2 0x6E1 JUMP JUMPDEST DUP2 EQ PUSH2 0x721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x733 DUP2 PUSH2 0x70D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74C PUSH2 0x747 DUP5 PUSH2 0x6BB JUMP JUMPDEST PUSH2 0x503 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x766 JUMPI PUSH2 0x765 PUSH2 0x544 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x78F JUMPI DUP1 PUSH2 0x77B DUP9 DUP3 PUSH2 0x724 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x768 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7AE JUMPI PUSH2 0x7AD PUSH2 0x48D JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x7BB DUP5 DUP3 DUP6 PUSH2 0x739 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x7C4 JUMP JUMPDEST DUP2 EQ PUSH2 0x7E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x7F6 DUP2 PUSH2 0x7D0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x140 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x819 JUMPI PUSH2 0x818 PUSH2 0x44C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x827 DUP9 DUP3 DUP10 ADD PUSH2 0x478 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x838 DUP9 DUP3 DUP10 ADD PUSH2 0x5DF JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 PUSH2 0x849 DUP9 DUP3 DUP10 ADD PUSH2 0x690 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xE0 PUSH2 0x85A DUP9 DUP3 DUP10 ADD PUSH2 0x799 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x120 PUSH2 0x86C DUP9 DUP3 DUP10 ADD PUSH2 0x7E7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8A2 DUP2 PUSH2 0x549 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B4 DUP4 DUP4 PUSH2 0x899 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8D6 DUP2 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x8E0 DUP2 DUP5 PUSH2 0x884 JUMP JUMPDEST SWAP3 POP PUSH2 0x8EB DUP3 PUSH2 0x88F JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x91C JUMPI DUP2 MLOAD PUSH2 0x903 DUP8 DUP3 PUSH2 0x8A8 JUMP JUMPDEST SWAP7 POP PUSH2 0x90E DUP4 PUSH2 0x8C0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x8EF JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x939 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8CD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x986 DUP3 PUSH2 0x96E JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x99E PUSH2 0x999 DUP3 PUSH2 0x451 JUMP JUMPDEST PUSH2 0x97B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x9BA DUP3 PUSH2 0x549 JUMP JUMPDEST PUSH2 0x9A4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x9E0 PUSH2 0x9DB DUP3 PUSH2 0x6E1 JUMP JUMPDEST PUSH2 0x9C5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xF8 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9FE DUP3 PUSH2 0x9E6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA10 DUP3 PUSH2 0x9F3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA28 PUSH2 0xA23 DUP3 PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0xA05 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3A DUP3 DUP14 PUSH2 0x98D JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP PUSH2 0xA4A DUP3 DUP13 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA5A DUP3 DUP12 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA6A DUP3 DUP11 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA7A DUP3 DUP10 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA8A DUP3 DUP9 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA9A DUP3 DUP8 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xAAA DUP3 DUP7 PUSH2 0x9CF JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0xABA DUP3 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0xACA DUP3 DUP5 PUSH2 0xA17 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SWAP2 POP DUP2 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 INVALID SWAP10 0xB2 0x4B SUB TIMESTAMP SWAP16 0x1E SMOD 0xAB PUSH6 0x7BA546FCF0C5 RETURN DUP9 POP LOG0 0xC9 SELFBALANCE 0x1F 0x21 JUMPDEST 0xB9 DUP5 0x2C PUSH23 0x3864736F6C634300080900330000000000000000000000 ", - "sourceMap": "35:1505:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@F_67": { - "entryPoint": 137, - "id": 67, - "parameterSlots": 5, - "returnSlots": 1 - }, - "@callF_160": { - "entryPoint": 437, - "id": 160, - "parameterSlots": 0, - "returnSlots": 1 - }, - "abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr": { - "entryPoint": 1407, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr": { - "entryPoint": 1584, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr": { - "entryPoint": 1849, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_decode_t_array$_t_bytes32_$2_memory_ptr": { - "entryPoint": 1503, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_t_array$_t_bytes32_$4_memory_ptr": { - "entryPoint": 1680, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_t_array$_t_bytes8_$2_memory_ptr": { - "entryPoint": 1945, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_t_bool": { - "entryPoint": 2023, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_t_bytes32": { - "entryPoint": 1386, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_t_bytes8": { - "entryPoint": 1828, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_t_uint32": { - "entryPoint": 1144, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint32t_array$_t_bytes32_$2_memory_ptrt_array$_t_bytes32_$4_memory_ptrt_array$_t_bytes8_$2_memory_ptrt_bool": { - "entryPoint": 2044, - "id": null, - "parameterSlots": 2, - "returnSlots": 5 - }, - "abi_encodeUpdatedPos_t_bytes32_to_t_bytes32": { - "entryPoint": 2216, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack": { - "entryPoint": 2253, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack": { - "entryPoint": 2583, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_t_bytes32_to_t_bytes32": { - "entryPoint": 2201, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack": { - "entryPoint": 2478, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack": { - "entryPoint": 2511, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack": { - "entryPoint": 2445, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__to_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 2606, - "id": null, - "parameterSlots": 11, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_bytes32_$2_memory_ptr__to_t_array$_t_bytes32_$2_memory_ptr__fromStack_reversed": { - "entryPoint": 2340, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 1283, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_unbounded": { - "entryPoint": 1090, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_allocation_size_t_array$_t_bytes32_$2_memory_ptr": { - "entryPoint": 1310, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_allocation_size_t_array$_t_bytes32_$4_memory_ptr": { - "entryPoint": 1546, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_allocation_size_t_array$_t_bytes8_$2_memory_ptr": { - "entryPoint": 1723, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_dataslot_t_array$_t_bytes32_$2_memory_ptr": { - "entryPoint": 2191, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_length_t_array$_t_bytes32_$2_memory_ptr": { - "entryPoint": 2169, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_nextElement_t_array$_t_bytes32_$2_memory_ptr": { - "entryPoint": 2240, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack": { - "entryPoint": 2180, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "cleanup_t_bool": { - "entryPoint": 1988, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "cleanup_t_bytes32": { - "entryPoint": 1353, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "cleanup_t_bytes8": { - "entryPoint": 1761, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "cleanup_t_uint32": { - "entryPoint": 1105, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "finalize_allocation": { - "entryPoint": 1234, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "leftAlign_t_bool": { - "entryPoint": 2565, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "leftAlign_t_bytes32": { - "entryPoint": 2468, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "leftAlign_t_bytes8": { - "entryPoint": 2501, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "leftAlign_t_uint32": { - "entryPoint": 2427, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "leftAlign_t_uint8": { - "entryPoint": 2547, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "panic_error_0x32": { - "entryPoint": 2367, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 1187, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": { - "entryPoint": 1165, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef": { - "entryPoint": 1348, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { - "entryPoint": null, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { - "entryPoint": 1100, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "round_up_to_mul_of_32": { - "entryPoint": 1170, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "shift_left_224": { - "entryPoint": 2414, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "shift_left_248": { - "entryPoint": 2534, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "validator_revert_t_bool": { - "entryPoint": 2000, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_t_bytes32": { - "entryPoint": 1363, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_t_bytes8": { - "entryPoint": 1805, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_t_uint32": { - "entryPoint": 1121, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:12516:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "47:35:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "57:19:1", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "73:2:1", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "67:5:1" - }, - "nodeType": "YulFunctionCall", - "src": "67:9:1" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "57:6:1" - } - ] - } - ] - }, - "name": "allocate_unbounded", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "40:6:1", - "type": "" - } - ], - "src": "7:75:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "177:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "194:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "197:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "187:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "187:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "187:12:1" - } - ] - }, - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", - "nodeType": "YulFunctionDefinition", - "src": "88:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "300:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "317:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "320:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "310:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "310:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "310:12:1" - } - ] - }, - "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", - "nodeType": "YulFunctionDefinition", - "src": "211:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "378:49:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "388:33:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "403:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "410:10:1", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "399:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "399:22:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "388:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "360:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "370:7:1", - "type": "" - } - ], - "src": "334:93:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "475:78:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "531:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "540:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "543:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "533:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "533:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "533:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "498:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "522:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint32", - "nodeType": "YulIdentifier", - "src": "505:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "505:23:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "495:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "495:34:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "488:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "488:42:1" - }, - "nodeType": "YulIf", - "src": "485:62:1" - } - ] - }, - "name": "validator_revert_t_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "468:5:1", - "type": "" - } - ], - "src": "433:120:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:86:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "620:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "642:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "629:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "629:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "620:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "684:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint32", - "nodeType": "YulIdentifier", - "src": "658:25:1" - }, - "nodeType": "YulFunctionCall", - "src": "658:32:1" - }, - "nodeType": "YulExpressionStatement", - "src": "658:32:1" - } - ] - }, - "name": "abi_decode_t_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "588:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "596:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "604:5:1", - "type": "" - } - ], - "src": "559:137:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "791:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "808:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "811:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "801:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "801:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "801:12:1" - } - ] - }, - "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", - "nodeType": "YulFunctionDefinition", - "src": "702:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "873:54:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "883:38:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "901:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "908:2:1", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "897:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "897:14:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "917:2:1", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "913:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "913:7:1" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "893:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "893:28:1" - }, - "variableNames": [ - { - "name": "result", - "nodeType": "YulIdentifier", - "src": "883:6:1" - } - ] - } - ] - }, - "name": "round_up_to_mul_of_32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "856:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "result", - "nodeType": "YulTypedName", - "src": "866:6:1", - "type": "" - } - ], - "src": "825:102:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "961:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "978:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "981:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "971:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "971:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "971:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1075:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1078:4:1", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1068:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1068:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1068:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1099:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1102:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1092:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1092:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1092:15:1" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "933:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1162:238:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1172:58:1", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1194:6:1" - }, - { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1224:4:1" - } - ], - "functionName": { - "name": "round_up_to_mul_of_32", - "nodeType": "YulIdentifier", - "src": "1202:21:1" - }, - "nodeType": "YulFunctionCall", - "src": "1202:27:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1190:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1190:40:1" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1176:10:1", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1341:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1343:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1343:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1343:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1284:10:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1296:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1281:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1281:34:1" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1320:10:1" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1332:6:1" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1317:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1317:22:1" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1278:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1278:62:1" - }, - "nodeType": "YulIf", - "src": "1275:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1379:2:1", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1383:10:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1372:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1372:22:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1372:22:1" - } - ] - }, - "name": "finalize_allocation", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1148:6:1", - "type": "" - }, - { - "name": "size", - "nodeType": "YulTypedName", - "src": "1156:4:1", - "type": "" - } - ], - "src": "1119:281:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1447:88:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1457:30:1", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_unbounded", - "nodeType": "YulIdentifier", - "src": "1467:18:1" - }, - "nodeType": "YulFunctionCall", - "src": "1467:20:1" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1457:6:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1516:6:1" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1524:4:1" - } - ], - "functionName": { - "name": "finalize_allocation", - "nodeType": "YulIdentifier", - "src": "1496:19:1" - }, - "nodeType": "YulFunctionCall", - "src": "1496:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1496:33:1" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "1431:4:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1440:6:1", - "type": "" - } - ], - "src": "1406:129:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1621:169:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1726:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1728:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1728:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1728:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1698:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1706:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1695:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1695:30:1" - }, - "nodeType": "YulIf", - "src": "1692:56:1" - }, - { - "nodeType": "YulAssignment", - "src": "1758:25:1", - "value": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1770:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1778:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "1766:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1766:17:1" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1758:4:1" - } - ] - } - ] - }, - "name": "array_allocation_size_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1605:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "1616:4:1", - "type": "" - } - ], - "src": "1541:249:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1885:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1902:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1905:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1895:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1895:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1895:12:1" - } - ] - }, - "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", - "nodeType": "YulFunctionDefinition", - "src": "1796:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1964:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1974:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1985:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1974:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1946:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1956:7:1", - "type": "" - } - ], - "src": "1919:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2045:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2102:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2111:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2114:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2104:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2104:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2104:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2068:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2093:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bytes32", - "nodeType": "YulIdentifier", - "src": "2075:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "2075:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2065:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "2065:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2058:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2058:43:1" - }, - "nodeType": "YulIf", - "src": "2055:63:1" - } - ] - }, - "name": "validator_revert_t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2038:5:1", - "type": "" - } - ], - "src": "2002:122:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2182:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2192:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2214:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "2201:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "2201:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2192:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2257:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_bytes32", - "nodeType": "YulIdentifier", - "src": "2230:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "2230:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2230:33:1" - } - ] - }, - "name": "abi_decode_t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "2160:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2168:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2176:5:1", - "type": "" - } - ], - "src": "2130:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2393:543:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2403:88:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2483:6:1" - } - ], - "functionName": { - "name": "array_allocation_size_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "2428:54:1" - }, - "nodeType": "YulFunctionCall", - "src": "2428:62:1" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "2412:15:1" - }, - "nodeType": "YulFunctionCall", - "src": "2412:79:1" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "2403:5:1" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2500:16:1", - "value": { - "name": "array", - "nodeType": "YulIdentifier", - "src": "2511:5:1" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "2504:3:1", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2526:44:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2544:6:1" - }, - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2556:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2564:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "2552:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2552:17:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2540:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2540:30:1" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "2530:6:1", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2598:103:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", - "nodeType": "YulIdentifier", - "src": "2612:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "2612:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2612:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2585:6:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2593:3:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "2582:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "2582:15:1" - }, - "nodeType": "YulIf", - "src": "2579:122:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2786:144:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2801:21:1", - "value": { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2819:3:1" - }, - "variables": [ - { - "name": "elementPos", - "nodeType": "YulTypedName", - "src": "2805:10:1", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2843:3:1" - }, - { - "arguments": [ - { - "name": "elementPos", - "nodeType": "YulIdentifier", - "src": "2869:10:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2881:3:1" - } - ], - "functionName": { - "name": "abi_decode_t_bytes32", - "nodeType": "YulIdentifier", - "src": "2848:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "2848:37:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2836:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2836:50:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2836:50:1" - }, - { - "nodeType": "YulAssignment", - "src": "2899:21:1", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2910:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2915:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2906:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2906:14:1" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "2899:3:1" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2739:3:1" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "2744:6:1" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2736:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "2736:15:1" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "2752:25:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2754:21:1", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2765:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2770:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2761:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2761:14:1" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "2754:3:1" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "2714:21:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "2716:17:1", - "value": { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "2727:6:1" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "2720:3:1", - "type": "" - } - ] - } - ] - }, - "src": "2710:220:1" - } - ] - }, - "name": "abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "2363:6:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2371:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2379:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "2387:5:1", - "type": "" - } - ], - "src": "2293:643:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3035:264:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3084:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", - "nodeType": "YulIdentifier", - "src": "3086:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "3086:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "3086:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "3063:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3071:4:1", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3059:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3059:17:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3078:3:1" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "3055:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3055:27:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "3048:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "3048:35:1" - }, - "nodeType": "YulIf", - "src": "3045:122:1" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3176:18:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3190:4:1", - "type": "", - "value": "0x02" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3180:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "3203:90:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "3273:6:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3281:6:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3289:3:1" - } - ], - "functionName": { - "name": "abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "3212:60:1" - }, - "nodeType": "YulFunctionCall", - "src": "3212:81:1" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "3203:5:1" - } - ] - } - ] - }, - "name": "abi_decode_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "3013:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3021:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "3029:5:1", - "type": "" - } - ], - "src": "2960:339:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3385:169:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "3490:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "3492:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "3492:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "3492:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3462:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3470:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3459:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "3459:30:1" - }, - "nodeType": "YulIf", - "src": "3456:56:1" - }, - { - "nodeType": "YulAssignment", - "src": "3522:25:1", - "value": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3534:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3542:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "3530:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3530:17:1" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "3522:4:1" - } - ] - } - ] - }, - "name": "array_allocation_size_t_array$_t_bytes32_$4_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3369:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "3380:4:1", - "type": "" - } - ], - "src": "3305:249:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3678:543:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3688:88:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3768:6:1" - } - ], - "functionName": { - "name": "array_allocation_size_t_array$_t_bytes32_$4_memory_ptr", - "nodeType": "YulIdentifier", - "src": "3713:54:1" - }, - "nodeType": "YulFunctionCall", - "src": "3713:62:1" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "3697:15:1" - }, - "nodeType": "YulFunctionCall", - "src": "3697:79:1" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "3688:5:1" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3785:16:1", - "value": { - "name": "array", - "nodeType": "YulIdentifier", - "src": "3796:5:1" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "3789:3:1", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "3811:44:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "3829:6:1" - }, - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3841:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3849:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "3837:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3837:17:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3825:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3825:30:1" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "3815:6:1", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3883:103:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", - "nodeType": "YulIdentifier", - "src": "3897:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "3897:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "3897:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "3870:6:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3878:3:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3867:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "3867:15:1" - }, - "nodeType": "YulIf", - "src": "3864:122:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4071:144:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4086:21:1", - "value": { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4104:3:1" - }, - "variables": [ - { - "name": "elementPos", - "nodeType": "YulTypedName", - "src": "4090:10:1", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4128:3:1" - }, - { - "arguments": [ - { - "name": "elementPos", - "nodeType": "YulIdentifier", - "src": "4154:10:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "4166:3:1" - } - ], - "functionName": { - "name": "abi_decode_t_bytes32", - "nodeType": "YulIdentifier", - "src": "4133:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "4133:37:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4121:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "4121:50:1" - }, - "nodeType": "YulExpressionStatement", - "src": "4121:50:1" - }, - { - "nodeType": "YulAssignment", - "src": "4184:21:1", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4195:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4200:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4191:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4191:14:1" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "4184:3:1" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4024:3:1" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "4029:6:1" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "4021:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "4021:15:1" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "4037:25:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4039:21:1", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4050:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4055:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4046:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4046:14:1" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "4039:3:1" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3999:21:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4001:17:1", - "value": { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4012:6:1" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "4005:3:1", - "type": "" - } - ] - } - ] - }, - "src": "3995:220:1" - } - ] - }, - "name": "abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "3648:6:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3656:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3664:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "3672:5:1", - "type": "" - } - ], - "src": "3578:643:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4320:264:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4369:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", - "nodeType": "YulIdentifier", - "src": "4371:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "4371:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "4371:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4348:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4356:4:1", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4344:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4344:17:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "4363:3:1" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4340:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4340:27:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "4333:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "4333:35:1" - }, - "nodeType": "YulIf", - "src": "4330:122:1" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "4461:18:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4475:4:1", - "type": "", - "value": "0x04" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "4465:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4488:90:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4558:6:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4566:6:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "4574:3:1" - } - ], - "functionName": { - "name": "abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr", - "nodeType": "YulIdentifier", - "src": "4497:60:1" - }, - "nodeType": "YulFunctionCall", - "src": "4497:81:1" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "4488:5:1" - } - ] - } - ] - }, - "name": "abi_decode_t_array$_t_bytes32_$4_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "4298:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "4306:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "4314:5:1", - "type": "" - } - ], - "src": "4245:339:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4669:169:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4774:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "4776:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "4776:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "4776:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4746:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4754:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "4743:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "4743:30:1" - }, - "nodeType": "YulIf", - "src": "4740:56:1" - }, - { - "nodeType": "YulAssignment", - "src": "4806:25:1", - "value": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "4818:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4826:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "4814:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4814:17:1" - }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "4806:4:1" - } - ] - } - ] - }, - "name": "array_allocation_size_t_array$_t_bytes8_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "4653:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "4664:4:1", - "type": "" - } - ], - "src": "4590:248:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4888:105:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4898:89:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "4913:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4920:66:1", - "type": "", - "value": "0xffffffffffffffff000000000000000000000000000000000000000000000000" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "4909:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4909:78:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "4898:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_bytes8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "4870:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "4880:7:1", - "type": "" - } - ], - "src": "4844:149:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5041:78:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "5097:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5106:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5109:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "5099:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "5099:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "5099:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5064:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5088:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bytes8", - "nodeType": "YulIdentifier", - "src": "5071:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "5071:23:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "5061:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "5061:34:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "5054:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "5054:42:1" - }, - "nodeType": "YulIf", - "src": "5051:62:1" - } - ] - }, - "name": "validator_revert_t_bytes8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "5034:5:1", - "type": "" - } - ], - "src": "4999:120:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5176:86:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5186:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "5208:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "5195:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "5195:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5186:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5250:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_bytes8", - "nodeType": "YulIdentifier", - "src": "5224:25:1" - }, - "nodeType": "YulFunctionCall", - "src": "5224:32:1" - }, - "nodeType": "YulExpressionStatement", - "src": "5224:32:1" - } - ] - }, - "name": "abi_decode_t_bytes8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "5154:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "5162:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "5170:5:1", - "type": "" - } - ], - "src": "5125:137:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5384:541:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5394:87:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5473:6:1" - } - ], - "functionName": { - "name": "array_allocation_size_t_array$_t_bytes8_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "5419:53:1" - }, - "nodeType": "YulFunctionCall", - "src": "5419:61:1" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "5403:15:1" - }, - "nodeType": "YulFunctionCall", - "src": "5403:78:1" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "5394:5:1" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5490:16:1", - "value": { - "name": "array", - "nodeType": "YulIdentifier", - "src": "5501:5:1" - }, - "variables": [ - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "5494:3:1", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5516:44:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "5534:6:1" - }, - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5546:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5554:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "5542:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "5542:17:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5530:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "5530:30:1" - }, - "variables": [ - { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "5520:6:1", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5588:103:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", - "nodeType": "YulIdentifier", - "src": "5602:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "5602:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "5602:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "5575:6:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "5583:3:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "5572:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "5572:15:1" - }, - "nodeType": "YulIf", - "src": "5569:122:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5776:143:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5791:21:1", - "value": { - "name": "src", - "nodeType": "YulIdentifier", - "src": "5809:3:1" - }, - "variables": [ - { - "name": "elementPos", - "nodeType": "YulTypedName", - "src": "5795:10:1", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5833:3:1" - }, - { - "arguments": [ - { - "name": "elementPos", - "nodeType": "YulIdentifier", - "src": "5858:10:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "5870:3:1" - } - ], - "functionName": { - "name": "abi_decode_t_bytes8", - "nodeType": "YulIdentifier", - "src": "5838:19:1" - }, - "nodeType": "YulFunctionCall", - "src": "5838:36:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5826:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "5826:49:1" - }, - "nodeType": "YulExpressionStatement", - "src": "5826:49:1" - }, - { - "nodeType": "YulAssignment", - "src": "5888:21:1", - "value": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5899:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5904:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5895:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "5895:14:1" - }, - "variableNames": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "5888:3:1" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "5729:3:1" - }, - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "5734:6:1" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "5726:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "5726:15:1" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "5742:25:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "5744:21:1", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "5755:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5760:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5751:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "5751:14:1" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "5744:3:1" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "5704:21:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "5706:17:1", - "value": { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "5717:6:1" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "5710:3:1", - "type": "" - } - ] - } - ] - }, - "src": "5700:219:1" - } - ] - }, - "name": "abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "5354:6:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "5362:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "5370:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "5378:5:1", - "type": "" - } - ], - "src": "5285:640:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6022:263:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6071:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", - "nodeType": "YulIdentifier", - "src": "6073:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "6073:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "6073:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "6050:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6058:4:1", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6046:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "6046:17:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "6065:3:1" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "6042:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "6042:27:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "6035:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "6035:35:1" - }, - "nodeType": "YulIf", - "src": "6032:122:1" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "6163:18:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6177:4:1", - "type": "", - "value": "0x02" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "6167:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "6190:89:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "6259:6:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "6267:6:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "6275:3:1" - } - ], - "functionName": { - "name": "abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "6199:59:1" - }, - "nodeType": "YulFunctionCall", - "src": "6199:80:1" - }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "6190:5:1" - } - ] - } - ] - }, - "name": "abi_decode_t_array$_t_bytes8_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "6000:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "6008:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nodeType": "YulTypedName", - "src": "6016:5:1", - "type": "" - } - ], - "src": "5948:337:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6333:48:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6343:32:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6368:5:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "6361:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "6361:13:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "6354:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "6354:21:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "6343:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6315:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "6325:7:1", - "type": "" - } - ], - "src": "6291:90:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6427:76:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6481:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6490:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6493:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "6483:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "6483:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "6483:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6450:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6472:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bool", - "nodeType": "YulIdentifier", - "src": "6457:14:1" - }, - "nodeType": "YulFunctionCall", - "src": "6457:21:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "6447:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "6447:32:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "6440:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "6440:40:1" - }, - "nodeType": "YulIf", - "src": "6437:60:1" - } - ] - }, - "name": "validator_revert_t_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6420:5:1", - "type": "" - } - ], - "src": "6387:116:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6558:84:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "6568:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "6590:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "6577:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "6577:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6568:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6630:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_bool", - "nodeType": "YulIdentifier", - "src": "6606:23:1" - }, - "nodeType": "YulFunctionCall", - "src": "6606:30:1" - }, - "nodeType": "YulExpressionStatement", - "src": "6606:30:1" - } - ] - }, - "name": "abi_decode_t_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "6536:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "6544:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6552:5:1", - "type": "" - } - ], - "src": "6509:133:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6846:842:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "6893:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", - "nodeType": "YulIdentifier", - "src": "6895:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "6895:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "6895:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "6867:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6876:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "6863:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "6863:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6888:3:1", - "type": "", - "value": "320" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "6859:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "6859:33:1" - }, - "nodeType": "YulIf", - "src": "6856:120:1" - }, - { - "nodeType": "YulBlock", - "src": "6986:116:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7001:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7015:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "7005:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7030:62:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7064:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "7075:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7060:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "7060:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7084:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint32", - "nodeType": "YulIdentifier", - "src": "7040:19:1" - }, - "nodeType": "YulFunctionCall", - "src": "7040:52:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "7030:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "7112:141:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7127:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7141:2:1", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "7131:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7157:86:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7215:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "7226:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7211:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "7211:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7235:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "7167:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "7167:76:1" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "7157:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "7263:141:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7278:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7292:2:1", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "7282:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7308:86:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7366:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "7377:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7362:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "7362:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7386:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_array$_t_bytes32_$4_memory_ptr", - "nodeType": "YulIdentifier", - "src": "7318:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "7318:76:1" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "7308:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "7414:141:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7429:17:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7443:3:1", - "type": "", - "value": "224" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "7433:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7460:85:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7517:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "7528:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7513:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "7513:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7537:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_array$_t_bytes8_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "7470:42:1" - }, - "nodeType": "YulFunctionCall", - "src": "7470:75:1" - }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "7460:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "7565:116:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "7580:17:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7594:3:1", - "type": "", - "value": "288" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "7584:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7611:60:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "7643:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "7654:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7639:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "7639:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "7663:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_bool", - "nodeType": "YulIdentifier", - "src": "7621:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "7621:50:1" - }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "7611:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32t_array$_t_bytes32_$2_memory_ptrt_array$_t_bytes32_$4_memory_ptrt_array$_t_bytes8_$2_memory_ptrt_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6784:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "6795:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6807:6:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "6815:6:1", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "6823:6:1", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "6831:6:1", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "6839:6:1", - "type": "" - } - ], - "src": "6648:1040:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7766:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7777:14:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7787:4:1", - "type": "", - "value": "0x02" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7777:6:1" - } - ] - } - ] - }, - "name": "array_length_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "7749:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7759:6:1", - "type": "" - } - ], - "src": "7694:104:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7913:34:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7923:18:1", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "7938:3:1" - }, - "variableNames": [ - { - "name": "updated_pos", - "nodeType": "YulIdentifier", - "src": "7923:11:1" - } - ] - } - ] - }, - "name": "array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "7885:3:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7890:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "updated_pos", - "nodeType": "YulTypedName", - "src": "7901:11:1", - "type": "" - } - ], - "src": "7804:143:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8023:28:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8033:11:1", - "value": { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "8041:3:1" - }, - "variableNames": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "8033:4:1" - } - ] - } - ] - }, - "name": "array_dataslot_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nodeType": "YulTypedName", - "src": "8010:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "data", - "nodeType": "YulTypedName", - "src": "8018:4:1", - "type": "" - } - ], - "src": "7953:98:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8112:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8129:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8152:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bytes32", - "nodeType": "YulIdentifier", - "src": "8134:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "8134:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "8122:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "8122:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "8122:37:1" - } - ] - }, - "name": "abi_encode_t_bytes32_to_t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "8100:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8107:3:1", - "type": "" - } - ], - "src": "8057:108:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8251:99:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "8295:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8303:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes32_to_t_bytes32", - "nodeType": "YulIdentifier", - "src": "8261:33:1" - }, - "nodeType": "YulFunctionCall", - "src": "8261:46:1" - }, - "nodeType": "YulExpressionStatement", - "src": "8261:46:1" - }, - { - "nodeType": "YulAssignment", - "src": "8316:28:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8334:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8339:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8330:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "8330:14:1" - }, - "variableNames": [ - { - "name": "updatedPos", - "nodeType": "YulIdentifier", - "src": "8316:10:1" - } - ] - } - ] - }, - "name": "abi_encodeUpdatedPos_t_bytes32_to_t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "8224:6:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8232:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "updatedPos", - "nodeType": "YulTypedName", - "src": "8240:10:1", - "type": "" - } - ], - "src": "8171:179:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8429:38:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8439:22:1", - "value": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "8451:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8456:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8447:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "8447:14:1" - }, - "variableNames": [ - { - "name": "next", - "nodeType": "YulIdentifier", - "src": "8439:4:1" - } - ] - } - ] - }, - "name": "array_nextElement_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nodeType": "YulTypedName", - "src": "8416:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "next", - "nodeType": "YulTypedName", - "src": "8424:4:1", - "type": "" - } - ], - "src": "8356:111:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8617:582:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8627:66:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8687:5:1" - } - ], - "functionName": { - "name": "array_length_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "8641:45:1" - }, - "nodeType": "YulFunctionCall", - "src": "8641:52:1" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "8631:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "8702:91:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8781:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8786:6:1" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "8709:71:1" - }, - "nodeType": "YulFunctionCall", - "src": "8709:84:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "8702:3:1" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8802:69:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "8865:5:1" - } - ], - "functionName": { - "name": "array_dataslot_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "8817:47:1" - }, - "nodeType": "YulFunctionCall", - "src": "8817:54:1" - }, - "variables": [ - { - "name": "baseRef", - "nodeType": "YulTypedName", - "src": "8806:7:1", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "8880:21:1", - "value": { - "name": "baseRef", - "nodeType": "YulIdentifier", - "src": "8894:7:1" - }, - "variables": [ - { - "name": "srcPtr", - "nodeType": "YulTypedName", - "src": "8884:6:1", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "8970:222:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8984:34:1", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9011:6:1" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "9005:5:1" - }, - "nodeType": "YulFunctionCall", - "src": "9005:13:1" - }, - "variables": [ - { - "name": "elementValue0", - "nodeType": "YulTypedName", - "src": "8988:13:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9031:70:1", - "value": { - "arguments": [ - { - "name": "elementValue0", - "nodeType": "YulIdentifier", - "src": "9082:13:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9097:3:1" - } - ], - "functionName": { - "name": "abi_encodeUpdatedPos_t_bytes32_to_t_bytes32", - "nodeType": "YulIdentifier", - "src": "9038:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "9038:63:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "9031:3:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "9114:68:1", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9175:6:1" - } - ], - "functionName": { - "name": "array_nextElement_t_array$_t_bytes32_$2_memory_ptr", - "nodeType": "YulIdentifier", - "src": "9124:50:1" - }, - "nodeType": "YulFunctionCall", - "src": "9124:58:1" - }, - "variableNames": [ - { - "name": "srcPtr", - "nodeType": "YulIdentifier", - "src": "9114:6:1" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8932:1:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8935:6:1" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "8929:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "8929:13:1" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "8943:18:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8945:14:1", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8954:1:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8957:1:1", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8950:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "8950:9:1" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "8945:1:1" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "8914:14:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8916:10:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8925:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "8920:1:1", - "type": "" - } - ] - } - ] - }, - "src": "8910:282:1" - } - ] - }, - "name": "abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "8604:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "8611:3:1", - "type": "" - } - ], - "src": "8505:694:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9349:170:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9359:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9371:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9382:2:1", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9367:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "9367:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "9359:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "9485:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9498:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9509:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9494:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "9494:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "9395:89:1" - }, - "nodeType": "YulFunctionCall", - "src": "9395:117:1" - }, - "nodeType": "YulExpressionStatement", - "src": "9395:117:1" - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_bytes32_$2_memory_ptr__to_t_array$_t_bytes32_$2_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "9321:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "9333:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "9344:4:1", - "type": "" - } - ], - "src": "9205:314:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9553:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9570:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9573:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9563:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "9563:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "9563:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9667:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9670:4:1", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "9660:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "9660:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "9660:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9691:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9694:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "9684:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "9684:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "9684:15:1" - } - ] - }, - "name": "panic_error_0x32", - "nodeType": "YulFunctionDefinition", - "src": "9525:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9754:53:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9764:36:1", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9789:3:1", - "type": "", - "value": "224" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9794:5:1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "9785:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "9785:15:1" - }, - "variableNames": [ - { - "name": "newValue", - "nodeType": "YulIdentifier", - "src": "9764:8:1" - } - ] - } - ] - }, - "name": "shift_left_224", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "9735:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "newValue", - "nodeType": "YulTypedName", - "src": "9745:8:1", - "type": "" - } - ], - "src": "9711:96:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9859:48:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "9869:32:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9895:5:1" - } - ], - "functionName": { - "name": "shift_left_224", - "nodeType": "YulIdentifier", - "src": "9880:14:1" - }, - "nodeType": "YulFunctionCall", - "src": "9880:21:1" - }, - "variableNames": [ - { - "name": "aligned", - "nodeType": "YulIdentifier", - "src": "9869:7:1" - } - ] - } - ] - }, - "name": "leftAlign_t_uint32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "9841:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "aligned", - "nodeType": "YulTypedName", - "src": "9851:7:1", - "type": "" - } - ], - "src": "9813:94:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "9994:72:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10011:3:1" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10052:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint32", - "nodeType": "YulIdentifier", - "src": "10035:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "10035:23:1" - } - ], - "functionName": { - "name": "leftAlign_t_uint32", - "nodeType": "YulIdentifier", - "src": "10016:18:1" - }, - "nodeType": "YulFunctionCall", - "src": "10016:43:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10004:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "10004:56:1" - }, - "nodeType": "YulExpressionStatement", - "src": "10004:56:1" - } - ] - }, - "name": "abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "9982:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "9989:3:1", - "type": "" - } - ], - "src": "9913:153:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10119:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10129:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10140:5:1" - }, - "variableNames": [ - { - "name": "aligned", - "nodeType": "YulIdentifier", - "src": "10129:7:1" - } - ] - } - ] - }, - "name": "leftAlign_t_bytes32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10101:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "aligned", - "nodeType": "YulTypedName", - "src": "10111:7:1", - "type": "" - } - ], - "src": "10072:79:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10240:74:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10257:3:1" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10300:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bytes32", - "nodeType": "YulIdentifier", - "src": "10282:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "10282:24:1" - } - ], - "functionName": { - "name": "leftAlign_t_bytes32", - "nodeType": "YulIdentifier", - "src": "10262:19:1" - }, - "nodeType": "YulFunctionCall", - "src": "10262:45:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10250:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "10250:58:1" - }, - "nodeType": "YulExpressionStatement", - "src": "10250:58:1" - } - ] - }, - "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10228:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "10235:3:1", - "type": "" - } - ], - "src": "10157:157:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10366:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10376:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10387:5:1" - }, - "variableNames": [ - { - "name": "aligned", - "nodeType": "YulIdentifier", - "src": "10376:7:1" - } - ] - } - ] - }, - "name": "leftAlign_t_bytes8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10348:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "aligned", - "nodeType": "YulTypedName", - "src": "10358:7:1", - "type": "" - } - ], - "src": "10320:78:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10485:72:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10502:3:1" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10543:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bytes8", - "nodeType": "YulIdentifier", - "src": "10526:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "10526:23:1" - } - ], - "functionName": { - "name": "leftAlign_t_bytes8", - "nodeType": "YulIdentifier", - "src": "10507:18:1" - }, - "nodeType": "YulFunctionCall", - "src": "10507:43:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10495:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "10495:56:1" - }, - "nodeType": "YulExpressionStatement", - "src": "10495:56:1" - } - ] - }, - "name": "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10473:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "10480:3:1", - "type": "" - } - ], - "src": "10404:153:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10606:53:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10616:36:1", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10641:3:1", - "type": "", - "value": "248" - }, - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10646:5:1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "10637:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "10637:15:1" - }, - "variableNames": [ - { - "name": "newValue", - "nodeType": "YulIdentifier", - "src": "10616:8:1" - } - ] - } - ] - }, - "name": "shift_left_248", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10587:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "newValue", - "nodeType": "YulTypedName", - "src": "10597:8:1", - "type": "" - } - ], - "src": "10563:96:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10710:48:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10720:32:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10746:5:1" - } - ], - "functionName": { - "name": "shift_left_248", - "nodeType": "YulIdentifier", - "src": "10731:14:1" - }, - "nodeType": "YulFunctionCall", - "src": "10731:21:1" - }, - "variableNames": [ - { - "name": "aligned", - "nodeType": "YulIdentifier", - "src": "10720:7:1" - } - ] - } - ] - }, - "name": "leftAlign_t_uint8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10692:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "aligned", - "nodeType": "YulTypedName", - "src": "10702:7:1", - "type": "" - } - ], - "src": "10665:93:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10808:51:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "10818:35:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10847:5:1" - } - ], - "functionName": { - "name": "leftAlign_t_uint8", - "nodeType": "YulIdentifier", - "src": "10829:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "10829:24:1" - }, - "variableNames": [ - { - "name": "aligned", - "nodeType": "YulIdentifier", - "src": "10818:7:1" - } - ] - } - ] - }, - "name": "leftAlign_t_bool", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10790:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "aligned", - "nodeType": "YulTypedName", - "src": "10800:7:1", - "type": "" - } - ], - "src": "10764:95:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "10942:68:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "10959:3:1" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "10996:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bool", - "nodeType": "YulIdentifier", - "src": "10981:14:1" - }, - "nodeType": "YulFunctionCall", - "src": "10981:21:1" - } - ], - "functionName": { - "name": "leftAlign_t_bool", - "nodeType": "YulIdentifier", - "src": "10964:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "10964:39:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "10952:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "10952:52:1" - }, - "nodeType": "YulExpressionStatement", - "src": "10952:52:1" - } - ] - }, - "name": "abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "10930:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "10937:3:1", - "type": "" - } - ], - "src": "10865:145:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11372:1141:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "11443:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11452:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "11383:59:1" - }, - "nodeType": "YulFunctionCall", - "src": "11383:73:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11383:73:1" - }, - { - "nodeType": "YulAssignment", - "src": "11465:18:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11476:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11481:1:1", - "type": "", - "value": "4" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11472:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "11472:11:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11465:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "11555:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11564:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "11493:61:1" - }, - "nodeType": "YulFunctionCall", - "src": "11493:75:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11493:75:1" - }, - { - "nodeType": "YulAssignment", - "src": "11577:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11588:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11593:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11584:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "11584:12:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11577:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "11668:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11677:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "11606:61:1" - }, - "nodeType": "YulFunctionCall", - "src": "11606:75:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11606:75:1" - }, - { - "nodeType": "YulAssignment", - "src": "11690:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11701:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11706:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11697:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "11697:12:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11690:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "11781:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11790:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "11719:61:1" - }, - "nodeType": "YulFunctionCall", - "src": "11719:75:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11719:75:1" - }, - { - "nodeType": "YulAssignment", - "src": "11803:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11814:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11819:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11810:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "11810:12:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11803:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "11894:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11903:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "11832:61:1" - }, - "nodeType": "YulFunctionCall", - "src": "11832:75:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11832:75:1" - }, - { - "nodeType": "YulAssignment", - "src": "11916:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11927:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11932:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "11923:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "11923:12:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11916:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value5", - "nodeType": "YulIdentifier", - "src": "12007:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12016:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "11945:61:1" - }, - "nodeType": "YulFunctionCall", - "src": "11945:75:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11945:75:1" - }, - { - "nodeType": "YulAssignment", - "src": "12029:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12040:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12045:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12036:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "12036:12:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12029:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value6", - "nodeType": "YulIdentifier", - "src": "12120:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12129:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "12058:61:1" - }, - "nodeType": "YulFunctionCall", - "src": "12058:75:1" - }, - "nodeType": "YulExpressionStatement", - "src": "12058:75:1" - }, - { - "nodeType": "YulAssignment", - "src": "12142:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12153:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12158:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12149:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "12149:12:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12142:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value7", - "nodeType": "YulIdentifier", - "src": "12231:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12240:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "12171:59:1" - }, - "nodeType": "YulFunctionCall", - "src": "12171:73:1" - }, - "nodeType": "YulExpressionStatement", - "src": "12171:73:1" - }, - { - "nodeType": "YulAssignment", - "src": "12253:18:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12264:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12269:1:1", - "type": "", - "value": "8" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12260:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "12260:11:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12253:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value8", - "nodeType": "YulIdentifier", - "src": "12341:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12350:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "12281:59:1" - }, - "nodeType": "YulFunctionCall", - "src": "12281:73:1" - }, - "nodeType": "YulExpressionStatement", - "src": "12281:73:1" - }, - { - "nodeType": "YulAssignment", - "src": "12363:18:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12374:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12379:1:1", - "type": "", - "value": "8" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12370:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "12370:11:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12363:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value9", - "nodeType": "YulIdentifier", - "src": "12447:6:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12456:3:1" - } - ], - "functionName": { - "name": "abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack", - "nodeType": "YulIdentifier", - "src": "12391:55:1" - }, - "nodeType": "YulFunctionCall", - "src": "12391:69:1" - }, - "nodeType": "YulExpressionStatement", - "src": "12391:69:1" - }, - { - "nodeType": "YulAssignment", - "src": "12469:18:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12480:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12485:1:1", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12476:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "12476:11:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12469:3:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "12497:10:1", - "value": { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12504:3:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "12497:3:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__to_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "11279:3:1", - "type": "" - }, - { - "name": "value9", - "nodeType": "YulTypedName", - "src": "11285:6:1", - "type": "" - }, - { - "name": "value8", - "nodeType": "YulTypedName", - "src": "11293:6:1", - "type": "" - }, - { - "name": "value7", - "nodeType": "YulTypedName", - "src": "11301:6:1", - "type": "" - }, - { - "name": "value6", - "nodeType": "YulTypedName", - "src": "11309:6:1", - "type": "" - }, - { - "name": "value5", - "nodeType": "YulTypedName", - "src": "11317:6:1", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "11325:6:1", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "11333:6:1", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "11341:6:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "11349:6:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "11357:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "11368:3:1", - "type": "" - } - ], - "src": "11016:1497:1" - } - ] - }, - "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint32(value) -> cleaned {\n cleaned := and(value, 0xffffffff)\n }\n\n function validator_revert_t_uint32(value) {\n if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint32(value)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_array$_t_bytes32_$2_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n function cleanup_t_bytes32(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_bytes32(value) {\n if iszero(eq(value, cleanup_t_bytes32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes32(value)\n }\n\n // bytes32[2]\n function abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes32_$2_memory_ptr(length))\n let dst := array\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_bytes32(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes32[2]\n function abi_decode_t_array$_t_bytes32_$2_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := 0x02\n array := abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr(offset, length, end)\n }\n\n function array_allocation_size_t_array$_t_bytes32_$4_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n }\n\n // bytes32[4]\n function abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes32_$4_memory_ptr(length))\n let dst := array\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_bytes32(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes32[4]\n function abi_decode_t_array$_t_bytes32_$4_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := 0x04\n array := abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr(offset, length, end)\n }\n\n function array_allocation_size_t_array$_t_bytes8_$2_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n }\n\n function cleanup_t_bytes8(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff000000000000000000000000000000000000000000000000)\n }\n\n function validator_revert_t_bytes8(value) {\n if iszero(eq(value, cleanup_t_bytes8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes8(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes8(value)\n }\n\n // bytes8[2]\n function abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes8_$2_memory_ptr(length))\n let dst := array\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_bytes8(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes8[2]\n function abi_decode_t_array$_t_bytes8_$2_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := 0x02\n array := abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr(offset, length, end)\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_uint32t_array$_t_bytes32_$2_memory_ptrt_array$_t_bytes32_$4_memory_ptrt_array$_t_bytes8_$2_memory_ptrt_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 320) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_array$_t_bytes32_$2_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value2 := abi_decode_t_array$_t_bytes32_$4_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 224\n\n value3 := abi_decode_t_array$_t_bytes8_$2_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 288\n\n value4 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_length_t_array$_t_bytes32_$2_memory_ptr(value) -> length {\n\n length := 0x02\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function array_dataslot_t_array$_t_bytes32_$2_memory_ptr(ptr) -> data {\n data := ptr\n\n }\n\n function abi_encode_t_bytes32_to_t_bytes32(value, pos) {\n mstore(pos, cleanup_t_bytes32(value))\n }\n\n function abi_encodeUpdatedPos_t_bytes32_to_t_bytes32(value0, pos) -> updatedPos {\n abi_encode_t_bytes32_to_t_bytes32(value0, pos)\n updatedPos := add(pos, 0x20)\n }\n\n function array_nextElement_t_array$_t_bytes32_$2_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // bytes32[2] -> bytes32[2]\n function abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack(value, pos) {\n let length := array_length_t_array$_t_bytes32_$2_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack(pos, length)\n let baseRef := array_dataslot_t_array$_t_bytes32_$2_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n let elementValue0 := mload(srcPtr)\n pos := abi_encodeUpdatedPos_t_bytes32_to_t_bytes32(elementValue0, pos)\n srcPtr := array_nextElement_t_array$_t_bytes32_$2_memory_ptr(srcPtr)\n }\n\n }\n\n function abi_encode_tuple_t_array$_t_bytes32_$2_memory_ptr__to_t_array$_t_bytes32_$2_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x32() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n\n function shift_left_224(value) -> newValue {\n newValue :=\n\n shl(224, value)\n\n }\n\n function leftAlign_t_uint32(value) -> aligned {\n aligned := shift_left_224(value)\n }\n\n function abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_uint32(cleanup_t_uint32(value)))\n }\n\n function leftAlign_t_bytes32(value) -> aligned {\n aligned := value\n }\n\n function abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_bytes32(cleanup_t_bytes32(value)))\n }\n\n function leftAlign_t_bytes8(value) -> aligned {\n aligned := value\n }\n\n function abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_bytes8(cleanup_t_bytes8(value)))\n }\n\n function shift_left_248(value) -> newValue {\n newValue :=\n\n shl(248, value)\n\n }\n\n function leftAlign_t_uint8(value) -> aligned {\n aligned := shift_left_248(value)\n }\n\n function leftAlign_t_bool(value) -> aligned {\n aligned := leftAlign_t_uint8(value)\n }\n\n function abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_bool(cleanup_t_bool(value)))\n }\n\n function abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__to_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__nonPadded_inplace_fromStack_reversed(pos , value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> end {\n\n abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack(value0, pos)\n pos := add(pos, 4)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value1, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value2, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value3, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value4, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value5, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value6, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack(value7, pos)\n pos := add(pos, 8)\n\n abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack(value8, pos)\n pos := add(pos, 8)\n\n abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack(value9, pos)\n pos := add(pos, 1)\n\n end := pos\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806372de3cbd1461003b578063fc75ac471461006b575b600080fd5b610055600480360381019061005091906107fc565b610089565b6040516100629190610924565b60405180910390f35b6100736101b5565b6040516100809190610924565b60405180910390f35b6100916103dc565b6100996103dc565b600087876000600281106100b0576100af61093f565b5b6020020151886001600281106100c9576100c861093f565b5b6020020151886000600481106100e2576100e161093f565b5b6020020151896001600481106100fb576100fa61093f565b5b60200201518a6002600481106101145761011361093f565b5b60200201518b60036004811061012d5761012c61093f565b5b60200201518b6000600281106101465761014561093f565b5b60200201518c60016002811061015f5761015e61093f565b5b60200201518c60405160200161017e9a99989796959493929190610a2e565b604051602081830303815290604052905060408260d5602084016009600019fa6101a757600080fd5b819250505095945050505050565b6101bd6103dc565b6000600c90506101cb6103dc565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581600060028110610200576101ff61093f565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b8160016002811061023e5761023d61093f565b5b60200201818152505061024f6103fe565b7f6162630000000000000000000000000000000000000000000000000000000000816000600481106102845761028361093f565b5b6020020181815250506000816001600481106102a3576102a261093f565b5b6020020181815250506000816002600481106102c2576102c161093f565b5b6020020181815250506000816003600481106102e1576102e061093f565b5b6020020181815250506102f2610420565b7f0300000000000000000000000000000000000000000000000000000000000000816000600281106103275761032661093f565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff19168152505060008160016002811061037e5761037d61093f565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250506000600190506103d28585858585610089565b9550505050505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b600063ffffffff82169050919050565b61046a81610451565b811461047557600080fd5b50565b60008135905061048781610461565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6104db82610492565b810181811067ffffffffffffffff821117156104fa576104f96104a3565b5b80604052505050565b600061050d610442565b905061051982826104d2565b919050565b600067ffffffffffffffff821115610539576105386104a3565b5b602082029050919050565b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b600061059261058d8461051e565b610503565b905080602084028301858111156105ac576105ab610544565b5b835b818110156105d557806105c1888261056a565b8452602084019350506020810190506105ae565b5050509392505050565b600082601f8301126105f4576105f361048d565b5b600261060184828561057f565b91505092915050565b600067ffffffffffffffff821115610625576106246104a3565b5b602082029050919050565b600061064361063e8461060a565b610503565b9050806020840283018581111561065d5761065c610544565b5b835b818110156106865780610672888261056a565b84526020840193505060208101905061065f565b5050509392505050565b600082601f8301126106a5576106a461048d565b5b60046106b2848285610630565b91505092915050565b600067ffffffffffffffff8211156106d6576106d56104a3565b5b602082029050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b610716816106e1565b811461072157600080fd5b50565b6000813590506107338161070d565b92915050565b600061074c610747846106bb565b610503565b9050806020840283018581111561076657610765610544565b5b835b8181101561078f578061077b8882610724565b845260208401935050602081019050610768565b5050509392505050565b600082601f8301126107ae576107ad61048d565b5b60026107bb848285610739565b91505092915050565b60008115159050919050565b6107d9816107c4565b81146107e457600080fd5b50565b6000813590506107f6816107d0565b92915050565b600080600080600061014086880312156108195761081861044c565b5b600061082788828901610478565b9550506020610838888289016105df565b945050606061084988828901610690565b93505060e061085a88828901610799565b92505061012061086c888289016107e7565b9150509295509295909350565b600060029050919050565b600081905092915050565b6000819050919050565b6108a281610549565b82525050565b60006108b48383610899565b60208301905092915050565b6000602082019050919050565b6108d681610879565b6108e08184610884565b92506108eb8261088f565b8060005b8381101561091c57815161090387826108a8565b965061090e836108c0565b9250506001810190506108ef565b505050505050565b600060408201905061093960008301846108cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160e01b9050919050565b60006109868261096e565b9050919050565b61099e61099982610451565b61097b565b82525050565b6000819050919050565b6109bf6109ba82610549565b6109a4565b82525050565b6000819050919050565b6109e06109db826106e1565b6109c5565b82525050565b60008160f81b9050919050565b60006109fe826109e6565b9050919050565b6000610a10826109f3565b9050919050565b610a28610a23826107c4565b610a05565b82525050565b6000610a3a828d61098d565b600482019150610a4a828c6109ae565b602082019150610a5a828b6109ae565b602082019150610a6a828a6109ae565b602082019150610a7a82896109ae565b602082019150610a8a82886109ae565b602082019150610a9a82876109ae565b602082019150610aaa82866109cf565b600882019150610aba82856109cf565b600882019150610aca8284610a17565b6001820191508190509b9a505050505050505050505056fea264697066735822122091fe99b24b03429f1e07ab657ba546fcf0c5f38850a0c9471f215bb9842c763864736f6c63430008090033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x72DE3CBD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xFC75AC47 EQ PUSH2 0x6B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x7FC JUMP JUMPDEST PUSH2 0x89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x62 SWAP2 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH2 0x1B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0x924 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x91 PUSH2 0x3DC JUMP JUMPDEST PUSH2 0x99 PUSH2 0x3DC JUMP JUMPDEST PUSH1 0x0 DUP8 DUP8 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xB0 JUMPI PUSH2 0xAF PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xC9 JUMPI PUSH2 0xC8 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0xE2 JUMPI PUSH2 0xE1 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP10 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0xFB JUMPI PUSH2 0xFA PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP11 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0x114 JUMPI PUSH2 0x113 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x146 JUMPI PUSH2 0x145 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x15F JUMPI PUSH2 0x15E PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x17E SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA2E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH1 0x40 DUP3 PUSH1 0xD5 PUSH1 0x20 DUP5 ADD PUSH1 0x9 PUSH1 0x0 NOT STATICCALL PUSH2 0x1A7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1BD PUSH2 0x3DC JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC SWAP1 POP PUSH2 0x1CB PUSH2 0x3DC JUMP JUMPDEST PUSH32 0x48C9BDF267E6096A3BA7CA8485AE67BB2BF894FE72F36E3CF1361D5F3AF54FA5 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x200 JUMPI PUSH2 0x1FF PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH32 0xD182E6AD7F520E511F6C3E2B8C68059B6BBD41FBABD9831F79217E1319CDE05B DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x23E JUMPI PUSH2 0x23D PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x24F PUSH2 0x3FE JUMP JUMPDEST PUSH32 0x6162630000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0x284 JUMPI PUSH2 0x283 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0x2A3 JUMPI PUSH2 0x2A2 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0x2C2 JUMPI PUSH2 0x2C1 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0x2E1 JUMPI PUSH2 0x2E0 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x2F2 PUSH2 0x420 JUMP JUMPDEST PUSH32 0x300000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x327 JUMPI PUSH2 0x326 PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x37E JUMPI PUSH2 0x37D PUSH2 0x93F JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH2 0x3D2 DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x89 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x46A DUP2 PUSH2 0x451 JUMP JUMPDEST DUP2 EQ PUSH2 0x475 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x487 DUP2 PUSH2 0x461 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x4DB DUP3 PUSH2 0x492 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x4FA JUMPI PUSH2 0x4F9 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x50D PUSH2 0x442 JUMP JUMPDEST SWAP1 POP PUSH2 0x519 DUP3 DUP3 PUSH2 0x4D2 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x539 JUMPI PUSH2 0x538 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x55C DUP2 PUSH2 0x549 JUMP JUMPDEST DUP2 EQ PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x579 DUP2 PUSH2 0x553 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x592 PUSH2 0x58D DUP5 PUSH2 0x51E JUMP JUMPDEST PUSH2 0x503 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x5AC JUMPI PUSH2 0x5AB PUSH2 0x544 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D5 JUMPI DUP1 PUSH2 0x5C1 DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5AE JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5F4 JUMPI PUSH2 0x5F3 PUSH2 0x48D JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x601 DUP5 DUP3 DUP6 PUSH2 0x57F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x625 JUMPI PUSH2 0x624 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x643 PUSH2 0x63E DUP5 PUSH2 0x60A JUMP JUMPDEST PUSH2 0x503 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x65D JUMPI PUSH2 0x65C PUSH2 0x544 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x686 JUMPI DUP1 PUSH2 0x672 DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x65F JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6A5 JUMPI PUSH2 0x6A4 PUSH2 0x48D JUMP JUMPDEST JUMPDEST PUSH1 0x4 PUSH2 0x6B2 DUP5 DUP3 DUP6 PUSH2 0x630 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x6D6 JUMPI PUSH2 0x6D5 PUSH2 0x4A3 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x716 DUP2 PUSH2 0x6E1 JUMP JUMPDEST DUP2 EQ PUSH2 0x721 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x733 DUP2 PUSH2 0x70D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74C PUSH2 0x747 DUP5 PUSH2 0x6BB JUMP JUMPDEST PUSH2 0x503 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x766 JUMPI PUSH2 0x765 PUSH2 0x544 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x78F JUMPI DUP1 PUSH2 0x77B DUP9 DUP3 PUSH2 0x724 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x768 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7AE JUMPI PUSH2 0x7AD PUSH2 0x48D JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x7BB DUP5 DUP3 DUP6 PUSH2 0x739 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7D9 DUP2 PUSH2 0x7C4 JUMP JUMPDEST DUP2 EQ PUSH2 0x7E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x7F6 DUP2 PUSH2 0x7D0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x140 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x819 JUMPI PUSH2 0x818 PUSH2 0x44C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x827 DUP9 DUP3 DUP10 ADD PUSH2 0x478 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x838 DUP9 DUP3 DUP10 ADD PUSH2 0x5DF JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 PUSH2 0x849 DUP9 DUP3 DUP10 ADD PUSH2 0x690 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xE0 PUSH2 0x85A DUP9 DUP3 DUP10 ADD PUSH2 0x799 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x120 PUSH2 0x86C DUP9 DUP3 DUP10 ADD PUSH2 0x7E7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8A2 DUP2 PUSH2 0x549 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B4 DUP4 DUP4 PUSH2 0x899 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8D6 DUP2 PUSH2 0x879 JUMP JUMPDEST PUSH2 0x8E0 DUP2 DUP5 PUSH2 0x884 JUMP JUMPDEST SWAP3 POP PUSH2 0x8EB DUP3 PUSH2 0x88F JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x91C JUMPI DUP2 MLOAD PUSH2 0x903 DUP8 DUP3 PUSH2 0x8A8 JUMP JUMPDEST SWAP7 POP PUSH2 0x90E DUP4 PUSH2 0x8C0 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x8EF JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x939 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8CD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x986 DUP3 PUSH2 0x96E JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x99E PUSH2 0x999 DUP3 PUSH2 0x451 JUMP JUMPDEST PUSH2 0x97B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x9BA DUP3 PUSH2 0x549 JUMP JUMPDEST PUSH2 0x9A4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x9E0 PUSH2 0x9DB DUP3 PUSH2 0x6E1 JUMP JUMPDEST PUSH2 0x9C5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xF8 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9FE DUP3 PUSH2 0x9E6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA10 DUP3 PUSH2 0x9F3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA28 PUSH2 0xA23 DUP3 PUSH2 0x7C4 JUMP JUMPDEST PUSH2 0xA05 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA3A DUP3 DUP14 PUSH2 0x98D JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP PUSH2 0xA4A DUP3 DUP13 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA5A DUP3 DUP12 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA6A DUP3 DUP11 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA7A DUP3 DUP10 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA8A DUP3 DUP9 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xA9A DUP3 DUP8 PUSH2 0x9AE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0xAAA DUP3 DUP7 PUSH2 0x9CF JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0xABA DUP3 DUP6 PUSH2 0x9CF JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0xACA DUP3 DUP5 PUSH2 0xA17 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SWAP2 POP DUP2 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 INVALID SWAP10 0xB2 0x4B SUB TIMESTAMP SWAP16 0x1E SMOD 0xAB PUSH6 0x7BA546FCF0C5 RETURN DUP9 POP LOG0 0xC9 SELFBALANCE 0x1F 0x21 JUMPDEST 0xB9 DUP5 0x2C PUSH23 0x3864736F6C634300080900330000000000000000000000 ", - "sourceMap": "35:1505:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65:459;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;532:1002;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;65:459;182:17;;:::i;:::-;211:24;;:::i;:::-;246:17;283:6;291:1;293;291:4;;;;;;;:::i;:::-;;;;;;297:1;299;297:4;;;;;;;:::i;:::-;;;;;;303:1;305;303:4;;;;;;;:::i;:::-;;;;;;309:1;311;309:4;;;;;;;:::i;:::-;;;;;;315:1;317;315:4;;;;;;;:::i;:::-;;;;;;321:1;323;321:4;;;;;;;:::i;:::-;;;;;;327:1;329;327:4;;;;;;;:::i;:::-;;;;;;333:1;335;333:4;;;;;;;:::i;:::-;;;;;;339:1;266:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;246:95;;437:4;429:6;423:4;418:2;412:4;408:13;402:4;398:1;394:6;383:59;373:109;;468:1;465;458:12;373:109;509:6;502:13;;;;65:459;;;;;;;:::o;532:1002::-;570:17;;:::i;:::-;599:13;615:2;599:18;;628:19;;:::i;:::-;657:76;:1;659;657:4;;;;;;;:::i;:::-;;;;;:76;;;;;743;:1;745;743:4;;;;;;;:::i;:::-;;;;;:76;;;;;830:19;;:::i;:::-;859:76;:1;861;859:4;;;;;;;:::i;:::-;;;;;:76;;;;;945;:1;947;945:4;;;;;;;:::i;:::-;;;;;:76;;;;;1031;:1;1033;1031:4;;;;;;;:::i;:::-;;;;;:76;;;;;1117;:1;1119;1117:4;;;;;;;:::i;:::-;;;;;:76;;;;;1204:18;;:::i;:::-;1232:20;:1;1234;1232:4;;;;;;;:::i;:::-;;;;;:20;;;;;;;;;;;;;1262;:1;1264;1262:4;;;;;;;:::i;:::-;;;;;:20;;;;;;;;;;;;;1293:6;1302:4;1293:13;;1504:21;1506:6;1514:1;1517;1520;1523;1504;:21::i;:::-;1497:28;;;;;;;532:1002;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;334:93;370:7;410:10;403:5;399:22;388:33;;334:93;;;:::o;433:120::-;505:23;522:5;505:23;:::i;:::-;498:5;495:34;485:62;;543:1;540;533:12;485:62;433:120;:::o;559:137::-;604:5;642:6;629:20;620:29;;658:32;684:5;658:32;:::i;:::-;559:137;;;;:::o;702:117::-;811:1;808;801:12;825:102;866:6;917:2;913:7;908:2;901:5;897:14;893:28;883:38;;825:102;;;:::o;933:180::-;981:77;978:1;971:88;1078:4;1075:1;1068:15;1102:4;1099:1;1092:15;1119:281;1202:27;1224:4;1202:27;:::i;:::-;1194:6;1190:40;1332:6;1320:10;1317:22;1296:18;1284:10;1281:34;1278:62;1275:88;;;1343:18;;:::i;:::-;1275:88;1383:10;1379:2;1372:22;1162:238;1119:281;;:::o;1406:129::-;1440:6;1467:20;;:::i;:::-;1457:30;;1496:33;1524:4;1516:6;1496:33;:::i;:::-;1406:129;;;:::o;1541:249::-;1616:4;1706:18;1698:6;1695:30;1692:56;;;1728:18;;:::i;:::-;1692:56;1778:4;1770:6;1766:17;1758:25;;1541:249;;;:::o;1796:117::-;1905:1;1902;1895:12;1919:77;1956:7;1985:5;1974:16;;1919:77;;;:::o;2002:122::-;2075:24;2093:5;2075:24;:::i;:::-;2068:5;2065:35;2055:63;;2114:1;2111;2104:12;2055:63;2002:122;:::o;2130:139::-;2176:5;2214:6;2201:20;2192:29;;2230:33;2257:5;2230:33;:::i;:::-;2130:139;;;;:::o;2293:643::-;2387:5;2412:79;2428:62;2483:6;2428:62;:::i;:::-;2412:79;:::i;:::-;2403:88;;2511:5;2564:4;2556:6;2552:17;2544:6;2540:30;2593:3;2585:6;2582:15;2579:122;;;2612:79;;:::i;:::-;2579:122;2727:6;2710:220;2744:6;2739:3;2736:15;2710:220;;;2819:3;2848:37;2881:3;2869:10;2848:37;:::i;:::-;2843:3;2836:50;2915:4;2910:3;2906:14;2899:21;;2786:144;2770:4;2765:3;2761:14;2754:21;;2710:220;;;2714:21;2393:543;;2293:643;;;;;:::o;2960:339::-;3029:5;3078:3;3071:4;3063:6;3059:17;3055:27;3045:122;;3086:79;;:::i;:::-;3045:122;3190:4;3212:81;3289:3;3281:6;3273;3212:81;:::i;:::-;3203:90;;3035:264;2960:339;;;;:::o;3305:249::-;3380:4;3470:18;3462:6;3459:30;3456:56;;;3492:18;;:::i;:::-;3456:56;3542:4;3534:6;3530:17;3522:25;;3305:249;;;:::o;3578:643::-;3672:5;3697:79;3713:62;3768:6;3713:62;:::i;:::-;3697:79;:::i;:::-;3688:88;;3796:5;3849:4;3841:6;3837:17;3829:6;3825:30;3878:3;3870:6;3867:15;3864:122;;;3897:79;;:::i;:::-;3864:122;4012:6;3995:220;4029:6;4024:3;4021:15;3995:220;;;4104:3;4133:37;4166:3;4154:10;4133:37;:::i;:::-;4128:3;4121:50;4200:4;4195:3;4191:14;4184:21;;4071:144;4055:4;4050:3;4046:14;4039:21;;3995:220;;;3999:21;3678:543;;3578:643;;;;;:::o;4245:339::-;4314:5;4363:3;4356:4;4348:6;4344:17;4340:27;4330:122;;4371:79;;:::i;:::-;4330:122;4475:4;4497:81;4574:3;4566:6;4558;4497:81;:::i;:::-;4488:90;;4320:264;4245:339;;;;:::o;4590:248::-;4664:4;4754:18;4746:6;4743:30;4740:56;;;4776:18;;:::i;:::-;4740:56;4826:4;4818:6;4814:17;4806:25;;4590:248;;;:::o;4844:149::-;4880:7;4920:66;4913:5;4909:78;4898:89;;4844:149;;;:::o;4999:120::-;5071:23;5088:5;5071:23;:::i;:::-;5064:5;5061:34;5051:62;;5109:1;5106;5099:12;5051:62;4999:120;:::o;5125:137::-;5170:5;5208:6;5195:20;5186:29;;5224:32;5250:5;5224:32;:::i;:::-;5125:137;;;;:::o;5285:640::-;5378:5;5403:78;5419:61;5473:6;5419:61;:::i;:::-;5403:78;:::i;:::-;5394:87;;5501:5;5554:4;5546:6;5542:17;5534:6;5530:30;5583:3;5575:6;5572:15;5569:122;;;5602:79;;:::i;:::-;5569:122;5717:6;5700:219;5734:6;5729:3;5726:15;5700:219;;;5809:3;5838:36;5870:3;5858:10;5838:36;:::i;:::-;5833:3;5826:49;5904:4;5899:3;5895:14;5888:21;;5776:143;5760:4;5755:3;5751:14;5744:21;;5700:219;;;5704:21;5384:541;;5285:640;;;;;:::o;5948:337::-;6016:5;6065:3;6058:4;6050:6;6046:17;6042:27;6032:122;;6073:79;;:::i;:::-;6032:122;6177:4;6199:80;6275:3;6267:6;6259;6199:80;:::i;:::-;6190:89;;6022:263;5948:337;;;;:::o;6291:90::-;6325:7;6368:5;6361:13;6354:21;6343:32;;6291:90;;;:::o;6387:116::-;6457:21;6472:5;6457:21;:::i;:::-;6450:5;6447:32;6437:60;;6493:1;6490;6483:12;6437:60;6387:116;:::o;6509:133::-;6552:5;6590:6;6577:20;6568:29;;6606:30;6630:5;6606:30;:::i;:::-;6509:133;;;;:::o;6648:1040::-;6807:6;6815;6823;6831;6839;6888:3;6876:9;6867:7;6863:23;6859:33;6856:120;;;6895:79;;:::i;:::-;6856:120;7015:1;7040:52;7084:7;7075:6;7064:9;7060:22;7040:52;:::i;:::-;7030:62;;6986:116;7141:2;7167:76;7235:7;7226:6;7215:9;7211:22;7167:76;:::i;:::-;7157:86;;7112:141;7292:2;7318:76;7386:7;7377:6;7366:9;7362:22;7318:76;:::i;:::-;7308:86;;7263:141;7443:3;7470:75;7537:7;7528:6;7517:9;7513:22;7470:75;:::i;:::-;7460:85;;7414:141;7594:3;7621:50;7663:7;7654:6;7643:9;7639:22;7621:50;:::i;:::-;7611:60;;7565:116;6648:1040;;;;;;;;:::o;7694:104::-;7759:6;7787:4;7777:14;;7694:104;;;:::o;7804:143::-;7901:11;7938:3;7923:18;;7804:143;;;;:::o;7953:98::-;8018:4;8041:3;8033:11;;7953:98;;;:::o;8057:108::-;8134:24;8152:5;8134:24;:::i;:::-;8129:3;8122:37;8057:108;;:::o;8171:179::-;8240:10;8261:46;8303:3;8295:6;8261:46;:::i;:::-;8339:4;8334:3;8330:14;8316:28;;8171:179;;;;:::o;8356:111::-;8424:4;8456;8451:3;8447:14;8439:22;;8356:111;;;:::o;8505:694::-;8641:52;8687:5;8641:52;:::i;:::-;8709:84;8786:6;8781:3;8709:84;:::i;:::-;8702:91;;8817:54;8865:5;8817:54;:::i;:::-;8894:7;8925:1;8910:282;8935:6;8932:1;8929:13;8910:282;;;9011:6;9005:13;9038:63;9097:3;9082:13;9038:63;:::i;:::-;9031:70;;9124:58;9175:6;9124:58;:::i;:::-;9114:68;;8970:222;8957:1;8954;8950:9;8945:14;;8910:282;;;8914:14;8617:582;;;8505:694;;:::o;9205:314::-;9344:4;9382:2;9371:9;9367:18;9359:26;;9395:117;9509:1;9498:9;9494:17;9485:6;9395:117;:::i;:::-;9205:314;;;;:::o;9525:180::-;9573:77;9570:1;9563:88;9670:4;9667:1;9660:15;9694:4;9691:1;9684:15;9711:96;9745:8;9794:5;9789:3;9785:15;9764:36;;9711:96;;;:::o;9813:94::-;9851:7;9880:21;9895:5;9880:21;:::i;:::-;9869:32;;9813:94;;;:::o;9913:153::-;10016:43;10035:23;10052:5;10035:23;:::i;:::-;10016:43;:::i;:::-;10011:3;10004:56;9913:153;;:::o;10072:79::-;10111:7;10140:5;10129:16;;10072:79;;;:::o;10157:157::-;10262:45;10282:24;10300:5;10282:24;:::i;:::-;10262:45;:::i;:::-;10257:3;10250:58;10157:157;;:::o;10320:78::-;10358:7;10387:5;10376:16;;10320:78;;;:::o;10404:153::-;10507:43;10526:23;10543:5;10526:23;:::i;:::-;10507:43;:::i;:::-;10502:3;10495:56;10404:153;;:::o;10563:96::-;10597:8;10646:5;10641:3;10637:15;10616:36;;10563:96;;;:::o;10665:93::-;10702:7;10731:21;10746:5;10731:21;:::i;:::-;10720:32;;10665:93;;;:::o;10764:95::-;10800:7;10829:24;10847:5;10829:24;:::i;:::-;10818:35;;10764:95;;;:::o;10865:145::-;10964:39;10981:21;10996:5;10981:21;:::i;:::-;10964:39;:::i;:::-;10959:3;10952:52;10865:145;;:::o;11016:1497::-;11368:3;11383:73;11452:3;11443:6;11383:73;:::i;:::-;11481:1;11476:3;11472:11;11465:18;;11493:75;11564:3;11555:6;11493:75;:::i;:::-;11593:2;11588:3;11584:12;11577:19;;11606:75;11677:3;11668:6;11606:75;:::i;:::-;11706:2;11701:3;11697:12;11690:19;;11719:75;11790:3;11781:6;11719:75;:::i;:::-;11819:2;11814:3;11810:12;11803:19;;11832:75;11903:3;11894:6;11832:75;:::i;:::-;11932:2;11927:3;11923:12;11916:19;;11945:75;12016:3;12007:6;11945:75;:::i;:::-;12045:2;12040:3;12036:12;12029:19;;12058:75;12129:3;12120:6;12058:75;:::i;:::-;12158:2;12153:3;12149:12;12142:19;;12171:73;12240:3;12231:6;12171:73;:::i;:::-;12269:1;12264:3;12260:11;12253:18;;12281:73;12350:3;12341:6;12281:73;:::i;:::-;12379:1;12374:3;12370:11;12363:18;;12391:69;12456:3;12447:6;12391:69;:::i;:::-;12485:1;12480:3;12476:11;12469:18;;12504:3;12497:10;;11016:1497;;;;;;;;;;;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "568000", - "executionCost": "600", - "totalCost": "568600" - }, - "external": { - "F(uint32,bytes32[2],bytes32[4],bytes8[2],bool)": "infinite", - "callF()": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 35, "end": 1540, "name": "MSTORE", "source": 0 }, - { "begin": 35, "end": 1540, "name": "CALLVALUE", "source": 0 }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { "begin": 35, "end": 1540, "name": "ISZERO", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 35, "end": 1540, "name": "JUMPI", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { "begin": 35, "end": 1540, "name": "REVERT", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 35, "end": 1540, "name": "JUMPDEST", "source": 0 }, - { "begin": 35, "end": 1540, "name": "POP", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 35, "end": 1540, "name": "CODECOPY", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 35, "end": 1540, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122091fe99b24b03429f1e07ab657ba546fcf0c5f38850a0c9471f215bb9842c763864736f6c63430008090033", - ".code": [ - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 35, "end": 1540, "name": "MSTORE", "source": 0 }, - { "begin": 35, "end": 1540, "name": "CALLVALUE", "source": 0 }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { "begin": 35, "end": 1540, "name": "ISZERO", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 35, "end": 1540, "name": "JUMPI", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { "begin": 35, "end": 1540, "name": "REVERT", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 35, "end": 1540, "name": "JUMPDEST", "source": 0 }, - { "begin": 35, "end": 1540, "name": "POP", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 35, "end": 1540, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 35, "end": 1540, "name": "LT", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 35, "end": 1540, "name": "JUMPI", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 35, "end": 1540, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 35, "end": 1540, "name": "SHR", "source": 0 }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "72DE3CBD" - }, - { "begin": 35, "end": 1540, "name": "EQ", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 35, "end": 1540, "name": "JUMPI", "source": 0 }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "FC75AC47" - }, - { "begin": 35, "end": 1540, "name": "EQ", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 35, "end": 1540, "name": "JUMPI", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 35, "end": 1540, "name": "JUMPDEST", "source": 0 }, - { - "begin": 35, - "end": 1540, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 35, "end": 1540, "name": "DUP1", "source": 0 }, - { "begin": 35, "end": 1540, "name": "REVERT", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 65, "end": 524, "name": "JUMPDEST", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 65, - "end": 524, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 65, "end": 524, "name": "DUP1", "source": 0 }, - { "begin": 65, "end": 524, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 65, "end": 524, "name": "SUB", "source": 0 }, - { "begin": 65, "end": 524, "name": "DUP2", "source": 0 }, - { "begin": 65, "end": 524, "name": "ADD", "source": 0 }, - { "begin": 65, "end": 524, "name": "SWAP1", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 65, "end": 524, "name": "SWAP2", "source": 0 }, - { "begin": 65, "end": 524, "name": "SWAP1", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 65, - "end": 524, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 65, - "end": 524, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 65, "end": 524, "name": "JUMPDEST", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 65, - "end": 524, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 65, - "end": 524, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 65, "end": 524, "name": "JUMPDEST", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 65, "end": 524, "name": "MLOAD", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 65, "end": 524, "name": "SWAP2", "source": 0 }, - { "begin": 65, "end": 524, "name": "SWAP1", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 65, - "end": 524, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 65, - "end": 524, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 65, "end": 524, "name": "JUMPDEST", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 65, "end": 524, "name": "MLOAD", "source": 0 }, - { "begin": 65, "end": 524, "name": "DUP1", "source": 0 }, - { "begin": 65, "end": 524, "name": "SWAP2", "source": 0 }, - { "begin": 65, "end": 524, "name": "SUB", "source": 0 }, - { "begin": 65, "end": 524, "name": "SWAP1", "source": 0 }, - { "begin": 65, "end": 524, "name": "RETURN", "source": 0 }, - { - "begin": 532, - "end": 1534, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 532, "end": 1534, "name": "JUMPDEST", "source": 0 }, - { - "begin": 532, - "end": 1534, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { - "begin": 532, - "end": 1534, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 532, - "end": 1534, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 532, - "end": 1534, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 532, "end": 1534, "name": "JUMPDEST", "source": 0 }, - { - "begin": 532, - "end": 1534, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 532, "end": 1534, "name": "MLOAD", "source": 0 }, - { - "begin": 532, - "end": 1534, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 532, "end": 1534, "name": "SWAP2", "source": 0 }, - { "begin": 532, "end": 1534, "name": "SWAP1", "source": 0 }, - { - "begin": 532, - "end": 1534, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 532, - "end": 1534, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 532, - "end": 1534, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 532, "end": 1534, "name": "JUMPDEST", "source": 0 }, - { - "begin": 532, - "end": 1534, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 532, "end": 1534, "name": "MLOAD", "source": 0 }, - { "begin": 532, "end": 1534, "name": "DUP1", "source": 0 }, - { "begin": 532, "end": 1534, "name": "SWAP2", "source": 0 }, - { "begin": 532, "end": 1534, "name": "SUB", "source": 0 }, - { "begin": 532, "end": 1534, "name": "SWAP1", "source": 0 }, - { "begin": 532, "end": 1534, "name": "RETURN", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 65, "end": 524, "name": "JUMPDEST", "source": 0 }, - { - "begin": 182, - "end": 199, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { - "begin": 182, - "end": 199, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 182, - "end": 199, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 182, - "end": 199, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 182, "end": 199, "name": "JUMPDEST", "source": 0 }, - { - "begin": 211, - "end": 235, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 211, - "end": 235, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 211, - "end": 235, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 211, - "end": 235, - "name": "tag", - "source": 0, - "value": "17" - }, - { "begin": 211, "end": 235, "name": "JUMPDEST", "source": 0 }, - { - "begin": 246, - "end": 263, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 283, "end": 289, "name": "DUP8", "source": 0 }, - { "begin": 291, "end": 292, "name": "DUP8", "source": 0 }, - { - "begin": 293, - "end": 294, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 291, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 291, "end": 295, "name": "DUP2", "source": 0 }, - { "begin": 291, "end": 295, "name": "LT", "source": 0 }, - { - "begin": 291, - "end": 295, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 291, "end": 295, "name": "JUMPI", "source": 0 }, - { - "begin": 291, - "end": 295, - "name": "PUSH [tag]", - "source": 0, - "value": "19" - }, - { - "begin": 291, - "end": 295, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 291, - "end": 295, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 291, - "end": 295, - "name": "tag", - "source": 0, - "value": "19" - }, - { "begin": 291, "end": 295, "name": "JUMPDEST", "source": 0 }, - { - "begin": 291, - "end": 295, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 291, "end": 295, "name": "JUMPDEST", "source": 0 }, - { - "begin": 291, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 291, "end": 295, "name": "MUL", "source": 0 }, - { "begin": 291, "end": 295, "name": "ADD", "source": 0 }, - { "begin": 291, "end": 295, "name": "MLOAD", "source": 0 }, - { "begin": 297, "end": 298, "name": "DUP9", "source": 0 }, - { - "begin": 299, - "end": 300, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 297, - "end": 301, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 297, "end": 301, "name": "DUP2", "source": 0 }, - { "begin": 297, "end": 301, "name": "LT", "source": 0 }, - { - "begin": 297, - "end": 301, - "name": "PUSH [tag]", - "source": 0, - "value": "21" - }, - { "begin": 297, "end": 301, "name": "JUMPI", "source": 0 }, - { - "begin": 297, - "end": 301, - "name": "PUSH [tag]", - "source": 0, - "value": "22" - }, - { - "begin": 297, - "end": 301, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 297, - "end": 301, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 297, - "end": 301, - "name": "tag", - "source": 0, - "value": "22" - }, - { "begin": 297, "end": 301, "name": "JUMPDEST", "source": 0 }, - { - "begin": 297, - "end": 301, - "name": "tag", - "source": 0, - "value": "21" - }, - { "begin": 297, "end": 301, "name": "JUMPDEST", "source": 0 }, - { - "begin": 297, - "end": 301, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 297, "end": 301, "name": "MUL", "source": 0 }, - { "begin": 297, "end": 301, "name": "ADD", "source": 0 }, - { "begin": 297, "end": 301, "name": "MLOAD", "source": 0 }, - { "begin": 303, "end": 304, "name": "DUP9", "source": 0 }, - { - "begin": 305, - "end": 306, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 303, - "end": 307, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 303, "end": 307, "name": "DUP2", "source": 0 }, - { "begin": 303, "end": 307, "name": "LT", "source": 0 }, - { - "begin": 303, - "end": 307, - "name": "PUSH [tag]", - "source": 0, - "value": "23" - }, - { "begin": 303, "end": 307, "name": "JUMPI", "source": 0 }, - { - "begin": 303, - "end": 307, - "name": "PUSH [tag]", - "source": 0, - "value": "24" - }, - { - "begin": 303, - "end": 307, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 303, - "end": 307, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 303, - "end": 307, - "name": "tag", - "source": 0, - "value": "24" - }, - { "begin": 303, "end": 307, "name": "JUMPDEST", "source": 0 }, - { - "begin": 303, - "end": 307, - "name": "tag", - "source": 0, - "value": "23" - }, - { "begin": 303, "end": 307, "name": "JUMPDEST", "source": 0 }, - { - "begin": 303, - "end": 307, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 303, "end": 307, "name": "MUL", "source": 0 }, - { "begin": 303, "end": 307, "name": "ADD", "source": 0 }, - { "begin": 303, "end": 307, "name": "MLOAD", "source": 0 }, - { "begin": 309, "end": 310, "name": "DUP10", "source": 0 }, - { - "begin": 311, - "end": 312, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 309, - "end": 313, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 309, "end": 313, "name": "DUP2", "source": 0 }, - { "begin": 309, "end": 313, "name": "LT", "source": 0 }, - { - "begin": 309, - "end": 313, - "name": "PUSH [tag]", - "source": 0, - "value": "25" - }, - { "begin": 309, "end": 313, "name": "JUMPI", "source": 0 }, - { - "begin": 309, - "end": 313, - "name": "PUSH [tag]", - "source": 0, - "value": "26" - }, - { - "begin": 309, - "end": 313, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 309, - "end": 313, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 309, - "end": 313, - "name": "tag", - "source": 0, - "value": "26" - }, - { "begin": 309, "end": 313, "name": "JUMPDEST", "source": 0 }, - { - "begin": 309, - "end": 313, - "name": "tag", - "source": 0, - "value": "25" - }, - { "begin": 309, "end": 313, "name": "JUMPDEST", "source": 0 }, - { - "begin": 309, - "end": 313, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 309, "end": 313, "name": "MUL", "source": 0 }, - { "begin": 309, "end": 313, "name": "ADD", "source": 0 }, - { "begin": 309, "end": 313, "name": "MLOAD", "source": 0 }, - { "begin": 315, "end": 316, "name": "DUP11", "source": 0 }, - { - "begin": 317, - "end": 318, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { - "begin": 315, - "end": 319, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 315, "end": 319, "name": "DUP2", "source": 0 }, - { "begin": 315, "end": 319, "name": "LT", "source": 0 }, - { - "begin": 315, - "end": 319, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { "begin": 315, "end": 319, "name": "JUMPI", "source": 0 }, - { - "begin": 315, - "end": 319, - "name": "PUSH [tag]", - "source": 0, - "value": "28" - }, - { - "begin": 315, - "end": 319, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 315, - "end": 319, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 315, - "end": 319, - "name": "tag", - "source": 0, - "value": "28" - }, - { "begin": 315, "end": 319, "name": "JUMPDEST", "source": 0 }, - { - "begin": 315, - "end": 319, - "name": "tag", - "source": 0, - "value": "27" - }, - { "begin": 315, "end": 319, "name": "JUMPDEST", "source": 0 }, - { - "begin": 315, - "end": 319, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 315, "end": 319, "name": "MUL", "source": 0 }, - { "begin": 315, "end": 319, "name": "ADD", "source": 0 }, - { "begin": 315, "end": 319, "name": "MLOAD", "source": 0 }, - { "begin": 321, "end": 322, "name": "DUP12", "source": 0 }, - { - "begin": 323, - "end": 324, - "name": "PUSH", - "source": 0, - "value": "3" - }, - { - "begin": 321, - "end": 325, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 321, "end": 325, "name": "DUP2", "source": 0 }, - { "begin": 321, "end": 325, "name": "LT", "source": 0 }, - { - "begin": 321, - "end": 325, - "name": "PUSH [tag]", - "source": 0, - "value": "29" - }, - { "begin": 321, "end": 325, "name": "JUMPI", "source": 0 }, - { - "begin": 321, - "end": 325, - "name": "PUSH [tag]", - "source": 0, - "value": "30" - }, - { - "begin": 321, - "end": 325, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 321, - "end": 325, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 321, - "end": 325, - "name": "tag", - "source": 0, - "value": "30" - }, - { "begin": 321, "end": 325, "name": "JUMPDEST", "source": 0 }, - { - "begin": 321, - "end": 325, - "name": "tag", - "source": 0, - "value": "29" - }, - { "begin": 321, "end": 325, "name": "JUMPDEST", "source": 0 }, - { - "begin": 321, - "end": 325, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 321, "end": 325, "name": "MUL", "source": 0 }, - { "begin": 321, "end": 325, "name": "ADD", "source": 0 }, - { "begin": 321, "end": 325, "name": "MLOAD", "source": 0 }, - { "begin": 327, "end": 328, "name": "DUP12", "source": 0 }, - { - "begin": 329, - "end": 330, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 327, - "end": 331, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 327, "end": 331, "name": "DUP2", "source": 0 }, - { "begin": 327, "end": 331, "name": "LT", "source": 0 }, - { - "begin": 327, - "end": 331, - "name": "PUSH [tag]", - "source": 0, - "value": "31" - }, - { "begin": 327, "end": 331, "name": "JUMPI", "source": 0 }, - { - "begin": 327, - "end": 331, - "name": "PUSH [tag]", - "source": 0, - "value": "32" - }, - { - "begin": 327, - "end": 331, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 327, - "end": 331, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 327, - "end": 331, - "name": "tag", - "source": 0, - "value": "32" - }, - { "begin": 327, "end": 331, "name": "JUMPDEST", "source": 0 }, - { - "begin": 327, - "end": 331, - "name": "tag", - "source": 0, - "value": "31" - }, - { "begin": 327, "end": 331, "name": "JUMPDEST", "source": 0 }, - { - "begin": 327, - "end": 331, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 327, "end": 331, "name": "MUL", "source": 0 }, - { "begin": 327, "end": 331, "name": "ADD", "source": 0 }, - { "begin": 327, "end": 331, "name": "MLOAD", "source": 0 }, - { "begin": 333, "end": 334, "name": "DUP13", "source": 0 }, - { - "begin": 335, - "end": 336, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 333, - "end": 337, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 333, "end": 337, "name": "DUP2", "source": 0 }, - { "begin": 333, "end": 337, "name": "LT", "source": 0 }, - { - "begin": 333, - "end": 337, - "name": "PUSH [tag]", - "source": 0, - "value": "33" - }, - { "begin": 333, "end": 337, "name": "JUMPI", "source": 0 }, - { - "begin": 333, - "end": 337, - "name": "PUSH [tag]", - "source": 0, - "value": "34" - }, - { - "begin": 333, - "end": 337, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 333, - "end": 337, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 333, - "end": 337, - "name": "tag", - "source": 0, - "value": "34" - }, - { "begin": 333, "end": 337, "name": "JUMPDEST", "source": 0 }, - { - "begin": 333, - "end": 337, - "name": "tag", - "source": 0, - "value": "33" - }, - { "begin": 333, "end": 337, "name": "JUMPDEST", "source": 0 }, - { - "begin": 333, - "end": 337, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 333, "end": 337, "name": "MUL", "source": 0 }, - { "begin": 333, "end": 337, "name": "ADD", "source": 0 }, - { "begin": 333, "end": 337, "name": "MLOAD", "source": 0 }, - { "begin": 339, "end": 340, "name": "DUP13", "source": 0 }, - { - "begin": 266, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 266, "end": 341, "name": "MLOAD", "source": 0 }, - { - "begin": 266, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 266, "end": 341, "name": "ADD", "source": 0 }, - { - "begin": 266, - "end": 341, - "name": "PUSH [tag]", - "source": 0, - "value": "35" - }, - { "begin": 266, "end": 341, "name": "SWAP11", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP10", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP9", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP8", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP7", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP6", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP5", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP4", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP3", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP2", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP1", "source": 0 }, - { - "begin": 266, - "end": 341, - "name": "PUSH [tag]", - "source": 0, - "value": "36" - }, - { - "begin": 266, - "end": 341, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 266, - "end": 341, - "name": "tag", - "source": 0, - "value": "35" - }, - { "begin": 266, "end": 341, "name": "JUMPDEST", "source": 0 }, - { - "begin": 266, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 266, "end": 341, "name": "MLOAD", "source": 0 }, - { - "begin": 266, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 266, "end": 341, "name": "DUP2", "source": 0 }, - { "begin": 266, "end": 341, "name": "DUP4", "source": 0 }, - { "begin": 266, "end": 341, "name": "SUB", "source": 0 }, - { "begin": 266, "end": 341, "name": "SUB", "source": 0 }, - { "begin": 266, "end": 341, "name": "DUP2", "source": 0 }, - { "begin": 266, "end": 341, "name": "MSTORE", "source": 0 }, - { "begin": 266, "end": 341, "name": "SWAP1", "source": 0 }, - { - "begin": 266, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 266, "end": 341, "name": "MSTORE", "source": 0 }, - { "begin": 246, "end": 341, "name": "SWAP1", "source": 0 }, - { "begin": 246, "end": 341, "name": "POP", "source": 0 }, - { - "begin": 437, - "end": 441, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 429, "end": 435, "name": "DUP3", "source": 0 }, - { - "begin": 423, - "end": 427, - "name": "PUSH", - "source": 0, - "value": "D5" - }, - { - "begin": 418, - "end": 420, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 412, "end": 416, "name": "DUP5", "source": 0 }, - { "begin": 408, "end": 421, "name": "ADD", "source": 0 }, - { - "begin": 402, - "end": 406, - "name": "PUSH", - "source": 0, - "value": "9" - }, - { - "begin": 398, - "end": 399, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 394, "end": 400, "name": "NOT", "source": 0 }, - { "begin": 383, "end": 442, "name": "STATICCALL", "source": 0 }, - { - "begin": 373, - "end": 482, - "name": "PUSH [tag]", - "source": 0, - "value": "37" - }, - { "begin": 373, "end": 482, "name": "JUMPI", "source": 0 }, - { - "begin": 468, - "end": 469, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 465, "end": 466, "name": "DUP1", "source": 0 }, - { "begin": 458, "end": 470, "name": "REVERT", "source": 0 }, - { - "begin": 373, - "end": 482, - "name": "tag", - "source": 0, - "value": "37" - }, - { "begin": 373, "end": 482, "name": "JUMPDEST", "source": 0 }, - { "begin": 509, "end": 515, "name": "DUP2", "source": 0 }, - { "begin": 502, "end": 515, "name": "SWAP3", "source": 0 }, - { "begin": 502, "end": 515, "name": "POP", "source": 0 }, - { "begin": 502, "end": 515, "name": "POP", "source": 0 }, - { "begin": 502, "end": 515, "name": "POP", "source": 0 }, - { "begin": 65, "end": 524, "name": "SWAP6", "source": 0 }, - { "begin": 65, "end": 524, "name": "SWAP5", "source": 0 }, - { "begin": 65, "end": 524, "name": "POP", "source": 0 }, - { "begin": 65, "end": 524, "name": "POP", "source": 0 }, - { "begin": 65, "end": 524, "name": "POP", "source": 0 }, - { "begin": 65, "end": 524, "name": "POP", "source": 0 }, - { "begin": 65, "end": 524, "name": "POP", "source": 0 }, - { - "begin": 65, - "end": 524, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 532, - "end": 1534, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 532, "end": 1534, "name": "JUMPDEST", "source": 0 }, - { - "begin": 570, - "end": 587, - "name": "PUSH [tag]", - "source": 0, - "value": "38" - }, - { - "begin": 570, - "end": 587, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 570, - "end": 587, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 570, - "end": 587, - "name": "tag", - "source": 0, - "value": "38" - }, - { "begin": 570, "end": 587, "name": "JUMPDEST", "source": 0 }, - { - "begin": 599, - "end": 612, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 615, - "end": 617, - "name": "PUSH", - "source": 0, - "value": "C" - }, - { "begin": 599, "end": 617, "name": "SWAP1", "source": 0 }, - { "begin": 599, "end": 617, "name": "POP", "source": 0 }, - { - "begin": 628, - "end": 647, - "name": "PUSH [tag]", - "source": 0, - "value": "40" - }, - { - "begin": 628, - "end": 647, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 628, - "end": 647, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 628, - "end": 647, - "name": "tag", - "source": 0, - "value": "40" - }, - { "begin": 628, "end": 647, "name": "JUMPDEST", "source": 0 }, - { - "begin": 657, - "end": 733, - "name": "PUSH", - "source": 0, - "value": "48C9BDF267E6096A3BA7CA8485AE67BB2BF894FE72F36E3CF1361D5F3AF54FA5" - }, - { "begin": 657, "end": 658, "name": "DUP2", "source": 0 }, - { - "begin": 659, - "end": 660, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 657, - "end": 661, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 657, "end": 661, "name": "DUP2", "source": 0 }, - { "begin": 657, "end": 661, "name": "LT", "source": 0 }, - { - "begin": 657, - "end": 661, - "name": "PUSH [tag]", - "source": 0, - "value": "41" - }, - { "begin": 657, "end": 661, "name": "JUMPI", "source": 0 }, - { - "begin": 657, - "end": 661, - "name": "PUSH [tag]", - "source": 0, - "value": "42" - }, - { - "begin": 657, - "end": 661, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 657, - "end": 661, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 657, - "end": 661, - "name": "tag", - "source": 0, - "value": "42" - }, - { "begin": 657, "end": 661, "name": "JUMPDEST", "source": 0 }, - { - "begin": 657, - "end": 661, - "name": "tag", - "source": 0, - "value": "41" - }, - { "begin": 657, "end": 661, "name": "JUMPDEST", "source": 0 }, - { - "begin": 657, - "end": 661, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 657, "end": 661, "name": "MUL", "source": 0 }, - { "begin": 657, "end": 661, "name": "ADD", "source": 0 }, - { "begin": 657, "end": 733, "name": "DUP2", "source": 0 }, - { "begin": 657, "end": 733, "name": "DUP2", "source": 0 }, - { "begin": 657, "end": 733, "name": "MSTORE", "source": 0 }, - { "begin": 657, "end": 733, "name": "POP", "source": 0 }, - { "begin": 657, "end": 733, "name": "POP", "source": 0 }, - { - "begin": 743, - "end": 819, - "name": "PUSH", - "source": 0, - "value": "D182E6AD7F520E511F6C3E2B8C68059B6BBD41FBABD9831F79217E1319CDE05B" - }, - { "begin": 743, "end": 744, "name": "DUP2", "source": 0 }, - { - "begin": 745, - "end": 746, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 743, - "end": 747, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 743, "end": 747, "name": "DUP2", "source": 0 }, - { "begin": 743, "end": 747, "name": "LT", "source": 0 }, - { - "begin": 743, - "end": 747, - "name": "PUSH [tag]", - "source": 0, - "value": "43" - }, - { "begin": 743, "end": 747, "name": "JUMPI", "source": 0 }, - { - "begin": 743, - "end": 747, - "name": "PUSH [tag]", - "source": 0, - "value": "44" - }, - { - "begin": 743, - "end": 747, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 743, - "end": 747, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 743, - "end": 747, - "name": "tag", - "source": 0, - "value": "44" - }, - { "begin": 743, "end": 747, "name": "JUMPDEST", "source": 0 }, - { - "begin": 743, - "end": 747, - "name": "tag", - "source": 0, - "value": "43" - }, - { "begin": 743, "end": 747, "name": "JUMPDEST", "source": 0 }, - { - "begin": 743, - "end": 747, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 743, "end": 747, "name": "MUL", "source": 0 }, - { "begin": 743, "end": 747, "name": "ADD", "source": 0 }, - { "begin": 743, "end": 819, "name": "DUP2", "source": 0 }, - { "begin": 743, "end": 819, "name": "DUP2", "source": 0 }, - { "begin": 743, "end": 819, "name": "MSTORE", "source": 0 }, - { "begin": 743, "end": 819, "name": "POP", "source": 0 }, - { "begin": 743, "end": 819, "name": "POP", "source": 0 }, - { - "begin": 830, - "end": 849, - "name": "PUSH [tag]", - "source": 0, - "value": "45" - }, - { - "begin": 830, - "end": 849, - "name": "PUSH [tag]", - "source": 0, - "value": "46" - }, - { - "begin": 830, - "end": 849, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 830, - "end": 849, - "name": "tag", - "source": 0, - "value": "45" - }, - { "begin": 830, "end": 849, "name": "JUMPDEST", "source": 0 }, - { - "begin": 859, - "end": 935, - "name": "PUSH", - "source": 0, - "value": "6162630000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 859, "end": 860, "name": "DUP2", "source": 0 }, - { - "begin": 861, - "end": 862, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 859, - "end": 863, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 859, "end": 863, "name": "DUP2", "source": 0 }, - { "begin": 859, "end": 863, "name": "LT", "source": 0 }, - { - "begin": 859, - "end": 863, - "name": "PUSH [tag]", - "source": 0, - "value": "47" - }, - { "begin": 859, "end": 863, "name": "JUMPI", "source": 0 }, - { - "begin": 859, - "end": 863, - "name": "PUSH [tag]", - "source": 0, - "value": "48" - }, - { - "begin": 859, - "end": 863, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 859, - "end": 863, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 859, - "end": 863, - "name": "tag", - "source": 0, - "value": "48" - }, - { "begin": 859, "end": 863, "name": "JUMPDEST", "source": 0 }, - { - "begin": 859, - "end": 863, - "name": "tag", - "source": 0, - "value": "47" - }, - { "begin": 859, "end": 863, "name": "JUMPDEST", "source": 0 }, - { - "begin": 859, - "end": 863, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 859, "end": 863, "name": "MUL", "source": 0 }, - { "begin": 859, "end": 863, "name": "ADD", "source": 0 }, - { "begin": 859, "end": 935, "name": "DUP2", "source": 0 }, - { "begin": 859, "end": 935, "name": "DUP2", "source": 0 }, - { "begin": 859, "end": 935, "name": "MSTORE", "source": 0 }, - { "begin": 859, "end": 935, "name": "POP", "source": 0 }, - { "begin": 859, "end": 935, "name": "POP", "source": 0 }, - { - "begin": 945, - "end": 1021, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 945, "end": 946, "name": "DUP2", "source": 0 }, - { - "begin": 947, - "end": 948, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 945, - "end": 949, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 945, "end": 949, "name": "DUP2", "source": 0 }, - { "begin": 945, "end": 949, "name": "LT", "source": 0 }, - { - "begin": 945, - "end": 949, - "name": "PUSH [tag]", - "source": 0, - "value": "49" - }, - { "begin": 945, "end": 949, "name": "JUMPI", "source": 0 }, - { - "begin": 945, - "end": 949, - "name": "PUSH [tag]", - "source": 0, - "value": "50" - }, - { - "begin": 945, - "end": 949, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 945, - "end": 949, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 945, - "end": 949, - "name": "tag", - "source": 0, - "value": "50" - }, - { "begin": 945, "end": 949, "name": "JUMPDEST", "source": 0 }, - { - "begin": 945, - "end": 949, - "name": "tag", - "source": 0, - "value": "49" - }, - { "begin": 945, "end": 949, "name": "JUMPDEST", "source": 0 }, - { - "begin": 945, - "end": 949, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 945, "end": 949, "name": "MUL", "source": 0 }, - { "begin": 945, "end": 949, "name": "ADD", "source": 0 }, - { "begin": 945, "end": 1021, "name": "DUP2", "source": 0 }, - { "begin": 945, "end": 1021, "name": "DUP2", "source": 0 }, - { "begin": 945, "end": 1021, "name": "MSTORE", "source": 0 }, - { "begin": 945, "end": 1021, "name": "POP", "source": 0 }, - { "begin": 945, "end": 1021, "name": "POP", "source": 0 }, - { - "begin": 1031, - "end": 1107, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1031, "end": 1032, "name": "DUP2", "source": 0 }, - { - "begin": 1033, - "end": 1034, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { - "begin": 1031, - "end": 1035, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1031, "end": 1035, "name": "DUP2", "source": 0 }, - { "begin": 1031, "end": 1035, "name": "LT", "source": 0 }, - { - "begin": 1031, - "end": 1035, - "name": "PUSH [tag]", - "source": 0, - "value": "51" - }, - { "begin": 1031, "end": 1035, "name": "JUMPI", "source": 0 }, - { - "begin": 1031, - "end": 1035, - "name": "PUSH [tag]", - "source": 0, - "value": "52" - }, - { - "begin": 1031, - "end": 1035, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 1031, - "end": 1035, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1031, - "end": 1035, - "name": "tag", - "source": 0, - "value": "52" - }, - { "begin": 1031, "end": 1035, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1031, - "end": 1035, - "name": "tag", - "source": 0, - "value": "51" - }, - { "begin": 1031, "end": 1035, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1031, - "end": 1035, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1031, "end": 1035, "name": "MUL", "source": 0 }, - { "begin": 1031, "end": 1035, "name": "ADD", "source": 0 }, - { "begin": 1031, "end": 1107, "name": "DUP2", "source": 0 }, - { "begin": 1031, "end": 1107, "name": "DUP2", "source": 0 }, - { "begin": 1031, "end": 1107, "name": "MSTORE", "source": 0 }, - { "begin": 1031, "end": 1107, "name": "POP", "source": 0 }, - { "begin": 1031, "end": 1107, "name": "POP", "source": 0 }, - { - "begin": 1117, - "end": 1193, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1117, "end": 1118, "name": "DUP2", "source": 0 }, - { - "begin": 1119, - "end": 1120, - "name": "PUSH", - "source": 0, - "value": "3" - }, - { - "begin": 1117, - "end": 1121, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1117, "end": 1121, "name": "DUP2", "source": 0 }, - { "begin": 1117, "end": 1121, "name": "LT", "source": 0 }, - { - "begin": 1117, - "end": 1121, - "name": "PUSH [tag]", - "source": 0, - "value": "53" - }, - { "begin": 1117, "end": 1121, "name": "JUMPI", "source": 0 }, - { - "begin": 1117, - "end": 1121, - "name": "PUSH [tag]", - "source": 0, - "value": "54" - }, - { - "begin": 1117, - "end": 1121, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 1117, - "end": 1121, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1117, - "end": 1121, - "name": "tag", - "source": 0, - "value": "54" - }, - { "begin": 1117, "end": 1121, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1117, - "end": 1121, - "name": "tag", - "source": 0, - "value": "53" - }, - { "begin": 1117, "end": 1121, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1117, - "end": 1121, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1117, "end": 1121, "name": "MUL", "source": 0 }, - { "begin": 1117, "end": 1121, "name": "ADD", "source": 0 }, - { "begin": 1117, "end": 1193, "name": "DUP2", "source": 0 }, - { "begin": 1117, "end": 1193, "name": "DUP2", "source": 0 }, - { "begin": 1117, "end": 1193, "name": "MSTORE", "source": 0 }, - { "begin": 1117, "end": 1193, "name": "POP", "source": 0 }, - { "begin": 1117, "end": 1193, "name": "POP", "source": 0 }, - { - "begin": 1204, - "end": 1222, - "name": "PUSH [tag]", - "source": 0, - "value": "55" - }, - { - "begin": 1204, - "end": 1222, - "name": "PUSH [tag]", - "source": 0, - "value": "56" - }, - { - "begin": 1204, - "end": 1222, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1204, - "end": 1222, - "name": "tag", - "source": 0, - "value": "55" - }, - { "begin": 1204, "end": 1222, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1232, - "end": 1252, - "name": "PUSH", - "source": 0, - "value": "300000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 1232, "end": 1233, "name": "DUP2", "source": 0 }, - { - "begin": 1234, - "end": 1235, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1232, - "end": 1236, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 1232, "end": 1236, "name": "DUP2", "source": 0 }, - { "begin": 1232, "end": 1236, "name": "LT", "source": 0 }, - { - "begin": 1232, - "end": 1236, - "name": "PUSH [tag]", - "source": 0, - "value": "57" - }, - { "begin": 1232, "end": 1236, "name": "JUMPI", "source": 0 }, - { - "begin": 1232, - "end": 1236, - "name": "PUSH [tag]", - "source": 0, - "value": "58" - }, - { - "begin": 1232, - "end": 1236, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 1232, - "end": 1236, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1232, - "end": 1236, - "name": "tag", - "source": 0, - "value": "58" - }, - { "begin": 1232, "end": 1236, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1232, - "end": 1236, - "name": "tag", - "source": 0, - "value": "57" - }, - { "begin": 1232, "end": 1236, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1232, - "end": 1236, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1232, "end": 1236, "name": "MUL", "source": 0 }, - { "begin": 1232, "end": 1236, "name": "ADD", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "SWAP1", "source": 0 }, - { - "begin": 1232, - "end": 1252, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 1232, "end": 1252, "name": "NOT", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "AND", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "SWAP1", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "DUP2", "source": 0 }, - { - "begin": 1232, - "end": 1252, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 1232, "end": 1252, "name": "NOT", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "AND", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "DUP2", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "MSTORE", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "POP", "source": 0 }, - { "begin": 1232, "end": 1252, "name": "POP", "source": 0 }, - { - "begin": 1262, - "end": 1282, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1262, "end": 1263, "name": "DUP2", "source": 0 }, - { - "begin": 1264, - "end": 1265, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 1262, - "end": 1266, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 1262, "end": 1266, "name": "DUP2", "source": 0 }, - { "begin": 1262, "end": 1266, "name": "LT", "source": 0 }, - { - "begin": 1262, - "end": 1266, - "name": "PUSH [tag]", - "source": 0, - "value": "59" - }, - { "begin": 1262, "end": 1266, "name": "JUMPI", "source": 0 }, - { - "begin": 1262, - "end": 1266, - "name": "PUSH [tag]", - "source": 0, - "value": "60" - }, - { - "begin": 1262, - "end": 1266, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 1262, - "end": 1266, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1262, - "end": 1266, - "name": "tag", - "source": 0, - "value": "60" - }, - { "begin": 1262, "end": 1266, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1262, - "end": 1266, - "name": "tag", - "source": 0, - "value": "59" - }, - { "begin": 1262, "end": 1266, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1262, - "end": 1266, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1262, "end": 1266, "name": "MUL", "source": 0 }, - { "begin": 1262, "end": 1266, "name": "ADD", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "SWAP1", "source": 0 }, - { - "begin": 1262, - "end": 1282, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 1262, "end": 1282, "name": "NOT", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "AND", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "SWAP1", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "DUP2", "source": 0 }, - { - "begin": 1262, - "end": 1282, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 1262, "end": 1282, "name": "NOT", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "AND", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "DUP2", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "MSTORE", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "POP", "source": 0 }, - { "begin": 1262, "end": 1282, "name": "POP", "source": 0 }, - { - "begin": 1293, - "end": 1299, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1302, - "end": 1306, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 1293, "end": 1306, "name": "SWAP1", "source": 0 }, - { "begin": 1293, "end": 1306, "name": "POP", "source": 0 }, - { - "begin": 1504, - "end": 1525, - "name": "PUSH [tag]", - "source": 0, - "value": "61" - }, - { "begin": 1506, "end": 1512, "name": "DUP6", "source": 0 }, - { "begin": 1514, "end": 1515, "name": "DUP6", "source": 0 }, - { "begin": 1517, "end": 1518, "name": "DUP6", "source": 0 }, - { "begin": 1520, "end": 1521, "name": "DUP6", "source": 0 }, - { "begin": 1523, "end": 1524, "name": "DUP6", "source": 0 }, - { - "begin": 1504, - "end": 1505, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 1504, - "end": 1525, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1504, - "end": 1525, - "name": "tag", - "source": 0, - "value": "61" - }, - { "begin": 1504, "end": 1525, "name": "JUMPDEST", "source": 0 }, - { "begin": 1497, "end": 1525, "name": "SWAP6", "source": 0 }, - { "begin": 1497, "end": 1525, "name": "POP", "source": 0 }, - { "begin": 1497, "end": 1525, "name": "POP", "source": 0 }, - { "begin": 1497, "end": 1525, "name": "POP", "source": 0 }, - { "begin": 1497, "end": 1525, "name": "POP", "source": 0 }, - { "begin": 1497, "end": 1525, "name": "POP", "source": 0 }, - { "begin": 1497, "end": 1525, "name": "POP", "source": 0 }, - { "begin": 532, "end": 1534, "name": "SWAP1", "source": 0 }, - { - "begin": 532, - "end": 1534, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": -1, - "end": -1, - "name": "tag", - "source": -1, - "value": "15" - }, - { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "2" - }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "20" - }, - { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, - { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, - { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, - { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "JUMP", - "source": -1, - "value": "[out]" - }, - { - "begin": -1, - "end": -1, - "name": "tag", - "source": -1, - "value": "46" - }, - { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "80" - }, - { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "4" - }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "20" - }, - { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, - { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, - { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, - { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "JUMP", - "source": -1, - "value": "[out]" - }, - { - "begin": -1, - "end": -1, - "name": "tag", - "source": -1, - "value": "56" - }, - { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "40" - }, - { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "2" - }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "PUSH", - "source": -1, - "value": "20" - }, - { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, - { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, - { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, - { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "POP", "source": -1 }, - { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, - { - "begin": -1, - "end": -1, - "name": "JUMP", - "source": -1, - "value": "[out]" - }, - { - "begin": 7, - "end": 82, - "name": "tag", - "source": 1, - "value": "62" - }, - { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 1 }, - { - "begin": 40, - "end": 46, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 73, - "end": 75, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 67, "end": 76, "name": "MLOAD", "source": 1 }, - { "begin": 57, "end": 76, "name": "SWAP1", "source": 1 }, - { "begin": 57, "end": 76, "name": "POP", "source": 1 }, - { "begin": 7, "end": 82, "name": "SWAP1", "source": 1 }, - { - "begin": 7, - "end": 82, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 88, - "end": 205, - "name": "tag", - "source": 1, - "value": "63" - }, - { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, - { - "begin": 197, - "end": 198, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, - { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, - { - "begin": 334, - "end": 427, - "name": "tag", - "source": 1, - "value": "65" - }, - { "begin": 334, "end": 427, "name": "JUMPDEST", "source": 1 }, - { - "begin": 370, - "end": 377, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 410, - "end": 420, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFF" - }, - { "begin": 403, "end": 408, "name": "DUP3", "source": 1 }, - { "begin": 399, "end": 421, "name": "AND", "source": 1 }, - { "begin": 388, "end": 421, "name": "SWAP1", "source": 1 }, - { "begin": 388, "end": 421, "name": "POP", "source": 1 }, - { "begin": 334, "end": 427, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 427, "name": "SWAP1", "source": 1 }, - { "begin": 334, "end": 427, "name": "POP", "source": 1 }, - { - "begin": 334, - "end": 427, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 433, - "end": 553, - "name": "tag", - "source": 1, - "value": "66" - }, - { "begin": 433, "end": 553, "name": "JUMPDEST", "source": 1 }, - { - "begin": 505, - "end": 528, - "name": "PUSH [tag]", - "source": 1, - "value": "116" - }, - { "begin": 522, "end": 527, "name": "DUP2", "source": 1 }, - { - "begin": 505, - "end": 528, - "name": "PUSH [tag]", - "source": 1, - "value": "65" - }, - { - "begin": 505, - "end": 528, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 505, - "end": 528, - "name": "tag", - "source": 1, - "value": "116" - }, - { "begin": 505, "end": 528, "name": "JUMPDEST", "source": 1 }, - { "begin": 498, "end": 503, "name": "DUP2", "source": 1 }, - { "begin": 495, "end": 529, "name": "EQ", "source": 1 }, - { - "begin": 485, - "end": 547, - "name": "PUSH [tag]", - "source": 1, - "value": "117" - }, - { "begin": 485, "end": 547, "name": "JUMPI", "source": 1 }, - { - "begin": 543, - "end": 544, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 540, "end": 541, "name": "DUP1", "source": 1 }, - { "begin": 533, "end": 545, "name": "REVERT", "source": 1 }, - { - "begin": 485, - "end": 547, - "name": "tag", - "source": 1, - "value": "117" - }, - { "begin": 485, "end": 547, "name": "JUMPDEST", "source": 1 }, - { "begin": 433, "end": 553, "name": "POP", "source": 1 }, - { - "begin": 433, - "end": 553, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 559, - "end": 696, - "name": "tag", - "source": 1, - "value": "67" - }, - { "begin": 559, "end": 696, "name": "JUMPDEST", "source": 1 }, - { - "begin": 604, - "end": 609, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 642, "end": 648, "name": "DUP2", "source": 1 }, - { "begin": 629, "end": 649, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 620, "end": 649, "name": "SWAP1", "source": 1 }, - { "begin": 620, "end": 649, "name": "POP", "source": 1 }, - { - "begin": 658, - "end": 690, - "name": "PUSH [tag]", - "source": 1, - "value": "119" - }, - { "begin": 684, "end": 689, "name": "DUP2", "source": 1 }, - { - "begin": 658, - "end": 690, - "name": "PUSH [tag]", - "source": 1, - "value": "66" - }, - { - "begin": 658, - "end": 690, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 658, - "end": 690, - "name": "tag", - "source": 1, - "value": "119" - }, - { "begin": 658, "end": 690, "name": "JUMPDEST", "source": 1 }, - { "begin": 559, "end": 696, "name": "SWAP3", "source": 1 }, - { "begin": 559, "end": 696, "name": "SWAP2", "source": 1 }, - { "begin": 559, "end": 696, "name": "POP", "source": 1 }, - { "begin": 559, "end": 696, "name": "POP", "source": 1 }, - { - "begin": 559, - "end": 696, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 702, - "end": 819, - "name": "tag", - "source": 1, - "value": "68" - }, - { "begin": 702, "end": 819, "name": "JUMPDEST", "source": 1 }, - { - "begin": 811, - "end": 812, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 808, "end": 809, "name": "DUP1", "source": 1 }, - { "begin": 801, "end": 813, "name": "REVERT", "source": 1 }, - { - "begin": 825, - "end": 927, - "name": "tag", - "source": 1, - "value": "69" - }, - { "begin": 825, "end": 927, "name": "JUMPDEST", "source": 1 }, - { - "begin": 866, - "end": 872, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 917, - "end": 919, - "name": "PUSH", - "source": 1, - "value": "1F" - }, - { "begin": 913, "end": 920, "name": "NOT", "source": 1 }, - { - "begin": 908, - "end": 910, - "name": "PUSH", - "source": 1, - "value": "1F" - }, - { "begin": 901, "end": 906, "name": "DUP4", "source": 1 }, - { "begin": 897, "end": 911, "name": "ADD", "source": 1 }, - { "begin": 893, "end": 921, "name": "AND", "source": 1 }, - { "begin": 883, "end": 921, "name": "SWAP1", "source": 1 }, - { "begin": 883, "end": 921, "name": "POP", "source": 1 }, - { "begin": 825, "end": 927, "name": "SWAP2", "source": 1 }, - { "begin": 825, "end": 927, "name": "SWAP1", "source": 1 }, - { "begin": 825, "end": 927, "name": "POP", "source": 1 }, - { - "begin": 825, - "end": 927, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 933, - "end": 1113, - "name": "tag", - "source": 1, - "value": "70" - }, - { "begin": 933, "end": 1113, "name": "JUMPDEST", "source": 1 }, - { - "begin": 981, - "end": 1058, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 978, - "end": 979, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 971, "end": 1059, "name": "MSTORE", "source": 1 }, - { - "begin": 1078, - "end": 1082, - "name": "PUSH", - "source": 1, - "value": "41" - }, - { - "begin": 1075, - "end": 1076, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1068, "end": 1083, "name": "MSTORE", "source": 1 }, - { - "begin": 1102, - "end": 1106, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1099, - "end": 1100, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1092, "end": 1107, "name": "REVERT", "source": 1 }, - { - "begin": 1119, - "end": 1400, - "name": "tag", - "source": 1, - "value": "71" - }, - { "begin": 1119, "end": 1400, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1202, - "end": 1229, - "name": "PUSH [tag]", - "source": 1, - "value": "124" - }, - { "begin": 1224, "end": 1228, "name": "DUP3", "source": 1 }, - { - "begin": 1202, - "end": 1229, - "name": "PUSH [tag]", - "source": 1, - "value": "69" - }, - { - "begin": 1202, - "end": 1229, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1202, - "end": 1229, - "name": "tag", - "source": 1, - "value": "124" - }, - { "begin": 1202, "end": 1229, "name": "JUMPDEST", "source": 1 }, - { "begin": 1194, "end": 1200, "name": "DUP2", "source": 1 }, - { "begin": 1190, "end": 1230, "name": "ADD", "source": 1 }, - { "begin": 1332, "end": 1338, "name": "DUP2", "source": 1 }, - { "begin": 1320, "end": 1330, "name": "DUP2", "source": 1 }, - { "begin": 1317, "end": 1339, "name": "LT", "source": 1 }, - { - "begin": 1296, - "end": 1314, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" - }, - { "begin": 1284, "end": 1294, "name": "DUP3", "source": 1 }, - { "begin": 1281, "end": 1315, "name": "GT", "source": 1 }, - { "begin": 1278, "end": 1340, "name": "OR", "source": 1 }, - { "begin": 1275, "end": 1363, "name": "ISZERO", "source": 1 }, - { - "begin": 1275, - "end": 1363, - "name": "PUSH [tag]", - "source": 1, - "value": "125" - }, - { "begin": 1275, "end": 1363, "name": "JUMPI", "source": 1 }, - { - "begin": 1343, - "end": 1361, - "name": "PUSH [tag]", - "source": 1, - "value": "126" - }, - { - "begin": 1343, - "end": 1361, - "name": "PUSH [tag]", - "source": 1, - "value": "70" - }, - { - "begin": 1343, - "end": 1361, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1343, - "end": 1361, - "name": "tag", - "source": 1, - "value": "126" - }, - { "begin": 1343, "end": 1361, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1275, - "end": 1363, - "name": "tag", - "source": 1, - "value": "125" - }, - { "begin": 1275, "end": 1363, "name": "JUMPDEST", "source": 1 }, - { "begin": 1383, "end": 1393, "name": "DUP1", "source": 1 }, - { - "begin": 1379, - "end": 1381, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 1372, "end": 1394, "name": "MSTORE", "source": 1 }, - { "begin": 1162, "end": 1400, "name": "POP", "source": 1 }, - { "begin": 1119, "end": 1400, "name": "POP", "source": 1 }, - { "begin": 1119, "end": 1400, "name": "POP", "source": 1 }, - { - "begin": 1119, - "end": 1400, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1406, - "end": 1535, - "name": "tag", - "source": 1, - "value": "72" - }, - { "begin": 1406, "end": 1535, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1440, - "end": 1446, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1467, - "end": 1487, - "name": "PUSH [tag]", - "source": 1, - "value": "128" - }, - { - "begin": 1467, - "end": 1487, - "name": "PUSH [tag]", - "source": 1, - "value": "62" - }, - { - "begin": 1467, - "end": 1487, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1467, - "end": 1487, - "name": "tag", - "source": 1, - "value": "128" - }, - { "begin": 1467, "end": 1487, "name": "JUMPDEST", "source": 1 }, - { "begin": 1457, "end": 1487, "name": "SWAP1", "source": 1 }, - { "begin": 1457, "end": 1487, "name": "POP", "source": 1 }, - { - "begin": 1496, - "end": 1529, - "name": "PUSH [tag]", - "source": 1, - "value": "129" - }, - { "begin": 1524, "end": 1528, "name": "DUP3", "source": 1 }, - { "begin": 1516, "end": 1522, "name": "DUP3", "source": 1 }, - { - "begin": 1496, - "end": 1529, - "name": "PUSH [tag]", - "source": 1, - "value": "71" - }, - { - "begin": 1496, - "end": 1529, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1496, - "end": 1529, - "name": "tag", - "source": 1, - "value": "129" - }, - { "begin": 1496, "end": 1529, "name": "JUMPDEST", "source": 1 }, - { "begin": 1406, "end": 1535, "name": "SWAP2", "source": 1 }, - { "begin": 1406, "end": 1535, "name": "SWAP1", "source": 1 }, - { "begin": 1406, "end": 1535, "name": "POP", "source": 1 }, - { - "begin": 1406, - "end": 1535, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1541, - "end": 1790, - "name": "tag", - "source": 1, - "value": "73" - }, - { "begin": 1541, "end": 1790, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1616, - "end": 1620, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1706, - "end": 1724, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" - }, - { "begin": 1698, "end": 1704, "name": "DUP3", "source": 1 }, - { "begin": 1695, "end": 1725, "name": "GT", "source": 1 }, - { "begin": 1692, "end": 1748, "name": "ISZERO", "source": 1 }, - { - "begin": 1692, - "end": 1748, - "name": "PUSH [tag]", - "source": 1, - "value": "131" - }, - { "begin": 1692, "end": 1748, "name": "JUMPI", "source": 1 }, - { - "begin": 1728, - "end": 1746, - "name": "PUSH [tag]", - "source": 1, - "value": "132" - }, - { - "begin": 1728, - "end": 1746, - "name": "PUSH [tag]", - "source": 1, - "value": "70" - }, - { - "begin": 1728, - "end": 1746, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1728, - "end": 1746, - "name": "tag", - "source": 1, - "value": "132" - }, - { "begin": 1728, "end": 1746, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1692, - "end": 1748, - "name": "tag", - "source": 1, - "value": "131" - }, - { "begin": 1692, "end": 1748, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1778, - "end": 1782, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1770, "end": 1776, "name": "DUP3", "source": 1 }, - { "begin": 1766, "end": 1783, "name": "MUL", "source": 1 }, - { "begin": 1758, "end": 1783, "name": "SWAP1", "source": 1 }, - { "begin": 1758, "end": 1783, "name": "POP", "source": 1 }, - { "begin": 1541, "end": 1790, "name": "SWAP2", "source": 1 }, - { "begin": 1541, "end": 1790, "name": "SWAP1", "source": 1 }, - { "begin": 1541, "end": 1790, "name": "POP", "source": 1 }, - { - "begin": 1541, - "end": 1790, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1796, - "end": 1913, - "name": "tag", - "source": 1, - "value": "74" - }, - { "begin": 1796, "end": 1913, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1905, - "end": 1906, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1902, "end": 1903, "name": "DUP1", "source": 1 }, - { "begin": 1895, "end": 1907, "name": "REVERT", "source": 1 }, - { - "begin": 1919, - "end": 1996, - "name": "tag", - "source": 1, - "value": "75" - }, - { "begin": 1919, "end": 1996, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1956, - "end": 1963, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1985, "end": 1990, "name": "DUP2", "source": 1 }, - { "begin": 1974, "end": 1990, "name": "SWAP1", "source": 1 }, - { "begin": 1974, "end": 1990, "name": "POP", "source": 1 }, - { "begin": 1919, "end": 1996, "name": "SWAP2", "source": 1 }, - { "begin": 1919, "end": 1996, "name": "SWAP1", "source": 1 }, - { "begin": 1919, "end": 1996, "name": "POP", "source": 1 }, - { - "begin": 1919, - "end": 1996, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2002, - "end": 2124, - "name": "tag", - "source": 1, - "value": "76" - }, - { "begin": 2002, "end": 2124, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2075, - "end": 2099, - "name": "PUSH [tag]", - "source": 1, - "value": "136" - }, - { "begin": 2093, "end": 2098, "name": "DUP2", "source": 1 }, - { - "begin": 2075, - "end": 2099, - "name": "PUSH [tag]", - "source": 1, - "value": "75" - }, - { - "begin": 2075, - "end": 2099, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2075, - "end": 2099, - "name": "tag", - "source": 1, - "value": "136" - }, - { "begin": 2075, "end": 2099, "name": "JUMPDEST", "source": 1 }, - { "begin": 2068, "end": 2073, "name": "DUP2", "source": 1 }, - { "begin": 2065, "end": 2100, "name": "EQ", "source": 1 }, - { - "begin": 2055, - "end": 2118, - "name": "PUSH [tag]", - "source": 1, - "value": "137" - }, - { "begin": 2055, "end": 2118, "name": "JUMPI", "source": 1 }, - { - "begin": 2114, - "end": 2115, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2111, "end": 2112, "name": "DUP1", "source": 1 }, - { "begin": 2104, "end": 2116, "name": "REVERT", "source": 1 }, - { - "begin": 2055, - "end": 2118, - "name": "tag", - "source": 1, - "value": "137" - }, - { "begin": 2055, "end": 2118, "name": "JUMPDEST", "source": 1 }, - { "begin": 2002, "end": 2124, "name": "POP", "source": 1 }, - { - "begin": 2002, - "end": 2124, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2130, - "end": 2269, - "name": "tag", - "source": 1, - "value": "77" - }, - { "begin": 2130, "end": 2269, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2176, - "end": 2181, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2214, "end": 2220, "name": "DUP2", "source": 1 }, - { - "begin": 2201, - "end": 2221, - "name": "CALLDATALOAD", - "source": 1 - }, - { "begin": 2192, "end": 2221, "name": "SWAP1", "source": 1 }, - { "begin": 2192, "end": 2221, "name": "POP", "source": 1 }, - { - "begin": 2230, - "end": 2263, - "name": "PUSH [tag]", - "source": 1, - "value": "139" - }, - { "begin": 2257, "end": 2262, "name": "DUP2", "source": 1 }, - { - "begin": 2230, - "end": 2263, - "name": "PUSH [tag]", - "source": 1, - "value": "76" - }, - { - "begin": 2230, - "end": 2263, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2230, - "end": 2263, - "name": "tag", - "source": 1, - "value": "139" - }, - { "begin": 2230, "end": 2263, "name": "JUMPDEST", "source": 1 }, - { "begin": 2130, "end": 2269, "name": "SWAP3", "source": 1 }, - { "begin": 2130, "end": 2269, "name": "SWAP2", "source": 1 }, - { "begin": 2130, "end": 2269, "name": "POP", "source": 1 }, - { "begin": 2130, "end": 2269, "name": "POP", "source": 1 }, - { - "begin": 2130, - "end": 2269, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2293, - "end": 2936, - "name": "tag", - "source": 1, - "value": "78" - }, - { "begin": 2293, "end": 2936, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2387, - "end": 2392, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2412, - "end": 2491, - "name": "PUSH [tag]", - "source": 1, - "value": "141" - }, - { - "begin": 2428, - "end": 2490, - "name": "PUSH [tag]", - "source": 1, - "value": "142" - }, - { "begin": 2483, "end": 2489, "name": "DUP5", "source": 1 }, - { - "begin": 2428, - "end": 2490, - "name": "PUSH [tag]", - "source": 1, - "value": "73" - }, - { - "begin": 2428, - "end": 2490, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2428, - "end": 2490, - "name": "tag", - "source": 1, - "value": "142" - }, - { "begin": 2428, "end": 2490, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2412, - "end": 2491, - "name": "PUSH [tag]", - "source": 1, - "value": "72" - }, - { - "begin": 2412, - "end": 2491, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2412, - "end": 2491, - "name": "tag", - "source": 1, - "value": "141" - }, - { "begin": 2412, "end": 2491, "name": "JUMPDEST", "source": 1 }, - { "begin": 2403, "end": 2491, "name": "SWAP1", "source": 1 }, - { "begin": 2403, "end": 2491, "name": "POP", "source": 1 }, - { "begin": 2511, "end": 2516, "name": "DUP1", "source": 1 }, - { - "begin": 2564, - "end": 2568, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 2556, "end": 2562, "name": "DUP5", "source": 1 }, - { "begin": 2552, "end": 2569, "name": "MUL", "source": 1 }, - { "begin": 2544, "end": 2550, "name": "DUP4", "source": 1 }, - { "begin": 2540, "end": 2570, "name": "ADD", "source": 1 }, - { "begin": 2593, "end": 2596, "name": "DUP6", "source": 1 }, - { "begin": 2585, "end": 2591, "name": "DUP2", "source": 1 }, - { "begin": 2582, "end": 2597, "name": "GT", "source": 1 }, - { "begin": 2579, "end": 2701, "name": "ISZERO", "source": 1 }, - { - "begin": 2579, - "end": 2701, - "name": "PUSH [tag]", - "source": 1, - "value": "143" - }, - { "begin": 2579, "end": 2701, "name": "JUMPI", "source": 1 }, - { - "begin": 2612, - "end": 2691, - "name": "PUSH [tag]", - "source": 1, - "value": "144" - }, - { - "begin": 2612, - "end": 2691, - "name": "PUSH [tag]", - "source": 1, - "value": "74" - }, - { - "begin": 2612, - "end": 2691, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2612, - "end": 2691, - "name": "tag", - "source": 1, - "value": "144" - }, - { "begin": 2612, "end": 2691, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2579, - "end": 2701, - "name": "tag", - "source": 1, - "value": "143" - }, - { "begin": 2579, "end": 2701, "name": "JUMPDEST", "source": 1 }, - { "begin": 2727, "end": 2733, "name": "DUP4", "source": 1 }, - { - "begin": 2710, - "end": 2930, - "name": "tag", - "source": 1, - "value": "145" - }, - { "begin": 2710, "end": 2930, "name": "JUMPDEST", "source": 1 }, - { "begin": 2744, "end": 2750, "name": "DUP2", "source": 1 }, - { "begin": 2739, "end": 2742, "name": "DUP2", "source": 1 }, - { "begin": 2736, "end": 2751, "name": "LT", "source": 1 }, - { "begin": 2710, "end": 2930, "name": "ISZERO", "source": 1 }, - { - "begin": 2710, - "end": 2930, - "name": "PUSH [tag]", - "source": 1, - "value": "147" - }, - { "begin": 2710, "end": 2930, "name": "JUMPI", "source": 1 }, - { "begin": 2819, "end": 2822, "name": "DUP1", "source": 1 }, - { - "begin": 2848, - "end": 2885, - "name": "PUSH [tag]", - "source": 1, - "value": "148" - }, - { "begin": 2881, "end": 2884, "name": "DUP9", "source": 1 }, - { "begin": 2869, "end": 2879, "name": "DUP3", "source": 1 }, - { - "begin": 2848, - "end": 2885, - "name": "PUSH [tag]", - "source": 1, - "value": "77" - }, - { - "begin": 2848, - "end": 2885, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2848, - "end": 2885, - "name": "tag", - "source": 1, - "value": "148" - }, - { "begin": 2848, "end": 2885, "name": "JUMPDEST", "source": 1 }, - { "begin": 2843, "end": 2846, "name": "DUP5", "source": 1 }, - { "begin": 2836, "end": 2886, "name": "MSTORE", "source": 1 }, - { - "begin": 2915, - "end": 2919, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 2910, "end": 2913, "name": "DUP5", "source": 1 }, - { "begin": 2906, "end": 2920, "name": "ADD", "source": 1 }, - { "begin": 2899, "end": 2920, "name": "SWAP4", "source": 1 }, - { "begin": 2899, "end": 2920, "name": "POP", "source": 1 }, - { "begin": 2786, "end": 2930, "name": "POP", "source": 1 }, - { - "begin": 2770, - "end": 2774, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 2765, "end": 2768, "name": "DUP2", "source": 1 }, - { "begin": 2761, "end": 2775, "name": "ADD", "source": 1 }, - { "begin": 2754, "end": 2775, "name": "SWAP1", "source": 1 }, - { "begin": 2754, "end": 2775, "name": "POP", "source": 1 }, - { - "begin": 2710, - "end": 2930, - "name": "PUSH [tag]", - "source": 1, - "value": "145" - }, - { "begin": 2710, "end": 2930, "name": "JUMP", "source": 1 }, - { - "begin": 2710, - "end": 2930, - "name": "tag", - "source": 1, - "value": "147" - }, - { "begin": 2710, "end": 2930, "name": "JUMPDEST", "source": 1 }, - { "begin": 2714, "end": 2735, "name": "POP", "source": 1 }, - { "begin": 2393, "end": 2936, "name": "POP", "source": 1 }, - { "begin": 2393, "end": 2936, "name": "POP", "source": 1 }, - { "begin": 2293, "end": 2936, "name": "SWAP4", "source": 1 }, - { "begin": 2293, "end": 2936, "name": "SWAP3", "source": 1 }, - { "begin": 2293, "end": 2936, "name": "POP", "source": 1 }, - { "begin": 2293, "end": 2936, "name": "POP", "source": 1 }, - { "begin": 2293, "end": 2936, "name": "POP", "source": 1 }, - { - "begin": 2293, - "end": 2936, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2960, - "end": 3299, - "name": "tag", - "source": 1, - "value": "79" - }, - { "begin": 2960, "end": 3299, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3029, - "end": 3034, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 3078, "end": 3081, "name": "DUP3", "source": 1 }, - { - "begin": 3071, - "end": 3075, - "name": "PUSH", - "source": 1, - "value": "1F" - }, - { "begin": 3063, "end": 3069, "name": "DUP4", "source": 1 }, - { "begin": 3059, "end": 3076, "name": "ADD", "source": 1 }, - { "begin": 3055, "end": 3082, "name": "SLT", "source": 1 }, - { - "begin": 3045, - "end": 3167, - "name": "PUSH [tag]", - "source": 1, - "value": "150" - }, - { "begin": 3045, "end": 3167, "name": "JUMPI", "source": 1 }, - { - "begin": 3086, - "end": 3165, - "name": "PUSH [tag]", - "source": 1, - "value": "151" - }, - { - "begin": 3086, - "end": 3165, - "name": "PUSH [tag]", - "source": 1, - "value": "68" - }, - { - "begin": 3086, - "end": 3165, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3086, - "end": 3165, - "name": "tag", - "source": 1, - "value": "151" - }, - { "begin": 3086, "end": 3165, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3045, - "end": 3167, - "name": "tag", - "source": 1, - "value": "150" - }, - { "begin": 3045, "end": 3167, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3190, - "end": 3194, - "name": "PUSH", - "source": 1, - "value": "2" - }, - { - "begin": 3212, - "end": 3293, - "name": "PUSH [tag]", - "source": 1, - "value": "152" - }, - { "begin": 3289, "end": 3292, "name": "DUP5", "source": 1 }, - { "begin": 3281, "end": 3287, "name": "DUP3", "source": 1 }, - { "begin": 3273, "end": 3279, "name": "DUP6", "source": 1 }, - { - "begin": 3212, - "end": 3293, - "name": "PUSH [tag]", - "source": 1, - "value": "78" - }, - { - "begin": 3212, - "end": 3293, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3212, - "end": 3293, - "name": "tag", - "source": 1, - "value": "152" - }, - { "begin": 3212, "end": 3293, "name": "JUMPDEST", "source": 1 }, - { "begin": 3203, "end": 3293, "name": "SWAP2", "source": 1 }, - { "begin": 3203, "end": 3293, "name": "POP", "source": 1 }, - { "begin": 3035, "end": 3299, "name": "POP", "source": 1 }, - { "begin": 2960, "end": 3299, "name": "SWAP3", "source": 1 }, - { "begin": 2960, "end": 3299, "name": "SWAP2", "source": 1 }, - { "begin": 2960, "end": 3299, "name": "POP", "source": 1 }, - { "begin": 2960, "end": 3299, "name": "POP", "source": 1 }, - { - "begin": 2960, - "end": 3299, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 3305, - "end": 3554, - "name": "tag", - "source": 1, - "value": "80" - }, - { "begin": 3305, "end": 3554, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3380, - "end": 3384, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 3470, - "end": 3488, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" - }, - { "begin": 3462, "end": 3468, "name": "DUP3", "source": 1 }, - { "begin": 3459, "end": 3489, "name": "GT", "source": 1 }, - { "begin": 3456, "end": 3512, "name": "ISZERO", "source": 1 }, - { - "begin": 3456, - "end": 3512, - "name": "PUSH [tag]", - "source": 1, - "value": "154" - }, - { "begin": 3456, "end": 3512, "name": "JUMPI", "source": 1 }, - { - "begin": 3492, - "end": 3510, - "name": "PUSH [tag]", - "source": 1, - "value": "155" - }, - { - "begin": 3492, - "end": 3510, - "name": "PUSH [tag]", - "source": 1, - "value": "70" - }, - { - "begin": 3492, - "end": 3510, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3492, - "end": 3510, - "name": "tag", - "source": 1, - "value": "155" - }, - { "begin": 3492, "end": 3510, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3456, - "end": 3512, - "name": "tag", - "source": 1, - "value": "154" - }, - { "begin": 3456, "end": 3512, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3542, - "end": 3546, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 3534, "end": 3540, "name": "DUP3", "source": 1 }, - { "begin": 3530, "end": 3547, "name": "MUL", "source": 1 }, - { "begin": 3522, "end": 3547, "name": "SWAP1", "source": 1 }, - { "begin": 3522, "end": 3547, "name": "POP", "source": 1 }, - { "begin": 3305, "end": 3554, "name": "SWAP2", "source": 1 }, - { "begin": 3305, "end": 3554, "name": "SWAP1", "source": 1 }, - { "begin": 3305, "end": 3554, "name": "POP", "source": 1 }, - { - "begin": 3305, - "end": 3554, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 3578, - "end": 4221, - "name": "tag", - "source": 1, - "value": "81" - }, - { "begin": 3578, "end": 4221, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3672, - "end": 3677, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 3697, - "end": 3776, - "name": "PUSH [tag]", - "source": 1, - "value": "157" - }, - { - "begin": 3713, - "end": 3775, - "name": "PUSH [tag]", - "source": 1, - "value": "158" - }, - { "begin": 3768, "end": 3774, "name": "DUP5", "source": 1 }, - { - "begin": 3713, - "end": 3775, - "name": "PUSH [tag]", - "source": 1, - "value": "80" - }, - { - "begin": 3713, - "end": 3775, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3713, - "end": 3775, - "name": "tag", - "source": 1, - "value": "158" - }, - { "begin": 3713, "end": 3775, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3697, - "end": 3776, - "name": "PUSH [tag]", - "source": 1, - "value": "72" - }, - { - "begin": 3697, - "end": 3776, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3697, - "end": 3776, - "name": "tag", - "source": 1, - "value": "157" - }, - { "begin": 3697, "end": 3776, "name": "JUMPDEST", "source": 1 }, - { "begin": 3688, "end": 3776, "name": "SWAP1", "source": 1 }, - { "begin": 3688, "end": 3776, "name": "POP", "source": 1 }, - { "begin": 3796, "end": 3801, "name": "DUP1", "source": 1 }, - { - "begin": 3849, - "end": 3853, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 3841, "end": 3847, "name": "DUP5", "source": 1 }, - { "begin": 3837, "end": 3854, "name": "MUL", "source": 1 }, - { "begin": 3829, "end": 3835, "name": "DUP4", "source": 1 }, - { "begin": 3825, "end": 3855, "name": "ADD", "source": 1 }, - { "begin": 3878, "end": 3881, "name": "DUP6", "source": 1 }, - { "begin": 3870, "end": 3876, "name": "DUP2", "source": 1 }, - { "begin": 3867, "end": 3882, "name": "GT", "source": 1 }, - { "begin": 3864, "end": 3986, "name": "ISZERO", "source": 1 }, - { - "begin": 3864, - "end": 3986, - "name": "PUSH [tag]", - "source": 1, - "value": "159" - }, - { "begin": 3864, "end": 3986, "name": "JUMPI", "source": 1 }, - { - "begin": 3897, - "end": 3976, - "name": "PUSH [tag]", - "source": 1, - "value": "160" - }, - { - "begin": 3897, - "end": 3976, - "name": "PUSH [tag]", - "source": 1, - "value": "74" - }, - { - "begin": 3897, - "end": 3976, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3897, - "end": 3976, - "name": "tag", - "source": 1, - "value": "160" - }, - { "begin": 3897, "end": 3976, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3864, - "end": 3986, - "name": "tag", - "source": 1, - "value": "159" - }, - { "begin": 3864, "end": 3986, "name": "JUMPDEST", "source": 1 }, - { "begin": 4012, "end": 4018, "name": "DUP4", "source": 1 }, - { - "begin": 3995, - "end": 4215, - "name": "tag", - "source": 1, - "value": "161" - }, - { "begin": 3995, "end": 4215, "name": "JUMPDEST", "source": 1 }, - { "begin": 4029, "end": 4035, "name": "DUP2", "source": 1 }, - { "begin": 4024, "end": 4027, "name": "DUP2", "source": 1 }, - { "begin": 4021, "end": 4036, "name": "LT", "source": 1 }, - { "begin": 3995, "end": 4215, "name": "ISZERO", "source": 1 }, - { - "begin": 3995, - "end": 4215, - "name": "PUSH [tag]", - "source": 1, - "value": "163" - }, - { "begin": 3995, "end": 4215, "name": "JUMPI", "source": 1 }, - { "begin": 4104, "end": 4107, "name": "DUP1", "source": 1 }, - { - "begin": 4133, - "end": 4170, - "name": "PUSH [tag]", - "source": 1, - "value": "164" - }, - { "begin": 4166, "end": 4169, "name": "DUP9", "source": 1 }, - { "begin": 4154, "end": 4164, "name": "DUP3", "source": 1 }, - { - "begin": 4133, - "end": 4170, - "name": "PUSH [tag]", - "source": 1, - "value": "77" - }, - { - "begin": 4133, - "end": 4170, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 4133, - "end": 4170, - "name": "tag", - "source": 1, - "value": "164" - }, - { "begin": 4133, "end": 4170, "name": "JUMPDEST", "source": 1 }, - { "begin": 4128, "end": 4131, "name": "DUP5", "source": 1 }, - { "begin": 4121, "end": 4171, "name": "MSTORE", "source": 1 }, - { - "begin": 4200, - "end": 4204, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 4195, "end": 4198, "name": "DUP5", "source": 1 }, - { "begin": 4191, "end": 4205, "name": "ADD", "source": 1 }, - { "begin": 4184, "end": 4205, "name": "SWAP4", "source": 1 }, - { "begin": 4184, "end": 4205, "name": "POP", "source": 1 }, - { "begin": 4071, "end": 4215, "name": "POP", "source": 1 }, - { - "begin": 4055, - "end": 4059, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 4050, "end": 4053, "name": "DUP2", "source": 1 }, - { "begin": 4046, "end": 4060, "name": "ADD", "source": 1 }, - { "begin": 4039, "end": 4060, "name": "SWAP1", "source": 1 }, - { "begin": 4039, "end": 4060, "name": "POP", "source": 1 }, - { - "begin": 3995, - "end": 4215, - "name": "PUSH [tag]", - "source": 1, - "value": "161" - }, - { "begin": 3995, "end": 4215, "name": "JUMP", "source": 1 }, - { - "begin": 3995, - "end": 4215, - "name": "tag", - "source": 1, - "value": "163" - }, - { "begin": 3995, "end": 4215, "name": "JUMPDEST", "source": 1 }, - { "begin": 3999, "end": 4020, "name": "POP", "source": 1 }, - { "begin": 3678, "end": 4221, "name": "POP", "source": 1 }, - { "begin": 3678, "end": 4221, "name": "POP", "source": 1 }, - { "begin": 3578, "end": 4221, "name": "SWAP4", "source": 1 }, - { "begin": 3578, "end": 4221, "name": "SWAP3", "source": 1 }, - { "begin": 3578, "end": 4221, "name": "POP", "source": 1 }, - { "begin": 3578, "end": 4221, "name": "POP", "source": 1 }, - { "begin": 3578, "end": 4221, "name": "POP", "source": 1 }, - { - "begin": 3578, - "end": 4221, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 4245, - "end": 4584, - "name": "tag", - "source": 1, - "value": "82" - }, - { "begin": 4245, "end": 4584, "name": "JUMPDEST", "source": 1 }, - { - "begin": 4314, - "end": 4319, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 4363, "end": 4366, "name": "DUP3", "source": 1 }, - { - "begin": 4356, - "end": 4360, - "name": "PUSH", - "source": 1, - "value": "1F" - }, - { "begin": 4348, "end": 4354, "name": "DUP4", "source": 1 }, - { "begin": 4344, "end": 4361, "name": "ADD", "source": 1 }, - { "begin": 4340, "end": 4367, "name": "SLT", "source": 1 }, - { - "begin": 4330, - "end": 4452, - "name": "PUSH [tag]", - "source": 1, - "value": "166" - }, - { "begin": 4330, "end": 4452, "name": "JUMPI", "source": 1 }, - { - "begin": 4371, - "end": 4450, - "name": "PUSH [tag]", - "source": 1, - "value": "167" - }, - { - "begin": 4371, - "end": 4450, - "name": "PUSH [tag]", - "source": 1, - "value": "68" - }, - { - "begin": 4371, - "end": 4450, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 4371, - "end": 4450, - "name": "tag", - "source": 1, - "value": "167" - }, - { "begin": 4371, "end": 4450, "name": "JUMPDEST", "source": 1 }, - { - "begin": 4330, - "end": 4452, - "name": "tag", - "source": 1, - "value": "166" - }, - { "begin": 4330, "end": 4452, "name": "JUMPDEST", "source": 1 }, - { - "begin": 4475, - "end": 4479, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { - "begin": 4497, - "end": 4578, - "name": "PUSH [tag]", - "source": 1, - "value": "168" - }, - { "begin": 4574, "end": 4577, "name": "DUP5", "source": 1 }, - { "begin": 4566, "end": 4572, "name": "DUP3", "source": 1 }, - { "begin": 4558, "end": 4564, "name": "DUP6", "source": 1 }, - { - "begin": 4497, - "end": 4578, - "name": "PUSH [tag]", - "source": 1, - "value": "81" - }, - { - "begin": 4497, - "end": 4578, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 4497, - "end": 4578, - "name": "tag", - "source": 1, - "value": "168" - }, - { "begin": 4497, "end": 4578, "name": "JUMPDEST", "source": 1 }, - { "begin": 4488, "end": 4578, "name": "SWAP2", "source": 1 }, - { "begin": 4488, "end": 4578, "name": "POP", "source": 1 }, - { "begin": 4320, "end": 4584, "name": "POP", "source": 1 }, - { "begin": 4245, "end": 4584, "name": "SWAP3", "source": 1 }, - { "begin": 4245, "end": 4584, "name": "SWAP2", "source": 1 }, - { "begin": 4245, "end": 4584, "name": "POP", "source": 1 }, - { "begin": 4245, "end": 4584, "name": "POP", "source": 1 }, - { - "begin": 4245, - "end": 4584, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 4590, - "end": 4838, - "name": "tag", - "source": 1, - "value": "83" - }, - { "begin": 4590, "end": 4838, "name": "JUMPDEST", "source": 1 }, - { - "begin": 4664, - "end": 4668, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 4754, - "end": 4772, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" - }, - { "begin": 4746, "end": 4752, "name": "DUP3", "source": 1 }, - { "begin": 4743, "end": 4773, "name": "GT", "source": 1 }, - { "begin": 4740, "end": 4796, "name": "ISZERO", "source": 1 }, - { - "begin": 4740, - "end": 4796, - "name": "PUSH [tag]", - "source": 1, - "value": "170" - }, - { "begin": 4740, "end": 4796, "name": "JUMPI", "source": 1 }, - { - "begin": 4776, - "end": 4794, - "name": "PUSH [tag]", - "source": 1, - "value": "171" - }, - { - "begin": 4776, - "end": 4794, - "name": "PUSH [tag]", - "source": 1, - "value": "70" - }, - { - "begin": 4776, - "end": 4794, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 4776, - "end": 4794, - "name": "tag", - "source": 1, - "value": "171" - }, - { "begin": 4776, "end": 4794, "name": "JUMPDEST", "source": 1 }, - { - "begin": 4740, - "end": 4796, - "name": "tag", - "source": 1, - "value": "170" - }, - { "begin": 4740, "end": 4796, "name": "JUMPDEST", "source": 1 }, - { - "begin": 4826, - "end": 4830, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 4818, "end": 4824, "name": "DUP3", "source": 1 }, - { "begin": 4814, "end": 4831, "name": "MUL", "source": 1 }, - { "begin": 4806, "end": 4831, "name": "SWAP1", "source": 1 }, - { "begin": 4806, "end": 4831, "name": "POP", "source": 1 }, - { "begin": 4590, "end": 4838, "name": "SWAP2", "source": 1 }, - { "begin": 4590, "end": 4838, "name": "SWAP1", "source": 1 }, - { "begin": 4590, "end": 4838, "name": "POP", "source": 1 }, - { - "begin": 4590, - "end": 4838, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 4844, - "end": 4993, - "name": "tag", - "source": 1, - "value": "84" - }, - { "begin": 4844, "end": 4993, "name": "JUMPDEST", "source": 1 }, - { - "begin": 4880, - "end": 4887, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 4920, - "end": 4986, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000" - }, - { "begin": 4913, "end": 4918, "name": "DUP3", "source": 1 }, - { "begin": 4909, "end": 4987, "name": "AND", "source": 1 }, - { "begin": 4898, "end": 4987, "name": "SWAP1", "source": 1 }, - { "begin": 4898, "end": 4987, "name": "POP", "source": 1 }, - { "begin": 4844, "end": 4993, "name": "SWAP2", "source": 1 }, - { "begin": 4844, "end": 4993, "name": "SWAP1", "source": 1 }, - { "begin": 4844, "end": 4993, "name": "POP", "source": 1 }, - { - "begin": 4844, - "end": 4993, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 4999, - "end": 5119, - "name": "tag", - "source": 1, - "value": "85" - }, - { "begin": 4999, "end": 5119, "name": "JUMPDEST", "source": 1 }, - { - "begin": 5071, - "end": 5094, - "name": "PUSH [tag]", - "source": 1, - "value": "174" - }, - { "begin": 5088, "end": 5093, "name": "DUP2", "source": 1 }, - { - "begin": 5071, - "end": 5094, - "name": "PUSH [tag]", - "source": 1, - "value": "84" - }, - { - "begin": 5071, - "end": 5094, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 5071, - "end": 5094, - "name": "tag", - "source": 1, - "value": "174" - }, - { "begin": 5071, "end": 5094, "name": "JUMPDEST", "source": 1 }, - { "begin": 5064, "end": 5069, "name": "DUP2", "source": 1 }, - { "begin": 5061, "end": 5095, "name": "EQ", "source": 1 }, - { - "begin": 5051, - "end": 5113, - "name": "PUSH [tag]", - "source": 1, - "value": "175" - }, - { "begin": 5051, "end": 5113, "name": "JUMPI", "source": 1 }, - { - "begin": 5109, - "end": 5110, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 5106, "end": 5107, "name": "DUP1", "source": 1 }, - { "begin": 5099, "end": 5111, "name": "REVERT", "source": 1 }, - { - "begin": 5051, - "end": 5113, - "name": "tag", - "source": 1, - "value": "175" - }, - { "begin": 5051, "end": 5113, "name": "JUMPDEST", "source": 1 }, - { "begin": 4999, "end": 5119, "name": "POP", "source": 1 }, - { - "begin": 4999, - "end": 5119, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 5125, - "end": 5262, - "name": "tag", - "source": 1, - "value": "86" - }, - { "begin": 5125, "end": 5262, "name": "JUMPDEST", "source": 1 }, - { - "begin": 5170, - "end": 5175, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 5208, "end": 5214, "name": "DUP2", "source": 1 }, - { - "begin": 5195, - "end": 5215, - "name": "CALLDATALOAD", - "source": 1 - }, - { "begin": 5186, "end": 5215, "name": "SWAP1", "source": 1 }, - { "begin": 5186, "end": 5215, "name": "POP", "source": 1 }, - { - "begin": 5224, - "end": 5256, - "name": "PUSH [tag]", - "source": 1, - "value": "177" - }, - { "begin": 5250, "end": 5255, "name": "DUP2", "source": 1 }, - { - "begin": 5224, - "end": 5256, - "name": "PUSH [tag]", - "source": 1, - "value": "85" - }, - { - "begin": 5224, - "end": 5256, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 5224, - "end": 5256, - "name": "tag", - "source": 1, - "value": "177" - }, - { "begin": 5224, "end": 5256, "name": "JUMPDEST", "source": 1 }, - { "begin": 5125, "end": 5262, "name": "SWAP3", "source": 1 }, - { "begin": 5125, "end": 5262, "name": "SWAP2", "source": 1 }, - { "begin": 5125, "end": 5262, "name": "POP", "source": 1 }, - { "begin": 5125, "end": 5262, "name": "POP", "source": 1 }, - { - "begin": 5125, - "end": 5262, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 5285, - "end": 5925, - "name": "tag", - "source": 1, - "value": "87" - }, - { "begin": 5285, "end": 5925, "name": "JUMPDEST", "source": 1 }, - { - "begin": 5378, - "end": 5383, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 5403, - "end": 5481, - "name": "PUSH [tag]", - "source": 1, - "value": "179" - }, - { - "begin": 5419, - "end": 5480, - "name": "PUSH [tag]", - "source": 1, - "value": "180" - }, - { "begin": 5473, "end": 5479, "name": "DUP5", "source": 1 }, - { - "begin": 5419, - "end": 5480, - "name": "PUSH [tag]", - "source": 1, - "value": "83" - }, - { - "begin": 5419, - "end": 5480, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 5419, - "end": 5480, - "name": "tag", - "source": 1, - "value": "180" - }, - { "begin": 5419, "end": 5480, "name": "JUMPDEST", "source": 1 }, - { - "begin": 5403, - "end": 5481, - "name": "PUSH [tag]", - "source": 1, - "value": "72" - }, - { - "begin": 5403, - "end": 5481, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 5403, - "end": 5481, - "name": "tag", - "source": 1, - "value": "179" - }, - { "begin": 5403, "end": 5481, "name": "JUMPDEST", "source": 1 }, - { "begin": 5394, "end": 5481, "name": "SWAP1", "source": 1 }, - { "begin": 5394, "end": 5481, "name": "POP", "source": 1 }, - { "begin": 5501, "end": 5506, "name": "DUP1", "source": 1 }, - { - "begin": 5554, - "end": 5558, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 5546, "end": 5552, "name": "DUP5", "source": 1 }, - { "begin": 5542, "end": 5559, "name": "MUL", "source": 1 }, - { "begin": 5534, "end": 5540, "name": "DUP4", "source": 1 }, - { "begin": 5530, "end": 5560, "name": "ADD", "source": 1 }, - { "begin": 5583, "end": 5586, "name": "DUP6", "source": 1 }, - { "begin": 5575, "end": 5581, "name": "DUP2", "source": 1 }, - { "begin": 5572, "end": 5587, "name": "GT", "source": 1 }, - { "begin": 5569, "end": 5691, "name": "ISZERO", "source": 1 }, - { - "begin": 5569, - "end": 5691, - "name": "PUSH [tag]", - "source": 1, - "value": "181" - }, - { "begin": 5569, "end": 5691, "name": "JUMPI", "source": 1 }, - { - "begin": 5602, - "end": 5681, - "name": "PUSH [tag]", - "source": 1, - "value": "182" - }, - { - "begin": 5602, - "end": 5681, - "name": "PUSH [tag]", - "source": 1, - "value": "74" - }, - { - "begin": 5602, - "end": 5681, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 5602, - "end": 5681, - "name": "tag", - "source": 1, - "value": "182" - }, - { "begin": 5602, "end": 5681, "name": "JUMPDEST", "source": 1 }, - { - "begin": 5569, - "end": 5691, - "name": "tag", - "source": 1, - "value": "181" - }, - { "begin": 5569, "end": 5691, "name": "JUMPDEST", "source": 1 }, - { "begin": 5717, "end": 5723, "name": "DUP4", "source": 1 }, - { - "begin": 5700, - "end": 5919, - "name": "tag", - "source": 1, - "value": "183" - }, - { "begin": 5700, "end": 5919, "name": "JUMPDEST", "source": 1 }, - { "begin": 5734, "end": 5740, "name": "DUP2", "source": 1 }, - { "begin": 5729, "end": 5732, "name": "DUP2", "source": 1 }, - { "begin": 5726, "end": 5741, "name": "LT", "source": 1 }, - { "begin": 5700, "end": 5919, "name": "ISZERO", "source": 1 }, - { - "begin": 5700, - "end": 5919, - "name": "PUSH [tag]", - "source": 1, - "value": "185" - }, - { "begin": 5700, "end": 5919, "name": "JUMPI", "source": 1 }, - { "begin": 5809, "end": 5812, "name": "DUP1", "source": 1 }, - { - "begin": 5838, - "end": 5874, - "name": "PUSH [tag]", - "source": 1, - "value": "186" - }, - { "begin": 5870, "end": 5873, "name": "DUP9", "source": 1 }, - { "begin": 5858, "end": 5868, "name": "DUP3", "source": 1 }, - { - "begin": 5838, - "end": 5874, - "name": "PUSH [tag]", - "source": 1, - "value": "86" - }, - { - "begin": 5838, - "end": 5874, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 5838, - "end": 5874, - "name": "tag", - "source": 1, - "value": "186" - }, - { "begin": 5838, "end": 5874, "name": "JUMPDEST", "source": 1 }, - { "begin": 5833, "end": 5836, "name": "DUP5", "source": 1 }, - { "begin": 5826, "end": 5875, "name": "MSTORE", "source": 1 }, - { - "begin": 5904, - "end": 5908, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 5899, "end": 5902, "name": "DUP5", "source": 1 }, - { "begin": 5895, "end": 5909, "name": "ADD", "source": 1 }, - { "begin": 5888, "end": 5909, "name": "SWAP4", "source": 1 }, - { "begin": 5888, "end": 5909, "name": "POP", "source": 1 }, - { "begin": 5776, "end": 5919, "name": "POP", "source": 1 }, - { - "begin": 5760, - "end": 5764, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 5755, "end": 5758, "name": "DUP2", "source": 1 }, - { "begin": 5751, "end": 5765, "name": "ADD", "source": 1 }, - { "begin": 5744, "end": 5765, "name": "SWAP1", "source": 1 }, - { "begin": 5744, "end": 5765, "name": "POP", "source": 1 }, - { - "begin": 5700, - "end": 5919, - "name": "PUSH [tag]", - "source": 1, - "value": "183" - }, - { "begin": 5700, "end": 5919, "name": "JUMP", "source": 1 }, - { - "begin": 5700, - "end": 5919, - "name": "tag", - "source": 1, - "value": "185" - }, - { "begin": 5700, "end": 5919, "name": "JUMPDEST", "source": 1 }, - { "begin": 5704, "end": 5725, "name": "POP", "source": 1 }, - { "begin": 5384, "end": 5925, "name": "POP", "source": 1 }, - { "begin": 5384, "end": 5925, "name": "POP", "source": 1 }, - { "begin": 5285, "end": 5925, "name": "SWAP4", "source": 1 }, - { "begin": 5285, "end": 5925, "name": "SWAP3", "source": 1 }, - { "begin": 5285, "end": 5925, "name": "POP", "source": 1 }, - { "begin": 5285, "end": 5925, "name": "POP", "source": 1 }, - { "begin": 5285, "end": 5925, "name": "POP", "source": 1 }, - { - "begin": 5285, - "end": 5925, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 5948, - "end": 6285, - "name": "tag", - "source": 1, - "value": "88" - }, - { "begin": 5948, "end": 6285, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6016, - "end": 6021, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 6065, "end": 6068, "name": "DUP3", "source": 1 }, - { - "begin": 6058, - "end": 6062, - "name": "PUSH", - "source": 1, - "value": "1F" - }, - { "begin": 6050, "end": 6056, "name": "DUP4", "source": 1 }, - { "begin": 6046, "end": 6063, "name": "ADD", "source": 1 }, - { "begin": 6042, "end": 6069, "name": "SLT", "source": 1 }, - { - "begin": 6032, - "end": 6154, - "name": "PUSH [tag]", - "source": 1, - "value": "188" - }, - { "begin": 6032, "end": 6154, "name": "JUMPI", "source": 1 }, - { - "begin": 6073, - "end": 6152, - "name": "PUSH [tag]", - "source": 1, - "value": "189" - }, - { - "begin": 6073, - "end": 6152, - "name": "PUSH [tag]", - "source": 1, - "value": "68" - }, - { - "begin": 6073, - "end": 6152, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 6073, - "end": 6152, - "name": "tag", - "source": 1, - "value": "189" - }, - { "begin": 6073, "end": 6152, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6032, - "end": 6154, - "name": "tag", - "source": 1, - "value": "188" - }, - { "begin": 6032, "end": 6154, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6177, - "end": 6181, - "name": "PUSH", - "source": 1, - "value": "2" - }, - { - "begin": 6199, - "end": 6279, - "name": "PUSH [tag]", - "source": 1, - "value": "190" - }, - { "begin": 6275, "end": 6278, "name": "DUP5", "source": 1 }, - { "begin": 6267, "end": 6273, "name": "DUP3", "source": 1 }, - { "begin": 6259, "end": 6265, "name": "DUP6", "source": 1 }, - { - "begin": 6199, - "end": 6279, - "name": "PUSH [tag]", - "source": 1, - "value": "87" - }, - { - "begin": 6199, - "end": 6279, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 6199, - "end": 6279, - "name": "tag", - "source": 1, - "value": "190" - }, - { "begin": 6199, "end": 6279, "name": "JUMPDEST", "source": 1 }, - { "begin": 6190, "end": 6279, "name": "SWAP2", "source": 1 }, - { "begin": 6190, "end": 6279, "name": "POP", "source": 1 }, - { "begin": 6022, "end": 6285, "name": "POP", "source": 1 }, - { "begin": 5948, "end": 6285, "name": "SWAP3", "source": 1 }, - { "begin": 5948, "end": 6285, "name": "SWAP2", "source": 1 }, - { "begin": 5948, "end": 6285, "name": "POP", "source": 1 }, - { "begin": 5948, "end": 6285, "name": "POP", "source": 1 }, - { - "begin": 5948, - "end": 6285, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 6291, - "end": 6381, - "name": "tag", - "source": 1, - "value": "89" - }, - { "begin": 6291, "end": 6381, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6325, - "end": 6332, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 6368, "end": 6373, "name": "DUP2", "source": 1 }, - { "begin": 6361, "end": 6374, "name": "ISZERO", "source": 1 }, - { "begin": 6354, "end": 6375, "name": "ISZERO", "source": 1 }, - { "begin": 6343, "end": 6375, "name": "SWAP1", "source": 1 }, - { "begin": 6343, "end": 6375, "name": "POP", "source": 1 }, - { "begin": 6291, "end": 6381, "name": "SWAP2", "source": 1 }, - { "begin": 6291, "end": 6381, "name": "SWAP1", "source": 1 }, - { "begin": 6291, "end": 6381, "name": "POP", "source": 1 }, - { - "begin": 6291, - "end": 6381, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 6387, - "end": 6503, - "name": "tag", - "source": 1, - "value": "90" - }, - { "begin": 6387, "end": 6503, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6457, - "end": 6478, - "name": "PUSH [tag]", - "source": 1, - "value": "193" - }, - { "begin": 6472, "end": 6477, "name": "DUP2", "source": 1 }, - { - "begin": 6457, - "end": 6478, - "name": "PUSH [tag]", - "source": 1, - "value": "89" - }, - { - "begin": 6457, - "end": 6478, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 6457, - "end": 6478, - "name": "tag", - "source": 1, - "value": "193" - }, - { "begin": 6457, "end": 6478, "name": "JUMPDEST", "source": 1 }, - { "begin": 6450, "end": 6455, "name": "DUP2", "source": 1 }, - { "begin": 6447, "end": 6479, "name": "EQ", "source": 1 }, - { - "begin": 6437, - "end": 6497, - "name": "PUSH [tag]", - "source": 1, - "value": "194" - }, - { "begin": 6437, "end": 6497, "name": "JUMPI", "source": 1 }, - { - "begin": 6493, - "end": 6494, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 6490, "end": 6491, "name": "DUP1", "source": 1 }, - { "begin": 6483, "end": 6495, "name": "REVERT", "source": 1 }, - { - "begin": 6437, - "end": 6497, - "name": "tag", - "source": 1, - "value": "194" - }, - { "begin": 6437, "end": 6497, "name": "JUMPDEST", "source": 1 }, - { "begin": 6387, "end": 6503, "name": "POP", "source": 1 }, - { - "begin": 6387, - "end": 6503, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 6509, - "end": 6642, - "name": "tag", - "source": 1, - "value": "91" - }, - { "begin": 6509, "end": 6642, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6552, - "end": 6557, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 6590, "end": 6596, "name": "DUP2", "source": 1 }, - { - "begin": 6577, - "end": 6597, - "name": "CALLDATALOAD", - "source": 1 - }, - { "begin": 6568, "end": 6597, "name": "SWAP1", "source": 1 }, - { "begin": 6568, "end": 6597, "name": "POP", "source": 1 }, - { - "begin": 6606, - "end": 6636, - "name": "PUSH [tag]", - "source": 1, - "value": "196" - }, - { "begin": 6630, "end": 6635, "name": "DUP2", "source": 1 }, - { - "begin": 6606, - "end": 6636, - "name": "PUSH [tag]", - "source": 1, - "value": "90" - }, - { - "begin": 6606, - "end": 6636, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 6606, - "end": 6636, - "name": "tag", - "source": 1, - "value": "196" - }, - { "begin": 6606, "end": 6636, "name": "JUMPDEST", "source": 1 }, - { "begin": 6509, "end": 6642, "name": "SWAP3", "source": 1 }, - { "begin": 6509, "end": 6642, "name": "SWAP2", "source": 1 }, - { "begin": 6509, "end": 6642, "name": "POP", "source": 1 }, - { "begin": 6509, "end": 6642, "name": "POP", "source": 1 }, - { - "begin": 6509, - "end": 6642, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 6648, - "end": 7688, - "name": "tag", - "source": 1, - "value": "7" - }, - { "begin": 6648, "end": 7688, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6807, - "end": 6813, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 6815, "end": 6821, "name": "DUP1", "source": 1 }, - { - "begin": 6823, - "end": 6829, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 6831, "end": 6837, "name": "DUP1", "source": 1 }, - { - "begin": 6839, - "end": 6845, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 6888, - "end": 6891, - "name": "PUSH", - "source": 1, - "value": "140" - }, - { "begin": 6876, "end": 6885, "name": "DUP7", "source": 1 }, - { "begin": 6867, "end": 6874, "name": "DUP9", "source": 1 }, - { "begin": 6863, "end": 6886, "name": "SUB", "source": 1 }, - { "begin": 6859, "end": 6892, "name": "SLT", "source": 1 }, - { "begin": 6856, "end": 6976, "name": "ISZERO", "source": 1 }, - { - "begin": 6856, - "end": 6976, - "name": "PUSH [tag]", - "source": 1, - "value": "198" - }, - { "begin": 6856, "end": 6976, "name": "JUMPI", "source": 1 }, - { - "begin": 6895, - "end": 6974, - "name": "PUSH [tag]", - "source": 1, - "value": "199" - }, - { - "begin": 6895, - "end": 6974, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 6895, - "end": 6974, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 6895, - "end": 6974, - "name": "tag", - "source": 1, - "value": "199" - }, - { "begin": 6895, "end": 6974, "name": "JUMPDEST", "source": 1 }, - { - "begin": 6856, - "end": 6976, - "name": "tag", - "source": 1, - "value": "198" - }, - { "begin": 6856, "end": 6976, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7015, - "end": 7016, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 7040, - "end": 7092, - "name": "PUSH [tag]", - "source": 1, - "value": "200" - }, - { "begin": 7084, "end": 7091, "name": "DUP9", "source": 1 }, - { "begin": 7075, "end": 7081, "name": "DUP3", "source": 1 }, - { "begin": 7064, "end": 7073, "name": "DUP10", "source": 1 }, - { "begin": 7060, "end": 7082, "name": "ADD", "source": 1 }, - { - "begin": 7040, - "end": 7092, - "name": "PUSH [tag]", - "source": 1, - "value": "67" - }, - { - "begin": 7040, - "end": 7092, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 7040, - "end": 7092, - "name": "tag", - "source": 1, - "value": "200" - }, - { "begin": 7040, "end": 7092, "name": "JUMPDEST", "source": 1 }, - { "begin": 7030, "end": 7092, "name": "SWAP6", "source": 1 }, - { "begin": 7030, "end": 7092, "name": "POP", "source": 1 }, - { "begin": 6986, "end": 7102, "name": "POP", "source": 1 }, - { - "begin": 7141, - "end": 7143, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { - "begin": 7167, - "end": 7243, - "name": "PUSH [tag]", - "source": 1, - "value": "201" - }, - { "begin": 7235, "end": 7242, "name": "DUP9", "source": 1 }, - { "begin": 7226, "end": 7232, "name": "DUP3", "source": 1 }, - { "begin": 7215, "end": 7224, "name": "DUP10", "source": 1 }, - { "begin": 7211, "end": 7233, "name": "ADD", "source": 1 }, - { - "begin": 7167, - "end": 7243, - "name": "PUSH [tag]", - "source": 1, - "value": "79" - }, - { - "begin": 7167, - "end": 7243, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 7167, - "end": 7243, - "name": "tag", - "source": 1, - "value": "201" - }, - { "begin": 7167, "end": 7243, "name": "JUMPDEST", "source": 1 }, - { "begin": 7157, "end": 7243, "name": "SWAP5", "source": 1 }, - { "begin": 7157, "end": 7243, "name": "POP", "source": 1 }, - { "begin": 7112, "end": 7253, "name": "POP", "source": 1 }, - { - "begin": 7292, - "end": 7294, - "name": "PUSH", - "source": 1, - "value": "60" - }, - { - "begin": 7318, - "end": 7394, - "name": "PUSH [tag]", - "source": 1, - "value": "202" - }, - { "begin": 7386, "end": 7393, "name": "DUP9", "source": 1 }, - { "begin": 7377, "end": 7383, "name": "DUP3", "source": 1 }, - { "begin": 7366, "end": 7375, "name": "DUP10", "source": 1 }, - { "begin": 7362, "end": 7384, "name": "ADD", "source": 1 }, - { - "begin": 7318, - "end": 7394, - "name": "PUSH [tag]", - "source": 1, - "value": "82" - }, - { - "begin": 7318, - "end": 7394, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 7318, - "end": 7394, - "name": "tag", - "source": 1, - "value": "202" - }, - { "begin": 7318, "end": 7394, "name": "JUMPDEST", "source": 1 }, - { "begin": 7308, "end": 7394, "name": "SWAP4", "source": 1 }, - { "begin": 7308, "end": 7394, "name": "POP", "source": 1 }, - { "begin": 7263, "end": 7404, "name": "POP", "source": 1 }, - { - "begin": 7443, - "end": 7446, - "name": "PUSH", - "source": 1, - "value": "E0" - }, - { - "begin": 7470, - "end": 7545, - "name": "PUSH [tag]", - "source": 1, - "value": "203" - }, - { "begin": 7537, "end": 7544, "name": "DUP9", "source": 1 }, - { "begin": 7528, "end": 7534, "name": "DUP3", "source": 1 }, - { "begin": 7517, "end": 7526, "name": "DUP10", "source": 1 }, - { "begin": 7513, "end": 7535, "name": "ADD", "source": 1 }, - { - "begin": 7470, - "end": 7545, - "name": "PUSH [tag]", - "source": 1, - "value": "88" - }, - { - "begin": 7470, - "end": 7545, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 7470, - "end": 7545, - "name": "tag", - "source": 1, - "value": "203" - }, - { "begin": 7470, "end": 7545, "name": "JUMPDEST", "source": 1 }, - { "begin": 7460, "end": 7545, "name": "SWAP3", "source": 1 }, - { "begin": 7460, "end": 7545, "name": "POP", "source": 1 }, - { "begin": 7414, "end": 7555, "name": "POP", "source": 1 }, - { - "begin": 7594, - "end": 7597, - "name": "PUSH", - "source": 1, - "value": "120" - }, - { - "begin": 7621, - "end": 7671, - "name": "PUSH [tag]", - "source": 1, - "value": "204" - }, - { "begin": 7663, "end": 7670, "name": "DUP9", "source": 1 }, - { "begin": 7654, "end": 7660, "name": "DUP3", "source": 1 }, - { "begin": 7643, "end": 7652, "name": "DUP10", "source": 1 }, - { "begin": 7639, "end": 7661, "name": "ADD", "source": 1 }, - { - "begin": 7621, - "end": 7671, - "name": "PUSH [tag]", - "source": 1, - "value": "91" - }, - { - "begin": 7621, - "end": 7671, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 7621, - "end": 7671, - "name": "tag", - "source": 1, - "value": "204" - }, - { "begin": 7621, "end": 7671, "name": "JUMPDEST", "source": 1 }, - { "begin": 7611, "end": 7671, "name": "SWAP2", "source": 1 }, - { "begin": 7611, "end": 7671, "name": "POP", "source": 1 }, - { "begin": 7565, "end": 7681, "name": "POP", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "SWAP3", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "SWAP6", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "POP", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "SWAP3", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "SWAP6", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "SWAP1", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "SWAP4", "source": 1 }, - { "begin": 6648, "end": 7688, "name": "POP", "source": 1 }, - { - "begin": 6648, - "end": 7688, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 7694, - "end": 7798, - "name": "tag", - "source": 1, - "value": "92" - }, - { "begin": 7694, "end": 7798, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7759, - "end": 7765, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 7787, - "end": 7791, - "name": "PUSH", - "source": 1, - "value": "2" - }, - { "begin": 7777, "end": 7791, "name": "SWAP1", "source": 1 }, - { "begin": 7777, "end": 7791, "name": "POP", "source": 1 }, - { "begin": 7694, "end": 7798, "name": "SWAP2", "source": 1 }, - { "begin": 7694, "end": 7798, "name": "SWAP1", "source": 1 }, - { "begin": 7694, "end": 7798, "name": "POP", "source": 1 }, - { - "begin": 7694, - "end": 7798, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 7804, - "end": 7947, - "name": "tag", - "source": 1, - "value": "93" - }, - { "begin": 7804, "end": 7947, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7901, - "end": 7912, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 7938, "end": 7941, "name": "DUP2", "source": 1 }, - { "begin": 7923, "end": 7941, "name": "SWAP1", "source": 1 }, - { "begin": 7923, "end": 7941, "name": "POP", "source": 1 }, - { "begin": 7804, "end": 7947, "name": "SWAP3", "source": 1 }, - { "begin": 7804, "end": 7947, "name": "SWAP2", "source": 1 }, - { "begin": 7804, "end": 7947, "name": "POP", "source": 1 }, - { "begin": 7804, "end": 7947, "name": "POP", "source": 1 }, - { - "begin": 7804, - "end": 7947, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 7953, - "end": 8051, - "name": "tag", - "source": 1, - "value": "94" - }, - { "begin": 7953, "end": 8051, "name": "JUMPDEST", "source": 1 }, - { - "begin": 8018, - "end": 8022, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 8041, "end": 8044, "name": "DUP2", "source": 1 }, - { "begin": 8033, "end": 8044, "name": "SWAP1", "source": 1 }, - { "begin": 8033, "end": 8044, "name": "POP", "source": 1 }, - { "begin": 7953, "end": 8051, "name": "SWAP2", "source": 1 }, - { "begin": 7953, "end": 8051, "name": "SWAP1", "source": 1 }, - { "begin": 7953, "end": 8051, "name": "POP", "source": 1 }, - { - "begin": 7953, - "end": 8051, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 8057, - "end": 8165, - "name": "tag", - "source": 1, - "value": "95" - }, - { "begin": 8057, "end": 8165, "name": "JUMPDEST", "source": 1 }, - { - "begin": 8134, - "end": 8158, - "name": "PUSH [tag]", - "source": 1, - "value": "209" - }, - { "begin": 8152, "end": 8157, "name": "DUP2", "source": 1 }, - { - "begin": 8134, - "end": 8158, - "name": "PUSH [tag]", - "source": 1, - "value": "75" - }, - { - "begin": 8134, - "end": 8158, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 8134, - "end": 8158, - "name": "tag", - "source": 1, - "value": "209" - }, - { "begin": 8134, "end": 8158, "name": "JUMPDEST", "source": 1 }, - { "begin": 8129, "end": 8132, "name": "DUP3", "source": 1 }, - { "begin": 8122, "end": 8159, "name": "MSTORE", "source": 1 }, - { "begin": 8057, "end": 8165, "name": "POP", "source": 1 }, - { "begin": 8057, "end": 8165, "name": "POP", "source": 1 }, - { - "begin": 8057, - "end": 8165, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 8171, - "end": 8350, - "name": "tag", - "source": 1, - "value": "96" - }, - { "begin": 8171, "end": 8350, "name": "JUMPDEST", "source": 1 }, - { - "begin": 8240, - "end": 8250, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 8261, - "end": 8307, - "name": "PUSH [tag]", - "source": 1, - "value": "211" - }, - { "begin": 8303, "end": 8306, "name": "DUP4", "source": 1 }, - { "begin": 8295, "end": 8301, "name": "DUP4", "source": 1 }, - { - "begin": 8261, - "end": 8307, - "name": "PUSH [tag]", - "source": 1, - "value": "95" - }, - { - "begin": 8261, - "end": 8307, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 8261, - "end": 8307, - "name": "tag", - "source": 1, - "value": "211" - }, - { "begin": 8261, "end": 8307, "name": "JUMPDEST", "source": 1 }, - { - "begin": 8339, - "end": 8343, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 8334, "end": 8337, "name": "DUP4", "source": 1 }, - { "begin": 8330, "end": 8344, "name": "ADD", "source": 1 }, - { "begin": 8316, "end": 8344, "name": "SWAP1", "source": 1 }, - { "begin": 8316, "end": 8344, "name": "POP", "source": 1 }, - { "begin": 8171, "end": 8350, "name": "SWAP3", "source": 1 }, - { "begin": 8171, "end": 8350, "name": "SWAP2", "source": 1 }, - { "begin": 8171, "end": 8350, "name": "POP", "source": 1 }, - { "begin": 8171, "end": 8350, "name": "POP", "source": 1 }, - { - "begin": 8171, - "end": 8350, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 8356, - "end": 8467, - "name": "tag", - "source": 1, - "value": "97" - }, - { "begin": 8356, "end": 8467, "name": "JUMPDEST", "source": 1 }, - { - "begin": 8424, - "end": 8428, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 8456, - "end": 8460, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 8451, "end": 8454, "name": "DUP3", "source": 1 }, - { "begin": 8447, "end": 8461, "name": "ADD", "source": 1 }, - { "begin": 8439, "end": 8461, "name": "SWAP1", "source": 1 }, - { "begin": 8439, "end": 8461, "name": "POP", "source": 1 }, - { "begin": 8356, "end": 8467, "name": "SWAP2", "source": 1 }, - { "begin": 8356, "end": 8467, "name": "SWAP1", "source": 1 }, - { "begin": 8356, "end": 8467, "name": "POP", "source": 1 }, - { - "begin": 8356, - "end": 8467, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 8505, - "end": 9199, - "name": "tag", - "source": 1, - "value": "98" - }, - { "begin": 8505, "end": 9199, "name": "JUMPDEST", "source": 1 }, - { - "begin": 8641, - "end": 8693, - "name": "PUSH [tag]", - "source": 1, - "value": "214" - }, - { "begin": 8687, "end": 8692, "name": "DUP2", "source": 1 }, - { - "begin": 8641, - "end": 8693, - "name": "PUSH [tag]", - "source": 1, - "value": "92" - }, - { - "begin": 8641, - "end": 8693, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 8641, - "end": 8693, - "name": "tag", - "source": 1, - "value": "214" - }, - { "begin": 8641, "end": 8693, "name": "JUMPDEST", "source": 1 }, - { - "begin": 8709, - "end": 8793, - "name": "PUSH [tag]", - "source": 1, - "value": "215" - }, - { "begin": 8786, "end": 8792, "name": "DUP2", "source": 1 }, - { "begin": 8781, "end": 8784, "name": "DUP5", "source": 1 }, - { - "begin": 8709, - "end": 8793, - "name": "PUSH [tag]", - "source": 1, - "value": "93" - }, - { - "begin": 8709, - "end": 8793, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 8709, - "end": 8793, - "name": "tag", - "source": 1, - "value": "215" - }, - { "begin": 8709, "end": 8793, "name": "JUMPDEST", "source": 1 }, - { "begin": 8702, "end": 8793, "name": "SWAP3", "source": 1 }, - { "begin": 8702, "end": 8793, "name": "POP", "source": 1 }, - { - "begin": 8817, - "end": 8871, - "name": "PUSH [tag]", - "source": 1, - "value": "216" - }, - { "begin": 8865, "end": 8870, "name": "DUP3", "source": 1 }, - { - "begin": 8817, - "end": 8871, - "name": "PUSH [tag]", - "source": 1, - "value": "94" - }, - { - "begin": 8817, - "end": 8871, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 8817, - "end": 8871, - "name": "tag", - "source": 1, - "value": "216" - }, - { "begin": 8817, "end": 8871, "name": "JUMPDEST", "source": 1 }, - { "begin": 8894, "end": 8901, "name": "DUP1", "source": 1 }, - { - "begin": 8925, - "end": 8926, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 8910, - "end": 9192, - "name": "tag", - "source": 1, - "value": "217" - }, - { "begin": 8910, "end": 9192, "name": "JUMPDEST", "source": 1 }, - { "begin": 8935, "end": 8941, "name": "DUP4", "source": 1 }, - { "begin": 8932, "end": 8933, "name": "DUP2", "source": 1 }, - { "begin": 8929, "end": 8942, "name": "LT", "source": 1 }, - { "begin": 8910, "end": 9192, "name": "ISZERO", "source": 1 }, - { - "begin": 8910, - "end": 9192, - "name": "PUSH [tag]", - "source": 1, - "value": "219" - }, - { "begin": 8910, "end": 9192, "name": "JUMPI", "source": 1 }, - { "begin": 9011, "end": 9017, "name": "DUP2", "source": 1 }, - { "begin": 9005, "end": 9018, "name": "MLOAD", "source": 1 }, - { - "begin": 9038, - "end": 9101, - "name": "PUSH [tag]", - "source": 1, - "value": "220" - }, - { "begin": 9097, "end": 9100, "name": "DUP8", "source": 1 }, - { "begin": 9082, "end": 9095, "name": "DUP3", "source": 1 }, - { - "begin": 9038, - "end": 9101, - "name": "PUSH [tag]", - "source": 1, - "value": "96" - }, - { - "begin": 9038, - "end": 9101, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 9038, - "end": 9101, - "name": "tag", - "source": 1, - "value": "220" - }, - { "begin": 9038, "end": 9101, "name": "JUMPDEST", "source": 1 }, - { "begin": 9031, "end": 9101, "name": "SWAP7", "source": 1 }, - { "begin": 9031, "end": 9101, "name": "POP", "source": 1 }, - { - "begin": 9124, - "end": 9182, - "name": "PUSH [tag]", - "source": 1, - "value": "221" - }, - { "begin": 9175, "end": 9181, "name": "DUP4", "source": 1 }, - { - "begin": 9124, - "end": 9182, - "name": "PUSH [tag]", - "source": 1, - "value": "97" - }, - { - "begin": 9124, - "end": 9182, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 9124, - "end": 9182, - "name": "tag", - "source": 1, - "value": "221" - }, - { "begin": 9124, "end": 9182, "name": "JUMPDEST", "source": 1 }, - { "begin": 9114, "end": 9182, "name": "SWAP3", "source": 1 }, - { "begin": 9114, "end": 9182, "name": "POP", "source": 1 }, - { "begin": 8970, "end": 9192, "name": "POP", "source": 1 }, - { - "begin": 8957, - "end": 8958, - "name": "PUSH", - "source": 1, - "value": "1" - }, - { "begin": 8954, "end": 8955, "name": "DUP2", "source": 1 }, - { "begin": 8950, "end": 8959, "name": "ADD", "source": 1 }, - { "begin": 8945, "end": 8959, "name": "SWAP1", "source": 1 }, - { "begin": 8945, "end": 8959, "name": "POP", "source": 1 }, - { - "begin": 8910, - "end": 9192, - "name": "PUSH [tag]", - "source": 1, - "value": "217" - }, - { "begin": 8910, "end": 9192, "name": "JUMP", "source": 1 }, - { - "begin": 8910, - "end": 9192, - "name": "tag", - "source": 1, - "value": "219" - }, - { "begin": 8910, "end": 9192, "name": "JUMPDEST", "source": 1 }, - { "begin": 8914, "end": 8928, "name": "POP", "source": 1 }, - { "begin": 8617, "end": 9199, "name": "POP", "source": 1 }, - { "begin": 8617, "end": 9199, "name": "POP", "source": 1 }, - { "begin": 8617, "end": 9199, "name": "POP", "source": 1 }, - { "begin": 8505, "end": 9199, "name": "POP", "source": 1 }, - { "begin": 8505, "end": 9199, "name": "POP", "source": 1 }, - { - "begin": 8505, - "end": 9199, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 9205, - "end": 9519, - "name": "tag", - "source": 1, - "value": "10" - }, - { "begin": 9205, "end": 9519, "name": "JUMPDEST", "source": 1 }, - { - "begin": 9344, - "end": 9348, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 9382, - "end": 9384, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 9371, "end": 9380, "name": "DUP3", "source": 1 }, - { "begin": 9367, "end": 9385, "name": "ADD", "source": 1 }, - { "begin": 9359, "end": 9385, "name": "SWAP1", "source": 1 }, - { "begin": 9359, "end": 9385, "name": "POP", "source": 1 }, - { - "begin": 9395, - "end": 9512, - "name": "PUSH [tag]", - "source": 1, - "value": "223" - }, - { - "begin": 9509, - "end": 9510, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 9498, "end": 9507, "name": "DUP4", "source": 1 }, - { "begin": 9494, "end": 9511, "name": "ADD", "source": 1 }, - { "begin": 9485, "end": 9491, "name": "DUP5", "source": 1 }, - { - "begin": 9395, - "end": 9512, - "name": "PUSH [tag]", - "source": 1, - "value": "98" - }, - { - "begin": 9395, - "end": 9512, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 9395, - "end": 9512, - "name": "tag", - "source": 1, - "value": "223" - }, - { "begin": 9395, "end": 9512, "name": "JUMPDEST", "source": 1 }, - { "begin": 9205, "end": 9519, "name": "SWAP3", "source": 1 }, - { "begin": 9205, "end": 9519, "name": "SWAP2", "source": 1 }, - { "begin": 9205, "end": 9519, "name": "POP", "source": 1 }, - { "begin": 9205, "end": 9519, "name": "POP", "source": 1 }, - { - "begin": 9205, - "end": 9519, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 9525, - "end": 9705, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 9525, "end": 9705, "name": "JUMPDEST", "source": 1 }, - { - "begin": 9573, - "end": 9650, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 9570, - "end": 9571, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 9563, "end": 9651, "name": "MSTORE", "source": 1 }, - { - "begin": 9670, - "end": 9674, - "name": "PUSH", - "source": 1, - "value": "32" - }, - { - "begin": 9667, - "end": 9668, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 9660, "end": 9675, "name": "MSTORE", "source": 1 }, - { - "begin": 9694, - "end": 9698, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 9691, - "end": 9692, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 9684, "end": 9699, "name": "REVERT", "source": 1 }, - { - "begin": 9711, - "end": 9807, - "name": "tag", - "source": 1, - "value": "99" - }, - { "begin": 9711, "end": 9807, "name": "JUMPDEST", "source": 1 }, - { - "begin": 9745, - "end": 9753, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 9794, "end": 9799, "name": "DUP2", "source": 1 }, - { - "begin": 9789, - "end": 9792, - "name": "PUSH", - "source": 1, - "value": "E0" - }, - { "begin": 9785, "end": 9800, "name": "SHL", "source": 1 }, - { "begin": 9764, "end": 9800, "name": "SWAP1", "source": 1 }, - { "begin": 9764, "end": 9800, "name": "POP", "source": 1 }, - { "begin": 9711, "end": 9807, "name": "SWAP2", "source": 1 }, - { "begin": 9711, "end": 9807, "name": "SWAP1", "source": 1 }, - { "begin": 9711, "end": 9807, "name": "POP", "source": 1 }, - { - "begin": 9711, - "end": 9807, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 9813, - "end": 9907, - "name": "tag", - "source": 1, - "value": "100" - }, - { "begin": 9813, "end": 9907, "name": "JUMPDEST", "source": 1 }, - { - "begin": 9851, - "end": 9858, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 9880, - "end": 9901, - "name": "PUSH [tag]", - "source": 1, - "value": "227" - }, - { "begin": 9895, "end": 9900, "name": "DUP3", "source": 1 }, - { - "begin": 9880, - "end": 9901, - "name": "PUSH [tag]", - "source": 1, - "value": "99" - }, - { - "begin": 9880, - "end": 9901, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 9880, - "end": 9901, - "name": "tag", - "source": 1, - "value": "227" - }, - { "begin": 9880, "end": 9901, "name": "JUMPDEST", "source": 1 }, - { "begin": 9869, "end": 9901, "name": "SWAP1", "source": 1 }, - { "begin": 9869, "end": 9901, "name": "POP", "source": 1 }, - { "begin": 9813, "end": 9907, "name": "SWAP2", "source": 1 }, - { "begin": 9813, "end": 9907, "name": "SWAP1", "source": 1 }, - { "begin": 9813, "end": 9907, "name": "POP", "source": 1 }, - { - "begin": 9813, - "end": 9907, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 9913, - "end": 10066, - "name": "tag", - "source": 1, - "value": "101" - }, - { "begin": 9913, "end": 10066, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10016, - "end": 10059, - "name": "PUSH [tag]", - "source": 1, - "value": "229" - }, - { - "begin": 10035, - "end": 10058, - "name": "PUSH [tag]", - "source": 1, - "value": "230" - }, - { "begin": 10052, "end": 10057, "name": "DUP3", "source": 1 }, - { - "begin": 10035, - "end": 10058, - "name": "PUSH [tag]", - "source": 1, - "value": "65" - }, - { - "begin": 10035, - "end": 10058, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10035, - "end": 10058, - "name": "tag", - "source": 1, - "value": "230" - }, - { "begin": 10035, "end": 10058, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10016, - "end": 10059, - "name": "PUSH [tag]", - "source": 1, - "value": "100" - }, - { - "begin": 10016, - "end": 10059, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10016, - "end": 10059, - "name": "tag", - "source": 1, - "value": "229" - }, - { "begin": 10016, "end": 10059, "name": "JUMPDEST", "source": 1 }, - { "begin": 10011, "end": 10014, "name": "DUP3", "source": 1 }, - { "begin": 10004, "end": 10060, "name": "MSTORE", "source": 1 }, - { "begin": 9913, "end": 10066, "name": "POP", "source": 1 }, - { "begin": 9913, "end": 10066, "name": "POP", "source": 1 }, - { - "begin": 9913, - "end": 10066, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10072, - "end": 10151, - "name": "tag", - "source": 1, - "value": "102" - }, - { "begin": 10072, "end": 10151, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10111, - "end": 10118, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 10140, "end": 10145, "name": "DUP2", "source": 1 }, - { "begin": 10129, "end": 10145, "name": "SWAP1", "source": 1 }, - { "begin": 10129, "end": 10145, "name": "POP", "source": 1 }, - { "begin": 10072, "end": 10151, "name": "SWAP2", "source": 1 }, - { "begin": 10072, "end": 10151, "name": "SWAP1", "source": 1 }, - { "begin": 10072, "end": 10151, "name": "POP", "source": 1 }, - { - "begin": 10072, - "end": 10151, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10157, - "end": 10314, - "name": "tag", - "source": 1, - "value": "103" - }, - { "begin": 10157, "end": 10314, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10262, - "end": 10307, - "name": "PUSH [tag]", - "source": 1, - "value": "233" - }, - { - "begin": 10282, - "end": 10306, - "name": "PUSH [tag]", - "source": 1, - "value": "234" - }, - { "begin": 10300, "end": 10305, "name": "DUP3", "source": 1 }, - { - "begin": 10282, - "end": 10306, - "name": "PUSH [tag]", - "source": 1, - "value": "75" - }, - { - "begin": 10282, - "end": 10306, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10282, - "end": 10306, - "name": "tag", - "source": 1, - "value": "234" - }, - { "begin": 10282, "end": 10306, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10262, - "end": 10307, - "name": "PUSH [tag]", - "source": 1, - "value": "102" - }, - { - "begin": 10262, - "end": 10307, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10262, - "end": 10307, - "name": "tag", - "source": 1, - "value": "233" - }, - { "begin": 10262, "end": 10307, "name": "JUMPDEST", "source": 1 }, - { "begin": 10257, "end": 10260, "name": "DUP3", "source": 1 }, - { "begin": 10250, "end": 10308, "name": "MSTORE", "source": 1 }, - { "begin": 10157, "end": 10314, "name": "POP", "source": 1 }, - { "begin": 10157, "end": 10314, "name": "POP", "source": 1 }, - { - "begin": 10157, - "end": 10314, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10320, - "end": 10398, - "name": "tag", - "source": 1, - "value": "104" - }, - { "begin": 10320, "end": 10398, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10358, - "end": 10365, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 10387, "end": 10392, "name": "DUP2", "source": 1 }, - { "begin": 10376, "end": 10392, "name": "SWAP1", "source": 1 }, - { "begin": 10376, "end": 10392, "name": "POP", "source": 1 }, - { "begin": 10320, "end": 10398, "name": "SWAP2", "source": 1 }, - { "begin": 10320, "end": 10398, "name": "SWAP1", "source": 1 }, - { "begin": 10320, "end": 10398, "name": "POP", "source": 1 }, - { - "begin": 10320, - "end": 10398, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10404, - "end": 10557, - "name": "tag", - "source": 1, - "value": "105" - }, - { "begin": 10404, "end": 10557, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10507, - "end": 10550, - "name": "PUSH [tag]", - "source": 1, - "value": "237" - }, - { - "begin": 10526, - "end": 10549, - "name": "PUSH [tag]", - "source": 1, - "value": "238" - }, - { "begin": 10543, "end": 10548, "name": "DUP3", "source": 1 }, - { - "begin": 10526, - "end": 10549, - "name": "PUSH [tag]", - "source": 1, - "value": "84" - }, - { - "begin": 10526, - "end": 10549, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10526, - "end": 10549, - "name": "tag", - "source": 1, - "value": "238" - }, - { "begin": 10526, "end": 10549, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10507, - "end": 10550, - "name": "PUSH [tag]", - "source": 1, - "value": "104" - }, - { - "begin": 10507, - "end": 10550, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10507, - "end": 10550, - "name": "tag", - "source": 1, - "value": "237" - }, - { "begin": 10507, "end": 10550, "name": "JUMPDEST", "source": 1 }, - { "begin": 10502, "end": 10505, "name": "DUP3", "source": 1 }, - { "begin": 10495, "end": 10551, "name": "MSTORE", "source": 1 }, - { "begin": 10404, "end": 10557, "name": "POP", "source": 1 }, - { "begin": 10404, "end": 10557, "name": "POP", "source": 1 }, - { - "begin": 10404, - "end": 10557, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10563, - "end": 10659, - "name": "tag", - "source": 1, - "value": "106" - }, - { "begin": 10563, "end": 10659, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10597, - "end": 10605, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 10646, "end": 10651, "name": "DUP2", "source": 1 }, - { - "begin": 10641, - "end": 10644, - "name": "PUSH", - "source": 1, - "value": "F8" - }, - { "begin": 10637, "end": 10652, "name": "SHL", "source": 1 }, - { "begin": 10616, "end": 10652, "name": "SWAP1", "source": 1 }, - { "begin": 10616, "end": 10652, "name": "POP", "source": 1 }, - { "begin": 10563, "end": 10659, "name": "SWAP2", "source": 1 }, - { "begin": 10563, "end": 10659, "name": "SWAP1", "source": 1 }, - { "begin": 10563, "end": 10659, "name": "POP", "source": 1 }, - { - "begin": 10563, - "end": 10659, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10665, - "end": 10758, - "name": "tag", - "source": 1, - "value": "107" - }, - { "begin": 10665, "end": 10758, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10702, - "end": 10709, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 10731, - "end": 10752, - "name": "PUSH [tag]", - "source": 1, - "value": "241" - }, - { "begin": 10746, "end": 10751, "name": "DUP3", "source": 1 }, - { - "begin": 10731, - "end": 10752, - "name": "PUSH [tag]", - "source": 1, - "value": "106" - }, - { - "begin": 10731, - "end": 10752, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10731, - "end": 10752, - "name": "tag", - "source": 1, - "value": "241" - }, - { "begin": 10731, "end": 10752, "name": "JUMPDEST", "source": 1 }, - { "begin": 10720, "end": 10752, "name": "SWAP1", "source": 1 }, - { "begin": 10720, "end": 10752, "name": "POP", "source": 1 }, - { "begin": 10665, "end": 10758, "name": "SWAP2", "source": 1 }, - { "begin": 10665, "end": 10758, "name": "SWAP1", "source": 1 }, - { "begin": 10665, "end": 10758, "name": "POP", "source": 1 }, - { - "begin": 10665, - "end": 10758, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10764, - "end": 10859, - "name": "tag", - "source": 1, - "value": "108" - }, - { "begin": 10764, "end": 10859, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10800, - "end": 10807, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 10829, - "end": 10853, - "name": "PUSH [tag]", - "source": 1, - "value": "243" - }, - { "begin": 10847, "end": 10852, "name": "DUP3", "source": 1 }, - { - "begin": 10829, - "end": 10853, - "name": "PUSH [tag]", - "source": 1, - "value": "107" - }, - { - "begin": 10829, - "end": 10853, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10829, - "end": 10853, - "name": "tag", - "source": 1, - "value": "243" - }, - { "begin": 10829, "end": 10853, "name": "JUMPDEST", "source": 1 }, - { "begin": 10818, "end": 10853, "name": "SWAP1", "source": 1 }, - { "begin": 10818, "end": 10853, "name": "POP", "source": 1 }, - { "begin": 10764, "end": 10859, "name": "SWAP2", "source": 1 }, - { "begin": 10764, "end": 10859, "name": "SWAP1", "source": 1 }, - { "begin": 10764, "end": 10859, "name": "POP", "source": 1 }, - { - "begin": 10764, - "end": 10859, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 10865, - "end": 11010, - "name": "tag", - "source": 1, - "value": "109" - }, - { "begin": 10865, "end": 11010, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10964, - "end": 11003, - "name": "PUSH [tag]", - "source": 1, - "value": "245" - }, - { - "begin": 10981, - "end": 11002, - "name": "PUSH [tag]", - "source": 1, - "value": "246" - }, - { "begin": 10996, "end": 11001, "name": "DUP3", "source": 1 }, - { - "begin": 10981, - "end": 11002, - "name": "PUSH [tag]", - "source": 1, - "value": "89" - }, - { - "begin": 10981, - "end": 11002, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10981, - "end": 11002, - "name": "tag", - "source": 1, - "value": "246" - }, - { "begin": 10981, "end": 11002, "name": "JUMPDEST", "source": 1 }, - { - "begin": 10964, - "end": 11003, - "name": "PUSH [tag]", - "source": 1, - "value": "108" - }, - { - "begin": 10964, - "end": 11003, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 10964, - "end": 11003, - "name": "tag", - "source": 1, - "value": "245" - }, - { "begin": 10964, "end": 11003, "name": "JUMPDEST", "source": 1 }, - { "begin": 10959, "end": 10962, "name": "DUP3", "source": 1 }, - { "begin": 10952, "end": 11004, "name": "MSTORE", "source": 1 }, - { "begin": 10865, "end": 11010, "name": "POP", "source": 1 }, - { "begin": 10865, "end": 11010, "name": "POP", "source": 1 }, - { - "begin": 10865, - "end": 11010, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 11016, - "end": 12513, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 11016, "end": 12513, "name": "JUMPDEST", "source": 1 }, - { - "begin": 11368, - "end": 11371, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 11383, - "end": 11456, - "name": "PUSH [tag]", - "source": 1, - "value": "248" - }, - { "begin": 11452, "end": 11455, "name": "DUP3", "source": 1 }, - { "begin": 11443, "end": 11449, "name": "DUP14", "source": 1 }, - { - "begin": 11383, - "end": 11456, - "name": "PUSH [tag]", - "source": 1, - "value": "101" - }, - { - "begin": 11383, - "end": 11456, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 11383, - "end": 11456, - "name": "tag", - "source": 1, - "value": "248" - }, - { "begin": 11383, "end": 11456, "name": "JUMPDEST", "source": 1 }, - { - "begin": 11481, - "end": 11482, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 11476, "end": 11479, "name": "DUP3", "source": 1 }, - { "begin": 11472, "end": 11483, "name": "ADD", "source": 1 }, - { "begin": 11465, "end": 11483, "name": "SWAP2", "source": 1 }, - { "begin": 11465, "end": 11483, "name": "POP", "source": 1 }, - { - "begin": 11493, - "end": 11568, - "name": "PUSH [tag]", - "source": 1, - "value": "249" - }, - { "begin": 11564, "end": 11567, "name": "DUP3", "source": 1 }, - { "begin": 11555, "end": 11561, "name": "DUP13", "source": 1 }, - { - "begin": 11493, - "end": 11568, - "name": "PUSH [tag]", - "source": 1, - "value": "103" - }, - { - "begin": 11493, - "end": 11568, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 11493, - "end": 11568, - "name": "tag", - "source": 1, - "value": "249" - }, - { "begin": 11493, "end": 11568, "name": "JUMPDEST", "source": 1 }, - { - "begin": 11593, - "end": 11595, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 11588, "end": 11591, "name": "DUP3", "source": 1 }, - { "begin": 11584, "end": 11596, "name": "ADD", "source": 1 }, - { "begin": 11577, "end": 11596, "name": "SWAP2", "source": 1 }, - { "begin": 11577, "end": 11596, "name": "POP", "source": 1 }, - { - "begin": 11606, - "end": 11681, - "name": "PUSH [tag]", - "source": 1, - "value": "250" - }, - { "begin": 11677, "end": 11680, "name": "DUP3", "source": 1 }, - { "begin": 11668, "end": 11674, "name": "DUP12", "source": 1 }, - { - "begin": 11606, - "end": 11681, - "name": "PUSH [tag]", - "source": 1, - "value": "103" - }, - { - "begin": 11606, - "end": 11681, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 11606, - "end": 11681, - "name": "tag", - "source": 1, - "value": "250" - }, - { "begin": 11606, "end": 11681, "name": "JUMPDEST", "source": 1 }, - { - "begin": 11706, - "end": 11708, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 11701, "end": 11704, "name": "DUP3", "source": 1 }, - { "begin": 11697, "end": 11709, "name": "ADD", "source": 1 }, - { "begin": 11690, "end": 11709, "name": "SWAP2", "source": 1 }, - { "begin": 11690, "end": 11709, "name": "POP", "source": 1 }, - { - "begin": 11719, - "end": 11794, - "name": "PUSH [tag]", - "source": 1, - "value": "251" - }, - { "begin": 11790, "end": 11793, "name": "DUP3", "source": 1 }, - { "begin": 11781, "end": 11787, "name": "DUP11", "source": 1 }, - { - "begin": 11719, - "end": 11794, - "name": "PUSH [tag]", - "source": 1, - "value": "103" - }, - { - "begin": 11719, - "end": 11794, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 11719, - "end": 11794, - "name": "tag", - "source": 1, - "value": "251" - }, - { "begin": 11719, "end": 11794, "name": "JUMPDEST", "source": 1 }, - { - "begin": 11819, - "end": 11821, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 11814, "end": 11817, "name": "DUP3", "source": 1 }, - { "begin": 11810, "end": 11822, "name": "ADD", "source": 1 }, - { "begin": 11803, "end": 11822, "name": "SWAP2", "source": 1 }, - { "begin": 11803, "end": 11822, "name": "POP", "source": 1 }, - { - "begin": 11832, - "end": 11907, - "name": "PUSH [tag]", - "source": 1, - "value": "252" - }, - { "begin": 11903, "end": 11906, "name": "DUP3", "source": 1 }, - { "begin": 11894, "end": 11900, "name": "DUP10", "source": 1 }, - { - "begin": 11832, - "end": 11907, - "name": "PUSH [tag]", - "source": 1, - "value": "103" - }, - { - "begin": 11832, - "end": 11907, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 11832, - "end": 11907, - "name": "tag", - "source": 1, - "value": "252" - }, - { "begin": 11832, "end": 11907, "name": "JUMPDEST", "source": 1 }, - { - "begin": 11932, - "end": 11934, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 11927, "end": 11930, "name": "DUP3", "source": 1 }, - { "begin": 11923, "end": 11935, "name": "ADD", "source": 1 }, - { "begin": 11916, "end": 11935, "name": "SWAP2", "source": 1 }, - { "begin": 11916, "end": 11935, "name": "POP", "source": 1 }, - { - "begin": 11945, - "end": 12020, - "name": "PUSH [tag]", - "source": 1, - "value": "253" - }, - { "begin": 12016, "end": 12019, "name": "DUP3", "source": 1 }, - { "begin": 12007, "end": 12013, "name": "DUP9", "source": 1 }, - { - "begin": 11945, - "end": 12020, - "name": "PUSH [tag]", - "source": 1, - "value": "103" - }, - { - "begin": 11945, - "end": 12020, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 11945, - "end": 12020, - "name": "tag", - "source": 1, - "value": "253" - }, - { "begin": 11945, "end": 12020, "name": "JUMPDEST", "source": 1 }, - { - "begin": 12045, - "end": 12047, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 12040, "end": 12043, "name": "DUP3", "source": 1 }, - { "begin": 12036, "end": 12048, "name": "ADD", "source": 1 }, - { "begin": 12029, "end": 12048, "name": "SWAP2", "source": 1 }, - { "begin": 12029, "end": 12048, "name": "POP", "source": 1 }, - { - "begin": 12058, - "end": 12133, - "name": "PUSH [tag]", - "source": 1, - "value": "254" - }, - { "begin": 12129, "end": 12132, "name": "DUP3", "source": 1 }, - { "begin": 12120, "end": 12126, "name": "DUP8", "source": 1 }, - { - "begin": 12058, - "end": 12133, - "name": "PUSH [tag]", - "source": 1, - "value": "103" - }, - { - "begin": 12058, - "end": 12133, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 12058, - "end": 12133, - "name": "tag", - "source": 1, - "value": "254" - }, - { "begin": 12058, "end": 12133, "name": "JUMPDEST", "source": 1 }, - { - "begin": 12158, - "end": 12160, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 12153, "end": 12156, "name": "DUP3", "source": 1 }, - { "begin": 12149, "end": 12161, "name": "ADD", "source": 1 }, - { "begin": 12142, "end": 12161, "name": "SWAP2", "source": 1 }, - { "begin": 12142, "end": 12161, "name": "POP", "source": 1 }, - { - "begin": 12171, - "end": 12244, - "name": "PUSH [tag]", - "source": 1, - "value": "255" - }, - { "begin": 12240, "end": 12243, "name": "DUP3", "source": 1 }, - { "begin": 12231, "end": 12237, "name": "DUP7", "source": 1 }, - { - "begin": 12171, - "end": 12244, - "name": "PUSH [tag]", - "source": 1, - "value": "105" - }, - { - "begin": 12171, - "end": 12244, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 12171, - "end": 12244, - "name": "tag", - "source": 1, - "value": "255" - }, - { "begin": 12171, "end": 12244, "name": "JUMPDEST", "source": 1 }, - { - "begin": 12269, - "end": 12270, - "name": "PUSH", - "source": 1, - "value": "8" - }, - { "begin": 12264, "end": 12267, "name": "DUP3", "source": 1 }, - { "begin": 12260, "end": 12271, "name": "ADD", "source": 1 }, - { "begin": 12253, "end": 12271, "name": "SWAP2", "source": 1 }, - { "begin": 12253, "end": 12271, "name": "POP", "source": 1 }, - { - "begin": 12281, - "end": 12354, - "name": "PUSH [tag]", - "source": 1, - "value": "256" - }, - { "begin": 12350, "end": 12353, "name": "DUP3", "source": 1 }, - { "begin": 12341, "end": 12347, "name": "DUP6", "source": 1 }, - { - "begin": 12281, - "end": 12354, - "name": "PUSH [tag]", - "source": 1, - "value": "105" - }, - { - "begin": 12281, - "end": 12354, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 12281, - "end": 12354, - "name": "tag", - "source": 1, - "value": "256" - }, - { "begin": 12281, "end": 12354, "name": "JUMPDEST", "source": 1 }, - { - "begin": 12379, - "end": 12380, - "name": "PUSH", - "source": 1, - "value": "8" - }, - { "begin": 12374, "end": 12377, "name": "DUP3", "source": 1 }, - { "begin": 12370, "end": 12381, "name": "ADD", "source": 1 }, - { "begin": 12363, "end": 12381, "name": "SWAP2", "source": 1 }, - { "begin": 12363, "end": 12381, "name": "POP", "source": 1 }, - { - "begin": 12391, - "end": 12460, - "name": "PUSH [tag]", - "source": 1, - "value": "257" - }, - { "begin": 12456, "end": 12459, "name": "DUP3", "source": 1 }, - { "begin": 12447, "end": 12453, "name": "DUP5", "source": 1 }, - { - "begin": 12391, - "end": 12460, - "name": "PUSH [tag]", - "source": 1, - "value": "109" - }, - { - "begin": 12391, - "end": 12460, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 12391, - "end": 12460, - "name": "tag", - "source": 1, - "value": "257" - }, - { "begin": 12391, "end": 12460, "name": "JUMPDEST", "source": 1 }, - { - "begin": 12485, - "end": 12486, - "name": "PUSH", - "source": 1, - "value": "1" - }, - { "begin": 12480, "end": 12483, "name": "DUP3", "source": 1 }, - { "begin": 12476, "end": 12487, "name": "ADD", "source": 1 }, - { "begin": 12469, "end": 12487, "name": "SWAP2", "source": 1 }, - { "begin": 12469, "end": 12487, "name": "POP", "source": 1 }, - { "begin": 12504, "end": 12507, "name": "DUP2", "source": 1 }, - { "begin": 12497, "end": 12507, "name": "SWAP1", "source": 1 }, - { "begin": 12497, "end": 12507, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "SWAP12", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "SWAP11", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { "begin": 11016, "end": 12513, "name": "POP", "source": 1 }, - { - "begin": 11016, - "end": 12513, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "F(uint32,bytes32[2],bytes32[4],bytes8[2],bool)": "72de3cbd", - "callF()": "fc75ac47" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"rounds\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[2]\",\"name\":\"h\",\"type\":\"bytes32[2]\"},{\"internalType\":\"bytes32[4]\",\"name\":\"m\",\"type\":\"bytes32[4]\"},{\"internalType\":\"bytes8[2]\",\"name\":\"t\",\"type\":\"bytes8[2]\"},{\"internalType\":\"bool\",\"name\":\"f\",\"type\":\"bool\"}],\"name\":\"F\",\"outputs\":[{\"internalType\":\"bytes32[2]\",\"name\":\"\",\"type\":\"bytes32[2]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callF\",\"outputs\":[{\"internalType\":\"bytes32[2]\",\"name\":\"\",\"type\":\"bytes32[2]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Blake2Check\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x6bbb9ec520b4d03454e6c875760446169572fc07ded68946e3e1577ad9280b8e\",\"urls\":[\"bzz-raw://28b28ab6321bf4d25ddb205a1fe44d896665f18be1f2c5d4d88664547a0f75b5\",\"dweb:/ipfs/QmZRWLxCXNx8ZqwXDr1av5cumbbDmh52ND2CNbvmHCZw6D\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n\n contract Blake2Check {\n\n function F(uint32 rounds, bytes32[2] memory h, bytes32[4] memory m, bytes8[2] memory t, bool f) public view returns (bytes32[2] memory) {\n bytes32[2] memory output;\n\n bytes memory args = abi.encodePacked(rounds, h[0], h[1], m[0], m[1], m[2], m[3], t[0], t[1], f);\n\n assembly {\n if iszero(staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40)) {\n revert(0, 0)\n }\n }\n\n return output;\n }\n\n function callF() public view returns (bytes32[2] memory) {\n uint32 rounds = 12;\n\n bytes32[2] memory h;\n h[0] = hex\"48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5\";\n h[1] = hex\"d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b\";\n\n bytes32[4] memory m;\n m[0] = hex\"6162630000000000000000000000000000000000000000000000000000000000\";\n m[1] = hex\"0000000000000000000000000000000000000000000000000000000000000000\";\n m[2] = hex\"0000000000000000000000000000000000000000000000000000000000000000\";\n m[3] = hex\"0000000000000000000000000000000000000000000000000000000000000000\";\n\n bytes8[2] memory t;\n t[0] = hex\"03000000\";\n t[1] = hex\"00000000\";\n\n bool f = true;\n\n // Expected output:\n // ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1\n // 7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923\n return F(rounds, h, m, t, f);\n }\n }" -} diff --git a/tests/contracts/compiled/BlockVariables.json b/tests/contracts/compiled/BlockVariables.json new file mode 100644 index 0000000000..52641b0d44 --- /dev/null +++ b/tests/contracts/compiled/BlockVariables.json @@ -0,0 +1,1589 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b504560008190555046600181905550436002819055506101af806100356000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631a93d1c3146100675780633408e470146100855780634a57f8ee146100a35780634a9066da146100c1578063f2c9ecd8146100df578063fb3e8bda146100fd575b600080fd5b61006f61011b565b60405161007c919061015e565b60405180910390f35b61008d610123565b60405161009a919061015e565b60405180910390f35b6100ab61012b565b6040516100b8919061015e565b60405180910390f35b6100c9610131565b6040516100d6919061015e565b60405180910390f35b6100e7610137565b6040516100f4919061015e565b60405180910390f35b61010561013f565b604051610112919061015e565b60405180910390f35b600045905090565b600046905090565b60005481565b60025481565b600043905090565b60015481565b6000819050919050565b61015881610145565b82525050565b6000602082019050610173600083018461014f565b9291505056fea26469706673582212202500668930d73033ed6af9f10c62ef2571d40aa619b46bb275b1ce392f3c415864736f6c634300080b0033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "getChainId", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGasLimit", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNumber", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialchainid", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialgaslimit", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialnumber", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":67:631 contract BlockVariables {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":203:344 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":245:259 block.gaslimit */\n gaslimit\n /* \"main.sol\":227:242 initialgaslimit */\n 0x00\n /* \"main.sol\":227:259 initialgaslimit = block.gaslimit */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":286:299 block.chainid */\n chainid\n /* \"main.sol\":269:283 initialchainid */\n 0x01\n /* \"main.sol\":269:299 initialchainid = block.chainid */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":325:337 block.number */\n number\n /* \"main.sol\":309:322 initialnumber */\n 0x02\n /* \"main.sol\":309:337 initialnumber = block.number */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":67:631 contract BlockVariables {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:631 contract BlockVariables {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x1a93d1c3\n eq\n tag_3\n jumpi\n dup1\n 0x3408e470\n eq\n tag_4\n jumpi\n dup1\n 0x4a57f8ee\n eq\n tag_5\n jumpi\n dup1\n 0x4a9066da\n eq\n tag_6\n jumpi\n dup1\n 0xf2c9ecd8\n eq\n tag_7\n jumpi\n dup1\n 0xfb3e8bda\n eq\n tag_8\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":350:441 function getGasLimit() public view returns (uint256) {... */\n tag_3:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n mload(0x40)\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":447:536 function getChainId() public view returns (uint256) {... */\n tag_4:\n tag_13\n tag_14\n jump\t// in\n tag_13:\n mload(0x40)\n tag_15\n swap2\n swap1\n tag_12\n jump\t// in\n tag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":97:127 uint256 public initialgaslimit */\n tag_5:\n tag_16\n tag_17\n jump\t// in\n tag_16:\n mload(0x40)\n tag_18\n swap2\n swap1\n tag_12\n jump\t// in\n tag_18:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":168:196 uint256 public initialnumber */\n tag_6:\n tag_19\n tag_20\n jump\t// in\n tag_19:\n mload(0x40)\n tag_21\n swap2\n swap1\n tag_12\n jump\t// in\n tag_21:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":542:629 function getNumber() public view returns (uint256) {... */\n tag_7:\n tag_22\n tag_23\n jump\t// in\n tag_22:\n mload(0x40)\n tag_24\n swap2\n swap1\n tag_12\n jump\t// in\n tag_24:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":133:162 uint256 public initialchainid */\n tag_8:\n tag_25\n tag_26\n jump\t// in\n tag_25:\n mload(0x40)\n tag_27\n swap2\n swap1\n tag_12\n jump\t// in\n tag_27:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":350:441 function getGasLimit() public view returns (uint256) {... */\n tag_10:\n /* \"main.sol\":394:401 uint256 */\n 0x00\n /* \"main.sol\":420:434 block.gaslimit */\n gaslimit\n /* \"main.sol\":413:434 return block.gaslimit */\n swap1\n pop\n /* \"main.sol\":350:441 function getGasLimit() public view returns (uint256) {... */\n swap1\n jump\t// out\n /* \"main.sol\":447:536 function getChainId() public view returns (uint256) {... */\n tag_14:\n /* \"main.sol\":490:497 uint256 */\n 0x00\n /* \"main.sol\":516:529 block.chainid */\n chainid\n /* \"main.sol\":509:529 return block.chainid */\n swap1\n pop\n /* \"main.sol\":447:536 function getChainId() public view returns (uint256) {... */\n swap1\n jump\t// out\n /* \"main.sol\":97:127 uint256 public initialgaslimit */\n tag_17:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":168:196 uint256 public initialnumber */\n tag_20:\n sload(0x02)\n dup2\n jump\t// out\n /* \"main.sol\":542:629 function getNumber() public view returns (uint256) {... */\n tag_23:\n /* \"main.sol\":584:591 uint256 */\n 0x00\n /* \"main.sol\":610:622 block.number */\n number\n /* \"main.sol\":603:622 return block.number */\n swap1\n pop\n /* \"main.sol\":542:629 function getNumber() public view returns (uint256) {... */\n swap1\n jump\t// out\n /* \"main.sol\":133:162 uint256 public initialchainid */\n tag_26:\n sload(0x01)\n dup2\n jump\t// out\n /* \"#utility.yul\":7:84 */\n tag_31:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":73:78 */\n dup2\n /* \"#utility.yul\":62:78 */\n swap1\n pop\n /* \"#utility.yul\":7:84 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":90:208 */\n tag_32:\n /* \"#utility.yul\":177:201 */\n tag_36\n /* \"#utility.yul\":195:200 */\n dup2\n /* \"#utility.yul\":177:201 */\n tag_31\n jump\t// in\n tag_36:\n /* \"#utility.yul\":172:175 */\n dup3\n /* \"#utility.yul\":165:202 */\n mstore\n /* \"#utility.yul\":90:208 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":214:436 */\n tag_12:\n /* \"#utility.yul\":307:311 */\n 0x00\n /* \"#utility.yul\":345:347 */\n 0x20\n /* \"#utility.yul\":334:343 */\n dup3\n /* \"#utility.yul\":330:348 */\n add\n /* \"#utility.yul\":322:348 */\n swap1\n pop\n /* \"#utility.yul\":358:429 */\n tag_38\n /* \"#utility.yul\":426:427 */\n 0x00\n /* \"#utility.yul\":415:424 */\n dup4\n /* \"#utility.yul\":411:428 */\n add\n /* \"#utility.yul\":402:408 */\n dup5\n /* \"#utility.yul\":358:429 */\n tag_32\n jump\t// in\n tag_38:\n /* \"#utility.yul\":214:436 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212202500668930d73033ed6af9f10c62ef2571d40aa619b46bb275b1ce392f3c415864736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": { + "@_26": { + "entryPoint": null, + "id": 26, + "parameterSlots": 0, + "returnSlots": 0 + } + }, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b504560008190555046600181905550436002819055506101af806100356000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631a93d1c3146100675780633408e470146100855780634a57f8ee146100a35780634a9066da146100c1578063f2c9ecd8146100df578063fb3e8bda146100fd575b600080fd5b61006f61011b565b60405161007c919061015e565b60405180910390f35b61008d610123565b60405161009a919061015e565b60405180910390f35b6100ab61012b565b6040516100b8919061015e565b60405180910390f35b6100c9610131565b6040516100d6919061015e565b60405180910390f35b6100e7610137565b6040516100f4919061015e565b60405180910390f35b61010561013f565b604051610112919061015e565b60405180910390f35b600045905090565b600046905090565b60005481565b60025481565b600043905090565b60015481565b6000819050919050565b61015881610145565b82525050565b6000602082019050610173600083018461014f565b9291505056fea26469706673582212202500668930d73033ed6af9f10c62ef2571d40aa619b46bb275b1ce392f3c415864736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GASLIMIT PUSH1 0x0 DUP2 SWAP1 SSTORE POP CHAINID PUSH1 0x1 DUP2 SWAP1 SSTORE POP NUMBER PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH2 0x1AF DUP1 PUSH2 0x35 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1A93D1C3 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x4A57F8EE EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x4A9066DA EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0xF2C9ECD8 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xFB3E8BDA EQ PUSH2 0xFD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x11B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7C SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH2 0x123 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAB PUSH2 0x12B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x131 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD6 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE7 PUSH2 0x137 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x105 PUSH2 0x13F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x112 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 GASLIMIT SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 NUMBER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x158 DUP2 PUSH2 0x145 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x173 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x14F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 STOP PUSH7 0x8930D73033ED6A 0xF9 CALL 0xC PUSH3 0xEF2571 0xD4 EXP 0xA6 NOT 0xB4 PUSH12 0xB275B1CE392F3C415864736F PUSH13 0x634300080B0033000000000000 ", + "sourceMap": "67:564:0:-:0;;;203:141;;;;;;;;;;245:14;227:15;:32;;;;286:13;269:14;:30;;;;325:12;309:13;:28;;;;67:564;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@getChainId_44": { + "entryPoint": 291, + "id": 44, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@getGasLimit_35": { + "entryPoint": 283, + "id": 35, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@getNumber_53": { + "entryPoint": 311, + "id": 53, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@initialchainid_5": { + "entryPoint": 319, + "id": 5, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@initialgaslimit_3": { + "entryPoint": 299, + "id": 3, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@initialnumber_7": { + "entryPoint": 305, + "id": 7, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 335, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 350, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 325, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:439:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:1", + "type": "" + } + ], + "src": "7:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "155:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "195:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "177:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "177:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "165:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "165:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "165:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "143:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:1", + "type": "" + } + ], + "src": "90:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "312:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "322:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "334:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "330:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "330:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "322:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "402:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "358:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "358:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "358:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "284:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "296:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "307:4:1", + "type": "" + } + ], + "src": "214:222:1" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c80631a93d1c3146100675780633408e470146100855780634a57f8ee146100a35780634a9066da146100c1578063f2c9ecd8146100df578063fb3e8bda146100fd575b600080fd5b61006f61011b565b60405161007c919061015e565b60405180910390f35b61008d610123565b60405161009a919061015e565b60405180910390f35b6100ab61012b565b6040516100b8919061015e565b60405180910390f35b6100c9610131565b6040516100d6919061015e565b60405180910390f35b6100e7610137565b6040516100f4919061015e565b60405180910390f35b61010561013f565b604051610112919061015e565b60405180910390f35b600045905090565b600046905090565b60005481565b60025481565b600043905090565b60015481565b6000819050919050565b61015881610145565b82525050565b6000602082019050610173600083018461014f565b9291505056fea26469706673582212202500668930d73033ed6af9f10c62ef2571d40aa619b46bb275b1ce392f3c415864736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1A93D1C3 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x4A57F8EE EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x4A9066DA EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0xF2C9ECD8 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xFB3E8BDA EQ PUSH2 0xFD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x11B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7C SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH2 0x123 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAB PUSH2 0x12B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x131 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD6 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE7 PUSH2 0x137 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x105 PUSH2 0x13F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x112 SWAP2 SWAP1 PUSH2 0x15E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 GASLIMIT SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 NUMBER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x158 DUP2 PUSH2 0x145 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x173 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x14F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 STOP PUSH7 0x8930D73033ED6A 0xF9 CALL 0xC PUSH3 0xEF2571 0xD4 EXP 0xA6 NOT 0xB4 PUSH12 0xB275B1CE392F3C415864736F PUSH13 0x634300080B0033000000000000 ", + "sourceMap": "67:564:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;350:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;447:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;97:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;168:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;542:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;133:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;350:91;394:7;420:14;413:21;;350:91;:::o;447:89::-;490:7;516:13;509:20;;447:89;:::o;97:30::-;;;;:::o;168:28::-;;;;:::o;542:87::-;584:7;610:12;603:19;;542:87;:::o;133:29::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "86200", + "executionCost": "66474", + "totalCost": "152674" + }, + "external": { + "getChainId()": "336", + "getGasLimit()": "314", + "getNumber()": "402", + "initialchainid()": "2517", + "initialgaslimit()": "2451", + "initialnumber()": "2473" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 631, "name": "MSTORE", "source": 0 }, + { "begin": 203, "end": 344, "name": "CALLVALUE", "source": 0 }, + { "begin": 203, "end": 344, "name": "DUP1", "source": 0 }, + { "begin": 203, "end": 344, "name": "ISZERO", "source": 0 }, + { + "begin": 203, + "end": 344, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 203, "end": 344, "name": "JUMPI", "source": 0 }, + { + "begin": 203, + "end": 344, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 203, "end": 344, "name": "DUP1", "source": 0 }, + { "begin": 203, "end": 344, "name": "REVERT", "source": 0 }, + { + "begin": 203, + "end": 344, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 203, "end": 344, "name": "JUMPDEST", "source": 0 }, + { "begin": 203, "end": 344, "name": "POP", "source": 0 }, + { "begin": 245, "end": 259, "name": "GASLIMIT", "source": 0 }, + { + "begin": 227, + "end": 242, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 227, "end": 259, "name": "DUP2", "source": 0 }, + { "begin": 227, "end": 259, "name": "SWAP1", "source": 0 }, + { "begin": 227, "end": 259, "name": "SSTORE", "source": 0 }, + { "begin": 227, "end": 259, "name": "POP", "source": 0 }, + { "begin": 286, "end": 299, "name": "CHAINID", "source": 0 }, + { + "begin": 269, + "end": 283, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 269, "end": 299, "name": "DUP2", "source": 0 }, + { "begin": 269, "end": 299, "name": "SWAP1", "source": 0 }, + { "begin": 269, "end": 299, "name": "SSTORE", "source": 0 }, + { "begin": 269, "end": 299, "name": "POP", "source": 0 }, + { "begin": 325, "end": 337, "name": "NUMBER", "source": 0 }, + { + "begin": 309, + "end": 322, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 309, "end": 337, "name": "DUP2", "source": 0 }, + { "begin": 309, "end": 337, "name": "SWAP1", "source": 0 }, + { "begin": 309, "end": 337, "name": "SSTORE", "source": 0 }, + { "begin": 309, "end": 337, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 631, "name": "CODECOPY", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 631, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212202500668930d73033ed6af9f10c62ef2571d40aa619b46bb275b1ce392f3c415864736f6c634300080b0033", + ".code": [ + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 631, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 631, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 631, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 631, "name": "REVERT", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 631, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 631, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 631, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 631, "name": "LT", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 631, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 67, "end": 631, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "1A93D1C3" + }, + { "begin": 67, "end": 631, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "3408E470" + }, + { "begin": 67, "end": 631, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "4A57F8EE" + }, + { "begin": 67, "end": 631, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "4A9066DA" + }, + { "begin": 67, "end": 631, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "F2C9ECD8" + }, + { "begin": 67, "end": 631, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "FB3E8BDA" + }, + { "begin": 67, "end": 631, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 67, "end": 631, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 631, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 631, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 631, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 631, "name": "REVERT", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 350, "end": 441, "name": "JUMPDEST", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 350, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 350, + "end": 441, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 350, + "end": 441, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 350, "end": 441, "name": "JUMPDEST", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 350, "end": 441, "name": "MLOAD", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 350, "end": 441, "name": "SWAP2", "source": 0 }, + { "begin": 350, "end": 441, "name": "SWAP1", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 350, + "end": 441, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 350, + "end": 441, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 350, "end": 441, "name": "JUMPDEST", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 350, "end": 441, "name": "MLOAD", "source": 0 }, + { "begin": 350, "end": 441, "name": "DUP1", "source": 0 }, + { "begin": 350, "end": 441, "name": "SWAP2", "source": 0 }, + { "begin": 350, "end": 441, "name": "SUB", "source": 0 }, + { "begin": 350, "end": 441, "name": "SWAP1", "source": 0 }, + { "begin": 350, "end": 441, "name": "RETURN", "source": 0 }, + { + "begin": 447, + "end": 536, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 447, "end": 536, "name": "JUMPDEST", "source": 0 }, + { + "begin": 447, + "end": 536, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 447, + "end": 536, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { + "begin": 447, + "end": 536, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 447, + "end": 536, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 447, "end": 536, "name": "JUMPDEST", "source": 0 }, + { + "begin": 447, + "end": 536, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 447, "end": 536, "name": "MLOAD", "source": 0 }, + { + "begin": 447, + "end": 536, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 447, "end": 536, "name": "SWAP2", "source": 0 }, + { "begin": 447, "end": 536, "name": "SWAP1", "source": 0 }, + { + "begin": 447, + "end": 536, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 447, + "end": 536, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 447, + "end": 536, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 447, "end": 536, "name": "JUMPDEST", "source": 0 }, + { + "begin": 447, + "end": 536, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 447, "end": 536, "name": "MLOAD", "source": 0 }, + { "begin": 447, "end": 536, "name": "DUP1", "source": 0 }, + { "begin": 447, "end": 536, "name": "SWAP2", "source": 0 }, + { "begin": 447, "end": 536, "name": "SUB", "source": 0 }, + { "begin": 447, "end": 536, "name": "SWAP1", "source": 0 }, + { "begin": 447, "end": 536, "name": "RETURN", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 97, "end": 127, "name": "JUMPDEST", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { + "begin": 97, + "end": 127, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 97, + "end": 127, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 97, + "end": 127, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 97, "end": 127, "name": "JUMPDEST", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 97, "end": 127, "name": "MLOAD", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 97, "end": 127, "name": "SWAP2", "source": 0 }, + { "begin": 97, "end": 127, "name": "SWAP1", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 97, + "end": 127, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 97, + "end": 127, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 97, "end": 127, "name": "JUMPDEST", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 97, "end": 127, "name": "MLOAD", "source": 0 }, + { "begin": 97, "end": 127, "name": "DUP1", "source": 0 }, + { "begin": 97, "end": 127, "name": "SWAP2", "source": 0 }, + { "begin": 97, "end": 127, "name": "SUB", "source": 0 }, + { "begin": 97, "end": 127, "name": "SWAP1", "source": 0 }, + { "begin": 97, "end": 127, "name": "RETURN", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 168, "end": 196, "name": "JUMPDEST", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { + "begin": 168, + "end": 196, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { + "begin": 168, + "end": 196, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 168, + "end": 196, + "name": "tag", + "source": 0, + "value": "19" + }, + { "begin": 168, "end": 196, "name": "JUMPDEST", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 168, "end": 196, "name": "MLOAD", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { "begin": 168, "end": 196, "name": "SWAP2", "source": 0 }, + { "begin": 168, "end": 196, "name": "SWAP1", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 168, + "end": 196, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 168, + "end": 196, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 168, "end": 196, "name": "JUMPDEST", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 168, "end": 196, "name": "MLOAD", "source": 0 }, + { "begin": 168, "end": 196, "name": "DUP1", "source": 0 }, + { "begin": 168, "end": 196, "name": "SWAP2", "source": 0 }, + { "begin": 168, "end": 196, "name": "SUB", "source": 0 }, + { "begin": 168, "end": 196, "name": "SWAP1", "source": 0 }, + { "begin": 168, "end": 196, "name": "RETURN", "source": 0 }, + { + "begin": 542, + "end": 629, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 542, "end": 629, "name": "JUMPDEST", "source": 0 }, + { + "begin": 542, + "end": 629, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { + "begin": 542, + "end": 629, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { + "begin": 542, + "end": 629, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 542, + "end": 629, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 542, "end": 629, "name": "JUMPDEST", "source": 0 }, + { + "begin": 542, + "end": 629, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 542, "end": 629, "name": "MLOAD", "source": 0 }, + { + "begin": 542, + "end": 629, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { "begin": 542, "end": 629, "name": "SWAP2", "source": 0 }, + { "begin": 542, "end": 629, "name": "SWAP1", "source": 0 }, + { + "begin": 542, + "end": 629, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 542, + "end": 629, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 542, + "end": 629, + "name": "tag", + "source": 0, + "value": "24" + }, + { "begin": 542, "end": 629, "name": "JUMPDEST", "source": 0 }, + { + "begin": 542, + "end": 629, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 542, "end": 629, "name": "MLOAD", "source": 0 }, + { "begin": 542, "end": 629, "name": "DUP1", "source": 0 }, + { "begin": 542, "end": 629, "name": "SWAP2", "source": 0 }, + { "begin": 542, "end": 629, "name": "SUB", "source": 0 }, + { "begin": 542, "end": 629, "name": "SWAP1", "source": 0 }, + { "begin": 542, "end": 629, "name": "RETURN", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 133, "end": 162, "name": "JUMPDEST", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 133, + "end": 162, + "name": "PUSH [tag]", + "source": 0, + "value": "26" + }, + { + "begin": 133, + "end": 162, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 133, + "end": 162, + "name": "tag", + "source": 0, + "value": "25" + }, + { "begin": 133, "end": 162, "name": "JUMPDEST", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 133, "end": 162, "name": "MLOAD", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { "begin": 133, "end": 162, "name": "SWAP2", "source": 0 }, + { "begin": 133, "end": 162, "name": "SWAP1", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 133, + "end": 162, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 133, + "end": 162, + "name": "tag", + "source": 0, + "value": "27" + }, + { "begin": 133, "end": 162, "name": "JUMPDEST", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 133, "end": 162, "name": "MLOAD", "source": 0 }, + { "begin": 133, "end": 162, "name": "DUP1", "source": 0 }, + { "begin": 133, "end": 162, "name": "SWAP2", "source": 0 }, + { "begin": 133, "end": 162, "name": "SUB", "source": 0 }, + { "begin": 133, "end": 162, "name": "SWAP1", "source": 0 }, + { "begin": 133, "end": 162, "name": "RETURN", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 350, "end": 441, "name": "JUMPDEST", "source": 0 }, + { + "begin": 394, + "end": 401, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 420, "end": 434, "name": "GASLIMIT", "source": 0 }, + { "begin": 413, "end": 434, "name": "SWAP1", "source": 0 }, + { "begin": 413, "end": 434, "name": "POP", "source": 0 }, + { "begin": 350, "end": 441, "name": "SWAP1", "source": 0 }, + { + "begin": 350, + "end": 441, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 447, + "end": 536, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 447, "end": 536, "name": "JUMPDEST", "source": 0 }, + { + "begin": 490, + "end": 497, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 516, "end": 529, "name": "CHAINID", "source": 0 }, + { "begin": 509, "end": 529, "name": "SWAP1", "source": 0 }, + { "begin": 509, "end": 529, "name": "POP", "source": 0 }, + { "begin": 447, "end": 536, "name": "SWAP1", "source": 0 }, + { + "begin": 447, + "end": 536, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 97, + "end": 127, + "name": "tag", + "source": 0, + "value": "17" + }, + { "begin": 97, "end": 127, "name": "JUMPDEST", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 97, "end": 127, "name": "SLOAD", "source": 0 }, + { "begin": 97, "end": 127, "name": "DUP2", "source": 0 }, + { + "begin": 97, + "end": 127, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 168, + "end": 196, + "name": "tag", + "source": 0, + "value": "20" + }, + { "begin": 168, "end": 196, "name": "JUMPDEST", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 168, "end": 196, "name": "SLOAD", "source": 0 }, + { "begin": 168, "end": 196, "name": "DUP2", "source": 0 }, + { + "begin": 168, + "end": 196, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 542, + "end": 629, + "name": "tag", + "source": 0, + "value": "23" + }, + { "begin": 542, "end": 629, "name": "JUMPDEST", "source": 0 }, + { + "begin": 584, + "end": 591, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 610, "end": 622, "name": "NUMBER", "source": 0 }, + { "begin": 603, "end": 622, "name": "SWAP1", "source": 0 }, + { "begin": 603, "end": 622, "name": "POP", "source": 0 }, + { "begin": 542, "end": 629, "name": "SWAP1", "source": 0 }, + { + "begin": 542, + "end": 629, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 133, + "end": 162, + "name": "tag", + "source": 0, + "value": "26" + }, + { "begin": 133, "end": 162, "name": "JUMPDEST", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 133, "end": 162, "name": "SLOAD", "source": 0 }, + { "begin": 133, "end": 162, "name": "DUP2", "source": 0 }, + { + "begin": 133, + "end": 162, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 84, + "name": "tag", + "source": 1, + "value": "31" + }, + { "begin": 7, "end": 84, "name": "JUMPDEST", "source": 1 }, + { + "begin": 44, + "end": 51, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 73, "end": 78, "name": "DUP2", "source": 1 }, + { "begin": 62, "end": 78, "name": "SWAP1", "source": 1 }, + { "begin": 62, "end": 78, "name": "POP", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP2", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP1", "source": 1 }, + { "begin": 7, "end": 84, "name": "POP", "source": 1 }, + { + "begin": 7, + "end": 84, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 90, + "end": 208, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 90, "end": 208, "name": "JUMPDEST", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 195, "end": 200, "name": "DUP2", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "31" + }, + { + "begin": 177, + "end": 201, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 177, + "end": 201, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 177, "end": 201, "name": "JUMPDEST", "source": 1 }, + { "begin": 172, "end": 175, "name": "DUP3", "source": 1 }, + { "begin": 165, "end": 202, "name": "MSTORE", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { + "begin": 90, + "end": 208, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 214, + "end": 436, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 214, "end": 436, "name": "JUMPDEST", "source": 1 }, + { + "begin": 307, + "end": 311, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 345, + "end": 347, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 334, "end": 343, "name": "DUP3", "source": 1 }, + { "begin": 330, "end": 348, "name": "ADD", "source": 1 }, + { "begin": 322, "end": 348, "name": "SWAP1", "source": 1 }, + { "begin": 322, "end": 348, "name": "POP", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "38" + }, + { + "begin": 426, + "end": 427, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 415, "end": 424, "name": "DUP4", "source": 1 }, + { "begin": 411, "end": 428, "name": "ADD", "source": 1 }, + { "begin": 402, "end": 408, "name": "DUP5", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 358, + "end": 429, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 358, + "end": 429, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 358, "end": 429, "name": "JUMPDEST", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP3", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP2", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { + "begin": 214, + "end": 436, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "getChainId()": "3408e470", + "getGasLimit()": "1a93d1c3", + "getNumber()": "f2c9ecd8", + "initialchainid()": "fb3e8bda", + "initialgaslimit()": "4a57f8ee", + "initialnumber()": "4a9066da" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialchainid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialgaslimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialnumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"BlockVariables\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x8f54c882e6b419859503d017a56c2550df9bd7137983bc4a2b6caddd40fbe856\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://ab2c4eb7f924b6a2f6d57aaefc4a2110d43c3694358d2ec28e9696f9b8640349\",\"dweb:/ipfs/QmVDNuE1cMvV6iNJepLfNeTimGTPRVRdJdK6ZKCQreBABv\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:BlockVariables", + "label": "initialgaslimit", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 5, + "contract": "main.sol:BlockVariables", + "label": "initialchainid", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 7, + "contract": "main.sol:BlockVariables", + "label": "initialnumber", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract BlockVariables {\n uint256 public initialgaslimit;\n uint256 public initialchainid;\n uint256 public initialnumber;\n\n constructor() {\n initialgaslimit = block.gaslimit;\n initialchainid = block.chainid;\n initialnumber = block.number;\n }\n\n function getGasLimit() public view returns (uint256) {\n return block.gaslimit;\n }\n\n function getChainId() public view returns (uint256) {\n return block.chainid;\n }\n\n function getNumber() public view returns (uint256) {\n return block.number;\n }\n}\n" +} diff --git a/tests/contracts/compiled/Bn128Addition.json b/tests/contracts/compiled/Bn128Addition.json deleted file mode 100644 index 9f13f5f80c..0000000000 --- a/tests/contracts/compiled/Bn128Addition.json +++ /dev/null @@ -1,2076 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1320 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[4] memory input */\n dup1\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n mload(0x40)\n dup1\n 0x80\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":164:230 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703 */\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":248:314 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915 */\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":332:398 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9 */\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":416:482 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 */\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n /* \"main.sol\":120:496 uint256[4] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":510:534 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":915:917 64 */\n 0x40\n /* \"main.sol\":907:913 result */\n dup2\n /* \"main.sol\":902:905 128 */\n 0x80\n /* \"main.sol\":895:900 input */\n dup5\n /* \"main.sol\":892:893 0 */\n 0x00\n /* \"main.sol\":886:890 0x06 */\n 0x06\n /* \"main.sol\":882:883 0 */\n 0x00\n /* \"main.sol\":878:884 not(0) */\n not\n /* \"main.sol\":873:918 call(not(0), 0x06, 0, input, 128, result, 64) */\n call\n /* \"main.sol\":862:918 success := call(not(0), 0x06, 0, input, 128, result, 64) */\n swap3\n pop\n /* \"main.sol\":953:960 success */\n dup3\n /* \"main.sol\":945:995 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1063:1129 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7 */\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7\n /* \"main.sol\":1034:1040 result */\n dup2\n /* \"main.sol\":1041:1042 0 */\n 0x00\n /* \"main.sol\":1034:1043 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1034:1129 result[0] ==... */\n eq\n /* \"main.sol\":1009:1152 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1220:1286 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204 */\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204\n /* \"main.sol\":1191:1197 result */\n dup2\n /* \"main.sol\":1198:1199 1 */\n 0x01\n /* \"main.sol\":1191:1200 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1191:1286 result[1] ==... */\n eq\n /* \"main.sol\":1166:1309 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1320 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1326 contract Bn128Addition{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2120:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "153:220:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "163:74:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "229:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:2:1", - "type": "", - "value": "30" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "170:58:1" - }, - "nodeType": "YulFunctionCall", - "src": "170:67:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "163:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "335:3:1" - } - ], - "functionName": { - "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", - "nodeType": "YulIdentifier", - "src": "246:88:1" - }, - "nodeType": "YulFunctionCall", - "src": "246:93:1" - }, - "nodeType": "YulExpressionStatement", - "src": "246:93:1" - }, - { - "nodeType": "YulAssignment", - "src": "348:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "359:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "364:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "355:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "355:12:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "348:3:1" - } - ] - } - ] - }, - "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "141:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "149:3:1", - "type": "" - } - ], - "src": "7:366:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "525:219:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "535:73:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "601:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "606:1:1", - "type": "", - "value": "6" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "542:58:1" - }, - "nodeType": "YulFunctionCall", - "src": "542:66:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "535:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "706:3:1" - } - ], - "functionName": { - "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", - "nodeType": "YulIdentifier", - "src": "617:88:1" - }, - "nodeType": "YulFunctionCall", - "src": "617:93:1" - }, - "nodeType": "YulExpressionStatement", - "src": "617:93:1" - }, - { - "nodeType": "YulAssignment", - "src": "719:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "730:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "735:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "726:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "726:12:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "719:3:1" - } - ] - } - ] - }, - "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "513:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "521:3:1", - "type": "" - } - ], - "src": "379:365:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "921:248:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "931:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "943:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "954:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "939:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "939:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "931:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "978:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "974:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "974:17:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "997:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1003:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "993:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "993:20:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "967:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "967:47:1" - }, - "nodeType": "YulExpressionStatement", - "src": "967:47:1" - }, - { - "nodeType": "YulAssignment", - "src": "1023:139:1", - "value": { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1157:4:1" - } - ], - "functionName": { - "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "1031:124:1" - }, - "nodeType": "YulFunctionCall", - "src": "1031:131:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1023:4:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "901:9:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "916:4:1", - "type": "" - } - ], - "src": "750:419:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1346:248:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1356:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1368:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1379:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1364:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1364:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1356:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1403:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1414:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1399:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1399:17:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1422:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1428:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1418:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1418:20:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1392:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1392:47:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1392:47:1" - }, - { - "nodeType": "YulAssignment", - "src": "1448:139:1", - "value": { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1582:4:1" - } - ], - "functionName": { - "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "1456:124:1" - }, - "nodeType": "YulFunctionCall", - "src": "1456:131:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1448:4:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1326:9:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1341:4:1", - "type": "" - } - ], - "src": "1175:419:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1696:73:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1713:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1718:6:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1706:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1706:19:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1706:19:1" - }, - { - "nodeType": "YulAssignment", - "src": "1734:29:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1753:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1758:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1749:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1749:14:1" - }, - "variableNames": [ - { - "name": "updated_pos", - "nodeType": "YulIdentifier", - "src": "1734:11:1" - } - ] - } - ] - }, - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1668:3:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1673:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "updated_pos", - "nodeType": "YulTypedName", - "src": "1684:11:1", - "type": "" - } - ], - "src": "1600:169:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1881:74:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1903:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1911:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1899:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1899:14:1" - }, - { - "kind": "string", - "nodeType": "YulLiteral", - "src": "1915:32:1", - "type": "", - "value": "elliptic curve addition failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1892:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1892:56:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1892:56:1" - } - ] - }, - "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1873:6:1", - "type": "" - } - ], - "src": "1775:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2067:50:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2089:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2097:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2085:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2085:14:1" - }, - { - "kind": "string", - "nodeType": "YulLiteral", - "src": "2101:8:1", - "type": "", - "value": "failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2078:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2078:32:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2078:32:1" - } - ] - }, - "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2059:6:1", - "type": "" - } - ], - "src": "1961:156:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f3726681525090506100bf610257565b60408160808460006006600019f192508261010f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610106906102bf565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb78160006002811061016a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146101af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a6906102df565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061020a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201511461024f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610246906102df565b60405180910390fd5b505050610362565b6040518060400160405280600290602082028036833780820191505090505090565b6000610286601e836102ff565b915061029182610310565b602082019050919050565b60006102a96006836102ff565b91506102b482610339565b602082019050919050565b600060208201905081810360008301526102d881610279565b9050919050565b600060208201905081810360008301526102f88161029c565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f806103706000396000f3fe6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266 DUP2 MSTORE POP SWAP1 POP PUSH2 0xBF PUSH2 0x257 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x80 DUP5 PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0x10F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x106 SWAP1 PUSH2 0x2BF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x16A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x1AF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A6 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x20A JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x24F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x246 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x362 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x286 PUSH1 0x1E DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x291 DUP3 PUSH2 0x310 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A9 PUSH1 0x6 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 POP PUSH2 0x2B4 DUP3 PUSH2 0x339 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D8 DUP2 PUSH2 0x279 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2F8 DUP2 PUSH2 0x29C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x370 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "34:1292:0:-:0;;;66:1254;;;;;;;;;;94:12;120:23;:376;;;;;;;;164:66;120:376;;;;248:66;120:376;;;;332:66;120:376;;;;416:66;120:376;;;;;510:24;;:::i;:::-;915:2;907:6;902:3;895:5;892:1;886:4;882:1;878:6;873:45;862:56;;953:7;945:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;1063:66;1034:6;1041:1;1034:9;;;;;;;;;;;;;;;;;;;:95;1009:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1220:66;1191:6;1198:1;1191:9;;;;;;;;;;;;;;;;;;;:95;1166:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1254;;;34:1292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1292:0:-;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 DUP7 CALLER 0xC4 0xEC 0x2F 0x5F 0xD1 SWAP10 XOR PUSH19 0xCC9181BF53E954372785D2B34C64298C5275B 0x4D MSTORE PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "34:1292:0:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "infinite", - "totalCost": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1326, "name": "MSTORE", "source": 0 }, - { "begin": 66, "end": 1320, "name": "CALLVALUE", "source": 0 }, - { "begin": 66, "end": 1320, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 1320, "name": "ISZERO", "source": 0 }, - { - "begin": 66, - "end": 1320, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 66, "end": 1320, "name": "JUMPI", "source": 0 }, - { - "begin": 66, - "end": 1320, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 66, "end": 1320, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 1320, "name": "REVERT", "source": 0 }, - { - "begin": 66, - "end": 1320, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 66, "end": 1320, "name": "JUMPDEST", "source": 0 }, - { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, - { - "begin": 94, - "end": 106, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 120, "end": 143, "name": "DUP1", "source": 0 }, - { - "begin": 120, - "end": 496, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 120, "end": 496, "name": "MLOAD", "source": 0 }, - { "begin": 120, "end": 496, "name": "DUP1", "source": 0 }, - { - "begin": 120, - "end": 496, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, - { - "begin": 120, - "end": 496, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, - { "begin": 120, "end": 496, "name": "DUP1", "source": 0 }, - { - "begin": 164, - "end": 230, - "name": "PUSH", - "source": 0, - "value": "2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703" - }, - { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, - { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, - { - "begin": 120, - "end": 496, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, - { - "begin": 248, - "end": 314, - "name": "PUSH", - "source": 0, - "value": "301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915" - }, - { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, - { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, - { - "begin": 120, - "end": 496, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, - { - "begin": 332, - "end": 398, - "name": "PUSH", - "source": 0, - "value": "18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9" - }, - { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, - { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, - { - "begin": 120, - "end": 496, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 120, "end": 496, "name": "ADD", "source": 0 }, - { - "begin": 416, - "end": 482, - "name": "PUSH", - "source": 0, - "value": "63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266" - }, - { "begin": 120, "end": 496, "name": "DUP2", "source": 0 }, - { "begin": 120, "end": 496, "name": "MSTORE", "source": 0 }, - { "begin": 120, "end": 496, "name": "POP", "source": 0 }, - { "begin": 120, "end": 496, "name": "SWAP1", "source": 0 }, - { "begin": 120, "end": 496, "name": "POP", "source": 0 }, - { - "begin": 510, - "end": 534, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 510, - "end": 534, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 510, - "end": 534, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 510, - "end": 534, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 510, "end": 534, "name": "JUMPDEST", "source": 0 }, - { - "begin": 915, - "end": 917, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 907, "end": 913, "name": "DUP2", "source": 0 }, - { - "begin": 902, - "end": 905, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { "begin": 895, "end": 900, "name": "DUP5", "source": 0 }, - { - "begin": 892, - "end": 893, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 886, - "end": 890, - "name": "PUSH", - "source": 0, - "value": "6" - }, - { - "begin": 882, - "end": 883, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 878, "end": 884, "name": "NOT", "source": 0 }, - { "begin": 873, "end": 918, "name": "CALL", "source": 0 }, - { "begin": 862, "end": 918, "name": "SWAP3", "source": 0 }, - { "begin": 862, "end": 918, "name": "POP", "source": 0 }, - { "begin": 953, "end": 960, "name": "DUP3", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 945, "end": 995, "name": "JUMPI", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 945, "end": 995, "name": "MLOAD", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 945, "end": 995, "name": "DUP2", "source": 0 }, - { "begin": 945, "end": 995, "name": "MSTORE", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 945, "end": 995, "name": "ADD", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 945, "end": 995, "name": "SWAP1", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 945, - "end": 995, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 945, - "end": 995, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 945, "end": 995, "name": "JUMPDEST", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 945, "end": 995, "name": "MLOAD", "source": 0 }, - { "begin": 945, "end": 995, "name": "DUP1", "source": 0 }, - { "begin": 945, "end": 995, "name": "SWAP2", "source": 0 }, - { "begin": 945, "end": 995, "name": "SUB", "source": 0 }, - { "begin": 945, "end": 995, "name": "SWAP1", "source": 0 }, - { "begin": 945, "end": 995, "name": "REVERT", "source": 0 }, - { - "begin": 945, - "end": 995, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 945, "end": 995, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1063, - "end": 1129, - "name": "PUSH", - "source": 0, - "value": "2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7" - }, - { "begin": 1034, "end": 1040, "name": "DUP2", "source": 0 }, - { - "begin": 1041, - "end": 1042, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 1034, "end": 1043, "name": "DUP2", "source": 0 }, - { "begin": 1034, "end": 1043, "name": "LT", "source": 0 }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 1034, "end": 1043, "name": "JUMPI", "source": 0 }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1034, "end": 1043, "name": "MSTORE", "source": 0 }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "32" - }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1034, "end": 1043, "name": "MSTORE", "source": 0 }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "24" - }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1034, "end": 1043, "name": "REVERT", "source": 0 }, - { - "begin": 1034, - "end": 1043, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 1034, "end": 1043, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1034, - "end": 1043, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1034, "end": 1043, "name": "MUL", "source": 0 }, - { "begin": 1034, "end": 1043, "name": "ADD", "source": 0 }, - { "begin": 1034, "end": 1043, "name": "MLOAD", "source": 0 }, - { "begin": 1034, "end": 1129, "name": "EQ", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 1009, "end": 1152, "name": "JUMPI", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1009, "end": 1152, "name": "MLOAD", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 1009, "end": 1152, "name": "DUP2", "source": 0 }, - { "begin": 1009, "end": 1152, "name": "MSTORE", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1009, "end": 1152, "name": "ADD", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 1009, "end": 1152, "name": "SWAP1", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 1009, - "end": 1152, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1009, - "end": 1152, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 1009, "end": 1152, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1009, "end": 1152, "name": "MLOAD", "source": 0 }, - { "begin": 1009, "end": 1152, "name": "DUP1", "source": 0 }, - { "begin": 1009, "end": 1152, "name": "SWAP2", "source": 0 }, - { "begin": 1009, "end": 1152, "name": "SUB", "source": 0 }, - { "begin": 1009, "end": 1152, "name": "SWAP1", "source": 0 }, - { "begin": 1009, "end": 1152, "name": "REVERT", "source": 0 }, - { - "begin": 1009, - "end": 1152, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 1009, "end": 1152, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1220, - "end": 1286, - "name": "PUSH", - "source": 0, - "value": "21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204" - }, - { "begin": 1191, "end": 1197, "name": "DUP2", "source": 0 }, - { - "begin": 1198, - "end": 1199, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 1191, "end": 1200, "name": "DUP2", "source": 0 }, - { "begin": 1191, "end": 1200, "name": "LT", "source": 0 }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 1191, "end": 1200, "name": "JUMPI", "source": 0 }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1191, "end": 1200, "name": "MSTORE", "source": 0 }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "32" - }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1191, "end": 1200, "name": "MSTORE", "source": 0 }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "24" - }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1191, "end": 1200, "name": "REVERT", "source": 0 }, - { - "begin": 1191, - "end": 1200, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 1191, "end": 1200, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1191, - "end": 1200, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1191, "end": 1200, "name": "MUL", "source": 0 }, - { "begin": 1191, "end": 1200, "name": "ADD", "source": 0 }, - { "begin": 1191, "end": 1200, "name": "MLOAD", "source": 0 }, - { "begin": 1191, "end": 1286, "name": "EQ", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 1166, "end": 1309, "name": "JUMPI", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1166, "end": 1309, "name": "MLOAD", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 1166, "end": 1309, "name": "DUP2", "source": 0 }, - { "begin": 1166, "end": 1309, "name": "MSTORE", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1166, "end": 1309, "name": "ADD", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 1166, "end": 1309, "name": "SWAP1", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 1166, - "end": 1309, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1166, - "end": 1309, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 1166, "end": 1309, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1166, "end": 1309, "name": "MLOAD", "source": 0 }, - { "begin": 1166, "end": 1309, "name": "DUP1", "source": 0 }, - { "begin": 1166, "end": 1309, "name": "SWAP2", "source": 0 }, - { "begin": 1166, "end": 1309, "name": "SUB", "source": 0 }, - { "begin": 1166, "end": 1309, "name": "SWAP1", "source": 0 }, - { "begin": 1166, "end": 1309, "name": "REVERT", "source": 0 }, - { - "begin": 1166, - "end": 1309, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 1166, "end": 1309, "name": "JUMPDEST", "source": 0 }, - { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, - { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, - { "begin": 66, "end": 1320, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { "begin": 34, "end": 1326, "name": "JUMP", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 34, "end": 1326, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1326, "name": "MLOAD", "source": 0 }, - { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1326, "name": "ADD", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1326, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 1326, "name": "SWAP1", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 34, "end": 1326, "name": "DUP3", "source": 0 }, - { "begin": 34, "end": 1326, "name": "MUL", "source": 0 }, - { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1326, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 1326, "name": "DUP4", "source": 0 }, - { "begin": 34, "end": 1326, "name": "CALLDATACOPY", "source": 0 }, - { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1326, "name": "DUP3", "source": 0 }, - { "begin": 34, "end": 1326, "name": "ADD", "source": 0 }, - { "begin": 34, "end": 1326, "name": "SWAP2", "source": 0 }, - { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1326, "name": "SWAP1", "source": 0 }, - { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1326, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1326, "name": "SWAP1", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { "begin": 7, "end": 373, "name": "tag", "source": 1, "value": "18" }, - { "begin": 7, "end": 373, "name": "JUMPDEST", "source": 1 }, - { "begin": 7, "end": 373, "name": "PUSH", "source": 1, "value": "0" }, - { - "begin": 170, - "end": 237, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 234, - "end": 236, - "name": "PUSH", - "source": 1, - "value": "1E" - }, - { "begin": 229, "end": 232, "name": "DUP4", "source": 1 }, - { - "begin": 170, - "end": 237, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 170, - "end": 237, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 170, - "end": 237, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 170, "end": 237, "name": "JUMPDEST", "source": 1 }, - { "begin": 163, "end": 237, "name": "SWAP2", "source": 1 }, - { "begin": 163, "end": 237, "name": "POP", "source": 1 }, - { - "begin": 246, - "end": 339, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 335, "end": 338, "name": "DUP3", "source": 1 }, - { - "begin": 246, - "end": 339, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { - "begin": 246, - "end": 339, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 246, - "end": 339, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 246, "end": 339, "name": "JUMPDEST", "source": 1 }, - { - "begin": 364, - "end": 366, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 359, "end": 362, "name": "DUP3", "source": 1 }, - { "begin": 355, "end": 367, "name": "ADD", "source": 1 }, - { "begin": 348, "end": 367, "name": "SWAP1", "source": 1 }, - { "begin": 348, "end": 367, "name": "POP", "source": 1 }, - { "begin": 153, "end": 373, "name": "SWAP2", "source": 1 }, - { "begin": 153, "end": 373, "name": "SWAP1", "source": 1 }, - { "begin": 153, "end": 373, "name": "POP", "source": 1 }, - { - "begin": 153, - "end": 373, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 379, - "end": 744, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 379, "end": 744, "name": "JUMPDEST", "source": 1 }, - { - "begin": 379, - "end": 744, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 542, - "end": 608, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 606, - "end": 607, - "name": "PUSH", - "source": 1, - "value": "6" - }, - { "begin": 601, "end": 604, "name": "DUP4", "source": 1 }, - { - "begin": 542, - "end": 608, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 542, - "end": 608, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 542, - "end": 608, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 542, "end": 608, "name": "JUMPDEST", "source": 1 }, - { "begin": 535, "end": 608, "name": "SWAP2", "source": 1 }, - { "begin": 535, "end": 608, "name": "POP", "source": 1 }, - { - "begin": 617, - "end": 710, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { "begin": 706, "end": 709, "name": "DUP3", "source": 1 }, - { - "begin": 617, - "end": 710, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 617, - "end": 710, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 617, - "end": 710, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 617, "end": 710, "name": "JUMPDEST", "source": 1 }, - { - "begin": 735, - "end": 737, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 730, "end": 733, "name": "DUP3", "source": 1 }, - { "begin": 726, "end": 738, "name": "ADD", "source": 1 }, - { "begin": 719, "end": 738, "name": "SWAP1", "source": 1 }, - { "begin": 719, "end": 738, "name": "POP", "source": 1 }, - { "begin": 525, "end": 744, "name": "SWAP2", "source": 1 }, - { "begin": 525, "end": 744, "name": "SWAP1", "source": 1 }, - { "begin": 525, "end": 744, "name": "POP", "source": 1 }, - { - "begin": 525, - "end": 744, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 750, - "end": 1169, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 750, "end": 1169, "name": "JUMPDEST", "source": 1 }, - { - "begin": 750, - "end": 1169, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 954, - "end": 956, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 943, "end": 952, "name": "DUP3", "source": 1 }, - { "begin": 939, "end": 957, "name": "ADD", "source": 1 }, - { "begin": 931, "end": 957, "name": "SWAP1", "source": 1 }, - { "begin": 931, "end": 957, "name": "POP", "source": 1 }, - { "begin": 1003, "end": 1012, "name": "DUP2", "source": 1 }, - { "begin": 997, "end": 1001, "name": "DUP2", "source": 1 }, - { "begin": 993, "end": 1013, "name": "SUB", "source": 1 }, - { - "begin": 989, - "end": 990, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 978, "end": 987, "name": "DUP4", "source": 1 }, - { "begin": 974, "end": 991, "name": "ADD", "source": 1 }, - { "begin": 967, "end": 1014, "name": "MSTORE", "source": 1 }, - { - "begin": 1031, - "end": 1162, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { "begin": 1157, "end": 1161, "name": "DUP2", "source": 1 }, - { - "begin": 1031, - "end": 1162, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 1031, - "end": 1162, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1031, - "end": 1162, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 1031, "end": 1162, "name": "JUMPDEST", "source": 1 }, - { "begin": 1023, "end": 1162, "name": "SWAP1", "source": 1 }, - { "begin": 1023, "end": 1162, "name": "POP", "source": 1 }, - { "begin": 921, "end": 1169, "name": "SWAP2", "source": 1 }, - { "begin": 921, "end": 1169, "name": "SWAP1", "source": 1 }, - { "begin": 921, "end": 1169, "name": "POP", "source": 1 }, - { - "begin": 921, - "end": 1169, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1175, - "end": 1594, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 1175, "end": 1594, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1175, - "end": 1594, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1379, - "end": 1381, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1368, "end": 1377, "name": "DUP3", "source": 1 }, - { "begin": 1364, "end": 1382, "name": "ADD", "source": 1 }, - { "begin": 1356, "end": 1382, "name": "SWAP1", "source": 1 }, - { "begin": 1356, "end": 1382, "name": "POP", "source": 1 }, - { "begin": 1428, "end": 1437, "name": "DUP2", "source": 1 }, - { "begin": 1422, "end": 1426, "name": "DUP2", "source": 1 }, - { "begin": 1418, "end": 1438, "name": "SUB", "source": 1 }, - { - "begin": 1414, - "end": 1415, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1403, "end": 1412, "name": "DUP4", "source": 1 }, - { "begin": 1399, "end": 1416, "name": "ADD", "source": 1 }, - { "begin": 1392, "end": 1439, "name": "MSTORE", "source": 1 }, - { - "begin": 1456, - "end": 1587, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { "begin": 1582, "end": 1586, "name": "DUP2", "source": 1 }, - { - "begin": 1456, - "end": 1587, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 1456, - "end": 1587, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1456, - "end": 1587, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 1456, "end": 1587, "name": "JUMPDEST", "source": 1 }, - { "begin": 1448, "end": 1587, "name": "SWAP1", "source": 1 }, - { "begin": 1448, "end": 1587, "name": "POP", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "SWAP2", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "SWAP1", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "POP", "source": 1 }, - { - "begin": 1346, - "end": 1594, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1600, - "end": 1769, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 1600, "end": 1769, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1600, - "end": 1769, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1718, "end": 1724, "name": "DUP3", "source": 1 }, - { "begin": 1713, "end": 1716, "name": "DUP3", "source": 1 }, - { "begin": 1706, "end": 1725, "name": "MSTORE", "source": 1 }, - { - "begin": 1758, - "end": 1762, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1753, "end": 1756, "name": "DUP3", "source": 1 }, - { "begin": 1749, "end": 1763, "name": "ADD", "source": 1 }, - { "begin": 1734, "end": 1763, "name": "SWAP1", "source": 1 }, - { "begin": 1734, "end": 1763, "name": "POP", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "SWAP3", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "SWAP2", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, - { - "begin": 1696, - "end": 1769, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1775, - "end": 1955, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 1775, "end": 1955, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1915, - "end": 1947, - "name": "PUSH", - "source": 1, - "value": "656C6C6970746963206375727665206164646974696F6E206661696C65640000" - }, - { - "begin": 1911, - "end": 1912, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1903, "end": 1909, "name": "DUP3", "source": 1 }, - { "begin": 1899, "end": 1913, "name": "ADD", "source": 1 }, - { "begin": 1892, "end": 1948, "name": "MSTORE", "source": 1 }, - { "begin": 1881, "end": 1955, "name": "POP", "source": 1 }, - { - "begin": 1881, - "end": 1955, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1961, - "end": 2117, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 1961, "end": 2117, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2101, - "end": 2109, - "name": "PUSH", - "source": 1, - "value": "6661696C65640000000000000000000000000000000000000000000000000000" - }, - { - "begin": 2097, - "end": 2098, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2089, "end": 2095, "name": "DUP3", "source": 1 }, - { "begin": 2085, "end": 2099, "name": "ADD", "source": 1 }, - { "begin": 2078, "end": 2110, "name": "MSTORE", "source": 1 }, - { "begin": 2067, "end": 2117, "name": "POP", "source": 1 }, - { - "begin": 2067, - "end": 2117, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 34, - "end": 1326, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 34, "end": 1326, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1326, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1326, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220a18633c4ec2f5fd19918720cc9181bf53e954372785d2b34c64298c5275b4d5264736f6c63430008030033", - ".code": [ - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1326, "name": "MSTORE", "source": 0 }, - { - "begin": 34, - "end": 1326, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1326, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1326, "name": "REVERT", "source": 0 } - ] - } - } - }, - "methodIdentifiers": {} - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Addition\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa69c6a43cafc5dee64bc54ce2a53939c8a8e4f352073e190d2d966c2776ce646\",\"urls\":[\"bzz-raw://5349651b4604d8e14aefaefb5c3dd7cc9f18250cc2e405afb196f1d932cfc602\",\"dweb:/ipfs/QmRqKv4ehqib45LwVT7EQZfm6vn7zjk8AwJiSDNL1ubhtb\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract Bn128Addition{\n constructor() {\n bool success;\n uint256[4] memory input = [\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703,\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915,\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9,\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x06 id of the bn256Add precompile\n // 0 number of ether to transfer\n // 128 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x06, 0, input, 128, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7,\n \"failed\");\n require(\n result[1] ==\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204,\n \"failed\");\n }\n }" -} diff --git a/tests/contracts/compiled/Bn128Multiply.json b/tests/contracts/compiled/Bn128Multiply.json deleted file mode 100644 index 23cee13b64..0000000000 --- a/tests/contracts/compiled/Bn128Multiply.json +++ /dev/null @@ -1,2059 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1223 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":94:106 bool success */\n 0x00\n /* \"main.sol\":120:143 uint256[3] memory input */\n dup1\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n mload(0x40)\n dup1\n 0x60\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":160:226 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":240:306 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6 */\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":320:386 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 */\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n /* \"main.sol\":120:400 uint256[3] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":414:438 uint256[2] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":818:820 64 */\n 0x40\n /* \"main.sol\":810:816 result */\n dup2\n /* \"main.sol\":806:808 96 */\n 0x60\n /* \"main.sol\":799:804 input */\n dup5\n /* \"main.sol\":796:797 0 */\n 0x00\n /* \"main.sol\":790:794 0x07 */\n 0x07\n /* \"main.sol\":786:787 0 */\n 0x00\n /* \"main.sol\":782:788 not(0) */\n not\n /* \"main.sol\":777:821 call(not(0), 0x07, 0, input, 96, result, 64) */\n call\n /* \"main.sol\":766:821 success := call(not(0), 0x07, 0, input, 96, result, 64) */\n swap3\n pop\n /* \"main.sol\":856:863 success */\n dup3\n /* \"main.sol\":848:898 require(success, \"elliptic curve addition failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":966:1032 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":937:943 result */\n dup2\n /* \"main.sol\":944:945 0 */\n 0x00\n /* \"main.sol\":937:946 result[0] */\n 0x02\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":937:1032 result[0] ==... */\n eq\n /* \"main.sol\":912:1055 require(... */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":1123:1189 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451 */\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451\n /* \"main.sol\":1094:1100 result */\n dup2\n /* \"main.sol\":1101:1102 1 */\n 0x01\n /* \"main.sol\":1094:1103 result[1] */\n 0x02\n dup2\n lt\n tag_13\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_13:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1094:1189 result[1] ==... */\n eq\n /* \"main.sol\":1069:1212 require(... */\n tag_14\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_15\n swap1\n tag_12\n jump\t// in\ntag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_14:\n /* \"main.sol\":66:1223 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n jump(tag_16)\ntag_5:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:373 */\ntag_18:\n 0x00\n /* \"#utility.yul\":170:237 */\n tag_20\n /* \"#utility.yul\":234:236 */\n 0x1e\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:237 */\n tag_21\n jump\t// in\ntag_20:\n /* \"#utility.yul\":163:237 */\n swap2\n pop\n /* \"#utility.yul\":246:339 */\n tag_22\n /* \"#utility.yul\":335:338 */\n dup3\n /* \"#utility.yul\":246:339 */\n tag_23\n jump\t// in\ntag_22:\n /* \"#utility.yul\":364:366 */\n 0x20\n /* \"#utility.yul\":359:362 */\n dup3\n /* \"#utility.yul\":355:367 */\n add\n /* \"#utility.yul\":348:367 */\n swap1\n pop\n /* \"#utility.yul\":153:373 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":379:744 */\ntag_24:\n 0x00\n /* \"#utility.yul\":542:608 */\n tag_26\n /* \"#utility.yul\":606:607 */\n 0x06\n /* \"#utility.yul\":601:604 */\n dup4\n /* \"#utility.yul\":542:608 */\n tag_21\n jump\t// in\ntag_26:\n /* \"#utility.yul\":535:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_27\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_28\n jump\t// in\ntag_27:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":525:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_8:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_30\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_18\n jump\t// in\ntag_30:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_12:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_32\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_24\n jump\t// in\ntag_32:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_21:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1955 */\ntag_23:\n /* \"#utility.yul\":1915:1947 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1948 */\n mstore\n /* \"#utility.yul\":1881:1955 */\n pop\n jump\t// out\n /* \"#utility.yul\":1961:2117 */\ntag_28:\n /* \"#utility.yul\":2101:2109 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2089:2095 */\n dup3\n /* \"#utility.yul\":2085:2099 */\n add\n /* \"#utility.yul\":2078:2110 */\n mstore\n /* \"#utility.yul\":2067:2117 */\n pop\n jump\t// out\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\ntag_16:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1229 contract Bn128Multiply{... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2120:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "153:220:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "163:74:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "229:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:2:1", - "type": "", - "value": "30" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "170:58:1" - }, - "nodeType": "YulFunctionCall", - "src": "170:67:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "163:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "335:3:1" - } - ], - "functionName": { - "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", - "nodeType": "YulIdentifier", - "src": "246:88:1" - }, - "nodeType": "YulFunctionCall", - "src": "246:93:1" - }, - "nodeType": "YulExpressionStatement", - "src": "246:93:1" - }, - { - "nodeType": "YulAssignment", - "src": "348:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "359:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "364:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "355:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "355:12:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "348:3:1" - } - ] - } - ] - }, - "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "141:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "149:3:1", - "type": "" - } - ], - "src": "7:366:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "525:219:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "535:73:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "601:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "606:1:1", - "type": "", - "value": "6" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "542:58:1" - }, - "nodeType": "YulFunctionCall", - "src": "542:66:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "535:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "706:3:1" - } - ], - "functionName": { - "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", - "nodeType": "YulIdentifier", - "src": "617:88:1" - }, - "nodeType": "YulFunctionCall", - "src": "617:93:1" - }, - "nodeType": "YulExpressionStatement", - "src": "617:93:1" - }, - { - "nodeType": "YulAssignment", - "src": "719:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "730:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "735:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "726:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "726:12:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "719:3:1" - } - ] - } - ] - }, - "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "513:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "521:3:1", - "type": "" - } - ], - "src": "379:365:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "921:248:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "931:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "943:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "954:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "939:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "939:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "931:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "978:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "974:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "974:17:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "997:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1003:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "993:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "993:20:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "967:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "967:47:1" - }, - "nodeType": "YulExpressionStatement", - "src": "967:47:1" - }, - { - "nodeType": "YulAssignment", - "src": "1023:139:1", - "value": { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1157:4:1" - } - ], - "functionName": { - "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "1031:124:1" - }, - "nodeType": "YulFunctionCall", - "src": "1031:131:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1023:4:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "901:9:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "916:4:1", - "type": "" - } - ], - "src": "750:419:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1346:248:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1356:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1368:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1379:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1364:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1364:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1356:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1403:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1414:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1399:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1399:17:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1422:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1428:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1418:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1418:20:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1392:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1392:47:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1392:47:1" - }, - { - "nodeType": "YulAssignment", - "src": "1448:139:1", - "value": { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1582:4:1" - } - ], - "functionName": { - "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "1456:124:1" - }, - "nodeType": "YulFunctionCall", - "src": "1456:131:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1448:4:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1326:9:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1341:4:1", - "type": "" - } - ], - "src": "1175:419:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1696:73:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1713:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1718:6:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1706:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1706:19:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1706:19:1" - }, - { - "nodeType": "YulAssignment", - "src": "1734:29:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1753:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1758:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1749:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1749:14:1" - }, - "variableNames": [ - { - "name": "updated_pos", - "nodeType": "YulIdentifier", - "src": "1734:11:1" - } - ] - } - ] - }, - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1668:3:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1673:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "updated_pos", - "nodeType": "YulTypedName", - "src": "1684:11:1", - "type": "" - } - ], - "src": "1600:169:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1881:74:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1903:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1911:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1899:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1899:14:1" - }, - { - "kind": "string", - "nodeType": "YulLiteral", - "src": "1915:32:1", - "type": "", - "value": "elliptic curve addition failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1892:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1892:56:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1892:56:1" - } - ] - }, - "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1873:6:1", - "type": "" - } - ], - "src": "1775:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2067:50:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2089:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2097:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2085:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2085:14:1" - }, - { - "kind": "string", - "nodeType": "YulLiteral", - "src": "2101:8:1", - "type": "", - "value": "failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2078:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2078:32:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2078:32:1" - } - ] - }, - "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2059:6:1", - "type": "" - } - ], - "src": "1961:156:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610099610231565b60408160608460006007600019f19250826100e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100e090610299565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610144577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610180906102b9565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451816001600281106101e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015114610229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610220906102b9565b60405180910390fd5b50505061033c565b6040518060400160405280600290602082028036833780820191505090505090565b6000610260601e836102d9565b915061026b826102ea565b602082019050919050565b60006102836006836102d9565b915061028e82610313565b602082019050919050565b600060208201905081810360008301526102b281610253565b9050919050565b600060208201905081810360008301526102d281610276565b9050919050565b600082825260208201905092915050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b603f8061034a6000396000f3fe6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000 DUP2 MSTORE POP SWAP1 POP PUSH2 0x99 PUSH2 0x231 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x60 DUP5 PUSH1 0x0 PUSH1 0x7 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0xE9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xE0 SWAP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x144 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x189 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x180 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x1E4 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x229 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x220 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x33C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x260 PUSH1 0x1E DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x26B DUP3 PUSH2 0x2EA JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x283 PUSH1 0x6 DUP4 PUSH2 0x2D9 JUMP JUMPDEST SWAP2 POP PUSH2 0x28E DUP3 PUSH2 0x313 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2B2 DUP2 PUSH2 0x253 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2D2 DUP2 PUSH2 0x276 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x34A PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "34:1195:0:-:0;;;66:1157;;;;;;;;;;94:12;120:23;:280;;;;;;;;160:66;120:280;;;;240:66;120:280;;;;320:66;120:280;;;;;414:24;;:::i;:::-;818:2;810:6;806:2;799:5;796:1;790:4;786:1;782:6;777:44;766:55;;856:7;848:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;966:66;937:6;944:1;937:9;;;;;;;;;;;;;;;;;;;:95;912:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1123:66;1094:6;1101:1;1094:9;;;;;;;;;;;;;;;;;;;:95;1069:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1157;;;34:1195;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:366:1:-;;170:67;234:2;229:3;170:67;:::i;:::-;163:74;;246:93;335:3;246:93;:::i;:::-;364:2;359:3;355:12;348:19;;153:220;;;:::o;379:365::-;;542:66;606:1;601:3;542:66;:::i;:::-;535:73;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;525:219;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:180::-;1915:32;1911:1;1903:6;1899:14;1892:56;1881:74;:::o;1961:156::-;2101:8;2097:1;2089:6;2085:14;2078:32;2067:50;:::o;34:1195:0:-;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP11 SWAP8 0xBC SWAP8 0xD5 0xE3 LOG3 PUSH24 0xE8298E3B3A72B24963ABB30BC27BB2266AE137B12AAC8CC9 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "34:1195:0:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "infinite", - "totalCost": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1229, "name": "MSTORE", "source": 0 }, - { "begin": 66, "end": 1223, "name": "CALLVALUE", "source": 0 }, - { "begin": 66, "end": 1223, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 1223, "name": "ISZERO", "source": 0 }, - { - "begin": 66, - "end": 1223, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 66, "end": 1223, "name": "JUMPI", "source": 0 }, - { - "begin": 66, - "end": 1223, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 66, "end": 1223, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 1223, "name": "REVERT", "source": 0 }, - { - "begin": 66, - "end": 1223, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 66, "end": 1223, "name": "JUMPDEST", "source": 0 }, - { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, - { - "begin": 94, - "end": 106, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 120, "end": 143, "name": "DUP1", "source": 0 }, - { - "begin": 120, - "end": 400, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 120, "end": 400, "name": "MLOAD", "source": 0 }, - { "begin": 120, "end": 400, "name": "DUP1", "source": 0 }, - { - "begin": 120, - "end": 400, - "name": "PUSH", - "source": 0, - "value": "60" - }, - { "begin": 120, "end": 400, "name": "ADD", "source": 0 }, - { - "begin": 120, - "end": 400, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, - { "begin": 120, "end": 400, "name": "DUP1", "source": 0 }, - { - "begin": 160, - "end": 226, - "name": "PUSH", - "source": 0, - "value": "1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3" - }, - { "begin": 120, "end": 400, "name": "DUP2", "source": 0 }, - { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, - { - "begin": 120, - "end": 400, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 120, "end": 400, "name": "ADD", "source": 0 }, - { - "begin": 240, - "end": 306, - "name": "PUSH", - "source": 0, - "value": "1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6" - }, - { "begin": 120, "end": 400, "name": "DUP2", "source": 0 }, - { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, - { - "begin": 120, - "end": 400, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 120, "end": 400, "name": "ADD", "source": 0 }, - { - "begin": 320, - "end": 386, - "name": "PUSH", - "source": 0, - "value": "30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000" - }, - { "begin": 120, "end": 400, "name": "DUP2", "source": 0 }, - { "begin": 120, "end": 400, "name": "MSTORE", "source": 0 }, - { "begin": 120, "end": 400, "name": "POP", "source": 0 }, - { "begin": 120, "end": 400, "name": "SWAP1", "source": 0 }, - { "begin": 120, "end": 400, "name": "POP", "source": 0 }, - { - "begin": 414, - "end": 438, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 414, - "end": 438, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 414, - "end": 438, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 414, - "end": 438, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 414, "end": 438, "name": "JUMPDEST", "source": 0 }, - { - "begin": 818, - "end": 820, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 810, "end": 816, "name": "DUP2", "source": 0 }, - { - "begin": 806, - "end": 808, - "name": "PUSH", - "source": 0, - "value": "60" - }, - { "begin": 799, "end": 804, "name": "DUP5", "source": 0 }, - { - "begin": 796, - "end": 797, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 790, - "end": 794, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { - "begin": 786, - "end": 787, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 782, "end": 788, "name": "NOT", "source": 0 }, - { "begin": 777, "end": 821, "name": "CALL", "source": 0 }, - { "begin": 766, "end": 821, "name": "SWAP3", "source": 0 }, - { "begin": 766, "end": 821, "name": "POP", "source": 0 }, - { "begin": 856, "end": 863, "name": "DUP3", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 848, "end": 898, "name": "JUMPI", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 848, "end": 898, "name": "MLOAD", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 848, "end": 898, "name": "DUP2", "source": 0 }, - { "begin": 848, "end": 898, "name": "MSTORE", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 848, "end": 898, "name": "ADD", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 848, "end": 898, "name": "SWAP1", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 848, - "end": 898, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 848, - "end": 898, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 848, "end": 898, "name": "JUMPDEST", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 848, "end": 898, "name": "MLOAD", "source": 0 }, - { "begin": 848, "end": 898, "name": "DUP1", "source": 0 }, - { "begin": 848, "end": 898, "name": "SWAP2", "source": 0 }, - { "begin": 848, "end": 898, "name": "SUB", "source": 0 }, - { "begin": 848, "end": 898, "name": "SWAP1", "source": 0 }, - { "begin": 848, "end": 898, "name": "REVERT", "source": 0 }, - { - "begin": 848, - "end": 898, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 848, "end": 898, "name": "JUMPDEST", "source": 0 }, - { - "begin": 966, - "end": 1032, - "name": "PUSH", - "source": 0, - "value": "1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3" - }, - { "begin": 937, "end": 943, "name": "DUP2", "source": 0 }, - { - "begin": 944, - "end": 945, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 937, "end": 946, "name": "DUP2", "source": 0 }, - { "begin": 937, "end": 946, "name": "LT", "source": 0 }, - { - "begin": 937, - "end": 946, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 937, "end": 946, "name": "JUMPI", "source": 0 }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 937, "end": 946, "name": "MSTORE", "source": 0 }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "32" - }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 937, "end": 946, "name": "MSTORE", "source": 0 }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "24" - }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 937, "end": 946, "name": "REVERT", "source": 0 }, - { - "begin": 937, - "end": 946, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 937, "end": 946, "name": "JUMPDEST", "source": 0 }, - { - "begin": 937, - "end": 946, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 937, "end": 946, "name": "MUL", "source": 0 }, - { "begin": 937, "end": 946, "name": "ADD", "source": 0 }, - { "begin": 937, "end": 946, "name": "MLOAD", "source": 0 }, - { "begin": 937, "end": 1032, "name": "EQ", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 912, "end": 1055, "name": "JUMPI", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 912, "end": 1055, "name": "MLOAD", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 912, "end": 1055, "name": "DUP2", "source": 0 }, - { "begin": 912, "end": 1055, "name": "MSTORE", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 912, "end": 1055, "name": "ADD", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 912, "end": 1055, "name": "SWAP1", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 912, - "end": 1055, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 912, - "end": 1055, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 912, "end": 1055, "name": "JUMPDEST", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 912, "end": 1055, "name": "MLOAD", "source": 0 }, - { "begin": 912, "end": 1055, "name": "DUP1", "source": 0 }, - { "begin": 912, "end": 1055, "name": "SWAP2", "source": 0 }, - { "begin": 912, "end": 1055, "name": "SUB", "source": 0 }, - { "begin": 912, "end": 1055, "name": "SWAP1", "source": 0 }, - { "begin": 912, "end": 1055, "name": "REVERT", "source": 0 }, - { - "begin": 912, - "end": 1055, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 912, "end": 1055, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1123, - "end": 1189, - "name": "PUSH", - "source": 0, - "value": "163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451" - }, - { "begin": 1094, "end": 1100, "name": "DUP2", "source": 0 }, - { - "begin": 1101, - "end": 1102, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 1094, "end": 1103, "name": "DUP2", "source": 0 }, - { "begin": 1094, "end": 1103, "name": "LT", "source": 0 }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 1094, "end": 1103, "name": "JUMPI", "source": 0 }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1094, "end": 1103, "name": "MSTORE", "source": 0 }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "32" - }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1094, "end": 1103, "name": "MSTORE", "source": 0 }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "24" - }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1094, "end": 1103, "name": "REVERT", "source": 0 }, - { - "begin": 1094, - "end": 1103, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 1094, "end": 1103, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1094, - "end": 1103, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1094, "end": 1103, "name": "MUL", "source": 0 }, - { "begin": 1094, "end": 1103, "name": "ADD", "source": 0 }, - { "begin": 1094, "end": 1103, "name": "MLOAD", "source": 0 }, - { "begin": 1094, "end": 1189, "name": "EQ", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 1069, "end": 1212, "name": "JUMPI", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1069, "end": 1212, "name": "MLOAD", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 1069, "end": 1212, "name": "DUP2", "source": 0 }, - { "begin": 1069, "end": 1212, "name": "MSTORE", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1069, "end": 1212, "name": "ADD", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 1069, "end": 1212, "name": "SWAP1", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 1069, - "end": 1212, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1069, - "end": 1212, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 1069, "end": 1212, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1069, "end": 1212, "name": "MLOAD", "source": 0 }, - { "begin": 1069, "end": 1212, "name": "DUP1", "source": 0 }, - { "begin": 1069, "end": 1212, "name": "SWAP2", "source": 0 }, - { "begin": 1069, "end": 1212, "name": "SUB", "source": 0 }, - { "begin": 1069, "end": 1212, "name": "SWAP1", "source": 0 }, - { "begin": 1069, "end": 1212, "name": "REVERT", "source": 0 }, - { - "begin": 1069, - "end": 1212, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 1069, "end": 1212, "name": "JUMPDEST", "source": 0 }, - { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, - { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, - { "begin": 66, "end": 1223, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { "begin": 34, "end": 1229, "name": "JUMP", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 34, "end": 1229, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1229, "name": "MLOAD", "source": 0 }, - { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1229, "name": "ADD", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1229, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 1229, "name": "SWAP1", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 34, "end": 1229, "name": "DUP3", "source": 0 }, - { "begin": 34, "end": 1229, "name": "MUL", "source": 0 }, - { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1229, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 1229, "name": "DUP4", "source": 0 }, - { "begin": 34, "end": 1229, "name": "CALLDATACOPY", "source": 0 }, - { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1229, "name": "DUP3", "source": 0 }, - { "begin": 34, "end": 1229, "name": "ADD", "source": 0 }, - { "begin": 34, "end": 1229, "name": "SWAP2", "source": 0 }, - { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1229, "name": "SWAP1", "source": 0 }, - { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1229, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1229, "name": "SWAP1", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { "begin": 7, "end": 373, "name": "tag", "source": 1, "value": "18" }, - { "begin": 7, "end": 373, "name": "JUMPDEST", "source": 1 }, - { "begin": 7, "end": 373, "name": "PUSH", "source": 1, "value": "0" }, - { - "begin": 170, - "end": 237, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 234, - "end": 236, - "name": "PUSH", - "source": 1, - "value": "1E" - }, - { "begin": 229, "end": 232, "name": "DUP4", "source": 1 }, - { - "begin": 170, - "end": 237, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 170, - "end": 237, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 170, - "end": 237, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 170, "end": 237, "name": "JUMPDEST", "source": 1 }, - { "begin": 163, "end": 237, "name": "SWAP2", "source": 1 }, - { "begin": 163, "end": 237, "name": "POP", "source": 1 }, - { - "begin": 246, - "end": 339, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 335, "end": 338, "name": "DUP3", "source": 1 }, - { - "begin": 246, - "end": 339, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { - "begin": 246, - "end": 339, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 246, - "end": 339, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 246, "end": 339, "name": "JUMPDEST", "source": 1 }, - { - "begin": 364, - "end": 366, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 359, "end": 362, "name": "DUP3", "source": 1 }, - { "begin": 355, "end": 367, "name": "ADD", "source": 1 }, - { "begin": 348, "end": 367, "name": "SWAP1", "source": 1 }, - { "begin": 348, "end": 367, "name": "POP", "source": 1 }, - { "begin": 153, "end": 373, "name": "SWAP2", "source": 1 }, - { "begin": 153, "end": 373, "name": "SWAP1", "source": 1 }, - { "begin": 153, "end": 373, "name": "POP", "source": 1 }, - { - "begin": 153, - "end": 373, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 379, - "end": 744, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 379, "end": 744, "name": "JUMPDEST", "source": 1 }, - { - "begin": 379, - "end": 744, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 542, - "end": 608, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 606, - "end": 607, - "name": "PUSH", - "source": 1, - "value": "6" - }, - { "begin": 601, "end": 604, "name": "DUP4", "source": 1 }, - { - "begin": 542, - "end": 608, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 542, - "end": 608, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 542, - "end": 608, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 542, "end": 608, "name": "JUMPDEST", "source": 1 }, - { "begin": 535, "end": 608, "name": "SWAP2", "source": 1 }, - { "begin": 535, "end": 608, "name": "POP", "source": 1 }, - { - "begin": 617, - "end": 710, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { "begin": 706, "end": 709, "name": "DUP3", "source": 1 }, - { - "begin": 617, - "end": 710, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 617, - "end": 710, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 617, - "end": 710, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 617, "end": 710, "name": "JUMPDEST", "source": 1 }, - { - "begin": 735, - "end": 737, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 730, "end": 733, "name": "DUP3", "source": 1 }, - { "begin": 726, "end": 738, "name": "ADD", "source": 1 }, - { "begin": 719, "end": 738, "name": "SWAP1", "source": 1 }, - { "begin": 719, "end": 738, "name": "POP", "source": 1 }, - { "begin": 525, "end": 744, "name": "SWAP2", "source": 1 }, - { "begin": 525, "end": 744, "name": "SWAP1", "source": 1 }, - { "begin": 525, "end": 744, "name": "POP", "source": 1 }, - { - "begin": 525, - "end": 744, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 750, - "end": 1169, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 750, "end": 1169, "name": "JUMPDEST", "source": 1 }, - { - "begin": 750, - "end": 1169, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 954, - "end": 956, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 943, "end": 952, "name": "DUP3", "source": 1 }, - { "begin": 939, "end": 957, "name": "ADD", "source": 1 }, - { "begin": 931, "end": 957, "name": "SWAP1", "source": 1 }, - { "begin": 931, "end": 957, "name": "POP", "source": 1 }, - { "begin": 1003, "end": 1012, "name": "DUP2", "source": 1 }, - { "begin": 997, "end": 1001, "name": "DUP2", "source": 1 }, - { "begin": 993, "end": 1013, "name": "SUB", "source": 1 }, - { - "begin": 989, - "end": 990, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 978, "end": 987, "name": "DUP4", "source": 1 }, - { "begin": 974, "end": 991, "name": "ADD", "source": 1 }, - { "begin": 967, "end": 1014, "name": "MSTORE", "source": 1 }, - { - "begin": 1031, - "end": 1162, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { "begin": 1157, "end": 1161, "name": "DUP2", "source": 1 }, - { - "begin": 1031, - "end": 1162, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 1031, - "end": 1162, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1031, - "end": 1162, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 1031, "end": 1162, "name": "JUMPDEST", "source": 1 }, - { "begin": 1023, "end": 1162, "name": "SWAP1", "source": 1 }, - { "begin": 1023, "end": 1162, "name": "POP", "source": 1 }, - { "begin": 921, "end": 1169, "name": "SWAP2", "source": 1 }, - { "begin": 921, "end": 1169, "name": "SWAP1", "source": 1 }, - { "begin": 921, "end": 1169, "name": "POP", "source": 1 }, - { - "begin": 921, - "end": 1169, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1175, - "end": 1594, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 1175, "end": 1594, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1175, - "end": 1594, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1379, - "end": 1381, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1368, "end": 1377, "name": "DUP3", "source": 1 }, - { "begin": 1364, "end": 1382, "name": "ADD", "source": 1 }, - { "begin": 1356, "end": 1382, "name": "SWAP1", "source": 1 }, - { "begin": 1356, "end": 1382, "name": "POP", "source": 1 }, - { "begin": 1428, "end": 1437, "name": "DUP2", "source": 1 }, - { "begin": 1422, "end": 1426, "name": "DUP2", "source": 1 }, - { "begin": 1418, "end": 1438, "name": "SUB", "source": 1 }, - { - "begin": 1414, - "end": 1415, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1403, "end": 1412, "name": "DUP4", "source": 1 }, - { "begin": 1399, "end": 1416, "name": "ADD", "source": 1 }, - { "begin": 1392, "end": 1439, "name": "MSTORE", "source": 1 }, - { - "begin": 1456, - "end": 1587, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { "begin": 1582, "end": 1586, "name": "DUP2", "source": 1 }, - { - "begin": 1456, - "end": 1587, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 1456, - "end": 1587, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1456, - "end": 1587, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 1456, "end": 1587, "name": "JUMPDEST", "source": 1 }, - { "begin": 1448, "end": 1587, "name": "SWAP1", "source": 1 }, - { "begin": 1448, "end": 1587, "name": "POP", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "SWAP2", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "SWAP1", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "POP", "source": 1 }, - { - "begin": 1346, - "end": 1594, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1600, - "end": 1769, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 1600, "end": 1769, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1600, - "end": 1769, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1718, "end": 1724, "name": "DUP3", "source": 1 }, - { "begin": 1713, "end": 1716, "name": "DUP3", "source": 1 }, - { "begin": 1706, "end": 1725, "name": "MSTORE", "source": 1 }, - { - "begin": 1758, - "end": 1762, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1753, "end": 1756, "name": "DUP3", "source": 1 }, - { "begin": 1749, "end": 1763, "name": "ADD", "source": 1 }, - { "begin": 1734, "end": 1763, "name": "SWAP1", "source": 1 }, - { "begin": 1734, "end": 1763, "name": "POP", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "SWAP3", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "SWAP2", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, - { - "begin": 1696, - "end": 1769, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1775, - "end": 1955, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 1775, "end": 1955, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1915, - "end": 1947, - "name": "PUSH", - "source": 1, - "value": "656C6C6970746963206375727665206164646974696F6E206661696C65640000" - }, - { - "begin": 1911, - "end": 1912, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1903, "end": 1909, "name": "DUP3", "source": 1 }, - { "begin": 1899, "end": 1913, "name": "ADD", "source": 1 }, - { "begin": 1892, "end": 1948, "name": "MSTORE", "source": 1 }, - { "begin": 1881, "end": 1955, "name": "POP", "source": 1 }, - { - "begin": 1881, - "end": 1955, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1961, - "end": 2117, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 1961, "end": 2117, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2101, - "end": 2109, - "name": "PUSH", - "source": 1, - "value": "6661696C65640000000000000000000000000000000000000000000000000000" - }, - { - "begin": 2097, - "end": 2098, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2089, "end": 2095, "name": "DUP3", "source": 1 }, - { "begin": 2085, "end": 2099, "name": "ADD", "source": 1 }, - { "begin": 2078, "end": 2110, "name": "MSTORE", "source": 1 }, - { "begin": 2067, "end": 2117, "name": "POP", "source": 1 }, - { - "begin": 2067, - "end": 2117, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 34, - "end": 1229, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 34, "end": 1229, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1229, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1229, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033", - ".code": [ - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1229, "name": "MSTORE", "source": 0 }, - { - "begin": 34, - "end": 1229, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1229, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1229, "name": "REVERT", "source": 0 } - ] - } - } - }, - "methodIdentifiers": {} - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Multiply\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x0866695f85e6c1a4e1a8cb93dfeef35e2b9269877a1562fbd3e145c2e75e3395\",\"urls\":[\"bzz-raw://84a275684a19c387b2ffd04d1b4df333ff4c72127508ea5a3604b35ccd21492e\",\"dweb:/ipfs/QmQmBMj75rX9QqPYae9GiDacPuGieUfXsYjZavjPvkrRH2\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract Bn128Multiply{\n constructor() {\n bool success;\n uint256[3] memory input = [\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6,\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x07 id of the bn256Mul precompile\n // 0 number of ether to transfer\n // 96 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x07, 0, input, 96, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n \"failed\");\n require(\n result[1] ==\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451,\n \"failed\");\n }\n }" -} diff --git a/tests/contracts/compiled/Bn128Pairing.json b/tests/contracts/compiled/Bn128Pairing.json deleted file mode 100644 index 02c6401091..0000000000 --- a/tests/contracts/compiled/Bn128Pairing.json +++ /dev/null @@ -1,2039 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":66:1702 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":90:114 uint256[12] memory input */\n 0x00\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n mload(0x40)\n dup1\n 0x0180\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":131:197 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02 */\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":211:277 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84 */\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":291:357 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee */\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":371:437 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f */\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":451:517 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237 */\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":531:597 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f */\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":611:677 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9 */\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":691:757 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1 */\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":771:837 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 */\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":851:917 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed */\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":931:997 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b */\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":1011:1077 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa */\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n /* \"main.sol\":90:1087 uint256[12] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1097:1121 uint256[1] memory result */\n tag_4\n tag_5\n jump\t// in\ntag_4:\n /* \"main.sol\":1131:1143 bool success */\n 0x00\n /* \"main.sol\":1577:1579 32 */\n 0x20\n /* \"main.sol\":1569:1575 result */\n dup3\n /* \"main.sol\":1564:1567 384 */\n 0x0180\n /* \"main.sol\":1557:1562 input */\n dup6\n /* \"main.sol\":1554:1555 0 */\n 0x00\n /* \"main.sol\":1548:1552 0x08 */\n 0x08\n /* \"main.sol\":1541:1545 2000 */\n 0x07d0\n /* \"main.sol\":1534:1539 gas() */\n gas\n /* \"main.sol\":1530:1546 sub(gas(), 2000) */\n sub\n /* \"main.sol\":1525:1580 call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n call\n /* \"main.sol\":1514:1580 success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n swap1\n pop\n /* \"main.sol\":1607:1614 success */\n dup1\n /* \"main.sol\":1599:1648 require(success, \"elliptic curve pairing failed\") */\n tag_6\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_7\n swap1\n tag_8\n jump\t// in\ntag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_6:\n /* \"main.sol\":1679:1680 1 */\n 0x01\n /* \"main.sol\":1666:1672 result */\n dup3\n /* \"main.sol\":1673:1674 0 */\n 0x00\n /* \"main.sol\":1666:1675 result[0] */\n 0x01\n dup2\n lt\n tag_9\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x32)\n revert(0x00, 0x24)\ntag_9:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1666:1680 result[0] == 1 */\n eq\n /* \"main.sol\":1658:1691 require(result[0] == 1, \"failed\") */\n tag_10\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_11\n swap1\n tag_12\n jump\t// in\ntag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\ntag_10:\n /* \"main.sol\":66:1702 constructor() {... */\n pop\n pop\n pop\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n jump(tag_13)\ntag_5:\n mload(0x40)\n dup1\n 0x20\n add\n 0x40\n mstore\n dup1\n 0x01\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:372 */\ntag_15:\n 0x00\n /* \"#utility.yul\":170:236 */\n tag_17\n /* \"#utility.yul\":234:235 */\n 0x06\n /* \"#utility.yul\":229:232 */\n dup4\n /* \"#utility.yul\":170:236 */\n tag_18\n jump\t// in\ntag_17:\n /* \"#utility.yul\":163:236 */\n swap2\n pop\n /* \"#utility.yul\":245:338 */\n tag_19\n /* \"#utility.yul\":334:337 */\n dup3\n /* \"#utility.yul\":245:338 */\n tag_20\n jump\t// in\ntag_19:\n /* \"#utility.yul\":363:365 */\n 0x20\n /* \"#utility.yul\":358:361 */\n dup3\n /* \"#utility.yul\":354:366 */\n add\n /* \"#utility.yul\":347:366 */\n swap1\n pop\n /* \"#utility.yul\":153:372 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":378:744 */\ntag_21:\n 0x00\n /* \"#utility.yul\":541:608 */\n tag_23\n /* \"#utility.yul\":605:607 */\n 0x1d\n /* \"#utility.yul\":600:603 */\n dup4\n /* \"#utility.yul\":541:608 */\n tag_18\n jump\t// in\ntag_23:\n /* \"#utility.yul\":534:608 */\n swap2\n pop\n /* \"#utility.yul\":617:710 */\n tag_24\n /* \"#utility.yul\":706:709 */\n dup3\n /* \"#utility.yul\":617:710 */\n tag_25\n jump\t// in\ntag_24:\n /* \"#utility.yul\":735:737 */\n 0x20\n /* \"#utility.yul\":730:733 */\n dup3\n /* \"#utility.yul\":726:738 */\n add\n /* \"#utility.yul\":719:738 */\n swap1\n pop\n /* \"#utility.yul\":524:744 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":750:1169 */\ntag_12:\n 0x00\n /* \"#utility.yul\":954:956 */\n 0x20\n /* \"#utility.yul\":943:952 */\n dup3\n /* \"#utility.yul\":939:957 */\n add\n /* \"#utility.yul\":931:957 */\n swap1\n pop\n /* \"#utility.yul\":1003:1012 */\n dup2\n /* \"#utility.yul\":997:1001 */\n dup2\n /* \"#utility.yul\":993:1013 */\n sub\n /* \"#utility.yul\":989:990 */\n 0x00\n /* \"#utility.yul\":978:987 */\n dup4\n /* \"#utility.yul\":974:991 */\n add\n /* \"#utility.yul\":967:1014 */\n mstore\n /* \"#utility.yul\":1031:1162 */\n tag_27\n /* \"#utility.yul\":1157:1161 */\n dup2\n /* \"#utility.yul\":1031:1162 */\n tag_15\n jump\t// in\ntag_27:\n /* \"#utility.yul\":1023:1162 */\n swap1\n pop\n /* \"#utility.yul\":921:1169 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1175:1594 */\ntag_8:\n 0x00\n /* \"#utility.yul\":1379:1381 */\n 0x20\n /* \"#utility.yul\":1368:1377 */\n dup3\n /* \"#utility.yul\":1364:1382 */\n add\n /* \"#utility.yul\":1356:1382 */\n swap1\n pop\n /* \"#utility.yul\":1428:1437 */\n dup2\n /* \"#utility.yul\":1422:1426 */\n dup2\n /* \"#utility.yul\":1418:1438 */\n sub\n /* \"#utility.yul\":1414:1415 */\n 0x00\n /* \"#utility.yul\":1403:1412 */\n dup4\n /* \"#utility.yul\":1399:1416 */\n add\n /* \"#utility.yul\":1392:1439 */\n mstore\n /* \"#utility.yul\":1456:1587 */\n tag_29\n /* \"#utility.yul\":1582:1586 */\n dup2\n /* \"#utility.yul\":1456:1587 */\n tag_21\n jump\t// in\ntag_29:\n /* \"#utility.yul\":1448:1587 */\n swap1\n pop\n /* \"#utility.yul\":1346:1594 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1600:1769 */\ntag_18:\n 0x00\n /* \"#utility.yul\":1718:1724 */\n dup3\n /* \"#utility.yul\":1713:1716 */\n dup3\n /* \"#utility.yul\":1706:1725 */\n mstore\n /* \"#utility.yul\":1758:1762 */\n 0x20\n /* \"#utility.yul\":1753:1756 */\n dup3\n /* \"#utility.yul\":1749:1763 */\n add\n /* \"#utility.yul\":1734:1763 */\n swap1\n pop\n /* \"#utility.yul\":1696:1769 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1775:1931 */\ntag_20:\n /* \"#utility.yul\":1915:1923 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1911:1912 */\n 0x00\n /* \"#utility.yul\":1903:1909 */\n dup3\n /* \"#utility.yul\":1899:1913 */\n add\n /* \"#utility.yul\":1892:1924 */\n mstore\n /* \"#utility.yul\":1881:1931 */\n pop\n jump\t// out\n /* \"#utility.yul\":1937:2116 */\ntag_25:\n /* \"#utility.yul\":2077:2108 */\n 0x656c6c69707469632063757276652070616972696e67206661696c6564000000\n /* \"#utility.yul\":2073:2074 */\n 0x00\n /* \"#utility.yul\":2065:2071 */\n dup3\n /* \"#utility.yul\":2061:2075 */\n add\n /* \"#utility.yul\":2054:2109 */\n mstore\n /* \"#utility.yul\":2043:2116 */\n pop\n jump\t// out\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\ntag_13:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1708 contract Bn128Pairing {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2119:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "153:219:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "163:73:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "229:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "234:1:1", - "type": "", - "value": "6" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "170:58:1" - }, - "nodeType": "YulFunctionCall", - "src": "170:66:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "163:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "334:3:1" - } - ], - "functionName": { - "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", - "nodeType": "YulIdentifier", - "src": "245:88:1" - }, - "nodeType": "YulFunctionCall", - "src": "245:93:1" - }, - "nodeType": "YulExpressionStatement", - "src": "245:93:1" - }, - { - "nodeType": "YulAssignment", - "src": "347:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "358:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "363:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "354:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "354:12:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "347:3:1" - } - ] - } - ] - }, - "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "141:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "149:3:1", - "type": "" - } - ], - "src": "7:365:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "524:220:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "534:74:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "600:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "605:2:1", - "type": "", - "value": "29" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "541:58:1" - }, - "nodeType": "YulFunctionCall", - "src": "541:67:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "534:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "706:3:1" - } - ], - "functionName": { - "name": "store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862", - "nodeType": "YulIdentifier", - "src": "617:88:1" - }, - "nodeType": "YulFunctionCall", - "src": "617:93:1" - }, - "nodeType": "YulExpressionStatement", - "src": "617:93:1" - }, - { - "nodeType": "YulAssignment", - "src": "719:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "730:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "735:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "726:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "726:12:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "719:3:1" - } - ] - } - ] - }, - "name": "abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "512:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "520:3:1", - "type": "" - } - ], - "src": "378:366:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "921:248:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "931:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "943:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "954:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "939:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "939:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "931:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "978:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "989:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "974:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "974:17:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "997:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1003:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "993:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "993:20:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "967:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "967:47:1" - }, - "nodeType": "YulExpressionStatement", - "src": "967:47:1" - }, - { - "nodeType": "YulAssignment", - "src": "1023:139:1", - "value": { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1157:4:1" - } - ], - "functionName": { - "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "1031:124:1" - }, - "nodeType": "YulFunctionCall", - "src": "1031:131:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1023:4:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "901:9:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "916:4:1", - "type": "" - } - ], - "src": "750:419:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1346:248:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1356:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1368:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1379:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1364:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1364:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1356:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1403:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1414:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1399:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1399:17:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1422:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1428:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "1418:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1418:20:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1392:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1392:47:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1392:47:1" - }, - { - "nodeType": "YulAssignment", - "src": "1448:139:1", - "value": { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1582:4:1" - } - ], - "functionName": { - "name": "abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "1456:124:1" - }, - "nodeType": "YulFunctionCall", - "src": "1456:131:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1448:4:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1326:9:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1341:4:1", - "type": "" - } - ], - "src": "1175:419:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1696:73:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1713:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "1718:6:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1706:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1706:19:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1706:19:1" - }, - { - "nodeType": "YulAssignment", - "src": "1734:29:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1753:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1758:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1749:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1749:14:1" - }, - "variableNames": [ - { - "name": "updated_pos", - "nodeType": "YulIdentifier", - "src": "1734:11:1" - } - ] - } - ] - }, - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1668:3:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "1673:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "updated_pos", - "nodeType": "YulTypedName", - "src": "1684:11:1", - "type": "" - } - ], - "src": "1600:169:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1881:50:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1903:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1911:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1899:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1899:14:1" - }, - { - "kind": "string", - "nodeType": "YulLiteral", - "src": "1915:8:1", - "type": "", - "value": "failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1892:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1892:32:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1892:32:1" - } - ] - }, - "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1873:6:1", - "type": "" - } - ], - "src": "1775:156:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2043:73:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2065:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2073:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2061:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2061:14:1" - }, - { - "kind": "string", - "nodeType": "YulLiteral", - "src": "2077:31:1", - "type": "", - "value": "elliptic curve pairing failed" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2054:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2054:55:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2054:55:1" - } - ] - }, - "name": "store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2035:6:1", - "type": "" - } - ], - "src": "1937:179:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n function store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve pairing failed\")\n\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506101ef6102cd565b600060208261018085600060086107d05a03f1905080610244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023b90610355565b60405180910390fd5b600182600060018110610280577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151146102c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102bc90610335565b60405180910390fd5b5050506103d8565b6040518060200160405280600190602082028036833780820191505090505090565b60006102fc600683610375565b915061030782610386565b602082019050919050565b600061031f601d83610375565b915061032a826103af565b602082019050919050565b6000602082019050818103600083015261034e816102ef565b9050919050565b6000602082019050818103600083015261036e81610312565b9050919050565b600082825260208201905092915050565b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b603f806103e66000396000f3fe6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP SWAP1 POP PUSH2 0x1EF PUSH2 0x2CD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH2 0x180 DUP6 PUSH1 0x0 PUSH1 0x8 PUSH2 0x7D0 GAS SUB CALL SWAP1 POP DUP1 PUSH2 0x244 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x23B SWAP1 PUSH2 0x355 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x0 PUSH1 0x1 DUP2 LT PUSH2 0x280 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x2C5 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2BC SWAP1 PUSH2 0x335 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2FC PUSH1 0x6 DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x307 DUP3 PUSH2 0x386 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31F PUSH1 0x1D DUP4 PUSH2 0x375 JUMP JUMPDEST SWAP2 POP PUSH2 0x32A DUP3 PUSH2 0x3AF JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x34E DUP2 PUSH2 0x2EF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x36E DUP2 PUSH2 0x312 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH32 0x656C6C69707469632063757276652070616972696E67206661696C6564000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x3E6 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ", - "sourceMap": "34:1674:0:-:0;;;66:1636;;;;;;;;;;90:24;:997;;;;;;;;131:66;90:997;;;;211:66;90:997;;;;291:66;90:997;;;;371:66;90:997;;;;451:66;90:997;;;;531:66;90:997;;;;611:66;90:997;;;;691:66;90:997;;;;771:66;90:997;;;;851:66;90:997;;;;931:66;90:997;;;;1011:66;90:997;;;;;1097:24;;:::i;:::-;1131:12;1577:2;1569:6;1564:3;1557:5;1554:1;1548:4;1541;1534:5;1530:16;1525:55;1514:66;;1607:7;1599:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1679:1;1666:6;1673:1;1666:9;;;;;;;;;;;;;;;;;;;:14;1658:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;66:1636;;;34:1674;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:365:1:-;;170:66;234:1;229:3;170:66;:::i;:::-;163:73;;245:93;334:3;245:93;:::i;:::-;363:2;358:3;354:12;347:19;;153:219;;;:::o;378:366::-;;541:67;605:2;600:3;541:67;:::i;:::-;534:74;;617:93;706:3;617:93;:::i;:::-;735:2;730:3;726:12;719:19;;524:220;;;:::o;750:419::-;;954:2;943:9;939:18;931:26;;1003:9;997:4;993:20;989:1;978:9;974:17;967:47;1031:131;1157:4;1031:131;:::i;:::-;1023:139;;921:248;;;:::o;1175:419::-;;1379:2;1368:9;1364:18;1356:26;;1428:9;1422:4;1418:20;1414:1;1403:9;1399:17;1392:47;1456:131;1582:4;1456:131;:::i;:::-;1448:139;;1346:248;;;:::o;1600:169::-;;1718:6;1713:3;1706:19;1758:4;1753:3;1749:14;1734:29;;1696:73;;;;:::o;1775:156::-;1915:8;1911:1;1903:6;1899:14;1892:32;1881:50;:::o;1937:179::-;2077:31;2073:1;2065:6;2061:14;2054:55;2043:73;:::o;34:1674:0:-;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 SUB SSTORE CREATE PUSH30 0x7A4AE3A9DF347ABCDDAAB722CB5BE69464E1FF818D231C9EE0B8DE64736F PUSH13 0x63430008030033000000000000 ", - "sourceMap": "34:1674:0:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "infinite", - "totalCost": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1708, "name": "MSTORE", "source": 0 }, - { "begin": 66, "end": 1702, "name": "CALLVALUE", "source": 0 }, - { "begin": 66, "end": 1702, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 1702, "name": "ISZERO", "source": 0 }, - { - "begin": 66, - "end": 1702, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 66, "end": 1702, "name": "JUMPI", "source": 0 }, - { - "begin": 66, - "end": 1702, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 66, "end": 1702, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 1702, "name": "REVERT", "source": 0 }, - { - "begin": 66, - "end": 1702, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 66, "end": 1702, "name": "JUMPDEST", "source": 0 }, - { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, - { - "begin": 90, - "end": 114, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 90, "end": 1087, "name": "MLOAD", "source": 0 }, - { "begin": 90, "end": 1087, "name": "DUP1", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "180" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { "begin": 90, "end": 1087, "name": "DUP1", "source": 0 }, - { - "begin": 131, - "end": 197, - "name": "PUSH", - "source": 0, - "value": "2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 211, - "end": 277, - "name": "PUSH", - "source": 0, - "value": "3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 291, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 371, - "end": 437, - "name": "PUSH", - "source": 0, - "value": "2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 451, - "end": 517, - "name": "PUSH", - "source": 0, - "value": "21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 531, - "end": 597, - "name": "PUSH", - "source": 0, - "value": "96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 611, - "end": 677, - "name": "PUSH", - "source": 0, - "value": "6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 691, - "end": 757, - "name": "PUSH", - "source": 0, - "value": "22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 771, - "end": 837, - "name": "PUSH", - "source": 0, - "value": "198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 851, - "end": 917, - "name": "PUSH", - "source": 0, - "value": "1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 931, - "end": 997, - "name": "PUSH", - "source": 0, - "value": "90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { - "begin": 90, - "end": 1087, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 90, "end": 1087, "name": "ADD", "source": 0 }, - { - "begin": 1011, - "end": 1077, - "name": "PUSH", - "source": 0, - "value": "12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA" - }, - { "begin": 90, "end": 1087, "name": "DUP2", "source": 0 }, - { "begin": 90, "end": 1087, "name": "MSTORE", "source": 0 }, - { "begin": 90, "end": 1087, "name": "POP", "source": 0 }, - { "begin": 90, "end": 1087, "name": "SWAP1", "source": 0 }, - { "begin": 90, "end": 1087, "name": "POP", "source": 0 }, - { - "begin": 1097, - "end": 1121, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 1097, - "end": 1121, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 1097, - "end": 1121, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1097, - "end": 1121, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 1097, "end": 1121, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1131, - "end": 1143, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1577, - "end": 1579, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1569, "end": 1575, "name": "DUP3", "source": 0 }, - { - "begin": 1564, - "end": 1567, - "name": "PUSH", - "source": 0, - "value": "180" - }, - { "begin": 1557, "end": 1562, "name": "DUP6", "source": 0 }, - { - "begin": 1554, - "end": 1555, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1548, - "end": 1552, - "name": "PUSH", - "source": 0, - "value": "8" - }, - { - "begin": 1541, - "end": 1545, - "name": "PUSH", - "source": 0, - "value": "7D0" - }, - { "begin": 1534, "end": 1539, "name": "GAS", "source": 0 }, - { "begin": 1530, "end": 1546, "name": "SUB", "source": 0 }, - { "begin": 1525, "end": 1580, "name": "CALL", "source": 0 }, - { "begin": 1514, "end": 1580, "name": "SWAP1", "source": 0 }, - { "begin": 1514, "end": 1580, "name": "POP", "source": 0 }, - { "begin": 1607, "end": 1614, "name": "DUP1", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 1599, "end": 1648, "name": "JUMPI", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1599, "end": 1648, "name": "MLOAD", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 1599, "end": 1648, "name": "DUP2", "source": 0 }, - { "begin": 1599, "end": 1648, "name": "MSTORE", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1599, "end": 1648, "name": "ADD", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 1599, "end": 1648, "name": "SWAP1", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 1599, - "end": 1648, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1599, - "end": 1648, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 1599, "end": 1648, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1599, "end": 1648, "name": "MLOAD", "source": 0 }, - { "begin": 1599, "end": 1648, "name": "DUP1", "source": 0 }, - { "begin": 1599, "end": 1648, "name": "SWAP2", "source": 0 }, - { "begin": 1599, "end": 1648, "name": "SUB", "source": 0 }, - { "begin": 1599, "end": 1648, "name": "SWAP1", "source": 0 }, - { "begin": 1599, "end": 1648, "name": "REVERT", "source": 0 }, - { - "begin": 1599, - "end": 1648, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 1599, "end": 1648, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1679, - "end": 1680, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 1666, "end": 1672, "name": "DUP3", "source": 0 }, - { - "begin": 1673, - "end": 1674, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 1666, "end": 1675, "name": "DUP2", "source": 0 }, - { "begin": 1666, "end": 1675, "name": "LT", "source": 0 }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 1666, "end": 1675, "name": "JUMPI", "source": 0 }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1666, "end": 1675, "name": "MSTORE", "source": 0 }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "32" - }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1666, "end": 1675, "name": "MSTORE", "source": 0 }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "24" - }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1666, "end": 1675, "name": "REVERT", "source": 0 }, - { - "begin": 1666, - "end": 1675, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 1666, "end": 1675, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1666, - "end": 1675, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1666, "end": 1675, "name": "MUL", "source": 0 }, - { "begin": 1666, "end": 1675, "name": "ADD", "source": 0 }, - { "begin": 1666, "end": 1675, "name": "MLOAD", "source": 0 }, - { "begin": 1666, "end": 1680, "name": "EQ", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 1658, "end": 1691, "name": "JUMPI", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1658, "end": 1691, "name": "MLOAD", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 1658, "end": 1691, "name": "DUP2", "source": 0 }, - { "begin": 1658, "end": 1691, "name": "MSTORE", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 1658, "end": 1691, "name": "ADD", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 1658, "end": 1691, "name": "SWAP1", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 1658, - "end": 1691, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 1658, - "end": 1691, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 1658, "end": 1691, "name": "JUMPDEST", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 1658, "end": 1691, "name": "MLOAD", "source": 0 }, - { "begin": 1658, "end": 1691, "name": "DUP1", "source": 0 }, - { "begin": 1658, "end": 1691, "name": "SWAP2", "source": 0 }, - { "begin": 1658, "end": 1691, "name": "SUB", "source": 0 }, - { "begin": 1658, "end": 1691, "name": "SWAP1", "source": 0 }, - { "begin": 1658, "end": 1691, "name": "REVERT", "source": 0 }, - { - "begin": 1658, - "end": 1691, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 1658, "end": 1691, "name": "JUMPDEST", "source": 0 }, - { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, - { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, - { "begin": 66, "end": 1702, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 34, "end": 1708, "name": "JUMP", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 34, "end": 1708, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1708, "name": "MLOAD", "source": 0 }, - { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 34, "end": 1708, "name": "ADD", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1708, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 1708, "name": "SWAP1", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 34, "end": 1708, "name": "DUP3", "source": 0 }, - { "begin": 34, "end": 1708, "name": "MUL", "source": 0 }, - { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1708, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 1708, "name": "DUP4", "source": 0 }, - { "begin": 34, "end": 1708, "name": "CALLDATACOPY", "source": 0 }, - { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1708, "name": "DUP3", "source": 0 }, - { "begin": 34, "end": 1708, "name": "ADD", "source": 0 }, - { "begin": 34, "end": 1708, "name": "SWAP2", "source": 0 }, - { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1708, "name": "SWAP1", "source": 0 }, - { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1708, "name": "POP", "source": 0 }, - { "begin": 34, "end": 1708, "name": "SWAP1", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { "begin": 7, "end": 372, "name": "tag", "source": 1, "value": "15" }, - { "begin": 7, "end": 372, "name": "JUMPDEST", "source": 1 }, - { "begin": 7, "end": 372, "name": "PUSH", "source": 1, "value": "0" }, - { - "begin": 170, - "end": 236, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 234, - "end": 235, - "name": "PUSH", - "source": 1, - "value": "6" - }, - { "begin": 229, "end": 232, "name": "DUP4", "source": 1 }, - { - "begin": 170, - "end": 236, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 170, - "end": 236, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 170, - "end": 236, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 170, "end": 236, "name": "JUMPDEST", "source": 1 }, - { "begin": 163, "end": 236, "name": "SWAP2", "source": 1 }, - { "begin": 163, "end": 236, "name": "POP", "source": 1 }, - { - "begin": 245, - "end": 338, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 334, "end": 337, "name": "DUP3", "source": 1 }, - { - "begin": 245, - "end": 338, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 245, - "end": 338, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 245, - "end": 338, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 245, "end": 338, "name": "JUMPDEST", "source": 1 }, - { - "begin": 363, - "end": 365, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 358, "end": 361, "name": "DUP3", "source": 1 }, - { "begin": 354, "end": 366, "name": "ADD", "source": 1 }, - { "begin": 347, "end": 366, "name": "SWAP1", "source": 1 }, - { "begin": 347, "end": 366, "name": "POP", "source": 1 }, - { "begin": 153, "end": 372, "name": "SWAP2", "source": 1 }, - { "begin": 153, "end": 372, "name": "SWAP1", "source": 1 }, - { "begin": 153, "end": 372, "name": "POP", "source": 1 }, - { - "begin": 153, - "end": 372, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 378, - "end": 744, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 378, "end": 744, "name": "JUMPDEST", "source": 1 }, - { - "begin": 378, - "end": 744, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 541, - "end": 608, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { - "begin": 605, - "end": 607, - "name": "PUSH", - "source": 1, - "value": "1D" - }, - { "begin": 600, "end": 603, "name": "DUP4", "source": 1 }, - { - "begin": 541, - "end": 608, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 541, - "end": 608, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 541, - "end": 608, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 541, "end": 608, "name": "JUMPDEST", "source": 1 }, - { "begin": 534, "end": 608, "name": "SWAP2", "source": 1 }, - { "begin": 534, "end": 608, "name": "POP", "source": 1 }, - { - "begin": 617, - "end": 710, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 706, "end": 709, "name": "DUP3", "source": 1 }, - { - "begin": 617, - "end": 710, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 617, - "end": 710, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 617, - "end": 710, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 617, "end": 710, "name": "JUMPDEST", "source": 1 }, - { - "begin": 735, - "end": 737, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 730, "end": 733, "name": "DUP3", "source": 1 }, - { "begin": 726, "end": 738, "name": "ADD", "source": 1 }, - { "begin": 719, "end": 738, "name": "SWAP1", "source": 1 }, - { "begin": 719, "end": 738, "name": "POP", "source": 1 }, - { "begin": 524, "end": 744, "name": "SWAP2", "source": 1 }, - { "begin": 524, "end": 744, "name": "SWAP1", "source": 1 }, - { "begin": 524, "end": 744, "name": "POP", "source": 1 }, - { - "begin": 524, - "end": 744, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 750, - "end": 1169, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 750, "end": 1169, "name": "JUMPDEST", "source": 1 }, - { - "begin": 750, - "end": 1169, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 954, - "end": 956, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 943, "end": 952, "name": "DUP3", "source": 1 }, - { "begin": 939, "end": 957, "name": "ADD", "source": 1 }, - { "begin": 931, "end": 957, "name": "SWAP1", "source": 1 }, - { "begin": 931, "end": 957, "name": "POP", "source": 1 }, - { "begin": 1003, "end": 1012, "name": "DUP2", "source": 1 }, - { "begin": 997, "end": 1001, "name": "DUP2", "source": 1 }, - { "begin": 993, "end": 1013, "name": "SUB", "source": 1 }, - { - "begin": 989, - "end": 990, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 978, "end": 987, "name": "DUP4", "source": 1 }, - { "begin": 974, "end": 991, "name": "ADD", "source": 1 }, - { "begin": 967, "end": 1014, "name": "MSTORE", "source": 1 }, - { - "begin": 1031, - "end": 1162, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { "begin": 1157, "end": 1161, "name": "DUP2", "source": 1 }, - { - "begin": 1031, - "end": 1162, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 1031, - "end": 1162, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1031, - "end": 1162, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 1031, "end": 1162, "name": "JUMPDEST", "source": 1 }, - { "begin": 1023, "end": 1162, "name": "SWAP1", "source": 1 }, - { "begin": 1023, "end": 1162, "name": "POP", "source": 1 }, - { "begin": 921, "end": 1169, "name": "SWAP2", "source": 1 }, - { "begin": 921, "end": 1169, "name": "SWAP1", "source": 1 }, - { "begin": 921, "end": 1169, "name": "POP", "source": 1 }, - { - "begin": 921, - "end": 1169, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1175, - "end": 1594, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 1175, "end": 1594, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1175, - "end": 1594, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1379, - "end": 1381, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1368, "end": 1377, "name": "DUP3", "source": 1 }, - { "begin": 1364, "end": 1382, "name": "ADD", "source": 1 }, - { "begin": 1356, "end": 1382, "name": "SWAP1", "source": 1 }, - { "begin": 1356, "end": 1382, "name": "POP", "source": 1 }, - { "begin": 1428, "end": 1437, "name": "DUP2", "source": 1 }, - { "begin": 1422, "end": 1426, "name": "DUP2", "source": 1 }, - { "begin": 1418, "end": 1438, "name": "SUB", "source": 1 }, - { - "begin": 1414, - "end": 1415, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1403, "end": 1412, "name": "DUP4", "source": 1 }, - { "begin": 1399, "end": 1416, "name": "ADD", "source": 1 }, - { "begin": 1392, "end": 1439, "name": "MSTORE", "source": 1 }, - { - "begin": 1456, - "end": 1587, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 1582, "end": 1586, "name": "DUP2", "source": 1 }, - { - "begin": 1456, - "end": 1587, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 1456, - "end": 1587, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1456, - "end": 1587, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 1456, "end": 1587, "name": "JUMPDEST", "source": 1 }, - { "begin": 1448, "end": 1587, "name": "SWAP1", "source": 1 }, - { "begin": 1448, "end": 1587, "name": "POP", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "SWAP2", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "SWAP1", "source": 1 }, - { "begin": 1346, "end": 1594, "name": "POP", "source": 1 }, - { - "begin": 1346, - "end": 1594, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1600, - "end": 1769, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 1600, "end": 1769, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1600, - "end": 1769, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1718, "end": 1724, "name": "DUP3", "source": 1 }, - { "begin": 1713, "end": 1716, "name": "DUP3", "source": 1 }, - { "begin": 1706, "end": 1725, "name": "MSTORE", "source": 1 }, - { - "begin": 1758, - "end": 1762, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1753, "end": 1756, "name": "DUP3", "source": 1 }, - { "begin": 1749, "end": 1763, "name": "ADD", "source": 1 }, - { "begin": 1734, "end": 1763, "name": "SWAP1", "source": 1 }, - { "begin": 1734, "end": 1763, "name": "POP", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "SWAP3", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "SWAP2", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, - { "begin": 1696, "end": 1769, "name": "POP", "source": 1 }, - { - "begin": 1696, - "end": 1769, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1775, - "end": 1931, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 1775, "end": 1931, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1915, - "end": 1923, - "name": "PUSH", - "source": 1, - "value": "6661696C65640000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1911, - "end": 1912, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1903, "end": 1909, "name": "DUP3", "source": 1 }, - { "begin": 1899, "end": 1913, "name": "ADD", "source": 1 }, - { "begin": 1892, "end": 1924, "name": "MSTORE", "source": 1 }, - { "begin": 1881, "end": 1931, "name": "POP", "source": 1 }, - { - "begin": 1881, - "end": 1931, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1937, - "end": 2116, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 1937, "end": 2116, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2077, - "end": 2108, - "name": "PUSH", - "source": 1, - "value": "656C6C69707469632063757276652070616972696E67206661696C6564000000" - }, - { - "begin": 2073, - "end": 2074, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2065, "end": 2071, "name": "DUP3", "source": 1 }, - { "begin": 2061, "end": 2075, "name": "ADD", "source": 1 }, - { "begin": 2054, "end": 2109, "name": "MSTORE", "source": 1 }, - { "begin": 2043, "end": 2116, "name": "POP", "source": 1 }, - { - "begin": 2043, - "end": 2116, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 34, - "end": 1708, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 34, "end": 1708, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1708, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1708, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220e90355f07d7a4ae3a9df347abcddaab722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033", - ".code": [ - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1708, "name": "MSTORE", "source": 0 }, - { - "begin": 34, - "end": 1708, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1708, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1708, "name": "REVERT", "source": 0 } - ] - } - } - }, - "methodIdentifiers": {} - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Bn128Pairing\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x53e3d63190581fae7ffa509a011ef9051a34716920e445019ec671b70f62ce7b\",\"urls\":[\"bzz-raw://03fe2554e9fd58d008751b86eb89d2b31e5eac80d93f76dc939b0d13945cdd38\",\"dweb:/ipfs/QmUThb48t3ZMNE6a99sgqtWNUVGitj4eRrS2Gj3oxxRfMu\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract Bn128Pairing {\n constructor() {\n uint256[12] memory input = [\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02,\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84,\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee,\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f,\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237,\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f,\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9,\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1,\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed,\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n ];\n uint256[1] memory result;\n bool success;\n assembly {\n // 0x08 id of the bn256CheckPairing precompile\n // 0 number of ether to transfer\n // 0 since we have an array of fixed length, our input starts in 0\n // 384 size of call parameters, i.e. 12*256 bits == 384 bytes\n // 32 size of result (one 32 byte boolean!)\n success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32)\n }\n require(success, \"elliptic curve pairing failed\");\n require(result[0] == 1, \"failed\");\n }\n }" -} diff --git a/tests/contracts/compiled/CallPermit.json b/tests/contracts/compiled/CallPermit.json new file mode 100644 index 0000000000..be32361e22 --- /dev/null +++ b/tests/contracts/compiled/CallPermit.json @@ -0,0 +1,105 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { "internalType": "uint64", "name": "gaslimit", "type": "uint64" }, + { "internalType": "uint256", "name": "deadline", "type": "uint256" }, + { "internalType": "uint8", "name": "v", "type": "uint8" }, + { "internalType": "bytes32", "name": "r", "type": "bytes32" }, + { "internalType": "bytes32", "name": "s", "type": "bytes32" } + ], + "name": "dispatch", + "outputs": [ + { "internalType": "bytes", "name": "output", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "name": "nonces", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "DOMAIN_SEPARATOR()": { + "details": "Returns the EIP712 domain separator. It is used to avoid replay attacks accross assets or other similar EIP712 message structures. Selector: 0x3644e515" + }, + "dispatch(address,address,uint256,bytes,uint64,uint256,uint8,bytes32,bytes32)": { + "details": "Dispatch a call on the behalf of an other user with a EIP712 permit. Will revert if the permit is not valid or if the dispatched call reverts or errors (such as out of gas). If successful the EIP712 nonce is increased to prevent this permit to be replayed.", + "params": { + "data": "Call data", + "deadline": "Deadline in UNIX seconds after which the permit will no longer be valid.", + "from": "Who made the permit and want its call to be dispatched on their behalf.", + "gaslimit": "Gaslimit the dispatched call requires. Providing it prevents the dispatcher to manipulate the gaslimit.", + "r": "R part of the signature.", + "s": "S part of the signature.", + "to": "Which address the call is made to.", + "v": "V part of the signature.", + "value": "Value being transfered from the \"from\" account." + }, + "returns": { "output": "Output of the call. Selector: b5ea0966" } + }, + "nonces(address)": { + "details": "Returns the current nonce for given owner. A permit must have this nonce to be consumed, which will increase the nonce by one. Selector: 0x7ecebe00" + } + }, + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "dispatch(address,address,uint256,bytes,uint64,uint256,uint8,bytes32,bytes32)": "b5ea0966", + "nonces(address)": "7ecebe00" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"gaslimit\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"output\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the EIP712 domain separator. It is used to avoid replay attacks accross assets or other similar EIP712 message structures. Selector: 0x3644e515\"},\"dispatch(address,address,uint256,bytes,uint64,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Dispatch a call on the behalf of an other user with a EIP712 permit. Will revert if the permit is not valid or if the dispatched call reverts or errors (such as out of gas). If successful the EIP712 nonce is increased to prevent this permit to be replayed.\",\"params\":{\"data\":\"Call data\",\"deadline\":\"Deadline in UNIX seconds after which the permit will no longer be valid.\",\"from\":\"Who made the permit and want its call to be dispatched on their behalf.\",\"gaslimit\":\"Gaslimit the dispatched call requires. Providing it prevents the dispatcher to manipulate the gaslimit.\",\"r\":\"R part of the signature.\",\"s\":\"S part of the signature.\",\"to\":\"Which address the call is made to.\",\"v\":\"V part of the signature.\",\"value\":\"Value being transfered from the \\\"from\\\" account.\"},\"returns\":{\"output\":\"Output of the call. Selector: b5ea0966\"}},\"nonces(address)\":{\"details\":\"Returns the current nonce for given owner. A permit must have this nonce to be consumed, which will increase the nonce by one. Selector: 0x7ecebe00\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"CallPermit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x15447da21f2e88d5e714e82cf631a1b5e46903f4dbcc0f0e1b061bd709e5d340\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://5fcd51d9b0f3f9b697eabaaf4ff8300c9e1dd8b52164e31a0c8ef6d031130cdc\",\"dweb:/ipfs/QmWpHxvHMydLyji7rg2cax5vvsxNFP5zRid4j7nPeAvJEb\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ninterface CallPermit {\n /// @dev Dispatch a call on the behalf of an other user with a EIP712 permit.\n /// Will revert if the permit is not valid or if the dispatched call reverts or errors (such as\n /// out of gas).\n /// If successful the EIP712 nonce is increased to prevent this permit to be replayed.\n /// @param from Who made the permit and want its call to be dispatched on their behalf.\n /// @param to Which address the call is made to.\n /// @param value Value being transfered from the \"from\" account.\n /// @param data Call data\n /// @param gaslimit Gaslimit the dispatched call requires.\n /// Providing it prevents the dispatcher to manipulate the gaslimit.\n /// @param deadline Deadline in UNIX seconds after which the permit will no longer be valid.\n /// @param v V part of the signature.\n /// @param r R part of the signature.\n /// @param s S part of the signature.\n /// @return output Output of the call.\n /// Selector: b5ea0966\n function dispatch(\n address from,\n address to,\n uint256 value,\n bytes memory data,\n uint64 gaslimit,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external returns (bytes memory output);\n\n /**\n * @dev Returns the current nonce for given owner.\n * A permit must have this nonce to be consumed, which will\n * increase the nonce by one.\n * Selector: 0x7ecebe00\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the EIP712 domain separator. It is used to avoid replay\n * attacks accross assets or other similar EIP712 message structures.\n * Selector: 0x3644e515\n */\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n" +} diff --git a/tests/contracts/compiled/Callee.json b/tests/contracts/compiled/Callee.json deleted file mode 100644 index e2efeba448..0000000000 --- a/tests/contracts/compiled/Callee.json +++ /dev/null @@ -1,2087 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506101f5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063975057e71461003b578063fd63983b14610059575b600080fd5b610043610089565b60405161005091906100fe565b60405180910390f35b610073600480360381019061006e91906100c6565b61008f565b60405161008091906100fe565b60405180910390f35b60005481565b600080600790508260008190555080836100a99190610119565b915050919050565b6000813590506100c0816101a8565b92915050565b6000602082840312156100d857600080fd5b60006100e6848285016100b1565b91505092915050565b6100f88161016f565b82525050565b600060208201905061011360008301846100ef565b92915050565b60006101248261016f565b915061012f8361016f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561016457610163610179565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b18161016f565b81146101bc57600080fd5b5056fea2646970667358221220fc2cf663fdc41a2c9133174a8fc392a6a833f094e2faa27c00da20fd8f81d2da64736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "name": "addtwo", - "outputs": [ - { "internalType": "uint256", "name": "result", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "store", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:247 contract Callee {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:247 contract Callee {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x975057e7\n eq\n tag_3\n jumpi\n dup1\n 0xfd63983b\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":60:77 uint public store */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":87:241 function addtwo(uint _value) external returns (uint result) {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n mload(0x40)\n tag_13\n swap2\n swap1\n tag_8\n jump\t// in\n tag_13:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":60:77 uint public store */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":87:241 function addtwo(uint _value) external returns (uint result) {... */\n tag_12:\n /* \"main.sol\":134:145 uint result */\n 0x00\n /* \"main.sol\":161:167 uint x */\n dup1\n /* \"main.sol\":170:171 7 */\n 0x07\n /* \"main.sol\":161:171 uint x = 7 */\n swap1\n pop\n /* \"main.sol\":193:199 _value */\n dup3\n /* \"main.sol\":185:190 store */\n 0x00\n /* \"main.sol\":185:199 store = _value */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":229:230 x */\n dup1\n /* \"main.sol\":220:226 _value */\n dup4\n /* \"main.sol\":220:230 _value + x */\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n /* \"main.sol\":213:230 return _value + x */\n swap2\n pop\n pop\n /* \"main.sol\":87:241 function addtwo(uint _value) external returns (uint result) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_18:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_20\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_21\n jump\t// in\n tag_20:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_11:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_23\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_23:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_24\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_18\n jump\t// in\n tag_24:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_25:\n /* \"#utility.yul\":507:531 */\n tag_27\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_8:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_30\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_25\n jump\t// in\n tag_30:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1077 */\n tag_16:\n 0x00\n /* \"#utility.yul\":831:851 */\n tag_32\n /* \"#utility.yul\":849:850 */\n dup3\n /* \"#utility.yul\":831:851 */\n tag_28\n jump\t// in\n tag_32:\n /* \"#utility.yul\":826:851 */\n swap2\n pop\n /* \"#utility.yul\":865:885 */\n tag_33\n /* \"#utility.yul\":883:884 */\n dup4\n /* \"#utility.yul\":865:885 */\n tag_28\n jump\t// in\n tag_33:\n /* \"#utility.yul\":860:885 */\n swap3\n pop\n /* \"#utility.yul\":1019:1020 */\n dup3\n /* \"#utility.yul\":951:1017 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":947:1021 */\n sub\n /* \"#utility.yul\":944:945 */\n dup3\n /* \"#utility.yul\":941:1022 */\n gt\n /* \"#utility.yul\":938:940 */\n iszero\n tag_34\n jumpi\n /* \"#utility.yul\":1025:1043 */\n tag_35\n tag_36\n jump\t// in\n tag_35:\n /* \"#utility.yul\":938:940 */\n tag_34:\n /* \"#utility.yul\":1069:1070 */\n dup3\n /* \"#utility.yul\":1066:1067 */\n dup3\n /* \"#utility.yul\":1062:1071 */\n add\n /* \"#utility.yul\":1055:1071 */\n swap1\n pop\n /* \"#utility.yul\":816:1077 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1083:1160 */\n tag_28:\n 0x00\n /* \"#utility.yul\":1149:1154 */\n dup2\n /* \"#utility.yul\":1138:1154 */\n swap1\n pop\n /* \"#utility.yul\":1128:1160 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1166:1346 */\n tag_36:\n /* \"#utility.yul\":1214:1291 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1211:1212 */\n 0x00\n /* \"#utility.yul\":1204:1292 */\n mstore\n /* \"#utility.yul\":1311:1315 */\n 0x11\n /* \"#utility.yul\":1308:1309 */\n 0x04\n /* \"#utility.yul\":1301:1316 */\n mstore\n /* \"#utility.yul\":1335:1339 */\n 0x24\n /* \"#utility.yul\":1332:1333 */\n 0x00\n /* \"#utility.yul\":1325:1340 */\n revert\n /* \"#utility.yul\":1352:1474 */\n tag_21:\n /* \"#utility.yul\":1425:1449 */\n tag_40\n /* \"#utility.yul\":1443:1448 */\n dup2\n /* \"#utility.yul\":1425:1449 */\n tag_28\n jump\t// in\n tag_40:\n /* \"#utility.yul\":1418:1423 */\n dup2\n /* \"#utility.yul\":1415:1450 */\n eq\n /* \"#utility.yul\":1405:1407 */\n tag_41\n jumpi\n /* \"#utility.yul\":1464:1465 */\n 0x00\n /* \"#utility.yul\":1461:1462 */\n dup1\n /* \"#utility.yul\":1454:1466 */\n revert\n /* \"#utility.yul\":1405:1407 */\n tag_41:\n /* \"#utility.yul\":1395:1474 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220fc2cf663fdc41a2c9133174a8fc392a6a833f094e2faa27c00da20fd8f81d2da64736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506101f5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063975057e71461003b578063fd63983b14610059575b600080fd5b610043610089565b60405161005091906100fe565b60405180910390f35b610073600480360381019061006e91906100c6565b61008f565b60405161008091906100fe565b60405180910390f35b60005481565b600080600790508260008190555080836100a99190610119565b915050919050565b6000813590506100c0816101a8565b92915050565b6000602082840312156100d857600080fd5b60006100e6848285016100b1565b91505092915050565b6100f88161016f565b82525050565b600060208201905061011360008301846100ef565b92915050565b60006101248261016f565b915061012f8361016f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561016457610163610179565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b18161016f565b81146101bc57600080fd5b5056fea2646970667358221220fc2cf663fdc41a2c9133174a8fc392a6a833f094e2faa27c00da20fd8f81d2da64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F5 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x975057E7 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xFD63983B EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0xFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC6 JUMP JUMPDEST PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x7 SWAP1 POP DUP3 PUSH1 0x0 DUP2 SWAP1 SSTORE POP DUP1 DUP4 PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x119 JUMP JUMPDEST SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC0 DUP2 PUSH2 0x1A8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE6 DUP5 DUP3 DUP6 ADD PUSH2 0xB1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xF8 DUP2 PUSH2 0x16F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x113 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xEF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x124 DUP3 PUSH2 0x16F JUMP JUMPDEST SWAP2 POP PUSH2 0x12F DUP4 PUSH2 0x16F JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x164 JUMPI PUSH2 0x163 PUSH2 0x179 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B1 DUP2 PUSH2 0x16F JUMP JUMPDEST DUP2 EQ PUSH2 0x1BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xFC 0x2C 0xF6 PUSH4 0xFDC41A2C SWAP2 CALLER OR 0x4A DUP16 0xC3 SWAP3 0xA6 0xA8 CALLER CREATE SWAP5 0xE2 STATICCALL LOG2 PUSH29 0xDA20FD8F81D2DA64736F6C6343000803003300000000000000000000 ", - "sourceMap": "34:213:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1477:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "59:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "69:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "91:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "78:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "78:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "69:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "134:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "107:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "107:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "107:33:1" - } - ] - }, - "name": "abi_decode_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "37:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "45:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:1", - "type": "" - } - ], - "src": "7:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "218:196:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "264:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "273:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "276:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "266:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "266:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "266:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "239:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "248:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "235:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "260:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "231:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "231:32:1" - }, - "nodeType": "YulIf", - "src": "228:2:1" - }, - { - "nodeType": "YulBlock", - "src": "290:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "305:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "319:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "309:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "334:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "369:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "380:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "365:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "389:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "344:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "344:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "334:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "188:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "199:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "211:6:1", - "type": "" - } - ], - "src": "152:262:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "485:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "502:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "525:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "507:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "507:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "495:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "495:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "495:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "473:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "480:3:1", - "type": "" - } - ], - "src": "420:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "642:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "652:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "664:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "675:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "660:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "660:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "652:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "732:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "756:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "741:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "741:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "688:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "688:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "688:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "614:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "626:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "637:4:1", - "type": "" - } - ], - "src": "544:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "816:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "826:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "849:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "831:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "831:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "826:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "860:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "883:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "865:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "865:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "860:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1023:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "1025:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1025:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1025:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "944:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "951:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1019:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "947:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "947:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "941:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "941:81:1" - }, - "nodeType": "YulIf", - "src": "938:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "1055:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1066:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1069:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1062:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1062:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "1055:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "803:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "806:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "812:3:1", - "type": "" - } - ], - "src": "772:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1128:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1138:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1149:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1138:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1110:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1120:7:1", - "type": "" - } - ], - "src": "1083:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1194:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1211:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1214:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1204:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1204:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1204:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1308:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1311:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1301:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1301:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1301:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1332:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1335:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1325:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1325:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1325:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1166:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1395:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1452:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1461:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1464:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1454:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1454:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1454:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1418:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1443:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1425:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1425:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1415:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1415:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1408:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1408:43:1" - }, - "nodeType": "YulIf", - "src": "1405:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1388:5:1", - "type": "" - } - ], - "src": "1352:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c8063975057e71461003b578063fd63983b14610059575b600080fd5b610043610089565b60405161005091906100fe565b60405180910390f35b610073600480360381019061006e91906100c6565b61008f565b60405161008091906100fe565b60405180910390f35b60005481565b600080600790508260008190555080836100a99190610119565b915050919050565b6000813590506100c0816101a8565b92915050565b6000602082840312156100d857600080fd5b60006100e6848285016100b1565b91505092915050565b6100f88161016f565b82525050565b600060208201905061011360008301846100ef565b92915050565b60006101248261016f565b915061012f8361016f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561016457610163610179565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b18161016f565b81146101bc57600080fd5b5056fea2646970667358221220fc2cf663fdc41a2c9133174a8fc392a6a833f094e2faa27c00da20fd8f81d2da64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x975057E7 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xFD63983B EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0xFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC6 JUMP JUMPDEST PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x7 SWAP1 POP DUP3 PUSH1 0x0 DUP2 SWAP1 SSTORE POP DUP1 DUP4 PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x119 JUMP JUMPDEST SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC0 DUP2 PUSH2 0x1A8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE6 DUP5 DUP3 DUP6 ADD PUSH2 0xB1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xF8 DUP2 PUSH2 0x16F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x113 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xEF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x124 DUP3 PUSH2 0x16F JUMP JUMPDEST SWAP2 POP PUSH2 0x12F DUP4 PUSH2 0x16F JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x164 JUMPI PUSH2 0x163 PUSH2 0x179 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B1 DUP2 PUSH2 0x16F JUMP JUMPDEST DUP2 EQ PUSH2 0x1BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xFC 0x2C 0xF6 PUSH4 0xFDC41A2C SWAP2 CALLER OR 0x4A DUP16 0xC3 SWAP3 0xA6 0xA8 CALLER CREATE SWAP5 0xE2 STATICCALL LOG2 PUSH29 0xDA20FD8F81D2DA64736F6C6343000803003300000000000000000000 ", - "sourceMap": "34:213:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;87:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60:17;;;;:::o;87:154::-;134:11;161:6;170:1;161:10;;193:6;185:5;:14;;;;229:1;220:6;:10;;;;:::i;:::-;213:17;;;87:154;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "100200", - "executionCost": "147", - "totalCost": "100347" - }, - "external": { "addtwo(uint256)": "infinite", "store()": "1107" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 247, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 247, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 247, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 247, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 247, "name": "REVERT", "source": 0 }, - { "begin": 34, "end": 247, "name": "tag", "source": 0, "value": "1" }, - { "begin": 34, "end": 247, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 247, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 247, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 247, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220fc2cf663fdc41a2c9133174a8fc392a6a833f094e2faa27c00da20fd8f81d2da64736f6c63430008030033", - ".code": [ - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 247, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 247, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 247, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 247, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 247, "name": "REVERT", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 247, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 247, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 247, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 247, "name": "LT", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 247, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 247, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 34, "end": 247, "name": "SHR", "source": 0 }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "975057E7" - }, - { "begin": 34, "end": 247, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 34, "end": 247, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "FD63983B" - }, - { "begin": 34, "end": 247, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 247, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 247, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 247, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 247, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 247, "name": "REVERT", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 60, "end": 77, "name": "JUMPDEST", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 60, - "end": 77, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 60, - "end": 77, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 60, - "end": 77, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 60, "end": 77, "name": "JUMPDEST", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 60, "end": 77, "name": "MLOAD", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 60, "end": 77, "name": "SWAP2", "source": 0 }, - { "begin": 60, "end": 77, "name": "SWAP1", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 60, - "end": 77, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 60, - "end": 77, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 60, "end": 77, "name": "JUMPDEST", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 60, "end": 77, "name": "MLOAD", "source": 0 }, - { "begin": 60, "end": 77, "name": "DUP1", "source": 0 }, - { "begin": 60, "end": 77, "name": "SWAP2", "source": 0 }, - { "begin": 60, "end": 77, "name": "SUB", "source": 0 }, - { "begin": 60, "end": 77, "name": "SWAP1", "source": 0 }, - { "begin": 60, "end": 77, "name": "RETURN", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 87, "end": 241, "name": "JUMPDEST", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 87, - "end": 241, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 87, "end": 241, "name": "DUP1", "source": 0 }, - { "begin": 87, "end": 241, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 87, "end": 241, "name": "SUB", "source": 0 }, - { "begin": 87, "end": 241, "name": "DUP2", "source": 0 }, - { "begin": 87, "end": 241, "name": "ADD", "source": 0 }, - { "begin": 87, "end": 241, "name": "SWAP1", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 87, "end": 241, "name": "SWAP2", "source": 0 }, - { "begin": 87, "end": 241, "name": "SWAP1", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { - "begin": 87, - "end": 241, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 87, - "end": 241, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 87, "end": 241, "name": "JUMPDEST", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 87, - "end": 241, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 87, - "end": 241, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 87, "end": 241, "name": "JUMPDEST", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 87, "end": 241, "name": "MLOAD", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 87, "end": 241, "name": "SWAP2", "source": 0 }, - { "begin": 87, "end": 241, "name": "SWAP1", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 87, - "end": 241, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 87, - "end": 241, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 87, "end": 241, "name": "JUMPDEST", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 87, "end": 241, "name": "MLOAD", "source": 0 }, - { "begin": 87, "end": 241, "name": "DUP1", "source": 0 }, - { "begin": 87, "end": 241, "name": "SWAP2", "source": 0 }, - { "begin": 87, "end": 241, "name": "SUB", "source": 0 }, - { "begin": 87, "end": 241, "name": "SWAP1", "source": 0 }, - { "begin": 87, "end": 241, "name": "RETURN", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 60, "end": 77, "name": "JUMPDEST", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 60, "end": 77, "name": "SLOAD", "source": 0 }, - { "begin": 60, "end": 77, "name": "DUP2", "source": 0 }, - { - "begin": 60, - "end": 77, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 87, - "end": 241, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 87, "end": 241, "name": "JUMPDEST", "source": 0 }, - { - "begin": 134, - "end": 145, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 161, "end": 167, "name": "DUP1", "source": 0 }, - { - "begin": 170, - "end": 171, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { "begin": 161, "end": 171, "name": "SWAP1", "source": 0 }, - { "begin": 161, "end": 171, "name": "POP", "source": 0 }, - { "begin": 193, "end": 199, "name": "DUP3", "source": 0 }, - { - "begin": 185, - "end": 190, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 185, "end": 199, "name": "DUP2", "source": 0 }, - { "begin": 185, "end": 199, "name": "SWAP1", "source": 0 }, - { "begin": 185, "end": 199, "name": "SSTORE", "source": 0 }, - { "begin": 185, "end": 199, "name": "POP", "source": 0 }, - { "begin": 229, "end": 230, "name": "DUP1", "source": 0 }, - { "begin": 220, "end": 226, "name": "DUP4", "source": 0 }, - { - "begin": 220, - "end": 230, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 220, "end": 230, "name": "SWAP2", "source": 0 }, - { "begin": 220, "end": 230, "name": "SWAP1", "source": 0 }, - { - "begin": 220, - "end": 230, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { - "begin": 220, - "end": 230, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 220, - "end": 230, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 220, "end": 230, "name": "JUMPDEST", "source": 0 }, - { "begin": 213, "end": 230, "name": "SWAP2", "source": 0 }, - { "begin": 213, "end": 230, "name": "POP", "source": 0 }, - { "begin": 213, "end": 230, "name": "POP", "source": 0 }, - { "begin": 87, "end": 241, "name": "SWAP2", "source": 0 }, - { "begin": 87, "end": 241, "name": "SWAP1", "source": 0 }, - { "begin": 87, "end": 241, "name": "POP", "source": 0 }, - { - "begin": 87, - "end": 241, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "11" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1077, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1077, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 831, - "end": 851, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 831, - "end": 851, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, - { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, - { "begin": 826, "end": 851, "name": "POP", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "33" - }, - { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 865, - "end": 885, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 865, - "end": 885, - "name": "tag", - "source": 1, - "value": "33" - }, - { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, - { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, - { "begin": 860, "end": 885, "name": "POP", "source": 1 }, - { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, - { - "begin": 951, - "end": 1017, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, - { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, - { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, - { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "35" - }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { - "begin": 1025, - "end": 1043, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1025, - "end": 1043, - "name": "tag", - "source": 1, - "value": "35" - }, - { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, - { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, - { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, - { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { - "begin": 816, - "end": 1077, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1083, - "end": 1160, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1083, - "end": 1160, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, - { - "begin": 1128, - "end": 1160, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1166, - "end": 1346, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1214, - "end": 1291, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1211, - "end": 1212, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, - { - "begin": 1311, - "end": 1315, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1308, - "end": 1309, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, - { - "begin": 1335, - "end": 1339, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1332, - "end": 1333, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, - { - "begin": 1352, - "end": 1474, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 1425, - "end": 1449, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1425, - "end": 1449, - "name": "tag", - "source": 1, - "value": "40" - }, - { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, - { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, - { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "PUSH [tag]", - "source": 1, - "value": "41" - }, - { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, - { - "begin": 1464, - "end": 1465, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, - { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "tag", - "source": 1, - "value": "41" - }, - { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, - { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, - { - "begin": 1395, - "end": 1474, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "addtwo(uint256)": "fd63983b", - "store()": "975057e7" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"addtwo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"store\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Callee\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x597ee1f5715720411519610d7b9fdeaf3d234f6c8fd6ade675f7c33cbc916028\",\"urls\":[\"bzz-raw://0ea407e22255a20ce7b5c1b7f1f0d74ae931b36cf3f895fdeabd4ceca17ef58b\",\"dweb:/ipfs/QmXdP96RQak3qWZLFhfgutBhSWF8FKjNAWaHeCrZVeqYa4\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:Callee", - "label": "store", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract Callee {\n uint public store;\n function addtwo(uint _value) external returns (uint result) {\n uint x = 7;\n store = _value;\n return _value + x;\n }\n }" -} diff --git a/tests/contracts/compiled/Caller.json b/tests/contracts/compiled/Caller.json deleted file mode 100644 index 69da4c1970..0000000000 --- a/tests/contracts/compiled/Caller.json +++ /dev/null @@ -1,2943 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506102de806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063398f72231461003b578063975057e714610057575b600080fd5b610055600480360381019061005091906101af565b610075565b005b61005f61016a565b60405161006c9190610223565b60405180910390f35b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd63983b826040518263ffffffff1660e01b815260040161010e9190610223565b602060405180830381600087803b15801561012857600080fd5b505af115801561013c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016091906101eb565b6001819055505050565b60015481565b60008135905061017f8161027a565b92915050565b60008135905061019481610291565b92915050565b6000815190506101a981610291565b92915050565b600080604083850312156101c257600080fd5b60006101d085828601610170565b92505060206101e185828601610185565b9150509250929050565b6000602082840312156101fd57600080fd5b600061020b8482850161019a565b91505092915050565b61021d81610270565b82525050565b60006020820190506102386000830184610214565b92915050565b600061024982610250565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6102838161023e565b811461028e57600080fd5b50565b61029a81610270565b81146102a557600080fd5b5056fea26469706673582212208b44616dfaba36ab3ed3c66e08e62b41b20549fa87e881fd77e006374d11f86b64736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_addr", "type": "address" }, - { "internalType": "uint256", "name": "_number", "type": "uint256" } - ], - "name": "someAction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "store", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":136:374 contract Caller {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":136:374 contract Caller {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x398f7223\n eq\n tag_3\n jumpi\n dup1\n 0x975057e7\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":221:368 function someAction(address _addr, uint _number) public {... */\n tag_3:\n tag_5\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n tag_8\n jump\t// in\n tag_5:\n stop\n /* \"main.sol\":194:211 uint public store */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n mload(0x40)\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":221:368 function someAction(address _addr, uint _number) public {... */\n tag_8:\n /* \"main.sol\":307:312 _addr */\n dup2\n /* \"main.sol\":291:297 callee */\n 0x00\n dup1\n /* \"main.sol\":291:313 callee = Callee(_addr) */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":335:341 callee */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":335:348 callee.addtwo */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xfd63983b\n /* \"main.sol\":349:356 _number */\n dup3\n /* \"main.sol\":335:357 callee.addtwo(_number) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_14\n swap2\n swap1\n tag_12\n jump\t// in\n tag_14:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_15\n jumpi\n 0x00\n dup1\n revert\n tag_15:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_17\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_17:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_18\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n /* \"main.sol\":327:332 store */\n 0x01\n /* \"main.sol\":327:357 store = callee.addtwo(_number) */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":221:368 function someAction(address _addr, uint _number) public {... */\n pop\n pop\n jump\t// out\n /* \"main.sol\":194:211 uint public store */\n tag_10:\n sload(0x01)\n dup2\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_21:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_23\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:291 */\n tag_25:\n 0x00\n /* \"#utility.yul\":236:242 */\n dup2\n /* \"#utility.yul\":223:243 */\n calldataload\n /* \"#utility.yul\":214:243 */\n swap1\n pop\n /* \"#utility.yul\":252:285 */\n tag_27\n /* \"#utility.yul\":279:284 */\n dup2\n /* \"#utility.yul\":252:285 */\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":204:291 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":297:440 */\n tag_29:\n 0x00\n /* \"#utility.yul\":385:391 */\n dup2\n /* \"#utility.yul\":379:392 */\n mload\n /* \"#utility.yul\":370:392 */\n swap1\n pop\n /* \"#utility.yul\":401:434 */\n tag_31\n /* \"#utility.yul\":428:433 */\n dup2\n /* \"#utility.yul\":401:434 */\n tag_28\n jump\t// in\n tag_31:\n /* \"#utility.yul\":360:440 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":446:853 */\n tag_7:\n 0x00\n dup1\n /* \"#utility.yul\":571:573 */\n 0x40\n /* \"#utility.yul\":559:568 */\n dup4\n /* \"#utility.yul\":550:557 */\n dup6\n /* \"#utility.yul\":546:569 */\n sub\n /* \"#utility.yul\":542:574 */\n slt\n /* \"#utility.yul\":539:541 */\n iszero\n tag_33\n jumpi\n /* \"#utility.yul\":587:588 */\n 0x00\n /* \"#utility.yul\":584:585 */\n dup1\n /* \"#utility.yul\":577:589 */\n revert\n /* \"#utility.yul\":539:541 */\n tag_33:\n /* \"#utility.yul\":630:631 */\n 0x00\n /* \"#utility.yul\":655:708 */\n tag_34\n /* \"#utility.yul\":700:707 */\n dup6\n /* \"#utility.yul\":691:697 */\n dup3\n /* \"#utility.yul\":680:689 */\n dup7\n /* \"#utility.yul\":676:698 */\n add\n /* \"#utility.yul\":655:708 */\n tag_21\n jump\t// in\n tag_34:\n /* \"#utility.yul\":645:708 */\n swap3\n pop\n /* \"#utility.yul\":601:718 */\n pop\n /* \"#utility.yul\":757:759 */\n 0x20\n /* \"#utility.yul\":783:836 */\n tag_35\n /* \"#utility.yul\":828:835 */\n dup6\n /* \"#utility.yul\":819:825 */\n dup3\n /* \"#utility.yul\":808:817 */\n dup7\n /* \"#utility.yul\":804:826 */\n add\n /* \"#utility.yul\":783:836 */\n tag_25\n jump\t// in\n tag_35:\n /* \"#utility.yul\":773:836 */\n swap2\n pop\n /* \"#utility.yul\":728:846 */\n pop\n /* \"#utility.yul\":529:853 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":859:1143 */\n tag_19:\n 0x00\n /* \"#utility.yul\":978:980 */\n 0x20\n /* \"#utility.yul\":966:975 */\n dup3\n /* \"#utility.yul\":957:964 */\n dup5\n /* \"#utility.yul\":953:976 */\n sub\n /* \"#utility.yul\":949:981 */\n slt\n /* \"#utility.yul\":946:948 */\n iszero\n tag_37\n jumpi\n /* \"#utility.yul\":994:995 */\n 0x00\n /* \"#utility.yul\":991:992 */\n dup1\n /* \"#utility.yul\":984:996 */\n revert\n /* \"#utility.yul\":946:948 */\n tag_37:\n /* \"#utility.yul\":1037:1038 */\n 0x00\n /* \"#utility.yul\":1062:1126 */\n tag_38\n /* \"#utility.yul\":1118:1125 */\n dup5\n /* \"#utility.yul\":1109:1115 */\n dup3\n /* \"#utility.yul\":1098:1107 */\n dup6\n /* \"#utility.yul\":1094:1116 */\n add\n /* \"#utility.yul\":1062:1126 */\n tag_29\n jump\t// in\n tag_38:\n /* \"#utility.yul\":1052:1126 */\n swap2\n pop\n /* \"#utility.yul\":1008:1136 */\n pop\n /* \"#utility.yul\":936:1143 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1149:1267 */\n tag_39:\n /* \"#utility.yul\":1236:1260 */\n tag_41\n /* \"#utility.yul\":1254:1259 */\n dup2\n /* \"#utility.yul\":1236:1260 */\n tag_42\n jump\t// in\n tag_41:\n /* \"#utility.yul\":1231:1234 */\n dup3\n /* \"#utility.yul\":1224:1261 */\n mstore\n /* \"#utility.yul\":1214:1267 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1273:1495 */\n tag_12:\n 0x00\n /* \"#utility.yul\":1404:1406 */\n 0x20\n /* \"#utility.yul\":1393:1402 */\n dup3\n /* \"#utility.yul\":1389:1407 */\n add\n /* \"#utility.yul\":1381:1407 */\n swap1\n pop\n /* \"#utility.yul\":1417:1488 */\n tag_44\n /* \"#utility.yul\":1485:1486 */\n 0x00\n /* \"#utility.yul\":1474:1483 */\n dup4\n /* \"#utility.yul\":1470:1487 */\n add\n /* \"#utility.yul\":1461:1467 */\n dup5\n /* \"#utility.yul\":1417:1488 */\n tag_39\n jump\t// in\n tag_44:\n /* \"#utility.yul\":1371:1495 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1501:1597 */\n tag_45:\n 0x00\n /* \"#utility.yul\":1567:1591 */\n tag_47\n /* \"#utility.yul\":1585:1590 */\n dup3\n /* \"#utility.yul\":1567:1591 */\n tag_48\n jump\t// in\n tag_47:\n /* \"#utility.yul\":1556:1591 */\n swap1\n pop\n /* \"#utility.yul\":1546:1597 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1603:1729 */\n tag_48:\n 0x00\n /* \"#utility.yul\":1680:1722 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1673:1678 */\n dup3\n /* \"#utility.yul\":1669:1723 */\n and\n /* \"#utility.yul\":1658:1723 */\n swap1\n pop\n /* \"#utility.yul\":1648:1729 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1735:1812 */\n tag_42:\n 0x00\n /* \"#utility.yul\":1801:1806 */\n dup2\n /* \"#utility.yul\":1790:1806 */\n swap1\n pop\n /* \"#utility.yul\":1780:1812 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1818:1940 */\n tag_24:\n /* \"#utility.yul\":1891:1915 */\n tag_52\n /* \"#utility.yul\":1909:1914 */\n dup2\n /* \"#utility.yul\":1891:1915 */\n tag_45\n jump\t// in\n tag_52:\n /* \"#utility.yul\":1884:1889 */\n dup2\n /* \"#utility.yul\":1881:1916 */\n eq\n /* \"#utility.yul\":1871:1873 */\n tag_53\n jumpi\n /* \"#utility.yul\":1930:1931 */\n 0x00\n /* \"#utility.yul\":1927:1928 */\n dup1\n /* \"#utility.yul\":1920:1932 */\n revert\n /* \"#utility.yul\":1871:1873 */\n tag_53:\n /* \"#utility.yul\":1861:1940 */\n pop\n jump\t// out\n /* \"#utility.yul\":1946:2068 */\n tag_28:\n /* \"#utility.yul\":2019:2043 */\n tag_55\n /* \"#utility.yul\":2037:2042 */\n dup2\n /* \"#utility.yul\":2019:2043 */\n tag_42\n jump\t// in\n tag_55:\n /* \"#utility.yul\":2012:2017 */\n dup2\n /* \"#utility.yul\":2009:2044 */\n eq\n /* \"#utility.yul\":1999:2001 */\n tag_56\n jumpi\n /* \"#utility.yul\":2058:2059 */\n 0x00\n /* \"#utility.yul\":2055:2056 */\n dup1\n /* \"#utility.yul\":2048:2060 */\n revert\n /* \"#utility.yul\":1999:2001 */\n tag_56:\n /* \"#utility.yul\":1989:2068 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212208b44616dfaba36ab3ed3c66e08e62b41b20549fa87e881fd77e006374d11f86b64736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506102de806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063398f72231461003b578063975057e714610057575b600080fd5b610055600480360381019061005091906101af565b610075565b005b61005f61016a565b60405161006c9190610223565b60405180910390f35b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd63983b826040518263ffffffff1660e01b815260040161010e9190610223565b602060405180830381600087803b15801561012857600080fd5b505af115801561013c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016091906101eb565b6001819055505050565b60015481565b60008135905061017f8161027a565b92915050565b60008135905061019481610291565b92915050565b6000815190506101a981610291565b92915050565b600080604083850312156101c257600080fd5b60006101d085828601610170565b92505060206101e185828601610185565b9150509250929050565b6000602082840312156101fd57600080fd5b600061020b8482850161019a565b91505092915050565b61021d81610270565b82525050565b60006020820190506102386000830184610214565b92915050565b600061024982610250565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6102838161023e565b811461028e57600080fd5b50565b61029a81610270565b81146102a557600080fd5b5056fea26469706673582212208b44616dfaba36ab3ed3c66e08e62b41b20549fa87e881fd77e006374d11f86b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x398F7223 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x975057E7 EQ PUSH2 0x57 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x1AF JUMP JUMPDEST PUSH2 0x75 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5F PUSH2 0x16A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6C SWAP2 SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFD63983B DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10E SWAP2 SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x128 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x160 SWAP2 SWAP1 PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x17F DUP2 PUSH2 0x27A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x194 DUP2 PUSH2 0x291 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1A9 DUP2 PUSH2 0x291 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1D0 DUP6 DUP3 DUP7 ADD PUSH2 0x170 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1E1 DUP6 DUP3 DUP7 ADD PUSH2 0x185 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x20B DUP5 DUP3 DUP6 ADD PUSH2 0x19A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x21D DUP2 PUSH2 0x270 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x238 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x214 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x249 DUP3 PUSH2 0x250 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x283 DUP2 PUSH2 0x23E JUMP JUMPDEST DUP2 EQ PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x29A DUP2 PUSH2 0x270 JUMP JUMPDEST DUP2 EQ PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 DIFFICULTY PUSH2 0x6DFA 0xBA CALLDATASIZE 0xAB RETURNDATACOPY 0xD3 0xC6 PUSH15 0x8E62B41B20549FA87E881FD77E006 CALLDATACOPY 0x4D GT 0xF8 PUSH12 0x64736F6C6343000803003300 ", - "sourceMap": "136:238:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:2071:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "59:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "69:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "91:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "78:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "78:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "69:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "134:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_address", - "nodeType": "YulIdentifier", - "src": "107:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "107:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "107:33:1" - } - ] - }, - "name": "abi_decode_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "37:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "45:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:1", - "type": "" - } - ], - "src": "7:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "204:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "214:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "236:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "223:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "223:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "214:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "279:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "252:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "252:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "252:33:1" - } - ] - }, - "name": "abi_decode_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "182:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "190:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "198:5:1", - "type": "" - } - ], - "src": "152:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "360:80:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "370:22:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "385:6:1" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "379:5:1" - }, - "nodeType": "YulFunctionCall", - "src": "379:13:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "370:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "428:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "401:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "401:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "401:33:1" - } - ] - }, - "name": "abi_decode_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "338:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "346:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "354:5:1", - "type": "" - } - ], - "src": "297:143:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "529:324:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "575:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "584:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "587:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "577:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "577:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "577:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "550:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "559:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "546:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "546:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "571:2:1", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "542:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "542:32:1" - }, - "nodeType": "YulIf", - "src": "539:2:1" - }, - { - "nodeType": "YulBlock", - "src": "601:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "616:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "630:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "620:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "645:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "680:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "691:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "676:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "676:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "700:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_address", - "nodeType": "YulIdentifier", - "src": "655:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "655:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "645:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "728:118:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "743:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "757:2:1", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "747:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "773:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "808:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "819:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "804:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "804:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "828:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "783:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "783:53:1" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "773:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "491:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "502:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "514:6:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "522:6:1", - "type": "" - } - ], - "src": "446:407:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "936:207:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "982:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "991:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "994:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "984:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "984:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "984:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "957:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "966:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "953:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "953:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "978:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "949:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "949:32:1" - }, - "nodeType": "YulIf", - "src": "946:2:1" - }, - { - "nodeType": "YulBlock", - "src": "1008:128:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1023:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1037:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1027:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "1052:74:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1098:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "1109:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1094:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1094:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1118:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256_fromMemory", - "nodeType": "YulIdentifier", - "src": "1062:31:1" - }, - "nodeType": "YulFunctionCall", - "src": "1062:64:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1052:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "906:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "917:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "929:6:1", - "type": "" - } - ], - "src": "859:284:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1214:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1231:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1254:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1236:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1236:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1224:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1224:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1224:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1202:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1209:3:1", - "type": "" - } - ], - "src": "1149:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1371:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1381:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1393:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1404:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1389:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1389:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1381:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1461:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1474:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1485:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1470:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1470:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "1417:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "1417:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1417:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1343:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1355:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1366:4:1", - "type": "" - } - ], - "src": "1273:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1546:51:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1556:35:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1585:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint160", - "nodeType": "YulIdentifier", - "src": "1567:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1567:24:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1556:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1528:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1538:7:1", - "type": "" - } - ], - "src": "1501:96:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1648:81:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1658:65:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1673:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1680:42:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1669:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1669:54:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1658:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint160", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1630:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1640:7:1", - "type": "" - } - ], - "src": "1603:126:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1780:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1790:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1801:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1790:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1762:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1772:7:1", - "type": "" - } - ], - "src": "1735:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1861:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1918:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1927:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1930:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1920:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1920:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1920:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1884:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1909:5:1" - } - ], - "functionName": { - "name": "cleanup_t_address", - "nodeType": "YulIdentifier", - "src": "1891:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1891:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1881:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1881:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1874:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1874:43:1" - }, - "nodeType": "YulIf", - "src": "1871:2:1" - } - ] - }, - "name": "validator_revert_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1854:5:1", - "type": "" - } - ], - "src": "1818:122:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1989:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2046:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2055:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2058:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2048:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2048:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2048:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2012:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2037:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "2019:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "2019:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2009:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "2009:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2002:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2002:43:1" - }, - "nodeType": "YulIf", - "src": "1999:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1982:5:1", - "type": "" - } - ], - "src": "1946:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c8063398f72231461003b578063975057e714610057575b600080fd5b610055600480360381019061005091906101af565b610075565b005b61005f61016a565b60405161006c9190610223565b60405180910390f35b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd63983b826040518263ffffffff1660e01b815260040161010e9190610223565b602060405180830381600087803b15801561012857600080fd5b505af115801561013c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016091906101eb565b6001819055505050565b60015481565b60008135905061017f8161027a565b92915050565b60008135905061019481610291565b92915050565b6000815190506101a981610291565b92915050565b600080604083850312156101c257600080fd5b60006101d085828601610170565b92505060206101e185828601610185565b9150509250929050565b6000602082840312156101fd57600080fd5b600061020b8482850161019a565b91505092915050565b61021d81610270565b82525050565b60006020820190506102386000830184610214565b92915050565b600061024982610250565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6102838161023e565b811461028e57600080fd5b50565b61029a81610270565b81146102a557600080fd5b5056fea26469706673582212208b44616dfaba36ab3ed3c66e08e62b41b20549fa87e881fd77e006374d11f86b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x398F7223 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x975057E7 EQ PUSH2 0x57 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x1AF JUMP JUMPDEST PUSH2 0x75 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5F PUSH2 0x16A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6C SWAP2 SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFD63983B DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10E SWAP2 SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x128 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x13C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x160 SWAP2 SWAP1 PUSH2 0x1EB JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x17F DUP2 PUSH2 0x27A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x194 DUP2 PUSH2 0x291 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1A9 DUP2 PUSH2 0x291 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1C2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1D0 DUP6 DUP3 DUP7 ADD PUSH2 0x170 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1E1 DUP6 DUP3 DUP7 ADD PUSH2 0x185 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x20B DUP5 DUP3 DUP6 ADD PUSH2 0x19A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x21D DUP2 PUSH2 0x270 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x238 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x214 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x249 DUP3 PUSH2 0x250 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x283 DUP2 PUSH2 0x23E JUMP JUMPDEST DUP2 EQ PUSH2 0x28E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x29A DUP2 PUSH2 0x270 JUMP JUMPDEST DUP2 EQ PUSH2 0x2A5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP12 DIFFICULTY PUSH2 0x6DFA 0xBA CALLDATASIZE 0xAB RETURNDATACOPY 0xD3 0xC6 PUSH15 0x8E62B41B20549FA87E881FD77E006 CALLDATACOPY 0x4D GT 0xF8 PUSH12 0x64736F6C6343000803003300 ", - "sourceMap": "136:238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;221:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;194:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;221:147;307:5;291:6;;:22;;;;;;;;;;;;;;;;;;335:6;;;;;;;;;;:13;;;349:7;335:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;327:5;:30;;;;221:147;;:::o;194:17::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:143::-;;385:6;379:13;370:22;;401:33;428:5;401:33;:::i;:::-;360:80;;;;:::o;446:407::-;;;571:2;559:9;550:7;546:23;542:32;539:2;;;587:1;584;577:12;539:2;630:1;655:53;700:7;691:6;680:9;676:22;655:53;:::i;:::-;645:63;;601:117;757:2;783:53;828:7;819:6;808:9;804:22;783:53;:::i;:::-;773:63;;728:118;529:324;;;;;:::o;859:284::-;;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:64;1118:7;1109:6;1098:9;1094:22;1062:64;:::i;:::-;1052:74;;1008:128;936:207;;;;:::o;1149:118::-;1236:24;1254:5;1236:24;:::i;:::-;1231:3;1224:37;1214:53;;:::o;1273:222::-;;1404:2;1393:9;1389:18;1381:26;;1417:71;1485:1;1474:9;1470:17;1461:6;1417:71;:::i;:::-;1371:124;;;;:::o;1501:96::-;;1567:24;1585:5;1567:24;:::i;:::-;1556:35;;1546:51;;;:::o;1603:126::-;;1680:42;1673:5;1669:54;1658:65;;1648:81;;;:::o;1735:77::-;;1801:5;1790:16;;1780:32;;;:::o;1818:122::-;1891:24;1909:5;1891:24;:::i;:::-;1884:5;1881:35;1871:2;;1930:1;1927;1920:12;1871:2;1861:79;:::o;1946:122::-;2019:24;2037:5;2019:24;:::i;:::-;2012:5;2009:35;1999:2;;2058:1;2055;2048:12;1999:2;1989:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "146800", - "executionCost": "190", - "totalCost": "146990" - }, - "external": { - "someAction(address,uint256)": "infinite", - "store()": "1129" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 136, "end": 374, "name": "MSTORE", "source": 0 }, - { "begin": 136, "end": 374, "name": "CALLVALUE", "source": 0 }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { "begin": 136, "end": 374, "name": "ISZERO", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 136, "end": 374, "name": "JUMPI", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { "begin": 136, "end": 374, "name": "REVERT", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 136, "end": 374, "name": "JUMPDEST", "source": 0 }, - { "begin": 136, "end": 374, "name": "POP", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 136, "end": 374, "name": "CODECOPY", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 136, "end": 374, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212208b44616dfaba36ab3ed3c66e08e62b41b20549fa87e881fd77e006374d11f86b64736f6c63430008030033", - ".code": [ - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 136, "end": 374, "name": "MSTORE", "source": 0 }, - { "begin": 136, "end": 374, "name": "CALLVALUE", "source": 0 }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { "begin": 136, "end": 374, "name": "ISZERO", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 136, "end": 374, "name": "JUMPI", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { "begin": 136, "end": 374, "name": "REVERT", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 136, "end": 374, "name": "JUMPDEST", "source": 0 }, - { "begin": 136, "end": 374, "name": "POP", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 136, "end": 374, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 136, "end": 374, "name": "LT", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 136, "end": 374, "name": "JUMPI", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 136, "end": 374, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 136, "end": 374, "name": "SHR", "source": 0 }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "398F7223" - }, - { "begin": 136, "end": 374, "name": "EQ", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 136, "end": 374, "name": "JUMPI", "source": 0 }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "975057E7" - }, - { "begin": 136, "end": 374, "name": "EQ", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 136, "end": 374, "name": "JUMPI", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 136, "end": 374, "name": "JUMPDEST", "source": 0 }, - { - "begin": 136, - "end": 374, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 136, "end": 374, "name": "DUP1", "source": 0 }, - { "begin": 136, "end": 374, "name": "REVERT", "source": 0 }, - { - "begin": 221, - "end": 368, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 221, "end": 368, "name": "JUMPDEST", "source": 0 }, - { - "begin": 221, - "end": 368, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 221, - "end": 368, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 221, "end": 368, "name": "DUP1", "source": 0 }, - { "begin": 221, "end": 368, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 221, "end": 368, "name": "SUB", "source": 0 }, - { "begin": 221, "end": 368, "name": "DUP2", "source": 0 }, - { "begin": 221, "end": 368, "name": "ADD", "source": 0 }, - { "begin": 221, "end": 368, "name": "SWAP1", "source": 0 }, - { - "begin": 221, - "end": 368, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 221, "end": 368, "name": "SWAP2", "source": 0 }, - { "begin": 221, "end": 368, "name": "SWAP1", "source": 0 }, - { - "begin": 221, - "end": 368, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 221, - "end": 368, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 221, - "end": 368, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 221, "end": 368, "name": "JUMPDEST", "source": 0 }, - { - "begin": 221, - "end": 368, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 221, - "end": 368, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 221, - "end": 368, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 221, "end": 368, "name": "JUMPDEST", "source": 0 }, - { "begin": 221, "end": 368, "name": "STOP", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 194, "end": 211, "name": "JUMPDEST", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 194, - "end": 211, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 194, - "end": 211, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 194, - "end": 211, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 194, "end": 211, "name": "JUMPDEST", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 194, "end": 211, "name": "MLOAD", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 194, "end": 211, "name": "SWAP2", "source": 0 }, - { "begin": 194, "end": 211, "name": "SWAP1", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 194, - "end": 211, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 194, - "end": 211, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 194, "end": 211, "name": "JUMPDEST", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 194, "end": 211, "name": "MLOAD", "source": 0 }, - { "begin": 194, "end": 211, "name": "DUP1", "source": 0 }, - { "begin": 194, "end": 211, "name": "SWAP2", "source": 0 }, - { "begin": 194, "end": 211, "name": "SUB", "source": 0 }, - { "begin": 194, "end": 211, "name": "SWAP1", "source": 0 }, - { "begin": 194, "end": 211, "name": "RETURN", "source": 0 }, - { - "begin": 221, - "end": 368, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 221, "end": 368, "name": "JUMPDEST", "source": 0 }, - { "begin": 307, "end": 312, "name": "DUP2", "source": 0 }, - { - "begin": 291, - "end": 297, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 291, "end": 297, "name": "DUP1", "source": 0 }, - { - "begin": 291, - "end": 313, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 291, "end": 313, "name": "EXP", "source": 0 }, - { "begin": 291, "end": 313, "name": "DUP2", "source": 0 }, - { "begin": 291, "end": 313, "name": "SLOAD", "source": 0 }, - { "begin": 291, "end": 313, "name": "DUP2", "source": 0 }, - { - "begin": 291, - "end": 313, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 291, "end": 313, "name": "MUL", "source": 0 }, - { "begin": 291, "end": 313, "name": "NOT", "source": 0 }, - { "begin": 291, "end": 313, "name": "AND", "source": 0 }, - { "begin": 291, "end": 313, "name": "SWAP1", "source": 0 }, - { "begin": 291, "end": 313, "name": "DUP4", "source": 0 }, - { - "begin": 291, - "end": 313, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 291, "end": 313, "name": "AND", "source": 0 }, - { "begin": 291, "end": 313, "name": "MUL", "source": 0 }, - { "begin": 291, "end": 313, "name": "OR", "source": 0 }, - { "begin": 291, "end": 313, "name": "SWAP1", "source": 0 }, - { "begin": 291, "end": 313, "name": "SSTORE", "source": 0 }, - { "begin": 291, "end": 313, "name": "POP", "source": 0 }, - { - "begin": 335, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 335, "end": 341, "name": "DUP1", "source": 0 }, - { "begin": 335, "end": 341, "name": "SLOAD", "source": 0 }, - { "begin": 335, "end": 341, "name": "SWAP1", "source": 0 }, - { - "begin": 335, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 335, "end": 341, "name": "EXP", "source": 0 }, - { "begin": 335, "end": 341, "name": "SWAP1", "source": 0 }, - { "begin": 335, "end": 341, "name": "DIV", "source": 0 }, - { - "begin": 335, - "end": 341, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 335, "end": 341, "name": "AND", "source": 0 }, - { - "begin": 335, - "end": 348, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 335, "end": 348, "name": "AND", "source": 0 }, - { - "begin": 335, - "end": 348, - "name": "PUSH", - "source": 0, - "value": "FD63983B" - }, - { "begin": 349, "end": 356, "name": "DUP3", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 335, "end": 357, "name": "MLOAD", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP3", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" - }, - { "begin": 335, "end": 357, "name": "AND", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 335, "end": 357, "name": "SHL", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP2", "source": 0 }, - { "begin": 335, "end": 357, "name": "MSTORE", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 335, "end": 357, "name": "ADD", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 335, "end": 357, "name": "SWAP2", "source": 0 }, - { "begin": 335, "end": 357, "name": "SWAP1", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 335, - "end": 357, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 335, - "end": 357, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 335, "end": 357, "name": "JUMPDEST", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 335, "end": 357, "name": "MLOAD", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP1", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP4", "source": 0 }, - { "begin": 335, "end": 357, "name": "SUB", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP2", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 335, "end": 357, "name": "DUP8", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP1", "source": 0 }, - { "begin": 335, "end": 357, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 335, "end": 357, "name": "ISZERO", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP1", "source": 0 }, - { "begin": 335, "end": 357, "name": "ISZERO", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 335, "end": 357, "name": "JUMPI", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 335, "end": 357, "name": "DUP1", "source": 0 }, - { "begin": 335, "end": 357, "name": "REVERT", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 335, "end": 357, "name": "JUMPDEST", "source": 0 }, - { "begin": 335, "end": 357, "name": "POP", "source": 0 }, - { "begin": 335, "end": 357, "name": "GAS", "source": 0 }, - { "begin": 335, "end": 357, "name": "CALL", "source": 0 }, - { "begin": 335, "end": 357, "name": "ISZERO", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP1", "source": 0 }, - { "begin": 335, "end": 357, "name": "ISZERO", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { "begin": 335, "end": 357, "name": "JUMPI", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "RETURNDATASIZE", - "source": 0 - }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 335, "end": 357, "name": "DUP1", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "RETURNDATACOPY", - "source": 0 - }, - { - "begin": 335, - "end": 357, - "name": "RETURNDATASIZE", - "source": 0 - }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 335, "end": 357, "name": "REVERT", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "tag", - "source": 0, - "value": "17" - }, - { "begin": 335, "end": 357, "name": "JUMPDEST", "source": 0 }, - { "begin": 335, "end": 357, "name": "POP", "source": 0 }, - { "begin": 335, "end": 357, "name": "POP", "source": 0 }, - { "begin": 335, "end": 357, "name": "POP", "source": 0 }, - { "begin": 335, "end": 357, "name": "POP", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 335, "end": 357, "name": "MLOAD", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "RETURNDATASIZE", - "source": 0 - }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "1F" - }, - { "begin": 335, "end": 357, "name": "NOT", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "1F" - }, - { "begin": 335, "end": 357, "name": "DUP3", "source": 0 }, - { "begin": 335, "end": 357, "name": "ADD", "source": 0 }, - { "begin": 335, "end": 357, "name": "AND", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP3", "source": 0 }, - { "begin": 335, "end": 357, "name": "ADD", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP1", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 335, "end": 357, "name": "MSTORE", "source": 0 }, - { "begin": 335, "end": 357, "name": "POP", "source": 0 }, - { "begin": 335, "end": 357, "name": "DUP2", "source": 0 }, - { "begin": 335, "end": 357, "name": "ADD", "source": 0 }, - { "begin": 335, "end": 357, "name": "SWAP1", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 335, "end": 357, "name": "SWAP2", "source": 0 }, - { "begin": 335, "end": 357, "name": "SWAP1", "source": 0 }, - { - "begin": 335, - "end": 357, - "name": "PUSH [tag]", - "source": 0, - "value": "19" - }, - { - "begin": 335, - "end": 357, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 335, - "end": 357, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 335, "end": 357, "name": "JUMPDEST", "source": 0 }, - { - "begin": 327, - "end": 332, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 327, "end": 357, "name": "DUP2", "source": 0 }, - { "begin": 327, "end": 357, "name": "SWAP1", "source": 0 }, - { "begin": 327, "end": 357, "name": "SSTORE", "source": 0 }, - { "begin": 327, "end": 357, "name": "POP", "source": 0 }, - { "begin": 221, "end": 368, "name": "POP", "source": 0 }, - { "begin": 221, "end": 368, "name": "POP", "source": 0 }, - { - "begin": 221, - "end": 368, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 194, - "end": 211, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 194, "end": 211, "name": "JUMPDEST", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 194, "end": 211, "name": "SLOAD", "source": 0 }, - { "begin": 194, "end": 211, "name": "DUP2", "source": 0 }, - { - "begin": 194, - "end": 211, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 291, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 152, "end": 291, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 291, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 236, "end": 242, "name": "DUP2", "source": 1 }, - { "begin": 223, "end": 243, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 214, "end": 243, "name": "SWAP1", "source": 1 }, - { "begin": 214, "end": 243, "name": "POP", "source": 1 }, - { - "begin": 252, - "end": 285, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { "begin": 279, "end": 284, "name": "DUP2", "source": 1 }, - { - "begin": 252, - "end": 285, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 252, - "end": 285, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 252, - "end": 285, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 252, "end": 285, "name": "JUMPDEST", "source": 1 }, - { "begin": 204, "end": 291, "name": "SWAP3", "source": 1 }, - { "begin": 204, "end": 291, "name": "SWAP2", "source": 1 }, - { "begin": 204, "end": 291, "name": "POP", "source": 1 }, - { "begin": 204, "end": 291, "name": "POP", "source": 1 }, - { - "begin": 204, - "end": 291, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 297, - "end": 440, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 297, "end": 440, "name": "JUMPDEST", "source": 1 }, - { - "begin": 297, - "end": 440, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 385, "end": 391, "name": "DUP2", "source": 1 }, - { "begin": 379, "end": 392, "name": "MLOAD", "source": 1 }, - { "begin": 370, "end": 392, "name": "SWAP1", "source": 1 }, - { "begin": 370, "end": 392, "name": "POP", "source": 1 }, - { - "begin": 401, - "end": 434, - "name": "PUSH [tag]", - "source": 1, - "value": "31" - }, - { "begin": 428, "end": 433, "name": "DUP2", "source": 1 }, - { - "begin": 401, - "end": 434, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 401, - "end": 434, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 401, - "end": 434, - "name": "tag", - "source": 1, - "value": "31" - }, - { "begin": 401, "end": 434, "name": "JUMPDEST", "source": 1 }, - { "begin": 360, "end": 440, "name": "SWAP3", "source": 1 }, - { "begin": 360, "end": 440, "name": "SWAP2", "source": 1 }, - { "begin": 360, "end": 440, "name": "POP", "source": 1 }, - { "begin": 360, "end": 440, "name": "POP", "source": 1 }, - { - "begin": 360, - "end": 440, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 446, - "end": 853, - "name": "tag", - "source": 1, - "value": "7" - }, - { "begin": 446, "end": 853, "name": "JUMPDEST", "source": 1 }, - { - "begin": 446, - "end": 853, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 446, "end": 853, "name": "DUP1", "source": 1 }, - { - "begin": 571, - "end": 573, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 559, "end": 568, "name": "DUP4", "source": 1 }, - { "begin": 550, "end": 557, "name": "DUP6", "source": 1 }, - { "begin": 546, "end": 569, "name": "SUB", "source": 1 }, - { "begin": 542, "end": 574, "name": "SLT", "source": 1 }, - { "begin": 539, "end": 541, "name": "ISZERO", "source": 1 }, - { - "begin": 539, - "end": 541, - "name": "PUSH [tag]", - "source": 1, - "value": "33" - }, - { "begin": 539, "end": 541, "name": "JUMPI", "source": 1 }, - { - "begin": 587, - "end": 588, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 584, "end": 585, "name": "DUP1", "source": 1 }, - { "begin": 577, "end": 589, "name": "REVERT", "source": 1 }, - { - "begin": 539, - "end": 541, - "name": "tag", - "source": 1, - "value": "33" - }, - { "begin": 539, "end": 541, "name": "JUMPDEST", "source": 1 }, - { - "begin": 630, - "end": 631, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 655, - "end": 708, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { "begin": 700, "end": 707, "name": "DUP6", "source": 1 }, - { "begin": 691, "end": 697, "name": "DUP3", "source": 1 }, - { "begin": 680, "end": 689, "name": "DUP7", "source": 1 }, - { "begin": 676, "end": 698, "name": "ADD", "source": 1 }, - { - "begin": 655, - "end": 708, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 655, - "end": 708, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 655, - "end": 708, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 655, "end": 708, "name": "JUMPDEST", "source": 1 }, - { "begin": 645, "end": 708, "name": "SWAP3", "source": 1 }, - { "begin": 645, "end": 708, "name": "POP", "source": 1 }, - { "begin": 601, "end": 718, "name": "POP", "source": 1 }, - { - "begin": 757, - "end": 759, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { - "begin": 783, - "end": 836, - "name": "PUSH [tag]", - "source": 1, - "value": "35" - }, - { "begin": 828, "end": 835, "name": "DUP6", "source": 1 }, - { "begin": 819, "end": 825, "name": "DUP3", "source": 1 }, - { "begin": 808, "end": 817, "name": "DUP7", "source": 1 }, - { "begin": 804, "end": 826, "name": "ADD", "source": 1 }, - { - "begin": 783, - "end": 836, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 783, - "end": 836, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 783, - "end": 836, - "name": "tag", - "source": 1, - "value": "35" - }, - { "begin": 783, "end": 836, "name": "JUMPDEST", "source": 1 }, - { "begin": 773, "end": 836, "name": "SWAP2", "source": 1 }, - { "begin": 773, "end": 836, "name": "POP", "source": 1 }, - { "begin": 728, "end": 846, "name": "POP", "source": 1 }, - { "begin": 529, "end": 853, "name": "SWAP3", "source": 1 }, - { "begin": 529, "end": 853, "name": "POP", "source": 1 }, - { "begin": 529, "end": 853, "name": "SWAP3", "source": 1 }, - { "begin": 529, "end": 853, "name": "SWAP1", "source": 1 }, - { "begin": 529, "end": 853, "name": "POP", "source": 1 }, - { - "begin": 529, - "end": 853, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 859, - "end": 1143, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 859, "end": 1143, "name": "JUMPDEST", "source": 1 }, - { - "begin": 859, - "end": 1143, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 978, - "end": 980, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 966, "end": 975, "name": "DUP3", "source": 1 }, - { "begin": 957, "end": 964, "name": "DUP5", "source": 1 }, - { "begin": 953, "end": 976, "name": "SUB", "source": 1 }, - { "begin": 949, "end": 981, "name": "SLT", "source": 1 }, - { "begin": 946, "end": 948, "name": "ISZERO", "source": 1 }, - { - "begin": 946, - "end": 948, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { "begin": 946, "end": 948, "name": "JUMPI", "source": 1 }, - { - "begin": 994, - "end": 995, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 991, "end": 992, "name": "DUP1", "source": 1 }, - { "begin": 984, "end": 996, "name": "REVERT", "source": 1 }, - { - "begin": 946, - "end": 948, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 946, "end": 948, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1037, - "end": 1038, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1062, - "end": 1126, - "name": "PUSH [tag]", - "source": 1, - "value": "38" - }, - { "begin": 1118, "end": 1125, "name": "DUP5", "source": 1 }, - { "begin": 1109, "end": 1115, "name": "DUP3", "source": 1 }, - { "begin": 1098, "end": 1107, "name": "DUP6", "source": 1 }, - { "begin": 1094, "end": 1116, "name": "ADD", "source": 1 }, - { - "begin": 1062, - "end": 1126, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { - "begin": 1062, - "end": 1126, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1062, - "end": 1126, - "name": "tag", - "source": 1, - "value": "38" - }, - { "begin": 1062, "end": 1126, "name": "JUMPDEST", "source": 1 }, - { "begin": 1052, "end": 1126, "name": "SWAP2", "source": 1 }, - { "begin": 1052, "end": 1126, "name": "POP", "source": 1 }, - { "begin": 1008, "end": 1136, "name": "POP", "source": 1 }, - { "begin": 936, "end": 1143, "name": "SWAP3", "source": 1 }, - { "begin": 936, "end": 1143, "name": "SWAP2", "source": 1 }, - { "begin": 936, "end": 1143, "name": "POP", "source": 1 }, - { "begin": 936, "end": 1143, "name": "POP", "source": 1 }, - { - "begin": 936, - "end": 1143, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1149, - "end": 1267, - "name": "tag", - "source": 1, - "value": "39" - }, - { "begin": 1149, "end": 1267, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1236, - "end": 1260, - "name": "PUSH [tag]", - "source": 1, - "value": "41" - }, - { "begin": 1254, "end": 1259, "name": "DUP2", "source": 1 }, - { - "begin": 1236, - "end": 1260, - "name": "PUSH [tag]", - "source": 1, - "value": "42" - }, - { - "begin": 1236, - "end": 1260, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1236, - "end": 1260, - "name": "tag", - "source": 1, - "value": "41" - }, - { "begin": 1236, "end": 1260, "name": "JUMPDEST", "source": 1 }, - { "begin": 1231, "end": 1234, "name": "DUP3", "source": 1 }, - { "begin": 1224, "end": 1261, "name": "MSTORE", "source": 1 }, - { "begin": 1214, "end": 1267, "name": "POP", "source": 1 }, - { "begin": 1214, "end": 1267, "name": "POP", "source": 1 }, - { - "begin": 1214, - "end": 1267, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1273, - "end": 1495, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 1273, "end": 1495, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1273, - "end": 1495, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1404, - "end": 1406, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1393, "end": 1402, "name": "DUP3", "source": 1 }, - { "begin": 1389, "end": 1407, "name": "ADD", "source": 1 }, - { "begin": 1381, "end": 1407, "name": "SWAP1", "source": 1 }, - { "begin": 1381, "end": 1407, "name": "POP", "source": 1 }, - { - "begin": 1417, - "end": 1488, - "name": "PUSH [tag]", - "source": 1, - "value": "44" - }, - { - "begin": 1485, - "end": 1486, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1474, "end": 1483, "name": "DUP4", "source": 1 }, - { "begin": 1470, "end": 1487, "name": "ADD", "source": 1 }, - { "begin": 1461, "end": 1467, "name": "DUP5", "source": 1 }, - { - "begin": 1417, - "end": 1488, - "name": "PUSH [tag]", - "source": 1, - "value": "39" - }, - { - "begin": 1417, - "end": 1488, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1417, - "end": 1488, - "name": "tag", - "source": 1, - "value": "44" - }, - { "begin": 1417, "end": 1488, "name": "JUMPDEST", "source": 1 }, - { "begin": 1371, "end": 1495, "name": "SWAP3", "source": 1 }, - { "begin": 1371, "end": 1495, "name": "SWAP2", "source": 1 }, - { "begin": 1371, "end": 1495, "name": "POP", "source": 1 }, - { "begin": 1371, "end": 1495, "name": "POP", "source": 1 }, - { - "begin": 1371, - "end": 1495, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1501, - "end": 1597, - "name": "tag", - "source": 1, - "value": "45" - }, - { "begin": 1501, "end": 1597, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1501, - "end": 1597, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1567, - "end": 1591, - "name": "PUSH [tag]", - "source": 1, - "value": "47" - }, - { "begin": 1585, "end": 1590, "name": "DUP3", "source": 1 }, - { - "begin": 1567, - "end": 1591, - "name": "PUSH [tag]", - "source": 1, - "value": "48" - }, - { - "begin": 1567, - "end": 1591, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1567, - "end": 1591, - "name": "tag", - "source": 1, - "value": "47" - }, - { "begin": 1567, "end": 1591, "name": "JUMPDEST", "source": 1 }, - { "begin": 1556, "end": 1591, "name": "SWAP1", "source": 1 }, - { "begin": 1556, "end": 1591, "name": "POP", "source": 1 }, - { "begin": 1546, "end": 1597, "name": "SWAP2", "source": 1 }, - { "begin": 1546, "end": 1597, "name": "SWAP1", "source": 1 }, - { "begin": 1546, "end": 1597, "name": "POP", "source": 1 }, - { - "begin": 1546, - "end": 1597, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1603, - "end": 1729, - "name": "tag", - "source": 1, - "value": "48" - }, - { "begin": 1603, "end": 1729, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1603, - "end": 1729, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1680, - "end": 1722, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 1673, "end": 1678, "name": "DUP3", "source": 1 }, - { "begin": 1669, "end": 1723, "name": "AND", "source": 1 }, - { "begin": 1658, "end": 1723, "name": "SWAP1", "source": 1 }, - { "begin": 1658, "end": 1723, "name": "POP", "source": 1 }, - { "begin": 1648, "end": 1729, "name": "SWAP2", "source": 1 }, - { "begin": 1648, "end": 1729, "name": "SWAP1", "source": 1 }, - { "begin": 1648, "end": 1729, "name": "POP", "source": 1 }, - { - "begin": 1648, - "end": 1729, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1735, - "end": 1812, - "name": "tag", - "source": 1, - "value": "42" - }, - { "begin": 1735, "end": 1812, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1735, - "end": 1812, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1801, "end": 1806, "name": "DUP2", "source": 1 }, - { "begin": 1790, "end": 1806, "name": "SWAP1", "source": 1 }, - { "begin": 1790, "end": 1806, "name": "POP", "source": 1 }, - { "begin": 1780, "end": 1812, "name": "SWAP2", "source": 1 }, - { "begin": 1780, "end": 1812, "name": "SWAP1", "source": 1 }, - { "begin": 1780, "end": 1812, "name": "POP", "source": 1 }, - { - "begin": 1780, - "end": 1812, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1818, - "end": 1940, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 1818, "end": 1940, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1891, - "end": 1915, - "name": "PUSH [tag]", - "source": 1, - "value": "52" - }, - { "begin": 1909, "end": 1914, "name": "DUP2", "source": 1 }, - { - "begin": 1891, - "end": 1915, - "name": "PUSH [tag]", - "source": 1, - "value": "45" - }, - { - "begin": 1891, - "end": 1915, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1891, - "end": 1915, - "name": "tag", - "source": 1, - "value": "52" - }, - { "begin": 1891, "end": 1915, "name": "JUMPDEST", "source": 1 }, - { "begin": 1884, "end": 1889, "name": "DUP2", "source": 1 }, - { "begin": 1881, "end": 1916, "name": "EQ", "source": 1 }, - { - "begin": 1871, - "end": 1873, - "name": "PUSH [tag]", - "source": 1, - "value": "53" - }, - { "begin": 1871, "end": 1873, "name": "JUMPI", "source": 1 }, - { - "begin": 1930, - "end": 1931, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1927, "end": 1928, "name": "DUP1", "source": 1 }, - { "begin": 1920, "end": 1932, "name": "REVERT", "source": 1 }, - { - "begin": 1871, - "end": 1873, - "name": "tag", - "source": 1, - "value": "53" - }, - { "begin": 1871, "end": 1873, "name": "JUMPDEST", "source": 1 }, - { "begin": 1861, "end": 1940, "name": "POP", "source": 1 }, - { - "begin": 1861, - "end": 1940, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1946, - "end": 2068, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 1946, "end": 2068, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2019, - "end": 2043, - "name": "PUSH [tag]", - "source": 1, - "value": "55" - }, - { "begin": 2037, "end": 2042, "name": "DUP2", "source": 1 }, - { - "begin": 2019, - "end": 2043, - "name": "PUSH [tag]", - "source": 1, - "value": "42" - }, - { - "begin": 2019, - "end": 2043, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2019, - "end": 2043, - "name": "tag", - "source": 1, - "value": "55" - }, - { "begin": 2019, "end": 2043, "name": "JUMPDEST", "source": 1 }, - { "begin": 2012, "end": 2017, "name": "DUP2", "source": 1 }, - { "begin": 2009, "end": 2044, "name": "EQ", "source": 1 }, - { - "begin": 1999, - "end": 2001, - "name": "PUSH [tag]", - "source": 1, - "value": "56" - }, - { "begin": 1999, "end": 2001, "name": "JUMPI", "source": 1 }, - { - "begin": 2058, - "end": 2059, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2055, "end": 2056, "name": "DUP1", "source": 1 }, - { "begin": 2048, "end": 2060, "name": "REVERT", "source": 1 }, - { - "begin": 1999, - "end": 2001, - "name": "tag", - "source": 1, - "value": "56" - }, - { "begin": 1999, "end": 2001, "name": "JUMPDEST", "source": 1 }, - { "begin": 1989, "end": 2068, "name": "POP", "source": 1 }, - { - "begin": 1989, - "end": 2068, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "someAction(address,uint256)": "398f7223", - "store()": "975057e7" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_number\",\"type\":\"uint256\"}],\"name\":\"someAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"store\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Caller\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa202f20982a227156b2ffee8e5066c8682d3d5d26496e43ea5190d9facb8afb3\",\"urls\":[\"bzz-raw://f8db628e4181d8bca1a4a38b01424d609ee2f5f24872e89b6bf80a14cf0cd775\",\"dweb:/ipfs/QmQ2pjvkX5PGxwHU57fPjCprvAsbKZdw9pVkeT8Kz3zj35\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 12, - "contract": "main.sol:Caller", - "label": "callee", - "offset": 0, - "slot": "0", - "type": "t_contract(Callee)9" - }, - { - "astId": 14, - "contract": "main.sol:Caller", - "label": "store", - "offset": 0, - "slot": "1", - "type": "t_uint256" - } - ], - "types": { - "t_contract(Callee)9": { - "encoding": "inplace", - "label": "contract Callee", - "numberOfBytes": "20" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n interface Callee {\n function addtwo(uint _value) external returns (uint result);\n } \n contract Caller {\n Callee internal callee;\n uint public store;\n function someAction(address _addr, uint _number) public {\n callee = Callee(_addr);\n store = callee.addtwo(_number);\n }\n }" -} diff --git a/tests/contracts/compiled/CheckBlockVariables.json b/tests/contracts/compiled/CheckBlockVariables.json deleted file mode 100644 index 0e757e7a00..0000000000 --- a/tests/contracts/compiled/CheckBlockVariables.json +++ /dev/null @@ -1,1525 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b504560008190555046600181905550436002819055506101af806100356000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631a93d1c3146100675780633408e470146100855780634a57f8ee146100a35780634a9066da146100c1578063f2c9ecd8146100df578063fb3e8bda146100fd575b600080fd5b61006f61011b565b60405161007c9190610154565b60405180910390f35b61008d610123565b60405161009a9190610154565b60405180910390f35b6100ab61012b565b6040516100b89190610154565b60405180910390f35b6100c9610131565b6040516100d69190610154565b60405180910390f35b6100e7610137565b6040516100f49190610154565b60405180910390f35b61010561013f565b6040516101129190610154565b60405180910390f35b600045905090565b600046905090565b60005481565b60025481565b600043905090565b60015481565b61014e8161016f565b82525050565b60006020820190506101696000830184610145565b92915050565b600081905091905056fea26469706673582212204576ad7207e2ee7a9a137501ec81c6ee5809472b80aa16582ef77ca8f1188e4364736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "getChainId", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getGasLimit", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNumber", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialchainid", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialgaslimit", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialnumber", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:665 contract CheckBlockVariables {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":190:347 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":236:250 block.gaslimit */\n gaslimit\n /* \"main.sol\":218:233 initialgaslimit */\n 0x00\n /* \"main.sol\":218:250 initialgaslimit = block.gaslimit */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":281:294 block.chainid */\n chainid\n /* \"main.sol\":264:278 initialchainid */\n 0x01\n /* \"main.sol\":264:294 initialchainid = block.chainid */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":324:336 block.number */\n number\n /* \"main.sol\":308:321 initialnumber */\n 0x02\n /* \"main.sol\":308:336 initialnumber = block.number */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":34:665 contract CheckBlockVariables {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:665 contract CheckBlockVariables {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x1a93d1c3\n eq\n tag_3\n jumpi\n dup1\n 0x3408e470\n eq\n tag_4\n jumpi\n dup1\n 0x4a57f8ee\n eq\n tag_5\n jumpi\n dup1\n 0x4a9066da\n eq\n tag_6\n jumpi\n dup1\n 0xf2c9ecd8\n eq\n tag_7\n jumpi\n dup1\n 0xfb3e8bda\n eq\n tag_8\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":357:453 function getGasLimit() public view returns (uint) {... */\n tag_3:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n mload(0x40)\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":463:557 function getChainId() public view returns (uint) {... */\n tag_4:\n tag_13\n tag_14\n jump\t// in\n tag_13:\n mload(0x40)\n tag_15\n swap2\n swap1\n tag_12\n jump\t// in\n tag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":73:100 uint public initialgaslimit */\n tag_5:\n tag_16\n tag_17\n jump\t// in\n tag_16:\n mload(0x40)\n tag_18\n swap2\n swap1\n tag_12\n jump\t// in\n tag_18:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":146:171 uint public initialnumber */\n tag_6:\n tag_19\n tag_20\n jump\t// in\n tag_19:\n mload(0x40)\n tag_21\n swap2\n swap1\n tag_12\n jump\t// in\n tag_21:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":567:659 function getNumber() public view returns (uint) {... */\n tag_7:\n tag_22\n tag_23\n jump\t// in\n tag_22:\n mload(0x40)\n tag_24\n swap2\n swap1\n tag_12\n jump\t// in\n tag_24:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":110:136 uint public initialchainid */\n tag_8:\n tag_25\n tag_26\n jump\t// in\n tag_25:\n mload(0x40)\n tag_27\n swap2\n swap1\n tag_12\n jump\t// in\n tag_27:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":357:453 function getGasLimit() public view returns (uint) {... */\n tag_10:\n /* \"main.sol\":401:405 uint */\n 0x00\n /* \"main.sol\":428:442 block.gaslimit */\n gaslimit\n /* \"main.sol\":421:442 return block.gaslimit */\n swap1\n pop\n /* \"main.sol\":357:453 function getGasLimit() public view returns (uint) {... */\n swap1\n jump\t// out\n /* \"main.sol\":463:557 function getChainId() public view returns (uint) {... */\n tag_14:\n /* \"main.sol\":506:510 uint */\n 0x00\n /* \"main.sol\":533:546 block.chainid */\n chainid\n /* \"main.sol\":526:546 return block.chainid */\n swap1\n pop\n /* \"main.sol\":463:557 function getChainId() public view returns (uint) {... */\n swap1\n jump\t// out\n /* \"main.sol\":73:100 uint public initialgaslimit */\n tag_17:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":146:171 uint public initialnumber */\n tag_20:\n sload(0x02)\n dup2\n jump\t// out\n /* \"main.sol\":567:659 function getNumber() public view returns (uint) {... */\n tag_23:\n /* \"main.sol\":609:613 uint */\n 0x00\n /* \"main.sol\":636:648 block.number */\n number\n /* \"main.sol\":629:648 return block.number */\n swap1\n pop\n /* \"main.sol\":567:659 function getNumber() public view returns (uint) {... */\n swap1\n jump\t// out\n /* \"main.sol\":110:136 uint public initialchainid */\n tag_26:\n sload(0x01)\n dup2\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_32:\n /* \"#utility.yul\":94:118 */\n tag_34\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_35\n jump\t// in\n tag_34:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_12:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_37\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_32\n jump\t// in\n tag_37:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:436 */\n tag_35:\n 0x00\n /* \"#utility.yul\":425:430 */\n dup2\n /* \"#utility.yul\":414:430 */\n swap1\n pop\n /* \"#utility.yul\":404:436 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212204576ad7207e2ee7a9a137501ec81c6ee5809472b80aa16582ef77ca8f1188e4364736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b504560008190555046600181905550436002819055506101af806100356000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631a93d1c3146100675780633408e470146100855780634a57f8ee146100a35780634a9066da146100c1578063f2c9ecd8146100df578063fb3e8bda146100fd575b600080fd5b61006f61011b565b60405161007c9190610154565b60405180910390f35b61008d610123565b60405161009a9190610154565b60405180910390f35b6100ab61012b565b6040516100b89190610154565b60405180910390f35b6100c9610131565b6040516100d69190610154565b60405180910390f35b6100e7610137565b6040516100f49190610154565b60405180910390f35b61010561013f565b6040516101129190610154565b60405180910390f35b600045905090565b600046905090565b60005481565b60025481565b600043905090565b60015481565b61014e8161016f565b82525050565b60006020820190506101696000830184610145565b92915050565b600081905091905056fea26469706673582212204576ad7207e2ee7a9a137501ec81c6ee5809472b80aa16582ef77ca8f1188e4364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GASLIMIT PUSH1 0x0 DUP2 SWAP1 SSTORE POP CHAINID PUSH1 0x1 DUP2 SWAP1 SSTORE POP NUMBER PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH2 0x1AF DUP1 PUSH2 0x35 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1A93D1C3 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x4A57F8EE EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x4A9066DA EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0xF2C9ECD8 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xFB3E8BDA EQ PUSH2 0xFD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x11B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7C SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH2 0x123 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAB PUSH2 0x12B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x131 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD6 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE7 PUSH2 0x137 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x105 PUSH2 0x13F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x112 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 GASLIMIT SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 NUMBER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x14E DUP2 PUSH2 0x16F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x169 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x145 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASLIMIT PUSH23 0xAD7207E2EE7A9A137501EC81C6EE5809472B80AA16582E 0xF7 PUSH29 0xA8F1188E4364736F6C6343000803003300000000000000000000000000 ", - "sourceMap": "34:631:0:-:0;;;190:157;;;;;;;;;;236:14;218:15;:32;;;;281:13;264:14;:30;;;;324:12;308:13;:28;;;;34:631;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:439:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "404:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "414:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "425:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "414:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "386:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "396:7:1", - "type": "" - } - ], - "src": "359:77:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100625760003560e01c80631a93d1c3146100675780633408e470146100855780634a57f8ee146100a35780634a9066da146100c1578063f2c9ecd8146100df578063fb3e8bda146100fd575b600080fd5b61006f61011b565b60405161007c9190610154565b60405180910390f35b61008d610123565b60405161009a9190610154565b60405180910390f35b6100ab61012b565b6040516100b89190610154565b60405180910390f35b6100c9610131565b6040516100d69190610154565b60405180910390f35b6100e7610137565b6040516100f49190610154565b60405180910390f35b61010561013f565b6040516101129190610154565b60405180910390f35b600045905090565b600046905090565b60005481565b60025481565b600043905090565b60015481565b61014e8161016f565b82525050565b60006020820190506101696000830184610145565b92915050565b600081905091905056fea26469706673582212204576ad7207e2ee7a9a137501ec81c6ee5809472b80aa16582ef77ca8f1188e4364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x62 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1A93D1C3 EQ PUSH2 0x67 JUMPI DUP1 PUSH4 0x3408E470 EQ PUSH2 0x85 JUMPI DUP1 PUSH4 0x4A57F8EE EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x4A9066DA EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0xF2C9ECD8 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0xFB3E8BDA EQ PUSH2 0xFD JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x6F PUSH2 0x11B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x7C SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8D PUSH2 0x123 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAB PUSH2 0x12B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x131 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD6 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE7 PUSH2 0x137 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x105 PUSH2 0x13F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x112 SWAP2 SWAP1 PUSH2 0x154 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 GASLIMIT SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CHAINID SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 NUMBER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x14E DUP2 PUSH2 0x16F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x169 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x145 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASLIMIT PUSH23 0xAD7207E2EE7A9A137501EC81C6EE5809472B80AA16582E 0xF7 PUSH29 0xA8F1188E4364736F6C6343000803003300000000000000000000000000 ", - "sourceMap": "34:631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;357:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;463:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;73:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;146:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;567:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;110:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;357:96;401:4;428:14;421:21;;357:96;:::o;463:94::-;506:4;533:13;526:20;;463:94;:::o;73:27::-;;;;:::o;146:25::-;;;;:::o;567:92::-;609:4;636:12;629:19;;567:92;:::o;110:26::-;;;;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "86200", - "executionCost": "60174", - "totalCost": "146374" - }, - "external": { - "getChainId()": "336", - "getGasLimit()": "314", - "getNumber()": "402", - "initialchainid()": "1217", - "initialgaslimit()": "1151", - "initialnumber()": "1173" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 665, "name": "MSTORE", "source": 0 }, - { "begin": 190, "end": 347, "name": "CALLVALUE", "source": 0 }, - { "begin": 190, "end": 347, "name": "DUP1", "source": 0 }, - { "begin": 190, "end": 347, "name": "ISZERO", "source": 0 }, - { - "begin": 190, - "end": 347, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 190, "end": 347, "name": "JUMPI", "source": 0 }, - { - "begin": 190, - "end": 347, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 190, "end": 347, "name": "DUP1", "source": 0 }, - { "begin": 190, "end": 347, "name": "REVERT", "source": 0 }, - { - "begin": 190, - "end": 347, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 190, "end": 347, "name": "JUMPDEST", "source": 0 }, - { "begin": 190, "end": 347, "name": "POP", "source": 0 }, - { "begin": 236, "end": 250, "name": "GASLIMIT", "source": 0 }, - { - "begin": 218, - "end": 233, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 218, "end": 250, "name": "DUP2", "source": 0 }, - { "begin": 218, "end": 250, "name": "SWAP1", "source": 0 }, - { "begin": 218, "end": 250, "name": "SSTORE", "source": 0 }, - { "begin": 218, "end": 250, "name": "POP", "source": 0 }, - { "begin": 281, "end": 294, "name": "CHAINID", "source": 0 }, - { - "begin": 264, - "end": 278, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 264, "end": 294, "name": "DUP2", "source": 0 }, - { "begin": 264, "end": 294, "name": "SWAP1", "source": 0 }, - { "begin": 264, "end": 294, "name": "SSTORE", "source": 0 }, - { "begin": 264, "end": 294, "name": "POP", "source": 0 }, - { "begin": 324, "end": 336, "name": "NUMBER", "source": 0 }, - { - "begin": 308, - "end": 321, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 308, "end": 336, "name": "DUP2", "source": 0 }, - { "begin": 308, "end": 336, "name": "SWAP1", "source": 0 }, - { "begin": 308, "end": 336, "name": "SSTORE", "source": 0 }, - { "begin": 308, "end": 336, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 665, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 665, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212204576ad7207e2ee7a9a137501ec81c6ee5809472b80aa16582ef77ca8f1188e4364736f6c63430008030033", - ".code": [ - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 665, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 665, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 665, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 665, "name": "REVERT", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 665, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 665, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 665, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 665, "name": "LT", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 665, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 34, "end": 665, "name": "SHR", "source": 0 }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "1A93D1C3" - }, - { "begin": 34, "end": 665, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "3408E470" - }, - { "begin": 34, "end": 665, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "4A57F8EE" - }, - { "begin": 34, "end": 665, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "4A9066DA" - }, - { "begin": 34, "end": 665, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "F2C9ECD8" - }, - { "begin": 34, "end": 665, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "FB3E8BDA" - }, - { "begin": 34, "end": 665, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 34, "end": 665, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 665, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 665, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 665, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 665, "name": "REVERT", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 357, "end": 453, "name": "JUMPDEST", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 357, - "end": 453, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 357, - "end": 453, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 357, - "end": 453, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 357, "end": 453, "name": "JUMPDEST", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 357, "end": 453, "name": "MLOAD", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 357, "end": 453, "name": "SWAP2", "source": 0 }, - { "begin": 357, "end": 453, "name": "SWAP1", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 357, - "end": 453, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 357, - "end": 453, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 357, "end": 453, "name": "JUMPDEST", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 357, "end": 453, "name": "MLOAD", "source": 0 }, - { "begin": 357, "end": 453, "name": "DUP1", "source": 0 }, - { "begin": 357, "end": 453, "name": "SWAP2", "source": 0 }, - { "begin": 357, "end": 453, "name": "SUB", "source": 0 }, - { "begin": 357, "end": 453, "name": "SWAP1", "source": 0 }, - { "begin": 357, "end": 453, "name": "RETURN", "source": 0 }, - { - "begin": 463, - "end": 557, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 463, "end": 557, "name": "JUMPDEST", "source": 0 }, - { - "begin": 463, - "end": 557, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { - "begin": 463, - "end": 557, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { - "begin": 463, - "end": 557, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 463, - "end": 557, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 463, "end": 557, "name": "JUMPDEST", "source": 0 }, - { - "begin": 463, - "end": 557, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 463, "end": 557, "name": "MLOAD", "source": 0 }, - { - "begin": 463, - "end": 557, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 463, "end": 557, "name": "SWAP2", "source": 0 }, - { "begin": 463, "end": 557, "name": "SWAP1", "source": 0 }, - { - "begin": 463, - "end": 557, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 463, - "end": 557, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 463, - "end": 557, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 463, "end": 557, "name": "JUMPDEST", "source": 0 }, - { - "begin": 463, - "end": 557, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 463, "end": 557, "name": "MLOAD", "source": 0 }, - { "begin": 463, "end": 557, "name": "DUP1", "source": 0 }, - { "begin": 463, "end": 557, "name": "SWAP2", "source": 0 }, - { "begin": 463, "end": 557, "name": "SUB", "source": 0 }, - { "begin": 463, "end": 557, "name": "SWAP1", "source": 0 }, - { "begin": 463, "end": 557, "name": "RETURN", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 73, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { - "begin": 73, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 73, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 73, - "end": 100, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 73, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 73, "end": 100, "name": "MLOAD", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 73, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 73, "end": 100, "name": "SWAP1", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 73, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 73, - "end": 100, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 73, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 73, "end": 100, "name": "MLOAD", "source": 0 }, - { "begin": 73, "end": 100, "name": "DUP1", "source": 0 }, - { "begin": 73, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 73, "end": 100, "name": "SUB", "source": 0 }, - { "begin": 73, "end": 100, "name": "SWAP1", "source": 0 }, - { "begin": 73, "end": 100, "name": "RETURN", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 146, "end": 171, "name": "JUMPDEST", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "PUSH [tag]", - "source": 0, - "value": "19" - }, - { - "begin": 146, - "end": 171, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { - "begin": 146, - "end": 171, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 146, - "end": 171, - "name": "tag", - "source": 0, - "value": "19" - }, - { "begin": 146, "end": 171, "name": "JUMPDEST", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 146, "end": 171, "name": "MLOAD", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "PUSH [tag]", - "source": 0, - "value": "21" - }, - { "begin": 146, "end": 171, "name": "SWAP2", "source": 0 }, - { "begin": 146, "end": 171, "name": "SWAP1", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 146, - "end": 171, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 146, - "end": 171, - "name": "tag", - "source": 0, - "value": "21" - }, - { "begin": 146, "end": 171, "name": "JUMPDEST", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 146, "end": 171, "name": "MLOAD", "source": 0 }, - { "begin": 146, "end": 171, "name": "DUP1", "source": 0 }, - { "begin": 146, "end": 171, "name": "SWAP2", "source": 0 }, - { "begin": 146, "end": 171, "name": "SUB", "source": 0 }, - { "begin": 146, "end": 171, "name": "SWAP1", "source": 0 }, - { "begin": 146, "end": 171, "name": "RETURN", "source": 0 }, - { - "begin": 567, - "end": 659, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 567, "end": 659, "name": "JUMPDEST", "source": 0 }, - { - "begin": 567, - "end": 659, - "name": "PUSH [tag]", - "source": 0, - "value": "22" - }, - { - "begin": 567, - "end": 659, - "name": "PUSH [tag]", - "source": 0, - "value": "23" - }, - { - "begin": 567, - "end": 659, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 567, - "end": 659, - "name": "tag", - "source": 0, - "value": "22" - }, - { "begin": 567, "end": 659, "name": "JUMPDEST", "source": 0 }, - { - "begin": 567, - "end": 659, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 567, "end": 659, "name": "MLOAD", "source": 0 }, - { - "begin": 567, - "end": 659, - "name": "PUSH [tag]", - "source": 0, - "value": "24" - }, - { "begin": 567, "end": 659, "name": "SWAP2", "source": 0 }, - { "begin": 567, "end": 659, "name": "SWAP1", "source": 0 }, - { - "begin": 567, - "end": 659, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 567, - "end": 659, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 567, - "end": 659, - "name": "tag", - "source": 0, - "value": "24" - }, - { "begin": 567, "end": 659, "name": "JUMPDEST", "source": 0 }, - { - "begin": 567, - "end": 659, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 567, "end": 659, "name": "MLOAD", "source": 0 }, - { "begin": 567, "end": 659, "name": "DUP1", "source": 0 }, - { "begin": 567, "end": 659, "name": "SWAP2", "source": 0 }, - { "begin": 567, "end": 659, "name": "SUB", "source": 0 }, - { "begin": 567, "end": 659, "name": "SWAP1", "source": 0 }, - { "begin": 567, "end": 659, "name": "RETURN", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 110, "end": 136, "name": "JUMPDEST", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "25" - }, - { - "begin": 110, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "26" - }, - { - "begin": 110, - "end": 136, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 110, - "end": 136, - "name": "tag", - "source": 0, - "value": "25" - }, - { "begin": 110, "end": 136, "name": "JUMPDEST", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 110, "end": 136, "name": "MLOAD", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { "begin": 110, "end": 136, "name": "SWAP2", "source": 0 }, - { "begin": 110, "end": 136, "name": "SWAP1", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 110, - "end": 136, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 110, - "end": 136, - "name": "tag", - "source": 0, - "value": "27" - }, - { "begin": 110, "end": 136, "name": "JUMPDEST", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 110, "end": 136, "name": "MLOAD", "source": 0 }, - { "begin": 110, "end": 136, "name": "DUP1", "source": 0 }, - { "begin": 110, "end": 136, "name": "SWAP2", "source": 0 }, - { "begin": 110, "end": 136, "name": "SUB", "source": 0 }, - { "begin": 110, "end": 136, "name": "SWAP1", "source": 0 }, - { "begin": 110, "end": 136, "name": "RETURN", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 357, "end": 453, "name": "JUMPDEST", "source": 0 }, - { - "begin": 401, - "end": 405, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 428, "end": 442, "name": "GASLIMIT", "source": 0 }, - { "begin": 421, "end": 442, "name": "SWAP1", "source": 0 }, - { "begin": 421, "end": 442, "name": "POP", "source": 0 }, - { "begin": 357, "end": 453, "name": "SWAP1", "source": 0 }, - { - "begin": 357, - "end": 453, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 463, - "end": 557, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 463, "end": 557, "name": "JUMPDEST", "source": 0 }, - { - "begin": 506, - "end": 510, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 533, "end": 546, "name": "CHAINID", "source": 0 }, - { "begin": 526, "end": 546, "name": "SWAP1", "source": 0 }, - { "begin": 526, "end": 546, "name": "POP", "source": 0 }, - { "begin": 463, "end": 557, "name": "SWAP1", "source": 0 }, - { - "begin": 463, - "end": 557, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 73, - "end": 100, - "name": "tag", - "source": 0, - "value": "17" - }, - { "begin": 73, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 73, "end": 100, "name": "SLOAD", "source": 0 }, - { "begin": 73, "end": 100, "name": "DUP2", "source": 0 }, - { - "begin": 73, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 146, - "end": 171, - "name": "tag", - "source": 0, - "value": "20" - }, - { "begin": 146, "end": 171, "name": "JUMPDEST", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 146, "end": 171, "name": "SLOAD", "source": 0 }, - { "begin": 146, "end": 171, "name": "DUP2", "source": 0 }, - { - "begin": 146, - "end": 171, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 567, - "end": 659, - "name": "tag", - "source": 0, - "value": "23" - }, - { "begin": 567, "end": 659, "name": "JUMPDEST", "source": 0 }, - { - "begin": 609, - "end": 613, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 636, "end": 648, "name": "NUMBER", "source": 0 }, - { "begin": 629, "end": 648, "name": "SWAP1", "source": 0 }, - { "begin": 629, "end": 648, "name": "POP", "source": 0 }, - { "begin": 567, "end": 659, "name": "SWAP1", "source": 0 }, - { - "begin": 567, - "end": 659, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 110, - "end": 136, - "name": "tag", - "source": 0, - "value": "26" - }, - { "begin": 110, "end": 136, "name": "JUMPDEST", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 110, "end": 136, "name": "SLOAD", "source": 0 }, - { "begin": 110, "end": 136, "name": "DUP2", "source": 0 }, - { - "begin": 110, - "end": 136, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "35" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 436, - "name": "tag", - "source": 1, - "value": "35" - }, - { "begin": 359, "end": 436, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 436, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 425, "end": 430, "name": "DUP2", "source": 1 }, - { "begin": 414, "end": 430, "name": "SWAP1", "source": 1 }, - { "begin": 414, "end": 430, "name": "POP", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP2", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP1", "source": 1 }, - { "begin": 404, "end": 436, "name": "POP", "source": 1 }, - { - "begin": 404, - "end": 436, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "getChainId()": "3408e470", - "getGasLimit()": "1a93d1c3", - "getNumber()": "f2c9ecd8", - "initialchainid()": "fb3e8bda", - "initialgaslimit()": "4a57f8ee", - "initialnumber()": "4a9066da" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialchainid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialgaslimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialnumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"CheckBlockVariables\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x7e30d998113b297bbc735319a036c0773f0412fe69245f1110e61bc6980b44e5\",\"urls\":[\"bzz-raw://a5dda91e8b4cf4187e64f4165969d3918775b0c889c9a69d3489de0e88b293db\",\"dweb:/ipfs/QmdVcCmcHpefCvBSUdw3isFrqkRBbx8fpoGj8QhrZb3H3G\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:CheckBlockVariables", - "label": "initialgaslimit", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 5, - "contract": "main.sol:CheckBlockVariables", - "label": "initialchainid", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 7, - "contract": "main.sol:CheckBlockVariables", - "label": "initialnumber", - "offset": 0, - "slot": "2", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract CheckBlockVariables {\n uint public initialgaslimit;\n uint public initialchainid;\n uint public initialnumber;\n \n constructor() {\n initialgaslimit = block.gaslimit;\n initialchainid = block.chainid;\n initialnumber = block.number;\n }\n\n function getGasLimit() public view returns (uint) {\n return block.gaslimit;\n }\n\n function getChainId() public view returns (uint) {\n return block.chainid;\n }\n\n function getNumber() public view returns (uint) {\n return block.number;\n }\n }" -} diff --git a/tests/contracts/compiled/CrowdloanRewards.json b/tests/contracts/compiled/CrowdloanRewards.json new file mode 100644 index 0000000000..f4dcd30acd --- /dev/null +++ b/tests/contracts/compiled/CrowdloanRewards.json @@ -0,0 +1,124 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [], + "name": "claim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contributor", + "type": "address" + } + ], + "name": "is_contributor", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "contributor", + "type": "address" + } + ], + "name": "reward_info", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" }, + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "new_address", + "type": "address" + } + ], + "name": "update_reward_address", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "author": "The Moonbeam Team", + "kind": "dev", + "methods": { + "claim()": { + "details": "Claim the vested amount from the crowdloan rewards" + }, + "is_contributor(address)": { + "details": "Checks whether the address is a contributor", + "params": { + "contributor": "the address that we want to confirm is a contributor" + }, + "returns": { + "_0": "A boolean confirming whether the address is a contributor" + } + }, + "reward_info(address)": { + "details": "Retrieve total reward and claimed reward for an address", + "params": { + "contributor": "the address for which we want to retrieve the information" + }, + "returns": { + "_0": "A u256 tuple, reflecting (total_rewards, claimed_rewards)" + } + }, + "update_reward_address(address)": { + "details": "Update reward address to receive crowdloan rewards", + "params": { + "new_address": ", the new_address where to receive the rewards from now on" + } + } + }, + "title": "The interface through which solidity contracts will interact with Crowdloan Rewards We follow this same interface including four-byte function selectors, in the precompile that wraps the pallet Address : 0x0000000000000000000000000000000000000801", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "claim()": "4e71d92d", + "is_contributor(address)": "53440c90", + "reward_info(address)": "76f70249", + "update_reward_address(address)": "aaac61d6" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contributor\",\"type\":\"address\"}],\"name\":\"is_contributor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contributor\",\"type\":\"address\"}],\"name\":\"reward_info\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"new_address\",\"type\":\"address\"}],\"name\":\"update_reward_address\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"The Moonbeam Team\",\"kind\":\"dev\",\"methods\":{\"claim()\":{\"details\":\"Claim the vested amount from the crowdloan rewards\"},\"is_contributor(address)\":{\"details\":\"Checks whether the address is a contributor\",\"params\":{\"contributor\":\"the address that we want to confirm is a contributor\"},\"returns\":{\"_0\":\"A boolean confirming whether the address is a contributor\"}},\"reward_info(address)\":{\"details\":\"Retrieve total reward and claimed reward for an address\",\"params\":{\"contributor\":\"the address for which we want to retrieve the information\"},\"returns\":{\"_0\":\"A u256 tuple, reflecting (total_rewards, claimed_rewards)\"}},\"update_reward_address(address)\":{\"details\":\"Update reward address to receive crowdloan rewards\",\"params\":{\"new_address\":\", the new_address where to receive the rewards from now on\"}}},\"title\":\"The interface through which solidity contracts will interact with Crowdloan Rewards We follow this same interface including four-byte function selectors, in the precompile that wraps the pallet Address : 0x0000000000000000000000000000000000000801\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"CrowdloanRewards\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xc84a0c5c4284aaeb01f923057638ff3ccc15a9ace45964ddad83524d3b58318c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://7d7dc3b9fb2e80d09139e88acf26a54308040844afddece85676da68a47c7ee9\",\"dweb:/ipfs/QmVNbcoLLc8qTmyNKC7ao8JDdvHCGH4yD9nEWcFaNnX1p9\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @author The Moonbeam Team\n * @title The interface through which solidity contracts will interact with Crowdloan Rewards\n * We follow this same interface including four-byte function selectors, in the precompile that\n * wraps the pallet\n * Address : 0x0000000000000000000000000000000000000801\n */\n \ninterface CrowdloanRewards {\n // First some simple accessors\n\n /// @dev Checks whether the address is a contributor\n /// @param contributor the address that we want to confirm is a contributor\n /// @return A boolean confirming whether the address is a contributor\n function is_contributor(address contributor) external view returns (bool);\n\n /// @dev Retrieve total reward and claimed reward for an address\n /// @param contributor the address for which we want to retrieve the information\n /// @return A u256 tuple, reflecting (total_rewards, claimed_rewards)\n function reward_info(address contributor) external view returns (uint256, uint256);\n\n // Now the dispatchables\n\n /// @dev Claim the vested amount from the crowdloan rewards\n function claim() external;\n \n /// @dev Update reward address to receive crowdloan rewards\n /// @param new_address, the new_address where to receive the rewards from now on\n function update_reward_address(address new_address) external;\n\n}\n\n// These are the selectors generated by remix following this advice\n// https://ethereum.stackexchange.com/a/73405/9963\n// Eventually we will probably want a better way of generating these and copying them to Rust\n\n//{ \n// \"53440c90\": \"is_contributor(address)\"\n// \"76f70249\": \"reward_info(address)\"\n// \"4e71d92d\": \"claim()\" \n// \"aaac61d6\": \"update_reward_address(address)\"\n//}" +} diff --git a/tests/contracts/compiled/Democracy.json b/tests/contracts/compiled/Democracy.json index cf82ac6350..929f01b36f 100644 --- a/tests/contracts/compiled/Democracy.json +++ b/tests/contracts/compiled/Democracy.json @@ -180,6 +180,7 @@ } ], "devdoc": { + "details": "This interface does not exhaustively wrap pallet democracy, rather it wraps the most important parts and the parts that are expected to be most useful to evm contracts. More exhaustive wrapping can be added later if it is desireable and the pallet interface is deemed sufficiently stable. Address : 0x0000000000000000000000000000000000000803", "kind": "dev", "methods": { "delegate(address,uint256,uint256)": { @@ -198,7 +199,7 @@ "returns": { "_0": "The amount of tokens locked behind the proposal" } }, "finished_referendum_info(uint256)": { - "details": "This, along with \"ongoing_referendum_info\", wraps the pallet's \"referendum_info\" function. It is necessary to split it into two here because Solidity only has c-style enums.", + "details": "This, along with `ongoing_referendum_info`, wraps the pallet's `referendum_info` function. It is necessary to split it into two here because Solidity only has c-style enums.", "params": { "ref_index": "The index of the referendum you are interested in" }, @@ -222,7 +223,7 @@ } }, "ongoing_referendum_info(uint256)": { - "details": "This, along with \"finished_referendum_info\", wraps the pallet's \"referendum_info\" function. It is necessary to split it into two here because Solidity only has c-style enums.", + "details": "This, along with `finished_referendum_info`, wraps the pallet's `referendum_info` function. It is necessary to split it into two here because Solidity only has c-style enums.", "params": { "ref_index": "The index of the referendum you are interested in" }, @@ -255,9 +256,9 @@ } }, "standard_vote(uint256,bool,uint256,uint256)": { - "details": "This function only supposrts \"Standard\" votes where you either vote aye xor nay. It does not support \"Split\" votes where you vote on both sides. If such a need arises, we should add an additional function to this interface called \"split_vote\".", + "details": "This function only supposrts `Standard` votes where you either vote aye xor nay. It does not support `Split` votes where you vote on both sides. If such a need arises, we should add an additional function to this interface called `split_vote`.", "params": { - "aye": "\"true\" is a vote to enact the proposal; \"false\" is a vote to keep the status quo.", + "aye": "`true` is a vote to enact the proposal; `false` is a vote to keep the status quo.", "conviction": "How strongly you want to vote. Higher conviction means longer lock time. This must be an interget in the range 0 to 6", "ref_index": "index of the referendum you want to vote in", "vote_amount": "The number of tokens you are willing to lock if you get your way" @@ -272,6 +273,7 @@ } } }, + "title": "Pallet Democracy Interface The interface through which solidity contracts will interact with pallet-democracy", "version": 1 }, "evm": { @@ -313,7 +315,7 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"representative\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"conviction\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"prop_index\",\"type\":\"uint256\"}],\"name\":\"deposit_of\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"}],\"name\":\"finished_referendum_info\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lowest_unbaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded_proposal\",\"type\":\"bytes\"}],\"name\":\"note_imminent_preimage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded_proposal\",\"type\":\"bytes\"}],\"name\":\"note_preimage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"}],\"name\":\"ongoing_referendum_info\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proposal_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"propose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"public_prop_count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"}],\"name\":\"remove_vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"prop_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seconds_upper_bound\",\"type\":\"uint256\"}],\"name\":\"second\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"aye\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"vote_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"conviction\",\"type\":\"uint256\"}],\"name\":\"standard_vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"un_delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"delegate(address,uint256,uint256)\":{\"details\":\"The balance delegated is locked for as long as it is delegated, and thereafter for the time appropriate for the conviction's lock period.\",\"params\":{\"amount\":\"The number of tokens whose voting power shall be delegated.\",\"conviction\":\"The conviction with which you are delegating. This conviction is used for _all_ delegated votes.\",\"representative\":\"The account to whom the vote shall be delegated.\"}},\"deposit_of(uint256)\":{\"details\":\"Unlike the similarly-named Rust function this one only returns the value, not the complete list of backers.\",\"params\":{\"prop_index\":\"The index of the proposal you are interested in\"},\"returns\":{\"_0\":\"The amount of tokens locked behind the proposal\"}},\"finished_referendum_info(uint256)\":{\"details\":\"This, along with \\\"ongoing_referendum_info\\\", wraps the pallet's \\\"referendum_info\\\" function. It is necessary to split it into two here because Solidity only has c-style enums.\",\"params\":{\"ref_index\":\"The index of the referendum you are interested in\"},\"returns\":{\"_0\":\"A tuple including whether the referendum passed, and the block at which it finished.\"}},\"lowest_unbaked()\":{\"returns\":{\"_0\":\"The lowest referendum index representing an unbaked referendum.\"}},\"note_imminent_preimage(bytes)\":{\"params\":{\"encoded_proposal\":\"The scale-encoded proposal whose hash has been submitted on-chain.\"}},\"note_preimage(bytes)\":{\"params\":{\"encoded_proposal\":\"The scale-encoded proposal whose hash has been submitted on-chain.\"}},\"ongoing_referendum_info(uint256)\":{\"details\":\"This, along with \\\"finished_referendum_info\\\", wraps the pallet's \\\"referendum_info\\\" function. It is necessary to split it into two here because Solidity only has c-style enums.\",\"params\":{\"ref_index\":\"The index of the referendum you are interested in\"},\"returns\":{\"_0\":\"A tuple including: * The block in which the referendum ended * The proposal hash * The baising mechanism 0-SuperMajorityApprove, 1-SuperMajorityAgainst, 2-SimpleMajority * The delay between passing and launching * The total aye vote (including conviction) * The total nay vote (including conviction) * The total turnout (not including conviction)\"}},\"propose(bytes32,uint256)\":{\"params\":{\"proposal_hash\":\"The hash of the proposal you are making\",\"value\":\"The number of tokens to be locked behind this proposal.\"}},\"public_prop_count()\":{\"returns\":{\"_0\":\"The total number of public proposals past and present\"}},\"remove_vote(uint256)\":{\"details\":\"Locks get complex when votes are removed. See pallet-democracy's docs for details.\",\"params\":{\"ref_index\":\"The index of the referendum you are interested in\"}},\"second(uint256,uint256)\":{\"details\":\"No amount is necessary here. Seconds are always for the same amount that the original proposer locked. You may second multiple times.\",\"params\":{\"prop_index\":\"index of the proposal you want to second\",\"seconds_upper_bound\":\"A number greater than or equal to the current number of seconds. This is necessary for calculating the weight of the call.\"}},\"standard_vote(uint256,bool,uint256,uint256)\":{\"details\":\"This function only supposrts \\\"Standard\\\" votes where you either vote aye xor nay. It does not support \\\"Split\\\" votes where you vote on both sides. If such a need arises, we should add an additional function to this interface called \\\"split_vote\\\".\",\"params\":{\"aye\":\"\\\"true\\\" is a vote to enact the proposal; \\\"false\\\" is a vote to keep the status quo.\",\"conviction\":\"How strongly you want to vote. Higher conviction means longer lock time. This must be an interget in the range 0 to 6\",\"ref_index\":\"index of the referendum you want to vote in\",\"vote_amount\":\"The number of tokens you are willing to lock if you get your way\"}},\"un_delegate()\":{\"details\":\"Tokens may be unlocked once the lock period corresponding to the conviction with which the delegation was issued has elapsed.\"},\"unlock(address)\":{\"params\":{\"target\":\"The account whose tokens should be unlocked. This may be any account.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"delegate(address,uint256,uint256)\":{\"notice\":\"Delegate voting power to another account. Selector: 0185921e\"},\"deposit_of(uint256)\":{\"notice\":\"Get the total amount locked behind a proposal. Selector: a30305e9\"},\"finished_referendum_info(uint256)\":{\"notice\":\"Get the details about a finished referendum. Selector: b1fd383f\"},\"lowest_unbaked()\":{\"notice\":\"Get the index of the lowest unbaked referendum Selector: 0388f282\"},\"note_imminent_preimage(bytes)\":{\"notice\":\"Register the preimage for an upcoming proposal. This requires the proposal to be in the dispatch queue. No deposit is needed. When this call is successful, i.e. the preimage has not been uploaded before and matches some imminent proposal, no fee is paid. Selector: cf205f96\"},\"note_preimage(bytes)\":{\"notice\":\"Register the preimage for an upcoming proposal. This doesn't require the proposal to be in the dispatch queue but does require a deposit, returned once enacted. Selector: 200881f5\"},\"ongoing_referendum_info(uint256)\":{\"notice\":\"Get the details about an ongoing referendum. Selector: 8b93d11a\"},\"propose(bytes32,uint256)\":{\"notice\":\"Make a new proposal Selector: 7824e7d1\"},\"public_prop_count()\":{\"notice\":\"Get The total number of public proposals past and present Selector: 56fdf547\"},\"remove_vote(uint256)\":{\"notice\":\"Remove a vote for a referendum. Selector: 2042f50b\"},\"second(uint256,uint256)\":{\"notice\":\"Signal agreement with a proposal Selector: c7a76601\"},\"standard_vote(uint256,bool,uint256,uint256)\":{\"notice\":\"Vote in a referendum. Selector: 3f3c21cc\"},\"un_delegate()\":{\"notice\":\"Undelegatehe voting power Selector: cb37b8ea\"},\"unlock(address)\":{\"notice\":\"Unlock tokens that have an expired lock. Selector: 2f6c493c\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Democracy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x046231572488062654723aec91310ec21fc2d66d1924092f7106c8c6bd432749\",\"urls\":[\"bzz-raw://273b204860e0d9b5a7618915bc574ab90340b5c33441859ca3642d714cf34160\",\"dweb:/ipfs/QmYmBBUNXYTbnhVn4Jq3fkhp6fXRBU9ikGEzuZ4dF17WXG\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"representative\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"conviction\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"prop_index\",\"type\":\"uint256\"}],\"name\":\"deposit_of\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"}],\"name\":\"finished_referendum_info\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lowest_unbaked\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded_proposal\",\"type\":\"bytes\"}],\"name\":\"note_imminent_preimage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded_proposal\",\"type\":\"bytes\"}],\"name\":\"note_preimage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"}],\"name\":\"ongoing_referendum_info\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"proposal_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"propose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"public_prop_count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"}],\"name\":\"remove_vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"prop_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seconds_upper_bound\",\"type\":\"uint256\"}],\"name\":\"second\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ref_index\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"aye\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"vote_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"conviction\",\"type\":\"uint256\"}],\"name\":\"standard_vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"un_delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"unlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This interface does not exhaustively wrap pallet democracy, rather it wraps the most important parts and the parts that are expected to be most useful to evm contracts. More exhaustive wrapping can be added later if it is desireable and the pallet interface is deemed sufficiently stable. Address : 0x0000000000000000000000000000000000000803\",\"kind\":\"dev\",\"methods\":{\"delegate(address,uint256,uint256)\":{\"details\":\"The balance delegated is locked for as long as it is delegated, and thereafter for the time appropriate for the conviction's lock period.\",\"params\":{\"amount\":\"The number of tokens whose voting power shall be delegated.\",\"conviction\":\"The conviction with which you are delegating. This conviction is used for _all_ delegated votes.\",\"representative\":\"The account to whom the vote shall be delegated.\"}},\"deposit_of(uint256)\":{\"details\":\"Unlike the similarly-named Rust function this one only returns the value, not the complete list of backers.\",\"params\":{\"prop_index\":\"The index of the proposal you are interested in\"},\"returns\":{\"_0\":\"The amount of tokens locked behind the proposal\"}},\"finished_referendum_info(uint256)\":{\"details\":\"This, along with `ongoing_referendum_info`, wraps the pallet's `referendum_info` function. It is necessary to split it into two here because Solidity only has c-style enums.\",\"params\":{\"ref_index\":\"The index of the referendum you are interested in\"},\"returns\":{\"_0\":\"A tuple including whether the referendum passed, and the block at which it finished.\"}},\"lowest_unbaked()\":{\"returns\":{\"_0\":\"The lowest referendum index representing an unbaked referendum.\"}},\"note_imminent_preimage(bytes)\":{\"params\":{\"encoded_proposal\":\"The scale-encoded proposal whose hash has been submitted on-chain.\"}},\"note_preimage(bytes)\":{\"params\":{\"encoded_proposal\":\"The scale-encoded proposal whose hash has been submitted on-chain.\"}},\"ongoing_referendum_info(uint256)\":{\"details\":\"This, along with `finished_referendum_info`, wraps the pallet's `referendum_info` function. It is necessary to split it into two here because Solidity only has c-style enums.\",\"params\":{\"ref_index\":\"The index of the referendum you are interested in\"},\"returns\":{\"_0\":\"A tuple including: * The block in which the referendum ended * The proposal hash * The baising mechanism 0-SuperMajorityApprove, 1-SuperMajorityAgainst, 2-SimpleMajority * The delay between passing and launching * The total aye vote (including conviction) * The total nay vote (including conviction) * The total turnout (not including conviction)\"}},\"propose(bytes32,uint256)\":{\"params\":{\"proposal_hash\":\"The hash of the proposal you are making\",\"value\":\"The number of tokens to be locked behind this proposal.\"}},\"public_prop_count()\":{\"returns\":{\"_0\":\"The total number of public proposals past and present\"}},\"remove_vote(uint256)\":{\"details\":\"Locks get complex when votes are removed. See pallet-democracy's docs for details.\",\"params\":{\"ref_index\":\"The index of the referendum you are interested in\"}},\"second(uint256,uint256)\":{\"details\":\"No amount is necessary here. Seconds are always for the same amount that the original proposer locked. You may second multiple times.\",\"params\":{\"prop_index\":\"index of the proposal you want to second\",\"seconds_upper_bound\":\"A number greater than or equal to the current number of seconds. This is necessary for calculating the weight of the call.\"}},\"standard_vote(uint256,bool,uint256,uint256)\":{\"details\":\"This function only supposrts `Standard` votes where you either vote aye xor nay. It does not support `Split` votes where you vote on both sides. If such a need arises, we should add an additional function to this interface called `split_vote`.\",\"params\":{\"aye\":\"`true` is a vote to enact the proposal; `false` is a vote to keep the status quo.\",\"conviction\":\"How strongly you want to vote. Higher conviction means longer lock time. This must be an interget in the range 0 to 6\",\"ref_index\":\"index of the referendum you want to vote in\",\"vote_amount\":\"The number of tokens you are willing to lock if you get your way\"}},\"un_delegate()\":{\"details\":\"Tokens may be unlocked once the lock period corresponding to the conviction with which the delegation was issued has elapsed.\"},\"unlock(address)\":{\"params\":{\"target\":\"The account whose tokens should be unlocked. This may be any account.\"}}},\"title\":\"Pallet Democracy Interface The interface through which solidity contracts will interact with pallet-democracy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"delegate(address,uint256,uint256)\":{\"notice\":\"Delegate voting power to another account. Selector: 0185921e\"},\"deposit_of(uint256)\":{\"notice\":\"Get the total amount locked behind a proposal. Selector: a30305e9\"},\"finished_referendum_info(uint256)\":{\"notice\":\"Get the details about a finished referendum. Selector: b1fd383f\"},\"lowest_unbaked()\":{\"notice\":\"Get the index of the lowest unbaked referendum Selector: 0388f282\"},\"note_imminent_preimage(bytes)\":{\"notice\":\"Register the preimage for an upcoming proposal. This requires the proposal to be in the dispatch queue. No deposit is needed. When this call is successful, i.e. the preimage has not been uploaded before and matches some imminent proposal, no fee is paid. Selector: cf205f96\"},\"note_preimage(bytes)\":{\"notice\":\"Register the preimage for an upcoming proposal. This doesn't require the proposal to be in the dispatch queue but does require a deposit, returned once enacted. Selector: 200881f5\"},\"ongoing_referendum_info(uint256)\":{\"notice\":\"Get the details about an ongoing referendum. Selector: 8b93d11a\"},\"propose(bytes32,uint256)\":{\"notice\":\"Make a new proposal Selector: 7824e7d1\"},\"public_prop_count()\":{\"notice\":\"Get The total number of public proposals past and present Selector: 56fdf547\"},\"remove_vote(uint256)\":{\"notice\":\"Remove a vote for a referendum. Selector: 2042f50b\"},\"second(uint256,uint256)\":{\"notice\":\"Signal agreement with a proposal Selector: c7a76601\"},\"standard_vote(uint256,bool,uint256,uint256)\":{\"notice\":\"Vote in a referendum. Selector: 3f3c21cc\"},\"un_delegate()\":{\"notice\":\"Undelegatehe voting power Selector: cb37b8ea\"},\"unlock(address)\":{\"notice\":\"Unlock tokens that have an expired lock. Selector: 2f6c493c\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Democracy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x2c640709ee2136c390e500687168a29921303e68c72385e95d224868e243d1c8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://b56ef6792eca5b275bfb12b828499538de54de1b78e137814dbcf32e47f9cc34\",\"dweb:/ipfs/QmVEQfFStVxh8vDtXSnmdDZ9CiA7CJgotuNbSrKZW53cUU\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null }, "userdoc": { "kind": "user", @@ -364,5 +366,5 @@ "version": 1 } }, - "sourceCode": "\n pragma solidity >=0.8.0;\n interface Democracy {\n // First some simple accessors\n \n /**\n * Get The total number of public proposals past and present\n * Selector: 56fdf547\n *\n * @return The total number of public proposals past and present\n */\n function public_prop_count() external view returns (uint256);\n \n /**\n * Get details about all public porposals.\n * Selector:\n * @return (prop index, proposal hash, proposer)\n * TODO This is supposed to be a vec. Let's save this one for later.\n */\n // function public_props()\n // external\n // view\n // returns (\n // uint256,\n // bytes32,\n // address\n // );\n \n /**\n * Get the total amount locked behind a proposal.\n * Selector: a30305e9\n *\n * @dev Unlike the similarly-named Rust function this one only returns the value, not the\n * complete list of backers.\n * @param prop_index The index of the proposal you are interested in\n * @return The amount of tokens locked behind the proposal\n */\n function deposit_of(uint256 prop_index) external view returns (uint256);\n \n /**\n * Get the index of the lowest unbaked referendum\n * Selector: 0388f282\n *\n * @return The lowest referendum index representing an unbaked referendum.\n */\n function lowest_unbaked() external view returns (uint256);\n \n /**\n * Get the details about an ongoing referendum.\n * Selector: 8b93d11a\n *\n * @dev This, along with \"finished_referendum_info\", wraps the pallet's \"referendum_info\"\n * function. It is necessary to split it into two here because Solidity only has c-style enums.\n * @param ref_index The index of the referendum you are interested in\n * @return A tuple including:\n * * The block in which the referendum ended\n * * The proposal hash\n * * The baising mechanism 0-SuperMajorityApprove, 1-SuperMajorityAgainst, 2-SimpleMajority\n * * The delay between passing and launching\n * * The total aye vote (including conviction)\n * * The total nay vote (including conviction)\n * * The total turnout (not including conviction)\n */\n function ongoing_referendum_info(uint256 ref_index)\n external\n view\n returns (\n uint256,\n bytes32,\n uint256,\n uint256,\n uint256,\n uint256,\n uint256\n );\n \n /**\n * Get the details about a finished referendum.\n * Selector: b1fd383f\n *\n * @dev This, along with \"ongoing_referendum_info\", wraps the pallet's \"referendum_info\"\n * function. It is necessary to split it into two here because Solidity only has c-style enums.\n * @param ref_index The index of the referendum you are interested in\n * @return A tuple including whether the referendum passed, and the block at which it finished.\n */\n function finished_referendum_info(uint256 ref_index)\n external\n view\n returns (bool, uint256);\n \n // Now the dispatchables\n \n /**\n * Make a new proposal\n * Selector: 7824e7d1\n *\n * @param proposal_hash The hash of the proposal you are making\n * @param value The number of tokens to be locked behind this proposal.\n */\n function propose(bytes32 proposal_hash, uint256 value) external;\n \n /**\n * Signal agreement with a proposal\n * Selector: c7a76601\n *\n * @dev No amount is necessary here. Seconds are always for the same amount that the original\n * proposer locked. You may second multiple times.\n *\n * @param prop_index index of the proposal you want to second\n * @param seconds_upper_bound A number greater than or equal to the current number of seconds.\n * This is necessary for calculating the weight of the call.\n */\n function second(uint256 prop_index, uint256 seconds_upper_bound) external;\n \n //TODO should we have an alternative \"simple_second\" where the upper bound is read from storage?\n \n /**\n * Vote in a referendum.\n * Selector: 3f3c21cc\n *\n * @param ref_index index of the referendum you want to vote in\n * @param aye \"true\" is a vote to enact the proposal; \"false\" is a vote to keep the status quo.\n * @param vote_amount The number of tokens you are willing to lock if you get your way\n * @param conviction How strongly you want to vote. Higher conviction means longer lock time.\n * This must be an interget in the range 0 to 6\n *\n * @dev This function only supposrts \"Standard\" votes where you either vote aye xor nay.\n * It does not support \"Split\" votes where you vote on both sides. If such a need\n * arises, we should add an additional function to this interface called \"split_vote\".\n */\n function standard_vote(\n uint256 ref_index,\n bool aye,\n uint256 vote_amount,\n uint256 conviction\n ) external;\n \n /** Remove a vote for a referendum.\n * Selector: 2042f50b\n *\n * @dev Locks get complex when votes are removed. See pallet-democracy's docs for details.\n * @param ref_index The index of the referendum you are interested in\n */\n function remove_vote(uint256 ref_index) external;\n \n /**\n * Delegate voting power to another account.\n * Selector: 0185921e\n *\n * @dev The balance delegated is locked for as long as it is delegated, and thereafter for the\n * time appropriate for the conviction's lock period.\n * @param representative The account to whom the vote shall be delegated.\n * @param conviction The conviction with which you are delegating. This conviction is used for\n * _all_ delegated votes.\n * @param amount The number of tokens whose voting power shall be delegated.\n */\n function delegate(\n address representative,\n uint256 conviction,\n uint256 amount\n ) external;\n \n /**\n * Undelegatehe voting power\n * Selector: cb37b8ea\n *\n * @dev Tokens may be unlocked once the lock period corresponding to the conviction with which\n * the delegation was issued has elapsed.\n */\n function un_delegate() external;\n \n /**\n * Unlock tokens that have an expired lock.\n * Selector: 2f6c493c\n *\n * @param target The account whose tokens should be unlocked. This may be any account.\n */\n function unlock(address target) external;\n \n /**\n * Register the preimage for an upcoming proposal. This doesn't require the proposal to be\n * in the dispatch queue but does require a deposit, returned once enacted.\n * Selector: 200881f5\n *\n * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain.\n */\n function note_preimage(bytes memory encoded_proposal) external;\n \n /**\n * Register the preimage for an upcoming proposal. This requires the proposal to be\n * in the dispatch queue. No deposit is needed. When this call is successful, i.e.\n * the preimage has not been uploaded before and matches some imminent proposal,\n * no fee is paid.\n * Selector: cf205f96\n *\n * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain.\n */\n function note_imminent_preimage(bytes memory encoded_proposal) external;\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @title Pallet Democracy Interface\n *\n * The interface through which solidity contracts will interact with pallet-democracy\n *\n * @dev This interface does not exhaustively wrap pallet democracy, rather it wraps the most\n * important parts and the parts that are expected to be most useful to evm contracts.\n * More exhaustive wrapping can be added later if it is desireable and the pallet interface\n * is deemed sufficiently stable.\n * Address : 0x0000000000000000000000000000000000000803\n */\n \ninterface Democracy {\n // First some simple accessors\n\n /**\n * Get The total number of public proposals past and present\n * Selector: 56fdf547\n *\n * @return The total number of public proposals past and present\n */\n function public_prop_count() external view returns (uint256);\n\n /**\n * Get details about all public porposals.\n * Selector:\n * @return (prop index, proposal hash, proposer)\n * TODO This is supposed to be a vec. Let's save this one for later.\n */\n // function public_props()\n // external\n // view\n // returns (\n // uint256,\n // bytes32,\n // address\n // );\n\n /**\n * Get the total amount locked behind a proposal.\n * Selector: a30305e9\n *\n * @dev Unlike the similarly-named Rust function this one only returns the value, not the\n * complete list of backers.\n * @param prop_index The index of the proposal you are interested in\n * @return The amount of tokens locked behind the proposal\n */\n function deposit_of(uint256 prop_index) external view returns (uint256);\n\n /**\n * Get the index of the lowest unbaked referendum\n * Selector: 0388f282\n *\n * @return The lowest referendum index representing an unbaked referendum.\n */\n function lowest_unbaked() external view returns (uint256);\n\n /**\n * Get the details about an ongoing referendum.\n * Selector: 8b93d11a\n *\n * @dev This, along with `finished_referendum_info`, wraps the pallet's `referendum_info`\n * function. It is necessary to split it into two here because Solidity only has c-style enums.\n * @param ref_index The index of the referendum you are interested in\n * @return A tuple including:\n * * The block in which the referendum ended\n * * The proposal hash\n * * The baising mechanism 0-SuperMajorityApprove, 1-SuperMajorityAgainst, 2-SimpleMajority\n * * The delay between passing and launching\n * * The total aye vote (including conviction)\n * * The total nay vote (including conviction)\n * * The total turnout (not including conviction)\n */\n function ongoing_referendum_info(uint256 ref_index)\n external\n view\n returns (\n uint256,\n bytes32,\n uint256,\n uint256,\n uint256,\n uint256,\n uint256\n );\n\n /**\n * Get the details about a finished referendum.\n * Selector: b1fd383f\n *\n * @dev This, along with `ongoing_referendum_info`, wraps the pallet's `referendum_info`\n * function. It is necessary to split it into two here because Solidity only has c-style enums.\n * @param ref_index The index of the referendum you are interested in\n * @return A tuple including whether the referendum passed, and the block at which it finished.\n */\n function finished_referendum_info(uint256 ref_index)\n external\n view\n returns (bool, uint256);\n\n // Now the dispatchables\n\n /**\n * Make a new proposal\n * Selector: 7824e7d1\n *\n * @param proposal_hash The hash of the proposal you are making\n * @param value The number of tokens to be locked behind this proposal.\n */\n function propose(bytes32 proposal_hash, uint256 value) external;\n\n /**\n * Signal agreement with a proposal\n * Selector: c7a76601\n *\n * @dev No amount is necessary here. Seconds are always for the same amount that the original\n * proposer locked. You may second multiple times.\n *\n * @param prop_index index of the proposal you want to second\n * @param seconds_upper_bound A number greater than or equal to the current number of seconds.\n * This is necessary for calculating the weight of the call.\n */\n function second(uint256 prop_index, uint256 seconds_upper_bound) external;\n\n //TODO should we have an alternative `simple_second` where the upper bound is read from storage?\n\n /**\n * Vote in a referendum.\n * Selector: 3f3c21cc\n *\n * @param ref_index index of the referendum you want to vote in\n * @param aye `true` is a vote to enact the proposal; `false` is a vote to keep the status quo.\n * @param vote_amount The number of tokens you are willing to lock if you get your way\n * @param conviction How strongly you want to vote. Higher conviction means longer lock time.\n * This must be an interget in the range 0 to 6\n *\n * @dev This function only supposrts `Standard` votes where you either vote aye xor nay.\n * It does not support `Split` votes where you vote on both sides. If such a need\n * arises, we should add an additional function to this interface called `split_vote`.\n */\n function standard_vote(\n uint256 ref_index,\n bool aye,\n uint256 vote_amount,\n uint256 conviction\n ) external;\n\n /** Remove a vote for a referendum.\n * Selector: 2042f50b\n *\n * @dev Locks get complex when votes are removed. See pallet-democracy's docs for details.\n * @param ref_index The index of the referendum you are interested in\n */\n function remove_vote(uint256 ref_index) external;\n\n /**\n * Delegate voting power to another account.\n * Selector: 0185921e\n *\n * @dev The balance delegated is locked for as long as it is delegated, and thereafter for the\n * time appropriate for the conviction's lock period.\n * @param representative The account to whom the vote shall be delegated.\n * @param conviction The conviction with which you are delegating. This conviction is used for\n * _all_ delegated votes.\n * @param amount The number of tokens whose voting power shall be delegated.\n */\n function delegate(\n address representative,\n uint256 conviction,\n uint256 amount\n ) external;\n\n /**\n * Undelegatehe voting power\n * Selector: cb37b8ea\n *\n * @dev Tokens may be unlocked once the lock period corresponding to the conviction with which\n * the delegation was issued has elapsed.\n */\n function un_delegate() external;\n\n /**\n * Unlock tokens that have an expired lock.\n * Selector: 2f6c493c\n *\n * @param target The account whose tokens should be unlocked. This may be any account.\n */\n function unlock(address target) external;\n\n /**\n * Register the preimage for an upcoming proposal. This doesn't require the proposal to be\n * in the dispatch queue but does require a deposit, returned once enacted.\n * Selector: 200881f5\n *\n * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain.\n */\n function note_preimage(bytes memory encoded_proposal) external;\n\n /**\n * Register the preimage for an upcoming proposal. This requires the proposal to be\n * in the dispatch queue. No deposit is needed. When this call is successful, i.e.\n * the preimage has not been uploaded before and matches some imminent proposal,\n * no fee is paid.\n * Selector: cf205f96\n *\n * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain.\n */\n function note_imminent_preimage(bytes memory encoded_proposal) external;\n}\n" } diff --git a/tests/contracts/compiled/ERC20Instance.json b/tests/contracts/compiled/ERC20Instance.json index 3a169c8f8c..ff0fd94619 100644 --- a/tests/contracts/compiled/ERC20Instance.json +++ b/tests/contracts/compiled/ERC20Instance.json @@ -1,5 +1,5 @@ { - "byteCode": "0x608060405273ffffffff1fcacbd218edc0eba20fc2308c7780806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ffffffff1fcacbd218edc0eba20fc2308c778080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b50611404806100c96000396000f3fe6080604052600436106100c65760003560e01c8063785e9e861161007f578063a887c98111610059578063a887c9811461029d578063a9059cbb146102da578063dd62ed3e14610317578063f5bfbd8a14610354576100cd565b8063785e9e861461020a5780637eea12051461023557806395d89b4114610272576100cd565b806306fdde03146100d2578063095ea7b3146100fd57806318160ddd1461013a57806323b872dd14610165578063313ce567146101a257806370a08231146101cd576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100e7610391565b6040516100f49190610d7f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190610e49565b61042c565b6040516101319190610ea4565b60405180910390f35b34801561014657600080fd5b5061014f6104d5565b60405161015c9190610ece565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190610ee9565b61056c565b6040516101999190610ea4565b60405180910390f35b3480156101ae57600080fd5b506101b7610618565b6040516101c49190610f58565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190610f73565b6106af565b6040516102019190610ece565b60405180910390f35b34801561021657600080fd5b5061021f610753565b60405161022c9190610fff565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190610ee9565b610777565b6040516102699190610ea4565b60405180910390f35b34801561027e57600080fd5b506102876108a5565b6040516102949190610d7f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190610e49565b610940565b6040516102d19190610ea4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190610e49565b610a6b565b60405161030e9190610ea4565b60405180910390f35b34801561032357600080fd5b5061033e6004803603810190610339919061101a565b610b14565b60405161034b9190610ece565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190610e49565b610bbb565b6040516103889190610ea4565b60405180910390f35b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103fe573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104279190611180565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b815260040161048a9291906111d8565b6020604051808303816000875af11580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610567919061126f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016105cc9392919061129c565b6020604051808303816000875af11580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f919061122d565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906112ff565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161070b919061132c565b602060405180830381865afa158015610728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074c919061126f565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686866040516024016107ca9392919061129c565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610854919061138e565b600060405180830381855af49150503d806000811461088f576040519150601f19603f3d011682016040523d82523d6000602084013e610894565b606091505b509150915081925050509392505050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610912573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061093b9190611180565b905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856040516024016109919291906111d8565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a1b919061138e565b600060405180830381855af49150503d8060008114610a56576040519150601f19603f3d011682016040523d82523d6000602084013e610a5b565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ac99291906111d8565b6020604051808303816000875af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610b729291906113a5565b602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb3919061126f565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401610c0c9291906111d8565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c96919061138e565b600060405180830381855af49150503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5091509150819250505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d20578082015181840152602081019050610d05565b83811115610d2f576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d5182610ce6565b610d5b8185610cf1565b9350610d6b818560208601610d02565b610d7481610d35565b840191505092915050565b60006020820190508181036000830152610d998184610d46565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610de082610db5565b9050919050565b610df081610dd5565b8114610dfb57600080fd5b50565b600081359050610e0d81610de7565b92915050565b6000819050919050565b610e2681610e13565b8114610e3157600080fd5b50565b600081359050610e4381610e1d565b92915050565b60008060408385031215610e6057610e5f610dab565b5b6000610e6e85828601610dfe565b9250506020610e7f85828601610e34565b9150509250929050565b60008115159050919050565b610e9e81610e89565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e13565b82525050565b6000602082019050610ee36000830184610ebf565b92915050565b600080600060608486031215610f0257610f01610dab565b5b6000610f1086828701610dfe565b9350506020610f2186828701610dfe565b9250506040610f3286828701610e34565b9150509250925092565b600060ff82169050919050565b610f5281610f3c565b82525050565b6000602082019050610f6d6000830184610f49565b92915050565b600060208284031215610f8957610f88610dab565b5b6000610f9784828501610dfe565b91505092915050565b6000819050919050565b6000610fc5610fc0610fbb84610db5565b610fa0565b610db5565b9050919050565b6000610fd782610faa565b9050919050565b6000610fe982610fcc565b9050919050565b610ff981610fde565b82525050565b60006020820190506110146000830184610ff0565b92915050565b6000806040838503121561103157611030610dab565b5b600061103f85828601610dfe565b925050602061105085828601610dfe565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61109c82610d35565b810181811067ffffffffffffffff821117156110bb576110ba611064565b5b80604052505050565b60006110ce610da1565b90506110da8282611093565b919050565b600067ffffffffffffffff8211156110fa576110f9611064565b5b61110382610d35565b9050602081019050919050565b600061112361111e846110df565b6110c4565b90508281526020810184848401111561113f5761113e61105f565b5b61114a848285610d02565b509392505050565b600082601f8301126111675761116661105a565b5b8151611177848260208601611110565b91505092915050565b60006020828403121561119657611195610dab565b5b600082015167ffffffffffffffff8111156111b4576111b3610db0565b5b6111c084828501611152565b91505092915050565b6111d281610dd5565b82525050565b60006040820190506111ed60008301856111c9565b6111fa6020830184610ebf565b9392505050565b61120a81610e89565b811461121557600080fd5b50565b60008151905061122781611201565b92915050565b60006020828403121561124357611242610dab565b5b600061125184828501611218565b91505092915050565b60008151905061126981610e1d565b92915050565b60006020828403121561128557611284610dab565b5b60006112938482850161125a565b91505092915050565b60006060820190506112b160008301866111c9565b6112be60208301856111c9565b6112cb6040830184610ebf565b949350505050565b6112dc81610f3c565b81146112e757600080fd5b50565b6000815190506112f9816112d3565b92915050565b60006020828403121561131557611314610dab565b5b6000611323848285016112ea565b91505092915050565b600060208201905061134160008301846111c9565b92915050565b600081519050919050565b600081905092915050565b600061136882611347565b6113728185611352565b9350611382818560208601610d02565b80840191505092915050565b600061139a828461135d565b915081905092915050565b60006040820190506113ba60008301856111c9565b6113c760208301846111c9565b939250505056fea26469706673582212208e12a55e1169919056ad784c23047c1146f43d73fc99312a442666202ba7296164736f6c634300080a0033", + "byteCode": "0x608060405273ffffffff1fcacbd218edc0eba20fc2308c7780806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ffffffff1fcacbd218edc0eba20fc2308c778080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b50611404806100c96000396000f3fe6080604052600436106100c65760003560e01c8063785e9e861161007f578063a887c98111610059578063a887c9811461029d578063a9059cbb146102da578063dd62ed3e14610317578063f5bfbd8a14610354576100cd565b8063785e9e861461020a5780637eea12051461023557806395d89b4114610272576100cd565b806306fdde03146100d2578063095ea7b3146100fd57806318160ddd1461013a57806323b872dd14610165578063313ce567146101a257806370a08231146101cd576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100e7610391565b6040516100f49190610d7f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190610e49565b61042c565b6040516101319190610ea4565b60405180910390f35b34801561014657600080fd5b5061014f6104d5565b60405161015c9190610ece565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190610ee9565b61056c565b6040516101999190610ea4565b60405180910390f35b3480156101ae57600080fd5b506101b7610618565b6040516101c49190610f58565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190610f73565b6106af565b6040516102019190610ece565b60405180910390f35b34801561021657600080fd5b5061021f610753565b60405161022c9190610fff565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190610ee9565b610777565b6040516102699190610ea4565b60405180910390f35b34801561027e57600080fd5b506102876108a5565b6040516102949190610d7f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190610e49565b610940565b6040516102d19190610ea4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190610e49565b610a6b565b60405161030e9190610ea4565b60405180910390f35b34801561032357600080fd5b5061033e6004803603810190610339919061101a565b610b14565b60405161034b9190610ece565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190610e49565b610bbb565b6040516103889190610ea4565b60405180910390f35b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103fe573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104279190611180565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b815260040161048a9291906111d8565b6020604051808303816000875af11580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610567919061126f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016105cc9392919061129c565b6020604051808303816000875af11580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f919061122d565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906112ff565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161070b919061132c565b602060405180830381865afa158015610728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074c919061126f565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686866040516024016107ca9392919061129c565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610854919061138e565b600060405180830381855af49150503d806000811461088f576040519150601f19603f3d011682016040523d82523d6000602084013e610894565b606091505b509150915081925050509392505050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610912573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061093b9190611180565b905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856040516024016109919291906111d8565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a1b919061138e565b600060405180830381855af49150503d8060008114610a56576040519150601f19603f3d011682016040523d82523d6000602084013e610a5b565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ac99291906111d8565b6020604051808303816000875af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610b729291906113a5565b602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb3919061126f565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401610c0c9291906111d8565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c96919061138e565b600060405180830381855af49150503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5091509150819250505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d20578082015181840152602081019050610d05565b83811115610d2f576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d5182610ce6565b610d5b8185610cf1565b9350610d6b818560208601610d02565b610d7481610d35565b840191505092915050565b60006020820190508181036000830152610d998184610d46565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610de082610db5565b9050919050565b610df081610dd5565b8114610dfb57600080fd5b50565b600081359050610e0d81610de7565b92915050565b6000819050919050565b610e2681610e13565b8114610e3157600080fd5b50565b600081359050610e4381610e1d565b92915050565b60008060408385031215610e6057610e5f610dab565b5b6000610e6e85828601610dfe565b9250506020610e7f85828601610e34565b9150509250929050565b60008115159050919050565b610e9e81610e89565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e13565b82525050565b6000602082019050610ee36000830184610ebf565b92915050565b600080600060608486031215610f0257610f01610dab565b5b6000610f1086828701610dfe565b9350506020610f2186828701610dfe565b9250506040610f3286828701610e34565b9150509250925092565b600060ff82169050919050565b610f5281610f3c565b82525050565b6000602082019050610f6d6000830184610f49565b92915050565b600060208284031215610f8957610f88610dab565b5b6000610f9784828501610dfe565b91505092915050565b6000819050919050565b6000610fc5610fc0610fbb84610db5565b610fa0565b610db5565b9050919050565b6000610fd782610faa565b9050919050565b6000610fe982610fcc565b9050919050565b610ff981610fde565b82525050565b60006020820190506110146000830184610ff0565b92915050565b6000806040838503121561103157611030610dab565b5b600061103f85828601610dfe565b925050602061105085828601610dfe565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61109c82610d35565b810181811067ffffffffffffffff821117156110bb576110ba611064565b5b80604052505050565b60006110ce610da1565b90506110da8282611093565b919050565b600067ffffffffffffffff8211156110fa576110f9611064565b5b61110382610d35565b9050602081019050919050565b600061112361111e846110df565b6110c4565b90508281526020810184848401111561113f5761113e61105f565b5b61114a848285610d02565b509392505050565b600082601f8301126111675761116661105a565b5b8151611177848260208601611110565b91505092915050565b60006020828403121561119657611195610dab565b5b600082015167ffffffffffffffff8111156111b4576111b3610db0565b5b6111c084828501611152565b91505092915050565b6111d281610dd5565b82525050565b60006040820190506111ed60008301856111c9565b6111fa6020830184610ebf565b9392505050565b61120a81610e89565b811461121557600080fd5b50565b60008151905061122781611201565b92915050565b60006020828403121561124357611242610dab565b5b600061125184828501611218565b91505092915050565b60008151905061126981610e1d565b92915050565b60006020828403121561128557611284610dab565b5b60006112938482850161125a565b91505092915050565b60006060820190506112b160008301866111c9565b6112be60208301856111c9565b6112cb6040830184610ebf565b949350505050565b6112dc81610f3c565b81146112e757600080fd5b50565b6000815190506112f9816112d3565b92915050565b60006020828403121561131557611314610dab565b5b6000611323848285016112ea565b91505092915050565b600060208201905061134160008301846111c9565b92915050565b600081519050919050565b600081905092915050565b600061136882611347565b6113728185611352565b9350611382818560208601610d02565b80840191505092915050565b600061139a828461135d565b915081905092915050565b60006040820190506113ba60008301856111c9565b6113c760208301846111c9565b939250505056fea26469706673582212201292b7f8363b319cf5c8471a4dc98170aaf27859f613c38f53e839086a79c0f364736f6c634300080b0033", "contract": { "abi": [ { @@ -229,105 +229,105 @@ "params": { "from": "address The address which you want to send tokens from", "to": "address The address which you want to transfer to", - "value": "uint256 the amount of tokens to bedelega transferred" + "value": "uint256 the amount of tokens to be transferred" } } }, "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":3962:7231 contract ERC20Instance is IERC20 {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":4092:4134 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 */\n 0xffffffff1fcacbd218edc0eba20fc2308c778080\n /* \"main.sol\":4063:4135 IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080) */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":4168:4210 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 */\n 0xffffffff1fcacbd218edc0eba20fc2308c778080\n /* \"main.sol\":4145:4210 address erc20address = 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 */\n 0x01\n exp(0x0100, 0x00)\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":3962:7231 contract ERC20Instance is IERC20 {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":3962:7231 contract ERC20Instance is IERC20 {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x785e9e86\n gt\n tag_16\n jumpi\n dup1\n 0xa887c981\n gt\n tag_17\n jumpi\n dup1\n 0xa887c981\n eq\n tag_12\n jumpi\n dup1\n 0xa9059cbb\n eq\n tag_13\n jumpi\n dup1\n 0xdd62ed3e\n eq\n tag_14\n jumpi\n dup1\n 0xf5bfbd8a\n eq\n tag_15\n jumpi\n jump(tag_2)\n tag_17:\n dup1\n 0x785e9e86\n eq\n tag_9\n jumpi\n dup1\n 0x7eea1205\n eq\n tag_10\n jumpi\n dup1\n 0x95d89b41\n eq\n tag_11\n jumpi\n jump(tag_2)\n tag_16:\n dup1\n 0x06fdde03\n eq\n tag_3\n jumpi\n dup1\n 0x095ea7b3\n eq\n tag_4\n jumpi\n dup1\n 0x18160ddd\n eq\n tag_5\n jumpi\n dup1\n 0x23b872dd\n eq\n tag_6\n jumpi\n dup1\n 0x313ce567\n eq\n tag_7\n jumpi\n dup1\n 0x70a08231\n eq\n tag_8\n jumpi\n jump(tag_2)\n tag_1:\n jumpi(tag_2, calldatasize)\n stop\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":4321:4516 function name() override external view returns (string memory) {... */\n tag_3:\n callvalue\n dup1\n iszero\n tag_20\n jumpi\n 0x00\n dup1\n revert\n tag_20:\n pop\n tag_21\n tag_22\n jump\t// in\n tag_21:\n mload(0x40)\n tag_23\n swap2\n swap1\n tag_24\n jump\t// in\n tag_23:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6135:6282 function approve(address spender, uint256 value) override external returns (bool) {... */\n tag_4:\n callvalue\n dup1\n iszero\n tag_25\n jumpi\n 0x00\n dup1\n revert\n tag_25:\n pop\n tag_26\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_27\n swap2\n swap1\n tag_28\n jump\t// in\n tag_27:\n tag_29\n jump\t// in\n tag_26:\n mload(0x40)\n tag_30\n swap2\n swap1\n tag_31\n jump\t// in\n tag_30:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4976:5178 function totalSupply() override external view returns (uint256){... */\n tag_5:\n callvalue\n dup1\n iszero\n tag_32\n jumpi\n 0x00\n dup1\n revert\n tag_32:\n pop\n tag_33\n tag_34\n jump\t// in\n tag_33:\n mload(0x40)\n tag_35\n swap2\n swap1\n tag_36\n jump\t// in\n tag_35:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6606:6838 function transferFrom(... */\n tag_6:\n callvalue\n dup1\n iszero\n tag_37\n jumpi\n 0x00\n dup1\n revert\n tag_37:\n pop\n tag_38\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_39\n swap2\n swap1\n tag_40\n jump\t// in\n tag_39:\n tag_41\n jump\t// in\n tag_38:\n mload(0x40)\n tag_42\n swap2\n swap1\n tag_31\n jump\t// in\n tag_42:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4767:4962 function decimals() override external view returns (uint8) {... */\n tag_7:\n callvalue\n dup1\n iszero\n tag_43\n jumpi\n 0x00\n dup1\n revert\n tag_43:\n pop\n tag_44\n tag_45\n jump\t// in\n tag_44:\n mload(0x40)\n tag_46\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5204:5416 function balanceOf(address who) override external view returns (uint256){... */\n tag_8:\n callvalue\n dup1\n iszero\n tag_48\n jumpi\n 0x00\n dup1\n revert\n tag_48:\n pop\n tag_49\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_50\n swap2\n swap1\n tag_51\n jump\t// in\n tag_50:\n tag_52\n jump\t// in\n tag_49:\n mload(0x40)\n tag_53\n swap2\n swap1\n tag_36\n jump\t// in\n tag_53:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4063:4135 IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080) */\n tag_9:\n callvalue\n dup1\n iszero\n tag_54\n jumpi\n 0x00\n dup1\n revert\n tag_54:\n pop\n tag_55\n tag_56\n jump\t// in\n tag_55:\n mload(0x40)\n tag_57\n swap2\n swap1\n tag_58\n jump\t// in\n tag_57:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6864:7225 function transferFrom_delegate(... */\n tag_10:\n callvalue\n dup1\n iszero\n tag_59\n jumpi\n 0x00\n dup1\n revert\n tag_59:\n pop\n tag_60\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_61\n swap2\n swap1\n tag_40\n jump\t// in\n tag_61:\n tag_62\n jump\t// in\n tag_60:\n mload(0x40)\n tag_63\n swap2\n swap1\n tag_31\n jump\t// in\n tag_63:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4542:4741 function symbol() override external view returns (string memory) {... */\n tag_11:\n callvalue\n dup1\n iszero\n tag_64\n jumpi\n 0x00\n dup1\n revert\n tag_64:\n pop\n tag_65\n tag_66\n jump\t// in\n tag_65:\n mload(0x40)\n tag_67\n swap2\n swap1\n tag_24\n jump\t// in\n tag_67:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5833:6109 function transfer_delegate(address to, uint256 value) external returns (bool) {... */\n tag_12:\n callvalue\n dup1\n iszero\n tag_68\n jumpi\n 0x00\n dup1\n revert\n tag_68:\n pop\n tag_69\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_70\n swap2\n swap1\n tag_28\n jump\t// in\n tag_70:\n tag_71\n jump\t// in\n tag_69:\n mload(0x40)\n tag_72\n swap2\n swap1\n tag_31\n jump\t// in\n tag_72:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5664:5807 function transfer(address to, uint256 value) override external returns (bool) {... */\n tag_13:\n callvalue\n dup1\n iszero\n tag_73\n jumpi\n 0x00\n dup1\n revert\n tag_73:\n pop\n tag_74\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_75\n swap2\n swap1\n tag_28\n jump\t// in\n tag_75:\n tag_76\n jump\t// in\n tag_74:\n mload(0x40)\n tag_77\n swap2\n swap1\n tag_31\n jump\t// in\n tag_77:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5442:5650 function allowance(... */\n tag_14:\n callvalue\n dup1\n iszero\n tag_78\n jumpi\n 0x00\n dup1\n revert\n tag_78:\n pop\n tag_79\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_80\n swap2\n swap1\n tag_81\n jump\t// in\n tag_80:\n tag_82\n jump\t// in\n tag_79:\n mload(0x40)\n tag_83\n swap2\n swap1\n tag_36\n jump\t// in\n tag_83:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6296:6580 function approve_delegate(address spender, uint256 value) external returns (bool) {... */\n tag_15:\n callvalue\n dup1\n iszero\n tag_84\n jumpi\n 0x00\n dup1\n revert\n tag_84:\n pop\n tag_85\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_86\n swap2\n swap1\n tag_28\n jump\t// in\n tag_86:\n tag_87\n jump\t// in\n tag_85:\n mload(0x40)\n tag_88\n swap2\n swap1\n tag_31\n jump\t// in\n tag_88:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4321:4516 function name() override external view returns (string memory) {... */\n tag_22:\n /* \"main.sol\":4369:4382 string memory */\n 0x60\n /* \"main.sol\":4489:4494 erc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":4489:4499 erc20.name */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x06fdde03\n /* \"main.sol\":4489:4501 erc20.name() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_91\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_91:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_92\n swap2\n swap1\n tag_93\n jump\t// in\n tag_92:\n /* \"main.sol\":4482:4501 return erc20.name() */\n swap1\n pop\n /* \"main.sol\":4321:4516 function name() override external view returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":6135:6282 function approve(address spender, uint256 value) override external returns (bool) {... */\n tag_29:\n /* \"main.sol\":6211:6215 bool */\n 0x00\n /* \"main.sol\":6238:6243 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6238:6251 erc20.approve */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x095ea7b3\n /* \"main.sol\":6252:6259 spender */\n dup5\n /* \"main.sol\":6261:6266 value */\n dup5\n /* \"main.sol\":6238:6267 erc20.approve(spender, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_95\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_95:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_98\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_98:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_99\n swap2\n swap1\n tag_100\n jump\t// in\n tag_99:\n /* \"main.sol\":6231:6267 return erc20.approve(spender, value) */\n swap1\n pop\n /* \"main.sol\":6135:6282 function approve(address spender, uint256 value) override external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":4976:5178 function totalSupply() override external view returns (uint256){... */\n tag_34:\n /* \"main.sol\":5031:5038 uint256 */\n 0x00\n /* \"main.sol\":5144:5149 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":5144:5161 erc20.totalSupply */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x18160ddd\n /* \"main.sol\":5144:5163 erc20.totalSupply() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_103\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_103:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_104\n swap2\n swap1\n tag_105\n jump\t// in\n tag_104:\n /* \"main.sol\":5137:5163 return erc20.totalSupply() */\n swap1\n pop\n /* \"main.sol\":4976:5178 function totalSupply() override external view returns (uint256){... */\n swap1\n jump\t// out\n /* \"main.sol\":6606:6838 function transferFrom(... */\n tag_41:\n /* \"main.sol\":6757:6761 bool */\n 0x00\n /* \"main.sol\":6788:6793 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6788:6806 erc20.transferFrom */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x23b872dd\n /* \"main.sol\":6807:6811 from */\n dup6\n /* \"main.sol\":6813:6815 to */\n dup6\n /* \"main.sol\":6817:6822 value */\n dup6\n /* \"main.sol\":6788:6823 erc20.transferFrom(from, to, value) */\n mload(0x40)\n dup5\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_107\n swap4\n swap3\n swap2\n swap1\n tag_108\n jump\t// in\n tag_107:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_110\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_110:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_111\n swap2\n swap1\n tag_100\n jump\t// in\n tag_111:\n /* \"main.sol\":6781:6823 return erc20.transferFrom(from, to, value) */\n swap1\n pop\n /* \"main.sol\":6606:6838 function transferFrom(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":4767:4962 function decimals() override external view returns (uint8) {... */\n tag_45:\n /* \"main.sol\":4819:4824 uint8 */\n 0x00\n /* \"main.sol\":4931:4936 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":4931:4945 erc20.decimals */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x313ce567\n /* \"main.sol\":4931:4947 erc20.decimals() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_114\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_114:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_115\n swap2\n swap1\n tag_116\n jump\t// in\n tag_115:\n /* \"main.sol\":4924:4947 return erc20.decimals() */\n swap1\n pop\n /* \"main.sol\":4767:4962 function decimals() override external view returns (uint8) {... */\n swap1\n jump\t// out\n /* \"main.sol\":5204:5416 function balanceOf(address who) override external view returns (uint256){... */\n tag_52:\n /* \"main.sol\":5268:5275 uint256 */\n 0x00\n /* \"main.sol\":5381:5386 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":5381:5396 erc20.balanceOf */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x70a08231\n /* \"main.sol\":5397:5400 who */\n dup4\n /* \"main.sol\":5381:5401 erc20.balanceOf(who) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_118\n swap2\n swap1\n tag_119\n jump\t// in\n tag_118:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_121\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_121:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_122\n swap2\n swap1\n tag_105\n jump\t// in\n tag_122:\n /* \"main.sol\":5374:5401 return erc20.balanceOf(who) */\n swap1\n pop\n /* \"main.sol\":5204:5416 function balanceOf(address who) override external view returns (uint256){... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":4063:4135 IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080) */\n tag_56:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":6864:7225 function transferFrom_delegate(... */\n tag_62:\n /* \"main.sol\":7003:7007 bool */\n 0x00\n /* \"main.sol\":7024:7035 bool result */\n dup1\n /* \"main.sol\":7037:7054 bytes memory data */\n 0x00\n /* \"main.sol\":7058:7070 erc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7058:7083 erc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7166:7170 from */\n dup7\n /* \"main.sol\":7172:7174 to */\n dup7\n /* \"main.sol\":7176:7181 value */\n dup7\n /* \"main.sol\":7101:7182 abi.encodeWithSignature(\"transferFrom(address,address,uint256)\", from, to, value) */\n add(0x24, mload(0x40))\n tag_124\n swap4\n swap3\n swap2\n swap1\n tag_108\n jump\t// in\n tag_124:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x23b872dd00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":7058:7183 erc20address.delegatecall(... */\n mload(0x40)\n tag_125\n swap2\n swap1\n tag_126\n jump\t// in\n tag_125:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_129\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_128)\n tag_129:\n 0x60\n swap2\n pop\n tag_128:\n pop\n /* \"main.sol\":7023:7183 (bool result, bytes memory data) = erc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":7204:7210 result */\n dup2\n /* \"main.sol\":7197:7210 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":6864:7225 function transferFrom_delegate(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":4542:4741 function symbol() override external view returns (string memory) {... */\n tag_66:\n /* \"main.sol\":4592:4605 string memory */\n 0x60\n /* \"main.sol\":4712:4717 erc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":4712:4724 erc20.symbol */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x95d89b41\n /* \"main.sol\":4712:4726 erc20.symbol() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_132\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_132:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_133\n swap2\n swap1\n tag_93\n jump\t// in\n tag_133:\n /* \"main.sol\":4705:4726 return erc20.symbol() */\n swap1\n pop\n /* \"main.sol\":4542:4741 function symbol() override external view returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":5833:6109 function transfer_delegate(address to, uint256 value) external returns (bool) {... */\n tag_71:\n /* \"main.sol\":5905:5909 bool */\n 0x00\n /* \"main.sol\":5926:5937 bool result */\n dup1\n /* \"main.sol\":5939:5956 bytes memory data */\n 0x00\n /* \"main.sol\":5960:5972 erc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":5960:5985 erc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6056:6058 to */\n dup6\n /* \"main.sol\":6060:6065 value */\n dup6\n /* \"main.sol\":6003:6066 abi.encodeWithSignature(\"transfer(address,uint256)\", to, value) */\n add(0x24, mload(0x40))\n tag_135\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_135:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":5960:6067 erc20address.delegatecall(... */\n mload(0x40)\n tag_136\n swap2\n swap1\n tag_126\n jump\t// in\n tag_136:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_139\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_138)\n tag_139:\n 0x60\n swap2\n pop\n tag_138:\n pop\n /* \"main.sol\":5925:6067 (bool result, bytes memory data) = erc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":6088:6094 result */\n dup2\n /* \"main.sol\":6081:6094 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":5833:6109 function transfer_delegate(address to, uint256 value) external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":5664:5807 function transfer(address to, uint256 value) override external returns (bool) {... */\n tag_76:\n /* \"main.sol\":5736:5740 bool */\n 0x00\n /* \"main.sol\":5767:5772 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":5767:5781 erc20.transfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa9059cbb\n /* \"main.sol\":5782:5784 to */\n dup5\n /* \"main.sol\":5786:5791 value */\n dup5\n /* \"main.sol\":5767:5792 erc20.transfer(to, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_141\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_141:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_143\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_143:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_144\n swap2\n swap1\n tag_100\n jump\t// in\n tag_144:\n /* \"main.sol\":5760:5792 return erc20.transfer(to, value) */\n swap1\n pop\n /* \"main.sol\":5664:5807 function transfer(address to, uint256 value) override external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":5442:5650 function allowance(... */\n tag_82:\n /* \"main.sol\":5571:5578 uint256 */\n 0x00\n /* \"main.sol\":5604:5609 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":5604:5619 erc20.allowance */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xdd62ed3e\n /* \"main.sol\":5620:5625 owner */\n dup5\n /* \"main.sol\":5627:5634 spender */\n dup5\n /* \"main.sol\":5604:5635 erc20.allowance(owner, spender) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_146\n swap3\n swap2\n swap1\n tag_147\n jump\t// in\n tag_146:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_149\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_149:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_150\n swap2\n swap1\n tag_105\n jump\t// in\n tag_150:\n /* \"main.sol\":5597:5635 return erc20.allowance(owner, spender) */\n swap1\n pop\n /* \"main.sol\":5442:5650 function allowance(... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":6296:6580 function approve_delegate(address spender, uint256 value) external returns (bool) {... */\n tag_87:\n /* \"main.sol\":6372:6376 bool */\n 0x00\n /* \"main.sol\":6393:6404 bool result */\n dup1\n /* \"main.sol\":6406:6423 bytes memory data */\n 0x00\n /* \"main.sol\":6427:6439 erc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6427:6452 erc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6522:6529 spender */\n dup6\n /* \"main.sol\":6531:6536 value */\n dup6\n /* \"main.sol\":6470:6537 abi.encodeWithSignature(\"approve(address,uint256)\", spender, value) */\n add(0x24, mload(0x40))\n tag_152\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_152:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x095ea7b300000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":6427:6538 erc20address.delegatecall(... */\n mload(0x40)\n tag_153\n swap2\n swap1\n tag_126\n jump\t// in\n tag_153:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_156\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_155)\n tag_156:\n 0x60\n swap2\n pop\n tag_155:\n pop\n /* \"main.sol\":6392:6538 (bool result, bytes memory data) = erc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":6559:6565 result */\n dup2\n /* \"main.sol\":6552:6565 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":6296:6580 function approve_delegate(address spender, uint256 value) external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:106 */\n tag_157:\n /* \"#utility.yul\":59:65 */\n 0x00\n /* \"#utility.yul\":93:98 */\n dup2\n /* \"#utility.yul\":87:99 */\n mload\n /* \"#utility.yul\":77:99 */\n swap1\n pop\n /* \"#utility.yul\":7:106 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":112:281 */\n tag_158:\n /* \"#utility.yul\":196:207 */\n 0x00\n /* \"#utility.yul\":230:236 */\n dup3\n /* \"#utility.yul\":225:228 */\n dup3\n /* \"#utility.yul\":218:237 */\n mstore\n /* \"#utility.yul\":270:274 */\n 0x20\n /* \"#utility.yul\":265:268 */\n dup3\n /* \"#utility.yul\":261:275 */\n add\n /* \"#utility.yul\":246:275 */\n swap1\n pop\n /* \"#utility.yul\":112:281 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":287:594 */\n tag_159:\n /* \"#utility.yul\":355:356 */\n 0x00\n /* \"#utility.yul\":365:478 */\n tag_203:\n /* \"#utility.yul\":379:385 */\n dup4\n /* \"#utility.yul\":376:377 */\n dup2\n /* \"#utility.yul\":373:386 */\n lt\n /* \"#utility.yul\":365:478 */\n iszero\n tag_205\n jumpi\n /* \"#utility.yul\":464:465 */\n dup1\n /* \"#utility.yul\":459:462 */\n dup3\n /* \"#utility.yul\":455:466 */\n add\n /* \"#utility.yul\":449:467 */\n mload\n /* \"#utility.yul\":445:446 */\n dup2\n /* \"#utility.yul\":440:443 */\n dup5\n /* \"#utility.yul\":436:447 */\n add\n /* \"#utility.yul\":429:468 */\n mstore\n /* \"#utility.yul\":401:403 */\n 0x20\n /* \"#utility.yul\":398:399 */\n dup2\n /* \"#utility.yul\":394:404 */\n add\n /* \"#utility.yul\":389:404 */\n swap1\n pop\n /* \"#utility.yul\":365:478 */\n jump(tag_203)\n tag_205:\n /* \"#utility.yul\":496:502 */\n dup4\n /* \"#utility.yul\":493:494 */\n dup2\n /* \"#utility.yul\":490:503 */\n gt\n /* \"#utility.yul\":487:588 */\n iszero\n tag_206\n jumpi\n /* \"#utility.yul\":576:577 */\n 0x00\n /* \"#utility.yul\":567:573 */\n dup5\n /* \"#utility.yul\":562:565 */\n dup5\n /* \"#utility.yul\":558:574 */\n add\n /* \"#utility.yul\":551:578 */\n mstore\n /* \"#utility.yul\":487:588 */\n tag_206:\n /* \"#utility.yul\":336:594 */\n pop\n /* \"#utility.yul\":287:594 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":600:702 */\n tag_160:\n /* \"#utility.yul\":641:647 */\n 0x00\n /* \"#utility.yul\":692:694 */\n 0x1f\n /* \"#utility.yul\":688:695 */\n not\n /* \"#utility.yul\":683:685 */\n 0x1f\n /* \"#utility.yul\":676:681 */\n dup4\n /* \"#utility.yul\":672:686 */\n add\n /* \"#utility.yul\":668:696 */\n and\n /* \"#utility.yul\":658:696 */\n swap1\n pop\n /* \"#utility.yul\":600:702 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":708:1072 */\n tag_161:\n /* \"#utility.yul\":796:799 */\n 0x00\n /* \"#utility.yul\":824:863 */\n tag_209\n /* \"#utility.yul\":857:862 */\n dup3\n /* \"#utility.yul\":824:863 */\n tag_157\n jump\t// in\n tag_209:\n /* \"#utility.yul\":879:950 */\n tag_210\n /* \"#utility.yul\":943:949 */\n dup2\n /* \"#utility.yul\":938:941 */\n dup6\n /* \"#utility.yul\":879:950 */\n tag_158\n jump\t// in\n tag_210:\n /* \"#utility.yul\":872:950 */\n swap4\n pop\n /* \"#utility.yul\":959:1011 */\n tag_211\n /* \"#utility.yul\":1004:1010 */\n dup2\n /* \"#utility.yul\":999:1002 */\n dup6\n /* \"#utility.yul\":992:996 */\n 0x20\n /* \"#utility.yul\":985:990 */\n dup7\n /* \"#utility.yul\":981:997 */\n add\n /* \"#utility.yul\":959:1011 */\n tag_159\n jump\t// in\n tag_211:\n /* \"#utility.yul\":1036:1065 */\n tag_212\n /* \"#utility.yul\":1058:1064 */\n dup2\n /* \"#utility.yul\":1036:1065 */\n tag_160\n jump\t// in\n tag_212:\n /* \"#utility.yul\":1031:1034 */\n dup5\n /* \"#utility.yul\":1027:1066 */\n add\n /* \"#utility.yul\":1020:1066 */\n swap2\n pop\n /* \"#utility.yul\":800:1072 */\n pop\n /* \"#utility.yul\":708:1072 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1078:1391 */\n tag_24:\n /* \"#utility.yul\":1191:1195 */\n 0x00\n /* \"#utility.yul\":1229:1231 */\n 0x20\n /* \"#utility.yul\":1218:1227 */\n dup3\n /* \"#utility.yul\":1214:1232 */\n add\n /* \"#utility.yul\":1206:1232 */\n swap1\n pop\n /* \"#utility.yul\":1278:1287 */\n dup2\n /* \"#utility.yul\":1272:1276 */\n dup2\n /* \"#utility.yul\":1268:1288 */\n sub\n /* \"#utility.yul\":1264:1265 */\n 0x00\n /* \"#utility.yul\":1253:1262 */\n dup4\n /* \"#utility.yul\":1249:1266 */\n add\n /* \"#utility.yul\":1242:1289 */\n mstore\n /* \"#utility.yul\":1306:1384 */\n tag_214\n /* \"#utility.yul\":1379:1383 */\n dup2\n /* \"#utility.yul\":1370:1376 */\n dup5\n /* \"#utility.yul\":1306:1384 */\n tag_161\n jump\t// in\n tag_214:\n /* \"#utility.yul\":1298:1384 */\n swap1\n pop\n /* \"#utility.yul\":1078:1391 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1397:1472 */\n tag_162:\n /* \"#utility.yul\":1430:1436 */\n 0x00\n /* \"#utility.yul\":1463:1465 */\n 0x40\n /* \"#utility.yul\":1457:1466 */\n mload\n /* \"#utility.yul\":1447:1466 */\n swap1\n pop\n /* \"#utility.yul\":1397:1472 */\n swap1\n jump\t// out\n /* \"#utility.yul\":1478:1595 */\n tag_163:\n /* \"#utility.yul\":1587:1588 */\n 0x00\n /* \"#utility.yul\":1584:1585 */\n dup1\n /* \"#utility.yul\":1577:1589 */\n revert\n /* \"#utility.yul\":1601:1718 */\n tag_164:\n /* \"#utility.yul\":1710:1711 */\n 0x00\n /* \"#utility.yul\":1707:1708 */\n dup1\n /* \"#utility.yul\":1700:1712 */\n revert\n /* \"#utility.yul\":1724:1850 */\n tag_165:\n /* \"#utility.yul\":1761:1768 */\n 0x00\n /* \"#utility.yul\":1801:1843 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1794:1799 */\n dup3\n /* \"#utility.yul\":1790:1844 */\n and\n /* \"#utility.yul\":1779:1844 */\n swap1\n pop\n /* \"#utility.yul\":1724:1850 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1856:1952 */\n tag_166:\n /* \"#utility.yul\":1893:1900 */\n 0x00\n /* \"#utility.yul\":1922:1946 */\n tag_220\n /* \"#utility.yul\":1940:1945 */\n dup3\n /* \"#utility.yul\":1922:1946 */\n tag_165\n jump\t// in\n tag_220:\n /* \"#utility.yul\":1911:1946 */\n swap1\n pop\n /* \"#utility.yul\":1856:1952 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1958:2080 */\n tag_167:\n /* \"#utility.yul\":2031:2055 */\n tag_222\n /* \"#utility.yul\":2049:2054 */\n dup2\n /* \"#utility.yul\":2031:2055 */\n tag_166\n jump\t// in\n tag_222:\n /* \"#utility.yul\":2024:2029 */\n dup2\n /* \"#utility.yul\":2021:2056 */\n eq\n /* \"#utility.yul\":2011:2074 */\n tag_223\n jumpi\n /* \"#utility.yul\":2070:2071 */\n 0x00\n /* \"#utility.yul\":2067:2068 */\n dup1\n /* \"#utility.yul\":2060:2072 */\n revert\n /* \"#utility.yul\":2011:2074 */\n tag_223:\n /* \"#utility.yul\":1958:2080 */\n pop\n jump\t// out\n /* \"#utility.yul\":2086:2225 */\n tag_168:\n /* \"#utility.yul\":2132:2137 */\n 0x00\n /* \"#utility.yul\":2170:2176 */\n dup2\n /* \"#utility.yul\":2157:2177 */\n calldataload\n /* \"#utility.yul\":2148:2177 */\n swap1\n pop\n /* \"#utility.yul\":2186:2219 */\n tag_225\n /* \"#utility.yul\":2213:2218 */\n dup2\n /* \"#utility.yul\":2186:2219 */\n tag_167\n jump\t// in\n tag_225:\n /* \"#utility.yul\":2086:2225 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2231:2308 */\n tag_169:\n /* \"#utility.yul\":2268:2275 */\n 0x00\n /* \"#utility.yul\":2297:2302 */\n dup2\n /* \"#utility.yul\":2286:2302 */\n swap1\n pop\n /* \"#utility.yul\":2231:2308 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2314:2436 */\n tag_170:\n /* \"#utility.yul\":2387:2411 */\n tag_228\n /* \"#utility.yul\":2405:2410 */\n dup2\n /* \"#utility.yul\":2387:2411 */\n tag_169\n jump\t// in\n tag_228:\n /* \"#utility.yul\":2380:2385 */\n dup2\n /* \"#utility.yul\":2377:2412 */\n eq\n /* \"#utility.yul\":2367:2430 */\n tag_229\n jumpi\n /* \"#utility.yul\":2426:2427 */\n 0x00\n /* \"#utility.yul\":2423:2424 */\n dup1\n /* \"#utility.yul\":2416:2428 */\n revert\n /* \"#utility.yul\":2367:2430 */\n tag_229:\n /* \"#utility.yul\":2314:2436 */\n pop\n jump\t// out\n /* \"#utility.yul\":2442:2581 */\n tag_171:\n /* \"#utility.yul\":2488:2493 */\n 0x00\n /* \"#utility.yul\":2526:2532 */\n dup2\n /* \"#utility.yul\":2513:2533 */\n calldataload\n /* \"#utility.yul\":2504:2533 */\n swap1\n pop\n /* \"#utility.yul\":2542:2575 */\n tag_231\n /* \"#utility.yul\":2569:2574 */\n dup2\n /* \"#utility.yul\":2542:2575 */\n tag_170\n jump\t// in\n tag_231:\n /* \"#utility.yul\":2442:2581 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2587:3061 */\n tag_28:\n /* \"#utility.yul\":2655:2661 */\n 0x00\n /* \"#utility.yul\":2663:2669 */\n dup1\n /* \"#utility.yul\":2712:2714 */\n 0x40\n /* \"#utility.yul\":2700:2709 */\n dup4\n /* \"#utility.yul\":2691:2698 */\n dup6\n /* \"#utility.yul\":2687:2710 */\n sub\n /* \"#utility.yul\":2683:2715 */\n slt\n /* \"#utility.yul\":2680:2799 */\n iszero\n tag_233\n jumpi\n /* \"#utility.yul\":2718:2797 */\n tag_234\n tag_163\n jump\t// in\n tag_234:\n /* \"#utility.yul\":2680:2799 */\n tag_233:\n /* \"#utility.yul\":2838:2839 */\n 0x00\n /* \"#utility.yul\":2863:2916 */\n tag_235\n /* \"#utility.yul\":2908:2915 */\n dup6\n /* \"#utility.yul\":2899:2905 */\n dup3\n /* \"#utility.yul\":2888:2897 */\n dup7\n /* \"#utility.yul\":2884:2906 */\n add\n /* \"#utility.yul\":2863:2916 */\n tag_168\n jump\t// in\n tag_235:\n /* \"#utility.yul\":2853:2916 */\n swap3\n pop\n /* \"#utility.yul\":2809:2926 */\n pop\n /* \"#utility.yul\":2965:2967 */\n 0x20\n /* \"#utility.yul\":2991:3044 */\n tag_236\n /* \"#utility.yul\":3036:3043 */\n dup6\n /* \"#utility.yul\":3027:3033 */\n dup3\n /* \"#utility.yul\":3016:3025 */\n dup7\n /* \"#utility.yul\":3012:3034 */\n add\n /* \"#utility.yul\":2991:3044 */\n tag_171\n jump\t// in\n tag_236:\n /* \"#utility.yul\":2981:3044 */\n swap2\n pop\n /* \"#utility.yul\":2936:3054 */\n pop\n /* \"#utility.yul\":2587:3061 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3067:3157 */\n tag_172:\n /* \"#utility.yul\":3101:3108 */\n 0x00\n /* \"#utility.yul\":3144:3149 */\n dup2\n /* \"#utility.yul\":3137:3150 */\n iszero\n /* \"#utility.yul\":3130:3151 */\n iszero\n /* \"#utility.yul\":3119:3151 */\n swap1\n pop\n /* \"#utility.yul\":3067:3157 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3163:3272 */\n tag_173:\n /* \"#utility.yul\":3244:3265 */\n tag_239\n /* \"#utility.yul\":3259:3264 */\n dup2\n /* \"#utility.yul\":3244:3265 */\n tag_172\n jump\t// in\n tag_239:\n /* \"#utility.yul\":3239:3242 */\n dup3\n /* \"#utility.yul\":3232:3266 */\n mstore\n /* \"#utility.yul\":3163:3272 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3278:3488 */\n tag_31:\n /* \"#utility.yul\":3365:3369 */\n 0x00\n /* \"#utility.yul\":3403:3405 */\n 0x20\n /* \"#utility.yul\":3392:3401 */\n dup3\n /* \"#utility.yul\":3388:3406 */\n add\n /* \"#utility.yul\":3380:3406 */\n swap1\n pop\n /* \"#utility.yul\":3416:3481 */\n tag_241\n /* \"#utility.yul\":3478:3479 */\n 0x00\n /* \"#utility.yul\":3467:3476 */\n dup4\n /* \"#utility.yul\":3463:3480 */\n add\n /* \"#utility.yul\":3454:3460 */\n dup5\n /* \"#utility.yul\":3416:3481 */\n tag_173\n jump\t// in\n tag_241:\n /* \"#utility.yul\":3278:3488 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3494:3612 */\n tag_174:\n /* \"#utility.yul\":3581:3605 */\n tag_243\n /* \"#utility.yul\":3599:3604 */\n dup2\n /* \"#utility.yul\":3581:3605 */\n tag_169\n jump\t// in\n tag_243:\n /* \"#utility.yul\":3576:3579 */\n dup3\n /* \"#utility.yul\":3569:3606 */\n mstore\n /* \"#utility.yul\":3494:3612 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3618:3840 */\n tag_36:\n /* \"#utility.yul\":3711:3715 */\n 0x00\n /* \"#utility.yul\":3749:3751 */\n 0x20\n /* \"#utility.yul\":3738:3747 */\n dup3\n /* \"#utility.yul\":3734:3752 */\n add\n /* \"#utility.yul\":3726:3752 */\n swap1\n pop\n /* \"#utility.yul\":3762:3833 */\n tag_245\n /* \"#utility.yul\":3830:3831 */\n 0x00\n /* \"#utility.yul\":3819:3828 */\n dup4\n /* \"#utility.yul\":3815:3832 */\n add\n /* \"#utility.yul\":3806:3812 */\n dup5\n /* \"#utility.yul\":3762:3833 */\n tag_174\n jump\t// in\n tag_245:\n /* \"#utility.yul\":3618:3840 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3846:4465 */\n tag_40:\n /* \"#utility.yul\":3923:3929 */\n 0x00\n /* \"#utility.yul\":3931:3937 */\n dup1\n /* \"#utility.yul\":3939:3945 */\n 0x00\n /* \"#utility.yul\":3988:3990 */\n 0x60\n /* \"#utility.yul\":3976:3985 */\n dup5\n /* \"#utility.yul\":3967:3974 */\n dup7\n /* \"#utility.yul\":3963:3986 */\n sub\n /* \"#utility.yul\":3959:3991 */\n slt\n /* \"#utility.yul\":3956:4075 */\n iszero\n tag_247\n jumpi\n /* \"#utility.yul\":3994:4073 */\n tag_248\n tag_163\n jump\t// in\n tag_248:\n /* \"#utility.yul\":3956:4075 */\n tag_247:\n /* \"#utility.yul\":4114:4115 */\n 0x00\n /* \"#utility.yul\":4139:4192 */\n tag_249\n /* \"#utility.yul\":4184:4191 */\n dup7\n /* \"#utility.yul\":4175:4181 */\n dup3\n /* \"#utility.yul\":4164:4173 */\n dup8\n /* \"#utility.yul\":4160:4182 */\n add\n /* \"#utility.yul\":4139:4192 */\n tag_168\n jump\t// in\n tag_249:\n /* \"#utility.yul\":4129:4192 */\n swap4\n pop\n /* \"#utility.yul\":4085:4202 */\n pop\n /* \"#utility.yul\":4241:4243 */\n 0x20\n /* \"#utility.yul\":4267:4320 */\n tag_250\n /* \"#utility.yul\":4312:4319 */\n dup7\n /* \"#utility.yul\":4303:4309 */\n dup3\n /* \"#utility.yul\":4292:4301 */\n dup8\n /* \"#utility.yul\":4288:4310 */\n add\n /* \"#utility.yul\":4267:4320 */\n tag_168\n jump\t// in\n tag_250:\n /* \"#utility.yul\":4257:4320 */\n swap3\n pop\n /* \"#utility.yul\":4212:4330 */\n pop\n /* \"#utility.yul\":4369:4371 */\n 0x40\n /* \"#utility.yul\":4395:4448 */\n tag_251\n /* \"#utility.yul\":4440:4447 */\n dup7\n /* \"#utility.yul\":4431:4437 */\n dup3\n /* \"#utility.yul\":4420:4429 */\n dup8\n /* \"#utility.yul\":4416:4438 */\n add\n /* \"#utility.yul\":4395:4448 */\n tag_171\n jump\t// in\n tag_251:\n /* \"#utility.yul\":4385:4448 */\n swap2\n pop\n /* \"#utility.yul\":4340:4458 */\n pop\n /* \"#utility.yul\":3846:4465 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":4471:4557 */\n tag_175:\n /* \"#utility.yul\":4506:4513 */\n 0x00\n /* \"#utility.yul\":4546:4550 */\n 0xff\n /* \"#utility.yul\":4539:4544 */\n dup3\n /* \"#utility.yul\":4535:4551 */\n and\n /* \"#utility.yul\":4524:4551 */\n swap1\n pop\n /* \"#utility.yul\":4471:4557 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4563:4675 */\n tag_176:\n /* \"#utility.yul\":4646:4668 */\n tag_254\n /* \"#utility.yul\":4662:4667 */\n dup2\n /* \"#utility.yul\":4646:4668 */\n tag_175\n jump\t// in\n tag_254:\n /* \"#utility.yul\":4641:4644 */\n dup3\n /* \"#utility.yul\":4634:4669 */\n mstore\n /* \"#utility.yul\":4563:4675 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4681:4895 */\n tag_47:\n /* \"#utility.yul\":4770:4774 */\n 0x00\n /* \"#utility.yul\":4808:4810 */\n 0x20\n /* \"#utility.yul\":4797:4806 */\n dup3\n /* \"#utility.yul\":4793:4811 */\n add\n /* \"#utility.yul\":4785:4811 */\n swap1\n pop\n /* \"#utility.yul\":4821:4888 */\n tag_256\n /* \"#utility.yul\":4885:4886 */\n 0x00\n /* \"#utility.yul\":4874:4883 */\n dup4\n /* \"#utility.yul\":4870:4887 */\n add\n /* \"#utility.yul\":4861:4867 */\n dup5\n /* \"#utility.yul\":4821:4888 */\n tag_176\n jump\t// in\n tag_256:\n /* \"#utility.yul\":4681:4895 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4901:5230 */\n tag_51:\n /* \"#utility.yul\":4960:4966 */\n 0x00\n /* \"#utility.yul\":5009:5011 */\n 0x20\n /* \"#utility.yul\":4997:5006 */\n dup3\n /* \"#utility.yul\":4988:4995 */\n dup5\n /* \"#utility.yul\":4984:5007 */\n sub\n /* \"#utility.yul\":4980:5012 */\n slt\n /* \"#utility.yul\":4977:5096 */\n iszero\n tag_258\n jumpi\n /* \"#utility.yul\":5015:5094 */\n tag_259\n tag_163\n jump\t// in\n tag_259:\n /* \"#utility.yul\":4977:5096 */\n tag_258:\n /* \"#utility.yul\":5135:5136 */\n 0x00\n /* \"#utility.yul\":5160:5213 */\n tag_260\n /* \"#utility.yul\":5205:5212 */\n dup5\n /* \"#utility.yul\":5196:5202 */\n dup3\n /* \"#utility.yul\":5185:5194 */\n dup6\n /* \"#utility.yul\":5181:5203 */\n add\n /* \"#utility.yul\":5160:5213 */\n tag_168\n jump\t// in\n tag_260:\n /* \"#utility.yul\":5150:5213 */\n swap2\n pop\n /* \"#utility.yul\":5106:5223 */\n pop\n /* \"#utility.yul\":4901:5230 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5236:5296 */\n tag_177:\n /* \"#utility.yul\":5264:5267 */\n 0x00\n /* \"#utility.yul\":5285:5290 */\n dup2\n /* \"#utility.yul\":5278:5290 */\n swap1\n pop\n /* \"#utility.yul\":5236:5296 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5302:5444 */\n tag_178:\n /* \"#utility.yul\":5352:5361 */\n 0x00\n /* \"#utility.yul\":5385:5438 */\n tag_263\n /* \"#utility.yul\":5403:5437 */\n tag_264\n /* \"#utility.yul\":5412:5436 */\n tag_265\n /* \"#utility.yul\":5430:5435 */\n dup5\n /* \"#utility.yul\":5412:5436 */\n tag_165\n jump\t// in\n tag_265:\n /* \"#utility.yul\":5403:5437 */\n tag_177\n jump\t// in\n tag_264:\n /* \"#utility.yul\":5385:5438 */\n tag_165\n jump\t// in\n tag_263:\n /* \"#utility.yul\":5372:5438 */\n swap1\n pop\n /* \"#utility.yul\":5302:5444 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5450:5576 */\n tag_179:\n /* \"#utility.yul\":5500:5509 */\n 0x00\n /* \"#utility.yul\":5533:5570 */\n tag_267\n /* \"#utility.yul\":5564:5569 */\n dup3\n /* \"#utility.yul\":5533:5570 */\n tag_178\n jump\t// in\n tag_267:\n /* \"#utility.yul\":5520:5570 */\n swap1\n pop\n /* \"#utility.yul\":5450:5576 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5582:5721 */\n tag_180:\n /* \"#utility.yul\":5645:5654 */\n 0x00\n /* \"#utility.yul\":5678:5715 */\n tag_269\n /* \"#utility.yul\":5709:5714 */\n dup3\n /* \"#utility.yul\":5678:5715 */\n tag_179\n jump\t// in\n tag_269:\n /* \"#utility.yul\":5665:5715 */\n swap1\n pop\n /* \"#utility.yul\":5582:5721 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5727:5884 */\n tag_181:\n /* \"#utility.yul\":5827:5877 */\n tag_271\n /* \"#utility.yul\":5871:5876 */\n dup2\n /* \"#utility.yul\":5827:5877 */\n tag_180\n jump\t// in\n tag_271:\n /* \"#utility.yul\":5822:5825 */\n dup3\n /* \"#utility.yul\":5815:5878 */\n mstore\n /* \"#utility.yul\":5727:5884 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5890:6138 */\n tag_58:\n /* \"#utility.yul\":5996:6000 */\n 0x00\n /* \"#utility.yul\":6034:6036 */\n 0x20\n /* \"#utility.yul\":6023:6032 */\n dup3\n /* \"#utility.yul\":6019:6037 */\n add\n /* \"#utility.yul\":6011:6037 */\n swap1\n pop\n /* \"#utility.yul\":6047:6131 */\n tag_273\n /* \"#utility.yul\":6128:6129 */\n 0x00\n /* \"#utility.yul\":6117:6126 */\n dup4\n /* \"#utility.yul\":6113:6130 */\n add\n /* \"#utility.yul\":6104:6110 */\n dup5\n /* \"#utility.yul\":6047:6131 */\n tag_181\n jump\t// in\n tag_273:\n /* \"#utility.yul\":5890:6138 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6144:6618 */\n tag_81:\n /* \"#utility.yul\":6212:6218 */\n 0x00\n /* \"#utility.yul\":6220:6226 */\n dup1\n /* \"#utility.yul\":6269:6271 */\n 0x40\n /* \"#utility.yul\":6257:6266 */\n dup4\n /* \"#utility.yul\":6248:6255 */\n dup6\n /* \"#utility.yul\":6244:6267 */\n sub\n /* \"#utility.yul\":6240:6272 */\n slt\n /* \"#utility.yul\":6237:6356 */\n iszero\n tag_275\n jumpi\n /* \"#utility.yul\":6275:6354 */\n tag_276\n tag_163\n jump\t// in\n tag_276:\n /* \"#utility.yul\":6237:6356 */\n tag_275:\n /* \"#utility.yul\":6395:6396 */\n 0x00\n /* \"#utility.yul\":6420:6473 */\n tag_277\n /* \"#utility.yul\":6465:6472 */\n dup6\n /* \"#utility.yul\":6456:6462 */\n dup3\n /* \"#utility.yul\":6445:6454 */\n dup7\n /* \"#utility.yul\":6441:6463 */\n add\n /* \"#utility.yul\":6420:6473 */\n tag_168\n jump\t// in\n tag_277:\n /* \"#utility.yul\":6410:6473 */\n swap3\n pop\n /* \"#utility.yul\":6366:6483 */\n pop\n /* \"#utility.yul\":6522:6524 */\n 0x20\n /* \"#utility.yul\":6548:6601 */\n tag_278\n /* \"#utility.yul\":6593:6600 */\n dup6\n /* \"#utility.yul\":6584:6590 */\n dup3\n /* \"#utility.yul\":6573:6582 */\n dup7\n /* \"#utility.yul\":6569:6591 */\n add\n /* \"#utility.yul\":6548:6601 */\n tag_168\n jump\t// in\n tag_278:\n /* \"#utility.yul\":6538:6601 */\n swap2\n pop\n /* \"#utility.yul\":6493:6611 */\n pop\n /* \"#utility.yul\":6144:6618 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6624:6741 */\n tag_182:\n /* \"#utility.yul\":6733:6734 */\n 0x00\n /* \"#utility.yul\":6730:6731 */\n dup1\n /* \"#utility.yul\":6723:6735 */\n revert\n /* \"#utility.yul\":6747:6864 */\n tag_183:\n /* \"#utility.yul\":6856:6857 */\n 0x00\n /* \"#utility.yul\":6853:6854 */\n dup1\n /* \"#utility.yul\":6846:6858 */\n revert\n /* \"#utility.yul\":6870:7050 */\n tag_184:\n /* \"#utility.yul\":6918:6995 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":6915:6916 */\n 0x00\n /* \"#utility.yul\":6908:6996 */\n mstore\n /* \"#utility.yul\":7015:7019 */\n 0x41\n /* \"#utility.yul\":7012:7013 */\n 0x04\n /* \"#utility.yul\":7005:7020 */\n mstore\n /* \"#utility.yul\":7039:7043 */\n 0x24\n /* \"#utility.yul\":7036:7037 */\n 0x00\n /* \"#utility.yul\":7029:7044 */\n revert\n /* \"#utility.yul\":7056:7337 */\n tag_185:\n /* \"#utility.yul\":7139:7166 */\n tag_283\n /* \"#utility.yul\":7161:7165 */\n dup3\n /* \"#utility.yul\":7139:7166 */\n tag_160\n jump\t// in\n tag_283:\n /* \"#utility.yul\":7131:7137 */\n dup2\n /* \"#utility.yul\":7127:7167 */\n add\n /* \"#utility.yul\":7269:7275 */\n dup2\n /* \"#utility.yul\":7257:7267 */\n dup2\n /* \"#utility.yul\":7254:7276 */\n lt\n /* \"#utility.yul\":7233:7251 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7221:7231 */\n dup3\n /* \"#utility.yul\":7218:7252 */\n gt\n /* \"#utility.yul\":7215:7277 */\n or\n /* \"#utility.yul\":7212:7300 */\n iszero\n tag_284\n jumpi\n /* \"#utility.yul\":7280:7298 */\n tag_285\n tag_184\n jump\t// in\n tag_285:\n /* \"#utility.yul\":7212:7300 */\n tag_284:\n /* \"#utility.yul\":7320:7330 */\n dup1\n /* \"#utility.yul\":7316:7318 */\n 0x40\n /* \"#utility.yul\":7309:7331 */\n mstore\n /* \"#utility.yul\":7099:7337 */\n pop\n /* \"#utility.yul\":7056:7337 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7343:7472 */\n tag_186:\n /* \"#utility.yul\":7377:7383 */\n 0x00\n /* \"#utility.yul\":7404:7424 */\n tag_287\n tag_162\n jump\t// in\n tag_287:\n /* \"#utility.yul\":7394:7424 */\n swap1\n pop\n /* \"#utility.yul\":7433:7466 */\n tag_288\n /* \"#utility.yul\":7461:7465 */\n dup3\n /* \"#utility.yul\":7453:7459 */\n dup3\n /* \"#utility.yul\":7433:7466 */\n tag_185\n jump\t// in\n tag_288:\n /* \"#utility.yul\":7343:7472 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7478:7786 */\n tag_187:\n /* \"#utility.yul\":7540:7544 */\n 0x00\n /* \"#utility.yul\":7630:7648 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7622:7628 */\n dup3\n /* \"#utility.yul\":7619:7649 */\n gt\n /* \"#utility.yul\":7616:7672 */\n iszero\n tag_290\n jumpi\n /* \"#utility.yul\":7652:7670 */\n tag_291\n tag_184\n jump\t// in\n tag_291:\n /* \"#utility.yul\":7616:7672 */\n tag_290:\n /* \"#utility.yul\":7690:7719 */\n tag_292\n /* \"#utility.yul\":7712:7718 */\n dup3\n /* \"#utility.yul\":7690:7719 */\n tag_160\n jump\t// in\n tag_292:\n /* \"#utility.yul\":7682:7719 */\n swap1\n pop\n /* \"#utility.yul\":7774:7778 */\n 0x20\n /* \"#utility.yul\":7768:7772 */\n dup2\n /* \"#utility.yul\":7764:7779 */\n add\n /* \"#utility.yul\":7756:7779 */\n swap1\n pop\n /* \"#utility.yul\":7478:7786 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7792:8213 */\n tag_188:\n /* \"#utility.yul\":7881:7886 */\n 0x00\n /* \"#utility.yul\":7906:7972 */\n tag_294\n /* \"#utility.yul\":7922:7971 */\n tag_295\n /* \"#utility.yul\":7964:7970 */\n dup5\n /* \"#utility.yul\":7922:7971 */\n tag_187\n jump\t// in\n tag_295:\n /* \"#utility.yul\":7906:7972 */\n tag_186\n jump\t// in\n tag_294:\n /* \"#utility.yul\":7897:7972 */\n swap1\n pop\n /* \"#utility.yul\":7995:8001 */\n dup3\n /* \"#utility.yul\":7988:7993 */\n dup2\n /* \"#utility.yul\":7981:8002 */\n mstore\n /* \"#utility.yul\":8033:8037 */\n 0x20\n /* \"#utility.yul\":8026:8031 */\n dup2\n /* \"#utility.yul\":8022:8038 */\n add\n /* \"#utility.yul\":8071:8074 */\n dup5\n /* \"#utility.yul\":8062:8068 */\n dup5\n /* \"#utility.yul\":8057:8060 */\n dup5\n /* \"#utility.yul\":8053:8069 */\n add\n /* \"#utility.yul\":8050:8075 */\n gt\n /* \"#utility.yul\":8047:8159 */\n iszero\n tag_296\n jumpi\n /* \"#utility.yul\":8078:8157 */\n tag_297\n tag_183\n jump\t// in\n tag_297:\n /* \"#utility.yul\":8047:8159 */\n tag_296:\n /* \"#utility.yul\":8168:8207 */\n tag_298\n /* \"#utility.yul\":8200:8206 */\n dup5\n /* \"#utility.yul\":8195:8198 */\n dup3\n /* \"#utility.yul\":8190:8193 */\n dup6\n /* \"#utility.yul\":8168:8207 */\n tag_159\n jump\t// in\n tag_298:\n /* \"#utility.yul\":7887:8213 */\n pop\n /* \"#utility.yul\":7792:8213 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8233:8588 */\n tag_189:\n /* \"#utility.yul\":8300:8305 */\n 0x00\n /* \"#utility.yul\":8349:8352 */\n dup3\n /* \"#utility.yul\":8342:8346 */\n 0x1f\n /* \"#utility.yul\":8334:8340 */\n dup4\n /* \"#utility.yul\":8330:8347 */\n add\n /* \"#utility.yul\":8326:8353 */\n slt\n /* \"#utility.yul\":8316:8438 */\n tag_300\n jumpi\n /* \"#utility.yul\":8357:8436 */\n tag_301\n tag_182\n jump\t// in\n tag_301:\n /* \"#utility.yul\":8316:8438 */\n tag_300:\n /* \"#utility.yul\":8467:8473 */\n dup2\n /* \"#utility.yul\":8461:8474 */\n mload\n /* \"#utility.yul\":8492:8582 */\n tag_302\n /* \"#utility.yul\":8578:8581 */\n dup5\n /* \"#utility.yul\":8570:8576 */\n dup3\n /* \"#utility.yul\":8563:8567 */\n 0x20\n /* \"#utility.yul\":8555:8561 */\n dup7\n /* \"#utility.yul\":8551:8568 */\n add\n /* \"#utility.yul\":8492:8582 */\n tag_188\n jump\t// in\n tag_302:\n /* \"#utility.yul\":8483:8582 */\n swap2\n pop\n /* \"#utility.yul\":8306:8588 */\n pop\n /* \"#utility.yul\":8233:8588 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8594:9118 */\n tag_93:\n /* \"#utility.yul\":8674:8680 */\n 0x00\n /* \"#utility.yul\":8723:8725 */\n 0x20\n /* \"#utility.yul\":8711:8720 */\n dup3\n /* \"#utility.yul\":8702:8709 */\n dup5\n /* \"#utility.yul\":8698:8721 */\n sub\n /* \"#utility.yul\":8694:8726 */\n slt\n /* \"#utility.yul\":8691:8810 */\n iszero\n tag_304\n jumpi\n /* \"#utility.yul\":8729:8808 */\n tag_305\n tag_163\n jump\t// in\n tag_305:\n /* \"#utility.yul\":8691:8810 */\n tag_304:\n /* \"#utility.yul\":8870:8871 */\n 0x00\n /* \"#utility.yul\":8859:8868 */\n dup3\n /* \"#utility.yul\":8855:8872 */\n add\n /* \"#utility.yul\":8849:8873 */\n mload\n /* \"#utility.yul\":8900:8918 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8892:8898 */\n dup2\n /* \"#utility.yul\":8889:8919 */\n gt\n /* \"#utility.yul\":8886:9003 */\n iszero\n tag_306\n jumpi\n /* \"#utility.yul\":8922:9001 */\n tag_307\n tag_164\n jump\t// in\n tag_307:\n /* \"#utility.yul\":8886:9003 */\n tag_306:\n /* \"#utility.yul\":9027:9101 */\n tag_308\n /* \"#utility.yul\":9093:9100 */\n dup5\n /* \"#utility.yul\":9084:9090 */\n dup3\n /* \"#utility.yul\":9073:9082 */\n dup6\n /* \"#utility.yul\":9069:9091 */\n add\n /* \"#utility.yul\":9027:9101 */\n tag_189\n jump\t// in\n tag_308:\n /* \"#utility.yul\":9017:9101 */\n swap2\n pop\n /* \"#utility.yul\":8820:9111 */\n pop\n /* \"#utility.yul\":8594:9118 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9124:9242 */\n tag_190:\n /* \"#utility.yul\":9211:9235 */\n tag_310\n /* \"#utility.yul\":9229:9234 */\n dup2\n /* \"#utility.yul\":9211:9235 */\n tag_166\n jump\t// in\n tag_310:\n /* \"#utility.yul\":9206:9209 */\n dup3\n /* \"#utility.yul\":9199:9236 */\n mstore\n /* \"#utility.yul\":9124:9242 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9248:9580 */\n tag_96:\n /* \"#utility.yul\":9369:9373 */\n 0x00\n /* \"#utility.yul\":9407:9409 */\n 0x40\n /* \"#utility.yul\":9396:9405 */\n dup3\n /* \"#utility.yul\":9392:9410 */\n add\n /* \"#utility.yul\":9384:9410 */\n swap1\n pop\n /* \"#utility.yul\":9420:9491 */\n tag_312\n /* \"#utility.yul\":9488:9489 */\n 0x00\n /* \"#utility.yul\":9477:9486 */\n dup4\n /* \"#utility.yul\":9473:9490 */\n add\n /* \"#utility.yul\":9464:9470 */\n dup6\n /* \"#utility.yul\":9420:9491 */\n tag_190\n jump\t// in\n tag_312:\n /* \"#utility.yul\":9501:9573 */\n tag_313\n /* \"#utility.yul\":9569:9571 */\n 0x20\n /* \"#utility.yul\":9558:9567 */\n dup4\n /* \"#utility.yul\":9554:9572 */\n add\n /* \"#utility.yul\":9545:9551 */\n dup5\n /* \"#utility.yul\":9501:9573 */\n tag_174\n jump\t// in\n tag_313:\n /* \"#utility.yul\":9248:9580 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9586:9702 */\n tag_191:\n /* \"#utility.yul\":9656:9677 */\n tag_315\n /* \"#utility.yul\":9671:9676 */\n dup2\n /* \"#utility.yul\":9656:9677 */\n tag_172\n jump\t// in\n tag_315:\n /* \"#utility.yul\":9649:9654 */\n dup2\n /* \"#utility.yul\":9646:9678 */\n eq\n /* \"#utility.yul\":9636:9696 */\n tag_316\n jumpi\n /* \"#utility.yul\":9692:9693 */\n 0x00\n /* \"#utility.yul\":9689:9690 */\n dup1\n /* \"#utility.yul\":9682:9694 */\n revert\n /* \"#utility.yul\":9636:9696 */\n tag_316:\n /* \"#utility.yul\":9586:9702 */\n pop\n jump\t// out\n /* \"#utility.yul\":9708:9845 */\n tag_192:\n /* \"#utility.yul\":9762:9767 */\n 0x00\n /* \"#utility.yul\":9793:9799 */\n dup2\n /* \"#utility.yul\":9787:9800 */\n mload\n /* \"#utility.yul\":9778:9800 */\n swap1\n pop\n /* \"#utility.yul\":9809:9839 */\n tag_318\n /* \"#utility.yul\":9833:9838 */\n dup2\n /* \"#utility.yul\":9809:9839 */\n tag_191\n jump\t// in\n tag_318:\n /* \"#utility.yul\":9708:9845 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9851:10196 */\n tag_100:\n /* \"#utility.yul\":9918:9924 */\n 0x00\n /* \"#utility.yul\":9967:9969 */\n 0x20\n /* \"#utility.yul\":9955:9964 */\n dup3\n /* \"#utility.yul\":9946:9953 */\n dup5\n /* \"#utility.yul\":9942:9965 */\n sub\n /* \"#utility.yul\":9938:9970 */\n slt\n /* \"#utility.yul\":9935:10054 */\n iszero\n tag_320\n jumpi\n /* \"#utility.yul\":9973:10052 */\n tag_321\n tag_163\n jump\t// in\n tag_321:\n /* \"#utility.yul\":9935:10054 */\n tag_320:\n /* \"#utility.yul\":10093:10094 */\n 0x00\n /* \"#utility.yul\":10118:10179 */\n tag_322\n /* \"#utility.yul\":10171:10178 */\n dup5\n /* \"#utility.yul\":10162:10168 */\n dup3\n /* \"#utility.yul\":10151:10160 */\n dup6\n /* \"#utility.yul\":10147:10169 */\n add\n /* \"#utility.yul\":10118:10179 */\n tag_192\n jump\t// in\n tag_322:\n /* \"#utility.yul\":10108:10179 */\n swap2\n pop\n /* \"#utility.yul\":10064:10189 */\n pop\n /* \"#utility.yul\":9851:10196 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10202:10345 */\n tag_193:\n /* \"#utility.yul\":10259:10264 */\n 0x00\n /* \"#utility.yul\":10290:10296 */\n dup2\n /* \"#utility.yul\":10284:10297 */\n mload\n /* \"#utility.yul\":10275:10297 */\n swap1\n pop\n /* \"#utility.yul\":10306:10339 */\n tag_324\n /* \"#utility.yul\":10333:10338 */\n dup2\n /* \"#utility.yul\":10306:10339 */\n tag_170\n jump\t// in\n tag_324:\n /* \"#utility.yul\":10202:10345 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10351:10702 */\n tag_105:\n /* \"#utility.yul\":10421:10427 */\n 0x00\n /* \"#utility.yul\":10470:10472 */\n 0x20\n /* \"#utility.yul\":10458:10467 */\n dup3\n /* \"#utility.yul\":10449:10456 */\n dup5\n /* \"#utility.yul\":10445:10468 */\n sub\n /* \"#utility.yul\":10441:10473 */\n slt\n /* \"#utility.yul\":10438:10557 */\n iszero\n tag_326\n jumpi\n /* \"#utility.yul\":10476:10555 */\n tag_327\n tag_163\n jump\t// in\n tag_327:\n /* \"#utility.yul\":10438:10557 */\n tag_326:\n /* \"#utility.yul\":10596:10597 */\n 0x00\n /* \"#utility.yul\":10621:10685 */\n tag_328\n /* \"#utility.yul\":10677:10684 */\n dup5\n /* \"#utility.yul\":10668:10674 */\n dup3\n /* \"#utility.yul\":10657:10666 */\n dup6\n /* \"#utility.yul\":10653:10675 */\n add\n /* \"#utility.yul\":10621:10685 */\n tag_193\n jump\t// in\n tag_328:\n /* \"#utility.yul\":10611:10685 */\n swap2\n pop\n /* \"#utility.yul\":10567:10695 */\n pop\n /* \"#utility.yul\":10351:10702 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10708:11150 */\n tag_108:\n /* \"#utility.yul\":10857:10861 */\n 0x00\n /* \"#utility.yul\":10895:10897 */\n 0x60\n /* \"#utility.yul\":10884:10893 */\n dup3\n /* \"#utility.yul\":10880:10898 */\n add\n /* \"#utility.yul\":10872:10898 */\n swap1\n pop\n /* \"#utility.yul\":10908:10979 */\n tag_330\n /* \"#utility.yul\":10976:10977 */\n 0x00\n /* \"#utility.yul\":10965:10974 */\n dup4\n /* \"#utility.yul\":10961:10978 */\n add\n /* \"#utility.yul\":10952:10958 */\n dup7\n /* \"#utility.yul\":10908:10979 */\n tag_190\n jump\t// in\n tag_330:\n /* \"#utility.yul\":10989:11061 */\n tag_331\n /* \"#utility.yul\":11057:11059 */\n 0x20\n /* \"#utility.yul\":11046:11055 */\n dup4\n /* \"#utility.yul\":11042:11060 */\n add\n /* \"#utility.yul\":11033:11039 */\n dup6\n /* \"#utility.yul\":10989:11061 */\n tag_190\n jump\t// in\n tag_331:\n /* \"#utility.yul\":11071:11143 */\n tag_332\n /* \"#utility.yul\":11139:11141 */\n 0x40\n /* \"#utility.yul\":11128:11137 */\n dup4\n /* \"#utility.yul\":11124:11142 */\n add\n /* \"#utility.yul\":11115:11121 */\n dup5\n /* \"#utility.yul\":11071:11143 */\n tag_174\n jump\t// in\n tag_332:\n /* \"#utility.yul\":10708:11150 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11156:11274 */\n tag_194:\n /* \"#utility.yul\":11227:11249 */\n tag_334\n /* \"#utility.yul\":11243:11248 */\n dup2\n /* \"#utility.yul\":11227:11249 */\n tag_175\n jump\t// in\n tag_334:\n /* \"#utility.yul\":11220:11225 */\n dup2\n /* \"#utility.yul\":11217:11250 */\n eq\n /* \"#utility.yul\":11207:11268 */\n tag_335\n jumpi\n /* \"#utility.yul\":11264:11265 */\n 0x00\n /* \"#utility.yul\":11261:11262 */\n dup1\n /* \"#utility.yul\":11254:11266 */\n revert\n /* \"#utility.yul\":11207:11268 */\n tag_335:\n /* \"#utility.yul\":11156:11274 */\n pop\n jump\t// out\n /* \"#utility.yul\":11280:11419 */\n tag_195:\n /* \"#utility.yul\":11335:11340 */\n 0x00\n /* \"#utility.yul\":11366:11372 */\n dup2\n /* \"#utility.yul\":11360:11373 */\n mload\n /* \"#utility.yul\":11351:11373 */\n swap1\n pop\n /* \"#utility.yul\":11382:11413 */\n tag_337\n /* \"#utility.yul\":11407:11412 */\n dup2\n /* \"#utility.yul\":11382:11413 */\n tag_194\n jump\t// in\n tag_337:\n /* \"#utility.yul\":11280:11419 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11425:11772 */\n tag_116:\n /* \"#utility.yul\":11493:11499 */\n 0x00\n /* \"#utility.yul\":11542:11544 */\n 0x20\n /* \"#utility.yul\":11530:11539 */\n dup3\n /* \"#utility.yul\":11521:11528 */\n dup5\n /* \"#utility.yul\":11517:11540 */\n sub\n /* \"#utility.yul\":11513:11545 */\n slt\n /* \"#utility.yul\":11510:11629 */\n iszero\n tag_339\n jumpi\n /* \"#utility.yul\":11548:11627 */\n tag_340\n tag_163\n jump\t// in\n tag_340:\n /* \"#utility.yul\":11510:11629 */\n tag_339:\n /* \"#utility.yul\":11668:11669 */\n 0x00\n /* \"#utility.yul\":11693:11755 */\n tag_341\n /* \"#utility.yul\":11747:11754 */\n dup5\n /* \"#utility.yul\":11738:11744 */\n dup3\n /* \"#utility.yul\":11727:11736 */\n dup6\n /* \"#utility.yul\":11723:11745 */\n add\n /* \"#utility.yul\":11693:11755 */\n tag_195\n jump\t// in\n tag_341:\n /* \"#utility.yul\":11683:11755 */\n swap2\n pop\n /* \"#utility.yul\":11639:11765 */\n pop\n /* \"#utility.yul\":11425:11772 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11778:12000 */\n tag_119:\n /* \"#utility.yul\":11871:11875 */\n 0x00\n /* \"#utility.yul\":11909:11911 */\n 0x20\n /* \"#utility.yul\":11898:11907 */\n dup3\n /* \"#utility.yul\":11894:11912 */\n add\n /* \"#utility.yul\":11886:11912 */\n swap1\n pop\n /* \"#utility.yul\":11922:11993 */\n tag_343\n /* \"#utility.yul\":11990:11991 */\n 0x00\n /* \"#utility.yul\":11979:11988 */\n dup4\n /* \"#utility.yul\":11975:11992 */\n add\n /* \"#utility.yul\":11966:11972 */\n dup5\n /* \"#utility.yul\":11922:11993 */\n tag_190\n jump\t// in\n tag_343:\n /* \"#utility.yul\":11778:12000 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12006:12104 */\n tag_196:\n /* \"#utility.yul\":12057:12063 */\n 0x00\n /* \"#utility.yul\":12091:12096 */\n dup2\n /* \"#utility.yul\":12085:12097 */\n mload\n /* \"#utility.yul\":12075:12097 */\n swap1\n pop\n /* \"#utility.yul\":12006:12104 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12110:12257 */\n tag_197:\n /* \"#utility.yul\":12211:12222 */\n 0x00\n /* \"#utility.yul\":12248:12251 */\n dup2\n /* \"#utility.yul\":12233:12251 */\n swap1\n pop\n /* \"#utility.yul\":12110:12257 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12263:12636 */\n tag_198:\n /* \"#utility.yul\":12367:12370 */\n 0x00\n /* \"#utility.yul\":12395:12433 */\n tag_347\n /* \"#utility.yul\":12427:12432 */\n dup3\n /* \"#utility.yul\":12395:12433 */\n tag_196\n jump\t// in\n tag_347:\n /* \"#utility.yul\":12449:12537 */\n tag_348\n /* \"#utility.yul\":12530:12536 */\n dup2\n /* \"#utility.yul\":12525:12528 */\n dup6\n /* \"#utility.yul\":12449:12537 */\n tag_197\n jump\t// in\n tag_348:\n /* \"#utility.yul\":12442:12537 */\n swap4\n pop\n /* \"#utility.yul\":12546:12598 */\n tag_349\n /* \"#utility.yul\":12591:12597 */\n dup2\n /* \"#utility.yul\":12586:12589 */\n dup6\n /* \"#utility.yul\":12579:12583 */\n 0x20\n /* \"#utility.yul\":12572:12577 */\n dup7\n /* \"#utility.yul\":12568:12584 */\n add\n /* \"#utility.yul\":12546:12598 */\n tag_159\n jump\t// in\n tag_349:\n /* \"#utility.yul\":12623:12629 */\n dup1\n /* \"#utility.yul\":12618:12621 */\n dup5\n /* \"#utility.yul\":12614:12630 */\n add\n /* \"#utility.yul\":12607:12630 */\n swap2\n pop\n /* \"#utility.yul\":12371:12636 */\n pop\n /* \"#utility.yul\":12263:12636 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12642:12913 */\n tag_126:\n /* \"#utility.yul\":12772:12775 */\n 0x00\n /* \"#utility.yul\":12794:12887 */\n tag_351\n /* \"#utility.yul\":12883:12886 */\n dup3\n /* \"#utility.yul\":12874:12880 */\n dup5\n /* \"#utility.yul\":12794:12887 */\n tag_198\n jump\t// in\n tag_351:\n /* \"#utility.yul\":12787:12887 */\n swap2\n pop\n /* \"#utility.yul\":12904:12907 */\n dup2\n /* \"#utility.yul\":12897:12907 */\n swap1\n pop\n /* \"#utility.yul\":12642:12913 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12919:13251 */\n tag_147:\n /* \"#utility.yul\":13040:13044 */\n 0x00\n /* \"#utility.yul\":13078:13080 */\n 0x40\n /* \"#utility.yul\":13067:13076 */\n dup3\n /* \"#utility.yul\":13063:13081 */\n add\n /* \"#utility.yul\":13055:13081 */\n swap1\n pop\n /* \"#utility.yul\":13091:13162 */\n tag_353\n /* \"#utility.yul\":13159:13160 */\n 0x00\n /* \"#utility.yul\":13148:13157 */\n dup4\n /* \"#utility.yul\":13144:13161 */\n add\n /* \"#utility.yul\":13135:13141 */\n dup6\n /* \"#utility.yul\":13091:13162 */\n tag_190\n jump\t// in\n tag_353:\n /* \"#utility.yul\":13172:13244 */\n tag_354\n /* \"#utility.yul\":13240:13242 */\n 0x20\n /* \"#utility.yul\":13229:13238 */\n dup4\n /* \"#utility.yul\":13225:13243 */\n add\n /* \"#utility.yul\":13216:13222 */\n dup5\n /* \"#utility.yul\":13172:13244 */\n tag_190\n jump\t// in\n tag_354:\n /* \"#utility.yul\":12919:13251 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212208e12a55e1169919056ad784c23047c1146f43d73fc99312a442666202ba7296164736f6c634300080a0033\n}\n", + "assembly": " /* \"main.sol\":122:3066 contract ERC20Instance is IERC20 {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":243:285 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 */\n 0xffffffff1fcacbd218edc0eba20fc2308c778080\n /* \"main.sol\":214:286 IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080) */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":315:357 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 */\n 0xffffffff1fcacbd218edc0eba20fc2308c778080\n /* \"main.sol\":292:357 address erc20address = 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 */\n 0x01\n exp(0x0100, 0x00)\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":122:3066 contract ERC20Instance is IERC20 {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":122:3066 contract ERC20Instance is IERC20 {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x785e9e86\n gt\n tag_16\n jumpi\n dup1\n 0xa887c981\n gt\n tag_17\n jumpi\n dup1\n 0xa887c981\n eq\n tag_12\n jumpi\n dup1\n 0xa9059cbb\n eq\n tag_13\n jumpi\n dup1\n 0xdd62ed3e\n eq\n tag_14\n jumpi\n dup1\n 0xf5bfbd8a\n eq\n tag_15\n jumpi\n jump(tag_2)\n tag_17:\n dup1\n 0x785e9e86\n eq\n tag_9\n jumpi\n dup1\n 0x7eea1205\n eq\n tag_10\n jumpi\n dup1\n 0x95d89b41\n eq\n tag_11\n jumpi\n jump(tag_2)\n tag_16:\n dup1\n 0x06fdde03\n eq\n tag_3\n jumpi\n dup1\n 0x095ea7b3\n eq\n tag_4\n jumpi\n dup1\n 0x18160ddd\n eq\n tag_5\n jumpi\n dup1\n 0x23b872dd\n eq\n tag_6\n jumpi\n dup1\n 0x313ce567\n eq\n tag_7\n jumpi\n dup1\n 0x70a08231\n eq\n tag_8\n jumpi\n jump(tag_2)\n tag_1:\n jumpi(tag_2, calldatasize)\n stop\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":440:611 function name() external view override returns (string memory) {... */\n tag_3:\n callvalue\n dup1\n iszero\n tag_20\n jumpi\n 0x00\n dup1\n revert\n tag_20:\n pop\n tag_21\n tag_22\n jump\t// in\n tag_21:\n mload(0x40)\n tag_23\n swap2\n swap1\n tag_24\n jump\t// in\n tag_23:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1996:2159 function approve(address spender, uint256 value)... */\n tag_4:\n callvalue\n dup1\n iszero\n tag_25\n jumpi\n 0x00\n dup1\n revert\n tag_25:\n pop\n tag_26\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_27\n swap2\n swap1\n tag_28\n jump\t// in\n tag_27:\n tag_29\n jump\t// in\n tag_26:\n mload(0x40)\n tag_30\n swap2\n swap1\n tag_31\n jump\t// in\n tag_30:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":975:1154 function totalSupply() external view override returns (uint256) {... */\n tag_5:\n callvalue\n dup1\n iszero\n tag_32\n jumpi\n 0x00\n dup1\n revert\n tag_32:\n pop\n tag_33\n tag_34\n jump\t// in\n tag_33:\n mload(0x40)\n tag_35\n swap2\n swap1\n tag_36\n jump\t// in\n tag_35:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2464:2649 function transferFrom(... */\n tag_6:\n callvalue\n dup1\n iszero\n tag_37\n jumpi\n 0x00\n dup1\n revert\n tag_37:\n pop\n tag_38\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_39\n swap2\n swap1\n tag_40\n jump\t// in\n tag_39:\n tag_41\n jump\t// in\n tag_38:\n mload(0x40)\n tag_42\n swap2\n swap1\n tag_31\n jump\t// in\n tag_42:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":798:969 function decimals() external view override returns (uint8) {... */\n tag_7:\n callvalue\n dup1\n iszero\n tag_43\n jumpi\n 0x00\n dup1\n revert\n tag_43:\n pop\n tag_44\n tag_45\n jump\t// in\n tag_44:\n mload(0x40)\n tag_46\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1160:1349 function balanceOf(address who) external view override returns (uint256) {... */\n tag_8:\n callvalue\n dup1\n iszero\n tag_48\n jumpi\n 0x00\n dup1\n revert\n tag_48:\n pop\n tag_49\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_50\n swap2\n swap1\n tag_51\n jump\t// in\n tag_50:\n tag_52\n jump\t// in\n tag_49:\n mload(0x40)\n tag_53\n swap2\n swap1\n tag_36\n jump\t// in\n tag_53:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":214:286 IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080) */\n tag_9:\n callvalue\n dup1\n iszero\n tag_54\n jumpi\n 0x00\n dup1\n revert\n tag_54:\n pop\n tag_55\n tag_56\n jump\t// in\n tag_55:\n mload(0x40)\n tag_57\n swap2\n swap1\n tag_58\n jump\t// in\n tag_57:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2655:3064 function transferFrom_delegate(... */\n tag_10:\n callvalue\n dup1\n iszero\n tag_59\n jumpi\n 0x00\n dup1\n revert\n tag_59:\n pop\n tag_60\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_61\n swap2\n swap1\n tag_40\n jump\t// in\n tag_61:\n tag_62\n jump\t// in\n tag_60:\n mload(0x40)\n tag_63\n swap2\n swap1\n tag_31\n jump\t// in\n tag_63:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":617:792 function symbol() external view override returns (string memory) {... */\n tag_11:\n callvalue\n dup1\n iszero\n tag_64\n jumpi\n 0x00\n dup1\n revert\n tag_64:\n pop\n tag_65\n tag_66\n jump\t// in\n tag_65:\n mload(0x40)\n tag_67\n swap2\n swap1\n tag_24\n jump\t// in\n tag_67:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1705:1990 function transfer_delegate(address to, uint256 value)... */\n tag_12:\n callvalue\n dup1\n iszero\n tag_68\n jumpi\n 0x00\n dup1\n revert\n tag_68:\n pop\n tag_69\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_70\n swap2\n swap1\n tag_28\n jump\t// in\n tag_70:\n tag_71\n jump\t// in\n tag_69:\n mload(0x40)\n tag_72\n swap2\n swap1\n tag_31\n jump\t// in\n tag_72:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1544:1699 function transfer(address to, uint256 value)... */\n tag_13:\n callvalue\n dup1\n iszero\n tag_73\n jumpi\n 0x00\n dup1\n revert\n tag_73:\n pop\n tag_74\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_75\n swap2\n swap1\n tag_28\n jump\t// in\n tag_75:\n tag_76\n jump\t// in\n tag_74:\n mload(0x40)\n tag_77\n swap2\n swap1\n tag_31\n jump\t// in\n tag_77:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1355:1538 function allowance(address owner, address spender)... */\n tag_14:\n callvalue\n dup1\n iszero\n tag_78\n jumpi\n 0x00\n dup1\n revert\n tag_78:\n pop\n tag_79\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_80\n swap2\n swap1\n tag_81\n jump\t// in\n tag_80:\n tag_82\n jump\t// in\n tag_79:\n mload(0x40)\n tag_83\n swap2\n swap1\n tag_36\n jump\t// in\n tag_83:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2165:2458 function approve_delegate(address spender, uint256 value)... */\n tag_15:\n callvalue\n dup1\n iszero\n tag_84\n jumpi\n 0x00\n dup1\n revert\n tag_84:\n pop\n tag_85\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_86\n swap2\n swap1\n tag_28\n jump\t// in\n tag_86:\n tag_87\n jump\t// in\n tag_85:\n mload(0x40)\n tag_88\n swap2\n swap1\n tag_31\n jump\t// in\n tag_88:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":440:611 function name() external view override returns (string memory) {... */\n tag_22:\n /* \"main.sol\":488:501 string memory */\n 0x60\n /* \"main.sol\":592:597 erc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":592:602 erc20.name */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x06fdde03\n /* \"main.sol\":592:604 erc20.name() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_91\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_91:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_92\n swap2\n swap1\n tag_93\n jump\t// in\n tag_92:\n /* \"main.sol\":585:604 return erc20.name() */\n swap1\n pop\n /* \"main.sol\":440:611 function name() external view override returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":1996:2159 function approve(address spender, uint256 value)... */\n tag_29:\n /* \"main.sol\":2096:2100 bool */\n 0x00\n /* \"main.sol\":2123:2128 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2123:2136 erc20.approve */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x095ea7b3\n /* \"main.sol\":2137:2144 spender */\n dup5\n /* \"main.sol\":2146:2151 value */\n dup5\n /* \"main.sol\":2123:2152 erc20.approve(spender, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_95\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_95:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_98\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_98:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_99\n swap2\n swap1\n tag_100\n jump\t// in\n tag_99:\n /* \"main.sol\":2116:2152 return erc20.approve(spender, value) */\n swap1\n pop\n /* \"main.sol\":1996:2159 function approve(address spender, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":975:1154 function totalSupply() external view override returns (uint256) {... */\n tag_34:\n /* \"main.sol\":1030:1037 uint256 */\n 0x00\n /* \"main.sol\":1128:1133 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1128:1145 erc20.totalSupply */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x18160ddd\n /* \"main.sol\":1128:1147 erc20.totalSupply() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_103\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_103:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_104\n swap2\n swap1\n tag_105\n jump\t// in\n tag_104:\n /* \"main.sol\":1121:1147 return erc20.totalSupply() */\n swap1\n pop\n /* \"main.sol\":975:1154 function totalSupply() external view override returns (uint256) {... */\n swap1\n jump\t// out\n /* \"main.sol\":2464:2649 function transferFrom(... */\n tag_41:\n /* \"main.sol\":2584:2588 bool */\n 0x00\n /* \"main.sol\":2607:2612 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2607:2625 erc20.transferFrom */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x23b872dd\n /* \"main.sol\":2626:2630 from */\n dup6\n /* \"main.sol\":2632:2634 to */\n dup6\n /* \"main.sol\":2636:2641 value */\n dup6\n /* \"main.sol\":2607:2642 erc20.transferFrom(from, to, value) */\n mload(0x40)\n dup5\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_107\n swap4\n swap3\n swap2\n swap1\n tag_108\n jump\t// in\n tag_107:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_110\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_110:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_111\n swap2\n swap1\n tag_100\n jump\t// in\n tag_111:\n /* \"main.sol\":2600:2642 return erc20.transferFrom(from, to, value) */\n swap1\n pop\n /* \"main.sol\":2464:2649 function transferFrom(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":798:969 function decimals() external view override returns (uint8) {... */\n tag_45:\n /* \"main.sol\":850:855 uint8 */\n 0x00\n /* \"main.sol\":946:951 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":946:960 erc20.decimals */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x313ce567\n /* \"main.sol\":946:962 erc20.decimals() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_114\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_114:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_115\n swap2\n swap1\n tag_116\n jump\t// in\n tag_115:\n /* \"main.sol\":939:962 return erc20.decimals() */\n swap1\n pop\n /* \"main.sol\":798:969 function decimals() external view override returns (uint8) {... */\n swap1\n jump\t// out\n /* \"main.sol\":1160:1349 function balanceOf(address who) external view override returns (uint256) {... */\n tag_52:\n /* \"main.sol\":1224:1231 uint256 */\n 0x00\n /* \"main.sol\":1322:1327 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1322:1337 erc20.balanceOf */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x70a08231\n /* \"main.sol\":1338:1341 who */\n dup4\n /* \"main.sol\":1322:1342 erc20.balanceOf(who) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_118\n swap2\n swap1\n tag_119\n jump\t// in\n tag_118:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_121\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_121:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_122\n swap2\n swap1\n tag_105\n jump\t// in\n tag_122:\n /* \"main.sol\":1315:1342 return erc20.balanceOf(who) */\n swap1\n pop\n /* \"main.sol\":1160:1349 function balanceOf(address who) external view override returns (uint256) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":214:286 IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080) */\n tag_56:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":2655:3064 function transferFrom_delegate(... */\n tag_62:\n /* \"main.sol\":2775:2779 bool */\n 0x00\n /* \"main.sol\":2792:2803 bool result */\n dup1\n /* \"main.sol\":2805:2822 bytes memory data */\n 0x00\n /* \"main.sol\":2826:2838 erc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2826:2851 erc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2963:2967 from */\n dup7\n /* \"main.sol\":2985:2987 to */\n dup7\n /* \"main.sol\":3005:3010 value */\n dup7\n /* \"main.sol\":2865:3024 abi.encodeWithSignature(... */\n add(0x24, mload(0x40))\n tag_124\n swap4\n swap3\n swap2\n swap1\n tag_108\n jump\t// in\n tag_124:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x23b872dd00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":2826:3034 erc20address.delegatecall(... */\n mload(0x40)\n tag_125\n swap2\n swap1\n tag_126\n jump\t// in\n tag_125:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_129\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_128)\n tag_129:\n 0x60\n swap2\n pop\n tag_128:\n pop\n /* \"main.sol\":2791:3034 (bool result, bytes memory data) = erc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":3051:3057 result */\n dup2\n /* \"main.sol\":3044:3057 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":2655:3064 function transferFrom_delegate(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":617:792 function symbol() external view override returns (string memory) {... */\n tag_66:\n /* \"main.sol\":667:680 string memory */\n 0x60\n /* \"main.sol\":771:776 erc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":771:783 erc20.symbol */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x95d89b41\n /* \"main.sol\":771:785 erc20.symbol() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_132\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_132:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_133\n swap2\n swap1\n tag_93\n jump\t// in\n tag_133:\n /* \"main.sol\":764:785 return erc20.symbol() */\n swap1\n pop\n /* \"main.sol\":617:792 function symbol() external view override returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":1705:1990 function transfer_delegate(address to, uint256 value)... */\n tag_71:\n /* \"main.sol\":1793:1797 bool */\n 0x00\n /* \"main.sol\":1814:1825 bool result */\n dup1\n /* \"main.sol\":1827:1844 bytes memory data */\n 0x00\n /* \"main.sol\":1848:1860 erc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1848:1873 erc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1940:1942 to */\n dup6\n /* \"main.sol\":1944:1949 value */\n dup6\n /* \"main.sol\":1887:1950 abi.encodeWithSignature(\"transfer(address,uint256)\", to, value) */\n add(0x24, mload(0x40))\n tag_135\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_135:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":1848:1960 erc20address.delegatecall(... */\n mload(0x40)\n tag_136\n swap2\n swap1\n tag_126\n jump\t// in\n tag_136:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_139\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_138)\n tag_139:\n 0x60\n swap2\n pop\n tag_138:\n pop\n /* \"main.sol\":1813:1960 (bool result, bytes memory data) = erc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":1977:1983 result */\n dup2\n /* \"main.sol\":1970:1983 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":1705:1990 function transfer_delegate(address to, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":1544:1699 function transfer(address to, uint256 value)... */\n tag_76:\n /* \"main.sol\":1640:1644 bool */\n 0x00\n /* \"main.sol\":1667:1672 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1667:1681 erc20.transfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa9059cbb\n /* \"main.sol\":1682:1684 to */\n dup5\n /* \"main.sol\":1686:1691 value */\n dup5\n /* \"main.sol\":1667:1692 erc20.transfer(to, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_141\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_141:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_143\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_143:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_144\n swap2\n swap1\n tag_100\n jump\t// in\n tag_144:\n /* \"main.sol\":1660:1692 return erc20.transfer(to, value) */\n swap1\n pop\n /* \"main.sol\":1544:1699 function transfer(address to, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":1355:1538 function allowance(address owner, address spender)... */\n tag_82:\n /* \"main.sol\":1470:1477 uint256 */\n 0x00\n /* \"main.sol\":1500:1505 erc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1500:1515 erc20.allowance */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xdd62ed3e\n /* \"main.sol\":1516:1521 owner */\n dup5\n /* \"main.sol\":1523:1530 spender */\n dup5\n /* \"main.sol\":1500:1531 erc20.allowance(owner, spender) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_146\n swap3\n swap2\n swap1\n tag_147\n jump\t// in\n tag_146:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_149\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_149:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_150\n swap2\n swap1\n tag_105\n jump\t// in\n tag_150:\n /* \"main.sol\":1493:1531 return erc20.allowance(owner, spender) */\n swap1\n pop\n /* \"main.sol\":1355:1538 function allowance(address owner, address spender)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":2165:2458 function approve_delegate(address spender, uint256 value)... */\n tag_87:\n /* \"main.sol\":2257:2261 bool */\n 0x00\n /* \"main.sol\":2278:2289 bool result */\n dup1\n /* \"main.sol\":2291:2308 bytes memory data */\n 0x00\n /* \"main.sol\":2312:2324 erc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2312:2337 erc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2403:2410 spender */\n dup6\n /* \"main.sol\":2412:2417 value */\n dup6\n /* \"main.sol\":2351:2418 abi.encodeWithSignature(\"approve(address,uint256)\", spender, value) */\n add(0x24, mload(0x40))\n tag_152\n swap3\n swap2\n swap1\n tag_96\n jump\t// in\n tag_152:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x095ea7b300000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":2312:2428 erc20address.delegatecall(... */\n mload(0x40)\n tag_153\n swap2\n swap1\n tag_126\n jump\t// in\n tag_153:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_156\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_155)\n tag_156:\n 0x60\n swap2\n pop\n tag_155:\n pop\n /* \"main.sol\":2277:2428 (bool result, bytes memory data) = erc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":2445:2451 result */\n dup2\n /* \"main.sol\":2438:2451 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":2165:2458 function approve_delegate(address spender, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:106 */\n tag_157:\n /* \"#utility.yul\":59:65 */\n 0x00\n /* \"#utility.yul\":93:98 */\n dup2\n /* \"#utility.yul\":87:99 */\n mload\n /* \"#utility.yul\":77:99 */\n swap1\n pop\n /* \"#utility.yul\":7:106 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":112:281 */\n tag_158:\n /* \"#utility.yul\":196:207 */\n 0x00\n /* \"#utility.yul\":230:236 */\n dup3\n /* \"#utility.yul\":225:228 */\n dup3\n /* \"#utility.yul\":218:237 */\n mstore\n /* \"#utility.yul\":270:274 */\n 0x20\n /* \"#utility.yul\":265:268 */\n dup3\n /* \"#utility.yul\":261:275 */\n add\n /* \"#utility.yul\":246:275 */\n swap1\n pop\n /* \"#utility.yul\":112:281 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":287:594 */\n tag_159:\n /* \"#utility.yul\":355:356 */\n 0x00\n /* \"#utility.yul\":365:478 */\n tag_203:\n /* \"#utility.yul\":379:385 */\n dup4\n /* \"#utility.yul\":376:377 */\n dup2\n /* \"#utility.yul\":373:386 */\n lt\n /* \"#utility.yul\":365:478 */\n iszero\n tag_205\n jumpi\n /* \"#utility.yul\":464:465 */\n dup1\n /* \"#utility.yul\":459:462 */\n dup3\n /* \"#utility.yul\":455:466 */\n add\n /* \"#utility.yul\":449:467 */\n mload\n /* \"#utility.yul\":445:446 */\n dup2\n /* \"#utility.yul\":440:443 */\n dup5\n /* \"#utility.yul\":436:447 */\n add\n /* \"#utility.yul\":429:468 */\n mstore\n /* \"#utility.yul\":401:403 */\n 0x20\n /* \"#utility.yul\":398:399 */\n dup2\n /* \"#utility.yul\":394:404 */\n add\n /* \"#utility.yul\":389:404 */\n swap1\n pop\n /* \"#utility.yul\":365:478 */\n jump(tag_203)\n tag_205:\n /* \"#utility.yul\":496:502 */\n dup4\n /* \"#utility.yul\":493:494 */\n dup2\n /* \"#utility.yul\":490:503 */\n gt\n /* \"#utility.yul\":487:588 */\n iszero\n tag_206\n jumpi\n /* \"#utility.yul\":576:577 */\n 0x00\n /* \"#utility.yul\":567:573 */\n dup5\n /* \"#utility.yul\":562:565 */\n dup5\n /* \"#utility.yul\":558:574 */\n add\n /* \"#utility.yul\":551:578 */\n mstore\n /* \"#utility.yul\":487:588 */\n tag_206:\n /* \"#utility.yul\":336:594 */\n pop\n /* \"#utility.yul\":287:594 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":600:702 */\n tag_160:\n /* \"#utility.yul\":641:647 */\n 0x00\n /* \"#utility.yul\":692:694 */\n 0x1f\n /* \"#utility.yul\":688:695 */\n not\n /* \"#utility.yul\":683:685 */\n 0x1f\n /* \"#utility.yul\":676:681 */\n dup4\n /* \"#utility.yul\":672:686 */\n add\n /* \"#utility.yul\":668:696 */\n and\n /* \"#utility.yul\":658:696 */\n swap1\n pop\n /* \"#utility.yul\":600:702 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":708:1072 */\n tag_161:\n /* \"#utility.yul\":796:799 */\n 0x00\n /* \"#utility.yul\":824:863 */\n tag_209\n /* \"#utility.yul\":857:862 */\n dup3\n /* \"#utility.yul\":824:863 */\n tag_157\n jump\t// in\n tag_209:\n /* \"#utility.yul\":879:950 */\n tag_210\n /* \"#utility.yul\":943:949 */\n dup2\n /* \"#utility.yul\":938:941 */\n dup6\n /* \"#utility.yul\":879:950 */\n tag_158\n jump\t// in\n tag_210:\n /* \"#utility.yul\":872:950 */\n swap4\n pop\n /* \"#utility.yul\":959:1011 */\n tag_211\n /* \"#utility.yul\":1004:1010 */\n dup2\n /* \"#utility.yul\":999:1002 */\n dup6\n /* \"#utility.yul\":992:996 */\n 0x20\n /* \"#utility.yul\":985:990 */\n dup7\n /* \"#utility.yul\":981:997 */\n add\n /* \"#utility.yul\":959:1011 */\n tag_159\n jump\t// in\n tag_211:\n /* \"#utility.yul\":1036:1065 */\n tag_212\n /* \"#utility.yul\":1058:1064 */\n dup2\n /* \"#utility.yul\":1036:1065 */\n tag_160\n jump\t// in\n tag_212:\n /* \"#utility.yul\":1031:1034 */\n dup5\n /* \"#utility.yul\":1027:1066 */\n add\n /* \"#utility.yul\":1020:1066 */\n swap2\n pop\n /* \"#utility.yul\":800:1072 */\n pop\n /* \"#utility.yul\":708:1072 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1078:1391 */\n tag_24:\n /* \"#utility.yul\":1191:1195 */\n 0x00\n /* \"#utility.yul\":1229:1231 */\n 0x20\n /* \"#utility.yul\":1218:1227 */\n dup3\n /* \"#utility.yul\":1214:1232 */\n add\n /* \"#utility.yul\":1206:1232 */\n swap1\n pop\n /* \"#utility.yul\":1278:1287 */\n dup2\n /* \"#utility.yul\":1272:1276 */\n dup2\n /* \"#utility.yul\":1268:1288 */\n sub\n /* \"#utility.yul\":1264:1265 */\n 0x00\n /* \"#utility.yul\":1253:1262 */\n dup4\n /* \"#utility.yul\":1249:1266 */\n add\n /* \"#utility.yul\":1242:1289 */\n mstore\n /* \"#utility.yul\":1306:1384 */\n tag_214\n /* \"#utility.yul\":1379:1383 */\n dup2\n /* \"#utility.yul\":1370:1376 */\n dup5\n /* \"#utility.yul\":1306:1384 */\n tag_161\n jump\t// in\n tag_214:\n /* \"#utility.yul\":1298:1384 */\n swap1\n pop\n /* \"#utility.yul\":1078:1391 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1397:1472 */\n tag_162:\n /* \"#utility.yul\":1430:1436 */\n 0x00\n /* \"#utility.yul\":1463:1465 */\n 0x40\n /* \"#utility.yul\":1457:1466 */\n mload\n /* \"#utility.yul\":1447:1466 */\n swap1\n pop\n /* \"#utility.yul\":1397:1472 */\n swap1\n jump\t// out\n /* \"#utility.yul\":1478:1595 */\n tag_163:\n /* \"#utility.yul\":1587:1588 */\n 0x00\n /* \"#utility.yul\":1584:1585 */\n dup1\n /* \"#utility.yul\":1577:1589 */\n revert\n /* \"#utility.yul\":1601:1718 */\n tag_164:\n /* \"#utility.yul\":1710:1711 */\n 0x00\n /* \"#utility.yul\":1707:1708 */\n dup1\n /* \"#utility.yul\":1700:1712 */\n revert\n /* \"#utility.yul\":1724:1850 */\n tag_165:\n /* \"#utility.yul\":1761:1768 */\n 0x00\n /* \"#utility.yul\":1801:1843 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1794:1799 */\n dup3\n /* \"#utility.yul\":1790:1844 */\n and\n /* \"#utility.yul\":1779:1844 */\n swap1\n pop\n /* \"#utility.yul\":1724:1850 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1856:1952 */\n tag_166:\n /* \"#utility.yul\":1893:1900 */\n 0x00\n /* \"#utility.yul\":1922:1946 */\n tag_220\n /* \"#utility.yul\":1940:1945 */\n dup3\n /* \"#utility.yul\":1922:1946 */\n tag_165\n jump\t// in\n tag_220:\n /* \"#utility.yul\":1911:1946 */\n swap1\n pop\n /* \"#utility.yul\":1856:1952 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1958:2080 */\n tag_167:\n /* \"#utility.yul\":2031:2055 */\n tag_222\n /* \"#utility.yul\":2049:2054 */\n dup2\n /* \"#utility.yul\":2031:2055 */\n tag_166\n jump\t// in\n tag_222:\n /* \"#utility.yul\":2024:2029 */\n dup2\n /* \"#utility.yul\":2021:2056 */\n eq\n /* \"#utility.yul\":2011:2074 */\n tag_223\n jumpi\n /* \"#utility.yul\":2070:2071 */\n 0x00\n /* \"#utility.yul\":2067:2068 */\n dup1\n /* \"#utility.yul\":2060:2072 */\n revert\n /* \"#utility.yul\":2011:2074 */\n tag_223:\n /* \"#utility.yul\":1958:2080 */\n pop\n jump\t// out\n /* \"#utility.yul\":2086:2225 */\n tag_168:\n /* \"#utility.yul\":2132:2137 */\n 0x00\n /* \"#utility.yul\":2170:2176 */\n dup2\n /* \"#utility.yul\":2157:2177 */\n calldataload\n /* \"#utility.yul\":2148:2177 */\n swap1\n pop\n /* \"#utility.yul\":2186:2219 */\n tag_225\n /* \"#utility.yul\":2213:2218 */\n dup2\n /* \"#utility.yul\":2186:2219 */\n tag_167\n jump\t// in\n tag_225:\n /* \"#utility.yul\":2086:2225 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2231:2308 */\n tag_169:\n /* \"#utility.yul\":2268:2275 */\n 0x00\n /* \"#utility.yul\":2297:2302 */\n dup2\n /* \"#utility.yul\":2286:2302 */\n swap1\n pop\n /* \"#utility.yul\":2231:2308 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2314:2436 */\n tag_170:\n /* \"#utility.yul\":2387:2411 */\n tag_228\n /* \"#utility.yul\":2405:2410 */\n dup2\n /* \"#utility.yul\":2387:2411 */\n tag_169\n jump\t// in\n tag_228:\n /* \"#utility.yul\":2380:2385 */\n dup2\n /* \"#utility.yul\":2377:2412 */\n eq\n /* \"#utility.yul\":2367:2430 */\n tag_229\n jumpi\n /* \"#utility.yul\":2426:2427 */\n 0x00\n /* \"#utility.yul\":2423:2424 */\n dup1\n /* \"#utility.yul\":2416:2428 */\n revert\n /* \"#utility.yul\":2367:2430 */\n tag_229:\n /* \"#utility.yul\":2314:2436 */\n pop\n jump\t// out\n /* \"#utility.yul\":2442:2581 */\n tag_171:\n /* \"#utility.yul\":2488:2493 */\n 0x00\n /* \"#utility.yul\":2526:2532 */\n dup2\n /* \"#utility.yul\":2513:2533 */\n calldataload\n /* \"#utility.yul\":2504:2533 */\n swap1\n pop\n /* \"#utility.yul\":2542:2575 */\n tag_231\n /* \"#utility.yul\":2569:2574 */\n dup2\n /* \"#utility.yul\":2542:2575 */\n tag_170\n jump\t// in\n tag_231:\n /* \"#utility.yul\":2442:2581 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2587:3061 */\n tag_28:\n /* \"#utility.yul\":2655:2661 */\n 0x00\n /* \"#utility.yul\":2663:2669 */\n dup1\n /* \"#utility.yul\":2712:2714 */\n 0x40\n /* \"#utility.yul\":2700:2709 */\n dup4\n /* \"#utility.yul\":2691:2698 */\n dup6\n /* \"#utility.yul\":2687:2710 */\n sub\n /* \"#utility.yul\":2683:2715 */\n slt\n /* \"#utility.yul\":2680:2799 */\n iszero\n tag_233\n jumpi\n /* \"#utility.yul\":2718:2797 */\n tag_234\n tag_163\n jump\t// in\n tag_234:\n /* \"#utility.yul\":2680:2799 */\n tag_233:\n /* \"#utility.yul\":2838:2839 */\n 0x00\n /* \"#utility.yul\":2863:2916 */\n tag_235\n /* \"#utility.yul\":2908:2915 */\n dup6\n /* \"#utility.yul\":2899:2905 */\n dup3\n /* \"#utility.yul\":2888:2897 */\n dup7\n /* \"#utility.yul\":2884:2906 */\n add\n /* \"#utility.yul\":2863:2916 */\n tag_168\n jump\t// in\n tag_235:\n /* \"#utility.yul\":2853:2916 */\n swap3\n pop\n /* \"#utility.yul\":2809:2926 */\n pop\n /* \"#utility.yul\":2965:2967 */\n 0x20\n /* \"#utility.yul\":2991:3044 */\n tag_236\n /* \"#utility.yul\":3036:3043 */\n dup6\n /* \"#utility.yul\":3027:3033 */\n dup3\n /* \"#utility.yul\":3016:3025 */\n dup7\n /* \"#utility.yul\":3012:3034 */\n add\n /* \"#utility.yul\":2991:3044 */\n tag_171\n jump\t// in\n tag_236:\n /* \"#utility.yul\":2981:3044 */\n swap2\n pop\n /* \"#utility.yul\":2936:3054 */\n pop\n /* \"#utility.yul\":2587:3061 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3067:3157 */\n tag_172:\n /* \"#utility.yul\":3101:3108 */\n 0x00\n /* \"#utility.yul\":3144:3149 */\n dup2\n /* \"#utility.yul\":3137:3150 */\n iszero\n /* \"#utility.yul\":3130:3151 */\n iszero\n /* \"#utility.yul\":3119:3151 */\n swap1\n pop\n /* \"#utility.yul\":3067:3157 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3163:3272 */\n tag_173:\n /* \"#utility.yul\":3244:3265 */\n tag_239\n /* \"#utility.yul\":3259:3264 */\n dup2\n /* \"#utility.yul\":3244:3265 */\n tag_172\n jump\t// in\n tag_239:\n /* \"#utility.yul\":3239:3242 */\n dup3\n /* \"#utility.yul\":3232:3266 */\n mstore\n /* \"#utility.yul\":3163:3272 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3278:3488 */\n tag_31:\n /* \"#utility.yul\":3365:3369 */\n 0x00\n /* \"#utility.yul\":3403:3405 */\n 0x20\n /* \"#utility.yul\":3392:3401 */\n dup3\n /* \"#utility.yul\":3388:3406 */\n add\n /* \"#utility.yul\":3380:3406 */\n swap1\n pop\n /* \"#utility.yul\":3416:3481 */\n tag_241\n /* \"#utility.yul\":3478:3479 */\n 0x00\n /* \"#utility.yul\":3467:3476 */\n dup4\n /* \"#utility.yul\":3463:3480 */\n add\n /* \"#utility.yul\":3454:3460 */\n dup5\n /* \"#utility.yul\":3416:3481 */\n tag_173\n jump\t// in\n tag_241:\n /* \"#utility.yul\":3278:3488 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3494:3612 */\n tag_174:\n /* \"#utility.yul\":3581:3605 */\n tag_243\n /* \"#utility.yul\":3599:3604 */\n dup2\n /* \"#utility.yul\":3581:3605 */\n tag_169\n jump\t// in\n tag_243:\n /* \"#utility.yul\":3576:3579 */\n dup3\n /* \"#utility.yul\":3569:3606 */\n mstore\n /* \"#utility.yul\":3494:3612 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3618:3840 */\n tag_36:\n /* \"#utility.yul\":3711:3715 */\n 0x00\n /* \"#utility.yul\":3749:3751 */\n 0x20\n /* \"#utility.yul\":3738:3747 */\n dup3\n /* \"#utility.yul\":3734:3752 */\n add\n /* \"#utility.yul\":3726:3752 */\n swap1\n pop\n /* \"#utility.yul\":3762:3833 */\n tag_245\n /* \"#utility.yul\":3830:3831 */\n 0x00\n /* \"#utility.yul\":3819:3828 */\n dup4\n /* \"#utility.yul\":3815:3832 */\n add\n /* \"#utility.yul\":3806:3812 */\n dup5\n /* \"#utility.yul\":3762:3833 */\n tag_174\n jump\t// in\n tag_245:\n /* \"#utility.yul\":3618:3840 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3846:4465 */\n tag_40:\n /* \"#utility.yul\":3923:3929 */\n 0x00\n /* \"#utility.yul\":3931:3937 */\n dup1\n /* \"#utility.yul\":3939:3945 */\n 0x00\n /* \"#utility.yul\":3988:3990 */\n 0x60\n /* \"#utility.yul\":3976:3985 */\n dup5\n /* \"#utility.yul\":3967:3974 */\n dup7\n /* \"#utility.yul\":3963:3986 */\n sub\n /* \"#utility.yul\":3959:3991 */\n slt\n /* \"#utility.yul\":3956:4075 */\n iszero\n tag_247\n jumpi\n /* \"#utility.yul\":3994:4073 */\n tag_248\n tag_163\n jump\t// in\n tag_248:\n /* \"#utility.yul\":3956:4075 */\n tag_247:\n /* \"#utility.yul\":4114:4115 */\n 0x00\n /* \"#utility.yul\":4139:4192 */\n tag_249\n /* \"#utility.yul\":4184:4191 */\n dup7\n /* \"#utility.yul\":4175:4181 */\n dup3\n /* \"#utility.yul\":4164:4173 */\n dup8\n /* \"#utility.yul\":4160:4182 */\n add\n /* \"#utility.yul\":4139:4192 */\n tag_168\n jump\t// in\n tag_249:\n /* \"#utility.yul\":4129:4192 */\n swap4\n pop\n /* \"#utility.yul\":4085:4202 */\n pop\n /* \"#utility.yul\":4241:4243 */\n 0x20\n /* \"#utility.yul\":4267:4320 */\n tag_250\n /* \"#utility.yul\":4312:4319 */\n dup7\n /* \"#utility.yul\":4303:4309 */\n dup3\n /* \"#utility.yul\":4292:4301 */\n dup8\n /* \"#utility.yul\":4288:4310 */\n add\n /* \"#utility.yul\":4267:4320 */\n tag_168\n jump\t// in\n tag_250:\n /* \"#utility.yul\":4257:4320 */\n swap3\n pop\n /* \"#utility.yul\":4212:4330 */\n pop\n /* \"#utility.yul\":4369:4371 */\n 0x40\n /* \"#utility.yul\":4395:4448 */\n tag_251\n /* \"#utility.yul\":4440:4447 */\n dup7\n /* \"#utility.yul\":4431:4437 */\n dup3\n /* \"#utility.yul\":4420:4429 */\n dup8\n /* \"#utility.yul\":4416:4438 */\n add\n /* \"#utility.yul\":4395:4448 */\n tag_171\n jump\t// in\n tag_251:\n /* \"#utility.yul\":4385:4448 */\n swap2\n pop\n /* \"#utility.yul\":4340:4458 */\n pop\n /* \"#utility.yul\":3846:4465 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":4471:4557 */\n tag_175:\n /* \"#utility.yul\":4506:4513 */\n 0x00\n /* \"#utility.yul\":4546:4550 */\n 0xff\n /* \"#utility.yul\":4539:4544 */\n dup3\n /* \"#utility.yul\":4535:4551 */\n and\n /* \"#utility.yul\":4524:4551 */\n swap1\n pop\n /* \"#utility.yul\":4471:4557 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4563:4675 */\n tag_176:\n /* \"#utility.yul\":4646:4668 */\n tag_254\n /* \"#utility.yul\":4662:4667 */\n dup2\n /* \"#utility.yul\":4646:4668 */\n tag_175\n jump\t// in\n tag_254:\n /* \"#utility.yul\":4641:4644 */\n dup3\n /* \"#utility.yul\":4634:4669 */\n mstore\n /* \"#utility.yul\":4563:4675 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4681:4895 */\n tag_47:\n /* \"#utility.yul\":4770:4774 */\n 0x00\n /* \"#utility.yul\":4808:4810 */\n 0x20\n /* \"#utility.yul\":4797:4806 */\n dup3\n /* \"#utility.yul\":4793:4811 */\n add\n /* \"#utility.yul\":4785:4811 */\n swap1\n pop\n /* \"#utility.yul\":4821:4888 */\n tag_256\n /* \"#utility.yul\":4885:4886 */\n 0x00\n /* \"#utility.yul\":4874:4883 */\n dup4\n /* \"#utility.yul\":4870:4887 */\n add\n /* \"#utility.yul\":4861:4867 */\n dup5\n /* \"#utility.yul\":4821:4888 */\n tag_176\n jump\t// in\n tag_256:\n /* \"#utility.yul\":4681:4895 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4901:5230 */\n tag_51:\n /* \"#utility.yul\":4960:4966 */\n 0x00\n /* \"#utility.yul\":5009:5011 */\n 0x20\n /* \"#utility.yul\":4997:5006 */\n dup3\n /* \"#utility.yul\":4988:4995 */\n dup5\n /* \"#utility.yul\":4984:5007 */\n sub\n /* \"#utility.yul\":4980:5012 */\n slt\n /* \"#utility.yul\":4977:5096 */\n iszero\n tag_258\n jumpi\n /* \"#utility.yul\":5015:5094 */\n tag_259\n tag_163\n jump\t// in\n tag_259:\n /* \"#utility.yul\":4977:5096 */\n tag_258:\n /* \"#utility.yul\":5135:5136 */\n 0x00\n /* \"#utility.yul\":5160:5213 */\n tag_260\n /* \"#utility.yul\":5205:5212 */\n dup5\n /* \"#utility.yul\":5196:5202 */\n dup3\n /* \"#utility.yul\":5185:5194 */\n dup6\n /* \"#utility.yul\":5181:5203 */\n add\n /* \"#utility.yul\":5160:5213 */\n tag_168\n jump\t// in\n tag_260:\n /* \"#utility.yul\":5150:5213 */\n swap2\n pop\n /* \"#utility.yul\":5106:5223 */\n pop\n /* \"#utility.yul\":4901:5230 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5236:5296 */\n tag_177:\n /* \"#utility.yul\":5264:5267 */\n 0x00\n /* \"#utility.yul\":5285:5290 */\n dup2\n /* \"#utility.yul\":5278:5290 */\n swap1\n pop\n /* \"#utility.yul\":5236:5296 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5302:5444 */\n tag_178:\n /* \"#utility.yul\":5352:5361 */\n 0x00\n /* \"#utility.yul\":5385:5438 */\n tag_263\n /* \"#utility.yul\":5403:5437 */\n tag_264\n /* \"#utility.yul\":5412:5436 */\n tag_265\n /* \"#utility.yul\":5430:5435 */\n dup5\n /* \"#utility.yul\":5412:5436 */\n tag_165\n jump\t// in\n tag_265:\n /* \"#utility.yul\":5403:5437 */\n tag_177\n jump\t// in\n tag_264:\n /* \"#utility.yul\":5385:5438 */\n tag_165\n jump\t// in\n tag_263:\n /* \"#utility.yul\":5372:5438 */\n swap1\n pop\n /* \"#utility.yul\":5302:5444 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5450:5576 */\n tag_179:\n /* \"#utility.yul\":5500:5509 */\n 0x00\n /* \"#utility.yul\":5533:5570 */\n tag_267\n /* \"#utility.yul\":5564:5569 */\n dup3\n /* \"#utility.yul\":5533:5570 */\n tag_178\n jump\t// in\n tag_267:\n /* \"#utility.yul\":5520:5570 */\n swap1\n pop\n /* \"#utility.yul\":5450:5576 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5582:5722 */\n tag_180:\n /* \"#utility.yul\":5646:5655 */\n 0x00\n /* \"#utility.yul\":5679:5716 */\n tag_269\n /* \"#utility.yul\":5710:5715 */\n dup3\n /* \"#utility.yul\":5679:5716 */\n tag_179\n jump\t// in\n tag_269:\n /* \"#utility.yul\":5666:5716 */\n swap1\n pop\n /* \"#utility.yul\":5582:5722 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5728:5887 */\n tag_181:\n /* \"#utility.yul\":5829:5880 */\n tag_271\n /* \"#utility.yul\":5874:5879 */\n dup2\n /* \"#utility.yul\":5829:5880 */\n tag_180\n jump\t// in\n tag_271:\n /* \"#utility.yul\":5824:5827 */\n dup3\n /* \"#utility.yul\":5817:5881 */\n mstore\n /* \"#utility.yul\":5728:5887 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5893:6143 */\n tag_58:\n /* \"#utility.yul\":6000:6004 */\n 0x00\n /* \"#utility.yul\":6038:6040 */\n 0x20\n /* \"#utility.yul\":6027:6036 */\n dup3\n /* \"#utility.yul\":6023:6041 */\n add\n /* \"#utility.yul\":6015:6041 */\n swap1\n pop\n /* \"#utility.yul\":6051:6136 */\n tag_273\n /* \"#utility.yul\":6133:6134 */\n 0x00\n /* \"#utility.yul\":6122:6131 */\n dup4\n /* \"#utility.yul\":6118:6135 */\n add\n /* \"#utility.yul\":6109:6115 */\n dup5\n /* \"#utility.yul\":6051:6136 */\n tag_181\n jump\t// in\n tag_273:\n /* \"#utility.yul\":5893:6143 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6149:6623 */\n tag_81:\n /* \"#utility.yul\":6217:6223 */\n 0x00\n /* \"#utility.yul\":6225:6231 */\n dup1\n /* \"#utility.yul\":6274:6276 */\n 0x40\n /* \"#utility.yul\":6262:6271 */\n dup4\n /* \"#utility.yul\":6253:6260 */\n dup6\n /* \"#utility.yul\":6249:6272 */\n sub\n /* \"#utility.yul\":6245:6277 */\n slt\n /* \"#utility.yul\":6242:6361 */\n iszero\n tag_275\n jumpi\n /* \"#utility.yul\":6280:6359 */\n tag_276\n tag_163\n jump\t// in\n tag_276:\n /* \"#utility.yul\":6242:6361 */\n tag_275:\n /* \"#utility.yul\":6400:6401 */\n 0x00\n /* \"#utility.yul\":6425:6478 */\n tag_277\n /* \"#utility.yul\":6470:6477 */\n dup6\n /* \"#utility.yul\":6461:6467 */\n dup3\n /* \"#utility.yul\":6450:6459 */\n dup7\n /* \"#utility.yul\":6446:6468 */\n add\n /* \"#utility.yul\":6425:6478 */\n tag_168\n jump\t// in\n tag_277:\n /* \"#utility.yul\":6415:6478 */\n swap3\n pop\n /* \"#utility.yul\":6371:6488 */\n pop\n /* \"#utility.yul\":6527:6529 */\n 0x20\n /* \"#utility.yul\":6553:6606 */\n tag_278\n /* \"#utility.yul\":6598:6605 */\n dup6\n /* \"#utility.yul\":6589:6595 */\n dup3\n /* \"#utility.yul\":6578:6587 */\n dup7\n /* \"#utility.yul\":6574:6596 */\n add\n /* \"#utility.yul\":6553:6606 */\n tag_168\n jump\t// in\n tag_278:\n /* \"#utility.yul\":6543:6606 */\n swap2\n pop\n /* \"#utility.yul\":6498:6616 */\n pop\n /* \"#utility.yul\":6149:6623 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6629:6746 */\n tag_182:\n /* \"#utility.yul\":6738:6739 */\n 0x00\n /* \"#utility.yul\":6735:6736 */\n dup1\n /* \"#utility.yul\":6728:6740 */\n revert\n /* \"#utility.yul\":6752:6869 */\n tag_183:\n /* \"#utility.yul\":6861:6862 */\n 0x00\n /* \"#utility.yul\":6858:6859 */\n dup1\n /* \"#utility.yul\":6851:6863 */\n revert\n /* \"#utility.yul\":6875:7055 */\n tag_184:\n /* \"#utility.yul\":6923:7000 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":6920:6921 */\n 0x00\n /* \"#utility.yul\":6913:7001 */\n mstore\n /* \"#utility.yul\":7020:7024 */\n 0x41\n /* \"#utility.yul\":7017:7018 */\n 0x04\n /* \"#utility.yul\":7010:7025 */\n mstore\n /* \"#utility.yul\":7044:7048 */\n 0x24\n /* \"#utility.yul\":7041:7042 */\n 0x00\n /* \"#utility.yul\":7034:7049 */\n revert\n /* \"#utility.yul\":7061:7342 */\n tag_185:\n /* \"#utility.yul\":7144:7171 */\n tag_283\n /* \"#utility.yul\":7166:7170 */\n dup3\n /* \"#utility.yul\":7144:7171 */\n tag_160\n jump\t// in\n tag_283:\n /* \"#utility.yul\":7136:7142 */\n dup2\n /* \"#utility.yul\":7132:7172 */\n add\n /* \"#utility.yul\":7274:7280 */\n dup2\n /* \"#utility.yul\":7262:7272 */\n dup2\n /* \"#utility.yul\":7259:7281 */\n lt\n /* \"#utility.yul\":7238:7256 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7226:7236 */\n dup3\n /* \"#utility.yul\":7223:7257 */\n gt\n /* \"#utility.yul\":7220:7282 */\n or\n /* \"#utility.yul\":7217:7305 */\n iszero\n tag_284\n jumpi\n /* \"#utility.yul\":7285:7303 */\n tag_285\n tag_184\n jump\t// in\n tag_285:\n /* \"#utility.yul\":7217:7305 */\n tag_284:\n /* \"#utility.yul\":7325:7335 */\n dup1\n /* \"#utility.yul\":7321:7323 */\n 0x40\n /* \"#utility.yul\":7314:7336 */\n mstore\n /* \"#utility.yul\":7104:7342 */\n pop\n /* \"#utility.yul\":7061:7342 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7348:7477 */\n tag_186:\n /* \"#utility.yul\":7382:7388 */\n 0x00\n /* \"#utility.yul\":7409:7429 */\n tag_287\n tag_162\n jump\t// in\n tag_287:\n /* \"#utility.yul\":7399:7429 */\n swap1\n pop\n /* \"#utility.yul\":7438:7471 */\n tag_288\n /* \"#utility.yul\":7466:7470 */\n dup3\n /* \"#utility.yul\":7458:7464 */\n dup3\n /* \"#utility.yul\":7438:7471 */\n tag_185\n jump\t// in\n tag_288:\n /* \"#utility.yul\":7348:7477 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7483:7791 */\n tag_187:\n /* \"#utility.yul\":7545:7549 */\n 0x00\n /* \"#utility.yul\":7635:7653 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7627:7633 */\n dup3\n /* \"#utility.yul\":7624:7654 */\n gt\n /* \"#utility.yul\":7621:7677 */\n iszero\n tag_290\n jumpi\n /* \"#utility.yul\":7657:7675 */\n tag_291\n tag_184\n jump\t// in\n tag_291:\n /* \"#utility.yul\":7621:7677 */\n tag_290:\n /* \"#utility.yul\":7695:7724 */\n tag_292\n /* \"#utility.yul\":7717:7723 */\n dup3\n /* \"#utility.yul\":7695:7724 */\n tag_160\n jump\t// in\n tag_292:\n /* \"#utility.yul\":7687:7724 */\n swap1\n pop\n /* \"#utility.yul\":7779:7783 */\n 0x20\n /* \"#utility.yul\":7773:7777 */\n dup2\n /* \"#utility.yul\":7769:7784 */\n add\n /* \"#utility.yul\":7761:7784 */\n swap1\n pop\n /* \"#utility.yul\":7483:7791 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7797:8218 */\n tag_188:\n /* \"#utility.yul\":7886:7891 */\n 0x00\n /* \"#utility.yul\":7911:7977 */\n tag_294\n /* \"#utility.yul\":7927:7976 */\n tag_295\n /* \"#utility.yul\":7969:7975 */\n dup5\n /* \"#utility.yul\":7927:7976 */\n tag_187\n jump\t// in\n tag_295:\n /* \"#utility.yul\":7911:7977 */\n tag_186\n jump\t// in\n tag_294:\n /* \"#utility.yul\":7902:7977 */\n swap1\n pop\n /* \"#utility.yul\":8000:8006 */\n dup3\n /* \"#utility.yul\":7993:7998 */\n dup2\n /* \"#utility.yul\":7986:8007 */\n mstore\n /* \"#utility.yul\":8038:8042 */\n 0x20\n /* \"#utility.yul\":8031:8036 */\n dup2\n /* \"#utility.yul\":8027:8043 */\n add\n /* \"#utility.yul\":8076:8079 */\n dup5\n /* \"#utility.yul\":8067:8073 */\n dup5\n /* \"#utility.yul\":8062:8065 */\n dup5\n /* \"#utility.yul\":8058:8074 */\n add\n /* \"#utility.yul\":8055:8080 */\n gt\n /* \"#utility.yul\":8052:8164 */\n iszero\n tag_296\n jumpi\n /* \"#utility.yul\":8083:8162 */\n tag_297\n tag_183\n jump\t// in\n tag_297:\n /* \"#utility.yul\":8052:8164 */\n tag_296:\n /* \"#utility.yul\":8173:8212 */\n tag_298\n /* \"#utility.yul\":8205:8211 */\n dup5\n /* \"#utility.yul\":8200:8203 */\n dup3\n /* \"#utility.yul\":8195:8198 */\n dup6\n /* \"#utility.yul\":8173:8212 */\n tag_159\n jump\t// in\n tag_298:\n /* \"#utility.yul\":7892:8218 */\n pop\n /* \"#utility.yul\":7797:8218 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8238:8593 */\n tag_189:\n /* \"#utility.yul\":8305:8310 */\n 0x00\n /* \"#utility.yul\":8354:8357 */\n dup3\n /* \"#utility.yul\":8347:8351 */\n 0x1f\n /* \"#utility.yul\":8339:8345 */\n dup4\n /* \"#utility.yul\":8335:8352 */\n add\n /* \"#utility.yul\":8331:8358 */\n slt\n /* \"#utility.yul\":8321:8443 */\n tag_300\n jumpi\n /* \"#utility.yul\":8362:8441 */\n tag_301\n tag_182\n jump\t// in\n tag_301:\n /* \"#utility.yul\":8321:8443 */\n tag_300:\n /* \"#utility.yul\":8472:8478 */\n dup2\n /* \"#utility.yul\":8466:8479 */\n mload\n /* \"#utility.yul\":8497:8587 */\n tag_302\n /* \"#utility.yul\":8583:8586 */\n dup5\n /* \"#utility.yul\":8575:8581 */\n dup3\n /* \"#utility.yul\":8568:8572 */\n 0x20\n /* \"#utility.yul\":8560:8566 */\n dup7\n /* \"#utility.yul\":8556:8573 */\n add\n /* \"#utility.yul\":8497:8587 */\n tag_188\n jump\t// in\n tag_302:\n /* \"#utility.yul\":8488:8587 */\n swap2\n pop\n /* \"#utility.yul\":8311:8593 */\n pop\n /* \"#utility.yul\":8238:8593 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8599:9123 */\n tag_93:\n /* \"#utility.yul\":8679:8685 */\n 0x00\n /* \"#utility.yul\":8728:8730 */\n 0x20\n /* \"#utility.yul\":8716:8725 */\n dup3\n /* \"#utility.yul\":8707:8714 */\n dup5\n /* \"#utility.yul\":8703:8726 */\n sub\n /* \"#utility.yul\":8699:8731 */\n slt\n /* \"#utility.yul\":8696:8815 */\n iszero\n tag_304\n jumpi\n /* \"#utility.yul\":8734:8813 */\n tag_305\n tag_163\n jump\t// in\n tag_305:\n /* \"#utility.yul\":8696:8815 */\n tag_304:\n /* \"#utility.yul\":8875:8876 */\n 0x00\n /* \"#utility.yul\":8864:8873 */\n dup3\n /* \"#utility.yul\":8860:8877 */\n add\n /* \"#utility.yul\":8854:8878 */\n mload\n /* \"#utility.yul\":8905:8923 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8897:8903 */\n dup2\n /* \"#utility.yul\":8894:8924 */\n gt\n /* \"#utility.yul\":8891:9008 */\n iszero\n tag_306\n jumpi\n /* \"#utility.yul\":8927:9006 */\n tag_307\n tag_164\n jump\t// in\n tag_307:\n /* \"#utility.yul\":8891:9008 */\n tag_306:\n /* \"#utility.yul\":9032:9106 */\n tag_308\n /* \"#utility.yul\":9098:9105 */\n dup5\n /* \"#utility.yul\":9089:9095 */\n dup3\n /* \"#utility.yul\":9078:9087 */\n dup6\n /* \"#utility.yul\":9074:9096 */\n add\n /* \"#utility.yul\":9032:9106 */\n tag_189\n jump\t// in\n tag_308:\n /* \"#utility.yul\":9022:9106 */\n swap2\n pop\n /* \"#utility.yul\":8825:9116 */\n pop\n /* \"#utility.yul\":8599:9123 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9129:9247 */\n tag_190:\n /* \"#utility.yul\":9216:9240 */\n tag_310\n /* \"#utility.yul\":9234:9239 */\n dup2\n /* \"#utility.yul\":9216:9240 */\n tag_166\n jump\t// in\n tag_310:\n /* \"#utility.yul\":9211:9214 */\n dup3\n /* \"#utility.yul\":9204:9241 */\n mstore\n /* \"#utility.yul\":9129:9247 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9253:9585 */\n tag_96:\n /* \"#utility.yul\":9374:9378 */\n 0x00\n /* \"#utility.yul\":9412:9414 */\n 0x40\n /* \"#utility.yul\":9401:9410 */\n dup3\n /* \"#utility.yul\":9397:9415 */\n add\n /* \"#utility.yul\":9389:9415 */\n swap1\n pop\n /* \"#utility.yul\":9425:9496 */\n tag_312\n /* \"#utility.yul\":9493:9494 */\n 0x00\n /* \"#utility.yul\":9482:9491 */\n dup4\n /* \"#utility.yul\":9478:9495 */\n add\n /* \"#utility.yul\":9469:9475 */\n dup6\n /* \"#utility.yul\":9425:9496 */\n tag_190\n jump\t// in\n tag_312:\n /* \"#utility.yul\":9506:9578 */\n tag_313\n /* \"#utility.yul\":9574:9576 */\n 0x20\n /* \"#utility.yul\":9563:9572 */\n dup4\n /* \"#utility.yul\":9559:9577 */\n add\n /* \"#utility.yul\":9550:9556 */\n dup5\n /* \"#utility.yul\":9506:9578 */\n tag_174\n jump\t// in\n tag_313:\n /* \"#utility.yul\":9253:9585 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9591:9707 */\n tag_191:\n /* \"#utility.yul\":9661:9682 */\n tag_315\n /* \"#utility.yul\":9676:9681 */\n dup2\n /* \"#utility.yul\":9661:9682 */\n tag_172\n jump\t// in\n tag_315:\n /* \"#utility.yul\":9654:9659 */\n dup2\n /* \"#utility.yul\":9651:9683 */\n eq\n /* \"#utility.yul\":9641:9701 */\n tag_316\n jumpi\n /* \"#utility.yul\":9697:9698 */\n 0x00\n /* \"#utility.yul\":9694:9695 */\n dup1\n /* \"#utility.yul\":9687:9699 */\n revert\n /* \"#utility.yul\":9641:9701 */\n tag_316:\n /* \"#utility.yul\":9591:9707 */\n pop\n jump\t// out\n /* \"#utility.yul\":9713:9850 */\n tag_192:\n /* \"#utility.yul\":9767:9772 */\n 0x00\n /* \"#utility.yul\":9798:9804 */\n dup2\n /* \"#utility.yul\":9792:9805 */\n mload\n /* \"#utility.yul\":9783:9805 */\n swap1\n pop\n /* \"#utility.yul\":9814:9844 */\n tag_318\n /* \"#utility.yul\":9838:9843 */\n dup2\n /* \"#utility.yul\":9814:9844 */\n tag_191\n jump\t// in\n tag_318:\n /* \"#utility.yul\":9713:9850 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9856:10201 */\n tag_100:\n /* \"#utility.yul\":9923:9929 */\n 0x00\n /* \"#utility.yul\":9972:9974 */\n 0x20\n /* \"#utility.yul\":9960:9969 */\n dup3\n /* \"#utility.yul\":9951:9958 */\n dup5\n /* \"#utility.yul\":9947:9970 */\n sub\n /* \"#utility.yul\":9943:9975 */\n slt\n /* \"#utility.yul\":9940:10059 */\n iszero\n tag_320\n jumpi\n /* \"#utility.yul\":9978:10057 */\n tag_321\n tag_163\n jump\t// in\n tag_321:\n /* \"#utility.yul\":9940:10059 */\n tag_320:\n /* \"#utility.yul\":10098:10099 */\n 0x00\n /* \"#utility.yul\":10123:10184 */\n tag_322\n /* \"#utility.yul\":10176:10183 */\n dup5\n /* \"#utility.yul\":10167:10173 */\n dup3\n /* \"#utility.yul\":10156:10165 */\n dup6\n /* \"#utility.yul\":10152:10174 */\n add\n /* \"#utility.yul\":10123:10184 */\n tag_192\n jump\t// in\n tag_322:\n /* \"#utility.yul\":10113:10184 */\n swap2\n pop\n /* \"#utility.yul\":10069:10194 */\n pop\n /* \"#utility.yul\":9856:10201 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10207:10350 */\n tag_193:\n /* \"#utility.yul\":10264:10269 */\n 0x00\n /* \"#utility.yul\":10295:10301 */\n dup2\n /* \"#utility.yul\":10289:10302 */\n mload\n /* \"#utility.yul\":10280:10302 */\n swap1\n pop\n /* \"#utility.yul\":10311:10344 */\n tag_324\n /* \"#utility.yul\":10338:10343 */\n dup2\n /* \"#utility.yul\":10311:10344 */\n tag_170\n jump\t// in\n tag_324:\n /* \"#utility.yul\":10207:10350 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10356:10707 */\n tag_105:\n /* \"#utility.yul\":10426:10432 */\n 0x00\n /* \"#utility.yul\":10475:10477 */\n 0x20\n /* \"#utility.yul\":10463:10472 */\n dup3\n /* \"#utility.yul\":10454:10461 */\n dup5\n /* \"#utility.yul\":10450:10473 */\n sub\n /* \"#utility.yul\":10446:10478 */\n slt\n /* \"#utility.yul\":10443:10562 */\n iszero\n tag_326\n jumpi\n /* \"#utility.yul\":10481:10560 */\n tag_327\n tag_163\n jump\t// in\n tag_327:\n /* \"#utility.yul\":10443:10562 */\n tag_326:\n /* \"#utility.yul\":10601:10602 */\n 0x00\n /* \"#utility.yul\":10626:10690 */\n tag_328\n /* \"#utility.yul\":10682:10689 */\n dup5\n /* \"#utility.yul\":10673:10679 */\n dup3\n /* \"#utility.yul\":10662:10671 */\n dup6\n /* \"#utility.yul\":10658:10680 */\n add\n /* \"#utility.yul\":10626:10690 */\n tag_193\n jump\t// in\n tag_328:\n /* \"#utility.yul\":10616:10690 */\n swap2\n pop\n /* \"#utility.yul\":10572:10700 */\n pop\n /* \"#utility.yul\":10356:10707 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10713:11155 */\n tag_108:\n /* \"#utility.yul\":10862:10866 */\n 0x00\n /* \"#utility.yul\":10900:10902 */\n 0x60\n /* \"#utility.yul\":10889:10898 */\n dup3\n /* \"#utility.yul\":10885:10903 */\n add\n /* \"#utility.yul\":10877:10903 */\n swap1\n pop\n /* \"#utility.yul\":10913:10984 */\n tag_330\n /* \"#utility.yul\":10981:10982 */\n 0x00\n /* \"#utility.yul\":10970:10979 */\n dup4\n /* \"#utility.yul\":10966:10983 */\n add\n /* \"#utility.yul\":10957:10963 */\n dup7\n /* \"#utility.yul\":10913:10984 */\n tag_190\n jump\t// in\n tag_330:\n /* \"#utility.yul\":10994:11066 */\n tag_331\n /* \"#utility.yul\":11062:11064 */\n 0x20\n /* \"#utility.yul\":11051:11060 */\n dup4\n /* \"#utility.yul\":11047:11065 */\n add\n /* \"#utility.yul\":11038:11044 */\n dup6\n /* \"#utility.yul\":10994:11066 */\n tag_190\n jump\t// in\n tag_331:\n /* \"#utility.yul\":11076:11148 */\n tag_332\n /* \"#utility.yul\":11144:11146 */\n 0x40\n /* \"#utility.yul\":11133:11142 */\n dup4\n /* \"#utility.yul\":11129:11147 */\n add\n /* \"#utility.yul\":11120:11126 */\n dup5\n /* \"#utility.yul\":11076:11148 */\n tag_174\n jump\t// in\n tag_332:\n /* \"#utility.yul\":10713:11155 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11161:11279 */\n tag_194:\n /* \"#utility.yul\":11232:11254 */\n tag_334\n /* \"#utility.yul\":11248:11253 */\n dup2\n /* \"#utility.yul\":11232:11254 */\n tag_175\n jump\t// in\n tag_334:\n /* \"#utility.yul\":11225:11230 */\n dup2\n /* \"#utility.yul\":11222:11255 */\n eq\n /* \"#utility.yul\":11212:11273 */\n tag_335\n jumpi\n /* \"#utility.yul\":11269:11270 */\n 0x00\n /* \"#utility.yul\":11266:11267 */\n dup1\n /* \"#utility.yul\":11259:11271 */\n revert\n /* \"#utility.yul\":11212:11273 */\n tag_335:\n /* \"#utility.yul\":11161:11279 */\n pop\n jump\t// out\n /* \"#utility.yul\":11285:11424 */\n tag_195:\n /* \"#utility.yul\":11340:11345 */\n 0x00\n /* \"#utility.yul\":11371:11377 */\n dup2\n /* \"#utility.yul\":11365:11378 */\n mload\n /* \"#utility.yul\":11356:11378 */\n swap1\n pop\n /* \"#utility.yul\":11387:11418 */\n tag_337\n /* \"#utility.yul\":11412:11417 */\n dup2\n /* \"#utility.yul\":11387:11418 */\n tag_194\n jump\t// in\n tag_337:\n /* \"#utility.yul\":11285:11424 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11430:11777 */\n tag_116:\n /* \"#utility.yul\":11498:11504 */\n 0x00\n /* \"#utility.yul\":11547:11549 */\n 0x20\n /* \"#utility.yul\":11535:11544 */\n dup3\n /* \"#utility.yul\":11526:11533 */\n dup5\n /* \"#utility.yul\":11522:11545 */\n sub\n /* \"#utility.yul\":11518:11550 */\n slt\n /* \"#utility.yul\":11515:11634 */\n iszero\n tag_339\n jumpi\n /* \"#utility.yul\":11553:11632 */\n tag_340\n tag_163\n jump\t// in\n tag_340:\n /* \"#utility.yul\":11515:11634 */\n tag_339:\n /* \"#utility.yul\":11673:11674 */\n 0x00\n /* \"#utility.yul\":11698:11760 */\n tag_341\n /* \"#utility.yul\":11752:11759 */\n dup5\n /* \"#utility.yul\":11743:11749 */\n dup3\n /* \"#utility.yul\":11732:11741 */\n dup6\n /* \"#utility.yul\":11728:11750 */\n add\n /* \"#utility.yul\":11698:11760 */\n tag_195\n jump\t// in\n tag_341:\n /* \"#utility.yul\":11688:11760 */\n swap2\n pop\n /* \"#utility.yul\":11644:11770 */\n pop\n /* \"#utility.yul\":11430:11777 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11783:12005 */\n tag_119:\n /* \"#utility.yul\":11876:11880 */\n 0x00\n /* \"#utility.yul\":11914:11916 */\n 0x20\n /* \"#utility.yul\":11903:11912 */\n dup3\n /* \"#utility.yul\":11899:11917 */\n add\n /* \"#utility.yul\":11891:11917 */\n swap1\n pop\n /* \"#utility.yul\":11927:11998 */\n tag_343\n /* \"#utility.yul\":11995:11996 */\n 0x00\n /* \"#utility.yul\":11984:11993 */\n dup4\n /* \"#utility.yul\":11980:11997 */\n add\n /* \"#utility.yul\":11971:11977 */\n dup5\n /* \"#utility.yul\":11927:11998 */\n tag_190\n jump\t// in\n tag_343:\n /* \"#utility.yul\":11783:12005 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12011:12109 */\n tag_196:\n /* \"#utility.yul\":12062:12068 */\n 0x00\n /* \"#utility.yul\":12096:12101 */\n dup2\n /* \"#utility.yul\":12090:12102 */\n mload\n /* \"#utility.yul\":12080:12102 */\n swap1\n pop\n /* \"#utility.yul\":12011:12109 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12115:12262 */\n tag_197:\n /* \"#utility.yul\":12216:12227 */\n 0x00\n /* \"#utility.yul\":12253:12256 */\n dup2\n /* \"#utility.yul\":12238:12256 */\n swap1\n pop\n /* \"#utility.yul\":12115:12262 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12268:12641 */\n tag_198:\n /* \"#utility.yul\":12372:12375 */\n 0x00\n /* \"#utility.yul\":12400:12438 */\n tag_347\n /* \"#utility.yul\":12432:12437 */\n dup3\n /* \"#utility.yul\":12400:12438 */\n tag_196\n jump\t// in\n tag_347:\n /* \"#utility.yul\":12454:12542 */\n tag_348\n /* \"#utility.yul\":12535:12541 */\n dup2\n /* \"#utility.yul\":12530:12533 */\n dup6\n /* \"#utility.yul\":12454:12542 */\n tag_197\n jump\t// in\n tag_348:\n /* \"#utility.yul\":12447:12542 */\n swap4\n pop\n /* \"#utility.yul\":12551:12603 */\n tag_349\n /* \"#utility.yul\":12596:12602 */\n dup2\n /* \"#utility.yul\":12591:12594 */\n dup6\n /* \"#utility.yul\":12584:12588 */\n 0x20\n /* \"#utility.yul\":12577:12582 */\n dup7\n /* \"#utility.yul\":12573:12589 */\n add\n /* \"#utility.yul\":12551:12603 */\n tag_159\n jump\t// in\n tag_349:\n /* \"#utility.yul\":12628:12634 */\n dup1\n /* \"#utility.yul\":12623:12626 */\n dup5\n /* \"#utility.yul\":12619:12635 */\n add\n /* \"#utility.yul\":12612:12635 */\n swap2\n pop\n /* \"#utility.yul\":12376:12641 */\n pop\n /* \"#utility.yul\":12268:12641 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12647:12918 */\n tag_126:\n /* \"#utility.yul\":12777:12780 */\n 0x00\n /* \"#utility.yul\":12799:12892 */\n tag_351\n /* \"#utility.yul\":12888:12891 */\n dup3\n /* \"#utility.yul\":12879:12885 */\n dup5\n /* \"#utility.yul\":12799:12892 */\n tag_198\n jump\t// in\n tag_351:\n /* \"#utility.yul\":12792:12892 */\n swap2\n pop\n /* \"#utility.yul\":12909:12912 */\n dup2\n /* \"#utility.yul\":12902:12912 */\n swap1\n pop\n /* \"#utility.yul\":12647:12918 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12924:13256 */\n tag_147:\n /* \"#utility.yul\":13045:13049 */\n 0x00\n /* \"#utility.yul\":13083:13085 */\n 0x40\n /* \"#utility.yul\":13072:13081 */\n dup3\n /* \"#utility.yul\":13068:13086 */\n add\n /* \"#utility.yul\":13060:13086 */\n swap1\n pop\n /* \"#utility.yul\":13096:13167 */\n tag_353\n /* \"#utility.yul\":13164:13165 */\n 0x00\n /* \"#utility.yul\":13153:13162 */\n dup4\n /* \"#utility.yul\":13149:13166 */\n add\n /* \"#utility.yul\":13140:13146 */\n dup6\n /* \"#utility.yul\":13096:13167 */\n tag_190\n jump\t// in\n tag_353:\n /* \"#utility.yul\":13177:13249 */\n tag_354\n /* \"#utility.yul\":13245:13247 */\n 0x20\n /* \"#utility.yul\":13234:13243 */\n dup4\n /* \"#utility.yul\":13230:13248 */\n add\n /* \"#utility.yul\":13221:13227 */\n dup5\n /* \"#utility.yul\":13177:13249 */\n tag_190\n jump\t// in\n tag_354:\n /* \"#utility.yul\":12924:13256 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212201292b7f8363b319cf5c8471a4dc98170aaf27859f613c38f53e839086a79c0f364736f6c634300080b0033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "608060405273ffffffff1fcacbd218edc0eba20fc2308c7780806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ffffffff1fcacbd218edc0eba20fc2308c778080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b50611404806100c96000396000f3fe6080604052600436106100c65760003560e01c8063785e9e861161007f578063a887c98111610059578063a887c9811461029d578063a9059cbb146102da578063dd62ed3e14610317578063f5bfbd8a14610354576100cd565b8063785e9e861461020a5780637eea12051461023557806395d89b4114610272576100cd565b806306fdde03146100d2578063095ea7b3146100fd57806318160ddd1461013a57806323b872dd14610165578063313ce567146101a257806370a08231146101cd576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100e7610391565b6040516100f49190610d7f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190610e49565b61042c565b6040516101319190610ea4565b60405180910390f35b34801561014657600080fd5b5061014f6104d5565b60405161015c9190610ece565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190610ee9565b61056c565b6040516101999190610ea4565b60405180910390f35b3480156101ae57600080fd5b506101b7610618565b6040516101c49190610f58565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190610f73565b6106af565b6040516102019190610ece565b60405180910390f35b34801561021657600080fd5b5061021f610753565b60405161022c9190610fff565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190610ee9565b610777565b6040516102699190610ea4565b60405180910390f35b34801561027e57600080fd5b506102876108a5565b6040516102949190610d7f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190610e49565b610940565b6040516102d19190610ea4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190610e49565b610a6b565b60405161030e9190610ea4565b60405180910390f35b34801561032357600080fd5b5061033e6004803603810190610339919061101a565b610b14565b60405161034b9190610ece565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190610e49565b610bbb565b6040516103889190610ea4565b60405180910390f35b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103fe573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104279190611180565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b815260040161048a9291906111d8565b6020604051808303816000875af11580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610567919061126f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016105cc9392919061129c565b6020604051808303816000875af11580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f919061122d565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906112ff565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161070b919061132c565b602060405180830381865afa158015610728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074c919061126f565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686866040516024016107ca9392919061129c565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610854919061138e565b600060405180830381855af49150503d806000811461088f576040519150601f19603f3d011682016040523d82523d6000602084013e610894565b606091505b509150915081925050509392505050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610912573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061093b9190611180565b905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856040516024016109919291906111d8565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a1b919061138e565b600060405180830381855af49150503d8060008114610a56576040519150601f19603f3d011682016040523d82523d6000602084013e610a5b565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ac99291906111d8565b6020604051808303816000875af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610b729291906113a5565b602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb3919061126f565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401610c0c9291906111d8565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c96919061138e565b600060405180830381855af49150503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5091509150819250505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d20578082015181840152602081019050610d05565b83811115610d2f576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d5182610ce6565b610d5b8185610cf1565b9350610d6b818560208601610d02565b610d7481610d35565b840191505092915050565b60006020820190508181036000830152610d998184610d46565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610de082610db5565b9050919050565b610df081610dd5565b8114610dfb57600080fd5b50565b600081359050610e0d81610de7565b92915050565b6000819050919050565b610e2681610e13565b8114610e3157600080fd5b50565b600081359050610e4381610e1d565b92915050565b60008060408385031215610e6057610e5f610dab565b5b6000610e6e85828601610dfe565b9250506020610e7f85828601610e34565b9150509250929050565b60008115159050919050565b610e9e81610e89565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e13565b82525050565b6000602082019050610ee36000830184610ebf565b92915050565b600080600060608486031215610f0257610f01610dab565b5b6000610f1086828701610dfe565b9350506020610f2186828701610dfe565b9250506040610f3286828701610e34565b9150509250925092565b600060ff82169050919050565b610f5281610f3c565b82525050565b6000602082019050610f6d6000830184610f49565b92915050565b600060208284031215610f8957610f88610dab565b5b6000610f9784828501610dfe565b91505092915050565b6000819050919050565b6000610fc5610fc0610fbb84610db5565b610fa0565b610db5565b9050919050565b6000610fd782610faa565b9050919050565b6000610fe982610fcc565b9050919050565b610ff981610fde565b82525050565b60006020820190506110146000830184610ff0565b92915050565b6000806040838503121561103157611030610dab565b5b600061103f85828601610dfe565b925050602061105085828601610dfe565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61109c82610d35565b810181811067ffffffffffffffff821117156110bb576110ba611064565b5b80604052505050565b60006110ce610da1565b90506110da8282611093565b919050565b600067ffffffffffffffff8211156110fa576110f9611064565b5b61110382610d35565b9050602081019050919050565b600061112361111e846110df565b6110c4565b90508281526020810184848401111561113f5761113e61105f565b5b61114a848285610d02565b509392505050565b600082601f8301126111675761116661105a565b5b8151611177848260208601611110565b91505092915050565b60006020828403121561119657611195610dab565b5b600082015167ffffffffffffffff8111156111b4576111b3610db0565b5b6111c084828501611152565b91505092915050565b6111d281610dd5565b82525050565b60006040820190506111ed60008301856111c9565b6111fa6020830184610ebf565b9392505050565b61120a81610e89565b811461121557600080fd5b50565b60008151905061122781611201565b92915050565b60006020828403121561124357611242610dab565b5b600061125184828501611218565b91505092915050565b60008151905061126981610e1d565b92915050565b60006020828403121561128557611284610dab565b5b60006112938482850161125a565b91505092915050565b60006060820190506112b160008301866111c9565b6112be60208301856111c9565b6112cb6040830184610ebf565b949350505050565b6112dc81610f3c565b81146112e757600080fd5b50565b6000815190506112f9816112d3565b92915050565b60006020828403121561131557611314610dab565b5b6000611323848285016112ea565b91505092915050565b600060208201905061134160008301846111c9565b92915050565b600081519050919050565b600081905092915050565b600061136882611347565b6113728185611352565b9350611382818560208601610d02565b80840191505092915050565b600061139a828461135d565b915081905092915050565b60006040820190506113ba60008301856111c9565b6113c760208301846111c9565b939250505056fea26469706673582212208e12a55e1169919056ad784c23047c1146f43d73fc99312a442666202ba7296164736f6c634300080a0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH20 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1404 DUP1 PUSH2 0xC9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E9E86 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA887C981 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x354 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x785E9E86 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x272 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1CD JUMPI PUSH2 0xCD JUMP JUMPDEST CALLDATASIZE PUSH2 0xCD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE7 PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x42C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x15C SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x187 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x56C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x199 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B7 PUSH2 0x618 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C4 SWAP2 SWAP1 PUSH2 0xF58 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EF SWAP2 SWAP1 PUSH2 0xF73 JUMP JUMPDEST PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x201 SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21F PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22C SWAP2 SWAP1 PUSH2 0xFFF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x257 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x287 PUSH2 0x8A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x294 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2BF SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x301 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2FC SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x30E SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x339 SWAP2 SWAP1 PUSH2 0x101A JUMP JUMPDEST PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x376 SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x388 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48A SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4CD SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x567 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5CC SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x60F SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6AA SWAP2 SWAP1 PUSH2 0x12FF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x70B SWAP2 SWAP1 PUSH2 0x132C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x728 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74C SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x7CA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x854 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x88F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x894 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x912 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x93B SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x991 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xA1B SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xA56 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAC9 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0C SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB72 SWAP3 SWAP2 SWAP1 PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBB3 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC0C SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xC96 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD20 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD05 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD2F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD51 DUP3 PUSH2 0xCE6 JUMP JUMPDEST PUSH2 0xD5B DUP2 DUP6 PUSH2 0xCF1 JUMP JUMPDEST SWAP4 POP PUSH2 0xD6B DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST PUSH2 0xD74 DUP2 PUSH2 0xD35 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xD99 DUP2 DUP5 PUSH2 0xD46 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE0 DUP3 PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDF0 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP2 EQ PUSH2 0xDFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE0D DUP2 PUSH2 0xDE7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE26 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP2 EQ PUSH2 0xE31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE43 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE60 JUMPI PUSH2 0xE5F PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE6E DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE7F DUP6 DUP3 DUP7 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE9E DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEB9 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEC8 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEE3 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF02 JUMPI PUSH2 0xF01 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF10 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF21 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xF32 DUP7 DUP3 DUP8 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF52 DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xF6D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF49 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF89 JUMPI PUSH2 0xF88 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF97 DUP5 DUP3 DUP6 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFC5 PUSH2 0xFC0 PUSH2 0xFBB DUP5 PUSH2 0xDB5 JUMP JUMPDEST PUSH2 0xFA0 JUMP JUMPDEST PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFD7 DUP3 PUSH2 0xFAA JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFE9 DUP3 PUSH2 0xFCC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xFF9 DUP2 PUSH2 0xFDE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1014 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFF0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1031 JUMPI PUSH2 0x1030 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x103F DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1050 DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x109C DUP3 PUSH2 0xD35 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x10BB JUMPI PUSH2 0x10BA PUSH2 0x1064 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10CE PUSH2 0xDA1 JUMP JUMPDEST SWAP1 POP PUSH2 0x10DA DUP3 DUP3 PUSH2 0x1093 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x10FA JUMPI PUSH2 0x10F9 PUSH2 0x1064 JUMP JUMPDEST JUMPDEST PUSH2 0x1103 DUP3 PUSH2 0xD35 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1123 PUSH2 0x111E DUP5 PUSH2 0x10DF JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x113F JUMPI PUSH2 0x113E PUSH2 0x105F JUMP JUMPDEST JUMPDEST PUSH2 0x114A DUP5 DUP3 DUP6 PUSH2 0xD02 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1167 JUMPI PUSH2 0x1166 PUSH2 0x105A JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1177 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1110 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1196 JUMPI PUSH2 0x1195 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B4 JUMPI PUSH2 0x11B3 PUSH2 0xDB0 JUMP JUMPDEST JUMPDEST PUSH2 0x11C0 DUP5 DUP3 DUP6 ADD PUSH2 0x1152 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x11D2 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x11ED PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x11FA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x120A DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP2 EQ PUSH2 0x1215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1227 DUP2 PUSH2 0x1201 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1243 JUMPI PUSH2 0x1242 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1251 DUP5 DUP3 DUP6 ADD PUSH2 0x1218 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1269 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1285 JUMPI PUSH2 0x1284 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1293 DUP5 DUP3 DUP6 ADD PUSH2 0x125A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x12B1 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12BE PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12CB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x12DC DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP2 EQ PUSH2 0x12E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x12F9 DUP2 PUSH2 0x12D3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1315 JUMPI PUSH2 0x1314 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1323 DUP5 DUP3 DUP6 ADD PUSH2 0x12EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1341 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1368 DUP3 PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x1372 DUP2 DUP6 PUSH2 0x1352 JUMP JUMPDEST SWAP4 POP PUSH2 0x1382 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139A DUP3 DUP5 PUSH2 0x135D JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x13BA PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x13C7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 SLT 0xA5 0x5E GT PUSH10 0x919056AD784C23047C11 CHAINID DELEGATECALL RETURNDATASIZE PUSH20 0xFC99312A442666202BA7296164736F6C63430008 EXP STOP CALLER ", - "sourceMap": "3962:3269:0:-:0;;;4092:42;4063:72;;;;;;;;;;;;;;;;;;;;4168:42;4145:65;;;;;;;;;;;;;;;;;;;;3962:3269;;;;;;;;;;;;;;;;" + "object": "608060405273ffffffff1fcacbd218edc0eba20fc2308c7780806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ffffffff1fcacbd218edc0eba20fc2308c778080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b50611404806100c96000396000f3fe6080604052600436106100c65760003560e01c8063785e9e861161007f578063a887c98111610059578063a887c9811461029d578063a9059cbb146102da578063dd62ed3e14610317578063f5bfbd8a14610354576100cd565b8063785e9e861461020a5780637eea12051461023557806395d89b4114610272576100cd565b806306fdde03146100d2578063095ea7b3146100fd57806318160ddd1461013a57806323b872dd14610165578063313ce567146101a257806370a08231146101cd576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100e7610391565b6040516100f49190610d7f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190610e49565b61042c565b6040516101319190610ea4565b60405180910390f35b34801561014657600080fd5b5061014f6104d5565b60405161015c9190610ece565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190610ee9565b61056c565b6040516101999190610ea4565b60405180910390f35b3480156101ae57600080fd5b506101b7610618565b6040516101c49190610f58565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190610f73565b6106af565b6040516102019190610ece565b60405180910390f35b34801561021657600080fd5b5061021f610753565b60405161022c9190610fff565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190610ee9565b610777565b6040516102699190610ea4565b60405180910390f35b34801561027e57600080fd5b506102876108a5565b6040516102949190610d7f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190610e49565b610940565b6040516102d19190610ea4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190610e49565b610a6b565b60405161030e9190610ea4565b60405180910390f35b34801561032357600080fd5b5061033e6004803603810190610339919061101a565b610b14565b60405161034b9190610ece565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190610e49565b610bbb565b6040516103889190610ea4565b60405180910390f35b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103fe573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104279190611180565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b815260040161048a9291906111d8565b6020604051808303816000875af11580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610567919061126f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016105cc9392919061129c565b6020604051808303816000875af11580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f919061122d565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906112ff565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161070b919061132c565b602060405180830381865afa158015610728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074c919061126f565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686866040516024016107ca9392919061129c565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610854919061138e565b600060405180830381855af49150503d806000811461088f576040519150601f19603f3d011682016040523d82523d6000602084013e610894565b606091505b509150915081925050509392505050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610912573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061093b9190611180565b905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856040516024016109919291906111d8565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a1b919061138e565b600060405180830381855af49150503d8060008114610a56576040519150601f19603f3d011682016040523d82523d6000602084013e610a5b565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ac99291906111d8565b6020604051808303816000875af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610b729291906113a5565b602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb3919061126f565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401610c0c9291906111d8565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c96919061138e565b600060405180830381855af49150503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5091509150819250505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d20578082015181840152602081019050610d05565b83811115610d2f576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d5182610ce6565b610d5b8185610cf1565b9350610d6b818560208601610d02565b610d7481610d35565b840191505092915050565b60006020820190508181036000830152610d998184610d46565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610de082610db5565b9050919050565b610df081610dd5565b8114610dfb57600080fd5b50565b600081359050610e0d81610de7565b92915050565b6000819050919050565b610e2681610e13565b8114610e3157600080fd5b50565b600081359050610e4381610e1d565b92915050565b60008060408385031215610e6057610e5f610dab565b5b6000610e6e85828601610dfe565b9250506020610e7f85828601610e34565b9150509250929050565b60008115159050919050565b610e9e81610e89565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e13565b82525050565b6000602082019050610ee36000830184610ebf565b92915050565b600080600060608486031215610f0257610f01610dab565b5b6000610f1086828701610dfe565b9350506020610f2186828701610dfe565b9250506040610f3286828701610e34565b9150509250925092565b600060ff82169050919050565b610f5281610f3c565b82525050565b6000602082019050610f6d6000830184610f49565b92915050565b600060208284031215610f8957610f88610dab565b5b6000610f9784828501610dfe565b91505092915050565b6000819050919050565b6000610fc5610fc0610fbb84610db5565b610fa0565b610db5565b9050919050565b6000610fd782610faa565b9050919050565b6000610fe982610fcc565b9050919050565b610ff981610fde565b82525050565b60006020820190506110146000830184610ff0565b92915050565b6000806040838503121561103157611030610dab565b5b600061103f85828601610dfe565b925050602061105085828601610dfe565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61109c82610d35565b810181811067ffffffffffffffff821117156110bb576110ba611064565b5b80604052505050565b60006110ce610da1565b90506110da8282611093565b919050565b600067ffffffffffffffff8211156110fa576110f9611064565b5b61110382610d35565b9050602081019050919050565b600061112361111e846110df565b6110c4565b90508281526020810184848401111561113f5761113e61105f565b5b61114a848285610d02565b509392505050565b600082601f8301126111675761116661105a565b5b8151611177848260208601611110565b91505092915050565b60006020828403121561119657611195610dab565b5b600082015167ffffffffffffffff8111156111b4576111b3610db0565b5b6111c084828501611152565b91505092915050565b6111d281610dd5565b82525050565b60006040820190506111ed60008301856111c9565b6111fa6020830184610ebf565b9392505050565b61120a81610e89565b811461121557600080fd5b50565b60008151905061122781611201565b92915050565b60006020828403121561124357611242610dab565b5b600061125184828501611218565b91505092915050565b60008151905061126981610e1d565b92915050565b60006020828403121561128557611284610dab565b5b60006112938482850161125a565b91505092915050565b60006060820190506112b160008301866111c9565b6112be60208301856111c9565b6112cb6040830184610ebf565b949350505050565b6112dc81610f3c565b81146112e757600080fd5b50565b6000815190506112f9816112d3565b92915050565b60006020828403121561131557611314610dab565b5b6000611323848285016112ea565b91505092915050565b600060208201905061134160008301846111c9565b92915050565b600081519050919050565b600081905092915050565b600061136882611347565b6113728185611352565b9350611382818560208601610d02565b80840191505092915050565b600061139a828461135d565b915081905092915050565b60006040820190506113ba60008301856111c9565b6113c760208301846111c9565b939250505056fea26469706673582212201292b7f8363b319cf5c8471a4dc98170aaf27859f613c38f53e839086a79c0f364736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH20 0xFFFFFFFF1FCACBD218EDC0EBA20FC2308C778080 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1404 DUP1 PUSH2 0xC9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E9E86 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA887C981 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x354 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x785E9E86 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x272 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1CD JUMPI PUSH2 0xCD JUMP JUMPDEST CALLDATASIZE PUSH2 0xCD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE7 PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x42C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x15C SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x187 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x56C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x199 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B7 PUSH2 0x618 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C4 SWAP2 SWAP1 PUSH2 0xF58 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EF SWAP2 SWAP1 PUSH2 0xF73 JUMP JUMPDEST PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x201 SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21F PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22C SWAP2 SWAP1 PUSH2 0xFFF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x257 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x287 PUSH2 0x8A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x294 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2BF SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x301 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2FC SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x30E SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x339 SWAP2 SWAP1 PUSH2 0x101A JUMP JUMPDEST PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x376 SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x388 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48A SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4CD SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x567 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5CC SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x60F SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6AA SWAP2 SWAP1 PUSH2 0x12FF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x70B SWAP2 SWAP1 PUSH2 0x132C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x728 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74C SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x7CA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x854 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x88F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x894 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x912 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x93B SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x991 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xA1B SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xA56 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAC9 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0C SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB72 SWAP3 SWAP2 SWAP1 PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBB3 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC0C SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xC96 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD20 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD05 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD2F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD51 DUP3 PUSH2 0xCE6 JUMP JUMPDEST PUSH2 0xD5B DUP2 DUP6 PUSH2 0xCF1 JUMP JUMPDEST SWAP4 POP PUSH2 0xD6B DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST PUSH2 0xD74 DUP2 PUSH2 0xD35 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xD99 DUP2 DUP5 PUSH2 0xD46 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE0 DUP3 PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDF0 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP2 EQ PUSH2 0xDFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE0D DUP2 PUSH2 0xDE7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE26 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP2 EQ PUSH2 0xE31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE43 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE60 JUMPI PUSH2 0xE5F PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE6E DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE7F DUP6 DUP3 DUP7 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE9E DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEB9 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEC8 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEE3 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF02 JUMPI PUSH2 0xF01 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF10 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF21 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xF32 DUP7 DUP3 DUP8 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF52 DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xF6D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF49 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF89 JUMPI PUSH2 0xF88 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF97 DUP5 DUP3 DUP6 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFC5 PUSH2 0xFC0 PUSH2 0xFBB DUP5 PUSH2 0xDB5 JUMP JUMPDEST PUSH2 0xFA0 JUMP JUMPDEST PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFD7 DUP3 PUSH2 0xFAA JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFE9 DUP3 PUSH2 0xFCC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xFF9 DUP2 PUSH2 0xFDE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1014 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFF0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1031 JUMPI PUSH2 0x1030 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x103F DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1050 DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x109C DUP3 PUSH2 0xD35 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x10BB JUMPI PUSH2 0x10BA PUSH2 0x1064 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10CE PUSH2 0xDA1 JUMP JUMPDEST SWAP1 POP PUSH2 0x10DA DUP3 DUP3 PUSH2 0x1093 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x10FA JUMPI PUSH2 0x10F9 PUSH2 0x1064 JUMP JUMPDEST JUMPDEST PUSH2 0x1103 DUP3 PUSH2 0xD35 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1123 PUSH2 0x111E DUP5 PUSH2 0x10DF JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x113F JUMPI PUSH2 0x113E PUSH2 0x105F JUMP JUMPDEST JUMPDEST PUSH2 0x114A DUP5 DUP3 DUP6 PUSH2 0xD02 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1167 JUMPI PUSH2 0x1166 PUSH2 0x105A JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1177 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1110 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1196 JUMPI PUSH2 0x1195 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B4 JUMPI PUSH2 0x11B3 PUSH2 0xDB0 JUMP JUMPDEST JUMPDEST PUSH2 0x11C0 DUP5 DUP3 DUP6 ADD PUSH2 0x1152 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x11D2 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x11ED PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x11FA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x120A DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP2 EQ PUSH2 0x1215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1227 DUP2 PUSH2 0x1201 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1243 JUMPI PUSH2 0x1242 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1251 DUP5 DUP3 DUP6 ADD PUSH2 0x1218 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1269 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1285 JUMPI PUSH2 0x1284 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1293 DUP5 DUP3 DUP6 ADD PUSH2 0x125A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x12B1 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12BE PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12CB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x12DC DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP2 EQ PUSH2 0x12E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x12F9 DUP2 PUSH2 0x12D3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1315 JUMPI PUSH2 0x1314 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1323 DUP5 DUP3 DUP6 ADD PUSH2 0x12EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1341 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1368 DUP3 PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x1372 DUP2 DUP6 PUSH2 0x1352 JUMP JUMPDEST SWAP4 POP PUSH2 0x1382 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139A DUP3 DUP5 PUSH2 0x135D JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x13BA PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x13C7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLT SWAP3 0xB7 0xF8 CALLDATASIZE EXTCODESIZE BALANCE SWAP13 CREATE2 0xC8 SELFBALANCE BYTE 0x4D 0xC9 DUP2 PUSH17 0xAAF27859F613C38F53E839086A79C0F364 PUSH20 0x6F6C634300080B00330000000000000000000000 ", + "sourceMap": "122:2944:0:-:0;;;243:42;214:72;;;;;;;;;;;;;;;;;;;;315:42;292:65;;;;;;;;;;;;;;;;;;;;122:2944;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "functionDebugData": { - "@_111": { + "@_18": { "entryPoint": null, - "id": 111, + "id": 18, "parameterSlots": 0, "returnSlots": 0 }, - "@allowance_186": { + "@allowance_93": { "entryPoint": 2836, - "id": 186, + "id": 93, "parameterSlots": 2, "returnSlots": 1 }, - "@approve_246": { + "@approve_153": { "entryPoint": 1068, - "id": 246, + "id": 153, "parameterSlots": 2, "returnSlots": 1 }, - "@approve_delegate_272": { + "@approve_delegate_179": { "entryPoint": 3003, - "id": 272, + "id": 179, "parameterSlots": 2, "returnSlots": 1 }, - "@balanceOf_169": { + "@balanceOf_76": { "entryPoint": 1711, - "id": 169, + "id": 76, "parameterSlots": 1, "returnSlots": 1 }, - "@decimals_144": { + "@decimals_51": { "entryPoint": 1560, - "id": 144, + "id": 51, "parameterSlots": 0, "returnSlots": 1 }, - "@erc20_104": { + "@erc20_11": { "entryPoint": 1875, - "id": 104, + "id": 11, "parameterSlots": 0, "returnSlots": 0 }, - "@name_122": { + "@name_29": { "entryPoint": 913, - "id": 122, + "id": 29, "parameterSlots": 0, "returnSlots": 1 }, - "@symbol_133": { + "@symbol_40": { "entryPoint": 2213, - "id": 133, + "id": 40, "parameterSlots": 0, "returnSlots": 1 }, - "@totalSupply_155": { + "@totalSupply_62": { "entryPoint": 1237, - "id": 155, + "id": 62, "parameterSlots": 0, "returnSlots": 1 }, - "@transferFrom_292": { + "@transferFrom_199": { "entryPoint": 1388, - "id": 292, + "id": 199, "parameterSlots": 3, "returnSlots": 1 }, - "@transferFrom_delegate_321": { + "@transferFrom_delegate_228": { "entryPoint": 1911, - "id": 321, + "id": 228, "parameterSlots": 3, "returnSlots": 1 }, - "@transfer_203": { + "@transfer_110": { "entryPoint": 2667, - "id": 203, + "id": 110, "parameterSlots": 2, "returnSlots": 1 }, - "@transfer_delegate_229": { + "@transfer_delegate_136": { "entryPoint": 2368, - "id": 229, + "id": 136, "parameterSlots": 2, "returnSlots": 1 }, @@ -439,7 +439,7 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_contract$_IERC20_$95_to_t_address_fromStack": { + "abi_encode_t_contract$_IERC20_$325_to_t_address_fromStack": { "entryPoint": 4080, "id": null, "parameterSlots": 2, @@ -499,7 +499,7 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_tuple_t_contract$_IERC20_$95__to_t_address__fromStack_reversed": { + "abi_encode_tuple_t_contract$_IERC20_$325__to_t_address__fromStack_reversed": { "entryPoint": 4095, "id": null, "parameterSlots": 2, @@ -595,7 +595,7 @@ "parameterSlots": 1, "returnSlots": 1 }, - "convert_t_contract$_IERC20_$95_to_t_address": { + "convert_t_contract$_IERC20_$325_to_t_address": { "entryPoint": 4062, "id": null, "parameterSlots": 1, @@ -696,37 +696,37 @@ { "ast": { "nodeType": "YulBlock", - "src": "0:13254:1", + "src": "0:13259:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "66:40:1", + "src": "66:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "77:22:1", + "src": "77:22:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "93:5:1" + "src": "93:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "87:5:1" + "src": "87:5:2" }, "nodeType": "YulFunctionCall", - "src": "87:12:1" + "src": "87:12:2" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "77:6:1" + "src": "77:6:2" } ] } @@ -738,7 +738,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "49:5:1", + "src": "49:5:2", "type": "" } ], @@ -746,16 +746,16 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "59:6:1", + "src": "59:6:2", "type": "" } ], - "src": "7:99:1" + "src": "7:99:2" }, { "body": { "nodeType": "YulBlock", - "src": "208:73:1", + "src": "208:73:2", "statements": [ { "expression": { @@ -763,39 +763,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "225:3:1" + "src": "225:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "230:6:1" + "src": "230:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "218:6:1" + "src": "218:6:2" }, "nodeType": "YulFunctionCall", - "src": "218:19:1" + "src": "218:19:2" }, "nodeType": "YulExpressionStatement", - "src": "218:19:1" + "src": "218:19:2" }, { "nodeType": "YulAssignment", - "src": "246:29:1", + "src": "246:29:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "265:3:1" + "src": "265:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "270:4:1", + "src": "270:4:2", "type": "", "value": "0x20" } @@ -803,16 +803,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "261:3:1" + "src": "261:3:2" }, "nodeType": "YulFunctionCall", - "src": "261:14:1" + "src": "261:14:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "246:11:1" + "src": "246:11:2" } ] } @@ -824,13 +824,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "180:3:1", + "src": "180:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "185:6:1", + "src": "185:6:2", "type": "" } ], @@ -838,24 +838,24 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "196:11:1", + "src": "196:11:2", "type": "" } ], - "src": "112:169:1" + "src": "112:169:2" }, { "body": { "nodeType": "YulBlock", - "src": "336:258:1", + "src": "336:258:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "346:10:1", + "src": "346:10:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "355:1:1", + "src": "355:1:2", "type": "", "value": "0" }, @@ -863,7 +863,7 @@ { "name": "i", "nodeType": "YulTypedName", - "src": "350:1:1", + "src": "350:1:2", "type": "" } ] @@ -871,7 +871,7 @@ { "body": { "nodeType": "YulBlock", - "src": "415:63:1", + "src": "415:63:2", "statements": [ { "expression": { @@ -881,21 +881,21 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "440:3:1" + "src": "440:3:2" }, { "name": "i", "nodeType": "YulIdentifier", - "src": "445:1:1" + "src": "445:1:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "436:3:1" + "src": "436:3:2" }, "nodeType": "YulFunctionCall", - "src": "436:11:1" + "src": "436:11:2" }, { "arguments": [ @@ -904,42 +904,42 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "459:3:1" + "src": "459:3:2" }, { "name": "i", "nodeType": "YulIdentifier", - "src": "464:1:1" + "src": "464:1:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "455:3:1" + "src": "455:3:2" }, "nodeType": "YulFunctionCall", - "src": "455:11:1" + "src": "455:11:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "449:5:1" + "src": "449:5:2" }, "nodeType": "YulFunctionCall", - "src": "449:18:1" + "src": "449:18:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "429:6:1" + "src": "429:6:2" }, "nodeType": "YulFunctionCall", - "src": "429:39:1" + "src": "429:39:2" }, "nodeType": "YulExpressionStatement", - "src": "429:39:1" + "src": "429:39:2" } ] }, @@ -948,41 +948,41 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "376:1:1" + "src": "376:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "379:6:1" + "src": "379:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "373:2:1" + "src": "373:2:2" }, "nodeType": "YulFunctionCall", - "src": "373:13:1" + "src": "373:13:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "387:19:1", + "src": "387:19:2", "statements": [ { "nodeType": "YulAssignment", - "src": "389:15:1", + "src": "389:15:2", "value": { "arguments": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "398:1:1" + "src": "398:1:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "401:2:1", + "src": "401:2:2", "type": "", "value": "32" } @@ -990,16 +990,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "394:3:1" + "src": "394:3:2" }, "nodeType": "YulFunctionCall", - "src": "394:10:1" + "src": "394:10:2" }, "variableNames": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "389:1:1" + "src": "389:1:2" } ] } @@ -1007,15 +1007,15 @@ }, "pre": { "nodeType": "YulBlock", - "src": "369:3:1", + "src": "369:3:2", "statements": [] }, - "src": "365:113:1" + "src": "365:113:2" }, { "body": { "nodeType": "YulBlock", - "src": "512:76:1", + "src": "512:76:2", "statements": [ { "expression": { @@ -1025,26 +1025,26 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "562:3:1" + "src": "562:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "567:6:1" + "src": "567:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "558:3:1" + "src": "558:3:2" }, "nodeType": "YulFunctionCall", - "src": "558:16:1" + "src": "558:16:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "576:1:1", + "src": "576:1:2", "type": "", "value": "0" } @@ -1052,13 +1052,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "551:6:1" + "src": "551:6:2" }, "nodeType": "YulFunctionCall", - "src": "551:27:1" + "src": "551:27:2" }, "nodeType": "YulExpressionStatement", - "src": "551:27:1" + "src": "551:27:2" } ] }, @@ -1067,24 +1067,24 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "493:1:1" + "src": "493:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "496:6:1" + "src": "496:6:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "490:2:1" + "src": "490:2:2" }, "nodeType": "YulFunctionCall", - "src": "490:13:1" + "src": "490:13:2" }, "nodeType": "YulIf", - "src": "487:101:1" + "src": "487:101:2" } ] }, @@ -1094,32 +1094,32 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "318:3:1", + "src": "318:3:2", "type": "" }, { "name": "dst", "nodeType": "YulTypedName", - "src": "323:3:1", + "src": "323:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "328:6:1", + "src": "328:6:2", "type": "" } ], - "src": "287:307:1" + "src": "287:307:2" }, { "body": { "nodeType": "YulBlock", - "src": "648:54:1", + "src": "648:54:2", "statements": [ { "nodeType": "YulAssignment", - "src": "658:38:1", + "src": "658:38:2", "value": { "arguments": [ { @@ -1127,12 +1127,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "676:5:1" + "src": "676:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "683:2:1", + "src": "683:2:2", "type": "", "value": "31" } @@ -1140,17 +1140,17 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "672:3:1" + "src": "672:3:2" }, "nodeType": "YulFunctionCall", - "src": "672:14:1" + "src": "672:14:2" }, { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "692:2:1", + "src": "692:2:2", "type": "", "value": "31" } @@ -1158,25 +1158,25 @@ "functionName": { "name": "not", "nodeType": "YulIdentifier", - "src": "688:3:1" + "src": "688:3:2" }, "nodeType": "YulFunctionCall", - "src": "688:7:1" + "src": "688:7:2" } ], "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "668:3:1" + "src": "668:3:2" }, "nodeType": "YulFunctionCall", - "src": "668:28:1" + "src": "668:28:2" }, "variableNames": [ { "name": "result", "nodeType": "YulIdentifier", - "src": "658:6:1" + "src": "658:6:2" } ] } @@ -1188,7 +1188,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "631:5:1", + "src": "631:5:2", "type": "" } ], @@ -1196,74 +1196,74 @@ { "name": "result", "nodeType": "YulTypedName", - "src": "641:6:1", + "src": "641:6:2", "type": "" } ], - "src": "600:102:1" + "src": "600:102:2" }, { "body": { "nodeType": "YulBlock", - "src": "800:272:1", + "src": "800:272:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "810:53:1", + "src": "810:53:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "857:5:1" + "src": "857:5:2" } ], "functionName": { "name": "array_length_t_string_memory_ptr", "nodeType": "YulIdentifier", - "src": "824:32:1" + "src": "824:32:2" }, "nodeType": "YulFunctionCall", - "src": "824:39:1" + "src": "824:39:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "814:6:1", + "src": "814:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "872:78:1", + "src": "872:78:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "938:3:1" + "src": "938:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "943:6:1" + "src": "943:6:2" } ], "functionName": { "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "879:58:1" + "src": "879:58:2" }, "nodeType": "YulFunctionCall", - "src": "879:71:1" + "src": "879:71:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "872:3:1" + "src": "872:3:2" } ] }, @@ -1275,12 +1275,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "985:5:1" + "src": "985:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "992:4:1", + "src": "992:4:2", "type": "", "value": "0x20" } @@ -1288,73 +1288,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "981:3:1" + "src": "981:3:2" }, "nodeType": "YulFunctionCall", - "src": "981:16:1" + "src": "981:16:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "999:3:1" + "src": "999:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "1004:6:1" + "src": "1004:6:2" } ], "functionName": { "name": "copy_memory_to_memory", "nodeType": "YulIdentifier", - "src": "959:21:1" + "src": "959:21:2" }, "nodeType": "YulFunctionCall", - "src": "959:52:1" + "src": "959:52:2" }, "nodeType": "YulExpressionStatement", - "src": "959:52:1" + "src": "959:52:2" }, { "nodeType": "YulAssignment", - "src": "1020:46:1", + "src": "1020:46:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "1031:3:1" + "src": "1031:3:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "1058:6:1" + "src": "1058:6:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "1036:21:1" + "src": "1036:21:2" }, "nodeType": "YulFunctionCall", - "src": "1036:29:1" + "src": "1036:29:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1027:3:1" + "src": "1027:3:2" }, "nodeType": "YulFunctionCall", - "src": "1027:39:1" + "src": "1027:39:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "1020:3:1" + "src": "1020:3:2" } ] } @@ -1366,13 +1366,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "781:5:1", + "src": "781:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "788:3:1", + "src": "788:3:2", "type": "" } ], @@ -1380,31 +1380,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "796:3:1", + "src": "796:3:2", "type": "" } ], - "src": "708:364:1" + "src": "708:364:2" }, { "body": { "nodeType": "YulBlock", - "src": "1196:195:1", + "src": "1196:195:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1206:26:1", + "src": "1206:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "1218:9:1" + "src": "1218:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1229:2:1", + "src": "1229:2:2", "type": "", "value": "32" } @@ -1412,16 +1412,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1214:3:1" + "src": "1214:3:2" }, "nodeType": "YulFunctionCall", - "src": "1214:18:1" + "src": "1214:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "1206:4:1" + "src": "1206:4:2" } ] }, @@ -1433,12 +1433,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "1253:9:1" + "src": "1253:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1264:1:1", + "src": "1264:1:2", "type": "", "value": "0" } @@ -1446,73 +1446,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1249:3:1" + "src": "1249:3:2" }, "nodeType": "YulFunctionCall", - "src": "1249:17:1" + "src": "1249:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "1272:4:1" + "src": "1272:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "1278:9:1" + "src": "1278:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "1268:3:1" + "src": "1268:3:2" }, "nodeType": "YulFunctionCall", - "src": "1268:20:1" + "src": "1268:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "1242:6:1" + "src": "1242:6:2" }, "nodeType": "YulFunctionCall", - "src": "1242:47:1" + "src": "1242:47:2" }, "nodeType": "YulExpressionStatement", - "src": "1242:47:1" + "src": "1242:47:2" }, { "nodeType": "YulAssignment", - "src": "1298:86:1", + "src": "1298:86:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "1370:6:1" + "src": "1370:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "1379:4:1" + "src": "1379:4:2" } ], "functionName": { "name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "1306:63:1" + "src": "1306:63:2" }, "nodeType": "YulFunctionCall", - "src": "1306:78:1" + "src": "1306:78:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "1298:4:1" + "src": "1298:4:2" } ] } @@ -1524,13 +1524,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "1168:9:1", + "src": "1168:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "1180:6:1", + "src": "1180:6:2", "type": "" } ], @@ -1538,26 +1538,26 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "1191:4:1", + "src": "1191:4:2", "type": "" } ], - "src": "1078:313:1" + "src": "1078:313:2" }, { "body": { "nodeType": "YulBlock", - "src": "1437:35:1", + "src": "1437:35:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1447:19:1", + "src": "1447:19:2", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "1463:2:1", + "src": "1463:2:2", "type": "", "value": "64" } @@ -1565,16 +1565,16 @@ "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "1457:5:1" + "src": "1457:5:2" }, "nodeType": "YulFunctionCall", - "src": "1457:9:1" + "src": "1457:9:2" }, "variableNames": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "1447:6:1" + "src": "1447:6:2" } ] } @@ -1586,16 +1586,16 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "1430:6:1", + "src": "1430:6:2", "type": "" } ], - "src": "1397:75:1" + "src": "1397:75:2" }, { "body": { "nodeType": "YulBlock", - "src": "1567:28:1", + "src": "1567:28:2", "statements": [ { "expression": { @@ -1603,14 +1603,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "1584:1:1", + "src": "1584:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1587:1:1", + "src": "1587:1:2", "type": "", "value": "0" } @@ -1618,24 +1618,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "1577:6:1" + "src": "1577:6:2" }, "nodeType": "YulFunctionCall", - "src": "1577:12:1" + "src": "1577:12:2" }, "nodeType": "YulExpressionStatement", - "src": "1577:12:1" + "src": "1577:12:2" } ] }, "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulFunctionDefinition", - "src": "1478:117:1" + "src": "1478:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "1690:28:1", + "src": "1690:28:2", "statements": [ { "expression": { @@ -1643,14 +1643,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "1707:1:1", + "src": "1707:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1710:1:1", + "src": "1710:1:2", "type": "", "value": "0" } @@ -1658,39 +1658,39 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "1700:6:1" + "src": "1700:6:2" }, "nodeType": "YulFunctionCall", - "src": "1700:12:1" + "src": "1700:12:2" }, "nodeType": "YulExpressionStatement", - "src": "1700:12:1" + "src": "1700:12:2" } ] }, "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulFunctionDefinition", - "src": "1601:117:1" + "src": "1601:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "1769:81:1", + "src": "1769:81:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1779:65:1", + "src": "1779:65:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1794:5:1" + "src": "1794:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1801:42:1", + "src": "1801:42:2", "type": "", "value": "0xffffffffffffffffffffffffffffffffffffffff" } @@ -1698,16 +1698,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "1790:3:1" + "src": "1790:3:2" }, "nodeType": "YulFunctionCall", - "src": "1790:54:1" + "src": "1790:54:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "1779:7:1" + "src": "1779:7:2" } ] } @@ -1719,7 +1719,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1751:5:1", + "src": "1751:5:2", "type": "" } ], @@ -1727,41 +1727,41 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "1761:7:1", + "src": "1761:7:2", "type": "" } ], - "src": "1724:126:1" + "src": "1724:126:2" }, { "body": { "nodeType": "YulBlock", - "src": "1901:51:1", + "src": "1901:51:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1911:35:1", + "src": "1911:35:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1940:5:1" + "src": "1940:5:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "1922:17:1" + "src": "1922:17:2" }, "nodeType": "YulFunctionCall", - "src": "1922:24:1" + "src": "1922:24:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "1911:7:1" + "src": "1911:7:2" } ] } @@ -1773,7 +1773,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1883:5:1", + "src": "1883:5:2", "type": "" } ], @@ -1781,21 +1781,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "1893:7:1", + "src": "1893:7:2", "type": "" } ], - "src": "1856:96:1" + "src": "1856:96:2" }, { "body": { "nodeType": "YulBlock", - "src": "2001:79:1", + "src": "2001:79:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "2058:16:1", + "src": "2058:16:2", "statements": [ { "expression": { @@ -1803,14 +1803,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "2067:1:1", + "src": "2067:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2070:1:1", + "src": "2070:1:2", "type": "", "value": "0" } @@ -1818,13 +1818,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "2060:6:1" + "src": "2060:6:2" }, "nodeType": "YulFunctionCall", - "src": "2060:12:1" + "src": "2060:12:2" }, "nodeType": "YulExpressionStatement", - "src": "2060:12:1" + "src": "2060:12:2" } ] }, @@ -1835,44 +1835,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "2024:5:1" + "src": "2024:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "2049:5:1" + "src": "2049:5:2" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "2031:17:1" + "src": "2031:17:2" }, "nodeType": "YulFunctionCall", - "src": "2031:24:1" + "src": "2031:24:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "2021:2:1" + "src": "2021:2:2" }, "nodeType": "YulFunctionCall", - "src": "2021:35:1" + "src": "2021:35:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "2014:6:1" + "src": "2014:6:2" }, "nodeType": "YulFunctionCall", - "src": "2014:43:1" + "src": "2014:43:2" }, "nodeType": "YulIf", - "src": "2011:63:1" + "src": "2011:63:2" } ] }, @@ -1882,41 +1882,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1994:5:1", + "src": "1994:5:2", "type": "" } ], - "src": "1958:122:1" + "src": "1958:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "2138:87:1", + "src": "2138:87:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2148:29:1", + "src": "2148:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "2170:6:1" + "src": "2170:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "2157:12:1" + "src": "2157:12:2" }, "nodeType": "YulFunctionCall", - "src": "2157:20:1" + "src": "2157:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "2148:5:1" + "src": "2148:5:2" } ] }, @@ -1926,19 +1926,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "2213:5:1" + "src": "2213:5:2" } ], "functionName": { "name": "validator_revert_t_address", "nodeType": "YulIdentifier", - "src": "2186:26:1" + "src": "2186:26:2" }, "nodeType": "YulFunctionCall", - "src": "2186:33:1" + "src": "2186:33:2" }, "nodeType": "YulExpressionStatement", - "src": "2186:33:1" + "src": "2186:33:2" } ] }, @@ -1948,13 +1948,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "2116:6:1", + "src": "2116:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "2124:3:1", + "src": "2124:3:2", "type": "" } ], @@ -1962,30 +1962,30 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "2132:5:1", + "src": "2132:5:2", "type": "" } ], - "src": "2086:139:1" + "src": "2086:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "2276:32:1", + "src": "2276:32:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2286:16:1", + "src": "2286:16:2", "value": { "name": "value", "nodeType": "YulIdentifier", - "src": "2297:5:1" + "src": "2297:5:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "2286:7:1" + "src": "2286:7:2" } ] } @@ -1997,7 +1997,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "2258:5:1", + "src": "2258:5:2", "type": "" } ], @@ -2005,21 +2005,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "2268:7:1", + "src": "2268:7:2", "type": "" } ], - "src": "2231:77:1" + "src": "2231:77:2" }, { "body": { "nodeType": "YulBlock", - "src": "2357:79:1", + "src": "2357:79:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "2414:16:1", + "src": "2414:16:2", "statements": [ { "expression": { @@ -2027,14 +2027,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "2423:1:1", + "src": "2423:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2426:1:1", + "src": "2426:1:2", "type": "", "value": "0" } @@ -2042,13 +2042,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "2416:6:1" + "src": "2416:6:2" }, "nodeType": "YulFunctionCall", - "src": "2416:12:1" + "src": "2416:12:2" }, "nodeType": "YulExpressionStatement", - "src": "2416:12:1" + "src": "2416:12:2" } ] }, @@ -2059,44 +2059,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "2380:5:1" + "src": "2380:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "2405:5:1" + "src": "2405:5:2" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "2387:17:1" + "src": "2387:17:2" }, "nodeType": "YulFunctionCall", - "src": "2387:24:1" + "src": "2387:24:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "2377:2:1" + "src": "2377:2:2" }, "nodeType": "YulFunctionCall", - "src": "2377:35:1" + "src": "2377:35:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "2370:6:1" + "src": "2370:6:2" }, "nodeType": "YulFunctionCall", - "src": "2370:43:1" + "src": "2370:43:2" }, "nodeType": "YulIf", - "src": "2367:63:1" + "src": "2367:63:2" } ] }, @@ -2106,41 +2106,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "2350:5:1", + "src": "2350:5:2", "type": "" } ], - "src": "2314:122:1" + "src": "2314:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "2494:87:1", + "src": "2494:87:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2504:29:1", + "src": "2504:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "2526:6:1" + "src": "2526:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "2513:12:1" + "src": "2513:12:2" }, "nodeType": "YulFunctionCall", - "src": "2513:20:1" + "src": "2513:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "2504:5:1" + "src": "2504:5:2" } ] }, @@ -2150,19 +2150,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "2569:5:1" + "src": "2569:5:2" } ], "functionName": { "name": "validator_revert_t_uint256", "nodeType": "YulIdentifier", - "src": "2542:26:1" + "src": "2542:26:2" }, "nodeType": "YulFunctionCall", - "src": "2542:33:1" + "src": "2542:33:2" }, "nodeType": "YulExpressionStatement", - "src": "2542:33:1" + "src": "2542:33:2" } ] }, @@ -2172,13 +2172,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "2472:6:1", + "src": "2472:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "2480:3:1", + "src": "2480:3:2", "type": "" } ], @@ -2186,21 +2186,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "2488:5:1", + "src": "2488:5:2", "type": "" } ], - "src": "2442:139:1" + "src": "2442:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "2670:391:1", + "src": "2670:391:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "2716:83:1", + "src": "2716:83:2", "statements": [ { "expression": { @@ -2208,13 +2208,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "2718:77:1" + "src": "2718:77:2" }, "nodeType": "YulFunctionCall", - "src": "2718:79:1" + "src": "2718:79:2" }, "nodeType": "YulExpressionStatement", - "src": "2718:79:1" + "src": "2718:79:2" } ] }, @@ -2225,26 +2225,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "2691:7:1" + "src": "2691:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "2700:9:1" + "src": "2700:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "2687:3:1" + "src": "2687:3:2" }, "nodeType": "YulFunctionCall", - "src": "2687:23:1" + "src": "2687:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2712:2:1", + "src": "2712:2:2", "type": "", "value": "64" } @@ -2252,25 +2252,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "2683:3:1" + "src": "2683:3:2" }, "nodeType": "YulFunctionCall", - "src": "2683:32:1" + "src": "2683:32:2" }, "nodeType": "YulIf", - "src": "2680:119:1" + "src": "2680:119:2" }, { "nodeType": "YulBlock", - "src": "2809:117:1", + "src": "2809:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "2824:15:1", + "src": "2824:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "2838:1:1", + "src": "2838:1:2", "type": "", "value": "0" }, @@ -2278,14 +2278,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "2828:6:1", + "src": "2828:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "2853:63:1", + "src": "2853:63:2", "value": { "arguments": [ { @@ -2293,41 +2293,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "2888:9:1" + "src": "2888:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "2899:6:1" + "src": "2899:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2884:3:1" + "src": "2884:3:2" }, "nodeType": "YulFunctionCall", - "src": "2884:22:1" + "src": "2884:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "2908:7:1" + "src": "2908:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "2863:20:1" + "src": "2863:20:2" }, "nodeType": "YulFunctionCall", - "src": "2863:53:1" + "src": "2863:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "2853:6:1" + "src": "2853:6:2" } ] } @@ -2335,15 +2335,15 @@ }, { "nodeType": "YulBlock", - "src": "2936:118:1", + "src": "2936:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "2951:16:1", + "src": "2951:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "2965:2:1", + "src": "2965:2:2", "type": "", "value": "32" }, @@ -2351,14 +2351,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "2955:6:1", + "src": "2955:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "2981:63:1", + "src": "2981:63:2", "value": { "arguments": [ { @@ -2366,41 +2366,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "3016:9:1" + "src": "3016:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "3027:6:1" + "src": "3027:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3012:3:1" + "src": "3012:3:2" }, "nodeType": "YulFunctionCall", - "src": "3012:22:1" + "src": "3012:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "3036:7:1" + "src": "3036:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "2991:20:1" + "src": "2991:20:2" }, "nodeType": "YulFunctionCall", - "src": "2991:53:1" + "src": "2991:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "2981:6:1" + "src": "2981:6:2" } ] } @@ -2414,13 +2414,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "2632:9:1", + "src": "2632:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "2643:7:1", + "src": "2643:7:2", "type": "" } ], @@ -2428,26 +2428,26 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "2655:6:1", + "src": "2655:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "2663:6:1", + "src": "2663:6:2", "type": "" } ], - "src": "2587:474:1" + "src": "2587:474:2" }, { "body": { "nodeType": "YulBlock", - "src": "3109:48:1", + "src": "3109:48:2", "statements": [ { "nodeType": "YulAssignment", - "src": "3119:32:1", + "src": "3119:32:2", "value": { "arguments": [ { @@ -2455,31 +2455,31 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "3144:5:1" + "src": "3144:5:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "3137:6:1" + "src": "3137:6:2" }, "nodeType": "YulFunctionCall", - "src": "3137:13:1" + "src": "3137:13:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "3130:6:1" + "src": "3130:6:2" }, "nodeType": "YulFunctionCall", - "src": "3130:21:1" + "src": "3130:21:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "3119:7:1" + "src": "3119:7:2" } ] } @@ -2491,7 +2491,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "3091:5:1", + "src": "3091:5:2", "type": "" } ], @@ -2499,16 +2499,16 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "3101:7:1", + "src": "3101:7:2", "type": "" } ], - "src": "3067:90:1" + "src": "3067:90:2" }, { "body": { "nodeType": "YulBlock", - "src": "3222:50:1", + "src": "3222:50:2", "statements": [ { "expression": { @@ -2516,35 +2516,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "3239:3:1" + "src": "3239:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "3259:5:1" + "src": "3259:5:2" } ], "functionName": { "name": "cleanup_t_bool", "nodeType": "YulIdentifier", - "src": "3244:14:1" + "src": "3244:14:2" }, "nodeType": "YulFunctionCall", - "src": "3244:21:1" + "src": "3244:21:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "3232:6:1" + "src": "3232:6:2" }, "nodeType": "YulFunctionCall", - "src": "3232:34:1" + "src": "3232:34:2" }, "nodeType": "YulExpressionStatement", - "src": "3232:34:1" + "src": "3232:34:2" } ] }, @@ -2554,37 +2554,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "3210:5:1", + "src": "3210:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "3217:3:1", + "src": "3217:3:2", "type": "" } ], - "src": "3163:109:1" + "src": "3163:109:2" }, { "body": { "nodeType": "YulBlock", - "src": "3370:118:1", + "src": "3370:118:2", "statements": [ { "nodeType": "YulAssignment", - "src": "3380:26:1", + "src": "3380:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "3392:9:1" + "src": "3392:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3403:2:1", + "src": "3403:2:2", "type": "", "value": "32" } @@ -2592,16 +2592,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3388:3:1" + "src": "3388:3:2" }, "nodeType": "YulFunctionCall", - "src": "3388:18:1" + "src": "3388:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "3380:4:1" + "src": "3380:4:2" } ] }, @@ -2611,19 +2611,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "3454:6:1" + "src": "3454:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "3467:9:1" + "src": "3467:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3478:1:1", + "src": "3478:1:2", "type": "", "value": "0" } @@ -2631,22 +2631,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3463:3:1" + "src": "3463:3:2" }, "nodeType": "YulFunctionCall", - "src": "3463:17:1" + "src": "3463:17:2" } ], "functionName": { "name": "abi_encode_t_bool_to_t_bool_fromStack", "nodeType": "YulIdentifier", - "src": "3416:37:1" + "src": "3416:37:2" }, "nodeType": "YulFunctionCall", - "src": "3416:65:1" + "src": "3416:65:2" }, "nodeType": "YulExpressionStatement", - "src": "3416:65:1" + "src": "3416:65:2" } ] }, @@ -2656,13 +2656,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "3342:9:1", + "src": "3342:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "3354:6:1", + "src": "3354:6:2", "type": "" } ], @@ -2670,16 +2670,16 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "3365:4:1", + "src": "3365:4:2", "type": "" } ], - "src": "3278:210:1" + "src": "3278:210:2" }, { "body": { "nodeType": "YulBlock", - "src": "3559:53:1", + "src": "3559:53:2", "statements": [ { "expression": { @@ -2687,35 +2687,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "3576:3:1" + "src": "3576:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "3599:5:1" + "src": "3599:5:2" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "3581:17:1" + "src": "3581:17:2" }, "nodeType": "YulFunctionCall", - "src": "3581:24:1" + "src": "3581:24:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "3569:6:1" + "src": "3569:6:2" }, "nodeType": "YulFunctionCall", - "src": "3569:37:1" + "src": "3569:37:2" }, "nodeType": "YulExpressionStatement", - "src": "3569:37:1" + "src": "3569:37:2" } ] }, @@ -2725,37 +2725,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "3547:5:1", + "src": "3547:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "3554:3:1", + "src": "3554:3:2", "type": "" } ], - "src": "3494:118:1" + "src": "3494:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "3716:124:1", + "src": "3716:124:2", "statements": [ { "nodeType": "YulAssignment", - "src": "3726:26:1", + "src": "3726:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "3738:9:1" + "src": "3738:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3749:2:1", + "src": "3749:2:2", "type": "", "value": "32" } @@ -2763,16 +2763,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3734:3:1" + "src": "3734:3:2" }, "nodeType": "YulFunctionCall", - "src": "3734:18:1" + "src": "3734:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "3726:4:1" + "src": "3726:4:2" } ] }, @@ -2782,19 +2782,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "3806:6:1" + "src": "3806:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "3819:9:1" + "src": "3819:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3830:1:1", + "src": "3830:1:2", "type": "", "value": "0" } @@ -2802,22 +2802,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3815:3:1" + "src": "3815:3:2" }, "nodeType": "YulFunctionCall", - "src": "3815:17:1" + "src": "3815:17:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "3762:43:1" + "src": "3762:43:2" }, "nodeType": "YulFunctionCall", - "src": "3762:71:1" + "src": "3762:71:2" }, "nodeType": "YulExpressionStatement", - "src": "3762:71:1" + "src": "3762:71:2" } ] }, @@ -2827,13 +2827,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "3688:9:1", + "src": "3688:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "3700:6:1", + "src": "3700:6:2", "type": "" } ], @@ -2841,21 +2841,21 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "3711:4:1", + "src": "3711:4:2", "type": "" } ], - "src": "3618:222:1" + "src": "3618:222:2" }, { "body": { "nodeType": "YulBlock", - "src": "3946:519:1", + "src": "3946:519:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "3992:83:1", + "src": "3992:83:2", "statements": [ { "expression": { @@ -2863,13 +2863,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "3994:77:1" + "src": "3994:77:2" }, "nodeType": "YulFunctionCall", - "src": "3994:79:1" + "src": "3994:79:2" }, "nodeType": "YulExpressionStatement", - "src": "3994:79:1" + "src": "3994:79:2" } ] }, @@ -2880,26 +2880,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "3967:7:1" + "src": "3967:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "3976:9:1" + "src": "3976:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "3963:3:1" + "src": "3963:3:2" }, "nodeType": "YulFunctionCall", - "src": "3963:23:1" + "src": "3963:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3988:2:1", + "src": "3988:2:2", "type": "", "value": "96" } @@ -2907,25 +2907,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "3959:3:1" + "src": "3959:3:2" }, "nodeType": "YulFunctionCall", - "src": "3959:32:1" + "src": "3959:32:2" }, "nodeType": "YulIf", - "src": "3956:119:1" + "src": "3956:119:2" }, { "nodeType": "YulBlock", - "src": "4085:117:1", + "src": "4085:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "4100:15:1", + "src": "4100:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "4114:1:1", + "src": "4114:1:2", "type": "", "value": "0" }, @@ -2933,14 +2933,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "4104:6:1", + "src": "4104:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "4129:63:1", + "src": "4129:63:2", "value": { "arguments": [ { @@ -2948,41 +2948,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4164:9:1" + "src": "4164:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "4175:6:1" + "src": "4175:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4160:3:1" + "src": "4160:3:2" }, "nodeType": "YulFunctionCall", - "src": "4160:22:1" + "src": "4160:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "4184:7:1" + "src": "4184:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "4139:20:1" + "src": "4139:20:2" }, "nodeType": "YulFunctionCall", - "src": "4139:53:1" + "src": "4139:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "4129:6:1" + "src": "4129:6:2" } ] } @@ -2990,15 +2990,15 @@ }, { "nodeType": "YulBlock", - "src": "4212:118:1", + "src": "4212:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "4227:16:1", + "src": "4227:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "4241:2:1", + "src": "4241:2:2", "type": "", "value": "32" }, @@ -3006,14 +3006,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "4231:6:1", + "src": "4231:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "4257:63:1", + "src": "4257:63:2", "value": { "arguments": [ { @@ -3021,41 +3021,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4292:9:1" + "src": "4292:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "4303:6:1" + "src": "4303:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4288:3:1" + "src": "4288:3:2" }, "nodeType": "YulFunctionCall", - "src": "4288:22:1" + "src": "4288:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "4312:7:1" + "src": "4312:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "4267:20:1" + "src": "4267:20:2" }, "nodeType": "YulFunctionCall", - "src": "4267:53:1" + "src": "4267:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "4257:6:1" + "src": "4257:6:2" } ] } @@ -3063,15 +3063,15 @@ }, { "nodeType": "YulBlock", - "src": "4340:118:1", + "src": "4340:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "4355:16:1", + "src": "4355:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "4369:2:1", + "src": "4369:2:2", "type": "", "value": "64" }, @@ -3079,14 +3079,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "4359:6:1", + "src": "4359:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "4385:63:1", + "src": "4385:63:2", "value": { "arguments": [ { @@ -3094,41 +3094,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4420:9:1" + "src": "4420:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "4431:6:1" + "src": "4431:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4416:3:1" + "src": "4416:3:2" }, "nodeType": "YulFunctionCall", - "src": "4416:22:1" + "src": "4416:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "4440:7:1" + "src": "4440:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "4395:20:1" + "src": "4395:20:2" }, "nodeType": "YulFunctionCall", - "src": "4395:53:1" + "src": "4395:53:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "4385:6:1" + "src": "4385:6:2" } ] } @@ -3142,13 +3142,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "3900:9:1", + "src": "3900:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "3911:7:1", + "src": "3911:7:2", "type": "" } ], @@ -3156,43 +3156,43 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "3923:6:1", + "src": "3923:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "3931:6:1", + "src": "3931:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "3939:6:1", + "src": "3939:6:2", "type": "" } ], - "src": "3846:619:1" + "src": "3846:619:2" }, { "body": { "nodeType": "YulBlock", - "src": "4514:43:1", + "src": "4514:43:2", "statements": [ { "nodeType": "YulAssignment", - "src": "4524:27:1", + "src": "4524:27:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "4539:5:1" + "src": "4539:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4546:4:1", + "src": "4546:4:2", "type": "", "value": "0xff" } @@ -3200,16 +3200,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "4535:3:1" + "src": "4535:3:2" }, "nodeType": "YulFunctionCall", - "src": "4535:16:1" + "src": "4535:16:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "4524:7:1" + "src": "4524:7:2" } ] } @@ -3221,7 +3221,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "4496:5:1", + "src": "4496:5:2", "type": "" } ], @@ -3229,16 +3229,16 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "4506:7:1", + "src": "4506:7:2", "type": "" } ], - "src": "4471:86:1" + "src": "4471:86:2" }, { "body": { "nodeType": "YulBlock", - "src": "4624:51:1", + "src": "4624:51:2", "statements": [ { "expression": { @@ -3246,35 +3246,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "4641:3:1" + "src": "4641:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "4662:5:1" + "src": "4662:5:2" } ], "functionName": { "name": "cleanup_t_uint8", "nodeType": "YulIdentifier", - "src": "4646:15:1" + "src": "4646:15:2" }, "nodeType": "YulFunctionCall", - "src": "4646:22:1" + "src": "4646:22:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "4634:6:1" + "src": "4634:6:2" }, "nodeType": "YulFunctionCall", - "src": "4634:35:1" + "src": "4634:35:2" }, "nodeType": "YulExpressionStatement", - "src": "4634:35:1" + "src": "4634:35:2" } ] }, @@ -3284,37 +3284,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "4612:5:1", + "src": "4612:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "4619:3:1", + "src": "4619:3:2", "type": "" } ], - "src": "4563:112:1" + "src": "4563:112:2" }, { "body": { "nodeType": "YulBlock", - "src": "4775:120:1", + "src": "4775:120:2", "statements": [ { "nodeType": "YulAssignment", - "src": "4785:26:1", + "src": "4785:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4797:9:1" + "src": "4797:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4808:2:1", + "src": "4808:2:2", "type": "", "value": "32" } @@ -3322,16 +3322,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4793:3:1" + "src": "4793:3:2" }, "nodeType": "YulFunctionCall", - "src": "4793:18:1" + "src": "4793:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "4785:4:1" + "src": "4785:4:2" } ] }, @@ -3341,19 +3341,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "4861:6:1" + "src": "4861:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4874:9:1" + "src": "4874:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4885:1:1", + "src": "4885:1:2", "type": "", "value": "0" } @@ -3361,22 +3361,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4870:3:1" + "src": "4870:3:2" }, "nodeType": "YulFunctionCall", - "src": "4870:17:1" + "src": "4870:17:2" } ], "functionName": { "name": "abi_encode_t_uint8_to_t_uint8_fromStack", "nodeType": "YulIdentifier", - "src": "4821:39:1" + "src": "4821:39:2" }, "nodeType": "YulFunctionCall", - "src": "4821:67:1" + "src": "4821:67:2" }, "nodeType": "YulExpressionStatement", - "src": "4821:67:1" + "src": "4821:67:2" } ] }, @@ -3386,13 +3386,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "4747:9:1", + "src": "4747:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "4759:6:1", + "src": "4759:6:2", "type": "" } ], @@ -3400,21 +3400,21 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "4770:4:1", + "src": "4770:4:2", "type": "" } ], - "src": "4681:214:1" + "src": "4681:214:2" }, { "body": { "nodeType": "YulBlock", - "src": "4967:263:1", + "src": "4967:263:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "5013:83:1", + "src": "5013:83:2", "statements": [ { "expression": { @@ -3422,13 +3422,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "5015:77:1" + "src": "5015:77:2" }, "nodeType": "YulFunctionCall", - "src": "5015:79:1" + "src": "5015:79:2" }, "nodeType": "YulExpressionStatement", - "src": "5015:79:1" + "src": "5015:79:2" } ] }, @@ -3439,26 +3439,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "4988:7:1" + "src": "4988:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4997:9:1" + "src": "4997:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "4984:3:1" + "src": "4984:3:2" }, "nodeType": "YulFunctionCall", - "src": "4984:23:1" + "src": "4984:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5009:2:1", + "src": "5009:2:2", "type": "", "value": "32" } @@ -3466,25 +3466,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "4980:3:1" + "src": "4980:3:2" }, "nodeType": "YulFunctionCall", - "src": "4980:32:1" + "src": "4980:32:2" }, "nodeType": "YulIf", - "src": "4977:119:1" + "src": "4977:119:2" }, { "nodeType": "YulBlock", - "src": "5106:117:1", + "src": "5106:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "5121:15:1", + "src": "5121:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "5135:1:1", + "src": "5135:1:2", "type": "", "value": "0" }, @@ -3492,14 +3492,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "5125:6:1", + "src": "5125:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "5150:63:1", + "src": "5150:63:2", "value": { "arguments": [ { @@ -3507,41 +3507,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5185:9:1" + "src": "5185:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "5196:6:1" + "src": "5196:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5181:3:1" + "src": "5181:3:2" }, "nodeType": "YulFunctionCall", - "src": "5181:22:1" + "src": "5181:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "5205:7:1" + "src": "5205:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "5160:20:1" + "src": "5160:20:2" }, "nodeType": "YulFunctionCall", - "src": "5160:53:1" + "src": "5160:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "5150:6:1" + "src": "5150:6:2" } ] } @@ -3555,13 +3555,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "4937:9:1", + "src": "4937:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "4948:7:1", + "src": "4948:7:2", "type": "" } ], @@ -3569,30 +3569,30 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "4960:6:1", + "src": "4960:6:2", "type": "" } ], - "src": "4901:329:1" + "src": "4901:329:2" }, { "body": { "nodeType": "YulBlock", - "src": "5268:28:1", + "src": "5268:28:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5278:12:1", + "src": "5278:12:2", "value": { "name": "value", "nodeType": "YulIdentifier", - "src": "5285:5:1" + "src": "5285:5:2" }, "variableNames": [ { "name": "ret", "nodeType": "YulIdentifier", - "src": "5278:3:1" + "src": "5278:3:2" } ] } @@ -3604,7 +3604,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "5254:5:1", + "src": "5254:5:2", "type": "" } ], @@ -3612,20 +3612,20 @@ { "name": "ret", "nodeType": "YulTypedName", - "src": "5264:3:1", + "src": "5264:3:2", "type": "" } ], - "src": "5236:60:1" + "src": "5236:60:2" }, { "body": { "nodeType": "YulBlock", - "src": "5362:82:1", + "src": "5362:82:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5372:66:1", + "src": "5372:66:2", "value": { "arguments": [ { @@ -3635,40 +3635,40 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "5430:5:1" + "src": "5430:5:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "5412:17:1" + "src": "5412:17:2" }, "nodeType": "YulFunctionCall", - "src": "5412:24:1" + "src": "5412:24:2" } ], "functionName": { "name": "identity", "nodeType": "YulIdentifier", - "src": "5403:8:1" + "src": "5403:8:2" }, "nodeType": "YulFunctionCall", - "src": "5403:34:1" + "src": "5403:34:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "5385:17:1" + "src": "5385:17:2" }, "nodeType": "YulFunctionCall", - "src": "5385:53:1" + "src": "5385:53:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "5372:9:1" + "src": "5372:9:2" } ] } @@ -3680,7 +3680,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "5342:5:1", + "src": "5342:5:2", "type": "" } ], @@ -3688,41 +3688,41 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "5352:9:1", + "src": "5352:9:2", "type": "" } ], - "src": "5302:142:1" + "src": "5302:142:2" }, { "body": { "nodeType": "YulBlock", - "src": "5510:66:1", + "src": "5510:66:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5520:50:1", + "src": "5520:50:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5564:5:1" + "src": "5564:5:2" } ], "functionName": { "name": "convert_t_uint160_to_t_uint160", "nodeType": "YulIdentifier", - "src": "5533:30:1" + "src": "5533:30:2" }, "nodeType": "YulFunctionCall", - "src": "5533:37:1" + "src": "5533:37:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "5520:9:1" + "src": "5520:9:2" } ] } @@ -3734,7 +3734,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "5490:5:1", + "src": "5490:5:2", "type": "" } ], @@ -3742,53 +3742,53 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "5500:9:1", + "src": "5500:9:2", "type": "" } ], - "src": "5450:126:1" + "src": "5450:126:2" }, { "body": { "nodeType": "YulBlock", - "src": "5655:66:1", + "src": "5656:66:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5665:50:1", + "src": "5666:50:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5709:5:1" + "src": "5710:5:2" } ], "functionName": { "name": "convert_t_uint160_to_t_address", "nodeType": "YulIdentifier", - "src": "5678:30:1" + "src": "5679:30:2" }, "nodeType": "YulFunctionCall", - "src": "5678:37:1" + "src": "5679:37:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "5665:9:1" + "src": "5666:9:2" } ] } ] }, - "name": "convert_t_contract$_IERC20_$95_to_t_address", + "name": "convert_t_contract$_IERC20_$325_to_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "5635:5:1", + "src": "5636:5:2", "type": "" } ], @@ -3796,16 +3796,16 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "5645:9:1", + "src": "5646:9:2", "type": "" } ], - "src": "5582:139:1" + "src": "5582:140:2" }, { "body": { "nodeType": "YulBlock", - "src": "5805:79:1", + "src": "5807:80:2", "statements": [ { "expression": { @@ -3813,75 +3813,75 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "5822:3:1" + "src": "5824:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5871:5:1" + "src": "5874:5:2" } ], "functionName": { - "name": "convert_t_contract$_IERC20_$95_to_t_address", + "name": "convert_t_contract$_IERC20_$325_to_t_address", "nodeType": "YulIdentifier", - "src": "5827:43:1" + "src": "5829:44:2" }, "nodeType": "YulFunctionCall", - "src": "5827:50:1" + "src": "5829:51:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "5815:6:1" + "src": "5817:6:2" }, "nodeType": "YulFunctionCall", - "src": "5815:63:1" + "src": "5817:64:2" }, "nodeType": "YulExpressionStatement", - "src": "5815:63:1" + "src": "5817:64:2" } ] }, - "name": "abi_encode_t_contract$_IERC20_$95_to_t_address_fromStack", + "name": "abi_encode_t_contract$_IERC20_$325_to_t_address_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "5793:5:1", + "src": "5795:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "5800:3:1", + "src": "5802:3:2", "type": "" } ], - "src": "5727:157:1" + "src": "5728:159:2" }, { "body": { "nodeType": "YulBlock", - "src": "6001:137:1", + "src": "6005:138:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6011:26:1", + "src": "6015:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6023:9:1" + "src": "6027:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6034:2:1", + "src": "6038:2:2", "type": "", "value": "32" } @@ -3889,16 +3889,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6019:3:1" + "src": "6023:3:2" }, "nodeType": "YulFunctionCall", - "src": "6019:18:1" + "src": "6023:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "6011:4:1" + "src": "6015:4:2" } ] }, @@ -3908,19 +3908,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "6104:6:1" + "src": "6109:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6117:9:1" + "src": "6122:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6128:1:1", + "src": "6133:1:2", "type": "", "value": "0" } @@ -3928,38 +3928,38 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6113:3:1" + "src": "6118:3:2" }, "nodeType": "YulFunctionCall", - "src": "6113:17:1" + "src": "6118:17:2" } ], "functionName": { - "name": "abi_encode_t_contract$_IERC20_$95_to_t_address_fromStack", + "name": "abi_encode_t_contract$_IERC20_$325_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "6047:56:1" + "src": "6051:57:2" }, "nodeType": "YulFunctionCall", - "src": "6047:84:1" + "src": "6051:85:2" }, "nodeType": "YulExpressionStatement", - "src": "6047:84:1" + "src": "6051:85:2" } ] }, - "name": "abi_encode_tuple_t_contract$_IERC20_$95__to_t_address__fromStack_reversed", + "name": "abi_encode_tuple_t_contract$_IERC20_$325__to_t_address__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "5973:9:1", + "src": "5977:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "5985:6:1", + "src": "5989:6:2", "type": "" } ], @@ -3967,21 +3967,21 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "5996:4:1", + "src": "6000:4:2", "type": "" } ], - "src": "5890:248:1" + "src": "5893:250:2" }, { "body": { "nodeType": "YulBlock", - "src": "6227:391:1", + "src": "6232:391:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "6273:83:1", + "src": "6278:83:2", "statements": [ { "expression": { @@ -3989,13 +3989,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "6275:77:1" + "src": "6280:77:2" }, "nodeType": "YulFunctionCall", - "src": "6275:79:1" + "src": "6280:79:2" }, "nodeType": "YulExpressionStatement", - "src": "6275:79:1" + "src": "6280:79:2" } ] }, @@ -4006,26 +4006,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6248:7:1" + "src": "6253:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6257:9:1" + "src": "6262:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "6244:3:1" + "src": "6249:3:2" }, "nodeType": "YulFunctionCall", - "src": "6244:23:1" + "src": "6249:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6269:2:1", + "src": "6274:2:2", "type": "", "value": "64" } @@ -4033,25 +4033,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "6240:3:1" + "src": "6245:3:2" }, "nodeType": "YulFunctionCall", - "src": "6240:32:1" + "src": "6245:32:2" }, "nodeType": "YulIf", - "src": "6237:119:1" + "src": "6242:119:2" }, { "nodeType": "YulBlock", - "src": "6366:117:1", + "src": "6371:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6381:15:1", + "src": "6386:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "6395:1:1", + "src": "6400:1:2", "type": "", "value": "0" }, @@ -4059,14 +4059,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "6385:6:1", + "src": "6390:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "6410:63:1", + "src": "6415:63:2", "value": { "arguments": [ { @@ -4074,41 +4074,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6445:9:1" + "src": "6450:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "6456:6:1" + "src": "6461:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6441:3:1" + "src": "6446:3:2" }, "nodeType": "YulFunctionCall", - "src": "6441:22:1" + "src": "6446:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6465:7:1" + "src": "6470:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "6420:20:1" + "src": "6425:20:2" }, "nodeType": "YulFunctionCall", - "src": "6420:53:1" + "src": "6425:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "6410:6:1" + "src": "6415:6:2" } ] } @@ -4116,15 +4116,15 @@ }, { "nodeType": "YulBlock", - "src": "6493:118:1", + "src": "6498:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6508:16:1", + "src": "6513:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "6522:2:1", + "src": "6527:2:2", "type": "", "value": "32" }, @@ -4132,14 +4132,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "6512:6:1", + "src": "6517:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "6538:63:1", + "src": "6543:63:2", "value": { "arguments": [ { @@ -4147,41 +4147,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6573:9:1" + "src": "6578:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "6584:6:1" + "src": "6589:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6569:3:1" + "src": "6574:3:2" }, "nodeType": "YulFunctionCall", - "src": "6569:22:1" + "src": "6574:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6593:7:1" + "src": "6598:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "6548:20:1" + "src": "6553:20:2" }, "nodeType": "YulFunctionCall", - "src": "6548:53:1" + "src": "6553:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "6538:6:1" + "src": "6543:6:2" } ] } @@ -4195,13 +4195,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "6189:9:1", + "src": "6194:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "6200:7:1", + "src": "6205:7:2", "type": "" } ], @@ -4209,22 +4209,22 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "6212:6:1", + "src": "6217:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "6220:6:1", + "src": "6225:6:2", "type": "" } ], - "src": "6144:474:1" + "src": "6149:474:2" }, { "body": { "nodeType": "YulBlock", - "src": "6713:28:1", + "src": "6718:28:2", "statements": [ { "expression": { @@ -4232,14 +4232,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "6730:1:1", + "src": "6735:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6733:1:1", + "src": "6738:1:2", "type": "", "value": "0" } @@ -4247,24 +4247,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "6723:6:1" + "src": "6728:6:2" }, "nodeType": "YulFunctionCall", - "src": "6723:12:1" + "src": "6728:12:2" }, "nodeType": "YulExpressionStatement", - "src": "6723:12:1" + "src": "6728:12:2" } ] }, "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulFunctionDefinition", - "src": "6624:117:1" + "src": "6629:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "6836:28:1", + "src": "6841:28:2", "statements": [ { "expression": { @@ -4272,14 +4272,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "6853:1:1", + "src": "6858:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6856:1:1", + "src": "6861:1:2", "type": "", "value": "0" } @@ -4287,24 +4287,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "6846:6:1" + "src": "6851:6:2" }, "nodeType": "YulFunctionCall", - "src": "6846:12:1" + "src": "6851:12:2" }, "nodeType": "YulExpressionStatement", - "src": "6846:12:1" + "src": "6851:12:2" } ] }, "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulFunctionDefinition", - "src": "6747:117:1" + "src": "6752:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "6898:152:1", + "src": "6903:152:2", "statements": [ { "expression": { @@ -4312,14 +4312,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "6915:1:1", + "src": "6920:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6918:77:1", + "src": "6923:77:2", "type": "", "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" } @@ -4327,13 +4327,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "6908:6:1" + "src": "6913:6:2" }, "nodeType": "YulFunctionCall", - "src": "6908:88:1" + "src": "6913:88:2" }, "nodeType": "YulExpressionStatement", - "src": "6908:88:1" + "src": "6913:88:2" }, { "expression": { @@ -4341,14 +4341,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "7012:1:1", + "src": "7017:1:2", "type": "", "value": "4" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7015:4:1", + "src": "7020:4:2", "type": "", "value": "0x41" } @@ -4356,13 +4356,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "7005:6:1" + "src": "7010:6:2" }, "nodeType": "YulFunctionCall", - "src": "7005:15:1" + "src": "7010:15:2" }, "nodeType": "YulExpressionStatement", - "src": "7005:15:1" + "src": "7010:15:2" }, { "expression": { @@ -4370,14 +4370,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "7036:1:1", + "src": "7041:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7039:4:1", + "src": "7044:4:2", "type": "", "value": "0x24" } @@ -4385,65 +4385,65 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "7029:6:1" + "src": "7034:6:2" }, "nodeType": "YulFunctionCall", - "src": "7029:15:1" + "src": "7034:15:2" }, "nodeType": "YulExpressionStatement", - "src": "7029:15:1" + "src": "7034:15:2" } ] }, "name": "panic_error_0x41", "nodeType": "YulFunctionDefinition", - "src": "6870:180:1" + "src": "6875:180:2" }, { "body": { "nodeType": "YulBlock", - "src": "7099:238:1", + "src": "7104:238:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "7109:58:1", + "src": "7114:58:2", "value": { "arguments": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "7131:6:1" + "src": "7136:6:2" }, { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "7161:4:1" + "src": "7166:4:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "7139:21:1" + "src": "7144:21:2" }, "nodeType": "YulFunctionCall", - "src": "7139:27:1" + "src": "7144:27:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7127:3:1" + "src": "7132:3:2" }, "nodeType": "YulFunctionCall", - "src": "7127:40:1" + "src": "7132:40:2" }, "variables": [ { "name": "newFreePtr", "nodeType": "YulTypedName", - "src": "7113:10:1", + "src": "7118:10:2", "type": "" } ] @@ -4451,7 +4451,7 @@ { "body": { "nodeType": "YulBlock", - "src": "7278:22:1", + "src": "7283:22:2", "statements": [ { "expression": { @@ -4459,13 +4459,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "7280:16:1" + "src": "7285:16:2" }, "nodeType": "YulFunctionCall", - "src": "7280:18:1" + "src": "7285:18:2" }, "nodeType": "YulExpressionStatement", - "src": "7280:18:1" + "src": "7285:18:2" } ] }, @@ -4476,12 +4476,12 @@ { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "7221:10:1" + "src": "7226:10:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7233:18:1", + "src": "7238:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4489,43 +4489,43 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "7218:2:1" + "src": "7223:2:2" }, "nodeType": "YulFunctionCall", - "src": "7218:34:1" + "src": "7223:34:2" }, { "arguments": [ { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "7257:10:1" + "src": "7262:10:2" }, { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "7269:6:1" + "src": "7274:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "7254:2:1" + "src": "7259:2:2" }, "nodeType": "YulFunctionCall", - "src": "7254:22:1" + "src": "7259:22:2" } ], "functionName": { "name": "or", "nodeType": "YulIdentifier", - "src": "7215:2:1" + "src": "7220:2:2" }, "nodeType": "YulFunctionCall", - "src": "7215:62:1" + "src": "7220:62:2" }, "nodeType": "YulIf", - "src": "7212:88:1" + "src": "7217:88:2" }, { "expression": { @@ -4533,26 +4533,26 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "7316:2:1", + "src": "7321:2:2", "type": "", "value": "64" }, { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "7320:10:1" + "src": "7325:10:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "7309:6:1" + "src": "7314:6:2" }, "nodeType": "YulFunctionCall", - "src": "7309:22:1" + "src": "7314:22:2" }, "nodeType": "YulExpressionStatement", - "src": "7309:22:1" + "src": "7314:22:2" } ] }, @@ -4562,41 +4562,41 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "7085:6:1", + "src": "7090:6:2", "type": "" }, { "name": "size", "nodeType": "YulTypedName", - "src": "7093:4:1", + "src": "7098:4:2", "type": "" } ], - "src": "7056:281:1" + "src": "7061:281:2" }, { "body": { "nodeType": "YulBlock", - "src": "7384:88:1", + "src": "7389:88:2", "statements": [ { "nodeType": "YulAssignment", - "src": "7394:30:1", + "src": "7399:30:2", "value": { "arguments": [], "functionName": { "name": "allocate_unbounded", "nodeType": "YulIdentifier", - "src": "7404:18:1" + "src": "7409:18:2" }, "nodeType": "YulFunctionCall", - "src": "7404:20:1" + "src": "7409:20:2" }, "variableNames": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "7394:6:1" + "src": "7399:6:2" } ] }, @@ -4606,24 +4606,24 @@ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "7453:6:1" + "src": "7458:6:2" }, { "name": "size", "nodeType": "YulIdentifier", - "src": "7461:4:1" + "src": "7466:4:2" } ], "functionName": { "name": "finalize_allocation", "nodeType": "YulIdentifier", - "src": "7433:19:1" + "src": "7438:19:2" }, "nodeType": "YulFunctionCall", - "src": "7433:33:1" + "src": "7438:33:2" }, "nodeType": "YulExpressionStatement", - "src": "7433:33:1" + "src": "7438:33:2" } ] }, @@ -4633,7 +4633,7 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "7368:4:1", + "src": "7373:4:2", "type": "" } ], @@ -4641,21 +4641,21 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "7377:6:1", + "src": "7382:6:2", "type": "" } ], - "src": "7343:129:1" + "src": "7348:129:2" }, { "body": { "nodeType": "YulBlock", - "src": "7545:241:1", + "src": "7550:241:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "7650:22:1", + "src": "7655:22:2", "statements": [ { "expression": { @@ -4663,13 +4663,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "7652:16:1" + "src": "7657:16:2" }, "nodeType": "YulFunctionCall", - "src": "7652:18:1" + "src": "7657:18:2" }, "nodeType": "YulExpressionStatement", - "src": "7652:18:1" + "src": "7657:18:2" } ] }, @@ -4678,12 +4678,12 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "7622:6:1" + "src": "7627:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7630:18:1", + "src": "7635:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4691,55 +4691,55 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "7619:2:1" + "src": "7624:2:2" }, "nodeType": "YulFunctionCall", - "src": "7619:30:1" + "src": "7624:30:2" }, "nodeType": "YulIf", - "src": "7616:56:1" + "src": "7621:56:2" }, { "nodeType": "YulAssignment", - "src": "7682:37:1", + "src": "7687:37:2", "value": { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "7712:6:1" + "src": "7717:6:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "7690:21:1" + "src": "7695:21:2" }, "nodeType": "YulFunctionCall", - "src": "7690:29:1" + "src": "7695:29:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "7682:4:1" + "src": "7687:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "7756:23:1", + "src": "7761:23:2", "value": { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "7768:4:1" + "src": "7773:4:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7774:4:1", + "src": "7779:4:2", "type": "", "value": "0x20" } @@ -4747,16 +4747,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7764:3:1" + "src": "7769:3:2" }, "nodeType": "YulFunctionCall", - "src": "7764:15:1" + "src": "7769:15:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "7756:4:1" + "src": "7761:4:2" } ] } @@ -4768,7 +4768,7 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "7529:6:1", + "src": "7534:6:2", "type": "" } ], @@ -4776,20 +4776,20 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "7540:4:1", + "src": "7545:4:2", "type": "" } ], - "src": "7478:308:1" + "src": "7483:308:2" }, { "body": { "nodeType": "YulBlock", - "src": "7887:326:1", + "src": "7892:326:2", "statements": [ { "nodeType": "YulAssignment", - "src": "7897:75:1", + "src": "7902:75:2", "value": { "arguments": [ { @@ -4797,31 +4797,31 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "7964:6:1" + "src": "7969:6:2" } ], "functionName": { "name": "array_allocation_size_t_string_memory_ptr", "nodeType": "YulIdentifier", - "src": "7922:41:1" + "src": "7927:41:2" }, "nodeType": "YulFunctionCall", - "src": "7922:49:1" + "src": "7927:49:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "7906:15:1" + "src": "7911:15:2" }, "nodeType": "YulFunctionCall", - "src": "7906:66:1" + "src": "7911:66:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "7897:5:1" + "src": "7902:5:2" } ] }, @@ -4831,39 +4831,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "7988:5:1" + "src": "7993:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "7995:6:1" + "src": "8000:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "7981:6:1" + "src": "7986:6:2" }, "nodeType": "YulFunctionCall", - "src": "7981:21:1" + "src": "7986:21:2" }, "nodeType": "YulExpressionStatement", - "src": "7981:21:1" + "src": "7986:21:2" }, { "nodeType": "YulVariableDeclaration", - "src": "8011:27:1", + "src": "8016:27:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "8026:5:1" + "src": "8031:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8033:4:1", + "src": "8038:4:2", "type": "", "value": "0x20" } @@ -4871,16 +4871,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8022:3:1" + "src": "8027:3:2" }, "nodeType": "YulFunctionCall", - "src": "8022:16:1" + "src": "8027:16:2" }, "variables": [ { "name": "dst", "nodeType": "YulTypedName", - "src": "8015:3:1", + "src": "8020:3:2", "type": "" } ] @@ -4888,7 +4888,7 @@ { "body": { "nodeType": "YulBlock", - "src": "8076:83:1", + "src": "8081:83:2", "statements": [ { "expression": { @@ -4896,13 +4896,13 @@ "functionName": { "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulIdentifier", - "src": "8078:77:1" + "src": "8083:77:2" }, "nodeType": "YulFunctionCall", - "src": "8078:79:1" + "src": "8083:79:2" }, "nodeType": "YulExpressionStatement", - "src": "8078:79:1" + "src": "8083:79:2" } ] }, @@ -4913,38 +4913,38 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "8057:3:1" + "src": "8062:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "8062:6:1" + "src": "8067:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8053:3:1" + "src": "8058:3:2" }, "nodeType": "YulFunctionCall", - "src": "8053:16:1" + "src": "8058:16:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "8071:3:1" + "src": "8076:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "8050:2:1" + "src": "8055:2:2" }, "nodeType": "YulFunctionCall", - "src": "8050:25:1" + "src": "8055:25:2" }, "nodeType": "YulIf", - "src": "8047:112:1" + "src": "8052:112:2" }, { "expression": { @@ -4952,29 +4952,29 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "8190:3:1" + "src": "8195:3:2" }, { "name": "dst", "nodeType": "YulIdentifier", - "src": "8195:3:1" + "src": "8200:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "8200:6:1" + "src": "8205:6:2" } ], "functionName": { "name": "copy_memory_to_memory", "nodeType": "YulIdentifier", - "src": "8168:21:1" + "src": "8173:21:2" }, "nodeType": "YulFunctionCall", - "src": "8168:39:1" + "src": "8173:39:2" }, "nodeType": "YulExpressionStatement", - "src": "8168:39:1" + "src": "8173:39:2" } ] }, @@ -4984,19 +4984,19 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "7860:3:1", + "src": "7865:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "7865:6:1", + "src": "7870:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "7873:3:1", + "src": "7878:3:2", "type": "" } ], @@ -5004,21 +5004,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "7881:5:1", + "src": "7886:5:2", "type": "" } ], - "src": "7792:421:1" + "src": "7797:421:2" }, { "body": { "nodeType": "YulBlock", - "src": "8306:282:1", + "src": "8311:282:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8355:83:1", + "src": "8360:83:2", "statements": [ { "expression": { @@ -5026,13 +5026,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "8357:77:1" + "src": "8362:77:2" }, "nodeType": "YulFunctionCall", - "src": "8357:79:1" + "src": "8362:79:2" }, "nodeType": "YulExpressionStatement", - "src": "8357:79:1" + "src": "8362:79:2" } ] }, @@ -5045,12 +5045,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "8334:6:1" + "src": "8339:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8342:4:1", + "src": "8347:4:2", "type": "", "value": "0x1f" } @@ -5058,68 +5058,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8330:3:1" + "src": "8335:3:2" }, "nodeType": "YulFunctionCall", - "src": "8330:17:1" + "src": "8335:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "8349:3:1" + "src": "8354:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "8326:3:1" + "src": "8331:3:2" }, "nodeType": "YulFunctionCall", - "src": "8326:27:1" + "src": "8331:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "8319:6:1" + "src": "8324:6:2" }, "nodeType": "YulFunctionCall", - "src": "8319:35:1" + "src": "8324:35:2" }, "nodeType": "YulIf", - "src": "8316:122:1" + "src": "8321:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "8447:27:1", + "src": "8452:27:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "8467:6:1" + "src": "8472:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "8461:5:1" + "src": "8466:5:2" }, "nodeType": "YulFunctionCall", - "src": "8461:13:1" + "src": "8466:13:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "8451:6:1", + "src": "8456:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "8483:99:1", + "src": "8488:99:2", "value": { "arguments": [ { @@ -5127,12 +5127,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "8555:6:1" + "src": "8560:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8563:4:1", + "src": "8568:4:2", "type": "", "value": "0x20" } @@ -5140,35 +5140,35 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8551:3:1" + "src": "8556:3:2" }, "nodeType": "YulFunctionCall", - "src": "8551:17:1" + "src": "8556:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "8570:6:1" + "src": "8575:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "8578:3:1" + "src": "8583:3:2" } ], "functionName": { "name": "abi_decode_available_length_t_string_memory_ptr_fromMemory", "nodeType": "YulIdentifier", - "src": "8492:58:1" + "src": "8497:58:2" }, "nodeType": "YulFunctionCall", - "src": "8492:90:1" + "src": "8497:90:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "8483:5:1" + "src": "8488:5:2" } ] } @@ -5180,13 +5180,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "8284:6:1", + "src": "8289:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "8292:3:1", + "src": "8297:3:2", "type": "" } ], @@ -5194,21 +5194,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "8300:5:1", + "src": "8305:5:2", "type": "" } ], - "src": "8233:355:1" + "src": "8238:355:2" }, { "body": { "nodeType": "YulBlock", - "src": "8681:437:1", + "src": "8686:437:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8727:83:1", + "src": "8732:83:2", "statements": [ { "expression": { @@ -5216,13 +5216,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "8729:77:1" + "src": "8734:77:2" }, "nodeType": "YulFunctionCall", - "src": "8729:79:1" + "src": "8734:79:2" }, "nodeType": "YulExpressionStatement", - "src": "8729:79:1" + "src": "8734:79:2" } ] }, @@ -5233,26 +5233,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "8702:7:1" + "src": "8707:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "8711:9:1" + "src": "8716:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "8698:3:1" + "src": "8703:3:2" }, "nodeType": "YulFunctionCall", - "src": "8698:23:1" + "src": "8703:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8723:2:1", + "src": "8728:2:2", "type": "", "value": "32" } @@ -5260,21 +5260,21 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "8694:3:1" + "src": "8699:3:2" }, "nodeType": "YulFunctionCall", - "src": "8694:32:1" + "src": "8699:32:2" }, "nodeType": "YulIf", - "src": "8691:119:1" + "src": "8696:119:2" }, { "nodeType": "YulBlock", - "src": "8820:291:1", + "src": "8825:291:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "8835:38:1", + "src": "8840:38:2", "value": { "arguments": [ { @@ -5282,12 +5282,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "8859:9:1" + "src": "8864:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8870:1:1", + "src": "8875:1:2", "type": "", "value": "0" } @@ -5295,25 +5295,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8855:3:1" + "src": "8860:3:2" }, "nodeType": "YulFunctionCall", - "src": "8855:17:1" + "src": "8860:17:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "8849:5:1" + "src": "8854:5:2" }, "nodeType": "YulFunctionCall", - "src": "8849:24:1" + "src": "8854:24:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "8839:6:1", + "src": "8844:6:2", "type": "" } ] @@ -5321,7 +5321,7 @@ { "body": { "nodeType": "YulBlock", - "src": "8920:83:1", + "src": "8925:83:2", "statements": [ { "expression": { @@ -5329,13 +5329,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "8922:77:1" + "src": "8927:77:2" }, "nodeType": "YulFunctionCall", - "src": "8922:79:1" + "src": "8927:79:2" }, "nodeType": "YulExpressionStatement", - "src": "8922:79:1" + "src": "8927:79:2" } ] }, @@ -5344,12 +5344,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "8892:6:1" + "src": "8897:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8900:18:1", + "src": "8905:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -5357,17 +5357,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "8889:2:1" + "src": "8894:2:2" }, "nodeType": "YulFunctionCall", - "src": "8889:30:1" + "src": "8894:30:2" }, "nodeType": "YulIf", - "src": "8886:117:1" + "src": "8891:117:2" }, { "nodeType": "YulAssignment", - "src": "9017:84:1", + "src": "9022:84:2", "value": { "arguments": [ { @@ -5375,41 +5375,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9073:9:1" + "src": "9078:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "9084:6:1" + "src": "9089:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9069:3:1" + "src": "9074:3:2" }, "nodeType": "YulFunctionCall", - "src": "9069:22:1" + "src": "9074:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "9093:7:1" + "src": "9098:7:2" } ], "functionName": { "name": "abi_decode_t_string_memory_ptr_fromMemory", "nodeType": "YulIdentifier", - "src": "9027:41:1" + "src": "9032:41:2" }, "nodeType": "YulFunctionCall", - "src": "9027:74:1" + "src": "9032:74:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "9017:6:1" + "src": "9022:6:2" } ] } @@ -5423,13 +5423,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "8651:9:1", + "src": "8656:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "8662:7:1", + "src": "8667:7:2", "type": "" } ], @@ -5437,16 +5437,16 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "8674:6:1", + "src": "8679:6:2", "type": "" } ], - "src": "8594:524:1" + "src": "8599:524:2" }, { "body": { "nodeType": "YulBlock", - "src": "9189:53:1", + "src": "9194:53:2", "statements": [ { "expression": { @@ -5454,35 +5454,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "9206:3:1" + "src": "9211:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "9229:5:1" + "src": "9234:5:2" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "9211:17:1" + "src": "9216:17:2" }, "nodeType": "YulFunctionCall", - "src": "9211:24:1" + "src": "9216:24:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "9199:6:1" + "src": "9204:6:2" }, "nodeType": "YulFunctionCall", - "src": "9199:37:1" + "src": "9204:37:2" }, "nodeType": "YulExpressionStatement", - "src": "9199:37:1" + "src": "9204:37:2" } ] }, @@ -5492,37 +5492,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "9177:5:1", + "src": "9182:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "9184:3:1", + "src": "9189:3:2", "type": "" } ], - "src": "9124:118:1" + "src": "9129:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "9374:206:1", + "src": "9379:206:2", "statements": [ { "nodeType": "YulAssignment", - "src": "9384:26:1", + "src": "9389:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9396:9:1" + "src": "9401:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9407:2:1", + "src": "9412:2:2", "type": "", "value": "64" } @@ -5530,16 +5530,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9392:3:1" + "src": "9397:3:2" }, "nodeType": "YulFunctionCall", - "src": "9392:18:1" + "src": "9397:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "9384:4:1" + "src": "9389:4:2" } ] }, @@ -5549,19 +5549,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "9464:6:1" + "src": "9469:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9477:9:1" + "src": "9482:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9488:1:1", + "src": "9493:1:2", "type": "", "value": "0" } @@ -5569,22 +5569,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9473:3:1" + "src": "9478:3:2" }, "nodeType": "YulFunctionCall", - "src": "9473:17:1" + "src": "9478:17:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "9420:43:1" + "src": "9425:43:2" }, "nodeType": "YulFunctionCall", - "src": "9420:71:1" + "src": "9425:71:2" }, "nodeType": "YulExpressionStatement", - "src": "9420:71:1" + "src": "9425:71:2" }, { "expression": { @@ -5592,19 +5592,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "9545:6:1" + "src": "9550:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9558:9:1" + "src": "9563:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9569:2:1", + "src": "9574:2:2", "type": "", "value": "32" } @@ -5612,22 +5612,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9554:3:1" + "src": "9559:3:2" }, "nodeType": "YulFunctionCall", - "src": "9554:18:1" + "src": "9559:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "9501:43:1" + "src": "9506:43:2" }, "nodeType": "YulFunctionCall", - "src": "9501:72:1" + "src": "9506:72:2" }, "nodeType": "YulExpressionStatement", - "src": "9501:72:1" + "src": "9506:72:2" } ] }, @@ -5637,19 +5637,19 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "9338:9:1", + "src": "9343:9:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "9350:6:1", + "src": "9355:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "9358:6:1", + "src": "9363:6:2", "type": "" } ], @@ -5657,21 +5657,21 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "9369:4:1", + "src": "9374:4:2", "type": "" } ], - "src": "9248:332:1" + "src": "9253:332:2" }, { "body": { "nodeType": "YulBlock", - "src": "9626:76:1", + "src": "9631:76:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "9680:16:1", + "src": "9685:16:2", "statements": [ { "expression": { @@ -5679,14 +5679,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "9689:1:1", + "src": "9694:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9692:1:1", + "src": "9697:1:2", "type": "", "value": "0" } @@ -5694,13 +5694,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "9682:6:1" + "src": "9687:6:2" }, "nodeType": "YulFunctionCall", - "src": "9682:12:1" + "src": "9687:12:2" }, "nodeType": "YulExpressionStatement", - "src": "9682:12:1" + "src": "9687:12:2" } ] }, @@ -5711,44 +5711,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "9649:5:1" + "src": "9654:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "9671:5:1" + "src": "9676:5:2" } ], "functionName": { "name": "cleanup_t_bool", "nodeType": "YulIdentifier", - "src": "9656:14:1" + "src": "9661:14:2" }, "nodeType": "YulFunctionCall", - "src": "9656:21:1" + "src": "9661:21:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "9646:2:1" + "src": "9651:2:2" }, "nodeType": "YulFunctionCall", - "src": "9646:32:1" + "src": "9651:32:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "9639:6:1" + "src": "9644:6:2" }, "nodeType": "YulFunctionCall", - "src": "9639:40:1" + "src": "9644:40:2" }, "nodeType": "YulIf", - "src": "9636:60:1" + "src": "9641:60:2" } ] }, @@ -5758,41 +5758,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "9619:5:1", + "src": "9624:5:2", "type": "" } ], - "src": "9586:116:1" + "src": "9591:116:2" }, { "body": { "nodeType": "YulBlock", - "src": "9768:77:1", + "src": "9773:77:2", "statements": [ { "nodeType": "YulAssignment", - "src": "9778:22:1", + "src": "9783:22:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "9793:6:1" + "src": "9798:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "9787:5:1" + "src": "9792:5:2" }, "nodeType": "YulFunctionCall", - "src": "9787:13:1" + "src": "9792:13:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "9778:5:1" + "src": "9783:5:2" } ] }, @@ -5802,19 +5802,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "9833:5:1" + "src": "9838:5:2" } ], "functionName": { "name": "validator_revert_t_bool", "nodeType": "YulIdentifier", - "src": "9809:23:1" + "src": "9814:23:2" }, "nodeType": "YulFunctionCall", - "src": "9809:30:1" + "src": "9814:30:2" }, "nodeType": "YulExpressionStatement", - "src": "9809:30:1" + "src": "9814:30:2" } ] }, @@ -5824,13 +5824,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "9746:6:1", + "src": "9751:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "9754:3:1", + "src": "9759:3:2", "type": "" } ], @@ -5838,21 +5838,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "9762:5:1", + "src": "9767:5:2", "type": "" } ], - "src": "9708:137:1" + "src": "9713:137:2" }, { "body": { "nodeType": "YulBlock", - "src": "9925:271:1", + "src": "9930:271:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "9971:83:1", + "src": "9976:83:2", "statements": [ { "expression": { @@ -5860,13 +5860,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "9973:77:1" + "src": "9978:77:2" }, "nodeType": "YulFunctionCall", - "src": "9973:79:1" + "src": "9978:79:2" }, "nodeType": "YulExpressionStatement", - "src": "9973:79:1" + "src": "9978:79:2" } ] }, @@ -5877,26 +5877,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "9946:7:1" + "src": "9951:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9955:9:1" + "src": "9960:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "9942:3:1" + "src": "9947:3:2" }, "nodeType": "YulFunctionCall", - "src": "9942:23:1" + "src": "9947:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9967:2:1", + "src": "9972:2:2", "type": "", "value": "32" } @@ -5904,25 +5904,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "9938:3:1" + "src": "9943:3:2" }, "nodeType": "YulFunctionCall", - "src": "9938:32:1" + "src": "9943:32:2" }, "nodeType": "YulIf", - "src": "9935:119:1" + "src": "9940:119:2" }, { "nodeType": "YulBlock", - "src": "10064:125:1", + "src": "10069:125:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "10079:15:1", + "src": "10084:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "10093:1:1", + "src": "10098:1:2", "type": "", "value": "0" }, @@ -5930,14 +5930,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "10083:6:1", + "src": "10088:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "10108:71:1", + "src": "10113:71:2", "value": { "arguments": [ { @@ -5945,41 +5945,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10151:9:1" + "src": "10156:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "10162:6:1" + "src": "10167:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10147:3:1" + "src": "10152:3:2" }, "nodeType": "YulFunctionCall", - "src": "10147:22:1" + "src": "10152:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "10171:7:1" + "src": "10176:7:2" } ], "functionName": { "name": "abi_decode_t_bool_fromMemory", "nodeType": "YulIdentifier", - "src": "10118:28:1" + "src": "10123:28:2" }, "nodeType": "YulFunctionCall", - "src": "10118:61:1" + "src": "10123:61:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "10108:6:1" + "src": "10113:6:2" } ] } @@ -5993,13 +5993,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "9895:9:1", + "src": "9900:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "9906:7:1", + "src": "9911:7:2", "type": "" } ], @@ -6007,41 +6007,41 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "9918:6:1", + "src": "9923:6:2", "type": "" } ], - "src": "9851:345:1" + "src": "9856:345:2" }, { "body": { "nodeType": "YulBlock", - "src": "10265:80:1", + "src": "10270:80:2", "statements": [ { "nodeType": "YulAssignment", - "src": "10275:22:1", + "src": "10280:22:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "10290:6:1" + "src": "10295:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "10284:5:1" + "src": "10289:5:2" }, "nodeType": "YulFunctionCall", - "src": "10284:13:1" + "src": "10289:13:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "10275:5:1" + "src": "10280:5:2" } ] }, @@ -6051,19 +6051,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "10333:5:1" + "src": "10338:5:2" } ], "functionName": { "name": "validator_revert_t_uint256", "nodeType": "YulIdentifier", - "src": "10306:26:1" + "src": "10311:26:2" }, "nodeType": "YulFunctionCall", - "src": "10306:33:1" + "src": "10311:33:2" }, "nodeType": "YulExpressionStatement", - "src": "10306:33:1" + "src": "10311:33:2" } ] }, @@ -6073,13 +6073,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "10243:6:1", + "src": "10248:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "10251:3:1", + "src": "10256:3:2", "type": "" } ], @@ -6087,21 +6087,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "10259:5:1", + "src": "10264:5:2", "type": "" } ], - "src": "10202:143:1" + "src": "10207:143:2" }, { "body": { "nodeType": "YulBlock", - "src": "10428:274:1", + "src": "10433:274:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "10474:83:1", + "src": "10479:83:2", "statements": [ { "expression": { @@ -6109,13 +6109,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "10476:77:1" + "src": "10481:77:2" }, "nodeType": "YulFunctionCall", - "src": "10476:79:1" + "src": "10481:79:2" }, "nodeType": "YulExpressionStatement", - "src": "10476:79:1" + "src": "10481:79:2" } ] }, @@ -6126,26 +6126,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "10449:7:1" + "src": "10454:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10458:9:1" + "src": "10463:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "10445:3:1" + "src": "10450:3:2" }, "nodeType": "YulFunctionCall", - "src": "10445:23:1" + "src": "10450:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10470:2:1", + "src": "10475:2:2", "type": "", "value": "32" } @@ -6153,25 +6153,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "10441:3:1" + "src": "10446:3:2" }, "nodeType": "YulFunctionCall", - "src": "10441:32:1" + "src": "10446:32:2" }, "nodeType": "YulIf", - "src": "10438:119:1" + "src": "10443:119:2" }, { "nodeType": "YulBlock", - "src": "10567:128:1", + "src": "10572:128:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "10582:15:1", + "src": "10587:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "10596:1:1", + "src": "10601:1:2", "type": "", "value": "0" }, @@ -6179,14 +6179,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "10586:6:1", + "src": "10591:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "10611:74:1", + "src": "10616:74:2", "value": { "arguments": [ { @@ -6194,41 +6194,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10657:9:1" + "src": "10662:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "10668:6:1" + "src": "10673:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10653:3:1" + "src": "10658:3:2" }, "nodeType": "YulFunctionCall", - "src": "10653:22:1" + "src": "10658:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "10677:7:1" + "src": "10682:7:2" } ], "functionName": { "name": "abi_decode_t_uint256_fromMemory", "nodeType": "YulIdentifier", - "src": "10621:31:1" + "src": "10626:31:2" }, "nodeType": "YulFunctionCall", - "src": "10621:64:1" + "src": "10626:64:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "10611:6:1" + "src": "10616:6:2" } ] } @@ -6242,13 +6242,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "10398:9:1", + "src": "10403:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "10409:7:1", + "src": "10414:7:2", "type": "" } ], @@ -6256,31 +6256,31 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "10421:6:1", + "src": "10426:6:2", "type": "" } ], - "src": "10351:351:1" + "src": "10356:351:2" }, { "body": { "nodeType": "YulBlock", - "src": "10862:288:1", + "src": "10867:288:2", "statements": [ { "nodeType": "YulAssignment", - "src": "10872:26:1", + "src": "10877:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10884:9:1" + "src": "10889:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10895:2:1", + "src": "10900:2:2", "type": "", "value": "96" } @@ -6288,16 +6288,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10880:3:1" + "src": "10885:3:2" }, "nodeType": "YulFunctionCall", - "src": "10880:18:1" + "src": "10885:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "10872:4:1" + "src": "10877:4:2" } ] }, @@ -6307,19 +6307,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "10952:6:1" + "src": "10957:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10965:9:1" + "src": "10970:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10976:1:1", + "src": "10981:1:2", "type": "", "value": "0" } @@ -6327,22 +6327,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10961:3:1" + "src": "10966:3:2" }, "nodeType": "YulFunctionCall", - "src": "10961:17:1" + "src": "10966:17:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "10908:43:1" + "src": "10913:43:2" }, "nodeType": "YulFunctionCall", - "src": "10908:71:1" + "src": "10913:71:2" }, "nodeType": "YulExpressionStatement", - "src": "10908:71:1" + "src": "10913:71:2" }, { "expression": { @@ -6350,19 +6350,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "11033:6:1" + "src": "11038:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11046:9:1" + "src": "11051:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11057:2:1", + "src": "11062:2:2", "type": "", "value": "32" } @@ -6370,22 +6370,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11042:3:1" + "src": "11047:3:2" }, "nodeType": "YulFunctionCall", - "src": "11042:18:1" + "src": "11047:18:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "10989:43:1" + "src": "10994:43:2" }, "nodeType": "YulFunctionCall", - "src": "10989:72:1" + "src": "10994:72:2" }, "nodeType": "YulExpressionStatement", - "src": "10989:72:1" + "src": "10994:72:2" }, { "expression": { @@ -6393,19 +6393,19 @@ { "name": "value2", "nodeType": "YulIdentifier", - "src": "11115:6:1" + "src": "11120:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11128:9:1" + "src": "11133:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11139:2:1", + "src": "11144:2:2", "type": "", "value": "64" } @@ -6413,22 +6413,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11124:3:1" + "src": "11129:3:2" }, "nodeType": "YulFunctionCall", - "src": "11124:18:1" + "src": "11129:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "11071:43:1" + "src": "11076:43:2" }, "nodeType": "YulFunctionCall", - "src": "11071:72:1" + "src": "11076:72:2" }, "nodeType": "YulExpressionStatement", - "src": "11071:72:1" + "src": "11076:72:2" } ] }, @@ -6438,25 +6438,25 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "10818:9:1", + "src": "10823:9:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "10830:6:1", + "src": "10835:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "10838:6:1", + "src": "10843:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "10846:6:1", + "src": "10851:6:2", "type": "" } ], @@ -6464,21 +6464,21 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "10857:4:1", + "src": "10862:4:2", "type": "" } ], - "src": "10708:442:1" + "src": "10713:442:2" }, { "body": { "nodeType": "YulBlock", - "src": "11197:77:1", + "src": "11202:77:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "11252:16:1", + "src": "11257:16:2", "statements": [ { "expression": { @@ -6486,14 +6486,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "11261:1:1", + "src": "11266:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11264:1:1", + "src": "11269:1:2", "type": "", "value": "0" } @@ -6501,13 +6501,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "11254:6:1" + "src": "11259:6:2" }, "nodeType": "YulFunctionCall", - "src": "11254:12:1" + "src": "11259:12:2" }, "nodeType": "YulExpressionStatement", - "src": "11254:12:1" + "src": "11259:12:2" } ] }, @@ -6518,44 +6518,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "11220:5:1" + "src": "11225:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "11243:5:1" + "src": "11248:5:2" } ], "functionName": { "name": "cleanup_t_uint8", "nodeType": "YulIdentifier", - "src": "11227:15:1" + "src": "11232:15:2" }, "nodeType": "YulFunctionCall", - "src": "11227:22:1" + "src": "11232:22:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "11217:2:1" + "src": "11222:2:2" }, "nodeType": "YulFunctionCall", - "src": "11217:33:1" + "src": "11222:33:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "11210:6:1" + "src": "11215:6:2" }, "nodeType": "YulFunctionCall", - "src": "11210:41:1" + "src": "11215:41:2" }, "nodeType": "YulIf", - "src": "11207:61:1" + "src": "11212:61:2" } ] }, @@ -6565,41 +6565,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "11190:5:1", + "src": "11195:5:2", "type": "" } ], - "src": "11156:118:1" + "src": "11161:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "11341:78:1", + "src": "11346:78:2", "statements": [ { "nodeType": "YulAssignment", - "src": "11351:22:1", + "src": "11356:22:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "11366:6:1" + "src": "11371:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "11360:5:1" + "src": "11365:5:2" }, "nodeType": "YulFunctionCall", - "src": "11360:13:1" + "src": "11365:13:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "11351:5:1" + "src": "11356:5:2" } ] }, @@ -6609,19 +6609,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "11407:5:1" + "src": "11412:5:2" } ], "functionName": { "name": "validator_revert_t_uint8", "nodeType": "YulIdentifier", - "src": "11382:24:1" + "src": "11387:24:2" }, "nodeType": "YulFunctionCall", - "src": "11382:31:1" + "src": "11387:31:2" }, "nodeType": "YulExpressionStatement", - "src": "11382:31:1" + "src": "11387:31:2" } ] }, @@ -6631,13 +6631,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "11319:6:1", + "src": "11324:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "11327:3:1", + "src": "11332:3:2", "type": "" } ], @@ -6645,21 +6645,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "11335:5:1", + "src": "11340:5:2", "type": "" } ], - "src": "11280:139:1" + "src": "11285:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "11500:272:1", + "src": "11505:272:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "11546:83:1", + "src": "11551:83:2", "statements": [ { "expression": { @@ -6667,13 +6667,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "11548:77:1" + "src": "11553:77:2" }, "nodeType": "YulFunctionCall", - "src": "11548:79:1" + "src": "11553:79:2" }, "nodeType": "YulExpressionStatement", - "src": "11548:79:1" + "src": "11553:79:2" } ] }, @@ -6684,26 +6684,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "11521:7:1" + "src": "11526:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11530:9:1" + "src": "11535:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "11517:3:1" + "src": "11522:3:2" }, "nodeType": "YulFunctionCall", - "src": "11517:23:1" + "src": "11522:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11542:2:1", + "src": "11547:2:2", "type": "", "value": "32" } @@ -6711,25 +6711,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "11513:3:1" + "src": "11518:3:2" }, "nodeType": "YulFunctionCall", - "src": "11513:32:1" + "src": "11518:32:2" }, "nodeType": "YulIf", - "src": "11510:119:1" + "src": "11515:119:2" }, { "nodeType": "YulBlock", - "src": "11639:126:1", + "src": "11644:126:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "11654:15:1", + "src": "11659:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "11668:1:1", + "src": "11673:1:2", "type": "", "value": "0" }, @@ -6737,14 +6737,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "11658:6:1", + "src": "11663:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "11683:72:1", + "src": "11688:72:2", "value": { "arguments": [ { @@ -6752,41 +6752,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11727:9:1" + "src": "11732:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "11738:6:1" + "src": "11743:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11723:3:1" + "src": "11728:3:2" }, "nodeType": "YulFunctionCall", - "src": "11723:22:1" + "src": "11728:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "11747:7:1" + "src": "11752:7:2" } ], "functionName": { "name": "abi_decode_t_uint8_fromMemory", "nodeType": "YulIdentifier", - "src": "11693:29:1" + "src": "11698:29:2" }, "nodeType": "YulFunctionCall", - "src": "11693:62:1" + "src": "11698:62:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "11683:6:1" + "src": "11688:6:2" } ] } @@ -6800,13 +6800,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "11470:9:1", + "src": "11475:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "11481:7:1", + "src": "11486:7:2", "type": "" } ], @@ -6814,31 +6814,31 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "11493:6:1", + "src": "11498:6:2", "type": "" } ], - "src": "11425:347:1" + "src": "11430:347:2" }, { "body": { "nodeType": "YulBlock", - "src": "11876:124:1", + "src": "11881:124:2", "statements": [ { "nodeType": "YulAssignment", - "src": "11886:26:1", + "src": "11891:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11898:9:1" + "src": "11903:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11909:2:1", + "src": "11914:2:2", "type": "", "value": "32" } @@ -6846,16 +6846,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11894:3:1" + "src": "11899:3:2" }, "nodeType": "YulFunctionCall", - "src": "11894:18:1" + "src": "11899:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "11886:4:1" + "src": "11891:4:2" } ] }, @@ -6865,19 +6865,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "11966:6:1" + "src": "11971:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11979:9:1" + "src": "11984:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11990:1:1", + "src": "11995:1:2", "type": "", "value": "0" } @@ -6885,22 +6885,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11975:3:1" + "src": "11980:3:2" }, "nodeType": "YulFunctionCall", - "src": "11975:17:1" + "src": "11980:17:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "11922:43:1" + "src": "11927:43:2" }, "nodeType": "YulFunctionCall", - "src": "11922:71:1" + "src": "11927:71:2" }, "nodeType": "YulExpressionStatement", - "src": "11922:71:1" + "src": "11927:71:2" } ] }, @@ -6910,13 +6910,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "11848:9:1", + "src": "11853:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "11860:6:1", + "src": "11865:6:2", "type": "" } ], @@ -6924,41 +6924,41 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "11871:4:1", + "src": "11876:4:2", "type": "" } ], - "src": "11778:222:1" + "src": "11783:222:2" }, { "body": { "nodeType": "YulBlock", - "src": "12064:40:1", + "src": "12069:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "12075:22:1", + "src": "12080:22:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "12091:5:1" + "src": "12096:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "12085:5:1" + "src": "12090:5:2" }, "nodeType": "YulFunctionCall", - "src": "12085:12:1" + "src": "12090:12:2" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "12075:6:1" + "src": "12080:6:2" } ] } @@ -6970,7 +6970,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "12047:5:1", + "src": "12052:5:2", "type": "" } ], @@ -6978,30 +6978,30 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "12057:6:1", + "src": "12062:6:2", "type": "" } ], - "src": "12006:98:1" + "src": "12011:98:2" }, { "body": { "nodeType": "YulBlock", - "src": "12223:34:1", + "src": "12228:34:2", "statements": [ { "nodeType": "YulAssignment", - "src": "12233:18:1", + "src": "12238:18:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "12248:3:1" + "src": "12253:3:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "12233:11:1" + "src": "12238:11:2" } ] } @@ -7013,13 +7013,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "12195:3:1", + "src": "12200:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "12200:6:1", + "src": "12205:6:2", "type": "" } ], @@ -7027,74 +7027,74 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "12211:11:1", + "src": "12216:11:2", "type": "" } ], - "src": "12110:147:1" + "src": "12115:147:2" }, { "body": { "nodeType": "YulBlock", - "src": "12371:265:1", + "src": "12376:265:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "12381:52:1", + "src": "12386:52:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "12427:5:1" + "src": "12432:5:2" } ], "functionName": { "name": "array_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "12395:31:1" + "src": "12400:31:2" }, "nodeType": "YulFunctionCall", - "src": "12395:38:1" + "src": "12400:38:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "12385:6:1", + "src": "12390:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "12442:95:1", + "src": "12447:95:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "12525:3:1" + "src": "12530:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "12530:6:1" + "src": "12535:6:2" } ], "functionName": { "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", "nodeType": "YulIdentifier", - "src": "12449:75:1" + "src": "12454:75:2" }, "nodeType": "YulFunctionCall", - "src": "12449:88:1" + "src": "12454:88:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "12442:3:1" + "src": "12447:3:2" } ] }, @@ -7106,12 +7106,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "12572:5:1" + "src": "12577:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "12579:4:1", + "src": "12584:4:2", "type": "", "value": "0x20" } @@ -7119,62 +7119,62 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12568:3:1" + "src": "12573:3:2" }, "nodeType": "YulFunctionCall", - "src": "12568:16:1" + "src": "12573:16:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "12586:3:1" + "src": "12591:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "12591:6:1" + "src": "12596:6:2" } ], "functionName": { "name": "copy_memory_to_memory", "nodeType": "YulIdentifier", - "src": "12546:21:1" + "src": "12551:21:2" }, "nodeType": "YulFunctionCall", - "src": "12546:52:1" + "src": "12551:52:2" }, "nodeType": "YulExpressionStatement", - "src": "12546:52:1" + "src": "12551:52:2" }, { "nodeType": "YulAssignment", - "src": "12607:23:1", + "src": "12612:23:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "12618:3:1" + "src": "12623:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "12623:6:1" + "src": "12628:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12614:3:1" + "src": "12619:3:2" }, "nodeType": "YulFunctionCall", - "src": "12614:16:1" + "src": "12619:16:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "12607:3:1" + "src": "12612:3:2" } ] } @@ -7186,13 +7186,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "12352:5:1", + "src": "12357:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "12359:3:1", + "src": "12364:3:2", "type": "" } ], @@ -7200,62 +7200,62 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "12367:3:1", + "src": "12372:3:2", "type": "" } ], - "src": "12263:373:1" + "src": "12268:373:2" }, { "body": { "nodeType": "YulBlock", - "src": "12776:137:1", + "src": "12781:137:2", "statements": [ { "nodeType": "YulAssignment", - "src": "12787:100:1", + "src": "12792:100:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "12874:6:1" + "src": "12879:6:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "12883:3:1" + "src": "12888:3:2" } ], "functionName": { "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", "nodeType": "YulIdentifier", - "src": "12794:79:1" + "src": "12799:79:2" }, "nodeType": "YulFunctionCall", - "src": "12794:93:1" + "src": "12799:93:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "12787:3:1" + "src": "12792:3:2" } ] }, { "nodeType": "YulAssignment", - "src": "12897:10:1", + "src": "12902:10:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "12904:3:1" + "src": "12909:3:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "12897:3:1" + "src": "12902:3:2" } ] } @@ -7267,13 +7267,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "12755:3:1", + "src": "12760:3:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "12761:6:1", + "src": "12766:6:2", "type": "" } ], @@ -7281,31 +7281,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "12772:3:1", + "src": "12777:3:2", "type": "" } ], - "src": "12642:271:1" + "src": "12647:271:2" }, { "body": { "nodeType": "YulBlock", - "src": "13045:206:1", + "src": "13050:206:2", "statements": [ { "nodeType": "YulAssignment", - "src": "13055:26:1", + "src": "13060:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13067:9:1" + "src": "13072:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "13078:2:1", + "src": "13083:2:2", "type": "", "value": "64" } @@ -7313,16 +7313,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13063:3:1" + "src": "13068:3:2" }, "nodeType": "YulFunctionCall", - "src": "13063:18:1" + "src": "13068:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "13055:4:1" + "src": "13060:4:2" } ] }, @@ -7332,19 +7332,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "13135:6:1" + "src": "13140:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13148:9:1" + "src": "13153:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "13159:1:1", + "src": "13164:1:2", "type": "", "value": "0" } @@ -7352,22 +7352,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13144:3:1" + "src": "13149:3:2" }, "nodeType": "YulFunctionCall", - "src": "13144:17:1" + "src": "13149:17:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "13091:43:1" + "src": "13096:43:2" }, "nodeType": "YulFunctionCall", - "src": "13091:71:1" + "src": "13096:71:2" }, "nodeType": "YulExpressionStatement", - "src": "13091:71:1" + "src": "13096:71:2" }, { "expression": { @@ -7375,19 +7375,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "13216:6:1" + "src": "13221:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13229:9:1" + "src": "13234:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "13240:2:1", + "src": "13245:2:2", "type": "", "value": "32" } @@ -7395,22 +7395,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13225:3:1" + "src": "13230:3:2" }, "nodeType": "YulFunctionCall", - "src": "13225:18:1" + "src": "13230:18:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "13172:43:1" + "src": "13177:43:2" }, "nodeType": "YulFunctionCall", - "src": "13172:72:1" + "src": "13177:72:2" }, "nodeType": "YulExpressionStatement", - "src": "13172:72:1" + "src": "13177:72:2" } ] }, @@ -7420,19 +7420,19 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "13009:9:1", + "src": "13014:9:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "13021:6:1", + "src": "13026:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "13029:6:1", + "src": "13034:6:2", "type": "" } ], @@ -7440,25 +7440,25 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "13040:4:1", + "src": "13045:4:2", "type": "" } ], - "src": "12919:332:1" + "src": "12924:332:2" } ] }, - "contents": "{\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint8(value) -> cleaned {\n cleaned := and(value, 0xff)\n }\n\n function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_IERC20_$95_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_IERC20_$95_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_IERC20_$95_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_IERC20_$95__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_IERC20_$95_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_string_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function abi_decode_available_length_t_string_memory_ptr_fromMemory(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_memory_to_memory(src, dst, length)\n }\n\n // string\n function abi_decode_t_string_memory_ptr_fromMemory(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := mload(offset)\n array := abi_decode_available_length_t_string_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := mload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n tail := add(headStart, 96)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n }\n\n function validator_revert_t_uint8(value) {\n if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint8_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint8(value)\n }\n\n function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint8_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n }\n\n}\n", - "id": 1, + "contents": "{\n\n function array_length_t_string_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_string_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack(value0, tail)\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint8(value) -> cleaned {\n cleaned := and(value, 0xff)\n }\n\n function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_IERC20_$325_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_IERC20_$325_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_IERC20_$325_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_IERC20_$325__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_IERC20_$325_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_string_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function abi_decode_available_length_t_string_memory_ptr_fromMemory(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_string_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_memory_to_memory(src, dst, length)\n }\n\n // string\n function abi_decode_t_string_memory_ptr_fromMemory(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := mload(offset)\n array := abi_decode_available_length_t_string_memory_ptr_fromMemory(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := mload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_string_memory_ptr_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n tail := add(headStart, 96)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n }\n\n function validator_revert_t_uint8(value) {\n if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint8_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint8(value)\n }\n\n function abi_decode_tuple_t_uint8_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint8_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n }\n\n}\n", + "id": 2, "language": "Yul", "name": "#utility.yul" } ], "immutableReferences": {}, "linkReferences": {}, - "object": "6080604052600436106100c65760003560e01c8063785e9e861161007f578063a887c98111610059578063a887c9811461029d578063a9059cbb146102da578063dd62ed3e14610317578063f5bfbd8a14610354576100cd565b8063785e9e861461020a5780637eea12051461023557806395d89b4114610272576100cd565b806306fdde03146100d2578063095ea7b3146100fd57806318160ddd1461013a57806323b872dd14610165578063313ce567146101a257806370a08231146101cd576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100e7610391565b6040516100f49190610d7f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190610e49565b61042c565b6040516101319190610ea4565b60405180910390f35b34801561014657600080fd5b5061014f6104d5565b60405161015c9190610ece565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190610ee9565b61056c565b6040516101999190610ea4565b60405180910390f35b3480156101ae57600080fd5b506101b7610618565b6040516101c49190610f58565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190610f73565b6106af565b6040516102019190610ece565b60405180910390f35b34801561021657600080fd5b5061021f610753565b60405161022c9190610fff565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190610ee9565b610777565b6040516102699190610ea4565b60405180910390f35b34801561027e57600080fd5b506102876108a5565b6040516102949190610d7f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190610e49565b610940565b6040516102d19190610ea4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190610e49565b610a6b565b60405161030e9190610ea4565b60405180910390f35b34801561032357600080fd5b5061033e6004803603810190610339919061101a565b610b14565b60405161034b9190610ece565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190610e49565b610bbb565b6040516103889190610ea4565b60405180910390f35b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103fe573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104279190611180565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b815260040161048a9291906111d8565b6020604051808303816000875af11580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610567919061126f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016105cc9392919061129c565b6020604051808303816000875af11580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f919061122d565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906112ff565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161070b919061132c565b602060405180830381865afa158015610728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074c919061126f565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686866040516024016107ca9392919061129c565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610854919061138e565b600060405180830381855af49150503d806000811461088f576040519150601f19603f3d011682016040523d82523d6000602084013e610894565b606091505b509150915081925050509392505050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610912573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061093b9190611180565b905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856040516024016109919291906111d8565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a1b919061138e565b600060405180830381855af49150503d8060008114610a56576040519150601f19603f3d011682016040523d82523d6000602084013e610a5b565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ac99291906111d8565b6020604051808303816000875af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610b729291906113a5565b602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb3919061126f565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401610c0c9291906111d8565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c96919061138e565b600060405180830381855af49150503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5091509150819250505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d20578082015181840152602081019050610d05565b83811115610d2f576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d5182610ce6565b610d5b8185610cf1565b9350610d6b818560208601610d02565b610d7481610d35565b840191505092915050565b60006020820190508181036000830152610d998184610d46565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610de082610db5565b9050919050565b610df081610dd5565b8114610dfb57600080fd5b50565b600081359050610e0d81610de7565b92915050565b6000819050919050565b610e2681610e13565b8114610e3157600080fd5b50565b600081359050610e4381610e1d565b92915050565b60008060408385031215610e6057610e5f610dab565b5b6000610e6e85828601610dfe565b9250506020610e7f85828601610e34565b9150509250929050565b60008115159050919050565b610e9e81610e89565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e13565b82525050565b6000602082019050610ee36000830184610ebf565b92915050565b600080600060608486031215610f0257610f01610dab565b5b6000610f1086828701610dfe565b9350506020610f2186828701610dfe565b9250506040610f3286828701610e34565b9150509250925092565b600060ff82169050919050565b610f5281610f3c565b82525050565b6000602082019050610f6d6000830184610f49565b92915050565b600060208284031215610f8957610f88610dab565b5b6000610f9784828501610dfe565b91505092915050565b6000819050919050565b6000610fc5610fc0610fbb84610db5565b610fa0565b610db5565b9050919050565b6000610fd782610faa565b9050919050565b6000610fe982610fcc565b9050919050565b610ff981610fde565b82525050565b60006020820190506110146000830184610ff0565b92915050565b6000806040838503121561103157611030610dab565b5b600061103f85828601610dfe565b925050602061105085828601610dfe565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61109c82610d35565b810181811067ffffffffffffffff821117156110bb576110ba611064565b5b80604052505050565b60006110ce610da1565b90506110da8282611093565b919050565b600067ffffffffffffffff8211156110fa576110f9611064565b5b61110382610d35565b9050602081019050919050565b600061112361111e846110df565b6110c4565b90508281526020810184848401111561113f5761113e61105f565b5b61114a848285610d02565b509392505050565b600082601f8301126111675761116661105a565b5b8151611177848260208601611110565b91505092915050565b60006020828403121561119657611195610dab565b5b600082015167ffffffffffffffff8111156111b4576111b3610db0565b5b6111c084828501611152565b91505092915050565b6111d281610dd5565b82525050565b60006040820190506111ed60008301856111c9565b6111fa6020830184610ebf565b9392505050565b61120a81610e89565b811461121557600080fd5b50565b60008151905061122781611201565b92915050565b60006020828403121561124357611242610dab565b5b600061125184828501611218565b91505092915050565b60008151905061126981610e1d565b92915050565b60006020828403121561128557611284610dab565b5b60006112938482850161125a565b91505092915050565b60006060820190506112b160008301866111c9565b6112be60208301856111c9565b6112cb6040830184610ebf565b949350505050565b6112dc81610f3c565b81146112e757600080fd5b50565b6000815190506112f9816112d3565b92915050565b60006020828403121561131557611314610dab565b5b6000611323848285016112ea565b91505092915050565b600060208201905061134160008301846111c9565b92915050565b600081519050919050565b600081905092915050565b600061136882611347565b6113728185611352565b9350611382818560208601610d02565b80840191505092915050565b600061139a828461135d565b915081905092915050565b60006040820190506113ba60008301856111c9565b6113c760208301846111c9565b939250505056fea26469706673582212208e12a55e1169919056ad784c23047c1146f43d73fc99312a442666202ba7296164736f6c634300080a0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E9E86 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA887C981 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x354 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x785E9E86 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x272 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1CD JUMPI PUSH2 0xCD JUMP JUMPDEST CALLDATASIZE PUSH2 0xCD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE7 PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x42C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x15C SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x187 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x56C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x199 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B7 PUSH2 0x618 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C4 SWAP2 SWAP1 PUSH2 0xF58 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EF SWAP2 SWAP1 PUSH2 0xF73 JUMP JUMPDEST PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x201 SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21F PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22C SWAP2 SWAP1 PUSH2 0xFFF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x257 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x287 PUSH2 0x8A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x294 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2BF SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x301 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2FC SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x30E SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x339 SWAP2 SWAP1 PUSH2 0x101A JUMP JUMPDEST PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x376 SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x388 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48A SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4CD SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x567 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5CC SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x60F SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6AA SWAP2 SWAP1 PUSH2 0x12FF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x70B SWAP2 SWAP1 PUSH2 0x132C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x728 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74C SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x7CA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x854 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x88F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x894 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x912 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x93B SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x991 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xA1B SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xA56 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAC9 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0C SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB72 SWAP3 SWAP2 SWAP1 PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBB3 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC0C SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xC96 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD20 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD05 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD2F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD51 DUP3 PUSH2 0xCE6 JUMP JUMPDEST PUSH2 0xD5B DUP2 DUP6 PUSH2 0xCF1 JUMP JUMPDEST SWAP4 POP PUSH2 0xD6B DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST PUSH2 0xD74 DUP2 PUSH2 0xD35 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xD99 DUP2 DUP5 PUSH2 0xD46 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE0 DUP3 PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDF0 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP2 EQ PUSH2 0xDFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE0D DUP2 PUSH2 0xDE7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE26 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP2 EQ PUSH2 0xE31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE43 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE60 JUMPI PUSH2 0xE5F PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE6E DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE7F DUP6 DUP3 DUP7 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE9E DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEB9 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEC8 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEE3 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF02 JUMPI PUSH2 0xF01 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF10 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF21 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xF32 DUP7 DUP3 DUP8 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF52 DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xF6D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF49 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF89 JUMPI PUSH2 0xF88 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF97 DUP5 DUP3 DUP6 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFC5 PUSH2 0xFC0 PUSH2 0xFBB DUP5 PUSH2 0xDB5 JUMP JUMPDEST PUSH2 0xFA0 JUMP JUMPDEST PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFD7 DUP3 PUSH2 0xFAA JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFE9 DUP3 PUSH2 0xFCC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xFF9 DUP2 PUSH2 0xFDE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1014 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFF0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1031 JUMPI PUSH2 0x1030 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x103F DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1050 DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x109C DUP3 PUSH2 0xD35 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x10BB JUMPI PUSH2 0x10BA PUSH2 0x1064 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10CE PUSH2 0xDA1 JUMP JUMPDEST SWAP1 POP PUSH2 0x10DA DUP3 DUP3 PUSH2 0x1093 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x10FA JUMPI PUSH2 0x10F9 PUSH2 0x1064 JUMP JUMPDEST JUMPDEST PUSH2 0x1103 DUP3 PUSH2 0xD35 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1123 PUSH2 0x111E DUP5 PUSH2 0x10DF JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x113F JUMPI PUSH2 0x113E PUSH2 0x105F JUMP JUMPDEST JUMPDEST PUSH2 0x114A DUP5 DUP3 DUP6 PUSH2 0xD02 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1167 JUMPI PUSH2 0x1166 PUSH2 0x105A JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1177 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1110 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1196 JUMPI PUSH2 0x1195 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B4 JUMPI PUSH2 0x11B3 PUSH2 0xDB0 JUMP JUMPDEST JUMPDEST PUSH2 0x11C0 DUP5 DUP3 DUP6 ADD PUSH2 0x1152 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x11D2 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x11ED PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x11FA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x120A DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP2 EQ PUSH2 0x1215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1227 DUP2 PUSH2 0x1201 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1243 JUMPI PUSH2 0x1242 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1251 DUP5 DUP3 DUP6 ADD PUSH2 0x1218 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1269 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1285 JUMPI PUSH2 0x1284 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1293 DUP5 DUP3 DUP6 ADD PUSH2 0x125A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x12B1 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12BE PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12CB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x12DC DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP2 EQ PUSH2 0x12E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x12F9 DUP2 PUSH2 0x12D3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1315 JUMPI PUSH2 0x1314 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1323 DUP5 DUP3 DUP6 ADD PUSH2 0x12EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1341 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1368 DUP3 PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x1372 DUP2 DUP6 PUSH2 0x1352 JUMP JUMPDEST SWAP4 POP PUSH2 0x1382 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139A DUP3 DUP5 PUSH2 0x135D JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x13BA PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x13C7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 SLT 0xA5 0x5E GT PUSH10 0x919056AD784C23047C11 CHAINID DELEGATECALL RETURNDATASIZE PUSH20 0xFC99312A442666202BA7296164736F6C63430008 EXP STOP CALLER ", - "sourceMap": "3962:3269:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4321:195;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6135:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4976:202;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6606:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4767:195;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5204:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4063:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6864:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4542:199;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5833:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5664:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5442:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6296:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4321:195;4369:13;4489:5;;;;;;;;;;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4482:19;;4321:195;:::o;6135:147::-;6211:4;6238:5;;;;;;;;;;;:13;;;6252:7;6261:5;6238:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6231:36;;6135:147;;;;:::o;4976:202::-;5031:7;5144:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5137:26;;4976:202;:::o;6606:232::-;6757:4;6788:5;;;;;;;;;;;:18;;;6807:4;6813:2;6817:5;6788:35;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6781:42;;6606:232;;;;;:::o;4767:195::-;4819:5;4931;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4924:23;;4767:195;:::o;5204:212::-;5268:7;5381:5;;;;;;;;;;;:15;;;5397:3;5381:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5374:27;;5204:212;;;:::o;4063:72::-;;;;;;;;;;;;:::o;6864:361::-;7003:4;7024:11;7037:17;7058:12;;;;;;;;;;;:25;;7166:4;7172:2;7176:5;7101:81;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7058:125;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7023:160;;;;7204:6;7197:13;;;;6864:361;;;;;:::o;4542:199::-;4592:13;4712:5;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4705:21;;4542:199;:::o;5833:276::-;5905:4;5926:11;5939:17;5960:12;;;;;;;;;;;:25;;6056:2;6060:5;6003:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5960:107;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5925:142;;;;6088:6;6081:13;;;;5833:276;;;;:::o;5664:143::-;5736:4;5767:5;;;;;;;;;;;:14;;;5782:2;5786:5;5767:25;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5760:32;;5664:143;;;;:::o;5442:208::-;5571:7;5604:5;;;;;;;;;;;:15;;;5620:5;5627:7;5604:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5597:38;;5442:208;;;;:::o;6296:284::-;6372:4;6393:11;6406:17;6427:12;;;;;;;;;;;:25;;6522:7;6531:5;6470:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6427:111;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6392:146;;;;6559:6;6552:13;;;;6296:284;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:60::-;5264:3;5285:5;5278:12;;5236:60;;;:::o;5302:142::-;5352:9;5385:53;5403:34;5412:24;5430:5;5412:24;:::i;:::-;5403:34;:::i;:::-;5385:53;:::i;:::-;5372:66;;5302:142;;;:::o;5450:126::-;5500:9;5533:37;5564:5;5533:37;:::i;:::-;5520:50;;5450:126;;;:::o;5582:139::-;5645:9;5678:37;5709:5;5678:37;:::i;:::-;5665:50;;5582:139;;;:::o;5727:157::-;5827:50;5871:5;5827:50;:::i;:::-;5822:3;5815:63;5727:157;;:::o;5890:248::-;5996:4;6034:2;6023:9;6019:18;6011:26;;6047:84;6128:1;6117:9;6113:17;6104:6;6047:84;:::i;:::-;5890:248;;;;:::o;6144:474::-;6212:6;6220;6269:2;6257:9;6248:7;6244:23;6240:32;6237:119;;;6275:79;;:::i;:::-;6237:119;6395:1;6420:53;6465:7;6456:6;6445:9;6441:22;6420:53;:::i;:::-;6410:63;;6366:117;6522:2;6548:53;6593:7;6584:6;6573:9;6569:22;6548:53;:::i;:::-;6538:63;;6493:118;6144:474;;;;;:::o;6624:117::-;6733:1;6730;6723:12;6747:117;6856:1;6853;6846:12;6870:180;6918:77;6915:1;6908:88;7015:4;7012:1;7005:15;7039:4;7036:1;7029:15;7056:281;7139:27;7161:4;7139:27;:::i;:::-;7131:6;7127:40;7269:6;7257:10;7254:22;7233:18;7221:10;7218:34;7215:62;7212:88;;;7280:18;;:::i;:::-;7212:88;7320:10;7316:2;7309:22;7099:238;7056:281;;:::o;7343:129::-;7377:6;7404:20;;:::i;:::-;7394:30;;7433:33;7461:4;7453:6;7433:33;:::i;:::-;7343:129;;;:::o;7478:308::-;7540:4;7630:18;7622:6;7619:30;7616:56;;;7652:18;;:::i;:::-;7616:56;7690:29;7712:6;7690:29;:::i;:::-;7682:37;;7774:4;7768;7764:15;7756:23;;7478:308;;;:::o;7792:421::-;7881:5;7906:66;7922:49;7964:6;7922:49;:::i;:::-;7906:66;:::i;:::-;7897:75;;7995:6;7988:5;7981:21;8033:4;8026:5;8022:16;8071:3;8062:6;8057:3;8053:16;8050:25;8047:112;;;8078:79;;:::i;:::-;8047:112;8168:39;8200:6;8195:3;8190;8168:39;:::i;:::-;7887:326;7792:421;;;;;:::o;8233:355::-;8300:5;8349:3;8342:4;8334:6;8330:17;8326:27;8316:122;;8357:79;;:::i;:::-;8316:122;8467:6;8461:13;8492:90;8578:3;8570:6;8563:4;8555:6;8551:17;8492:90;:::i;:::-;8483:99;;8306:282;8233:355;;;;:::o;8594:524::-;8674:6;8723:2;8711:9;8702:7;8698:23;8694:32;8691:119;;;8729:79;;:::i;:::-;8691:119;8870:1;8859:9;8855:17;8849:24;8900:18;8892:6;8889:30;8886:117;;;8922:79;;:::i;:::-;8886:117;9027:74;9093:7;9084:6;9073:9;9069:22;9027:74;:::i;:::-;9017:84;;8820:291;8594:524;;;;:::o;9124:118::-;9211:24;9229:5;9211:24;:::i;:::-;9206:3;9199:37;9124:118;;:::o;9248:332::-;9369:4;9407:2;9396:9;9392:18;9384:26;;9420:71;9488:1;9477:9;9473:17;9464:6;9420:71;:::i;:::-;9501:72;9569:2;9558:9;9554:18;9545:6;9501:72;:::i;:::-;9248:332;;;;;:::o;9586:116::-;9656:21;9671:5;9656:21;:::i;:::-;9649:5;9646:32;9636:60;;9692:1;9689;9682:12;9636:60;9586:116;:::o;9708:137::-;9762:5;9793:6;9787:13;9778:22;;9809:30;9833:5;9809:30;:::i;:::-;9708:137;;;;:::o;9851:345::-;9918:6;9967:2;9955:9;9946:7;9942:23;9938:32;9935:119;;;9973:79;;:::i;:::-;9935:119;10093:1;10118:61;10171:7;10162:6;10151:9;10147:22;10118:61;:::i;:::-;10108:71;;10064:125;9851:345;;;;:::o;10202:143::-;10259:5;10290:6;10284:13;10275:22;;10306:33;10333:5;10306:33;:::i;:::-;10202:143;;;;:::o;10351:351::-;10421:6;10470:2;10458:9;10449:7;10445:23;10441:32;10438:119;;;10476:79;;:::i;:::-;10438:119;10596:1;10621:64;10677:7;10668:6;10657:9;10653:22;10621:64;:::i;:::-;10611:74;;10567:128;10351:351;;;;:::o;10708:442::-;10857:4;10895:2;10884:9;10880:18;10872:26;;10908:71;10976:1;10965:9;10961:17;10952:6;10908:71;:::i;:::-;10989:72;11057:2;11046:9;11042:18;11033:6;10989:72;:::i;:::-;11071;11139:2;11128:9;11124:18;11115:6;11071:72;:::i;:::-;10708:442;;;;;;:::o;11156:118::-;11227:22;11243:5;11227:22;:::i;:::-;11220:5;11217:33;11207:61;;11264:1;11261;11254:12;11207:61;11156:118;:::o;11280:139::-;11335:5;11366:6;11360:13;11351:22;;11382:31;11407:5;11382:31;:::i;:::-;11280:139;;;;:::o;11425:347::-;11493:6;11542:2;11530:9;11521:7;11517:23;11513:32;11510:119;;;11548:79;;:::i;:::-;11510:119;11668:1;11693:62;11747:7;11738:6;11727:9;11723:22;11693:62;:::i;:::-;11683:72;;11639:126;11425:347;;;;:::o;11778:222::-;11871:4;11909:2;11898:9;11894:18;11886:26;;11922:71;11990:1;11979:9;11975:17;11966:6;11922:71;:::i;:::-;11778:222;;;;:::o;12006:98::-;12057:6;12091:5;12085:12;12075:22;;12006:98;;;:::o;12110:147::-;12211:11;12248:3;12233:18;;12110:147;;;;:::o;12263:373::-;12367:3;12395:38;12427:5;12395:38;:::i;:::-;12449:88;12530:6;12525:3;12449:88;:::i;:::-;12442:95;;12546:52;12591:6;12586:3;12579:4;12572:5;12568:16;12546:52;:::i;:::-;12623:6;12618:3;12614:16;12607:23;;12371:265;12263:373;;;;:::o;12642:271::-;12772:3;12794:93;12883:3;12874:6;12794:93;:::i;:::-;12787:100;;12904:3;12897:10;;12642:271;;;;:::o;12919:332::-;13040:4;13078:2;13067:9;13063:18;13055:26;;13091:71;13159:1;13148:9;13144:17;13135:6;13091:71;:::i;:::-;13172:72;13240:2;13229:9;13225:18;13216:6;13172:72;:::i;:::-;12919:332;;;;;:::o" + "object": "6080604052600436106100c65760003560e01c8063785e9e861161007f578063a887c98111610059578063a887c9811461029d578063a9059cbb146102da578063dd62ed3e14610317578063f5bfbd8a14610354576100cd565b8063785e9e861461020a5780637eea12051461023557806395d89b4114610272576100cd565b806306fdde03146100d2578063095ea7b3146100fd57806318160ddd1461013a57806323b872dd14610165578063313ce567146101a257806370a08231146101cd576100cd565b366100cd57005b600080fd5b3480156100de57600080fd5b506100e7610391565b6040516100f49190610d7f565b60405180910390f35b34801561010957600080fd5b50610124600480360381019061011f9190610e49565b61042c565b6040516101319190610ea4565b60405180910390f35b34801561014657600080fd5b5061014f6104d5565b60405161015c9190610ece565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190610ee9565b61056c565b6040516101999190610ea4565b60405180910390f35b3480156101ae57600080fd5b506101b7610618565b6040516101c49190610f58565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef9190610f73565b6106af565b6040516102019190610ece565b60405180910390f35b34801561021657600080fd5b5061021f610753565b60405161022c9190610fff565b60405180910390f35b34801561024157600080fd5b5061025c60048036038101906102579190610ee9565b610777565b6040516102699190610ea4565b60405180910390f35b34801561027e57600080fd5b506102876108a5565b6040516102949190610d7f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190610e49565b610940565b6040516102d19190610ea4565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190610e49565b610a6b565b60405161030e9190610ea4565b60405180910390f35b34801561032357600080fd5b5061033e6004803603810190610339919061101a565b610b14565b60405161034b9190610ece565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190610e49565b610bbb565b6040516103889190610ea4565b60405180910390f35b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103fe573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104279190611180565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b815260040161048a9291906111d8565b6020604051808303816000875af11580156104a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cd919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610543573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610567919061126f565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016105cc9392919061129c565b6020604051808303816000875af11580156105eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060f919061122d565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106aa91906112ff565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161070b919061132c565b602060405180830381865afa158015610728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074c919061126f565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168686866040516024016107ca9392919061129c565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610854919061138e565b600060405180830381855af49150503d806000811461088f576040519150601f19603f3d011682016040523d82523d6000602084013e610894565b606091505b509150915081925050509392505050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610912573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061093b9190611180565b905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856040516024016109919291906111d8565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610a1b919061138e565b600060405180830381855af49150503d8060008114610a56576040519150601f19603f3d011682016040523d82523d6000602084013e610a5b565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610ac99291906111d8565b6020604051808303816000875af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c919061122d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b8152600401610b729291906113a5565b602060405180830381865afa158015610b8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb3919061126f565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401610c0c9291906111d8565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c96919061138e565b600060405180830381855af49150503d8060008114610cd1576040519150601f19603f3d011682016040523d82523d6000602084013e610cd6565b606091505b5091509150819250505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d20578082015181840152602081019050610d05565b83811115610d2f576000848401525b50505050565b6000601f19601f8301169050919050565b6000610d5182610ce6565b610d5b8185610cf1565b9350610d6b818560208601610d02565b610d7481610d35565b840191505092915050565b60006020820190508181036000830152610d998184610d46565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610de082610db5565b9050919050565b610df081610dd5565b8114610dfb57600080fd5b50565b600081359050610e0d81610de7565b92915050565b6000819050919050565b610e2681610e13565b8114610e3157600080fd5b50565b600081359050610e4381610e1d565b92915050565b60008060408385031215610e6057610e5f610dab565b5b6000610e6e85828601610dfe565b9250506020610e7f85828601610e34565b9150509250929050565b60008115159050919050565b610e9e81610e89565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e13565b82525050565b6000602082019050610ee36000830184610ebf565b92915050565b600080600060608486031215610f0257610f01610dab565b5b6000610f1086828701610dfe565b9350506020610f2186828701610dfe565b9250506040610f3286828701610e34565b9150509250925092565b600060ff82169050919050565b610f5281610f3c565b82525050565b6000602082019050610f6d6000830184610f49565b92915050565b600060208284031215610f8957610f88610dab565b5b6000610f9784828501610dfe565b91505092915050565b6000819050919050565b6000610fc5610fc0610fbb84610db5565b610fa0565b610db5565b9050919050565b6000610fd782610faa565b9050919050565b6000610fe982610fcc565b9050919050565b610ff981610fde565b82525050565b60006020820190506110146000830184610ff0565b92915050565b6000806040838503121561103157611030610dab565b5b600061103f85828601610dfe565b925050602061105085828601610dfe565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61109c82610d35565b810181811067ffffffffffffffff821117156110bb576110ba611064565b5b80604052505050565b60006110ce610da1565b90506110da8282611093565b919050565b600067ffffffffffffffff8211156110fa576110f9611064565b5b61110382610d35565b9050602081019050919050565b600061112361111e846110df565b6110c4565b90508281526020810184848401111561113f5761113e61105f565b5b61114a848285610d02565b509392505050565b600082601f8301126111675761116661105a565b5b8151611177848260208601611110565b91505092915050565b60006020828403121561119657611195610dab565b5b600082015167ffffffffffffffff8111156111b4576111b3610db0565b5b6111c084828501611152565b91505092915050565b6111d281610dd5565b82525050565b60006040820190506111ed60008301856111c9565b6111fa6020830184610ebf565b9392505050565b61120a81610e89565b811461121557600080fd5b50565b60008151905061122781611201565b92915050565b60006020828403121561124357611242610dab565b5b600061125184828501611218565b91505092915050565b60008151905061126981610e1d565b92915050565b60006020828403121561128557611284610dab565b5b60006112938482850161125a565b91505092915050565b60006060820190506112b160008301866111c9565b6112be60208301856111c9565b6112cb6040830184610ebf565b949350505050565b6112dc81610f3c565b81146112e757600080fd5b50565b6000815190506112f9816112d3565b92915050565b60006020828403121561131557611314610dab565b5b6000611323848285016112ea565b91505092915050565b600060208201905061134160008301846111c9565b92915050565b600081519050919050565b600081905092915050565b600061136882611347565b6113728185611352565b9350611382818560208601610d02565b80840191505092915050565b600061139a828461135d565b915081905092915050565b60006040820190506113ba60008301856111c9565b6113c760208301846111c9565b939250505056fea26469706673582212201292b7f8363b319cf5c8471a4dc98170aaf27859f613c38f53e839086a79c0f364736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC6 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x785E9E86 GT PUSH2 0x7F JUMPI DUP1 PUSH4 0xA887C981 GT PUSH2 0x59 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2DA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x317 JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x354 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x785E9E86 EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x235 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x272 JUMPI PUSH2 0xCD JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1CD JUMPI PUSH2 0xCD JUMP JUMPDEST CALLDATASIZE PUSH2 0xCD JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE7 PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x42C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x146 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x14F PUSH2 0x4D5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x15C SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x171 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x187 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x56C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x199 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B7 PUSH2 0x618 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C4 SWAP2 SWAP1 PUSH2 0xF58 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EF SWAP2 SWAP1 PUSH2 0xF73 JUMP JUMPDEST PUSH2 0x6AF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x201 SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x216 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21F PUSH2 0x753 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22C SWAP2 SWAP1 PUSH2 0xFFF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x241 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x257 SWAP2 SWAP1 PUSH2 0xEE9 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x269 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x27E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x287 PUSH2 0x8A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x294 SWAP2 SWAP1 PUSH2 0xD7F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2BF SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D1 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x301 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2FC SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xA6B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x30E SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x323 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x33E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x339 SWAP2 SWAP1 PUSH2 0x101A JUMP JUMPDEST PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x34B SWAP2 SWAP1 PUSH2 0xECE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x360 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x376 SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH2 0xBBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x388 SWAP2 SWAP1 PUSH2 0xEA4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3FE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x427 SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x48A SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x4CD SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x543 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x567 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5CC SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5EB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x60F SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x686 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6AA SWAP2 SWAP1 PUSH2 0x12FF JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x70B SWAP2 SWAP1 PUSH2 0x132C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x728 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x74C SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x7CA SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x854 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x88F JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x894 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x912 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x93B SWAP2 SWAP1 PUSH2 0x1180 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x991 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xA1B SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xA56 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xA5B JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAC9 SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xAE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB0C SWAP2 SWAP1 PUSH2 0x122D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB72 SWAP3 SWAP2 SWAP1 PUSH2 0x13A5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xB8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBB3 SWAP2 SWAP1 PUSH2 0x126F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xC0C SWAP3 SWAP2 SWAP1 PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xC96 SWAP2 SWAP1 PUSH2 0x138E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xCD6 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD20 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xD05 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD2F JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD51 DUP3 PUSH2 0xCE6 JUMP JUMPDEST PUSH2 0xD5B DUP2 DUP6 PUSH2 0xCF1 JUMP JUMPDEST SWAP4 POP PUSH2 0xD6B DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST PUSH2 0xD74 DUP2 PUSH2 0xD35 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xD99 DUP2 DUP5 PUSH2 0xD46 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDE0 DUP3 PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDF0 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP2 EQ PUSH2 0xDFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE0D DUP2 PUSH2 0xDE7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE26 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP2 EQ PUSH2 0xE31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE43 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xE60 JUMPI PUSH2 0xE5F PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE6E DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xE7F DUP6 DUP3 DUP7 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE9E DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEB9 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xEC8 DUP2 PUSH2 0xE13 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xEE3 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xF02 JUMPI PUSH2 0xF01 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF10 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF21 DUP7 DUP3 DUP8 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xF32 DUP7 DUP3 DUP8 ADD PUSH2 0xE34 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF52 DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xF6D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF49 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF89 JUMPI PUSH2 0xF88 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF97 DUP5 DUP3 DUP6 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFC5 PUSH2 0xFC0 PUSH2 0xFBB DUP5 PUSH2 0xDB5 JUMP JUMPDEST PUSH2 0xFA0 JUMP JUMPDEST PUSH2 0xDB5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFD7 DUP3 PUSH2 0xFAA JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFE9 DUP3 PUSH2 0xFCC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xFF9 DUP2 PUSH2 0xFDE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1014 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFF0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1031 JUMPI PUSH2 0x1030 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x103F DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1050 DUP6 DUP3 DUP7 ADD PUSH2 0xDFE JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x109C DUP3 PUSH2 0xD35 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x10BB JUMPI PUSH2 0x10BA PUSH2 0x1064 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10CE PUSH2 0xDA1 JUMP JUMPDEST SWAP1 POP PUSH2 0x10DA DUP3 DUP3 PUSH2 0x1093 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x10FA JUMPI PUSH2 0x10F9 PUSH2 0x1064 JUMP JUMPDEST JUMPDEST PUSH2 0x1103 DUP3 PUSH2 0xD35 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1123 PUSH2 0x111E DUP5 PUSH2 0x10DF JUMP JUMPDEST PUSH2 0x10C4 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x113F JUMPI PUSH2 0x113E PUSH2 0x105F JUMP JUMPDEST JUMPDEST PUSH2 0x114A DUP5 DUP3 DUP6 PUSH2 0xD02 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1167 JUMPI PUSH2 0x1166 PUSH2 0x105A JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1177 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1110 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1196 JUMPI PUSH2 0x1195 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x11B4 JUMPI PUSH2 0x11B3 PUSH2 0xDB0 JUMP JUMPDEST JUMPDEST PUSH2 0x11C0 DUP5 DUP3 DUP6 ADD PUSH2 0x1152 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x11D2 DUP2 PUSH2 0xDD5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x11ED PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x11FA PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x120A DUP2 PUSH2 0xE89 JUMP JUMPDEST DUP2 EQ PUSH2 0x1215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1227 DUP2 PUSH2 0x1201 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1243 JUMPI PUSH2 0x1242 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1251 DUP5 DUP3 DUP6 ADD PUSH2 0x1218 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1269 DUP2 PUSH2 0xE1D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1285 JUMPI PUSH2 0x1284 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1293 DUP5 DUP3 DUP6 ADD PUSH2 0x125A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x12B1 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12BE PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x12CB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xEBF JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0x12DC DUP2 PUSH2 0xF3C JUMP JUMPDEST DUP2 EQ PUSH2 0x12E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x12F9 DUP2 PUSH2 0x12D3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1315 JUMPI PUSH2 0x1314 PUSH2 0xDAB JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1323 DUP5 DUP3 DUP6 ADD PUSH2 0x12EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1341 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1368 DUP3 PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x1372 DUP2 DUP6 PUSH2 0x1352 JUMP JUMPDEST SWAP4 POP PUSH2 0x1382 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xD02 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139A DUP3 DUP5 PUSH2 0x135D JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x13BA PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x13C7 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x11C9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SLT SWAP3 0xB7 0xF8 CALLDATASIZE EXTCODESIZE BALANCE SWAP13 CREATE2 0xC8 SELFBALANCE BYTE 0x4D 0xC9 DUP2 PUSH17 0xAAF27859F613C38F53E839086A79C0F364 PUSH20 0x6F6C634300080B00330000000000000000000000 ", + "sourceMap": "122:2944:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;440:171;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1996:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;975:179;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2464:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;798:171;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1160:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;214:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2655:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;617:175;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1705:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1544:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1355:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2165:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;440:171;488:13;592:5;;;;;;;;;;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;585:19;;440:171;:::o;1996:163::-;2096:4;2123:5;;;;;;;;;;;:13;;;2137:7;2146:5;2123:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2116:36;;1996:163;;;;:::o;975:179::-;1030:7;1128:5;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1121:26;;975:179;:::o;2464:185::-;2584:4;2607:5;;;;;;;;;;;:18;;;2626:4;2632:2;2636:5;2607:35;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2600:42;;2464:185;;;;;:::o;798:171::-;850:5;946;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;939:23;;798:171;:::o;1160:189::-;1224:7;1322:5;;;;;;;;;;;:15;;;1338:3;1322:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1315:27;;1160:189;;;:::o;214:72::-;;;;;;;;;;;;:::o;2655:409::-;2775:4;2792:11;2805:17;2826:12;;;;;;;;;;;:25;;2963:4;2985:2;3005:5;2865:159;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2826:208;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:243;;;;3051:6;3044:13;;;;2655:409;;;;;:::o;617:175::-;667:13;771:5;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;764:21;;617:175;:::o;1705:285::-;1793:4;1814:11;1827:17;1848:12;;;;;;;;;;;:25;;1940:2;1944:5;1887:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1848:112;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1813:147;;;;1977:6;1970:13;;;;1705:285;;;;:::o;1544:155::-;1640:4;1667:5;;;;;;;;;;;:14;;;1682:2;1686:5;1667:25;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1660:32;;1544:155;;;;:::o;1355:183::-;1470:7;1500:5;;;;;;;;;;;:15;;;1516:5;1523:7;1500:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1493:38;;1355:183;;;;:::o;2165:293::-;2257:4;2278:11;2291:17;2312:12;;;;;;;;;;;:25;;2403:7;2412:5;2351:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2312:116;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2277:151;;;;2445:6;2438:13;;;;2165:293;;;;:::o;7:99:2:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:60::-;5264:3;5285:5;5278:12;;5236:60;;;:::o;5302:142::-;5352:9;5385:53;5403:34;5412:24;5430:5;5412:24;:::i;:::-;5403:34;:::i;:::-;5385:53;:::i;:::-;5372:66;;5302:142;;;:::o;5450:126::-;5500:9;5533:37;5564:5;5533:37;:::i;:::-;5520:50;;5450:126;;;:::o;5582:140::-;5646:9;5679:37;5710:5;5679:37;:::i;:::-;5666:50;;5582:140;;;:::o;5728:159::-;5829:51;5874:5;5829:51;:::i;:::-;5824:3;5817:64;5728:159;;:::o;5893:250::-;6000:4;6038:2;6027:9;6023:18;6015:26;;6051:85;6133:1;6122:9;6118:17;6109:6;6051:85;:::i;:::-;5893:250;;;;:::o;6149:474::-;6217:6;6225;6274:2;6262:9;6253:7;6249:23;6245:32;6242:119;;;6280:79;;:::i;:::-;6242:119;6400:1;6425:53;6470:7;6461:6;6450:9;6446:22;6425:53;:::i;:::-;6415:63;;6371:117;6527:2;6553:53;6598:7;6589:6;6578:9;6574:22;6553:53;:::i;:::-;6543:63;;6498:118;6149:474;;;;;:::o;6629:117::-;6738:1;6735;6728:12;6752:117;6861:1;6858;6851:12;6875:180;6923:77;6920:1;6913:88;7020:4;7017:1;7010:15;7044:4;7041:1;7034:15;7061:281;7144:27;7166:4;7144:27;:::i;:::-;7136:6;7132:40;7274:6;7262:10;7259:22;7238:18;7226:10;7223:34;7220:62;7217:88;;;7285:18;;:::i;:::-;7217:88;7325:10;7321:2;7314:22;7104:238;7061:281;;:::o;7348:129::-;7382:6;7409:20;;:::i;:::-;7399:30;;7438:33;7466:4;7458:6;7438:33;:::i;:::-;7348:129;;;:::o;7483:308::-;7545:4;7635:18;7627:6;7624:30;7621:56;;;7657:18;;:::i;:::-;7621:56;7695:29;7717:6;7695:29;:::i;:::-;7687:37;;7779:4;7773;7769:15;7761:23;;7483:308;;;:::o;7797:421::-;7886:5;7911:66;7927:49;7969:6;7927:49;:::i;:::-;7911:66;:::i;:::-;7902:75;;8000:6;7993:5;7986:21;8038:4;8031:5;8027:16;8076:3;8067:6;8062:3;8058:16;8055:25;8052:112;;;8083:79;;:::i;:::-;8052:112;8173:39;8205:6;8200:3;8195;8173:39;:::i;:::-;7892:326;7797:421;;;;;:::o;8238:355::-;8305:5;8354:3;8347:4;8339:6;8335:17;8331:27;8321:122;;8362:79;;:::i;:::-;8321:122;8472:6;8466:13;8497:90;8583:3;8575:6;8568:4;8560:6;8556:17;8497:90;:::i;:::-;8488:99;;8311:282;8238:355;;;;:::o;8599:524::-;8679:6;8728:2;8716:9;8707:7;8703:23;8699:32;8696:119;;;8734:79;;:::i;:::-;8696:119;8875:1;8864:9;8860:17;8854:24;8905:18;8897:6;8894:30;8891:117;;;8927:79;;:::i;:::-;8891:117;9032:74;9098:7;9089:6;9078:9;9074:22;9032:74;:::i;:::-;9022:84;;8825:291;8599:524;;;;:::o;9129:118::-;9216:24;9234:5;9216:24;:::i;:::-;9211:3;9204:37;9129:118;;:::o;9253:332::-;9374:4;9412:2;9401:9;9397:18;9389:26;;9425:71;9493:1;9482:9;9478:17;9469:6;9425:71;:::i;:::-;9506:72;9574:2;9563:9;9559:18;9550:6;9506:72;:::i;:::-;9253:332;;;;;:::o;9591:116::-;9661:21;9676:5;9661:21;:::i;:::-;9654:5;9651:32;9641:60;;9697:1;9694;9687:12;9641:60;9591:116;:::o;9713:137::-;9767:5;9798:6;9792:13;9783:22;;9814:30;9838:5;9814:30;:::i;:::-;9713:137;;;;:::o;9856:345::-;9923:6;9972:2;9960:9;9951:7;9947:23;9943:32;9940:119;;;9978:79;;:::i;:::-;9940:119;10098:1;10123:61;10176:7;10167:6;10156:9;10152:22;10123:61;:::i;:::-;10113:71;;10069:125;9856:345;;;;:::o;10207:143::-;10264:5;10295:6;10289:13;10280:22;;10311:33;10338:5;10311:33;:::i;:::-;10207:143;;;;:::o;10356:351::-;10426:6;10475:2;10463:9;10454:7;10450:23;10446:32;10443:119;;;10481:79;;:::i;:::-;10443:119;10601:1;10626:64;10682:7;10673:6;10662:9;10658:22;10626:64;:::i;:::-;10616:74;;10572:128;10356:351;;;;:::o;10713:442::-;10862:4;10900:2;10889:9;10885:18;10877:26;;10913:71;10981:1;10970:9;10966:17;10957:6;10913:71;:::i;:::-;10994:72;11062:2;11051:9;11047:18;11038:6;10994:72;:::i;:::-;11076;11144:2;11133:9;11129:18;11120:6;11076:72;:::i;:::-;10713:442;;;;;;:::o;11161:118::-;11232:22;11248:5;11232:22;:::i;:::-;11225:5;11222:33;11212:61;;11269:1;11266;11259:12;11212:61;11161:118;:::o;11285:139::-;11340:5;11371:6;11365:13;11356:22;;11387:31;11412:5;11387:31;:::i;:::-;11285:139;;;;:::o;11430:347::-;11498:6;11547:2;11535:9;11526:7;11522:23;11518:32;11515:119;;;11553:79;;:::i;:::-;11515:119;11673:1;11698:62;11752:7;11743:6;11732:9;11728:22;11698:62;:::i;:::-;11688:72;;11644:126;11430:347;;;;:::o;11783:222::-;11876:4;11914:2;11903:9;11899:18;11891:26;;11927:71;11995:1;11984:9;11980:17;11971:6;11927:71;:::i;:::-;11783:222;;;;:::o;12011:98::-;12062:6;12096:5;12090:12;12080:22;;12011:98;;;:::o;12115:147::-;12216:11;12253:3;12238:18;;12115:147;;;;:::o;12268:373::-;12372:3;12400:38;12432:5;12400:38;:::i;:::-;12454:88;12535:6;12530:3;12454:88;:::i;:::-;12447:95;;12551:52;12596:6;12591:3;12584:4;12577:5;12573:16;12551:52;:::i;:::-;12628:6;12623:3;12619:16;12612:23;;12376:265;12268:373;;;;:::o;12647:271::-;12777:3;12799:93;12888:3;12879:6;12799:93;:::i;:::-;12792:100;;12909:3;12902:10;;12647:271;;;;:::o;12924:332::-;13045:4;13083:2;13072:9;13068:18;13060:26;;13096:71;13164:1;13153:9;13149:17;13140:6;13096:71;:::i;:::-;13177:72;13245:2;13234:9;13230:18;13221:6;13177:72;:::i;:::-;12924:332;;;;;:::o" }, "gasEstimates": { "creation": { @@ -7485,6399 +7485,6399 @@ "legacyAssembly": { ".code": [ { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 3962, "end": 7231, "name": "MSTORE", "source": 0 }, + { "begin": 122, "end": 3066, "name": "MSTORE", "source": 0 }, { - "begin": 4092, - "end": 4134, + "begin": 243, + "end": 285, "name": "PUSH", "source": 0, "value": "FFFFFFFF1FCACBD218EDC0EBA20FC2308C778080" }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4063, "end": 4135, "name": "DUP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP1", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4063, "end": 4135, "name": "EXP", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "DUP2", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SLOAD", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "DUP2", "source": 0 }, + { "begin": 214, "end": 286, "name": "EXP", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP2", "source": 0 }, + { "begin": 214, "end": 286, "name": "SLOAD", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP2", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4063, "end": 4135, "name": "MUL", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "NOT", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "AND", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SWAP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "DUP4", "source": 0 }, + { "begin": 214, "end": 286, "name": "MUL", "source": 0 }, + { "begin": 214, "end": 286, "name": "NOT", "source": 0 }, + { "begin": 214, "end": 286, "name": "AND", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP4", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4063, "end": 4135, "name": "AND", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "MUL", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "OR", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SWAP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SSTORE", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "POP", "source": 0 }, + { "begin": 214, "end": 286, "name": "AND", "source": 0 }, + { "begin": 214, "end": 286, "name": "MUL", "source": 0 }, + { "begin": 214, "end": 286, "name": "OR", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "SSTORE", "source": 0 }, + { "begin": 214, "end": 286, "name": "POP", "source": 0 }, { - "begin": 4168, - "end": 4210, + "begin": 315, + "end": 357, "name": "PUSH", "source": 0, "value": "FFFFFFFF1FCACBD218EDC0EBA20FC2308C778080" }, { - "begin": 4145, - "end": 4210, + "begin": 292, + "end": 357, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 4145, - "end": 4210, + "begin": 292, + "end": 357, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 4145, - "end": 4210, + "begin": 292, + "end": 357, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4145, "end": 4210, "name": "EXP", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "DUP2", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "SLOAD", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "DUP2", "source": 0 }, + { "begin": 292, "end": 357, "name": "EXP", "source": 0 }, + { "begin": 292, "end": 357, "name": "DUP2", "source": 0 }, + { "begin": 292, "end": 357, "name": "SLOAD", "source": 0 }, + { "begin": 292, "end": 357, "name": "DUP2", "source": 0 }, { - "begin": 4145, - "end": 4210, + "begin": 292, + "end": 357, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4145, "end": 4210, "name": "MUL", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "NOT", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "AND", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "SWAP1", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "DUP4", "source": 0 }, + { "begin": 292, "end": 357, "name": "MUL", "source": 0 }, + { "begin": 292, "end": 357, "name": "NOT", "source": 0 }, + { "begin": 292, "end": 357, "name": "AND", "source": 0 }, + { "begin": 292, "end": 357, "name": "SWAP1", "source": 0 }, + { "begin": 292, "end": 357, "name": "DUP4", "source": 0 }, { - "begin": 4145, - "end": 4210, + "begin": 292, + "end": 357, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4145, "end": 4210, "name": "AND", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "MUL", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "OR", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "SWAP1", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "SSTORE", "source": 0 }, - { "begin": 4145, "end": 4210, "name": "POP", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "CALLVALUE", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "ISZERO", "source": 0 }, + { "begin": 292, "end": 357, "name": "AND", "source": 0 }, + { "begin": 292, "end": 357, "name": "MUL", "source": 0 }, + { "begin": 292, "end": 357, "name": "OR", "source": 0 }, + { "begin": 292, "end": 357, "name": "SWAP1", "source": 0 }, + { "begin": 292, "end": 357, "name": "SSTORE", "source": 0 }, + { "begin": 292, "end": 357, "name": "POP", "source": 0 }, + { "begin": 122, "end": 3066, "name": "CALLVALUE", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "ISZERO", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "REVERT", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "REVERT", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "tag", "source": 0, "value": "1" }, - { "begin": 3962, "end": 7231, "name": "JUMPDEST", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "POP", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPDEST", "source": 0 }, + { "begin": 122, "end": 3066, "name": "POP", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 3962, "end": 7231, "name": "CODECOPY", "source": 0 }, + { "begin": 122, "end": 3066, "name": "CODECOPY", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 3962, "end": 7231, "name": "RETURN", "source": 0 } + { "begin": 122, "end": 3066, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a26469706673582212208e12a55e1169919056ad784c23047c1146f43d73fc99312a442666202ba7296164736f6c634300080a0033", + ".auxdata": "a26469706673582212201292b7f8363b319cf5c8471a4dc98170aaf27859f613c38f53e839086a79c0f364736f6c634300080b0033", ".code": [ { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 3962, "end": 7231, "name": "MSTORE", "source": 0 }, + { "begin": 122, "end": 3066, "name": "MSTORE", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "4" }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "LT", "source": 0 }, + { "begin": 122, "end": 3066, "name": "LT", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "CALLDATALOAD", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 3962, "end": 7231, "name": "SHR", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "SHR", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "785E9E86" }, - { "begin": 3962, "end": 7231, "name": "GT", "source": 0 }, + { "begin": 122, "end": 3066, "name": "GT", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "16" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "A887C981" }, - { "begin": 3962, "end": 7231, "name": "GT", "source": 0 }, + { "begin": 122, "end": 3066, "name": "GT", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "17" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "A887C981" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "12" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "A9059CBB" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "13" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "DD62ED3E" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "14" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "F5BFBD8A" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "15" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 3962, "end": 7231, "name": "JUMP", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMP", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "tag", "source": 0, "value": "17" }, - { "begin": 3962, "end": 7231, "name": "JUMPDEST", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPDEST", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "785E9E86" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "9" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "7EEA1205" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "10" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "95D89B41" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "11" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 3962, "end": 7231, "name": "JUMP", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMP", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "tag", "source": 0, "value": "16" }, - { "begin": 3962, "end": 7231, "name": "JUMPDEST", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPDEST", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "6FDDE03" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "3" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "95EA7B3" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "4" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "18160DDD" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "5" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "23B872DD" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "6" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "313CE567" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "7" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "70A08231" }, - { "begin": 3962, "end": 7231, "name": "EQ", "source": 0 }, + { "begin": 122, "end": 3066, "name": "EQ", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "8" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 3962, "end": 7231, "name": "JUMP", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMP", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "tag", "source": 0, "value": "1" }, - { "begin": 3962, "end": 7231, "name": "JUMPDEST", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPDEST", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "CALLDATASIZE", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 3962, "end": 7231, "name": "JUMPI", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "STOP", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPI", "source": 0 }, + { "begin": 122, "end": 3066, "name": "STOP", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "tag", "source": 0, "value": "2" }, - { "begin": 3962, "end": 7231, "name": "JUMPDEST", "source": 0 }, + { "begin": 122, "end": 3066, "name": "JUMPDEST", "source": 0 }, { - "begin": 3962, - "end": 7231, + "begin": 122, + "end": 3066, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 3962, "end": 7231, "name": "DUP1", "source": 0 }, - { "begin": 3962, "end": 7231, "name": "REVERT", "source": 0 }, + { "begin": 122, "end": 3066, "name": "DUP1", "source": 0 }, + { "begin": 122, "end": 3066, "name": "REVERT", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "tag", "source": 0, "value": "3" }, - { "begin": 4321, "end": 4516, "name": "JUMPDEST", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "CALLVALUE", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "DUP1", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "ISZERO", "source": 0 }, + { "begin": 440, "end": 611, "name": "JUMPDEST", "source": 0 }, + { "begin": 440, "end": 611, "name": "CALLVALUE", "source": 0 }, + { "begin": 440, "end": 611, "name": "DUP1", "source": 0 }, + { "begin": 440, "end": 611, "name": "ISZERO", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH [tag]", "source": 0, "value": "20" }, - { "begin": 4321, "end": 4516, "name": "JUMPI", "source": 0 }, + { "begin": 440, "end": 611, "name": "JUMPI", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4321, "end": 4516, "name": "DUP1", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "REVERT", "source": 0 }, + { "begin": 440, "end": 611, "name": "DUP1", "source": 0 }, + { "begin": 440, "end": 611, "name": "REVERT", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "tag", "source": 0, "value": "20" }, - { "begin": 4321, "end": 4516, "name": "JUMPDEST", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "POP", "source": 0 }, + { "begin": 440, "end": 611, "name": "JUMPDEST", "source": 0 }, + { "begin": 440, "end": 611, "name": "POP", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH [tag]", "source": 0, "value": "21" }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH [tag]", "source": 0, "value": "22" }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "tag", "source": 0, "value": "21" }, - { "begin": 4321, "end": 4516, "name": "JUMPDEST", "source": 0 }, + { "begin": 440, "end": 611, "name": "JUMPDEST", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4321, "end": 4516, "name": "MLOAD", "source": 0 }, + { "begin": 440, "end": 611, "name": "MLOAD", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH [tag]", "source": 0, "value": "23" }, - { "begin": 4321, "end": 4516, "name": "SWAP2", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "SWAP1", "source": 0 }, + { "begin": 440, "end": 611, "name": "SWAP2", "source": 0 }, + { "begin": 440, "end": 611, "name": "SWAP1", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH [tag]", "source": 0, "value": "24" }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "tag", "source": 0, "value": "23" }, - { "begin": 4321, "end": 4516, "name": "JUMPDEST", "source": 0 }, + { "begin": 440, "end": 611, "name": "JUMPDEST", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4321, "end": 4516, "name": "MLOAD", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "DUP1", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "SWAP2", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "SUB", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "SWAP1", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "RETURN", "source": 0 }, + { "begin": 440, "end": 611, "name": "MLOAD", "source": 0 }, + { "begin": 440, "end": 611, "name": "DUP1", "source": 0 }, + { "begin": 440, "end": 611, "name": "SWAP2", "source": 0 }, + { "begin": 440, "end": 611, "name": "SUB", "source": 0 }, + { "begin": 440, "end": 611, "name": "SWAP1", "source": 0 }, + { "begin": 440, "end": 611, "name": "RETURN", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "tag", "source": 0, "value": "4" }, - { "begin": 6135, "end": 6282, "name": "JUMPDEST", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "CALLVALUE", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "DUP1", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "ISZERO", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "JUMPDEST", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "CALLVALUE", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "DUP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "ISZERO", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH [tag]", "source": 0, "value": "25" }, - { "begin": 6135, "end": 6282, "name": "JUMPI", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "JUMPI", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6135, "end": 6282, "name": "DUP1", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "REVERT", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "DUP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "REVERT", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "tag", "source": 0, "value": "25" }, - { "begin": 6135, "end": 6282, "name": "JUMPDEST", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "POP", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "JUMPDEST", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "POP", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH [tag]", "source": 0, "value": "26" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6135, "end": 6282, "name": "DUP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "DUP1", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SUB", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "DUP2", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "ADD", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SWAP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SUB", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "DUP2", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "ADD", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP1", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH [tag]", "source": 0, "value": "27" }, - { "begin": 6135, "end": 6282, "name": "SWAP2", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SWAP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP2", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP1", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH [tag]", "source": 0, "value": "28" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "tag", "source": 0, "value": "27" }, - { "begin": 6135, "end": 6282, "name": "JUMPDEST", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "JUMPDEST", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH [tag]", "source": 0, "value": "29" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "tag", "source": 0, "value": "26" }, - { "begin": 6135, "end": 6282, "name": "JUMPDEST", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "JUMPDEST", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6135, "end": 6282, "name": "MLOAD", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "MLOAD", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH [tag]", "source": 0, "value": "30" }, - { "begin": 6135, "end": 6282, "name": "SWAP2", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SWAP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP2", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP1", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "tag", "source": 0, "value": "30" }, - { "begin": 6135, "end": 6282, "name": "JUMPDEST", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "JUMPDEST", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6135, "end": 6282, "name": "MLOAD", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "DUP1", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SWAP2", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SUB", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SWAP1", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "RETURN", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "MLOAD", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "DUP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP2", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SUB", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP1", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "RETURN", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "tag", "source": 0, "value": "5" }, - { "begin": 4976, "end": 5178, "name": "JUMPDEST", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "CALLVALUE", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "DUP1", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "ISZERO", "source": 0 }, + { "begin": 975, "end": 1154, "name": "JUMPDEST", "source": 0 }, + { "begin": 975, "end": 1154, "name": "CALLVALUE", "source": 0 }, + { "begin": 975, "end": 1154, "name": "DUP1", "source": 0 }, + { "begin": 975, "end": 1154, "name": "ISZERO", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH [tag]", "source": 0, "value": "32" }, - { "begin": 4976, "end": 5178, "name": "JUMPI", "source": 0 }, + { "begin": 975, "end": 1154, "name": "JUMPI", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4976, "end": 5178, "name": "DUP1", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "REVERT", "source": 0 }, + { "begin": 975, "end": 1154, "name": "DUP1", "source": 0 }, + { "begin": 975, "end": 1154, "name": "REVERT", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "tag", "source": 0, "value": "32" }, - { "begin": 4976, "end": 5178, "name": "JUMPDEST", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "POP", "source": 0 }, + { "begin": 975, "end": 1154, "name": "JUMPDEST", "source": 0 }, + { "begin": 975, "end": 1154, "name": "POP", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH [tag]", "source": 0, "value": "33" }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH [tag]", "source": 0, "value": "34" }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "tag", "source": 0, "value": "33" }, - { "begin": 4976, "end": 5178, "name": "JUMPDEST", "source": 0 }, + { "begin": 975, "end": 1154, "name": "JUMPDEST", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4976, "end": 5178, "name": "MLOAD", "source": 0 }, + { "begin": 975, "end": 1154, "name": "MLOAD", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH [tag]", "source": 0, "value": "35" }, - { "begin": 4976, "end": 5178, "name": "SWAP2", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "SWAP1", "source": 0 }, + { "begin": 975, "end": 1154, "name": "SWAP2", "source": 0 }, + { "begin": 975, "end": 1154, "name": "SWAP1", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH [tag]", "source": 0, "value": "36" }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "tag", "source": 0, "value": "35" }, - { "begin": 4976, "end": 5178, "name": "JUMPDEST", "source": 0 }, + { "begin": 975, "end": 1154, "name": "JUMPDEST", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4976, "end": 5178, "name": "MLOAD", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "DUP1", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "SWAP2", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "SUB", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "SWAP1", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "RETURN", "source": 0 }, + { "begin": 975, "end": 1154, "name": "MLOAD", "source": 0 }, + { "begin": 975, "end": 1154, "name": "DUP1", "source": 0 }, + { "begin": 975, "end": 1154, "name": "SWAP2", "source": 0 }, + { "begin": 975, "end": 1154, "name": "SUB", "source": 0 }, + { "begin": 975, "end": 1154, "name": "SWAP1", "source": 0 }, + { "begin": 975, "end": 1154, "name": "RETURN", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "tag", "source": 0, "value": "6" }, - { "begin": 6606, "end": 6838, "name": "JUMPDEST", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "CALLVALUE", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "DUP1", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "ISZERO", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "JUMPDEST", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "CALLVALUE", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "DUP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "ISZERO", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH [tag]", "source": 0, "value": "37" }, - { "begin": 6606, "end": 6838, "name": "JUMPI", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "JUMPI", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6606, "end": 6838, "name": "DUP1", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "REVERT", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "DUP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "REVERT", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "tag", "source": 0, "value": "37" }, - { "begin": 6606, "end": 6838, "name": "JUMPDEST", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "POP", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "JUMPDEST", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "POP", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6606, "end": 6838, "name": "DUP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "DUP1", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SUB", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "DUP2", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "ADD", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SWAP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SUB", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "DUP2", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "ADD", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP1", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH [tag]", "source": 0, "value": "39" }, - { "begin": 6606, "end": 6838, "name": "SWAP2", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SWAP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP2", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP1", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH [tag]", "source": 0, "value": "40" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "tag", "source": 0, "value": "39" }, - { "begin": 6606, "end": 6838, "name": "JUMPDEST", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "JUMPDEST", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH [tag]", "source": 0, "value": "41" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "tag", "source": 0, "value": "38" }, - { "begin": 6606, "end": 6838, "name": "JUMPDEST", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "JUMPDEST", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6606, "end": 6838, "name": "MLOAD", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "MLOAD", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH [tag]", "source": 0, "value": "42" }, - { "begin": 6606, "end": 6838, "name": "SWAP2", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SWAP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP2", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP1", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "tag", "source": 0, "value": "42" }, - { "begin": 6606, "end": 6838, "name": "JUMPDEST", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "JUMPDEST", "source": 0 }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6606, "end": 6838, "name": "MLOAD", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "DUP1", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SWAP2", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SUB", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SWAP1", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "RETURN", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "MLOAD", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "DUP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP2", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SUB", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP1", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "RETURN", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "tag", "source": 0, "value": "7" }, - { "begin": 4767, "end": 4962, "name": "JUMPDEST", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "CALLVALUE", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "DUP1", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "ISZERO", "source": 0 }, + { "begin": 798, "end": 969, "name": "JUMPDEST", "source": 0 }, + { "begin": 798, "end": 969, "name": "CALLVALUE", "source": 0 }, + { "begin": 798, "end": 969, "name": "DUP1", "source": 0 }, + { "begin": 798, "end": 969, "name": "ISZERO", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH [tag]", "source": 0, "value": "43" }, - { "begin": 4767, "end": 4962, "name": "JUMPI", "source": 0 }, + { "begin": 798, "end": 969, "name": "JUMPI", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4767, "end": 4962, "name": "DUP1", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "REVERT", "source": 0 }, + { "begin": 798, "end": 969, "name": "DUP1", "source": 0 }, + { "begin": 798, "end": 969, "name": "REVERT", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "tag", "source": 0, "value": "43" }, - { "begin": 4767, "end": 4962, "name": "JUMPDEST", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "POP", "source": 0 }, + { "begin": 798, "end": 969, "name": "JUMPDEST", "source": 0 }, + { "begin": 798, "end": 969, "name": "POP", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH [tag]", "source": 0, "value": "44" }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH [tag]", "source": 0, "value": "45" }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "tag", "source": 0, "value": "44" }, - { "begin": 4767, "end": 4962, "name": "JUMPDEST", "source": 0 }, + { "begin": 798, "end": 969, "name": "JUMPDEST", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4767, "end": 4962, "name": "MLOAD", "source": 0 }, + { "begin": 798, "end": 969, "name": "MLOAD", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH [tag]", "source": 0, "value": "46" }, - { "begin": 4767, "end": 4962, "name": "SWAP2", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "SWAP1", "source": 0 }, + { "begin": 798, "end": 969, "name": "SWAP2", "source": 0 }, + { "begin": 798, "end": 969, "name": "SWAP1", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "tag", "source": 0, "value": "46" }, - { "begin": 4767, "end": 4962, "name": "JUMPDEST", "source": 0 }, + { "begin": 798, "end": 969, "name": "JUMPDEST", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4767, "end": 4962, "name": "MLOAD", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "DUP1", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "SWAP2", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "SUB", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "SWAP1", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "RETURN", "source": 0 }, + { "begin": 798, "end": 969, "name": "MLOAD", "source": 0 }, + { "begin": 798, "end": 969, "name": "DUP1", "source": 0 }, + { "begin": 798, "end": 969, "name": "SWAP2", "source": 0 }, + { "begin": 798, "end": 969, "name": "SUB", "source": 0 }, + { "begin": 798, "end": 969, "name": "SWAP1", "source": 0 }, + { "begin": 798, "end": 969, "name": "RETURN", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "tag", "source": 0, "value": "8" }, - { "begin": 5204, "end": 5416, "name": "JUMPDEST", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "CALLVALUE", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "DUP1", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "ISZERO", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "JUMPDEST", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "CALLVALUE", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "DUP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "ISZERO", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH [tag]", "source": 0, "value": "48" }, - { "begin": 5204, "end": 5416, "name": "JUMPI", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "JUMPI", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5204, "end": 5416, "name": "DUP1", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "REVERT", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "DUP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "REVERT", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "tag", "source": 0, "value": "48" }, - { "begin": 5204, "end": 5416, "name": "JUMPDEST", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "POP", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "JUMPDEST", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "POP", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH [tag]", "source": 0, "value": "49" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5204, "end": 5416, "name": "DUP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "DUP1", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SUB", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "DUP2", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "ADD", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SWAP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SUB", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "DUP2", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "ADD", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP1", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH [tag]", "source": 0, "value": "50" }, - { "begin": 5204, "end": 5416, "name": "SWAP2", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SWAP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP2", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP1", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH [tag]", "source": 0, "value": "51" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "tag", "source": 0, "value": "50" }, - { "begin": 5204, "end": 5416, "name": "JUMPDEST", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "JUMPDEST", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH [tag]", "source": 0, "value": "52" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "tag", "source": 0, "value": "49" }, - { "begin": 5204, "end": 5416, "name": "JUMPDEST", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "JUMPDEST", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5204, "end": 5416, "name": "MLOAD", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "MLOAD", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH [tag]", "source": 0, "value": "53" }, - { "begin": 5204, "end": 5416, "name": "SWAP2", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SWAP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP2", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP1", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH [tag]", "source": 0, "value": "36" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "tag", "source": 0, "value": "53" }, - { "begin": 5204, "end": 5416, "name": "JUMPDEST", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "JUMPDEST", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5204, "end": 5416, "name": "MLOAD", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "DUP1", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SWAP2", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SUB", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SWAP1", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "RETURN", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "MLOAD", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "DUP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP2", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SUB", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "RETURN", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "tag", "source": 0, "value": "9" }, - { "begin": 4063, "end": 4135, "name": "JUMPDEST", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "CALLVALUE", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "DUP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "ISZERO", "source": 0 }, + { "begin": 214, "end": 286, "name": "JUMPDEST", "source": 0 }, + { "begin": 214, "end": 286, "name": "CALLVALUE", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "ISZERO", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH [tag]", "source": 0, "value": "54" }, - { "begin": 4063, "end": 4135, "name": "JUMPI", "source": 0 }, + { "begin": 214, "end": 286, "name": "JUMPI", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4063, "end": 4135, "name": "DUP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "REVERT", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "REVERT", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "tag", "source": 0, "value": "54" }, - { "begin": 4063, "end": 4135, "name": "JUMPDEST", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "POP", "source": 0 }, + { "begin": 214, "end": 286, "name": "JUMPDEST", "source": 0 }, + { "begin": 214, "end": 286, "name": "POP", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH [tag]", "source": 0, "value": "55" }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH [tag]", "source": 0, "value": "56" }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "tag", "source": 0, "value": "55" }, - { "begin": 4063, "end": 4135, "name": "JUMPDEST", "source": 0 }, + { "begin": 214, "end": 286, "name": "JUMPDEST", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4063, "end": 4135, "name": "MLOAD", "source": 0 }, + { "begin": 214, "end": 286, "name": "MLOAD", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH [tag]", "source": 0, "value": "57" }, - { "begin": 4063, "end": 4135, "name": "SWAP2", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SWAP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP2", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP1", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH [tag]", "source": 0, "value": "58" }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "tag", "source": 0, "value": "57" }, - { "begin": 4063, "end": 4135, "name": "JUMPDEST", "source": 0 }, + { "begin": 214, "end": 286, "name": "JUMPDEST", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4063, "end": 4135, "name": "MLOAD", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "DUP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SWAP2", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SUB", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SWAP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "RETURN", "source": 0 }, + { "begin": 214, "end": 286, "name": "MLOAD", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP2", "source": 0 }, + { "begin": 214, "end": 286, "name": "SUB", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "RETURN", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "tag", "source": 0, "value": "10" }, - { "begin": 6864, "end": 7225, "name": "JUMPDEST", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "CALLVALUE", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "DUP1", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "ISZERO", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "JUMPDEST", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "CALLVALUE", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "DUP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "ISZERO", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH [tag]", "source": 0, "value": "59" }, - { "begin": 6864, "end": 7225, "name": "JUMPI", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "JUMPI", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6864, "end": 7225, "name": "DUP1", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "REVERT", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "DUP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "REVERT", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "tag", "source": 0, "value": "59" }, - { "begin": 6864, "end": 7225, "name": "JUMPDEST", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "POP", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "JUMPDEST", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "POP", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH [tag]", "source": 0, "value": "60" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6864, "end": 7225, "name": "DUP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "DUP1", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SUB", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "DUP2", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "ADD", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SWAP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SUB", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "DUP2", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "ADD", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP1", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH [tag]", "source": 0, "value": "61" }, - { "begin": 6864, "end": 7225, "name": "SWAP2", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SWAP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP2", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP1", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH [tag]", "source": 0, "value": "40" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "tag", "source": 0, "value": "61" }, - { "begin": 6864, "end": 7225, "name": "JUMPDEST", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "JUMPDEST", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH [tag]", "source": 0, "value": "62" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "tag", "source": 0, "value": "60" }, - { "begin": 6864, "end": 7225, "name": "JUMPDEST", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "JUMPDEST", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6864, "end": 7225, "name": "MLOAD", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "MLOAD", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH [tag]", "source": 0, "value": "63" }, - { "begin": 6864, "end": 7225, "name": "SWAP2", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SWAP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP2", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP1", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "tag", "source": 0, "value": "63" }, - { "begin": 6864, "end": 7225, "name": "JUMPDEST", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "JUMPDEST", "source": 0 }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6864, "end": 7225, "name": "MLOAD", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "DUP1", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SWAP2", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SUB", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SWAP1", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "RETURN", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "MLOAD", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "DUP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP2", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SUB", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP1", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "RETURN", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "tag", "source": 0, "value": "11" }, - { "begin": 4542, "end": 4741, "name": "JUMPDEST", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "CALLVALUE", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "DUP1", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "ISZERO", "source": 0 }, + { "begin": 617, "end": 792, "name": "JUMPDEST", "source": 0 }, + { "begin": 617, "end": 792, "name": "CALLVALUE", "source": 0 }, + { "begin": 617, "end": 792, "name": "DUP1", "source": 0 }, + { "begin": 617, "end": 792, "name": "ISZERO", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH [tag]", "source": 0, "value": "64" }, - { "begin": 4542, "end": 4741, "name": "JUMPI", "source": 0 }, + { "begin": 617, "end": 792, "name": "JUMPI", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4542, "end": 4741, "name": "DUP1", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "REVERT", "source": 0 }, + { "begin": 617, "end": 792, "name": "DUP1", "source": 0 }, + { "begin": 617, "end": 792, "name": "REVERT", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "tag", "source": 0, "value": "64" }, - { "begin": 4542, "end": 4741, "name": "JUMPDEST", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "POP", "source": 0 }, + { "begin": 617, "end": 792, "name": "JUMPDEST", "source": 0 }, + { "begin": 617, "end": 792, "name": "POP", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH [tag]", "source": 0, "value": "65" }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH [tag]", "source": 0, "value": "66" }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "tag", "source": 0, "value": "65" }, - { "begin": 4542, "end": 4741, "name": "JUMPDEST", "source": 0 }, + { "begin": 617, "end": 792, "name": "JUMPDEST", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4542, "end": 4741, "name": "MLOAD", "source": 0 }, + { "begin": 617, "end": 792, "name": "MLOAD", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH [tag]", "source": 0, "value": "67" }, - { "begin": 4542, "end": 4741, "name": "SWAP2", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "SWAP1", "source": 0 }, + { "begin": 617, "end": 792, "name": "SWAP2", "source": 0 }, + { "begin": 617, "end": 792, "name": "SWAP1", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH [tag]", "source": 0, "value": "24" }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "tag", "source": 0, "value": "67" }, - { "begin": 4542, "end": 4741, "name": "JUMPDEST", "source": 0 }, + { "begin": 617, "end": 792, "name": "JUMPDEST", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4542, "end": 4741, "name": "MLOAD", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "DUP1", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "SWAP2", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "SUB", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "SWAP1", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "RETURN", "source": 0 }, + { "begin": 617, "end": 792, "name": "MLOAD", "source": 0 }, + { "begin": 617, "end": 792, "name": "DUP1", "source": 0 }, + { "begin": 617, "end": 792, "name": "SWAP2", "source": 0 }, + { "begin": 617, "end": 792, "name": "SUB", "source": 0 }, + { "begin": 617, "end": 792, "name": "SWAP1", "source": 0 }, + { "begin": 617, "end": 792, "name": "RETURN", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "tag", "source": 0, "value": "12" }, - { "begin": 5833, "end": 6109, "name": "JUMPDEST", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "CALLVALUE", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "DUP1", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "ISZERO", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "JUMPDEST", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "CALLVALUE", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "DUP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "ISZERO", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH [tag]", "source": 0, "value": "68" }, - { "begin": 5833, "end": 6109, "name": "JUMPI", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "JUMPI", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5833, "end": 6109, "name": "DUP1", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "REVERT", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "DUP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "REVERT", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "tag", "source": 0, "value": "68" }, - { "begin": 5833, "end": 6109, "name": "JUMPDEST", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "POP", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "JUMPDEST", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "POP", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH [tag]", "source": 0, "value": "69" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5833, "end": 6109, "name": "DUP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "DUP1", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SUB", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "DUP2", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "ADD", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SWAP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SUB", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "DUP2", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "ADD", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP1", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH [tag]", "source": 0, "value": "70" }, - { "begin": 5833, "end": 6109, "name": "SWAP2", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SWAP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP2", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP1", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH [tag]", "source": 0, "value": "28" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "tag", "source": 0, "value": "70" }, - { "begin": 5833, "end": 6109, "name": "JUMPDEST", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "JUMPDEST", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH [tag]", "source": 0, "value": "71" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "tag", "source": 0, "value": "69" }, - { "begin": 5833, "end": 6109, "name": "JUMPDEST", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "JUMPDEST", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5833, "end": 6109, "name": "MLOAD", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "MLOAD", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH [tag]", "source": 0, "value": "72" }, - { "begin": 5833, "end": 6109, "name": "SWAP2", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SWAP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP2", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP1", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "tag", "source": 0, "value": "72" }, - { "begin": 5833, "end": 6109, "name": "JUMPDEST", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "JUMPDEST", "source": 0 }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5833, "end": 6109, "name": "MLOAD", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "DUP1", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SWAP2", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SUB", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SWAP1", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "RETURN", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "MLOAD", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "DUP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP2", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SUB", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP1", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "RETURN", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "tag", "source": 0, "value": "13" }, - { "begin": 5664, "end": 5807, "name": "JUMPDEST", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "CALLVALUE", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "DUP1", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "ISZERO", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "JUMPDEST", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "CALLVALUE", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "DUP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "ISZERO", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH [tag]", "source": 0, "value": "73" }, - { "begin": 5664, "end": 5807, "name": "JUMPI", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "JUMPI", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5664, "end": 5807, "name": "DUP1", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "REVERT", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "DUP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "REVERT", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "tag", "source": 0, "value": "73" }, - { "begin": 5664, "end": 5807, "name": "JUMPDEST", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "POP", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "JUMPDEST", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "POP", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH [tag]", "source": 0, "value": "74" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5664, "end": 5807, "name": "DUP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "DUP1", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SUB", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "DUP2", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "ADD", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SWAP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SUB", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "DUP2", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "ADD", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP1", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH [tag]", "source": 0, "value": "75" }, - { "begin": 5664, "end": 5807, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SWAP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP2", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP1", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH [tag]", "source": 0, "value": "28" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "tag", "source": 0, "value": "75" }, - { "begin": 5664, "end": 5807, "name": "JUMPDEST", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "JUMPDEST", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH [tag]", "source": 0, "value": "76" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "tag", "source": 0, "value": "74" }, - { "begin": 5664, "end": 5807, "name": "JUMPDEST", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "JUMPDEST", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5664, "end": 5807, "name": "MLOAD", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "MLOAD", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH [tag]", "source": 0, "value": "77" }, - { "begin": 5664, "end": 5807, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SWAP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP2", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP1", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "tag", "source": 0, "value": "77" }, - { "begin": 5664, "end": 5807, "name": "JUMPDEST", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "JUMPDEST", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5664, "end": 5807, "name": "MLOAD", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "DUP1", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SUB", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SWAP1", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "RETURN", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "MLOAD", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "DUP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP2", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SUB", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP1", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "RETURN", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "tag", "source": 0, "value": "14" }, - { "begin": 5442, "end": 5650, "name": "JUMPDEST", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "CALLVALUE", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "DUP1", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "ISZERO", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "JUMPDEST", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "CALLVALUE", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "DUP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "ISZERO", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH [tag]", "source": 0, "value": "78" }, - { "begin": 5442, "end": 5650, "name": "JUMPI", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "JUMPI", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5442, "end": 5650, "name": "DUP1", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "REVERT", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "DUP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "REVERT", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "tag", "source": 0, "value": "78" }, - { "begin": 5442, "end": 5650, "name": "JUMPDEST", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "POP", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "JUMPDEST", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "POP", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH [tag]", "source": 0, "value": "79" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5442, "end": 5650, "name": "DUP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "DUP1", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SUB", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "DUP2", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "ADD", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SWAP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SUB", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "DUP2", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "ADD", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP1", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH [tag]", "source": 0, "value": "80" }, - { "begin": 5442, "end": 5650, "name": "SWAP2", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SWAP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP2", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP1", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH [tag]", "source": 0, "value": "81" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "tag", "source": 0, "value": "80" }, - { "begin": 5442, "end": 5650, "name": "JUMPDEST", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "JUMPDEST", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH [tag]", "source": 0, "value": "82" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "tag", "source": 0, "value": "79" }, - { "begin": 5442, "end": 5650, "name": "JUMPDEST", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "JUMPDEST", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5442, "end": 5650, "name": "MLOAD", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "MLOAD", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH [tag]", "source": 0, "value": "83" }, - { "begin": 5442, "end": 5650, "name": "SWAP2", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SWAP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP2", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP1", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH [tag]", "source": 0, "value": "36" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "tag", "source": 0, "value": "83" }, - { "begin": 5442, "end": 5650, "name": "JUMPDEST", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "JUMPDEST", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5442, "end": 5650, "name": "MLOAD", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "DUP1", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SWAP2", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SUB", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SWAP1", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "RETURN", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "MLOAD", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "DUP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP2", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SUB", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP1", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "RETURN", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "tag", "source": 0, "value": "15" }, - { "begin": 6296, "end": 6580, "name": "JUMPDEST", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "CALLVALUE", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "DUP1", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "ISZERO", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "JUMPDEST", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "CALLVALUE", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "DUP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "ISZERO", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH [tag]", "source": 0, "value": "84" }, - { "begin": 6296, "end": 6580, "name": "JUMPI", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "JUMPI", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6296, "end": 6580, "name": "DUP1", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "REVERT", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "DUP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "REVERT", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "tag", "source": 0, "value": "84" }, - { "begin": 6296, "end": 6580, "name": "JUMPDEST", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "POP", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "JUMPDEST", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "POP", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH [tag]", "source": 0, "value": "85" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6296, "end": 6580, "name": "DUP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "DUP1", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SUB", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "DUP2", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "ADD", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SWAP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SUB", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "DUP2", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "ADD", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP1", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH [tag]", "source": 0, "value": "86" }, - { "begin": 6296, "end": 6580, "name": "SWAP2", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SWAP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP2", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP1", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH [tag]", "source": 0, "value": "28" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "tag", "source": 0, "value": "86" }, - { "begin": 6296, "end": 6580, "name": "JUMPDEST", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "JUMPDEST", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH [tag]", "source": 0, "value": "87" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "tag", "source": 0, "value": "85" }, - { "begin": 6296, "end": 6580, "name": "JUMPDEST", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "JUMPDEST", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6296, "end": 6580, "name": "MLOAD", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "MLOAD", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH [tag]", "source": 0, "value": "88" }, - { "begin": 6296, "end": 6580, "name": "SWAP2", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SWAP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP2", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP1", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "tag", "source": 0, "value": "88" }, - { "begin": 6296, "end": 6580, "name": "JUMPDEST", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "JUMPDEST", "source": 0 }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6296, "end": 6580, "name": "MLOAD", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "DUP1", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SWAP2", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SUB", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SWAP1", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "RETURN", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "MLOAD", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "DUP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP2", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SUB", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP1", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "RETURN", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "tag", "source": 0, "value": "22" }, - { "begin": 4321, "end": 4516, "name": "JUMPDEST", "source": 0 }, + { "begin": 440, "end": 611, "name": "JUMPDEST", "source": 0 }, { - "begin": 4369, - "end": 4382, + "begin": 488, + "end": 501, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 4489, - "end": 4494, + "begin": 592, + "end": 597, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4489, "end": 4494, "name": "DUP1", "source": 0 }, - { "begin": 4489, "end": 4494, "name": "SLOAD", "source": 0 }, - { "begin": 4489, "end": 4494, "name": "SWAP1", "source": 0 }, + { "begin": 592, "end": 597, "name": "DUP1", "source": 0 }, + { "begin": 592, "end": 597, "name": "SLOAD", "source": 0 }, + { "begin": 592, "end": 597, "name": "SWAP1", "source": 0 }, { - "begin": 4489, - "end": 4494, + "begin": 592, + "end": 597, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4489, "end": 4494, "name": "EXP", "source": 0 }, - { "begin": 4489, "end": 4494, "name": "SWAP1", "source": 0 }, - { "begin": 4489, "end": 4494, "name": "DIV", "source": 0 }, + { "begin": 592, "end": 597, "name": "EXP", "source": 0 }, + { "begin": 592, "end": 597, "name": "SWAP1", "source": 0 }, + { "begin": 592, "end": 597, "name": "DIV", "source": 0 }, { - "begin": 4489, - "end": 4494, + "begin": 592, + "end": 597, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4489, "end": 4494, "name": "AND", "source": 0 }, + { "begin": 592, "end": 597, "name": "AND", "source": 0 }, { - "begin": 4489, - "end": 4499, + "begin": 592, + "end": 602, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4489, "end": 4499, "name": "AND", "source": 0 }, + { "begin": 592, "end": 602, "name": "AND", "source": 0 }, { - "begin": 4489, - "end": 4499, + "begin": 592, + "end": 602, "name": "PUSH", "source": 0, "value": "6FDDE03" }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4489, "end": 4501, "name": "MLOAD", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP2", "source": 0 }, + { "begin": 592, "end": 604, "name": "MLOAD", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP2", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 4489, "end": 4501, "name": "AND", "source": 0 }, + { "begin": 592, "end": 604, "name": "AND", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 4489, "end": 4501, "name": "SHL", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP2", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "MSTORE", "source": 0 }, + { "begin": 592, "end": 604, "name": "SHL", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP2", "source": 0 }, + { "begin": 592, "end": 604, "name": "MSTORE", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4489, "end": 4501, "name": "ADD", "source": 0 }, + { "begin": 592, "end": 604, "name": "ADD", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4489, "end": 4501, "name": "MLOAD", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP1", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP4", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "SUB", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP2", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP7", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "GAS", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "STATICCALL", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "ISZERO", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP1", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "ISZERO", "source": 0 }, + { "begin": 592, "end": 604, "name": "MLOAD", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP1", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP4", "source": 0 }, + { "begin": 592, "end": 604, "name": "SUB", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP2", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP7", "source": 0 }, + { "begin": 592, "end": 604, "name": "GAS", "source": 0 }, + { "begin": 592, "end": 604, "name": "STATICCALL", "source": 0 }, + { "begin": 592, "end": 604, "name": "ISZERO", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP1", "source": 0 }, + { "begin": 592, "end": 604, "name": "ISZERO", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH [tag]", "source": 0, "value": "91" }, - { "begin": 4489, "end": 4501, "name": "JUMPI", "source": 0 }, + { "begin": 592, "end": 604, "name": "JUMPI", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4489, "end": 4501, "name": "DUP1", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP1", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4489, "end": 4501, "name": "REVERT", "source": 0 }, + { "begin": 592, "end": 604, "name": "REVERT", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "tag", "source": 0, "value": "91" }, - { "begin": 4489, "end": 4501, "name": "JUMPDEST", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "POP", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "POP", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "POP", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "POP", "source": 0 }, + { "begin": 592, "end": 604, "name": "JUMPDEST", "source": 0 }, + { "begin": 592, "end": 604, "name": "POP", "source": 0 }, + { "begin": 592, "end": 604, "name": "POP", "source": 0 }, + { "begin": 592, "end": 604, "name": "POP", "source": 0 }, + { "begin": 592, "end": 604, "name": "POP", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4489, "end": 4501, "name": "MLOAD", "source": 0 }, + { "begin": 592, "end": 604, "name": "MLOAD", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4489, "end": 4501, "name": "DUP3", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP3", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 4489, "end": 4501, "name": "NOT", "source": 0 }, + { "begin": 592, "end": 604, "name": "NOT", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 4489, "end": 4501, "name": "DUP3", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "ADD", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "AND", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP3", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "ADD", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP1", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP3", "source": 0 }, + { "begin": 592, "end": 604, "name": "ADD", "source": 0 }, + { "begin": 592, "end": 604, "name": "AND", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP3", "source": 0 }, + { "begin": 592, "end": 604, "name": "ADD", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP1", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4489, "end": 4501, "name": "MSTORE", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "POP", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "DUP2", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "ADD", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "SWAP1", "source": 0 }, + { "begin": 592, "end": 604, "name": "MSTORE", "source": 0 }, + { "begin": 592, "end": 604, "name": "POP", "source": 0 }, + { "begin": 592, "end": 604, "name": "DUP2", "source": 0 }, + { "begin": 592, "end": 604, "name": "ADD", "source": 0 }, + { "begin": 592, "end": 604, "name": "SWAP1", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH [tag]", "source": 0, "value": "92" }, - { "begin": 4489, "end": 4501, "name": "SWAP2", "source": 0 }, - { "begin": 4489, "end": 4501, "name": "SWAP1", "source": 0 }, + { "begin": 592, "end": 604, "name": "SWAP2", "source": 0 }, + { "begin": 592, "end": 604, "name": "SWAP1", "source": 0 }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "PUSH [tag]", "source": 0, "value": "93" }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4489, - "end": 4501, + "begin": 592, + "end": 604, "name": "tag", "source": 0, "value": "92" }, - { "begin": 4489, "end": 4501, "name": "JUMPDEST", "source": 0 }, - { "begin": 4482, "end": 4501, "name": "SWAP1", "source": 0 }, - { "begin": 4482, "end": 4501, "name": "POP", "source": 0 }, - { "begin": 4321, "end": 4516, "name": "SWAP1", "source": 0 }, + { "begin": 592, "end": 604, "name": "JUMPDEST", "source": 0 }, + { "begin": 585, "end": 604, "name": "SWAP1", "source": 0 }, + { "begin": 585, "end": 604, "name": "POP", "source": 0 }, + { "begin": 440, "end": 611, "name": "SWAP1", "source": 0 }, { - "begin": 4321, - "end": 4516, + "begin": 440, + "end": 611, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "tag", "source": 0, "value": "29" }, - { "begin": 6135, "end": 6282, "name": "JUMPDEST", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "JUMPDEST", "source": 0 }, { - "begin": 6211, - "end": 6215, + "begin": 2096, + "end": 2100, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6238, "end": 6243, "name": "DUP1", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "DUP1", "source": 0 }, { - "begin": 6238, - "end": 6243, + "begin": 2123, + "end": 2128, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6238, "end": 6243, "name": "SWAP1", "source": 0 }, - { "begin": 6238, "end": 6243, "name": "SLOAD", "source": 0 }, - { "begin": 6238, "end": 6243, "name": "SWAP1", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "SWAP1", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "SLOAD", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "SWAP1", "source": 0 }, { - "begin": 6238, - "end": 6243, + "begin": 2123, + "end": 2128, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6238, "end": 6243, "name": "EXP", "source": 0 }, - { "begin": 6238, "end": 6243, "name": "SWAP1", "source": 0 }, - { "begin": 6238, "end": 6243, "name": "DIV", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "EXP", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "SWAP1", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "DIV", "source": 0 }, { - "begin": 6238, - "end": 6243, + "begin": 2123, + "end": 2128, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6238, "end": 6243, "name": "AND", "source": 0 }, + { "begin": 2123, "end": 2128, "name": "AND", "source": 0 }, { - "begin": 6238, - "end": 6251, + "begin": 2123, + "end": 2136, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6238, "end": 6251, "name": "AND", "source": 0 }, + { "begin": 2123, "end": 2136, "name": "AND", "source": 0 }, { - "begin": 6238, - "end": 6251, + "begin": 2123, + "end": 2136, "name": "PUSH", "source": 0, "value": "95EA7B3" }, - { "begin": 6252, "end": 6259, "name": "DUP5", "source": 0 }, - { "begin": 6261, "end": 6266, "name": "DUP5", "source": 0 }, + { "begin": 2137, "end": 2144, "name": "DUP5", "source": 0 }, + { "begin": 2146, "end": 2151, "name": "DUP5", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6238, "end": 6267, "name": "MLOAD", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP4", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "MLOAD", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP4", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 6238, "end": 6267, "name": "AND", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "AND", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 6238, "end": 6267, "name": "SHL", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP2", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "MSTORE", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SHL", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP2", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "MSTORE", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6238, "end": 6267, "name": "ADD", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "ADD", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH [tag]", "source": 0, "value": "95" }, - { "begin": 6238, "end": 6267, "name": "SWAP3", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "SWAP2", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "SWAP1", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SWAP3", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SWAP2", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SWAP1", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH [tag]", "source": 0, "value": "96" }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "tag", "source": 0, "value": "95" }, - { "begin": 6238, "end": 6267, "name": "JUMPDEST", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "JUMPDEST", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6238, "end": 6267, "name": "MLOAD", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP1", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP4", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "SUB", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP2", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "MLOAD", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP1", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP4", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SUB", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP2", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6238, "end": 6267, "name": "DUP8", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "GAS", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "CALL", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "ISZERO", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP1", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "ISZERO", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP8", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "GAS", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "CALL", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "ISZERO", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP1", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "ISZERO", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH [tag]", "source": 0, "value": "98" }, - { "begin": 6238, "end": 6267, "name": "JUMPI", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "JUMPI", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6238, "end": 6267, "name": "DUP1", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP1", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6238, "end": 6267, "name": "REVERT", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "REVERT", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "tag", "source": 0, "value": "98" }, - { "begin": 6238, "end": 6267, "name": "JUMPDEST", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "POP", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "POP", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "POP", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "POP", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "JUMPDEST", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "POP", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "POP", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "POP", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "POP", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6238, "end": 6267, "name": "MLOAD", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "MLOAD", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 6238, "end": 6267, "name": "NOT", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "NOT", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 6238, "end": 6267, "name": "DUP3", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "ADD", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "AND", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP3", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "ADD", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP1", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP3", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "ADD", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "AND", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP3", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "ADD", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP1", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6238, "end": 6267, "name": "MSTORE", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "POP", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "DUP2", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "ADD", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "SWAP1", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "MSTORE", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "POP", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "DUP2", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "ADD", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SWAP1", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH [tag]", "source": 0, "value": "99" }, - { "begin": 6238, "end": 6267, "name": "SWAP2", "source": 0 }, - { "begin": 6238, "end": 6267, "name": "SWAP1", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SWAP2", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "SWAP1", "source": 0 }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "PUSH [tag]", "source": 0, "value": "100" }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6238, - "end": 6267, + "begin": 2123, + "end": 2152, "name": "tag", "source": 0, "value": "99" }, - { "begin": 6238, "end": 6267, "name": "JUMPDEST", "source": 0 }, - { "begin": 6231, "end": 6267, "name": "SWAP1", "source": 0 }, - { "begin": 6231, "end": 6267, "name": "POP", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SWAP3", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "SWAP2", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "POP", "source": 0 }, - { "begin": 6135, "end": 6282, "name": "POP", "source": 0 }, + { "begin": 2123, "end": 2152, "name": "JUMPDEST", "source": 0 }, + { "begin": 2116, "end": 2152, "name": "SWAP1", "source": 0 }, + { "begin": 2116, "end": 2152, "name": "POP", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP3", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "SWAP2", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "POP", "source": 0 }, + { "begin": 1996, "end": 2159, "name": "POP", "source": 0 }, { - "begin": 6135, - "end": 6282, + "begin": 1996, + "end": 2159, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "tag", "source": 0, "value": "34" }, - { "begin": 4976, "end": 5178, "name": "JUMPDEST", "source": 0 }, + { "begin": 975, "end": 1154, "name": "JUMPDEST", "source": 0 }, { - "begin": 5031, - "end": 5038, + "begin": 1030, + "end": 1037, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5144, "end": 5149, "name": "DUP1", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "DUP1", "source": 0 }, { - "begin": 5144, - "end": 5149, + "begin": 1128, + "end": 1133, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5144, "end": 5149, "name": "SWAP1", "source": 0 }, - { "begin": 5144, "end": 5149, "name": "SLOAD", "source": 0 }, - { "begin": 5144, "end": 5149, "name": "SWAP1", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "SWAP1", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "SLOAD", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "SWAP1", "source": 0 }, { - "begin": 5144, - "end": 5149, + "begin": 1128, + "end": 1133, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5144, "end": 5149, "name": "EXP", "source": 0 }, - { "begin": 5144, "end": 5149, "name": "SWAP1", "source": 0 }, - { "begin": 5144, "end": 5149, "name": "DIV", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "EXP", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "SWAP1", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "DIV", "source": 0 }, { - "begin": 5144, - "end": 5149, + "begin": 1128, + "end": 1133, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5144, "end": 5149, "name": "AND", "source": 0 }, + { "begin": 1128, "end": 1133, "name": "AND", "source": 0 }, { - "begin": 5144, - "end": 5161, + "begin": 1128, + "end": 1145, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5144, "end": 5161, "name": "AND", "source": 0 }, + { "begin": 1128, "end": 1145, "name": "AND", "source": 0 }, { - "begin": 5144, - "end": 5161, + "begin": 1128, + "end": 1145, "name": "PUSH", "source": 0, "value": "18160DDD" }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5144, "end": 5163, "name": "MLOAD", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP2", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "MLOAD", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP2", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 5144, "end": 5163, "name": "AND", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "AND", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 5144, "end": 5163, "name": "SHL", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP2", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "MSTORE", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "SHL", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP2", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "MSTORE", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5144, "end": 5163, "name": "ADD", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "ADD", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5144, "end": 5163, "name": "MLOAD", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP1", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP4", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "SUB", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP2", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP7", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "GAS", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "STATICCALL", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "ISZERO", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP1", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "ISZERO", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "MLOAD", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP1", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP4", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "SUB", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP2", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP7", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "GAS", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "STATICCALL", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "ISZERO", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP1", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "ISZERO", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH [tag]", "source": 0, "value": "103" }, - { "begin": 5144, "end": 5163, "name": "JUMPI", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "JUMPI", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5144, "end": 5163, "name": "DUP1", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP1", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5144, "end": 5163, "name": "REVERT", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "REVERT", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "tag", "source": 0, "value": "103" }, - { "begin": 5144, "end": 5163, "name": "JUMPDEST", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "POP", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "POP", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "POP", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "POP", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "JUMPDEST", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "POP", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "POP", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "POP", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "POP", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5144, "end": 5163, "name": "MLOAD", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "MLOAD", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5144, "end": 5163, "name": "NOT", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "NOT", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5144, "end": 5163, "name": "DUP3", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "ADD", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "AND", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP3", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "ADD", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP1", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP3", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "ADD", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "AND", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP3", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "ADD", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP1", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5144, "end": 5163, "name": "MSTORE", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "POP", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "DUP2", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "ADD", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "SWAP1", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "MSTORE", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "POP", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "DUP2", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "ADD", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "SWAP1", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH [tag]", "source": 0, "value": "104" }, - { "begin": 5144, "end": 5163, "name": "SWAP2", "source": 0 }, - { "begin": 5144, "end": 5163, "name": "SWAP1", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "SWAP2", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "SWAP1", "source": 0 }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "PUSH [tag]", "source": 0, "value": "105" }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5144, - "end": 5163, + "begin": 1128, + "end": 1147, "name": "tag", "source": 0, "value": "104" }, - { "begin": 5144, "end": 5163, "name": "JUMPDEST", "source": 0 }, - { "begin": 5137, "end": 5163, "name": "SWAP1", "source": 0 }, - { "begin": 5137, "end": 5163, "name": "POP", "source": 0 }, - { "begin": 4976, "end": 5178, "name": "SWAP1", "source": 0 }, + { "begin": 1128, "end": 1147, "name": "JUMPDEST", "source": 0 }, + { "begin": 1121, "end": 1147, "name": "SWAP1", "source": 0 }, + { "begin": 1121, "end": 1147, "name": "POP", "source": 0 }, + { "begin": 975, "end": 1154, "name": "SWAP1", "source": 0 }, { - "begin": 4976, - "end": 5178, + "begin": 975, + "end": 1154, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 6606, - "end": 6838, + "begin": 2464, + "end": 2649, "name": "tag", "source": 0, "value": "41" }, - { "begin": 6606, "end": 6838, "name": "JUMPDEST", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "JUMPDEST", "source": 0 }, { - "begin": 6757, - "end": 6761, + "begin": 2584, + "end": 2588, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6788, "end": 6793, "name": "DUP1", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "DUP1", "source": 0 }, { - "begin": 6788, - "end": 6793, + "begin": 2607, + "end": 2612, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6788, "end": 6793, "name": "SWAP1", "source": 0 }, - { "begin": 6788, "end": 6793, "name": "SLOAD", "source": 0 }, - { "begin": 6788, "end": 6793, "name": "SWAP1", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "SWAP1", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "SLOAD", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "SWAP1", "source": 0 }, { - "begin": 6788, - "end": 6793, + "begin": 2607, + "end": 2612, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6788, "end": 6793, "name": "EXP", "source": 0 }, - { "begin": 6788, "end": 6793, "name": "SWAP1", "source": 0 }, - { "begin": 6788, "end": 6793, "name": "DIV", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "EXP", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "SWAP1", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "DIV", "source": 0 }, { - "begin": 6788, - "end": 6793, + "begin": 2607, + "end": 2612, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6788, "end": 6793, "name": "AND", "source": 0 }, + { "begin": 2607, "end": 2612, "name": "AND", "source": 0 }, { - "begin": 6788, - "end": 6806, + "begin": 2607, + "end": 2625, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6788, "end": 6806, "name": "AND", "source": 0 }, + { "begin": 2607, "end": 2625, "name": "AND", "source": 0 }, { - "begin": 6788, - "end": 6806, + "begin": 2607, + "end": 2625, "name": "PUSH", "source": 0, "value": "23B872DD" }, - { "begin": 6807, "end": 6811, "name": "DUP6", "source": 0 }, - { "begin": 6813, "end": 6815, "name": "DUP6", "source": 0 }, - { "begin": 6817, "end": 6822, "name": "DUP6", "source": 0 }, + { "begin": 2626, "end": 2630, "name": "DUP6", "source": 0 }, + { "begin": 2632, "end": 2634, "name": "DUP6", "source": 0 }, + { "begin": 2636, "end": 2641, "name": "DUP6", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6788, "end": 6823, "name": "MLOAD", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP5", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "MLOAD", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP5", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 6788, "end": 6823, "name": "AND", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "AND", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 6788, "end": 6823, "name": "SHL", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP2", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "MSTORE", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SHL", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP2", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "MSTORE", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6788, "end": 6823, "name": "ADD", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "ADD", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH [tag]", "source": 0, "value": "107" }, - { "begin": 6788, "end": 6823, "name": "SWAP4", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "SWAP3", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "SWAP2", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "SWAP1", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SWAP4", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SWAP3", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SWAP2", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SWAP1", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH [tag]", "source": 0, "value": "108" }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "tag", "source": 0, "value": "107" }, - { "begin": 6788, "end": 6823, "name": "JUMPDEST", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "JUMPDEST", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6788, "end": 6823, "name": "MLOAD", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP1", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP4", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "SUB", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP2", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "MLOAD", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP1", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP4", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SUB", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP2", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6788, "end": 6823, "name": "DUP8", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "GAS", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "CALL", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "ISZERO", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP1", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "ISZERO", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP8", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "GAS", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "CALL", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "ISZERO", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP1", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "ISZERO", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH [tag]", "source": 0, "value": "110" }, - { "begin": 6788, "end": 6823, "name": "JUMPI", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "JUMPI", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6788, "end": 6823, "name": "DUP1", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP1", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6788, "end": 6823, "name": "REVERT", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "REVERT", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "tag", "source": 0, "value": "110" }, - { "begin": 6788, "end": 6823, "name": "JUMPDEST", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "POP", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "POP", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "POP", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "POP", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "JUMPDEST", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "POP", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "POP", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "POP", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "POP", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6788, "end": 6823, "name": "MLOAD", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "MLOAD", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 6788, "end": 6823, "name": "NOT", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "NOT", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 6788, "end": 6823, "name": "DUP3", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "ADD", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "AND", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP3", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "ADD", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP1", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP3", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "ADD", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "AND", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP3", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "ADD", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP1", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6788, "end": 6823, "name": "MSTORE", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "POP", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "DUP2", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "ADD", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "SWAP1", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "MSTORE", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "POP", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "DUP2", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "ADD", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SWAP1", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH [tag]", "source": 0, "value": "111" }, - { "begin": 6788, "end": 6823, "name": "SWAP2", "source": 0 }, - { "begin": 6788, "end": 6823, "name": "SWAP1", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SWAP2", "source": 0 }, + { "begin": 2607, "end": 2642, "name": "SWAP1", "source": 0 }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "PUSH [tag]", "source": 0, "value": "100" }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6788, - "end": 6823, + "begin": 2607, + "end": 2642, "name": "tag", "source": 0, "value": "111" }, - { "begin": 6788, "end": 6823, "name": "JUMPDEST", "source": 0 }, - { "begin": 6781, "end": 6823, "name": "SWAP1", "source": 0 }, - { "begin": 6781, "end": 6823, "name": "POP", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SWAP4", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "SWAP3", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "POP", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "POP", "source": 0 }, - { "begin": 6606, "end": 6838, "name": "POP", "source": 0 }, - { - "begin": 6606, - "end": 6838, + { "begin": 2607, "end": 2642, "name": "JUMPDEST", "source": 0 }, + { "begin": 2600, "end": 2642, "name": "SWAP1", "source": 0 }, + { "begin": 2600, "end": 2642, "name": "POP", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP4", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "SWAP3", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "POP", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "POP", "source": 0 }, + { "begin": 2464, "end": 2649, "name": "POP", "source": 0 }, + { + "begin": 2464, + "end": 2649, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "tag", "source": 0, "value": "45" }, - { "begin": 4767, "end": 4962, "name": "JUMPDEST", "source": 0 }, + { "begin": 798, "end": 969, "name": "JUMPDEST", "source": 0 }, { - "begin": 4819, - "end": 4824, + "begin": 850, + "end": 855, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4931, "end": 4936, "name": "DUP1", "source": 0 }, + { "begin": 946, "end": 951, "name": "DUP1", "source": 0 }, { - "begin": 4931, - "end": 4936, + "begin": 946, + "end": 951, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4931, "end": 4936, "name": "SWAP1", "source": 0 }, - { "begin": 4931, "end": 4936, "name": "SLOAD", "source": 0 }, - { "begin": 4931, "end": 4936, "name": "SWAP1", "source": 0 }, + { "begin": 946, "end": 951, "name": "SWAP1", "source": 0 }, + { "begin": 946, "end": 951, "name": "SLOAD", "source": 0 }, + { "begin": 946, "end": 951, "name": "SWAP1", "source": 0 }, { - "begin": 4931, - "end": 4936, + "begin": 946, + "end": 951, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4931, "end": 4936, "name": "EXP", "source": 0 }, - { "begin": 4931, "end": 4936, "name": "SWAP1", "source": 0 }, - { "begin": 4931, "end": 4936, "name": "DIV", "source": 0 }, + { "begin": 946, "end": 951, "name": "EXP", "source": 0 }, + { "begin": 946, "end": 951, "name": "SWAP1", "source": 0 }, + { "begin": 946, "end": 951, "name": "DIV", "source": 0 }, { - "begin": 4931, - "end": 4936, + "begin": 946, + "end": 951, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4931, "end": 4936, "name": "AND", "source": 0 }, + { "begin": 946, "end": 951, "name": "AND", "source": 0 }, { - "begin": 4931, - "end": 4945, + "begin": 946, + "end": 960, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4931, "end": 4945, "name": "AND", "source": 0 }, + { "begin": 946, "end": 960, "name": "AND", "source": 0 }, { - "begin": 4931, - "end": 4945, + "begin": 946, + "end": 960, "name": "PUSH", "source": 0, "value": "313CE567" }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4931, "end": 4947, "name": "MLOAD", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP2", "source": 0 }, + { "begin": 946, "end": 962, "name": "MLOAD", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP2", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 4931, "end": 4947, "name": "AND", "source": 0 }, + { "begin": 946, "end": 962, "name": "AND", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 4931, "end": 4947, "name": "SHL", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP2", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "MSTORE", "source": 0 }, + { "begin": 946, "end": 962, "name": "SHL", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP2", "source": 0 }, + { "begin": 946, "end": 962, "name": "MSTORE", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4931, "end": 4947, "name": "ADD", "source": 0 }, + { "begin": 946, "end": 962, "name": "ADD", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4931, "end": 4947, "name": "MLOAD", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP1", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP4", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "SUB", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP2", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP7", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "GAS", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "STATICCALL", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "ISZERO", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP1", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "ISZERO", "source": 0 }, + { "begin": 946, "end": 962, "name": "MLOAD", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP1", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP4", "source": 0 }, + { "begin": 946, "end": 962, "name": "SUB", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP2", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP7", "source": 0 }, + { "begin": 946, "end": 962, "name": "GAS", "source": 0 }, + { "begin": 946, "end": 962, "name": "STATICCALL", "source": 0 }, + { "begin": 946, "end": 962, "name": "ISZERO", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP1", "source": 0 }, + { "begin": 946, "end": 962, "name": "ISZERO", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH [tag]", "source": 0, "value": "114" }, - { "begin": 4931, "end": 4947, "name": "JUMPI", "source": 0 }, + { "begin": 946, "end": 962, "name": "JUMPI", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4931, "end": 4947, "name": "DUP1", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP1", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4931, "end": 4947, "name": "REVERT", "source": 0 }, + { "begin": 946, "end": 962, "name": "REVERT", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "tag", "source": 0, "value": "114" }, - { "begin": 4931, "end": 4947, "name": "JUMPDEST", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "POP", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "POP", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "POP", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "POP", "source": 0 }, + { "begin": 946, "end": 962, "name": "JUMPDEST", "source": 0 }, + { "begin": 946, "end": 962, "name": "POP", "source": 0 }, + { "begin": 946, "end": 962, "name": "POP", "source": 0 }, + { "begin": 946, "end": 962, "name": "POP", "source": 0 }, + { "begin": 946, "end": 962, "name": "POP", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4931, "end": 4947, "name": "MLOAD", "source": 0 }, + { "begin": 946, "end": 962, "name": "MLOAD", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 4931, "end": 4947, "name": "NOT", "source": 0 }, + { "begin": 946, "end": 962, "name": "NOT", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 4931, "end": 4947, "name": "DUP3", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "ADD", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "AND", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP3", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "ADD", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP1", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP3", "source": 0 }, + { "begin": 946, "end": 962, "name": "ADD", "source": 0 }, + { "begin": 946, "end": 962, "name": "AND", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP3", "source": 0 }, + { "begin": 946, "end": 962, "name": "ADD", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP1", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4931, "end": 4947, "name": "MSTORE", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "POP", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "DUP2", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "ADD", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "SWAP1", "source": 0 }, + { "begin": 946, "end": 962, "name": "MSTORE", "source": 0 }, + { "begin": 946, "end": 962, "name": "POP", "source": 0 }, + { "begin": 946, "end": 962, "name": "DUP2", "source": 0 }, + { "begin": 946, "end": 962, "name": "ADD", "source": 0 }, + { "begin": 946, "end": 962, "name": "SWAP1", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH [tag]", "source": 0, "value": "115" }, - { "begin": 4931, "end": 4947, "name": "SWAP2", "source": 0 }, - { "begin": 4931, "end": 4947, "name": "SWAP1", "source": 0 }, + { "begin": 946, "end": 962, "name": "SWAP2", "source": 0 }, + { "begin": 946, "end": 962, "name": "SWAP1", "source": 0 }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "PUSH [tag]", "source": 0, "value": "116" }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4931, - "end": 4947, + "begin": 946, + "end": 962, "name": "tag", "source": 0, "value": "115" }, - { "begin": 4931, "end": 4947, "name": "JUMPDEST", "source": 0 }, - { "begin": 4924, "end": 4947, "name": "SWAP1", "source": 0 }, - { "begin": 4924, "end": 4947, "name": "POP", "source": 0 }, - { "begin": 4767, "end": 4962, "name": "SWAP1", "source": 0 }, + { "begin": 946, "end": 962, "name": "JUMPDEST", "source": 0 }, + { "begin": 939, "end": 962, "name": "SWAP1", "source": 0 }, + { "begin": 939, "end": 962, "name": "POP", "source": 0 }, + { "begin": 798, "end": 969, "name": "SWAP1", "source": 0 }, { - "begin": 4767, - "end": 4962, + "begin": 798, + "end": 969, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "tag", "source": 0, "value": "52" }, - { "begin": 5204, "end": 5416, "name": "JUMPDEST", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "JUMPDEST", "source": 0 }, { - "begin": 5268, - "end": 5275, + "begin": 1224, + "end": 1231, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5381, "end": 5386, "name": "DUP1", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "DUP1", "source": 0 }, { - "begin": 5381, - "end": 5386, + "begin": 1322, + "end": 1327, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5381, "end": 5386, "name": "SWAP1", "source": 0 }, - { "begin": 5381, "end": 5386, "name": "SLOAD", "source": 0 }, - { "begin": 5381, "end": 5386, "name": "SWAP1", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "SWAP1", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "SLOAD", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "SWAP1", "source": 0 }, { - "begin": 5381, - "end": 5386, + "begin": 1322, + "end": 1327, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5381, "end": 5386, "name": "EXP", "source": 0 }, - { "begin": 5381, "end": 5386, "name": "SWAP1", "source": 0 }, - { "begin": 5381, "end": 5386, "name": "DIV", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "EXP", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "SWAP1", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "DIV", "source": 0 }, { - "begin": 5381, - "end": 5386, + "begin": 1322, + "end": 1327, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5381, "end": 5386, "name": "AND", "source": 0 }, + { "begin": 1322, "end": 1327, "name": "AND", "source": 0 }, { - "begin": 5381, - "end": 5396, + "begin": 1322, + "end": 1337, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5381, "end": 5396, "name": "AND", "source": 0 }, + { "begin": 1322, "end": 1337, "name": "AND", "source": 0 }, { - "begin": 5381, - "end": 5396, + "begin": 1322, + "end": 1337, "name": "PUSH", "source": 0, "value": "70A08231" }, - { "begin": 5397, "end": 5400, "name": "DUP4", "source": 0 }, + { "begin": 1338, "end": 1341, "name": "DUP4", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5381, "end": 5401, "name": "MLOAD", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP3", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "MLOAD", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP3", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 5381, "end": 5401, "name": "AND", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "AND", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 5381, "end": 5401, "name": "SHL", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP2", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "MSTORE", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "SHL", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP2", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "MSTORE", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5381, "end": 5401, "name": "ADD", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "ADD", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH [tag]", "source": 0, "value": "118" }, - { "begin": 5381, "end": 5401, "name": "SWAP2", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "SWAP1", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "SWAP2", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "SWAP1", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH [tag]", "source": 0, "value": "119" }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "tag", "source": 0, "value": "118" }, - { "begin": 5381, "end": 5401, "name": "JUMPDEST", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "JUMPDEST", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5381, "end": 5401, "name": "MLOAD", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP1", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP4", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "SUB", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP2", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP7", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "GAS", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "STATICCALL", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "ISZERO", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP1", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "ISZERO", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "MLOAD", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP1", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP4", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "SUB", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP2", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP7", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "GAS", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "STATICCALL", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "ISZERO", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP1", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "ISZERO", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH [tag]", "source": 0, "value": "121" }, - { "begin": 5381, "end": 5401, "name": "JUMPI", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "JUMPI", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5381, "end": 5401, "name": "DUP1", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP1", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5381, "end": 5401, "name": "REVERT", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "REVERT", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "tag", "source": 0, "value": "121" }, - { "begin": 5381, "end": 5401, "name": "JUMPDEST", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "POP", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "POP", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "POP", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "POP", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "JUMPDEST", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "POP", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "POP", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "POP", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "POP", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5381, "end": 5401, "name": "MLOAD", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "MLOAD", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5381, "end": 5401, "name": "NOT", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "NOT", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5381, "end": 5401, "name": "DUP3", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "ADD", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "AND", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP3", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "ADD", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP1", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP3", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "ADD", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "AND", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP3", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "ADD", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP1", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5381, "end": 5401, "name": "MSTORE", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "POP", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "DUP2", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "ADD", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "SWAP1", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "MSTORE", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "POP", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "DUP2", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "ADD", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "SWAP1", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH [tag]", "source": 0, "value": "122" }, - { "begin": 5381, "end": 5401, "name": "SWAP2", "source": 0 }, - { "begin": 5381, "end": 5401, "name": "SWAP1", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "SWAP2", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "SWAP1", "source": 0 }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "PUSH [tag]", "source": 0, "value": "105" }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5381, - "end": 5401, + "begin": 1322, + "end": 1342, "name": "tag", "source": 0, "value": "122" }, - { "begin": 5381, "end": 5401, "name": "JUMPDEST", "source": 0 }, - { "begin": 5374, "end": 5401, "name": "SWAP1", "source": 0 }, - { "begin": 5374, "end": 5401, "name": "POP", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SWAP2", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "SWAP1", "source": 0 }, - { "begin": 5204, "end": 5416, "name": "POP", "source": 0 }, + { "begin": 1322, "end": 1342, "name": "JUMPDEST", "source": 0 }, + { "begin": 1315, "end": 1342, "name": "SWAP1", "source": 0 }, + { "begin": 1315, "end": 1342, "name": "POP", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP2", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "SWAP1", "source": 0 }, + { "begin": 1160, "end": 1349, "name": "POP", "source": 0 }, { - "begin": 5204, - "end": 5416, + "begin": 1160, + "end": 1349, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "tag", "source": 0, "value": "56" }, - { "begin": 4063, "end": 4135, "name": "JUMPDEST", "source": 0 }, + { "begin": 214, "end": 286, "name": "JUMPDEST", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4063, "end": 4135, "name": "DUP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SLOAD", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SWAP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "SLOAD", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP1", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4063, "end": 4135, "name": "EXP", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "SWAP1", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "DIV", "source": 0 }, + { "begin": 214, "end": 286, "name": "EXP", "source": 0 }, + { "begin": 214, "end": 286, "name": "SWAP1", "source": 0 }, + { "begin": 214, "end": 286, "name": "DIV", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4063, "end": 4135, "name": "AND", "source": 0 }, - { "begin": 4063, "end": 4135, "name": "DUP2", "source": 0 }, + { "begin": 214, "end": 286, "name": "AND", "source": 0 }, + { "begin": 214, "end": 286, "name": "DUP2", "source": 0 }, { - "begin": 4063, - "end": 4135, + "begin": 214, + "end": 286, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 6864, - "end": 7225, + "begin": 2655, + "end": 3064, "name": "tag", "source": 0, "value": "62" }, - { "begin": 6864, "end": 7225, "name": "JUMPDEST", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "JUMPDEST", "source": 0 }, { - "begin": 7003, - "end": 7007, + "begin": 2775, + "end": 2779, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7024, "end": 7035, "name": "DUP1", "source": 0 }, + { "begin": 2792, "end": 2803, "name": "DUP1", "source": 0 }, { - "begin": 7037, - "end": 7054, + "begin": 2805, + "end": 2822, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7058, - "end": 7070, + "begin": 2826, + "end": 2838, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 7058, - "end": 7070, + "begin": 2826, + "end": 2838, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7058, "end": 7070, "name": "SWAP1", "source": 0 }, - { "begin": 7058, "end": 7070, "name": "SLOAD", "source": 0 }, - { "begin": 7058, "end": 7070, "name": "SWAP1", "source": 0 }, + { "begin": 2826, "end": 2838, "name": "SWAP1", "source": 0 }, + { "begin": 2826, "end": 2838, "name": "SLOAD", "source": 0 }, + { "begin": 2826, "end": 2838, "name": "SWAP1", "source": 0 }, { - "begin": 7058, - "end": 7070, + "begin": 2826, + "end": 2838, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 7058, "end": 7070, "name": "EXP", "source": 0 }, - { "begin": 7058, "end": 7070, "name": "SWAP1", "source": 0 }, - { "begin": 7058, "end": 7070, "name": "DIV", "source": 0 }, + { "begin": 2826, "end": 2838, "name": "EXP", "source": 0 }, + { "begin": 2826, "end": 2838, "name": "SWAP1", "source": 0 }, + { "begin": 2826, "end": 2838, "name": "DIV", "source": 0 }, { - "begin": 7058, - "end": 7070, + "begin": 2826, + "end": 2838, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7058, "end": 7070, "name": "AND", "source": 0 }, + { "begin": 2826, "end": 2838, "name": "AND", "source": 0 }, { - "begin": 7058, - "end": 7083, + "begin": 2826, + "end": 2851, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7058, "end": 7083, "name": "AND", "source": 0 }, - { "begin": 7166, "end": 7170, "name": "DUP7", "source": 0 }, - { "begin": 7172, "end": 7174, "name": "DUP7", "source": 0 }, - { "begin": 7176, "end": 7181, "name": "DUP7", "source": 0 }, + { "begin": 2826, "end": 2851, "name": "AND", "source": 0 }, + { "begin": 2963, "end": 2967, "name": "DUP7", "source": 0 }, + { "begin": 2985, "end": 2987, "name": "DUP7", "source": 0 }, + { "begin": 3005, "end": 3010, "name": "DUP7", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7101, "end": 7182, "name": "MLOAD", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "MLOAD", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "24" }, - { "begin": 7101, "end": 7182, "name": "ADD", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "ADD", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH [tag]", "source": 0, "value": "124" }, - { "begin": 7101, "end": 7182, "name": "SWAP4", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "SWAP3", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "SWAP2", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "SWAP1", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "SWAP4", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "SWAP3", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "SWAP2", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "SWAP1", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH [tag]", "source": 0, "value": "108" }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "tag", "source": 0, "value": "124" }, - { "begin": 7101, "end": 7182, "name": "JUMPDEST", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "JUMPDEST", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7101, "end": 7182, "name": "MLOAD", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "MLOAD", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 7101, "end": 7182, "name": "DUP2", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "DUP4", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "SUB", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "SUB", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "DUP2", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "MSTORE", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "SWAP1", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP2", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP4", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "SUB", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "SUB", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP2", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "MSTORE", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "SWAP1", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7101, "end": 7182, "name": "MSTORE", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "MSTORE", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "23B872DD00000000000000000000000000000000000000000000000000000000" }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7101, "end": 7182, "name": "NOT", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "AND", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "NOT", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "AND", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 7101, "end": 7182, "name": "DUP3", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "ADD", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "DUP1", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "MLOAD", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP3", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "ADD", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP1", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "MLOAD", "source": 0 }, { - "begin": 7101, - "end": 7182, + "begin": 2865, + "end": 3024, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7101, "end": 7182, "name": "DUP4", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "DUP2", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "DUP4", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "AND", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "OR", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "DUP4", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "MSTORE", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "POP", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "POP", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "POP", "source": 0 }, - { "begin": 7101, "end": 7182, "name": "POP", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP4", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP2", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP4", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "AND", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "OR", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "DUP4", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "MSTORE", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "POP", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "POP", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "POP", "source": 0 }, + { "begin": 2865, "end": 3024, "name": "POP", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7058, "end": 7183, "name": "MLOAD", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "MLOAD", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH [tag]", "source": 0, "value": "125" }, - { "begin": 7058, "end": 7183, "name": "SWAP2", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "SWAP1", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "SWAP2", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "SWAP1", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH [tag]", "source": 0, "value": "126" }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "tag", "source": 0, "value": "125" }, - { "begin": 7058, "end": 7183, "name": "JUMPDEST", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "JUMPDEST", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7058, "end": 7183, "name": "MLOAD", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "DUP1", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "DUP4", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "SUB", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "DUP2", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "DUP6", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "GAS", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "MLOAD", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP1", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP4", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "SUB", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP2", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP6", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "GAS", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "DELEGATECALL", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "SWAP2", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "POP", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "POP", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "SWAP2", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "POP", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "POP", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "DUP1", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP1", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7058, "end": 7183, "name": "DUP2", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "EQ", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP2", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "EQ", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH [tag]", "source": 0, "value": "129" }, - { "begin": 7058, "end": 7183, "name": "JUMPI", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "JUMPI", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7058, "end": 7183, "name": "MLOAD", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "SWAP2", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "POP", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "MLOAD", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "SWAP2", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "POP", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 7058, "end": 7183, "name": "NOT", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "NOT", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "ADD", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "AND", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "DUP3", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "ADD", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "ADD", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "AND", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP3", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "ADD", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7058, "end": 7183, "name": "MSTORE", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "MSTORE", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "DUP3", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "MSTORE", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP3", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "MSTORE", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 7058, "end": 7183, "name": "DUP5", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "ADD", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "DUP5", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "ADD", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH [tag]", "source": 0, "value": "128" }, - { "begin": 7058, "end": 7183, "name": "JUMP", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "JUMP", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "tag", "source": 0, "value": "129" }, - { "begin": 7058, "end": 7183, "name": "JUMPDEST", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "JUMPDEST", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 7058, "end": 7183, "name": "SWAP2", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "POP", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "SWAP2", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "POP", "source": 0 }, { - "begin": 7058, - "end": 7183, + "begin": 2826, + "end": 3034, "name": "tag", "source": 0, "value": "128" }, - { "begin": 7058, "end": 7183, "name": "JUMPDEST", "source": 0 }, - { "begin": 7058, "end": 7183, "name": "POP", "source": 0 }, - { "begin": 7023, "end": 7183, "name": "SWAP2", "source": 0 }, - { "begin": 7023, "end": 7183, "name": "POP", "source": 0 }, - { "begin": 7023, "end": 7183, "name": "SWAP2", "source": 0 }, - { "begin": 7023, "end": 7183, "name": "POP", "source": 0 }, - { "begin": 7204, "end": 7210, "name": "DUP2", "source": 0 }, - { "begin": 7197, "end": 7210, "name": "SWAP3", "source": 0 }, - { "begin": 7197, "end": 7210, "name": "POP", "source": 0 }, - { "begin": 7197, "end": 7210, "name": "POP", "source": 0 }, - { "begin": 7197, "end": 7210, "name": "POP", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SWAP4", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "SWAP3", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "POP", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "POP", "source": 0 }, - { "begin": 6864, "end": 7225, "name": "POP", "source": 0 }, - { - "begin": 6864, - "end": 7225, + { "begin": 2826, "end": 3034, "name": "JUMPDEST", "source": 0 }, + { "begin": 2826, "end": 3034, "name": "POP", "source": 0 }, + { "begin": 2791, "end": 3034, "name": "SWAP2", "source": 0 }, + { "begin": 2791, "end": 3034, "name": "POP", "source": 0 }, + { "begin": 2791, "end": 3034, "name": "SWAP2", "source": 0 }, + { "begin": 2791, "end": 3034, "name": "POP", "source": 0 }, + { "begin": 3051, "end": 3057, "name": "DUP2", "source": 0 }, + { "begin": 3044, "end": 3057, "name": "SWAP3", "source": 0 }, + { "begin": 3044, "end": 3057, "name": "POP", "source": 0 }, + { "begin": 3044, "end": 3057, "name": "POP", "source": 0 }, + { "begin": 3044, "end": 3057, "name": "POP", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP4", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "SWAP3", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "POP", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "POP", "source": 0 }, + { "begin": 2655, "end": 3064, "name": "POP", "source": 0 }, + { + "begin": 2655, + "end": 3064, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "tag", "source": 0, "value": "66" }, - { "begin": 4542, "end": 4741, "name": "JUMPDEST", "source": 0 }, + { "begin": 617, "end": 792, "name": "JUMPDEST", "source": 0 }, { - "begin": 4592, - "end": 4605, + "begin": 667, + "end": 680, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 4712, - "end": 4717, + "begin": 771, + "end": 776, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4712, "end": 4717, "name": "DUP1", "source": 0 }, - { "begin": 4712, "end": 4717, "name": "SLOAD", "source": 0 }, - { "begin": 4712, "end": 4717, "name": "SWAP1", "source": 0 }, + { "begin": 771, "end": 776, "name": "DUP1", "source": 0 }, + { "begin": 771, "end": 776, "name": "SLOAD", "source": 0 }, + { "begin": 771, "end": 776, "name": "SWAP1", "source": 0 }, { - "begin": 4712, - "end": 4717, + "begin": 771, + "end": 776, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4712, "end": 4717, "name": "EXP", "source": 0 }, - { "begin": 4712, "end": 4717, "name": "SWAP1", "source": 0 }, - { "begin": 4712, "end": 4717, "name": "DIV", "source": 0 }, + { "begin": 771, "end": 776, "name": "EXP", "source": 0 }, + { "begin": 771, "end": 776, "name": "SWAP1", "source": 0 }, + { "begin": 771, "end": 776, "name": "DIV", "source": 0 }, { - "begin": 4712, - "end": 4717, + "begin": 771, + "end": 776, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4712, "end": 4717, "name": "AND", "source": 0 }, + { "begin": 771, "end": 776, "name": "AND", "source": 0 }, { - "begin": 4712, - "end": 4724, + "begin": 771, + "end": 783, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4712, "end": 4724, "name": "AND", "source": 0 }, + { "begin": 771, "end": 783, "name": "AND", "source": 0 }, { - "begin": 4712, - "end": 4724, + "begin": 771, + "end": 783, "name": "PUSH", "source": 0, "value": "95D89B41" }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4712, "end": 4726, "name": "MLOAD", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP2", "source": 0 }, + { "begin": 771, "end": 785, "name": "MLOAD", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP2", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 4712, "end": 4726, "name": "AND", "source": 0 }, + { "begin": 771, "end": 785, "name": "AND", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 4712, "end": 4726, "name": "SHL", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP2", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "MSTORE", "source": 0 }, + { "begin": 771, "end": 785, "name": "SHL", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP2", "source": 0 }, + { "begin": 771, "end": 785, "name": "MSTORE", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4712, "end": 4726, "name": "ADD", "source": 0 }, + { "begin": 771, "end": 785, "name": "ADD", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4712, "end": 4726, "name": "MLOAD", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP1", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP4", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "SUB", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP2", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP7", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "GAS", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "STATICCALL", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "ISZERO", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP1", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "ISZERO", "source": 0 }, + { "begin": 771, "end": 785, "name": "MLOAD", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP1", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP4", "source": 0 }, + { "begin": 771, "end": 785, "name": "SUB", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP2", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP7", "source": 0 }, + { "begin": 771, "end": 785, "name": "GAS", "source": 0 }, + { "begin": 771, "end": 785, "name": "STATICCALL", "source": 0 }, + { "begin": 771, "end": 785, "name": "ISZERO", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP1", "source": 0 }, + { "begin": 771, "end": 785, "name": "ISZERO", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH [tag]", "source": 0, "value": "132" }, - { "begin": 4712, "end": 4726, "name": "JUMPI", "source": 0 }, + { "begin": 771, "end": 785, "name": "JUMPI", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4712, "end": 4726, "name": "DUP1", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP1", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4712, "end": 4726, "name": "REVERT", "source": 0 }, + { "begin": 771, "end": 785, "name": "REVERT", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "tag", "source": 0, "value": "132" }, - { "begin": 4712, "end": 4726, "name": "JUMPDEST", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "POP", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "POP", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "POP", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "POP", "source": 0 }, + { "begin": 771, "end": 785, "name": "JUMPDEST", "source": 0 }, + { "begin": 771, "end": 785, "name": "POP", "source": 0 }, + { "begin": 771, "end": 785, "name": "POP", "source": 0 }, + { "begin": 771, "end": 785, "name": "POP", "source": 0 }, + { "begin": 771, "end": 785, "name": "POP", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4712, "end": 4726, "name": "MLOAD", "source": 0 }, + { "begin": 771, "end": 785, "name": "MLOAD", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4712, "end": 4726, "name": "DUP3", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP3", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 4712, "end": 4726, "name": "NOT", "source": 0 }, + { "begin": 771, "end": 785, "name": "NOT", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 4712, "end": 4726, "name": "DUP3", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "ADD", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "AND", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP3", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "ADD", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP1", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP3", "source": 0 }, + { "begin": 771, "end": 785, "name": "ADD", "source": 0 }, + { "begin": 771, "end": 785, "name": "AND", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP3", "source": 0 }, + { "begin": 771, "end": 785, "name": "ADD", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP1", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4712, "end": 4726, "name": "MSTORE", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "POP", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "DUP2", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "ADD", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "SWAP1", "source": 0 }, + { "begin": 771, "end": 785, "name": "MSTORE", "source": 0 }, + { "begin": 771, "end": 785, "name": "POP", "source": 0 }, + { "begin": 771, "end": 785, "name": "DUP2", "source": 0 }, + { "begin": 771, "end": 785, "name": "ADD", "source": 0 }, + { "begin": 771, "end": 785, "name": "SWAP1", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH [tag]", "source": 0, "value": "133" }, - { "begin": 4712, "end": 4726, "name": "SWAP2", "source": 0 }, - { "begin": 4712, "end": 4726, "name": "SWAP1", "source": 0 }, + { "begin": 771, "end": 785, "name": "SWAP2", "source": 0 }, + { "begin": 771, "end": 785, "name": "SWAP1", "source": 0 }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "PUSH [tag]", "source": 0, "value": "93" }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4712, - "end": 4726, + "begin": 771, + "end": 785, "name": "tag", "source": 0, "value": "133" }, - { "begin": 4712, "end": 4726, "name": "JUMPDEST", "source": 0 }, - { "begin": 4705, "end": 4726, "name": "SWAP1", "source": 0 }, - { "begin": 4705, "end": 4726, "name": "POP", "source": 0 }, - { "begin": 4542, "end": 4741, "name": "SWAP1", "source": 0 }, + { "begin": 771, "end": 785, "name": "JUMPDEST", "source": 0 }, + { "begin": 764, "end": 785, "name": "SWAP1", "source": 0 }, + { "begin": 764, "end": 785, "name": "POP", "source": 0 }, + { "begin": 617, "end": 792, "name": "SWAP1", "source": 0 }, { - "begin": 4542, - "end": 4741, + "begin": 617, + "end": 792, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5833, - "end": 6109, + "begin": 1705, + "end": 1990, "name": "tag", "source": 0, "value": "71" }, - { "begin": 5833, "end": 6109, "name": "JUMPDEST", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "JUMPDEST", "source": 0 }, { - "begin": 5905, - "end": 5909, + "begin": 1793, + "end": 1797, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5926, "end": 5937, "name": "DUP1", "source": 0 }, + { "begin": 1814, "end": 1825, "name": "DUP1", "source": 0 }, { - "begin": 5939, - "end": 5956, + "begin": 1827, + "end": 1844, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 5960, - "end": 5972, + "begin": 1848, + "end": 1860, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 5960, - "end": 5972, + "begin": 1848, + "end": 1860, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5960, "end": 5972, "name": "SWAP1", "source": 0 }, - { "begin": 5960, "end": 5972, "name": "SLOAD", "source": 0 }, - { "begin": 5960, "end": 5972, "name": "SWAP1", "source": 0 }, + { "begin": 1848, "end": 1860, "name": "SWAP1", "source": 0 }, + { "begin": 1848, "end": 1860, "name": "SLOAD", "source": 0 }, + { "begin": 1848, "end": 1860, "name": "SWAP1", "source": 0 }, { - "begin": 5960, - "end": 5972, + "begin": 1848, + "end": 1860, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5960, "end": 5972, "name": "EXP", "source": 0 }, - { "begin": 5960, "end": 5972, "name": "SWAP1", "source": 0 }, - { "begin": 5960, "end": 5972, "name": "DIV", "source": 0 }, + { "begin": 1848, "end": 1860, "name": "EXP", "source": 0 }, + { "begin": 1848, "end": 1860, "name": "SWAP1", "source": 0 }, + { "begin": 1848, "end": 1860, "name": "DIV", "source": 0 }, { - "begin": 5960, - "end": 5972, + "begin": 1848, + "end": 1860, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5960, "end": 5972, "name": "AND", "source": 0 }, + { "begin": 1848, "end": 1860, "name": "AND", "source": 0 }, { - "begin": 5960, - "end": 5985, + "begin": 1848, + "end": 1873, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5960, "end": 5985, "name": "AND", "source": 0 }, - { "begin": 6056, "end": 6058, "name": "DUP6", "source": 0 }, - { "begin": 6060, "end": 6065, "name": "DUP6", "source": 0 }, + { "begin": 1848, "end": 1873, "name": "AND", "source": 0 }, + { "begin": 1940, "end": 1942, "name": "DUP6", "source": 0 }, + { "begin": 1944, "end": 1949, "name": "DUP6", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6003, "end": 6066, "name": "MLOAD", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "MLOAD", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "24" }, - { "begin": 6003, "end": 6066, "name": "ADD", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "ADD", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH [tag]", "source": 0, "value": "135" }, - { "begin": 6003, "end": 6066, "name": "SWAP3", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "SWAP2", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "SWAP1", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "SWAP3", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "SWAP2", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "SWAP1", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH [tag]", "source": 0, "value": "96" }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "tag", "source": 0, "value": "135" }, - { "begin": 6003, "end": 6066, "name": "JUMPDEST", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "JUMPDEST", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6003, "end": 6066, "name": "MLOAD", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "MLOAD", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 6003, "end": 6066, "name": "DUP2", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "DUP4", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "SUB", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "SUB", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "DUP2", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "MSTORE", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "SWAP1", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP2", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP4", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "SUB", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "SUB", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP2", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "MSTORE", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "SWAP1", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6003, "end": 6066, "name": "MSTORE", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "MSTORE", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "A9059CBB00000000000000000000000000000000000000000000000000000000" }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6003, "end": 6066, "name": "NOT", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "AND", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "NOT", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "AND", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 6003, "end": 6066, "name": "DUP3", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "ADD", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "DUP1", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "MLOAD", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP3", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "ADD", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP1", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "MLOAD", "source": 0 }, { - "begin": 6003, - "end": 6066, + "begin": 1887, + "end": 1950, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6003, "end": 6066, "name": "DUP4", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "DUP2", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "DUP4", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "AND", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "OR", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "DUP4", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "MSTORE", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "POP", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "POP", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "POP", "source": 0 }, - { "begin": 6003, "end": 6066, "name": "POP", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP4", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP2", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP4", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "AND", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "OR", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "DUP4", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "MSTORE", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "POP", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "POP", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "POP", "source": 0 }, + { "begin": 1887, "end": 1950, "name": "POP", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5960, "end": 6067, "name": "MLOAD", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "MLOAD", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH [tag]", "source": 0, "value": "136" }, - { "begin": 5960, "end": 6067, "name": "SWAP2", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "SWAP1", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "SWAP2", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "SWAP1", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH [tag]", "source": 0, "value": "126" }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "tag", "source": 0, "value": "136" }, - { "begin": 5960, "end": 6067, "name": "JUMPDEST", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "JUMPDEST", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5960, "end": 6067, "name": "MLOAD", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "DUP1", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "DUP4", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "SUB", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "DUP2", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "DUP6", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "GAS", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "MLOAD", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP1", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP4", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "SUB", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP2", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP6", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "GAS", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "DELEGATECALL", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "SWAP2", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "POP", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "POP", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "SWAP2", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "POP", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "POP", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "DUP1", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP1", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5960, "end": 6067, "name": "DUP2", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "EQ", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP2", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "EQ", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH [tag]", "source": 0, "value": "139" }, - { "begin": 5960, "end": 6067, "name": "JUMPI", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "JUMPI", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5960, "end": 6067, "name": "MLOAD", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "SWAP2", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "POP", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "MLOAD", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "SWAP2", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "POP", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5960, "end": 6067, "name": "NOT", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "NOT", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "ADD", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "AND", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "DUP3", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "ADD", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "ADD", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "AND", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP3", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "ADD", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5960, "end": 6067, "name": "MSTORE", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "MSTORE", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "DUP3", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "MSTORE", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP3", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "MSTORE", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 5960, "end": 6067, "name": "DUP5", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "ADD", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "DUP5", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "ADD", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH [tag]", "source": 0, "value": "138" }, - { "begin": 5960, "end": 6067, "name": "JUMP", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "JUMP", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "tag", "source": 0, "value": "139" }, - { "begin": 5960, "end": 6067, "name": "JUMPDEST", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "JUMPDEST", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 5960, "end": 6067, "name": "SWAP2", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "POP", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "SWAP2", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "POP", "source": 0 }, { - "begin": 5960, - "end": 6067, + "begin": 1848, + "end": 1960, "name": "tag", "source": 0, "value": "138" }, - { "begin": 5960, "end": 6067, "name": "JUMPDEST", "source": 0 }, - { "begin": 5960, "end": 6067, "name": "POP", "source": 0 }, - { "begin": 5925, "end": 6067, "name": "SWAP2", "source": 0 }, - { "begin": 5925, "end": 6067, "name": "POP", "source": 0 }, - { "begin": 5925, "end": 6067, "name": "SWAP2", "source": 0 }, - { "begin": 5925, "end": 6067, "name": "POP", "source": 0 }, - { "begin": 6088, "end": 6094, "name": "DUP2", "source": 0 }, - { "begin": 6081, "end": 6094, "name": "SWAP3", "source": 0 }, - { "begin": 6081, "end": 6094, "name": "POP", "source": 0 }, - { "begin": 6081, "end": 6094, "name": "POP", "source": 0 }, - { "begin": 6081, "end": 6094, "name": "POP", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SWAP3", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "SWAP2", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "POP", "source": 0 }, - { "begin": 5833, "end": 6109, "name": "POP", "source": 0 }, - { - "begin": 5833, - "end": 6109, + { "begin": 1848, "end": 1960, "name": "JUMPDEST", "source": 0 }, + { "begin": 1848, "end": 1960, "name": "POP", "source": 0 }, + { "begin": 1813, "end": 1960, "name": "SWAP2", "source": 0 }, + { "begin": 1813, "end": 1960, "name": "POP", "source": 0 }, + { "begin": 1813, "end": 1960, "name": "SWAP2", "source": 0 }, + { "begin": 1813, "end": 1960, "name": "POP", "source": 0 }, + { "begin": 1977, "end": 1983, "name": "DUP2", "source": 0 }, + { "begin": 1970, "end": 1983, "name": "SWAP3", "source": 0 }, + { "begin": 1970, "end": 1983, "name": "POP", "source": 0 }, + { "begin": 1970, "end": 1983, "name": "POP", "source": 0 }, + { "begin": 1970, "end": 1983, "name": "POP", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP3", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "SWAP2", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "POP", "source": 0 }, + { "begin": 1705, "end": 1990, "name": "POP", "source": 0 }, + { + "begin": 1705, + "end": 1990, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "tag", "source": 0, "value": "76" }, - { "begin": 5664, "end": 5807, "name": "JUMPDEST", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "JUMPDEST", "source": 0 }, { - "begin": 5736, - "end": 5740, + "begin": 1640, + "end": 1644, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5767, "end": 5772, "name": "DUP1", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "DUP1", "source": 0 }, { - "begin": 5767, - "end": 5772, + "begin": 1667, + "end": 1672, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5767, "end": 5772, "name": "SWAP1", "source": 0 }, - { "begin": 5767, "end": 5772, "name": "SLOAD", "source": 0 }, - { "begin": 5767, "end": 5772, "name": "SWAP1", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "SWAP1", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "SLOAD", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "SWAP1", "source": 0 }, { - "begin": 5767, - "end": 5772, + "begin": 1667, + "end": 1672, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5767, "end": 5772, "name": "EXP", "source": 0 }, - { "begin": 5767, "end": 5772, "name": "SWAP1", "source": 0 }, - { "begin": 5767, "end": 5772, "name": "DIV", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "EXP", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "SWAP1", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "DIV", "source": 0 }, { - "begin": 5767, - "end": 5772, + "begin": 1667, + "end": 1672, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5767, "end": 5772, "name": "AND", "source": 0 }, + { "begin": 1667, "end": 1672, "name": "AND", "source": 0 }, { - "begin": 5767, - "end": 5781, + "begin": 1667, + "end": 1681, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5767, "end": 5781, "name": "AND", "source": 0 }, + { "begin": 1667, "end": 1681, "name": "AND", "source": 0 }, { - "begin": 5767, - "end": 5781, + "begin": 1667, + "end": 1681, "name": "PUSH", "source": 0, "value": "A9059CBB" }, - { "begin": 5782, "end": 5784, "name": "DUP5", "source": 0 }, - { "begin": 5786, "end": 5791, "name": "DUP5", "source": 0 }, + { "begin": 1682, "end": 1684, "name": "DUP5", "source": 0 }, + { "begin": 1686, "end": 1691, "name": "DUP5", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5767, "end": 5792, "name": "MLOAD", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP4", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "MLOAD", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP4", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 5767, "end": 5792, "name": "AND", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "AND", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 5767, "end": 5792, "name": "SHL", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP2", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "MSTORE", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SHL", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP2", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "MSTORE", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5767, "end": 5792, "name": "ADD", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "ADD", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH [tag]", "source": 0, "value": "141" }, - { "begin": 5767, "end": 5792, "name": "SWAP3", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "SWAP2", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "SWAP1", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SWAP3", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SWAP2", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SWAP1", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH [tag]", "source": 0, "value": "96" }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "tag", "source": 0, "value": "141" }, - { "begin": 5767, "end": 5792, "name": "JUMPDEST", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "JUMPDEST", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5767, "end": 5792, "name": "MLOAD", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP1", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP4", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "SUB", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP2", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "MLOAD", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP1", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP4", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SUB", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP2", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5767, "end": 5792, "name": "DUP8", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "GAS", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "CALL", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "ISZERO", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP1", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "ISZERO", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP8", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "GAS", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "CALL", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "ISZERO", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP1", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "ISZERO", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH [tag]", "source": 0, "value": "143" }, - { "begin": 5767, "end": 5792, "name": "JUMPI", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "JUMPI", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5767, "end": 5792, "name": "DUP1", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP1", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5767, "end": 5792, "name": "REVERT", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "REVERT", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "tag", "source": 0, "value": "143" }, - { "begin": 5767, "end": 5792, "name": "JUMPDEST", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "POP", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "POP", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "POP", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "POP", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "JUMPDEST", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "POP", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "POP", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "POP", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "POP", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5767, "end": 5792, "name": "MLOAD", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "MLOAD", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5767, "end": 5792, "name": "NOT", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "NOT", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5767, "end": 5792, "name": "DUP3", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "ADD", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "AND", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP3", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "ADD", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP1", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP3", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "ADD", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "AND", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP3", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "ADD", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP1", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5767, "end": 5792, "name": "MSTORE", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "POP", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "DUP2", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "ADD", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "SWAP1", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "MSTORE", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "POP", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "DUP2", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "ADD", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SWAP1", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH [tag]", "source": 0, "value": "144" }, - { "begin": 5767, "end": 5792, "name": "SWAP2", "source": 0 }, - { "begin": 5767, "end": 5792, "name": "SWAP1", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SWAP2", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "SWAP1", "source": 0 }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "PUSH [tag]", "source": 0, "value": "100" }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5767, - "end": 5792, + "begin": 1667, + "end": 1692, "name": "tag", "source": 0, "value": "144" }, - { "begin": 5767, "end": 5792, "name": "JUMPDEST", "source": 0 }, - { "begin": 5760, "end": 5792, "name": "SWAP1", "source": 0 }, - { "begin": 5760, "end": 5792, "name": "POP", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SWAP3", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "POP", "source": 0 }, - { "begin": 5664, "end": 5807, "name": "POP", "source": 0 }, + { "begin": 1667, "end": 1692, "name": "JUMPDEST", "source": 0 }, + { "begin": 1660, "end": 1692, "name": "SWAP1", "source": 0 }, + { "begin": 1660, "end": 1692, "name": "POP", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP3", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "SWAP2", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "POP", "source": 0 }, + { "begin": 1544, "end": 1699, "name": "POP", "source": 0 }, { - "begin": 5664, - "end": 5807, + "begin": 1544, + "end": 1699, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "tag", "source": 0, "value": "82" }, - { "begin": 5442, "end": 5650, "name": "JUMPDEST", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "JUMPDEST", "source": 0 }, { - "begin": 5571, - "end": 5578, + "begin": 1470, + "end": 1477, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5604, "end": 5609, "name": "DUP1", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "DUP1", "source": 0 }, { - "begin": 5604, - "end": 5609, + "begin": 1500, + "end": 1505, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5604, "end": 5609, "name": "SWAP1", "source": 0 }, - { "begin": 5604, "end": 5609, "name": "SLOAD", "source": 0 }, - { "begin": 5604, "end": 5609, "name": "SWAP1", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "SWAP1", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "SLOAD", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "SWAP1", "source": 0 }, { - "begin": 5604, - "end": 5609, + "begin": 1500, + "end": 1505, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5604, "end": 5609, "name": "EXP", "source": 0 }, - { "begin": 5604, "end": 5609, "name": "SWAP1", "source": 0 }, - { "begin": 5604, "end": 5609, "name": "DIV", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "EXP", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "SWAP1", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "DIV", "source": 0 }, { - "begin": 5604, - "end": 5609, + "begin": 1500, + "end": 1505, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5604, "end": 5609, "name": "AND", "source": 0 }, + { "begin": 1500, "end": 1505, "name": "AND", "source": 0 }, { - "begin": 5604, - "end": 5619, + "begin": 1500, + "end": 1515, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5604, "end": 5619, "name": "AND", "source": 0 }, + { "begin": 1500, "end": 1515, "name": "AND", "source": 0 }, { - "begin": 5604, - "end": 5619, + "begin": 1500, + "end": 1515, "name": "PUSH", "source": 0, "value": "DD62ED3E" }, - { "begin": 5620, "end": 5625, "name": "DUP5", "source": 0 }, - { "begin": 5627, "end": 5634, "name": "DUP5", "source": 0 }, + { "begin": 1516, "end": 1521, "name": "DUP5", "source": 0 }, + { "begin": 1523, "end": 1530, "name": "DUP5", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5604, "end": 5635, "name": "MLOAD", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP4", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "MLOAD", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP4", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 5604, "end": 5635, "name": "AND", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "AND", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 5604, "end": 5635, "name": "SHL", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP2", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "MSTORE", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SHL", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP2", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "MSTORE", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5604, "end": 5635, "name": "ADD", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "ADD", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH [tag]", "source": 0, "value": "146" }, - { "begin": 5604, "end": 5635, "name": "SWAP3", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "SWAP2", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "SWAP1", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SWAP3", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SWAP2", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SWAP1", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH [tag]", "source": 0, "value": "147" }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "tag", "source": 0, "value": "146" }, - { "begin": 5604, "end": 5635, "name": "JUMPDEST", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "JUMPDEST", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5604, "end": 5635, "name": "MLOAD", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP1", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP4", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "SUB", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP2", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP7", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "GAS", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "STATICCALL", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "ISZERO", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP1", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "ISZERO", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "MLOAD", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP1", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP4", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SUB", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP2", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP7", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "GAS", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "STATICCALL", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "ISZERO", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP1", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "ISZERO", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH [tag]", "source": 0, "value": "149" }, - { "begin": 5604, "end": 5635, "name": "JUMPI", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "JUMPI", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5604, "end": 5635, "name": "DUP1", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP1", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5604, "end": 5635, "name": "REVERT", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "REVERT", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "tag", "source": 0, "value": "149" }, - { "begin": 5604, "end": 5635, "name": "JUMPDEST", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "POP", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "POP", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "POP", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "POP", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "JUMPDEST", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "POP", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "POP", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "POP", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "POP", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5604, "end": 5635, "name": "MLOAD", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "MLOAD", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5604, "end": 5635, "name": "NOT", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "NOT", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 5604, "end": 5635, "name": "DUP3", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "ADD", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "AND", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP3", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "ADD", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP1", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP3", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "ADD", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "AND", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP3", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "ADD", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP1", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5604, "end": 5635, "name": "MSTORE", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "POP", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "DUP2", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "ADD", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "SWAP1", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "MSTORE", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "POP", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "DUP2", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "ADD", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SWAP1", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH [tag]", "source": 0, "value": "150" }, - { "begin": 5604, "end": 5635, "name": "SWAP2", "source": 0 }, - { "begin": 5604, "end": 5635, "name": "SWAP1", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SWAP2", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "SWAP1", "source": 0 }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "PUSH [tag]", "source": 0, "value": "105" }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5604, - "end": 5635, + "begin": 1500, + "end": 1531, "name": "tag", "source": 0, "value": "150" }, - { "begin": 5604, "end": 5635, "name": "JUMPDEST", "source": 0 }, - { "begin": 5597, "end": 5635, "name": "SWAP1", "source": 0 }, - { "begin": 5597, "end": 5635, "name": "POP", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SWAP3", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "SWAP2", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "POP", "source": 0 }, - { "begin": 5442, "end": 5650, "name": "POP", "source": 0 }, + { "begin": 1500, "end": 1531, "name": "JUMPDEST", "source": 0 }, + { "begin": 1493, "end": 1531, "name": "SWAP1", "source": 0 }, + { "begin": 1493, "end": 1531, "name": "POP", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP3", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "SWAP2", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "POP", "source": 0 }, + { "begin": 1355, "end": 1538, "name": "POP", "source": 0 }, { - "begin": 5442, - "end": 5650, + "begin": 1355, + "end": 1538, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 6296, - "end": 6580, + "begin": 2165, + "end": 2458, "name": "tag", "source": 0, "value": "87" }, - { "begin": 6296, "end": 6580, "name": "JUMPDEST", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "JUMPDEST", "source": 0 }, { - "begin": 6372, - "end": 6376, + "begin": 2257, + "end": 2261, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6393, "end": 6404, "name": "DUP1", "source": 0 }, + { "begin": 2278, "end": 2289, "name": "DUP1", "source": 0 }, { - "begin": 6406, - "end": 6423, + "begin": 2291, + "end": 2308, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6427, - "end": 6439, + "begin": 2312, + "end": 2324, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 6427, - "end": 6439, + "begin": 2312, + "end": 2324, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6427, "end": 6439, "name": "SWAP1", "source": 0 }, - { "begin": 6427, "end": 6439, "name": "SLOAD", "source": 0 }, - { "begin": 6427, "end": 6439, "name": "SWAP1", "source": 0 }, + { "begin": 2312, "end": 2324, "name": "SWAP1", "source": 0 }, + { "begin": 2312, "end": 2324, "name": "SLOAD", "source": 0 }, + { "begin": 2312, "end": 2324, "name": "SWAP1", "source": 0 }, { - "begin": 6427, - "end": 6439, + "begin": 2312, + "end": 2324, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6427, "end": 6439, "name": "EXP", "source": 0 }, - { "begin": 6427, "end": 6439, "name": "SWAP1", "source": 0 }, - { "begin": 6427, "end": 6439, "name": "DIV", "source": 0 }, + { "begin": 2312, "end": 2324, "name": "EXP", "source": 0 }, + { "begin": 2312, "end": 2324, "name": "SWAP1", "source": 0 }, + { "begin": 2312, "end": 2324, "name": "DIV", "source": 0 }, { - "begin": 6427, - "end": 6439, + "begin": 2312, + "end": 2324, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6427, "end": 6439, "name": "AND", "source": 0 }, + { "begin": 2312, "end": 2324, "name": "AND", "source": 0 }, { - "begin": 6427, - "end": 6452, + "begin": 2312, + "end": 2337, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6427, "end": 6452, "name": "AND", "source": 0 }, - { "begin": 6522, "end": 6529, "name": "DUP6", "source": 0 }, - { "begin": 6531, "end": 6536, "name": "DUP6", "source": 0 }, + { "begin": 2312, "end": 2337, "name": "AND", "source": 0 }, + { "begin": 2403, "end": 2410, "name": "DUP6", "source": 0 }, + { "begin": 2412, "end": 2417, "name": "DUP6", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6470, "end": 6537, "name": "MLOAD", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "MLOAD", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "24" }, - { "begin": 6470, "end": 6537, "name": "ADD", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "ADD", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH [tag]", "source": 0, "value": "152" }, - { "begin": 6470, "end": 6537, "name": "SWAP3", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "SWAP2", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "SWAP1", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "SWAP3", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "SWAP2", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "SWAP1", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH [tag]", "source": 0, "value": "96" }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "tag", "source": 0, "value": "152" }, - { "begin": 6470, "end": 6537, "name": "JUMPDEST", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "JUMPDEST", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6470, "end": 6537, "name": "MLOAD", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "MLOAD", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 6470, "end": 6537, "name": "DUP2", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "DUP4", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "SUB", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "SUB", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "DUP2", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "MSTORE", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "SWAP1", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP2", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP4", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "SUB", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "SUB", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP2", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "MSTORE", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "SWAP1", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6470, "end": 6537, "name": "MSTORE", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "MSTORE", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "95EA7B300000000000000000000000000000000000000000000000000000000" }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6470, "end": 6537, "name": "NOT", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "AND", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "NOT", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "AND", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 6470, "end": 6537, "name": "DUP3", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "ADD", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "DUP1", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "MLOAD", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP3", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "ADD", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP1", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "MLOAD", "source": 0 }, { - "begin": 6470, - "end": 6537, + "begin": 2351, + "end": 2418, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6470, "end": 6537, "name": "DUP4", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "DUP2", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "DUP4", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "AND", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "OR", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "DUP4", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "MSTORE", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "POP", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "POP", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "POP", "source": 0 }, - { "begin": 6470, "end": 6537, "name": "POP", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP4", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP2", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP4", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "AND", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "OR", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "DUP4", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "MSTORE", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "POP", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "POP", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "POP", "source": 0 }, + { "begin": 2351, "end": 2418, "name": "POP", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6427, "end": 6538, "name": "MLOAD", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "MLOAD", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH [tag]", "source": 0, "value": "153" }, - { "begin": 6427, "end": 6538, "name": "SWAP2", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "SWAP1", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "SWAP2", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "SWAP1", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH [tag]", "source": 0, "value": "126" }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "tag", "source": 0, "value": "153" }, - { "begin": 6427, "end": 6538, "name": "JUMPDEST", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "JUMPDEST", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6427, "end": 6538, "name": "MLOAD", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "DUP1", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "DUP4", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "SUB", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "DUP2", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "DUP6", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "GAS", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "MLOAD", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP1", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP4", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "SUB", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP2", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP6", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "GAS", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "DELEGATECALL", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "SWAP2", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "POP", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "POP", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "SWAP2", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "POP", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "POP", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "DUP1", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP1", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6427, "end": 6538, "name": "DUP2", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "EQ", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP2", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "EQ", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH [tag]", "source": 0, "value": "156" }, - { "begin": 6427, "end": 6538, "name": "JUMPI", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "JUMPI", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6427, "end": 6538, "name": "MLOAD", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "SWAP2", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "POP", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "MLOAD", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "SWAP2", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "POP", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 6427, "end": 6538, "name": "NOT", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "NOT", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "ADD", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "AND", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "DUP3", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "ADD", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "ADD", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "AND", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP3", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "ADD", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6427, "end": 6538, "name": "MSTORE", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "MSTORE", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "DUP3", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "MSTORE", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP3", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "MSTORE", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 6427, "end": 6538, "name": "DUP5", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "ADD", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "DUP5", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "ADD", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH [tag]", "source": 0, "value": "155" }, - { "begin": 6427, "end": 6538, "name": "JUMP", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "JUMP", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "tag", "source": 0, "value": "156" }, - { "begin": 6427, "end": 6538, "name": "JUMPDEST", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "JUMPDEST", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 6427, "end": 6538, "name": "SWAP2", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "POP", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "SWAP2", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "POP", "source": 0 }, { - "begin": 6427, - "end": 6538, + "begin": 2312, + "end": 2428, "name": "tag", "source": 0, "value": "155" }, - { "begin": 6427, "end": 6538, "name": "JUMPDEST", "source": 0 }, - { "begin": 6427, "end": 6538, "name": "POP", "source": 0 }, - { "begin": 6392, "end": 6538, "name": "SWAP2", "source": 0 }, - { "begin": 6392, "end": 6538, "name": "POP", "source": 0 }, - { "begin": 6392, "end": 6538, "name": "SWAP2", "source": 0 }, - { "begin": 6392, "end": 6538, "name": "POP", "source": 0 }, - { "begin": 6559, "end": 6565, "name": "DUP2", "source": 0 }, - { "begin": 6552, "end": 6565, "name": "SWAP3", "source": 0 }, - { "begin": 6552, "end": 6565, "name": "POP", "source": 0 }, - { "begin": 6552, "end": 6565, "name": "POP", "source": 0 }, - { "begin": 6552, "end": 6565, "name": "POP", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SWAP3", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "SWAP2", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "POP", "source": 0 }, - { "begin": 6296, "end": 6580, "name": "POP", "source": 0 }, - { - "begin": 6296, - "end": 6580, + { "begin": 2312, "end": 2428, "name": "JUMPDEST", "source": 0 }, + { "begin": 2312, "end": 2428, "name": "POP", "source": 0 }, + { "begin": 2277, "end": 2428, "name": "SWAP2", "source": 0 }, + { "begin": 2277, "end": 2428, "name": "POP", "source": 0 }, + { "begin": 2277, "end": 2428, "name": "SWAP2", "source": 0 }, + { "begin": 2277, "end": 2428, "name": "POP", "source": 0 }, + { "begin": 2445, "end": 2451, "name": "DUP2", "source": 0 }, + { "begin": 2438, "end": 2451, "name": "SWAP3", "source": 0 }, + { "begin": 2438, "end": 2451, "name": "POP", "source": 0 }, + { "begin": 2438, "end": 2451, "name": "POP", "source": 0 }, + { "begin": 2438, "end": 2451, "name": "POP", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP3", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "SWAP2", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "POP", "source": 0 }, + { "begin": 2165, "end": 2458, "name": "POP", "source": 0 }, + { + "begin": 2165, + "end": 2458, "name": "JUMP", "source": 0, "value": "[out]" @@ -13886,4831 +13886,4831 @@ "begin": 7, "end": 106, "name": "tag", - "source": 1, + "source": 2, "value": "157" }, - { "begin": 7, "end": 106, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 106, "name": "JUMPDEST", "source": 2 }, { "begin": 59, "end": 65, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 93, "end": 98, "name": "DUP2", "source": 1 }, - { "begin": 87, "end": 99, "name": "MLOAD", "source": 1 }, - { "begin": 77, "end": 99, "name": "SWAP1", "source": 1 }, - { "begin": 77, "end": 99, "name": "POP", "source": 1 }, - { "begin": 7, "end": 106, "name": "SWAP2", "source": 1 }, - { "begin": 7, "end": 106, "name": "SWAP1", "source": 1 }, - { "begin": 7, "end": 106, "name": "POP", "source": 1 }, + { "begin": 93, "end": 98, "name": "DUP2", "source": 2 }, + { "begin": 87, "end": 99, "name": "MLOAD", "source": 2 }, + { "begin": 77, "end": 99, "name": "SWAP1", "source": 2 }, + { "begin": 77, "end": 99, "name": "POP", "source": 2 }, + { "begin": 7, "end": 106, "name": "SWAP2", "source": 2 }, + { "begin": 7, "end": 106, "name": "SWAP1", "source": 2 }, + { "begin": 7, "end": 106, "name": "POP", "source": 2 }, { "begin": 7, "end": 106, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 112, "end": 281, "name": "tag", - "source": 1, + "source": 2, "value": "158" }, - { "begin": 112, "end": 281, "name": "JUMPDEST", "source": 1 }, + { "begin": 112, "end": 281, "name": "JUMPDEST", "source": 2 }, { "begin": 196, "end": 207, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 230, "end": 236, "name": "DUP3", "source": 1 }, - { "begin": 225, "end": 228, "name": "DUP3", "source": 1 }, - { "begin": 218, "end": 237, "name": "MSTORE", "source": 1 }, + { "begin": 230, "end": 236, "name": "DUP3", "source": 2 }, + { "begin": 225, "end": 228, "name": "DUP3", "source": 2 }, + { "begin": 218, "end": 237, "name": "MSTORE", "source": 2 }, { "begin": 270, "end": 274, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 265, "end": 268, "name": "DUP3", "source": 1 }, - { "begin": 261, "end": 275, "name": "ADD", "source": 1 }, - { "begin": 246, "end": 275, "name": "SWAP1", "source": 1 }, - { "begin": 246, "end": 275, "name": "POP", "source": 1 }, - { "begin": 112, "end": 281, "name": "SWAP3", "source": 1 }, - { "begin": 112, "end": 281, "name": "SWAP2", "source": 1 }, - { "begin": 112, "end": 281, "name": "POP", "source": 1 }, - { "begin": 112, "end": 281, "name": "POP", "source": 1 }, + { "begin": 265, "end": 268, "name": "DUP3", "source": 2 }, + { "begin": 261, "end": 275, "name": "ADD", "source": 2 }, + { "begin": 246, "end": 275, "name": "SWAP1", "source": 2 }, + { "begin": 246, "end": 275, "name": "POP", "source": 2 }, + { "begin": 112, "end": 281, "name": "SWAP3", "source": 2 }, + { "begin": 112, "end": 281, "name": "SWAP2", "source": 2 }, + { "begin": 112, "end": 281, "name": "POP", "source": 2 }, + { "begin": 112, "end": 281, "name": "POP", "source": 2 }, { "begin": 112, "end": 281, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 287, "end": 594, "name": "tag", - "source": 1, + "source": 2, "value": "159" }, - { "begin": 287, "end": 594, "name": "JUMPDEST", "source": 1 }, + { "begin": 287, "end": 594, "name": "JUMPDEST", "source": 2 }, { "begin": 355, "end": 356, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 365, "end": 478, "name": "tag", - "source": 1, + "source": 2, "value": "203" }, - { "begin": 365, "end": 478, "name": "JUMPDEST", "source": 1 }, - { "begin": 379, "end": 385, "name": "DUP4", "source": 1 }, - { "begin": 376, "end": 377, "name": "DUP2", "source": 1 }, - { "begin": 373, "end": 386, "name": "LT", "source": 1 }, - { "begin": 365, "end": 478, "name": "ISZERO", "source": 1 }, + { "begin": 365, "end": 478, "name": "JUMPDEST", "source": 2 }, + { "begin": 379, "end": 385, "name": "DUP4", "source": 2 }, + { "begin": 376, "end": 377, "name": "DUP2", "source": 2 }, + { "begin": 373, "end": 386, "name": "LT", "source": 2 }, + { "begin": 365, "end": 478, "name": "ISZERO", "source": 2 }, { "begin": 365, "end": 478, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "205" }, - { "begin": 365, "end": 478, "name": "JUMPI", "source": 1 }, - { "begin": 464, "end": 465, "name": "DUP1", "source": 1 }, - { "begin": 459, "end": 462, "name": "DUP3", "source": 1 }, - { "begin": 455, "end": 466, "name": "ADD", "source": 1 }, - { "begin": 449, "end": 467, "name": "MLOAD", "source": 1 }, - { "begin": 445, "end": 446, "name": "DUP2", "source": 1 }, - { "begin": 440, "end": 443, "name": "DUP5", "source": 1 }, - { "begin": 436, "end": 447, "name": "ADD", "source": 1 }, - { "begin": 429, "end": 468, "name": "MSTORE", "source": 1 }, + { "begin": 365, "end": 478, "name": "JUMPI", "source": 2 }, + { "begin": 464, "end": 465, "name": "DUP1", "source": 2 }, + { "begin": 459, "end": 462, "name": "DUP3", "source": 2 }, + { "begin": 455, "end": 466, "name": "ADD", "source": 2 }, + { "begin": 449, "end": 467, "name": "MLOAD", "source": 2 }, + { "begin": 445, "end": 446, "name": "DUP2", "source": 2 }, + { "begin": 440, "end": 443, "name": "DUP5", "source": 2 }, + { "begin": 436, "end": 447, "name": "ADD", "source": 2 }, + { "begin": 429, "end": 468, "name": "MSTORE", "source": 2 }, { "begin": 401, "end": 403, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 398, "end": 399, "name": "DUP2", "source": 1 }, - { "begin": 394, "end": 404, "name": "ADD", "source": 1 }, - { "begin": 389, "end": 404, "name": "SWAP1", "source": 1 }, - { "begin": 389, "end": 404, "name": "POP", "source": 1 }, + { "begin": 398, "end": 399, "name": "DUP2", "source": 2 }, + { "begin": 394, "end": 404, "name": "ADD", "source": 2 }, + { "begin": 389, "end": 404, "name": "SWAP1", "source": 2 }, + { "begin": 389, "end": 404, "name": "POP", "source": 2 }, { "begin": 365, "end": 478, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "203" }, - { "begin": 365, "end": 478, "name": "JUMP", "source": 1 }, + { "begin": 365, "end": 478, "name": "JUMP", "source": 2 }, { "begin": 365, "end": 478, "name": "tag", - "source": 1, + "source": 2, "value": "205" }, - { "begin": 365, "end": 478, "name": "JUMPDEST", "source": 1 }, - { "begin": 496, "end": 502, "name": "DUP4", "source": 1 }, - { "begin": 493, "end": 494, "name": "DUP2", "source": 1 }, - { "begin": 490, "end": 503, "name": "GT", "source": 1 }, - { "begin": 487, "end": 588, "name": "ISZERO", "source": 1 }, + { "begin": 365, "end": 478, "name": "JUMPDEST", "source": 2 }, + { "begin": 496, "end": 502, "name": "DUP4", "source": 2 }, + { "begin": 493, "end": 494, "name": "DUP2", "source": 2 }, + { "begin": 490, "end": 503, "name": "GT", "source": 2 }, + { "begin": 487, "end": 588, "name": "ISZERO", "source": 2 }, { "begin": 487, "end": 588, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "206" }, - { "begin": 487, "end": 588, "name": "JUMPI", "source": 1 }, + { "begin": 487, "end": 588, "name": "JUMPI", "source": 2 }, { "begin": 576, "end": 577, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 567, "end": 573, "name": "DUP5", "source": 1 }, - { "begin": 562, "end": 565, "name": "DUP5", "source": 1 }, - { "begin": 558, "end": 574, "name": "ADD", "source": 1 }, - { "begin": 551, "end": 578, "name": "MSTORE", "source": 1 }, + { "begin": 567, "end": 573, "name": "DUP5", "source": 2 }, + { "begin": 562, "end": 565, "name": "DUP5", "source": 2 }, + { "begin": 558, "end": 574, "name": "ADD", "source": 2 }, + { "begin": 551, "end": 578, "name": "MSTORE", "source": 2 }, { "begin": 487, "end": 588, "name": "tag", - "source": 1, + "source": 2, "value": "206" }, - { "begin": 487, "end": 588, "name": "JUMPDEST", "source": 1 }, - { "begin": 336, "end": 594, "name": "POP", "source": 1 }, - { "begin": 287, "end": 594, "name": "POP", "source": 1 }, - { "begin": 287, "end": 594, "name": "POP", "source": 1 }, - { "begin": 287, "end": 594, "name": "POP", "source": 1 }, + { "begin": 487, "end": 588, "name": "JUMPDEST", "source": 2 }, + { "begin": 336, "end": 594, "name": "POP", "source": 2 }, + { "begin": 287, "end": 594, "name": "POP", "source": 2 }, + { "begin": 287, "end": 594, "name": "POP", "source": 2 }, + { "begin": 287, "end": 594, "name": "POP", "source": 2 }, { "begin": 287, "end": 594, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 600, "end": 702, "name": "tag", - "source": 1, + "source": 2, "value": "160" }, - { "begin": 600, "end": 702, "name": "JUMPDEST", "source": 1 }, + { "begin": 600, "end": 702, "name": "JUMPDEST", "source": 2 }, { "begin": 641, "end": 647, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 692, "end": 694, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 688, "end": 695, "name": "NOT", "source": 1 }, + { "begin": 688, "end": 695, "name": "NOT", "source": 2 }, { "begin": 683, "end": 685, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 676, "end": 681, "name": "DUP4", "source": 1 }, - { "begin": 672, "end": 686, "name": "ADD", "source": 1 }, - { "begin": 668, "end": 696, "name": "AND", "source": 1 }, - { "begin": 658, "end": 696, "name": "SWAP1", "source": 1 }, - { "begin": 658, "end": 696, "name": "POP", "source": 1 }, - { "begin": 600, "end": 702, "name": "SWAP2", "source": 1 }, - { "begin": 600, "end": 702, "name": "SWAP1", "source": 1 }, - { "begin": 600, "end": 702, "name": "POP", "source": 1 }, + { "begin": 676, "end": 681, "name": "DUP4", "source": 2 }, + { "begin": 672, "end": 686, "name": "ADD", "source": 2 }, + { "begin": 668, "end": 696, "name": "AND", "source": 2 }, + { "begin": 658, "end": 696, "name": "SWAP1", "source": 2 }, + { "begin": 658, "end": 696, "name": "POP", "source": 2 }, + { "begin": 600, "end": 702, "name": "SWAP2", "source": 2 }, + { "begin": 600, "end": 702, "name": "SWAP1", "source": 2 }, + { "begin": 600, "end": 702, "name": "POP", "source": 2 }, { "begin": 600, "end": 702, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 708, "end": 1072, "name": "tag", - "source": 1, + "source": 2, "value": "161" }, - { "begin": 708, "end": 1072, "name": "JUMPDEST", "source": 1 }, + { "begin": 708, "end": 1072, "name": "JUMPDEST", "source": 2 }, { "begin": 796, "end": 799, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 824, "end": 863, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "209" }, - { "begin": 857, "end": 862, "name": "DUP3", "source": 1 }, + { "begin": 857, "end": 862, "name": "DUP3", "source": 2 }, { "begin": 824, "end": 863, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "157" }, { "begin": 824, "end": 863, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 824, "end": 863, "name": "tag", - "source": 1, + "source": 2, "value": "209" }, - { "begin": 824, "end": 863, "name": "JUMPDEST", "source": 1 }, + { "begin": 824, "end": 863, "name": "JUMPDEST", "source": 2 }, { "begin": 879, "end": 950, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "210" }, - { "begin": 943, "end": 949, "name": "DUP2", "source": 1 }, - { "begin": 938, "end": 941, "name": "DUP6", "source": 1 }, + { "begin": 943, "end": 949, "name": "DUP2", "source": 2 }, + { "begin": 938, "end": 941, "name": "DUP6", "source": 2 }, { "begin": 879, "end": 950, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "158" }, { "begin": 879, "end": 950, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 879, "end": 950, "name": "tag", - "source": 1, + "source": 2, "value": "210" }, - { "begin": 879, "end": 950, "name": "JUMPDEST", "source": 1 }, - { "begin": 872, "end": 950, "name": "SWAP4", "source": 1 }, - { "begin": 872, "end": 950, "name": "POP", "source": 1 }, + { "begin": 879, "end": 950, "name": "JUMPDEST", "source": 2 }, + { "begin": 872, "end": 950, "name": "SWAP4", "source": 2 }, + { "begin": 872, "end": 950, "name": "POP", "source": 2 }, { "begin": 959, "end": 1011, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "211" }, - { "begin": 1004, "end": 1010, "name": "DUP2", "source": 1 }, - { "begin": 999, "end": 1002, "name": "DUP6", "source": 1 }, + { "begin": 1004, "end": 1010, "name": "DUP2", "source": 2 }, + { "begin": 999, "end": 1002, "name": "DUP6", "source": 2 }, { "begin": 992, "end": 996, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 985, "end": 990, "name": "DUP7", "source": 1 }, - { "begin": 981, "end": 997, "name": "ADD", "source": 1 }, + { "begin": 985, "end": 990, "name": "DUP7", "source": 2 }, + { "begin": 981, "end": 997, "name": "ADD", "source": 2 }, { "begin": 959, "end": 1011, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "159" }, { "begin": 959, "end": 1011, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 959, "end": 1011, "name": "tag", - "source": 1, + "source": 2, "value": "211" }, - { "begin": 959, "end": 1011, "name": "JUMPDEST", "source": 1 }, + { "begin": 959, "end": 1011, "name": "JUMPDEST", "source": 2 }, { "begin": 1036, "end": 1065, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "212" }, - { "begin": 1058, "end": 1064, "name": "DUP2", "source": 1 }, + { "begin": 1058, "end": 1064, "name": "DUP2", "source": 2 }, { "begin": 1036, "end": 1065, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "160" }, { "begin": 1036, "end": 1065, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1036, "end": 1065, "name": "tag", - "source": 1, + "source": 2, "value": "212" }, - { "begin": 1036, "end": 1065, "name": "JUMPDEST", "source": 1 }, - { "begin": 1031, "end": 1034, "name": "DUP5", "source": 1 }, - { "begin": 1027, "end": 1066, "name": "ADD", "source": 1 }, - { "begin": 1020, "end": 1066, "name": "SWAP2", "source": 1 }, - { "begin": 1020, "end": 1066, "name": "POP", "source": 1 }, - { "begin": 800, "end": 1072, "name": "POP", "source": 1 }, - { "begin": 708, "end": 1072, "name": "SWAP3", "source": 1 }, - { "begin": 708, "end": 1072, "name": "SWAP2", "source": 1 }, - { "begin": 708, "end": 1072, "name": "POP", "source": 1 }, - { "begin": 708, "end": 1072, "name": "POP", "source": 1 }, + { "begin": 1036, "end": 1065, "name": "JUMPDEST", "source": 2 }, + { "begin": 1031, "end": 1034, "name": "DUP5", "source": 2 }, + { "begin": 1027, "end": 1066, "name": "ADD", "source": 2 }, + { "begin": 1020, "end": 1066, "name": "SWAP2", "source": 2 }, + { "begin": 1020, "end": 1066, "name": "POP", "source": 2 }, + { "begin": 800, "end": 1072, "name": "POP", "source": 2 }, + { "begin": 708, "end": 1072, "name": "SWAP3", "source": 2 }, + { "begin": 708, "end": 1072, "name": "SWAP2", "source": 2 }, + { "begin": 708, "end": 1072, "name": "POP", "source": 2 }, + { "begin": 708, "end": 1072, "name": "POP", "source": 2 }, { "begin": 708, "end": 1072, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1078, "end": 1391, "name": "tag", - "source": 1, + "source": 2, "value": "24" }, - { "begin": 1078, "end": 1391, "name": "JUMPDEST", "source": 1 }, + { "begin": 1078, "end": 1391, "name": "JUMPDEST", "source": 2 }, { "begin": 1191, "end": 1195, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1229, "end": 1231, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 1218, "end": 1227, "name": "DUP3", "source": 1 }, - { "begin": 1214, "end": 1232, "name": "ADD", "source": 1 }, - { "begin": 1206, "end": 1232, "name": "SWAP1", "source": 1 }, - { "begin": 1206, "end": 1232, "name": "POP", "source": 1 }, - { "begin": 1278, "end": 1287, "name": "DUP2", "source": 1 }, - { "begin": 1272, "end": 1276, "name": "DUP2", "source": 1 }, - { "begin": 1268, "end": 1288, "name": "SUB", "source": 1 }, + { "begin": 1218, "end": 1227, "name": "DUP3", "source": 2 }, + { "begin": 1214, "end": 1232, "name": "ADD", "source": 2 }, + { "begin": 1206, "end": 1232, "name": "SWAP1", "source": 2 }, + { "begin": 1206, "end": 1232, "name": "POP", "source": 2 }, + { "begin": 1278, "end": 1287, "name": "DUP2", "source": 2 }, + { "begin": 1272, "end": 1276, "name": "DUP2", "source": 2 }, + { "begin": 1268, "end": 1288, "name": "SUB", "source": 2 }, { "begin": 1264, "end": 1265, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1253, "end": 1262, "name": "DUP4", "source": 1 }, - { "begin": 1249, "end": 1266, "name": "ADD", "source": 1 }, - { "begin": 1242, "end": 1289, "name": "MSTORE", "source": 1 }, + { "begin": 1253, "end": 1262, "name": "DUP4", "source": 2 }, + { "begin": 1249, "end": 1266, "name": "ADD", "source": 2 }, + { "begin": 1242, "end": 1289, "name": "MSTORE", "source": 2 }, { "begin": 1306, "end": 1384, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "214" }, - { "begin": 1379, "end": 1383, "name": "DUP2", "source": 1 }, - { "begin": 1370, "end": 1376, "name": "DUP5", "source": 1 }, + { "begin": 1379, "end": 1383, "name": "DUP2", "source": 2 }, + { "begin": 1370, "end": 1376, "name": "DUP5", "source": 2 }, { "begin": 1306, "end": 1384, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "161" }, { "begin": 1306, "end": 1384, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1306, "end": 1384, "name": "tag", - "source": 1, + "source": 2, "value": "214" }, - { "begin": 1306, "end": 1384, "name": "JUMPDEST", "source": 1 }, - { "begin": 1298, "end": 1384, "name": "SWAP1", "source": 1 }, - { "begin": 1298, "end": 1384, "name": "POP", "source": 1 }, - { "begin": 1078, "end": 1391, "name": "SWAP3", "source": 1 }, - { "begin": 1078, "end": 1391, "name": "SWAP2", "source": 1 }, - { "begin": 1078, "end": 1391, "name": "POP", "source": 1 }, - { "begin": 1078, "end": 1391, "name": "POP", "source": 1 }, + { "begin": 1306, "end": 1384, "name": "JUMPDEST", "source": 2 }, + { "begin": 1298, "end": 1384, "name": "SWAP1", "source": 2 }, + { "begin": 1298, "end": 1384, "name": "POP", "source": 2 }, + { "begin": 1078, "end": 1391, "name": "SWAP3", "source": 2 }, + { "begin": 1078, "end": 1391, "name": "SWAP2", "source": 2 }, + { "begin": 1078, "end": 1391, "name": "POP", "source": 2 }, + { "begin": 1078, "end": 1391, "name": "POP", "source": 2 }, { "begin": 1078, "end": 1391, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1397, "end": 1472, "name": "tag", - "source": 1, + "source": 2, "value": "162" }, - { "begin": 1397, "end": 1472, "name": "JUMPDEST", "source": 1 }, + { "begin": 1397, "end": 1472, "name": "JUMPDEST", "source": 2 }, { "begin": 1430, "end": 1436, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1463, "end": 1465, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 1457, "end": 1466, "name": "MLOAD", "source": 1 }, - { "begin": 1447, "end": 1466, "name": "SWAP1", "source": 1 }, - { "begin": 1447, "end": 1466, "name": "POP", "source": 1 }, - { "begin": 1397, "end": 1472, "name": "SWAP1", "source": 1 }, + { "begin": 1457, "end": 1466, "name": "MLOAD", "source": 2 }, + { "begin": 1447, "end": 1466, "name": "SWAP1", "source": 2 }, + { "begin": 1447, "end": 1466, "name": "POP", "source": 2 }, + { "begin": 1397, "end": 1472, "name": "SWAP1", "source": 2 }, { "begin": 1397, "end": 1472, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1478, "end": 1595, "name": "tag", - "source": 1, + "source": 2, "value": "163" }, - { "begin": 1478, "end": 1595, "name": "JUMPDEST", "source": 1 }, + { "begin": 1478, "end": 1595, "name": "JUMPDEST", "source": 2 }, { "begin": 1587, "end": 1588, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1584, "end": 1585, "name": "DUP1", "source": 1 }, - { "begin": 1577, "end": 1589, "name": "REVERT", "source": 1 }, + { "begin": 1584, "end": 1585, "name": "DUP1", "source": 2 }, + { "begin": 1577, "end": 1589, "name": "REVERT", "source": 2 }, { "begin": 1601, "end": 1718, "name": "tag", - "source": 1, + "source": 2, "value": "164" }, - { "begin": 1601, "end": 1718, "name": "JUMPDEST", "source": 1 }, + { "begin": 1601, "end": 1718, "name": "JUMPDEST", "source": 2 }, { "begin": 1710, "end": 1711, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1707, "end": 1708, "name": "DUP1", "source": 1 }, - { "begin": 1700, "end": 1712, "name": "REVERT", "source": 1 }, + { "begin": 1707, "end": 1708, "name": "DUP1", "source": 2 }, + { "begin": 1700, "end": 1712, "name": "REVERT", "source": 2 }, { "begin": 1724, "end": 1850, "name": "tag", - "source": 1, + "source": 2, "value": "165" }, - { "begin": 1724, "end": 1850, "name": "JUMPDEST", "source": 1 }, + { "begin": 1724, "end": 1850, "name": "JUMPDEST", "source": 2 }, { "begin": 1761, "end": 1768, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1801, "end": 1843, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 1794, "end": 1799, "name": "DUP3", "source": 1 }, - { "begin": 1790, "end": 1844, "name": "AND", "source": 1 }, - { "begin": 1779, "end": 1844, "name": "SWAP1", "source": 1 }, - { "begin": 1779, "end": 1844, "name": "POP", "source": 1 }, - { "begin": 1724, "end": 1850, "name": "SWAP2", "source": 1 }, - { "begin": 1724, "end": 1850, "name": "SWAP1", "source": 1 }, - { "begin": 1724, "end": 1850, "name": "POP", "source": 1 }, + { "begin": 1794, "end": 1799, "name": "DUP3", "source": 2 }, + { "begin": 1790, "end": 1844, "name": "AND", "source": 2 }, + { "begin": 1779, "end": 1844, "name": "SWAP1", "source": 2 }, + { "begin": 1779, "end": 1844, "name": "POP", "source": 2 }, + { "begin": 1724, "end": 1850, "name": "SWAP2", "source": 2 }, + { "begin": 1724, "end": 1850, "name": "SWAP1", "source": 2 }, + { "begin": 1724, "end": 1850, "name": "POP", "source": 2 }, { "begin": 1724, "end": 1850, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1856, "end": 1952, "name": "tag", - "source": 1, + "source": 2, "value": "166" }, - { "begin": 1856, "end": 1952, "name": "JUMPDEST", "source": 1 }, + { "begin": 1856, "end": 1952, "name": "JUMPDEST", "source": 2 }, { "begin": 1893, "end": 1900, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1922, "end": 1946, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "220" }, - { "begin": 1940, "end": 1945, "name": "DUP3", "source": 1 }, + { "begin": 1940, "end": 1945, "name": "DUP3", "source": 2 }, { "begin": 1922, "end": 1946, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "165" }, { "begin": 1922, "end": 1946, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1922, "end": 1946, "name": "tag", - "source": 1, + "source": 2, "value": "220" }, - { "begin": 1922, "end": 1946, "name": "JUMPDEST", "source": 1 }, - { "begin": 1911, "end": 1946, "name": "SWAP1", "source": 1 }, - { "begin": 1911, "end": 1946, "name": "POP", "source": 1 }, - { "begin": 1856, "end": 1952, "name": "SWAP2", "source": 1 }, - { "begin": 1856, "end": 1952, "name": "SWAP1", "source": 1 }, - { "begin": 1856, "end": 1952, "name": "POP", "source": 1 }, + { "begin": 1922, "end": 1946, "name": "JUMPDEST", "source": 2 }, + { "begin": 1911, "end": 1946, "name": "SWAP1", "source": 2 }, + { "begin": 1911, "end": 1946, "name": "POP", "source": 2 }, + { "begin": 1856, "end": 1952, "name": "SWAP2", "source": 2 }, + { "begin": 1856, "end": 1952, "name": "SWAP1", "source": 2 }, + { "begin": 1856, "end": 1952, "name": "POP", "source": 2 }, { "begin": 1856, "end": 1952, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1958, "end": 2080, "name": "tag", - "source": 1, + "source": 2, "value": "167" }, - { "begin": 1958, "end": 2080, "name": "JUMPDEST", "source": 1 }, + { "begin": 1958, "end": 2080, "name": "JUMPDEST", "source": 2 }, { "begin": 2031, "end": 2055, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "222" }, - { "begin": 2049, "end": 2054, "name": "DUP2", "source": 1 }, + { "begin": 2049, "end": 2054, "name": "DUP2", "source": 2 }, { "begin": 2031, "end": 2055, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "166" }, { "begin": 2031, "end": 2055, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2031, "end": 2055, "name": "tag", - "source": 1, + "source": 2, "value": "222" }, - { "begin": 2031, "end": 2055, "name": "JUMPDEST", "source": 1 }, - { "begin": 2024, "end": 2029, "name": "DUP2", "source": 1 }, - { "begin": 2021, "end": 2056, "name": "EQ", "source": 1 }, + { "begin": 2031, "end": 2055, "name": "JUMPDEST", "source": 2 }, + { "begin": 2024, "end": 2029, "name": "DUP2", "source": 2 }, + { "begin": 2021, "end": 2056, "name": "EQ", "source": 2 }, { "begin": 2011, "end": 2074, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "223" }, - { "begin": 2011, "end": 2074, "name": "JUMPI", "source": 1 }, + { "begin": 2011, "end": 2074, "name": "JUMPI", "source": 2 }, { "begin": 2070, "end": 2071, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2067, "end": 2068, "name": "DUP1", "source": 1 }, - { "begin": 2060, "end": 2072, "name": "REVERT", "source": 1 }, + { "begin": 2067, "end": 2068, "name": "DUP1", "source": 2 }, + { "begin": 2060, "end": 2072, "name": "REVERT", "source": 2 }, { "begin": 2011, "end": 2074, "name": "tag", - "source": 1, + "source": 2, "value": "223" }, - { "begin": 2011, "end": 2074, "name": "JUMPDEST", "source": 1 }, - { "begin": 1958, "end": 2080, "name": "POP", "source": 1 }, + { "begin": 2011, "end": 2074, "name": "JUMPDEST", "source": 2 }, + { "begin": 1958, "end": 2080, "name": "POP", "source": 2 }, { "begin": 1958, "end": 2080, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2086, "end": 2225, "name": "tag", - "source": 1, + "source": 2, "value": "168" }, - { "begin": 2086, "end": 2225, "name": "JUMPDEST", "source": 1 }, + { "begin": 2086, "end": 2225, "name": "JUMPDEST", "source": 2 }, { "begin": 2132, "end": 2137, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2170, "end": 2176, "name": "DUP2", "source": 1 }, + { "begin": 2170, "end": 2176, "name": "DUP2", "source": 2 }, { "begin": 2157, "end": 2177, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 2148, "end": 2177, "name": "SWAP1", "source": 1 }, - { "begin": 2148, "end": 2177, "name": "POP", "source": 1 }, + { "begin": 2148, "end": 2177, "name": "SWAP1", "source": 2 }, + { "begin": 2148, "end": 2177, "name": "POP", "source": 2 }, { "begin": 2186, "end": 2219, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "225" }, - { "begin": 2213, "end": 2218, "name": "DUP2", "source": 1 }, + { "begin": 2213, "end": 2218, "name": "DUP2", "source": 2 }, { "begin": 2186, "end": 2219, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "167" }, { "begin": 2186, "end": 2219, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2186, "end": 2219, "name": "tag", - "source": 1, + "source": 2, "value": "225" }, - { "begin": 2186, "end": 2219, "name": "JUMPDEST", "source": 1 }, - { "begin": 2086, "end": 2225, "name": "SWAP3", "source": 1 }, - { "begin": 2086, "end": 2225, "name": "SWAP2", "source": 1 }, - { "begin": 2086, "end": 2225, "name": "POP", "source": 1 }, - { "begin": 2086, "end": 2225, "name": "POP", "source": 1 }, + { "begin": 2186, "end": 2219, "name": "JUMPDEST", "source": 2 }, + { "begin": 2086, "end": 2225, "name": "SWAP3", "source": 2 }, + { "begin": 2086, "end": 2225, "name": "SWAP2", "source": 2 }, + { "begin": 2086, "end": 2225, "name": "POP", "source": 2 }, + { "begin": 2086, "end": 2225, "name": "POP", "source": 2 }, { "begin": 2086, "end": 2225, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2231, "end": 2308, "name": "tag", - "source": 1, + "source": 2, "value": "169" }, - { "begin": 2231, "end": 2308, "name": "JUMPDEST", "source": 1 }, + { "begin": 2231, "end": 2308, "name": "JUMPDEST", "source": 2 }, { "begin": 2268, "end": 2275, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2297, "end": 2302, "name": "DUP2", "source": 1 }, - { "begin": 2286, "end": 2302, "name": "SWAP1", "source": 1 }, - { "begin": 2286, "end": 2302, "name": "POP", "source": 1 }, - { "begin": 2231, "end": 2308, "name": "SWAP2", "source": 1 }, - { "begin": 2231, "end": 2308, "name": "SWAP1", "source": 1 }, - { "begin": 2231, "end": 2308, "name": "POP", "source": 1 }, + { "begin": 2297, "end": 2302, "name": "DUP2", "source": 2 }, + { "begin": 2286, "end": 2302, "name": "SWAP1", "source": 2 }, + { "begin": 2286, "end": 2302, "name": "POP", "source": 2 }, + { "begin": 2231, "end": 2308, "name": "SWAP2", "source": 2 }, + { "begin": 2231, "end": 2308, "name": "SWAP1", "source": 2 }, + { "begin": 2231, "end": 2308, "name": "POP", "source": 2 }, { "begin": 2231, "end": 2308, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2314, "end": 2436, "name": "tag", - "source": 1, + "source": 2, "value": "170" }, - { "begin": 2314, "end": 2436, "name": "JUMPDEST", "source": 1 }, + { "begin": 2314, "end": 2436, "name": "JUMPDEST", "source": 2 }, { "begin": 2387, "end": 2411, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "228" }, - { "begin": 2405, "end": 2410, "name": "DUP2", "source": 1 }, + { "begin": 2405, "end": 2410, "name": "DUP2", "source": 2 }, { "begin": 2387, "end": 2411, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "169" }, { "begin": 2387, "end": 2411, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2387, "end": 2411, "name": "tag", - "source": 1, + "source": 2, "value": "228" }, - { "begin": 2387, "end": 2411, "name": "JUMPDEST", "source": 1 }, - { "begin": 2380, "end": 2385, "name": "DUP2", "source": 1 }, - { "begin": 2377, "end": 2412, "name": "EQ", "source": 1 }, + { "begin": 2387, "end": 2411, "name": "JUMPDEST", "source": 2 }, + { "begin": 2380, "end": 2385, "name": "DUP2", "source": 2 }, + { "begin": 2377, "end": 2412, "name": "EQ", "source": 2 }, { "begin": 2367, "end": 2430, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "229" }, - { "begin": 2367, "end": 2430, "name": "JUMPI", "source": 1 }, + { "begin": 2367, "end": 2430, "name": "JUMPI", "source": 2 }, { "begin": 2426, "end": 2427, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2423, "end": 2424, "name": "DUP1", "source": 1 }, - { "begin": 2416, "end": 2428, "name": "REVERT", "source": 1 }, + { "begin": 2423, "end": 2424, "name": "DUP1", "source": 2 }, + { "begin": 2416, "end": 2428, "name": "REVERT", "source": 2 }, { "begin": 2367, "end": 2430, "name": "tag", - "source": 1, + "source": 2, "value": "229" }, - { "begin": 2367, "end": 2430, "name": "JUMPDEST", "source": 1 }, - { "begin": 2314, "end": 2436, "name": "POP", "source": 1 }, + { "begin": 2367, "end": 2430, "name": "JUMPDEST", "source": 2 }, + { "begin": 2314, "end": 2436, "name": "POP", "source": 2 }, { "begin": 2314, "end": 2436, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2442, "end": 2581, "name": "tag", - "source": 1, + "source": 2, "value": "171" }, - { "begin": 2442, "end": 2581, "name": "JUMPDEST", "source": 1 }, + { "begin": 2442, "end": 2581, "name": "JUMPDEST", "source": 2 }, { "begin": 2488, "end": 2493, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2526, "end": 2532, "name": "DUP2", "source": 1 }, + { "begin": 2526, "end": 2532, "name": "DUP2", "source": 2 }, { "begin": 2513, "end": 2533, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 2504, "end": 2533, "name": "SWAP1", "source": 1 }, - { "begin": 2504, "end": 2533, "name": "POP", "source": 1 }, + { "begin": 2504, "end": 2533, "name": "SWAP1", "source": 2 }, + { "begin": 2504, "end": 2533, "name": "POP", "source": 2 }, { "begin": 2542, "end": 2575, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "231" }, - { "begin": 2569, "end": 2574, "name": "DUP2", "source": 1 }, + { "begin": 2569, "end": 2574, "name": "DUP2", "source": 2 }, { "begin": 2542, "end": 2575, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "170" }, { "begin": 2542, "end": 2575, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2542, "end": 2575, "name": "tag", - "source": 1, + "source": 2, "value": "231" }, - { "begin": 2542, "end": 2575, "name": "JUMPDEST", "source": 1 }, - { "begin": 2442, "end": 2581, "name": "SWAP3", "source": 1 }, - { "begin": 2442, "end": 2581, "name": "SWAP2", "source": 1 }, - { "begin": 2442, "end": 2581, "name": "POP", "source": 1 }, - { "begin": 2442, "end": 2581, "name": "POP", "source": 1 }, + { "begin": 2542, "end": 2575, "name": "JUMPDEST", "source": 2 }, + { "begin": 2442, "end": 2581, "name": "SWAP3", "source": 2 }, + { "begin": 2442, "end": 2581, "name": "SWAP2", "source": 2 }, + { "begin": 2442, "end": 2581, "name": "POP", "source": 2 }, + { "begin": 2442, "end": 2581, "name": "POP", "source": 2 }, { "begin": 2442, "end": 2581, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2587, "end": 3061, "name": "tag", - "source": 1, + "source": 2, "value": "28" }, - { "begin": 2587, "end": 3061, "name": "JUMPDEST", "source": 1 }, + { "begin": 2587, "end": 3061, "name": "JUMPDEST", "source": 2 }, { "begin": 2655, "end": 2661, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2663, "end": 2669, "name": "DUP1", "source": 1 }, + { "begin": 2663, "end": 2669, "name": "DUP1", "source": 2 }, { "begin": 2712, "end": 2714, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 2700, "end": 2709, "name": "DUP4", "source": 1 }, - { "begin": 2691, "end": 2698, "name": "DUP6", "source": 1 }, - { "begin": 2687, "end": 2710, "name": "SUB", "source": 1 }, - { "begin": 2683, "end": 2715, "name": "SLT", "source": 1 }, - { "begin": 2680, "end": 2799, "name": "ISZERO", "source": 1 }, + { "begin": 2700, "end": 2709, "name": "DUP4", "source": 2 }, + { "begin": 2691, "end": 2698, "name": "DUP6", "source": 2 }, + { "begin": 2687, "end": 2710, "name": "SUB", "source": 2 }, + { "begin": 2683, "end": 2715, "name": "SLT", "source": 2 }, + { "begin": 2680, "end": 2799, "name": "ISZERO", "source": 2 }, { "begin": 2680, "end": 2799, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "233" }, - { "begin": 2680, "end": 2799, "name": "JUMPI", "source": 1 }, + { "begin": 2680, "end": 2799, "name": "JUMPI", "source": 2 }, { "begin": 2718, "end": 2797, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "234" }, { "begin": 2718, "end": 2797, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { "begin": 2718, "end": 2797, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2718, "end": 2797, "name": "tag", - "source": 1, + "source": 2, "value": "234" }, - { "begin": 2718, "end": 2797, "name": "JUMPDEST", "source": 1 }, + { "begin": 2718, "end": 2797, "name": "JUMPDEST", "source": 2 }, { "begin": 2680, "end": 2799, "name": "tag", - "source": 1, + "source": 2, "value": "233" }, - { "begin": 2680, "end": 2799, "name": "JUMPDEST", "source": 1 }, + { "begin": 2680, "end": 2799, "name": "JUMPDEST", "source": 2 }, { "begin": 2838, "end": 2839, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 2863, "end": 2916, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "235" }, - { "begin": 2908, "end": 2915, "name": "DUP6", "source": 1 }, - { "begin": 2899, "end": 2905, "name": "DUP3", "source": 1 }, - { "begin": 2888, "end": 2897, "name": "DUP7", "source": 1 }, - { "begin": 2884, "end": 2906, "name": "ADD", "source": 1 }, + { "begin": 2908, "end": 2915, "name": "DUP6", "source": 2 }, + { "begin": 2899, "end": 2905, "name": "DUP3", "source": 2 }, + { "begin": 2888, "end": 2897, "name": "DUP7", "source": 2 }, + { "begin": 2884, "end": 2906, "name": "ADD", "source": 2 }, { "begin": 2863, "end": 2916, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "168" }, { "begin": 2863, "end": 2916, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2863, "end": 2916, "name": "tag", - "source": 1, + "source": 2, "value": "235" }, - { "begin": 2863, "end": 2916, "name": "JUMPDEST", "source": 1 }, - { "begin": 2853, "end": 2916, "name": "SWAP3", "source": 1 }, - { "begin": 2853, "end": 2916, "name": "POP", "source": 1 }, - { "begin": 2809, "end": 2926, "name": "POP", "source": 1 }, + { "begin": 2863, "end": 2916, "name": "JUMPDEST", "source": 2 }, + { "begin": 2853, "end": 2916, "name": "SWAP3", "source": 2 }, + { "begin": 2853, "end": 2916, "name": "POP", "source": 2 }, + { "begin": 2809, "end": 2926, "name": "POP", "source": 2 }, { "begin": 2965, "end": 2967, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { "begin": 2991, "end": 3044, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "236" }, - { "begin": 3036, "end": 3043, "name": "DUP6", "source": 1 }, - { "begin": 3027, "end": 3033, "name": "DUP3", "source": 1 }, - { "begin": 3016, "end": 3025, "name": "DUP7", "source": 1 }, - { "begin": 3012, "end": 3034, "name": "ADD", "source": 1 }, + { "begin": 3036, "end": 3043, "name": "DUP6", "source": 2 }, + { "begin": 3027, "end": 3033, "name": "DUP3", "source": 2 }, + { "begin": 3016, "end": 3025, "name": "DUP7", "source": 2 }, + { "begin": 3012, "end": 3034, "name": "ADD", "source": 2 }, { "begin": 2991, "end": 3044, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "171" }, { "begin": 2991, "end": 3044, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2991, "end": 3044, "name": "tag", - "source": 1, + "source": 2, "value": "236" }, - { "begin": 2991, "end": 3044, "name": "JUMPDEST", "source": 1 }, - { "begin": 2981, "end": 3044, "name": "SWAP2", "source": 1 }, - { "begin": 2981, "end": 3044, "name": "POP", "source": 1 }, - { "begin": 2936, "end": 3054, "name": "POP", "source": 1 }, - { "begin": 2587, "end": 3061, "name": "SWAP3", "source": 1 }, - { "begin": 2587, "end": 3061, "name": "POP", "source": 1 }, - { "begin": 2587, "end": 3061, "name": "SWAP3", "source": 1 }, - { "begin": 2587, "end": 3061, "name": "SWAP1", "source": 1 }, - { "begin": 2587, "end": 3061, "name": "POP", "source": 1 }, + { "begin": 2991, "end": 3044, "name": "JUMPDEST", "source": 2 }, + { "begin": 2981, "end": 3044, "name": "SWAP2", "source": 2 }, + { "begin": 2981, "end": 3044, "name": "POP", "source": 2 }, + { "begin": 2936, "end": 3054, "name": "POP", "source": 2 }, + { "begin": 2587, "end": 3061, "name": "SWAP3", "source": 2 }, + { "begin": 2587, "end": 3061, "name": "POP", "source": 2 }, + { "begin": 2587, "end": 3061, "name": "SWAP3", "source": 2 }, + { "begin": 2587, "end": 3061, "name": "SWAP1", "source": 2 }, + { "begin": 2587, "end": 3061, "name": "POP", "source": 2 }, { "begin": 2587, "end": 3061, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3067, "end": 3157, "name": "tag", - "source": 1, + "source": 2, "value": "172" }, - { "begin": 3067, "end": 3157, "name": "JUMPDEST", "source": 1 }, + { "begin": 3067, "end": 3157, "name": "JUMPDEST", "source": 2 }, { "begin": 3101, "end": 3108, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3144, "end": 3149, "name": "DUP2", "source": 1 }, - { "begin": 3137, "end": 3150, "name": "ISZERO", "source": 1 }, - { "begin": 3130, "end": 3151, "name": "ISZERO", "source": 1 }, - { "begin": 3119, "end": 3151, "name": "SWAP1", "source": 1 }, - { "begin": 3119, "end": 3151, "name": "POP", "source": 1 }, - { "begin": 3067, "end": 3157, "name": "SWAP2", "source": 1 }, - { "begin": 3067, "end": 3157, "name": "SWAP1", "source": 1 }, - { "begin": 3067, "end": 3157, "name": "POP", "source": 1 }, + { "begin": 3144, "end": 3149, "name": "DUP2", "source": 2 }, + { "begin": 3137, "end": 3150, "name": "ISZERO", "source": 2 }, + { "begin": 3130, "end": 3151, "name": "ISZERO", "source": 2 }, + { "begin": 3119, "end": 3151, "name": "SWAP1", "source": 2 }, + { "begin": 3119, "end": 3151, "name": "POP", "source": 2 }, + { "begin": 3067, "end": 3157, "name": "SWAP2", "source": 2 }, + { "begin": 3067, "end": 3157, "name": "SWAP1", "source": 2 }, + { "begin": 3067, "end": 3157, "name": "POP", "source": 2 }, { "begin": 3067, "end": 3157, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3163, "end": 3272, "name": "tag", - "source": 1, + "source": 2, "value": "173" }, - { "begin": 3163, "end": 3272, "name": "JUMPDEST", "source": 1 }, + { "begin": 3163, "end": 3272, "name": "JUMPDEST", "source": 2 }, { "begin": 3244, "end": 3265, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "239" }, - { "begin": 3259, "end": 3264, "name": "DUP2", "source": 1 }, + { "begin": 3259, "end": 3264, "name": "DUP2", "source": 2 }, { "begin": 3244, "end": 3265, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "172" }, { "begin": 3244, "end": 3265, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3244, "end": 3265, "name": "tag", - "source": 1, + "source": 2, "value": "239" }, - { "begin": 3244, "end": 3265, "name": "JUMPDEST", "source": 1 }, - { "begin": 3239, "end": 3242, "name": "DUP3", "source": 1 }, - { "begin": 3232, "end": 3266, "name": "MSTORE", "source": 1 }, - { "begin": 3163, "end": 3272, "name": "POP", "source": 1 }, - { "begin": 3163, "end": 3272, "name": "POP", "source": 1 }, + { "begin": 3244, "end": 3265, "name": "JUMPDEST", "source": 2 }, + { "begin": 3239, "end": 3242, "name": "DUP3", "source": 2 }, + { "begin": 3232, "end": 3266, "name": "MSTORE", "source": 2 }, + { "begin": 3163, "end": 3272, "name": "POP", "source": 2 }, + { "begin": 3163, "end": 3272, "name": "POP", "source": 2 }, { "begin": 3163, "end": 3272, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3278, "end": 3488, "name": "tag", - "source": 1, + "source": 2, "value": "31" }, - { "begin": 3278, "end": 3488, "name": "JUMPDEST", "source": 1 }, + { "begin": 3278, "end": 3488, "name": "JUMPDEST", "source": 2 }, { "begin": 3365, "end": 3369, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 3403, "end": 3405, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 3392, "end": 3401, "name": "DUP3", "source": 1 }, - { "begin": 3388, "end": 3406, "name": "ADD", "source": 1 }, - { "begin": 3380, "end": 3406, "name": "SWAP1", "source": 1 }, - { "begin": 3380, "end": 3406, "name": "POP", "source": 1 }, + { "begin": 3392, "end": 3401, "name": "DUP3", "source": 2 }, + { "begin": 3388, "end": 3406, "name": "ADD", "source": 2 }, + { "begin": 3380, "end": 3406, "name": "SWAP1", "source": 2 }, + { "begin": 3380, "end": 3406, "name": "POP", "source": 2 }, { "begin": 3416, "end": 3481, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "241" }, { "begin": 3478, "end": 3479, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3467, "end": 3476, "name": "DUP4", "source": 1 }, - { "begin": 3463, "end": 3480, "name": "ADD", "source": 1 }, - { "begin": 3454, "end": 3460, "name": "DUP5", "source": 1 }, + { "begin": 3467, "end": 3476, "name": "DUP4", "source": 2 }, + { "begin": 3463, "end": 3480, "name": "ADD", "source": 2 }, + { "begin": 3454, "end": 3460, "name": "DUP5", "source": 2 }, { "begin": 3416, "end": 3481, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "173" }, { "begin": 3416, "end": 3481, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3416, "end": 3481, "name": "tag", - "source": 1, + "source": 2, "value": "241" }, - { "begin": 3416, "end": 3481, "name": "JUMPDEST", "source": 1 }, - { "begin": 3278, "end": 3488, "name": "SWAP3", "source": 1 }, - { "begin": 3278, "end": 3488, "name": "SWAP2", "source": 1 }, - { "begin": 3278, "end": 3488, "name": "POP", "source": 1 }, - { "begin": 3278, "end": 3488, "name": "POP", "source": 1 }, + { "begin": 3416, "end": 3481, "name": "JUMPDEST", "source": 2 }, + { "begin": 3278, "end": 3488, "name": "SWAP3", "source": 2 }, + { "begin": 3278, "end": 3488, "name": "SWAP2", "source": 2 }, + { "begin": 3278, "end": 3488, "name": "POP", "source": 2 }, + { "begin": 3278, "end": 3488, "name": "POP", "source": 2 }, { "begin": 3278, "end": 3488, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3494, "end": 3612, "name": "tag", - "source": 1, + "source": 2, "value": "174" }, - { "begin": 3494, "end": 3612, "name": "JUMPDEST", "source": 1 }, + { "begin": 3494, "end": 3612, "name": "JUMPDEST", "source": 2 }, { "begin": 3581, "end": 3605, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "243" }, - { "begin": 3599, "end": 3604, "name": "DUP2", "source": 1 }, + { "begin": 3599, "end": 3604, "name": "DUP2", "source": 2 }, { "begin": 3581, "end": 3605, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "169" }, { "begin": 3581, "end": 3605, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3581, "end": 3605, "name": "tag", - "source": 1, + "source": 2, "value": "243" }, - { "begin": 3581, "end": 3605, "name": "JUMPDEST", "source": 1 }, - { "begin": 3576, "end": 3579, "name": "DUP3", "source": 1 }, - { "begin": 3569, "end": 3606, "name": "MSTORE", "source": 1 }, - { "begin": 3494, "end": 3612, "name": "POP", "source": 1 }, - { "begin": 3494, "end": 3612, "name": "POP", "source": 1 }, + { "begin": 3581, "end": 3605, "name": "JUMPDEST", "source": 2 }, + { "begin": 3576, "end": 3579, "name": "DUP3", "source": 2 }, + { "begin": 3569, "end": 3606, "name": "MSTORE", "source": 2 }, + { "begin": 3494, "end": 3612, "name": "POP", "source": 2 }, + { "begin": 3494, "end": 3612, "name": "POP", "source": 2 }, { "begin": 3494, "end": 3612, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3618, "end": 3840, "name": "tag", - "source": 1, + "source": 2, "value": "36" }, - { "begin": 3618, "end": 3840, "name": "JUMPDEST", "source": 1 }, + { "begin": 3618, "end": 3840, "name": "JUMPDEST", "source": 2 }, { "begin": 3711, "end": 3715, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 3749, "end": 3751, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 3738, "end": 3747, "name": "DUP3", "source": 1 }, - { "begin": 3734, "end": 3752, "name": "ADD", "source": 1 }, - { "begin": 3726, "end": 3752, "name": "SWAP1", "source": 1 }, - { "begin": 3726, "end": 3752, "name": "POP", "source": 1 }, + { "begin": 3738, "end": 3747, "name": "DUP3", "source": 2 }, + { "begin": 3734, "end": 3752, "name": "ADD", "source": 2 }, + { "begin": 3726, "end": 3752, "name": "SWAP1", "source": 2 }, + { "begin": 3726, "end": 3752, "name": "POP", "source": 2 }, { "begin": 3762, "end": 3833, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "245" }, { "begin": 3830, "end": 3831, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3819, "end": 3828, "name": "DUP4", "source": 1 }, - { "begin": 3815, "end": 3832, "name": "ADD", "source": 1 }, - { "begin": 3806, "end": 3812, "name": "DUP5", "source": 1 }, + { "begin": 3819, "end": 3828, "name": "DUP4", "source": 2 }, + { "begin": 3815, "end": 3832, "name": "ADD", "source": 2 }, + { "begin": 3806, "end": 3812, "name": "DUP5", "source": 2 }, { "begin": 3762, "end": 3833, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "174" }, { "begin": 3762, "end": 3833, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3762, "end": 3833, "name": "tag", - "source": 1, + "source": 2, "value": "245" }, - { "begin": 3762, "end": 3833, "name": "JUMPDEST", "source": 1 }, - { "begin": 3618, "end": 3840, "name": "SWAP3", "source": 1 }, - { "begin": 3618, "end": 3840, "name": "SWAP2", "source": 1 }, - { "begin": 3618, "end": 3840, "name": "POP", "source": 1 }, - { "begin": 3618, "end": 3840, "name": "POP", "source": 1 }, + { "begin": 3762, "end": 3833, "name": "JUMPDEST", "source": 2 }, + { "begin": 3618, "end": 3840, "name": "SWAP3", "source": 2 }, + { "begin": 3618, "end": 3840, "name": "SWAP2", "source": 2 }, + { "begin": 3618, "end": 3840, "name": "POP", "source": 2 }, + { "begin": 3618, "end": 3840, "name": "POP", "source": 2 }, { "begin": 3618, "end": 3840, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3846, "end": 4465, "name": "tag", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 3846, "end": 4465, "name": "JUMPDEST", "source": 1 }, + { "begin": 3846, "end": 4465, "name": "JUMPDEST", "source": 2 }, { "begin": 3923, "end": 3929, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3931, "end": 3937, "name": "DUP1", "source": 1 }, + { "begin": 3931, "end": 3937, "name": "DUP1", "source": 2 }, { "begin": 3939, "end": 3945, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 3988, "end": 3990, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 3976, "end": 3985, "name": "DUP5", "source": 1 }, - { "begin": 3967, "end": 3974, "name": "DUP7", "source": 1 }, - { "begin": 3963, "end": 3986, "name": "SUB", "source": 1 }, - { "begin": 3959, "end": 3991, "name": "SLT", "source": 1 }, - { "begin": 3956, "end": 4075, "name": "ISZERO", "source": 1 }, + { "begin": 3976, "end": 3985, "name": "DUP5", "source": 2 }, + { "begin": 3967, "end": 3974, "name": "DUP7", "source": 2 }, + { "begin": 3963, "end": 3986, "name": "SUB", "source": 2 }, + { "begin": 3959, "end": 3991, "name": "SLT", "source": 2 }, + { "begin": 3956, "end": 4075, "name": "ISZERO", "source": 2 }, { "begin": 3956, "end": 4075, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "247" }, - { "begin": 3956, "end": 4075, "name": "JUMPI", "source": 1 }, + { "begin": 3956, "end": 4075, "name": "JUMPI", "source": 2 }, { "begin": 3994, "end": 4073, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "248" }, { "begin": 3994, "end": 4073, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { "begin": 3994, "end": 4073, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3994, "end": 4073, "name": "tag", - "source": 1, + "source": 2, "value": "248" }, - { "begin": 3994, "end": 4073, "name": "JUMPDEST", "source": 1 }, + { "begin": 3994, "end": 4073, "name": "JUMPDEST", "source": 2 }, { "begin": 3956, "end": 4075, "name": "tag", - "source": 1, + "source": 2, "value": "247" }, - { "begin": 3956, "end": 4075, "name": "JUMPDEST", "source": 1 }, + { "begin": 3956, "end": 4075, "name": "JUMPDEST", "source": 2 }, { "begin": 4114, "end": 4115, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 4139, "end": 4192, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "249" }, - { "begin": 4184, "end": 4191, "name": "DUP7", "source": 1 }, - { "begin": 4175, "end": 4181, "name": "DUP3", "source": 1 }, - { "begin": 4164, "end": 4173, "name": "DUP8", "source": 1 }, - { "begin": 4160, "end": 4182, "name": "ADD", "source": 1 }, + { "begin": 4184, "end": 4191, "name": "DUP7", "source": 2 }, + { "begin": 4175, "end": 4181, "name": "DUP3", "source": 2 }, + { "begin": 4164, "end": 4173, "name": "DUP8", "source": 2 }, + { "begin": 4160, "end": 4182, "name": "ADD", "source": 2 }, { "begin": 4139, "end": 4192, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "168" }, { "begin": 4139, "end": 4192, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4139, "end": 4192, "name": "tag", - "source": 1, + "source": 2, "value": "249" }, - { "begin": 4139, "end": 4192, "name": "JUMPDEST", "source": 1 }, - { "begin": 4129, "end": 4192, "name": "SWAP4", "source": 1 }, - { "begin": 4129, "end": 4192, "name": "POP", "source": 1 }, - { "begin": 4085, "end": 4202, "name": "POP", "source": 1 }, + { "begin": 4139, "end": 4192, "name": "JUMPDEST", "source": 2 }, + { "begin": 4129, "end": 4192, "name": "SWAP4", "source": 2 }, + { "begin": 4129, "end": 4192, "name": "POP", "source": 2 }, + { "begin": 4085, "end": 4202, "name": "POP", "source": 2 }, { "begin": 4241, "end": 4243, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { "begin": 4267, "end": 4320, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "250" }, - { "begin": 4312, "end": 4319, "name": "DUP7", "source": 1 }, - { "begin": 4303, "end": 4309, "name": "DUP3", "source": 1 }, - { "begin": 4292, "end": 4301, "name": "DUP8", "source": 1 }, - { "begin": 4288, "end": 4310, "name": "ADD", "source": 1 }, + { "begin": 4312, "end": 4319, "name": "DUP7", "source": 2 }, + { "begin": 4303, "end": 4309, "name": "DUP3", "source": 2 }, + { "begin": 4292, "end": 4301, "name": "DUP8", "source": 2 }, + { "begin": 4288, "end": 4310, "name": "ADD", "source": 2 }, { "begin": 4267, "end": 4320, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "168" }, { "begin": 4267, "end": 4320, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4267, "end": 4320, "name": "tag", - "source": 1, + "source": 2, "value": "250" }, - { "begin": 4267, "end": 4320, "name": "JUMPDEST", "source": 1 }, - { "begin": 4257, "end": 4320, "name": "SWAP3", "source": 1 }, - { "begin": 4257, "end": 4320, "name": "POP", "source": 1 }, - { "begin": 4212, "end": 4330, "name": "POP", "source": 1 }, + { "begin": 4267, "end": 4320, "name": "JUMPDEST", "source": 2 }, + { "begin": 4257, "end": 4320, "name": "SWAP3", "source": 2 }, + { "begin": 4257, "end": 4320, "name": "POP", "source": 2 }, + { "begin": 4212, "end": 4330, "name": "POP", "source": 2 }, { "begin": 4369, "end": 4371, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { "begin": 4395, "end": 4448, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "251" }, - { "begin": 4440, "end": 4447, "name": "DUP7", "source": 1 }, - { "begin": 4431, "end": 4437, "name": "DUP3", "source": 1 }, - { "begin": 4420, "end": 4429, "name": "DUP8", "source": 1 }, - { "begin": 4416, "end": 4438, "name": "ADD", "source": 1 }, + { "begin": 4440, "end": 4447, "name": "DUP7", "source": 2 }, + { "begin": 4431, "end": 4437, "name": "DUP3", "source": 2 }, + { "begin": 4420, "end": 4429, "name": "DUP8", "source": 2 }, + { "begin": 4416, "end": 4438, "name": "ADD", "source": 2 }, { "begin": 4395, "end": 4448, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "171" }, { "begin": 4395, "end": 4448, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4395, "end": 4448, "name": "tag", - "source": 1, + "source": 2, "value": "251" }, - { "begin": 4395, "end": 4448, "name": "JUMPDEST", "source": 1 }, - { "begin": 4385, "end": 4448, "name": "SWAP2", "source": 1 }, - { "begin": 4385, "end": 4448, "name": "POP", "source": 1 }, - { "begin": 4340, "end": 4458, "name": "POP", "source": 1 }, - { "begin": 3846, "end": 4465, "name": "SWAP3", "source": 1 }, - { "begin": 3846, "end": 4465, "name": "POP", "source": 1 }, - { "begin": 3846, "end": 4465, "name": "SWAP3", "source": 1 }, - { "begin": 3846, "end": 4465, "name": "POP", "source": 1 }, - { "begin": 3846, "end": 4465, "name": "SWAP3", "source": 1 }, + { "begin": 4395, "end": 4448, "name": "JUMPDEST", "source": 2 }, + { "begin": 4385, "end": 4448, "name": "SWAP2", "source": 2 }, + { "begin": 4385, "end": 4448, "name": "POP", "source": 2 }, + { "begin": 4340, "end": 4458, "name": "POP", "source": 2 }, + { "begin": 3846, "end": 4465, "name": "SWAP3", "source": 2 }, + { "begin": 3846, "end": 4465, "name": "POP", "source": 2 }, + { "begin": 3846, "end": 4465, "name": "SWAP3", "source": 2 }, + { "begin": 3846, "end": 4465, "name": "POP", "source": 2 }, + { "begin": 3846, "end": 4465, "name": "SWAP3", "source": 2 }, { "begin": 3846, "end": 4465, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4471, "end": 4557, "name": "tag", - "source": 1, + "source": 2, "value": "175" }, - { "begin": 4471, "end": 4557, "name": "JUMPDEST", "source": 1 }, + { "begin": 4471, "end": 4557, "name": "JUMPDEST", "source": 2 }, { "begin": 4506, "end": 4513, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 4546, "end": 4550, "name": "PUSH", - "source": 1, + "source": 2, "value": "FF" }, - { "begin": 4539, "end": 4544, "name": "DUP3", "source": 1 }, - { "begin": 4535, "end": 4551, "name": "AND", "source": 1 }, - { "begin": 4524, "end": 4551, "name": "SWAP1", "source": 1 }, - { "begin": 4524, "end": 4551, "name": "POP", "source": 1 }, - { "begin": 4471, "end": 4557, "name": "SWAP2", "source": 1 }, - { "begin": 4471, "end": 4557, "name": "SWAP1", "source": 1 }, - { "begin": 4471, "end": 4557, "name": "POP", "source": 1 }, + { "begin": 4539, "end": 4544, "name": "DUP3", "source": 2 }, + { "begin": 4535, "end": 4551, "name": "AND", "source": 2 }, + { "begin": 4524, "end": 4551, "name": "SWAP1", "source": 2 }, + { "begin": 4524, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 4471, "end": 4557, "name": "SWAP2", "source": 2 }, + { "begin": 4471, "end": 4557, "name": "SWAP1", "source": 2 }, + { "begin": 4471, "end": 4557, "name": "POP", "source": 2 }, { "begin": 4471, "end": 4557, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4563, "end": 4675, "name": "tag", - "source": 1, + "source": 2, "value": "176" }, - { "begin": 4563, "end": 4675, "name": "JUMPDEST", "source": 1 }, + { "begin": 4563, "end": 4675, "name": "JUMPDEST", "source": 2 }, { "begin": 4646, "end": 4668, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "254" }, - { "begin": 4662, "end": 4667, "name": "DUP2", "source": 1 }, + { "begin": 4662, "end": 4667, "name": "DUP2", "source": 2 }, { "begin": 4646, "end": 4668, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "175" }, { "begin": 4646, "end": 4668, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4646, "end": 4668, "name": "tag", - "source": 1, + "source": 2, "value": "254" }, - { "begin": 4646, "end": 4668, "name": "JUMPDEST", "source": 1 }, - { "begin": 4641, "end": 4644, "name": "DUP3", "source": 1 }, - { "begin": 4634, "end": 4669, "name": "MSTORE", "source": 1 }, - { "begin": 4563, "end": 4675, "name": "POP", "source": 1 }, - { "begin": 4563, "end": 4675, "name": "POP", "source": 1 }, + { "begin": 4646, "end": 4668, "name": "JUMPDEST", "source": 2 }, + { "begin": 4641, "end": 4644, "name": "DUP3", "source": 2 }, + { "begin": 4634, "end": 4669, "name": "MSTORE", "source": 2 }, + { "begin": 4563, "end": 4675, "name": "POP", "source": 2 }, + { "begin": 4563, "end": 4675, "name": "POP", "source": 2 }, { "begin": 4563, "end": 4675, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4681, "end": 4895, "name": "tag", - "source": 1, + "source": 2, "value": "47" }, - { "begin": 4681, "end": 4895, "name": "JUMPDEST", "source": 1 }, + { "begin": 4681, "end": 4895, "name": "JUMPDEST", "source": 2 }, { "begin": 4770, "end": 4774, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 4808, "end": 4810, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 4797, "end": 4806, "name": "DUP3", "source": 1 }, - { "begin": 4793, "end": 4811, "name": "ADD", "source": 1 }, - { "begin": 4785, "end": 4811, "name": "SWAP1", "source": 1 }, - { "begin": 4785, "end": 4811, "name": "POP", "source": 1 }, + { "begin": 4797, "end": 4806, "name": "DUP3", "source": 2 }, + { "begin": 4793, "end": 4811, "name": "ADD", "source": 2 }, + { "begin": 4785, "end": 4811, "name": "SWAP1", "source": 2 }, + { "begin": 4785, "end": 4811, "name": "POP", "source": 2 }, { "begin": 4821, "end": 4888, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "256" }, { "begin": 4885, "end": 4886, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 4874, "end": 4883, "name": "DUP4", "source": 1 }, - { "begin": 4870, "end": 4887, "name": "ADD", "source": 1 }, - { "begin": 4861, "end": 4867, "name": "DUP5", "source": 1 }, + { "begin": 4874, "end": 4883, "name": "DUP4", "source": 2 }, + { "begin": 4870, "end": 4887, "name": "ADD", "source": 2 }, + { "begin": 4861, "end": 4867, "name": "DUP5", "source": 2 }, { "begin": 4821, "end": 4888, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "176" }, { "begin": 4821, "end": 4888, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4821, "end": 4888, "name": "tag", - "source": 1, + "source": 2, "value": "256" }, - { "begin": 4821, "end": 4888, "name": "JUMPDEST", "source": 1 }, - { "begin": 4681, "end": 4895, "name": "SWAP3", "source": 1 }, - { "begin": 4681, "end": 4895, "name": "SWAP2", "source": 1 }, - { "begin": 4681, "end": 4895, "name": "POP", "source": 1 }, - { "begin": 4681, "end": 4895, "name": "POP", "source": 1 }, + { "begin": 4821, "end": 4888, "name": "JUMPDEST", "source": 2 }, + { "begin": 4681, "end": 4895, "name": "SWAP3", "source": 2 }, + { "begin": 4681, "end": 4895, "name": "SWAP2", "source": 2 }, + { "begin": 4681, "end": 4895, "name": "POP", "source": 2 }, + { "begin": 4681, "end": 4895, "name": "POP", "source": 2 }, { "begin": 4681, "end": 4895, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4901, "end": 5230, "name": "tag", - "source": 1, + "source": 2, "value": "51" }, - { "begin": 4901, "end": 5230, "name": "JUMPDEST", "source": 1 }, + { "begin": 4901, "end": 5230, "name": "JUMPDEST", "source": 2 }, { "begin": 4960, "end": 4966, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 5009, "end": 5011, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 4997, "end": 5006, "name": "DUP3", "source": 1 }, - { "begin": 4988, "end": 4995, "name": "DUP5", "source": 1 }, - { "begin": 4984, "end": 5007, "name": "SUB", "source": 1 }, - { "begin": 4980, "end": 5012, "name": "SLT", "source": 1 }, - { "begin": 4977, "end": 5096, "name": "ISZERO", "source": 1 }, + { "begin": 4997, "end": 5006, "name": "DUP3", "source": 2 }, + { "begin": 4988, "end": 4995, "name": "DUP5", "source": 2 }, + { "begin": 4984, "end": 5007, "name": "SUB", "source": 2 }, + { "begin": 4980, "end": 5012, "name": "SLT", "source": 2 }, + { "begin": 4977, "end": 5096, "name": "ISZERO", "source": 2 }, { "begin": 4977, "end": 5096, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "258" }, - { "begin": 4977, "end": 5096, "name": "JUMPI", "source": 1 }, + { "begin": 4977, "end": 5096, "name": "JUMPI", "source": 2 }, { "begin": 5015, "end": 5094, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "259" }, { "begin": 5015, "end": 5094, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { "begin": 5015, "end": 5094, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5015, "end": 5094, "name": "tag", - "source": 1, + "source": 2, "value": "259" }, - { "begin": 5015, "end": 5094, "name": "JUMPDEST", "source": 1 }, + { "begin": 5015, "end": 5094, "name": "JUMPDEST", "source": 2 }, { "begin": 4977, "end": 5096, "name": "tag", - "source": 1, + "source": 2, "value": "258" }, - { "begin": 4977, "end": 5096, "name": "JUMPDEST", "source": 1 }, + { "begin": 4977, "end": 5096, "name": "JUMPDEST", "source": 2 }, { "begin": 5135, "end": 5136, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 5160, "end": 5213, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "260" }, - { "begin": 5205, "end": 5212, "name": "DUP5", "source": 1 }, - { "begin": 5196, "end": 5202, "name": "DUP3", "source": 1 }, - { "begin": 5185, "end": 5194, "name": "DUP6", "source": 1 }, - { "begin": 5181, "end": 5203, "name": "ADD", "source": 1 }, + { "begin": 5205, "end": 5212, "name": "DUP5", "source": 2 }, + { "begin": 5196, "end": 5202, "name": "DUP3", "source": 2 }, + { "begin": 5185, "end": 5194, "name": "DUP6", "source": 2 }, + { "begin": 5181, "end": 5203, "name": "ADD", "source": 2 }, { "begin": 5160, "end": 5213, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "168" }, { "begin": 5160, "end": 5213, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5160, "end": 5213, "name": "tag", - "source": 1, + "source": 2, "value": "260" }, - { "begin": 5160, "end": 5213, "name": "JUMPDEST", "source": 1 }, - { "begin": 5150, "end": 5213, "name": "SWAP2", "source": 1 }, - { "begin": 5150, "end": 5213, "name": "POP", "source": 1 }, - { "begin": 5106, "end": 5223, "name": "POP", "source": 1 }, - { "begin": 4901, "end": 5230, "name": "SWAP3", "source": 1 }, - { "begin": 4901, "end": 5230, "name": "SWAP2", "source": 1 }, - { "begin": 4901, "end": 5230, "name": "POP", "source": 1 }, - { "begin": 4901, "end": 5230, "name": "POP", "source": 1 }, + { "begin": 5160, "end": 5213, "name": "JUMPDEST", "source": 2 }, + { "begin": 5150, "end": 5213, "name": "SWAP2", "source": 2 }, + { "begin": 5150, "end": 5213, "name": "POP", "source": 2 }, + { "begin": 5106, "end": 5223, "name": "POP", "source": 2 }, + { "begin": 4901, "end": 5230, "name": "SWAP3", "source": 2 }, + { "begin": 4901, "end": 5230, "name": "SWAP2", "source": 2 }, + { "begin": 4901, "end": 5230, "name": "POP", "source": 2 }, + { "begin": 4901, "end": 5230, "name": "POP", "source": 2 }, { "begin": 4901, "end": 5230, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 5236, "end": 5296, "name": "tag", - "source": 1, + "source": 2, "value": "177" }, - { "begin": 5236, "end": 5296, "name": "JUMPDEST", "source": 1 }, + { "begin": 5236, "end": 5296, "name": "JUMPDEST", "source": 2 }, { "begin": 5264, "end": 5267, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 5285, "end": 5290, "name": "DUP2", "source": 1 }, - { "begin": 5278, "end": 5290, "name": "SWAP1", "source": 1 }, - { "begin": 5278, "end": 5290, "name": "POP", "source": 1 }, - { "begin": 5236, "end": 5296, "name": "SWAP2", "source": 1 }, - { "begin": 5236, "end": 5296, "name": "SWAP1", "source": 1 }, - { "begin": 5236, "end": 5296, "name": "POP", "source": 1 }, + { "begin": 5285, "end": 5290, "name": "DUP2", "source": 2 }, + { "begin": 5278, "end": 5290, "name": "SWAP1", "source": 2 }, + { "begin": 5278, "end": 5290, "name": "POP", "source": 2 }, + { "begin": 5236, "end": 5296, "name": "SWAP2", "source": 2 }, + { "begin": 5236, "end": 5296, "name": "SWAP1", "source": 2 }, + { "begin": 5236, "end": 5296, "name": "POP", "source": 2 }, { "begin": 5236, "end": 5296, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 5302, "end": 5444, "name": "tag", - "source": 1, + "source": 2, "value": "178" }, - { "begin": 5302, "end": 5444, "name": "JUMPDEST", "source": 1 }, + { "begin": 5302, "end": 5444, "name": "JUMPDEST", "source": 2 }, { "begin": 5352, "end": 5361, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 5385, "end": 5438, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "263" }, { "begin": 5403, "end": 5437, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "264" }, { "begin": 5412, "end": 5436, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "265" }, - { "begin": 5430, "end": 5435, "name": "DUP5", "source": 1 }, + { "begin": 5430, "end": 5435, "name": "DUP5", "source": 2 }, { "begin": 5412, "end": 5436, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "165" }, { "begin": 5412, "end": 5436, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5412, "end": 5436, "name": "tag", - "source": 1, + "source": 2, "value": "265" }, - { "begin": 5412, "end": 5436, "name": "JUMPDEST", "source": 1 }, + { "begin": 5412, "end": 5436, "name": "JUMPDEST", "source": 2 }, { "begin": 5403, "end": 5437, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "177" }, { "begin": 5403, "end": 5437, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5403, "end": 5437, "name": "tag", - "source": 1, + "source": 2, "value": "264" }, - { "begin": 5403, "end": 5437, "name": "JUMPDEST", "source": 1 }, + { "begin": 5403, "end": 5437, "name": "JUMPDEST", "source": 2 }, { "begin": 5385, "end": 5438, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "165" }, { "begin": 5385, "end": 5438, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5385, "end": 5438, "name": "tag", - "source": 1, + "source": 2, "value": "263" }, - { "begin": 5385, "end": 5438, "name": "JUMPDEST", "source": 1 }, - { "begin": 5372, "end": 5438, "name": "SWAP1", "source": 1 }, - { "begin": 5372, "end": 5438, "name": "POP", "source": 1 }, - { "begin": 5302, "end": 5444, "name": "SWAP2", "source": 1 }, - { "begin": 5302, "end": 5444, "name": "SWAP1", "source": 1 }, - { "begin": 5302, "end": 5444, "name": "POP", "source": 1 }, + { "begin": 5385, "end": 5438, "name": "JUMPDEST", "source": 2 }, + { "begin": 5372, "end": 5438, "name": "SWAP1", "source": 2 }, + { "begin": 5372, "end": 5438, "name": "POP", "source": 2 }, + { "begin": 5302, "end": 5444, "name": "SWAP2", "source": 2 }, + { "begin": 5302, "end": 5444, "name": "SWAP1", "source": 2 }, + { "begin": 5302, "end": 5444, "name": "POP", "source": 2 }, { "begin": 5302, "end": 5444, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 5450, "end": 5576, "name": "tag", - "source": 1, + "source": 2, "value": "179" }, - { "begin": 5450, "end": 5576, "name": "JUMPDEST", "source": 1 }, + { "begin": 5450, "end": 5576, "name": "JUMPDEST", "source": 2 }, { "begin": 5500, "end": 5509, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 5533, "end": 5570, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "267" }, - { "begin": 5564, "end": 5569, "name": "DUP3", "source": 1 }, + { "begin": 5564, "end": 5569, "name": "DUP3", "source": 2 }, { "begin": 5533, "end": 5570, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "178" }, { "begin": 5533, "end": 5570, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5533, "end": 5570, "name": "tag", - "source": 1, + "source": 2, "value": "267" }, - { "begin": 5533, "end": 5570, "name": "JUMPDEST", "source": 1 }, - { "begin": 5520, "end": 5570, "name": "SWAP1", "source": 1 }, - { "begin": 5520, "end": 5570, "name": "POP", "source": 1 }, - { "begin": 5450, "end": 5576, "name": "SWAP2", "source": 1 }, - { "begin": 5450, "end": 5576, "name": "SWAP1", "source": 1 }, - { "begin": 5450, "end": 5576, "name": "POP", "source": 1 }, + { "begin": 5533, "end": 5570, "name": "JUMPDEST", "source": 2 }, + { "begin": 5520, "end": 5570, "name": "SWAP1", "source": 2 }, + { "begin": 5520, "end": 5570, "name": "POP", "source": 2 }, + { "begin": 5450, "end": 5576, "name": "SWAP2", "source": 2 }, + { "begin": 5450, "end": 5576, "name": "SWAP1", "source": 2 }, + { "begin": 5450, "end": 5576, "name": "POP", "source": 2 }, { "begin": 5450, "end": 5576, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 5582, - "end": 5721, + "end": 5722, "name": "tag", - "source": 1, + "source": 2, "value": "180" }, - { "begin": 5582, "end": 5721, "name": "JUMPDEST", "source": 1 }, + { "begin": 5582, "end": 5722, "name": "JUMPDEST", "source": 2 }, { - "begin": 5645, - "end": 5654, + "begin": 5646, + "end": 5655, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 5678, - "end": 5715, + "begin": 5679, + "end": 5716, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "269" }, - { "begin": 5709, "end": 5714, "name": "DUP3", "source": 1 }, + { "begin": 5710, "end": 5715, "name": "DUP3", "source": 2 }, { - "begin": 5678, - "end": 5715, + "begin": 5679, + "end": 5716, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "179" }, { - "begin": 5678, - "end": 5715, + "begin": 5679, + "end": 5716, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5678, - "end": 5715, + "begin": 5679, + "end": 5716, "name": "tag", - "source": 1, + "source": 2, "value": "269" }, - { "begin": 5678, "end": 5715, "name": "JUMPDEST", "source": 1 }, - { "begin": 5665, "end": 5715, "name": "SWAP1", "source": 1 }, - { "begin": 5665, "end": 5715, "name": "POP", "source": 1 }, - { "begin": 5582, "end": 5721, "name": "SWAP2", "source": 1 }, - { "begin": 5582, "end": 5721, "name": "SWAP1", "source": 1 }, - { "begin": 5582, "end": 5721, "name": "POP", "source": 1 }, + { "begin": 5679, "end": 5716, "name": "JUMPDEST", "source": 2 }, + { "begin": 5666, "end": 5716, "name": "SWAP1", "source": 2 }, + { "begin": 5666, "end": 5716, "name": "POP", "source": 2 }, + { "begin": 5582, "end": 5722, "name": "SWAP2", "source": 2 }, + { "begin": 5582, "end": 5722, "name": "SWAP1", "source": 2 }, + { "begin": 5582, "end": 5722, "name": "POP", "source": 2 }, { "begin": 5582, - "end": 5721, + "end": 5722, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5727, - "end": 5884, + "begin": 5728, + "end": 5887, "name": "tag", - "source": 1, + "source": 2, "value": "181" }, - { "begin": 5727, "end": 5884, "name": "JUMPDEST", "source": 1 }, + { "begin": 5728, "end": 5887, "name": "JUMPDEST", "source": 2 }, { - "begin": 5827, - "end": 5877, + "begin": 5829, + "end": 5880, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "271" }, - { "begin": 5871, "end": 5876, "name": "DUP2", "source": 1 }, + { "begin": 5874, "end": 5879, "name": "DUP2", "source": 2 }, { - "begin": 5827, - "end": 5877, + "begin": 5829, + "end": 5880, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "180" }, { - "begin": 5827, - "end": 5877, + "begin": 5829, + "end": 5880, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5827, - "end": 5877, + "begin": 5829, + "end": 5880, "name": "tag", - "source": 1, + "source": 2, "value": "271" }, - { "begin": 5827, "end": 5877, "name": "JUMPDEST", "source": 1 }, - { "begin": 5822, "end": 5825, "name": "DUP3", "source": 1 }, - { "begin": 5815, "end": 5878, "name": "MSTORE", "source": 1 }, - { "begin": 5727, "end": 5884, "name": "POP", "source": 1 }, - { "begin": 5727, "end": 5884, "name": "POP", "source": 1 }, + { "begin": 5829, "end": 5880, "name": "JUMPDEST", "source": 2 }, + { "begin": 5824, "end": 5827, "name": "DUP3", "source": 2 }, + { "begin": 5817, "end": 5881, "name": "MSTORE", "source": 2 }, + { "begin": 5728, "end": 5887, "name": "POP", "source": 2 }, + { "begin": 5728, "end": 5887, "name": "POP", "source": 2 }, { - "begin": 5727, - "end": 5884, + "begin": 5728, + "end": 5887, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5890, - "end": 6138, + "begin": 5893, + "end": 6143, "name": "tag", - "source": 1, + "source": 2, "value": "58" }, - { "begin": 5890, "end": 6138, "name": "JUMPDEST", "source": 1 }, + { "begin": 5893, "end": 6143, "name": "JUMPDEST", "source": 2 }, { - "begin": 5996, - "end": 6000, + "begin": 6000, + "end": 6004, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6034, - "end": 6036, + "begin": 6038, + "end": 6040, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 6023, "end": 6032, "name": "DUP3", "source": 1 }, - { "begin": 6019, "end": 6037, "name": "ADD", "source": 1 }, - { "begin": 6011, "end": 6037, "name": "SWAP1", "source": 1 }, - { "begin": 6011, "end": 6037, "name": "POP", "source": 1 }, + { "begin": 6027, "end": 6036, "name": "DUP3", "source": 2 }, + { "begin": 6023, "end": 6041, "name": "ADD", "source": 2 }, + { "begin": 6015, "end": 6041, "name": "SWAP1", "source": 2 }, + { "begin": 6015, "end": 6041, "name": "POP", "source": 2 }, { - "begin": 6047, - "end": 6131, + "begin": 6051, + "end": 6136, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "273" }, { - "begin": 6128, - "end": 6129, + "begin": 6133, + "end": 6134, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6117, "end": 6126, "name": "DUP4", "source": 1 }, - { "begin": 6113, "end": 6130, "name": "ADD", "source": 1 }, - { "begin": 6104, "end": 6110, "name": "DUP5", "source": 1 }, + { "begin": 6122, "end": 6131, "name": "DUP4", "source": 2 }, + { "begin": 6118, "end": 6135, "name": "ADD", "source": 2 }, + { "begin": 6109, "end": 6115, "name": "DUP5", "source": 2 }, { - "begin": 6047, - "end": 6131, + "begin": 6051, + "end": 6136, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "181" }, { - "begin": 6047, - "end": 6131, + "begin": 6051, + "end": 6136, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6047, - "end": 6131, + "begin": 6051, + "end": 6136, "name": "tag", - "source": 1, + "source": 2, "value": "273" }, - { "begin": 6047, "end": 6131, "name": "JUMPDEST", "source": 1 }, - { "begin": 5890, "end": 6138, "name": "SWAP3", "source": 1 }, - { "begin": 5890, "end": 6138, "name": "SWAP2", "source": 1 }, - { "begin": 5890, "end": 6138, "name": "POP", "source": 1 }, - { "begin": 5890, "end": 6138, "name": "POP", "source": 1 }, + { "begin": 6051, "end": 6136, "name": "JUMPDEST", "source": 2 }, + { "begin": 5893, "end": 6143, "name": "SWAP3", "source": 2 }, + { "begin": 5893, "end": 6143, "name": "SWAP2", "source": 2 }, + { "begin": 5893, "end": 6143, "name": "POP", "source": 2 }, + { "begin": 5893, "end": 6143, "name": "POP", "source": 2 }, { - "begin": 5890, - "end": 6138, + "begin": 5893, + "end": 6143, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6144, - "end": 6618, + "begin": 6149, + "end": 6623, "name": "tag", - "source": 1, + "source": 2, "value": "81" }, - { "begin": 6144, "end": 6618, "name": "JUMPDEST", "source": 1 }, + { "begin": 6149, "end": 6623, "name": "JUMPDEST", "source": 2 }, { - "begin": 6212, - "end": 6218, + "begin": 6217, + "end": 6223, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6220, "end": 6226, "name": "DUP1", "source": 1 }, + { "begin": 6225, "end": 6231, "name": "DUP1", "source": 2 }, { - "begin": 6269, - "end": 6271, + "begin": 6274, + "end": 6276, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 6257, "end": 6266, "name": "DUP4", "source": 1 }, - { "begin": 6248, "end": 6255, "name": "DUP6", "source": 1 }, - { "begin": 6244, "end": 6267, "name": "SUB", "source": 1 }, - { "begin": 6240, "end": 6272, "name": "SLT", "source": 1 }, - { "begin": 6237, "end": 6356, "name": "ISZERO", "source": 1 }, + { "begin": 6262, "end": 6271, "name": "DUP4", "source": 2 }, + { "begin": 6253, "end": 6260, "name": "DUP6", "source": 2 }, + { "begin": 6249, "end": 6272, "name": "SUB", "source": 2 }, + { "begin": 6245, "end": 6277, "name": "SLT", "source": 2 }, + { "begin": 6242, "end": 6361, "name": "ISZERO", "source": 2 }, { - "begin": 6237, - "end": 6356, + "begin": 6242, + "end": 6361, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "275" }, - { "begin": 6237, "end": 6356, "name": "JUMPI", "source": 1 }, + { "begin": 6242, "end": 6361, "name": "JUMPI", "source": 2 }, { - "begin": 6275, - "end": 6354, + "begin": 6280, + "end": 6359, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "276" }, { - "begin": 6275, - "end": 6354, + "begin": 6280, + "end": 6359, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { - "begin": 6275, - "end": 6354, + "begin": 6280, + "end": 6359, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6275, - "end": 6354, + "begin": 6280, + "end": 6359, "name": "tag", - "source": 1, + "source": 2, "value": "276" }, - { "begin": 6275, "end": 6354, "name": "JUMPDEST", "source": 1 }, + { "begin": 6280, "end": 6359, "name": "JUMPDEST", "source": 2 }, { - "begin": 6237, - "end": 6356, + "begin": 6242, + "end": 6361, "name": "tag", - "source": 1, + "source": 2, "value": "275" }, - { "begin": 6237, "end": 6356, "name": "JUMPDEST", "source": 1 }, + { "begin": 6242, "end": 6361, "name": "JUMPDEST", "source": 2 }, { - "begin": 6395, - "end": 6396, + "begin": 6400, + "end": 6401, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6420, - "end": 6473, + "begin": 6425, + "end": 6478, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "277" }, - { "begin": 6465, "end": 6472, "name": "DUP6", "source": 1 }, - { "begin": 6456, "end": 6462, "name": "DUP3", "source": 1 }, - { "begin": 6445, "end": 6454, "name": "DUP7", "source": 1 }, - { "begin": 6441, "end": 6463, "name": "ADD", "source": 1 }, + { "begin": 6470, "end": 6477, "name": "DUP6", "source": 2 }, + { "begin": 6461, "end": 6467, "name": "DUP3", "source": 2 }, + { "begin": 6450, "end": 6459, "name": "DUP7", "source": 2 }, + { "begin": 6446, "end": 6468, "name": "ADD", "source": 2 }, { - "begin": 6420, - "end": 6473, + "begin": 6425, + "end": 6478, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "168" }, { - "begin": 6420, - "end": 6473, + "begin": 6425, + "end": 6478, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6420, - "end": 6473, + "begin": 6425, + "end": 6478, "name": "tag", - "source": 1, + "source": 2, "value": "277" }, - { "begin": 6420, "end": 6473, "name": "JUMPDEST", "source": 1 }, - { "begin": 6410, "end": 6473, "name": "SWAP3", "source": 1 }, - { "begin": 6410, "end": 6473, "name": "POP", "source": 1 }, - { "begin": 6366, "end": 6483, "name": "POP", "source": 1 }, + { "begin": 6425, "end": 6478, "name": "JUMPDEST", "source": 2 }, + { "begin": 6415, "end": 6478, "name": "SWAP3", "source": 2 }, + { "begin": 6415, "end": 6478, "name": "POP", "source": 2 }, + { "begin": 6371, "end": 6488, "name": "POP", "source": 2 }, { - "begin": 6522, - "end": 6524, + "begin": 6527, + "end": 6529, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 6548, - "end": 6601, + "begin": 6553, + "end": 6606, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "278" }, - { "begin": 6593, "end": 6600, "name": "DUP6", "source": 1 }, - { "begin": 6584, "end": 6590, "name": "DUP3", "source": 1 }, - { "begin": 6573, "end": 6582, "name": "DUP7", "source": 1 }, - { "begin": 6569, "end": 6591, "name": "ADD", "source": 1 }, + { "begin": 6598, "end": 6605, "name": "DUP6", "source": 2 }, + { "begin": 6589, "end": 6595, "name": "DUP3", "source": 2 }, + { "begin": 6578, "end": 6587, "name": "DUP7", "source": 2 }, + { "begin": 6574, "end": 6596, "name": "ADD", "source": 2 }, { - "begin": 6548, - "end": 6601, + "begin": 6553, + "end": 6606, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "168" }, { - "begin": 6548, - "end": 6601, + "begin": 6553, + "end": 6606, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6548, - "end": 6601, + "begin": 6553, + "end": 6606, "name": "tag", - "source": 1, + "source": 2, "value": "278" }, - { "begin": 6548, "end": 6601, "name": "JUMPDEST", "source": 1 }, - { "begin": 6538, "end": 6601, "name": "SWAP2", "source": 1 }, - { "begin": 6538, "end": 6601, "name": "POP", "source": 1 }, - { "begin": 6493, "end": 6611, "name": "POP", "source": 1 }, - { "begin": 6144, "end": 6618, "name": "SWAP3", "source": 1 }, - { "begin": 6144, "end": 6618, "name": "POP", "source": 1 }, - { "begin": 6144, "end": 6618, "name": "SWAP3", "source": 1 }, - { "begin": 6144, "end": 6618, "name": "SWAP1", "source": 1 }, - { "begin": 6144, "end": 6618, "name": "POP", "source": 1 }, - { - "begin": 6144, - "end": 6618, + { "begin": 6553, "end": 6606, "name": "JUMPDEST", "source": 2 }, + { "begin": 6543, "end": 6606, "name": "SWAP2", "source": 2 }, + { "begin": 6543, "end": 6606, "name": "POP", "source": 2 }, + { "begin": 6498, "end": 6616, "name": "POP", "source": 2 }, + { "begin": 6149, "end": 6623, "name": "SWAP3", "source": 2 }, + { "begin": 6149, "end": 6623, "name": "POP", "source": 2 }, + { "begin": 6149, "end": 6623, "name": "SWAP3", "source": 2 }, + { "begin": 6149, "end": 6623, "name": "SWAP1", "source": 2 }, + { "begin": 6149, "end": 6623, "name": "POP", "source": 2 }, + { + "begin": 6149, + "end": 6623, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6624, - "end": 6741, + "begin": 6629, + "end": 6746, "name": "tag", - "source": 1, + "source": 2, "value": "182" }, - { "begin": 6624, "end": 6741, "name": "JUMPDEST", "source": 1 }, + { "begin": 6629, "end": 6746, "name": "JUMPDEST", "source": 2 }, { - "begin": 6733, - "end": 6734, + "begin": 6738, + "end": 6739, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6730, "end": 6731, "name": "DUP1", "source": 1 }, - { "begin": 6723, "end": 6735, "name": "REVERT", "source": 1 }, + { "begin": 6735, "end": 6736, "name": "DUP1", "source": 2 }, + { "begin": 6728, "end": 6740, "name": "REVERT", "source": 2 }, { - "begin": 6747, - "end": 6864, + "begin": 6752, + "end": 6869, "name": "tag", - "source": 1, + "source": 2, "value": "183" }, - { "begin": 6747, "end": 6864, "name": "JUMPDEST", "source": 1 }, + { "begin": 6752, "end": 6869, "name": "JUMPDEST", "source": 2 }, { - "begin": 6856, - "end": 6857, + "begin": 6861, + "end": 6862, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6853, "end": 6854, "name": "DUP1", "source": 1 }, - { "begin": 6846, "end": 6858, "name": "REVERT", "source": 1 }, + { "begin": 6858, "end": 6859, "name": "DUP1", "source": 2 }, + { "begin": 6851, "end": 6863, "name": "REVERT", "source": 2 }, { - "begin": 6870, - "end": 7050, + "begin": 6875, + "end": 7055, "name": "tag", - "source": 1, + "source": 2, "value": "184" }, - { "begin": 6870, "end": 7050, "name": "JUMPDEST", "source": 1 }, + { "begin": 6875, "end": 7055, "name": "JUMPDEST", "source": 2 }, { - "begin": 6918, - "end": 6995, + "begin": 6923, + "end": 7000, "name": "PUSH", - "source": 1, + "source": 2, "value": "4E487B7100000000000000000000000000000000000000000000000000000000" }, { - "begin": 6915, - "end": 6916, + "begin": 6920, + "end": 6921, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6908, "end": 6996, "name": "MSTORE", "source": 1 }, + { "begin": 6913, "end": 7001, "name": "MSTORE", "source": 2 }, { - "begin": 7015, - "end": 7019, + "begin": 7020, + "end": 7024, "name": "PUSH", - "source": 1, + "source": 2, "value": "41" }, { - "begin": 7012, - "end": 7013, + "begin": 7017, + "end": 7018, "name": "PUSH", - "source": 1, + "source": 2, "value": "4" }, - { "begin": 7005, "end": 7020, "name": "MSTORE", "source": 1 }, + { "begin": 7010, "end": 7025, "name": "MSTORE", "source": 2 }, { - "begin": 7039, - "end": 7043, + "begin": 7044, + "end": 7048, "name": "PUSH", - "source": 1, + "source": 2, "value": "24" }, { - "begin": 7036, - "end": 7037, + "begin": 7041, + "end": 7042, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 7029, "end": 7044, "name": "REVERT", "source": 1 }, + { "begin": 7034, "end": 7049, "name": "REVERT", "source": 2 }, { - "begin": 7056, - "end": 7337, + "begin": 7061, + "end": 7342, "name": "tag", - "source": 1, + "source": 2, "value": "185" }, - { "begin": 7056, "end": 7337, "name": "JUMPDEST", "source": 1 }, + { "begin": 7061, "end": 7342, "name": "JUMPDEST", "source": 2 }, { - "begin": 7139, - "end": 7166, + "begin": 7144, + "end": 7171, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "283" }, - { "begin": 7161, "end": 7165, "name": "DUP3", "source": 1 }, + { "begin": 7166, "end": 7170, "name": "DUP3", "source": 2 }, { - "begin": 7139, - "end": 7166, + "begin": 7144, + "end": 7171, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "160" }, { - "begin": 7139, - "end": 7166, + "begin": 7144, + "end": 7171, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7139, - "end": 7166, + "begin": 7144, + "end": 7171, "name": "tag", - "source": 1, + "source": 2, "value": "283" }, - { "begin": 7139, "end": 7166, "name": "JUMPDEST", "source": 1 }, - { "begin": 7131, "end": 7137, "name": "DUP2", "source": 1 }, - { "begin": 7127, "end": 7167, "name": "ADD", "source": 1 }, - { "begin": 7269, "end": 7275, "name": "DUP2", "source": 1 }, - { "begin": 7257, "end": 7267, "name": "DUP2", "source": 1 }, - { "begin": 7254, "end": 7276, "name": "LT", "source": 1 }, + { "begin": 7144, "end": 7171, "name": "JUMPDEST", "source": 2 }, + { "begin": 7136, "end": 7142, "name": "DUP2", "source": 2 }, + { "begin": 7132, "end": 7172, "name": "ADD", "source": 2 }, + { "begin": 7274, "end": 7280, "name": "DUP2", "source": 2 }, + { "begin": 7262, "end": 7272, "name": "DUP2", "source": 2 }, + { "begin": 7259, "end": 7281, "name": "LT", "source": 2 }, { - "begin": 7233, - "end": 7251, + "begin": 7238, + "end": 7256, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 7221, "end": 7231, "name": "DUP3", "source": 1 }, - { "begin": 7218, "end": 7252, "name": "GT", "source": 1 }, - { "begin": 7215, "end": 7277, "name": "OR", "source": 1 }, - { "begin": 7212, "end": 7300, "name": "ISZERO", "source": 1 }, + { "begin": 7226, "end": 7236, "name": "DUP3", "source": 2 }, + { "begin": 7223, "end": 7257, "name": "GT", "source": 2 }, + { "begin": 7220, "end": 7282, "name": "OR", "source": 2 }, + { "begin": 7217, "end": 7305, "name": "ISZERO", "source": 2 }, { - "begin": 7212, - "end": 7300, + "begin": 7217, + "end": 7305, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "284" }, - { "begin": 7212, "end": 7300, "name": "JUMPI", "source": 1 }, + { "begin": 7217, "end": 7305, "name": "JUMPI", "source": 2 }, { - "begin": 7280, - "end": 7298, + "begin": 7285, + "end": 7303, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "285" }, { - "begin": 7280, - "end": 7298, + "begin": 7285, + "end": 7303, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "184" }, { - "begin": 7280, - "end": 7298, + "begin": 7285, + "end": 7303, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7280, - "end": 7298, + "begin": 7285, + "end": 7303, "name": "tag", - "source": 1, + "source": 2, "value": "285" }, - { "begin": 7280, "end": 7298, "name": "JUMPDEST", "source": 1 }, + { "begin": 7285, "end": 7303, "name": "JUMPDEST", "source": 2 }, { - "begin": 7212, - "end": 7300, + "begin": 7217, + "end": 7305, "name": "tag", - "source": 1, + "source": 2, "value": "284" }, - { "begin": 7212, "end": 7300, "name": "JUMPDEST", "source": 1 }, - { "begin": 7320, "end": 7330, "name": "DUP1", "source": 1 }, + { "begin": 7217, "end": 7305, "name": "JUMPDEST", "source": 2 }, + { "begin": 7325, "end": 7335, "name": "DUP1", "source": 2 }, { - "begin": 7316, - "end": 7318, + "begin": 7321, + "end": 7323, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 7309, "end": 7331, "name": "MSTORE", "source": 1 }, - { "begin": 7099, "end": 7337, "name": "POP", "source": 1 }, - { "begin": 7056, "end": 7337, "name": "POP", "source": 1 }, - { "begin": 7056, "end": 7337, "name": "POP", "source": 1 }, + { "begin": 7314, "end": 7336, "name": "MSTORE", "source": 2 }, + { "begin": 7104, "end": 7342, "name": "POP", "source": 2 }, + { "begin": 7061, "end": 7342, "name": "POP", "source": 2 }, + { "begin": 7061, "end": 7342, "name": "POP", "source": 2 }, { - "begin": 7056, - "end": 7337, + "begin": 7061, + "end": 7342, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 7343, - "end": 7472, + "begin": 7348, + "end": 7477, "name": "tag", - "source": 1, + "source": 2, "value": "186" }, - { "begin": 7343, "end": 7472, "name": "JUMPDEST", "source": 1 }, + { "begin": 7348, "end": 7477, "name": "JUMPDEST", "source": 2 }, { - "begin": 7377, - "end": 7383, + "begin": 7382, + "end": 7388, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 7404, - "end": 7424, + "begin": 7409, + "end": 7429, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "287" }, { - "begin": 7404, - "end": 7424, + "begin": 7409, + "end": 7429, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "162" }, { - "begin": 7404, - "end": 7424, + "begin": 7409, + "end": 7429, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7404, - "end": 7424, + "begin": 7409, + "end": 7429, "name": "tag", - "source": 1, + "source": 2, "value": "287" }, - { "begin": 7404, "end": 7424, "name": "JUMPDEST", "source": 1 }, - { "begin": 7394, "end": 7424, "name": "SWAP1", "source": 1 }, - { "begin": 7394, "end": 7424, "name": "POP", "source": 1 }, + { "begin": 7409, "end": 7429, "name": "JUMPDEST", "source": 2 }, + { "begin": 7399, "end": 7429, "name": "SWAP1", "source": 2 }, + { "begin": 7399, "end": 7429, "name": "POP", "source": 2 }, { - "begin": 7433, - "end": 7466, + "begin": 7438, + "end": 7471, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "288" }, - { "begin": 7461, "end": 7465, "name": "DUP3", "source": 1 }, - { "begin": 7453, "end": 7459, "name": "DUP3", "source": 1 }, + { "begin": 7466, "end": 7470, "name": "DUP3", "source": 2 }, + { "begin": 7458, "end": 7464, "name": "DUP3", "source": 2 }, { - "begin": 7433, - "end": 7466, + "begin": 7438, + "end": 7471, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "185" }, { - "begin": 7433, - "end": 7466, + "begin": 7438, + "end": 7471, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7433, - "end": 7466, + "begin": 7438, + "end": 7471, "name": "tag", - "source": 1, + "source": 2, "value": "288" }, - { "begin": 7433, "end": 7466, "name": "JUMPDEST", "source": 1 }, - { "begin": 7343, "end": 7472, "name": "SWAP2", "source": 1 }, - { "begin": 7343, "end": 7472, "name": "SWAP1", "source": 1 }, - { "begin": 7343, "end": 7472, "name": "POP", "source": 1 }, + { "begin": 7438, "end": 7471, "name": "JUMPDEST", "source": 2 }, + { "begin": 7348, "end": 7477, "name": "SWAP2", "source": 2 }, + { "begin": 7348, "end": 7477, "name": "SWAP1", "source": 2 }, + { "begin": 7348, "end": 7477, "name": "POP", "source": 2 }, { - "begin": 7343, - "end": 7472, + "begin": 7348, + "end": 7477, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 7478, - "end": 7786, + "begin": 7483, + "end": 7791, "name": "tag", - "source": 1, + "source": 2, "value": "187" }, - { "begin": 7478, "end": 7786, "name": "JUMPDEST", "source": 1 }, + { "begin": 7483, "end": 7791, "name": "JUMPDEST", "source": 2 }, { - "begin": 7540, - "end": 7544, + "begin": 7545, + "end": 7549, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 7630, - "end": 7648, + "begin": 7635, + "end": 7653, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 7622, "end": 7628, "name": "DUP3", "source": 1 }, - { "begin": 7619, "end": 7649, "name": "GT", "source": 1 }, - { "begin": 7616, "end": 7672, "name": "ISZERO", "source": 1 }, + { "begin": 7627, "end": 7633, "name": "DUP3", "source": 2 }, + { "begin": 7624, "end": 7654, "name": "GT", "source": 2 }, + { "begin": 7621, "end": 7677, "name": "ISZERO", "source": 2 }, { - "begin": 7616, - "end": 7672, + "begin": 7621, + "end": 7677, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "290" }, - { "begin": 7616, "end": 7672, "name": "JUMPI", "source": 1 }, + { "begin": 7621, "end": 7677, "name": "JUMPI", "source": 2 }, { - "begin": 7652, - "end": 7670, + "begin": 7657, + "end": 7675, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "291" }, { - "begin": 7652, - "end": 7670, + "begin": 7657, + "end": 7675, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "184" }, { - "begin": 7652, - "end": 7670, + "begin": 7657, + "end": 7675, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7652, - "end": 7670, + "begin": 7657, + "end": 7675, "name": "tag", - "source": 1, + "source": 2, "value": "291" }, - { "begin": 7652, "end": 7670, "name": "JUMPDEST", "source": 1 }, + { "begin": 7657, "end": 7675, "name": "JUMPDEST", "source": 2 }, { - "begin": 7616, - "end": 7672, + "begin": 7621, + "end": 7677, "name": "tag", - "source": 1, + "source": 2, "value": "290" }, - { "begin": 7616, "end": 7672, "name": "JUMPDEST", "source": 1 }, + { "begin": 7621, "end": 7677, "name": "JUMPDEST", "source": 2 }, { - "begin": 7690, - "end": 7719, + "begin": 7695, + "end": 7724, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "292" }, - { "begin": 7712, "end": 7718, "name": "DUP3", "source": 1 }, + { "begin": 7717, "end": 7723, "name": "DUP3", "source": 2 }, { - "begin": 7690, - "end": 7719, + "begin": 7695, + "end": 7724, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "160" }, { - "begin": 7690, - "end": 7719, + "begin": 7695, + "end": 7724, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7690, - "end": 7719, + "begin": 7695, + "end": 7724, "name": "tag", - "source": 1, + "source": 2, "value": "292" }, - { "begin": 7690, "end": 7719, "name": "JUMPDEST", "source": 1 }, - { "begin": 7682, "end": 7719, "name": "SWAP1", "source": 1 }, - { "begin": 7682, "end": 7719, "name": "POP", "source": 1 }, + { "begin": 7695, "end": 7724, "name": "JUMPDEST", "source": 2 }, + { "begin": 7687, "end": 7724, "name": "SWAP1", "source": 2 }, + { "begin": 7687, "end": 7724, "name": "POP", "source": 2 }, { - "begin": 7774, - "end": 7778, + "begin": 7779, + "end": 7783, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 7768, "end": 7772, "name": "DUP2", "source": 1 }, - { "begin": 7764, "end": 7779, "name": "ADD", "source": 1 }, - { "begin": 7756, "end": 7779, "name": "SWAP1", "source": 1 }, - { "begin": 7756, "end": 7779, "name": "POP", "source": 1 }, - { "begin": 7478, "end": 7786, "name": "SWAP2", "source": 1 }, - { "begin": 7478, "end": 7786, "name": "SWAP1", "source": 1 }, - { "begin": 7478, "end": 7786, "name": "POP", "source": 1 }, + { "begin": 7773, "end": 7777, "name": "DUP2", "source": 2 }, + { "begin": 7769, "end": 7784, "name": "ADD", "source": 2 }, + { "begin": 7761, "end": 7784, "name": "SWAP1", "source": 2 }, + { "begin": 7761, "end": 7784, "name": "POP", "source": 2 }, + { "begin": 7483, "end": 7791, "name": "SWAP2", "source": 2 }, + { "begin": 7483, "end": 7791, "name": "SWAP1", "source": 2 }, + { "begin": 7483, "end": 7791, "name": "POP", "source": 2 }, { - "begin": 7478, - "end": 7786, + "begin": 7483, + "end": 7791, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 7792, - "end": 8213, + "begin": 7797, + "end": 8218, "name": "tag", - "source": 1, + "source": 2, "value": "188" }, - { "begin": 7792, "end": 8213, "name": "JUMPDEST", "source": 1 }, + { "begin": 7797, "end": 8218, "name": "JUMPDEST", "source": 2 }, { - "begin": 7881, - "end": 7886, + "begin": 7886, + "end": 7891, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 7906, - "end": 7972, + "begin": 7911, + "end": 7977, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "294" }, { - "begin": 7922, - "end": 7971, + "begin": 7927, + "end": 7976, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "295" }, - { "begin": 7964, "end": 7970, "name": "DUP5", "source": 1 }, + { "begin": 7969, "end": 7975, "name": "DUP5", "source": 2 }, { - "begin": 7922, - "end": 7971, + "begin": 7927, + "end": 7976, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "187" }, { - "begin": 7922, - "end": 7971, + "begin": 7927, + "end": 7976, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7922, - "end": 7971, + "begin": 7927, + "end": 7976, "name": "tag", - "source": 1, + "source": 2, "value": "295" }, - { "begin": 7922, "end": 7971, "name": "JUMPDEST", "source": 1 }, + { "begin": 7927, "end": 7976, "name": "JUMPDEST", "source": 2 }, { - "begin": 7906, - "end": 7972, + "begin": 7911, + "end": 7977, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "186" }, { - "begin": 7906, - "end": 7972, + "begin": 7911, + "end": 7977, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7906, - "end": 7972, + "begin": 7911, + "end": 7977, "name": "tag", - "source": 1, + "source": 2, "value": "294" }, - { "begin": 7906, "end": 7972, "name": "JUMPDEST", "source": 1 }, - { "begin": 7897, "end": 7972, "name": "SWAP1", "source": 1 }, - { "begin": 7897, "end": 7972, "name": "POP", "source": 1 }, - { "begin": 7995, "end": 8001, "name": "DUP3", "source": 1 }, - { "begin": 7988, "end": 7993, "name": "DUP2", "source": 1 }, - { "begin": 7981, "end": 8002, "name": "MSTORE", "source": 1 }, + { "begin": 7911, "end": 7977, "name": "JUMPDEST", "source": 2 }, + { "begin": 7902, "end": 7977, "name": "SWAP1", "source": 2 }, + { "begin": 7902, "end": 7977, "name": "POP", "source": 2 }, + { "begin": 8000, "end": 8006, "name": "DUP3", "source": 2 }, + { "begin": 7993, "end": 7998, "name": "DUP2", "source": 2 }, + { "begin": 7986, "end": 8007, "name": "MSTORE", "source": 2 }, { - "begin": 8033, - "end": 8037, + "begin": 8038, + "end": 8042, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8026, "end": 8031, "name": "DUP2", "source": 1 }, - { "begin": 8022, "end": 8038, "name": "ADD", "source": 1 }, - { "begin": 8071, "end": 8074, "name": "DUP5", "source": 1 }, - { "begin": 8062, "end": 8068, "name": "DUP5", "source": 1 }, - { "begin": 8057, "end": 8060, "name": "DUP5", "source": 1 }, - { "begin": 8053, "end": 8069, "name": "ADD", "source": 1 }, - { "begin": 8050, "end": 8075, "name": "GT", "source": 1 }, - { "begin": 8047, "end": 8159, "name": "ISZERO", "source": 1 }, + { "begin": 8031, "end": 8036, "name": "DUP2", "source": 2 }, + { "begin": 8027, "end": 8043, "name": "ADD", "source": 2 }, + { "begin": 8076, "end": 8079, "name": "DUP5", "source": 2 }, + { "begin": 8067, "end": 8073, "name": "DUP5", "source": 2 }, + { "begin": 8062, "end": 8065, "name": "DUP5", "source": 2 }, + { "begin": 8058, "end": 8074, "name": "ADD", "source": 2 }, + { "begin": 8055, "end": 8080, "name": "GT", "source": 2 }, + { "begin": 8052, "end": 8164, "name": "ISZERO", "source": 2 }, { - "begin": 8047, - "end": 8159, + "begin": 8052, + "end": 8164, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "296" }, - { "begin": 8047, "end": 8159, "name": "JUMPI", "source": 1 }, + { "begin": 8052, "end": 8164, "name": "JUMPI", "source": 2 }, { - "begin": 8078, - "end": 8157, + "begin": 8083, + "end": 8162, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "297" }, { - "begin": 8078, - "end": 8157, + "begin": 8083, + "end": 8162, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "183" }, { - "begin": 8078, - "end": 8157, + "begin": 8083, + "end": 8162, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8078, - "end": 8157, + "begin": 8083, + "end": 8162, "name": "tag", - "source": 1, + "source": 2, "value": "297" }, - { "begin": 8078, "end": 8157, "name": "JUMPDEST", "source": 1 }, + { "begin": 8083, "end": 8162, "name": "JUMPDEST", "source": 2 }, { - "begin": 8047, - "end": 8159, + "begin": 8052, + "end": 8164, "name": "tag", - "source": 1, + "source": 2, "value": "296" }, - { "begin": 8047, "end": 8159, "name": "JUMPDEST", "source": 1 }, + { "begin": 8052, "end": 8164, "name": "JUMPDEST", "source": 2 }, { - "begin": 8168, - "end": 8207, + "begin": 8173, + "end": 8212, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "298" }, - { "begin": 8200, "end": 8206, "name": "DUP5", "source": 1 }, - { "begin": 8195, "end": 8198, "name": "DUP3", "source": 1 }, - { "begin": 8190, "end": 8193, "name": "DUP6", "source": 1 }, + { "begin": 8205, "end": 8211, "name": "DUP5", "source": 2 }, + { "begin": 8200, "end": 8203, "name": "DUP3", "source": 2 }, + { "begin": 8195, "end": 8198, "name": "DUP6", "source": 2 }, { - "begin": 8168, - "end": 8207, + "begin": 8173, + "end": 8212, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "159" }, { - "begin": 8168, - "end": 8207, + "begin": 8173, + "end": 8212, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8168, - "end": 8207, + "begin": 8173, + "end": 8212, "name": "tag", - "source": 1, + "source": 2, "value": "298" }, - { "begin": 8168, "end": 8207, "name": "JUMPDEST", "source": 1 }, - { "begin": 7887, "end": 8213, "name": "POP", "source": 1 }, - { "begin": 7792, "end": 8213, "name": "SWAP4", "source": 1 }, - { "begin": 7792, "end": 8213, "name": "SWAP3", "source": 1 }, - { "begin": 7792, "end": 8213, "name": "POP", "source": 1 }, - { "begin": 7792, "end": 8213, "name": "POP", "source": 1 }, - { "begin": 7792, "end": 8213, "name": "POP", "source": 1 }, + { "begin": 8173, "end": 8212, "name": "JUMPDEST", "source": 2 }, + { "begin": 7892, "end": 8218, "name": "POP", "source": 2 }, + { "begin": 7797, "end": 8218, "name": "SWAP4", "source": 2 }, + { "begin": 7797, "end": 8218, "name": "SWAP3", "source": 2 }, + { "begin": 7797, "end": 8218, "name": "POP", "source": 2 }, + { "begin": 7797, "end": 8218, "name": "POP", "source": 2 }, + { "begin": 7797, "end": 8218, "name": "POP", "source": 2 }, { - "begin": 7792, - "end": 8213, + "begin": 7797, + "end": 8218, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8233, - "end": 8588, + "begin": 8238, + "end": 8593, "name": "tag", - "source": 1, + "source": 2, "value": "189" }, - { "begin": 8233, "end": 8588, "name": "JUMPDEST", "source": 1 }, + { "begin": 8238, "end": 8593, "name": "JUMPDEST", "source": 2 }, { - "begin": 8300, - "end": 8305, + "begin": 8305, + "end": 8310, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 8349, "end": 8352, "name": "DUP3", "source": 1 }, + { "begin": 8354, "end": 8357, "name": "DUP3", "source": 2 }, { - "begin": 8342, - "end": 8346, + "begin": 8347, + "end": 8351, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 8334, "end": 8340, "name": "DUP4", "source": 1 }, - { "begin": 8330, "end": 8347, "name": "ADD", "source": 1 }, - { "begin": 8326, "end": 8353, "name": "SLT", "source": 1 }, + { "begin": 8339, "end": 8345, "name": "DUP4", "source": 2 }, + { "begin": 8335, "end": 8352, "name": "ADD", "source": 2 }, + { "begin": 8331, "end": 8358, "name": "SLT", "source": 2 }, { - "begin": 8316, - "end": 8438, + "begin": 8321, + "end": 8443, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "300" }, - { "begin": 8316, "end": 8438, "name": "JUMPI", "source": 1 }, + { "begin": 8321, "end": 8443, "name": "JUMPI", "source": 2 }, { - "begin": 8357, - "end": 8436, + "begin": 8362, + "end": 8441, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "301" }, { - "begin": 8357, - "end": 8436, + "begin": 8362, + "end": 8441, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "182" }, { - "begin": 8357, - "end": 8436, + "begin": 8362, + "end": 8441, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8357, - "end": 8436, + "begin": 8362, + "end": 8441, "name": "tag", - "source": 1, + "source": 2, "value": "301" }, - { "begin": 8357, "end": 8436, "name": "JUMPDEST", "source": 1 }, + { "begin": 8362, "end": 8441, "name": "JUMPDEST", "source": 2 }, { - "begin": 8316, - "end": 8438, + "begin": 8321, + "end": 8443, "name": "tag", - "source": 1, + "source": 2, "value": "300" }, - { "begin": 8316, "end": 8438, "name": "JUMPDEST", "source": 1 }, - { "begin": 8467, "end": 8473, "name": "DUP2", "source": 1 }, - { "begin": 8461, "end": 8474, "name": "MLOAD", "source": 1 }, + { "begin": 8321, "end": 8443, "name": "JUMPDEST", "source": 2 }, + { "begin": 8472, "end": 8478, "name": "DUP2", "source": 2 }, + { "begin": 8466, "end": 8479, "name": "MLOAD", "source": 2 }, { - "begin": 8492, - "end": 8582, + "begin": 8497, + "end": 8587, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "302" }, - { "begin": 8578, "end": 8581, "name": "DUP5", "source": 1 }, - { "begin": 8570, "end": 8576, "name": "DUP3", "source": 1 }, + { "begin": 8583, "end": 8586, "name": "DUP5", "source": 2 }, + { "begin": 8575, "end": 8581, "name": "DUP3", "source": 2 }, { - "begin": 8563, - "end": 8567, + "begin": 8568, + "end": 8572, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8555, "end": 8561, "name": "DUP7", "source": 1 }, - { "begin": 8551, "end": 8568, "name": "ADD", "source": 1 }, + { "begin": 8560, "end": 8566, "name": "DUP7", "source": 2 }, + { "begin": 8556, "end": 8573, "name": "ADD", "source": 2 }, { - "begin": 8492, - "end": 8582, + "begin": 8497, + "end": 8587, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "188" }, { - "begin": 8492, - "end": 8582, + "begin": 8497, + "end": 8587, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8492, - "end": 8582, + "begin": 8497, + "end": 8587, "name": "tag", - "source": 1, + "source": 2, "value": "302" }, - { "begin": 8492, "end": 8582, "name": "JUMPDEST", "source": 1 }, - { "begin": 8483, "end": 8582, "name": "SWAP2", "source": 1 }, - { "begin": 8483, "end": 8582, "name": "POP", "source": 1 }, - { "begin": 8306, "end": 8588, "name": "POP", "source": 1 }, - { "begin": 8233, "end": 8588, "name": "SWAP3", "source": 1 }, - { "begin": 8233, "end": 8588, "name": "SWAP2", "source": 1 }, - { "begin": 8233, "end": 8588, "name": "POP", "source": 1 }, - { "begin": 8233, "end": 8588, "name": "POP", "source": 1 }, - { - "begin": 8233, - "end": 8588, + { "begin": 8497, "end": 8587, "name": "JUMPDEST", "source": 2 }, + { "begin": 8488, "end": 8587, "name": "SWAP2", "source": 2 }, + { "begin": 8488, "end": 8587, "name": "POP", "source": 2 }, + { "begin": 8311, "end": 8593, "name": "POP", "source": 2 }, + { "begin": 8238, "end": 8593, "name": "SWAP3", "source": 2 }, + { "begin": 8238, "end": 8593, "name": "SWAP2", "source": 2 }, + { "begin": 8238, "end": 8593, "name": "POP", "source": 2 }, + { "begin": 8238, "end": 8593, "name": "POP", "source": 2 }, + { + "begin": 8238, + "end": 8593, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8594, - "end": 9118, + "begin": 8599, + "end": 9123, "name": "tag", - "source": 1, + "source": 2, "value": "93" }, - { "begin": 8594, "end": 9118, "name": "JUMPDEST", "source": 1 }, + { "begin": 8599, "end": 9123, "name": "JUMPDEST", "source": 2 }, { - "begin": 8674, - "end": 8680, + "begin": 8679, + "end": 8685, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 8723, - "end": 8725, + "begin": 8728, + "end": 8730, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8711, "end": 8720, "name": "DUP3", "source": 1 }, - { "begin": 8702, "end": 8709, "name": "DUP5", "source": 1 }, - { "begin": 8698, "end": 8721, "name": "SUB", "source": 1 }, - { "begin": 8694, "end": 8726, "name": "SLT", "source": 1 }, - { "begin": 8691, "end": 8810, "name": "ISZERO", "source": 1 }, + { "begin": 8716, "end": 8725, "name": "DUP3", "source": 2 }, + { "begin": 8707, "end": 8714, "name": "DUP5", "source": 2 }, + { "begin": 8703, "end": 8726, "name": "SUB", "source": 2 }, + { "begin": 8699, "end": 8731, "name": "SLT", "source": 2 }, + { "begin": 8696, "end": 8815, "name": "ISZERO", "source": 2 }, { - "begin": 8691, - "end": 8810, + "begin": 8696, + "end": 8815, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "304" }, - { "begin": 8691, "end": 8810, "name": "JUMPI", "source": 1 }, + { "begin": 8696, "end": 8815, "name": "JUMPI", "source": 2 }, { - "begin": 8729, - "end": 8808, + "begin": 8734, + "end": 8813, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "305" }, { - "begin": 8729, - "end": 8808, + "begin": 8734, + "end": 8813, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { - "begin": 8729, - "end": 8808, + "begin": 8734, + "end": 8813, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8729, - "end": 8808, + "begin": 8734, + "end": 8813, "name": "tag", - "source": 1, + "source": 2, "value": "305" }, - { "begin": 8729, "end": 8808, "name": "JUMPDEST", "source": 1 }, + { "begin": 8734, "end": 8813, "name": "JUMPDEST", "source": 2 }, { - "begin": 8691, - "end": 8810, + "begin": 8696, + "end": 8815, "name": "tag", - "source": 1, + "source": 2, "value": "304" }, - { "begin": 8691, "end": 8810, "name": "JUMPDEST", "source": 1 }, + { "begin": 8696, "end": 8815, "name": "JUMPDEST", "source": 2 }, { - "begin": 8870, - "end": 8871, + "begin": 8875, + "end": 8876, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 8859, "end": 8868, "name": "DUP3", "source": 1 }, - { "begin": 8855, "end": 8872, "name": "ADD", "source": 1 }, - { "begin": 8849, "end": 8873, "name": "MLOAD", "source": 1 }, + { "begin": 8864, "end": 8873, "name": "DUP3", "source": 2 }, + { "begin": 8860, "end": 8877, "name": "ADD", "source": 2 }, + { "begin": 8854, "end": 8878, "name": "MLOAD", "source": 2 }, { - "begin": 8900, - "end": 8918, + "begin": 8905, + "end": 8923, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 8892, "end": 8898, "name": "DUP2", "source": 1 }, - { "begin": 8889, "end": 8919, "name": "GT", "source": 1 }, - { "begin": 8886, "end": 9003, "name": "ISZERO", "source": 1 }, + { "begin": 8897, "end": 8903, "name": "DUP2", "source": 2 }, + { "begin": 8894, "end": 8924, "name": "GT", "source": 2 }, + { "begin": 8891, "end": 9008, "name": "ISZERO", "source": 2 }, { - "begin": 8886, - "end": 9003, + "begin": 8891, + "end": 9008, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "306" }, - { "begin": 8886, "end": 9003, "name": "JUMPI", "source": 1 }, + { "begin": 8891, "end": 9008, "name": "JUMPI", "source": 2 }, { - "begin": 8922, - "end": 9001, + "begin": 8927, + "end": 9006, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "307" }, { - "begin": 8922, - "end": 9001, + "begin": 8927, + "end": 9006, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "164" }, { - "begin": 8922, - "end": 9001, + "begin": 8927, + "end": 9006, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8922, - "end": 9001, + "begin": 8927, + "end": 9006, "name": "tag", - "source": 1, + "source": 2, "value": "307" }, - { "begin": 8922, "end": 9001, "name": "JUMPDEST", "source": 1 }, + { "begin": 8927, "end": 9006, "name": "JUMPDEST", "source": 2 }, { - "begin": 8886, - "end": 9003, + "begin": 8891, + "end": 9008, "name": "tag", - "source": 1, + "source": 2, "value": "306" }, - { "begin": 8886, "end": 9003, "name": "JUMPDEST", "source": 1 }, + { "begin": 8891, "end": 9008, "name": "JUMPDEST", "source": 2 }, { - "begin": 9027, - "end": 9101, + "begin": 9032, + "end": 9106, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "308" }, - { "begin": 9093, "end": 9100, "name": "DUP5", "source": 1 }, - { "begin": 9084, "end": 9090, "name": "DUP3", "source": 1 }, - { "begin": 9073, "end": 9082, "name": "DUP6", "source": 1 }, - { "begin": 9069, "end": 9091, "name": "ADD", "source": 1 }, + { "begin": 9098, "end": 9105, "name": "DUP5", "source": 2 }, + { "begin": 9089, "end": 9095, "name": "DUP3", "source": 2 }, + { "begin": 9078, "end": 9087, "name": "DUP6", "source": 2 }, + { "begin": 9074, "end": 9096, "name": "ADD", "source": 2 }, { - "begin": 9027, - "end": 9101, + "begin": 9032, + "end": 9106, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "189" }, { - "begin": 9027, - "end": 9101, + "begin": 9032, + "end": 9106, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9027, - "end": 9101, + "begin": 9032, + "end": 9106, "name": "tag", - "source": 1, + "source": 2, "value": "308" }, - { "begin": 9027, "end": 9101, "name": "JUMPDEST", "source": 1 }, - { "begin": 9017, "end": 9101, "name": "SWAP2", "source": 1 }, - { "begin": 9017, "end": 9101, "name": "POP", "source": 1 }, - { "begin": 8820, "end": 9111, "name": "POP", "source": 1 }, - { "begin": 8594, "end": 9118, "name": "SWAP3", "source": 1 }, - { "begin": 8594, "end": 9118, "name": "SWAP2", "source": 1 }, - { "begin": 8594, "end": 9118, "name": "POP", "source": 1 }, - { "begin": 8594, "end": 9118, "name": "POP", "source": 1 }, - { - "begin": 8594, - "end": 9118, + { "begin": 9032, "end": 9106, "name": "JUMPDEST", "source": 2 }, + { "begin": 9022, "end": 9106, "name": "SWAP2", "source": 2 }, + { "begin": 9022, "end": 9106, "name": "POP", "source": 2 }, + { "begin": 8825, "end": 9116, "name": "POP", "source": 2 }, + { "begin": 8599, "end": 9123, "name": "SWAP3", "source": 2 }, + { "begin": 8599, "end": 9123, "name": "SWAP2", "source": 2 }, + { "begin": 8599, "end": 9123, "name": "POP", "source": 2 }, + { "begin": 8599, "end": 9123, "name": "POP", "source": 2 }, + { + "begin": 8599, + "end": 9123, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9124, - "end": 9242, + "begin": 9129, + "end": 9247, "name": "tag", - "source": 1, + "source": 2, "value": "190" }, - { "begin": 9124, "end": 9242, "name": "JUMPDEST", "source": 1 }, + { "begin": 9129, "end": 9247, "name": "JUMPDEST", "source": 2 }, { - "begin": 9211, - "end": 9235, + "begin": 9216, + "end": 9240, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "310" }, - { "begin": 9229, "end": 9234, "name": "DUP2", "source": 1 }, + { "begin": 9234, "end": 9239, "name": "DUP2", "source": 2 }, { - "begin": 9211, - "end": 9235, + "begin": 9216, + "end": 9240, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "166" }, { - "begin": 9211, - "end": 9235, + "begin": 9216, + "end": 9240, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9211, - "end": 9235, + "begin": 9216, + "end": 9240, "name": "tag", - "source": 1, + "source": 2, "value": "310" }, - { "begin": 9211, "end": 9235, "name": "JUMPDEST", "source": 1 }, - { "begin": 9206, "end": 9209, "name": "DUP3", "source": 1 }, - { "begin": 9199, "end": 9236, "name": "MSTORE", "source": 1 }, - { "begin": 9124, "end": 9242, "name": "POP", "source": 1 }, - { "begin": 9124, "end": 9242, "name": "POP", "source": 1 }, + { "begin": 9216, "end": 9240, "name": "JUMPDEST", "source": 2 }, + { "begin": 9211, "end": 9214, "name": "DUP3", "source": 2 }, + { "begin": 9204, "end": 9241, "name": "MSTORE", "source": 2 }, + { "begin": 9129, "end": 9247, "name": "POP", "source": 2 }, + { "begin": 9129, "end": 9247, "name": "POP", "source": 2 }, { - "begin": 9124, - "end": 9242, + "begin": 9129, + "end": 9247, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9248, - "end": 9580, + "begin": 9253, + "end": 9585, "name": "tag", - "source": 1, + "source": 2, "value": "96" }, - { "begin": 9248, "end": 9580, "name": "JUMPDEST", "source": 1 }, + { "begin": 9253, "end": 9585, "name": "JUMPDEST", "source": 2 }, { - "begin": 9369, - "end": 9373, + "begin": 9374, + "end": 9378, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 9407, - "end": 9409, + "begin": 9412, + "end": 9414, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 9396, "end": 9405, "name": "DUP3", "source": 1 }, - { "begin": 9392, "end": 9410, "name": "ADD", "source": 1 }, - { "begin": 9384, "end": 9410, "name": "SWAP1", "source": 1 }, - { "begin": 9384, "end": 9410, "name": "POP", "source": 1 }, + { "begin": 9401, "end": 9410, "name": "DUP3", "source": 2 }, + { "begin": 9397, "end": 9415, "name": "ADD", "source": 2 }, + { "begin": 9389, "end": 9415, "name": "SWAP1", "source": 2 }, + { "begin": 9389, "end": 9415, "name": "POP", "source": 2 }, { - "begin": 9420, - "end": 9491, + "begin": 9425, + "end": 9496, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "312" }, { - "begin": 9488, - "end": 9489, + "begin": 9493, + "end": 9494, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 9477, "end": 9486, "name": "DUP4", "source": 1 }, - { "begin": 9473, "end": 9490, "name": "ADD", "source": 1 }, - { "begin": 9464, "end": 9470, "name": "DUP6", "source": 1 }, + { "begin": 9482, "end": 9491, "name": "DUP4", "source": 2 }, + { "begin": 9478, "end": 9495, "name": "ADD", "source": 2 }, + { "begin": 9469, "end": 9475, "name": "DUP6", "source": 2 }, { - "begin": 9420, - "end": 9491, + "begin": 9425, + "end": 9496, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, { - "begin": 9420, - "end": 9491, + "begin": 9425, + "end": 9496, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9420, - "end": 9491, + "begin": 9425, + "end": 9496, "name": "tag", - "source": 1, + "source": 2, "value": "312" }, - { "begin": 9420, "end": 9491, "name": "JUMPDEST", "source": 1 }, + { "begin": 9425, "end": 9496, "name": "JUMPDEST", "source": 2 }, { - "begin": 9501, - "end": 9573, + "begin": 9506, + "end": 9578, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "313" }, { - "begin": 9569, - "end": 9571, + "begin": 9574, + "end": 9576, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9558, "end": 9567, "name": "DUP4", "source": 1 }, - { "begin": 9554, "end": 9572, "name": "ADD", "source": 1 }, - { "begin": 9545, "end": 9551, "name": "DUP5", "source": 1 }, + { "begin": 9563, "end": 9572, "name": "DUP4", "source": 2 }, + { "begin": 9559, "end": 9577, "name": "ADD", "source": 2 }, + { "begin": 9550, "end": 9556, "name": "DUP5", "source": 2 }, { - "begin": 9501, - "end": 9573, + "begin": 9506, + "end": 9578, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "174" }, { - "begin": 9501, - "end": 9573, + "begin": 9506, + "end": 9578, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9501, - "end": 9573, + "begin": 9506, + "end": 9578, "name": "tag", - "source": 1, + "source": 2, "value": "313" }, - { "begin": 9501, "end": 9573, "name": "JUMPDEST", "source": 1 }, - { "begin": 9248, "end": 9580, "name": "SWAP4", "source": 1 }, - { "begin": 9248, "end": 9580, "name": "SWAP3", "source": 1 }, - { "begin": 9248, "end": 9580, "name": "POP", "source": 1 }, - { "begin": 9248, "end": 9580, "name": "POP", "source": 1 }, - { "begin": 9248, "end": 9580, "name": "POP", "source": 1 }, + { "begin": 9506, "end": 9578, "name": "JUMPDEST", "source": 2 }, + { "begin": 9253, "end": 9585, "name": "SWAP4", "source": 2 }, + { "begin": 9253, "end": 9585, "name": "SWAP3", "source": 2 }, + { "begin": 9253, "end": 9585, "name": "POP", "source": 2 }, + { "begin": 9253, "end": 9585, "name": "POP", "source": 2 }, + { "begin": 9253, "end": 9585, "name": "POP", "source": 2 }, { - "begin": 9248, - "end": 9580, + "begin": 9253, + "end": 9585, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9586, - "end": 9702, + "begin": 9591, + "end": 9707, "name": "tag", - "source": 1, + "source": 2, "value": "191" }, - { "begin": 9586, "end": 9702, "name": "JUMPDEST", "source": 1 }, + { "begin": 9591, "end": 9707, "name": "JUMPDEST", "source": 2 }, { - "begin": 9656, - "end": 9677, + "begin": 9661, + "end": 9682, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "315" }, - { "begin": 9671, "end": 9676, "name": "DUP2", "source": 1 }, + { "begin": 9676, "end": 9681, "name": "DUP2", "source": 2 }, { - "begin": 9656, - "end": 9677, + "begin": 9661, + "end": 9682, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "172" }, { - "begin": 9656, - "end": 9677, + "begin": 9661, + "end": 9682, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9656, - "end": 9677, + "begin": 9661, + "end": 9682, "name": "tag", - "source": 1, + "source": 2, "value": "315" }, - { "begin": 9656, "end": 9677, "name": "JUMPDEST", "source": 1 }, - { "begin": 9649, "end": 9654, "name": "DUP2", "source": 1 }, - { "begin": 9646, "end": 9678, "name": "EQ", "source": 1 }, + { "begin": 9661, "end": 9682, "name": "JUMPDEST", "source": 2 }, + { "begin": 9654, "end": 9659, "name": "DUP2", "source": 2 }, + { "begin": 9651, "end": 9683, "name": "EQ", "source": 2 }, { - "begin": 9636, - "end": 9696, + "begin": 9641, + "end": 9701, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "316" }, - { "begin": 9636, "end": 9696, "name": "JUMPI", "source": 1 }, + { "begin": 9641, "end": 9701, "name": "JUMPI", "source": 2 }, { - "begin": 9692, - "end": 9693, + "begin": 9697, + "end": 9698, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 9689, "end": 9690, "name": "DUP1", "source": 1 }, - { "begin": 9682, "end": 9694, "name": "REVERT", "source": 1 }, + { "begin": 9694, "end": 9695, "name": "DUP1", "source": 2 }, + { "begin": 9687, "end": 9699, "name": "REVERT", "source": 2 }, { - "begin": 9636, - "end": 9696, + "begin": 9641, + "end": 9701, "name": "tag", - "source": 1, + "source": 2, "value": "316" }, - { "begin": 9636, "end": 9696, "name": "JUMPDEST", "source": 1 }, - { "begin": 9586, "end": 9702, "name": "POP", "source": 1 }, + { "begin": 9641, "end": 9701, "name": "JUMPDEST", "source": 2 }, + { "begin": 9591, "end": 9707, "name": "POP", "source": 2 }, { - "begin": 9586, - "end": 9702, + "begin": 9591, + "end": 9707, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9708, - "end": 9845, + "begin": 9713, + "end": 9850, "name": "tag", - "source": 1, + "source": 2, "value": "192" }, - { "begin": 9708, "end": 9845, "name": "JUMPDEST", "source": 1 }, + { "begin": 9713, "end": 9850, "name": "JUMPDEST", "source": 2 }, { - "begin": 9762, - "end": 9767, + "begin": 9767, + "end": 9772, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 9793, "end": 9799, "name": "DUP2", "source": 1 }, - { "begin": 9787, "end": 9800, "name": "MLOAD", "source": 1 }, - { "begin": 9778, "end": 9800, "name": "SWAP1", "source": 1 }, - { "begin": 9778, "end": 9800, "name": "POP", "source": 1 }, + { "begin": 9798, "end": 9804, "name": "DUP2", "source": 2 }, + { "begin": 9792, "end": 9805, "name": "MLOAD", "source": 2 }, + { "begin": 9783, "end": 9805, "name": "SWAP1", "source": 2 }, + { "begin": 9783, "end": 9805, "name": "POP", "source": 2 }, { - "begin": 9809, - "end": 9839, + "begin": 9814, + "end": 9844, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "318" }, - { "begin": 9833, "end": 9838, "name": "DUP2", "source": 1 }, + { "begin": 9838, "end": 9843, "name": "DUP2", "source": 2 }, { - "begin": 9809, - "end": 9839, + "begin": 9814, + "end": 9844, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "191" }, { - "begin": 9809, - "end": 9839, + "begin": 9814, + "end": 9844, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9809, - "end": 9839, + "begin": 9814, + "end": 9844, "name": "tag", - "source": 1, + "source": 2, "value": "318" }, - { "begin": 9809, "end": 9839, "name": "JUMPDEST", "source": 1 }, - { "begin": 9708, "end": 9845, "name": "SWAP3", "source": 1 }, - { "begin": 9708, "end": 9845, "name": "SWAP2", "source": 1 }, - { "begin": 9708, "end": 9845, "name": "POP", "source": 1 }, - { "begin": 9708, "end": 9845, "name": "POP", "source": 1 }, + { "begin": 9814, "end": 9844, "name": "JUMPDEST", "source": 2 }, + { "begin": 9713, "end": 9850, "name": "SWAP3", "source": 2 }, + { "begin": 9713, "end": 9850, "name": "SWAP2", "source": 2 }, + { "begin": 9713, "end": 9850, "name": "POP", "source": 2 }, + { "begin": 9713, "end": 9850, "name": "POP", "source": 2 }, { - "begin": 9708, - "end": 9845, + "begin": 9713, + "end": 9850, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9851, - "end": 10196, + "begin": 9856, + "end": 10201, "name": "tag", - "source": 1, + "source": 2, "value": "100" }, - { "begin": 9851, "end": 10196, "name": "JUMPDEST", "source": 1 }, + { "begin": 9856, "end": 10201, "name": "JUMPDEST", "source": 2 }, { - "begin": 9918, - "end": 9924, + "begin": 9923, + "end": 9929, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 9967, - "end": 9969, + "begin": 9972, + "end": 9974, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9955, "end": 9964, "name": "DUP3", "source": 1 }, - { "begin": 9946, "end": 9953, "name": "DUP5", "source": 1 }, - { "begin": 9942, "end": 9965, "name": "SUB", "source": 1 }, - { "begin": 9938, "end": 9970, "name": "SLT", "source": 1 }, - { "begin": 9935, "end": 10054, "name": "ISZERO", "source": 1 }, + { "begin": 9960, "end": 9969, "name": "DUP3", "source": 2 }, + { "begin": 9951, "end": 9958, "name": "DUP5", "source": 2 }, + { "begin": 9947, "end": 9970, "name": "SUB", "source": 2 }, + { "begin": 9943, "end": 9975, "name": "SLT", "source": 2 }, + { "begin": 9940, "end": 10059, "name": "ISZERO", "source": 2 }, { - "begin": 9935, - "end": 10054, + "begin": 9940, + "end": 10059, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "320" }, - { "begin": 9935, "end": 10054, "name": "JUMPI", "source": 1 }, + { "begin": 9940, "end": 10059, "name": "JUMPI", "source": 2 }, { - "begin": 9973, - "end": 10052, + "begin": 9978, + "end": 10057, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "321" }, { - "begin": 9973, - "end": 10052, + "begin": 9978, + "end": 10057, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { - "begin": 9973, - "end": 10052, + "begin": 9978, + "end": 10057, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9973, - "end": 10052, + "begin": 9978, + "end": 10057, "name": "tag", - "source": 1, + "source": 2, "value": "321" }, - { "begin": 9973, "end": 10052, "name": "JUMPDEST", "source": 1 }, + { "begin": 9978, "end": 10057, "name": "JUMPDEST", "source": 2 }, { - "begin": 9935, - "end": 10054, + "begin": 9940, + "end": 10059, "name": "tag", - "source": 1, + "source": 2, "value": "320" }, - { "begin": 9935, "end": 10054, "name": "JUMPDEST", "source": 1 }, + { "begin": 9940, "end": 10059, "name": "JUMPDEST", "source": 2 }, { - "begin": 10093, - "end": 10094, + "begin": 10098, + "end": 10099, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 10118, - "end": 10179, + "begin": 10123, + "end": 10184, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "322" }, - { "begin": 10171, "end": 10178, "name": "DUP5", "source": 1 }, - { "begin": 10162, "end": 10168, "name": "DUP3", "source": 1 }, - { "begin": 10151, "end": 10160, "name": "DUP6", "source": 1 }, - { "begin": 10147, "end": 10169, "name": "ADD", "source": 1 }, + { "begin": 10176, "end": 10183, "name": "DUP5", "source": 2 }, + { "begin": 10167, "end": 10173, "name": "DUP3", "source": 2 }, + { "begin": 10156, "end": 10165, "name": "DUP6", "source": 2 }, + { "begin": 10152, "end": 10174, "name": "ADD", "source": 2 }, { - "begin": 10118, - "end": 10179, + "begin": 10123, + "end": 10184, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "192" }, { - "begin": 10118, - "end": 10179, + "begin": 10123, + "end": 10184, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10118, - "end": 10179, + "begin": 10123, + "end": 10184, "name": "tag", - "source": 1, + "source": 2, "value": "322" }, - { "begin": 10118, "end": 10179, "name": "JUMPDEST", "source": 1 }, - { "begin": 10108, "end": 10179, "name": "SWAP2", "source": 1 }, - { "begin": 10108, "end": 10179, "name": "POP", "source": 1 }, - { "begin": 10064, "end": 10189, "name": "POP", "source": 1 }, - { "begin": 9851, "end": 10196, "name": "SWAP3", "source": 1 }, - { "begin": 9851, "end": 10196, "name": "SWAP2", "source": 1 }, - { "begin": 9851, "end": 10196, "name": "POP", "source": 1 }, - { "begin": 9851, "end": 10196, "name": "POP", "source": 1 }, - { - "begin": 9851, - "end": 10196, + { "begin": 10123, "end": 10184, "name": "JUMPDEST", "source": 2 }, + { "begin": 10113, "end": 10184, "name": "SWAP2", "source": 2 }, + { "begin": 10113, "end": 10184, "name": "POP", "source": 2 }, + { "begin": 10069, "end": 10194, "name": "POP", "source": 2 }, + { "begin": 9856, "end": 10201, "name": "SWAP3", "source": 2 }, + { "begin": 9856, "end": 10201, "name": "SWAP2", "source": 2 }, + { "begin": 9856, "end": 10201, "name": "POP", "source": 2 }, + { "begin": 9856, "end": 10201, "name": "POP", "source": 2 }, + { + "begin": 9856, + "end": 10201, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10202, - "end": 10345, + "begin": 10207, + "end": 10350, "name": "tag", - "source": 1, + "source": 2, "value": "193" }, - { "begin": 10202, "end": 10345, "name": "JUMPDEST", "source": 1 }, + { "begin": 10207, "end": 10350, "name": "JUMPDEST", "source": 2 }, { - "begin": 10259, - "end": 10264, + "begin": 10264, + "end": 10269, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 10290, "end": 10296, "name": "DUP2", "source": 1 }, - { "begin": 10284, "end": 10297, "name": "MLOAD", "source": 1 }, - { "begin": 10275, "end": 10297, "name": "SWAP1", "source": 1 }, - { "begin": 10275, "end": 10297, "name": "POP", "source": 1 }, + { "begin": 10295, "end": 10301, "name": "DUP2", "source": 2 }, + { "begin": 10289, "end": 10302, "name": "MLOAD", "source": 2 }, + { "begin": 10280, "end": 10302, "name": "SWAP1", "source": 2 }, + { "begin": 10280, "end": 10302, "name": "POP", "source": 2 }, { - "begin": 10306, - "end": 10339, + "begin": 10311, + "end": 10344, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "324" }, - { "begin": 10333, "end": 10338, "name": "DUP2", "source": 1 }, + { "begin": 10338, "end": 10343, "name": "DUP2", "source": 2 }, { - "begin": 10306, - "end": 10339, + "begin": 10311, + "end": 10344, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "170" }, { - "begin": 10306, - "end": 10339, + "begin": 10311, + "end": 10344, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10306, - "end": 10339, + "begin": 10311, + "end": 10344, "name": "tag", - "source": 1, + "source": 2, "value": "324" }, - { "begin": 10306, "end": 10339, "name": "JUMPDEST", "source": 1 }, - { "begin": 10202, "end": 10345, "name": "SWAP3", "source": 1 }, - { "begin": 10202, "end": 10345, "name": "SWAP2", "source": 1 }, - { "begin": 10202, "end": 10345, "name": "POP", "source": 1 }, - { "begin": 10202, "end": 10345, "name": "POP", "source": 1 }, + { "begin": 10311, "end": 10344, "name": "JUMPDEST", "source": 2 }, + { "begin": 10207, "end": 10350, "name": "SWAP3", "source": 2 }, + { "begin": 10207, "end": 10350, "name": "SWAP2", "source": 2 }, + { "begin": 10207, "end": 10350, "name": "POP", "source": 2 }, + { "begin": 10207, "end": 10350, "name": "POP", "source": 2 }, { - "begin": 10202, - "end": 10345, + "begin": 10207, + "end": 10350, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10351, - "end": 10702, + "begin": 10356, + "end": 10707, "name": "tag", - "source": 1, + "source": 2, "value": "105" }, - { "begin": 10351, "end": 10702, "name": "JUMPDEST", "source": 1 }, + { "begin": 10356, "end": 10707, "name": "JUMPDEST", "source": 2 }, { - "begin": 10421, - "end": 10427, + "begin": 10426, + "end": 10432, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 10470, - "end": 10472, + "begin": 10475, + "end": 10477, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 10458, "end": 10467, "name": "DUP3", "source": 1 }, - { "begin": 10449, "end": 10456, "name": "DUP5", "source": 1 }, - { "begin": 10445, "end": 10468, "name": "SUB", "source": 1 }, - { "begin": 10441, "end": 10473, "name": "SLT", "source": 1 }, - { "begin": 10438, "end": 10557, "name": "ISZERO", "source": 1 }, + { "begin": 10463, "end": 10472, "name": "DUP3", "source": 2 }, + { "begin": 10454, "end": 10461, "name": "DUP5", "source": 2 }, + { "begin": 10450, "end": 10473, "name": "SUB", "source": 2 }, + { "begin": 10446, "end": 10478, "name": "SLT", "source": 2 }, + { "begin": 10443, "end": 10562, "name": "ISZERO", "source": 2 }, { - "begin": 10438, - "end": 10557, + "begin": 10443, + "end": 10562, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "326" }, - { "begin": 10438, "end": 10557, "name": "JUMPI", "source": 1 }, + { "begin": 10443, "end": 10562, "name": "JUMPI", "source": 2 }, { - "begin": 10476, - "end": 10555, + "begin": 10481, + "end": 10560, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "327" }, { - "begin": 10476, - "end": 10555, + "begin": 10481, + "end": 10560, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { - "begin": 10476, - "end": 10555, + "begin": 10481, + "end": 10560, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10476, - "end": 10555, + "begin": 10481, + "end": 10560, "name": "tag", - "source": 1, + "source": 2, "value": "327" }, - { "begin": 10476, "end": 10555, "name": "JUMPDEST", "source": 1 }, + { "begin": 10481, "end": 10560, "name": "JUMPDEST", "source": 2 }, { - "begin": 10438, - "end": 10557, + "begin": 10443, + "end": 10562, "name": "tag", - "source": 1, + "source": 2, "value": "326" }, - { "begin": 10438, "end": 10557, "name": "JUMPDEST", "source": 1 }, + { "begin": 10443, "end": 10562, "name": "JUMPDEST", "source": 2 }, { - "begin": 10596, - "end": 10597, + "begin": 10601, + "end": 10602, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 10621, - "end": 10685, + "begin": 10626, + "end": 10690, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "328" }, - { "begin": 10677, "end": 10684, "name": "DUP5", "source": 1 }, - { "begin": 10668, "end": 10674, "name": "DUP3", "source": 1 }, - { "begin": 10657, "end": 10666, "name": "DUP6", "source": 1 }, - { "begin": 10653, "end": 10675, "name": "ADD", "source": 1 }, + { "begin": 10682, "end": 10689, "name": "DUP5", "source": 2 }, + { "begin": 10673, "end": 10679, "name": "DUP3", "source": 2 }, + { "begin": 10662, "end": 10671, "name": "DUP6", "source": 2 }, + { "begin": 10658, "end": 10680, "name": "ADD", "source": 2 }, { - "begin": 10621, - "end": 10685, + "begin": 10626, + "end": 10690, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "193" }, { - "begin": 10621, - "end": 10685, + "begin": 10626, + "end": 10690, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10621, - "end": 10685, + "begin": 10626, + "end": 10690, "name": "tag", - "source": 1, + "source": 2, "value": "328" }, - { "begin": 10621, "end": 10685, "name": "JUMPDEST", "source": 1 }, - { "begin": 10611, "end": 10685, "name": "SWAP2", "source": 1 }, - { "begin": 10611, "end": 10685, "name": "POP", "source": 1 }, - { "begin": 10567, "end": 10695, "name": "POP", "source": 1 }, - { "begin": 10351, "end": 10702, "name": "SWAP3", "source": 1 }, - { "begin": 10351, "end": 10702, "name": "SWAP2", "source": 1 }, - { "begin": 10351, "end": 10702, "name": "POP", "source": 1 }, - { "begin": 10351, "end": 10702, "name": "POP", "source": 1 }, - { - "begin": 10351, - "end": 10702, + { "begin": 10626, "end": 10690, "name": "JUMPDEST", "source": 2 }, + { "begin": 10616, "end": 10690, "name": "SWAP2", "source": 2 }, + { "begin": 10616, "end": 10690, "name": "POP", "source": 2 }, + { "begin": 10572, "end": 10700, "name": "POP", "source": 2 }, + { "begin": 10356, "end": 10707, "name": "SWAP3", "source": 2 }, + { "begin": 10356, "end": 10707, "name": "SWAP2", "source": 2 }, + { "begin": 10356, "end": 10707, "name": "POP", "source": 2 }, + { "begin": 10356, "end": 10707, "name": "POP", "source": 2 }, + { + "begin": 10356, + "end": 10707, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10708, - "end": 11150, + "begin": 10713, + "end": 11155, "name": "tag", - "source": 1, + "source": 2, "value": "108" }, - { "begin": 10708, "end": 11150, "name": "JUMPDEST", "source": 1 }, + { "begin": 10713, "end": 11155, "name": "JUMPDEST", "source": 2 }, { - "begin": 10857, - "end": 10861, + "begin": 10862, + "end": 10866, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 10895, - "end": 10897, + "begin": 10900, + "end": 10902, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 10884, "end": 10893, "name": "DUP3", "source": 1 }, - { "begin": 10880, "end": 10898, "name": "ADD", "source": 1 }, - { "begin": 10872, "end": 10898, "name": "SWAP1", "source": 1 }, - { "begin": 10872, "end": 10898, "name": "POP", "source": 1 }, + { "begin": 10889, "end": 10898, "name": "DUP3", "source": 2 }, + { "begin": 10885, "end": 10903, "name": "ADD", "source": 2 }, + { "begin": 10877, "end": 10903, "name": "SWAP1", "source": 2 }, + { "begin": 10877, "end": 10903, "name": "POP", "source": 2 }, { - "begin": 10908, - "end": 10979, + "begin": 10913, + "end": 10984, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "330" }, { - "begin": 10976, - "end": 10977, + "begin": 10981, + "end": 10982, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 10965, "end": 10974, "name": "DUP4", "source": 1 }, - { "begin": 10961, "end": 10978, "name": "ADD", "source": 1 }, - { "begin": 10952, "end": 10958, "name": "DUP7", "source": 1 }, + { "begin": 10970, "end": 10979, "name": "DUP4", "source": 2 }, + { "begin": 10966, "end": 10983, "name": "ADD", "source": 2 }, + { "begin": 10957, "end": 10963, "name": "DUP7", "source": 2 }, { - "begin": 10908, - "end": 10979, + "begin": 10913, + "end": 10984, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, { - "begin": 10908, - "end": 10979, + "begin": 10913, + "end": 10984, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10908, - "end": 10979, + "begin": 10913, + "end": 10984, "name": "tag", - "source": 1, + "source": 2, "value": "330" }, - { "begin": 10908, "end": 10979, "name": "JUMPDEST", "source": 1 }, + { "begin": 10913, "end": 10984, "name": "JUMPDEST", "source": 2 }, { - "begin": 10989, - "end": 11061, + "begin": 10994, + "end": 11066, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "331" }, { - "begin": 11057, - "end": 11059, + "begin": 11062, + "end": 11064, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 11046, "end": 11055, "name": "DUP4", "source": 1 }, - { "begin": 11042, "end": 11060, "name": "ADD", "source": 1 }, - { "begin": 11033, "end": 11039, "name": "DUP6", "source": 1 }, + { "begin": 11051, "end": 11060, "name": "DUP4", "source": 2 }, + { "begin": 11047, "end": 11065, "name": "ADD", "source": 2 }, + { "begin": 11038, "end": 11044, "name": "DUP6", "source": 2 }, { - "begin": 10989, - "end": 11061, + "begin": 10994, + "end": 11066, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, { - "begin": 10989, - "end": 11061, + "begin": 10994, + "end": 11066, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10989, - "end": 11061, + "begin": 10994, + "end": 11066, "name": "tag", - "source": 1, + "source": 2, "value": "331" }, - { "begin": 10989, "end": 11061, "name": "JUMPDEST", "source": 1 }, + { "begin": 10994, "end": 11066, "name": "JUMPDEST", "source": 2 }, { - "begin": 11071, - "end": 11143, + "begin": 11076, + "end": 11148, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "332" }, { - "begin": 11139, - "end": 11141, + "begin": 11144, + "end": 11146, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 11128, "end": 11137, "name": "DUP4", "source": 1 }, - { "begin": 11124, "end": 11142, "name": "ADD", "source": 1 }, - { "begin": 11115, "end": 11121, "name": "DUP5", "source": 1 }, + { "begin": 11133, "end": 11142, "name": "DUP4", "source": 2 }, + { "begin": 11129, "end": 11147, "name": "ADD", "source": 2 }, + { "begin": 11120, "end": 11126, "name": "DUP5", "source": 2 }, { - "begin": 11071, - "end": 11143, + "begin": 11076, + "end": 11148, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "174" }, { - "begin": 11071, - "end": 11143, + "begin": 11076, + "end": 11148, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11071, - "end": 11143, + "begin": 11076, + "end": 11148, "name": "tag", - "source": 1, + "source": 2, "value": "332" }, - { "begin": 11071, "end": 11143, "name": "JUMPDEST", "source": 1 }, - { "begin": 10708, "end": 11150, "name": "SWAP5", "source": 1 }, - { "begin": 10708, "end": 11150, "name": "SWAP4", "source": 1 }, - { "begin": 10708, "end": 11150, "name": "POP", "source": 1 }, - { "begin": 10708, "end": 11150, "name": "POP", "source": 1 }, - { "begin": 10708, "end": 11150, "name": "POP", "source": 1 }, - { "begin": 10708, "end": 11150, "name": "POP", "source": 1 }, + { "begin": 11076, "end": 11148, "name": "JUMPDEST", "source": 2 }, + { "begin": 10713, "end": 11155, "name": "SWAP5", "source": 2 }, + { "begin": 10713, "end": 11155, "name": "SWAP4", "source": 2 }, + { "begin": 10713, "end": 11155, "name": "POP", "source": 2 }, + { "begin": 10713, "end": 11155, "name": "POP", "source": 2 }, + { "begin": 10713, "end": 11155, "name": "POP", "source": 2 }, + { "begin": 10713, "end": 11155, "name": "POP", "source": 2 }, { - "begin": 10708, - "end": 11150, + "begin": 10713, + "end": 11155, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 11156, - "end": 11274, + "begin": 11161, + "end": 11279, "name": "tag", - "source": 1, + "source": 2, "value": "194" }, - { "begin": 11156, "end": 11274, "name": "JUMPDEST", "source": 1 }, + { "begin": 11161, "end": 11279, "name": "JUMPDEST", "source": 2 }, { - "begin": 11227, - "end": 11249, + "begin": 11232, + "end": 11254, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "334" }, - { "begin": 11243, "end": 11248, "name": "DUP2", "source": 1 }, + { "begin": 11248, "end": 11253, "name": "DUP2", "source": 2 }, { - "begin": 11227, - "end": 11249, + "begin": 11232, + "end": 11254, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "175" }, { - "begin": 11227, - "end": 11249, + "begin": 11232, + "end": 11254, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11227, - "end": 11249, + "begin": 11232, + "end": 11254, "name": "tag", - "source": 1, + "source": 2, "value": "334" }, - { "begin": 11227, "end": 11249, "name": "JUMPDEST", "source": 1 }, - { "begin": 11220, "end": 11225, "name": "DUP2", "source": 1 }, - { "begin": 11217, "end": 11250, "name": "EQ", "source": 1 }, + { "begin": 11232, "end": 11254, "name": "JUMPDEST", "source": 2 }, + { "begin": 11225, "end": 11230, "name": "DUP2", "source": 2 }, + { "begin": 11222, "end": 11255, "name": "EQ", "source": 2 }, { - "begin": 11207, - "end": 11268, + "begin": 11212, + "end": 11273, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "335" }, - { "begin": 11207, "end": 11268, "name": "JUMPI", "source": 1 }, + { "begin": 11212, "end": 11273, "name": "JUMPI", "source": 2 }, { - "begin": 11264, - "end": 11265, + "begin": 11269, + "end": 11270, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 11261, "end": 11262, "name": "DUP1", "source": 1 }, - { "begin": 11254, "end": 11266, "name": "REVERT", "source": 1 }, + { "begin": 11266, "end": 11267, "name": "DUP1", "source": 2 }, + { "begin": 11259, "end": 11271, "name": "REVERT", "source": 2 }, { - "begin": 11207, - "end": 11268, + "begin": 11212, + "end": 11273, "name": "tag", - "source": 1, + "source": 2, "value": "335" }, - { "begin": 11207, "end": 11268, "name": "JUMPDEST", "source": 1 }, - { "begin": 11156, "end": 11274, "name": "POP", "source": 1 }, + { "begin": 11212, "end": 11273, "name": "JUMPDEST", "source": 2 }, + { "begin": 11161, "end": 11279, "name": "POP", "source": 2 }, { - "begin": 11156, - "end": 11274, + "begin": 11161, + "end": 11279, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 11280, - "end": 11419, + "begin": 11285, + "end": 11424, "name": "tag", - "source": 1, + "source": 2, "value": "195" }, - { "begin": 11280, "end": 11419, "name": "JUMPDEST", "source": 1 }, + { "begin": 11285, "end": 11424, "name": "JUMPDEST", "source": 2 }, { - "begin": 11335, - "end": 11340, + "begin": 11340, + "end": 11345, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 11366, "end": 11372, "name": "DUP2", "source": 1 }, - { "begin": 11360, "end": 11373, "name": "MLOAD", "source": 1 }, - { "begin": 11351, "end": 11373, "name": "SWAP1", "source": 1 }, - { "begin": 11351, "end": 11373, "name": "POP", "source": 1 }, + { "begin": 11371, "end": 11377, "name": "DUP2", "source": 2 }, + { "begin": 11365, "end": 11378, "name": "MLOAD", "source": 2 }, + { "begin": 11356, "end": 11378, "name": "SWAP1", "source": 2 }, + { "begin": 11356, "end": 11378, "name": "POP", "source": 2 }, { - "begin": 11382, - "end": 11413, + "begin": 11387, + "end": 11418, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "337" }, - { "begin": 11407, "end": 11412, "name": "DUP2", "source": 1 }, + { "begin": 11412, "end": 11417, "name": "DUP2", "source": 2 }, { - "begin": 11382, - "end": 11413, + "begin": 11387, + "end": 11418, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "194" }, { - "begin": 11382, - "end": 11413, + "begin": 11387, + "end": 11418, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11382, - "end": 11413, + "begin": 11387, + "end": 11418, "name": "tag", - "source": 1, + "source": 2, "value": "337" }, - { "begin": 11382, "end": 11413, "name": "JUMPDEST", "source": 1 }, - { "begin": 11280, "end": 11419, "name": "SWAP3", "source": 1 }, - { "begin": 11280, "end": 11419, "name": "SWAP2", "source": 1 }, - { "begin": 11280, "end": 11419, "name": "POP", "source": 1 }, - { "begin": 11280, "end": 11419, "name": "POP", "source": 1 }, + { "begin": 11387, "end": 11418, "name": "JUMPDEST", "source": 2 }, + { "begin": 11285, "end": 11424, "name": "SWAP3", "source": 2 }, + { "begin": 11285, "end": 11424, "name": "SWAP2", "source": 2 }, + { "begin": 11285, "end": 11424, "name": "POP", "source": 2 }, + { "begin": 11285, "end": 11424, "name": "POP", "source": 2 }, { - "begin": 11280, - "end": 11419, + "begin": 11285, + "end": 11424, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 11425, - "end": 11772, + "begin": 11430, + "end": 11777, "name": "tag", - "source": 1, + "source": 2, "value": "116" }, - { "begin": 11425, "end": 11772, "name": "JUMPDEST", "source": 1 }, + { "begin": 11430, "end": 11777, "name": "JUMPDEST", "source": 2 }, { - "begin": 11493, - "end": 11499, + "begin": 11498, + "end": 11504, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 11542, - "end": 11544, + "begin": 11547, + "end": 11549, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 11530, "end": 11539, "name": "DUP3", "source": 1 }, - { "begin": 11521, "end": 11528, "name": "DUP5", "source": 1 }, - { "begin": 11517, "end": 11540, "name": "SUB", "source": 1 }, - { "begin": 11513, "end": 11545, "name": "SLT", "source": 1 }, - { "begin": 11510, "end": 11629, "name": "ISZERO", "source": 1 }, + { "begin": 11535, "end": 11544, "name": "DUP3", "source": 2 }, + { "begin": 11526, "end": 11533, "name": "DUP5", "source": 2 }, + { "begin": 11522, "end": 11545, "name": "SUB", "source": 2 }, + { "begin": 11518, "end": 11550, "name": "SLT", "source": 2 }, + { "begin": 11515, "end": 11634, "name": "ISZERO", "source": 2 }, { - "begin": 11510, - "end": 11629, + "begin": 11515, + "end": 11634, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "339" }, - { "begin": 11510, "end": 11629, "name": "JUMPI", "source": 1 }, + { "begin": 11515, "end": 11634, "name": "JUMPI", "source": 2 }, { - "begin": 11548, - "end": 11627, + "begin": 11553, + "end": 11632, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "340" }, { - "begin": 11548, - "end": 11627, + "begin": 11553, + "end": 11632, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, { - "begin": 11548, - "end": 11627, + "begin": 11553, + "end": 11632, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11548, - "end": 11627, + "begin": 11553, + "end": 11632, "name": "tag", - "source": 1, + "source": 2, "value": "340" }, - { "begin": 11548, "end": 11627, "name": "JUMPDEST", "source": 1 }, + { "begin": 11553, "end": 11632, "name": "JUMPDEST", "source": 2 }, { - "begin": 11510, - "end": 11629, + "begin": 11515, + "end": 11634, "name": "tag", - "source": 1, + "source": 2, "value": "339" }, - { "begin": 11510, "end": 11629, "name": "JUMPDEST", "source": 1 }, + { "begin": 11515, "end": 11634, "name": "JUMPDEST", "source": 2 }, { - "begin": 11668, - "end": 11669, + "begin": 11673, + "end": 11674, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 11693, - "end": 11755, + "begin": 11698, + "end": 11760, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "341" }, - { "begin": 11747, "end": 11754, "name": "DUP5", "source": 1 }, - { "begin": 11738, "end": 11744, "name": "DUP3", "source": 1 }, - { "begin": 11727, "end": 11736, "name": "DUP6", "source": 1 }, - { "begin": 11723, "end": 11745, "name": "ADD", "source": 1 }, + { "begin": 11752, "end": 11759, "name": "DUP5", "source": 2 }, + { "begin": 11743, "end": 11749, "name": "DUP3", "source": 2 }, + { "begin": 11732, "end": 11741, "name": "DUP6", "source": 2 }, + { "begin": 11728, "end": 11750, "name": "ADD", "source": 2 }, { - "begin": 11693, - "end": 11755, + "begin": 11698, + "end": 11760, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "195" }, { - "begin": 11693, - "end": 11755, + "begin": 11698, + "end": 11760, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11693, - "end": 11755, + "begin": 11698, + "end": 11760, "name": "tag", - "source": 1, + "source": 2, "value": "341" }, - { "begin": 11693, "end": 11755, "name": "JUMPDEST", "source": 1 }, - { "begin": 11683, "end": 11755, "name": "SWAP2", "source": 1 }, - { "begin": 11683, "end": 11755, "name": "POP", "source": 1 }, - { "begin": 11639, "end": 11765, "name": "POP", "source": 1 }, - { "begin": 11425, "end": 11772, "name": "SWAP3", "source": 1 }, - { "begin": 11425, "end": 11772, "name": "SWAP2", "source": 1 }, - { "begin": 11425, "end": 11772, "name": "POP", "source": 1 }, - { "begin": 11425, "end": 11772, "name": "POP", "source": 1 }, - { - "begin": 11425, - "end": 11772, + { "begin": 11698, "end": 11760, "name": "JUMPDEST", "source": 2 }, + { "begin": 11688, "end": 11760, "name": "SWAP2", "source": 2 }, + { "begin": 11688, "end": 11760, "name": "POP", "source": 2 }, + { "begin": 11644, "end": 11770, "name": "POP", "source": 2 }, + { "begin": 11430, "end": 11777, "name": "SWAP3", "source": 2 }, + { "begin": 11430, "end": 11777, "name": "SWAP2", "source": 2 }, + { "begin": 11430, "end": 11777, "name": "POP", "source": 2 }, + { "begin": 11430, "end": 11777, "name": "POP", "source": 2 }, + { + "begin": 11430, + "end": 11777, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 11778, - "end": 12000, + "begin": 11783, + "end": 12005, "name": "tag", - "source": 1, + "source": 2, "value": "119" }, - { "begin": 11778, "end": 12000, "name": "JUMPDEST", "source": 1 }, + { "begin": 11783, "end": 12005, "name": "JUMPDEST", "source": 2 }, { - "begin": 11871, - "end": 11875, + "begin": 11876, + "end": 11880, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 11909, - "end": 11911, + "begin": 11914, + "end": 11916, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 11898, "end": 11907, "name": "DUP3", "source": 1 }, - { "begin": 11894, "end": 11912, "name": "ADD", "source": 1 }, - { "begin": 11886, "end": 11912, "name": "SWAP1", "source": 1 }, - { "begin": 11886, "end": 11912, "name": "POP", "source": 1 }, + { "begin": 11903, "end": 11912, "name": "DUP3", "source": 2 }, + { "begin": 11899, "end": 11917, "name": "ADD", "source": 2 }, + { "begin": 11891, "end": 11917, "name": "SWAP1", "source": 2 }, + { "begin": 11891, "end": 11917, "name": "POP", "source": 2 }, { - "begin": 11922, - "end": 11993, + "begin": 11927, + "end": 11998, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "343" }, { - "begin": 11990, - "end": 11991, + "begin": 11995, + "end": 11996, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 11979, "end": 11988, "name": "DUP4", "source": 1 }, - { "begin": 11975, "end": 11992, "name": "ADD", "source": 1 }, - { "begin": 11966, "end": 11972, "name": "DUP5", "source": 1 }, + { "begin": 11984, "end": 11993, "name": "DUP4", "source": 2 }, + { "begin": 11980, "end": 11997, "name": "ADD", "source": 2 }, + { "begin": 11971, "end": 11977, "name": "DUP5", "source": 2 }, { - "begin": 11922, - "end": 11993, + "begin": 11927, + "end": 11998, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, { - "begin": 11922, - "end": 11993, + "begin": 11927, + "end": 11998, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11922, - "end": 11993, + "begin": 11927, + "end": 11998, "name": "tag", - "source": 1, + "source": 2, "value": "343" }, - { "begin": 11922, "end": 11993, "name": "JUMPDEST", "source": 1 }, - { "begin": 11778, "end": 12000, "name": "SWAP3", "source": 1 }, - { "begin": 11778, "end": 12000, "name": "SWAP2", "source": 1 }, - { "begin": 11778, "end": 12000, "name": "POP", "source": 1 }, - { "begin": 11778, "end": 12000, "name": "POP", "source": 1 }, + { "begin": 11927, "end": 11998, "name": "JUMPDEST", "source": 2 }, + { "begin": 11783, "end": 12005, "name": "SWAP3", "source": 2 }, + { "begin": 11783, "end": 12005, "name": "SWAP2", "source": 2 }, + { "begin": 11783, "end": 12005, "name": "POP", "source": 2 }, + { "begin": 11783, "end": 12005, "name": "POP", "source": 2 }, { - "begin": 11778, - "end": 12000, + "begin": 11783, + "end": 12005, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 12006, - "end": 12104, + "begin": 12011, + "end": 12109, "name": "tag", - "source": 1, + "source": 2, "value": "196" }, - { "begin": 12006, "end": 12104, "name": "JUMPDEST", "source": 1 }, + { "begin": 12011, "end": 12109, "name": "JUMPDEST", "source": 2 }, { - "begin": 12057, - "end": 12063, + "begin": 12062, + "end": 12068, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 12091, "end": 12096, "name": "DUP2", "source": 1 }, - { "begin": 12085, "end": 12097, "name": "MLOAD", "source": 1 }, - { "begin": 12075, "end": 12097, "name": "SWAP1", "source": 1 }, - { "begin": 12075, "end": 12097, "name": "POP", "source": 1 }, - { "begin": 12006, "end": 12104, "name": "SWAP2", "source": 1 }, - { "begin": 12006, "end": 12104, "name": "SWAP1", "source": 1 }, - { "begin": 12006, "end": 12104, "name": "POP", "source": 1 }, + { "begin": 12096, "end": 12101, "name": "DUP2", "source": 2 }, + { "begin": 12090, "end": 12102, "name": "MLOAD", "source": 2 }, + { "begin": 12080, "end": 12102, "name": "SWAP1", "source": 2 }, + { "begin": 12080, "end": 12102, "name": "POP", "source": 2 }, + { "begin": 12011, "end": 12109, "name": "SWAP2", "source": 2 }, + { "begin": 12011, "end": 12109, "name": "SWAP1", "source": 2 }, + { "begin": 12011, "end": 12109, "name": "POP", "source": 2 }, { - "begin": 12006, - "end": 12104, + "begin": 12011, + "end": 12109, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 12110, - "end": 12257, + "begin": 12115, + "end": 12262, "name": "tag", - "source": 1, + "source": 2, "value": "197" }, - { "begin": 12110, "end": 12257, "name": "JUMPDEST", "source": 1 }, + { "begin": 12115, "end": 12262, "name": "JUMPDEST", "source": 2 }, { - "begin": 12211, - "end": 12222, + "begin": 12216, + "end": 12227, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 12248, "end": 12251, "name": "DUP2", "source": 1 }, - { "begin": 12233, "end": 12251, "name": "SWAP1", "source": 1 }, - { "begin": 12233, "end": 12251, "name": "POP", "source": 1 }, - { "begin": 12110, "end": 12257, "name": "SWAP3", "source": 1 }, - { "begin": 12110, "end": 12257, "name": "SWAP2", "source": 1 }, - { "begin": 12110, "end": 12257, "name": "POP", "source": 1 }, - { "begin": 12110, "end": 12257, "name": "POP", "source": 1 }, + { "begin": 12253, "end": 12256, "name": "DUP2", "source": 2 }, + { "begin": 12238, "end": 12256, "name": "SWAP1", "source": 2 }, + { "begin": 12238, "end": 12256, "name": "POP", "source": 2 }, + { "begin": 12115, "end": 12262, "name": "SWAP3", "source": 2 }, + { "begin": 12115, "end": 12262, "name": "SWAP2", "source": 2 }, + { "begin": 12115, "end": 12262, "name": "POP", "source": 2 }, + { "begin": 12115, "end": 12262, "name": "POP", "source": 2 }, { - "begin": 12110, - "end": 12257, + "begin": 12115, + "end": 12262, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 12263, - "end": 12636, + "begin": 12268, + "end": 12641, "name": "tag", - "source": 1, + "source": 2, "value": "198" }, - { "begin": 12263, "end": 12636, "name": "JUMPDEST", "source": 1 }, + { "begin": 12268, "end": 12641, "name": "JUMPDEST", "source": 2 }, { - "begin": 12367, - "end": 12370, + "begin": 12372, + "end": 12375, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 12395, - "end": 12433, + "begin": 12400, + "end": 12438, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "347" }, - { "begin": 12427, "end": 12432, "name": "DUP3", "source": 1 }, + { "begin": 12432, "end": 12437, "name": "DUP3", "source": 2 }, { - "begin": 12395, - "end": 12433, + "begin": 12400, + "end": 12438, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "196" }, { - "begin": 12395, - "end": 12433, + "begin": 12400, + "end": 12438, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12395, - "end": 12433, + "begin": 12400, + "end": 12438, "name": "tag", - "source": 1, + "source": 2, "value": "347" }, - { "begin": 12395, "end": 12433, "name": "JUMPDEST", "source": 1 }, + { "begin": 12400, "end": 12438, "name": "JUMPDEST", "source": 2 }, { - "begin": 12449, - "end": 12537, + "begin": 12454, + "end": 12542, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "348" }, - { "begin": 12530, "end": 12536, "name": "DUP2", "source": 1 }, - { "begin": 12525, "end": 12528, "name": "DUP6", "source": 1 }, + { "begin": 12535, "end": 12541, "name": "DUP2", "source": 2 }, + { "begin": 12530, "end": 12533, "name": "DUP6", "source": 2 }, { - "begin": 12449, - "end": 12537, + "begin": 12454, + "end": 12542, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "197" }, { - "begin": 12449, - "end": 12537, + "begin": 12454, + "end": 12542, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12449, - "end": 12537, + "begin": 12454, + "end": 12542, "name": "tag", - "source": 1, + "source": 2, "value": "348" }, - { "begin": 12449, "end": 12537, "name": "JUMPDEST", "source": 1 }, - { "begin": 12442, "end": 12537, "name": "SWAP4", "source": 1 }, - { "begin": 12442, "end": 12537, "name": "POP", "source": 1 }, + { "begin": 12454, "end": 12542, "name": "JUMPDEST", "source": 2 }, + { "begin": 12447, "end": 12542, "name": "SWAP4", "source": 2 }, + { "begin": 12447, "end": 12542, "name": "POP", "source": 2 }, { - "begin": 12546, - "end": 12598, + "begin": 12551, + "end": 12603, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "349" }, - { "begin": 12591, "end": 12597, "name": "DUP2", "source": 1 }, - { "begin": 12586, "end": 12589, "name": "DUP6", "source": 1 }, + { "begin": 12596, "end": 12602, "name": "DUP2", "source": 2 }, + { "begin": 12591, "end": 12594, "name": "DUP6", "source": 2 }, { - "begin": 12579, - "end": 12583, + "begin": 12584, + "end": 12588, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 12572, "end": 12577, "name": "DUP7", "source": 1 }, - { "begin": 12568, "end": 12584, "name": "ADD", "source": 1 }, + { "begin": 12577, "end": 12582, "name": "DUP7", "source": 2 }, + { "begin": 12573, "end": 12589, "name": "ADD", "source": 2 }, { - "begin": 12546, - "end": 12598, + "begin": 12551, + "end": 12603, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "159" }, { - "begin": 12546, - "end": 12598, + "begin": 12551, + "end": 12603, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12546, - "end": 12598, + "begin": 12551, + "end": 12603, "name": "tag", - "source": 1, + "source": 2, "value": "349" }, - { "begin": 12546, "end": 12598, "name": "JUMPDEST", "source": 1 }, - { "begin": 12623, "end": 12629, "name": "DUP1", "source": 1 }, - { "begin": 12618, "end": 12621, "name": "DUP5", "source": 1 }, - { "begin": 12614, "end": 12630, "name": "ADD", "source": 1 }, - { "begin": 12607, "end": 12630, "name": "SWAP2", "source": 1 }, - { "begin": 12607, "end": 12630, "name": "POP", "source": 1 }, - { "begin": 12371, "end": 12636, "name": "POP", "source": 1 }, - { "begin": 12263, "end": 12636, "name": "SWAP3", "source": 1 }, - { "begin": 12263, "end": 12636, "name": "SWAP2", "source": 1 }, - { "begin": 12263, "end": 12636, "name": "POP", "source": 1 }, - { "begin": 12263, "end": 12636, "name": "POP", "source": 1 }, - { - "begin": 12263, - "end": 12636, + { "begin": 12551, "end": 12603, "name": "JUMPDEST", "source": 2 }, + { "begin": 12628, "end": 12634, "name": "DUP1", "source": 2 }, + { "begin": 12623, "end": 12626, "name": "DUP5", "source": 2 }, + { "begin": 12619, "end": 12635, "name": "ADD", "source": 2 }, + { "begin": 12612, "end": 12635, "name": "SWAP2", "source": 2 }, + { "begin": 12612, "end": 12635, "name": "POP", "source": 2 }, + { "begin": 12376, "end": 12641, "name": "POP", "source": 2 }, + { "begin": 12268, "end": 12641, "name": "SWAP3", "source": 2 }, + { "begin": 12268, "end": 12641, "name": "SWAP2", "source": 2 }, + { "begin": 12268, "end": 12641, "name": "POP", "source": 2 }, + { "begin": 12268, "end": 12641, "name": "POP", "source": 2 }, + { + "begin": 12268, + "end": 12641, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 12642, - "end": 12913, + "begin": 12647, + "end": 12918, "name": "tag", - "source": 1, + "source": 2, "value": "126" }, - { "begin": 12642, "end": 12913, "name": "JUMPDEST", "source": 1 }, + { "begin": 12647, "end": 12918, "name": "JUMPDEST", "source": 2 }, { - "begin": 12772, - "end": 12775, + "begin": 12777, + "end": 12780, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 12794, - "end": 12887, + "begin": 12799, + "end": 12892, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "351" }, - { "begin": 12883, "end": 12886, "name": "DUP3", "source": 1 }, - { "begin": 12874, "end": 12880, "name": "DUP5", "source": 1 }, + { "begin": 12888, "end": 12891, "name": "DUP3", "source": 2 }, + { "begin": 12879, "end": 12885, "name": "DUP5", "source": 2 }, { - "begin": 12794, - "end": 12887, + "begin": 12799, + "end": 12892, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "198" }, { - "begin": 12794, - "end": 12887, + "begin": 12799, + "end": 12892, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12794, - "end": 12887, + "begin": 12799, + "end": 12892, "name": "tag", - "source": 1, + "source": 2, "value": "351" }, - { "begin": 12794, "end": 12887, "name": "JUMPDEST", "source": 1 }, - { "begin": 12787, "end": 12887, "name": "SWAP2", "source": 1 }, - { "begin": 12787, "end": 12887, "name": "POP", "source": 1 }, - { "begin": 12904, "end": 12907, "name": "DUP2", "source": 1 }, - { "begin": 12897, "end": 12907, "name": "SWAP1", "source": 1 }, - { "begin": 12897, "end": 12907, "name": "POP", "source": 1 }, - { "begin": 12642, "end": 12913, "name": "SWAP3", "source": 1 }, - { "begin": 12642, "end": 12913, "name": "SWAP2", "source": 1 }, - { "begin": 12642, "end": 12913, "name": "POP", "source": 1 }, - { "begin": 12642, "end": 12913, "name": "POP", "source": 1 }, - { - "begin": 12642, - "end": 12913, + { "begin": 12799, "end": 12892, "name": "JUMPDEST", "source": 2 }, + { "begin": 12792, "end": 12892, "name": "SWAP2", "source": 2 }, + { "begin": 12792, "end": 12892, "name": "POP", "source": 2 }, + { "begin": 12909, "end": 12912, "name": "DUP2", "source": 2 }, + { "begin": 12902, "end": 12912, "name": "SWAP1", "source": 2 }, + { "begin": 12902, "end": 12912, "name": "POP", "source": 2 }, + { "begin": 12647, "end": 12918, "name": "SWAP3", "source": 2 }, + { "begin": 12647, "end": 12918, "name": "SWAP2", "source": 2 }, + { "begin": 12647, "end": 12918, "name": "POP", "source": 2 }, + { "begin": 12647, "end": 12918, "name": "POP", "source": 2 }, + { + "begin": 12647, + "end": 12918, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 12919, - "end": 13251, + "begin": 12924, + "end": 13256, "name": "tag", - "source": 1, + "source": 2, "value": "147" }, - { "begin": 12919, "end": 13251, "name": "JUMPDEST", "source": 1 }, + { "begin": 12924, "end": 13256, "name": "JUMPDEST", "source": 2 }, { - "begin": 13040, - "end": 13044, + "begin": 13045, + "end": 13049, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 13078, - "end": 13080, + "begin": 13083, + "end": 13085, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 13067, "end": 13076, "name": "DUP3", "source": 1 }, - { "begin": 13063, "end": 13081, "name": "ADD", "source": 1 }, - { "begin": 13055, "end": 13081, "name": "SWAP1", "source": 1 }, - { "begin": 13055, "end": 13081, "name": "POP", "source": 1 }, + { "begin": 13072, "end": 13081, "name": "DUP3", "source": 2 }, + { "begin": 13068, "end": 13086, "name": "ADD", "source": 2 }, + { "begin": 13060, "end": 13086, "name": "SWAP1", "source": 2 }, + { "begin": 13060, "end": 13086, "name": "POP", "source": 2 }, { - "begin": 13091, - "end": 13162, + "begin": 13096, + "end": 13167, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "353" }, { - "begin": 13159, - "end": 13160, + "begin": 13164, + "end": 13165, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 13148, "end": 13157, "name": "DUP4", "source": 1 }, - { "begin": 13144, "end": 13161, "name": "ADD", "source": 1 }, - { "begin": 13135, "end": 13141, "name": "DUP6", "source": 1 }, + { "begin": 13153, "end": 13162, "name": "DUP4", "source": 2 }, + { "begin": 13149, "end": 13166, "name": "ADD", "source": 2 }, + { "begin": 13140, "end": 13146, "name": "DUP6", "source": 2 }, { - "begin": 13091, - "end": 13162, + "begin": 13096, + "end": 13167, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, { - "begin": 13091, - "end": 13162, + "begin": 13096, + "end": 13167, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13091, - "end": 13162, + "begin": 13096, + "end": 13167, "name": "tag", - "source": 1, + "source": 2, "value": "353" }, - { "begin": 13091, "end": 13162, "name": "JUMPDEST", "source": 1 }, + { "begin": 13096, "end": 13167, "name": "JUMPDEST", "source": 2 }, { - "begin": 13172, - "end": 13244, + "begin": 13177, + "end": 13249, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "354" }, { - "begin": 13240, - "end": 13242, + "begin": 13245, + "end": 13247, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 13229, "end": 13238, "name": "DUP4", "source": 1 }, - { "begin": 13225, "end": 13243, "name": "ADD", "source": 1 }, - { "begin": 13216, "end": 13222, "name": "DUP5", "source": 1 }, + { "begin": 13234, "end": 13243, "name": "DUP4", "source": 2 }, + { "begin": 13230, "end": 13248, "name": "ADD", "source": 2 }, + { "begin": 13221, "end": 13227, "name": "DUP5", "source": 2 }, { - "begin": 13172, - "end": 13244, + "begin": 13177, + "end": 13249, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, { - "begin": 13172, - "end": 13244, + "begin": 13177, + "end": 13249, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13172, - "end": 13244, + "begin": 13177, + "end": 13249, "name": "tag", - "source": 1, + "source": 2, "value": "354" }, - { "begin": 13172, "end": 13244, "name": "JUMPDEST", "source": 1 }, - { "begin": 12919, "end": 13251, "name": "SWAP4", "source": 1 }, - { "begin": 12919, "end": 13251, "name": "SWAP3", "source": 1 }, - { "begin": 12919, "end": 13251, "name": "POP", "source": 1 }, - { "begin": 12919, "end": 13251, "name": "POP", "source": 1 }, - { "begin": 12919, "end": 13251, "name": "POP", "source": 1 }, + { "begin": 13177, "end": 13249, "name": "JUMPDEST", "source": 2 }, + { "begin": 12924, "end": 13256, "name": "SWAP4", "source": 2 }, + { "begin": 12924, "end": 13256, "name": "SWAP3", "source": 2 }, + { "begin": 12924, "end": 13256, "name": "POP", "source": 2 }, + { "begin": 12924, "end": 13256, "name": "POP", "source": 2 }, + { "begin": 12924, "end": 13256, "name": "POP", "source": 2 }, { - "begin": 12919, - "end": 13251, + "begin": 12924, + "end": 13256, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" } ] @@ -18734,19 +18734,19 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"returns\":{\"_0\":\"A uint256 specifying the amount of tokens still available for the spender.\"}},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address. Selector: 70a08231\",\"params\":{\"who\":\"The address to query the balance of.\"},\"returns\":{\"_0\":\"An uint256 representing the amount owned by the passed address.\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token. Selector: 313ce567\"},\"name()\":{\"details\":\"Returns the name of the token. Selector: 06fdde03\"},\"symbol()\":{\"details\":\"Returns the symbol of the token. Selector: 95d89b41\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence Selector: 18160ddd\"},\"transfer(address,uint256)\":{\"details\":\"Transfer token for a specified address Selector: a9059cbb\",\"params\":{\"to\":\"The address to transfer to.\",\"value\":\"The amount to be transferred.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another Selector: 23b872dd\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"to\":\"address The address which you want to transfer to\",\"value\":\"uint256 the amount of tokens to bedelega transferred\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"erc20()\":{\"notice\":\"The ierc20 at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"ERC20Instance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x994a8c4d7df0b15e9ca42a5e4f3d430e81c68f87711e9aba9740f3f3758a4eb6\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://7acd60985248ad43e4270d89f4e58b2ca4f418c92d8e2b5c2cbe35549d0b9f10\",\"dweb:/ipfs/QmUZKf1C1Eu6eFaKg4XPZ64kYAKykoVkAWp3haHVWcQvgY\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"returns\":{\"_0\":\"A uint256 specifying the amount of tokens still available for the spender.\"}},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address. Selector: 70a08231\",\"params\":{\"who\":\"The address to query the balance of.\"},\"returns\":{\"_0\":\"An uint256 representing the amount owned by the passed address.\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token. Selector: 313ce567\"},\"name()\":{\"details\":\"Returns the name of the token. Selector: 06fdde03\"},\"symbol()\":{\"details\":\"Returns the symbol of the token. Selector: 95d89b41\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence Selector: 18160ddd\"},\"transfer(address,uint256)\":{\"details\":\"Transfer token for a specified address Selector: a9059cbb\",\"params\":{\"to\":\"The address to transfer to.\",\"value\":\"The amount to be transferred.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another Selector: 23b872dd\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"to\":\"address The address which you want to transfer to\",\"value\":\"uint256 the amount of tokens to be transferred\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"erc20()\":{\"notice\":\"The ierc20 at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"ERC20Instance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x9ac0adf8778279b8a592bacd9e7e3027f82e9374703ea82d6eb86bc64ad7beae\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://5d31c14388355af19a45b5ec9680597f56411c161d14cfe5526be024998db422\",\"dweb:/ipfs/Qmax5SjhrbFfF3y6kR7TbzGMs3b6qtyNff9tFVDBaTkofV\"]},\"precompiles/assets-erc20/ERC20.sol\":{\"keccak256\":\"0xae1df4594e937bbcbed6d6cfea64f4470e35d498809776e86fa4c161e728eb8b\",\"urls\":[\"bzz-raw://70ba6ec37955700a7467dcc02242e218dd1e5abc4afc40b6e524b247b188a17a\",\"dweb:/ipfs/QmSRd4rTE6UY1yC16HcsZ9apoipHfTFbpcKZWri7PgPXuT\"]}},\"version\":1}", "storageLayout": { "storage": [ { - "astId": 104, + "astId": 11, "contract": "main.sol:ERC20Instance", "label": "erc20", "offset": 0, "slot": "0", - "type": "t_contract(IERC20)95" + "type": "t_contract(IERC20)325" }, { - "astId": 107, + "astId": 14, "contract": "main.sol:ERC20Instance", "label": "erc20address", "offset": 0, @@ -18760,7 +18760,7 @@ "label": "address", "numberOfBytes": "20" }, - "t_contract(IERC20)95": { + "t_contract(IERC20)325": { "encoding": "inplace", "label": "contract IERC20", "numberOfBytes": "20" @@ -18775,5 +18775,5 @@ "version": 1 } }, - "sourceCode": "\n // SPDX-License-Identifier: GPL-3.0-only\n pragma solidity ^0.8.0;\n\n /**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts\n */\n interface IERC20 {\n \n /**\n * @dev Returns the name of the token.\n * Selector: 06fdde03\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n * Selector: 95d89b41\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n * Selector: 313ce567\n */\n function decimals() external view returns (uint8);\n \n /**\n * @dev Total number of tokens in existence\n * Selector: 18160ddd\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Gets the balance of the specified address.\n * Selector: 70a08231\n * @param who The address to query the balance of.\n * @return An uint256 representing the amount owned by the passed address.\n */\n function balanceOf(address who) external view returns (uint256);\n\n /**\n * @dev Function to check the amount of tokens that an owner allowed to a spender.\n * Selector: dd62ed3e\n * @param owner address The address which owns the funds.\n * @param spender address The address which will spend the funds.\n * @return A uint256 specifying the amount of tokens still available for the spender.\n */\n function allowance(address owner, address spender)\n external view returns (uint256);\n\n /**\n * @dev Transfer token for a specified address\n * Selector: a9059cbb\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens on behalf\n * of msg.sender.\n * Beware that changing an allowance with this method brings the risk that someone may\n * use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to\n * mitigate this race condition is to first reduce the spender's allowance to 0 and set\n * the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * Selector: 095ea7b3\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n */\n function approve(address spender, uint256 value)\n external returns (bool);\n\n /**\n * @dev Transfer tokens from one address to another\n * Selector: 23b872dd\n * @param from address The address which you want to send tokens from\n * @param to address The address which you want to transfer to\n * @param value uint256 the amount of tokens to bedelega transferred\n */\n function transferFrom(address from, address to, uint256 value)\n external returns (bool);\n\n /**\n * @dev Event emited when a transfer has been performed.\n * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n * @param from address The address sending the tokens\n * @param to address The address receiving the tokens.\n * @param value uint256 The amount of tokens transfered.\n */\n event Transfer(\n address indexed from,\n address indexed to,\n uint256 value\n );\n\n /**\n * @dev Event emited when an approval has been registered.\n * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n * @param owner address Owner of the tokens.\n * @param spender address Allowed spender.\n * @param value uint256 Amount of tokens approved.\n */\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n }\n\n contract ERC20Instance is IERC20 {\n\n /// The ierc20 at the known pre-compile address.\n IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080);\n address erc20address = 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080;\n\n receive() external payable {\n // React to receiving ether\n }\n\n function name() override external view returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return erc20.name();\n }\n \n function symbol() override external view returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return erc20.symbol();\n }\n \n function decimals() override external view returns (uint8) {\n // We nominate our target collator with all the tokens provided\n return erc20.decimals();\n }\n\n function totalSupply() override external view returns (uint256){\n // We nominate our target collator with all the tokens provided\n return erc20.totalSupply();\n }\n \n function balanceOf(address who) override external view returns (uint256){\n // We nominate our target collator with all the tokens provided\n return erc20.balanceOf(who);\n }\n \n function allowance(\n address owner,\n address spender\n ) override external view returns (uint256){\n return erc20.allowance(owner, spender);\n }\n\n function transfer(address to, uint256 value) override external returns (bool) {\n return erc20.transfer(to, value);\n }\n \n function transfer_delegate(address to, uint256 value) external returns (bool) {\n (bool result, bytes memory data) = erc20address.delegatecall(\n abi.encodeWithSignature(\"transfer(address,uint256)\", to, value));\n return result;\n }\n \n function approve(address spender, uint256 value) override external returns (bool) {\n return erc20.approve(spender, value);\n }\n\n function approve_delegate(address spender, uint256 value) external returns (bool) {\n (bool result, bytes memory data) = erc20address.delegatecall(\n abi.encodeWithSignature(\"approve(address,uint256)\", spender, value));\n return result;\n }\n \n function transferFrom(\n address from,\n address to,\n uint256 value)\n override external returns (bool) {\n return erc20.transferFrom(from, to, value);\n }\n \n function transferFrom_delegate(\n address from,\n address to,\n uint256 value) external returns (bool) {\n (bool result, bytes memory data) = erc20address.delegatecall(\n abi.encodeWithSignature(\"transferFrom(address,address,uint256)\", from, to, value));\n return result;\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\nimport \"../../../precompiles/assets-erc20/ERC20.sol\";\n\ncontract ERC20Instance is IERC20 {\n /// The ierc20 at the known pre-compile address.\n IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080);\n address erc20address = 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080;\n\n receive() external payable {\n // React to receiving ether\n }\n\n function name() external view override returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return erc20.name();\n }\n\n function symbol() external view override returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return erc20.symbol();\n }\n\n function decimals() external view override returns (uint8) {\n // We nominate our target collator with all the tokens provided\n return erc20.decimals();\n }\n\n function totalSupply() external view override returns (uint256) {\n // We nominate our target collator with all the tokens provided\n return erc20.totalSupply();\n }\n\n function balanceOf(address who) external view override returns (uint256) {\n // We nominate our target collator with all the tokens provided\n return erc20.balanceOf(who);\n }\n\n function allowance(address owner, address spender)\n external\n view\n override\n returns (uint256)\n {\n return erc20.allowance(owner, spender);\n }\n\n function transfer(address to, uint256 value)\n external\n override\n returns (bool)\n {\n return erc20.transfer(to, value);\n }\n\n function transfer_delegate(address to, uint256 value)\n external\n returns (bool)\n {\n (bool result, bytes memory data) = erc20address.delegatecall(\n abi.encodeWithSignature(\"transfer(address,uint256)\", to, value)\n );\n return result;\n }\n\n function approve(address spender, uint256 value)\n external\n override\n returns (bool)\n {\n return erc20.approve(spender, value);\n }\n\n function approve_delegate(address spender, uint256 value)\n external\n returns (bool)\n {\n (bool result, bytes memory data) = erc20address.delegatecall(\n abi.encodeWithSignature(\"approve(address,uint256)\", spender, value)\n );\n return result;\n }\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external override returns (bool) {\n return erc20.transferFrom(from, to, value);\n }\n\n function transferFrom_delegate(\n address from,\n address to,\n uint256 value\n ) external returns (bool) {\n (bool result, bytes memory data) = erc20address.delegatecall(\n abi.encodeWithSignature(\n \"transferFrom(address,address,uint256)\",\n from,\n to,\n value\n )\n );\n return result;\n }\n}\n" } diff --git a/tests/contracts/compiled/EventEmitter.json b/tests/contracts/compiled/EventEmitter.json new file mode 100644 index 0000000000..9d4d9243ac --- /dev/null +++ b/tests/contracts/compiled/EventEmitter.json @@ -0,0 +1,209 @@ +{ + "byteCode": "0x6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea264697066735822122019a8fc5d76dd3ee3fdc3ad37614307057c525fcec0ff3ae565ecb83792e687b064736f6c634300080b0033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "Constructed", + "type": "event" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":67:203 contract EventEmitter {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":142:201 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":183:193 msg.sender */\n caller\n /* \"main.sol\":171:194 Constructed(msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log2\n /* \"main.sol\":67:203 contract EventEmitter {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:203 contract EventEmitter {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa264697066735822122019a8fc5d76dd3ee3fdc3ad37614307057c525fcec0ff3ae565ecb83792e687b064736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": { + "@_14": { + "entryPoint": null, + "id": 14, + "parameterSlots": 0, + "returnSlots": 0 + } + }, + "generatedSources": [], + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea264697066735822122019a8fc5d76dd3ee3fdc3ad37614307057c525fcec0ff3ae565ecb83792e687b064736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3F DUP1 PUSH1 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT 0xA8 0xFC 0x5D PUSH23 0xDD3EE3FDC3AD37614307057C525FCEC0FF3AE565ECB837 SWAP3 0xE6 DUP8 0xB0 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:136:0:-:0;;;142:59;;;;;;;;;;183:10;171:23;;;;;;;;;;;;67:136;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea264697066735822122019a8fc5d76dd3ee3fdc3ad37614307057c525fcec0ff3ae565ecb83792e687b064736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT 0xA8 0xFC 0x5D PUSH23 0xDD3EE3FDC3AD37614307057C525FCEC0FF3AE565ECB837 SWAP3 0xE6 DUP8 0xB0 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:136:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "1226", + "totalCost": "13826" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 203, "name": "MSTORE", "source": 0 }, + { "begin": 142, "end": 201, "name": "CALLVALUE", "source": 0 }, + { "begin": 142, "end": 201, "name": "DUP1", "source": 0 }, + { "begin": 142, "end": 201, "name": "ISZERO", "source": 0 }, + { + "begin": 142, + "end": 201, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 142, "end": 201, "name": "JUMPI", "source": 0 }, + { + "begin": 142, + "end": 201, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 142, "end": 201, "name": "DUP1", "source": 0 }, + { "begin": 142, "end": 201, "name": "REVERT", "source": 0 }, + { + "begin": 142, + "end": 201, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 142, "end": 201, "name": "JUMPDEST", "source": 0 }, + { "begin": 142, "end": 201, "name": "POP", "source": 0 }, + { "begin": 183, "end": 193, "name": "CALLER", "source": 0 }, + { + "begin": 171, + "end": 194, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 171, "end": 194, "name": "AND", "source": 0 }, + { + "begin": 171, + "end": 194, + "name": "PUSH", + "source": 0, + "value": "40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D" + }, + { + "begin": 171, + "end": 194, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 171, "end": 194, "name": "MLOAD", "source": 0 }, + { + "begin": 171, + "end": 194, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 171, "end": 194, "name": "MLOAD", "source": 0 }, + { "begin": 171, "end": 194, "name": "DUP1", "source": 0 }, + { "begin": 171, "end": 194, "name": "SWAP2", "source": 0 }, + { "begin": 171, "end": 194, "name": "SUB", "source": 0 }, + { "begin": 171, "end": 194, "name": "SWAP1", "source": 0 }, + { "begin": 171, "end": 194, "name": "LOG2", "source": 0 }, + { + "begin": 67, + "end": 203, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 67, "end": 203, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 203, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 67, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 203, "name": "CODECOPY", "source": 0 }, + { + "begin": 67, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 203, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122019a8fc5d76dd3ee3fdc3ad37614307057c525fcec0ff3ae565ecb83792e687b064736f6c634300080b0033", + ".code": [ + { + "begin": 67, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 203, "name": "MSTORE", "source": 0 }, + { + "begin": 67, + "end": 203, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 203, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 203, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Constructed\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"EventEmitter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x74a1499c830d56665f40e736312b814d8efb7213cef4f57daa2246e1389e53ff\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://894a93fec9a74633de279619f5464c43bd0b3222e4fcbc3061c87bfe547b6fd6\",\"dweb:/ipfs/QmXkko3Q9CT1XRT1zj5RfMy873GoejgEcJRxcDnjhwhg3j\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract EventEmitter {\n event Constructed(address indexed owner);\n\n constructor() {\n emit Constructed(msg.sender);\n }\n}\n" +} diff --git a/tests/contracts/compiled/FailContract.json b/tests/contracts/compiled/FailContract.json deleted file mode 100644 index 40314e99f5..0000000000 --- a/tests/contracts/compiled/FailContract.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "byteCode": "0x6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":71:131 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":114:119 false */\n 0x00\n /* \"main.sol\":106:120 require(false) */\n tag_4\n jumpi\n 0x00\n dup1\n revert\ntag_4:\n /* \"main.sol\":39:137 contract FailContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:137 contract FailContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3F DUP1 PUSH1 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "39:98:0:-:0;;;71:60;;;;;;;;;;114:5;106:14;;;;;;39:98;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600080fdfea26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x68E132FA347C6E3B45DB840E591EA6FAC483DA22D192AABB59494B63 LOG4 0xC1 0xA5 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "39:98:0:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "64", - "totalCost": "12664" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 137, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 137, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 137, "name": "MSTORE", "source": 0 }, - { "begin": 71, "end": 131, "name": "CALLVALUE", "source": 0 }, - { "begin": 71, "end": 131, "name": "DUP1", "source": 0 }, - { "begin": 71, "end": 131, "name": "ISZERO", "source": 0 }, - { - "begin": 71, - "end": 131, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 71, "end": 131, "name": "JUMPI", "source": 0 }, - { - "begin": 71, - "end": 131, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 71, "end": 131, "name": "DUP1", "source": 0 }, - { "begin": 71, "end": 131, "name": "REVERT", "source": 0 }, - { "begin": 71, "end": 131, "name": "tag", "source": 0, "value": "1" }, - { "begin": 71, "end": 131, "name": "JUMPDEST", "source": 0 }, - { "begin": 71, "end": 131, "name": "POP", "source": 0 }, - { - "begin": 114, - "end": 119, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 106, - "end": 120, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 106, "end": 120, "name": "JUMPI", "source": 0 }, - { - "begin": 106, - "end": 120, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 106, "end": 120, "name": "DUP1", "source": 0 }, - { "begin": 106, "end": 120, "name": "REVERT", "source": 0 }, - { - "begin": 106, - "end": 120, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 106, "end": 120, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 137, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 137, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 137, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 137, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 137, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 137, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 137, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212207b68e132fa347c6e3b45db840e591ea6fac483da22d192aabb59494b63a4c1a564736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 137, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 137, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 137, "name": "MSTORE", "source": 0 }, - { - "begin": 39, - "end": 137, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 137, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 137, "name": "REVERT", "source": 0 } - ] - } - } - }, - "methodIdentifiers": {} - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FailContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4de9ab93b7ba7a82d8e58a903a5a297b8a8dc5263369657b062496782a5a51e9\",\"urls\":[\"bzz-raw://70e08b1c0fff16d5982491d2b46221465b0094cd251f991786aa1ca409f6c431\",\"dweb:/ipfs/QmVc7Qm8cNSUa4CrQhPtuSUJndczcDARrLoYc4z1CCuJ3m\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract FailContract {\n constructor() public {\n require(false);\n }\n }" -} diff --git a/tests/contracts/compiled/FailingConstructor.json b/tests/contracts/compiled/FailingConstructor.json new file mode 100644 index 0000000000..8c4fcf3fc5 --- /dev/null +++ b/tests/contracts/compiled/FailingConstructor.json @@ -0,0 +1,191 @@ +{ + "byteCode": "0x6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212202423c94b6fa90109197687dcef487014c7dcecb12ad072f1f4f5252fb6e5f44664736f6c634300080b0033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":67:148 contract FailingConstructor {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":101:146 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":133:138 false */\n 0x00\n /* \"main.sol\":125:139 require(false) */\n tag_4\n jumpi\n 0x00\n dup1\n revert\ntag_4:\n /* \"main.sol\":67:148 contract FailingConstructor {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:148 contract FailingConstructor {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212202423c94b6fa90109197687dcef487014c7dcecb12ad072f1f4f5252fb6e5f44664736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": { + "@_9": { + "entryPoint": null, + "id": 9, + "parameterSlots": 0, + "returnSlots": 0 + } + }, + "generatedSources": [], + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b506000601a57600080fd5b603f8060276000396000f3fe6080604052600080fdfea26469706673582212202423c94b6fa90109197687dcef487014c7dcecb12ad072f1f4f5252fb6e5f44664736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH1 0x1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3F DUP1 PUSH1 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 0x23 0xC9 0x4B PUSH16 0xA90109197687DCEF487014C7DCECB12A 0xD0 PUSH19 0xF1F4F5252FB6E5F44664736F6C634300080B00 CALLER ", + "sourceMap": "67:81:0:-:0;;;101:45;;;;;;;;;;133:5;125:14;;;;;;67:81;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600080fdfea26469706673582212202423c94b6fa90109197687dcef487014c7dcecb12ad072f1f4f5252fb6e5f44664736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 0x23 0xC9 0x4B PUSH16 0xA90109197687DCEF487014C7DCECB12A 0xD0 PUSH19 0xF1F4F5252FB6E5F44664736F6C634300080B00 CALLER ", + "sourceMap": "67:81:0:-:0;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "12600", + "executionCost": "64", + "totalCost": "12664" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 148, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 148, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 148, "name": "MSTORE", "source": 0 }, + { "begin": 101, "end": 146, "name": "CALLVALUE", "source": 0 }, + { "begin": 101, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 101, "end": 146, "name": "ISZERO", "source": 0 }, + { + "begin": 101, + "end": 146, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 101, "end": 146, "name": "JUMPI", "source": 0 }, + { + "begin": 101, + "end": 146, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 101, "end": 146, "name": "DUP1", "source": 0 }, + { "begin": 101, "end": 146, "name": "REVERT", "source": 0 }, + { + "begin": 101, + "end": 146, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 101, "end": 146, "name": "JUMPDEST", "source": 0 }, + { "begin": 101, "end": 146, "name": "POP", "source": 0 }, + { + "begin": 133, + "end": 138, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 125, + "end": 139, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 125, "end": 139, "name": "JUMPI", "source": 0 }, + { + "begin": 125, + "end": 139, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 125, "end": 139, "name": "DUP1", "source": 0 }, + { "begin": 125, "end": 139, "name": "REVERT", "source": 0 }, + { + "begin": 125, + "end": 139, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 125, "end": 139, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 148, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 67, "end": 148, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 148, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 67, + "end": 148, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 148, "name": "CODECOPY", "source": 0 }, + { + "begin": 67, + "end": 148, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 148, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212202423c94b6fa90109197687dcef487014c7dcecb12ad072f1f4f5252fb6e5f44664736f6c634300080b0033", + ".code": [ + { + "begin": 67, + "end": 148, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 148, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 148, "name": "MSTORE", "source": 0 }, + { + "begin": 67, + "end": 148, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 148, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 148, "name": "REVERT", "source": 0 } + ] + } + } + }, + "methodIdentifiers": {} + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FailingConstructor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa7d65afcdb57ab1c6b4f3527da43f223193fd1d05591b04066ecd1bf2deed774\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://b6f0404fb7b7d1240d746748673efe7449a00ebb5a77cb669e6f86d94fbad7ec\",\"dweb:/ipfs/QmPNupbnQjjb1fo9qHhQ5oHHANWvvyxDLknA66AnTt8RZo\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract FailingConstructor {\n constructor() {\n require(false);\n }\n}\n" +} diff --git a/tests/contracts/compiled/Fibonacci.json b/tests/contracts/compiled/Fibonacci.json index c152145589..0bb12672f1 100644 --- a/tests/contracts/compiled/Fibonacci.json +++ b/tests/contracts/compiled/Fibonacci.json @@ -1,5 +1,5 @@ { - "byteCode": "0x608060405234801561001057600080fd5b50610254806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a9bbfcd14610030575b600080fd5b61004a600480360381019061004591906100d3565b610060565b604051610057919061010f565b60405180910390f35b60008082141561007357600090506100b9565b600060019050600191506000600290505b838110156100b6576000838361009a919061012a565b90508392508093505080806100ae9061018a565b915050610084565b50505b919050565b6000813590506100cd81610207565b92915050565b6000602082840312156100e9576100e8610202565b5b60006100f7848285016100be565b91505092915050565b61010981610180565b82525050565b60006020820190506101246000830184610100565b92915050565b600061013582610180565b915061014083610180565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610175576101746101d3565b5b828201905092915050565b6000819050919050565b600061019582610180565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156101c8576101c76101d3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b61021081610180565b811461021b57600080fd5b5056fea2646970667358221220432fb50418eda06e8d39a475ac2afdad49bc2a156bba38a4d1449da65e2ef96464736f6c63430008060033", + "byteCode": "0x608060405234801561001057600080fd5b50610254806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a9bbfcd14610030575b600080fd5b61004a600480360381019061004591906100f9565b610060565b6040516100579190610135565b60405180910390f35b60008082141561007357600090506100b9565b600060019050600191506000600290505b838110156100b6576000838361009a919061017f565b90508392508093505080806100ae906101d5565b915050610084565b50505b919050565b600080fd5b6000819050919050565b6100d6816100c3565b81146100e157600080fd5b50565b6000813590506100f3816100cd565b92915050565b60006020828403121561010f5761010e6100be565b5b600061011d848285016100e4565b91505092915050565b61012f816100c3565b82525050565b600060208201905061014a6000830184610126565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061018a826100c3565b9150610195836100c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101ca576101c9610150565b5b828201905092915050565b60006101e0826100c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561021357610212610150565b5b60018201905091905056fea26469706673582212201099f7739f4f4fcf0676126a8353bfeb28dc0008ce6bdebeabd6ff77fe2c84e164736f6c634300080b0033", "contract": { "abi": [ { @@ -10,20 +10,20 @@ "outputs": [ { "internalType": "uint256", "name": "b", "type": "uint256" } ], - "stateMutability": "nonpayable", + "stateMutability": "pure", "type": "function" } ], "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":34:335 contract Fibonacci {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:335 contract Fibonacci {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3a9bbfcd\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":61:329 function fib2(uint n) public returns(uint b) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":98:104 uint b */\n 0x00\n /* \"main.sol\":125:126 0 */\n dup1\n /* \"main.sol\":120:121 n */\n dup3\n /* \"main.sol\":120:126 n == 0 */\n eq\n /* \"main.sol\":116:159 if (n == 0) {... */\n iszero\n tag_11\n jumpi\n /* \"main.sol\":147:148 0 */\n 0x00\n /* \"main.sol\":140:148 return 0 */\n swap1\n pop\n jump(tag_10)\n /* \"main.sol\":116:159 if (n == 0) {... */\n tag_11:\n /* \"main.sol\":168:174 uint a */\n 0x00\n /* \"main.sol\":177:178 1 */\n 0x01\n /* \"main.sol\":168:178 uint a = 1 */\n swap1\n pop\n /* \"main.sol\":192:193 1 */\n 0x01\n /* \"main.sol\":188:193 b = 1 */\n swap2\n pop\n /* \"main.sol\":208:214 uint i */\n 0x00\n /* \"main.sol\":217:218 2 */\n 0x02\n /* \"main.sol\":208:218 uint i = 2 */\n swap1\n pop\n /* \"main.sol\":203:303 for (uint i = 2; i < n; i++) {... */\n tag_12:\n /* \"main.sol\":224:225 n */\n dup4\n /* \"main.sol\":220:221 i */\n dup2\n /* \"main.sol\":220:225 i < n */\n lt\n /* \"main.sol\":203:303 for (uint i = 2; i < n; i++) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":244:250 uint c */\n 0x00\n /* \"main.sol\":257:258 b */\n dup4\n /* \"main.sol\":253:254 a */\n dup4\n /* \"main.sol\":253:258 a + b */\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n /* \"main.sol\":244:258 uint c = a + b */\n swap1\n pop\n /* \"main.sol\":274:275 b */\n dup4\n /* \"main.sol\":270:275 a = b */\n swap3\n pop\n /* \"main.sol\":291:292 c */\n dup1\n /* \"main.sol\":287:292 b = c */\n swap4\n pop\n /* \"main.sol\":232:303 {... */\n pop\n /* \"main.sol\":227:230 i++ */\n dup1\n dup1\n tag_17\n swap1\n tag_18\n jump\t// in\n tag_17:\n swap2\n pop\n pop\n /* \"main.sol\":203:303 for (uint i = 2; i < n; i++) {... */\n jump(tag_12)\n tag_13:\n pop\n /* \"main.sol\":312:320 return b */\n pop\n /* \"main.sol\":61:329 function fib2(uint n) public returns(uint b) {... */\n tag_10:\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_20:\n /* \"#utility.yul\":53:58 */\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_22\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_23\n jump\t// in\n tag_22:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:481 */\n tag_6:\n /* \"#utility.yul\":211:217 */\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_25\n jumpi\n /* \"#utility.yul\":266:345 */\n tag_26\n tag_27\n jump\t// in\n tag_26:\n /* \"#utility.yul\":228:230 */\n tag_25:\n /* \"#utility.yul\":386:387 */\n 0x00\n /* \"#utility.yul\":411:464 */\n tag_28\n /* \"#utility.yul\":456:463 */\n dup5\n /* \"#utility.yul\":447:453 */\n dup3\n /* \"#utility.yul\":436:445 */\n dup6\n /* \"#utility.yul\":432:454 */\n add\n /* \"#utility.yul\":411:464 */\n tag_20\n jump\t// in\n tag_28:\n /* \"#utility.yul\":401:464 */\n swap2\n pop\n /* \"#utility.yul\":357:474 */\n pop\n /* \"#utility.yul\":218:481 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":487:605 */\n tag_29:\n /* \"#utility.yul\":574:598 */\n tag_31\n /* \"#utility.yul\":592:597 */\n dup2\n /* \"#utility.yul\":574:598 */\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":569:572 */\n dup3\n /* \"#utility.yul\":562:599 */\n mstore\n /* \"#utility.yul\":552:605 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":611:833 */\n tag_9:\n /* \"#utility.yul\":704:708 */\n 0x00\n /* \"#utility.yul\":742:744 */\n 0x20\n /* \"#utility.yul\":731:740 */\n dup3\n /* \"#utility.yul\":727:745 */\n add\n /* \"#utility.yul\":719:745 */\n swap1\n pop\n /* \"#utility.yul\":755:826 */\n tag_34\n /* \"#utility.yul\":823:824 */\n 0x00\n /* \"#utility.yul\":812:821 */\n dup4\n /* \"#utility.yul\":808:825 */\n add\n /* \"#utility.yul\":799:805 */\n dup5\n /* \"#utility.yul\":755:826 */\n tag_29\n jump\t// in\n tag_34:\n /* \"#utility.yul\":709:833 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":920:1225 */\n tag_16:\n /* \"#utility.yul\":960:963 */\n 0x00\n /* \"#utility.yul\":979:999 */\n tag_38\n /* \"#utility.yul\":997:998 */\n dup3\n /* \"#utility.yul\":979:999 */\n tag_32\n jump\t// in\n tag_38:\n /* \"#utility.yul\":974:999 */\n swap2\n pop\n /* \"#utility.yul\":1013:1033 */\n tag_39\n /* \"#utility.yul\":1031:1032 */\n dup4\n /* \"#utility.yul\":1013:1033 */\n tag_32\n jump\t// in\n tag_39:\n /* \"#utility.yul\":1008:1033 */\n swap3\n pop\n /* \"#utility.yul\":1167:1168 */\n dup3\n /* \"#utility.yul\":1099:1165 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1095:1169 */\n sub\n /* \"#utility.yul\":1092:1093 */\n dup3\n /* \"#utility.yul\":1089:1170 */\n gt\n /* \"#utility.yul\":1086:1088 */\n iszero\n tag_40\n jumpi\n /* \"#utility.yul\":1173:1191 */\n tag_41\n tag_42\n jump\t// in\n tag_41:\n /* \"#utility.yul\":1086:1088 */\n tag_40:\n /* \"#utility.yul\":1217:1218 */\n dup3\n /* \"#utility.yul\":1214:1215 */\n dup3\n /* \"#utility.yul\":1210:1219 */\n add\n /* \"#utility.yul\":1203:1219 */\n swap1\n pop\n /* \"#utility.yul\":964:1225 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1231:1308 */\n tag_32:\n /* \"#utility.yul\":1268:1275 */\n 0x00\n /* \"#utility.yul\":1297:1302 */\n dup2\n /* \"#utility.yul\":1286:1302 */\n swap1\n pop\n /* \"#utility.yul\":1276:1308 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1314:1547 */\n tag_18:\n /* \"#utility.yul\":1353:1356 */\n 0x00\n /* \"#utility.yul\":1376:1400 */\n tag_45\n /* \"#utility.yul\":1394:1399 */\n dup3\n /* \"#utility.yul\":1376:1400 */\n tag_32\n jump\t// in\n tag_45:\n /* \"#utility.yul\":1367:1400 */\n swap2\n pop\n /* \"#utility.yul\":1422:1488 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1415:1420 */\n dup3\n /* \"#utility.yul\":1412:1489 */\n eq\n /* \"#utility.yul\":1409:1411 */\n iszero\n tag_46\n jumpi\n /* \"#utility.yul\":1492:1510 */\n tag_47\n tag_42\n jump\t// in\n tag_47:\n /* \"#utility.yul\":1409:1411 */\n tag_46:\n /* \"#utility.yul\":1539:1540 */\n 0x01\n /* \"#utility.yul\":1532:1537 */\n dup3\n /* \"#utility.yul\":1528:1541 */\n add\n /* \"#utility.yul\":1521:1541 */\n swap1\n pop\n /* \"#utility.yul\":1357:1547 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1553:1733 */\n tag_42:\n /* \"#utility.yul\":1601:1678 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1598:1599 */\n 0x00\n /* \"#utility.yul\":1591:1679 */\n mstore\n /* \"#utility.yul\":1698:1702 */\n 0x11\n /* \"#utility.yul\":1695:1696 */\n 0x04\n /* \"#utility.yul\":1688:1703 */\n mstore\n /* \"#utility.yul\":1722:1726 */\n 0x24\n /* \"#utility.yul\":1719:1720 */\n 0x00\n /* \"#utility.yul\":1712:1727 */\n revert\n /* \"#utility.yul\":1862:1979 */\n tag_27:\n /* \"#utility.yul\":1971:1972 */\n 0x00\n /* \"#utility.yul\":1968:1969 */\n dup1\n /* \"#utility.yul\":1961:1973 */\n revert\n /* \"#utility.yul\":1985:2107 */\n tag_23:\n /* \"#utility.yul\":2058:2082 */\n tag_53\n /* \"#utility.yul\":2076:2081 */\n dup2\n /* \"#utility.yul\":2058:2082 */\n tag_32\n jump\t// in\n tag_53:\n /* \"#utility.yul\":2051:2056 */\n dup2\n /* \"#utility.yul\":2048:2083 */\n eq\n /* \"#utility.yul\":2038:2040 */\n tag_54\n jumpi\n /* \"#utility.yul\":2097:2098 */\n 0x00\n /* \"#utility.yul\":2094:2095 */\n dup1\n /* \"#utility.yul\":2087:2099 */\n revert\n /* \"#utility.yul\":2038:2040 */\n tag_54:\n /* \"#utility.yul\":2028:2107 */\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220432fb50418eda06e8d39a475ac2afdad49bc2a156bba38a4d1449da65e2ef96464736f6c63430008060033\n}\n", + "assembly": " /* \"main.sol\":67:389 contract Fibonacci {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:389 contract Fibonacci {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3a9bbfcd\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":92:387 function fib2(uint256 n) public pure returns (uint256 b) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":138:147 uint256 b */\n 0x00\n /* \"main.sol\":168:169 0 */\n dup1\n /* \"main.sol\":163:164 n */\n dup3\n /* \"main.sol\":163:169 n == 0 */\n eq\n /* \"main.sol\":159:204 if (n == 0) {... */\n iszero\n tag_11\n jumpi\n /* \"main.sol\":192:193 0 */\n 0x00\n /* \"main.sol\":185:193 return 0 */\n swap1\n pop\n jump(tag_10)\n /* \"main.sol\":159:204 if (n == 0) {... */\n tag_11:\n /* \"main.sol\":213:222 uint256 a */\n 0x00\n /* \"main.sol\":225:226 1 */\n 0x01\n /* \"main.sol\":213:226 uint256 a = 1 */\n swap1\n pop\n /* \"main.sol\":240:241 1 */\n 0x01\n /* \"main.sol\":236:241 b = 1 */\n swap2\n pop\n /* \"main.sol\":256:265 uint256 i */\n 0x00\n /* \"main.sol\":268:269 2 */\n 0x02\n /* \"main.sol\":256:269 uint256 i = 2 */\n swap1\n pop\n /* \"main.sol\":251:363 for (uint256 i = 2; i < n; i++) {... */\n tag_12:\n /* \"main.sol\":275:276 n */\n dup4\n /* \"main.sol\":271:272 i */\n dup2\n /* \"main.sol\":271:276 i < n */\n lt\n /* \"main.sol\":251:363 for (uint256 i = 2; i < n; i++) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":297:306 uint256 c */\n 0x00\n /* \"main.sol\":313:314 b */\n dup4\n /* \"main.sol\":309:310 a */\n dup4\n /* \"main.sol\":309:314 a + b */\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n /* \"main.sol\":297:314 uint256 c = a + b */\n swap1\n pop\n /* \"main.sol\":332:333 b */\n dup4\n /* \"main.sol\":328:333 a = b */\n swap3\n pop\n /* \"main.sol\":351:352 c */\n dup1\n /* \"main.sol\":347:352 b = c */\n swap4\n pop\n /* \"main.sol\":283:363 {... */\n pop\n /* \"main.sol\":278:281 i++ */\n dup1\n dup1\n tag_17\n swap1\n tag_18\n jump\t// in\n tag_17:\n swap2\n pop\n pop\n /* \"main.sol\":251:363 for (uint256 i = 2; i < n; i++) {... */\n jump(tag_12)\n tag_13:\n pop\n /* \"main.sol\":372:380 return b */\n pop\n /* \"main.sol\":92:387 function fib2(uint256 n) public pure returns (uint256 b) {... */\n tag_10:\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_20:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:411 */\n tag_22:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\n tag_23:\n /* \"#utility.yul\":490:514 */\n tag_33\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_22\n jump\t// in\n tag_33:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_34\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\n tag_34:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:684 */\n tag_24:\n /* \"#utility.yul\":591:596 */\n 0x00\n /* \"#utility.yul\":629:635 */\n dup2\n /* \"#utility.yul\":616:636 */\n calldataload\n /* \"#utility.yul\":607:636 */\n swap1\n pop\n /* \"#utility.yul\":645:678 */\n tag_36\n /* \"#utility.yul\":672:677 */\n dup2\n /* \"#utility.yul\":645:678 */\n tag_23\n jump\t// in\n tag_36:\n /* \"#utility.yul\":545:684 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":690:1019 */\n tag_6:\n /* \"#utility.yul\":749:755 */\n 0x00\n /* \"#utility.yul\":798:800 */\n 0x20\n /* \"#utility.yul\":786:795 */\n dup3\n /* \"#utility.yul\":777:784 */\n dup5\n /* \"#utility.yul\":773:796 */\n sub\n /* \"#utility.yul\":769:801 */\n slt\n /* \"#utility.yul\":766:885 */\n iszero\n tag_38\n jumpi\n /* \"#utility.yul\":804:883 */\n tag_39\n tag_20\n jump\t// in\n tag_39:\n /* \"#utility.yul\":766:885 */\n tag_38:\n /* \"#utility.yul\":924:925 */\n 0x00\n /* \"#utility.yul\":949:1002 */\n tag_40\n /* \"#utility.yul\":994:1001 */\n dup5\n /* \"#utility.yul\":985:991 */\n dup3\n /* \"#utility.yul\":974:983 */\n dup6\n /* \"#utility.yul\":970:992 */\n add\n /* \"#utility.yul\":949:1002 */\n tag_24\n jump\t// in\n tag_40:\n /* \"#utility.yul\":939:1002 */\n swap2\n pop\n /* \"#utility.yul\":895:1012 */\n pop\n /* \"#utility.yul\":690:1019 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1025:1143 */\n tag_25:\n /* \"#utility.yul\":1112:1136 */\n tag_42\n /* \"#utility.yul\":1130:1135 */\n dup2\n /* \"#utility.yul\":1112:1136 */\n tag_22\n jump\t// in\n tag_42:\n /* \"#utility.yul\":1107:1110 */\n dup3\n /* \"#utility.yul\":1100:1137 */\n mstore\n /* \"#utility.yul\":1025:1143 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1149:1371 */\n tag_9:\n /* \"#utility.yul\":1242:1246 */\n 0x00\n /* \"#utility.yul\":1280:1282 */\n 0x20\n /* \"#utility.yul\":1269:1278 */\n dup3\n /* \"#utility.yul\":1265:1283 */\n add\n /* \"#utility.yul\":1257:1283 */\n swap1\n pop\n /* \"#utility.yul\":1293:1364 */\n tag_44\n /* \"#utility.yul\":1361:1362 */\n 0x00\n /* \"#utility.yul\":1350:1359 */\n dup4\n /* \"#utility.yul\":1346:1363 */\n add\n /* \"#utility.yul\":1337:1343 */\n dup5\n /* \"#utility.yul\":1293:1364 */\n tag_25\n jump\t// in\n tag_44:\n /* \"#utility.yul\":1149:1371 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1377:1557 */\n tag_26:\n /* \"#utility.yul\":1425:1502 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1422:1423 */\n 0x00\n /* \"#utility.yul\":1415:1503 */\n mstore\n /* \"#utility.yul\":1522:1526 */\n 0x11\n /* \"#utility.yul\":1519:1520 */\n 0x04\n /* \"#utility.yul\":1512:1527 */\n mstore\n /* \"#utility.yul\":1546:1550 */\n 0x24\n /* \"#utility.yul\":1543:1544 */\n 0x00\n /* \"#utility.yul\":1536:1551 */\n revert\n /* \"#utility.yul\":1563:1868 */\n tag_16:\n /* \"#utility.yul\":1603:1606 */\n 0x00\n /* \"#utility.yul\":1622:1642 */\n tag_47\n /* \"#utility.yul\":1640:1641 */\n dup3\n /* \"#utility.yul\":1622:1642 */\n tag_22\n jump\t// in\n tag_47:\n /* \"#utility.yul\":1617:1642 */\n swap2\n pop\n /* \"#utility.yul\":1656:1676 */\n tag_48\n /* \"#utility.yul\":1674:1675 */\n dup4\n /* \"#utility.yul\":1656:1676 */\n tag_22\n jump\t// in\n tag_48:\n /* \"#utility.yul\":1651:1676 */\n swap3\n pop\n /* \"#utility.yul\":1810:1811 */\n dup3\n /* \"#utility.yul\":1742:1808 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1738:1812 */\n sub\n /* \"#utility.yul\":1735:1736 */\n dup3\n /* \"#utility.yul\":1732:1813 */\n gt\n /* \"#utility.yul\":1729:1836 */\n iszero\n tag_49\n jumpi\n /* \"#utility.yul\":1816:1834 */\n tag_50\n tag_26\n jump\t// in\n tag_50:\n /* \"#utility.yul\":1729:1836 */\n tag_49:\n /* \"#utility.yul\":1860:1861 */\n dup3\n /* \"#utility.yul\":1857:1858 */\n dup3\n /* \"#utility.yul\":1853:1862 */\n add\n /* \"#utility.yul\":1846:1862 */\n swap1\n pop\n /* \"#utility.yul\":1563:1868 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1874:2107 */\n tag_18:\n /* \"#utility.yul\":1913:1916 */\n 0x00\n /* \"#utility.yul\":1936:1960 */\n tag_52\n /* \"#utility.yul\":1954:1959 */\n dup3\n /* \"#utility.yul\":1936:1960 */\n tag_22\n jump\t// in\n tag_52:\n /* \"#utility.yul\":1927:1960 */\n swap2\n pop\n /* \"#utility.yul\":1982:2048 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1975:1980 */\n dup3\n /* \"#utility.yul\":1972:2049 */\n eq\n /* \"#utility.yul\":1969:2072 */\n iszero\n tag_53\n jumpi\n /* \"#utility.yul\":2052:2070 */\n tag_54\n tag_26\n jump\t// in\n tag_54:\n /* \"#utility.yul\":1969:2072 */\n tag_53:\n /* \"#utility.yul\":2099:2100 */\n 0x01\n /* \"#utility.yul\":2092:2097 */\n dup3\n /* \"#utility.yul\":2088:2101 */\n add\n /* \"#utility.yul\":2081:2101 */\n swap1\n pop\n /* \"#utility.yul\":1874:2107 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212201099f7739f4f4fcf0676126a8353bfeb28dc0008ce6bdebeabd6ff77fe2c84e164736f6c634300080b0033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50610254806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a9bbfcd14610030575b600080fd5b61004a600480360381019061004591906100d3565b610060565b604051610057919061010f565b60405180910390f35b60008082141561007357600090506100b9565b600060019050600191506000600290505b838110156100b6576000838361009a919061012a565b90508392508093505080806100ae9061018a565b915050610084565b50505b919050565b6000813590506100cd81610207565b92915050565b6000602082840312156100e9576100e8610202565b5b60006100f7848285016100be565b91505092915050565b61010981610180565b82525050565b60006020820190506101246000830184610100565b92915050565b600061013582610180565b915061014083610180565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610175576101746101d3565b5b828201905092915050565b6000819050919050565b600061019582610180565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156101c8576101c76101d3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b61021081610180565b811461021b57600080fd5b5056fea2646970667358221220432fb50418eda06e8d39a475ac2afdad49bc2a156bba38a4d1449da65e2ef96464736f6c63430008060033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x254 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A9BBFCD EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xD3 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x10F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP3 EQ ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0xB9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x1 SWAP2 POP PUSH1 0x0 PUSH1 0x2 SWAP1 POP JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP4 DUP4 PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x12A JUMP JUMPDEST SWAP1 POP DUP4 SWAP3 POP DUP1 SWAP4 POP POP DUP1 DUP1 PUSH2 0xAE SWAP1 PUSH2 0x18A JUMP JUMPDEST SWAP2 POP POP PUSH2 0x84 JUMP JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xCD DUP2 PUSH2 0x207 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE9 JUMPI PUSH2 0xE8 PUSH2 0x202 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF7 DUP5 DUP3 DUP6 ADD PUSH2 0xBE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x109 DUP2 PUSH2 0x180 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x124 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x100 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x135 DUP3 PUSH2 0x180 JUMP JUMPDEST SWAP2 POP PUSH2 0x140 DUP4 PUSH2 0x180 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x175 JUMPI PUSH2 0x174 PUSH2 0x1D3 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x195 DUP3 PUSH2 0x180 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1C8 JUMPI PUSH2 0x1C7 PUSH2 0x1D3 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x210 DUP2 PUSH2 0x180 JUMP JUMPDEST DUP2 EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0x2F 0xB5 DIV XOR 0xED LOG0 PUSH15 0x8D39A475AC2AFDAD49BC2A156BBA38 LOG4 0xD1 DIFFICULTY SWAP14 0xA6 0x5E 0x2E 0xF9 PUSH5 0x64736F6C63 NUMBER STOP ADDMOD MOD STOP CALLER ", - "sourceMap": "34:301:0:-:0;;;;;;;;;;;;;;;;;;;" + "object": "608060405234801561001057600080fd5b50610254806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a9bbfcd14610030575b600080fd5b61004a600480360381019061004591906100f9565b610060565b6040516100579190610135565b60405180910390f35b60008082141561007357600090506100b9565b600060019050600191506000600290505b838110156100b6576000838361009a919061017f565b90508392508093505080806100ae906101d5565b915050610084565b50505b919050565b600080fd5b6000819050919050565b6100d6816100c3565b81146100e157600080fd5b50565b6000813590506100f3816100cd565b92915050565b60006020828403121561010f5761010e6100be565b5b600061011d848285016100e4565b91505092915050565b61012f816100c3565b82525050565b600060208201905061014a6000830184610126565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061018a826100c3565b9150610195836100c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101ca576101c9610150565b5b828201905092915050565b60006101e0826100c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561021357610212610150565b5b60018201905091905056fea26469706673582212201099f7739f4f4fcf0676126a8353bfeb28dc0008ce6bdebeabd6ff77fe2c84e164736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x254 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A9BBFCD EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xF9 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x135 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP3 EQ ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0xB9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x1 SWAP2 POP PUSH1 0x0 PUSH1 0x2 SWAP1 POP JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP4 DUP4 PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x17F JUMP JUMPDEST SWAP1 POP DUP4 SWAP3 POP DUP1 SWAP4 POP POP DUP1 DUP1 PUSH2 0xAE SWAP1 PUSH2 0x1D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x84 JUMP JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD6 DUP2 PUSH2 0xC3 JUMP JUMPDEST DUP2 EQ PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xF3 DUP2 PUSH2 0xCD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10F JUMPI PUSH2 0x10E PUSH2 0xBE JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x11D DUP5 DUP3 DUP6 ADD PUSH2 0xE4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x12F DUP2 PUSH2 0xC3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x14A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x126 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x18A DUP3 PUSH2 0xC3 JUMP JUMPDEST SWAP2 POP PUSH2 0x195 DUP4 PUSH2 0xC3 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1CA JUMPI PUSH2 0x1C9 PUSH2 0x150 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 PUSH2 0xC3 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x213 JUMPI PUSH2 0x212 PUSH2 0x150 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT SWAP10 0xF7 PUSH20 0x9F4F4FCF0676126A8353BFEB28DC0008CE6BDEBE 0xAB 0xD6 SELFDESTRUCT PUSH24 0xFE2C84E164736F6C634300080B0033000000000000000000 ", + "sourceMap": "67:322:0:-:0;;;;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "functionDebugData": { @@ -34,25 +34,25 @@ "returnSlots": 1 }, "abi_decode_t_uint256": { - "entryPoint": 190, + "entryPoint": 228, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_tuple_t_uint256": { - "entryPoint": 211, + "entryPoint": 249, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_encode_t_uint256_to_t_uint256_fromStack": { - "entryPoint": 256, + "entryPoint": 294, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": 271, + "entryPoint": 309, "id": null, "parameterSlots": 2, "returnSlots": 1 @@ -64,25 +64,25 @@ "returnSlots": 1 }, "checked_add_t_uint256": { - "entryPoint": 298, + "entryPoint": 383, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "cleanup_t_uint256": { - "entryPoint": 384, + "entryPoint": 195, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "increment_t_uint256": { - "entryPoint": 394, + "entryPoint": 469, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "panic_error_0x11": { - "entryPoint": 467, + "entryPoint": 336, "id": null, "parameterSlots": 0, "returnSlots": 0 @@ -94,13 +94,13 @@ "returnSlots": 0 }, "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { - "entryPoint": 514, + "entryPoint": 190, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "validator_revert_t_uint256": { - "entryPoint": 519, + "entryPoint": 205, "id": null, "parameterSlots": 1, "returnSlots": 0 @@ -115,32 +115,304 @@ { "body": { "nodeType": "YulBlock", - "src": "59:87:1", + "src": "47:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:1", + "type": "" + } + ], + "src": "7:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:1", + "type": "" + } + ], + "src": "334:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:1" + }, + "nodeType": "YulIf", + "src": "470:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:1", + "type": "" + } + ], + "src": "417:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "597:87:1", "statements": [ { "nodeType": "YulAssignment", - "src": "69:29:1", + "src": "607:29:1", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "91:6:1" + "src": "629:6:1" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "78:12:1" + "src": "616:12:1" }, "nodeType": "YulFunctionCall", - "src": "78:20:1" + "src": "616:20:1" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "69:5:1" + "src": "607:5:1" } ] }, @@ -150,19 +422,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "134:5:1" + "src": "672:5:1" } ], "functionName": { "name": "validator_revert_t_uint256", "nodeType": "YulIdentifier", - "src": "107:26:1" + "src": "645:26:1" }, "nodeType": "YulFunctionCall", - "src": "107:33:1" + "src": "645:33:1" }, "nodeType": "YulExpressionStatement", - "src": "107:33:1" + "src": "645:33:1" } ] }, @@ -172,13 +444,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "37:6:1", + "src": "575:6:1", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "45:3:1", + "src": "583:3:1", "type": "" } ], @@ -186,21 +458,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "53:5:1", + "src": "591:5:1", "type": "" } ], - "src": "7:139:1" + "src": "545:139:1" }, { "body": { "nodeType": "YulBlock", - "src": "218:263:1", + "src": "756:263:1", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "264:83:1", + "src": "802:83:1", "statements": [ { "expression": { @@ -208,13 +480,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "266:77:1" + "src": "804:77:1" }, "nodeType": "YulFunctionCall", - "src": "266:79:1" + "src": "804:79:1" }, "nodeType": "YulExpressionStatement", - "src": "266:79:1" + "src": "804:79:1" } ] }, @@ -225,26 +497,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "239:7:1" + "src": "777:7:1" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "248:9:1" + "src": "786:9:1" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "235:3:1" + "src": "773:3:1" }, "nodeType": "YulFunctionCall", - "src": "235:23:1" + "src": "773:23:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "260:2:1", + "src": "798:2:1", "type": "", "value": "32" } @@ -252,25 +524,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "231:3:1" + "src": "769:3:1" }, "nodeType": "YulFunctionCall", - "src": "231:32:1" + "src": "769:32:1" }, "nodeType": "YulIf", - "src": "228:2:1" + "src": "766:119:1" }, { "nodeType": "YulBlock", - "src": "357:117:1", + "src": "895:117:1", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "372:15:1", + "src": "910:15:1", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "386:1:1", + "src": "924:1:1", "type": "", "value": "0" }, @@ -278,14 +550,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "376:6:1", + "src": "914:6:1", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "401:63:1", + "src": "939:63:1", "value": { "arguments": [ { @@ -293,41 +565,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "436:9:1" + "src": "974:9:1" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "447:6:1" + "src": "985:6:1" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "432:3:1" + "src": "970:3:1" }, "nodeType": "YulFunctionCall", - "src": "432:22:1" + "src": "970:22:1" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "456:7:1" + "src": "994:7:1" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "411:20:1" + "src": "949:20:1" }, "nodeType": "YulFunctionCall", - "src": "411:53:1" + "src": "949:53:1" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "401:6:1" + "src": "939:6:1" } ] } @@ -341,13 +613,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "188:9:1", + "src": "726:9:1", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "199:7:1", + "src": "737:7:1", "type": "" } ], @@ -355,16 +627,16 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "211:6:1", + "src": "749:6:1", "type": "" } ], - "src": "152:329:1" + "src": "690:329:1" }, { "body": { "nodeType": "YulBlock", - "src": "552:53:1", + "src": "1090:53:1", "statements": [ { "expression": { @@ -372,35 +644,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "569:3:1" + "src": "1107:3:1" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "592:5:1" + "src": "1130:5:1" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "574:17:1" + "src": "1112:17:1" }, "nodeType": "YulFunctionCall", - "src": "574:24:1" + "src": "1112:24:1" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "562:6:1" + "src": "1100:6:1" }, "nodeType": "YulFunctionCall", - "src": "562:37:1" + "src": "1100:37:1" }, "nodeType": "YulExpressionStatement", - "src": "562:37:1" + "src": "1100:37:1" } ] }, @@ -410,37 +682,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "540:5:1", + "src": "1078:5:1", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "547:3:1", + "src": "1085:3:1", "type": "" } ], - "src": "487:118:1" + "src": "1025:118:1" }, { "body": { "nodeType": "YulBlock", - "src": "709:124:1", + "src": "1247:124:1", "statements": [ { "nodeType": "YulAssignment", - "src": "719:26:1", + "src": "1257:26:1", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "731:9:1" + "src": "1269:9:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "742:2:1", + "src": "1280:2:1", "type": "", "value": "32" } @@ -448,16 +720,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "727:3:1" + "src": "1265:3:1" }, "nodeType": "YulFunctionCall", - "src": "727:18:1" + "src": "1265:18:1" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "719:4:1" + "src": "1257:4:1" } ] }, @@ -467,19 +739,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "799:6:1" + "src": "1337:6:1" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "812:9:1" + "src": "1350:9:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "823:1:1", + "src": "1361:1:1", "type": "", "value": "0" } @@ -487,22 +759,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "808:3:1" + "src": "1346:3:1" }, "nodeType": "YulFunctionCall", - "src": "808:17:1" + "src": "1346:17:1" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "755:43:1" + "src": "1293:43:1" }, "nodeType": "YulFunctionCall", - "src": "755:71:1" + "src": "1293:71:1" }, "nodeType": "YulExpressionStatement", - "src": "755:71:1" + "src": "1293:71:1" } ] }, @@ -512,13 +784,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "681:9:1", + "src": "1219:9:1", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "693:6:1", + "src": "1231:6:1", "type": "" } ], @@ -526,123 +798,173 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "704:4:1", + "src": "1242:4:1", "type": "" } ], - "src": "611:222:1" + "src": "1149:222:1" }, { "body": { "nodeType": "YulBlock", - "src": "879:35:1", + "src": "1405:152:1", "statements": [ { - "nodeType": "YulAssignment", - "src": "889:19:1", - "value": { + "expression": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "905:2:1", + "src": "1422:1:1", "type": "", - "value": "64" + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1425:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" } ], "functionName": { - "name": "mload", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "899:5:1" + "src": "1415:6:1" }, "nodeType": "YulFunctionCall", - "src": "899:9:1" + "src": "1415:88:1" }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "889:6:1" - } - ] - } - ] - }, - "name": "allocate_unbounded", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "872:6:1", - "type": "" - } - ], - "src": "839:75:1" + "nodeType": "YulExpressionStatement", + "src": "1415:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1519:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1522:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1512:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1512:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1512:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1543:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1546:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1536:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1536:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1536:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1377:180:1" }, { "body": { "nodeType": "YulBlock", - "src": "964:261:1", + "src": "1607:261:1", "statements": [ { "nodeType": "YulAssignment", - "src": "974:25:1", + "src": "1617:25:1", "value": { "arguments": [ { "name": "x", "nodeType": "YulIdentifier", - "src": "997:1:1" + "src": "1640:1:1" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "979:17:1" + "src": "1622:17:1" }, "nodeType": "YulFunctionCall", - "src": "979:20:1" + "src": "1622:20:1" }, "variableNames": [ { "name": "x", "nodeType": "YulIdentifier", - "src": "974:1:1" + "src": "1617:1:1" } ] }, { "nodeType": "YulAssignment", - "src": "1008:25:1", + "src": "1651:25:1", "value": { "arguments": [ { "name": "y", "nodeType": "YulIdentifier", - "src": "1031:1:1" + "src": "1674:1:1" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "1013:17:1" + "src": "1656:17:1" }, "nodeType": "YulFunctionCall", - "src": "1013:20:1" + "src": "1656:20:1" }, "variableNames": [ { "name": "y", "nodeType": "YulIdentifier", - "src": "1008:1:1" + "src": "1651:1:1" } ] }, { "body": { "nodeType": "YulBlock", - "src": "1171:22:1", + "src": "1814:22:1", "statements": [ { "expression": { @@ -650,13 +972,13 @@ "functionName": { "name": "panic_error_0x11", "nodeType": "YulIdentifier", - "src": "1173:16:1" + "src": "1816:16:1" }, "nodeType": "YulFunctionCall", - "src": "1173:18:1" + "src": "1816:18:1" }, "nodeType": "YulExpressionStatement", - "src": "1173:18:1" + "src": "1816:18:1" } ] }, @@ -665,72 +987,72 @@ { "name": "x", "nodeType": "YulIdentifier", - "src": "1092:1:1" + "src": "1735:1:1" }, { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "1099:66:1", + "src": "1742:66:1", "type": "", "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" }, { "name": "y", "nodeType": "YulIdentifier", - "src": "1167:1:1" + "src": "1810:1:1" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "1095:3:1" + "src": "1738:3:1" }, "nodeType": "YulFunctionCall", - "src": "1095:74:1" + "src": "1738:74:1" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "1089:2:1" + "src": "1732:2:1" }, "nodeType": "YulFunctionCall", - "src": "1089:81:1" + "src": "1732:81:1" }, "nodeType": "YulIf", - "src": "1086:2:1" + "src": "1729:107:1" }, { "nodeType": "YulAssignment", - "src": "1203:16:1", + "src": "1846:16:1", "value": { "arguments": [ { "name": "x", "nodeType": "YulIdentifier", - "src": "1214:1:1" + "src": "1857:1:1" }, { "name": "y", "nodeType": "YulIdentifier", - "src": "1217:1:1" + "src": "1860:1:1" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1210:3:1" + "src": "1853:3:1" }, "nodeType": "YulFunctionCall", - "src": "1210:9:1" + "src": "1853:9:1" }, "variableNames": [ { "name": "sum", "nodeType": "YulIdentifier", - "src": "1203:3:1" + "src": "1846:3:1" } ] } @@ -742,13 +1064,13 @@ { "name": "x", "nodeType": "YulTypedName", - "src": "951:1:1", + "src": "1594:1:1", "type": "" }, { "name": "y", "nodeType": "YulTypedName", - "src": "954:1:1", + "src": "1597:1:1", "type": "" } ], @@ -756,91 +1078,48 @@ { "name": "sum", "nodeType": "YulTypedName", - "src": "960:3:1", + "src": "1603:3:1", "type": "" } ], - "src": "920:305:1" + "src": "1563:305:1" }, { "body": { "nodeType": "YulBlock", - "src": "1276:32:1", + "src": "1917:190:1", "statements": [ { "nodeType": "YulAssignment", - "src": "1286:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1297:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1286:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1258:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1268:7:1", - "type": "" - } - ], - "src": "1231:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1357:190:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1367:33:1", + "src": "1927:33:1", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1394:5:1" + "src": "1954:5:1" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "1376:17:1" + "src": "1936:17:1" }, "nodeType": "YulFunctionCall", - "src": "1376:24:1" + "src": "1936:24:1" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1367:5:1" + "src": "1927:5:1" } ] }, { "body": { "nodeType": "YulBlock", - "src": "1490:22:1", + "src": "2050:22:1", "statements": [ { "expression": { @@ -848,13 +1127,13 @@ "functionName": { "name": "panic_error_0x11", "nodeType": "YulIdentifier", - "src": "1492:16:1" + "src": "2052:16:1" }, "nodeType": "YulFunctionCall", - "src": "1492:18:1" + "src": "2052:18:1" }, "nodeType": "YulExpressionStatement", - "src": "1492:18:1" + "src": "2052:18:1" } ] }, @@ -863,12 +1142,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "1415:5:1" + "src": "1975:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1422:66:1", + "src": "1982:66:1", "type": "", "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } @@ -876,28 +1155,28 @@ "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "1412:2:1" + "src": "1972:2:1" }, "nodeType": "YulFunctionCall", - "src": "1412:77:1" + "src": "1972:77:1" }, "nodeType": "YulIf", - "src": "1409:2:1" + "src": "1969:103:1" }, { "nodeType": "YulAssignment", - "src": "1521:20:1", + "src": "2081:20:1", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1532:5:1" + "src": "2092:5:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1539:1:1", + "src": "2099:1:1", "type": "", "value": "1" } @@ -905,16 +1184,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1528:3:1" + "src": "2088:3:1" }, "nodeType": "YulFunctionCall", - "src": "1528:13:1" + "src": "2088:13:1" }, "variableNames": [ { "name": "ret", "nodeType": "YulIdentifier", - "src": "1521:3:1" + "src": "2081:3:1" } ] } @@ -926,302 +1205,23 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1343:5:1", + "src": "1903:5:1", "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "1353:3:1", - "type": "" - } - ], - "src": "1314:233:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1581:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1598:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1601:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1591:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1591:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1591:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1695:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1698:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1688:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1688:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1688:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1719:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1722:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1712:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1712:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1712:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1553:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1828:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1845:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1848:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1838:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1838:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1838:12:1" - } - ] - }, - "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", - "nodeType": "YulFunctionDefinition", - "src": "1739:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1951:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1968:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1971:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1961:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1961:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1961:12:1" - } - ] - }, - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", - "nodeType": "YulFunctionDefinition", - "src": "1862:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2028:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2085:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2094:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2097:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2087:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2087:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2087:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2051:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2076:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "2058:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "2058:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2048:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "2048:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2041:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2041:43:1" - }, - "nodeType": "YulIf", - "src": "2038:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ + } + ], + "returnVariables": [ { - "name": "value", + "name": "ret", "nodeType": "YulTypedName", - "src": "2021:5:1", + "src": "1913:3:1", "type": "" } ], - "src": "1985:122:1" + "src": "1874:233:1" } ] }, - "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function increment_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function increment_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n}\n", "id": 1, "language": "Yul", "name": "#utility.yul" @@ -1229,9 +1229,9 @@ ], "immutableReferences": {}, "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a9bbfcd14610030575b600080fd5b61004a600480360381019061004591906100d3565b610060565b604051610057919061010f565b60405180910390f35b60008082141561007357600090506100b9565b600060019050600191506000600290505b838110156100b6576000838361009a919061012a565b90508392508093505080806100ae9061018a565b915050610084565b50505b919050565b6000813590506100cd81610207565b92915050565b6000602082840312156100e9576100e8610202565b5b60006100f7848285016100be565b91505092915050565b61010981610180565b82525050565b60006020820190506101246000830184610100565b92915050565b600061013582610180565b915061014083610180565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610175576101746101d3565b5b828201905092915050565b6000819050919050565b600061019582610180565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156101c8576101c76101d3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b61021081610180565b811461021b57600080fd5b5056fea2646970667358221220432fb50418eda06e8d39a475ac2afdad49bc2a156bba38a4d1449da65e2ef96464736f6c63430008060033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A9BBFCD EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xD3 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x10F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP3 EQ ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0xB9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x1 SWAP2 POP PUSH1 0x0 PUSH1 0x2 SWAP1 POP JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP4 DUP4 PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x12A JUMP JUMPDEST SWAP1 POP DUP4 SWAP3 POP DUP1 SWAP4 POP POP DUP1 DUP1 PUSH2 0xAE SWAP1 PUSH2 0x18A JUMP JUMPDEST SWAP2 POP POP PUSH2 0x84 JUMP JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xCD DUP2 PUSH2 0x207 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xE9 JUMPI PUSH2 0xE8 PUSH2 0x202 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF7 DUP5 DUP3 DUP6 ADD PUSH2 0xBE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x109 DUP2 PUSH2 0x180 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x124 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x100 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x135 DUP3 PUSH2 0x180 JUMP JUMPDEST SWAP2 POP PUSH2 0x140 DUP4 PUSH2 0x180 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x175 JUMPI PUSH2 0x174 PUSH2 0x1D3 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x195 DUP3 PUSH2 0x180 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1C8 JUMPI PUSH2 0x1C7 PUSH2 0x1D3 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x210 DUP2 PUSH2 0x180 JUMP JUMPDEST DUP2 EQ PUSH2 0x21B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0x2F 0xB5 DIV XOR 0xED LOG0 PUSH15 0x8D39A475AC2AFDAD49BC2A156BBA38 LOG4 0xD1 DIFFICULTY SWAP14 0xA6 0x5E 0x2E 0xF9 PUSH5 0x64736F6C63 NUMBER STOP ADDMOD MOD STOP CALLER ", - "sourceMap": "34:301:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;98:6;125:1;120;:6;116:43;;;147:1;140:8;;;;116:43;168:6;177:1;168:10;;192:1;188:5;;208:6;217:1;208:10;;203:100;224:1;220;:5;203:100;;;244:6;257:1;253;:5;;;;:::i;:::-;244:14;;274:1;270:5;;291:1;287:5;;232:71;227:3;;;;;:::i;:::-;;;;203:100;;;;312:8;61:268;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:329::-;211:6;260:2;248:9;239:7;235:23;231:32;228:2;;;266:79;;:::i;:::-;228:2;386:1;411:53;456:7;447:6;436:9;432:22;411:53;:::i;:::-;401:63;;357:117;218:263;;;;:::o;487:118::-;574:24;592:5;574:24;:::i;:::-;569:3;562:37;552:53;;:::o;611:222::-;704:4;742:2;731:9;727:18;719:26;;755:71;823:1;812:9;808:17;799:6;755:71;:::i;:::-;709:124;;;;:::o;920:305::-;960:3;979:20;997:1;979:20;:::i;:::-;974:25;;1013:20;1031:1;1013:20;:::i;:::-;1008:25;;1167:1;1099:66;1095:74;1092:1;1089:81;1086:2;;;1173:18;;:::i;:::-;1086:2;1217:1;1214;1210:9;1203:16;;964:261;;;;:::o;1231:77::-;1268:7;1297:5;1286:16;;1276:32;;;:::o;1314:233::-;1353:3;1376:24;1394:5;1376:24;:::i;:::-;1367:33;;1422:66;1415:5;1412:77;1409:2;;;1492:18;;:::i;:::-;1409:2;1539:1;1532:5;1528:13;1521:20;;1357:190;;;:::o;1553:180::-;1601:77;1598:1;1591:88;1698:4;1695:1;1688:15;1722:4;1719:1;1712:15;1862:117;1971:1;1968;1961:12;1985:122;2058:24;2076:5;2058:24;:::i;:::-;2051:5;2048:35;2038:2;;2097:1;2094;2087:12;2038:2;2028:79;:::o" + "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80633a9bbfcd14610030575b600080fd5b61004a600480360381019061004591906100f9565b610060565b6040516100579190610135565b60405180910390f35b60008082141561007357600090506100b9565b600060019050600191506000600290505b838110156100b6576000838361009a919061017f565b90508392508093505080806100ae906101d5565b915050610084565b50505b919050565b600080fd5b6000819050919050565b6100d6816100c3565b81146100e157600080fd5b50565b6000813590506100f3816100cd565b92915050565b60006020828403121561010f5761010e6100be565b5b600061011d848285016100e4565b91505092915050565b61012f816100c3565b82525050565b600060208201905061014a6000830184610126565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061018a826100c3565b9150610195836100c3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101ca576101c9610150565b5b828201905092915050565b60006101e0826100c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561021357610212610150565b5b60018201905091905056fea26469706673582212201099f7739f4f4fcf0676126a8353bfeb28dc0008ce6bdebeabd6ff77fe2c84e164736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A9BBFCD EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xF9 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x135 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 DUP3 EQ ISZERO PUSH2 0x73 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0xB9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x1 SWAP2 POP PUSH1 0x0 PUSH1 0x2 SWAP1 POP JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB6 JUMPI PUSH1 0x0 DUP4 DUP4 PUSH2 0x9A SWAP2 SWAP1 PUSH2 0x17F JUMP JUMPDEST SWAP1 POP DUP4 SWAP3 POP DUP1 SWAP4 POP POP DUP1 DUP1 PUSH2 0xAE SWAP1 PUSH2 0x1D5 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x84 JUMP JUMPDEST POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD6 DUP2 PUSH2 0xC3 JUMP JUMPDEST DUP2 EQ PUSH2 0xE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xF3 DUP2 PUSH2 0xCD JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x10F JUMPI PUSH2 0x10E PUSH2 0xBE JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x11D DUP5 DUP3 DUP6 ADD PUSH2 0xE4 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x12F DUP2 PUSH2 0xC3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x14A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x126 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x18A DUP3 PUSH2 0xC3 JUMP JUMPDEST SWAP2 POP PUSH2 0x195 DUP4 PUSH2 0xC3 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1CA JUMPI PUSH2 0x1C9 PUSH2 0x150 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E0 DUP3 PUSH2 0xC3 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x213 JUMPI PUSH2 0x212 PUSH2 0x150 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT SWAP10 0xF7 PUSH20 0x9F4F4FCF0676126A8353BFEB28DC0008CE6BDEBE 0xAB 0xD6 SELFDESTRUCT PUSH24 0xFE2C84E164736F6C634300080B0033000000000000000000 ", + "sourceMap": "67:322:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;138:9;168:1;163;:6;159:45;;;192:1;185:8;;;;159:45;213:9;225:1;213:13;;240:1;236:5;;256:9;268:1;256:13;;251:112;275:1;271;:5;251:112;;;297:9;313:1;309;:5;;;;:::i;:::-;297:17;;332:1;328:5;;351:1;347:5;;283:80;278:3;;;;;:::i;:::-;;;;251:112;;;;372:8;92:295;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:180::-;1425:77;1422:1;1415:88;1522:4;1519:1;1512:15;1546:4;1543:1;1536:15;1563:305;1603:3;1622:20;1640:1;1622:20;:::i;:::-;1617:25;;1656:20;1674:1;1656:20;:::i;:::-;1651:25;;1810:1;1742:66;1738:74;1735:1;1732:81;1729:107;;;1816:18;;:::i;:::-;1729:107;1860:1;1857;1853:9;1846:16;;1563:305;;;;:::o;1874:233::-;1913:3;1936:24;1954:5;1936:24;:::i;:::-;1927:33;;1982:66;1975:5;1972:77;1969:103;;;2052:18;;:::i;:::-;1969:103;2099:1;2092:5;2088:13;2081:20;;1874:233;;;:::o" }, "gasEstimates": { "creation": { @@ -1244,1308 +1244,1308 @@ "legacyAssembly": { ".code": [ { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 34, "end": 335, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 335, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 335, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 335, "name": "ISZERO", "source": 0 }, + { "begin": 67, "end": 389, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 389, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 389, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 389, "name": "ISZERO", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 34, "end": 335, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 389, "name": "JUMPI", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 335, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 335, "name": "REVERT", "source": 0 }, - { "begin": 34, "end": 335, "name": "tag", "source": 0, "value": "1" }, - { "begin": 34, "end": 335, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 335, "name": "POP", "source": 0 }, + { "begin": 67, "end": 389, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 389, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 389, "name": "tag", "source": 0, "value": "1" }, + { "begin": 67, "end": 389, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 389, "name": "POP", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 34, "end": 335, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 389, "name": "DUP1", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 335, "name": "CODECOPY", "source": 0 }, + { "begin": 67, "end": 389, "name": "CODECOPY", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 335, "name": "RETURN", "source": 0 } + { "begin": 67, "end": 389, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a2646970667358221220432fb50418eda06e8d39a475ac2afdad49bc2a156bba38a4d1449da65e2ef96464736f6c63430008060033", + ".auxdata": "a26469706673582212201099f7739f4f4fcf0676126a8353bfeb28dc0008ce6bdebeabd6ff77fe2c84e164736f6c634300080b0033", ".code": [ { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 34, "end": 335, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 335, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 335, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 335, "name": "ISZERO", "source": 0 }, + { "begin": 67, "end": 389, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 389, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 389, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 389, "name": "ISZERO", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 34, "end": 335, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 389, "name": "JUMPI", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 335, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 335, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 389, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 389, "name": "REVERT", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "tag", "source": 0, "value": "1" }, - { "begin": 34, "end": 335, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 335, "name": "POP", "source": 0 }, + { "begin": 67, "end": 389, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 389, "name": "POP", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 34, "end": 335, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 335, "name": "LT", "source": 0 }, + { "begin": 67, "end": 389, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 389, "name": "LT", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 34, "end": 335, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 389, "name": "JUMPI", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 335, "name": "CALLDATALOAD", "source": 0 }, + { "begin": 67, "end": 389, "name": "CALLDATALOAD", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 34, "end": 335, "name": "SHR", "source": 0 }, - { "begin": 34, "end": 335, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 389, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 389, "name": "DUP1", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "3A9BBFCD" }, - { "begin": 34, "end": 335, "name": "EQ", "source": 0 }, + { "begin": 67, "end": 389, "name": "EQ", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH [tag]", "source": 0, "value": "3" }, - { "begin": 34, "end": 335, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 389, "name": "JUMPI", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "tag", "source": 0, "value": "2" }, - { "begin": 34, "end": 335, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 389, "name": "JUMPDEST", "source": 0 }, { - "begin": 34, - "end": 335, + "begin": 67, + "end": 389, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 335, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 335, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 389, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 389, "name": "REVERT", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "tag", "source": 0, "value": "3" }, - { "begin": 61, "end": 329, "name": "JUMPDEST", "source": 0 }, + { "begin": 92, "end": 387, "name": "JUMPDEST", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH [tag]", "source": 0, "value": "4" }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 61, "end": 329, "name": "DUP1", "source": 0 }, - { "begin": 61, "end": 329, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 61, "end": 329, "name": "SUB", "source": 0 }, - { "begin": 61, "end": 329, "name": "DUP2", "source": 0 }, - { "begin": 61, "end": 329, "name": "ADD", "source": 0 }, - { "begin": 61, "end": 329, "name": "SWAP1", "source": 0 }, + { "begin": 92, "end": 387, "name": "DUP1", "source": 0 }, + { "begin": 92, "end": 387, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 92, "end": 387, "name": "SUB", "source": 0 }, + { "begin": 92, "end": 387, "name": "DUP2", "source": 0 }, + { "begin": 92, "end": 387, "name": "ADD", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP1", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH [tag]", "source": 0, "value": "5" }, - { "begin": 61, "end": 329, "name": "SWAP2", "source": 0 }, - { "begin": 61, "end": 329, "name": "SWAP1", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP2", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP1", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH [tag]", "source": 0, "value": "6" }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "tag", "source": 0, "value": "5" }, - { "begin": 61, "end": 329, "name": "JUMPDEST", "source": 0 }, + { "begin": 92, "end": 387, "name": "JUMPDEST", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH [tag]", "source": 0, "value": "7" }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "tag", "source": 0, "value": "4" }, - { "begin": 61, "end": 329, "name": "JUMPDEST", "source": 0 }, + { "begin": 92, "end": 387, "name": "JUMPDEST", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 61, "end": 329, "name": "MLOAD", "source": 0 }, + { "begin": 92, "end": 387, "name": "MLOAD", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH [tag]", "source": 0, "value": "8" }, - { "begin": 61, "end": 329, "name": "SWAP2", "source": 0 }, - { "begin": 61, "end": 329, "name": "SWAP1", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP2", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP1", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH [tag]", "source": 0, "value": "9" }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "tag", "source": 0, "value": "8" }, - { "begin": 61, "end": 329, "name": "JUMPDEST", "source": 0 }, + { "begin": 92, "end": 387, "name": "JUMPDEST", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 61, "end": 329, "name": "MLOAD", "source": 0 }, - { "begin": 61, "end": 329, "name": "DUP1", "source": 0 }, - { "begin": 61, "end": 329, "name": "SWAP2", "source": 0 }, - { "begin": 61, "end": 329, "name": "SUB", "source": 0 }, - { "begin": 61, "end": 329, "name": "SWAP1", "source": 0 }, - { "begin": 61, "end": 329, "name": "RETURN", "source": 0 }, + { "begin": 92, "end": 387, "name": "MLOAD", "source": 0 }, + { "begin": 92, "end": 387, "name": "DUP1", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP2", "source": 0 }, + { "begin": 92, "end": 387, "name": "SUB", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP1", "source": 0 }, + { "begin": 92, "end": 387, "name": "RETURN", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "tag", "source": 0, "value": "7" }, - { "begin": 61, "end": 329, "name": "JUMPDEST", "source": 0 }, + { "begin": 92, "end": 387, "name": "JUMPDEST", "source": 0 }, { - "begin": 98, - "end": 104, + "begin": 138, + "end": 147, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 125, "end": 126, "name": "DUP1", "source": 0 }, - { "begin": 120, "end": 121, "name": "DUP3", "source": 0 }, - { "begin": 120, "end": 126, "name": "EQ", "source": 0 }, - { "begin": 116, "end": 159, "name": "ISZERO", "source": 0 }, + { "begin": 168, "end": 169, "name": "DUP1", "source": 0 }, + { "begin": 163, "end": 164, "name": "DUP3", "source": 0 }, + { "begin": 163, "end": 169, "name": "EQ", "source": 0 }, + { "begin": 159, "end": 204, "name": "ISZERO", "source": 0 }, { - "begin": 116, - "end": 159, + "begin": 159, + "end": 204, "name": "PUSH [tag]", "source": 0, "value": "11" }, - { "begin": 116, "end": 159, "name": "JUMPI", "source": 0 }, + { "begin": 159, "end": 204, "name": "JUMPI", "source": 0 }, { - "begin": 147, - "end": 148, + "begin": 192, + "end": 193, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 140, "end": 148, "name": "SWAP1", "source": 0 }, - { "begin": 140, "end": 148, "name": "POP", "source": 0 }, + { "begin": 185, "end": 193, "name": "SWAP1", "source": 0 }, + { "begin": 185, "end": 193, "name": "POP", "source": 0 }, { - "begin": 140, - "end": 148, + "begin": 185, + "end": 193, "name": "PUSH [tag]", "source": 0, "value": "10" }, - { "begin": 140, "end": 148, "name": "JUMP", "source": 0 }, + { "begin": 185, "end": 193, "name": "JUMP", "source": 0 }, { - "begin": 116, - "end": 159, + "begin": 159, + "end": 204, "name": "tag", "source": 0, "value": "11" }, - { "begin": 116, "end": 159, "name": "JUMPDEST", "source": 0 }, + { "begin": 159, "end": 204, "name": "JUMPDEST", "source": 0 }, { - "begin": 168, - "end": 174, + "begin": 213, + "end": 222, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 177, - "end": 178, + "begin": 225, + "end": 226, "name": "PUSH", "source": 0, "value": "1" }, - { "begin": 168, "end": 178, "name": "SWAP1", "source": 0 }, - { "begin": 168, "end": 178, "name": "POP", "source": 0 }, + { "begin": 213, "end": 226, "name": "SWAP1", "source": 0 }, + { "begin": 213, "end": 226, "name": "POP", "source": 0 }, { - "begin": 192, - "end": 193, + "begin": 240, + "end": 241, "name": "PUSH", "source": 0, "value": "1" }, - { "begin": 188, "end": 193, "name": "SWAP2", "source": 0 }, - { "begin": 188, "end": 193, "name": "POP", "source": 0 }, + { "begin": 236, "end": 241, "name": "SWAP2", "source": 0 }, + { "begin": 236, "end": 241, "name": "POP", "source": 0 }, { - "begin": 208, - "end": 214, + "begin": 256, + "end": 265, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 217, - "end": 218, + "begin": 268, + "end": 269, "name": "PUSH", "source": 0, "value": "2" }, - { "begin": 208, "end": 218, "name": "SWAP1", "source": 0 }, - { "begin": 208, "end": 218, "name": "POP", "source": 0 }, + { "begin": 256, "end": 269, "name": "SWAP1", "source": 0 }, + { "begin": 256, "end": 269, "name": "POP", "source": 0 }, { - "begin": 203, - "end": 303, + "begin": 251, + "end": 363, "name": "tag", "source": 0, "value": "12" }, - { "begin": 203, "end": 303, "name": "JUMPDEST", "source": 0 }, - { "begin": 224, "end": 225, "name": "DUP4", "source": 0 }, - { "begin": 220, "end": 221, "name": "DUP2", "source": 0 }, - { "begin": 220, "end": 225, "name": "LT", "source": 0 }, - { "begin": 203, "end": 303, "name": "ISZERO", "source": 0 }, + { "begin": 251, "end": 363, "name": "JUMPDEST", "source": 0 }, + { "begin": 275, "end": 276, "name": "DUP4", "source": 0 }, + { "begin": 271, "end": 272, "name": "DUP2", "source": 0 }, + { "begin": 271, "end": 276, "name": "LT", "source": 0 }, + { "begin": 251, "end": 363, "name": "ISZERO", "source": 0 }, { - "begin": 203, - "end": 303, + "begin": 251, + "end": 363, "name": "PUSH [tag]", "source": 0, "value": "13" }, - { "begin": 203, "end": 303, "name": "JUMPI", "source": 0 }, + { "begin": 251, "end": 363, "name": "JUMPI", "source": 0 }, { - "begin": 244, - "end": 250, + "begin": 297, + "end": 306, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 257, "end": 258, "name": "DUP4", "source": 0 }, - { "begin": 253, "end": 254, "name": "DUP4", "source": 0 }, + { "begin": 313, "end": 314, "name": "DUP4", "source": 0 }, + { "begin": 309, "end": 310, "name": "DUP4", "source": 0 }, { - "begin": 253, - "end": 258, + "begin": 309, + "end": 314, "name": "PUSH [tag]", "source": 0, "value": "15" }, - { "begin": 253, "end": 258, "name": "SWAP2", "source": 0 }, - { "begin": 253, "end": 258, "name": "SWAP1", "source": 0 }, + { "begin": 309, "end": 314, "name": "SWAP2", "source": 0 }, + { "begin": 309, "end": 314, "name": "SWAP1", "source": 0 }, { - "begin": 253, - "end": 258, + "begin": 309, + "end": 314, "name": "PUSH [tag]", "source": 0, "value": "16" }, { - "begin": 253, - "end": 258, + "begin": 309, + "end": 314, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 253, - "end": 258, + "begin": 309, + "end": 314, "name": "tag", "source": 0, "value": "15" }, - { "begin": 253, "end": 258, "name": "JUMPDEST", "source": 0 }, - { "begin": 244, "end": 258, "name": "SWAP1", "source": 0 }, - { "begin": 244, "end": 258, "name": "POP", "source": 0 }, - { "begin": 274, "end": 275, "name": "DUP4", "source": 0 }, - { "begin": 270, "end": 275, "name": "SWAP3", "source": 0 }, - { "begin": 270, "end": 275, "name": "POP", "source": 0 }, - { "begin": 291, "end": 292, "name": "DUP1", "source": 0 }, - { "begin": 287, "end": 292, "name": "SWAP4", "source": 0 }, - { "begin": 287, "end": 292, "name": "POP", "source": 0 }, - { "begin": 232, "end": 303, "name": "POP", "source": 0 }, - { "begin": 227, "end": 230, "name": "DUP1", "source": 0 }, - { "begin": 227, "end": 230, "name": "DUP1", "source": 0 }, - { - "begin": 227, - "end": 230, + { "begin": 309, "end": 314, "name": "JUMPDEST", "source": 0 }, + { "begin": 297, "end": 314, "name": "SWAP1", "source": 0 }, + { "begin": 297, "end": 314, "name": "POP", "source": 0 }, + { "begin": 332, "end": 333, "name": "DUP4", "source": 0 }, + { "begin": 328, "end": 333, "name": "SWAP3", "source": 0 }, + { "begin": 328, "end": 333, "name": "POP", "source": 0 }, + { "begin": 351, "end": 352, "name": "DUP1", "source": 0 }, + { "begin": 347, "end": 352, "name": "SWAP4", "source": 0 }, + { "begin": 347, "end": 352, "name": "POP", "source": 0 }, + { "begin": 283, "end": 363, "name": "POP", "source": 0 }, + { "begin": 278, "end": 281, "name": "DUP1", "source": 0 }, + { "begin": 278, "end": 281, "name": "DUP1", "source": 0 }, + { + "begin": 278, + "end": 281, "name": "PUSH [tag]", "source": 0, "value": "17" }, - { "begin": 227, "end": 230, "name": "SWAP1", "source": 0 }, + { "begin": 278, "end": 281, "name": "SWAP1", "source": 0 }, { - "begin": 227, - "end": 230, + "begin": 278, + "end": 281, "name": "PUSH [tag]", "source": 0, "value": "18" }, { - "begin": 227, - "end": 230, + "begin": 278, + "end": 281, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 227, - "end": 230, + "begin": 278, + "end": 281, "name": "tag", "source": 0, "value": "17" }, - { "begin": 227, "end": 230, "name": "JUMPDEST", "source": 0 }, - { "begin": 227, "end": 230, "name": "SWAP2", "source": 0 }, - { "begin": 227, "end": 230, "name": "POP", "source": 0 }, - { "begin": 227, "end": 230, "name": "POP", "source": 0 }, + { "begin": 278, "end": 281, "name": "JUMPDEST", "source": 0 }, + { "begin": 278, "end": 281, "name": "SWAP2", "source": 0 }, + { "begin": 278, "end": 281, "name": "POP", "source": 0 }, + { "begin": 278, "end": 281, "name": "POP", "source": 0 }, { - "begin": 203, - "end": 303, + "begin": 251, + "end": 363, "name": "PUSH [tag]", "source": 0, "value": "12" }, - { "begin": 203, "end": 303, "name": "JUMP", "source": 0 }, + { "begin": 251, "end": 363, "name": "JUMP", "source": 0 }, { - "begin": 203, - "end": 303, + "begin": 251, + "end": 363, "name": "tag", "source": 0, "value": "13" }, - { "begin": 203, "end": 303, "name": "JUMPDEST", "source": 0 }, - { "begin": 203, "end": 303, "name": "POP", "source": 0 }, - { "begin": 312, "end": 320, "name": "POP", "source": 0 }, + { "begin": 251, "end": 363, "name": "JUMPDEST", "source": 0 }, + { "begin": 251, "end": 363, "name": "POP", "source": 0 }, + { "begin": 372, "end": 380, "name": "POP", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "tag", "source": 0, "value": "10" }, - { "begin": 61, "end": 329, "name": "JUMPDEST", "source": 0 }, - { "begin": 61, "end": 329, "name": "SWAP2", "source": 0 }, - { "begin": 61, "end": 329, "name": "SWAP1", "source": 0 }, - { "begin": 61, "end": 329, "name": "POP", "source": 0 }, + { "begin": 92, "end": 387, "name": "JUMPDEST", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP2", "source": 0 }, + { "begin": 92, "end": 387, "name": "SWAP1", "source": 0 }, + { "begin": 92, "end": 387, "name": "POP", "source": 0 }, { - "begin": 61, - "end": 329, + "begin": 92, + "end": 387, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 7, - "end": 146, + "begin": 88, + "end": 205, "name": "tag", "source": 1, "value": "20" }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, { - "begin": 53, - "end": 58, + "begin": 197, + "end": 198, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", + "begin": 334, + "end": 411, + "name": "tag", "source": 1, "value": "22" }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { "begin": 334, "end": 411, "name": "JUMPDEST", "source": 1 }, { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", + "begin": 371, + "end": 378, + "name": "PUSH", "source": 1, - "value": "23" + "value": "0" }, + { "begin": 400, "end": 405, "name": "DUP2", "source": 1 }, + { "begin": 389, "end": 405, "name": "SWAP1", "source": 1 }, + { "begin": 389, "end": 405, "name": "POP", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP1", "source": 1 }, + { "begin": 334, "end": 411, "name": "POP", "source": 1 }, { - "begin": 107, - "end": 140, + "begin": 334, + "end": 411, "name": "JUMP", "source": 1, - "value": "[in]" + "value": "[out]" }, { - "begin": 107, - "end": 140, + "begin": 417, + "end": 539, "name": "tag", "source": 1, + "value": "23" + }, + { "begin": 417, "end": 539, "name": "JUMPDEST", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, + "value": "33" + }, + { "begin": 508, "end": 513, "name": "DUP2", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, "value": "22" }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, { - "begin": 59, - "end": 146, + "begin": 490, + "end": 514, "name": "JUMP", "source": 1, - "value": "[out]" + "value": "[in]" }, { - "begin": 152, - "end": 481, + "begin": 490, + "end": 514, "name": "tag", "source": 1, - "value": "6" + "value": "33" + }, + { "begin": 490, "end": 514, "name": "JUMPDEST", "source": 1 }, + { "begin": 483, "end": 488, "name": "DUP2", "source": 1 }, + { "begin": 480, "end": 515, "name": "EQ", "source": 1 }, + { + "begin": 470, + "end": 533, + "name": "PUSH [tag]", + "source": 1, + "value": "34" }, - { "begin": 152, "end": 481, "name": "JUMPDEST", "source": 1 }, + { "begin": 470, "end": 533, "name": "JUMPI", "source": 1 }, { - "begin": 211, - "end": 217, + "begin": 529, + "end": 530, "name": "PUSH", "source": 1, "value": "0" }, + { "begin": 526, "end": 527, "name": "DUP1", "source": 1 }, + { "begin": 519, "end": 531, "name": "REVERT", "source": 1 }, { - "begin": 260, - "end": 262, - "name": "PUSH", + "begin": 470, + "end": 533, + "name": "tag", "source": 1, - "value": "20" + "value": "34" }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, + { "begin": 470, "end": 533, "name": "JUMPDEST", "source": 1 }, + { "begin": 417, "end": 539, "name": "POP", "source": 1 }, { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", + "begin": 417, + "end": 539, + "name": "JUMP", "source": 1, - "value": "25" + "value": "[out]" + }, + { + "begin": 545, + "end": 684, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 545, "end": 684, "name": "JUMPDEST", "source": 1 }, + { + "begin": 591, + "end": 596, + "name": "PUSH", + "source": 1, + "value": "0" }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, + { "begin": 629, "end": 635, "name": "DUP2", "source": 1 }, + { "begin": 616, "end": 636, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 607, "end": 636, "name": "SWAP1", "source": 1 }, + { "begin": 607, "end": 636, "name": "POP", "source": 1 }, { - "begin": 266, - "end": 345, + "begin": 645, + "end": 678, "name": "PUSH [tag]", "source": 1, - "value": "26" + "value": "36" }, + { "begin": 672, "end": 677, "name": "DUP2", "source": 1 }, { - "begin": 266, - "end": 345, + "begin": 645, + "end": 678, "name": "PUSH [tag]", "source": 1, - "value": "27" + "value": "23" }, { - "begin": 266, - "end": 345, + "begin": 645, + "end": 678, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 266, - "end": 345, + "begin": 645, + "end": 678, "name": "tag", "source": 1, - "value": "26" + "value": "36" + }, + { "begin": 645, "end": 678, "name": "JUMPDEST", "source": 1 }, + { "begin": 545, "end": 684, "name": "SWAP3", "source": 1 }, + { "begin": 545, "end": 684, "name": "SWAP2", "source": 1 }, + { "begin": 545, "end": 684, "name": "POP", "source": 1 }, + { "begin": 545, "end": 684, "name": "POP", "source": 1 }, + { + "begin": 545, + "end": 684, + "name": "JUMP", + "source": 1, + "value": "[out]" }, - { "begin": 266, "end": 345, "name": "JUMPDEST", "source": 1 }, { - "begin": 228, - "end": 230, + "begin": 690, + "end": 1019, "name": "tag", "source": 1, - "value": "25" + "value": "6" }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, + { "begin": 690, "end": 1019, "name": "JUMPDEST", "source": 1 }, { - "begin": 386, - "end": 387, + "begin": 749, + "end": 755, "name": "PUSH", "source": 1, "value": "0" }, { - "begin": 411, - "end": 464, + "begin": 798, + "end": 800, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 786, "end": 795, "name": "DUP3", "source": 1 }, + { "begin": 777, "end": 784, "name": "DUP5", "source": 1 }, + { "begin": 773, "end": 796, "name": "SUB", "source": 1 }, + { "begin": 769, "end": 801, "name": "SLT", "source": 1 }, + { "begin": 766, "end": 885, "name": "ISZERO", "source": 1 }, + { + "begin": 766, + "end": 885, "name": "PUSH [tag]", "source": 1, - "value": "28" + "value": "38" + }, + { "begin": 766, "end": 885, "name": "JUMPI", "source": 1 }, + { + "begin": 804, + "end": 883, + "name": "PUSH [tag]", + "source": 1, + "value": "39" }, - { "begin": 456, "end": 463, "name": "DUP5", "source": 1 }, - { "begin": 447, "end": 453, "name": "DUP3", "source": 1 }, - { "begin": 436, "end": 445, "name": "DUP6", "source": 1 }, - { "begin": 432, "end": 454, "name": "ADD", "source": 1 }, { - "begin": 411, - "end": 464, + "begin": 804, + "end": 883, "name": "PUSH [tag]", "source": 1, "value": "20" }, { - "begin": 411, - "end": 464, + "begin": 804, + "end": 883, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 411, - "end": 464, + "begin": 804, + "end": 883, "name": "tag", "source": 1, - "value": "28" + "value": "39" }, - { "begin": 411, "end": 464, "name": "JUMPDEST", "source": 1 }, - { "begin": 401, "end": 464, "name": "SWAP2", "source": 1 }, - { "begin": 401, "end": 464, "name": "POP", "source": 1 }, - { "begin": 357, "end": 474, "name": "POP", "source": 1 }, - { "begin": 218, "end": 481, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 481, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 481, "name": "POP", "source": 1 }, - { "begin": 218, "end": 481, "name": "POP", "source": 1 }, + { "begin": 804, "end": 883, "name": "JUMPDEST", "source": 1 }, { - "begin": 218, - "end": 481, - "name": "JUMP", + "begin": 766, + "end": 885, + "name": "tag", "source": 1, - "value": "[out]" + "value": "38" }, + { "begin": 766, "end": 885, "name": "JUMPDEST", "source": 1 }, { - "begin": 487, - "end": 605, - "name": "tag", + "begin": 924, + "end": 925, + "name": "PUSH", "source": 1, - "value": "29" + "value": "0" }, - { "begin": 487, "end": 605, "name": "JUMPDEST", "source": 1 }, { - "begin": 574, - "end": 598, + "begin": 949, + "end": 1002, "name": "PUSH [tag]", "source": 1, - "value": "31" + "value": "40" }, - { "begin": 592, "end": 597, "name": "DUP2", "source": 1 }, + { "begin": 994, "end": 1001, "name": "DUP5", "source": 1 }, + { "begin": 985, "end": 991, "name": "DUP3", "source": 1 }, + { "begin": 974, "end": 983, "name": "DUP6", "source": 1 }, + { "begin": 970, "end": 992, "name": "ADD", "source": 1 }, { - "begin": 574, - "end": 598, + "begin": 949, + "end": 1002, "name": "PUSH [tag]", "source": 1, - "value": "32" + "value": "24" }, { - "begin": 574, - "end": 598, + "begin": 949, + "end": 1002, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 574, - "end": 598, + "begin": 949, + "end": 1002, "name": "tag", "source": 1, - "value": "31" + "value": "40" }, - { "begin": 574, "end": 598, "name": "JUMPDEST", "source": 1 }, - { "begin": 569, "end": 572, "name": "DUP3", "source": 1 }, - { "begin": 562, "end": 599, "name": "MSTORE", "source": 1 }, - { "begin": 552, "end": 605, "name": "POP", "source": 1 }, - { "begin": 552, "end": 605, "name": "POP", "source": 1 }, - { - "begin": 552, - "end": 605, + { "begin": 949, "end": 1002, "name": "JUMPDEST", "source": 1 }, + { "begin": 939, "end": 1002, "name": "SWAP2", "source": 1 }, + { "begin": 939, "end": 1002, "name": "POP", "source": 1 }, + { "begin": 895, "end": 1012, "name": "POP", "source": 1 }, + { "begin": 690, "end": 1019, "name": "SWAP3", "source": 1 }, + { "begin": 690, "end": 1019, "name": "SWAP2", "source": 1 }, + { "begin": 690, "end": 1019, "name": "POP", "source": 1 }, + { "begin": 690, "end": 1019, "name": "POP", "source": 1 }, + { + "begin": 690, + "end": 1019, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 611, - "end": 833, + "begin": 1025, + "end": 1143, "name": "tag", "source": 1, - "value": "9" - }, - { "begin": 611, "end": 833, "name": "JUMPDEST", "source": 1 }, - { - "begin": 704, - "end": 708, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 742, - "end": 744, - "name": "PUSH", - "source": 1, - "value": "20" + "value": "25" }, - { "begin": 731, "end": 740, "name": "DUP3", "source": 1 }, - { "begin": 727, "end": 745, "name": "ADD", "source": 1 }, - { "begin": 719, "end": 745, "name": "SWAP1", "source": 1 }, - { "begin": 719, "end": 745, "name": "POP", "source": 1 }, + { "begin": 1025, "end": 1143, "name": "JUMPDEST", "source": 1 }, { - "begin": 755, - "end": 826, + "begin": 1112, + "end": 1136, "name": "PUSH [tag]", "source": 1, - "value": "34" - }, - { - "begin": 823, - "end": 824, - "name": "PUSH", - "source": 1, - "value": "0" + "value": "42" }, - { "begin": 812, "end": 821, "name": "DUP4", "source": 1 }, - { "begin": 808, "end": 825, "name": "ADD", "source": 1 }, - { "begin": 799, "end": 805, "name": "DUP5", "source": 1 }, + { "begin": 1130, "end": 1135, "name": "DUP2", "source": 1 }, { - "begin": 755, - "end": 826, + "begin": 1112, + "end": 1136, "name": "PUSH [tag]", "source": 1, - "value": "29" + "value": "22" }, { - "begin": 755, - "end": 826, + "begin": 1112, + "end": 1136, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 755, - "end": 826, + "begin": 1112, + "end": 1136, "name": "tag", "source": 1, - "value": "34" + "value": "42" }, - { "begin": 755, "end": 826, "name": "JUMPDEST", "source": 1 }, - { "begin": 709, "end": 833, "name": "SWAP3", "source": 1 }, - { "begin": 709, "end": 833, "name": "SWAP2", "source": 1 }, - { "begin": 709, "end": 833, "name": "POP", "source": 1 }, - { "begin": 709, "end": 833, "name": "POP", "source": 1 }, + { "begin": 1112, "end": 1136, "name": "JUMPDEST", "source": 1 }, + { "begin": 1107, "end": 1110, "name": "DUP3", "source": 1 }, + { "begin": 1100, "end": 1137, "name": "MSTORE", "source": 1 }, + { "begin": 1025, "end": 1143, "name": "POP", "source": 1 }, + { "begin": 1025, "end": 1143, "name": "POP", "source": 1 }, { - "begin": 709, - "end": 833, + "begin": 1025, + "end": 1143, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 920, - "end": 1225, + "begin": 1149, + "end": 1371, "name": "tag", "source": 1, - "value": "16" + "value": "9" }, - { "begin": 920, "end": 1225, "name": "JUMPDEST", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "JUMPDEST", "source": 1 }, { - "begin": 960, - "end": 963, + "begin": 1242, + "end": 1246, "name": "PUSH", "source": 1, "value": "0" }, { - "begin": 979, - "end": 999, - "name": "PUSH [tag]", + "begin": 1280, + "end": 1282, + "name": "PUSH", "source": 1, - "value": "38" + "value": "20" }, - { "begin": 997, "end": 998, "name": "DUP3", "source": 1 }, + { "begin": 1269, "end": 1278, "name": "DUP3", "source": 1 }, + { "begin": 1265, "end": 1283, "name": "ADD", "source": 1 }, + { "begin": 1257, "end": 1283, "name": "SWAP1", "source": 1 }, + { "begin": 1257, "end": 1283, "name": "POP", "source": 1 }, { - "begin": 979, - "end": 999, + "begin": 1293, + "end": 1364, "name": "PUSH [tag]", "source": 1, - "value": "32" + "value": "44" }, { - "begin": 979, - "end": 999, - "name": "JUMP", + "begin": 1361, + "end": 1362, + "name": "PUSH", "source": 1, - "value": "[in]" + "value": "0" }, + { "begin": 1350, "end": 1359, "name": "DUP4", "source": 1 }, + { "begin": 1346, "end": 1363, "name": "ADD", "source": 1 }, + { "begin": 1337, "end": 1343, "name": "DUP5", "source": 1 }, { - "begin": 979, - "end": 999, - "name": "tag", + "begin": 1293, + "end": 1364, + "name": "PUSH [tag]", "source": 1, - "value": "38" + "value": "25" }, - { "begin": 979, "end": 999, "name": "JUMPDEST", "source": 1 }, - { "begin": 974, "end": 999, "name": "SWAP2", "source": 1 }, - { "begin": 974, "end": 999, "name": "POP", "source": 1 }, { - "begin": 1013, - "end": 1033, - "name": "PUSH [tag]", + "begin": 1293, + "end": 1364, + "name": "JUMP", "source": 1, - "value": "39" + "value": "[in]" }, - { "begin": 1031, "end": 1032, "name": "DUP4", "source": 1 }, { - "begin": 1013, - "end": 1033, - "name": "PUSH [tag]", + "begin": 1293, + "end": 1364, + "name": "tag", "source": 1, - "value": "32" + "value": "44" }, + { "begin": 1293, "end": 1364, "name": "JUMPDEST", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "SWAP3", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "SWAP2", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "POP", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "POP", "source": 1 }, { - "begin": 1013, - "end": 1033, + "begin": 1149, + "end": 1371, "name": "JUMP", "source": 1, - "value": "[in]" + "value": "[out]" }, { - "begin": 1013, - "end": 1033, + "begin": 1377, + "end": 1557, "name": "tag", "source": 1, - "value": "39" + "value": "26" }, - { "begin": 1013, "end": 1033, "name": "JUMPDEST", "source": 1 }, - { "begin": 1008, "end": 1033, "name": "SWAP3", "source": 1 }, - { "begin": 1008, "end": 1033, "name": "POP", "source": 1 }, - { "begin": 1167, "end": 1168, "name": "DUP3", "source": 1 }, + { "begin": 1377, "end": 1557, "name": "JUMPDEST", "source": 1 }, { - "begin": 1099, - "end": 1165, + "begin": 1425, + "end": 1502, "name": "PUSH", "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" }, - { "begin": 1095, "end": 1169, "name": "SUB", "source": 1 }, - { "begin": 1092, "end": 1093, "name": "DUP3", "source": 1 }, - { "begin": 1089, "end": 1170, "name": "GT", "source": 1 }, - { "begin": 1086, "end": 1088, "name": "ISZERO", "source": 1 }, { - "begin": 1086, - "end": 1088, - "name": "PUSH [tag]", + "begin": 1422, + "end": 1423, + "name": "PUSH", "source": 1, - "value": "40" + "value": "0" }, - { "begin": 1086, "end": 1088, "name": "JUMPI", "source": 1 }, + { "begin": 1415, "end": 1503, "name": "MSTORE", "source": 1 }, { - "begin": 1173, - "end": 1191, - "name": "PUSH [tag]", + "begin": 1522, + "end": 1526, + "name": "PUSH", "source": 1, - "value": "41" + "value": "11" }, { - "begin": 1173, - "end": 1191, - "name": "PUSH [tag]", + "begin": 1519, + "end": 1520, + "name": "PUSH", "source": 1, - "value": "42" + "value": "4" }, + { "begin": 1512, "end": 1527, "name": "MSTORE", "source": 1 }, { - "begin": 1173, - "end": 1191, - "name": "JUMP", + "begin": 1546, + "end": 1550, + "name": "PUSH", "source": 1, - "value": "[in]" + "value": "24" }, { - "begin": 1173, - "end": 1191, - "name": "tag", + "begin": 1543, + "end": 1544, + "name": "PUSH", "source": 1, - "value": "41" + "value": "0" }, - { "begin": 1173, "end": 1191, "name": "JUMPDEST", "source": 1 }, + { "begin": 1536, "end": 1551, "name": "REVERT", "source": 1 }, { - "begin": 1086, - "end": 1088, + "begin": 1563, + "end": 1868, "name": "tag", "source": 1, - "value": "40" + "value": "16" }, - { "begin": 1086, "end": 1088, "name": "JUMPDEST", "source": 1 }, - { "begin": 1217, "end": 1218, "name": "DUP3", "source": 1 }, - { "begin": 1214, "end": 1215, "name": "DUP3", "source": 1 }, - { "begin": 1210, "end": 1219, "name": "ADD", "source": 1 }, - { "begin": 1203, "end": 1219, "name": "SWAP1", "source": 1 }, - { "begin": 1203, "end": 1219, "name": "POP", "source": 1 }, - { "begin": 964, "end": 1225, "name": "SWAP3", "source": 1 }, - { "begin": 964, "end": 1225, "name": "SWAP2", "source": 1 }, - { "begin": 964, "end": 1225, "name": "POP", "source": 1 }, - { "begin": 964, "end": 1225, "name": "POP", "source": 1 }, - { - "begin": 964, - "end": 1225, - "name": "JUMP", + { "begin": 1563, "end": 1868, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1603, + "end": 1606, + "name": "PUSH", "source": 1, - "value": "[out]" + "value": "0" }, { - "begin": 1231, - "end": 1308, - "name": "tag", + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", "source": 1, - "value": "32" + "value": "47" }, - { "begin": 1231, "end": 1308, "name": "JUMPDEST", "source": 1 }, + { "begin": 1640, "end": 1641, "name": "DUP3", "source": 1 }, { - "begin": 1268, - "end": 1275, - "name": "PUSH", + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", "source": 1, - "value": "0" + "value": "22" }, - { "begin": 1297, "end": 1302, "name": "DUP2", "source": 1 }, - { "begin": 1286, "end": 1302, "name": "SWAP1", "source": 1 }, - { "begin": 1286, "end": 1302, "name": "POP", "source": 1 }, - { "begin": 1276, "end": 1308, "name": "SWAP2", "source": 1 }, - { "begin": 1276, "end": 1308, "name": "SWAP1", "source": 1 }, - { "begin": 1276, "end": 1308, "name": "POP", "source": 1 }, { - "begin": 1276, - "end": 1308, + "begin": 1622, + "end": 1642, "name": "JUMP", "source": 1, - "value": "[out]" + "value": "[in]" }, { - "begin": 1314, - "end": 1547, + "begin": 1622, + "end": 1642, "name": "tag", "source": 1, - "value": "18" - }, - { "begin": 1314, "end": 1547, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1353, - "end": 1356, - "name": "PUSH", - "source": 1, - "value": "0" + "value": "47" }, + { "begin": 1622, "end": 1642, "name": "JUMPDEST", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "SWAP2", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "POP", "source": 1 }, { - "begin": 1376, - "end": 1400, + "begin": 1656, + "end": 1676, "name": "PUSH [tag]", "source": 1, - "value": "45" + "value": "48" }, - { "begin": 1394, "end": 1399, "name": "DUP3", "source": 1 }, + { "begin": 1674, "end": 1675, "name": "DUP4", "source": 1 }, { - "begin": 1376, - "end": 1400, + "begin": 1656, + "end": 1676, "name": "PUSH [tag]", "source": 1, - "value": "32" + "value": "22" }, { - "begin": 1376, - "end": 1400, + "begin": 1656, + "end": 1676, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 1376, - "end": 1400, + "begin": 1656, + "end": 1676, "name": "tag", "source": 1, - "value": "45" + "value": "48" }, - { "begin": 1376, "end": 1400, "name": "JUMPDEST", "source": 1 }, - { "begin": 1367, "end": 1400, "name": "SWAP2", "source": 1 }, - { "begin": 1367, "end": 1400, "name": "POP", "source": 1 }, + { "begin": 1656, "end": 1676, "name": "JUMPDEST", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "SWAP3", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "POP", "source": 1 }, + { "begin": 1810, "end": 1811, "name": "DUP3", "source": 1 }, { - "begin": 1422, - "end": 1488, + "begin": 1742, + "end": 1808, "name": "PUSH", "source": 1, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 1415, "end": 1420, "name": "DUP3", "source": 1 }, - { "begin": 1412, "end": 1489, "name": "EQ", "source": 1 }, - { "begin": 1409, "end": 1411, "name": "ISZERO", "source": 1 }, + { "begin": 1738, "end": 1812, "name": "SUB", "source": 1 }, + { "begin": 1735, "end": 1736, "name": "DUP3", "source": 1 }, + { "begin": 1732, "end": 1813, "name": "GT", "source": 1 }, + { "begin": 1729, "end": 1836, "name": "ISZERO", "source": 1 }, { - "begin": 1409, - "end": 1411, + "begin": 1729, + "end": 1836, "name": "PUSH [tag]", "source": 1, - "value": "46" + "value": "49" }, - { "begin": 1409, "end": 1411, "name": "JUMPI", "source": 1 }, + { "begin": 1729, "end": 1836, "name": "JUMPI", "source": 1 }, { - "begin": 1492, - "end": 1510, + "begin": 1816, + "end": 1834, "name": "PUSH [tag]", "source": 1, - "value": "47" + "value": "50" }, { - "begin": 1492, - "end": 1510, + "begin": 1816, + "end": 1834, "name": "PUSH [tag]", "source": 1, - "value": "42" + "value": "26" }, { - "begin": 1492, - "end": 1510, + "begin": 1816, + "end": 1834, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 1492, - "end": 1510, + "begin": 1816, + "end": 1834, "name": "tag", "source": 1, - "value": "47" + "value": "50" }, - { "begin": 1492, "end": 1510, "name": "JUMPDEST", "source": 1 }, + { "begin": 1816, "end": 1834, "name": "JUMPDEST", "source": 1 }, { - "begin": 1409, - "end": 1411, + "begin": 1729, + "end": 1836, "name": "tag", "source": 1, - "value": "46" - }, - { "begin": 1409, "end": 1411, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1539, - "end": 1540, - "name": "PUSH", - "source": 1, - "value": "1" - }, - { "begin": 1532, "end": 1537, "name": "DUP3", "source": 1 }, - { "begin": 1528, "end": 1541, "name": "ADD", "source": 1 }, - { "begin": 1521, "end": 1541, "name": "SWAP1", "source": 1 }, - { "begin": 1521, "end": 1541, "name": "POP", "source": 1 }, - { "begin": 1357, "end": 1547, "name": "SWAP2", "source": 1 }, - { "begin": 1357, "end": 1547, "name": "SWAP1", "source": 1 }, - { "begin": 1357, "end": 1547, "name": "POP", "source": 1 }, - { - "begin": 1357, - "end": 1547, + "value": "49" + }, + { "begin": 1729, "end": 1836, "name": "JUMPDEST", "source": 1 }, + { "begin": 1860, "end": 1861, "name": "DUP3", "source": 1 }, + { "begin": 1857, "end": 1858, "name": "DUP3", "source": 1 }, + { "begin": 1853, "end": 1862, "name": "ADD", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "SWAP1", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP3", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP2", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { + "begin": 1563, + "end": 1868, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 1553, - "end": 1733, + "begin": 1874, + "end": 2107, "name": "tag", "source": 1, - "value": "42" - }, - { "begin": 1553, "end": 1733, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1601, - "end": 1678, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + "value": "18" }, + { "begin": 1874, "end": 2107, "name": "JUMPDEST", "source": 1 }, { - "begin": 1598, - "end": 1599, + "begin": 1913, + "end": 1916, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 1591, "end": 1679, "name": "MSTORE", "source": 1 }, - { - "begin": 1698, - "end": 1702, - "name": "PUSH", - "source": 1, - "value": "11" - }, { - "begin": 1695, - "end": 1696, - "name": "PUSH", + "begin": 1936, + "end": 1960, + "name": "PUSH [tag]", "source": 1, - "value": "4" + "value": "52" }, - { "begin": 1688, "end": 1703, "name": "MSTORE", "source": 1 }, + { "begin": 1954, "end": 1959, "name": "DUP3", "source": 1 }, { - "begin": 1722, - "end": 1726, - "name": "PUSH", + "begin": 1936, + "end": 1960, + "name": "PUSH [tag]", "source": 1, - "value": "24" + "value": "22" }, { - "begin": 1719, - "end": 1720, - "name": "PUSH", + "begin": 1936, + "end": 1960, + "name": "JUMP", "source": 1, - "value": "0" + "value": "[in]" }, - { "begin": 1712, "end": 1727, "name": "REVERT", "source": 1 }, { - "begin": 1862, - "end": 1979, + "begin": 1936, + "end": 1960, "name": "tag", "source": 1, - "value": "27" + "value": "52" }, - { "begin": 1862, "end": 1979, "name": "JUMPDEST", "source": 1 }, + { "begin": 1936, "end": 1960, "name": "JUMPDEST", "source": 1 }, + { "begin": 1927, "end": 1960, "name": "SWAP2", "source": 1 }, + { "begin": 1927, "end": 1960, "name": "POP", "source": 1 }, { - "begin": 1971, - "end": 1972, + "begin": 1982, + "end": 2048, "name": "PUSH", "source": 1, - "value": "0" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 1968, "end": 1969, "name": "DUP1", "source": 1 }, - { "begin": 1961, "end": 1973, "name": "REVERT", "source": 1 }, + { "begin": 1975, "end": 1980, "name": "DUP3", "source": 1 }, + { "begin": 1972, "end": 2049, "name": "EQ", "source": 1 }, + { "begin": 1969, "end": 2072, "name": "ISZERO", "source": 1 }, { - "begin": 1985, - "end": 2107, - "name": "tag", + "begin": 1969, + "end": 2072, + "name": "PUSH [tag]", "source": 1, - "value": "23" + "value": "53" }, - { "begin": 1985, "end": 2107, "name": "JUMPDEST", "source": 1 }, + { "begin": 1969, "end": 2072, "name": "JUMPI", "source": 1 }, { - "begin": 2058, - "end": 2082, + "begin": 2052, + "end": 2070, "name": "PUSH [tag]", "source": 1, - "value": "53" + "value": "54" }, - { "begin": 2076, "end": 2081, "name": "DUP2", "source": 1 }, { - "begin": 2058, - "end": 2082, + "begin": 2052, + "end": 2070, "name": "PUSH [tag]", "source": 1, - "value": "32" + "value": "26" }, { - "begin": 2058, - "end": 2082, + "begin": 2052, + "end": 2070, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 2058, - "end": 2082, + "begin": 2052, + "end": 2070, "name": "tag", "source": 1, - "value": "53" - }, - { "begin": 2058, "end": 2082, "name": "JUMPDEST", "source": 1 }, - { "begin": 2051, "end": 2056, "name": "DUP2", "source": 1 }, - { "begin": 2048, "end": 2083, "name": "EQ", "source": 1 }, - { - "begin": 2038, - "end": 2040, - "name": "PUSH [tag]", - "source": 1, "value": "54" }, - { "begin": 2038, "end": 2040, "name": "JUMPI", "source": 1 }, + { "begin": 2052, "end": 2070, "name": "JUMPDEST", "source": 1 }, { - "begin": 2097, - "end": 2098, - "name": "PUSH", + "begin": 1969, + "end": 2072, + "name": "tag", "source": 1, - "value": "0" + "value": "53" }, - { "begin": 2094, "end": 2095, "name": "DUP1", "source": 1 }, - { "begin": 2087, "end": 2099, "name": "REVERT", "source": 1 }, + { "begin": 1969, "end": 2072, "name": "JUMPDEST", "source": 1 }, { - "begin": 2038, - "end": 2040, - "name": "tag", + "begin": 2099, + "end": 2100, + "name": "PUSH", "source": 1, - "value": "54" + "value": "1" }, - { "begin": 2038, "end": 2040, "name": "JUMPDEST", "source": 1 }, - { "begin": 2028, "end": 2107, "name": "POP", "source": 1 }, + { "begin": 2092, "end": 2097, "name": "DUP3", "source": 1 }, + { "begin": 2088, "end": 2101, "name": "ADD", "source": 1 }, + { "begin": 2081, "end": 2101, "name": "SWAP1", "source": 1 }, + { "begin": 2081, "end": 2101, "name": "POP", "source": 1 }, + { "begin": 1874, "end": 2107, "name": "SWAP2", "source": 1 }, + { "begin": 1874, "end": 2107, "name": "SWAP1", "source": 1 }, + { "begin": 1874, "end": 2107, "name": "POP", "source": 1 }, { - "begin": 2028, + "begin": 1874, "end": 2107, "name": "JUMP", "source": 1, @@ -2558,9 +2558,9 @@ "methodIdentifiers": { "fib2(uint256)": "3a9bbfcd" } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"fib2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Fibonacci\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x437abea192eb3f059d0ca18232bafbd09b04970ff8df72d6589a1f84cf631392\",\"urls\":[\"bzz-raw://18b63f845f1513aa9015d63f91989bc4ac13c1f7d67e11bcca6962b46ef95822\",\"dweb:/ipfs/QmYvFrocpPtAi8Wy37mzWi1z7cGksG2dJfcqELoUVMWMTG\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"fib2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"b\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Fibonacci\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xaa0382ecc1b2744814277dc6f4bb2fe3fcddc340590928e8cda3f00ba0404dc7\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://6465f1ba1678209845218f9f39f0d61f30f5229614eea8a3e1d05a0cc415d0f8\",\"dweb:/ipfs/QmUzsVYiTBv2Sd7WpKryzuh7diaEq6XWjU9VUEyRZH7DdE\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null }, "userdoc": { "kind": "user", "methods": {}, "version": 1 } }, - "sourceCode": "\n pragma solidity>= 0.8.0;\n contract Fibonacci {\n function fib2(uint n) public returns(uint b) {\n if (n == 0) {\n return 0;\n }\n uint a = 1;\n b = 1;\n for (uint i = 2; i < n; i++) {\n uint c = a + b;\n a = b;\n b = c;\n }\n return b;\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract Fibonacci {\n function fib2(uint256 n) public pure returns (uint256 b) {\n if (n == 0) {\n return 0;\n }\n uint256 a = 1;\n b = 1;\n for (uint256 i = 2; i < n; i++) {\n uint256 c = a + b;\n a = b;\n b = c;\n }\n return b;\n }\n}\n" } diff --git a/tests/contracts/compiled/FiniteLoopContract.json b/tests/contracts/compiled/FiniteLoopContract.json deleted file mode 100644 index 723b6f0796..0000000000 --- a/tests/contracts/compiled/FiniteLoopContract.json +++ /dev/null @@ -1,2128 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b50600080819055506101f7806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "n", "type": "uint256" } - ], - "name": "incr", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":109:164 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":152:153 0 */\n 0x00\n /* \"main.sol\":144:149 count */\n dup1\n /* \"main.sol\":144:153 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:339 contract FiniteLoopContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x21b13c48\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":77:94 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":77:94 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":178:333 function incr(uint n) public {... */\n tag_12:\n /* \"main.sol\":221:227 uint i */\n 0x00\n /* \"main.sol\":243:323 while (i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b57806321b13c4814610059575b600080fd5b610043610075565b6040516100509190610100565b60405180910390f35b610073600480360381019061006e91906100c8565b61007b565b005b60005481565b60005b818110156100af576001600054610095919061011b565b6000819055506001816100a8919061011b565b905061007e565b5050565b6000813590506100c2816101aa565b92915050565b6000602082840312156100da57600080fd5b60006100e8848285016100b3565b91505092915050565b6100fa81610171565b82525050565b600060208201905061011560008301846100f1565b92915050565b600061012682610171565b915061013183610171565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101665761016561017b565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6101b381610171565b81146101be57600080fd5b5056fea2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x75 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x100 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0xC8 JUMP JUMPDEST PUSH2 0x7B JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAF JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xA8 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST SWAP1 POP PUSH2 0x7E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2 DUP2 PUSH2 0x1AA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE8 DUP5 DUP3 DUP6 ADD PUSH2 0xB3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFA DUP2 PUSH2 0x171 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x115 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x126 DUP3 PUSH2 0x171 JUMP JUMPDEST SWAP2 POP PUSH2 0x131 DUP4 PUSH2 0x171 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x166 JUMPI PUSH2 0x165 PUSH2 0x17B JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1B3 DUP2 PUSH2 0x171 JUMP JUMPDEST DUP2 EQ PUSH2 0x1BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE ADD 0xB1 SWAP1 0xF7 0xCC 0x22 PUSH25 0x10064E794C9F0944D297E9623609A22EC42A53F82B63521B64 PUSH20 0x6F6C634300080300330000000000000000000000 ", - "sourceMap": "39:300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;77:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;178:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;77:17;;;;:::o;178:155::-;221:6;243:80;252:1;250;:3;243:80;;;285:1;279:5;;:7;;;;:::i;:::-;273:5;:13;;;;307:1;304:4;;;;;:::i;:::-;;;243:80;;;178:155;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "100600", - "executionCost": "5161", - "totalCost": "105761" - }, - "external": { "count()": "1107", "incr(uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, - { "begin": 109, "end": 164, "name": "CALLVALUE", "source": 0 }, - { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, - { "begin": 109, "end": 164, "name": "ISZERO", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 109, "end": 164, "name": "JUMPI", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 109, "end": 164, "name": "DUP1", "source": 0 }, - { "begin": 109, "end": 164, "name": "REVERT", "source": 0 }, - { - "begin": 109, - "end": 164, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 109, "end": 164, "name": "JUMPDEST", "source": 0 }, - { "begin": 109, "end": 164, "name": "POP", "source": 0 }, - { - "begin": 152, - "end": 153, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 144, "end": 149, "name": "DUP1", "source": 0 }, - { "begin": 144, "end": 153, "name": "DUP2", "source": 0 }, - { "begin": 144, "end": 153, "name": "SWAP1", "source": 0 }, - { "begin": 144, "end": 153, "name": "SSTORE", "source": 0 }, - { "begin": 144, "end": 153, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220ce01b190f7cc227810064e794c9f0944d297e9623609a22ec42a53f82b63521b64736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 339, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 339, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 339, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 339, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 339, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 339, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "21B13C48" - }, - { "begin": 39, "end": 339, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 339, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 339, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 339, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 339, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 339, "name": "REVERT", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 77, "end": 94, "name": "MLOAD", "source": 0 }, - { "begin": 77, "end": 94, "name": "DUP1", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP2", "source": 0 }, - { "begin": 77, "end": 94, "name": "SUB", "source": 0 }, - { "begin": 77, "end": 94, "name": "SWAP1", "source": 0 }, - { "begin": 77, "end": 94, "name": "RETURN", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 178, - "end": 333, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 178, "end": 333, "name": "DUP1", "source": 0 }, - { "begin": 178, "end": 333, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 178, "end": 333, "name": "SUB", "source": 0 }, - { "begin": 178, "end": 333, "name": "DUP2", "source": 0 }, - { "begin": 178, "end": 333, "name": "ADD", "source": 0 }, - { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 178, "end": 333, "name": "SWAP2", "source": 0 }, - { "begin": 178, "end": 333, "name": "SWAP1", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { "begin": 178, "end": 333, "name": "STOP", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 77, "end": 94, "name": "JUMPDEST", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 77, "end": 94, "name": "SLOAD", "source": 0 }, - { "begin": 77, "end": 94, "name": "DUP2", "source": 0 }, - { - "begin": 77, - "end": 94, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 178, - "end": 333, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 178, "end": 333, "name": "JUMPDEST", "source": 0 }, - { - "begin": 221, - "end": 227, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 243, - "end": 323, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, - { "begin": 252, "end": 253, "name": "DUP2", "source": 0 }, - { "begin": 250, "end": 251, "name": "DUP2", "source": 0 }, - { "begin": 250, "end": 253, "name": "LT", "source": 0 }, - { "begin": 243, "end": 323, "name": "ISZERO", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 243, "end": 323, "name": "JUMPI", "source": 0 }, - { - "begin": 285, - "end": 286, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 279, - "end": 284, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 279, "end": 284, "name": "SLOAD", "source": 0 }, - { - "begin": 279, - "end": 286, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { "begin": 279, "end": 286, "name": "SWAP2", "source": 0 }, - { "begin": 279, "end": 286, "name": "SWAP1", "source": 0 }, - { - "begin": 279, - "end": 286, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 279, - "end": 286, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 279, - "end": 286, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 279, "end": 286, "name": "JUMPDEST", "source": 0 }, - { - "begin": 273, - "end": 278, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 273, "end": 286, "name": "DUP2", "source": 0 }, - { "begin": 273, "end": 286, "name": "SWAP1", "source": 0 }, - { "begin": 273, "end": 286, "name": "SSTORE", "source": 0 }, - { "begin": 273, "end": 286, "name": "POP", "source": 0 }, - { - "begin": 307, - "end": 308, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 304, "end": 308, "name": "DUP2", "source": 0 }, - { - "begin": 304, - "end": 308, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 304, "end": 308, "name": "SWAP2", "source": 0 }, - { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, - { - "begin": 304, - "end": 308, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 304, - "end": 308, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 304, - "end": 308, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 304, "end": 308, "name": "JUMPDEST", "source": 0 }, - { "begin": 304, "end": 308, "name": "SWAP1", "source": 0 }, - { "begin": 304, "end": 308, "name": "POP", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 243, "end": 323, "name": "JUMP", "source": 0 }, - { - "begin": 243, - "end": 323, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 243, "end": 323, "name": "JUMPDEST", "source": 0 }, - { "begin": 178, "end": 333, "name": "POP", "source": 0 }, - { "begin": 178, "end": 333, "name": "POP", "source": 0 }, - { - "begin": 178, - "end": 333, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "11" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1077, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1077, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 831, - "end": 851, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 831, - "end": 851, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, - { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, - { "begin": 826, "end": 851, "name": "POP", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "35" - }, - { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 865, - "end": 885, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 865, - "end": 885, - "name": "tag", - "source": 1, - "value": "35" - }, - { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, - { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, - { "begin": 860, "end": 885, "name": "POP", "source": 1 }, - { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, - { - "begin": 951, - "end": 1017, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, - { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, - { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, - { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "38" - }, - { - "begin": 1025, - "end": 1043, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1025, - "end": 1043, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, - { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, - { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, - { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { - "begin": 816, - "end": 1077, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1083, - "end": 1160, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1083, - "end": 1160, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, - { - "begin": 1128, - "end": 1160, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1166, - "end": 1346, - "name": "tag", - "source": 1, - "value": "38" - }, - { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1214, - "end": 1291, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1211, - "end": 1212, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, - { - "begin": 1311, - "end": 1315, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1308, - "end": 1309, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, - { - "begin": 1335, - "end": 1339, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1332, - "end": 1333, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, - { - "begin": 1352, - "end": 1474, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "42" - }, - { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 1425, - "end": 1449, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1425, - "end": 1449, - "name": "tag", - "source": 1, - "value": "42" - }, - { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, - { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, - { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "PUSH [tag]", - "source": 1, - "value": "43" - }, - { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, - { - "begin": 1464, - "end": 1465, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, - { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "tag", - "source": 1, - "value": "43" - }, - { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, - { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, - { - "begin": 1395, - "end": 1474, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "count()": "06661abd", - "incr(uint256)": "21b13c48" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"FiniteLoopContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x984f01945ae71c6c12ccb0421a8c9f515385b977cc6e22f2dbe1fcf563d3f357\",\"urls\":[\"bzz-raw://64648061acbabb53f52d9e8cb94deb199bb26f2b0afbcd74ccdc1a6710b9e661\",\"dweb:/ipfs/Qmcr6Wq5kkatTmcWE5jnfPfGb9fhexKFTjLmoTSzeUp8iP\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:FiniteLoopContract", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract FiniteLoopContract {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr(uint n) public {\n uint i=0;\n while (i end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b507f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161007791906100ed565b602060405180830381855afa158015610094573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146100b757600080fd5b61014d565b60006100c782610104565b6100d1818561010f565b93506100e181856020860161011a565b80840191505092915050565b60006100f982846100bc565b915081905092915050565b600081519050919050565b600081905092915050565b60005b8381101561013857808201518184015260208101905061011d565b83811115610147576000848401525b50505050565b603f8061015b6000396000f3fe6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH32 0x8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000 PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F20576F726C64210000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH2 0x77 SWAP2 SWAP1 PUSH2 0xED JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x94 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD MLOAD PUSH1 0x60 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0xB7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x14D JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC7 DUP3 PUSH2 0x104 JUMP JUMPDEST PUSH2 0xD1 DUP2 DUP6 PUSH2 0x10F JUMP JUMPDEST SWAP4 POP PUSH2 0xE1 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x11A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF9 DUP3 DUP5 PUSH2 0xBC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x138 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11D JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3F DUP1 PUSH2 0x15B PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "32:170:0:-:0;;;62:134;;;;;;;;;;94:92;:33;104:22;;;;;;;;;;;;;;;;;94:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;86:101;;;;;;32:170;;7:373:1;;139:38;171:5;139:38;:::i;:::-;193:88;274:6;269:3;193:88;:::i;:::-;186:95;;290:52;335:6;330:3;323:4;316:5;312:16;290:52;:::i;:::-;367:6;362:3;358:16;351:23;;115:265;;;;;:::o;386:271::-;;538:93;627:3;618:6;538:93;:::i;:::-;531:100;;648:3;641:10;;520:137;;;;:::o;663:98::-;;748:5;742:12;732:22;;721:40;;;:::o;767:147::-;;905:3;890:18;;880:34;;;;:::o;920:307::-;988:1;998:113;1012:6;1009:1;1006:13;998:113;;;1097:1;1092:3;1088:11;1082:18;1078:1;1073:3;1069:11;1062:39;1034:2;1031:1;1027:10;1022:15;;998:113;;;1129:6;1126:1;1123:13;1120:2;;;1209:1;1200:6;1195:3;1191:16;1184:27;1120:2;969:258;;;;:::o;32:170:0:-;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A XOR 0xA6 PUSH2 0xFDF5 0xEA CALLDATASIZE STOP PUSH18 0x4F19A16E1681D5C651E3B23F5A55166C1372 0xB7 DELEGATECALL GT SWAP12 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "32:170:0:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "infinite", - "totalCost": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 32, - "end": 202, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 32, - "end": 202, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 32, "end": 202, "name": "MSTORE", "source": 0 }, - { "begin": 62, "end": 196, "name": "CALLVALUE", "source": 0 }, - { "begin": 62, "end": 196, "name": "DUP1", "source": 0 }, - { "begin": 62, "end": 196, "name": "ISZERO", "source": 0 }, - { - "begin": 62, - "end": 196, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 62, "end": 196, "name": "JUMPI", "source": 0 }, - { - "begin": 62, - "end": 196, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 62, "end": 196, "name": "DUP1", "source": 0 }, - { "begin": 62, "end": 196, "name": "REVERT", "source": 0 }, - { "begin": 62, "end": 196, "name": "tag", "source": 0, "value": "1" }, - { "begin": 62, "end": 196, "name": "JUMPDEST", "source": 0 }, - { "begin": 62, "end": 196, "name": "POP", "source": 0 }, - { - "begin": 94, - "end": 186, - "name": "PUSH", - "source": 0, - "value": "8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000" - }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "3" - }, - { - "begin": 104, - "end": 126, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 104, "end": 126, "name": "MLOAD", "source": 0 }, - { "begin": 104, "end": 126, "name": "DUP1", "source": 0 }, - { - "begin": 104, - "end": 126, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 104, "end": 126, "name": "ADD", "source": 0 }, - { - "begin": 104, - "end": 126, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 104, "end": 126, "name": "MSTORE", "source": 0 }, - { "begin": 104, "end": 126, "name": "DUP1", "source": 0 }, - { - "begin": 104, - "end": 126, - "name": "PUSH", - "source": 0, - "value": "C" - }, - { "begin": 104, "end": 126, "name": "DUP2", "source": 0 }, - { "begin": 104, "end": 126, "name": "MSTORE", "source": 0 }, - { - "begin": 104, - "end": 126, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 104, "end": 126, "name": "ADD", "source": 0 }, - { - "begin": 104, - "end": 126, - "name": "PUSH", - "source": 0, - "value": "48656C6C6F20576F726C64210000000000000000000000000000000000000000" - }, - { "begin": 104, "end": 126, "name": "DUP2", "source": 0 }, - { "begin": 104, "end": 126, "name": "MSTORE", "source": 0 }, - { "begin": 104, "end": 126, "name": "POP", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 94, "end": 127, "name": "SWAP2", "source": 0 }, - { "begin": 94, "end": 127, "name": "SWAP1", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 94, - "end": 127, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { "begin": 94, "end": 127, "name": "tag", "source": 0, "value": "4" }, - { "begin": 94, "end": 127, "name": "JUMPDEST", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, - { "begin": 94, "end": 127, "name": "DUP1", "source": 0 }, - { "begin": 94, "end": 127, "name": "DUP4", "source": 0 }, - { "begin": 94, "end": 127, "name": "SUB", "source": 0 }, - { "begin": 94, "end": 127, "name": "DUP2", "source": 0 }, - { "begin": 94, "end": 127, "name": "DUP6", "source": 0 }, - { "begin": 94, "end": 127, "name": "GAS", "source": 0 }, - { "begin": 94, "end": 127, "name": "STATICCALL", "source": 0 }, - { "begin": 94, "end": 127, "name": "ISZERO", "source": 0 }, - { "begin": 94, "end": 127, "name": "DUP1", "source": 0 }, - { "begin": 94, "end": 127, "name": "ISZERO", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 94, "end": 127, "name": "JUMPI", "source": 0 }, - { "begin": 94, "end": 127, "name": "RETURNDATASIZE", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 94, "end": 127, "name": "DUP1", "source": 0 }, - { "begin": 94, "end": 127, "name": "RETURNDATACOPY", "source": 0 }, - { "begin": 94, "end": 127, "name": "RETURNDATASIZE", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 94, "end": 127, "name": "REVERT", "source": 0 }, - { "begin": 94, "end": 127, "name": "tag", "source": 0, "value": "7" }, - { "begin": 94, "end": 127, "name": "JUMPDEST", "source": 0 }, - { "begin": 94, "end": 127, "name": "POP", "source": 0 }, - { "begin": 94, "end": 127, "name": "POP", "source": 0 }, - { "begin": 94, "end": 127, "name": "POP", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, - { "begin": 94, "end": 127, "name": "MLOAD", "source": 0 }, - { - "begin": 94, - "end": 127, - "name": "PUSH", - "source": 0, - "value": "60" - }, - { "begin": 94, "end": 127, "name": "SHL", "source": 0 }, - { - "begin": 94, - "end": 186, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 94, "end": 186, "name": "NOT", "source": 0 }, - { "begin": 94, "end": 186, "name": "AND", "source": 0 }, - { "begin": 94, "end": 186, "name": "EQ", "source": 0 }, - { - "begin": 86, - "end": 187, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 86, "end": 187, "name": "JUMPI", "source": 0 }, - { - "begin": 86, - "end": 187, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 86, "end": 187, "name": "DUP1", "source": 0 }, - { "begin": 86, "end": 187, "name": "REVERT", "source": 0 }, - { "begin": 86, "end": 187, "name": "tag", "source": 0, "value": "8" }, - { "begin": 86, "end": 187, "name": "JUMPDEST", "source": 0 }, - { - "begin": 32, - "end": 202, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 32, "end": 202, "name": "JUMP", "source": 0 }, - { "begin": 7, "end": 380, "name": "tag", "source": 1, "value": "11" }, - { "begin": 7, "end": 380, "name": "JUMPDEST", "source": 1 }, - { "begin": 7, "end": 380, "name": "PUSH", "source": 1, "value": "0" }, - { - "begin": 139, - "end": 177, - "name": "PUSH [tag]", - "source": 1, - "value": "13" - }, - { "begin": 171, "end": 176, "name": "DUP3", "source": 1 }, - { - "begin": 139, - "end": 177, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { - "begin": 139, - "end": 177, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 139, - "end": 177, - "name": "tag", - "source": 1, - "value": "13" - }, - { "begin": 139, "end": 177, "name": "JUMPDEST", "source": 1 }, - { - "begin": 193, - "end": 281, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { "begin": 274, "end": 280, "name": "DUP2", "source": 1 }, - { "begin": 269, "end": 272, "name": "DUP6", "source": 1 }, - { - "begin": 193, - "end": 281, - "name": "PUSH [tag]", - "source": 1, - "value": "16" - }, - { - "begin": 193, - "end": 281, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 193, - "end": 281, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 193, "end": 281, "name": "JUMPDEST", "source": 1 }, - { "begin": 186, "end": 281, "name": "SWAP4", "source": 1 }, - { "begin": 186, "end": 281, "name": "POP", "source": 1 }, - { - "begin": 290, - "end": 342, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { "begin": 335, "end": 341, "name": "DUP2", "source": 1 }, - { "begin": 330, "end": 333, "name": "DUP6", "source": 1 }, - { - "begin": 323, - "end": 327, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 316, "end": 321, "name": "DUP7", "source": 1 }, - { "begin": 312, "end": 328, "name": "ADD", "source": 1 }, - { - "begin": 290, - "end": 342, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 290, - "end": 342, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 290, - "end": 342, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 290, "end": 342, "name": "JUMPDEST", "source": 1 }, - { "begin": 367, "end": 373, "name": "DUP1", "source": 1 }, - { "begin": 362, "end": 365, "name": "DUP5", "source": 1 }, - { "begin": 358, "end": 374, "name": "ADD", "source": 1 }, - { "begin": 351, "end": 374, "name": "SWAP2", "source": 1 }, - { "begin": 351, "end": 374, "name": "POP", "source": 1 }, - { "begin": 115, "end": 380, "name": "POP", "source": 1 }, - { "begin": 115, "end": 380, "name": "SWAP3", "source": 1 }, - { "begin": 115, "end": 380, "name": "SWAP2", "source": 1 }, - { "begin": 115, "end": 380, "name": "POP", "source": 1 }, - { "begin": 115, "end": 380, "name": "POP", "source": 1 }, - { - "begin": 115, - "end": 380, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 386, - "end": 657, - "name": "tag", - "source": 1, - "value": "5" - }, - { "begin": 386, "end": 657, "name": "JUMPDEST", "source": 1 }, - { - "begin": 386, - "end": 657, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 538, - "end": 631, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { "begin": 627, "end": 630, "name": "DUP3", "source": 1 }, - { "begin": 618, "end": 624, "name": "DUP5", "source": 1 }, - { - "begin": 538, - "end": 631, - "name": "PUSH [tag]", - "source": 1, - "value": "11" - }, - { - "begin": 538, - "end": 631, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 538, - "end": 631, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 538, "end": 631, "name": "JUMPDEST", "source": 1 }, - { "begin": 531, "end": 631, "name": "SWAP2", "source": 1 }, - { "begin": 531, "end": 631, "name": "POP", "source": 1 }, - { "begin": 648, "end": 651, "name": "DUP2", "source": 1 }, - { "begin": 641, "end": 651, "name": "SWAP1", "source": 1 }, - { "begin": 641, "end": 651, "name": "POP", "source": 1 }, - { "begin": 520, "end": 657, "name": "SWAP3", "source": 1 }, - { "begin": 520, "end": 657, "name": "SWAP2", "source": 1 }, - { "begin": 520, "end": 657, "name": "POP", "source": 1 }, - { "begin": 520, "end": 657, "name": "POP", "source": 1 }, - { - "begin": 520, - "end": 657, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 663, - "end": 761, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 663, "end": 761, "name": "JUMPDEST", "source": 1 }, - { - "begin": 663, - "end": 761, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 748, "end": 753, "name": "DUP2", "source": 1 }, - { "begin": 742, "end": 754, "name": "MLOAD", "source": 1 }, - { "begin": 732, "end": 754, "name": "SWAP1", "source": 1 }, - { "begin": 732, "end": 754, "name": "POP", "source": 1 }, - { "begin": 721, "end": 761, "name": "SWAP2", "source": 1 }, - { "begin": 721, "end": 761, "name": "SWAP1", "source": 1 }, - { "begin": 721, "end": 761, "name": "POP", "source": 1 }, - { - "begin": 721, - "end": 761, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 767, - "end": 914, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 767, "end": 914, "name": "JUMPDEST", "source": 1 }, - { - "begin": 767, - "end": 914, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 905, "end": 908, "name": "DUP2", "source": 1 }, - { "begin": 890, "end": 908, "name": "SWAP1", "source": 1 }, - { "begin": 890, "end": 908, "name": "POP", "source": 1 }, - { "begin": 880, "end": 914, "name": "SWAP3", "source": 1 }, - { "begin": 880, "end": 914, "name": "SWAP2", "source": 1 }, - { "begin": 880, "end": 914, "name": "POP", "source": 1 }, - { "begin": 880, "end": 914, "name": "POP", "source": 1 }, - { - "begin": 880, - "end": 914, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 920, - "end": 1227, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 920, "end": 1227, "name": "JUMPDEST", "source": 1 }, - { - "begin": 988, - "end": 989, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 998, - "end": 1111, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 998, "end": 1111, "name": "JUMPDEST", "source": 1 }, - { "begin": 1012, "end": 1018, "name": "DUP4", "source": 1 }, - { "begin": 1009, "end": 1010, "name": "DUP2", "source": 1 }, - { "begin": 1006, "end": 1019, "name": "LT", "source": 1 }, - { "begin": 998, "end": 1111, "name": "ISZERO", "source": 1 }, - { - "begin": 998, - "end": 1111, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { "begin": 998, "end": 1111, "name": "JUMPI", "source": 1 }, - { "begin": 1097, "end": 1098, "name": "DUP1", "source": 1 }, - { "begin": 1092, "end": 1095, "name": "DUP3", "source": 1 }, - { "begin": 1088, "end": 1099, "name": "ADD", "source": 1 }, - { "begin": 1082, "end": 1100, "name": "MLOAD", "source": 1 }, - { "begin": 1078, "end": 1079, "name": "DUP2", "source": 1 }, - { "begin": 1073, "end": 1076, "name": "DUP5", "source": 1 }, - { "begin": 1069, "end": 1080, "name": "ADD", "source": 1 }, - { "begin": 1062, "end": 1101, "name": "MSTORE", "source": 1 }, - { - "begin": 1034, - "end": 1036, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1031, "end": 1032, "name": "DUP2", "source": 1 }, - { "begin": 1027, "end": 1037, "name": "ADD", "source": 1 }, - { "begin": 1022, "end": 1037, "name": "SWAP1", "source": 1 }, - { "begin": 1022, "end": 1037, "name": "POP", "source": 1 }, - { - "begin": 998, - "end": 1111, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 998, "end": 1111, "name": "JUMP", "source": 1 }, - { - "begin": 998, - "end": 1111, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 998, "end": 1111, "name": "JUMPDEST", "source": 1 }, - { "begin": 1129, "end": 1135, "name": "DUP4", "source": 1 }, - { "begin": 1126, "end": 1127, "name": "DUP2", "source": 1 }, - { "begin": 1123, "end": 1136, "name": "GT", "source": 1 }, - { "begin": 1120, "end": 1122, "name": "ISZERO", "source": 1 }, - { - "begin": 1120, - "end": 1122, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { "begin": 1120, "end": 1122, "name": "JUMPI", "source": 1 }, - { - "begin": 1209, - "end": 1210, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1200, "end": 1206, "name": "DUP5", "source": 1 }, - { "begin": 1195, "end": 1198, "name": "DUP5", "source": 1 }, - { "begin": 1191, "end": 1207, "name": "ADD", "source": 1 }, - { "begin": 1184, "end": 1211, "name": "MSTORE", "source": 1 }, - { - "begin": 1120, - "end": 1122, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 1120, "end": 1122, "name": "JUMPDEST", "source": 1 }, - { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, - { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, - { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, - { "begin": 969, "end": 1227, "name": "POP", "source": 1 }, - { - "begin": 969, - "end": 1227, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { "begin": 32, "end": 202, "name": "tag", "source": 0, "value": "9" }, - { "begin": 32, "end": 202, "name": "JUMPDEST", "source": 0 }, - { - "begin": 32, - "end": 202, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 32, "end": 202, "name": "DUP1", "source": 0 }, - { - "begin": 32, - "end": 202, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 32, - "end": 202, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 32, "end": 202, "name": "CODECOPY", "source": 0 }, - { - "begin": 32, - "end": 202, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 32, "end": 202, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e3b23f5a55166c1372b7f4119b64736f6c63430008030033", - ".code": [ - { - "begin": 32, - "end": 202, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 32, - "end": 202, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 32, "end": 202, "name": "MSTORE", "source": 0 }, - { - "begin": 32, - "end": 202, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 32, "end": 202, "name": "DUP1", "source": 0 }, - { "begin": 32, "end": 202, "name": "REVERT", "source": 0 } - ] - } - } - }, - "methodIdentifiers": {} - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"HashRipmd160\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf3ae788ee7dce70defb6af44a4f7bfa31cb824bd3be9b4975e130191d96ea505\",\"urls\":[\"bzz-raw://4a252a1c455fb39492f493b58841b260aa4d0675a94cc892e218e07fc2d27b82\",\"dweb:/ipfs/QmUVQYPzqdmRavXJddNkSDZQ6hXThqVLHfYWFNj1yNMgSJ\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract HashRipmd160 {\n constructor() {\n require(ripemd160(bytes ('Hello World!')) ==\n hex'8476ee4631b9b30ac2754b0ee0c47e161d3f724c');\n }\n }" -} diff --git a/tests/contracts/compiled/HasherChecker.json b/tests/contracts/compiled/HasherChecker.json new file mode 100644 index 0000000000..7bac5b9b49 --- /dev/null +++ b/tests/contracts/compiled/HasherChecker.json @@ -0,0 +1,20955 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b50611711806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063985762481161005b57806398576248146100b5578063ab26c7f8146100bf578063c9a6e474146100ef578063cb5c707c146100f957610088565b806328820a241461008d578063503a67721461009757806360012e3a146100a15780638588cc9c146100ab575b600080fd5b610095610129565b005b61009f6101d1565b005b6100a9610464565b005b6100b361077f565b005b6100bd610976565b005b6100d960048036038101906100d49190610de7565b6109ac565b6040516100e69190610e49565b60405180910390f35b6100f76109fb565b005b610113600480360381019061010e919061120f565b610bcc565b6040516101209190611337565b60405180910390f35b7f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161018f91906113cc565b602060405180830381855afa1580156101ac573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146101cf57600080fd5b565b60006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506103af610cf8565b600060208261018085600060086107d05a03f1905080610404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fb90611440565b60405180910390fd5b60018260006001811061041a57610419611460565b5b60200201511461045f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610456906114db565b60405180910390fd5b505050565b6000600c9050610472610d1a565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5816000600281106104a7576104a6611460565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b816001600281106104e5576104e4611460565b5b6020020181815250506104f6610d3c565b7f61626300000000000000000000000000000000000000000000000000000000008160006004811061052b5761052a611460565b5b60200201818152505060008160016004811061054a57610549611460565b5b60200201818152505060008160026004811061056957610568611460565b5b60200201818152505060008160036004811061058857610587611460565b5b602002018181525050610599610d5e565b7f0300000000000000000000000000000000000000000000000000000000000000816000600281106105ce576105cd611460565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff19168152505060008160016002811061062557610624611460565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff191681525050600060019050600061067b8686868686610bcc565b90507fba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d160001b816000600281106106b5576106b4611460565b5b6020020151146106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906114db565b60405180910390fd5b7f7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd400992360001b8160016002811061073257610731611460565b5b602002015114610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e906114db565b60405180910390fd5b505050505050565b60008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266815250905061082d610d80565b60408160808460006006600019f192508261087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490611547565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7816000600281106108b2576108b1611460565b5b6020020151146108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee906114db565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061092c5761092b611460565b5b602002015114610971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610968906114db565b60405180910390fd5b505050565b60056109866003600560076109ac565b1461099057600080fd5b60036109a060056007600b6109ac565b146109aa57600080fd5b565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16109ee57600080fd5b8051925050509392505050565b60008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610a83610d80565b60408160608460006007600019f1925082610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90611547565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610b0857610b07611460565b5b602002015114610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b44906114db565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae083045181600160028110610b8257610b81611460565b5b602002015114610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe906114db565b60405180910390fd5b505050565b610bd4610d1a565b610bdc610d1a565b60008787600060028110610bf357610bf2611460565b5b602002015188600160028110610c0c57610c0b611460565b5b602002015188600060048110610c2557610c24611460565b5b602002015189600160048110610c3e57610c3d611460565b5b60200201518a600260048110610c5757610c56611460565b5b60200201518b600360048110610c7057610c6f611460565b5b60200201518b600060028110610c8957610c88611460565b5b60200201518c600160028110610ca257610ca1611460565b5b60200201518c604051602001610cc19a99989796959493929190611627565b604051602081830303815290604052905060408260d5602084016009600019fa610cea57600080fd5b819250505095945050505050565b6040518060200160405280600190602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b6000819050919050565b610dc481610db1565b8114610dcf57600080fd5b50565b600081359050610de181610dbb565b92915050565b600080600060608486031215610e0057610dff610dac565b5b6000610e0e86828701610dd2565b9350506020610e1f86828701610dd2565b9250506040610e3086828701610dd2565b9150509250925092565b610e4381610db1565b82525050565b6000602082019050610e5e6000830184610e3a565b92915050565b600063ffffffff82169050919050565b610e7d81610e64565b8114610e8857600080fd5b50565b600081359050610e9a81610e74565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610eee82610ea5565b810181811067ffffffffffffffff82111715610f0d57610f0c610eb6565b5b80604052505050565b6000610f20610da2565b9050610f2c8282610ee5565b919050565b600067ffffffffffffffff821115610f4c57610f4b610eb6565b5b602082029050919050565b600080fd5b6000819050919050565b610f6f81610f5c565b8114610f7a57600080fd5b50565b600081359050610f8c81610f66565b92915050565b6000610fa5610fa084610f31565b610f16565b90508060208402830185811115610fbf57610fbe610f57565b5b835b81811015610fe85780610fd48882610f7d565b845260208401935050602081019050610fc1565b5050509392505050565b600082601f83011261100757611006610ea0565b5b6002611014848285610f92565b91505092915050565b600067ffffffffffffffff82111561103857611037610eb6565b5b602082029050919050565b60006110566110518461101d565b610f16565b905080602084028301858111156110705761106f610f57565b5b835b8181101561109957806110858882610f7d565b845260208401935050602081019050611072565b5050509392505050565b600082601f8301126110b8576110b7610ea0565b5b60046110c5848285611043565b91505092915050565b600067ffffffffffffffff8211156110e9576110e8610eb6565b5b602082029050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b611129816110f4565b811461113457600080fd5b50565b60008135905061114681611120565b92915050565b600061115f61115a846110ce565b610f16565b9050806020840283018581111561117957611178610f57565b5b835b818110156111a2578061118e8882611137565b84526020840193505060208101905061117b565b5050509392505050565b600082601f8301126111c1576111c0610ea0565b5b60026111ce84828561114c565b91505092915050565b60008115159050919050565b6111ec816111d7565b81146111f757600080fd5b50565b600081359050611209816111e3565b92915050565b6000806000806000610140868803121561122c5761122b610dac565b5b600061123a88828901610e8b565b955050602061124b88828901610ff2565b945050606061125c888289016110a3565b93505060e061126d888289016111ac565b92505061012061127f888289016111fa565b9150509295509295909350565b600060029050919050565b600081905092915050565b6000819050919050565b6112b581610f5c565b82525050565b60006112c783836112ac565b60208301905092915050565b6000602082019050919050565b6112e98161128c565b6112f38184611297565b92506112fe826112a2565b8060005b8381101561132f57815161131687826112bb565b9650611321836112d3565b925050600181019050611302565b505050505050565b600060408201905061134c60008301846112e0565b92915050565b600081519050919050565b600081905092915050565b60005b8381101561138657808201518184015260208101905061136b565b83811115611395576000848401525b50505050565b60006113a682611352565b6113b0818561135d565b93506113c0818560208601611368565b80840191505092915050565b60006113d8828461139b565b915081905092915050565b600082825260208201905092915050565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b600061142a601d836113e3565b9150611435826113f4565b602082019050919050565b600060208201905081810360008301526114598161141d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b60006114c56006836113e3565b91506114d08261148f565b602082019050919050565b600060208201905081810360008301526114f4816114b8565b9050919050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b6000611531601e836113e3565b915061153c826114fb565b602082019050919050565b6000602082019050818103600083015261156081611524565b9050919050565b60008160e01b9050919050565b600061157f82611567565b9050919050565b61159761159282610e64565b611574565b82525050565b6000819050919050565b6115b86115b382610f5c565b61159d565b82525050565b6000819050919050565b6115d96115d4826110f4565b6115be565b82525050565b60008160f81b9050919050565b60006115f7826115df565b9050919050565b6000611609826115ec565b9050919050565b61162161161c826111d7565b6115fe565b82525050565b6000611633828d611586565b600482019150611643828c6115a7565b602082019150611653828b6115a7565b602082019150611663828a6115a7565b60208201915061167382896115a7565b60208201915061168382886115a7565b60208201915061169382876115a7565b6020820191506116a382866115c8565b6008820191506116b382856115c8565b6008820191506116c38284611610565b6001820191508190509b9a505050505050505050505056fea264697066735822122079cfdf99f34c525bb4072cde2303cdaeca4e75666256549f1f713f0ea3ec58ce64736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [], + "name": "blake2Check", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "rounds", "type": "uint32" }, + { "internalType": "bytes32[2]", "name": "h", "type": "bytes32[2]" }, + { "internalType": "bytes32[4]", "name": "m", "type": "bytes32[4]" }, + { "internalType": "bytes8[2]", "name": "t", "type": "bytes8[2]" }, + { "internalType": "bool", "name": "f", "type": "bool" } + ], + "name": "blake2Wrapper", + "outputs": [ + { "internalType": "bytes32[2]", "name": "", "type": "bytes32[2]" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bn128AdditionCheck", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bn128MultiplyCheck", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bn128PairingCheck", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "modExpChecker", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "_b", "type": "uint256" }, + { "internalType": "uint256", "name": "_e", "type": "uint256" }, + { "internalType": "uint256", "name": "_m", "type": "uint256" } + ], + "name": "modExpWrapper", + "outputs": [ + { "internalType": "uint256", "name": "result", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ripemd160Check", + "outputs": [], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":67:7496 contract HasherChecker {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:7496 contract HasherChecker {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x98576248\n gt\n tag_11\n jumpi\n dup1\n 0x98576248\n eq\n tag_7\n jumpi\n dup1\n 0xab26c7f8\n eq\n tag_8\n jumpi\n dup1\n 0xc9a6e474\n eq\n tag_9\n jumpi\n dup1\n 0xcb5c707c\n eq\n tag_10\n jumpi\n jump(tag_2)\n tag_11:\n dup1\n 0x28820a24\n eq\n tag_3\n jumpi\n dup1\n 0x503a6772\n eq\n tag_4\n jumpi\n dup1\n 0x60012e3a\n eq\n tag_5\n jumpi\n dup1\n 0x8588cc9c\n eq\n tag_6\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":96:279 function ripemd160Check() public pure {... */\n tag_3:\n tag_12\n tag_13\n jump\t// in\n tag_12:\n stop\n /* \"main.sol\":2638:4296 function bn128PairingCheck() public {... */\n tag_4:\n tag_14\n tag_15\n jump\t// in\n tag_14:\n stop\n /* \"main.sol\":6040:7494 function blake2Check() public {... */\n tag_5:\n tag_16\n tag_17\n jump\t// in\n tag_16:\n stop\n /* \"main.sol\":285:1496 function bn128AdditionCheck() public {... */\n tag_6:\n tag_18\n tag_19\n jump\t// in\n tag_18:\n stop\n /* \"main.sol\":5213:5345 function modExpChecker() public {... */\n tag_7:\n tag_20\n tag_21\n jump\t// in\n tag_20:\n stop\n /* \"main.sol\":4302:5207 function modExpWrapper(... */\n tag_8:\n tag_22\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_23\n swap2\n swap1\n tag_24\n jump\t// in\n tag_23:\n tag_25\n jump\t// in\n tag_22:\n mload(0x40)\n tag_26\n swap2\n swap1\n tag_27\n jump\t// in\n tag_26:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1502:2632 function bn128MultiplyCheck() public {... */\n tag_9:\n tag_28\n tag_29\n jump\t// in\n tag_28:\n stop\n /* \"main.sol\":5351:6034 function blake2Wrapper(... */\n tag_10:\n tag_30\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_31\n swap2\n swap1\n tag_32\n jump\t// in\n tag_31:\n tag_33\n jump\t// in\n tag_30:\n mload(0x40)\n tag_34\n swap2\n swap1\n tag_35\n jump\t// in\n tag_34:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":96:279 function ripemd160Check() public pure {... */\n tag_13:\n /* \"main.sol\":165:262 ripemd160(bytes(\"Hello World!\")) ==... */\n 0x8476ee4631b9b30ac2754b0ee0c47e161d3f724c000000000000000000000000\n /* \"main.sol\":165:197 ripemd160(bytes(\"Hello World!\")) */\n 0x03\n /* \"main.sol\":175:196 bytes(\"Hello World!\") */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x0c\n dup2\n mstore\n 0x20\n add\n 0x48656c6c6f20576f726c64210000000000000000000000000000000000000000\n dup2\n mstore\n pop\n /* \"main.sol\":165:197 ripemd160(bytes(\"Hello World!\")) */\n mload(0x40)\n tag_37\n swap2\n swap1\n tag_38\n jump\t// in\n tag_37:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_40\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_40:\n pop\n pop\n pop\n shl(0x60, mload(mload(0x40)))\n /* \"main.sol\":165:262 ripemd160(bytes(\"Hello World!\")) ==... */\n not(0xffffffffffffffffffffffff)\n and\n eq\n /* \"main.sol\":144:272 require(... */\n tag_41\n jumpi\n 0x00\n dup1\n revert\n tag_41:\n /* \"main.sol\":96:279 function ripemd160Check() public pure {... */\n jump\t// out\n /* \"main.sol\":2638:4296 function bn128PairingCheck() public {... */\n tag_15:\n /* \"main.sol\":2684:2708 uint256[12] memory input */\n 0x00\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n mload(0x40)\n dup1\n 0x0180\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":2725:2791 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02 */\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":2805:2871 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84 */\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":2885:2951 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee */\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":2965:3031 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f */\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3045:3111 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237 */\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3125:3191 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f */\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3205:3271 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9 */\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3285:3351 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1 */\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3365:3431 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 */\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3445:3511 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed */\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3525:3591 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b */\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":3605:3671 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa */\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n /* \"main.sol\":2684:3681 uint256[12] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":3691:3715 uint256[1] memory result */\n tag_43\n tag_44\n jump\t// in\n tag_43:\n /* \"main.sol\":3725:3737 bool success */\n 0x00\n /* \"main.sol\":4175:4177 32 */\n 0x20\n /* \"main.sol\":4167:4173 result */\n dup3\n /* \"main.sol\":4162:4165 384 */\n 0x0180\n /* \"main.sol\":4155:4160 input */\n dup6\n /* \"main.sol\":4152:4153 0 */\n 0x00\n /* \"main.sol\":4146:4150 0x08 */\n 0x08\n /* \"main.sol\":4139:4143 2000 */\n 0x07d0\n /* \"main.sol\":4132:4137 gas() */\n gas\n /* \"main.sol\":4128:4144 sub(gas(), 2000) */\n sub\n /* \"main.sol\":4123:4178 call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n call\n /* \"main.sol\":4112:4178 success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) */\n swap1\n pop\n /* \"main.sol\":4205:4212 success */\n dup1\n /* \"main.sol\":4197:4246 require(success, \"elliptic curve pairing failed\") */\n tag_45\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_46\n swap1\n tag_47\n jump\t// in\n tag_46:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_45:\n /* \"main.sol\":4277:4278 1 */\n 0x01\n /* \"main.sol\":4264:4270 result */\n dup3\n /* \"main.sol\":4271:4272 0 */\n 0x00\n /* \"main.sol\":4264:4273 result[0] */\n 0x01\n dup2\n lt\n tag_48\n jumpi\n tag_49\n tag_50\n jump\t// in\n tag_49:\n tag_48:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":4264:4278 result[0] == 1 */\n eq\n /* \"main.sol\":4256:4289 require(result[0] == 1, \"failed\") */\n tag_51\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_52\n swap1\n tag_53\n jump\t// in\n tag_52:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_51:\n /* \"main.sol\":2674:4296 {... */\n pop\n pop\n pop\n /* \"main.sol\":2638:4296 function bn128PairingCheck() public {... */\n jump\t// out\n /* \"main.sol\":6040:7494 function blake2Check() public {... */\n tag_17:\n /* \"main.sol\":6080:6093 uint32 rounds */\n 0x00\n /* \"main.sol\":6096:6098 12 */\n 0x0c\n /* \"main.sol\":6080:6098 uint32 rounds = 12 */\n swap1\n pop\n /* \"main.sol\":6109:6128 bytes32[2] memory h */\n tag_55\n tag_56\n jump\t// in\n tag_55:\n /* \"main.sol\":6138:6236 h[... */\n 0x48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5\n /* \"main.sol\":6138:6139 h */\n dup2\n /* \"main.sol\":6153:6154 0 */\n 0x00\n /* \"main.sol\":6138:6164 h[... */\n 0x02\n dup2\n lt\n tag_57\n jumpi\n tag_58\n tag_50\n jump\t// in\n tag_58:\n tag_57:\n 0x20\n mul\n add\n /* \"main.sol\":6138:6236 h[... */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6246:6344 h[... */\n 0xd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b\n /* \"main.sol\":6246:6247 h */\n dup2\n /* \"main.sol\":6261:6262 1 */\n 0x01\n /* \"main.sol\":6246:6272 h[... */\n 0x02\n dup2\n lt\n tag_59\n jumpi\n tag_60\n tag_50\n jump\t// in\n tag_60:\n tag_59:\n 0x20\n mul\n add\n /* \"main.sol\":6246:6344 h[... */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6355:6374 bytes32[4] memory m */\n tag_61\n tag_62\n jump\t// in\n tag_61:\n /* \"main.sol\":6384:6482 m[... */\n 0x6162630000000000000000000000000000000000000000000000000000000000\n /* \"main.sol\":6384:6385 m */\n dup2\n /* \"main.sol\":6399:6400 0 */\n 0x00\n /* \"main.sol\":6384:6410 m[... */\n 0x04\n dup2\n lt\n tag_63\n jumpi\n tag_64\n tag_50\n jump\t// in\n tag_64:\n tag_63:\n 0x20\n mul\n add\n /* \"main.sol\":6384:6482 m[... */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6492:6590 m[... */\n 0x00\n /* \"main.sol\":6492:6493 m */\n dup2\n /* \"main.sol\":6507:6508 1 */\n 0x01\n /* \"main.sol\":6492:6518 m[... */\n 0x04\n dup2\n lt\n tag_65\n jumpi\n tag_66\n tag_50\n jump\t// in\n tag_66:\n tag_65:\n 0x20\n mul\n add\n /* \"main.sol\":6492:6590 m[... */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6600:6698 m[... */\n 0x00\n /* \"main.sol\":6600:6601 m */\n dup2\n /* \"main.sol\":6615:6616 2 */\n 0x02\n /* \"main.sol\":6600:6626 m[... */\n 0x04\n dup2\n lt\n tag_67\n jumpi\n tag_68\n tag_50\n jump\t// in\n tag_68:\n tag_67:\n 0x20\n mul\n add\n /* \"main.sol\":6600:6698 m[... */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6708:6806 m[... */\n 0x00\n /* \"main.sol\":6708:6709 m */\n dup2\n /* \"main.sol\":6723:6724 3 */\n 0x03\n /* \"main.sol\":6708:6734 m[... */\n 0x04\n dup2\n lt\n tag_69\n jumpi\n tag_70\n tag_50\n jump\t// in\n tag_70:\n tag_69:\n 0x20\n mul\n add\n /* \"main.sol\":6708:6806 m[... */\n dup2\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6817:6835 bytes8[2] memory t */\n tag_71\n tag_72\n jump\t// in\n tag_71:\n /* \"main.sol\":6845:6865 t[0] = hex\"03000000\" */\n 0x0300000000000000000000000000000000000000000000000000000000000000\n /* \"main.sol\":6845:6846 t */\n dup2\n /* \"main.sol\":6847:6848 0 */\n 0x00\n /* \"main.sol\":6845:6849 t[0] */\n 0x02\n dup2\n lt\n tag_73\n jumpi\n tag_74\n tag_50\n jump\t// in\n tag_74:\n tag_73:\n 0x20\n mul\n add\n /* \"main.sol\":6845:6865 t[0] = hex\"03000000\" */\n swap1\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n swap1\n dup2\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6875:6895 t[1] = hex\"00000000\" */\n 0x00\n /* \"main.sol\":6875:6876 t */\n dup2\n /* \"main.sol\":6877:6878 1 */\n 0x01\n /* \"main.sol\":6875:6879 t[1] */\n 0x02\n dup2\n lt\n tag_75\n jumpi\n tag_76\n tag_50\n jump\t// in\n tag_76:\n tag_75:\n 0x20\n mul\n add\n /* \"main.sol\":6875:6895 t[1] = hex\"00000000\" */\n swap1\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n swap1\n dup2\n not(0xffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n dup2\n mstore\n pop\n pop\n /* \"main.sol\":6906:6912 bool f */\n 0x00\n /* \"main.sol\":6915:6919 true */\n 0x01\n /* \"main.sol\":6906:6919 bool f = true */\n swap1\n pop\n /* \"main.sol\":7111:7135 bytes32[2] memory result */\n 0x00\n /* \"main.sol\":7138:7171 blake2Wrapper(rounds, h, m, t, f) */\n tag_77\n /* \"main.sol\":7152:7158 rounds */\n dup7\n /* \"main.sol\":7160:7161 h */\n dup7\n /* \"main.sol\":7163:7164 m */\n dup7\n /* \"main.sol\":7166:7167 t */\n dup7\n /* \"main.sol\":7169:7170 f */\n dup7\n /* \"main.sol\":7138:7151 blake2Wrapper */\n tag_33\n /* \"main.sol\":7138:7171 blake2Wrapper(rounds, h, m, t, f) */\n jump\t// in\n tag_77:\n /* \"main.sol\":7111:7171 bytes32[2] memory result = blake2Wrapper(rounds, h, m, t, f) */\n swap1\n pop\n /* \"main.sol\":7231:7297 0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1 */\n 0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1\n /* \"main.sol\":7202:7297 result[0] ==... */\n 0x00\n shl\n /* \"main.sol\":7202:7208 result */\n dup2\n /* \"main.sol\":7209:7210 0 */\n 0x00\n /* \"main.sol\":7202:7211 result[0] */\n 0x02\n dup2\n lt\n tag_78\n jumpi\n tag_79\n tag_50\n jump\t// in\n tag_79:\n tag_78:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":7202:7297 result[0] ==... */\n eq\n /* \"main.sol\":7181:7329 require(... */\n tag_80\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_81\n swap1\n tag_53\n jump\t// in\n tag_81:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_80:\n /* \"main.sol\":7389:7455 0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923 */\n 0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923\n /* \"main.sol\":7360:7455 result[1] ==... */\n 0x00\n shl\n /* \"main.sol\":7360:7366 result */\n dup2\n /* \"main.sol\":7367:7368 1 */\n 0x01\n /* \"main.sol\":7360:7369 result[1] */\n 0x02\n dup2\n lt\n tag_82\n jumpi\n tag_83\n tag_50\n jump\t// in\n tag_83:\n tag_82:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":7360:7455 result[1] ==... */\n eq\n /* \"main.sol\":7339:7487 require(... */\n tag_84\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_85\n swap1\n tag_53\n jump\t// in\n tag_85:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_84:\n /* \"main.sol\":6070:7494 {... */\n pop\n pop\n pop\n pop\n pop\n pop\n /* \"main.sol\":6040:7494 function blake2Check() public {... */\n jump\t// out\n /* \"main.sol\":285:1496 function bn128AdditionCheck() public {... */\n tag_19:\n /* \"main.sol\":332:344 bool success */\n 0x00\n /* \"main.sol\":354:377 uint256[4] memory input */\n dup1\n /* \"main.sol\":354:710 uint256[4] memory input = [... */\n mload(0x40)\n dup1\n 0x80\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":394:460 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703 */\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703\n /* \"main.sol\":354:710 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":474:540 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915 */\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915\n /* \"main.sol\":354:710 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":554:620 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9 */\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9\n /* \"main.sol\":354:710 uint256[4] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":634:700 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 */\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n /* \"main.sol\":354:710 uint256[4] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":720:744 uint256[2] memory result */\n tag_87\n tag_88\n jump\t// in\n tag_87:\n /* \"main.sol\":1101:1103 64 */\n 0x40\n /* \"main.sol\":1093:1099 result */\n dup2\n /* \"main.sol\":1088:1091 128 */\n 0x80\n /* \"main.sol\":1081:1086 input */\n dup5\n /* \"main.sol\":1078:1079 0 */\n 0x00\n /* \"main.sol\":1072:1076 0x06 */\n 0x06\n /* \"main.sol\":1068:1069 0 */\n 0x00\n /* \"main.sol\":1064:1070 not(0) */\n not\n /* \"main.sol\":1059:1104 call(not(0), 0x06, 0, input, 128, result, 64) */\n call\n /* \"main.sol\":1048:1104 success := call(not(0), 0x06, 0, input, 128, result, 64) */\n swap3\n pop\n /* \"main.sol\":1131:1138 success */\n dup3\n /* \"main.sol\":1123:1173 require(success, \"elliptic curve addition failed\") */\n tag_89\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_90\n swap1\n tag_91\n jump\t// in\n tag_90:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_89:\n /* \"main.sol\":1233:1299 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7 */\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7\n /* \"main.sol\":1204:1210 result */\n dup2\n /* \"main.sol\":1211:1212 0 */\n 0x00\n /* \"main.sol\":1204:1213 result[0] */\n 0x02\n dup2\n lt\n tag_92\n jumpi\n tag_93\n tag_50\n jump\t// in\n tag_93:\n tag_92:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1204:1299 result[0] ==... */\n eq\n /* \"main.sol\":1183:1331 require(... */\n tag_94\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_95\n swap1\n tag_53\n jump\t// in\n tag_95:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_94:\n /* \"main.sol\":1391:1457 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204 */\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204\n /* \"main.sol\":1362:1368 result */\n dup2\n /* \"main.sol\":1369:1370 1 */\n 0x01\n /* \"main.sol\":1362:1371 result[1] */\n 0x02\n dup2\n lt\n tag_96\n jumpi\n tag_97\n tag_50\n jump\t// in\n tag_97:\n tag_96:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":1362:1457 result[1] ==... */\n eq\n /* \"main.sol\":1341:1489 require(... */\n tag_98\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_99\n swap1\n tag_53\n jump\t// in\n tag_99:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_98:\n /* \"main.sol\":322:1496 {... */\n pop\n pop\n pop\n /* \"main.sol\":285:1496 function bn128AdditionCheck() public {... */\n jump\t// out\n /* \"main.sol\":5213:5345 function modExpChecker() public {... */\n tag_21:\n /* \"main.sol\":5289:5290 5 */\n 0x05\n /* \"main.sol\":5263:5285 modExpWrapper(3, 5, 7) */\n tag_101\n /* \"main.sol\":5277:5278 3 */\n 0x03\n /* \"main.sol\":5280:5281 5 */\n 0x05\n /* \"main.sol\":5283:5284 7 */\n 0x07\n /* \"main.sol\":5263:5276 modExpWrapper */\n tag_25\n /* \"main.sol\":5263:5285 modExpWrapper(3, 5, 7) */\n jump\t// in\n tag_101:\n /* \"main.sol\":5263:5290 modExpWrapper(3, 5, 7) == 5 */\n eq\n /* \"main.sol\":5255:5291 require(modExpWrapper(3, 5, 7) == 5) */\n tag_102\n jumpi\n 0x00\n dup1\n revert\n tag_102:\n /* \"main.sol\":5336:5337 3 */\n 0x03\n /* \"main.sol\":5309:5332 modExpWrapper(5, 7, 11) */\n tag_103\n /* \"main.sol\":5323:5324 5 */\n 0x05\n /* \"main.sol\":5326:5327 7 */\n 0x07\n /* \"main.sol\":5329:5331 11 */\n 0x0b\n /* \"main.sol\":5309:5322 modExpWrapper */\n tag_25\n /* \"main.sol\":5309:5332 modExpWrapper(5, 7, 11) */\n jump\t// in\n tag_103:\n /* \"main.sol\":5309:5337 modExpWrapper(5, 7, 11) == 3 */\n eq\n /* \"main.sol\":5301:5338 require(modExpWrapper(5, 7, 11) == 3) */\n tag_104\n jumpi\n 0x00\n dup1\n revert\n tag_104:\n /* \"main.sol\":5213:5345 function modExpChecker() public {... */\n jump\t// out\n /* \"main.sol\":4302:5207 function modExpWrapper(... */\n tag_25:\n /* \"main.sol\":4407:4421 uint256 result */\n 0x00\n /* \"main.sol\":4512:4516 0x40 */\n 0x40\n /* \"main.sol\":4506:4517 mload(0x40) */\n mload\n /* \"main.sol\":4623:4627 0x20 */\n 0x20\n /* \"main.sol\":4614:4621 pointer */\n dup2\n /* \"main.sol\":4607:4628 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":4668:4672 0x20 */\n 0x20\n /* \"main.sol\":4661:4665 0x20 */\n dup1\n /* \"main.sol\":4652:4659 pointer */\n dup3\n /* \"main.sol\":4648:4666 add(pointer, 0x20) */\n add\n /* \"main.sol\":4641:4673 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":4713:4717 0x20 */\n 0x20\n /* \"main.sol\":4706:4710 0x40 */\n 0x40\n /* \"main.sol\":4697:4704 pointer */\n dup3\n /* \"main.sol\":4693:4711 add(pointer, 0x40) */\n add\n /* \"main.sol\":4686:4718 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":4817:4819 _b */\n dup5\n /* \"main.sol\":4810:4814 0x60 */\n 0x60\n /* \"main.sol\":4801:4808 pointer */\n dup3\n /* \"main.sol\":4797:4815 add(pointer, 0x60) */\n add\n /* \"main.sol\":4790:4820 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":4860:4862 _e */\n dup4\n /* \"main.sol\":4853:4857 0x80 */\n 0x80\n /* \"main.sol\":4844:4851 pointer */\n dup3\n /* \"main.sol\":4840:4858 add(pointer, 0x80) */\n add\n /* \"main.sol\":4833:4863 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":4904:4906 _m */\n dup3\n /* \"main.sol\":4897:4901 0xa0 */\n 0xa0\n /* \"main.sol\":4888:4895 pointer */\n dup3\n /* \"main.sol\":4884:4902 add(pointer, 0xa0) */\n add\n /* \"main.sol\":4877:4907 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":4971:4975 0xc0 */\n 0xc0\n /* \"main.sol\":4965:4976 mload(0xc0) */\n mload\n /* \"main.sol\":5105:5109 0x20 */\n 0x20\n /* \"main.sol\":5098:5103 value */\n dup2\n /* \"main.sol\":5092:5096 0xc0 */\n 0xc0\n /* \"main.sol\":5083:5090 pointer */\n dup5\n /* \"main.sol\":5080:5081 0 */\n 0x00\n /* \"main.sol\":5074:5078 0x05 */\n 0x05\n /* \"main.sol\":5070:5071 0 */\n 0x00\n /* \"main.sol\":5066:5072 not(0) */\n not\n /* \"main.sol\":5061:5110 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":5051:5156 if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {... */\n tag_106\n jumpi\n /* \"main.sol\":5140:5141 0 */\n 0x00\n /* \"main.sol\":5137:5138 0 */\n dup1\n /* \"main.sol\":5130:5142 revert(0, 0) */\n revert\n /* \"main.sol\":5051:5156 if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {... */\n tag_106:\n /* \"main.sol\":5185:5190 value */\n dup1\n /* \"main.sol\":5179:5191 mload(value) */\n mload\n /* \"main.sol\":5169:5191 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":4442:5201 {... */\n pop\n pop\n /* \"main.sol\":4302:5207 function modExpWrapper(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":1502:2632 function bn128MultiplyCheck() public {... */\n tag_29:\n /* \"main.sol\":1549:1561 bool success */\n 0x00\n /* \"main.sol\":1571:1594 uint256[3] memory input */\n dup1\n /* \"main.sol\":1571:1847 uint256[3] memory input = [... */\n mload(0x40)\n dup1\n 0x60\n add\n 0x40\n mstore\n dup1\n /* \"main.sol\":1611:1677 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":1571:1847 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":1691:1757 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6 */\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6\n /* \"main.sol\":1571:1847 uint256[3] memory input = [... */\n dup2\n mstore\n 0x20\n add\n /* \"main.sol\":1771:1837 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 */\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n /* \"main.sol\":1571:1847 uint256[3] memory input = [... */\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1857:1881 uint256[2] memory result */\n tag_108\n tag_88\n jump\t// in\n tag_108:\n /* \"main.sol\":2237:2239 64 */\n 0x40\n /* \"main.sol\":2229:2235 result */\n dup2\n /* \"main.sol\":2225:2227 96 */\n 0x60\n /* \"main.sol\":2218:2223 input */\n dup5\n /* \"main.sol\":2215:2216 0 */\n 0x00\n /* \"main.sol\":2209:2213 0x07 */\n 0x07\n /* \"main.sol\":2205:2206 0 */\n 0x00\n /* \"main.sol\":2201:2207 not(0) */\n not\n /* \"main.sol\":2196:2240 call(not(0), 0x07, 0, input, 96, result, 64) */\n call\n /* \"main.sol\":2185:2240 success := call(not(0), 0x07, 0, input, 96, result, 64) */\n swap3\n pop\n /* \"main.sol\":2267:2274 success */\n dup3\n /* \"main.sol\":2259:2309 require(success, \"elliptic curve addition failed\") */\n tag_109\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_110\n swap1\n tag_91\n jump\t// in\n tag_110:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_109:\n /* \"main.sol\":2369:2435 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3 */\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3\n /* \"main.sol\":2340:2346 result */\n dup2\n /* \"main.sol\":2347:2348 0 */\n 0x00\n /* \"main.sol\":2340:2349 result[0] */\n 0x02\n dup2\n lt\n tag_111\n jumpi\n tag_112\n tag_50\n jump\t// in\n tag_112:\n tag_111:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":2340:2435 result[0] ==... */\n eq\n /* \"main.sol\":2319:2467 require(... */\n tag_113\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_114\n swap1\n tag_53\n jump\t// in\n tag_114:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_113:\n /* \"main.sol\":2527:2593 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451 */\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451\n /* \"main.sol\":2498:2504 result */\n dup2\n /* \"main.sol\":2505:2506 1 */\n 0x01\n /* \"main.sol\":2498:2507 result[1] */\n 0x02\n dup2\n lt\n tag_115\n jumpi\n tag_116\n tag_50\n jump\t// in\n tag_116:\n tag_115:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":2498:2593 result[1] ==... */\n eq\n /* \"main.sol\":2477:2625 require(... */\n tag_117\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_118\n swap1\n tag_53\n jump\t// in\n tag_118:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_117:\n /* \"main.sol\":1539:2632 {... */\n pop\n pop\n pop\n /* \"main.sol\":1502:2632 function bn128MultiplyCheck() public {... */\n jump\t// out\n /* \"main.sol\":5351:6034 function blake2Wrapper(... */\n tag_33:\n /* \"main.sol\":5526:5543 bytes32[2] memory */\n tag_119\n tag_56\n jump\t// in\n tag_119:\n /* \"main.sol\":5555:5579 bytes32[2] memory output */\n tag_121\n tag_56\n jump\t// in\n tag_121:\n /* \"main.sol\":5590:5607 bytes memory args */\n 0x00\n /* \"main.sol\":5640:5646 rounds */\n dup8\n /* \"main.sol\":5660:5661 h */\n dup8\n /* \"main.sol\":5662:5663 0 */\n 0x00\n /* \"main.sol\":5660:5664 h[0] */\n 0x02\n dup2\n lt\n tag_122\n jumpi\n tag_123\n tag_50\n jump\t// in\n tag_123:\n tag_122:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5678:5679 h */\n dup9\n /* \"main.sol\":5680:5681 1 */\n 0x01\n /* \"main.sol\":5678:5682 h[1] */\n 0x02\n dup2\n lt\n tag_124\n jumpi\n tag_125\n tag_50\n jump\t// in\n tag_125:\n tag_124:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5696:5697 m */\n dup9\n /* \"main.sol\":5698:5699 0 */\n 0x00\n /* \"main.sol\":5696:5700 m[0] */\n 0x04\n dup2\n lt\n tag_126\n jumpi\n tag_127\n tag_50\n jump\t// in\n tag_127:\n tag_126:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5714:5715 m */\n dup10\n /* \"main.sol\":5716:5717 1 */\n 0x01\n /* \"main.sol\":5714:5718 m[1] */\n 0x04\n dup2\n lt\n tag_128\n jumpi\n tag_129\n tag_50\n jump\t// in\n tag_129:\n tag_128:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5732:5733 m */\n dup11\n /* \"main.sol\":5734:5735 2 */\n 0x02\n /* \"main.sol\":5732:5736 m[2] */\n 0x04\n dup2\n lt\n tag_130\n jumpi\n tag_131\n tag_50\n jump\t// in\n tag_131:\n tag_130:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5750:5751 m */\n dup12\n /* \"main.sol\":5752:5753 3 */\n 0x03\n /* \"main.sol\":5750:5754 m[3] */\n 0x04\n dup2\n lt\n tag_132\n jumpi\n tag_133\n tag_50\n jump\t// in\n tag_133:\n tag_132:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5768:5769 t */\n dup12\n /* \"main.sol\":5770:5771 0 */\n 0x00\n /* \"main.sol\":5768:5772 t[0] */\n 0x02\n dup2\n lt\n tag_134\n jumpi\n tag_135\n tag_50\n jump\t// in\n tag_135:\n tag_134:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5786:5787 t */\n dup13\n /* \"main.sol\":5788:5789 1 */\n 0x01\n /* \"main.sol\":5786:5790 t[1] */\n 0x02\n dup2\n lt\n tag_136\n jumpi\n tag_137\n tag_50\n jump\t// in\n tag_137:\n tag_136:\n 0x20\n mul\n add\n mload\n /* \"main.sol\":5804:5805 f */\n dup13\n /* \"main.sol\":5610:5815 abi.encodePacked(... */\n add(0x20, mload(0x40))\n tag_138\n swap11\n swap10\n swap9\n swap8\n swap7\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_139\n jump\t// in\n tag_138:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n /* \"main.sol\":5590:5815 bytes memory args = abi.encodePacked(... */\n swap1\n pop\n /* \"main.sol\":5930:5934 0x40 */\n 0x40\n /* \"main.sol\":5922:5928 output */\n dup3\n /* \"main.sol\":5916:5920 0xd5 */\n 0xd5\n /* \"main.sol\":5911:5913 32 */\n 0x20\n /* \"main.sol\":5905:5909 args */\n dup5\n /* \"main.sol\":5901:5914 add(args, 32) */\n add\n /* \"main.sol\":5895:5899 0x09 */\n 0x09\n /* \"main.sol\":5891:5892 0 */\n 0x00\n /* \"main.sol\":5887:5893 not(0) */\n not\n /* \"main.sol\":5876:5935 staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40) */\n staticcall\n /* \"main.sol\":5849:5994 if iszero(... */\n tag_140\n jumpi\n /* \"main.sol\":5978:5979 0 */\n 0x00\n /* \"main.sol\":5975:5976 0 */\n dup1\n /* \"main.sol\":5968:5980 revert(0, 0) */\n revert\n /* \"main.sol\":5849:5994 if iszero(... */\n tag_140:\n /* \"main.sol\":6021:6027 output */\n dup2\n /* \"main.sol\":6014:6027 return output */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":5351:6034 function blake2Wrapper(... */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n tag_44:\n mload(0x40)\n dup1\n 0x20\n add\n 0x40\n mstore\n dup1\n 0x01\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n tag_56:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n tag_62:\n mload(0x40)\n dup1\n 0x80\n add\n 0x40\n mstore\n dup1\n 0x04\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n tag_72:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n tag_88:\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x02\n swap1\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_141:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_142:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:411 */\n tag_144:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\n tag_145:\n /* \"#utility.yul\":490:514 */\n tag_210\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_144\n jump\t// in\n tag_210:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_211\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\n tag_211:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:684 */\n tag_146:\n /* \"#utility.yul\":591:596 */\n 0x00\n /* \"#utility.yul\":629:635 */\n dup2\n /* \"#utility.yul\":616:636 */\n calldataload\n /* \"#utility.yul\":607:636 */\n swap1\n pop\n /* \"#utility.yul\":645:678 */\n tag_213\n /* \"#utility.yul\":672:677 */\n dup2\n /* \"#utility.yul\":645:678 */\n tag_145\n jump\t// in\n tag_213:\n /* \"#utility.yul\":545:684 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":690:1309 */\n tag_24:\n /* \"#utility.yul\":767:773 */\n 0x00\n /* \"#utility.yul\":775:781 */\n dup1\n /* \"#utility.yul\":783:789 */\n 0x00\n /* \"#utility.yul\":832:834 */\n 0x60\n /* \"#utility.yul\":820:829 */\n dup5\n /* \"#utility.yul\":811:818 */\n dup7\n /* \"#utility.yul\":807:830 */\n sub\n /* \"#utility.yul\":803:835 */\n slt\n /* \"#utility.yul\":800:919 */\n iszero\n tag_215\n jumpi\n /* \"#utility.yul\":838:917 */\n tag_216\n tag_142\n jump\t// in\n tag_216:\n /* \"#utility.yul\":800:919 */\n tag_215:\n /* \"#utility.yul\":958:959 */\n 0x00\n /* \"#utility.yul\":983:1036 */\n tag_217\n /* \"#utility.yul\":1028:1035 */\n dup7\n /* \"#utility.yul\":1019:1025 */\n dup3\n /* \"#utility.yul\":1008:1017 */\n dup8\n /* \"#utility.yul\":1004:1026 */\n add\n /* \"#utility.yul\":983:1036 */\n tag_146\n jump\t// in\n tag_217:\n /* \"#utility.yul\":973:1036 */\n swap4\n pop\n /* \"#utility.yul\":929:1046 */\n pop\n /* \"#utility.yul\":1085:1087 */\n 0x20\n /* \"#utility.yul\":1111:1164 */\n tag_218\n /* \"#utility.yul\":1156:1163 */\n dup7\n /* \"#utility.yul\":1147:1153 */\n dup3\n /* \"#utility.yul\":1136:1145 */\n dup8\n /* \"#utility.yul\":1132:1154 */\n add\n /* \"#utility.yul\":1111:1164 */\n tag_146\n jump\t// in\n tag_218:\n /* \"#utility.yul\":1101:1164 */\n swap3\n pop\n /* \"#utility.yul\":1056:1174 */\n pop\n /* \"#utility.yul\":1213:1215 */\n 0x40\n /* \"#utility.yul\":1239:1292 */\n tag_219\n /* \"#utility.yul\":1284:1291 */\n dup7\n /* \"#utility.yul\":1275:1281 */\n dup3\n /* \"#utility.yul\":1264:1273 */\n dup8\n /* \"#utility.yul\":1260:1282 */\n add\n /* \"#utility.yul\":1239:1292 */\n tag_146\n jump\t// in\n tag_219:\n /* \"#utility.yul\":1229:1292 */\n swap2\n pop\n /* \"#utility.yul\":1184:1302 */\n pop\n /* \"#utility.yul\":690:1309 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":1315:1433 */\n tag_147:\n /* \"#utility.yul\":1402:1426 */\n tag_221\n /* \"#utility.yul\":1420:1425 */\n dup2\n /* \"#utility.yul\":1402:1426 */\n tag_144\n jump\t// in\n tag_221:\n /* \"#utility.yul\":1397:1400 */\n dup3\n /* \"#utility.yul\":1390:1427 */\n mstore\n /* \"#utility.yul\":1315:1433 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1439:1661 */\n tag_27:\n /* \"#utility.yul\":1532:1536 */\n 0x00\n /* \"#utility.yul\":1570:1572 */\n 0x20\n /* \"#utility.yul\":1559:1568 */\n dup3\n /* \"#utility.yul\":1555:1573 */\n add\n /* \"#utility.yul\":1547:1573 */\n swap1\n pop\n /* \"#utility.yul\":1583:1654 */\n tag_223\n /* \"#utility.yul\":1651:1652 */\n 0x00\n /* \"#utility.yul\":1640:1649 */\n dup4\n /* \"#utility.yul\":1636:1653 */\n add\n /* \"#utility.yul\":1627:1633 */\n dup5\n /* \"#utility.yul\":1583:1654 */\n tag_147\n jump\t// in\n tag_223:\n /* \"#utility.yul\":1439:1661 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1667:1760 */\n tag_148:\n /* \"#utility.yul\":1703:1710 */\n 0x00\n /* \"#utility.yul\":1743:1753 */\n 0xffffffff\n /* \"#utility.yul\":1736:1741 */\n dup3\n /* \"#utility.yul\":1732:1754 */\n and\n /* \"#utility.yul\":1721:1754 */\n swap1\n pop\n /* \"#utility.yul\":1667:1760 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1766:1886 */\n tag_149:\n /* \"#utility.yul\":1838:1861 */\n tag_226\n /* \"#utility.yul\":1855:1860 */\n dup2\n /* \"#utility.yul\":1838:1861 */\n tag_148\n jump\t// in\n tag_226:\n /* \"#utility.yul\":1831:1836 */\n dup2\n /* \"#utility.yul\":1828:1862 */\n eq\n /* \"#utility.yul\":1818:1880 */\n tag_227\n jumpi\n /* \"#utility.yul\":1876:1877 */\n 0x00\n /* \"#utility.yul\":1873:1874 */\n dup1\n /* \"#utility.yul\":1866:1878 */\n revert\n /* \"#utility.yul\":1818:1880 */\n tag_227:\n /* \"#utility.yul\":1766:1886 */\n pop\n jump\t// out\n /* \"#utility.yul\":1892:2029 */\n tag_150:\n /* \"#utility.yul\":1937:1942 */\n 0x00\n /* \"#utility.yul\":1975:1981 */\n dup2\n /* \"#utility.yul\":1962:1982 */\n calldataload\n /* \"#utility.yul\":1953:1982 */\n swap1\n pop\n /* \"#utility.yul\":1991:2023 */\n tag_229\n /* \"#utility.yul\":2017:2022 */\n dup2\n /* \"#utility.yul\":1991:2023 */\n tag_149\n jump\t// in\n tag_229:\n /* \"#utility.yul\":1892:2029 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2035:2152 */\n tag_151:\n /* \"#utility.yul\":2144:2145 */\n 0x00\n /* \"#utility.yul\":2141:2142 */\n dup1\n /* \"#utility.yul\":2134:2146 */\n revert\n /* \"#utility.yul\":2158:2260 */\n tag_152:\n /* \"#utility.yul\":2199:2205 */\n 0x00\n /* \"#utility.yul\":2250:2252 */\n 0x1f\n /* \"#utility.yul\":2246:2253 */\n not\n /* \"#utility.yul\":2241:2243 */\n 0x1f\n /* \"#utility.yul\":2234:2239 */\n dup4\n /* \"#utility.yul\":2230:2244 */\n add\n /* \"#utility.yul\":2226:2254 */\n and\n /* \"#utility.yul\":2216:2254 */\n swap1\n pop\n /* \"#utility.yul\":2158:2260 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2266:2446 */\n tag_153:\n /* \"#utility.yul\":2314:2391 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2311:2312 */\n 0x00\n /* \"#utility.yul\":2304:2392 */\n mstore\n /* \"#utility.yul\":2411:2415 */\n 0x41\n /* \"#utility.yul\":2408:2409 */\n 0x04\n /* \"#utility.yul\":2401:2416 */\n mstore\n /* \"#utility.yul\":2435:2439 */\n 0x24\n /* \"#utility.yul\":2432:2433 */\n 0x00\n /* \"#utility.yul\":2425:2440 */\n revert\n /* \"#utility.yul\":2452:2733 */\n tag_154:\n /* \"#utility.yul\":2535:2562 */\n tag_234\n /* \"#utility.yul\":2557:2561 */\n dup3\n /* \"#utility.yul\":2535:2562 */\n tag_152\n jump\t// in\n tag_234:\n /* \"#utility.yul\":2527:2533 */\n dup2\n /* \"#utility.yul\":2523:2563 */\n add\n /* \"#utility.yul\":2665:2671 */\n dup2\n /* \"#utility.yul\":2653:2663 */\n dup2\n /* \"#utility.yul\":2650:2672 */\n lt\n /* \"#utility.yul\":2629:2647 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2617:2627 */\n dup3\n /* \"#utility.yul\":2614:2648 */\n gt\n /* \"#utility.yul\":2611:2673 */\n or\n /* \"#utility.yul\":2608:2696 */\n iszero\n tag_235\n jumpi\n /* \"#utility.yul\":2676:2694 */\n tag_236\n tag_153\n jump\t// in\n tag_236:\n /* \"#utility.yul\":2608:2696 */\n tag_235:\n /* \"#utility.yul\":2716:2726 */\n dup1\n /* \"#utility.yul\":2712:2714 */\n 0x40\n /* \"#utility.yul\":2705:2727 */\n mstore\n /* \"#utility.yul\":2495:2733 */\n pop\n /* \"#utility.yul\":2452:2733 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2739:2868 */\n tag_155:\n /* \"#utility.yul\":2773:2779 */\n 0x00\n /* \"#utility.yul\":2800:2820 */\n tag_238\n tag_141\n jump\t// in\n tag_238:\n /* \"#utility.yul\":2790:2820 */\n swap1\n pop\n /* \"#utility.yul\":2829:2862 */\n tag_239\n /* \"#utility.yul\":2857:2861 */\n dup3\n /* \"#utility.yul\":2849:2855 */\n dup3\n /* \"#utility.yul\":2829:2862 */\n tag_154\n jump\t// in\n tag_239:\n /* \"#utility.yul\":2739:2868 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2874:3123 */\n tag_156:\n /* \"#utility.yul\":2949:2953 */\n 0x00\n /* \"#utility.yul\":3039:3057 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3031:3037 */\n dup3\n /* \"#utility.yul\":3028:3058 */\n gt\n /* \"#utility.yul\":3025:3081 */\n iszero\n tag_241\n jumpi\n /* \"#utility.yul\":3061:3079 */\n tag_242\n tag_153\n jump\t// in\n tag_242:\n /* \"#utility.yul\":3025:3081 */\n tag_241:\n /* \"#utility.yul\":3111:3115 */\n 0x20\n /* \"#utility.yul\":3103:3109 */\n dup3\n /* \"#utility.yul\":3099:3116 */\n mul\n /* \"#utility.yul\":3091:3116 */\n swap1\n pop\n /* \"#utility.yul\":2874:3123 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3129:3246 */\n tag_157:\n /* \"#utility.yul\":3238:3239 */\n 0x00\n /* \"#utility.yul\":3235:3236 */\n dup1\n /* \"#utility.yul\":3228:3240 */\n revert\n /* \"#utility.yul\":3252:3329 */\n tag_158:\n /* \"#utility.yul\":3289:3296 */\n 0x00\n /* \"#utility.yul\":3318:3323 */\n dup2\n /* \"#utility.yul\":3307:3323 */\n swap1\n pop\n /* \"#utility.yul\":3252:3329 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3335:3457 */\n tag_159:\n /* \"#utility.yul\":3408:3432 */\n tag_246\n /* \"#utility.yul\":3426:3431 */\n dup2\n /* \"#utility.yul\":3408:3432 */\n tag_158\n jump\t// in\n tag_246:\n /* \"#utility.yul\":3401:3406 */\n dup2\n /* \"#utility.yul\":3398:3433 */\n eq\n /* \"#utility.yul\":3388:3451 */\n tag_247\n jumpi\n /* \"#utility.yul\":3447:3448 */\n 0x00\n /* \"#utility.yul\":3444:3445 */\n dup1\n /* \"#utility.yul\":3437:3449 */\n revert\n /* \"#utility.yul\":3388:3451 */\n tag_247:\n /* \"#utility.yul\":3335:3457 */\n pop\n jump\t// out\n /* \"#utility.yul\":3463:3602 */\n tag_160:\n /* \"#utility.yul\":3509:3514 */\n 0x00\n /* \"#utility.yul\":3547:3553 */\n dup2\n /* \"#utility.yul\":3534:3554 */\n calldataload\n /* \"#utility.yul\":3525:3554 */\n swap1\n pop\n /* \"#utility.yul\":3563:3596 */\n tag_249\n /* \"#utility.yul\":3590:3595 */\n dup2\n /* \"#utility.yul\":3563:3596 */\n tag_159\n jump\t// in\n tag_249:\n /* \"#utility.yul\":3463:3602 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3626:4269 */\n tag_161:\n /* \"#utility.yul\":3720:3725 */\n 0x00\n /* \"#utility.yul\":3745:3824 */\n tag_251\n /* \"#utility.yul\":3761:3823 */\n tag_252\n /* \"#utility.yul\":3816:3822 */\n dup5\n /* \"#utility.yul\":3761:3823 */\n tag_156\n jump\t// in\n tag_252:\n /* \"#utility.yul\":3745:3824 */\n tag_155\n jump\t// in\n tag_251:\n /* \"#utility.yul\":3736:3824 */\n swap1\n pop\n /* \"#utility.yul\":3844:3849 */\n dup1\n /* \"#utility.yul\":3897:3901 */\n 0x20\n /* \"#utility.yul\":3889:3895 */\n dup5\n /* \"#utility.yul\":3885:3902 */\n mul\n /* \"#utility.yul\":3877:3883 */\n dup4\n /* \"#utility.yul\":3873:3903 */\n add\n /* \"#utility.yul\":3926:3929 */\n dup6\n /* \"#utility.yul\":3918:3924 */\n dup2\n /* \"#utility.yul\":3915:3930 */\n gt\n /* \"#utility.yul\":3912:4034 */\n iszero\n tag_253\n jumpi\n /* \"#utility.yul\":3945:4024 */\n tag_254\n tag_157\n jump\t// in\n tag_254:\n /* \"#utility.yul\":3912:4034 */\n tag_253:\n /* \"#utility.yul\":4060:4066 */\n dup4\n /* \"#utility.yul\":4043:4263 */\n tag_255:\n /* \"#utility.yul\":4077:4083 */\n dup2\n /* \"#utility.yul\":4072:4075 */\n dup2\n /* \"#utility.yul\":4069:4084 */\n lt\n /* \"#utility.yul\":4043:4263 */\n iszero\n tag_257\n jumpi\n /* \"#utility.yul\":4152:4155 */\n dup1\n /* \"#utility.yul\":4181:4218 */\n tag_258\n /* \"#utility.yul\":4214:4217 */\n dup9\n /* \"#utility.yul\":4202:4212 */\n dup3\n /* \"#utility.yul\":4181:4218 */\n tag_160\n jump\t// in\n tag_258:\n /* \"#utility.yul\":4176:4179 */\n dup5\n /* \"#utility.yul\":4169:4219 */\n mstore\n /* \"#utility.yul\":4248:4252 */\n 0x20\n /* \"#utility.yul\":4243:4246 */\n dup5\n /* \"#utility.yul\":4239:4253 */\n add\n /* \"#utility.yul\":4232:4253 */\n swap4\n pop\n /* \"#utility.yul\":4119:4263 */\n pop\n /* \"#utility.yul\":4103:4107 */\n 0x20\n /* \"#utility.yul\":4098:4101 */\n dup2\n /* \"#utility.yul\":4094:4108 */\n add\n /* \"#utility.yul\":4087:4108 */\n swap1\n pop\n /* \"#utility.yul\":4043:4263 */\n jump(tag_255)\n tag_257:\n /* \"#utility.yul\":4047:4068 */\n pop\n /* \"#utility.yul\":3726:4269 */\n pop\n pop\n /* \"#utility.yul\":3626:4269 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4293:4632 */\n tag_162:\n /* \"#utility.yul\":4362:4367 */\n 0x00\n /* \"#utility.yul\":4411:4414 */\n dup3\n /* \"#utility.yul\":4404:4408 */\n 0x1f\n /* \"#utility.yul\":4396:4402 */\n dup4\n /* \"#utility.yul\":4392:4409 */\n add\n /* \"#utility.yul\":4388:4415 */\n slt\n /* \"#utility.yul\":4378:4500 */\n tag_260\n jumpi\n /* \"#utility.yul\":4419:4498 */\n tag_261\n tag_151\n jump\t// in\n tag_261:\n /* \"#utility.yul\":4378:4500 */\n tag_260:\n /* \"#utility.yul\":4523:4527 */\n 0x02\n /* \"#utility.yul\":4545:4626 */\n tag_262\n /* \"#utility.yul\":4622:4625 */\n dup5\n /* \"#utility.yul\":4614:4620 */\n dup3\n /* \"#utility.yul\":4606:4612 */\n dup6\n /* \"#utility.yul\":4545:4626 */\n tag_161\n jump\t// in\n tag_262:\n /* \"#utility.yul\":4536:4626 */\n swap2\n pop\n /* \"#utility.yul\":4368:4632 */\n pop\n /* \"#utility.yul\":4293:4632 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4638:4887 */\n tag_163:\n /* \"#utility.yul\":4713:4717 */\n 0x00\n /* \"#utility.yul\":4803:4821 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4795:4801 */\n dup3\n /* \"#utility.yul\":4792:4822 */\n gt\n /* \"#utility.yul\":4789:4845 */\n iszero\n tag_264\n jumpi\n /* \"#utility.yul\":4825:4843 */\n tag_265\n tag_153\n jump\t// in\n tag_265:\n /* \"#utility.yul\":4789:4845 */\n tag_264:\n /* \"#utility.yul\":4875:4879 */\n 0x20\n /* \"#utility.yul\":4867:4873 */\n dup3\n /* \"#utility.yul\":4863:4880 */\n mul\n /* \"#utility.yul\":4855:4880 */\n swap1\n pop\n /* \"#utility.yul\":4638:4887 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4911:5554 */\n tag_164:\n /* \"#utility.yul\":5005:5010 */\n 0x00\n /* \"#utility.yul\":5030:5109 */\n tag_267\n /* \"#utility.yul\":5046:5108 */\n tag_268\n /* \"#utility.yul\":5101:5107 */\n dup5\n /* \"#utility.yul\":5046:5108 */\n tag_163\n jump\t// in\n tag_268:\n /* \"#utility.yul\":5030:5109 */\n tag_155\n jump\t// in\n tag_267:\n /* \"#utility.yul\":5021:5109 */\n swap1\n pop\n /* \"#utility.yul\":5129:5134 */\n dup1\n /* \"#utility.yul\":5182:5186 */\n 0x20\n /* \"#utility.yul\":5174:5180 */\n dup5\n /* \"#utility.yul\":5170:5187 */\n mul\n /* \"#utility.yul\":5162:5168 */\n dup4\n /* \"#utility.yul\":5158:5188 */\n add\n /* \"#utility.yul\":5211:5214 */\n dup6\n /* \"#utility.yul\":5203:5209 */\n dup2\n /* \"#utility.yul\":5200:5215 */\n gt\n /* \"#utility.yul\":5197:5319 */\n iszero\n tag_269\n jumpi\n /* \"#utility.yul\":5230:5309 */\n tag_270\n tag_157\n jump\t// in\n tag_270:\n /* \"#utility.yul\":5197:5319 */\n tag_269:\n /* \"#utility.yul\":5345:5351 */\n dup4\n /* \"#utility.yul\":5328:5548 */\n tag_271:\n /* \"#utility.yul\":5362:5368 */\n dup2\n /* \"#utility.yul\":5357:5360 */\n dup2\n /* \"#utility.yul\":5354:5369 */\n lt\n /* \"#utility.yul\":5328:5548 */\n iszero\n tag_273\n jumpi\n /* \"#utility.yul\":5437:5440 */\n dup1\n /* \"#utility.yul\":5466:5503 */\n tag_274\n /* \"#utility.yul\":5499:5502 */\n dup9\n /* \"#utility.yul\":5487:5497 */\n dup3\n /* \"#utility.yul\":5466:5503 */\n tag_160\n jump\t// in\n tag_274:\n /* \"#utility.yul\":5461:5464 */\n dup5\n /* \"#utility.yul\":5454:5504 */\n mstore\n /* \"#utility.yul\":5533:5537 */\n 0x20\n /* \"#utility.yul\":5528:5531 */\n dup5\n /* \"#utility.yul\":5524:5538 */\n add\n /* \"#utility.yul\":5517:5538 */\n swap4\n pop\n /* \"#utility.yul\":5404:5548 */\n pop\n /* \"#utility.yul\":5388:5392 */\n 0x20\n /* \"#utility.yul\":5383:5386 */\n dup2\n /* \"#utility.yul\":5379:5393 */\n add\n /* \"#utility.yul\":5372:5393 */\n swap1\n pop\n /* \"#utility.yul\":5328:5548 */\n jump(tag_271)\n tag_273:\n /* \"#utility.yul\":5332:5353 */\n pop\n /* \"#utility.yul\":5011:5554 */\n pop\n pop\n /* \"#utility.yul\":4911:5554 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5578:5917 */\n tag_165:\n /* \"#utility.yul\":5647:5652 */\n 0x00\n /* \"#utility.yul\":5696:5699 */\n dup3\n /* \"#utility.yul\":5689:5693 */\n 0x1f\n /* \"#utility.yul\":5681:5687 */\n dup4\n /* \"#utility.yul\":5677:5694 */\n add\n /* \"#utility.yul\":5673:5700 */\n slt\n /* \"#utility.yul\":5663:5785 */\n tag_276\n jumpi\n /* \"#utility.yul\":5704:5783 */\n tag_277\n tag_151\n jump\t// in\n tag_277:\n /* \"#utility.yul\":5663:5785 */\n tag_276:\n /* \"#utility.yul\":5808:5812 */\n 0x04\n /* \"#utility.yul\":5830:5911 */\n tag_278\n /* \"#utility.yul\":5907:5910 */\n dup5\n /* \"#utility.yul\":5899:5905 */\n dup3\n /* \"#utility.yul\":5891:5897 */\n dup6\n /* \"#utility.yul\":5830:5911 */\n tag_164\n jump\t// in\n tag_278:\n /* \"#utility.yul\":5821:5911 */\n swap2\n pop\n /* \"#utility.yul\":5653:5917 */\n pop\n /* \"#utility.yul\":5578:5917 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5923:6171 */\n tag_166:\n /* \"#utility.yul\":5997:6001 */\n 0x00\n /* \"#utility.yul\":6087:6105 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6079:6085 */\n dup3\n /* \"#utility.yul\":6076:6106 */\n gt\n /* \"#utility.yul\":6073:6129 */\n iszero\n tag_280\n jumpi\n /* \"#utility.yul\":6109:6127 */\n tag_281\n tag_153\n jump\t// in\n tag_281:\n /* \"#utility.yul\":6073:6129 */\n tag_280:\n /* \"#utility.yul\":6159:6163 */\n 0x20\n /* \"#utility.yul\":6151:6157 */\n dup3\n /* \"#utility.yul\":6147:6164 */\n mul\n /* \"#utility.yul\":6139:6164 */\n swap1\n pop\n /* \"#utility.yul\":5923:6171 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6177:6326 */\n tag_167:\n /* \"#utility.yul\":6213:6220 */\n 0x00\n /* \"#utility.yul\":6253:6319 */\n 0xffffffffffffffff000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":6246:6251 */\n dup3\n /* \"#utility.yul\":6242:6320 */\n and\n /* \"#utility.yul\":6231:6320 */\n swap1\n pop\n /* \"#utility.yul\":6177:6326 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6332:6452 */\n tag_168:\n /* \"#utility.yul\":6404:6427 */\n tag_284\n /* \"#utility.yul\":6421:6426 */\n dup2\n /* \"#utility.yul\":6404:6427 */\n tag_167\n jump\t// in\n tag_284:\n /* \"#utility.yul\":6397:6402 */\n dup2\n /* \"#utility.yul\":6394:6428 */\n eq\n /* \"#utility.yul\":6384:6446 */\n tag_285\n jumpi\n /* \"#utility.yul\":6442:6443 */\n 0x00\n /* \"#utility.yul\":6439:6440 */\n dup1\n /* \"#utility.yul\":6432:6444 */\n revert\n /* \"#utility.yul\":6384:6446 */\n tag_285:\n /* \"#utility.yul\":6332:6452 */\n pop\n jump\t// out\n /* \"#utility.yul\":6458:6595 */\n tag_169:\n /* \"#utility.yul\":6503:6508 */\n 0x00\n /* \"#utility.yul\":6541:6547 */\n dup2\n /* \"#utility.yul\":6528:6548 */\n calldataload\n /* \"#utility.yul\":6519:6548 */\n swap1\n pop\n /* \"#utility.yul\":6557:6589 */\n tag_287\n /* \"#utility.yul\":6583:6588 */\n dup2\n /* \"#utility.yul\":6557:6589 */\n tag_168\n jump\t// in\n tag_287:\n /* \"#utility.yul\":6458:6595 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6618:7258 */\n tag_170:\n /* \"#utility.yul\":6711:6716 */\n 0x00\n /* \"#utility.yul\":6736:6814 */\n tag_289\n /* \"#utility.yul\":6752:6813 */\n tag_290\n /* \"#utility.yul\":6806:6812 */\n dup5\n /* \"#utility.yul\":6752:6813 */\n tag_166\n jump\t// in\n tag_290:\n /* \"#utility.yul\":6736:6814 */\n tag_155\n jump\t// in\n tag_289:\n /* \"#utility.yul\":6727:6814 */\n swap1\n pop\n /* \"#utility.yul\":6834:6839 */\n dup1\n /* \"#utility.yul\":6887:6891 */\n 0x20\n /* \"#utility.yul\":6879:6885 */\n dup5\n /* \"#utility.yul\":6875:6892 */\n mul\n /* \"#utility.yul\":6867:6873 */\n dup4\n /* \"#utility.yul\":6863:6893 */\n add\n /* \"#utility.yul\":6916:6919 */\n dup6\n /* \"#utility.yul\":6908:6914 */\n dup2\n /* \"#utility.yul\":6905:6920 */\n gt\n /* \"#utility.yul\":6902:7024 */\n iszero\n tag_291\n jumpi\n /* \"#utility.yul\":6935:7014 */\n tag_292\n tag_157\n jump\t// in\n tag_292:\n /* \"#utility.yul\":6902:7024 */\n tag_291:\n /* \"#utility.yul\":7050:7056 */\n dup4\n /* \"#utility.yul\":7033:7252 */\n tag_293:\n /* \"#utility.yul\":7067:7073 */\n dup2\n /* \"#utility.yul\":7062:7065 */\n dup2\n /* \"#utility.yul\":7059:7074 */\n lt\n /* \"#utility.yul\":7033:7252 */\n iszero\n tag_295\n jumpi\n /* \"#utility.yul\":7142:7145 */\n dup1\n /* \"#utility.yul\":7171:7207 */\n tag_296\n /* \"#utility.yul\":7203:7206 */\n dup9\n /* \"#utility.yul\":7191:7201 */\n dup3\n /* \"#utility.yul\":7171:7207 */\n tag_169\n jump\t// in\n tag_296:\n /* \"#utility.yul\":7166:7169 */\n dup5\n /* \"#utility.yul\":7159:7208 */\n mstore\n /* \"#utility.yul\":7237:7241 */\n 0x20\n /* \"#utility.yul\":7232:7235 */\n dup5\n /* \"#utility.yul\":7228:7242 */\n add\n /* \"#utility.yul\":7221:7242 */\n swap4\n pop\n /* \"#utility.yul\":7109:7252 */\n pop\n /* \"#utility.yul\":7093:7097 */\n 0x20\n /* \"#utility.yul\":7088:7091 */\n dup2\n /* \"#utility.yul\":7084:7098 */\n add\n /* \"#utility.yul\":7077:7098 */\n swap1\n pop\n /* \"#utility.yul\":7033:7252 */\n jump(tag_293)\n tag_295:\n /* \"#utility.yul\":7037:7058 */\n pop\n /* \"#utility.yul\":6717:7258 */\n pop\n pop\n /* \"#utility.yul\":6618:7258 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7281:7618 */\n tag_171:\n /* \"#utility.yul\":7349:7354 */\n 0x00\n /* \"#utility.yul\":7398:7401 */\n dup3\n /* \"#utility.yul\":7391:7395 */\n 0x1f\n /* \"#utility.yul\":7383:7389 */\n dup4\n /* \"#utility.yul\":7379:7396 */\n add\n /* \"#utility.yul\":7375:7402 */\n slt\n /* \"#utility.yul\":7365:7487 */\n tag_298\n jumpi\n /* \"#utility.yul\":7406:7485 */\n tag_299\n tag_151\n jump\t// in\n tag_299:\n /* \"#utility.yul\":7365:7487 */\n tag_298:\n /* \"#utility.yul\":7510:7514 */\n 0x02\n /* \"#utility.yul\":7532:7612 */\n tag_300\n /* \"#utility.yul\":7608:7611 */\n dup5\n /* \"#utility.yul\":7600:7606 */\n dup3\n /* \"#utility.yul\":7592:7598 */\n dup6\n /* \"#utility.yul\":7532:7612 */\n tag_170\n jump\t// in\n tag_300:\n /* \"#utility.yul\":7523:7612 */\n swap2\n pop\n /* \"#utility.yul\":7355:7618 */\n pop\n /* \"#utility.yul\":7281:7618 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7624:7714 */\n tag_172:\n /* \"#utility.yul\":7658:7665 */\n 0x00\n /* \"#utility.yul\":7701:7706 */\n dup2\n /* \"#utility.yul\":7694:7707 */\n iszero\n /* \"#utility.yul\":7687:7708 */\n iszero\n /* \"#utility.yul\":7676:7708 */\n swap1\n pop\n /* \"#utility.yul\":7624:7714 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7720:7836 */\n tag_173:\n /* \"#utility.yul\":7790:7811 */\n tag_303\n /* \"#utility.yul\":7805:7810 */\n dup2\n /* \"#utility.yul\":7790:7811 */\n tag_172\n jump\t// in\n tag_303:\n /* \"#utility.yul\":7783:7788 */\n dup2\n /* \"#utility.yul\":7780:7812 */\n eq\n /* \"#utility.yul\":7770:7830 */\n tag_304\n jumpi\n /* \"#utility.yul\":7826:7827 */\n 0x00\n /* \"#utility.yul\":7823:7824 */\n dup1\n /* \"#utility.yul\":7816:7828 */\n revert\n /* \"#utility.yul\":7770:7830 */\n tag_304:\n /* \"#utility.yul\":7720:7836 */\n pop\n jump\t// out\n /* \"#utility.yul\":7842:7975 */\n tag_174:\n /* \"#utility.yul\":7885:7890 */\n 0x00\n /* \"#utility.yul\":7923:7929 */\n dup2\n /* \"#utility.yul\":7910:7930 */\n calldataload\n /* \"#utility.yul\":7901:7930 */\n swap1\n pop\n /* \"#utility.yul\":7939:7969 */\n tag_306\n /* \"#utility.yul\":7963:7968 */\n dup2\n /* \"#utility.yul\":7939:7969 */\n tag_173\n jump\t// in\n tag_306:\n /* \"#utility.yul\":7842:7975 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7981:9021 */\n tag_32:\n /* \"#utility.yul\":8140:8146 */\n 0x00\n /* \"#utility.yul\":8148:8154 */\n dup1\n /* \"#utility.yul\":8156:8162 */\n 0x00\n /* \"#utility.yul\":8164:8170 */\n dup1\n /* \"#utility.yul\":8172:8178 */\n 0x00\n /* \"#utility.yul\":8221:8224 */\n 0x0140\n /* \"#utility.yul\":8209:8218 */\n dup7\n /* \"#utility.yul\":8200:8207 */\n dup9\n /* \"#utility.yul\":8196:8219 */\n sub\n /* \"#utility.yul\":8192:8225 */\n slt\n /* \"#utility.yul\":8189:8309 */\n iszero\n tag_308\n jumpi\n /* \"#utility.yul\":8228:8307 */\n tag_309\n tag_142\n jump\t// in\n tag_309:\n /* \"#utility.yul\":8189:8309 */\n tag_308:\n /* \"#utility.yul\":8348:8349 */\n 0x00\n /* \"#utility.yul\":8373:8425 */\n tag_310\n /* \"#utility.yul\":8417:8424 */\n dup9\n /* \"#utility.yul\":8408:8414 */\n dup3\n /* \"#utility.yul\":8397:8406 */\n dup10\n /* \"#utility.yul\":8393:8415 */\n add\n /* \"#utility.yul\":8373:8425 */\n tag_150\n jump\t// in\n tag_310:\n /* \"#utility.yul\":8363:8425 */\n swap6\n pop\n /* \"#utility.yul\":8319:8435 */\n pop\n /* \"#utility.yul\":8474:8476 */\n 0x20\n /* \"#utility.yul\":8500:8576 */\n tag_311\n /* \"#utility.yul\":8568:8575 */\n dup9\n /* \"#utility.yul\":8559:8565 */\n dup3\n /* \"#utility.yul\":8548:8557 */\n dup10\n /* \"#utility.yul\":8544:8566 */\n add\n /* \"#utility.yul\":8500:8576 */\n tag_162\n jump\t// in\n tag_311:\n /* \"#utility.yul\":8490:8576 */\n swap5\n pop\n /* \"#utility.yul\":8445:8586 */\n pop\n /* \"#utility.yul\":8625:8627 */\n 0x60\n /* \"#utility.yul\":8651:8727 */\n tag_312\n /* \"#utility.yul\":8719:8726 */\n dup9\n /* \"#utility.yul\":8710:8716 */\n dup3\n /* \"#utility.yul\":8699:8708 */\n dup10\n /* \"#utility.yul\":8695:8717 */\n add\n /* \"#utility.yul\":8651:8727 */\n tag_165\n jump\t// in\n tag_312:\n /* \"#utility.yul\":8641:8727 */\n swap4\n pop\n /* \"#utility.yul\":8596:8737 */\n pop\n /* \"#utility.yul\":8776:8779 */\n 0xe0\n /* \"#utility.yul\":8803:8878 */\n tag_313\n /* \"#utility.yul\":8870:8877 */\n dup9\n /* \"#utility.yul\":8861:8867 */\n dup3\n /* \"#utility.yul\":8850:8859 */\n dup10\n /* \"#utility.yul\":8846:8868 */\n add\n /* \"#utility.yul\":8803:8878 */\n tag_171\n jump\t// in\n tag_313:\n /* \"#utility.yul\":8793:8878 */\n swap3\n pop\n /* \"#utility.yul\":8747:8888 */\n pop\n /* \"#utility.yul\":8927:8930 */\n 0x0120\n /* \"#utility.yul\":8954:9004 */\n tag_314\n /* \"#utility.yul\":8996:9003 */\n dup9\n /* \"#utility.yul\":8987:8993 */\n dup3\n /* \"#utility.yul\":8976:8985 */\n dup10\n /* \"#utility.yul\":8972:8994 */\n add\n /* \"#utility.yul\":8954:9004 */\n tag_174\n jump\t// in\n tag_314:\n /* \"#utility.yul\":8944:9004 */\n swap2\n pop\n /* \"#utility.yul\":8898:9014 */\n pop\n /* \"#utility.yul\":7981:9021 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":9027:9131 */\n tag_175:\n /* \"#utility.yul\":9092:9098 */\n 0x00\n /* \"#utility.yul\":9120:9124 */\n 0x02\n /* \"#utility.yul\":9110:9124 */\n swap1\n pop\n /* \"#utility.yul\":9027:9131 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":9137:9280 */\n tag_176:\n /* \"#utility.yul\":9234:9245 */\n 0x00\n /* \"#utility.yul\":9271:9274 */\n dup2\n /* \"#utility.yul\":9256:9274 */\n swap1\n pop\n /* \"#utility.yul\":9137:9280 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9286:9384 */\n tag_177:\n /* \"#utility.yul\":9351:9355 */\n 0x00\n /* \"#utility.yul\":9374:9377 */\n dup2\n /* \"#utility.yul\":9366:9377 */\n swap1\n pop\n /* \"#utility.yul\":9286:9384 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":9390:9498 */\n tag_178:\n /* \"#utility.yul\":9467:9491 */\n tag_319\n /* \"#utility.yul\":9485:9490 */\n dup2\n /* \"#utility.yul\":9467:9491 */\n tag_158\n jump\t// in\n tag_319:\n /* \"#utility.yul\":9462:9465 */\n dup3\n /* \"#utility.yul\":9455:9492 */\n mstore\n /* \"#utility.yul\":9390:9498 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9504:9683 */\n tag_179:\n /* \"#utility.yul\":9573:9583 */\n 0x00\n /* \"#utility.yul\":9594:9640 */\n tag_321\n /* \"#utility.yul\":9636:9639 */\n dup4\n /* \"#utility.yul\":9628:9634 */\n dup4\n /* \"#utility.yul\":9594:9640 */\n tag_178\n jump\t// in\n tag_321:\n /* \"#utility.yul\":9672:9676 */\n 0x20\n /* \"#utility.yul\":9667:9670 */\n dup4\n /* \"#utility.yul\":9663:9677 */\n add\n /* \"#utility.yul\":9649:9677 */\n swap1\n pop\n /* \"#utility.yul\":9504:9683 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9689:9800 */\n tag_180:\n /* \"#utility.yul\":9757:9761 */\n 0x00\n /* \"#utility.yul\":9789:9793 */\n 0x20\n /* \"#utility.yul\":9784:9787 */\n dup3\n /* \"#utility.yul\":9780:9794 */\n add\n /* \"#utility.yul\":9772:9794 */\n swap1\n pop\n /* \"#utility.yul\":9689:9800 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":9838:10532 */\n tag_181:\n /* \"#utility.yul\":9974:10026 */\n tag_324\n /* \"#utility.yul\":10020:10025 */\n dup2\n /* \"#utility.yul\":9974:10026 */\n tag_175\n jump\t// in\n tag_324:\n /* \"#utility.yul\":10042:10126 */\n tag_325\n /* \"#utility.yul\":10119:10125 */\n dup2\n /* \"#utility.yul\":10114:10117 */\n dup5\n /* \"#utility.yul\":10042:10126 */\n tag_176\n jump\t// in\n tag_325:\n /* \"#utility.yul\":10035:10126 */\n swap3\n pop\n /* \"#utility.yul\":10150:10204 */\n tag_326\n /* \"#utility.yul\":10198:10203 */\n dup3\n /* \"#utility.yul\":10150:10204 */\n tag_177\n jump\t// in\n tag_326:\n /* \"#utility.yul\":10227:10234 */\n dup1\n /* \"#utility.yul\":10258:10259 */\n 0x00\n /* \"#utility.yul\":10243:10525 */\n tag_327:\n /* \"#utility.yul\":10268:10274 */\n dup4\n /* \"#utility.yul\":10265:10266 */\n dup2\n /* \"#utility.yul\":10262:10275 */\n lt\n /* \"#utility.yul\":10243:10525 */\n iszero\n tag_329\n jumpi\n /* \"#utility.yul\":10344:10350 */\n dup2\n /* \"#utility.yul\":10338:10351 */\n mload\n /* \"#utility.yul\":10371:10434 */\n tag_330\n /* \"#utility.yul\":10430:10433 */\n dup8\n /* \"#utility.yul\":10415:10428 */\n dup3\n /* \"#utility.yul\":10371:10434 */\n tag_179\n jump\t// in\n tag_330:\n /* \"#utility.yul\":10364:10434 */\n swap7\n pop\n /* \"#utility.yul\":10457:10515 */\n tag_331\n /* \"#utility.yul\":10508:10514 */\n dup4\n /* \"#utility.yul\":10457:10515 */\n tag_180\n jump\t// in\n tag_331:\n /* \"#utility.yul\":10447:10515 */\n swap3\n pop\n /* \"#utility.yul\":10303:10525 */\n pop\n /* \"#utility.yul\":10290:10291 */\n 0x01\n /* \"#utility.yul\":10287:10288 */\n dup2\n /* \"#utility.yul\":10283:10292 */\n add\n /* \"#utility.yul\":10278:10292 */\n swap1\n pop\n /* \"#utility.yul\":10243:10525 */\n jump(tag_327)\n tag_329:\n /* \"#utility.yul\":10247:10261 */\n pop\n /* \"#utility.yul\":9950:10532 */\n pop\n pop\n pop\n /* \"#utility.yul\":9838:10532 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10538:10852 */\n tag_35:\n /* \"#utility.yul\":10677:10681 */\n 0x00\n /* \"#utility.yul\":10715:10717 */\n 0x40\n /* \"#utility.yul\":10704:10713 */\n dup3\n /* \"#utility.yul\":10700:10718 */\n add\n /* \"#utility.yul\":10692:10718 */\n swap1\n pop\n /* \"#utility.yul\":10728:10845 */\n tag_333\n /* \"#utility.yul\":10842:10843 */\n 0x00\n /* \"#utility.yul\":10831:10840 */\n dup4\n /* \"#utility.yul\":10827:10844 */\n add\n /* \"#utility.yul\":10818:10824 */\n dup5\n /* \"#utility.yul\":10728:10845 */\n tag_181\n jump\t// in\n tag_333:\n /* \"#utility.yul\":10538:10852 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10858:10956 */\n tag_182:\n /* \"#utility.yul\":10909:10915 */\n 0x00\n /* \"#utility.yul\":10943:10948 */\n dup2\n /* \"#utility.yul\":10937:10949 */\n mload\n /* \"#utility.yul\":10927:10949 */\n swap1\n pop\n /* \"#utility.yul\":10858:10956 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10962:11109 */\n tag_183:\n /* \"#utility.yul\":11063:11074 */\n 0x00\n /* \"#utility.yul\":11100:11103 */\n dup2\n /* \"#utility.yul\":11085:11103 */\n swap1\n pop\n /* \"#utility.yul\":10962:11109 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11115:11422 */\n tag_184:\n /* \"#utility.yul\":11183:11184 */\n 0x00\n /* \"#utility.yul\":11193:11306 */\n tag_337:\n /* \"#utility.yul\":11207:11213 */\n dup4\n /* \"#utility.yul\":11204:11205 */\n dup2\n /* \"#utility.yul\":11201:11214 */\n lt\n /* \"#utility.yul\":11193:11306 */\n iszero\n tag_339\n jumpi\n /* \"#utility.yul\":11292:11293 */\n dup1\n /* \"#utility.yul\":11287:11290 */\n dup3\n /* \"#utility.yul\":11283:11294 */\n add\n /* \"#utility.yul\":11277:11295 */\n mload\n /* \"#utility.yul\":11273:11274 */\n dup2\n /* \"#utility.yul\":11268:11271 */\n dup5\n /* \"#utility.yul\":11264:11275 */\n add\n /* \"#utility.yul\":11257:11296 */\n mstore\n /* \"#utility.yul\":11229:11231 */\n 0x20\n /* \"#utility.yul\":11226:11227 */\n dup2\n /* \"#utility.yul\":11222:11232 */\n add\n /* \"#utility.yul\":11217:11232 */\n swap1\n pop\n /* \"#utility.yul\":11193:11306 */\n jump(tag_337)\n tag_339:\n /* \"#utility.yul\":11324:11330 */\n dup4\n /* \"#utility.yul\":11321:11322 */\n dup2\n /* \"#utility.yul\":11318:11331 */\n gt\n /* \"#utility.yul\":11315:11416 */\n iszero\n tag_340\n jumpi\n /* \"#utility.yul\":11404:11405 */\n 0x00\n /* \"#utility.yul\":11395:11401 */\n dup5\n /* \"#utility.yul\":11390:11393 */\n dup5\n /* \"#utility.yul\":11386:11402 */\n add\n /* \"#utility.yul\":11379:11406 */\n mstore\n /* \"#utility.yul\":11315:11416 */\n tag_340:\n /* \"#utility.yul\":11164:11422 */\n pop\n /* \"#utility.yul\":11115:11422 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11428:11801 */\n tag_185:\n /* \"#utility.yul\":11532:11535 */\n 0x00\n /* \"#utility.yul\":11560:11598 */\n tag_342\n /* \"#utility.yul\":11592:11597 */\n dup3\n /* \"#utility.yul\":11560:11598 */\n tag_182\n jump\t// in\n tag_342:\n /* \"#utility.yul\":11614:11702 */\n tag_343\n /* \"#utility.yul\":11695:11701 */\n dup2\n /* \"#utility.yul\":11690:11693 */\n dup6\n /* \"#utility.yul\":11614:11702 */\n tag_183\n jump\t// in\n tag_343:\n /* \"#utility.yul\":11607:11702 */\n swap4\n pop\n /* \"#utility.yul\":11711:11763 */\n tag_344\n /* \"#utility.yul\":11756:11762 */\n dup2\n /* \"#utility.yul\":11751:11754 */\n dup6\n /* \"#utility.yul\":11744:11748 */\n 0x20\n /* \"#utility.yul\":11737:11742 */\n dup7\n /* \"#utility.yul\":11733:11749 */\n add\n /* \"#utility.yul\":11711:11763 */\n tag_184\n jump\t// in\n tag_344:\n /* \"#utility.yul\":11788:11794 */\n dup1\n /* \"#utility.yul\":11783:11786 */\n dup5\n /* \"#utility.yul\":11779:11795 */\n add\n /* \"#utility.yul\":11772:11795 */\n swap2\n pop\n /* \"#utility.yul\":11536:11801 */\n pop\n /* \"#utility.yul\":11428:11801 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11807:12078 */\n tag_38:\n /* \"#utility.yul\":11937:11940 */\n 0x00\n /* \"#utility.yul\":11959:12052 */\n tag_346\n /* \"#utility.yul\":12048:12051 */\n dup3\n /* \"#utility.yul\":12039:12045 */\n dup5\n /* \"#utility.yul\":11959:12052 */\n tag_185\n jump\t// in\n tag_346:\n /* \"#utility.yul\":11952:12052 */\n swap2\n pop\n /* \"#utility.yul\":12069:12072 */\n dup2\n /* \"#utility.yul\":12062:12072 */\n swap1\n pop\n /* \"#utility.yul\":11807:12078 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12084:12253 */\n tag_186:\n /* \"#utility.yul\":12168:12179 */\n 0x00\n /* \"#utility.yul\":12202:12208 */\n dup3\n /* \"#utility.yul\":12197:12200 */\n dup3\n /* \"#utility.yul\":12190:12209 */\n mstore\n /* \"#utility.yul\":12242:12246 */\n 0x20\n /* \"#utility.yul\":12237:12240 */\n dup3\n /* \"#utility.yul\":12233:12247 */\n add\n /* \"#utility.yul\":12218:12247 */\n swap1\n pop\n /* \"#utility.yul\":12084:12253 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12259:12438 */\n tag_187:\n /* \"#utility.yul\":12399:12430 */\n 0x656c6c69707469632063757276652070616972696e67206661696c6564000000\n /* \"#utility.yul\":12395:12396 */\n 0x00\n /* \"#utility.yul\":12387:12393 */\n dup3\n /* \"#utility.yul\":12383:12397 */\n add\n /* \"#utility.yul\":12376:12431 */\n mstore\n /* \"#utility.yul\":12259:12438 */\n pop\n jump\t// out\n /* \"#utility.yul\":12444:12810 */\n tag_188:\n /* \"#utility.yul\":12586:12589 */\n 0x00\n /* \"#utility.yul\":12607:12674 */\n tag_350\n /* \"#utility.yul\":12671:12673 */\n 0x1d\n /* \"#utility.yul\":12666:12669 */\n dup4\n /* \"#utility.yul\":12607:12674 */\n tag_186\n jump\t// in\n tag_350:\n /* \"#utility.yul\":12600:12674 */\n swap2\n pop\n /* \"#utility.yul\":12683:12776 */\n tag_351\n /* \"#utility.yul\":12772:12775 */\n dup3\n /* \"#utility.yul\":12683:12776 */\n tag_187\n jump\t// in\n tag_351:\n /* \"#utility.yul\":12801:12803 */\n 0x20\n /* \"#utility.yul\":12796:12799 */\n dup3\n /* \"#utility.yul\":12792:12804 */\n add\n /* \"#utility.yul\":12785:12804 */\n swap1\n pop\n /* \"#utility.yul\":12444:12810 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12816:13235 */\n tag_47:\n /* \"#utility.yul\":12982:12986 */\n 0x00\n /* \"#utility.yul\":13020:13022 */\n 0x20\n /* \"#utility.yul\":13009:13018 */\n dup3\n /* \"#utility.yul\":13005:13023 */\n add\n /* \"#utility.yul\":12997:13023 */\n swap1\n pop\n /* \"#utility.yul\":13069:13078 */\n dup2\n /* \"#utility.yul\":13063:13067 */\n dup2\n /* \"#utility.yul\":13059:13079 */\n sub\n /* \"#utility.yul\":13055:13056 */\n 0x00\n /* \"#utility.yul\":13044:13053 */\n dup4\n /* \"#utility.yul\":13040:13057 */\n add\n /* \"#utility.yul\":13033:13080 */\n mstore\n /* \"#utility.yul\":13097:13228 */\n tag_353\n /* \"#utility.yul\":13223:13227 */\n dup2\n /* \"#utility.yul\":13097:13228 */\n tag_188\n jump\t// in\n tag_353:\n /* \"#utility.yul\":13089:13228 */\n swap1\n pop\n /* \"#utility.yul\":12816:13235 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13241:13421 */\n tag_50:\n /* \"#utility.yul\":13289:13366 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":13286:13287 */\n 0x00\n /* \"#utility.yul\":13279:13367 */\n mstore\n /* \"#utility.yul\":13386:13390 */\n 0x32\n /* \"#utility.yul\":13383:13384 */\n 0x04\n /* \"#utility.yul\":13376:13391 */\n mstore\n /* \"#utility.yul\":13410:13414 */\n 0x24\n /* \"#utility.yul\":13407:13408 */\n 0x00\n /* \"#utility.yul\":13400:13415 */\n revert\n /* \"#utility.yul\":13427:13583 */\n tag_189:\n /* \"#utility.yul\":13567:13575 */\n 0x6661696c65640000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":13563:13564 */\n 0x00\n /* \"#utility.yul\":13555:13561 */\n dup3\n /* \"#utility.yul\":13551:13565 */\n add\n /* \"#utility.yul\":13544:13576 */\n mstore\n /* \"#utility.yul\":13427:13583 */\n pop\n jump\t// out\n /* \"#utility.yul\":13589:13954 */\n tag_190:\n /* \"#utility.yul\":13731:13734 */\n 0x00\n /* \"#utility.yul\":13752:13818 */\n tag_357\n /* \"#utility.yul\":13816:13817 */\n 0x06\n /* \"#utility.yul\":13811:13814 */\n dup4\n /* \"#utility.yul\":13752:13818 */\n tag_186\n jump\t// in\n tag_357:\n /* \"#utility.yul\":13745:13818 */\n swap2\n pop\n /* \"#utility.yul\":13827:13920 */\n tag_358\n /* \"#utility.yul\":13916:13919 */\n dup3\n /* \"#utility.yul\":13827:13920 */\n tag_189\n jump\t// in\n tag_358:\n /* \"#utility.yul\":13945:13947 */\n 0x20\n /* \"#utility.yul\":13940:13943 */\n dup3\n /* \"#utility.yul\":13936:13948 */\n add\n /* \"#utility.yul\":13929:13948 */\n swap1\n pop\n /* \"#utility.yul\":13589:13954 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13960:14379 */\n tag_53:\n /* \"#utility.yul\":14126:14130 */\n 0x00\n /* \"#utility.yul\":14164:14166 */\n 0x20\n /* \"#utility.yul\":14153:14162 */\n dup3\n /* \"#utility.yul\":14149:14167 */\n add\n /* \"#utility.yul\":14141:14167 */\n swap1\n pop\n /* \"#utility.yul\":14213:14222 */\n dup2\n /* \"#utility.yul\":14207:14211 */\n dup2\n /* \"#utility.yul\":14203:14223 */\n sub\n /* \"#utility.yul\":14199:14200 */\n 0x00\n /* \"#utility.yul\":14188:14197 */\n dup4\n /* \"#utility.yul\":14184:14201 */\n add\n /* \"#utility.yul\":14177:14224 */\n mstore\n /* \"#utility.yul\":14241:14372 */\n tag_360\n /* \"#utility.yul\":14367:14371 */\n dup2\n /* \"#utility.yul\":14241:14372 */\n tag_190\n jump\t// in\n tag_360:\n /* \"#utility.yul\":14233:14372 */\n swap1\n pop\n /* \"#utility.yul\":13960:14379 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":14385:14565 */\n tag_191:\n /* \"#utility.yul\":14525:14557 */\n 0x656c6c6970746963206375727665206164646974696f6e206661696c65640000\n /* \"#utility.yul\":14521:14522 */\n 0x00\n /* \"#utility.yul\":14513:14519 */\n dup3\n /* \"#utility.yul\":14509:14523 */\n add\n /* \"#utility.yul\":14502:14558 */\n mstore\n /* \"#utility.yul\":14385:14565 */\n pop\n jump\t// out\n /* \"#utility.yul\":14571:14937 */\n tag_192:\n /* \"#utility.yul\":14713:14716 */\n 0x00\n /* \"#utility.yul\":14734:14801 */\n tag_363\n /* \"#utility.yul\":14798:14800 */\n 0x1e\n /* \"#utility.yul\":14793:14796 */\n dup4\n /* \"#utility.yul\":14734:14801 */\n tag_186\n jump\t// in\n tag_363:\n /* \"#utility.yul\":14727:14801 */\n swap2\n pop\n /* \"#utility.yul\":14810:14903 */\n tag_364\n /* \"#utility.yul\":14899:14902 */\n dup3\n /* \"#utility.yul\":14810:14903 */\n tag_191\n jump\t// in\n tag_364:\n /* \"#utility.yul\":14928:14930 */\n 0x20\n /* \"#utility.yul\":14923:14926 */\n dup3\n /* \"#utility.yul\":14919:14931 */\n add\n /* \"#utility.yul\":14912:14931 */\n swap1\n pop\n /* \"#utility.yul\":14571:14937 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":14943:15362 */\n tag_91:\n /* \"#utility.yul\":15109:15113 */\n 0x00\n /* \"#utility.yul\":15147:15149 */\n 0x20\n /* \"#utility.yul\":15136:15145 */\n dup3\n /* \"#utility.yul\":15132:15150 */\n add\n /* \"#utility.yul\":15124:15150 */\n swap1\n pop\n /* \"#utility.yul\":15196:15205 */\n dup2\n /* \"#utility.yul\":15190:15194 */\n dup2\n /* \"#utility.yul\":15186:15206 */\n sub\n /* \"#utility.yul\":15182:15183 */\n 0x00\n /* \"#utility.yul\":15171:15180 */\n dup4\n /* \"#utility.yul\":15167:15184 */\n add\n /* \"#utility.yul\":15160:15207 */\n mstore\n /* \"#utility.yul\":15224:15355 */\n tag_366\n /* \"#utility.yul\":15350:15354 */\n dup2\n /* \"#utility.yul\":15224:15355 */\n tag_192\n jump\t// in\n tag_366:\n /* \"#utility.yul\":15216:15355 */\n swap1\n pop\n /* \"#utility.yul\":14943:15362 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":15368:15464 */\n tag_193:\n /* \"#utility.yul\":15402:15410 */\n 0x00\n /* \"#utility.yul\":15451:15456 */\n dup2\n /* \"#utility.yul\":15446:15449 */\n 0xe0\n /* \"#utility.yul\":15442:15457 */\n shl\n /* \"#utility.yul\":15421:15457 */\n swap1\n pop\n /* \"#utility.yul\":15368:15464 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":15470:15564 */\n tag_194:\n /* \"#utility.yul\":15508:15515 */\n 0x00\n /* \"#utility.yul\":15537:15558 */\n tag_369\n /* \"#utility.yul\":15552:15557 */\n dup3\n /* \"#utility.yul\":15537:15558 */\n tag_193\n jump\t// in\n tag_369:\n /* \"#utility.yul\":15526:15558 */\n swap1\n pop\n /* \"#utility.yul\":15470:15564 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":15570:15723 */\n tag_195:\n /* \"#utility.yul\":15673:15716 */\n tag_371\n /* \"#utility.yul\":15692:15715 */\n tag_372\n /* \"#utility.yul\":15709:15714 */\n dup3\n /* \"#utility.yul\":15692:15715 */\n tag_148\n jump\t// in\n tag_372:\n /* \"#utility.yul\":15673:15716 */\n tag_194\n jump\t// in\n tag_371:\n /* \"#utility.yul\":15668:15671 */\n dup3\n /* \"#utility.yul\":15661:15717 */\n mstore\n /* \"#utility.yul\":15570:15723 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15729:15808 */\n tag_196:\n /* \"#utility.yul\":15768:15775 */\n 0x00\n /* \"#utility.yul\":15797:15802 */\n dup2\n /* \"#utility.yul\":15786:15802 */\n swap1\n pop\n /* \"#utility.yul\":15729:15808 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":15814:15971 */\n tag_197:\n /* \"#utility.yul\":15919:15964 */\n tag_375\n /* \"#utility.yul\":15939:15963 */\n tag_376\n /* \"#utility.yul\":15957:15962 */\n dup3\n /* \"#utility.yul\":15939:15963 */\n tag_158\n jump\t// in\n tag_376:\n /* \"#utility.yul\":15919:15964 */\n tag_196\n jump\t// in\n tag_375:\n /* \"#utility.yul\":15914:15917 */\n dup3\n /* \"#utility.yul\":15907:15965 */\n mstore\n /* \"#utility.yul\":15814:15971 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15977:16055 */\n tag_198:\n /* \"#utility.yul\":16015:16022 */\n 0x00\n /* \"#utility.yul\":16044:16049 */\n dup2\n /* \"#utility.yul\":16033:16049 */\n swap1\n pop\n /* \"#utility.yul\":15977:16055 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16061:16214 */\n tag_199:\n /* \"#utility.yul\":16164:16207 */\n tag_379\n /* \"#utility.yul\":16183:16206 */\n tag_380\n /* \"#utility.yul\":16200:16205 */\n dup3\n /* \"#utility.yul\":16183:16206 */\n tag_167\n jump\t// in\n tag_380:\n /* \"#utility.yul\":16164:16207 */\n tag_198\n jump\t// in\n tag_379:\n /* \"#utility.yul\":16159:16162 */\n dup3\n /* \"#utility.yul\":16152:16208 */\n mstore\n /* \"#utility.yul\":16061:16214 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16220:16316 */\n tag_200:\n /* \"#utility.yul\":16254:16262 */\n 0x00\n /* \"#utility.yul\":16303:16308 */\n dup2\n /* \"#utility.yul\":16298:16301 */\n 0xf8\n /* \"#utility.yul\":16294:16309 */\n shl\n /* \"#utility.yul\":16273:16309 */\n swap1\n pop\n /* \"#utility.yul\":16220:16316 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16322:16415 */\n tag_201:\n /* \"#utility.yul\":16359:16366 */\n 0x00\n /* \"#utility.yul\":16388:16409 */\n tag_383\n /* \"#utility.yul\":16403:16408 */\n dup3\n /* \"#utility.yul\":16388:16409 */\n tag_200\n jump\t// in\n tag_383:\n /* \"#utility.yul\":16377:16409 */\n swap1\n pop\n /* \"#utility.yul\":16322:16415 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16421:16516 */\n tag_202:\n /* \"#utility.yul\":16457:16464 */\n 0x00\n /* \"#utility.yul\":16486:16510 */\n tag_385\n /* \"#utility.yul\":16504:16509 */\n dup3\n /* \"#utility.yul\":16486:16510 */\n tag_201\n jump\t// in\n tag_385:\n /* \"#utility.yul\":16475:16510 */\n swap1\n pop\n /* \"#utility.yul\":16421:16516 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16522:16667 */\n tag_203:\n /* \"#utility.yul\":16621:16660 */\n tag_387\n /* \"#utility.yul\":16638:16659 */\n tag_388\n /* \"#utility.yul\":16653:16658 */\n dup3\n /* \"#utility.yul\":16638:16659 */\n tag_172\n jump\t// in\n tag_388:\n /* \"#utility.yul\":16621:16660 */\n tag_202\n jump\t// in\n tag_387:\n /* \"#utility.yul\":16616:16619 */\n dup3\n /* \"#utility.yul\":16609:16661 */\n mstore\n /* \"#utility.yul\":16522:16667 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16673:18170 */\n tag_139:\n /* \"#utility.yul\":17025:17028 */\n 0x00\n /* \"#utility.yul\":17040:17113 */\n tag_390\n /* \"#utility.yul\":17109:17112 */\n dup3\n /* \"#utility.yul\":17100:17106 */\n dup14\n /* \"#utility.yul\":17040:17113 */\n tag_195\n jump\t// in\n tag_390:\n /* \"#utility.yul\":17138:17139 */\n 0x04\n /* \"#utility.yul\":17133:17136 */\n dup3\n /* \"#utility.yul\":17129:17140 */\n add\n /* \"#utility.yul\":17122:17140 */\n swap2\n pop\n /* \"#utility.yul\":17150:17225 */\n tag_391\n /* \"#utility.yul\":17221:17224 */\n dup3\n /* \"#utility.yul\":17212:17218 */\n dup13\n /* \"#utility.yul\":17150:17225 */\n tag_197\n jump\t// in\n tag_391:\n /* \"#utility.yul\":17250:17252 */\n 0x20\n /* \"#utility.yul\":17245:17248 */\n dup3\n /* \"#utility.yul\":17241:17253 */\n add\n /* \"#utility.yul\":17234:17253 */\n swap2\n pop\n /* \"#utility.yul\":17263:17338 */\n tag_392\n /* \"#utility.yul\":17334:17337 */\n dup3\n /* \"#utility.yul\":17325:17331 */\n dup12\n /* \"#utility.yul\":17263:17338 */\n tag_197\n jump\t// in\n tag_392:\n /* \"#utility.yul\":17363:17365 */\n 0x20\n /* \"#utility.yul\":17358:17361 */\n dup3\n /* \"#utility.yul\":17354:17366 */\n add\n /* \"#utility.yul\":17347:17366 */\n swap2\n pop\n /* \"#utility.yul\":17376:17451 */\n tag_393\n /* \"#utility.yul\":17447:17450 */\n dup3\n /* \"#utility.yul\":17438:17444 */\n dup11\n /* \"#utility.yul\":17376:17451 */\n tag_197\n jump\t// in\n tag_393:\n /* \"#utility.yul\":17476:17478 */\n 0x20\n /* \"#utility.yul\":17471:17474 */\n dup3\n /* \"#utility.yul\":17467:17479 */\n add\n /* \"#utility.yul\":17460:17479 */\n swap2\n pop\n /* \"#utility.yul\":17489:17564 */\n tag_394\n /* \"#utility.yul\":17560:17563 */\n dup3\n /* \"#utility.yul\":17551:17557 */\n dup10\n /* \"#utility.yul\":17489:17564 */\n tag_197\n jump\t// in\n tag_394:\n /* \"#utility.yul\":17589:17591 */\n 0x20\n /* \"#utility.yul\":17584:17587 */\n dup3\n /* \"#utility.yul\":17580:17592 */\n add\n /* \"#utility.yul\":17573:17592 */\n swap2\n pop\n /* \"#utility.yul\":17602:17677 */\n tag_395\n /* \"#utility.yul\":17673:17676 */\n dup3\n /* \"#utility.yul\":17664:17670 */\n dup9\n /* \"#utility.yul\":17602:17677 */\n tag_197\n jump\t// in\n tag_395:\n /* \"#utility.yul\":17702:17704 */\n 0x20\n /* \"#utility.yul\":17697:17700 */\n dup3\n /* \"#utility.yul\":17693:17705 */\n add\n /* \"#utility.yul\":17686:17705 */\n swap2\n pop\n /* \"#utility.yul\":17715:17790 */\n tag_396\n /* \"#utility.yul\":17786:17789 */\n dup3\n /* \"#utility.yul\":17777:17783 */\n dup8\n /* \"#utility.yul\":17715:17790 */\n tag_197\n jump\t// in\n tag_396:\n /* \"#utility.yul\":17815:17817 */\n 0x20\n /* \"#utility.yul\":17810:17813 */\n dup3\n /* \"#utility.yul\":17806:17818 */\n add\n /* \"#utility.yul\":17799:17818 */\n swap2\n pop\n /* \"#utility.yul\":17828:17901 */\n tag_397\n /* \"#utility.yul\":17897:17900 */\n dup3\n /* \"#utility.yul\":17888:17894 */\n dup7\n /* \"#utility.yul\":17828:17901 */\n tag_199\n jump\t// in\n tag_397:\n /* \"#utility.yul\":17926:17927 */\n 0x08\n /* \"#utility.yul\":17921:17924 */\n dup3\n /* \"#utility.yul\":17917:17928 */\n add\n /* \"#utility.yul\":17910:17928 */\n swap2\n pop\n /* \"#utility.yul\":17938:18011 */\n tag_398\n /* \"#utility.yul\":18007:18010 */\n dup3\n /* \"#utility.yul\":17998:18004 */\n dup6\n /* \"#utility.yul\":17938:18011 */\n tag_199\n jump\t// in\n tag_398:\n /* \"#utility.yul\":18036:18037 */\n 0x08\n /* \"#utility.yul\":18031:18034 */\n dup3\n /* \"#utility.yul\":18027:18038 */\n add\n /* \"#utility.yul\":18020:18038 */\n swap2\n pop\n /* \"#utility.yul\":18048:18117 */\n tag_399\n /* \"#utility.yul\":18113:18116 */\n dup3\n /* \"#utility.yul\":18104:18110 */\n dup5\n /* \"#utility.yul\":18048:18117 */\n tag_203\n jump\t// in\n tag_399:\n /* \"#utility.yul\":18142:18143 */\n 0x01\n /* \"#utility.yul\":18137:18140 */\n dup3\n /* \"#utility.yul\":18133:18144 */\n add\n /* \"#utility.yul\":18126:18144 */\n swap2\n pop\n /* \"#utility.yul\":18161:18164 */\n dup2\n /* \"#utility.yul\":18154:18164 */\n swap1\n pop\n /* \"#utility.yul\":16673:18170 */\n swap12\n swap11\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122079cfdf99f34c525bb4072cde2303cdaeca4e75666256549f1f713f0ea3ec58ce64736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50611711806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063985762481161005b57806398576248146100b5578063ab26c7f8146100bf578063c9a6e474146100ef578063cb5c707c146100f957610088565b806328820a241461008d578063503a67721461009757806360012e3a146100a15780638588cc9c146100ab575b600080fd5b610095610129565b005b61009f6101d1565b005b6100a9610464565b005b6100b361077f565b005b6100bd610976565b005b6100d960048036038101906100d49190610de7565b6109ac565b6040516100e69190610e49565b60405180910390f35b6100f76109fb565b005b610113600480360381019061010e919061120f565b610bcc565b6040516101209190611337565b60405180910390f35b7f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161018f91906113cc565b602060405180830381855afa1580156101ac573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146101cf57600080fd5b565b60006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506103af610cf8565b600060208261018085600060086107d05a03f1905080610404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fb90611440565b60405180910390fd5b60018260006001811061041a57610419611460565b5b60200201511461045f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610456906114db565b60405180910390fd5b505050565b6000600c9050610472610d1a565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5816000600281106104a7576104a6611460565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b816001600281106104e5576104e4611460565b5b6020020181815250506104f6610d3c565b7f61626300000000000000000000000000000000000000000000000000000000008160006004811061052b5761052a611460565b5b60200201818152505060008160016004811061054a57610549611460565b5b60200201818152505060008160026004811061056957610568611460565b5b60200201818152505060008160036004811061058857610587611460565b5b602002018181525050610599610d5e565b7f0300000000000000000000000000000000000000000000000000000000000000816000600281106105ce576105cd611460565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff19168152505060008160016002811061062557610624611460565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff191681525050600060019050600061067b8686868686610bcc565b90507fba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d160001b816000600281106106b5576106b4611460565b5b6020020151146106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906114db565b60405180910390fd5b7f7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd400992360001b8160016002811061073257610731611460565b5b602002015114610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e906114db565b60405180910390fd5b505050505050565b60008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266815250905061082d610d80565b60408160808460006006600019f192508261087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490611547565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7816000600281106108b2576108b1611460565b5b6020020151146108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee906114db565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061092c5761092b611460565b5b602002015114610971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610968906114db565b60405180910390fd5b505050565b60056109866003600560076109ac565b1461099057600080fd5b60036109a060056007600b6109ac565b146109aa57600080fd5b565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16109ee57600080fd5b8051925050509392505050565b60008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610a83610d80565b60408160608460006007600019f1925082610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90611547565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610b0857610b07611460565b5b602002015114610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b44906114db565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae083045181600160028110610b8257610b81611460565b5b602002015114610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe906114db565b60405180910390fd5b505050565b610bd4610d1a565b610bdc610d1a565b60008787600060028110610bf357610bf2611460565b5b602002015188600160028110610c0c57610c0b611460565b5b602002015188600060048110610c2557610c24611460565b5b602002015189600160048110610c3e57610c3d611460565b5b60200201518a600260048110610c5757610c56611460565b5b60200201518b600360048110610c7057610c6f611460565b5b60200201518b600060028110610c8957610c88611460565b5b60200201518c600160028110610ca257610ca1611460565b5b60200201518c604051602001610cc19a99989796959493929190611627565b604051602081830303815290604052905060408260d5602084016009600019fa610cea57600080fd5b819250505095945050505050565b6040518060200160405280600190602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b6000819050919050565b610dc481610db1565b8114610dcf57600080fd5b50565b600081359050610de181610dbb565b92915050565b600080600060608486031215610e0057610dff610dac565b5b6000610e0e86828701610dd2565b9350506020610e1f86828701610dd2565b9250506040610e3086828701610dd2565b9150509250925092565b610e4381610db1565b82525050565b6000602082019050610e5e6000830184610e3a565b92915050565b600063ffffffff82169050919050565b610e7d81610e64565b8114610e8857600080fd5b50565b600081359050610e9a81610e74565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610eee82610ea5565b810181811067ffffffffffffffff82111715610f0d57610f0c610eb6565b5b80604052505050565b6000610f20610da2565b9050610f2c8282610ee5565b919050565b600067ffffffffffffffff821115610f4c57610f4b610eb6565b5b602082029050919050565b600080fd5b6000819050919050565b610f6f81610f5c565b8114610f7a57600080fd5b50565b600081359050610f8c81610f66565b92915050565b6000610fa5610fa084610f31565b610f16565b90508060208402830185811115610fbf57610fbe610f57565b5b835b81811015610fe85780610fd48882610f7d565b845260208401935050602081019050610fc1565b5050509392505050565b600082601f83011261100757611006610ea0565b5b6002611014848285610f92565b91505092915050565b600067ffffffffffffffff82111561103857611037610eb6565b5b602082029050919050565b60006110566110518461101d565b610f16565b905080602084028301858111156110705761106f610f57565b5b835b8181101561109957806110858882610f7d565b845260208401935050602081019050611072565b5050509392505050565b600082601f8301126110b8576110b7610ea0565b5b60046110c5848285611043565b91505092915050565b600067ffffffffffffffff8211156110e9576110e8610eb6565b5b602082029050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b611129816110f4565b811461113457600080fd5b50565b60008135905061114681611120565b92915050565b600061115f61115a846110ce565b610f16565b9050806020840283018581111561117957611178610f57565b5b835b818110156111a2578061118e8882611137565b84526020840193505060208101905061117b565b5050509392505050565b600082601f8301126111c1576111c0610ea0565b5b60026111ce84828561114c565b91505092915050565b60008115159050919050565b6111ec816111d7565b81146111f757600080fd5b50565b600081359050611209816111e3565b92915050565b6000806000806000610140868803121561122c5761122b610dac565b5b600061123a88828901610e8b565b955050602061124b88828901610ff2565b945050606061125c888289016110a3565b93505060e061126d888289016111ac565b92505061012061127f888289016111fa565b9150509295509295909350565b600060029050919050565b600081905092915050565b6000819050919050565b6112b581610f5c565b82525050565b60006112c783836112ac565b60208301905092915050565b6000602082019050919050565b6112e98161128c565b6112f38184611297565b92506112fe826112a2565b8060005b8381101561132f57815161131687826112bb565b9650611321836112d3565b925050600181019050611302565b505050505050565b600060408201905061134c60008301846112e0565b92915050565b600081519050919050565b600081905092915050565b60005b8381101561138657808201518184015260208101905061136b565b83811115611395576000848401525b50505050565b60006113a682611352565b6113b0818561135d565b93506113c0818560208601611368565b80840191505092915050565b60006113d8828461139b565b915081905092915050565b600082825260208201905092915050565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b600061142a601d836113e3565b9150611435826113f4565b602082019050919050565b600060208201905081810360008301526114598161141d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b60006114c56006836113e3565b91506114d08261148f565b602082019050919050565b600060208201905081810360008301526114f4816114b8565b9050919050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b6000611531601e836113e3565b915061153c826114fb565b602082019050919050565b6000602082019050818103600083015261156081611524565b9050919050565b60008160e01b9050919050565b600061157f82611567565b9050919050565b61159761159282610e64565b611574565b82525050565b6000819050919050565b6115b86115b382610f5c565b61159d565b82525050565b6000819050919050565b6115d96115d4826110f4565b6115be565b82525050565b60008160f81b9050919050565b60006115f7826115df565b9050919050565b6000611609826115ec565b9050919050565b61162161161c826111d7565b6115fe565b82525050565b6000611633828d611586565b600482019150611643828c6115a7565b602082019150611653828b6115a7565b602082019150611663828a6115a7565b60208201915061167382896115a7565b60208201915061168382886115a7565b60208201915061169382876115a7565b6020820191506116a382866115c8565b6008820191506116b382856115c8565b6008820191506116c38284611610565b6001820191508190509b9a505050505050505050505056fea264697066735822122079cfdf99f34c525bb4072cde2303cdaeca4e75666256549f1f713f0ea3ec58ce64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1711 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x98576248 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x98576248 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0xAB26C7F8 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0xC9A6E474 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xCB5C707C EQ PUSH2 0xF9 JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x28820A24 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x503A6772 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x60012E3A EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0x8588CC9C EQ PUSH2 0xAB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x129 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x1D1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0x464 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB3 PUSH2 0x77F JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBD PUSH2 0x976 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xD4 SWAP2 SWAP1 PUSH2 0xDE7 JUMP JUMPDEST PUSH2 0x9AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF7 PUSH2 0x9FB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x113 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x10E SWAP2 SWAP1 PUSH2 0x120F JUMP JUMPDEST PUSH2 0xBCC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 SWAP2 SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000 PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F20576F726C64210000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH2 0x18F SWAP2 SWAP1 PUSH2 0x13CC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD MLOAD PUSH1 0x60 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP SWAP1 POP PUSH2 0x3AF PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH2 0x180 DUP6 PUSH1 0x0 PUSH1 0x8 PUSH2 0x7D0 GAS SUB CALL SWAP1 POP DUP1 PUSH2 0x404 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3FB SWAP1 PUSH2 0x1440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x0 PUSH1 0x1 DUP2 LT PUSH2 0x41A JUMPI PUSH2 0x419 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x45F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x456 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC SWAP1 POP PUSH2 0x472 PUSH2 0xD1A JUMP JUMPDEST PUSH32 0x48C9BDF267E6096A3BA7CA8485AE67BB2BF894FE72F36E3CF1361D5F3AF54FA5 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x4A7 JUMPI PUSH2 0x4A6 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH32 0xD182E6AD7F520E511F6C3E2B8C68059B6BBD41FBABD9831F79217E1319CDE05B DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x4E5 JUMPI PUSH2 0x4E4 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4F6 PUSH2 0xD3C JUMP JUMPDEST PUSH32 0x6162630000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0x52B JUMPI PUSH2 0x52A PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0x54A JUMPI PUSH2 0x549 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0x569 JUMPI PUSH2 0x568 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0x588 JUMPI PUSH2 0x587 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x599 PUSH2 0xD5E JUMP JUMPDEST PUSH32 0x300000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x5CE JUMPI PUSH2 0x5CD PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x625 JUMPI PUSH2 0x624 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 PUSH2 0x67B DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0xBCC JUMP JUMPDEST SWAP1 POP PUSH32 0xBA80A53F981C4D0D6A2797B69F12F6E94C212F14685AC4B74B12BB6FDBFFA2D1 PUSH1 0x0 SHL DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x6B5 JUMPI PUSH2 0x6B4 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x6FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6F1 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7D87C5392AAB792DC252D5DE4533CC9518D38AA8DBF1925AB92386EDD4009923 PUSH1 0x0 SHL DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x732 JUMPI PUSH2 0x731 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x777 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76E SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266 DUP2 MSTORE POP SWAP1 POP PUSH2 0x82D PUSH2 0xD80 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x80 DUP5 PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0x87D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x874 SWAP1 PUSH2 0x1547 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x8B2 JUMPI PUSH2 0x8B1 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x8F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8EE SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x92C JUMPI PUSH2 0x92B PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x971 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x968 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 PUSH2 0x986 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH2 0x9AC JUMP JUMPDEST EQ PUSH2 0x990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x9A0 PUSH1 0x5 PUSH1 0x7 PUSH1 0xB PUSH2 0x9AC JUMP JUMPDEST EQ PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0x9EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000 DUP2 MSTORE POP SWAP1 POP PUSH2 0xA83 PUSH2 0xD80 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x60 DUP5 PUSH1 0x0 PUSH1 0x7 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0xAD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xACA SWAP1 PUSH2 0x1547 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xB08 JUMPI PUSH2 0xB07 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0xB4D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB44 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xB82 JUMPI PUSH2 0xB81 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0xBC7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBBE SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBD4 PUSH2 0xD1A JUMP JUMPDEST PUSH2 0xBDC PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x0 DUP8 DUP8 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xBF3 JUMPI PUSH2 0xBF2 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xC0C JUMPI PUSH2 0xC0B PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0xC25 JUMPI PUSH2 0xC24 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP10 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0xC3E JUMPI PUSH2 0xC3D PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP11 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0xC57 JUMPI PUSH2 0xC56 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0xC70 JUMPI PUSH2 0xC6F PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xC89 JUMPI PUSH2 0xC88 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xCA2 JUMPI PUSH2 0xCA1 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCC1 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1627 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH1 0x40 DUP3 PUSH1 0xD5 PUSH1 0x20 DUP5 ADD PUSH1 0x9 PUSH1 0x0 NOT STATICCALL PUSH2 0xCEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDC4 DUP2 PUSH2 0xDB1 JUMP JUMPDEST DUP2 EQ PUSH2 0xDCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xDE1 DUP2 PUSH2 0xDBB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xE00 JUMPI PUSH2 0xDFF PUSH2 0xDAC JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE0E DUP7 DUP3 DUP8 ADD PUSH2 0xDD2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xE1F DUP7 DUP3 DUP8 ADD PUSH2 0xDD2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xE30 DUP7 DUP3 DUP8 ADD PUSH2 0xDD2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0xE43 DUP2 PUSH2 0xDB1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE5E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE3A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE7D DUP2 PUSH2 0xE64 JUMP JUMPDEST DUP2 EQ PUSH2 0xE88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE9A DUP2 PUSH2 0xE74 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xEEE DUP3 PUSH2 0xEA5 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xF0D JUMPI PUSH2 0xF0C PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF20 PUSH2 0xDA2 JUMP JUMPDEST SWAP1 POP PUSH2 0xF2C DUP3 DUP3 PUSH2 0xEE5 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xF4C JUMPI PUSH2 0xF4B PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF6F DUP2 PUSH2 0xF5C JUMP JUMPDEST DUP2 EQ PUSH2 0xF7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xF8C DUP2 PUSH2 0xF66 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFA5 PUSH2 0xFA0 DUP5 PUSH2 0xF31 JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xFBF JUMPI PUSH2 0xFBE PUSH2 0xF57 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFE8 JUMPI DUP1 PUSH2 0xFD4 DUP9 DUP3 PUSH2 0xF7D JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFC1 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1007 JUMPI PUSH2 0x1006 PUSH2 0xEA0 JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x1014 DUP5 DUP3 DUP6 PUSH2 0xF92 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1038 JUMPI PUSH2 0x1037 PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1056 PUSH2 0x1051 DUP5 PUSH2 0x101D JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1070 JUMPI PUSH2 0x106F PUSH2 0xF57 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1099 JUMPI DUP1 PUSH2 0x1085 DUP9 DUP3 PUSH2 0xF7D JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1072 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x10B8 JUMPI PUSH2 0x10B7 PUSH2 0xEA0 JUMP JUMPDEST JUMPDEST PUSH1 0x4 PUSH2 0x10C5 DUP5 DUP3 DUP6 PUSH2 0x1043 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x10E9 JUMPI PUSH2 0x10E8 PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1129 DUP2 PUSH2 0x10F4 JUMP JUMPDEST DUP2 EQ PUSH2 0x1134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1146 DUP2 PUSH2 0x1120 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x115F PUSH2 0x115A DUP5 PUSH2 0x10CE JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1179 JUMPI PUSH2 0x1178 PUSH2 0xF57 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11A2 JUMPI DUP1 PUSH2 0x118E DUP9 DUP3 PUSH2 0x1137 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x117B JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x11C1 JUMPI PUSH2 0x11C0 PUSH2 0xEA0 JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x11CE DUP5 DUP3 DUP6 PUSH2 0x114C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11EC DUP2 PUSH2 0x11D7 JUMP JUMPDEST DUP2 EQ PUSH2 0x11F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1209 DUP2 PUSH2 0x11E3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x140 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x122C JUMPI PUSH2 0x122B PUSH2 0xDAC JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x123A DUP9 DUP3 DUP10 ADD PUSH2 0xE8B JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x124B DUP9 DUP3 DUP10 ADD PUSH2 0xFF2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 PUSH2 0x125C DUP9 DUP3 DUP10 ADD PUSH2 0x10A3 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xE0 PUSH2 0x126D DUP9 DUP3 DUP10 ADD PUSH2 0x11AC JUMP JUMPDEST SWAP3 POP POP PUSH2 0x120 PUSH2 0x127F DUP9 DUP3 DUP10 ADD PUSH2 0x11FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x12B5 DUP2 PUSH2 0xF5C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12C7 DUP4 DUP4 PUSH2 0x12AC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x12E9 DUP2 PUSH2 0x128C JUMP JUMPDEST PUSH2 0x12F3 DUP2 DUP5 PUSH2 0x1297 JUMP JUMPDEST SWAP3 POP PUSH2 0x12FE DUP3 PUSH2 0x12A2 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x132F JUMPI DUP2 MLOAD PUSH2 0x1316 DUP8 DUP3 PUSH2 0x12BB JUMP JUMPDEST SWAP7 POP PUSH2 0x1321 DUP4 PUSH2 0x12D3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1302 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x134C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x12E0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1386 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x136B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1395 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13A6 DUP3 PUSH2 0x1352 JUMP JUMPDEST PUSH2 0x13B0 DUP2 DUP6 PUSH2 0x135D JUMP JUMPDEST SWAP4 POP PUSH2 0x13C0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x1368 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13D8 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C69707469632063757276652070616972696E67206661696C6564000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x142A PUSH1 0x1D DUP4 PUSH2 0x13E3 JUMP JUMPDEST SWAP2 POP PUSH2 0x1435 DUP3 PUSH2 0x13F4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1459 DUP2 PUSH2 0x141D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C5 PUSH1 0x6 DUP4 PUSH2 0x13E3 JUMP JUMPDEST SWAP2 POP PUSH2 0x14D0 DUP3 PUSH2 0x148F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x14F4 DUP2 PUSH2 0x14B8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1531 PUSH1 0x1E DUP4 PUSH2 0x13E3 JUMP JUMPDEST SWAP2 POP PUSH2 0x153C DUP3 PUSH2 0x14FB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1560 DUP2 PUSH2 0x1524 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157F DUP3 PUSH2 0x1567 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1597 PUSH2 0x1592 DUP3 PUSH2 0xE64 JUMP JUMPDEST PUSH2 0x1574 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x15B8 PUSH2 0x15B3 DUP3 PUSH2 0xF5C JUMP JUMPDEST PUSH2 0x159D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x15D9 PUSH2 0x15D4 DUP3 PUSH2 0x10F4 JUMP JUMPDEST PUSH2 0x15BE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xF8 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F7 DUP3 PUSH2 0x15DF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1609 DUP3 PUSH2 0x15EC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1621 PUSH2 0x161C DUP3 PUSH2 0x11D7 JUMP JUMPDEST PUSH2 0x15FE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1633 DUP3 DUP14 PUSH2 0x1586 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP PUSH2 0x1643 DUP3 DUP13 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1653 DUP3 DUP12 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1663 DUP3 DUP11 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1673 DUP3 DUP10 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1683 DUP3 DUP9 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1693 DUP3 DUP8 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x16A3 DUP3 DUP7 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0x16B3 DUP3 DUP6 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0x16C3 DUP3 DUP5 PUSH2 0x1610 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SWAP2 POP DUP2 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH26 0xCFDF99F34C525BB4072CDE2303CDAECA4E75666256549F1F713F 0xE LOG3 0xEC PC 0xCE PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:7429:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@blake2Check_380": { + "entryPoint": 1124, + "id": 380, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@blake2Wrapper_267": { + "entryPoint": 3020, + "id": 267, + "parameterSlots": 5, + "returnSlots": 1 + }, + "@bn128AdditionCheck_66": { + "entryPoint": 1919, + "id": 66, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@bn128MultiplyCheck_115": { + "entryPoint": 2555, + "id": 115, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@bn128PairingCheck_164": { + "entryPoint": 465, + "id": 164, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@modExpChecker_201": { + "entryPoint": 2422, + "id": 201, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@modExpWrapper_177": { + "entryPoint": 2476, + "id": 177, + "parameterSlots": 3, + "returnSlots": 1 + }, + "@ripemd160Check_16": { + "entryPoint": 297, + "id": 16, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr": { + "entryPoint": 3986, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr": { + "entryPoint": 4163, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr": { + "entryPoint": 4428, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_t_array$_t_bytes32_$2_memory_ptr": { + "entryPoint": 4082, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_array$_t_bytes32_$4_memory_ptr": { + "entryPoint": 4259, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_array$_t_bytes8_$2_memory_ptr": { + "entryPoint": 4524, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_bool": { + "entryPoint": 4602, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_bytes32": { + "entryPoint": 3965, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_bytes8": { + "entryPoint": 4407, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 3538, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint32": { + "entryPoint": 3723, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_uint256t_uint256": { + "entryPoint": 3559, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_uint32t_array$_t_bytes32_$2_memory_ptrt_array$_t_bytes32_$4_memory_ptrt_array$_t_bytes8_$2_memory_ptrt_bool": { + "entryPoint": 4623, + "id": null, + "parameterSlots": 2, + "returnSlots": 5 + }, + "abi_encodeUpdatedPos_t_bytes32_to_t_bytes32": { + "entryPoint": 4795, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack": { + "entryPoint": 4832, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack": { + "entryPoint": 5648, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_bytes32_to_t_bytes32": { + "entryPoint": 4780, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack": { + "entryPoint": 5543, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack": { + "entryPoint": 5576, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack": { + "entryPoint": 5019, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack": { + "entryPoint": 5412, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack": { + "entryPoint": 5304, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack": { + "entryPoint": 5149, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 3642, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack": { + "entryPoint": 5510, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { + "entryPoint": 5068, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__to_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__nonPadded_inplace_fromStack_reversed": { + "entryPoint": 5671, + "id": null, + "parameterSlots": 11, + "returnSlots": 1 + }, + "abi_encode_tuple_t_array$_t_bytes32_$2_memory_ptr__to_t_array$_t_bytes32_$2_memory_ptr__fromStack_reversed": { + "entryPoint": 4919, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 5447, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 5339, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 5184, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 3657, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_memory": { + "entryPoint": 3862, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": 3490, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "array_allocation_size_t_array$_t_bytes32_$2_memory_ptr": { + "entryPoint": 3889, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_allocation_size_t_array$_t_bytes32_$4_memory_ptr": { + "entryPoint": 4125, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_allocation_size_t_array$_t_bytes8_$2_memory_ptr": { + "entryPoint": 4302, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_dataslot_t_array$_t_bytes32_$2_memory_ptr": { + "entryPoint": 4770, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_length_t_array$_t_bytes32_$2_memory_ptr": { + "entryPoint": 4748, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_length_t_bytes_memory_ptr": { + "entryPoint": 4946, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_nextElement_t_array$_t_bytes32_$2_memory_ptr": { + "entryPoint": 4819, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack": { + "entryPoint": 4759, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack": { + "entryPoint": 4957, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_string_memory_ptr_fromStack": { + "entryPoint": 5091, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_bool": { + "entryPoint": 4567, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_bytes32": { + "entryPoint": 3932, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_bytes8": { + "entryPoint": 4340, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 3505, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint32": { + "entryPoint": 3684, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "copy_memory_to_memory": { + "entryPoint": 4968, + "id": null, + "parameterSlots": 3, + "returnSlots": 0 + }, + "finalize_allocation": { + "entryPoint": 3813, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "leftAlign_t_bool": { + "entryPoint": 5630, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "leftAlign_t_bytes32": { + "entryPoint": 5533, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "leftAlign_t_bytes8": { + "entryPoint": 5566, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "leftAlign_t_uint32": { + "entryPoint": 5492, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "leftAlign_t_uint8": { + "entryPoint": 5612, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x32": { + "entryPoint": 5216, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x41": { + "entryPoint": 3766, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": { + "entryPoint": 3744, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef": { + "entryPoint": 3927, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 3500, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "round_up_to_mul_of_32": { + "entryPoint": 3749, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "shift_left_224": { + "entryPoint": 5479, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "shift_left_248": { + "entryPoint": 5599, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27": { + "entryPoint": 5371, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43": { + "entryPoint": 5263, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862": { + "entryPoint": 5108, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_bool": { + "entryPoint": 4579, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_bytes32": { + "entryPoint": 3942, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_bytes8": { + "entryPoint": 4384, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 3515, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_uint32": { + "entryPoint": 3700, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:18173:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:1", + "type": "" + } + ], + "src": "7:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:1", + "type": "" + } + ], + "src": "334:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:1" + }, + "nodeType": "YulIf", + "src": "470:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:1", + "type": "" + } + ], + "src": "417:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "597:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "607:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "629:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "616:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "616:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "607:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "672:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "645:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "645:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "645:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "575:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "583:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "591:5:1", + "type": "" + } + ], + "src": "545:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "790:519:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "836:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "838:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "838:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "838:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "811:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "820:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "807:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "807:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "832:2:1", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "803:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "803:32:1" + }, + "nodeType": "YulIf", + "src": "800:119:1" + }, + { + "nodeType": "YulBlock", + "src": "929:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "944:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "958:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "948:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "973:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1008:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1019:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1004:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1004:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1028:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "983:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "983:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "973:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1056:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1071:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1085:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1075:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1101:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1136:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1147:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1132:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1132:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1156:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1111:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1111:53:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1101:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1184:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1199:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1213:2:1", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1203:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1229:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1264:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1275:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1260:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1260:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1284:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1239:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1239:53:1" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "1229:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_uint256t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "744:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "755:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "767:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "775:6:1", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "783:6:1", + "type": "" + } + ], + "src": "690:619:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1380:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1397:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1420:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1402:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1402:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1390:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1390:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1390:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1368:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1375:3:1", + "type": "" + } + ], + "src": "1315:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1537:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1547:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1559:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1570:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1555:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1555:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1547:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1627:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1640:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1651:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1636:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1636:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "1583:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "1583:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1583:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1509:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1521:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1532:4:1", + "type": "" + } + ], + "src": "1439:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1711:49:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1721:33:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1736:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1743:10:1", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1732:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1732:22:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1721:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1693:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1703:7:1", + "type": "" + } + ], + "src": "1667:93:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1808:78:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1864:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1873:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1876:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1866:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1866:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1866:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1831:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1855:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint32", + "nodeType": "YulIdentifier", + "src": "1838:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "1838:23:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1828:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1828:34:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1821:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1821:42:1" + }, + "nodeType": "YulIf", + "src": "1818:62:1" + } + ] + }, + "name": "validator_revert_t_uint32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1801:5:1", + "type": "" + } + ], + "src": "1766:120:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1943:86:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1953:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1975:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1962:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "1962:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1953:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2017:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint32", + "nodeType": "YulIdentifier", + "src": "1991:25:1" + }, + "nodeType": "YulFunctionCall", + "src": "1991:32:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1991:32:1" + } + ] + }, + "name": "abi_decode_t_uint32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1921:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1929:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1937:5:1", + "type": "" + } + ], + "src": "1892:137:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2124:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2141:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2144:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2134:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2134:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2134:12:1" + } + ] + }, + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulFunctionDefinition", + "src": "2035:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2206:54:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2216:38:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2234:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2241:2:1", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2230:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2230:14:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2250:2:1", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "2246:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2246:7:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "2226:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2226:28:1" + }, + "variableNames": [ + { + "name": "result", + "nodeType": "YulIdentifier", + "src": "2216:6:1" + } + ] + } + ] + }, + "name": "round_up_to_mul_of_32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2189:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "result", + "nodeType": "YulTypedName", + "src": "2199:6:1", + "type": "" + } + ], + "src": "2158:102:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2294:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2311:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2314:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2304:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2304:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2304:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2408:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2411:4:1", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2401:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2401:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2401:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2432:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2435:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2425:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2425:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2425:15:1" + } + ] + }, + "name": "panic_error_0x41", + "nodeType": "YulFunctionDefinition", + "src": "2266:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2495:238:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2505:58:1", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2527:6:1" + }, + { + "arguments": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2557:4:1" + } + ], + "functionName": { + "name": "round_up_to_mul_of_32", + "nodeType": "YulIdentifier", + "src": "2535:21:1" + }, + "nodeType": "YulFunctionCall", + "src": "2535:27:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2523:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2523:40:1" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "2509:10:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2674:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "2676:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "2676:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2676:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "2617:10:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2629:18:1", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2614:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "2614:34:1" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "2653:10:1" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2665:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "2650:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "2650:22:1" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "2611:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "2611:62:1" + }, + "nodeType": "YulIf", + "src": "2608:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2712:2:1", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "2716:10:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2705:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2705:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2705:22:1" + } + ] + }, + "name": "finalize_allocation", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "2481:6:1", + "type": "" + }, + { + "name": "size", + "nodeType": "YulTypedName", + "src": "2489:4:1", + "type": "" + } + ], + "src": "2452:281:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2780:88:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2790:30:1", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_unbounded", + "nodeType": "YulIdentifier", + "src": "2800:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "2800:20:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2790:6:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2849:6:1" + }, + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2857:4:1" + } + ], + "functionName": { + "name": "finalize_allocation", + "nodeType": "YulIdentifier", + "src": "2829:19:1" + }, + "nodeType": "YulFunctionCall", + "src": "2829:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2829:33:1" + } + ] + }, + "name": "allocate_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "2764:4:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "2773:6:1", + "type": "" + } + ], + "src": "2739:129:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2954:169:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3059:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "3061:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "3061:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3061:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3031:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3039:18:1", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3028:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3028:30:1" + }, + "nodeType": "YulIf", + "src": "3025:56:1" + }, + { + "nodeType": "YulAssignment", + "src": "3091:25:1", + "value": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3103:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3111:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "3099:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3099:17:1" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "3091:4:1" + } + ] + } + ] + }, + "name": "array_allocation_size_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2938:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "2949:4:1", + "type": "" + } + ], + "src": "2874:249:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3218:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3235:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3238:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3228:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3228:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3228:12:1" + } + ] + }, + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", + "nodeType": "YulFunctionDefinition", + "src": "3129:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3297:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3307:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3318:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "3307:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_bytes32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3279:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "3289:7:1", + "type": "" + } + ], + "src": "3252:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3378:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3435:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3444:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3447:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3437:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3437:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3437:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3401:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3426:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bytes32", + "nodeType": "YulIdentifier", + "src": "3408:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "3408:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "3398:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3398:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "3391:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3391:43:1" + }, + "nodeType": "YulIf", + "src": "3388:63:1" + } + ] + }, + "name": "validator_revert_t_bytes32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3371:5:1", + "type": "" + } + ], + "src": "3335:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3515:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3525:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3547:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3534:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "3534:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3525:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3590:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_bytes32", + "nodeType": "YulIdentifier", + "src": "3563:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "3563:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3563:33:1" + } + ] + }, + "name": "abi_decode_t_bytes32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3493:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3501:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3509:5:1", + "type": "" + } + ], + "src": "3463:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3726:543:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3736:88:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3816:6:1" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "3761:54:1" + }, + "nodeType": "YulFunctionCall", + "src": "3761:62:1" + } + ], + "functionName": { + "name": "allocate_memory", + "nodeType": "YulIdentifier", + "src": "3745:15:1" + }, + "nodeType": "YulFunctionCall", + "src": "3745:79:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3736:5:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3833:16:1", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3844:5:1" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "3837:3:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3859:44:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3877:6:1" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3889:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3897:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "3885:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3885:17:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3873:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3873:30:1" + }, + "variables": [ + { + "name": "srcEnd", + "nodeType": "YulTypedName", + "src": "3863:6:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3931:103:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", + "nodeType": "YulIdentifier", + "src": "3945:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "3945:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3945:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "3918:6:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3926:3:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3915:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3915:15:1" + }, + "nodeType": "YulIf", + "src": "3912:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4119:144:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "4134:21:1", + "value": { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4152:3:1" + }, + "variables": [ + { + "name": "elementPos", + "nodeType": "YulTypedName", + "src": "4138:10:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4176:3:1" + }, + { + "arguments": [ + { + "name": "elementPos", + "nodeType": "YulIdentifier", + "src": "4202:10:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4214:3:1" + } + ], + "functionName": { + "name": "abi_decode_t_bytes32", + "nodeType": "YulIdentifier", + "src": "4181:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "4181:37:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4169:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4169:50:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4169:50:1" + }, + { + "nodeType": "YulAssignment", + "src": "4232:21:1", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4243:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4248:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4239:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4239:14:1" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4232:3:1" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4072:3:1" + }, + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "4077:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4069:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "4069:15:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "4085:25:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4087:21:1", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4098:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4103:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4094:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4094:14:1" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4087:3:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "4047:21:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "4049:17:1", + "value": { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4060:6:1" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "4053:3:1", + "type": "" + } + ] + } + ] + }, + "src": "4043:220:1" + } + ] + }, + "name": "abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3696:6:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "3704:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3712:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "3720:5:1", + "type": "" + } + ], + "src": "3626:643:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4368:264:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "4417:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulIdentifier", + "src": "4419:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "4419:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4419:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4396:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4404:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4392:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4392:17:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4411:3:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "4388:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4388:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4381:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4381:35:1" + }, + "nodeType": "YulIf", + "src": "4378:122:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4509:18:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4523:4:1", + "type": "", + "value": "0x02" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "4513:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "4536:90:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4606:6:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "4614:6:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4622:3:1" + } + ], + "functionName": { + "name": "abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "4545:60:1" + }, + "nodeType": "YulFunctionCall", + "src": "4545:81:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4536:5:1" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4346:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "4354:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "4362:5:1", + "type": "" + } + ], + "src": "4293:339:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4718:169:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "4823:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "4825:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "4825:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4825:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "4795:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4803:18:1", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4792:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "4792:30:1" + }, + "nodeType": "YulIf", + "src": "4789:56:1" + }, + { + "nodeType": "YulAssignment", + "src": "4855:25:1", + "value": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "4867:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4875:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "4863:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4863:17:1" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "4855:4:1" + } + ] + } + ] + }, + "name": "array_allocation_size_t_array$_t_bytes32_$4_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "4702:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "4713:4:1", + "type": "" + } + ], + "src": "4638:249:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5011:543:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5021:88:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5101:6:1" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_bytes32_$4_memory_ptr", + "nodeType": "YulIdentifier", + "src": "5046:54:1" + }, + "nodeType": "YulFunctionCall", + "src": "5046:62:1" + } + ], + "functionName": { + "name": "allocate_memory", + "nodeType": "YulIdentifier", + "src": "5030:15:1" + }, + "nodeType": "YulFunctionCall", + "src": "5030:79:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5021:5:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5118:16:1", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5129:5:1" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "5122:3:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5144:44:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5162:6:1" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5174:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5182:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "5170:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5170:17:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5158:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5158:30:1" + }, + "variables": [ + { + "name": "srcEnd", + "nodeType": "YulTypedName", + "src": "5148:6:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5216:103:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", + "nodeType": "YulIdentifier", + "src": "5230:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "5230:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5230:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "5203:6:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5211:3:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "5200:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "5200:15:1" + }, + "nodeType": "YulIf", + "src": "5197:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5404:144:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5419:21:1", + "value": { + "name": "src", + "nodeType": "YulIdentifier", + "src": "5437:3:1" + }, + "variables": [ + { + "name": "elementPos", + "nodeType": "YulTypedName", + "src": "5423:10:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5461:3:1" + }, + { + "arguments": [ + { + "name": "elementPos", + "nodeType": "YulIdentifier", + "src": "5487:10:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5499:3:1" + } + ], + "functionName": { + "name": "abi_decode_t_bytes32", + "nodeType": "YulIdentifier", + "src": "5466:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "5466:37:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5454:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5454:50:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5454:50:1" + }, + { + "nodeType": "YulAssignment", + "src": "5517:21:1", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5528:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5533:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5524:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5524:14:1" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5517:3:1" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "5357:3:1" + }, + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "5362:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "5354:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "5354:15:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "5370:25:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5372:21:1", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "5383:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5388:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5379:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5379:14:1" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "5372:3:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "5332:21:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5334:17:1", + "value": { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5345:6:1" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "5338:3:1", + "type": "" + } + ] + } + ] + }, + "src": "5328:220:1" + } + ] + }, + "name": "abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4981:6:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "4989:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "4997:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "5005:5:1", + "type": "" + } + ], + "src": "4911:643:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5653:264:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "5702:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulIdentifier", + "src": "5704:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "5704:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5704:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5681:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5689:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5677:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5677:17:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5696:3:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "5673:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5673:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "5666:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5666:35:1" + }, + "nodeType": "YulIf", + "src": "5663:122:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5794:18:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5808:4:1", + "type": "", + "value": "0x04" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5798:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "5821:90:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5891:6:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5899:6:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5907:3:1" + } + ], + "functionName": { + "name": "abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr", + "nodeType": "YulIdentifier", + "src": "5830:60:1" + }, + "nodeType": "YulFunctionCall", + "src": "5830:81:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5821:5:1" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_bytes32_$4_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "5631:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "5639:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "5647:5:1", + "type": "" + } + ], + "src": "5578:339:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6002:169:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "6107:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "6109:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "6109:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6109:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "6079:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6087:18:1", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6076:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "6076:30:1" + }, + "nodeType": "YulIf", + "src": "6073:56:1" + }, + { + "nodeType": "YulAssignment", + "src": "6139:25:1", + "value": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "6151:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6159:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "6147:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6147:17:1" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "6139:4:1" + } + ] + } + ] + }, + "name": "array_allocation_size_t_array$_t_bytes8_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5986:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "5997:4:1", + "type": "" + } + ], + "src": "5923:248:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6221:105:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6231:89:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6246:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6253:66:1", + "type": "", + "value": "0xffffffffffffffff000000000000000000000000000000000000000000000000" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "6242:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6242:78:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "6231:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_bytes8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6203:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "6213:7:1", + "type": "" + } + ], + "src": "6177:149:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6374:78:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "6430:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6439:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6442:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6432:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "6432:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6432:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6397:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6421:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bytes8", + "nodeType": "YulIdentifier", + "src": "6404:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "6404:23:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "6394:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "6394:34:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "6387:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "6387:42:1" + }, + "nodeType": "YulIf", + "src": "6384:62:1" + } + ] + }, + "name": "validator_revert_t_bytes8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6367:5:1", + "type": "" + } + ], + "src": "6332:120:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6509:86:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6519:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "6541:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "6528:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "6528:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6519:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6583:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_bytes8", + "nodeType": "YulIdentifier", + "src": "6557:25:1" + }, + "nodeType": "YulFunctionCall", + "src": "6557:32:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6557:32:1" + } + ] + }, + "name": "abi_decode_t_bytes8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "6487:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "6495:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6503:5:1", + "type": "" + } + ], + "src": "6458:137:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6717:541:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6727:87:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "6806:6:1" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_bytes8_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "6752:53:1" + }, + "nodeType": "YulFunctionCall", + "src": "6752:61:1" + } + ], + "functionName": { + "name": "allocate_memory", + "nodeType": "YulIdentifier", + "src": "6736:15:1" + }, + "nodeType": "YulFunctionCall", + "src": "6736:78:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6727:5:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6823:16:1", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6834:5:1" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "6827:3:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6849:44:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "6867:6:1" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "6879:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6887:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "6875:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6875:17:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6863:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6863:30:1" + }, + "variables": [ + { + "name": "srcEnd", + "nodeType": "YulTypedName", + "src": "6853:6:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6921:103:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", + "nodeType": "YulIdentifier", + "src": "6935:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "6935:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6935:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "6908:6:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "6916:3:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6905:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "6905:15:1" + }, + "nodeType": "YulIf", + "src": "6902:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7109:143:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7124:21:1", + "value": { + "name": "src", + "nodeType": "YulIdentifier", + "src": "7142:3:1" + }, + "variables": [ + { + "name": "elementPos", + "nodeType": "YulTypedName", + "src": "7128:10:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7166:3:1" + }, + { + "arguments": [ + { + "name": "elementPos", + "nodeType": "YulIdentifier", + "src": "7191:10:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7203:3:1" + } + ], + "functionName": { + "name": "abi_decode_t_bytes8", + "nodeType": "YulIdentifier", + "src": "7171:19:1" + }, + "nodeType": "YulFunctionCall", + "src": "7171:36:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7159:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7159:49:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7159:49:1" + }, + { + "nodeType": "YulAssignment", + "src": "7221:21:1", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7232:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7237:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7228:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7228:14:1" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7221:3:1" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "7062:3:1" + }, + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "7067:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "7059:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "7059:15:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "7075:25:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7077:21:1", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "7088:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7093:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7084:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7084:14:1" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "7077:3:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "7037:21:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7039:17:1", + "value": { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7050:6:1" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "7043:3:1", + "type": "" + } + ] + } + ] + }, + "src": "7033:219:1" + } + ] + }, + "name": "abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "6687:6:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "6695:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "6703:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "6711:5:1", + "type": "" + } + ], + "src": "6618:640:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7355:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "7404:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulIdentifier", + "src": "7406:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "7406:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7406:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7383:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7391:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7379:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7379:17:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7398:3:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "7375:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7375:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "7368:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7368:35:1" + }, + "nodeType": "YulIf", + "src": "7365:122:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7496:18:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7510:4:1", + "type": "", + "value": "0x02" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "7500:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "7523:89:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7592:6:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "7600:6:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7608:3:1" + } + ], + "functionName": { + "name": "abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "7532:59:1" + }, + "nodeType": "YulFunctionCall", + "src": "7532:80:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7523:5:1" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_bytes8_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7333:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "7341:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "7349:5:1", + "type": "" + } + ], + "src": "7281:337:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7666:48:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7676:32:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7701:5:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "7694:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7694:13:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "7687:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7687:21:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "7676:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7648:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "7658:7:1", + "type": "" + } + ], + "src": "7624:90:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7760:76:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "7814:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7823:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7826:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7816:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7816:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7816:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7783:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7805:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bool", + "nodeType": "YulIdentifier", + "src": "7790:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "7790:21:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "7780:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "7780:32:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "7773:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7773:40:1" + }, + "nodeType": "YulIf", + "src": "7770:60:1" + } + ] + }, + "name": "validator_revert_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7753:5:1", + "type": "" + } + ], + "src": "7720:116:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7891:84:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7901:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7923:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "7910:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "7910:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7901:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7963:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "7939:23:1" + }, + "nodeType": "YulFunctionCall", + "src": "7939:30:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7939:30:1" + } + ] + }, + "name": "abi_decode_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7869:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "7877:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7885:5:1", + "type": "" + } + ], + "src": "7842:133:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8179:842:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "8226:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "8228:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "8228:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8228:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8200:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8209:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "8196:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8196:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8221:3:1", + "type": "", + "value": "320" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "8192:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8192:33:1" + }, + "nodeType": "YulIf", + "src": "8189:120:1" + }, + { + "nodeType": "YulBlock", + "src": "8319:116:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8334:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8348:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8338:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8363:62:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8397:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8408:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8393:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8393:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8417:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint32", + "nodeType": "YulIdentifier", + "src": "8373:19:1" + }, + "nodeType": "YulFunctionCall", + "src": "8373:52:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8363:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "8445:141:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8460:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8474:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8464:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8490:86:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8548:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8559:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8544:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8544:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8568:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "8500:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "8500:76:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "8490:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "8596:141:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8611:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8625:2:1", + "type": "", + "value": "96" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8615:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8641:86:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8699:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8710:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8695:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8695:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8719:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_bytes32_$4_memory_ptr", + "nodeType": "YulIdentifier", + "src": "8651:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "8651:76:1" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "8641:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "8747:141:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8762:17:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8776:3:1", + "type": "", + "value": "224" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8766:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8793:85:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8850:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8861:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8846:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8846:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8870:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_bytes8_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "8803:42:1" + }, + "nodeType": "YulFunctionCall", + "src": "8803:75:1" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "8793:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "8898:116:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8913:17:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8927:3:1", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8917:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8944:60:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8976:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8987:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8972:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8972:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8996:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_bool", + "nodeType": "YulIdentifier", + "src": "8954:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "8954:50:1" + }, + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "8944:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint32t_array$_t_bytes32_$2_memory_ptrt_array$_t_bytes32_$4_memory_ptrt_array$_t_bytes8_$2_memory_ptrt_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "8117:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "8128:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "8140:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "8148:6:1", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "8156:6:1", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "8164:6:1", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "8172:6:1", + "type": "" + } + ], + "src": "7981:1040:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9099:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9110:14:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9120:4:1", + "type": "", + "value": "0x02" + }, + "variableNames": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "9110:6:1" + } + ] + } + ] + }, + "name": "array_length_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9082:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "9092:6:1", + "type": "" + } + ], + "src": "9027:104:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9246:34:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9256:18:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9271:3:1" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "9256:11:1" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "9218:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "9223:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "9234:11:1", + "type": "" + } + ], + "src": "9137:143:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9356:28:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9366:11:1", + "value": { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "9374:3:1" + }, + "variableNames": [ + { + "name": "data", + "nodeType": "YulIdentifier", + "src": "9366:4:1" + } + ] + } + ] + }, + "name": "array_dataslot_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "ptr", + "nodeType": "YulTypedName", + "src": "9343:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "data", + "nodeType": "YulTypedName", + "src": "9351:4:1", + "type": "" + } + ], + "src": "9286:98:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9445:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9462:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9485:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bytes32", + "nodeType": "YulIdentifier", + "src": "9467:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "9467:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9455:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "9455:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "9455:37:1" + } + ] + }, + "name": "abi_encode_t_bytes32_to_t_bytes32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9433:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "9440:3:1", + "type": "" + } + ], + "src": "9390:108:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9584:99:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9628:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9636:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32", + "nodeType": "YulIdentifier", + "src": "9594:33:1" + }, + "nodeType": "YulFunctionCall", + "src": "9594:46:1" + }, + "nodeType": "YulExpressionStatement", + "src": "9594:46:1" + }, + { + "nodeType": "YulAssignment", + "src": "9649:28:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "9667:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9672:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9663:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "9663:14:1" + }, + "variableNames": [ + { + "name": "updatedPos", + "nodeType": "YulIdentifier", + "src": "9649:10:1" + } + ] + } + ] + }, + "name": "abi_encodeUpdatedPos_t_bytes32_to_t_bytes32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "9557:6:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "9565:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updatedPos", + "nodeType": "YulTypedName", + "src": "9573:10:1", + "type": "" + } + ], + "src": "9504:179:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9762:38:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9772:22:1", + "value": { + "arguments": [ + { + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "9784:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9789:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9780:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "9780:14:1" + }, + "variableNames": [ + { + "name": "next", + "nodeType": "YulIdentifier", + "src": "9772:4:1" + } + ] + } + ] + }, + "name": "array_nextElement_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "ptr", + "nodeType": "YulTypedName", + "src": "9749:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "next", + "nodeType": "YulTypedName", + "src": "9757:4:1", + "type": "" + } + ], + "src": "9689:111:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9950:582:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "9960:66:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10020:5:1" + } + ], + "functionName": { + "name": "array_length_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "9974:45:1" + }, + "nodeType": "YulFunctionCall", + "src": "9974:52:1" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "9964:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10035:91:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "10114:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "10119:6:1" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "10042:71:1" + }, + "nodeType": "YulFunctionCall", + "src": "10042:84:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "10035:3:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10135:69:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10198:5:1" + } + ], + "functionName": { + "name": "array_dataslot_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "10150:47:1" + }, + "nodeType": "YulFunctionCall", + "src": "10150:54:1" + }, + "variables": [ + { + "name": "baseRef", + "nodeType": "YulTypedName", + "src": "10139:7:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10213:21:1", + "value": { + "name": "baseRef", + "nodeType": "YulIdentifier", + "src": "10227:7:1" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "10217:6:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10303:222:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "10317:34:1", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "10344:6:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10338:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "10338:13:1" + }, + "variables": [ + { + "name": "elementValue0", + "nodeType": "YulTypedName", + "src": "10321:13:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10364:70:1", + "value": { + "arguments": [ + { + "name": "elementValue0", + "nodeType": "YulIdentifier", + "src": "10415:13:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "10430:3:1" + } + ], + "functionName": { + "name": "abi_encodeUpdatedPos_t_bytes32_to_t_bytes32", + "nodeType": "YulIdentifier", + "src": "10371:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "10371:63:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "10364:3:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10447:68:1", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "10508:6:1" + } + ], + "functionName": { + "name": "array_nextElement_t_array$_t_bytes32_$2_memory_ptr", + "nodeType": "YulIdentifier", + "src": "10457:50:1" + }, + "nodeType": "YulFunctionCall", + "src": "10457:58:1" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "10447:6:1" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "10265:1:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "10268:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "10262:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "10262:13:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "10276:18:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10278:14:1", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "10287:1:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10290:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10283:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "10283:9:1" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "10278:1:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "10247:14:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "10249:10:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10258:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "10253:1:1", + "type": "" + } + ] + } + ] + }, + "src": "10243:282:1" + } + ] + }, + "name": "abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9937:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "9944:3:1", + "type": "" + } + ], + "src": "9838:694:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10682:170:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10692:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "10704:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10715:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10700:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "10700:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "10692:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10818:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "10831:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10842:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10827:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "10827:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "10728:89:1" + }, + "nodeType": "YulFunctionCall", + "src": "10728:117:1" + }, + "nodeType": "YulExpressionStatement", + "src": "10728:117:1" + } + ] + }, + "name": "abi_encode_tuple_t_array$_t_bytes32_$2_memory_ptr__to_t_array$_t_bytes32_$2_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "10654:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "10666:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "10677:4:1", + "type": "" + } + ], + "src": "10538:314:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10916:40:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10927:22:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10943:5:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10937:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "10937:12:1" + }, + "variableNames": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "10927:6:1" + } + ] + } + ] + }, + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10899:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "10909:6:1", + "type": "" + } + ], + "src": "10858:98:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11075:34:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11085:18:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11100:3:1" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "11085:11:1" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "11047:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "11052:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "11063:11:1", + "type": "" + } + ], + "src": "10962:147:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11164:258:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "11174:10:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11183:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "11178:1:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11243:63:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "11268:3:1" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11273:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11264:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "11264:11:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "11287:3:1" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11292:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11283:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "11283:11:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11277:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "11277:18:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11257:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "11257:39:1" + }, + "nodeType": "YulExpressionStatement", + "src": "11257:39:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11204:1:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11207:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11201:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "11201:13:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "11215:19:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11217:15:1", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11226:1:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11229:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11222:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "11222:10:1" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11217:1:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "11197:3:1", + "statements": [] + }, + "src": "11193:113:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11340:76:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "11390:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11395:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11386:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "11386:16:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11404:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11379:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "11379:27:1" + }, + "nodeType": "YulExpressionStatement", + "src": "11379:27:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11321:1:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11324:6:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "11318:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "11318:13:1" + }, + "nodeType": "YulIf", + "src": "11315:101:1" + } + ] + }, + "name": "copy_memory_to_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "11146:3:1", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "11151:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "11156:6:1", + "type": "" + } + ], + "src": "11115:307:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11536:265:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "11546:52:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11592:5:1" + } + ], + "functionName": { + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "11560:31:1" + }, + "nodeType": "YulFunctionCall", + "src": "11560:38:1" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "11550:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "11607:95:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11690:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11695:6:1" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "11614:75:1" + }, + "nodeType": "YulFunctionCall", + "src": "11614:88:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11607:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11737:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11744:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11733:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "11733:16:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11751:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11756:6:1" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "11711:21:1" + }, + "nodeType": "YulFunctionCall", + "src": "11711:52:1" + }, + "nodeType": "YulExpressionStatement", + "src": "11711:52:1" + }, + { + "nodeType": "YulAssignment", + "src": "11772:23:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11783:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11788:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11779:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "11779:16:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11772:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11517:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "11524:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "11532:3:1", + "type": "" + } + ], + "src": "11428:373:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11941:137:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11952:100:1", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "12039:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12048:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "11959:79:1" + }, + "nodeType": "YulFunctionCall", + "src": "11959:93:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11952:3:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12062:10:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12069:3:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12062:3:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "11920:3:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "11926:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "11937:3:1", + "type": "" + } + ], + "src": "11807:271:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12180:73:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12197:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "12202:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12190:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "12190:19:1" + }, + "nodeType": "YulExpressionStatement", + "src": "12190:19:1" + }, + { + "nodeType": "YulAssignment", + "src": "12218:29:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12237:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12242:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12233:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "12233:14:1" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "12218:11:1" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "12152:3:1", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "12157:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "12168:11:1", + "type": "" + } + ], + "src": "12084:169:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12365:73:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "12387:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12395:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12383:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "12383:14:1" + }, + { + "hexValue": "656c6c69707469632063757276652070616972696e67206661696c6564", + "kind": "string", + "nodeType": "YulLiteral", + "src": "12399:31:1", + "type": "", + "value": "elliptic curve pairing failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12376:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "12376:55:1" + }, + "nodeType": "YulExpressionStatement", + "src": "12376:55:1" + } + ] + }, + "name": "store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "12357:6:1", + "type": "" + } + ], + "src": "12259:179:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12590:220:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12600:74:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12666:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12671:2:1", + "type": "", + "value": "29" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "12607:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "12607:67:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12600:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12772:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862", + "nodeType": "YulIdentifier", + "src": "12683:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "12683:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "12683:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "12785:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12796:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12801:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12792:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "12792:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12785:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "12578:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "12586:3:1", + "type": "" + } + ], + "src": "12444:366:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12987:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12997:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13009:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13020:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13005:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "13005:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "12997:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13044:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13055:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13040:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "13040:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13063:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13069:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "13059:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "13059:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13033:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "13033:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "13033:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "13089:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13223:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "13097:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "13097:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13089:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "12967:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "12982:4:1", + "type": "" + } + ], + "src": "12816:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13269:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13286:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13289:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13279:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "13279:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "13279:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13383:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13386:4:1", + "type": "", + "value": "0x32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13376:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "13376:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "13376:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13407:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13410:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "13400:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "13400:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "13400:15:1" + } + ] + }, + "name": "panic_error_0x32", + "nodeType": "YulFunctionDefinition", + "src": "13241:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13533:50:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "13555:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13563:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13551:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "13551:14:1" + }, + { + "hexValue": "6661696c6564", + "kind": "string", + "nodeType": "YulLiteral", + "src": "13567:8:1", + "type": "", + "value": "failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13544:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "13544:32:1" + }, + "nodeType": "YulExpressionStatement", + "src": "13544:32:1" + } + ] + }, + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "13525:6:1", + "type": "" + } + ], + "src": "13427:156:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13735:219:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "13745:73:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13811:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13816:1:1", + "type": "", + "value": "6" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "13752:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "13752:66:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13745:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13916:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43", + "nodeType": "YulIdentifier", + "src": "13827:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "13827:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "13827:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "13929:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13940:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13945:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13936:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "13936:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "13929:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "13723:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "13731:3:1", + "type": "" + } + ], + "src": "13589:365:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14131:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "14141:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14153:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14164:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14149:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "14149:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14141:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14188:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14199:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14184:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "14184:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14207:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14213:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "14203:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "14203:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14177:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "14177:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "14177:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "14233:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14367:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "14241:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "14241:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14233:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "14111:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "14126:4:1", + "type": "" + } + ], + "src": "13960:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14491:74:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "14513:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14521:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14509:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "14509:14:1" + }, + { + "hexValue": "656c6c6970746963206375727665206164646974696f6e206661696c6564", + "kind": "string", + "nodeType": "YulLiteral", + "src": "14525:32:1", + "type": "", + "value": "elliptic curve addition failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14502:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "14502:56:1" + }, + "nodeType": "YulExpressionStatement", + "src": "14502:56:1" + } + ] + }, + "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "14483:6:1", + "type": "" + } + ], + "src": "14385:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14717:220:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "14727:74:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14793:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14798:2:1", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "14734:58:1" + }, + "nodeType": "YulFunctionCall", + "src": "14734:67:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14727:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14899:3:1" + } + ], + "functionName": { + "name": "store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27", + "nodeType": "YulIdentifier", + "src": "14810:88:1" + }, + "nodeType": "YulFunctionCall", + "src": "14810:93:1" + }, + "nodeType": "YulExpressionStatement", + "src": "14810:93:1" + }, + { + "nodeType": "YulAssignment", + "src": "14912:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "14923:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14928:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14919:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "14919:12:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "14912:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "14705:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "14713:3:1", + "type": "" + } + ], + "src": "14571:366:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15114:248:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "15124:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15136:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15147:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15132:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "15132:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "15124:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15171:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15182:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15167:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "15167:17:1" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "15190:4:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15196:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "15186:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "15186:20:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15160:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "15160:47:1" + }, + "nodeType": "YulExpressionStatement", + "src": "15160:47:1" + }, + { + "nodeType": "YulAssignment", + "src": "15216:139:1", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "15350:4:1" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "15224:124:1" + }, + "nodeType": "YulFunctionCall", + "src": "15224:131:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "15216:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "15094:9:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "15109:4:1", + "type": "" + } + ], + "src": "14943:419:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15411:53:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "15421:36:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15446:3:1", + "type": "", + "value": "224" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15451:5:1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "15442:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "15442:15:1" + }, + "variableNames": [ + { + "name": "newValue", + "nodeType": "YulIdentifier", + "src": "15421:8:1" + } + ] + } + ] + }, + "name": "shift_left_224", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "15392:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "newValue", + "nodeType": "YulTypedName", + "src": "15402:8:1", + "type": "" + } + ], + "src": "15368:96:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15516:48:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "15526:32:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15552:5:1" + } + ], + "functionName": { + "name": "shift_left_224", + "nodeType": "YulIdentifier", + "src": "15537:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "15537:21:1" + }, + "variableNames": [ + { + "name": "aligned", + "nodeType": "YulIdentifier", + "src": "15526:7:1" + } + ] + } + ] + }, + "name": "leftAlign_t_uint32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "15498:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "aligned", + "nodeType": "YulTypedName", + "src": "15508:7:1", + "type": "" + } + ], + "src": "15470:94:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15651:72:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "15668:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15709:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint32", + "nodeType": "YulIdentifier", + "src": "15692:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "15692:23:1" + } + ], + "functionName": { + "name": "leftAlign_t_uint32", + "nodeType": "YulIdentifier", + "src": "15673:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "15673:43:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15661:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "15661:56:1" + }, + "nodeType": "YulExpressionStatement", + "src": "15661:56:1" + } + ] + }, + "name": "abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "15639:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "15646:3:1", + "type": "" + } + ], + "src": "15570:153:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15776:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "15786:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15797:5:1" + }, + "variableNames": [ + { + "name": "aligned", + "nodeType": "YulIdentifier", + "src": "15786:7:1" + } + ] + } + ] + }, + "name": "leftAlign_t_bytes32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "15758:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "aligned", + "nodeType": "YulTypedName", + "src": "15768:7:1", + "type": "" + } + ], + "src": "15729:79:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15897:74:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "15914:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15957:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bytes32", + "nodeType": "YulIdentifier", + "src": "15939:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "15939:24:1" + } + ], + "functionName": { + "name": "leftAlign_t_bytes32", + "nodeType": "YulIdentifier", + "src": "15919:19:1" + }, + "nodeType": "YulFunctionCall", + "src": "15919:45:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15907:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "15907:58:1" + }, + "nodeType": "YulExpressionStatement", + "src": "15907:58:1" + } + ] + }, + "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "15885:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "15892:3:1", + "type": "" + } + ], + "src": "15814:157:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16023:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16033:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16044:5:1" + }, + "variableNames": [ + { + "name": "aligned", + "nodeType": "YulIdentifier", + "src": "16033:7:1" + } + ] + } + ] + }, + "name": "leftAlign_t_bytes8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16005:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "aligned", + "nodeType": "YulTypedName", + "src": "16015:7:1", + "type": "" + } + ], + "src": "15977:78:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16142:72:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16159:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16200:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bytes8", + "nodeType": "YulIdentifier", + "src": "16183:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "16183:23:1" + } + ], + "functionName": { + "name": "leftAlign_t_bytes8", + "nodeType": "YulIdentifier", + "src": "16164:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "16164:43:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16152:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "16152:56:1" + }, + "nodeType": "YulExpressionStatement", + "src": "16152:56:1" + } + ] + }, + "name": "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16130:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "16137:3:1", + "type": "" + } + ], + "src": "16061:153:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16263:53:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16273:36:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16298:3:1", + "type": "", + "value": "248" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16303:5:1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "16294:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "16294:15:1" + }, + "variableNames": [ + { + "name": "newValue", + "nodeType": "YulIdentifier", + "src": "16273:8:1" + } + ] + } + ] + }, + "name": "shift_left_248", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16244:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "newValue", + "nodeType": "YulTypedName", + "src": "16254:8:1", + "type": "" + } + ], + "src": "16220:96:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16367:48:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16377:32:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16403:5:1" + } + ], + "functionName": { + "name": "shift_left_248", + "nodeType": "YulIdentifier", + "src": "16388:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "16388:21:1" + }, + "variableNames": [ + { + "name": "aligned", + "nodeType": "YulIdentifier", + "src": "16377:7:1" + } + ] + } + ] + }, + "name": "leftAlign_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16349:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "aligned", + "nodeType": "YulTypedName", + "src": "16359:7:1", + "type": "" + } + ], + "src": "16322:93:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16465:51:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16475:35:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16504:5:1" + } + ], + "functionName": { + "name": "leftAlign_t_uint8", + "nodeType": "YulIdentifier", + "src": "16486:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "16486:24:1" + }, + "variableNames": [ + { + "name": "aligned", + "nodeType": "YulIdentifier", + "src": "16475:7:1" + } + ] + } + ] + }, + "name": "leftAlign_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16447:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "aligned", + "nodeType": "YulTypedName", + "src": "16457:7:1", + "type": "" + } + ], + "src": "16421:95:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16599:68:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16616:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16653:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bool", + "nodeType": "YulIdentifier", + "src": "16638:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "16638:21:1" + } + ], + "functionName": { + "name": "leftAlign_t_bool", + "nodeType": "YulIdentifier", + "src": "16621:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "16621:39:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16609:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "16609:52:1" + }, + "nodeType": "YulExpressionStatement", + "src": "16609:52:1" + } + ] + }, + "name": "abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16587:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "16594:3:1", + "type": "" + } + ], + "src": "16522:145:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17029:1141:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17100:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17109:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17040:59:1" + }, + "nodeType": "YulFunctionCall", + "src": "17040:73:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17040:73:1" + }, + { + "nodeType": "YulAssignment", + "src": "17122:18:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17133:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17138:1:1", + "type": "", + "value": "4" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17129:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17129:11:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17122:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "17212:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17221:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17150:61:1" + }, + "nodeType": "YulFunctionCall", + "src": "17150:75:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17150:75:1" + }, + { + "nodeType": "YulAssignment", + "src": "17234:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17245:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17250:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17241:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17241:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17234:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "17325:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17334:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17263:61:1" + }, + "nodeType": "YulFunctionCall", + "src": "17263:75:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17263:75:1" + }, + { + "nodeType": "YulAssignment", + "src": "17347:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17358:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17363:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17354:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17354:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17347:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "17438:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17447:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17376:61:1" + }, + "nodeType": "YulFunctionCall", + "src": "17376:75:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17376:75:1" + }, + { + "nodeType": "YulAssignment", + "src": "17460:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17471:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17476:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17467:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17467:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17460:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "17551:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17560:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17489:61:1" + }, + "nodeType": "YulFunctionCall", + "src": "17489:75:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17489:75:1" + }, + { + "nodeType": "YulAssignment", + "src": "17573:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17584:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17589:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17580:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17580:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17573:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value5", + "nodeType": "YulIdentifier", + "src": "17664:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17673:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17602:61:1" + }, + "nodeType": "YulFunctionCall", + "src": "17602:75:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17602:75:1" + }, + { + "nodeType": "YulAssignment", + "src": "17686:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17697:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17702:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17693:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17693:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17686:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value6", + "nodeType": "YulIdentifier", + "src": "17777:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17786:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17715:61:1" + }, + "nodeType": "YulFunctionCall", + "src": "17715:75:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17715:75:1" + }, + { + "nodeType": "YulAssignment", + "src": "17799:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17810:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17815:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17806:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17806:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17799:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value7", + "nodeType": "YulIdentifier", + "src": "17888:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17897:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17828:59:1" + }, + "nodeType": "YulFunctionCall", + "src": "17828:73:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17828:73:1" + }, + { + "nodeType": "YulAssignment", + "src": "17910:18:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17921:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17926:1:1", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17917:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "17917:11:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "17910:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value8", + "nodeType": "YulIdentifier", + "src": "17998:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "18007:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "17938:59:1" + }, + "nodeType": "YulFunctionCall", + "src": "17938:73:1" + }, + "nodeType": "YulExpressionStatement", + "src": "17938:73:1" + }, + { + "nodeType": "YulAssignment", + "src": "18020:18:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "18031:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18036:1:1", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18027:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "18027:11:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "18020:3:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value9", + "nodeType": "YulIdentifier", + "src": "18104:6:1" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "18113:3:1" + } + ], + "functionName": { + "name": "abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack", + "nodeType": "YulIdentifier", + "src": "18048:55:1" + }, + "nodeType": "YulFunctionCall", + "src": "18048:69:1" + }, + "nodeType": "YulExpressionStatement", + "src": "18048:69:1" + }, + { + "nodeType": "YulAssignment", + "src": "18126:18:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "18137:3:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18142:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18133:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "18133:11:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "18126:3:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "18154:10:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "18161:3:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "18154:3:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__to_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__nonPadded_inplace_fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "16936:3:1", + "type": "" + }, + { + "name": "value9", + "nodeType": "YulTypedName", + "src": "16942:6:1", + "type": "" + }, + { + "name": "value8", + "nodeType": "YulTypedName", + "src": "16950:6:1", + "type": "" + }, + { + "name": "value7", + "nodeType": "YulTypedName", + "src": "16958:6:1", + "type": "" + }, + { + "name": "value6", + "nodeType": "YulTypedName", + "src": "16966:6:1", + "type": "" + }, + { + "name": "value5", + "nodeType": "YulTypedName", + "src": "16974:6:1", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "16982:6:1", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "16990:6:1", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "16998:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "17006:6:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17014:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "17025:3:1", + "type": "" + } + ], + "src": "16673:1497:1" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint32(value) -> cleaned {\n cleaned := and(value, 0xffffffff)\n }\n\n function validator_revert_t_uint32(value) {\n if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint32(value)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_array$_t_bytes32_$2_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n function cleanup_t_bytes32(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_bytes32(value) {\n if iszero(eq(value, cleanup_t_bytes32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes32(value)\n }\n\n // bytes32[2]\n function abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes32_$2_memory_ptr(length))\n let dst := array\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_bytes32(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes32[2]\n function abi_decode_t_array$_t_bytes32_$2_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := 0x02\n array := abi_decode_available_length_t_array$_t_bytes32_$2_memory_ptr(offset, length, end)\n }\n\n function array_allocation_size_t_array$_t_bytes32_$4_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n }\n\n // bytes32[4]\n function abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes32_$4_memory_ptr(length))\n let dst := array\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_bytes32(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes32[4]\n function abi_decode_t_array$_t_bytes32_$4_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := 0x04\n array := abi_decode_available_length_t_array$_t_bytes32_$4_memory_ptr(offset, length, end)\n }\n\n function array_allocation_size_t_array$_t_bytes8_$2_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n }\n\n function cleanup_t_bytes8(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff000000000000000000000000000000000000000000000000)\n }\n\n function validator_revert_t_bytes8(value) {\n if iszero(eq(value, cleanup_t_bytes8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes8(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes8(value)\n }\n\n // bytes8[2]\n function abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes8_$2_memory_ptr(length))\n let dst := array\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_bytes8(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes8[2]\n function abi_decode_t_array$_t_bytes8_$2_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := 0x02\n array := abi_decode_available_length_t_array$_t_bytes8_$2_memory_ptr(offset, length, end)\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_uint32t_array$_t_bytes32_$2_memory_ptrt_array$_t_bytes32_$4_memory_ptrt_array$_t_bytes8_$2_memory_ptrt_bool(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 320) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_array$_t_bytes32_$2_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value2 := abi_decode_t_array$_t_bytes32_$4_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 224\n\n value3 := abi_decode_t_array$_t_bytes8_$2_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 288\n\n value4 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_length_t_array$_t_bytes32_$2_memory_ptr(value) -> length {\n\n length := 0x02\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function array_dataslot_t_array$_t_bytes32_$2_memory_ptr(ptr) -> data {\n data := ptr\n\n }\n\n function abi_encode_t_bytes32_to_t_bytes32(value, pos) {\n mstore(pos, cleanup_t_bytes32(value))\n }\n\n function abi_encodeUpdatedPos_t_bytes32_to_t_bytes32(value0, pos) -> updatedPos {\n abi_encode_t_bytes32_to_t_bytes32(value0, pos)\n updatedPos := add(pos, 0x20)\n }\n\n function array_nextElement_t_array$_t_bytes32_$2_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // bytes32[2] -> bytes32[2]\n function abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack(value, pos) {\n let length := array_length_t_array$_t_bytes32_$2_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_bytes32_$2_memory_ptr_fromStack(pos, length)\n let baseRef := array_dataslot_t_array$_t_bytes32_$2_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n let elementValue0 := mload(srcPtr)\n pos := abi_encodeUpdatedPos_t_bytes32_to_t_bytes32(elementValue0, pos)\n srcPtr := array_nextElement_t_array$_t_bytes32_$2_memory_ptr(srcPtr)\n }\n\n }\n\n function abi_encode_tuple_t_array$_t_bytes32_$2_memory_ptr__to_t_array$_t_bytes32_$2_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_array$_t_bytes32_$2_memory_ptr_to_t_array$_t_bytes32_$2_memory_ptr_fromStack(value0, add(headStart, 0))\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length) -> updated_pos {\n updated_pos := pos\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_nonPadded_inplace_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos , value0) -> end {\n\n pos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_nonPadded_inplace_fromStack(value0, pos)\n\n end := pos\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve pairing failed\")\n\n }\n\n function abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 29)\n store_literal_in_memory_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_dc2f8c3d1a6057e9deb8934eebf88df4d746938df18208c9f82776620c480862_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function panic_error_0x32() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n\n function store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(memPtr) {\n\n mstore(add(memPtr, 0), \"failed\")\n\n }\n\n function abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 6)\n store_literal_in_memory_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_8f44d68b1a26169d304522fa2f95aa938d98120d628d1db5726120ca84e53b43_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(memPtr) {\n\n mstore(add(memPtr, 0), \"elliptic curve addition failed\")\n\n }\n\n function abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 30)\n store_literal_in_memory_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_0b6c4680c9699354fe09d0e864e370495b9b131fb2b406b5cf2517a420eb7e27_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function shift_left_224(value) -> newValue {\n newValue :=\n\n shl(224, value)\n\n }\n\n function leftAlign_t_uint32(value) -> aligned {\n aligned := shift_left_224(value)\n }\n\n function abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_uint32(cleanup_t_uint32(value)))\n }\n\n function leftAlign_t_bytes32(value) -> aligned {\n aligned := value\n }\n\n function abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_bytes32(cleanup_t_bytes32(value)))\n }\n\n function leftAlign_t_bytes8(value) -> aligned {\n aligned := value\n }\n\n function abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_bytes8(cleanup_t_bytes8(value)))\n }\n\n function shift_left_248(value) -> newValue {\n newValue :=\n\n shl(248, value)\n\n }\n\n function leftAlign_t_uint8(value) -> aligned {\n aligned := shift_left_248(value)\n }\n\n function leftAlign_t_bool(value) -> aligned {\n aligned := leftAlign_t_uint8(value)\n }\n\n function abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack(value, pos) {\n mstore(pos, leftAlign_t_bool(cleanup_t_bool(value)))\n }\n\n function abi_encode_tuple_packed_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__to_t_uint32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes32_t_bytes8_t_bytes8_t_bool__nonPadded_inplace_fromStack_reversed(pos , value9, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> end {\n\n abi_encode_t_uint32_to_t_uint32_nonPadded_inplace_fromStack(value0, pos)\n pos := add(pos, 4)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value1, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value2, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value3, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value4, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value5, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_nonPadded_inplace_fromStack(value6, pos)\n pos := add(pos, 32)\n\n abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack(value7, pos)\n pos := add(pos, 8)\n\n abi_encode_t_bytes8_to_t_bytes8_nonPadded_inplace_fromStack(value8, pos)\n pos := add(pos, 8)\n\n abi_encode_t_bool_to_t_bool_nonPadded_inplace_fromStack(value9, pos)\n pos := add(pos, 1)\n\n end := pos\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100885760003560e01c8063985762481161005b57806398576248146100b5578063ab26c7f8146100bf578063c9a6e474146100ef578063cb5c707c146100f957610088565b806328820a241461008d578063503a67721461009757806360012e3a146100a15780638588cc9c146100ab575b600080fd5b610095610129565b005b61009f6101d1565b005b6100a9610464565b005b6100b361077f565b005b6100bd610976565b005b6100d960048036038101906100d49190610de7565b6109ac565b6040516100e69190610e49565b60405180910390f35b6100f76109fb565b005b610113600480360381019061010e919061120f565b610bcc565b6040516101209190611337565b60405180910390f35b7f8476ee4631b9b30ac2754b0ee0c47e161d3f724c00000000000000000000000060036040518060400160405280600c81526020017f48656c6c6f20576f726c6421000000000000000000000000000000000000000081525060405161018f91906113cc565b602060405180830381855afa1580156101ac573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916146101cf57600080fd5b565b60006040518061018001604052807f2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0281526020017f03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db8481526020017f1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee81526020017f2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f81526020017f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e98623781526020017f096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f81526020017f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db981526020017f22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b81526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81525090506103af610cf8565b600060208261018085600060086107d05a03f1905080610404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103fb90611440565b60405180910390fd5b60018260006001811061041a57610419611460565b5b60200201511461045f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610456906114db565b60405180910390fd5b505050565b6000600c9050610472610d1a565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5816000600281106104a7576104a6611460565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b816001600281106104e5576104e4611460565b5b6020020181815250506104f6610d3c565b7f61626300000000000000000000000000000000000000000000000000000000008160006004811061052b5761052a611460565b5b60200201818152505060008160016004811061054a57610549611460565b5b60200201818152505060008160026004811061056957610568611460565b5b60200201818152505060008160036004811061058857610587611460565b5b602002018181525050610599610d5e565b7f0300000000000000000000000000000000000000000000000000000000000000816000600281106105ce576105cd611460565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff19168152505060008160016002811061062557610624611460565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff191681525050600060019050600061067b8686868686610bcc565b90507fba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d160001b816000600281106106b5576106b4611460565b5b6020020151146106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f1906114db565b60405180910390fd5b7f7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd400992360001b8160016002811061073257610731611460565b5b602002015114610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076e906114db565b60405180910390fd5b505050505050565b60008060405180608001604052807f2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee20283970381526020017f301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c91581526020017f18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc981526020017f063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266815250905061082d610d80565b60408160808460006006600019f192508261087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087490611547565b60405180910390fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7816000600281106108b2576108b1611460565b5b6020020151146108f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ee906114db565b60405180910390fd5b7f21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb2048160016002811061092c5761092b611460565b5b602002015114610971576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610968906114db565b60405180910390fd5b505050565b60056109866003600560076109ac565b1461099057600080fd5b60036109a060056007600b6109ac565b146109aa57600080fd5b565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16109ee57600080fd5b8051925050509392505050565b60008060405180606001604052807f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381526020017f1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f681526020017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000008152509050610a83610d80565b60408160608460006007600019f1925082610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90611547565b60405180910390fd5b7f1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe381600060028110610b0857610b07611460565b5b602002015114610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b44906114db565b60405180910390fd5b7f163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae083045181600160028110610b8257610b81611460565b5b602002015114610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe906114db565b60405180910390fd5b505050565b610bd4610d1a565b610bdc610d1a565b60008787600060028110610bf357610bf2611460565b5b602002015188600160028110610c0c57610c0b611460565b5b602002015188600060048110610c2557610c24611460565b5b602002015189600160048110610c3e57610c3d611460565b5b60200201518a600260048110610c5757610c56611460565b5b60200201518b600360048110610c7057610c6f611460565b5b60200201518b600060028110610c8957610c88611460565b5b60200201518c600160028110610ca257610ca1611460565b5b60200201518c604051602001610cc19a99989796959493929190611627565b604051602081830303815290604052905060408260d5602084016009600019fa610cea57600080fd5b819250505095945050505050565b6040518060200160405280600190602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b6000604051905090565b600080fd5b6000819050919050565b610dc481610db1565b8114610dcf57600080fd5b50565b600081359050610de181610dbb565b92915050565b600080600060608486031215610e0057610dff610dac565b5b6000610e0e86828701610dd2565b9350506020610e1f86828701610dd2565b9250506040610e3086828701610dd2565b9150509250925092565b610e4381610db1565b82525050565b6000602082019050610e5e6000830184610e3a565b92915050565b600063ffffffff82169050919050565b610e7d81610e64565b8114610e8857600080fd5b50565b600081359050610e9a81610e74565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610eee82610ea5565b810181811067ffffffffffffffff82111715610f0d57610f0c610eb6565b5b80604052505050565b6000610f20610da2565b9050610f2c8282610ee5565b919050565b600067ffffffffffffffff821115610f4c57610f4b610eb6565b5b602082029050919050565b600080fd5b6000819050919050565b610f6f81610f5c565b8114610f7a57600080fd5b50565b600081359050610f8c81610f66565b92915050565b6000610fa5610fa084610f31565b610f16565b90508060208402830185811115610fbf57610fbe610f57565b5b835b81811015610fe85780610fd48882610f7d565b845260208401935050602081019050610fc1565b5050509392505050565b600082601f83011261100757611006610ea0565b5b6002611014848285610f92565b91505092915050565b600067ffffffffffffffff82111561103857611037610eb6565b5b602082029050919050565b60006110566110518461101d565b610f16565b905080602084028301858111156110705761106f610f57565b5b835b8181101561109957806110858882610f7d565b845260208401935050602081019050611072565b5050509392505050565b600082601f8301126110b8576110b7610ea0565b5b60046110c5848285611043565b91505092915050565b600067ffffffffffffffff8211156110e9576110e8610eb6565b5b602082029050919050565b60007fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b611129816110f4565b811461113457600080fd5b50565b60008135905061114681611120565b92915050565b600061115f61115a846110ce565b610f16565b9050806020840283018581111561117957611178610f57565b5b835b818110156111a2578061118e8882611137565b84526020840193505060208101905061117b565b5050509392505050565b600082601f8301126111c1576111c0610ea0565b5b60026111ce84828561114c565b91505092915050565b60008115159050919050565b6111ec816111d7565b81146111f757600080fd5b50565b600081359050611209816111e3565b92915050565b6000806000806000610140868803121561122c5761122b610dac565b5b600061123a88828901610e8b565b955050602061124b88828901610ff2565b945050606061125c888289016110a3565b93505060e061126d888289016111ac565b92505061012061127f888289016111fa565b9150509295509295909350565b600060029050919050565b600081905092915050565b6000819050919050565b6112b581610f5c565b82525050565b60006112c783836112ac565b60208301905092915050565b6000602082019050919050565b6112e98161128c565b6112f38184611297565b92506112fe826112a2565b8060005b8381101561132f57815161131687826112bb565b9650611321836112d3565b925050600181019050611302565b505050505050565b600060408201905061134c60008301846112e0565b92915050565b600081519050919050565b600081905092915050565b60005b8381101561138657808201518184015260208101905061136b565b83811115611395576000848401525b50505050565b60006113a682611352565b6113b0818561135d565b93506113c0818560208601611368565b80840191505092915050565b60006113d8828461139b565b915081905092915050565b600082825260208201905092915050565b7f656c6c69707469632063757276652070616972696e67206661696c6564000000600082015250565b600061142a601d836113e3565b9150611435826113f4565b602082019050919050565b600060208201905081810360008301526114598161141d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f6661696c65640000000000000000000000000000000000000000000000000000600082015250565b60006114c56006836113e3565b91506114d08261148f565b602082019050919050565b600060208201905081810360008301526114f4816114b8565b9050919050565b7f656c6c6970746963206375727665206164646974696f6e206661696c65640000600082015250565b6000611531601e836113e3565b915061153c826114fb565b602082019050919050565b6000602082019050818103600083015261156081611524565b9050919050565b60008160e01b9050919050565b600061157f82611567565b9050919050565b61159761159282610e64565b611574565b82525050565b6000819050919050565b6115b86115b382610f5c565b61159d565b82525050565b6000819050919050565b6115d96115d4826110f4565b6115be565b82525050565b60008160f81b9050919050565b60006115f7826115df565b9050919050565b6000611609826115ec565b9050919050565b61162161161c826111d7565b6115fe565b82525050565b6000611633828d611586565b600482019150611643828c6115a7565b602082019150611653828b6115a7565b602082019150611663828a6115a7565b60208201915061167382896115a7565b60208201915061168382886115a7565b60208201915061169382876115a7565b6020820191506116a382866115c8565b6008820191506116b382856115c8565b6008820191506116c38284611610565b6001820191508190509b9a505050505050505050505056fea264697066735822122079cfdf99f34c525bb4072cde2303cdaeca4e75666256549f1f713f0ea3ec58ce64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x98576248 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x98576248 EQ PUSH2 0xB5 JUMPI DUP1 PUSH4 0xAB26C7F8 EQ PUSH2 0xBF JUMPI DUP1 PUSH4 0xC9A6E474 EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0xCB5C707C EQ PUSH2 0xF9 JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x28820A24 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x503A6772 EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x60012E3A EQ PUSH2 0xA1 JUMPI DUP1 PUSH4 0x8588CC9C EQ PUSH2 0xAB JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x129 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x1D1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA9 PUSH2 0x464 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB3 PUSH2 0x77F JUMP JUMPDEST STOP JUMPDEST PUSH2 0xBD PUSH2 0x976 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xD4 SWAP2 SWAP1 PUSH2 0xDE7 JUMP JUMPDEST PUSH2 0x9AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xE6 SWAP2 SWAP1 PUSH2 0xE49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF7 PUSH2 0x9FB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x113 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x10E SWAP2 SWAP1 PUSH2 0x120F JUMP JUMPDEST PUSH2 0xBCC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x120 SWAP2 SWAP1 PUSH2 0x1337 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH32 0x8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000 PUSH1 0x3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xC DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F20576F726C64210000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD PUSH2 0x18F SWAP2 SWAP1 PUSH2 0x13CC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1AC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP PUSH1 0x40 MLOAD MLOAD PUSH1 0x60 SHL PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ PUSH2 0x1CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH2 0x180 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA DUP2 MSTORE POP SWAP1 POP PUSH2 0x3AF PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 PUSH2 0x180 DUP6 PUSH1 0x0 PUSH1 0x8 PUSH2 0x7D0 GAS SUB CALL SWAP1 POP DUP1 PUSH2 0x404 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3FB SWAP1 PUSH2 0x1440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP3 PUSH1 0x0 PUSH1 0x1 DUP2 LT PUSH2 0x41A JUMPI PUSH2 0x419 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x45F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x456 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC SWAP1 POP PUSH2 0x472 PUSH2 0xD1A JUMP JUMPDEST PUSH32 0x48C9BDF267E6096A3BA7CA8485AE67BB2BF894FE72F36E3CF1361D5F3AF54FA5 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x4A7 JUMPI PUSH2 0x4A6 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH32 0xD182E6AD7F520E511F6C3E2B8C68059B6BBD41FBABD9831F79217E1319CDE05B DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x4E5 JUMPI PUSH2 0x4E4 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4F6 PUSH2 0xD3C JUMP JUMPDEST PUSH32 0x6162630000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0x52B JUMPI PUSH2 0x52A PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0x54A JUMPI PUSH2 0x549 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0x569 JUMPI PUSH2 0x568 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0x588 JUMPI PUSH2 0x587 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x599 PUSH2 0xD5E JUMP JUMPDEST PUSH32 0x300000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x5CE JUMPI PUSH2 0x5CD PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x625 JUMPI PUSH2 0x624 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD SWAP1 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP PUSH1 0x0 PUSH2 0x67B DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0xBCC JUMP JUMPDEST SWAP1 POP PUSH32 0xBA80A53F981C4D0D6A2797B69F12F6E94C212F14685AC4B74B12BB6FDBFFA2D1 PUSH1 0x0 SHL DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x6B5 JUMPI PUSH2 0x6B4 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x6FA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6F1 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x7D87C5392AAB792DC252D5DE4533CC9518D38AA8DBF1925AB92386EDD4009923 PUSH1 0x0 SHL DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x732 JUMPI PUSH2 0x731 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x777 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x76E SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266 DUP2 MSTORE POP SWAP1 POP PUSH2 0x82D PUSH2 0xD80 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x80 DUP5 PUSH1 0x0 PUSH1 0x6 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0x87D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x874 SWAP1 PUSH2 0x1547 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0x8B2 JUMPI PUSH2 0x8B1 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x8F7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8EE SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0x92C JUMPI PUSH2 0x92B PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0x971 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x968 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x5 PUSH2 0x986 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH2 0x9AC JUMP JUMPDEST EQ PUSH2 0x990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x9A0 PUSH1 0x5 PUSH1 0x7 PUSH1 0xB PUSH2 0x9AC JUMP JUMPDEST EQ PUSH2 0x9AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0x9EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000 DUP2 MSTORE POP SWAP1 POP PUSH2 0xA83 PUSH2 0xD80 JUMP JUMPDEST PUSH1 0x40 DUP2 PUSH1 0x60 DUP5 PUSH1 0x0 PUSH1 0x7 PUSH1 0x0 NOT CALL SWAP3 POP DUP3 PUSH2 0xAD3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xACA SWAP1 PUSH2 0x1547 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3 DUP2 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xB08 JUMPI PUSH2 0xB07 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0xB4D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB44 SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451 DUP2 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xB82 JUMPI PUSH2 0xB81 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD EQ PUSH2 0xBC7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xBBE SWAP1 PUSH2 0x14DB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0xBD4 PUSH2 0xD1A JUMP JUMPDEST PUSH2 0xBDC PUSH2 0xD1A JUMP JUMPDEST PUSH1 0x0 DUP8 DUP8 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xBF3 JUMPI PUSH2 0xBF2 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xC0C JUMPI PUSH2 0xC0B PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP9 PUSH1 0x0 PUSH1 0x4 DUP2 LT PUSH2 0xC25 JUMPI PUSH2 0xC24 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP10 PUSH1 0x1 PUSH1 0x4 DUP2 LT PUSH2 0xC3E JUMPI PUSH2 0xC3D PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP11 PUSH1 0x2 PUSH1 0x4 DUP2 LT PUSH2 0xC57 JUMPI PUSH2 0xC56 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x3 PUSH1 0x4 DUP2 LT PUSH2 0xC70 JUMPI PUSH2 0xC6F PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP12 PUSH1 0x0 PUSH1 0x2 DUP2 LT PUSH2 0xC89 JUMPI PUSH2 0xC88 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x1 PUSH1 0x2 DUP2 LT PUSH2 0xCA2 JUMPI PUSH2 0xCA1 PUSH2 0x1460 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL ADD MLOAD DUP13 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCC1 SWAP11 SWAP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1627 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP PUSH1 0x40 DUP3 PUSH1 0xD5 PUSH1 0x20 DUP5 ADD PUSH1 0x9 PUSH1 0x0 NOT STATICCALL PUSH2 0xCEA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 SWAP3 POP POP POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x80 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDC4 DUP2 PUSH2 0xDB1 JUMP JUMPDEST DUP2 EQ PUSH2 0xDCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xDE1 DUP2 PUSH2 0xDBB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xE00 JUMPI PUSH2 0xDFF PUSH2 0xDAC JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE0E DUP7 DUP3 DUP8 ADD PUSH2 0xDD2 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xE1F DUP7 DUP3 DUP8 ADD PUSH2 0xDD2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xE30 DUP7 DUP3 DUP8 ADD PUSH2 0xDD2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0xE43 DUP2 PUSH2 0xDB1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE5E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE3A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xE7D DUP2 PUSH2 0xE64 JUMP JUMPDEST DUP2 EQ PUSH2 0xE88 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xE9A DUP2 PUSH2 0xE74 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xEEE DUP3 PUSH2 0xEA5 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xF0D JUMPI PUSH2 0xF0C PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF20 PUSH2 0xDA2 JUMP JUMPDEST SWAP1 POP PUSH2 0xF2C DUP3 DUP3 PUSH2 0xEE5 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xF4C JUMPI PUSH2 0xF4B PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF6F DUP2 PUSH2 0xF5C JUMP JUMPDEST DUP2 EQ PUSH2 0xF7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xF8C DUP2 PUSH2 0xF66 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFA5 PUSH2 0xFA0 DUP5 PUSH2 0xF31 JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xFBF JUMPI PUSH2 0xFBE PUSH2 0xF57 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xFE8 JUMPI DUP1 PUSH2 0xFD4 DUP9 DUP3 PUSH2 0xF7D JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFC1 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1007 JUMPI PUSH2 0x1006 PUSH2 0xEA0 JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x1014 DUP5 DUP3 DUP6 PUSH2 0xF92 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1038 JUMPI PUSH2 0x1037 PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1056 PUSH2 0x1051 DUP5 PUSH2 0x101D JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1070 JUMPI PUSH2 0x106F PUSH2 0xF57 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1099 JUMPI DUP1 PUSH2 0x1085 DUP9 DUP3 PUSH2 0xF7D JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1072 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x10B8 JUMPI PUSH2 0x10B7 PUSH2 0xEA0 JUMP JUMPDEST JUMPDEST PUSH1 0x4 PUSH2 0x10C5 DUP5 DUP3 DUP6 PUSH2 0x1043 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x10E9 JUMPI PUSH2 0x10E8 PUSH2 0xEB6 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1129 DUP2 PUSH2 0x10F4 JUMP JUMPDEST DUP2 EQ PUSH2 0x1134 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1146 DUP2 PUSH2 0x1120 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x115F PUSH2 0x115A DUP5 PUSH2 0x10CE JUMP JUMPDEST PUSH2 0xF16 JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x1179 JUMPI PUSH2 0x1178 PUSH2 0xF57 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11A2 JUMPI DUP1 PUSH2 0x118E DUP9 DUP3 PUSH2 0x1137 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x117B JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x11C1 JUMPI PUSH2 0x11C0 PUSH2 0xEA0 JUMP JUMPDEST JUMPDEST PUSH1 0x2 PUSH2 0x11CE DUP5 DUP3 DUP6 PUSH2 0x114C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11EC DUP2 PUSH2 0x11D7 JUMP JUMPDEST DUP2 EQ PUSH2 0x11F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1209 DUP2 PUSH2 0x11E3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x140 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x122C JUMPI PUSH2 0x122B PUSH2 0xDAC JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x123A DUP9 DUP3 DUP10 ADD PUSH2 0xE8B JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x124B DUP9 DUP3 DUP10 ADD PUSH2 0xFF2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x60 PUSH2 0x125C DUP9 DUP3 DUP10 ADD PUSH2 0x10A3 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xE0 PUSH2 0x126D DUP9 DUP3 DUP10 ADD PUSH2 0x11AC JUMP JUMPDEST SWAP3 POP POP PUSH2 0x120 PUSH2 0x127F DUP9 DUP3 DUP10 ADD PUSH2 0x11FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x12B5 DUP2 PUSH2 0xF5C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12C7 DUP4 DUP4 PUSH2 0x12AC JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x12E9 DUP2 PUSH2 0x128C JUMP JUMPDEST PUSH2 0x12F3 DUP2 DUP5 PUSH2 0x1297 JUMP JUMPDEST SWAP3 POP PUSH2 0x12FE DUP3 PUSH2 0x12A2 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x132F JUMPI DUP2 MLOAD PUSH2 0x1316 DUP8 DUP3 PUSH2 0x12BB JUMP JUMPDEST SWAP7 POP PUSH2 0x1321 DUP4 PUSH2 0x12D3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1302 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x134C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x12E0 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1386 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x136B JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1395 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13A6 DUP3 PUSH2 0x1352 JUMP JUMPDEST PUSH2 0x13B0 DUP2 DUP6 PUSH2 0x135D JUMP JUMPDEST SWAP4 POP PUSH2 0x13C0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x1368 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13D8 DUP3 DUP5 PUSH2 0x139B JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x656C6C69707469632063757276652070616972696E67206661696C6564000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x142A PUSH1 0x1D DUP4 PUSH2 0x13E3 JUMP JUMPDEST SWAP2 POP PUSH2 0x1435 DUP3 PUSH2 0x13F4 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1459 DUP2 PUSH2 0x141D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x6661696C65640000000000000000000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14C5 PUSH1 0x6 DUP4 PUSH2 0x13E3 JUMP JUMPDEST SWAP2 POP PUSH2 0x14D0 DUP3 PUSH2 0x148F JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x14F4 DUP2 PUSH2 0x14B8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x656C6C6970746963206375727665206164646974696F6E206661696C65640000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1531 PUSH1 0x1E DUP4 PUSH2 0x13E3 JUMP JUMPDEST SWAP2 POP PUSH2 0x153C DUP3 PUSH2 0x14FB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1560 DUP2 PUSH2 0x1524 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xE0 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157F DUP3 PUSH2 0x1567 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1597 PUSH2 0x1592 DUP3 PUSH2 0xE64 JUMP JUMPDEST PUSH2 0x1574 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x15B8 PUSH2 0x15B3 DUP3 PUSH2 0xF5C JUMP JUMPDEST PUSH2 0x159D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x15D9 PUSH2 0x15D4 DUP3 PUSH2 0x10F4 JUMP JUMPDEST PUSH2 0x15BE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0xF8 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15F7 DUP3 PUSH2 0x15DF JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1609 DUP3 PUSH2 0x15EC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1621 PUSH2 0x161C DUP3 PUSH2 0x11D7 JUMP JUMPDEST PUSH2 0x15FE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1633 DUP3 DUP14 PUSH2 0x1586 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP PUSH2 0x1643 DUP3 DUP13 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1653 DUP3 DUP12 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1663 DUP3 DUP11 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1673 DUP3 DUP10 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1683 DUP3 DUP9 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x1693 DUP3 DUP8 PUSH2 0x15A7 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP2 POP PUSH2 0x16A3 DUP3 DUP7 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0x16B3 DUP3 DUP6 PUSH2 0x15C8 JUMP JUMPDEST PUSH1 0x8 DUP3 ADD SWAP2 POP PUSH2 0x16C3 DUP3 DUP5 PUSH2 0x1610 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SWAP2 POP DUP2 SWAP1 POP SWAP12 SWAP11 POP POP POP POP POP POP POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH26 0xCFDF99F34C525BB4072CDE2303CDAECA4E75666256549F1F713F 0xE LOG3 0xEC PC 0xCE PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:7429:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96:183;;;:::i;:::-;;2638:1658;;;:::i;:::-;;6040:1454;;;:::i;:::-;;285:1211;;;:::i;:::-;;5213:132;;;:::i;:::-;;4302:905;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1502:1130;;;:::i;:::-;;5351:683;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96:183;165:97;:32;175:21;;;;;;;;;;;;;;;;;165:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:97;;;;144:128;;;;;;96:183::o;2638:1658::-;2684:24;:997;;;;;;;;2725:66;2684:997;;;;2805:66;2684:997;;;;2885:66;2684:997;;;;2965:66;2684:997;;;;3045:66;2684:997;;;;3125:66;2684:997;;;;3205:66;2684:997;;;;3285:66;2684:997;;;;3365:66;2684:997;;;;3445:66;2684:997;;;;3525:66;2684:997;;;;3605:66;2684:997;;;;;3691:24;;:::i;:::-;3725:12;4175:2;4167:6;4162:3;4155:5;4152:1;4146:4;4139;4132:5;4128:16;4123:55;4112:66;;4205:7;4197:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;4277:1;4264:6;4271:1;4264:9;;;;;;;:::i;:::-;;;;;;:14;4256:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;2674:1622;;;2638:1658::o;6040:1454::-;6080:13;6096:2;6080:18;;6109:19;;:::i;:::-;6138:98;:1;6153;6138:26;;;;;;;:::i;:::-;;;;;:98;;;;;6246;:1;6261;6246:26;;;;;;;:::i;:::-;;;;;:98;;;;;6355:19;;:::i;:::-;6384:98;:1;6399;6384:26;;;;;;;:::i;:::-;;;;;:98;;;;;6492;:1;6507;6492:26;;;;;;;:::i;:::-;;;;;:98;;;;;6600;:1;6615;6600:26;;;;;;;:::i;:::-;;;;;:98;;;;;6708;:1;6723;6708:26;;;;;;;:::i;:::-;;;;;:98;;;;;6817:18;;:::i;:::-;6845:20;:1;6847;6845:4;;;;;;;:::i;:::-;;;;;:20;;;;;;;;;;;;;6875;:1;6877;6875:4;;;;;;;:::i;:::-;;;;;:20;;;;;;;;;;;;;6906:6;6915:4;6906:13;;7111:24;7138:33;7152:6;7160:1;7163;7166;7169;7138:13;:33::i;:::-;7111:60;;7231:66;7202:95;;:6;7209:1;7202:9;;;;;;;:::i;:::-;;;;;;:95;7181:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;7389:66;7360:95;;:6;7367:1;7360:9;;;;;;;:::i;:::-;;;;;;:95;7339:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;6070:1424;;;;;;6040:1454::o;285:1211::-;332:12;354:23;:356;;;;;;;;394:66;354:356;;;;474:66;354:356;;;;554:66;354:356;;;;634:66;354:356;;;;;720:24;;:::i;:::-;1101:2;1093:6;1088:3;1081:5;1078:1;1072:4;1068:1;1064:6;1059:45;1048:56;;1131:7;1123:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;1233:66;1204:6;1211:1;1204:9;;;;;;;:::i;:::-;;;;;;:95;1183:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;1391:66;1362:6;1369:1;1362:9;;;;;;;:::i;:::-;;;;;;:95;1341:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;322:1174;;;285:1211::o;5213:132::-;5289:1;5263:22;5277:1;5280;5283;5263:13;:22::i;:::-;:27;5255:36;;;;;;5336:1;5309:23;5323:1;5326;5329:2;5309:13;:23::i;:::-;:28;5301:37;;;;;;5213:132::o;4302:905::-;4407:14;4512:4;4506:11;4623:4;4614:7;4607:21;4668:4;4661;4652:7;4648:18;4641:32;4713:4;4706;4697:7;4693:18;4686:32;4817:2;4810:4;4801:7;4797:18;4790:30;4860:2;4853:4;4844:7;4840:18;4833:30;4904:2;4897:4;4888:7;4884:18;4877:30;4971:4;4965:11;5105:4;5098:5;5092:4;5083:7;5080:1;5074:4;5070:1;5066:6;5061:49;5051:105;;5140:1;5137;5130:12;5051:105;5185:5;5179:12;5169:22;;4442:759;;4302:905;;;;;:::o;1502:1130::-;1549:12;1571:23;:276;;;;;;;;1611:66;1571:276;;;;1691:66;1571:276;;;;1771:66;1571:276;;;;;1857:24;;:::i;:::-;2237:2;2229:6;2225:2;2218:5;2215:1;2209:4;2205:1;2201:6;2196:44;2185:55;;2267:7;2259:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;2369:66;2340:6;2347:1;2340:9;;;;;;;:::i;:::-;;;;;;:95;2319:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;2527:66;2498:6;2505:1;2498:9;;;;;;;:::i;:::-;;;;;;:95;2477:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;1539:1093;;;1502:1130::o;5351:683::-;5526:17;;:::i;:::-;5555:24;;:::i;:::-;5590:17;5640:6;5660:1;5662;5660:4;;;;;;;:::i;:::-;;;;;;5678:1;5680;5678:4;;;;;;;:::i;:::-;;;;;;5696:1;5698;5696:4;;;;;;;:::i;:::-;;;;;;5714:1;5716;5714:4;;;;;;;:::i;:::-;;;;;;5732:1;5734;5732:4;;;;;;;:::i;:::-;;;;;;5750:1;5752;5750:4;;;;;;;:::i;:::-;;;;;;5768:1;5770;5768:4;;;;;;;:::i;:::-;;;;;;5786:1;5788;5786:4;;;;;;;:::i;:::-;;;;;;5804:1;5610:205;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5590:225;;5930:4;5922:6;5916:4;5911:2;5905:4;5901:13;5895:4;5891:1;5887:6;5876:59;5849:145;;5978:1;5975;5968:12;5849:145;6021:6;6014:13;;;;5351:683;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:619::-;767:6;775;783;832:2;820:9;811:7;807:23;803:32;800:119;;;838:79;;:::i;:::-;800:119;958:1;983:53;1028:7;1019:6;1008:9;1004:22;983:53;:::i;:::-;973:63;;929:117;1085:2;1111:53;1156:7;1147:6;1136:9;1132:22;1111:53;:::i;:::-;1101:63;;1056:118;1213:2;1239:53;1284:7;1275:6;1264:9;1260:22;1239:53;:::i;:::-;1229:63;;1184:118;690:619;;;;;:::o;1315:118::-;1402:24;1420:5;1402:24;:::i;:::-;1397:3;1390:37;1315:118;;:::o;1439:222::-;1532:4;1570:2;1559:9;1555:18;1547:26;;1583:71;1651:1;1640:9;1636:17;1627:6;1583:71;:::i;:::-;1439:222;;;;:::o;1667:93::-;1703:7;1743:10;1736:5;1732:22;1721:33;;1667:93;;;:::o;1766:120::-;1838:23;1855:5;1838:23;:::i;:::-;1831:5;1828:34;1818:62;;1876:1;1873;1866:12;1818:62;1766:120;:::o;1892:137::-;1937:5;1975:6;1962:20;1953:29;;1991:32;2017:5;1991:32;:::i;:::-;1892:137;;;;:::o;2035:117::-;2144:1;2141;2134:12;2158:102;2199:6;2250:2;2246:7;2241:2;2234:5;2230:14;2226:28;2216:38;;2158:102;;;:::o;2266:180::-;2314:77;2311:1;2304:88;2411:4;2408:1;2401:15;2435:4;2432:1;2425:15;2452:281;2535:27;2557:4;2535:27;:::i;:::-;2527:6;2523:40;2665:6;2653:10;2650:22;2629:18;2617:10;2614:34;2611:62;2608:88;;;2676:18;;:::i;:::-;2608:88;2716:10;2712:2;2705:22;2495:238;2452:281;;:::o;2739:129::-;2773:6;2800:20;;:::i;:::-;2790:30;;2829:33;2857:4;2849:6;2829:33;:::i;:::-;2739:129;;;:::o;2874:249::-;2949:4;3039:18;3031:6;3028:30;3025:56;;;3061:18;;:::i;:::-;3025:56;3111:4;3103:6;3099:17;3091:25;;2874:249;;;:::o;3129:117::-;3238:1;3235;3228:12;3252:77;3289:7;3318:5;3307:16;;3252:77;;;:::o;3335:122::-;3408:24;3426:5;3408:24;:::i;:::-;3401:5;3398:35;3388:63;;3447:1;3444;3437:12;3388:63;3335:122;:::o;3463:139::-;3509:5;3547:6;3534:20;3525:29;;3563:33;3590:5;3563:33;:::i;:::-;3463:139;;;;:::o;3626:643::-;3720:5;3745:79;3761:62;3816:6;3761:62;:::i;:::-;3745:79;:::i;:::-;3736:88;;3844:5;3897:4;3889:6;3885:17;3877:6;3873:30;3926:3;3918:6;3915:15;3912:122;;;3945:79;;:::i;:::-;3912:122;4060:6;4043:220;4077:6;4072:3;4069:15;4043:220;;;4152:3;4181:37;4214:3;4202:10;4181:37;:::i;:::-;4176:3;4169:50;4248:4;4243:3;4239:14;4232:21;;4119:144;4103:4;4098:3;4094:14;4087:21;;4043:220;;;4047:21;3726:543;;3626:643;;;;;:::o;4293:339::-;4362:5;4411:3;4404:4;4396:6;4392:17;4388:27;4378:122;;4419:79;;:::i;:::-;4378:122;4523:4;4545:81;4622:3;4614:6;4606;4545:81;:::i;:::-;4536:90;;4368:264;4293:339;;;;:::o;4638:249::-;4713:4;4803:18;4795:6;4792:30;4789:56;;;4825:18;;:::i;:::-;4789:56;4875:4;4867:6;4863:17;4855:25;;4638:249;;;:::o;4911:643::-;5005:5;5030:79;5046:62;5101:6;5046:62;:::i;:::-;5030:79;:::i;:::-;5021:88;;5129:5;5182:4;5174:6;5170:17;5162:6;5158:30;5211:3;5203:6;5200:15;5197:122;;;5230:79;;:::i;:::-;5197:122;5345:6;5328:220;5362:6;5357:3;5354:15;5328:220;;;5437:3;5466:37;5499:3;5487:10;5466:37;:::i;:::-;5461:3;5454:50;5533:4;5528:3;5524:14;5517:21;;5404:144;5388:4;5383:3;5379:14;5372:21;;5328:220;;;5332:21;5011:543;;4911:643;;;;;:::o;5578:339::-;5647:5;5696:3;5689:4;5681:6;5677:17;5673:27;5663:122;;5704:79;;:::i;:::-;5663:122;5808:4;5830:81;5907:3;5899:6;5891;5830:81;:::i;:::-;5821:90;;5653:264;5578:339;;;;:::o;5923:248::-;5997:4;6087:18;6079:6;6076:30;6073:56;;;6109:18;;:::i;:::-;6073:56;6159:4;6151:6;6147:17;6139:25;;5923:248;;;:::o;6177:149::-;6213:7;6253:66;6246:5;6242:78;6231:89;;6177:149;;;:::o;6332:120::-;6404:23;6421:5;6404:23;:::i;:::-;6397:5;6394:34;6384:62;;6442:1;6439;6432:12;6384:62;6332:120;:::o;6458:137::-;6503:5;6541:6;6528:20;6519:29;;6557:32;6583:5;6557:32;:::i;:::-;6458:137;;;;:::o;6618:640::-;6711:5;6736:78;6752:61;6806:6;6752:61;:::i;:::-;6736:78;:::i;:::-;6727:87;;6834:5;6887:4;6879:6;6875:17;6867:6;6863:30;6916:3;6908:6;6905:15;6902:122;;;6935:79;;:::i;:::-;6902:122;7050:6;7033:219;7067:6;7062:3;7059:15;7033:219;;;7142:3;7171:36;7203:3;7191:10;7171:36;:::i;:::-;7166:3;7159:49;7237:4;7232:3;7228:14;7221:21;;7109:143;7093:4;7088:3;7084:14;7077:21;;7033:219;;;7037:21;6717:541;;6618:640;;;;;:::o;7281:337::-;7349:5;7398:3;7391:4;7383:6;7379:17;7375:27;7365:122;;7406:79;;:::i;:::-;7365:122;7510:4;7532:80;7608:3;7600:6;7592;7532:80;:::i;:::-;7523:89;;7355:263;7281:337;;;;:::o;7624:90::-;7658:7;7701:5;7694:13;7687:21;7676:32;;7624:90;;;:::o;7720:116::-;7790:21;7805:5;7790:21;:::i;:::-;7783:5;7780:32;7770:60;;7826:1;7823;7816:12;7770:60;7720:116;:::o;7842:133::-;7885:5;7923:6;7910:20;7901:29;;7939:30;7963:5;7939:30;:::i;:::-;7842:133;;;;:::o;7981:1040::-;8140:6;8148;8156;8164;8172;8221:3;8209:9;8200:7;8196:23;8192:33;8189:120;;;8228:79;;:::i;:::-;8189:120;8348:1;8373:52;8417:7;8408:6;8397:9;8393:22;8373:52;:::i;:::-;8363:62;;8319:116;8474:2;8500:76;8568:7;8559:6;8548:9;8544:22;8500:76;:::i;:::-;8490:86;;8445:141;8625:2;8651:76;8719:7;8710:6;8699:9;8695:22;8651:76;:::i;:::-;8641:86;;8596:141;8776:3;8803:75;8870:7;8861:6;8850:9;8846:22;8803:75;:::i;:::-;8793:85;;8747:141;8927:3;8954:50;8996:7;8987:6;8976:9;8972:22;8954:50;:::i;:::-;8944:60;;8898:116;7981:1040;;;;;;;;:::o;9027:104::-;9092:6;9120:4;9110:14;;9027:104;;;:::o;9137:143::-;9234:11;9271:3;9256:18;;9137:143;;;;:::o;9286:98::-;9351:4;9374:3;9366:11;;9286:98;;;:::o;9390:108::-;9467:24;9485:5;9467:24;:::i;:::-;9462:3;9455:37;9390:108;;:::o;9504:179::-;9573:10;9594:46;9636:3;9628:6;9594:46;:::i;:::-;9672:4;9667:3;9663:14;9649:28;;9504:179;;;;:::o;9689:111::-;9757:4;9789;9784:3;9780:14;9772:22;;9689:111;;;:::o;9838:694::-;9974:52;10020:5;9974:52;:::i;:::-;10042:84;10119:6;10114:3;10042:84;:::i;:::-;10035:91;;10150:54;10198:5;10150:54;:::i;:::-;10227:7;10258:1;10243:282;10268:6;10265:1;10262:13;10243:282;;;10344:6;10338:13;10371:63;10430:3;10415:13;10371:63;:::i;:::-;10364:70;;10457:58;10508:6;10457:58;:::i;:::-;10447:68;;10303:222;10290:1;10287;10283:9;10278:14;;10243:282;;;10247:14;9950:582;;;9838:694;;:::o;10538:314::-;10677:4;10715:2;10704:9;10700:18;10692:26;;10728:117;10842:1;10831:9;10827:17;10818:6;10728:117;:::i;:::-;10538:314;;;;:::o;10858:98::-;10909:6;10943:5;10937:12;10927:22;;10858:98;;;:::o;10962:147::-;11063:11;11100:3;11085:18;;10962:147;;;;:::o;11115:307::-;11183:1;11193:113;11207:6;11204:1;11201:13;11193:113;;;11292:1;11287:3;11283:11;11277:18;11273:1;11268:3;11264:11;11257:39;11229:2;11226:1;11222:10;11217:15;;11193:113;;;11324:6;11321:1;11318:13;11315:101;;;11404:1;11395:6;11390:3;11386:16;11379:27;11315:101;11164:258;11115:307;;;:::o;11428:373::-;11532:3;11560:38;11592:5;11560:38;:::i;:::-;11614:88;11695:6;11690:3;11614:88;:::i;:::-;11607:95;;11711:52;11756:6;11751:3;11744:4;11737:5;11733:16;11711:52;:::i;:::-;11788:6;11783:3;11779:16;11772:23;;11536:265;11428:373;;;;:::o;11807:271::-;11937:3;11959:93;12048:3;12039:6;11959:93;:::i;:::-;11952:100;;12069:3;12062:10;;11807:271;;;;:::o;12084:169::-;12168:11;12202:6;12197:3;12190:19;12242:4;12237:3;12233:14;12218:29;;12084:169;;;;:::o;12259:179::-;12399:31;12395:1;12387:6;12383:14;12376:55;12259:179;:::o;12444:366::-;12586:3;12607:67;12671:2;12666:3;12607:67;:::i;:::-;12600:74;;12683:93;12772:3;12683:93;:::i;:::-;12801:2;12796:3;12792:12;12785:19;;12444:366;;;:::o;12816:419::-;12982:4;13020:2;13009:9;13005:18;12997:26;;13069:9;13063:4;13059:20;13055:1;13044:9;13040:17;13033:47;13097:131;13223:4;13097:131;:::i;:::-;13089:139;;12816:419;;;:::o;13241:180::-;13289:77;13286:1;13279:88;13386:4;13383:1;13376:15;13410:4;13407:1;13400:15;13427:156;13567:8;13563:1;13555:6;13551:14;13544:32;13427:156;:::o;13589:365::-;13731:3;13752:66;13816:1;13811:3;13752:66;:::i;:::-;13745:73;;13827:93;13916:3;13827:93;:::i;:::-;13945:2;13940:3;13936:12;13929:19;;13589:365;;;:::o;13960:419::-;14126:4;14164:2;14153:9;14149:18;14141:26;;14213:9;14207:4;14203:20;14199:1;14188:9;14184:17;14177:47;14241:131;14367:4;14241:131;:::i;:::-;14233:139;;13960:419;;;:::o;14385:180::-;14525:32;14521:1;14513:6;14509:14;14502:56;14385:180;:::o;14571:366::-;14713:3;14734:67;14798:2;14793:3;14734:67;:::i;:::-;14727:74;;14810:93;14899:3;14810:93;:::i;:::-;14928:2;14923:3;14919:12;14912:19;;14571:366;;;:::o;14943:419::-;15109:4;15147:2;15136:9;15132:18;15124:26;;15196:9;15190:4;15186:20;15182:1;15171:9;15167:17;15160:47;15224:131;15350:4;15224:131;:::i;:::-;15216:139;;14943:419;;;:::o;15368:96::-;15402:8;15451:5;15446:3;15442:15;15421:36;;15368:96;;;:::o;15470:94::-;15508:7;15537:21;15552:5;15537:21;:::i;:::-;15526:32;;15470:94;;;:::o;15570:153::-;15673:43;15692:23;15709:5;15692:23;:::i;:::-;15673:43;:::i;:::-;15668:3;15661:56;15570:153;;:::o;15729:79::-;15768:7;15797:5;15786:16;;15729:79;;;:::o;15814:157::-;15919:45;15939:24;15957:5;15939:24;:::i;:::-;15919:45;:::i;:::-;15914:3;15907:58;15814:157;;:::o;15977:78::-;16015:7;16044:5;16033:16;;15977:78;;;:::o;16061:153::-;16164:43;16183:23;16200:5;16183:23;:::i;:::-;16164:43;:::i;:::-;16159:3;16152:56;16061:153;;:::o;16220:96::-;16254:8;16303:5;16298:3;16294:15;16273:36;;16220:96;;;:::o;16322:93::-;16359:7;16388:21;16403:5;16388:21;:::i;:::-;16377:32;;16322:93;;;:::o;16421:95::-;16457:7;16486:24;16504:5;16486:24;:::i;:::-;16475:35;;16421:95;;;:::o;16522:145::-;16621:39;16638:21;16653:5;16638:21;:::i;:::-;16621:39;:::i;:::-;16616:3;16609:52;16522:145;;:::o;16673:1497::-;17025:3;17040:73;17109:3;17100:6;17040:73;:::i;:::-;17138:1;17133:3;17129:11;17122:18;;17150:75;17221:3;17212:6;17150:75;:::i;:::-;17250:2;17245:3;17241:12;17234:19;;17263:75;17334:3;17325:6;17263:75;:::i;:::-;17363:2;17358:3;17354:12;17347:19;;17376:75;17447:3;17438:6;17376:75;:::i;:::-;17476:2;17471:3;17467:12;17460:19;;17489:75;17560:3;17551:6;17489:75;:::i;:::-;17589:2;17584:3;17580:12;17573:19;;17602:75;17673:3;17664:6;17602:75;:::i;:::-;17702:2;17697:3;17693:12;17686:19;;17715:75;17786:3;17777:6;17715:75;:::i;:::-;17815:2;17810:3;17806:12;17799:19;;17828:73;17897:3;17888:6;17828:73;:::i;:::-;17926:1;17921:3;17917:11;17910:18;;17938:73;18007:3;17998:6;17938:73;:::i;:::-;18036:1;18031:3;18027:11;18020:18;;18048:69;18113:3;18104:6;18048:69;:::i;:::-;18142:1;18137:3;18133:11;18126:18;;18161:3;18154:10;;16673:1497;;;;;;;;;;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "1181000", + "executionCost": "1227", + "totalCost": "1182227" + }, + "external": { + "blake2Check()": "infinite", + "blake2Wrapper(uint32,bytes32[2],bytes32[4],bytes8[2],bool)": "infinite", + "bn128AdditionCheck()": "infinite", + "bn128MultiplyCheck()": "infinite", + "bn128PairingCheck()": "infinite", + "modExpChecker()": "infinite", + "modExpWrapper(uint256,uint256,uint256)": "infinite", + "ripemd160Check()": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 7496, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 7496, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 7496, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 7496, "name": "REVERT", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 7496, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 7496, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 7496, "name": "CODECOPY", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 7496, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122079cfdf99f34c525bb4072cde2303cdaeca4e75666256549f1f713f0ea3ec58ce64736f6c634300080b0033", + ".code": [ + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 7496, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 7496, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 7496, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 7496, "name": "REVERT", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 7496, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 7496, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 7496, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 7496, "name": "LT", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 7496, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 67, "end": 7496, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "98576248" + }, + { "begin": 67, "end": 7496, "name": "GT", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "98576248" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "AB26C7F8" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "C9A6E474" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "CB5C707C" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 7496, "name": "JUMP", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 67, "end": 7496, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "28820A24" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "503A6772" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "60012E3A" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "8588CC9C" + }, + { "begin": 67, "end": 7496, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 67, "end": 7496, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 7496, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 7496, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 7496, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 7496, "name": "REVERT", "source": 0 }, + { + "begin": 96, + "end": 279, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 96, "end": 279, "name": "JUMPDEST", "source": 0 }, + { + "begin": 96, + "end": 279, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 96, + "end": 279, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 96, + "end": 279, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 96, + "end": 279, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 96, "end": 279, "name": "JUMPDEST", "source": 0 }, + { "begin": 96, "end": 279, "name": "STOP", "source": 0 }, + { + "begin": 2638, + "end": 4296, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 2638, "end": 4296, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2638, + "end": 4296, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { + "begin": 2638, + "end": 4296, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 2638, + "end": 4296, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2638, + "end": 4296, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 2638, "end": 4296, "name": "JUMPDEST", "source": 0 }, + { "begin": 2638, "end": 4296, "name": "STOP", "source": 0 }, + { + "begin": 6040, + "end": 7494, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 6040, "end": 7494, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6040, + "end": 7494, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { + "begin": 6040, + "end": 7494, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 6040, + "end": 7494, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6040, + "end": 7494, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 6040, "end": 7494, "name": "JUMPDEST", "source": 0 }, + { "begin": 6040, "end": 7494, "name": "STOP", "source": 0 }, + { + "begin": 285, + "end": 1496, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 285, "end": 1496, "name": "JUMPDEST", "source": 0 }, + { + "begin": 285, + "end": 1496, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { + "begin": 285, + "end": 1496, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { + "begin": 285, + "end": 1496, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 285, + "end": 1496, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 285, "end": 1496, "name": "JUMPDEST", "source": 0 }, + { "begin": 285, "end": 1496, "name": "STOP", "source": 0 }, + { + "begin": 5213, + "end": 5345, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 5213, "end": 5345, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5213, + "end": 5345, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { + "begin": 5213, + "end": 5345, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { + "begin": 5213, + "end": 5345, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5213, + "end": 5345, + "name": "tag", + "source": 0, + "value": "20" + }, + { "begin": 5213, "end": 5345, "name": "JUMPDEST", "source": 0 }, + { "begin": 5213, "end": 5345, "name": "STOP", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 4302, "end": 5207, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 4302, "end": 5207, "name": "DUP1", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 4302, "end": 5207, "name": "SUB", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "DUP2", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "ADD", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SWAP1", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { "begin": 4302, "end": 5207, "name": "SWAP2", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SWAP1", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { + "begin": 4302, + "end": 5207, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4302, + "end": 5207, + "name": "tag", + "source": 0, + "value": "23" + }, + { "begin": 4302, "end": 5207, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 4302, + "end": 5207, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4302, + "end": 5207, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 4302, "end": 5207, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4302, "end": 5207, "name": "MLOAD", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH [tag]", + "source": 0, + "value": "26" + }, + { "begin": 4302, "end": 5207, "name": "SWAP2", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SWAP1", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 4302, + "end": 5207, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4302, + "end": 5207, + "name": "tag", + "source": 0, + "value": "26" + }, + { "begin": 4302, "end": 5207, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4302, "end": 5207, "name": "MLOAD", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "DUP1", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SWAP2", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SUB", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SWAP1", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "RETURN", "source": 0 }, + { + "begin": 1502, + "end": 2632, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1502, "end": 2632, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1502, + "end": 2632, + "name": "PUSH [tag]", + "source": 0, + "value": "28" + }, + { + "begin": 1502, + "end": 2632, + "name": "PUSH [tag]", + "source": 0, + "value": "29" + }, + { + "begin": 1502, + "end": 2632, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1502, + "end": 2632, + "name": "tag", + "source": 0, + "value": "28" + }, + { "begin": 1502, "end": 2632, "name": "JUMPDEST", "source": 0 }, + { "begin": 1502, "end": 2632, "name": "STOP", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 5351, "end": 6034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH [tag]", + "source": 0, + "value": "30" + }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 5351, "end": 6034, "name": "DUP1", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 5351, "end": 6034, "name": "SUB", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "DUP2", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "ADD", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SWAP1", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH [tag]", + "source": 0, + "value": "31" + }, + { "begin": 5351, "end": 6034, "name": "SWAP2", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SWAP1", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH [tag]", + "source": 0, + "value": "32" + }, + { + "begin": 5351, + "end": 6034, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5351, + "end": 6034, + "name": "tag", + "source": 0, + "value": "31" + }, + { "begin": 5351, "end": 6034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH [tag]", + "source": 0, + "value": "33" + }, + { + "begin": 5351, + "end": 6034, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5351, + "end": 6034, + "name": "tag", + "source": 0, + "value": "30" + }, + { "begin": 5351, "end": 6034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5351, "end": 6034, "name": "MLOAD", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH [tag]", + "source": 0, + "value": "34" + }, + { "begin": 5351, "end": 6034, "name": "SWAP2", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SWAP1", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH [tag]", + "source": 0, + "value": "35" + }, + { + "begin": 5351, + "end": 6034, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5351, + "end": 6034, + "name": "tag", + "source": 0, + "value": "34" + }, + { "begin": 5351, "end": 6034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5351, "end": 6034, "name": "MLOAD", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "DUP1", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SWAP2", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SUB", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SWAP1", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "RETURN", "source": 0 }, + { + "begin": 96, + "end": 279, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 96, "end": 279, "name": "JUMPDEST", "source": 0 }, + { + "begin": 165, + "end": 262, + "name": "PUSH", + "source": 0, + "value": "8476EE4631B9B30AC2754B0EE0C47E161D3F724C000000000000000000000000" + }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 175, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 175, "end": 196, "name": "MLOAD", "source": 0 }, + { "begin": 175, "end": 196, "name": "DUP1", "source": 0 }, + { + "begin": 175, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 175, "end": 196, "name": "ADD", "source": 0 }, + { + "begin": 175, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 175, "end": 196, "name": "MSTORE", "source": 0 }, + { "begin": 175, "end": 196, "name": "DUP1", "source": 0 }, + { + "begin": 175, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "C" + }, + { "begin": 175, "end": 196, "name": "DUP2", "source": 0 }, + { "begin": 175, "end": 196, "name": "MSTORE", "source": 0 }, + { + "begin": 175, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 175, "end": 196, "name": "ADD", "source": 0 }, + { + "begin": 175, + "end": 196, + "name": "PUSH", + "source": 0, + "value": "48656C6C6F20576F726C64210000000000000000000000000000000000000000" + }, + { "begin": 175, "end": 196, "name": "DUP2", "source": 0 }, + { "begin": 175, "end": 196, "name": "MSTORE", "source": 0 }, + { "begin": 175, "end": 196, "name": "POP", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 165, "end": 197, "name": "MLOAD", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "PUSH [tag]", + "source": 0, + "value": "37" + }, + { "begin": 165, "end": 197, "name": "SWAP2", "source": 0 }, + { "begin": 165, "end": 197, "name": "SWAP1", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "PUSH [tag]", + "source": 0, + "value": "38" + }, + { + "begin": 165, + "end": 197, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 165, + "end": 197, + "name": "tag", + "source": 0, + "value": "37" + }, + { "begin": 165, "end": 197, "name": "JUMPDEST", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 165, "end": 197, "name": "MLOAD", "source": 0 }, + { "begin": 165, "end": 197, "name": "DUP1", "source": 0 }, + { "begin": 165, "end": 197, "name": "DUP4", "source": 0 }, + { "begin": 165, "end": 197, "name": "SUB", "source": 0 }, + { "begin": 165, "end": 197, "name": "DUP2", "source": 0 }, + { "begin": 165, "end": 197, "name": "DUP6", "source": 0 }, + { "begin": 165, "end": 197, "name": "GAS", "source": 0 }, + { "begin": 165, "end": 197, "name": "STATICCALL", "source": 0 }, + { "begin": 165, "end": 197, "name": "ISZERO", "source": 0 }, + { "begin": 165, "end": 197, "name": "DUP1", "source": 0 }, + { "begin": 165, "end": 197, "name": "ISZERO", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "PUSH [tag]", + "source": 0, + "value": "40" + }, + { "begin": 165, "end": 197, "name": "JUMPI", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 165, "end": 197, "name": "DUP1", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 165, + "end": 197, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 165, "end": 197, "name": "REVERT", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "tag", + "source": 0, + "value": "40" + }, + { "begin": 165, "end": 197, "name": "JUMPDEST", "source": 0 }, + { "begin": 165, "end": 197, "name": "POP", "source": 0 }, + { "begin": 165, "end": 197, "name": "POP", "source": 0 }, + { "begin": 165, "end": 197, "name": "POP", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 165, "end": 197, "name": "MLOAD", "source": 0 }, + { "begin": 165, "end": 197, "name": "MLOAD", "source": 0 }, + { + "begin": 165, + "end": 197, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 165, "end": 197, "name": "SHL", "source": 0 }, + { + "begin": 165, + "end": 262, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 165, "end": 262, "name": "NOT", "source": 0 }, + { "begin": 165, "end": 262, "name": "AND", "source": 0 }, + { "begin": 165, "end": 262, "name": "EQ", "source": 0 }, + { + "begin": 144, + "end": 272, + "name": "PUSH [tag]", + "source": 0, + "value": "41" + }, + { "begin": 144, "end": 272, "name": "JUMPI", "source": 0 }, + { + "begin": 144, + "end": 272, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 144, "end": 272, "name": "DUP1", "source": 0 }, + { "begin": 144, "end": 272, "name": "REVERT", "source": 0 }, + { + "begin": 144, + "end": 272, + "name": "tag", + "source": 0, + "value": "41" + }, + { "begin": 144, "end": 272, "name": "JUMPDEST", "source": 0 }, + { + "begin": 96, + "end": 279, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 2638, + "end": 4296, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 2638, "end": 4296, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2684, + "end": 2708, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2684, "end": 3681, "name": "MLOAD", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "DUP1", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "180" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "DUP1", "source": 0 }, + { + "begin": 2725, + "end": 2791, + "name": "PUSH", + "source": 0, + "value": "2ECA0C7238BF16E83E7A1E6C5D49540685FF51380F309842A98561558019FC02" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 2805, + "end": 2871, + "name": "PUSH", + "source": 0, + "value": "3D3260361BB8451DE5FF5ECD17F010FF22F5C31CDF184E9020B06FA5997DB84" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 2885, + "end": 2951, + "name": "PUSH", + "source": 0, + "value": "1213D2149B006137FCFB23036606F848D638D576A120CA981B5B1A5F9300B3EE" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 2965, + "end": 3031, + "name": "PUSH", + "source": 0, + "value": "2276CF730CF493CD95D64677BBB75FC42DB72513A4C1E387B476D056F80AA75F" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3045, + "end": 3111, + "name": "PUSH", + "source": 0, + "value": "21EE6226D31426322AFCDA621464D0611D226783262E21BB3BC86B537E986237" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3125, + "end": 3191, + "name": "PUSH", + "source": 0, + "value": "96DF1F82DFF337DD5972E32A8AD43E28A78A96A823EF1CD4DEBE12B6552EA5F" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3205, + "end": 3271, + "name": "PUSH", + "source": 0, + "value": "6967A1237EBFECA9AAAE0D6D0BAB8E28C198C5A339EF8A2407E31CDAC516DB9" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3285, + "end": 3351, + "name": "PUSH", + "source": 0, + "value": "22160FA257A5FD5B280642FF47B65ECA77E626CB685C84FA6D3B6882A283DDD1" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3365, + "end": 3431, + "name": "PUSH", + "source": 0, + "value": "198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3445, + "end": 3511, + "name": "PUSH", + "source": 0, + "value": "1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3525, + "end": 3591, + "name": "PUSH", + "source": 0, + "value": "90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { + "begin": 2684, + "end": 3681, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2684, "end": 3681, "name": "ADD", "source": 0 }, + { + "begin": 3605, + "end": 3671, + "name": "PUSH", + "source": 0, + "value": "12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA" + }, + { "begin": 2684, "end": 3681, "name": "DUP2", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "MSTORE", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "POP", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "SWAP1", "source": 0 }, + { "begin": 2684, "end": 3681, "name": "POP", "source": 0 }, + { + "begin": 3691, + "end": 3715, + "name": "PUSH [tag]", + "source": 0, + "value": "43" + }, + { + "begin": 3691, + "end": 3715, + "name": "PUSH [tag]", + "source": 0, + "value": "44" + }, + { + "begin": 3691, + "end": 3715, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3691, + "end": 3715, + "name": "tag", + "source": 0, + "value": "43" + }, + { "begin": 3691, "end": 3715, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3725, + "end": 3737, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 4175, + "end": 4177, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 4167, "end": 4173, "name": "DUP3", "source": 0 }, + { + "begin": 4162, + "end": 4165, + "name": "PUSH", + "source": 0, + "value": "180" + }, + { "begin": 4155, "end": 4160, "name": "DUP6", "source": 0 }, + { + "begin": 4152, + "end": 4153, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 4146, + "end": 4150, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { + "begin": 4139, + "end": 4143, + "name": "PUSH", + "source": 0, + "value": "7D0" + }, + { "begin": 4132, "end": 4137, "name": "GAS", "source": 0 }, + { "begin": 4128, "end": 4144, "name": "SUB", "source": 0 }, + { "begin": 4123, "end": 4178, "name": "CALL", "source": 0 }, + { "begin": 4112, "end": 4178, "name": "SWAP1", "source": 0 }, + { "begin": 4112, "end": 4178, "name": "POP", "source": 0 }, + { "begin": 4205, "end": 4212, "name": "DUP1", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "PUSH [tag]", + "source": 0, + "value": "45" + }, + { "begin": 4197, "end": 4246, "name": "JUMPI", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4197, "end": 4246, "name": "MLOAD", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 4197, "end": 4246, "name": "DUP2", "source": 0 }, + { "begin": 4197, "end": 4246, "name": "MSTORE", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 4197, "end": 4246, "name": "ADD", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "PUSH [tag]", + "source": 0, + "value": "46" + }, + { "begin": 4197, "end": 4246, "name": "SWAP1", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "PUSH [tag]", + "source": 0, + "value": "47" + }, + { + "begin": 4197, + "end": 4246, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4197, + "end": 4246, + "name": "tag", + "source": 0, + "value": "46" + }, + { "begin": 4197, "end": 4246, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4197, "end": 4246, "name": "MLOAD", "source": 0 }, + { "begin": 4197, "end": 4246, "name": "DUP1", "source": 0 }, + { "begin": 4197, "end": 4246, "name": "SWAP2", "source": 0 }, + { "begin": 4197, "end": 4246, "name": "SUB", "source": 0 }, + { "begin": 4197, "end": 4246, "name": "SWAP1", "source": 0 }, + { "begin": 4197, "end": 4246, "name": "REVERT", "source": 0 }, + { + "begin": 4197, + "end": 4246, + "name": "tag", + "source": 0, + "value": "45" + }, + { "begin": 4197, "end": 4246, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4277, + "end": 4278, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 4264, "end": 4270, "name": "DUP3", "source": 0 }, + { + "begin": 4271, + "end": 4272, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 4264, + "end": 4273, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 4264, "end": 4273, "name": "DUP2", "source": 0 }, + { "begin": 4264, "end": 4273, "name": "LT", "source": 0 }, + { + "begin": 4264, + "end": 4273, + "name": "PUSH [tag]", + "source": 0, + "value": "48" + }, + { "begin": 4264, "end": 4273, "name": "JUMPI", "source": 0 }, + { + "begin": 4264, + "end": 4273, + "name": "PUSH [tag]", + "source": 0, + "value": "49" + }, + { + "begin": 4264, + "end": 4273, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 4264, + "end": 4273, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4264, + "end": 4273, + "name": "tag", + "source": 0, + "value": "49" + }, + { "begin": 4264, "end": 4273, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4264, + "end": 4273, + "name": "tag", + "source": 0, + "value": "48" + }, + { "begin": 4264, "end": 4273, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4264, + "end": 4273, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 4264, "end": 4273, "name": "MUL", "source": 0 }, + { "begin": 4264, "end": 4273, "name": "ADD", "source": 0 }, + { "begin": 4264, "end": 4273, "name": "MLOAD", "source": 0 }, + { "begin": 4264, "end": 4278, "name": "EQ", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "PUSH [tag]", + "source": 0, + "value": "51" + }, + { "begin": 4256, "end": 4289, "name": "JUMPI", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4256, "end": 4289, "name": "MLOAD", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 4256, "end": 4289, "name": "DUP2", "source": 0 }, + { "begin": 4256, "end": 4289, "name": "MSTORE", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 4256, "end": 4289, "name": "ADD", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "PUSH [tag]", + "source": 0, + "value": "52" + }, + { "begin": 4256, "end": 4289, "name": "SWAP1", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 4256, + "end": 4289, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4256, + "end": 4289, + "name": "tag", + "source": 0, + "value": "52" + }, + { "begin": 4256, "end": 4289, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4256, "end": 4289, "name": "MLOAD", "source": 0 }, + { "begin": 4256, "end": 4289, "name": "DUP1", "source": 0 }, + { "begin": 4256, "end": 4289, "name": "SWAP2", "source": 0 }, + { "begin": 4256, "end": 4289, "name": "SUB", "source": 0 }, + { "begin": 4256, "end": 4289, "name": "SWAP1", "source": 0 }, + { "begin": 4256, "end": 4289, "name": "REVERT", "source": 0 }, + { + "begin": 4256, + "end": 4289, + "name": "tag", + "source": 0, + "value": "51" + }, + { "begin": 4256, "end": 4289, "name": "JUMPDEST", "source": 0 }, + { "begin": 2674, "end": 4296, "name": "POP", "source": 0 }, + { "begin": 2674, "end": 4296, "name": "POP", "source": 0 }, + { "begin": 2674, "end": 4296, "name": "POP", "source": 0 }, + { + "begin": 2638, + "end": 4296, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 6040, + "end": 7494, + "name": "tag", + "source": 0, + "value": "17" + }, + { "begin": 6040, "end": 7494, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6080, + "end": 6093, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6096, + "end": 6098, + "name": "PUSH", + "source": 0, + "value": "C" + }, + { "begin": 6080, "end": 6098, "name": "SWAP1", "source": 0 }, + { "begin": 6080, "end": 6098, "name": "POP", "source": 0 }, + { + "begin": 6109, + "end": 6128, + "name": "PUSH [tag]", + "source": 0, + "value": "55" + }, + { + "begin": 6109, + "end": 6128, + "name": "PUSH [tag]", + "source": 0, + "value": "56" + }, + { + "begin": 6109, + "end": 6128, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6109, + "end": 6128, + "name": "tag", + "source": 0, + "value": "55" + }, + { "begin": 6109, "end": 6128, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6138, + "end": 6236, + "name": "PUSH", + "source": 0, + "value": "48C9BDF267E6096A3BA7CA8485AE67BB2BF894FE72F36E3CF1361D5F3AF54FA5" + }, + { "begin": 6138, "end": 6139, "name": "DUP2", "source": 0 }, + { + "begin": 6153, + "end": 6154, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6138, + "end": 6164, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 6138, "end": 6164, "name": "DUP2", "source": 0 }, + { "begin": 6138, "end": 6164, "name": "LT", "source": 0 }, + { + "begin": 6138, + "end": 6164, + "name": "PUSH [tag]", + "source": 0, + "value": "57" + }, + { "begin": 6138, "end": 6164, "name": "JUMPI", "source": 0 }, + { + "begin": 6138, + "end": 6164, + "name": "PUSH [tag]", + "source": 0, + "value": "58" + }, + { + "begin": 6138, + "end": 6164, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6138, + "end": 6164, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6138, + "end": 6164, + "name": "tag", + "source": 0, + "value": "58" + }, + { "begin": 6138, "end": 6164, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6138, + "end": 6164, + "name": "tag", + "source": 0, + "value": "57" + }, + { "begin": 6138, "end": 6164, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6138, + "end": 6164, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6138, "end": 6164, "name": "MUL", "source": 0 }, + { "begin": 6138, "end": 6164, "name": "ADD", "source": 0 }, + { "begin": 6138, "end": 6236, "name": "DUP2", "source": 0 }, + { "begin": 6138, "end": 6236, "name": "DUP2", "source": 0 }, + { "begin": 6138, "end": 6236, "name": "MSTORE", "source": 0 }, + { "begin": 6138, "end": 6236, "name": "POP", "source": 0 }, + { "begin": 6138, "end": 6236, "name": "POP", "source": 0 }, + { + "begin": 6246, + "end": 6344, + "name": "PUSH", + "source": 0, + "value": "D182E6AD7F520E511F6C3E2B8C68059B6BBD41FBABD9831F79217E1319CDE05B" + }, + { "begin": 6246, "end": 6247, "name": "DUP2", "source": 0 }, + { + "begin": 6261, + "end": 6262, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 6246, + "end": 6272, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 6246, "end": 6272, "name": "DUP2", "source": 0 }, + { "begin": 6246, "end": 6272, "name": "LT", "source": 0 }, + { + "begin": 6246, + "end": 6272, + "name": "PUSH [tag]", + "source": 0, + "value": "59" + }, + { "begin": 6246, "end": 6272, "name": "JUMPI", "source": 0 }, + { + "begin": 6246, + "end": 6272, + "name": "PUSH [tag]", + "source": 0, + "value": "60" + }, + { + "begin": 6246, + "end": 6272, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6246, + "end": 6272, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6246, + "end": 6272, + "name": "tag", + "source": 0, + "value": "60" + }, + { "begin": 6246, "end": 6272, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6246, + "end": 6272, + "name": "tag", + "source": 0, + "value": "59" + }, + { "begin": 6246, "end": 6272, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6246, + "end": 6272, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6246, "end": 6272, "name": "MUL", "source": 0 }, + { "begin": 6246, "end": 6272, "name": "ADD", "source": 0 }, + { "begin": 6246, "end": 6344, "name": "DUP2", "source": 0 }, + { "begin": 6246, "end": 6344, "name": "DUP2", "source": 0 }, + { "begin": 6246, "end": 6344, "name": "MSTORE", "source": 0 }, + { "begin": 6246, "end": 6344, "name": "POP", "source": 0 }, + { "begin": 6246, "end": 6344, "name": "POP", "source": 0 }, + { + "begin": 6355, + "end": 6374, + "name": "PUSH [tag]", + "source": 0, + "value": "61" + }, + { + "begin": 6355, + "end": 6374, + "name": "PUSH [tag]", + "source": 0, + "value": "62" + }, + { + "begin": 6355, + "end": 6374, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6355, + "end": 6374, + "name": "tag", + "source": 0, + "value": "61" + }, + { "begin": 6355, "end": 6374, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6384, + "end": 6482, + "name": "PUSH", + "source": 0, + "value": "6162630000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 6384, "end": 6385, "name": "DUP2", "source": 0 }, + { + "begin": 6399, + "end": 6400, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6384, + "end": 6410, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 6384, "end": 6410, "name": "DUP2", "source": 0 }, + { "begin": 6384, "end": 6410, "name": "LT", "source": 0 }, + { + "begin": 6384, + "end": 6410, + "name": "PUSH [tag]", + "source": 0, + "value": "63" + }, + { "begin": 6384, "end": 6410, "name": "JUMPI", "source": 0 }, + { + "begin": 6384, + "end": 6410, + "name": "PUSH [tag]", + "source": 0, + "value": "64" + }, + { + "begin": 6384, + "end": 6410, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6384, + "end": 6410, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6384, + "end": 6410, + "name": "tag", + "source": 0, + "value": "64" + }, + { "begin": 6384, "end": 6410, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6384, + "end": 6410, + "name": "tag", + "source": 0, + "value": "63" + }, + { "begin": 6384, "end": 6410, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6384, + "end": 6410, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6384, "end": 6410, "name": "MUL", "source": 0 }, + { "begin": 6384, "end": 6410, "name": "ADD", "source": 0 }, + { "begin": 6384, "end": 6482, "name": "DUP2", "source": 0 }, + { "begin": 6384, "end": 6482, "name": "DUP2", "source": 0 }, + { "begin": 6384, "end": 6482, "name": "MSTORE", "source": 0 }, + { "begin": 6384, "end": 6482, "name": "POP", "source": 0 }, + { "begin": 6384, "end": 6482, "name": "POP", "source": 0 }, + { + "begin": 6492, + "end": 6590, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6492, "end": 6493, "name": "DUP2", "source": 0 }, + { + "begin": 6507, + "end": 6508, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 6492, + "end": 6518, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 6492, "end": 6518, "name": "DUP2", "source": 0 }, + { "begin": 6492, "end": 6518, "name": "LT", "source": 0 }, + { + "begin": 6492, + "end": 6518, + "name": "PUSH [tag]", + "source": 0, + "value": "65" + }, + { "begin": 6492, "end": 6518, "name": "JUMPI", "source": 0 }, + { + "begin": 6492, + "end": 6518, + "name": "PUSH [tag]", + "source": 0, + "value": "66" + }, + { + "begin": 6492, + "end": 6518, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6492, + "end": 6518, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6492, + "end": 6518, + "name": "tag", + "source": 0, + "value": "66" + }, + { "begin": 6492, "end": 6518, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6492, + "end": 6518, + "name": "tag", + "source": 0, + "value": "65" + }, + { "begin": 6492, "end": 6518, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6492, + "end": 6518, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6492, "end": 6518, "name": "MUL", "source": 0 }, + { "begin": 6492, "end": 6518, "name": "ADD", "source": 0 }, + { "begin": 6492, "end": 6590, "name": "DUP2", "source": 0 }, + { "begin": 6492, "end": 6590, "name": "DUP2", "source": 0 }, + { "begin": 6492, "end": 6590, "name": "MSTORE", "source": 0 }, + { "begin": 6492, "end": 6590, "name": "POP", "source": 0 }, + { "begin": 6492, "end": 6590, "name": "POP", "source": 0 }, + { + "begin": 6600, + "end": 6698, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6600, "end": 6601, "name": "DUP2", "source": 0 }, + { + "begin": 6615, + "end": 6616, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 6600, + "end": 6626, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 6600, "end": 6626, "name": "DUP2", "source": 0 }, + { "begin": 6600, "end": 6626, "name": "LT", "source": 0 }, + { + "begin": 6600, + "end": 6626, + "name": "PUSH [tag]", + "source": 0, + "value": "67" + }, + { "begin": 6600, "end": 6626, "name": "JUMPI", "source": 0 }, + { + "begin": 6600, + "end": 6626, + "name": "PUSH [tag]", + "source": 0, + "value": "68" + }, + { + "begin": 6600, + "end": 6626, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6600, + "end": 6626, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6600, + "end": 6626, + "name": "tag", + "source": 0, + "value": "68" + }, + { "begin": 6600, "end": 6626, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6600, + "end": 6626, + "name": "tag", + "source": 0, + "value": "67" + }, + { "begin": 6600, "end": 6626, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6600, + "end": 6626, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6600, "end": 6626, "name": "MUL", "source": 0 }, + { "begin": 6600, "end": 6626, "name": "ADD", "source": 0 }, + { "begin": 6600, "end": 6698, "name": "DUP2", "source": 0 }, + { "begin": 6600, "end": 6698, "name": "DUP2", "source": 0 }, + { "begin": 6600, "end": 6698, "name": "MSTORE", "source": 0 }, + { "begin": 6600, "end": 6698, "name": "POP", "source": 0 }, + { "begin": 6600, "end": 6698, "name": "POP", "source": 0 }, + { + "begin": 6708, + "end": 6806, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6708, "end": 6709, "name": "DUP2", "source": 0 }, + { + "begin": 6723, + "end": 6724, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 6708, + "end": 6734, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 6708, "end": 6734, "name": "DUP2", "source": 0 }, + { "begin": 6708, "end": 6734, "name": "LT", "source": 0 }, + { + "begin": 6708, + "end": 6734, + "name": "PUSH [tag]", + "source": 0, + "value": "69" + }, + { "begin": 6708, "end": 6734, "name": "JUMPI", "source": 0 }, + { + "begin": 6708, + "end": 6734, + "name": "PUSH [tag]", + "source": 0, + "value": "70" + }, + { + "begin": 6708, + "end": 6734, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6708, + "end": 6734, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6708, + "end": 6734, + "name": "tag", + "source": 0, + "value": "70" + }, + { "begin": 6708, "end": 6734, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6708, + "end": 6734, + "name": "tag", + "source": 0, + "value": "69" + }, + { "begin": 6708, "end": 6734, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6708, + "end": 6734, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6708, "end": 6734, "name": "MUL", "source": 0 }, + { "begin": 6708, "end": 6734, "name": "ADD", "source": 0 }, + { "begin": 6708, "end": 6806, "name": "DUP2", "source": 0 }, + { "begin": 6708, "end": 6806, "name": "DUP2", "source": 0 }, + { "begin": 6708, "end": 6806, "name": "MSTORE", "source": 0 }, + { "begin": 6708, "end": 6806, "name": "POP", "source": 0 }, + { "begin": 6708, "end": 6806, "name": "POP", "source": 0 }, + { + "begin": 6817, + "end": 6835, + "name": "PUSH [tag]", + "source": 0, + "value": "71" + }, + { + "begin": 6817, + "end": 6835, + "name": "PUSH [tag]", + "source": 0, + "value": "72" + }, + { + "begin": 6817, + "end": 6835, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6817, + "end": 6835, + "name": "tag", + "source": 0, + "value": "71" + }, + { "begin": 6817, "end": 6835, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6845, + "end": 6865, + "name": "PUSH", + "source": 0, + "value": "300000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 6845, "end": 6846, "name": "DUP2", "source": 0 }, + { + "begin": 6847, + "end": 6848, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6845, + "end": 6849, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 6845, "end": 6849, "name": "DUP2", "source": 0 }, + { "begin": 6845, "end": 6849, "name": "LT", "source": 0 }, + { + "begin": 6845, + "end": 6849, + "name": "PUSH [tag]", + "source": 0, + "value": "73" + }, + { "begin": 6845, "end": 6849, "name": "JUMPI", "source": 0 }, + { + "begin": 6845, + "end": 6849, + "name": "PUSH [tag]", + "source": 0, + "value": "74" + }, + { + "begin": 6845, + "end": 6849, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6845, + "end": 6849, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6845, + "end": 6849, + "name": "tag", + "source": 0, + "value": "74" + }, + { "begin": 6845, "end": 6849, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6845, + "end": 6849, + "name": "tag", + "source": 0, + "value": "73" + }, + { "begin": 6845, "end": 6849, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6845, + "end": 6849, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6845, "end": 6849, "name": "MUL", "source": 0 }, + { "begin": 6845, "end": 6849, "name": "ADD", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "SWAP1", "source": 0 }, + { + "begin": 6845, + "end": 6865, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6845, "end": 6865, "name": "NOT", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "AND", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "SWAP1", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "DUP2", "source": 0 }, + { + "begin": 6845, + "end": 6865, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6845, "end": 6865, "name": "NOT", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "AND", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "DUP2", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "MSTORE", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "POP", "source": 0 }, + { "begin": 6845, "end": 6865, "name": "POP", "source": 0 }, + { + "begin": 6875, + "end": 6895, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6875, "end": 6876, "name": "DUP2", "source": 0 }, + { + "begin": 6877, + "end": 6878, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 6875, + "end": 6879, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 6875, "end": 6879, "name": "DUP2", "source": 0 }, + { "begin": 6875, "end": 6879, "name": "LT", "source": 0 }, + { + "begin": 6875, + "end": 6879, + "name": "PUSH [tag]", + "source": 0, + "value": "75" + }, + { "begin": 6875, "end": 6879, "name": "JUMPI", "source": 0 }, + { + "begin": 6875, + "end": 6879, + "name": "PUSH [tag]", + "source": 0, + "value": "76" + }, + { + "begin": 6875, + "end": 6879, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 6875, + "end": 6879, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6875, + "end": 6879, + "name": "tag", + "source": 0, + "value": "76" + }, + { "begin": 6875, "end": 6879, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6875, + "end": 6879, + "name": "tag", + "source": 0, + "value": "75" + }, + { "begin": 6875, "end": 6879, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6875, + "end": 6879, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 6875, "end": 6879, "name": "MUL", "source": 0 }, + { "begin": 6875, "end": 6879, "name": "ADD", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "SWAP1", "source": 0 }, + { + "begin": 6875, + "end": 6895, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6875, "end": 6895, "name": "NOT", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "AND", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "SWAP1", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "DUP2", "source": 0 }, + { + "begin": 6875, + "end": 6895, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6875, "end": 6895, "name": "NOT", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "AND", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "DUP2", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "MSTORE", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "POP", "source": 0 }, + { "begin": 6875, "end": 6895, "name": "POP", "source": 0 }, + { + "begin": 6906, + "end": 6912, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6915, + "end": 6919, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 6906, "end": 6919, "name": "SWAP1", "source": 0 }, + { "begin": 6906, "end": 6919, "name": "POP", "source": 0 }, + { + "begin": 7111, + "end": 7135, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 7138, + "end": 7171, + "name": "PUSH [tag]", + "source": 0, + "value": "77" + }, + { "begin": 7152, "end": 7158, "name": "DUP7", "source": 0 }, + { "begin": 7160, "end": 7161, "name": "DUP7", "source": 0 }, + { "begin": 7163, "end": 7164, "name": "DUP7", "source": 0 }, + { "begin": 7166, "end": 7167, "name": "DUP7", "source": 0 }, + { "begin": 7169, "end": 7170, "name": "DUP7", "source": 0 }, + { + "begin": 7138, + "end": 7151, + "name": "PUSH [tag]", + "source": 0, + "value": "33" + }, + { + "begin": 7138, + "end": 7171, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7138, + "end": 7171, + "name": "tag", + "source": 0, + "value": "77" + }, + { "begin": 7138, "end": 7171, "name": "JUMPDEST", "source": 0 }, + { "begin": 7111, "end": 7171, "name": "SWAP1", "source": 0 }, + { "begin": 7111, "end": 7171, "name": "POP", "source": 0 }, + { + "begin": 7231, + "end": 7297, + "name": "PUSH", + "source": 0, + "value": "BA80A53F981C4D0D6A2797B69F12F6E94C212F14685AC4B74B12BB6FDBFFA2D1" + }, + { + "begin": 7202, + "end": 7297, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7202, "end": 7297, "name": "SHL", "source": 0 }, + { "begin": 7202, "end": 7208, "name": "DUP2", "source": 0 }, + { + "begin": 7209, + "end": 7210, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 7202, + "end": 7211, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 7202, "end": 7211, "name": "DUP2", "source": 0 }, + { "begin": 7202, "end": 7211, "name": "LT", "source": 0 }, + { + "begin": 7202, + "end": 7211, + "name": "PUSH [tag]", + "source": 0, + "value": "78" + }, + { "begin": 7202, "end": 7211, "name": "JUMPI", "source": 0 }, + { + "begin": 7202, + "end": 7211, + "name": "PUSH [tag]", + "source": 0, + "value": "79" + }, + { + "begin": 7202, + "end": 7211, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 7202, + "end": 7211, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7202, + "end": 7211, + "name": "tag", + "source": 0, + "value": "79" + }, + { "begin": 7202, "end": 7211, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7202, + "end": 7211, + "name": "tag", + "source": 0, + "value": "78" + }, + { "begin": 7202, "end": 7211, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7202, + "end": 7211, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 7202, "end": 7211, "name": "MUL", "source": 0 }, + { "begin": 7202, "end": 7211, "name": "ADD", "source": 0 }, + { "begin": 7202, "end": 7211, "name": "MLOAD", "source": 0 }, + { "begin": 7202, "end": 7297, "name": "EQ", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "PUSH [tag]", + "source": 0, + "value": "80" + }, + { "begin": 7181, "end": 7329, "name": "JUMPI", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7181, "end": 7329, "name": "MLOAD", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 7181, "end": 7329, "name": "DUP2", "source": 0 }, + { "begin": 7181, "end": 7329, "name": "MSTORE", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7181, "end": 7329, "name": "ADD", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "PUSH [tag]", + "source": 0, + "value": "81" + }, + { "begin": 7181, "end": 7329, "name": "SWAP1", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 7181, + "end": 7329, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7181, + "end": 7329, + "name": "tag", + "source": 0, + "value": "81" + }, + { "begin": 7181, "end": 7329, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7181, "end": 7329, "name": "MLOAD", "source": 0 }, + { "begin": 7181, "end": 7329, "name": "DUP1", "source": 0 }, + { "begin": 7181, "end": 7329, "name": "SWAP2", "source": 0 }, + { "begin": 7181, "end": 7329, "name": "SUB", "source": 0 }, + { "begin": 7181, "end": 7329, "name": "SWAP1", "source": 0 }, + { "begin": 7181, "end": 7329, "name": "REVERT", "source": 0 }, + { + "begin": 7181, + "end": 7329, + "name": "tag", + "source": 0, + "value": "80" + }, + { "begin": 7181, "end": 7329, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7389, + "end": 7455, + "name": "PUSH", + "source": 0, + "value": "7D87C5392AAB792DC252D5DE4533CC9518D38AA8DBF1925AB92386EDD4009923" + }, + { + "begin": 7360, + "end": 7455, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7360, "end": 7455, "name": "SHL", "source": 0 }, + { "begin": 7360, "end": 7366, "name": "DUP2", "source": 0 }, + { + "begin": 7367, + "end": 7368, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 7360, + "end": 7369, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 7360, "end": 7369, "name": "DUP2", "source": 0 }, + { "begin": 7360, "end": 7369, "name": "LT", "source": 0 }, + { + "begin": 7360, + "end": 7369, + "name": "PUSH [tag]", + "source": 0, + "value": "82" + }, + { "begin": 7360, "end": 7369, "name": "JUMPI", "source": 0 }, + { + "begin": 7360, + "end": 7369, + "name": "PUSH [tag]", + "source": 0, + "value": "83" + }, + { + "begin": 7360, + "end": 7369, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 7360, + "end": 7369, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7360, + "end": 7369, + "name": "tag", + "source": 0, + "value": "83" + }, + { "begin": 7360, "end": 7369, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7360, + "end": 7369, + "name": "tag", + "source": 0, + "value": "82" + }, + { "begin": 7360, "end": 7369, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7360, + "end": 7369, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 7360, "end": 7369, "name": "MUL", "source": 0 }, + { "begin": 7360, "end": 7369, "name": "ADD", "source": 0 }, + { "begin": 7360, "end": 7369, "name": "MLOAD", "source": 0 }, + { "begin": 7360, "end": 7455, "name": "EQ", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "PUSH [tag]", + "source": 0, + "value": "84" + }, + { "begin": 7339, "end": 7487, "name": "JUMPI", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7339, "end": 7487, "name": "MLOAD", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 7339, "end": 7487, "name": "DUP2", "source": 0 }, + { "begin": 7339, "end": 7487, "name": "MSTORE", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7339, "end": 7487, "name": "ADD", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "PUSH [tag]", + "source": 0, + "value": "85" + }, + { "begin": 7339, "end": 7487, "name": "SWAP1", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 7339, + "end": 7487, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7339, + "end": 7487, + "name": "tag", + "source": 0, + "value": "85" + }, + { "begin": 7339, "end": 7487, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7339, "end": 7487, "name": "MLOAD", "source": 0 }, + { "begin": 7339, "end": 7487, "name": "DUP1", "source": 0 }, + { "begin": 7339, "end": 7487, "name": "SWAP2", "source": 0 }, + { "begin": 7339, "end": 7487, "name": "SUB", "source": 0 }, + { "begin": 7339, "end": 7487, "name": "SWAP1", "source": 0 }, + { "begin": 7339, "end": 7487, "name": "REVERT", "source": 0 }, + { + "begin": 7339, + "end": 7487, + "name": "tag", + "source": 0, + "value": "84" + }, + { "begin": 7339, "end": 7487, "name": "JUMPDEST", "source": 0 }, + { "begin": 6070, "end": 7494, "name": "POP", "source": 0 }, + { "begin": 6070, "end": 7494, "name": "POP", "source": 0 }, + { "begin": 6070, "end": 7494, "name": "POP", "source": 0 }, + { "begin": 6070, "end": 7494, "name": "POP", "source": 0 }, + { "begin": 6070, "end": 7494, "name": "POP", "source": 0 }, + { "begin": 6070, "end": 7494, "name": "POP", "source": 0 }, + { + "begin": 6040, + "end": 7494, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 285, + "end": 1496, + "name": "tag", + "source": 0, + "value": "19" + }, + { "begin": 285, "end": 1496, "name": "JUMPDEST", "source": 0 }, + { + "begin": 332, + "end": 344, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 354, "end": 377, "name": "DUP1", "source": 0 }, + { + "begin": 354, + "end": 710, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 354, "end": 710, "name": "MLOAD", "source": 0 }, + { "begin": 354, "end": 710, "name": "DUP1", "source": 0 }, + { + "begin": 354, + "end": 710, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { "begin": 354, "end": 710, "name": "ADD", "source": 0 }, + { + "begin": 354, + "end": 710, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 354, "end": 710, "name": "MSTORE", "source": 0 }, + { "begin": 354, "end": 710, "name": "DUP1", "source": 0 }, + { + "begin": 394, + "end": 460, + "name": "PUSH", + "source": 0, + "value": "2243525C5EFD4B9C3D3C45AC0CA3FE4DD85E830A4CE6B65FA1EEAEE202839703" + }, + { "begin": 354, "end": 710, "name": "DUP2", "source": 0 }, + { "begin": 354, "end": 710, "name": "MSTORE", "source": 0 }, + { + "begin": 354, + "end": 710, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 354, "end": 710, "name": "ADD", "source": 0 }, + { + "begin": 474, + "end": 540, + "name": "PUSH", + "source": 0, + "value": "301D1D33BE6DA8E509DF21CC35964723180EED7532537DB9AE5E7D48F195C915" + }, + { "begin": 354, "end": 710, "name": "DUP2", "source": 0 }, + { "begin": 354, "end": 710, "name": "MSTORE", "source": 0 }, + { + "begin": 354, + "end": 710, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 354, "end": 710, "name": "ADD", "source": 0 }, + { + "begin": 554, + "end": 620, + "name": "PUSH", + "source": 0, + "value": "18B18ACFB4C2C30276DB5411368E7185B311DD124691610C5D3B74034E093DC9" + }, + { "begin": 354, "end": 710, "name": "DUP2", "source": 0 }, + { "begin": 354, "end": 710, "name": "MSTORE", "source": 0 }, + { + "begin": 354, + "end": 710, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 354, "end": 710, "name": "ADD", "source": 0 }, + { + "begin": 634, + "end": 700, + "name": "PUSH", + "source": 0, + "value": "63C909C4720840CB5134CB9F59FA749755796819658D32EFC0D288198F37266" + }, + { "begin": 354, "end": 710, "name": "DUP2", "source": 0 }, + { "begin": 354, "end": 710, "name": "MSTORE", "source": 0 }, + { "begin": 354, "end": 710, "name": "POP", "source": 0 }, + { "begin": 354, "end": 710, "name": "SWAP1", "source": 0 }, + { "begin": 354, "end": 710, "name": "POP", "source": 0 }, + { + "begin": 720, + "end": 744, + "name": "PUSH [tag]", + "source": 0, + "value": "87" + }, + { + "begin": 720, + "end": 744, + "name": "PUSH [tag]", + "source": 0, + "value": "88" + }, + { + "begin": 720, + "end": 744, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 720, + "end": 744, + "name": "tag", + "source": 0, + "value": "87" + }, + { "begin": 720, "end": 744, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1101, + "end": 1103, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1093, "end": 1099, "name": "DUP2", "source": 0 }, + { + "begin": 1088, + "end": 1091, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { "begin": 1081, "end": 1086, "name": "DUP5", "source": 0 }, + { + "begin": 1078, + "end": 1079, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1072, + "end": 1076, + "name": "PUSH", + "source": 0, + "value": "6" + }, + { + "begin": 1068, + "end": 1069, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1064, "end": 1070, "name": "NOT", "source": 0 }, + { "begin": 1059, "end": 1104, "name": "CALL", "source": 0 }, + { "begin": 1048, "end": 1104, "name": "SWAP3", "source": 0 }, + { "begin": 1048, "end": 1104, "name": "POP", "source": 0 }, + { "begin": 1131, "end": 1138, "name": "DUP3", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "PUSH [tag]", + "source": 0, + "value": "89" + }, + { "begin": 1123, "end": 1173, "name": "JUMPI", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1123, "end": 1173, "name": "MLOAD", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1123, "end": 1173, "name": "DUP2", "source": 0 }, + { "begin": 1123, "end": 1173, "name": "MSTORE", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1123, "end": 1173, "name": "ADD", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "PUSH [tag]", + "source": 0, + "value": "90" + }, + { "begin": 1123, "end": 1173, "name": "SWAP1", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "PUSH [tag]", + "source": 0, + "value": "91" + }, + { + "begin": 1123, + "end": 1173, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1123, + "end": 1173, + "name": "tag", + "source": 0, + "value": "90" + }, + { "begin": 1123, "end": 1173, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1123, "end": 1173, "name": "MLOAD", "source": 0 }, + { "begin": 1123, "end": 1173, "name": "DUP1", "source": 0 }, + { "begin": 1123, "end": 1173, "name": "SWAP2", "source": 0 }, + { "begin": 1123, "end": 1173, "name": "SUB", "source": 0 }, + { "begin": 1123, "end": 1173, "name": "SWAP1", "source": 0 }, + { "begin": 1123, "end": 1173, "name": "REVERT", "source": 0 }, + { + "begin": 1123, + "end": 1173, + "name": "tag", + "source": 0, + "value": "89" + }, + { "begin": 1123, "end": 1173, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1233, + "end": 1299, + "name": "PUSH", + "source": 0, + "value": "2BD3E6D0F3B142924F5CA7B49CE5B9D54C4703D7AE5648E61D02268B1A0A9FB7" + }, + { "begin": 1204, "end": 1210, "name": "DUP2", "source": 0 }, + { + "begin": 1211, + "end": 1212, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1204, + "end": 1213, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 1204, "end": 1213, "name": "DUP2", "source": 0 }, + { "begin": 1204, "end": 1213, "name": "LT", "source": 0 }, + { + "begin": 1204, + "end": 1213, + "name": "PUSH [tag]", + "source": 0, + "value": "92" + }, + { "begin": 1204, "end": 1213, "name": "JUMPI", "source": 0 }, + { + "begin": 1204, + "end": 1213, + "name": "PUSH [tag]", + "source": 0, + "value": "93" + }, + { + "begin": 1204, + "end": 1213, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 1204, + "end": 1213, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1204, + "end": 1213, + "name": "tag", + "source": 0, + "value": "93" + }, + { "begin": 1204, "end": 1213, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1204, + "end": 1213, + "name": "tag", + "source": 0, + "value": "92" + }, + { "begin": 1204, "end": 1213, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1204, + "end": 1213, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1204, "end": 1213, "name": "MUL", "source": 0 }, + { "begin": 1204, "end": 1213, "name": "ADD", "source": 0 }, + { "begin": 1204, "end": 1213, "name": "MLOAD", "source": 0 }, + { "begin": 1204, "end": 1299, "name": "EQ", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "PUSH [tag]", + "source": 0, + "value": "94" + }, + { "begin": 1183, "end": 1331, "name": "JUMPI", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1183, "end": 1331, "name": "MLOAD", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1183, "end": 1331, "name": "DUP2", "source": 0 }, + { "begin": 1183, "end": 1331, "name": "MSTORE", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1183, "end": 1331, "name": "ADD", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "PUSH [tag]", + "source": 0, + "value": "95" + }, + { "begin": 1183, "end": 1331, "name": "SWAP1", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 1183, + "end": 1331, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1183, + "end": 1331, + "name": "tag", + "source": 0, + "value": "95" + }, + { "begin": 1183, "end": 1331, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1183, "end": 1331, "name": "MLOAD", "source": 0 }, + { "begin": 1183, "end": 1331, "name": "DUP1", "source": 0 }, + { "begin": 1183, "end": 1331, "name": "SWAP2", "source": 0 }, + { "begin": 1183, "end": 1331, "name": "SUB", "source": 0 }, + { "begin": 1183, "end": 1331, "name": "SWAP1", "source": 0 }, + { "begin": 1183, "end": 1331, "name": "REVERT", "source": 0 }, + { + "begin": 1183, + "end": 1331, + "name": "tag", + "source": 0, + "value": "94" + }, + { "begin": 1183, "end": 1331, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1391, + "end": 1457, + "name": "PUSH", + "source": 0, + "value": "21611CE0A6AF85915E2F1D70300909CE2E49DFAD4A4619C8390CAE66CEFDB204" + }, + { "begin": 1362, "end": 1368, "name": "DUP2", "source": 0 }, + { + "begin": 1369, + "end": 1370, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1362, + "end": 1371, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 1362, "end": 1371, "name": "DUP2", "source": 0 }, + { "begin": 1362, "end": 1371, "name": "LT", "source": 0 }, + { + "begin": 1362, + "end": 1371, + "name": "PUSH [tag]", + "source": 0, + "value": "96" + }, + { "begin": 1362, "end": 1371, "name": "JUMPI", "source": 0 }, + { + "begin": 1362, + "end": 1371, + "name": "PUSH [tag]", + "source": 0, + "value": "97" + }, + { + "begin": 1362, + "end": 1371, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 1362, + "end": 1371, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1362, + "end": 1371, + "name": "tag", + "source": 0, + "value": "97" + }, + { "begin": 1362, "end": 1371, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1362, + "end": 1371, + "name": "tag", + "source": 0, + "value": "96" + }, + { "begin": 1362, "end": 1371, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1362, + "end": 1371, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1362, "end": 1371, "name": "MUL", "source": 0 }, + { "begin": 1362, "end": 1371, "name": "ADD", "source": 0 }, + { "begin": 1362, "end": 1371, "name": "MLOAD", "source": 0 }, + { "begin": 1362, "end": 1457, "name": "EQ", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "PUSH [tag]", + "source": 0, + "value": "98" + }, + { "begin": 1341, "end": 1489, "name": "JUMPI", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1341, "end": 1489, "name": "MLOAD", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1341, "end": 1489, "name": "DUP2", "source": 0 }, + { "begin": 1341, "end": 1489, "name": "MSTORE", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1341, "end": 1489, "name": "ADD", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "PUSH [tag]", + "source": 0, + "value": "99" + }, + { "begin": 1341, "end": 1489, "name": "SWAP1", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 1341, + "end": 1489, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1341, + "end": 1489, + "name": "tag", + "source": 0, + "value": "99" + }, + { "begin": 1341, "end": 1489, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1341, "end": 1489, "name": "MLOAD", "source": 0 }, + { "begin": 1341, "end": 1489, "name": "DUP1", "source": 0 }, + { "begin": 1341, "end": 1489, "name": "SWAP2", "source": 0 }, + { "begin": 1341, "end": 1489, "name": "SUB", "source": 0 }, + { "begin": 1341, "end": 1489, "name": "SWAP1", "source": 0 }, + { "begin": 1341, "end": 1489, "name": "REVERT", "source": 0 }, + { + "begin": 1341, + "end": 1489, + "name": "tag", + "source": 0, + "value": "98" + }, + { "begin": 1341, "end": 1489, "name": "JUMPDEST", "source": 0 }, + { "begin": 322, "end": 1496, "name": "POP", "source": 0 }, + { "begin": 322, "end": 1496, "name": "POP", "source": 0 }, + { "begin": 322, "end": 1496, "name": "POP", "source": 0 }, + { + "begin": 285, + "end": 1496, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 5213, + "end": 5345, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 5213, "end": 5345, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5289, + "end": 5290, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 5263, + "end": 5285, + "name": "PUSH [tag]", + "source": 0, + "value": "101" + }, + { + "begin": 5277, + "end": 5278, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 5280, + "end": 5281, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 5283, + "end": 5284, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 5263, + "end": 5276, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 5263, + "end": 5285, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5263, + "end": 5285, + "name": "tag", + "source": 0, + "value": "101" + }, + { "begin": 5263, "end": 5285, "name": "JUMPDEST", "source": 0 }, + { "begin": 5263, "end": 5290, "name": "EQ", "source": 0 }, + { + "begin": 5255, + "end": 5291, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { "begin": 5255, "end": 5291, "name": "JUMPI", "source": 0 }, + { + "begin": 5255, + "end": 5291, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5255, "end": 5291, "name": "DUP1", "source": 0 }, + { "begin": 5255, "end": 5291, "name": "REVERT", "source": 0 }, + { + "begin": 5255, + "end": 5291, + "name": "tag", + "source": 0, + "value": "102" + }, + { "begin": 5255, "end": 5291, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5336, + "end": 5337, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 5309, + "end": 5332, + "name": "PUSH [tag]", + "source": 0, + "value": "103" + }, + { + "begin": 5323, + "end": 5324, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 5326, + "end": 5327, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 5329, + "end": 5331, + "name": "PUSH", + "source": 0, + "value": "B" + }, + { + "begin": 5309, + "end": 5322, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 5309, + "end": 5332, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5309, + "end": 5332, + "name": "tag", + "source": 0, + "value": "103" + }, + { "begin": 5309, "end": 5332, "name": "JUMPDEST", "source": 0 }, + { "begin": 5309, "end": 5337, "name": "EQ", "source": 0 }, + { + "begin": 5301, + "end": 5338, + "name": "PUSH [tag]", + "source": 0, + "value": "104" + }, + { "begin": 5301, "end": 5338, "name": "JUMPI", "source": 0 }, + { + "begin": 5301, + "end": 5338, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5301, "end": 5338, "name": "DUP1", "source": 0 }, + { "begin": 5301, "end": 5338, "name": "REVERT", "source": 0 }, + { + "begin": 5301, + "end": 5338, + "name": "tag", + "source": 0, + "value": "104" + }, + { "begin": 5301, "end": 5338, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5213, + "end": 5345, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 4302, + "end": 5207, + "name": "tag", + "source": 0, + "value": "25" + }, + { "begin": 4302, "end": 5207, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4407, + "end": 4421, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 4512, + "end": 4516, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4506, "end": 4517, "name": "MLOAD", "source": 0 }, + { + "begin": 4623, + "end": 4627, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 4614, "end": 4621, "name": "DUP2", "source": 0 }, + { "begin": 4607, "end": 4628, "name": "MSTORE", "source": 0 }, + { + "begin": 4668, + "end": 4672, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 4661, "end": 4665, "name": "DUP1", "source": 0 }, + { "begin": 4652, "end": 4659, "name": "DUP3", "source": 0 }, + { "begin": 4648, "end": 4666, "name": "ADD", "source": 0 }, + { "begin": 4641, "end": 4673, "name": "MSTORE", "source": 0 }, + { + "begin": 4713, + "end": 4717, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 4706, + "end": 4710, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4697, "end": 4704, "name": "DUP3", "source": 0 }, + { "begin": 4693, "end": 4711, "name": "ADD", "source": 0 }, + { "begin": 4686, "end": 4718, "name": "MSTORE", "source": 0 }, + { "begin": 4817, "end": 4819, "name": "DUP5", "source": 0 }, + { + "begin": 4810, + "end": 4814, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 4801, "end": 4808, "name": "DUP3", "source": 0 }, + { "begin": 4797, "end": 4815, "name": "ADD", "source": 0 }, + { "begin": 4790, "end": 4820, "name": "MSTORE", "source": 0 }, + { "begin": 4860, "end": 4862, "name": "DUP4", "source": 0 }, + { + "begin": 4853, + "end": 4857, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { "begin": 4844, "end": 4851, "name": "DUP3", "source": 0 }, + { "begin": 4840, "end": 4858, "name": "ADD", "source": 0 }, + { "begin": 4833, "end": 4863, "name": "MSTORE", "source": 0 }, + { "begin": 4904, "end": 4906, "name": "DUP3", "source": 0 }, + { + "begin": 4897, + "end": 4901, + "name": "PUSH", + "source": 0, + "value": "A0" + }, + { "begin": 4888, "end": 4895, "name": "DUP3", "source": 0 }, + { "begin": 4884, "end": 4902, "name": "ADD", "source": 0 }, + { "begin": 4877, "end": 4907, "name": "MSTORE", "source": 0 }, + { + "begin": 4971, + "end": 4975, + "name": "PUSH", + "source": 0, + "value": "C0" + }, + { "begin": 4965, "end": 4976, "name": "MLOAD", "source": 0 }, + { + "begin": 5105, + "end": 5109, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5098, "end": 5103, "name": "DUP2", "source": 0 }, + { + "begin": 5092, + "end": 5096, + "name": "PUSH", + "source": 0, + "value": "C0" + }, + { "begin": 5083, "end": 5090, "name": "DUP5", "source": 0 }, + { + "begin": 5080, + "end": 5081, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 5074, + "end": 5078, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { + "begin": 5070, + "end": 5071, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5066, "end": 5072, "name": "NOT", "source": 0 }, + { "begin": 5061, "end": 5110, "name": "CALL", "source": 0 }, + { + "begin": 5051, + "end": 5156, + "name": "PUSH [tag]", + "source": 0, + "value": "106" + }, + { "begin": 5051, "end": 5156, "name": "JUMPI", "source": 0 }, + { + "begin": 5140, + "end": 5141, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5137, "end": 5138, "name": "DUP1", "source": 0 }, + { "begin": 5130, "end": 5142, "name": "REVERT", "source": 0 }, + { + "begin": 5051, + "end": 5156, + "name": "tag", + "source": 0, + "value": "106" + }, + { "begin": 5051, "end": 5156, "name": "JUMPDEST", "source": 0 }, + { "begin": 5185, "end": 5190, "name": "DUP1", "source": 0 }, + { "begin": 5179, "end": 5191, "name": "MLOAD", "source": 0 }, + { "begin": 5169, "end": 5191, "name": "SWAP3", "source": 0 }, + { "begin": 5169, "end": 5191, "name": "POP", "source": 0 }, + { "begin": 4442, "end": 5201, "name": "POP", "source": 0 }, + { "begin": 4442, "end": 5201, "name": "POP", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SWAP4", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "SWAP3", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "POP", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "POP", "source": 0 }, + { "begin": 4302, "end": 5207, "name": "POP", "source": 0 }, + { + "begin": 4302, + "end": 5207, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1502, + "end": 2632, + "name": "tag", + "source": 0, + "value": "29" + }, + { "begin": 1502, "end": 2632, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1549, + "end": 1561, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1571, "end": 1594, "name": "DUP1", "source": 0 }, + { + "begin": 1571, + "end": 1847, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1571, "end": 1847, "name": "MLOAD", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "DUP1", "source": 0 }, + { + "begin": 1571, + "end": 1847, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 1571, "end": 1847, "name": "ADD", "source": 0 }, + { + "begin": 1571, + "end": 1847, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1571, "end": 1847, "name": "MSTORE", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "DUP1", "source": 0 }, + { + "begin": 1611, + "end": 1677, + "name": "PUSH", + "source": 0, + "value": "1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3" + }, + { "begin": 1571, "end": 1847, "name": "DUP2", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "MSTORE", "source": 0 }, + { + "begin": 1571, + "end": 1847, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1571, "end": 1847, "name": "ADD", "source": 0 }, + { + "begin": 1691, + "end": 1757, + "name": "PUSH", + "source": 0, + "value": "1A2F3C951F6DADCC7EE9007DFF81504B0FCD6D7CF59996EFDC33D92BF7F9F8F6" + }, + { "begin": 1571, "end": 1847, "name": "DUP2", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "MSTORE", "source": 0 }, + { + "begin": 1571, + "end": 1847, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1571, "end": 1847, "name": "ADD", "source": 0 }, + { + "begin": 1771, + "end": 1837, + "name": "PUSH", + "source": 0, + "value": "30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000000" + }, + { "begin": 1571, "end": 1847, "name": "DUP2", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "MSTORE", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "POP", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "SWAP1", "source": 0 }, + { "begin": 1571, "end": 1847, "name": "POP", "source": 0 }, + { + "begin": 1857, + "end": 1881, + "name": "PUSH [tag]", + "source": 0, + "value": "108" + }, + { + "begin": 1857, + "end": 1881, + "name": "PUSH [tag]", + "source": 0, + "value": "88" + }, + { + "begin": 1857, + "end": 1881, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1857, + "end": 1881, + "name": "tag", + "source": 0, + "value": "108" + }, + { "begin": 1857, "end": 1881, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2237, + "end": 2239, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2229, "end": 2235, "name": "DUP2", "source": 0 }, + { + "begin": 2225, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "60" + }, + { "begin": 2218, "end": 2223, "name": "DUP5", "source": 0 }, + { + "begin": 2215, + "end": 2216, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 2209, + "end": 2213, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 2205, + "end": 2206, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2201, "end": 2207, "name": "NOT", "source": 0 }, + { "begin": 2196, "end": 2240, "name": "CALL", "source": 0 }, + { "begin": 2185, "end": 2240, "name": "SWAP3", "source": 0 }, + { "begin": 2185, "end": 2240, "name": "POP", "source": 0 }, + { "begin": 2267, "end": 2274, "name": "DUP3", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "PUSH [tag]", + "source": 0, + "value": "109" + }, + { "begin": 2259, "end": 2309, "name": "JUMPI", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2259, "end": 2309, "name": "MLOAD", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 2259, "end": 2309, "name": "DUP2", "source": 0 }, + { "begin": 2259, "end": 2309, "name": "MSTORE", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2259, "end": 2309, "name": "ADD", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "PUSH [tag]", + "source": 0, + "value": "110" + }, + { "begin": 2259, "end": 2309, "name": "SWAP1", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "PUSH [tag]", + "source": 0, + "value": "91" + }, + { + "begin": 2259, + "end": 2309, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2259, + "end": 2309, + "name": "tag", + "source": 0, + "value": "110" + }, + { "begin": 2259, "end": 2309, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2259, "end": 2309, "name": "MLOAD", "source": 0 }, + { "begin": 2259, "end": 2309, "name": "DUP1", "source": 0 }, + { "begin": 2259, "end": 2309, "name": "SWAP2", "source": 0 }, + { "begin": 2259, "end": 2309, "name": "SUB", "source": 0 }, + { "begin": 2259, "end": 2309, "name": "SWAP1", "source": 0 }, + { "begin": 2259, "end": 2309, "name": "REVERT", "source": 0 }, + { + "begin": 2259, + "end": 2309, + "name": "tag", + "source": 0, + "value": "109" + }, + { "begin": 2259, "end": 2309, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2369, + "end": 2435, + "name": "PUSH", + "source": 0, + "value": "1A87B0584CE92F4593D161480614F2989035225609F08058CCFA3D0F940FEBE3" + }, + { "begin": 2340, "end": 2346, "name": "DUP2", "source": 0 }, + { + "begin": 2347, + "end": 2348, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 2340, + "end": 2349, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 2340, "end": 2349, "name": "DUP2", "source": 0 }, + { "begin": 2340, "end": 2349, "name": "LT", "source": 0 }, + { + "begin": 2340, + "end": 2349, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { "begin": 2340, "end": 2349, "name": "JUMPI", "source": 0 }, + { + "begin": 2340, + "end": 2349, + "name": "PUSH [tag]", + "source": 0, + "value": "112" + }, + { + "begin": 2340, + "end": 2349, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 2340, + "end": 2349, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2340, + "end": 2349, + "name": "tag", + "source": 0, + "value": "112" + }, + { "begin": 2340, "end": 2349, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2340, + "end": 2349, + "name": "tag", + "source": 0, + "value": "111" + }, + { "begin": 2340, "end": 2349, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2340, + "end": 2349, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2340, "end": 2349, "name": "MUL", "source": 0 }, + { "begin": 2340, "end": 2349, "name": "ADD", "source": 0 }, + { "begin": 2340, "end": 2349, "name": "MLOAD", "source": 0 }, + { "begin": 2340, "end": 2435, "name": "EQ", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "PUSH [tag]", + "source": 0, + "value": "113" + }, + { "begin": 2319, "end": 2467, "name": "JUMPI", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2319, "end": 2467, "name": "MLOAD", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 2319, "end": 2467, "name": "DUP2", "source": 0 }, + { "begin": 2319, "end": 2467, "name": "MSTORE", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2319, "end": 2467, "name": "ADD", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "PUSH [tag]", + "source": 0, + "value": "114" + }, + { "begin": 2319, "end": 2467, "name": "SWAP1", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 2319, + "end": 2467, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2319, + "end": 2467, + "name": "tag", + "source": 0, + "value": "114" + }, + { "begin": 2319, "end": 2467, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2319, "end": 2467, "name": "MLOAD", "source": 0 }, + { "begin": 2319, "end": 2467, "name": "DUP1", "source": 0 }, + { "begin": 2319, "end": 2467, "name": "SWAP2", "source": 0 }, + { "begin": 2319, "end": 2467, "name": "SUB", "source": 0 }, + { "begin": 2319, "end": 2467, "name": "SWAP1", "source": 0 }, + { "begin": 2319, "end": 2467, "name": "REVERT", "source": 0 }, + { + "begin": 2319, + "end": 2467, + "name": "tag", + "source": 0, + "value": "113" + }, + { "begin": 2319, "end": 2467, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2527, + "end": 2593, + "name": "PUSH", + "source": 0, + "value": "163511DDC1C3F25D396745388200081287B3FD1472D8339D5FECB2EAE0830451" + }, + { "begin": 2498, "end": 2504, "name": "DUP2", "source": 0 }, + { + "begin": 2505, + "end": 2506, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 2498, + "end": 2507, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 2498, "end": 2507, "name": "DUP2", "source": 0 }, + { "begin": 2498, "end": 2507, "name": "LT", "source": 0 }, + { + "begin": 2498, + "end": 2507, + "name": "PUSH [tag]", + "source": 0, + "value": "115" + }, + { "begin": 2498, "end": 2507, "name": "JUMPI", "source": 0 }, + { + "begin": 2498, + "end": 2507, + "name": "PUSH [tag]", + "source": 0, + "value": "116" + }, + { + "begin": 2498, + "end": 2507, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 2498, + "end": 2507, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2498, + "end": 2507, + "name": "tag", + "source": 0, + "value": "116" + }, + { "begin": 2498, "end": 2507, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2498, + "end": 2507, + "name": "tag", + "source": 0, + "value": "115" + }, + { "begin": 2498, "end": 2507, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2498, + "end": 2507, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 2498, "end": 2507, "name": "MUL", "source": 0 }, + { "begin": 2498, "end": 2507, "name": "ADD", "source": 0 }, + { "begin": 2498, "end": 2507, "name": "MLOAD", "source": 0 }, + { "begin": 2498, "end": 2593, "name": "EQ", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "PUSH [tag]", + "source": 0, + "value": "117" + }, + { "begin": 2477, "end": 2625, "name": "JUMPI", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2477, "end": 2625, "name": "MLOAD", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 2477, "end": 2625, "name": "DUP2", "source": 0 }, + { "begin": 2477, "end": 2625, "name": "MSTORE", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2477, "end": 2625, "name": "ADD", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "PUSH [tag]", + "source": 0, + "value": "118" + }, + { "begin": 2477, "end": 2625, "name": "SWAP1", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 2477, + "end": 2625, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2477, + "end": 2625, + "name": "tag", + "source": 0, + "value": "118" + }, + { "begin": 2477, "end": 2625, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2477, "end": 2625, "name": "MLOAD", "source": 0 }, + { "begin": 2477, "end": 2625, "name": "DUP1", "source": 0 }, + { "begin": 2477, "end": 2625, "name": "SWAP2", "source": 0 }, + { "begin": 2477, "end": 2625, "name": "SUB", "source": 0 }, + { "begin": 2477, "end": 2625, "name": "SWAP1", "source": 0 }, + { "begin": 2477, "end": 2625, "name": "REVERT", "source": 0 }, + { + "begin": 2477, + "end": 2625, + "name": "tag", + "source": 0, + "value": "117" + }, + { "begin": 2477, "end": 2625, "name": "JUMPDEST", "source": 0 }, + { "begin": 1539, "end": 2632, "name": "POP", "source": 0 }, + { "begin": 1539, "end": 2632, "name": "POP", "source": 0 }, + { "begin": 1539, "end": 2632, "name": "POP", "source": 0 }, + { + "begin": 1502, + "end": 2632, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 5351, + "end": 6034, + "name": "tag", + "source": 0, + "value": "33" + }, + { "begin": 5351, "end": 6034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5526, + "end": 5543, + "name": "PUSH [tag]", + "source": 0, + "value": "119" + }, + { + "begin": 5526, + "end": 5543, + "name": "PUSH [tag]", + "source": 0, + "value": "56" + }, + { + "begin": 5526, + "end": 5543, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5526, + "end": 5543, + "name": "tag", + "source": 0, + "value": "119" + }, + { "begin": 5526, "end": 5543, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5555, + "end": 5579, + "name": "PUSH [tag]", + "source": 0, + "value": "121" + }, + { + "begin": 5555, + "end": 5579, + "name": "PUSH [tag]", + "source": 0, + "value": "56" + }, + { + "begin": 5555, + "end": 5579, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5555, + "end": 5579, + "name": "tag", + "source": 0, + "value": "121" + }, + { "begin": 5555, "end": 5579, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5590, + "end": 5607, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5640, "end": 5646, "name": "DUP8", "source": 0 }, + { "begin": 5660, "end": 5661, "name": "DUP8", "source": 0 }, + { + "begin": 5662, + "end": 5663, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 5660, + "end": 5664, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 5660, "end": 5664, "name": "DUP2", "source": 0 }, + { "begin": 5660, "end": 5664, "name": "LT", "source": 0 }, + { + "begin": 5660, + "end": 5664, + "name": "PUSH [tag]", + "source": 0, + "value": "122" + }, + { "begin": 5660, "end": 5664, "name": "JUMPI", "source": 0 }, + { + "begin": 5660, + "end": 5664, + "name": "PUSH [tag]", + "source": 0, + "value": "123" + }, + { + "begin": 5660, + "end": 5664, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5660, + "end": 5664, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5660, + "end": 5664, + "name": "tag", + "source": 0, + "value": "123" + }, + { "begin": 5660, "end": 5664, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5660, + "end": 5664, + "name": "tag", + "source": 0, + "value": "122" + }, + { "begin": 5660, "end": 5664, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5660, + "end": 5664, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5660, "end": 5664, "name": "MUL", "source": 0 }, + { "begin": 5660, "end": 5664, "name": "ADD", "source": 0 }, + { "begin": 5660, "end": 5664, "name": "MLOAD", "source": 0 }, + { "begin": 5678, "end": 5679, "name": "DUP9", "source": 0 }, + { + "begin": 5680, + "end": 5681, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 5678, + "end": 5682, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 5678, "end": 5682, "name": "DUP2", "source": 0 }, + { "begin": 5678, "end": 5682, "name": "LT", "source": 0 }, + { + "begin": 5678, + "end": 5682, + "name": "PUSH [tag]", + "source": 0, + "value": "124" + }, + { "begin": 5678, "end": 5682, "name": "JUMPI", "source": 0 }, + { + "begin": 5678, + "end": 5682, + "name": "PUSH [tag]", + "source": 0, + "value": "125" + }, + { + "begin": 5678, + "end": 5682, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5678, + "end": 5682, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5678, + "end": 5682, + "name": "tag", + "source": 0, + "value": "125" + }, + { "begin": 5678, "end": 5682, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5678, + "end": 5682, + "name": "tag", + "source": 0, + "value": "124" + }, + { "begin": 5678, "end": 5682, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5678, + "end": 5682, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5678, "end": 5682, "name": "MUL", "source": 0 }, + { "begin": 5678, "end": 5682, "name": "ADD", "source": 0 }, + { "begin": 5678, "end": 5682, "name": "MLOAD", "source": 0 }, + { "begin": 5696, "end": 5697, "name": "DUP9", "source": 0 }, + { + "begin": 5698, + "end": 5699, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 5696, + "end": 5700, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 5696, "end": 5700, "name": "DUP2", "source": 0 }, + { "begin": 5696, "end": 5700, "name": "LT", "source": 0 }, + { + "begin": 5696, + "end": 5700, + "name": "PUSH [tag]", + "source": 0, + "value": "126" + }, + { "begin": 5696, "end": 5700, "name": "JUMPI", "source": 0 }, + { + "begin": 5696, + "end": 5700, + "name": "PUSH [tag]", + "source": 0, + "value": "127" + }, + { + "begin": 5696, + "end": 5700, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5696, + "end": 5700, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5696, + "end": 5700, + "name": "tag", + "source": 0, + "value": "127" + }, + { "begin": 5696, "end": 5700, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5696, + "end": 5700, + "name": "tag", + "source": 0, + "value": "126" + }, + { "begin": 5696, "end": 5700, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5696, + "end": 5700, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5696, "end": 5700, "name": "MUL", "source": 0 }, + { "begin": 5696, "end": 5700, "name": "ADD", "source": 0 }, + { "begin": 5696, "end": 5700, "name": "MLOAD", "source": 0 }, + { "begin": 5714, "end": 5715, "name": "DUP10", "source": 0 }, + { + "begin": 5716, + "end": 5717, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 5714, + "end": 5718, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 5714, "end": 5718, "name": "DUP2", "source": 0 }, + { "begin": 5714, "end": 5718, "name": "LT", "source": 0 }, + { + "begin": 5714, + "end": 5718, + "name": "PUSH [tag]", + "source": 0, + "value": "128" + }, + { "begin": 5714, "end": 5718, "name": "JUMPI", "source": 0 }, + { + "begin": 5714, + "end": 5718, + "name": "PUSH [tag]", + "source": 0, + "value": "129" + }, + { + "begin": 5714, + "end": 5718, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5714, + "end": 5718, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5714, + "end": 5718, + "name": "tag", + "source": 0, + "value": "129" + }, + { "begin": 5714, "end": 5718, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5714, + "end": 5718, + "name": "tag", + "source": 0, + "value": "128" + }, + { "begin": 5714, "end": 5718, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5714, + "end": 5718, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5714, "end": 5718, "name": "MUL", "source": 0 }, + { "begin": 5714, "end": 5718, "name": "ADD", "source": 0 }, + { "begin": 5714, "end": 5718, "name": "MLOAD", "source": 0 }, + { "begin": 5732, "end": 5733, "name": "DUP11", "source": 0 }, + { + "begin": 5734, + "end": 5735, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 5732, + "end": 5736, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 5732, "end": 5736, "name": "DUP2", "source": 0 }, + { "begin": 5732, "end": 5736, "name": "LT", "source": 0 }, + { + "begin": 5732, + "end": 5736, + "name": "PUSH [tag]", + "source": 0, + "value": "130" + }, + { "begin": 5732, "end": 5736, "name": "JUMPI", "source": 0 }, + { + "begin": 5732, + "end": 5736, + "name": "PUSH [tag]", + "source": 0, + "value": "131" + }, + { + "begin": 5732, + "end": 5736, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5732, + "end": 5736, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5732, + "end": 5736, + "name": "tag", + "source": 0, + "value": "131" + }, + { "begin": 5732, "end": 5736, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5732, + "end": 5736, + "name": "tag", + "source": 0, + "value": "130" + }, + { "begin": 5732, "end": 5736, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5732, + "end": 5736, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5732, "end": 5736, "name": "MUL", "source": 0 }, + { "begin": 5732, "end": 5736, "name": "ADD", "source": 0 }, + { "begin": 5732, "end": 5736, "name": "MLOAD", "source": 0 }, + { "begin": 5750, "end": 5751, "name": "DUP12", "source": 0 }, + { + "begin": 5752, + "end": 5753, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { + "begin": 5750, + "end": 5754, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 5750, "end": 5754, "name": "DUP2", "source": 0 }, + { "begin": 5750, "end": 5754, "name": "LT", "source": 0 }, + { + "begin": 5750, + "end": 5754, + "name": "PUSH [tag]", + "source": 0, + "value": "132" + }, + { "begin": 5750, "end": 5754, "name": "JUMPI", "source": 0 }, + { + "begin": 5750, + "end": 5754, + "name": "PUSH [tag]", + "source": 0, + "value": "133" + }, + { + "begin": 5750, + "end": 5754, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5750, + "end": 5754, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5750, + "end": 5754, + "name": "tag", + "source": 0, + "value": "133" + }, + { "begin": 5750, "end": 5754, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5750, + "end": 5754, + "name": "tag", + "source": 0, + "value": "132" + }, + { "begin": 5750, "end": 5754, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5750, + "end": 5754, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5750, "end": 5754, "name": "MUL", "source": 0 }, + { "begin": 5750, "end": 5754, "name": "ADD", "source": 0 }, + { "begin": 5750, "end": 5754, "name": "MLOAD", "source": 0 }, + { "begin": 5768, "end": 5769, "name": "DUP12", "source": 0 }, + { + "begin": 5770, + "end": 5771, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 5768, + "end": 5772, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 5768, "end": 5772, "name": "DUP2", "source": 0 }, + { "begin": 5768, "end": 5772, "name": "LT", "source": 0 }, + { + "begin": 5768, + "end": 5772, + "name": "PUSH [tag]", + "source": 0, + "value": "134" + }, + { "begin": 5768, "end": 5772, "name": "JUMPI", "source": 0 }, + { + "begin": 5768, + "end": 5772, + "name": "PUSH [tag]", + "source": 0, + "value": "135" + }, + { + "begin": 5768, + "end": 5772, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5768, + "end": 5772, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5768, + "end": 5772, + "name": "tag", + "source": 0, + "value": "135" + }, + { "begin": 5768, "end": 5772, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5768, + "end": 5772, + "name": "tag", + "source": 0, + "value": "134" + }, + { "begin": 5768, "end": 5772, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5768, + "end": 5772, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5768, "end": 5772, "name": "MUL", "source": 0 }, + { "begin": 5768, "end": 5772, "name": "ADD", "source": 0 }, + { "begin": 5768, "end": 5772, "name": "MLOAD", "source": 0 }, + { "begin": 5786, "end": 5787, "name": "DUP13", "source": 0 }, + { + "begin": 5788, + "end": 5789, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 5786, + "end": 5790, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 5786, "end": 5790, "name": "DUP2", "source": 0 }, + { "begin": 5786, "end": 5790, "name": "LT", "source": 0 }, + { + "begin": 5786, + "end": 5790, + "name": "PUSH [tag]", + "source": 0, + "value": "136" + }, + { "begin": 5786, "end": 5790, "name": "JUMPI", "source": 0 }, + { + "begin": 5786, + "end": 5790, + "name": "PUSH [tag]", + "source": 0, + "value": "137" + }, + { + "begin": 5786, + "end": 5790, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 5786, + "end": 5790, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5786, + "end": 5790, + "name": "tag", + "source": 0, + "value": "137" + }, + { "begin": 5786, "end": 5790, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5786, + "end": 5790, + "name": "tag", + "source": 0, + "value": "136" + }, + { "begin": 5786, "end": 5790, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5786, + "end": 5790, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5786, "end": 5790, "name": "MUL", "source": 0 }, + { "begin": 5786, "end": 5790, "name": "ADD", "source": 0 }, + { "begin": 5786, "end": 5790, "name": "MLOAD", "source": 0 }, + { "begin": 5804, "end": 5805, "name": "DUP13", "source": 0 }, + { + "begin": 5610, + "end": 5815, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5610, "end": 5815, "name": "MLOAD", "source": 0 }, + { + "begin": 5610, + "end": 5815, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5610, "end": 5815, "name": "ADD", "source": 0 }, + { + "begin": 5610, + "end": 5815, + "name": "PUSH [tag]", + "source": 0, + "value": "138" + }, + { "begin": 5610, "end": 5815, "name": "SWAP11", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP10", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP9", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP8", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP7", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP6", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP5", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP4", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP3", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP2", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP1", "source": 0 }, + { + "begin": 5610, + "end": 5815, + "name": "PUSH [tag]", + "source": 0, + "value": "139" + }, + { + "begin": 5610, + "end": 5815, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5610, + "end": 5815, + "name": "tag", + "source": 0, + "value": "138" + }, + { "begin": 5610, "end": 5815, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5610, + "end": 5815, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5610, "end": 5815, "name": "MLOAD", "source": 0 }, + { + "begin": 5610, + "end": 5815, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5610, "end": 5815, "name": "DUP2", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "DUP4", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SUB", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SUB", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "DUP2", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "MSTORE", "source": 0 }, + { "begin": 5610, "end": 5815, "name": "SWAP1", "source": 0 }, + { + "begin": 5610, + "end": 5815, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5610, "end": 5815, "name": "MSTORE", "source": 0 }, + { "begin": 5590, "end": 5815, "name": "SWAP1", "source": 0 }, + { "begin": 5590, "end": 5815, "name": "POP", "source": 0 }, + { + "begin": 5930, + "end": 5934, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5922, "end": 5928, "name": "DUP3", "source": 0 }, + { + "begin": 5916, + "end": 5920, + "name": "PUSH", + "source": 0, + "value": "D5" + }, + { + "begin": 5911, + "end": 5913, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 5905, "end": 5909, "name": "DUP5", "source": 0 }, + { "begin": 5901, "end": 5914, "name": "ADD", "source": 0 }, + { + "begin": 5895, + "end": 5899, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { + "begin": 5891, + "end": 5892, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5887, "end": 5893, "name": "NOT", "source": 0 }, + { "begin": 5876, "end": 5935, "name": "STATICCALL", "source": 0 }, + { + "begin": 5849, + "end": 5994, + "name": "PUSH [tag]", + "source": 0, + "value": "140" + }, + { "begin": 5849, "end": 5994, "name": "JUMPI", "source": 0 }, + { + "begin": 5978, + "end": 5979, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5975, "end": 5976, "name": "DUP1", "source": 0 }, + { "begin": 5968, "end": 5980, "name": "REVERT", "source": 0 }, + { + "begin": 5849, + "end": 5994, + "name": "tag", + "source": 0, + "value": "140" + }, + { "begin": 5849, "end": 5994, "name": "JUMPDEST", "source": 0 }, + { "begin": 6021, "end": 6027, "name": "DUP2", "source": 0 }, + { "begin": 6014, "end": 6027, "name": "SWAP3", "source": 0 }, + { "begin": 6014, "end": 6027, "name": "POP", "source": 0 }, + { "begin": 6014, "end": 6027, "name": "POP", "source": 0 }, + { "begin": 6014, "end": 6027, "name": "POP", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SWAP6", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "SWAP5", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "POP", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "POP", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "POP", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "POP", "source": 0 }, + { "begin": 5351, "end": 6034, "name": "POP", "source": 0 }, + { + "begin": 5351, + "end": 6034, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "44" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "20" + }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "1" + }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "20" + }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[out]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "56" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "2" + }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "20" + }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[out]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "62" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "80" + }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "4" + }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "20" + }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[out]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "72" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "2" + }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "20" + }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[out]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "88" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MLOAD", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "40" + }, + { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "2" + }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "20" + }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "MUL", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATASIZE", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP4", "source": -1 }, + { "begin": -1, "end": -1, "name": "CALLDATACOPY", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[out]" + }, + { + "begin": 7, + "end": 82, + "name": "tag", + "source": 1, + "value": "141" + }, + { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 1 }, + { + "begin": 40, + "end": 46, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 73, + "end": 75, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { "begin": 67, "end": 76, "name": "MLOAD", "source": 1 }, + { "begin": 57, "end": 76, "name": "SWAP1", "source": 1 }, + { "begin": 57, "end": 76, "name": "POP", "source": 1 }, + { "begin": 7, "end": 82, "name": "SWAP1", "source": 1 }, + { + "begin": 7, + "end": 82, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 88, + "end": 205, + "name": "tag", + "source": 1, + "value": "142" + }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { + "begin": 197, + "end": 198, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, + { + "begin": 334, + "end": 411, + "name": "tag", + "source": 1, + "value": "144" + }, + { "begin": 334, "end": 411, "name": "JUMPDEST", "source": 1 }, + { + "begin": 371, + "end": 378, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 400, "end": 405, "name": "DUP2", "source": 1 }, + { "begin": 389, "end": 405, "name": "SWAP1", "source": 1 }, + { "begin": 389, "end": 405, "name": "POP", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP1", "source": 1 }, + { "begin": 334, "end": 411, "name": "POP", "source": 1 }, + { + "begin": 334, + "end": 411, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 417, + "end": 539, + "name": "tag", + "source": 1, + "value": "145" + }, + { "begin": 417, "end": 539, "name": "JUMPDEST", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, + "value": "210" + }, + { "begin": 508, "end": 513, "name": "DUP2", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, + "value": "144" + }, + { + "begin": 490, + "end": 514, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 490, + "end": 514, + "name": "tag", + "source": 1, + "value": "210" + }, + { "begin": 490, "end": 514, "name": "JUMPDEST", "source": 1 }, + { "begin": 483, "end": 488, "name": "DUP2", "source": 1 }, + { "begin": 480, "end": 515, "name": "EQ", "source": 1 }, + { + "begin": 470, + "end": 533, + "name": "PUSH [tag]", + "source": 1, + "value": "211" + }, + { "begin": 470, "end": 533, "name": "JUMPI", "source": 1 }, + { + "begin": 529, + "end": 530, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 526, "end": 527, "name": "DUP1", "source": 1 }, + { "begin": 519, "end": 531, "name": "REVERT", "source": 1 }, + { + "begin": 470, + "end": 533, + "name": "tag", + "source": 1, + "value": "211" + }, + { "begin": 470, "end": 533, "name": "JUMPDEST", "source": 1 }, + { "begin": 417, "end": 539, "name": "POP", "source": 1 }, + { + "begin": 417, + "end": 539, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 545, + "end": 684, + "name": "tag", + "source": 1, + "value": "146" + }, + { "begin": 545, "end": 684, "name": "JUMPDEST", "source": 1 }, + { + "begin": 591, + "end": 596, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 629, "end": 635, "name": "DUP2", "source": 1 }, + { "begin": 616, "end": 636, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 607, "end": 636, "name": "SWAP1", "source": 1 }, + { "begin": 607, "end": 636, "name": "POP", "source": 1 }, + { + "begin": 645, + "end": 678, + "name": "PUSH [tag]", + "source": 1, + "value": "213" + }, + { "begin": 672, "end": 677, "name": "DUP2", "source": 1 }, + { + "begin": 645, + "end": 678, + "name": "PUSH [tag]", + "source": 1, + "value": "145" + }, + { + "begin": 645, + "end": 678, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 645, + "end": 678, + "name": "tag", + "source": 1, + "value": "213" + }, + { "begin": 645, "end": 678, "name": "JUMPDEST", "source": 1 }, + { "begin": 545, "end": 684, "name": "SWAP3", "source": 1 }, + { "begin": 545, "end": 684, "name": "SWAP2", "source": 1 }, + { "begin": 545, "end": 684, "name": "POP", "source": 1 }, + { "begin": 545, "end": 684, "name": "POP", "source": 1 }, + { + "begin": 545, + "end": 684, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 690, + "end": 1309, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 690, "end": 1309, "name": "JUMPDEST", "source": 1 }, + { + "begin": 767, + "end": 773, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 775, "end": 781, "name": "DUP1", "source": 1 }, + { + "begin": 783, + "end": 789, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 832, + "end": 834, + "name": "PUSH", + "source": 1, + "value": "60" + }, + { "begin": 820, "end": 829, "name": "DUP5", "source": 1 }, + { "begin": 811, "end": 818, "name": "DUP7", "source": 1 }, + { "begin": 807, "end": 830, "name": "SUB", "source": 1 }, + { "begin": 803, "end": 835, "name": "SLT", "source": 1 }, + { "begin": 800, "end": 919, "name": "ISZERO", "source": 1 }, + { + "begin": 800, + "end": 919, + "name": "PUSH [tag]", + "source": 1, + "value": "215" + }, + { "begin": 800, "end": 919, "name": "JUMPI", "source": 1 }, + { + "begin": 838, + "end": 917, + "name": "PUSH [tag]", + "source": 1, + "value": "216" + }, + { + "begin": 838, + "end": 917, + "name": "PUSH [tag]", + "source": 1, + "value": "142" + }, + { + "begin": 838, + "end": 917, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 838, + "end": 917, + "name": "tag", + "source": 1, + "value": "216" + }, + { "begin": 838, "end": 917, "name": "JUMPDEST", "source": 1 }, + { + "begin": 800, + "end": 919, + "name": "tag", + "source": 1, + "value": "215" + }, + { "begin": 800, "end": 919, "name": "JUMPDEST", "source": 1 }, + { + "begin": 958, + "end": 959, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 983, + "end": 1036, + "name": "PUSH [tag]", + "source": 1, + "value": "217" + }, + { "begin": 1028, "end": 1035, "name": "DUP7", "source": 1 }, + { "begin": 1019, "end": 1025, "name": "DUP3", "source": 1 }, + { "begin": 1008, "end": 1017, "name": "DUP8", "source": 1 }, + { "begin": 1004, "end": 1026, "name": "ADD", "source": 1 }, + { + "begin": 983, + "end": 1036, + "name": "PUSH [tag]", + "source": 1, + "value": "146" + }, + { + "begin": 983, + "end": 1036, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 983, + "end": 1036, + "name": "tag", + "source": 1, + "value": "217" + }, + { "begin": 983, "end": 1036, "name": "JUMPDEST", "source": 1 }, + { "begin": 973, "end": 1036, "name": "SWAP4", "source": 1 }, + { "begin": 973, "end": 1036, "name": "POP", "source": 1 }, + { "begin": 929, "end": 1046, "name": "POP", "source": 1 }, + { + "begin": 1085, + "end": 1087, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { + "begin": 1111, + "end": 1164, + "name": "PUSH [tag]", + "source": 1, + "value": "218" + }, + { "begin": 1156, "end": 1163, "name": "DUP7", "source": 1 }, + { "begin": 1147, "end": 1153, "name": "DUP3", "source": 1 }, + { "begin": 1136, "end": 1145, "name": "DUP8", "source": 1 }, + { "begin": 1132, "end": 1154, "name": "ADD", "source": 1 }, + { + "begin": 1111, + "end": 1164, + "name": "PUSH [tag]", + "source": 1, + "value": "146" + }, + { + "begin": 1111, + "end": 1164, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1111, + "end": 1164, + "name": "tag", + "source": 1, + "value": "218" + }, + { "begin": 1111, "end": 1164, "name": "JUMPDEST", "source": 1 }, + { "begin": 1101, "end": 1164, "name": "SWAP3", "source": 1 }, + { "begin": 1101, "end": 1164, "name": "POP", "source": 1 }, + { "begin": 1056, "end": 1174, "name": "POP", "source": 1 }, + { + "begin": 1213, + "end": 1215, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 1239, + "end": 1292, + "name": "PUSH [tag]", + "source": 1, + "value": "219" + }, + { "begin": 1284, "end": 1291, "name": "DUP7", "source": 1 }, + { "begin": 1275, "end": 1281, "name": "DUP3", "source": 1 }, + { "begin": 1264, "end": 1273, "name": "DUP8", "source": 1 }, + { "begin": 1260, "end": 1282, "name": "ADD", "source": 1 }, + { + "begin": 1239, + "end": 1292, + "name": "PUSH [tag]", + "source": 1, + "value": "146" + }, + { + "begin": 1239, + "end": 1292, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1239, + "end": 1292, + "name": "tag", + "source": 1, + "value": "219" + }, + { "begin": 1239, "end": 1292, "name": "JUMPDEST", "source": 1 }, + { "begin": 1229, "end": 1292, "name": "SWAP2", "source": 1 }, + { "begin": 1229, "end": 1292, "name": "POP", "source": 1 }, + { "begin": 1184, "end": 1302, "name": "POP", "source": 1 }, + { "begin": 690, "end": 1309, "name": "SWAP3", "source": 1 }, + { "begin": 690, "end": 1309, "name": "POP", "source": 1 }, + { "begin": 690, "end": 1309, "name": "SWAP3", "source": 1 }, + { "begin": 690, "end": 1309, "name": "POP", "source": 1 }, + { "begin": 690, "end": 1309, "name": "SWAP3", "source": 1 }, + { + "begin": 690, + "end": 1309, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1315, + "end": 1433, + "name": "tag", + "source": 1, + "value": "147" + }, + { "begin": 1315, "end": 1433, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1402, + "end": 1426, + "name": "PUSH [tag]", + "source": 1, + "value": "221" + }, + { "begin": 1420, "end": 1425, "name": "DUP2", "source": 1 }, + { + "begin": 1402, + "end": 1426, + "name": "PUSH [tag]", + "source": 1, + "value": "144" + }, + { + "begin": 1402, + "end": 1426, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1402, + "end": 1426, + "name": "tag", + "source": 1, + "value": "221" + }, + { "begin": 1402, "end": 1426, "name": "JUMPDEST", "source": 1 }, + { "begin": 1397, "end": 1400, "name": "DUP3", "source": 1 }, + { "begin": 1390, "end": 1427, "name": "MSTORE", "source": 1 }, + { "begin": 1315, "end": 1433, "name": "POP", "source": 1 }, + { "begin": 1315, "end": 1433, "name": "POP", "source": 1 }, + { + "begin": 1315, + "end": 1433, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1439, + "end": 1661, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 1439, "end": 1661, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1532, + "end": 1536, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1570, + "end": 1572, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1559, "end": 1568, "name": "DUP3", "source": 1 }, + { "begin": 1555, "end": 1573, "name": "ADD", "source": 1 }, + { "begin": 1547, "end": 1573, "name": "SWAP1", "source": 1 }, + { "begin": 1547, "end": 1573, "name": "POP", "source": 1 }, + { + "begin": 1583, + "end": 1654, + "name": "PUSH [tag]", + "source": 1, + "value": "223" + }, + { + "begin": 1651, + "end": 1652, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1640, "end": 1649, "name": "DUP4", "source": 1 }, + { "begin": 1636, "end": 1653, "name": "ADD", "source": 1 }, + { "begin": 1627, "end": 1633, "name": "DUP5", "source": 1 }, + { + "begin": 1583, + "end": 1654, + "name": "PUSH [tag]", + "source": 1, + "value": "147" + }, + { + "begin": 1583, + "end": 1654, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1583, + "end": 1654, + "name": "tag", + "source": 1, + "value": "223" + }, + { "begin": 1583, "end": 1654, "name": "JUMPDEST", "source": 1 }, + { "begin": 1439, "end": 1661, "name": "SWAP3", "source": 1 }, + { "begin": 1439, "end": 1661, "name": "SWAP2", "source": 1 }, + { "begin": 1439, "end": 1661, "name": "POP", "source": 1 }, + { "begin": 1439, "end": 1661, "name": "POP", "source": 1 }, + { + "begin": 1439, + "end": 1661, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1667, + "end": 1760, + "name": "tag", + "source": 1, + "value": "148" + }, + { "begin": 1667, "end": 1760, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1703, + "end": 1710, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1743, + "end": 1753, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFF" + }, + { "begin": 1736, "end": 1741, "name": "DUP3", "source": 1 }, + { "begin": 1732, "end": 1754, "name": "AND", "source": 1 }, + { "begin": 1721, "end": 1754, "name": "SWAP1", "source": 1 }, + { "begin": 1721, "end": 1754, "name": "POP", "source": 1 }, + { "begin": 1667, "end": 1760, "name": "SWAP2", "source": 1 }, + { "begin": 1667, "end": 1760, "name": "SWAP1", "source": 1 }, + { "begin": 1667, "end": 1760, "name": "POP", "source": 1 }, + { + "begin": 1667, + "end": 1760, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1766, + "end": 1886, + "name": "tag", + "source": 1, + "value": "149" + }, + { "begin": 1766, "end": 1886, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1838, + "end": 1861, + "name": "PUSH [tag]", + "source": 1, + "value": "226" + }, + { "begin": 1855, "end": 1860, "name": "DUP2", "source": 1 }, + { + "begin": 1838, + "end": 1861, + "name": "PUSH [tag]", + "source": 1, + "value": "148" + }, + { + "begin": 1838, + "end": 1861, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1838, + "end": 1861, + "name": "tag", + "source": 1, + "value": "226" + }, + { "begin": 1838, "end": 1861, "name": "JUMPDEST", "source": 1 }, + { "begin": 1831, "end": 1836, "name": "DUP2", "source": 1 }, + { "begin": 1828, "end": 1862, "name": "EQ", "source": 1 }, + { + "begin": 1818, + "end": 1880, + "name": "PUSH [tag]", + "source": 1, + "value": "227" + }, + { "begin": 1818, "end": 1880, "name": "JUMPI", "source": 1 }, + { + "begin": 1876, + "end": 1877, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1873, "end": 1874, "name": "DUP1", "source": 1 }, + { "begin": 1866, "end": 1878, "name": "REVERT", "source": 1 }, + { + "begin": 1818, + "end": 1880, + "name": "tag", + "source": 1, + "value": "227" + }, + { "begin": 1818, "end": 1880, "name": "JUMPDEST", "source": 1 }, + { "begin": 1766, "end": 1886, "name": "POP", "source": 1 }, + { + "begin": 1766, + "end": 1886, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1892, + "end": 2029, + "name": "tag", + "source": 1, + "value": "150" + }, + { "begin": 1892, "end": 2029, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1937, + "end": 1942, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1975, "end": 1981, "name": "DUP2", "source": 1 }, + { + "begin": 1962, + "end": 1982, + "name": "CALLDATALOAD", + "source": 1 + }, + { "begin": 1953, "end": 1982, "name": "SWAP1", "source": 1 }, + { "begin": 1953, "end": 1982, "name": "POP", "source": 1 }, + { + "begin": 1991, + "end": 2023, + "name": "PUSH [tag]", + "source": 1, + "value": "229" + }, + { "begin": 2017, "end": 2022, "name": "DUP2", "source": 1 }, + { + "begin": 1991, + "end": 2023, + "name": "PUSH [tag]", + "source": 1, + "value": "149" + }, + { + "begin": 1991, + "end": 2023, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1991, + "end": 2023, + "name": "tag", + "source": 1, + "value": "229" + }, + { "begin": 1991, "end": 2023, "name": "JUMPDEST", "source": 1 }, + { "begin": 1892, "end": 2029, "name": "SWAP3", "source": 1 }, + { "begin": 1892, "end": 2029, "name": "SWAP2", "source": 1 }, + { "begin": 1892, "end": 2029, "name": "POP", "source": 1 }, + { "begin": 1892, "end": 2029, "name": "POP", "source": 1 }, + { + "begin": 1892, + "end": 2029, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2035, + "end": 2152, + "name": "tag", + "source": 1, + "value": "151" + }, + { "begin": 2035, "end": 2152, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2144, + "end": 2145, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2141, "end": 2142, "name": "DUP1", "source": 1 }, + { "begin": 2134, "end": 2146, "name": "REVERT", "source": 1 }, + { + "begin": 2158, + "end": 2260, + "name": "tag", + "source": 1, + "value": "152" + }, + { "begin": 2158, "end": 2260, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2199, + "end": 2205, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 2250, + "end": 2252, + "name": "PUSH", + "source": 1, + "value": "1F" + }, + { "begin": 2246, "end": 2253, "name": "NOT", "source": 1 }, + { + "begin": 2241, + "end": 2243, + "name": "PUSH", + "source": 1, + "value": "1F" + }, + { "begin": 2234, "end": 2239, "name": "DUP4", "source": 1 }, + { "begin": 2230, "end": 2244, "name": "ADD", "source": 1 }, + { "begin": 2226, "end": 2254, "name": "AND", "source": 1 }, + { "begin": 2216, "end": 2254, "name": "SWAP1", "source": 1 }, + { "begin": 2216, "end": 2254, "name": "POP", "source": 1 }, + { "begin": 2158, "end": 2260, "name": "SWAP2", "source": 1 }, + { "begin": 2158, "end": 2260, "name": "SWAP1", "source": 1 }, + { "begin": 2158, "end": 2260, "name": "POP", "source": 1 }, + { + "begin": 2158, + "end": 2260, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2266, + "end": 2446, + "name": "tag", + "source": 1, + "value": "153" + }, + { "begin": 2266, "end": 2446, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2314, + "end": 2391, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 2311, + "end": 2312, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2304, "end": 2392, "name": "MSTORE", "source": 1 }, + { + "begin": 2411, + "end": 2415, + "name": "PUSH", + "source": 1, + "value": "41" + }, + { + "begin": 2408, + "end": 2409, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 2401, "end": 2416, "name": "MSTORE", "source": 1 }, + { + "begin": 2435, + "end": 2439, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 2432, + "end": 2433, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2425, "end": 2440, "name": "REVERT", "source": 1 }, + { + "begin": 2452, + "end": 2733, + "name": "tag", + "source": 1, + "value": "154" + }, + { "begin": 2452, "end": 2733, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2535, + "end": 2562, + "name": "PUSH [tag]", + "source": 1, + "value": "234" + }, + { "begin": 2557, "end": 2561, "name": "DUP3", "source": 1 }, + { + "begin": 2535, + "end": 2562, + "name": "PUSH [tag]", + "source": 1, + "value": "152" + }, + { + "begin": 2535, + "end": 2562, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2535, + "end": 2562, + "name": "tag", + "source": 1, + "value": "234" + }, + { "begin": 2535, "end": 2562, "name": "JUMPDEST", "source": 1 }, + { "begin": 2527, "end": 2533, "name": "DUP2", "source": 1 }, + { "begin": 2523, "end": 2563, "name": "ADD", "source": 1 }, + { "begin": 2665, "end": 2671, "name": "DUP2", "source": 1 }, + { "begin": 2653, "end": 2663, "name": "DUP2", "source": 1 }, + { "begin": 2650, "end": 2672, "name": "LT", "source": 1 }, + { + "begin": 2629, + "end": 2647, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 2617, "end": 2627, "name": "DUP3", "source": 1 }, + { "begin": 2614, "end": 2648, "name": "GT", "source": 1 }, + { "begin": 2611, "end": 2673, "name": "OR", "source": 1 }, + { "begin": 2608, "end": 2696, "name": "ISZERO", "source": 1 }, + { + "begin": 2608, + "end": 2696, + "name": "PUSH [tag]", + "source": 1, + "value": "235" + }, + { "begin": 2608, "end": 2696, "name": "JUMPI", "source": 1 }, + { + "begin": 2676, + "end": 2694, + "name": "PUSH [tag]", + "source": 1, + "value": "236" + }, + { + "begin": 2676, + "end": 2694, + "name": "PUSH [tag]", + "source": 1, + "value": "153" + }, + { + "begin": 2676, + "end": 2694, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2676, + "end": 2694, + "name": "tag", + "source": 1, + "value": "236" + }, + { "begin": 2676, "end": 2694, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2608, + "end": 2696, + "name": "tag", + "source": 1, + "value": "235" + }, + { "begin": 2608, "end": 2696, "name": "JUMPDEST", "source": 1 }, + { "begin": 2716, "end": 2726, "name": "DUP1", "source": 1 }, + { + "begin": 2712, + "end": 2714, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { "begin": 2705, "end": 2727, "name": "MSTORE", "source": 1 }, + { "begin": 2495, "end": 2733, "name": "POP", "source": 1 }, + { "begin": 2452, "end": 2733, "name": "POP", "source": 1 }, + { "begin": 2452, "end": 2733, "name": "POP", "source": 1 }, + { + "begin": 2452, + "end": 2733, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2739, + "end": 2868, + "name": "tag", + "source": 1, + "value": "155" + }, + { "begin": 2739, "end": 2868, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2773, + "end": 2779, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 2800, + "end": 2820, + "name": "PUSH [tag]", + "source": 1, + "value": "238" + }, + { + "begin": 2800, + "end": 2820, + "name": "PUSH [tag]", + "source": 1, + "value": "141" + }, + { + "begin": 2800, + "end": 2820, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2800, + "end": 2820, + "name": "tag", + "source": 1, + "value": "238" + }, + { "begin": 2800, "end": 2820, "name": "JUMPDEST", "source": 1 }, + { "begin": 2790, "end": 2820, "name": "SWAP1", "source": 1 }, + { "begin": 2790, "end": 2820, "name": "POP", "source": 1 }, + { + "begin": 2829, + "end": 2862, + "name": "PUSH [tag]", + "source": 1, + "value": "239" + }, + { "begin": 2857, "end": 2861, "name": "DUP3", "source": 1 }, + { "begin": 2849, "end": 2855, "name": "DUP3", "source": 1 }, + { + "begin": 2829, + "end": 2862, + "name": "PUSH [tag]", + "source": 1, + "value": "154" + }, + { + "begin": 2829, + "end": 2862, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2829, + "end": 2862, + "name": "tag", + "source": 1, + "value": "239" + }, + { "begin": 2829, "end": 2862, "name": "JUMPDEST", "source": 1 }, + { "begin": 2739, "end": 2868, "name": "SWAP2", "source": 1 }, + { "begin": 2739, "end": 2868, "name": "SWAP1", "source": 1 }, + { "begin": 2739, "end": 2868, "name": "POP", "source": 1 }, + { + "begin": 2739, + "end": 2868, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2874, + "end": 3123, + "name": "tag", + "source": 1, + "value": "156" + }, + { "begin": 2874, "end": 3123, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2949, + "end": 2953, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 3039, + "end": 3057, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 3031, "end": 3037, "name": "DUP3", "source": 1 }, + { "begin": 3028, "end": 3058, "name": "GT", "source": 1 }, + { "begin": 3025, "end": 3081, "name": "ISZERO", "source": 1 }, + { + "begin": 3025, + "end": 3081, + "name": "PUSH [tag]", + "source": 1, + "value": "241" + }, + { "begin": 3025, "end": 3081, "name": "JUMPI", "source": 1 }, + { + "begin": 3061, + "end": 3079, + "name": "PUSH [tag]", + "source": 1, + "value": "242" + }, + { + "begin": 3061, + "end": 3079, + "name": "PUSH [tag]", + "source": 1, + "value": "153" + }, + { + "begin": 3061, + "end": 3079, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 3061, + "end": 3079, + "name": "tag", + "source": 1, + "value": "242" + }, + { "begin": 3061, "end": 3079, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3025, + "end": 3081, + "name": "tag", + "source": 1, + "value": "241" + }, + { "begin": 3025, "end": 3081, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3111, + "end": 3115, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 3103, "end": 3109, "name": "DUP3", "source": 1 }, + { "begin": 3099, "end": 3116, "name": "MUL", "source": 1 }, + { "begin": 3091, "end": 3116, "name": "SWAP1", "source": 1 }, + { "begin": 3091, "end": 3116, "name": "POP", "source": 1 }, + { "begin": 2874, "end": 3123, "name": "SWAP2", "source": 1 }, + { "begin": 2874, "end": 3123, "name": "SWAP1", "source": 1 }, + { "begin": 2874, "end": 3123, "name": "POP", "source": 1 }, + { + "begin": 2874, + "end": 3123, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 3129, + "end": 3246, + "name": "tag", + "source": 1, + "value": "157" + }, + { "begin": 3129, "end": 3246, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3238, + "end": 3239, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 3235, "end": 3236, "name": "DUP1", "source": 1 }, + { "begin": 3228, "end": 3240, "name": "REVERT", "source": 1 }, + { + "begin": 3252, + "end": 3329, + "name": "tag", + "source": 1, + "value": "158" + }, + { "begin": 3252, "end": 3329, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3289, + "end": 3296, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 3318, "end": 3323, "name": "DUP2", "source": 1 }, + { "begin": 3307, "end": 3323, "name": "SWAP1", "source": 1 }, + { "begin": 3307, "end": 3323, "name": "POP", "source": 1 }, + { "begin": 3252, "end": 3329, "name": "SWAP2", "source": 1 }, + { "begin": 3252, "end": 3329, "name": "SWAP1", "source": 1 }, + { "begin": 3252, "end": 3329, "name": "POP", "source": 1 }, + { + "begin": 3252, + "end": 3329, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 3335, + "end": 3457, + "name": "tag", + "source": 1, + "value": "159" + }, + { "begin": 3335, "end": 3457, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3408, + "end": 3432, + "name": "PUSH [tag]", + "source": 1, + "value": "246" + }, + { "begin": 3426, "end": 3431, "name": "DUP2", "source": 1 }, + { + "begin": 3408, + "end": 3432, + "name": "PUSH [tag]", + "source": 1, + "value": "158" + }, + { + "begin": 3408, + "end": 3432, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 3408, + "end": 3432, + "name": "tag", + "source": 1, + "value": "246" + }, + { "begin": 3408, "end": 3432, "name": "JUMPDEST", "source": 1 }, + { "begin": 3401, "end": 3406, "name": "DUP2", "source": 1 }, + { "begin": 3398, "end": 3433, "name": "EQ", "source": 1 }, + { + "begin": 3388, + "end": 3451, + "name": "PUSH [tag]", + "source": 1, + "value": "247" + }, + { "begin": 3388, "end": 3451, "name": "JUMPI", "source": 1 }, + { + "begin": 3447, + "end": 3448, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 3444, "end": 3445, "name": "DUP1", "source": 1 }, + { "begin": 3437, "end": 3449, "name": "REVERT", "source": 1 }, + { + "begin": 3388, + "end": 3451, + "name": "tag", + "source": 1, + "value": "247" + }, + { "begin": 3388, "end": 3451, "name": "JUMPDEST", "source": 1 }, + { "begin": 3335, "end": 3457, "name": "POP", "source": 1 }, + { + "begin": 3335, + "end": 3457, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 3463, + "end": 3602, + "name": "tag", + "source": 1, + "value": "160" + }, + { "begin": 3463, "end": 3602, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3509, + "end": 3514, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 3547, "end": 3553, "name": "DUP2", "source": 1 }, + { + "begin": 3534, + "end": 3554, + "name": "CALLDATALOAD", + "source": 1 + }, + { "begin": 3525, "end": 3554, "name": "SWAP1", "source": 1 }, + { "begin": 3525, "end": 3554, "name": "POP", "source": 1 }, + { + "begin": 3563, + "end": 3596, + "name": "PUSH [tag]", + "source": 1, + "value": "249" + }, + { "begin": 3590, "end": 3595, "name": "DUP2", "source": 1 }, + { + "begin": 3563, + "end": 3596, + "name": "PUSH [tag]", + "source": 1, + "value": "159" + }, + { + "begin": 3563, + "end": 3596, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 3563, + "end": 3596, + "name": "tag", + "source": 1, + "value": "249" + }, + { "begin": 3563, "end": 3596, "name": "JUMPDEST", "source": 1 }, + { "begin": 3463, "end": 3602, "name": "SWAP3", "source": 1 }, + { "begin": 3463, "end": 3602, "name": "SWAP2", "source": 1 }, + { "begin": 3463, "end": 3602, "name": "POP", "source": 1 }, + { "begin": 3463, "end": 3602, "name": "POP", "source": 1 }, + { + "begin": 3463, + "end": 3602, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 3626, + "end": 4269, + "name": "tag", + "source": 1, + "value": "161" + }, + { "begin": 3626, "end": 4269, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3720, + "end": 3725, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 3745, + "end": 3824, + "name": "PUSH [tag]", + "source": 1, + "value": "251" + }, + { + "begin": 3761, + "end": 3823, + "name": "PUSH [tag]", + "source": 1, + "value": "252" + }, + { "begin": 3816, "end": 3822, "name": "DUP5", "source": 1 }, + { + "begin": 3761, + "end": 3823, + "name": "PUSH [tag]", + "source": 1, + "value": "156" + }, + { + "begin": 3761, + "end": 3823, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 3761, + "end": 3823, + "name": "tag", + "source": 1, + "value": "252" + }, + { "begin": 3761, "end": 3823, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3745, + "end": 3824, + "name": "PUSH [tag]", + "source": 1, + "value": "155" + }, + { + "begin": 3745, + "end": 3824, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 3745, + "end": 3824, + "name": "tag", + "source": 1, + "value": "251" + }, + { "begin": 3745, "end": 3824, "name": "JUMPDEST", "source": 1 }, + { "begin": 3736, "end": 3824, "name": "SWAP1", "source": 1 }, + { "begin": 3736, "end": 3824, "name": "POP", "source": 1 }, + { "begin": 3844, "end": 3849, "name": "DUP1", "source": 1 }, + { + "begin": 3897, + "end": 3901, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 3889, "end": 3895, "name": "DUP5", "source": 1 }, + { "begin": 3885, "end": 3902, "name": "MUL", "source": 1 }, + { "begin": 3877, "end": 3883, "name": "DUP4", "source": 1 }, + { "begin": 3873, "end": 3903, "name": "ADD", "source": 1 }, + { "begin": 3926, "end": 3929, "name": "DUP6", "source": 1 }, + { "begin": 3918, "end": 3924, "name": "DUP2", "source": 1 }, + { "begin": 3915, "end": 3930, "name": "GT", "source": 1 }, + { "begin": 3912, "end": 4034, "name": "ISZERO", "source": 1 }, + { + "begin": 3912, + "end": 4034, + "name": "PUSH [tag]", + "source": 1, + "value": "253" + }, + { "begin": 3912, "end": 4034, "name": "JUMPI", "source": 1 }, + { + "begin": 3945, + "end": 4024, + "name": "PUSH [tag]", + "source": 1, + "value": "254" + }, + { + "begin": 3945, + "end": 4024, + "name": "PUSH [tag]", + "source": 1, + "value": "157" + }, + { + "begin": 3945, + "end": 4024, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 3945, + "end": 4024, + "name": "tag", + "source": 1, + "value": "254" + }, + { "begin": 3945, "end": 4024, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3912, + "end": 4034, + "name": "tag", + "source": 1, + "value": "253" + }, + { "begin": 3912, "end": 4034, "name": "JUMPDEST", "source": 1 }, + { "begin": 4060, "end": 4066, "name": "DUP4", "source": 1 }, + { + "begin": 4043, + "end": 4263, + "name": "tag", + "source": 1, + "value": "255" + }, + { "begin": 4043, "end": 4263, "name": "JUMPDEST", "source": 1 }, + { "begin": 4077, "end": 4083, "name": "DUP2", "source": 1 }, + { "begin": 4072, "end": 4075, "name": "DUP2", "source": 1 }, + { "begin": 4069, "end": 4084, "name": "LT", "source": 1 }, + { "begin": 4043, "end": 4263, "name": "ISZERO", "source": 1 }, + { + "begin": 4043, + "end": 4263, + "name": "PUSH [tag]", + "source": 1, + "value": "257" + }, + { "begin": 4043, "end": 4263, "name": "JUMPI", "source": 1 }, + { "begin": 4152, "end": 4155, "name": "DUP1", "source": 1 }, + { + "begin": 4181, + "end": 4218, + "name": "PUSH [tag]", + "source": 1, + "value": "258" + }, + { "begin": 4214, "end": 4217, "name": "DUP9", "source": 1 }, + { "begin": 4202, "end": 4212, "name": "DUP3", "source": 1 }, + { + "begin": 4181, + "end": 4218, + "name": "PUSH [tag]", + "source": 1, + "value": "160" + }, + { + "begin": 4181, + "end": 4218, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 4181, + "end": 4218, + "name": "tag", + "source": 1, + "value": "258" + }, + { "begin": 4181, "end": 4218, "name": "JUMPDEST", "source": 1 }, + { "begin": 4176, "end": 4179, "name": "DUP5", "source": 1 }, + { "begin": 4169, "end": 4219, "name": "MSTORE", "source": 1 }, + { + "begin": 4248, + "end": 4252, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 4243, "end": 4246, "name": "DUP5", "source": 1 }, + { "begin": 4239, "end": 4253, "name": "ADD", "source": 1 }, + { "begin": 4232, "end": 4253, "name": "SWAP4", "source": 1 }, + { "begin": 4232, "end": 4253, "name": "POP", "source": 1 }, + { "begin": 4119, "end": 4263, "name": "POP", "source": 1 }, + { + "begin": 4103, + "end": 4107, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 4098, "end": 4101, "name": "DUP2", "source": 1 }, + { "begin": 4094, "end": 4108, "name": "ADD", "source": 1 }, + { "begin": 4087, "end": 4108, "name": "SWAP1", "source": 1 }, + { "begin": 4087, "end": 4108, "name": "POP", "source": 1 }, + { + "begin": 4043, + "end": 4263, + "name": "PUSH [tag]", + "source": 1, + "value": "255" + }, + { "begin": 4043, "end": 4263, "name": "JUMP", "source": 1 }, + { + "begin": 4043, + "end": 4263, + "name": "tag", + "source": 1, + "value": "257" + }, + { "begin": 4043, "end": 4263, "name": "JUMPDEST", "source": 1 }, + { "begin": 4047, "end": 4068, "name": "POP", "source": 1 }, + { "begin": 3726, "end": 4269, "name": "POP", "source": 1 }, + { "begin": 3726, "end": 4269, "name": "POP", "source": 1 }, + { "begin": 3626, "end": 4269, "name": "SWAP4", "source": 1 }, + { "begin": 3626, "end": 4269, "name": "SWAP3", "source": 1 }, + { "begin": 3626, "end": 4269, "name": "POP", "source": 1 }, + { "begin": 3626, "end": 4269, "name": "POP", "source": 1 }, + { "begin": 3626, "end": 4269, "name": "POP", "source": 1 }, + { + "begin": 3626, + "end": 4269, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 4293, + "end": 4632, + "name": "tag", + "source": 1, + "value": "162" + }, + { "begin": 4293, "end": 4632, "name": "JUMPDEST", "source": 1 }, + { + "begin": 4362, + "end": 4367, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 4411, "end": 4414, "name": "DUP3", "source": 1 }, + { + "begin": 4404, + "end": 4408, + "name": "PUSH", + "source": 1, + "value": "1F" + }, + { "begin": 4396, "end": 4402, "name": "DUP4", "source": 1 }, + { "begin": 4392, "end": 4409, "name": "ADD", "source": 1 }, + { "begin": 4388, "end": 4415, "name": "SLT", "source": 1 }, + { + "begin": 4378, + "end": 4500, + "name": "PUSH [tag]", + "source": 1, + "value": "260" + }, + { "begin": 4378, "end": 4500, "name": "JUMPI", "source": 1 }, + { + "begin": 4419, + "end": 4498, + "name": "PUSH [tag]", + "source": 1, + "value": "261" + }, + { + "begin": 4419, + "end": 4498, + "name": "PUSH [tag]", + "source": 1, + "value": "151" + }, + { + "begin": 4419, + "end": 4498, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 4419, + "end": 4498, + "name": "tag", + "source": 1, + "value": "261" + }, + { "begin": 4419, "end": 4498, "name": "JUMPDEST", "source": 1 }, + { + "begin": 4378, + "end": 4500, + "name": "tag", + "source": 1, + "value": "260" + }, + { "begin": 4378, "end": 4500, "name": "JUMPDEST", "source": 1 }, + { + "begin": 4523, + "end": 4527, + "name": "PUSH", + "source": 1, + "value": "2" + }, + { + "begin": 4545, + "end": 4626, + "name": "PUSH [tag]", + "source": 1, + "value": "262" + }, + { "begin": 4622, "end": 4625, "name": "DUP5", "source": 1 }, + { "begin": 4614, "end": 4620, "name": "DUP3", "source": 1 }, + { "begin": 4606, "end": 4612, "name": "DUP6", "source": 1 }, + { + "begin": 4545, + "end": 4626, + "name": "PUSH [tag]", + "source": 1, + "value": "161" + }, + { + "begin": 4545, + "end": 4626, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 4545, + "end": 4626, + "name": "tag", + "source": 1, + "value": "262" + }, + { "begin": 4545, "end": 4626, "name": "JUMPDEST", "source": 1 }, + { "begin": 4536, "end": 4626, "name": "SWAP2", "source": 1 }, + { "begin": 4536, "end": 4626, "name": "POP", "source": 1 }, + { "begin": 4368, "end": 4632, "name": "POP", "source": 1 }, + { "begin": 4293, "end": 4632, "name": "SWAP3", "source": 1 }, + { "begin": 4293, "end": 4632, "name": "SWAP2", "source": 1 }, + { "begin": 4293, "end": 4632, "name": "POP", "source": 1 }, + { "begin": 4293, "end": 4632, "name": "POP", "source": 1 }, + { + "begin": 4293, + "end": 4632, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 4638, + "end": 4887, + "name": "tag", + "source": 1, + "value": "163" + }, + { "begin": 4638, "end": 4887, "name": "JUMPDEST", "source": 1 }, + { + "begin": 4713, + "end": 4717, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 4803, + "end": 4821, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 4795, "end": 4801, "name": "DUP3", "source": 1 }, + { "begin": 4792, "end": 4822, "name": "GT", "source": 1 }, + { "begin": 4789, "end": 4845, "name": "ISZERO", "source": 1 }, + { + "begin": 4789, + "end": 4845, + "name": "PUSH [tag]", + "source": 1, + "value": "264" + }, + { "begin": 4789, "end": 4845, "name": "JUMPI", "source": 1 }, + { + "begin": 4825, + "end": 4843, + "name": "PUSH [tag]", + "source": 1, + "value": "265" + }, + { + "begin": 4825, + "end": 4843, + "name": "PUSH [tag]", + "source": 1, + "value": "153" + }, + { + "begin": 4825, + "end": 4843, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 4825, + "end": 4843, + "name": "tag", + "source": 1, + "value": "265" + }, + { "begin": 4825, "end": 4843, "name": "JUMPDEST", "source": 1 }, + { + "begin": 4789, + "end": 4845, + "name": "tag", + "source": 1, + "value": "264" + }, + { "begin": 4789, "end": 4845, "name": "JUMPDEST", "source": 1 }, + { + "begin": 4875, + "end": 4879, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 4867, "end": 4873, "name": "DUP3", "source": 1 }, + { "begin": 4863, "end": 4880, "name": "MUL", "source": 1 }, + { "begin": 4855, "end": 4880, "name": "SWAP1", "source": 1 }, + { "begin": 4855, "end": 4880, "name": "POP", "source": 1 }, + { "begin": 4638, "end": 4887, "name": "SWAP2", "source": 1 }, + { "begin": 4638, "end": 4887, "name": "SWAP1", "source": 1 }, + { "begin": 4638, "end": 4887, "name": "POP", "source": 1 }, + { + "begin": 4638, + "end": 4887, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 4911, + "end": 5554, + "name": "tag", + "source": 1, + "value": "164" + }, + { "begin": 4911, "end": 5554, "name": "JUMPDEST", "source": 1 }, + { + "begin": 5005, + "end": 5010, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 5030, + "end": 5109, + "name": "PUSH [tag]", + "source": 1, + "value": "267" + }, + { + "begin": 5046, + "end": 5108, + "name": "PUSH [tag]", + "source": 1, + "value": "268" + }, + { "begin": 5101, "end": 5107, "name": "DUP5", "source": 1 }, + { + "begin": 5046, + "end": 5108, + "name": "PUSH [tag]", + "source": 1, + "value": "163" + }, + { + "begin": 5046, + "end": 5108, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 5046, + "end": 5108, + "name": "tag", + "source": 1, + "value": "268" + }, + { "begin": 5046, "end": 5108, "name": "JUMPDEST", "source": 1 }, + { + "begin": 5030, + "end": 5109, + "name": "PUSH [tag]", + "source": 1, + "value": "155" + }, + { + "begin": 5030, + "end": 5109, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 5030, + "end": 5109, + "name": "tag", + "source": 1, + "value": "267" + }, + { "begin": 5030, "end": 5109, "name": "JUMPDEST", "source": 1 }, + { "begin": 5021, "end": 5109, "name": "SWAP1", "source": 1 }, + { "begin": 5021, "end": 5109, "name": "POP", "source": 1 }, + { "begin": 5129, "end": 5134, "name": "DUP1", "source": 1 }, + { + "begin": 5182, + "end": 5186, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 5174, "end": 5180, "name": "DUP5", "source": 1 }, + { "begin": 5170, "end": 5187, "name": "MUL", "source": 1 }, + { "begin": 5162, "end": 5168, "name": "DUP4", "source": 1 }, + { "begin": 5158, "end": 5188, "name": "ADD", "source": 1 }, + { "begin": 5211, "end": 5214, "name": "DUP6", "source": 1 }, + { "begin": 5203, "end": 5209, "name": "DUP2", "source": 1 }, + { "begin": 5200, "end": 5215, "name": "GT", "source": 1 }, + { "begin": 5197, "end": 5319, "name": "ISZERO", "source": 1 }, + { + "begin": 5197, + "end": 5319, + "name": "PUSH [tag]", + "source": 1, + "value": "269" + }, + { "begin": 5197, "end": 5319, "name": "JUMPI", "source": 1 }, + { + "begin": 5230, + "end": 5309, + "name": "PUSH [tag]", + "source": 1, + "value": "270" + }, + { + "begin": 5230, + "end": 5309, + "name": "PUSH [tag]", + "source": 1, + "value": "157" + }, + { + "begin": 5230, + "end": 5309, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 5230, + "end": 5309, + "name": "tag", + "source": 1, + "value": "270" + }, + { "begin": 5230, "end": 5309, "name": "JUMPDEST", "source": 1 }, + { + "begin": 5197, + "end": 5319, + "name": "tag", + "source": 1, + "value": "269" + }, + { "begin": 5197, "end": 5319, "name": "JUMPDEST", "source": 1 }, + { "begin": 5345, "end": 5351, "name": "DUP4", "source": 1 }, + { + "begin": 5328, + "end": 5548, + "name": "tag", + "source": 1, + "value": "271" + }, + { "begin": 5328, "end": 5548, "name": "JUMPDEST", "source": 1 }, + { "begin": 5362, "end": 5368, "name": "DUP2", "source": 1 }, + { "begin": 5357, "end": 5360, "name": "DUP2", "source": 1 }, + { "begin": 5354, "end": 5369, "name": "LT", "source": 1 }, + { "begin": 5328, "end": 5548, "name": "ISZERO", "source": 1 }, + { + "begin": 5328, + "end": 5548, + "name": "PUSH [tag]", + "source": 1, + "value": "273" + }, + { "begin": 5328, "end": 5548, "name": "JUMPI", "source": 1 }, + { "begin": 5437, "end": 5440, "name": "DUP1", "source": 1 }, + { + "begin": 5466, + "end": 5503, + "name": "PUSH [tag]", + "source": 1, + "value": "274" + }, + { "begin": 5499, "end": 5502, "name": "DUP9", "source": 1 }, + { "begin": 5487, "end": 5497, "name": "DUP3", "source": 1 }, + { + "begin": 5466, + "end": 5503, + "name": "PUSH [tag]", + "source": 1, + "value": "160" + }, + { + "begin": 5466, + "end": 5503, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 5466, + "end": 5503, + "name": "tag", + "source": 1, + "value": "274" + }, + { "begin": 5466, "end": 5503, "name": "JUMPDEST", "source": 1 }, + { "begin": 5461, "end": 5464, "name": "DUP5", "source": 1 }, + { "begin": 5454, "end": 5504, "name": "MSTORE", "source": 1 }, + { + "begin": 5533, + "end": 5537, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 5528, "end": 5531, "name": "DUP5", "source": 1 }, + { "begin": 5524, "end": 5538, "name": "ADD", "source": 1 }, + { "begin": 5517, "end": 5538, "name": "SWAP4", "source": 1 }, + { "begin": 5517, "end": 5538, "name": "POP", "source": 1 }, + { "begin": 5404, "end": 5548, "name": "POP", "source": 1 }, + { + "begin": 5388, + "end": 5392, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 5383, "end": 5386, "name": "DUP2", "source": 1 }, + { "begin": 5379, "end": 5393, "name": "ADD", "source": 1 }, + { "begin": 5372, "end": 5393, "name": "SWAP1", "source": 1 }, + { "begin": 5372, "end": 5393, "name": "POP", "source": 1 }, + { + "begin": 5328, + "end": 5548, + "name": "PUSH [tag]", + "source": 1, + "value": "271" + }, + { "begin": 5328, "end": 5548, "name": "JUMP", "source": 1 }, + { + "begin": 5328, + "end": 5548, + "name": "tag", + "source": 1, + "value": "273" + }, + { "begin": 5328, "end": 5548, "name": "JUMPDEST", "source": 1 }, + { "begin": 5332, "end": 5353, "name": "POP", "source": 1 }, + { "begin": 5011, "end": 5554, "name": "POP", "source": 1 }, + { "begin": 5011, "end": 5554, "name": "POP", "source": 1 }, + { "begin": 4911, "end": 5554, "name": "SWAP4", "source": 1 }, + { "begin": 4911, "end": 5554, "name": "SWAP3", "source": 1 }, + { "begin": 4911, "end": 5554, "name": "POP", "source": 1 }, + { "begin": 4911, "end": 5554, "name": "POP", "source": 1 }, + { "begin": 4911, "end": 5554, "name": "POP", "source": 1 }, + { + "begin": 4911, + "end": 5554, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 5578, + "end": 5917, + "name": "tag", + "source": 1, + "value": "165" + }, + { "begin": 5578, "end": 5917, "name": "JUMPDEST", "source": 1 }, + { + "begin": 5647, + "end": 5652, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 5696, "end": 5699, "name": "DUP3", "source": 1 }, + { + "begin": 5689, + "end": 5693, + "name": "PUSH", + "source": 1, + "value": "1F" + }, + { "begin": 5681, "end": 5687, "name": "DUP4", "source": 1 }, + { "begin": 5677, "end": 5694, "name": "ADD", "source": 1 }, + { "begin": 5673, "end": 5700, "name": "SLT", "source": 1 }, + { + "begin": 5663, + "end": 5785, + "name": "PUSH [tag]", + "source": 1, + "value": "276" + }, + { "begin": 5663, "end": 5785, "name": "JUMPI", "source": 1 }, + { + "begin": 5704, + "end": 5783, + "name": "PUSH [tag]", + "source": 1, + "value": "277" + }, + { + "begin": 5704, + "end": 5783, + "name": "PUSH [tag]", + "source": 1, + "value": "151" + }, + { + "begin": 5704, + "end": 5783, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 5704, + "end": 5783, + "name": "tag", + "source": 1, + "value": "277" + }, + { "begin": 5704, "end": 5783, "name": "JUMPDEST", "source": 1 }, + { + "begin": 5663, + "end": 5785, + "name": "tag", + "source": 1, + "value": "276" + }, + { "begin": 5663, "end": 5785, "name": "JUMPDEST", "source": 1 }, + { + "begin": 5808, + "end": 5812, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { + "begin": 5830, + "end": 5911, + "name": "PUSH [tag]", + "source": 1, + "value": "278" + }, + { "begin": 5907, "end": 5910, "name": "DUP5", "source": 1 }, + { "begin": 5899, "end": 5905, "name": "DUP3", "source": 1 }, + { "begin": 5891, "end": 5897, "name": "DUP6", "source": 1 }, + { + "begin": 5830, + "end": 5911, + "name": "PUSH [tag]", + "source": 1, + "value": "164" + }, + { + "begin": 5830, + "end": 5911, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 5830, + "end": 5911, + "name": "tag", + "source": 1, + "value": "278" + }, + { "begin": 5830, "end": 5911, "name": "JUMPDEST", "source": 1 }, + { "begin": 5821, "end": 5911, "name": "SWAP2", "source": 1 }, + { "begin": 5821, "end": 5911, "name": "POP", "source": 1 }, + { "begin": 5653, "end": 5917, "name": "POP", "source": 1 }, + { "begin": 5578, "end": 5917, "name": "SWAP3", "source": 1 }, + { "begin": 5578, "end": 5917, "name": "SWAP2", "source": 1 }, + { "begin": 5578, "end": 5917, "name": "POP", "source": 1 }, + { "begin": 5578, "end": 5917, "name": "POP", "source": 1 }, + { + "begin": 5578, + "end": 5917, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 5923, + "end": 6171, + "name": "tag", + "source": 1, + "value": "166" + }, + { "begin": 5923, "end": 6171, "name": "JUMPDEST", "source": 1 }, + { + "begin": 5997, + "end": 6001, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 6087, + "end": 6105, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 6079, "end": 6085, "name": "DUP3", "source": 1 }, + { "begin": 6076, "end": 6106, "name": "GT", "source": 1 }, + { "begin": 6073, "end": 6129, "name": "ISZERO", "source": 1 }, + { + "begin": 6073, + "end": 6129, + "name": "PUSH [tag]", + "source": 1, + "value": "280" + }, + { "begin": 6073, "end": 6129, "name": "JUMPI", "source": 1 }, + { + "begin": 6109, + "end": 6127, + "name": "PUSH [tag]", + "source": 1, + "value": "281" + }, + { + "begin": 6109, + "end": 6127, + "name": "PUSH [tag]", + "source": 1, + "value": "153" + }, + { + "begin": 6109, + "end": 6127, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 6109, + "end": 6127, + "name": "tag", + "source": 1, + "value": "281" + }, + { "begin": 6109, "end": 6127, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6073, + "end": 6129, + "name": "tag", + "source": 1, + "value": "280" + }, + { "begin": 6073, "end": 6129, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6159, + "end": 6163, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 6151, "end": 6157, "name": "DUP3", "source": 1 }, + { "begin": 6147, "end": 6164, "name": "MUL", "source": 1 }, + { "begin": 6139, "end": 6164, "name": "SWAP1", "source": 1 }, + { "begin": 6139, "end": 6164, "name": "POP", "source": 1 }, + { "begin": 5923, "end": 6171, "name": "SWAP2", "source": 1 }, + { "begin": 5923, "end": 6171, "name": "SWAP1", "source": 1 }, + { "begin": 5923, "end": 6171, "name": "POP", "source": 1 }, + { + "begin": 5923, + "end": 6171, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 6177, + "end": 6326, + "name": "tag", + "source": 1, + "value": "167" + }, + { "begin": 6177, "end": 6326, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6213, + "end": 6220, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 6253, + "end": 6319, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000" + }, + { "begin": 6246, "end": 6251, "name": "DUP3", "source": 1 }, + { "begin": 6242, "end": 6320, "name": "AND", "source": 1 }, + { "begin": 6231, "end": 6320, "name": "SWAP1", "source": 1 }, + { "begin": 6231, "end": 6320, "name": "POP", "source": 1 }, + { "begin": 6177, "end": 6326, "name": "SWAP2", "source": 1 }, + { "begin": 6177, "end": 6326, "name": "SWAP1", "source": 1 }, + { "begin": 6177, "end": 6326, "name": "POP", "source": 1 }, + { + "begin": 6177, + "end": 6326, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 6332, + "end": 6452, + "name": "tag", + "source": 1, + "value": "168" + }, + { "begin": 6332, "end": 6452, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6404, + "end": 6427, + "name": "PUSH [tag]", + "source": 1, + "value": "284" + }, + { "begin": 6421, "end": 6426, "name": "DUP2", "source": 1 }, + { + "begin": 6404, + "end": 6427, + "name": "PUSH [tag]", + "source": 1, + "value": "167" + }, + { + "begin": 6404, + "end": 6427, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 6404, + "end": 6427, + "name": "tag", + "source": 1, + "value": "284" + }, + { "begin": 6404, "end": 6427, "name": "JUMPDEST", "source": 1 }, + { "begin": 6397, "end": 6402, "name": "DUP2", "source": 1 }, + { "begin": 6394, "end": 6428, "name": "EQ", "source": 1 }, + { + "begin": 6384, + "end": 6446, + "name": "PUSH [tag]", + "source": 1, + "value": "285" + }, + { "begin": 6384, "end": 6446, "name": "JUMPI", "source": 1 }, + { + "begin": 6442, + "end": 6443, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 6439, "end": 6440, "name": "DUP1", "source": 1 }, + { "begin": 6432, "end": 6444, "name": "REVERT", "source": 1 }, + { + "begin": 6384, + "end": 6446, + "name": "tag", + "source": 1, + "value": "285" + }, + { "begin": 6384, "end": 6446, "name": "JUMPDEST", "source": 1 }, + { "begin": 6332, "end": 6452, "name": "POP", "source": 1 }, + { + "begin": 6332, + "end": 6452, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 6458, + "end": 6595, + "name": "tag", + "source": 1, + "value": "169" + }, + { "begin": 6458, "end": 6595, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6503, + "end": 6508, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 6541, "end": 6547, "name": "DUP2", "source": 1 }, + { + "begin": 6528, + "end": 6548, + "name": "CALLDATALOAD", + "source": 1 + }, + { "begin": 6519, "end": 6548, "name": "SWAP1", "source": 1 }, + { "begin": 6519, "end": 6548, "name": "POP", "source": 1 }, + { + "begin": 6557, + "end": 6589, + "name": "PUSH [tag]", + "source": 1, + "value": "287" + }, + { "begin": 6583, "end": 6588, "name": "DUP2", "source": 1 }, + { + "begin": 6557, + "end": 6589, + "name": "PUSH [tag]", + "source": 1, + "value": "168" + }, + { + "begin": 6557, + "end": 6589, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 6557, + "end": 6589, + "name": "tag", + "source": 1, + "value": "287" + }, + { "begin": 6557, "end": 6589, "name": "JUMPDEST", "source": 1 }, + { "begin": 6458, "end": 6595, "name": "SWAP3", "source": 1 }, + { "begin": 6458, "end": 6595, "name": "SWAP2", "source": 1 }, + { "begin": 6458, "end": 6595, "name": "POP", "source": 1 }, + { "begin": 6458, "end": 6595, "name": "POP", "source": 1 }, + { + "begin": 6458, + "end": 6595, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 6618, + "end": 7258, + "name": "tag", + "source": 1, + "value": "170" + }, + { "begin": 6618, "end": 7258, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6711, + "end": 6716, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 6736, + "end": 6814, + "name": "PUSH [tag]", + "source": 1, + "value": "289" + }, + { + "begin": 6752, + "end": 6813, + "name": "PUSH [tag]", + "source": 1, + "value": "290" + }, + { "begin": 6806, "end": 6812, "name": "DUP5", "source": 1 }, + { + "begin": 6752, + "end": 6813, + "name": "PUSH [tag]", + "source": 1, + "value": "166" + }, + { + "begin": 6752, + "end": 6813, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 6752, + "end": 6813, + "name": "tag", + "source": 1, + "value": "290" + }, + { "begin": 6752, "end": 6813, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6736, + "end": 6814, + "name": "PUSH [tag]", + "source": 1, + "value": "155" + }, + { + "begin": 6736, + "end": 6814, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 6736, + "end": 6814, + "name": "tag", + "source": 1, + "value": "289" + }, + { "begin": 6736, "end": 6814, "name": "JUMPDEST", "source": 1 }, + { "begin": 6727, "end": 6814, "name": "SWAP1", "source": 1 }, + { "begin": 6727, "end": 6814, "name": "POP", "source": 1 }, + { "begin": 6834, "end": 6839, "name": "DUP1", "source": 1 }, + { + "begin": 6887, + "end": 6891, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 6879, "end": 6885, "name": "DUP5", "source": 1 }, + { "begin": 6875, "end": 6892, "name": "MUL", "source": 1 }, + { "begin": 6867, "end": 6873, "name": "DUP4", "source": 1 }, + { "begin": 6863, "end": 6893, "name": "ADD", "source": 1 }, + { "begin": 6916, "end": 6919, "name": "DUP6", "source": 1 }, + { "begin": 6908, "end": 6914, "name": "DUP2", "source": 1 }, + { "begin": 6905, "end": 6920, "name": "GT", "source": 1 }, + { "begin": 6902, "end": 7024, "name": "ISZERO", "source": 1 }, + { + "begin": 6902, + "end": 7024, + "name": "PUSH [tag]", + "source": 1, + "value": "291" + }, + { "begin": 6902, "end": 7024, "name": "JUMPI", "source": 1 }, + { + "begin": 6935, + "end": 7014, + "name": "PUSH [tag]", + "source": 1, + "value": "292" + }, + { + "begin": 6935, + "end": 7014, + "name": "PUSH [tag]", + "source": 1, + "value": "157" + }, + { + "begin": 6935, + "end": 7014, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 6935, + "end": 7014, + "name": "tag", + "source": 1, + "value": "292" + }, + { "begin": 6935, "end": 7014, "name": "JUMPDEST", "source": 1 }, + { + "begin": 6902, + "end": 7024, + "name": "tag", + "source": 1, + "value": "291" + }, + { "begin": 6902, "end": 7024, "name": "JUMPDEST", "source": 1 }, + { "begin": 7050, "end": 7056, "name": "DUP4", "source": 1 }, + { + "begin": 7033, + "end": 7252, + "name": "tag", + "source": 1, + "value": "293" + }, + { "begin": 7033, "end": 7252, "name": "JUMPDEST", "source": 1 }, + { "begin": 7067, "end": 7073, "name": "DUP2", "source": 1 }, + { "begin": 7062, "end": 7065, "name": "DUP2", "source": 1 }, + { "begin": 7059, "end": 7074, "name": "LT", "source": 1 }, + { "begin": 7033, "end": 7252, "name": "ISZERO", "source": 1 }, + { + "begin": 7033, + "end": 7252, + "name": "PUSH [tag]", + "source": 1, + "value": "295" + }, + { "begin": 7033, "end": 7252, "name": "JUMPI", "source": 1 }, + { "begin": 7142, "end": 7145, "name": "DUP1", "source": 1 }, + { + "begin": 7171, + "end": 7207, + "name": "PUSH [tag]", + "source": 1, + "value": "296" + }, + { "begin": 7203, "end": 7206, "name": "DUP9", "source": 1 }, + { "begin": 7191, "end": 7201, "name": "DUP3", "source": 1 }, + { + "begin": 7171, + "end": 7207, + "name": "PUSH [tag]", + "source": 1, + "value": "169" + }, + { + "begin": 7171, + "end": 7207, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 7171, + "end": 7207, + "name": "tag", + "source": 1, + "value": "296" + }, + { "begin": 7171, "end": 7207, "name": "JUMPDEST", "source": 1 }, + { "begin": 7166, "end": 7169, "name": "DUP5", "source": 1 }, + { "begin": 7159, "end": 7208, "name": "MSTORE", "source": 1 }, + { + "begin": 7237, + "end": 7241, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 7232, "end": 7235, "name": "DUP5", "source": 1 }, + { "begin": 7228, "end": 7242, "name": "ADD", "source": 1 }, + { "begin": 7221, "end": 7242, "name": "SWAP4", "source": 1 }, + { "begin": 7221, "end": 7242, "name": "POP", "source": 1 }, + { "begin": 7109, "end": 7252, "name": "POP", "source": 1 }, + { + "begin": 7093, + "end": 7097, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 7088, "end": 7091, "name": "DUP2", "source": 1 }, + { "begin": 7084, "end": 7098, "name": "ADD", "source": 1 }, + { "begin": 7077, "end": 7098, "name": "SWAP1", "source": 1 }, + { "begin": 7077, "end": 7098, "name": "POP", "source": 1 }, + { + "begin": 7033, + "end": 7252, + "name": "PUSH [tag]", + "source": 1, + "value": "293" + }, + { "begin": 7033, "end": 7252, "name": "JUMP", "source": 1 }, + { + "begin": 7033, + "end": 7252, + "name": "tag", + "source": 1, + "value": "295" + }, + { "begin": 7033, "end": 7252, "name": "JUMPDEST", "source": 1 }, + { "begin": 7037, "end": 7058, "name": "POP", "source": 1 }, + { "begin": 6717, "end": 7258, "name": "POP", "source": 1 }, + { "begin": 6717, "end": 7258, "name": "POP", "source": 1 }, + { "begin": 6618, "end": 7258, "name": "SWAP4", "source": 1 }, + { "begin": 6618, "end": 7258, "name": "SWAP3", "source": 1 }, + { "begin": 6618, "end": 7258, "name": "POP", "source": 1 }, + { "begin": 6618, "end": 7258, "name": "POP", "source": 1 }, + { "begin": 6618, "end": 7258, "name": "POP", "source": 1 }, + { + "begin": 6618, + "end": 7258, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 7281, + "end": 7618, + "name": "tag", + "source": 1, + "value": "171" + }, + { "begin": 7281, "end": 7618, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7349, + "end": 7354, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 7398, "end": 7401, "name": "DUP3", "source": 1 }, + { + "begin": 7391, + "end": 7395, + "name": "PUSH", + "source": 1, + "value": "1F" + }, + { "begin": 7383, "end": 7389, "name": "DUP4", "source": 1 }, + { "begin": 7379, "end": 7396, "name": "ADD", "source": 1 }, + { "begin": 7375, "end": 7402, "name": "SLT", "source": 1 }, + { + "begin": 7365, + "end": 7487, + "name": "PUSH [tag]", + "source": 1, + "value": "298" + }, + { "begin": 7365, "end": 7487, "name": "JUMPI", "source": 1 }, + { + "begin": 7406, + "end": 7485, + "name": "PUSH [tag]", + "source": 1, + "value": "299" + }, + { + "begin": 7406, + "end": 7485, + "name": "PUSH [tag]", + "source": 1, + "value": "151" + }, + { + "begin": 7406, + "end": 7485, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 7406, + "end": 7485, + "name": "tag", + "source": 1, + "value": "299" + }, + { "begin": 7406, "end": 7485, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7365, + "end": 7487, + "name": "tag", + "source": 1, + "value": "298" + }, + { "begin": 7365, "end": 7487, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7510, + "end": 7514, + "name": "PUSH", + "source": 1, + "value": "2" + }, + { + "begin": 7532, + "end": 7612, + "name": "PUSH [tag]", + "source": 1, + "value": "300" + }, + { "begin": 7608, "end": 7611, "name": "DUP5", "source": 1 }, + { "begin": 7600, "end": 7606, "name": "DUP3", "source": 1 }, + { "begin": 7592, "end": 7598, "name": "DUP6", "source": 1 }, + { + "begin": 7532, + "end": 7612, + "name": "PUSH [tag]", + "source": 1, + "value": "170" + }, + { + "begin": 7532, + "end": 7612, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 7532, + "end": 7612, + "name": "tag", + "source": 1, + "value": "300" + }, + { "begin": 7532, "end": 7612, "name": "JUMPDEST", "source": 1 }, + { "begin": 7523, "end": 7612, "name": "SWAP2", "source": 1 }, + { "begin": 7523, "end": 7612, "name": "POP", "source": 1 }, + { "begin": 7355, "end": 7618, "name": "POP", "source": 1 }, + { "begin": 7281, "end": 7618, "name": "SWAP3", "source": 1 }, + { "begin": 7281, "end": 7618, "name": "SWAP2", "source": 1 }, + { "begin": 7281, "end": 7618, "name": "POP", "source": 1 }, + { "begin": 7281, "end": 7618, "name": "POP", "source": 1 }, + { + "begin": 7281, + "end": 7618, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 7624, + "end": 7714, + "name": "tag", + "source": 1, + "value": "172" + }, + { "begin": 7624, "end": 7714, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7658, + "end": 7665, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 7701, "end": 7706, "name": "DUP2", "source": 1 }, + { "begin": 7694, "end": 7707, "name": "ISZERO", "source": 1 }, + { "begin": 7687, "end": 7708, "name": "ISZERO", "source": 1 }, + { "begin": 7676, "end": 7708, "name": "SWAP1", "source": 1 }, + { "begin": 7676, "end": 7708, "name": "POP", "source": 1 }, + { "begin": 7624, "end": 7714, "name": "SWAP2", "source": 1 }, + { "begin": 7624, "end": 7714, "name": "SWAP1", "source": 1 }, + { "begin": 7624, "end": 7714, "name": "POP", "source": 1 }, + { + "begin": 7624, + "end": 7714, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 7720, + "end": 7836, + "name": "tag", + "source": 1, + "value": "173" + }, + { "begin": 7720, "end": 7836, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7790, + "end": 7811, + "name": "PUSH [tag]", + "source": 1, + "value": "303" + }, + { "begin": 7805, "end": 7810, "name": "DUP2", "source": 1 }, + { + "begin": 7790, + "end": 7811, + "name": "PUSH [tag]", + "source": 1, + "value": "172" + }, + { + "begin": 7790, + "end": 7811, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 7790, + "end": 7811, + "name": "tag", + "source": 1, + "value": "303" + }, + { "begin": 7790, "end": 7811, "name": "JUMPDEST", "source": 1 }, + { "begin": 7783, "end": 7788, "name": "DUP2", "source": 1 }, + { "begin": 7780, "end": 7812, "name": "EQ", "source": 1 }, + { + "begin": 7770, + "end": 7830, + "name": "PUSH [tag]", + "source": 1, + "value": "304" + }, + { "begin": 7770, "end": 7830, "name": "JUMPI", "source": 1 }, + { + "begin": 7826, + "end": 7827, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 7823, "end": 7824, "name": "DUP1", "source": 1 }, + { "begin": 7816, "end": 7828, "name": "REVERT", "source": 1 }, + { + "begin": 7770, + "end": 7830, + "name": "tag", + "source": 1, + "value": "304" + }, + { "begin": 7770, "end": 7830, "name": "JUMPDEST", "source": 1 }, + { "begin": 7720, "end": 7836, "name": "POP", "source": 1 }, + { + "begin": 7720, + "end": 7836, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 7842, + "end": 7975, + "name": "tag", + "source": 1, + "value": "174" + }, + { "begin": 7842, "end": 7975, "name": "JUMPDEST", "source": 1 }, + { + "begin": 7885, + "end": 7890, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 7923, "end": 7929, "name": "DUP2", "source": 1 }, + { + "begin": 7910, + "end": 7930, + "name": "CALLDATALOAD", + "source": 1 + }, + { "begin": 7901, "end": 7930, "name": "SWAP1", "source": 1 }, + { "begin": 7901, "end": 7930, "name": "POP", "source": 1 }, + { + "begin": 7939, + "end": 7969, + "name": "PUSH [tag]", + "source": 1, + "value": "306" + }, + { "begin": 7963, "end": 7968, "name": "DUP2", "source": 1 }, + { + "begin": 7939, + "end": 7969, + "name": "PUSH [tag]", + "source": 1, + "value": "173" + }, + { + "begin": 7939, + "end": 7969, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 7939, + "end": 7969, + "name": "tag", + "source": 1, + "value": "306" + }, + { "begin": 7939, "end": 7969, "name": "JUMPDEST", "source": 1 }, + { "begin": 7842, "end": 7975, "name": "SWAP3", "source": 1 }, + { "begin": 7842, "end": 7975, "name": "SWAP2", "source": 1 }, + { "begin": 7842, "end": 7975, "name": "POP", "source": 1 }, + { "begin": 7842, "end": 7975, "name": "POP", "source": 1 }, + { + "begin": 7842, + "end": 7975, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 7981, + "end": 9021, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 7981, "end": 9021, "name": "JUMPDEST", "source": 1 }, + { + "begin": 8140, + "end": 8146, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 8148, "end": 8154, "name": "DUP1", "source": 1 }, + { + "begin": 8156, + "end": 8162, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 8164, "end": 8170, "name": "DUP1", "source": 1 }, + { + "begin": 8172, + "end": 8178, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 8221, + "end": 8224, + "name": "PUSH", + "source": 1, + "value": "140" + }, + { "begin": 8209, "end": 8218, "name": "DUP7", "source": 1 }, + { "begin": 8200, "end": 8207, "name": "DUP9", "source": 1 }, + { "begin": 8196, "end": 8219, "name": "SUB", "source": 1 }, + { "begin": 8192, "end": 8225, "name": "SLT", "source": 1 }, + { "begin": 8189, "end": 8309, "name": "ISZERO", "source": 1 }, + { + "begin": 8189, + "end": 8309, + "name": "PUSH [tag]", + "source": 1, + "value": "308" + }, + { "begin": 8189, "end": 8309, "name": "JUMPI", "source": 1 }, + { + "begin": 8228, + "end": 8307, + "name": "PUSH [tag]", + "source": 1, + "value": "309" + }, + { + "begin": 8228, + "end": 8307, + "name": "PUSH [tag]", + "source": 1, + "value": "142" + }, + { + "begin": 8228, + "end": 8307, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 8228, + "end": 8307, + "name": "tag", + "source": 1, + "value": "309" + }, + { "begin": 8228, "end": 8307, "name": "JUMPDEST", "source": 1 }, + { + "begin": 8189, + "end": 8309, + "name": "tag", + "source": 1, + "value": "308" + }, + { "begin": 8189, "end": 8309, "name": "JUMPDEST", "source": 1 }, + { + "begin": 8348, + "end": 8349, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 8373, + "end": 8425, + "name": "PUSH [tag]", + "source": 1, + "value": "310" + }, + { "begin": 8417, "end": 8424, "name": "DUP9", "source": 1 }, + { "begin": 8408, "end": 8414, "name": "DUP3", "source": 1 }, + { "begin": 8397, "end": 8406, "name": "DUP10", "source": 1 }, + { "begin": 8393, "end": 8415, "name": "ADD", "source": 1 }, + { + "begin": 8373, + "end": 8425, + "name": "PUSH [tag]", + "source": 1, + "value": "150" + }, + { + "begin": 8373, + "end": 8425, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 8373, + "end": 8425, + "name": "tag", + "source": 1, + "value": "310" + }, + { "begin": 8373, "end": 8425, "name": "JUMPDEST", "source": 1 }, + { "begin": 8363, "end": 8425, "name": "SWAP6", "source": 1 }, + { "begin": 8363, "end": 8425, "name": "POP", "source": 1 }, + { "begin": 8319, "end": 8435, "name": "POP", "source": 1 }, + { + "begin": 8474, + "end": 8476, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { + "begin": 8500, + "end": 8576, + "name": "PUSH [tag]", + "source": 1, + "value": "311" + }, + { "begin": 8568, "end": 8575, "name": "DUP9", "source": 1 }, + { "begin": 8559, "end": 8565, "name": "DUP3", "source": 1 }, + { "begin": 8548, "end": 8557, "name": "DUP10", "source": 1 }, + { "begin": 8544, "end": 8566, "name": "ADD", "source": 1 }, + { + "begin": 8500, + "end": 8576, + "name": "PUSH [tag]", + "source": 1, + "value": "162" + }, + { + "begin": 8500, + "end": 8576, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 8500, + "end": 8576, + "name": "tag", + "source": 1, + "value": "311" + }, + { "begin": 8500, "end": 8576, "name": "JUMPDEST", "source": 1 }, + { "begin": 8490, "end": 8576, "name": "SWAP5", "source": 1 }, + { "begin": 8490, "end": 8576, "name": "POP", "source": 1 }, + { "begin": 8445, "end": 8586, "name": "POP", "source": 1 }, + { + "begin": 8625, + "end": 8627, + "name": "PUSH", + "source": 1, + "value": "60" + }, + { + "begin": 8651, + "end": 8727, + "name": "PUSH [tag]", + "source": 1, + "value": "312" + }, + { "begin": 8719, "end": 8726, "name": "DUP9", "source": 1 }, + { "begin": 8710, "end": 8716, "name": "DUP3", "source": 1 }, + { "begin": 8699, "end": 8708, "name": "DUP10", "source": 1 }, + { "begin": 8695, "end": 8717, "name": "ADD", "source": 1 }, + { + "begin": 8651, + "end": 8727, + "name": "PUSH [tag]", + "source": 1, + "value": "165" + }, + { + "begin": 8651, + "end": 8727, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 8651, + "end": 8727, + "name": "tag", + "source": 1, + "value": "312" + }, + { "begin": 8651, "end": 8727, "name": "JUMPDEST", "source": 1 }, + { "begin": 8641, "end": 8727, "name": "SWAP4", "source": 1 }, + { "begin": 8641, "end": 8727, "name": "POP", "source": 1 }, + { "begin": 8596, "end": 8737, "name": "POP", "source": 1 }, + { + "begin": 8776, + "end": 8779, + "name": "PUSH", + "source": 1, + "value": "E0" + }, + { + "begin": 8803, + "end": 8878, + "name": "PUSH [tag]", + "source": 1, + "value": "313" + }, + { "begin": 8870, "end": 8877, "name": "DUP9", "source": 1 }, + { "begin": 8861, "end": 8867, "name": "DUP3", "source": 1 }, + { "begin": 8850, "end": 8859, "name": "DUP10", "source": 1 }, + { "begin": 8846, "end": 8868, "name": "ADD", "source": 1 }, + { + "begin": 8803, + "end": 8878, + "name": "PUSH [tag]", + "source": 1, + "value": "171" + }, + { + "begin": 8803, + "end": 8878, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 8803, + "end": 8878, + "name": "tag", + "source": 1, + "value": "313" + }, + { "begin": 8803, "end": 8878, "name": "JUMPDEST", "source": 1 }, + { "begin": 8793, "end": 8878, "name": "SWAP3", "source": 1 }, + { "begin": 8793, "end": 8878, "name": "POP", "source": 1 }, + { "begin": 8747, "end": 8888, "name": "POP", "source": 1 }, + { + "begin": 8927, + "end": 8930, + "name": "PUSH", + "source": 1, + "value": "120" + }, + { + "begin": 8954, + "end": 9004, + "name": "PUSH [tag]", + "source": 1, + "value": "314" + }, + { "begin": 8996, "end": 9003, "name": "DUP9", "source": 1 }, + { "begin": 8987, "end": 8993, "name": "DUP3", "source": 1 }, + { "begin": 8976, "end": 8985, "name": "DUP10", "source": 1 }, + { "begin": 8972, "end": 8994, "name": "ADD", "source": 1 }, + { + "begin": 8954, + "end": 9004, + "name": "PUSH [tag]", + "source": 1, + "value": "174" + }, + { + "begin": 8954, + "end": 9004, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 8954, + "end": 9004, + "name": "tag", + "source": 1, + "value": "314" + }, + { "begin": 8954, "end": 9004, "name": "JUMPDEST", "source": 1 }, + { "begin": 8944, "end": 9004, "name": "SWAP2", "source": 1 }, + { "begin": 8944, "end": 9004, "name": "POP", "source": 1 }, + { "begin": 8898, "end": 9014, "name": "POP", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "SWAP3", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "SWAP6", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "POP", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "SWAP3", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "SWAP6", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "SWAP1", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "SWAP4", "source": 1 }, + { "begin": 7981, "end": 9021, "name": "POP", "source": 1 }, + { + "begin": 7981, + "end": 9021, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 9027, + "end": 9131, + "name": "tag", + "source": 1, + "value": "175" + }, + { "begin": 9027, "end": 9131, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9092, + "end": 9098, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 9120, + "end": 9124, + "name": "PUSH", + "source": 1, + "value": "2" + }, + { "begin": 9110, "end": 9124, "name": "SWAP1", "source": 1 }, + { "begin": 9110, "end": 9124, "name": "POP", "source": 1 }, + { "begin": 9027, "end": 9131, "name": "SWAP2", "source": 1 }, + { "begin": 9027, "end": 9131, "name": "SWAP1", "source": 1 }, + { "begin": 9027, "end": 9131, "name": "POP", "source": 1 }, + { + "begin": 9027, + "end": 9131, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 9137, + "end": 9280, + "name": "tag", + "source": 1, + "value": "176" + }, + { "begin": 9137, "end": 9280, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9234, + "end": 9245, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 9271, "end": 9274, "name": "DUP2", "source": 1 }, + { "begin": 9256, "end": 9274, "name": "SWAP1", "source": 1 }, + { "begin": 9256, "end": 9274, "name": "POP", "source": 1 }, + { "begin": 9137, "end": 9280, "name": "SWAP3", "source": 1 }, + { "begin": 9137, "end": 9280, "name": "SWAP2", "source": 1 }, + { "begin": 9137, "end": 9280, "name": "POP", "source": 1 }, + { "begin": 9137, "end": 9280, "name": "POP", "source": 1 }, + { + "begin": 9137, + "end": 9280, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 9286, + "end": 9384, + "name": "tag", + "source": 1, + "value": "177" + }, + { "begin": 9286, "end": 9384, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9351, + "end": 9355, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 9374, "end": 9377, "name": "DUP2", "source": 1 }, + { "begin": 9366, "end": 9377, "name": "SWAP1", "source": 1 }, + { "begin": 9366, "end": 9377, "name": "POP", "source": 1 }, + { "begin": 9286, "end": 9384, "name": "SWAP2", "source": 1 }, + { "begin": 9286, "end": 9384, "name": "SWAP1", "source": 1 }, + { "begin": 9286, "end": 9384, "name": "POP", "source": 1 }, + { + "begin": 9286, + "end": 9384, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 9390, + "end": 9498, + "name": "tag", + "source": 1, + "value": "178" + }, + { "begin": 9390, "end": 9498, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9467, + "end": 9491, + "name": "PUSH [tag]", + "source": 1, + "value": "319" + }, + { "begin": 9485, "end": 9490, "name": "DUP2", "source": 1 }, + { + "begin": 9467, + "end": 9491, + "name": "PUSH [tag]", + "source": 1, + "value": "158" + }, + { + "begin": 9467, + "end": 9491, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 9467, + "end": 9491, + "name": "tag", + "source": 1, + "value": "319" + }, + { "begin": 9467, "end": 9491, "name": "JUMPDEST", "source": 1 }, + { "begin": 9462, "end": 9465, "name": "DUP3", "source": 1 }, + { "begin": 9455, "end": 9492, "name": "MSTORE", "source": 1 }, + { "begin": 9390, "end": 9498, "name": "POP", "source": 1 }, + { "begin": 9390, "end": 9498, "name": "POP", "source": 1 }, + { + "begin": 9390, + "end": 9498, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 9504, + "end": 9683, + "name": "tag", + "source": 1, + "value": "179" + }, + { "begin": 9504, "end": 9683, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9573, + "end": 9583, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 9594, + "end": 9640, + "name": "PUSH [tag]", + "source": 1, + "value": "321" + }, + { "begin": 9636, "end": 9639, "name": "DUP4", "source": 1 }, + { "begin": 9628, "end": 9634, "name": "DUP4", "source": 1 }, + { + "begin": 9594, + "end": 9640, + "name": "PUSH [tag]", + "source": 1, + "value": "178" + }, + { + "begin": 9594, + "end": 9640, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 9594, + "end": 9640, + "name": "tag", + "source": 1, + "value": "321" + }, + { "begin": 9594, "end": 9640, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9672, + "end": 9676, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 9667, "end": 9670, "name": "DUP4", "source": 1 }, + { "begin": 9663, "end": 9677, "name": "ADD", "source": 1 }, + { "begin": 9649, "end": 9677, "name": "SWAP1", "source": 1 }, + { "begin": 9649, "end": 9677, "name": "POP", "source": 1 }, + { "begin": 9504, "end": 9683, "name": "SWAP3", "source": 1 }, + { "begin": 9504, "end": 9683, "name": "SWAP2", "source": 1 }, + { "begin": 9504, "end": 9683, "name": "POP", "source": 1 }, + { "begin": 9504, "end": 9683, "name": "POP", "source": 1 }, + { + "begin": 9504, + "end": 9683, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 9689, + "end": 9800, + "name": "tag", + "source": 1, + "value": "180" + }, + { "begin": 9689, "end": 9800, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9757, + "end": 9761, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 9789, + "end": 9793, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 9784, "end": 9787, "name": "DUP3", "source": 1 }, + { "begin": 9780, "end": 9794, "name": "ADD", "source": 1 }, + { "begin": 9772, "end": 9794, "name": "SWAP1", "source": 1 }, + { "begin": 9772, "end": 9794, "name": "POP", "source": 1 }, + { "begin": 9689, "end": 9800, "name": "SWAP2", "source": 1 }, + { "begin": 9689, "end": 9800, "name": "SWAP1", "source": 1 }, + { "begin": 9689, "end": 9800, "name": "POP", "source": 1 }, + { + "begin": 9689, + "end": 9800, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 9838, + "end": 10532, + "name": "tag", + "source": 1, + "value": "181" + }, + { "begin": 9838, "end": 10532, "name": "JUMPDEST", "source": 1 }, + { + "begin": 9974, + "end": 10026, + "name": "PUSH [tag]", + "source": 1, + "value": "324" + }, + { "begin": 10020, "end": 10025, "name": "DUP2", "source": 1 }, + { + "begin": 9974, + "end": 10026, + "name": "PUSH [tag]", + "source": 1, + "value": "175" + }, + { + "begin": 9974, + "end": 10026, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 9974, + "end": 10026, + "name": "tag", + "source": 1, + "value": "324" + }, + { "begin": 9974, "end": 10026, "name": "JUMPDEST", "source": 1 }, + { + "begin": 10042, + "end": 10126, + "name": "PUSH [tag]", + "source": 1, + "value": "325" + }, + { "begin": 10119, "end": 10125, "name": "DUP2", "source": 1 }, + { "begin": 10114, "end": 10117, "name": "DUP5", "source": 1 }, + { + "begin": 10042, + "end": 10126, + "name": "PUSH [tag]", + "source": 1, + "value": "176" + }, + { + "begin": 10042, + "end": 10126, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 10042, + "end": 10126, + "name": "tag", + "source": 1, + "value": "325" + }, + { "begin": 10042, "end": 10126, "name": "JUMPDEST", "source": 1 }, + { "begin": 10035, "end": 10126, "name": "SWAP3", "source": 1 }, + { "begin": 10035, "end": 10126, "name": "POP", "source": 1 }, + { + "begin": 10150, + "end": 10204, + "name": "PUSH [tag]", + "source": 1, + "value": "326" + }, + { "begin": 10198, "end": 10203, "name": "DUP3", "source": 1 }, + { + "begin": 10150, + "end": 10204, + "name": "PUSH [tag]", + "source": 1, + "value": "177" + }, + { + "begin": 10150, + "end": 10204, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 10150, + "end": 10204, + "name": "tag", + "source": 1, + "value": "326" + }, + { "begin": 10150, "end": 10204, "name": "JUMPDEST", "source": 1 }, + { "begin": 10227, "end": 10234, "name": "DUP1", "source": 1 }, + { + "begin": 10258, + "end": 10259, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 10243, + "end": 10525, + "name": "tag", + "source": 1, + "value": "327" + }, + { "begin": 10243, "end": 10525, "name": "JUMPDEST", "source": 1 }, + { "begin": 10268, "end": 10274, "name": "DUP4", "source": 1 }, + { "begin": 10265, "end": 10266, "name": "DUP2", "source": 1 }, + { "begin": 10262, "end": 10275, "name": "LT", "source": 1 }, + { "begin": 10243, "end": 10525, "name": "ISZERO", "source": 1 }, + { + "begin": 10243, + "end": 10525, + "name": "PUSH [tag]", + "source": 1, + "value": "329" + }, + { "begin": 10243, "end": 10525, "name": "JUMPI", "source": 1 }, + { "begin": 10344, "end": 10350, "name": "DUP2", "source": 1 }, + { "begin": 10338, "end": 10351, "name": "MLOAD", "source": 1 }, + { + "begin": 10371, + "end": 10434, + "name": "PUSH [tag]", + "source": 1, + "value": "330" + }, + { "begin": 10430, "end": 10433, "name": "DUP8", "source": 1 }, + { "begin": 10415, "end": 10428, "name": "DUP3", "source": 1 }, + { + "begin": 10371, + "end": 10434, + "name": "PUSH [tag]", + "source": 1, + "value": "179" + }, + { + "begin": 10371, + "end": 10434, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 10371, + "end": 10434, + "name": "tag", + "source": 1, + "value": "330" + }, + { "begin": 10371, "end": 10434, "name": "JUMPDEST", "source": 1 }, + { "begin": 10364, "end": 10434, "name": "SWAP7", "source": 1 }, + { "begin": 10364, "end": 10434, "name": "POP", "source": 1 }, + { + "begin": 10457, + "end": 10515, + "name": "PUSH [tag]", + "source": 1, + "value": "331" + }, + { "begin": 10508, "end": 10514, "name": "DUP4", "source": 1 }, + { + "begin": 10457, + "end": 10515, + "name": "PUSH [tag]", + "source": 1, + "value": "180" + }, + { + "begin": 10457, + "end": 10515, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 10457, + "end": 10515, + "name": "tag", + "source": 1, + "value": "331" + }, + { "begin": 10457, "end": 10515, "name": "JUMPDEST", "source": 1 }, + { "begin": 10447, "end": 10515, "name": "SWAP3", "source": 1 }, + { "begin": 10447, "end": 10515, "name": "POP", "source": 1 }, + { "begin": 10303, "end": 10525, "name": "POP", "source": 1 }, + { + "begin": 10290, + "end": 10291, + "name": "PUSH", + "source": 1, + "value": "1" + }, + { "begin": 10287, "end": 10288, "name": "DUP2", "source": 1 }, + { "begin": 10283, "end": 10292, "name": "ADD", "source": 1 }, + { "begin": 10278, "end": 10292, "name": "SWAP1", "source": 1 }, + { "begin": 10278, "end": 10292, "name": "POP", "source": 1 }, + { + "begin": 10243, + "end": 10525, + "name": "PUSH [tag]", + "source": 1, + "value": "327" + }, + { "begin": 10243, "end": 10525, "name": "JUMP", "source": 1 }, + { + "begin": 10243, + "end": 10525, + "name": "tag", + "source": 1, + "value": "329" + }, + { "begin": 10243, "end": 10525, "name": "JUMPDEST", "source": 1 }, + { "begin": 10247, "end": 10261, "name": "POP", "source": 1 }, + { "begin": 9950, "end": 10532, "name": "POP", "source": 1 }, + { "begin": 9950, "end": 10532, "name": "POP", "source": 1 }, + { "begin": 9950, "end": 10532, "name": "POP", "source": 1 }, + { "begin": 9838, "end": 10532, "name": "POP", "source": 1 }, + { "begin": 9838, "end": 10532, "name": "POP", "source": 1 }, + { + "begin": 9838, + "end": 10532, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 10538, + "end": 10852, + "name": "tag", + "source": 1, + "value": "35" + }, + { "begin": 10538, "end": 10852, "name": "JUMPDEST", "source": 1 }, + { + "begin": 10677, + "end": 10681, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 10715, + "end": 10717, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { "begin": 10704, "end": 10713, "name": "DUP3", "source": 1 }, + { "begin": 10700, "end": 10718, "name": "ADD", "source": 1 }, + { "begin": 10692, "end": 10718, "name": "SWAP1", "source": 1 }, + { "begin": 10692, "end": 10718, "name": "POP", "source": 1 }, + { + "begin": 10728, + "end": 10845, + "name": "PUSH [tag]", + "source": 1, + "value": "333" + }, + { + "begin": 10842, + "end": 10843, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 10831, "end": 10840, "name": "DUP4", "source": 1 }, + { "begin": 10827, "end": 10844, "name": "ADD", "source": 1 }, + { "begin": 10818, "end": 10824, "name": "DUP5", "source": 1 }, + { + "begin": 10728, + "end": 10845, + "name": "PUSH [tag]", + "source": 1, + "value": "181" + }, + { + "begin": 10728, + "end": 10845, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 10728, + "end": 10845, + "name": "tag", + "source": 1, + "value": "333" + }, + { "begin": 10728, "end": 10845, "name": "JUMPDEST", "source": 1 }, + { "begin": 10538, "end": 10852, "name": "SWAP3", "source": 1 }, + { "begin": 10538, "end": 10852, "name": "SWAP2", "source": 1 }, + { "begin": 10538, "end": 10852, "name": "POP", "source": 1 }, + { "begin": 10538, "end": 10852, "name": "POP", "source": 1 }, + { + "begin": 10538, + "end": 10852, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 10858, + "end": 10956, + "name": "tag", + "source": 1, + "value": "182" + }, + { "begin": 10858, "end": 10956, "name": "JUMPDEST", "source": 1 }, + { + "begin": 10909, + "end": 10915, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 10943, "end": 10948, "name": "DUP2", "source": 1 }, + { "begin": 10937, "end": 10949, "name": "MLOAD", "source": 1 }, + { "begin": 10927, "end": 10949, "name": "SWAP1", "source": 1 }, + { "begin": 10927, "end": 10949, "name": "POP", "source": 1 }, + { "begin": 10858, "end": 10956, "name": "SWAP2", "source": 1 }, + { "begin": 10858, "end": 10956, "name": "SWAP1", "source": 1 }, + { "begin": 10858, "end": 10956, "name": "POP", "source": 1 }, + { + "begin": 10858, + "end": 10956, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 10962, + "end": 11109, + "name": "tag", + "source": 1, + "value": "183" + }, + { "begin": 10962, "end": 11109, "name": "JUMPDEST", "source": 1 }, + { + "begin": 11063, + "end": 11074, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 11100, "end": 11103, "name": "DUP2", "source": 1 }, + { "begin": 11085, "end": 11103, "name": "SWAP1", "source": 1 }, + { "begin": 11085, "end": 11103, "name": "POP", "source": 1 }, + { "begin": 10962, "end": 11109, "name": "SWAP3", "source": 1 }, + { "begin": 10962, "end": 11109, "name": "SWAP2", "source": 1 }, + { "begin": 10962, "end": 11109, "name": "POP", "source": 1 }, + { "begin": 10962, "end": 11109, "name": "POP", "source": 1 }, + { + "begin": 10962, + "end": 11109, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 11115, + "end": 11422, + "name": "tag", + "source": 1, + "value": "184" + }, + { "begin": 11115, "end": 11422, "name": "JUMPDEST", "source": 1 }, + { + "begin": 11183, + "end": 11184, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 11193, + "end": 11306, + "name": "tag", + "source": 1, + "value": "337" + }, + { "begin": 11193, "end": 11306, "name": "JUMPDEST", "source": 1 }, + { "begin": 11207, "end": 11213, "name": "DUP4", "source": 1 }, + { "begin": 11204, "end": 11205, "name": "DUP2", "source": 1 }, + { "begin": 11201, "end": 11214, "name": "LT", "source": 1 }, + { "begin": 11193, "end": 11306, "name": "ISZERO", "source": 1 }, + { + "begin": 11193, + "end": 11306, + "name": "PUSH [tag]", + "source": 1, + "value": "339" + }, + { "begin": 11193, "end": 11306, "name": "JUMPI", "source": 1 }, + { "begin": 11292, "end": 11293, "name": "DUP1", "source": 1 }, + { "begin": 11287, "end": 11290, "name": "DUP3", "source": 1 }, + { "begin": 11283, "end": 11294, "name": "ADD", "source": 1 }, + { "begin": 11277, "end": 11295, "name": "MLOAD", "source": 1 }, + { "begin": 11273, "end": 11274, "name": "DUP2", "source": 1 }, + { "begin": 11268, "end": 11271, "name": "DUP5", "source": 1 }, + { "begin": 11264, "end": 11275, "name": "ADD", "source": 1 }, + { "begin": 11257, "end": 11296, "name": "MSTORE", "source": 1 }, + { + "begin": 11229, + "end": 11231, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 11226, "end": 11227, "name": "DUP2", "source": 1 }, + { "begin": 11222, "end": 11232, "name": "ADD", "source": 1 }, + { "begin": 11217, "end": 11232, "name": "SWAP1", "source": 1 }, + { "begin": 11217, "end": 11232, "name": "POP", "source": 1 }, + { + "begin": 11193, + "end": 11306, + "name": "PUSH [tag]", + "source": 1, + "value": "337" + }, + { "begin": 11193, "end": 11306, "name": "JUMP", "source": 1 }, + { + "begin": 11193, + "end": 11306, + "name": "tag", + "source": 1, + "value": "339" + }, + { "begin": 11193, "end": 11306, "name": "JUMPDEST", "source": 1 }, + { "begin": 11324, "end": 11330, "name": "DUP4", "source": 1 }, + { "begin": 11321, "end": 11322, "name": "DUP2", "source": 1 }, + { "begin": 11318, "end": 11331, "name": "GT", "source": 1 }, + { "begin": 11315, "end": 11416, "name": "ISZERO", "source": 1 }, + { + "begin": 11315, + "end": 11416, + "name": "PUSH [tag]", + "source": 1, + "value": "340" + }, + { "begin": 11315, "end": 11416, "name": "JUMPI", "source": 1 }, + { + "begin": 11404, + "end": 11405, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 11395, "end": 11401, "name": "DUP5", "source": 1 }, + { "begin": 11390, "end": 11393, "name": "DUP5", "source": 1 }, + { "begin": 11386, "end": 11402, "name": "ADD", "source": 1 }, + { "begin": 11379, "end": 11406, "name": "MSTORE", "source": 1 }, + { + "begin": 11315, + "end": 11416, + "name": "tag", + "source": 1, + "value": "340" + }, + { "begin": 11315, "end": 11416, "name": "JUMPDEST", "source": 1 }, + { "begin": 11164, "end": 11422, "name": "POP", "source": 1 }, + { "begin": 11115, "end": 11422, "name": "POP", "source": 1 }, + { "begin": 11115, "end": 11422, "name": "POP", "source": 1 }, + { "begin": 11115, "end": 11422, "name": "POP", "source": 1 }, + { + "begin": 11115, + "end": 11422, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 11428, + "end": 11801, + "name": "tag", + "source": 1, + "value": "185" + }, + { "begin": 11428, "end": 11801, "name": "JUMPDEST", "source": 1 }, + { + "begin": 11532, + "end": 11535, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 11560, + "end": 11598, + "name": "PUSH [tag]", + "source": 1, + "value": "342" + }, + { "begin": 11592, "end": 11597, "name": "DUP3", "source": 1 }, + { + "begin": 11560, + "end": 11598, + "name": "PUSH [tag]", + "source": 1, + "value": "182" + }, + { + "begin": 11560, + "end": 11598, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 11560, + "end": 11598, + "name": "tag", + "source": 1, + "value": "342" + }, + { "begin": 11560, "end": 11598, "name": "JUMPDEST", "source": 1 }, + { + "begin": 11614, + "end": 11702, + "name": "PUSH [tag]", + "source": 1, + "value": "343" + }, + { "begin": 11695, "end": 11701, "name": "DUP2", "source": 1 }, + { "begin": 11690, "end": 11693, "name": "DUP6", "source": 1 }, + { + "begin": 11614, + "end": 11702, + "name": "PUSH [tag]", + "source": 1, + "value": "183" + }, + { + "begin": 11614, + "end": 11702, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 11614, + "end": 11702, + "name": "tag", + "source": 1, + "value": "343" + }, + { "begin": 11614, "end": 11702, "name": "JUMPDEST", "source": 1 }, + { "begin": 11607, "end": 11702, "name": "SWAP4", "source": 1 }, + { "begin": 11607, "end": 11702, "name": "POP", "source": 1 }, + { + "begin": 11711, + "end": 11763, + "name": "PUSH [tag]", + "source": 1, + "value": "344" + }, + { "begin": 11756, "end": 11762, "name": "DUP2", "source": 1 }, + { "begin": 11751, "end": 11754, "name": "DUP6", "source": 1 }, + { + "begin": 11744, + "end": 11748, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 11737, "end": 11742, "name": "DUP7", "source": 1 }, + { "begin": 11733, "end": 11749, "name": "ADD", "source": 1 }, + { + "begin": 11711, + "end": 11763, + "name": "PUSH [tag]", + "source": 1, + "value": "184" + }, + { + "begin": 11711, + "end": 11763, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 11711, + "end": 11763, + "name": "tag", + "source": 1, + "value": "344" + }, + { "begin": 11711, "end": 11763, "name": "JUMPDEST", "source": 1 }, + { "begin": 11788, "end": 11794, "name": "DUP1", "source": 1 }, + { "begin": 11783, "end": 11786, "name": "DUP5", "source": 1 }, + { "begin": 11779, "end": 11795, "name": "ADD", "source": 1 }, + { "begin": 11772, "end": 11795, "name": "SWAP2", "source": 1 }, + { "begin": 11772, "end": 11795, "name": "POP", "source": 1 }, + { "begin": 11536, "end": 11801, "name": "POP", "source": 1 }, + { "begin": 11428, "end": 11801, "name": "SWAP3", "source": 1 }, + { "begin": 11428, "end": 11801, "name": "SWAP2", "source": 1 }, + { "begin": 11428, "end": 11801, "name": "POP", "source": 1 }, + { "begin": 11428, "end": 11801, "name": "POP", "source": 1 }, + { + "begin": 11428, + "end": 11801, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 11807, + "end": 12078, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 11807, "end": 12078, "name": "JUMPDEST", "source": 1 }, + { + "begin": 11937, + "end": 11940, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 11959, + "end": 12052, + "name": "PUSH [tag]", + "source": 1, + "value": "346" + }, + { "begin": 12048, "end": 12051, "name": "DUP3", "source": 1 }, + { "begin": 12039, "end": 12045, "name": "DUP5", "source": 1 }, + { + "begin": 11959, + "end": 12052, + "name": "PUSH [tag]", + "source": 1, + "value": "185" + }, + { + "begin": 11959, + "end": 12052, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 11959, + "end": 12052, + "name": "tag", + "source": 1, + "value": "346" + }, + { "begin": 11959, "end": 12052, "name": "JUMPDEST", "source": 1 }, + { "begin": 11952, "end": 12052, "name": "SWAP2", "source": 1 }, + { "begin": 11952, "end": 12052, "name": "POP", "source": 1 }, + { "begin": 12069, "end": 12072, "name": "DUP2", "source": 1 }, + { "begin": 12062, "end": 12072, "name": "SWAP1", "source": 1 }, + { "begin": 12062, "end": 12072, "name": "POP", "source": 1 }, + { "begin": 11807, "end": 12078, "name": "SWAP3", "source": 1 }, + { "begin": 11807, "end": 12078, "name": "SWAP2", "source": 1 }, + { "begin": 11807, "end": 12078, "name": "POP", "source": 1 }, + { "begin": 11807, "end": 12078, "name": "POP", "source": 1 }, + { + "begin": 11807, + "end": 12078, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 12084, + "end": 12253, + "name": "tag", + "source": 1, + "value": "186" + }, + { "begin": 12084, "end": 12253, "name": "JUMPDEST", "source": 1 }, + { + "begin": 12168, + "end": 12179, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 12202, "end": 12208, "name": "DUP3", "source": 1 }, + { "begin": 12197, "end": 12200, "name": "DUP3", "source": 1 }, + { "begin": 12190, "end": 12209, "name": "MSTORE", "source": 1 }, + { + "begin": 12242, + "end": 12246, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 12237, "end": 12240, "name": "DUP3", "source": 1 }, + { "begin": 12233, "end": 12247, "name": "ADD", "source": 1 }, + { "begin": 12218, "end": 12247, "name": "SWAP1", "source": 1 }, + { "begin": 12218, "end": 12247, "name": "POP", "source": 1 }, + { "begin": 12084, "end": 12253, "name": "SWAP3", "source": 1 }, + { "begin": 12084, "end": 12253, "name": "SWAP2", "source": 1 }, + { "begin": 12084, "end": 12253, "name": "POP", "source": 1 }, + { "begin": 12084, "end": 12253, "name": "POP", "source": 1 }, + { + "begin": 12084, + "end": 12253, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 12259, + "end": 12438, + "name": "tag", + "source": 1, + "value": "187" + }, + { "begin": 12259, "end": 12438, "name": "JUMPDEST", "source": 1 }, + { + "begin": 12399, + "end": 12430, + "name": "PUSH", + "source": 1, + "value": "656C6C69707469632063757276652070616972696E67206661696C6564000000" + }, + { + "begin": 12395, + "end": 12396, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 12387, "end": 12393, "name": "DUP3", "source": 1 }, + { "begin": 12383, "end": 12397, "name": "ADD", "source": 1 }, + { "begin": 12376, "end": 12431, "name": "MSTORE", "source": 1 }, + { "begin": 12259, "end": 12438, "name": "POP", "source": 1 }, + { + "begin": 12259, + "end": 12438, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 12444, + "end": 12810, + "name": "tag", + "source": 1, + "value": "188" + }, + { "begin": 12444, "end": 12810, "name": "JUMPDEST", "source": 1 }, + { + "begin": 12586, + "end": 12589, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 12607, + "end": 12674, + "name": "PUSH [tag]", + "source": 1, + "value": "350" + }, + { + "begin": 12671, + "end": 12673, + "name": "PUSH", + "source": 1, + "value": "1D" + }, + { "begin": 12666, "end": 12669, "name": "DUP4", "source": 1 }, + { + "begin": 12607, + "end": 12674, + "name": "PUSH [tag]", + "source": 1, + "value": "186" + }, + { + "begin": 12607, + "end": 12674, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 12607, + "end": 12674, + "name": "tag", + "source": 1, + "value": "350" + }, + { "begin": 12607, "end": 12674, "name": "JUMPDEST", "source": 1 }, + { "begin": 12600, "end": 12674, "name": "SWAP2", "source": 1 }, + { "begin": 12600, "end": 12674, "name": "POP", "source": 1 }, + { + "begin": 12683, + "end": 12776, + "name": "PUSH [tag]", + "source": 1, + "value": "351" + }, + { "begin": 12772, "end": 12775, "name": "DUP3", "source": 1 }, + { + "begin": 12683, + "end": 12776, + "name": "PUSH [tag]", + "source": 1, + "value": "187" + }, + { + "begin": 12683, + "end": 12776, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 12683, + "end": 12776, + "name": "tag", + "source": 1, + "value": "351" + }, + { "begin": 12683, "end": 12776, "name": "JUMPDEST", "source": 1 }, + { + "begin": 12801, + "end": 12803, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 12796, "end": 12799, "name": "DUP3", "source": 1 }, + { "begin": 12792, "end": 12804, "name": "ADD", "source": 1 }, + { "begin": 12785, "end": 12804, "name": "SWAP1", "source": 1 }, + { "begin": 12785, "end": 12804, "name": "POP", "source": 1 }, + { "begin": 12444, "end": 12810, "name": "SWAP2", "source": 1 }, + { "begin": 12444, "end": 12810, "name": "SWAP1", "source": 1 }, + { "begin": 12444, "end": 12810, "name": "POP", "source": 1 }, + { + "begin": 12444, + "end": 12810, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 12816, + "end": 13235, + "name": "tag", + "source": 1, + "value": "47" + }, + { "begin": 12816, "end": 13235, "name": "JUMPDEST", "source": 1 }, + { + "begin": 12982, + "end": 12986, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 13020, + "end": 13022, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 13009, "end": 13018, "name": "DUP3", "source": 1 }, + { "begin": 13005, "end": 13023, "name": "ADD", "source": 1 }, + { "begin": 12997, "end": 13023, "name": "SWAP1", "source": 1 }, + { "begin": 12997, "end": 13023, "name": "POP", "source": 1 }, + { "begin": 13069, "end": 13078, "name": "DUP2", "source": 1 }, + { "begin": 13063, "end": 13067, "name": "DUP2", "source": 1 }, + { "begin": 13059, "end": 13079, "name": "SUB", "source": 1 }, + { + "begin": 13055, + "end": 13056, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 13044, "end": 13053, "name": "DUP4", "source": 1 }, + { "begin": 13040, "end": 13057, "name": "ADD", "source": 1 }, + { "begin": 13033, "end": 13080, "name": "MSTORE", "source": 1 }, + { + "begin": 13097, + "end": 13228, + "name": "PUSH [tag]", + "source": 1, + "value": "353" + }, + { "begin": 13223, "end": 13227, "name": "DUP2", "source": 1 }, + { + "begin": 13097, + "end": 13228, + "name": "PUSH [tag]", + "source": 1, + "value": "188" + }, + { + "begin": 13097, + "end": 13228, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 13097, + "end": 13228, + "name": "tag", + "source": 1, + "value": "353" + }, + { "begin": 13097, "end": 13228, "name": "JUMPDEST", "source": 1 }, + { "begin": 13089, "end": 13228, "name": "SWAP1", "source": 1 }, + { "begin": 13089, "end": 13228, "name": "POP", "source": 1 }, + { "begin": 12816, "end": 13235, "name": "SWAP2", "source": 1 }, + { "begin": 12816, "end": 13235, "name": "SWAP1", "source": 1 }, + { "begin": 12816, "end": 13235, "name": "POP", "source": 1 }, + { + "begin": 12816, + "end": 13235, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 13241, + "end": 13421, + "name": "tag", + "source": 1, + "value": "50" + }, + { "begin": 13241, "end": 13421, "name": "JUMPDEST", "source": 1 }, + { + "begin": 13289, + "end": 13366, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 13286, + "end": 13287, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 13279, "end": 13367, "name": "MSTORE", "source": 1 }, + { + "begin": 13386, + "end": 13390, + "name": "PUSH", + "source": 1, + "value": "32" + }, + { + "begin": 13383, + "end": 13384, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 13376, "end": 13391, "name": "MSTORE", "source": 1 }, + { + "begin": 13410, + "end": 13414, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 13407, + "end": 13408, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 13400, "end": 13415, "name": "REVERT", "source": 1 }, + { + "begin": 13427, + "end": 13583, + "name": "tag", + "source": 1, + "value": "189" + }, + { "begin": 13427, "end": 13583, "name": "JUMPDEST", "source": 1 }, + { + "begin": 13567, + "end": 13575, + "name": "PUSH", + "source": 1, + "value": "6661696C65640000000000000000000000000000000000000000000000000000" + }, + { + "begin": 13563, + "end": 13564, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 13555, "end": 13561, "name": "DUP3", "source": 1 }, + { "begin": 13551, "end": 13565, "name": "ADD", "source": 1 }, + { "begin": 13544, "end": 13576, "name": "MSTORE", "source": 1 }, + { "begin": 13427, "end": 13583, "name": "POP", "source": 1 }, + { + "begin": 13427, + "end": 13583, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 13589, + "end": 13954, + "name": "tag", + "source": 1, + "value": "190" + }, + { "begin": 13589, "end": 13954, "name": "JUMPDEST", "source": 1 }, + { + "begin": 13731, + "end": 13734, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 13752, + "end": 13818, + "name": "PUSH [tag]", + "source": 1, + "value": "357" + }, + { + "begin": 13816, + "end": 13817, + "name": "PUSH", + "source": 1, + "value": "6" + }, + { "begin": 13811, "end": 13814, "name": "DUP4", "source": 1 }, + { + "begin": 13752, + "end": 13818, + "name": "PUSH [tag]", + "source": 1, + "value": "186" + }, + { + "begin": 13752, + "end": 13818, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 13752, + "end": 13818, + "name": "tag", + "source": 1, + "value": "357" + }, + { "begin": 13752, "end": 13818, "name": "JUMPDEST", "source": 1 }, + { "begin": 13745, "end": 13818, "name": "SWAP2", "source": 1 }, + { "begin": 13745, "end": 13818, "name": "POP", "source": 1 }, + { + "begin": 13827, + "end": 13920, + "name": "PUSH [tag]", + "source": 1, + "value": "358" + }, + { "begin": 13916, "end": 13919, "name": "DUP3", "source": 1 }, + { + "begin": 13827, + "end": 13920, + "name": "PUSH [tag]", + "source": 1, + "value": "189" + }, + { + "begin": 13827, + "end": 13920, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 13827, + "end": 13920, + "name": "tag", + "source": 1, + "value": "358" + }, + { "begin": 13827, "end": 13920, "name": "JUMPDEST", "source": 1 }, + { + "begin": 13945, + "end": 13947, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 13940, "end": 13943, "name": "DUP3", "source": 1 }, + { "begin": 13936, "end": 13948, "name": "ADD", "source": 1 }, + { "begin": 13929, "end": 13948, "name": "SWAP1", "source": 1 }, + { "begin": 13929, "end": 13948, "name": "POP", "source": 1 }, + { "begin": 13589, "end": 13954, "name": "SWAP2", "source": 1 }, + { "begin": 13589, "end": 13954, "name": "SWAP1", "source": 1 }, + { "begin": 13589, "end": 13954, "name": "POP", "source": 1 }, + { + "begin": 13589, + "end": 13954, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 13960, + "end": 14379, + "name": "tag", + "source": 1, + "value": "53" + }, + { "begin": 13960, "end": 14379, "name": "JUMPDEST", "source": 1 }, + { + "begin": 14126, + "end": 14130, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 14164, + "end": 14166, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 14153, "end": 14162, "name": "DUP3", "source": 1 }, + { "begin": 14149, "end": 14167, "name": "ADD", "source": 1 }, + { "begin": 14141, "end": 14167, "name": "SWAP1", "source": 1 }, + { "begin": 14141, "end": 14167, "name": "POP", "source": 1 }, + { "begin": 14213, "end": 14222, "name": "DUP2", "source": 1 }, + { "begin": 14207, "end": 14211, "name": "DUP2", "source": 1 }, + { "begin": 14203, "end": 14223, "name": "SUB", "source": 1 }, + { + "begin": 14199, + "end": 14200, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 14188, "end": 14197, "name": "DUP4", "source": 1 }, + { "begin": 14184, "end": 14201, "name": "ADD", "source": 1 }, + { "begin": 14177, "end": 14224, "name": "MSTORE", "source": 1 }, + { + "begin": 14241, + "end": 14372, + "name": "PUSH [tag]", + "source": 1, + "value": "360" + }, + { "begin": 14367, "end": 14371, "name": "DUP2", "source": 1 }, + { + "begin": 14241, + "end": 14372, + "name": "PUSH [tag]", + "source": 1, + "value": "190" + }, + { + "begin": 14241, + "end": 14372, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 14241, + "end": 14372, + "name": "tag", + "source": 1, + "value": "360" + }, + { "begin": 14241, "end": 14372, "name": "JUMPDEST", "source": 1 }, + { "begin": 14233, "end": 14372, "name": "SWAP1", "source": 1 }, + { "begin": 14233, "end": 14372, "name": "POP", "source": 1 }, + { "begin": 13960, "end": 14379, "name": "SWAP2", "source": 1 }, + { "begin": 13960, "end": 14379, "name": "SWAP1", "source": 1 }, + { "begin": 13960, "end": 14379, "name": "POP", "source": 1 }, + { + "begin": 13960, + "end": 14379, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 14385, + "end": 14565, + "name": "tag", + "source": 1, + "value": "191" + }, + { "begin": 14385, "end": 14565, "name": "JUMPDEST", "source": 1 }, + { + "begin": 14525, + "end": 14557, + "name": "PUSH", + "source": 1, + "value": "656C6C6970746963206375727665206164646974696F6E206661696C65640000" + }, + { + "begin": 14521, + "end": 14522, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 14513, "end": 14519, "name": "DUP3", "source": 1 }, + { "begin": 14509, "end": 14523, "name": "ADD", "source": 1 }, + { "begin": 14502, "end": 14558, "name": "MSTORE", "source": 1 }, + { "begin": 14385, "end": 14565, "name": "POP", "source": 1 }, + { + "begin": 14385, + "end": 14565, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 14571, + "end": 14937, + "name": "tag", + "source": 1, + "value": "192" + }, + { "begin": 14571, "end": 14937, "name": "JUMPDEST", "source": 1 }, + { + "begin": 14713, + "end": 14716, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 14734, + "end": 14801, + "name": "PUSH [tag]", + "source": 1, + "value": "363" + }, + { + "begin": 14798, + "end": 14800, + "name": "PUSH", + "source": 1, + "value": "1E" + }, + { "begin": 14793, "end": 14796, "name": "DUP4", "source": 1 }, + { + "begin": 14734, + "end": 14801, + "name": "PUSH [tag]", + "source": 1, + "value": "186" + }, + { + "begin": 14734, + "end": 14801, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 14734, + "end": 14801, + "name": "tag", + "source": 1, + "value": "363" + }, + { "begin": 14734, "end": 14801, "name": "JUMPDEST", "source": 1 }, + { "begin": 14727, "end": 14801, "name": "SWAP2", "source": 1 }, + { "begin": 14727, "end": 14801, "name": "POP", "source": 1 }, + { + "begin": 14810, + "end": 14903, + "name": "PUSH [tag]", + "source": 1, + "value": "364" + }, + { "begin": 14899, "end": 14902, "name": "DUP3", "source": 1 }, + { + "begin": 14810, + "end": 14903, + "name": "PUSH [tag]", + "source": 1, + "value": "191" + }, + { + "begin": 14810, + "end": 14903, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 14810, + "end": 14903, + "name": "tag", + "source": 1, + "value": "364" + }, + { "begin": 14810, "end": 14903, "name": "JUMPDEST", "source": 1 }, + { + "begin": 14928, + "end": 14930, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 14923, "end": 14926, "name": "DUP3", "source": 1 }, + { "begin": 14919, "end": 14931, "name": "ADD", "source": 1 }, + { "begin": 14912, "end": 14931, "name": "SWAP1", "source": 1 }, + { "begin": 14912, "end": 14931, "name": "POP", "source": 1 }, + { "begin": 14571, "end": 14937, "name": "SWAP2", "source": 1 }, + { "begin": 14571, "end": 14937, "name": "SWAP1", "source": 1 }, + { "begin": 14571, "end": 14937, "name": "POP", "source": 1 }, + { + "begin": 14571, + "end": 14937, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 14943, + "end": 15362, + "name": "tag", + "source": 1, + "value": "91" + }, + { "begin": 14943, "end": 15362, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15109, + "end": 15113, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 15147, + "end": 15149, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 15136, "end": 15145, "name": "DUP3", "source": 1 }, + { "begin": 15132, "end": 15150, "name": "ADD", "source": 1 }, + { "begin": 15124, "end": 15150, "name": "SWAP1", "source": 1 }, + { "begin": 15124, "end": 15150, "name": "POP", "source": 1 }, + { "begin": 15196, "end": 15205, "name": "DUP2", "source": 1 }, + { "begin": 15190, "end": 15194, "name": "DUP2", "source": 1 }, + { "begin": 15186, "end": 15206, "name": "SUB", "source": 1 }, + { + "begin": 15182, + "end": 15183, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 15171, "end": 15180, "name": "DUP4", "source": 1 }, + { "begin": 15167, "end": 15184, "name": "ADD", "source": 1 }, + { "begin": 15160, "end": 15207, "name": "MSTORE", "source": 1 }, + { + "begin": 15224, + "end": 15355, + "name": "PUSH [tag]", + "source": 1, + "value": "366" + }, + { "begin": 15350, "end": 15354, "name": "DUP2", "source": 1 }, + { + "begin": 15224, + "end": 15355, + "name": "PUSH [tag]", + "source": 1, + "value": "192" + }, + { + "begin": 15224, + "end": 15355, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 15224, + "end": 15355, + "name": "tag", + "source": 1, + "value": "366" + }, + { "begin": 15224, "end": 15355, "name": "JUMPDEST", "source": 1 }, + { "begin": 15216, "end": 15355, "name": "SWAP1", "source": 1 }, + { "begin": 15216, "end": 15355, "name": "POP", "source": 1 }, + { "begin": 14943, "end": 15362, "name": "SWAP2", "source": 1 }, + { "begin": 14943, "end": 15362, "name": "SWAP1", "source": 1 }, + { "begin": 14943, "end": 15362, "name": "POP", "source": 1 }, + { + "begin": 14943, + "end": 15362, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 15368, + "end": 15464, + "name": "tag", + "source": 1, + "value": "193" + }, + { "begin": 15368, "end": 15464, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15402, + "end": 15410, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 15451, "end": 15456, "name": "DUP2", "source": 1 }, + { + "begin": 15446, + "end": 15449, + "name": "PUSH", + "source": 1, + "value": "E0" + }, + { "begin": 15442, "end": 15457, "name": "SHL", "source": 1 }, + { "begin": 15421, "end": 15457, "name": "SWAP1", "source": 1 }, + { "begin": 15421, "end": 15457, "name": "POP", "source": 1 }, + { "begin": 15368, "end": 15464, "name": "SWAP2", "source": 1 }, + { "begin": 15368, "end": 15464, "name": "SWAP1", "source": 1 }, + { "begin": 15368, "end": 15464, "name": "POP", "source": 1 }, + { + "begin": 15368, + "end": 15464, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 15470, + "end": 15564, + "name": "tag", + "source": 1, + "value": "194" + }, + { "begin": 15470, "end": 15564, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15508, + "end": 15515, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 15537, + "end": 15558, + "name": "PUSH [tag]", + "source": 1, + "value": "369" + }, + { "begin": 15552, "end": 15557, "name": "DUP3", "source": 1 }, + { + "begin": 15537, + "end": 15558, + "name": "PUSH [tag]", + "source": 1, + "value": "193" + }, + { + "begin": 15537, + "end": 15558, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 15537, + "end": 15558, + "name": "tag", + "source": 1, + "value": "369" + }, + { "begin": 15537, "end": 15558, "name": "JUMPDEST", "source": 1 }, + { "begin": 15526, "end": 15558, "name": "SWAP1", "source": 1 }, + { "begin": 15526, "end": 15558, "name": "POP", "source": 1 }, + { "begin": 15470, "end": 15564, "name": "SWAP2", "source": 1 }, + { "begin": 15470, "end": 15564, "name": "SWAP1", "source": 1 }, + { "begin": 15470, "end": 15564, "name": "POP", "source": 1 }, + { + "begin": 15470, + "end": 15564, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 15570, + "end": 15723, + "name": "tag", + "source": 1, + "value": "195" + }, + { "begin": 15570, "end": 15723, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15673, + "end": 15716, + "name": "PUSH [tag]", + "source": 1, + "value": "371" + }, + { + "begin": 15692, + "end": 15715, + "name": "PUSH [tag]", + "source": 1, + "value": "372" + }, + { "begin": 15709, "end": 15714, "name": "DUP3", "source": 1 }, + { + "begin": 15692, + "end": 15715, + "name": "PUSH [tag]", + "source": 1, + "value": "148" + }, + { + "begin": 15692, + "end": 15715, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 15692, + "end": 15715, + "name": "tag", + "source": 1, + "value": "372" + }, + { "begin": 15692, "end": 15715, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15673, + "end": 15716, + "name": "PUSH [tag]", + "source": 1, + "value": "194" + }, + { + "begin": 15673, + "end": 15716, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 15673, + "end": 15716, + "name": "tag", + "source": 1, + "value": "371" + }, + { "begin": 15673, "end": 15716, "name": "JUMPDEST", "source": 1 }, + { "begin": 15668, "end": 15671, "name": "DUP3", "source": 1 }, + { "begin": 15661, "end": 15717, "name": "MSTORE", "source": 1 }, + { "begin": 15570, "end": 15723, "name": "POP", "source": 1 }, + { "begin": 15570, "end": 15723, "name": "POP", "source": 1 }, + { + "begin": 15570, + "end": 15723, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 15729, + "end": 15808, + "name": "tag", + "source": 1, + "value": "196" + }, + { "begin": 15729, "end": 15808, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15768, + "end": 15775, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 15797, "end": 15802, "name": "DUP2", "source": 1 }, + { "begin": 15786, "end": 15802, "name": "SWAP1", "source": 1 }, + { "begin": 15786, "end": 15802, "name": "POP", "source": 1 }, + { "begin": 15729, "end": 15808, "name": "SWAP2", "source": 1 }, + { "begin": 15729, "end": 15808, "name": "SWAP1", "source": 1 }, + { "begin": 15729, "end": 15808, "name": "POP", "source": 1 }, + { + "begin": 15729, + "end": 15808, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 15814, + "end": 15971, + "name": "tag", + "source": 1, + "value": "197" + }, + { "begin": 15814, "end": 15971, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15919, + "end": 15964, + "name": "PUSH [tag]", + "source": 1, + "value": "375" + }, + { + "begin": 15939, + "end": 15963, + "name": "PUSH [tag]", + "source": 1, + "value": "376" + }, + { "begin": 15957, "end": 15962, "name": "DUP3", "source": 1 }, + { + "begin": 15939, + "end": 15963, + "name": "PUSH [tag]", + "source": 1, + "value": "158" + }, + { + "begin": 15939, + "end": 15963, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 15939, + "end": 15963, + "name": "tag", + "source": 1, + "value": "376" + }, + { "begin": 15939, "end": 15963, "name": "JUMPDEST", "source": 1 }, + { + "begin": 15919, + "end": 15964, + "name": "PUSH [tag]", + "source": 1, + "value": "196" + }, + { + "begin": 15919, + "end": 15964, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 15919, + "end": 15964, + "name": "tag", + "source": 1, + "value": "375" + }, + { "begin": 15919, "end": 15964, "name": "JUMPDEST", "source": 1 }, + { "begin": 15914, "end": 15917, "name": "DUP3", "source": 1 }, + { "begin": 15907, "end": 15965, "name": "MSTORE", "source": 1 }, + { "begin": 15814, "end": 15971, "name": "POP", "source": 1 }, + { "begin": 15814, "end": 15971, "name": "POP", "source": 1 }, + { + "begin": 15814, + "end": 15971, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 15977, + "end": 16055, + "name": "tag", + "source": 1, + "value": "198" + }, + { "begin": 15977, "end": 16055, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16015, + "end": 16022, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 16044, "end": 16049, "name": "DUP2", "source": 1 }, + { "begin": 16033, "end": 16049, "name": "SWAP1", "source": 1 }, + { "begin": 16033, "end": 16049, "name": "POP", "source": 1 }, + { "begin": 15977, "end": 16055, "name": "SWAP2", "source": 1 }, + { "begin": 15977, "end": 16055, "name": "SWAP1", "source": 1 }, + { "begin": 15977, "end": 16055, "name": "POP", "source": 1 }, + { + "begin": 15977, + "end": 16055, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 16061, + "end": 16214, + "name": "tag", + "source": 1, + "value": "199" + }, + { "begin": 16061, "end": 16214, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16164, + "end": 16207, + "name": "PUSH [tag]", + "source": 1, + "value": "379" + }, + { + "begin": 16183, + "end": 16206, + "name": "PUSH [tag]", + "source": 1, + "value": "380" + }, + { "begin": 16200, "end": 16205, "name": "DUP3", "source": 1 }, + { + "begin": 16183, + "end": 16206, + "name": "PUSH [tag]", + "source": 1, + "value": "167" + }, + { + "begin": 16183, + "end": 16206, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 16183, + "end": 16206, + "name": "tag", + "source": 1, + "value": "380" + }, + { "begin": 16183, "end": 16206, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16164, + "end": 16207, + "name": "PUSH [tag]", + "source": 1, + "value": "198" + }, + { + "begin": 16164, + "end": 16207, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 16164, + "end": 16207, + "name": "tag", + "source": 1, + "value": "379" + }, + { "begin": 16164, "end": 16207, "name": "JUMPDEST", "source": 1 }, + { "begin": 16159, "end": 16162, "name": "DUP3", "source": 1 }, + { "begin": 16152, "end": 16208, "name": "MSTORE", "source": 1 }, + { "begin": 16061, "end": 16214, "name": "POP", "source": 1 }, + { "begin": 16061, "end": 16214, "name": "POP", "source": 1 }, + { + "begin": 16061, + "end": 16214, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 16220, + "end": 16316, + "name": "tag", + "source": 1, + "value": "200" + }, + { "begin": 16220, "end": 16316, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16254, + "end": 16262, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 16303, "end": 16308, "name": "DUP2", "source": 1 }, + { + "begin": 16298, + "end": 16301, + "name": "PUSH", + "source": 1, + "value": "F8" + }, + { "begin": 16294, "end": 16309, "name": "SHL", "source": 1 }, + { "begin": 16273, "end": 16309, "name": "SWAP1", "source": 1 }, + { "begin": 16273, "end": 16309, "name": "POP", "source": 1 }, + { "begin": 16220, "end": 16316, "name": "SWAP2", "source": 1 }, + { "begin": 16220, "end": 16316, "name": "SWAP1", "source": 1 }, + { "begin": 16220, "end": 16316, "name": "POP", "source": 1 }, + { + "begin": 16220, + "end": 16316, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 16322, + "end": 16415, + "name": "tag", + "source": 1, + "value": "201" + }, + { "begin": 16322, "end": 16415, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16359, + "end": 16366, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 16388, + "end": 16409, + "name": "PUSH [tag]", + "source": 1, + "value": "383" + }, + { "begin": 16403, "end": 16408, "name": "DUP3", "source": 1 }, + { + "begin": 16388, + "end": 16409, + "name": "PUSH [tag]", + "source": 1, + "value": "200" + }, + { + "begin": 16388, + "end": 16409, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 16388, + "end": 16409, + "name": "tag", + "source": 1, + "value": "383" + }, + { "begin": 16388, "end": 16409, "name": "JUMPDEST", "source": 1 }, + { "begin": 16377, "end": 16409, "name": "SWAP1", "source": 1 }, + { "begin": 16377, "end": 16409, "name": "POP", "source": 1 }, + { "begin": 16322, "end": 16415, "name": "SWAP2", "source": 1 }, + { "begin": 16322, "end": 16415, "name": "SWAP1", "source": 1 }, + { "begin": 16322, "end": 16415, "name": "POP", "source": 1 }, + { + "begin": 16322, + "end": 16415, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 16421, + "end": 16516, + "name": "tag", + "source": 1, + "value": "202" + }, + { "begin": 16421, "end": 16516, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16457, + "end": 16464, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 16486, + "end": 16510, + "name": "PUSH [tag]", + "source": 1, + "value": "385" + }, + { "begin": 16504, "end": 16509, "name": "DUP3", "source": 1 }, + { + "begin": 16486, + "end": 16510, + "name": "PUSH [tag]", + "source": 1, + "value": "201" + }, + { + "begin": 16486, + "end": 16510, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 16486, + "end": 16510, + "name": "tag", + "source": 1, + "value": "385" + }, + { "begin": 16486, "end": 16510, "name": "JUMPDEST", "source": 1 }, + { "begin": 16475, "end": 16510, "name": "SWAP1", "source": 1 }, + { "begin": 16475, "end": 16510, "name": "POP", "source": 1 }, + { "begin": 16421, "end": 16516, "name": "SWAP2", "source": 1 }, + { "begin": 16421, "end": 16516, "name": "SWAP1", "source": 1 }, + { "begin": 16421, "end": 16516, "name": "POP", "source": 1 }, + { + "begin": 16421, + "end": 16516, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 16522, + "end": 16667, + "name": "tag", + "source": 1, + "value": "203" + }, + { "begin": 16522, "end": 16667, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16621, + "end": 16660, + "name": "PUSH [tag]", + "source": 1, + "value": "387" + }, + { + "begin": 16638, + "end": 16659, + "name": "PUSH [tag]", + "source": 1, + "value": "388" + }, + { "begin": 16653, "end": 16658, "name": "DUP3", "source": 1 }, + { + "begin": 16638, + "end": 16659, + "name": "PUSH [tag]", + "source": 1, + "value": "172" + }, + { + "begin": 16638, + "end": 16659, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 16638, + "end": 16659, + "name": "tag", + "source": 1, + "value": "388" + }, + { "begin": 16638, "end": 16659, "name": "JUMPDEST", "source": 1 }, + { + "begin": 16621, + "end": 16660, + "name": "PUSH [tag]", + "source": 1, + "value": "202" + }, + { + "begin": 16621, + "end": 16660, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 16621, + "end": 16660, + "name": "tag", + "source": 1, + "value": "387" + }, + { "begin": 16621, "end": 16660, "name": "JUMPDEST", "source": 1 }, + { "begin": 16616, "end": 16619, "name": "DUP3", "source": 1 }, + { "begin": 16609, "end": 16661, "name": "MSTORE", "source": 1 }, + { "begin": 16522, "end": 16667, "name": "POP", "source": 1 }, + { "begin": 16522, "end": 16667, "name": "POP", "source": 1 }, + { + "begin": 16522, + "end": 16667, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 16673, + "end": 18170, + "name": "tag", + "source": 1, + "value": "139" + }, + { "begin": 16673, "end": 18170, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17025, + "end": 17028, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 17040, + "end": 17113, + "name": "PUSH [tag]", + "source": 1, + "value": "390" + }, + { "begin": 17109, "end": 17112, "name": "DUP3", "source": 1 }, + { "begin": 17100, "end": 17106, "name": "DUP14", "source": 1 }, + { + "begin": 17040, + "end": 17113, + "name": "PUSH [tag]", + "source": 1, + "value": "195" + }, + { + "begin": 17040, + "end": 17113, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17040, + "end": 17113, + "name": "tag", + "source": 1, + "value": "390" + }, + { "begin": 17040, "end": 17113, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17138, + "end": 17139, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 17133, "end": 17136, "name": "DUP3", "source": 1 }, + { "begin": 17129, "end": 17140, "name": "ADD", "source": 1 }, + { "begin": 17122, "end": 17140, "name": "SWAP2", "source": 1 }, + { "begin": 17122, "end": 17140, "name": "POP", "source": 1 }, + { + "begin": 17150, + "end": 17225, + "name": "PUSH [tag]", + "source": 1, + "value": "391" + }, + { "begin": 17221, "end": 17224, "name": "DUP3", "source": 1 }, + { "begin": 17212, "end": 17218, "name": "DUP13", "source": 1 }, + { + "begin": 17150, + "end": 17225, + "name": "PUSH [tag]", + "source": 1, + "value": "197" + }, + { + "begin": 17150, + "end": 17225, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17150, + "end": 17225, + "name": "tag", + "source": 1, + "value": "391" + }, + { "begin": 17150, "end": 17225, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17250, + "end": 17252, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 17245, "end": 17248, "name": "DUP3", "source": 1 }, + { "begin": 17241, "end": 17253, "name": "ADD", "source": 1 }, + { "begin": 17234, "end": 17253, "name": "SWAP2", "source": 1 }, + { "begin": 17234, "end": 17253, "name": "POP", "source": 1 }, + { + "begin": 17263, + "end": 17338, + "name": "PUSH [tag]", + "source": 1, + "value": "392" + }, + { "begin": 17334, "end": 17337, "name": "DUP3", "source": 1 }, + { "begin": 17325, "end": 17331, "name": "DUP12", "source": 1 }, + { + "begin": 17263, + "end": 17338, + "name": "PUSH [tag]", + "source": 1, + "value": "197" + }, + { + "begin": 17263, + "end": 17338, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17263, + "end": 17338, + "name": "tag", + "source": 1, + "value": "392" + }, + { "begin": 17263, "end": 17338, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17363, + "end": 17365, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 17358, "end": 17361, "name": "DUP3", "source": 1 }, + { "begin": 17354, "end": 17366, "name": "ADD", "source": 1 }, + { "begin": 17347, "end": 17366, "name": "SWAP2", "source": 1 }, + { "begin": 17347, "end": 17366, "name": "POP", "source": 1 }, + { + "begin": 17376, + "end": 17451, + "name": "PUSH [tag]", + "source": 1, + "value": "393" + }, + { "begin": 17447, "end": 17450, "name": "DUP3", "source": 1 }, + { "begin": 17438, "end": 17444, "name": "DUP11", "source": 1 }, + { + "begin": 17376, + "end": 17451, + "name": "PUSH [tag]", + "source": 1, + "value": "197" + }, + { + "begin": 17376, + "end": 17451, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17376, + "end": 17451, + "name": "tag", + "source": 1, + "value": "393" + }, + { "begin": 17376, "end": 17451, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17476, + "end": 17478, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 17471, "end": 17474, "name": "DUP3", "source": 1 }, + { "begin": 17467, "end": 17479, "name": "ADD", "source": 1 }, + { "begin": 17460, "end": 17479, "name": "SWAP2", "source": 1 }, + { "begin": 17460, "end": 17479, "name": "POP", "source": 1 }, + { + "begin": 17489, + "end": 17564, + "name": "PUSH [tag]", + "source": 1, + "value": "394" + }, + { "begin": 17560, "end": 17563, "name": "DUP3", "source": 1 }, + { "begin": 17551, "end": 17557, "name": "DUP10", "source": 1 }, + { + "begin": 17489, + "end": 17564, + "name": "PUSH [tag]", + "source": 1, + "value": "197" + }, + { + "begin": 17489, + "end": 17564, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17489, + "end": 17564, + "name": "tag", + "source": 1, + "value": "394" + }, + { "begin": 17489, "end": 17564, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17589, + "end": 17591, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 17584, "end": 17587, "name": "DUP3", "source": 1 }, + { "begin": 17580, "end": 17592, "name": "ADD", "source": 1 }, + { "begin": 17573, "end": 17592, "name": "SWAP2", "source": 1 }, + { "begin": 17573, "end": 17592, "name": "POP", "source": 1 }, + { + "begin": 17602, + "end": 17677, + "name": "PUSH [tag]", + "source": 1, + "value": "395" + }, + { "begin": 17673, "end": 17676, "name": "DUP3", "source": 1 }, + { "begin": 17664, "end": 17670, "name": "DUP9", "source": 1 }, + { + "begin": 17602, + "end": 17677, + "name": "PUSH [tag]", + "source": 1, + "value": "197" + }, + { + "begin": 17602, + "end": 17677, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17602, + "end": 17677, + "name": "tag", + "source": 1, + "value": "395" + }, + { "begin": 17602, "end": 17677, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17702, + "end": 17704, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 17697, "end": 17700, "name": "DUP3", "source": 1 }, + { "begin": 17693, "end": 17705, "name": "ADD", "source": 1 }, + { "begin": 17686, "end": 17705, "name": "SWAP2", "source": 1 }, + { "begin": 17686, "end": 17705, "name": "POP", "source": 1 }, + { + "begin": 17715, + "end": 17790, + "name": "PUSH [tag]", + "source": 1, + "value": "396" + }, + { "begin": 17786, "end": 17789, "name": "DUP3", "source": 1 }, + { "begin": 17777, "end": 17783, "name": "DUP8", "source": 1 }, + { + "begin": 17715, + "end": 17790, + "name": "PUSH [tag]", + "source": 1, + "value": "197" + }, + { + "begin": 17715, + "end": 17790, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17715, + "end": 17790, + "name": "tag", + "source": 1, + "value": "396" + }, + { "begin": 17715, "end": 17790, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17815, + "end": 17817, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 17810, "end": 17813, "name": "DUP3", "source": 1 }, + { "begin": 17806, "end": 17818, "name": "ADD", "source": 1 }, + { "begin": 17799, "end": 17818, "name": "SWAP2", "source": 1 }, + { "begin": 17799, "end": 17818, "name": "POP", "source": 1 }, + { + "begin": 17828, + "end": 17901, + "name": "PUSH [tag]", + "source": 1, + "value": "397" + }, + { "begin": 17897, "end": 17900, "name": "DUP3", "source": 1 }, + { "begin": 17888, "end": 17894, "name": "DUP7", "source": 1 }, + { + "begin": 17828, + "end": 17901, + "name": "PUSH [tag]", + "source": 1, + "value": "199" + }, + { + "begin": 17828, + "end": 17901, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17828, + "end": 17901, + "name": "tag", + "source": 1, + "value": "397" + }, + { "begin": 17828, "end": 17901, "name": "JUMPDEST", "source": 1 }, + { + "begin": 17926, + "end": 17927, + "name": "PUSH", + "source": 1, + "value": "8" + }, + { "begin": 17921, "end": 17924, "name": "DUP3", "source": 1 }, + { "begin": 17917, "end": 17928, "name": "ADD", "source": 1 }, + { "begin": 17910, "end": 17928, "name": "SWAP2", "source": 1 }, + { "begin": 17910, "end": 17928, "name": "POP", "source": 1 }, + { + "begin": 17938, + "end": 18011, + "name": "PUSH [tag]", + "source": 1, + "value": "398" + }, + { "begin": 18007, "end": 18010, "name": "DUP3", "source": 1 }, + { "begin": 17998, "end": 18004, "name": "DUP6", "source": 1 }, + { + "begin": 17938, + "end": 18011, + "name": "PUSH [tag]", + "source": 1, + "value": "199" + }, + { + "begin": 17938, + "end": 18011, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 17938, + "end": 18011, + "name": "tag", + "source": 1, + "value": "398" + }, + { "begin": 17938, "end": 18011, "name": "JUMPDEST", "source": 1 }, + { + "begin": 18036, + "end": 18037, + "name": "PUSH", + "source": 1, + "value": "8" + }, + { "begin": 18031, "end": 18034, "name": "DUP3", "source": 1 }, + { "begin": 18027, "end": 18038, "name": "ADD", "source": 1 }, + { "begin": 18020, "end": 18038, "name": "SWAP2", "source": 1 }, + { "begin": 18020, "end": 18038, "name": "POP", "source": 1 }, + { + "begin": 18048, + "end": 18117, + "name": "PUSH [tag]", + "source": 1, + "value": "399" + }, + { "begin": 18113, "end": 18116, "name": "DUP3", "source": 1 }, + { "begin": 18104, "end": 18110, "name": "DUP5", "source": 1 }, + { + "begin": 18048, + "end": 18117, + "name": "PUSH [tag]", + "source": 1, + "value": "203" + }, + { + "begin": 18048, + "end": 18117, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 18048, + "end": 18117, + "name": "tag", + "source": 1, + "value": "399" + }, + { "begin": 18048, "end": 18117, "name": "JUMPDEST", "source": 1 }, + { + "begin": 18142, + "end": 18143, + "name": "PUSH", + "source": 1, + "value": "1" + }, + { "begin": 18137, "end": 18140, "name": "DUP3", "source": 1 }, + { "begin": 18133, "end": 18144, "name": "ADD", "source": 1 }, + { "begin": 18126, "end": 18144, "name": "SWAP2", "source": 1 }, + { "begin": 18126, "end": 18144, "name": "POP", "source": 1 }, + { "begin": 18161, "end": 18164, "name": "DUP2", "source": 1 }, + { "begin": 18154, "end": 18164, "name": "SWAP1", "source": 1 }, + { "begin": 18154, "end": 18164, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "SWAP12", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "SWAP11", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { "begin": 16673, "end": 18170, "name": "POP", "source": 1 }, + { + "begin": 16673, + "end": 18170, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "blake2Check()": "60012e3a", + "blake2Wrapper(uint32,bytes32[2],bytes32[4],bytes8[2],bool)": "cb5c707c", + "bn128AdditionCheck()": "8588cc9c", + "bn128MultiplyCheck()": "c9a6e474", + "bn128PairingCheck()": "503a6772", + "modExpChecker()": "98576248", + "modExpWrapper(uint256,uint256,uint256)": "ab26c7f8", + "ripemd160Check()": "28820a24" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"blake2Check\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"rounds\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[2]\",\"name\":\"h\",\"type\":\"bytes32[2]\"},{\"internalType\":\"bytes32[4]\",\"name\":\"m\",\"type\":\"bytes32[4]\"},{\"internalType\":\"bytes8[2]\",\"name\":\"t\",\"type\":\"bytes8[2]\"},{\"internalType\":\"bool\",\"name\":\"f\",\"type\":\"bool\"}],\"name\":\"blake2Wrapper\",\"outputs\":[{\"internalType\":\"bytes32[2]\",\"name\":\"\",\"type\":\"bytes32[2]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bn128AdditionCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bn128MultiplyCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bn128PairingCheck\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"modExpChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_b\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_e\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_m\",\"type\":\"uint256\"}],\"name\":\"modExpWrapper\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ripemd160Check\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"HasherChecker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xe466e876bb1937396c6663348629b95c58447800486e6d4ae9a5dcc34efa32a0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cc090d8b538ba06fcb4d589c17961353ab36175055dcebacfcd888acf8c295fe\",\"dweb:/ipfs/QmdTyhSELcFgFts347KBvYmD5zGnYGLYpNJbciiChtkhrj\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract HasherChecker {\n function ripemd160Check() public pure {\n require(\n ripemd160(bytes(\"Hello World!\")) ==\n hex\"8476ee4631b9b30ac2754b0ee0c47e161d3f724c\"\n );\n }\n\n function bn128AdditionCheck() public {\n bool success;\n uint256[4] memory input = [\n 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703,\n 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915,\n 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9,\n 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x06 id of the bn256Add precompile\n // 0 number of ether to transfer\n // 128 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x06, 0, input, 128, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7,\n \"failed\"\n );\n require(\n result[1] ==\n 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204,\n \"failed\"\n );\n }\n\n function bn128MultiplyCheck() public {\n bool success;\n uint256[3] memory input = [\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6,\n 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000\n ];\n uint256[2] memory result;\n\n assembly {\n // 0x07 id of the bn256Mul precompile\n // 0 number of ether to transfer\n // 96 size of call parameters, i.e. 128 bytes total\n // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point\n success := call(not(0), 0x07, 0, input, 96, result, 64)\n }\n require(success, \"elliptic curve addition failed\");\n require(\n result[0] ==\n 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,\n \"failed\"\n );\n require(\n result[1] ==\n 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451,\n \"failed\"\n );\n }\n\n function bn128PairingCheck() public {\n uint256[12] memory input = [\n 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02,\n 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84,\n 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee,\n 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f,\n 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237,\n 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f,\n 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9,\n 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1,\n 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,\n 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed,\n 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,\n 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa\n ];\n uint256[1] memory result;\n bool success;\n assembly {\n // 0x08 id of the bn256CheckPairing precompile\n // 0 number of ether to transfer\n // 0 since we have an array of fixed length, our input starts in 0\n // 384 size of call parameters, i.e. 12*256 bits == 384 bytes\n // 32 size of result (one 32 byte boolean!)\n success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32)\n }\n require(success, \"elliptic curve pairing failed\");\n require(result[0] == 1, \"failed\");\n }\n\n function modExpWrapper(\n uint256 _b,\n uint256 _e,\n uint256 _m\n ) public returns (uint256 result) {\n assembly {\n // Free memory pointer\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), _b)\n mstore(add(pointer, 0x80), _e)\n\n mstore(add(pointer, 0xa0), _m)\n // Store the result\n let value := mload(0xc0)\n // Call the precompiled contract 0x05 = bigModExp\n if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {\n revert(0, 0)\n }\n result := mload(value)\n }\n }\n\n function modExpChecker() public {\n require(modExpWrapper(3, 5, 7) == 5);\n require(modExpWrapper(5, 7, 11) == 3);\n }\n\n function blake2Wrapper(\n uint32 rounds,\n bytes32[2] memory h,\n bytes32[4] memory m,\n bytes8[2] memory t,\n bool f\n ) public view returns (bytes32[2] memory) {\n bytes32[2] memory output;\n\n bytes memory args = abi.encodePacked(\n rounds,\n h[0],\n h[1],\n m[0],\n m[1],\n m[2],\n m[3],\n t[0],\n t[1],\n f\n );\n\n assembly {\n if iszero(\n staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40)\n ) {\n revert(0, 0)\n }\n }\n\n return output;\n }\n\n function blake2Check() public {\n uint32 rounds = 12;\n\n bytes32[2] memory h;\n h[\n 0\n ] = hex\"48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5\";\n h[\n 1\n ] = hex\"d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b\";\n\n bytes32[4] memory m;\n m[\n 0\n ] = hex\"6162630000000000000000000000000000000000000000000000000000000000\";\n m[\n 1\n ] = hex\"0000000000000000000000000000000000000000000000000000000000000000\";\n m[\n 2\n ] = hex\"0000000000000000000000000000000000000000000000000000000000000000\";\n m[\n 3\n ] = hex\"0000000000000000000000000000000000000000000000000000000000000000\";\n\n bytes8[2] memory t;\n t[0] = hex\"03000000\";\n t[1] = hex\"00000000\";\n\n bool f = true;\n\n // Expected output:\n // ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1\n // 7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923\n\n bytes32[2] memory result = blake2Wrapper(rounds, h, m, t, f);\n require(\n result[0] ==\n 0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1,\n \"failed\"\n );\n require(\n result[1] ==\n 0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923,\n \"failed\"\n );\n }\n}\n" +} diff --git a/tests/contracts/compiled/IERC20.json b/tests/contracts/compiled/IERC20.json new file mode 100644 index 0000000000..83fa8b6f21 --- /dev/null +++ b/tests/contracts/compiled/IERC20.json @@ -0,0 +1,263 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" } + ], + "name": "allowance", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "approve", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "name": "balanceOf", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "transfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "see https://github.com/ethereum/EIPs/issues/20copied from https://github.com/OpenZeppelin/openzeppelin-contracts Address : 0x0000000000000000000000000000000000000802", + "events": { + "Approval(address,address,uint256)": { + "details": "Event emited when an approval has been registered. Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "params": { + "owner": "address Owner of the tokens.", + "spender": "address Allowed spender.", + "value": "uint256 Amount of tokens approved." + } + }, + "Transfer(address,address,uint256)": { + "details": "Event emited when a transfer has been performed. Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "params": { + "from": "address The address sending the tokens", + "to": "address The address receiving the tokens.", + "value": "uint256 The amount of tokens transfered." + } + } + }, + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e", + "params": { + "owner": "address The address which owns the funds.", + "spender": "address The address which will spend the funds." + }, + "returns": { + "_0": "A uint256 specifying the amount of tokens still available for the spender." + } + }, + "approve(address,uint256)": { + "details": "Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3", + "params": { + "spender": "The address which will spend the funds.", + "value": "The amount of tokens to be spent." + }, + "returns": { "_0": "true, this cannot fail" } + }, + "balanceOf(address)": { + "details": "Gets the balance of the specified address. Selector: 70a08231", + "params": { "owner": "The address to query the balance of." }, + "returns": { + "_0": "An uint256 representing the amount owned by the passed address." + } + }, + "decimals()": { + "details": "Returns the decimals places of the token. Selector: 313ce567" + }, + "name()": { + "details": "Returns the name of the token. Selector: 06fdde03" + }, + "symbol()": { + "details": "Returns the symbol of the token. Selector: 95d89b41" + }, + "totalSupply()": { + "details": "Total number of tokens in existence Selector: 18160ddd" + }, + "transfer(address,uint256)": { + "details": "Transfer token for a specified address Selector: a9059cbb", + "params": { + "to": "The address to transfer to.", + "value": "The amount to be transferred." + }, + "returns": { + "_0": "true if the transfer was succesful, revert otherwise." + } + }, + "transferFrom(address,address,uint256)": { + "details": "Transfer tokens from one address to another Selector: 23b872dd", + "params": { + "from": "address The address which you want to send tokens from", + "to": "address The address which you want to transfer to", + "value": "uint256 the amount of tokens to be transferred" + }, + "returns": { + "_0": "true if the transfer was succesful, revert otherwise." + } + } + }, + "title": "ERC20 interface", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "name()": "06fdde03", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"see https://github.com/ethereum/EIPs/issues/20copied from https://github.com/OpenZeppelin/openzeppelin-contracts Address : 0x0000000000000000000000000000000000000802\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Event emited when an approval has been registered. Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\"params\":{\"owner\":\"address Owner of the tokens.\",\"spender\":\"address Allowed spender.\",\"value\":\"uint256 Amount of tokens approved.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Event emited when a transfer has been performed. Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\"params\":{\"from\":\"address The address sending the tokens\",\"to\":\"address The address receiving the tokens.\",\"value\":\"uint256 The amount of tokens transfered.\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"returns\":{\"_0\":\"A uint256 specifying the amount of tokens still available for the spender.\"}},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"true, this cannot fail\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address. Selector: 70a08231\",\"params\":{\"owner\":\"The address to query the balance of.\"},\"returns\":{\"_0\":\"An uint256 representing the amount owned by the passed address.\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token. Selector: 313ce567\"},\"name()\":{\"details\":\"Returns the name of the token. Selector: 06fdde03\"},\"symbol()\":{\"details\":\"Returns the symbol of the token. Selector: 95d89b41\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence Selector: 18160ddd\"},\"transfer(address,uint256)\":{\"details\":\"Transfer token for a specified address Selector: a9059cbb\",\"params\":{\"to\":\"The address to transfer to.\",\"value\":\"The amount to be transferred.\"},\"returns\":{\"_0\":\"true if the transfer was succesful, revert otherwise.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another Selector: 23b872dd\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"to\":\"address The address which you want to transfer to\",\"value\":\"uint256 the amount of tokens to be transferred\"},\"returns\":{\"_0\":\"true if the transfer was succesful, revert otherwise.\"}}},\"title\":\"ERC20 interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"IERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xece248e8bc2951b0f63e23cb5173ca8efb0d2733b042bcdb32b4e01c4231b42c\",\"urls\":[\"bzz-raw://c11987a04ac15b830ac8615284a30b6781cd7aecda5fc08c11f995a5e8ffb55f\",\"dweb:/ipfs/QmbKDPvdec5CFiwS2fQX2fkPYDC5QZTzV4yXrhRzY9a39S\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "pragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts\n * Address : 0x0000000000000000000000000000000000000802\n */\n \ninterface IERC20 {\n /**\n * @dev Returns the name of the token.\n * Selector: 06fdde03\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n * Selector: 95d89b41\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n * Selector: 313ce567\n */\n function decimals() external view returns (uint8);\n\n /**\n * @dev Total number of tokens in existence\n * Selector: 18160ddd\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Gets the balance of the specified address.\n * Selector: 70a08231\n * @param owner The address to query the balance of.\n * @return An uint256 representing the amount owned by the passed address.\n */\n function balanceOf(address owner) external view returns (uint256);\n\n /**\n * @dev Function to check the amount of tokens that an owner allowed to a spender.\n * Selector: dd62ed3e\n * @param owner address The address which owns the funds.\n * @param spender address The address which will spend the funds.\n * @return A uint256 specifying the amount of tokens still available for the spender.\n */\n function allowance(address owner, address spender)\n external view returns (uint256);\n\n /**\n * @dev Transfer token for a specified address\n * Selector: a9059cbb\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n * @return true if the transfer was succesful, revert otherwise.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n * Beware that changing an allowance with this method brings the risk that someone may use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * Selector: 095ea7b3\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return true, this cannot fail\n */\n function approve(address spender, uint256 value)\n external returns (bool);\n\n /**\n * @dev Transfer tokens from one address to another\n * Selector: 23b872dd\n * @param from address The address which you want to send tokens from\n * @param to address The address which you want to transfer to\n * @param value uint256 the amount of tokens to be transferred\n * @return true if the transfer was succesful, revert otherwise.\n */\n function transferFrom(address from, address to, uint256 value)\n external returns (bool);\n\n\n /**\n * @dev Event emited when a transfer has been performed.\n * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n * @param from address The address sending the tokens\n * @param to address The address receiving the tokens.\n * @param value uint256 The amount of tokens transfered.\n */\n event Transfer(\n address indexed from,\n address indexed to,\n uint256 value\n );\n\n /**\n * @dev Event emited when an approval has been registered.\n * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n * @param owner address Owner of the tokens.\n * @param spender address Allowed spender.\n * @param value uint256 Amount of tokens approved.\n */\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n}\n\n/**\n * @title Native currency wrapper interface.\n * @dev Allow compatibility with dApps expecting this precompile to be\n * a WETH-like contract.\n * Moonbase address : 0x0000000000000000000000000000000000000802\n */\ninterface WrappedNativeCurrency {\n /**\n * @dev Provide compatibility for contracts that expect wETH design.\n * Returns funds to sender as this precompile tokens and the native tokens are the same.\n * Selector: d0e30db0\n */\n function deposit() external payable;\n\n /**\n * @dev Provide compatibility for contracts that expect wETH design.\n * Does nothing.\n * Selector: 2e1a7d4d\n * @param value uint256 The amount to withdraw/unwrap.\n */\n function withdraw(uint256 value) external;\n\n /**\n * @dev Event emited when deposit() has been called.\n * Selector: e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\n * @param owner address Owner of the tokens\n * @param value uint256 The amount of tokens \"wrapped\".\n */\n event Deposit(\n address indexed owner,\n uint value\n );\n\n /**\n * @dev Event emited when withdraw(uint256) has been called.\n * Selector: 7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\n * @param owner address Owner of the tokens\n * @param value uint256 The amount of tokens \"unwrapped\".\n */\n event Withdrawal(\n address indexed owner,\n uint value\n );\n}" +} diff --git a/tests/contracts/compiled/Incrementer.json b/tests/contracts/compiled/Incrementer.json deleted file mode 100644 index 0d3c382df9..0000000000 --- a/tests/contracts/compiled/Incrementer.json +++ /dev/null @@ -1,1947 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063188b85b414610030575b600080fd5b61004a60048036038101906100459190610099565b610060565b60405161005791906100d1565b60405180910390f35b60008160008082825461007391906100ec565b925050819055506000549050919050565b6000813590506100938161017b565b92915050565b6000602082840312156100ab57600080fd5b60006100b984828501610084565b91505092915050565b6100cb81610142565b82525050565b60006020820190506100e660008301846100c2565b92915050565b60006100f782610142565b915061010283610142565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101375761013661014c565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61018481610142565b811461018f57600080fd5b5056fea26469706673582212205ac572598f4d79893dc041296111a23a36a22bbd00d4b1762e272c2342998ca464736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "uint256", "name": "num", "type": "uint256" } - ], - "name": "sum", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:210 contract Incrementer {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:210 contract Incrementer {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x188b85b4\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":89:204 function sum(uint256 num) public returns (uint256){... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":131:138 uint256 */\n 0x00\n /* \"main.sol\":163:166 num */\n dup2\n /* \"main.sol\":153:159 number */\n 0x00\n dup1\n /* \"main.sol\":153:166 number += num */\n dup3\n dup3\n sload\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n swap3\n pop\n pop\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":187:193 number */\n sload(0x00)\n /* \"main.sol\":180:193 return number */\n swap1\n pop\n /* \"main.sol\":89:204 function sum(uint256 num) public returns (uint256){... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_14:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_16\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_17\n jump\t// in\n tag_16:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_6:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_19\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_19:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_20\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_14\n jump\t// in\n tag_20:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_21:\n /* \"#utility.yul\":507:531 */\n tag_23\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_24\n jump\t// in\n tag_23:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_9:\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_26\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_21\n jump\t// in\n tag_26:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1077 */\n tag_12:\n 0x00\n /* \"#utility.yul\":831:851 */\n tag_28\n /* \"#utility.yul\":849:850 */\n dup3\n /* \"#utility.yul\":831:851 */\n tag_24\n jump\t// in\n tag_28:\n /* \"#utility.yul\":826:851 */\n swap2\n pop\n /* \"#utility.yul\":865:885 */\n tag_29\n /* \"#utility.yul\":883:884 */\n dup4\n /* \"#utility.yul\":865:885 */\n tag_24\n jump\t// in\n tag_29:\n /* \"#utility.yul\":860:885 */\n swap3\n pop\n /* \"#utility.yul\":1019:1020 */\n dup3\n /* \"#utility.yul\":951:1017 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":947:1021 */\n sub\n /* \"#utility.yul\":944:945 */\n dup3\n /* \"#utility.yul\":941:1022 */\n gt\n /* \"#utility.yul\":938:940 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":1025:1043 */\n tag_31\n tag_32\n jump\t// in\n tag_31:\n /* \"#utility.yul\":938:940 */\n tag_30:\n /* \"#utility.yul\":1069:1070 */\n dup3\n /* \"#utility.yul\":1066:1067 */\n dup3\n /* \"#utility.yul\":1062:1071 */\n add\n /* \"#utility.yul\":1055:1071 */\n swap1\n pop\n /* \"#utility.yul\":816:1077 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1083:1160 */\n tag_24:\n 0x00\n /* \"#utility.yul\":1149:1154 */\n dup2\n /* \"#utility.yul\":1138:1154 */\n swap1\n pop\n /* \"#utility.yul\":1128:1160 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1166:1346 */\n tag_32:\n /* \"#utility.yul\":1214:1291 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1211:1212 */\n 0x00\n /* \"#utility.yul\":1204:1292 */\n mstore\n /* \"#utility.yul\":1311:1315 */\n 0x11\n /* \"#utility.yul\":1308:1309 */\n 0x04\n /* \"#utility.yul\":1301:1316 */\n mstore\n /* \"#utility.yul\":1335:1339 */\n 0x24\n /* \"#utility.yul\":1332:1333 */\n 0x00\n /* \"#utility.yul\":1325:1340 */\n revert\n /* \"#utility.yul\":1352:1474 */\n tag_17:\n /* \"#utility.yul\":1425:1449 */\n tag_36\n /* \"#utility.yul\":1443:1448 */\n dup2\n /* \"#utility.yul\":1425:1449 */\n tag_24\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1418:1423 */\n dup2\n /* \"#utility.yul\":1415:1450 */\n eq\n /* \"#utility.yul\":1405:1407 */\n tag_37\n jumpi\n /* \"#utility.yul\":1464:1465 */\n 0x00\n /* \"#utility.yul\":1461:1462 */\n dup1\n /* \"#utility.yul\":1454:1466 */\n revert\n /* \"#utility.yul\":1405:1407 */\n tag_37:\n /* \"#utility.yul\":1395:1474 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205ac572598f4d79893dc041296111a23a36a22bbd00d4b1762e272c2342998ca464736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063188b85b414610030575b600080fd5b61004a60048036038101906100459190610099565b610060565b60405161005791906100d1565b60405180910390f35b60008160008082825461007391906100ec565b925050819055506000549050919050565b6000813590506100938161017b565b92915050565b6000602082840312156100ab57600080fd5b60006100b984828501610084565b91505092915050565b6100cb81610142565b82525050565b60006020820190506100e660008301846100c2565b92915050565b60006100f782610142565b915061010283610142565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101375761013661014c565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61018481610142565b811461018f57600080fd5b5056fea26469706673582212205ac572598f4d79893dc041296111a23a36a22bbd00d4b1762e272c2342998ca464736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C8 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x188B85B4 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x99 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xD1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP1 DUP3 DUP3 SLOAD PUSH2 0x73 SWAP2 SWAP1 PUSH2 0xEC JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP PUSH1 0x0 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x93 DUP2 PUSH2 0x17B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB9 DUP5 DUP3 DUP6 ADD PUSH2 0x84 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xCB DUP2 PUSH2 0x142 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE6 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF7 DUP3 PUSH2 0x142 JUMP JUMPDEST SWAP2 POP PUSH2 0x102 DUP4 PUSH2 0x142 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x137 JUMPI PUSH2 0x136 PUSH2 0x14C JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x184 DUP2 PUSH2 0x142 JUMP JUMPDEST DUP2 EQ PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS 0xC5 PUSH19 0x598F4D79893DC041296111A23A36A22BBD00D4 0xB1 PUSH23 0x2E272C2342998CA464736F6C6343000803003300000000 ", - "sourceMap": "34:176:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1477:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "59:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "69:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "91:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "78:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "78:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "69:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "134:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "107:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "107:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "107:33:1" - } - ] - }, - "name": "abi_decode_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "37:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "45:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:1", - "type": "" - } - ], - "src": "7:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "218:196:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "264:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "273:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "276:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "266:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "266:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "266:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "239:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "248:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "235:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "260:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "231:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "231:32:1" - }, - "nodeType": "YulIf", - "src": "228:2:1" - }, - { - "nodeType": "YulBlock", - "src": "290:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "305:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "319:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "309:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "334:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "369:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "380:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "365:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "389:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "344:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "344:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "334:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "188:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "199:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "211:6:1", - "type": "" - } - ], - "src": "152:262:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "485:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "502:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "525:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "507:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "507:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "495:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "495:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "495:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "473:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "480:3:1", - "type": "" - } - ], - "src": "420:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "642:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "652:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "664:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "675:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "660:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "660:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "652:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "732:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "756:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "741:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "741:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "688:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "688:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "688:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "614:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "626:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "637:4:1", - "type": "" - } - ], - "src": "544:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "816:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "826:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "849:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "831:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "831:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "826:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "860:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "883:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "865:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "865:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "860:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1023:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "1025:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1025:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1025:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "944:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "951:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1019:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "947:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "947:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "941:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "941:81:1" - }, - "nodeType": "YulIf", - "src": "938:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "1055:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1066:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1069:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1062:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1062:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "1055:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "803:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "806:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "812:3:1", - "type": "" - } - ], - "src": "772:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1128:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1138:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1149:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1138:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1110:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1120:7:1", - "type": "" - } - ], - "src": "1083:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1194:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1211:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1214:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1204:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1204:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1204:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1308:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1311:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1301:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1301:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1301:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1332:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1335:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1325:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1325:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1325:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1166:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1395:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1452:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1461:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1464:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1454:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1454:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1454:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1418:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1443:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1425:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1425:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1415:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1415:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1408:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1408:43:1" - }, - "nodeType": "YulIf", - "src": "1405:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1388:5:1", - "type": "" - } - ], - "src": "1352:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063188b85b414610030575b600080fd5b61004a60048036038101906100459190610099565b610060565b60405161005791906100d1565b60405180910390f35b60008160008082825461007391906100ec565b925050819055506000549050919050565b6000813590506100938161017b565b92915050565b6000602082840312156100ab57600080fd5b60006100b984828501610084565b91505092915050565b6100cb81610142565b82525050565b60006020820190506100e660008301846100c2565b92915050565b60006100f782610142565b915061010283610142565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101375761013661014c565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61018481610142565b811461018f57600080fd5b5056fea26469706673582212205ac572598f4d79893dc041296111a23a36a22bbd00d4b1762e272c2342998ca464736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x188B85B4 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x99 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xD1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP1 DUP3 DUP3 SLOAD PUSH2 0x73 SWAP2 SWAP1 PUSH2 0xEC JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP PUSH1 0x0 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x93 DUP2 PUSH2 0x17B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xB9 DUP5 DUP3 DUP6 ADD PUSH2 0x84 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xCB DUP2 PUSH2 0x142 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE6 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF7 DUP3 PUSH2 0x142 JUMP JUMPDEST SWAP2 POP PUSH2 0x102 DUP4 PUSH2 0x142 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x137 JUMPI PUSH2 0x136 PUSH2 0x14C JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x184 DUP2 PUSH2 0x142 JUMP JUMPDEST DUP2 EQ PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GAS 0xC5 PUSH19 0x598F4D79893DC041296111A23A36A22BBD00D4 0xB1 PUSH23 0x2E272C2342998CA464736F6C6343000803003300000000 ", - "sourceMap": "34:176:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;131:7;163:3;153:6;;:13;;;;;;;:::i;:::-;;;;;;;;187:6;;180:13;;89:115;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "91200", - "executionCost": "141", - "totalCost": "91341" - }, - "external": { "sum(uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 210, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 210, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 210, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 210, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 210, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 210, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 210, "name": "REVERT", "source": 0 }, - { "begin": 34, "end": 210, "name": "tag", "source": 0, "value": "1" }, - { "begin": 34, "end": 210, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 210, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 210, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 210, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 210, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212205ac572598f4d79893dc041296111a23a36a22bbd00d4b1762e272c2342998ca464736f6c63430008030033", - ".code": [ - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 210, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 210, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 210, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 210, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 210, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 210, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 210, "name": "REVERT", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 210, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 210, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 210, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 210, "name": "LT", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 210, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 210, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 34, "end": 210, "name": "SHR", "source": 0 }, - { "begin": 34, "end": 210, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "188B85B4" - }, - { "begin": 34, "end": 210, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 34, "end": 210, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 210, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 210, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 210, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 210, "name": "REVERT", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 89, "end": 204, "name": "JUMPDEST", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 89, - "end": 204, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 89, "end": 204, "name": "DUP1", "source": 0 }, - { "begin": 89, "end": 204, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 89, "end": 204, "name": "SUB", "source": 0 }, - { "begin": 89, "end": 204, "name": "DUP2", "source": 0 }, - { "begin": 89, "end": 204, "name": "ADD", "source": 0 }, - { "begin": 89, "end": 204, "name": "SWAP1", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 89, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 89, "end": 204, "name": "SWAP1", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 89, - "end": 204, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 89, - "end": 204, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 89, "end": 204, "name": "JUMPDEST", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 89, - "end": 204, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 89, - "end": 204, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 89, "end": 204, "name": "JUMPDEST", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 89, "end": 204, "name": "MLOAD", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 89, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 89, "end": 204, "name": "SWAP1", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 89, - "end": 204, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 89, - "end": 204, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 89, "end": 204, "name": "JUMPDEST", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 89, "end": 204, "name": "MLOAD", "source": 0 }, - { "begin": 89, "end": 204, "name": "DUP1", "source": 0 }, - { "begin": 89, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 89, "end": 204, "name": "SUB", "source": 0 }, - { "begin": 89, "end": 204, "name": "SWAP1", "source": 0 }, - { "begin": 89, "end": 204, "name": "RETURN", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 89, "end": 204, "name": "JUMPDEST", "source": 0 }, - { - "begin": 131, - "end": 138, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 163, "end": 166, "name": "DUP2", "source": 0 }, - { - "begin": 153, - "end": 159, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 153, "end": 159, "name": "DUP1", "source": 0 }, - { "begin": 153, "end": 166, "name": "DUP3", "source": 0 }, - { "begin": 153, "end": 166, "name": "DUP3", "source": 0 }, - { "begin": 153, "end": 166, "name": "SLOAD", "source": 0 }, - { - "begin": 153, - "end": 166, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 153, "end": 166, "name": "SWAP2", "source": 0 }, - { "begin": 153, "end": 166, "name": "SWAP1", "source": 0 }, - { - "begin": 153, - "end": 166, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 153, - "end": 166, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 153, - "end": 166, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 153, "end": 166, "name": "JUMPDEST", "source": 0 }, - { "begin": 153, "end": 166, "name": "SWAP3", "source": 0 }, - { "begin": 153, "end": 166, "name": "POP", "source": 0 }, - { "begin": 153, "end": 166, "name": "POP", "source": 0 }, - { "begin": 153, "end": 166, "name": "DUP2", "source": 0 }, - { "begin": 153, "end": 166, "name": "SWAP1", "source": 0 }, - { "begin": 153, "end": 166, "name": "SSTORE", "source": 0 }, - { "begin": 153, "end": 166, "name": "POP", "source": 0 }, - { - "begin": 187, - "end": 193, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 187, "end": 193, "name": "SLOAD", "source": 0 }, - { "begin": 180, "end": 193, "name": "SWAP1", "source": 0 }, - { "begin": 180, "end": 193, "name": "POP", "source": 0 }, - { "begin": 89, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 89, "end": 204, "name": "SWAP1", "source": 0 }, - { "begin": 89, "end": 204, "name": "POP", "source": 0 }, - { - "begin": 89, - "end": 204, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "16" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "6" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "9" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1077, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1077, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 831, - "end": 851, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 831, - "end": 851, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, - { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, - { "begin": 826, "end": 851, "name": "POP", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 865, - "end": 885, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 865, - "end": 885, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, - { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, - { "begin": 860, "end": 885, "name": "POP", "source": 1 }, - { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, - { - "begin": 951, - "end": 1017, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, - { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, - { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, - { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "31" - }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 1025, - "end": 1043, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1025, - "end": 1043, - "name": "tag", - "source": 1, - "value": "31" - }, - { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, - { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, - { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, - { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { - "begin": 816, - "end": 1077, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1083, - "end": 1160, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1083, - "end": 1160, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, - { - "begin": 1128, - "end": 1160, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1166, - "end": 1346, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1214, - "end": 1291, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1211, - "end": 1212, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, - { - "begin": 1311, - "end": 1315, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1308, - "end": 1309, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, - { - "begin": 1335, - "end": 1339, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1332, - "end": 1333, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, - { - "begin": 1352, - "end": 1474, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 1425, - "end": 1449, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1425, - "end": 1449, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, - { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, - { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, - { - "begin": 1464, - "end": 1465, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, - { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, - { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, - { - "begin": 1395, - "end": 1474, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "sum(uint256)": "188b85b4" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"}],\"name\":\"sum\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Incrementer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa5c4b90518b5568be87b2b28df4d947c87c4cbc4acf987f270c9675edf72e313\",\"urls\":[\"bzz-raw://a4f4ddfdcb3351ebdfa95bd60b13cd1f9bdebaf4485fc693909d693a71ec9927\",\"dweb:/ipfs/QmdBLkPgptJM5YnjjKPE7E2UtivDjJ9ypaKz1iwahJQ6gM\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:Incrementer", - "label": "number", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract Incrementer {\n uint256 number;\n function sum(uint256 num) public returns (uint256){\n number += num;\n return number;\n }\n }" -} diff --git a/tests/contracts/compiled/Incrementor.json b/tests/contracts/compiled/Incrementor.json new file mode 100644 index 0000000000..afc0f6841d --- /dev/null +++ b/tests/contracts/compiled/Incrementor.json @@ -0,0 +1,2492 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b5060008081905550610228806100276000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd14610046578063119fbbd41461006457806321b13c481461006e575b600080fd5b61004e61009e565b60405161005b91906100f4565b60405180910390f35b61006c6100a4565b005b61008860048036038101906100839190610140565b6100bb565b60405161009591906100f4565b60405180910390f35b60005481565b60016000546100b3919061019c565b600081905550565b6000816000546100cb919061019c565b6000819055506000549050919050565b6000819050919050565b6100ee816100db565b82525050565b600060208201905061010960008301846100e5565b92915050565b600080fd5b61011d816100db565b811461012857600080fd5b50565b60008135905061013a81610114565b92915050565b6000602082840312156101565761015561010f565b5b60006101648482850161012b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101a7826100db565b91506101b2836100db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101e7576101e661016d565b5b82820190509291505056fea2646970667358221220ce3e57a9103da467f79e4df4da72487301d37bd48a064abc881e9c450b88a89f64736f6c634300080b0033", + "contract": { + "abi": [ + { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incr", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "num", "type": "uint256" } + ], + "name": "incr", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":67:342 contract Incrementor {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":121:161 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":153:154 0 */\n 0x00\n /* \"main.sol\":145:150 count */\n dup1\n /* \"main.sol\":145:154 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":67:342 contract Incrementor {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:342 contract Incrementor {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n dup1\n 0x21b13c48\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":94:114 uint256 public count */\n tag_3:\n tag_6\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":167:224 function incr() public {... */\n tag_4:\n tag_10\n tag_11\n jump\t// in\n tag_10:\n stop\n /* \"main.sol\":230:340 function incr(uint256 num) public returns (uint256) {... */\n tag_5:\n tag_12\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_13\n swap2\n swap1\n tag_14\n jump\t// in\n tag_13:\n tag_15\n jump\t// in\n tag_12:\n mload(0x40)\n tag_16\n swap2\n swap1\n tag_9\n jump\t// in\n tag_16:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":94:114 uint256 public count */\n tag_7:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":167:224 function incr() public {... */\n tag_11:\n /* \"main.sol\":216:217 1 */\n 0x01\n /* \"main.sol\":208:213 count */\n sload(0x00)\n /* \"main.sol\":208:217 count + 1 */\n tag_18\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n /* \"main.sol\":200:205 count */\n 0x00\n /* \"main.sol\":200:217 count = count + 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":167:224 function incr() public {... */\n jump\t// out\n /* \"main.sol\":230:340 function incr(uint256 num) public returns (uint256) {... */\n tag_15:\n /* \"main.sol\":273:280 uint256 */\n 0x00\n /* \"main.sol\":308:311 num */\n dup2\n /* \"main.sol\":300:305 count */\n sload(0x00)\n /* \"main.sol\":300:311 count + num */\n tag_21\n swap2\n swap1\n tag_19\n jump\t// in\n tag_21:\n /* \"main.sol\":292:297 count */\n 0x00\n /* \"main.sol\":292:311 count = count + num */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":328:333 count */\n sload(0x00)\n /* \"main.sol\":321:333 return count */\n swap1\n pop\n /* \"main.sol\":230:340 function incr(uint256 num) public returns (uint256) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:84 */\n tag_22:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":73:78 */\n dup2\n /* \"#utility.yul\":62:78 */\n swap1\n pop\n /* \"#utility.yul\":7:84 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":90:208 */\n tag_23:\n /* \"#utility.yul\":177:201 */\n tag_33\n /* \"#utility.yul\":195:200 */\n dup2\n /* \"#utility.yul\":177:201 */\n tag_22\n jump\t// in\n tag_33:\n /* \"#utility.yul\":172:175 */\n dup3\n /* \"#utility.yul\":165:202 */\n mstore\n /* \"#utility.yul\":90:208 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":214:436 */\n tag_9:\n /* \"#utility.yul\":307:311 */\n 0x00\n /* \"#utility.yul\":345:347 */\n 0x20\n /* \"#utility.yul\":334:343 */\n dup3\n /* \"#utility.yul\":330:348 */\n add\n /* \"#utility.yul\":322:348 */\n swap1\n pop\n /* \"#utility.yul\":358:429 */\n tag_35\n /* \"#utility.yul\":426:427 */\n 0x00\n /* \"#utility.yul\":415:424 */\n dup4\n /* \"#utility.yul\":411:428 */\n add\n /* \"#utility.yul\":402:408 */\n dup5\n /* \"#utility.yul\":358:429 */\n tag_23\n jump\t// in\n tag_35:\n /* \"#utility.yul\":214:436 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":523:640 */\n tag_25:\n /* \"#utility.yul\":632:633 */\n 0x00\n /* \"#utility.yul\":629:630 */\n dup1\n /* \"#utility.yul\":622:634 */\n revert\n /* \"#utility.yul\":769:891 */\n tag_27:\n /* \"#utility.yul\":842:866 */\n tag_40\n /* \"#utility.yul\":860:865 */\n dup2\n /* \"#utility.yul\":842:866 */\n tag_22\n jump\t// in\n tag_40:\n /* \"#utility.yul\":835:840 */\n dup2\n /* \"#utility.yul\":832:867 */\n eq\n /* \"#utility.yul\":822:885 */\n tag_41\n jumpi\n /* \"#utility.yul\":881:882 */\n 0x00\n /* \"#utility.yul\":878:879 */\n dup1\n /* \"#utility.yul\":871:883 */\n revert\n /* \"#utility.yul\":822:885 */\n tag_41:\n /* \"#utility.yul\":769:891 */\n pop\n jump\t// out\n /* \"#utility.yul\":897:1036 */\n tag_28:\n /* \"#utility.yul\":943:948 */\n 0x00\n /* \"#utility.yul\":981:987 */\n dup2\n /* \"#utility.yul\":968:988 */\n calldataload\n /* \"#utility.yul\":959:988 */\n swap1\n pop\n /* \"#utility.yul\":997:1030 */\n tag_43\n /* \"#utility.yul\":1024:1029 */\n dup2\n /* \"#utility.yul\":997:1030 */\n tag_27\n jump\t// in\n tag_43:\n /* \"#utility.yul\":897:1036 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1042:1371 */\n tag_14:\n /* \"#utility.yul\":1101:1107 */\n 0x00\n /* \"#utility.yul\":1150:1152 */\n 0x20\n /* \"#utility.yul\":1138:1147 */\n dup3\n /* \"#utility.yul\":1129:1136 */\n dup5\n /* \"#utility.yul\":1125:1148 */\n sub\n /* \"#utility.yul\":1121:1153 */\n slt\n /* \"#utility.yul\":1118:1237 */\n iszero\n tag_45\n jumpi\n /* \"#utility.yul\":1156:1235 */\n tag_46\n tag_25\n jump\t// in\n tag_46:\n /* \"#utility.yul\":1118:1237 */\n tag_45:\n /* \"#utility.yul\":1276:1277 */\n 0x00\n /* \"#utility.yul\":1301:1354 */\n tag_47\n /* \"#utility.yul\":1346:1353 */\n dup5\n /* \"#utility.yul\":1337:1343 */\n dup3\n /* \"#utility.yul\":1326:1335 */\n dup6\n /* \"#utility.yul\":1322:1344 */\n add\n /* \"#utility.yul\":1301:1354 */\n tag_28\n jump\t// in\n tag_47:\n /* \"#utility.yul\":1291:1354 */\n swap2\n pop\n /* \"#utility.yul\":1247:1364 */\n pop\n /* \"#utility.yul\":1042:1371 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1377:1557 */\n tag_29:\n /* \"#utility.yul\":1425:1502 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1422:1423 */\n 0x00\n /* \"#utility.yul\":1415:1503 */\n mstore\n /* \"#utility.yul\":1522:1526 */\n 0x11\n /* \"#utility.yul\":1519:1520 */\n 0x04\n /* \"#utility.yul\":1512:1527 */\n mstore\n /* \"#utility.yul\":1546:1550 */\n 0x24\n /* \"#utility.yul\":1543:1544 */\n 0x00\n /* \"#utility.yul\":1536:1551 */\n revert\n /* \"#utility.yul\":1563:1868 */\n tag_19:\n /* \"#utility.yul\":1603:1606 */\n 0x00\n /* \"#utility.yul\":1622:1642 */\n tag_50\n /* \"#utility.yul\":1640:1641 */\n dup3\n /* \"#utility.yul\":1622:1642 */\n tag_22\n jump\t// in\n tag_50:\n /* \"#utility.yul\":1617:1642 */\n swap2\n pop\n /* \"#utility.yul\":1656:1676 */\n tag_51\n /* \"#utility.yul\":1674:1675 */\n dup4\n /* \"#utility.yul\":1656:1676 */\n tag_22\n jump\t// in\n tag_51:\n /* \"#utility.yul\":1651:1676 */\n swap3\n pop\n /* \"#utility.yul\":1810:1811 */\n dup3\n /* \"#utility.yul\":1742:1808 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1738:1812 */\n sub\n /* \"#utility.yul\":1735:1736 */\n dup3\n /* \"#utility.yul\":1732:1813 */\n gt\n /* \"#utility.yul\":1729:1836 */\n iszero\n tag_52\n jumpi\n /* \"#utility.yul\":1816:1834 */\n tag_53\n tag_29\n jump\t// in\n tag_53:\n /* \"#utility.yul\":1729:1836 */\n tag_52:\n /* \"#utility.yul\":1860:1861 */\n dup3\n /* \"#utility.yul\":1857:1858 */\n dup3\n /* \"#utility.yul\":1853:1862 */\n add\n /* \"#utility.yul\":1846:1862 */\n swap1\n pop\n /* \"#utility.yul\":1563:1868 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220ce3e57a9103da467f79e4df4da72487301d37bd48a064abc881e9c450b88a89f64736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": { + "@_11": { + "entryPoint": null, + "id": 11, + "parameterSlots": 0, + "returnSlots": 0 + } + }, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060008081905550610228806100276000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd14610046578063119fbbd41461006457806321b13c481461006e575b600080fd5b61004e61009e565b60405161005b91906100f4565b60405180910390f35b61006c6100a4565b005b61008860048036038101906100839190610140565b6100bb565b60405161009591906100f4565b60405180910390f35b60005481565b60016000546100b3919061019c565b600081905550565b6000816000546100cb919061019c565b6000819055506000549050919050565b6000819050919050565b6100ee816100db565b82525050565b600060208201905061010960008301846100e5565b92915050565b600080fd5b61011d816100db565b811461012857600080fd5b50565b60008135905061013a81610114565b92915050565b6000602082840312156101565761015561010f565b5b60006101648482850161012b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101a7826100db565b91506101b2836100db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101e7576101e661016d565b5b82820190509291505056fea2646970667358221220ce3e57a9103da467f79e4df4da72487301d37bd48a064abc881e9c450b88a89f64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x228 DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0xF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0xA4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x88 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x83 SWAP2 SWAP1 PUSH2 0x140 JUMP JUMPDEST PUSH2 0xBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0xF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0x19C JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 SLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0x19C JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x0 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xEE DUP2 PUSH2 0xDB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x109 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11D DUP2 PUSH2 0xDB JUMP JUMPDEST DUP2 EQ PUSH2 0x128 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x13A DUP2 PUSH2 0x114 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x156 JUMPI PUSH2 0x155 PUSH2 0x10F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x164 DUP5 DUP3 DUP6 ADD PUSH2 0x12B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A7 DUP3 PUSH2 0xDB JUMP JUMPDEST SWAP2 POP PUSH2 0x1B2 DUP4 PUSH2 0xDB JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1E7 JUMPI PUSH2 0x1E6 PUSH2 0x16D JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE RETURNDATACOPY JUMPI 0xA9 LT RETURNDATASIZE LOG4 PUSH8 0xF79E4DF4DA724873 ADD 0xD3 PUSH28 0xD48A064ABC881E9C450B88A89F64736F6C634300080B003300000000 ", + "sourceMap": "67:275:0:-:0;;;121:40;;;;;;;;;;153:1;145:5;:9;;;;67:275;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@count_3": { + "entryPoint": 158, + "id": 3, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@incr_21": { + "entryPoint": 164, + "id": 21, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@incr_37": { + "entryPoint": 187, + "id": 37, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 299, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": 320, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 229, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 244, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 412, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 219, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 365, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 271, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 276, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1871:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:1", + "type": "" + } + ], + "src": "7:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "155:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "195:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "177:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "177:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "165:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "165:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "165:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "143:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:1", + "type": "" + } + ], + "src": "90:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "312:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "322:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "334:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "330:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "330:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "322:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "402:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "358:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "358:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "358:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "284:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "296:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "307:4:1", + "type": "" + } + ], + "src": "214:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "482:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "492:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "508:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "502:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "502:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "492:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "475:6:1", + "type": "" + } + ], + "src": "442:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "612:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "629:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "632:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "622:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "622:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "622:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "523:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "735:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "752:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "755:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "745:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "745:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "745:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "646:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "812:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "869:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "878:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "881:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "871:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "871:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "871:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "835:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "860:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "842:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "842:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "832:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "832:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "825:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "825:43:1" + }, + "nodeType": "YulIf", + "src": "822:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "805:5:1", + "type": "" + } + ], + "src": "769:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "949:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "959:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "981:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "968:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "968:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "959:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1024:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "997:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "997:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "997:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "927:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "935:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "943:5:1", + "type": "" + } + ], + "src": "897:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1108:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1154:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1156:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "1156:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1156:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1129:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1138:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1125:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1125:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1150:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1121:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1121:32:1" + }, + "nodeType": "YulIf", + "src": "1118:119:1" + }, + { + "nodeType": "YulBlock", + "src": "1247:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1262:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1276:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1266:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1291:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1326:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1337:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1322:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1322:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1346:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1301:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1301:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1291:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1078:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1089:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1101:6:1", + "type": "" + } + ], + "src": "1042:329:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1405:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1422:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1425:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1415:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1415:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1415:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1519:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1522:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1512:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1512:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1512:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1543:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1546:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1536:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1536:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1536:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1377:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1607:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1617:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1640:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1622:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1622:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1617:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1651:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1674:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1656:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1656:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1651:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1814:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1816:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "1816:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1816:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1735:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1742:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1810:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1738:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1738:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1732:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1732:81:1" + }, + "nodeType": "YulIf", + "src": "1729:107:1" + }, + { + "nodeType": "YulAssignment", + "src": "1846:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1857:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1860:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1853:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1853:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "1846:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "1594:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "1597:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "1603:3:1", + "type": "" + } + ], + "src": "1563:305:1" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd14610046578063119fbbd41461006457806321b13c481461006e575b600080fd5b61004e61009e565b60405161005b91906100f4565b60405180910390f35b61006c6100a4565b005b61008860048036038101906100839190610140565b6100bb565b60405161009591906100f4565b60405180910390f35b60005481565b60016000546100b3919061019c565b600081905550565b6000816000546100cb919061019c565b6000819055506000549050919050565b6000819050919050565b6100ee816100db565b82525050565b600060208201905061010960008301846100e5565b92915050565b600080fd5b61011d816100db565b811461012857600080fd5b50565b60008135905061013a81610114565b92915050565b6000602082840312156101565761015561010f565b5b60006101648482850161012b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101a7826100db565b91506101b2836100db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101e7576101e661016d565b5b82820190509291505056fea2646970667358221220ce3e57a9103da467f79e4df4da72487301d37bd48a064abc881e9c450b88a89f64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x21B13C48 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0xF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0xA4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x88 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x83 SWAP2 SWAP1 PUSH2 0x140 JUMP JUMPDEST PUSH2 0xBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0xF4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0x19C JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 SLOAD PUSH2 0xCB SWAP2 SWAP1 PUSH2 0x19C JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x0 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xEE DUP2 PUSH2 0xDB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x109 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x11D DUP2 PUSH2 0xDB JUMP JUMPDEST DUP2 EQ PUSH2 0x128 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x13A DUP2 PUSH2 0x114 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x156 JUMPI PUSH2 0x155 PUSH2 0x10F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x164 DUP5 DUP3 DUP6 ADD PUSH2 0x12B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A7 DUP3 PUSH2 0xDB JUMP JUMPDEST SWAP2 POP PUSH2 0x1B2 DUP4 PUSH2 0xDB JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1E7 JUMPI PUSH2 0x1E6 PUSH2 0x16D JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCE RETURNDATACOPY JUMPI 0xA9 LT RETURNDATASIZE LOG4 PUSH8 0xF79E4DF4DA724873 ADD 0xD3 PUSH28 0xD48A064ABC881E9C450B88A89F64736F6C634300080B003300000000 ", + "sourceMap": "67:275:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;167:57;;;:::i;:::-;;230:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94:20;;;;:::o;167:57::-;216:1;208:5;;:9;;;;:::i;:::-;200:5;:17;;;;167:57::o;230:110::-;273:7;308:3;300:5;;:11;;;;:::i;:::-;292:5;:19;;;;328:5;;321:12;;230:110;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:180::-;1425:77;1422:1;1415:88;1522:4;1519:1;1512:15;1546:4;1543:1;1536:15;1563:305;1603:3;1622:20;1640:1;1622:20;:::i;:::-;1617:25;;1656:20;1674:1;1656:20;:::i;:::-;1651:25;;1810:1;1742:66;1738:74;1735:1;1732:81;1729:107;;;1816:18;;:::i;:::-;1729:107;1860:1;1857;1853:9;1846:16;;1563:305;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "110400", + "executionCost": "5173", + "totalCost": "115573" + }, + "external": { + "count()": "2407", + "incr()": "infinite", + "incr(uint256)": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 342, "name": "MSTORE", "source": 0 }, + { "begin": 121, "end": 161, "name": "CALLVALUE", "source": 0 }, + { "begin": 121, "end": 161, "name": "DUP1", "source": 0 }, + { "begin": 121, "end": 161, "name": "ISZERO", "source": 0 }, + { + "begin": 121, + "end": 161, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 121, "end": 161, "name": "JUMPI", "source": 0 }, + { + "begin": 121, + "end": 161, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 121, "end": 161, "name": "DUP1", "source": 0 }, + { "begin": 121, "end": 161, "name": "REVERT", "source": 0 }, + { + "begin": 121, + "end": 161, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 121, "end": 161, "name": "JUMPDEST", "source": 0 }, + { "begin": 121, "end": 161, "name": "POP", "source": 0 }, + { + "begin": 153, + "end": 154, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 145, "end": 150, "name": "DUP1", "source": 0 }, + { "begin": 145, "end": 154, "name": "DUP2", "source": 0 }, + { "begin": 145, "end": 154, "name": "SWAP1", "source": 0 }, + { "begin": 145, "end": 154, "name": "SSTORE", "source": 0 }, + { "begin": 145, "end": 154, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 67, "end": 342, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 342, "name": "CODECOPY", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 342, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220ce3e57a9103da467f79e4df4da72487301d37bd48a064abc881e9c450b88a89f64736f6c634300080b0033", + ".code": [ + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 342, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 342, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 342, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 342, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 342, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 342, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 342, "name": "REVERT", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 342, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 342, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 342, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 342, "name": "LT", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 342, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 342, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 67, "end": 342, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 342, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 67, "end": 342, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 67, "end": 342, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 342, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "119FBBD4" + }, + { "begin": 67, "end": 342, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 342, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 342, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "21B13C48" + }, + { "begin": 67, "end": 342, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 67, "end": 342, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 342, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 342, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 342, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 342, "name": "REVERT", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 94, "end": 114, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 94, + "end": 114, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 94, + "end": 114, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 94, + "end": 114, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 94, "end": 114, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 114, "name": "MLOAD", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 94, "end": 114, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 114, "name": "SWAP1", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 94, + "end": 114, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 94, + "end": 114, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 94, "end": 114, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 114, "name": "MLOAD", "source": 0 }, + { "begin": 94, "end": 114, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 114, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 114, "name": "SUB", "source": 0 }, + { "begin": 94, "end": 114, "name": "SWAP1", "source": 0 }, + { "begin": 94, "end": 114, "name": "RETURN", "source": 0 }, + { + "begin": 167, + "end": 224, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 167, "end": 224, "name": "JUMPDEST", "source": 0 }, + { + "begin": 167, + "end": 224, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 167, + "end": 224, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 167, + "end": 224, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 167, + "end": 224, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 167, "end": 224, "name": "JUMPDEST", "source": 0 }, + { "begin": 167, "end": 224, "name": "STOP", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 230, "end": 340, "name": "JUMPDEST", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 230, + "end": 340, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 230, "end": 340, "name": "DUP1", "source": 0 }, + { "begin": 230, "end": 340, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 230, "end": 340, "name": "SUB", "source": 0 }, + { "begin": 230, "end": 340, "name": "DUP2", "source": 0 }, + { "begin": 230, "end": 340, "name": "ADD", "source": 0 }, + { "begin": 230, "end": 340, "name": "SWAP1", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 230, "end": 340, "name": "SWAP2", "source": 0 }, + { "begin": 230, "end": 340, "name": "SWAP1", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { + "begin": 230, + "end": 340, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 230, + "end": 340, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 230, "end": 340, "name": "JUMPDEST", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 230, + "end": 340, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 230, + "end": 340, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 230, "end": 340, "name": "JUMPDEST", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 230, "end": 340, "name": "MLOAD", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 230, "end": 340, "name": "SWAP2", "source": 0 }, + { "begin": 230, "end": 340, "name": "SWAP1", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 230, + "end": 340, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 230, + "end": 340, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 230, "end": 340, "name": "JUMPDEST", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 230, "end": 340, "name": "MLOAD", "source": 0 }, + { "begin": 230, "end": 340, "name": "DUP1", "source": 0 }, + { "begin": 230, "end": 340, "name": "SWAP2", "source": 0 }, + { "begin": 230, "end": 340, "name": "SUB", "source": 0 }, + { "begin": 230, "end": 340, "name": "SWAP1", "source": 0 }, + { "begin": 230, "end": 340, "name": "RETURN", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 94, "end": 114, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 94, "end": 114, "name": "SLOAD", "source": 0 }, + { "begin": 94, "end": 114, "name": "DUP2", "source": 0 }, + { + "begin": 94, + "end": 114, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 167, + "end": 224, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 167, "end": 224, "name": "JUMPDEST", "source": 0 }, + { + "begin": 216, + "end": 217, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 208, + "end": 213, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 208, "end": 213, "name": "SLOAD", "source": 0 }, + { + "begin": 208, + "end": 217, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 208, "end": 217, "name": "SWAP2", "source": 0 }, + { "begin": 208, "end": 217, "name": "SWAP1", "source": 0 }, + { + "begin": 208, + "end": 217, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { + "begin": 208, + "end": 217, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 208, + "end": 217, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 208, "end": 217, "name": "JUMPDEST", "source": 0 }, + { + "begin": 200, + "end": 205, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 200, "end": 217, "name": "DUP2", "source": 0 }, + { "begin": 200, "end": 217, "name": "SWAP1", "source": 0 }, + { "begin": 200, "end": 217, "name": "SSTORE", "source": 0 }, + { "begin": 200, "end": 217, "name": "POP", "source": 0 }, + { + "begin": 167, + "end": 224, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 230, + "end": 340, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 230, "end": 340, "name": "JUMPDEST", "source": 0 }, + { + "begin": 273, + "end": 280, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 308, "end": 311, "name": "DUP2", "source": 0 }, + { + "begin": 300, + "end": 305, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 300, "end": 305, "name": "SLOAD", "source": 0 }, + { + "begin": 300, + "end": 311, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { "begin": 300, "end": 311, "name": "SWAP2", "source": 0 }, + { "begin": 300, "end": 311, "name": "SWAP1", "source": 0 }, + { + "begin": 300, + "end": 311, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { + "begin": 300, + "end": 311, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 300, + "end": 311, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 300, "end": 311, "name": "JUMPDEST", "source": 0 }, + { + "begin": 292, + "end": 297, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 292, "end": 311, "name": "DUP2", "source": 0 }, + { "begin": 292, "end": 311, "name": "SWAP1", "source": 0 }, + { "begin": 292, "end": 311, "name": "SSTORE", "source": 0 }, + { "begin": 292, "end": 311, "name": "POP", "source": 0 }, + { + "begin": 328, + "end": 333, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 328, "end": 333, "name": "SLOAD", "source": 0 }, + { "begin": 321, "end": 333, "name": "SWAP1", "source": 0 }, + { "begin": 321, "end": 333, "name": "POP", "source": 0 }, + { "begin": 230, "end": 340, "name": "SWAP2", "source": 0 }, + { "begin": 230, "end": 340, "name": "SWAP1", "source": 0 }, + { "begin": 230, "end": 340, "name": "POP", "source": 0 }, + { + "begin": 230, + "end": 340, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 84, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 7, "end": 84, "name": "JUMPDEST", "source": 1 }, + { + "begin": 44, + "end": 51, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 73, "end": 78, "name": "DUP2", "source": 1 }, + { "begin": 62, "end": 78, "name": "SWAP1", "source": 1 }, + { "begin": 62, "end": 78, "name": "POP", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP2", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP1", "source": 1 }, + { "begin": 7, "end": 84, "name": "POP", "source": 1 }, + { + "begin": 7, + "end": 84, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 90, + "end": 208, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 90, "end": 208, "name": "JUMPDEST", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "33" + }, + { "begin": 195, "end": 200, "name": "DUP2", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 177, + "end": 201, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 177, + "end": 201, + "name": "tag", + "source": 1, + "value": "33" + }, + { "begin": 177, "end": 201, "name": "JUMPDEST", "source": 1 }, + { "begin": 172, "end": 175, "name": "DUP3", "source": 1 }, + { "begin": 165, "end": 202, "name": "MSTORE", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { + "begin": 90, + "end": 208, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 214, + "end": 436, + "name": "tag", + "source": 1, + "value": "9" + }, + { "begin": 214, "end": 436, "name": "JUMPDEST", "source": 1 }, + { + "begin": 307, + "end": 311, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 345, + "end": 347, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 334, "end": 343, "name": "DUP3", "source": 1 }, + { "begin": 330, "end": 348, "name": "ADD", "source": 1 }, + { "begin": 322, "end": 348, "name": "SWAP1", "source": 1 }, + { "begin": 322, "end": 348, "name": "POP", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "35" + }, + { + "begin": 426, + "end": 427, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 415, "end": 424, "name": "DUP4", "source": 1 }, + { "begin": 411, "end": 428, "name": "ADD", "source": 1 }, + { "begin": 402, "end": 408, "name": "DUP5", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 358, + "end": 429, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 358, + "end": 429, + "name": "tag", + "source": 1, + "value": "35" + }, + { "begin": 358, "end": 429, "name": "JUMPDEST", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP3", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP2", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { + "begin": 214, + "end": 436, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 523, + "end": 640, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 523, "end": 640, "name": "JUMPDEST", "source": 1 }, + { + "begin": 632, + "end": 633, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 629, "end": 630, "name": "DUP1", "source": 1 }, + { "begin": 622, "end": 634, "name": "REVERT", "source": 1 }, + { + "begin": 769, + "end": 891, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 769, "end": 891, "name": "JUMPDEST", "source": 1 }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "40" + }, + { "begin": 860, "end": 865, "name": "DUP2", "source": 1 }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 842, + "end": 866, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 842, + "end": 866, + "name": "tag", + "source": 1, + "value": "40" + }, + { "begin": 842, "end": 866, "name": "JUMPDEST", "source": 1 }, + { "begin": 835, "end": 840, "name": "DUP2", "source": 1 }, + { "begin": 832, "end": 867, "name": "EQ", "source": 1 }, + { + "begin": 822, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "41" + }, + { "begin": 822, "end": 885, "name": "JUMPI", "source": 1 }, + { + "begin": 881, + "end": 882, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 878, "end": 879, "name": "DUP1", "source": 1 }, + { "begin": 871, "end": 883, "name": "REVERT", "source": 1 }, + { + "begin": 822, + "end": 885, + "name": "tag", + "source": 1, + "value": "41" + }, + { "begin": 822, "end": 885, "name": "JUMPDEST", "source": 1 }, + { "begin": 769, "end": 891, "name": "POP", "source": 1 }, + { + "begin": 769, + "end": 891, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 897, + "end": 1036, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 897, "end": 1036, "name": "JUMPDEST", "source": 1 }, + { + "begin": 943, + "end": 948, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 981, "end": 987, "name": "DUP2", "source": 1 }, + { "begin": 968, "end": 988, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 959, "end": 988, "name": "SWAP1", "source": 1 }, + { "begin": 959, "end": 988, "name": "POP", "source": 1 }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "43" + }, + { "begin": 1024, "end": 1029, "name": "DUP2", "source": 1 }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 997, + "end": 1030, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 997, + "end": 1030, + "name": "tag", + "source": 1, + "value": "43" + }, + { "begin": 997, "end": 1030, "name": "JUMPDEST", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP3", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP2", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, + { + "begin": 897, + "end": 1036, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1042, + "end": 1371, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 1042, "end": 1371, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1101, + "end": 1107, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1150, + "end": 1152, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1138, "end": 1147, "name": "DUP3", "source": 1 }, + { "begin": 1129, "end": 1136, "name": "DUP5", "source": 1 }, + { "begin": 1125, "end": 1148, "name": "SUB", "source": 1 }, + { "begin": 1121, "end": 1153, "name": "SLT", "source": 1 }, + { "begin": 1118, "end": 1237, "name": "ISZERO", "source": 1 }, + { + "begin": 1118, + "end": 1237, + "name": "PUSH [tag]", + "source": 1, + "value": "45" + }, + { "begin": 1118, "end": 1237, "name": "JUMPI", "source": 1 }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "46" + }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 1156, + "end": 1235, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1156, + "end": 1235, + "name": "tag", + "source": 1, + "value": "46" + }, + { "begin": 1156, "end": 1235, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1118, + "end": 1237, + "name": "tag", + "source": 1, + "value": "45" + }, + { "begin": 1118, "end": 1237, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1276, + "end": 1277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 1, + "value": "47" + }, + { "begin": 1346, "end": 1353, "name": "DUP5", "source": 1 }, + { "begin": 1337, "end": 1343, "name": "DUP3", "source": 1 }, + { "begin": 1326, "end": 1335, "name": "DUP6", "source": 1 }, + { "begin": 1322, "end": 1344, "name": "ADD", "source": 1 }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { + "begin": 1301, + "end": 1354, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1301, + "end": 1354, + "name": "tag", + "source": 1, + "value": "47" + }, + { "begin": 1301, "end": 1354, "name": "JUMPDEST", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "SWAP2", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "POP", "source": 1 }, + { "begin": 1247, "end": 1364, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP3", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP2", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { + "begin": 1042, + "end": 1371, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1377, + "end": 1557, + "name": "tag", + "source": 1, + "value": "29" + }, + { "begin": 1377, "end": 1557, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1425, + "end": 1502, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1422, + "end": 1423, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1415, "end": 1503, "name": "MSTORE", "source": 1 }, + { + "begin": 1522, + "end": 1526, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1519, + "end": 1520, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1512, "end": 1527, "name": "MSTORE", "source": 1 }, + { + "begin": 1546, + "end": 1550, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1543, + "end": 1544, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1536, "end": 1551, "name": "REVERT", "source": 1 }, + { + "begin": 1563, + "end": 1868, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 1563, "end": 1868, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1603, + "end": 1606, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", + "source": 1, + "value": "50" + }, + { "begin": 1640, "end": 1641, "name": "DUP3", "source": 1 }, + { + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 1622, + "end": 1642, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1622, + "end": 1642, + "name": "tag", + "source": 1, + "value": "50" + }, + { "begin": 1622, "end": 1642, "name": "JUMPDEST", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "SWAP2", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "POP", "source": 1 }, + { + "begin": 1656, + "end": 1676, + "name": "PUSH [tag]", + "source": 1, + "value": "51" + }, + { "begin": 1674, "end": 1675, "name": "DUP4", "source": 1 }, + { + "begin": 1656, + "end": 1676, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 1656, + "end": 1676, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1656, + "end": 1676, + "name": "tag", + "source": 1, + "value": "51" + }, + { "begin": 1656, "end": 1676, "name": "JUMPDEST", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "SWAP3", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "POP", "source": 1 }, + { "begin": 1810, "end": 1811, "name": "DUP3", "source": 1 }, + { + "begin": 1742, + "end": 1808, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1738, "end": 1812, "name": "SUB", "source": 1 }, + { "begin": 1735, "end": 1736, "name": "DUP3", "source": 1 }, + { "begin": 1732, "end": 1813, "name": "GT", "source": 1 }, + { "begin": 1729, "end": 1836, "name": "ISZERO", "source": 1 }, + { + "begin": 1729, + "end": 1836, + "name": "PUSH [tag]", + "source": 1, + "value": "52" + }, + { "begin": 1729, "end": 1836, "name": "JUMPI", "source": 1 }, + { + "begin": 1816, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "53" + }, + { + "begin": 1816, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "29" + }, + { + "begin": 1816, + "end": 1834, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1816, + "end": 1834, + "name": "tag", + "source": 1, + "value": "53" + }, + { "begin": 1816, "end": 1834, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1729, + "end": 1836, + "name": "tag", + "source": 1, + "value": "52" + }, + { "begin": 1729, "end": 1836, "name": "JUMPDEST", "source": 1 }, + { "begin": 1860, "end": 1861, "name": "DUP3", "source": 1 }, + { "begin": 1857, "end": 1858, "name": "DUP3", "source": 1 }, + { "begin": 1853, "end": 1862, "name": "ADD", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "SWAP1", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP3", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP2", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { + "begin": 1563, + "end": 1868, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "count()": "06661abd", + "incr()": "119fbbd4", + "incr(uint256)": "21b13c48" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"}],\"name\":\"incr\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Incrementor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x12beb2eec183f97f7e69c767cfe315ff8cb12145d1e402a1e552ab20d13281e1\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://7b3ae269b79429736393d5f3ec789f33a8f63392a7ae3ec54dd234e7781e6ab1\",\"dweb:/ipfs/Qma2fYXuSQL95vYLJBrCs4nn8HCPztNA5FUNfxapYnN6hA\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:Incrementor", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract Incrementor {\n uint256 public count;\n\n constructor() {\n count = 0;\n }\n\n function incr() public {\n count = count + 1;\n }\n\n function incr(uint256 num) public returns (uint256) {\n count = count + num;\n return count;\n }\n}\n" +} diff --git a/tests/contracts/compiled/InfiniteContract.json b/tests/contracts/compiled/InfiniteContract.json deleted file mode 100644 index e89a9b9afe..0000000000 --- a/tests/contracts/compiled/InfiniteContract.json +++ /dev/null @@ -1,772 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [], - "name": "infinite", - "outputs": [ - { "internalType": "uint256", "name": "d", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:146 contract InfiniteContract {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5bec9e67\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n tag_3:\n tag_4\n tag_5\n jump\t// in\n tag_4:\n mload(0x40)\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_5:\n /* \"main.sol\":115:121 uint d */\n 0x00\n /* \"main.sol\":124:139 while (true) {} */\n tag_9:\n /* \"main.sol\":131:135 true */\n 0x01\n /* \"main.sol\":124:139 while (true) {} */\n iszero\n tag_10\n jumpi\n jump(tag_9)\n tag_10:\n /* \"main.sol\":75:140 function infinite() public pure returns(uint d) {while (true) {}} */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_12:\n /* \"#utility.yul\":94:118 */\n tag_14\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_15\n jump\t// in\n tag_14:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_7:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_17\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_12\n jump\t// in\n tag_17:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:436 */\n tag_15:\n 0x00\n /* \"#utility.yul\":425:430 */\n dup2\n /* \"#utility.yul\":414:430 */\n swap1\n pop\n /* \"#utility.yul\":404:436 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060bd8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xBD DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", - "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:439:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "404:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "414:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "425:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "414:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "386:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "396:7:1", - "type": "" - } - ], - "src": "359:77:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c80635bec9e6714602d575b600080fd5b60336047565b604051603e91906064565b60405180910390f35b60005b600115605457604a565b90565b605e81607d565b82525050565b6000602082019050607760008301846057565b92915050565b600081905091905056fea264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5BEC9E67 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x47 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3E SWAP2 SWAP1 PUSH1 0x64 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x1 ISZERO PUSH1 0x54 JUMPI PUSH1 0x4A JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x5E DUP2 PUSH1 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x77 PUSH1 0x0 DUP4 ADD DUP5 PUSH1 0x57 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0xD8 SWAP5 0x2A 0xD6 JUMPDEST SLOAD BALANCE 0xCB PUSH2 0xA704 0xD9 PUSH22 0xEB570C9BC1981B78B8829067F91CCA53BB2D64736F6C PUSH4 0x43000803 STOP CALLER ", - "sourceMap": "39:107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;115:6;124:15;131:4;124:15;;;;;;75:65;:::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:77::-;;425:5;414:16;;404:32;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "37800", - "executionCost": "87", - "totalCost": "37887" - }, - "external": { "infinite()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { "begin": 39, "end": 146, "name": "tag", "source": 0, "value": "1" }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 146, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122081d8942ad65b5431cb61a704d975eb570c9bc1981b78b8829067f91cca53bb2d64736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 146, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 146, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 146, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 146, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 146, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 146, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "5BEC9E67" - }, - { "begin": 39, "end": 146, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 146, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 146, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 146, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 146, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 146, "name": "REVERT", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 140, "name": "MLOAD", "source": 0 }, - { "begin": 75, "end": 140, "name": "DUP1", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 140, "name": "SUB", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { "begin": 75, "end": 140, "name": "RETURN", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 75, "end": 140, "name": "JUMPDEST", "source": 0 }, - { - "begin": 115, - "end": 121, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 124, - "end": 139, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, - { - "begin": 131, - "end": 135, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 124, "end": 139, "name": "ISZERO", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 124, "end": 139, "name": "JUMPI", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 124, "end": 139, "name": "JUMP", "source": 0 }, - { - "begin": 124, - "end": 139, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 124, "end": 139, "name": "JUMPDEST", "source": 0 }, - { "begin": 75, "end": 140, "name": "SWAP1", "source": 0 }, - { - "begin": 75, - "end": 140, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "7" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "12" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 436, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 359, "end": 436, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 436, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 425, "end": 430, "name": "DUP2", "source": 1 }, - { "begin": 414, "end": 430, "name": "SWAP1", "source": 1 }, - { "begin": 414, "end": 430, "name": "POP", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP2", "source": 1 }, - { "begin": 404, "end": 436, "name": "SWAP1", "source": 1 }, - { "begin": 404, "end": 436, "name": "POP", "source": 1 }, - { - "begin": 404, - "end": 436, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "infinite()": "5bec9e67" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdee3f3a75354dcd46705d92919495e78aeb24e54aa4626be18e97550ca5972d9\",\"urls\":[\"bzz-raw://30a5f5362c53875bfac4d739d5419e8815889f410029caade6e159b4f1a70092\",\"dweb:/ipfs/Qmb9jgzJySoTZf8jKfaQUoBgwrWA89FcVAw2h7FKnSfpGj\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContract {\n function infinite() public pure returns(uint d) {while (true) {}}\n }" -} diff --git a/tests/contracts/compiled/InfiniteContractVar.json b/tests/contracts/compiled/InfiniteContractVar.json deleted file mode 100644 index fe3d7df9f2..0000000000 --- a/tests/contracts/compiled/InfiniteContractVar.json +++ /dev/null @@ -1,1429 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "infinite", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":110:165 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":153:154 0 */\n 0x00\n /* \"main.sol\":145:150 count */\n dup1\n /* \"main.sol\":145:154 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:295 contract InfiniteContractVar {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":78:95 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":78:95 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":179:289 function infinite() public {... */\n tag_10:\n /* \"main.sol\":220:279 while (true) {... */\n tag_12:\n /* \"main.sol\":227:231 true */\n 0x01\n /* \"main.sol\":220:279 while (true) {... */\n iszero\n tag_13\n jumpi\n /* \"main.sol\":263:264 1 */\n 0x01\n /* \"main.sol\":257:262 count */\n sload(0x00)\n /* \"main.sol\":257:264 count+1 */\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n /* \"main.sol\":251:256 count */\n 0x00\n /* \"main.sol\":251:264 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":220:279 while (true) {... */\n jump(tag_12)\n tag_13:\n /* \"main.sol\":179:289 function infinite() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_17:\n /* \"#utility.yul\":94:118 */\n tag_19\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_20\n jump\t// in\n tag_19:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_22\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_17\n jump\t// in\n tag_22:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_15:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_24\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_20\n jump\t// in\n tag_24:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_25\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_20\n jump\t// in\n tag_25:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_26\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_27\n tag_28\n jump\t// in\n tag_27:\n /* \"#utility.yul\":525:527 */\n tag_26:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_20:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_28:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506000808190555061017c806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x17C DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ", - "sourceMap": "39:256:0:-:0;;;110:55;;;;;;;;;;153:1;145:5;:9;;;;39:256;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:936:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "403:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "413:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "436:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "418:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "418:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "413:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "447:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "470:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "452:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "452:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "447:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "612:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "612:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "612:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "531:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "538:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "606:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "534:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "534:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "528:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "528:81:1" - }, - "nodeType": "YulIf", - "src": "525:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "642:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "653:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "656:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "649:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "649:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "642:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "390:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "393:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "399:3:1", - "type": "" - } - ], - "src": "359:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "725:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "736:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "725:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "697:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "707:7:1", - "type": "" - } - ], - "src": "670:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "781:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "798:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "801:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "791:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "791:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "791:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "895:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "898:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "888:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "888:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "888:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "919:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "922:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "912:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "912:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "912:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "753:180:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b5780635bec9e6714610059575b600080fd5b610043610063565b604051610050919061009c565b60405180910390f35b610061610069565b005b60005481565b5b60011561008b57600160005461008091906100b7565b60008190555061006a565b565b6100968161010d565b82525050565b60006020820190506100b1600083018461008d565b92915050565b60006100c28261010d565b91506100cd8361010d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561010257610101610117565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x9C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x8B JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xB7 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH2 0x6A JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x10D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB1 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2 DUP3 PUSH2 0x10D JUMP JUMPDEST SWAP2 POP PUSH2 0xCD DUP4 PUSH2 0x10D JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x102 JUMPI PUSH2 0x101 PUSH2 0x117 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xAB SUB DUP6 AND PUSH30 0xBED28DEE34F1C5B30ECFCD67915495F0A32D2EEADA8E094193A364736F6C PUSH4 0x43000803 STOP CALLER ", - "sourceMap": "39:256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;78:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;179:110;;;:::i;:::-;;78:17;;;;:::o;179:110::-;220:59;227:4;220:59;;;263:1;257:5;;:7;;;;:::i;:::-;251:5;:13;;;;220:59;;;179:110::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "76000", - "executionCost": "5137", - "totalCost": "81137" - }, - "external": { "count()": "1107", "infinite()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 295, "name": "MSTORE", "source": 0 }, - { "begin": 110, "end": 165, "name": "CALLVALUE", "source": 0 }, - { "begin": 110, "end": 165, "name": "DUP1", "source": 0 }, - { "begin": 110, "end": 165, "name": "ISZERO", "source": 0 }, - { - "begin": 110, - "end": 165, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 110, "end": 165, "name": "JUMPI", "source": 0 }, - { - "begin": 110, - "end": 165, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 110, "end": 165, "name": "DUP1", "source": 0 }, - { "begin": 110, "end": 165, "name": "REVERT", "source": 0 }, - { - "begin": 110, - "end": 165, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 110, "end": 165, "name": "JUMPDEST", "source": 0 }, - { "begin": 110, "end": 165, "name": "POP", "source": 0 }, - { - "begin": 153, - "end": 154, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 145, "end": 150, "name": "DUP1", "source": 0 }, - { "begin": 145, "end": 154, "name": "DUP2", "source": 0 }, - { "begin": 145, "end": 154, "name": "SWAP1", "source": 0 }, - { "begin": 145, "end": 154, "name": "SSTORE", "source": 0 }, - { "begin": 145, "end": 154, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 295, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 295, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220bcab0385167dbed28dee34f1c5b30ecfcd67915495f0a32d2eeada8e094193a364736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 295, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 295, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 295, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 295, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 295, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 295, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 295, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 295, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 295, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 295, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 39, "end": 295, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, - { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "5BEC9E67" - }, - { "begin": 39, "end": 295, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 295, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 295, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 295, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 295, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 295, "name": "REVERT", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 78, - "end": 95, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 78, - "end": 95, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 78, - "end": 95, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 78, "end": 95, "name": "MLOAD", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 78, "end": 95, "name": "SWAP2", "source": 0 }, - { "begin": 78, "end": 95, "name": "SWAP1", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 78, - "end": 95, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 78, - "end": 95, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 78, "end": 95, "name": "MLOAD", "source": 0 }, - { "begin": 78, "end": 95, "name": "DUP1", "source": 0 }, - { "begin": 78, "end": 95, "name": "SWAP2", "source": 0 }, - { "begin": 78, "end": 95, "name": "SUB", "source": 0 }, - { "begin": 78, "end": 95, "name": "SWAP1", "source": 0 }, - { "begin": 78, "end": 95, "name": "RETURN", "source": 0 }, - { - "begin": 179, - "end": 289, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 179, "end": 289, "name": "JUMPDEST", "source": 0 }, - { - "begin": 179, - "end": 289, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 179, - "end": 289, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 179, - "end": 289, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 179, - "end": 289, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 179, "end": 289, "name": "JUMPDEST", "source": 0 }, - { "begin": 179, "end": 289, "name": "STOP", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 78, "end": 95, "name": "JUMPDEST", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 78, "end": 95, "name": "SLOAD", "source": 0 }, - { "begin": 78, "end": 95, "name": "DUP2", "source": 0 }, - { - "begin": 78, - "end": 95, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 179, - "end": 289, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 179, "end": 289, "name": "JUMPDEST", "source": 0 }, - { - "begin": 220, - "end": 279, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 220, "end": 279, "name": "JUMPDEST", "source": 0 }, - { - "begin": 227, - "end": 231, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 220, "end": 279, "name": "ISZERO", "source": 0 }, - { - "begin": 220, - "end": 279, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 220, "end": 279, "name": "JUMPI", "source": 0 }, - { - "begin": 263, - "end": 264, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 257, - "end": 262, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 257, "end": 262, "name": "SLOAD", "source": 0 }, - { - "begin": 257, - "end": 264, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 257, "end": 264, "name": "SWAP2", "source": 0 }, - { "begin": 257, "end": 264, "name": "SWAP1", "source": 0 }, - { - "begin": 257, - "end": 264, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 257, - "end": 264, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 257, - "end": 264, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 257, "end": 264, "name": "JUMPDEST", "source": 0 }, - { - "begin": 251, - "end": 256, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 251, "end": 264, "name": "DUP2", "source": 0 }, - { "begin": 251, "end": 264, "name": "SWAP1", "source": 0 }, - { "begin": 251, "end": 264, "name": "SSTORE", "source": 0 }, - { "begin": 251, "end": 264, "name": "POP", "source": 0 }, - { - "begin": 220, - "end": 279, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 220, "end": 279, "name": "JUMP", "source": 0 }, - { - "begin": 220, - "end": 279, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 220, "end": 279, "name": "JUMPDEST", "source": 0 }, - { - "begin": 179, - "end": 289, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 664, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 664, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 418, - "end": 438, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 418, - "end": 438, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, - { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, - { "begin": 413, "end": 438, "name": "POP", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 452, - "end": 472, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 452, - "end": 472, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, - { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, - { "begin": 447, "end": 472, "name": "POP", "source": 1 }, - { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, - { - "begin": 538, - "end": 604, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, - { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, - { "begin": 528, "end": 609, "name": "GT", "source": 1 }, - { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 612, - "end": 630, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 612, - "end": 630, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, - { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, - { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, - { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, - { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, - { "begin": 642, "end": 658, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { - "begin": 403, - "end": 664, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 670, - "end": 747, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, - { - "begin": 670, - "end": 747, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, - { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, - { "begin": 725, "end": 741, "name": "POP", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, - { "begin": 715, "end": 747, "name": "POP", "source": 1 }, - { - "begin": 715, - "end": 747, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 753, - "end": 933, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, - { - "begin": 801, - "end": 878, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 798, - "end": 799, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, - { - "begin": 898, - "end": 902, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 895, - "end": 896, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, - { - "begin": 922, - "end": 926, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 919, - "end": 920, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } - ] - } - } - }, - "methodIdentifiers": { "count()": "06661abd", "infinite()": "5bec9e67" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"InfiniteContractVar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xcbf39d64fe7bd82974aa5a9bfb42586c61e5bb9108ce181d9ed5e1de9391de09\",\"urls\":[\"bzz-raw://b923edaafc3bd169c716485816211c8e1beabd855c34d9e1ca3702adae418b82\",\"dweb:/ipfs/QmQeXeFbuCmnqG1aSBxwmn5j5M4zPkmUWmbZcXytvYURwC\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:InfiniteContractVar", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract InfiniteContractVar {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function infinite() public {\n while (true) {\n count=count+1;\n }\n }\n }" -} diff --git a/tests/contracts/compiled/JoinCandidatesWrapper.json b/tests/contracts/compiled/JoinCandidatesWrapper.json deleted file mode 100644 index 17b54b6fc9..0000000000 --- a/tests/contracts/compiled/JoinCandidatesWrapper.json +++ /dev/null @@ -1,3806 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506040516104533803806104538339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506100ff565b600081519050610087816100e8565b92915050565b60006020828403121561009f57600080fd5b60006100ad84828501610078565b91505092915050565b60006100c1826100c8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6100f1816100b6565b81146100fc57600080fd5b50565b6103458061010e6000396000f3fe60806040526004361061002d5760003560e01c80634cf088d914610039578063b688a3631461006457610034565b3661003457005b600080fd5b34801561004557600080fd5b5061004e61007b565b60405161005b919061021f565b60405180910390f35b34801561007057600080fd5b5061007961009f565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f67f04000000000000000000000000000000000000000000000000000000000000006040516100ee9190610255565b60405180910390a160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad76ed5a6842e530adfce00800006040518263ffffffff1660e01b8152600401610158919061023a565b600060405180830381600087803b15801561017257600080fd5b505af1158015610186573d6000803e3d6000fd5b505050507f055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f67f08000000000000000000000000000000000000000000000000000000000000006040516101d99190610270565b60405180910390a1565b6101ec816102b5565b82525050565b6101fb816102d9565b82525050565b61020a816102eb565b82525050565b610219816102fd565b82525050565b600060208201905061023460008301846101e3565b92915050565b600060208201905061024f60008301846101f2565b92915050565b600060208201905061026a6000830184610201565b92915050565b60006020820190506102856000830184610210565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006102c0826102c7565b9050919050565b60006102d28261028b565b9050919050565b60006102e4826102ab565b9050919050565b60006102f6826102ab565b9050919050565b6000610308826102ab565b905091905056fea26469706673582212202f406c043b7d624d7cc0870b38465ad4a864b114aff04c1550251afcdd12689b64736f6c63430008030033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_staking", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "Trace", - "type": "event" - }, - { - "inputs": [], - "name": "join", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "staking", - "outputs": [ - { - "internalType": "contract ParachainStaking", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":2138:2749 contract JoinCandidatesWrapper {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":2452:2543 constructor(address _staking) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"main.sol\":2523:2531 _staking */\n dup1\n /* \"main.sol\":2496:2503 staking */\n 0x00\n dup1\n /* \"main.sol\":2496:2532 staking = ParachainStaking(_staking) */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":2452:2543 constructor(address _staking) {... */\n pop\n /* \"main.sol\":2138:2749 contract JoinCandidatesWrapper {... */\n jump(tag_6)\n /* \"#utility.yul\":7:150 */\ntag_8:\n 0x00\n /* \"#utility.yul\":95:101 */\n dup2\n /* \"#utility.yul\":89:102 */\n mload\n /* \"#utility.yul\":80:102 */\n swap1\n pop\n /* \"#utility.yul\":111:144 */\n tag_10\n /* \"#utility.yul\":138:143 */\n dup2\n /* \"#utility.yul\":111:144 */\n tag_11\n jump\t// in\ntag_10:\n /* \"#utility.yul\":70:150 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":156:440 */\ntag_3:\n 0x00\n /* \"#utility.yul\":275:277 */\n 0x20\n /* \"#utility.yul\":263:272 */\n dup3\n /* \"#utility.yul\":254:261 */\n dup5\n /* \"#utility.yul\":250:273 */\n sub\n /* \"#utility.yul\":246:278 */\n slt\n /* \"#utility.yul\":243:245 */\n iszero\n tag_13\n jumpi\n /* \"#utility.yul\":291:292 */\n 0x00\n /* \"#utility.yul\":288:289 */\n dup1\n /* \"#utility.yul\":281:293 */\n revert\n /* \"#utility.yul\":243:245 */\ntag_13:\n /* \"#utility.yul\":334:335 */\n 0x00\n /* \"#utility.yul\":359:423 */\n tag_14\n /* \"#utility.yul\":415:422 */\n dup5\n /* \"#utility.yul\":406:412 */\n dup3\n /* \"#utility.yul\":395:404 */\n dup6\n /* \"#utility.yul\":391:413 */\n add\n /* \"#utility.yul\":359:423 */\n tag_8\n jump\t// in\ntag_14:\n /* \"#utility.yul\":349:423 */\n swap2\n pop\n /* \"#utility.yul\":305:433 */\n pop\n /* \"#utility.yul\":233:440 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":446:542 */\ntag_15:\n 0x00\n /* \"#utility.yul\":512:536 */\n tag_17\n /* \"#utility.yul\":530:535 */\n dup3\n /* \"#utility.yul\":512:536 */\n tag_18\n jump\t// in\ntag_17:\n /* \"#utility.yul\":501:536 */\n swap1\n pop\n /* \"#utility.yul\":491:542 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":548:674 */\ntag_18:\n 0x00\n /* \"#utility.yul\":625:667 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":618:623 */\n dup3\n /* \"#utility.yul\":614:668 */\n and\n /* \"#utility.yul\":603:668 */\n swap1\n pop\n /* \"#utility.yul\":593:674 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":680:802 */\ntag_11:\n /* \"#utility.yul\":753:777 */\n tag_21\n /* \"#utility.yul\":771:776 */\n dup2\n /* \"#utility.yul\":753:777 */\n tag_15\n jump\t// in\ntag_21:\n /* \"#utility.yul\":746:751 */\n dup2\n /* \"#utility.yul\":743:778 */\n eq\n /* \"#utility.yul\":733:735 */\n tag_22\n jumpi\n /* \"#utility.yul\":792:793 */\n 0x00\n /* \"#utility.yul\":789:790 */\n dup1\n /* \"#utility.yul\":782:794 */\n revert\n /* \"#utility.yul\":733:735 */\ntag_22:\n /* \"#utility.yul\":723:802 */\n pop\n jump\t// out\n /* \"main.sol\":2138:2749 contract JoinCandidatesWrapper {... */\ntag_6:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":2138:2749 contract JoinCandidatesWrapper {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x4cf088d9\n eq\n tag_3\n jumpi\n dup1\n 0xb688a363\n eq\n tag_4\n jumpi\n jump(tag_2)\n tag_1:\n jumpi(tag_2, calldatasize)\n stop\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":2337:2368 ParachainStaking public staking */\n tag_3:\n callvalue\n dup1\n iszero\n tag_7\n jumpi\n 0x00\n dup1\n revert\n tag_7:\n pop\n tag_8\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2592:2743 function join() public {... */\n tag_4:\n callvalue\n dup1\n iszero\n tag_12\n jumpi\n 0x00\n dup1\n revert\n tag_12:\n pop\n tag_13\n tag_14\n jump\t// in\n tag_13:\n stop\n /* \"main.sol\":2337:2368 ParachainStaking public staking */\n tag_9:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":2592:2743 function join() public {... */\n tag_14:\n /* \"main.sol\":2634:2649 Trace(1 << 250) */\n 0x055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f6\n /* \"main.sol\":2640:2648 1 << 250 */\n 0x0400000000000000000000000000000000000000000000000000000000000000\n /* \"main.sol\":2634:2649 Trace(1 << 250) */\n mload(0x40)\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log1\n /* \"main.sol\":2663:2670 staking */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2663:2686 staking.join_candidates */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xad76ed5a\n /* \"main.sol\":2687:2697 1234 ether */\n 0x42e530adfce0080000\n /* \"main.sol\":2663:2698 staking.join_candidates(1234 ether) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_18\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_20\n jumpi\n 0x00\n dup1\n revert\n tag_20:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_22\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_22:\n pop\n pop\n pop\n pop\n /* \"main.sol\":2717:2732 Trace(2 << 250) */\n 0x055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f6\n /* \"main.sol\":2723:2731 2 << 250 */\n 0x0800000000000000000000000000000000000000000000000000000000000000\n /* \"main.sol\":2717:2732 Trace(2 << 250) */\n mload(0x40)\n tag_23\n swap2\n swap1\n tag_24\n jump\t// in\n tag_23:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log1\n /* \"main.sol\":2592:2743 function join() public {... */\n jump\t// out\n /* \"#utility.yul\":7:184 */\n tag_26:\n /* \"#utility.yul\":117:177 */\n tag_28\n /* \"#utility.yul\":171:176 */\n dup2\n /* \"#utility.yul\":117:177 */\n tag_29\n jump\t// in\n tag_28:\n /* \"#utility.yul\":112:115 */\n dup3\n /* \"#utility.yul\":105:178 */\n mstore\n /* \"#utility.yul\":95:184 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":190:379 */\n tag_30:\n /* \"#utility.yul\":306:372 */\n tag_32\n /* \"#utility.yul\":366:371 */\n dup2\n /* \"#utility.yul\":306:372 */\n tag_33\n jump\t// in\n tag_32:\n /* \"#utility.yul\":301:304 */\n dup3\n /* \"#utility.yul\":294:373 */\n mstore\n /* \"#utility.yul\":284:379 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":385:682 */\n tag_34:\n /* \"#utility.yul\":555:675 */\n tag_36\n /* \"#utility.yul\":669:674 */\n dup2\n /* \"#utility.yul\":555:675 */\n tag_37\n jump\t// in\n tag_36:\n /* \"#utility.yul\":550:553 */\n dup3\n /* \"#utility.yul\":543:676 */\n mstore\n /* \"#utility.yul\":533:682 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":688:985 */\n tag_38:\n /* \"#utility.yul\":858:978 */\n tag_40\n /* \"#utility.yul\":972:977 */\n dup2\n /* \"#utility.yul\":858:978 */\n tag_41\n jump\t// in\n tag_40:\n /* \"#utility.yul\":853:856 */\n dup3\n /* \"#utility.yul\":846:979 */\n mstore\n /* \"#utility.yul\":836:985 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":991:1259 */\n tag_11:\n 0x00\n /* \"#utility.yul\":1145:1147 */\n 0x20\n /* \"#utility.yul\":1134:1143 */\n dup3\n /* \"#utility.yul\":1130:1148 */\n add\n /* \"#utility.yul\":1122:1148 */\n swap1\n pop\n /* \"#utility.yul\":1158:1252 */\n tag_43\n /* \"#utility.yul\":1249:1250 */\n 0x00\n /* \"#utility.yul\":1238:1247 */\n dup4\n /* \"#utility.yul\":1234:1251 */\n add\n /* \"#utility.yul\":1225:1231 */\n dup5\n /* \"#utility.yul\":1158:1252 */\n tag_26\n jump\t// in\n tag_43:\n /* \"#utility.yul\":1112:1259 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1265:1545 */\n tag_19:\n 0x00\n /* \"#utility.yul\":1425:1427 */\n 0x20\n /* \"#utility.yul\":1414:1423 */\n dup3\n /* \"#utility.yul\":1410:1428 */\n add\n /* \"#utility.yul\":1402:1428 */\n swap1\n pop\n /* \"#utility.yul\":1438:1538 */\n tag_45\n /* \"#utility.yul\":1535:1536 */\n 0x00\n /* \"#utility.yul\":1524:1533 */\n dup4\n /* \"#utility.yul\":1520:1537 */\n add\n /* \"#utility.yul\":1511:1517 */\n dup5\n /* \"#utility.yul\":1438:1538 */\n tag_30\n jump\t// in\n tag_45:\n /* \"#utility.yul\":1392:1545 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1551:1939 */\n tag_17:\n 0x00\n /* \"#utility.yul\":1765:1767 */\n 0x20\n /* \"#utility.yul\":1754:1763 */\n dup3\n /* \"#utility.yul\":1750:1768 */\n add\n /* \"#utility.yul\":1742:1768 */\n swap1\n pop\n /* \"#utility.yul\":1778:1932 */\n tag_47\n /* \"#utility.yul\":1929:1930 */\n 0x00\n /* \"#utility.yul\":1918:1927 */\n dup4\n /* \"#utility.yul\":1914:1931 */\n add\n /* \"#utility.yul\":1905:1911 */\n dup5\n /* \"#utility.yul\":1778:1932 */\n tag_34\n jump\t// in\n tag_47:\n /* \"#utility.yul\":1732:1939 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1945:2333 */\n tag_24:\n 0x00\n /* \"#utility.yul\":2159:2161 */\n 0x20\n /* \"#utility.yul\":2148:2157 */\n dup3\n /* \"#utility.yul\":2144:2162 */\n add\n /* \"#utility.yul\":2136:2162 */\n swap1\n pop\n /* \"#utility.yul\":2172:2326 */\n tag_49\n /* \"#utility.yul\":2323:2324 */\n 0x00\n /* \"#utility.yul\":2312:2321 */\n dup4\n /* \"#utility.yul\":2308:2325 */\n add\n /* \"#utility.yul\":2299:2305 */\n dup5\n /* \"#utility.yul\":2172:2326 */\n tag_38\n jump\t// in\n tag_49:\n /* \"#utility.yul\":2126:2333 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2339:2465 */\n tag_50:\n 0x00\n /* \"#utility.yul\":2416:2458 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":2409:2414 */\n dup3\n /* \"#utility.yul\":2405:2459 */\n and\n /* \"#utility.yul\":2394:2459 */\n swap1\n pop\n /* \"#utility.yul\":2384:2465 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2471:2548 */\n tag_52:\n 0x00\n /* \"#utility.yul\":2537:2542 */\n dup2\n /* \"#utility.yul\":2526:2542 */\n swap1\n pop\n /* \"#utility.yul\":2516:2548 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2554:2726 */\n tag_29:\n 0x00\n /* \"#utility.yul\":2660:2720 */\n tag_55\n /* \"#utility.yul\":2714:2719 */\n dup3\n /* \"#utility.yul\":2660:2720 */\n tag_56\n jump\t// in\n tag_55:\n /* \"#utility.yul\":2647:2720 */\n swap1\n pop\n /* \"#utility.yul\":2637:2726 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2732:2868 */\n tag_56:\n 0x00\n /* \"#utility.yul\":2838:2862 */\n tag_58\n /* \"#utility.yul\":2856:2861 */\n dup3\n /* \"#utility.yul\":2838:2862 */\n tag_50\n jump\t// in\n tag_58:\n /* \"#utility.yul\":2825:2862 */\n swap1\n pop\n /* \"#utility.yul\":2815:2868 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2874:3016 */\n tag_33:\n 0x00\n /* \"#utility.yul\":2986:3010 */\n tag_60\n /* \"#utility.yul\":3004:3009 */\n dup3\n /* \"#utility.yul\":2986:3010 */\n tag_52\n jump\t// in\n tag_60:\n /* \"#utility.yul\":2973:3010 */\n swap1\n pop\n /* \"#utility.yul\":2963:3016 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3022:3218 */\n tag_37:\n 0x00\n /* \"#utility.yul\":3188:3212 */\n tag_62\n /* \"#utility.yul\":3206:3211 */\n dup3\n /* \"#utility.yul\":3188:3212 */\n tag_52\n jump\t// in\n tag_62:\n /* \"#utility.yul\":3175:3212 */\n swap1\n pop\n /* \"#utility.yul\":3165:3218 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3224:3420 */\n tag_41:\n 0x00\n /* \"#utility.yul\":3390:3414 */\n tag_64\n /* \"#utility.yul\":3408:3413 */\n dup3\n /* \"#utility.yul\":3390:3414 */\n tag_52\n jump\t// in\n tag_64:\n /* \"#utility.yul\":3377:3414 */\n swap1\n pop\n /* \"#utility.yul\":3367:3420 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212202f406c043b7d624d7cc0870b38465ad4a864b114aff04c1550251afcdd12689b64736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:805:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "70:80:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "80:22:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "95:6:1" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "89:5:1" - }, - "nodeType": "YulFunctionCall", - "src": "89:13:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "80:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "138:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_address", - "nodeType": "YulIdentifier", - "src": "111:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "111:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "111:33:1" - } - ] - }, - "name": "abi_decode_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "48:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "56:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "64:5:1", - "type": "" - } - ], - "src": "7:143:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "233:207:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "279:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "288:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "291:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "281:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "281:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "281:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "254:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "263:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "250:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "250:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "275:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "246:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "246:32:1" - }, - "nodeType": "YulIf", - "src": "243:2:1" - }, - { - "nodeType": "YulBlock", - "src": "305:128:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "320:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "334:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "324:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "349:74:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "395:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "406:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "391:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "391:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "415:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "359:31:1" - }, - "nodeType": "YulFunctionCall", - "src": "359:64:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "349:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "203:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "214:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "226:6:1", - "type": "" - } - ], - "src": "156:284:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "491:51:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "501:35:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "530:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint160", - "nodeType": "YulIdentifier", - "src": "512:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "512:24:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "501:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "473:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "483:7:1", - "type": "" - } - ], - "src": "446:96:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "593:81:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "603:65:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "618:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "625:42:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "614:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "614:54:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "603:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint160", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "575:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "585:7:1", - "type": "" - } - ], - "src": "548:126:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "723:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "780:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "789:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "792:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "782:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "782:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "782:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "746:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "771:5:1" - } - ], - "functionName": { - "name": "cleanup_t_address", - "nodeType": "YulIdentifier", - "src": "753:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "753:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "743:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "743:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "736:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "736:43:1" - }, - "nodeType": "YulIf", - "src": "733:2:1" - } - ] - }, - "name": "validator_revert_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "716:5:1", - "type": "" - } - ], - "src": "680:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_address_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506040516104533803806104538339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506100ff565b600081519050610087816100e8565b92915050565b60006020828403121561009f57600080fd5b60006100ad84828501610078565b91505092915050565b60006100c1826100c8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6100f1816100b6565b81146100fc57600080fd5b50565b6103458061010e6000396000f3fe60806040526004361061002d5760003560e01c80634cf088d914610039578063b688a3631461006457610034565b3661003457005b600080fd5b34801561004557600080fd5b5061004e61007b565b60405161005b919061021f565b60405180910390f35b34801561007057600080fd5b5061007961009f565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f67f04000000000000000000000000000000000000000000000000000000000000006040516100ee9190610255565b60405180910390a160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad76ed5a6842e530adfce00800006040518263ffffffff1660e01b8152600401610158919061023a565b600060405180830381600087803b15801561017257600080fd5b505af1158015610186573d6000803e3d6000fd5b505050507f055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f67f08000000000000000000000000000000000000000000000000000000000000006040516101d99190610270565b60405180910390a1565b6101ec816102b5565b82525050565b6101fb816102d9565b82525050565b61020a816102eb565b82525050565b610219816102fd565b82525050565b600060208201905061023460008301846101e3565b92915050565b600060208201905061024f60008301846101f2565b92915050565b600060208201905061026a6000830184610201565b92915050565b60006020820190506102856000830184610210565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006102c0826102c7565b9050919050565b60006102d28261028b565b9050919050565b60006102e4826102ab565b9050919050565b60006102f6826102ab565b9050919050565b6000610308826102ab565b905091905056fea26469706673582212202f406c043b7d624d7cc0870b38465ad4a864b114aff04c1550251afcdd12689b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x453 CODESIZE SUB DUP1 PUSH2 0x453 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x8D JUMP JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP PUSH2 0xFF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x87 DUP2 PUSH2 0xE8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAD DUP5 DUP3 DUP6 ADD PUSH2 0x78 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1 DUP3 PUSH2 0xC8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF1 DUP2 PUSH2 0xB6 JUMP JUMPDEST DUP2 EQ PUSH2 0xFC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x345 DUP1 PUSH2 0x10E PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0xB688A363 EQ PUSH2 0x64 JUMPI PUSH2 0x34 JUMP JUMPDEST CALLDATASIZE PUSH2 0x34 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E PUSH2 0x7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x21F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x79 PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH32 0x55F2EE3BA5DAB2804A6713FBE1E5AABD82B97B2B4F5D5F32D2F3CDAFED701F6 PUSH32 0x400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD PUSH2 0xEE SWAP2 SWAP1 PUSH2 0x255 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAD76ED5A PUSH9 0x42E530ADFCE0080000 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x23A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x186 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x55F2EE3BA5DAB2804A6713FBE1E5AABD82B97B2B4F5D5F32D2F3CDAFED701F6 PUSH32 0x800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD PUSH2 0x1D9 SWAP2 SWAP1 PUSH2 0x270 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1EC DUP2 PUSH2 0x2B5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1FB DUP2 PUSH2 0x2D9 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x20A DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x219 DUP2 PUSH2 0x2FD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x234 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1E3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x24F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1F2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x26A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x201 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x285 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x210 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C0 DUP3 PUSH2 0x2C7 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D2 DUP3 PUSH2 0x28B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E4 DUP3 PUSH2 0x2AB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2AB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x308 DUP3 PUSH2 0x2AB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F BLOCKHASH PUSH13 0x43B7D624D7CC0870B38465AD4 0xA8 PUSH5 0xB114AFF04C ISZERO POP 0x25 BYTE 0xFC 0xDD SLT PUSH9 0x9B64736F6C63430008 SUB STOP CALLER ", - "sourceMap": "2138:611:0:-:0;;;2452:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2523:8;2496:7;;:36;;;;;;;;;;;;;;;;;;2452:91;2138:611;;7:143:1;;95:6;89:13;80:22;;111:33;138:5;111:33;:::i;:::-;70:80;;;;:::o;156:284::-;;275:2;263:9;254:7;250:23;246:32;243:2;;;291:1;288;281:12;243:2;334:1;359:64;415:7;406:6;395:9;391:22;359:64;:::i;:::-;349:74;;305:128;233:207;;;;:::o;446:96::-;;512:24;530:5;512:24;:::i;:::-;501:35;;491:51;;;:::o;548:126::-;;625:42;618:5;614:54;603:65;;593:81;;;:::o;680:122::-;753:24;771:5;753:24;:::i;:::-;746:5;743:35;733:2;;792:1;789;782:12;733:2;723:79;:::o;2138:611:0:-;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3423:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "95:89:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "112:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "171:5:1" - } - ], - "functionName": { - "name": "convert_t_contract$_ParachainStaking_$74_to_t_address", - "nodeType": "YulIdentifier", - "src": "117:53:1" - }, - "nodeType": "YulFunctionCall", - "src": "117:60:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "105:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "105:73:1" - }, - "nodeType": "YulExpressionStatement", - "src": "105:73:1" - } - ] - }, - "name": "abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "83:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "90:3:1", - "type": "" - } - ], - "src": "7:177:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "284:95:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "301:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "366:5:1" - } - ], - "functionName": { - "name": "convert_t_rational_1234000000000000000000_by_1_to_t_uint256", - "nodeType": "YulIdentifier", - "src": "306:59:1" - }, - "nodeType": "YulFunctionCall", - "src": "306:66:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "294:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "294:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "294:79:1" - } - ] - }, - "name": "abi_encode_t_rational_1234000000000000000000_by_1_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "272:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "279:3:1", - "type": "" - } - ], - "src": "190:189:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "533:149:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "550:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "669:5:1" - } - ], - "functionName": { - "name": "convert_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256", - "nodeType": "YulIdentifier", - "src": "555:113:1" - }, - "nodeType": "YulFunctionCall", - "src": "555:120:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "543:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "543:133:1" - }, - "nodeType": "YulExpressionStatement", - "src": "543:133:1" - } - ] - }, - "name": "abi_encode_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "521:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "528:3:1", - "type": "" - } - ], - "src": "385:297:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "836:149:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "853:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "972:5:1" - } - ], - "functionName": { - "name": "convert_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256", - "nodeType": "YulIdentifier", - "src": "858:113:1" - }, - "nodeType": "YulFunctionCall", - "src": "858:120:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "846:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "846:133:1" - }, - "nodeType": "YulExpressionStatement", - "src": "846:133:1" - } - ] - }, - "name": "abi_encode_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "824:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "831:3:1", - "type": "" - } - ], - "src": "688:297:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1112:147:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1122:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1134:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1145:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1130:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1130:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1122:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1225:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1238:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1249:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1234:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1234:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack", - "nodeType": "YulIdentifier", - "src": "1158:66:1" - }, - "nodeType": "YulFunctionCall", - "src": "1158:94:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1158:94:1" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ParachainStaking_$74__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1084:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1096:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1107:4:1", - "type": "" - } - ], - "src": "991:268:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1392:153:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1402:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1414:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1425:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1410:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1410:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1402:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1511:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1524:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1535:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1520:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1520:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_rational_1234000000000000000000_by_1_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "1438:72:1" - }, - "nodeType": "YulFunctionCall", - "src": "1438:100:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1438:100:1" - } - ] - }, - "name": "abi_encode_tuple_t_rational_1234000000000000000000_by_1__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1364:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1376:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1387:4:1", - "type": "" - } - ], - "src": "1265:280:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1732:207:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1742:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1754:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1765:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1750:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1750:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1742:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1905:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1918:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1929:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1914:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1914:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "1778:126:1" - }, - "nodeType": "YulFunctionCall", - "src": "1778:154:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1778:154:1" - } - ] - }, - "name": "abi_encode_tuple_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1704:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1716:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1727:4:1", - "type": "" - } - ], - "src": "1551:388:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2126:207:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2136:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2148:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2159:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2144:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2144:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2136:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2299:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2312:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2323:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2308:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2308:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "2172:126:1" - }, - "nodeType": "YulFunctionCall", - "src": "2172:154:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2172:154:1" - } - ] - }, - "name": "abi_encode_tuple_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2098:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2110:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2121:4:1", - "type": "" - } - ], - "src": "1945:388:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2384:81:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2394:65:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2409:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2416:42:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "2405:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2405:54:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "2394:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint160", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2366:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "2376:7:1", - "type": "" - } - ], - "src": "2339:126:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2516:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2526:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2537:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "2526:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2498:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "2508:7:1", - "type": "" - } - ], - "src": "2471:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2637:89:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2647:73:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2714:5:1" - } - ], - "functionName": { - "name": "convert_t_contract$_ParachainStaking_$74_to_t_uint160", - "nodeType": "YulIdentifier", - "src": "2660:53:1" - }, - "nodeType": "YulFunctionCall", - "src": "2660:60:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "2647:9:1" - } - ] - } - ] - }, - "name": "convert_t_contract$_ParachainStaking_$74_to_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2617:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "2627:9:1", - "type": "" - } - ], - "src": "2554:172:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2815:53:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2825:37:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2856:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint160", - "nodeType": "YulIdentifier", - "src": "2838:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "2838:24:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "2825:9:1" - } - ] - } - ] - }, - "name": "convert_t_contract$_ParachainStaking_$74_to_t_uint160", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2795:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "2805:9:1", - "type": "" - } - ], - "src": "2732:136:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2963:53:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2973:37:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3004:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "2986:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "2986:24:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "2973:9:1" - } - ] - } - ] - }, - "name": "convert_t_rational_1234000000000000000000_by_1_to_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2943:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "2953:9:1", - "type": "" - } - ], - "src": "2874:142:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3165:53:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3175:37:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3206:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "3188:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "3188:24:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "3175:9:1" - } - ] - } - ] - }, - "name": "convert_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3145:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "3155:9:1", - "type": "" - } - ], - "src": "3022:196:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3367:53:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3377:37:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "3408:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "3390:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "3390:24:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "3377:9:1" - } - ] - } - ] - }, - "name": "convert_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "3347:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "3357:9:1", - "type": "" - } - ], - "src": "3224:196:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_ParachainStaking_$74_to_t_address(value))\n }\n\n function abi_encode_t_rational_1234000000000000000000_by_1_to_t_uint256_fromStack(value, pos) {\n mstore(pos, convert_t_rational_1234000000000000000000_by_1_to_t_uint256(value))\n }\n\n function abi_encode_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256_fromStack(value, pos) {\n mstore(pos, convert_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256(value))\n }\n\n function abi_encode_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256_fromStack(value, pos) {\n mstore(pos, convert_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256(value))\n }\n\n function abi_encode_tuple_t_contract$_ParachainStaking_$74__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_rational_1234000000000000000000_by_1__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_rational_1234000000000000000000_by_1_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function convert_t_contract$_ParachainStaking_$74_to_t_address(value) -> converted {\n converted := convert_t_contract$_ParachainStaking_$74_to_t_uint160(value)\n }\n\n function convert_t_contract$_ParachainStaking_$74_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(value)\n }\n\n function convert_t_rational_1234000000000000000000_by_1_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(value)\n }\n\n function convert_t_rational_1809251394333065553493296640760748560207343510400633813116524750123642650624_by_1_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(value)\n }\n\n function convert_t_rational_3618502788666131106986593281521497120414687020801267626233049500247285301248_by_1_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(value)\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "60806040526004361061002d5760003560e01c80634cf088d914610039578063b688a3631461006457610034565b3661003457005b600080fd5b34801561004557600080fd5b5061004e61007b565b60405161005b919061021f565b60405180910390f35b34801561007057600080fd5b5061007961009f565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f67f04000000000000000000000000000000000000000000000000000000000000006040516100ee9190610255565b60405180910390a160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad76ed5a6842e530adfce00800006040518263ffffffff1660e01b8152600401610158919061023a565b600060405180830381600087803b15801561017257600080fd5b505af1158015610186573d6000803e3d6000fd5b505050507f055f2ee3ba5dab2804a6713fbe1e5aabd82b97b2b4f5d5f32d2f3cdafed701f67f08000000000000000000000000000000000000000000000000000000000000006040516101d99190610270565b60405180910390a1565b6101ec816102b5565b82525050565b6101fb816102d9565b82525050565b61020a816102eb565b82525050565b610219816102fd565b82525050565b600060208201905061023460008301846101e3565b92915050565b600060208201905061024f60008301846101f2565b92915050565b600060208201905061026a6000830184610201565b92915050565b60006020820190506102856000830184610210565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006102c0826102c7565b9050919050565b60006102d28261028b565b9050919050565b60006102e4826102ab565b9050919050565b60006102f6826102ab565b9050919050565b6000610308826102ab565b905091905056fea26469706673582212202f406c043b7d624d7cc0870b38465ad4a864b114aff04c1550251afcdd12689b64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0xB688A363 EQ PUSH2 0x64 JUMPI PUSH2 0x34 JUMP JUMPDEST CALLDATASIZE PUSH2 0x34 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E PUSH2 0x7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x21F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x70 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x79 PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH32 0x55F2EE3BA5DAB2804A6713FBE1E5AABD82B97B2B4F5D5F32D2F3CDAFED701F6 PUSH32 0x400000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD PUSH2 0xEE SWAP2 SWAP1 PUSH2 0x255 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAD76ED5A PUSH9 0x42E530ADFCE0080000 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x158 SWAP2 SWAP1 PUSH2 0x23A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x172 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x186 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH32 0x55F2EE3BA5DAB2804A6713FBE1E5AABD82B97B2B4F5D5F32D2F3CDAFED701F6 PUSH32 0x800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x40 MLOAD PUSH2 0x1D9 SWAP2 SWAP1 PUSH2 0x270 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMP JUMPDEST PUSH2 0x1EC DUP2 PUSH2 0x2B5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x1FB DUP2 PUSH2 0x2D9 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x20A DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x219 DUP2 PUSH2 0x2FD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x234 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1E3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x24F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1F2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x26A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x201 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x285 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x210 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C0 DUP3 PUSH2 0x2C7 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D2 DUP3 PUSH2 0x28B JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E4 DUP3 PUSH2 0x2AB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2AB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x308 DUP3 PUSH2 0x2AB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F BLOCKHASH PUSH13 0x43B7D624D7CC0870B38465AD4 0xA8 PUSH5 0xB114AFF04C ISZERO POP 0x25 BYTE 0xFC 0xDD SLT PUSH9 0x9B64736F6C63430008 SUB STOP CALLER ", - "sourceMap": "2138:611:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2337:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2592:151;;;;;;;;;;;;;:::i;:::-;;2337:31;;;;;;;;;;;;:::o;2592:151::-;2634:15;2640:8;2634:15;;;;;;:::i;:::-;;;;;;;;2663:7;;;;;;;;;;:23;;;2687:10;2663:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2717:15;2723:8;2717:15;;;;;;:::i;:::-;;;;;;;;2592:151::o;7:177:1:-;117:60;171:5;117:60;:::i;:::-;112:3;105:73;95:89;;:::o;190:189::-;306:66;366:5;306:66;:::i;:::-;301:3;294:79;284:95;;:::o;385:297::-;555:120;669:5;555:120;:::i;:::-;550:3;543:133;533:149;;:::o;688:297::-;858:120;972:5;858:120;:::i;:::-;853:3;846:133;836:149;;:::o;991:268::-;;1145:2;1134:9;1130:18;1122:26;;1158:94;1249:1;1238:9;1234:17;1225:6;1158:94;:::i;:::-;1112:147;;;;:::o;1265:280::-;;1425:2;1414:9;1410:18;1402:26;;1438:100;1535:1;1524:9;1520:17;1511:6;1438:100;:::i;:::-;1392:153;;;;:::o;1551:388::-;;1765:2;1754:9;1750:18;1742:26;;1778:154;1929:1;1918:9;1914:17;1905:6;1778:154;:::i;:::-;1732:207;;;;:::o;1945:388::-;;2159:2;2148:9;2144:18;2136:26;;2172:154;2323:1;2312:9;2308:17;2299:6;2172:154;:::i;:::-;2126:207;;;;:::o;2339:126::-;;2416:42;2409:5;2405:54;2394:65;;2384:81;;;:::o;2471:77::-;;2537:5;2526:16;;2516:32;;;:::o;2554:172::-;;2660:60;2714:5;2660:60;:::i;:::-;2647:73;;2637:89;;;:::o;2732:136::-;;2838:24;2856:5;2838:24;:::i;:::-;2825:37;;2815:53;;;:::o;2874:142::-;;2986:24;3004:5;2986:24;:::i;:::-;2973:37;;2963:53;;;:::o;3022:196::-;;3188:24;3206:5;3188:24;:::i;:::-;3175:37;;3165:53;;;:::o;3224:196::-;;3390:24;3408:5;3390:24;:::i;:::-;3377:37;;3367:53;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "167400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { "join()": "infinite", "staking()": "1232" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2138, "end": 2749, "name": "MSTORE", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "CALLVALUE", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "DUP1", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "ISZERO", "source": 0 }, - { - "begin": 2452, - "end": 2543, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 2452, "end": 2543, "name": "JUMPI", "source": 0 }, - { - "begin": 2452, - "end": 2543, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2452, "end": 2543, "name": "DUP1", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "REVERT", "source": 0 }, - { - "begin": 2452, - "end": 2543, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 2452, "end": 2543, "name": "JUMPDEST", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "POP", "source": 0 }, - { - "begin": 2452, - "end": 2543, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2452, "end": 2543, "name": "MLOAD", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "PUSHSIZE", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "CODESIZE", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "SUB", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "DUP1", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "PUSHSIZE", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "DUP4", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "CODECOPY", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "DUP2", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "DUP2", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "ADD", "source": 0 }, - { - "begin": 2452, - "end": 2543, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2452, "end": 2543, "name": "MSTORE", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "DUP2", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "ADD", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "SWAP1", "source": 0 }, - { - "begin": 2452, - "end": 2543, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 2452, "end": 2543, "name": "SWAP2", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "SWAP1", "source": 0 }, - { - "begin": 2452, - "end": 2543, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { - "begin": 2452, - "end": 2543, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2452, - "end": 2543, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 2452, "end": 2543, "name": "JUMPDEST", "source": 0 }, - { "begin": 2523, "end": 2531, "name": "DUP1", "source": 0 }, - { - "begin": 2496, - "end": 2503, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2496, "end": 2503, "name": "DUP1", "source": 0 }, - { - "begin": 2496, - "end": 2532, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2496, "end": 2532, "name": "EXP", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "DUP2", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "SLOAD", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "DUP2", "source": 0 }, - { - "begin": 2496, - "end": 2532, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2496, "end": 2532, "name": "MUL", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "NOT", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "AND", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "SWAP1", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "DUP4", "source": 0 }, - { - "begin": 2496, - "end": 2532, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2496, "end": 2532, "name": "AND", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "MUL", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "OR", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "SWAP1", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "SSTORE", "source": 0 }, - { "begin": 2496, "end": 2532, "name": "POP", "source": 0 }, - { "begin": 2452, "end": 2543, "name": "POP", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 2138, "end": 2749, "name": "JUMP", "source": 0 }, - { "begin": 7, "end": 150, "name": "tag", "source": 1, "value": "8" }, - { "begin": 7, "end": 150, "name": "JUMPDEST", "source": 1 }, - { "begin": 7, "end": 150, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 95, "end": 101, "name": "DUP2", "source": 1 }, - { "begin": 89, "end": 102, "name": "MLOAD", "source": 1 }, - { "begin": 80, "end": 102, "name": "SWAP1", "source": 1 }, - { "begin": 80, "end": 102, "name": "POP", "source": 1 }, - { - "begin": 111, - "end": 144, - "name": "PUSH [tag]", - "source": 1, - "value": "10" - }, - { "begin": 138, "end": 143, "name": "DUP2", "source": 1 }, - { - "begin": 111, - "end": 144, - "name": "PUSH [tag]", - "source": 1, - "value": "11" - }, - { - "begin": 111, - "end": 144, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 111, - "end": 144, - "name": "tag", - "source": 1, - "value": "10" - }, - { "begin": 111, "end": 144, "name": "JUMPDEST", "source": 1 }, - { "begin": 70, "end": 150, "name": "SWAP3", "source": 1 }, - { "begin": 70, "end": 150, "name": "SWAP2", "source": 1 }, - { "begin": 70, "end": 150, "name": "POP", "source": 1 }, - { "begin": 70, "end": 150, "name": "POP", "source": 1 }, - { - "begin": 70, - "end": 150, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 156, - "end": 440, - "name": "tag", - "source": 1, - "value": "3" - }, - { "begin": 156, "end": 440, "name": "JUMPDEST", "source": 1 }, - { - "begin": 156, - "end": 440, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 275, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 263, "end": 272, "name": "DUP3", "source": 1 }, - { "begin": 254, "end": 261, "name": "DUP5", "source": 1 }, - { "begin": 250, "end": 273, "name": "SUB", "source": 1 }, - { "begin": 246, "end": 278, "name": "SLT", "source": 1 }, - { "begin": 243, "end": 245, "name": "ISZERO", "source": 1 }, - { - "begin": 243, - "end": 245, - "name": "PUSH [tag]", - "source": 1, - "value": "13" - }, - { "begin": 243, "end": 245, "name": "JUMPI", "source": 1 }, - { - "begin": 291, - "end": 292, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 288, "end": 289, "name": "DUP1", "source": 1 }, - { "begin": 281, "end": 293, "name": "REVERT", "source": 1 }, - { - "begin": 243, - "end": 245, - "name": "tag", - "source": 1, - "value": "13" - }, - { "begin": 243, "end": 245, "name": "JUMPDEST", "source": 1 }, - { - "begin": 334, - "end": 335, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 359, - "end": 423, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { "begin": 415, "end": 422, "name": "DUP5", "source": 1 }, - { "begin": 406, "end": 412, "name": "DUP3", "source": 1 }, - { "begin": 395, "end": 404, "name": "DUP6", "source": 1 }, - { "begin": 391, "end": 413, "name": "ADD", "source": 1 }, - { - "begin": 359, - "end": 423, - "name": "PUSH [tag]", - "source": 1, - "value": "8" - }, - { - "begin": 359, - "end": 423, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 359, - "end": 423, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 359, "end": 423, "name": "JUMPDEST", "source": 1 }, - { "begin": 349, "end": 423, "name": "SWAP2", "source": 1 }, - { "begin": 349, "end": 423, "name": "POP", "source": 1 }, - { "begin": 305, "end": 433, "name": "POP", "source": 1 }, - { "begin": 233, "end": 440, "name": "SWAP3", "source": 1 }, - { "begin": 233, "end": 440, "name": "SWAP2", "source": 1 }, - { "begin": 233, "end": 440, "name": "POP", "source": 1 }, - { "begin": 233, "end": 440, "name": "POP", "source": 1 }, - { - "begin": 233, - "end": 440, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 446, - "end": 542, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 446, "end": 542, "name": "JUMPDEST", "source": 1 }, - { - "begin": 446, - "end": 542, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 512, - "end": 536, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { "begin": 530, "end": 535, "name": "DUP3", "source": 1 }, - { - "begin": 512, - "end": 536, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 512, - "end": 536, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 512, - "end": 536, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 512, "end": 536, "name": "JUMPDEST", "source": 1 }, - { "begin": 501, "end": 536, "name": "SWAP1", "source": 1 }, - { "begin": 501, "end": 536, "name": "POP", "source": 1 }, - { "begin": 491, "end": 542, "name": "SWAP2", "source": 1 }, - { "begin": 491, "end": 542, "name": "SWAP1", "source": 1 }, - { "begin": 491, "end": 542, "name": "POP", "source": 1 }, - { - "begin": 491, - "end": 542, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 548, - "end": 674, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 548, "end": 674, "name": "JUMPDEST", "source": 1 }, - { - "begin": 548, - "end": 674, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 625, - "end": 667, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 618, "end": 623, "name": "DUP3", "source": 1 }, - { "begin": 614, "end": 668, "name": "AND", "source": 1 }, - { "begin": 603, "end": 668, "name": "SWAP1", "source": 1 }, - { "begin": 603, "end": 668, "name": "POP", "source": 1 }, - { "begin": 593, "end": 674, "name": "SWAP2", "source": 1 }, - { "begin": 593, "end": 674, "name": "SWAP1", "source": 1 }, - { "begin": 593, "end": 674, "name": "POP", "source": 1 }, - { - "begin": 593, - "end": 674, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 680, - "end": 802, - "name": "tag", - "source": 1, - "value": "11" - }, - { "begin": 680, "end": 802, "name": "JUMPDEST", "source": 1 }, - { - "begin": 753, - "end": 777, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { "begin": 771, "end": 776, "name": "DUP2", "source": 1 }, - { - "begin": 753, - "end": 777, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 753, - "end": 777, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 753, - "end": 777, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 753, "end": 777, "name": "JUMPDEST", "source": 1 }, - { "begin": 746, "end": 751, "name": "DUP2", "source": 1 }, - { "begin": 743, "end": 778, "name": "EQ", "source": 1 }, - { - "begin": 733, - "end": 735, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 733, "end": 735, "name": "JUMPI", "source": 1 }, - { - "begin": 792, - "end": 793, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 789, "end": 790, "name": "DUP1", "source": 1 }, - { "begin": 782, "end": 794, "name": "REVERT", "source": 1 }, - { - "begin": 733, - "end": 735, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 733, "end": 735, "name": "JUMPDEST", "source": 1 }, - { "begin": 723, "end": 802, "name": "POP", "source": 1 }, - { - "begin": 723, - "end": 802, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2138, - "end": 2749, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 2138, "end": 2749, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 2138, "end": 2749, "name": "DUP1", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2138, "end": 2749, "name": "CODECOPY", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2138, "end": 2749, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212202f406c043b7d624d7cc0870b38465ad4a864b114aff04c1550251afcdd12689b64736f6c63430008030033", - ".code": [ - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2138, "end": 2749, "name": "MSTORE", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { - "begin": 2138, - "end": 2749, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 2138, "end": 2749, "name": "LT", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 2138, "end": 2749, "name": "JUMPI", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 2138, - "end": 2749, - "name": "CALLDATALOAD", - "source": 0 - }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 2138, "end": 2749, "name": "SHR", "source": 0 }, - { "begin": 2138, "end": 2749, "name": "DUP1", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "4CF088D9" - }, - { "begin": 2138, "end": 2749, "name": "EQ", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 2138, "end": 2749, "name": "JUMPI", "source": 0 }, - { "begin": 2138, "end": 2749, "name": "DUP1", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "B688A363" - }, - { "begin": 2138, "end": 2749, "name": "EQ", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 2138, "end": 2749, "name": "JUMPI", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 2138, "end": 2749, "name": "JUMP", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 2138, "end": 2749, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "CALLDATASIZE", - "source": 0 - }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 2138, "end": 2749, "name": "JUMPI", "source": 0 }, - { "begin": 2138, "end": 2749, "name": "STOP", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 2138, "end": 2749, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2138, - "end": 2749, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2138, "end": 2749, "name": "DUP1", "source": 0 }, - { "begin": 2138, "end": 2749, "name": "REVERT", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 2337, "end": 2368, "name": "JUMPDEST", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "CALLVALUE", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "DUP1", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "ISZERO", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 2337, "end": 2368, "name": "JUMPI", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2337, "end": 2368, "name": "DUP1", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "REVERT", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 2337, "end": 2368, "name": "JUMPDEST", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "POP", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 2337, - "end": 2368, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2337, - "end": 2368, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 2337, "end": 2368, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2337, "end": 2368, "name": "MLOAD", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 2337, "end": 2368, "name": "SWAP2", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "SWAP1", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { - "begin": 2337, - "end": 2368, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2337, - "end": 2368, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 2337, "end": 2368, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2337, "end": 2368, "name": "MLOAD", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "DUP1", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "SWAP2", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "SUB", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "SWAP1", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "RETURN", "source": 0 }, - { - "begin": 2592, - "end": 2743, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 2592, "end": 2743, "name": "JUMPDEST", "source": 0 }, - { "begin": 2592, "end": 2743, "name": "CALLVALUE", "source": 0 }, - { "begin": 2592, "end": 2743, "name": "DUP1", "source": 0 }, - { "begin": 2592, "end": 2743, "name": "ISZERO", "source": 0 }, - { - "begin": 2592, - "end": 2743, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 2592, "end": 2743, "name": "JUMPI", "source": 0 }, - { - "begin": 2592, - "end": 2743, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2592, "end": 2743, "name": "DUP1", "source": 0 }, - { "begin": 2592, "end": 2743, "name": "REVERT", "source": 0 }, - { - "begin": 2592, - "end": 2743, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 2592, "end": 2743, "name": "JUMPDEST", "source": 0 }, - { "begin": 2592, "end": 2743, "name": "POP", "source": 0 }, - { - "begin": 2592, - "end": 2743, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { - "begin": 2592, - "end": 2743, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { - "begin": 2592, - "end": 2743, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2592, - "end": 2743, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 2592, "end": 2743, "name": "JUMPDEST", "source": 0 }, - { "begin": 2592, "end": 2743, "name": "STOP", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 2337, "end": 2368, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2337, "end": 2368, "name": "DUP1", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "SLOAD", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "SWAP1", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2337, "end": 2368, "name": "EXP", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "SWAP1", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "DIV", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2337, "end": 2368, "name": "AND", "source": 0 }, - { "begin": 2337, "end": 2368, "name": "DUP2", "source": 0 }, - { - "begin": 2337, - "end": 2368, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 2592, - "end": 2743, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 2592, "end": 2743, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2634, - "end": 2649, - "name": "PUSH", - "source": 0, - "value": "55F2EE3BA5DAB2804A6713FBE1E5AABD82B97B2B4F5D5F32D2F3CDAFED701F6" - }, - { - "begin": 2640, - "end": 2648, - "name": "PUSH", - "source": 0, - "value": "400000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 2634, - "end": 2649, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2634, "end": 2649, "name": "MLOAD", "source": 0 }, - { - "begin": 2634, - "end": 2649, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { "begin": 2634, "end": 2649, "name": "SWAP2", "source": 0 }, - { "begin": 2634, "end": 2649, "name": "SWAP1", "source": 0 }, - { - "begin": 2634, - "end": 2649, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { - "begin": 2634, - "end": 2649, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2634, - "end": 2649, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 2634, "end": 2649, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2634, - "end": 2649, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2634, "end": 2649, "name": "MLOAD", "source": 0 }, - { "begin": 2634, "end": 2649, "name": "DUP1", "source": 0 }, - { "begin": 2634, "end": 2649, "name": "SWAP2", "source": 0 }, - { "begin": 2634, "end": 2649, "name": "SUB", "source": 0 }, - { "begin": 2634, "end": 2649, "name": "SWAP1", "source": 0 }, - { "begin": 2634, "end": 2649, "name": "LOG1", "source": 0 }, - { - "begin": 2663, - "end": 2670, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2663, "end": 2670, "name": "DUP1", "source": 0 }, - { "begin": 2663, "end": 2670, "name": "SLOAD", "source": 0 }, - { "begin": 2663, "end": 2670, "name": "SWAP1", "source": 0 }, - { - "begin": 2663, - "end": 2670, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2663, "end": 2670, "name": "EXP", "source": 0 }, - { "begin": 2663, "end": 2670, "name": "SWAP1", "source": 0 }, - { "begin": 2663, "end": 2670, "name": "DIV", "source": 0 }, - { - "begin": 2663, - "end": 2670, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2663, "end": 2670, "name": "AND", "source": 0 }, - { - "begin": 2663, - "end": 2686, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2663, "end": 2686, "name": "AND", "source": 0 }, - { - "begin": 2663, - "end": 2686, - "name": "PUSH", - "source": 0, - "value": "AD76ED5A" - }, - { - "begin": 2687, - "end": 2697, - "name": "PUSH", - "source": 0, - "value": "42E530ADFCE0080000" - }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2663, "end": 2698, "name": "MLOAD", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP3", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" - }, - { "begin": 2663, "end": 2698, "name": "AND", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 2663, "end": 2698, "name": "SHL", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP2", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "MSTORE", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 2663, "end": 2698, "name": "ADD", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 2663, "end": 2698, "name": "SWAP2", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "SWAP1", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH [tag]", - "source": 0, - "value": "19" - }, - { - "begin": 2663, - "end": 2698, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2663, - "end": 2698, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 2663, "end": 2698, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2663, "end": 2698, "name": "MLOAD", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP1", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP4", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "SUB", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP2", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2663, "end": 2698, "name": "DUP8", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP1", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "EXTCODESIZE", - "source": 0 - }, - { "begin": 2663, "end": 2698, "name": "ISZERO", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP1", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "ISZERO", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { "begin": 2663, "end": 2698, "name": "JUMPI", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2663, "end": 2698, "name": "DUP1", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "REVERT", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "tag", - "source": 0, - "value": "20" - }, - { "begin": 2663, "end": 2698, "name": "JUMPDEST", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "POP", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "GAS", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "CALL", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "ISZERO", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "DUP1", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "ISZERO", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH [tag]", - "source": 0, - "value": "22" - }, - { "begin": 2663, "end": 2698, "name": "JUMPI", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "RETURNDATASIZE", - "source": 0 - }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2663, "end": 2698, "name": "DUP1", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "RETURNDATACOPY", - "source": 0 - }, - { - "begin": 2663, - "end": 2698, - "name": "RETURNDATASIZE", - "source": 0 - }, - { - "begin": 2663, - "end": 2698, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2663, "end": 2698, "name": "REVERT", "source": 0 }, - { - "begin": 2663, - "end": 2698, - "name": "tag", - "source": 0, - "value": "22" - }, - { "begin": 2663, "end": 2698, "name": "JUMPDEST", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "POP", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "POP", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "POP", "source": 0 }, - { "begin": 2663, "end": 2698, "name": "POP", "source": 0 }, - { - "begin": 2717, - "end": 2732, - "name": "PUSH", - "source": 0, - "value": "55F2EE3BA5DAB2804A6713FBE1E5AABD82B97B2B4F5D5F32D2F3CDAFED701F6" - }, - { - "begin": 2723, - "end": 2731, - "name": "PUSH", - "source": 0, - "value": "800000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 2717, - "end": 2732, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2717, "end": 2732, "name": "MLOAD", "source": 0 }, - { - "begin": 2717, - "end": 2732, - "name": "PUSH [tag]", - "source": 0, - "value": "23" - }, - { "begin": 2717, "end": 2732, "name": "SWAP2", "source": 0 }, - { "begin": 2717, "end": 2732, "name": "SWAP1", "source": 0 }, - { - "begin": 2717, - "end": 2732, - "name": "PUSH [tag]", - "source": 0, - "value": "24" - }, - { - "begin": 2717, - "end": 2732, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2717, - "end": 2732, - "name": "tag", - "source": 0, - "value": "23" - }, - { "begin": 2717, "end": 2732, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2717, - "end": 2732, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2717, "end": 2732, "name": "MLOAD", "source": 0 }, - { "begin": 2717, "end": 2732, "name": "DUP1", "source": 0 }, - { "begin": 2717, "end": 2732, "name": "SWAP2", "source": 0 }, - { "begin": 2717, "end": 2732, "name": "SUB", "source": 0 }, - { "begin": 2717, "end": 2732, "name": "SWAP1", "source": 0 }, - { "begin": 2717, "end": 2732, "name": "LOG1", "source": 0 }, - { - "begin": 2592, - "end": 2743, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 184, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 7, "end": 184, "name": "JUMPDEST", "source": 1 }, - { - "begin": 117, - "end": 177, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { "begin": 171, "end": 176, "name": "DUP2", "source": 1 }, - { - "begin": 117, - "end": 177, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { - "begin": 117, - "end": 177, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 117, - "end": 177, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 117, "end": 177, "name": "JUMPDEST", "source": 1 }, - { "begin": 112, "end": 115, "name": "DUP3", "source": 1 }, - { "begin": 105, "end": 178, "name": "MSTORE", "source": 1 }, - { "begin": 95, "end": 184, "name": "POP", "source": 1 }, - { "begin": 95, "end": 184, "name": "POP", "source": 1 }, - { - "begin": 95, - "end": 184, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 190, - "end": 379, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 190, "end": 379, "name": "JUMPDEST", "source": 1 }, - { - "begin": 306, - "end": 372, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { "begin": 366, "end": 371, "name": "DUP2", "source": 1 }, - { - "begin": 306, - "end": 372, - "name": "PUSH [tag]", - "source": 1, - "value": "33" - }, - { - "begin": 306, - "end": 372, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 306, - "end": 372, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 306, "end": 372, "name": "JUMPDEST", "source": 1 }, - { "begin": 301, "end": 304, "name": "DUP3", "source": 1 }, - { "begin": 294, "end": 373, "name": "MSTORE", "source": 1 }, - { "begin": 284, "end": 379, "name": "POP", "source": 1 }, - { "begin": 284, "end": 379, "name": "POP", "source": 1 }, - { - "begin": 284, - "end": 379, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 385, - "end": 682, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 385, "end": 682, "name": "JUMPDEST", "source": 1 }, - { - "begin": 555, - "end": 675, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 669, "end": 674, "name": "DUP2", "source": 1 }, - { - "begin": 555, - "end": 675, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { - "begin": 555, - "end": 675, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 555, - "end": 675, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 555, "end": 675, "name": "JUMPDEST", "source": 1 }, - { "begin": 550, "end": 553, "name": "DUP3", "source": 1 }, - { "begin": 543, "end": 676, "name": "MSTORE", "source": 1 }, - { "begin": 533, "end": 682, "name": "POP", "source": 1 }, - { "begin": 533, "end": 682, "name": "POP", "source": 1 }, - { - "begin": 533, - "end": 682, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 688, - "end": 985, - "name": "tag", - "source": 1, - "value": "38" - }, - { "begin": 688, "end": 985, "name": "JUMPDEST", "source": 1 }, - { - "begin": 858, - "end": 978, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { "begin": 972, "end": 977, "name": "DUP2", "source": 1 }, - { - "begin": 858, - "end": 978, - "name": "PUSH [tag]", - "source": 1, - "value": "41" - }, - { - "begin": 858, - "end": 978, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 858, - "end": 978, - "name": "tag", - "source": 1, - "value": "40" - }, - { "begin": 858, "end": 978, "name": "JUMPDEST", "source": 1 }, - { "begin": 853, "end": 856, "name": "DUP3", "source": 1 }, - { "begin": 846, "end": 979, "name": "MSTORE", "source": 1 }, - { "begin": 836, "end": 985, "name": "POP", "source": 1 }, - { "begin": 836, "end": 985, "name": "POP", "source": 1 }, - { - "begin": 836, - "end": 985, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 991, - "end": 1259, - "name": "tag", - "source": 1, - "value": "11" - }, - { "begin": 991, "end": 1259, "name": "JUMPDEST", "source": 1 }, - { - "begin": 991, - "end": 1259, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1145, - "end": 1147, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1134, "end": 1143, "name": "DUP3", "source": 1 }, - { "begin": 1130, "end": 1148, "name": "ADD", "source": 1 }, - { "begin": 1122, "end": 1148, "name": "SWAP1", "source": 1 }, - { "begin": 1122, "end": 1148, "name": "POP", "source": 1 }, - { - "begin": 1158, - "end": 1252, - "name": "PUSH [tag]", - "source": 1, - "value": "43" - }, - { - "begin": 1249, - "end": 1250, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1238, "end": 1247, "name": "DUP4", "source": 1 }, - { "begin": 1234, "end": 1251, "name": "ADD", "source": 1 }, - { "begin": 1225, "end": 1231, "name": "DUP5", "source": 1 }, - { - "begin": 1158, - "end": 1252, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 1158, - "end": 1252, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1158, - "end": 1252, - "name": "tag", - "source": 1, - "value": "43" - }, - { "begin": 1158, "end": 1252, "name": "JUMPDEST", "source": 1 }, - { "begin": 1112, "end": 1259, "name": "SWAP3", "source": 1 }, - { "begin": 1112, "end": 1259, "name": "SWAP2", "source": 1 }, - { "begin": 1112, "end": 1259, "name": "POP", "source": 1 }, - { "begin": 1112, "end": 1259, "name": "POP", "source": 1 }, - { - "begin": 1112, - "end": 1259, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1265, - "end": 1545, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 1265, "end": 1545, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1265, - "end": 1545, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1425, - "end": 1427, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1414, "end": 1423, "name": "DUP3", "source": 1 }, - { "begin": 1410, "end": 1428, "name": "ADD", "source": 1 }, - { "begin": 1402, "end": 1428, "name": "SWAP1", "source": 1 }, - { "begin": 1402, "end": 1428, "name": "POP", "source": 1 }, - { - "begin": 1438, - "end": 1538, - "name": "PUSH [tag]", - "source": 1, - "value": "45" - }, - { - "begin": 1535, - "end": 1536, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1524, "end": 1533, "name": "DUP4", "source": 1 }, - { "begin": 1520, "end": 1537, "name": "ADD", "source": 1 }, - { "begin": 1511, "end": 1517, "name": "DUP5", "source": 1 }, - { - "begin": 1438, - "end": 1538, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 1438, - "end": 1538, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1438, - "end": 1538, - "name": "tag", - "source": 1, - "value": "45" - }, - { "begin": 1438, "end": 1538, "name": "JUMPDEST", "source": 1 }, - { "begin": 1392, "end": 1545, "name": "SWAP3", "source": 1 }, - { "begin": 1392, "end": 1545, "name": "SWAP2", "source": 1 }, - { "begin": 1392, "end": 1545, "name": "POP", "source": 1 }, - { "begin": 1392, "end": 1545, "name": "POP", "source": 1 }, - { - "begin": 1392, - "end": 1545, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1551, - "end": 1939, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 1551, "end": 1939, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1551, - "end": 1939, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1765, - "end": 1767, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1754, "end": 1763, "name": "DUP3", "source": 1 }, - { "begin": 1750, "end": 1768, "name": "ADD", "source": 1 }, - { "begin": 1742, "end": 1768, "name": "SWAP1", "source": 1 }, - { "begin": 1742, "end": 1768, "name": "POP", "source": 1 }, - { - "begin": 1778, - "end": 1932, - "name": "PUSH [tag]", - "source": 1, - "value": "47" - }, - { - "begin": 1929, - "end": 1930, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1918, "end": 1927, "name": "DUP4", "source": 1 }, - { "begin": 1914, "end": 1931, "name": "ADD", "source": 1 }, - { "begin": 1905, "end": 1911, "name": "DUP5", "source": 1 }, - { - "begin": 1778, - "end": 1932, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { - "begin": 1778, - "end": 1932, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1778, - "end": 1932, - "name": "tag", - "source": 1, - "value": "47" - }, - { "begin": 1778, "end": 1932, "name": "JUMPDEST", "source": 1 }, - { "begin": 1732, "end": 1939, "name": "SWAP3", "source": 1 }, - { "begin": 1732, "end": 1939, "name": "SWAP2", "source": 1 }, - { "begin": 1732, "end": 1939, "name": "POP", "source": 1 }, - { "begin": 1732, "end": 1939, "name": "POP", "source": 1 }, - { - "begin": 1732, - "end": 1939, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1945, - "end": 2333, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 1945, "end": 2333, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1945, - "end": 2333, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2159, - "end": 2161, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 2148, "end": 2157, "name": "DUP3", "source": 1 }, - { "begin": 2144, "end": 2162, "name": "ADD", "source": 1 }, - { "begin": 2136, "end": 2162, "name": "SWAP1", "source": 1 }, - { "begin": 2136, "end": 2162, "name": "POP", "source": 1 }, - { - "begin": 2172, - "end": 2326, - "name": "PUSH [tag]", - "source": 1, - "value": "49" - }, - { - "begin": 2323, - "end": 2324, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2312, "end": 2321, "name": "DUP4", "source": 1 }, - { "begin": 2308, "end": 2325, "name": "ADD", "source": 1 }, - { "begin": 2299, "end": 2305, "name": "DUP5", "source": 1 }, - { - "begin": 2172, - "end": 2326, - "name": "PUSH [tag]", - "source": 1, - "value": "38" - }, - { - "begin": 2172, - "end": 2326, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2172, - "end": 2326, - "name": "tag", - "source": 1, - "value": "49" - }, - { "begin": 2172, "end": 2326, "name": "JUMPDEST", "source": 1 }, - { "begin": 2126, "end": 2333, "name": "SWAP3", "source": 1 }, - { "begin": 2126, "end": 2333, "name": "SWAP2", "source": 1 }, - { "begin": 2126, "end": 2333, "name": "POP", "source": 1 }, - { "begin": 2126, "end": 2333, "name": "POP", "source": 1 }, - { - "begin": 2126, - "end": 2333, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2339, - "end": 2465, - "name": "tag", - "source": 1, - "value": "50" - }, - { "begin": 2339, "end": 2465, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2339, - "end": 2465, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2416, - "end": 2458, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2409, "end": 2414, "name": "DUP3", "source": 1 }, - { "begin": 2405, "end": 2459, "name": "AND", "source": 1 }, - { "begin": 2394, "end": 2459, "name": "SWAP1", "source": 1 }, - { "begin": 2394, "end": 2459, "name": "POP", "source": 1 }, - { "begin": 2384, "end": 2465, "name": "SWAP2", "source": 1 }, - { "begin": 2384, "end": 2465, "name": "SWAP1", "source": 1 }, - { "begin": 2384, "end": 2465, "name": "POP", "source": 1 }, - { - "begin": 2384, - "end": 2465, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2471, - "end": 2548, - "name": "tag", - "source": 1, - "value": "52" - }, - { "begin": 2471, "end": 2548, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2471, - "end": 2548, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2537, "end": 2542, "name": "DUP2", "source": 1 }, - { "begin": 2526, "end": 2542, "name": "SWAP1", "source": 1 }, - { "begin": 2526, "end": 2542, "name": "POP", "source": 1 }, - { "begin": 2516, "end": 2548, "name": "SWAP2", "source": 1 }, - { "begin": 2516, "end": 2548, "name": "SWAP1", "source": 1 }, - { "begin": 2516, "end": 2548, "name": "POP", "source": 1 }, - { - "begin": 2516, - "end": 2548, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2554, - "end": 2726, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 2554, "end": 2726, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2554, - "end": 2726, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2660, - "end": 2720, - "name": "PUSH [tag]", - "source": 1, - "value": "55" - }, - { "begin": 2714, "end": 2719, "name": "DUP3", "source": 1 }, - { - "begin": 2660, - "end": 2720, - "name": "PUSH [tag]", - "source": 1, - "value": "56" - }, - { - "begin": 2660, - "end": 2720, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2660, - "end": 2720, - "name": "tag", - "source": 1, - "value": "55" - }, - { "begin": 2660, "end": 2720, "name": "JUMPDEST", "source": 1 }, - { "begin": 2647, "end": 2720, "name": "SWAP1", "source": 1 }, - { "begin": 2647, "end": 2720, "name": "POP", "source": 1 }, - { "begin": 2637, "end": 2726, "name": "SWAP2", "source": 1 }, - { "begin": 2637, "end": 2726, "name": "SWAP1", "source": 1 }, - { "begin": 2637, "end": 2726, "name": "POP", "source": 1 }, - { - "begin": 2637, - "end": 2726, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2732, - "end": 2868, - "name": "tag", - "source": 1, - "value": "56" - }, - { "begin": 2732, "end": 2868, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2732, - "end": 2868, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2838, - "end": 2862, - "name": "PUSH [tag]", - "source": 1, - "value": "58" - }, - { "begin": 2856, "end": 2861, "name": "DUP3", "source": 1 }, - { - "begin": 2838, - "end": 2862, - "name": "PUSH [tag]", - "source": 1, - "value": "50" - }, - { - "begin": 2838, - "end": 2862, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2838, - "end": 2862, - "name": "tag", - "source": 1, - "value": "58" - }, - { "begin": 2838, "end": 2862, "name": "JUMPDEST", "source": 1 }, - { "begin": 2825, "end": 2862, "name": "SWAP1", "source": 1 }, - { "begin": 2825, "end": 2862, "name": "POP", "source": 1 }, - { "begin": 2815, "end": 2868, "name": "SWAP2", "source": 1 }, - { "begin": 2815, "end": 2868, "name": "SWAP1", "source": 1 }, - { "begin": 2815, "end": 2868, "name": "POP", "source": 1 }, - { - "begin": 2815, - "end": 2868, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2874, - "end": 3016, - "name": "tag", - "source": 1, - "value": "33" - }, - { "begin": 2874, "end": 3016, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2874, - "end": 3016, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2986, - "end": 3010, - "name": "PUSH [tag]", - "source": 1, - "value": "60" - }, - { "begin": 3004, "end": 3009, "name": "DUP3", "source": 1 }, - { - "begin": 2986, - "end": 3010, - "name": "PUSH [tag]", - "source": 1, - "value": "52" - }, - { - "begin": 2986, - "end": 3010, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2986, - "end": 3010, - "name": "tag", - "source": 1, - "value": "60" - }, - { "begin": 2986, "end": 3010, "name": "JUMPDEST", "source": 1 }, - { "begin": 2973, "end": 3010, "name": "SWAP1", "source": 1 }, - { "begin": 2973, "end": 3010, "name": "POP", "source": 1 }, - { "begin": 2963, "end": 3016, "name": "SWAP2", "source": 1 }, - { "begin": 2963, "end": 3016, "name": "SWAP1", "source": 1 }, - { "begin": 2963, "end": 3016, "name": "POP", "source": 1 }, - { - "begin": 2963, - "end": 3016, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 3022, - "end": 3218, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 3022, "end": 3218, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3022, - "end": 3218, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 3188, - "end": 3212, - "name": "PUSH [tag]", - "source": 1, - "value": "62" - }, - { "begin": 3206, "end": 3211, "name": "DUP3", "source": 1 }, - { - "begin": 3188, - "end": 3212, - "name": "PUSH [tag]", - "source": 1, - "value": "52" - }, - { - "begin": 3188, - "end": 3212, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3188, - "end": 3212, - "name": "tag", - "source": 1, - "value": "62" - }, - { "begin": 3188, "end": 3212, "name": "JUMPDEST", "source": 1 }, - { "begin": 3175, "end": 3212, "name": "SWAP1", "source": 1 }, - { "begin": 3175, "end": 3212, "name": "POP", "source": 1 }, - { "begin": 3165, "end": 3218, "name": "SWAP2", "source": 1 }, - { "begin": 3165, "end": 3218, "name": "SWAP1", "source": 1 }, - { "begin": 3165, "end": 3218, "name": "POP", "source": 1 }, - { - "begin": 3165, - "end": 3218, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 3224, - "end": 3420, - "name": "tag", - "source": 1, - "value": "41" - }, - { "begin": 3224, "end": 3420, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3224, - "end": 3420, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 3390, - "end": 3414, - "name": "PUSH [tag]", - "source": 1, - "value": "64" - }, - { "begin": 3408, "end": 3413, "name": "DUP3", "source": 1 }, - { - "begin": 3390, - "end": 3414, - "name": "PUSH [tag]", - "source": 1, - "value": "52" - }, - { - "begin": 3390, - "end": 3414, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3390, - "end": 3414, - "name": "tag", - "source": 1, - "value": "64" - }, - { "begin": 3390, "end": 3414, "name": "JUMPDEST", "source": 1 }, - { "begin": 3377, "end": 3414, "name": "SWAP1", "source": 1 }, - { "begin": 3377, "end": 3414, "name": "POP", "source": 1 }, - { "begin": 3367, "end": 3420, "name": "SWAP2", "source": 1 }, - { "begin": 3367, "end": 3420, "name": "SWAP1", "source": 1 }, - { "begin": 3367, "end": 3420, "name": "POP", "source": 1 }, - { - "begin": 3367, - "end": 3420, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "join()": "b688a363", "staking()": "4cf088d9" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_staking\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"Trace\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"join\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staking\",\"outputs\":[{\"internalType\":\"contract ParachainStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"Trace(uint256)\":{\"notice\":\"Solely for debugging purposes\"}},\"kind\":\"user\",\"methods\":{\"staking()\":{\"notice\":\"The ParachainStaking wrapper at the known pre-compile address. This will be used to make all calls to the underlying staking solution\"}},\"notice\":\"An even more dead simple example to call the precompile\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"JoinCandidatesWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf3b0fc6d2205a8ebc4a47e9aeaffb86224809e6eb8ca5beb8be7f2a124b30a7a\",\"urls\":[\"bzz-raw://7f0c089b11c7f4025d63cb35b8b4346b60c9982c4955144bbec766fc62874130\",\"dweb:/ipfs/QmURWoch9DojHiCedY878GCwGMYEGeVG6BZJyqzBmMgC1i\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 79, - "contract": "main.sol:JoinCandidatesWrapper", - "label": "staking", - "offset": 0, - "slot": "0", - "type": "t_contract(ParachainStaking)74" - } - ], - "types": { - "t_contract(ParachainStaking)74": { - "encoding": "inplace", - "label": "contract ParachainStaking", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "events": { - "Trace(uint256)": { "notice": "Solely for debugging purposes" } - }, - "kind": "user", - "methods": { - "staking()": { - "notice": "The ParachainStaking wrapper at the known pre-compile address. This will be used to make all calls to the underlying staking solution" - } - }, - "notice": "An even more dead simple example to call the precompile", - "version": 1 - } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n\n interface ParachainStaking {\n // First some simple accessors\n \n /// Check whether the specified address is currently a staking nominator\n /// TODO Not implemented in Rust yet\n function is_delegator(address) external view returns (bool);\n \n // Now the dispatchables\n \n /// Join the set of collator candidates\n function join_candidates(uint256 amount) external;\n \n /// Request to leave the set of candidates. If successful, the account is immediately\n /// removed from the candidate pool to prevent selection as a collator, but unbonding is\n /// executed with a delay of BondDuration rounds.\n function leave_candidates() external;\n \n /// Temporarily leave the set of collator candidates without unbonding\n function go_offline() external;\n \n /// Rejoin the set of collator candidates if previously had called go_offline\n function go_online() external;\n \n /// Bond more for collator candidates\n function candidate_bond_more(uint256 more) external;\n \n /// Bond less for collator candidates\n function candidate_bond_less(uint256 less) external;\n \n /// If caller is not a nominator, then join the set of nominators\n /// If caller is a nominator, then makes nomination to change their nomination state\n function nominate(address collator, uint256 amount) external;\n \n /// Leave the set of nominators and, by implication, revoke all ongoing nominations\n function leave_delegators() external;\n \n /// Revoke an existing nomination\n function revoke_nomination(address collator) external;\n \n /// Bond more for nominators with respect to a specific collator candidate\n function nominator_bond_more(address candidate, uint256 more) external;\n \n /// Bond less for nominators with respect to a specific nominator candidate\n function nominator_bond_less(address candidate, uint256 less) external;\n }\n\n /// An even more dead simple example to call the precompile\n contract JoinCandidatesWrapper {\n /// The ParachainStaking wrapper at the known pre-compile address. This will be used to make all calls\n /// to the underlying staking solution\n ParachainStaking public staking;\n\n /// Solely for debugging purposes\n event Trace(uint256);\n\n constructor(address _staking) {\n staking = ParachainStaking(_staking);\n }\n\n receive() external payable {}\n\n function join() public {\n emit Trace(1 << 250);\n staking.join_candidates(1234 ether);\n emit Trace(2 << 250);\n }\n }" -} diff --git a/tests/contracts/compiled/LocalAsset.json b/tests/contracts/compiled/LocalAsset.json new file mode 100644 index 0000000000..ef32bbcde6 --- /dev/null +++ b/tests/contracts/compiled/LocalAsset.json @@ -0,0 +1,196 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "burn", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clear_metadata", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "freeze", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "freeze_asset", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "mint", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "string", "name": "name", "type": "string" }, + { "internalType": "string", "name": "symbol", "type": "string" }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ], + "name": "set_metadata", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "issuer", "type": "address" }, + { "internalType": "address", "name": "admin", "type": "address" }, + { "internalType": "address", "name": "freezer", "type": "address" } + ], + "name": "set_team", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "thaw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "thaw_asset", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "name": "transfer_ownership", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "burn(address,uint256)": { + "details": "Burn tokens from an address Selector: 9dc29fac", + "params": { + "from": "address The address from which you want to burn tokens", + "value": "uint256 the amount of tokens to be burnt" + } + }, + "clear_metadata()": { + "details": "Clear the name, symbol and decimals of your asset Selector: d3ba4b9e" + }, + "freeze(address)": { + "details": "Freeze an account, preventing it from operating with the asset Selector: 8d1fdf2f", + "params": { "account": "address The address that you want to freeze" } + }, + "freeze_asset()": { + "details": "Freeze the entire asset operations Selector: 6b8751c1" + }, + "mint(address,uint256)": { + "details": "Mint tokens to an address Selector: 40c10f19", + "params": { + "to": "address The address to which you want to mint tokens", + "value": "uint256 the amount of tokens to be minted" + } + }, + "set_metadata(string,string,uint8)": { + "details": "Specify the name, symbol and decimals of your asset Selector: ee5dc1e4", + "params": { + "decimals": "uint8 The number of decimals of your asset", + "name": "string The name of the asset", + "symbol": "string The symbol of the asset" + } + }, + "set_team(address,address,address)": { + "details": "Specify the issuer, admin and freezer of an asset Selector: f8bf8e95", + "params": { + "admin": "address The address capable of burning tokens and unfreezing accounts/assets", + "freezer": "address The address capable of freezing accounts/asset", + "issuer": "address The address capable of issuing tokens" + } + }, + "thaw(address)": { + "details": "Unfreeze an account, letting it from operating againt with the asset Selector: 5ea20216", + "params": { + "account": "address The address that you want to unfreeze" + } + }, + "thaw_asset()": { + "details": "Unfreeze the entire asset operations Selector: 1cddec19" + }, + "transfer_ownership(address)": { + "details": "Transfer the ownership of an asset to a new account Selector: f0350c04", + "params": { "owner": "address The address of the new owner" } + } + }, + "title": "Extension of the ERC20 interface that allows an owner contract to pilot the ERC20 contract.", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "burn(address,uint256)": "9dc29fac", + "clear_metadata()": "d3ba4b9e", + "freeze(address)": "8d1fdf2f", + "freeze_asset()": "6b8751c1", + "mint(address,uint256)": "40c10f19", + "set_metadata(string,string,uint8)": "ee5dc1e4", + "set_team(address,address,address)": "f8bf8e95", + "thaw(address)": "5ea20216", + "thaw_asset()": "1cddec19", + "transfer_ownership(address)": "f0350c04" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clear_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"freeze\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeze_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"set_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"freezer\",\"type\":\"address\"}],\"name\":\"set_team\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thaw_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"transfer_ownership\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burn(address,uint256)\":{\"details\":\"Burn tokens from an address Selector: 9dc29fac\",\"params\":{\"from\":\"address The address from which you want to burn tokens\",\"value\":\"uint256 the amount of tokens to be burnt\"}},\"clear_metadata()\":{\"details\":\"Clear the name, symbol and decimals of your asset Selector: d3ba4b9e\"},\"freeze(address)\":{\"details\":\"Freeze an account, preventing it from operating with the asset Selector: 8d1fdf2f\",\"params\":{\"account\":\"address The address that you want to freeze\"}},\"freeze_asset()\":{\"details\":\"Freeze the entire asset operations Selector: 6b8751c1\"},\"mint(address,uint256)\":{\"details\":\"Mint tokens to an address Selector: 40c10f19\",\"params\":{\"to\":\"address The address to which you want to mint tokens\",\"value\":\"uint256 the amount of tokens to be minted\"}},\"set_metadata(string,string,uint8)\":{\"details\":\"Specify the name, symbol and decimals of your asset Selector: ee5dc1e4\",\"params\":{\"decimals\":\"uint8 The number of decimals of your asset\",\"name\":\"string The name of the asset\",\"symbol\":\"string The symbol of the asset\"}},\"set_team(address,address,address)\":{\"details\":\"Specify the issuer, admin and freezer of an asset Selector: f8bf8e95\",\"params\":{\"admin\":\"address The address capable of burning tokens and unfreezing accounts/assets\",\"freezer\":\"address The address capable of freezing accounts/asset\",\"issuer\":\"address The address capable of issuing tokens\"}},\"thaw(address)\":{\"details\":\"Unfreeze an account, letting it from operating againt with the asset Selector: 5ea20216\",\"params\":{\"account\":\"address The address that you want to unfreeze\"}},\"thaw_asset()\":{\"details\":\"Unfreeze the entire asset operations Selector: 1cddec19\"},\"transfer_ownership(address)\":{\"details\":\"Transfer the ownership of an asset to a new account Selector: f0350c04\",\"params\":{\"owner\":\"address The address of the new owner\"}}},\"title\":\"Extension of the ERC20 interface that allows an owner contract to pilot the ERC20 contract.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"LocalAsset\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x8435428eb21ff88d9e7a74193b0f5c42a7784f60a834df2f2b682807d8d69fd2\",\"urls\":[\"bzz-raw://c8c7db89444cb90ba09c10fb9ea3522d7239ba9cdec96ef7014c0d38914e8a95\",\"dweb:/ipfs/QmYQ2xertV76LXRib1vthhdUQqoiyhM1GfXaShnJn13bWm\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "pragma solidity ^0.8.0;\n\n/**\n * @title Extension of the ERC20 interface that allows an owner\n * contract to pilot the ERC20 contract.\n */\ninterface LocalAsset {\n /**\n * @dev Mint tokens to an address\n * Selector: 40c10f19\n * @param to address The address to which you want to mint tokens\n * @param value uint256 the amount of tokens to be minted\n */\n function mint(address to, uint256 value)\n external returns (bool);\n\n /**\n * @dev Burn tokens from an address\n * Selector: 9dc29fac\n * @param from address The address from which you want to burn tokens\n * @param value uint256 the amount of tokens to be burnt\n */\n function burn(address from, uint256 value)\n external returns (bool);\n\n /**\n * @dev Freeze an account, preventing it from operating with the asset\n * Selector: 8d1fdf2f\n * @param account address The address that you want to freeze\n */\n function freeze(address account)\n external returns (bool);\n\n /**\n * @dev Unfreeze an account, letting it from operating againt with the asset\n * Selector: 5ea20216\n * @param account address The address that you want to unfreeze\n */\n function thaw(address account)\n external returns (bool);\n\n /**\n * @dev Freeze the entire asset operations\n * Selector: 6b8751c1\n */\n function freeze_asset()\n external returns (bool);\n\n /**\n * @dev Unfreeze the entire asset operations\n * Selector: 1cddec19\n */\n function thaw_asset()\n external returns (bool);\n\n /**\n * @dev Transfer the ownership of an asset to a new account\n * Selector: f0350c04\n * @param owner address The address of the new owner\n */\n function transfer_ownership(address owner)\n external returns (bool);\n \n /**\n * @dev Specify the issuer, admin and freezer of an asset\n * Selector: f8bf8e95\n * @param issuer address The address capable of issuing tokens\n * @param admin address The address capable of burning tokens and unfreezing accounts/assets\n * @param freezer address The address capable of freezing accounts/asset\n */\n function set_team(address issuer, address admin, address freezer)\n external returns (bool);\n\n /**\n * @dev Specify the name, symbol and decimals of your asset\n * Selector: ee5dc1e4\n * @param name string The name of the asset\n * @param symbol string The symbol of the asset\n * @param decimals uint8 The number of decimals of your asset\n */\n function set_metadata(string calldata name, string calldata symbol, uint8 decimals)\n external returns (bool);\n\n /**\n * @dev Clear the name, symbol and decimals of your asset\n * Selector: d3ba4b9e\n */\n function clear_metadata()\n external returns (bool);\n}" +} diff --git a/tests/contracts/compiled/LocalAssetExtendedErc20.json b/tests/contracts/compiled/LocalAssetExtendedErc20.json new file mode 100644 index 0000000000..92dd0a7f5e --- /dev/null +++ b/tests/contracts/compiled/LocalAssetExtendedErc20.json @@ -0,0 +1,409 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" } + ], + "name": "allowance", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "approve", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "who", "type": "address" } + ], + "name": "balanceOf", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "burn", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "clear_metadata", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "freeze", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "freeze_asset", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "mint", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "string", "name": "name", "type": "string" }, + { "internalType": "string", "name": "symbol", "type": "string" }, + { "internalType": "uint8", "name": "decimals", "type": "uint8" } + ], + "name": "set_metadata", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "issuer", "type": "address" }, + { "internalType": "address", "name": "admin", "type": "address" }, + { "internalType": "address", "name": "freezer", "type": "address" } + ], + "name": "set_team", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [{ "internalType": "string", "name": "", "type": "string" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "account", "type": "address" } + ], + "name": "thaw", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "thaw_asset", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "transfer", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "from", "type": "address" }, + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "transferFrom", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "name": "transfer_ownership", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "see https://github.com/ethereum/EIPs/issues/20copied from https://github.com/OpenZeppelin/openzeppelin-contracts", + "events": { + "Approval(address,address,uint256)": { + "details": "Event emited when an approval has been registered. Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "params": { + "owner": "address Owner of the tokens.", + "spender": "address Allowed spender.", + "value": "uint256 Amount of tokens approved." + } + }, + "Transfer(address,address,uint256)": { + "details": "Event emited when a transfer has been performed. Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "params": { + "from": "address The address sending the tokens", + "to": "address The address receiving the tokens.", + "value": "uint256 The amount of tokens transfered." + } + } + }, + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e", + "params": { + "owner": "address The address which owns the funds.", + "spender": "address The address which will spend the funds." + }, + "returns": { + "_0": "A uint256 specifying the amount of tokens still available for the spender." + } + }, + "approve(address,uint256)": { + "details": "Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3", + "params": { + "spender": "The address which will spend the funds.", + "value": "The amount of tokens to be spent." + } + }, + "balanceOf(address)": { + "details": "Gets the balance of the specified address. Selector: 70a08231", + "params": { "who": "The address to query the balance of." }, + "returns": { + "_0": "An uint256 representing the amount owned by the passed address." + } + }, + "burn(address,uint256)": { + "details": "Burn tokens from an address Selector: 23b872dd", + "params": { + "from": "address The address from which you want to burn tokens", + "value": "uint256 the amount of tokens to be burnt" + } + }, + "clear_metadata()": { + "details": "Clear the name, symbol and decimals of your asset Selector: 23b872dd" + }, + "decimals()": { + "details": "Returns the decimals places of the token. Selector: 313ce567" + }, + "freeze(address)": { + "details": "Freeze an account, preventing it from operating with the asset Selector: 23b872dd", + "params": { "account": "address The address that you want to freeze" } + }, + "freeze_asset()": { + "details": "Freeze the entire asset operations Selector: 23b872dd" + }, + "mint(address,uint256)": { + "details": "Mint tokens to an address Selector: 23b872dd", + "params": { + "to": "address The address to which you want to mint tokens", + "value": "uint256 the amount of tokens to be minted" + } + }, + "name()": { + "details": "Returns the name of the token. Selector: 06fdde03" + }, + "set_metadata(string,string,uint8)": { + "details": "Specify the name, symbol and decimals of your asset Selector: 23b872dd", + "params": { + "decimals": "uint8 The number of decimals of your asset", + "name": "string The name of the asset", + "symbol": "string The symbol of the asset" + } + }, + "set_team(address,address,address)": { + "details": "Specify the issuer, admin and freezer of an asset Selector: 23b872dd", + "params": { + "admin": "address The address capable of burning tokens and unfreezing accounts/assets", + "freezer": "address The address capable of freezing accounts/asset", + "issuer": "address The address capable of issuing tokens" + } + }, + "symbol()": { + "details": "Returns the symbol of the token. Selector: 95d89b41" + }, + "thaw(address)": { + "details": "Unfreeze an account, letting it from operating againt with the asset Selector: 23b872dd", + "params": { + "account": "address The address that you want to unfreeze" + } + }, + "thaw_asset()": { + "details": "Unfreeze the entire asset operations Selector: 23b872dd" + }, + "totalSupply()": { + "details": "Total number of tokens in existence Selector: 18160ddd" + }, + "transfer(address,uint256)": { + "details": "Transfer token for a specified address Selector: a9059cbb", + "params": { + "to": "The address to transfer to.", + "value": "The amount to be transferred." + } + }, + "transferFrom(address,address,uint256)": { + "details": "Transfer tokens from one address to another Selector: 23b872dd", + "params": { + "from": "address The address which you want to send tokens from", + "to": "address The address which you want to transfer to", + "value": "uint256 the amount of tokens to be transferred" + } + }, + "transfer_ownership(address)": { + "details": "Transfer the ownership of an asset to a new account Selector: 23b872dd", + "params": { "owner": "address The address of the new owner" } + } + }, + "title": "ERC20 interface", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "burn(address,uint256)": "9dc29fac", + "clear_metadata()": "d3ba4b9e", + "decimals()": "313ce567", + "freeze(address)": "8d1fdf2f", + "freeze_asset()": "6b8751c1", + "mint(address,uint256)": "40c10f19", + "name()": "06fdde03", + "set_metadata(string,string,uint8)": "ee5dc1e4", + "set_team(address,address,address)": "f8bf8e95", + "symbol()": "95d89b41", + "thaw(address)": "5ea20216", + "thaw_asset()": "1cddec19", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "transfer_ownership(address)": "f0350c04" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clear_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"freeze\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeze_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"set_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"freezer\",\"type\":\"address\"}],\"name\":\"set_team\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thaw_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"transfer_ownership\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"see https://github.com/ethereum/EIPs/issues/20copied from https://github.com/OpenZeppelin/openzeppelin-contracts\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Event emited when an approval has been registered. Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\",\"params\":{\"owner\":\"address Owner of the tokens.\",\"spender\":\"address Allowed spender.\",\"value\":\"uint256 Amount of tokens approved.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Event emited when a transfer has been performed. Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\"params\":{\"from\":\"address The address sending the tokens\",\"to\":\"address The address receiving the tokens.\",\"value\":\"uint256 The amount of tokens transfered.\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"returns\":{\"_0\":\"A uint256 specifying the amount of tokens still available for the spender.\"}},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address. Selector: 70a08231\",\"params\":{\"who\":\"The address to query the balance of.\"},\"returns\":{\"_0\":\"An uint256 representing the amount owned by the passed address.\"}},\"burn(address,uint256)\":{\"details\":\"Burn tokens from an address Selector: 23b872dd\",\"params\":{\"from\":\"address The address from which you want to burn tokens\",\"value\":\"uint256 the amount of tokens to be burnt\"}},\"clear_metadata()\":{\"details\":\"Clear the name, symbol and decimals of your asset Selector: 23b872dd\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token. Selector: 313ce567\"},\"freeze(address)\":{\"details\":\"Freeze an account, preventing it from operating with the asset Selector: 23b872dd\",\"params\":{\"account\":\"address The address that you want to freeze\"}},\"freeze_asset()\":{\"details\":\"Freeze the entire asset operations Selector: 23b872dd\"},\"mint(address,uint256)\":{\"details\":\"Mint tokens to an address Selector: 23b872dd\",\"params\":{\"to\":\"address The address to which you want to mint tokens\",\"value\":\"uint256 the amount of tokens to be minted\"}},\"name()\":{\"details\":\"Returns the name of the token. Selector: 06fdde03\"},\"set_metadata(string,string,uint8)\":{\"details\":\"Specify the name, symbol and decimals of your asset Selector: 23b872dd\",\"params\":{\"decimals\":\"uint8 The number of decimals of your asset\",\"name\":\"string The name of the asset\",\"symbol\":\"string The symbol of the asset\"}},\"set_team(address,address,address)\":{\"details\":\"Specify the issuer, admin and freezer of an asset Selector: 23b872dd\",\"params\":{\"admin\":\"address The address capable of burning tokens and unfreezing accounts/assets\",\"freezer\":\"address The address capable of freezing accounts/asset\",\"issuer\":\"address The address capable of issuing tokens\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token. Selector: 95d89b41\"},\"thaw(address)\":{\"details\":\"Unfreeze an account, letting it from operating againt with the asset Selector: 23b872dd\",\"params\":{\"account\":\"address The address that you want to unfreeze\"}},\"thaw_asset()\":{\"details\":\"Unfreeze the entire asset operations Selector: 23b872dd\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence Selector: 18160ddd\"},\"transfer(address,uint256)\":{\"details\":\"Transfer token for a specified address Selector: a9059cbb\",\"params\":{\"to\":\"The address to transfer to.\",\"value\":\"The amount to be transferred.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another Selector: 23b872dd\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"to\":\"address The address which you want to transfer to\",\"value\":\"uint256 the amount of tokens to be transferred\"}},\"transfer_ownership(address)\":{\"details\":\"Transfer the ownership of an asset to a new account Selector: 23b872dd\",\"params\":{\"owner\":\"address The address of the new owner\"}}},\"title\":\"ERC20 interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"LocalAssetExtendedErc20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xedc60e9b5258c8785051e078e6d674e34d23ad387908661d11a202589077ad0a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4fd727b98108221c925e50872645f30d9292c0120b297fe3982e1135e9cb653d\",\"dweb:/ipfs/Qmb2Jo1g6L6a2tU4MXW1a5cVFfu2CysfKLQeK1E98W5wBJ\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts\n */\ninterface LocalAssetExtendedErc20 {\n /**\n * @dev Returns the name of the token.\n * Selector: 06fdde03\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n * Selector: 95d89b41\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n * Selector: 313ce567\n */\n function decimals() external view returns (uint8);\n\n /**\n * @dev Total number of tokens in existence\n * Selector: 18160ddd\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Gets the balance of the specified address.\n * Selector: 70a08231\n * @param who The address to query the balance of.\n * @return An uint256 representing the amount owned by the passed address.\n */\n function balanceOf(address who) external view returns (uint256);\n\n /**\n * @dev Function to check the amount of tokens that an owner allowed to a spender.\n * Selector: dd62ed3e\n * @param owner address The address which owns the funds.\n * @param spender address The address which will spend the funds.\n * @return A uint256 specifying the amount of tokens still available for the spender.\n */\n function allowance(address owner, address spender)\n external\n view\n returns (uint256);\n\n /**\n * @dev Transfer token for a specified address\n * Selector: a9059cbb\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens on behalf\n * of msg.sender.\n * Beware that changing an allowance with this method brings the risk that someone may\n * use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to\n * mitigate this race condition is to first reduce the spender's allowance to 0 and set\n * the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * Selector: 095ea7b3\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Transfer tokens from one address to another\n * Selector: 23b872dd\n * @param from address The address which you want to send tokens from\n * @param to address The address which you want to transfer to\n * @param value uint256 the amount of tokens to be transferred\n */\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n /**\n * @dev Mint tokens to an address\n * Selector: 23b872dd\n * @param to address The address to which you want to mint tokens\n * @param value uint256 the amount of tokens to be minted\n */\n function mint(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Burn tokens from an address\n * Selector: 23b872dd\n * @param from address The address from which you want to burn tokens\n * @param value uint256 the amount of tokens to be burnt\n */\n function burn(address from, uint256 value) external returns (bool);\n\n /**\n * @dev Freeze an account, preventing it from operating with the asset\n * Selector: 23b872dd\n * @param account address The address that you want to freeze\n */\n function freeze(address account) external returns (bool);\n\n /**\n * @dev Unfreeze an account, letting it from operating againt with the asset\n * Selector: 23b872dd\n * @param account address The address that you want to unfreeze\n */\n function thaw(address account) external returns (bool);\n\n /**\n * @dev Freeze the entire asset operations\n * Selector: 23b872dd\n */\n function freeze_asset() external returns (bool);\n\n /**\n * @dev Unfreeze the entire asset operations\n * Selector: 23b872dd\n */\n function thaw_asset() external returns (bool);\n\n /**\n * @dev Transfer the ownership of an asset to a new account\n * Selector: 23b872dd\n * @param owner address The address of the new owner\n */\n function transfer_ownership(address owner) external returns (bool);\n\n /**\n * @dev Specify the issuer, admin and freezer of an asset\n * Selector: 23b872dd\n * @param issuer address The address capable of issuing tokens\n * @param admin address The address capable of burning tokens and unfreezing accounts/assets\n * @param freezer address The address capable of freezing accounts/asset\n */\n function set_team(\n address issuer,\n address admin,\n address freezer\n ) external returns (bool);\n\n /**\n * @dev Specify the name, symbol and decimals of your asset\n * Selector: 23b872dd\n * @param name string The name of the asset\n * @param symbol string The symbol of the asset\n * @param decimals uint8 The number of decimals of your asset\n */\n function set_metadata(\n string calldata name,\n string calldata symbol,\n uint8 decimals\n ) external returns (bool);\n\n /**\n * @dev Clear the name, symbol and decimals of your asset\n * Selector: 23b872dd\n */\n function clear_metadata() external returns (bool);\n\n /**\n * @dev Event emited when a transfer has been performed.\n * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n * @param from address The address sending the tokens\n * @param to address The address receiving the tokens.\n * @param value uint256 The amount of tokens transfered.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Event emited when an approval has been registered.\n * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n * @param owner address Owner of the tokens.\n * @param spender address Allowed spender.\n * @param value uint256 Amount of tokens approved.\n */\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n}\n\ncontract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {\n /// The ierc20 at the known pre-compile address.\n LocalAssetExtendedErc20 public localasseterc20 =\n LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701);\n address localasseterc20address = 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701;\n\n receive() external payable {\n // React to receiving ether\n }\n\n function set_address_interface(address instance_address) public {\n localasseterc20 = LocalAssetExtendedErc20(instance_address);\n localasseterc20address = instance_address;\n }\n\n function get_address() public view returns (address) {\n return localasseterc20address;\n }\n\n function name() external view override returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.name();\n }\n\n function symbol() external view override returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.symbol();\n }\n\n function decimals() external view override returns (uint8) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.decimals();\n }\n\n function totalSupply() external view override returns (uint256) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.totalSupply();\n }\n\n function balanceOf(address who) external view override returns (uint256) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.balanceOf(who);\n }\n\n function allowance(address owner, address spender)\n external\n view\n override\n returns (uint256)\n {\n return localasseterc20.allowance(owner, spender);\n }\n\n function transfer(address to, uint256 value)\n external\n override\n returns (bool)\n {\n return localasseterc20.transfer(to, value);\n }\n\n function mint(address to, uint256 value) external override returns (bool) {\n return localasseterc20.mint(to, value);\n }\n\n function burn(address from, uint256 value)\n external\n override\n returns (bool)\n {\n return localasseterc20.burn(from, value);\n }\n\n function freeze(address account) external override returns (bool) {\n return localasseterc20.freeze(account);\n }\n\n function thaw(address account) external override returns (bool) {\n return localasseterc20.thaw(account);\n }\n\n function freeze_asset() external override returns (bool) {\n return localasseterc20.freeze_asset();\n }\n\n function thaw_asset() external override returns (bool) {\n return localasseterc20.thaw_asset();\n }\n\n function transfer_ownership(address owner)\n external\n override\n returns (bool)\n {\n return localasseterc20.transfer_ownership(owner);\n }\n\n function set_team(\n address issuer,\n address admin,\n address freezer\n ) external override returns (bool) {\n return localasseterc20.set_team(issuer, admin, freezer);\n }\n\n function set_metadata(\n string calldata name,\n string calldata symbol,\n uint8 decimals\n ) external override returns (bool) {\n return localasseterc20.set_metadata(name, symbol, decimals);\n }\n\n function clear_metadata() external override returns (bool) {\n return localasseterc20.clear_metadata();\n }\n\n function transfer_delegate(address to, uint256 value)\n external\n returns (bool)\n {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\"transfer(address,uint256)\", to, value)\n );\n return result;\n }\n\n function approve(address spender, uint256 value)\n external\n override\n returns (bool)\n {\n return localasseterc20.approve(spender, value);\n }\n\n function approve_delegate(address spender, uint256 value)\n external\n returns (bool)\n {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\"approve(address,uint256)\", spender, value)\n );\n return result;\n }\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external override returns (bool) {\n return localasseterc20.transferFrom(from, to, value);\n }\n\n function transferFrom_delegate(\n address from,\n address to,\n uint256 value\n ) external returns (bool) {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\n \"transferFrom(address,address,uint256)\",\n from,\n to,\n value\n )\n );\n return result;\n }\n}\n" +} diff --git a/tests/contracts/compiled/LocalAssetExtendedErc20Instance.json b/tests/contracts/compiled/LocalAssetExtendedErc20Instance.json index d69ba569ec..0118a7672f 100644 --- a/tests/contracts/compiled/LocalAssetExtendedErc20Instance.json +++ b/tests/contracts/compiled/LocalAssetExtendedErc20Instance.json @@ -1,5 +1,5 @@ { - "byteCode": "0x608060405273fffffffede9001a6f7f4798ccb76ef1e7f6647016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fffffffede9001a6f7f4798ccb76ef1e7f664701600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b5061205c806100c96000396000f3fe60806040526004361061016a5760003560e01c806384810219116100d1578063a9059cbb1161008a578063ee5dc1e411610064578063ee5dc1e4146105c1578063f0350c04146105fe578063f5bfbd8a1461063b578063f8bf8e951461067857610171565b8063a9059cbb1461051c578063d3ba4b9e14610559578063dd62ed3e1461058457610171565b806384810219146103e65780638d1fdf2f1461040f57806395d89b411461044c5780639b5067e7146104775780639dc29fac146104a2578063a887c981146104df57610171565b8063313ce56711610123578063313ce5671461029c57806340c10f19146102c75780635ea20216146103045780636b8751c11461034157806370a082311461036c5780637eea1205146103a957610171565b80630131222f1461017657806306fdde03146101a1578063095ea7b3146101cc57806318160ddd146102095780631cddec191461023457806323b872dd1461025f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6106b5565b6040516101989190611766565b60405180910390f35b3480156101ad57600080fd5b506101b66106df565b6040516101c3919061181a565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906118b2565b61077a565b604051610200919061190d565b60405180910390f35b34801561021557600080fd5b5061021e610823565b60405161022b9190611937565b60405180910390f35b34801561024057600080fd5b506102496108ba565b604051610256919061190d565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611952565b610953565b604051610293919061190d565b60405180910390f35b3480156102a857600080fd5b506102b16109ff565b6040516102be91906119c1565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906118b2565b610a96565b6040516102fb919061190d565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906119dc565b610b3f565b604051610338919061190d565b60405180910390f35b34801561034d57600080fd5b50610356610be5565b604051610363919061190d565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906119dc565b610c7e565b6040516103a09190611937565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190611952565b610d22565b6040516103dd919061190d565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906119dc565b610e50565b005b34801561041b57600080fd5b50610436600480360381019061043191906119dc565b610ed4565b604051610443919061190d565b60405180910390f35b34801561045857600080fd5b50610461610f7a565b60405161046e919061181a565b60405180910390f35b34801561048357600080fd5b5061048c611015565b6040516104999190611a68565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906118b2565b611039565b6040516104d6919061190d565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906118b2565b6110e2565b604051610513919061190d565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e91906118b2565b61120d565b604051610550919061190d565b60405180910390f35b34801561056557600080fd5b5061056e6112b6565b60405161057b919061190d565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190611a83565b61134f565b6040516105b89190611937565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190611b54565b6113f6565b6040516105f5919061190d565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906119dc565b6114a8565b604051610632919061190d565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906118b2565b61154e565b60405161066f919061190d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190611be9565b611679565b6040516106ac919061190d565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906107759190611d5d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b81526004016107d8929190611da6565b6020604051808303816000875af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611e3d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016109b393929190611e6a565b6020604051808303816000875af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611dfb565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611eb6565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610af4929190611da6565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ea20216836040518263ffffffff1660e01b8152600401610b9b9190611766565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611dfb565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610cda9190611766565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611e3d565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16868686604051602401610d7593929190611e6a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dff9190611f2a565b600060405180830381855af49150503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b509150915081925050509392505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1fdf2f836040518263ffffffff1660e01b8152600401610f309190611766565b6020604051808303816000875af1158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611dfb565b9050919050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fe7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110109190611d5d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84846040518363ffffffff1660e01b8152600401611097929190611da6565b6020604051808303816000875af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da9190611dfb565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401611133929190611da6565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111bd9190611f2a565b600060405180830381855af49150503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b815260040161126b929190611da6565b6020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ba4b9e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b81526004016113ad929190611f41565b602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190611e3d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee5dc1e487878787876040518663ffffffff1660e01b815260040161145a959493929190611fa6565b6020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d9190611dfb565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0350c04836040518263ffffffff1660e01b81526004016115049190611766565b6020604051808303816000875af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190611dfb565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858560405160240161159f929190611da6565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116299190611f2a565b600060405180830381855af49150503d8060008114611664576040519150601f19603f3d011682016040523d82523d6000602084013e611669565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8bf8e958585856040518463ffffffff1660e01b81526004016116d993929190611fef565b6020604051808303816000875af11580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190611dfb565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061175082611725565b9050919050565b61176081611745565b82525050565b600060208201905061177b6000830184611757565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117bb5780820151818401526020810190506117a0565b838111156117ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006117ec82611781565b6117f6818561178c565b935061180681856020860161179d565b61180f816117d0565b840191505092915050565b6000602082019050818103600083015261183481846117e1565b905092915050565b6000604051905090565b600080fd5b600080fd5b61185981611745565b811461186457600080fd5b50565b60008135905061187681611850565b92915050565b6000819050919050565b61188f8161187c565b811461189a57600080fd5b50565b6000813590506118ac81611886565b92915050565b600080604083850312156118c9576118c8611846565b5b60006118d785828601611867565b92505060206118e88582860161189d565b9150509250929050565b60008115159050919050565b611907816118f2565b82525050565b600060208201905061192260008301846118fe565b92915050565b6119318161187c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008060006060848603121561196b5761196a611846565b5b600061197986828701611867565b935050602061198a86828701611867565b925050604061199b8682870161189d565b9150509250925092565b600060ff82169050919050565b6119bb816119a5565b82525050565b60006020820190506119d660008301846119b2565b92915050565b6000602082840312156119f2576119f1611846565b5b6000611a0084828501611867565b91505092915050565b6000819050919050565b6000611a2e611a29611a2484611725565b611a09565b611725565b9050919050565b6000611a4082611a13565b9050919050565b6000611a5282611a35565b9050919050565b611a6281611a47565b82525050565b6000602082019050611a7d6000830184611a59565b92915050565b60008060408385031215611a9a57611a99611846565b5b6000611aa885828601611867565b9250506020611ab985828601611867565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ae857611ae7611ac3565b5b8235905067ffffffffffffffff811115611b0557611b04611ac8565b5b602083019150836001820283011115611b2157611b20611acd565b5b9250929050565b611b31816119a5565b8114611b3c57600080fd5b50565b600081359050611b4e81611b28565b92915050565b600080600080600060608688031215611b7057611b6f611846565b5b600086013567ffffffffffffffff811115611b8e57611b8d61184b565b5b611b9a88828901611ad2565b9550955050602086013567ffffffffffffffff811115611bbd57611bbc61184b565b5b611bc988828901611ad2565b93509350506040611bdc88828901611b3f565b9150509295509295909350565b600080600060608486031215611c0257611c01611846565b5b6000611c1086828701611867565b9350506020611c2186828701611867565b9250506040611c3286828701611867565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c79826117d0565b810181811067ffffffffffffffff82111715611c9857611c97611c41565b5b80604052505050565b6000611cab61183c565b9050611cb78282611c70565b919050565b600067ffffffffffffffff821115611cd757611cd6611c41565b5b611ce0826117d0565b9050602081019050919050565b6000611d00611cfb84611cbc565b611ca1565b905082815260208101848484011115611d1c57611d1b611c3c565b5b611d2784828561179d565b509392505050565b600082601f830112611d4457611d43611ac3565b5b8151611d54848260208601611ced565b91505092915050565b600060208284031215611d7357611d72611846565b5b600082015167ffffffffffffffff811115611d9157611d9061184b565b5b611d9d84828501611d2f565b91505092915050565b6000604082019050611dbb6000830185611757565b611dc86020830184611928565b9392505050565b611dd8816118f2565b8114611de357600080fd5b50565b600081519050611df581611dcf565b92915050565b600060208284031215611e1157611e10611846565b5b6000611e1f84828501611de6565b91505092915050565b600081519050611e3781611886565b92915050565b600060208284031215611e5357611e52611846565b5b6000611e6184828501611e28565b91505092915050565b6000606082019050611e7f6000830186611757565b611e8c6020830185611757565b611e996040830184611928565b949350505050565b600081519050611eb081611b28565b92915050565b600060208284031215611ecc57611ecb611846565b5b6000611eda84828501611ea1565b91505092915050565b600081519050919050565b600081905092915050565b6000611f0482611ee3565b611f0e8185611eee565b9350611f1e81856020860161179d565b80840191505092915050565b6000611f368284611ef9565b915081905092915050565b6000604082019050611f566000830185611757565b611f636020830184611757565b9392505050565b82818337600083830152505050565b6000611f85838561178c565b9350611f92838584611f6a565b611f9b836117d0565b840190509392505050565b60006060820190508181036000830152611fc1818789611f79565b90508181036020830152611fd6818587611f79565b9050611fe560408301846119b2565b9695505050505050565b60006060820190506120046000830186611757565b6120116020830185611757565b61201e6040830184611757565b94935050505056fea2646970667358221220bb130f9250effb623338d0a0c315a1bcd08d8c15c5754a8191f2673314da04c464736f6c634300080b0033", + "byteCode": "0x608060405273fffffffede9001a6f7f4798ccb76ef1e7f6647016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fffffffede9001a6f7f4798ccb76ef1e7f664701600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b5061205c806100c96000396000f3fe60806040526004361061016a5760003560e01c806384810219116100d1578063a9059cbb1161008a578063ee5dc1e411610064578063ee5dc1e4146105c1578063f0350c04146105fe578063f5bfbd8a1461063b578063f8bf8e951461067857610171565b8063a9059cbb1461051c578063d3ba4b9e14610559578063dd62ed3e1461058457610171565b806384810219146103e65780638d1fdf2f1461040f57806395d89b411461044c5780639b5067e7146104775780639dc29fac146104a2578063a887c981146104df57610171565b8063313ce56711610123578063313ce5671461029c57806340c10f19146102c75780635ea20216146103045780636b8751c11461034157806370a082311461036c5780637eea1205146103a957610171565b80630131222f1461017657806306fdde03146101a1578063095ea7b3146101cc57806318160ddd146102095780631cddec191461023457806323b872dd1461025f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6106b5565b6040516101989190611766565b60405180910390f35b3480156101ad57600080fd5b506101b66106df565b6040516101c3919061181a565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906118b2565b61077a565b604051610200919061190d565b60405180910390f35b34801561021557600080fd5b5061021e610823565b60405161022b9190611937565b60405180910390f35b34801561024057600080fd5b506102496108ba565b604051610256919061190d565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611952565b610953565b604051610293919061190d565b60405180910390f35b3480156102a857600080fd5b506102b16109ff565b6040516102be91906119c1565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906118b2565b610a96565b6040516102fb919061190d565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906119dc565b610b3f565b604051610338919061190d565b60405180910390f35b34801561034d57600080fd5b50610356610be5565b604051610363919061190d565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906119dc565b610c7e565b6040516103a09190611937565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190611952565b610d22565b6040516103dd919061190d565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906119dc565b610e50565b005b34801561041b57600080fd5b50610436600480360381019061043191906119dc565b610ed4565b604051610443919061190d565b60405180910390f35b34801561045857600080fd5b50610461610f7a565b60405161046e919061181a565b60405180910390f35b34801561048357600080fd5b5061048c611015565b6040516104999190611a68565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906118b2565b611039565b6040516104d6919061190d565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906118b2565b6110e2565b604051610513919061190d565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e91906118b2565b61120d565b604051610550919061190d565b60405180910390f35b34801561056557600080fd5b5061056e6112b6565b60405161057b919061190d565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190611a83565b61134f565b6040516105b89190611937565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190611b54565b6113f6565b6040516105f5919061190d565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906119dc565b6114a8565b604051610632919061190d565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906118b2565b61154e565b60405161066f919061190d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190611be9565b611679565b6040516106ac919061190d565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906107759190611d5d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b81526004016107d8929190611da6565b6020604051808303816000875af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611e3d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016109b393929190611e6a565b6020604051808303816000875af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611dfb565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611eb6565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610af4929190611da6565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ea20216836040518263ffffffff1660e01b8152600401610b9b9190611766565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611dfb565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610cda9190611766565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611e3d565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16868686604051602401610d7593929190611e6a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dff9190611f2a565b600060405180830381855af49150503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b509150915081925050509392505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1fdf2f836040518263ffffffff1660e01b8152600401610f309190611766565b6020604051808303816000875af1158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611dfb565b9050919050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fe7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110109190611d5d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84846040518363ffffffff1660e01b8152600401611097929190611da6565b6020604051808303816000875af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da9190611dfb565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401611133929190611da6565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111bd9190611f2a565b600060405180830381855af49150503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b815260040161126b929190611da6565b6020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ba4b9e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b81526004016113ad929190611f41565b602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190611e3d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee5dc1e487878787876040518663ffffffff1660e01b815260040161145a959493929190611fa6565b6020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d9190611dfb565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0350c04836040518263ffffffff1660e01b81526004016115049190611766565b6020604051808303816000875af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190611dfb565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858560405160240161159f929190611da6565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116299190611f2a565b600060405180830381855af49150503d8060008114611664576040519150601f19603f3d011682016040523d82523d6000602084013e611669565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8bf8e958585856040518463ffffffff1660e01b81526004016116d993929190611fef565b6020604051808303816000875af11580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190611dfb565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061175082611725565b9050919050565b61176081611745565b82525050565b600060208201905061177b6000830184611757565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117bb5780820151818401526020810190506117a0565b838111156117ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006117ec82611781565b6117f6818561178c565b935061180681856020860161179d565b61180f816117d0565b840191505092915050565b6000602082019050818103600083015261183481846117e1565b905092915050565b6000604051905090565b600080fd5b600080fd5b61185981611745565b811461186457600080fd5b50565b60008135905061187681611850565b92915050565b6000819050919050565b61188f8161187c565b811461189a57600080fd5b50565b6000813590506118ac81611886565b92915050565b600080604083850312156118c9576118c8611846565b5b60006118d785828601611867565b92505060206118e88582860161189d565b9150509250929050565b60008115159050919050565b611907816118f2565b82525050565b600060208201905061192260008301846118fe565b92915050565b6119318161187c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008060006060848603121561196b5761196a611846565b5b600061197986828701611867565b935050602061198a86828701611867565b925050604061199b8682870161189d565b9150509250925092565b600060ff82169050919050565b6119bb816119a5565b82525050565b60006020820190506119d660008301846119b2565b92915050565b6000602082840312156119f2576119f1611846565b5b6000611a0084828501611867565b91505092915050565b6000819050919050565b6000611a2e611a29611a2484611725565b611a09565b611725565b9050919050565b6000611a4082611a13565b9050919050565b6000611a5282611a35565b9050919050565b611a6281611a47565b82525050565b6000602082019050611a7d6000830184611a59565b92915050565b60008060408385031215611a9a57611a99611846565b5b6000611aa885828601611867565b9250506020611ab985828601611867565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ae857611ae7611ac3565b5b8235905067ffffffffffffffff811115611b0557611b04611ac8565b5b602083019150836001820283011115611b2157611b20611acd565b5b9250929050565b611b31816119a5565b8114611b3c57600080fd5b50565b600081359050611b4e81611b28565b92915050565b600080600080600060608688031215611b7057611b6f611846565b5b600086013567ffffffffffffffff811115611b8e57611b8d61184b565b5b611b9a88828901611ad2565b9550955050602086013567ffffffffffffffff811115611bbd57611bbc61184b565b5b611bc988828901611ad2565b93509350506040611bdc88828901611b3f565b9150509295509295909350565b600080600060608486031215611c0257611c01611846565b5b6000611c1086828701611867565b9350506020611c2186828701611867565b9250506040611c3286828701611867565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c79826117d0565b810181811067ffffffffffffffff82111715611c9857611c97611c41565b5b80604052505050565b6000611cab61183c565b9050611cb78282611c70565b919050565b600067ffffffffffffffff821115611cd757611cd6611c41565b5b611ce0826117d0565b9050602081019050919050565b6000611d00611cfb84611cbc565b611ca1565b905082815260208101848484011115611d1c57611d1b611c3c565b5b611d2784828561179d565b509392505050565b600082601f830112611d4457611d43611ac3565b5b8151611d54848260208601611ced565b91505092915050565b600060208284031215611d7357611d72611846565b5b600082015167ffffffffffffffff811115611d9157611d9061184b565b5b611d9d84828501611d2f565b91505092915050565b6000604082019050611dbb6000830185611757565b611dc86020830184611928565b9392505050565b611dd8816118f2565b8114611de357600080fd5b50565b600081519050611df581611dcf565b92915050565b600060208284031215611e1157611e10611846565b5b6000611e1f84828501611de6565b91505092915050565b600081519050611e3781611886565b92915050565b600060208284031215611e5357611e52611846565b5b6000611e6184828501611e28565b91505092915050565b6000606082019050611e7f6000830186611757565b611e8c6020830185611757565b611e996040830184611928565b949350505050565b600081519050611eb081611b28565b92915050565b600060208284031215611ecc57611ecb611846565b5b6000611eda84828501611ea1565b91505092915050565b600081519050919050565b600081905092915050565b6000611f0482611ee3565b611f0e8185611eee565b9350611f1e81856020860161179d565b80840191505092915050565b6000611f368284611ef9565b915081905092915050565b6000604082019050611f566000830185611757565b611f636020830184611757565b9392505050565b82818337600083830152505050565b6000611f85838561178c565b9350611f92838584611f6a565b611f9b836117d0565b840190509392505050565b60006060820190508181036000830152611fc1818789611f79565b90508181036020830152611fd6818587611f79565b9050611fe560408301846119b2565b9695505050505050565b60006060820190506120046000830186611757565b6120116020830185611757565b61201e6040830184611757565b94935050505056fea2646970667358221220e4e422b8a9b7f9d0a8d04f79283e40d5cc607e645371ffe4686666fa28636f8c64736f6c634300080b0033", "contract": { "abi": [ { @@ -405,14 +405,14 @@ "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":6591:12064 contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":6800:6842 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701 */\n 0xfffffffede9001a6f7f4798ccb76ef1e7f664701\n /* \"main.sol\":6727:6843 LocalAssetExtendedErc20 public localasseterc20 = LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701) */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":6886:6928 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701 */\n 0xfffffffede9001a6f7f4798ccb76ef1e7f664701\n /* \"main.sol\":6853:6928 address localasseterc20address = 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701 */\n 0x01\n exp(0x0100, 0x00)\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":6591:12064 contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":6591:12064 contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x84810219\n gt\n tag_28\n jumpi\n dup1\n 0xa9059cbb\n gt\n tag_29\n jumpi\n dup1\n 0xee5dc1e4\n gt\n tag_30\n jumpi\n dup1\n 0xee5dc1e4\n eq\n tag_24\n jumpi\n dup1\n 0xf0350c04\n eq\n tag_25\n jumpi\n dup1\n 0xf5bfbd8a\n eq\n tag_26\n jumpi\n dup1\n 0xf8bf8e95\n eq\n tag_27\n jumpi\n jump(tag_2)\n tag_30:\n dup1\n 0xa9059cbb\n eq\n tag_21\n jumpi\n dup1\n 0xd3ba4b9e\n eq\n tag_22\n jumpi\n dup1\n 0xdd62ed3e\n eq\n tag_23\n jumpi\n jump(tag_2)\n tag_29:\n dup1\n 0x84810219\n eq\n tag_15\n jumpi\n dup1\n 0x8d1fdf2f\n eq\n tag_16\n jumpi\n dup1\n 0x95d89b41\n eq\n tag_17\n jumpi\n dup1\n 0x9b5067e7\n eq\n tag_18\n jumpi\n dup1\n 0x9dc29fac\n eq\n tag_19\n jumpi\n dup1\n 0xa887c981\n eq\n tag_20\n jumpi\n jump(tag_2)\n tag_28:\n dup1\n 0x313ce567\n gt\n tag_31\n jumpi\n dup1\n 0x313ce567\n eq\n tag_9\n jumpi\n dup1\n 0x40c10f19\n eq\n tag_10\n jumpi\n dup1\n 0x5ea20216\n eq\n tag_11\n jumpi\n dup1\n 0x6b8751c1\n eq\n tag_12\n jumpi\n dup1\n 0x70a08231\n eq\n tag_13\n jumpi\n dup1\n 0x7eea1205\n eq\n tag_14\n jumpi\n jump(tag_2)\n tag_31:\n dup1\n 0x0131222f\n eq\n tag_3\n jumpi\n dup1\n 0x06fdde03\n eq\n tag_4\n jumpi\n dup1\n 0x095ea7b3\n eq\n tag_5\n jumpi\n dup1\n 0x18160ddd\n eq\n tag_6\n jumpi\n dup1\n 0x1cddec19\n eq\n tag_7\n jumpi\n dup1\n 0x23b872dd\n eq\n tag_8\n jumpi\n jump(tag_2)\n tag_1:\n jumpi(tag_2, calldatasize)\n stop\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":7268:7382 function get_address() public view returns(address) {... */\n tag_3:\n callvalue\n dup1\n iszero\n tag_34\n jumpi\n 0x00\n dup1\n revert\n tag_34:\n pop\n tag_35\n tag_36\n jump\t// in\n tag_35:\n mload(0x40)\n tag_37\n swap2\n swap1\n tag_38\n jump\t// in\n tag_37:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7396:7601 function name() override external view returns (string memory) {... */\n tag_4:\n callvalue\n dup1\n iszero\n tag_39\n jumpi\n 0x00\n dup1\n revert\n tag_39:\n pop\n tag_40\n tag_41\n jump\t// in\n tag_40:\n mload(0x40)\n tag_42\n swap2\n swap1\n tag_43\n jump\t// in\n tag_42:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10928:11085 function approve(address spender, uint256 value) override external returns (bool) {... */\n tag_5:\n callvalue\n dup1\n iszero\n tag_44\n jumpi\n 0x00\n dup1\n revert\n tag_44:\n pop\n tag_45\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_46\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n tag_48\n jump\t// in\n tag_45:\n mload(0x40)\n tag_49\n swap2\n swap1\n tag_50\n jump\t// in\n tag_49:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8081:8293 function totalSupply() override external view returns (uint256){... */\n tag_6:\n callvalue\n dup1\n iszero\n tag_51\n jumpi\n 0x00\n dup1\n revert\n tag_51:\n pop\n tag_52\n tag_53\n jump\t// in\n tag_52:\n mload(0x40)\n tag_54\n swap2\n swap1\n tag_55\n jump\t// in\n tag_54:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9727:9850 function thaw_asset() override external returns (bool) {... */\n tag_7:\n callvalue\n dup1\n iszero\n tag_56\n jumpi\n 0x00\n dup1\n revert\n tag_56:\n pop\n tag_57\n tag_58\n jump\t// in\n tag_57:\n mload(0x40)\n tag_59\n swap2\n swap1\n tag_50\n jump\t// in\n tag_59:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":11419:11661 function transferFrom(... */\n tag_8:\n callvalue\n dup1\n iszero\n tag_60\n jumpi\n 0x00\n dup1\n revert\n tag_60:\n pop\n tag_61\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_62\n swap2\n swap1\n tag_63\n jump\t// in\n tag_62:\n tag_64\n jump\t// in\n tag_61:\n mload(0x40)\n tag_65\n swap2\n swap1\n tag_50\n jump\t// in\n tag_65:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7862:8067 function decimals() override external view returns (uint8) {... */\n tag_9:\n callvalue\n dup1\n iszero\n tag_66\n jumpi\n 0x00\n dup1\n revert\n tag_66:\n pop\n tag_67\n tag_68\n jump\t// in\n tag_67:\n mload(0x40)\n tag_69\n swap2\n swap1\n tag_70\n jump\t// in\n tag_69:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8966:9111 function mint(address to, uint256 value) override external returns (bool) {... */\n tag_10:\n callvalue\n dup1\n iszero\n tag_71\n jumpi\n 0x00\n dup1\n revert\n tag_71:\n pop\n tag_72\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_73\n swap2\n swap1\n tag_47\n jump\t// in\n tag_73:\n tag_74\n jump\t// in\n tag_72:\n mload(0x40)\n tag_75\n swap2\n swap1\n tag_50\n jump\t// in\n tag_75:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9439:9572 function thaw(address account) override external returns (bool) {... */\n tag_11:\n callvalue\n dup1\n iszero\n tag_76\n jumpi\n 0x00\n dup1\n revert\n tag_76:\n pop\n tag_77\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_78\n swap2\n swap1\n tag_79\n jump\t// in\n tag_78:\n tag_80\n jump\t// in\n tag_77:\n mload(0x40)\n tag_81\n swap2\n swap1\n tag_50\n jump\t// in\n tag_81:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9586:9713 function freeze_asset() override external returns (bool) {... */\n tag_12:\n callvalue\n dup1\n iszero\n tag_82\n jumpi\n 0x00\n dup1\n revert\n tag_82:\n pop\n tag_83\n tag_84\n jump\t// in\n tag_83:\n mload(0x40)\n tag_85\n swap2\n swap1\n tag_50\n jump\t// in\n tag_85:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8319:8541 function balanceOf(address who) override external view returns (uint256){... */\n tag_13:\n callvalue\n dup1\n iszero\n tag_86\n jumpi\n 0x00\n dup1\n revert\n tag_86:\n pop\n tag_87\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_88\n swap2\n swap1\n tag_79\n jump\t// in\n tag_88:\n tag_89\n jump\t// in\n tag_87:\n mload(0x40)\n tag_90\n swap2\n swap1\n tag_55\n jump\t// in\n tag_90:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":11687:12058 function transferFrom_delegate(... */\n tag_14:\n callvalue\n dup1\n iszero\n tag_91\n jumpi\n 0x00\n dup1\n revert\n tag_91:\n pop\n tag_92\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_93\n swap2\n swap1\n tag_63\n jump\t// in\n tag_93:\n tag_94\n jump\t// in\n tag_92:\n mload(0x40)\n tag_95\n swap2\n swap1\n tag_50\n jump\t// in\n tag_95:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7039:7254 function set_address_interface(address instance_address) public {... */\n tag_15:\n callvalue\n dup1\n iszero\n tag_96\n jumpi\n 0x00\n dup1\n revert\n tag_96:\n pop\n tag_97\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_98\n swap2\n swap1\n tag_79\n jump\t// in\n tag_98:\n tag_99\n jump\t// in\n tag_97:\n stop\n /* \"main.sol\":9288:9425 function freeze(address account) override external returns (bool) {... */\n tag_16:\n callvalue\n dup1\n iszero\n tag_100\n jumpi\n 0x00\n dup1\n revert\n tag_100:\n pop\n tag_101\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_102\n swap2\n swap1\n tag_79\n jump\t// in\n tag_102:\n tag_103\n jump\t// in\n tag_101:\n mload(0x40)\n tag_104\n swap2\n swap1\n tag_50\n jump\t// in\n tag_104:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7627:7836 function symbol() override external view returns (string memory) {... */\n tag_17:\n callvalue\n dup1\n iszero\n tag_105\n jumpi\n 0x00\n dup1\n revert\n tag_105:\n pop\n tag_106\n tag_107\n jump\t// in\n tag_106:\n mload(0x40)\n tag_108\n swap2\n swap1\n tag_43\n jump\t// in\n tag_108:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6727:6843 LocalAssetExtendedErc20 public localasseterc20 = LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701) */\n tag_18:\n callvalue\n dup1\n iszero\n tag_109\n jumpi\n 0x00\n dup1\n revert\n tag_109:\n pop\n tag_110\n tag_111\n jump\t// in\n tag_110:\n mload(0x40)\n tag_112\n swap2\n swap1\n tag_113\n jump\t// in\n tag_112:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9125:9274 function burn(address from, uint256 value) override external returns (bool) {... */\n tag_19:\n callvalue\n dup1\n iszero\n tag_114\n jumpi\n 0x00\n dup1\n revert\n tag_114:\n pop\n tag_115\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_116\n swap2\n swap1\n tag_47\n jump\t// in\n tag_116:\n tag_117\n jump\t// in\n tag_115:\n mload(0x40)\n tag_118\n swap2\n swap1\n tag_50\n jump\t// in\n tag_118:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10616:10902 function transfer_delegate(address to, uint256 value) external returns (bool) {... */\n tag_20:\n callvalue\n dup1\n iszero\n tag_119\n jumpi\n 0x00\n dup1\n revert\n tag_119:\n pop\n tag_120\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_121\n swap2\n swap1\n tag_47\n jump\t// in\n tag_121:\n tag_122\n jump\t// in\n tag_120:\n mload(0x40)\n tag_123\n swap2\n swap1\n tag_50\n jump\t// in\n tag_123:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8799:8952 function transfer(address to, uint256 value) override external returns (bool) {... */\n tag_21:\n callvalue\n dup1\n iszero\n tag_124\n jumpi\n 0x00\n dup1\n revert\n tag_124:\n pop\n tag_125\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_126\n swap2\n swap1\n tag_47\n jump\t// in\n tag_126:\n tag_127\n jump\t// in\n tag_125:\n mload(0x40)\n tag_128\n swap2\n swap1\n tag_50\n jump\t// in\n tag_128:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10459:10590 function clear_metadata() override external returns (bool) {... */\n tag_22:\n callvalue\n dup1\n iszero\n tag_129\n jumpi\n 0x00\n dup1\n revert\n tag_129:\n pop\n tag_130\n tag_131\n jump\t// in\n tag_130:\n mload(0x40)\n tag_132\n swap2\n swap1\n tag_50\n jump\t// in\n tag_132:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8567:8785 function allowance(... */\n tag_23:\n callvalue\n dup1\n iszero\n tag_133\n jumpi\n 0x00\n dup1\n revert\n tag_133:\n pop\n tag_134\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_135\n swap2\n swap1\n tag_136\n jump\t// in\n tag_135:\n tag_137\n jump\t// in\n tag_134:\n mload(0x40)\n tag_138\n swap2\n swap1\n tag_55\n jump\t// in\n tag_138:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10236:10445 function set_metadata(string calldata name, string calldata symbol, uint8 decimals) override external returns (bool) {... */\n tag_24:\n callvalue\n dup1\n iszero\n tag_139\n jumpi\n 0x00\n dup1\n revert\n tag_139:\n pop\n tag_140\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_141\n swap2\n swap1\n tag_142\n jump\t// in\n tag_141:\n tag_143\n jump\t// in\n tag_140:\n mload(0x40)\n tag_144\n swap2\n swap1\n tag_50\n jump\t// in\n tag_144:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9864:10021 function transfer_ownership(address owner) override external returns (bool) {... */\n tag_25:\n callvalue\n dup1\n iszero\n tag_145\n jumpi\n 0x00\n dup1\n revert\n tag_145:\n pop\n tag_146\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_147\n swap2\n swap1\n tag_79\n jump\t// in\n tag_147:\n tag_148\n jump\t// in\n tag_146:\n mload(0x40)\n tag_149\n swap2\n swap1\n tag_50\n jump\t// in\n tag_149:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":11099:11393 function approve_delegate(address spender, uint256 value) external returns (bool) {... */\n tag_26:\n callvalue\n dup1\n iszero\n tag_150\n jumpi\n 0x00\n dup1\n revert\n tag_150:\n pop\n tag_151\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_152\n swap2\n swap1\n tag_47\n jump\t// in\n tag_152:\n tag_153\n jump\t// in\n tag_151:\n mload(0x40)\n tag_154\n swap2\n swap1\n tag_50\n jump\t// in\n tag_154:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10035:10222 function set_team(address issuer, address admin, address freezer) override external returns (bool) {... */\n tag_27:\n callvalue\n dup1\n iszero\n tag_155\n jumpi\n 0x00\n dup1\n revert\n tag_155:\n pop\n tag_156\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_157\n swap2\n swap1\n tag_158\n jump\t// in\n tag_157:\n tag_159\n jump\t// in\n tag_156:\n mload(0x40)\n tag_160\n swap2\n swap1\n tag_50\n jump\t// in\n tag_160:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7268:7382 function get_address() public view returns(address) {... */\n tag_36:\n /* \"main.sol\":7311:7318 address */\n 0x00\n /* \"main.sol\":7345:7367 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7338:7367 return localasseterc20address */\n swap1\n pop\n /* \"main.sol\":7268:7382 function get_address() public view returns(address) {... */\n swap1\n jump\t// out\n /* \"main.sol\":7396:7601 function name() override external view returns (string memory) {... */\n tag_41:\n /* \"main.sol\":7444:7457 string memory */\n 0x60\n /* \"main.sol\":7564:7579 localasseterc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7564:7584 localasseterc20.name */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x06fdde03\n /* \"main.sol\":7564:7586 localasseterc20.name() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_164\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_164:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_165\n swap2\n swap1\n tag_166\n jump\t// in\n tag_165:\n /* \"main.sol\":7557:7586 return localasseterc20.name() */\n swap1\n pop\n /* \"main.sol\":7396:7601 function name() override external view returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":10928:11085 function approve(address spender, uint256 value) override external returns (bool) {... */\n tag_48:\n /* \"main.sol\":11004:11008 bool */\n 0x00\n /* \"main.sol\":11031:11046 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11031:11054 localasseterc20.approve */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x095ea7b3\n /* \"main.sol\":11055:11062 spender */\n dup5\n /* \"main.sol\":11064:11069 value */\n dup5\n /* \"main.sol\":11031:11070 localasseterc20.approve(spender, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_168\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_168:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_171\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_171:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_172\n swap2\n swap1\n tag_173\n jump\t// in\n tag_172:\n /* \"main.sol\":11024:11070 return localasseterc20.approve(spender, value) */\n swap1\n pop\n /* \"main.sol\":10928:11085 function approve(address spender, uint256 value) override external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":8081:8293 function totalSupply() override external view returns (uint256){... */\n tag_53:\n /* \"main.sol\":8136:8143 uint256 */\n 0x00\n /* \"main.sol\":8249:8264 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8249:8276 localasseterc20.totalSupply */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x18160ddd\n /* \"main.sol\":8249:8278 localasseterc20.totalSupply() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_176\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_176:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_177\n swap2\n swap1\n tag_178\n jump\t// in\n tag_177:\n /* \"main.sol\":8242:8278 return localasseterc20.totalSupply() */\n swap1\n pop\n /* \"main.sol\":8081:8293 function totalSupply() override external view returns (uint256){... */\n swap1\n jump\t// out\n /* \"main.sol\":9727:9850 function thaw_asset() override external returns (bool) {... */\n tag_58:\n /* \"main.sol\":9776:9780 bool */\n 0x00\n /* \"main.sol\":9807:9822 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9807:9833 localasseterc20.thaw_asset */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x1cddec19\n /* \"main.sol\":9807:9835 localasseterc20.thaw_asset() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_181\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_181:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_182\n swap2\n swap1\n tag_173\n jump\t// in\n tag_182:\n /* \"main.sol\":9800:9835 return localasseterc20.thaw_asset() */\n swap1\n pop\n /* \"main.sol\":9727:9850 function thaw_asset() override external returns (bool) {... */\n swap1\n jump\t// out\n /* \"main.sol\":11419:11661 function transferFrom(... */\n tag_64:\n /* \"main.sol\":11570:11574 bool */\n 0x00\n /* \"main.sol\":11601:11616 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11601:11629 localasseterc20.transferFrom */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x23b872dd\n /* \"main.sol\":11630:11634 from */\n dup6\n /* \"main.sol\":11636:11638 to */\n dup6\n /* \"main.sol\":11640:11645 value */\n dup6\n /* \"main.sol\":11601:11646 localasseterc20.transferFrom(from, to, value) */\n mload(0x40)\n dup5\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_184\n swap4\n swap3\n swap2\n swap1\n tag_185\n jump\t// in\n tag_184:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_187\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_187:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_188\n swap2\n swap1\n tag_173\n jump\t// in\n tag_188:\n /* \"main.sol\":11594:11646 return localasseterc20.transferFrom(from, to, value) */\n swap1\n pop\n /* \"main.sol\":11419:11661 function transferFrom(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":7862:8067 function decimals() override external view returns (uint8) {... */\n tag_68:\n /* \"main.sol\":7914:7919 uint8 */\n 0x00\n /* \"main.sol\":8026:8041 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8026:8050 localasseterc20.decimals */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x313ce567\n /* \"main.sol\":8026:8052 localasseterc20.decimals() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_191\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_191:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_192\n swap2\n swap1\n tag_193\n jump\t// in\n tag_192:\n /* \"main.sol\":8019:8052 return localasseterc20.decimals() */\n swap1\n pop\n /* \"main.sol\":7862:8067 function decimals() override external view returns (uint8) {... */\n swap1\n jump\t// out\n /* \"main.sol\":8966:9111 function mint(address to, uint256 value) override external returns (bool) {... */\n tag_74:\n /* \"main.sol\":9034:9038 bool */\n 0x00\n /* \"main.sol\":9065:9080 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9065:9085 localasseterc20.mint */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x40c10f19\n /* \"main.sol\":9086:9088 to */\n dup5\n /* \"main.sol\":9090:9095 value */\n dup5\n /* \"main.sol\":9065:9096 localasseterc20.mint(to, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_195\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_195:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_197\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_197:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_198\n swap2\n swap1\n tag_173\n jump\t// in\n tag_198:\n /* \"main.sol\":9058:9096 return localasseterc20.mint(to, value) */\n swap1\n pop\n /* \"main.sol\":8966:9111 function mint(address to, uint256 value) override external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":9439:9572 function thaw(address account) override external returns (bool) {... */\n tag_80:\n /* \"main.sol\":9497:9501 bool */\n 0x00\n /* \"main.sol\":9528:9543 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9528:9548 localasseterc20.thaw */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x5ea20216\n /* \"main.sol\":9549:9556 account */\n dup4\n /* \"main.sol\":9528:9557 localasseterc20.thaw(account) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_200\n swap2\n swap1\n tag_38\n jump\t// in\n tag_200:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_202\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_202:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_203\n swap2\n swap1\n tag_173\n jump\t// in\n tag_203:\n /* \"main.sol\":9521:9557 return localasseterc20.thaw(account) */\n swap1\n pop\n /* \"main.sol\":9439:9572 function thaw(address account) override external returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":9586:9713 function freeze_asset() override external returns (bool) {... */\n tag_84:\n /* \"main.sol\":9637:9641 bool */\n 0x00\n /* \"main.sol\":9668:9683 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9668:9696 localasseterc20.freeze_asset */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x6b8751c1\n /* \"main.sol\":9668:9698 localasseterc20.freeze_asset() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_206\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_206:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_207\n swap2\n swap1\n tag_173\n jump\t// in\n tag_207:\n /* \"main.sol\":9661:9698 return localasseterc20.freeze_asset() */\n swap1\n pop\n /* \"main.sol\":9586:9713 function freeze_asset() override external returns (bool) {... */\n swap1\n jump\t// out\n /* \"main.sol\":8319:8541 function balanceOf(address who) override external view returns (uint256){... */\n tag_89:\n /* \"main.sol\":8383:8390 uint256 */\n 0x00\n /* \"main.sol\":8496:8511 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8496:8521 localasseterc20.balanceOf */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x70a08231\n /* \"main.sol\":8522:8525 who */\n dup4\n /* \"main.sol\":8496:8526 localasseterc20.balanceOf(who) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_209\n swap2\n swap1\n tag_38\n jump\t// in\n tag_209:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_211\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_211:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_212\n swap2\n swap1\n tag_178\n jump\t// in\n tag_212:\n /* \"main.sol\":8489:8526 return localasseterc20.balanceOf(who) */\n swap1\n pop\n /* \"main.sol\":8319:8541 function balanceOf(address who) override external view returns (uint256){... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":11687:12058 function transferFrom_delegate(... */\n tag_94:\n /* \"main.sol\":11826:11830 bool */\n 0x00\n /* \"main.sol\":11847:11858 bool result */\n dup1\n /* \"main.sol\":11860:11877 bytes memory data */\n 0x00\n /* \"main.sol\":11881:11903 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11881:11916 localasseterc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11999:12003 from */\n dup7\n /* \"main.sol\":12005:12007 to */\n dup7\n /* \"main.sol\":12009:12014 value */\n dup7\n /* \"main.sol\":11934:12015 abi.encodeWithSignature(\"transferFrom(address,address,uint256)\", from, to, value) */\n add(0x24, mload(0x40))\n tag_214\n swap4\n swap3\n swap2\n swap1\n tag_185\n jump\t// in\n tag_214:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x23b872dd00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":11881:12016 localasseterc20address.delegatecall(... */\n mload(0x40)\n tag_215\n swap2\n swap1\n tag_216\n jump\t// in\n tag_215:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_219\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_218)\n tag_219:\n 0x60\n swap2\n pop\n tag_218:\n pop\n /* \"main.sol\":11846:12016 (bool result, bytes memory data) = localasseterc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":12037:12043 result */\n dup2\n /* \"main.sol\":12030:12043 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":11687:12058 function transferFrom_delegate(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":7039:7254 function set_address_interface(address instance_address) public {... */\n tag_99:\n /* \"main.sol\":7163:7179 instance_address */\n dup1\n /* \"main.sol\":7121:7136 localasseterc20 */\n 0x00\n dup1\n /* \"main.sol\":7121:7180 localasseterc20 = LocalAssetExtendedErc20(instance_address) */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":7223:7239 instance_address */\n dup1\n /* \"main.sol\":7198:7220 localasseterc20address */\n 0x01\n 0x00\n /* \"main.sol\":7198:7239 localasseterc20address = instance_address */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":7039:7254 function set_address_interface(address instance_address) public {... */\n pop\n jump\t// out\n /* \"main.sol\":9288:9425 function freeze(address account) override external returns (bool) {... */\n tag_103:\n /* \"main.sol\":9348:9352 bool */\n 0x00\n /* \"main.sol\":9379:9394 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9379:9401 localasseterc20.freeze */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x8d1fdf2f\n /* \"main.sol\":9402:9409 account */\n dup4\n /* \"main.sol\":9379:9410 localasseterc20.freeze(account) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_222\n swap2\n swap1\n tag_38\n jump\t// in\n tag_222:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_224\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_224:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_225\n swap2\n swap1\n tag_173\n jump\t// in\n tag_225:\n /* \"main.sol\":9372:9410 return localasseterc20.freeze(account) */\n swap1\n pop\n /* \"main.sol\":9288:9425 function freeze(address account) override external returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":7627:7836 function symbol() override external view returns (string memory) {... */\n tag_107:\n /* \"main.sol\":7677:7690 string memory */\n 0x60\n /* \"main.sol\":7797:7812 localasseterc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7797:7819 localasseterc20.symbol */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x95d89b41\n /* \"main.sol\":7797:7821 localasseterc20.symbol() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_228\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_228:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_229\n swap2\n swap1\n tag_166\n jump\t// in\n tag_229:\n /* \"main.sol\":7790:7821 return localasseterc20.symbol() */\n swap1\n pop\n /* \"main.sol\":7627:7836 function symbol() override external view returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":6727:6843 LocalAssetExtendedErc20 public localasseterc20 = LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701) */\n tag_111:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":9125:9274 function burn(address from, uint256 value) override external returns (bool) {... */\n tag_117:\n /* \"main.sol\":9195:9199 bool */\n 0x00\n /* \"main.sol\":9226:9241 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9226:9246 localasseterc20.burn */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x9dc29fac\n /* \"main.sol\":9247:9251 from */\n dup5\n /* \"main.sol\":9253:9258 value */\n dup5\n /* \"main.sol\":9226:9259 localasseterc20.burn(from, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_231\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_231:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_233\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_233:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_234\n swap2\n swap1\n tag_173\n jump\t// in\n tag_234:\n /* \"main.sol\":9219:9259 return localasseterc20.burn(from, value) */\n swap1\n pop\n /* \"main.sol\":9125:9274 function burn(address from, uint256 value) override external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":10616:10902 function transfer_delegate(address to, uint256 value) external returns (bool) {... */\n tag_122:\n /* \"main.sol\":10688:10692 bool */\n 0x00\n /* \"main.sol\":10709:10720 bool result */\n dup1\n /* \"main.sol\":10722:10739 bytes memory data */\n 0x00\n /* \"main.sol\":10743:10765 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10743:10778 localasseterc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10849:10851 to */\n dup6\n /* \"main.sol\":10853:10858 value */\n dup6\n /* \"main.sol\":10796:10859 abi.encodeWithSignature(\"transfer(address,uint256)\", to, value) */\n add(0x24, mload(0x40))\n tag_236\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_236:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":10743:10860 localasseterc20address.delegatecall(... */\n mload(0x40)\n tag_237\n swap2\n swap1\n tag_216\n jump\t// in\n tag_237:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_240\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_239)\n tag_240:\n 0x60\n swap2\n pop\n tag_239:\n pop\n /* \"main.sol\":10708:10860 (bool result, bytes memory data) = localasseterc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":10881:10887 result */\n dup2\n /* \"main.sol\":10874:10887 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":10616:10902 function transfer_delegate(address to, uint256 value) external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":8799:8952 function transfer(address to, uint256 value) override external returns (bool) {... */\n tag_127:\n /* \"main.sol\":8871:8875 bool */\n 0x00\n /* \"main.sol\":8902:8917 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8902:8926 localasseterc20.transfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa9059cbb\n /* \"main.sol\":8927:8929 to */\n dup5\n /* \"main.sol\":8931:8936 value */\n dup5\n /* \"main.sol\":8902:8937 localasseterc20.transfer(to, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_242\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_242:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_244\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_244:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_245\n swap2\n swap1\n tag_173\n jump\t// in\n tag_245:\n /* \"main.sol\":8895:8937 return localasseterc20.transfer(to, value) */\n swap1\n pop\n /* \"main.sol\":8799:8952 function transfer(address to, uint256 value) override external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":10459:10590 function clear_metadata() override external returns (bool) {... */\n tag_131:\n /* \"main.sol\":10512:10516 bool */\n 0x00\n /* \"main.sol\":10543:10558 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10543:10573 localasseterc20.clear_metadata */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xd3ba4b9e\n /* \"main.sol\":10543:10575 localasseterc20.clear_metadata() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_248\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_248:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_249\n swap2\n swap1\n tag_173\n jump\t// in\n tag_249:\n /* \"main.sol\":10536:10575 return localasseterc20.clear_metadata() */\n swap1\n pop\n /* \"main.sol\":10459:10590 function clear_metadata() override external returns (bool) {... */\n swap1\n jump\t// out\n /* \"main.sol\":8567:8785 function allowance(... */\n tag_137:\n /* \"main.sol\":8696:8703 uint256 */\n 0x00\n /* \"main.sol\":8729:8744 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8729:8754 localasseterc20.allowance */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xdd62ed3e\n /* \"main.sol\":8755:8760 owner */\n dup5\n /* \"main.sol\":8762:8769 spender */\n dup5\n /* \"main.sol\":8729:8770 localasseterc20.allowance(owner, spender) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_251\n swap3\n swap2\n swap1\n tag_252\n jump\t// in\n tag_251:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_254\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_254:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_255\n swap2\n swap1\n tag_178\n jump\t// in\n tag_255:\n /* \"main.sol\":8722:8770 return localasseterc20.allowance(owner, spender) */\n swap1\n pop\n /* \"main.sol\":8567:8785 function allowance(... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":10236:10445 function set_metadata(string calldata name, string calldata symbol, uint8 decimals) override external returns (bool) {... */\n tag_143:\n /* \"main.sol\":10347:10351 bool */\n 0x00\n /* \"main.sol\":10378:10393 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10378:10406 localasseterc20.set_metadata */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xee5dc1e4\n /* \"main.sol\":10407:10411 name */\n dup8\n dup8\n /* \"main.sol\":10413:10419 symbol */\n dup8\n dup8\n /* \"main.sol\":10421:10429 decimals */\n dup8\n /* \"main.sol\":10378:10430 localasseterc20.set_metadata(name, symbol, decimals) */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_257\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_258\n jump\t// in\n tag_257:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_260\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_260:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_261\n swap2\n swap1\n tag_173\n jump\t// in\n tag_261:\n /* \"main.sol\":10371:10430 return localasseterc20.set_metadata(name, symbol, decimals) */\n swap1\n pop\n /* \"main.sol\":10236:10445 function set_metadata(string calldata name, string calldata symbol, uint8 decimals) override external returns (bool) {... */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":9864:10021 function transfer_ownership(address owner) override external returns (bool) {... */\n tag_148:\n /* \"main.sol\":9934:9938 bool */\n 0x00\n /* \"main.sol\":9965:9980 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9965:9999 localasseterc20.transfer_ownership */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xf0350c04\n /* \"main.sol\":10000:10005 owner */\n dup4\n /* \"main.sol\":9965:10006 localasseterc20.transfer_ownership(owner) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_263\n swap2\n swap1\n tag_38\n jump\t// in\n tag_263:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_265\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_265:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_266\n swap2\n swap1\n tag_173\n jump\t// in\n tag_266:\n /* \"main.sol\":9958:10006 return localasseterc20.transfer_ownership(owner) */\n swap1\n pop\n /* \"main.sol\":9864:10021 function transfer_ownership(address owner) override external returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":11099:11393 function approve_delegate(address spender, uint256 value) external returns (bool) {... */\n tag_153:\n /* \"main.sol\":11175:11179 bool */\n 0x00\n /* \"main.sol\":11196:11207 bool result */\n dup1\n /* \"main.sol\":11209:11226 bytes memory data */\n 0x00\n /* \"main.sol\":11230:11252 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11230:11265 localasseterc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11335:11342 spender */\n dup6\n /* \"main.sol\":11344:11349 value */\n dup6\n /* \"main.sol\":11283:11350 abi.encodeWithSignature(\"approve(address,uint256)\", spender, value) */\n add(0x24, mload(0x40))\n tag_268\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_268:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x095ea7b300000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":11230:11351 localasseterc20address.delegatecall(... */\n mload(0x40)\n tag_269\n swap2\n swap1\n tag_216\n jump\t// in\n tag_269:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_272\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_271)\n tag_272:\n 0x60\n swap2\n pop\n tag_271:\n pop\n /* \"main.sol\":11195:11351 (bool result, bytes memory data) = localasseterc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":11372:11378 result */\n dup2\n /* \"main.sol\":11365:11378 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":11099:11393 function approve_delegate(address spender, uint256 value) external returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":10035:10222 function set_team(address issuer, address admin, address freezer) override external returns (bool) {... */\n tag_159:\n /* \"main.sol\":10128:10132 bool */\n 0x00\n /* \"main.sol\":10159:10174 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10159:10183 localasseterc20.set_team */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xf8bf8e95\n /* \"main.sol\":10184:10190 issuer */\n dup6\n /* \"main.sol\":10192:10197 admin */\n dup6\n /* \"main.sol\":10199:10206 freezer */\n dup6\n /* \"main.sol\":10159:10207 localasseterc20.set_team(issuer, admin, freezer) */\n mload(0x40)\n dup5\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_274\n swap4\n swap3\n swap2\n swap1\n tag_275\n jump\t// in\n tag_274:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_277\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_277:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_278\n swap2\n swap1\n tag_173\n jump\t// in\n tag_278:\n /* \"main.sol\":10152:10207 return localasseterc20.set_team(issuer, admin, freezer) */\n swap1\n pop\n /* \"main.sol\":10035:10222 function set_team(address issuer, address admin, address freezer) override external returns (bool) {... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:133 */\n tag_279:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":84:126 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":77:82 */\n dup3\n /* \"#utility.yul\":73:127 */\n and\n /* \"#utility.yul\":62:127 */\n swap1\n pop\n /* \"#utility.yul\":7:133 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":139:235 */\n tag_280:\n /* \"#utility.yul\":176:183 */\n 0x00\n /* \"#utility.yul\":205:229 */\n tag_330\n /* \"#utility.yul\":223:228 */\n dup3\n /* \"#utility.yul\":205:229 */\n tag_279\n jump\t// in\n tag_330:\n /* \"#utility.yul\":194:229 */\n swap1\n pop\n /* \"#utility.yul\":139:235 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":241:359 */\n tag_281:\n /* \"#utility.yul\":328:352 */\n tag_332\n /* \"#utility.yul\":346:351 */\n dup2\n /* \"#utility.yul\":328:352 */\n tag_280\n jump\t// in\n tag_332:\n /* \"#utility.yul\":323:326 */\n dup3\n /* \"#utility.yul\":316:353 */\n mstore\n /* \"#utility.yul\":241:359 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":365:587 */\n tag_38:\n /* \"#utility.yul\":458:462 */\n 0x00\n /* \"#utility.yul\":496:498 */\n 0x20\n /* \"#utility.yul\":485:494 */\n dup3\n /* \"#utility.yul\":481:499 */\n add\n /* \"#utility.yul\":473:499 */\n swap1\n pop\n /* \"#utility.yul\":509:580 */\n tag_334\n /* \"#utility.yul\":577:578 */\n 0x00\n /* \"#utility.yul\":566:575 */\n dup4\n /* \"#utility.yul\":562:579 */\n add\n /* \"#utility.yul\":553:559 */\n dup5\n /* \"#utility.yul\":509:580 */\n tag_281\n jump\t// in\n tag_334:\n /* \"#utility.yul\":365:587 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":593:692 */\n tag_282:\n /* \"#utility.yul\":645:651 */\n 0x00\n /* \"#utility.yul\":679:684 */\n dup2\n /* \"#utility.yul\":673:685 */\n mload\n /* \"#utility.yul\":663:685 */\n swap1\n pop\n /* \"#utility.yul\":593:692 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":698:867 */\n tag_283:\n /* \"#utility.yul\":782:793 */\n 0x00\n /* \"#utility.yul\":816:822 */\n dup3\n /* \"#utility.yul\":811:814 */\n dup3\n /* \"#utility.yul\":804:823 */\n mstore\n /* \"#utility.yul\":856:860 */\n 0x20\n /* \"#utility.yul\":851:854 */\n dup3\n /* \"#utility.yul\":847:861 */\n add\n /* \"#utility.yul\":832:861 */\n swap1\n pop\n /* \"#utility.yul\":698:867 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":873:1180 */\n tag_284:\n /* \"#utility.yul\":941:942 */\n 0x00\n /* \"#utility.yul\":951:1064 */\n tag_338:\n /* \"#utility.yul\":965:971 */\n dup4\n /* \"#utility.yul\":962:963 */\n dup2\n /* \"#utility.yul\":959:972 */\n lt\n /* \"#utility.yul\":951:1064 */\n iszero\n tag_340\n jumpi\n /* \"#utility.yul\":1050:1051 */\n dup1\n /* \"#utility.yul\":1045:1048 */\n dup3\n /* \"#utility.yul\":1041:1052 */\n add\n /* \"#utility.yul\":1035:1053 */\n mload\n /* \"#utility.yul\":1031:1032 */\n dup2\n /* \"#utility.yul\":1026:1029 */\n dup5\n /* \"#utility.yul\":1022:1033 */\n add\n /* \"#utility.yul\":1015:1054 */\n mstore\n /* \"#utility.yul\":987:989 */\n 0x20\n /* \"#utility.yul\":984:985 */\n dup2\n /* \"#utility.yul\":980:990 */\n add\n /* \"#utility.yul\":975:990 */\n swap1\n pop\n /* \"#utility.yul\":951:1064 */\n jump(tag_338)\n tag_340:\n /* \"#utility.yul\":1082:1088 */\n dup4\n /* \"#utility.yul\":1079:1080 */\n dup2\n /* \"#utility.yul\":1076:1089 */\n gt\n /* \"#utility.yul\":1073:1174 */\n iszero\n tag_341\n jumpi\n /* \"#utility.yul\":1162:1163 */\n 0x00\n /* \"#utility.yul\":1153:1159 */\n dup5\n /* \"#utility.yul\":1148:1151 */\n dup5\n /* \"#utility.yul\":1144:1160 */\n add\n /* \"#utility.yul\":1137:1164 */\n mstore\n /* \"#utility.yul\":1073:1174 */\n tag_341:\n /* \"#utility.yul\":922:1180 */\n pop\n /* \"#utility.yul\":873:1180 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1186:1288 */\n tag_285:\n /* \"#utility.yul\":1227:1233 */\n 0x00\n /* \"#utility.yul\":1278:1280 */\n 0x1f\n /* \"#utility.yul\":1274:1281 */\n not\n /* \"#utility.yul\":1269:1271 */\n 0x1f\n /* \"#utility.yul\":1262:1267 */\n dup4\n /* \"#utility.yul\":1258:1272 */\n add\n /* \"#utility.yul\":1254:1282 */\n and\n /* \"#utility.yul\":1244:1282 */\n swap1\n pop\n /* \"#utility.yul\":1186:1288 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1294:1658 */\n tag_286:\n /* \"#utility.yul\":1382:1385 */\n 0x00\n /* \"#utility.yul\":1410:1449 */\n tag_344\n /* \"#utility.yul\":1443:1448 */\n dup3\n /* \"#utility.yul\":1410:1449 */\n tag_282\n jump\t// in\n tag_344:\n /* \"#utility.yul\":1465:1536 */\n tag_345\n /* \"#utility.yul\":1529:1535 */\n dup2\n /* \"#utility.yul\":1524:1527 */\n dup6\n /* \"#utility.yul\":1465:1536 */\n tag_283\n jump\t// in\n tag_345:\n /* \"#utility.yul\":1458:1536 */\n swap4\n pop\n /* \"#utility.yul\":1545:1597 */\n tag_346\n /* \"#utility.yul\":1590:1596 */\n dup2\n /* \"#utility.yul\":1585:1588 */\n dup6\n /* \"#utility.yul\":1578:1582 */\n 0x20\n /* \"#utility.yul\":1571:1576 */\n dup7\n /* \"#utility.yul\":1567:1583 */\n add\n /* \"#utility.yul\":1545:1597 */\n tag_284\n jump\t// in\n tag_346:\n /* \"#utility.yul\":1622:1651 */\n tag_347\n /* \"#utility.yul\":1644:1650 */\n dup2\n /* \"#utility.yul\":1622:1651 */\n tag_285\n jump\t// in\n tag_347:\n /* \"#utility.yul\":1617:1620 */\n dup5\n /* \"#utility.yul\":1613:1652 */\n add\n /* \"#utility.yul\":1606:1652 */\n swap2\n pop\n /* \"#utility.yul\":1386:1658 */\n pop\n /* \"#utility.yul\":1294:1658 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1664:1977 */\n tag_43:\n /* \"#utility.yul\":1777:1781 */\n 0x00\n /* \"#utility.yul\":1815:1817 */\n 0x20\n /* \"#utility.yul\":1804:1813 */\n dup3\n /* \"#utility.yul\":1800:1818 */\n add\n /* \"#utility.yul\":1792:1818 */\n swap1\n pop\n /* \"#utility.yul\":1864:1873 */\n dup2\n /* \"#utility.yul\":1858:1862 */\n dup2\n /* \"#utility.yul\":1854:1874 */\n sub\n /* \"#utility.yul\":1850:1851 */\n 0x00\n /* \"#utility.yul\":1839:1848 */\n dup4\n /* \"#utility.yul\":1835:1852 */\n add\n /* \"#utility.yul\":1828:1875 */\n mstore\n /* \"#utility.yul\":1892:1970 */\n tag_349\n /* \"#utility.yul\":1965:1969 */\n dup2\n /* \"#utility.yul\":1956:1962 */\n dup5\n /* \"#utility.yul\":1892:1970 */\n tag_286\n jump\t// in\n tag_349:\n /* \"#utility.yul\":1884:1970 */\n swap1\n pop\n /* \"#utility.yul\":1664:1977 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1983:2058 */\n tag_287:\n /* \"#utility.yul\":2016:2022 */\n 0x00\n /* \"#utility.yul\":2049:2051 */\n 0x40\n /* \"#utility.yul\":2043:2052 */\n mload\n /* \"#utility.yul\":2033:2052 */\n swap1\n pop\n /* \"#utility.yul\":1983:2058 */\n swap1\n jump\t// out\n /* \"#utility.yul\":2064:2181 */\n tag_288:\n /* \"#utility.yul\":2173:2174 */\n 0x00\n /* \"#utility.yul\":2170:2171 */\n dup1\n /* \"#utility.yul\":2163:2175 */\n revert\n /* \"#utility.yul\":2187:2304 */\n tag_289:\n /* \"#utility.yul\":2296:2297 */\n 0x00\n /* \"#utility.yul\":2293:2294 */\n dup1\n /* \"#utility.yul\":2286:2298 */\n revert\n /* \"#utility.yul\":2310:2432 */\n tag_290:\n /* \"#utility.yul\":2383:2407 */\n tag_354\n /* \"#utility.yul\":2401:2406 */\n dup2\n /* \"#utility.yul\":2383:2407 */\n tag_280\n jump\t// in\n tag_354:\n /* \"#utility.yul\":2376:2381 */\n dup2\n /* \"#utility.yul\":2373:2408 */\n eq\n /* \"#utility.yul\":2363:2426 */\n tag_355\n jumpi\n /* \"#utility.yul\":2422:2423 */\n 0x00\n /* \"#utility.yul\":2419:2420 */\n dup1\n /* \"#utility.yul\":2412:2424 */\n revert\n /* \"#utility.yul\":2363:2426 */\n tag_355:\n /* \"#utility.yul\":2310:2432 */\n pop\n jump\t// out\n /* \"#utility.yul\":2438:2577 */\n tag_291:\n /* \"#utility.yul\":2484:2489 */\n 0x00\n /* \"#utility.yul\":2522:2528 */\n dup2\n /* \"#utility.yul\":2509:2529 */\n calldataload\n /* \"#utility.yul\":2500:2529 */\n swap1\n pop\n /* \"#utility.yul\":2538:2571 */\n tag_357\n /* \"#utility.yul\":2565:2570 */\n dup2\n /* \"#utility.yul\":2538:2571 */\n tag_290\n jump\t// in\n tag_357:\n /* \"#utility.yul\":2438:2577 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2583:2660 */\n tag_292:\n /* \"#utility.yul\":2620:2627 */\n 0x00\n /* \"#utility.yul\":2649:2654 */\n dup2\n /* \"#utility.yul\":2638:2654 */\n swap1\n pop\n /* \"#utility.yul\":2583:2660 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2666:2788 */\n tag_293:\n /* \"#utility.yul\":2739:2763 */\n tag_360\n /* \"#utility.yul\":2757:2762 */\n dup2\n /* \"#utility.yul\":2739:2763 */\n tag_292\n jump\t// in\n tag_360:\n /* \"#utility.yul\":2732:2737 */\n dup2\n /* \"#utility.yul\":2729:2764 */\n eq\n /* \"#utility.yul\":2719:2782 */\n tag_361\n jumpi\n /* \"#utility.yul\":2778:2779 */\n 0x00\n /* \"#utility.yul\":2775:2776 */\n dup1\n /* \"#utility.yul\":2768:2780 */\n revert\n /* \"#utility.yul\":2719:2782 */\n tag_361:\n /* \"#utility.yul\":2666:2788 */\n pop\n jump\t// out\n /* \"#utility.yul\":2794:2933 */\n tag_294:\n /* \"#utility.yul\":2840:2845 */\n 0x00\n /* \"#utility.yul\":2878:2884 */\n dup2\n /* \"#utility.yul\":2865:2885 */\n calldataload\n /* \"#utility.yul\":2856:2885 */\n swap1\n pop\n /* \"#utility.yul\":2894:2927 */\n tag_363\n /* \"#utility.yul\":2921:2926 */\n dup2\n /* \"#utility.yul\":2894:2927 */\n tag_293\n jump\t// in\n tag_363:\n /* \"#utility.yul\":2794:2933 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2939:3413 */\n tag_47:\n /* \"#utility.yul\":3007:3013 */\n 0x00\n /* \"#utility.yul\":3015:3021 */\n dup1\n /* \"#utility.yul\":3064:3066 */\n 0x40\n /* \"#utility.yul\":3052:3061 */\n dup4\n /* \"#utility.yul\":3043:3050 */\n dup6\n /* \"#utility.yul\":3039:3062 */\n sub\n /* \"#utility.yul\":3035:3067 */\n slt\n /* \"#utility.yul\":3032:3151 */\n iszero\n tag_365\n jumpi\n /* \"#utility.yul\":3070:3149 */\n tag_366\n tag_288\n jump\t// in\n tag_366:\n /* \"#utility.yul\":3032:3151 */\n tag_365:\n /* \"#utility.yul\":3190:3191 */\n 0x00\n /* \"#utility.yul\":3215:3268 */\n tag_367\n /* \"#utility.yul\":3260:3267 */\n dup6\n /* \"#utility.yul\":3251:3257 */\n dup3\n /* \"#utility.yul\":3240:3249 */\n dup7\n /* \"#utility.yul\":3236:3258 */\n add\n /* \"#utility.yul\":3215:3268 */\n tag_291\n jump\t// in\n tag_367:\n /* \"#utility.yul\":3205:3268 */\n swap3\n pop\n /* \"#utility.yul\":3161:3278 */\n pop\n /* \"#utility.yul\":3317:3319 */\n 0x20\n /* \"#utility.yul\":3343:3396 */\n tag_368\n /* \"#utility.yul\":3388:3395 */\n dup6\n /* \"#utility.yul\":3379:3385 */\n dup3\n /* \"#utility.yul\":3368:3377 */\n dup7\n /* \"#utility.yul\":3364:3386 */\n add\n /* \"#utility.yul\":3343:3396 */\n tag_294\n jump\t// in\n tag_368:\n /* \"#utility.yul\":3333:3396 */\n swap2\n pop\n /* \"#utility.yul\":3288:3406 */\n pop\n /* \"#utility.yul\":2939:3413 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3419:3509 */\n tag_295:\n /* \"#utility.yul\":3453:3460 */\n 0x00\n /* \"#utility.yul\":3496:3501 */\n dup2\n /* \"#utility.yul\":3489:3502 */\n iszero\n /* \"#utility.yul\":3482:3503 */\n iszero\n /* \"#utility.yul\":3471:3503 */\n swap1\n pop\n /* \"#utility.yul\":3419:3509 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3515:3624 */\n tag_296:\n /* \"#utility.yul\":3596:3617 */\n tag_371\n /* \"#utility.yul\":3611:3616 */\n dup2\n /* \"#utility.yul\":3596:3617 */\n tag_295\n jump\t// in\n tag_371:\n /* \"#utility.yul\":3591:3594 */\n dup3\n /* \"#utility.yul\":3584:3618 */\n mstore\n /* \"#utility.yul\":3515:3624 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3630:3840 */\n tag_50:\n /* \"#utility.yul\":3717:3721 */\n 0x00\n /* \"#utility.yul\":3755:3757 */\n 0x20\n /* \"#utility.yul\":3744:3753 */\n dup3\n /* \"#utility.yul\":3740:3758 */\n add\n /* \"#utility.yul\":3732:3758 */\n swap1\n pop\n /* \"#utility.yul\":3768:3833 */\n tag_373\n /* \"#utility.yul\":3830:3831 */\n 0x00\n /* \"#utility.yul\":3819:3828 */\n dup4\n /* \"#utility.yul\":3815:3832 */\n add\n /* \"#utility.yul\":3806:3812 */\n dup5\n /* \"#utility.yul\":3768:3833 */\n tag_296\n jump\t// in\n tag_373:\n /* \"#utility.yul\":3630:3840 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3846:3964 */\n tag_297:\n /* \"#utility.yul\":3933:3957 */\n tag_375\n /* \"#utility.yul\":3951:3956 */\n dup2\n /* \"#utility.yul\":3933:3957 */\n tag_292\n jump\t// in\n tag_375:\n /* \"#utility.yul\":3928:3931 */\n dup3\n /* \"#utility.yul\":3921:3958 */\n mstore\n /* \"#utility.yul\":3846:3964 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3970:4192 */\n tag_55:\n /* \"#utility.yul\":4063:4067 */\n 0x00\n /* \"#utility.yul\":4101:4103 */\n 0x20\n /* \"#utility.yul\":4090:4099 */\n dup3\n /* \"#utility.yul\":4086:4104 */\n add\n /* \"#utility.yul\":4078:4104 */\n swap1\n pop\n /* \"#utility.yul\":4114:4185 */\n tag_377\n /* \"#utility.yul\":4182:4183 */\n 0x00\n /* \"#utility.yul\":4171:4180 */\n dup4\n /* \"#utility.yul\":4167:4184 */\n add\n /* \"#utility.yul\":4158:4164 */\n dup5\n /* \"#utility.yul\":4114:4185 */\n tag_297\n jump\t// in\n tag_377:\n /* \"#utility.yul\":3970:4192 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4198:4817 */\n tag_63:\n /* \"#utility.yul\":4275:4281 */\n 0x00\n /* \"#utility.yul\":4283:4289 */\n dup1\n /* \"#utility.yul\":4291:4297 */\n 0x00\n /* \"#utility.yul\":4340:4342 */\n 0x60\n /* \"#utility.yul\":4328:4337 */\n dup5\n /* \"#utility.yul\":4319:4326 */\n dup7\n /* \"#utility.yul\":4315:4338 */\n sub\n /* \"#utility.yul\":4311:4343 */\n slt\n /* \"#utility.yul\":4308:4427 */\n iszero\n tag_379\n jumpi\n /* \"#utility.yul\":4346:4425 */\n tag_380\n tag_288\n jump\t// in\n tag_380:\n /* \"#utility.yul\":4308:4427 */\n tag_379:\n /* \"#utility.yul\":4466:4467 */\n 0x00\n /* \"#utility.yul\":4491:4544 */\n tag_381\n /* \"#utility.yul\":4536:4543 */\n dup7\n /* \"#utility.yul\":4527:4533 */\n dup3\n /* \"#utility.yul\":4516:4525 */\n dup8\n /* \"#utility.yul\":4512:4534 */\n add\n /* \"#utility.yul\":4491:4544 */\n tag_291\n jump\t// in\n tag_381:\n /* \"#utility.yul\":4481:4544 */\n swap4\n pop\n /* \"#utility.yul\":4437:4554 */\n pop\n /* \"#utility.yul\":4593:4595 */\n 0x20\n /* \"#utility.yul\":4619:4672 */\n tag_382\n /* \"#utility.yul\":4664:4671 */\n dup7\n /* \"#utility.yul\":4655:4661 */\n dup3\n /* \"#utility.yul\":4644:4653 */\n dup8\n /* \"#utility.yul\":4640:4662 */\n add\n /* \"#utility.yul\":4619:4672 */\n tag_291\n jump\t// in\n tag_382:\n /* \"#utility.yul\":4609:4672 */\n swap3\n pop\n /* \"#utility.yul\":4564:4682 */\n pop\n /* \"#utility.yul\":4721:4723 */\n 0x40\n /* \"#utility.yul\":4747:4800 */\n tag_383\n /* \"#utility.yul\":4792:4799 */\n dup7\n /* \"#utility.yul\":4783:4789 */\n dup3\n /* \"#utility.yul\":4772:4781 */\n dup8\n /* \"#utility.yul\":4768:4790 */\n add\n /* \"#utility.yul\":4747:4800 */\n tag_294\n jump\t// in\n tag_383:\n /* \"#utility.yul\":4737:4800 */\n swap2\n pop\n /* \"#utility.yul\":4692:4810 */\n pop\n /* \"#utility.yul\":4198:4817 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":4823:4909 */\n tag_298:\n /* \"#utility.yul\":4858:4865 */\n 0x00\n /* \"#utility.yul\":4898:4902 */\n 0xff\n /* \"#utility.yul\":4891:4896 */\n dup3\n /* \"#utility.yul\":4887:4903 */\n and\n /* \"#utility.yul\":4876:4903 */\n swap1\n pop\n /* \"#utility.yul\":4823:4909 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4915:5027 */\n tag_299:\n /* \"#utility.yul\":4998:5020 */\n tag_386\n /* \"#utility.yul\":5014:5019 */\n dup2\n /* \"#utility.yul\":4998:5020 */\n tag_298\n jump\t// in\n tag_386:\n /* \"#utility.yul\":4993:4996 */\n dup3\n /* \"#utility.yul\":4986:5021 */\n mstore\n /* \"#utility.yul\":4915:5027 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5033:5247 */\n tag_70:\n /* \"#utility.yul\":5122:5126 */\n 0x00\n /* \"#utility.yul\":5160:5162 */\n 0x20\n /* \"#utility.yul\":5149:5158 */\n dup3\n /* \"#utility.yul\":5145:5163 */\n add\n /* \"#utility.yul\":5137:5163 */\n swap1\n pop\n /* \"#utility.yul\":5173:5240 */\n tag_388\n /* \"#utility.yul\":5237:5238 */\n 0x00\n /* \"#utility.yul\":5226:5235 */\n dup4\n /* \"#utility.yul\":5222:5239 */\n add\n /* \"#utility.yul\":5213:5219 */\n dup5\n /* \"#utility.yul\":5173:5240 */\n tag_299\n jump\t// in\n tag_388:\n /* \"#utility.yul\":5033:5247 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5253:5582 */\n tag_79:\n /* \"#utility.yul\":5312:5318 */\n 0x00\n /* \"#utility.yul\":5361:5363 */\n 0x20\n /* \"#utility.yul\":5349:5358 */\n dup3\n /* \"#utility.yul\":5340:5347 */\n dup5\n /* \"#utility.yul\":5336:5359 */\n sub\n /* \"#utility.yul\":5332:5364 */\n slt\n /* \"#utility.yul\":5329:5448 */\n iszero\n tag_390\n jumpi\n /* \"#utility.yul\":5367:5446 */\n tag_391\n tag_288\n jump\t// in\n tag_391:\n /* \"#utility.yul\":5329:5448 */\n tag_390:\n /* \"#utility.yul\":5487:5488 */\n 0x00\n /* \"#utility.yul\":5512:5565 */\n tag_392\n /* \"#utility.yul\":5557:5564 */\n dup5\n /* \"#utility.yul\":5548:5554 */\n dup3\n /* \"#utility.yul\":5537:5546 */\n dup6\n /* \"#utility.yul\":5533:5555 */\n add\n /* \"#utility.yul\":5512:5565 */\n tag_291\n jump\t// in\n tag_392:\n /* \"#utility.yul\":5502:5565 */\n swap2\n pop\n /* \"#utility.yul\":5458:5575 */\n pop\n /* \"#utility.yul\":5253:5582 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5588:5648 */\n tag_300:\n /* \"#utility.yul\":5616:5619 */\n 0x00\n /* \"#utility.yul\":5637:5642 */\n dup2\n /* \"#utility.yul\":5630:5642 */\n swap1\n pop\n /* \"#utility.yul\":5588:5648 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5654:5796 */\n tag_301:\n /* \"#utility.yul\":5704:5713 */\n 0x00\n /* \"#utility.yul\":5737:5790 */\n tag_395\n /* \"#utility.yul\":5755:5789 */\n tag_396\n /* \"#utility.yul\":5764:5788 */\n tag_397\n /* \"#utility.yul\":5782:5787 */\n dup5\n /* \"#utility.yul\":5764:5788 */\n tag_279\n jump\t// in\n tag_397:\n /* \"#utility.yul\":5755:5789 */\n tag_300\n jump\t// in\n tag_396:\n /* \"#utility.yul\":5737:5790 */\n tag_279\n jump\t// in\n tag_395:\n /* \"#utility.yul\":5724:5790 */\n swap1\n pop\n /* \"#utility.yul\":5654:5796 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5802:5928 */\n tag_302:\n /* \"#utility.yul\":5852:5861 */\n 0x00\n /* \"#utility.yul\":5885:5922 */\n tag_399\n /* \"#utility.yul\":5916:5921 */\n dup3\n /* \"#utility.yul\":5885:5922 */\n tag_301\n jump\t// in\n tag_399:\n /* \"#utility.yul\":5872:5922 */\n swap1\n pop\n /* \"#utility.yul\":5802:5928 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5934:6091 */\n tag_303:\n /* \"#utility.yul\":6015:6024 */\n 0x00\n /* \"#utility.yul\":6048:6085 */\n tag_401\n /* \"#utility.yul\":6079:6084 */\n dup3\n /* \"#utility.yul\":6048:6085 */\n tag_302\n jump\t// in\n tag_401:\n /* \"#utility.yul\":6035:6085 */\n swap1\n pop\n /* \"#utility.yul\":5934:6091 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6097:6290 */\n tag_304:\n /* \"#utility.yul\":6215:6283 */\n tag_403\n /* \"#utility.yul\":6277:6282 */\n dup2\n /* \"#utility.yul\":6215:6283 */\n tag_303\n jump\t// in\n tag_403:\n /* \"#utility.yul\":6210:6213 */\n dup3\n /* \"#utility.yul\":6203:6284 */\n mstore\n /* \"#utility.yul\":6097:6290 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6296:6580 */\n tag_113:\n /* \"#utility.yul\":6420:6424 */\n 0x00\n /* \"#utility.yul\":6458:6460 */\n 0x20\n /* \"#utility.yul\":6447:6456 */\n dup3\n /* \"#utility.yul\":6443:6461 */\n add\n /* \"#utility.yul\":6435:6461 */\n swap1\n pop\n /* \"#utility.yul\":6471:6573 */\n tag_405\n /* \"#utility.yul\":6570:6571 */\n 0x00\n /* \"#utility.yul\":6559:6568 */\n dup4\n /* \"#utility.yul\":6555:6572 */\n add\n /* \"#utility.yul\":6546:6552 */\n dup5\n /* \"#utility.yul\":6471:6573 */\n tag_304\n jump\t// in\n tag_405:\n /* \"#utility.yul\":6296:6580 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6586:7060 */\n tag_136:\n /* \"#utility.yul\":6654:6660 */\n 0x00\n /* \"#utility.yul\":6662:6668 */\n dup1\n /* \"#utility.yul\":6711:6713 */\n 0x40\n /* \"#utility.yul\":6699:6708 */\n dup4\n /* \"#utility.yul\":6690:6697 */\n dup6\n /* \"#utility.yul\":6686:6709 */\n sub\n /* \"#utility.yul\":6682:6714 */\n slt\n /* \"#utility.yul\":6679:6798 */\n iszero\n tag_407\n jumpi\n /* \"#utility.yul\":6717:6796 */\n tag_408\n tag_288\n jump\t// in\n tag_408:\n /* \"#utility.yul\":6679:6798 */\n tag_407:\n /* \"#utility.yul\":6837:6838 */\n 0x00\n /* \"#utility.yul\":6862:6915 */\n tag_409\n /* \"#utility.yul\":6907:6914 */\n dup6\n /* \"#utility.yul\":6898:6904 */\n dup3\n /* \"#utility.yul\":6887:6896 */\n dup7\n /* \"#utility.yul\":6883:6905 */\n add\n /* \"#utility.yul\":6862:6915 */\n tag_291\n jump\t// in\n tag_409:\n /* \"#utility.yul\":6852:6915 */\n swap3\n pop\n /* \"#utility.yul\":6808:6925 */\n pop\n /* \"#utility.yul\":6964:6966 */\n 0x20\n /* \"#utility.yul\":6990:7043 */\n tag_410\n /* \"#utility.yul\":7035:7042 */\n dup6\n /* \"#utility.yul\":7026:7032 */\n dup3\n /* \"#utility.yul\":7015:7024 */\n dup7\n /* \"#utility.yul\":7011:7033 */\n add\n /* \"#utility.yul\":6990:7043 */\n tag_291\n jump\t// in\n tag_410:\n /* \"#utility.yul\":6980:7043 */\n swap2\n pop\n /* \"#utility.yul\":6935:7053 */\n pop\n /* \"#utility.yul\":6586:7060 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7066:7183 */\n tag_305:\n /* \"#utility.yul\":7175:7176 */\n 0x00\n /* \"#utility.yul\":7172:7173 */\n dup1\n /* \"#utility.yul\":7165:7177 */\n revert\n /* \"#utility.yul\":7189:7306 */\n tag_306:\n /* \"#utility.yul\":7298:7299 */\n 0x00\n /* \"#utility.yul\":7295:7296 */\n dup1\n /* \"#utility.yul\":7288:7300 */\n revert\n /* \"#utility.yul\":7312:7429 */\n tag_307:\n /* \"#utility.yul\":7421:7422 */\n 0x00\n /* \"#utility.yul\":7418:7419 */\n dup1\n /* \"#utility.yul\":7411:7423 */\n revert\n /* \"#utility.yul\":7449:8002 */\n tag_308:\n /* \"#utility.yul\":7507:7515 */\n 0x00\n /* \"#utility.yul\":7517:7523 */\n dup1\n /* \"#utility.yul\":7567:7570 */\n dup4\n /* \"#utility.yul\":7560:7564 */\n 0x1f\n /* \"#utility.yul\":7552:7558 */\n dup5\n /* \"#utility.yul\":7548:7565 */\n add\n /* \"#utility.yul\":7544:7571 */\n slt\n /* \"#utility.yul\":7534:7656 */\n tag_415\n jumpi\n /* \"#utility.yul\":7575:7654 */\n tag_416\n tag_305\n jump\t// in\n tag_416:\n /* \"#utility.yul\":7534:7656 */\n tag_415:\n /* \"#utility.yul\":7688:7694 */\n dup3\n /* \"#utility.yul\":7675:7695 */\n calldataload\n /* \"#utility.yul\":7665:7695 */\n swap1\n pop\n /* \"#utility.yul\":7718:7736 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7710:7716 */\n dup2\n /* \"#utility.yul\":7707:7737 */\n gt\n /* \"#utility.yul\":7704:7821 */\n iszero\n tag_417\n jumpi\n /* \"#utility.yul\":7740:7819 */\n tag_418\n tag_306\n jump\t// in\n tag_418:\n /* \"#utility.yul\":7704:7821 */\n tag_417:\n /* \"#utility.yul\":7854:7858 */\n 0x20\n /* \"#utility.yul\":7846:7852 */\n dup4\n /* \"#utility.yul\":7842:7859 */\n add\n /* \"#utility.yul\":7830:7859 */\n swap2\n pop\n /* \"#utility.yul\":7908:7911 */\n dup4\n /* \"#utility.yul\":7900:7904 */\n 0x01\n /* \"#utility.yul\":7892:7898 */\n dup3\n /* \"#utility.yul\":7888:7905 */\n mul\n /* \"#utility.yul\":7878:7886 */\n dup4\n /* \"#utility.yul\":7874:7906 */\n add\n /* \"#utility.yul\":7871:7912 */\n gt\n /* \"#utility.yul\":7868:7996 */\n iszero\n tag_419\n jumpi\n /* \"#utility.yul\":7915:7994 */\n tag_420\n tag_307\n jump\t// in\n tag_420:\n /* \"#utility.yul\":7868:7996 */\n tag_419:\n /* \"#utility.yul\":7449:8002 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8008:8126 */\n tag_309:\n /* \"#utility.yul\":8079:8101 */\n tag_422\n /* \"#utility.yul\":8095:8100 */\n dup2\n /* \"#utility.yul\":8079:8101 */\n tag_298\n jump\t// in\n tag_422:\n /* \"#utility.yul\":8072:8077 */\n dup2\n /* \"#utility.yul\":8069:8102 */\n eq\n /* \"#utility.yul\":8059:8120 */\n tag_423\n jumpi\n /* \"#utility.yul\":8116:8117 */\n 0x00\n /* \"#utility.yul\":8113:8114 */\n dup1\n /* \"#utility.yul\":8106:8118 */\n revert\n /* \"#utility.yul\":8059:8120 */\n tag_423:\n /* \"#utility.yul\":8008:8126 */\n pop\n jump\t// out\n /* \"#utility.yul\":8132:8267 */\n tag_310:\n /* \"#utility.yul\":8176:8181 */\n 0x00\n /* \"#utility.yul\":8214:8220 */\n dup2\n /* \"#utility.yul\":8201:8221 */\n calldataload\n /* \"#utility.yul\":8192:8221 */\n swap1\n pop\n /* \"#utility.yul\":8230:8261 */\n tag_425\n /* \"#utility.yul\":8255:8260 */\n dup2\n /* \"#utility.yul\":8230:8261 */\n tag_309\n jump\t// in\n tag_425:\n /* \"#utility.yul\":8132:8267 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8273:9288 */\n tag_142:\n /* \"#utility.yul\":8372:8378 */\n 0x00\n /* \"#utility.yul\":8380:8386 */\n dup1\n /* \"#utility.yul\":8388:8394 */\n 0x00\n /* \"#utility.yul\":8396:8402 */\n dup1\n /* \"#utility.yul\":8404:8410 */\n 0x00\n /* \"#utility.yul\":8453:8455 */\n 0x60\n /* \"#utility.yul\":8441:8450 */\n dup7\n /* \"#utility.yul\":8432:8439 */\n dup9\n /* \"#utility.yul\":8428:8451 */\n sub\n /* \"#utility.yul\":8424:8456 */\n slt\n /* \"#utility.yul\":8421:8540 */\n iszero\n tag_427\n jumpi\n /* \"#utility.yul\":8459:8538 */\n tag_428\n tag_288\n jump\t// in\n tag_428:\n /* \"#utility.yul\":8421:8540 */\n tag_427:\n /* \"#utility.yul\":8607:8608 */\n 0x00\n /* \"#utility.yul\":8596:8605 */\n dup7\n /* \"#utility.yul\":8592:8609 */\n add\n /* \"#utility.yul\":8579:8610 */\n calldataload\n /* \"#utility.yul\":8637:8655 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8629:8635 */\n dup2\n /* \"#utility.yul\":8626:8656 */\n gt\n /* \"#utility.yul\":8623:8740 */\n iszero\n tag_429\n jumpi\n /* \"#utility.yul\":8659:8738 */\n tag_430\n tag_289\n jump\t// in\n tag_430:\n /* \"#utility.yul\":8623:8740 */\n tag_429:\n /* \"#utility.yul\":8772:8837 */\n tag_431\n /* \"#utility.yul\":8829:8836 */\n dup9\n /* \"#utility.yul\":8820:8826 */\n dup3\n /* \"#utility.yul\":8809:8818 */\n dup10\n /* \"#utility.yul\":8805:8827 */\n add\n /* \"#utility.yul\":8772:8837 */\n tag_308\n jump\t// in\n tag_431:\n /* \"#utility.yul\":8754:8837 */\n swap6\n pop\n swap6\n pop\n /* \"#utility.yul\":8550:8847 */\n pop\n /* \"#utility.yul\":8914:8916 */\n 0x20\n /* \"#utility.yul\":8903:8912 */\n dup7\n /* \"#utility.yul\":8899:8917 */\n add\n /* \"#utility.yul\":8886:8918 */\n calldataload\n /* \"#utility.yul\":8945:8963 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8937:8943 */\n dup2\n /* \"#utility.yul\":8934:8964 */\n gt\n /* \"#utility.yul\":8931:9048 */\n iszero\n tag_432\n jumpi\n /* \"#utility.yul\":8967:9046 */\n tag_433\n tag_289\n jump\t// in\n tag_433:\n /* \"#utility.yul\":8931:9048 */\n tag_432:\n /* \"#utility.yul\":9080:9145 */\n tag_434\n /* \"#utility.yul\":9137:9144 */\n dup9\n /* \"#utility.yul\":9128:9134 */\n dup3\n /* \"#utility.yul\":9117:9126 */\n dup10\n /* \"#utility.yul\":9113:9135 */\n add\n /* \"#utility.yul\":9080:9145 */\n tag_308\n jump\t// in\n tag_434:\n /* \"#utility.yul\":9062:9145 */\n swap4\n pop\n swap4\n pop\n /* \"#utility.yul\":8857:9155 */\n pop\n /* \"#utility.yul\":9194:9196 */\n 0x40\n /* \"#utility.yul\":9220:9271 */\n tag_435\n /* \"#utility.yul\":9263:9270 */\n dup9\n /* \"#utility.yul\":9254:9260 */\n dup3\n /* \"#utility.yul\":9243:9252 */\n dup10\n /* \"#utility.yul\":9239:9261 */\n add\n /* \"#utility.yul\":9220:9271 */\n tag_310\n jump\t// in\n tag_435:\n /* \"#utility.yul\":9210:9271 */\n swap2\n pop\n /* \"#utility.yul\":9165:9281 */\n pop\n /* \"#utility.yul\":8273:9288 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":9294:9913 */\n tag_158:\n /* \"#utility.yul\":9371:9377 */\n 0x00\n /* \"#utility.yul\":9379:9385 */\n dup1\n /* \"#utility.yul\":9387:9393 */\n 0x00\n /* \"#utility.yul\":9436:9438 */\n 0x60\n /* \"#utility.yul\":9424:9433 */\n dup5\n /* \"#utility.yul\":9415:9422 */\n dup7\n /* \"#utility.yul\":9411:9434 */\n sub\n /* \"#utility.yul\":9407:9439 */\n slt\n /* \"#utility.yul\":9404:9523 */\n iszero\n tag_437\n jumpi\n /* \"#utility.yul\":9442:9521 */\n tag_438\n tag_288\n jump\t// in\n tag_438:\n /* \"#utility.yul\":9404:9523 */\n tag_437:\n /* \"#utility.yul\":9562:9563 */\n 0x00\n /* \"#utility.yul\":9587:9640 */\n tag_439\n /* \"#utility.yul\":9632:9639 */\n dup7\n /* \"#utility.yul\":9623:9629 */\n dup3\n /* \"#utility.yul\":9612:9621 */\n dup8\n /* \"#utility.yul\":9608:9630 */\n add\n /* \"#utility.yul\":9587:9640 */\n tag_291\n jump\t// in\n tag_439:\n /* \"#utility.yul\":9577:9640 */\n swap4\n pop\n /* \"#utility.yul\":9533:9650 */\n pop\n /* \"#utility.yul\":9689:9691 */\n 0x20\n /* \"#utility.yul\":9715:9768 */\n tag_440\n /* \"#utility.yul\":9760:9767 */\n dup7\n /* \"#utility.yul\":9751:9757 */\n dup3\n /* \"#utility.yul\":9740:9749 */\n dup8\n /* \"#utility.yul\":9736:9758 */\n add\n /* \"#utility.yul\":9715:9768 */\n tag_291\n jump\t// in\n tag_440:\n /* \"#utility.yul\":9705:9768 */\n swap3\n pop\n /* \"#utility.yul\":9660:9778 */\n pop\n /* \"#utility.yul\":9817:9819 */\n 0x40\n /* \"#utility.yul\":9843:9896 */\n tag_441\n /* \"#utility.yul\":9888:9895 */\n dup7\n /* \"#utility.yul\":9879:9885 */\n dup3\n /* \"#utility.yul\":9868:9877 */\n dup8\n /* \"#utility.yul\":9864:9886 */\n add\n /* \"#utility.yul\":9843:9896 */\n tag_291\n jump\t// in\n tag_441:\n /* \"#utility.yul\":9833:9896 */\n swap2\n pop\n /* \"#utility.yul\":9788:9906 */\n pop\n /* \"#utility.yul\":9294:9913 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":9919:10036 */\n tag_311:\n /* \"#utility.yul\":10028:10029 */\n 0x00\n /* \"#utility.yul\":10025:10026 */\n dup1\n /* \"#utility.yul\":10018:10030 */\n revert\n /* \"#utility.yul\":10042:10222 */\n tag_312:\n /* \"#utility.yul\":10090:10167 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":10087:10088 */\n 0x00\n /* \"#utility.yul\":10080:10168 */\n mstore\n /* \"#utility.yul\":10187:10191 */\n 0x41\n /* \"#utility.yul\":10184:10185 */\n 0x04\n /* \"#utility.yul\":10177:10192 */\n mstore\n /* \"#utility.yul\":10211:10215 */\n 0x24\n /* \"#utility.yul\":10208:10209 */\n 0x00\n /* \"#utility.yul\":10201:10216 */\n revert\n /* \"#utility.yul\":10228:10509 */\n tag_313:\n /* \"#utility.yul\":10311:10338 */\n tag_445\n /* \"#utility.yul\":10333:10337 */\n dup3\n /* \"#utility.yul\":10311:10338 */\n tag_285\n jump\t// in\n tag_445:\n /* \"#utility.yul\":10303:10309 */\n dup2\n /* \"#utility.yul\":10299:10339 */\n add\n /* \"#utility.yul\":10441:10447 */\n dup2\n /* \"#utility.yul\":10429:10439 */\n dup2\n /* \"#utility.yul\":10426:10448 */\n lt\n /* \"#utility.yul\":10405:10423 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10393:10403 */\n dup3\n /* \"#utility.yul\":10390:10424 */\n gt\n /* \"#utility.yul\":10387:10449 */\n or\n /* \"#utility.yul\":10384:10472 */\n iszero\n tag_446\n jumpi\n /* \"#utility.yul\":10452:10470 */\n tag_447\n tag_312\n jump\t// in\n tag_447:\n /* \"#utility.yul\":10384:10472 */\n tag_446:\n /* \"#utility.yul\":10492:10502 */\n dup1\n /* \"#utility.yul\":10488:10490 */\n 0x40\n /* \"#utility.yul\":10481:10503 */\n mstore\n /* \"#utility.yul\":10271:10509 */\n pop\n /* \"#utility.yul\":10228:10509 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10515:10644 */\n tag_314:\n /* \"#utility.yul\":10549:10555 */\n 0x00\n /* \"#utility.yul\":10576:10596 */\n tag_449\n tag_287\n jump\t// in\n tag_449:\n /* \"#utility.yul\":10566:10596 */\n swap1\n pop\n /* \"#utility.yul\":10605:10638 */\n tag_450\n /* \"#utility.yul\":10633:10637 */\n dup3\n /* \"#utility.yul\":10625:10631 */\n dup3\n /* \"#utility.yul\":10605:10638 */\n tag_313\n jump\t// in\n tag_450:\n /* \"#utility.yul\":10515:10644 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10650:10958 */\n tag_315:\n /* \"#utility.yul\":10712:10716 */\n 0x00\n /* \"#utility.yul\":10802:10820 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10794:10800 */\n dup3\n /* \"#utility.yul\":10791:10821 */\n gt\n /* \"#utility.yul\":10788:10844 */\n iszero\n tag_452\n jumpi\n /* \"#utility.yul\":10824:10842 */\n tag_453\n tag_312\n jump\t// in\n tag_453:\n /* \"#utility.yul\":10788:10844 */\n tag_452:\n /* \"#utility.yul\":10862:10891 */\n tag_454\n /* \"#utility.yul\":10884:10890 */\n dup3\n /* \"#utility.yul\":10862:10891 */\n tag_285\n jump\t// in\n tag_454:\n /* \"#utility.yul\":10854:10891 */\n swap1\n pop\n /* \"#utility.yul\":10946:10950 */\n 0x20\n /* \"#utility.yul\":10940:10944 */\n dup2\n /* \"#utility.yul\":10936:10951 */\n add\n /* \"#utility.yul\":10928:10951 */\n swap1\n pop\n /* \"#utility.yul\":10650:10958 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10964:11385 */\n tag_316:\n /* \"#utility.yul\":11053:11058 */\n 0x00\n /* \"#utility.yul\":11078:11144 */\n tag_456\n /* \"#utility.yul\":11094:11143 */\n tag_457\n /* \"#utility.yul\":11136:11142 */\n dup5\n /* \"#utility.yul\":11094:11143 */\n tag_315\n jump\t// in\n tag_457:\n /* \"#utility.yul\":11078:11144 */\n tag_314\n jump\t// in\n tag_456:\n /* \"#utility.yul\":11069:11144 */\n swap1\n pop\n /* \"#utility.yul\":11167:11173 */\n dup3\n /* \"#utility.yul\":11160:11165 */\n dup2\n /* \"#utility.yul\":11153:11174 */\n mstore\n /* \"#utility.yul\":11205:11209 */\n 0x20\n /* \"#utility.yul\":11198:11203 */\n dup2\n /* \"#utility.yul\":11194:11210 */\n add\n /* \"#utility.yul\":11243:11246 */\n dup5\n /* \"#utility.yul\":11234:11240 */\n dup5\n /* \"#utility.yul\":11229:11232 */\n dup5\n /* \"#utility.yul\":11225:11241 */\n add\n /* \"#utility.yul\":11222:11247 */\n gt\n /* \"#utility.yul\":11219:11331 */\n iszero\n tag_458\n jumpi\n /* \"#utility.yul\":11250:11329 */\n tag_459\n tag_311\n jump\t// in\n tag_459:\n /* \"#utility.yul\":11219:11331 */\n tag_458:\n /* \"#utility.yul\":11340:11379 */\n tag_460\n /* \"#utility.yul\":11372:11378 */\n dup5\n /* \"#utility.yul\":11367:11370 */\n dup3\n /* \"#utility.yul\":11362:11365 */\n dup6\n /* \"#utility.yul\":11340:11379 */\n tag_284\n jump\t// in\n tag_460:\n /* \"#utility.yul\":11059:11385 */\n pop\n /* \"#utility.yul\":10964:11385 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11405:11760 */\n tag_317:\n /* \"#utility.yul\":11472:11477 */\n 0x00\n /* \"#utility.yul\":11521:11524 */\n dup3\n /* \"#utility.yul\":11514:11518 */\n 0x1f\n /* \"#utility.yul\":11506:11512 */\n dup4\n /* \"#utility.yul\":11502:11519 */\n add\n /* \"#utility.yul\":11498:11525 */\n slt\n /* \"#utility.yul\":11488:11610 */\n tag_462\n jumpi\n /* \"#utility.yul\":11529:11608 */\n tag_463\n tag_305\n jump\t// in\n tag_463:\n /* \"#utility.yul\":11488:11610 */\n tag_462:\n /* \"#utility.yul\":11639:11645 */\n dup2\n /* \"#utility.yul\":11633:11646 */\n mload\n /* \"#utility.yul\":11664:11754 */\n tag_464\n /* \"#utility.yul\":11750:11753 */\n dup5\n /* \"#utility.yul\":11742:11748 */\n dup3\n /* \"#utility.yul\":11735:11739 */\n 0x20\n /* \"#utility.yul\":11727:11733 */\n dup7\n /* \"#utility.yul\":11723:11740 */\n add\n /* \"#utility.yul\":11664:11754 */\n tag_316\n jump\t// in\n tag_464:\n /* \"#utility.yul\":11655:11754 */\n swap2\n pop\n /* \"#utility.yul\":11478:11760 */\n pop\n /* \"#utility.yul\":11405:11760 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11766:12290 */\n tag_166:\n /* \"#utility.yul\":11846:11852 */\n 0x00\n /* \"#utility.yul\":11895:11897 */\n 0x20\n /* \"#utility.yul\":11883:11892 */\n dup3\n /* \"#utility.yul\":11874:11881 */\n dup5\n /* \"#utility.yul\":11870:11893 */\n sub\n /* \"#utility.yul\":11866:11898 */\n slt\n /* \"#utility.yul\":11863:11982 */\n iszero\n tag_466\n jumpi\n /* \"#utility.yul\":11901:11980 */\n tag_467\n tag_288\n jump\t// in\n tag_467:\n /* \"#utility.yul\":11863:11982 */\n tag_466:\n /* \"#utility.yul\":12042:12043 */\n 0x00\n /* \"#utility.yul\":12031:12040 */\n dup3\n /* \"#utility.yul\":12027:12044 */\n add\n /* \"#utility.yul\":12021:12045 */\n mload\n /* \"#utility.yul\":12072:12090 */\n 0xffffffffffffffff\n /* \"#utility.yul\":12064:12070 */\n dup2\n /* \"#utility.yul\":12061:12091 */\n gt\n /* \"#utility.yul\":12058:12175 */\n iszero\n tag_468\n jumpi\n /* \"#utility.yul\":12094:12173 */\n tag_469\n tag_289\n jump\t// in\n tag_469:\n /* \"#utility.yul\":12058:12175 */\n tag_468:\n /* \"#utility.yul\":12199:12273 */\n tag_470\n /* \"#utility.yul\":12265:12272 */\n dup5\n /* \"#utility.yul\":12256:12262 */\n dup3\n /* \"#utility.yul\":12245:12254 */\n dup6\n /* \"#utility.yul\":12241:12263 */\n add\n /* \"#utility.yul\":12199:12273 */\n tag_317\n jump\t// in\n tag_470:\n /* \"#utility.yul\":12189:12273 */\n swap2\n pop\n /* \"#utility.yul\":11992:12283 */\n pop\n /* \"#utility.yul\":11766:12290 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12296:12628 */\n tag_169:\n /* \"#utility.yul\":12417:12421 */\n 0x00\n /* \"#utility.yul\":12455:12457 */\n 0x40\n /* \"#utility.yul\":12444:12453 */\n dup3\n /* \"#utility.yul\":12440:12458 */\n add\n /* \"#utility.yul\":12432:12458 */\n swap1\n pop\n /* \"#utility.yul\":12468:12539 */\n tag_472\n /* \"#utility.yul\":12536:12537 */\n 0x00\n /* \"#utility.yul\":12525:12534 */\n dup4\n /* \"#utility.yul\":12521:12538 */\n add\n /* \"#utility.yul\":12512:12518 */\n dup6\n /* \"#utility.yul\":12468:12539 */\n tag_281\n jump\t// in\n tag_472:\n /* \"#utility.yul\":12549:12621 */\n tag_473\n /* \"#utility.yul\":12617:12619 */\n 0x20\n /* \"#utility.yul\":12606:12615 */\n dup4\n /* \"#utility.yul\":12602:12620 */\n add\n /* \"#utility.yul\":12593:12599 */\n dup5\n /* \"#utility.yul\":12549:12621 */\n tag_297\n jump\t// in\n tag_473:\n /* \"#utility.yul\":12296:12628 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12634:12750 */\n tag_318:\n /* \"#utility.yul\":12704:12725 */\n tag_475\n /* \"#utility.yul\":12719:12724 */\n dup2\n /* \"#utility.yul\":12704:12725 */\n tag_295\n jump\t// in\n tag_475:\n /* \"#utility.yul\":12697:12702 */\n dup2\n /* \"#utility.yul\":12694:12726 */\n eq\n /* \"#utility.yul\":12684:12744 */\n tag_476\n jumpi\n /* \"#utility.yul\":12740:12741 */\n 0x00\n /* \"#utility.yul\":12737:12738 */\n dup1\n /* \"#utility.yul\":12730:12742 */\n revert\n /* \"#utility.yul\":12684:12744 */\n tag_476:\n /* \"#utility.yul\":12634:12750 */\n pop\n jump\t// out\n /* \"#utility.yul\":12756:12893 */\n tag_319:\n /* \"#utility.yul\":12810:12815 */\n 0x00\n /* \"#utility.yul\":12841:12847 */\n dup2\n /* \"#utility.yul\":12835:12848 */\n mload\n /* \"#utility.yul\":12826:12848 */\n swap1\n pop\n /* \"#utility.yul\":12857:12887 */\n tag_478\n /* \"#utility.yul\":12881:12886 */\n dup2\n /* \"#utility.yul\":12857:12887 */\n tag_318\n jump\t// in\n tag_478:\n /* \"#utility.yul\":12756:12893 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12899:13244 */\n tag_173:\n /* \"#utility.yul\":12966:12972 */\n 0x00\n /* \"#utility.yul\":13015:13017 */\n 0x20\n /* \"#utility.yul\":13003:13012 */\n dup3\n /* \"#utility.yul\":12994:13001 */\n dup5\n /* \"#utility.yul\":12990:13013 */\n sub\n /* \"#utility.yul\":12986:13018 */\n slt\n /* \"#utility.yul\":12983:13102 */\n iszero\n tag_480\n jumpi\n /* \"#utility.yul\":13021:13100 */\n tag_481\n tag_288\n jump\t// in\n tag_481:\n /* \"#utility.yul\":12983:13102 */\n tag_480:\n /* \"#utility.yul\":13141:13142 */\n 0x00\n /* \"#utility.yul\":13166:13227 */\n tag_482\n /* \"#utility.yul\":13219:13226 */\n dup5\n /* \"#utility.yul\":13210:13216 */\n dup3\n /* \"#utility.yul\":13199:13208 */\n dup6\n /* \"#utility.yul\":13195:13217 */\n add\n /* \"#utility.yul\":13166:13227 */\n tag_319\n jump\t// in\n tag_482:\n /* \"#utility.yul\":13156:13227 */\n swap2\n pop\n /* \"#utility.yul\":13112:13237 */\n pop\n /* \"#utility.yul\":12899:13244 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13250:13393 */\n tag_320:\n /* \"#utility.yul\":13307:13312 */\n 0x00\n /* \"#utility.yul\":13338:13344 */\n dup2\n /* \"#utility.yul\":13332:13345 */\n mload\n /* \"#utility.yul\":13323:13345 */\n swap1\n pop\n /* \"#utility.yul\":13354:13387 */\n tag_484\n /* \"#utility.yul\":13381:13386 */\n dup2\n /* \"#utility.yul\":13354:13387 */\n tag_293\n jump\t// in\n tag_484:\n /* \"#utility.yul\":13250:13393 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13399:13750 */\n tag_178:\n /* \"#utility.yul\":13469:13475 */\n 0x00\n /* \"#utility.yul\":13518:13520 */\n 0x20\n /* \"#utility.yul\":13506:13515 */\n dup3\n /* \"#utility.yul\":13497:13504 */\n dup5\n /* \"#utility.yul\":13493:13516 */\n sub\n /* \"#utility.yul\":13489:13521 */\n slt\n /* \"#utility.yul\":13486:13605 */\n iszero\n tag_486\n jumpi\n /* \"#utility.yul\":13524:13603 */\n tag_487\n tag_288\n jump\t// in\n tag_487:\n /* \"#utility.yul\":13486:13605 */\n tag_486:\n /* \"#utility.yul\":13644:13645 */\n 0x00\n /* \"#utility.yul\":13669:13733 */\n tag_488\n /* \"#utility.yul\":13725:13732 */\n dup5\n /* \"#utility.yul\":13716:13722 */\n dup3\n /* \"#utility.yul\":13705:13714 */\n dup6\n /* \"#utility.yul\":13701:13723 */\n add\n /* \"#utility.yul\":13669:13733 */\n tag_320\n jump\t// in\n tag_488:\n /* \"#utility.yul\":13659:13733 */\n swap2\n pop\n /* \"#utility.yul\":13615:13743 */\n pop\n /* \"#utility.yul\":13399:13750 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13756:14198 */\n tag_185:\n /* \"#utility.yul\":13905:13909 */\n 0x00\n /* \"#utility.yul\":13943:13945 */\n 0x60\n /* \"#utility.yul\":13932:13941 */\n dup3\n /* \"#utility.yul\":13928:13946 */\n add\n /* \"#utility.yul\":13920:13946 */\n swap1\n pop\n /* \"#utility.yul\":13956:14027 */\n tag_490\n /* \"#utility.yul\":14024:14025 */\n 0x00\n /* \"#utility.yul\":14013:14022 */\n dup4\n /* \"#utility.yul\":14009:14026 */\n add\n /* \"#utility.yul\":14000:14006 */\n dup7\n /* \"#utility.yul\":13956:14027 */\n tag_281\n jump\t// in\n tag_490:\n /* \"#utility.yul\":14037:14109 */\n tag_491\n /* \"#utility.yul\":14105:14107 */\n 0x20\n /* \"#utility.yul\":14094:14103 */\n dup4\n /* \"#utility.yul\":14090:14108 */\n add\n /* \"#utility.yul\":14081:14087 */\n dup6\n /* \"#utility.yul\":14037:14109 */\n tag_281\n jump\t// in\n tag_491:\n /* \"#utility.yul\":14119:14191 */\n tag_492\n /* \"#utility.yul\":14187:14189 */\n 0x40\n /* \"#utility.yul\":14176:14185 */\n dup4\n /* \"#utility.yul\":14172:14190 */\n add\n /* \"#utility.yul\":14163:14169 */\n dup5\n /* \"#utility.yul\":14119:14191 */\n tag_297\n jump\t// in\n tag_492:\n /* \"#utility.yul\":13756:14198 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14204:14343 */\n tag_321:\n /* \"#utility.yul\":14259:14264 */\n 0x00\n /* \"#utility.yul\":14290:14296 */\n dup2\n /* \"#utility.yul\":14284:14297 */\n mload\n /* \"#utility.yul\":14275:14297 */\n swap1\n pop\n /* \"#utility.yul\":14306:14337 */\n tag_494\n /* \"#utility.yul\":14331:14336 */\n dup2\n /* \"#utility.yul\":14306:14337 */\n tag_309\n jump\t// in\n tag_494:\n /* \"#utility.yul\":14204:14343 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14349:14696 */\n tag_193:\n /* \"#utility.yul\":14417:14423 */\n 0x00\n /* \"#utility.yul\":14466:14468 */\n 0x20\n /* \"#utility.yul\":14454:14463 */\n dup3\n /* \"#utility.yul\":14445:14452 */\n dup5\n /* \"#utility.yul\":14441:14464 */\n sub\n /* \"#utility.yul\":14437:14469 */\n slt\n /* \"#utility.yul\":14434:14553 */\n iszero\n tag_496\n jumpi\n /* \"#utility.yul\":14472:14551 */\n tag_497\n tag_288\n jump\t// in\n tag_497:\n /* \"#utility.yul\":14434:14553 */\n tag_496:\n /* \"#utility.yul\":14592:14593 */\n 0x00\n /* \"#utility.yul\":14617:14679 */\n tag_498\n /* \"#utility.yul\":14671:14678 */\n dup5\n /* \"#utility.yul\":14662:14668 */\n dup3\n /* \"#utility.yul\":14651:14660 */\n dup6\n /* \"#utility.yul\":14647:14669 */\n add\n /* \"#utility.yul\":14617:14679 */\n tag_321\n jump\t// in\n tag_498:\n /* \"#utility.yul\":14607:14679 */\n swap2\n pop\n /* \"#utility.yul\":14563:14689 */\n pop\n /* \"#utility.yul\":14349:14696 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14702:14800 */\n tag_322:\n /* \"#utility.yul\":14753:14759 */\n 0x00\n /* \"#utility.yul\":14787:14792 */\n dup2\n /* \"#utility.yul\":14781:14793 */\n mload\n /* \"#utility.yul\":14771:14793 */\n swap1\n pop\n /* \"#utility.yul\":14702:14800 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":14806:14953 */\n tag_323:\n /* \"#utility.yul\":14907:14918 */\n 0x00\n /* \"#utility.yul\":14944:14947 */\n dup2\n /* \"#utility.yul\":14929:14947 */\n swap1\n pop\n /* \"#utility.yul\":14806:14953 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14959:15332 */\n tag_324:\n /* \"#utility.yul\":15063:15066 */\n 0x00\n /* \"#utility.yul\":15091:15129 */\n tag_502\n /* \"#utility.yul\":15123:15128 */\n dup3\n /* \"#utility.yul\":15091:15129 */\n tag_322\n jump\t// in\n tag_502:\n /* \"#utility.yul\":15145:15233 */\n tag_503\n /* \"#utility.yul\":15226:15232 */\n dup2\n /* \"#utility.yul\":15221:15224 */\n dup6\n /* \"#utility.yul\":15145:15233 */\n tag_323\n jump\t// in\n tag_503:\n /* \"#utility.yul\":15138:15233 */\n swap4\n pop\n /* \"#utility.yul\":15242:15294 */\n tag_504\n /* \"#utility.yul\":15287:15293 */\n dup2\n /* \"#utility.yul\":15282:15285 */\n dup6\n /* \"#utility.yul\":15275:15279 */\n 0x20\n /* \"#utility.yul\":15268:15273 */\n dup7\n /* \"#utility.yul\":15264:15280 */\n add\n /* \"#utility.yul\":15242:15294 */\n tag_284\n jump\t// in\n tag_504:\n /* \"#utility.yul\":15319:15325 */\n dup1\n /* \"#utility.yul\":15314:15317 */\n dup5\n /* \"#utility.yul\":15310:15326 */\n add\n /* \"#utility.yul\":15303:15326 */\n swap2\n pop\n /* \"#utility.yul\":15067:15332 */\n pop\n /* \"#utility.yul\":14959:15332 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15338:15609 */\n tag_216:\n /* \"#utility.yul\":15468:15471 */\n 0x00\n /* \"#utility.yul\":15490:15583 */\n tag_506\n /* \"#utility.yul\":15579:15582 */\n dup3\n /* \"#utility.yul\":15570:15576 */\n dup5\n /* \"#utility.yul\":15490:15583 */\n tag_324\n jump\t// in\n tag_506:\n /* \"#utility.yul\":15483:15583 */\n swap2\n pop\n /* \"#utility.yul\":15600:15603 */\n dup2\n /* \"#utility.yul\":15593:15603 */\n swap1\n pop\n /* \"#utility.yul\":15338:15609 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15615:15947 */\n tag_252:\n /* \"#utility.yul\":15736:15740 */\n 0x00\n /* \"#utility.yul\":15774:15776 */\n 0x40\n /* \"#utility.yul\":15763:15772 */\n dup3\n /* \"#utility.yul\":15759:15777 */\n add\n /* \"#utility.yul\":15751:15777 */\n swap1\n pop\n /* \"#utility.yul\":15787:15858 */\n tag_508\n /* \"#utility.yul\":15855:15856 */\n 0x00\n /* \"#utility.yul\":15844:15853 */\n dup4\n /* \"#utility.yul\":15840:15857 */\n add\n /* \"#utility.yul\":15831:15837 */\n dup6\n /* \"#utility.yul\":15787:15858 */\n tag_281\n jump\t// in\n tag_508:\n /* \"#utility.yul\":15868:15940 */\n tag_509\n /* \"#utility.yul\":15936:15938 */\n 0x20\n /* \"#utility.yul\":15925:15934 */\n dup4\n /* \"#utility.yul\":15921:15939 */\n add\n /* \"#utility.yul\":15912:15918 */\n dup5\n /* \"#utility.yul\":15868:15940 */\n tag_281\n jump\t// in\n tag_509:\n /* \"#utility.yul\":15615:15947 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15953:16107 */\n tag_325:\n /* \"#utility.yul\":16037:16043 */\n dup3\n /* \"#utility.yul\":16032:16035 */\n dup2\n /* \"#utility.yul\":16027:16030 */\n dup4\n /* \"#utility.yul\":16014:16044 */\n calldatacopy\n /* \"#utility.yul\":16099:16100 */\n 0x00\n /* \"#utility.yul\":16090:16096 */\n dup4\n /* \"#utility.yul\":16085:16088 */\n dup4\n /* \"#utility.yul\":16081:16097 */\n add\n /* \"#utility.yul\":16074:16101 */\n mstore\n /* \"#utility.yul\":15953:16107 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16137:16441 */\n tag_326:\n /* \"#utility.yul\":16235:16238 */\n 0x00\n /* \"#utility.yul\":16256:16327 */\n tag_512\n /* \"#utility.yul\":16320:16326 */\n dup4\n /* \"#utility.yul\":16315:16318 */\n dup6\n /* \"#utility.yul\":16256:16327 */\n tag_283\n jump\t// in\n tag_512:\n /* \"#utility.yul\":16249:16327 */\n swap4\n pop\n /* \"#utility.yul\":16337:16380 */\n tag_513\n /* \"#utility.yul\":16373:16379 */\n dup4\n /* \"#utility.yul\":16368:16371 */\n dup6\n /* \"#utility.yul\":16361:16366 */\n dup5\n /* \"#utility.yul\":16337:16380 */\n tag_325\n jump\t// in\n tag_513:\n /* \"#utility.yul\":16405:16434 */\n tag_514\n /* \"#utility.yul\":16427:16433 */\n dup4\n /* \"#utility.yul\":16405:16434 */\n tag_285\n jump\t// in\n tag_514:\n /* \"#utility.yul\":16400:16403 */\n dup5\n /* \"#utility.yul\":16396:16435 */\n add\n /* \"#utility.yul\":16389:16435 */\n swap1\n pop\n /* \"#utility.yul\":16137:16441 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16447:17103 */\n tag_258:\n /* \"#utility.yul\":16652:16656 */\n 0x00\n /* \"#utility.yul\":16690:16692 */\n 0x60\n /* \"#utility.yul\":16679:16688 */\n dup3\n /* \"#utility.yul\":16675:16693 */\n add\n /* \"#utility.yul\":16667:16693 */\n swap1\n pop\n /* \"#utility.yul\":16739:16748 */\n dup2\n /* \"#utility.yul\":16733:16737 */\n dup2\n /* \"#utility.yul\":16729:16749 */\n sub\n /* \"#utility.yul\":16725:16726 */\n 0x00\n /* \"#utility.yul\":16714:16723 */\n dup4\n /* \"#utility.yul\":16710:16727 */\n add\n /* \"#utility.yul\":16703:16750 */\n mstore\n /* \"#utility.yul\":16767:16855 */\n tag_516\n /* \"#utility.yul\":16850:16854 */\n dup2\n /* \"#utility.yul\":16841:16847 */\n dup8\n /* \"#utility.yul\":16833:16839 */\n dup10\n /* \"#utility.yul\":16767:16855 */\n tag_326\n jump\t// in\n tag_516:\n /* \"#utility.yul\":16759:16855 */\n swap1\n pop\n /* \"#utility.yul\":16902:16911 */\n dup2\n /* \"#utility.yul\":16896:16900 */\n dup2\n /* \"#utility.yul\":16892:16912 */\n sub\n /* \"#utility.yul\":16887:16889 */\n 0x20\n /* \"#utility.yul\":16876:16885 */\n dup4\n /* \"#utility.yul\":16872:16890 */\n add\n /* \"#utility.yul\":16865:16913 */\n mstore\n /* \"#utility.yul\":16930:17018 */\n tag_517\n /* \"#utility.yul\":17013:17017 */\n dup2\n /* \"#utility.yul\":17004:17010 */\n dup6\n /* \"#utility.yul\":16996:17002 */\n dup8\n /* \"#utility.yul\":16930:17018 */\n tag_326\n jump\t// in\n tag_517:\n /* \"#utility.yul\":16922:17018 */\n swap1\n pop\n /* \"#utility.yul\":17028:17096 */\n tag_518\n /* \"#utility.yul\":17092:17094 */\n 0x40\n /* \"#utility.yul\":17081:17090 */\n dup4\n /* \"#utility.yul\":17077:17095 */\n add\n /* \"#utility.yul\":17068:17074 */\n dup5\n /* \"#utility.yul\":17028:17096 */\n tag_299\n jump\t// in\n tag_518:\n /* \"#utility.yul\":16447:17103 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17109:17551 */\n tag_275:\n /* \"#utility.yul\":17258:17262 */\n 0x00\n /* \"#utility.yul\":17296:17298 */\n 0x60\n /* \"#utility.yul\":17285:17294 */\n dup3\n /* \"#utility.yul\":17281:17299 */\n add\n /* \"#utility.yul\":17273:17299 */\n swap1\n pop\n /* \"#utility.yul\":17309:17380 */\n tag_520\n /* \"#utility.yul\":17377:17378 */\n 0x00\n /* \"#utility.yul\":17366:17375 */\n dup4\n /* \"#utility.yul\":17362:17379 */\n add\n /* \"#utility.yul\":17353:17359 */\n dup7\n /* \"#utility.yul\":17309:17380 */\n tag_281\n jump\t// in\n tag_520:\n /* \"#utility.yul\":17390:17462 */\n tag_521\n /* \"#utility.yul\":17458:17460 */\n 0x20\n /* \"#utility.yul\":17447:17456 */\n dup4\n /* \"#utility.yul\":17443:17461 */\n add\n /* \"#utility.yul\":17434:17440 */\n dup6\n /* \"#utility.yul\":17390:17462 */\n tag_281\n jump\t// in\n tag_521:\n /* \"#utility.yul\":17472:17544 */\n tag_522\n /* \"#utility.yul\":17540:17542 */\n 0x40\n /* \"#utility.yul\":17529:17538 */\n dup4\n /* \"#utility.yul\":17525:17543 */\n add\n /* \"#utility.yul\":17516:17522 */\n dup5\n /* \"#utility.yul\":17472:17544 */\n tag_281\n jump\t// in\n tag_522:\n /* \"#utility.yul\":17109:17551 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220bb130f9250effb623338d0a0c315a1bcd08d8c15c5754a8191f2673314da04c464736f6c634300080b0033\n}\n", + "assembly": " /* \"main.sol\":6560:11537 contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":6768:6810 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701 */\n 0xfffffffede9001a6f7f4798ccb76ef1e7f664701\n /* \"main.sol\":6687:6811 LocalAssetExtendedErc20 public localasseterc20 =... */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":6850:6892 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701 */\n 0xfffffffede9001a6f7f4798ccb76ef1e7f664701\n /* \"main.sol\":6817:6892 address localasseterc20address = 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701 */\n 0x01\n exp(0x0100, 0x00)\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":6560:11537 contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":6560:11537 contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x84810219\n gt\n tag_28\n jumpi\n dup1\n 0xa9059cbb\n gt\n tag_29\n jumpi\n dup1\n 0xee5dc1e4\n gt\n tag_30\n jumpi\n dup1\n 0xee5dc1e4\n eq\n tag_24\n jumpi\n dup1\n 0xf0350c04\n eq\n tag_25\n jumpi\n dup1\n 0xf5bfbd8a\n eq\n tag_26\n jumpi\n dup1\n 0xf8bf8e95\n eq\n tag_27\n jumpi\n jump(tag_2)\n tag_30:\n dup1\n 0xa9059cbb\n eq\n tag_21\n jumpi\n dup1\n 0xd3ba4b9e\n eq\n tag_22\n jumpi\n dup1\n 0xdd62ed3e\n eq\n tag_23\n jumpi\n jump(tag_2)\n tag_29:\n dup1\n 0x84810219\n eq\n tag_15\n jumpi\n dup1\n 0x8d1fdf2f\n eq\n tag_16\n jumpi\n dup1\n 0x95d89b41\n eq\n tag_17\n jumpi\n dup1\n 0x9b5067e7\n eq\n tag_18\n jumpi\n dup1\n 0x9dc29fac\n eq\n tag_19\n jumpi\n dup1\n 0xa887c981\n eq\n tag_20\n jumpi\n jump(tag_2)\n tag_28:\n dup1\n 0x313ce567\n gt\n tag_31\n jumpi\n dup1\n 0x313ce567\n eq\n tag_9\n jumpi\n dup1\n 0x40c10f19\n eq\n tag_10\n jumpi\n dup1\n 0x5ea20216\n eq\n tag_11\n jumpi\n dup1\n 0x6b8751c1\n eq\n tag_12\n jumpi\n dup1\n 0x70a08231\n eq\n tag_13\n jumpi\n dup1\n 0x7eea1205\n eq\n tag_14\n jumpi\n jump(tag_2)\n tag_31:\n dup1\n 0x0131222f\n eq\n tag_3\n jumpi\n dup1\n 0x06fdde03\n eq\n tag_4\n jumpi\n dup1\n 0x095ea7b3\n eq\n tag_5\n jumpi\n dup1\n 0x18160ddd\n eq\n tag_6\n jumpi\n dup1\n 0x1cddec19\n eq\n tag_7\n jumpi\n dup1\n 0x23b872dd\n eq\n tag_8\n jumpi\n jump(tag_2)\n tag_1:\n jumpi(tag_2, calldatasize)\n stop\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":7172:7271 function get_address() public view returns (address) {... */\n tag_3:\n callvalue\n dup1\n iszero\n tag_34\n jumpi\n 0x00\n dup1\n revert\n tag_34:\n pop\n tag_35\n tag_36\n jump\t// in\n tag_35:\n mload(0x40)\n tag_37\n swap2\n swap1\n tag_38\n jump\t// in\n tag_37:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7277:7458 function name() external view override returns (string memory) {... */\n tag_4:\n callvalue\n dup1\n iszero\n tag_39\n jumpi\n 0x00\n dup1\n revert\n tag_39:\n pop\n tag_40\n tag_41\n jump\t// in\n tag_40:\n mload(0x40)\n tag_42\n swap2\n swap1\n tag_43\n jump\t// in\n tag_42:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10427:10600 function approve(address spender, uint256 value)... */\n tag_5:\n callvalue\n dup1\n iszero\n tag_44\n jumpi\n 0x00\n dup1\n revert\n tag_44:\n pop\n tag_45\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_46\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n tag_48\n jump\t// in\n tag_45:\n mload(0x40)\n tag_49\n swap2\n swap1\n tag_50\n jump\t// in\n tag_49:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7842:8031 function totalSupply() external view override returns (uint256) {... */\n tag_6:\n callvalue\n dup1\n iszero\n tag_51\n jumpi\n 0x00\n dup1\n revert\n tag_51:\n pop\n tag_52\n tag_53\n jump\t// in\n tag_52:\n mload(0x40)\n tag_54\n swap2\n swap1\n tag_55\n jump\t// in\n tag_54:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9281:9388 function thaw_asset() external override returns (bool) {... */\n tag_7:\n callvalue\n dup1\n iszero\n tag_56\n jumpi\n 0x00\n dup1\n revert\n tag_56:\n pop\n tag_57\n tag_58\n jump\t// in\n tag_57:\n mload(0x40)\n tag_59\n swap2\n swap1\n tag_50\n jump\t// in\n tag_59:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10915:11110 function transferFrom(... */\n tag_8:\n callvalue\n dup1\n iszero\n tag_60\n jumpi\n 0x00\n dup1\n revert\n tag_60:\n pop\n tag_61\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_62\n swap2\n swap1\n tag_63\n jump\t// in\n tag_62:\n tag_64\n jump\t// in\n tag_61:\n mload(0x40)\n tag_65\n swap2\n swap1\n tag_50\n jump\t// in\n tag_65:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7655:7836 function decimals() external view override returns (uint8) {... */\n tag_9:\n callvalue\n dup1\n iszero\n tag_66\n jumpi\n 0x00\n dup1\n revert\n tag_66:\n pop\n tag_67\n tag_68\n jump\t// in\n tag_67:\n mload(0x40)\n tag_69\n swap2\n swap1\n tag_70\n jump\t// in\n tag_69:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8612:8741 function mint(address to, uint256 value) external override returns (bool) {... */\n tag_10:\n callvalue\n dup1\n iszero\n tag_71\n jumpi\n 0x00\n dup1\n revert\n tag_71:\n pop\n tag_72\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_73\n swap2\n swap1\n tag_47\n jump\t// in\n tag_73:\n tag_74\n jump\t// in\n tag_72:\n mload(0x40)\n tag_75\n swap2\n swap1\n tag_50\n jump\t// in\n tag_75:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9041:9158 function thaw(address account) external override returns (bool) {... */\n tag_11:\n callvalue\n dup1\n iszero\n tag_76\n jumpi\n 0x00\n dup1\n revert\n tag_76:\n pop\n tag_77\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_78\n swap2\n swap1\n tag_79\n jump\t// in\n tag_78:\n tag_80\n jump\t// in\n tag_77:\n mload(0x40)\n tag_81\n swap2\n swap1\n tag_50\n jump\t// in\n tag_81:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9164:9275 function freeze_asset() external override returns (bool) {... */\n tag_12:\n callvalue\n dup1\n iszero\n tag_82\n jumpi\n 0x00\n dup1\n revert\n tag_82:\n pop\n tag_83\n tag_84\n jump\t// in\n tag_83:\n mload(0x40)\n tag_85\n swap2\n swap1\n tag_50\n jump\t// in\n tag_85:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8037:8236 function balanceOf(address who) external view override returns (uint256) {... */\n tag_13:\n callvalue\n dup1\n iszero\n tag_86\n jumpi\n 0x00\n dup1\n revert\n tag_86:\n pop\n tag_87\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_88\n swap2\n swap1\n tag_79\n jump\t// in\n tag_88:\n tag_89\n jump\t// in\n tag_87:\n mload(0x40)\n tag_90\n swap2\n swap1\n tag_55\n jump\t// in\n tag_90:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":11116:11535 function transferFrom_delegate(... */\n tag_14:\n callvalue\n dup1\n iszero\n tag_91\n jumpi\n 0x00\n dup1\n revert\n tag_91:\n pop\n tag_92\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_93\n swap2\n swap1\n tag_63\n jump\t// in\n tag_93:\n tag_94\n jump\t// in\n tag_92:\n mload(0x40)\n tag_95\n swap2\n swap1\n tag_50\n jump\t// in\n tag_95:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6975:7166 function set_address_interface(address instance_address) public {... */\n tag_15:\n callvalue\n dup1\n iszero\n tag_96\n jumpi\n 0x00\n dup1\n revert\n tag_96:\n pop\n tag_97\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_98\n swap2\n swap1\n tag_79\n jump\t// in\n tag_98:\n tag_99\n jump\t// in\n tag_97:\n stop\n /* \"main.sol\":8914:9035 function freeze(address account) external override returns (bool) {... */\n tag_16:\n callvalue\n dup1\n iszero\n tag_100\n jumpi\n 0x00\n dup1\n revert\n tag_100:\n pop\n tag_101\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_102\n swap2\n swap1\n tag_79\n jump\t// in\n tag_102:\n tag_103\n jump\t// in\n tag_101:\n mload(0x40)\n tag_104\n swap2\n swap1\n tag_50\n jump\t// in\n tag_104:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7464:7649 function symbol() external view override returns (string memory) {... */\n tag_17:\n callvalue\n dup1\n iszero\n tag_105\n jumpi\n 0x00\n dup1\n revert\n tag_105:\n pop\n tag_106\n tag_107\n jump\t// in\n tag_106:\n mload(0x40)\n tag_108\n swap2\n swap1\n tag_43\n jump\t// in\n tag_108:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6687:6811 LocalAssetExtendedErc20 public localasseterc20 =... */\n tag_18:\n callvalue\n dup1\n iszero\n tag_109\n jumpi\n 0x00\n dup1\n revert\n tag_109:\n pop\n tag_110\n tag_111\n jump\t// in\n tag_110:\n mload(0x40)\n tag_112\n swap2\n swap1\n tag_113\n jump\t// in\n tag_112:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8747:8908 function burn(address from, uint256 value)... */\n tag_19:\n callvalue\n dup1\n iszero\n tag_114\n jumpi\n 0x00\n dup1\n revert\n tag_114:\n pop\n tag_115\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_116\n swap2\n swap1\n tag_47\n jump\t// in\n tag_116:\n tag_117\n jump\t// in\n tag_115:\n mload(0x40)\n tag_118\n swap2\n swap1\n tag_50\n jump\t// in\n tag_118:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10126:10421 function transfer_delegate(address to, uint256 value)... */\n tag_20:\n callvalue\n dup1\n iszero\n tag_119\n jumpi\n 0x00\n dup1\n revert\n tag_119:\n pop\n tag_120\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_121\n swap2\n swap1\n tag_47\n jump\t// in\n tag_121:\n tag_122\n jump\t// in\n tag_120:\n mload(0x40)\n tag_123\n swap2\n swap1\n tag_50\n jump\t// in\n tag_123:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8441:8606 function transfer(address to, uint256 value)... */\n tag_21:\n callvalue\n dup1\n iszero\n tag_124\n jumpi\n 0x00\n dup1\n revert\n tag_124:\n pop\n tag_125\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_126\n swap2\n swap1\n tag_47\n jump\t// in\n tag_126:\n tag_127\n jump\t// in\n tag_125:\n mload(0x40)\n tag_128\n swap2\n swap1\n tag_50\n jump\t// in\n tag_128:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10005:10120 function clear_metadata() external override returns (bool) {... */\n tag_22:\n callvalue\n dup1\n iszero\n tag_129\n jumpi\n 0x00\n dup1\n revert\n tag_129:\n pop\n tag_130\n tag_131\n jump\t// in\n tag_130:\n mload(0x40)\n tag_132\n swap2\n swap1\n tag_50\n jump\t// in\n tag_132:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":8242:8435 function allowance(address owner, address spender)... */\n tag_23:\n callvalue\n dup1\n iszero\n tag_133\n jumpi\n 0x00\n dup1\n revert\n tag_133:\n pop\n tag_134\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_135\n swap2\n swap1\n tag_136\n jump\t// in\n tag_135:\n tag_137\n jump\t// in\n tag_134:\n mload(0x40)\n tag_138\n swap2\n swap1\n tag_55\n jump\t// in\n tag_138:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9776:9999 function set_metadata(... */\n tag_24:\n callvalue\n dup1\n iszero\n tag_139\n jumpi\n 0x00\n dup1\n revert\n tag_139:\n pop\n tag_140\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_141\n swap2\n swap1\n tag_142\n jump\t// in\n tag_141:\n tag_143\n jump\t// in\n tag_140:\n mload(0x40)\n tag_144\n swap2\n swap1\n tag_50\n jump\t// in\n tag_144:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9394:9563 function transfer_ownership(address owner)... */\n tag_25:\n callvalue\n dup1\n iszero\n tag_145\n jumpi\n 0x00\n dup1\n revert\n tag_145:\n pop\n tag_146\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_147\n swap2\n swap1\n tag_79\n jump\t// in\n tag_147:\n tag_148\n jump\t// in\n tag_146:\n mload(0x40)\n tag_149\n swap2\n swap1\n tag_50\n jump\t// in\n tag_149:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10606:10909 function approve_delegate(address spender, uint256 value)... */\n tag_26:\n callvalue\n dup1\n iszero\n tag_150\n jumpi\n 0x00\n dup1\n revert\n tag_150:\n pop\n tag_151\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_152\n swap2\n swap1\n tag_47\n jump\t// in\n tag_152:\n tag_153\n jump\t// in\n tag_151:\n mload(0x40)\n tag_154\n swap2\n swap1\n tag_50\n jump\t// in\n tag_154:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":9569:9770 function set_team(... */\n tag_27:\n callvalue\n dup1\n iszero\n tag_155\n jumpi\n 0x00\n dup1\n revert\n tag_155:\n pop\n tag_156\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_157\n swap2\n swap1\n tag_158\n jump\t// in\n tag_157:\n tag_159\n jump\t// in\n tag_156:\n mload(0x40)\n tag_160\n swap2\n swap1\n tag_50\n jump\t// in\n tag_160:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":7172:7271 function get_address() public view returns (address) {... */\n tag_36:\n /* \"main.sol\":7216:7223 address */\n 0x00\n /* \"main.sol\":7242:7264 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7235:7264 return localasseterc20address */\n swap1\n pop\n /* \"main.sol\":7172:7271 function get_address() public view returns (address) {... */\n swap1\n jump\t// out\n /* \"main.sol\":7277:7458 function name() external view override returns (string memory) {... */\n tag_41:\n /* \"main.sol\":7325:7338 string memory */\n 0x60\n /* \"main.sol\":7429:7444 localasseterc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7429:7449 localasseterc20.name */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x06fdde03\n /* \"main.sol\":7429:7451 localasseterc20.name() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_164\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_164:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_165\n swap2\n swap1\n tag_166\n jump\t// in\n tag_165:\n /* \"main.sol\":7422:7451 return localasseterc20.name() */\n swap1\n pop\n /* \"main.sol\":7277:7458 function name() external view override returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":10427:10600 function approve(address spender, uint256 value)... */\n tag_48:\n /* \"main.sol\":10527:10531 bool */\n 0x00\n /* \"main.sol\":10554:10569 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10554:10577 localasseterc20.approve */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x095ea7b3\n /* \"main.sol\":10578:10585 spender */\n dup5\n /* \"main.sol\":10587:10592 value */\n dup5\n /* \"main.sol\":10554:10593 localasseterc20.approve(spender, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_168\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_168:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_171\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_171:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_172\n swap2\n swap1\n tag_173\n jump\t// in\n tag_172:\n /* \"main.sol\":10547:10593 return localasseterc20.approve(spender, value) */\n swap1\n pop\n /* \"main.sol\":10427:10600 function approve(address spender, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":7842:8031 function totalSupply() external view override returns (uint256) {... */\n tag_53:\n /* \"main.sol\":7897:7904 uint256 */\n 0x00\n /* \"main.sol\":7995:8010 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7995:8022 localasseterc20.totalSupply */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x18160ddd\n /* \"main.sol\":7995:8024 localasseterc20.totalSupply() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_176\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_176:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_177\n swap2\n swap1\n tag_178\n jump\t// in\n tag_177:\n /* \"main.sol\":7988:8024 return localasseterc20.totalSupply() */\n swap1\n pop\n /* \"main.sol\":7842:8031 function totalSupply() external view override returns (uint256) {... */\n swap1\n jump\t// out\n /* \"main.sol\":9281:9388 function thaw_asset() external override returns (bool) {... */\n tag_58:\n /* \"main.sol\":9330:9334 bool */\n 0x00\n /* \"main.sol\":9353:9368 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9353:9379 localasseterc20.thaw_asset */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x1cddec19\n /* \"main.sol\":9353:9381 localasseterc20.thaw_asset() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_181\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_181:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_182\n swap2\n swap1\n tag_173\n jump\t// in\n tag_182:\n /* \"main.sol\":9346:9381 return localasseterc20.thaw_asset() */\n swap1\n pop\n /* \"main.sol\":9281:9388 function thaw_asset() external override returns (bool) {... */\n swap1\n jump\t// out\n /* \"main.sol\":10915:11110 function transferFrom(... */\n tag_64:\n /* \"main.sol\":11035:11039 bool */\n 0x00\n /* \"main.sol\":11058:11073 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11058:11086 localasseterc20.transferFrom */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x23b872dd\n /* \"main.sol\":11087:11091 from */\n dup6\n /* \"main.sol\":11093:11095 to */\n dup6\n /* \"main.sol\":11097:11102 value */\n dup6\n /* \"main.sol\":11058:11103 localasseterc20.transferFrom(from, to, value) */\n mload(0x40)\n dup5\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_184\n swap4\n swap3\n swap2\n swap1\n tag_185\n jump\t// in\n tag_184:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_187\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_187:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_188\n swap2\n swap1\n tag_173\n jump\t// in\n tag_188:\n /* \"main.sol\":11051:11103 return localasseterc20.transferFrom(from, to, value) */\n swap1\n pop\n /* \"main.sol\":10915:11110 function transferFrom(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":7655:7836 function decimals() external view override returns (uint8) {... */\n tag_68:\n /* \"main.sol\":7707:7712 uint8 */\n 0x00\n /* \"main.sol\":7803:7818 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7803:7827 localasseterc20.decimals */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x313ce567\n /* \"main.sol\":7803:7829 localasseterc20.decimals() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_191\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_191:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_192\n swap2\n swap1\n tag_193\n jump\t// in\n tag_192:\n /* \"main.sol\":7796:7829 return localasseterc20.decimals() */\n swap1\n pop\n /* \"main.sol\":7655:7836 function decimals() external view override returns (uint8) {... */\n swap1\n jump\t// out\n /* \"main.sol\":8612:8741 function mint(address to, uint256 value) external override returns (bool) {... */\n tag_74:\n /* \"main.sol\":8680:8684 bool */\n 0x00\n /* \"main.sol\":8703:8718 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8703:8723 localasseterc20.mint */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x40c10f19\n /* \"main.sol\":8724:8726 to */\n dup5\n /* \"main.sol\":8728:8733 value */\n dup5\n /* \"main.sol\":8703:8734 localasseterc20.mint(to, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_195\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_195:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_197\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_197:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_198\n swap2\n swap1\n tag_173\n jump\t// in\n tag_198:\n /* \"main.sol\":8696:8734 return localasseterc20.mint(to, value) */\n swap1\n pop\n /* \"main.sol\":8612:8741 function mint(address to, uint256 value) external override returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":9041:9158 function thaw(address account) external override returns (bool) {... */\n tag_80:\n /* \"main.sol\":9099:9103 bool */\n 0x00\n /* \"main.sol\":9122:9137 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9122:9142 localasseterc20.thaw */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x5ea20216\n /* \"main.sol\":9143:9150 account */\n dup4\n /* \"main.sol\":9122:9151 localasseterc20.thaw(account) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_200\n swap2\n swap1\n tag_38\n jump\t// in\n tag_200:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_202\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_202:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_203\n swap2\n swap1\n tag_173\n jump\t// in\n tag_203:\n /* \"main.sol\":9115:9151 return localasseterc20.thaw(account) */\n swap1\n pop\n /* \"main.sol\":9041:9158 function thaw(address account) external override returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":9164:9275 function freeze_asset() external override returns (bool) {... */\n tag_84:\n /* \"main.sol\":9215:9219 bool */\n 0x00\n /* \"main.sol\":9238:9253 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9238:9266 localasseterc20.freeze_asset */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x6b8751c1\n /* \"main.sol\":9238:9268 localasseterc20.freeze_asset() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_206\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_206:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_207\n swap2\n swap1\n tag_173\n jump\t// in\n tag_207:\n /* \"main.sol\":9231:9268 return localasseterc20.freeze_asset() */\n swap1\n pop\n /* \"main.sol\":9164:9275 function freeze_asset() external override returns (bool) {... */\n swap1\n jump\t// out\n /* \"main.sol\":8037:8236 function balanceOf(address who) external view override returns (uint256) {... */\n tag_89:\n /* \"main.sol\":8101:8108 uint256 */\n 0x00\n /* \"main.sol\":8199:8214 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8199:8224 localasseterc20.balanceOf */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x70a08231\n /* \"main.sol\":8225:8228 who */\n dup4\n /* \"main.sol\":8199:8229 localasseterc20.balanceOf(who) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_209\n swap2\n swap1\n tag_38\n jump\t// in\n tag_209:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_211\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_211:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_212\n swap2\n swap1\n tag_178\n jump\t// in\n tag_212:\n /* \"main.sol\":8192:8229 return localasseterc20.balanceOf(who) */\n swap1\n pop\n /* \"main.sol\":8037:8236 function balanceOf(address who) external view override returns (uint256) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":11116:11535 function transferFrom_delegate(... */\n tag_94:\n /* \"main.sol\":11236:11240 bool */\n 0x00\n /* \"main.sol\":11253:11264 bool result */\n dup1\n /* \"main.sol\":11266:11283 bytes memory data */\n 0x00\n /* \"main.sol\":11287:11309 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11287:11322 localasseterc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11434:11438 from */\n dup7\n /* \"main.sol\":11456:11458 to */\n dup7\n /* \"main.sol\":11476:11481 value */\n dup7\n /* \"main.sol\":11336:11495 abi.encodeWithSignature(... */\n add(0x24, mload(0x40))\n tag_214\n swap4\n swap3\n swap2\n swap1\n tag_185\n jump\t// in\n tag_214:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x23b872dd00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":11287:11505 localasseterc20address.delegatecall(... */\n mload(0x40)\n tag_215\n swap2\n swap1\n tag_216\n jump\t// in\n tag_215:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_219\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_218)\n tag_219:\n 0x60\n swap2\n pop\n tag_218:\n pop\n /* \"main.sol\":11252:11505 (bool result, bytes memory data) = localasseterc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":11522:11528 result */\n dup2\n /* \"main.sol\":11515:11528 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":11116:11535 function transferFrom_delegate(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":6975:7166 function set_address_interface(address instance_address) public {... */\n tag_99:\n /* \"main.sol\":7091:7107 instance_address */\n dup1\n /* \"main.sol\":7049:7064 localasseterc20 */\n 0x00\n dup1\n /* \"main.sol\":7049:7108 localasseterc20 = LocalAssetExtendedErc20(instance_address) */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":7143:7159 instance_address */\n dup1\n /* \"main.sol\":7118:7140 localasseterc20address */\n 0x01\n 0x00\n /* \"main.sol\":7118:7159 localasseterc20address = instance_address */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":6975:7166 function set_address_interface(address instance_address) public {... */\n pop\n jump\t// out\n /* \"main.sol\":8914:9035 function freeze(address account) external override returns (bool) {... */\n tag_103:\n /* \"main.sol\":8974:8978 bool */\n 0x00\n /* \"main.sol\":8997:9012 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8997:9019 localasseterc20.freeze */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x8d1fdf2f\n /* \"main.sol\":9020:9027 account */\n dup4\n /* \"main.sol\":8997:9028 localasseterc20.freeze(account) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_222\n swap2\n swap1\n tag_38\n jump\t// in\n tag_222:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_224\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_224:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_225\n swap2\n swap1\n tag_173\n jump\t// in\n tag_225:\n /* \"main.sol\":8990:9028 return localasseterc20.freeze(account) */\n swap1\n pop\n /* \"main.sol\":8914:9035 function freeze(address account) external override returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":7464:7649 function symbol() external view override returns (string memory) {... */\n tag_107:\n /* \"main.sol\":7514:7527 string memory */\n 0x60\n /* \"main.sol\":7618:7633 localasseterc20 */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7618:7640 localasseterc20.symbol */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x95d89b41\n /* \"main.sol\":7618:7642 localasseterc20.symbol() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_228\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_228:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n 0x00\n dup3\n returndatacopy\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_229\n swap2\n swap1\n tag_166\n jump\t// in\n tag_229:\n /* \"main.sol\":7611:7642 return localasseterc20.symbol() */\n swap1\n pop\n /* \"main.sol\":7464:7649 function symbol() external view override returns (string memory) {... */\n swap1\n jump\t// out\n /* \"main.sol\":6687:6811 LocalAssetExtendedErc20 public localasseterc20 =... */\n tag_111:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":8747:8908 function burn(address from, uint256 value)... */\n tag_117:\n /* \"main.sol\":8841:8845 bool */\n 0x00\n /* \"main.sol\":8868:8883 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8868:8888 localasseterc20.burn */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x9dc29fac\n /* \"main.sol\":8889:8893 from */\n dup5\n /* \"main.sol\":8895:8900 value */\n dup5\n /* \"main.sol\":8868:8901 localasseterc20.burn(from, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_231\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_231:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_233\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_233:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_234\n swap2\n swap1\n tag_173\n jump\t// in\n tag_234:\n /* \"main.sol\":8861:8901 return localasseterc20.burn(from, value) */\n swap1\n pop\n /* \"main.sol\":8747:8908 function burn(address from, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":10126:10421 function transfer_delegate(address to, uint256 value)... */\n tag_122:\n /* \"main.sol\":10214:10218 bool */\n 0x00\n /* \"main.sol\":10235:10246 bool result */\n dup1\n /* \"main.sol\":10248:10265 bytes memory data */\n 0x00\n /* \"main.sol\":10269:10291 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10269:10304 localasseterc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10371:10373 to */\n dup6\n /* \"main.sol\":10375:10380 value */\n dup6\n /* \"main.sol\":10318:10381 abi.encodeWithSignature(\"transfer(address,uint256)\", to, value) */\n add(0x24, mload(0x40))\n tag_236\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_236:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0xa9059cbb00000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":10269:10391 localasseterc20address.delegatecall(... */\n mload(0x40)\n tag_237\n swap2\n swap1\n tag_216\n jump\t// in\n tag_237:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_240\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_239)\n tag_240:\n 0x60\n swap2\n pop\n tag_239:\n pop\n /* \"main.sol\":10234:10391 (bool result, bytes memory data) = localasseterc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":10408:10414 result */\n dup2\n /* \"main.sol\":10401:10414 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":10126:10421 function transfer_delegate(address to, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":8441:8606 function transfer(address to, uint256 value)... */\n tag_127:\n /* \"main.sol\":8537:8541 bool */\n 0x00\n /* \"main.sol\":8564:8579 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8564:8588 localasseterc20.transfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa9059cbb\n /* \"main.sol\":8589:8591 to */\n dup5\n /* \"main.sol\":8593:8598 value */\n dup5\n /* \"main.sol\":8564:8599 localasseterc20.transfer(to, value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_242\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_242:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_244\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_244:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_245\n swap2\n swap1\n tag_173\n jump\t// in\n tag_245:\n /* \"main.sol\":8557:8599 return localasseterc20.transfer(to, value) */\n swap1\n pop\n /* \"main.sol\":8441:8606 function transfer(address to, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":10005:10120 function clear_metadata() external override returns (bool) {... */\n tag_131:\n /* \"main.sol\":10058:10062 bool */\n 0x00\n /* \"main.sol\":10081:10096 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10081:10111 localasseterc20.clear_metadata */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xd3ba4b9e\n /* \"main.sol\":10081:10113 localasseterc20.clear_metadata() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_248\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_248:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_249\n swap2\n swap1\n tag_173\n jump\t// in\n tag_249:\n /* \"main.sol\":10074:10113 return localasseterc20.clear_metadata() */\n swap1\n pop\n /* \"main.sol\":10005:10120 function clear_metadata() external override returns (bool) {... */\n swap1\n jump\t// out\n /* \"main.sol\":8242:8435 function allowance(address owner, address spender)... */\n tag_137:\n /* \"main.sol\":8357:8364 uint256 */\n 0x00\n /* \"main.sol\":8387:8402 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8387:8412 localasseterc20.allowance */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xdd62ed3e\n /* \"main.sol\":8413:8418 owner */\n dup5\n /* \"main.sol\":8420:8427 spender */\n dup5\n /* \"main.sol\":8387:8428 localasseterc20.allowance(owner, spender) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_251\n swap3\n swap2\n swap1\n tag_252\n jump\t// in\n tag_251:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_254\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_254:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_255\n swap2\n swap1\n tag_178\n jump\t// in\n tag_255:\n /* \"main.sol\":8380:8428 return localasseterc20.allowance(owner, spender) */\n swap1\n pop\n /* \"main.sol\":8242:8435 function allowance(address owner, address spender)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":9776:9999 function set_metadata(... */\n tag_143:\n /* \"main.sol\":9917:9921 bool */\n 0x00\n /* \"main.sol\":9940:9955 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9940:9968 localasseterc20.set_metadata */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xee5dc1e4\n /* \"main.sol\":9969:9973 name */\n dup8\n dup8\n /* \"main.sol\":9975:9981 symbol */\n dup8\n dup8\n /* \"main.sol\":9983:9991 decimals */\n dup8\n /* \"main.sol\":9940:9992 localasseterc20.set_metadata(name, symbol, decimals) */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_257\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_258\n jump\t// in\n tag_257:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_260\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_260:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_261\n swap2\n swap1\n tag_173\n jump\t// in\n tag_261:\n /* \"main.sol\":9933:9992 return localasseterc20.set_metadata(name, symbol, decimals) */\n swap1\n pop\n /* \"main.sol\":9776:9999 function set_metadata(... */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":9394:9563 function transfer_ownership(address owner)... */\n tag_148:\n /* \"main.sol\":9488:9492 bool */\n 0x00\n /* \"main.sol\":9515:9530 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9515:9549 localasseterc20.transfer_ownership */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xf0350c04\n /* \"main.sol\":9550:9555 owner */\n dup4\n /* \"main.sol\":9515:9556 localasseterc20.transfer_ownership(owner) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_263\n swap2\n swap1\n tag_38\n jump\t// in\n tag_263:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_265\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_265:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_266\n swap2\n swap1\n tag_173\n jump\t// in\n tag_266:\n /* \"main.sol\":9508:9556 return localasseterc20.transfer_ownership(owner) */\n swap1\n pop\n /* \"main.sol\":9394:9563 function transfer_ownership(address owner)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":10606:10909 function approve_delegate(address spender, uint256 value)... */\n tag_153:\n /* \"main.sol\":10698:10702 bool */\n 0x00\n /* \"main.sol\":10719:10730 bool result */\n dup1\n /* \"main.sol\":10732:10749 bytes memory data */\n 0x00\n /* \"main.sol\":10753:10775 localasseterc20address */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10753:10788 localasseterc20address.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10854:10861 spender */\n dup6\n /* \"main.sol\":10863:10868 value */\n dup6\n /* \"main.sol\":10802:10869 abi.encodeWithSignature(\"approve(address,uint256)\", spender, value) */\n add(0x24, mload(0x40))\n tag_268\n swap3\n swap2\n swap1\n tag_169\n jump\t// in\n tag_268:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n and(not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff), 0x095ea7b300000000000000000000000000000000000000000000000000000000)\n 0x20\n dup3\n add\n dup1\n mload\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n dup4\n dup2\n dup4\n and\n or\n dup4\n mstore\n pop\n pop\n pop\n pop\n /* \"main.sol\":10753:10879 localasseterc20address.delegatecall(... */\n mload(0x40)\n tag_269\n swap2\n swap1\n tag_216\n jump\t// in\n tag_269:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_272\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_271)\n tag_272:\n 0x60\n swap2\n pop\n tag_271:\n pop\n /* \"main.sol\":10718:10879 (bool result, bytes memory data) = localasseterc20address.delegatecall(... */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":10896:10902 result */\n dup2\n /* \"main.sol\":10889:10902 return result */\n swap3\n pop\n pop\n pop\n /* \"main.sol\":10606:10909 function approve_delegate(address spender, uint256 value)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":9569:9770 function set_team(... */\n tag_159:\n /* \"main.sol\":9692:9696 bool */\n 0x00\n /* \"main.sol\":9715:9730 localasseterc20 */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9715:9739 localasseterc20.set_team */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xf8bf8e95\n /* \"main.sol\":9740:9746 issuer */\n dup6\n /* \"main.sol\":9748:9753 admin */\n dup6\n /* \"main.sol\":9755:9762 freezer */\n dup6\n /* \"main.sol\":9715:9763 localasseterc20.set_team(issuer, admin, freezer) */\n mload(0x40)\n dup5\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_274\n swap4\n swap3\n swap2\n swap1\n tag_275\n jump\t// in\n tag_274:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_277\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_277:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_278\n swap2\n swap1\n tag_173\n jump\t// in\n tag_278:\n /* \"main.sol\":9708:9763 return localasseterc20.set_team(issuer, admin, freezer) */\n swap1\n pop\n /* \"main.sol\":9569:9770 function set_team(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:133 */\n tag_279:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":84:126 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":77:82 */\n dup3\n /* \"#utility.yul\":73:127 */\n and\n /* \"#utility.yul\":62:127 */\n swap1\n pop\n /* \"#utility.yul\":7:133 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":139:235 */\n tag_280:\n /* \"#utility.yul\":176:183 */\n 0x00\n /* \"#utility.yul\":205:229 */\n tag_330\n /* \"#utility.yul\":223:228 */\n dup3\n /* \"#utility.yul\":205:229 */\n tag_279\n jump\t// in\n tag_330:\n /* \"#utility.yul\":194:229 */\n swap1\n pop\n /* \"#utility.yul\":139:235 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":241:359 */\n tag_281:\n /* \"#utility.yul\":328:352 */\n tag_332\n /* \"#utility.yul\":346:351 */\n dup2\n /* \"#utility.yul\":328:352 */\n tag_280\n jump\t// in\n tag_332:\n /* \"#utility.yul\":323:326 */\n dup3\n /* \"#utility.yul\":316:353 */\n mstore\n /* \"#utility.yul\":241:359 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":365:587 */\n tag_38:\n /* \"#utility.yul\":458:462 */\n 0x00\n /* \"#utility.yul\":496:498 */\n 0x20\n /* \"#utility.yul\":485:494 */\n dup3\n /* \"#utility.yul\":481:499 */\n add\n /* \"#utility.yul\":473:499 */\n swap1\n pop\n /* \"#utility.yul\":509:580 */\n tag_334\n /* \"#utility.yul\":577:578 */\n 0x00\n /* \"#utility.yul\":566:575 */\n dup4\n /* \"#utility.yul\":562:579 */\n add\n /* \"#utility.yul\":553:559 */\n dup5\n /* \"#utility.yul\":509:580 */\n tag_281\n jump\t// in\n tag_334:\n /* \"#utility.yul\":365:587 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":593:692 */\n tag_282:\n /* \"#utility.yul\":645:651 */\n 0x00\n /* \"#utility.yul\":679:684 */\n dup2\n /* \"#utility.yul\":673:685 */\n mload\n /* \"#utility.yul\":663:685 */\n swap1\n pop\n /* \"#utility.yul\":593:692 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":698:867 */\n tag_283:\n /* \"#utility.yul\":782:793 */\n 0x00\n /* \"#utility.yul\":816:822 */\n dup3\n /* \"#utility.yul\":811:814 */\n dup3\n /* \"#utility.yul\":804:823 */\n mstore\n /* \"#utility.yul\":856:860 */\n 0x20\n /* \"#utility.yul\":851:854 */\n dup3\n /* \"#utility.yul\":847:861 */\n add\n /* \"#utility.yul\":832:861 */\n swap1\n pop\n /* \"#utility.yul\":698:867 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":873:1180 */\n tag_284:\n /* \"#utility.yul\":941:942 */\n 0x00\n /* \"#utility.yul\":951:1064 */\n tag_338:\n /* \"#utility.yul\":965:971 */\n dup4\n /* \"#utility.yul\":962:963 */\n dup2\n /* \"#utility.yul\":959:972 */\n lt\n /* \"#utility.yul\":951:1064 */\n iszero\n tag_340\n jumpi\n /* \"#utility.yul\":1050:1051 */\n dup1\n /* \"#utility.yul\":1045:1048 */\n dup3\n /* \"#utility.yul\":1041:1052 */\n add\n /* \"#utility.yul\":1035:1053 */\n mload\n /* \"#utility.yul\":1031:1032 */\n dup2\n /* \"#utility.yul\":1026:1029 */\n dup5\n /* \"#utility.yul\":1022:1033 */\n add\n /* \"#utility.yul\":1015:1054 */\n mstore\n /* \"#utility.yul\":987:989 */\n 0x20\n /* \"#utility.yul\":984:985 */\n dup2\n /* \"#utility.yul\":980:990 */\n add\n /* \"#utility.yul\":975:990 */\n swap1\n pop\n /* \"#utility.yul\":951:1064 */\n jump(tag_338)\n tag_340:\n /* \"#utility.yul\":1082:1088 */\n dup4\n /* \"#utility.yul\":1079:1080 */\n dup2\n /* \"#utility.yul\":1076:1089 */\n gt\n /* \"#utility.yul\":1073:1174 */\n iszero\n tag_341\n jumpi\n /* \"#utility.yul\":1162:1163 */\n 0x00\n /* \"#utility.yul\":1153:1159 */\n dup5\n /* \"#utility.yul\":1148:1151 */\n dup5\n /* \"#utility.yul\":1144:1160 */\n add\n /* \"#utility.yul\":1137:1164 */\n mstore\n /* \"#utility.yul\":1073:1174 */\n tag_341:\n /* \"#utility.yul\":922:1180 */\n pop\n /* \"#utility.yul\":873:1180 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1186:1288 */\n tag_285:\n /* \"#utility.yul\":1227:1233 */\n 0x00\n /* \"#utility.yul\":1278:1280 */\n 0x1f\n /* \"#utility.yul\":1274:1281 */\n not\n /* \"#utility.yul\":1269:1271 */\n 0x1f\n /* \"#utility.yul\":1262:1267 */\n dup4\n /* \"#utility.yul\":1258:1272 */\n add\n /* \"#utility.yul\":1254:1282 */\n and\n /* \"#utility.yul\":1244:1282 */\n swap1\n pop\n /* \"#utility.yul\":1186:1288 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1294:1658 */\n tag_286:\n /* \"#utility.yul\":1382:1385 */\n 0x00\n /* \"#utility.yul\":1410:1449 */\n tag_344\n /* \"#utility.yul\":1443:1448 */\n dup3\n /* \"#utility.yul\":1410:1449 */\n tag_282\n jump\t// in\n tag_344:\n /* \"#utility.yul\":1465:1536 */\n tag_345\n /* \"#utility.yul\":1529:1535 */\n dup2\n /* \"#utility.yul\":1524:1527 */\n dup6\n /* \"#utility.yul\":1465:1536 */\n tag_283\n jump\t// in\n tag_345:\n /* \"#utility.yul\":1458:1536 */\n swap4\n pop\n /* \"#utility.yul\":1545:1597 */\n tag_346\n /* \"#utility.yul\":1590:1596 */\n dup2\n /* \"#utility.yul\":1585:1588 */\n dup6\n /* \"#utility.yul\":1578:1582 */\n 0x20\n /* \"#utility.yul\":1571:1576 */\n dup7\n /* \"#utility.yul\":1567:1583 */\n add\n /* \"#utility.yul\":1545:1597 */\n tag_284\n jump\t// in\n tag_346:\n /* \"#utility.yul\":1622:1651 */\n tag_347\n /* \"#utility.yul\":1644:1650 */\n dup2\n /* \"#utility.yul\":1622:1651 */\n tag_285\n jump\t// in\n tag_347:\n /* \"#utility.yul\":1617:1620 */\n dup5\n /* \"#utility.yul\":1613:1652 */\n add\n /* \"#utility.yul\":1606:1652 */\n swap2\n pop\n /* \"#utility.yul\":1386:1658 */\n pop\n /* \"#utility.yul\":1294:1658 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1664:1977 */\n tag_43:\n /* \"#utility.yul\":1777:1781 */\n 0x00\n /* \"#utility.yul\":1815:1817 */\n 0x20\n /* \"#utility.yul\":1804:1813 */\n dup3\n /* \"#utility.yul\":1800:1818 */\n add\n /* \"#utility.yul\":1792:1818 */\n swap1\n pop\n /* \"#utility.yul\":1864:1873 */\n dup2\n /* \"#utility.yul\":1858:1862 */\n dup2\n /* \"#utility.yul\":1854:1874 */\n sub\n /* \"#utility.yul\":1850:1851 */\n 0x00\n /* \"#utility.yul\":1839:1848 */\n dup4\n /* \"#utility.yul\":1835:1852 */\n add\n /* \"#utility.yul\":1828:1875 */\n mstore\n /* \"#utility.yul\":1892:1970 */\n tag_349\n /* \"#utility.yul\":1965:1969 */\n dup2\n /* \"#utility.yul\":1956:1962 */\n dup5\n /* \"#utility.yul\":1892:1970 */\n tag_286\n jump\t// in\n tag_349:\n /* \"#utility.yul\":1884:1970 */\n swap1\n pop\n /* \"#utility.yul\":1664:1977 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1983:2058 */\n tag_287:\n /* \"#utility.yul\":2016:2022 */\n 0x00\n /* \"#utility.yul\":2049:2051 */\n 0x40\n /* \"#utility.yul\":2043:2052 */\n mload\n /* \"#utility.yul\":2033:2052 */\n swap1\n pop\n /* \"#utility.yul\":1983:2058 */\n swap1\n jump\t// out\n /* \"#utility.yul\":2064:2181 */\n tag_288:\n /* \"#utility.yul\":2173:2174 */\n 0x00\n /* \"#utility.yul\":2170:2171 */\n dup1\n /* \"#utility.yul\":2163:2175 */\n revert\n /* \"#utility.yul\":2187:2304 */\n tag_289:\n /* \"#utility.yul\":2296:2297 */\n 0x00\n /* \"#utility.yul\":2293:2294 */\n dup1\n /* \"#utility.yul\":2286:2298 */\n revert\n /* \"#utility.yul\":2310:2432 */\n tag_290:\n /* \"#utility.yul\":2383:2407 */\n tag_354\n /* \"#utility.yul\":2401:2406 */\n dup2\n /* \"#utility.yul\":2383:2407 */\n tag_280\n jump\t// in\n tag_354:\n /* \"#utility.yul\":2376:2381 */\n dup2\n /* \"#utility.yul\":2373:2408 */\n eq\n /* \"#utility.yul\":2363:2426 */\n tag_355\n jumpi\n /* \"#utility.yul\":2422:2423 */\n 0x00\n /* \"#utility.yul\":2419:2420 */\n dup1\n /* \"#utility.yul\":2412:2424 */\n revert\n /* \"#utility.yul\":2363:2426 */\n tag_355:\n /* \"#utility.yul\":2310:2432 */\n pop\n jump\t// out\n /* \"#utility.yul\":2438:2577 */\n tag_291:\n /* \"#utility.yul\":2484:2489 */\n 0x00\n /* \"#utility.yul\":2522:2528 */\n dup2\n /* \"#utility.yul\":2509:2529 */\n calldataload\n /* \"#utility.yul\":2500:2529 */\n swap1\n pop\n /* \"#utility.yul\":2538:2571 */\n tag_357\n /* \"#utility.yul\":2565:2570 */\n dup2\n /* \"#utility.yul\":2538:2571 */\n tag_290\n jump\t// in\n tag_357:\n /* \"#utility.yul\":2438:2577 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2583:2660 */\n tag_292:\n /* \"#utility.yul\":2620:2627 */\n 0x00\n /* \"#utility.yul\":2649:2654 */\n dup2\n /* \"#utility.yul\":2638:2654 */\n swap1\n pop\n /* \"#utility.yul\":2583:2660 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2666:2788 */\n tag_293:\n /* \"#utility.yul\":2739:2763 */\n tag_360\n /* \"#utility.yul\":2757:2762 */\n dup2\n /* \"#utility.yul\":2739:2763 */\n tag_292\n jump\t// in\n tag_360:\n /* \"#utility.yul\":2732:2737 */\n dup2\n /* \"#utility.yul\":2729:2764 */\n eq\n /* \"#utility.yul\":2719:2782 */\n tag_361\n jumpi\n /* \"#utility.yul\":2778:2779 */\n 0x00\n /* \"#utility.yul\":2775:2776 */\n dup1\n /* \"#utility.yul\":2768:2780 */\n revert\n /* \"#utility.yul\":2719:2782 */\n tag_361:\n /* \"#utility.yul\":2666:2788 */\n pop\n jump\t// out\n /* \"#utility.yul\":2794:2933 */\n tag_294:\n /* \"#utility.yul\":2840:2845 */\n 0x00\n /* \"#utility.yul\":2878:2884 */\n dup2\n /* \"#utility.yul\":2865:2885 */\n calldataload\n /* \"#utility.yul\":2856:2885 */\n swap1\n pop\n /* \"#utility.yul\":2894:2927 */\n tag_363\n /* \"#utility.yul\":2921:2926 */\n dup2\n /* \"#utility.yul\":2894:2927 */\n tag_293\n jump\t// in\n tag_363:\n /* \"#utility.yul\":2794:2933 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2939:3413 */\n tag_47:\n /* \"#utility.yul\":3007:3013 */\n 0x00\n /* \"#utility.yul\":3015:3021 */\n dup1\n /* \"#utility.yul\":3064:3066 */\n 0x40\n /* \"#utility.yul\":3052:3061 */\n dup4\n /* \"#utility.yul\":3043:3050 */\n dup6\n /* \"#utility.yul\":3039:3062 */\n sub\n /* \"#utility.yul\":3035:3067 */\n slt\n /* \"#utility.yul\":3032:3151 */\n iszero\n tag_365\n jumpi\n /* \"#utility.yul\":3070:3149 */\n tag_366\n tag_288\n jump\t// in\n tag_366:\n /* \"#utility.yul\":3032:3151 */\n tag_365:\n /* \"#utility.yul\":3190:3191 */\n 0x00\n /* \"#utility.yul\":3215:3268 */\n tag_367\n /* \"#utility.yul\":3260:3267 */\n dup6\n /* \"#utility.yul\":3251:3257 */\n dup3\n /* \"#utility.yul\":3240:3249 */\n dup7\n /* \"#utility.yul\":3236:3258 */\n add\n /* \"#utility.yul\":3215:3268 */\n tag_291\n jump\t// in\n tag_367:\n /* \"#utility.yul\":3205:3268 */\n swap3\n pop\n /* \"#utility.yul\":3161:3278 */\n pop\n /* \"#utility.yul\":3317:3319 */\n 0x20\n /* \"#utility.yul\":3343:3396 */\n tag_368\n /* \"#utility.yul\":3388:3395 */\n dup6\n /* \"#utility.yul\":3379:3385 */\n dup3\n /* \"#utility.yul\":3368:3377 */\n dup7\n /* \"#utility.yul\":3364:3386 */\n add\n /* \"#utility.yul\":3343:3396 */\n tag_294\n jump\t// in\n tag_368:\n /* \"#utility.yul\":3333:3396 */\n swap2\n pop\n /* \"#utility.yul\":3288:3406 */\n pop\n /* \"#utility.yul\":2939:3413 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3419:3509 */\n tag_295:\n /* \"#utility.yul\":3453:3460 */\n 0x00\n /* \"#utility.yul\":3496:3501 */\n dup2\n /* \"#utility.yul\":3489:3502 */\n iszero\n /* \"#utility.yul\":3482:3503 */\n iszero\n /* \"#utility.yul\":3471:3503 */\n swap1\n pop\n /* \"#utility.yul\":3419:3509 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3515:3624 */\n tag_296:\n /* \"#utility.yul\":3596:3617 */\n tag_371\n /* \"#utility.yul\":3611:3616 */\n dup2\n /* \"#utility.yul\":3596:3617 */\n tag_295\n jump\t// in\n tag_371:\n /* \"#utility.yul\":3591:3594 */\n dup3\n /* \"#utility.yul\":3584:3618 */\n mstore\n /* \"#utility.yul\":3515:3624 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3630:3840 */\n tag_50:\n /* \"#utility.yul\":3717:3721 */\n 0x00\n /* \"#utility.yul\":3755:3757 */\n 0x20\n /* \"#utility.yul\":3744:3753 */\n dup3\n /* \"#utility.yul\":3740:3758 */\n add\n /* \"#utility.yul\":3732:3758 */\n swap1\n pop\n /* \"#utility.yul\":3768:3833 */\n tag_373\n /* \"#utility.yul\":3830:3831 */\n 0x00\n /* \"#utility.yul\":3819:3828 */\n dup4\n /* \"#utility.yul\":3815:3832 */\n add\n /* \"#utility.yul\":3806:3812 */\n dup5\n /* \"#utility.yul\":3768:3833 */\n tag_296\n jump\t// in\n tag_373:\n /* \"#utility.yul\":3630:3840 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3846:3964 */\n tag_297:\n /* \"#utility.yul\":3933:3957 */\n tag_375\n /* \"#utility.yul\":3951:3956 */\n dup2\n /* \"#utility.yul\":3933:3957 */\n tag_292\n jump\t// in\n tag_375:\n /* \"#utility.yul\":3928:3931 */\n dup3\n /* \"#utility.yul\":3921:3958 */\n mstore\n /* \"#utility.yul\":3846:3964 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3970:4192 */\n tag_55:\n /* \"#utility.yul\":4063:4067 */\n 0x00\n /* \"#utility.yul\":4101:4103 */\n 0x20\n /* \"#utility.yul\":4090:4099 */\n dup3\n /* \"#utility.yul\":4086:4104 */\n add\n /* \"#utility.yul\":4078:4104 */\n swap1\n pop\n /* \"#utility.yul\":4114:4185 */\n tag_377\n /* \"#utility.yul\":4182:4183 */\n 0x00\n /* \"#utility.yul\":4171:4180 */\n dup4\n /* \"#utility.yul\":4167:4184 */\n add\n /* \"#utility.yul\":4158:4164 */\n dup5\n /* \"#utility.yul\":4114:4185 */\n tag_297\n jump\t// in\n tag_377:\n /* \"#utility.yul\":3970:4192 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4198:4817 */\n tag_63:\n /* \"#utility.yul\":4275:4281 */\n 0x00\n /* \"#utility.yul\":4283:4289 */\n dup1\n /* \"#utility.yul\":4291:4297 */\n 0x00\n /* \"#utility.yul\":4340:4342 */\n 0x60\n /* \"#utility.yul\":4328:4337 */\n dup5\n /* \"#utility.yul\":4319:4326 */\n dup7\n /* \"#utility.yul\":4315:4338 */\n sub\n /* \"#utility.yul\":4311:4343 */\n slt\n /* \"#utility.yul\":4308:4427 */\n iszero\n tag_379\n jumpi\n /* \"#utility.yul\":4346:4425 */\n tag_380\n tag_288\n jump\t// in\n tag_380:\n /* \"#utility.yul\":4308:4427 */\n tag_379:\n /* \"#utility.yul\":4466:4467 */\n 0x00\n /* \"#utility.yul\":4491:4544 */\n tag_381\n /* \"#utility.yul\":4536:4543 */\n dup7\n /* \"#utility.yul\":4527:4533 */\n dup3\n /* \"#utility.yul\":4516:4525 */\n dup8\n /* \"#utility.yul\":4512:4534 */\n add\n /* \"#utility.yul\":4491:4544 */\n tag_291\n jump\t// in\n tag_381:\n /* \"#utility.yul\":4481:4544 */\n swap4\n pop\n /* \"#utility.yul\":4437:4554 */\n pop\n /* \"#utility.yul\":4593:4595 */\n 0x20\n /* \"#utility.yul\":4619:4672 */\n tag_382\n /* \"#utility.yul\":4664:4671 */\n dup7\n /* \"#utility.yul\":4655:4661 */\n dup3\n /* \"#utility.yul\":4644:4653 */\n dup8\n /* \"#utility.yul\":4640:4662 */\n add\n /* \"#utility.yul\":4619:4672 */\n tag_291\n jump\t// in\n tag_382:\n /* \"#utility.yul\":4609:4672 */\n swap3\n pop\n /* \"#utility.yul\":4564:4682 */\n pop\n /* \"#utility.yul\":4721:4723 */\n 0x40\n /* \"#utility.yul\":4747:4800 */\n tag_383\n /* \"#utility.yul\":4792:4799 */\n dup7\n /* \"#utility.yul\":4783:4789 */\n dup3\n /* \"#utility.yul\":4772:4781 */\n dup8\n /* \"#utility.yul\":4768:4790 */\n add\n /* \"#utility.yul\":4747:4800 */\n tag_294\n jump\t// in\n tag_383:\n /* \"#utility.yul\":4737:4800 */\n swap2\n pop\n /* \"#utility.yul\":4692:4810 */\n pop\n /* \"#utility.yul\":4198:4817 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":4823:4909 */\n tag_298:\n /* \"#utility.yul\":4858:4865 */\n 0x00\n /* \"#utility.yul\":4898:4902 */\n 0xff\n /* \"#utility.yul\":4891:4896 */\n dup3\n /* \"#utility.yul\":4887:4903 */\n and\n /* \"#utility.yul\":4876:4903 */\n swap1\n pop\n /* \"#utility.yul\":4823:4909 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4915:5027 */\n tag_299:\n /* \"#utility.yul\":4998:5020 */\n tag_386\n /* \"#utility.yul\":5014:5019 */\n dup2\n /* \"#utility.yul\":4998:5020 */\n tag_298\n jump\t// in\n tag_386:\n /* \"#utility.yul\":4993:4996 */\n dup3\n /* \"#utility.yul\":4986:5021 */\n mstore\n /* \"#utility.yul\":4915:5027 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5033:5247 */\n tag_70:\n /* \"#utility.yul\":5122:5126 */\n 0x00\n /* \"#utility.yul\":5160:5162 */\n 0x20\n /* \"#utility.yul\":5149:5158 */\n dup3\n /* \"#utility.yul\":5145:5163 */\n add\n /* \"#utility.yul\":5137:5163 */\n swap1\n pop\n /* \"#utility.yul\":5173:5240 */\n tag_388\n /* \"#utility.yul\":5237:5238 */\n 0x00\n /* \"#utility.yul\":5226:5235 */\n dup4\n /* \"#utility.yul\":5222:5239 */\n add\n /* \"#utility.yul\":5213:5219 */\n dup5\n /* \"#utility.yul\":5173:5240 */\n tag_299\n jump\t// in\n tag_388:\n /* \"#utility.yul\":5033:5247 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5253:5582 */\n tag_79:\n /* \"#utility.yul\":5312:5318 */\n 0x00\n /* \"#utility.yul\":5361:5363 */\n 0x20\n /* \"#utility.yul\":5349:5358 */\n dup3\n /* \"#utility.yul\":5340:5347 */\n dup5\n /* \"#utility.yul\":5336:5359 */\n sub\n /* \"#utility.yul\":5332:5364 */\n slt\n /* \"#utility.yul\":5329:5448 */\n iszero\n tag_390\n jumpi\n /* \"#utility.yul\":5367:5446 */\n tag_391\n tag_288\n jump\t// in\n tag_391:\n /* \"#utility.yul\":5329:5448 */\n tag_390:\n /* \"#utility.yul\":5487:5488 */\n 0x00\n /* \"#utility.yul\":5512:5565 */\n tag_392\n /* \"#utility.yul\":5557:5564 */\n dup5\n /* \"#utility.yul\":5548:5554 */\n dup3\n /* \"#utility.yul\":5537:5546 */\n dup6\n /* \"#utility.yul\":5533:5555 */\n add\n /* \"#utility.yul\":5512:5565 */\n tag_291\n jump\t// in\n tag_392:\n /* \"#utility.yul\":5502:5565 */\n swap2\n pop\n /* \"#utility.yul\":5458:5575 */\n pop\n /* \"#utility.yul\":5253:5582 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5588:5648 */\n tag_300:\n /* \"#utility.yul\":5616:5619 */\n 0x00\n /* \"#utility.yul\":5637:5642 */\n dup2\n /* \"#utility.yul\":5630:5642 */\n swap1\n pop\n /* \"#utility.yul\":5588:5648 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5654:5796 */\n tag_301:\n /* \"#utility.yul\":5704:5713 */\n 0x00\n /* \"#utility.yul\":5737:5790 */\n tag_395\n /* \"#utility.yul\":5755:5789 */\n tag_396\n /* \"#utility.yul\":5764:5788 */\n tag_397\n /* \"#utility.yul\":5782:5787 */\n dup5\n /* \"#utility.yul\":5764:5788 */\n tag_279\n jump\t// in\n tag_397:\n /* \"#utility.yul\":5755:5789 */\n tag_300\n jump\t// in\n tag_396:\n /* \"#utility.yul\":5737:5790 */\n tag_279\n jump\t// in\n tag_395:\n /* \"#utility.yul\":5724:5790 */\n swap1\n pop\n /* \"#utility.yul\":5654:5796 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5802:5928 */\n tag_302:\n /* \"#utility.yul\":5852:5861 */\n 0x00\n /* \"#utility.yul\":5885:5922 */\n tag_399\n /* \"#utility.yul\":5916:5921 */\n dup3\n /* \"#utility.yul\":5885:5922 */\n tag_301\n jump\t// in\n tag_399:\n /* \"#utility.yul\":5872:5922 */\n swap1\n pop\n /* \"#utility.yul\":5802:5928 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5934:6091 */\n tag_303:\n /* \"#utility.yul\":6015:6024 */\n 0x00\n /* \"#utility.yul\":6048:6085 */\n tag_401\n /* \"#utility.yul\":6079:6084 */\n dup3\n /* \"#utility.yul\":6048:6085 */\n tag_302\n jump\t// in\n tag_401:\n /* \"#utility.yul\":6035:6085 */\n swap1\n pop\n /* \"#utility.yul\":5934:6091 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6097:6290 */\n tag_304:\n /* \"#utility.yul\":6215:6283 */\n tag_403\n /* \"#utility.yul\":6277:6282 */\n dup2\n /* \"#utility.yul\":6215:6283 */\n tag_303\n jump\t// in\n tag_403:\n /* \"#utility.yul\":6210:6213 */\n dup3\n /* \"#utility.yul\":6203:6284 */\n mstore\n /* \"#utility.yul\":6097:6290 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6296:6580 */\n tag_113:\n /* \"#utility.yul\":6420:6424 */\n 0x00\n /* \"#utility.yul\":6458:6460 */\n 0x20\n /* \"#utility.yul\":6447:6456 */\n dup3\n /* \"#utility.yul\":6443:6461 */\n add\n /* \"#utility.yul\":6435:6461 */\n swap1\n pop\n /* \"#utility.yul\":6471:6573 */\n tag_405\n /* \"#utility.yul\":6570:6571 */\n 0x00\n /* \"#utility.yul\":6559:6568 */\n dup4\n /* \"#utility.yul\":6555:6572 */\n add\n /* \"#utility.yul\":6546:6552 */\n dup5\n /* \"#utility.yul\":6471:6573 */\n tag_304\n jump\t// in\n tag_405:\n /* \"#utility.yul\":6296:6580 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6586:7060 */\n tag_136:\n /* \"#utility.yul\":6654:6660 */\n 0x00\n /* \"#utility.yul\":6662:6668 */\n dup1\n /* \"#utility.yul\":6711:6713 */\n 0x40\n /* \"#utility.yul\":6699:6708 */\n dup4\n /* \"#utility.yul\":6690:6697 */\n dup6\n /* \"#utility.yul\":6686:6709 */\n sub\n /* \"#utility.yul\":6682:6714 */\n slt\n /* \"#utility.yul\":6679:6798 */\n iszero\n tag_407\n jumpi\n /* \"#utility.yul\":6717:6796 */\n tag_408\n tag_288\n jump\t// in\n tag_408:\n /* \"#utility.yul\":6679:6798 */\n tag_407:\n /* \"#utility.yul\":6837:6838 */\n 0x00\n /* \"#utility.yul\":6862:6915 */\n tag_409\n /* \"#utility.yul\":6907:6914 */\n dup6\n /* \"#utility.yul\":6898:6904 */\n dup3\n /* \"#utility.yul\":6887:6896 */\n dup7\n /* \"#utility.yul\":6883:6905 */\n add\n /* \"#utility.yul\":6862:6915 */\n tag_291\n jump\t// in\n tag_409:\n /* \"#utility.yul\":6852:6915 */\n swap3\n pop\n /* \"#utility.yul\":6808:6925 */\n pop\n /* \"#utility.yul\":6964:6966 */\n 0x20\n /* \"#utility.yul\":6990:7043 */\n tag_410\n /* \"#utility.yul\":7035:7042 */\n dup6\n /* \"#utility.yul\":7026:7032 */\n dup3\n /* \"#utility.yul\":7015:7024 */\n dup7\n /* \"#utility.yul\":7011:7033 */\n add\n /* \"#utility.yul\":6990:7043 */\n tag_291\n jump\t// in\n tag_410:\n /* \"#utility.yul\":6980:7043 */\n swap2\n pop\n /* \"#utility.yul\":6935:7053 */\n pop\n /* \"#utility.yul\":6586:7060 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7066:7183 */\n tag_305:\n /* \"#utility.yul\":7175:7176 */\n 0x00\n /* \"#utility.yul\":7172:7173 */\n dup1\n /* \"#utility.yul\":7165:7177 */\n revert\n /* \"#utility.yul\":7189:7306 */\n tag_306:\n /* \"#utility.yul\":7298:7299 */\n 0x00\n /* \"#utility.yul\":7295:7296 */\n dup1\n /* \"#utility.yul\":7288:7300 */\n revert\n /* \"#utility.yul\":7312:7429 */\n tag_307:\n /* \"#utility.yul\":7421:7422 */\n 0x00\n /* \"#utility.yul\":7418:7419 */\n dup1\n /* \"#utility.yul\":7411:7423 */\n revert\n /* \"#utility.yul\":7449:8002 */\n tag_308:\n /* \"#utility.yul\":7507:7515 */\n 0x00\n /* \"#utility.yul\":7517:7523 */\n dup1\n /* \"#utility.yul\":7567:7570 */\n dup4\n /* \"#utility.yul\":7560:7564 */\n 0x1f\n /* \"#utility.yul\":7552:7558 */\n dup5\n /* \"#utility.yul\":7548:7565 */\n add\n /* \"#utility.yul\":7544:7571 */\n slt\n /* \"#utility.yul\":7534:7656 */\n tag_415\n jumpi\n /* \"#utility.yul\":7575:7654 */\n tag_416\n tag_305\n jump\t// in\n tag_416:\n /* \"#utility.yul\":7534:7656 */\n tag_415:\n /* \"#utility.yul\":7688:7694 */\n dup3\n /* \"#utility.yul\":7675:7695 */\n calldataload\n /* \"#utility.yul\":7665:7695 */\n swap1\n pop\n /* \"#utility.yul\":7718:7736 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7710:7716 */\n dup2\n /* \"#utility.yul\":7707:7737 */\n gt\n /* \"#utility.yul\":7704:7821 */\n iszero\n tag_417\n jumpi\n /* \"#utility.yul\":7740:7819 */\n tag_418\n tag_306\n jump\t// in\n tag_418:\n /* \"#utility.yul\":7704:7821 */\n tag_417:\n /* \"#utility.yul\":7854:7858 */\n 0x20\n /* \"#utility.yul\":7846:7852 */\n dup4\n /* \"#utility.yul\":7842:7859 */\n add\n /* \"#utility.yul\":7830:7859 */\n swap2\n pop\n /* \"#utility.yul\":7908:7911 */\n dup4\n /* \"#utility.yul\":7900:7904 */\n 0x01\n /* \"#utility.yul\":7892:7898 */\n dup3\n /* \"#utility.yul\":7888:7905 */\n mul\n /* \"#utility.yul\":7878:7886 */\n dup4\n /* \"#utility.yul\":7874:7906 */\n add\n /* \"#utility.yul\":7871:7912 */\n gt\n /* \"#utility.yul\":7868:7996 */\n iszero\n tag_419\n jumpi\n /* \"#utility.yul\":7915:7994 */\n tag_420\n tag_307\n jump\t// in\n tag_420:\n /* \"#utility.yul\":7868:7996 */\n tag_419:\n /* \"#utility.yul\":7449:8002 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8008:8126 */\n tag_309:\n /* \"#utility.yul\":8079:8101 */\n tag_422\n /* \"#utility.yul\":8095:8100 */\n dup2\n /* \"#utility.yul\":8079:8101 */\n tag_298\n jump\t// in\n tag_422:\n /* \"#utility.yul\":8072:8077 */\n dup2\n /* \"#utility.yul\":8069:8102 */\n eq\n /* \"#utility.yul\":8059:8120 */\n tag_423\n jumpi\n /* \"#utility.yul\":8116:8117 */\n 0x00\n /* \"#utility.yul\":8113:8114 */\n dup1\n /* \"#utility.yul\":8106:8118 */\n revert\n /* \"#utility.yul\":8059:8120 */\n tag_423:\n /* \"#utility.yul\":8008:8126 */\n pop\n jump\t// out\n /* \"#utility.yul\":8132:8267 */\n tag_310:\n /* \"#utility.yul\":8176:8181 */\n 0x00\n /* \"#utility.yul\":8214:8220 */\n dup2\n /* \"#utility.yul\":8201:8221 */\n calldataload\n /* \"#utility.yul\":8192:8221 */\n swap1\n pop\n /* \"#utility.yul\":8230:8261 */\n tag_425\n /* \"#utility.yul\":8255:8260 */\n dup2\n /* \"#utility.yul\":8230:8261 */\n tag_309\n jump\t// in\n tag_425:\n /* \"#utility.yul\":8132:8267 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8273:9288 */\n tag_142:\n /* \"#utility.yul\":8372:8378 */\n 0x00\n /* \"#utility.yul\":8380:8386 */\n dup1\n /* \"#utility.yul\":8388:8394 */\n 0x00\n /* \"#utility.yul\":8396:8402 */\n dup1\n /* \"#utility.yul\":8404:8410 */\n 0x00\n /* \"#utility.yul\":8453:8455 */\n 0x60\n /* \"#utility.yul\":8441:8450 */\n dup7\n /* \"#utility.yul\":8432:8439 */\n dup9\n /* \"#utility.yul\":8428:8451 */\n sub\n /* \"#utility.yul\":8424:8456 */\n slt\n /* \"#utility.yul\":8421:8540 */\n iszero\n tag_427\n jumpi\n /* \"#utility.yul\":8459:8538 */\n tag_428\n tag_288\n jump\t// in\n tag_428:\n /* \"#utility.yul\":8421:8540 */\n tag_427:\n /* \"#utility.yul\":8607:8608 */\n 0x00\n /* \"#utility.yul\":8596:8605 */\n dup7\n /* \"#utility.yul\":8592:8609 */\n add\n /* \"#utility.yul\":8579:8610 */\n calldataload\n /* \"#utility.yul\":8637:8655 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8629:8635 */\n dup2\n /* \"#utility.yul\":8626:8656 */\n gt\n /* \"#utility.yul\":8623:8740 */\n iszero\n tag_429\n jumpi\n /* \"#utility.yul\":8659:8738 */\n tag_430\n tag_289\n jump\t// in\n tag_430:\n /* \"#utility.yul\":8623:8740 */\n tag_429:\n /* \"#utility.yul\":8772:8837 */\n tag_431\n /* \"#utility.yul\":8829:8836 */\n dup9\n /* \"#utility.yul\":8820:8826 */\n dup3\n /* \"#utility.yul\":8809:8818 */\n dup10\n /* \"#utility.yul\":8805:8827 */\n add\n /* \"#utility.yul\":8772:8837 */\n tag_308\n jump\t// in\n tag_431:\n /* \"#utility.yul\":8754:8837 */\n swap6\n pop\n swap6\n pop\n /* \"#utility.yul\":8550:8847 */\n pop\n /* \"#utility.yul\":8914:8916 */\n 0x20\n /* \"#utility.yul\":8903:8912 */\n dup7\n /* \"#utility.yul\":8899:8917 */\n add\n /* \"#utility.yul\":8886:8918 */\n calldataload\n /* \"#utility.yul\":8945:8963 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8937:8943 */\n dup2\n /* \"#utility.yul\":8934:8964 */\n gt\n /* \"#utility.yul\":8931:9048 */\n iszero\n tag_432\n jumpi\n /* \"#utility.yul\":8967:9046 */\n tag_433\n tag_289\n jump\t// in\n tag_433:\n /* \"#utility.yul\":8931:9048 */\n tag_432:\n /* \"#utility.yul\":9080:9145 */\n tag_434\n /* \"#utility.yul\":9137:9144 */\n dup9\n /* \"#utility.yul\":9128:9134 */\n dup3\n /* \"#utility.yul\":9117:9126 */\n dup10\n /* \"#utility.yul\":9113:9135 */\n add\n /* \"#utility.yul\":9080:9145 */\n tag_308\n jump\t// in\n tag_434:\n /* \"#utility.yul\":9062:9145 */\n swap4\n pop\n swap4\n pop\n /* \"#utility.yul\":8857:9155 */\n pop\n /* \"#utility.yul\":9194:9196 */\n 0x40\n /* \"#utility.yul\":9220:9271 */\n tag_435\n /* \"#utility.yul\":9263:9270 */\n dup9\n /* \"#utility.yul\":9254:9260 */\n dup3\n /* \"#utility.yul\":9243:9252 */\n dup10\n /* \"#utility.yul\":9239:9261 */\n add\n /* \"#utility.yul\":9220:9271 */\n tag_310\n jump\t// in\n tag_435:\n /* \"#utility.yul\":9210:9271 */\n swap2\n pop\n /* \"#utility.yul\":9165:9281 */\n pop\n /* \"#utility.yul\":8273:9288 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":9294:9913 */\n tag_158:\n /* \"#utility.yul\":9371:9377 */\n 0x00\n /* \"#utility.yul\":9379:9385 */\n dup1\n /* \"#utility.yul\":9387:9393 */\n 0x00\n /* \"#utility.yul\":9436:9438 */\n 0x60\n /* \"#utility.yul\":9424:9433 */\n dup5\n /* \"#utility.yul\":9415:9422 */\n dup7\n /* \"#utility.yul\":9411:9434 */\n sub\n /* \"#utility.yul\":9407:9439 */\n slt\n /* \"#utility.yul\":9404:9523 */\n iszero\n tag_437\n jumpi\n /* \"#utility.yul\":9442:9521 */\n tag_438\n tag_288\n jump\t// in\n tag_438:\n /* \"#utility.yul\":9404:9523 */\n tag_437:\n /* \"#utility.yul\":9562:9563 */\n 0x00\n /* \"#utility.yul\":9587:9640 */\n tag_439\n /* \"#utility.yul\":9632:9639 */\n dup7\n /* \"#utility.yul\":9623:9629 */\n dup3\n /* \"#utility.yul\":9612:9621 */\n dup8\n /* \"#utility.yul\":9608:9630 */\n add\n /* \"#utility.yul\":9587:9640 */\n tag_291\n jump\t// in\n tag_439:\n /* \"#utility.yul\":9577:9640 */\n swap4\n pop\n /* \"#utility.yul\":9533:9650 */\n pop\n /* \"#utility.yul\":9689:9691 */\n 0x20\n /* \"#utility.yul\":9715:9768 */\n tag_440\n /* \"#utility.yul\":9760:9767 */\n dup7\n /* \"#utility.yul\":9751:9757 */\n dup3\n /* \"#utility.yul\":9740:9749 */\n dup8\n /* \"#utility.yul\":9736:9758 */\n add\n /* \"#utility.yul\":9715:9768 */\n tag_291\n jump\t// in\n tag_440:\n /* \"#utility.yul\":9705:9768 */\n swap3\n pop\n /* \"#utility.yul\":9660:9778 */\n pop\n /* \"#utility.yul\":9817:9819 */\n 0x40\n /* \"#utility.yul\":9843:9896 */\n tag_441\n /* \"#utility.yul\":9888:9895 */\n dup7\n /* \"#utility.yul\":9879:9885 */\n dup3\n /* \"#utility.yul\":9868:9877 */\n dup8\n /* \"#utility.yul\":9864:9886 */\n add\n /* \"#utility.yul\":9843:9896 */\n tag_291\n jump\t// in\n tag_441:\n /* \"#utility.yul\":9833:9896 */\n swap2\n pop\n /* \"#utility.yul\":9788:9906 */\n pop\n /* \"#utility.yul\":9294:9913 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":9919:10036 */\n tag_311:\n /* \"#utility.yul\":10028:10029 */\n 0x00\n /* \"#utility.yul\":10025:10026 */\n dup1\n /* \"#utility.yul\":10018:10030 */\n revert\n /* \"#utility.yul\":10042:10222 */\n tag_312:\n /* \"#utility.yul\":10090:10167 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":10087:10088 */\n 0x00\n /* \"#utility.yul\":10080:10168 */\n mstore\n /* \"#utility.yul\":10187:10191 */\n 0x41\n /* \"#utility.yul\":10184:10185 */\n 0x04\n /* \"#utility.yul\":10177:10192 */\n mstore\n /* \"#utility.yul\":10211:10215 */\n 0x24\n /* \"#utility.yul\":10208:10209 */\n 0x00\n /* \"#utility.yul\":10201:10216 */\n revert\n /* \"#utility.yul\":10228:10509 */\n tag_313:\n /* \"#utility.yul\":10311:10338 */\n tag_445\n /* \"#utility.yul\":10333:10337 */\n dup3\n /* \"#utility.yul\":10311:10338 */\n tag_285\n jump\t// in\n tag_445:\n /* \"#utility.yul\":10303:10309 */\n dup2\n /* \"#utility.yul\":10299:10339 */\n add\n /* \"#utility.yul\":10441:10447 */\n dup2\n /* \"#utility.yul\":10429:10439 */\n dup2\n /* \"#utility.yul\":10426:10448 */\n lt\n /* \"#utility.yul\":10405:10423 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10393:10403 */\n dup3\n /* \"#utility.yul\":10390:10424 */\n gt\n /* \"#utility.yul\":10387:10449 */\n or\n /* \"#utility.yul\":10384:10472 */\n iszero\n tag_446\n jumpi\n /* \"#utility.yul\":10452:10470 */\n tag_447\n tag_312\n jump\t// in\n tag_447:\n /* \"#utility.yul\":10384:10472 */\n tag_446:\n /* \"#utility.yul\":10492:10502 */\n dup1\n /* \"#utility.yul\":10488:10490 */\n 0x40\n /* \"#utility.yul\":10481:10503 */\n mstore\n /* \"#utility.yul\":10271:10509 */\n pop\n /* \"#utility.yul\":10228:10509 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10515:10644 */\n tag_314:\n /* \"#utility.yul\":10549:10555 */\n 0x00\n /* \"#utility.yul\":10576:10596 */\n tag_449\n tag_287\n jump\t// in\n tag_449:\n /* \"#utility.yul\":10566:10596 */\n swap1\n pop\n /* \"#utility.yul\":10605:10638 */\n tag_450\n /* \"#utility.yul\":10633:10637 */\n dup3\n /* \"#utility.yul\":10625:10631 */\n dup3\n /* \"#utility.yul\":10605:10638 */\n tag_313\n jump\t// in\n tag_450:\n /* \"#utility.yul\":10515:10644 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10650:10958 */\n tag_315:\n /* \"#utility.yul\":10712:10716 */\n 0x00\n /* \"#utility.yul\":10802:10820 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10794:10800 */\n dup3\n /* \"#utility.yul\":10791:10821 */\n gt\n /* \"#utility.yul\":10788:10844 */\n iszero\n tag_452\n jumpi\n /* \"#utility.yul\":10824:10842 */\n tag_453\n tag_312\n jump\t// in\n tag_453:\n /* \"#utility.yul\":10788:10844 */\n tag_452:\n /* \"#utility.yul\":10862:10891 */\n tag_454\n /* \"#utility.yul\":10884:10890 */\n dup3\n /* \"#utility.yul\":10862:10891 */\n tag_285\n jump\t// in\n tag_454:\n /* \"#utility.yul\":10854:10891 */\n swap1\n pop\n /* \"#utility.yul\":10946:10950 */\n 0x20\n /* \"#utility.yul\":10940:10944 */\n dup2\n /* \"#utility.yul\":10936:10951 */\n add\n /* \"#utility.yul\":10928:10951 */\n swap1\n pop\n /* \"#utility.yul\":10650:10958 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10964:11385 */\n tag_316:\n /* \"#utility.yul\":11053:11058 */\n 0x00\n /* \"#utility.yul\":11078:11144 */\n tag_456\n /* \"#utility.yul\":11094:11143 */\n tag_457\n /* \"#utility.yul\":11136:11142 */\n dup5\n /* \"#utility.yul\":11094:11143 */\n tag_315\n jump\t// in\n tag_457:\n /* \"#utility.yul\":11078:11144 */\n tag_314\n jump\t// in\n tag_456:\n /* \"#utility.yul\":11069:11144 */\n swap1\n pop\n /* \"#utility.yul\":11167:11173 */\n dup3\n /* \"#utility.yul\":11160:11165 */\n dup2\n /* \"#utility.yul\":11153:11174 */\n mstore\n /* \"#utility.yul\":11205:11209 */\n 0x20\n /* \"#utility.yul\":11198:11203 */\n dup2\n /* \"#utility.yul\":11194:11210 */\n add\n /* \"#utility.yul\":11243:11246 */\n dup5\n /* \"#utility.yul\":11234:11240 */\n dup5\n /* \"#utility.yul\":11229:11232 */\n dup5\n /* \"#utility.yul\":11225:11241 */\n add\n /* \"#utility.yul\":11222:11247 */\n gt\n /* \"#utility.yul\":11219:11331 */\n iszero\n tag_458\n jumpi\n /* \"#utility.yul\":11250:11329 */\n tag_459\n tag_311\n jump\t// in\n tag_459:\n /* \"#utility.yul\":11219:11331 */\n tag_458:\n /* \"#utility.yul\":11340:11379 */\n tag_460\n /* \"#utility.yul\":11372:11378 */\n dup5\n /* \"#utility.yul\":11367:11370 */\n dup3\n /* \"#utility.yul\":11362:11365 */\n dup6\n /* \"#utility.yul\":11340:11379 */\n tag_284\n jump\t// in\n tag_460:\n /* \"#utility.yul\":11059:11385 */\n pop\n /* \"#utility.yul\":10964:11385 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11405:11760 */\n tag_317:\n /* \"#utility.yul\":11472:11477 */\n 0x00\n /* \"#utility.yul\":11521:11524 */\n dup3\n /* \"#utility.yul\":11514:11518 */\n 0x1f\n /* \"#utility.yul\":11506:11512 */\n dup4\n /* \"#utility.yul\":11502:11519 */\n add\n /* \"#utility.yul\":11498:11525 */\n slt\n /* \"#utility.yul\":11488:11610 */\n tag_462\n jumpi\n /* \"#utility.yul\":11529:11608 */\n tag_463\n tag_305\n jump\t// in\n tag_463:\n /* \"#utility.yul\":11488:11610 */\n tag_462:\n /* \"#utility.yul\":11639:11645 */\n dup2\n /* \"#utility.yul\":11633:11646 */\n mload\n /* \"#utility.yul\":11664:11754 */\n tag_464\n /* \"#utility.yul\":11750:11753 */\n dup5\n /* \"#utility.yul\":11742:11748 */\n dup3\n /* \"#utility.yul\":11735:11739 */\n 0x20\n /* \"#utility.yul\":11727:11733 */\n dup7\n /* \"#utility.yul\":11723:11740 */\n add\n /* \"#utility.yul\":11664:11754 */\n tag_316\n jump\t// in\n tag_464:\n /* \"#utility.yul\":11655:11754 */\n swap2\n pop\n /* \"#utility.yul\":11478:11760 */\n pop\n /* \"#utility.yul\":11405:11760 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11766:12290 */\n tag_166:\n /* \"#utility.yul\":11846:11852 */\n 0x00\n /* \"#utility.yul\":11895:11897 */\n 0x20\n /* \"#utility.yul\":11883:11892 */\n dup3\n /* \"#utility.yul\":11874:11881 */\n dup5\n /* \"#utility.yul\":11870:11893 */\n sub\n /* \"#utility.yul\":11866:11898 */\n slt\n /* \"#utility.yul\":11863:11982 */\n iszero\n tag_466\n jumpi\n /* \"#utility.yul\":11901:11980 */\n tag_467\n tag_288\n jump\t// in\n tag_467:\n /* \"#utility.yul\":11863:11982 */\n tag_466:\n /* \"#utility.yul\":12042:12043 */\n 0x00\n /* \"#utility.yul\":12031:12040 */\n dup3\n /* \"#utility.yul\":12027:12044 */\n add\n /* \"#utility.yul\":12021:12045 */\n mload\n /* \"#utility.yul\":12072:12090 */\n 0xffffffffffffffff\n /* \"#utility.yul\":12064:12070 */\n dup2\n /* \"#utility.yul\":12061:12091 */\n gt\n /* \"#utility.yul\":12058:12175 */\n iszero\n tag_468\n jumpi\n /* \"#utility.yul\":12094:12173 */\n tag_469\n tag_289\n jump\t// in\n tag_469:\n /* \"#utility.yul\":12058:12175 */\n tag_468:\n /* \"#utility.yul\":12199:12273 */\n tag_470\n /* \"#utility.yul\":12265:12272 */\n dup5\n /* \"#utility.yul\":12256:12262 */\n dup3\n /* \"#utility.yul\":12245:12254 */\n dup6\n /* \"#utility.yul\":12241:12263 */\n add\n /* \"#utility.yul\":12199:12273 */\n tag_317\n jump\t// in\n tag_470:\n /* \"#utility.yul\":12189:12273 */\n swap2\n pop\n /* \"#utility.yul\":11992:12283 */\n pop\n /* \"#utility.yul\":11766:12290 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12296:12628 */\n tag_169:\n /* \"#utility.yul\":12417:12421 */\n 0x00\n /* \"#utility.yul\":12455:12457 */\n 0x40\n /* \"#utility.yul\":12444:12453 */\n dup3\n /* \"#utility.yul\":12440:12458 */\n add\n /* \"#utility.yul\":12432:12458 */\n swap1\n pop\n /* \"#utility.yul\":12468:12539 */\n tag_472\n /* \"#utility.yul\":12536:12537 */\n 0x00\n /* \"#utility.yul\":12525:12534 */\n dup4\n /* \"#utility.yul\":12521:12538 */\n add\n /* \"#utility.yul\":12512:12518 */\n dup6\n /* \"#utility.yul\":12468:12539 */\n tag_281\n jump\t// in\n tag_472:\n /* \"#utility.yul\":12549:12621 */\n tag_473\n /* \"#utility.yul\":12617:12619 */\n 0x20\n /* \"#utility.yul\":12606:12615 */\n dup4\n /* \"#utility.yul\":12602:12620 */\n add\n /* \"#utility.yul\":12593:12599 */\n dup5\n /* \"#utility.yul\":12549:12621 */\n tag_297\n jump\t// in\n tag_473:\n /* \"#utility.yul\":12296:12628 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12634:12750 */\n tag_318:\n /* \"#utility.yul\":12704:12725 */\n tag_475\n /* \"#utility.yul\":12719:12724 */\n dup2\n /* \"#utility.yul\":12704:12725 */\n tag_295\n jump\t// in\n tag_475:\n /* \"#utility.yul\":12697:12702 */\n dup2\n /* \"#utility.yul\":12694:12726 */\n eq\n /* \"#utility.yul\":12684:12744 */\n tag_476\n jumpi\n /* \"#utility.yul\":12740:12741 */\n 0x00\n /* \"#utility.yul\":12737:12738 */\n dup1\n /* \"#utility.yul\":12730:12742 */\n revert\n /* \"#utility.yul\":12684:12744 */\n tag_476:\n /* \"#utility.yul\":12634:12750 */\n pop\n jump\t// out\n /* \"#utility.yul\":12756:12893 */\n tag_319:\n /* \"#utility.yul\":12810:12815 */\n 0x00\n /* \"#utility.yul\":12841:12847 */\n dup2\n /* \"#utility.yul\":12835:12848 */\n mload\n /* \"#utility.yul\":12826:12848 */\n swap1\n pop\n /* \"#utility.yul\":12857:12887 */\n tag_478\n /* \"#utility.yul\":12881:12886 */\n dup2\n /* \"#utility.yul\":12857:12887 */\n tag_318\n jump\t// in\n tag_478:\n /* \"#utility.yul\":12756:12893 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12899:13244 */\n tag_173:\n /* \"#utility.yul\":12966:12972 */\n 0x00\n /* \"#utility.yul\":13015:13017 */\n 0x20\n /* \"#utility.yul\":13003:13012 */\n dup3\n /* \"#utility.yul\":12994:13001 */\n dup5\n /* \"#utility.yul\":12990:13013 */\n sub\n /* \"#utility.yul\":12986:13018 */\n slt\n /* \"#utility.yul\":12983:13102 */\n iszero\n tag_480\n jumpi\n /* \"#utility.yul\":13021:13100 */\n tag_481\n tag_288\n jump\t// in\n tag_481:\n /* \"#utility.yul\":12983:13102 */\n tag_480:\n /* \"#utility.yul\":13141:13142 */\n 0x00\n /* \"#utility.yul\":13166:13227 */\n tag_482\n /* \"#utility.yul\":13219:13226 */\n dup5\n /* \"#utility.yul\":13210:13216 */\n dup3\n /* \"#utility.yul\":13199:13208 */\n dup6\n /* \"#utility.yul\":13195:13217 */\n add\n /* \"#utility.yul\":13166:13227 */\n tag_319\n jump\t// in\n tag_482:\n /* \"#utility.yul\":13156:13227 */\n swap2\n pop\n /* \"#utility.yul\":13112:13237 */\n pop\n /* \"#utility.yul\":12899:13244 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13250:13393 */\n tag_320:\n /* \"#utility.yul\":13307:13312 */\n 0x00\n /* \"#utility.yul\":13338:13344 */\n dup2\n /* \"#utility.yul\":13332:13345 */\n mload\n /* \"#utility.yul\":13323:13345 */\n swap1\n pop\n /* \"#utility.yul\":13354:13387 */\n tag_484\n /* \"#utility.yul\":13381:13386 */\n dup2\n /* \"#utility.yul\":13354:13387 */\n tag_293\n jump\t// in\n tag_484:\n /* \"#utility.yul\":13250:13393 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13399:13750 */\n tag_178:\n /* \"#utility.yul\":13469:13475 */\n 0x00\n /* \"#utility.yul\":13518:13520 */\n 0x20\n /* \"#utility.yul\":13506:13515 */\n dup3\n /* \"#utility.yul\":13497:13504 */\n dup5\n /* \"#utility.yul\":13493:13516 */\n sub\n /* \"#utility.yul\":13489:13521 */\n slt\n /* \"#utility.yul\":13486:13605 */\n iszero\n tag_486\n jumpi\n /* \"#utility.yul\":13524:13603 */\n tag_487\n tag_288\n jump\t// in\n tag_487:\n /* \"#utility.yul\":13486:13605 */\n tag_486:\n /* \"#utility.yul\":13644:13645 */\n 0x00\n /* \"#utility.yul\":13669:13733 */\n tag_488\n /* \"#utility.yul\":13725:13732 */\n dup5\n /* \"#utility.yul\":13716:13722 */\n dup3\n /* \"#utility.yul\":13705:13714 */\n dup6\n /* \"#utility.yul\":13701:13723 */\n add\n /* \"#utility.yul\":13669:13733 */\n tag_320\n jump\t// in\n tag_488:\n /* \"#utility.yul\":13659:13733 */\n swap2\n pop\n /* \"#utility.yul\":13615:13743 */\n pop\n /* \"#utility.yul\":13399:13750 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13756:14198 */\n tag_185:\n /* \"#utility.yul\":13905:13909 */\n 0x00\n /* \"#utility.yul\":13943:13945 */\n 0x60\n /* \"#utility.yul\":13932:13941 */\n dup3\n /* \"#utility.yul\":13928:13946 */\n add\n /* \"#utility.yul\":13920:13946 */\n swap1\n pop\n /* \"#utility.yul\":13956:14027 */\n tag_490\n /* \"#utility.yul\":14024:14025 */\n 0x00\n /* \"#utility.yul\":14013:14022 */\n dup4\n /* \"#utility.yul\":14009:14026 */\n add\n /* \"#utility.yul\":14000:14006 */\n dup7\n /* \"#utility.yul\":13956:14027 */\n tag_281\n jump\t// in\n tag_490:\n /* \"#utility.yul\":14037:14109 */\n tag_491\n /* \"#utility.yul\":14105:14107 */\n 0x20\n /* \"#utility.yul\":14094:14103 */\n dup4\n /* \"#utility.yul\":14090:14108 */\n add\n /* \"#utility.yul\":14081:14087 */\n dup6\n /* \"#utility.yul\":14037:14109 */\n tag_281\n jump\t// in\n tag_491:\n /* \"#utility.yul\":14119:14191 */\n tag_492\n /* \"#utility.yul\":14187:14189 */\n 0x40\n /* \"#utility.yul\":14176:14185 */\n dup4\n /* \"#utility.yul\":14172:14190 */\n add\n /* \"#utility.yul\":14163:14169 */\n dup5\n /* \"#utility.yul\":14119:14191 */\n tag_297\n jump\t// in\n tag_492:\n /* \"#utility.yul\":13756:14198 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14204:14343 */\n tag_321:\n /* \"#utility.yul\":14259:14264 */\n 0x00\n /* \"#utility.yul\":14290:14296 */\n dup2\n /* \"#utility.yul\":14284:14297 */\n mload\n /* \"#utility.yul\":14275:14297 */\n swap1\n pop\n /* \"#utility.yul\":14306:14337 */\n tag_494\n /* \"#utility.yul\":14331:14336 */\n dup2\n /* \"#utility.yul\":14306:14337 */\n tag_309\n jump\t// in\n tag_494:\n /* \"#utility.yul\":14204:14343 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14349:14696 */\n tag_193:\n /* \"#utility.yul\":14417:14423 */\n 0x00\n /* \"#utility.yul\":14466:14468 */\n 0x20\n /* \"#utility.yul\":14454:14463 */\n dup3\n /* \"#utility.yul\":14445:14452 */\n dup5\n /* \"#utility.yul\":14441:14464 */\n sub\n /* \"#utility.yul\":14437:14469 */\n slt\n /* \"#utility.yul\":14434:14553 */\n iszero\n tag_496\n jumpi\n /* \"#utility.yul\":14472:14551 */\n tag_497\n tag_288\n jump\t// in\n tag_497:\n /* \"#utility.yul\":14434:14553 */\n tag_496:\n /* \"#utility.yul\":14592:14593 */\n 0x00\n /* \"#utility.yul\":14617:14679 */\n tag_498\n /* \"#utility.yul\":14671:14678 */\n dup5\n /* \"#utility.yul\":14662:14668 */\n dup3\n /* \"#utility.yul\":14651:14660 */\n dup6\n /* \"#utility.yul\":14647:14669 */\n add\n /* \"#utility.yul\":14617:14679 */\n tag_321\n jump\t// in\n tag_498:\n /* \"#utility.yul\":14607:14679 */\n swap2\n pop\n /* \"#utility.yul\":14563:14689 */\n pop\n /* \"#utility.yul\":14349:14696 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14702:14800 */\n tag_322:\n /* \"#utility.yul\":14753:14759 */\n 0x00\n /* \"#utility.yul\":14787:14792 */\n dup2\n /* \"#utility.yul\":14781:14793 */\n mload\n /* \"#utility.yul\":14771:14793 */\n swap1\n pop\n /* \"#utility.yul\":14702:14800 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":14806:14953 */\n tag_323:\n /* \"#utility.yul\":14907:14918 */\n 0x00\n /* \"#utility.yul\":14944:14947 */\n dup2\n /* \"#utility.yul\":14929:14947 */\n swap1\n pop\n /* \"#utility.yul\":14806:14953 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14959:15332 */\n tag_324:\n /* \"#utility.yul\":15063:15066 */\n 0x00\n /* \"#utility.yul\":15091:15129 */\n tag_502\n /* \"#utility.yul\":15123:15128 */\n dup3\n /* \"#utility.yul\":15091:15129 */\n tag_322\n jump\t// in\n tag_502:\n /* \"#utility.yul\":15145:15233 */\n tag_503\n /* \"#utility.yul\":15226:15232 */\n dup2\n /* \"#utility.yul\":15221:15224 */\n dup6\n /* \"#utility.yul\":15145:15233 */\n tag_323\n jump\t// in\n tag_503:\n /* \"#utility.yul\":15138:15233 */\n swap4\n pop\n /* \"#utility.yul\":15242:15294 */\n tag_504\n /* \"#utility.yul\":15287:15293 */\n dup2\n /* \"#utility.yul\":15282:15285 */\n dup6\n /* \"#utility.yul\":15275:15279 */\n 0x20\n /* \"#utility.yul\":15268:15273 */\n dup7\n /* \"#utility.yul\":15264:15280 */\n add\n /* \"#utility.yul\":15242:15294 */\n tag_284\n jump\t// in\n tag_504:\n /* \"#utility.yul\":15319:15325 */\n dup1\n /* \"#utility.yul\":15314:15317 */\n dup5\n /* \"#utility.yul\":15310:15326 */\n add\n /* \"#utility.yul\":15303:15326 */\n swap2\n pop\n /* \"#utility.yul\":15067:15332 */\n pop\n /* \"#utility.yul\":14959:15332 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15338:15609 */\n tag_216:\n /* \"#utility.yul\":15468:15471 */\n 0x00\n /* \"#utility.yul\":15490:15583 */\n tag_506\n /* \"#utility.yul\":15579:15582 */\n dup3\n /* \"#utility.yul\":15570:15576 */\n dup5\n /* \"#utility.yul\":15490:15583 */\n tag_324\n jump\t// in\n tag_506:\n /* \"#utility.yul\":15483:15583 */\n swap2\n pop\n /* \"#utility.yul\":15600:15603 */\n dup2\n /* \"#utility.yul\":15593:15603 */\n swap1\n pop\n /* \"#utility.yul\":15338:15609 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15615:15947 */\n tag_252:\n /* \"#utility.yul\":15736:15740 */\n 0x00\n /* \"#utility.yul\":15774:15776 */\n 0x40\n /* \"#utility.yul\":15763:15772 */\n dup3\n /* \"#utility.yul\":15759:15777 */\n add\n /* \"#utility.yul\":15751:15777 */\n swap1\n pop\n /* \"#utility.yul\":15787:15858 */\n tag_508\n /* \"#utility.yul\":15855:15856 */\n 0x00\n /* \"#utility.yul\":15844:15853 */\n dup4\n /* \"#utility.yul\":15840:15857 */\n add\n /* \"#utility.yul\":15831:15837 */\n dup6\n /* \"#utility.yul\":15787:15858 */\n tag_281\n jump\t// in\n tag_508:\n /* \"#utility.yul\":15868:15940 */\n tag_509\n /* \"#utility.yul\":15936:15938 */\n 0x20\n /* \"#utility.yul\":15925:15934 */\n dup4\n /* \"#utility.yul\":15921:15939 */\n add\n /* \"#utility.yul\":15912:15918 */\n dup5\n /* \"#utility.yul\":15868:15940 */\n tag_281\n jump\t// in\n tag_509:\n /* \"#utility.yul\":15615:15947 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15953:16107 */\n tag_325:\n /* \"#utility.yul\":16037:16043 */\n dup3\n /* \"#utility.yul\":16032:16035 */\n dup2\n /* \"#utility.yul\":16027:16030 */\n dup4\n /* \"#utility.yul\":16014:16044 */\n calldatacopy\n /* \"#utility.yul\":16099:16100 */\n 0x00\n /* \"#utility.yul\":16090:16096 */\n dup4\n /* \"#utility.yul\":16085:16088 */\n dup4\n /* \"#utility.yul\":16081:16097 */\n add\n /* \"#utility.yul\":16074:16101 */\n mstore\n /* \"#utility.yul\":15953:16107 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16137:16441 */\n tag_326:\n /* \"#utility.yul\":16235:16238 */\n 0x00\n /* \"#utility.yul\":16256:16327 */\n tag_512\n /* \"#utility.yul\":16320:16326 */\n dup4\n /* \"#utility.yul\":16315:16318 */\n dup6\n /* \"#utility.yul\":16256:16327 */\n tag_283\n jump\t// in\n tag_512:\n /* \"#utility.yul\":16249:16327 */\n swap4\n pop\n /* \"#utility.yul\":16337:16380 */\n tag_513\n /* \"#utility.yul\":16373:16379 */\n dup4\n /* \"#utility.yul\":16368:16371 */\n dup6\n /* \"#utility.yul\":16361:16366 */\n dup5\n /* \"#utility.yul\":16337:16380 */\n tag_325\n jump\t// in\n tag_513:\n /* \"#utility.yul\":16405:16434 */\n tag_514\n /* \"#utility.yul\":16427:16433 */\n dup4\n /* \"#utility.yul\":16405:16434 */\n tag_285\n jump\t// in\n tag_514:\n /* \"#utility.yul\":16400:16403 */\n dup5\n /* \"#utility.yul\":16396:16435 */\n add\n /* \"#utility.yul\":16389:16435 */\n swap1\n pop\n /* \"#utility.yul\":16137:16441 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16447:17103 */\n tag_258:\n /* \"#utility.yul\":16652:16656 */\n 0x00\n /* \"#utility.yul\":16690:16692 */\n 0x60\n /* \"#utility.yul\":16679:16688 */\n dup3\n /* \"#utility.yul\":16675:16693 */\n add\n /* \"#utility.yul\":16667:16693 */\n swap1\n pop\n /* \"#utility.yul\":16739:16748 */\n dup2\n /* \"#utility.yul\":16733:16737 */\n dup2\n /* \"#utility.yul\":16729:16749 */\n sub\n /* \"#utility.yul\":16725:16726 */\n 0x00\n /* \"#utility.yul\":16714:16723 */\n dup4\n /* \"#utility.yul\":16710:16727 */\n add\n /* \"#utility.yul\":16703:16750 */\n mstore\n /* \"#utility.yul\":16767:16855 */\n tag_516\n /* \"#utility.yul\":16850:16854 */\n dup2\n /* \"#utility.yul\":16841:16847 */\n dup8\n /* \"#utility.yul\":16833:16839 */\n dup10\n /* \"#utility.yul\":16767:16855 */\n tag_326\n jump\t// in\n tag_516:\n /* \"#utility.yul\":16759:16855 */\n swap1\n pop\n /* \"#utility.yul\":16902:16911 */\n dup2\n /* \"#utility.yul\":16896:16900 */\n dup2\n /* \"#utility.yul\":16892:16912 */\n sub\n /* \"#utility.yul\":16887:16889 */\n 0x20\n /* \"#utility.yul\":16876:16885 */\n dup4\n /* \"#utility.yul\":16872:16890 */\n add\n /* \"#utility.yul\":16865:16913 */\n mstore\n /* \"#utility.yul\":16930:17018 */\n tag_517\n /* \"#utility.yul\":17013:17017 */\n dup2\n /* \"#utility.yul\":17004:17010 */\n dup6\n /* \"#utility.yul\":16996:17002 */\n dup8\n /* \"#utility.yul\":16930:17018 */\n tag_326\n jump\t// in\n tag_517:\n /* \"#utility.yul\":16922:17018 */\n swap1\n pop\n /* \"#utility.yul\":17028:17096 */\n tag_518\n /* \"#utility.yul\":17092:17094 */\n 0x40\n /* \"#utility.yul\":17081:17090 */\n dup4\n /* \"#utility.yul\":17077:17095 */\n add\n /* \"#utility.yul\":17068:17074 */\n dup5\n /* \"#utility.yul\":17028:17096 */\n tag_299\n jump\t// in\n tag_518:\n /* \"#utility.yul\":16447:17103 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17109:17551 */\n tag_275:\n /* \"#utility.yul\":17258:17262 */\n 0x00\n /* \"#utility.yul\":17296:17298 */\n 0x60\n /* \"#utility.yul\":17285:17294 */\n dup3\n /* \"#utility.yul\":17281:17299 */\n add\n /* \"#utility.yul\":17273:17299 */\n swap1\n pop\n /* \"#utility.yul\":17309:17380 */\n tag_520\n /* \"#utility.yul\":17377:17378 */\n 0x00\n /* \"#utility.yul\":17366:17375 */\n dup4\n /* \"#utility.yul\":17362:17379 */\n add\n /* \"#utility.yul\":17353:17359 */\n dup7\n /* \"#utility.yul\":17309:17380 */\n tag_281\n jump\t// in\n tag_520:\n /* \"#utility.yul\":17390:17462 */\n tag_521\n /* \"#utility.yul\":17458:17460 */\n 0x20\n /* \"#utility.yul\":17447:17456 */\n dup4\n /* \"#utility.yul\":17443:17461 */\n add\n /* \"#utility.yul\":17434:17440 */\n dup6\n /* \"#utility.yul\":17390:17462 */\n tag_281\n jump\t// in\n tag_521:\n /* \"#utility.yul\":17472:17544 */\n tag_522\n /* \"#utility.yul\":17540:17542 */\n 0x40\n /* \"#utility.yul\":17529:17538 */\n dup4\n /* \"#utility.yul\":17525:17543 */\n add\n /* \"#utility.yul\":17516:17522 */\n dup5\n /* \"#utility.yul\":17472:17544 */\n tag_281\n jump\t// in\n tag_522:\n /* \"#utility.yul\":17109:17551 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220e4e422b8a9b7f9d0a8d04f79283e40d5cc607e645371ffe4686666fa28636f8c64736f6c634300080b0033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "608060405273fffffffede9001a6f7f4798ccb76ef1e7f6647016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fffffffede9001a6f7f4798ccb76ef1e7f664701600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b5061205c806100c96000396000f3fe60806040526004361061016a5760003560e01c806384810219116100d1578063a9059cbb1161008a578063ee5dc1e411610064578063ee5dc1e4146105c1578063f0350c04146105fe578063f5bfbd8a1461063b578063f8bf8e951461067857610171565b8063a9059cbb1461051c578063d3ba4b9e14610559578063dd62ed3e1461058457610171565b806384810219146103e65780638d1fdf2f1461040f57806395d89b411461044c5780639b5067e7146104775780639dc29fac146104a2578063a887c981146104df57610171565b8063313ce56711610123578063313ce5671461029c57806340c10f19146102c75780635ea20216146103045780636b8751c11461034157806370a082311461036c5780637eea1205146103a957610171565b80630131222f1461017657806306fdde03146101a1578063095ea7b3146101cc57806318160ddd146102095780631cddec191461023457806323b872dd1461025f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6106b5565b6040516101989190611766565b60405180910390f35b3480156101ad57600080fd5b506101b66106df565b6040516101c3919061181a565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906118b2565b61077a565b604051610200919061190d565b60405180910390f35b34801561021557600080fd5b5061021e610823565b60405161022b9190611937565b60405180910390f35b34801561024057600080fd5b506102496108ba565b604051610256919061190d565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611952565b610953565b604051610293919061190d565b60405180910390f35b3480156102a857600080fd5b506102b16109ff565b6040516102be91906119c1565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906118b2565b610a96565b6040516102fb919061190d565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906119dc565b610b3f565b604051610338919061190d565b60405180910390f35b34801561034d57600080fd5b50610356610be5565b604051610363919061190d565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906119dc565b610c7e565b6040516103a09190611937565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190611952565b610d22565b6040516103dd919061190d565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906119dc565b610e50565b005b34801561041b57600080fd5b50610436600480360381019061043191906119dc565b610ed4565b604051610443919061190d565b60405180910390f35b34801561045857600080fd5b50610461610f7a565b60405161046e919061181a565b60405180910390f35b34801561048357600080fd5b5061048c611015565b6040516104999190611a68565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906118b2565b611039565b6040516104d6919061190d565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906118b2565b6110e2565b604051610513919061190d565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e91906118b2565b61120d565b604051610550919061190d565b60405180910390f35b34801561056557600080fd5b5061056e6112b6565b60405161057b919061190d565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190611a83565b61134f565b6040516105b89190611937565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190611b54565b6113f6565b6040516105f5919061190d565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906119dc565b6114a8565b604051610632919061190d565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906118b2565b61154e565b60405161066f919061190d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190611be9565b611679565b6040516106ac919061190d565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906107759190611d5d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b81526004016107d8929190611da6565b6020604051808303816000875af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611e3d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016109b393929190611e6a565b6020604051808303816000875af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611dfb565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611eb6565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610af4929190611da6565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ea20216836040518263ffffffff1660e01b8152600401610b9b9190611766565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611dfb565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610cda9190611766565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611e3d565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16868686604051602401610d7593929190611e6a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dff9190611f2a565b600060405180830381855af49150503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b509150915081925050509392505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1fdf2f836040518263ffffffff1660e01b8152600401610f309190611766565b6020604051808303816000875af1158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611dfb565b9050919050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fe7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110109190611d5d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84846040518363ffffffff1660e01b8152600401611097929190611da6565b6020604051808303816000875af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da9190611dfb565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401611133929190611da6565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111bd9190611f2a565b600060405180830381855af49150503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b815260040161126b929190611da6565b6020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ba4b9e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b81526004016113ad929190611f41565b602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190611e3d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee5dc1e487878787876040518663ffffffff1660e01b815260040161145a959493929190611fa6565b6020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d9190611dfb565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0350c04836040518263ffffffff1660e01b81526004016115049190611766565b6020604051808303816000875af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190611dfb565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858560405160240161159f929190611da6565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116299190611f2a565b600060405180830381855af49150503d8060008114611664576040519150601f19603f3d011682016040523d82523d6000602084013e611669565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8bf8e958585856040518463ffffffff1660e01b81526004016116d993929190611fef565b6020604051808303816000875af11580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190611dfb565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061175082611725565b9050919050565b61176081611745565b82525050565b600060208201905061177b6000830184611757565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117bb5780820151818401526020810190506117a0565b838111156117ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006117ec82611781565b6117f6818561178c565b935061180681856020860161179d565b61180f816117d0565b840191505092915050565b6000602082019050818103600083015261183481846117e1565b905092915050565b6000604051905090565b600080fd5b600080fd5b61185981611745565b811461186457600080fd5b50565b60008135905061187681611850565b92915050565b6000819050919050565b61188f8161187c565b811461189a57600080fd5b50565b6000813590506118ac81611886565b92915050565b600080604083850312156118c9576118c8611846565b5b60006118d785828601611867565b92505060206118e88582860161189d565b9150509250929050565b60008115159050919050565b611907816118f2565b82525050565b600060208201905061192260008301846118fe565b92915050565b6119318161187c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008060006060848603121561196b5761196a611846565b5b600061197986828701611867565b935050602061198a86828701611867565b925050604061199b8682870161189d565b9150509250925092565b600060ff82169050919050565b6119bb816119a5565b82525050565b60006020820190506119d660008301846119b2565b92915050565b6000602082840312156119f2576119f1611846565b5b6000611a0084828501611867565b91505092915050565b6000819050919050565b6000611a2e611a29611a2484611725565b611a09565b611725565b9050919050565b6000611a4082611a13565b9050919050565b6000611a5282611a35565b9050919050565b611a6281611a47565b82525050565b6000602082019050611a7d6000830184611a59565b92915050565b60008060408385031215611a9a57611a99611846565b5b6000611aa885828601611867565b9250506020611ab985828601611867565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ae857611ae7611ac3565b5b8235905067ffffffffffffffff811115611b0557611b04611ac8565b5b602083019150836001820283011115611b2157611b20611acd565b5b9250929050565b611b31816119a5565b8114611b3c57600080fd5b50565b600081359050611b4e81611b28565b92915050565b600080600080600060608688031215611b7057611b6f611846565b5b600086013567ffffffffffffffff811115611b8e57611b8d61184b565b5b611b9a88828901611ad2565b9550955050602086013567ffffffffffffffff811115611bbd57611bbc61184b565b5b611bc988828901611ad2565b93509350506040611bdc88828901611b3f565b9150509295509295909350565b600080600060608486031215611c0257611c01611846565b5b6000611c1086828701611867565b9350506020611c2186828701611867565b9250506040611c3286828701611867565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c79826117d0565b810181811067ffffffffffffffff82111715611c9857611c97611c41565b5b80604052505050565b6000611cab61183c565b9050611cb78282611c70565b919050565b600067ffffffffffffffff821115611cd757611cd6611c41565b5b611ce0826117d0565b9050602081019050919050565b6000611d00611cfb84611cbc565b611ca1565b905082815260208101848484011115611d1c57611d1b611c3c565b5b611d2784828561179d565b509392505050565b600082601f830112611d4457611d43611ac3565b5b8151611d54848260208601611ced565b91505092915050565b600060208284031215611d7357611d72611846565b5b600082015167ffffffffffffffff811115611d9157611d9061184b565b5b611d9d84828501611d2f565b91505092915050565b6000604082019050611dbb6000830185611757565b611dc86020830184611928565b9392505050565b611dd8816118f2565b8114611de357600080fd5b50565b600081519050611df581611dcf565b92915050565b600060208284031215611e1157611e10611846565b5b6000611e1f84828501611de6565b91505092915050565b600081519050611e3781611886565b92915050565b600060208284031215611e5357611e52611846565b5b6000611e6184828501611e28565b91505092915050565b6000606082019050611e7f6000830186611757565b611e8c6020830185611757565b611e996040830184611928565b949350505050565b600081519050611eb081611b28565b92915050565b600060208284031215611ecc57611ecb611846565b5b6000611eda84828501611ea1565b91505092915050565b600081519050919050565b600081905092915050565b6000611f0482611ee3565b611f0e8185611eee565b9350611f1e81856020860161179d565b80840191505092915050565b6000611f368284611ef9565b915081905092915050565b6000604082019050611f566000830185611757565b611f636020830184611757565b9392505050565b82818337600083830152505050565b6000611f85838561178c565b9350611f92838584611f6a565b611f9b836117d0565b840190509392505050565b60006060820190508181036000830152611fc1818789611f79565b90508181036020830152611fd6818587611f79565b9050611fe560408301846119b2565b9695505050505050565b60006060820190506120046000830186611757565b6120116020830185611757565b61201e6040830184611757565b94935050505056fea2646970667358221220bb130f9250effb623338d0a0c315a1bcd08d8c15c5754a8191f2673314da04c464736f6c634300080b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFEDE9001A6F7F4798CCB76EF1E7F664701 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH20 0xFFFFFFFEDE9001A6F7F4798CCB76EF1E7F664701 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x205C DUP1 PUSH2 0xC9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x16A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x84810219 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xEE5DC1E4 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xEE5DC1E4 EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0xF0350C04 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xF8BF8E95 EQ PUSH2 0x678 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x51C JUMPI DUP1 PUSH4 0xD3BA4B9E EQ PUSH2 0x559 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x584 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x84810219 EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x8D1FDF2F EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0x9B5067E7 EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x4DF JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x5EA20216 EQ PUSH2 0x304 JUMPI DUP1 PUSH4 0x6B8751C1 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x3A9 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x131222F EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x1CDDEC19 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x25F JUMPI PUSH2 0x171 JUMP JUMPDEST CALLDATASIZE PUSH2 0x171 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x6B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x198 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C3 SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EE SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x77A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x200 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21E PUSH2 0x823 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22B SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x256 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x286 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x281 SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0x953 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x293 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B1 PUSH2 0x9FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2BE SWAP2 SWAP1 PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2E9 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0xA96 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2FB SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x326 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xB3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x338 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x356 PUSH2 0xBE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x363 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x393 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x38E SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3A0 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x3CB SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0xD22 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DD SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x408 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xE50 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x436 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x431 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xED4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x443 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x461 PUSH2 0xF7A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x46E SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x499 SWAP2 SWAP1 PUSH2 0x1A68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4C4 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x1039 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x506 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x501 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x10E2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x513 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x543 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x53E SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x550 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x56E PUSH2 0x12B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57B SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AB PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5A6 SWAP2 SWAP1 PUSH2 0x1A83 JUMP JUMPDEST PUSH2 0x134F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B8 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5E3 SWAP2 SWAP1 PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x13F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F5 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x625 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x620 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0x14A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x632 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x662 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x65D SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x154E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66F SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x69A SWAP2 SWAP1 PUSH2 0x1BE9 JUMP JUMPDEST PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6AC SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x74C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7D8 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x81B SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x891 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B5 SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1CDDEC19 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x92A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9F6 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA91 SWAP2 SWAP1 PUSH2 0x1EB6 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAF4 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB37 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EA20216 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB9B SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBBA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBDE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6B8751C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC79 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCDA SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD1B SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD75 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE3A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8D1FDF2F DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF30 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1010 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1097 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DA SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1133 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x11BD SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11F8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x11FD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x126B SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x128A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD3BA4B9E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x134A SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13AD SWAP3 SWAP2 SWAP1 PUSH2 0x1F41 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EE SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xEE5DC1E4 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x145A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x149D SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0350C04 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1504 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1523 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1547 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x159F SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x1629 SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1664 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1669 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF8BF8E95 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x171C SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1750 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1760 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x177B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17BB JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x17A0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x17CA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17EC DUP3 PUSH2 0x1781 JUMP JUMPDEST PUSH2 0x17F6 DUP2 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1806 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST PUSH2 0x180F DUP2 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1834 DUP2 DUP5 PUSH2 0x17E1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1859 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP2 EQ PUSH2 0x1864 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1876 DUP2 PUSH2 0x1850 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x188F DUP2 PUSH2 0x187C JUMP JUMPDEST DUP2 EQ PUSH2 0x189A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x18AC DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x18C9 JUMPI PUSH2 0x18C8 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x18D7 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x18E8 DUP6 DUP3 DUP7 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1907 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1922 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x18FE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1931 DUP2 PUSH2 0x187C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x194C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x196B JUMPI PUSH2 0x196A PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1979 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x198A DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x199B DUP7 DUP3 DUP8 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x19BB DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x19D6 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19F2 JUMPI PUSH2 0x19F1 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1A00 DUP5 DUP3 DUP6 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A2E PUSH2 0x1A29 PUSH2 0x1A24 DUP5 PUSH2 0x1725 JUMP JUMPDEST PUSH2 0x1A09 JUMP JUMPDEST PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A40 DUP3 PUSH2 0x1A13 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A52 DUP3 PUSH2 0x1A35 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A62 DUP2 PUSH2 0x1A47 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A7D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1A59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9A JUMPI PUSH2 0x1A99 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1AA8 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1AB9 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1AE8 JUMPI PUSH2 0x1AE7 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B05 JUMPI PUSH2 0x1B04 PUSH2 0x1AC8 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1B21 JUMPI PUSH2 0x1B20 PUSH2 0x1ACD JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1B31 DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP2 EQ PUSH2 0x1B3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1B4E DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1B70 JUMPI PUSH2 0x1B6F PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B8E JUMPI PUSH2 0x1B8D PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1B9A DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BBD JUMPI PUSH2 0x1BBC PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1BC9 DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP PUSH1 0x40 PUSH2 0x1BDC DUP9 DUP3 DUP10 ADD PUSH2 0x1B3F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1C02 JUMPI PUSH2 0x1C01 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1C10 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1C21 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1C32 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1C79 DUP3 PUSH2 0x17D0 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C98 JUMPI PUSH2 0x1C97 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CAB PUSH2 0x183C JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB7 DUP3 DUP3 PUSH2 0x1C70 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CD7 JUMPI PUSH2 0x1CD6 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST PUSH2 0x1CE0 DUP3 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D00 PUSH2 0x1CFB DUP5 PUSH2 0x1CBC JUMP JUMPDEST PUSH2 0x1CA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x1D1C JUMPI PUSH2 0x1D1B PUSH2 0x1C3C JUMP JUMPDEST JUMPDEST PUSH2 0x1D27 DUP5 DUP3 DUP6 PUSH2 0x179D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D44 JUMPI PUSH2 0x1D43 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1D54 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1CED JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D73 JUMPI PUSH2 0x1D72 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D91 JUMPI PUSH2 0x1D90 PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1D9D DUP5 DUP3 DUP6 ADD PUSH2 0x1D2F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1DBB PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1DC8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1DD8 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP2 EQ PUSH2 0x1DE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1DF5 DUP2 PUSH2 0x1DCF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E11 JUMPI PUSH2 0x1E10 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E1F DUP5 DUP3 DUP6 ADD PUSH2 0x1DE6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1E37 DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E53 JUMPI PUSH2 0x1E52 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E61 DUP5 DUP3 DUP6 ADD PUSH2 0x1E28 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1E7F PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E8C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E99 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1EB0 DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ECC JUMPI PUSH2 0x1ECB PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1EDA DUP5 DUP3 DUP6 ADD PUSH2 0x1EA1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F04 DUP3 PUSH2 0x1EE3 JUMP JUMPDEST PUSH2 0x1F0E DUP2 DUP6 PUSH2 0x1EEE JUMP JUMPDEST SWAP4 POP PUSH2 0x1F1E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F36 DUP3 DUP5 PUSH2 0x1EF9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1F56 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1F63 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F85 DUP4 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1F92 DUP4 DUP6 DUP5 PUSH2 0x1F6A JUMP JUMPDEST PUSH2 0x1F9B DUP4 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1FC1 DUP2 DUP8 DUP10 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1FD6 DUP2 DUP6 DUP8 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP PUSH2 0x1FE5 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2004 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x2011 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x201E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB SGT 0xF SWAP3 POP 0xEF 0xFB PUSH3 0x3338D0 LOG0 0xC3 ISZERO LOG1 0xBC 0xD0 DUP14 DUP13 ISZERO 0xC5 PUSH22 0x4A8191F2673314DA04C464736F6C634300080B003300 ", - "sourceMap": "6591:5473:0:-:0;;;6800:42;6727:116;;;;;;;;;;;;;;;;;;;;6886:42;6853:75;;;;;;;;;;;;;;;;;;;;6591:5473;;;;;;;;;;;;;;;;" + "object": "608060405273fffffffede9001a6f7f4798ccb76ef1e7f6647016000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fffffffede9001a6f7f4798ccb76ef1e7f664701600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100b957600080fd5b5061205c806100c96000396000f3fe60806040526004361061016a5760003560e01c806384810219116100d1578063a9059cbb1161008a578063ee5dc1e411610064578063ee5dc1e4146105c1578063f0350c04146105fe578063f5bfbd8a1461063b578063f8bf8e951461067857610171565b8063a9059cbb1461051c578063d3ba4b9e14610559578063dd62ed3e1461058457610171565b806384810219146103e65780638d1fdf2f1461040f57806395d89b411461044c5780639b5067e7146104775780639dc29fac146104a2578063a887c981146104df57610171565b8063313ce56711610123578063313ce5671461029c57806340c10f19146102c75780635ea20216146103045780636b8751c11461034157806370a082311461036c5780637eea1205146103a957610171565b80630131222f1461017657806306fdde03146101a1578063095ea7b3146101cc57806318160ddd146102095780631cddec191461023457806323b872dd1461025f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6106b5565b6040516101989190611766565b60405180910390f35b3480156101ad57600080fd5b506101b66106df565b6040516101c3919061181a565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906118b2565b61077a565b604051610200919061190d565b60405180910390f35b34801561021557600080fd5b5061021e610823565b60405161022b9190611937565b60405180910390f35b34801561024057600080fd5b506102496108ba565b604051610256919061190d565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611952565b610953565b604051610293919061190d565b60405180910390f35b3480156102a857600080fd5b506102b16109ff565b6040516102be91906119c1565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906118b2565b610a96565b6040516102fb919061190d565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906119dc565b610b3f565b604051610338919061190d565b60405180910390f35b34801561034d57600080fd5b50610356610be5565b604051610363919061190d565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906119dc565b610c7e565b6040516103a09190611937565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190611952565b610d22565b6040516103dd919061190d565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906119dc565b610e50565b005b34801561041b57600080fd5b50610436600480360381019061043191906119dc565b610ed4565b604051610443919061190d565b60405180910390f35b34801561045857600080fd5b50610461610f7a565b60405161046e919061181a565b60405180910390f35b34801561048357600080fd5b5061048c611015565b6040516104999190611a68565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906118b2565b611039565b6040516104d6919061190d565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906118b2565b6110e2565b604051610513919061190d565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e91906118b2565b61120d565b604051610550919061190d565b60405180910390f35b34801561056557600080fd5b5061056e6112b6565b60405161057b919061190d565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190611a83565b61134f565b6040516105b89190611937565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190611b54565b6113f6565b6040516105f5919061190d565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906119dc565b6114a8565b604051610632919061190d565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906118b2565b61154e565b60405161066f919061190d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190611be9565b611679565b6040516106ac919061190d565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906107759190611d5d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b81526004016107d8929190611da6565b6020604051808303816000875af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611e3d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016109b393929190611e6a565b6020604051808303816000875af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611dfb565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611eb6565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610af4929190611da6565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ea20216836040518263ffffffff1660e01b8152600401610b9b9190611766565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611dfb565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610cda9190611766565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611e3d565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16868686604051602401610d7593929190611e6a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dff9190611f2a565b600060405180830381855af49150503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b509150915081925050509392505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1fdf2f836040518263ffffffff1660e01b8152600401610f309190611766565b6020604051808303816000875af1158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611dfb565b9050919050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fe7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110109190611d5d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84846040518363ffffffff1660e01b8152600401611097929190611da6565b6020604051808303816000875af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da9190611dfb565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401611133929190611da6565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111bd9190611f2a565b600060405180830381855af49150503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b815260040161126b929190611da6565b6020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ba4b9e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b81526004016113ad929190611f41565b602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190611e3d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee5dc1e487878787876040518663ffffffff1660e01b815260040161145a959493929190611fa6565b6020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d9190611dfb565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0350c04836040518263ffffffff1660e01b81526004016115049190611766565b6020604051808303816000875af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190611dfb565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858560405160240161159f929190611da6565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116299190611f2a565b600060405180830381855af49150503d8060008114611664576040519150601f19603f3d011682016040523d82523d6000602084013e611669565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8bf8e958585856040518463ffffffff1660e01b81526004016116d993929190611fef565b6020604051808303816000875af11580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190611dfb565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061175082611725565b9050919050565b61176081611745565b82525050565b600060208201905061177b6000830184611757565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117bb5780820151818401526020810190506117a0565b838111156117ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006117ec82611781565b6117f6818561178c565b935061180681856020860161179d565b61180f816117d0565b840191505092915050565b6000602082019050818103600083015261183481846117e1565b905092915050565b6000604051905090565b600080fd5b600080fd5b61185981611745565b811461186457600080fd5b50565b60008135905061187681611850565b92915050565b6000819050919050565b61188f8161187c565b811461189a57600080fd5b50565b6000813590506118ac81611886565b92915050565b600080604083850312156118c9576118c8611846565b5b60006118d785828601611867565b92505060206118e88582860161189d565b9150509250929050565b60008115159050919050565b611907816118f2565b82525050565b600060208201905061192260008301846118fe565b92915050565b6119318161187c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008060006060848603121561196b5761196a611846565b5b600061197986828701611867565b935050602061198a86828701611867565b925050604061199b8682870161189d565b9150509250925092565b600060ff82169050919050565b6119bb816119a5565b82525050565b60006020820190506119d660008301846119b2565b92915050565b6000602082840312156119f2576119f1611846565b5b6000611a0084828501611867565b91505092915050565b6000819050919050565b6000611a2e611a29611a2484611725565b611a09565b611725565b9050919050565b6000611a4082611a13565b9050919050565b6000611a5282611a35565b9050919050565b611a6281611a47565b82525050565b6000602082019050611a7d6000830184611a59565b92915050565b60008060408385031215611a9a57611a99611846565b5b6000611aa885828601611867565b9250506020611ab985828601611867565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ae857611ae7611ac3565b5b8235905067ffffffffffffffff811115611b0557611b04611ac8565b5b602083019150836001820283011115611b2157611b20611acd565b5b9250929050565b611b31816119a5565b8114611b3c57600080fd5b50565b600081359050611b4e81611b28565b92915050565b600080600080600060608688031215611b7057611b6f611846565b5b600086013567ffffffffffffffff811115611b8e57611b8d61184b565b5b611b9a88828901611ad2565b9550955050602086013567ffffffffffffffff811115611bbd57611bbc61184b565b5b611bc988828901611ad2565b93509350506040611bdc88828901611b3f565b9150509295509295909350565b600080600060608486031215611c0257611c01611846565b5b6000611c1086828701611867565b9350506020611c2186828701611867565b9250506040611c3286828701611867565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c79826117d0565b810181811067ffffffffffffffff82111715611c9857611c97611c41565b5b80604052505050565b6000611cab61183c565b9050611cb78282611c70565b919050565b600067ffffffffffffffff821115611cd757611cd6611c41565b5b611ce0826117d0565b9050602081019050919050565b6000611d00611cfb84611cbc565b611ca1565b905082815260208101848484011115611d1c57611d1b611c3c565b5b611d2784828561179d565b509392505050565b600082601f830112611d4457611d43611ac3565b5b8151611d54848260208601611ced565b91505092915050565b600060208284031215611d7357611d72611846565b5b600082015167ffffffffffffffff811115611d9157611d9061184b565b5b611d9d84828501611d2f565b91505092915050565b6000604082019050611dbb6000830185611757565b611dc86020830184611928565b9392505050565b611dd8816118f2565b8114611de357600080fd5b50565b600081519050611df581611dcf565b92915050565b600060208284031215611e1157611e10611846565b5b6000611e1f84828501611de6565b91505092915050565b600081519050611e3781611886565b92915050565b600060208284031215611e5357611e52611846565b5b6000611e6184828501611e28565b91505092915050565b6000606082019050611e7f6000830186611757565b611e8c6020830185611757565b611e996040830184611928565b949350505050565b600081519050611eb081611b28565b92915050565b600060208284031215611ecc57611ecb611846565b5b6000611eda84828501611ea1565b91505092915050565b600081519050919050565b600081905092915050565b6000611f0482611ee3565b611f0e8185611eee565b9350611f1e81856020860161179d565b80840191505092915050565b6000611f368284611ef9565b915081905092915050565b6000604082019050611f566000830185611757565b611f636020830184611757565b9392505050565b82818337600083830152505050565b6000611f85838561178c565b9350611f92838584611f6a565b611f9b836117d0565b840190509392505050565b60006060820190508181036000830152611fc1818789611f79565b90508181036020830152611fd6818587611f79565b9050611fe560408301846119b2565b9695505050505050565b60006060820190506120046000830186611757565b6120116020830185611757565b61201e6040830184611757565b94935050505056fea2646970667358221220e4e422b8a9b7f9d0a8d04f79283e40d5cc607e645371ffe4686666fa28636f8c64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xFFFFFFFEDE9001A6F7F4798CCB76EF1E7F664701 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH20 0xFFFFFFFEDE9001A6F7F4798CCB76EF1E7F664701 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0xB9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x205C DUP1 PUSH2 0xC9 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x16A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x84810219 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xEE5DC1E4 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xEE5DC1E4 EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0xF0350C04 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xF8BF8E95 EQ PUSH2 0x678 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x51C JUMPI DUP1 PUSH4 0xD3BA4B9E EQ PUSH2 0x559 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x584 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x84810219 EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x8D1FDF2F EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0x9B5067E7 EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x4DF JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x5EA20216 EQ PUSH2 0x304 JUMPI DUP1 PUSH4 0x6B8751C1 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x3A9 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x131222F EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x1CDDEC19 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x25F JUMPI PUSH2 0x171 JUMP JUMPDEST CALLDATASIZE PUSH2 0x171 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x6B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x198 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C3 SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EE SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x77A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x200 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21E PUSH2 0x823 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22B SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x256 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x286 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x281 SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0x953 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x293 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B1 PUSH2 0x9FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2BE SWAP2 SWAP1 PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2E9 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0xA96 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2FB SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x326 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xB3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x338 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x356 PUSH2 0xBE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x363 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x393 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x38E SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3A0 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x3CB SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0xD22 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DD SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x408 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xE50 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x436 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x431 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xED4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x443 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x461 PUSH2 0xF7A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x46E SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x499 SWAP2 SWAP1 PUSH2 0x1A68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4C4 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x1039 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x506 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x501 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x10E2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x513 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x543 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x53E SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x550 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x56E PUSH2 0x12B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57B SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AB PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5A6 SWAP2 SWAP1 PUSH2 0x1A83 JUMP JUMPDEST PUSH2 0x134F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B8 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5E3 SWAP2 SWAP1 PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x13F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F5 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x625 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x620 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0x14A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x632 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x662 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x65D SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x154E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66F SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x69A SWAP2 SWAP1 PUSH2 0x1BE9 JUMP JUMPDEST PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6AC SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x74C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7D8 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x81B SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x891 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B5 SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1CDDEC19 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x92A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9F6 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA91 SWAP2 SWAP1 PUSH2 0x1EB6 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAF4 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB37 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EA20216 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB9B SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBBA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBDE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6B8751C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC79 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCDA SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD1B SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD75 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE3A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8D1FDF2F DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF30 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1010 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1097 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DA SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1133 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x11BD SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11F8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x11FD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x126B SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x128A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD3BA4B9E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x134A SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13AD SWAP3 SWAP2 SWAP1 PUSH2 0x1F41 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EE SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xEE5DC1E4 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x145A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x149D SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0350C04 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1504 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1523 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1547 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x159F SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x1629 SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1664 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1669 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF8BF8E95 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x171C SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1750 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1760 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x177B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17BB JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x17A0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x17CA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17EC DUP3 PUSH2 0x1781 JUMP JUMPDEST PUSH2 0x17F6 DUP2 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1806 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST PUSH2 0x180F DUP2 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1834 DUP2 DUP5 PUSH2 0x17E1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1859 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP2 EQ PUSH2 0x1864 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1876 DUP2 PUSH2 0x1850 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x188F DUP2 PUSH2 0x187C JUMP JUMPDEST DUP2 EQ PUSH2 0x189A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x18AC DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x18C9 JUMPI PUSH2 0x18C8 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x18D7 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x18E8 DUP6 DUP3 DUP7 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1907 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1922 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x18FE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1931 DUP2 PUSH2 0x187C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x194C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x196B JUMPI PUSH2 0x196A PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1979 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x198A DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x199B DUP7 DUP3 DUP8 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x19BB DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x19D6 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19F2 JUMPI PUSH2 0x19F1 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1A00 DUP5 DUP3 DUP6 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A2E PUSH2 0x1A29 PUSH2 0x1A24 DUP5 PUSH2 0x1725 JUMP JUMPDEST PUSH2 0x1A09 JUMP JUMPDEST PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A40 DUP3 PUSH2 0x1A13 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A52 DUP3 PUSH2 0x1A35 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A62 DUP2 PUSH2 0x1A47 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A7D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1A59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9A JUMPI PUSH2 0x1A99 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1AA8 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1AB9 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1AE8 JUMPI PUSH2 0x1AE7 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B05 JUMPI PUSH2 0x1B04 PUSH2 0x1AC8 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1B21 JUMPI PUSH2 0x1B20 PUSH2 0x1ACD JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1B31 DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP2 EQ PUSH2 0x1B3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1B4E DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1B70 JUMPI PUSH2 0x1B6F PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B8E JUMPI PUSH2 0x1B8D PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1B9A DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BBD JUMPI PUSH2 0x1BBC PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1BC9 DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP PUSH1 0x40 PUSH2 0x1BDC DUP9 DUP3 DUP10 ADD PUSH2 0x1B3F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1C02 JUMPI PUSH2 0x1C01 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1C10 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1C21 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1C32 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1C79 DUP3 PUSH2 0x17D0 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C98 JUMPI PUSH2 0x1C97 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CAB PUSH2 0x183C JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB7 DUP3 DUP3 PUSH2 0x1C70 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CD7 JUMPI PUSH2 0x1CD6 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST PUSH2 0x1CE0 DUP3 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D00 PUSH2 0x1CFB DUP5 PUSH2 0x1CBC JUMP JUMPDEST PUSH2 0x1CA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x1D1C JUMPI PUSH2 0x1D1B PUSH2 0x1C3C JUMP JUMPDEST JUMPDEST PUSH2 0x1D27 DUP5 DUP3 DUP6 PUSH2 0x179D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D44 JUMPI PUSH2 0x1D43 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1D54 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1CED JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D73 JUMPI PUSH2 0x1D72 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D91 JUMPI PUSH2 0x1D90 PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1D9D DUP5 DUP3 DUP6 ADD PUSH2 0x1D2F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1DBB PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1DC8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1DD8 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP2 EQ PUSH2 0x1DE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1DF5 DUP2 PUSH2 0x1DCF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E11 JUMPI PUSH2 0x1E10 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E1F DUP5 DUP3 DUP6 ADD PUSH2 0x1DE6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1E37 DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E53 JUMPI PUSH2 0x1E52 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E61 DUP5 DUP3 DUP6 ADD PUSH2 0x1E28 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1E7F PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E8C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E99 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1EB0 DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ECC JUMPI PUSH2 0x1ECB PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1EDA DUP5 DUP3 DUP6 ADD PUSH2 0x1EA1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F04 DUP3 PUSH2 0x1EE3 JUMP JUMPDEST PUSH2 0x1F0E DUP2 DUP6 PUSH2 0x1EEE JUMP JUMPDEST SWAP4 POP PUSH2 0x1F1E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F36 DUP3 DUP5 PUSH2 0x1EF9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1F56 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1F63 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F85 DUP4 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1F92 DUP4 DUP6 DUP5 PUSH2 0x1F6A JUMP JUMPDEST PUSH2 0x1F9B DUP4 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1FC1 DUP2 DUP8 DUP10 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1FD6 DUP2 DUP6 DUP8 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP PUSH2 0x1FE5 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2004 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x2011 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x201E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE4 0xE4 0x22 0xB8 0xA9 0xB7 0xF9 0xD0 0xA8 0xD0 0x4F PUSH26 0x283E40D5CC607E645371FFE4686666FA28636F8C64736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "6560:4977:0:-:0;;;6768:42;6687:124;;;;;;;;;;;;;;;;;;;;6850:42;6817:75;;;;;;;;;;;;;;;;;;;;6560:4977;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "functionDebugData": { @@ -9823,9 +9823,9 @@ ], "immutableReferences": {}, "linkReferences": {}, - "object": "60806040526004361061016a5760003560e01c806384810219116100d1578063a9059cbb1161008a578063ee5dc1e411610064578063ee5dc1e4146105c1578063f0350c04146105fe578063f5bfbd8a1461063b578063f8bf8e951461067857610171565b8063a9059cbb1461051c578063d3ba4b9e14610559578063dd62ed3e1461058457610171565b806384810219146103e65780638d1fdf2f1461040f57806395d89b411461044c5780639b5067e7146104775780639dc29fac146104a2578063a887c981146104df57610171565b8063313ce56711610123578063313ce5671461029c57806340c10f19146102c75780635ea20216146103045780636b8751c11461034157806370a082311461036c5780637eea1205146103a957610171565b80630131222f1461017657806306fdde03146101a1578063095ea7b3146101cc57806318160ddd146102095780631cddec191461023457806323b872dd1461025f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6106b5565b6040516101989190611766565b60405180910390f35b3480156101ad57600080fd5b506101b66106df565b6040516101c3919061181a565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906118b2565b61077a565b604051610200919061190d565b60405180910390f35b34801561021557600080fd5b5061021e610823565b60405161022b9190611937565b60405180910390f35b34801561024057600080fd5b506102496108ba565b604051610256919061190d565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611952565b610953565b604051610293919061190d565b60405180910390f35b3480156102a857600080fd5b506102b16109ff565b6040516102be91906119c1565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906118b2565b610a96565b6040516102fb919061190d565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906119dc565b610b3f565b604051610338919061190d565b60405180910390f35b34801561034d57600080fd5b50610356610be5565b604051610363919061190d565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906119dc565b610c7e565b6040516103a09190611937565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190611952565b610d22565b6040516103dd919061190d565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906119dc565b610e50565b005b34801561041b57600080fd5b50610436600480360381019061043191906119dc565b610ed4565b604051610443919061190d565b60405180910390f35b34801561045857600080fd5b50610461610f7a565b60405161046e919061181a565b60405180910390f35b34801561048357600080fd5b5061048c611015565b6040516104999190611a68565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906118b2565b611039565b6040516104d6919061190d565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906118b2565b6110e2565b604051610513919061190d565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e91906118b2565b61120d565b604051610550919061190d565b60405180910390f35b34801561056557600080fd5b5061056e6112b6565b60405161057b919061190d565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190611a83565b61134f565b6040516105b89190611937565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190611b54565b6113f6565b6040516105f5919061190d565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906119dc565b6114a8565b604051610632919061190d565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906118b2565b61154e565b60405161066f919061190d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190611be9565b611679565b6040516106ac919061190d565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906107759190611d5d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b81526004016107d8929190611da6565b6020604051808303816000875af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611e3d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016109b393929190611e6a565b6020604051808303816000875af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611dfb565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611eb6565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610af4929190611da6565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ea20216836040518263ffffffff1660e01b8152600401610b9b9190611766565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611dfb565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610cda9190611766565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611e3d565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16868686604051602401610d7593929190611e6a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dff9190611f2a565b600060405180830381855af49150503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b509150915081925050509392505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1fdf2f836040518263ffffffff1660e01b8152600401610f309190611766565b6020604051808303816000875af1158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611dfb565b9050919050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fe7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110109190611d5d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84846040518363ffffffff1660e01b8152600401611097929190611da6565b6020604051808303816000875af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da9190611dfb565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401611133929190611da6565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111bd9190611f2a565b600060405180830381855af49150503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b815260040161126b929190611da6565b6020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ba4b9e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b81526004016113ad929190611f41565b602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190611e3d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee5dc1e487878787876040518663ffffffff1660e01b815260040161145a959493929190611fa6565b6020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d9190611dfb565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0350c04836040518263ffffffff1660e01b81526004016115049190611766565b6020604051808303816000875af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190611dfb565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858560405160240161159f929190611da6565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116299190611f2a565b600060405180830381855af49150503d8060008114611664576040519150601f19603f3d011682016040523d82523d6000602084013e611669565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8bf8e958585856040518463ffffffff1660e01b81526004016116d993929190611fef565b6020604051808303816000875af11580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190611dfb565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061175082611725565b9050919050565b61176081611745565b82525050565b600060208201905061177b6000830184611757565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117bb5780820151818401526020810190506117a0565b838111156117ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006117ec82611781565b6117f6818561178c565b935061180681856020860161179d565b61180f816117d0565b840191505092915050565b6000602082019050818103600083015261183481846117e1565b905092915050565b6000604051905090565b600080fd5b600080fd5b61185981611745565b811461186457600080fd5b50565b60008135905061187681611850565b92915050565b6000819050919050565b61188f8161187c565b811461189a57600080fd5b50565b6000813590506118ac81611886565b92915050565b600080604083850312156118c9576118c8611846565b5b60006118d785828601611867565b92505060206118e88582860161189d565b9150509250929050565b60008115159050919050565b611907816118f2565b82525050565b600060208201905061192260008301846118fe565b92915050565b6119318161187c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008060006060848603121561196b5761196a611846565b5b600061197986828701611867565b935050602061198a86828701611867565b925050604061199b8682870161189d565b9150509250925092565b600060ff82169050919050565b6119bb816119a5565b82525050565b60006020820190506119d660008301846119b2565b92915050565b6000602082840312156119f2576119f1611846565b5b6000611a0084828501611867565b91505092915050565b6000819050919050565b6000611a2e611a29611a2484611725565b611a09565b611725565b9050919050565b6000611a4082611a13565b9050919050565b6000611a5282611a35565b9050919050565b611a6281611a47565b82525050565b6000602082019050611a7d6000830184611a59565b92915050565b60008060408385031215611a9a57611a99611846565b5b6000611aa885828601611867565b9250506020611ab985828601611867565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ae857611ae7611ac3565b5b8235905067ffffffffffffffff811115611b0557611b04611ac8565b5b602083019150836001820283011115611b2157611b20611acd565b5b9250929050565b611b31816119a5565b8114611b3c57600080fd5b50565b600081359050611b4e81611b28565b92915050565b600080600080600060608688031215611b7057611b6f611846565b5b600086013567ffffffffffffffff811115611b8e57611b8d61184b565b5b611b9a88828901611ad2565b9550955050602086013567ffffffffffffffff811115611bbd57611bbc61184b565b5b611bc988828901611ad2565b93509350506040611bdc88828901611b3f565b9150509295509295909350565b600080600060608486031215611c0257611c01611846565b5b6000611c1086828701611867565b9350506020611c2186828701611867565b9250506040611c3286828701611867565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c79826117d0565b810181811067ffffffffffffffff82111715611c9857611c97611c41565b5b80604052505050565b6000611cab61183c565b9050611cb78282611c70565b919050565b600067ffffffffffffffff821115611cd757611cd6611c41565b5b611ce0826117d0565b9050602081019050919050565b6000611d00611cfb84611cbc565b611ca1565b905082815260208101848484011115611d1c57611d1b611c3c565b5b611d2784828561179d565b509392505050565b600082601f830112611d4457611d43611ac3565b5b8151611d54848260208601611ced565b91505092915050565b600060208284031215611d7357611d72611846565b5b600082015167ffffffffffffffff811115611d9157611d9061184b565b5b611d9d84828501611d2f565b91505092915050565b6000604082019050611dbb6000830185611757565b611dc86020830184611928565b9392505050565b611dd8816118f2565b8114611de357600080fd5b50565b600081519050611df581611dcf565b92915050565b600060208284031215611e1157611e10611846565b5b6000611e1f84828501611de6565b91505092915050565b600081519050611e3781611886565b92915050565b600060208284031215611e5357611e52611846565b5b6000611e6184828501611e28565b91505092915050565b6000606082019050611e7f6000830186611757565b611e8c6020830185611757565b611e996040830184611928565b949350505050565b600081519050611eb081611b28565b92915050565b600060208284031215611ecc57611ecb611846565b5b6000611eda84828501611ea1565b91505092915050565b600081519050919050565b600081905092915050565b6000611f0482611ee3565b611f0e8185611eee565b9350611f1e81856020860161179d565b80840191505092915050565b6000611f368284611ef9565b915081905092915050565b6000604082019050611f566000830185611757565b611f636020830184611757565b9392505050565b82818337600083830152505050565b6000611f85838561178c565b9350611f92838584611f6a565b611f9b836117d0565b840190509392505050565b60006060820190508181036000830152611fc1818789611f79565b90508181036020830152611fd6818587611f79565b9050611fe560408301846119b2565b9695505050505050565b60006060820190506120046000830186611757565b6120116020830185611757565b61201e6040830184611757565b94935050505056fea2646970667358221220bb130f9250effb623338d0a0c315a1bcd08d8c15c5754a8191f2673314da04c464736f6c634300080b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x16A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x84810219 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xEE5DC1E4 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xEE5DC1E4 EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0xF0350C04 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xF8BF8E95 EQ PUSH2 0x678 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x51C JUMPI DUP1 PUSH4 0xD3BA4B9E EQ PUSH2 0x559 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x584 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x84810219 EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x8D1FDF2F EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0x9B5067E7 EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x4DF JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x5EA20216 EQ PUSH2 0x304 JUMPI DUP1 PUSH4 0x6B8751C1 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x3A9 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x131222F EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x1CDDEC19 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x25F JUMPI PUSH2 0x171 JUMP JUMPDEST CALLDATASIZE PUSH2 0x171 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x6B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x198 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C3 SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EE SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x77A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x200 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21E PUSH2 0x823 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22B SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x256 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x286 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x281 SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0x953 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x293 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B1 PUSH2 0x9FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2BE SWAP2 SWAP1 PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2E9 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0xA96 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2FB SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x326 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xB3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x338 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x356 PUSH2 0xBE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x363 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x393 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x38E SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3A0 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x3CB SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0xD22 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DD SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x408 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xE50 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x436 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x431 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xED4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x443 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x461 PUSH2 0xF7A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x46E SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x499 SWAP2 SWAP1 PUSH2 0x1A68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4C4 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x1039 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x506 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x501 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x10E2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x513 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x543 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x53E SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x550 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x56E PUSH2 0x12B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57B SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AB PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5A6 SWAP2 SWAP1 PUSH2 0x1A83 JUMP JUMPDEST PUSH2 0x134F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B8 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5E3 SWAP2 SWAP1 PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x13F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F5 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x625 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x620 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0x14A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x632 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x662 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x65D SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x154E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66F SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x69A SWAP2 SWAP1 PUSH2 0x1BE9 JUMP JUMPDEST PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6AC SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x74C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7D8 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x81B SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x891 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B5 SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1CDDEC19 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x92A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9F6 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA91 SWAP2 SWAP1 PUSH2 0x1EB6 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAF4 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB37 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EA20216 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB9B SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBBA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBDE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6B8751C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC79 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCDA SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD1B SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD75 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE3A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8D1FDF2F DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF30 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1010 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1097 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DA SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1133 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x11BD SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11F8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x11FD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x126B SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x128A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD3BA4B9E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x134A SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13AD SWAP3 SWAP2 SWAP1 PUSH2 0x1F41 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EE SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xEE5DC1E4 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x145A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x149D SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0350C04 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1504 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1523 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1547 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x159F SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x1629 SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1664 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1669 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF8BF8E95 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x171C SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1750 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1760 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x177B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17BB JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x17A0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x17CA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17EC DUP3 PUSH2 0x1781 JUMP JUMPDEST PUSH2 0x17F6 DUP2 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1806 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST PUSH2 0x180F DUP2 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1834 DUP2 DUP5 PUSH2 0x17E1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1859 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP2 EQ PUSH2 0x1864 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1876 DUP2 PUSH2 0x1850 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x188F DUP2 PUSH2 0x187C JUMP JUMPDEST DUP2 EQ PUSH2 0x189A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x18AC DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x18C9 JUMPI PUSH2 0x18C8 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x18D7 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x18E8 DUP6 DUP3 DUP7 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1907 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1922 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x18FE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1931 DUP2 PUSH2 0x187C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x194C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x196B JUMPI PUSH2 0x196A PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1979 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x198A DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x199B DUP7 DUP3 DUP8 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x19BB DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x19D6 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19F2 JUMPI PUSH2 0x19F1 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1A00 DUP5 DUP3 DUP6 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A2E PUSH2 0x1A29 PUSH2 0x1A24 DUP5 PUSH2 0x1725 JUMP JUMPDEST PUSH2 0x1A09 JUMP JUMPDEST PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A40 DUP3 PUSH2 0x1A13 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A52 DUP3 PUSH2 0x1A35 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A62 DUP2 PUSH2 0x1A47 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A7D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1A59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9A JUMPI PUSH2 0x1A99 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1AA8 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1AB9 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1AE8 JUMPI PUSH2 0x1AE7 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B05 JUMPI PUSH2 0x1B04 PUSH2 0x1AC8 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1B21 JUMPI PUSH2 0x1B20 PUSH2 0x1ACD JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1B31 DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP2 EQ PUSH2 0x1B3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1B4E DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1B70 JUMPI PUSH2 0x1B6F PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B8E JUMPI PUSH2 0x1B8D PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1B9A DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BBD JUMPI PUSH2 0x1BBC PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1BC9 DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP PUSH1 0x40 PUSH2 0x1BDC DUP9 DUP3 DUP10 ADD PUSH2 0x1B3F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1C02 JUMPI PUSH2 0x1C01 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1C10 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1C21 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1C32 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1C79 DUP3 PUSH2 0x17D0 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C98 JUMPI PUSH2 0x1C97 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CAB PUSH2 0x183C JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB7 DUP3 DUP3 PUSH2 0x1C70 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CD7 JUMPI PUSH2 0x1CD6 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST PUSH2 0x1CE0 DUP3 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D00 PUSH2 0x1CFB DUP5 PUSH2 0x1CBC JUMP JUMPDEST PUSH2 0x1CA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x1D1C JUMPI PUSH2 0x1D1B PUSH2 0x1C3C JUMP JUMPDEST JUMPDEST PUSH2 0x1D27 DUP5 DUP3 DUP6 PUSH2 0x179D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D44 JUMPI PUSH2 0x1D43 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1D54 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1CED JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D73 JUMPI PUSH2 0x1D72 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D91 JUMPI PUSH2 0x1D90 PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1D9D DUP5 DUP3 DUP6 ADD PUSH2 0x1D2F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1DBB PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1DC8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1DD8 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP2 EQ PUSH2 0x1DE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1DF5 DUP2 PUSH2 0x1DCF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E11 JUMPI PUSH2 0x1E10 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E1F DUP5 DUP3 DUP6 ADD PUSH2 0x1DE6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1E37 DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E53 JUMPI PUSH2 0x1E52 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E61 DUP5 DUP3 DUP6 ADD PUSH2 0x1E28 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1E7F PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E8C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E99 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1EB0 DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ECC JUMPI PUSH2 0x1ECB PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1EDA DUP5 DUP3 DUP6 ADD PUSH2 0x1EA1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F04 DUP3 PUSH2 0x1EE3 JUMP JUMPDEST PUSH2 0x1F0E DUP2 DUP6 PUSH2 0x1EEE JUMP JUMPDEST SWAP4 POP PUSH2 0x1F1E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F36 DUP3 DUP5 PUSH2 0x1EF9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1F56 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1F63 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F85 DUP4 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1F92 DUP4 DUP6 DUP5 PUSH2 0x1F6A JUMP JUMPDEST PUSH2 0x1F9B DUP4 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1FC1 DUP2 DUP8 DUP10 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1FD6 DUP2 DUP6 DUP8 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP PUSH2 0x1FE5 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2004 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x2011 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x201E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBB SGT 0xF SWAP3 POP 0xEF 0xFB PUSH3 0x3338D0 LOG0 0xC3 ISZERO LOG1 0xBC 0xD0 DUP14 DUP13 ISZERO 0xC5 PUSH22 0x4A8191F2673314DA04C464736F6C634300080B003300 ", - "sourceMap": "6591:5473:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7268:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7396:205;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10928:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8081:212;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9727:123;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11419:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7862:205;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8966:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9439:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9586:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8319:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11687:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7039:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9288:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7627:209;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6727:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9125:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10616:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8799:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10459:131;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8567:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10236:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9864:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11099:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10035:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7268:114;7311:7;7345:22;;;;;;;;;;;7338:29;;7268:114;:::o;7396:205::-;7444:13;7564:15;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7557:29;;7396:205;:::o;10928:157::-;11004:4;11031:15;;;;;;;;;;;:23;;;11055:7;11064:5;11031:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11024:46;;10928:157;;;;:::o;8081:212::-;8136:7;8249:15;;;;;;;;;;;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8242:36;;8081:212;:::o;9727:123::-;9776:4;9807:15;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9800:35;;9727:123;:::o;11419:242::-;11570:4;11601:15;;;;;;;;;;;:28;;;11630:4;11636:2;11640:5;11601:45;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11594:52;;11419:242;;;;;:::o;7862:205::-;7914:5;8026:15;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8019:33;;7862:205;:::o;8966:145::-;9034:4;9065:15;;;;;;;;;;;:20;;;9086:2;9090:5;9065:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9058:38;;8966:145;;;;:::o;9439:133::-;9497:4;9528:15;;;;;;;;;;;:20;;;9549:7;9528:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9521:36;;9439:133;;;:::o;9586:127::-;9637:4;9668:15;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9661:37;;9586:127;:::o;8319:222::-;8383:7;8496:15;;;;;;;;;;;:25;;;8522:3;8496:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8489:37;;8319:222;;;:::o;11687:371::-;11826:4;11847:11;11860:17;11881:22;;;;;;;;;;;:35;;11999:4;12005:2;12009:5;11934:81;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11881:135;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11846:170;;;;12037:6;12030:13;;;;11687:371;;;;;:::o;7039:215::-;7163:16;7121:15;;:59;;;;;;;;;;;;;;;;;;7223:16;7198:22;;:41;;;;;;;;;;;;;;;;;;7039:215;:::o;9288:137::-;9348:4;9379:15;;;;;;;;;;;:22;;;9402:7;9379:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9372:38;;9288:137;;;:::o;7627:209::-;7677:13;7797:15;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7790:31;;7627:209;:::o;6727:116::-;;;;;;;;;;;;:::o;9125:149::-;9195:4;9226:15;;;;;;;;;;;:20;;;9247:4;9253:5;9226:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9219:40;;9125:149;;;;:::o;10616:286::-;10688:4;10709:11;10722:17;10743:22;;;;;;;;;;;:35;;10849:2;10853:5;10796:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10743:117;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10708:152;;;;10881:6;10874:13;;;;10616:286;;;;:::o;8799:153::-;8871:4;8902:15;;;;;;;;;;;:24;;;8927:2;8931:5;8902:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8895:42;;8799:153;;;;:::o;10459:131::-;10512:4;10543:15;;;;;;;;;;;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10536:39;;10459:131;:::o;8567:218::-;8696:7;8729:15;;;;;;;;;;;:25;;;8755:5;8762:7;8729:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8722:48;;8567:218;;;;:::o;10236:209::-;10347:4;10378:15;;;;;;;;;;;:28;;;10407:4;;10413:6;;10421:8;10378:52;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10371:59;;10236:209;;;;;;;:::o;9864:157::-;9934:4;9965:15;;;;;;;;;;;:34;;;10000:5;9965:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9958:48;;9864:157;;;:::o;11099:294::-;11175:4;11196:11;11209:17;11230:22;;;;;;;;;;;:35;;11335:7;11344:5;11283:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11230:121;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11195:156;;;;11372:6;11365:13;;;;11099:294;;;;:::o;10035:187::-;10128:4;10159:15;;;;;;;;;;;:24;;;10184:6;10192:5;10199:7;10159:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10152:55;;10035:187;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;1983:75::-;2016:6;2049:2;2043:9;2033:19;;1983:75;:::o;2064:117::-;2173:1;2170;2163:12;2187:117;2296:1;2293;2286:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:118::-;3933:24;3951:5;3933:24;:::i;:::-;3928:3;3921:37;3846:118;;:::o;3970:222::-;4063:4;4101:2;4090:9;4086:18;4078:26;;4114:71;4182:1;4171:9;4167:17;4158:6;4114:71;:::i;:::-;3970:222;;;;:::o;4198:619::-;4275:6;4283;4291;4340:2;4328:9;4319:7;4315:23;4311:32;4308:119;;;4346:79;;:::i;:::-;4308:119;4466:1;4491:53;4536:7;4527:6;4516:9;4512:22;4491:53;:::i;:::-;4481:63;;4437:117;4593:2;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4564:118;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4198:619;;;;;:::o;4823:86::-;4858:7;4898:4;4891:5;4887:16;4876:27;;4823:86;;;:::o;4915:112::-;4998:22;5014:5;4998:22;:::i;:::-;4993:3;4986:35;4915:112;;:::o;5033:214::-;5122:4;5160:2;5149:9;5145:18;5137:26;;5173:67;5237:1;5226:9;5222:17;5213:6;5173:67;:::i;:::-;5033:214;;;;:::o;5253:329::-;5312:6;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5253:329;;;;:::o;5588:60::-;5616:3;5637:5;5630:12;;5588:60;;;:::o;5654:142::-;5704:9;5737:53;5755:34;5764:24;5782:5;5764:24;:::i;:::-;5755:34;:::i;:::-;5737:53;:::i;:::-;5724:66;;5654:142;;;:::o;5802:126::-;5852:9;5885:37;5916:5;5885:37;:::i;:::-;5872:50;;5802:126;;;:::o;5934:157::-;6015:9;6048:37;6079:5;6048:37;:::i;:::-;6035:50;;5934:157;;;:::o;6097:193::-;6215:68;6277:5;6215:68;:::i;:::-;6210:3;6203:81;6097:193;;:::o;6296:284::-;6420:4;6458:2;6447:9;6443:18;6435:26;;6471:102;6570:1;6559:9;6555:17;6546:6;6471:102;:::i;:::-;6296:284;;;;:::o;6586:474::-;6654:6;6662;6711:2;6699:9;6690:7;6686:23;6682:32;6679:119;;;6717:79;;:::i;:::-;6679:119;6837:1;6862:53;6907:7;6898:6;6887:9;6883:22;6862:53;:::i;:::-;6852:63;;6808:117;6964:2;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6935:118;6586:474;;;;;:::o;7066:117::-;7175:1;7172;7165:12;7189:117;7298:1;7295;7288:12;7312:117;7421:1;7418;7411:12;7449:553;7507:8;7517:6;7567:3;7560:4;7552:6;7548:17;7544:27;7534:122;;7575:79;;:::i;:::-;7534:122;7688:6;7675:20;7665:30;;7718:18;7710:6;7707:30;7704:117;;;7740:79;;:::i;:::-;7704:117;7854:4;7846:6;7842:17;7830:29;;7908:3;7900:4;7892:6;7888:17;7878:8;7874:32;7871:41;7868:128;;;7915:79;;:::i;:::-;7868:128;7449:553;;;;;:::o;8008:118::-;8079:22;8095:5;8079:22;:::i;:::-;8072:5;8069:33;8059:61;;8116:1;8113;8106:12;8059:61;8008:118;:::o;8132:135::-;8176:5;8214:6;8201:20;8192:29;;8230:31;8255:5;8230:31;:::i;:::-;8132:135;;;;:::o;8273:1015::-;8372:6;8380;8388;8396;8404;8453:2;8441:9;8432:7;8428:23;8424:32;8421:119;;;8459:79;;:::i;:::-;8421:119;8607:1;8596:9;8592:17;8579:31;8637:18;8629:6;8626:30;8623:117;;;8659:79;;:::i;:::-;8623:117;8772:65;8829:7;8820:6;8809:9;8805:22;8772:65;:::i;:::-;8754:83;;;;8550:297;8914:2;8903:9;8899:18;8886:32;8945:18;8937:6;8934:30;8931:117;;;8967:79;;:::i;:::-;8931:117;9080:65;9137:7;9128:6;9117:9;9113:22;9080:65;:::i;:::-;9062:83;;;;8857:298;9194:2;9220:51;9263:7;9254:6;9243:9;9239:22;9220:51;:::i;:::-;9210:61;;9165:116;8273:1015;;;;;;;;:::o;9294:619::-;9371:6;9379;9387;9436:2;9424:9;9415:7;9411:23;9407:32;9404:119;;;9442:79;;:::i;:::-;9404:119;9562:1;9587:53;9632:7;9623:6;9612:9;9608:22;9587:53;:::i;:::-;9577:63;;9533:117;9689:2;9715:53;9760:7;9751:6;9740:9;9736:22;9715:53;:::i;:::-;9705:63;;9660:118;9817:2;9843:53;9888:7;9879:6;9868:9;9864:22;9843:53;:::i;:::-;9833:63;;9788:118;9294:619;;;;;:::o;9919:117::-;10028:1;10025;10018:12;10042:180;10090:77;10087:1;10080:88;10187:4;10184:1;10177:15;10211:4;10208:1;10201:15;10228:281;10311:27;10333:4;10311:27;:::i;:::-;10303:6;10299:40;10441:6;10429:10;10426:22;10405:18;10393:10;10390:34;10387:62;10384:88;;;10452:18;;:::i;:::-;10384:88;10492:10;10488:2;10481:22;10271:238;10228:281;;:::o;10515:129::-;10549:6;10576:20;;:::i;:::-;10566:30;;10605:33;10633:4;10625:6;10605:33;:::i;:::-;10515:129;;;:::o;10650:308::-;10712:4;10802:18;10794:6;10791:30;10788:56;;;10824:18;;:::i;:::-;10788:56;10862:29;10884:6;10862:29;:::i;:::-;10854:37;;10946:4;10940;10936:15;10928:23;;10650:308;;;:::o;10964:421::-;11053:5;11078:66;11094:49;11136:6;11094:49;:::i;:::-;11078:66;:::i;:::-;11069:75;;11167:6;11160:5;11153:21;11205:4;11198:5;11194:16;11243:3;11234:6;11229:3;11225:16;11222:25;11219:112;;;11250:79;;:::i;:::-;11219:112;11340:39;11372:6;11367:3;11362;11340:39;:::i;:::-;11059:326;10964:421;;;;;:::o;11405:355::-;11472:5;11521:3;11514:4;11506:6;11502:17;11498:27;11488:122;;11529:79;;:::i;:::-;11488:122;11639:6;11633:13;11664:90;11750:3;11742:6;11735:4;11727:6;11723:17;11664:90;:::i;:::-;11655:99;;11478:282;11405:355;;;;:::o;11766:524::-;11846:6;11895:2;11883:9;11874:7;11870:23;11866:32;11863:119;;;11901:79;;:::i;:::-;11863:119;12042:1;12031:9;12027:17;12021:24;12072:18;12064:6;12061:30;12058:117;;;12094:79;;:::i;:::-;12058:117;12199:74;12265:7;12256:6;12245:9;12241:22;12199:74;:::i;:::-;12189:84;;11992:291;11766:524;;;;:::o;12296:332::-;12417:4;12455:2;12444:9;12440:18;12432:26;;12468:71;12536:1;12525:9;12521:17;12512:6;12468:71;:::i;:::-;12549:72;12617:2;12606:9;12602:18;12593:6;12549:72;:::i;:::-;12296:332;;;;;:::o;12634:116::-;12704:21;12719:5;12704:21;:::i;:::-;12697:5;12694:32;12684:60;;12740:1;12737;12730:12;12684:60;12634:116;:::o;12756:137::-;12810:5;12841:6;12835:13;12826:22;;12857:30;12881:5;12857:30;:::i;:::-;12756:137;;;;:::o;12899:345::-;12966:6;13015:2;13003:9;12994:7;12990:23;12986:32;12983:119;;;13021:79;;:::i;:::-;12983:119;13141:1;13166:61;13219:7;13210:6;13199:9;13195:22;13166:61;:::i;:::-;13156:71;;13112:125;12899:345;;;;:::o;13250:143::-;13307:5;13338:6;13332:13;13323:22;;13354:33;13381:5;13354:33;:::i;:::-;13250:143;;;;:::o;13399:351::-;13469:6;13518:2;13506:9;13497:7;13493:23;13489:32;13486:119;;;13524:79;;:::i;:::-;13486:119;13644:1;13669:64;13725:7;13716:6;13705:9;13701:22;13669:64;:::i;:::-;13659:74;;13615:128;13399:351;;;;:::o;13756:442::-;13905:4;13943:2;13932:9;13928:18;13920:26;;13956:71;14024:1;14013:9;14009:17;14000:6;13956:71;:::i;:::-;14037:72;14105:2;14094:9;14090:18;14081:6;14037:72;:::i;:::-;14119;14187:2;14176:9;14172:18;14163:6;14119:72;:::i;:::-;13756:442;;;;;;:::o;14204:139::-;14259:5;14290:6;14284:13;14275:22;;14306:31;14331:5;14306:31;:::i;:::-;14204:139;;;;:::o;14349:347::-;14417:6;14466:2;14454:9;14445:7;14441:23;14437:32;14434:119;;;14472:79;;:::i;:::-;14434:119;14592:1;14617:62;14671:7;14662:6;14651:9;14647:22;14617:62;:::i;:::-;14607:72;;14563:126;14349:347;;;;:::o;14702:98::-;14753:6;14787:5;14781:12;14771:22;;14702:98;;;:::o;14806:147::-;14907:11;14944:3;14929:18;;14806:147;;;;:::o;14959:373::-;15063:3;15091:38;15123:5;15091:38;:::i;:::-;15145:88;15226:6;15221:3;15145:88;:::i;:::-;15138:95;;15242:52;15287:6;15282:3;15275:4;15268:5;15264:16;15242:52;:::i;:::-;15319:6;15314:3;15310:16;15303:23;;15067:265;14959:373;;;;:::o;15338:271::-;15468:3;15490:93;15579:3;15570:6;15490:93;:::i;:::-;15483:100;;15600:3;15593:10;;15338:271;;;;:::o;15615:332::-;15736:4;15774:2;15763:9;15759:18;15751:26;;15787:71;15855:1;15844:9;15840:17;15831:6;15787:71;:::i;:::-;15868:72;15936:2;15925:9;15921:18;15912:6;15868:72;:::i;:::-;15615:332;;;;;:::o;15953:154::-;16037:6;16032:3;16027;16014:30;16099:1;16090:6;16085:3;16081:16;16074:27;15953:154;;;:::o;16137:304::-;16235:3;16256:71;16320:6;16315:3;16256:71;:::i;:::-;16249:78;;16337:43;16373:6;16368:3;16361:5;16337:43;:::i;:::-;16405:29;16427:6;16405:29;:::i;:::-;16400:3;16396:39;16389:46;;16137:304;;;;;:::o;16447:656::-;16652:4;16690:2;16679:9;16675:18;16667:26;;16739:9;16733:4;16729:20;16725:1;16714:9;16710:17;16703:47;16767:88;16850:4;16841:6;16833;16767:88;:::i;:::-;16759:96;;16902:9;16896:4;16892:20;16887:2;16876:9;16872:18;16865:48;16930:88;17013:4;17004:6;16996;16930:88;:::i;:::-;16922:96;;17028:68;17092:2;17081:9;17077:18;17068:6;17028:68;:::i;:::-;16447:656;;;;;;;;:::o;17109:442::-;17258:4;17296:2;17285:9;17281:18;17273:26;;17309:71;17377:1;17366:9;17362:17;17353:6;17309:71;:::i;:::-;17390:72;17458:2;17447:9;17443:18;17434:6;17390:72;:::i;:::-;17472;17540:2;17529:9;17525:18;17516:6;17472:72;:::i;:::-;17109:442;;;;;;:::o" + "object": "60806040526004361061016a5760003560e01c806384810219116100d1578063a9059cbb1161008a578063ee5dc1e411610064578063ee5dc1e4146105c1578063f0350c04146105fe578063f5bfbd8a1461063b578063f8bf8e951461067857610171565b8063a9059cbb1461051c578063d3ba4b9e14610559578063dd62ed3e1461058457610171565b806384810219146103e65780638d1fdf2f1461040f57806395d89b411461044c5780639b5067e7146104775780639dc29fac146104a2578063a887c981146104df57610171565b8063313ce56711610123578063313ce5671461029c57806340c10f19146102c75780635ea20216146103045780636b8751c11461034157806370a082311461036c5780637eea1205146103a957610171565b80630131222f1461017657806306fdde03146101a1578063095ea7b3146101cc57806318160ddd146102095780631cddec191461023457806323b872dd1461025f57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6106b5565b6040516101989190611766565b60405180910390f35b3480156101ad57600080fd5b506101b66106df565b6040516101c3919061181a565b60405180910390f35b3480156101d857600080fd5b506101f360048036038101906101ee91906118b2565b61077a565b604051610200919061190d565b60405180910390f35b34801561021557600080fd5b5061021e610823565b60405161022b9190611937565b60405180910390f35b34801561024057600080fd5b506102496108ba565b604051610256919061190d565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190611952565b610953565b604051610293919061190d565b60405180910390f35b3480156102a857600080fd5b506102b16109ff565b6040516102be91906119c1565b60405180910390f35b3480156102d357600080fd5b506102ee60048036038101906102e991906118b2565b610a96565b6040516102fb919061190d565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906119dc565b610b3f565b604051610338919061190d565b60405180910390f35b34801561034d57600080fd5b50610356610be5565b604051610363919061190d565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e91906119dc565b610c7e565b6040516103a09190611937565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb9190611952565b610d22565b6040516103dd919061190d565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906119dc565b610e50565b005b34801561041b57600080fd5b50610436600480360381019061043191906119dc565b610ed4565b604051610443919061190d565b60405180910390f35b34801561045857600080fd5b50610461610f7a565b60405161046e919061181a565b60405180910390f35b34801561048357600080fd5b5061048c611015565b6040516104999190611a68565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906118b2565b611039565b6040516104d6919061190d565b60405180910390f35b3480156104eb57600080fd5b50610506600480360381019061050191906118b2565b6110e2565b604051610513919061190d565b60405180910390f35b34801561052857600080fd5b50610543600480360381019061053e91906118b2565b61120d565b604051610550919061190d565b60405180910390f35b34801561056557600080fd5b5061056e6112b6565b60405161057b919061190d565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190611a83565b61134f565b6040516105b89190611937565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190611b54565b6113f6565b6040516105f5919061190d565b60405180910390f35b34801561060a57600080fd5b50610625600480360381019061062091906119dc565b6114a8565b604051610632919061190d565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d91906118b2565b61154e565b60405161066f919061190d565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190611be9565b611679565b6040516106ac919061190d565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561074c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906107759190611d5d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b384846040518363ffffffff1660e01b81526004016107d8929190611da6565b6020604051808303816000875af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190611e3d565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cddec196040518163ffffffff1660e01b81526004016020604051808303816000875af115801561092a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094e9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8585856040518463ffffffff1660e01b81526004016109b393929190611e6a565b6020604051808303816000875af11580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611dfb565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190611eb6565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610af4929190611da6565b6020604051808303816000875af1158015610b13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b379190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ea20216836040518263ffffffff1660e01b8152600401610b9b9190611766565b6020604051808303816000875af1158015610bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bde9190611dfb565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b8751c16040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c799190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610cda9190611766565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611e3d565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16868686604051602401610d7593929190611e6a565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610dff9190611f2a565b600060405180830381855af49150503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b509150915081925050509392505050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d1fdf2f836040518263ffffffff1660e01b8152600401610f309190611766565b6020604051808303816000875af1158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f739190611dfb565b9050919050565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fe7573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906110109190611d5d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84846040518363ffffffff1660e01b8152600401611097929190611da6565b6020604051808303816000875af11580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da9190611dfb565b905092915050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585604051602401611133929190611da6565b6040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516111bd9190611f2a565b600060405180830381855af49150503d80600081146111f8576040519150601f19603f3d011682016040523d82523d6000602084013e6111fd565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b815260040161126b929190611da6565b6020604051808303816000875af115801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190611dfb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3ba4b9e6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190611dfb565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e84846040518363ffffffff1660e01b81526004016113ad929190611f41565b602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190611e3d565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee5dc1e487878787876040518663ffffffff1660e01b815260040161145a959493929190611fa6565b6020604051808303816000875af1158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d9190611dfb565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0350c04836040518263ffffffff1660e01b81526004016115049190611766565b6020604051808303816000875af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190611dfb565b9050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16858560405160240161159f929190611da6565b6040516020818303038152906040527f095ea7b3000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116299190611f2a565b600060405180830381855af49150503d8060008114611664576040519150601f19603f3d011682016040523d82523d6000602084013e611669565b606091505b5091509150819250505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8bf8e958585856040518463ffffffff1660e01b81526004016116d993929190611fef565b6020604051808303816000875af11580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190611dfb565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061175082611725565b9050919050565b61176081611745565b82525050565b600060208201905061177b6000830184611757565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117bb5780820151818401526020810190506117a0565b838111156117ca576000848401525b50505050565b6000601f19601f8301169050919050565b60006117ec82611781565b6117f6818561178c565b935061180681856020860161179d565b61180f816117d0565b840191505092915050565b6000602082019050818103600083015261183481846117e1565b905092915050565b6000604051905090565b600080fd5b600080fd5b61185981611745565b811461186457600080fd5b50565b60008135905061187681611850565b92915050565b6000819050919050565b61188f8161187c565b811461189a57600080fd5b50565b6000813590506118ac81611886565b92915050565b600080604083850312156118c9576118c8611846565b5b60006118d785828601611867565b92505060206118e88582860161189d565b9150509250929050565b60008115159050919050565b611907816118f2565b82525050565b600060208201905061192260008301846118fe565b92915050565b6119318161187c565b82525050565b600060208201905061194c6000830184611928565b92915050565b60008060006060848603121561196b5761196a611846565b5b600061197986828701611867565b935050602061198a86828701611867565b925050604061199b8682870161189d565b9150509250925092565b600060ff82169050919050565b6119bb816119a5565b82525050565b60006020820190506119d660008301846119b2565b92915050565b6000602082840312156119f2576119f1611846565b5b6000611a0084828501611867565b91505092915050565b6000819050919050565b6000611a2e611a29611a2484611725565b611a09565b611725565b9050919050565b6000611a4082611a13565b9050919050565b6000611a5282611a35565b9050919050565b611a6281611a47565b82525050565b6000602082019050611a7d6000830184611a59565b92915050565b60008060408385031215611a9a57611a99611846565b5b6000611aa885828601611867565b9250506020611ab985828601611867565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112611ae857611ae7611ac3565b5b8235905067ffffffffffffffff811115611b0557611b04611ac8565b5b602083019150836001820283011115611b2157611b20611acd565b5b9250929050565b611b31816119a5565b8114611b3c57600080fd5b50565b600081359050611b4e81611b28565b92915050565b600080600080600060608688031215611b7057611b6f611846565b5b600086013567ffffffffffffffff811115611b8e57611b8d61184b565b5b611b9a88828901611ad2565b9550955050602086013567ffffffffffffffff811115611bbd57611bbc61184b565b5b611bc988828901611ad2565b93509350506040611bdc88828901611b3f565b9150509295509295909350565b600080600060608486031215611c0257611c01611846565b5b6000611c1086828701611867565b9350506020611c2186828701611867565b9250506040611c3286828701611867565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c79826117d0565b810181811067ffffffffffffffff82111715611c9857611c97611c41565b5b80604052505050565b6000611cab61183c565b9050611cb78282611c70565b919050565b600067ffffffffffffffff821115611cd757611cd6611c41565b5b611ce0826117d0565b9050602081019050919050565b6000611d00611cfb84611cbc565b611ca1565b905082815260208101848484011115611d1c57611d1b611c3c565b5b611d2784828561179d565b509392505050565b600082601f830112611d4457611d43611ac3565b5b8151611d54848260208601611ced565b91505092915050565b600060208284031215611d7357611d72611846565b5b600082015167ffffffffffffffff811115611d9157611d9061184b565b5b611d9d84828501611d2f565b91505092915050565b6000604082019050611dbb6000830185611757565b611dc86020830184611928565b9392505050565b611dd8816118f2565b8114611de357600080fd5b50565b600081519050611df581611dcf565b92915050565b600060208284031215611e1157611e10611846565b5b6000611e1f84828501611de6565b91505092915050565b600081519050611e3781611886565b92915050565b600060208284031215611e5357611e52611846565b5b6000611e6184828501611e28565b91505092915050565b6000606082019050611e7f6000830186611757565b611e8c6020830185611757565b611e996040830184611928565b949350505050565b600081519050611eb081611b28565b92915050565b600060208284031215611ecc57611ecb611846565b5b6000611eda84828501611ea1565b91505092915050565b600081519050919050565b600081905092915050565b6000611f0482611ee3565b611f0e8185611eee565b9350611f1e81856020860161179d565b80840191505092915050565b6000611f368284611ef9565b915081905092915050565b6000604082019050611f566000830185611757565b611f636020830184611757565b9392505050565b82818337600083830152505050565b6000611f85838561178c565b9350611f92838584611f6a565b611f9b836117d0565b840190509392505050565b60006060820190508181036000830152611fc1818789611f79565b90508181036020830152611fd6818587611f79565b9050611fe560408301846119b2565b9695505050505050565b60006060820190506120046000830186611757565b6120116020830185611757565b61201e6040830184611757565b94935050505056fea2646970667358221220e4e422b8a9b7f9d0a8d04f79283e40d5cc607e645371ffe4686666fa28636f8c64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x16A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x84810219 GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xEE5DC1E4 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xEE5DC1E4 EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0xF0350C04 EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0xF5BFBD8A EQ PUSH2 0x63B JUMPI DUP1 PUSH4 0xF8BF8E95 EQ PUSH2 0x678 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x51C JUMPI DUP1 PUSH4 0xD3BA4B9E EQ PUSH2 0x559 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x584 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x84810219 EQ PUSH2 0x3E6 JUMPI DUP1 PUSH4 0x8D1FDF2F EQ PUSH2 0x40F JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x44C JUMPI DUP1 PUSH4 0x9B5067E7 EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x9DC29FAC EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0xA887C981 EQ PUSH2 0x4DF JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0x123 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x2C7 JUMPI DUP1 PUSH4 0x5EA20216 EQ PUSH2 0x304 JUMPI DUP1 PUSH4 0x6B8751C1 EQ PUSH2 0x341 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x36C JUMPI DUP1 PUSH4 0x7EEA1205 EQ PUSH2 0x3A9 JUMPI PUSH2 0x171 JUMP JUMPDEST DUP1 PUSH4 0x131222F EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x209 JUMPI DUP1 PUSH4 0x1CDDEC19 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x25F JUMPI PUSH2 0x171 JUMP JUMPDEST CALLDATASIZE PUSH2 0x171 JUMPI STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x182 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x18B PUSH2 0x6B5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x198 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B6 PUSH2 0x6DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C3 SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1F3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1EE SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x77A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x200 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21E PUSH2 0x823 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22B SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x240 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x249 PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x256 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x286 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x281 SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0x953 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x293 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B1 PUSH2 0x9FF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2BE SWAP2 SWAP1 PUSH2 0x19C1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2EE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2E9 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0xA96 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2FB SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x310 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x326 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xB3F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x338 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x34D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x356 PUSH2 0xBE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x363 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x378 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x393 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x38E SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xC7E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3A0 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x3CB SWAP2 SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH2 0xD22 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DD SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x40D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x408 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xE50 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x436 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x431 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0xED4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x443 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x461 PUSH2 0xF7A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x46E SWAP2 SWAP1 PUSH2 0x181A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x499 SWAP2 SWAP1 PUSH2 0x1A68 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4C9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x4C4 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x1039 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x506 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x501 SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x10E2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x513 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x528 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x543 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x53E SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x120D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x550 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x565 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x56E PUSH2 0x12B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57B SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x590 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AB PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5A6 SWAP2 SWAP1 PUSH2 0x1A83 JUMP JUMPDEST PUSH2 0x134F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B8 SWAP2 SWAP1 PUSH2 0x1937 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5E8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5E3 SWAP2 SWAP1 PUSH2 0x1B54 JUMP JUMPDEST PUSH2 0x13F6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5F5 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x625 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x620 SWAP2 SWAP1 PUSH2 0x19DC JUMP JUMPDEST PUSH2 0x14A8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x632 SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x647 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x662 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x65D SWAP2 SWAP1 PUSH2 0x18B2 JUMP JUMPDEST PUSH2 0x154E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x66F SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x684 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69F PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x69A SWAP2 SWAP1 PUSH2 0x1BE9 JUMP JUMPDEST PUSH2 0x1679 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6AC SWAP2 SWAP1 PUSH2 0x190D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6FDDE03 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x74C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x775 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95EA7B3 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x7D8 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x7F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x81B SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x18160DDD PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x891 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B5 SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x1CDDEC19 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x92A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x94E SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9D2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9F6 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA6D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA91 SWAP2 SWAP1 PUSH2 0x1EB6 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x40C10F19 DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xAF4 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xB13 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB37 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EA20216 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xB9B SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xBBA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xBDE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x6B8751C1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xC55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC79 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xCDA SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xCF7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD1B SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xD75 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1E6A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0xDFF SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE3A JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE3F JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8D1FDF2F DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xF30 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF4F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xF73 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x95D89B41 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xFE7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1010 SWAP2 SWAP1 PUSH2 0x1D5D JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1097 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10B6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10DA SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1133 SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x11BD SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x11F8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x11FD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x126B SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x128A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x12AE SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD3BA4B9E PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1326 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x134A SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDD62ED3E DUP5 DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13AD SWAP3 SWAP2 SWAP1 PUSH2 0x1F41 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x13CA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x13EE SWAP2 SWAP1 PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xEE5DC1E4 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x145A SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FA6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1479 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x149D SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF0350C04 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1504 SWAP2 SWAP1 PUSH2 0x1766 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1523 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1547 SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x159F SWAP3 SWAP2 SWAP1 PUSH2 0x1DA6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x1629 SWAP2 SWAP1 PUSH2 0x1F2A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1664 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1669 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 SWAP3 POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF8BF8E95 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x16D9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1FEF JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x171C SWAP2 SWAP1 PUSH2 0x1DFB JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1750 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1760 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x177B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x17BB JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x17A0 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x17CA JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17EC DUP3 PUSH2 0x1781 JUMP JUMPDEST PUSH2 0x17F6 DUP2 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1806 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST PUSH2 0x180F DUP2 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1834 DUP2 DUP5 PUSH2 0x17E1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1859 DUP2 PUSH2 0x1745 JUMP JUMPDEST DUP2 EQ PUSH2 0x1864 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1876 DUP2 PUSH2 0x1850 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x188F DUP2 PUSH2 0x187C JUMP JUMPDEST DUP2 EQ PUSH2 0x189A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x18AC DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x18C9 JUMPI PUSH2 0x18C8 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x18D7 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x18E8 DUP6 DUP3 DUP7 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1907 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1922 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x18FE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1931 DUP2 PUSH2 0x187C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x194C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x196B JUMPI PUSH2 0x196A PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1979 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x198A DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x199B DUP7 DUP3 DUP8 ADD PUSH2 0x189D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x19BB DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x19D6 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x19F2 JUMPI PUSH2 0x19F1 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1A00 DUP5 DUP3 DUP6 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A2E PUSH2 0x1A29 PUSH2 0x1A24 DUP5 PUSH2 0x1725 JUMP JUMPDEST PUSH2 0x1A09 JUMP JUMPDEST PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A40 DUP3 PUSH2 0x1A13 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A52 DUP3 PUSH2 0x1A35 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A62 DUP2 PUSH2 0x1A47 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1A7D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1A59 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1A9A JUMPI PUSH2 0x1A99 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1AA8 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1AB9 DUP6 DUP3 DUP7 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x1AE8 JUMPI PUSH2 0x1AE7 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B05 JUMPI PUSH2 0x1B04 PUSH2 0x1AC8 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x1 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0x1B21 JUMPI PUSH2 0x1B20 PUSH2 0x1ACD JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x1B31 DUP2 PUSH2 0x19A5 JUMP JUMPDEST DUP2 EQ PUSH2 0x1B3C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1B4E DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x1B70 JUMPI PUSH2 0x1B6F PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1B8E JUMPI PUSH2 0x1B8D PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1B9A DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP6 POP SWAP6 POP POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1BBD JUMPI PUSH2 0x1BBC PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1BC9 DUP9 DUP3 DUP10 ADD PUSH2 0x1AD2 JUMP JUMPDEST SWAP4 POP SWAP4 POP POP PUSH1 0x40 PUSH2 0x1BDC DUP9 DUP3 DUP10 ADD PUSH2 0x1B3F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1C02 JUMPI PUSH2 0x1C01 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1C10 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1C21 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1C32 DUP7 DUP3 DUP8 ADD PUSH2 0x1867 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1C79 DUP3 PUSH2 0x17D0 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1C98 JUMPI PUSH2 0x1C97 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CAB PUSH2 0x183C JUMP JUMPDEST SWAP1 POP PUSH2 0x1CB7 DUP3 DUP3 PUSH2 0x1C70 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1CD7 JUMPI PUSH2 0x1CD6 PUSH2 0x1C41 JUMP JUMPDEST JUMPDEST PUSH2 0x1CE0 DUP3 PUSH2 0x17D0 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D00 PUSH2 0x1CFB DUP5 PUSH2 0x1CBC JUMP JUMPDEST PUSH2 0x1CA1 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x1D1C JUMPI PUSH2 0x1D1B PUSH2 0x1C3C JUMP JUMPDEST JUMPDEST PUSH2 0x1D27 DUP5 DUP3 DUP6 PUSH2 0x179D JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1D44 JUMPI PUSH2 0x1D43 PUSH2 0x1AC3 JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x1D54 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x1CED JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1D73 JUMPI PUSH2 0x1D72 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1D91 JUMPI PUSH2 0x1D90 PUSH2 0x184B JUMP JUMPDEST JUMPDEST PUSH2 0x1D9D DUP5 DUP3 DUP6 ADD PUSH2 0x1D2F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1DBB PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1DC8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1DD8 DUP2 PUSH2 0x18F2 JUMP JUMPDEST DUP2 EQ PUSH2 0x1DE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1DF5 DUP2 PUSH2 0x1DCF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E11 JUMPI PUSH2 0x1E10 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E1F DUP5 DUP3 DUP6 ADD PUSH2 0x1DE6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1E37 DUP2 PUSH2 0x1886 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1E53 JUMPI PUSH2 0x1E52 PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1E61 DUP5 DUP3 DUP6 ADD PUSH2 0x1E28 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1E7F PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E8C PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1E99 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1928 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1EB0 DUP2 PUSH2 0x1B28 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1ECC JUMPI PUSH2 0x1ECB PUSH2 0x1846 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1EDA DUP5 DUP3 DUP6 ADD PUSH2 0x1EA1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F04 DUP3 PUSH2 0x1EE3 JUMP JUMPDEST PUSH2 0x1F0E DUP2 DUP6 PUSH2 0x1EEE JUMP JUMPDEST SWAP4 POP PUSH2 0x1F1E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x179D JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F36 DUP3 DUP5 PUSH2 0x1EF9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1F56 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x1F63 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F85 DUP4 DUP6 PUSH2 0x178C JUMP JUMPDEST SWAP4 POP PUSH2 0x1F92 DUP4 DUP6 DUP5 PUSH2 0x1F6A JUMP JUMPDEST PUSH2 0x1F9B DUP4 PUSH2 0x17D0 JUMP JUMPDEST DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1FC1 DUP2 DUP8 DUP10 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1FD6 DUP2 DUP6 DUP8 PUSH2 0x1F79 JUMP JUMPDEST SWAP1 POP PUSH2 0x1FE5 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x19B2 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x2004 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x2011 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x1757 JUMP JUMPDEST PUSH2 0x201E PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x1757 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE4 0xE4 0x22 0xB8 0xA9 0xB7 0xF9 0xD0 0xA8 0xD0 0x4F PUSH26 0x283E40D5CC607E645371FFE4686666FA28636F8C64736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "6560:4977:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7172:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7277:181;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10427:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7842:189;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9281:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10915:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7655:181;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8612:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9041:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9164:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8037:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11116:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6975:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8914:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7464:185;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6687:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8747:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10126:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8441:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10005:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8242:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9776:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9394:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10606:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9569:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7172:99;7216:7;7242:22;;;;;;;;;;;7235:29;;7172:99;:::o;7277:181::-;7325:13;7429:15;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7422:29;;7277:181;:::o;10427:173::-;10527:4;10554:15;;;;;;;;;;;:23;;;10578:7;10587:5;10554:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10547:46;;10427:173;;;;:::o;7842:189::-;7897:7;7995:15;;;;;;;;;;;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7988:36;;7842:189;:::o;9281:107::-;9330:4;9353:15;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9346:35;;9281:107;:::o;10915:195::-;11035:4;11058:15;;;;;;;;;;;:28;;;11087:4;11093:2;11097:5;11058:45;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11051:52;;10915:195;;;;;:::o;7655:181::-;7707:5;7803:15;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7796:33;;7655:181;:::o;8612:129::-;8680:4;8703:15;;;;;;;;;;;:20;;;8724:2;8728:5;8703:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8696:38;;8612:129;;;;:::o;9041:117::-;9099:4;9122:15;;;;;;;;;;;:20;;;9143:7;9122:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9115:36;;9041:117;;;:::o;9164:111::-;9215:4;9238:15;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9231:37;;9164:111;:::o;8037:199::-;8101:7;8199:15;;;;;;;;;;;:25;;;8225:3;8199:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8192:37;;8037:199;;;:::o;11116:419::-;11236:4;11253:11;11266:17;11287:22;;;;;;;;;;;:35;;11434:4;11456:2;11476:5;11336:159;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11287:218;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11252:253;;;;11522:6;11515:13;;;;11116:419;;;;;:::o;6975:191::-;7091:16;7049:15;;:59;;;;;;;;;;;;;;;;;;7143:16;7118:22;;:41;;;;;;;;;;;;;;;;;;6975:191;:::o;8914:121::-;8974:4;8997:15;;;;;;;;;;;:22;;;9020:7;8997:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8990:38;;8914:121;;;:::o;7464:185::-;7514:13;7618:15;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7611:31;;7464:185;:::o;6687:124::-;;;;;;;;;;;;:::o;8747:161::-;8841:4;8868:15;;;;;;;;;;;:20;;;8889:4;8895:5;8868:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8861:40;;8747:161;;;;:::o;10126:295::-;10214:4;10235:11;10248:17;10269:22;;;;;;;;;;;:35;;10371:2;10375:5;10318:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10269:122;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10234:157;;;;10408:6;10401:13;;;;10126:295;;;;:::o;8441:165::-;8537:4;8564:15;;;;;;;;;;;:24;;;8589:2;8593:5;8564:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8557:42;;8441:165;;;;:::o;10005:115::-;10058:4;10081:15;;;;;;;;;;;:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10074:39;;10005:115;:::o;8242:193::-;8357:7;8387:15;;;;;;;;;;;:25;;;8413:5;8420:7;8387:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8380:48;;8242:193;;;;:::o;9776:223::-;9917:4;9940:15;;;;;;;;;;;:28;;;9969:4;;9975:6;;9983:8;9940:52;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9933:59;;9776:223;;;;;;;:::o;9394:169::-;9488:4;9515:15;;;;;;;;;;;:34;;;9550:5;9515:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9508:48;;9394:169;;;:::o;10606:303::-;10698:4;10719:11;10732:17;10753:22;;;;;;;;;;;:35;;10854:7;10863:5;10802:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10753:126;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10718:161;;;;10896:6;10889:13;;;;10606:303;;;;:::o;9569:201::-;9692:4;9715:15;;;;;;;;;;;:24;;;9740:6;9748:5;9755:7;9715:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9708:55;;9569:201;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;1983:75::-;2016:6;2049:2;2043:9;2033:19;;1983:75;:::o;2064:117::-;2173:1;2170;2163:12;2187:117;2296:1;2293;2286:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:118::-;3933:24;3951:5;3933:24;:::i;:::-;3928:3;3921:37;3846:118;;:::o;3970:222::-;4063:4;4101:2;4090:9;4086:18;4078:26;;4114:71;4182:1;4171:9;4167:17;4158:6;4114:71;:::i;:::-;3970:222;;;;:::o;4198:619::-;4275:6;4283;4291;4340:2;4328:9;4319:7;4315:23;4311:32;4308:119;;;4346:79;;:::i;:::-;4308:119;4466:1;4491:53;4536:7;4527:6;4516:9;4512:22;4491:53;:::i;:::-;4481:63;;4437:117;4593:2;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4564:118;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4198:619;;;;;:::o;4823:86::-;4858:7;4898:4;4891:5;4887:16;4876:27;;4823:86;;;:::o;4915:112::-;4998:22;5014:5;4998:22;:::i;:::-;4993:3;4986:35;4915:112;;:::o;5033:214::-;5122:4;5160:2;5149:9;5145:18;5137:26;;5173:67;5237:1;5226:9;5222:17;5213:6;5173:67;:::i;:::-;5033:214;;;;:::o;5253:329::-;5312:6;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5253:329;;;;:::o;5588:60::-;5616:3;5637:5;5630:12;;5588:60;;;:::o;5654:142::-;5704:9;5737:53;5755:34;5764:24;5782:5;5764:24;:::i;:::-;5755:34;:::i;:::-;5737:53;:::i;:::-;5724:66;;5654:142;;;:::o;5802:126::-;5852:9;5885:37;5916:5;5885:37;:::i;:::-;5872:50;;5802:126;;;:::o;5934:157::-;6015:9;6048:37;6079:5;6048:37;:::i;:::-;6035:50;;5934:157;;;:::o;6097:193::-;6215:68;6277:5;6215:68;:::i;:::-;6210:3;6203:81;6097:193;;:::o;6296:284::-;6420:4;6458:2;6447:9;6443:18;6435:26;;6471:102;6570:1;6559:9;6555:17;6546:6;6471:102;:::i;:::-;6296:284;;;;:::o;6586:474::-;6654:6;6662;6711:2;6699:9;6690:7;6686:23;6682:32;6679:119;;;6717:79;;:::i;:::-;6679:119;6837:1;6862:53;6907:7;6898:6;6887:9;6883:22;6862:53;:::i;:::-;6852:63;;6808:117;6964:2;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6935:118;6586:474;;;;;:::o;7066:117::-;7175:1;7172;7165:12;7189:117;7298:1;7295;7288:12;7312:117;7421:1;7418;7411:12;7449:553;7507:8;7517:6;7567:3;7560:4;7552:6;7548:17;7544:27;7534:122;;7575:79;;:::i;:::-;7534:122;7688:6;7675:20;7665:30;;7718:18;7710:6;7707:30;7704:117;;;7740:79;;:::i;:::-;7704:117;7854:4;7846:6;7842:17;7830:29;;7908:3;7900:4;7892:6;7888:17;7878:8;7874:32;7871:41;7868:128;;;7915:79;;:::i;:::-;7868:128;7449:553;;;;;:::o;8008:118::-;8079:22;8095:5;8079:22;:::i;:::-;8072:5;8069:33;8059:61;;8116:1;8113;8106:12;8059:61;8008:118;:::o;8132:135::-;8176:5;8214:6;8201:20;8192:29;;8230:31;8255:5;8230:31;:::i;:::-;8132:135;;;;:::o;8273:1015::-;8372:6;8380;8388;8396;8404;8453:2;8441:9;8432:7;8428:23;8424:32;8421:119;;;8459:79;;:::i;:::-;8421:119;8607:1;8596:9;8592:17;8579:31;8637:18;8629:6;8626:30;8623:117;;;8659:79;;:::i;:::-;8623:117;8772:65;8829:7;8820:6;8809:9;8805:22;8772:65;:::i;:::-;8754:83;;;;8550:297;8914:2;8903:9;8899:18;8886:32;8945:18;8937:6;8934:30;8931:117;;;8967:79;;:::i;:::-;8931:117;9080:65;9137:7;9128:6;9117:9;9113:22;9080:65;:::i;:::-;9062:83;;;;8857:298;9194:2;9220:51;9263:7;9254:6;9243:9;9239:22;9220:51;:::i;:::-;9210:61;;9165:116;8273:1015;;;;;;;;:::o;9294:619::-;9371:6;9379;9387;9436:2;9424:9;9415:7;9411:23;9407:32;9404:119;;;9442:79;;:::i;:::-;9404:119;9562:1;9587:53;9632:7;9623:6;9612:9;9608:22;9587:53;:::i;:::-;9577:63;;9533:117;9689:2;9715:53;9760:7;9751:6;9740:9;9736:22;9715:53;:::i;:::-;9705:63;;9660:118;9817:2;9843:53;9888:7;9879:6;9868:9;9864:22;9843:53;:::i;:::-;9833:63;;9788:118;9294:619;;;;;:::o;9919:117::-;10028:1;10025;10018:12;10042:180;10090:77;10087:1;10080:88;10187:4;10184:1;10177:15;10211:4;10208:1;10201:15;10228:281;10311:27;10333:4;10311:27;:::i;:::-;10303:6;10299:40;10441:6;10429:10;10426:22;10405:18;10393:10;10390:34;10387:62;10384:88;;;10452:18;;:::i;:::-;10384:88;10492:10;10488:2;10481:22;10271:238;10228:281;;:::o;10515:129::-;10549:6;10576:20;;:::i;:::-;10566:30;;10605:33;10633:4;10625:6;10605:33;:::i;:::-;10515:129;;;:::o;10650:308::-;10712:4;10802:18;10794:6;10791:30;10788:56;;;10824:18;;:::i;:::-;10788:56;10862:29;10884:6;10862:29;:::i;:::-;10854:37;;10946:4;10940;10936:15;10928:23;;10650:308;;;:::o;10964:421::-;11053:5;11078:66;11094:49;11136:6;11094:49;:::i;:::-;11078:66;:::i;:::-;11069:75;;11167:6;11160:5;11153:21;11205:4;11198:5;11194:16;11243:3;11234:6;11229:3;11225:16;11222:25;11219:112;;;11250:79;;:::i;:::-;11219:112;11340:39;11372:6;11367:3;11362;11340:39;:::i;:::-;11059:326;10964:421;;;;;:::o;11405:355::-;11472:5;11521:3;11514:4;11506:6;11502:17;11498:27;11488:122;;11529:79;;:::i;:::-;11488:122;11639:6;11633:13;11664:90;11750:3;11742:6;11735:4;11727:6;11723:17;11664:90;:::i;:::-;11655:99;;11478:282;11405:355;;;;:::o;11766:524::-;11846:6;11895:2;11883:9;11874:7;11870:23;11866:32;11863:119;;;11901:79;;:::i;:::-;11863:119;12042:1;12031:9;12027:17;12021:24;12072:18;12064:6;12061:30;12058:117;;;12094:79;;:::i;:::-;12058:117;12199:74;12265:7;12256:6;12245:9;12241:22;12199:74;:::i;:::-;12189:84;;11992:291;11766:524;;;;:::o;12296:332::-;12417:4;12455:2;12444:9;12440:18;12432:26;;12468:71;12536:1;12525:9;12521:17;12512:6;12468:71;:::i;:::-;12549:72;12617:2;12606:9;12602:18;12593:6;12549:72;:::i;:::-;12296:332;;;;;:::o;12634:116::-;12704:21;12719:5;12704:21;:::i;:::-;12697:5;12694:32;12684:60;;12740:1;12737;12730:12;12684:60;12634:116;:::o;12756:137::-;12810:5;12841:6;12835:13;12826:22;;12857:30;12881:5;12857:30;:::i;:::-;12756:137;;;;:::o;12899:345::-;12966:6;13015:2;13003:9;12994:7;12990:23;12986:32;12983:119;;;13021:79;;:::i;:::-;12983:119;13141:1;13166:61;13219:7;13210:6;13199:9;13195:22;13166:61;:::i;:::-;13156:71;;13112:125;12899:345;;;;:::o;13250:143::-;13307:5;13338:6;13332:13;13323:22;;13354:33;13381:5;13354:33;:::i;:::-;13250:143;;;;:::o;13399:351::-;13469:6;13518:2;13506:9;13497:7;13493:23;13489:32;13486:119;;;13524:79;;:::i;:::-;13486:119;13644:1;13669:64;13725:7;13716:6;13705:9;13701:22;13669:64;:::i;:::-;13659:74;;13615:128;13399:351;;;;:::o;13756:442::-;13905:4;13943:2;13932:9;13928:18;13920:26;;13956:71;14024:1;14013:9;14009:17;14000:6;13956:71;:::i;:::-;14037:72;14105:2;14094:9;14090:18;14081:6;14037:72;:::i;:::-;14119;14187:2;14176:9;14172:18;14163:6;14119:72;:::i;:::-;13756:442;;;;;;:::o;14204:139::-;14259:5;14290:6;14284:13;14275:22;;14306:31;14331:5;14306:31;:::i;:::-;14204:139;;;;:::o;14349:347::-;14417:6;14466:2;14454:9;14445:7;14441:23;14437:32;14434:119;;;14472:79;;:::i;:::-;14434:119;14592:1;14617:62;14671:7;14662:6;14651:9;14647:22;14617:62;:::i;:::-;14607:72;;14563:126;14349:347;;;;:::o;14702:98::-;14753:6;14787:5;14781:12;14771:22;;14702:98;;;:::o;14806:147::-;14907:11;14944:3;14929:18;;14806:147;;;;:::o;14959:373::-;15063:3;15091:38;15123:5;15091:38;:::i;:::-;15145:88;15226:6;15221:3;15145:88;:::i;:::-;15138:95;;15242:52;15287:6;15282:3;15275:4;15268:5;15264:16;15242:52;:::i;:::-;15319:6;15314:3;15310:16;15303:23;;15067:265;14959:373;;;;:::o;15338:271::-;15468:3;15490:93;15579:3;15570:6;15490:93;:::i;:::-;15483:100;;15600:3;15593:10;;15338:271;;;;:::o;15615:332::-;15736:4;15774:2;15763:9;15759:18;15751:26;;15787:71;15855:1;15844:9;15840:17;15831:6;15787:71;:::i;:::-;15868:72;15936:2;15925:9;15921:18;15912:6;15868:72;:::i;:::-;15615:332;;;;;:::o;15953:154::-;16037:6;16032:3;16027;16014:30;16099:1;16090:6;16085:3;16081:16;16074:27;15953:154;;;:::o;16137:304::-;16235:3;16256:71;16320:6;16315:3;16256:71;:::i;:::-;16249:78;;16337:43;16373:6;16368:3;16361:5;16337:43;:::i;:::-;16405:29;16427:6;16405:29;:::i;:::-;16400:3;16396:39;16389:46;;16137:304;;;;;:::o;16447:656::-;16652:4;16690:2;16679:9;16675:18;16667:26;;16739:9;16733:4;16729:20;16725:1;16714:9;16710:17;16703:47;16767:88;16850:4;16841:6;16833;16767:88;:::i;:::-;16759:96;;16902:9;16896:4;16892:20;16887:2;16876:9;16872:18;16865:48;16930:88;17013:4;17004:6;16996;16930:88;:::i;:::-;16922:96;;17028:68;17092:2;17081:9;17077:18;17068:6;17028:68;:::i;:::-;16447:656;;;;;;;;:::o;17109:442::-;17258:4;17296:2;17285:9;17281:18;17273:26;;17309:71;17377:1;17366:9;17362:17;17353:6;17309:71;:::i;:::-;17390:72;17458:2;17447:9;17443:18;17434:6;17390:72;:::i;:::-;17472;17540:2;17529:9;17525:18;17516:6;17472:72;:::i;:::-;17109:442;;;;;;:::o" }, "gasEstimates": { "creation": { @@ -9864,11580 +9864,11570 @@ "legacyAssembly": { ".code": [ { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6591, "end": 12064, "name": "MSTORE", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "MSTORE", "source": 0 }, { - "begin": 6800, - "end": 6842, + "begin": 6768, + "end": 6810, "name": "PUSH", "source": 0, "value": "FFFFFFFEDE9001A6F7F4798CCB76EF1E7F664701" }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6727, "end": 6843, "name": "DUP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP1", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6727, "end": 6843, "name": "EXP", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "DUP2", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SLOAD", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "DUP2", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "EXP", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP2", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SLOAD", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP2", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6727, "end": 6843, "name": "MUL", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "NOT", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "AND", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SWAP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "DUP4", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "MUL", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "NOT", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "AND", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP4", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6727, "end": 6843, "name": "AND", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "MUL", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "OR", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SWAP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SSTORE", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "POP", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "AND", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "MUL", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "OR", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SSTORE", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "POP", "source": 0 }, { - "begin": 6886, - "end": 6928, + "begin": 6850, + "end": 6892, "name": "PUSH", "source": 0, "value": "FFFFFFFEDE9001A6F7F4798CCB76EF1E7F664701" }, { - "begin": 6853, - "end": 6928, + "begin": 6817, + "end": 6892, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 6853, - "end": 6928, + "begin": 6817, + "end": 6892, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6853, - "end": 6928, + "begin": 6817, + "end": 6892, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6853, "end": 6928, "name": "EXP", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "DUP2", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "SLOAD", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "DUP2", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "EXP", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "DUP2", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "SLOAD", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "DUP2", "source": 0 }, { - "begin": 6853, - "end": 6928, + "begin": 6817, + "end": 6892, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6853, "end": 6928, "name": "MUL", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "NOT", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "AND", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "SWAP1", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "DUP4", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "MUL", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "NOT", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "AND", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "SWAP1", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "DUP4", "source": 0 }, { - "begin": 6853, - "end": 6928, + "begin": 6817, + "end": 6892, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6853, "end": 6928, "name": "AND", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "MUL", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "OR", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "SWAP1", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "SSTORE", "source": 0 }, - { "begin": 6853, "end": 6928, "name": "POP", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "CALLVALUE", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "ISZERO", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "AND", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "MUL", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "OR", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "SWAP1", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "SSTORE", "source": 0 }, + { "begin": 6817, "end": 6892, "name": "POP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "CALLVALUE", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "ISZERO", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "REVERT", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "REVERT", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "tag", "source": 0, "value": "1" }, - { "begin": 6591, "end": 12064, "name": "JUMPDEST", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "POP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPDEST", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "POP", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6591, "end": 12064, "name": "CODECOPY", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "CODECOPY", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6591, "end": 12064, "name": "RETURN", "source": 0 } + { "begin": 6560, "end": 11537, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a2646970667358221220bb130f9250effb623338d0a0c315a1bcd08d8c15c5754a8191f2673314da04c464736f6c634300080b0033", + ".auxdata": "a2646970667358221220e4e422b8a9b7f9d0a8d04f79283e40d5cc607e645371ffe4686666fa28636f8c64736f6c634300080b0033", ".code": [ { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6591, "end": 12064, "name": "MSTORE", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "MSTORE", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "4" }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "LT", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "LT", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "CALLDATALOAD", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 6591, "end": 12064, "name": "SHR", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "SHR", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "84810219" }, - { "begin": 6591, "end": 12064, "name": "GT", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "GT", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "28" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "A9059CBB" }, - { "begin": 6591, "end": 12064, "name": "GT", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "GT", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "29" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "EE5DC1E4" }, - { "begin": 6591, "end": 12064, "name": "GT", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "GT", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "30" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "EE5DC1E4" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "24" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "F0350C04" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "25" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "F5BFBD8A" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "26" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "F8BF8E95" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "27" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 6591, "end": 12064, "name": "JUMP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMP", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "tag", "source": 0, "value": "30" }, - { "begin": 6591, "end": 12064, "name": "JUMPDEST", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPDEST", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "A9059CBB" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "21" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "D3BA4B9E" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "22" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "DD62ED3E" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "23" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 6591, "end": 12064, "name": "JUMP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMP", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "tag", "source": 0, "value": "29" }, - { "begin": 6591, "end": 12064, "name": "JUMPDEST", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPDEST", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "84810219" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "15" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "8D1FDF2F" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "16" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "95D89B41" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "17" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "9B5067E7" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "18" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "9DC29FAC" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "19" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "A887C981" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "20" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 6591, "end": 12064, "name": "JUMP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMP", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "tag", "source": 0, "value": "28" }, - { "begin": 6591, "end": 12064, "name": "JUMPDEST", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPDEST", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "313CE567" }, - { "begin": 6591, "end": 12064, "name": "GT", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "GT", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "31" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "313CE567" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "9" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "40C10F19" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "10" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "5EA20216" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "11" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "6B8751C1" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "12" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "70A08231" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "13" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "7EEA1205" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "14" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 6591, "end": 12064, "name": "JUMP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMP", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "tag", "source": 0, "value": "31" }, - { "begin": 6591, "end": 12064, "name": "JUMPDEST", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPDEST", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "131222F" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "3" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "6FDDE03" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "4" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "95EA7B3" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "5" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "18160DDD" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "6" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "1CDDEC19" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "7" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "23B872DD" }, - { "begin": 6591, "end": 12064, "name": "EQ", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "EQ", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "8" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 6591, "end": 12064, "name": "JUMP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMP", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "tag", "source": 0, "value": "1" }, - { "begin": 6591, "end": 12064, "name": "JUMPDEST", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPDEST", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "CALLDATASIZE", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 6591, "end": 12064, "name": "JUMPI", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "STOP", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPI", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "STOP", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "tag", "source": 0, "value": "2" }, - { "begin": 6591, "end": 12064, "name": "JUMPDEST", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "JUMPDEST", "source": 0 }, { - "begin": 6591, - "end": 12064, + "begin": 6560, + "end": 11537, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6591, "end": 12064, "name": "DUP1", "source": 0 }, - { "begin": 6591, "end": 12064, "name": "REVERT", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "DUP1", "source": 0 }, + { "begin": 6560, "end": 11537, "name": "REVERT", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "tag", "source": 0, "value": "3" }, - { "begin": 7268, "end": 7382, "name": "JUMPDEST", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "CALLVALUE", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "DUP1", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "ISZERO", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "JUMPDEST", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "CALLVALUE", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "DUP1", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "ISZERO", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH [tag]", "source": 0, "value": "34" }, - { "begin": 7268, "end": 7382, "name": "JUMPI", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "JUMPI", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7268, "end": 7382, "name": "DUP1", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "REVERT", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "DUP1", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "REVERT", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "tag", "source": 0, "value": "34" }, - { "begin": 7268, "end": 7382, "name": "JUMPDEST", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "POP", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "JUMPDEST", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "POP", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH [tag]", "source": 0, "value": "35" }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH [tag]", "source": 0, "value": "36" }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "tag", "source": 0, "value": "35" }, - { "begin": 7268, "end": 7382, "name": "JUMPDEST", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "JUMPDEST", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7268, "end": 7382, "name": "MLOAD", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "MLOAD", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH [tag]", "source": 0, "value": "37" }, - { "begin": 7268, "end": 7382, "name": "SWAP2", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "SWAP1", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "SWAP2", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "SWAP1", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "tag", "source": 0, "value": "37" }, - { "begin": 7268, "end": 7382, "name": "JUMPDEST", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "JUMPDEST", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7268, "end": 7382, "name": "MLOAD", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "DUP1", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "SWAP2", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "SUB", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "SWAP1", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "RETURN", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "MLOAD", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "DUP1", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "SWAP2", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "SUB", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "SWAP1", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "RETURN", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "tag", "source": 0, "value": "4" }, - { "begin": 7396, "end": 7601, "name": "JUMPDEST", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "CALLVALUE", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "DUP1", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "ISZERO", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "JUMPDEST", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "CALLVALUE", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "DUP1", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "ISZERO", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH [tag]", "source": 0, "value": "39" }, - { "begin": 7396, "end": 7601, "name": "JUMPI", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "JUMPI", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7396, "end": 7601, "name": "DUP1", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "REVERT", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "DUP1", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "REVERT", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "tag", "source": 0, "value": "39" }, - { "begin": 7396, "end": 7601, "name": "JUMPDEST", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "POP", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "JUMPDEST", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "POP", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH [tag]", "source": 0, "value": "40" }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH [tag]", "source": 0, "value": "41" }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "tag", "source": 0, "value": "40" }, - { "begin": 7396, "end": 7601, "name": "JUMPDEST", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "JUMPDEST", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7396, "end": 7601, "name": "MLOAD", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "MLOAD", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH [tag]", "source": 0, "value": "42" }, - { "begin": 7396, "end": 7601, "name": "SWAP2", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "SWAP1", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "SWAP2", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "SWAP1", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH [tag]", "source": 0, "value": "43" }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "tag", "source": 0, "value": "42" }, - { "begin": 7396, "end": 7601, "name": "JUMPDEST", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "JUMPDEST", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7396, "end": 7601, "name": "MLOAD", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "DUP1", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "SWAP2", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "SUB", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "SWAP1", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "RETURN", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "MLOAD", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "DUP1", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "SWAP2", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "SUB", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "SWAP1", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "RETURN", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "tag", "source": 0, "value": "5" }, - { "begin": 10928, "end": 11085, "name": "JUMPDEST", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "JUMPDEST", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "CALLVALUE", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "DUP1", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "ISZERO", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "DUP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "ISZERO", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH [tag]", "source": 0, "value": "44" }, - { "begin": 10928, "end": 11085, "name": "JUMPI", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "JUMPI", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10928, "end": 11085, "name": "DUP1", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "REVERT", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "DUP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "REVERT", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "tag", "source": 0, "value": "44" }, - { "begin": 10928, "end": 11085, "name": "JUMPDEST", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "POP", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "JUMPDEST", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "POP", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH [tag]", "source": 0, "value": "45" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 10928, "end": 11085, "name": "DUP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "DUP1", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SUB", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "DUP2", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "ADD", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SWAP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SUB", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "DUP2", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "ADD", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP1", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH [tag]", "source": 0, "value": "46" }, - { "begin": 10928, "end": 11085, "name": "SWAP2", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SWAP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP2", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP1", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "tag", "source": 0, "value": "46" }, - { "begin": 10928, "end": 11085, "name": "JUMPDEST", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "JUMPDEST", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH [tag]", "source": 0, "value": "48" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "tag", "source": 0, "value": "45" }, - { "begin": 10928, "end": 11085, "name": "JUMPDEST", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "JUMPDEST", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10928, "end": 11085, "name": "MLOAD", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "MLOAD", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH [tag]", "source": 0, "value": "49" }, - { "begin": 10928, "end": 11085, "name": "SWAP2", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SWAP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP2", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP1", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "tag", "source": 0, "value": "49" }, - { "begin": 10928, "end": 11085, "name": "JUMPDEST", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "JUMPDEST", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10928, "end": 11085, "name": "MLOAD", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "DUP1", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SWAP2", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SUB", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SWAP1", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "RETURN", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "MLOAD", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "DUP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP2", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SUB", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP1", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "RETURN", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "tag", "source": 0, "value": "6" }, - { "begin": 8081, "end": 8293, "name": "JUMPDEST", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "CALLVALUE", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "DUP1", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "ISZERO", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "JUMPDEST", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "CALLVALUE", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "DUP1", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "ISZERO", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH [tag]", "source": 0, "value": "51" }, - { "begin": 8081, "end": 8293, "name": "JUMPI", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "JUMPI", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8081, "end": 8293, "name": "DUP1", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "REVERT", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "DUP1", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "REVERT", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "tag", "source": 0, "value": "51" }, - { "begin": 8081, "end": 8293, "name": "JUMPDEST", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "POP", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "JUMPDEST", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "POP", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH [tag]", "source": 0, "value": "52" }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH [tag]", "source": 0, "value": "53" }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "tag", "source": 0, "value": "52" }, - { "begin": 8081, "end": 8293, "name": "JUMPDEST", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "JUMPDEST", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8081, "end": 8293, "name": "MLOAD", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "MLOAD", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH [tag]", "source": 0, "value": "54" }, - { "begin": 8081, "end": 8293, "name": "SWAP2", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "SWAP1", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "SWAP2", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "SWAP1", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH [tag]", "source": 0, "value": "55" }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "tag", "source": 0, "value": "54" }, - { "begin": 8081, "end": 8293, "name": "JUMPDEST", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "JUMPDEST", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8081, "end": 8293, "name": "MLOAD", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "DUP1", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "SWAP2", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "SUB", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "SWAP1", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "RETURN", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "MLOAD", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "DUP1", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "SWAP2", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "SUB", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "SWAP1", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "RETURN", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "tag", "source": 0, "value": "7" }, - { "begin": 9727, "end": 9850, "name": "JUMPDEST", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "CALLVALUE", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "DUP1", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "ISZERO", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "JUMPDEST", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "CALLVALUE", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "DUP1", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "ISZERO", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH [tag]", "source": 0, "value": "56" }, - { "begin": 9727, "end": 9850, "name": "JUMPI", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "JUMPI", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9727, "end": 9850, "name": "DUP1", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "REVERT", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "DUP1", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "REVERT", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "tag", "source": 0, "value": "56" }, - { "begin": 9727, "end": 9850, "name": "JUMPDEST", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "POP", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "JUMPDEST", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "POP", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH [tag]", "source": 0, "value": "57" }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH [tag]", "source": 0, "value": "58" }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "tag", "source": 0, "value": "57" }, - { "begin": 9727, "end": 9850, "name": "JUMPDEST", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "JUMPDEST", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9727, "end": 9850, "name": "MLOAD", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "MLOAD", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH [tag]", "source": 0, "value": "59" }, - { "begin": 9727, "end": 9850, "name": "SWAP2", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "SWAP1", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "SWAP2", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "SWAP1", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "tag", "source": 0, "value": "59" }, - { "begin": 9727, "end": 9850, "name": "JUMPDEST", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "JUMPDEST", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9727, "end": 9850, "name": "MLOAD", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "DUP1", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "SWAP2", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "SUB", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "SWAP1", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "RETURN", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "MLOAD", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "DUP1", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "SWAP2", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "SUB", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "SWAP1", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "RETURN", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "tag", "source": 0, "value": "8" }, - { "begin": 11419, "end": 11661, "name": "JUMPDEST", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "JUMPDEST", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "CALLVALUE", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "DUP1", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "ISZERO", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "DUP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "ISZERO", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH [tag]", "source": 0, "value": "60" }, - { "begin": 11419, "end": 11661, "name": "JUMPI", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "JUMPI", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11419, "end": 11661, "name": "DUP1", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "REVERT", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "DUP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "REVERT", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "tag", "source": 0, "value": "60" }, - { "begin": 11419, "end": 11661, "name": "JUMPDEST", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "POP", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "JUMPDEST", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "POP", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH [tag]", "source": 0, "value": "61" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 11419, "end": 11661, "name": "DUP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "DUP1", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SUB", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "DUP2", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "ADD", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SWAP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SUB", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "DUP2", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "ADD", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP1", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH [tag]", "source": 0, "value": "62" }, - { "begin": 11419, "end": 11661, "name": "SWAP2", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SWAP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP2", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP1", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH [tag]", "source": 0, "value": "63" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "tag", "source": 0, "value": "62" }, - { "begin": 11419, "end": 11661, "name": "JUMPDEST", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "JUMPDEST", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH [tag]", "source": 0, "value": "64" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "tag", "source": 0, "value": "61" }, - { "begin": 11419, "end": 11661, "name": "JUMPDEST", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "JUMPDEST", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11419, "end": 11661, "name": "MLOAD", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "MLOAD", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH [tag]", "source": 0, "value": "65" }, - { "begin": 11419, "end": 11661, "name": "SWAP2", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SWAP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP2", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP1", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "tag", "source": 0, "value": "65" }, - { "begin": 11419, "end": 11661, "name": "JUMPDEST", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "JUMPDEST", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11419, "end": 11661, "name": "MLOAD", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "DUP1", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SWAP2", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SUB", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SWAP1", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "RETURN", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "MLOAD", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "DUP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP2", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SUB", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP1", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "RETURN", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "tag", "source": 0, "value": "9" }, - { "begin": 7862, "end": 8067, "name": "JUMPDEST", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "CALLVALUE", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "DUP1", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "ISZERO", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "JUMPDEST", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "CALLVALUE", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "DUP1", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "ISZERO", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH [tag]", "source": 0, "value": "66" }, - { "begin": 7862, "end": 8067, "name": "JUMPI", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "JUMPI", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7862, "end": 8067, "name": "DUP1", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "REVERT", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "DUP1", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "REVERT", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "tag", "source": 0, "value": "66" }, - { "begin": 7862, "end": 8067, "name": "JUMPDEST", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "POP", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "JUMPDEST", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "POP", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH [tag]", "source": 0, "value": "67" }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH [tag]", "source": 0, "value": "68" }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "tag", "source": 0, "value": "67" }, - { "begin": 7862, "end": 8067, "name": "JUMPDEST", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "JUMPDEST", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7862, "end": 8067, "name": "MLOAD", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "MLOAD", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH [tag]", "source": 0, "value": "69" }, - { "begin": 7862, "end": 8067, "name": "SWAP2", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "SWAP1", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "SWAP2", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "SWAP1", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH [tag]", "source": 0, "value": "70" }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "tag", "source": 0, "value": "69" }, - { "begin": 7862, "end": 8067, "name": "JUMPDEST", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "JUMPDEST", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7862, "end": 8067, "name": "MLOAD", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "DUP1", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "SWAP2", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "SUB", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "SWAP1", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "RETURN", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "MLOAD", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "DUP1", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "SWAP2", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "SUB", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "SWAP1", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "RETURN", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "tag", "source": 0, "value": "10" }, - { "begin": 8966, "end": 9111, "name": "JUMPDEST", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "CALLVALUE", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "DUP1", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "ISZERO", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "JUMPDEST", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "CALLVALUE", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "DUP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "ISZERO", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH [tag]", "source": 0, "value": "71" }, - { "begin": 8966, "end": 9111, "name": "JUMPI", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "JUMPI", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8966, "end": 9111, "name": "DUP1", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "REVERT", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "DUP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "REVERT", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "tag", "source": 0, "value": "71" }, - { "begin": 8966, "end": 9111, "name": "JUMPDEST", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "POP", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "JUMPDEST", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "POP", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH [tag]", "source": 0, "value": "72" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8966, "end": 9111, "name": "DUP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "DUP1", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SUB", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "DUP2", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "ADD", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SWAP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SUB", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "DUP2", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "ADD", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP1", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH [tag]", "source": 0, "value": "73" }, - { "begin": 8966, "end": 9111, "name": "SWAP2", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SWAP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP2", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP1", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "tag", "source": 0, "value": "73" }, - { "begin": 8966, "end": 9111, "name": "JUMPDEST", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "JUMPDEST", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH [tag]", "source": 0, "value": "74" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "tag", "source": 0, "value": "72" }, - { "begin": 8966, "end": 9111, "name": "JUMPDEST", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "JUMPDEST", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8966, "end": 9111, "name": "MLOAD", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "MLOAD", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH [tag]", "source": 0, "value": "75" }, - { "begin": 8966, "end": 9111, "name": "SWAP2", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SWAP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP2", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP1", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "tag", "source": 0, "value": "75" }, - { "begin": 8966, "end": 9111, "name": "JUMPDEST", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "JUMPDEST", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8966, "end": 9111, "name": "MLOAD", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "DUP1", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SWAP2", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SUB", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SWAP1", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "RETURN", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "MLOAD", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "DUP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP2", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SUB", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP1", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "RETURN", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "tag", "source": 0, "value": "11" }, - { "begin": 9439, "end": 9572, "name": "JUMPDEST", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "CALLVALUE", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "DUP1", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "ISZERO", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "JUMPDEST", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "CALLVALUE", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "DUP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "ISZERO", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH [tag]", "source": 0, "value": "76" }, - { "begin": 9439, "end": 9572, "name": "JUMPI", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "JUMPI", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9439, "end": 9572, "name": "DUP1", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "REVERT", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "DUP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "REVERT", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "tag", "source": 0, "value": "76" }, - { "begin": 9439, "end": 9572, "name": "JUMPDEST", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "POP", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "JUMPDEST", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "POP", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH [tag]", "source": 0, "value": "77" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9439, "end": 9572, "name": "DUP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "DUP1", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SUB", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "DUP2", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "ADD", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SWAP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SUB", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "DUP2", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "ADD", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP1", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH [tag]", "source": 0, "value": "78" }, - { "begin": 9439, "end": 9572, "name": "SWAP2", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SWAP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP2", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP1", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH [tag]", "source": 0, "value": "79" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "tag", "source": 0, "value": "78" }, - { "begin": 9439, "end": 9572, "name": "JUMPDEST", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "JUMPDEST", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH [tag]", "source": 0, "value": "80" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "tag", "source": 0, "value": "77" }, - { "begin": 9439, "end": 9572, "name": "JUMPDEST", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "JUMPDEST", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9439, "end": 9572, "name": "MLOAD", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "MLOAD", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH [tag]", "source": 0, "value": "81" }, - { "begin": 9439, "end": 9572, "name": "SWAP2", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SWAP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP2", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP1", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "tag", "source": 0, "value": "81" }, - { "begin": 9439, "end": 9572, "name": "JUMPDEST", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "JUMPDEST", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9439, "end": 9572, "name": "MLOAD", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "DUP1", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SWAP2", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SUB", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SWAP1", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "RETURN", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "MLOAD", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "DUP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP2", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SUB", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "RETURN", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "tag", "source": 0, "value": "12" }, - { "begin": 9586, "end": 9713, "name": "JUMPDEST", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "CALLVALUE", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "DUP1", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "ISZERO", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "JUMPDEST", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "CALLVALUE", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "DUP1", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "ISZERO", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH [tag]", "source": 0, "value": "82" }, - { "begin": 9586, "end": 9713, "name": "JUMPI", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "JUMPI", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9586, "end": 9713, "name": "DUP1", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "REVERT", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "DUP1", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "REVERT", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "tag", "source": 0, "value": "82" }, - { "begin": 9586, "end": 9713, "name": "JUMPDEST", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "POP", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "JUMPDEST", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "POP", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH [tag]", "source": 0, "value": "83" }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH [tag]", "source": 0, "value": "84" }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "tag", "source": 0, "value": "83" }, - { "begin": 9586, "end": 9713, "name": "JUMPDEST", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "JUMPDEST", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9586, "end": 9713, "name": "MLOAD", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "MLOAD", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH [tag]", "source": 0, "value": "85" }, - { "begin": 9586, "end": 9713, "name": "SWAP2", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "SWAP1", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "SWAP2", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "SWAP1", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "tag", "source": 0, "value": "85" }, - { "begin": 9586, "end": 9713, "name": "JUMPDEST", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "JUMPDEST", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9586, "end": 9713, "name": "MLOAD", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "DUP1", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "SWAP2", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "SUB", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "SWAP1", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "RETURN", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "MLOAD", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "DUP1", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "SWAP2", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "SUB", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "SWAP1", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "RETURN", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "tag", "source": 0, "value": "13" }, - { "begin": 8319, "end": 8541, "name": "JUMPDEST", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "CALLVALUE", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "DUP1", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "ISZERO", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "JUMPDEST", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "CALLVALUE", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "DUP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "ISZERO", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH [tag]", "source": 0, "value": "86" }, - { "begin": 8319, "end": 8541, "name": "JUMPI", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "JUMPI", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8319, "end": 8541, "name": "DUP1", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "REVERT", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "DUP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "REVERT", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "tag", "source": 0, "value": "86" }, - { "begin": 8319, "end": 8541, "name": "JUMPDEST", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "POP", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "JUMPDEST", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "POP", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH [tag]", "source": 0, "value": "87" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8319, "end": 8541, "name": "DUP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "DUP1", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SUB", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "DUP2", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "ADD", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SWAP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SUB", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "DUP2", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "ADD", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP1", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH [tag]", "source": 0, "value": "88" }, - { "begin": 8319, "end": 8541, "name": "SWAP2", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SWAP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP2", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP1", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH [tag]", "source": 0, "value": "79" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "tag", "source": 0, "value": "88" }, - { "begin": 8319, "end": 8541, "name": "JUMPDEST", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "JUMPDEST", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH [tag]", "source": 0, "value": "89" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "tag", "source": 0, "value": "87" }, - { "begin": 8319, "end": 8541, "name": "JUMPDEST", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "JUMPDEST", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8319, "end": 8541, "name": "MLOAD", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "MLOAD", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH [tag]", "source": 0, "value": "90" }, - { "begin": 8319, "end": 8541, "name": "SWAP2", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SWAP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP2", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP1", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH [tag]", "source": 0, "value": "55" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "tag", "source": 0, "value": "90" }, - { "begin": 8319, "end": 8541, "name": "JUMPDEST", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "JUMPDEST", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8319, "end": 8541, "name": "MLOAD", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "DUP1", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SWAP2", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SUB", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SWAP1", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "RETURN", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "MLOAD", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "DUP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP2", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SUB", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "RETURN", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "tag", "source": 0, "value": "14" }, - { "begin": 11687, "end": 12058, "name": "JUMPDEST", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "JUMPDEST", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "CALLVALUE", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "DUP1", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "ISZERO", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "DUP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "ISZERO", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH [tag]", "source": 0, "value": "91" }, - { "begin": 11687, "end": 12058, "name": "JUMPI", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "JUMPI", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11687, "end": 12058, "name": "DUP1", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "REVERT", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "DUP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "REVERT", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "tag", "source": 0, "value": "91" }, - { "begin": 11687, "end": 12058, "name": "JUMPDEST", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "POP", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "JUMPDEST", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "POP", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH [tag]", "source": 0, "value": "92" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 11687, "end": 12058, "name": "DUP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "DUP1", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SUB", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "DUP2", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "ADD", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SWAP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SUB", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "DUP2", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "ADD", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP1", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH [tag]", "source": 0, "value": "93" }, - { "begin": 11687, "end": 12058, "name": "SWAP2", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SWAP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP2", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP1", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH [tag]", "source": 0, "value": "63" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "tag", "source": 0, "value": "93" }, - { "begin": 11687, "end": 12058, "name": "JUMPDEST", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "JUMPDEST", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH [tag]", "source": 0, "value": "94" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "tag", "source": 0, "value": "92" }, - { "begin": 11687, "end": 12058, "name": "JUMPDEST", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "JUMPDEST", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11687, "end": 12058, "name": "MLOAD", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "MLOAD", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH [tag]", "source": 0, "value": "95" }, - { "begin": 11687, "end": 12058, "name": "SWAP2", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SWAP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP2", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP1", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "tag", "source": 0, "value": "95" }, - { "begin": 11687, "end": 12058, "name": "JUMPDEST", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "JUMPDEST", "source": 0 }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11687, "end": 12058, "name": "MLOAD", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "DUP1", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SWAP2", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SUB", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SWAP1", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "RETURN", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "MLOAD", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "DUP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP2", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SUB", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP1", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "RETURN", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "tag", "source": 0, "value": "15" }, - { "begin": 7039, "end": 7254, "name": "JUMPDEST", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "CALLVALUE", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "DUP1", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "ISZERO", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "JUMPDEST", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "CALLVALUE", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "DUP1", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "ISZERO", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "PUSH [tag]", "source": 0, "value": "96" }, - { "begin": 7039, "end": 7254, "name": "JUMPI", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "JUMPI", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7039, "end": 7254, "name": "DUP1", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "REVERT", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "DUP1", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "REVERT", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "tag", "source": 0, "value": "96" }, - { "begin": 7039, "end": 7254, "name": "JUMPDEST", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "POP", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "JUMPDEST", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "POP", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "PUSH [tag]", "source": 0, "value": "97" }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 7039, "end": 7254, "name": "DUP1", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "DUP1", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "SUB", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "DUP2", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "ADD", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "SWAP1", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "SUB", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "DUP2", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "ADD", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "SWAP1", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "PUSH [tag]", "source": 0, "value": "98" }, - { "begin": 7039, "end": 7254, "name": "SWAP2", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "SWAP1", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "SWAP2", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "SWAP1", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "PUSH [tag]", "source": 0, "value": "79" }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "tag", "source": 0, "value": "98" }, - { "begin": 7039, "end": 7254, "name": "JUMPDEST", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "JUMPDEST", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "PUSH [tag]", "source": 0, "value": "99" }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "tag", "source": 0, "value": "97" }, - { "begin": 7039, "end": 7254, "name": "JUMPDEST", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "STOP", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "JUMPDEST", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "STOP", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "tag", "source": 0, "value": "16" }, - { "begin": 9288, "end": 9425, "name": "JUMPDEST", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "CALLVALUE", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "DUP1", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "ISZERO", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "JUMPDEST", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "CALLVALUE", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "DUP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "ISZERO", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH [tag]", "source": 0, "value": "100" }, - { "begin": 9288, "end": 9425, "name": "JUMPI", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "JUMPI", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9288, "end": 9425, "name": "DUP1", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "REVERT", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "DUP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "REVERT", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "tag", "source": 0, "value": "100" }, - { "begin": 9288, "end": 9425, "name": "JUMPDEST", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "POP", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "JUMPDEST", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "POP", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH [tag]", "source": 0, "value": "101" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9288, "end": 9425, "name": "DUP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "DUP1", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SUB", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "DUP2", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "ADD", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SWAP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SUB", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "DUP2", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "ADD", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP1", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH [tag]", "source": 0, "value": "102" }, - { "begin": 9288, "end": 9425, "name": "SWAP2", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SWAP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP2", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP1", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH [tag]", "source": 0, "value": "79" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "tag", "source": 0, "value": "102" }, - { "begin": 9288, "end": 9425, "name": "JUMPDEST", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "JUMPDEST", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH [tag]", "source": 0, "value": "103" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "tag", "source": 0, "value": "101" }, - { "begin": 9288, "end": 9425, "name": "JUMPDEST", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "JUMPDEST", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9288, "end": 9425, "name": "MLOAD", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "MLOAD", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH [tag]", "source": 0, "value": "104" }, - { "begin": 9288, "end": 9425, "name": "SWAP2", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SWAP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP2", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP1", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "tag", "source": 0, "value": "104" }, - { "begin": 9288, "end": 9425, "name": "JUMPDEST", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "JUMPDEST", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9288, "end": 9425, "name": "MLOAD", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "DUP1", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SWAP2", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SUB", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SWAP1", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "RETURN", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "MLOAD", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "DUP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP2", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SUB", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "RETURN", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "tag", "source": 0, "value": "17" }, - { "begin": 7627, "end": 7836, "name": "JUMPDEST", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "CALLVALUE", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "DUP1", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "ISZERO", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "JUMPDEST", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "CALLVALUE", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "DUP1", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "ISZERO", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH [tag]", "source": 0, "value": "105" }, - { "begin": 7627, "end": 7836, "name": "JUMPI", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "JUMPI", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7627, "end": 7836, "name": "DUP1", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "REVERT", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "DUP1", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "REVERT", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "tag", "source": 0, "value": "105" }, - { "begin": 7627, "end": 7836, "name": "JUMPDEST", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "POP", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "JUMPDEST", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "POP", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH [tag]", "source": 0, "value": "106" }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH [tag]", "source": 0, "value": "107" }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "tag", "source": 0, "value": "106" }, - { "begin": 7627, "end": 7836, "name": "JUMPDEST", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "JUMPDEST", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7627, "end": 7836, "name": "MLOAD", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "MLOAD", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH [tag]", "source": 0, "value": "108" }, - { "begin": 7627, "end": 7836, "name": "SWAP2", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "SWAP1", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "SWAP2", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "SWAP1", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH [tag]", "source": 0, "value": "43" }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "tag", "source": 0, "value": "108" }, - { "begin": 7627, "end": 7836, "name": "JUMPDEST", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "JUMPDEST", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7627, "end": 7836, "name": "MLOAD", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "DUP1", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "SWAP2", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "SUB", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "SWAP1", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "RETURN", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "MLOAD", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "DUP1", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "SWAP2", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "SUB", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "SWAP1", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "RETURN", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "tag", "source": 0, "value": "18" }, - { "begin": 6727, "end": 6843, "name": "JUMPDEST", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "CALLVALUE", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "DUP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "ISZERO", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "JUMPDEST", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "CALLVALUE", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "ISZERO", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH [tag]", "source": 0, "value": "109" }, - { "begin": 6727, "end": 6843, "name": "JUMPI", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "JUMPI", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6727, "end": 6843, "name": "DUP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "REVERT", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "REVERT", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "tag", "source": 0, "value": "109" }, - { "begin": 6727, "end": 6843, "name": "JUMPDEST", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "POP", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "JUMPDEST", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "POP", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH [tag]", "source": 0, "value": "110" }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH [tag]", "source": 0, "value": "111" }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "tag", "source": 0, "value": "110" }, - { "begin": 6727, "end": 6843, "name": "JUMPDEST", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "JUMPDEST", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6727, "end": 6843, "name": "MLOAD", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "MLOAD", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH [tag]", "source": 0, "value": "112" }, - { "begin": 6727, "end": 6843, "name": "SWAP2", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SWAP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP2", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP1", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH [tag]", "source": 0, "value": "113" }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "tag", "source": 0, "value": "112" }, - { "begin": 6727, "end": 6843, "name": "JUMPDEST", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "JUMPDEST", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6727, "end": 6843, "name": "MLOAD", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "DUP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SWAP2", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SUB", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SWAP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "RETURN", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "MLOAD", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP2", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SUB", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "RETURN", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "tag", "source": 0, "value": "19" }, - { "begin": 9125, "end": 9274, "name": "JUMPDEST", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "CALLVALUE", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "DUP1", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "ISZERO", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "JUMPDEST", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "CALLVALUE", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "DUP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "ISZERO", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH [tag]", "source": 0, "value": "114" }, - { "begin": 9125, "end": 9274, "name": "JUMPI", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "JUMPI", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9125, "end": 9274, "name": "DUP1", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "REVERT", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "DUP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "REVERT", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "tag", "source": 0, "value": "114" }, - { "begin": 9125, "end": 9274, "name": "JUMPDEST", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "POP", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "JUMPDEST", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "POP", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH [tag]", "source": 0, "value": "115" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9125, "end": 9274, "name": "DUP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "DUP1", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SUB", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "DUP2", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "ADD", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SWAP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SUB", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "DUP2", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "ADD", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP1", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH [tag]", "source": 0, "value": "116" }, - { "begin": 9125, "end": 9274, "name": "SWAP2", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SWAP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP2", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP1", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "tag", "source": 0, "value": "116" }, - { "begin": 9125, "end": 9274, "name": "JUMPDEST", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "JUMPDEST", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH [tag]", "source": 0, "value": "117" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "tag", "source": 0, "value": "115" }, - { "begin": 9125, "end": 9274, "name": "JUMPDEST", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "JUMPDEST", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9125, "end": 9274, "name": "MLOAD", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "MLOAD", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH [tag]", "source": 0, "value": "118" }, - { "begin": 9125, "end": 9274, "name": "SWAP2", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SWAP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP2", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP1", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "tag", "source": 0, "value": "118" }, - { "begin": 9125, "end": 9274, "name": "JUMPDEST", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "JUMPDEST", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9125, "end": 9274, "name": "MLOAD", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "DUP1", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SWAP2", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SUB", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SWAP1", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "RETURN", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "MLOAD", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "DUP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP2", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SUB", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP1", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "RETURN", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "tag", "source": 0, "value": "20" }, - { "begin": 10616, "end": 10902, "name": "JUMPDEST", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "JUMPDEST", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "CALLVALUE", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "DUP1", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "ISZERO", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "DUP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "ISZERO", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH [tag]", "source": 0, "value": "119" }, - { "begin": 10616, "end": 10902, "name": "JUMPI", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "JUMPI", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10616, "end": 10902, "name": "DUP1", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "REVERT", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "DUP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "REVERT", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "tag", "source": 0, "value": "119" }, - { "begin": 10616, "end": 10902, "name": "JUMPDEST", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "POP", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "JUMPDEST", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "POP", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH [tag]", "source": 0, "value": "120" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 10616, "end": 10902, "name": "DUP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "DUP1", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SUB", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "DUP2", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "ADD", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SWAP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SUB", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "DUP2", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "ADD", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP1", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH [tag]", "source": 0, "value": "121" }, - { "begin": 10616, "end": 10902, "name": "SWAP2", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SWAP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP2", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP1", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "tag", "source": 0, "value": "121" }, - { "begin": 10616, "end": 10902, "name": "JUMPDEST", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "JUMPDEST", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH [tag]", "source": 0, "value": "122" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "tag", "source": 0, "value": "120" }, - { "begin": 10616, "end": 10902, "name": "JUMPDEST", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "JUMPDEST", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10616, "end": 10902, "name": "MLOAD", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "MLOAD", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH [tag]", "source": 0, "value": "123" }, - { "begin": 10616, "end": 10902, "name": "SWAP2", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SWAP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP2", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP1", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "tag", "source": 0, "value": "123" }, - { "begin": 10616, "end": 10902, "name": "JUMPDEST", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "JUMPDEST", "source": 0 }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10616, "end": 10902, "name": "MLOAD", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "DUP1", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SWAP2", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SUB", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SWAP1", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "RETURN", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "MLOAD", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "DUP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP2", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SUB", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP1", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "RETURN", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "tag", "source": 0, "value": "21" }, - { "begin": 8799, "end": 8952, "name": "JUMPDEST", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "CALLVALUE", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "DUP1", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "ISZERO", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "JUMPDEST", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "CALLVALUE", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "DUP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "ISZERO", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH [tag]", "source": 0, "value": "124" }, - { "begin": 8799, "end": 8952, "name": "JUMPI", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "JUMPI", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8799, "end": 8952, "name": "DUP1", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "REVERT", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "DUP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "REVERT", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "tag", "source": 0, "value": "124" }, - { "begin": 8799, "end": 8952, "name": "JUMPDEST", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "POP", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "JUMPDEST", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "POP", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH [tag]", "source": 0, "value": "125" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8799, "end": 8952, "name": "DUP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "DUP1", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SUB", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "DUP2", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "ADD", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SWAP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SUB", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "DUP2", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "ADD", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP1", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH [tag]", "source": 0, "value": "126" }, - { "begin": 8799, "end": 8952, "name": "SWAP2", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SWAP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP2", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP1", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "tag", "source": 0, "value": "126" }, - { "begin": 8799, "end": 8952, "name": "JUMPDEST", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "JUMPDEST", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH [tag]", "source": 0, "value": "127" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "tag", "source": 0, "value": "125" }, - { "begin": 8799, "end": 8952, "name": "JUMPDEST", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "JUMPDEST", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8799, "end": 8952, "name": "MLOAD", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "MLOAD", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH [tag]", "source": 0, "value": "128" }, - { "begin": 8799, "end": 8952, "name": "SWAP2", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SWAP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP2", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP1", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "tag", "source": 0, "value": "128" }, - { "begin": 8799, "end": 8952, "name": "JUMPDEST", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "JUMPDEST", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8799, "end": 8952, "name": "MLOAD", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "DUP1", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SWAP2", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SUB", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SWAP1", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "RETURN", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "MLOAD", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "DUP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP2", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SUB", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP1", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "RETURN", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "tag", "source": 0, "value": "22" }, - { "begin": 10459, "end": 10590, "name": "JUMPDEST", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "JUMPDEST", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "CALLVALUE", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "DUP1", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "ISZERO", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "DUP1", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "ISZERO", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH [tag]", "source": 0, "value": "129" }, - { "begin": 10459, "end": 10590, "name": "JUMPI", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "JUMPI", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10459, "end": 10590, "name": "DUP1", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "REVERT", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "DUP1", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "REVERT", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "tag", "source": 0, "value": "129" }, - { "begin": 10459, "end": 10590, "name": "JUMPDEST", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "POP", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "JUMPDEST", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "POP", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH [tag]", "source": 0, "value": "130" }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH [tag]", "source": 0, "value": "131" }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "tag", "source": 0, "value": "130" }, - { "begin": 10459, "end": 10590, "name": "JUMPDEST", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "JUMPDEST", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10459, "end": 10590, "name": "MLOAD", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "MLOAD", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH [tag]", "source": 0, "value": "132" }, - { "begin": 10459, "end": 10590, "name": "SWAP2", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "SWAP1", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "SWAP2", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "SWAP1", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "tag", "source": 0, "value": "132" }, - { "begin": 10459, "end": 10590, "name": "JUMPDEST", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "JUMPDEST", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10459, "end": 10590, "name": "MLOAD", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "DUP1", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "SWAP2", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "SUB", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "SWAP1", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "RETURN", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "MLOAD", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "DUP1", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "SWAP2", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "SUB", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "SWAP1", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "RETURN", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "tag", "source": 0, "value": "23" }, - { "begin": 8567, "end": 8785, "name": "JUMPDEST", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "CALLVALUE", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "DUP1", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "ISZERO", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "JUMPDEST", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "CALLVALUE", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "DUP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "ISZERO", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH [tag]", "source": 0, "value": "133" }, - { "begin": 8567, "end": 8785, "name": "JUMPI", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "JUMPI", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8567, "end": 8785, "name": "DUP1", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "REVERT", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "DUP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "REVERT", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "tag", "source": 0, "value": "133" }, - { "begin": 8567, "end": 8785, "name": "JUMPDEST", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "POP", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "JUMPDEST", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "POP", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH [tag]", "source": 0, "value": "134" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8567, "end": 8785, "name": "DUP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "DUP1", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SUB", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "DUP2", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "ADD", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SWAP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SUB", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "DUP2", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "ADD", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP1", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH [tag]", "source": 0, "value": "135" }, - { "begin": 8567, "end": 8785, "name": "SWAP2", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SWAP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP2", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP1", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH [tag]", "source": 0, "value": "136" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "tag", "source": 0, "value": "135" }, - { "begin": 8567, "end": 8785, "name": "JUMPDEST", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "JUMPDEST", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH [tag]", "source": 0, "value": "137" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "tag", "source": 0, "value": "134" }, - { "begin": 8567, "end": 8785, "name": "JUMPDEST", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "JUMPDEST", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8567, "end": 8785, "name": "MLOAD", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "MLOAD", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH [tag]", "source": 0, "value": "138" }, - { "begin": 8567, "end": 8785, "name": "SWAP2", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SWAP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP2", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP1", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH [tag]", "source": 0, "value": "55" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "tag", "source": 0, "value": "138" }, - { "begin": 8567, "end": 8785, "name": "JUMPDEST", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "JUMPDEST", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8567, "end": 8785, "name": "MLOAD", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "DUP1", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SWAP2", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SUB", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SWAP1", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "RETURN", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "MLOAD", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "DUP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP2", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SUB", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP1", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "RETURN", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "tag", "source": 0, "value": "24" }, - { "begin": 10236, "end": 10445, "name": "JUMPDEST", "source": 0 }, - { - "begin": 10236, - "end": 10445, - "name": "CALLVALUE", - "source": 0 - }, - { "begin": 10236, "end": 10445, "name": "DUP1", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "ISZERO", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "JUMPDEST", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "CALLVALUE", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "DUP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "ISZERO", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH [tag]", "source": 0, "value": "139" }, - { "begin": 10236, "end": 10445, "name": "JUMPI", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "JUMPI", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10236, "end": 10445, "name": "DUP1", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "REVERT", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "DUP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "REVERT", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "tag", "source": 0, "value": "139" }, - { "begin": 10236, "end": 10445, "name": "JUMPDEST", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "POP", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "JUMPDEST", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "POP", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH [tag]", "source": 0, "value": "140" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 10236, "end": 10445, "name": "DUP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "DUP1", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SUB", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "DUP2", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "ADD", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SWAP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SUB", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "DUP2", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "ADD", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP1", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH [tag]", "source": 0, "value": "141" }, - { "begin": 10236, "end": 10445, "name": "SWAP2", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SWAP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP2", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP1", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH [tag]", "source": 0, "value": "142" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "tag", "source": 0, "value": "141" }, - { "begin": 10236, "end": 10445, "name": "JUMPDEST", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "JUMPDEST", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH [tag]", "source": 0, "value": "143" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "tag", "source": 0, "value": "140" }, - { "begin": 10236, "end": 10445, "name": "JUMPDEST", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "JUMPDEST", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10236, "end": 10445, "name": "MLOAD", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "MLOAD", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH [tag]", "source": 0, "value": "144" }, - { "begin": 10236, "end": 10445, "name": "SWAP2", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SWAP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP2", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP1", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "tag", "source": 0, "value": "144" }, - { "begin": 10236, "end": 10445, "name": "JUMPDEST", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "JUMPDEST", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10236, "end": 10445, "name": "MLOAD", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "DUP1", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SWAP2", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SUB", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SWAP1", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "RETURN", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "MLOAD", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "DUP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP2", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SUB", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP1", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "RETURN", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "tag", "source": 0, "value": "25" }, - { "begin": 9864, "end": 10021, "name": "JUMPDEST", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "CALLVALUE", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "DUP1", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "ISZERO", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "JUMPDEST", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "CALLVALUE", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "DUP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "ISZERO", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH [tag]", "source": 0, "value": "145" }, - { "begin": 9864, "end": 10021, "name": "JUMPI", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "JUMPI", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9864, "end": 10021, "name": "DUP1", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "REVERT", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "DUP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "REVERT", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "tag", "source": 0, "value": "145" }, - { "begin": 9864, "end": 10021, "name": "JUMPDEST", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "POP", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "JUMPDEST", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "POP", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH [tag]", "source": 0, "value": "146" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9864, "end": 10021, "name": "DUP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "DUP1", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SUB", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "DUP2", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "ADD", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SWAP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SUB", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "DUP2", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "ADD", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP1", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH [tag]", "source": 0, "value": "147" }, - { "begin": 9864, "end": 10021, "name": "SWAP2", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SWAP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP2", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP1", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH [tag]", "source": 0, "value": "79" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "tag", "source": 0, "value": "147" }, - { "begin": 9864, "end": 10021, "name": "JUMPDEST", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "JUMPDEST", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH [tag]", "source": 0, "value": "148" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "tag", "source": 0, "value": "146" }, - { "begin": 9864, "end": 10021, "name": "JUMPDEST", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "JUMPDEST", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9864, "end": 10021, "name": "MLOAD", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "MLOAD", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH [tag]", "source": 0, "value": "149" }, - { "begin": 9864, "end": 10021, "name": "SWAP2", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SWAP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP2", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP1", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "tag", "source": 0, "value": "149" }, - { "begin": 9864, "end": 10021, "name": "JUMPDEST", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "JUMPDEST", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9864, "end": 10021, "name": "MLOAD", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "DUP1", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SWAP2", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SUB", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SWAP1", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "RETURN", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "MLOAD", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "DUP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP2", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SUB", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "RETURN", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "tag", "source": 0, "value": "26" }, - { "begin": 11099, "end": 11393, "name": "JUMPDEST", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "JUMPDEST", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "CALLVALUE", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "DUP1", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "ISZERO", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "DUP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "ISZERO", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH [tag]", "source": 0, "value": "150" }, - { "begin": 11099, "end": 11393, "name": "JUMPI", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "JUMPI", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11099, "end": 11393, "name": "DUP1", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "REVERT", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "DUP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "REVERT", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "tag", "source": 0, "value": "150" }, - { "begin": 11099, "end": 11393, "name": "JUMPDEST", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "POP", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "JUMPDEST", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "POP", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH [tag]", "source": 0, "value": "151" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 11099, "end": 11393, "name": "DUP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "DUP1", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SUB", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "DUP2", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "ADD", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SWAP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SUB", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "DUP2", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "ADD", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP1", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH [tag]", "source": 0, "value": "152" }, - { "begin": 11099, "end": 11393, "name": "SWAP2", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SWAP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP2", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP1", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "tag", "source": 0, "value": "152" }, - { "begin": 11099, "end": 11393, "name": "JUMPDEST", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "JUMPDEST", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH [tag]", "source": 0, "value": "153" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "tag", "source": 0, "value": "151" }, - { "begin": 11099, "end": 11393, "name": "JUMPDEST", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "JUMPDEST", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11099, "end": 11393, "name": "MLOAD", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "MLOAD", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH [tag]", "source": 0, "value": "154" }, - { "begin": 11099, "end": 11393, "name": "SWAP2", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SWAP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP2", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP1", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "tag", "source": 0, "value": "154" }, - { "begin": 11099, "end": 11393, "name": "JUMPDEST", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "JUMPDEST", "source": 0 }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11099, "end": 11393, "name": "MLOAD", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "DUP1", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SWAP2", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SUB", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SWAP1", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "RETURN", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "MLOAD", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "DUP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP2", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SUB", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP1", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "RETURN", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "tag", "source": 0, "value": "27" }, - { "begin": 10035, "end": 10222, "name": "JUMPDEST", "source": 0 }, - { - "begin": 10035, - "end": 10222, - "name": "CALLVALUE", - "source": 0 - }, - { "begin": 10035, "end": 10222, "name": "DUP1", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "ISZERO", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "JUMPDEST", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "CALLVALUE", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "DUP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "ISZERO", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH [tag]", "source": 0, "value": "155" }, - { "begin": 10035, "end": 10222, "name": "JUMPI", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "JUMPI", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10035, "end": 10222, "name": "DUP1", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "REVERT", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "DUP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "REVERT", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "tag", "source": 0, "value": "155" }, - { "begin": 10035, "end": 10222, "name": "JUMPDEST", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "POP", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "JUMPDEST", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "POP", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH [tag]", "source": 0, "value": "156" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 10035, "end": 10222, "name": "DUP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "DUP1", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SUB", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "DUP2", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "ADD", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SWAP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SUB", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "DUP2", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "ADD", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP1", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH [tag]", "source": 0, "value": "157" }, - { "begin": 10035, "end": 10222, "name": "SWAP2", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SWAP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP2", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP1", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH [tag]", "source": 0, "value": "158" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "tag", "source": 0, "value": "157" }, - { "begin": 10035, "end": 10222, "name": "JUMPDEST", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "JUMPDEST", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH [tag]", "source": 0, "value": "159" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "tag", "source": 0, "value": "156" }, - { "begin": 10035, "end": 10222, "name": "JUMPDEST", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "JUMPDEST", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10035, "end": 10222, "name": "MLOAD", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "MLOAD", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH [tag]", "source": 0, "value": "160" }, - { "begin": 10035, "end": 10222, "name": "SWAP2", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SWAP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP2", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP1", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "tag", "source": 0, "value": "160" }, - { "begin": 10035, "end": 10222, "name": "JUMPDEST", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "JUMPDEST", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10035, "end": 10222, "name": "MLOAD", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "DUP1", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SWAP2", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SUB", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SWAP1", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "RETURN", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "MLOAD", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "DUP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP2", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SUB", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP1", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "RETURN", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "tag", "source": 0, "value": "36" }, - { "begin": 7268, "end": 7382, "name": "JUMPDEST", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "JUMPDEST", "source": 0 }, { - "begin": 7311, - "end": 7318, + "begin": 7216, + "end": 7223, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7345, - "end": 7367, + "begin": 7242, + "end": 7264, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 7345, - "end": 7367, + "begin": 7242, + "end": 7264, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7345, "end": 7367, "name": "SWAP1", "source": 0 }, - { "begin": 7345, "end": 7367, "name": "SLOAD", "source": 0 }, - { "begin": 7345, "end": 7367, "name": "SWAP1", "source": 0 }, + { "begin": 7242, "end": 7264, "name": "SWAP1", "source": 0 }, + { "begin": 7242, "end": 7264, "name": "SLOAD", "source": 0 }, + { "begin": 7242, "end": 7264, "name": "SWAP1", "source": 0 }, { - "begin": 7345, - "end": 7367, + "begin": 7242, + "end": 7264, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 7345, "end": 7367, "name": "EXP", "source": 0 }, - { "begin": 7345, "end": 7367, "name": "SWAP1", "source": 0 }, - { "begin": 7345, "end": 7367, "name": "DIV", "source": 0 }, + { "begin": 7242, "end": 7264, "name": "EXP", "source": 0 }, + { "begin": 7242, "end": 7264, "name": "SWAP1", "source": 0 }, + { "begin": 7242, "end": 7264, "name": "DIV", "source": 0 }, { - "begin": 7345, - "end": 7367, + "begin": 7242, + "end": 7264, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7345, "end": 7367, "name": "AND", "source": 0 }, - { "begin": 7338, "end": 7367, "name": "SWAP1", "source": 0 }, - { "begin": 7338, "end": 7367, "name": "POP", "source": 0 }, - { "begin": 7268, "end": 7382, "name": "SWAP1", "source": 0 }, + { "begin": 7242, "end": 7264, "name": "AND", "source": 0 }, + { "begin": 7235, "end": 7264, "name": "SWAP1", "source": 0 }, + { "begin": 7235, "end": 7264, "name": "POP", "source": 0 }, + { "begin": 7172, "end": 7271, "name": "SWAP1", "source": 0 }, { - "begin": 7268, - "end": 7382, + "begin": 7172, + "end": 7271, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "tag", "source": 0, "value": "41" }, - { "begin": 7396, "end": 7601, "name": "JUMPDEST", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "JUMPDEST", "source": 0 }, { - "begin": 7444, - "end": 7457, + "begin": 7325, + "end": 7338, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 7564, - "end": 7579, + "begin": 7429, + "end": 7444, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7564, "end": 7579, "name": "DUP1", "source": 0 }, - { "begin": 7564, "end": 7579, "name": "SLOAD", "source": 0 }, - { "begin": 7564, "end": 7579, "name": "SWAP1", "source": 0 }, + { "begin": 7429, "end": 7444, "name": "DUP1", "source": 0 }, + { "begin": 7429, "end": 7444, "name": "SLOAD", "source": 0 }, + { "begin": 7429, "end": 7444, "name": "SWAP1", "source": 0 }, { - "begin": 7564, - "end": 7579, + "begin": 7429, + "end": 7444, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 7564, "end": 7579, "name": "EXP", "source": 0 }, - { "begin": 7564, "end": 7579, "name": "SWAP1", "source": 0 }, - { "begin": 7564, "end": 7579, "name": "DIV", "source": 0 }, + { "begin": 7429, "end": 7444, "name": "EXP", "source": 0 }, + { "begin": 7429, "end": 7444, "name": "SWAP1", "source": 0 }, + { "begin": 7429, "end": 7444, "name": "DIV", "source": 0 }, { - "begin": 7564, - "end": 7579, + "begin": 7429, + "end": 7444, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7564, "end": 7579, "name": "AND", "source": 0 }, + { "begin": 7429, "end": 7444, "name": "AND", "source": 0 }, { - "begin": 7564, - "end": 7584, + "begin": 7429, + "end": 7449, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7564, "end": 7584, "name": "AND", "source": 0 }, + { "begin": 7429, "end": 7449, "name": "AND", "source": 0 }, { - "begin": 7564, - "end": 7584, + "begin": 7429, + "end": 7449, "name": "PUSH", "source": 0, "value": "6FDDE03" }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7564, "end": 7586, "name": "MLOAD", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP2", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "MLOAD", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP2", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 7564, "end": 7586, "name": "AND", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "AND", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 7564, "end": 7586, "name": "SHL", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP2", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "MSTORE", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "SHL", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP2", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "MSTORE", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 7564, "end": 7586, "name": "ADD", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "ADD", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7564, "end": 7586, "name": "MLOAD", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP1", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP4", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "SUB", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP2", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP7", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "GAS", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "STATICCALL", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "ISZERO", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP1", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "ISZERO", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "MLOAD", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP1", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP4", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "SUB", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP2", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP7", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "GAS", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "STATICCALL", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "ISZERO", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP1", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "ISZERO", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH [tag]", "source": 0, "value": "164" }, - { "begin": 7564, "end": 7586, "name": "JUMPI", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "JUMPI", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7564, "end": 7586, "name": "DUP1", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP1", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7564, "end": 7586, "name": "REVERT", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "REVERT", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "tag", "source": 0, "value": "164" }, - { "begin": 7564, "end": 7586, "name": "JUMPDEST", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "POP", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "POP", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "POP", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "POP", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "JUMPDEST", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "POP", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "POP", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "POP", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "POP", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7564, "end": 7586, "name": "MLOAD", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "MLOAD", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7564, "end": 7586, "name": "DUP3", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP3", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 7564, "end": 7586, "name": "NOT", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "NOT", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 7564, "end": 7586, "name": "DUP3", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "ADD", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "AND", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP3", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "ADD", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP1", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP3", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "ADD", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "AND", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP3", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "ADD", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP1", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7564, "end": 7586, "name": "MSTORE", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "POP", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "DUP2", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "ADD", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "SWAP1", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "MSTORE", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "POP", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "DUP2", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "ADD", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "SWAP1", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH [tag]", "source": 0, "value": "165" }, - { "begin": 7564, "end": 7586, "name": "SWAP2", "source": 0 }, - { "begin": 7564, "end": 7586, "name": "SWAP1", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "SWAP2", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "SWAP1", "source": 0 }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "PUSH [tag]", "source": 0, "value": "166" }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7564, - "end": 7586, + "begin": 7429, + "end": 7451, "name": "tag", "source": 0, "value": "165" }, - { "begin": 7564, "end": 7586, "name": "JUMPDEST", "source": 0 }, - { "begin": 7557, "end": 7586, "name": "SWAP1", "source": 0 }, - { "begin": 7557, "end": 7586, "name": "POP", "source": 0 }, - { "begin": 7396, "end": 7601, "name": "SWAP1", "source": 0 }, + { "begin": 7429, "end": 7451, "name": "JUMPDEST", "source": 0 }, + { "begin": 7422, "end": 7451, "name": "SWAP1", "source": 0 }, + { "begin": 7422, "end": 7451, "name": "POP", "source": 0 }, + { "begin": 7277, "end": 7458, "name": "SWAP1", "source": 0 }, { - "begin": 7396, - "end": 7601, + "begin": 7277, + "end": 7458, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "tag", "source": 0, "value": "48" }, - { "begin": 10928, "end": 11085, "name": "JUMPDEST", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "JUMPDEST", "source": 0 }, { - "begin": 11004, - "end": 11008, + "begin": 10527, + "end": 10531, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11031, "end": 11046, "name": "DUP1", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "DUP1", "source": 0 }, { - "begin": 11031, - "end": 11046, + "begin": 10554, + "end": 10569, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11031, "end": 11046, "name": "SWAP1", "source": 0 }, - { "begin": 11031, "end": 11046, "name": "SLOAD", "source": 0 }, - { "begin": 11031, "end": 11046, "name": "SWAP1", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "SWAP1", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "SLOAD", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "SWAP1", "source": 0 }, { - "begin": 11031, - "end": 11046, + "begin": 10554, + "end": 10569, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 11031, "end": 11046, "name": "EXP", "source": 0 }, - { "begin": 11031, "end": 11046, "name": "SWAP1", "source": 0 }, - { "begin": 11031, "end": 11046, "name": "DIV", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "EXP", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "SWAP1", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "DIV", "source": 0 }, { - "begin": 11031, - "end": 11046, + "begin": 10554, + "end": 10569, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11031, "end": 11046, "name": "AND", "source": 0 }, + { "begin": 10554, "end": 10569, "name": "AND", "source": 0 }, { - "begin": 11031, - "end": 11054, + "begin": 10554, + "end": 10577, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11031, "end": 11054, "name": "AND", "source": 0 }, + { "begin": 10554, "end": 10577, "name": "AND", "source": 0 }, { - "begin": 11031, - "end": 11054, + "begin": 10554, + "end": 10577, "name": "PUSH", "source": 0, "value": "95EA7B3" }, - { "begin": 11055, "end": 11062, "name": "DUP5", "source": 0 }, - { "begin": 11064, "end": 11069, "name": "DUP5", "source": 0 }, + { "begin": 10578, "end": 10585, "name": "DUP5", "source": 0 }, + { "begin": 10587, "end": 10592, "name": "DUP5", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11031, "end": 11070, "name": "MLOAD", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP4", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "MLOAD", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP4", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 11031, "end": 11070, "name": "AND", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "AND", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 11031, "end": 11070, "name": "SHL", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP2", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "MSTORE", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SHL", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP2", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "MSTORE", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 11031, "end": 11070, "name": "ADD", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "ADD", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH [tag]", "source": 0, "value": "168" }, - { "begin": 11031, "end": 11070, "name": "SWAP3", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "SWAP2", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "SWAP1", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SWAP3", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SWAP2", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SWAP1", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH [tag]", "source": 0, "value": "169" }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "tag", "source": 0, "value": "168" }, - { "begin": 11031, "end": 11070, "name": "JUMPDEST", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "JUMPDEST", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11031, "end": 11070, "name": "MLOAD", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP1", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP4", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "SUB", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP2", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "MLOAD", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP1", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP4", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SUB", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP2", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11031, "end": 11070, "name": "DUP8", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "GAS", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "CALL", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "ISZERO", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP1", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "ISZERO", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP8", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "GAS", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "CALL", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "ISZERO", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP1", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "ISZERO", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH [tag]", "source": 0, "value": "171" }, - { "begin": 11031, "end": 11070, "name": "JUMPI", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "JUMPI", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11031, "end": 11070, "name": "DUP1", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP1", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11031, "end": 11070, "name": "REVERT", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "REVERT", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "tag", "source": 0, "value": "171" }, - { "begin": 11031, "end": 11070, "name": "JUMPDEST", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "POP", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "POP", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "POP", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "POP", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "JUMPDEST", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "POP", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "POP", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "POP", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "POP", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11031, "end": 11070, "name": "MLOAD", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "MLOAD", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 11031, "end": 11070, "name": "NOT", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "NOT", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 11031, "end": 11070, "name": "DUP3", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "ADD", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "AND", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP3", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "ADD", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP1", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP3", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "ADD", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "AND", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP3", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "ADD", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP1", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11031, "end": 11070, "name": "MSTORE", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "POP", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "DUP2", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "ADD", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "SWAP1", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "MSTORE", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "POP", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "DUP2", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "ADD", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SWAP1", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH [tag]", "source": 0, "value": "172" }, - { "begin": 11031, "end": 11070, "name": "SWAP2", "source": 0 }, - { "begin": 11031, "end": 11070, "name": "SWAP1", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SWAP2", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "SWAP1", "source": 0 }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11031, - "end": 11070, + "begin": 10554, + "end": 10593, "name": "tag", "source": 0, "value": "172" }, - { "begin": 11031, "end": 11070, "name": "JUMPDEST", "source": 0 }, - { "begin": 11024, "end": 11070, "name": "SWAP1", "source": 0 }, - { "begin": 11024, "end": 11070, "name": "POP", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SWAP3", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "SWAP2", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "POP", "source": 0 }, - { "begin": 10928, "end": 11085, "name": "POP", "source": 0 }, + { "begin": 10554, "end": 10593, "name": "JUMPDEST", "source": 0 }, + { "begin": 10547, "end": 10593, "name": "SWAP1", "source": 0 }, + { "begin": 10547, "end": 10593, "name": "POP", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP3", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "SWAP2", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "POP", "source": 0 }, + { "begin": 10427, "end": 10600, "name": "POP", "source": 0 }, { - "begin": 10928, - "end": 11085, + "begin": 10427, + "end": 10600, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "tag", "source": 0, "value": "53" }, - { "begin": 8081, "end": 8293, "name": "JUMPDEST", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "JUMPDEST", "source": 0 }, { - "begin": 8136, - "end": 8143, + "begin": 7897, + "end": 7904, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8249, "end": 8264, "name": "DUP1", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "DUP1", "source": 0 }, { - "begin": 8249, - "end": 8264, + "begin": 7995, + "end": 8010, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8249, "end": 8264, "name": "SWAP1", "source": 0 }, - { "begin": 8249, "end": 8264, "name": "SLOAD", "source": 0 }, - { "begin": 8249, "end": 8264, "name": "SWAP1", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "SWAP1", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "SLOAD", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "SWAP1", "source": 0 }, { - "begin": 8249, - "end": 8264, + "begin": 7995, + "end": 8010, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 8249, "end": 8264, "name": "EXP", "source": 0 }, - { "begin": 8249, "end": 8264, "name": "SWAP1", "source": 0 }, - { "begin": 8249, "end": 8264, "name": "DIV", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "EXP", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "SWAP1", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "DIV", "source": 0 }, { - "begin": 8249, - "end": 8264, + "begin": 7995, + "end": 8010, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8249, "end": 8264, "name": "AND", "source": 0 }, + { "begin": 7995, "end": 8010, "name": "AND", "source": 0 }, { - "begin": 8249, - "end": 8276, + "begin": 7995, + "end": 8022, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8249, "end": 8276, "name": "AND", "source": 0 }, + { "begin": 7995, "end": 8022, "name": "AND", "source": 0 }, { - "begin": 8249, - "end": 8276, + "begin": 7995, + "end": 8022, "name": "PUSH", "source": 0, "value": "18160DDD" }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8249, "end": 8278, "name": "MLOAD", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP2", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "MLOAD", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP2", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 8249, "end": 8278, "name": "AND", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "AND", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 8249, "end": 8278, "name": "SHL", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP2", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "MSTORE", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "SHL", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP2", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "MSTORE", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8249, "end": 8278, "name": "ADD", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "ADD", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8249, "end": 8278, "name": "MLOAD", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP1", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP4", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "SUB", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP2", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP7", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "GAS", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "STATICCALL", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "ISZERO", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP1", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "ISZERO", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "MLOAD", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP1", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP4", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "SUB", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP2", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP7", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "GAS", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "STATICCALL", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "ISZERO", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP1", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "ISZERO", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH [tag]", "source": 0, "value": "176" }, - { "begin": 8249, "end": 8278, "name": "JUMPI", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "JUMPI", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8249, "end": 8278, "name": "DUP1", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP1", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8249, "end": 8278, "name": "REVERT", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "REVERT", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "tag", "source": 0, "value": "176" }, - { "begin": 8249, "end": 8278, "name": "JUMPDEST", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "POP", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "POP", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "POP", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "POP", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "JUMPDEST", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "POP", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "POP", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "POP", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "POP", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8249, "end": 8278, "name": "MLOAD", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "MLOAD", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8249, "end": 8278, "name": "NOT", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "NOT", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8249, "end": 8278, "name": "DUP3", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "ADD", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "AND", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP3", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "ADD", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP1", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP3", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "ADD", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "AND", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP3", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "ADD", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP1", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8249, "end": 8278, "name": "MSTORE", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "POP", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "DUP2", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "ADD", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "SWAP1", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "MSTORE", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "POP", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "DUP2", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "ADD", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "SWAP1", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH [tag]", "source": 0, "value": "177" }, - { "begin": 8249, "end": 8278, "name": "SWAP2", "source": 0 }, - { "begin": 8249, "end": 8278, "name": "SWAP1", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "SWAP2", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "SWAP1", "source": 0 }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "PUSH [tag]", "source": 0, "value": "178" }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8249, - "end": 8278, + "begin": 7995, + "end": 8024, "name": "tag", "source": 0, "value": "177" }, - { "begin": 8249, "end": 8278, "name": "JUMPDEST", "source": 0 }, - { "begin": 8242, "end": 8278, "name": "SWAP1", "source": 0 }, - { "begin": 8242, "end": 8278, "name": "POP", "source": 0 }, - { "begin": 8081, "end": 8293, "name": "SWAP1", "source": 0 }, + { "begin": 7995, "end": 8024, "name": "JUMPDEST", "source": 0 }, + { "begin": 7988, "end": 8024, "name": "SWAP1", "source": 0 }, + { "begin": 7988, "end": 8024, "name": "POP", "source": 0 }, + { "begin": 7842, "end": 8031, "name": "SWAP1", "source": 0 }, { - "begin": 8081, - "end": 8293, + "begin": 7842, + "end": 8031, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "tag", "source": 0, "value": "58" }, - { "begin": 9727, "end": 9850, "name": "JUMPDEST", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "JUMPDEST", "source": 0 }, { - "begin": 9776, - "end": 9780, + "begin": 9330, + "end": 9334, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9807, "end": 9822, "name": "DUP1", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "DUP1", "source": 0 }, { - "begin": 9807, - "end": 9822, + "begin": 9353, + "end": 9368, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9807, "end": 9822, "name": "SWAP1", "source": 0 }, - { "begin": 9807, "end": 9822, "name": "SLOAD", "source": 0 }, - { "begin": 9807, "end": 9822, "name": "SWAP1", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "SWAP1", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "SLOAD", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "SWAP1", "source": 0 }, { - "begin": 9807, - "end": 9822, + "begin": 9353, + "end": 9368, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 9807, "end": 9822, "name": "EXP", "source": 0 }, - { "begin": 9807, "end": 9822, "name": "SWAP1", "source": 0 }, - { "begin": 9807, "end": 9822, "name": "DIV", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "EXP", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "SWAP1", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "DIV", "source": 0 }, { - "begin": 9807, - "end": 9822, + "begin": 9353, + "end": 9368, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9807, "end": 9822, "name": "AND", "source": 0 }, + { "begin": 9353, "end": 9368, "name": "AND", "source": 0 }, { - "begin": 9807, - "end": 9833, + "begin": 9353, + "end": 9379, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9807, "end": 9833, "name": "AND", "source": 0 }, + { "begin": 9353, "end": 9379, "name": "AND", "source": 0 }, { - "begin": 9807, - "end": 9833, + "begin": 9353, + "end": 9379, "name": "PUSH", "source": 0, "value": "1CDDEC19" }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9807, "end": 9835, "name": "MLOAD", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP2", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "MLOAD", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP2", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 9807, "end": 9835, "name": "AND", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "AND", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 9807, "end": 9835, "name": "SHL", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP2", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "MSTORE", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "SHL", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP2", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "MSTORE", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9807, "end": 9835, "name": "ADD", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "ADD", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9807, "end": 9835, "name": "MLOAD", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP1", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP4", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "SUB", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP2", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "MLOAD", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP1", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP4", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "SUB", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP2", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9807, "end": 9835, "name": "DUP8", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "GAS", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "CALL", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "ISZERO", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP1", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "ISZERO", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP8", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "GAS", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "CALL", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "ISZERO", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP1", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "ISZERO", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH [tag]", "source": 0, "value": "181" }, - { "begin": 9807, "end": 9835, "name": "JUMPI", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "JUMPI", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9807, "end": 9835, "name": "DUP1", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP1", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9807, "end": 9835, "name": "REVERT", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "REVERT", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "tag", "source": 0, "value": "181" }, - { "begin": 9807, "end": 9835, "name": "JUMPDEST", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "POP", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "POP", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "POP", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "POP", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "JUMPDEST", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "POP", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "POP", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "POP", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "POP", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9807, "end": 9835, "name": "MLOAD", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "MLOAD", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9807, "end": 9835, "name": "NOT", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "NOT", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9807, "end": 9835, "name": "DUP3", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "ADD", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "AND", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP3", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "ADD", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP1", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP3", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "ADD", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "AND", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP3", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "ADD", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP1", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9807, "end": 9835, "name": "MSTORE", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "POP", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "DUP2", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "ADD", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "SWAP1", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "MSTORE", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "POP", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "DUP2", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "ADD", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "SWAP1", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH [tag]", "source": 0, "value": "182" }, - { "begin": 9807, "end": 9835, "name": "SWAP2", "source": 0 }, - { "begin": 9807, "end": 9835, "name": "SWAP1", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "SWAP2", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "SWAP1", "source": 0 }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9807, - "end": 9835, + "begin": 9353, + "end": 9381, "name": "tag", "source": 0, "value": "182" }, - { "begin": 9807, "end": 9835, "name": "JUMPDEST", "source": 0 }, - { "begin": 9800, "end": 9835, "name": "SWAP1", "source": 0 }, - { "begin": 9800, "end": 9835, "name": "POP", "source": 0 }, - { "begin": 9727, "end": 9850, "name": "SWAP1", "source": 0 }, + { "begin": 9353, "end": 9381, "name": "JUMPDEST", "source": 0 }, + { "begin": 9346, "end": 9381, "name": "SWAP1", "source": 0 }, + { "begin": 9346, "end": 9381, "name": "POP", "source": 0 }, + { "begin": 9281, "end": 9388, "name": "SWAP1", "source": 0 }, { - "begin": 9727, - "end": 9850, + "begin": 9281, + "end": 9388, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "tag", "source": 0, "value": "64" }, - { "begin": 11419, "end": 11661, "name": "JUMPDEST", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "JUMPDEST", "source": 0 }, { - "begin": 11570, - "end": 11574, + "begin": 11035, + "end": 11039, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11601, "end": 11616, "name": "DUP1", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "DUP1", "source": 0 }, { - "begin": 11601, - "end": 11616, + "begin": 11058, + "end": 11073, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11601, "end": 11616, "name": "SWAP1", "source": 0 }, - { "begin": 11601, "end": 11616, "name": "SLOAD", "source": 0 }, - { "begin": 11601, "end": 11616, "name": "SWAP1", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "SWAP1", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "SLOAD", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "SWAP1", "source": 0 }, { - "begin": 11601, - "end": 11616, + "begin": 11058, + "end": 11073, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 11601, "end": 11616, "name": "EXP", "source": 0 }, - { "begin": 11601, "end": 11616, "name": "SWAP1", "source": 0 }, - { "begin": 11601, "end": 11616, "name": "DIV", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "EXP", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "SWAP1", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "DIV", "source": 0 }, { - "begin": 11601, - "end": 11616, + "begin": 11058, + "end": 11073, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11601, "end": 11616, "name": "AND", "source": 0 }, + { "begin": 11058, "end": 11073, "name": "AND", "source": 0 }, { - "begin": 11601, - "end": 11629, + "begin": 11058, + "end": 11086, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11601, "end": 11629, "name": "AND", "source": 0 }, + { "begin": 11058, "end": 11086, "name": "AND", "source": 0 }, { - "begin": 11601, - "end": 11629, + "begin": 11058, + "end": 11086, "name": "PUSH", "source": 0, "value": "23B872DD" }, - { "begin": 11630, "end": 11634, "name": "DUP6", "source": 0 }, - { "begin": 11636, "end": 11638, "name": "DUP6", "source": 0 }, - { "begin": 11640, "end": 11645, "name": "DUP6", "source": 0 }, + { "begin": 11087, "end": 11091, "name": "DUP6", "source": 0 }, + { "begin": 11093, "end": 11095, "name": "DUP6", "source": 0 }, + { "begin": 11097, "end": 11102, "name": "DUP6", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11601, "end": 11646, "name": "MLOAD", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP5", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "MLOAD", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP5", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 11601, "end": 11646, "name": "AND", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "AND", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 11601, "end": 11646, "name": "SHL", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP2", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "MSTORE", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SHL", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP2", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "MSTORE", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 11601, "end": 11646, "name": "ADD", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "ADD", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH [tag]", "source": 0, "value": "184" }, - { "begin": 11601, "end": 11646, "name": "SWAP4", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "SWAP3", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "SWAP2", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "SWAP1", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SWAP4", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SWAP3", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SWAP2", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SWAP1", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH [tag]", "source": 0, "value": "185" }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "tag", "source": 0, "value": "184" }, - { "begin": 11601, "end": 11646, "name": "JUMPDEST", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "JUMPDEST", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11601, "end": 11646, "name": "MLOAD", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP1", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP4", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "SUB", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP2", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "MLOAD", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP1", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP4", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SUB", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP2", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11601, "end": 11646, "name": "DUP8", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "GAS", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "CALL", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "ISZERO", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP1", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "ISZERO", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP8", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "GAS", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "CALL", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "ISZERO", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP1", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "ISZERO", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH [tag]", "source": 0, "value": "187" }, - { "begin": 11601, "end": 11646, "name": "JUMPI", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "JUMPI", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11601, "end": 11646, "name": "DUP1", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP1", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11601, "end": 11646, "name": "REVERT", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "REVERT", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "tag", "source": 0, "value": "187" }, - { "begin": 11601, "end": 11646, "name": "JUMPDEST", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "POP", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "POP", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "POP", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "POP", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "JUMPDEST", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "POP", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "POP", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "POP", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "POP", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11601, "end": 11646, "name": "MLOAD", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "MLOAD", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 11601, "end": 11646, "name": "NOT", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "NOT", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 11601, "end": 11646, "name": "DUP3", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "ADD", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "AND", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP3", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "ADD", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP1", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP3", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "ADD", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "AND", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP3", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "ADD", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP1", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11601, "end": 11646, "name": "MSTORE", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "POP", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "DUP2", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "ADD", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "SWAP1", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "MSTORE", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "POP", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "DUP2", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "ADD", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SWAP1", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH [tag]", "source": 0, "value": "188" }, - { "begin": 11601, "end": 11646, "name": "SWAP2", "source": 0 }, - { "begin": 11601, "end": 11646, "name": "SWAP1", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SWAP2", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "SWAP1", "source": 0 }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11601, - "end": 11646, + "begin": 11058, + "end": 11103, "name": "tag", "source": 0, "value": "188" }, - { "begin": 11601, "end": 11646, "name": "JUMPDEST", "source": 0 }, - { "begin": 11594, "end": 11646, "name": "SWAP1", "source": 0 }, - { "begin": 11594, "end": 11646, "name": "POP", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SWAP4", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "SWAP3", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "POP", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "POP", "source": 0 }, - { "begin": 11419, "end": 11661, "name": "POP", "source": 0 }, + { "begin": 11058, "end": 11103, "name": "JUMPDEST", "source": 0 }, + { "begin": 11051, "end": 11103, "name": "SWAP1", "source": 0 }, + { "begin": 11051, "end": 11103, "name": "POP", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP4", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "SWAP3", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "POP", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "POP", "source": 0 }, + { "begin": 10915, "end": 11110, "name": "POP", "source": 0 }, { - "begin": 11419, - "end": 11661, + "begin": 10915, + "end": 11110, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "tag", "source": 0, "value": "68" }, - { "begin": 7862, "end": 8067, "name": "JUMPDEST", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "JUMPDEST", "source": 0 }, { - "begin": 7914, - "end": 7919, + "begin": 7707, + "end": 7712, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8026, "end": 8041, "name": "DUP1", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "DUP1", "source": 0 }, { - "begin": 8026, - "end": 8041, + "begin": 7803, + "end": 7818, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8026, "end": 8041, "name": "SWAP1", "source": 0 }, - { "begin": 8026, "end": 8041, "name": "SLOAD", "source": 0 }, - { "begin": 8026, "end": 8041, "name": "SWAP1", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "SWAP1", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "SLOAD", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "SWAP1", "source": 0 }, { - "begin": 8026, - "end": 8041, + "begin": 7803, + "end": 7818, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 8026, "end": 8041, "name": "EXP", "source": 0 }, - { "begin": 8026, "end": 8041, "name": "SWAP1", "source": 0 }, - { "begin": 8026, "end": 8041, "name": "DIV", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "EXP", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "SWAP1", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "DIV", "source": 0 }, { - "begin": 8026, - "end": 8041, + "begin": 7803, + "end": 7818, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8026, "end": 8041, "name": "AND", "source": 0 }, + { "begin": 7803, "end": 7818, "name": "AND", "source": 0 }, { - "begin": 8026, - "end": 8050, + "begin": 7803, + "end": 7827, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8026, "end": 8050, "name": "AND", "source": 0 }, + { "begin": 7803, "end": 7827, "name": "AND", "source": 0 }, { - "begin": 8026, - "end": 8050, + "begin": 7803, + "end": 7827, "name": "PUSH", "source": 0, "value": "313CE567" }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8026, "end": 8052, "name": "MLOAD", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP2", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "MLOAD", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP2", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 8026, "end": 8052, "name": "AND", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "AND", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 8026, "end": 8052, "name": "SHL", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP2", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "MSTORE", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "SHL", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP2", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "MSTORE", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8026, "end": 8052, "name": "ADD", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "ADD", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8026, "end": 8052, "name": "MLOAD", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP1", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP4", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "SUB", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP2", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP7", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "GAS", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "STATICCALL", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "ISZERO", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP1", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "ISZERO", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "MLOAD", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP1", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP4", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "SUB", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP2", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP7", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "GAS", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "STATICCALL", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "ISZERO", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP1", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "ISZERO", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH [tag]", "source": 0, "value": "191" }, - { "begin": 8026, "end": 8052, "name": "JUMPI", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "JUMPI", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8026, "end": 8052, "name": "DUP1", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP1", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8026, "end": 8052, "name": "REVERT", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "REVERT", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "tag", "source": 0, "value": "191" }, - { "begin": 8026, "end": 8052, "name": "JUMPDEST", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "POP", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "POP", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "POP", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "POP", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "JUMPDEST", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "POP", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "POP", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "POP", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "POP", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8026, "end": 8052, "name": "MLOAD", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "MLOAD", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8026, "end": 8052, "name": "NOT", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "NOT", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8026, "end": 8052, "name": "DUP3", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "ADD", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "AND", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP3", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "ADD", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP1", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP3", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "ADD", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "AND", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP3", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "ADD", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP1", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8026, "end": 8052, "name": "MSTORE", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "POP", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "DUP2", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "ADD", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "SWAP1", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "MSTORE", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "POP", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "DUP2", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "ADD", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "SWAP1", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH [tag]", "source": 0, "value": "192" }, - { "begin": 8026, "end": 8052, "name": "SWAP2", "source": 0 }, - { "begin": 8026, "end": 8052, "name": "SWAP1", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "SWAP2", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "SWAP1", "source": 0 }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "PUSH [tag]", "source": 0, "value": "193" }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8026, - "end": 8052, + "begin": 7803, + "end": 7829, "name": "tag", "source": 0, "value": "192" }, - { "begin": 8026, "end": 8052, "name": "JUMPDEST", "source": 0 }, - { "begin": 8019, "end": 8052, "name": "SWAP1", "source": 0 }, - { "begin": 8019, "end": 8052, "name": "POP", "source": 0 }, - { "begin": 7862, "end": 8067, "name": "SWAP1", "source": 0 }, + { "begin": 7803, "end": 7829, "name": "JUMPDEST", "source": 0 }, + { "begin": 7796, "end": 7829, "name": "SWAP1", "source": 0 }, + { "begin": 7796, "end": 7829, "name": "POP", "source": 0 }, + { "begin": 7655, "end": 7836, "name": "SWAP1", "source": 0 }, { - "begin": 7862, - "end": 8067, + "begin": 7655, + "end": 7836, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "tag", "source": 0, "value": "74" }, - { "begin": 8966, "end": 9111, "name": "JUMPDEST", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "JUMPDEST", "source": 0 }, { - "begin": 9034, - "end": 9038, + "begin": 8680, + "end": 8684, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9065, "end": 9080, "name": "DUP1", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "DUP1", "source": 0 }, { - "begin": 9065, - "end": 9080, + "begin": 8703, + "end": 8718, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9065, "end": 9080, "name": "SWAP1", "source": 0 }, - { "begin": 9065, "end": 9080, "name": "SLOAD", "source": 0 }, - { "begin": 9065, "end": 9080, "name": "SWAP1", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "SWAP1", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "SLOAD", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "SWAP1", "source": 0 }, { - "begin": 9065, - "end": 9080, + "begin": 8703, + "end": 8718, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 9065, "end": 9080, "name": "EXP", "source": 0 }, - { "begin": 9065, "end": 9080, "name": "SWAP1", "source": 0 }, - { "begin": 9065, "end": 9080, "name": "DIV", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "EXP", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "SWAP1", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "DIV", "source": 0 }, { - "begin": 9065, - "end": 9080, + "begin": 8703, + "end": 8718, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9065, "end": 9080, "name": "AND", "source": 0 }, + { "begin": 8703, "end": 8718, "name": "AND", "source": 0 }, { - "begin": 9065, - "end": 9085, + "begin": 8703, + "end": 8723, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9065, "end": 9085, "name": "AND", "source": 0 }, + { "begin": 8703, "end": 8723, "name": "AND", "source": 0 }, { - "begin": 9065, - "end": 9085, + "begin": 8703, + "end": 8723, "name": "PUSH", "source": 0, "value": "40C10F19" }, - { "begin": 9086, "end": 9088, "name": "DUP5", "source": 0 }, - { "begin": 9090, "end": 9095, "name": "DUP5", "source": 0 }, + { "begin": 8724, "end": 8726, "name": "DUP5", "source": 0 }, + { "begin": 8728, "end": 8733, "name": "DUP5", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9065, "end": 9096, "name": "MLOAD", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP4", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "MLOAD", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP4", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 9065, "end": 9096, "name": "AND", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "AND", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 9065, "end": 9096, "name": "SHL", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP2", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "MSTORE", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SHL", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP2", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "MSTORE", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9065, "end": 9096, "name": "ADD", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "ADD", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH [tag]", "source": 0, "value": "195" }, - { "begin": 9065, "end": 9096, "name": "SWAP3", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "SWAP2", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "SWAP1", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SWAP3", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SWAP2", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SWAP1", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH [tag]", "source": 0, "value": "169" }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "tag", "source": 0, "value": "195" }, - { "begin": 9065, "end": 9096, "name": "JUMPDEST", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "JUMPDEST", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9065, "end": 9096, "name": "MLOAD", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP1", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP4", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "SUB", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP2", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "MLOAD", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP1", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP4", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SUB", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP2", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9065, "end": 9096, "name": "DUP8", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "GAS", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "CALL", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "ISZERO", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP1", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "ISZERO", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP8", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "GAS", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "CALL", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "ISZERO", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP1", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "ISZERO", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH [tag]", "source": 0, "value": "197" }, - { "begin": 9065, "end": 9096, "name": "JUMPI", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "JUMPI", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9065, "end": 9096, "name": "DUP1", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP1", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9065, "end": 9096, "name": "REVERT", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "REVERT", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "tag", "source": 0, "value": "197" }, - { "begin": 9065, "end": 9096, "name": "JUMPDEST", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "POP", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "POP", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "POP", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "POP", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "JUMPDEST", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "POP", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "POP", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "POP", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "POP", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9065, "end": 9096, "name": "MLOAD", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "MLOAD", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9065, "end": 9096, "name": "NOT", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "NOT", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9065, "end": 9096, "name": "DUP3", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "ADD", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "AND", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP3", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "ADD", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP1", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP3", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "ADD", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "AND", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP3", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "ADD", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP1", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9065, "end": 9096, "name": "MSTORE", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "POP", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "DUP2", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "ADD", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "SWAP1", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "MSTORE", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "POP", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "DUP2", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "ADD", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SWAP1", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH [tag]", "source": 0, "value": "198" }, - { "begin": 9065, "end": 9096, "name": "SWAP2", "source": 0 }, - { "begin": 9065, "end": 9096, "name": "SWAP1", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SWAP2", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "SWAP1", "source": 0 }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9065, - "end": 9096, + "begin": 8703, + "end": 8734, "name": "tag", "source": 0, "value": "198" }, - { "begin": 9065, "end": 9096, "name": "JUMPDEST", "source": 0 }, - { "begin": 9058, "end": 9096, "name": "SWAP1", "source": 0 }, - { "begin": 9058, "end": 9096, "name": "POP", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SWAP3", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "SWAP2", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "POP", "source": 0 }, - { "begin": 8966, "end": 9111, "name": "POP", "source": 0 }, + { "begin": 8703, "end": 8734, "name": "JUMPDEST", "source": 0 }, + { "begin": 8696, "end": 8734, "name": "SWAP1", "source": 0 }, + { "begin": 8696, "end": 8734, "name": "POP", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP3", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "SWAP2", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "POP", "source": 0 }, + { "begin": 8612, "end": 8741, "name": "POP", "source": 0 }, { - "begin": 8966, - "end": 9111, + "begin": 8612, + "end": 8741, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "tag", "source": 0, "value": "80" }, - { "begin": 9439, "end": 9572, "name": "JUMPDEST", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "JUMPDEST", "source": 0 }, { - "begin": 9497, - "end": 9501, + "begin": 9099, + "end": 9103, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9528, "end": 9543, "name": "DUP1", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "DUP1", "source": 0 }, { - "begin": 9528, - "end": 9543, + "begin": 9122, + "end": 9137, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9528, "end": 9543, "name": "SWAP1", "source": 0 }, - { "begin": 9528, "end": 9543, "name": "SLOAD", "source": 0 }, - { "begin": 9528, "end": 9543, "name": "SWAP1", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "SWAP1", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "SLOAD", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "SWAP1", "source": 0 }, { - "begin": 9528, - "end": 9543, + "begin": 9122, + "end": 9137, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 9528, "end": 9543, "name": "EXP", "source": 0 }, - { "begin": 9528, "end": 9543, "name": "SWAP1", "source": 0 }, - { "begin": 9528, "end": 9543, "name": "DIV", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "EXP", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "SWAP1", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "DIV", "source": 0 }, { - "begin": 9528, - "end": 9543, + "begin": 9122, + "end": 9137, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9528, "end": 9543, "name": "AND", "source": 0 }, + { "begin": 9122, "end": 9137, "name": "AND", "source": 0 }, { - "begin": 9528, - "end": 9548, + "begin": 9122, + "end": 9142, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9528, "end": 9548, "name": "AND", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "AND", "source": 0 }, { - "begin": 9528, - "end": 9548, + "begin": 9122, + "end": 9142, "name": "PUSH", "source": 0, "value": "5EA20216" }, - { "begin": 9549, "end": 9556, "name": "DUP4", "source": 0 }, + { "begin": 9143, "end": 9150, "name": "DUP4", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9528, "end": 9557, "name": "MLOAD", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP3", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "MLOAD", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP3", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 9528, "end": 9557, "name": "AND", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "AND", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 9528, "end": 9557, "name": "SHL", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP2", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "MSTORE", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "SHL", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP2", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "MSTORE", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9528, "end": 9557, "name": "ADD", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "ADD", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH [tag]", "source": 0, "value": "200" }, - { "begin": 9528, "end": 9557, "name": "SWAP2", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "SWAP1", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "SWAP2", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "SWAP1", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "tag", "source": 0, "value": "200" }, - { "begin": 9528, "end": 9557, "name": "JUMPDEST", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "JUMPDEST", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9528, "end": 9557, "name": "MLOAD", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP1", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP4", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "SUB", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP2", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "MLOAD", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP1", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP4", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "SUB", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP2", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9528, "end": 9557, "name": "DUP8", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "GAS", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "CALL", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "ISZERO", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP1", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "ISZERO", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP8", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "GAS", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "CALL", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "ISZERO", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP1", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "ISZERO", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH [tag]", "source": 0, "value": "202" }, - { "begin": 9528, "end": 9557, "name": "JUMPI", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "JUMPI", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9528, "end": 9557, "name": "DUP1", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP1", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9528, "end": 9557, "name": "REVERT", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "REVERT", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "tag", "source": 0, "value": "202" }, - { "begin": 9528, "end": 9557, "name": "JUMPDEST", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "POP", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "POP", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "POP", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "POP", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "JUMPDEST", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "POP", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "POP", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "POP", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "POP", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9528, "end": 9557, "name": "MLOAD", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "MLOAD", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9528, "end": 9557, "name": "NOT", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "NOT", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9528, "end": 9557, "name": "DUP3", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "ADD", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "AND", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP3", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "ADD", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP1", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP3", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "ADD", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "AND", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP3", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "ADD", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP1", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9528, "end": 9557, "name": "MSTORE", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "POP", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "DUP2", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "ADD", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "SWAP1", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "MSTORE", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "POP", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "DUP2", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "ADD", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "SWAP1", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH [tag]", "source": 0, "value": "203" }, - { "begin": 9528, "end": 9557, "name": "SWAP2", "source": 0 }, - { "begin": 9528, "end": 9557, "name": "SWAP1", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "SWAP2", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "SWAP1", "source": 0 }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9528, - "end": 9557, + "begin": 9122, + "end": 9151, "name": "tag", "source": 0, "value": "203" }, - { "begin": 9528, "end": 9557, "name": "JUMPDEST", "source": 0 }, - { "begin": 9521, "end": 9557, "name": "SWAP1", "source": 0 }, - { "begin": 9521, "end": 9557, "name": "POP", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SWAP2", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "SWAP1", "source": 0 }, - { "begin": 9439, "end": 9572, "name": "POP", "source": 0 }, + { "begin": 9122, "end": 9151, "name": "JUMPDEST", "source": 0 }, + { "begin": 9115, "end": 9151, "name": "SWAP1", "source": 0 }, + { "begin": 9115, "end": 9151, "name": "POP", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP2", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "SWAP1", "source": 0 }, + { "begin": 9041, "end": 9158, "name": "POP", "source": 0 }, { - "begin": 9439, - "end": 9572, + "begin": 9041, + "end": 9158, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "tag", "source": 0, "value": "84" }, - { "begin": 9586, "end": 9713, "name": "JUMPDEST", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "JUMPDEST", "source": 0 }, { - "begin": 9637, - "end": 9641, + "begin": 9215, + "end": 9219, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9668, "end": 9683, "name": "DUP1", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "DUP1", "source": 0 }, { - "begin": 9668, - "end": 9683, + "begin": 9238, + "end": 9253, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9668, "end": 9683, "name": "SWAP1", "source": 0 }, - { "begin": 9668, "end": 9683, "name": "SLOAD", "source": 0 }, - { "begin": 9668, "end": 9683, "name": "SWAP1", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "SWAP1", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "SLOAD", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "SWAP1", "source": 0 }, { - "begin": 9668, - "end": 9683, + "begin": 9238, + "end": 9253, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 9668, "end": 9683, "name": "EXP", "source": 0 }, - { "begin": 9668, "end": 9683, "name": "SWAP1", "source": 0 }, - { "begin": 9668, "end": 9683, "name": "DIV", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "EXP", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "SWAP1", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "DIV", "source": 0 }, { - "begin": 9668, - "end": 9683, + "begin": 9238, + "end": 9253, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9668, "end": 9683, "name": "AND", "source": 0 }, + { "begin": 9238, "end": 9253, "name": "AND", "source": 0 }, { - "begin": 9668, - "end": 9696, + "begin": 9238, + "end": 9266, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9668, "end": 9696, "name": "AND", "source": 0 }, + { "begin": 9238, "end": 9266, "name": "AND", "source": 0 }, { - "begin": 9668, - "end": 9696, + "begin": 9238, + "end": 9266, "name": "PUSH", "source": 0, "value": "6B8751C1" }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9668, "end": 9698, "name": "MLOAD", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP2", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "MLOAD", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP2", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 9668, "end": 9698, "name": "AND", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "AND", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 9668, "end": 9698, "name": "SHL", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP2", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "MSTORE", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "SHL", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP2", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "MSTORE", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9668, "end": 9698, "name": "ADD", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "ADD", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9668, "end": 9698, "name": "MLOAD", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP1", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP4", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "SUB", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP2", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "MLOAD", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP1", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP4", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "SUB", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP2", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9668, "end": 9698, "name": "DUP8", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "GAS", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "CALL", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "ISZERO", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP1", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "ISZERO", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP8", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "GAS", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "CALL", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "ISZERO", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP1", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "ISZERO", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH [tag]", "source": 0, "value": "206" }, - { "begin": 9668, "end": 9698, "name": "JUMPI", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "JUMPI", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9668, "end": 9698, "name": "DUP1", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP1", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9668, "end": 9698, "name": "REVERT", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "REVERT", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "tag", "source": 0, "value": "206" }, - { "begin": 9668, "end": 9698, "name": "JUMPDEST", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "POP", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "POP", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "POP", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "POP", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "JUMPDEST", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "POP", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "POP", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "POP", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "POP", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9668, "end": 9698, "name": "MLOAD", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "MLOAD", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9668, "end": 9698, "name": "NOT", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "NOT", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9668, "end": 9698, "name": "DUP3", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "ADD", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "AND", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP3", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "ADD", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP1", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP3", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "ADD", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "AND", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP3", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "ADD", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP1", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9668, "end": 9698, "name": "MSTORE", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "POP", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "DUP2", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "ADD", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "SWAP1", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "MSTORE", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "POP", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "DUP2", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "ADD", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "SWAP1", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH [tag]", "source": 0, "value": "207" }, - { "begin": 9668, "end": 9698, "name": "SWAP2", "source": 0 }, - { "begin": 9668, "end": 9698, "name": "SWAP1", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "SWAP2", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "SWAP1", "source": 0 }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9668, - "end": 9698, + "begin": 9238, + "end": 9268, "name": "tag", "source": 0, "value": "207" }, - { "begin": 9668, "end": 9698, "name": "JUMPDEST", "source": 0 }, - { "begin": 9661, "end": 9698, "name": "SWAP1", "source": 0 }, - { "begin": 9661, "end": 9698, "name": "POP", "source": 0 }, - { "begin": 9586, "end": 9713, "name": "SWAP1", "source": 0 }, + { "begin": 9238, "end": 9268, "name": "JUMPDEST", "source": 0 }, + { "begin": 9231, "end": 9268, "name": "SWAP1", "source": 0 }, + { "begin": 9231, "end": 9268, "name": "POP", "source": 0 }, + { "begin": 9164, "end": 9275, "name": "SWAP1", "source": 0 }, { - "begin": 9586, - "end": 9713, + "begin": 9164, + "end": 9275, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "tag", "source": 0, "value": "89" }, - { "begin": 8319, "end": 8541, "name": "JUMPDEST", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "JUMPDEST", "source": 0 }, { - "begin": 8383, - "end": 8390, + "begin": 8101, + "end": 8108, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8496, "end": 8511, "name": "DUP1", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "DUP1", "source": 0 }, { - "begin": 8496, - "end": 8511, + "begin": 8199, + "end": 8214, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8496, "end": 8511, "name": "SWAP1", "source": 0 }, - { "begin": 8496, "end": 8511, "name": "SLOAD", "source": 0 }, - { "begin": 8496, "end": 8511, "name": "SWAP1", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "SWAP1", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "SLOAD", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "SWAP1", "source": 0 }, { - "begin": 8496, - "end": 8511, + "begin": 8199, + "end": 8214, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 8496, "end": 8511, "name": "EXP", "source": 0 }, - { "begin": 8496, "end": 8511, "name": "SWAP1", "source": 0 }, - { "begin": 8496, "end": 8511, "name": "DIV", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "EXP", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "SWAP1", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "DIV", "source": 0 }, { - "begin": 8496, - "end": 8511, + "begin": 8199, + "end": 8214, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8496, "end": 8511, "name": "AND", "source": 0 }, + { "begin": 8199, "end": 8214, "name": "AND", "source": 0 }, { - "begin": 8496, - "end": 8521, + "begin": 8199, + "end": 8224, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8496, "end": 8521, "name": "AND", "source": 0 }, + { "begin": 8199, "end": 8224, "name": "AND", "source": 0 }, { - "begin": 8496, - "end": 8521, + "begin": 8199, + "end": 8224, "name": "PUSH", "source": 0, "value": "70A08231" }, - { "begin": 8522, "end": 8525, "name": "DUP4", "source": 0 }, + { "begin": 8225, "end": 8228, "name": "DUP4", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8496, "end": 8526, "name": "MLOAD", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP3", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "MLOAD", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP3", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 8496, "end": 8526, "name": "AND", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "AND", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 8496, "end": 8526, "name": "SHL", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP2", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "MSTORE", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "SHL", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP2", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "MSTORE", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8496, "end": 8526, "name": "ADD", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "ADD", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH [tag]", "source": 0, "value": "209" }, - { "begin": 8496, "end": 8526, "name": "SWAP2", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "SWAP1", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "SWAP2", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "SWAP1", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "tag", "source": 0, "value": "209" }, - { "begin": 8496, "end": 8526, "name": "JUMPDEST", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "JUMPDEST", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8496, "end": 8526, "name": "MLOAD", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP1", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP4", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "SUB", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP2", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP7", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "GAS", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "STATICCALL", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "ISZERO", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP1", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "ISZERO", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "MLOAD", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP1", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP4", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "SUB", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP2", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP7", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "GAS", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "STATICCALL", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "ISZERO", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP1", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "ISZERO", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH [tag]", "source": 0, "value": "211" }, - { "begin": 8496, "end": 8526, "name": "JUMPI", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "JUMPI", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8496, "end": 8526, "name": "DUP1", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP1", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8496, "end": 8526, "name": "REVERT", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "REVERT", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "tag", "source": 0, "value": "211" }, - { "begin": 8496, "end": 8526, "name": "JUMPDEST", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "POP", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "POP", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "POP", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "POP", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "JUMPDEST", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "POP", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "POP", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "POP", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "POP", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8496, "end": 8526, "name": "MLOAD", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "MLOAD", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8496, "end": 8526, "name": "NOT", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "NOT", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8496, "end": 8526, "name": "DUP3", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "ADD", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "AND", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP3", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "ADD", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP1", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP3", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "ADD", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "AND", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP3", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "ADD", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP1", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8496, "end": 8526, "name": "MSTORE", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "POP", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "DUP2", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "ADD", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "SWAP1", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "MSTORE", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "POP", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "DUP2", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "ADD", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "SWAP1", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH [tag]", "source": 0, "value": "212" }, - { "begin": 8496, "end": 8526, "name": "SWAP2", "source": 0 }, - { "begin": 8496, "end": 8526, "name": "SWAP1", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "SWAP2", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "SWAP1", "source": 0 }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "PUSH [tag]", "source": 0, "value": "178" }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8496, - "end": 8526, + "begin": 8199, + "end": 8229, "name": "tag", "source": 0, "value": "212" }, - { "begin": 8496, "end": 8526, "name": "JUMPDEST", "source": 0 }, - { "begin": 8489, "end": 8526, "name": "SWAP1", "source": 0 }, - { "begin": 8489, "end": 8526, "name": "POP", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SWAP2", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "SWAP1", "source": 0 }, - { "begin": 8319, "end": 8541, "name": "POP", "source": 0 }, + { "begin": 8199, "end": 8229, "name": "JUMPDEST", "source": 0 }, + { "begin": 8192, "end": 8229, "name": "SWAP1", "source": 0 }, + { "begin": 8192, "end": 8229, "name": "POP", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP2", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "SWAP1", "source": 0 }, + { "begin": 8037, "end": 8236, "name": "POP", "source": 0 }, { - "begin": 8319, - "end": 8541, + "begin": 8037, + "end": 8236, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 11687, - "end": 12058, + "begin": 11116, + "end": 11535, "name": "tag", "source": 0, "value": "94" }, - { "begin": 11687, "end": 12058, "name": "JUMPDEST", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "JUMPDEST", "source": 0 }, { - "begin": 11826, - "end": 11830, + "begin": 11236, + "end": 11240, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11847, "end": 11858, "name": "DUP1", "source": 0 }, + { "begin": 11253, "end": 11264, "name": "DUP1", "source": 0 }, { - "begin": 11860, - "end": 11877, + "begin": 11266, + "end": 11283, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 11881, - "end": 11903, + "begin": 11287, + "end": 11309, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 11881, - "end": 11903, + "begin": 11287, + "end": 11309, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11881, "end": 11903, "name": "SWAP1", "source": 0 }, - { "begin": 11881, "end": 11903, "name": "SLOAD", "source": 0 }, - { "begin": 11881, "end": 11903, "name": "SWAP1", "source": 0 }, + { "begin": 11287, "end": 11309, "name": "SWAP1", "source": 0 }, + { "begin": 11287, "end": 11309, "name": "SLOAD", "source": 0 }, + { "begin": 11287, "end": 11309, "name": "SWAP1", "source": 0 }, { - "begin": 11881, - "end": 11903, + "begin": 11287, + "end": 11309, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 11881, "end": 11903, "name": "EXP", "source": 0 }, - { "begin": 11881, "end": 11903, "name": "SWAP1", "source": 0 }, - { "begin": 11881, "end": 11903, "name": "DIV", "source": 0 }, + { "begin": 11287, "end": 11309, "name": "EXP", "source": 0 }, + { "begin": 11287, "end": 11309, "name": "SWAP1", "source": 0 }, + { "begin": 11287, "end": 11309, "name": "DIV", "source": 0 }, { - "begin": 11881, - "end": 11903, + "begin": 11287, + "end": 11309, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11881, "end": 11903, "name": "AND", "source": 0 }, + { "begin": 11287, "end": 11309, "name": "AND", "source": 0 }, { - "begin": 11881, - "end": 11916, + "begin": 11287, + "end": 11322, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11881, "end": 11916, "name": "AND", "source": 0 }, - { "begin": 11999, "end": 12003, "name": "DUP7", "source": 0 }, - { "begin": 12005, "end": 12007, "name": "DUP7", "source": 0 }, - { "begin": 12009, "end": 12014, "name": "DUP7", "source": 0 }, + { "begin": 11287, "end": 11322, "name": "AND", "source": 0 }, + { "begin": 11434, "end": 11438, "name": "DUP7", "source": 0 }, + { "begin": 11456, "end": 11458, "name": "DUP7", "source": 0 }, + { "begin": 11476, "end": 11481, "name": "DUP7", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11934, "end": 12015, "name": "MLOAD", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "MLOAD", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "24" }, - { "begin": 11934, "end": 12015, "name": "ADD", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "ADD", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH [tag]", "source": 0, "value": "214" }, - { "begin": 11934, "end": 12015, "name": "SWAP4", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "SWAP3", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "SWAP2", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "SWAP1", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "SWAP4", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "SWAP3", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "SWAP2", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "SWAP1", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH [tag]", "source": 0, "value": "185" }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "tag", "source": 0, "value": "214" }, - { "begin": 11934, "end": 12015, "name": "JUMPDEST", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "JUMPDEST", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11934, "end": 12015, "name": "MLOAD", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "MLOAD", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 11934, "end": 12015, "name": "DUP2", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "DUP4", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "SUB", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "SUB", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "DUP2", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "MSTORE", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "SWAP1", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP2", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP4", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "SUB", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "SUB", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP2", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "MSTORE", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "SWAP1", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11934, "end": 12015, "name": "MSTORE", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "MSTORE", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "23B872DD00000000000000000000000000000000000000000000000000000000" }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11934, "end": 12015, "name": "NOT", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "AND", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "NOT", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "AND", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 11934, "end": 12015, "name": "DUP3", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "ADD", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "DUP1", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "MLOAD", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP3", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "ADD", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP1", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "MLOAD", "source": 0 }, { - "begin": 11934, - "end": 12015, + "begin": 11336, + "end": 11495, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11934, "end": 12015, "name": "DUP4", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "DUP2", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "DUP4", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "AND", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "OR", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "DUP4", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "MSTORE", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "POP", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "POP", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "POP", "source": 0 }, - { "begin": 11934, "end": 12015, "name": "POP", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP4", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP2", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP4", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "AND", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "OR", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "DUP4", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "MSTORE", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "POP", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "POP", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "POP", "source": 0 }, + { "begin": 11336, "end": 11495, "name": "POP", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11881, "end": 12016, "name": "MLOAD", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "MLOAD", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH [tag]", "source": 0, "value": "215" }, - { "begin": 11881, "end": 12016, "name": "SWAP2", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "SWAP1", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "SWAP2", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "SWAP1", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH [tag]", "source": 0, "value": "216" }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "tag", "source": 0, "value": "215" }, - { "begin": 11881, "end": 12016, "name": "JUMPDEST", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "JUMPDEST", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11881, "end": 12016, "name": "MLOAD", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "DUP1", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "DUP4", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "SUB", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "DUP2", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "DUP6", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "GAS", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "MLOAD", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP1", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP4", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "SUB", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP2", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP6", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "GAS", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "DELEGATECALL", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "SWAP2", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "POP", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "POP", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "SWAP2", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "POP", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "POP", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "DUP1", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP1", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11881, "end": 12016, "name": "DUP2", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "EQ", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP2", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "EQ", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH [tag]", "source": 0, "value": "219" }, - { "begin": 11881, "end": 12016, "name": "JUMPI", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "JUMPI", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11881, "end": 12016, "name": "MLOAD", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "SWAP2", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "POP", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "MLOAD", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "SWAP2", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "POP", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 11881, "end": 12016, "name": "NOT", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "NOT", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "ADD", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "AND", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "DUP3", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "ADD", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "ADD", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "AND", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP3", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "ADD", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11881, "end": 12016, "name": "MSTORE", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "MSTORE", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "DUP3", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "MSTORE", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP3", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "MSTORE", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 11881, "end": 12016, "name": "DUP5", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "ADD", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "DUP5", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "ADD", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH [tag]", "source": 0, "value": "218" }, - { "begin": 11881, "end": 12016, "name": "JUMP", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "JUMP", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "tag", "source": 0, "value": "219" }, - { "begin": 11881, "end": 12016, "name": "JUMPDEST", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "JUMPDEST", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 11881, "end": 12016, "name": "SWAP2", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "POP", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "SWAP2", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "POP", "source": 0 }, { - "begin": 11881, - "end": 12016, + "begin": 11287, + "end": 11505, "name": "tag", "source": 0, "value": "218" }, - { "begin": 11881, "end": 12016, "name": "JUMPDEST", "source": 0 }, - { "begin": 11881, "end": 12016, "name": "POP", "source": 0 }, - { "begin": 11846, "end": 12016, "name": "SWAP2", "source": 0 }, - { "begin": 11846, "end": 12016, "name": "POP", "source": 0 }, - { "begin": 11846, "end": 12016, "name": "SWAP2", "source": 0 }, - { "begin": 11846, "end": 12016, "name": "POP", "source": 0 }, - { "begin": 12037, "end": 12043, "name": "DUP2", "source": 0 }, - { "begin": 12030, "end": 12043, "name": "SWAP3", "source": 0 }, - { "begin": 12030, "end": 12043, "name": "POP", "source": 0 }, - { "begin": 12030, "end": 12043, "name": "POP", "source": 0 }, - { "begin": 12030, "end": 12043, "name": "POP", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SWAP4", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "SWAP3", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "POP", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "POP", "source": 0 }, - { "begin": 11687, "end": 12058, "name": "POP", "source": 0 }, - { - "begin": 11687, - "end": 12058, + { "begin": 11287, "end": 11505, "name": "JUMPDEST", "source": 0 }, + { "begin": 11287, "end": 11505, "name": "POP", "source": 0 }, + { "begin": 11252, "end": 11505, "name": "SWAP2", "source": 0 }, + { "begin": 11252, "end": 11505, "name": "POP", "source": 0 }, + { "begin": 11252, "end": 11505, "name": "SWAP2", "source": 0 }, + { "begin": 11252, "end": 11505, "name": "POP", "source": 0 }, + { "begin": 11522, "end": 11528, "name": "DUP2", "source": 0 }, + { "begin": 11515, "end": 11528, "name": "SWAP3", "source": 0 }, + { "begin": 11515, "end": 11528, "name": "POP", "source": 0 }, + { "begin": 11515, "end": 11528, "name": "POP", "source": 0 }, + { "begin": 11515, "end": 11528, "name": "POP", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP4", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "SWAP3", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "POP", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "POP", "source": 0 }, + { "begin": 11116, "end": 11535, "name": "POP", "source": 0 }, + { + "begin": 11116, + "end": 11535, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "tag", "source": 0, "value": "99" }, - { "begin": 7039, "end": 7254, "name": "JUMPDEST", "source": 0 }, - { "begin": 7163, "end": 7179, "name": "DUP1", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "JUMPDEST", "source": 0 }, + { "begin": 7091, "end": 7107, "name": "DUP1", "source": 0 }, { - "begin": 7121, - "end": 7136, + "begin": 7049, + "end": 7064, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7121, "end": 7136, "name": "DUP1", "source": 0 }, + { "begin": 7049, "end": 7064, "name": "DUP1", "source": 0 }, { - "begin": 7121, - "end": 7180, + "begin": 7049, + "end": 7108, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 7121, "end": 7180, "name": "EXP", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "DUP2", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "SLOAD", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "DUP2", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "EXP", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "DUP2", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "SLOAD", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "DUP2", "source": 0 }, { - "begin": 7121, - "end": 7180, + "begin": 7049, + "end": 7108, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7121, "end": 7180, "name": "MUL", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "NOT", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "AND", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "SWAP1", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "DUP4", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "MUL", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "NOT", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "AND", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "SWAP1", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "DUP4", "source": 0 }, { - "begin": 7121, - "end": 7180, + "begin": 7049, + "end": 7108, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7121, "end": 7180, "name": "AND", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "MUL", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "OR", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "SWAP1", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "SSTORE", "source": 0 }, - { "begin": 7121, "end": 7180, "name": "POP", "source": 0 }, - { "begin": 7223, "end": 7239, "name": "DUP1", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "AND", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "MUL", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "OR", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "SWAP1", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "SSTORE", "source": 0 }, + { "begin": 7049, "end": 7108, "name": "POP", "source": 0 }, + { "begin": 7143, "end": 7159, "name": "DUP1", "source": 0 }, { - "begin": 7198, - "end": 7220, + "begin": 7118, + "end": 7140, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 7198, - "end": 7220, + "begin": 7118, + "end": 7140, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7198, - "end": 7239, + "begin": 7118, + "end": 7159, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 7198, "end": 7239, "name": "EXP", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "DUP2", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "SLOAD", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "DUP2", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "EXP", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "DUP2", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "SLOAD", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "DUP2", "source": 0 }, { - "begin": 7198, - "end": 7239, + "begin": 7118, + "end": 7159, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7198, "end": 7239, "name": "MUL", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "NOT", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "AND", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "SWAP1", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "DUP4", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "MUL", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "NOT", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "AND", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "SWAP1", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "DUP4", "source": 0 }, { - "begin": 7198, - "end": 7239, + "begin": 7118, + "end": 7159, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7198, "end": 7239, "name": "AND", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "MUL", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "OR", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "SWAP1", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "SSTORE", "source": 0 }, - { "begin": 7198, "end": 7239, "name": "POP", "source": 0 }, - { "begin": 7039, "end": 7254, "name": "POP", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "AND", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "MUL", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "OR", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "SWAP1", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "SSTORE", "source": 0 }, + { "begin": 7118, "end": 7159, "name": "POP", "source": 0 }, + { "begin": 6975, "end": 7166, "name": "POP", "source": 0 }, { - "begin": 7039, - "end": 7254, + "begin": 6975, + "end": 7166, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "tag", "source": 0, "value": "103" }, - { "begin": 9288, "end": 9425, "name": "JUMPDEST", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "JUMPDEST", "source": 0 }, { - "begin": 9348, - "end": 9352, + "begin": 8974, + "end": 8978, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9379, "end": 9394, "name": "DUP1", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "DUP1", "source": 0 }, { - "begin": 9379, - "end": 9394, + "begin": 8997, + "end": 9012, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9379, "end": 9394, "name": "SWAP1", "source": 0 }, - { "begin": 9379, "end": 9394, "name": "SLOAD", "source": 0 }, - { "begin": 9379, "end": 9394, "name": "SWAP1", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "SWAP1", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "SLOAD", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "SWAP1", "source": 0 }, { - "begin": 9379, - "end": 9394, + "begin": 8997, + "end": 9012, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 9379, "end": 9394, "name": "EXP", "source": 0 }, - { "begin": 9379, "end": 9394, "name": "SWAP1", "source": 0 }, - { "begin": 9379, "end": 9394, "name": "DIV", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "EXP", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "SWAP1", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "DIV", "source": 0 }, { - "begin": 9379, - "end": 9394, + "begin": 8997, + "end": 9012, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9379, "end": 9394, "name": "AND", "source": 0 }, + { "begin": 8997, "end": 9012, "name": "AND", "source": 0 }, { - "begin": 9379, - "end": 9401, + "begin": 8997, + "end": 9019, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9379, "end": 9401, "name": "AND", "source": 0 }, + { "begin": 8997, "end": 9019, "name": "AND", "source": 0 }, { - "begin": 9379, - "end": 9401, + "begin": 8997, + "end": 9019, "name": "PUSH", "source": 0, "value": "8D1FDF2F" }, - { "begin": 9402, "end": 9409, "name": "DUP4", "source": 0 }, + { "begin": 9020, "end": 9027, "name": "DUP4", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9379, "end": 9410, "name": "MLOAD", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP3", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "MLOAD", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP3", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 9379, "end": 9410, "name": "AND", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "AND", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 9379, "end": 9410, "name": "SHL", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP2", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "MSTORE", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "SHL", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP2", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "MSTORE", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9379, "end": 9410, "name": "ADD", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "ADD", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH [tag]", "source": 0, "value": "222" }, - { "begin": 9379, "end": 9410, "name": "SWAP2", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "SWAP1", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "SWAP2", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "SWAP1", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "tag", "source": 0, "value": "222" }, - { "begin": 9379, "end": 9410, "name": "JUMPDEST", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "JUMPDEST", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9379, "end": 9410, "name": "MLOAD", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP1", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP4", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "SUB", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP2", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "MLOAD", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP1", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP4", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "SUB", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP2", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9379, "end": 9410, "name": "DUP8", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "GAS", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "CALL", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "ISZERO", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP1", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "ISZERO", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP8", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "GAS", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "CALL", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "ISZERO", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP1", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "ISZERO", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH [tag]", "source": 0, "value": "224" }, - { "begin": 9379, "end": 9410, "name": "JUMPI", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "JUMPI", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9379, "end": 9410, "name": "DUP1", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP1", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9379, "end": 9410, "name": "REVERT", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "REVERT", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "tag", "source": 0, "value": "224" }, - { "begin": 9379, "end": 9410, "name": "JUMPDEST", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "POP", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "POP", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "POP", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "POP", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "JUMPDEST", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "POP", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "POP", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "POP", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "POP", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9379, "end": 9410, "name": "MLOAD", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "MLOAD", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9379, "end": 9410, "name": "NOT", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "NOT", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9379, "end": 9410, "name": "DUP3", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "ADD", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "AND", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP3", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "ADD", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP1", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP3", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "ADD", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "AND", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP3", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "ADD", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP1", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9379, "end": 9410, "name": "MSTORE", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "POP", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "DUP2", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "ADD", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "SWAP1", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "MSTORE", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "POP", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "DUP2", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "ADD", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "SWAP1", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH [tag]", "source": 0, "value": "225" }, - { "begin": 9379, "end": 9410, "name": "SWAP2", "source": 0 }, - { "begin": 9379, "end": 9410, "name": "SWAP1", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "SWAP2", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "SWAP1", "source": 0 }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9379, - "end": 9410, + "begin": 8997, + "end": 9028, "name": "tag", "source": 0, "value": "225" }, - { "begin": 9379, "end": 9410, "name": "JUMPDEST", "source": 0 }, - { "begin": 9372, "end": 9410, "name": "SWAP1", "source": 0 }, - { "begin": 9372, "end": 9410, "name": "POP", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SWAP2", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "SWAP1", "source": 0 }, - { "begin": 9288, "end": 9425, "name": "POP", "source": 0 }, + { "begin": 8997, "end": 9028, "name": "JUMPDEST", "source": 0 }, + { "begin": 8990, "end": 9028, "name": "SWAP1", "source": 0 }, + { "begin": 8990, "end": 9028, "name": "POP", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP2", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "SWAP1", "source": 0 }, + { "begin": 8914, "end": 9035, "name": "POP", "source": 0 }, { - "begin": 9288, - "end": 9425, + "begin": 8914, + "end": 9035, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "tag", "source": 0, "value": "107" }, - { "begin": 7627, "end": 7836, "name": "JUMPDEST", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "JUMPDEST", "source": 0 }, { - "begin": 7677, - "end": 7690, + "begin": 7514, + "end": 7527, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 7797, - "end": 7812, + "begin": 7618, + "end": 7633, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7797, "end": 7812, "name": "DUP1", "source": 0 }, - { "begin": 7797, "end": 7812, "name": "SLOAD", "source": 0 }, - { "begin": 7797, "end": 7812, "name": "SWAP1", "source": 0 }, + { "begin": 7618, "end": 7633, "name": "DUP1", "source": 0 }, + { "begin": 7618, "end": 7633, "name": "SLOAD", "source": 0 }, + { "begin": 7618, "end": 7633, "name": "SWAP1", "source": 0 }, { - "begin": 7797, - "end": 7812, + "begin": 7618, + "end": 7633, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 7797, "end": 7812, "name": "EXP", "source": 0 }, - { "begin": 7797, "end": 7812, "name": "SWAP1", "source": 0 }, - { "begin": 7797, "end": 7812, "name": "DIV", "source": 0 }, + { "begin": 7618, "end": 7633, "name": "EXP", "source": 0 }, + { "begin": 7618, "end": 7633, "name": "SWAP1", "source": 0 }, + { "begin": 7618, "end": 7633, "name": "DIV", "source": 0 }, { - "begin": 7797, - "end": 7812, + "begin": 7618, + "end": 7633, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7797, "end": 7812, "name": "AND", "source": 0 }, + { "begin": 7618, "end": 7633, "name": "AND", "source": 0 }, { - "begin": 7797, - "end": 7819, + "begin": 7618, + "end": 7640, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7797, "end": 7819, "name": "AND", "source": 0 }, + { "begin": 7618, "end": 7640, "name": "AND", "source": 0 }, { - "begin": 7797, - "end": 7819, + "begin": 7618, + "end": 7640, "name": "PUSH", "source": 0, "value": "95D89B41" }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7797, "end": 7821, "name": "MLOAD", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP2", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "MLOAD", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP2", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 7797, "end": 7821, "name": "AND", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "AND", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 7797, "end": 7821, "name": "SHL", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP2", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "MSTORE", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "SHL", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP2", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "MSTORE", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 7797, "end": 7821, "name": "ADD", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "ADD", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7797, "end": 7821, "name": "MLOAD", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP1", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP4", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "SUB", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP2", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP7", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "GAS", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "STATICCALL", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "ISZERO", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP1", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "ISZERO", "source": 0 }, - { - "begin": 7797, - "end": 7821, + { "begin": 7618, "end": 7642, "name": "MLOAD", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP1", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP4", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "SUB", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP2", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP7", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "GAS", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "STATICCALL", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "ISZERO", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP1", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "ISZERO", "source": 0 }, + { + "begin": 7618, + "end": 7642, "name": "PUSH [tag]", "source": 0, "value": "228" }, - { "begin": 7797, "end": 7821, "name": "JUMPI", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "JUMPI", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7797, "end": 7821, "name": "DUP1", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP1", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7797, "end": 7821, "name": "REVERT", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "REVERT", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "tag", "source": 0, "value": "228" }, - { "begin": 7797, "end": 7821, "name": "JUMPDEST", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "POP", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "POP", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "POP", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "POP", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "JUMPDEST", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "POP", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "POP", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "POP", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "POP", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7797, "end": 7821, "name": "MLOAD", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "MLOAD", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7797, "end": 7821, "name": "DUP3", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP3", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 7797, "end": 7821, "name": "NOT", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "NOT", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 7797, "end": 7821, "name": "DUP3", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "ADD", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "AND", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP3", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "ADD", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP1", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP3", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "ADD", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "AND", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP3", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "ADD", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP1", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7797, "end": 7821, "name": "MSTORE", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "POP", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "DUP2", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "ADD", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "SWAP1", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "MSTORE", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "POP", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "DUP2", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "ADD", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "SWAP1", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH [tag]", "source": 0, "value": "229" }, - { "begin": 7797, "end": 7821, "name": "SWAP2", "source": 0 }, - { "begin": 7797, "end": 7821, "name": "SWAP1", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "SWAP2", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "SWAP1", "source": 0 }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "PUSH [tag]", "source": 0, "value": "166" }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7797, - "end": 7821, + "begin": 7618, + "end": 7642, "name": "tag", "source": 0, "value": "229" }, - { "begin": 7797, "end": 7821, "name": "JUMPDEST", "source": 0 }, - { "begin": 7790, "end": 7821, "name": "SWAP1", "source": 0 }, - { "begin": 7790, "end": 7821, "name": "POP", "source": 0 }, - { "begin": 7627, "end": 7836, "name": "SWAP1", "source": 0 }, + { "begin": 7618, "end": 7642, "name": "JUMPDEST", "source": 0 }, + { "begin": 7611, "end": 7642, "name": "SWAP1", "source": 0 }, + { "begin": 7611, "end": 7642, "name": "POP", "source": 0 }, + { "begin": 7464, "end": 7649, "name": "SWAP1", "source": 0 }, { - "begin": 7627, - "end": 7836, + "begin": 7464, + "end": 7649, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "tag", "source": 0, "value": "111" }, - { "begin": 6727, "end": 6843, "name": "JUMPDEST", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "JUMPDEST", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6727, "end": 6843, "name": "DUP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SLOAD", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SWAP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SLOAD", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP1", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6727, "end": 6843, "name": "EXP", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "SWAP1", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "DIV", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "EXP", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "SWAP1", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DIV", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6727, "end": 6843, "name": "AND", "source": 0 }, - { "begin": 6727, "end": 6843, "name": "DUP2", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "AND", "source": 0 }, + { "begin": 6687, "end": 6811, "name": "DUP2", "source": 0 }, { - "begin": 6727, - "end": 6843, + "begin": 6687, + "end": 6811, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "tag", "source": 0, "value": "117" }, - { "begin": 9125, "end": 9274, "name": "JUMPDEST", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "JUMPDEST", "source": 0 }, { - "begin": 9195, - "end": 9199, + "begin": 8841, + "end": 8845, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9226, "end": 9241, "name": "DUP1", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "DUP1", "source": 0 }, { - "begin": 9226, - "end": 9241, + "begin": 8868, + "end": 8883, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9226, "end": 9241, "name": "SWAP1", "source": 0 }, - { "begin": 9226, "end": 9241, "name": "SLOAD", "source": 0 }, - { "begin": 9226, "end": 9241, "name": "SWAP1", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "SWAP1", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "SLOAD", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "SWAP1", "source": 0 }, { - "begin": 9226, - "end": 9241, + "begin": 8868, + "end": 8883, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 9226, "end": 9241, "name": "EXP", "source": 0 }, - { "begin": 9226, "end": 9241, "name": "SWAP1", "source": 0 }, - { "begin": 9226, "end": 9241, "name": "DIV", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "EXP", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "SWAP1", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "DIV", "source": 0 }, { - "begin": 9226, - "end": 9241, + "begin": 8868, + "end": 8883, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9226, "end": 9241, "name": "AND", "source": 0 }, + { "begin": 8868, "end": 8883, "name": "AND", "source": 0 }, { - "begin": 9226, - "end": 9246, + "begin": 8868, + "end": 8888, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9226, "end": 9246, "name": "AND", "source": 0 }, + { "begin": 8868, "end": 8888, "name": "AND", "source": 0 }, { - "begin": 9226, - "end": 9246, + "begin": 8868, + "end": 8888, "name": "PUSH", "source": 0, "value": "9DC29FAC" }, - { "begin": 9247, "end": 9251, "name": "DUP5", "source": 0 }, - { "begin": 9253, "end": 9258, "name": "DUP5", "source": 0 }, + { "begin": 8889, "end": 8893, "name": "DUP5", "source": 0 }, + { "begin": 8895, "end": 8900, "name": "DUP5", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9226, "end": 9259, "name": "MLOAD", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP4", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "MLOAD", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP4", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 9226, "end": 9259, "name": "AND", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "AND", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 9226, "end": 9259, "name": "SHL", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP2", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "MSTORE", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SHL", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP2", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "MSTORE", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9226, "end": 9259, "name": "ADD", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "ADD", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH [tag]", "source": 0, "value": "231" }, - { "begin": 9226, "end": 9259, "name": "SWAP3", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "SWAP2", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "SWAP1", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SWAP3", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SWAP2", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SWAP1", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH [tag]", "source": 0, "value": "169" }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "tag", "source": 0, "value": "231" }, - { "begin": 9226, "end": 9259, "name": "JUMPDEST", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "JUMPDEST", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9226, "end": 9259, "name": "MLOAD", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP1", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP4", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "SUB", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP2", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "MLOAD", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP1", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP4", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SUB", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP2", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9226, "end": 9259, "name": "DUP8", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "GAS", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "CALL", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "ISZERO", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP1", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "ISZERO", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP8", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "GAS", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "CALL", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "ISZERO", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP1", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "ISZERO", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH [tag]", "source": 0, "value": "233" }, - { "begin": 9226, "end": 9259, "name": "JUMPI", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "JUMPI", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9226, "end": 9259, "name": "DUP1", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP1", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9226, "end": 9259, "name": "REVERT", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "REVERT", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "tag", "source": 0, "value": "233" }, - { "begin": 9226, "end": 9259, "name": "JUMPDEST", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "POP", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "POP", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "POP", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "POP", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "JUMPDEST", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "POP", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "POP", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "POP", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "POP", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9226, "end": 9259, "name": "MLOAD", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "MLOAD", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9226, "end": 9259, "name": "NOT", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "NOT", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9226, "end": 9259, "name": "DUP3", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "ADD", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "AND", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP3", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "ADD", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP1", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP3", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "ADD", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "AND", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP3", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "ADD", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP1", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9226, "end": 9259, "name": "MSTORE", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "POP", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "DUP2", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "ADD", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "SWAP1", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "MSTORE", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "POP", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "DUP2", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "ADD", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SWAP1", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH [tag]", "source": 0, "value": "234" }, - { "begin": 9226, "end": 9259, "name": "SWAP2", "source": 0 }, - { "begin": 9226, "end": 9259, "name": "SWAP1", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SWAP2", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "SWAP1", "source": 0 }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9226, - "end": 9259, + "begin": 8868, + "end": 8901, "name": "tag", "source": 0, "value": "234" }, - { "begin": 9226, "end": 9259, "name": "JUMPDEST", "source": 0 }, - { "begin": 9219, "end": 9259, "name": "SWAP1", "source": 0 }, - { "begin": 9219, "end": 9259, "name": "POP", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SWAP3", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "SWAP2", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "POP", "source": 0 }, - { "begin": 9125, "end": 9274, "name": "POP", "source": 0 }, + { "begin": 8868, "end": 8901, "name": "JUMPDEST", "source": 0 }, + { "begin": 8861, "end": 8901, "name": "SWAP1", "source": 0 }, + { "begin": 8861, "end": 8901, "name": "POP", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP3", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "SWAP2", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "POP", "source": 0 }, + { "begin": 8747, "end": 8908, "name": "POP", "source": 0 }, { - "begin": 9125, - "end": 9274, + "begin": 8747, + "end": 8908, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 10616, - "end": 10902, + "begin": 10126, + "end": 10421, "name": "tag", "source": 0, "value": "122" }, - { "begin": 10616, "end": 10902, "name": "JUMPDEST", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "JUMPDEST", "source": 0 }, { - "begin": 10688, - "end": 10692, + "begin": 10214, + "end": 10218, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10709, "end": 10720, "name": "DUP1", "source": 0 }, + { "begin": 10235, "end": 10246, "name": "DUP1", "source": 0 }, { - "begin": 10722, - "end": 10739, + "begin": 10248, + "end": 10265, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 10743, - "end": 10765, + "begin": 10269, + "end": 10291, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 10743, - "end": 10765, + "begin": 10269, + "end": 10291, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10743, "end": 10765, "name": "SWAP1", "source": 0 }, - { "begin": 10743, "end": 10765, "name": "SLOAD", "source": 0 }, - { "begin": 10743, "end": 10765, "name": "SWAP1", "source": 0 }, + { "begin": 10269, "end": 10291, "name": "SWAP1", "source": 0 }, + { "begin": 10269, "end": 10291, "name": "SLOAD", "source": 0 }, + { "begin": 10269, "end": 10291, "name": "SWAP1", "source": 0 }, { - "begin": 10743, - "end": 10765, + "begin": 10269, + "end": 10291, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 10743, "end": 10765, "name": "EXP", "source": 0 }, - { "begin": 10743, "end": 10765, "name": "SWAP1", "source": 0 }, - { "begin": 10743, "end": 10765, "name": "DIV", "source": 0 }, + { "begin": 10269, "end": 10291, "name": "EXP", "source": 0 }, + { "begin": 10269, "end": 10291, "name": "SWAP1", "source": 0 }, + { "begin": 10269, "end": 10291, "name": "DIV", "source": 0 }, { - "begin": 10743, - "end": 10765, + "begin": 10269, + "end": 10291, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10743, "end": 10765, "name": "AND", "source": 0 }, + { "begin": 10269, "end": 10291, "name": "AND", "source": 0 }, { - "begin": 10743, - "end": 10778, + "begin": 10269, + "end": 10304, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10743, "end": 10778, "name": "AND", "source": 0 }, - { "begin": 10849, "end": 10851, "name": "DUP6", "source": 0 }, - { "begin": 10853, "end": 10858, "name": "DUP6", "source": 0 }, + { "begin": 10269, "end": 10304, "name": "AND", "source": 0 }, + { "begin": 10371, "end": 10373, "name": "DUP6", "source": 0 }, + { "begin": 10375, "end": 10380, "name": "DUP6", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10796, "end": 10859, "name": "MLOAD", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "MLOAD", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "24" }, - { "begin": 10796, "end": 10859, "name": "ADD", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "ADD", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH [tag]", "source": 0, "value": "236" }, - { "begin": 10796, "end": 10859, "name": "SWAP3", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "SWAP2", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "SWAP1", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "SWAP3", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "SWAP2", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "SWAP1", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH [tag]", "source": 0, "value": "169" }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "tag", "source": 0, "value": "236" }, - { "begin": 10796, "end": 10859, "name": "JUMPDEST", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "JUMPDEST", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10796, "end": 10859, "name": "MLOAD", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "MLOAD", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 10796, "end": 10859, "name": "DUP2", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "DUP4", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "SUB", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "SUB", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "DUP2", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "MSTORE", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "SWAP1", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP2", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP4", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "SUB", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "SUB", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP2", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "MSTORE", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "SWAP1", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10796, "end": 10859, "name": "MSTORE", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "MSTORE", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "A9059CBB00000000000000000000000000000000000000000000000000000000" }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10796, "end": 10859, "name": "NOT", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "AND", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "NOT", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "AND", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 10796, "end": 10859, "name": "DUP3", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "ADD", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "DUP1", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "MLOAD", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP3", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "ADD", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP1", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "MLOAD", "source": 0 }, { - "begin": 10796, - "end": 10859, + "begin": 10318, + "end": 10381, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10796, "end": 10859, "name": "DUP4", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "DUP2", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "DUP4", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "AND", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "OR", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "DUP4", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "MSTORE", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "POP", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "POP", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "POP", "source": 0 }, - { "begin": 10796, "end": 10859, "name": "POP", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP4", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP2", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP4", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "AND", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "OR", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "DUP4", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "MSTORE", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "POP", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "POP", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "POP", "source": 0 }, + { "begin": 10318, "end": 10381, "name": "POP", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10743, "end": 10860, "name": "MLOAD", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "MLOAD", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH [tag]", "source": 0, "value": "237" }, - { "begin": 10743, "end": 10860, "name": "SWAP2", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "SWAP1", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "SWAP2", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "SWAP1", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH [tag]", "source": 0, "value": "216" }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "tag", "source": 0, "value": "237" }, - { "begin": 10743, "end": 10860, "name": "JUMPDEST", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "JUMPDEST", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10743, "end": 10860, "name": "MLOAD", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "DUP1", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "DUP4", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "SUB", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "DUP2", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "DUP6", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "GAS", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "MLOAD", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP1", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP4", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "SUB", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP2", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP6", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "GAS", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "DELEGATECALL", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "SWAP2", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "POP", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "POP", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "SWAP2", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "POP", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "POP", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "DUP1", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP1", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10743, "end": 10860, "name": "DUP2", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "EQ", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP2", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "EQ", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH [tag]", "source": 0, "value": "240" }, - { "begin": 10743, "end": 10860, "name": "JUMPI", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "JUMPI", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10743, "end": 10860, "name": "MLOAD", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "SWAP2", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "POP", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "MLOAD", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "SWAP2", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "POP", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 10743, "end": 10860, "name": "NOT", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "NOT", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "ADD", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "AND", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "DUP3", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "ADD", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "ADD", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "AND", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP3", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "ADD", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10743, "end": 10860, "name": "MSTORE", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "MSTORE", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "DUP3", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "MSTORE", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP3", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "MSTORE", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 10743, "end": 10860, "name": "DUP5", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "ADD", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "DUP5", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "ADD", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH [tag]", "source": 0, "value": "239" }, - { "begin": 10743, "end": 10860, "name": "JUMP", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "JUMP", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "tag", "source": 0, "value": "240" }, - { "begin": 10743, "end": 10860, "name": "JUMPDEST", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "JUMPDEST", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 10743, "end": 10860, "name": "SWAP2", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "POP", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "SWAP2", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "POP", "source": 0 }, { - "begin": 10743, - "end": 10860, + "begin": 10269, + "end": 10391, "name": "tag", "source": 0, "value": "239" }, - { "begin": 10743, "end": 10860, "name": "JUMPDEST", "source": 0 }, - { "begin": 10743, "end": 10860, "name": "POP", "source": 0 }, - { "begin": 10708, "end": 10860, "name": "SWAP2", "source": 0 }, - { "begin": 10708, "end": 10860, "name": "POP", "source": 0 }, - { "begin": 10708, "end": 10860, "name": "SWAP2", "source": 0 }, - { "begin": 10708, "end": 10860, "name": "POP", "source": 0 }, - { "begin": 10881, "end": 10887, "name": "DUP2", "source": 0 }, - { "begin": 10874, "end": 10887, "name": "SWAP3", "source": 0 }, - { "begin": 10874, "end": 10887, "name": "POP", "source": 0 }, - { "begin": 10874, "end": 10887, "name": "POP", "source": 0 }, - { "begin": 10874, "end": 10887, "name": "POP", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SWAP3", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "SWAP2", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "POP", "source": 0 }, - { "begin": 10616, "end": 10902, "name": "POP", "source": 0 }, - { - "begin": 10616, - "end": 10902, + { "begin": 10269, "end": 10391, "name": "JUMPDEST", "source": 0 }, + { "begin": 10269, "end": 10391, "name": "POP", "source": 0 }, + { "begin": 10234, "end": 10391, "name": "SWAP2", "source": 0 }, + { "begin": 10234, "end": 10391, "name": "POP", "source": 0 }, + { "begin": 10234, "end": 10391, "name": "SWAP2", "source": 0 }, + { "begin": 10234, "end": 10391, "name": "POP", "source": 0 }, + { "begin": 10408, "end": 10414, "name": "DUP2", "source": 0 }, + { "begin": 10401, "end": 10414, "name": "SWAP3", "source": 0 }, + { "begin": 10401, "end": 10414, "name": "POP", "source": 0 }, + { "begin": 10401, "end": 10414, "name": "POP", "source": 0 }, + { "begin": 10401, "end": 10414, "name": "POP", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP3", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "SWAP2", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "POP", "source": 0 }, + { "begin": 10126, "end": 10421, "name": "POP", "source": 0 }, + { + "begin": 10126, + "end": 10421, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "tag", "source": 0, "value": "127" }, - { "begin": 8799, "end": 8952, "name": "JUMPDEST", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "JUMPDEST", "source": 0 }, { - "begin": 8871, - "end": 8875, + "begin": 8537, + "end": 8541, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8902, "end": 8917, "name": "DUP1", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "DUP1", "source": 0 }, { - "begin": 8902, - "end": 8917, + "begin": 8564, + "end": 8579, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8902, "end": 8917, "name": "SWAP1", "source": 0 }, - { "begin": 8902, "end": 8917, "name": "SLOAD", "source": 0 }, - { "begin": 8902, "end": 8917, "name": "SWAP1", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "SWAP1", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "SLOAD", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "SWAP1", "source": 0 }, { - "begin": 8902, - "end": 8917, + "begin": 8564, + "end": 8579, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 8902, "end": 8917, "name": "EXP", "source": 0 }, - { "begin": 8902, "end": 8917, "name": "SWAP1", "source": 0 }, - { "begin": 8902, "end": 8917, "name": "DIV", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "EXP", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "SWAP1", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "DIV", "source": 0 }, { - "begin": 8902, - "end": 8917, + "begin": 8564, + "end": 8579, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8902, "end": 8917, "name": "AND", "source": 0 }, + { "begin": 8564, "end": 8579, "name": "AND", "source": 0 }, { - "begin": 8902, - "end": 8926, + "begin": 8564, + "end": 8588, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8902, "end": 8926, "name": "AND", "source": 0 }, + { "begin": 8564, "end": 8588, "name": "AND", "source": 0 }, { - "begin": 8902, - "end": 8926, + "begin": 8564, + "end": 8588, "name": "PUSH", "source": 0, "value": "A9059CBB" }, - { "begin": 8927, "end": 8929, "name": "DUP5", "source": 0 }, - { "begin": 8931, "end": 8936, "name": "DUP5", "source": 0 }, + { "begin": 8589, "end": 8591, "name": "DUP5", "source": 0 }, + { "begin": 8593, "end": 8598, "name": "DUP5", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8902, "end": 8937, "name": "MLOAD", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP4", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "MLOAD", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP4", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 8902, "end": 8937, "name": "AND", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "AND", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 8902, "end": 8937, "name": "SHL", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP2", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "MSTORE", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SHL", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP2", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "MSTORE", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8902, "end": 8937, "name": "ADD", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "ADD", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH [tag]", "source": 0, "value": "242" }, - { "begin": 8902, "end": 8937, "name": "SWAP3", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "SWAP2", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "SWAP1", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SWAP3", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SWAP2", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SWAP1", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH [tag]", "source": 0, "value": "169" }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "tag", "source": 0, "value": "242" }, - { "begin": 8902, "end": 8937, "name": "JUMPDEST", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "JUMPDEST", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8902, "end": 8937, "name": "MLOAD", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP1", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP4", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "SUB", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP2", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "MLOAD", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP1", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP4", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SUB", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP2", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8902, "end": 8937, "name": "DUP8", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "GAS", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "CALL", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "ISZERO", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP1", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "ISZERO", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP8", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "GAS", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "CALL", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "ISZERO", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP1", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "ISZERO", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH [tag]", "source": 0, "value": "244" }, - { "begin": 8902, "end": 8937, "name": "JUMPI", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "JUMPI", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8902, "end": 8937, "name": "DUP1", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP1", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8902, "end": 8937, "name": "REVERT", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "REVERT", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "tag", "source": 0, "value": "244" }, - { "begin": 8902, "end": 8937, "name": "JUMPDEST", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "POP", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "POP", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "POP", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "POP", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "JUMPDEST", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "POP", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "POP", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "POP", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "POP", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8902, "end": 8937, "name": "MLOAD", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "MLOAD", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8902, "end": 8937, "name": "NOT", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "NOT", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8902, "end": 8937, "name": "DUP3", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "ADD", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "AND", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP3", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "ADD", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP1", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP3", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "ADD", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "AND", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP3", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "ADD", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP1", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8902, "end": 8937, "name": "MSTORE", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "POP", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "DUP2", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "ADD", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "SWAP1", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "MSTORE", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "POP", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "DUP2", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "ADD", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SWAP1", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH [tag]", "source": 0, "value": "245" }, - { "begin": 8902, "end": 8937, "name": "SWAP2", "source": 0 }, - { "begin": 8902, "end": 8937, "name": "SWAP1", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SWAP2", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "SWAP1", "source": 0 }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8902, - "end": 8937, + "begin": 8564, + "end": 8599, "name": "tag", "source": 0, "value": "245" }, - { "begin": 8902, "end": 8937, "name": "JUMPDEST", "source": 0 }, - { "begin": 8895, "end": 8937, "name": "SWAP1", "source": 0 }, - { "begin": 8895, "end": 8937, "name": "POP", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SWAP3", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "SWAP2", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "POP", "source": 0 }, - { "begin": 8799, "end": 8952, "name": "POP", "source": 0 }, + { "begin": 8564, "end": 8599, "name": "JUMPDEST", "source": 0 }, + { "begin": 8557, "end": 8599, "name": "SWAP1", "source": 0 }, + { "begin": 8557, "end": 8599, "name": "POP", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP3", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "SWAP2", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "POP", "source": 0 }, + { "begin": 8441, "end": 8606, "name": "POP", "source": 0 }, { - "begin": 8799, - "end": 8952, + "begin": 8441, + "end": 8606, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "tag", "source": 0, "value": "131" }, - { "begin": 10459, "end": 10590, "name": "JUMPDEST", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "JUMPDEST", "source": 0 }, { - "begin": 10512, - "end": 10516, + "begin": 10058, + "end": 10062, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10543, "end": 10558, "name": "DUP1", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "DUP1", "source": 0 }, { - "begin": 10543, - "end": 10558, + "begin": 10081, + "end": 10096, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10543, "end": 10558, "name": "SWAP1", "source": 0 }, - { "begin": 10543, "end": 10558, "name": "SLOAD", "source": 0 }, - { "begin": 10543, "end": 10558, "name": "SWAP1", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "SWAP1", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "SLOAD", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "SWAP1", "source": 0 }, { - "begin": 10543, - "end": 10558, + "begin": 10081, + "end": 10096, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 10543, "end": 10558, "name": "EXP", "source": 0 }, - { "begin": 10543, "end": 10558, "name": "SWAP1", "source": 0 }, - { "begin": 10543, "end": 10558, "name": "DIV", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "EXP", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "SWAP1", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "DIV", "source": 0 }, { - "begin": 10543, - "end": 10558, + "begin": 10081, + "end": 10096, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10543, "end": 10558, "name": "AND", "source": 0 }, + { "begin": 10081, "end": 10096, "name": "AND", "source": 0 }, { - "begin": 10543, - "end": 10573, + "begin": 10081, + "end": 10111, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10543, "end": 10573, "name": "AND", "source": 0 }, + { "begin": 10081, "end": 10111, "name": "AND", "source": 0 }, { - "begin": 10543, - "end": 10573, + "begin": 10081, + "end": 10111, "name": "PUSH", "source": 0, "value": "D3BA4B9E" }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10543, "end": 10575, "name": "MLOAD", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP2", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "MLOAD", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP2", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 10543, "end": 10575, "name": "AND", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "AND", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 10543, "end": 10575, "name": "SHL", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP2", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "MSTORE", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "SHL", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP2", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "MSTORE", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 10543, "end": 10575, "name": "ADD", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "ADD", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10543, "end": 10575, "name": "MLOAD", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP1", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP4", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "SUB", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP2", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "MLOAD", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP1", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP4", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "SUB", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP2", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10543, "end": 10575, "name": "DUP8", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "GAS", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "CALL", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "ISZERO", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP1", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "ISZERO", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP8", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "GAS", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "CALL", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "ISZERO", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP1", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "ISZERO", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH [tag]", "source": 0, "value": "248" }, - { "begin": 10543, "end": 10575, "name": "JUMPI", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "JUMPI", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10543, "end": 10575, "name": "DUP1", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP1", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10543, "end": 10575, "name": "REVERT", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "REVERT", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "tag", "source": 0, "value": "248" }, - { "begin": 10543, "end": 10575, "name": "JUMPDEST", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "POP", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "POP", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "POP", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "POP", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "JUMPDEST", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "POP", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "POP", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "POP", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "POP", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10543, "end": 10575, "name": "MLOAD", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "MLOAD", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 10543, "end": 10575, "name": "NOT", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "NOT", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 10543, "end": 10575, "name": "DUP3", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "ADD", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "AND", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP3", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "ADD", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP1", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP3", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "ADD", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "AND", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP3", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "ADD", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP1", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10543, "end": 10575, "name": "MSTORE", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "POP", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "DUP2", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "ADD", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "SWAP1", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "MSTORE", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "POP", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "DUP2", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "ADD", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "SWAP1", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH [tag]", "source": 0, "value": "249" }, - { "begin": 10543, "end": 10575, "name": "SWAP2", "source": 0 }, - { "begin": 10543, "end": 10575, "name": "SWAP1", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "SWAP2", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "SWAP1", "source": 0 }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10543, - "end": 10575, + "begin": 10081, + "end": 10113, "name": "tag", "source": 0, "value": "249" }, - { "begin": 10543, "end": 10575, "name": "JUMPDEST", "source": 0 }, - { "begin": 10536, "end": 10575, "name": "SWAP1", "source": 0 }, - { "begin": 10536, "end": 10575, "name": "POP", "source": 0 }, - { "begin": 10459, "end": 10590, "name": "SWAP1", "source": 0 }, + { "begin": 10081, "end": 10113, "name": "JUMPDEST", "source": 0 }, + { "begin": 10074, "end": 10113, "name": "SWAP1", "source": 0 }, + { "begin": 10074, "end": 10113, "name": "POP", "source": 0 }, + { "begin": 10005, "end": 10120, "name": "SWAP1", "source": 0 }, { - "begin": 10459, - "end": 10590, + "begin": 10005, + "end": 10120, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "tag", "source": 0, "value": "137" }, - { "begin": 8567, "end": 8785, "name": "JUMPDEST", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "JUMPDEST", "source": 0 }, { - "begin": 8696, - "end": 8703, + "begin": 8357, + "end": 8364, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8729, "end": 8744, "name": "DUP1", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "DUP1", "source": 0 }, { - "begin": 8729, - "end": 8744, + "begin": 8387, + "end": 8402, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8729, "end": 8744, "name": "SWAP1", "source": 0 }, - { "begin": 8729, "end": 8744, "name": "SLOAD", "source": 0 }, - { "begin": 8729, "end": 8744, "name": "SWAP1", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "SWAP1", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "SLOAD", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "SWAP1", "source": 0 }, { - "begin": 8729, - "end": 8744, + "begin": 8387, + "end": 8402, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 8729, "end": 8744, "name": "EXP", "source": 0 }, - { "begin": 8729, "end": 8744, "name": "SWAP1", "source": 0 }, - { "begin": 8729, "end": 8744, "name": "DIV", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "EXP", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "SWAP1", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "DIV", "source": 0 }, { - "begin": 8729, - "end": 8744, + "begin": 8387, + "end": 8402, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8729, "end": 8744, "name": "AND", "source": 0 }, + { "begin": 8387, "end": 8402, "name": "AND", "source": 0 }, { - "begin": 8729, - "end": 8754, + "begin": 8387, + "end": 8412, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8729, "end": 8754, "name": "AND", "source": 0 }, + { "begin": 8387, "end": 8412, "name": "AND", "source": 0 }, { - "begin": 8729, - "end": 8754, + "begin": 8387, + "end": 8412, "name": "PUSH", "source": 0, "value": "DD62ED3E" }, - { "begin": 8755, "end": 8760, "name": "DUP5", "source": 0 }, - { "begin": 8762, "end": 8769, "name": "DUP5", "source": 0 }, + { "begin": 8413, "end": 8418, "name": "DUP5", "source": 0 }, + { "begin": 8420, "end": 8427, "name": "DUP5", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8729, "end": 8770, "name": "MLOAD", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP4", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "MLOAD", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP4", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 8729, "end": 8770, "name": "AND", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "AND", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 8729, "end": 8770, "name": "SHL", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP2", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "MSTORE", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SHL", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP2", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "MSTORE", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 8729, "end": 8770, "name": "ADD", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "ADD", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH [tag]", "source": 0, "value": "251" }, - { "begin": 8729, "end": 8770, "name": "SWAP3", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "SWAP2", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "SWAP1", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SWAP3", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SWAP2", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SWAP1", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH [tag]", "source": 0, "value": "252" }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "tag", "source": 0, "value": "251" }, - { "begin": 8729, "end": 8770, "name": "JUMPDEST", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "JUMPDEST", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8729, "end": 8770, "name": "MLOAD", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP1", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP4", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "SUB", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP2", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP7", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "GAS", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "STATICCALL", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "ISZERO", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP1", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "ISZERO", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "MLOAD", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP1", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP4", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SUB", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP2", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP7", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "GAS", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "STATICCALL", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "ISZERO", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP1", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "ISZERO", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH [tag]", "source": 0, "value": "254" }, - { "begin": 8729, "end": 8770, "name": "JUMPI", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "JUMPI", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8729, "end": 8770, "name": "DUP1", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP1", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 8729, "end": 8770, "name": "REVERT", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "REVERT", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "tag", "source": 0, "value": "254" }, - { "begin": 8729, "end": 8770, "name": "JUMPDEST", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "POP", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "POP", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "POP", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "POP", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "JUMPDEST", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "POP", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "POP", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "POP", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "POP", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8729, "end": 8770, "name": "MLOAD", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "MLOAD", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8729, "end": 8770, "name": "NOT", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "NOT", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 8729, "end": 8770, "name": "DUP3", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "ADD", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "AND", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP3", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "ADD", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP1", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP3", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "ADD", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "AND", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP3", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "ADD", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP1", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 8729, "end": 8770, "name": "MSTORE", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "POP", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "DUP2", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "ADD", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "SWAP1", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "MSTORE", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "POP", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "DUP2", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "ADD", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SWAP1", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH [tag]", "source": 0, "value": "255" }, - { "begin": 8729, "end": 8770, "name": "SWAP2", "source": 0 }, - { "begin": 8729, "end": 8770, "name": "SWAP1", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SWAP2", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "SWAP1", "source": 0 }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "PUSH [tag]", "source": 0, "value": "178" }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 8729, - "end": 8770, + "begin": 8387, + "end": 8428, "name": "tag", "source": 0, "value": "255" }, - { "begin": 8729, "end": 8770, "name": "JUMPDEST", "source": 0 }, - { "begin": 8722, "end": 8770, "name": "SWAP1", "source": 0 }, - { "begin": 8722, "end": 8770, "name": "POP", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SWAP3", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "SWAP2", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "POP", "source": 0 }, - { "begin": 8567, "end": 8785, "name": "POP", "source": 0 }, + { "begin": 8387, "end": 8428, "name": "JUMPDEST", "source": 0 }, + { "begin": 8380, "end": 8428, "name": "SWAP1", "source": 0 }, + { "begin": 8380, "end": 8428, "name": "POP", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP3", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "SWAP2", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "POP", "source": 0 }, + { "begin": 8242, "end": 8435, "name": "POP", "source": 0 }, { - "begin": 8567, - "end": 8785, + "begin": 8242, + "end": 8435, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "tag", "source": 0, "value": "143" }, - { "begin": 10236, "end": 10445, "name": "JUMPDEST", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "JUMPDEST", "source": 0 }, { - "begin": 10347, - "end": 10351, + "begin": 9917, + "end": 9921, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10378, "end": 10393, "name": "DUP1", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "DUP1", "source": 0 }, { - "begin": 10378, - "end": 10393, + "begin": 9940, + "end": 9955, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10378, "end": 10393, "name": "SWAP1", "source": 0 }, - { "begin": 10378, "end": 10393, "name": "SLOAD", "source": 0 }, - { "begin": 10378, "end": 10393, "name": "SWAP1", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "SWAP1", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "SLOAD", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "SWAP1", "source": 0 }, { - "begin": 10378, - "end": 10393, + "begin": 9940, + "end": 9955, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 10378, "end": 10393, "name": "EXP", "source": 0 }, - { "begin": 10378, "end": 10393, "name": "SWAP1", "source": 0 }, - { "begin": 10378, "end": 10393, "name": "DIV", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "EXP", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "SWAP1", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "DIV", "source": 0 }, { - "begin": 10378, - "end": 10393, + "begin": 9940, + "end": 9955, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10378, "end": 10393, "name": "AND", "source": 0 }, + { "begin": 9940, "end": 9955, "name": "AND", "source": 0 }, { - "begin": 10378, - "end": 10406, + "begin": 9940, + "end": 9968, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10378, "end": 10406, "name": "AND", "source": 0 }, + { "begin": 9940, "end": 9968, "name": "AND", "source": 0 }, { - "begin": 10378, - "end": 10406, + "begin": 9940, + "end": 9968, "name": "PUSH", "source": 0, "value": "EE5DC1E4" }, - { "begin": 10407, "end": 10411, "name": "DUP8", "source": 0 }, - { "begin": 10407, "end": 10411, "name": "DUP8", "source": 0 }, - { "begin": 10413, "end": 10419, "name": "DUP8", "source": 0 }, - { "begin": 10413, "end": 10419, "name": "DUP8", "source": 0 }, - { "begin": 10421, "end": 10429, "name": "DUP8", "source": 0 }, + { "begin": 9969, "end": 9973, "name": "DUP8", "source": 0 }, + { "begin": 9969, "end": 9973, "name": "DUP8", "source": 0 }, + { "begin": 9975, "end": 9981, "name": "DUP8", "source": 0 }, + { "begin": 9975, "end": 9981, "name": "DUP8", "source": 0 }, + { "begin": 9983, "end": 9991, "name": "DUP8", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10378, "end": 10430, "name": "MLOAD", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP7", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "MLOAD", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP7", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 10378, "end": 10430, "name": "AND", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "AND", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 10378, "end": 10430, "name": "SHL", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP2", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "MSTORE", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SHL", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP2", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "MSTORE", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 10378, "end": 10430, "name": "ADD", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "ADD", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH [tag]", "source": 0, "value": "257" }, - { "begin": 10378, "end": 10430, "name": "SWAP6", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SWAP5", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SWAP4", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SWAP3", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SWAP2", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SWAP1", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP6", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP5", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP4", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP3", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP2", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP1", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH [tag]", "source": 0, "value": "258" }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "tag", "source": 0, "value": "257" }, - { "begin": 10378, "end": 10430, "name": "JUMPDEST", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "JUMPDEST", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10378, "end": 10430, "name": "MLOAD", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP1", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP4", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SUB", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP2", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "MLOAD", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP1", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP4", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SUB", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP2", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10378, "end": 10430, "name": "DUP8", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "GAS", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "CALL", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "ISZERO", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP1", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "ISZERO", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP8", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "GAS", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "CALL", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "ISZERO", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP1", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "ISZERO", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH [tag]", "source": 0, "value": "260" }, - { "begin": 10378, "end": 10430, "name": "JUMPI", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "JUMPI", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10378, "end": 10430, "name": "DUP1", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP1", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10378, "end": 10430, "name": "REVERT", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "REVERT", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "tag", "source": 0, "value": "260" }, - { "begin": 10378, "end": 10430, "name": "JUMPDEST", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "POP", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "POP", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "POP", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "POP", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "JUMPDEST", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "POP", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "POP", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "POP", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "POP", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10378, "end": 10430, "name": "MLOAD", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "MLOAD", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 10378, "end": 10430, "name": "NOT", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "NOT", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 10378, "end": 10430, "name": "DUP3", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "ADD", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "AND", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP3", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "ADD", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP1", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP3", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "ADD", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "AND", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP3", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "ADD", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP1", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10378, "end": 10430, "name": "MSTORE", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "POP", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "DUP2", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "ADD", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SWAP1", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "MSTORE", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "POP", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "DUP2", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "ADD", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP1", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH [tag]", "source": 0, "value": "261" }, - { "begin": 10378, "end": 10430, "name": "SWAP2", "source": 0 }, - { "begin": 10378, "end": 10430, "name": "SWAP1", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP2", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "SWAP1", "source": 0 }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10378, - "end": 10430, + "begin": 9940, + "end": 9992, "name": "tag", "source": 0, "value": "261" }, - { "begin": 10378, "end": 10430, "name": "JUMPDEST", "source": 0 }, - { "begin": 10371, "end": 10430, "name": "SWAP1", "source": 0 }, - { "begin": 10371, "end": 10430, "name": "POP", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SWAP6", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "SWAP5", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "POP", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "POP", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "POP", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "POP", "source": 0 }, - { "begin": 10236, "end": 10445, "name": "POP", "source": 0 }, + { "begin": 9940, "end": 9992, "name": "JUMPDEST", "source": 0 }, + { "begin": 9933, "end": 9992, "name": "SWAP1", "source": 0 }, + { "begin": 9933, "end": 9992, "name": "POP", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP6", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "SWAP5", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "POP", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "POP", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "POP", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "POP", "source": 0 }, + { "begin": 9776, "end": 9999, "name": "POP", "source": 0 }, { - "begin": 10236, - "end": 10445, + "begin": 9776, + "end": 9999, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "tag", "source": 0, "value": "148" }, - { "begin": 9864, "end": 10021, "name": "JUMPDEST", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "JUMPDEST", "source": 0 }, { - "begin": 9934, - "end": 9938, + "begin": 9488, + "end": 9492, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9965, "end": 9980, "name": "DUP1", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "DUP1", "source": 0 }, { - "begin": 9965, - "end": 9980, + "begin": 9515, + "end": 9530, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9965, "end": 9980, "name": "SWAP1", "source": 0 }, - { "begin": 9965, "end": 9980, "name": "SLOAD", "source": 0 }, - { "begin": 9965, "end": 9980, "name": "SWAP1", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "SWAP1", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "SLOAD", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "SWAP1", "source": 0 }, { - "begin": 9965, - "end": 9980, + "begin": 9515, + "end": 9530, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 9965, "end": 9980, "name": "EXP", "source": 0 }, - { "begin": 9965, "end": 9980, "name": "SWAP1", "source": 0 }, - { "begin": 9965, "end": 9980, "name": "DIV", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "EXP", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "SWAP1", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "DIV", "source": 0 }, { - "begin": 9965, - "end": 9980, + "begin": 9515, + "end": 9530, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9965, "end": 9980, "name": "AND", "source": 0 }, + { "begin": 9515, "end": 9530, "name": "AND", "source": 0 }, { - "begin": 9965, - "end": 9999, + "begin": 9515, + "end": 9549, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 9965, "end": 9999, "name": "AND", "source": 0 }, + { "begin": 9515, "end": 9549, "name": "AND", "source": 0 }, { - "begin": 9965, - "end": 9999, + "begin": 9515, + "end": 9549, "name": "PUSH", "source": 0, "value": "F0350C04" }, - { "begin": 10000, "end": 10005, "name": "DUP4", "source": 0 }, + { "begin": 9550, "end": 9555, "name": "DUP4", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9965, "end": 10006, "name": "MLOAD", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP3", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "MLOAD", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP3", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 9965, "end": 10006, "name": "AND", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "AND", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 9965, "end": 10006, "name": "SHL", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP2", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "MSTORE", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "SHL", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP2", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "MSTORE", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 9965, "end": 10006, "name": "ADD", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "ADD", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH [tag]", "source": 0, "value": "263" }, - { "begin": 9965, "end": 10006, "name": "SWAP2", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "SWAP1", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "SWAP2", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "SWAP1", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "tag", "source": 0, "value": "263" }, - { "begin": 9965, "end": 10006, "name": "JUMPDEST", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "JUMPDEST", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9965, "end": 10006, "name": "MLOAD", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP1", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP4", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "SUB", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP2", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "MLOAD", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP1", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP4", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "SUB", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP2", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9965, "end": 10006, "name": "DUP8", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "GAS", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "CALL", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "ISZERO", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP1", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "ISZERO", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP8", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "GAS", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "CALL", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "ISZERO", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP1", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "ISZERO", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH [tag]", "source": 0, "value": "265" }, - { "begin": 9965, "end": 10006, "name": "JUMPI", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "JUMPI", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9965, "end": 10006, "name": "DUP1", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP1", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 9965, "end": 10006, "name": "REVERT", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "REVERT", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "tag", "source": 0, "value": "265" }, - { "begin": 9965, "end": 10006, "name": "JUMPDEST", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "POP", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "POP", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "POP", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "POP", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "JUMPDEST", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "POP", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "POP", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "POP", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "POP", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9965, "end": 10006, "name": "MLOAD", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "MLOAD", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9965, "end": 10006, "name": "NOT", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "NOT", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 9965, "end": 10006, "name": "DUP3", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "ADD", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "AND", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP3", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "ADD", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP1", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP3", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "ADD", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "AND", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP3", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "ADD", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP1", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 9965, "end": 10006, "name": "MSTORE", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "POP", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "DUP2", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "ADD", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "SWAP1", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "MSTORE", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "POP", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "DUP2", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "ADD", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "SWAP1", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH [tag]", "source": 0, "value": "266" }, - { "begin": 9965, "end": 10006, "name": "SWAP2", "source": 0 }, - { "begin": 9965, "end": 10006, "name": "SWAP1", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "SWAP2", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "SWAP1", "source": 0 }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 9965, - "end": 10006, + "begin": 9515, + "end": 9556, "name": "tag", "source": 0, "value": "266" }, - { "begin": 9965, "end": 10006, "name": "JUMPDEST", "source": 0 }, - { "begin": 9958, "end": 10006, "name": "SWAP1", "source": 0 }, - { "begin": 9958, "end": 10006, "name": "POP", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SWAP2", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "SWAP1", "source": 0 }, - { "begin": 9864, "end": 10021, "name": "POP", "source": 0 }, + { "begin": 9515, "end": 9556, "name": "JUMPDEST", "source": 0 }, + { "begin": 9508, "end": 9556, "name": "SWAP1", "source": 0 }, + { "begin": 9508, "end": 9556, "name": "POP", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP2", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "SWAP1", "source": 0 }, + { "begin": 9394, "end": 9563, "name": "POP", "source": 0 }, { - "begin": 9864, - "end": 10021, + "begin": 9394, + "end": 9563, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 11099, - "end": 11393, + "begin": 10606, + "end": 10909, "name": "tag", "source": 0, "value": "153" }, - { "begin": 11099, "end": 11393, "name": "JUMPDEST", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "JUMPDEST", "source": 0 }, { - "begin": 11175, - "end": 11179, + "begin": 10698, + "end": 10702, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11196, "end": 11207, "name": "DUP1", "source": 0 }, + { "begin": 10719, "end": 10730, "name": "DUP1", "source": 0 }, { - "begin": 11209, - "end": 11226, + "begin": 10732, + "end": 10749, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 11230, - "end": 11252, + "begin": 10753, + "end": 10775, "name": "PUSH", "source": 0, "value": "1" }, { - "begin": 11230, - "end": 11252, + "begin": 10753, + "end": 10775, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11230, "end": 11252, "name": "SWAP1", "source": 0 }, - { "begin": 11230, "end": 11252, "name": "SLOAD", "source": 0 }, - { "begin": 11230, "end": 11252, "name": "SWAP1", "source": 0 }, + { "begin": 10753, "end": 10775, "name": "SWAP1", "source": 0 }, + { "begin": 10753, "end": 10775, "name": "SLOAD", "source": 0 }, + { "begin": 10753, "end": 10775, "name": "SWAP1", "source": 0 }, { - "begin": 11230, - "end": 11252, + "begin": 10753, + "end": 10775, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 11230, "end": 11252, "name": "EXP", "source": 0 }, - { "begin": 11230, "end": 11252, "name": "SWAP1", "source": 0 }, - { "begin": 11230, "end": 11252, "name": "DIV", "source": 0 }, + { "begin": 10753, "end": 10775, "name": "EXP", "source": 0 }, + { "begin": 10753, "end": 10775, "name": "SWAP1", "source": 0 }, + { "begin": 10753, "end": 10775, "name": "DIV", "source": 0 }, { - "begin": 11230, - "end": 11252, + "begin": 10753, + "end": 10775, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11230, "end": 11252, "name": "AND", "source": 0 }, + { "begin": 10753, "end": 10775, "name": "AND", "source": 0 }, { - "begin": 11230, - "end": 11265, + "begin": 10753, + "end": 10788, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11230, "end": 11265, "name": "AND", "source": 0 }, - { "begin": 11335, "end": 11342, "name": "DUP6", "source": 0 }, - { "begin": 11344, "end": 11349, "name": "DUP6", "source": 0 }, + { "begin": 10753, "end": 10788, "name": "AND", "source": 0 }, + { "begin": 10854, "end": 10861, "name": "DUP6", "source": 0 }, + { "begin": 10863, "end": 10868, "name": "DUP6", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11283, "end": 11350, "name": "MLOAD", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "MLOAD", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "24" }, - { "begin": 11283, "end": 11350, "name": "ADD", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "ADD", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH [tag]", "source": 0, "value": "268" }, - { "begin": 11283, "end": 11350, "name": "SWAP3", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "SWAP2", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "SWAP1", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "SWAP3", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "SWAP2", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "SWAP1", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH [tag]", "source": 0, "value": "169" }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "tag", "source": 0, "value": "268" }, - { "begin": 11283, "end": 11350, "name": "JUMPDEST", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "JUMPDEST", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11283, "end": 11350, "name": "MLOAD", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "MLOAD", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 11283, "end": 11350, "name": "DUP2", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "DUP4", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "SUB", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "SUB", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "DUP2", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "MSTORE", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "SWAP1", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP2", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP4", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "SUB", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "SUB", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP2", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "MSTORE", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "SWAP1", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11283, "end": 11350, "name": "MSTORE", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "MSTORE", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "95EA7B300000000000000000000000000000000000000000000000000000000" }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11283, "end": 11350, "name": "NOT", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "AND", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "NOT", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "AND", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 11283, "end": 11350, "name": "DUP3", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "ADD", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "DUP1", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "MLOAD", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP3", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "ADD", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP1", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "MLOAD", "source": 0 }, { - "begin": 11283, - "end": 11350, + "begin": 10802, + "end": 10869, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 11283, "end": 11350, "name": "DUP4", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "DUP2", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "DUP4", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "AND", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "OR", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "DUP4", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "MSTORE", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "POP", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "POP", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "POP", "source": 0 }, - { "begin": 11283, "end": 11350, "name": "POP", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP4", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP2", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP4", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "AND", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "OR", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "DUP4", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "MSTORE", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "POP", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "POP", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "POP", "source": 0 }, + { "begin": 10802, "end": 10869, "name": "POP", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11230, "end": 11351, "name": "MLOAD", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "MLOAD", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH [tag]", "source": 0, "value": "269" }, - { "begin": 11230, "end": 11351, "name": "SWAP2", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "SWAP1", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "SWAP2", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "SWAP1", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH [tag]", "source": 0, "value": "216" }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "tag", "source": 0, "value": "269" }, - { "begin": 11230, "end": 11351, "name": "JUMPDEST", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "JUMPDEST", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11230, "end": 11351, "name": "MLOAD", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "DUP1", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "DUP4", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "SUB", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "DUP2", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "DUP6", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "GAS", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "MLOAD", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP1", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP4", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "SUB", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP2", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP6", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "GAS", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "DELEGATECALL", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "SWAP2", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "POP", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "POP", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "SWAP2", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "POP", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "POP", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "DUP1", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP1", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 11230, "end": 11351, "name": "DUP2", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "EQ", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP2", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "EQ", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH [tag]", "source": 0, "value": "272" }, - { "begin": 11230, "end": 11351, "name": "JUMPI", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "JUMPI", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11230, "end": 11351, "name": "MLOAD", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "SWAP2", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "POP", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "MLOAD", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "SWAP2", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "POP", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 11230, "end": 11351, "name": "NOT", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "NOT", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "ADD", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "AND", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "DUP3", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "ADD", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "ADD", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "AND", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP3", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "ADD", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 11230, "end": 11351, "name": "MSTORE", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "MSTORE", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "DUP3", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "MSTORE", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP3", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "MSTORE", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 11230, "end": 11351, "name": "DUP5", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "ADD", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "DUP5", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "ADD", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH [tag]", "source": 0, "value": "271" }, - { "begin": 11230, "end": 11351, "name": "JUMP", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "JUMP", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "tag", "source": 0, "value": "272" }, - { "begin": 11230, "end": 11351, "name": "JUMPDEST", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "JUMPDEST", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 11230, "end": 11351, "name": "SWAP2", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "POP", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "SWAP2", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "POP", "source": 0 }, { - "begin": 11230, - "end": 11351, + "begin": 10753, + "end": 10879, "name": "tag", "source": 0, "value": "271" }, - { "begin": 11230, "end": 11351, "name": "JUMPDEST", "source": 0 }, - { "begin": 11230, "end": 11351, "name": "POP", "source": 0 }, - { "begin": 11195, "end": 11351, "name": "SWAP2", "source": 0 }, - { "begin": 11195, "end": 11351, "name": "POP", "source": 0 }, - { "begin": 11195, "end": 11351, "name": "SWAP2", "source": 0 }, - { "begin": 11195, "end": 11351, "name": "POP", "source": 0 }, - { "begin": 11372, "end": 11378, "name": "DUP2", "source": 0 }, - { "begin": 11365, "end": 11378, "name": "SWAP3", "source": 0 }, - { "begin": 11365, "end": 11378, "name": "POP", "source": 0 }, - { "begin": 11365, "end": 11378, "name": "POP", "source": 0 }, - { "begin": 11365, "end": 11378, "name": "POP", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SWAP3", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "SWAP2", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "POP", "source": 0 }, - { "begin": 11099, "end": 11393, "name": "POP", "source": 0 }, - { - "begin": 11099, - "end": 11393, + { "begin": 10753, "end": 10879, "name": "JUMPDEST", "source": 0 }, + { "begin": 10753, "end": 10879, "name": "POP", "source": 0 }, + { "begin": 10718, "end": 10879, "name": "SWAP2", "source": 0 }, + { "begin": 10718, "end": 10879, "name": "POP", "source": 0 }, + { "begin": 10718, "end": 10879, "name": "SWAP2", "source": 0 }, + { "begin": 10718, "end": 10879, "name": "POP", "source": 0 }, + { "begin": 10896, "end": 10902, "name": "DUP2", "source": 0 }, + { "begin": 10889, "end": 10902, "name": "SWAP3", "source": 0 }, + { "begin": 10889, "end": 10902, "name": "POP", "source": 0 }, + { "begin": 10889, "end": 10902, "name": "POP", "source": 0 }, + { "begin": 10889, "end": 10902, "name": "POP", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP3", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "SWAP2", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "POP", "source": 0 }, + { "begin": 10606, "end": 10909, "name": "POP", "source": 0 }, + { + "begin": 10606, + "end": 10909, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "tag", "source": 0, "value": "159" }, - { "begin": 10035, "end": 10222, "name": "JUMPDEST", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "JUMPDEST", "source": 0 }, { - "begin": 10128, - "end": 10132, + "begin": 9692, + "end": 9696, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10159, "end": 10174, "name": "DUP1", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "DUP1", "source": 0 }, { - "begin": 10159, - "end": 10174, + "begin": 9715, + "end": 9730, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10159, "end": 10174, "name": "SWAP1", "source": 0 }, - { "begin": 10159, "end": 10174, "name": "SLOAD", "source": 0 }, - { "begin": 10159, "end": 10174, "name": "SWAP1", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "SWAP1", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "SLOAD", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "SWAP1", "source": 0 }, { - "begin": 10159, - "end": 10174, + "begin": 9715, + "end": 9730, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 10159, "end": 10174, "name": "EXP", "source": 0 }, - { "begin": 10159, "end": 10174, "name": "SWAP1", "source": 0 }, - { "begin": 10159, "end": 10174, "name": "DIV", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "EXP", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "SWAP1", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "DIV", "source": 0 }, { - "begin": 10159, - "end": 10174, + "begin": 9715, + "end": 9730, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10159, "end": 10174, "name": "AND", "source": 0 }, + { "begin": 9715, "end": 9730, "name": "AND", "source": 0 }, { - "begin": 10159, - "end": 10183, + "begin": 9715, + "end": 9739, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 10159, "end": 10183, "name": "AND", "source": 0 }, + { "begin": 9715, "end": 9739, "name": "AND", "source": 0 }, { - "begin": 10159, - "end": 10183, + "begin": 9715, + "end": 9739, "name": "PUSH", "source": 0, "value": "F8BF8E95" }, - { "begin": 10184, "end": 10190, "name": "DUP6", "source": 0 }, - { "begin": 10192, "end": 10197, "name": "DUP6", "source": 0 }, - { "begin": 10199, "end": 10206, "name": "DUP6", "source": 0 }, + { "begin": 9740, "end": 9746, "name": "DUP6", "source": 0 }, + { "begin": 9748, "end": 9753, "name": "DUP6", "source": 0 }, + { "begin": 9755, "end": 9762, "name": "DUP6", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10159, "end": 10207, "name": "MLOAD", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP5", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "MLOAD", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP5", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 10159, "end": 10207, "name": "AND", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "AND", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 10159, "end": 10207, "name": "SHL", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP2", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "MSTORE", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SHL", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP2", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "MSTORE", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 10159, "end": 10207, "name": "ADD", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "ADD", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH [tag]", "source": 0, "value": "274" }, - { "begin": 10159, "end": 10207, "name": "SWAP4", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "SWAP3", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "SWAP2", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "SWAP1", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SWAP4", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SWAP3", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SWAP2", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SWAP1", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH [tag]", "source": 0, "value": "275" }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "tag", "source": 0, "value": "274" }, - { "begin": 10159, "end": 10207, "name": "JUMPDEST", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "JUMPDEST", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "20" }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10159, "end": 10207, "name": "MLOAD", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP1", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP4", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "SUB", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP2", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "MLOAD", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP1", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP4", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SUB", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP2", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10159, "end": 10207, "name": "DUP8", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "GAS", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "CALL", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "ISZERO", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP1", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "ISZERO", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP8", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "GAS", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "CALL", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "ISZERO", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP1", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "ISZERO", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH [tag]", "source": 0, "value": "277" }, - { "begin": 10159, "end": 10207, "name": "JUMPI", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "JUMPI", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10159, "end": 10207, "name": "DUP1", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP1", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 10159, "end": 10207, "name": "REVERT", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "REVERT", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "tag", "source": 0, "value": "277" }, - { "begin": 10159, "end": 10207, "name": "JUMPDEST", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "POP", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "POP", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "POP", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "POP", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "JUMPDEST", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "POP", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "POP", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "POP", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "POP", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10159, "end": 10207, "name": "MLOAD", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "MLOAD", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 10159, "end": 10207, "name": "NOT", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "NOT", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 10159, "end": 10207, "name": "DUP3", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "ADD", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "AND", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP3", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "ADD", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP1", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP3", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "ADD", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "AND", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP3", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "ADD", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP1", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 10159, "end": 10207, "name": "MSTORE", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "POP", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "DUP2", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "ADD", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "SWAP1", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "MSTORE", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "POP", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "DUP2", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "ADD", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SWAP1", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH [tag]", "source": 0, "value": "278" }, - { "begin": 10159, "end": 10207, "name": "SWAP2", "source": 0 }, - { "begin": 10159, "end": 10207, "name": "SWAP1", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SWAP2", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "SWAP1", "source": 0 }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "PUSH [tag]", "source": 0, "value": "173" }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 10159, - "end": 10207, + "begin": 9715, + "end": 9763, "name": "tag", "source": 0, "value": "278" }, - { "begin": 10159, "end": 10207, "name": "JUMPDEST", "source": 0 }, - { "begin": 10152, "end": 10207, "name": "SWAP1", "source": 0 }, - { "begin": 10152, "end": 10207, "name": "POP", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SWAP4", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "SWAP3", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "POP", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "POP", "source": 0 }, - { "begin": 10035, "end": 10222, "name": "POP", "source": 0 }, + { "begin": 9715, "end": 9763, "name": "JUMPDEST", "source": 0 }, + { "begin": 9708, "end": 9763, "name": "SWAP1", "source": 0 }, + { "begin": 9708, "end": 9763, "name": "POP", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP4", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "SWAP3", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "POP", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "POP", "source": 0 }, + { "begin": 9569, "end": 9770, "name": "POP", "source": 0 }, { - "begin": 10035, - "end": 10222, + "begin": 9569, + "end": 9770, "name": "JUMP", "source": 0, "value": "[out]" @@ -27700,7 +27690,7 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clear_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"freeze\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeze_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"get_address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localasseterc20\",\"outputs\":[{\"internalType\":\"contract LocalAssetExtendedErc20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"instance_address\",\"type\":\"address\"}],\"name\":\"set_address_interface\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"set_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"freezer\",\"type\":\"address\"}],\"name\":\"set_team\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thaw_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"transfer_ownership\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"returns\":{\"_0\":\"A uint256 specifying the amount of tokens still available for the spender.\"}},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address. Selector: 70a08231\",\"params\":{\"who\":\"The address to query the balance of.\"},\"returns\":{\"_0\":\"An uint256 representing the amount owned by the passed address.\"}},\"burn(address,uint256)\":{\"details\":\"Burn tokens from an address Selector: 23b872dd\",\"params\":{\"from\":\"address The address from which you want to burn tokens\",\"value\":\"uint256 the amount of tokens to be burnt\"}},\"clear_metadata()\":{\"details\":\"Clear the name, symbol and decimals of your asset Selector: 23b872dd\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token. Selector: 313ce567\"},\"freeze(address)\":{\"details\":\"Freeze an account, preventing it from operating with the asset Selector: 23b872dd\",\"params\":{\"account\":\"address The address that you want to freeze\"}},\"freeze_asset()\":{\"details\":\"Freeze the entire asset operations Selector: 23b872dd\"},\"mint(address,uint256)\":{\"details\":\"Mint tokens to an address Selector: 23b872dd\",\"params\":{\"to\":\"address The address to which you want to mint tokens\",\"value\":\"uint256 the amount of tokens to be minted\"}},\"name()\":{\"details\":\"Returns the name of the token. Selector: 06fdde03\"},\"set_metadata(string,string,uint8)\":{\"details\":\"Specify the name, symbol and decimals of your asset Selector: 23b872dd\",\"params\":{\"decimals\":\"uint8 The number of decimals of your asset\",\"name\":\"string The name of the asset\",\"symbol\":\"string The symbol of the asset\"}},\"set_team(address,address,address)\":{\"details\":\"Specify the issuer, admin and freezer of an asset Selector: 23b872dd\",\"params\":{\"admin\":\"address The address capable of burning tokens and unfreezing accounts/assets\",\"freezer\":\"address The address capable of freezing accounts/asset\",\"issuer\":\"address The address capable of issuing tokens\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token. Selector: 95d89b41\"},\"thaw(address)\":{\"details\":\"Unfreeze an account, letting it from operating againt with the asset Selector: 23b872dd\",\"params\":{\"account\":\"address The address that you want to unfreeze\"}},\"thaw_asset()\":{\"details\":\"Unfreeze the entire asset operations Selector: 23b872dd\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence Selector: 18160ddd\"},\"transfer(address,uint256)\":{\"details\":\"Transfer token for a specified address Selector: a9059cbb\",\"params\":{\"to\":\"The address to transfer to.\",\"value\":\"The amount to be transferred.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another Selector: 23b872dd\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"to\":\"address The address which you want to transfer to\",\"value\":\"uint256 the amount of tokens to be transferred\"}},\"transfer_ownership(address)\":{\"details\":\"Transfer the ownership of an asset to a new account Selector: 23b872dd\",\"params\":{\"owner\":\"address The address of the new owner\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"localasseterc20()\":{\"notice\":\"The ierc20 at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"LocalAssetExtendedErc20Instance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5a3d183a3c7c37f3b13c339567c1f801439d7dcb24e86b42a7c0b7a04d07ffe4\",\"urls\":[\"bzz-raw://91e48fc055f1421fe4a69674c7c21789f7670e77f8079dae0ceebb53ade3bac8\",\"dweb:/ipfs/QmQ3g41AZRKVThWeF2VQ4bXVEb7tkoBLqo494kyAe3RLtt\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clear_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"freeze\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"freeze_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"get_address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localasseterc20\",\"outputs\":[{\"internalType\":\"contract LocalAssetExtendedErc20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"instance_address\",\"type\":\"address\"}],\"name\":\"set_address_interface\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"name\":\"set_metadata\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"issuer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"freezer\",\"type\":\"address\"}],\"name\":\"set_team\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"thaw\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"thaw_asset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer_delegate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"transfer_ownership\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Function to check the amount of tokens that an owner allowed to a spender. Selector: dd62ed3e\",\"params\":{\"owner\":\"address The address which owns the funds.\",\"spender\":\"address The address which will spend the funds.\"},\"returns\":{\"_0\":\"A uint256 specifying the amount of tokens still available for the spender.\"}},\"approve(address,uint256)\":{\"details\":\"Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Selector: 095ea7b3\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"}},\"balanceOf(address)\":{\"details\":\"Gets the balance of the specified address. Selector: 70a08231\",\"params\":{\"who\":\"The address to query the balance of.\"},\"returns\":{\"_0\":\"An uint256 representing the amount owned by the passed address.\"}},\"burn(address,uint256)\":{\"details\":\"Burn tokens from an address Selector: 23b872dd\",\"params\":{\"from\":\"address The address from which you want to burn tokens\",\"value\":\"uint256 the amount of tokens to be burnt\"}},\"clear_metadata()\":{\"details\":\"Clear the name, symbol and decimals of your asset Selector: 23b872dd\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token. Selector: 313ce567\"},\"freeze(address)\":{\"details\":\"Freeze an account, preventing it from operating with the asset Selector: 23b872dd\",\"params\":{\"account\":\"address The address that you want to freeze\"}},\"freeze_asset()\":{\"details\":\"Freeze the entire asset operations Selector: 23b872dd\"},\"mint(address,uint256)\":{\"details\":\"Mint tokens to an address Selector: 23b872dd\",\"params\":{\"to\":\"address The address to which you want to mint tokens\",\"value\":\"uint256 the amount of tokens to be minted\"}},\"name()\":{\"details\":\"Returns the name of the token. Selector: 06fdde03\"},\"set_metadata(string,string,uint8)\":{\"details\":\"Specify the name, symbol and decimals of your asset Selector: 23b872dd\",\"params\":{\"decimals\":\"uint8 The number of decimals of your asset\",\"name\":\"string The name of the asset\",\"symbol\":\"string The symbol of the asset\"}},\"set_team(address,address,address)\":{\"details\":\"Specify the issuer, admin and freezer of an asset Selector: 23b872dd\",\"params\":{\"admin\":\"address The address capable of burning tokens and unfreezing accounts/assets\",\"freezer\":\"address The address capable of freezing accounts/asset\",\"issuer\":\"address The address capable of issuing tokens\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token. Selector: 95d89b41\"},\"thaw(address)\":{\"details\":\"Unfreeze an account, letting it from operating againt with the asset Selector: 23b872dd\",\"params\":{\"account\":\"address The address that you want to unfreeze\"}},\"thaw_asset()\":{\"details\":\"Unfreeze the entire asset operations Selector: 23b872dd\"},\"totalSupply()\":{\"details\":\"Total number of tokens in existence Selector: 18160ddd\"},\"transfer(address,uint256)\":{\"details\":\"Transfer token for a specified address Selector: a9059cbb\",\"params\":{\"to\":\"The address to transfer to.\",\"value\":\"The amount to be transferred.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfer tokens from one address to another Selector: 23b872dd\",\"params\":{\"from\":\"address The address which you want to send tokens from\",\"to\":\"address The address which you want to transfer to\",\"value\":\"uint256 the amount of tokens to be transferred\"}},\"transfer_ownership(address)\":{\"details\":\"Transfer the ownership of an asset to a new account Selector: 23b872dd\",\"params\":{\"owner\":\"address The address of the new owner\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"localasseterc20()\":{\"notice\":\"The ierc20 at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"LocalAssetExtendedErc20Instance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xedc60e9b5258c8785051e078e6d674e34d23ad387908661d11a202589077ad0a\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://4fd727b98108221c925e50872645f30d9292c0120b297fe3982e1135e9cb653d\",\"dweb:/ipfs/Qmb2Jo1g6L6a2tU4MXW1a5cVFfu2CysfKLQeK1E98W5wBJ\"]}},\"version\":1}", "storageLayout": { "storage": [ { @@ -27743,5 +27733,5 @@ "version": 1 } }, - "sourceCode": "\n pragma solidity ^0.8.0;\n\n /**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts\n */\n interface LocalAssetExtendedErc20 {\n \n /**\n * @dev Returns the name of the token.\n * Selector: 06fdde03\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n * Selector: 95d89b41\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n * Selector: 313ce567\n */\n function decimals() external view returns (uint8);\n \n /**\n * @dev Total number of tokens in existence\n * Selector: 18160ddd\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Gets the balance of the specified address.\n * Selector: 70a08231\n * @param who The address to query the balance of.\n * @return An uint256 representing the amount owned by the passed address.\n */\n function balanceOf(address who) external view returns (uint256);\n\n /**\n * @dev Function to check the amount of tokens that an owner allowed to a spender.\n * Selector: dd62ed3e\n * @param owner address The address which owns the funds.\n * @param spender address The address which will spend the funds.\n * @return A uint256 specifying the amount of tokens still available for the spender.\n */\n function allowance(address owner, address spender)\n external view returns (uint256);\n\n /**\n * @dev Transfer token for a specified address\n * Selector: a9059cbb\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens on behalf\n * of msg.sender.\n * Beware that changing an allowance with this method brings the risk that someone may\n * use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to\n * mitigate this race condition is to first reduce the spender's allowance to 0 and set\n * the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * Selector: 095ea7b3\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n */\n function approve(address spender, uint256 value)\n external returns (bool);\n\n /**\n * @dev Transfer tokens from one address to another\n * Selector: 23b872dd\n * @param from address The address which you want to send tokens from\n * @param to address The address which you want to transfer to\n * @param value uint256 the amount of tokens to be transferred\n */\n function transferFrom(address from, address to, uint256 value)\n external returns (bool);\n\n /**\n * @dev Mint tokens to an address\n * Selector: 23b872dd\n * @param to address The address to which you want to mint tokens\n * @param value uint256 the amount of tokens to be minted\n */\n function mint(address to, uint256 value)\n external returns (bool);\n\n /**\n * @dev Burn tokens from an address\n * Selector: 23b872dd\n * @param from address The address from which you want to burn tokens\n * @param value uint256 the amount of tokens to be burnt\n */\n function burn(address from, uint256 value)\n external returns (bool);\n\n /**\n * @dev Freeze an account, preventing it from operating with the asset\n * Selector: 23b872dd\n * @param account address The address that you want to freeze\n */\n function freeze(address account)\n external returns (bool);\n\n /**\n * @dev Unfreeze an account, letting it from operating againt with the asset\n * Selector: 23b872dd\n * @param account address The address that you want to unfreeze\n */\n function thaw(address account)\n external returns (bool);\n\n /**\n * @dev Freeze the entire asset operations\n * Selector: 23b872dd\n */\n function freeze_asset()\n external returns (bool);\n\n /**\n * @dev Unfreeze the entire asset operations\n * Selector: 23b872dd\n */\n function thaw_asset()\n external returns (bool);\n\n /**\n * @dev Transfer the ownership of an asset to a new account\n * Selector: 23b872dd\n * @param owner address The address of the new owner\n */\n function transfer_ownership(address owner)\n external returns (bool);\n \n /**\n * @dev Specify the issuer, admin and freezer of an asset\n * Selector: 23b872dd\n * @param issuer address The address capable of issuing tokens\n * @param admin address The address capable of burning tokens and unfreezing accounts/assets\n * @param freezer address The address capable of freezing accounts/asset\n */\n function set_team(address issuer, address admin, address freezer)\n external returns (bool);\n\n /**\n * @dev Specify the name, symbol and decimals of your asset\n * Selector: 23b872dd\n * @param name string The name of the asset\n * @param symbol string The symbol of the asset\n * @param decimals uint8 The number of decimals of your asset\n */\n function set_metadata(string calldata name, string calldata symbol, uint8 decimals)\n external returns (bool);\n\n /**\n * @dev Clear the name, symbol and decimals of your asset\n * Selector: 23b872dd\n */\n function clear_metadata()\n external returns (bool);\n /**\n * @dev Event emited when a transfer has been performed.\n * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n * @param from address The address sending the tokens\n * @param to address The address receiving the tokens.\n * @param value uint256 The amount of tokens transfered.\n */\n event Transfer(\n address indexed from,\n address indexed to,\n uint256 value\n );\n\n /**\n * @dev Event emited when an approval has been registered.\n * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n * @param owner address Owner of the tokens.\n * @param spender address Allowed spender.\n * @param value uint256 Amount of tokens approved.\n */\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n }\n\n contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {\n\n /// The ierc20 at the known pre-compile address.\n LocalAssetExtendedErc20 public localasseterc20 = LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701);\n address localasseterc20address = 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701;\n\n receive() external payable {\n // React to receiving ether\n }\n\n function set_address_interface(address instance_address) public {\n localasseterc20 = LocalAssetExtendedErc20(instance_address);\n localasseterc20address = instance_address;\n }\n\n function get_address() public view returns(address) {\n return localasseterc20address;\n }\n\n function name() override external view returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.name();\n }\n \n function symbol() override external view returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.symbol();\n }\n \n function decimals() override external view returns (uint8) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.decimals();\n }\n\n function totalSupply() override external view returns (uint256){\n // We nominate our target collator with all the tokens provided\n return localasseterc20.totalSupply();\n }\n \n function balanceOf(address who) override external view returns (uint256){\n // We nominate our target collator with all the tokens provided\n return localasseterc20.balanceOf(who);\n }\n \n function allowance(\n address owner,\n address spender\n ) override external view returns (uint256){\n return localasseterc20.allowance(owner, spender);\n }\n\n function transfer(address to, uint256 value) override external returns (bool) {\n return localasseterc20.transfer(to, value);\n }\n\n function mint(address to, uint256 value) override external returns (bool) {\n return localasseterc20.mint(to, value);\n }\n\n function burn(address from, uint256 value) override external returns (bool) {\n return localasseterc20.burn(from, value);\n }\n\n function freeze(address account) override external returns (bool) {\n return localasseterc20.freeze(account);\n }\n\n function thaw(address account) override external returns (bool) {\n return localasseterc20.thaw(account);\n }\n\n function freeze_asset() override external returns (bool) {\n return localasseterc20.freeze_asset();\n }\n\n function thaw_asset() override external returns (bool) {\n return localasseterc20.thaw_asset();\n }\n\n function transfer_ownership(address owner) override external returns (bool) {\n return localasseterc20.transfer_ownership(owner);\n }\n\n function set_team(address issuer, address admin, address freezer) override external returns (bool) {\n return localasseterc20.set_team(issuer, admin, freezer);\n }\n\n function set_metadata(string calldata name, string calldata symbol, uint8 decimals) override external returns (bool) {\n return localasseterc20.set_metadata(name, symbol, decimals);\n }\n\n function clear_metadata() override external returns (bool) {\n return localasseterc20.clear_metadata();\n }\n \n function transfer_delegate(address to, uint256 value) external returns (bool) {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\"transfer(address,uint256)\", to, value));\n return result;\n }\n \n function approve(address spender, uint256 value) override external returns (bool) {\n return localasseterc20.approve(spender, value);\n }\n\n function approve_delegate(address spender, uint256 value) external returns (bool) {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\"approve(address,uint256)\", spender, value));\n return result;\n }\n \n function transferFrom(\n address from,\n address to,\n uint256 value)\n override external returns (bool) {\n return localasseterc20.transferFrom(from, to, value);\n }\n \n function transferFrom_delegate(\n address from,\n address to,\n uint256 value) external returns (bool) {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\"transferFrom(address,address,uint256)\", from, to, value));\n return result;\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts\n */\ninterface LocalAssetExtendedErc20 {\n /**\n * @dev Returns the name of the token.\n * Selector: 06fdde03\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n * Selector: 95d89b41\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n * Selector: 313ce567\n */\n function decimals() external view returns (uint8);\n\n /**\n * @dev Total number of tokens in existence\n * Selector: 18160ddd\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Gets the balance of the specified address.\n * Selector: 70a08231\n * @param who The address to query the balance of.\n * @return An uint256 representing the amount owned by the passed address.\n */\n function balanceOf(address who) external view returns (uint256);\n\n /**\n * @dev Function to check the amount of tokens that an owner allowed to a spender.\n * Selector: dd62ed3e\n * @param owner address The address which owns the funds.\n * @param spender address The address which will spend the funds.\n * @return A uint256 specifying the amount of tokens still available for the spender.\n */\n function allowance(address owner, address spender)\n external\n view\n returns (uint256);\n\n /**\n * @dev Transfer token for a specified address\n * Selector: a9059cbb\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens on behalf\n * of msg.sender.\n * Beware that changing an allowance with this method brings the risk that someone may\n * use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to\n * mitigate this race condition is to first reduce the spender's allowance to 0 and set\n * the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * Selector: 095ea7b3\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Transfer tokens from one address to another\n * Selector: 23b872dd\n * @param from address The address which you want to send tokens from\n * @param to address The address which you want to transfer to\n * @param value uint256 the amount of tokens to be transferred\n */\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n /**\n * @dev Mint tokens to an address\n * Selector: 23b872dd\n * @param to address The address to which you want to mint tokens\n * @param value uint256 the amount of tokens to be minted\n */\n function mint(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Burn tokens from an address\n * Selector: 23b872dd\n * @param from address The address from which you want to burn tokens\n * @param value uint256 the amount of tokens to be burnt\n */\n function burn(address from, uint256 value) external returns (bool);\n\n /**\n * @dev Freeze an account, preventing it from operating with the asset\n * Selector: 23b872dd\n * @param account address The address that you want to freeze\n */\n function freeze(address account) external returns (bool);\n\n /**\n * @dev Unfreeze an account, letting it from operating againt with the asset\n * Selector: 23b872dd\n * @param account address The address that you want to unfreeze\n */\n function thaw(address account) external returns (bool);\n\n /**\n * @dev Freeze the entire asset operations\n * Selector: 23b872dd\n */\n function freeze_asset() external returns (bool);\n\n /**\n * @dev Unfreeze the entire asset operations\n * Selector: 23b872dd\n */\n function thaw_asset() external returns (bool);\n\n /**\n * @dev Transfer the ownership of an asset to a new account\n * Selector: 23b872dd\n * @param owner address The address of the new owner\n */\n function transfer_ownership(address owner) external returns (bool);\n\n /**\n * @dev Specify the issuer, admin and freezer of an asset\n * Selector: 23b872dd\n * @param issuer address The address capable of issuing tokens\n * @param admin address The address capable of burning tokens and unfreezing accounts/assets\n * @param freezer address The address capable of freezing accounts/asset\n */\n function set_team(\n address issuer,\n address admin,\n address freezer\n ) external returns (bool);\n\n /**\n * @dev Specify the name, symbol and decimals of your asset\n * Selector: 23b872dd\n * @param name string The name of the asset\n * @param symbol string The symbol of the asset\n * @param decimals uint8 The number of decimals of your asset\n */\n function set_metadata(\n string calldata name,\n string calldata symbol,\n uint8 decimals\n ) external returns (bool);\n\n /**\n * @dev Clear the name, symbol and decimals of your asset\n * Selector: 23b872dd\n */\n function clear_metadata() external returns (bool);\n\n /**\n * @dev Event emited when a transfer has been performed.\n * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n * @param from address The address sending the tokens\n * @param to address The address receiving the tokens.\n * @param value uint256 The amount of tokens transfered.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Event emited when an approval has been registered.\n * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n * @param owner address Owner of the tokens.\n * @param spender address Allowed spender.\n * @param value uint256 Amount of tokens approved.\n */\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n}\n\ncontract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 {\n /// The ierc20 at the known pre-compile address.\n LocalAssetExtendedErc20 public localasseterc20 =\n LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701);\n address localasseterc20address = 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701;\n\n receive() external payable {\n // React to receiving ether\n }\n\n function set_address_interface(address instance_address) public {\n localasseterc20 = LocalAssetExtendedErc20(instance_address);\n localasseterc20address = instance_address;\n }\n\n function get_address() public view returns (address) {\n return localasseterc20address;\n }\n\n function name() external view override returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.name();\n }\n\n function symbol() external view override returns (string memory) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.symbol();\n }\n\n function decimals() external view override returns (uint8) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.decimals();\n }\n\n function totalSupply() external view override returns (uint256) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.totalSupply();\n }\n\n function balanceOf(address who) external view override returns (uint256) {\n // We nominate our target collator with all the tokens provided\n return localasseterc20.balanceOf(who);\n }\n\n function allowance(address owner, address spender)\n external\n view\n override\n returns (uint256)\n {\n return localasseterc20.allowance(owner, spender);\n }\n\n function transfer(address to, uint256 value)\n external\n override\n returns (bool)\n {\n return localasseterc20.transfer(to, value);\n }\n\n function mint(address to, uint256 value) external override returns (bool) {\n return localasseterc20.mint(to, value);\n }\n\n function burn(address from, uint256 value)\n external\n override\n returns (bool)\n {\n return localasseterc20.burn(from, value);\n }\n\n function freeze(address account) external override returns (bool) {\n return localasseterc20.freeze(account);\n }\n\n function thaw(address account) external override returns (bool) {\n return localasseterc20.thaw(account);\n }\n\n function freeze_asset() external override returns (bool) {\n return localasseterc20.freeze_asset();\n }\n\n function thaw_asset() external override returns (bool) {\n return localasseterc20.thaw_asset();\n }\n\n function transfer_ownership(address owner)\n external\n override\n returns (bool)\n {\n return localasseterc20.transfer_ownership(owner);\n }\n\n function set_team(\n address issuer,\n address admin,\n address freezer\n ) external override returns (bool) {\n return localasseterc20.set_team(issuer, admin, freezer);\n }\n\n function set_metadata(\n string calldata name,\n string calldata symbol,\n uint8 decimals\n ) external override returns (bool) {\n return localasseterc20.set_metadata(name, symbol, decimals);\n }\n\n function clear_metadata() external override returns (bool) {\n return localasseterc20.clear_metadata();\n }\n\n function transfer_delegate(address to, uint256 value)\n external\n returns (bool)\n {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\"transfer(address,uint256)\", to, value)\n );\n return result;\n }\n\n function approve(address spender, uint256 value)\n external\n override\n returns (bool)\n {\n return localasseterc20.approve(spender, value);\n }\n\n function approve_delegate(address spender, uint256 value)\n external\n returns (bool)\n {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\"approve(address,uint256)\", spender, value)\n );\n return result;\n }\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external override returns (bool) {\n return localasseterc20.transferFrom(from, to, value);\n }\n\n function transferFrom_delegate(\n address from,\n address to,\n uint256 value\n ) external returns (bool) {\n (bool result, bytes memory data) = localasseterc20address.delegatecall(\n abi.encodeWithSignature(\n \"transferFrom(address,address,uint256)\",\n from,\n to,\n value\n )\n );\n return result;\n }\n}\n" } diff --git a/tests/contracts/compiled/Looper.json b/tests/contracts/compiled/Looper.json new file mode 100644 index 0000000000..b401b95417 --- /dev/null +++ b/tests/contracts/compiled/Looper.json @@ -0,0 +1,2468 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b50610224806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd146100465780635bec9e67146100645780636e4709f91461006e575b600080fd5b61004e61008a565b60405161005b91906100f0565b60405180910390f35b61006c610090565b005b6100886004803603810190610083919061013c565b61009f565b005b60005481565b5b60011561009d57610091565b565b60005b818110156100d35760016000546100b99190610198565b6000819055506001816100cc9190610198565b90506100a2565b5050565b6000819050919050565b6100ea816100d7565b82525050565b600060208201905061010560008301846100e1565b92915050565b600080fd5b610119816100d7565b811461012457600080fd5b50565b60008135905061013681610110565b92915050565b6000602082840312156101525761015161010b565b5b600061016084828501610127565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101a3826100d7565b91506101ae836100d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101e3576101e2610169565b5b82820190509291505056fea26469706673582212204aa0c8d51154d878b9370aae6bc77c3e2dcc08ac4c3c9e48eee2052f9a39860464736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [], + "name": "count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "n", "type": "uint256" } + ], + "name": "incrementalLoop", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "infinite", + "outputs": [], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":67:345 contract Looper {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:345 contract Looper {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x5bec9e67\n eq\n tag_4\n jumpi\n dup1\n 0x6e4709f9\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":89:109 uint256 public count */\n tag_3:\n tag_6\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":116:179 function infinite() public pure {... */\n tag_4:\n tag_10\n tag_11\n jump\t// in\n tag_10:\n stop\n /* \"main.sol\":185:343 function incrementalLoop(uint256 n) public {... */\n tag_5:\n tag_12\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_13\n swap2\n swap1\n tag_14\n jump\t// in\n tag_13:\n tag_15\n jump\t// in\n tag_12:\n stop\n /* \"main.sol\":89:109 uint256 public count */\n tag_7:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":116:179 function infinite() public pure {... */\n tag_11:\n /* \"main.sol\":158:173 while (true) {} */\n tag_17:\n /* \"main.sol\":165:169 true */\n 0x01\n /* \"main.sol\":158:173 while (true) {} */\n iszero\n tag_18\n jumpi\n jump(tag_17)\n tag_18:\n /* \"main.sol\":116:179 function infinite() public pure {... */\n jump\t// out\n /* \"main.sol\":185:343 function incrementalLoop(uint256 n) public {... */\n tag_15:\n /* \"main.sol\":238:247 uint256 i */\n 0x00\n /* \"main.sol\":261:337 while (i < n) {... */\n tag_20:\n /* \"main.sol\":272:273 n */\n dup2\n /* \"main.sol\":268:269 i */\n dup2\n /* \"main.sol\":268:273 i < n */\n lt\n /* \"main.sol\":261:337 while (i < n) {... */\n iszero\n tag_21\n jumpi\n /* \"main.sol\":305:306 1 */\n 0x01\n /* \"main.sol\":297:302 count */\n sload(0x00)\n /* \"main.sol\":297:306 count + 1 */\n tag_22\n swap2\n swap1\n tag_23\n jump\t// in\n tag_22:\n /* \"main.sol\":289:294 count */\n 0x00\n /* \"main.sol\":289:306 count = count + 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":325:326 1 */\n 0x01\n /* \"main.sol\":320:326 i += 1 */\n dup2\n tag_24\n swap2\n swap1\n tag_23\n jump\t// in\n tag_24:\n swap1\n pop\n /* \"main.sol\":261:337 while (i < n) {... */\n jump(tag_20)\n tag_21:\n /* \"main.sol\":228:343 {... */\n pop\n /* \"main.sol\":185:343 function incrementalLoop(uint256 n) public {... */\n pop\n jump\t// out\n /* \"#utility.yul\":7:84 */\n tag_25:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":73:78 */\n dup2\n /* \"#utility.yul\":62:78 */\n swap1\n pop\n /* \"#utility.yul\":7:84 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":90:208 */\n tag_26:\n /* \"#utility.yul\":177:201 */\n tag_36\n /* \"#utility.yul\":195:200 */\n dup2\n /* \"#utility.yul\":177:201 */\n tag_25\n jump\t// in\n tag_36:\n /* \"#utility.yul\":172:175 */\n dup3\n /* \"#utility.yul\":165:202 */\n mstore\n /* \"#utility.yul\":90:208 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":214:436 */\n tag_9:\n /* \"#utility.yul\":307:311 */\n 0x00\n /* \"#utility.yul\":345:347 */\n 0x20\n /* \"#utility.yul\":334:343 */\n dup3\n /* \"#utility.yul\":330:348 */\n add\n /* \"#utility.yul\":322:348 */\n swap1\n pop\n /* \"#utility.yul\":358:429 */\n tag_38\n /* \"#utility.yul\":426:427 */\n 0x00\n /* \"#utility.yul\":415:424 */\n dup4\n /* \"#utility.yul\":411:428 */\n add\n /* \"#utility.yul\":402:408 */\n dup5\n /* \"#utility.yul\":358:429 */\n tag_26\n jump\t// in\n tag_38:\n /* \"#utility.yul\":214:436 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":523:640 */\n tag_28:\n /* \"#utility.yul\":632:633 */\n 0x00\n /* \"#utility.yul\":629:630 */\n dup1\n /* \"#utility.yul\":622:634 */\n revert\n /* \"#utility.yul\":769:891 */\n tag_30:\n /* \"#utility.yul\":842:866 */\n tag_43\n /* \"#utility.yul\":860:865 */\n dup2\n /* \"#utility.yul\":842:866 */\n tag_25\n jump\t// in\n tag_43:\n /* \"#utility.yul\":835:840 */\n dup2\n /* \"#utility.yul\":832:867 */\n eq\n /* \"#utility.yul\":822:885 */\n tag_44\n jumpi\n /* \"#utility.yul\":881:882 */\n 0x00\n /* \"#utility.yul\":878:879 */\n dup1\n /* \"#utility.yul\":871:883 */\n revert\n /* \"#utility.yul\":822:885 */\n tag_44:\n /* \"#utility.yul\":769:891 */\n pop\n jump\t// out\n /* \"#utility.yul\":897:1036 */\n tag_31:\n /* \"#utility.yul\":943:948 */\n 0x00\n /* \"#utility.yul\":981:987 */\n dup2\n /* \"#utility.yul\":968:988 */\n calldataload\n /* \"#utility.yul\":959:988 */\n swap1\n pop\n /* \"#utility.yul\":997:1030 */\n tag_46\n /* \"#utility.yul\":1024:1029 */\n dup2\n /* \"#utility.yul\":997:1030 */\n tag_30\n jump\t// in\n tag_46:\n /* \"#utility.yul\":897:1036 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1042:1371 */\n tag_14:\n /* \"#utility.yul\":1101:1107 */\n 0x00\n /* \"#utility.yul\":1150:1152 */\n 0x20\n /* \"#utility.yul\":1138:1147 */\n dup3\n /* \"#utility.yul\":1129:1136 */\n dup5\n /* \"#utility.yul\":1125:1148 */\n sub\n /* \"#utility.yul\":1121:1153 */\n slt\n /* \"#utility.yul\":1118:1237 */\n iszero\n tag_48\n jumpi\n /* \"#utility.yul\":1156:1235 */\n tag_49\n tag_28\n jump\t// in\n tag_49:\n /* \"#utility.yul\":1118:1237 */\n tag_48:\n /* \"#utility.yul\":1276:1277 */\n 0x00\n /* \"#utility.yul\":1301:1354 */\n tag_50\n /* \"#utility.yul\":1346:1353 */\n dup5\n /* \"#utility.yul\":1337:1343 */\n dup3\n /* \"#utility.yul\":1326:1335 */\n dup6\n /* \"#utility.yul\":1322:1344 */\n add\n /* \"#utility.yul\":1301:1354 */\n tag_31\n jump\t// in\n tag_50:\n /* \"#utility.yul\":1291:1354 */\n swap2\n pop\n /* \"#utility.yul\":1247:1364 */\n pop\n /* \"#utility.yul\":1042:1371 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1377:1557 */\n tag_32:\n /* \"#utility.yul\":1425:1502 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1422:1423 */\n 0x00\n /* \"#utility.yul\":1415:1503 */\n mstore\n /* \"#utility.yul\":1522:1526 */\n 0x11\n /* \"#utility.yul\":1519:1520 */\n 0x04\n /* \"#utility.yul\":1512:1527 */\n mstore\n /* \"#utility.yul\":1546:1550 */\n 0x24\n /* \"#utility.yul\":1543:1544 */\n 0x00\n /* \"#utility.yul\":1536:1551 */\n revert\n /* \"#utility.yul\":1563:1868 */\n tag_23:\n /* \"#utility.yul\":1603:1606 */\n 0x00\n /* \"#utility.yul\":1622:1642 */\n tag_53\n /* \"#utility.yul\":1640:1641 */\n dup3\n /* \"#utility.yul\":1622:1642 */\n tag_25\n jump\t// in\n tag_53:\n /* \"#utility.yul\":1617:1642 */\n swap2\n pop\n /* \"#utility.yul\":1656:1676 */\n tag_54\n /* \"#utility.yul\":1674:1675 */\n dup4\n /* \"#utility.yul\":1656:1676 */\n tag_25\n jump\t// in\n tag_54:\n /* \"#utility.yul\":1651:1676 */\n swap3\n pop\n /* \"#utility.yul\":1810:1811 */\n dup3\n /* \"#utility.yul\":1742:1808 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1738:1812 */\n sub\n /* \"#utility.yul\":1735:1736 */\n dup3\n /* \"#utility.yul\":1732:1813 */\n gt\n /* \"#utility.yul\":1729:1836 */\n iszero\n tag_55\n jumpi\n /* \"#utility.yul\":1816:1834 */\n tag_56\n tag_32\n jump\t// in\n tag_56:\n /* \"#utility.yul\":1729:1836 */\n tag_55:\n /* \"#utility.yul\":1860:1861 */\n dup3\n /* \"#utility.yul\":1857:1858 */\n dup3\n /* \"#utility.yul\":1853:1862 */\n add\n /* \"#utility.yul\":1846:1862 */\n swap1\n pop\n /* \"#utility.yul\":1563:1868 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212204aa0c8d51154d878b9370aae6bc77c3e2dcc08ac4c3c9e48eee2052f9a39860464736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50610224806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd146100465780635bec9e67146100645780636e4709f91461006e575b600080fd5b61004e61008a565b60405161005b91906100f0565b60405180910390f35b61006c610090565b005b6100886004803603810190610083919061013c565b61009f565b005b60005481565b5b60011561009d57610091565b565b60005b818110156100d35760016000546100b99190610198565b6000819055506001816100cc9190610198565b90506100a2565b5050565b6000819050919050565b6100ea816100d7565b82525050565b600060208201905061010560008301846100e1565b92915050565b600080fd5b610119816100d7565b811461012457600080fd5b50565b60008135905061013681610110565b92915050565b6000602082840312156101525761015161010b565b5b600061016084828501610127565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101a3826100d7565b91506101ae836100d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101e3576101e2610169565b5b82820190509291505056fea26469706673582212204aa0c8d51154d878b9370aae6bc77c3e2dcc08ac4c3c9e48eee2052f9a39860464736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x224 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x6E4709F9 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0xF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0x90 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x88 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x83 SWAP2 SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x9D JUMPI PUSH2 0x91 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xD3 JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0xB9 SWAP2 SWAP1 PUSH2 0x198 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xCC SWAP2 SWAP1 PUSH2 0x198 JUMP JUMPDEST SWAP1 POP PUSH2 0xA2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xEA DUP2 PUSH2 0xD7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x105 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x119 DUP2 PUSH2 0xD7 JUMP JUMPDEST DUP2 EQ PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x136 DUP2 PUSH2 0x110 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x152 JUMPI PUSH2 0x151 PUSH2 0x10B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP5 DUP3 DUP6 ADD PUSH2 0x127 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP3 PUSH2 0xD7 JUMP JUMPDEST SWAP2 POP PUSH2 0x1AE DUP4 PUSH2 0xD7 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1E3 JUMPI PUSH2 0x1E2 PUSH2 0x169 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A LOG0 0xC8 0xD5 GT SLOAD 0xD8 PUSH25 0xB9370AAE6BC77C3E2DCC08AC4C3C9E48EEE2052F9A39860464 PUSH20 0x6F6C634300080B00330000000000000000000000 ", + "sourceMap": "67:278:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@count_3": { + "entryPoint": 138, + "id": 3, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@incrementalLoop_35": { + "entryPoint": 159, + "id": 35, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@infinite_10": { + "entryPoint": 144, + "id": 10, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_t_uint256": { + "entryPoint": 295, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": 316, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 225, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 240, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 408, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 215, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 361, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 267, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 272, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1871:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:1", + "type": "" + } + ], + "src": "7:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "155:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "195:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "177:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "177:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "165:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "165:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "165:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "143:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:1", + "type": "" + } + ], + "src": "90:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "312:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "322:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "334:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "330:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "330:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "322:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "402:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "358:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "358:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "358:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "284:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "296:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "307:4:1", + "type": "" + } + ], + "src": "214:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "482:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "492:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "508:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "502:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "502:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "492:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "475:6:1", + "type": "" + } + ], + "src": "442:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "612:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "629:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "632:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "622:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "622:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "622:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "523:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "735:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "752:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "755:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "745:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "745:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "745:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "646:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "812:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "869:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "878:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "881:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "871:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "871:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "871:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "835:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "860:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "842:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "842:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "832:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "832:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "825:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "825:43:1" + }, + "nodeType": "YulIf", + "src": "822:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "805:5:1", + "type": "" + } + ], + "src": "769:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "949:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "959:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "981:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "968:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "968:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "959:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1024:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "997:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "997:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "997:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "927:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "935:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "943:5:1", + "type": "" + } + ], + "src": "897:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1108:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1154:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1156:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "1156:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1156:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1129:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1138:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1125:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1125:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1150:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1121:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1121:32:1" + }, + "nodeType": "YulIf", + "src": "1118:119:1" + }, + { + "nodeType": "YulBlock", + "src": "1247:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1262:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1276:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1266:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1291:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1326:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1337:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1322:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1322:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1346:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1301:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1301:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1291:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1078:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1089:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1101:6:1", + "type": "" + } + ], + "src": "1042:329:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1405:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1422:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1425:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1415:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1415:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1415:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1519:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1522:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1512:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1512:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1512:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1543:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1546:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1536:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1536:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1536:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1377:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1607:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1617:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1640:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1622:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1622:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1617:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1651:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1674:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1656:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1656:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1651:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1814:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1816:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "1816:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1816:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1735:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1742:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1810:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1738:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1738:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1732:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1732:81:1" + }, + "nodeType": "YulIf", + "src": "1729:107:1" + }, + { + "nodeType": "YulAssignment", + "src": "1846:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1857:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1860:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1853:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1853:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "1846:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "1594:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "1597:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "1603:3:1", + "type": "" + } + ], + "src": "1563:305:1" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c806306661abd146100465780635bec9e67146100645780636e4709f91461006e575b600080fd5b61004e61008a565b60405161005b91906100f0565b60405180910390f35b61006c610090565b005b6100886004803603810190610083919061013c565b61009f565b005b60005481565b5b60011561009d57610091565b565b60005b818110156100d35760016000546100b99190610198565b6000819055506001816100cc9190610198565b90506100a2565b5050565b6000819050919050565b6100ea816100d7565b82525050565b600060208201905061010560008301846100e1565b92915050565b600080fd5b610119816100d7565b811461012457600080fd5b50565b60008135905061013681610110565b92915050565b6000602082840312156101525761015161010b565b5b600061016084828501610127565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101a3826100d7565b91506101ae836100d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101e3576101e2610169565b5b82820190509291505056fea26469706673582212204aa0c8d51154d878b9370aae6bc77c3e2dcc08ac4c3c9e48eee2052f9a39860464736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x5BEC9E67 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x6E4709F9 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x8A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0xF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0x90 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x88 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x83 SWAP2 SWAP1 PUSH2 0x13C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST JUMPDEST PUSH1 0x1 ISZERO PUSH2 0x9D JUMPI PUSH2 0x91 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xD3 JUMPI PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0xB9 SWAP2 SWAP1 PUSH2 0x198 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP2 PUSH2 0xCC SWAP2 SWAP1 PUSH2 0x198 JUMP JUMPDEST SWAP1 POP PUSH2 0xA2 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xEA DUP2 PUSH2 0xD7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x105 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xE1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x119 DUP2 PUSH2 0xD7 JUMP JUMPDEST DUP2 EQ PUSH2 0x124 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x136 DUP2 PUSH2 0x110 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x152 JUMPI PUSH2 0x151 PUSH2 0x10B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x160 DUP5 DUP3 DUP6 ADD PUSH2 0x127 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A3 DUP3 PUSH2 0xD7 JUMP JUMPDEST SWAP2 POP PUSH2 0x1AE DUP4 PUSH2 0xD7 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1E3 JUMPI PUSH2 0x1E2 PUSH2 0x169 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A LOG0 0xC8 0xD5 GT SLOAD 0xD8 PUSH25 0xB9370AAE6BC77C3E2DCC08AC4C3C9E48EEE2052F9A39860464 PUSH20 0x6F6C634300080B00330000000000000000000000 ", + "sourceMap": "67:278:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;116:63;;;:::i;:::-;;185:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;89:20;;;;:::o;116:63::-;158:15;165:4;158:15;;;;;;116:63::o;185:158::-;238:9;261:76;272:1;268;:5;261:76;;;305:1;297:5;;:9;;;;:::i;:::-;289:5;:17;;;;325:1;320:6;;;;;:::i;:::-;;;261:76;;;228:115;185:158;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:180::-;1425:77;1422:1;1415:88;1522:4;1519:1;1512:15;1546:4;1543:1;1536:15;1563:305;1603:3;1622:20;1640:1;1622:20;:::i;:::-;1617:25;;1656:20;1674:1;1656:20;:::i;:::-;1651:25;;1810:1;1742:66;1738:74;1735:1;1732:81;1729:107;;;1816:18;;:::i;:::-;1729:107;1860:1;1857;1853:9;1846:16;;1563:305;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "109600", + "executionCost": "159", + "totalCost": "109759" + }, + "external": { + "count()": "2407", + "incrementalLoop(uint256)": "infinite", + "infinite()": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 345, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 345, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 345, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 345, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 345, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 345, "name": "tag", "source": 0, "value": "1" }, + { "begin": 67, "end": 345, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 345, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 345, "name": "CODECOPY", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 345, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a26469706673582212204aa0c8d51154d878b9370aae6bc77c3e2dcc08ac4c3c9e48eee2052f9a39860464736f6c634300080b0033", + ".code": [ + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 345, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 345, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 345, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 345, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 345, "name": "REVERT", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 345, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 345, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 345, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 345, "name": "LT", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 345, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 345, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 67, "end": 345, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "6661ABD" + }, + { "begin": 67, "end": 345, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 67, "end": 345, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "5BEC9E67" + }, + { "begin": 67, "end": 345, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 345, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "6E4709F9" + }, + { "begin": 67, "end": 345, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 67, "end": 345, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 345, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 345, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 345, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 345, "name": "REVERT", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 89, "end": 109, "name": "JUMPDEST", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 89, + "end": 109, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 89, + "end": 109, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 89, + "end": 109, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 89, "end": 109, "name": "JUMPDEST", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 89, "end": 109, "name": "MLOAD", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 89, "end": 109, "name": "SWAP2", "source": 0 }, + { "begin": 89, "end": 109, "name": "SWAP1", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 89, + "end": 109, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 89, + "end": 109, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 89, "end": 109, "name": "JUMPDEST", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 89, "end": 109, "name": "MLOAD", "source": 0 }, + { "begin": 89, "end": 109, "name": "DUP1", "source": 0 }, + { "begin": 89, "end": 109, "name": "SWAP2", "source": 0 }, + { "begin": 89, "end": 109, "name": "SUB", "source": 0 }, + { "begin": 89, "end": 109, "name": "SWAP1", "source": 0 }, + { "begin": 89, "end": 109, "name": "RETURN", "source": 0 }, + { + "begin": 116, + "end": 179, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 116, "end": 179, "name": "JUMPDEST", "source": 0 }, + { + "begin": 116, + "end": 179, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 116, + "end": 179, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 116, + "end": 179, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 116, + "end": 179, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 116, "end": 179, "name": "JUMPDEST", "source": 0 }, + { "begin": 116, "end": 179, "name": "STOP", "source": 0 }, + { + "begin": 185, + "end": 343, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 185, "end": 343, "name": "JUMPDEST", "source": 0 }, + { + "begin": 185, + "end": 343, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 185, + "end": 343, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 185, "end": 343, "name": "DUP1", "source": 0 }, + { "begin": 185, "end": 343, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 185, "end": 343, "name": "SUB", "source": 0 }, + { "begin": 185, "end": 343, "name": "DUP2", "source": 0 }, + { "begin": 185, "end": 343, "name": "ADD", "source": 0 }, + { "begin": 185, "end": 343, "name": "SWAP1", "source": 0 }, + { + "begin": 185, + "end": 343, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 185, "end": 343, "name": "SWAP2", "source": 0 }, + { "begin": 185, "end": 343, "name": "SWAP1", "source": 0 }, + { + "begin": 185, + "end": 343, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { + "begin": 185, + "end": 343, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 185, + "end": 343, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 185, "end": 343, "name": "JUMPDEST", "source": 0 }, + { + "begin": 185, + "end": 343, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 185, + "end": 343, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 185, + "end": 343, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 185, "end": 343, "name": "JUMPDEST", "source": 0 }, + { "begin": 185, "end": 343, "name": "STOP", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 89, "end": 109, "name": "JUMPDEST", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 89, "end": 109, "name": "SLOAD", "source": 0 }, + { "begin": 89, "end": 109, "name": "DUP2", "source": 0 }, + { + "begin": 89, + "end": 109, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 116, + "end": 179, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 116, "end": 179, "name": "JUMPDEST", "source": 0 }, + { + "begin": 158, + "end": 173, + "name": "tag", + "source": 0, + "value": "17" + }, + { "begin": 158, "end": 173, "name": "JUMPDEST", "source": 0 }, + { + "begin": 165, + "end": 169, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 158, "end": 173, "name": "ISZERO", "source": 0 }, + { + "begin": 158, + "end": 173, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 158, "end": 173, "name": "JUMPI", "source": 0 }, + { + "begin": 158, + "end": 173, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { "begin": 158, "end": 173, "name": "JUMP", "source": 0 }, + { + "begin": 158, + "end": 173, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 158, "end": 173, "name": "JUMPDEST", "source": 0 }, + { + "begin": 116, + "end": 179, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 185, + "end": 343, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 185, "end": 343, "name": "JUMPDEST", "source": 0 }, + { + "begin": 238, + "end": 247, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 261, + "end": 337, + "name": "tag", + "source": 0, + "value": "20" + }, + { "begin": 261, "end": 337, "name": "JUMPDEST", "source": 0 }, + { "begin": 272, "end": 273, "name": "DUP2", "source": 0 }, + { "begin": 268, "end": 269, "name": "DUP2", "source": 0 }, + { "begin": 268, "end": 273, "name": "LT", "source": 0 }, + { "begin": 261, "end": 337, "name": "ISZERO", "source": 0 }, + { + "begin": 261, + "end": 337, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { "begin": 261, "end": 337, "name": "JUMPI", "source": 0 }, + { + "begin": 305, + "end": 306, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 297, + "end": 302, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 297, "end": 302, "name": "SLOAD", "source": 0 }, + { + "begin": 297, + "end": 306, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { "begin": 297, "end": 306, "name": "SWAP2", "source": 0 }, + { "begin": 297, "end": 306, "name": "SWAP1", "source": 0 }, + { + "begin": 297, + "end": 306, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { + "begin": 297, + "end": 306, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 297, + "end": 306, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 297, "end": 306, "name": "JUMPDEST", "source": 0 }, + { + "begin": 289, + "end": 294, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 289, "end": 306, "name": "DUP2", "source": 0 }, + { "begin": 289, "end": 306, "name": "SWAP1", "source": 0 }, + { "begin": 289, "end": 306, "name": "SSTORE", "source": 0 }, + { "begin": 289, "end": 306, "name": "POP", "source": 0 }, + { + "begin": 325, + "end": 326, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 320, "end": 326, "name": "DUP2", "source": 0 }, + { + "begin": 320, + "end": 326, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { "begin": 320, "end": 326, "name": "SWAP2", "source": 0 }, + { "begin": 320, "end": 326, "name": "SWAP1", "source": 0 }, + { + "begin": 320, + "end": 326, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { + "begin": 320, + "end": 326, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 320, + "end": 326, + "name": "tag", + "source": 0, + "value": "24" + }, + { "begin": 320, "end": 326, "name": "JUMPDEST", "source": 0 }, + { "begin": 320, "end": 326, "name": "SWAP1", "source": 0 }, + { "begin": 320, "end": 326, "name": "POP", "source": 0 }, + { + "begin": 261, + "end": 337, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { "begin": 261, "end": 337, "name": "JUMP", "source": 0 }, + { + "begin": 261, + "end": 337, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 261, "end": 337, "name": "JUMPDEST", "source": 0 }, + { "begin": 228, "end": 343, "name": "POP", "source": 0 }, + { "begin": 185, "end": 343, "name": "POP", "source": 0 }, + { + "begin": 185, + "end": 343, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 84, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 7, "end": 84, "name": "JUMPDEST", "source": 1 }, + { + "begin": 44, + "end": 51, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 73, "end": 78, "name": "DUP2", "source": 1 }, + { "begin": 62, "end": 78, "name": "SWAP1", "source": 1 }, + { "begin": 62, "end": 78, "name": "POP", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP2", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP1", "source": 1 }, + { "begin": 7, "end": 84, "name": "POP", "source": 1 }, + { + "begin": 7, + "end": 84, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 90, + "end": 208, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 90, "end": 208, "name": "JUMPDEST", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 195, "end": 200, "name": "DUP2", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 177, + "end": 201, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 177, + "end": 201, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 177, "end": 201, "name": "JUMPDEST", "source": 1 }, + { "begin": 172, "end": 175, "name": "DUP3", "source": 1 }, + { "begin": 165, "end": 202, "name": "MSTORE", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { + "begin": 90, + "end": 208, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 214, + "end": 436, + "name": "tag", + "source": 1, + "value": "9" + }, + { "begin": 214, "end": 436, "name": "JUMPDEST", "source": 1 }, + { + "begin": 307, + "end": 311, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 345, + "end": 347, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 334, "end": 343, "name": "DUP3", "source": 1 }, + { "begin": 330, "end": 348, "name": "ADD", "source": 1 }, + { "begin": 322, "end": 348, "name": "SWAP1", "source": 1 }, + { "begin": 322, "end": 348, "name": "POP", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "38" + }, + { + "begin": 426, + "end": 427, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 415, "end": 424, "name": "DUP4", "source": 1 }, + { "begin": 411, "end": 428, "name": "ADD", "source": 1 }, + { "begin": 402, "end": 408, "name": "DUP5", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 358, + "end": 429, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 358, + "end": 429, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 358, "end": 429, "name": "JUMPDEST", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP3", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP2", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { + "begin": 214, + "end": 436, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 523, + "end": 640, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 523, "end": 640, "name": "JUMPDEST", "source": 1 }, + { + "begin": 632, + "end": 633, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 629, "end": 630, "name": "DUP1", "source": 1 }, + { "begin": 622, "end": 634, "name": "REVERT", "source": 1 }, + { + "begin": 769, + "end": 891, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 769, "end": 891, "name": "JUMPDEST", "source": 1 }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "43" + }, + { "begin": 860, "end": 865, "name": "DUP2", "source": 1 }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 842, + "end": 866, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 842, + "end": 866, + "name": "tag", + "source": 1, + "value": "43" + }, + { "begin": 842, "end": 866, "name": "JUMPDEST", "source": 1 }, + { "begin": 835, "end": 840, "name": "DUP2", "source": 1 }, + { "begin": 832, "end": 867, "name": "EQ", "source": 1 }, + { + "begin": 822, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "44" + }, + { "begin": 822, "end": 885, "name": "JUMPI", "source": 1 }, + { + "begin": 881, + "end": 882, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 878, "end": 879, "name": "DUP1", "source": 1 }, + { "begin": 871, "end": 883, "name": "REVERT", "source": 1 }, + { + "begin": 822, + "end": 885, + "name": "tag", + "source": 1, + "value": "44" + }, + { "begin": 822, "end": 885, "name": "JUMPDEST", "source": 1 }, + { "begin": 769, "end": 891, "name": "POP", "source": 1 }, + { + "begin": 769, + "end": 891, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 897, + "end": 1036, + "name": "tag", + "source": 1, + "value": "31" + }, + { "begin": 897, "end": 1036, "name": "JUMPDEST", "source": 1 }, + { + "begin": 943, + "end": 948, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 981, "end": 987, "name": "DUP2", "source": 1 }, + { "begin": 968, "end": 988, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 959, "end": 988, "name": "SWAP1", "source": 1 }, + { "begin": 959, "end": 988, "name": "POP", "source": 1 }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "46" + }, + { "begin": 1024, "end": 1029, "name": "DUP2", "source": 1 }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 997, + "end": 1030, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 997, + "end": 1030, + "name": "tag", + "source": 1, + "value": "46" + }, + { "begin": 997, "end": 1030, "name": "JUMPDEST", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP3", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP2", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, + { + "begin": 897, + "end": 1036, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1042, + "end": 1371, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 1042, "end": 1371, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1101, + "end": 1107, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1150, + "end": 1152, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1138, "end": 1147, "name": "DUP3", "source": 1 }, + { "begin": 1129, "end": 1136, "name": "DUP5", "source": 1 }, + { "begin": 1125, "end": 1148, "name": "SUB", "source": 1 }, + { "begin": 1121, "end": 1153, "name": "SLT", "source": 1 }, + { "begin": 1118, "end": 1237, "name": "ISZERO", "source": 1 }, + { + "begin": 1118, + "end": 1237, + "name": "PUSH [tag]", + "source": 1, + "value": "48" + }, + { "begin": 1118, "end": 1237, "name": "JUMPI", "source": 1 }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "49" + }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { + "begin": 1156, + "end": 1235, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1156, + "end": 1235, + "name": "tag", + "source": 1, + "value": "49" + }, + { "begin": 1156, "end": 1235, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1118, + "end": 1237, + "name": "tag", + "source": 1, + "value": "48" + }, + { "begin": 1118, "end": 1237, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1276, + "end": 1277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 1, + "value": "50" + }, + { "begin": 1346, "end": 1353, "name": "DUP5", "source": 1 }, + { "begin": 1337, "end": 1343, "name": "DUP3", "source": 1 }, + { "begin": 1326, "end": 1335, "name": "DUP6", "source": 1 }, + { "begin": 1322, "end": 1344, "name": "ADD", "source": 1 }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 1, + "value": "31" + }, + { + "begin": 1301, + "end": 1354, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1301, + "end": 1354, + "name": "tag", + "source": 1, + "value": "50" + }, + { "begin": 1301, "end": 1354, "name": "JUMPDEST", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "SWAP2", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "POP", "source": 1 }, + { "begin": 1247, "end": 1364, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP3", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP2", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { + "begin": 1042, + "end": 1371, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1377, + "end": 1557, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 1377, "end": 1557, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1425, + "end": 1502, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1422, + "end": 1423, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1415, "end": 1503, "name": "MSTORE", "source": 1 }, + { + "begin": 1522, + "end": 1526, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1519, + "end": 1520, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1512, "end": 1527, "name": "MSTORE", "source": 1 }, + { + "begin": 1546, + "end": 1550, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1543, + "end": 1544, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1536, "end": 1551, "name": "REVERT", "source": 1 }, + { + "begin": 1563, + "end": 1868, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 1563, "end": 1868, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1603, + "end": 1606, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", + "source": 1, + "value": "53" + }, + { "begin": 1640, "end": 1641, "name": "DUP3", "source": 1 }, + { + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 1622, + "end": 1642, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1622, + "end": 1642, + "name": "tag", + "source": 1, + "value": "53" + }, + { "begin": 1622, "end": 1642, "name": "JUMPDEST", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "SWAP2", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "POP", "source": 1 }, + { + "begin": 1656, + "end": 1676, + "name": "PUSH [tag]", + "source": 1, + "value": "54" + }, + { "begin": 1674, "end": 1675, "name": "DUP4", "source": 1 }, + { + "begin": 1656, + "end": 1676, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 1656, + "end": 1676, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1656, + "end": 1676, + "name": "tag", + "source": 1, + "value": "54" + }, + { "begin": 1656, "end": 1676, "name": "JUMPDEST", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "SWAP3", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "POP", "source": 1 }, + { "begin": 1810, "end": 1811, "name": "DUP3", "source": 1 }, + { + "begin": 1742, + "end": 1808, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1738, "end": 1812, "name": "SUB", "source": 1 }, + { "begin": 1735, "end": 1736, "name": "DUP3", "source": 1 }, + { "begin": 1732, "end": 1813, "name": "GT", "source": 1 }, + { "begin": 1729, "end": 1836, "name": "ISZERO", "source": 1 }, + { + "begin": 1729, + "end": 1836, + "name": "PUSH [tag]", + "source": 1, + "value": "55" + }, + { "begin": 1729, "end": 1836, "name": "JUMPI", "source": 1 }, + { + "begin": 1816, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "56" + }, + { + "begin": 1816, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 1816, + "end": 1834, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1816, + "end": 1834, + "name": "tag", + "source": 1, + "value": "56" + }, + { "begin": 1816, "end": 1834, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1729, + "end": 1836, + "name": "tag", + "source": 1, + "value": "55" + }, + { "begin": 1729, "end": 1836, "name": "JUMPDEST", "source": 1 }, + { "begin": 1860, "end": 1861, "name": "DUP3", "source": 1 }, + { "begin": 1857, "end": 1858, "name": "DUP3", "source": 1 }, + { "begin": 1853, "end": 1862, "name": "ADD", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "SWAP1", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP3", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP2", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { + "begin": 1563, + "end": 1868, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "count()": "06661abd", + "incrementalLoop(uint256)": "6e4709f9", + "infinite()": "5bec9e67" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"incrementalLoop\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"infinite\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Looper\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xadf15b884f8130dc2049f2d60052014666722263a26ea37cc6da0981854cbc6c\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://95ab6659e3d32b4d5f9233dedfc1c3af6f5a186260665a571779ce8d8bdfd547\",\"dweb:/ipfs/QmfU8KVNUctMBx3diEuFRfUEY9pMLXk7vM5GS2NdGTpikC\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 3, + "contract": "main.sol:Looper", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract Looper {\n uint256 public count;\n\n function infinite() public pure {\n while (true) {}\n }\n\n function incrementalLoop(uint256 n) public {\n uint256 i = 0;\n while (i < n) {\n count = count + 1;\n i += 1;\n }\n }\n}\n" +} diff --git a/tests/contracts/compiled/ModularCheck.json b/tests/contracts/compiled/ModularCheck.json deleted file mode 100644 index 44d45af3d9..0000000000 --- a/tests/contracts/compiled/ModularCheck.json +++ /dev/null @@ -1,2206 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [ - { "internalType": "uint256", "name": "_b", "type": "uint256" }, - { "internalType": "uint256", "name": "_e", "type": "uint256" }, - { "internalType": "uint256", "name": "_m", "type": "uint256" } - ], - "name": "modExp", - "outputs": [ - { "internalType": "uint256", "name": "result", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":118:230 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":173:174 5 */\n 0x05\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n tag_4\n /* \"main.sol\":161:162 3 */\n 0x03\n /* \"main.sol\":164:165 5 */\n 0x05\n /* \"main.sol\":167:168 7 */\n 0x07\n /* \"main.sol\":154:160 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":154:169 modExp(3, 5, 7) */\n 0x20\n shr\n jump\t// in\ntag_4:\n /* \"main.sol\":154:174 modExp(3, 5, 7) == 5 */\n eq\n /* \"main.sol\":146:175 require(modExp(3, 5, 7) == 5) */\n tag_6\n jumpi\n 0x00\n dup1\n revert\ntag_6:\n /* \"main.sol\":217:218 3 */\n 0x03\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n tag_7\n /* \"main.sol\":204:205 5 */\n 0x05\n /* \"main.sol\":207:208 7 */\n 0x07\n /* \"main.sol\":210:212 11 */\n 0x0b\n /* \"main.sol\":197:203 modExp */\n shl(0x20, tag_5)\n /* \"main.sol\":197:213 modExp(5, 7, 11) */\n 0x20\n shr\n jump\t// in\ntag_7:\n /* \"main.sol\":197:218 modExp(5, 7, 11) == 3 */\n eq\n /* \"main.sol\":189:219 require(modExp(5, 7, 11) == 3) */\n tag_8\n jumpi\n 0x00\n dup1\n revert\ntag_8:\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n jump(tag_9)\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\ntag_5:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\ntag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":34:1334 contract ModularCheck {... */\ntag_9:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:1334 contract ModularCheck {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3148f14f\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":364:1328 function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":432:446 uint256 result */\n 0x00\n /* \"main.sol\":549:553 0x40 */\n 0x40\n /* \"main.sol\":543:554 mload(0x40) */\n mload\n /* \"main.sol\":672:676 0x20 */\n 0x20\n /* \"main.sol\":663:670 pointer */\n dup2\n /* \"main.sol\":656:677 mstore(pointer, 0x20) */\n mstore\n /* \"main.sol\":721:725 0x20 */\n 0x20\n /* \"main.sol\":714:718 0x20 */\n dup1\n /* \"main.sol\":705:712 pointer */\n dup3\n /* \"main.sol\":701:719 add(pointer, 0x20) */\n add\n /* \"main.sol\":694:726 mstore(add(pointer, 0x20), 0x20) */\n mstore\n /* \"main.sol\":770:774 0x20 */\n 0x20\n /* \"main.sol\":763:767 0x40 */\n 0x40\n /* \"main.sol\":754:761 pointer */\n dup3\n /* \"main.sol\":750:768 add(pointer, 0x40) */\n add\n /* \"main.sol\":743:775 mstore(add(pointer, 0x40), 0x20) */\n mstore\n /* \"main.sol\":886:888 _b */\n dup5\n /* \"main.sol\":879:883 0x60 */\n 0x60\n /* \"main.sol\":870:877 pointer */\n dup3\n /* \"main.sol\":866:884 add(pointer, 0x60) */\n add\n /* \"main.sol\":859:889 mstore(add(pointer, 0x60), _b) */\n mstore\n /* \"main.sol\":933:935 _e */\n dup4\n /* \"main.sol\":926:930 0x80 */\n 0x80\n /* \"main.sol\":917:924 pointer */\n dup3\n /* \"main.sol\":913:931 add(pointer, 0x80) */\n add\n /* \"main.sol\":906:936 mstore(add(pointer, 0x80), _e) */\n mstore\n /* \"main.sol\":981:983 _m */\n dup3\n /* \"main.sol\":974:978 0xa0 */\n 0xa0\n /* \"main.sol\":965:972 pointer */\n dup3\n /* \"main.sol\":961:979 add(pointer, 0xa0) */\n add\n /* \"main.sol\":954:984 mstore(add(pointer, 0xa0), _m) */\n mstore\n /* \"main.sol\":1056:1060 0xc0 */\n 0xc0\n /* \"main.sol\":1050:1061 mload(0xc0) */\n mload\n /* \"main.sol\":1202:1206 0x20 */\n 0x20\n /* \"main.sol\":1195:1200 value */\n dup2\n /* \"main.sol\":1189:1193 0xc0 */\n 0xc0\n /* \"main.sol\":1180:1187 pointer */\n dup5\n /* \"main.sol\":1177:1178 0 */\n 0x00\n /* \"main.sol\":1171:1175 0x05 */\n 0x05\n /* \"main.sol\":1167:1168 0 */\n 0x00\n /* \"main.sol\":1163:1169 not(0) */\n not\n /* \"main.sol\":1158:1207 call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20) */\n call\n /* \"main.sol\":1148:1150 if */\n tag_11\n jumpi\n /* \"main.sol\":1241:1242 0 */\n 0x00\n /* \"main.sol\":1238:1239 0 */\n dup1\n /* \"main.sol\":1231:1243 revert(0, 0) */\n revert\n /* \"main.sol\":1148:1150 if */\n tag_11:\n /* \"main.sol\":1298:1303 value */\n dup1\n /* \"main.sol\":1292:1304 mload(value) */\n mload\n /* \"main.sol\":1282:1304 result := mload(value) */\n swap3\n pop\n /* \"main.sol\":471:1318 {... */\n pop\n pop\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_13:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_15\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_16\n jump\t// in\n tag_15:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:704 */\n tag_6:\n 0x00\n dup1\n 0x00\n /* \"#utility.yul\":294:296 */\n 0x60\n /* \"#utility.yul\":282:291 */\n dup5\n /* \"#utility.yul\":273:280 */\n dup7\n /* \"#utility.yul\":269:292 */\n sub\n /* \"#utility.yul\":265:297 */\n slt\n /* \"#utility.yul\":262:264 */\n iszero\n tag_18\n jumpi\n /* \"#utility.yul\":310:311 */\n 0x00\n /* \"#utility.yul\":307:308 */\n dup1\n /* \"#utility.yul\":300:312 */\n revert\n /* \"#utility.yul\":262:264 */\n tag_18:\n /* \"#utility.yul\":353:354 */\n 0x00\n /* \"#utility.yul\":378:431 */\n tag_19\n /* \"#utility.yul\":423:430 */\n dup7\n /* \"#utility.yul\":414:420 */\n dup3\n /* \"#utility.yul\":403:412 */\n dup8\n /* \"#utility.yul\":399:421 */\n add\n /* \"#utility.yul\":378:431 */\n tag_13\n jump\t// in\n tag_19:\n /* \"#utility.yul\":368:431 */\n swap4\n pop\n /* \"#utility.yul\":324:441 */\n pop\n /* \"#utility.yul\":480:482 */\n 0x20\n /* \"#utility.yul\":506:559 */\n tag_20\n /* \"#utility.yul\":551:558 */\n dup7\n /* \"#utility.yul\":542:548 */\n dup3\n /* \"#utility.yul\":531:540 */\n dup8\n /* \"#utility.yul\":527:549 */\n add\n /* \"#utility.yul\":506:559 */\n tag_13\n jump\t// in\n tag_20:\n /* \"#utility.yul\":496:559 */\n swap3\n pop\n /* \"#utility.yul\":451:569 */\n pop\n /* \"#utility.yul\":608:610 */\n 0x40\n /* \"#utility.yul\":634:687 */\n tag_21\n /* \"#utility.yul\":679:686 */\n dup7\n /* \"#utility.yul\":670:676 */\n dup3\n /* \"#utility.yul\":659:668 */\n dup8\n /* \"#utility.yul\":655:677 */\n add\n /* \"#utility.yul\":634:687 */\n tag_13\n jump\t// in\n tag_21:\n /* \"#utility.yul\":624:687 */\n swap2\n pop\n /* \"#utility.yul\":579:697 */\n pop\n /* \"#utility.yul\":252:704 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":710:828 */\n tag_22:\n /* \"#utility.yul\":797:821 */\n tag_24\n /* \"#utility.yul\":815:820 */\n dup2\n /* \"#utility.yul\":797:821 */\n tag_25\n jump\t// in\n tag_24:\n /* \"#utility.yul\":792:795 */\n dup3\n /* \"#utility.yul\":785:822 */\n mstore\n /* \"#utility.yul\":775:828 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":834:1056 */\n tag_9:\n 0x00\n /* \"#utility.yul\":965:967 */\n 0x20\n /* \"#utility.yul\":954:963 */\n dup3\n /* \"#utility.yul\":950:968 */\n add\n /* \"#utility.yul\":942:968 */\n swap1\n pop\n /* \"#utility.yul\":978:1049 */\n tag_27\n /* \"#utility.yul\":1046:1047 */\n 0x00\n /* \"#utility.yul\":1035:1044 */\n dup4\n /* \"#utility.yul\":1031:1048 */\n add\n /* \"#utility.yul\":1022:1028 */\n dup5\n /* \"#utility.yul\":978:1049 */\n tag_22\n jump\t// in\n tag_27:\n /* \"#utility.yul\":932:1056 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1062:1139 */\n tag_25:\n 0x00\n /* \"#utility.yul\":1128:1133 */\n dup2\n /* \"#utility.yul\":1117:1133 */\n swap1\n pop\n /* \"#utility.yul\":1107:1139 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1145:1267 */\n tag_16:\n /* \"#utility.yul\":1218:1242 */\n tag_30\n /* \"#utility.yul\":1236:1241 */\n dup2\n /* \"#utility.yul\":1218:1242 */\n tag_25\n jump\t// in\n tag_30:\n /* \"#utility.yul\":1211:1216 */\n dup2\n /* \"#utility.yul\":1208:1243 */\n eq\n /* \"#utility.yul\":1198:1200 */\n tag_31\n jumpi\n /* \"#utility.yul\":1257:1258 */\n 0x00\n /* \"#utility.yul\":1254:1255 */\n dup1\n /* \"#utility.yul\":1247:1259 */\n revert\n /* \"#utility.yul\":1198:1200 */\n tag_31:\n /* \"#utility.yul\":1188:1267 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600561002760036005600761005660201b60201c565b1461003157600080fd5b600361004760056007600b61005660201b60201c565b1461005157600080fd5b6100a5565b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f161009857600080fd5b8051925050509392505050565b610194806100b46000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x5 PUSH2 0x27 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x47 PUSH1 0x5 PUSH1 0x7 PUSH1 0xB PUSH2 0x56 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST EQ PUSH2 0x51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0x98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x194 DUP1 PUSH2 0xB4 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ", - "sourceMap": "34:1300:0:-:0;;;118:112;;;;;;;;;;173:1;154:15;161:1;164;167;154:6;;;:15;;:::i;:::-;:20;146:29;;;;;;217:1;197:16;204:1;207;210:2;197:6;;;:16;;:::i;:::-;:21;189:30;;;;;;34:1300;;364:964;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;34:1300::-;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1270:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "59:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "69:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "91:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "78:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "78:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "69:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "134:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "107:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "107:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "107:33:1" - } - ] - }, - "name": "abi_decode_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "37:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "45:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:1", - "type": "" - } - ], - "src": "7:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "252:452:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "298:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "307:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "310:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "300:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "300:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "300:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "273:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "282:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "269:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "269:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "294:2:1", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "265:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "265:32:1" - }, - "nodeType": "YulIf", - "src": "262:2:1" - }, - { - "nodeType": "YulBlock", - "src": "324:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "339:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "353:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "343:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "368:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "403:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "414:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "399:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "399:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "423:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "378:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "378:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "368:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "451:118:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "466:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "480:2:1", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "470:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "496:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "531:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "542:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "527:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "527:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "551:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "506:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "506:53:1" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "496:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "579:118:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "594:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "608:2:1", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "598:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "624:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "659:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "670:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "655:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "655:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "679:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "634:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "634:53:1" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "624:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256t_uint256t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "206:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "217:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "229:6:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "237:6:1", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "245:6:1", - "type": "" - } - ], - "src": "152:552:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "775:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "792:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "815:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "797:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "797:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "785:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "785:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "785:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "763:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "770:3:1", - "type": "" - } - ], - "src": "710:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "932:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "942:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "954:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "965:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "950:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "950:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "942:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1022:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1035:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1046:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1031:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1031:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "978:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "978:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "978:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "904:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "916:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "927:4:1", - "type": "" - } - ], - "src": "834:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1107:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1117:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1128:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1117:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1089:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1099:7:1", - "type": "" - } - ], - "src": "1062:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1188:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1245:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1254:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1257:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1247:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1247:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1247:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1211:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1236:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1218:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1218:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1208:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1208:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1201:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1201:43:1" - }, - "nodeType": "YulIf", - "src": "1198:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1181:5:1", - "type": "" - } - ], - "src": "1145:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80633148f14f14610030575b600080fd5b61004a600480360381019061004591906100c4565b610060565b6040516100579190610122565b60405180910390f35b600060405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c08460006005600019f16100a257600080fd5b8051925050509392505050565b6000813590506100be81610147565b92915050565b6000806000606084860312156100d957600080fd5b60006100e7868287016100af565b93505060206100f8868287016100af565b9250506040610109868287016100af565b9150509250925092565b61011c8161013d565b82525050565b60006020820190506101376000830184610113565b92915050565b6000819050919050565b6101508161013d565b811461015b57600080fd5b5056fea26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3148F14F EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x122 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MSTORE PUSH1 0x20 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE DUP4 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 MLOAD PUSH1 0x20 DUP2 PUSH1 0xC0 DUP5 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 NOT CALL PUSH2 0xA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBE DUP2 PUSH2 0x147 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xD9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xE7 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xF8 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x109 DUP7 DUP3 DUP8 ADD PUSH2 0xAF JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x11C DUP2 PUSH2 0x13D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x137 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x113 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x150 DUP2 PUSH2 0x13D JUMP JUMPDEST DUP2 EQ PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5F EXTCODEHASH NOT LOG3 LOG3 0xBB EXTCODEHASH JUMP 0xC5 0xDA SHR 0xF9 0xB7 0xD0 0x5E PUSH23 0x435904FA7FE3154211CD2F9911AF7B2F64736F6C634300 ADDMOD SUB STOP CALLER ", - "sourceMap": "34:1300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;364:964;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;432:14;549:4;543:11;672:4;663:7;656:21;721:4;714;705:7;701:18;694:32;770:4;763;754:7;750:18;743:32;886:2;879:4;870:7;866:18;859:30;933:2;926:4;917:7;913:18;906:30;981:2;974:4;965:7;961:18;954:30;1056:4;1050:11;1202:4;1195:5;1189:4;1180:7;1177:1;1171:4;1167:1;1163:6;1158:49;1148:2;;1241:1;1238;1231:12;1148:2;1298:5;1292:12;1282:22;;471:847;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:552::-;;;;294:2;282:9;273:7;269:23;265:32;262:2;;;310:1;307;300:12;262:2;353:1;378:53;423:7;414:6;403:9;399:22;378:53;:::i;:::-;368:63;;324:117;480:2;506:53;551:7;542:6;531:9;527:22;506:53;:::i;:::-;496:63;;451:118;608:2;634:53;679:7;670:6;659:9;655:22;634:53;:::i;:::-;624:63;;579:118;252:452;;;;;:::o;710:118::-;797:24;815:5;797:24;:::i;:::-;792:3;785:37;775:53;;:::o;834:222::-;;965:2;954:9;950:18;942:26;;978:71;1046:1;1035:9;1031:17;1022:6;978:71;:::i;:::-;932:124;;;;:::o;1062:77::-;;1128:5;1117:16;;1107:32;;;:::o;1145:122::-;1218:24;1236:5;1218:24;:::i;:::-;1211:5;1208:35;1198:2;;1257:1;1254;1247:12;1198:2;1188:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "80800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { "modExp(uint256,uint256,uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1334, "name": "MSTORE", "source": 0 }, - { "begin": 118, "end": 230, "name": "CALLVALUE", "source": 0 }, - { "begin": 118, "end": 230, "name": "DUP1", "source": 0 }, - { "begin": 118, "end": 230, "name": "ISZERO", "source": 0 }, - { - "begin": 118, - "end": 230, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 118, "end": 230, "name": "JUMPI", "source": 0 }, - { - "begin": 118, - "end": 230, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 118, "end": 230, "name": "DUP1", "source": 0 }, - { "begin": 118, "end": 230, "name": "REVERT", "source": 0 }, - { - "begin": 118, - "end": 230, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 118, "end": 230, "name": "JUMPDEST", "source": 0 }, - { "begin": 118, "end": 230, "name": "POP", "source": 0 }, - { - "begin": 173, - "end": 174, - "name": "PUSH", - "source": 0, - "value": "5" - }, - { - "begin": 154, - "end": 169, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 161, - "end": 162, - "name": "PUSH", - "source": 0, - "value": "3" - }, - { - "begin": 164, - "end": 165, - "name": "PUSH", - "source": 0, - "value": "5" - }, - { - "begin": 167, - "end": 168, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { - "begin": 154, - "end": 160, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 154, - "end": 160, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 154, "end": 160, "name": "SHL", "source": 0 }, - { - "begin": 154, - "end": 169, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 154, "end": 169, "name": "SHR", "source": 0 }, - { - "begin": 154, - "end": 169, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 154, - "end": 169, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 154, "end": 169, "name": "JUMPDEST", "source": 0 }, - { "begin": 154, "end": 174, "name": "EQ", "source": 0 }, - { - "begin": 146, - "end": 175, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 146, "end": 175, "name": "JUMPI", "source": 0 }, - { - "begin": 146, - "end": 175, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 146, "end": 175, "name": "DUP1", "source": 0 }, - { "begin": 146, "end": 175, "name": "REVERT", "source": 0 }, - { - "begin": 146, - "end": 175, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 146, "end": 175, "name": "JUMPDEST", "source": 0 }, - { - "begin": 217, - "end": 218, - "name": "PUSH", - "source": 0, - "value": "3" - }, - { - "begin": 197, - "end": 213, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 204, - "end": 205, - "name": "PUSH", - "source": 0, - "value": "5" - }, - { - "begin": 207, - "end": 208, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { - "begin": 210, - "end": 212, - "name": "PUSH", - "source": 0, - "value": "B" - }, - { - "begin": 197, - "end": 203, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 197, - "end": 203, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 197, "end": 203, "name": "SHL", "source": 0 }, - { - "begin": 197, - "end": 213, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 197, "end": 213, "name": "SHR", "source": 0 }, - { - "begin": 197, - "end": 213, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 197, - "end": 213, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 197, "end": 213, "name": "JUMPDEST", "source": 0 }, - { "begin": 197, "end": 218, "name": "EQ", "source": 0 }, - { - "begin": 189, - "end": 219, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 189, "end": 219, "name": "JUMPI", "source": 0 }, - { - "begin": 189, - "end": 219, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 189, "end": 219, "name": "DUP1", "source": 0 }, - { "begin": 189, "end": 219, "name": "REVERT", "source": 0 }, - { - "begin": 189, - "end": 219, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 189, "end": 219, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 34, "end": 1334, "name": "JUMP", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, - { - "begin": 432, - "end": 446, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 549, - "end": 553, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 543, "end": 554, "name": "MLOAD", "source": 0 }, - { - "begin": 672, - "end": 676, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 663, "end": 670, "name": "DUP2", "source": 0 }, - { "begin": 656, "end": 677, "name": "MSTORE", "source": 0 }, - { - "begin": 721, - "end": 725, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 714, "end": 718, "name": "DUP1", "source": 0 }, - { "begin": 705, "end": 712, "name": "DUP3", "source": 0 }, - { "begin": 701, "end": 719, "name": "ADD", "source": 0 }, - { "begin": 694, "end": 726, "name": "MSTORE", "source": 0 }, - { - "begin": 770, - "end": 774, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { - "begin": 763, - "end": 767, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 754, "end": 761, "name": "DUP3", "source": 0 }, - { "begin": 750, "end": 768, "name": "ADD", "source": 0 }, - { "begin": 743, "end": 775, "name": "MSTORE", "source": 0 }, - { "begin": 886, "end": 888, "name": "DUP5", "source": 0 }, - { - "begin": 879, - "end": 883, - "name": "PUSH", - "source": 0, - "value": "60" - }, - { "begin": 870, "end": 877, "name": "DUP3", "source": 0 }, - { "begin": 866, "end": 884, "name": "ADD", "source": 0 }, - { "begin": 859, "end": 889, "name": "MSTORE", "source": 0 }, - { "begin": 933, "end": 935, "name": "DUP4", "source": 0 }, - { - "begin": 926, - "end": 930, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { "begin": 917, "end": 924, "name": "DUP3", "source": 0 }, - { "begin": 913, "end": 931, "name": "ADD", "source": 0 }, - { "begin": 906, "end": 936, "name": "MSTORE", "source": 0 }, - { "begin": 981, "end": 983, "name": "DUP3", "source": 0 }, - { - "begin": 974, - "end": 978, - "name": "PUSH", - "source": 0, - "value": "A0" - }, - { "begin": 965, "end": 972, "name": "DUP3", "source": 0 }, - { "begin": 961, "end": 979, "name": "ADD", "source": 0 }, - { "begin": 954, "end": 984, "name": "MSTORE", "source": 0 }, - { - "begin": 1056, - "end": 1060, - "name": "PUSH", - "source": 0, - "value": "C0" - }, - { "begin": 1050, "end": 1061, "name": "MLOAD", "source": 0 }, - { - "begin": 1202, - "end": 1206, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1195, "end": 1200, "name": "DUP2", "source": 0 }, - { - "begin": 1189, - "end": 1193, - "name": "PUSH", - "source": 0, - "value": "C0" - }, - { "begin": 1180, "end": 1187, "name": "DUP5", "source": 0 }, - { - "begin": 1177, - "end": 1178, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1171, - "end": 1175, - "name": "PUSH", - "source": 0, - "value": "5" - }, - { - "begin": 1167, - "end": 1168, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1163, "end": 1169, "name": "NOT", "source": 0 }, - { "begin": 1158, "end": 1207, "name": "CALL", "source": 0 }, - { - "begin": 1148, - "end": 1150, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 1148, "end": 1150, "name": "JUMPI", "source": 0 }, - { - "begin": 1241, - "end": 1242, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1238, "end": 1239, "name": "DUP1", "source": 0 }, - { "begin": 1231, "end": 1243, "name": "REVERT", "source": 0 }, - { - "begin": 1148, - "end": 1150, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 1148, "end": 1150, "name": "JUMPDEST", "source": 0 }, - { "begin": 1298, "end": 1303, "name": "DUP1", "source": 0 }, - { "begin": 1292, "end": 1304, "name": "MLOAD", "source": 0 }, - { "begin": 1282, "end": 1304, "name": "SWAP3", "source": 0 }, - { "begin": 1282, "end": 1304, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "SWAP4", "source": 0 }, - { "begin": 471, "end": 1318, "name": "SWAP3", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { - "begin": 471, - "end": 1318, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 34, - "end": 1334, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 34, "end": 1334, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1334, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1334, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a26469706673582212205f3f19a3a3bb3f56c5da1cf9b7d05e76435904fa7fe3154211cd2f9911af7b2f64736f6c63430008030033", - ".code": [ - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 1334, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 1334, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1334, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 1334, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1334, "name": "REVERT", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 1334, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 1334, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 1334, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 1334, "name": "LT", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 1334, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1334, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 34, "end": 1334, "name": "SHR", "source": 0 }, - { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "3148F14F" - }, - { "begin": 34, "end": 1334, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 34, "end": 1334, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 1334, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 1334, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 1334, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 1334, "name": "REVERT", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 364, - "end": 1328, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 364, "end": 1328, "name": "DUP1", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 364, "end": 1328, "name": "SUB", "source": 0 }, - { "begin": 364, "end": 1328, "name": "DUP2", "source": 0 }, - { "begin": 364, "end": 1328, "name": "ADD", "source": 0 }, - { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 364, "end": 1328, "name": "SWAP2", "source": 0 }, - { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 364, - "end": 1328, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 364, - "end": 1328, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 364, - "end": 1328, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 364, - "end": 1328, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 364, "end": 1328, "name": "MLOAD", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 364, "end": 1328, "name": "SWAP2", "source": 0 }, - { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 364, - "end": 1328, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 364, - "end": 1328, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 364, "end": 1328, "name": "MLOAD", "source": 0 }, - { "begin": 364, "end": 1328, "name": "DUP1", "source": 0 }, - { "begin": 364, "end": 1328, "name": "SWAP2", "source": 0 }, - { "begin": 364, "end": 1328, "name": "SUB", "source": 0 }, - { "begin": 364, "end": 1328, "name": "SWAP1", "source": 0 }, - { "begin": 364, "end": 1328, "name": "RETURN", "source": 0 }, - { - "begin": 364, - "end": 1328, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 364, "end": 1328, "name": "JUMPDEST", "source": 0 }, - { - "begin": 432, - "end": 446, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 549, - "end": 553, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 543, "end": 554, "name": "MLOAD", "source": 0 }, - { - "begin": 672, - "end": 676, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 663, "end": 670, "name": "DUP2", "source": 0 }, - { "begin": 656, "end": 677, "name": "MSTORE", "source": 0 }, - { - "begin": 721, - "end": 725, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 714, "end": 718, "name": "DUP1", "source": 0 }, - { "begin": 705, "end": 712, "name": "DUP3", "source": 0 }, - { "begin": 701, "end": 719, "name": "ADD", "source": 0 }, - { "begin": 694, "end": 726, "name": "MSTORE", "source": 0 }, - { - "begin": 770, - "end": 774, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { - "begin": 763, - "end": 767, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 754, "end": 761, "name": "DUP3", "source": 0 }, - { "begin": 750, "end": 768, "name": "ADD", "source": 0 }, - { "begin": 743, "end": 775, "name": "MSTORE", "source": 0 }, - { "begin": 886, "end": 888, "name": "DUP5", "source": 0 }, - { - "begin": 879, - "end": 883, - "name": "PUSH", - "source": 0, - "value": "60" - }, - { "begin": 870, "end": 877, "name": "DUP3", "source": 0 }, - { "begin": 866, "end": 884, "name": "ADD", "source": 0 }, - { "begin": 859, "end": 889, "name": "MSTORE", "source": 0 }, - { "begin": 933, "end": 935, "name": "DUP4", "source": 0 }, - { - "begin": 926, - "end": 930, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { "begin": 917, "end": 924, "name": "DUP3", "source": 0 }, - { "begin": 913, "end": 931, "name": "ADD", "source": 0 }, - { "begin": 906, "end": 936, "name": "MSTORE", "source": 0 }, - { "begin": 981, "end": 983, "name": "DUP3", "source": 0 }, - { - "begin": 974, - "end": 978, - "name": "PUSH", - "source": 0, - "value": "A0" - }, - { "begin": 965, "end": 972, "name": "DUP3", "source": 0 }, - { "begin": 961, "end": 979, "name": "ADD", "source": 0 }, - { "begin": 954, "end": 984, "name": "MSTORE", "source": 0 }, - { - "begin": 1056, - "end": 1060, - "name": "PUSH", - "source": 0, - "value": "C0" - }, - { "begin": 1050, "end": 1061, "name": "MLOAD", "source": 0 }, - { - "begin": 1202, - "end": 1206, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 1195, "end": 1200, "name": "DUP2", "source": 0 }, - { - "begin": 1189, - "end": 1193, - "name": "PUSH", - "source": 0, - "value": "C0" - }, - { "begin": 1180, "end": 1187, "name": "DUP5", "source": 0 }, - { - "begin": 1177, - "end": 1178, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 1171, - "end": 1175, - "name": "PUSH", - "source": 0, - "value": "5" - }, - { - "begin": 1167, - "end": 1168, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1163, "end": 1169, "name": "NOT", "source": 0 }, - { "begin": 1158, "end": 1207, "name": "CALL", "source": 0 }, - { - "begin": 1148, - "end": 1150, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 1148, "end": 1150, "name": "JUMPI", "source": 0 }, - { - "begin": 1241, - "end": 1242, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 1238, "end": 1239, "name": "DUP1", "source": 0 }, - { "begin": 1231, "end": 1243, "name": "REVERT", "source": 0 }, - { - "begin": 1148, - "end": 1150, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 1148, "end": 1150, "name": "JUMPDEST", "source": 0 }, - { "begin": 1298, "end": 1303, "name": "DUP1", "source": 0 }, - { "begin": 1292, "end": 1304, "name": "MLOAD", "source": 0 }, - { "begin": 1282, "end": 1304, "name": "SWAP3", "source": 0 }, - { "begin": 1282, "end": 1304, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "SWAP4", "source": 0 }, - { "begin": 471, "end": 1318, "name": "SWAP3", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { "begin": 471, "end": 1318, "name": "POP", "source": 0 }, - { - "begin": 471, - "end": 1318, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "13" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "16" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 704, - "name": "tag", - "source": 1, - "value": "6" - }, - { "begin": 152, "end": 704, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 704, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 152, "end": 704, "name": "DUP1", "source": 1 }, - { - "begin": 152, - "end": 704, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 294, - "end": 296, - "name": "PUSH", - "source": 1, - "value": "60" - }, - { "begin": 282, "end": 291, "name": "DUP5", "source": 1 }, - { "begin": 273, "end": 280, "name": "DUP7", "source": 1 }, - { "begin": 269, "end": 292, "name": "SUB", "source": 1 }, - { "begin": 265, "end": 297, "name": "SLT", "source": 1 }, - { "begin": 262, "end": 264, "name": "ISZERO", "source": 1 }, - { - "begin": 262, - "end": 264, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { "begin": 262, "end": 264, "name": "JUMPI", "source": 1 }, - { - "begin": 310, - "end": 311, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 307, "end": 308, "name": "DUP1", "source": 1 }, - { "begin": 300, "end": 312, "name": "REVERT", "source": 1 }, - { - "begin": 262, - "end": 264, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 262, "end": 264, "name": "JUMPDEST", "source": 1 }, - { - "begin": 353, - "end": 354, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 378, - "end": 431, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 423, "end": 430, "name": "DUP7", "source": 1 }, - { "begin": 414, "end": 420, "name": "DUP3", "source": 1 }, - { "begin": 403, "end": 412, "name": "DUP8", "source": 1 }, - { "begin": 399, "end": 421, "name": "ADD", "source": 1 }, - { - "begin": 378, - "end": 431, - "name": "PUSH [tag]", - "source": 1, - "value": "13" - }, - { - "begin": 378, - "end": 431, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 378, - "end": 431, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 378, "end": 431, "name": "JUMPDEST", "source": 1 }, - { "begin": 368, "end": 431, "name": "SWAP4", "source": 1 }, - { "begin": 368, "end": 431, "name": "POP", "source": 1 }, - { "begin": 324, "end": 441, "name": "POP", "source": 1 }, - { - "begin": 480, - "end": 482, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { - "begin": 506, - "end": 559, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { "begin": 551, "end": 558, "name": "DUP7", "source": 1 }, - { "begin": 542, "end": 548, "name": "DUP3", "source": 1 }, - { "begin": 531, "end": 540, "name": "DUP8", "source": 1 }, - { "begin": 527, "end": 549, "name": "ADD", "source": 1 }, - { - "begin": 506, - "end": 559, - "name": "PUSH [tag]", - "source": 1, - "value": "13" - }, - { - "begin": 506, - "end": 559, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 506, - "end": 559, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 506, "end": 559, "name": "JUMPDEST", "source": 1 }, - { "begin": 496, "end": 559, "name": "SWAP3", "source": 1 }, - { "begin": 496, "end": 559, "name": "POP", "source": 1 }, - { "begin": 451, "end": 569, "name": "POP", "source": 1 }, - { - "begin": 608, - "end": 610, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { - "begin": 634, - "end": 687, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { "begin": 679, "end": 686, "name": "DUP7", "source": 1 }, - { "begin": 670, "end": 676, "name": "DUP3", "source": 1 }, - { "begin": 659, "end": 668, "name": "DUP8", "source": 1 }, - { "begin": 655, "end": 677, "name": "ADD", "source": 1 }, - { - "begin": 634, - "end": 687, - "name": "PUSH [tag]", - "source": 1, - "value": "13" - }, - { - "begin": 634, - "end": 687, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 634, - "end": 687, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 634, "end": 687, "name": "JUMPDEST", "source": 1 }, - { "begin": 624, "end": 687, "name": "SWAP2", "source": 1 }, - { "begin": 624, "end": 687, "name": "POP", "source": 1 }, - { "begin": 579, "end": 697, "name": "POP", "source": 1 }, - { "begin": 252, "end": 704, "name": "SWAP3", "source": 1 }, - { "begin": 252, "end": 704, "name": "POP", "source": 1 }, - { "begin": 252, "end": 704, "name": "SWAP3", "source": 1 }, - { "begin": 252, "end": 704, "name": "POP", "source": 1 }, - { "begin": 252, "end": 704, "name": "SWAP3", "source": 1 }, - { - "begin": 252, - "end": 704, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 710, - "end": 828, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 710, "end": 828, "name": "JUMPDEST", "source": 1 }, - { - "begin": 797, - "end": 821, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 815, "end": 820, "name": "DUP2", "source": 1 }, - { - "begin": 797, - "end": 821, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 797, - "end": 821, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 797, - "end": 821, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 797, "end": 821, "name": "JUMPDEST", "source": 1 }, - { "begin": 792, "end": 795, "name": "DUP3", "source": 1 }, - { "begin": 785, "end": 822, "name": "MSTORE", "source": 1 }, - { "begin": 775, "end": 828, "name": "POP", "source": 1 }, - { "begin": 775, "end": 828, "name": "POP", "source": 1 }, - { - "begin": 775, - "end": 828, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 834, - "end": 1056, - "name": "tag", - "source": 1, - "value": "9" - }, - { "begin": 834, "end": 1056, "name": "JUMPDEST", "source": 1 }, - { - "begin": 834, - "end": 1056, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 965, - "end": 967, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 954, "end": 963, "name": "DUP3", "source": 1 }, - { "begin": 950, "end": 968, "name": "ADD", "source": 1 }, - { "begin": 942, "end": 968, "name": "SWAP1", "source": 1 }, - { "begin": 942, "end": 968, "name": "POP", "source": 1 }, - { - "begin": 978, - "end": 1049, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 1046, - "end": 1047, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1035, "end": 1044, "name": "DUP4", "source": 1 }, - { "begin": 1031, "end": 1048, "name": "ADD", "source": 1 }, - { "begin": 1022, "end": 1028, "name": "DUP5", "source": 1 }, - { - "begin": 978, - "end": 1049, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { - "begin": 978, - "end": 1049, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 978, - "end": 1049, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 978, "end": 1049, "name": "JUMPDEST", "source": 1 }, - { "begin": 932, "end": 1056, "name": "SWAP3", "source": 1 }, - { "begin": 932, "end": 1056, "name": "SWAP2", "source": 1 }, - { "begin": 932, "end": 1056, "name": "POP", "source": 1 }, - { "begin": 932, "end": 1056, "name": "POP", "source": 1 }, - { - "begin": 932, - "end": 1056, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1062, - "end": 1139, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 1062, "end": 1139, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1062, - "end": 1139, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1128, "end": 1133, "name": "DUP2", "source": 1 }, - { "begin": 1117, "end": 1133, "name": "SWAP1", "source": 1 }, - { "begin": 1117, "end": 1133, "name": "POP", "source": 1 }, - { "begin": 1107, "end": 1139, "name": "SWAP2", "source": 1 }, - { "begin": 1107, "end": 1139, "name": "SWAP1", "source": 1 }, - { "begin": 1107, "end": 1139, "name": "POP", "source": 1 }, - { - "begin": 1107, - "end": 1139, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1145, - "end": 1267, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 1145, "end": 1267, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1218, - "end": 1242, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { "begin": 1236, "end": 1241, "name": "DUP2", "source": 1 }, - { - "begin": 1218, - "end": 1242, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 1218, - "end": 1242, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1218, - "end": 1242, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 1218, "end": 1242, "name": "JUMPDEST", "source": 1 }, - { "begin": 1211, "end": 1216, "name": "DUP2", "source": 1 }, - { "begin": 1208, "end": 1243, "name": "EQ", "source": 1 }, - { - "begin": 1198, - "end": 1200, - "name": "PUSH [tag]", - "source": 1, - "value": "31" - }, - { "begin": 1198, "end": 1200, "name": "JUMPI", "source": 1 }, - { - "begin": 1257, - "end": 1258, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1254, "end": 1255, "name": "DUP1", "source": 1 }, - { "begin": 1247, "end": 1259, "name": "REVERT", "source": 1 }, - { - "begin": 1198, - "end": 1200, - "name": "tag", - "source": 1, - "value": "31" - }, - { "begin": 1198, "end": 1200, "name": "JUMPDEST", "source": 1 }, - { "begin": 1188, "end": 1267, "name": "POP", "source": 1 }, - { - "begin": 1188, - "end": 1267, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "modExp(uint256,uint256,uint256)": "3148f14f" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_b\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_e\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_m\",\"type\":\"uint256\"}],\"name\":\"modExp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"ModularCheck\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x097512cf9987b49bfe8f0a182553ada97250dc01d384db9cdcaed8ad64079749\",\"urls\":[\"bzz-raw://58b5775c60ddc5d903527600fcd1730275d92f25d2cbe4155407d1dcf1409268\",\"dweb:/ipfs/QmYGYVSziwMp5tgyj6R6WxDScMUSdLTBNuzgjU1DwFHiN5\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract ModularCheck {\n // Verify simple modular exponentiation\n constructor() {\n require(modExp(3, 5, 7) == 5);\n require(modExp(5, 7, 11) == 3);\n }\n // Wrapper function to use the precompile.\n // Taken from https://ethereum.stackexchange.com/a/71590/9963\n function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) {\n assembly {\n // Free memory pointer\n let pointer := mload(0x40)\n // Define length of base, exponent and modulus. 0x20 == 32 bytes\n mstore(pointer, 0x20)\n mstore(add(pointer, 0x20), 0x20)\n mstore(add(pointer, 0x40), 0x20)\n // Define variables base, exponent and modulus\n mstore(add(pointer, 0x60), _b)\n mstore(add(pointer, 0x80), _e)\n\n mstore(add(pointer, 0xa0), _m)\n // Store the result\n let value := mload(0xc0)\n // Call the precompiled contract 0x05 = bigModExp\n if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {\n revert(0, 0)\n }\n result := mload(value)\n }\n }\n }" -} diff --git a/tests/contracts/compiled/MultiplyBy7.json b/tests/contracts/compiled/MultiplyBy7.json new file mode 100644 index 0000000000..8d02ed7a35 --- /dev/null +++ b/tests/contracts/compiled/MultiplyBy7.json @@ -0,0 +1,2177 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b506101c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a600480360381019061004591906100b1565b610060565b60405161005791906100ed565b60405180910390f35b600060078261006f9190610137565b9050919050565b600080fd5b6000819050919050565b61008e8161007b565b811461009957600080fd5b50565b6000813590506100ab81610085565b92915050565b6000602082840312156100c7576100c6610076565b5b60006100d58482850161009c565b91505092915050565b6100e78161007b565b82525050565b600060208201905061010260008301846100de565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101428261007b565b915061014d8361007b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561018657610185610108565b5b82820290509291505056fea264697066735822122088e950668b5748e91e84dcbc79d123fb0de9f319d0e6de9e07622c37f53d39eb64736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "uint256", "name": "a", "type": "uint256" } + ], + "name": "multiply", + "outputs": [ + { "internalType": "uint256", "name": "d", "type": "uint256" } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":67:186 contract MultiplyBy7 {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:186 contract MultiplyBy7 {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xc6888fa1\n eq\n tag_3\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":94:184 function multiply(uint256 a) public pure returns (uint256 d) {... */\n tag_3:\n tag_4\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_5\n swap2\n swap1\n tag_6\n jump\t// in\n tag_5:\n tag_7\n jump\t// in\n tag_4:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n tag_7:\n /* \"main.sol\":144:153 uint256 d */\n 0x00\n /* \"main.sol\":176:177 7 */\n 0x07\n /* \"main.sol\":172:173 a */\n dup3\n /* \"main.sol\":172:177 a * 7 */\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n /* \"main.sol\":165:177 return a * 7 */\n swap1\n pop\n /* \"main.sol\":94:184 function multiply(uint256 a) public pure returns (uint256 d) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_14:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:411 */\n tag_16:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\n tag_17:\n /* \"#utility.yul\":490:514 */\n tag_27\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_16\n jump\t// in\n tag_27:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_28\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\n tag_28:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:684 */\n tag_18:\n /* \"#utility.yul\":591:596 */\n 0x00\n /* \"#utility.yul\":629:635 */\n dup2\n /* \"#utility.yul\":616:636 */\n calldataload\n /* \"#utility.yul\":607:636 */\n swap1\n pop\n /* \"#utility.yul\":645:678 */\n tag_30\n /* \"#utility.yul\":672:677 */\n dup2\n /* \"#utility.yul\":645:678 */\n tag_17\n jump\t// in\n tag_30:\n /* \"#utility.yul\":545:684 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":690:1019 */\n tag_6:\n /* \"#utility.yul\":749:755 */\n 0x00\n /* \"#utility.yul\":798:800 */\n 0x20\n /* \"#utility.yul\":786:795 */\n dup3\n /* \"#utility.yul\":777:784 */\n dup5\n /* \"#utility.yul\":773:796 */\n sub\n /* \"#utility.yul\":769:801 */\n slt\n /* \"#utility.yul\":766:885 */\n iszero\n tag_32\n jumpi\n /* \"#utility.yul\":804:883 */\n tag_33\n tag_14\n jump\t// in\n tag_33:\n /* \"#utility.yul\":766:885 */\n tag_32:\n /* \"#utility.yul\":924:925 */\n 0x00\n /* \"#utility.yul\":949:1002 */\n tag_34\n /* \"#utility.yul\":994:1001 */\n dup5\n /* \"#utility.yul\":985:991 */\n dup3\n /* \"#utility.yul\":974:983 */\n dup6\n /* \"#utility.yul\":970:992 */\n add\n /* \"#utility.yul\":949:1002 */\n tag_18\n jump\t// in\n tag_34:\n /* \"#utility.yul\":939:1002 */\n swap2\n pop\n /* \"#utility.yul\":895:1012 */\n pop\n /* \"#utility.yul\":690:1019 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1025:1143 */\n tag_19:\n /* \"#utility.yul\":1112:1136 */\n tag_36\n /* \"#utility.yul\":1130:1135 */\n dup2\n /* \"#utility.yul\":1112:1136 */\n tag_16\n jump\t// in\n tag_36:\n /* \"#utility.yul\":1107:1110 */\n dup3\n /* \"#utility.yul\":1100:1137 */\n mstore\n /* \"#utility.yul\":1025:1143 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1149:1371 */\n tag_9:\n /* \"#utility.yul\":1242:1246 */\n 0x00\n /* \"#utility.yul\":1280:1282 */\n 0x20\n /* \"#utility.yul\":1269:1278 */\n dup3\n /* \"#utility.yul\":1265:1283 */\n add\n /* \"#utility.yul\":1257:1283 */\n swap1\n pop\n /* \"#utility.yul\":1293:1364 */\n tag_38\n /* \"#utility.yul\":1361:1362 */\n 0x00\n /* \"#utility.yul\":1350:1359 */\n dup4\n /* \"#utility.yul\":1346:1363 */\n add\n /* \"#utility.yul\":1337:1343 */\n dup5\n /* \"#utility.yul\":1293:1364 */\n tag_19\n jump\t// in\n tag_38:\n /* \"#utility.yul\":1149:1371 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1377:1557 */\n tag_20:\n /* \"#utility.yul\":1425:1502 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1422:1423 */\n 0x00\n /* \"#utility.yul\":1415:1503 */\n mstore\n /* \"#utility.yul\":1522:1526 */\n 0x11\n /* \"#utility.yul\":1519:1520 */\n 0x04\n /* \"#utility.yul\":1512:1527 */\n mstore\n /* \"#utility.yul\":1546:1550 */\n 0x24\n /* \"#utility.yul\":1543:1544 */\n 0x00\n /* \"#utility.yul\":1536:1551 */\n revert\n /* \"#utility.yul\":1563:1911 */\n tag_12:\n /* \"#utility.yul\":1603:1610 */\n 0x00\n /* \"#utility.yul\":1626:1646 */\n tag_41\n /* \"#utility.yul\":1644:1645 */\n dup3\n /* \"#utility.yul\":1626:1646 */\n tag_16\n jump\t// in\n tag_41:\n /* \"#utility.yul\":1621:1646 */\n swap2\n pop\n /* \"#utility.yul\":1660:1680 */\n tag_42\n /* \"#utility.yul\":1678:1679 */\n dup4\n /* \"#utility.yul\":1660:1680 */\n tag_16\n jump\t// in\n tag_42:\n /* \"#utility.yul\":1655:1680 */\n swap3\n pop\n /* \"#utility.yul\":1848:1849 */\n dup2\n /* \"#utility.yul\":1780:1846 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1776:1850 */\n div\n /* \"#utility.yul\":1773:1774 */\n dup4\n /* \"#utility.yul\":1770:1851 */\n gt\n /* \"#utility.yul\":1765:1766 */\n dup3\n /* \"#utility.yul\":1758:1767 */\n iszero\n /* \"#utility.yul\":1751:1768 */\n iszero\n /* \"#utility.yul\":1747:1852 */\n and\n /* \"#utility.yul\":1744:1875 */\n iszero\n tag_43\n jumpi\n /* \"#utility.yul\":1855:1873 */\n tag_44\n tag_20\n jump\t// in\n tag_44:\n /* \"#utility.yul\":1744:1875 */\n tag_43:\n /* \"#utility.yul\":1903:1904 */\n dup3\n /* \"#utility.yul\":1900:1901 */\n dup3\n /* \"#utility.yul\":1896:1905 */\n mul\n /* \"#utility.yul\":1885:1905 */\n swap1\n pop\n /* \"#utility.yul\":1563:1911 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122088e950668b5748e91e84dcbc79d123fb0de9f319d0e6de9e07622c37f53d39eb64736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506101c7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a600480360381019061004591906100b1565b610060565b60405161005791906100ed565b60405180910390f35b600060078261006f9190610137565b9050919050565b600080fd5b6000819050919050565b61008e8161007b565b811461009957600080fd5b50565b6000813590506100ab81610085565b92915050565b6000602082840312156100c7576100c6610076565b5b60006100d58482850161009c565b91505092915050565b6100e78161007b565b82525050565b600060208201905061010260008301846100de565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101428261007b565b915061014d8361007b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561018657610185610108565b5b82820290509291505056fea264697066735822122088e950668b5748e91e84dcbc79d123fb0de9f319d0e6de9e07622c37f53d39eb64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C7 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xB1 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0x137 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8E DUP2 PUSH2 0x7B JUMP JUMPDEST DUP2 EQ PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xAB DUP2 PUSH2 0x85 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC7 JUMPI PUSH2 0xC6 PUSH2 0x76 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD5 DUP5 DUP3 DUP6 ADD PUSH2 0x9C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xE7 DUP2 PUSH2 0x7B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x102 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xDE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x142 DUP3 PUSH2 0x7B JUMP JUMPDEST SWAP2 POP PUSH2 0x14D DUP4 PUSH2 0x7B JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x186 JUMPI PUSH2 0x185 PUSH2 0x108 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xE9 POP PUSH7 0x8B5748E91E84DC 0xBC PUSH26 0xD123FB0DE9F319D0E6DE9E07622C37F53D39EB64736F6C634300 ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:119:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@multiply_13": { + "entryPoint": 96, + "id": 13, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 156, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": 177, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 222, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 237, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_mul_t_uint256": { + "entryPoint": 311, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 123, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 264, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 118, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 133, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1914:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:1", + "type": "" + } + ], + "src": "7:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:1", + "type": "" + } + ], + "src": "334:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:1" + }, + "nodeType": "YulIf", + "src": "470:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:1", + "type": "" + } + ], + "src": "417:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "597:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "607:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "629:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "616:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "616:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "607:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "672:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "645:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "645:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "645:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "575:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "583:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "591:5:1", + "type": "" + } + ], + "src": "545:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "756:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "802:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "804:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "804:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "804:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "777:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "786:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "773:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "773:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "798:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "769:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "769:32:1" + }, + "nodeType": "YulIf", + "src": "766:119:1" + }, + { + "nodeType": "YulBlock", + "src": "895:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "910:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "924:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "914:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "939:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "974:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "985:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "970:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "970:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "994:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "949:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "949:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "939:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "726:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "737:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "749:6:1", + "type": "" + } + ], + "src": "690:329:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1090:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1107:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1130:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1112:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1112:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1100:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1100:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1100:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1078:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1085:3:1", + "type": "" + } + ], + "src": "1025:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1247:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1257:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1269:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1280:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1265:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1265:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1257:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1337:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1350:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1361:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1346:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1346:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "1293:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "1293:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1293:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1219:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1231:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1242:4:1", + "type": "" + } + ], + "src": "1149:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1405:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1422:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1425:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1415:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1415:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1415:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1519:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1522:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1512:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1512:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1512:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1543:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1546:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1536:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1536:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1536:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1377:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1611:300:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1621:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1644:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1626:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1626:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1621:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1655:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1678:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1660:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1660:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1655:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1853:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1855:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "1855:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1855:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1765:1:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1758:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1758:9:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1751:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1751:17:1" + }, + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1773:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1780:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1848:1:1" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "1776:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1776:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1770:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1770:81:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1747:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1747:105:1" + }, + "nodeType": "YulIf", + "src": "1744:131:1" + }, + { + "nodeType": "YulAssignment", + "src": "1885:20:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1900:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1903:1:1" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "1896:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1896:9:1" + }, + "variableNames": [ + { + "name": "product", + "nodeType": "YulIdentifier", + "src": "1885:7:1" + } + ] + } + ] + }, + "name": "checked_mul_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "1594:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "1597:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "product", + "nodeType": "YulTypedName", + "src": "1603:7:1", + "type": "" + } + ], + "src": "1563:348:1" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a600480360381019061004591906100b1565b610060565b60405161005791906100ed565b60405180910390f35b600060078261006f9190610137565b9050919050565b600080fd5b6000819050919050565b61008e8161007b565b811461009957600080fd5b50565b6000813590506100ab81610085565b92915050565b6000602082840312156100c7576100c6610076565b5b60006100d58482850161009c565b91505092915050565b6100e78161007b565b82525050565b600060208201905061010260008301846100de565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006101428261007b565b915061014d8361007b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561018657610185610108565b5b82820290509291505056fea264697066735822122088e950668b5748e91e84dcbc79d123fb0de9f319d0e6de9e07622c37f53d39eb64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0xB1 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xED JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0x137 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x8E DUP2 PUSH2 0x7B JUMP JUMPDEST DUP2 EQ PUSH2 0x99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xAB DUP2 PUSH2 0x85 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC7 JUMPI PUSH2 0xC6 PUSH2 0x76 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD5 DUP5 DUP3 DUP6 ADD PUSH2 0x9C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xE7 DUP2 PUSH2 0x7B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x102 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xDE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x142 DUP3 PUSH2 0x7B JUMP JUMPDEST SWAP2 POP PUSH2 0x14D DUP4 PUSH2 0x7B JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x186 JUMPI PUSH2 0x185 PUSH2 0x108 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0xE9 POP PUSH7 0x8B5748E91E84DC 0xBC PUSH26 0xD123FB0DE9F319D0E6DE9E07622C37F53D39EB64736F6C634300 ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;144:9;176:1;172;:5;;;;:::i;:::-;165:12;;94:90;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:180::-;1425:77;1422:1;1415:88;1522:4;1519:1;1512:15;1546:4;1543:1;1536:15;1563:348;1603:7;1626:20;1644:1;1626:20;:::i;:::-;1621:25;;1660:20;1678:1;1660:20;:::i;:::-;1655:25;;1848:1;1780:66;1776:74;1773:1;1770:81;1765:1;1758:9;1751:17;1747:105;1744:131;;;1855:18;;:::i;:::-;1744:131;1903:1;1900;1896:9;1885:20;;1563:348;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "91000", + "executionCost": "141", + "totalCost": "91141" + }, + "external": { "multiply(uint256)": "infinite" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 186, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 186, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 186, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 186, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 186, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 186, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 186, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 186, "name": "tag", "source": 0, "value": "1" }, + { "begin": 67, "end": 186, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 186, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 67, "end": 186, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 186, "name": "CODECOPY", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 186, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122088e950668b5748e91e84dcbc79d123fb0de9f319d0e6de9e07622c37f53d39eb64736f6c634300080b0033", + ".code": [ + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 186, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 186, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 186, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 186, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 186, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 186, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 186, "name": "REVERT", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 186, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 186, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 186, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 186, "name": "LT", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 186, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 186, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 67, "end": 186, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 186, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "C6888FA1" + }, + { "begin": 67, "end": 186, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 67, "end": 186, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 186, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 186, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 186, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 186, "name": "REVERT", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 94, "end": 184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 94, + "end": 184, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 94, "end": 184, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 184, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 94, "end": 184, "name": "SUB", "source": 0 }, + { "begin": 94, "end": 184, "name": "DUP2", "source": 0 }, + { "begin": 94, "end": 184, "name": "ADD", "source": 0 }, + { "begin": 94, "end": 184, "name": "SWAP1", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 94, "end": 184, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 184, "name": "SWAP1", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 94, + "end": 184, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 94, + "end": 184, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 94, "end": 184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 94, + "end": 184, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 94, + "end": 184, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 94, "end": 184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 184, "name": "MLOAD", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 94, "end": 184, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 184, "name": "SWAP1", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 94, + "end": 184, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 94, + "end": 184, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 94, "end": 184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 184, "name": "MLOAD", "source": 0 }, + { "begin": 94, "end": 184, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 184, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 184, "name": "SUB", "source": 0 }, + { "begin": 94, "end": 184, "name": "SWAP1", "source": 0 }, + { "begin": 94, "end": 184, "name": "RETURN", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 94, "end": 184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 144, + "end": 153, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 176, + "end": 177, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 172, "end": 173, "name": "DUP3", "source": 0 }, + { + "begin": 172, + "end": 177, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 172, "end": 177, "name": "SWAP2", "source": 0 }, + { "begin": 172, "end": 177, "name": "SWAP1", "source": 0 }, + { + "begin": 172, + "end": 177, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 172, + "end": 177, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 172, + "end": 177, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 172, "end": 177, "name": "JUMPDEST", "source": 0 }, + { "begin": 165, "end": 177, "name": "SWAP1", "source": 0 }, + { "begin": 165, "end": 177, "name": "POP", "source": 0 }, + { "begin": 94, "end": 184, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 184, "name": "SWAP1", "source": 0 }, + { "begin": 94, "end": 184, "name": "POP", "source": 0 }, + { + "begin": 94, + "end": 184, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 88, + "end": 205, + "name": "tag", + "source": 1, + "value": "14" + }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { + "begin": 197, + "end": 198, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, + { + "begin": 334, + "end": 411, + "name": "tag", + "source": 1, + "value": "16" + }, + { "begin": 334, "end": 411, "name": "JUMPDEST", "source": 1 }, + { + "begin": 371, + "end": 378, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 400, "end": 405, "name": "DUP2", "source": 1 }, + { "begin": 389, "end": 405, "name": "SWAP1", "source": 1 }, + { "begin": 389, "end": 405, "name": "POP", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP1", "source": 1 }, + { "begin": 334, "end": 411, "name": "POP", "source": 1 }, + { + "begin": 334, + "end": 411, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 417, + "end": 539, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 417, "end": 539, "name": "JUMPDEST", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { "begin": 508, "end": 513, "name": "DUP2", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 490, + "end": 514, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 490, + "end": 514, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 490, "end": 514, "name": "JUMPDEST", "source": 1 }, + { "begin": 483, "end": 488, "name": "DUP2", "source": 1 }, + { "begin": 480, "end": 515, "name": "EQ", "source": 1 }, + { + "begin": 470, + "end": 533, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { "begin": 470, "end": 533, "name": "JUMPI", "source": 1 }, + { + "begin": 529, + "end": 530, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 526, "end": 527, "name": "DUP1", "source": 1 }, + { "begin": 519, "end": 531, "name": "REVERT", "source": 1 }, + { + "begin": 470, + "end": 533, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 470, "end": 533, "name": "JUMPDEST", "source": 1 }, + { "begin": 417, "end": 539, "name": "POP", "source": 1 }, + { + "begin": 417, + "end": 539, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 545, + "end": 684, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 545, "end": 684, "name": "JUMPDEST", "source": 1 }, + { + "begin": 591, + "end": 596, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 629, "end": 635, "name": "DUP2", "source": 1 }, + { "begin": 616, "end": 636, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 607, "end": 636, "name": "SWAP1", "source": 1 }, + { "begin": 607, "end": 636, "name": "POP", "source": 1 }, + { + "begin": 645, + "end": 678, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { "begin": 672, "end": 677, "name": "DUP2", "source": 1 }, + { + "begin": 645, + "end": 678, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 645, + "end": 678, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 645, + "end": 678, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 645, "end": 678, "name": "JUMPDEST", "source": 1 }, + { "begin": 545, "end": 684, "name": "SWAP3", "source": 1 }, + { "begin": 545, "end": 684, "name": "SWAP2", "source": 1 }, + { "begin": 545, "end": 684, "name": "POP", "source": 1 }, + { "begin": 545, "end": 684, "name": "POP", "source": 1 }, + { + "begin": 545, + "end": 684, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 690, + "end": 1019, + "name": "tag", + "source": 1, + "value": "6" + }, + { "begin": 690, "end": 1019, "name": "JUMPDEST", "source": 1 }, + { + "begin": 749, + "end": 755, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 798, + "end": 800, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 786, "end": 795, "name": "DUP3", "source": 1 }, + { "begin": 777, "end": 784, "name": "DUP5", "source": 1 }, + { "begin": 773, "end": 796, "name": "SUB", "source": 1 }, + { "begin": 769, "end": 801, "name": "SLT", "source": 1 }, + { "begin": 766, "end": 885, "name": "ISZERO", "source": 1 }, + { + "begin": 766, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { "begin": 766, "end": 885, "name": "JUMPI", "source": 1 }, + { + "begin": 804, + "end": 883, + "name": "PUSH [tag]", + "source": 1, + "value": "33" + }, + { + "begin": 804, + "end": 883, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { + "begin": 804, + "end": 883, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 804, + "end": 883, + "name": "tag", + "source": 1, + "value": "33" + }, + { "begin": 804, "end": 883, "name": "JUMPDEST", "source": 1 }, + { + "begin": 766, + "end": 885, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 766, "end": 885, "name": "JUMPDEST", "source": 1 }, + { + "begin": 924, + "end": 925, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 949, + "end": 1002, + "name": "PUSH [tag]", + "source": 1, + "value": "34" + }, + { "begin": 994, "end": 1001, "name": "DUP5", "source": 1 }, + { "begin": 985, "end": 991, "name": "DUP3", "source": 1 }, + { "begin": 974, "end": 983, "name": "DUP6", "source": 1 }, + { "begin": 970, "end": 992, "name": "ADD", "source": 1 }, + { + "begin": 949, + "end": 1002, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 949, + "end": 1002, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 949, + "end": 1002, + "name": "tag", + "source": 1, + "value": "34" + }, + { "begin": 949, "end": 1002, "name": "JUMPDEST", "source": 1 }, + { "begin": 939, "end": 1002, "name": "SWAP2", "source": 1 }, + { "begin": 939, "end": 1002, "name": "POP", "source": 1 }, + { "begin": 895, "end": 1012, "name": "POP", "source": 1 }, + { "begin": 690, "end": 1019, "name": "SWAP3", "source": 1 }, + { "begin": 690, "end": 1019, "name": "SWAP2", "source": 1 }, + { "begin": 690, "end": 1019, "name": "POP", "source": 1 }, + { "begin": 690, "end": 1019, "name": "POP", "source": 1 }, + { + "begin": 690, + "end": 1019, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1025, + "end": 1143, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 1025, "end": 1143, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1112, + "end": 1136, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 1130, "end": 1135, "name": "DUP2", "source": 1 }, + { + "begin": 1112, + "end": 1136, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 1112, + "end": 1136, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1112, + "end": 1136, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 1112, "end": 1136, "name": "JUMPDEST", "source": 1 }, + { "begin": 1107, "end": 1110, "name": "DUP3", "source": 1 }, + { "begin": 1100, "end": 1137, "name": "MSTORE", "source": 1 }, + { "begin": 1025, "end": 1143, "name": "POP", "source": 1 }, + { "begin": 1025, "end": 1143, "name": "POP", "source": 1 }, + { + "begin": 1025, + "end": 1143, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1149, + "end": 1371, + "name": "tag", + "source": 1, + "value": "9" + }, + { "begin": 1149, "end": 1371, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1242, + "end": 1246, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1280, + "end": 1282, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1269, "end": 1278, "name": "DUP3", "source": 1 }, + { "begin": 1265, "end": 1283, "name": "ADD", "source": 1 }, + { "begin": 1257, "end": 1283, "name": "SWAP1", "source": 1 }, + { "begin": 1257, "end": 1283, "name": "POP", "source": 1 }, + { + "begin": 1293, + "end": 1364, + "name": "PUSH [tag]", + "source": 1, + "value": "38" + }, + { + "begin": 1361, + "end": 1362, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1350, "end": 1359, "name": "DUP4", "source": 1 }, + { "begin": 1346, "end": 1363, "name": "ADD", "source": 1 }, + { "begin": 1337, "end": 1343, "name": "DUP5", "source": 1 }, + { + "begin": 1293, + "end": 1364, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { + "begin": 1293, + "end": 1364, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1293, + "end": 1364, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 1293, "end": 1364, "name": "JUMPDEST", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "SWAP3", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "SWAP2", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "POP", "source": 1 }, + { "begin": 1149, "end": 1371, "name": "POP", "source": 1 }, + { + "begin": 1149, + "end": 1371, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1377, + "end": 1557, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 1377, "end": 1557, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1425, + "end": 1502, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1422, + "end": 1423, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1415, "end": 1503, "name": "MSTORE", "source": 1 }, + { + "begin": 1522, + "end": 1526, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1519, + "end": 1520, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1512, "end": 1527, "name": "MSTORE", "source": 1 }, + { + "begin": 1546, + "end": 1550, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1543, + "end": 1544, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1536, "end": 1551, "name": "REVERT", "source": 1 }, + { + "begin": 1563, + "end": 1911, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 1563, "end": 1911, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1603, + "end": 1610, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1626, + "end": 1646, + "name": "PUSH [tag]", + "source": 1, + "value": "41" + }, + { "begin": 1644, "end": 1645, "name": "DUP3", "source": 1 }, + { + "begin": 1626, + "end": 1646, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 1626, + "end": 1646, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1626, + "end": 1646, + "name": "tag", + "source": 1, + "value": "41" + }, + { "begin": 1626, "end": 1646, "name": "JUMPDEST", "source": 1 }, + { "begin": 1621, "end": 1646, "name": "SWAP2", "source": 1 }, + { "begin": 1621, "end": 1646, "name": "POP", "source": 1 }, + { + "begin": 1660, + "end": 1680, + "name": "PUSH [tag]", + "source": 1, + "value": "42" + }, + { "begin": 1678, "end": 1679, "name": "DUP4", "source": 1 }, + { + "begin": 1660, + "end": 1680, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 1660, + "end": 1680, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1660, + "end": 1680, + "name": "tag", + "source": 1, + "value": "42" + }, + { "begin": 1660, "end": 1680, "name": "JUMPDEST", "source": 1 }, + { "begin": 1655, "end": 1680, "name": "SWAP3", "source": 1 }, + { "begin": 1655, "end": 1680, "name": "POP", "source": 1 }, + { "begin": 1848, "end": 1849, "name": "DUP2", "source": 1 }, + { + "begin": 1780, + "end": 1846, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1776, "end": 1850, "name": "DIV", "source": 1 }, + { "begin": 1773, "end": 1774, "name": "DUP4", "source": 1 }, + { "begin": 1770, "end": 1851, "name": "GT", "source": 1 }, + { "begin": 1765, "end": 1766, "name": "DUP3", "source": 1 }, + { "begin": 1758, "end": 1767, "name": "ISZERO", "source": 1 }, + { "begin": 1751, "end": 1768, "name": "ISZERO", "source": 1 }, + { "begin": 1747, "end": 1852, "name": "AND", "source": 1 }, + { "begin": 1744, "end": 1875, "name": "ISZERO", "source": 1 }, + { + "begin": 1744, + "end": 1875, + "name": "PUSH [tag]", + "source": 1, + "value": "43" + }, + { "begin": 1744, "end": 1875, "name": "JUMPI", "source": 1 }, + { + "begin": 1855, + "end": 1873, + "name": "PUSH [tag]", + "source": 1, + "value": "44" + }, + { + "begin": 1855, + "end": 1873, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 1855, + "end": 1873, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1855, + "end": 1873, + "name": "tag", + "source": 1, + "value": "44" + }, + { "begin": 1855, "end": 1873, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1744, + "end": 1875, + "name": "tag", + "source": 1, + "value": "43" + }, + { "begin": 1744, "end": 1875, "name": "JUMPDEST", "source": 1 }, + { "begin": 1903, "end": 1904, "name": "DUP3", "source": 1 }, + { "begin": 1900, "end": 1901, "name": "DUP3", "source": 1 }, + { "begin": 1896, "end": 1905, "name": "MUL", "source": 1 }, + { "begin": 1885, "end": 1905, "name": "SWAP1", "source": 1 }, + { "begin": 1885, "end": 1905, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1911, "name": "SWAP3", "source": 1 }, + { "begin": 1563, "end": 1911, "name": "SWAP2", "source": 1 }, + { "begin": 1563, "end": 1911, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1911, "name": "POP", "source": 1 }, + { + "begin": 1563, + "end": 1911, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { "multiply(uint256)": "c6888fa1" } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"MultiplyBy7\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xbbd8bcb5080a52754c223807b13cb55c325dfc9316202b866f2f051c2944c6e8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://a9d67576bf7ae352a135fc4c10dddde44c9b099f4bfc487e0235ac977522c1e4\",\"dweb:/ipfs/QmeWSLT7i59zwv9xBTx2E8secVvkHZQdSSVzp3Mzfihh5j\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract MultiplyBy7 {\n function multiply(uint256 a) public pure returns (uint256 d) {\n return a * 7;\n }\n}\n" +} diff --git a/tests/contracts/compiled/OverflowingTrace.json b/tests/contracts/compiled/OverflowingTrace.json deleted file mode 100644 index 9ac1ead8e4..0000000000 --- a/tests/contracts/compiled/OverflowingTrace.json +++ /dev/null @@ -1,3681 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b50610406806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b582ec5f11610071578063b582ec5f14610156578063b8c9d36514610174578063c3da42b814610192578063e2179b8e146101b0578063e5aa3d58146101ce578063ffae15ba146101ec576100a9565b80630dbe671f146100ae57806313128fdc146100cc57806326121ff0146100fc5780634df7e3d01461011a5780638a054ac214610138575b600080fd5b6100b661020a565b6040516100c3919061030f565b60405180910390f35b6100e660048036038101906100e191906102d7565b610210565b6040516100f3919061030f565b60405180910390f35b61010461028c565b604051610111919061030f565b60405180910390f35b610122610292565b60405161012f919061030f565b60405180910390f35b610140610298565b60405161014d919061030f565b60405180910390f35b61015e61029e565b60405161016b919061030f565b60405180910390f35b61017c6102a4565b604051610189919061030f565b60405180910390f35b61019a6102aa565b6040516101a7919061030f565b60405180910390f35b6101b86102b0565b6040516101c5919061030f565b60405180910390f35b6101d66102b6565b6040516101e3919061030f565b60405180910390f35b6101f46102bc565b604051610201919061030f565b60405180910390f35b60005481565b60006001600081905550600180819055506001600281905550600160038190555060016004819055506001600581905550600160068190555060016007819055506001600881905550600160098190555060005b8260085410156102825760018161027b919061032a565b9050610264565b6001915050919050565b60055481565b60015481565b60035481565b60095481565b60075481565b60025481565b60065481565b60085481565b60045481565b6000813590506102d1816103b9565b92915050565b6000602082840312156102e957600080fd5b60006102f7848285016102c2565b91505092915050565b61030981610380565b82525050565b60006020820190506103246000830184610300565b92915050565b600061033582610380565b915061034083610380565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103755761037461038a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6103c281610380565b81146103cd57600080fd5b5056fea264697066735822122056a15a4ea3f0f385fd4e642aec057df3cc5c39b231cc2321bb528e5a3db7ca9364736f6c63430008040033", - "contract": { - "abi": [ - { - "inputs": [], - "name": "a", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "b", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "c", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "d", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "e", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "f", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "g", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "h", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "i", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "j", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "loops", "type": "uint256" } - ], - "name": "set_and_loop", - "outputs": [ - { "internalType": "uint256", "name": "result", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":38:752 contract OverflowingTrace {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":38:752 contract OverflowingTrace {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xb582ec5f\n gt\n tag_14\n jumpi\n dup1\n 0xb582ec5f\n eq\n tag_8\n jumpi\n dup1\n 0xb8c9d365\n eq\n tag_9\n jumpi\n dup1\n 0xc3da42b8\n eq\n tag_10\n jumpi\n dup1\n 0xe2179b8e\n eq\n tag_11\n jumpi\n dup1\n 0xe5aa3d58\n eq\n tag_12\n jumpi\n dup1\n 0xffae15ba\n eq\n tag_13\n jumpi\n jump(tag_2)\n tag_14:\n dup1\n 0x0dbe671f\n eq\n tag_3\n jumpi\n dup1\n 0x13128fdc\n eq\n tag_4\n jumpi\n dup1\n 0x26121ff0\n eq\n tag_5\n jumpi\n dup1\n 0x4df7e3d0\n eq\n tag_6\n jumpi\n dup1\n 0x8a054ac2\n eq\n tag_7\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":76:89 uint public a */\n tag_3:\n tag_15\n tag_16\n jump\t// in\n tag_15:\n mload(0x40)\n tag_17\n swap2\n swap1\n tag_18\n jump\t// in\n tag_17:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":326:744 function set_and_loop(uint loops) public returns (uint result) {... */\n tag_4:\n tag_19\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_20\n swap2\n swap1\n tag_21\n jump\t// in\n tag_20:\n tag_22\n jump\t// in\n tag_19:\n mload(0x40)\n tag_23\n swap2\n swap1\n tag_18\n jump\t// in\n tag_23:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":201:214 uint public f */\n tag_5:\n tag_24\n tag_25\n jump\t// in\n tag_24:\n mload(0x40)\n tag_26\n swap2\n swap1\n tag_18\n jump\t// in\n tag_26:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":101:114 uint public b */\n tag_6:\n tag_27\n tag_28\n jump\t// in\n tag_27:\n mload(0x40)\n tag_29\n swap2\n swap1\n tag_18\n jump\t// in\n tag_29:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":151:164 uint public d */\n tag_7:\n tag_30\n tag_31\n jump\t// in\n tag_30:\n mload(0x40)\n tag_32\n swap2\n swap1\n tag_18\n jump\t// in\n tag_32:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":301:314 uint public j */\n tag_8:\n tag_33\n tag_34\n jump\t// in\n tag_33:\n mload(0x40)\n tag_35\n swap2\n swap1\n tag_18\n jump\t// in\n tag_35:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":251:264 uint public h */\n tag_9:\n tag_36\n tag_37\n jump\t// in\n tag_36:\n mload(0x40)\n tag_38\n swap2\n swap1\n tag_18\n jump\t// in\n tag_38:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":126:139 uint public c */\n tag_10:\n tag_39\n tag_40\n jump\t// in\n tag_39:\n mload(0x40)\n tag_41\n swap2\n swap1\n tag_18\n jump\t// in\n tag_41:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":226:239 uint public g */\n tag_11:\n tag_42\n tag_43\n jump\t// in\n tag_42:\n mload(0x40)\n tag_44\n swap2\n swap1\n tag_18\n jump\t// in\n tag_44:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":276:289 uint public i */\n tag_12:\n tag_45\n tag_46\n jump\t// in\n tag_45:\n mload(0x40)\n tag_47\n swap2\n swap1\n tag_18\n jump\t// in\n tag_47:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":176:189 uint public e */\n tag_13:\n tag_48\n tag_49\n jump\t// in\n tag_48:\n mload(0x40)\n tag_50\n swap2\n swap1\n tag_18\n jump\t// in\n tag_50:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":76:89 uint public a */\n tag_16:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":326:744 function set_and_loop(uint loops) public returns (uint result) {... */\n tag_22:\n /* \"main.sol\":376:387 uint result */\n 0x00\n /* \"main.sol\":409:410 1 */\n 0x01\n /* \"main.sol\":405:406 a */\n 0x00\n /* \"main.sol\":405:410 a = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":430:431 1 */\n 0x01\n /* \"main.sol\":426:427 b */\n dup1\n /* \"main.sol\":426:431 b = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":451:452 1 */\n 0x01\n /* \"main.sol\":447:448 c */\n 0x02\n /* \"main.sol\":447:452 c = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":472:473 1 */\n 0x01\n /* \"main.sol\":468:469 d */\n 0x03\n /* \"main.sol\":468:473 d = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":493:494 1 */\n 0x01\n /* \"main.sol\":489:490 e */\n 0x04\n /* \"main.sol\":489:494 e = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":514:515 1 */\n 0x01\n /* \"main.sol\":510:511 f */\n 0x05\n /* \"main.sol\":510:515 f = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":535:536 1 */\n 0x01\n /* \"main.sol\":531:532 g */\n 0x06\n /* \"main.sol\":531:536 g = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":556:557 1 */\n 0x01\n /* \"main.sol\":552:553 h */\n 0x07\n /* \"main.sol\":552:557 h = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":577:578 1 */\n 0x01\n /* \"main.sol\":573:574 i */\n 0x08\n /* \"main.sol\":573:578 i = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":598:599 1 */\n 0x01\n /* \"main.sol\":594:595 j */\n 0x09\n /* \"main.sol\":594:599 j = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":615:625 uint count */\n 0x00\n /* \"main.sol\":645:708 while (i < loops) {... */\n tag_52:\n /* \"main.sol\":656:661 loops */\n dup3\n /* \"main.sol\":652:653 i */\n sload(0x08)\n /* \"main.sol\":652:661 i < loops */\n lt\n /* \"main.sol\":645:708 while (i < loops) {... */\n iszero\n tag_53\n jumpi\n /* \"main.sol\":690:691 1 */\n 0x01\n /* \"main.sol\":681:691 count += 1 */\n dup2\n tag_54\n swap2\n swap1\n tag_55\n jump\t// in\n tag_54:\n swap1\n pop\n /* \"main.sol\":645:708 while (i < loops) {... */\n jump(tag_52)\n tag_53:\n /* \"main.sol\":730:731 1 */\n 0x01\n /* \"main.sol\":723:731 return 1 */\n swap2\n pop\n pop\n /* \"main.sol\":326:744 function set_and_loop(uint loops) public returns (uint result) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":201:214 uint public f */\n tag_25:\n sload(0x05)\n dup2\n jump\t// out\n /* \"main.sol\":101:114 uint public b */\n tag_28:\n sload(0x01)\n dup2\n jump\t// out\n /* \"main.sol\":151:164 uint public d */\n tag_31:\n sload(0x03)\n dup2\n jump\t// out\n /* \"main.sol\":301:314 uint public j */\n tag_34:\n sload(0x09)\n dup2\n jump\t// out\n /* \"main.sol\":251:264 uint public h */\n tag_37:\n sload(0x07)\n dup2\n jump\t// out\n /* \"main.sol\":126:139 uint public c */\n tag_40:\n sload(0x02)\n dup2\n jump\t// out\n /* \"main.sol\":226:239 uint public g */\n tag_43:\n sload(0x06)\n dup2\n jump\t// out\n /* \"main.sol\":276:289 uint public i */\n tag_46:\n sload(0x08)\n dup2\n jump\t// out\n /* \"main.sol\":176:189 uint public e */\n tag_49:\n sload(0x04)\n dup2\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_57:\n /* \"#utility.yul\":53:58 */\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_59\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_60\n jump\t// in\n tag_59:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_21:\n /* \"#utility.yul\":211:217 */\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_62\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_62:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_63\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_57\n jump\t// in\n tag_63:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:538 */\n tag_64:\n /* \"#utility.yul\":507:531 */\n tag_66\n /* \"#utility.yul\":525:530 */\n dup2\n /* \"#utility.yul\":507:531 */\n tag_67\n jump\t// in\n tag_66:\n /* \"#utility.yul\":502:505 */\n dup3\n /* \"#utility.yul\":495:532 */\n mstore\n /* \"#utility.yul\":485:538 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":544:766 */\n tag_18:\n /* \"#utility.yul\":637:641 */\n 0x00\n /* \"#utility.yul\":675:677 */\n 0x20\n /* \"#utility.yul\":664:673 */\n dup3\n /* \"#utility.yul\":660:678 */\n add\n /* \"#utility.yul\":652:678 */\n swap1\n pop\n /* \"#utility.yul\":688:759 */\n tag_69\n /* \"#utility.yul\":756:757 */\n 0x00\n /* \"#utility.yul\":745:754 */\n dup4\n /* \"#utility.yul\":741:758 */\n add\n /* \"#utility.yul\":732:738 */\n dup5\n /* \"#utility.yul\":688:759 */\n tag_64\n jump\t// in\n tag_69:\n /* \"#utility.yul\":642:766 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":772:1077 */\n tag_55:\n /* \"#utility.yul\":812:815 */\n 0x00\n /* \"#utility.yul\":831:851 */\n tag_71\n /* \"#utility.yul\":849:850 */\n dup3\n /* \"#utility.yul\":831:851 */\n tag_67\n jump\t// in\n tag_71:\n /* \"#utility.yul\":826:851 */\n swap2\n pop\n /* \"#utility.yul\":865:885 */\n tag_72\n /* \"#utility.yul\":883:884 */\n dup4\n /* \"#utility.yul\":865:885 */\n tag_67\n jump\t// in\n tag_72:\n /* \"#utility.yul\":860:885 */\n swap3\n pop\n /* \"#utility.yul\":1019:1020 */\n dup3\n /* \"#utility.yul\":951:1017 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":947:1021 */\n sub\n /* \"#utility.yul\":944:945 */\n dup3\n /* \"#utility.yul\":941:1022 */\n gt\n /* \"#utility.yul\":938:940 */\n iszero\n tag_73\n jumpi\n /* \"#utility.yul\":1025:1043 */\n tag_74\n tag_75\n jump\t// in\n tag_74:\n /* \"#utility.yul\":938:940 */\n tag_73:\n /* \"#utility.yul\":1069:1070 */\n dup3\n /* \"#utility.yul\":1066:1067 */\n dup3\n /* \"#utility.yul\":1062:1071 */\n add\n /* \"#utility.yul\":1055:1071 */\n swap1\n pop\n /* \"#utility.yul\":816:1077 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1083:1160 */\n tag_67:\n /* \"#utility.yul\":1120:1127 */\n 0x00\n /* \"#utility.yul\":1149:1154 */\n dup2\n /* \"#utility.yul\":1138:1154 */\n swap1\n pop\n /* \"#utility.yul\":1128:1160 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1166:1346 */\n tag_75:\n /* \"#utility.yul\":1214:1291 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1211:1212 */\n 0x00\n /* \"#utility.yul\":1204:1292 */\n mstore\n /* \"#utility.yul\":1311:1315 */\n 0x11\n /* \"#utility.yul\":1308:1309 */\n 0x04\n /* \"#utility.yul\":1301:1316 */\n mstore\n /* \"#utility.yul\":1335:1339 */\n 0x24\n /* \"#utility.yul\":1332:1333 */\n 0x00\n /* \"#utility.yul\":1325:1340 */\n revert\n /* \"#utility.yul\":1352:1474 */\n tag_60:\n /* \"#utility.yul\":1425:1449 */\n tag_79\n /* \"#utility.yul\":1443:1448 */\n dup2\n /* \"#utility.yul\":1425:1449 */\n tag_67\n jump\t// in\n tag_79:\n /* \"#utility.yul\":1418:1423 */\n dup2\n /* \"#utility.yul\":1415:1450 */\n eq\n /* \"#utility.yul\":1405:1407 */\n tag_80\n jumpi\n /* \"#utility.yul\":1464:1465 */\n 0x00\n /* \"#utility.yul\":1461:1462 */\n dup1\n /* \"#utility.yul\":1454:1466 */\n revert\n /* \"#utility.yul\":1405:1407 */\n tag_80:\n /* \"#utility.yul\":1395:1474 */\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122056a15a4ea3f0f385fd4e642aec057df3cc5c39b231cc2321bb528e5a3db7ca9364736f6c63430008040033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50610406806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b582ec5f11610071578063b582ec5f14610156578063b8c9d36514610174578063c3da42b814610192578063e2179b8e146101b0578063e5aa3d58146101ce578063ffae15ba146101ec576100a9565b80630dbe671f146100ae57806313128fdc146100cc57806326121ff0146100fc5780634df7e3d01461011a5780638a054ac214610138575b600080fd5b6100b661020a565b6040516100c3919061030f565b60405180910390f35b6100e660048036038101906100e191906102d7565b610210565b6040516100f3919061030f565b60405180910390f35b61010461028c565b604051610111919061030f565b60405180910390f35b610122610292565b60405161012f919061030f565b60405180910390f35b610140610298565b60405161014d919061030f565b60405180910390f35b61015e61029e565b60405161016b919061030f565b60405180910390f35b61017c6102a4565b604051610189919061030f565b60405180910390f35b61019a6102aa565b6040516101a7919061030f565b60405180910390f35b6101b86102b0565b6040516101c5919061030f565b60405180910390f35b6101d66102b6565b6040516101e3919061030f565b60405180910390f35b6101f46102bc565b604051610201919061030f565b60405180910390f35b60005481565b60006001600081905550600180819055506001600281905550600160038190555060016004819055506001600581905550600160068190555060016007819055506001600881905550600160098190555060005b8260085410156102825760018161027b919061032a565b9050610264565b6001915050919050565b60055481565b60015481565b60035481565b60095481565b60075481565b60025481565b60065481565b60085481565b60045481565b6000813590506102d1816103b9565b92915050565b6000602082840312156102e957600080fd5b60006102f7848285016102c2565b91505092915050565b61030981610380565b82525050565b60006020820190506103246000830184610300565b92915050565b600061033582610380565b915061034083610380565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103755761037461038a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6103c281610380565b81146103cd57600080fd5b5056fea264697066735822122056a15a4ea3f0f385fd4e642aec057df3cc5c39b231cc2321bb528e5a3db7ca9364736f6c63430008040033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x406 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB582EC5F GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB582EC5F EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0xB8C9D365 EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xC3DA42B8 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xE2179B8E EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0xE5AA3D58 EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0xFFAE15BA EQ PUSH2 0x1EC JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0xDBE671F EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x13128FDC EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x26121FF0 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x4DF7E3D0 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x8A054AC2 EQ PUSH2 0x138 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x20A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE6 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0x2D7 JUMP JUMPDEST PUSH2 0x210 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x104 PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x111 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x122 PUSH2 0x292 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH2 0x298 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14D SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x15E PUSH2 0x29E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x16B SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17C PUSH2 0x2A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x189 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19A PUSH2 0x2AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A7 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B8 PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C5 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH2 0x2B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E3 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F4 PUSH2 0x2BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x201 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP1 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x5 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x7 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x8 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x9 DUP2 SWAP1 SSTORE POP PUSH1 0x0 JUMPDEST DUP3 PUSH1 0x8 SLOAD LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x1 DUP2 PUSH2 0x27B SWAP2 SWAP1 PUSH2 0x32A JUMP JUMPDEST SWAP1 POP PUSH2 0x264 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2D1 DUP2 PUSH2 0x3B9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F7 DUP5 DUP3 DUP6 ADD PUSH2 0x2C2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x309 DUP2 PUSH2 0x380 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x324 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x300 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x335 DUP3 PUSH2 0x380 JUMP JUMPDEST SWAP2 POP PUSH2 0x340 DUP4 PUSH2 0x380 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x375 JUMPI PUSH2 0x374 PUSH2 0x38A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3C2 DUP2 PUSH2 0x380 JUMP JUMPDEST DUP2 EQ PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP LOG1 GAS 0x4E LOG3 CREATE RETURN DUP6 REVERT 0x4E PUSH5 0x2AEC057DF3 0xCC 0x5C CODECOPY 0xB2 BALANCE 0xCC 0x23 0x21 0xBB MSTORE DUP15 GAS RETURNDATASIZE 0xB7 0xCA SWAP4 PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ", - "sourceMap": "38:714:0:-:0;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1477:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "59:87:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "69:29:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "91:6:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "78:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "78:20:1" - }, - "variableNames": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "69:5:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "134:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "107:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "107:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "107:33:1" - } - ] - }, - "name": "abi_decode_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "37:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "45:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "53:5:1", - "type": "" - } - ], - "src": "7:139:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "218:196:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "264:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "273:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "276:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "266:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "266:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "266:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "239:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "248:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "235:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "260:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "231:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "231:32:1" - }, - "nodeType": "YulIf", - "src": "228:2:1" - }, - { - "nodeType": "YulBlock", - "src": "290:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "305:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "319:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "309:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "334:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "369:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "380:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "365:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "389:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint256", - "nodeType": "YulIdentifier", - "src": "344:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "344:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "334:6:1" - } - ] - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "188:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "199:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "211:6:1", - "type": "" - } - ], - "src": "152:262:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "485:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "502:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "525:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "507:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "507:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "495:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "495:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "495:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "473:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "480:3:1", - "type": "" - } - ], - "src": "420:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "642:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "652:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "664:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "675:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "660:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "660:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "652:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "732:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "745:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "756:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "741:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "741:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "688:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "688:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "688:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "614:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "626:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "637:4:1", - "type": "" - } - ], - "src": "544:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "816:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "826:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "849:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "831:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "831:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "826:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "860:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "883:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "865:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "865:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "860:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1023:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "1025:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1025:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1025:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "944:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "951:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1019:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "947:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "947:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "941:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "941:81:1" - }, - "nodeType": "YulIf", - "src": "938:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "1055:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "1066:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "1069:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1062:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1062:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "1055:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "803:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "806:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "812:3:1", - "type": "" - } - ], - "src": "772:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1128:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1138:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1149:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1138:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1110:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1120:7:1", - "type": "" - } - ], - "src": "1083:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1194:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1211:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1214:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1204:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1204:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1204:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1308:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1311:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1301:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1301:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1301:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1332:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1335:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1325:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1325:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1325:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "1166:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1395:79:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1452:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1461:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1464:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1454:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1454:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1454:12:1" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1418:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1443:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1425:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1425:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1415:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1415:35:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1408:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1408:43:1" - }, - "nodeType": "YulIf", - "src": "1405:2:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1388:5:1", - "type": "" - } - ], - "src": "1352:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c8063b582ec5f11610071578063b582ec5f14610156578063b8c9d36514610174578063c3da42b814610192578063e2179b8e146101b0578063e5aa3d58146101ce578063ffae15ba146101ec576100a9565b80630dbe671f146100ae57806313128fdc146100cc57806326121ff0146100fc5780634df7e3d01461011a5780638a054ac214610138575b600080fd5b6100b661020a565b6040516100c3919061030f565b60405180910390f35b6100e660048036038101906100e191906102d7565b610210565b6040516100f3919061030f565b60405180910390f35b61010461028c565b604051610111919061030f565b60405180910390f35b610122610292565b60405161012f919061030f565b60405180910390f35b610140610298565b60405161014d919061030f565b60405180910390f35b61015e61029e565b60405161016b919061030f565b60405180910390f35b61017c6102a4565b604051610189919061030f565b60405180910390f35b61019a6102aa565b6040516101a7919061030f565b60405180910390f35b6101b86102b0565b6040516101c5919061030f565b60405180910390f35b6101d66102b6565b6040516101e3919061030f565b60405180910390f35b6101f46102bc565b604051610201919061030f565b60405180910390f35b60005481565b60006001600081905550600180819055506001600281905550600160038190555060016004819055506001600581905550600160068190555060016007819055506001600881905550600160098190555060005b8260085410156102825760018161027b919061032a565b9050610264565b6001915050919050565b60055481565b60015481565b60035481565b60095481565b60075481565b60025481565b60065481565b60085481565b60045481565b6000813590506102d1816103b9565b92915050565b6000602082840312156102e957600080fd5b60006102f7848285016102c2565b91505092915050565b61030981610380565b82525050565b60006020820190506103246000830184610300565b92915050565b600061033582610380565b915061034083610380565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156103755761037461038a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6103c281610380565b81146103cd57600080fd5b5056fea264697066735822122056a15a4ea3f0f385fd4e642aec057df3cc5c39b231cc2321bb528e5a3db7ca9364736f6c63430008040033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB582EC5F GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xB582EC5F EQ PUSH2 0x156 JUMPI DUP1 PUSH4 0xB8C9D365 EQ PUSH2 0x174 JUMPI DUP1 PUSH4 0xC3DA42B8 EQ PUSH2 0x192 JUMPI DUP1 PUSH4 0xE2179B8E EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0xE5AA3D58 EQ PUSH2 0x1CE JUMPI DUP1 PUSH4 0xFFAE15BA EQ PUSH2 0x1EC JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0xDBE671F EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x13128FDC EQ PUSH2 0xCC JUMPI DUP1 PUSH4 0x26121FF0 EQ PUSH2 0xFC JUMPI DUP1 PUSH4 0x4DF7E3D0 EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x8A054AC2 EQ PUSH2 0x138 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6 PUSH2 0x20A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE6 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE1 SWAP2 SWAP1 PUSH2 0x2D7 JUMP JUMPDEST PUSH2 0x210 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x104 PUSH2 0x28C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x111 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x122 PUSH2 0x292 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH2 0x298 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14D SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x15E PUSH2 0x29E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x16B SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x17C PUSH2 0x2A4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x189 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x19A PUSH2 0x2AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A7 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B8 PUSH2 0x2B0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C5 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH2 0x2B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E3 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1F4 PUSH2 0x2BC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x201 SWAP2 SWAP1 PUSH2 0x30F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP1 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x5 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x7 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x8 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x9 DUP2 SWAP1 SSTORE POP PUSH1 0x0 JUMPDEST DUP3 PUSH1 0x8 SLOAD LT ISZERO PUSH2 0x282 JUMPI PUSH1 0x1 DUP2 PUSH2 0x27B SWAP2 SWAP1 PUSH2 0x32A JUMP JUMPDEST SWAP1 POP PUSH2 0x264 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x2D1 DUP2 PUSH2 0x3B9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2F7 DUP5 DUP3 DUP6 ADD PUSH2 0x2C2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x309 DUP2 PUSH2 0x380 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x324 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x300 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x335 DUP3 PUSH2 0x380 JUMP JUMPDEST SWAP2 POP PUSH2 0x340 DUP4 PUSH2 0x380 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x375 JUMPI PUSH2 0x374 PUSH2 0x38A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x3C2 DUP2 PUSH2 0x380 JUMP JUMPDEST DUP2 EQ PUSH2 0x3CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMP LOG1 GAS 0x4E LOG3 CREATE RETURN DUP6 REVERT 0x4E PUSH5 0x2AEC057DF3 0xCC 0x5C CODECOPY 0xB2 BALANCE 0xCC 0x23 0x21 0xBB MSTORE DUP15 GAS RETURNDATASIZE 0xB7 0xCA SWAP4 PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ", - "sourceMap": "38:714:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;326:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;201:13;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;151;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;301;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;251;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;126;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;226;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;276;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;176;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;76;;;;:::o;326:418::-;376:11;409:1;405;:5;;;;430:1;426;:5;;;;451:1;447;:5;;;;472:1;468;:5;;;;493:1;489;:5;;;;514:1;510;:5;;;;535:1;531;:5;;;;556:1;552;:5;;;;577:1;573;:5;;;;598:1;594;:5;;;;615:10;645:63;656:5;652:1;;:9;645:63;;;690:1;681:10;;;;;:::i;:::-;;;645:63;;;730:1;723:8;;;326:418;;;:::o;201:13::-;;;;:::o;101:::-;;;;:::o;151:::-;;;;:::o;301:::-;;;;:::o;251:::-;;;;:::o;126:::-;;;;:::o;226:::-;;;;:::o;276:::-;;;;:::o;176:::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;211:6;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;637:4;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:305::-;812:3;831:20;849:1;831:20;:::i;:::-;826:25;;865:20;883:1;865:20;:::i;:::-;860:25;;1019:1;951:66;947:74;944:1;941:81;938:2;;;1025:18;;:::i;:::-;938:2;1069:1;1066;1062:9;1055:16;;816:261;;;;:::o;1083:77::-;1120:7;1149:5;1138:16;;1128:32;;;:::o;1166:180::-;1214:77;1211:1;1204:88;1311:4;1308:1;1301:15;1335:4;1332:1;1325:15;1352:122;1425:24;1443:5;1425:24;:::i;:::-;1418:5;1415:35;1405:2;;1464:1;1461;1454:12;1405:2;1395:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "206000", - "executionCost": "251", - "totalCost": "206251" - }, - "external": { - "a()": "1130", - "b()": "1196", - "c()": "1173", - "d()": "1218", - "e()": "1239", - "f()": "1174", - "g()": "1195", - "h()": "1151", - "i()": "1217", - "j()": "1129", - "set_and_loop(uint256)": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 38, "end": 752, "name": "MSTORE", "source": 0 }, - { "begin": 38, "end": 752, "name": "CALLVALUE", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { "begin": 38, "end": 752, "name": "ISZERO", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { "begin": 38, "end": 752, "name": "REVERT", "source": 0 }, - { "begin": 38, "end": 752, "name": "tag", "source": 0, "value": "1" }, - { "begin": 38, "end": 752, "name": "JUMPDEST", "source": 0 }, - { "begin": 38, "end": 752, "name": "POP", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 38, "end": 752, "name": "CODECOPY", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 38, "end": 752, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122056a15a4ea3f0f385fd4e642aec057df3cc5c39b231cc2321bb528e5a3db7ca9364736f6c63430008040033", - ".code": [ - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 38, "end": 752, "name": "MSTORE", "source": 0 }, - { "begin": 38, "end": 752, "name": "CALLVALUE", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { "begin": 38, "end": 752, "name": "ISZERO", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { "begin": 38, "end": 752, "name": "REVERT", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 38, "end": 752, "name": "JUMPDEST", "source": 0 }, - { "begin": 38, "end": 752, "name": "POP", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 38, "end": 752, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 38, "end": 752, "name": "LT", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 38, "end": 752, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 38, "end": 752, "name": "SHR", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "B582EC5F" - }, - { "begin": 38, "end": 752, "name": "GT", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "B582EC5F" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "B8C9D365" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "C3DA42B8" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "E2179B8E" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "E5AA3D58" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "FFAE15BA" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 38, "end": 752, "name": "JUMP", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 38, "end": 752, "name": "JUMPDEST", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "DBE671F" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "13128FDC" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "26121FF0" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "4DF7E3D0" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "8A054AC2" - }, - { "begin": 38, "end": 752, "name": "EQ", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 38, "end": 752, "name": "JUMPI", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 38, "end": 752, "name": "JUMPDEST", "source": 0 }, - { - "begin": 38, - "end": 752, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 38, "end": 752, "name": "DUP1", "source": 0 }, - { "begin": 38, "end": 752, "name": "REVERT", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 76, "end": 89, "name": "JUMPDEST", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 76, - "end": 89, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { - "begin": 76, - "end": 89, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 76, - "end": 89, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 76, "end": 89, "name": "JUMPDEST", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 76, "end": 89, "name": "MLOAD", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { "begin": 76, "end": 89, "name": "SWAP2", "source": 0 }, - { "begin": 76, "end": 89, "name": "SWAP1", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 76, - "end": 89, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 76, - "end": 89, - "name": "tag", - "source": 0, - "value": "17" - }, - { "begin": 76, "end": 89, "name": "JUMPDEST", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 76, "end": 89, "name": "MLOAD", "source": 0 }, - { "begin": 76, "end": 89, "name": "DUP1", "source": 0 }, - { "begin": 76, "end": 89, "name": "SWAP2", "source": 0 }, - { "begin": 76, "end": 89, "name": "SUB", "source": 0 }, - { "begin": 76, "end": 89, "name": "SWAP1", "source": 0 }, - { "begin": 76, "end": 89, "name": "RETURN", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 326, "end": 744, "name": "JUMPDEST", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH [tag]", - "source": 0, - "value": "19" - }, - { - "begin": 326, - "end": 744, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 326, "end": 744, "name": "DUP1", "source": 0 }, - { "begin": 326, "end": 744, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 326, "end": 744, "name": "SUB", "source": 0 }, - { "begin": 326, "end": 744, "name": "DUP2", "source": 0 }, - { "begin": 326, "end": 744, "name": "ADD", "source": 0 }, - { "begin": 326, "end": 744, "name": "SWAP1", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { "begin": 326, "end": 744, "name": "SWAP2", "source": 0 }, - { "begin": 326, "end": 744, "name": "SWAP1", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH [tag]", - "source": 0, - "value": "21" - }, - { - "begin": 326, - "end": 744, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 326, - "end": 744, - "name": "tag", - "source": 0, - "value": "20" - }, - { "begin": 326, "end": 744, "name": "JUMPDEST", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH [tag]", - "source": 0, - "value": "22" - }, - { - "begin": 326, - "end": 744, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 326, - "end": 744, - "name": "tag", - "source": 0, - "value": "19" - }, - { "begin": 326, "end": 744, "name": "JUMPDEST", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 326, "end": 744, "name": "MLOAD", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH [tag]", - "source": 0, - "value": "23" - }, - { "begin": 326, "end": 744, "name": "SWAP2", "source": 0 }, - { "begin": 326, "end": 744, "name": "SWAP1", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 326, - "end": 744, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 326, - "end": 744, - "name": "tag", - "source": 0, - "value": "23" - }, - { "begin": 326, "end": 744, "name": "JUMPDEST", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 326, "end": 744, "name": "MLOAD", "source": 0 }, - { "begin": 326, "end": 744, "name": "DUP1", "source": 0 }, - { "begin": 326, "end": 744, "name": "SWAP2", "source": 0 }, - { "begin": 326, "end": 744, "name": "SUB", "source": 0 }, - { "begin": 326, "end": 744, "name": "SWAP1", "source": 0 }, - { "begin": 326, "end": 744, "name": "RETURN", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 201, "end": 214, "name": "JUMPDEST", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "PUSH [tag]", - "source": 0, - "value": "24" - }, - { - "begin": 201, - "end": 214, - "name": "PUSH [tag]", - "source": 0, - "value": "25" - }, - { - "begin": 201, - "end": 214, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 201, - "end": 214, - "name": "tag", - "source": 0, - "value": "24" - }, - { "begin": 201, "end": 214, "name": "JUMPDEST", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 201, "end": 214, "name": "MLOAD", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "PUSH [tag]", - "source": 0, - "value": "26" - }, - { "begin": 201, "end": 214, "name": "SWAP2", "source": 0 }, - { "begin": 201, "end": 214, "name": "SWAP1", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 201, - "end": 214, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 201, - "end": 214, - "name": "tag", - "source": 0, - "value": "26" - }, - { "begin": 201, "end": 214, "name": "JUMPDEST", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 201, "end": 214, "name": "MLOAD", "source": 0 }, - { "begin": 201, "end": 214, "name": "DUP1", "source": 0 }, - { "begin": 201, "end": 214, "name": "SWAP2", "source": 0 }, - { "begin": 201, "end": 214, "name": "SUB", "source": 0 }, - { "begin": 201, "end": 214, "name": "SWAP1", "source": 0 }, - { "begin": 201, "end": 214, "name": "RETURN", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 101, "end": 114, "name": "JUMPDEST", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { - "begin": 101, - "end": 114, - "name": "PUSH [tag]", - "source": 0, - "value": "28" - }, - { - "begin": 101, - "end": 114, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 101, - "end": 114, - "name": "tag", - "source": 0, - "value": "27" - }, - { "begin": 101, "end": 114, "name": "JUMPDEST", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 101, "end": 114, "name": "MLOAD", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "PUSH [tag]", - "source": 0, - "value": "29" - }, - { "begin": 101, "end": 114, "name": "SWAP2", "source": 0 }, - { "begin": 101, "end": 114, "name": "SWAP1", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 101, - "end": 114, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 101, - "end": 114, - "name": "tag", - "source": 0, - "value": "29" - }, - { "begin": 101, "end": 114, "name": "JUMPDEST", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 101, "end": 114, "name": "MLOAD", "source": 0 }, - { "begin": 101, "end": 114, "name": "DUP1", "source": 0 }, - { "begin": 101, "end": 114, "name": "SWAP2", "source": 0 }, - { "begin": 101, "end": 114, "name": "SUB", "source": 0 }, - { "begin": 101, "end": 114, "name": "SWAP1", "source": 0 }, - { "begin": 101, "end": 114, "name": "RETURN", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 151, "end": 164, "name": "JUMPDEST", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "PUSH [tag]", - "source": 0, - "value": "30" - }, - { - "begin": 151, - "end": 164, - "name": "PUSH [tag]", - "source": 0, - "value": "31" - }, - { - "begin": 151, - "end": 164, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 151, - "end": 164, - "name": "tag", - "source": 0, - "value": "30" - }, - { "begin": 151, "end": 164, "name": "JUMPDEST", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 151, "end": 164, "name": "MLOAD", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "PUSH [tag]", - "source": 0, - "value": "32" - }, - { "begin": 151, "end": 164, "name": "SWAP2", "source": 0 }, - { "begin": 151, "end": 164, "name": "SWAP1", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 151, - "end": 164, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 151, - "end": 164, - "name": "tag", - "source": 0, - "value": "32" - }, - { "begin": 151, "end": 164, "name": "JUMPDEST", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 151, "end": 164, "name": "MLOAD", "source": 0 }, - { "begin": 151, "end": 164, "name": "DUP1", "source": 0 }, - { "begin": 151, "end": 164, "name": "SWAP2", "source": 0 }, - { "begin": 151, "end": 164, "name": "SUB", "source": 0 }, - { "begin": 151, "end": 164, "name": "SWAP1", "source": 0 }, - { "begin": 151, "end": 164, "name": "RETURN", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 301, "end": 314, "name": "JUMPDEST", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "PUSH [tag]", - "source": 0, - "value": "33" - }, - { - "begin": 301, - "end": 314, - "name": "PUSH [tag]", - "source": 0, - "value": "34" - }, - { - "begin": 301, - "end": 314, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 301, - "end": 314, - "name": "tag", - "source": 0, - "value": "33" - }, - { "begin": 301, "end": 314, "name": "JUMPDEST", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 301, "end": 314, "name": "MLOAD", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "PUSH [tag]", - "source": 0, - "value": "35" - }, - { "begin": 301, "end": 314, "name": "SWAP2", "source": 0 }, - { "begin": 301, "end": 314, "name": "SWAP1", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 301, - "end": 314, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 301, - "end": 314, - "name": "tag", - "source": 0, - "value": "35" - }, - { "begin": 301, "end": 314, "name": "JUMPDEST", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 301, "end": 314, "name": "MLOAD", "source": 0 }, - { "begin": 301, "end": 314, "name": "DUP1", "source": 0 }, - { "begin": 301, "end": 314, "name": "SWAP2", "source": 0 }, - { "begin": 301, "end": 314, "name": "SUB", "source": 0 }, - { "begin": 301, "end": 314, "name": "SWAP1", "source": 0 }, - { "begin": 301, "end": 314, "name": "RETURN", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 251, "end": 264, "name": "JUMPDEST", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "PUSH [tag]", - "source": 0, - "value": "36" - }, - { - "begin": 251, - "end": 264, - "name": "PUSH [tag]", - "source": 0, - "value": "37" - }, - { - "begin": 251, - "end": 264, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 251, - "end": 264, - "name": "tag", - "source": 0, - "value": "36" - }, - { "begin": 251, "end": 264, "name": "JUMPDEST", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 251, "end": 264, "name": "MLOAD", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "PUSH [tag]", - "source": 0, - "value": "38" - }, - { "begin": 251, "end": 264, "name": "SWAP2", "source": 0 }, - { "begin": 251, "end": 264, "name": "SWAP1", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 251, - "end": 264, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 251, - "end": 264, - "name": "tag", - "source": 0, - "value": "38" - }, - { "begin": 251, "end": 264, "name": "JUMPDEST", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 251, "end": 264, "name": "MLOAD", "source": 0 }, - { "begin": 251, "end": 264, "name": "DUP1", "source": 0 }, - { "begin": 251, "end": 264, "name": "SWAP2", "source": 0 }, - { "begin": 251, "end": 264, "name": "SUB", "source": 0 }, - { "begin": 251, "end": 264, "name": "SWAP1", "source": 0 }, - { "begin": 251, "end": 264, "name": "RETURN", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 126, "end": 139, "name": "JUMPDEST", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "39" - }, - { - "begin": 126, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "40" - }, - { - "begin": 126, - "end": 139, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 126, - "end": 139, - "name": "tag", - "source": 0, - "value": "39" - }, - { "begin": 126, "end": 139, "name": "JUMPDEST", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 126, "end": 139, "name": "MLOAD", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "41" - }, - { "begin": 126, "end": 139, "name": "SWAP2", "source": 0 }, - { "begin": 126, "end": 139, "name": "SWAP1", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 126, - "end": 139, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 126, - "end": 139, - "name": "tag", - "source": 0, - "value": "41" - }, - { "begin": 126, "end": 139, "name": "JUMPDEST", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 126, "end": 139, "name": "MLOAD", "source": 0 }, - { "begin": 126, "end": 139, "name": "DUP1", "source": 0 }, - { "begin": 126, "end": 139, "name": "SWAP2", "source": 0 }, - { "begin": 126, "end": 139, "name": "SUB", "source": 0 }, - { "begin": 126, "end": 139, "name": "SWAP1", "source": 0 }, - { "begin": 126, "end": 139, "name": "RETURN", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 226, "end": 239, "name": "JUMPDEST", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "PUSH [tag]", - "source": 0, - "value": "42" - }, - { - "begin": 226, - "end": 239, - "name": "PUSH [tag]", - "source": 0, - "value": "43" - }, - { - "begin": 226, - "end": 239, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 226, - "end": 239, - "name": "tag", - "source": 0, - "value": "42" - }, - { "begin": 226, "end": 239, "name": "JUMPDEST", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 226, "end": 239, "name": "MLOAD", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "PUSH [tag]", - "source": 0, - "value": "44" - }, - { "begin": 226, "end": 239, "name": "SWAP2", "source": 0 }, - { "begin": 226, "end": 239, "name": "SWAP1", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 226, - "end": 239, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 226, - "end": 239, - "name": "tag", - "source": 0, - "value": "44" - }, - { "begin": 226, "end": 239, "name": "JUMPDEST", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 226, "end": 239, "name": "MLOAD", "source": 0 }, - { "begin": 226, "end": 239, "name": "DUP1", "source": 0 }, - { "begin": 226, "end": 239, "name": "SWAP2", "source": 0 }, - { "begin": 226, "end": 239, "name": "SUB", "source": 0 }, - { "begin": 226, "end": 239, "name": "SWAP1", "source": 0 }, - { "begin": 226, "end": 239, "name": "RETURN", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 276, "end": 289, "name": "JUMPDEST", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "PUSH [tag]", - "source": 0, - "value": "45" - }, - { - "begin": 276, - "end": 289, - "name": "PUSH [tag]", - "source": 0, - "value": "46" - }, - { - "begin": 276, - "end": 289, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 276, - "end": 289, - "name": "tag", - "source": 0, - "value": "45" - }, - { "begin": 276, "end": 289, "name": "JUMPDEST", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 276, "end": 289, "name": "MLOAD", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "PUSH [tag]", - "source": 0, - "value": "47" - }, - { "begin": 276, "end": 289, "name": "SWAP2", "source": 0 }, - { "begin": 276, "end": 289, "name": "SWAP1", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 276, - "end": 289, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 276, - "end": 289, - "name": "tag", - "source": 0, - "value": "47" - }, - { "begin": 276, "end": 289, "name": "JUMPDEST", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 276, "end": 289, "name": "MLOAD", "source": 0 }, - { "begin": 276, "end": 289, "name": "DUP1", "source": 0 }, - { "begin": 276, "end": 289, "name": "SWAP2", "source": 0 }, - { "begin": 276, "end": 289, "name": "SUB", "source": 0 }, - { "begin": 276, "end": 289, "name": "SWAP1", "source": 0 }, - { "begin": 276, "end": 289, "name": "RETURN", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 176, "end": 189, "name": "JUMPDEST", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "PUSH [tag]", - "source": 0, - "value": "48" - }, - { - "begin": 176, - "end": 189, - "name": "PUSH [tag]", - "source": 0, - "value": "49" - }, - { - "begin": 176, - "end": 189, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 176, - "end": 189, - "name": "tag", - "source": 0, - "value": "48" - }, - { "begin": 176, "end": 189, "name": "JUMPDEST", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 176, "end": 189, "name": "MLOAD", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "PUSH [tag]", - "source": 0, - "value": "50" - }, - { "begin": 176, "end": 189, "name": "SWAP2", "source": 0 }, - { "begin": 176, "end": 189, "name": "SWAP1", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 176, - "end": 189, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 176, - "end": 189, - "name": "tag", - "source": 0, - "value": "50" - }, - { "begin": 176, "end": 189, "name": "JUMPDEST", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 176, "end": 189, "name": "MLOAD", "source": 0 }, - { "begin": 176, "end": 189, "name": "DUP1", "source": 0 }, - { "begin": 176, "end": 189, "name": "SWAP2", "source": 0 }, - { "begin": 176, "end": 189, "name": "SUB", "source": 0 }, - { "begin": 176, "end": 189, "name": "SWAP1", "source": 0 }, - { "begin": 176, "end": 189, "name": "RETURN", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 76, "end": 89, "name": "JUMPDEST", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 76, "end": 89, "name": "SLOAD", "source": 0 }, - { "begin": 76, "end": 89, "name": "DUP2", "source": 0 }, - { - "begin": 76, - "end": 89, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 326, - "end": 744, - "name": "tag", - "source": 0, - "value": "22" - }, - { "begin": 326, "end": 744, "name": "JUMPDEST", "source": 0 }, - { - "begin": 376, - "end": 387, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 409, - "end": 410, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 405, - "end": 406, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 405, "end": 410, "name": "DUP2", "source": 0 }, - { "begin": 405, "end": 410, "name": "SWAP1", "source": 0 }, - { "begin": 405, "end": 410, "name": "SSTORE", "source": 0 }, - { "begin": 405, "end": 410, "name": "POP", "source": 0 }, - { - "begin": 430, - "end": 431, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 426, "end": 427, "name": "DUP1", "source": 0 }, - { "begin": 426, "end": 431, "name": "DUP2", "source": 0 }, - { "begin": 426, "end": 431, "name": "SWAP1", "source": 0 }, - { "begin": 426, "end": 431, "name": "SSTORE", "source": 0 }, - { "begin": 426, "end": 431, "name": "POP", "source": 0 }, - { - "begin": 451, - "end": 452, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 447, - "end": 448, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 447, "end": 452, "name": "DUP2", "source": 0 }, - { "begin": 447, "end": 452, "name": "SWAP1", "source": 0 }, - { "begin": 447, "end": 452, "name": "SSTORE", "source": 0 }, - { "begin": 447, "end": 452, "name": "POP", "source": 0 }, - { - "begin": 472, - "end": 473, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 468, - "end": 469, - "name": "PUSH", - "source": 0, - "value": "3" - }, - { "begin": 468, "end": 473, "name": "DUP2", "source": 0 }, - { "begin": 468, "end": 473, "name": "SWAP1", "source": 0 }, - { "begin": 468, "end": 473, "name": "SSTORE", "source": 0 }, - { "begin": 468, "end": 473, "name": "POP", "source": 0 }, - { - "begin": 493, - "end": 494, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 489, - "end": 490, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 489, "end": 494, "name": "DUP2", "source": 0 }, - { "begin": 489, "end": 494, "name": "SWAP1", "source": 0 }, - { "begin": 489, "end": 494, "name": "SSTORE", "source": 0 }, - { "begin": 489, "end": 494, "name": "POP", "source": 0 }, - { - "begin": 514, - "end": 515, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 510, - "end": 511, - "name": "PUSH", - "source": 0, - "value": "5" - }, - { "begin": 510, "end": 515, "name": "DUP2", "source": 0 }, - { "begin": 510, "end": 515, "name": "SWAP1", "source": 0 }, - { "begin": 510, "end": 515, "name": "SSTORE", "source": 0 }, - { "begin": 510, "end": 515, "name": "POP", "source": 0 }, - { - "begin": 535, - "end": 536, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 531, - "end": 532, - "name": "PUSH", - "source": 0, - "value": "6" - }, - { "begin": 531, "end": 536, "name": "DUP2", "source": 0 }, - { "begin": 531, "end": 536, "name": "SWAP1", "source": 0 }, - { "begin": 531, "end": 536, "name": "SSTORE", "source": 0 }, - { "begin": 531, "end": 536, "name": "POP", "source": 0 }, - { - "begin": 556, - "end": 557, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 552, - "end": 553, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { "begin": 552, "end": 557, "name": "DUP2", "source": 0 }, - { "begin": 552, "end": 557, "name": "SWAP1", "source": 0 }, - { "begin": 552, "end": 557, "name": "SSTORE", "source": 0 }, - { "begin": 552, "end": 557, "name": "POP", "source": 0 }, - { - "begin": 577, - "end": 578, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 573, - "end": 574, - "name": "PUSH", - "source": 0, - "value": "8" - }, - { "begin": 573, "end": 578, "name": "DUP2", "source": 0 }, - { "begin": 573, "end": 578, "name": "SWAP1", "source": 0 }, - { "begin": 573, "end": 578, "name": "SSTORE", "source": 0 }, - { "begin": 573, "end": 578, "name": "POP", "source": 0 }, - { - "begin": 598, - "end": 599, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 594, - "end": 595, - "name": "PUSH", - "source": 0, - "value": "9" - }, - { "begin": 594, "end": 599, "name": "DUP2", "source": 0 }, - { "begin": 594, "end": 599, "name": "SWAP1", "source": 0 }, - { "begin": 594, "end": 599, "name": "SSTORE", "source": 0 }, - { "begin": 594, "end": 599, "name": "POP", "source": 0 }, - { - "begin": 615, - "end": 625, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 645, - "end": 708, - "name": "tag", - "source": 0, - "value": "52" - }, - { "begin": 645, "end": 708, "name": "JUMPDEST", "source": 0 }, - { "begin": 656, "end": 661, "name": "DUP3", "source": 0 }, - { - "begin": 652, - "end": 653, - "name": "PUSH", - "source": 0, - "value": "8" - }, - { "begin": 652, "end": 653, "name": "SLOAD", "source": 0 }, - { "begin": 652, "end": 661, "name": "LT", "source": 0 }, - { "begin": 645, "end": 708, "name": "ISZERO", "source": 0 }, - { - "begin": 645, - "end": 708, - "name": "PUSH [tag]", - "source": 0, - "value": "53" - }, - { "begin": 645, "end": 708, "name": "JUMPI", "source": 0 }, - { - "begin": 690, - "end": 691, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 681, "end": 691, "name": "DUP2", "source": 0 }, - { - "begin": 681, - "end": 691, - "name": "PUSH [tag]", - "source": 0, - "value": "54" - }, - { "begin": 681, "end": 691, "name": "SWAP2", "source": 0 }, - { "begin": 681, "end": 691, "name": "SWAP1", "source": 0 }, - { - "begin": 681, - "end": 691, - "name": "PUSH [tag]", - "source": 0, - "value": "55" - }, - { - "begin": 681, - "end": 691, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 681, - "end": 691, - "name": "tag", - "source": 0, - "value": "54" - }, - { "begin": 681, "end": 691, "name": "JUMPDEST", "source": 0 }, - { "begin": 681, "end": 691, "name": "SWAP1", "source": 0 }, - { "begin": 681, "end": 691, "name": "POP", "source": 0 }, - { - "begin": 645, - "end": 708, - "name": "PUSH [tag]", - "source": 0, - "value": "52" - }, - { "begin": 645, "end": 708, "name": "JUMP", "source": 0 }, - { - "begin": 645, - "end": 708, - "name": "tag", - "source": 0, - "value": "53" - }, - { "begin": 645, "end": 708, "name": "JUMPDEST", "source": 0 }, - { - "begin": 730, - "end": 731, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 723, "end": 731, "name": "SWAP2", "source": 0 }, - { "begin": 723, "end": 731, "name": "POP", "source": 0 }, - { "begin": 723, "end": 731, "name": "POP", "source": 0 }, - { "begin": 326, "end": 744, "name": "SWAP2", "source": 0 }, - { "begin": 326, "end": 744, "name": "SWAP1", "source": 0 }, - { "begin": 326, "end": 744, "name": "POP", "source": 0 }, - { - "begin": 326, - "end": 744, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 201, - "end": 214, - "name": "tag", - "source": 0, - "value": "25" - }, - { "begin": 201, "end": 214, "name": "JUMPDEST", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "PUSH", - "source": 0, - "value": "5" - }, - { "begin": 201, "end": 214, "name": "SLOAD", "source": 0 }, - { "begin": 201, "end": 214, "name": "DUP2", "source": 0 }, - { - "begin": 201, - "end": 214, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 101, - "end": 114, - "name": "tag", - "source": 0, - "value": "28" - }, - { "begin": 101, "end": 114, "name": "JUMPDEST", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 101, "end": 114, "name": "SLOAD", "source": 0 }, - { "begin": 101, "end": 114, "name": "DUP2", "source": 0 }, - { - "begin": 101, - "end": 114, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 151, - "end": 164, - "name": "tag", - "source": 0, - "value": "31" - }, - { "begin": 151, "end": 164, "name": "JUMPDEST", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "PUSH", - "source": 0, - "value": "3" - }, - { "begin": 151, "end": 164, "name": "SLOAD", "source": 0 }, - { "begin": 151, "end": 164, "name": "DUP2", "source": 0 }, - { - "begin": 151, - "end": 164, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 301, - "end": 314, - "name": "tag", - "source": 0, - "value": "34" - }, - { "begin": 301, "end": 314, "name": "JUMPDEST", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "PUSH", - "source": 0, - "value": "9" - }, - { "begin": 301, "end": 314, "name": "SLOAD", "source": 0 }, - { "begin": 301, "end": 314, "name": "DUP2", "source": 0 }, - { - "begin": 301, - "end": 314, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 251, - "end": 264, - "name": "tag", - "source": 0, - "value": "37" - }, - { "begin": 251, "end": 264, "name": "JUMPDEST", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { "begin": 251, "end": 264, "name": "SLOAD", "source": 0 }, - { "begin": 251, "end": 264, "name": "DUP2", "source": 0 }, - { - "begin": 251, - "end": 264, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 126, - "end": 139, - "name": "tag", - "source": 0, - "value": "40" - }, - { "begin": 126, "end": 139, "name": "JUMPDEST", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "PUSH", - "source": 0, - "value": "2" - }, - { "begin": 126, "end": 139, "name": "SLOAD", "source": 0 }, - { "begin": 126, "end": 139, "name": "DUP2", "source": 0 }, - { - "begin": 126, - "end": 139, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 226, - "end": 239, - "name": "tag", - "source": 0, - "value": "43" - }, - { "begin": 226, "end": 239, "name": "JUMPDEST", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "PUSH", - "source": 0, - "value": "6" - }, - { "begin": 226, "end": 239, "name": "SLOAD", "source": 0 }, - { "begin": 226, "end": 239, "name": "DUP2", "source": 0 }, - { - "begin": 226, - "end": 239, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 276, - "end": 289, - "name": "tag", - "source": 0, - "value": "46" - }, - { "begin": 276, "end": 289, "name": "JUMPDEST", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "PUSH", - "source": 0, - "value": "8" - }, - { "begin": 276, "end": 289, "name": "SLOAD", "source": 0 }, - { "begin": 276, "end": 289, "name": "DUP2", "source": 0 }, - { - "begin": 276, - "end": 289, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 176, - "end": 189, - "name": "tag", - "source": 0, - "value": "49" - }, - { "begin": 176, "end": 189, "name": "JUMPDEST", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 176, "end": 189, "name": "SLOAD", "source": 0 }, - { "begin": 176, "end": 189, "name": "DUP2", "source": 0 }, - { - "begin": 176, - "end": 189, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "57" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 53, - "end": 58, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "59" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "60" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "59" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 211, - "end": 217, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "62" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "62" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "57" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "63" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "64" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "66" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "67" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "66" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 637, - "end": 641, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "69" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "64" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "69" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1077, - "name": "tag", - "source": 1, - "value": "55" - }, - { "begin": 772, "end": 1077, "name": "JUMPDEST", "source": 1 }, - { - "begin": 812, - "end": 815, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "71" - }, - { "begin": 849, "end": 850, "name": "DUP3", "source": 1 }, - { - "begin": 831, - "end": 851, - "name": "PUSH [tag]", - "source": 1, - "value": "67" - }, - { - "begin": 831, - "end": 851, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 831, - "end": 851, - "name": "tag", - "source": 1, - "value": "71" - }, - { "begin": 831, "end": 851, "name": "JUMPDEST", "source": 1 }, - { "begin": 826, "end": 851, "name": "SWAP2", "source": 1 }, - { "begin": 826, "end": 851, "name": "POP", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "72" - }, - { "begin": 883, "end": 884, "name": "DUP4", "source": 1 }, - { - "begin": 865, - "end": 885, - "name": "PUSH [tag]", - "source": 1, - "value": "67" - }, - { - "begin": 865, - "end": 885, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 865, - "end": 885, - "name": "tag", - "source": 1, - "value": "72" - }, - { "begin": 865, "end": 885, "name": "JUMPDEST", "source": 1 }, - { "begin": 860, "end": 885, "name": "SWAP3", "source": 1 }, - { "begin": 860, "end": 885, "name": "POP", "source": 1 }, - { "begin": 1019, "end": 1020, "name": "DUP3", "source": 1 }, - { - "begin": 951, - "end": 1017, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 947, "end": 1021, "name": "SUB", "source": 1 }, - { "begin": 944, "end": 945, "name": "DUP3", "source": 1 }, - { "begin": 941, "end": 1022, "name": "GT", "source": 1 }, - { "begin": 938, "end": 940, "name": "ISZERO", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "PUSH [tag]", - "source": 1, - "value": "73" - }, - { "begin": 938, "end": 940, "name": "JUMPI", "source": 1 }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "74" - }, - { - "begin": 1025, - "end": 1043, - "name": "PUSH [tag]", - "source": 1, - "value": "75" - }, - { - "begin": 1025, - "end": 1043, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1025, - "end": 1043, - "name": "tag", - "source": 1, - "value": "74" - }, - { "begin": 1025, "end": 1043, "name": "JUMPDEST", "source": 1 }, - { - "begin": 938, - "end": 940, - "name": "tag", - "source": 1, - "value": "73" - }, - { "begin": 938, "end": 940, "name": "JUMPDEST", "source": 1 }, - { "begin": 1069, "end": 1070, "name": "DUP3", "source": 1 }, - { "begin": 1066, "end": 1067, "name": "DUP3", "source": 1 }, - { "begin": 1062, "end": 1071, "name": "ADD", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "SWAP1", "source": 1 }, - { "begin": 1055, "end": 1071, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP3", "source": 1 }, - { "begin": 816, "end": 1077, "name": "SWAP2", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { "begin": 816, "end": 1077, "name": "POP", "source": 1 }, - { - "begin": 816, - "end": 1077, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1083, - "end": 1160, - "name": "tag", - "source": 1, - "value": "67" - }, - { "begin": 1083, "end": 1160, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1120, - "end": 1127, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1149, "end": 1154, "name": "DUP2", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "SWAP1", "source": 1 }, - { "begin": 1138, "end": 1154, "name": "POP", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP2", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "SWAP1", "source": 1 }, - { "begin": 1128, "end": 1160, "name": "POP", "source": 1 }, - { - "begin": 1128, - "end": 1160, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1166, - "end": 1346, - "name": "tag", - "source": 1, - "value": "75" - }, - { "begin": 1166, "end": 1346, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1214, - "end": 1291, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1211, - "end": 1212, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1204, "end": 1292, "name": "MSTORE", "source": 1 }, - { - "begin": 1311, - "end": 1315, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1308, - "end": 1309, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1301, "end": 1316, "name": "MSTORE", "source": 1 }, - { - "begin": 1335, - "end": 1339, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1332, - "end": 1333, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1325, "end": 1340, "name": "REVERT", "source": 1 }, - { - "begin": 1352, - "end": 1474, - "name": "tag", - "source": 1, - "value": "60" - }, - { "begin": 1352, "end": 1474, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "79" - }, - { "begin": 1443, "end": 1448, "name": "DUP2", "source": 1 }, - { - "begin": 1425, - "end": 1449, - "name": "PUSH [tag]", - "source": 1, - "value": "67" - }, - { - "begin": 1425, - "end": 1449, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1425, - "end": 1449, - "name": "tag", - "source": 1, - "value": "79" - }, - { "begin": 1425, "end": 1449, "name": "JUMPDEST", "source": 1 }, - { "begin": 1418, "end": 1423, "name": "DUP2", "source": 1 }, - { "begin": 1415, "end": 1450, "name": "EQ", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "PUSH [tag]", - "source": 1, - "value": "80" - }, - { "begin": 1405, "end": 1407, "name": "JUMPI", "source": 1 }, - { - "begin": 1464, - "end": 1465, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1461, "end": 1462, "name": "DUP1", "source": 1 }, - { "begin": 1454, "end": 1466, "name": "REVERT", "source": 1 }, - { - "begin": 1405, - "end": 1407, - "name": "tag", - "source": 1, - "value": "80" - }, - { "begin": 1405, "end": 1407, "name": "JUMPDEST", "source": 1 }, - { "begin": 1395, "end": 1474, "name": "POP", "source": 1 }, - { - "begin": 1395, - "end": 1474, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "a()": "0dbe671f", - "b()": "4df7e3d0", - "c()": "c3da42b8", - "d()": "8a054ac2", - "e()": "ffae15ba", - "f()": "26121ff0", - "g()": "e2179b8e", - "h()": "b8c9d365", - "i()": "e5aa3d58", - "j()": "b582ec5f", - "set_and_loop(uint256)": "13128fdc" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"a\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"b\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"c\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"d\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"f\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"g\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"h\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"j\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loops\",\"type\":\"uint256\"}],\"name\":\"set_and_loop\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"OverflowingTrace\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xd2f48a9fd1daebd4dadb02112945a0dd37e819e8a12db147a21972fb91fd099a\",\"urls\":[\"bzz-raw://ad28d81faf7c0c30d9e1c16ba4db29359c68479e5d5b024853a66ef3cf9f2e74\",\"dweb:/ipfs/QmeHtAqjzFnoWwGjM8WLQ6vnh1Upxs8pTZrpbqHTuRr2Jr\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:OverflowingTrace", - "label": "a", - "offset": 0, - "slot": "0", - "type": "t_uint256" - }, - { - "astId": 5, - "contract": "main.sol:OverflowingTrace", - "label": "b", - "offset": 0, - "slot": "1", - "type": "t_uint256" - }, - { - "astId": 7, - "contract": "main.sol:OverflowingTrace", - "label": "c", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 9, - "contract": "main.sol:OverflowingTrace", - "label": "d", - "offset": 0, - "slot": "3", - "type": "t_uint256" - }, - { - "astId": 11, - "contract": "main.sol:OverflowingTrace", - "label": "e", - "offset": 0, - "slot": "4", - "type": "t_uint256" - }, - { - "astId": 13, - "contract": "main.sol:OverflowingTrace", - "label": "f", - "offset": 0, - "slot": "5", - "type": "t_uint256" - }, - { - "astId": 15, - "contract": "main.sol:OverflowingTrace", - "label": "g", - "offset": 0, - "slot": "6", - "type": "t_uint256" - }, - { - "astId": 17, - "contract": "main.sol:OverflowingTrace", - "label": "h", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 19, - "contract": "main.sol:OverflowingTrace", - "label": "i", - "offset": 0, - "slot": "8", - "type": "t_uint256" - }, - { - "astId": 21, - "contract": "main.sol:OverflowingTrace", - "label": "j", - "offset": 0, - "slot": "9", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract OverflowingTrace {\n uint public a;\n uint public b;\n uint public c;\n uint public d;\n uint public e;\n uint public f;\n uint public g;\n uint public h;\n uint public i;\n uint public j;\n function set_and_loop(uint loops) public returns (uint result) {\n a = 1;\n b = 1;\n c = 1;\n d = 1;\n e = 1;\n f = 1;\n g = 1;\n h = 1;\n i = 1;\n j = 1;\n uint count = 0;\n while (i < loops) {\n count += 1;\n }\n return 1;\n }\n }" -} diff --git a/tests/contracts/compiled/ParachainStaking.json b/tests/contracts/compiled/ParachainStaking.json new file mode 100644 index 0000000000..b5c76e56d6 --- /dev/null +++ b/tests/contracts/compiled/ParachainStaking.json @@ -0,0 +1,850 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [], + "name": "cancel_candidate_bond_less", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "cancel_delegation_request", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "candidateCount", + "type": "uint256" + } + ], + "name": "cancel_leave_candidates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cancel_leave_delegators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "less", "type": "uint256" } + ], + "name": "candidate_bond_less", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "more", "type": "uint256" } + ], + "name": "candidate_bond_more", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "candidate_count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "candidate_delegation_count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "candidate_exit_is_pending", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "candidate_request_is_pending", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "collator", "type": "address" } + ], + "name": "collator_nomination_count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "candidateDelegationCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegatorDelegationCount", + "type": "uint256" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "delegator", "type": "address" }, + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "delegation_request_is_pending", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" }, + { "internalType": "uint256", "name": "more", "type": "uint256" } + ], + "name": "delegator_bond_more", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "delegator", "type": "address" } + ], + "name": "delegator_delegation_count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "execute_candidate_bond_less", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "delegator", "type": "address" }, + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "execute_delegation_request", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" }, + { + "internalType": "uint256", + "name": "candidateDelegationCount", + "type": "uint256" + } + ], + "name": "execute_leave_candidates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "delegator", "type": "address" }, + { + "internalType": "uint256", + "name": "delegatorDelegationCount", + "type": "uint256" + } + ], + "name": "execute_leave_delegators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "go_offline", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "go_online", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "is_candidate", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "delegator", "type": "address" } + ], + "name": "is_delegator", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "nominator", "type": "address" } + ], + "name": "is_nominator", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "is_selected_candidate", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "candidateCount", + "type": "uint256" + } + ], + "name": "join_candidates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "candidateCount", + "type": "uint256" + } + ], + "name": "leave_candidates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "nominatorNominationCount", + "type": "uint256" + } + ], + "name": "leave_nominators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "min_delegation", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "min_nomination", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "collator", "type": "address" }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "uint256", + "name": "collatorNominationCount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nominatorNominationCount", + "type": "uint256" + } + ], + "name": "nominate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" }, + { "internalType": "uint256", "name": "less", "type": "uint256" } + ], + "name": "nominator_bond_less", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" }, + { "internalType": "uint256", "name": "more", "type": "uint256" } + ], + "name": "nominator_bond_more", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "nominator", "type": "address" } + ], + "name": "nominator_nomination_count", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "round", "type": "uint256" } + ], + "name": "points", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "collator", "type": "address" } + ], + "name": "revoke_nomination", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "round", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "less", "type": "uint256" } + ], + "name": "schedule_candidate_bond_less", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" }, + { "internalType": "uint256", "name": "less", "type": "uint256" } + ], + "name": "schedule_delegator_bond_less", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "candidateCount", + "type": "uint256" + } + ], + "name": "schedule_leave_candidates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "schedule_leave_delegators", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "candidate", "type": "address" } + ], + "name": "schedule_revoke_delegation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "selected_candidates", + "outputs": [ + { "internalType": "address[]", "name": "", "type": "address[]" } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "author": "The Moonbeam Team", + "kind": "dev", + "methods": { + "cancel_candidate_bond_less()": { + "details": "Cancel pending candidate bond request Selector: 583d0fdc" + }, + "cancel_delegation_request(address)": { + "details": "Cancel pending delegation request (already made in support of input by caller) Selector: 7284cf50", + "params": { "candidate": "The address of the candidate" } + }, + "cancel_leave_candidates(uint256)": { + "details": "Cancel request to leave the set of collator candidates Selector: 0880b3e2", + "params": { + "candidateCount": "The number of candidates in the CandidatePool" + } + }, + "cancel_leave_delegators()": { + "details": "Cancel request to leave the set of delegators Selector: 2a987643" + }, + "candidate_bond_less(uint256)": { + "details": "Request to bond less for collator candidates Selector: 289b6ba7", + "params": { + "less": "The amount to be subtracted from self-bond and unreserved" + } + }, + "candidate_bond_more(uint256)": { + "details": "Request to bond more for collator candidates Selector: c57bd3a8", + "params": { "more": "The additional amount self-bonded" } + }, + "candidate_count()": { + "details": "Get the CandidateCount weight hint Selector: 4b1c4c29", + "returns": { "_0": "The CandidateCount weight hint" } + }, + "candidate_delegation_count(address)": { + "details": "Get the CandidateDelegationCount weight hint Selector: 815b796c", + "params": { + "candidate": "The address for which we are querying the nomination count" + }, + "returns": { "_0": "The number of nominations backing the collator" } + }, + "candidate_exit_is_pending(address)": { + "details": "Whether there exists a pending exit for candidate Selector: eb613b8a", + "params": { + "candidate": "the candidate for which the exit request was made" + }, + "returns": { + "_0": "Whether a pending request exists for such delegation" + } + }, + "candidate_request_is_pending(address)": { + "details": "Whether there exists a pending bond less request made by a candidate Selector: 26ab05fb", + "params": { "candidate": "the candidate which made the request" }, + "returns": { + "_0": "Whether a pending bond less request was made by the candidate" + } + }, + "collator_nomination_count(address)": { + "details": "Get the CollatorNominationCount weight hint Selector: 0ad6a7be", + "params": { + "collator": "The address for which we are querying the nomination count" + }, + "returns": { "_0": "The number of nominations backing the collator" } + }, + "delegate(address,uint256,uint256,uint256)": { + "details": "Make a delegation in support of a collator candidate Selector: 829f5ee3", + "params": { + "amount": "The amount bonded in support of the collator candidate", + "candidate": "The address of the supported collator candidate", + "candidateDelegationCount": "The number of delegations in support of the candidate", + "delegatorDelegationCount": "The number of existing delegations by the caller" + } + }, + "delegation_request_is_pending(address,address)": { + "details": "Whether there exists a pending request for a delegation made by a delegator Selector: 192e1db3", + "params": { + "candidate": "the candidate for which the delegation was made", + "delegator": "the delegator that made the delegation" + }, + "returns": { + "_0": "Whether a pending request exists for such delegation" + } + }, + "delegator_bond_more(address,uint256)": { + "details": "Bond more for delegators with respect to a specific collator candidate Selector: f8331108", + "params": { + "candidate": "The address of the collator candidate for which delegation shall increase", + "more": "The amount by which the delegation is increased" + } + }, + "delegator_delegation_count(address)": { + "details": "Get the DelegatorDelegationCount weight hint Selector: fbc51bca", + "params": { + "delegator": "The address for which we are querying the delegation count" + }, + "returns": { "_0": "The number of delegations made by the delegator" } + }, + "execute_candidate_bond_less(address)": { + "details": "Execute pending candidate bond request Selector: a9a2b8b7", + "params": { + "candidate": "The address for the candidate for which the request will be executed" + } + }, + "execute_delegation_request(address,address)": { + "details": "Execute pending delegation request (if exists && is due) Selector: e42366a6", + "params": { + "candidate": "The address of the candidate", + "delegator": "The address of the delegator" + } + }, + "execute_leave_candidates(address,uint256)": { + "details": "Execute due request to leave the set of collator candidates Selector: 3fdc4c30", + "params": { + "candidate": "The candidate address for which the pending exit request will be executed", + "candidateDelegationCount": "The number of delegations for the candidate to be revoked" + } + }, + "execute_leave_delegators(address,uint256)": { + "details": "Execute request to leave the set of delegators and revoke all delegations Selector: a84a7468", + "params": { + "delegator": "The leaving delegator", + "delegatorDelegationCount": "The number of active delegations to be revoked by delegator" + } + }, + "go_offline()": { + "details": "Temporarily leave the set of collator candidates without unbonding Selector: 767e0450" + }, + "go_online()": { + "details": "Rejoin the set of collator candidates if previously had called `go_offline` Selector: d2f73ceb" + }, + "is_candidate(address)": { + "details": "Check whether the specified address is currently a collator candidate Selector: 8545c833", + "params": { + "candidate": "the address that we want to confirm is a collator andidate" + }, + "returns": { + "_0": "A boolean confirming whether the address is a collator candidate" + } + }, + "is_delegator(address)": { + "details": "Check whether the specified address is currently a staking delegator Selector: 1f030587", + "params": { + "delegator": "the address that we want to confirm is a delegator" + }, + "returns": { + "_0": "A boolean confirming whether the address is a delegator" + } + }, + "is_nominator(address)": { + "details": "Check whether the specified address is currently a staking nominator Selector: 8e5080e7", + "params": { + "nominator": "the address that we want to confirm is a nominator" + }, + "returns": { + "_0": "A boolean confirming whether the address is a nominator" + } + }, + "is_selected_candidate(address)": { + "details": "Check whether the specifies address is currently a part of the active set Selector: 8f6d27c7", + "params": { + "candidate": "the address that we want to confirm is a part of the active set" + }, + "returns": { + "_0": "A boolean confirming whether the address is a part of the active set" + } + }, + "join_candidates(uint256,uint256)": { + "details": "Join the set of collator candidates Selector: 0a1bff60", + "params": { + "amount": "The amount self-bonded by the caller to become a collator candidate", + "candidateCount": "The number of candidates in the CandidatePool" + } + }, + "leave_candidates(uint256)": { + "details": "Leave the set of collator candidates Selector: 72b02a31", + "params": { + "candidateCount": "The number of candidates in the CandidatePool" + } + }, + "leave_nominators(uint256)": { + "details": "Request to leave the set of nominators Selector: b71d2153", + "params": { + "nominatorNominationCount": "The number of active nominations to be revoked by caller" + } + }, + "min_delegation()": { + "details": "Get the minimum delegation amount Selector: 72ce8933", + "returns": { "_0": "The minimum delegation amount" } + }, + "min_nomination()": { + "details": "Get the minimum nomination amount Selector: c9f593b2", + "returns": { "_0": "The minimum nomination amount" } + }, + "nominate(address,uint256,uint256,uint256)": { + "details": "Make a nomination in support of a collator candidate Selector: 49df6eb3", + "params": { + "amount": "The amount bonded in support of the collator candidate", + "collator": "The address of the supported collator candidate", + "collatorNominationCount": "The number of nominations in support of the candidate", + "nominatorNominationCount": "The number of existing nominations by the caller" + } + }, + "nominator_bond_less(address,uint256)": { + "details": "Request to bond less for nominators with respect to a specific collator candidate Selector: f6a52569", + "params": { + "candidate": "The address of the collator candidate for which nomination is decreased", + "less": "The amount by which the nomination is decreased" + } + }, + "nominator_bond_more(address,uint256)": { + "details": "Request to bond more for nominators with respect to a specific collator candidate Selector: 971d44c8", + "params": { + "candidate": "The address of the collator candidate for which nomination is increased", + "more": "The amount by which the nomination is increased" + } + }, + "nominator_nomination_count(address)": { + "details": "Get the NominatorNominationCount weight hint Selector: dae5659b", + "params": { + "nominator": "The address for which we are querying the nomination count" + }, + "returns": { "_0": "The number of nominations made by the nominator" } + }, + "points(uint256)": { + "details": "Total points awarded to all collators in a particular round Selector: 9799b4e7", + "params": { + "round": "the round for which we are querying the points total" + }, + "returns": { + "_0": "The total points awarded to all collators in the round" + } + }, + "revoke_nomination(address)": { + "details": "Request to revoke an existing nomination Selector: 4b65c34b", + "params": { + "collator": "The address of the collator candidate which will no longer be supported" + } + }, + "round()": { + "details": "Get the current round number Selector: 146ca531", + "returns": { "_0": "The current round number" } + }, + "schedule_candidate_bond_less(uint256)": { + "details": "Request to bond less for collator candidates Selector: 034c47bc", + "params": { + "less": "The amount to be subtracted from self-bond and unreserved" + } + }, + "schedule_delegator_bond_less(address,uint256)": { + "details": "Request to bond less for delegators with respect to a specific collator candidate Selector: 00043acf", + "params": { + "candidate": "The address of the collator candidate for which delegation shall decrease", + "less": "The amount by which the delegation is decreased (upon execution)" + } + }, + "schedule_leave_candidates(uint256)": { + "details": "Request to leave the set of collator candidates Selector: 60afbac6", + "params": { + "candidateCount": "The number of candidates in the CandidatePool" + } + }, + "schedule_leave_delegators()": { + "details": "Request to leave the set of delegators Selector: 65a5bbd0" + }, + "schedule_revoke_delegation(address)": { + "details": "Request to revoke an existing delegation Selector: 22266e75", + "params": { + "candidate": "The address of the collator candidate which will no longer be supported" + } + }, + "selected_candidates()": { + "details": "Get the selected candidates for the current round Selector: 0x89f47a21", + "returns": { "_0": "The selected candidate accounts" } + } + }, + "title": "The interface through which solidity contracts will interact with Parachain Staking We follow this same interface including four-byte function selectors, in the precompile that wraps the pallet Address : 0x0000000000000000000000000000000000000800", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "cancel_candidate_bond_less()": "583d0fdc", + "cancel_delegation_request(address)": "7284cf50", + "cancel_leave_candidates(uint256)": "0880b3e2", + "cancel_leave_delegators()": "2a987643", + "candidate_bond_less(uint256)": "289b6ba7", + "candidate_bond_more(uint256)": "c57bd3a8", + "candidate_count()": "4b1c4c29", + "candidate_delegation_count(address)": "815b796c", + "candidate_exit_is_pending(address)": "eb613b8a", + "candidate_request_is_pending(address)": "26ab05fb", + "collator_nomination_count(address)": "0ad6a7be", + "delegate(address,uint256,uint256,uint256)": "829f5ee3", + "delegation_request_is_pending(address,address)": "192e1db3", + "delegator_bond_more(address,uint256)": "f8331108", + "delegator_delegation_count(address)": "fbc51bca", + "execute_candidate_bond_less(address)": "a9a2b8b7", + "execute_delegation_request(address,address)": "e42366a6", + "execute_leave_candidates(address,uint256)": "3fdc4c30", + "execute_leave_delegators(address,uint256)": "a84a7468", + "go_offline()": "767e0450", + "go_online()": "d2f73ceb", + "is_candidate(address)": "8545c833", + "is_delegator(address)": "1f030587", + "is_nominator(address)": "8e5080e7", + "is_selected_candidate(address)": "8f6d27c7", + "join_candidates(uint256,uint256)": "0a1bff60", + "leave_candidates(uint256)": "72b02a31", + "leave_nominators(uint256)": "b71d2153", + "min_delegation()": "72ce8933", + "min_nomination()": "c9f593b2", + "nominate(address,uint256,uint256,uint256)": "49df6eb3", + "nominator_bond_less(address,uint256)": "f6a52569", + "nominator_bond_more(address,uint256)": "971d44c8", + "nominator_nomination_count(address)": "dae5659b", + "points(uint256)": "9799b4e7", + "revoke_nomination(address)": "4b65c34b", + "round()": "146ca531", + "schedule_candidate_bond_less(uint256)": "034c47bc", + "schedule_delegator_bond_less(address,uint256)": "00043acf", + "schedule_leave_candidates(uint256)": "60afbac6", + "schedule_leave_delegators()": "65a5bbd0", + "schedule_revoke_delegation(address)": "22266e75", + "selected_candidates()": "89f47a21" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"cancel_candidate_bond_less\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"cancel_delegation_request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"candidateCount\",\"type\":\"uint256\"}],\"name\":\"cancel_leave_candidates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancel_leave_delegators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"less\",\"type\":\"uint256\"}],\"name\":\"candidate_bond_less\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"more\",\"type\":\"uint256\"}],\"name\":\"candidate_bond_more\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"candidate_count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"candidate_delegation_count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"candidate_exit_is_pending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"candidate_request_is_pending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collator\",\"type\":\"address\"}],\"name\":\"collator_nomination_count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"candidateDelegationCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegatorDelegationCount\",\"type\":\"uint256\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"delegation_request_is_pending\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"more\",\"type\":\"uint256\"}],\"name\":\"delegator_bond_more\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"delegator_delegation_count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"execute_candidate_bond_less\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"execute_delegation_request\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"candidateDelegationCount\",\"type\":\"uint256\"}],\"name\":\"execute_leave_candidates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"delegatorDelegationCount\",\"type\":\"uint256\"}],\"name\":\"execute_leave_delegators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"go_offline\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"go_online\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"is_candidate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"}],\"name\":\"is_delegator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nominator\",\"type\":\"address\"}],\"name\":\"is_nominator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"is_selected_candidate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"candidateCount\",\"type\":\"uint256\"}],\"name\":\"join_candidates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"candidateCount\",\"type\":\"uint256\"}],\"name\":\"leave_candidates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nominatorNominationCount\",\"type\":\"uint256\"}],\"name\":\"leave_nominators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"min_delegation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"min_nomination\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"collatorNominationCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nominatorNominationCount\",\"type\":\"uint256\"}],\"name\":\"nominate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"less\",\"type\":\"uint256\"}],\"name\":\"nominator_bond_less\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"more\",\"type\":\"uint256\"}],\"name\":\"nominator_bond_more\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nominator\",\"type\":\"address\"}],\"name\":\"nominator_nomination_count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"}],\"name\":\"points\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"collator\",\"type\":\"address\"}],\"name\":\"revoke_nomination\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"round\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"less\",\"type\":\"uint256\"}],\"name\":\"schedule_candidate_bond_less\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"less\",\"type\":\"uint256\"}],\"name\":\"schedule_delegator_bond_less\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"candidateCount\",\"type\":\"uint256\"}],\"name\":\"schedule_leave_candidates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"schedule_leave_delegators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"candidate\",\"type\":\"address\"}],\"name\":\"schedule_revoke_delegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"selected_candidates\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"The Moonbeam Team\",\"kind\":\"dev\",\"methods\":{\"cancel_candidate_bond_less()\":{\"details\":\"Cancel pending candidate bond request Selector: 583d0fdc\"},\"cancel_delegation_request(address)\":{\"details\":\"Cancel pending delegation request (already made in support of input by caller) Selector: 7284cf50\",\"params\":{\"candidate\":\"The address of the candidate\"}},\"cancel_leave_candidates(uint256)\":{\"details\":\"Cancel request to leave the set of collator candidates Selector: 0880b3e2\",\"params\":{\"candidateCount\":\"The number of candidates in the CandidatePool\"}},\"cancel_leave_delegators()\":{\"details\":\"Cancel request to leave the set of delegators Selector: 2a987643\"},\"candidate_bond_less(uint256)\":{\"details\":\"Request to bond less for collator candidates Selector: 289b6ba7\",\"params\":{\"less\":\"The amount to be subtracted from self-bond and unreserved\"}},\"candidate_bond_more(uint256)\":{\"details\":\"Request to bond more for collator candidates Selector: c57bd3a8\",\"params\":{\"more\":\"The additional amount self-bonded\"}},\"candidate_count()\":{\"details\":\"Get the CandidateCount weight hint Selector: 4b1c4c29\",\"returns\":{\"_0\":\"The CandidateCount weight hint\"}},\"candidate_delegation_count(address)\":{\"details\":\"Get the CandidateDelegationCount weight hint Selector: 815b796c\",\"params\":{\"candidate\":\"The address for which we are querying the nomination count\"},\"returns\":{\"_0\":\"The number of nominations backing the collator\"}},\"candidate_exit_is_pending(address)\":{\"details\":\"Whether there exists a pending exit for candidate Selector: eb613b8a\",\"params\":{\"candidate\":\"the candidate for which the exit request was made\"},\"returns\":{\"_0\":\"Whether a pending request exists for such delegation\"}},\"candidate_request_is_pending(address)\":{\"details\":\"Whether there exists a pending bond less request made by a candidate Selector: 26ab05fb\",\"params\":{\"candidate\":\"the candidate which made the request\"},\"returns\":{\"_0\":\"Whether a pending bond less request was made by the candidate\"}},\"collator_nomination_count(address)\":{\"details\":\"Get the CollatorNominationCount weight hint Selector: 0ad6a7be\",\"params\":{\"collator\":\"The address for which we are querying the nomination count\"},\"returns\":{\"_0\":\"The number of nominations backing the collator\"}},\"delegate(address,uint256,uint256,uint256)\":{\"details\":\"Make a delegation in support of a collator candidate Selector: 829f5ee3\",\"params\":{\"amount\":\"The amount bonded in support of the collator candidate\",\"candidate\":\"The address of the supported collator candidate\",\"candidateDelegationCount\":\"The number of delegations in support of the candidate\",\"delegatorDelegationCount\":\"The number of existing delegations by the caller\"}},\"delegation_request_is_pending(address,address)\":{\"details\":\"Whether there exists a pending request for a delegation made by a delegator Selector: 192e1db3\",\"params\":{\"candidate\":\"the candidate for which the delegation was made\",\"delegator\":\"the delegator that made the delegation\"},\"returns\":{\"_0\":\"Whether a pending request exists for such delegation\"}},\"delegator_bond_more(address,uint256)\":{\"details\":\"Bond more for delegators with respect to a specific collator candidate Selector: f8331108\",\"params\":{\"candidate\":\"The address of the collator candidate for which delegation shall increase\",\"more\":\"The amount by which the delegation is increased\"}},\"delegator_delegation_count(address)\":{\"details\":\"Get the DelegatorDelegationCount weight hint Selector: fbc51bca\",\"params\":{\"delegator\":\"The address for which we are querying the delegation count\"},\"returns\":{\"_0\":\"The number of delegations made by the delegator\"}},\"execute_candidate_bond_less(address)\":{\"details\":\"Execute pending candidate bond request Selector: a9a2b8b7\",\"params\":{\"candidate\":\"The address for the candidate for which the request will be executed\"}},\"execute_delegation_request(address,address)\":{\"details\":\"Execute pending delegation request (if exists && is due) Selector: e42366a6\",\"params\":{\"candidate\":\"The address of the candidate\",\"delegator\":\"The address of the delegator\"}},\"execute_leave_candidates(address,uint256)\":{\"details\":\"Execute due request to leave the set of collator candidates Selector: 3fdc4c30\",\"params\":{\"candidate\":\"The candidate address for which the pending exit request will be executed\",\"candidateDelegationCount\":\"The number of delegations for the candidate to be revoked\"}},\"execute_leave_delegators(address,uint256)\":{\"details\":\"Execute request to leave the set of delegators and revoke all delegations Selector: a84a7468\",\"params\":{\"delegator\":\"The leaving delegator\",\"delegatorDelegationCount\":\"The number of active delegations to be revoked by delegator\"}},\"go_offline()\":{\"details\":\"Temporarily leave the set of collator candidates without unbonding Selector: 767e0450\"},\"go_online()\":{\"details\":\"Rejoin the set of collator candidates if previously had called `go_offline` Selector: d2f73ceb\"},\"is_candidate(address)\":{\"details\":\"Check whether the specified address is currently a collator candidate Selector: 8545c833\",\"params\":{\"candidate\":\"the address that we want to confirm is a collator andidate\"},\"returns\":{\"_0\":\"A boolean confirming whether the address is a collator candidate\"}},\"is_delegator(address)\":{\"details\":\"Check whether the specified address is currently a staking delegator Selector: 1f030587\",\"params\":{\"delegator\":\"the address that we want to confirm is a delegator\"},\"returns\":{\"_0\":\"A boolean confirming whether the address is a delegator\"}},\"is_nominator(address)\":{\"details\":\"Check whether the specified address is currently a staking nominator Selector: 8e5080e7\",\"params\":{\"nominator\":\"the address that we want to confirm is a nominator\"},\"returns\":{\"_0\":\"A boolean confirming whether the address is a nominator\"}},\"is_selected_candidate(address)\":{\"details\":\"Check whether the specifies address is currently a part of the active set Selector: 8f6d27c7\",\"params\":{\"candidate\":\"the address that we want to confirm is a part of the active set\"},\"returns\":{\"_0\":\"A boolean confirming whether the address is a part of the active set\"}},\"join_candidates(uint256,uint256)\":{\"details\":\"Join the set of collator candidates Selector: 0a1bff60\",\"params\":{\"amount\":\"The amount self-bonded by the caller to become a collator candidate\",\"candidateCount\":\"The number of candidates in the CandidatePool\"}},\"leave_candidates(uint256)\":{\"details\":\"Leave the set of collator candidates Selector: 72b02a31\",\"params\":{\"candidateCount\":\"The number of candidates in the CandidatePool\"}},\"leave_nominators(uint256)\":{\"details\":\"Request to leave the set of nominators Selector: b71d2153\",\"params\":{\"nominatorNominationCount\":\"The number of active nominations to be revoked by caller\"}},\"min_delegation()\":{\"details\":\"Get the minimum delegation amount Selector: 72ce8933\",\"returns\":{\"_0\":\"The minimum delegation amount\"}},\"min_nomination()\":{\"details\":\"Get the minimum nomination amount Selector: c9f593b2\",\"returns\":{\"_0\":\"The minimum nomination amount\"}},\"nominate(address,uint256,uint256,uint256)\":{\"details\":\"Make a nomination in support of a collator candidate Selector: 49df6eb3\",\"params\":{\"amount\":\"The amount bonded in support of the collator candidate\",\"collator\":\"The address of the supported collator candidate\",\"collatorNominationCount\":\"The number of nominations in support of the candidate\",\"nominatorNominationCount\":\"The number of existing nominations by the caller\"}},\"nominator_bond_less(address,uint256)\":{\"details\":\"Request to bond less for nominators with respect to a specific collator candidate Selector: f6a52569\",\"params\":{\"candidate\":\"The address of the collator candidate for which nomination is decreased\",\"less\":\"The amount by which the nomination is decreased\"}},\"nominator_bond_more(address,uint256)\":{\"details\":\"Request to bond more for nominators with respect to a specific collator candidate Selector: 971d44c8\",\"params\":{\"candidate\":\"The address of the collator candidate for which nomination is increased\",\"more\":\"The amount by which the nomination is increased\"}},\"nominator_nomination_count(address)\":{\"details\":\"Get the NominatorNominationCount weight hint Selector: dae5659b\",\"params\":{\"nominator\":\"The address for which we are querying the nomination count\"},\"returns\":{\"_0\":\"The number of nominations made by the nominator\"}},\"points(uint256)\":{\"details\":\"Total points awarded to all collators in a particular round Selector: 9799b4e7\",\"params\":{\"round\":\"the round for which we are querying the points total\"},\"returns\":{\"_0\":\"The total points awarded to all collators in the round\"}},\"revoke_nomination(address)\":{\"details\":\"Request to revoke an existing nomination Selector: 4b65c34b\",\"params\":{\"collator\":\"The address of the collator candidate which will no longer be supported\"}},\"round()\":{\"details\":\"Get the current round number Selector: 146ca531\",\"returns\":{\"_0\":\"The current round number\"}},\"schedule_candidate_bond_less(uint256)\":{\"details\":\"Request to bond less for collator candidates Selector: 034c47bc\",\"params\":{\"less\":\"The amount to be subtracted from self-bond and unreserved\"}},\"schedule_delegator_bond_less(address,uint256)\":{\"details\":\"Request to bond less for delegators with respect to a specific collator candidate Selector: 00043acf\",\"params\":{\"candidate\":\"The address of the collator candidate for which delegation shall decrease\",\"less\":\"The amount by which the delegation is decreased (upon execution)\"}},\"schedule_leave_candidates(uint256)\":{\"details\":\"Request to leave the set of collator candidates Selector: 60afbac6\",\"params\":{\"candidateCount\":\"The number of candidates in the CandidatePool\"}},\"schedule_leave_delegators()\":{\"details\":\"Request to leave the set of delegators Selector: 65a5bbd0\"},\"schedule_revoke_delegation(address)\":{\"details\":\"Request to revoke an existing delegation Selector: 22266e75\",\"params\":{\"candidate\":\"The address of the collator candidate which will no longer be supported\"}},\"selected_candidates()\":{\"details\":\"Get the selected candidates for the current round Selector: 0x89f47a21\",\"returns\":{\"_0\":\"The selected candidate accounts\"}}},\"title\":\"The interface through which solidity contracts will interact with Parachain Staking We follow this same interface including four-byte function selectors, in the precompile that wraps the pallet Address : 0x0000000000000000000000000000000000000800\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancel_leave_delegators()\":{\"notice\":\"DEPRECATED, cancel individual revokes instead\"},\"candidate_bond_less(uint256)\":{\"notice\":\"DEPRECATED, replaced by schedule_candidate_bond_less, execute_candidate_bond_request, cancel_candidate_bond_request\"},\"collator_nomination_count(address)\":{\"notice\":\"DEPRECATED, replaced by candidate_delegation_count\"},\"execute_leave_delegators(address,uint256)\":{\"notice\":\"DEPRECATED, execute individual revokes instead\"},\"is_nominator(address)\":{\"notice\":\"DEPRECATED, replaced by is_delegator\"},\"leave_candidates(uint256)\":{\"notice\":\"DEPRECATED, replaced by schedule_leave_candidates, execute_leave_candidates, cancel_leave_candidates\"},\"leave_nominators(uint256)\":{\"notice\":\"DEPRECATED, replaced by schedule_leave_delegators, execute_leave_delegators, cancel_leave_delegators\"},\"min_nomination()\":{\"notice\":\"DEPRECATED, replaced by min_delegation\"},\"nominate(address,uint256,uint256,uint256)\":{\"notice\":\"DEPRECATED, replaced by delegate\"},\"nominator_bond_less(address,uint256)\":{\"notice\":\"DEPRECATED, replaced by schedule_delegator_bond_less, execute_delegation_request, cancel_delegation_request\"},\"nominator_bond_more(address,uint256)\":{\"notice\":\"DEPRECATED, replaced by delegator_bond_more\"},\"nominator_nomination_count(address)\":{\"notice\":\"DEPRECATED, replaced by delegator_delegation_count\"},\"revoke_nomination(address)\":{\"notice\":\"DEPRECATED, replaced by schedule_revoke_delegation, execute_delegation_request, cancel_delegation_request\"},\"schedule_leave_delegators()\":{\"notice\":\"DEPRECATED, schedule individual revokes instead\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"ParachainStaking\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x20aee59af4381dddfd83cd4cbdbf9da8178fbcc253a3ef3147f7325b7fe7fe10\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://6280c1f1c49670c81ddf394b6ec31133c982df79fe511955ff7b190e872aadb7\",\"dweb:/ipfs/Qma8gjPkY9htbew81VPJg8tbcwh3GcbRw3zg614TQys8J2\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { + "kind": "user", + "methods": { + "cancel_leave_delegators()": { + "notice": "DEPRECATED, cancel individual revokes instead" + }, + "candidate_bond_less(uint256)": { + "notice": "DEPRECATED, replaced by schedule_candidate_bond_less, execute_candidate_bond_request, cancel_candidate_bond_request" + }, + "collator_nomination_count(address)": { + "notice": "DEPRECATED, replaced by candidate_delegation_count" + }, + "execute_leave_delegators(address,uint256)": { + "notice": "DEPRECATED, execute individual revokes instead" + }, + "is_nominator(address)": { + "notice": "DEPRECATED, replaced by is_delegator" + }, + "leave_candidates(uint256)": { + "notice": "DEPRECATED, replaced by schedule_leave_candidates, execute_leave_candidates, cancel_leave_candidates" + }, + "leave_nominators(uint256)": { + "notice": "DEPRECATED, replaced by schedule_leave_delegators, execute_leave_delegators, cancel_leave_delegators" + }, + "min_nomination()": { + "notice": "DEPRECATED, replaced by min_delegation" + }, + "nominate(address,uint256,uint256,uint256)": { + "notice": "DEPRECATED, replaced by delegate" + }, + "nominator_bond_less(address,uint256)": { + "notice": "DEPRECATED, replaced by schedule_delegator_bond_less, execute_delegation_request, cancel_delegation_request" + }, + "nominator_bond_more(address,uint256)": { + "notice": "DEPRECATED, replaced by delegator_bond_more" + }, + "nominator_nomination_count(address)": { + "notice": "DEPRECATED, replaced by delegator_delegation_count" + }, + "revoke_nomination(address)": { + "notice": "DEPRECATED, replaced by schedule_revoke_delegation, execute_delegation_request, cancel_delegation_request" + }, + "schedule_leave_delegators()": { + "notice": "DEPRECATED, schedule individual revokes instead" + } + }, + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @author The Moonbeam Team\n * @title The interface through which solidity contracts will interact with Parachain Staking\n * We follow this same interface including four-byte function selectors, in the precompile that\n * wraps the pallet\n * Address : 0x0000000000000000000000000000000000000800\n */\n\ninterface ParachainStaking {\n /// DEPRECATED, replaced by is_delegator\n /// @dev Check whether the specified address is currently a staking nominator\n /// Selector: 8e5080e7\n /// @param nominator the address that we want to confirm is a nominator\n /// @return A boolean confirming whether the address is a nominator\n function is_nominator(address nominator) external view returns (bool);\n\n /// @dev Check whether the specified address is currently a staking delegator\n /// Selector: 1f030587\n /// @param delegator the address that we want to confirm is a delegator\n /// @return A boolean confirming whether the address is a delegator\n function is_delegator(address delegator) external view returns (bool);\n\n /// @dev Check whether the specified address is currently a collator candidate\n /// Selector: 8545c833\n /// @param candidate the address that we want to confirm is a collator andidate\n /// @return A boolean confirming whether the address is a collator candidate\n function is_candidate(address candidate) external view returns (bool);\n\n /// @dev Check whether the specifies address is currently a part of the active set\n /// Selector: 8f6d27c7\n /// @param candidate the address that we want to confirm is a part of the active set\n /// @return A boolean confirming whether the address is a part of the active set\n function is_selected_candidate(address candidate)\n external\n view\n returns (bool);\n\n /// @dev Total points awarded to all collators in a particular round\n /// Selector: 9799b4e7\n /// @param round the round for which we are querying the points total\n /// @return The total points awarded to all collators in the round\n function points(uint256 round) external view returns (uint256);\n\n /// DEPRECATED, replaced by min_delegation\n /// @dev Get the minimum nomination amount\n /// Selector: c9f593b2\n /// @return The minimum nomination amount\n function min_nomination() external view returns (uint256);\n\n /// @dev Get the minimum delegation amount\n /// Selector: 72ce8933\n /// @return The minimum delegation amount\n function min_delegation() external view returns (uint256);\n\n /// @dev Get the CandidateCount weight hint\n /// Selector: 4b1c4c29\n /// @return The CandidateCount weight hint\n function candidate_count() external view returns (uint256);\n\n /// @dev Get the current round number\n /// Selector: 146ca531\n /// @return The current round number\n function round() external view returns (uint256);\n\n /// DEPRECATED, replaced by candidate_delegation_count\n /// @dev Get the CollatorNominationCount weight hint\n /// Selector: 0ad6a7be\n /// @param collator The address for which we are querying the nomination count\n /// @return The number of nominations backing the collator\n function collator_nomination_count(address collator)\n external\n view\n returns (uint256);\n\n /// @dev Get the CandidateDelegationCount weight hint\n /// Selector: 815b796c\n /// @param candidate The address for which we are querying the nomination count\n /// @return The number of nominations backing the collator\n function candidate_delegation_count(address candidate)\n external\n view\n returns (uint256);\n\n /// DEPRECATED, replaced by delegator_delegation_count\n /// @dev Get the NominatorNominationCount weight hint\n /// Selector: dae5659b\n /// @param nominator The address for which we are querying the nomination count\n /// @return The number of nominations made by the nominator\n function nominator_nomination_count(address nominator)\n external\n view\n returns (uint256);\n\n /// @dev Get the DelegatorDelegationCount weight hint\n /// Selector: fbc51bca\n /// @param delegator The address for which we are querying the delegation count\n /// @return The number of delegations made by the delegator\n function delegator_delegation_count(address delegator)\n external\n view\n returns (uint256);\n\n /// @dev Get the selected candidates for the current round\n /// Selector: 0x89f47a21\n /// @return The selected candidate accounts\n function selected_candidates() external view returns (address[] memory);\n\n /// @dev Whether there exists a pending request for a delegation made by a delegator\n /// Selector: 192e1db3\n /// @param delegator the delegator that made the delegation\n /// @param candidate the candidate for which the delegation was made\n /// @return Whether a pending request exists for such delegation\n function delegation_request_is_pending(address delegator, address candidate)\n external\n view\n returns (bool);\n\n /// @dev Whether there exists a pending exit for candidate\n /// Selector: eb613b8a\n /// @param candidate the candidate for which the exit request was made\n /// @return Whether a pending request exists for such delegation\n function candidate_exit_is_pending(address candidate)\n external\n view\n returns (bool);\n\n /// @dev Whether there exists a pending bond less request made by a candidate\n /// Selector: 26ab05fb\n /// @param candidate the candidate which made the request\n /// @return Whether a pending bond less request was made by the candidate\n function candidate_request_is_pending(address candidate)\n external\n view\n returns (bool);\n\n /// @dev Join the set of collator candidates\n /// Selector: 0a1bff60\n /// @param amount The amount self-bonded by the caller to become a collator candidate\n /// @param candidateCount The number of candidates in the CandidatePool\n function join_candidates(uint256 amount, uint256 candidateCount) external;\n\n /// DEPRECATED, replaced by schedule_leave_candidates, execute_leave_candidates,\n /// cancel_leave_candidates\n /// @dev Leave the set of collator candidates\n /// Selector: 72b02a31\n /// @param candidateCount The number of candidates in the CandidatePool\n function leave_candidates(uint256 candidateCount) external;\n\n /// @dev Request to leave the set of collator candidates\n /// Selector: 60afbac6\n /// @param candidateCount The number of candidates in the CandidatePool\n function schedule_leave_candidates(uint256 candidateCount) external;\n\n /// @dev Execute due request to leave the set of collator candidates\n /// Selector: 3fdc4c30\n /// @param candidate The candidate address for which the pending exit request will be executed\n /// @param candidateDelegationCount The number of delegations for the candidate to be revoked\n function execute_leave_candidates(\n address candidate,\n uint256 candidateDelegationCount\n ) external;\n\n /// @dev Cancel request to leave the set of collator candidates\n /// Selector: 0880b3e2\n /// @param candidateCount The number of candidates in the CandidatePool\n function cancel_leave_candidates(uint256 candidateCount) external;\n\n /// @dev Temporarily leave the set of collator candidates without unbonding\n /// Selector: 767e0450\n function go_offline() external;\n\n /// @dev Rejoin the set of collator candidates if previously had called `go_offline`\n /// Selector: d2f73ceb\n function go_online() external;\n\n /// @dev Request to bond more for collator candidates\n /// Selector: c57bd3a8\n /// @param more The additional amount self-bonded\n function candidate_bond_more(uint256 more) external;\n\n /// DEPRECATED, replaced by schedule_candidate_bond_less, execute_candidate_bond_request,\n /// cancel_candidate_bond_request\n /// @dev Request to bond less for collator candidates\n /// Selector: 289b6ba7\n /// @param less The amount to be subtracted from self-bond and unreserved\n function candidate_bond_less(uint256 less) external;\n\n /// @dev Request to bond less for collator candidates\n /// Selector: 034c47bc\n /// @param less The amount to be subtracted from self-bond and unreserved\n function schedule_candidate_bond_less(uint256 less) external;\n\n /// @dev Execute pending candidate bond request\n /// Selector: a9a2b8b7\n /// @param candidate The address for the candidate for which the request will be executed\n function execute_candidate_bond_less(address candidate) external;\n\n /// @dev Cancel pending candidate bond request\n /// Selector: 583d0fdc\n function cancel_candidate_bond_less() external;\n\n /// DEPRECATED, replaced by delegate\n /// @dev Make a nomination in support of a collator candidate\n /// Selector: 49df6eb3\n /// @param collator The address of the supported collator candidate\n /// @param amount The amount bonded in support of the collator candidate\n /// @param collatorNominationCount The number of nominations in support of the candidate\n /// @param nominatorNominationCount The number of existing nominations by the caller\n function nominate(\n address collator,\n uint256 amount,\n uint256 collatorNominationCount,\n uint256 nominatorNominationCount\n ) external;\n\n /// @dev Make a delegation in support of a collator candidate\n /// Selector: 829f5ee3\n /// @param candidate The address of the supported collator candidate\n /// @param amount The amount bonded in support of the collator candidate\n /// @param candidateDelegationCount The number of delegations in support of the candidate\n /// @param delegatorDelegationCount The number of existing delegations by the caller\n function delegate(\n address candidate,\n uint256 amount,\n uint256 candidateDelegationCount,\n uint256 delegatorDelegationCount\n ) external;\n\n /// DEPRECATED, replaced by schedule_leave_delegators, execute_leave_delegators,\n /// cancel_leave_delegators\n /// @dev Request to leave the set of nominators\n /// Selector: b71d2153\n /// @param nominatorNominationCount The number of active nominations to be revoked by caller\n function leave_nominators(uint256 nominatorNominationCount) external;\n\n /// DEPRECATED, schedule individual revokes instead\n /// @dev Request to leave the set of delegators\n /// Selector: 65a5bbd0\n function schedule_leave_delegators() external;\n\n /// DEPRECATED, execute individual revokes instead\n /// @dev Execute request to leave the set of delegators and revoke all delegations\n /// Selector: a84a7468\n /// @param delegator The leaving delegator\n /// @param delegatorDelegationCount The number of active delegations to be revoked by delegator\n function execute_leave_delegators(\n address delegator,\n uint256 delegatorDelegationCount\n ) external;\n\n /// DEPRECATED, cancel individual revokes instead\n /// @dev Cancel request to leave the set of delegators\n /// Selector: 2a987643\n function cancel_leave_delegators() external;\n\n /// DEPRECATED, replaced by schedule_revoke_delegation, execute_delegation_request,\n /// cancel_delegation_request\n /// @dev Request to revoke an existing nomination\n /// Selector: 4b65c34b\n /// @param collator The address of the collator candidate which will no longer be supported\n function revoke_nomination(address collator) external;\n\n /// @dev Request to revoke an existing delegation\n /// Selector: 22266e75\n /// @param candidate The address of the collator candidate which will no longer be supported\n function schedule_revoke_delegation(address candidate) external;\n\n /// DEPRECATED, replaced by delegator_bond_more\n /// @dev Request to bond more for nominators with respect to a specific collator candidate\n /// Selector: 971d44c8\n /// @param candidate The address of the collator candidate for which nomination is increased\n /// @param more The amount by which the nomination is increased\n function nominator_bond_more(address candidate, uint256 more) external;\n\n /// @dev Bond more for delegators with respect to a specific collator candidate\n /// Selector: f8331108\n /// @param candidate The address of the collator candidate for which delegation shall increase\n /// @param more The amount by which the delegation is increased\n function delegator_bond_more(address candidate, uint256 more) external;\n\n /// DEPRECATED, replaced by schedule_delegator_bond_less, execute_delegation_request,\n /// cancel_delegation_request\n /// @dev Request to bond less for nominators with respect to a specific collator candidate\n /// Selector: f6a52569\n /// @param candidate The address of the collator candidate for which nomination is decreased\n /// @param less The amount by which the nomination is decreased\n function nominator_bond_less(address candidate, uint256 less) external;\n\n /// @dev Request to bond less for delegators with respect to a specific collator candidate\n /// Selector: 00043acf\n /// @param candidate The address of the collator candidate for which delegation shall decrease\n /// @param less The amount by which the delegation is decreased (upon execution)\n function schedule_delegator_bond_less(address candidate, uint256 less)\n external;\n\n /// @dev Execute pending delegation request (if exists && is due)\n /// Selector: e42366a6\n /// @param delegator The address of the delegator\n /// @param candidate The address of the candidate\n function execute_delegation_request(address delegator, address candidate)\n external;\n\n /// @dev Cancel pending delegation request (already made in support of input by caller)\n /// Selector: 7284cf50\n /// @param candidate The address of the candidate\n function cancel_delegation_request(address candidate) external;\n}\n" +} diff --git a/tests/contracts/compiled/Permit.json b/tests/contracts/compiled/Permit.json new file mode 100644 index 0000000000..2d41a2d6de --- /dev/null +++ b/tests/contracts/compiled/Permit.json @@ -0,0 +1,99 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "name": "nonces", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "owner", "type": "address" }, + { "internalType": "address", "name": "spender", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "deadline", "type": "uint256" }, + { "internalType": "uint8", "name": "v", "type": "uint8" }, + { "internalType": "bytes32", "name": "r", "type": "bytes32" }, + { "internalType": "bytes32", "name": "s", "type": "bytes32" } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "DOMAIN_SEPARATOR()": { + "details": "Returns the EIP712 domain separator. It is used to avoid replay attacks accross assets or other similar EIP712 message structures. Selector: 0x3644e515" + }, + "nonces(address)": { + "details": "Returns the current nonce for given owner. A permit must have this nonce to be consumed, which will increase the nonce by one. Selector: 0x7ecebe00" + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "details": "Consumes an approval permit. Anyone can call this function for a permit. Selector: 0xd505accf", + "params": { + "deadline": "Timestamp after which the permit will no longer be valid.", + "owner": "Owner of the tokens issuing the permit", + "r": "R component of the signature.", + "s": "S component of the signature.", + "spender": "Address whose allowance will be increased.", + "v": "V component of the signature.", + "value": "Allowed value." + } + } + }, + "title": "Extension of the ERC20 interface that allows users to sign permit messages to interact with contracts without needing to make a first approve transaction.", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the EIP712 domain separator. It is used to avoid replay attacks accross assets or other similar EIP712 message structures. Selector: 0x3644e515\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for given owner. A permit must have this nonce to be consumed, which will increase the nonce by one. Selector: 0x7ecebe00\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Consumes an approval permit. Anyone can call this function for a permit. Selector: 0xd505accf\",\"params\":{\"deadline\":\"Timestamp after which the permit will no longer be valid.\",\"owner\":\"Owner of the tokens issuing the permit\",\"r\":\"R component of the signature.\",\"s\":\"S component of the signature.\",\"spender\":\"Address whose allowance will be increased.\",\"v\":\"V component of the signature.\",\"value\":\"Allowed value.\"}}},\"title\":\"Extension of the ERC20 interface that allows users to sign permit messages to interact with contracts without needing to make a first approve transaction.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Permit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x3ddfb89aa6e0d9abfa373081c9331cf5ce045c5683c1ee33f379069db7cb082c\",\"urls\":[\"bzz-raw://f89244a238a65761e2b0fa4622083ffca01225dabe8b28cf55fa9482c9a5f44d\",\"dweb:/ipfs/QmcR2mLWLMFof1Jo89fHsqsSGhpB5fTcETiWeCvQpCg4cW\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "pragma solidity ^0.8.0;\n\n/**\n * @title Extension of the ERC20 interface that allows users to\n * sign permit messages to interact with contracts without needing to\n * make a first approve transaction.\n */\ninterface Permit {\n /**\n * @dev Consumes an approval permit.\n * Anyone can call this function for a permit.\n * Selector: 0xd505accf\n * @param owner Owner of the tokens issuing the permit\n * @param spender Address whose allowance will be increased.\n * @param value Allowed value.\n * @param deadline Timestamp after which the permit will no longer be valid.\n * @param v V component of the signature.\n * @param r R component of the signature.\n * @param s S component of the signature.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for given owner.\n * A permit must have this nonce to be consumed, which will\n * increase the nonce by one.\n * Selector: 0x7ecebe00\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the EIP712 domain separator. It is used to avoid replay\n * attacks accross assets or other similar EIP712 message structures.\n * Selector: 0x3644e515\n */\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n" +} diff --git a/tests/contracts/compiled/PoliticalPartyDao.json b/tests/contracts/compiled/PoliticalPartyDao.json new file mode 100644 index 0000000000..f536a4b4f3 --- /dev/null +++ b/tests/contracts/compiled/PoliticalPartyDao.json @@ -0,0 +1,4403 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b5060405161035338038061035383398181016040528101906100329190610073565b506100a0565b600080fd5b6000819050919050565b6100508161003d565b811461005b57600080fd5b50565b60008151905061006d81610047565b92915050565b60006020828403121561008957610088610038565b5b60006100978482850161005e565b91505092915050565b6102a4806100af6000396000f3fe60806040526004361061004a5760003560e01c80633ccfd60b1461004f578063406569631461006657806342e94c90146100825780638239f064146100c0578063be9886a0146100d7575b600080fd5b34801561005b57600080fd5b506100646100ee565b005b610080600480360381019061007b9190610165565b6100f0565b005b34801561008e57600080fd5b506100a960048036038101906100a491906101f0565b6100f3565b6040516100b7929190610245565b60405180910390f35b3480156100cc57600080fd5b506100d5610124565b005b3480156100e357600080fd5b506100ec610126565b005b565b50565b60006020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b565b565b600080fd5b60008115159050919050565b6101428161012d565b811461014d57600080fd5b50565b60008135905061015f81610139565b92915050565b60006020828403121561017b5761017a610128565b5b600061018984828501610150565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000813590506101ea816101c4565b92915050565b60006020828403121561020657610205610128565b5b6000610214848285016101db565b91505092915050565b6000819050919050565b6102308161021d565b82525050565b61023f8161012d565b82525050565b600060408201905061025a6000830185610227565b6102676020830184610236565b939250505056fea2646970667358221220717a6f7a5cba55b7ae35dd6cfa00fbd311438f729323bc40acb93dcf72d4440e64736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposal_hash", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "change_vote", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [{ "internalType": "bool", "name": "vote", "type": "bool" }], + "name": "contribute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" } + ], + "name": "contributions", + "outputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "bool", "name": "vote", "type": "bool" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw_early", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "contribute(bool)": { + "params": { "vote": "Whether you support the referendum (true)." } + } + }, + "version": 1 + }, + "evm": { + "assembly": " /* \"main.sol\":1165:2227 contract PoliticalPartyDao {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":1258:1341 constructor(uint256 proposal_hash) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n pop\n /* \"main.sol\":1165:2227 contract PoliticalPartyDao {... */\n jump(tag_6)\n /* \"#utility.yul\":88:205 */\ntag_8:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:411 */\ntag_10:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\ntag_11:\n /* \"#utility.yul\":490:514 */\n tag_19\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_10\n jump\t// in\ntag_19:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_20\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\ntag_20:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:688 */\ntag_12:\n /* \"#utility.yul\":602:607 */\n 0x00\n /* \"#utility.yul\":633:639 */\n dup2\n /* \"#utility.yul\":627:640 */\n mload\n /* \"#utility.yul\":618:640 */\n swap1\n pop\n /* \"#utility.yul\":649:682 */\n tag_22\n /* \"#utility.yul\":676:681 */\n dup2\n /* \"#utility.yul\":649:682 */\n tag_11\n jump\t// in\ntag_22:\n /* \"#utility.yul\":545:688 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":694:1045 */\ntag_3:\n /* \"#utility.yul\":764:770 */\n 0x00\n /* \"#utility.yul\":813:815 */\n 0x20\n /* \"#utility.yul\":801:810 */\n dup3\n /* \"#utility.yul\":792:799 */\n dup5\n /* \"#utility.yul\":788:811 */\n sub\n /* \"#utility.yul\":784:816 */\n slt\n /* \"#utility.yul\":781:900 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":819:898 */\n tag_25\n tag_8\n jump\t// in\ntag_25:\n /* \"#utility.yul\":781:900 */\ntag_24:\n /* \"#utility.yul\":939:940 */\n 0x00\n /* \"#utility.yul\":964:1028 */\n tag_26\n /* \"#utility.yul\":1020:1027 */\n dup5\n /* \"#utility.yul\":1011:1017 */\n dup3\n /* \"#utility.yul\":1000:1009 */\n dup6\n /* \"#utility.yul\":996:1018 */\n add\n /* \"#utility.yul\":964:1028 */\n tag_12\n jump\t// in\ntag_26:\n /* \"#utility.yul\":954:1028 */\n swap2\n pop\n /* \"#utility.yul\":910:1038 */\n pop\n /* \"#utility.yul\":694:1045 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":1165:2227 contract PoliticalPartyDao {... */\ntag_6:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":1165:2227 contract PoliticalPartyDao {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3ccfd60b\n eq\n tag_2\n jumpi\n dup1\n 0x40656963\n eq\n tag_3\n jumpi\n dup1\n 0x42e94c90\n eq\n tag_4\n jumpi\n dup1\n 0x8239f064\n eq\n tag_5\n jumpi\n dup1\n 0xbe9886a0\n eq\n tag_6\n jumpi\n tag_1:\n 0x00\n dup1\n revert\n /* \"main.sol\":1745:1776 function withdraw() external {} */\n tag_2:\n callvalue\n dup1\n iszero\n tag_7\n jumpi\n 0x00\n dup1\n revert\n tag_7:\n pop\n tag_8\n tag_9\n jump\t// in\n tag_8:\n stop\n /* \"main.sol\":1497:1547 function contribute(bool vote) external payable {} */\n tag_3:\n tag_10\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n tag_13\n jump\t// in\n tag_10:\n stop\n /* \"main.sol\":1198:1251 mapping(address => Contribution) public contributions */\n tag_4:\n callvalue\n dup1\n iszero\n tag_14\n jumpi\n 0x00\n dup1\n revert\n tag_14:\n pop\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n mload(0x40)\n tag_19\n swap3\n swap2\n swap1\n tag_20\n jump\t// in\n tag_19:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2087:2225 function withdraw_early() external {... */\n tag_5:\n callvalue\n dup1\n iszero\n tag_21\n jumpi\n 0x00\n dup1\n revert\n tag_21:\n pop\n tag_22\n tag_23\n jump\t// in\n tag_22:\n stop\n /* \"main.sol\":1630:1664 function change_vote() external {} */\n tag_6:\n callvalue\n dup1\n iszero\n tag_24\n jumpi\n 0x00\n dup1\n revert\n tag_24:\n pop\n tag_25\n tag_26\n jump\t// in\n tag_25:\n stop\n /* \"main.sol\":1745:1776 function withdraw() external {} */\n tag_9:\n jump\t// out\n /* \"main.sol\":1497:1547 function contribute(bool vote) external payable {} */\n tag_13:\n pop\n jump\t// out\n /* \"main.sol\":1198:1251 mapping(address => Contribution) public contributions */\n tag_18:\n mstore(0x20, 0x00)\n dup1\n 0x00\n mstore\n keccak256(0x00, 0x40)\n 0x00\n swap2\n pop\n swap1\n pop\n dup1\n 0x00\n add\n sload\n swap1\n dup1\n 0x01\n add\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xff\n and\n swap1\n pop\n dup3\n jump\t// out\n /* \"main.sol\":2087:2225 function withdraw_early() external {... */\n tag_23:\n jump\t// out\n /* \"main.sol\":1630:1664 function change_vote() external {} */\n tag_26:\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_32:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:424 */\n tag_34:\n /* \"#utility.yul\":368:375 */\n 0x00\n /* \"#utility.yul\":411:416 */\n dup2\n /* \"#utility.yul\":404:417 */\n iszero\n /* \"#utility.yul\":397:418 */\n iszero\n /* \"#utility.yul\":386:418 */\n swap1\n pop\n /* \"#utility.yul\":334:424 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":430:546 */\n tag_35:\n /* \"#utility.yul\":500:521 */\n tag_50\n /* \"#utility.yul\":515:520 */\n dup2\n /* \"#utility.yul\":500:521 */\n tag_34\n jump\t// in\n tag_50:\n /* \"#utility.yul\":493:498 */\n dup2\n /* \"#utility.yul\":490:522 */\n eq\n /* \"#utility.yul\":480:540 */\n tag_51\n jumpi\n /* \"#utility.yul\":536:537 */\n 0x00\n /* \"#utility.yul\":533:534 */\n dup1\n /* \"#utility.yul\":526:538 */\n revert\n /* \"#utility.yul\":480:540 */\n tag_51:\n /* \"#utility.yul\":430:546 */\n pop\n jump\t// out\n /* \"#utility.yul\":552:685 */\n tag_36:\n /* \"#utility.yul\":595:600 */\n 0x00\n /* \"#utility.yul\":633:639 */\n dup2\n /* \"#utility.yul\":620:640 */\n calldataload\n /* \"#utility.yul\":611:640 */\n swap1\n pop\n /* \"#utility.yul\":649:679 */\n tag_53\n /* \"#utility.yul\":673:678 */\n dup2\n /* \"#utility.yul\":649:679 */\n tag_35\n jump\t// in\n tag_53:\n /* \"#utility.yul\":552:685 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":691:1014 */\n tag_12:\n /* \"#utility.yul\":747:753 */\n 0x00\n /* \"#utility.yul\":796:798 */\n 0x20\n /* \"#utility.yul\":784:793 */\n dup3\n /* \"#utility.yul\":775:782 */\n dup5\n /* \"#utility.yul\":771:794 */\n sub\n /* \"#utility.yul\":767:799 */\n slt\n /* \"#utility.yul\":764:883 */\n iszero\n tag_55\n jumpi\n /* \"#utility.yul\":802:881 */\n tag_56\n tag_32\n jump\t// in\n tag_56:\n /* \"#utility.yul\":764:883 */\n tag_55:\n /* \"#utility.yul\":922:923 */\n 0x00\n /* \"#utility.yul\":947:997 */\n tag_57\n /* \"#utility.yul\":989:996 */\n dup5\n /* \"#utility.yul\":980:986 */\n dup3\n /* \"#utility.yul\":969:978 */\n dup6\n /* \"#utility.yul\":965:987 */\n add\n /* \"#utility.yul\":947:997 */\n tag_36\n jump\t// in\n tag_57:\n /* \"#utility.yul\":937:997 */\n swap2\n pop\n /* \"#utility.yul\":893:1007 */\n pop\n /* \"#utility.yul\":691:1014 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1020:1146 */\n tag_37:\n /* \"#utility.yul\":1057:1064 */\n 0x00\n /* \"#utility.yul\":1097:1139 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1090:1095 */\n dup3\n /* \"#utility.yul\":1086:1140 */\n and\n /* \"#utility.yul\":1075:1140 */\n swap1\n pop\n /* \"#utility.yul\":1020:1146 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1152:1248 */\n tag_38:\n /* \"#utility.yul\":1189:1196 */\n 0x00\n /* \"#utility.yul\":1218:1242 */\n tag_60\n /* \"#utility.yul\":1236:1241 */\n dup3\n /* \"#utility.yul\":1218:1242 */\n tag_37\n jump\t// in\n tag_60:\n /* \"#utility.yul\":1207:1242 */\n swap1\n pop\n /* \"#utility.yul\":1152:1248 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1254:1376 */\n tag_39:\n /* \"#utility.yul\":1327:1351 */\n tag_62\n /* \"#utility.yul\":1345:1350 */\n dup2\n /* \"#utility.yul\":1327:1351 */\n tag_38\n jump\t// in\n tag_62:\n /* \"#utility.yul\":1320:1325 */\n dup2\n /* \"#utility.yul\":1317:1352 */\n eq\n /* \"#utility.yul\":1307:1370 */\n tag_63\n jumpi\n /* \"#utility.yul\":1366:1367 */\n 0x00\n /* \"#utility.yul\":1363:1364 */\n dup1\n /* \"#utility.yul\":1356:1368 */\n revert\n /* \"#utility.yul\":1307:1370 */\n tag_63:\n /* \"#utility.yul\":1254:1376 */\n pop\n jump\t// out\n /* \"#utility.yul\":1382:1521 */\n tag_40:\n /* \"#utility.yul\":1428:1433 */\n 0x00\n /* \"#utility.yul\":1466:1472 */\n dup2\n /* \"#utility.yul\":1453:1473 */\n calldataload\n /* \"#utility.yul\":1444:1473 */\n swap1\n pop\n /* \"#utility.yul\":1482:1515 */\n tag_65\n /* \"#utility.yul\":1509:1514 */\n dup2\n /* \"#utility.yul\":1482:1515 */\n tag_39\n jump\t// in\n tag_65:\n /* \"#utility.yul\":1382:1521 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1527:1856 */\n tag_17:\n /* \"#utility.yul\":1586:1592 */\n 0x00\n /* \"#utility.yul\":1635:1637 */\n 0x20\n /* \"#utility.yul\":1623:1632 */\n dup3\n /* \"#utility.yul\":1614:1621 */\n dup5\n /* \"#utility.yul\":1610:1633 */\n sub\n /* \"#utility.yul\":1606:1638 */\n slt\n /* \"#utility.yul\":1603:1722 */\n iszero\n tag_67\n jumpi\n /* \"#utility.yul\":1641:1720 */\n tag_68\n tag_32\n jump\t// in\n tag_68:\n /* \"#utility.yul\":1603:1722 */\n tag_67:\n /* \"#utility.yul\":1761:1762 */\n 0x00\n /* \"#utility.yul\":1786:1839 */\n tag_69\n /* \"#utility.yul\":1831:1838 */\n dup5\n /* \"#utility.yul\":1822:1828 */\n dup3\n /* \"#utility.yul\":1811:1820 */\n dup6\n /* \"#utility.yul\":1807:1829 */\n add\n /* \"#utility.yul\":1786:1839 */\n tag_40\n jump\t// in\n tag_69:\n /* \"#utility.yul\":1776:1839 */\n swap2\n pop\n /* \"#utility.yul\":1732:1849 */\n pop\n /* \"#utility.yul\":1527:1856 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1862:1939 */\n tag_41:\n /* \"#utility.yul\":1899:1906 */\n 0x00\n /* \"#utility.yul\":1928:1933 */\n dup2\n /* \"#utility.yul\":1917:1933 */\n swap1\n pop\n /* \"#utility.yul\":1862:1939 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1945:2063 */\n tag_42:\n /* \"#utility.yul\":2032:2056 */\n tag_72\n /* \"#utility.yul\":2050:2055 */\n dup2\n /* \"#utility.yul\":2032:2056 */\n tag_41\n jump\t// in\n tag_72:\n /* \"#utility.yul\":2027:2030 */\n dup3\n /* \"#utility.yul\":2020:2057 */\n mstore\n /* \"#utility.yul\":1945:2063 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2069:2178 */\n tag_43:\n /* \"#utility.yul\":2150:2171 */\n tag_74\n /* \"#utility.yul\":2165:2170 */\n dup2\n /* \"#utility.yul\":2150:2171 */\n tag_34\n jump\t// in\n tag_74:\n /* \"#utility.yul\":2145:2148 */\n dup3\n /* \"#utility.yul\":2138:2172 */\n mstore\n /* \"#utility.yul\":2069:2178 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2184:2504 */\n tag_20:\n /* \"#utility.yul\":2299:2303 */\n 0x00\n /* \"#utility.yul\":2337:2339 */\n 0x40\n /* \"#utility.yul\":2326:2335 */\n dup3\n /* \"#utility.yul\":2322:2340 */\n add\n /* \"#utility.yul\":2314:2340 */\n swap1\n pop\n /* \"#utility.yul\":2350:2421 */\n tag_76\n /* \"#utility.yul\":2418:2419 */\n 0x00\n /* \"#utility.yul\":2407:2416 */\n dup4\n /* \"#utility.yul\":2403:2420 */\n add\n /* \"#utility.yul\":2394:2400 */\n dup6\n /* \"#utility.yul\":2350:2421 */\n tag_42\n jump\t// in\n tag_76:\n /* \"#utility.yul\":2431:2497 */\n tag_77\n /* \"#utility.yul\":2493:2495 */\n 0x20\n /* \"#utility.yul\":2482:2491 */\n dup4\n /* \"#utility.yul\":2478:2496 */\n add\n /* \"#utility.yul\":2469:2475 */\n dup5\n /* \"#utility.yul\":2431:2497 */\n tag_43\n jump\t// in\n tag_77:\n /* \"#utility.yul\":2184:2504 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220717a6f7a5cba55b7ae35dd6cfa00fbd311438f729323bc40acb93dcf72d4440e64736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": { + "@_13": { + "entryPoint": null, + "id": 13, + "parameterSlots": 1, + "returnSlots": 0 + }, + "abi_decode_t_uint256_fromMemory": { + "entryPoint": 94, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 115, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 61, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 56, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 71, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1048:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:1", + "type": "" + } + ], + "src": "7:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:1", + "type": "" + } + ], + "src": "334:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:1" + }, + "nodeType": "YulIf", + "src": "470:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:1", + "type": "" + } + ], + "src": "417:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "608:80:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "618:22:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "633:6:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "627:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "627:13:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "618:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "676:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "649:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "649:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "649:33:1" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "586:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "594:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "602:5:1", + "type": "" + } + ], + "src": "545:143:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "771:274:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "817:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "819:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "819:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "819:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "792:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "801:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "788:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "788:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "813:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "784:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "784:32:1" + }, + "nodeType": "YulIf", + "src": "781:119:1" + }, + { + "nodeType": "YulBlock", + "src": "910:128:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "925:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "939:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "929:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "954:74:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1000:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1011:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "996:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "996:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1020:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "964:31:1" + }, + "nodeType": "YulFunctionCall", + "src": "964:64:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "954:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "741:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "752:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "764:6:1", + "type": "" + } + ], + "src": "694:351:1" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060405161035338038061035383398181016040528101906100329190610073565b506100a0565b600080fd5b6000819050919050565b6100508161003d565b811461005b57600080fd5b50565b60008151905061006d81610047565b92915050565b60006020828403121561008957610088610038565b5b60006100978482850161005e565b91505092915050565b6102a4806100af6000396000f3fe60806040526004361061004a5760003560e01c80633ccfd60b1461004f578063406569631461006657806342e94c90146100825780638239f064146100c0578063be9886a0146100d7575b600080fd5b34801561005b57600080fd5b506100646100ee565b005b610080600480360381019061007b9190610165565b6100f0565b005b34801561008e57600080fd5b506100a960048036038101906100a491906101f0565b6100f3565b6040516100b7929190610245565b60405180910390f35b3480156100cc57600080fd5b506100d5610124565b005b3480156100e357600080fd5b506100ec610126565b005b565b50565b60006020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b565b565b600080fd5b60008115159050919050565b6101428161012d565b811461014d57600080fd5b50565b60008135905061015f81610139565b92915050565b60006020828403121561017b5761017a610128565b5b600061018984828501610150565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000813590506101ea816101c4565b92915050565b60006020828403121561020657610205610128565b5b6000610214848285016101db565b91505092915050565b6000819050919050565b6102308161021d565b82525050565b61023f8161012d565b82525050565b600060408201905061025a6000830185610227565b6102676020830184610236565b939250505056fea2646970667358221220717a6f7a5cba55b7ae35dd6cfa00fbd311438f729323bc40acb93dcf72d4440e64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x353 CODESIZE SUB DUP1 PUSH2 0x353 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x73 JUMP JUMPDEST POP PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x50 DUP2 PUSH2 0x3D JUMP JUMPDEST DUP2 EQ PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x6D DUP2 PUSH2 0x47 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x89 JUMPI PUSH2 0x88 PUSH2 0x38 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x97 DUP5 DUP3 DUP6 ADD PUSH2 0x5E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2A4 DUP1 PUSH2 0xAF PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x4F JUMPI DUP1 PUSH4 0x40656963 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x42E94C90 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x8239F064 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0xBE9886A0 EQ PUSH2 0xD7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0xEE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x80 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x165 JUMP JUMPDEST PUSH2 0xF0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xA4 SWAP2 SWAP1 PUSH2 0x1F0 JUMP JUMPDEST PUSH2 0xF3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP3 SWAP2 SWAP1 PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD5 PUSH2 0x124 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEC PUSH2 0x126 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD SWAP1 DUP1 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP DUP3 JUMP JUMPDEST JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x142 DUP2 PUSH2 0x12D JUMP JUMPDEST DUP2 EQ PUSH2 0x14D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x15F DUP2 PUSH2 0x139 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17B JUMPI PUSH2 0x17A PUSH2 0x128 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x189 DUP5 DUP3 DUP6 ADD PUSH2 0x150 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BD DUP3 PUSH2 0x192 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x1B2 JUMP JUMPDEST DUP2 EQ PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1EA DUP2 PUSH2 0x1C4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x206 JUMPI PUSH2 0x205 PUSH2 0x128 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x214 DUP5 DUP3 DUP6 ADD PUSH2 0x1DB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x230 DUP2 PUSH2 0x21D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x23F DUP2 PUSH2 0x12D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x25A PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x227 JUMP JUMPDEST PUSH2 0x267 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x236 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0x7A6F7A5CBA55B7AE35DD6CFA00FBD311438F PUSH19 0x9323BC40ACB93DCF72D4440E64736F6C634300 ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "1165:1062:0:-:0;;;1258:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1165:1062;;88:117:1;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:143::-;602:5;633:6;627:13;618:22;;649:33;676:5;649:33;:::i;:::-;545:143;;;;:::o;694:351::-;764:6;813:2;801:9;792:7;788:23;784:32;781:119;;;819:79;;:::i;:::-;781:119;939:1;964:64;1020:7;1011:6;1000:9;996:22;964:64;:::i;:::-;954:74;;910:128;694:351;;;;:::o;1165:1062:0:-;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@change_vote_25": { + "entryPoint": 294, + "id": 25, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@contribute_20": { + "entryPoint": 240, + "id": 20, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@contributions_7": { + "entryPoint": 243, + "id": 7, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@withdraw_30": { + "entryPoint": 238, + "id": 30, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@withdraw_early_35": { + "entryPoint": 292, + "id": 35, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_t_address": { + "entryPoint": 475, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_bool": { + "entryPoint": 336, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address": { + "entryPoint": 496, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_bool": { + "entryPoint": 357, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_bool_to_t_bool_fromStack": { + "entryPoint": 566, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 551, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed": { + "entryPoint": 581, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 434, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_bool": { + "entryPoint": 301, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 402, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 541, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 296, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_address": { + "entryPoint": 452, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_bool": { + "entryPoint": 313, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2507:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:1", + "type": "" + } + ], + "src": "7:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "376:48:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "386:32:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "411:5:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "404:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "404:13:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "397:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "397:21:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "386:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "358:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "368:7:1", + "type": "" + } + ], + "src": "334:90:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "470:76:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "524:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "533:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "536:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "526:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "526:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "526:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "493:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "515:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bool", + "nodeType": "YulIdentifier", + "src": "500:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "500:21:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "490:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "490:32:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "483:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "483:40:1" + }, + "nodeType": "YulIf", + "src": "480:60:1" + } + ] + }, + "name": "validator_revert_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "463:5:1", + "type": "" + } + ], + "src": "430:116:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "601:84:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "611:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "633:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "620:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "620:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "611:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "673:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "649:23:1" + }, + "nodeType": "YulFunctionCall", + "src": "649:30:1" + }, + "nodeType": "YulExpressionStatement", + "src": "649:30:1" + } + ] + }, + "name": "abi_decode_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "579:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "587:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "595:5:1", + "type": "" + } + ], + "src": "552:133:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "754:260:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "800:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "802:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "802:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "802:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "775:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "784:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "771:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "771:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "796:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "767:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "767:32:1" + }, + "nodeType": "YulIf", + "src": "764:119:1" + }, + { + "nodeType": "YulBlock", + "src": "893:114:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "908:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "922:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "912:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "937:60:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "969:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "980:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "965:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "965:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "989:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_bool", + "nodeType": "YulIdentifier", + "src": "947:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "947:50:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "937:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "724:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "735:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "747:6:1", + "type": "" + } + ], + "src": "691:323:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1065:81:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1075:65:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1090:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1097:42:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1086:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1086:54:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1075:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1047:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1057:7:1", + "type": "" + } + ], + "src": "1020:126:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1197:51:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1207:35:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1236:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "1218:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1218:24:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1207:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1179:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1189:7:1", + "type": "" + } + ], + "src": "1152:96:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1297:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1354:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1363:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1366:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1356:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1356:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1356:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1320:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1345:5:1" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "1327:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1327:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1317:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1317:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1310:43:1" + }, + "nodeType": "YulIf", + "src": "1307:63:1" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1290:5:1", + "type": "" + } + ], + "src": "1254:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1434:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1444:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1466:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1453:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "1453:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1444:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1509:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "1482:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "1482:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1482:33:1" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1412:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1420:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1428:5:1", + "type": "" + } + ], + "src": "1382:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1593:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1639:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1641:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "1641:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1641:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1614:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1623:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1610:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1610:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1635:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1606:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1606:32:1" + }, + "nodeType": "YulIf", + "src": "1603:119:1" + }, + { + "nodeType": "YulBlock", + "src": "1732:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1747:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1761:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1751:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1776:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1811:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1822:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1807:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1807:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1831:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "1786:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1786:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1776:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1563:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1574:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1586:6:1", + "type": "" + } + ], + "src": "1527:329:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1907:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1917:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1928:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1917:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1889:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1899:7:1", + "type": "" + } + ], + "src": "1862:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2010:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2027:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2050:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "2032:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "2032:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2020:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2020:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2020:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1998:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2005:3:1", + "type": "" + } + ], + "src": "1945:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2128:50:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2145:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2165:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bool", + "nodeType": "YulIdentifier", + "src": "2150:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "2150:21:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2138:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2138:34:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2138:34:1" + } + ] + }, + "name": "abi_encode_t_bool_to_t_bool_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2116:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2123:3:1", + "type": "" + } + ], + "src": "2069:109:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2304:200:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2314:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2326:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2337:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2322:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2322:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "2314:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2394:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2407:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2418:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2403:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2403:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "2350:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "2350:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2350:71:1" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "2469:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2482:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2493:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2478:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2478:18:1" + } + ], + "functionName": { + "name": "abi_encode_t_bool_to_t_bool_fromStack", + "nodeType": "YulIdentifier", + "src": "2431:37:1" + }, + "nodeType": "YulFunctionCall", + "src": "2431:66:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2431:66:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2268:9:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "2280:6:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2288:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "2299:4:1", + "type": "" + } + ], + "src": "2184:320:1" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_uint256_t_bool__to_t_uint256_t_bool__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_bool_to_t_bool_fromStack(value1, add(headStart, 32))\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "60806040526004361061004a5760003560e01c80633ccfd60b1461004f578063406569631461006657806342e94c90146100825780638239f064146100c0578063be9886a0146100d7575b600080fd5b34801561005b57600080fd5b506100646100ee565b005b610080600480360381019061007b9190610165565b6100f0565b005b34801561008e57600080fd5b506100a960048036038101906100a491906101f0565b6100f3565b6040516100b7929190610245565b60405180910390f35b3480156100cc57600080fd5b506100d5610124565b005b3480156100e357600080fd5b506100ec610126565b005b565b50565b60006020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b565b565b600080fd5b60008115159050919050565b6101428161012d565b811461014d57600080fd5b50565b60008135905061015f81610139565b92915050565b60006020828403121561017b5761017a610128565b5b600061018984828501610150565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101bd82610192565b9050919050565b6101cd816101b2565b81146101d857600080fd5b50565b6000813590506101ea816101c4565b92915050565b60006020828403121561020657610205610128565b5b6000610214848285016101db565b91505092915050565b6000819050919050565b6102308161021d565b82525050565b61023f8161012d565b82525050565b600060408201905061025a6000830185610227565b6102676020830184610236565b939250505056fea2646970667358221220717a6f7a5cba55b7ae35dd6cfa00fbd311438f729323bc40acb93dcf72d4440e64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4A JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3CCFD60B EQ PUSH2 0x4F JUMPI DUP1 PUSH4 0x40656963 EQ PUSH2 0x66 JUMPI DUP1 PUSH4 0x42E94C90 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x8239F064 EQ PUSH2 0xC0 JUMPI DUP1 PUSH4 0xBE9886A0 EQ PUSH2 0xD7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x64 PUSH2 0xEE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x80 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x7B SWAP2 SWAP1 PUSH2 0x165 JUMP JUMPDEST PUSH2 0xF0 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xA4 SWAP2 SWAP1 PUSH2 0x1F0 JUMP JUMPDEST PUSH2 0xF3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB7 SWAP3 SWAP2 SWAP1 PUSH2 0x245 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD5 PUSH2 0x124 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEC PUSH2 0x126 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP DUP1 PUSH1 0x0 ADD SLOAD SWAP1 DUP1 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP DUP3 JUMP JUMPDEST JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x142 DUP2 PUSH2 0x12D JUMP JUMPDEST DUP2 EQ PUSH2 0x14D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x15F DUP2 PUSH2 0x139 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x17B JUMPI PUSH2 0x17A PUSH2 0x128 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x189 DUP5 DUP3 DUP6 ADD PUSH2 0x150 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BD DUP3 PUSH2 0x192 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x1B2 JUMP JUMPDEST DUP2 EQ PUSH2 0x1D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1EA DUP2 PUSH2 0x1C4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x206 JUMPI PUSH2 0x205 PUSH2 0x128 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x214 DUP5 DUP3 DUP6 ADD PUSH2 0x1DB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x230 DUP2 PUSH2 0x21D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x23F DUP2 PUSH2 0x12D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x25A PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x227 JUMP JUMPDEST PUSH2 0x267 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x236 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0x7A6F7A5CBA55B7AE35DD6CFA00FBD311438F PUSH19 0x9323BC40ACB93DCF72D4440E64736F6C634300 ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "1165:1062:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1745:31;;;;;;;;;;;;;:::i;:::-;;1497:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1198:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2087:138;;;;;;;;;;;;;:::i;:::-;;1630:34;;;;;;;;;;;;;:::i;:::-;;1745:31;:::o;1497:50::-;;:::o;1198:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2087:138::-;:::o;1630:34::-;:::o;88:117:1:-;197:1;194;187:12;334:90;368:7;411:5;404:13;397:21;386:32;;334:90;;;:::o;430:116::-;500:21;515:5;500:21;:::i;:::-;493:5;490:32;480:60;;536:1;533;526:12;480:60;430:116;:::o;552:133::-;595:5;633:6;620:20;611:29;;649:30;673:5;649:30;:::i;:::-;552:133;;;;:::o;691:323::-;747:6;796:2;784:9;775:7;771:23;767:32;764:119;;;802:79;;:::i;:::-;764:119;922:1;947:50;989:7;980:6;969:9;965:22;947:50;:::i;:::-;937:60;;893:114;691:323;;;;:::o;1020:126::-;1057:7;1097:42;1090:5;1086:54;1075:65;;1020:126;;;:::o;1152:96::-;1189:7;1218:24;1236:5;1218:24;:::i;:::-;1207:35;;1152:96;;;:::o;1254:122::-;1327:24;1345:5;1327:24;:::i;:::-;1320:5;1317:35;1307:63;;1366:1;1363;1356:12;1307:63;1254:122;:::o;1382:139::-;1428:5;1466:6;1453:20;1444:29;;1482:33;1509:5;1482:33;:::i;:::-;1382:139;;;;:::o;1527:329::-;1586:6;1635:2;1623:9;1614:7;1610:23;1606:32;1603:119;;;1641:79;;:::i;:::-;1603:119;1761:1;1786:53;1831:7;1822:6;1811:9;1807:22;1786:53;:::i;:::-;1776:63;;1732:117;1527:329;;;;:::o;1862:77::-;1899:7;1928:5;1917:16;;1862:77;;;:::o;1945:118::-;2032:24;2050:5;2032:24;:::i;:::-;2027:3;2020:37;1945:118;;:::o;2069:109::-;2150:21;2165:5;2150:21;:::i;:::-;2145:3;2138:34;2069:109;;:::o;2184:320::-;2299:4;2337:2;2326:9;2322:18;2314:26;;2350:71;2418:1;2407:9;2403:17;2394:6;2350:71;:::i;:::-;2431:66;2493:2;2482:9;2478:18;2469:6;2431:66;:::i;:::-;2184:320;;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "135200", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "change_vote()": "210", + "contribute(bool)": "388", + "contributions(address)": "5104", + "withdraw()": "122", + "withdraw_early()": "188" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1165, "end": 2227, "name": "MSTORE", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "CALLVALUE", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "DUP1", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "ISZERO", "source": 0 }, + { + "begin": 1258, + "end": 1341, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 1258, "end": 1341, "name": "JUMPI", "source": 0 }, + { + "begin": 1258, + "end": 1341, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1258, "end": 1341, "name": "DUP1", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "REVERT", "source": 0 }, + { + "begin": 1258, + "end": 1341, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 1258, "end": 1341, "name": "JUMPDEST", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "POP", "source": 0 }, + { + "begin": 1258, + "end": 1341, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1258, "end": 1341, "name": "MLOAD", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "PUSHSIZE", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "CODESIZE", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "SUB", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "DUP1", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "PUSHSIZE", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "DUP4", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "CODECOPY", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "DUP2", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "DUP2", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "ADD", "source": 0 }, + { + "begin": 1258, + "end": 1341, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1258, "end": 1341, "name": "MSTORE", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "DUP2", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "ADD", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "SWAP1", "source": 0 }, + { + "begin": 1258, + "end": 1341, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 1258, "end": 1341, "name": "SWAP2", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "SWAP1", "source": 0 }, + { + "begin": 1258, + "end": 1341, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { + "begin": 1258, + "end": 1341, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1258, + "end": 1341, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 1258, "end": 1341, "name": "JUMPDEST", "source": 0 }, + { "begin": 1258, "end": 1341, "name": "POP", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 1165, "end": 2227, "name": "JUMP", "source": 0 }, + { "begin": 88, "end": 205, "name": "tag", "source": 1, "value": "8" }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { + "begin": 197, + "end": 198, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, + { + "begin": 334, + "end": 411, + "name": "tag", + "source": 1, + "value": "10" + }, + { "begin": 334, "end": 411, "name": "JUMPDEST", "source": 1 }, + { + "begin": 371, + "end": 378, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 400, "end": 405, "name": "DUP2", "source": 1 }, + { "begin": 389, "end": 405, "name": "SWAP1", "source": 1 }, + { "begin": 389, "end": 405, "name": "POP", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 411, "name": "SWAP1", "source": 1 }, + { "begin": 334, "end": 411, "name": "POP", "source": 1 }, + { + "begin": 334, + "end": 411, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 417, + "end": 539, + "name": "tag", + "source": 1, + "value": "11" + }, + { "begin": 417, "end": 539, "name": "JUMPDEST", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { "begin": 508, "end": 513, "name": "DUP2", "source": 1 }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 1, + "value": "10" + }, + { + "begin": 490, + "end": 514, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 490, + "end": 514, + "name": "tag", + "source": 1, + "value": "19" + }, + { "begin": 490, "end": 514, "name": "JUMPDEST", "source": 1 }, + { "begin": 483, "end": 488, "name": "DUP2", "source": 1 }, + { "begin": 480, "end": 515, "name": "EQ", "source": 1 }, + { + "begin": 470, + "end": 533, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { "begin": 470, "end": 533, "name": "JUMPI", "source": 1 }, + { + "begin": 529, + "end": 530, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 526, "end": 527, "name": "DUP1", "source": 1 }, + { "begin": 519, "end": 531, "name": "REVERT", "source": 1 }, + { + "begin": 470, + "end": 533, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 470, "end": 533, "name": "JUMPDEST", "source": 1 }, + { "begin": 417, "end": 539, "name": "POP", "source": 1 }, + { + "begin": 417, + "end": 539, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 545, + "end": 688, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 545, "end": 688, "name": "JUMPDEST", "source": 1 }, + { + "begin": 602, + "end": 607, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 633, "end": 639, "name": "DUP2", "source": 1 }, + { "begin": 627, "end": 640, "name": "MLOAD", "source": 1 }, + { "begin": 618, "end": 640, "name": "SWAP1", "source": 1 }, + { "begin": 618, "end": 640, "name": "POP", "source": 1 }, + { + "begin": 649, + "end": 682, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { "begin": 676, "end": 681, "name": "DUP2", "source": 1 }, + { + "begin": 649, + "end": 682, + "name": "PUSH [tag]", + "source": 1, + "value": "11" + }, + { + "begin": 649, + "end": 682, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 649, + "end": 682, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 649, "end": 682, "name": "JUMPDEST", "source": 1 }, + { "begin": 545, "end": 688, "name": "SWAP3", "source": 1 }, + { "begin": 545, "end": 688, "name": "SWAP2", "source": 1 }, + { "begin": 545, "end": 688, "name": "POP", "source": 1 }, + { "begin": 545, "end": 688, "name": "POP", "source": 1 }, + { + "begin": 545, + "end": 688, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 694, + "end": 1045, + "name": "tag", + "source": 1, + "value": "3" + }, + { "begin": 694, "end": 1045, "name": "JUMPDEST", "source": 1 }, + { + "begin": 764, + "end": 770, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 813, + "end": 815, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 801, "end": 810, "name": "DUP3", "source": 1 }, + { "begin": 792, "end": 799, "name": "DUP5", "source": 1 }, + { "begin": 788, "end": 811, "name": "SUB", "source": 1 }, + { "begin": 784, "end": 816, "name": "SLT", "source": 1 }, + { "begin": 781, "end": 900, "name": "ISZERO", "source": 1 }, + { + "begin": 781, + "end": 900, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { "begin": 781, "end": 900, "name": "JUMPI", "source": 1 }, + { + "begin": 819, + "end": 898, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 819, + "end": 898, + "name": "PUSH [tag]", + "source": 1, + "value": "8" + }, + { + "begin": 819, + "end": 898, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 819, + "end": 898, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 819, "end": 898, "name": "JUMPDEST", "source": 1 }, + { + "begin": 781, + "end": 900, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 781, "end": 900, "name": "JUMPDEST", "source": 1 }, + { + "begin": 939, + "end": 940, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 964, + "end": 1028, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { "begin": 1020, "end": 1027, "name": "DUP5", "source": 1 }, + { "begin": 1011, "end": 1017, "name": "DUP3", "source": 1 }, + { "begin": 1000, "end": 1009, "name": "DUP6", "source": 1 }, + { "begin": 996, "end": 1018, "name": "ADD", "source": 1 }, + { + "begin": 964, + "end": 1028, + "name": "PUSH [tag]", + "source": 1, + "value": "12" + }, + { + "begin": 964, + "end": 1028, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 964, + "end": 1028, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 964, "end": 1028, "name": "JUMPDEST", "source": 1 }, + { "begin": 954, "end": 1028, "name": "SWAP2", "source": 1 }, + { "begin": 954, "end": 1028, "name": "POP", "source": 1 }, + { "begin": 910, "end": 1038, "name": "POP", "source": 1 }, + { "begin": 694, "end": 1045, "name": "SWAP3", "source": 1 }, + { "begin": 694, "end": 1045, "name": "SWAP2", "source": 1 }, + { "begin": 694, "end": 1045, "name": "POP", "source": 1 }, + { "begin": 694, "end": 1045, "name": "POP", "source": 1 }, + { + "begin": 694, + "end": 1045, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1165, + "end": 2227, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 1165, "end": 2227, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1165, "end": 2227, "name": "DUP1", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1165, "end": 2227, "name": "CODECOPY", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1165, "end": 2227, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220717a6f7a5cba55b7ae35dd6cfa00fbd311438f729323bc40acb93dcf72d4440e64736f6c634300080b0033", + ".code": [ + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1165, "end": 2227, "name": "MSTORE", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { + "begin": 1165, + "end": 2227, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1165, "end": 2227, "name": "LT", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 1165, "end": 2227, "name": "JUMPI", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1165, + "end": 2227, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 1165, "end": 2227, "name": "SHR", "source": 0 }, + { "begin": 1165, "end": 2227, "name": "DUP1", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "3CCFD60B" + }, + { "begin": 1165, "end": 2227, "name": "EQ", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 1165, "end": 2227, "name": "JUMPI", "source": 0 }, + { "begin": 1165, "end": 2227, "name": "DUP1", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "40656963" + }, + { "begin": 1165, "end": 2227, "name": "EQ", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 1165, "end": 2227, "name": "JUMPI", "source": 0 }, + { "begin": 1165, "end": 2227, "name": "DUP1", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "42E94C90" + }, + { "begin": 1165, "end": 2227, "name": "EQ", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 1165, "end": 2227, "name": "JUMPI", "source": 0 }, + { "begin": 1165, "end": 2227, "name": "DUP1", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "8239F064" + }, + { "begin": 1165, "end": 2227, "name": "EQ", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 1165, "end": 2227, "name": "JUMPI", "source": 0 }, + { "begin": 1165, "end": 2227, "name": "DUP1", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "BE9886A0" + }, + { "begin": 1165, "end": 2227, "name": "EQ", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 1165, "end": 2227, "name": "JUMPI", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 1165, "end": 2227, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1165, + "end": 2227, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1165, "end": 2227, "name": "DUP1", "source": 0 }, + { "begin": 1165, "end": 2227, "name": "REVERT", "source": 0 }, + { + "begin": 1745, + "end": 1776, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 1745, "end": 1776, "name": "JUMPDEST", "source": 0 }, + { "begin": 1745, "end": 1776, "name": "CALLVALUE", "source": 0 }, + { "begin": 1745, "end": 1776, "name": "DUP1", "source": 0 }, + { "begin": 1745, "end": 1776, "name": "ISZERO", "source": 0 }, + { + "begin": 1745, + "end": 1776, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 1745, "end": 1776, "name": "JUMPI", "source": 0 }, + { + "begin": 1745, + "end": 1776, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1745, "end": 1776, "name": "DUP1", "source": 0 }, + { "begin": 1745, "end": 1776, "name": "REVERT", "source": 0 }, + { + "begin": 1745, + "end": 1776, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 1745, "end": 1776, "name": "JUMPDEST", "source": 0 }, + { "begin": 1745, "end": 1776, "name": "POP", "source": 0 }, + { + "begin": 1745, + "end": 1776, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 1745, + "end": 1776, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 1745, + "end": 1776, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1745, + "end": 1776, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 1745, "end": 1776, "name": "JUMPDEST", "source": 0 }, + { "begin": 1745, "end": 1776, "name": "STOP", "source": 0 }, + { + "begin": 1497, + "end": 1547, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 1497, "end": 1547, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1497, + "end": 1547, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 1497, + "end": 1547, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1497, "end": 1547, "name": "DUP1", "source": 0 }, + { + "begin": 1497, + "end": 1547, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1497, "end": 1547, "name": "SUB", "source": 0 }, + { "begin": 1497, "end": 1547, "name": "DUP2", "source": 0 }, + { "begin": 1497, "end": 1547, "name": "ADD", "source": 0 }, + { "begin": 1497, "end": 1547, "name": "SWAP1", "source": 0 }, + { + "begin": 1497, + "end": 1547, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 1497, "end": 1547, "name": "SWAP2", "source": 0 }, + { "begin": 1497, "end": 1547, "name": "SWAP1", "source": 0 }, + { + "begin": 1497, + "end": 1547, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1497, + "end": 1547, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1497, + "end": 1547, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 1497, "end": 1547, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1497, + "end": 1547, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 1497, + "end": 1547, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1497, + "end": 1547, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 1497, "end": 1547, "name": "JUMPDEST", "source": 0 }, + { "begin": 1497, "end": 1547, "name": "STOP", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 1198, "end": 1251, "name": "JUMPDEST", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "CALLVALUE", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DUP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "ISZERO", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 1198, "end": 1251, "name": "JUMPI", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1198, "end": 1251, "name": "DUP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "REVERT", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 1198, "end": 1251, "name": "JUMPDEST", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "POP", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1198, "end": 1251, "name": "DUP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1198, "end": 1251, "name": "SUB", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DUP2", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "ADD", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 1198, "end": 1251, "name": "SWAP2", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 1198, + "end": 1251, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1198, + "end": 1251, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 1198, "end": 1251, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { + "begin": 1198, + "end": 1251, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1198, + "end": 1251, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 1198, "end": 1251, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1198, "end": 1251, "name": "MLOAD", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { "begin": 1198, "end": 1251, "name": "SWAP3", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP2", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { + "begin": 1198, + "end": 1251, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1198, + "end": 1251, + "name": "tag", + "source": 0, + "value": "19" + }, + { "begin": 1198, "end": 1251, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1198, "end": 1251, "name": "MLOAD", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DUP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP2", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SUB", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "RETURN", "source": 0 }, + { + "begin": 2087, + "end": 2225, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 2087, "end": 2225, "name": "JUMPDEST", "source": 0 }, + { "begin": 2087, "end": 2225, "name": "CALLVALUE", "source": 0 }, + { "begin": 2087, "end": 2225, "name": "DUP1", "source": 0 }, + { "begin": 2087, "end": 2225, "name": "ISZERO", "source": 0 }, + { + "begin": 2087, + "end": 2225, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { "begin": 2087, "end": 2225, "name": "JUMPI", "source": 0 }, + { + "begin": 2087, + "end": 2225, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2087, "end": 2225, "name": "DUP1", "source": 0 }, + { "begin": 2087, "end": 2225, "name": "REVERT", "source": 0 }, + { + "begin": 2087, + "end": 2225, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 2087, "end": 2225, "name": "JUMPDEST", "source": 0 }, + { "begin": 2087, "end": 2225, "name": "POP", "source": 0 }, + { + "begin": 2087, + "end": 2225, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { + "begin": 2087, + "end": 2225, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { + "begin": 2087, + "end": 2225, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2087, + "end": 2225, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 2087, "end": 2225, "name": "JUMPDEST", "source": 0 }, + { "begin": 2087, "end": 2225, "name": "STOP", "source": 0 }, + { + "begin": 1630, + "end": 1664, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 1630, "end": 1664, "name": "JUMPDEST", "source": 0 }, + { "begin": 1630, "end": 1664, "name": "CALLVALUE", "source": 0 }, + { "begin": 1630, "end": 1664, "name": "DUP1", "source": 0 }, + { "begin": 1630, "end": 1664, "name": "ISZERO", "source": 0 }, + { + "begin": 1630, + "end": 1664, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { "begin": 1630, "end": 1664, "name": "JUMPI", "source": 0 }, + { + "begin": 1630, + "end": 1664, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1630, "end": 1664, "name": "DUP1", "source": 0 }, + { "begin": 1630, "end": 1664, "name": "REVERT", "source": 0 }, + { + "begin": 1630, + "end": 1664, + "name": "tag", + "source": 0, + "value": "24" + }, + { "begin": 1630, "end": 1664, "name": "JUMPDEST", "source": 0 }, + { "begin": 1630, "end": 1664, "name": "POP", "source": 0 }, + { + "begin": 1630, + "end": 1664, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1630, + "end": 1664, + "name": "PUSH [tag]", + "source": 0, + "value": "26" + }, + { + "begin": 1630, + "end": 1664, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1630, + "end": 1664, + "name": "tag", + "source": 0, + "value": "25" + }, + { "begin": 1630, "end": 1664, "name": "JUMPDEST", "source": 0 }, + { "begin": 1630, "end": 1664, "name": "STOP", "source": 0 }, + { + "begin": 1745, + "end": 1776, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1745, "end": 1776, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1745, + "end": 1776, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1497, + "end": 1547, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 1497, "end": 1547, "name": "JUMPDEST", "source": 0 }, + { "begin": 1497, "end": 1547, "name": "POP", "source": 0 }, + { + "begin": 1497, + "end": 1547, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1198, + "end": 1251, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 1198, "end": 1251, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 1198, "end": 1251, "name": "MSTORE", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DUP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1198, "end": 1251, "name": "MSTORE", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1198, "end": 1251, "name": "KECCAK256", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1198, "end": 1251, "name": "SWAP2", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "POP", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "POP", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DUP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1198, "end": 1251, "name": "ADD", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SLOAD", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DUP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1198, "end": 1251, "name": "ADD", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SLOAD", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 1198, "end": 1251, "name": "EXP", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DIV", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 1198, "end": 1251, "name": "AND", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "SWAP1", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "POP", "source": 0 }, + { "begin": 1198, "end": 1251, "name": "DUP3", "source": 0 }, + { + "begin": 1198, + "end": 1251, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 2087, + "end": 2225, + "name": "tag", + "source": 0, + "value": "23" + }, + { "begin": 2087, "end": 2225, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2087, + "end": 2225, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1630, + "end": 1664, + "name": "tag", + "source": 0, + "value": "26" + }, + { "begin": 1630, "end": 1664, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1630, + "end": 1664, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 88, + "end": 205, + "name": "tag", + "source": 1, + "value": "32" + }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { + "begin": 197, + "end": 198, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, + { + "begin": 334, + "end": 424, + "name": "tag", + "source": 1, + "value": "34" + }, + { "begin": 334, "end": 424, "name": "JUMPDEST", "source": 1 }, + { + "begin": 368, + "end": 375, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 411, "end": 416, "name": "DUP2", "source": 1 }, + { "begin": 404, "end": 417, "name": "ISZERO", "source": 1 }, + { "begin": 397, "end": 418, "name": "ISZERO", "source": 1 }, + { "begin": 386, "end": 418, "name": "SWAP1", "source": 1 }, + { "begin": 386, "end": 418, "name": "POP", "source": 1 }, + { "begin": 334, "end": 424, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 424, "name": "SWAP1", "source": 1 }, + { "begin": 334, "end": 424, "name": "POP", "source": 1 }, + { + "begin": 334, + "end": 424, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 430, + "end": 546, + "name": "tag", + "source": 1, + "value": "35" + }, + { "begin": 430, "end": 546, "name": "JUMPDEST", "source": 1 }, + { + "begin": 500, + "end": 521, + "name": "PUSH [tag]", + "source": 1, + "value": "50" + }, + { "begin": 515, "end": 520, "name": "DUP2", "source": 1 }, + { + "begin": 500, + "end": 521, + "name": "PUSH [tag]", + "source": 1, + "value": "34" + }, + { + "begin": 500, + "end": 521, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 500, + "end": 521, + "name": "tag", + "source": 1, + "value": "50" + }, + { "begin": 500, "end": 521, "name": "JUMPDEST", "source": 1 }, + { "begin": 493, "end": 498, "name": "DUP2", "source": 1 }, + { "begin": 490, "end": 522, "name": "EQ", "source": 1 }, + { + "begin": 480, + "end": 540, + "name": "PUSH [tag]", + "source": 1, + "value": "51" + }, + { "begin": 480, "end": 540, "name": "JUMPI", "source": 1 }, + { + "begin": 536, + "end": 537, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 533, "end": 534, "name": "DUP1", "source": 1 }, + { "begin": 526, "end": 538, "name": "REVERT", "source": 1 }, + { + "begin": 480, + "end": 540, + "name": "tag", + "source": 1, + "value": "51" + }, + { "begin": 480, "end": 540, "name": "JUMPDEST", "source": 1 }, + { "begin": 430, "end": 546, "name": "POP", "source": 1 }, + { + "begin": 430, + "end": 546, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 552, + "end": 685, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 552, "end": 685, "name": "JUMPDEST", "source": 1 }, + { + "begin": 595, + "end": 600, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 633, "end": 639, "name": "DUP2", "source": 1 }, + { "begin": 620, "end": 640, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 611, "end": 640, "name": "SWAP1", "source": 1 }, + { "begin": 611, "end": 640, "name": "POP", "source": 1 }, + { + "begin": 649, + "end": 679, + "name": "PUSH [tag]", + "source": 1, + "value": "53" + }, + { "begin": 673, "end": 678, "name": "DUP2", "source": 1 }, + { + "begin": 649, + "end": 679, + "name": "PUSH [tag]", + "source": 1, + "value": "35" + }, + { + "begin": 649, + "end": 679, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 649, + "end": 679, + "name": "tag", + "source": 1, + "value": "53" + }, + { "begin": 649, "end": 679, "name": "JUMPDEST", "source": 1 }, + { "begin": 552, "end": 685, "name": "SWAP3", "source": 1 }, + { "begin": 552, "end": 685, "name": "SWAP2", "source": 1 }, + { "begin": 552, "end": 685, "name": "POP", "source": 1 }, + { "begin": 552, "end": 685, "name": "POP", "source": 1 }, + { + "begin": 552, + "end": 685, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 691, + "end": 1014, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 691, "end": 1014, "name": "JUMPDEST", "source": 1 }, + { + "begin": 747, + "end": 753, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 796, + "end": 798, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 784, "end": 793, "name": "DUP3", "source": 1 }, + { "begin": 775, "end": 782, "name": "DUP5", "source": 1 }, + { "begin": 771, "end": 794, "name": "SUB", "source": 1 }, + { "begin": 767, "end": 799, "name": "SLT", "source": 1 }, + { "begin": 764, "end": 883, "name": "ISZERO", "source": 1 }, + { + "begin": 764, + "end": 883, + "name": "PUSH [tag]", + "source": 1, + "value": "55" + }, + { "begin": 764, "end": 883, "name": "JUMPI", "source": 1 }, + { + "begin": 802, + "end": 881, + "name": "PUSH [tag]", + "source": 1, + "value": "56" + }, + { + "begin": 802, + "end": 881, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 802, + "end": 881, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 802, + "end": 881, + "name": "tag", + "source": 1, + "value": "56" + }, + { "begin": 802, "end": 881, "name": "JUMPDEST", "source": 1 }, + { + "begin": 764, + "end": 883, + "name": "tag", + "source": 1, + "value": "55" + }, + { "begin": 764, "end": 883, "name": "JUMPDEST", "source": 1 }, + { + "begin": 922, + "end": 923, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 947, + "end": 997, + "name": "PUSH [tag]", + "source": 1, + "value": "57" + }, + { "begin": 989, "end": 996, "name": "DUP5", "source": 1 }, + { "begin": 980, "end": 986, "name": "DUP3", "source": 1 }, + { "begin": 969, "end": 978, "name": "DUP6", "source": 1 }, + { "begin": 965, "end": 987, "name": "ADD", "source": 1 }, + { + "begin": 947, + "end": 997, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { + "begin": 947, + "end": 997, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 947, + "end": 997, + "name": "tag", + "source": 1, + "value": "57" + }, + { "begin": 947, "end": 997, "name": "JUMPDEST", "source": 1 }, + { "begin": 937, "end": 997, "name": "SWAP2", "source": 1 }, + { "begin": 937, "end": 997, "name": "POP", "source": 1 }, + { "begin": 893, "end": 1007, "name": "POP", "source": 1 }, + { "begin": 691, "end": 1014, "name": "SWAP3", "source": 1 }, + { "begin": 691, "end": 1014, "name": "SWAP2", "source": 1 }, + { "begin": 691, "end": 1014, "name": "POP", "source": 1 }, + { "begin": 691, "end": 1014, "name": "POP", "source": 1 }, + { + "begin": 691, + "end": 1014, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1020, + "end": 1146, + "name": "tag", + "source": 1, + "value": "37" + }, + { "begin": 1020, "end": 1146, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1057, + "end": 1064, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1097, + "end": 1139, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1090, "end": 1095, "name": "DUP3", "source": 1 }, + { "begin": 1086, "end": 1140, "name": "AND", "source": 1 }, + { "begin": 1075, "end": 1140, "name": "SWAP1", "source": 1 }, + { "begin": 1075, "end": 1140, "name": "POP", "source": 1 }, + { "begin": 1020, "end": 1146, "name": "SWAP2", "source": 1 }, + { "begin": 1020, "end": 1146, "name": "SWAP1", "source": 1 }, + { "begin": 1020, "end": 1146, "name": "POP", "source": 1 }, + { + "begin": 1020, + "end": 1146, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1152, + "end": 1248, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 1152, "end": 1248, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1189, + "end": 1196, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1218, + "end": 1242, + "name": "PUSH [tag]", + "source": 1, + "value": "60" + }, + { "begin": 1236, "end": 1241, "name": "DUP3", "source": 1 }, + { + "begin": 1218, + "end": 1242, + "name": "PUSH [tag]", + "source": 1, + "value": "37" + }, + { + "begin": 1218, + "end": 1242, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1218, + "end": 1242, + "name": "tag", + "source": 1, + "value": "60" + }, + { "begin": 1218, "end": 1242, "name": "JUMPDEST", "source": 1 }, + { "begin": 1207, "end": 1242, "name": "SWAP1", "source": 1 }, + { "begin": 1207, "end": 1242, "name": "POP", "source": 1 }, + { "begin": 1152, "end": 1248, "name": "SWAP2", "source": 1 }, + { "begin": 1152, "end": 1248, "name": "SWAP1", "source": 1 }, + { "begin": 1152, "end": 1248, "name": "POP", "source": 1 }, + { + "begin": 1152, + "end": 1248, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1254, + "end": 1376, + "name": "tag", + "source": 1, + "value": "39" + }, + { "begin": 1254, "end": 1376, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1327, + "end": 1351, + "name": "PUSH [tag]", + "source": 1, + "value": "62" + }, + { "begin": 1345, "end": 1350, "name": "DUP2", "source": 1 }, + { + "begin": 1327, + "end": 1351, + "name": "PUSH [tag]", + "source": 1, + "value": "38" + }, + { + "begin": 1327, + "end": 1351, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1327, + "end": 1351, + "name": "tag", + "source": 1, + "value": "62" + }, + { "begin": 1327, "end": 1351, "name": "JUMPDEST", "source": 1 }, + { "begin": 1320, "end": 1325, "name": "DUP2", "source": 1 }, + { "begin": 1317, "end": 1352, "name": "EQ", "source": 1 }, + { + "begin": 1307, + "end": 1370, + "name": "PUSH [tag]", + "source": 1, + "value": "63" + }, + { "begin": 1307, "end": 1370, "name": "JUMPI", "source": 1 }, + { + "begin": 1366, + "end": 1367, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1363, "end": 1364, "name": "DUP1", "source": 1 }, + { "begin": 1356, "end": 1368, "name": "REVERT", "source": 1 }, + { + "begin": 1307, + "end": 1370, + "name": "tag", + "source": 1, + "value": "63" + }, + { "begin": 1307, "end": 1370, "name": "JUMPDEST", "source": 1 }, + { "begin": 1254, "end": 1376, "name": "POP", "source": 1 }, + { + "begin": 1254, + "end": 1376, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1382, + "end": 1521, + "name": "tag", + "source": 1, + "value": "40" + }, + { "begin": 1382, "end": 1521, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1428, + "end": 1433, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1466, "end": 1472, "name": "DUP2", "source": 1 }, + { + "begin": 1453, + "end": 1473, + "name": "CALLDATALOAD", + "source": 1 + }, + { "begin": 1444, "end": 1473, "name": "SWAP1", "source": 1 }, + { "begin": 1444, "end": 1473, "name": "POP", "source": 1 }, + { + "begin": 1482, + "end": 1515, + "name": "PUSH [tag]", + "source": 1, + "value": "65" + }, + { "begin": 1509, "end": 1514, "name": "DUP2", "source": 1 }, + { + "begin": 1482, + "end": 1515, + "name": "PUSH [tag]", + "source": 1, + "value": "39" + }, + { + "begin": 1482, + "end": 1515, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1482, + "end": 1515, + "name": "tag", + "source": 1, + "value": "65" + }, + { "begin": 1482, "end": 1515, "name": "JUMPDEST", "source": 1 }, + { "begin": 1382, "end": 1521, "name": "SWAP3", "source": 1 }, + { "begin": 1382, "end": 1521, "name": "SWAP2", "source": 1 }, + { "begin": 1382, "end": 1521, "name": "POP", "source": 1 }, + { "begin": 1382, "end": 1521, "name": "POP", "source": 1 }, + { + "begin": 1382, + "end": 1521, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1527, + "end": 1856, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 1527, "end": 1856, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1586, + "end": 1592, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1635, + "end": 1637, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1623, "end": 1632, "name": "DUP3", "source": 1 }, + { "begin": 1614, "end": 1621, "name": "DUP5", "source": 1 }, + { "begin": 1610, "end": 1633, "name": "SUB", "source": 1 }, + { "begin": 1606, "end": 1638, "name": "SLT", "source": 1 }, + { "begin": 1603, "end": 1722, "name": "ISZERO", "source": 1 }, + { + "begin": 1603, + "end": 1722, + "name": "PUSH [tag]", + "source": 1, + "value": "67" + }, + { "begin": 1603, "end": 1722, "name": "JUMPI", "source": 1 }, + { + "begin": 1641, + "end": 1720, + "name": "PUSH [tag]", + "source": 1, + "value": "68" + }, + { + "begin": 1641, + "end": 1720, + "name": "PUSH [tag]", + "source": 1, + "value": "32" + }, + { + "begin": 1641, + "end": 1720, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1641, + "end": 1720, + "name": "tag", + "source": 1, + "value": "68" + }, + { "begin": 1641, "end": 1720, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1603, + "end": 1722, + "name": "tag", + "source": 1, + "value": "67" + }, + { "begin": 1603, "end": 1722, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1761, + "end": 1762, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1786, + "end": 1839, + "name": "PUSH [tag]", + "source": 1, + "value": "69" + }, + { "begin": 1831, "end": 1838, "name": "DUP5", "source": 1 }, + { "begin": 1822, "end": 1828, "name": "DUP3", "source": 1 }, + { "begin": 1811, "end": 1820, "name": "DUP6", "source": 1 }, + { "begin": 1807, "end": 1829, "name": "ADD", "source": 1 }, + { + "begin": 1786, + "end": 1839, + "name": "PUSH [tag]", + "source": 1, + "value": "40" + }, + { + "begin": 1786, + "end": 1839, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1786, + "end": 1839, + "name": "tag", + "source": 1, + "value": "69" + }, + { "begin": 1786, "end": 1839, "name": "JUMPDEST", "source": 1 }, + { "begin": 1776, "end": 1839, "name": "SWAP2", "source": 1 }, + { "begin": 1776, "end": 1839, "name": "POP", "source": 1 }, + { "begin": 1732, "end": 1849, "name": "POP", "source": 1 }, + { "begin": 1527, "end": 1856, "name": "SWAP3", "source": 1 }, + { "begin": 1527, "end": 1856, "name": "SWAP2", "source": 1 }, + { "begin": 1527, "end": 1856, "name": "POP", "source": 1 }, + { "begin": 1527, "end": 1856, "name": "POP", "source": 1 }, + { + "begin": 1527, + "end": 1856, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1862, + "end": 1939, + "name": "tag", + "source": 1, + "value": "41" + }, + { "begin": 1862, "end": 1939, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1899, + "end": 1906, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1928, "end": 1933, "name": "DUP2", "source": 1 }, + { "begin": 1917, "end": 1933, "name": "SWAP1", "source": 1 }, + { "begin": 1917, "end": 1933, "name": "POP", "source": 1 }, + { "begin": 1862, "end": 1939, "name": "SWAP2", "source": 1 }, + { "begin": 1862, "end": 1939, "name": "SWAP1", "source": 1 }, + { "begin": 1862, "end": 1939, "name": "POP", "source": 1 }, + { + "begin": 1862, + "end": 1939, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1945, + "end": 2063, + "name": "tag", + "source": 1, + "value": "42" + }, + { "begin": 1945, "end": 2063, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2032, + "end": 2056, + "name": "PUSH [tag]", + "source": 1, + "value": "72" + }, + { "begin": 2050, "end": 2055, "name": "DUP2", "source": 1 }, + { + "begin": 2032, + "end": 2056, + "name": "PUSH [tag]", + "source": 1, + "value": "41" + }, + { + "begin": 2032, + "end": 2056, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2032, + "end": 2056, + "name": "tag", + "source": 1, + "value": "72" + }, + { "begin": 2032, "end": 2056, "name": "JUMPDEST", "source": 1 }, + { "begin": 2027, "end": 2030, "name": "DUP3", "source": 1 }, + { "begin": 2020, "end": 2057, "name": "MSTORE", "source": 1 }, + { "begin": 1945, "end": 2063, "name": "POP", "source": 1 }, + { "begin": 1945, "end": 2063, "name": "POP", "source": 1 }, + { + "begin": 1945, + "end": 2063, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2069, + "end": 2178, + "name": "tag", + "source": 1, + "value": "43" + }, + { "begin": 2069, "end": 2178, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2150, + "end": 2171, + "name": "PUSH [tag]", + "source": 1, + "value": "74" + }, + { "begin": 2165, "end": 2170, "name": "DUP2", "source": 1 }, + { + "begin": 2150, + "end": 2171, + "name": "PUSH [tag]", + "source": 1, + "value": "34" + }, + { + "begin": 2150, + "end": 2171, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2150, + "end": 2171, + "name": "tag", + "source": 1, + "value": "74" + }, + { "begin": 2150, "end": 2171, "name": "JUMPDEST", "source": 1 }, + { "begin": 2145, "end": 2148, "name": "DUP3", "source": 1 }, + { "begin": 2138, "end": 2172, "name": "MSTORE", "source": 1 }, + { "begin": 2069, "end": 2178, "name": "POP", "source": 1 }, + { "begin": 2069, "end": 2178, "name": "POP", "source": 1 }, + { + "begin": 2069, + "end": 2178, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2184, + "end": 2504, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 2184, "end": 2504, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2299, + "end": 2303, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 2337, + "end": 2339, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { "begin": 2326, "end": 2335, "name": "DUP3", "source": 1 }, + { "begin": 2322, "end": 2340, "name": "ADD", "source": 1 }, + { "begin": 2314, "end": 2340, "name": "SWAP1", "source": 1 }, + { "begin": 2314, "end": 2340, "name": "POP", "source": 1 }, + { + "begin": 2350, + "end": 2421, + "name": "PUSH [tag]", + "source": 1, + "value": "76" + }, + { + "begin": 2418, + "end": 2419, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2407, "end": 2416, "name": "DUP4", "source": 1 }, + { "begin": 2403, "end": 2420, "name": "ADD", "source": 1 }, + { "begin": 2394, "end": 2400, "name": "DUP6", "source": 1 }, + { + "begin": 2350, + "end": 2421, + "name": "PUSH [tag]", + "source": 1, + "value": "42" + }, + { + "begin": 2350, + "end": 2421, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2350, + "end": 2421, + "name": "tag", + "source": 1, + "value": "76" + }, + { "begin": 2350, "end": 2421, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2431, + "end": 2497, + "name": "PUSH [tag]", + "source": 1, + "value": "77" + }, + { + "begin": 2493, + "end": 2495, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 2482, "end": 2491, "name": "DUP4", "source": 1 }, + { "begin": 2478, "end": 2496, "name": "ADD", "source": 1 }, + { "begin": 2469, "end": 2475, "name": "DUP5", "source": 1 }, + { + "begin": 2431, + "end": 2497, + "name": "PUSH [tag]", + "source": 1, + "value": "43" + }, + { + "begin": 2431, + "end": 2497, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2431, + "end": 2497, + "name": "tag", + "source": 1, + "value": "77" + }, + { "begin": 2431, "end": 2497, "name": "JUMPDEST", "source": 1 }, + { "begin": 2184, "end": 2504, "name": "SWAP4", "source": 1 }, + { "begin": 2184, "end": 2504, "name": "SWAP3", "source": 1 }, + { "begin": 2184, "end": 2504, "name": "POP", "source": 1 }, + { "begin": 2184, "end": 2504, "name": "POP", "source": 1 }, + { "begin": 2184, "end": 2504, "name": "POP", "source": 1 }, + { + "begin": 2184, + "end": 2504, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "change_vote()": "be9886a0", + "contribute(bool)": "40656963", + "contributions(address)": "42e94c90", + "withdraw()": "3ccfd60b", + "withdraw_early()": "8239f064" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"proposal_hash\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"change_vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"vote\",\"type\":\"bool\"}],\"name\":\"contribute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"contributions\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"vote\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdraw_early\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"contribute(bool)\":{\"params\":{\"vote\":\"Whether you support the referendum (true).\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"change_vote()\":{\"notice\":\"Change your currently registered vote in the contract\"},\"contribute(bool)\":{\"notice\":\"Contribute funds to the dao and specify your initial vote\"},\"withdraw()\":{\"notice\":\"Withdraw your tokens after the referendum finishes.\"},\"withdraw_early()\":{\"notice\":\"Allows a user who is unhappy with the status of the internal party vote to withdraw tokens. However there is a 10% penalty for being fickle. The 10% of tokens that remain in the DAO are jsut locked here forever. A real-life impl could explicitly burn or redistribute.\"}},\"notice\":\"Example contract to use and test the democracy interface. A simple DAO where you can contribute eth and vote on a referendum. The DAO holds its own internal vote on a pallet-democracy style referendum, and votes all DAO tokens accordingly. Contributors who lock tokens in the contract are sacrificing the ability to otherwise use the tokens (opportunity cost) as well as sacrificing their freedom to vote with those tokens. They are accepting these costs for the potential of gaining more overall political influence by means of non-member citizens delegating their own votes to the party. This example contract is meant to explore the democracy interface more than innovate in terms of elections and political parties, so there are a few limitations. 1. This DAO is for a _single_ referendum. 2. It uses a simple majority rules mechanism. Definitely not production ready... 3. Early withdrawal penalties are just locked in the contract forever. 4. We just use a simple mapping to store everything. A better idea might be fungible dao tokens\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"PoliticalPartyDao\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xec1bb5525b65c41ca79c11a3ffafd9ecc95d8d55fbf45c48228fee54c42e8724\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://5a6109c02132b40f360d63470f56661a38a059904f2f6d2e5a6af698011aecdc\",\"dweb:/ipfs/QmX7YpgdFqgQYMMGcpiTPXJ7iLqnmoUpZ57wWJxRuC8cxn\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 7, + "contract": "main.sol:PoliticalPartyDao", + "label": "contributions", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_struct(Contribution)41_storage)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_struct(Contribution)41_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct Contribution)", + "numberOfBytes": "32", + "value": "t_struct(Contribution)41_storage" + }, + "t_struct(Contribution)41_storage": { + "encoding": "inplace", + "label": "struct Contribution", + "members": [ + { + "astId": 38, + "contract": "main.sol:PoliticalPartyDao", + "label": "amount", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 40, + "contract": "main.sol:PoliticalPartyDao", + "label": "vote", + "offset": 0, + "slot": "1", + "type": "t_bool" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { + "kind": "user", + "methods": { + "change_vote()": { + "notice": "Change your currently registered vote in the contract" + }, + "contribute(bool)": { + "notice": "Contribute funds to the dao and specify your initial vote" + }, + "withdraw()": { + "notice": "Withdraw your tokens after the referendum finishes." + }, + "withdraw_early()": { + "notice": "Allows a user who is unhappy with the status of the internal party vote to withdraw tokens. However there is a 10% penalty for being fickle. The 10% of tokens that remain in the DAO are jsut locked here forever. A real-life impl could explicitly burn or redistribute." + } + }, + "notice": "Example contract to use and test the democracy interface. A simple DAO where you can contribute eth and vote on a referendum. The DAO holds its own internal vote on a pallet-democracy style referendum, and votes all DAO tokens accordingly. Contributors who lock tokens in the contract are sacrificing the ability to otherwise use the tokens (opportunity cost) as well as sacrificing their freedom to vote with those tokens. They are accepting these costs for the potential of gaining more overall political influence by means of non-member citizens delegating their own votes to the party. This example contract is meant to explore the democracy interface more than innovate in terms of elections and political parties, so there are a few limitations. 1. This DAO is for a _single_ referendum. 2. It uses a simple majority rules mechanism. Definitely not production ready... 3. Early withdrawal penalties are just locked in the contract forever. 4. We just use a simple mapping to store everything. A better idea might be fungible dao tokens", + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * Example contract to use and test the democracy interface.\n *\n * A simple DAO where you can contribute eth and vote on a referendum. The DAO holds its own\n * internal vote on a pallet-democracy style referendum, and votes all DAO tokens accordingly.\n *\n * Contributors who lock tokens in the contract are sacrificing the ability to otherwise\n * use the tokens (opportunity cost) as well as sacrificing their freedom to vote with those tokens.\n * They are accepting these costs for the potential of gaining more overall political influence by\n * means of non-member citizens delegating their own votes to the party.\n *\n * This example contract is meant to explore the democracy interface more than innovate in terms of\n * elections and political parties, so there are a few limitations.\n * 1. This DAO is for a _single_ referendum.\n * 2. It uses a simple majority rules mechanism. Definitely not production ready...\n * 3. Early withdrawal penalties are just locked in the contract forever.\n * 4. We just use a simple mapping to store everything. A better idea might be fungible dao tokens\n */\ncontract PoliticalPartyDao {\n mapping(address => Contribution) public contributions;\n\n constructor(uint256 proposal_hash) {\n // Make sure the proposal exists\n }\n\n /**\n * Contribute funds to the dao and specify your initial vote\n *\n * @param vote Whether you support the referendum (true).\n */\n function contribute(bool vote) external payable {}\n\n /**\n * Change your currently registered vote in the contract\n */\n function change_vote() external {}\n\n /**\n * Withdraw your tokens after the referendum finishes.\n */\n function withdraw() external {}\n\n /**\n * Allows a user who is unhappy with the status of the internal party vote to withdraw tokens.\n * However there is a 10% penalty for being fickle. The 10% of tokens that remain in the DAO\n * are jsut locked here forever. A real-life impl could explicitly burn or redistribute.\n */\n function withdraw_early() external {\n // Does this actually help explore the democracy interface? If not, don't implement it.\n }\n}\n\n/**\n * Information about a contribution to the DAO including the amount contributed and the vote.\n */\nstruct Contribution {\n uint256 amount;\n bool vote;\n}\n" +} diff --git a/tests/contracts/compiled/TestCallList.json b/tests/contracts/compiled/Proxy.json similarity index 84% rename from tests/contracts/compiled/TestCallList.json rename to tests/contracts/compiled/Proxy.json index 4a93e0747e..7b31e0f918 100644 --- a/tests/contracts/compiled/TestCallList.json +++ b/tests/contracts/compiled/Proxy.json @@ -1,5 +1,5 @@ { - "byteCode": "0x608060405234801561001057600080fd5b506104f9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631b8b921d1461003b57806356e7b7aa1461006c575b600080fd5b61005560048036038101906100509190610341565b61009d565b604051610063929190610440565b60405180910390f35b61008660048036038101906100819190610341565b610114565b604051610094929190610440565b60405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516100c691906104ac565b6000604051808303816000865af19150503d8060008114610103576040519150601f19603f3d011682016040523d82523d6000602084013e610108565b606091505b50915091509250929050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161013d91906104ac565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b50915091509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c88261019d565b9050919050565b6101d8816101bd565b81146101e357600080fd5b50565b6000813590506101f5816101cf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61024e82610205565b810181811067ffffffffffffffff8211171561026d5761026c610216565b5b80604052505050565b6000610280610189565b905061028c8282610245565b919050565b600067ffffffffffffffff8211156102ac576102ab610216565b5b6102b582610205565b9050602081019050919050565b82818337600083830152505050565b60006102e46102df84610291565b610276565b905082815260208101848484011115610300576102ff610200565b5b61030b8482856102c2565b509392505050565b600082601f830112610328576103276101fb565b5b81356103388482602086016102d1565b91505092915050565b6000806040838503121561035857610357610193565b5b6000610366858286016101e6565b925050602083013567ffffffffffffffff81111561038757610386610198565b5b61039385828601610313565b9150509250929050565b60008115159050919050565b6103b28161039d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103f25780820151818401526020810190506103d7565b83811115610401576000848401525b50505050565b6000610412826103b8565b61041c81856103c3565b935061042c8185602086016103d4565b61043581610205565b840191505092915050565b600060408201905061045560008301856103a9565b81810360208301526104678184610407565b90509392505050565b600081905092915050565b6000610486826103b8565b6104908185610470565b93506104a08185602086016103d4565b80840191505092915050565b60006104b8828461047b565b91508190509291505056fea264697066735822122064ea7fe738b6b8a7e5236b1fc887bbe7452996ef3db58d2b9f0db3d55483760d64736f6c634300080b0033", + "byteCode": "0x608060405234801561001057600080fd5b506104f9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631b8b921d1461003b57806356e7b7aa1461006c575b600080fd5b61005560048036038101906100509190610341565b61009d565b604051610063929190610440565b60405180910390f35b61008660048036038101906100819190610341565b610114565b604051610094929190610440565b60405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516100c691906104ac565b6000604051808303816000865af19150503d8060008114610103576040519150601f19603f3d011682016040523d82523d6000602084013e610108565b606091505b50915091509250929050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161013d91906104ac565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b50915091509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c88261019d565b9050919050565b6101d8816101bd565b81146101e357600080fd5b50565b6000813590506101f5816101cf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61024e82610205565b810181811067ffffffffffffffff8211171561026d5761026c610216565b5b80604052505050565b6000610280610189565b905061028c8282610245565b919050565b600067ffffffffffffffff8211156102ac576102ab610216565b5b6102b582610205565b9050602081019050919050565b82818337600083830152505050565b60006102e46102df84610291565b610276565b905082815260208101848484011115610300576102ff610200565b5b61030b8482856102c2565b509392505050565b600082601f830112610328576103276101fb565b5b81356103388482602086016102d1565b91505092915050565b6000806040838503121561035857610357610193565b5b6000610366858286016101e6565b925050602083013567ffffffffffffffff81111561038757610386610198565b5b61039385828601610313565b9150509250929050565b60008115159050919050565b6103b28161039d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103f25780820151818401526020810190506103d7565b83811115610401576000848401525b50505050565b6000610412826103b8565b61041c81856103c3565b935061042c8185602086016103d4565b61043581610205565b840191505092915050565b600060408201905061045560008301856103a9565b81810360208301526104678184610407565b90509392505050565b600081905092915050565b6000610486826103b8565b6104908185610470565b93506104a08185602086016103d4565b80840191505092915050565b60006104b8828461047b565b91508190509291505056fea2646970667358221220e291ea20ea0314926b18a49aac9dcca98e78bdf8a6300060ad27cd9704b9aec964736f6c634300080b0033", "contract": { "abi": [ { @@ -31,14 +31,14 @@ ], "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":45:397 contract TestCallList {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":45:397 contract TestCallList {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x1b8b921d\n eq\n tag_3\n jumpi\n dup1\n 0x56e7b7aa\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":79:217 function call(address target, bytes memory data) public returns (bool, bytes memory) {... */\n tag_3:\n tag_5\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n tag_8\n jump\t// in\n tag_5:\n mload(0x40)\n tag_9\n swap3\n swap2\n swap1\n tag_10\n jump\t// in\n tag_9:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":235:389 function delegateCall(address target, bytes memory data) public returns (bool, bytes memory) {... */\n tag_4:\n tag_11\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_12\n swap2\n swap1\n tag_7\n jump\t// in\n tag_12:\n tag_13\n jump\t// in\n tag_11:\n mload(0x40)\n tag_14\n swap3\n swap2\n swap1\n tag_10\n jump\t// in\n tag_14:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":79:217 function call(address target, bytes memory data) public returns (bool, bytes memory) {... */\n tag_8:\n /* \"main.sol\":144:148 bool */\n 0x00\n /* \"main.sol\":150:162 bytes memory */\n 0x60\n /* \"main.sol\":187:193 target */\n dup4\n /* \"main.sol\":187:198 target.call */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":199:203 data */\n dup4\n /* \"main.sol\":187:204 target.call(data) */\n mload(0x40)\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup7\n gas\n call\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_20\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_19)\n tag_20:\n 0x60\n swap2\n pop\n tag_19:\n pop\n /* \"main.sol\":180:204 return target.call(data) */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":79:217 function call(address target, bytes memory data) public returns (bool, bytes memory) {... */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"main.sol\":235:389 function delegateCall(address target, bytes memory data) public returns (bool, bytes memory) {... */\n tag_13:\n /* \"main.sol\":308:312 bool */\n 0x00\n /* \"main.sol\":314:326 bytes memory */\n 0x60\n /* \"main.sol\":351:357 target */\n dup4\n /* \"main.sol\":351:370 target.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":371:375 data */\n dup4\n /* \"main.sol\":351:376 target.delegatecall(data) */\n mload(0x40)\n tag_22\n swap2\n swap1\n tag_17\n jump\t// in\n tag_22:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_25\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_24)\n tag_25:\n 0x60\n swap2\n pop\n tag_24:\n pop\n /* \"main.sol\":344:376 return target.delegatecall(data) */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":235:389 function delegateCall(address target, bytes memory data) public returns (bool, bytes memory) {... */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_26:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_27:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_28:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:460 */\n tag_29:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":411:453 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":404:409 */\n dup3\n /* \"#utility.yul\":400:454 */\n and\n /* \"#utility.yul\":389:454 */\n swap1\n pop\n /* \"#utility.yul\":334:460 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":466:562 */\n tag_30:\n /* \"#utility.yul\":503:510 */\n 0x00\n /* \"#utility.yul\":532:556 */\n tag_57\n /* \"#utility.yul\":550:555 */\n dup3\n /* \"#utility.yul\":532:556 */\n tag_29\n jump\t// in\n tag_57:\n /* \"#utility.yul\":521:556 */\n swap1\n pop\n /* \"#utility.yul\":466:562 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":568:690 */\n tag_31:\n /* \"#utility.yul\":641:665 */\n tag_59\n /* \"#utility.yul\":659:664 */\n dup2\n /* \"#utility.yul\":641:665 */\n tag_30\n jump\t// in\n tag_59:\n /* \"#utility.yul\":634:639 */\n dup2\n /* \"#utility.yul\":631:666 */\n eq\n /* \"#utility.yul\":621:684 */\n tag_60\n jumpi\n /* \"#utility.yul\":680:681 */\n 0x00\n /* \"#utility.yul\":677:678 */\n dup1\n /* \"#utility.yul\":670:682 */\n revert\n /* \"#utility.yul\":621:684 */\n tag_60:\n /* \"#utility.yul\":568:690 */\n pop\n jump\t// out\n /* \"#utility.yul\":696:835 */\n tag_32:\n /* \"#utility.yul\":742:747 */\n 0x00\n /* \"#utility.yul\":780:786 */\n dup2\n /* \"#utility.yul\":767:787 */\n calldataload\n /* \"#utility.yul\":758:787 */\n swap1\n pop\n /* \"#utility.yul\":796:829 */\n tag_62\n /* \"#utility.yul\":823:828 */\n dup2\n /* \"#utility.yul\":796:829 */\n tag_31\n jump\t// in\n tag_62:\n /* \"#utility.yul\":696:835 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":841:958 */\n tag_33:\n /* \"#utility.yul\":950:951 */\n 0x00\n /* \"#utility.yul\":947:948 */\n dup1\n /* \"#utility.yul\":940:952 */\n revert\n /* \"#utility.yul\":964:1081 */\n tag_34:\n /* \"#utility.yul\":1073:1074 */\n 0x00\n /* \"#utility.yul\":1070:1071 */\n dup1\n /* \"#utility.yul\":1063:1075 */\n revert\n /* \"#utility.yul\":1087:1189 */\n tag_35:\n /* \"#utility.yul\":1128:1134 */\n 0x00\n /* \"#utility.yul\":1179:1181 */\n 0x1f\n /* \"#utility.yul\":1175:1182 */\n not\n /* \"#utility.yul\":1170:1172 */\n 0x1f\n /* \"#utility.yul\":1163:1168 */\n dup4\n /* \"#utility.yul\":1159:1173 */\n add\n /* \"#utility.yul\":1155:1183 */\n and\n /* \"#utility.yul\":1145:1183 */\n swap1\n pop\n /* \"#utility.yul\":1087:1189 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1195:1375 */\n tag_36:\n /* \"#utility.yul\":1243:1320 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1240:1241 */\n 0x00\n /* \"#utility.yul\":1233:1321 */\n mstore\n /* \"#utility.yul\":1340:1344 */\n 0x41\n /* \"#utility.yul\":1337:1338 */\n 0x04\n /* \"#utility.yul\":1330:1345 */\n mstore\n /* \"#utility.yul\":1364:1368 */\n 0x24\n /* \"#utility.yul\":1361:1362 */\n 0x00\n /* \"#utility.yul\":1354:1369 */\n revert\n /* \"#utility.yul\":1381:1662 */\n tag_37:\n /* \"#utility.yul\":1464:1491 */\n tag_68\n /* \"#utility.yul\":1486:1490 */\n dup3\n /* \"#utility.yul\":1464:1491 */\n tag_35\n jump\t// in\n tag_68:\n /* \"#utility.yul\":1456:1462 */\n dup2\n /* \"#utility.yul\":1452:1492 */\n add\n /* \"#utility.yul\":1594:1600 */\n dup2\n /* \"#utility.yul\":1582:1592 */\n dup2\n /* \"#utility.yul\":1579:1601 */\n lt\n /* \"#utility.yul\":1558:1576 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1546:1556 */\n dup3\n /* \"#utility.yul\":1543:1577 */\n gt\n /* \"#utility.yul\":1540:1602 */\n or\n /* \"#utility.yul\":1537:1625 */\n iszero\n tag_69\n jumpi\n /* \"#utility.yul\":1605:1623 */\n tag_70\n tag_36\n jump\t// in\n tag_70:\n /* \"#utility.yul\":1537:1625 */\n tag_69:\n /* \"#utility.yul\":1645:1655 */\n dup1\n /* \"#utility.yul\":1641:1643 */\n 0x40\n /* \"#utility.yul\":1634:1656 */\n mstore\n /* \"#utility.yul\":1424:1662 */\n pop\n /* \"#utility.yul\":1381:1662 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1668:1797 */\n tag_38:\n /* \"#utility.yul\":1702:1708 */\n 0x00\n /* \"#utility.yul\":1729:1749 */\n tag_72\n tag_26\n jump\t// in\n tag_72:\n /* \"#utility.yul\":1719:1749 */\n swap1\n pop\n /* \"#utility.yul\":1758:1791 */\n tag_73\n /* \"#utility.yul\":1786:1790 */\n dup3\n /* \"#utility.yul\":1778:1784 */\n dup3\n /* \"#utility.yul\":1758:1791 */\n tag_37\n jump\t// in\n tag_73:\n /* \"#utility.yul\":1668:1797 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1803:2110 */\n tag_39:\n /* \"#utility.yul\":1864:1868 */\n 0x00\n /* \"#utility.yul\":1954:1972 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1946:1952 */\n dup3\n /* \"#utility.yul\":1943:1973 */\n gt\n /* \"#utility.yul\":1940:1996 */\n iszero\n tag_75\n jumpi\n /* \"#utility.yul\":1976:1994 */\n tag_76\n tag_36\n jump\t// in\n tag_76:\n /* \"#utility.yul\":1940:1996 */\n tag_75:\n /* \"#utility.yul\":2014:2043 */\n tag_77\n /* \"#utility.yul\":2036:2042 */\n dup3\n /* \"#utility.yul\":2014:2043 */\n tag_35\n jump\t// in\n tag_77:\n /* \"#utility.yul\":2006:2043 */\n swap1\n pop\n /* \"#utility.yul\":2098:2102 */\n 0x20\n /* \"#utility.yul\":2092:2096 */\n dup2\n /* \"#utility.yul\":2088:2103 */\n add\n /* \"#utility.yul\":2080:2103 */\n swap1\n pop\n /* \"#utility.yul\":1803:2110 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2116:2270 */\n tag_40:\n /* \"#utility.yul\":2200:2206 */\n dup3\n /* \"#utility.yul\":2195:2198 */\n dup2\n /* \"#utility.yul\":2190:2193 */\n dup4\n /* \"#utility.yul\":2177:2207 */\n calldatacopy\n /* \"#utility.yul\":2262:2263 */\n 0x00\n /* \"#utility.yul\":2253:2259 */\n dup4\n /* \"#utility.yul\":2248:2251 */\n dup4\n /* \"#utility.yul\":2244:2260 */\n add\n /* \"#utility.yul\":2237:2264 */\n mstore\n /* \"#utility.yul\":2116:2270 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2276:2686 */\n tag_41:\n /* \"#utility.yul\":2353:2358 */\n 0x00\n /* \"#utility.yul\":2378:2443 */\n tag_80\n /* \"#utility.yul\":2394:2442 */\n tag_81\n /* \"#utility.yul\":2435:2441 */\n dup5\n /* \"#utility.yul\":2394:2442 */\n tag_39\n jump\t// in\n tag_81:\n /* \"#utility.yul\":2378:2443 */\n tag_38\n jump\t// in\n tag_80:\n /* \"#utility.yul\":2369:2443 */\n swap1\n pop\n /* \"#utility.yul\":2466:2472 */\n dup3\n /* \"#utility.yul\":2459:2464 */\n dup2\n /* \"#utility.yul\":2452:2473 */\n mstore\n /* \"#utility.yul\":2504:2508 */\n 0x20\n /* \"#utility.yul\":2497:2502 */\n dup2\n /* \"#utility.yul\":2493:2509 */\n add\n /* \"#utility.yul\":2542:2545 */\n dup5\n /* \"#utility.yul\":2533:2539 */\n dup5\n /* \"#utility.yul\":2528:2531 */\n dup5\n /* \"#utility.yul\":2524:2540 */\n add\n /* \"#utility.yul\":2521:2546 */\n gt\n /* \"#utility.yul\":2518:2630 */\n iszero\n tag_82\n jumpi\n /* \"#utility.yul\":2549:2628 */\n tag_83\n tag_34\n jump\t// in\n tag_83:\n /* \"#utility.yul\":2518:2630 */\n tag_82:\n /* \"#utility.yul\":2639:2680 */\n tag_84\n /* \"#utility.yul\":2673:2679 */\n dup5\n /* \"#utility.yul\":2668:2671 */\n dup3\n /* \"#utility.yul\":2663:2666 */\n dup6\n /* \"#utility.yul\":2639:2680 */\n tag_40\n jump\t// in\n tag_84:\n /* \"#utility.yul\":2359:2686 */\n pop\n /* \"#utility.yul\":2276:2686 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2705:3043 */\n tag_42:\n /* \"#utility.yul\":2760:2765 */\n 0x00\n /* \"#utility.yul\":2809:2812 */\n dup3\n /* \"#utility.yul\":2802:2806 */\n 0x1f\n /* \"#utility.yul\":2794:2800 */\n dup4\n /* \"#utility.yul\":2790:2807 */\n add\n /* \"#utility.yul\":2786:2813 */\n slt\n /* \"#utility.yul\":2776:2898 */\n tag_86\n jumpi\n /* \"#utility.yul\":2817:2896 */\n tag_87\n tag_33\n jump\t// in\n tag_87:\n /* \"#utility.yul\":2776:2898 */\n tag_86:\n /* \"#utility.yul\":2934:2940 */\n dup2\n /* \"#utility.yul\":2921:2941 */\n calldataload\n /* \"#utility.yul\":2959:3037 */\n tag_88\n /* \"#utility.yul\":3033:3036 */\n dup5\n /* \"#utility.yul\":3025:3031 */\n dup3\n /* \"#utility.yul\":3018:3022 */\n 0x20\n /* \"#utility.yul\":3010:3016 */\n dup7\n /* \"#utility.yul\":3006:3023 */\n add\n /* \"#utility.yul\":2959:3037 */\n tag_41\n jump\t// in\n tag_88:\n /* \"#utility.yul\":2950:3037 */\n swap2\n pop\n /* \"#utility.yul\":2766:3043 */\n pop\n /* \"#utility.yul\":2705:3043 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3049:3701 */\n tag_7:\n /* \"#utility.yul\":3126:3132 */\n 0x00\n /* \"#utility.yul\":3134:3140 */\n dup1\n /* \"#utility.yul\":3183:3185 */\n 0x40\n /* \"#utility.yul\":3171:3180 */\n dup4\n /* \"#utility.yul\":3162:3169 */\n dup6\n /* \"#utility.yul\":3158:3181 */\n sub\n /* \"#utility.yul\":3154:3186 */\n slt\n /* \"#utility.yul\":3151:3270 */\n iszero\n tag_90\n jumpi\n /* \"#utility.yul\":3189:3268 */\n tag_91\n tag_27\n jump\t// in\n tag_91:\n /* \"#utility.yul\":3151:3270 */\n tag_90:\n /* \"#utility.yul\":3309:3310 */\n 0x00\n /* \"#utility.yul\":3334:3387 */\n tag_92\n /* \"#utility.yul\":3379:3386 */\n dup6\n /* \"#utility.yul\":3370:3376 */\n dup3\n /* \"#utility.yul\":3359:3368 */\n dup7\n /* \"#utility.yul\":3355:3377 */\n add\n /* \"#utility.yul\":3334:3387 */\n tag_32\n jump\t// in\n tag_92:\n /* \"#utility.yul\":3324:3387 */\n swap3\n pop\n /* \"#utility.yul\":3280:3397 */\n pop\n /* \"#utility.yul\":3464:3466 */\n 0x20\n /* \"#utility.yul\":3453:3462 */\n dup4\n /* \"#utility.yul\":3449:3467 */\n add\n /* \"#utility.yul\":3436:3468 */\n calldataload\n /* \"#utility.yul\":3495:3513 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3487:3493 */\n dup2\n /* \"#utility.yul\":3484:3514 */\n gt\n /* \"#utility.yul\":3481:3598 */\n iszero\n tag_93\n jumpi\n /* \"#utility.yul\":3517:3596 */\n tag_94\n tag_28\n jump\t// in\n tag_94:\n /* \"#utility.yul\":3481:3598 */\n tag_93:\n /* \"#utility.yul\":3622:3684 */\n tag_95\n /* \"#utility.yul\":3676:3683 */\n dup6\n /* \"#utility.yul\":3667:3673 */\n dup3\n /* \"#utility.yul\":3656:3665 */\n dup7\n /* \"#utility.yul\":3652:3674 */\n add\n /* \"#utility.yul\":3622:3684 */\n tag_42\n jump\t// in\n tag_95:\n /* \"#utility.yul\":3612:3684 */\n swap2\n pop\n /* \"#utility.yul\":3407:3694 */\n pop\n /* \"#utility.yul\":3049:3701 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3707:3797 */\n tag_43:\n /* \"#utility.yul\":3741:3748 */\n 0x00\n /* \"#utility.yul\":3784:3789 */\n dup2\n /* \"#utility.yul\":3777:3790 */\n iszero\n /* \"#utility.yul\":3770:3791 */\n iszero\n /* \"#utility.yul\":3759:3791 */\n swap1\n pop\n /* \"#utility.yul\":3707:3797 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3803:3912 */\n tag_44:\n /* \"#utility.yul\":3884:3905 */\n tag_98\n /* \"#utility.yul\":3899:3904 */\n dup2\n /* \"#utility.yul\":3884:3905 */\n tag_43\n jump\t// in\n tag_98:\n /* \"#utility.yul\":3879:3882 */\n dup3\n /* \"#utility.yul\":3872:3906 */\n mstore\n /* \"#utility.yul\":3803:3912 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3918:4016 */\n tag_45:\n /* \"#utility.yul\":3969:3975 */\n 0x00\n /* \"#utility.yul\":4003:4008 */\n dup2\n /* \"#utility.yul\":3997:4009 */\n mload\n /* \"#utility.yul\":3987:4009 */\n swap1\n pop\n /* \"#utility.yul\":3918:4016 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4022:4190 */\n tag_46:\n /* \"#utility.yul\":4105:4116 */\n 0x00\n /* \"#utility.yul\":4139:4145 */\n dup3\n /* \"#utility.yul\":4134:4137 */\n dup3\n /* \"#utility.yul\":4127:4146 */\n mstore\n /* \"#utility.yul\":4179:4183 */\n 0x20\n /* \"#utility.yul\":4174:4177 */\n dup3\n /* \"#utility.yul\":4170:4184 */\n add\n /* \"#utility.yul\":4155:4184 */\n swap1\n pop\n /* \"#utility.yul\":4022:4190 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4196:4503 */\n tag_47:\n /* \"#utility.yul\":4264:4265 */\n 0x00\n /* \"#utility.yul\":4274:4387 */\n tag_102:\n /* \"#utility.yul\":4288:4294 */\n dup4\n /* \"#utility.yul\":4285:4286 */\n dup2\n /* \"#utility.yul\":4282:4295 */\n lt\n /* \"#utility.yul\":4274:4387 */\n iszero\n tag_104\n jumpi\n /* \"#utility.yul\":4373:4374 */\n dup1\n /* \"#utility.yul\":4368:4371 */\n dup3\n /* \"#utility.yul\":4364:4375 */\n add\n /* \"#utility.yul\":4358:4376 */\n mload\n /* \"#utility.yul\":4354:4355 */\n dup2\n /* \"#utility.yul\":4349:4352 */\n dup5\n /* \"#utility.yul\":4345:4356 */\n add\n /* \"#utility.yul\":4338:4377 */\n mstore\n /* \"#utility.yul\":4310:4312 */\n 0x20\n /* \"#utility.yul\":4307:4308 */\n dup2\n /* \"#utility.yul\":4303:4313 */\n add\n /* \"#utility.yul\":4298:4313 */\n swap1\n pop\n /* \"#utility.yul\":4274:4387 */\n jump(tag_102)\n tag_104:\n /* \"#utility.yul\":4405:4411 */\n dup4\n /* \"#utility.yul\":4402:4403 */\n dup2\n /* \"#utility.yul\":4399:4412 */\n gt\n /* \"#utility.yul\":4396:4497 */\n iszero\n tag_105\n jumpi\n /* \"#utility.yul\":4485:4486 */\n 0x00\n /* \"#utility.yul\":4476:4482 */\n dup5\n /* \"#utility.yul\":4471:4474 */\n dup5\n /* \"#utility.yul\":4467:4483 */\n add\n /* \"#utility.yul\":4460:4487 */\n mstore\n /* \"#utility.yul\":4396:4497 */\n tag_105:\n /* \"#utility.yul\":4245:4503 */\n pop\n /* \"#utility.yul\":4196:4503 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4509:4869 */\n tag_48:\n /* \"#utility.yul\":4595:4598 */\n 0x00\n /* \"#utility.yul\":4623:4661 */\n tag_107\n /* \"#utility.yul\":4655:4660 */\n dup3\n /* \"#utility.yul\":4623:4661 */\n tag_45\n jump\t// in\n tag_107:\n /* \"#utility.yul\":4677:4747 */\n tag_108\n /* \"#utility.yul\":4740:4746 */\n dup2\n /* \"#utility.yul\":4735:4738 */\n dup6\n /* \"#utility.yul\":4677:4747 */\n tag_46\n jump\t// in\n tag_108:\n /* \"#utility.yul\":4670:4747 */\n swap4\n pop\n /* \"#utility.yul\":4756:4808 */\n tag_109\n /* \"#utility.yul\":4801:4807 */\n dup2\n /* \"#utility.yul\":4796:4799 */\n dup6\n /* \"#utility.yul\":4789:4793 */\n 0x20\n /* \"#utility.yul\":4782:4787 */\n dup7\n /* \"#utility.yul\":4778:4794 */\n add\n /* \"#utility.yul\":4756:4808 */\n tag_47\n jump\t// in\n tag_109:\n /* \"#utility.yul\":4833:4862 */\n tag_110\n /* \"#utility.yul\":4855:4861 */\n dup2\n /* \"#utility.yul\":4833:4862 */\n tag_35\n jump\t// in\n tag_110:\n /* \"#utility.yul\":4828:4831 */\n dup5\n /* \"#utility.yul\":4824:4863 */\n add\n /* \"#utility.yul\":4817:4863 */\n swap2\n pop\n /* \"#utility.yul\":4599:4869 */\n pop\n /* \"#utility.yul\":4509:4869 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4875:5282 */\n tag_10:\n /* \"#utility.yul\":5008:5012 */\n 0x00\n /* \"#utility.yul\":5046:5048 */\n 0x40\n /* \"#utility.yul\":5035:5044 */\n dup3\n /* \"#utility.yul\":5031:5049 */\n add\n /* \"#utility.yul\":5023:5049 */\n swap1\n pop\n /* \"#utility.yul\":5059:5124 */\n tag_112\n /* \"#utility.yul\":5121:5122 */\n 0x00\n /* \"#utility.yul\":5110:5119 */\n dup4\n /* \"#utility.yul\":5106:5123 */\n add\n /* \"#utility.yul\":5097:5103 */\n dup6\n /* \"#utility.yul\":5059:5124 */\n tag_44\n jump\t// in\n tag_112:\n /* \"#utility.yul\":5171:5180 */\n dup2\n /* \"#utility.yul\":5165:5169 */\n dup2\n /* \"#utility.yul\":5161:5181 */\n sub\n /* \"#utility.yul\":5156:5158 */\n 0x20\n /* \"#utility.yul\":5145:5154 */\n dup4\n /* \"#utility.yul\":5141:5159 */\n add\n /* \"#utility.yul\":5134:5182 */\n mstore\n /* \"#utility.yul\":5199:5275 */\n tag_113\n /* \"#utility.yul\":5270:5274 */\n dup2\n /* \"#utility.yul\":5261:5267 */\n dup5\n /* \"#utility.yul\":5199:5275 */\n tag_48\n jump\t// in\n tag_113:\n /* \"#utility.yul\":5191:5275 */\n swap1\n pop\n /* \"#utility.yul\":4875:5282 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5288:5435 */\n tag_49:\n /* \"#utility.yul\":5389:5400 */\n 0x00\n /* \"#utility.yul\":5426:5429 */\n dup2\n /* \"#utility.yul\":5411:5429 */\n swap1\n pop\n /* \"#utility.yul\":5288:5435 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5441:5814 */\n tag_50:\n /* \"#utility.yul\":5545:5548 */\n 0x00\n /* \"#utility.yul\":5573:5611 */\n tag_116\n /* \"#utility.yul\":5605:5610 */\n dup3\n /* \"#utility.yul\":5573:5611 */\n tag_45\n jump\t// in\n tag_116:\n /* \"#utility.yul\":5627:5715 */\n tag_117\n /* \"#utility.yul\":5708:5714 */\n dup2\n /* \"#utility.yul\":5703:5706 */\n dup6\n /* \"#utility.yul\":5627:5715 */\n tag_49\n jump\t// in\n tag_117:\n /* \"#utility.yul\":5620:5715 */\n swap4\n pop\n /* \"#utility.yul\":5724:5776 */\n tag_118\n /* \"#utility.yul\":5769:5775 */\n dup2\n /* \"#utility.yul\":5764:5767 */\n dup6\n /* \"#utility.yul\":5757:5761 */\n 0x20\n /* \"#utility.yul\":5750:5755 */\n dup7\n /* \"#utility.yul\":5746:5762 */\n add\n /* \"#utility.yul\":5724:5776 */\n tag_47\n jump\t// in\n tag_118:\n /* \"#utility.yul\":5801:5807 */\n dup1\n /* \"#utility.yul\":5796:5799 */\n dup5\n /* \"#utility.yul\":5792:5808 */\n add\n /* \"#utility.yul\":5785:5808 */\n swap2\n pop\n /* \"#utility.yul\":5549:5814 */\n pop\n /* \"#utility.yul\":5441:5814 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5820:6091 */\n tag_17:\n /* \"#utility.yul\":5950:5953 */\n 0x00\n /* \"#utility.yul\":5972:6065 */\n tag_120\n /* \"#utility.yul\":6061:6064 */\n dup3\n /* \"#utility.yul\":6052:6058 */\n dup5\n /* \"#utility.yul\":5972:6065 */\n tag_50\n jump\t// in\n tag_120:\n /* \"#utility.yul\":5965:6065 */\n swap2\n pop\n /* \"#utility.yul\":6082:6085 */\n dup2\n /* \"#utility.yul\":6075:6085 */\n swap1\n pop\n /* \"#utility.yul\":5820:6091 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122064ea7fe738b6b8a7e5236b1fc887bbe7452996ef3db58d2b9f0db3d55483760d64736f6c634300080b0033\n}\n", + "assembly": " /* \"main.sol\":67:404 contract Proxy {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:404 contract Proxy {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x1b8b921d\n eq\n tag_3\n jumpi\n dup1\n 0x56e7b7aa\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":88:234 function call(address target, bytes memory data)... */\n tag_3:\n tag_5\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n tag_8\n jump\t// in\n tag_5:\n mload(0x40)\n tag_9\n swap3\n swap2\n swap1\n tag_10\n jump\t// in\n tag_9:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":240:402 function delegateCall(address target, bytes memory data)... */\n tag_4:\n tag_11\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_12\n swap2\n swap1\n tag_7\n jump\t// in\n tag_12:\n tag_13\n jump\t// in\n tag_11:\n mload(0x40)\n tag_14\n swap3\n swap2\n swap1\n tag_10\n jump\t// in\n tag_14:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":88:234 function call(address target, bytes memory data)... */\n tag_8:\n /* \"main.sol\":169:173 bool */\n 0x00\n /* \"main.sol\":175:187 bytes memory */\n 0x60\n /* \"main.sol\":210:216 target */\n dup4\n /* \"main.sol\":210:221 target.call */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":222:226 data */\n dup4\n /* \"main.sol\":210:227 target.call(data) */\n mload(0x40)\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup7\n gas\n call\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_20\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_19)\n tag_20:\n 0x60\n swap2\n pop\n tag_19:\n pop\n /* \"main.sol\":203:227 return target.call(data) */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":88:234 function call(address target, bytes memory data)... */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"main.sol\":240:402 function delegateCall(address target, bytes memory data)... */\n tag_13:\n /* \"main.sol\":329:333 bool */\n 0x00\n /* \"main.sol\":335:347 bytes memory */\n 0x60\n /* \"main.sol\":370:376 target */\n dup4\n /* \"main.sol\":370:389 target.delegatecall */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":390:394 data */\n dup4\n /* \"main.sol\":370:395 target.delegatecall(data) */\n mload(0x40)\n tag_22\n swap2\n swap1\n tag_17\n jump\t// in\n tag_22:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n gas\n delegatecall\n swap2\n pop\n pop\n returndatasize\n dup1\n 0x00\n dup2\n eq\n tag_25\n jumpi\n mload(0x40)\n swap2\n pop\n and(add(returndatasize, 0x3f), not(0x1f))\n dup3\n add\n 0x40\n mstore\n returndatasize\n dup3\n mstore\n returndatasize\n 0x00\n 0x20\n dup5\n add\n returndatacopy\n jump(tag_24)\n tag_25:\n 0x60\n swap2\n pop\n tag_24:\n pop\n /* \"main.sol\":363:395 return target.delegatecall(data) */\n swap2\n pop\n swap2\n pop\n /* \"main.sol\":240:402 function delegateCall(address target, bytes memory data)... */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_26:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_27:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_28:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:460 */\n tag_29:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":411:453 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":404:409 */\n dup3\n /* \"#utility.yul\":400:454 */\n and\n /* \"#utility.yul\":389:454 */\n swap1\n pop\n /* \"#utility.yul\":334:460 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":466:562 */\n tag_30:\n /* \"#utility.yul\":503:510 */\n 0x00\n /* \"#utility.yul\":532:556 */\n tag_57\n /* \"#utility.yul\":550:555 */\n dup3\n /* \"#utility.yul\":532:556 */\n tag_29\n jump\t// in\n tag_57:\n /* \"#utility.yul\":521:556 */\n swap1\n pop\n /* \"#utility.yul\":466:562 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":568:690 */\n tag_31:\n /* \"#utility.yul\":641:665 */\n tag_59\n /* \"#utility.yul\":659:664 */\n dup2\n /* \"#utility.yul\":641:665 */\n tag_30\n jump\t// in\n tag_59:\n /* \"#utility.yul\":634:639 */\n dup2\n /* \"#utility.yul\":631:666 */\n eq\n /* \"#utility.yul\":621:684 */\n tag_60\n jumpi\n /* \"#utility.yul\":680:681 */\n 0x00\n /* \"#utility.yul\":677:678 */\n dup1\n /* \"#utility.yul\":670:682 */\n revert\n /* \"#utility.yul\":621:684 */\n tag_60:\n /* \"#utility.yul\":568:690 */\n pop\n jump\t// out\n /* \"#utility.yul\":696:835 */\n tag_32:\n /* \"#utility.yul\":742:747 */\n 0x00\n /* \"#utility.yul\":780:786 */\n dup2\n /* \"#utility.yul\":767:787 */\n calldataload\n /* \"#utility.yul\":758:787 */\n swap1\n pop\n /* \"#utility.yul\":796:829 */\n tag_62\n /* \"#utility.yul\":823:828 */\n dup2\n /* \"#utility.yul\":796:829 */\n tag_31\n jump\t// in\n tag_62:\n /* \"#utility.yul\":696:835 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":841:958 */\n tag_33:\n /* \"#utility.yul\":950:951 */\n 0x00\n /* \"#utility.yul\":947:948 */\n dup1\n /* \"#utility.yul\":940:952 */\n revert\n /* \"#utility.yul\":964:1081 */\n tag_34:\n /* \"#utility.yul\":1073:1074 */\n 0x00\n /* \"#utility.yul\":1070:1071 */\n dup1\n /* \"#utility.yul\":1063:1075 */\n revert\n /* \"#utility.yul\":1087:1189 */\n tag_35:\n /* \"#utility.yul\":1128:1134 */\n 0x00\n /* \"#utility.yul\":1179:1181 */\n 0x1f\n /* \"#utility.yul\":1175:1182 */\n not\n /* \"#utility.yul\":1170:1172 */\n 0x1f\n /* \"#utility.yul\":1163:1168 */\n dup4\n /* \"#utility.yul\":1159:1173 */\n add\n /* \"#utility.yul\":1155:1183 */\n and\n /* \"#utility.yul\":1145:1183 */\n swap1\n pop\n /* \"#utility.yul\":1087:1189 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1195:1375 */\n tag_36:\n /* \"#utility.yul\":1243:1320 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1240:1241 */\n 0x00\n /* \"#utility.yul\":1233:1321 */\n mstore\n /* \"#utility.yul\":1340:1344 */\n 0x41\n /* \"#utility.yul\":1337:1338 */\n 0x04\n /* \"#utility.yul\":1330:1345 */\n mstore\n /* \"#utility.yul\":1364:1368 */\n 0x24\n /* \"#utility.yul\":1361:1362 */\n 0x00\n /* \"#utility.yul\":1354:1369 */\n revert\n /* \"#utility.yul\":1381:1662 */\n tag_37:\n /* \"#utility.yul\":1464:1491 */\n tag_68\n /* \"#utility.yul\":1486:1490 */\n dup3\n /* \"#utility.yul\":1464:1491 */\n tag_35\n jump\t// in\n tag_68:\n /* \"#utility.yul\":1456:1462 */\n dup2\n /* \"#utility.yul\":1452:1492 */\n add\n /* \"#utility.yul\":1594:1600 */\n dup2\n /* \"#utility.yul\":1582:1592 */\n dup2\n /* \"#utility.yul\":1579:1601 */\n lt\n /* \"#utility.yul\":1558:1576 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1546:1556 */\n dup3\n /* \"#utility.yul\":1543:1577 */\n gt\n /* \"#utility.yul\":1540:1602 */\n or\n /* \"#utility.yul\":1537:1625 */\n iszero\n tag_69\n jumpi\n /* \"#utility.yul\":1605:1623 */\n tag_70\n tag_36\n jump\t// in\n tag_70:\n /* \"#utility.yul\":1537:1625 */\n tag_69:\n /* \"#utility.yul\":1645:1655 */\n dup1\n /* \"#utility.yul\":1641:1643 */\n 0x40\n /* \"#utility.yul\":1634:1656 */\n mstore\n /* \"#utility.yul\":1424:1662 */\n pop\n /* \"#utility.yul\":1381:1662 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1668:1797 */\n tag_38:\n /* \"#utility.yul\":1702:1708 */\n 0x00\n /* \"#utility.yul\":1729:1749 */\n tag_72\n tag_26\n jump\t// in\n tag_72:\n /* \"#utility.yul\":1719:1749 */\n swap1\n pop\n /* \"#utility.yul\":1758:1791 */\n tag_73\n /* \"#utility.yul\":1786:1790 */\n dup3\n /* \"#utility.yul\":1778:1784 */\n dup3\n /* \"#utility.yul\":1758:1791 */\n tag_37\n jump\t// in\n tag_73:\n /* \"#utility.yul\":1668:1797 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1803:2110 */\n tag_39:\n /* \"#utility.yul\":1864:1868 */\n 0x00\n /* \"#utility.yul\":1954:1972 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1946:1952 */\n dup3\n /* \"#utility.yul\":1943:1973 */\n gt\n /* \"#utility.yul\":1940:1996 */\n iszero\n tag_75\n jumpi\n /* \"#utility.yul\":1976:1994 */\n tag_76\n tag_36\n jump\t// in\n tag_76:\n /* \"#utility.yul\":1940:1996 */\n tag_75:\n /* \"#utility.yul\":2014:2043 */\n tag_77\n /* \"#utility.yul\":2036:2042 */\n dup3\n /* \"#utility.yul\":2014:2043 */\n tag_35\n jump\t// in\n tag_77:\n /* \"#utility.yul\":2006:2043 */\n swap1\n pop\n /* \"#utility.yul\":2098:2102 */\n 0x20\n /* \"#utility.yul\":2092:2096 */\n dup2\n /* \"#utility.yul\":2088:2103 */\n add\n /* \"#utility.yul\":2080:2103 */\n swap1\n pop\n /* \"#utility.yul\":1803:2110 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2116:2270 */\n tag_40:\n /* \"#utility.yul\":2200:2206 */\n dup3\n /* \"#utility.yul\":2195:2198 */\n dup2\n /* \"#utility.yul\":2190:2193 */\n dup4\n /* \"#utility.yul\":2177:2207 */\n calldatacopy\n /* \"#utility.yul\":2262:2263 */\n 0x00\n /* \"#utility.yul\":2253:2259 */\n dup4\n /* \"#utility.yul\":2248:2251 */\n dup4\n /* \"#utility.yul\":2244:2260 */\n add\n /* \"#utility.yul\":2237:2264 */\n mstore\n /* \"#utility.yul\":2116:2270 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2276:2686 */\n tag_41:\n /* \"#utility.yul\":2353:2358 */\n 0x00\n /* \"#utility.yul\":2378:2443 */\n tag_80\n /* \"#utility.yul\":2394:2442 */\n tag_81\n /* \"#utility.yul\":2435:2441 */\n dup5\n /* \"#utility.yul\":2394:2442 */\n tag_39\n jump\t// in\n tag_81:\n /* \"#utility.yul\":2378:2443 */\n tag_38\n jump\t// in\n tag_80:\n /* \"#utility.yul\":2369:2443 */\n swap1\n pop\n /* \"#utility.yul\":2466:2472 */\n dup3\n /* \"#utility.yul\":2459:2464 */\n dup2\n /* \"#utility.yul\":2452:2473 */\n mstore\n /* \"#utility.yul\":2504:2508 */\n 0x20\n /* \"#utility.yul\":2497:2502 */\n dup2\n /* \"#utility.yul\":2493:2509 */\n add\n /* \"#utility.yul\":2542:2545 */\n dup5\n /* \"#utility.yul\":2533:2539 */\n dup5\n /* \"#utility.yul\":2528:2531 */\n dup5\n /* \"#utility.yul\":2524:2540 */\n add\n /* \"#utility.yul\":2521:2546 */\n gt\n /* \"#utility.yul\":2518:2630 */\n iszero\n tag_82\n jumpi\n /* \"#utility.yul\":2549:2628 */\n tag_83\n tag_34\n jump\t// in\n tag_83:\n /* \"#utility.yul\":2518:2630 */\n tag_82:\n /* \"#utility.yul\":2639:2680 */\n tag_84\n /* \"#utility.yul\":2673:2679 */\n dup5\n /* \"#utility.yul\":2668:2671 */\n dup3\n /* \"#utility.yul\":2663:2666 */\n dup6\n /* \"#utility.yul\":2639:2680 */\n tag_40\n jump\t// in\n tag_84:\n /* \"#utility.yul\":2359:2686 */\n pop\n /* \"#utility.yul\":2276:2686 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2705:3043 */\n tag_42:\n /* \"#utility.yul\":2760:2765 */\n 0x00\n /* \"#utility.yul\":2809:2812 */\n dup3\n /* \"#utility.yul\":2802:2806 */\n 0x1f\n /* \"#utility.yul\":2794:2800 */\n dup4\n /* \"#utility.yul\":2790:2807 */\n add\n /* \"#utility.yul\":2786:2813 */\n slt\n /* \"#utility.yul\":2776:2898 */\n tag_86\n jumpi\n /* \"#utility.yul\":2817:2896 */\n tag_87\n tag_33\n jump\t// in\n tag_87:\n /* \"#utility.yul\":2776:2898 */\n tag_86:\n /* \"#utility.yul\":2934:2940 */\n dup2\n /* \"#utility.yul\":2921:2941 */\n calldataload\n /* \"#utility.yul\":2959:3037 */\n tag_88\n /* \"#utility.yul\":3033:3036 */\n dup5\n /* \"#utility.yul\":3025:3031 */\n dup3\n /* \"#utility.yul\":3018:3022 */\n 0x20\n /* \"#utility.yul\":3010:3016 */\n dup7\n /* \"#utility.yul\":3006:3023 */\n add\n /* \"#utility.yul\":2959:3037 */\n tag_41\n jump\t// in\n tag_88:\n /* \"#utility.yul\":2950:3037 */\n swap2\n pop\n /* \"#utility.yul\":2766:3043 */\n pop\n /* \"#utility.yul\":2705:3043 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3049:3701 */\n tag_7:\n /* \"#utility.yul\":3126:3132 */\n 0x00\n /* \"#utility.yul\":3134:3140 */\n dup1\n /* \"#utility.yul\":3183:3185 */\n 0x40\n /* \"#utility.yul\":3171:3180 */\n dup4\n /* \"#utility.yul\":3162:3169 */\n dup6\n /* \"#utility.yul\":3158:3181 */\n sub\n /* \"#utility.yul\":3154:3186 */\n slt\n /* \"#utility.yul\":3151:3270 */\n iszero\n tag_90\n jumpi\n /* \"#utility.yul\":3189:3268 */\n tag_91\n tag_27\n jump\t// in\n tag_91:\n /* \"#utility.yul\":3151:3270 */\n tag_90:\n /* \"#utility.yul\":3309:3310 */\n 0x00\n /* \"#utility.yul\":3334:3387 */\n tag_92\n /* \"#utility.yul\":3379:3386 */\n dup6\n /* \"#utility.yul\":3370:3376 */\n dup3\n /* \"#utility.yul\":3359:3368 */\n dup7\n /* \"#utility.yul\":3355:3377 */\n add\n /* \"#utility.yul\":3334:3387 */\n tag_32\n jump\t// in\n tag_92:\n /* \"#utility.yul\":3324:3387 */\n swap3\n pop\n /* \"#utility.yul\":3280:3397 */\n pop\n /* \"#utility.yul\":3464:3466 */\n 0x20\n /* \"#utility.yul\":3453:3462 */\n dup4\n /* \"#utility.yul\":3449:3467 */\n add\n /* \"#utility.yul\":3436:3468 */\n calldataload\n /* \"#utility.yul\":3495:3513 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3487:3493 */\n dup2\n /* \"#utility.yul\":3484:3514 */\n gt\n /* \"#utility.yul\":3481:3598 */\n iszero\n tag_93\n jumpi\n /* \"#utility.yul\":3517:3596 */\n tag_94\n tag_28\n jump\t// in\n tag_94:\n /* \"#utility.yul\":3481:3598 */\n tag_93:\n /* \"#utility.yul\":3622:3684 */\n tag_95\n /* \"#utility.yul\":3676:3683 */\n dup6\n /* \"#utility.yul\":3667:3673 */\n dup3\n /* \"#utility.yul\":3656:3665 */\n dup7\n /* \"#utility.yul\":3652:3674 */\n add\n /* \"#utility.yul\":3622:3684 */\n tag_42\n jump\t// in\n tag_95:\n /* \"#utility.yul\":3612:3684 */\n swap2\n pop\n /* \"#utility.yul\":3407:3694 */\n pop\n /* \"#utility.yul\":3049:3701 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3707:3797 */\n tag_43:\n /* \"#utility.yul\":3741:3748 */\n 0x00\n /* \"#utility.yul\":3784:3789 */\n dup2\n /* \"#utility.yul\":3777:3790 */\n iszero\n /* \"#utility.yul\":3770:3791 */\n iszero\n /* \"#utility.yul\":3759:3791 */\n swap1\n pop\n /* \"#utility.yul\":3707:3797 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3803:3912 */\n tag_44:\n /* \"#utility.yul\":3884:3905 */\n tag_98\n /* \"#utility.yul\":3899:3904 */\n dup2\n /* \"#utility.yul\":3884:3905 */\n tag_43\n jump\t// in\n tag_98:\n /* \"#utility.yul\":3879:3882 */\n dup3\n /* \"#utility.yul\":3872:3906 */\n mstore\n /* \"#utility.yul\":3803:3912 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3918:4016 */\n tag_45:\n /* \"#utility.yul\":3969:3975 */\n 0x00\n /* \"#utility.yul\":4003:4008 */\n dup2\n /* \"#utility.yul\":3997:4009 */\n mload\n /* \"#utility.yul\":3987:4009 */\n swap1\n pop\n /* \"#utility.yul\":3918:4016 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4022:4190 */\n tag_46:\n /* \"#utility.yul\":4105:4116 */\n 0x00\n /* \"#utility.yul\":4139:4145 */\n dup3\n /* \"#utility.yul\":4134:4137 */\n dup3\n /* \"#utility.yul\":4127:4146 */\n mstore\n /* \"#utility.yul\":4179:4183 */\n 0x20\n /* \"#utility.yul\":4174:4177 */\n dup3\n /* \"#utility.yul\":4170:4184 */\n add\n /* \"#utility.yul\":4155:4184 */\n swap1\n pop\n /* \"#utility.yul\":4022:4190 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4196:4503 */\n tag_47:\n /* \"#utility.yul\":4264:4265 */\n 0x00\n /* \"#utility.yul\":4274:4387 */\n tag_102:\n /* \"#utility.yul\":4288:4294 */\n dup4\n /* \"#utility.yul\":4285:4286 */\n dup2\n /* \"#utility.yul\":4282:4295 */\n lt\n /* \"#utility.yul\":4274:4387 */\n iszero\n tag_104\n jumpi\n /* \"#utility.yul\":4373:4374 */\n dup1\n /* \"#utility.yul\":4368:4371 */\n dup3\n /* \"#utility.yul\":4364:4375 */\n add\n /* \"#utility.yul\":4358:4376 */\n mload\n /* \"#utility.yul\":4354:4355 */\n dup2\n /* \"#utility.yul\":4349:4352 */\n dup5\n /* \"#utility.yul\":4345:4356 */\n add\n /* \"#utility.yul\":4338:4377 */\n mstore\n /* \"#utility.yul\":4310:4312 */\n 0x20\n /* \"#utility.yul\":4307:4308 */\n dup2\n /* \"#utility.yul\":4303:4313 */\n add\n /* \"#utility.yul\":4298:4313 */\n swap1\n pop\n /* \"#utility.yul\":4274:4387 */\n jump(tag_102)\n tag_104:\n /* \"#utility.yul\":4405:4411 */\n dup4\n /* \"#utility.yul\":4402:4403 */\n dup2\n /* \"#utility.yul\":4399:4412 */\n gt\n /* \"#utility.yul\":4396:4497 */\n iszero\n tag_105\n jumpi\n /* \"#utility.yul\":4485:4486 */\n 0x00\n /* \"#utility.yul\":4476:4482 */\n dup5\n /* \"#utility.yul\":4471:4474 */\n dup5\n /* \"#utility.yul\":4467:4483 */\n add\n /* \"#utility.yul\":4460:4487 */\n mstore\n /* \"#utility.yul\":4396:4497 */\n tag_105:\n /* \"#utility.yul\":4245:4503 */\n pop\n /* \"#utility.yul\":4196:4503 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4509:4869 */\n tag_48:\n /* \"#utility.yul\":4595:4598 */\n 0x00\n /* \"#utility.yul\":4623:4661 */\n tag_107\n /* \"#utility.yul\":4655:4660 */\n dup3\n /* \"#utility.yul\":4623:4661 */\n tag_45\n jump\t// in\n tag_107:\n /* \"#utility.yul\":4677:4747 */\n tag_108\n /* \"#utility.yul\":4740:4746 */\n dup2\n /* \"#utility.yul\":4735:4738 */\n dup6\n /* \"#utility.yul\":4677:4747 */\n tag_46\n jump\t// in\n tag_108:\n /* \"#utility.yul\":4670:4747 */\n swap4\n pop\n /* \"#utility.yul\":4756:4808 */\n tag_109\n /* \"#utility.yul\":4801:4807 */\n dup2\n /* \"#utility.yul\":4796:4799 */\n dup6\n /* \"#utility.yul\":4789:4793 */\n 0x20\n /* \"#utility.yul\":4782:4787 */\n dup7\n /* \"#utility.yul\":4778:4794 */\n add\n /* \"#utility.yul\":4756:4808 */\n tag_47\n jump\t// in\n tag_109:\n /* \"#utility.yul\":4833:4862 */\n tag_110\n /* \"#utility.yul\":4855:4861 */\n dup2\n /* \"#utility.yul\":4833:4862 */\n tag_35\n jump\t// in\n tag_110:\n /* \"#utility.yul\":4828:4831 */\n dup5\n /* \"#utility.yul\":4824:4863 */\n add\n /* \"#utility.yul\":4817:4863 */\n swap2\n pop\n /* \"#utility.yul\":4599:4869 */\n pop\n /* \"#utility.yul\":4509:4869 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4875:5282 */\n tag_10:\n /* \"#utility.yul\":5008:5012 */\n 0x00\n /* \"#utility.yul\":5046:5048 */\n 0x40\n /* \"#utility.yul\":5035:5044 */\n dup3\n /* \"#utility.yul\":5031:5049 */\n add\n /* \"#utility.yul\":5023:5049 */\n swap1\n pop\n /* \"#utility.yul\":5059:5124 */\n tag_112\n /* \"#utility.yul\":5121:5122 */\n 0x00\n /* \"#utility.yul\":5110:5119 */\n dup4\n /* \"#utility.yul\":5106:5123 */\n add\n /* \"#utility.yul\":5097:5103 */\n dup6\n /* \"#utility.yul\":5059:5124 */\n tag_44\n jump\t// in\n tag_112:\n /* \"#utility.yul\":5171:5180 */\n dup2\n /* \"#utility.yul\":5165:5169 */\n dup2\n /* \"#utility.yul\":5161:5181 */\n sub\n /* \"#utility.yul\":5156:5158 */\n 0x20\n /* \"#utility.yul\":5145:5154 */\n dup4\n /* \"#utility.yul\":5141:5159 */\n add\n /* \"#utility.yul\":5134:5182 */\n mstore\n /* \"#utility.yul\":5199:5275 */\n tag_113\n /* \"#utility.yul\":5270:5274 */\n dup2\n /* \"#utility.yul\":5261:5267 */\n dup5\n /* \"#utility.yul\":5199:5275 */\n tag_48\n jump\t// in\n tag_113:\n /* \"#utility.yul\":5191:5275 */\n swap1\n pop\n /* \"#utility.yul\":4875:5282 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5288:5435 */\n tag_49:\n /* \"#utility.yul\":5389:5400 */\n 0x00\n /* \"#utility.yul\":5426:5429 */\n dup2\n /* \"#utility.yul\":5411:5429 */\n swap1\n pop\n /* \"#utility.yul\":5288:5435 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5441:5814 */\n tag_50:\n /* \"#utility.yul\":5545:5548 */\n 0x00\n /* \"#utility.yul\":5573:5611 */\n tag_116\n /* \"#utility.yul\":5605:5610 */\n dup3\n /* \"#utility.yul\":5573:5611 */\n tag_45\n jump\t// in\n tag_116:\n /* \"#utility.yul\":5627:5715 */\n tag_117\n /* \"#utility.yul\":5708:5714 */\n dup2\n /* \"#utility.yul\":5703:5706 */\n dup6\n /* \"#utility.yul\":5627:5715 */\n tag_49\n jump\t// in\n tag_117:\n /* \"#utility.yul\":5620:5715 */\n swap4\n pop\n /* \"#utility.yul\":5724:5776 */\n tag_118\n /* \"#utility.yul\":5769:5775 */\n dup2\n /* \"#utility.yul\":5764:5767 */\n dup6\n /* \"#utility.yul\":5757:5761 */\n 0x20\n /* \"#utility.yul\":5750:5755 */\n dup7\n /* \"#utility.yul\":5746:5762 */\n add\n /* \"#utility.yul\":5724:5776 */\n tag_47\n jump\t// in\n tag_118:\n /* \"#utility.yul\":5801:5807 */\n dup1\n /* \"#utility.yul\":5796:5799 */\n dup5\n /* \"#utility.yul\":5792:5808 */\n add\n /* \"#utility.yul\":5785:5808 */\n swap2\n pop\n /* \"#utility.yul\":5549:5814 */\n pop\n /* \"#utility.yul\":5441:5814 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5820:6091 */\n tag_17:\n /* \"#utility.yul\":5950:5953 */\n 0x00\n /* \"#utility.yul\":5972:6065 */\n tag_120\n /* \"#utility.yul\":6061:6064 */\n dup3\n /* \"#utility.yul\":6052:6058 */\n dup5\n /* \"#utility.yul\":5972:6065 */\n tag_50\n jump\t// in\n tag_120:\n /* \"#utility.yul\":5965:6065 */\n swap2\n pop\n /* \"#utility.yul\":6082:6085 */\n dup2\n /* \"#utility.yul\":6075:6085 */\n swap1\n pop\n /* \"#utility.yul\":5820:6091 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220e291ea20ea0314926b18a49aac9dcca98e78bdf8a6300060ad27cd9704b9aec964736f6c634300080b0033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506104f9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631b8b921d1461003b57806356e7b7aa1461006c575b600080fd5b61005560048036038101906100509190610341565b61009d565b604051610063929190610440565b60405180910390f35b61008660048036038101906100819190610341565b610114565b604051610094929190610440565b60405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516100c691906104ac565b6000604051808303816000865af19150503d8060008114610103576040519150601f19603f3d011682016040523d82523d6000602084013e610108565b606091505b50915091509250929050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161013d91906104ac565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b50915091509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c88261019d565b9050919050565b6101d8816101bd565b81146101e357600080fd5b50565b6000813590506101f5816101cf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61024e82610205565b810181811067ffffffffffffffff8211171561026d5761026c610216565b5b80604052505050565b6000610280610189565b905061028c8282610245565b919050565b600067ffffffffffffffff8211156102ac576102ab610216565b5b6102b582610205565b9050602081019050919050565b82818337600083830152505050565b60006102e46102df84610291565b610276565b905082815260208101848484011115610300576102ff610200565b5b61030b8482856102c2565b509392505050565b600082601f830112610328576103276101fb565b5b81356103388482602086016102d1565b91505092915050565b6000806040838503121561035857610357610193565b5b6000610366858286016101e6565b925050602083013567ffffffffffffffff81111561038757610386610198565b5b61039385828601610313565b9150509250929050565b60008115159050919050565b6103b28161039d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103f25780820151818401526020810190506103d7565b83811115610401576000848401525b50505050565b6000610412826103b8565b61041c81856103c3565b935061042c8185602086016103d4565b61043581610205565b840191505092915050565b600060408201905061045560008301856103a9565b81810360208301526104678184610407565b90509392505050565b600081905092915050565b6000610486826103b8565b6104908185610470565b93506104a08185602086016103d4565b80840191505092915050565b60006104b8828461047b565b91508190509291505056fea264697066735822122064ea7fe738b6b8a7e5236b1fc887bbe7452996ef3db58d2b9f0db3d55483760d64736f6c634300080b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4F9 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B8B921D EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x56E7B7AA EQ PUSH2 0x6C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x63 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x86 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x94 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xC6 SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x103 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x108 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x13D SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x17D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8 DUP3 PUSH2 0x19D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D8 DUP2 PUSH2 0x1BD JUMP JUMPDEST DUP2 EQ PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1F5 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x24E DUP3 PUSH2 0x205 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x26D JUMPI PUSH2 0x26C PUSH2 0x216 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x280 PUSH2 0x189 JUMP JUMPDEST SWAP1 POP PUSH2 0x28C DUP3 DUP3 PUSH2 0x245 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2AC JUMPI PUSH2 0x2AB PUSH2 0x216 JUMP JUMPDEST JUMPDEST PUSH2 0x2B5 DUP3 PUSH2 0x205 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E4 PUSH2 0x2DF DUP5 PUSH2 0x291 JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x300 JUMPI PUSH2 0x2FF PUSH2 0x200 JUMP JUMPDEST JUMPDEST PUSH2 0x30B DUP5 DUP3 DUP6 PUSH2 0x2C2 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x328 JUMPI PUSH2 0x327 PUSH2 0x1FB JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x338 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x358 JUMPI PUSH2 0x357 PUSH2 0x193 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x366 DUP6 DUP3 DUP7 ADD PUSH2 0x1E6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x387 JUMPI PUSH2 0x386 PUSH2 0x198 JUMP JUMPDEST JUMPDEST PUSH2 0x393 DUP6 DUP3 DUP7 ADD PUSH2 0x313 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3B2 DUP2 PUSH2 0x39D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3D7 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x41C DUP2 DUP6 PUSH2 0x3C3 JUMP JUMPDEST SWAP4 POP PUSH2 0x42C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST PUSH2 0x435 DUP2 PUSH2 0x205 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x455 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x3A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x467 DUP2 DUP5 PUSH2 0x407 JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x486 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x490 DUP2 DUP6 PUSH2 0x470 JUMP JUMPDEST SWAP4 POP PUSH2 0x4A0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B8 DUP3 DUP5 PUSH2 0x47B JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0xEA7FE738B6 0xB8 0xA7 0xE5 0x23 PUSH12 0x1FC887BBE7452996EF3DB58D 0x2B SWAP16 0xD 0xB3 0xD5 SLOAD DUP4 PUSH23 0xD64736F6C634300080B00330000000000000000000000 ", - "sourceMap": "45:352:0:-:0;;;;;;;;;;;;;;;;;;;" + "object": "608060405234801561001057600080fd5b506104f9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80631b8b921d1461003b57806356e7b7aa1461006c575b600080fd5b61005560048036038101906100509190610341565b61009d565b604051610063929190610440565b60405180910390f35b61008660048036038101906100819190610341565b610114565b604051610094929190610440565b60405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516100c691906104ac565b6000604051808303816000865af19150503d8060008114610103576040519150601f19603f3d011682016040523d82523d6000602084013e610108565b606091505b50915091509250929050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161013d91906104ac565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b50915091509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c88261019d565b9050919050565b6101d8816101bd565b81146101e357600080fd5b50565b6000813590506101f5816101cf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61024e82610205565b810181811067ffffffffffffffff8211171561026d5761026c610216565b5b80604052505050565b6000610280610189565b905061028c8282610245565b919050565b600067ffffffffffffffff8211156102ac576102ab610216565b5b6102b582610205565b9050602081019050919050565b82818337600083830152505050565b60006102e46102df84610291565b610276565b905082815260208101848484011115610300576102ff610200565b5b61030b8482856102c2565b509392505050565b600082601f830112610328576103276101fb565b5b81356103388482602086016102d1565b91505092915050565b6000806040838503121561035857610357610193565b5b6000610366858286016101e6565b925050602083013567ffffffffffffffff81111561038757610386610198565b5b61039385828601610313565b9150509250929050565b60008115159050919050565b6103b28161039d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103f25780820151818401526020810190506103d7565b83811115610401576000848401525b50505050565b6000610412826103b8565b61041c81856103c3565b935061042c8185602086016103d4565b61043581610205565b840191505092915050565b600060408201905061045560008301856103a9565b81810360208301526104678184610407565b90509392505050565b600081905092915050565b6000610486826103b8565b6104908185610470565b93506104a08185602086016103d4565b80840191505092915050565b60006104b8828461047b565b91508190509291505056fea2646970667358221220e291ea20ea0314926b18a49aac9dcca98e78bdf8a6300060ad27cd9704b9aec964736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4F9 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B8B921D EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x56E7B7AA EQ PUSH2 0x6C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x63 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x86 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x94 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xC6 SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x103 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x108 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x13D SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x17D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8 DUP3 PUSH2 0x19D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D8 DUP2 PUSH2 0x1BD JUMP JUMPDEST DUP2 EQ PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1F5 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x24E DUP3 PUSH2 0x205 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x26D JUMPI PUSH2 0x26C PUSH2 0x216 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x280 PUSH2 0x189 JUMP JUMPDEST SWAP1 POP PUSH2 0x28C DUP3 DUP3 PUSH2 0x245 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2AC JUMPI PUSH2 0x2AB PUSH2 0x216 JUMP JUMPDEST JUMPDEST PUSH2 0x2B5 DUP3 PUSH2 0x205 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E4 PUSH2 0x2DF DUP5 PUSH2 0x291 JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x300 JUMPI PUSH2 0x2FF PUSH2 0x200 JUMP JUMPDEST JUMPDEST PUSH2 0x30B DUP5 DUP3 DUP6 PUSH2 0x2C2 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x328 JUMPI PUSH2 0x327 PUSH2 0x1FB JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x338 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x358 JUMPI PUSH2 0x357 PUSH2 0x193 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x366 DUP6 DUP3 DUP7 ADD PUSH2 0x1E6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x387 JUMPI PUSH2 0x386 PUSH2 0x198 JUMP JUMPDEST JUMPDEST PUSH2 0x393 DUP6 DUP3 DUP7 ADD PUSH2 0x313 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3B2 DUP2 PUSH2 0x39D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3D7 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x41C DUP2 DUP6 PUSH2 0x3C3 JUMP JUMPDEST SWAP4 POP PUSH2 0x42C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST PUSH2 0x435 DUP2 PUSH2 0x205 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x455 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x3A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x467 DUP2 DUP5 PUSH2 0x407 JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x486 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x490 DUP2 DUP6 PUSH2 0x470 JUMP JUMPDEST SWAP4 POP PUSH2 0x4A0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B8 DUP3 DUP5 PUSH2 0x47B JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE2 SWAP2 0xEA KECCAK256 0xEA SUB EQ SWAP3 PUSH12 0x18A49AAC9DCCA98E78BDF8A6 ADDRESS STOP PUSH1 0xAD 0x27 0xCD SWAP8 DIV 0xB9 0xAE 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:337:0:-:0;;;;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "functionDebugData": { @@ -3392,9 +3392,9 @@ ], "immutableReferences": {}, "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c80631b8b921d1461003b57806356e7b7aa1461006c575b600080fd5b61005560048036038101906100509190610341565b61009d565b604051610063929190610440565b60405180910390f35b61008660048036038101906100819190610341565b610114565b604051610094929190610440565b60405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516100c691906104ac565b6000604051808303816000865af19150503d8060008114610103576040519150601f19603f3d011682016040523d82523d6000602084013e610108565b606091505b50915091509250929050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161013d91906104ac565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b50915091509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c88261019d565b9050919050565b6101d8816101bd565b81146101e357600080fd5b50565b6000813590506101f5816101cf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61024e82610205565b810181811067ffffffffffffffff8211171561026d5761026c610216565b5b80604052505050565b6000610280610189565b905061028c8282610245565b919050565b600067ffffffffffffffff8211156102ac576102ab610216565b5b6102b582610205565b9050602081019050919050565b82818337600083830152505050565b60006102e46102df84610291565b610276565b905082815260208101848484011115610300576102ff610200565b5b61030b8482856102c2565b509392505050565b600082601f830112610328576103276101fb565b5b81356103388482602086016102d1565b91505092915050565b6000806040838503121561035857610357610193565b5b6000610366858286016101e6565b925050602083013567ffffffffffffffff81111561038757610386610198565b5b61039385828601610313565b9150509250929050565b60008115159050919050565b6103b28161039d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103f25780820151818401526020810190506103d7565b83811115610401576000848401525b50505050565b6000610412826103b8565b61041c81856103c3565b935061042c8185602086016103d4565b61043581610205565b840191505092915050565b600060408201905061045560008301856103a9565b81810360208301526104678184610407565b90509392505050565b600081905092915050565b6000610486826103b8565b6104908185610470565b93506104a08185602086016103d4565b80840191505092915050565b60006104b8828461047b565b91508190509291505056fea264697066735822122064ea7fe738b6b8a7e5236b1fc887bbe7452996ef3db58d2b9f0db3d55483760d64736f6c634300080b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B8B921D EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x56E7B7AA EQ PUSH2 0x6C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x63 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x86 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x94 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xC6 SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x103 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x108 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x13D SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x17D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8 DUP3 PUSH2 0x19D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D8 DUP2 PUSH2 0x1BD JUMP JUMPDEST DUP2 EQ PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1F5 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x24E DUP3 PUSH2 0x205 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x26D JUMPI PUSH2 0x26C PUSH2 0x216 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x280 PUSH2 0x189 JUMP JUMPDEST SWAP1 POP PUSH2 0x28C DUP3 DUP3 PUSH2 0x245 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2AC JUMPI PUSH2 0x2AB PUSH2 0x216 JUMP JUMPDEST JUMPDEST PUSH2 0x2B5 DUP3 PUSH2 0x205 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E4 PUSH2 0x2DF DUP5 PUSH2 0x291 JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x300 JUMPI PUSH2 0x2FF PUSH2 0x200 JUMP JUMPDEST JUMPDEST PUSH2 0x30B DUP5 DUP3 DUP6 PUSH2 0x2C2 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x328 JUMPI PUSH2 0x327 PUSH2 0x1FB JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x338 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x358 JUMPI PUSH2 0x357 PUSH2 0x193 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x366 DUP6 DUP3 DUP7 ADD PUSH2 0x1E6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x387 JUMPI PUSH2 0x386 PUSH2 0x198 JUMP JUMPDEST JUMPDEST PUSH2 0x393 DUP6 DUP3 DUP7 ADD PUSH2 0x313 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3B2 DUP2 PUSH2 0x39D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3D7 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x41C DUP2 DUP6 PUSH2 0x3C3 JUMP JUMPDEST SWAP4 POP PUSH2 0x42C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST PUSH2 0x435 DUP2 PUSH2 0x205 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x455 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x3A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x467 DUP2 DUP5 PUSH2 0x407 JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x486 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x490 DUP2 DUP6 PUSH2 0x470 JUMP JUMPDEST SWAP4 POP PUSH2 0x4A0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B8 DUP3 DUP5 PUSH2 0x47B JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0xEA7FE738B6 0xB8 0xA7 0xE5 0x23 PUSH12 0x1FC887BBE7452996EF3DB58D 0x2B SWAP16 0xD 0xB3 0xD5 SLOAD DUP4 PUSH23 0xD64736F6C634300080B00330000000000000000000000 ", - "sourceMap": "45:352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;79:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;235:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;79:138;144:4;150:12;187:6;:11;;199:4;187:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;180:24;;;;79:138;;;;;:::o;235:154::-;308:4;314:12;351:6;:19;;371:4;351:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;344:32;;;;235:154;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;964:117;1073:1;1070;1063:12;1087:102;1128:6;1179:2;1175:7;1170:2;1163:5;1159:14;1155:28;1145:38;;1087:102;;;:::o;1195:180::-;1243:77;1240:1;1233:88;1340:4;1337:1;1330:15;1364:4;1361:1;1354:15;1381:281;1464:27;1486:4;1464:27;:::i;:::-;1456:6;1452:40;1594:6;1582:10;1579:22;1558:18;1546:10;1543:34;1540:62;1537:88;;;1605:18;;:::i;:::-;1537:88;1645:10;1641:2;1634:22;1424:238;1381:281;;:::o;1668:129::-;1702:6;1729:20;;:::i;:::-;1719:30;;1758:33;1786:4;1778:6;1758:33;:::i;:::-;1668:129;;;:::o;1803:307::-;1864:4;1954:18;1946:6;1943:30;1940:56;;;1976:18;;:::i;:::-;1940:56;2014:29;2036:6;2014:29;:::i;:::-;2006:37;;2098:4;2092;2088:15;2080:23;;1803:307;;;:::o;2116:154::-;2200:6;2195:3;2190;2177:30;2262:1;2253:6;2248:3;2244:16;2237:27;2116:154;;;:::o;2276:410::-;2353:5;2378:65;2394:48;2435:6;2394:48;:::i;:::-;2378:65;:::i;:::-;2369:74;;2466:6;2459:5;2452:21;2504:4;2497:5;2493:16;2542:3;2533:6;2528:3;2524:16;2521:25;2518:112;;;2549:79;;:::i;:::-;2518:112;2639:41;2673:6;2668:3;2663;2639:41;:::i;:::-;2359:327;2276:410;;;;;:::o;2705:338::-;2760:5;2809:3;2802:4;2794:6;2790:17;2786:27;2776:122;;2817:79;;:::i;:::-;2776:122;2934:6;2921:20;2959:78;3033:3;3025:6;3018:4;3010:6;3006:17;2959:78;:::i;:::-;2950:87;;2766:277;2705:338;;;;:::o;3049:652::-;3126:6;3134;3183:2;3171:9;3162:7;3158:23;3154:32;3151:119;;;3189:79;;:::i;:::-;3151:119;3309:1;3334:53;3379:7;3370:6;3359:9;3355:22;3334:53;:::i;:::-;3324:63;;3280:117;3464:2;3453:9;3449:18;3436:32;3495:18;3487:6;3484:30;3481:117;;;3517:79;;:::i;:::-;3481:117;3622:62;3676:7;3667:6;3656:9;3652:22;3622:62;:::i;:::-;3612:72;;3407:287;3049:652;;;;;:::o;3707:90::-;3741:7;3784:5;3777:13;3770:21;3759:32;;3707:90;;;:::o;3803:109::-;3884:21;3899:5;3884:21;:::i;:::-;3879:3;3872:34;3803:109;;:::o;3918:98::-;3969:6;4003:5;3997:12;3987:22;;3918:98;;;:::o;4022:168::-;4105:11;4139:6;4134:3;4127:19;4179:4;4174:3;4170:14;4155:29;;4022:168;;;;:::o;4196:307::-;4264:1;4274:113;4288:6;4285:1;4282:13;4274:113;;;4373:1;4368:3;4364:11;4358:18;4354:1;4349:3;4345:11;4338:39;4310:2;4307:1;4303:10;4298:15;;4274:113;;;4405:6;4402:1;4399:13;4396:101;;;4485:1;4476:6;4471:3;4467:16;4460:27;4396:101;4245:258;4196:307;;;:::o;4509:360::-;4595:3;4623:38;4655:5;4623:38;:::i;:::-;4677:70;4740:6;4735:3;4677:70;:::i;:::-;4670:77;;4756:52;4801:6;4796:3;4789:4;4782:5;4778:16;4756:52;:::i;:::-;4833:29;4855:6;4833:29;:::i;:::-;4828:3;4824:39;4817:46;;4599:270;4509:360;;;;:::o;4875:407::-;5008:4;5046:2;5035:9;5031:18;5023:26;;5059:65;5121:1;5110:9;5106:17;5097:6;5059:65;:::i;:::-;5171:9;5165:4;5161:20;5156:2;5145:9;5141:18;5134:48;5199:76;5270:4;5261:6;5199:76;:::i;:::-;5191:84;;4875:407;;;;;:::o;5288:147::-;5389:11;5426:3;5411:18;;5288:147;;;;:::o;5441:373::-;5545:3;5573:38;5605:5;5573:38;:::i;:::-;5627:88;5708:6;5703:3;5627:88;:::i;:::-;5620:95;;5724:52;5769:6;5764:3;5757:4;5750:5;5746:16;5724:52;:::i;:::-;5801:6;5796:3;5792:16;5785:23;;5549:265;5441:373;;;;:::o;5820:271::-;5950:3;5972:93;6061:3;6052:6;5972:93;:::i;:::-;5965:100;;6082:3;6075:10;;5820:271;;;;:::o" + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c80631b8b921d1461003b57806356e7b7aa1461006c575b600080fd5b61005560048036038101906100509190610341565b61009d565b604051610063929190610440565b60405180910390f35b61008660048036038101906100819190610341565b610114565b604051610094929190610440565b60405180910390f35b600060608373ffffffffffffffffffffffffffffffffffffffff16836040516100c691906104ac565b6000604051808303816000865af19150503d8060008114610103576040519150601f19603f3d011682016040523d82523d6000602084013e610108565b606091505b50915091509250929050565b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161013d91906104ac565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b50915091509250929050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c88261019d565b9050919050565b6101d8816101bd565b81146101e357600080fd5b50565b6000813590506101f5816101cf565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61024e82610205565b810181811067ffffffffffffffff8211171561026d5761026c610216565b5b80604052505050565b6000610280610189565b905061028c8282610245565b919050565b600067ffffffffffffffff8211156102ac576102ab610216565b5b6102b582610205565b9050602081019050919050565b82818337600083830152505050565b60006102e46102df84610291565b610276565b905082815260208101848484011115610300576102ff610200565b5b61030b8482856102c2565b509392505050565b600082601f830112610328576103276101fb565b5b81356103388482602086016102d1565b91505092915050565b6000806040838503121561035857610357610193565b5b6000610366858286016101e6565b925050602083013567ffffffffffffffff81111561038757610386610198565b5b61039385828601610313565b9150509250929050565b60008115159050919050565b6103b28161039d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156103f25780820151818401526020810190506103d7565b83811115610401576000848401525b50505050565b6000610412826103b8565b61041c81856103c3565b935061042c8185602086016103d4565b61043581610205565b840191505092915050565b600060408201905061045560008301856103a9565b81810360208301526104678184610407565b90509392505050565b600081905092915050565b6000610486826103b8565b6104908185610470565b93506104a08185602086016103d4565b80840191505092915050565b60006104b8828461047b565b91508190509291505056fea2646970667358221220e291ea20ea0314926b18a49aac9dcca98e78bdf8a6300060ad27cd9704b9aec964736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1B8B921D EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x56E7B7AA EQ PUSH2 0x6C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x9D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x63 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x86 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x81 SWAP2 SWAP1 PUSH2 0x341 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x94 SWAP3 SWAP2 SWAP1 PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0xC6 SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x103 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x108 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH1 0x40 MLOAD PUSH2 0x13D SWAP2 SWAP1 PUSH2 0x4AC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x178 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x17D JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1C8 DUP3 PUSH2 0x19D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D8 DUP2 PUSH2 0x1BD JUMP JUMPDEST DUP2 EQ PUSH2 0x1E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1F5 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x24E DUP3 PUSH2 0x205 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x26D JUMPI PUSH2 0x26C PUSH2 0x216 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x280 PUSH2 0x189 JUMP JUMPDEST SWAP1 POP PUSH2 0x28C DUP3 DUP3 PUSH2 0x245 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x2AC JUMPI PUSH2 0x2AB PUSH2 0x216 JUMP JUMPDEST JUMPDEST PUSH2 0x2B5 DUP3 PUSH2 0x205 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E4 PUSH2 0x2DF DUP5 PUSH2 0x291 JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x300 JUMPI PUSH2 0x2FF PUSH2 0x200 JUMP JUMPDEST JUMPDEST PUSH2 0x30B DUP5 DUP3 DUP6 PUSH2 0x2C2 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x328 JUMPI PUSH2 0x327 PUSH2 0x1FB JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x338 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x2D1 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x358 JUMPI PUSH2 0x357 PUSH2 0x193 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x366 DUP6 DUP3 DUP7 ADD PUSH2 0x1E6 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x387 JUMPI PUSH2 0x386 PUSH2 0x198 JUMP JUMPDEST JUMPDEST PUSH2 0x393 DUP6 DUP3 DUP7 ADD PUSH2 0x313 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3B2 DUP2 PUSH2 0x39D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x3F2 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x3D7 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x412 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x41C DUP2 DUP6 PUSH2 0x3C3 JUMP JUMPDEST SWAP4 POP PUSH2 0x42C DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST PUSH2 0x435 DUP2 PUSH2 0x205 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x455 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x3A9 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x467 DUP2 DUP5 PUSH2 0x407 JUMP JUMPDEST SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x486 DUP3 PUSH2 0x3B8 JUMP JUMPDEST PUSH2 0x490 DUP2 DUP6 PUSH2 0x470 JUMP JUMPDEST SWAP4 POP PUSH2 0x4A0 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x3D4 JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4B8 DUP3 DUP5 PUSH2 0x47B JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE2 SWAP2 0xEA KECCAK256 0xEA SUB EQ SWAP3 PUSH12 0x18A49AAC9DCCA98E78BDF8A6 ADDRESS STOP PUSH1 0xAD 0x27 0xCD SWAP8 DIV 0xB9 0xAE 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:337:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;88:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;240:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;88:146;169:4;175:12;210:6;:11;;222:4;210:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;203:24;;;;88:146;;;;;:::o;240:162::-;329:4;335:12;370:6;:19;;390:4;370:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;363:32;;;;240:162;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;964:117;1073:1;1070;1063:12;1087:102;1128:6;1179:2;1175:7;1170:2;1163:5;1159:14;1155:28;1145:38;;1087:102;;;:::o;1195:180::-;1243:77;1240:1;1233:88;1340:4;1337:1;1330:15;1364:4;1361:1;1354:15;1381:281;1464:27;1486:4;1464:27;:::i;:::-;1456:6;1452:40;1594:6;1582:10;1579:22;1558:18;1546:10;1543:34;1540:62;1537:88;;;1605:18;;:::i;:::-;1537:88;1645:10;1641:2;1634:22;1424:238;1381:281;;:::o;1668:129::-;1702:6;1729:20;;:::i;:::-;1719:30;;1758:33;1786:4;1778:6;1758:33;:::i;:::-;1668:129;;;:::o;1803:307::-;1864:4;1954:18;1946:6;1943:30;1940:56;;;1976:18;;:::i;:::-;1940:56;2014:29;2036:6;2014:29;:::i;:::-;2006:37;;2098:4;2092;2088:15;2080:23;;1803:307;;;:::o;2116:154::-;2200:6;2195:3;2190;2177:30;2262:1;2253:6;2248:3;2244:16;2237:27;2116:154;;;:::o;2276:410::-;2353:5;2378:65;2394:48;2435:6;2394:48;:::i;:::-;2378:65;:::i;:::-;2369:74;;2466:6;2459:5;2452:21;2504:4;2497:5;2493:16;2542:3;2533:6;2528:3;2524:16;2521:25;2518:112;;;2549:79;;:::i;:::-;2518:112;2639:41;2673:6;2668:3;2663;2639:41;:::i;:::-;2359:327;2276:410;;;;;:::o;2705:338::-;2760:5;2809:3;2802:4;2794:6;2790:17;2786:27;2776:122;;2817:79;;:::i;:::-;2776:122;2934:6;2921:20;2959:78;3033:3;3025:6;3018:4;3010:6;3006:17;2959:78;:::i;:::-;2950:87;;2766:277;2705:338;;;;:::o;3049:652::-;3126:6;3134;3183:2;3171:9;3162:7;3158:23;3154:32;3151:119;;;3189:79;;:::i;:::-;3151:119;3309:1;3334:53;3379:7;3370:6;3359:9;3355:22;3334:53;:::i;:::-;3324:63;;3280:117;3464:2;3453:9;3449:18;3436:32;3495:18;3487:6;3484:30;3481:117;;;3517:79;;:::i;:::-;3481:117;3622:62;3676:7;3667:6;3656:9;3652:22;3622:62;:::i;:::-;3612:72;;3407:287;3049:652;;;;;:::o;3707:90::-;3741:7;3784:5;3777:13;3770:21;3759:32;;3707:90;;;:::o;3803:109::-;3884:21;3899:5;3884:21;:::i;:::-;3879:3;3872:34;3803:109;;:::o;3918:98::-;3969:6;4003:5;3997:12;3987:22;;3918:98;;;:::o;4022:168::-;4105:11;4139:6;4134:3;4127:19;4179:4;4174:3;4170:14;4155:29;;4022:168;;;;:::o;4196:307::-;4264:1;4274:113;4288:6;4285:1;4282:13;4274:113;;;4373:1;4368:3;4364:11;4358:18;4354:1;4349:3;4345:11;4338:39;4310:2;4307:1;4303:10;4298:15;;4274:113;;;4405:6;4402:1;4399:13;4396:101;;;4485:1;4476:6;4471:3;4467:16;4460:27;4396:101;4245:258;4196:307;;;:::o;4509:360::-;4595:3;4623:38;4655:5;4623:38;:::i;:::-;4677:70;4740:6;4735:3;4677:70;:::i;:::-;4670:77;;4756:52;4801:6;4796:3;4789:4;4782:5;4778:16;4756:52;:::i;:::-;4833:29;4855:6;4833:29;:::i;:::-;4828:3;4824:39;4817:46;;4599:270;4509:360;;;;:::o;4875:407::-;5008:4;5046:2;5035:9;5031:18;5023:26;;5059:65;5121:1;5110:9;5106:17;5097:6;5059:65;:::i;:::-;5171:9;5165:4;5161:20;5156:2;5145:9;5141:18;5134:48;5199:76;5270:4;5261:6;5199:76;:::i;:::-;5191:84;;4875:407;;;;;:::o;5288:147::-;5389:11;5426:3;5411:18;;5288:147;;;;:::o;5441:373::-;5545:3;5573:38;5605:5;5573:38;:::i;:::-;5627:88;5708:6;5703:3;5627:88;:::i;:::-;5620:95;;5724:52;5769:6;5764:3;5757:4;5750:5;5746:16;5724:52;:::i;:::-;5801:6;5796:3;5792:16;5785:23;;5549:265;5441:373;;;;:::o;5820:271::-;5950:3;5972:93;6061:3;6052:6;5972:93;:::i;:::-;5965:100;;6082:3;6075:10;;5820:271;;;;:::o" }, "gasEstimates": { "creation": { @@ -3410,976 +3410,976 @@ "legacyAssembly": { ".code": [ { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 45, "end": 397, "name": "MSTORE", "source": 0 }, - { "begin": 45, "end": 397, "name": "CALLVALUE", "source": 0 }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 397, "name": "ISZERO", "source": 0 }, + { "begin": 67, "end": 404, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 404, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "ISZERO", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 45, "end": 397, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 404, "name": "JUMPI", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 397, "name": "REVERT", "source": 0 }, - { "begin": 45, "end": 397, "name": "tag", "source": 0, "value": "1" }, - { "begin": 45, "end": 397, "name": "JUMPDEST", "source": 0 }, - { "begin": 45, "end": 397, "name": "POP", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 404, "name": "tag", "source": 0, "value": "1" }, + { "begin": 67, "end": 404, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 404, "name": "POP", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 45, "end": 397, "name": "CODECOPY", "source": 0 }, + { "begin": 67, "end": 404, "name": "CODECOPY", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 45, "end": 397, "name": "RETURN", "source": 0 } + { "begin": 67, "end": 404, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a264697066735822122064ea7fe738b6b8a7e5236b1fc887bbe7452996ef3db58d2b9f0db3d55483760d64736f6c634300080b0033", + ".auxdata": "a2646970667358221220e291ea20ea0314926b18a49aac9dcca98e78bdf8a6300060ad27cd9704b9aec964736f6c634300080b0033", ".code": [ { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 45, "end": 397, "name": "MSTORE", "source": 0 }, - { "begin": 45, "end": 397, "name": "CALLVALUE", "source": 0 }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 397, "name": "ISZERO", "source": 0 }, + { "begin": 67, "end": 404, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 404, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "ISZERO", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 45, "end": 397, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 404, "name": "JUMPI", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 397, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "REVERT", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "tag", "source": 0, "value": "1" }, - { "begin": 45, "end": 397, "name": "JUMPDEST", "source": 0 }, - { "begin": 45, "end": 397, "name": "POP", "source": 0 }, + { "begin": 67, "end": 404, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 404, "name": "POP", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 45, "end": 397, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 45, "end": 397, "name": "LT", "source": 0 }, + { "begin": 67, "end": 404, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 404, "name": "LT", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 45, "end": 397, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 404, "name": "JUMPI", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 45, "end": 397, "name": "CALLDATALOAD", "source": 0 }, + { "begin": 67, "end": 404, "name": "CALLDATALOAD", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 45, "end": 397, "name": "SHR", "source": 0 }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "1B8B921D" }, - { "begin": 45, "end": 397, "name": "EQ", "source": 0 }, + { "begin": 67, "end": 404, "name": "EQ", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH [tag]", "source": 0, "value": "3" }, - { "begin": 45, "end": 397, "name": "JUMPI", "source": 0 }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "56E7B7AA" }, - { "begin": 45, "end": 397, "name": "EQ", "source": 0 }, + { "begin": 67, "end": 404, "name": "EQ", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH [tag]", "source": 0, "value": "4" }, - { "begin": 45, "end": 397, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 404, "name": "JUMPI", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "tag", "source": 0, "value": "2" }, - { "begin": 45, "end": 397, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 404, "name": "JUMPDEST", "source": 0 }, { - "begin": 45, - "end": 397, + "begin": 67, + "end": 404, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 45, "end": 397, "name": "DUP1", "source": 0 }, - { "begin": 45, "end": 397, "name": "REVERT", "source": 0 }, + { "begin": 67, "end": 404, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 404, "name": "REVERT", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "tag", "source": 0, "value": "3" }, - { "begin": 79, "end": 217, "name": "JUMPDEST", "source": 0 }, + { "begin": 88, "end": 234, "name": "JUMPDEST", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH [tag]", "source": 0, "value": "5" }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 79, "end": 217, "name": "DUP1", "source": 0 }, - { "begin": 79, "end": 217, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 79, "end": 217, "name": "SUB", "source": 0 }, - { "begin": 79, "end": 217, "name": "DUP2", "source": 0 }, - { "begin": 79, "end": 217, "name": "ADD", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP1", "source": 0 }, + { "begin": 88, "end": 234, "name": "DUP1", "source": 0 }, + { "begin": 88, "end": 234, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 88, "end": 234, "name": "SUB", "source": 0 }, + { "begin": 88, "end": 234, "name": "DUP2", "source": 0 }, + { "begin": 88, "end": 234, "name": "ADD", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP1", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH [tag]", "source": 0, "value": "6" }, - { "begin": 79, "end": 217, "name": "SWAP2", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP1", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP2", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP1", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH [tag]", "source": 0, "value": "7" }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "tag", "source": 0, "value": "6" }, - { "begin": 79, "end": 217, "name": "JUMPDEST", "source": 0 }, + { "begin": 88, "end": 234, "name": "JUMPDEST", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH [tag]", "source": 0, "value": "8" }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "tag", "source": 0, "value": "5" }, - { "begin": 79, "end": 217, "name": "JUMPDEST", "source": 0 }, + { "begin": 88, "end": 234, "name": "JUMPDEST", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 79, "end": 217, "name": "MLOAD", "source": 0 }, + { "begin": 88, "end": 234, "name": "MLOAD", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH [tag]", "source": 0, "value": "9" }, - { "begin": 79, "end": 217, "name": "SWAP3", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP2", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP1", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP3", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP2", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP1", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH [tag]", "source": 0, "value": "10" }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "tag", "source": 0, "value": "9" }, - { "begin": 79, "end": 217, "name": "JUMPDEST", "source": 0 }, + { "begin": 88, "end": 234, "name": "JUMPDEST", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 79, "end": 217, "name": "MLOAD", "source": 0 }, - { "begin": 79, "end": 217, "name": "DUP1", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP2", "source": 0 }, - { "begin": 79, "end": 217, "name": "SUB", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP1", "source": 0 }, - { "begin": 79, "end": 217, "name": "RETURN", "source": 0 }, + { "begin": 88, "end": 234, "name": "MLOAD", "source": 0 }, + { "begin": 88, "end": 234, "name": "DUP1", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP2", "source": 0 }, + { "begin": 88, "end": 234, "name": "SUB", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP1", "source": 0 }, + { "begin": 88, "end": 234, "name": "RETURN", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "tag", "source": 0, "value": "4" }, - { "begin": 235, "end": 389, "name": "JUMPDEST", "source": 0 }, + { "begin": 240, "end": 402, "name": "JUMPDEST", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH [tag]", "source": 0, "value": "11" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 235, "end": 389, "name": "DUP1", "source": 0 }, - { "begin": 235, "end": 389, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 235, "end": 389, "name": "SUB", "source": 0 }, - { "begin": 235, "end": 389, "name": "DUP2", "source": 0 }, - { "begin": 235, "end": 389, "name": "ADD", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP1", "source": 0 }, + { "begin": 240, "end": 402, "name": "DUP1", "source": 0 }, + { "begin": 240, "end": 402, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 240, "end": 402, "name": "SUB", "source": 0 }, + { "begin": 240, "end": 402, "name": "DUP2", "source": 0 }, + { "begin": 240, "end": 402, "name": "ADD", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP1", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH [tag]", "source": 0, "value": "12" }, - { "begin": 235, "end": 389, "name": "SWAP2", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP1", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP2", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP1", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH [tag]", "source": 0, "value": "7" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "tag", "source": 0, "value": "12" }, - { "begin": 235, "end": 389, "name": "JUMPDEST", "source": 0 }, + { "begin": 240, "end": 402, "name": "JUMPDEST", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH [tag]", "source": 0, "value": "13" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "tag", "source": 0, "value": "11" }, - { "begin": 235, "end": 389, "name": "JUMPDEST", "source": 0 }, + { "begin": 240, "end": 402, "name": "JUMPDEST", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 235, "end": 389, "name": "MLOAD", "source": 0 }, + { "begin": 240, "end": 402, "name": "MLOAD", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH [tag]", "source": 0, "value": "14" }, - { "begin": 235, "end": 389, "name": "SWAP3", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP2", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP1", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP3", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP2", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP1", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH [tag]", "source": 0, "value": "10" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "tag", "source": 0, "value": "14" }, - { "begin": 235, "end": 389, "name": "JUMPDEST", "source": 0 }, + { "begin": 240, "end": 402, "name": "JUMPDEST", "source": 0 }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 235, "end": 389, "name": "MLOAD", "source": 0 }, - { "begin": 235, "end": 389, "name": "DUP1", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP2", "source": 0 }, - { "begin": 235, "end": 389, "name": "SUB", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP1", "source": 0 }, - { "begin": 235, "end": 389, "name": "RETURN", "source": 0 }, + { "begin": 240, "end": 402, "name": "MLOAD", "source": 0 }, + { "begin": 240, "end": 402, "name": "DUP1", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP2", "source": 0 }, + { "begin": 240, "end": 402, "name": "SUB", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP1", "source": 0 }, + { "begin": 240, "end": 402, "name": "RETURN", "source": 0 }, { - "begin": 79, - "end": 217, + "begin": 88, + "end": 234, "name": "tag", "source": 0, "value": "8" }, - { "begin": 79, "end": 217, "name": "JUMPDEST", "source": 0 }, + { "begin": 88, "end": 234, "name": "JUMPDEST", "source": 0 }, { - "begin": 144, - "end": 148, + "begin": 169, + "end": 173, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 150, - "end": 162, + "begin": 175, + "end": 187, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 187, "end": 193, "name": "DUP4", "source": 0 }, + { "begin": 210, "end": 216, "name": "DUP4", "source": 0 }, { - "begin": 187, - "end": 198, + "begin": 210, + "end": 221, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 187, "end": 198, "name": "AND", "source": 0 }, - { "begin": 199, "end": 203, "name": "DUP4", "source": 0 }, + { "begin": 210, "end": 221, "name": "AND", "source": 0 }, + { "begin": 222, "end": 226, "name": "DUP4", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 187, "end": 204, "name": "MLOAD", "source": 0 }, + { "begin": 210, "end": 227, "name": "MLOAD", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH [tag]", "source": 0, "value": "16" }, - { "begin": 187, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 187, "end": 204, "name": "SWAP1", "source": 0 }, + { "begin": 210, "end": 227, "name": "SWAP2", "source": 0 }, + { "begin": 210, "end": 227, "name": "SWAP1", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH [tag]", "source": 0, "value": "17" }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "tag", "source": 0, "value": "16" }, - { "begin": 187, "end": 204, "name": "JUMPDEST", "source": 0 }, + { "begin": 210, "end": 227, "name": "JUMPDEST", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 187, "end": 204, "name": "MLOAD", "source": 0 }, - { "begin": 187, "end": 204, "name": "DUP1", "source": 0 }, - { "begin": 187, "end": 204, "name": "DUP4", "source": 0 }, - { "begin": 187, "end": 204, "name": "SUB", "source": 0 }, - { "begin": 187, "end": 204, "name": "DUP2", "source": 0 }, + { "begin": 210, "end": 227, "name": "MLOAD", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP1", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP4", "source": 0 }, + { "begin": 210, "end": 227, "name": "SUB", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP2", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 187, "end": 204, "name": "DUP7", "source": 0 }, - { "begin": 187, "end": 204, "name": "GAS", "source": 0 }, - { "begin": 187, "end": 204, "name": "CALL", "source": 0 }, - { "begin": 187, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 187, "end": 204, "name": "POP", "source": 0 }, - { "begin": 187, "end": 204, "name": "POP", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP7", "source": 0 }, + { "begin": 210, "end": 227, "name": "GAS", "source": 0 }, + { "begin": 210, "end": 227, "name": "CALL", "source": 0 }, + { "begin": 210, "end": 227, "name": "SWAP2", "source": 0 }, + { "begin": 210, "end": 227, "name": "POP", "source": 0 }, + { "begin": 210, "end": 227, "name": "POP", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 187, "end": 204, "name": "DUP1", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP1", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 187, "end": 204, "name": "DUP2", "source": 0 }, - { "begin": 187, "end": 204, "name": "EQ", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP2", "source": 0 }, + { "begin": 210, "end": 227, "name": "EQ", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH [tag]", "source": 0, "value": "20" }, - { "begin": 187, "end": 204, "name": "JUMPI", "source": 0 }, + { "begin": 210, "end": 227, "name": "JUMPI", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 187, "end": 204, "name": "MLOAD", "source": 0 }, - { "begin": 187, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 187, "end": 204, "name": "POP", "source": 0 }, + { "begin": 210, "end": 227, "name": "MLOAD", "source": 0 }, + { "begin": 210, "end": 227, "name": "SWAP2", "source": 0 }, + { "begin": 210, "end": 227, "name": "POP", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 187, "end": 204, "name": "NOT", "source": 0 }, + { "begin": 210, "end": 227, "name": "NOT", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 187, "end": 204, "name": "ADD", "source": 0 }, - { "begin": 187, "end": 204, "name": "AND", "source": 0 }, - { "begin": 187, "end": 204, "name": "DUP3", "source": 0 }, - { "begin": 187, "end": 204, "name": "ADD", "source": 0 }, + { "begin": 210, "end": 227, "name": "ADD", "source": 0 }, + { "begin": 210, "end": 227, "name": "AND", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP3", "source": 0 }, + { "begin": 210, "end": 227, "name": "ADD", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 187, "end": 204, "name": "MSTORE", "source": 0 }, + { "begin": 210, "end": 227, "name": "MSTORE", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 187, "end": 204, "name": "DUP3", "source": 0 }, - { "begin": 187, "end": 204, "name": "MSTORE", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP3", "source": 0 }, + { "begin": 210, "end": 227, "name": "MSTORE", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 187, "end": 204, "name": "DUP5", "source": 0 }, - { "begin": 187, "end": 204, "name": "ADD", "source": 0 }, + { "begin": 210, "end": 227, "name": "DUP5", "source": 0 }, + { "begin": 210, "end": 227, "name": "ADD", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH [tag]", "source": 0, "value": "19" }, - { "begin": 187, "end": 204, "name": "JUMP", "source": 0 }, + { "begin": 210, "end": 227, "name": "JUMP", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "tag", "source": 0, "value": "20" }, - { "begin": 187, "end": 204, "name": "JUMPDEST", "source": 0 }, + { "begin": 210, "end": 227, "name": "JUMPDEST", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 187, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 187, "end": 204, "name": "POP", "source": 0 }, + { "begin": 210, "end": 227, "name": "SWAP2", "source": 0 }, + { "begin": 210, "end": 227, "name": "POP", "source": 0 }, { - "begin": 187, - "end": 204, + "begin": 210, + "end": 227, "name": "tag", "source": 0, "value": "19" }, - { "begin": 187, "end": 204, "name": "JUMPDEST", "source": 0 }, - { "begin": 187, "end": 204, "name": "POP", "source": 0 }, - { "begin": 180, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 180, "end": 204, "name": "POP", "source": 0 }, - { "begin": 180, "end": 204, "name": "SWAP2", "source": 0 }, - { "begin": 180, "end": 204, "name": "POP", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP3", "source": 0 }, - { "begin": 79, "end": 217, "name": "POP", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP3", "source": 0 }, - { "begin": 79, "end": 217, "name": "SWAP1", "source": 0 }, - { "begin": 79, "end": 217, "name": "POP", "source": 0 }, - { - "begin": 79, - "end": 217, + { "begin": 210, "end": 227, "name": "JUMPDEST", "source": 0 }, + { "begin": 210, "end": 227, "name": "POP", "source": 0 }, + { "begin": 203, "end": 227, "name": "SWAP2", "source": 0 }, + { "begin": 203, "end": 227, "name": "POP", "source": 0 }, + { "begin": 203, "end": 227, "name": "SWAP2", "source": 0 }, + { "begin": 203, "end": 227, "name": "POP", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP3", "source": 0 }, + { "begin": 88, "end": 234, "name": "POP", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP3", "source": 0 }, + { "begin": 88, "end": 234, "name": "SWAP1", "source": 0 }, + { "begin": 88, "end": 234, "name": "POP", "source": 0 }, + { + "begin": 88, + "end": 234, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 235, - "end": 389, + "begin": 240, + "end": 402, "name": "tag", "source": 0, "value": "13" }, - { "begin": 235, "end": 389, "name": "JUMPDEST", "source": 0 }, + { "begin": 240, "end": 402, "name": "JUMPDEST", "source": 0 }, { - "begin": 308, - "end": 312, + "begin": 329, + "end": 333, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 314, - "end": 326, + "begin": 335, + "end": 347, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 351, "end": 357, "name": "DUP4", "source": 0 }, + { "begin": 370, "end": 376, "name": "DUP4", "source": 0 }, { - "begin": 351, - "end": 370, + "begin": 370, + "end": 389, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 351, "end": 370, "name": "AND", "source": 0 }, - { "begin": 371, "end": 375, "name": "DUP4", "source": 0 }, + { "begin": 370, "end": 389, "name": "AND", "source": 0 }, + { "begin": 390, "end": 394, "name": "DUP4", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 351, "end": 376, "name": "MLOAD", "source": 0 }, + { "begin": 370, "end": 395, "name": "MLOAD", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH [tag]", "source": 0, "value": "22" }, - { "begin": 351, "end": 376, "name": "SWAP2", "source": 0 }, - { "begin": 351, "end": 376, "name": "SWAP1", "source": 0 }, + { "begin": 370, "end": 395, "name": "SWAP2", "source": 0 }, + { "begin": 370, "end": 395, "name": "SWAP1", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH [tag]", "source": 0, "value": "17" }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "tag", "source": 0, "value": "22" }, - { "begin": 351, "end": 376, "name": "JUMPDEST", "source": 0 }, + { "begin": 370, "end": 395, "name": "JUMPDEST", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 351, "end": 376, "name": "MLOAD", "source": 0 }, - { "begin": 351, "end": 376, "name": "DUP1", "source": 0 }, - { "begin": 351, "end": 376, "name": "DUP4", "source": 0 }, - { "begin": 351, "end": 376, "name": "SUB", "source": 0 }, - { "begin": 351, "end": 376, "name": "DUP2", "source": 0 }, - { "begin": 351, "end": 376, "name": "DUP6", "source": 0 }, - { "begin": 351, "end": 376, "name": "GAS", "source": 0 }, - { "begin": 351, "end": 376, "name": "DELEGATECALL", "source": 0 }, - { "begin": 351, "end": 376, "name": "SWAP2", "source": 0 }, - { "begin": 351, "end": 376, "name": "POP", "source": 0 }, - { "begin": 351, "end": 376, "name": "POP", "source": 0 }, - { - "begin": 351, - "end": 376, + { "begin": 370, "end": 395, "name": "MLOAD", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP1", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP4", "source": 0 }, + { "begin": 370, "end": 395, "name": "SUB", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP2", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP6", "source": 0 }, + { "begin": 370, "end": 395, "name": "GAS", "source": 0 }, + { "begin": 370, "end": 395, "name": "DELEGATECALL", "source": 0 }, + { "begin": 370, "end": 395, "name": "SWAP2", "source": 0 }, + { "begin": 370, "end": 395, "name": "POP", "source": 0 }, + { "begin": 370, "end": 395, "name": "POP", "source": 0 }, + { + "begin": 370, + "end": 395, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 351, "end": 376, "name": "DUP1", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP1", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 351, "end": 376, "name": "DUP2", "source": 0 }, - { "begin": 351, "end": 376, "name": "EQ", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP2", "source": 0 }, + { "begin": 370, "end": 395, "name": "EQ", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH [tag]", "source": 0, "value": "25" }, - { "begin": 351, "end": 376, "name": "JUMPI", "source": 0 }, + { "begin": 370, "end": 395, "name": "JUMPI", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 351, "end": 376, "name": "MLOAD", "source": 0 }, - { "begin": 351, "end": 376, "name": "SWAP2", "source": 0 }, - { "begin": 351, "end": 376, "name": "POP", "source": 0 }, + { "begin": 370, "end": 395, "name": "MLOAD", "source": 0 }, + { "begin": 370, "end": 395, "name": "SWAP2", "source": 0 }, + { "begin": 370, "end": 395, "name": "POP", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "1F" }, - { "begin": 351, "end": 376, "name": "NOT", "source": 0 }, + { "begin": 370, "end": 395, "name": "NOT", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "3F" }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 351, "end": 376, "name": "ADD", "source": 0 }, - { "begin": 351, "end": 376, "name": "AND", "source": 0 }, - { "begin": 351, "end": 376, "name": "DUP3", "source": 0 }, - { "begin": 351, "end": 376, "name": "ADD", "source": 0 }, + { "begin": 370, "end": 395, "name": "ADD", "source": 0 }, + { "begin": 370, "end": 395, "name": "AND", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP3", "source": 0 }, + { "begin": 370, "end": 395, "name": "ADD", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 351, "end": 376, "name": "MSTORE", "source": 0 }, + { "begin": 370, "end": 395, "name": "MSTORE", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "RETURNDATASIZE", "source": 0 }, - { "begin": 351, "end": 376, "name": "DUP3", "source": 0 }, - { "begin": 351, "end": 376, "name": "MSTORE", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP3", "source": 0 }, + { "begin": 370, "end": 395, "name": "MSTORE", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 351, "end": 376, "name": "DUP5", "source": 0 }, - { "begin": 351, "end": 376, "name": "ADD", "source": 0 }, + { "begin": 370, "end": 395, "name": "DUP5", "source": 0 }, + { "begin": 370, "end": 395, "name": "ADD", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH [tag]", "source": 0, "value": "24" }, - { "begin": 351, "end": 376, "name": "JUMP", "source": 0 }, + { "begin": 370, "end": 395, "name": "JUMP", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "tag", "source": 0, "value": "25" }, - { "begin": 351, "end": 376, "name": "JUMPDEST", "source": 0 }, + { "begin": 370, "end": 395, "name": "JUMPDEST", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "PUSH", "source": 0, "value": "60" }, - { "begin": 351, "end": 376, "name": "SWAP2", "source": 0 }, - { "begin": 351, "end": 376, "name": "POP", "source": 0 }, + { "begin": 370, "end": 395, "name": "SWAP2", "source": 0 }, + { "begin": 370, "end": 395, "name": "POP", "source": 0 }, { - "begin": 351, - "end": 376, + "begin": 370, + "end": 395, "name": "tag", "source": 0, "value": "24" }, - { "begin": 351, "end": 376, "name": "JUMPDEST", "source": 0 }, - { "begin": 351, "end": 376, "name": "POP", "source": 0 }, - { "begin": 344, "end": 376, "name": "SWAP2", "source": 0 }, - { "begin": 344, "end": 376, "name": "POP", "source": 0 }, - { "begin": 344, "end": 376, "name": "SWAP2", "source": 0 }, - { "begin": 344, "end": 376, "name": "POP", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP3", "source": 0 }, - { "begin": 235, "end": 389, "name": "POP", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP3", "source": 0 }, - { "begin": 235, "end": 389, "name": "SWAP1", "source": 0 }, - { "begin": 235, "end": 389, "name": "POP", "source": 0 }, - { - "begin": 235, - "end": 389, + { "begin": 370, "end": 395, "name": "JUMPDEST", "source": 0 }, + { "begin": 370, "end": 395, "name": "POP", "source": 0 }, + { "begin": 363, "end": 395, "name": "SWAP2", "source": 0 }, + { "begin": 363, "end": 395, "name": "POP", "source": 0 }, + { "begin": 363, "end": 395, "name": "SWAP2", "source": 0 }, + { "begin": 363, "end": 395, "name": "POP", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP3", "source": 0 }, + { "begin": 240, "end": 402, "name": "POP", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP3", "source": 0 }, + { "begin": 240, "end": 402, "name": "SWAP1", "source": 0 }, + { "begin": 240, "end": 402, "name": "POP", "source": 0 }, + { + "begin": 240, + "end": 402, "name": "JUMP", "source": 0, "value": "[out]" @@ -6508,9 +6508,9 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"delegateCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestCallList\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x43daccbea74caafee6dce0b21326a45f3a89d2b1efa67e0d71e18f2fc0da1d7f\",\"urls\":[\"bzz-raw://ad80b4cb1b01fa0dc896e01e60262904b6d5fece289962befc50f089fb30fabf\",\"dweb:/ipfs/QmWVMwKEiKXkGu1q2VS4faaHYVZ4JtakGt4jsQM2cbjmDY\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"delegateCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Proxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xdc4f5d9117a006293344c165e88edde470118ae019efed41c8d9d988123cbe6d\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2cb86d2a74fedae9edad4aa90e69a84ed01416f7c014b0a3f9810af0404460c9\",\"dweb:/ipfs/QmbzZjbgFVk4Z9Unj8wJzouYAp4TeWiPfFw9Th8NZfijQ4\"]}},\"version\":1}", "storageLayout": { "storage": [], "types": null }, "userdoc": { "kind": "user", "methods": {}, "version": 1 } }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestCallList {\n function call(address target, bytes memory data) public returns (bool, bytes memory) {\n return target.call(data);\n }\n \n function delegateCall(address target, bytes memory data) public returns (bool, bytes memory) {\n return target.delegatecall(data);\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract Proxy {\n function call(address target, bytes memory data)\n public\n returns (bool, bytes memory)\n {\n return target.call(data);\n }\n\n function delegateCall(address target, bytes memory data)\n public\n returns (bool, bytes memory)\n {\n return target.delegatecall(data);\n }\n}\n" } diff --git a/tests/contracts/compiled/Randomness.json b/tests/contracts/compiled/Randomness.json new file mode 100644 index 0000000000..d8e1901b11 --- /dev/null +++ b/tests/contracts/compiled/Randomness.json @@ -0,0 +1,324 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "FulFillmentFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "FulFillmentSucceeded", + "type": "event" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" } + ], + "name": "fulfillRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" } + ], + "name": "getRequest", + "outputs": [ + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { + "internalType": "address", + "name": "refundAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "contractAddress", + "type": "address" + }, + { "internalType": "uint256", "name": "fee", "type": "uint256" }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { + "internalType": "uint32", + "name": "numWords", + "type": "uint32" + }, + { + "internalType": "enum Randomness.RandomnessSource", + "name": "randomnessSource", + "type": "uint8" + }, + { + "internalType": "uint32", + "name": "fulfillmentBlock", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "fulfillmentEpochIndex", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "expirationBlock", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "expirationEpochIndex", + "type": "uint32" + }, + { + "internalType": "enum Randomness.RequestStatus", + "name": "status", + "type": "uint8" + } + ], + "internalType": "struct Randomness.Request", + "name": "request", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" } + ], + "name": "getRequestStatus", + "outputs": [ + { + "internalType": "enum Randomness.RequestStatus", + "name": "status", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" }, + { + "internalType": "uint256", + "name": "feeIncrease", + "type": "uint256" + } + ], + "name": "increaseRequestFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" } + ], + "name": "purgeExpiredRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "relayEpochIndex", + "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "refundAddress", + "type": "address" + }, + { "internalType": "uint256", "name": "fee", "type": "uint256" }, + { "internalType": "uint64", "name": "gasLimit", "type": "uint64" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint8", "name": "numWords", "type": "uint8" }, + { "internalType": "uint64", "name": "delay", "type": "uint64" } + ], + "name": "requestLocalVRFRandomWords", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "refundAddress", + "type": "address" + }, + { "internalType": "uint256", "name": "fee", "type": "uint256" }, + { "internalType": "uint64", "name": "gasLimit", "type": "uint64" }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "uint8", "name": "numWords", "type": "uint8" } + ], + "name": "requestRelayBabeEpochRandomWords", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requiredDeposit", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "fulfillRequest(uint256)": { + "details": "fulFill the request which will call the contract method \"fulfillRandomWords\"Fees of the caller are refunded if the request is fulfillable", + "params": { + "requestId": "Request to be fulfilled (must be < 2**64) Selector: 9a91eb0d" + } + }, + "getRequest(uint256)": { + "params": { + "requestId": "The id of the request to check (must be < 2**64)" + }, + "returns": { "request": "The request Selector: c58343ef" } + }, + "getRequestStatus(uint256)": { + "params": { + "requestId": "The id of the request to check (must be < 2**64)" + }, + "returns": { "status": "Status of the request Selector: d8a4676f" } + }, + "increaseRequestFee(uint256,uint256)": { + "params": { + "feeIncrease": "Amount to increase Selector: d0408a7f", + "requestId": "Request receiving the additional fees (must be < 2**64)" + } + }, + "purgeExpiredRequest(uint256)": { + "params": { + "requestId": "Request to be purged (must be < 2**64) Selector: 1d26cbab" + } + }, + "relayEpochIndex()": { + "details": "An epoch represents real time and not a block numberCurrently, time between epoch changes cannot be longer than:- Kusama/Westend/Rococo: 600 relay blocks (1 hour)- Polkadot: 2400 relay blocks (4 hours) Selector: 81797566" + }, + "requestLocalVRFRandomWords(address,uint256,uint64,bytes32,uint8,uint64)": { + "details": "This is using pseudo-random VRF executed by the collator at the fulfillmentWarning:The collator in charge of producing the block at fulfillment can decide to skipproducing the block in order to have a different random word generated by the nextcollator, at the cost of a block reward. It is therefore economically viable to usethis randomness source only if the financial reward at stake is lower than the blockreward.In order to reduce the risk of a collator being able to predict the random wordswhen the request is performed, it is possible to increase the delay to multiple blocksThe higher the delay is, the less likely the collator will be able to know whichcollator will be in charge of fulfilling the request.Fulfillment is manual and can be executed by anyone (for free) after the given delay", + "params": { + "delay": "The number of blocks until the request can be fulfilled (between MIN_DELAY_BLOCKS and MAX_DELAY_BLOCKS)", + "fee": "The amount to set aside to pay for the fulfillment", + "gasLimit": "The gas limit to use for the fulfillment", + "numWords": "The number of random words requested (from 1 to MAX_RANDOM_WORDS)", + "refundAddress": "The address receiving the left-over fees after the fulfillment", + "salt": "A string being mixed with the randomness seed to obtain different random words" + }, + "returns": { + "_0": "requestId The id of the request requestLocalVRFRandomWords Selector: 4c9c81a8" + } + }, + "requestRelayBabeEpochRandomWords(address,uint256,uint64,bytes32,uint8)": { + "details": "The random words are generated from the hash of the all the VRF provided by therelaychain validator during 1 epoch.It requires a delay of at least 1 epoch after the current epoch to be unpredictableat the time the request is performed.Warning:The validator (on the relaychain) of the last block of an epoch can decide to skipproducing the block in order to choose the previous generated epoch random numberat the cost of a relaychain block rewards. It is therefore economically viable to usethis randomness source only if the financial reward at stake is lower than the relaychainblock reward.(see https://crates.parity.io/pallet_babe/struct.RandomnessFromOneEpochAgo.html)Fulfillment is manual and can be executed by anyone (for free) atthe beginning of the 2nd relay epoch following the current one", + "params": { + "fee": "Amount to set aside to pay for the fulfillment. Those fees are taken from the contract", + "gasLimit": "Gas limit for the fulfillment", + "numWords": "Number of random words to be returned (limited to MAX_RANDOM_WORDS)", + "refundAddress": "The address receiving the left-over fees after the fulfillment", + "salt": "Salt to be mixed with raw randomness to get output" + }, + "returns": { + "_0": "requestId The id of the request Selector: bd063318" + } + }, + "requiredDeposit()": { + "details": "Each request will need a deposit. Selector: fb7cfdd7" + } + }, + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "fulfillRequest(uint256)": "9a91eb0d", + "getRequest(uint256)": "c58343ef", + "getRequestStatus(uint256)": "d8a4676f", + "increaseRequestFee(uint256,uint256)": "d0408a7f", + "purgeExpiredRequest(uint256)": "1d26cbab", + "relayEpochIndex()": "81797566", + "requestLocalVRFRandomWords(address,uint256,uint64,bytes32,uint8,uint64)": "9478430c", + "requestRelayBabeEpochRandomWords(address,uint256,uint64,bytes32,uint8)": "33c14a63", + "requiredDeposit()": "fb7cfdd7" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"FulFillmentFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FulFillmentSucceeded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"fulfillRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"getRequest\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"refundAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"numWords\",\"type\":\"uint32\"},{\"internalType\":\"enum Randomness.RandomnessSource\",\"name\":\"randomnessSource\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentEpochIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expirationBlock\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"expirationEpochIndex\",\"type\":\"uint32\"},{\"internalType\":\"enum Randomness.RequestStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"struct Randomness.Request\",\"name\":\"request\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"getRequestStatus\",\"outputs\":[{\"internalType\":\"enum Randomness.RequestStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeIncrease\",\"type\":\"uint256\"}],\"name\":\"increaseRequestFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"purgeExpiredRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayEpochIndex\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"refundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"numWords\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"delay\",\"type\":\"uint64\"}],\"name\":\"requestLocalVRFRandomWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"refundAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"numWords\",\"type\":\"uint8\"}],\"name\":\"requestRelayBabeEpochRandomWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requiredDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"fulfillRequest(uint256)\":{\"details\":\"fulFill the request which will call the contract method \\\"fulfillRandomWords\\\"Fees of the caller are refunded if the request is fulfillable\",\"params\":{\"requestId\":\"Request to be fulfilled (must be < 2**64) Selector: 9a91eb0d\"}},\"getRequest(uint256)\":{\"params\":{\"requestId\":\"The id of the request to check (must be < 2**64)\"},\"returns\":{\"request\":\"The request Selector: c58343ef\"}},\"getRequestStatus(uint256)\":{\"params\":{\"requestId\":\"The id of the request to check (must be < 2**64)\"},\"returns\":{\"status\":\"Status of the request Selector: d8a4676f\"}},\"increaseRequestFee(uint256,uint256)\":{\"params\":{\"feeIncrease\":\"Amount to increase Selector: d0408a7f\",\"requestId\":\"Request receiving the additional fees (must be < 2**64)\"}},\"purgeExpiredRequest(uint256)\":{\"params\":{\"requestId\":\"Request to be purged (must be < 2**64) Selector: 1d26cbab\"}},\"relayEpochIndex()\":{\"details\":\"An epoch represents real time and not a block numberCurrently, time between epoch changes cannot be longer than:- Kusama/Westend/Rococo: 600 relay blocks (1 hour)- Polkadot: 2400 relay blocks (4 hours) Selector: 81797566\"},\"requestLocalVRFRandomWords(address,uint256,uint64,bytes32,uint8,uint64)\":{\"details\":\"This is using pseudo-random VRF executed by the collator at the fulfillmentWarning:The collator in charge of producing the block at fulfillment can decide to skipproducing the block in order to have a different random word generated by the nextcollator, at the cost of a block reward. It is therefore economically viable to usethis randomness source only if the financial reward at stake is lower than the blockreward.In order to reduce the risk of a collator being able to predict the random wordswhen the request is performed, it is possible to increase the delay to multiple blocksThe higher the delay is, the less likely the collator will be able to know whichcollator will be in charge of fulfilling the request.Fulfillment is manual and can be executed by anyone (for free) after the given delay\",\"params\":{\"delay\":\"The number of blocks until the request can be fulfilled (between MIN_DELAY_BLOCKS and MAX_DELAY_BLOCKS)\",\"fee\":\"The amount to set aside to pay for the fulfillment\",\"gasLimit\":\"The gas limit to use for the fulfillment\",\"numWords\":\"The number of random words requested (from 1 to MAX_RANDOM_WORDS)\",\"refundAddress\":\"The address receiving the left-over fees after the fulfillment\",\"salt\":\"A string being mixed with the randomness seed to obtain different random words\"},\"returns\":{\"_0\":\"requestId The id of the request requestLocalVRFRandomWords Selector: 4c9c81a8\"}},\"requestRelayBabeEpochRandomWords(address,uint256,uint64,bytes32,uint8)\":{\"details\":\"The random words are generated from the hash of the all the VRF provided by therelaychain validator during 1 epoch.It requires a delay of at least 1 epoch after the current epoch to be unpredictableat the time the request is performed.Warning:The validator (on the relaychain) of the last block of an epoch can decide to skipproducing the block in order to choose the previous generated epoch random numberat the cost of a relaychain block rewards. It is therefore economically viable to usethis randomness source only if the financial reward at stake is lower than the relaychainblock reward.(see https://crates.parity.io/pallet_babe/struct.RandomnessFromOneEpochAgo.html)Fulfillment is manual and can be executed by anyone (for free) atthe beginning of the 2nd relay epoch following the current one\",\"params\":{\"fee\":\"Amount to set aside to pay for the fulfillment. Those fees are taken from the contract\",\"gasLimit\":\"Gas limit for the fulfillment\",\"numWords\":\"Number of random words to be returned (limited to MAX_RANDOM_WORDS)\",\"refundAddress\":\"The address receiving the left-over fees after the fulfillment\",\"salt\":\"Salt to be mixed with raw randomness to get output\"},\"returns\":{\"_0\":\"requestId The id of the request Selector: bd063318\"}},\"requiredDeposit()\":{\"details\":\"Each request will need a deposit. Selector: fb7cfdd7\"}},\"version\":1},\"userdoc\":{\"events\":{\"FulFillmentFailed()\":{\"notice\":\"Event emitted when the request has failed to execute fulfillment\"},\"FulFillmentSucceeded()\":{\"notice\":\"Event emitted when the request has been successfully executed\"}},\"kind\":\"user\",\"methods\":{\"getRequest(uint256)\":{\"notice\":\"Returns the request or revert\"},\"getRequestStatus(uint256)\":{\"notice\":\"Returns the request status\"},\"relayEpochIndex()\":{\"notice\":\"Return the current relay epoch index\"},\"requestLocalVRFRandomWords(address,uint256,uint64,bytes32,uint8,uint64)\":{\"notice\":\"Request random words generated from the parachain VRF\"},\"requestRelayBabeEpochRandomWords(address,uint256,uint64,bytes32,uint8)\":{\"notice\":\"Request random words generated from the relaychain Babe consensus\"},\"requiredDeposit()\":{\"notice\":\"Return the deposit required to perform a request\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Randomness\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4a9c5b6746c5c85660a078d3b1f7ebdf8185630ccd31cab26a59372717907ba0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://ea0d29c24e65a74e99c976548bbb7c3d15fa99a57e31bd65a4f26c813181fc4a\",\"dweb:/ipfs/QmNU17ur1Gxny4dekCBLrswfymydjKaggMrdCc38NLaQv8\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { + "events": { + "FulFillmentFailed()": { + "notice": "Event emitted when the request has failed to execute fulfillment" + }, + "FulFillmentSucceeded()": { + "notice": "Event emitted when the request has been successfully executed" + } + }, + "kind": "user", + "methods": { + "getRequest(uint256)": { "notice": "Returns the request or revert" }, + "getRequestStatus(uint256)": { "notice": "Returns the request status" }, + "relayEpochIndex()": { + "notice": "Return the current relay epoch index" + }, + "requestLocalVRFRandomWords(address,uint256,uint64,bytes32,uint8,uint64)": { + "notice": "Request random words generated from the parachain VRF" + }, + "requestRelayBabeEpochRandomWords(address,uint256,uint64,bytes32,uint8)": { + "notice": "Request random words generated from the relaychain Babe consensus" + }, + "requiredDeposit()": { + "notice": "Return the deposit required to perform a request" + } + }, + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/// @dev Maximum number of random words being requested\nuint32 constant MAX_RANDOM_WORDS = 100;\n/// @dev Minimum number of blocks before a request can be fulfilled for Local VRF Request\nuint32 constant MIN_VRF_BLOCKS_DELAY = 2;\n/// @dev Maximum number of blocks before a request can be fulfilled for Local VRF Request\nuint32 constant MAX_VRF_BLOCKS_DELAY = 2000;\n/// @dev The deposit amount needed to request random words. There is 1 deposit per request\nuint256 constant REQUEST_DEPOSIT_AMOUNT = 1000000000000000000;\n\ninterface Randomness {\n /// @notice Event emitted when the request has been successfully executed\n event FulFillmentSucceeded();\n /// @notice Event emitted when the request has failed to execute fulfillment\n event FulFillmentFailed();\n\n /// @notice The status of the request\n /// @param DoesNotExist The request doesn't exist\n /// @param Pending The request cannot be fulfilled yet\n /// @param Ready The request is ready to be fulfilled\n /// @param Expired The request has expired\n enum RequestStatus {\n DoesNotExist,\n Pending,\n Ready,\n Expired\n }\n\n /// @notice The type of randomness source\n /// @param LocalVRF Randomness VRF using the parachain material as seed\n /// @param RelayBabeEpoch Randomness VRF using relay material from previous epoch\n enum RandomnessSource {\n LocalVRF,\n RelayBabeEpoch\n }\n\n /// @notice The request details\n /// @param id The id of the request (is always < 2**64)\n /// @param refundAddress The address receiving the left-over fees after the fulfillment\n /// @param contractAddress The address of the contract being called back during fulfillment\n /// @param fee The amount to set aside to pay for the fulfillment\n /// @param gasLimit The gas limit to use for the fulfillment\n /// @param salt A string being mixed with the randomness seed to obtain different random words\n /// @param numWords The number of random words requested (from 1 to MAX_RANDOM_WORDS)\n /// @param randomnessSource The type of randomness source used to generate the random words\n /// @param fulfillmentBlock The parachain block number at which the request can be fulfilled (for LocalVRF only)\n /// @param fulfillmentEpochIndex The relay epoch index at which the request can be fulfilled (for RelayBabeEpoch)\n /// @param expirationBlock The parachain block number at which the request expires (for LocalVRF only)\n /// @param expirationEpochIndex The relay epoch index at which the request expires (for RelayBabeEpoch)\n /// @param status The current status of the request\n struct Request {\n uint256 id;\n address refundAddress;\n address contractAddress;\n uint256 fee;\n uint256 gasLimit;\n bytes32 salt;\n uint32 numWords;\n RandomnessSource randomnessSource;\n uint32 fulfillmentBlock;\n uint32 fulfillmentEpochIndex;\n uint32 expirationBlock;\n uint32 expirationEpochIndex;\n RequestStatus status;\n }\n\n /// Return the current relay epoch index\n /// @dev An epoch represents real time and not a block number\n /// @dev Currently, time between epoch changes cannot be longer than:\n /// @dev - Kusama/Westend/Rococo: 600 relay blocks (1 hour)\n /// @dev - Polkadot: 2400 relay blocks (4 hours)\n /// Selector: 81797566\n function relayEpochIndex() external view returns (uint64);\n\n /// Return the deposit required to perform a request\n /// @dev Each request will need a deposit.\n /// Selector: fb7cfdd7\n function requiredDeposit() external view returns (uint256);\n\n /// @notice Returns the request status\n /// @param requestId The id of the request to check (must be < 2**64)\n /// @return status Status of the request\n /// Selector: d8a4676f\n function getRequestStatus(uint256 requestId)\n external\n view\n returns (RequestStatus status);\n\n /// @notice Returns the request or revert\n /// @param requestId The id of the request to check (must be < 2**64)\n /// @return request The request\n /// Selector: c58343ef\n function getRequest(uint256 requestId)\n external\n view\n returns (Request memory request);\n\n /// @notice Request random words generated from the parachain VRF\n /// @dev This is using pseudo-random VRF executed by the collator at the fulfillment\n /// @dev Warning:\n /// @dev The collator in charge of producing the block at fulfillment can decide to skip\n /// @dev producing the block in order to have a different random word generated by the next\n /// @dev collator, at the cost of a block reward. It is therefore economically viable to use\n /// @dev this randomness source only if the financial reward at stake is lower than the block\n /// @dev reward.\n /// @dev In order to reduce the risk of a collator being able to predict the random words\n /// @dev when the request is performed, it is possible to increase the delay to multiple blocks\n /// @dev The higher the delay is, the less likely the collator will be able to know which\n /// @dev collator will be in charge of fulfilling the request.\n /// @dev Fulfillment is manual and can be executed by anyone (for free) after the given delay\n /// @param refundAddress The address receiving the left-over fees after the fulfillment\n /// @param fee The amount to set aside to pay for the fulfillment\n /// @param gasLimit The gas limit to use for the fulfillment\n /// @param salt A string being mixed with the randomness seed to obtain different random words\n /// @param numWords The number of random words requested (from 1 to MAX_RANDOM_WORDS)\n /// @param delay The number of blocks until the request can be fulfilled (between MIN_DELAY_BLOCKS and MAX_DELAY_BLOCKS)\n /// @return requestId The id of the request requestLocalVRFRandomWords\n /// Selector: 4c9c81a8\n function requestLocalVRFRandomWords(\n address refundAddress,\n uint256 fee,\n uint64 gasLimit,\n bytes32 salt,\n uint8 numWords,\n uint64 delay\n ) external returns (uint256);\n\n /// @notice Request random words generated from the relaychain Babe consensus\n /// @dev The random words are generated from the hash of the all the VRF provided by the\n /// @dev relaychain validator during 1 epoch.\n /// @dev It requires a delay of at least 1 epoch after the current epoch to be unpredictable\n /// @dev at the time the request is performed.\n /// @dev Warning:\n /// @dev The validator (on the relaychain) of the last block of an epoch can decide to skip\n /// @dev producing the block in order to choose the previous generated epoch random number\n /// @dev at the cost of a relaychain block rewards. It is therefore economically viable to use\n /// @dev this randomness source only if the financial reward at stake is lower than the relaychain\n /// @dev block reward.\n /// @dev (see https://crates.parity.io/pallet_babe/struct.RandomnessFromOneEpochAgo.html)\n /// @dev Fulfillment is manual and can be executed by anyone (for free) at\n /// @dev the beginning of the 2nd relay epoch following the current one\n /// @param refundAddress The address receiving the left-over fees after the fulfillment\n /// @param fee Amount to set aside to pay for the fulfillment. Those fees are taken from the contract\n /// @param gasLimit Gas limit for the fulfillment\n /// @param salt Salt to be mixed with raw randomness to get output\n /// @param numWords Number of random words to be returned (limited to MAX_RANDOM_WORDS)\n /// @return requestId The id of the request\n /// Selector: bd063318\n function requestRelayBabeEpochRandomWords(\n address refundAddress,\n uint256 fee,\n uint64 gasLimit,\n bytes32 salt,\n uint8 numWords\n ) external returns (uint256);\n\n /// @dev fulFill the request which will call the contract method \"fulfillRandomWords\"\n /// @dev Fees of the caller are refunded if the request is fulfillable\n /// @param requestId Request to be fulfilled (must be < 2**64)\n /// Selector: 9a91eb0d\n function fulfillRequest(uint256 requestId) external;\n\n /// @param requestId Request receiving the additional fees (must be < 2**64)\n /// @param feeIncrease Amount to increase\n /// Selector: d0408a7f\n function increaseRequestFee(uint256 requestId, uint256 feeIncrease)\n external;\n\n /// @param requestId Request to be purged (must be < 2**64)\n /// Selector: 1d26cbab\n function purgeExpiredRequest(uint256 requestId) external;\n}\n" +} diff --git a/tests/contracts/compiled/RandomnessConsumer.json b/tests/contracts/compiled/RandomnessConsumer.json new file mode 100644 index 0000000000..2b1e89fab8 --- /dev/null +++ b/tests/contracts/compiled/RandomnessConsumer.json @@ -0,0 +1,70 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "address", "name": "have", "type": "address" }, + { "internalType": "address", "name": "want", "type": "address" } + ], + "name": "OnlyRandomnessPrecompileCanFulfill", + "type": "error" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" }, + { + "internalType": "uint256[]", + "name": "randomWords", + "type": "uint256[]" + } + ], + "name": "rawFulfillRandomWords", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "PURPOSEThe purpose of this contract is to make it easy for contracts to talk tothe Randomness Precompile. It ensures 2 things:1. The fulfillment came from the Randomness Precompile2. The consumer contract implements fulfillRandomWords. *****************************************************************************USAGECalling contracts must inherit from RandomnessConsumerCall one of the randomness request functions:1. requestLocalVRFRandomWords(refundAddress, fee, gasLimit, saltnumWords, delay),2. requestRelayBabeEpochRandomWords(refundAddress, fee, gasLimit, saltnumWords),see (Randomness.sol for a description of each function and their arguments).Once the request has been registered and the minimum delay is passed, therequest then can be executed (for 0 fee) by anyone. it will call yourcontract's fulfillRandomWords method.The randomness argument to fulfillRandomWords is a set of random wordsgenerated from your requestId.If your contract could have concurrent requests open, you can use therequestId returned from requestRandomWords to track which response is associatedwith which randomness request.See \"SECURITY CONSIDERATIONS\" for principles to keep in mind,if your contract could have multiple requests in flight simultaneously.Colliding `requestId`s are cryptographically impossible as long as seedsdiffer. *****************************************************************************SECURITY CONSIDERATIONSA method with the ability to call your fulfillRandomness method directlycould spoof a VRF response with any random value, so it's critical thatit cannot be directly called by anything other than this base contract(specifically, by the RandomnessConsumer.rawFulfillRandomness method).For your users to trust that your contract's random behavior is freefrom malicious interference, it's best if you can write it so that allbehaviors implied by a VRF response are executed *during* yourfulfillRandomness method. If your contract must store the response (oranything derived from it) and use it later, you must ensure that anyuser-significant behavior which depends on that stored value cannot bemanipulated by a subsequent VRF request.Similarly, the collators have some influence over the order in whichVRF responses appear on the blockchain, so if your contract could havemultiple VRF requests in flight simultaneously, you must ensure thatthe order in which the VRF responses arrive cannot be used to manipulateyour contract's user-significant behavior.Since the output of the random words generated for*requestLocalVRFRandomWords* is dependant of the collator producing theblock at fulfillment, the collator could skip its block forcing thefulfillment to be executed by a different collator, and thereforegenerating a different VRF.However, such an attack would incur the cost of losing the block reward tothe collator.It is also possible for a collator to be able to predict some of thepossible outcome of the VRF if the delay between the request and thefulfillment is too short. It is for this reason that we allow to providea higher delaySince the output of the random words generated for*requestRelayBabeEpochRandomWords* is dependant of the relaychainvalidator producing the blocks during an epoch, it is possible forthe last validator of an epoch to choose between 2 possible VRFoutputs by skipping the production of a block.However, such an attack would incur the cost of losing the block reward tothe validatorIt is not possible for a parachain collator to predict nor influencethe output of the relaychain VRF, not to censor the fulfillment as long asthere is one honest collator.", + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "rawFulfillRandomWords(uint256,uint256[])": "1fe543e3" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"want\",\"type\":\"address\"}],\"name\":\"OnlyRandomnessPrecompileCanFulfill\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"randomWords\",\"type\":\"uint256[]\"}],\"name\":\"rawFulfillRandomWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"PURPOSEThe purpose of this contract is to make it easy for contracts to talk tothe Randomness Precompile. It ensures 2 things:1. The fulfillment came from the Randomness Precompile2. The consumer contract implements fulfillRandomWords. *****************************************************************************USAGECalling contracts must inherit from RandomnessConsumerCall one of the randomness request functions:1. requestLocalVRFRandomWords(refundAddress, fee, gasLimit, saltnumWords, delay),2. requestRelayBabeEpochRandomWords(refundAddress, fee, gasLimit, saltnumWords),see (Randomness.sol for a description of each function and their arguments).Once the request has been registered and the minimum delay is passed, therequest then can be executed (for 0 fee) by anyone. it will call yourcontract's fulfillRandomWords method.The randomness argument to fulfillRandomWords is a set of random wordsgenerated from your requestId.If your contract could have concurrent requests open, you can use therequestId returned from requestRandomWords to track which response is associatedwith which randomness request.See \\\"SECURITY CONSIDERATIONS\\\" for principles to keep in mind,if your contract could have multiple requests in flight simultaneously.Colliding `requestId`s are cryptographically impossible as long as seedsdiffer. *****************************************************************************SECURITY CONSIDERATIONSA method with the ability to call your fulfillRandomness method directlycould spoof a VRF response with any random value, so it's critical thatit cannot be directly called by anything other than this base contract(specifically, by the RandomnessConsumer.rawFulfillRandomness method).For your users to trust that your contract's random behavior is freefrom malicious interference, it's best if you can write it so that allbehaviors implied by a VRF response are executed *during* yourfulfillRandomness method. If your contract must store the response (oranything derived from it) and use it later, you must ensure that anyuser-significant behavior which depends on that stored value cannot bemanipulated by a subsequent VRF request.Similarly, the collators have some influence over the order in whichVRF responses appear on the blockchain, so if your contract could havemultiple VRF requests in flight simultaneously, you must ensure thatthe order in which the VRF responses arrive cannot be used to manipulateyour contract's user-significant behavior.Since the output of the random words generated for*requestLocalVRFRandomWords* is dependant of the collator producing theblock at fulfillment, the collator could skip its block forcing thefulfillment to be executed by a different collator, and thereforegenerating a different VRF.However, such an attack would incur the cost of losing the block reward tothe collator.It is also possible for a collator to be able to predict some of thepossible outcome of the VRF if the delay between the request and thefulfillment is too short. It is for this reason that we allow to providea higher delaySince the output of the random words generated for*requestRelayBabeEpochRandomWords* is dependant of the relaychainvalidator producing the blocks during an epoch, it is possible forthe last validator of an epoch to choose between 2 possible VRFoutputs by skipping the production of a block.However, such an attack would incur the cost of losing the block reward tothe validatorIt is not possible for a parachain collator to predict nor influencethe output of the relaychain VRF, not to censor the fulfillment as long asthere is one honest collator.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"****************************************************************************Interface for contracts using VRF randomness *****************************************************************************\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"RandomnessConsumer\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa2cae2ffd4ab6b21c7b45cafe61bf05a8b5b2106789455ca8e27c39f6e4a008d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3261c110b45cafdcdbe5536f29a6f32911f03029b25067fd669e05eabb95e93b\",\"dweb:/ipfs/QmTF7bmb2eYwRmtp9WSuzANNUbgXGJVy2SCPHEFXnRz8zP\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { + "kind": "user", + "methods": {}, + "notice": "****************************************************************************Interface for contracts using VRF randomness *****************************************************************************", + "version": 1 + } + }, + "sourceCode": "// Inspired by: https://raw.githubusercontent.com/smartcontractkit/chainlink/8e8a996fd882c0861bdc9824c1ca27c857c87d03/contracts/src/v0.8/VRFConsumerBaseV2.sol\n// SPDX-License-Identifier: GPL-3.0\npragma solidity ^0.8.4;\n\n/** ****************************************************************************\n * @notice Interface for contracts using VRF randomness\n * *****************************************************************************\n * @dev PURPOSE\n *\n * @dev The purpose of this contract is to make it easy for contracts to talk to\n * @dev the Randomness Precompile. It ensures 2 things:\n * @dev 1. The fulfillment came from the Randomness Precompile\n * @dev 2. The consumer contract implements fulfillRandomWords.\n * *****************************************************************************\n * @dev USAGE\n *\n * @dev Calling contracts must inherit from RandomnessConsumer\n *\n * @dev Call one of the randomness request functions:\n * @dev 1. requestLocalVRFRandomWords(refundAddress, fee, gasLimit, salt\n * @dev numWords, delay),\n * @dev 2. requestRelayBabeEpochRandomWords(refundAddress, fee, gasLimit, salt\n * @dev numWords),\n * @dev see (Randomness.sol for a description of each function and their arguments).\n *\n * @dev Once the request has been registered and the minimum delay is passed, the\n * @dev request then can be executed (for 0 fee) by anyone. it will call your\n * @dev contract's fulfillRandomWords method.\n *\n * @dev The randomness argument to fulfillRandomWords is a set of random words\n * @dev generated from your requestId.\n *\n * @dev If your contract could have concurrent requests open, you can use the\n * @dev requestId returned from requestRandomWords to track which response is associated\n * @dev with which randomness request.\n * @dev See \"SECURITY CONSIDERATIONS\" for principles to keep in mind,\n * @dev if your contract could have multiple requests in flight simultaneously.\n *\n * @dev Colliding `requestId`s are cryptographically impossible as long as seeds\n * @dev differ.\n *\n * *****************************************************************************\n * @dev SECURITY CONSIDERATIONS\n *\n * @dev A method with the ability to call your fulfillRandomness method directly\n * @dev could spoof a VRF response with any random value, so it's critical that\n * @dev it cannot be directly called by anything other than this base contract\n * @dev (specifically, by the RandomnessConsumer.rawFulfillRandomness method).\n *\n * @dev For your users to trust that your contract's random behavior is free\n * @dev from malicious interference, it's best if you can write it so that all\n * @dev behaviors implied by a VRF response are executed *during* your\n * @dev fulfillRandomness method. If your contract must store the response (or\n * @dev anything derived from it) and use it later, you must ensure that any\n * @dev user-significant behavior which depends on that stored value cannot be\n * @dev manipulated by a subsequent VRF request.\n *\n * @dev Similarly, the collators have some influence over the order in which\n * @dev VRF responses appear on the blockchain, so if your contract could have\n * @dev multiple VRF requests in flight simultaneously, you must ensure that\n * @dev the order in which the VRF responses arrive cannot be used to manipulate\n * @dev your contract's user-significant behavior.\n *\n * @dev Since the output of the random words generated for\n * @dev *requestLocalVRFRandomWords* is dependant of the collator producing the\n * @dev block at fulfillment, the collator could skip its block forcing the\n * @dev fulfillment to be executed by a different collator, and therefore\n * @dev generating a different VRF.\n * @dev However, such an attack would incur the cost of losing the block reward to\n * @dev the collator.\n * @dev It is also possible for a collator to be able to predict some of the\n * @dev possible outcome of the VRF if the delay between the request and the\n * @dev fulfillment is too short. It is for this reason that we allow to provide\n * @dev a higher delay\n *\n * @dev Since the output of the random words generated for\n * @dev *requestRelayBabeEpochRandomWords* is dependant of the relaychain\n * @dev validator producing the blocks during an epoch, it is possible for\n * @dev the last validator of an epoch to choose between 2 possible VRF\n * @dev outputs by skipping the production of a block.\n * @dev However, such an attack would incur the cost of losing the block reward to\n * @dev the validator\n * @dev It is not possible for a parachain collator to predict nor influence\n * @dev the output of the relaychain VRF, not to censor the fulfillment as long as\n * @dev there is one honest collator.\n */\nabstract contract RandomnessConsumer {\n error OnlyRandomnessPrecompileCanFulfill(address have, address want);\n\n /**\n * @notice fulfillRandomness handles the VRF response. Your contract must\n * @notice implement it. See \"SECURITY CONSIDERATIONS\" above for important\n * @notice principles to keep in mind when implementing your fulfillRandomness\n * @notice method.\n *\n * @dev RandomnessConsumer expects its subcontracts to have a method with this\n * @dev signature, and will call it once it has verified the proof\n * @dev associated with the randomness. (It is triggered via a call to\n * @dev rawFulfillRandomness, below.)\n *\n * @param requestId The Id initially returned by requestLocalVRFRandomWords or requestRelayBabeEpochRandomWords\n * @param randomWords The VRF output expanded to the requested number of words\n */\n function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords)\n internal\n virtual;\n\n // rawFulfillRandomness is called by Randomness Precompile when the executeFulfillement\n // is called. rawFulfillRandomness then calls fulfillRandomness, after validating\n // the origin of the call\n function rawFulfillRandomWords(\n uint256 requestId,\n uint256[] memory randomWords\n ) external {\n if (msg.sender != 0x0000000000000000000000000000000000000809) {\n revert OnlyRandomnessPrecompileCanFulfill(\n msg.sender,\n 0x0000000000000000000000000000000000000809\n );\n }\n fulfillRandomWords(requestId, randomWords);\n }\n}\n" +} diff --git a/tests/contracts/compiled/RandomnessLotteryDemo.json b/tests/contracts/compiled/RandomnessLotteryDemo.json new file mode 100644 index 0000000000..96dd0dde4d --- /dev/null +++ b/tests/contracts/compiled/RandomnessLotteryDemo.json @@ -0,0 +1,25474 @@ +{ + "byteCode": "0x60806040526108096000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a0600060146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550633b9aca00600060149054906101000a900467ffffffffffffffff166200009a919062000270565b67ffffffffffffffff1660015560028060006101000a81548160ff021916908360ff16021790555060028060016101000a81548163ffffffff021916908363ffffffff160217905550600380556014600455670de0b6b3a76400006005557f6d795f64656d6f5f73616c745f6368616e67655f6d650000000000000000000060065560405162001c9738038062001c978339818101604052810190620001419190620002e6565b6000670de0b6b3a7640000905080341015620001985734816040517fea691a4b0000000000000000000000000000000000000000000000000000000081526004016200018f92919062000333565b60405180910390fd5b81600b60146101000a81548160ff02191690836001811115620001c057620001bf62000360565b5b021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006007819055506000600a8190555067ffffffffffffffff60088190555050506200038f565b600067ffffffffffffffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200027d826200022d565b91506200028a836200022d565b92508167ffffffffffffffff0483118215151615620002ae57620002ad62000241565b5b828202905092915050565b600080fd5b60028110620002cc57600080fd5b50565b600081519050620002e081620002be565b92915050565b600060208284031215620002ff57620002fe620002b9565b5b60006200030f84828501620002cf565b91505092915050565b6000819050919050565b6200032d8162000318565b82525050565b60006040820190506200034a600083018562000322565b62000359602083018462000322565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6118f8806200039f6000396000f3fe6080604052600436106101085760003560e01c80633a984bc51161009557806376c7a3c71161006457806376c7a3c71461030a5780637d5a9c5a14610335578063cad0338c14610360578063d11711a21461038b578063f3baf0701461039557610108565b80633a984bc51461025e57806349943a131461028957806351a8e298146102b45780636b31ee01146102df57610108565b80631fe543e3116100dc5780631fe543e314610177578063200d2ed2146101a05780632b855d19146101cb57806335c1d349146101f6578063360131891461023357610108565b80626d6cae1461010d578063081275d414610138578063160344e21461014257806317a472821461014c575b600080fd5b34801561011957600080fd5b506101226103c0565b60405161012f9190611049565b60405180910390f35b6101406103c6565b005b61014a610457565b005b34801561015857600080fd5b50610161610943565b60405161016e919061107d565b60405180910390f35b34801561018357600080fd5b5061019e60048036038101906101999190611231565b610949565b005b3480156101ac57600080fd5b506101b56109cd565b6040516101c29190611304565b60405180910390f35b3480156101d757600080fd5b506101e0610b14565b6040516101ed9190611049565b60405180910390f35b34801561020257600080fd5b5061021d6004803603810190610218919061131f565b610b1a565b60405161022a919061138d565b60405180910390f35b34801561023f57600080fd5b50610248610b59565b6040516102559190611407565b60405180910390f35b34801561026a57600080fd5b50610273610b7d565b6040516102809190611049565b60405180910390f35b34801561029557600080fd5b5061029e610b83565b6040516102ab9190611049565b60405180910390f35b3480156102c057600080fd5b506102c9610b89565b6040516102d69190611445565b60405180910390f35b3480156102eb57600080fd5b506102f4610ba3565b6040516103019190611049565b60405180910390f35b34801561031657600080fd5b5061031f610ba9565b60405161032c9190611049565b60405180910390f35b34801561034157600080fd5b5061034a610baf565b604051610357919061147f565b60405180910390f35b34801561036c57600080fd5b50610375610bc5565b60405161038291906114b6565b60405180910390f35b610393610bd8565b005b3480156103a157600080fd5b506103aa610d99565b6040516103b79190611049565b60405180910390f35b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0408a7f600854346040518363ffffffff1660e01b81526004016104239291906114d1565b600060405180830381600087803b15801561043d57600080fd5b505af1158015610451573d6000803e3d6000fd5b50505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b157600080fd5b600060038111156104c5576104c461128d565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b81526004016105209190611049565b602060405180830381865afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610561919061151f565b60038111156105735761057261128d565b5b146105aa576040517f4edbe0e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460098054905010156105ff576009805490506003546040517f5fdd6f490000000000000000000000000000000000000000000000000000000081526004016105f69291906114d1565b60405180910390fd5b60045460098054905010610653576009805490506004546040517fe318577800000000000000000000000000000000000000000000000000000000815260040161064a9291906114d1565b60405180910390fd5b60003490506001548110156106a357806001546040517f0167202800000000000000000000000000000000000000000000000000000000815260040161069a9291906114d1565b60405180910390fd5b6000670de0b6b3a7640000905080600a546106be919061157b565b47101561071157600a54476106d391906115d1565b816040517fea691a4b0000000000000000000000000000000000000000000000000000000081526004016107089291906114d1565b60405180910390fd5b600060018111156107255761072461128d565b5b600b60149054906101000a900460ff1660018111156107475761074661128d565b5b14156108525760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639478430c3384600060149054906101000a900467ffffffffffffffff16600760008154809291906107b590611605565b9190505560001b60065418600260009054906101000a900460ff16600260019054906101000a900463ffffffff166040518763ffffffff1660e01b81526004016108049695949392919061167f565b6020604051808303816000875af1158015610823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084791906116f5565b60088190555061093f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333c14a633384600060149054906101000a900467ffffffffffffffff16600760008154809291906108ba90611605565b9190505560001b60065418600260009054906101000a900460ff166040518663ffffffff1660e01b81526004016108f5959493929190611722565b6020604051808303816000875af1158015610914573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093891906116f5565b6008819055505b5050565b60065481565b61080973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109bf57336108096040517fc68806f50000000000000000000000000000000000000000000000000000000081526004016109b6929190611775565b60405180910390fd5b6109c98282610d9f565b5050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b8152600401610a2b9190611049565b602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c919061151f565b905060006003811115610a8257610a8161128d565b5b816003811115610a9557610a9461128d565b5b1415610aa5576000915050610b11565b60016003811115610ab957610ab861128d565b5b816003811115610acc57610acb61128d565b5b1480610afc575060026003811115610ae757610ae661128d565b5b816003811115610afa57610af961128d565b5b145b15610b0b576001915050610b11565b60029150505b90565b60075481565b60098181548110610b2a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60055481565b600060149054906101000a900467ffffffffffffffff1681565b600a5481565b60015481565b600260019054906101000a900463ffffffff1681565b600260009054906101000a900460ff1681565b60006003811115610bec57610beb61128d565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b8152600401610c479190611049565b602060405180830381865afa158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c88919061151f565b6003811115610c9a57610c9961128d565b5b14610cd1576040517f4edbe0e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005543414610d1b57346005546040517fe6be2dc8000000000000000000000000000000000000000000000000000000008152600401610d129291906114d1565b60405180910390fd5b6009339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034600a6000828254610d90919061157b565b92505081905550565b60045481565b610da881610dac565b5050565b6000600980549050600260009054906101000a900460ff1660ff1610610dd757600980549050610deb565b600260009054906101000a900460ff1660ff165b9050600081600a54610dfd91906117cd565b90507f94942738dac5813db86bc09e12c382aaa6824a675cfd6f834a8e2d5a964ac3c4600980549050600a5484604051610e39939291906117fe565b60405180910390a160005b828163ffffffff161015610fd6576000848263ffffffff1681518110610e6d57610e6c611835565b5b60200260200101519050600060098054905082610e8a9190611864565b9050600060098281548110610ea257610ea1611835565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060098281548110610ee357610ee2611835565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558073ffffffffffffffffffffffffffffffffffffffff167f7adb26a7cfdd051fb0b5aedd769aead9026d0a9ebcc7f9b4f0b34b19778243a38487604051610f589291906114d1565b60405180910390a284600a6000828254610f7291906115d1565b925050819055508073ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015610fbf573d6000803e3d6000fd5b505050508080610fce90611895565b915050610e44565b5060096000610fe59190610ff2565b6000600881905550505050565b50805460008255906000526020600020908101906110109190611013565b50565b5b8082111561102c576000816000905550600101611014565b5090565b6000819050919050565b61104381611030565b82525050565b600060208201905061105e600083018461103a565b92915050565b6000819050919050565b61107781611064565b82525050565b6000602082019050611092600083018461106e565b92915050565b6000604051905090565b600080fd5b600080fd5b6110b581611030565b81146110c057600080fd5b50565b6000813590506110d2816110ac565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611126826110dd565b810181811067ffffffffffffffff82111715611145576111446110ee565b5b80604052505050565b6000611158611098565b9050611164828261111d565b919050565b600067ffffffffffffffff821115611184576111836110ee565b5b602082029050602081019050919050565b600080fd5b60006111ad6111a884611169565b61114e565b905080838252602082019050602084028301858111156111d0576111cf611195565b5b835b818110156111f957806111e588826110c3565b8452602084019350506020810190506111d2565b5050509392505050565b600082601f830112611218576112176110d8565b5b813561122884826020860161119a565b91505092915050565b60008060408385031215611248576112476110a2565b5b6000611256858286016110c3565b925050602083013567ffffffffffffffff811115611277576112766110a7565b5b61128385828601611203565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106112cd576112cc61128d565b5b50565b60008190506112de826112bc565b919050565b60006112ee826112d0565b9050919050565b6112fe816112e3565b82525050565b600060208201905061131960008301846112f5565b92915050565b600060208284031215611335576113346110a2565b5b6000611343848285016110c3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113778261134c565b9050919050565b6113878161136c565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000819050919050565b60006113cd6113c86113c38461134c565b6113a8565b61134c565b9050919050565b60006113df826113b2565b9050919050565b60006113f1826113d4565b9050919050565b611401816113e6565b82525050565b600060208201905061141c60008301846113f8565b92915050565b600067ffffffffffffffff82169050919050565b61143f81611422565b82525050565b600060208201905061145a6000830184611436565b92915050565b600063ffffffff82169050919050565b61147981611460565b82525050565b60006020820190506114946000830184611470565b92915050565b600060ff82169050919050565b6114b08161149a565b82525050565b60006020820190506114cb60008301846114a7565b92915050565b60006040820190506114e6600083018561103a565b6114f3602083018461103a565b9392505050565b6004811061150757600080fd5b50565b600081519050611519816114fa565b92915050565b600060208284031215611535576115346110a2565b5b60006115438482850161150a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061158682611030565b915061159183611030565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156115c6576115c561154c565b5b828201905092915050565b60006115dc82611030565b91506115e783611030565b9250828210156115fa576115f961154c565b5b828203905092915050565b600061161082611030565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116435761164261154c565b5b600182019050919050565b600061166961166461165f84611460565b6113a8565b611422565b9050919050565b6116798161164e565b82525050565b600060c082019050611694600083018961137e565b6116a1602083018861103a565b6116ae6040830187611436565b6116bb606083018661106e565b6116c860808301856114a7565b6116d560a0830184611670565b979650505050505050565b6000815190506116ef816110ac565b92915050565b60006020828403121561170b5761170a6110a2565b5b6000611719848285016116e0565b91505092915050565b600060a082019050611737600083018861137e565b611744602083018761103a565b6117516040830186611436565b61175e606083018561106e565b61176b60808301846114a7565b9695505050505050565b600060408201905061178a600083018561137e565b611797602083018461137e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006117d882611030565b91506117e383611030565b9250826117f3576117f261179e565b5b828204905092915050565b6000606082019050611813600083018661103a565b611820602083018561103a565b61182d604083018461103a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061186f82611030565b915061187a83611030565b92508261188a5761188961179e565b5b828206905092915050565b60006118a082611460565b915063ffffffff8214156118b7576118b661154c565b5b60018201905091905056fea2646970667358221220dd5f4648a7c60017c9cd5d09ffc8e6f541c8834c9dc3bb425380ca5fc193f38b64736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [ + { + "internalType": "enum Randomness.RandomnessSource", + "name": "source", + "type": "uint8" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "required", "type": "uint256" } + ], + "name": "DepositTooLow", + "type": "error" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "required", "type": "uint256" } + ], + "name": "InvalidParticipationFee", + "type": "error" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "required", "type": "uint256" } + ], + "name": "NotEnoughFee", + "type": "error" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "required", "type": "uint256" } + ], + "name": "NotEnoughParticipants", + "type": "error" + }, + { + "inputs": [ + { "internalType": "address", "name": "have", "type": "address" }, + { "internalType": "address", "name": "want", "type": "address" } + ], + "name": "OnlyRandomnessPrecompileCanFulfill", + "type": "error" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" }, + { "internalType": "uint256", "name": "required", "type": "uint256" } + ], + "name": "TooManyParticipants", + "type": "error" + }, + { "inputs": [], "name": "WaitingFulfillment", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "winner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "randomWord", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Awarded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "participantCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "jackpot", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "winnerCount", + "type": "uint256" + } + ], + "name": "Ended", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "participantCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "jackpot", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "requestId", + "type": "uint256" + } + ], + "name": "Started", + "type": "event" + }, + { + "inputs": [], + "name": "FULFILLMENT_GAS_LIMIT", + "outputs": [{ "internalType": "uint64", "name": "", "type": "uint64" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_PARTICIPANTS", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_FEE", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_PARTICIPANTS", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "NUM_WINNERS", + "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PARTICIPATION_FEE", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SALT_PREFIX", + "outputs": [ + { "internalType": "bytes32", "name": "", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VRF_BLOCKS_DELAY", + "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "globalRequestCount", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "increaseRequestFee", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "jackpot", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "name": "participants", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "participate", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "randomness", + "outputs": [ + { + "internalType": "contract Randomness", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "requestId", "type": "uint256" }, + { + "internalType": "uint256[]", + "name": "randomWords", + "type": "uint256[]" + } + ], + "name": "rawFulfillRandomWords", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "requestId", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "startLottery", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "status", + "outputs": [ + { + "internalType": "enum RandomnessLotteryDemo.LotteryStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "events": { + "Awarded(address,uint256,uint256)": { + "params": { + "amount": "The amount being awarded", + "randomWord": "The randomWord being used (for informative purposes)", + "winner": "The participant getting awarded" + } + }, + "Ended(uint256,uint256,uint256)": { + "params": { + "jackpot": "The total jackpot", + "participantCount": "The number of participants", + "winnerCount": "The number of winners" + } + }, + "Started(uint256,uint256,uint256)": { + "params": { + "jackpot": "The total jackpot", + "participantCount": "The number of participants", + "requestId": "The pseudo-random request id" + } + } + }, + "kind": "dev", + "methods": { + "increaseRequestFee()": { + "details": "This is needed if the gas price increase significantly beforethe request is fulfilled" + } + }, + "stateVariables": { + "FULFILLMENT_GAS_LIMIT": { + "details": "Depends on the code that is executed and the number of words requestedso XXX is a safe default for this example contract. Test and adjustthis limit based on the size of the request and the processing of thecallback request in the fulfillRandomWords() function.The fee paid to start the lottery needs to be sufficient to pay for the gas limit" + }, + "MAX_PARTICIPANTS": { + "details": "It is important to limit the total jackpot (by limiting the number ofparticipants) to guarantee the economic incentive of a collatorto avoid trying to influence the pseudo-random(See Randomness.sol for more details)" + }, + "MIN_FEE": { + "details": "This does not guarantee that there will be enough fee to pay for thegas used by the fulfillment. Ideally it should be over-estimatedconsidering possible fluctuation of the gas price.Additional fee will be refunded to the caller" + }, + "NUM_WINNERS": { + "details": "This number corresponds to how many random words will requestedCannot exceed MAX_RANDOM_WORDS" + }, + "VRF_BLOCKS_DELAY": { + "details": "The MIN_VRF_BLOCKS_DELAY provides a minimum number that is safe enough forgames with low economical value at stake.Increasing the delay reduces slightly the probability (already very low)of a collator being able to predict the pseudo-random number" + }, + "globalRequestCount": { + "details": "This number is used as a salt to make it unique for each request" + } + }, + "version": 1 + }, + "evm": { + "assembly": " /* \"main.sol\":270:11638 contract RandomnessLotteryDemo is RandomnessConsumer {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":431:473 0x0000000000000000000000000000000000000809 */\n 0x0809\n /* \"main.sol\":381:474 Randomness public randomness =... */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":3063:3069 100000 */\n 0x0186a0\n /* \"main.sol\":3025:3069 uint64 public FULFILLMENT_GAS_LIMIT = 100000 */\n 0x00\n exp(0x0100, 0x14)\n dup2\n sload\n dup2\n 0xffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":3486:3492 1 gwei */\n 0x3b9aca00\n /* \"main.sol\":3462:3483 FULFILLMENT_GAS_LIMIT */\n 0x00\n 0x14\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffff\n and\n /* \"main.sol\":3462:3492 FULFILLMENT_GAS_LIMIT * 1 gwei */\n tag_1\n swap2\n swap1\n tag_2\n jump\t// in\ntag_1:\n /* \"main.sol\":3437:3492 uint256 public MIN_FEE = FULFILLMENT_GAS_LIMIT * 1 gwei */\n 0xffffffffffffffff\n and\n 0x01\n sstore\n /* \"main.sol\":3685:3686 2 */\n 0x02\n /* \"main.sol\":3658:3686 uint8 public NUM_WINNERS = 2 */\n dup1\n exp(0x0100, 0x00)\n dup2\n sload\n dup2\n 0xff\n mul\n not\n and\n swap1\n dup4\n 0xff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"precompiles/randomness/Randomness.sol\":292:293 */\n 0x02\n /* \"main.sol\":4095:4148 uint32 public VRF_BLOCKS_DELAY = MIN_VRF_BLOCKS_DELAY */\n dup1\n exp(0x0100, 0x01)\n dup2\n sload\n dup2\n 0xffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":4261:4262 3 */\n 0x03\n /* \"main.sol\":4227:4262 uint256 public MIN_PARTICIPANTS = 3 */\n dup1\n sstore\n /* \"main.sol\":4648:4650 20 */\n 0x14\n /* \"main.sol\":4614:4650 uint256 public MAX_PARTICIPANTS = 20 */\n 0x04\n sstore\n /* \"main.sol\":4779:4786 1 ether */\n 0x0de0b6b3a7640000\n /* \"main.sol\":4744:4786 uint256 public PARTICIPATION_FEE = 1 ether */\n 0x05\n sstore\n /* \"main.sol\":4875:4928 bytes32 public SALT_PREFIX = \"my_demo_salt_change_me\" */\n sstore(0x06, 0x6d795f64656d6f5f73616c745f6368616e67655f6d6500000000000000000000)\n /* \"main.sol\":5511:6203 constructor(Randomness.RandomnessSource source)... */\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_3\n swap2\n swap1\n tag_4\n jump\t// in\ntag_3:\n /* \"main.sol\":5750:5773 uint256 requiredDeposit */\n 0x00\n /* \"main.sol\":5776:5795 1000000000000000000 */\n 0x0de0b6b3a7640000\n /* \"main.sol\":5750:5795 uint256 requiredDeposit = 1000000000000000000 */\n swap1\n pop\n /* \"main.sol\":5872:5887 requiredDeposit */\n dup1\n /* \"main.sol\":5860:5869 msg.value */\n callvalue\n /* \"main.sol\":5860:5887 msg.value < requiredDeposit */\n lt\n /* \"main.sol\":5856:5962 if (msg.value < requiredDeposit) {... */\n iszero\n tag_7\n jumpi\n /* \"main.sol\":5924:5933 msg.value */\n callvalue\n /* \"main.sol\":5935:5950 requiredDeposit */\n dup2\n /* \"main.sol\":5910:5951 DepositTooLow(msg.value, requiredDeposit) */\n mload(0x40)\n 0xea691a4b00000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_8\n swap3\n swap2\n swap1\n tag_9\n jump\t// in\ntag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":5856:5962 if (msg.value < requiredDeposit) {... */\ntag_7:\n /* \"main.sol\":5991:5997 source */\n dup2\n /* \"main.sol\":5972:5988 randomnessSource */\n 0x0b\n 0x14\n /* \"main.sol\":5972:5997 randomnessSource = source */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xff\n mul\n not\n and\n swap1\n dup4\n 0x01\n dup2\n gt\n iszero\n tag_10\n jumpi\n tag_11\n tag_12\n jump\t// in\ntag_11:\ntag_10:\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":6015:6025 msg.sender */\n caller\n /* \"main.sol\":6007:6012 owner */\n 0x0b\n 0x00\n /* \"main.sol\":6007:6025 owner = msg.sender */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":6056:6057 0 */\n 0x00\n /* \"main.sol\":6035:6053 globalRequestCount */\n 0x07\n /* \"main.sol\":6035:6057 globalRequestCount = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":6077:6078 0 */\n 0x00\n /* \"main.sol\":6067:6074 jackpot */\n 0x0a\n /* \"main.sol\":6067:6078 jackpot = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":6187:6196 2**64 - 1 */\n 0xffffffffffffffff\n /* \"main.sol\":6175:6184 requestId */\n 0x08\n /* \"main.sol\":6175:6196 requestId = 2**64 - 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":5608:6203 {... */\n pop\n /* \"main.sol\":5511:6203 constructor(Randomness.RandomnessSource source)... */\n pop\n /* \"main.sol\":270:11638 contract RandomnessLotteryDemo is RandomnessConsumer {... */\n jump(tag_13)\n /* \"#utility.yul\":7:108 */\ntag_14:\n /* \"#utility.yul\":43:50 */\n 0x00\n /* \"#utility.yul\":83:101 */\n 0xffffffffffffffff\n /* \"#utility.yul\":76:81 */\n dup3\n /* \"#utility.yul\":72:102 */\n and\n /* \"#utility.yul\":61:102 */\n swap1\n pop\n /* \"#utility.yul\":7:108 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":114:294 */\ntag_15:\n /* \"#utility.yul\":162:239 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":159:160 */\n 0x00\n /* \"#utility.yul\":152:240 */\n mstore\n /* \"#utility.yul\":259:263 */\n 0x11\n /* \"#utility.yul\":256:257 */\n 0x04\n /* \"#utility.yul\":249:264 */\n mstore\n /* \"#utility.yul\":283:287 */\n 0x24\n /* \"#utility.yul\":280:281 */\n 0x00\n /* \"#utility.yul\":273:288 */\n revert\n /* \"#utility.yul\":300:597 */\ntag_2:\n /* \"#utility.yul\":339:346 */\n 0x00\n /* \"#utility.yul\":362:381 */\n tag_27\n /* \"#utility.yul\":379:380 */\n dup3\n /* \"#utility.yul\":362:381 */\n tag_14\n jump\t// in\ntag_27:\n /* \"#utility.yul\":357:381 */\n swap2\n pop\n /* \"#utility.yul\":395:414 */\n tag_28\n /* \"#utility.yul\":412:413 */\n dup4\n /* \"#utility.yul\":395:414 */\n tag_14\n jump\t// in\ntag_28:\n /* \"#utility.yul\":390:414 */\n swap3\n pop\n /* \"#utility.yul\":534:535 */\n dup2\n /* \"#utility.yul\":514:532 */\n 0xffffffffffffffff\n /* \"#utility.yul\":510:536 */\n div\n /* \"#utility.yul\":507:508 */\n dup4\n /* \"#utility.yul\":504:537 */\n gt\n /* \"#utility.yul\":499:500 */\n dup3\n /* \"#utility.yul\":492:501 */\n iszero\n /* \"#utility.yul\":485:502 */\n iszero\n /* \"#utility.yul\":481:538 */\n and\n /* \"#utility.yul\":478:561 */\n iszero\n tag_29\n jumpi\n /* \"#utility.yul\":541:559 */\n tag_30\n tag_15\n jump\t// in\ntag_30:\n /* \"#utility.yul\":478:561 */\ntag_29:\n /* \"#utility.yul\":589:590 */\n dup3\n /* \"#utility.yul\":586:587 */\n dup3\n /* \"#utility.yul\":582:591 */\n mul\n /* \"#utility.yul\":571:591 */\n swap1\n pop\n /* \"#utility.yul\":300:597 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":684:801 */\ntag_17:\n /* \"#utility.yul\":793:794 */\n 0x00\n /* \"#utility.yul\":790:791 */\n dup1\n /* \"#utility.yul\":783:795 */\n revert\n /* \"#utility.yul\":930:1049 */\ntag_19:\n /* \"#utility.yul\":1023:1024 */\n 0x02\n /* \"#utility.yul\":1016:1021 */\n dup2\n /* \"#utility.yul\":1013:1025 */\n lt\n /* \"#utility.yul\":1003:1043 */\n tag_35\n jumpi\n /* \"#utility.yul\":1039:1040 */\n 0x00\n /* \"#utility.yul\":1036:1037 */\n dup1\n /* \"#utility.yul\":1029:1041 */\n revert\n /* \"#utility.yul\":1003:1043 */\ntag_35:\n /* \"#utility.yul\":930:1049 */\n pop\n jump\t// out\n /* \"#utility.yul\":1055:1238 */\ntag_20:\n /* \"#utility.yul\":1132:1137 */\n 0x00\n /* \"#utility.yul\":1163:1169 */\n dup2\n /* \"#utility.yul\":1157:1170 */\n mload\n /* \"#utility.yul\":1148:1170 */\n swap1\n pop\n /* \"#utility.yul\":1179:1232 */\n tag_37\n /* \"#utility.yul\":1226:1231 */\n dup2\n /* \"#utility.yul\":1179:1232 */\n tag_19\n jump\t// in\ntag_37:\n /* \"#utility.yul\":1055:1238 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1244:1635 */\ntag_4:\n /* \"#utility.yul\":1334:1340 */\n 0x00\n /* \"#utility.yul\":1383:1385 */\n 0x20\n /* \"#utility.yul\":1371:1380 */\n dup3\n /* \"#utility.yul\":1362:1369 */\n dup5\n /* \"#utility.yul\":1358:1381 */\n sub\n /* \"#utility.yul\":1354:1386 */\n slt\n /* \"#utility.yul\":1351:1470 */\n iszero\n tag_39\n jumpi\n /* \"#utility.yul\":1389:1468 */\n tag_40\n tag_17\n jump\t// in\ntag_40:\n /* \"#utility.yul\":1351:1470 */\ntag_39:\n /* \"#utility.yul\":1509:1510 */\n 0x00\n /* \"#utility.yul\":1534:1618 */\n tag_41\n /* \"#utility.yul\":1610:1617 */\n dup5\n /* \"#utility.yul\":1601:1607 */\n dup3\n /* \"#utility.yul\":1590:1599 */\n dup6\n /* \"#utility.yul\":1586:1608 */\n add\n /* \"#utility.yul\":1534:1618 */\n tag_20\n jump\t// in\ntag_41:\n /* \"#utility.yul\":1524:1618 */\n swap2\n pop\n /* \"#utility.yul\":1480:1628 */\n pop\n /* \"#utility.yul\":1244:1635 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1641:1718 */\ntag_21:\n /* \"#utility.yul\":1678:1685 */\n 0x00\n /* \"#utility.yul\":1707:1712 */\n dup2\n /* \"#utility.yul\":1696:1712 */\n swap1\n pop\n /* \"#utility.yul\":1641:1718 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1724:1842 */\ntag_22:\n /* \"#utility.yul\":1811:1835 */\n tag_44\n /* \"#utility.yul\":1829:1834 */\n dup2\n /* \"#utility.yul\":1811:1835 */\n tag_21\n jump\t// in\ntag_44:\n /* \"#utility.yul\":1806:1809 */\n dup3\n /* \"#utility.yul\":1799:1836 */\n mstore\n /* \"#utility.yul\":1724:1842 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1848:2180 */\ntag_9:\n /* \"#utility.yul\":1969:1973 */\n 0x00\n /* \"#utility.yul\":2007:2009 */\n 0x40\n /* \"#utility.yul\":1996:2005 */\n dup3\n /* \"#utility.yul\":1992:2010 */\n add\n /* \"#utility.yul\":1984:2010 */\n swap1\n pop\n /* \"#utility.yul\":2020:2091 */\n tag_46\n /* \"#utility.yul\":2088:2089 */\n 0x00\n /* \"#utility.yul\":2077:2086 */\n dup4\n /* \"#utility.yul\":2073:2090 */\n add\n /* \"#utility.yul\":2064:2070 */\n dup6\n /* \"#utility.yul\":2020:2091 */\n tag_22\n jump\t// in\ntag_46:\n /* \"#utility.yul\":2101:2173 */\n tag_47\n /* \"#utility.yul\":2169:2171 */\n 0x20\n /* \"#utility.yul\":2158:2167 */\n dup4\n /* \"#utility.yul\":2154:2172 */\n add\n /* \"#utility.yul\":2145:2151 */\n dup5\n /* \"#utility.yul\":2101:2173 */\n tag_22\n jump\t// in\ntag_47:\n /* \"#utility.yul\":1848:2180 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2186:2366 */\ntag_12:\n /* \"#utility.yul\":2234:2311 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2231:2232 */\n 0x00\n /* \"#utility.yul\":2224:2312 */\n mstore\n /* \"#utility.yul\":2331:2335 */\n 0x21\n /* \"#utility.yul\":2328:2329 */\n 0x04\n /* \"#utility.yul\":2321:2336 */\n mstore\n /* \"#utility.yul\":2355:2359 */\n 0x24\n /* \"#utility.yul\":2352:2353 */\n 0x00\n /* \"#utility.yul\":2345:2360 */\n revert\n /* \"main.sol\":270:11638 contract RandomnessLotteryDemo is RandomnessConsumer {... */\ntag_13:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":270:11638 contract RandomnessLotteryDemo is RandomnessConsumer {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x3a984bc5\n gt\n tag_20\n jumpi\n dup1\n 0x76c7a3c7\n gt\n tag_21\n jumpi\n dup1\n 0x76c7a3c7\n eq\n tag_15\n jumpi\n dup1\n 0x7d5a9c5a\n eq\n tag_16\n jumpi\n dup1\n 0xcad0338c\n eq\n tag_17\n jumpi\n dup1\n 0xd11711a2\n eq\n tag_18\n jumpi\n dup1\n 0xf3baf070\n eq\n tag_19\n jumpi\n jump(tag_1)\n tag_21:\n dup1\n 0x3a984bc5\n eq\n tag_11\n jumpi\n dup1\n 0x49943a13\n eq\n tag_12\n jumpi\n dup1\n 0x51a8e298\n eq\n tag_13\n jumpi\n dup1\n 0x6b31ee01\n eq\n tag_14\n jumpi\n jump(tag_1)\n tag_20:\n dup1\n 0x1fe543e3\n gt\n tag_22\n jumpi\n dup1\n 0x1fe543e3\n eq\n tag_6\n jumpi\n dup1\n 0x200d2ed2\n eq\n tag_7\n jumpi\n dup1\n 0x2b855d19\n eq\n tag_8\n jumpi\n dup1\n 0x35c1d349\n eq\n tag_9\n jumpi\n dup1\n 0x36013189\n eq\n tag_10\n jumpi\n jump(tag_1)\n tag_22:\n dup1\n 0x6d6cae\n eq\n tag_2\n jumpi\n dup1\n 0x081275d4\n eq\n tag_3\n jumpi\n dup1\n 0x160344e2\n eq\n tag_4\n jumpi\n dup1\n 0x17a47282\n eq\n tag_5\n jumpi\n tag_1:\n 0x00\n dup1\n revert\n /* \"main.sol\":5138:5162 uint256 public requestId */\n tag_2:\n callvalue\n dup1\n iszero\n tag_23\n jumpi\n 0x00\n dup1\n revert\n tag_23:\n pop\n tag_24\n tag_25\n jump\t// in\n tag_24:\n mload(0x40)\n tag_26\n swap2\n swap1\n tag_27\n jump\t// in\n tag_26:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":10043:10158 function increaseRequestFee() external payable {... */\n tag_3:\n tag_28\n tag_29\n jump\t// in\n tag_28:\n stop\n /* \"main.sol\":7334:9853 function startLottery() external payable onlyOwner {... */\n tag_4:\n tag_30\n tag_31\n jump\t// in\n tag_30:\n stop\n /* \"main.sol\":4875:4928 bytes32 public SALT_PREFIX = \"my_demo_salt_change_me\" */\n tag_5:\n callvalue\n dup1\n iszero\n tag_32\n jumpi\n 0x00\n dup1\n revert\n tag_32:\n pop\n tag_33\n tag_34\n jump\t// in\n tag_33:\n mload(0x40)\n tag_35\n swap2\n swap1\n tag_36\n jump\t// in\n tag_35:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5871:6280 */\n tag_6:\n callvalue\n dup1\n iszero\n tag_37\n jumpi\n 0x00\n dup1\n revert\n tag_37:\n pop\n tag_38\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_39\n swap2\n swap1\n tag_40\n jump\t// in\n tag_39:\n tag_41\n jump\t// in\n tag_38:\n stop\n /* \"main.sol\":6209:6764 function status() external view returns (LotteryStatus) {... */\n tag_7:\n callvalue\n dup1\n iszero\n tag_42\n jumpi\n 0x00\n dup1\n revert\n tag_42:\n pop\n tag_43\n tag_44\n jump\t// in\n tag_43:\n mload(0x40)\n tag_45\n swap2\n swap1\n tag_46\n jump\t// in\n tag_45:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5059:5092 uint256 public globalRequestCount */\n tag_8:\n callvalue\n dup1\n iszero\n tag_47\n jumpi\n 0x00\n dup1\n revert\n tag_47:\n pop\n tag_48\n tag_49\n jump\t// in\n tag_48:\n mload(0x40)\n tag_50\n swap2\n swap1\n tag_27\n jump\t// in\n tag_50:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5218:5247 address[] public participants */\n tag_9:\n callvalue\n dup1\n iszero\n tag_51\n jumpi\n 0x00\n dup1\n revert\n tag_51:\n pop\n tag_52\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_53\n swap2\n swap1\n tag_54\n jump\t// in\n tag_53:\n tag_55\n jump\t// in\n tag_52:\n mload(0x40)\n tag_56\n swap2\n swap1\n tag_57\n jump\t// in\n tag_56:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":381:474 Randomness public randomness =... */\n tag_10:\n callvalue\n dup1\n iszero\n tag_58\n jumpi\n 0x00\n dup1\n revert\n tag_58:\n pop\n tag_59\n tag_60\n jump\t// in\n tag_59:\n mload(0x40)\n tag_61\n swap2\n swap1\n tag_62\n jump\t// in\n tag_61:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4227:4262 uint256 public MIN_PARTICIPANTS = 3 */\n tag_11:\n callvalue\n dup1\n iszero\n tag_63\n jumpi\n 0x00\n dup1\n revert\n tag_63:\n pop\n tag_64\n tag_65\n jump\t// in\n tag_64:\n mload(0x40)\n tag_66\n swap2\n swap1\n tag_27\n jump\t// in\n tag_66:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4744:4786 uint256 public PARTICIPATION_FEE = 1 ether */\n tag_12:\n callvalue\n dup1\n iszero\n tag_67\n jumpi\n 0x00\n dup1\n revert\n tag_67:\n pop\n tag_68\n tag_69\n jump\t// in\n tag_68:\n mload(0x40)\n tag_70\n swap2\n swap1\n tag_27\n jump\t// in\n tag_70:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":3025:3069 uint64 public FULFILLMENT_GAS_LIMIT = 100000 */\n tag_13:\n callvalue\n dup1\n iszero\n tag_71\n jumpi\n 0x00\n dup1\n revert\n tag_71:\n pop\n tag_72\n tag_73\n jump\t// in\n tag_72:\n mload(0x40)\n tag_74\n swap2\n swap1\n tag_75\n jump\t// in\n tag_74:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5322:5344 uint256 public jackpot */\n tag_14:\n callvalue\n dup1\n iszero\n tag_76\n jumpi\n 0x00\n dup1\n revert\n tag_76:\n pop\n tag_77\n tag_78\n jump\t// in\n tag_77:\n mload(0x40)\n tag_79\n swap2\n swap1\n tag_27\n jump\t// in\n tag_79:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":3437:3492 uint256 public MIN_FEE = FULFILLMENT_GAS_LIMIT * 1 gwei */\n tag_15:\n callvalue\n dup1\n iszero\n tag_80\n jumpi\n 0x00\n dup1\n revert\n tag_80:\n pop\n tag_81\n tag_82\n jump\t// in\n tag_81:\n mload(0x40)\n tag_83\n swap2\n swap1\n tag_27\n jump\t// in\n tag_83:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4095:4148 uint32 public VRF_BLOCKS_DELAY = MIN_VRF_BLOCKS_DELAY */\n tag_16:\n callvalue\n dup1\n iszero\n tag_84\n jumpi\n 0x00\n dup1\n revert\n tag_84:\n pop\n tag_85\n tag_86\n jump\t// in\n tag_85:\n mload(0x40)\n tag_87\n swap2\n swap1\n tag_88\n jump\t// in\n tag_87:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":3658:3686 uint8 public NUM_WINNERS = 2 */\n tag_17:\n callvalue\n dup1\n iszero\n tag_89\n jumpi\n 0x00\n dup1\n revert\n tag_89:\n pop\n tag_90\n tag_91\n jump\t// in\n tag_90:\n mload(0x40)\n tag_92\n swap2\n swap1\n tag_93\n jump\t// in\n tag_92:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6770:7328 function participate() external payable {... */\n tag_18:\n tag_94\n tag_95\n jump\t// in\n tag_94:\n stop\n /* \"main.sol\":4614:4650 uint256 public MAX_PARTICIPANTS = 20 */\n tag_19:\n callvalue\n dup1\n iszero\n tag_96\n jumpi\n 0x00\n dup1\n revert\n tag_96:\n pop\n tag_97\n tag_98\n jump\t// in\n tag_97:\n mload(0x40)\n tag_99\n swap2\n swap1\n tag_27\n jump\t// in\n tag_99:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5138:5162 uint256 public requestId */\n tag_25:\n sload(0x08)\n dup2\n jump\t// out\n /* \"main.sol\":10043:10158 function increaseRequestFee() external payable {... */\n tag_29:\n /* \"main.sol\":10100:10110 randomness */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":10100:10129 randomness.increaseRequestFee */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xd0408a7f\n /* \"main.sol\":10130:10139 requestId */\n sload(0x08)\n /* \"main.sol\":10141:10150 msg.value */\n callvalue\n /* \"main.sol\":10100:10151 randomness.increaseRequestFee(requestId, msg.value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_101\n swap3\n swap2\n swap1\n tag_102\n jump\t// in\n tag_101:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_103\n jumpi\n 0x00\n dup1\n revert\n tag_103:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_105\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_105:\n pop\n pop\n pop\n pop\n /* \"main.sol\":10043:10158 function increaseRequestFee() external payable {... */\n jump\t// out\n /* \"main.sol\":7334:9853 function startLottery() external payable onlyOwner {... */\n tag_31:\n /* \"main.sol\":11612:11617 owner */\n 0x0b\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11598:11617 msg.sender == owner */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11598:11608 msg.sender */\n caller\n /* \"main.sol\":11598:11617 msg.sender == owner */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n eq\n /* \"main.sol\":11590:11618 require(msg.sender == owner) */\n tag_107\n jumpi\n 0x00\n dup1\n revert\n tag_107:\n /* \"main.sol\":7533:7570 Randomness.RequestStatus.DoesNotExist */\n 0x00\n /* \"main.sol\":7479:7570 randomness.getRequestStatus(requestId) !=... */\n 0x03\n dup2\n gt\n iszero\n tag_109\n jumpi\n tag_110\n tag_111\n jump\t// in\n tag_110:\n tag_109:\n /* \"main.sol\":7479:7489 randomness */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7479:7506 randomness.getRequestStatus */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xd8a4676f\n /* \"main.sol\":7507:7516 requestId */\n sload(0x08)\n /* \"main.sol\":7479:7517 randomness.getRequestStatus(requestId) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_112\n swap2\n swap1\n tag_27\n jump\t// in\n tag_112:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_114\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_114:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_115\n swap2\n swap1\n tag_116\n jump\t// in\n tag_115:\n /* \"main.sol\":7479:7570 randomness.getRequestStatus(requestId) !=... */\n 0x03\n dup2\n gt\n iszero\n tag_117\n jumpi\n tag_118\n tag_111\n jump\t// in\n tag_118:\n tag_117:\n eq\n /* \"main.sol\":7462:7633 if (... */\n tag_119\n jumpi\n /* \"main.sol\":7602:7622 WaitingFulfillment() */\n mload(0x40)\n 0x4edbe0e300000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":7462:7633 if (... */\n tag_119:\n /* \"main.sol\":7669:7685 MIN_PARTICIPANTS */\n sload(0x03)\n /* \"main.sol\":7647:7659 participants */\n 0x09\n /* \"main.sol\":7647:7666 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":7647:7685 participants.length < MIN_PARTICIPANTS */\n lt\n /* \"main.sol\":7643:7779 if (participants.length < MIN_PARTICIPANTS) {... */\n iszero\n tag_120\n jumpi\n /* \"main.sol\":7730:7742 participants */\n 0x09\n /* \"main.sol\":7730:7749 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":7751:7767 MIN_PARTICIPANTS */\n sload(0x03)\n /* \"main.sol\":7708:7768 NotEnoughParticipants(participants.length, MIN_PARTICIPANTS) */\n mload(0x40)\n 0x5fdd6f4900000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_121\n swap3\n swap2\n swap1\n tag_102\n jump\t// in\n tag_121:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":7643:7779 if (participants.length < MIN_PARTICIPANTS) {... */\n tag_120:\n /* \"main.sol\":7815:7831 MAX_PARTICIPANTS */\n sload(0x04)\n /* \"main.sol\":7792:7804 participants */\n 0x09\n /* \"main.sol\":7792:7811 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":7792:7831 participants.length >= MAX_PARTICIPANTS */\n lt\n /* \"main.sol\":7788:7923 if (participants.length >= MAX_PARTICIPANTS) {... */\n tag_122\n jumpi\n /* \"main.sol\":7874:7886 participants */\n 0x09\n /* \"main.sol\":7874:7893 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":7895:7911 MAX_PARTICIPANTS */\n sload(0x04)\n /* \"main.sol\":7854:7912 TooManyParticipants(participants.length, MAX_PARTICIPANTS) */\n mload(0x40)\n 0xe318577800000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_123\n swap3\n swap2\n swap1\n tag_102\n jump\t// in\n tag_123:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":7788:7923 if (participants.length >= MAX_PARTICIPANTS) {... */\n tag_122:\n /* \"main.sol\":7933:7944 uint256 fee */\n 0x00\n /* \"main.sol\":7947:7956 msg.value */\n callvalue\n /* \"main.sol\":7933:7956 uint256 fee = msg.value */\n swap1\n pop\n /* \"main.sol\":7976:7983 MIN_FEE */\n sload(0x01)\n /* \"main.sol\":7970:7973 fee */\n dup2\n /* \"main.sol\":7970:7983 fee < MIN_FEE */\n lt\n /* \"main.sol\":7966:8043 if (fee < MIN_FEE) {... */\n iszero\n tag_124\n jumpi\n /* \"main.sol\":8019:8022 fee */\n dup1\n /* \"main.sol\":8024:8031 MIN_FEE */\n sload(0x01)\n /* \"main.sol\":8006:8032 NotEnoughFee(fee, MIN_FEE) */\n mload(0x40)\n 0x0167202800000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_125\n swap3\n swap2\n swap1\n tag_102\n jump\t// in\n tag_125:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":7966:8043 if (fee < MIN_FEE) {... */\n tag_124:\n /* \"main.sol\":8256:8279 uint256 requiredDeposit */\n 0x00\n /* \"main.sol\":8282:8301 1000000000000000000 */\n 0x0de0b6b3a7640000\n /* \"main.sol\":8256:8301 uint256 requiredDeposit = 1000000000000000000 */\n swap1\n pop\n /* \"main.sol\":8400:8415 requiredDeposit */\n dup1\n /* \"main.sol\":8390:8397 jackpot */\n sload(0x0a)\n /* \"main.sol\":8390:8415 jackpot + requiredDeposit */\n tag_126\n swap2\n swap1\n tag_127\n jump\t// in\n tag_126:\n /* \"main.sol\":8366:8387 address(this).balance */\n selfbalance\n /* \"main.sol\":8366:8415 address(this).balance < jackpot + requiredDeposit */\n lt\n /* \"main.sol\":8362:8558 if (address(this).balance < jackpot + requiredDeposit) {... */\n iszero\n tag_128\n jumpi\n /* \"main.sol\":8493:8500 jackpot */\n sload(0x0a)\n /* \"main.sol\":8469:8490 address(this).balance */\n selfbalance\n /* \"main.sol\":8469:8500 address(this).balance - jackpot */\n tag_129\n swap2\n swap1\n tag_130\n jump\t// in\n tag_129:\n /* \"main.sol\":8518:8533 requiredDeposit */\n dup2\n /* \"main.sol\":8438:8547 DepositTooLow(... */\n mload(0x40)\n 0xea691a4b00000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_131\n swap3\n swap2\n swap1\n tag_102\n jump\t// in\n tag_131:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":8362:8558 if (address(this).balance < jackpot + requiredDeposit) {... */\n tag_128:\n /* \"main.sol\":8592:8628 Randomness.RandomnessSource.LocalVRF */\n 0x00\n /* \"main.sol\":8572:8628 randomnessSource == Randomness.RandomnessSource.LocalVRF */\n 0x01\n dup2\n gt\n iszero\n tag_132\n jumpi\n tag_133\n tag_111\n jump\t// in\n tag_133:\n tag_132:\n /* \"main.sol\":8572:8588 randomnessSource */\n 0x0b\n 0x14\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xff\n and\n /* \"main.sol\":8572:8628 randomnessSource == Randomness.RandomnessSource.LocalVRF */\n 0x01\n dup2\n gt\n iszero\n tag_134\n jumpi\n tag_135\n tag_111\n jump\t// in\n tag_135:\n tag_134:\n eq\n /* \"main.sol\":8568:9847 if (randomnessSource == Randomness.RandomnessSource.LocalVRF) {... */\n iszero\n tag_136\n jumpi\n /* \"main.sol\":8957:8967 randomness */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":8957:8994 randomness.requestLocalVRFRandomWords */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x9478430c\n /* \"main.sol\":9012:9022 msg.sender */\n caller\n /* \"main.sol\":9040:9043 fee */\n dup5\n /* \"main.sol\":9061:9082 FULFILLMENT_GAS_LIMIT */\n 0x00\n 0x14\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffff\n and\n /* \"main.sol\":9122:9140 globalRequestCount */\n 0x07\n 0x00\n /* \"main.sol\":9122:9142 globalRequestCount++ */\n dup2\n sload\n dup1\n swap3\n swap2\n swap1\n tag_137\n swap1\n tag_138\n jump\t// in\n tag_137:\n swap2\n swap1\n pop\n sstore\n /* \"main.sol\":9114:9143 bytes32(globalRequestCount++) */\n 0x00\n shl\n /* \"main.sol\":9100:9111 SALT_PREFIX */\n sload(0x06)\n /* \"main.sol\":9100:9143 SALT_PREFIX ^ bytes32(globalRequestCount++) */\n xor\n /* \"main.sol\":9161:9172 NUM_WINNERS */\n 0x02\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xff\n and\n /* \"main.sol\":9190:9206 VRF_BLOCKS_DELAY */\n 0x02\n 0x01\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffff\n and\n /* \"main.sol\":8957:9220 randomness.requestLocalVRFRandomWords(... */\n mload(0x40)\n dup8\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_139\n swap7\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_140\n jump\t// in\n tag_139:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_142\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_142:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_143\n swap2\n swap1\n tag_144\n jump\t// in\n tag_143:\n /* \"main.sol\":8945:8954 requestId */\n 0x08\n /* \"main.sol\":8945:9220 requestId = randomness.requestLocalVRFRandomWords(... */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":8568:9847 if (randomnessSource == Randomness.RandomnessSource.LocalVRF) {... */\n jump(tag_145)\n tag_136:\n /* \"main.sol\":9601:9611 randomness */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":9601:9644 randomness.requestRelayBabeEpochRandomWords */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x33c14a63\n /* \"main.sol\":9662:9672 msg.sender */\n caller\n /* \"main.sol\":9690:9693 fee */\n dup5\n /* \"main.sol\":9711:9732 FULFILLMENT_GAS_LIMIT */\n 0x00\n 0x14\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffff\n and\n /* \"main.sol\":9772:9790 globalRequestCount */\n 0x07\n 0x00\n /* \"main.sol\":9772:9792 globalRequestCount++ */\n dup2\n sload\n dup1\n swap3\n swap2\n swap1\n tag_146\n swap1\n tag_138\n jump\t// in\n tag_146:\n swap2\n swap1\n pop\n sstore\n /* \"main.sol\":9764:9793 bytes32(globalRequestCount++) */\n 0x00\n shl\n /* \"main.sol\":9750:9761 SALT_PREFIX */\n sload(0x06)\n /* \"main.sol\":9750:9793 SALT_PREFIX ^ bytes32(globalRequestCount++) */\n xor\n /* \"main.sol\":9811:9822 NUM_WINNERS */\n 0x02\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xff\n and\n /* \"main.sol\":9601:9836 randomness.requestRelayBabeEpochRandomWords(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_147\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_148\n jump\t// in\n tag_147:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_150\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_150:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_151\n swap2\n swap1\n tag_144\n jump\t// in\n tag_151:\n /* \"main.sol\":9589:9598 requestId */\n 0x08\n /* \"main.sol\":9589:9836 requestId = randomness.requestRelayBabeEpochRandomWords(... */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":8568:9847 if (randomnessSource == Randomness.RandomnessSource.LocalVRF) {... */\n tag_145:\n /* \"main.sol\":7385:9853 {... */\n pop\n pop\n /* \"main.sol\":7334:9853 function startLottery() external payable onlyOwner {... */\n jump\t// out\n /* \"main.sol\":4875:4928 bytes32 public SALT_PREFIX = \"my_demo_salt_change_me\" */\n tag_34:\n sload(0x06)\n dup2\n jump\t// out\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5871:6280 */\n tag_41:\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6010:6052 */\n 0x0809\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5996:6052 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5996:6006 */\n caller\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5996:6052 */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n eq\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5992:6222 */\n tag_153\n jumpi\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6127:6137 */\n caller\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6155:6197 */\n 0x0809\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6075:6211 */\n mload(0x40)\n 0xc68806f500000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_154\n swap3\n swap2\n swap1\n tag_155\n jump\t// in\n tag_154:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5992:6222 */\n tag_153:\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6231:6273 */\n tag_156\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6250:6259 */\n dup3\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6261:6272 */\n dup3\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6231:6249 */\n tag_157\n /* \"precompiles/randomness/RandomnessConsumer.sol\":6231:6273 */\n jump\t// in\n tag_156:\n /* \"precompiles/randomness/RandomnessConsumer.sol\":5871:6280 */\n pop\n pop\n jump\t// out\n /* \"main.sol\":6209:6764 function status() external view returns (LotteryStatus) {... */\n tag_44:\n /* \"main.sol\":6250:6263 LotteryStatus */\n 0x00\n /* \"main.sol\":6275:6313 Randomness.RequestStatus requestStatus */\n dup1\n /* \"main.sol\":6316:6326 randomness */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6316:6343 randomness.getRequestStatus */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xd8a4676f\n /* \"main.sol\":6357:6366 requestId */\n sload(0x08)\n /* \"main.sol\":6316:6376 randomness.getRequestStatus(... */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_159\n swap2\n swap1\n tag_27\n jump\t// in\n tag_159:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_161\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_161:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_162\n swap2\n swap1\n tag_116\n jump\t// in\n tag_162:\n /* \"main.sol\":6275:6376 Randomness.RequestStatus requestStatus = randomness.getRequestStatus(... */\n swap1\n pop\n /* \"main.sol\":6407:6444 Randomness.RequestStatus.DoesNotExist */\n 0x00\n /* \"main.sol\":6390:6444 requestStatus == Randomness.RequestStatus.DoesNotExist */\n 0x03\n dup2\n gt\n iszero\n tag_163\n jumpi\n tag_164\n tag_111\n jump\t// in\n tag_164:\n tag_163:\n /* \"main.sol\":6390:6403 requestStatus */\n dup2\n /* \"main.sol\":6390:6444 requestStatus == Randomness.RequestStatus.DoesNotExist */\n 0x03\n dup2\n gt\n iszero\n tag_165\n jumpi\n tag_166\n tag_111\n jump\t// in\n tag_166:\n tag_165:\n eq\n /* \"main.sol\":6386:6511 if (requestStatus == Randomness.RequestStatus.DoesNotExist) {... */\n iszero\n tag_167\n jumpi\n /* \"main.sol\":6467:6500 LotteryStatus.OpenForRegistration */\n 0x00\n /* \"main.sol\":6460:6500 return LotteryStatus.OpenForRegistration */\n swap2\n pop\n pop\n jump(tag_158)\n /* \"main.sol\":6386:6511 if (requestStatus == Randomness.RequestStatus.DoesNotExist) {... */\n tag_167:\n /* \"main.sol\":6554:6586 Randomness.RequestStatus.Pending */\n 0x01\n /* \"main.sol\":6537:6586 requestStatus == Randomness.RequestStatus.Pending */\n 0x03\n dup2\n gt\n iszero\n tag_168\n jumpi\n tag_169\n tag_111\n jump\t// in\n tag_169:\n tag_168:\n /* \"main.sol\":6537:6550 requestStatus */\n dup2\n /* \"main.sol\":6537:6586 requestStatus == Randomness.RequestStatus.Pending */\n 0x03\n dup2\n gt\n iszero\n tag_170\n jumpi\n tag_171\n tag_111\n jump\t// in\n tag_171:\n tag_170:\n eq\n /* \"main.sol\":6537:6649 requestStatus == Randomness.RequestStatus.Pending ||... */\n dup1\n tag_172\n jumpi\n pop\n /* \"main.sol\":6619:6649 Randomness.RequestStatus.Ready */\n 0x02\n /* \"main.sol\":6602:6649 requestStatus == Randomness.RequestStatus.Ready */\n 0x03\n dup2\n gt\n iszero\n tag_173\n jumpi\n tag_174\n tag_111\n jump\t// in\n tag_174:\n tag_173:\n /* \"main.sol\":6602:6615 requestStatus */\n dup2\n /* \"main.sol\":6602:6649 requestStatus == Randomness.RequestStatus.Ready */\n 0x03\n dup2\n gt\n iszero\n tag_175\n jumpi\n tag_176\n tag_111\n jump\t// in\n tag_176:\n tag_175:\n eq\n /* \"main.sol\":6537:6649 requestStatus == Randomness.RequestStatus.Pending ||... */\n tag_172:\n /* \"main.sol\":6520:6720 if (... */\n iszero\n tag_177\n jumpi\n /* \"main.sol\":6681:6709 LotteryStatus.RollingNumbers */\n 0x01\n /* \"main.sol\":6674:6709 return LotteryStatus.RollingNumbers */\n swap2\n pop\n pop\n jump(tag_158)\n /* \"main.sol\":6520:6720 if (... */\n tag_177:\n /* \"main.sol\":6736:6757 LotteryStatus.Expired */\n 0x02\n /* \"main.sol\":6729:6757 return LotteryStatus.Expired */\n swap2\n pop\n pop\n /* \"main.sol\":6209:6764 function status() external view returns (LotteryStatus) {... */\n tag_158:\n swap1\n jump\t// out\n /* \"main.sol\":5059:5092 uint256 public globalRequestCount */\n tag_49:\n sload(0x07)\n dup2\n jump\t// out\n /* \"main.sol\":5218:5247 address[] public participants */\n tag_55:\n 0x09\n dup2\n dup2\n sload\n dup2\n lt\n tag_178\n jumpi\n 0x00\n dup1\n revert\n tag_178:\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n 0x00\n swap2\n pop\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":381:474 Randomness public randomness =... */\n tag_60:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":4227:4262 uint256 public MIN_PARTICIPANTS = 3 */\n tag_65:\n sload(0x03)\n dup2\n jump\t// out\n /* \"main.sol\":4744:4786 uint256 public PARTICIPATION_FEE = 1 ether */\n tag_69:\n sload(0x05)\n dup2\n jump\t// out\n /* \"main.sol\":3025:3069 uint64 public FULFILLMENT_GAS_LIMIT = 100000 */\n tag_73:\n 0x00\n 0x14\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":5322:5344 uint256 public jackpot */\n tag_78:\n sload(0x0a)\n dup2\n jump\t// out\n /* \"main.sol\":3437:3492 uint256 public MIN_FEE = FULFILLMENT_GAS_LIMIT * 1 gwei */\n tag_82:\n sload(0x01)\n dup2\n jump\t// out\n /* \"main.sol\":4095:4148 uint32 public VRF_BLOCKS_DELAY = MIN_VRF_BLOCKS_DELAY */\n tag_86:\n 0x02\n 0x01\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":3658:3686 uint8 public NUM_WINNERS = 2 */\n tag_91:\n 0x02\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xff\n and\n dup2\n jump\t// out\n /* \"main.sol\":6770:7328 function participate() external payable {... */\n tag_95:\n /* \"main.sol\":6958:6995 Randomness.RequestStatus.DoesNotExist */\n 0x00\n /* \"main.sol\":6904:6995 randomness.getRequestStatus(requestId) !=... */\n 0x03\n dup2\n gt\n iszero\n tag_181\n jumpi\n tag_182\n tag_111\n jump\t// in\n tag_182:\n tag_181:\n /* \"main.sol\":6904:6914 randomness */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6904:6931 randomness.getRequestStatus */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xd8a4676f\n /* \"main.sol\":6932:6941 requestId */\n sload(0x08)\n /* \"main.sol\":6904:6942 randomness.getRequestStatus(requestId) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_183\n swap2\n swap1\n tag_27\n jump\t// in\n tag_183:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_185\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_185:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_186\n swap2\n swap1\n tag_116\n jump\t// in\n tag_186:\n /* \"main.sol\":6904:6995 randomness.getRequestStatus(requestId) !=... */\n 0x03\n dup2\n gt\n iszero\n tag_187\n jumpi\n tag_188\n tag_111\n jump\t// in\n tag_188:\n tag_187:\n eq\n /* \"main.sol\":6887:7058 if (... */\n tag_189\n jumpi\n /* \"main.sol\":7027:7047 WaitingFulfillment() */\n mload(0x40)\n 0x4edbe0e300000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":6887:7058 if (... */\n tag_189:\n /* \"main.sol\":7149:7166 PARTICIPATION_FEE */\n sload(0x05)\n /* \"main.sol\":7136:7145 msg.value */\n callvalue\n /* \"main.sol\":7136:7166 msg.value != PARTICIPATION_FEE */\n eq\n /* \"main.sol\":7132:7253 if (msg.value != PARTICIPATION_FEE) {... */\n tag_190\n jumpi\n /* \"main.sol\":7213:7222 msg.value */\n callvalue\n /* \"main.sol\":7224:7241 PARTICIPATION_FEE */\n sload(0x05)\n /* \"main.sol\":7189:7242 InvalidParticipationFee(msg.value, PARTICIPATION_FEE) */\n mload(0x40)\n 0xe6be2dc800000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_191\n swap3\n swap2\n swap1\n tag_102\n jump\t// in\n tag_191:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":7132:7253 if (msg.value != PARTICIPATION_FEE) {... */\n tag_190:\n /* \"main.sol\":7262:7274 participants */\n 0x09\n /* \"main.sol\":7280:7290 msg.sender */\n caller\n /* \"main.sol\":7262:7291 participants.push(msg.sender) */\n swap1\n dup1\n 0x01\n dup2\n sload\n add\n dup1\n dup3\n sstore\n dup1\n swap2\n pop\n pop\n 0x01\n swap1\n sub\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n 0x00\n swap1\n swap2\n swap1\n swap2\n swap1\n swap2\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":7312:7321 msg.value */\n callvalue\n /* \"main.sol\":7301:7308 jackpot */\n 0x0a\n 0x00\n /* \"main.sol\":7301:7321 jackpot += msg.value */\n dup3\n dup3\n sload\n tag_193\n swap2\n swap1\n tag_127\n jump\t// in\n tag_193:\n swap3\n pop\n pop\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":6770:7328 function participate() external payable {... */\n jump\t// out\n /* \"main.sol\":4614:4650 uint256 public MAX_PARTICIPANTS = 20 */\n tag_98:\n sload(0x04)\n dup2\n jump\t// out\n /* \"main.sol\":11389:11553 function fulfillRandomWords(... */\n tag_157:\n /* \"main.sol\":11522:11546 pickWinners(randomWords) */\n tag_195\n /* \"main.sol\":11534:11545 randomWords */\n dup2\n /* \"main.sol\":11522:11533 pickWinners */\n tag_196\n /* \"main.sol\":11522:11546 pickWinners(randomWords) */\n jump\t// in\n tag_195:\n /* \"main.sol\":11389:11553 function fulfillRandomWords(... */\n pop\n pop\n jump\t// out\n /* \"main.sol\":10234:11383 function pickWinners(uint256[] memory randomWords) internal {... */\n tag_196:\n /* \"main.sol\":10358:10378 uint256 totalWinners */\n 0x00\n /* \"main.sol\":10395:10407 participants */\n 0x09\n /* \"main.sol\":10395:10414 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":10381:10392 NUM_WINNERS */\n 0x02\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xff\n and\n /* \"main.sol\":10381:10414 NUM_WINNERS < participants.length */\n 0xff\n and\n lt\n /* \"main.sol\":10381:10474 NUM_WINNERS < participants.length... */\n tag_198\n jumpi\n /* \"main.sol\":10455:10467 participants */\n 0x09\n /* \"main.sol\":10455:10474 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":10381:10474 NUM_WINNERS < participants.length... */\n jump(tag_199)\n tag_198:\n /* \"main.sol\":10429:10440 NUM_WINNERS */\n 0x02\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xff\n and\n /* \"main.sol\":10381:10474 NUM_WINNERS < participants.length... */\n 0xff\n and\n tag_199:\n /* \"main.sol\":10358:10474 uint256 totalWinners = NUM_WINNERS < participants.length... */\n swap1\n pop\n /* \"main.sol\":10590:10611 uint256 amountAwarded */\n 0x00\n /* \"main.sol\":10624:10636 totalWinners */\n dup2\n /* \"main.sol\":10614:10621 jackpot */\n sload(0x0a)\n /* \"main.sol\":10614:10636 jackpot / totalWinners */\n tag_200\n swap2\n swap1\n tag_201\n jump\t// in\n tag_200:\n /* \"main.sol\":10590:10636 uint256 amountAwarded = jackpot / totalWinners */\n swap1\n pop\n /* \"main.sol\":10651:10700 Ended(participants.length, jackpot, totalWinners) */\n 0x94942738dac5813db86bc09e12c382aaa6824a675cfd6f834a8e2d5a964ac3c4\n /* \"main.sol\":10657:10669 participants */\n 0x09\n /* \"main.sol\":10657:10676 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":10678:10685 jackpot */\n sload(0x0a)\n /* \"main.sol\":10687:10699 totalWinners */\n dup5\n /* \"main.sol\":10651:10700 Ended(participants.length, jackpot, totalWinners) */\n mload(0x40)\n tag_202\n swap4\n swap3\n swap2\n swap1\n tag_203\n jump\t// in\n tag_202:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log1\n /* \"main.sol\":10715:10723 uint32 i */\n 0x00\n /* \"main.sol\":10710:11325 for (uint32 i = 0; i < totalWinners; i++) {... */\n tag_204:\n /* \"main.sol\":10733:10745 totalWinners */\n dup3\n /* \"main.sol\":10729:10730 i */\n dup2\n /* \"main.sol\":10729:10745 i < totalWinners */\n 0xffffffff\n and\n lt\n /* \"main.sol\":10710:11325 for (uint32 i = 0; i < totalWinners; i++) {... */\n iszero\n tag_205\n jumpi\n /* \"main.sol\":10885:10903 uint256 randomWord */\n 0x00\n /* \"main.sol\":10906:10917 randomWords */\n dup5\n /* \"main.sol\":10918:10919 i */\n dup3\n /* \"main.sol\":10906:10920 randomWords[i] */\n 0xffffffff\n and\n dup2\n mload\n dup2\n lt\n tag_207\n jumpi\n tag_208\n tag_209\n jump\t// in\n tag_208:\n tag_207:\n 0x20\n mul\n 0x20\n add\n add\n mload\n /* \"main.sol\":10885:10920 uint256 randomWord = randomWords[i] */\n swap1\n pop\n /* \"main.sol\":11016:11029 uint256 index */\n 0x00\n /* \"main.sol\":11045:11057 participants */\n 0x09\n /* \"main.sol\":11045:11064 participants.length */\n dup1\n sload\n swap1\n pop\n /* \"main.sol\":11032:11042 randomWord */\n dup3\n /* \"main.sol\":11032:11064 randomWord % participants.length */\n tag_210\n swap2\n swap1\n tag_211\n jump\t// in\n tag_210:\n /* \"main.sol\":11016:11064 uint256 index = randomWord % participants.length */\n swap1\n pop\n /* \"main.sol\":11078:11100 address payable winner */\n 0x00\n /* \"main.sol\":11111:11123 participants */\n 0x09\n /* \"main.sol\":11124:11129 index */\n dup3\n /* \"main.sol\":11111:11130 participants[index] */\n dup2\n sload\n dup2\n lt\n tag_212\n jumpi\n tag_213\n tag_209\n jump\t// in\n tag_213:\n tag_212:\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11078:11131 address payable winner = payable(participants[index]) */\n swap1\n pop\n /* \"main.sol\":11152:11164 participants */\n 0x09\n /* \"main.sol\":11165:11170 index */\n dup3\n /* \"main.sol\":11152:11171 participants[index] */\n dup2\n sload\n dup2\n lt\n tag_215\n jumpi\n tag_216\n tag_209\n jump\t// in\n tag_216:\n tag_215:\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n 0x00\n /* \"main.sol\":11145:11171 delete participants[index] */\n 0x0100\n exp\n dup2\n sload\n swap1\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n sstore\n /* \"main.sol\":11198:11204 winner */\n dup1\n /* \"main.sol\":11190:11232 Awarded(winner, randomWord, amountAwarded) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x7adb26a7cfdd051fb0b5aedd769aead9026d0a9ebcc7f9b4f0b34b19778243a3\n /* \"main.sol\":11206:11216 randomWord */\n dup5\n /* \"main.sol\":11218:11231 amountAwarded */\n dup8\n /* \"main.sol\":11190:11232 Awarded(winner, randomWord, amountAwarded) */\n mload(0x40)\n tag_218\n swap3\n swap2\n swap1\n tag_102\n jump\t// in\n tag_218:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log2\n /* \"main.sol\":11257:11270 amountAwarded */\n dup5\n /* \"main.sol\":11246:11253 jackpot */\n 0x0a\n 0x00\n /* \"main.sol\":11246:11270 jackpot -= amountAwarded */\n dup3\n dup3\n sload\n tag_219\n swap2\n swap1\n tag_130\n jump\t// in\n tag_219:\n swap3\n pop\n pop\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":11284:11290 winner */\n dup1\n /* \"main.sol\":11284:11299 winner.transfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":11284:11314 winner.transfer(amountAwarded) */\n 0x08fc\n /* \"main.sol\":11300:11313 amountAwarded */\n dup7\n /* \"main.sol\":11284:11314 winner.transfer(amountAwarded) */\n swap1\n dup2\n iszero\n mul\n swap1\n mload(0x40)\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup6\n dup9\n dup9\n call\n swap4\n pop\n pop\n pop\n pop\n iszero\n dup1\n iszero\n tag_221\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_221:\n pop\n /* \"main.sol\":10752:11325 {... */\n pop\n pop\n pop\n /* \"main.sol\":10747:10750 i++ */\n dup1\n dup1\n tag_222\n swap1\n tag_223\n jump\t// in\n tag_222:\n swap2\n pop\n pop\n /* \"main.sol\":10710:11325 for (uint32 i = 0; i < totalWinners; i++) {... */\n jump(tag_204)\n tag_205:\n pop\n /* \"main.sol\":11341:11353 participants */\n 0x09\n 0x00\n /* \"main.sol\":11334:11353 delete participants */\n tag_224\n swap2\n swap1\n tag_225\n jump\t// in\n tag_224:\n /* \"main.sol\":11375:11376 0 */\n 0x00\n /* \"main.sol\":11363:11372 requestId */\n 0x08\n /* \"main.sol\":11363:11376 requestId = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":10294:11383 {... */\n pop\n pop\n /* \"main.sol\":10234:11383 function pickWinners(uint256[] memory randomWords) internal {... */\n pop\n jump\t// out\n tag_225:\n pop\n dup1\n sload\n 0x00\n dup3\n sstore\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n swap1\n dup2\n add\n swap1\n tag_227\n swap2\n swap1\n tag_228\n jump\t// in\n tag_227:\n pop\n jump\t// out\n tag_228:\n tag_229:\n dup1\n dup3\n gt\n iszero\n tag_230\n jumpi\n 0x00\n dup2\n 0x00\n swap1\n sstore\n pop\n 0x01\n add\n jump(tag_229)\n tag_230:\n pop\n swap1\n jump\t// out\n /* \"#utility.yul\":7:84 */\n tag_231:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":73:78 */\n dup2\n /* \"#utility.yul\":62:78 */\n swap1\n pop\n /* \"#utility.yul\":7:84 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":90:208 */\n tag_232:\n /* \"#utility.yul\":177:201 */\n tag_277\n /* \"#utility.yul\":195:200 */\n dup2\n /* \"#utility.yul\":177:201 */\n tag_231\n jump\t// in\n tag_277:\n /* \"#utility.yul\":172:175 */\n dup3\n /* \"#utility.yul\":165:202 */\n mstore\n /* \"#utility.yul\":90:208 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":214:436 */\n tag_27:\n /* \"#utility.yul\":307:311 */\n 0x00\n /* \"#utility.yul\":345:347 */\n 0x20\n /* \"#utility.yul\":334:343 */\n dup3\n /* \"#utility.yul\":330:348 */\n add\n /* \"#utility.yul\":322:348 */\n swap1\n pop\n /* \"#utility.yul\":358:429 */\n tag_279\n /* \"#utility.yul\":426:427 */\n 0x00\n /* \"#utility.yul\":415:424 */\n dup4\n /* \"#utility.yul\":411:428 */\n add\n /* \"#utility.yul\":402:408 */\n dup5\n /* \"#utility.yul\":358:429 */\n tag_232\n jump\t// in\n tag_279:\n /* \"#utility.yul\":214:436 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":442:519 */\n tag_233:\n /* \"#utility.yul\":479:486 */\n 0x00\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":497:513 */\n swap1\n pop\n /* \"#utility.yul\":442:519 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":525:643 */\n tag_234:\n /* \"#utility.yul\":612:636 */\n tag_282\n /* \"#utility.yul\":630:635 */\n dup2\n /* \"#utility.yul\":612:636 */\n tag_233\n jump\t// in\n tag_282:\n /* \"#utility.yul\":607:610 */\n dup3\n /* \"#utility.yul\":600:637 */\n mstore\n /* \"#utility.yul\":525:643 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":649:871 */\n tag_36:\n /* \"#utility.yul\":742:746 */\n 0x00\n /* \"#utility.yul\":780:782 */\n 0x20\n /* \"#utility.yul\":769:778 */\n dup3\n /* \"#utility.yul\":765:783 */\n add\n /* \"#utility.yul\":757:783 */\n swap1\n pop\n /* \"#utility.yul\":793:864 */\n tag_284\n /* \"#utility.yul\":861:862 */\n 0x00\n /* \"#utility.yul\":850:859 */\n dup4\n /* \"#utility.yul\":846:863 */\n add\n /* \"#utility.yul\":837:843 */\n dup5\n /* \"#utility.yul\":793:864 */\n tag_234\n jump\t// in\n tag_284:\n /* \"#utility.yul\":649:871 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":877:952 */\n tag_235:\n /* \"#utility.yul\":910:916 */\n 0x00\n /* \"#utility.yul\":943:945 */\n 0x40\n /* \"#utility.yul\":937:946 */\n mload\n /* \"#utility.yul\":927:946 */\n swap1\n pop\n /* \"#utility.yul\":877:952 */\n swap1\n jump\t// out\n /* \"#utility.yul\":958:1075 */\n tag_236:\n /* \"#utility.yul\":1067:1068 */\n 0x00\n /* \"#utility.yul\":1064:1065 */\n dup1\n /* \"#utility.yul\":1057:1069 */\n revert\n /* \"#utility.yul\":1081:1198 */\n tag_237:\n /* \"#utility.yul\":1190:1191 */\n 0x00\n /* \"#utility.yul\":1187:1188 */\n dup1\n /* \"#utility.yul\":1180:1192 */\n revert\n /* \"#utility.yul\":1204:1326 */\n tag_238:\n /* \"#utility.yul\":1277:1301 */\n tag_289\n /* \"#utility.yul\":1295:1300 */\n dup2\n /* \"#utility.yul\":1277:1301 */\n tag_231\n jump\t// in\n tag_289:\n /* \"#utility.yul\":1270:1275 */\n dup2\n /* \"#utility.yul\":1267:1302 */\n eq\n /* \"#utility.yul\":1257:1320 */\n tag_290\n jumpi\n /* \"#utility.yul\":1316:1317 */\n 0x00\n /* \"#utility.yul\":1313:1314 */\n dup1\n /* \"#utility.yul\":1306:1318 */\n revert\n /* \"#utility.yul\":1257:1320 */\n tag_290:\n /* \"#utility.yul\":1204:1326 */\n pop\n jump\t// out\n /* \"#utility.yul\":1332:1471 */\n tag_239:\n /* \"#utility.yul\":1378:1383 */\n 0x00\n /* \"#utility.yul\":1416:1422 */\n dup2\n /* \"#utility.yul\":1403:1423 */\n calldataload\n /* \"#utility.yul\":1394:1423 */\n swap1\n pop\n /* \"#utility.yul\":1432:1465 */\n tag_292\n /* \"#utility.yul\":1459:1464 */\n dup2\n /* \"#utility.yul\":1432:1465 */\n tag_238\n jump\t// in\n tag_292:\n /* \"#utility.yul\":1332:1471 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1477:1594 */\n tag_240:\n /* \"#utility.yul\":1586:1587 */\n 0x00\n /* \"#utility.yul\":1583:1584 */\n dup1\n /* \"#utility.yul\":1576:1588 */\n revert\n /* \"#utility.yul\":1600:1702 */\n tag_241:\n /* \"#utility.yul\":1641:1647 */\n 0x00\n /* \"#utility.yul\":1692:1694 */\n 0x1f\n /* \"#utility.yul\":1688:1695 */\n not\n /* \"#utility.yul\":1683:1685 */\n 0x1f\n /* \"#utility.yul\":1676:1681 */\n dup4\n /* \"#utility.yul\":1672:1686 */\n add\n /* \"#utility.yul\":1668:1696 */\n and\n /* \"#utility.yul\":1658:1696 */\n swap1\n pop\n /* \"#utility.yul\":1600:1702 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1708:1888 */\n tag_242:\n /* \"#utility.yul\":1756:1833 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1753:1754 */\n 0x00\n /* \"#utility.yul\":1746:1834 */\n mstore\n /* \"#utility.yul\":1853:1857 */\n 0x41\n /* \"#utility.yul\":1850:1851 */\n 0x04\n /* \"#utility.yul\":1843:1858 */\n mstore\n /* \"#utility.yul\":1877:1881 */\n 0x24\n /* \"#utility.yul\":1874:1875 */\n 0x00\n /* \"#utility.yul\":1867:1882 */\n revert\n /* \"#utility.yul\":1894:2175 */\n tag_243:\n /* \"#utility.yul\":1977:2004 */\n tag_297\n /* \"#utility.yul\":1999:2003 */\n dup3\n /* \"#utility.yul\":1977:2004 */\n tag_241\n jump\t// in\n tag_297:\n /* \"#utility.yul\":1969:1975 */\n dup2\n /* \"#utility.yul\":1965:2005 */\n add\n /* \"#utility.yul\":2107:2113 */\n dup2\n /* \"#utility.yul\":2095:2105 */\n dup2\n /* \"#utility.yul\":2092:2114 */\n lt\n /* \"#utility.yul\":2071:2089 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2059:2069 */\n dup3\n /* \"#utility.yul\":2056:2090 */\n gt\n /* \"#utility.yul\":2053:2115 */\n or\n /* \"#utility.yul\":2050:2138 */\n iszero\n tag_298\n jumpi\n /* \"#utility.yul\":2118:2136 */\n tag_299\n tag_242\n jump\t// in\n tag_299:\n /* \"#utility.yul\":2050:2138 */\n tag_298:\n /* \"#utility.yul\":2158:2168 */\n dup1\n /* \"#utility.yul\":2154:2156 */\n 0x40\n /* \"#utility.yul\":2147:2169 */\n mstore\n /* \"#utility.yul\":1937:2175 */\n pop\n /* \"#utility.yul\":1894:2175 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2181:2310 */\n tag_244:\n /* \"#utility.yul\":2215:2221 */\n 0x00\n /* \"#utility.yul\":2242:2262 */\n tag_301\n tag_235\n jump\t// in\n tag_301:\n /* \"#utility.yul\":2232:2262 */\n swap1\n pop\n /* \"#utility.yul\":2271:2304 */\n tag_302\n /* \"#utility.yul\":2299:2303 */\n dup3\n /* \"#utility.yul\":2291:2297 */\n dup3\n /* \"#utility.yul\":2271:2304 */\n tag_243\n jump\t// in\n tag_302:\n /* \"#utility.yul\":2181:2310 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2316:2627 */\n tag_245:\n /* \"#utility.yul\":2393:2397 */\n 0x00\n /* \"#utility.yul\":2483:2501 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2475:2481 */\n dup3\n /* \"#utility.yul\":2472:2502 */\n gt\n /* \"#utility.yul\":2469:2525 */\n iszero\n tag_304\n jumpi\n /* \"#utility.yul\":2505:2523 */\n tag_305\n tag_242\n jump\t// in\n tag_305:\n /* \"#utility.yul\":2469:2525 */\n tag_304:\n /* \"#utility.yul\":2555:2559 */\n 0x20\n /* \"#utility.yul\":2547:2553 */\n dup3\n /* \"#utility.yul\":2543:2560 */\n mul\n /* \"#utility.yul\":2535:2560 */\n swap1\n pop\n /* \"#utility.yul\":2615:2619 */\n 0x20\n /* \"#utility.yul\":2609:2613 */\n dup2\n /* \"#utility.yul\":2605:2620 */\n add\n /* \"#utility.yul\":2597:2620 */\n swap1\n pop\n /* \"#utility.yul\":2316:2627 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2633:2750 */\n tag_246:\n /* \"#utility.yul\":2742:2743 */\n 0x00\n /* \"#utility.yul\":2739:2740 */\n dup1\n /* \"#utility.yul\":2732:2744 */\n revert\n /* \"#utility.yul\":2773:3483 */\n tag_247:\n /* \"#utility.yul\":2869:2874 */\n 0x00\n /* \"#utility.yul\":2894:2975 */\n tag_308\n /* \"#utility.yul\":2910:2974 */\n tag_309\n /* \"#utility.yul\":2967:2973 */\n dup5\n /* \"#utility.yul\":2910:2974 */\n tag_245\n jump\t// in\n tag_309:\n /* \"#utility.yul\":2894:2975 */\n tag_244\n jump\t// in\n tag_308:\n /* \"#utility.yul\":2885:2975 */\n swap1\n pop\n /* \"#utility.yul\":2995:3000 */\n dup1\n /* \"#utility.yul\":3024:3030 */\n dup4\n /* \"#utility.yul\":3017:3022 */\n dup3\n /* \"#utility.yul\":3010:3031 */\n mstore\n /* \"#utility.yul\":3058:3062 */\n 0x20\n /* \"#utility.yul\":3051:3056 */\n dup3\n /* \"#utility.yul\":3047:3063 */\n add\n /* \"#utility.yul\":3040:3063 */\n swap1\n pop\n /* \"#utility.yul\":3111:3115 */\n 0x20\n /* \"#utility.yul\":3103:3109 */\n dup5\n /* \"#utility.yul\":3099:3116 */\n mul\n /* \"#utility.yul\":3091:3097 */\n dup4\n /* \"#utility.yul\":3087:3117 */\n add\n /* \"#utility.yul\":3140:3143 */\n dup6\n /* \"#utility.yul\":3132:3138 */\n dup2\n /* \"#utility.yul\":3129:3144 */\n gt\n /* \"#utility.yul\":3126:3248 */\n iszero\n tag_310\n jumpi\n /* \"#utility.yul\":3159:3238 */\n tag_311\n tag_246\n jump\t// in\n tag_311:\n /* \"#utility.yul\":3126:3248 */\n tag_310:\n /* \"#utility.yul\":3274:3280 */\n dup4\n /* \"#utility.yul\":3257:3477 */\n tag_312:\n /* \"#utility.yul\":3291:3297 */\n dup2\n /* \"#utility.yul\":3286:3289 */\n dup2\n /* \"#utility.yul\":3283:3298 */\n lt\n /* \"#utility.yul\":3257:3477 */\n iszero\n tag_314\n jumpi\n /* \"#utility.yul\":3366:3369 */\n dup1\n /* \"#utility.yul\":3395:3432 */\n tag_315\n /* \"#utility.yul\":3428:3431 */\n dup9\n /* \"#utility.yul\":3416:3426 */\n dup3\n /* \"#utility.yul\":3395:3432 */\n tag_239\n jump\t// in\n tag_315:\n /* \"#utility.yul\":3390:3393 */\n dup5\n /* \"#utility.yul\":3383:3433 */\n mstore\n /* \"#utility.yul\":3462:3466 */\n 0x20\n /* \"#utility.yul\":3457:3460 */\n dup5\n /* \"#utility.yul\":3453:3467 */\n add\n /* \"#utility.yul\":3446:3467 */\n swap4\n pop\n /* \"#utility.yul\":3333:3477 */\n pop\n /* \"#utility.yul\":3317:3321 */\n 0x20\n /* \"#utility.yul\":3312:3315 */\n dup2\n /* \"#utility.yul\":3308:3322 */\n add\n /* \"#utility.yul\":3301:3322 */\n swap1\n pop\n /* \"#utility.yul\":3257:3477 */\n jump(tag_312)\n tag_314:\n /* \"#utility.yul\":3261:3282 */\n pop\n /* \"#utility.yul\":2875:3483 */\n pop\n pop\n /* \"#utility.yul\":2773:3483 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3506:3876 */\n tag_248:\n /* \"#utility.yul\":3577:3582 */\n 0x00\n /* \"#utility.yul\":3626:3629 */\n dup3\n /* \"#utility.yul\":3619:3623 */\n 0x1f\n /* \"#utility.yul\":3611:3617 */\n dup4\n /* \"#utility.yul\":3607:3624 */\n add\n /* \"#utility.yul\":3603:3630 */\n slt\n /* \"#utility.yul\":3593:3715 */\n tag_317\n jumpi\n /* \"#utility.yul\":3634:3713 */\n tag_318\n tag_240\n jump\t// in\n tag_318:\n /* \"#utility.yul\":3593:3715 */\n tag_317:\n /* \"#utility.yul\":3751:3757 */\n dup2\n /* \"#utility.yul\":3738:3758 */\n calldataload\n /* \"#utility.yul\":3776:3870 */\n tag_319\n /* \"#utility.yul\":3866:3869 */\n dup5\n /* \"#utility.yul\":3858:3864 */\n dup3\n /* \"#utility.yul\":3851:3855 */\n 0x20\n /* \"#utility.yul\":3843:3849 */\n dup7\n /* \"#utility.yul\":3839:3856 */\n add\n /* \"#utility.yul\":3776:3870 */\n tag_247\n jump\t// in\n tag_319:\n /* \"#utility.yul\":3767:3870 */\n swap2\n pop\n /* \"#utility.yul\":3583:3876 */\n pop\n /* \"#utility.yul\":3506:3876 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3882:4566 */\n tag_40:\n /* \"#utility.yul\":3975:3981 */\n 0x00\n /* \"#utility.yul\":3983:3989 */\n dup1\n /* \"#utility.yul\":4032:4034 */\n 0x40\n /* \"#utility.yul\":4020:4029 */\n dup4\n /* \"#utility.yul\":4011:4018 */\n dup6\n /* \"#utility.yul\":4007:4030 */\n sub\n /* \"#utility.yul\":4003:4035 */\n slt\n /* \"#utility.yul\":4000:4119 */\n iszero\n tag_321\n jumpi\n /* \"#utility.yul\":4038:4117 */\n tag_322\n tag_236\n jump\t// in\n tag_322:\n /* \"#utility.yul\":4000:4119 */\n tag_321:\n /* \"#utility.yul\":4158:4159 */\n 0x00\n /* \"#utility.yul\":4183:4236 */\n tag_323\n /* \"#utility.yul\":4228:4235 */\n dup6\n /* \"#utility.yul\":4219:4225 */\n dup3\n /* \"#utility.yul\":4208:4217 */\n dup7\n /* \"#utility.yul\":4204:4226 */\n add\n /* \"#utility.yul\":4183:4236 */\n tag_239\n jump\t// in\n tag_323:\n /* \"#utility.yul\":4173:4236 */\n swap3\n pop\n /* \"#utility.yul\":4129:4246 */\n pop\n /* \"#utility.yul\":4313:4315 */\n 0x20\n /* \"#utility.yul\":4302:4311 */\n dup4\n /* \"#utility.yul\":4298:4316 */\n add\n /* \"#utility.yul\":4285:4317 */\n calldataload\n /* \"#utility.yul\":4344:4362 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4336:4342 */\n dup2\n /* \"#utility.yul\":4333:4363 */\n gt\n /* \"#utility.yul\":4330:4447 */\n iszero\n tag_324\n jumpi\n /* \"#utility.yul\":4366:4445 */\n tag_325\n tag_237\n jump\t// in\n tag_325:\n /* \"#utility.yul\":4330:4447 */\n tag_324:\n /* \"#utility.yul\":4471:4549 */\n tag_326\n /* \"#utility.yul\":4541:4548 */\n dup6\n /* \"#utility.yul\":4532:4538 */\n dup3\n /* \"#utility.yul\":4521:4530 */\n dup7\n /* \"#utility.yul\":4517:4539 */\n add\n /* \"#utility.yul\":4471:4549 */\n tag_248\n jump\t// in\n tag_326:\n /* \"#utility.yul\":4461:4549 */\n swap2\n pop\n /* \"#utility.yul\":4256:4559 */\n pop\n /* \"#utility.yul\":3882:4566 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4572:4752 */\n tag_111:\n /* \"#utility.yul\":4620:4697 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":4617:4618 */\n 0x00\n /* \"#utility.yul\":4610:4698 */\n mstore\n /* \"#utility.yul\":4717:4721 */\n 0x21\n /* \"#utility.yul\":4714:4715 */\n 0x04\n /* \"#utility.yul\":4707:4722 */\n mstore\n /* \"#utility.yul\":4741:4745 */\n 0x24\n /* \"#utility.yul\":4738:4739 */\n 0x00\n /* \"#utility.yul\":4731:4746 */\n revert\n /* \"#utility.yul\":4758:4879 */\n tag_249:\n /* \"#utility.yul\":4847:4848 */\n 0x03\n /* \"#utility.yul\":4840:4845 */\n dup2\n /* \"#utility.yul\":4837:4849 */\n lt\n /* \"#utility.yul\":4827:4873 */\n tag_329\n jumpi\n /* \"#utility.yul\":4853:4871 */\n tag_330\n tag_111\n jump\t// in\n tag_330:\n /* \"#utility.yul\":4827:4873 */\n tag_329:\n /* \"#utility.yul\":4758:4879 */\n pop\n jump\t// out\n /* \"#utility.yul\":4885:5028 */\n tag_250:\n /* \"#utility.yul\":4938:4945 */\n 0x00\n /* \"#utility.yul\":4967:4972 */\n dup2\n /* \"#utility.yul\":4956:4972 */\n swap1\n pop\n /* \"#utility.yul\":4973:5022 */\n tag_332\n /* \"#utility.yul\":5016:5021 */\n dup3\n /* \"#utility.yul\":4973:5022 */\n tag_249\n jump\t// in\n tag_332:\n /* \"#utility.yul\":4885:5028 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5034:5177 */\n tag_251:\n /* \"#utility.yul\":5098:5107 */\n 0x00\n /* \"#utility.yul\":5131:5171 */\n tag_334\n /* \"#utility.yul\":5165:5170 */\n dup3\n /* \"#utility.yul\":5131:5171 */\n tag_250\n jump\t// in\n tag_334:\n /* \"#utility.yul\":5118:5171 */\n swap1\n pop\n /* \"#utility.yul\":5034:5177 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5183:5342 */\n tag_252:\n /* \"#utility.yul\":5284:5335 */\n tag_336\n /* \"#utility.yul\":5329:5334 */\n dup2\n /* \"#utility.yul\":5284:5335 */\n tag_251\n jump\t// in\n tag_336:\n /* \"#utility.yul\":5279:5282 */\n dup3\n /* \"#utility.yul\":5272:5336 */\n mstore\n /* \"#utility.yul\":5183:5342 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5348:5598 */\n tag_46:\n /* \"#utility.yul\":5455:5459 */\n 0x00\n /* \"#utility.yul\":5493:5495 */\n 0x20\n /* \"#utility.yul\":5482:5491 */\n dup3\n /* \"#utility.yul\":5478:5496 */\n add\n /* \"#utility.yul\":5470:5496 */\n swap1\n pop\n /* \"#utility.yul\":5506:5591 */\n tag_338\n /* \"#utility.yul\":5588:5589 */\n 0x00\n /* \"#utility.yul\":5577:5586 */\n dup4\n /* \"#utility.yul\":5573:5590 */\n add\n /* \"#utility.yul\":5564:5570 */\n dup5\n /* \"#utility.yul\":5506:5591 */\n tag_252\n jump\t// in\n tag_338:\n /* \"#utility.yul\":5348:5598 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5604:5933 */\n tag_54:\n /* \"#utility.yul\":5663:5669 */\n 0x00\n /* \"#utility.yul\":5712:5714 */\n 0x20\n /* \"#utility.yul\":5700:5709 */\n dup3\n /* \"#utility.yul\":5691:5698 */\n dup5\n /* \"#utility.yul\":5687:5710 */\n sub\n /* \"#utility.yul\":5683:5715 */\n slt\n /* \"#utility.yul\":5680:5799 */\n iszero\n tag_340\n jumpi\n /* \"#utility.yul\":5718:5797 */\n tag_341\n tag_236\n jump\t// in\n tag_341:\n /* \"#utility.yul\":5680:5799 */\n tag_340:\n /* \"#utility.yul\":5838:5839 */\n 0x00\n /* \"#utility.yul\":5863:5916 */\n tag_342\n /* \"#utility.yul\":5908:5915 */\n dup5\n /* \"#utility.yul\":5899:5905 */\n dup3\n /* \"#utility.yul\":5888:5897 */\n dup6\n /* \"#utility.yul\":5884:5906 */\n add\n /* \"#utility.yul\":5863:5916 */\n tag_239\n jump\t// in\n tag_342:\n /* \"#utility.yul\":5853:5916 */\n swap2\n pop\n /* \"#utility.yul\":5809:5926 */\n pop\n /* \"#utility.yul\":5604:5933 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5939:6065 */\n tag_253:\n /* \"#utility.yul\":5976:5983 */\n 0x00\n /* \"#utility.yul\":6016:6058 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":6009:6014 */\n dup3\n /* \"#utility.yul\":6005:6059 */\n and\n /* \"#utility.yul\":5994:6059 */\n swap1\n pop\n /* \"#utility.yul\":5939:6065 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6071:6167 */\n tag_254:\n /* \"#utility.yul\":6108:6115 */\n 0x00\n /* \"#utility.yul\":6137:6161 */\n tag_345\n /* \"#utility.yul\":6155:6160 */\n dup3\n /* \"#utility.yul\":6137:6161 */\n tag_253\n jump\t// in\n tag_345:\n /* \"#utility.yul\":6126:6161 */\n swap1\n pop\n /* \"#utility.yul\":6071:6167 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6173:6291 */\n tag_255:\n /* \"#utility.yul\":6260:6284 */\n tag_347\n /* \"#utility.yul\":6278:6283 */\n dup2\n /* \"#utility.yul\":6260:6284 */\n tag_254\n jump\t// in\n tag_347:\n /* \"#utility.yul\":6255:6258 */\n dup3\n /* \"#utility.yul\":6248:6285 */\n mstore\n /* \"#utility.yul\":6173:6291 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6297:6519 */\n tag_57:\n /* \"#utility.yul\":6390:6394 */\n 0x00\n /* \"#utility.yul\":6428:6430 */\n 0x20\n /* \"#utility.yul\":6417:6426 */\n dup3\n /* \"#utility.yul\":6413:6431 */\n add\n /* \"#utility.yul\":6405:6431 */\n swap1\n pop\n /* \"#utility.yul\":6441:6512 */\n tag_349\n /* \"#utility.yul\":6509:6510 */\n 0x00\n /* \"#utility.yul\":6498:6507 */\n dup4\n /* \"#utility.yul\":6494:6511 */\n add\n /* \"#utility.yul\":6485:6491 */\n dup5\n /* \"#utility.yul\":6441:6512 */\n tag_255\n jump\t// in\n tag_349:\n /* \"#utility.yul\":6297:6519 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6525:6585 */\n tag_256:\n /* \"#utility.yul\":6553:6556 */\n 0x00\n /* \"#utility.yul\":6574:6579 */\n dup2\n /* \"#utility.yul\":6567:6579 */\n swap1\n pop\n /* \"#utility.yul\":6525:6585 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6591:6733 */\n tag_257:\n /* \"#utility.yul\":6641:6650 */\n 0x00\n /* \"#utility.yul\":6674:6727 */\n tag_352\n /* \"#utility.yul\":6692:6726 */\n tag_353\n /* \"#utility.yul\":6701:6725 */\n tag_354\n /* \"#utility.yul\":6719:6724 */\n dup5\n /* \"#utility.yul\":6701:6725 */\n tag_253\n jump\t// in\n tag_354:\n /* \"#utility.yul\":6692:6726 */\n tag_256\n jump\t// in\n tag_353:\n /* \"#utility.yul\":6674:6727 */\n tag_253\n jump\t// in\n tag_352:\n /* \"#utility.yul\":6661:6727 */\n swap1\n pop\n /* \"#utility.yul\":6591:6733 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6739:6865 */\n tag_258:\n /* \"#utility.yul\":6789:6798 */\n 0x00\n /* \"#utility.yul\":6822:6859 */\n tag_356\n /* \"#utility.yul\":6853:6858 */\n dup3\n /* \"#utility.yul\":6822:6859 */\n tag_257\n jump\t// in\n tag_356:\n /* \"#utility.yul\":6809:6859 */\n swap1\n pop\n /* \"#utility.yul\":6739:6865 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6871:7015 */\n tag_259:\n /* \"#utility.yul\":6939:6948 */\n 0x00\n /* \"#utility.yul\":6972:7009 */\n tag_358\n /* \"#utility.yul\":7003:7008 */\n dup3\n /* \"#utility.yul\":6972:7009 */\n tag_258\n jump\t// in\n tag_358:\n /* \"#utility.yul\":6959:7009 */\n swap1\n pop\n /* \"#utility.yul\":6871:7015 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7021:7188 */\n tag_260:\n /* \"#utility.yul\":7126:7181 */\n tag_360\n /* \"#utility.yul\":7175:7180 */\n dup2\n /* \"#utility.yul\":7126:7181 */\n tag_259\n jump\t// in\n tag_360:\n /* \"#utility.yul\":7121:7124 */\n dup3\n /* \"#utility.yul\":7114:7182 */\n mstore\n /* \"#utility.yul\":7021:7188 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7194:7452 */\n tag_62:\n /* \"#utility.yul\":7305:7309 */\n 0x00\n /* \"#utility.yul\":7343:7345 */\n 0x20\n /* \"#utility.yul\":7332:7341 */\n dup3\n /* \"#utility.yul\":7328:7346 */\n add\n /* \"#utility.yul\":7320:7346 */\n swap1\n pop\n /* \"#utility.yul\":7356:7445 */\n tag_362\n /* \"#utility.yul\":7442:7443 */\n 0x00\n /* \"#utility.yul\":7431:7440 */\n dup4\n /* \"#utility.yul\":7427:7444 */\n add\n /* \"#utility.yul\":7418:7424 */\n dup5\n /* \"#utility.yul\":7356:7445 */\n tag_260\n jump\t// in\n tag_362:\n /* \"#utility.yul\":7194:7452 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7458:7559 */\n tag_261:\n /* \"#utility.yul\":7494:7501 */\n 0x00\n /* \"#utility.yul\":7534:7552 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7527:7532 */\n dup3\n /* \"#utility.yul\":7523:7553 */\n and\n /* \"#utility.yul\":7512:7553 */\n swap1\n pop\n /* \"#utility.yul\":7458:7559 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7565:7680 */\n tag_262:\n /* \"#utility.yul\":7650:7673 */\n tag_365\n /* \"#utility.yul\":7667:7672 */\n dup2\n /* \"#utility.yul\":7650:7673 */\n tag_261\n jump\t// in\n tag_365:\n /* \"#utility.yul\":7645:7648 */\n dup3\n /* \"#utility.yul\":7638:7674 */\n mstore\n /* \"#utility.yul\":7565:7680 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7686:7904 */\n tag_75:\n /* \"#utility.yul\":7777:7781 */\n 0x00\n /* \"#utility.yul\":7815:7817 */\n 0x20\n /* \"#utility.yul\":7804:7813 */\n dup3\n /* \"#utility.yul\":7800:7818 */\n add\n /* \"#utility.yul\":7792:7818 */\n swap1\n pop\n /* \"#utility.yul\":7828:7897 */\n tag_367\n /* \"#utility.yul\":7894:7895 */\n 0x00\n /* \"#utility.yul\":7883:7892 */\n dup4\n /* \"#utility.yul\":7879:7896 */\n add\n /* \"#utility.yul\":7870:7876 */\n dup5\n /* \"#utility.yul\":7828:7897 */\n tag_262\n jump\t// in\n tag_367:\n /* \"#utility.yul\":7686:7904 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7910:8003 */\n tag_263:\n /* \"#utility.yul\":7946:7953 */\n 0x00\n /* \"#utility.yul\":7986:7996 */\n 0xffffffff\n /* \"#utility.yul\":7979:7984 */\n dup3\n /* \"#utility.yul\":7975:7997 */\n and\n /* \"#utility.yul\":7964:7997 */\n swap1\n pop\n /* \"#utility.yul\":7910:8003 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8009:8124 */\n tag_264:\n /* \"#utility.yul\":8094:8117 */\n tag_370\n /* \"#utility.yul\":8111:8116 */\n dup2\n /* \"#utility.yul\":8094:8117 */\n tag_263\n jump\t// in\n tag_370:\n /* \"#utility.yul\":8089:8092 */\n dup3\n /* \"#utility.yul\":8082:8118 */\n mstore\n /* \"#utility.yul\":8009:8124 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8130:8348 */\n tag_88:\n /* \"#utility.yul\":8221:8225 */\n 0x00\n /* \"#utility.yul\":8259:8261 */\n 0x20\n /* \"#utility.yul\":8248:8257 */\n dup3\n /* \"#utility.yul\":8244:8262 */\n add\n /* \"#utility.yul\":8236:8262 */\n swap1\n pop\n /* \"#utility.yul\":8272:8341 */\n tag_372\n /* \"#utility.yul\":8338:8339 */\n 0x00\n /* \"#utility.yul\":8327:8336 */\n dup4\n /* \"#utility.yul\":8323:8340 */\n add\n /* \"#utility.yul\":8314:8320 */\n dup5\n /* \"#utility.yul\":8272:8341 */\n tag_264\n jump\t// in\n tag_372:\n /* \"#utility.yul\":8130:8348 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8354:8440 */\n tag_265:\n /* \"#utility.yul\":8389:8396 */\n 0x00\n /* \"#utility.yul\":8429:8433 */\n 0xff\n /* \"#utility.yul\":8422:8427 */\n dup3\n /* \"#utility.yul\":8418:8434 */\n and\n /* \"#utility.yul\":8407:8434 */\n swap1\n pop\n /* \"#utility.yul\":8354:8440 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8446:8558 */\n tag_266:\n /* \"#utility.yul\":8529:8551 */\n tag_375\n /* \"#utility.yul\":8545:8550 */\n dup2\n /* \"#utility.yul\":8529:8551 */\n tag_265\n jump\t// in\n tag_375:\n /* \"#utility.yul\":8524:8527 */\n dup3\n /* \"#utility.yul\":8517:8552 */\n mstore\n /* \"#utility.yul\":8446:8558 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8564:8778 */\n tag_93:\n /* \"#utility.yul\":8653:8657 */\n 0x00\n /* \"#utility.yul\":8691:8693 */\n 0x20\n /* \"#utility.yul\":8680:8689 */\n dup3\n /* \"#utility.yul\":8676:8694 */\n add\n /* \"#utility.yul\":8668:8694 */\n swap1\n pop\n /* \"#utility.yul\":8704:8771 */\n tag_377\n /* \"#utility.yul\":8768:8769 */\n 0x00\n /* \"#utility.yul\":8757:8766 */\n dup4\n /* \"#utility.yul\":8753:8770 */\n add\n /* \"#utility.yul\":8744:8750 */\n dup5\n /* \"#utility.yul\":8704:8771 */\n tag_266\n jump\t// in\n tag_377:\n /* \"#utility.yul\":8564:8778 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8784:9116 */\n tag_102:\n /* \"#utility.yul\":8905:8909 */\n 0x00\n /* \"#utility.yul\":8943:8945 */\n 0x40\n /* \"#utility.yul\":8932:8941 */\n dup3\n /* \"#utility.yul\":8928:8946 */\n add\n /* \"#utility.yul\":8920:8946 */\n swap1\n pop\n /* \"#utility.yul\":8956:9027 */\n tag_379\n /* \"#utility.yul\":9024:9025 */\n 0x00\n /* \"#utility.yul\":9013:9022 */\n dup4\n /* \"#utility.yul\":9009:9026 */\n add\n /* \"#utility.yul\":9000:9006 */\n dup6\n /* \"#utility.yul\":8956:9027 */\n tag_232\n jump\t// in\n tag_379:\n /* \"#utility.yul\":9037:9109 */\n tag_380\n /* \"#utility.yul\":9105:9107 */\n 0x20\n /* \"#utility.yul\":9094:9103 */\n dup4\n /* \"#utility.yul\":9090:9108 */\n add\n /* \"#utility.yul\":9081:9087 */\n dup5\n /* \"#utility.yul\":9037:9109 */\n tag_232\n jump\t// in\n tag_380:\n /* \"#utility.yul\":8784:9116 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9122:9238 */\n tag_267:\n /* \"#utility.yul\":9212:9213 */\n 0x04\n /* \"#utility.yul\":9205:9210 */\n dup2\n /* \"#utility.yul\":9202:9214 */\n lt\n /* \"#utility.yul\":9192:9232 */\n tag_382\n jumpi\n /* \"#utility.yul\":9228:9229 */\n 0x00\n /* \"#utility.yul\":9225:9226 */\n dup1\n /* \"#utility.yul\":9218:9230 */\n revert\n /* \"#utility.yul\":9192:9232 */\n tag_382:\n /* \"#utility.yul\":9122:9238 */\n pop\n jump\t// out\n /* \"#utility.yul\":9244:9421 */\n tag_268:\n /* \"#utility.yul\":9318:9323 */\n 0x00\n /* \"#utility.yul\":9349:9355 */\n dup2\n /* \"#utility.yul\":9343:9356 */\n mload\n /* \"#utility.yul\":9334:9356 */\n swap1\n pop\n /* \"#utility.yul\":9365:9415 */\n tag_384\n /* \"#utility.yul\":9409:9414 */\n dup2\n /* \"#utility.yul\":9365:9415 */\n tag_267\n jump\t// in\n tag_384:\n /* \"#utility.yul\":9244:9421 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9427:9812 */\n tag_116:\n /* \"#utility.yul\":9514:9520 */\n 0x00\n /* \"#utility.yul\":9563:9565 */\n 0x20\n /* \"#utility.yul\":9551:9560 */\n dup3\n /* \"#utility.yul\":9542:9549 */\n dup5\n /* \"#utility.yul\":9538:9561 */\n sub\n /* \"#utility.yul\":9534:9566 */\n slt\n /* \"#utility.yul\":9531:9650 */\n iszero\n tag_386\n jumpi\n /* \"#utility.yul\":9569:9648 */\n tag_387\n tag_236\n jump\t// in\n tag_387:\n /* \"#utility.yul\":9531:9650 */\n tag_386:\n /* \"#utility.yul\":9689:9690 */\n 0x00\n /* \"#utility.yul\":9714:9795 */\n tag_388\n /* \"#utility.yul\":9787:9794 */\n dup5\n /* \"#utility.yul\":9778:9784 */\n dup3\n /* \"#utility.yul\":9767:9776 */\n dup6\n /* \"#utility.yul\":9763:9785 */\n add\n /* \"#utility.yul\":9714:9795 */\n tag_268\n jump\t// in\n tag_388:\n /* \"#utility.yul\":9704:9795 */\n swap2\n pop\n /* \"#utility.yul\":9660:9805 */\n pop\n /* \"#utility.yul\":9427:9812 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9818:9998 */\n tag_269:\n /* \"#utility.yul\":9866:9943 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":9863:9864 */\n 0x00\n /* \"#utility.yul\":9856:9944 */\n mstore\n /* \"#utility.yul\":9963:9967 */\n 0x11\n /* \"#utility.yul\":9960:9961 */\n 0x04\n /* \"#utility.yul\":9953:9968 */\n mstore\n /* \"#utility.yul\":9987:9991 */\n 0x24\n /* \"#utility.yul\":9984:9985 */\n 0x00\n /* \"#utility.yul\":9977:9992 */\n revert\n /* \"#utility.yul\":10004:10309 */\n tag_127:\n /* \"#utility.yul\":10044:10047 */\n 0x00\n /* \"#utility.yul\":10063:10083 */\n tag_391\n /* \"#utility.yul\":10081:10082 */\n dup3\n /* \"#utility.yul\":10063:10083 */\n tag_231\n jump\t// in\n tag_391:\n /* \"#utility.yul\":10058:10083 */\n swap2\n pop\n /* \"#utility.yul\":10097:10117 */\n tag_392\n /* \"#utility.yul\":10115:10116 */\n dup4\n /* \"#utility.yul\":10097:10117 */\n tag_231\n jump\t// in\n tag_392:\n /* \"#utility.yul\":10092:10117 */\n swap3\n pop\n /* \"#utility.yul\":10251:10252 */\n dup3\n /* \"#utility.yul\":10183:10249 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":10179:10253 */\n sub\n /* \"#utility.yul\":10176:10177 */\n dup3\n /* \"#utility.yul\":10173:10254 */\n gt\n /* \"#utility.yul\":10170:10277 */\n iszero\n tag_393\n jumpi\n /* \"#utility.yul\":10257:10275 */\n tag_394\n tag_269\n jump\t// in\n tag_394:\n /* \"#utility.yul\":10170:10277 */\n tag_393:\n /* \"#utility.yul\":10301:10302 */\n dup3\n /* \"#utility.yul\":10298:10299 */\n dup3\n /* \"#utility.yul\":10294:10303 */\n add\n /* \"#utility.yul\":10287:10303 */\n swap1\n pop\n /* \"#utility.yul\":10004:10309 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10315:10506 */\n tag_130:\n /* \"#utility.yul\":10355:10359 */\n 0x00\n /* \"#utility.yul\":10375:10395 */\n tag_396\n /* \"#utility.yul\":10393:10394 */\n dup3\n /* \"#utility.yul\":10375:10395 */\n tag_231\n jump\t// in\n tag_396:\n /* \"#utility.yul\":10370:10395 */\n swap2\n pop\n /* \"#utility.yul\":10409:10429 */\n tag_397\n /* \"#utility.yul\":10427:10428 */\n dup4\n /* \"#utility.yul\":10409:10429 */\n tag_231\n jump\t// in\n tag_397:\n /* \"#utility.yul\":10404:10429 */\n swap3\n pop\n /* \"#utility.yul\":10448:10449 */\n dup3\n /* \"#utility.yul\":10445:10446 */\n dup3\n /* \"#utility.yul\":10442:10450 */\n lt\n /* \"#utility.yul\":10439:10473 */\n iszero\n tag_398\n jumpi\n /* \"#utility.yul\":10453:10471 */\n tag_399\n tag_269\n jump\t// in\n tag_399:\n /* \"#utility.yul\":10439:10473 */\n tag_398:\n /* \"#utility.yul\":10498:10499 */\n dup3\n /* \"#utility.yul\":10495:10496 */\n dup3\n /* \"#utility.yul\":10491:10500 */\n sub\n /* \"#utility.yul\":10483:10500 */\n swap1\n pop\n /* \"#utility.yul\":10315:10506 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10512:10745 */\n tag_138:\n /* \"#utility.yul\":10551:10554 */\n 0x00\n /* \"#utility.yul\":10574:10598 */\n tag_401\n /* \"#utility.yul\":10592:10597 */\n dup3\n /* \"#utility.yul\":10574:10598 */\n tag_231\n jump\t// in\n tag_401:\n /* \"#utility.yul\":10565:10598 */\n swap2\n pop\n /* \"#utility.yul\":10620:10686 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":10613:10618 */\n dup3\n /* \"#utility.yul\":10610:10687 */\n eq\n /* \"#utility.yul\":10607:10710 */\n iszero\n tag_402\n jumpi\n /* \"#utility.yul\":10690:10708 */\n tag_403\n tag_269\n jump\t// in\n tag_403:\n /* \"#utility.yul\":10607:10710 */\n tag_402:\n /* \"#utility.yul\":10737:10738 */\n 0x01\n /* \"#utility.yul\":10730:10735 */\n dup3\n /* \"#utility.yul\":10726:10739 */\n add\n /* \"#utility.yul\":10719:10739 */\n swap1\n pop\n /* \"#utility.yul\":10512:10745 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10751:10889 */\n tag_270:\n /* \"#utility.yul\":10799:10808 */\n 0x00\n /* \"#utility.yul\":10832:10883 */\n tag_405\n /* \"#utility.yul\":10849:10882 */\n tag_406\n /* \"#utility.yul\":10858:10881 */\n tag_407\n /* \"#utility.yul\":10875:10880 */\n dup5\n /* \"#utility.yul\":10858:10881 */\n tag_263\n jump\t// in\n tag_407:\n /* \"#utility.yul\":10849:10882 */\n tag_256\n jump\t// in\n tag_406:\n /* \"#utility.yul\":10832:10883 */\n tag_261\n jump\t// in\n tag_405:\n /* \"#utility.yul\":10819:10883 */\n swap1\n pop\n /* \"#utility.yul\":10751:10889 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10895:11022 */\n tag_271:\n /* \"#utility.yul\":10980:11015 */\n tag_409\n /* \"#utility.yul\":11009:11014 */\n dup2\n /* \"#utility.yul\":10980:11015 */\n tag_270\n jump\t// in\n tag_409:\n /* \"#utility.yul\":10975:10978 */\n dup3\n /* \"#utility.yul\":10968:11016 */\n mstore\n /* \"#utility.yul\":10895:11022 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11028:11787 */\n tag_140:\n /* \"#utility.yul\":11253:11257 */\n 0x00\n /* \"#utility.yul\":11291:11294 */\n 0xc0\n /* \"#utility.yul\":11280:11289 */\n dup3\n /* \"#utility.yul\":11276:11295 */\n add\n /* \"#utility.yul\":11268:11295 */\n swap1\n pop\n /* \"#utility.yul\":11305:11376 */\n tag_411\n /* \"#utility.yul\":11373:11374 */\n 0x00\n /* \"#utility.yul\":11362:11371 */\n dup4\n /* \"#utility.yul\":11358:11375 */\n add\n /* \"#utility.yul\":11349:11355 */\n dup10\n /* \"#utility.yul\":11305:11376 */\n tag_255\n jump\t// in\n tag_411:\n /* \"#utility.yul\":11386:11458 */\n tag_412\n /* \"#utility.yul\":11454:11456 */\n 0x20\n /* \"#utility.yul\":11443:11452 */\n dup4\n /* \"#utility.yul\":11439:11457 */\n add\n /* \"#utility.yul\":11430:11436 */\n dup9\n /* \"#utility.yul\":11386:11458 */\n tag_232\n jump\t// in\n tag_412:\n /* \"#utility.yul\":11468:11538 */\n tag_413\n /* \"#utility.yul\":11534:11536 */\n 0x40\n /* \"#utility.yul\":11523:11532 */\n dup4\n /* \"#utility.yul\":11519:11537 */\n add\n /* \"#utility.yul\":11510:11516 */\n dup8\n /* \"#utility.yul\":11468:11538 */\n tag_262\n jump\t// in\n tag_413:\n /* \"#utility.yul\":11548:11620 */\n tag_414\n /* \"#utility.yul\":11616:11618 */\n 0x60\n /* \"#utility.yul\":11605:11614 */\n dup4\n /* \"#utility.yul\":11601:11619 */\n add\n /* \"#utility.yul\":11592:11598 */\n dup7\n /* \"#utility.yul\":11548:11620 */\n tag_234\n jump\t// in\n tag_414:\n /* \"#utility.yul\":11630:11699 */\n tag_415\n /* \"#utility.yul\":11694:11697 */\n 0x80\n /* \"#utility.yul\":11683:11692 */\n dup4\n /* \"#utility.yul\":11679:11698 */\n add\n /* \"#utility.yul\":11670:11676 */\n dup6\n /* \"#utility.yul\":11630:11699 */\n tag_266\n jump\t// in\n tag_415:\n /* \"#utility.yul\":11709:11780 */\n tag_416\n /* \"#utility.yul\":11775:11778 */\n 0xa0\n /* \"#utility.yul\":11764:11773 */\n dup4\n /* \"#utility.yul\":11760:11779 */\n add\n /* \"#utility.yul\":11751:11757 */\n dup5\n /* \"#utility.yul\":11709:11780 */\n tag_271\n jump\t// in\n tag_416:\n /* \"#utility.yul\":11028:11787 */\n swap8\n swap7\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11793:11936 */\n tag_272:\n /* \"#utility.yul\":11850:11855 */\n 0x00\n /* \"#utility.yul\":11881:11887 */\n dup2\n /* \"#utility.yul\":11875:11888 */\n mload\n /* \"#utility.yul\":11866:11888 */\n swap1\n pop\n /* \"#utility.yul\":11897:11930 */\n tag_418\n /* \"#utility.yul\":11924:11929 */\n dup2\n /* \"#utility.yul\":11897:11930 */\n tag_238\n jump\t// in\n tag_418:\n /* \"#utility.yul\":11793:11936 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11942:12293 */\n tag_144:\n /* \"#utility.yul\":12012:12018 */\n 0x00\n /* \"#utility.yul\":12061:12063 */\n 0x20\n /* \"#utility.yul\":12049:12058 */\n dup3\n /* \"#utility.yul\":12040:12047 */\n dup5\n /* \"#utility.yul\":12036:12059 */\n sub\n /* \"#utility.yul\":12032:12064 */\n slt\n /* \"#utility.yul\":12029:12148 */\n iszero\n tag_420\n jumpi\n /* \"#utility.yul\":12067:12146 */\n tag_421\n tag_236\n jump\t// in\n tag_421:\n /* \"#utility.yul\":12029:12148 */\n tag_420:\n /* \"#utility.yul\":12187:12188 */\n 0x00\n /* \"#utility.yul\":12212:12276 */\n tag_422\n /* \"#utility.yul\":12268:12275 */\n dup5\n /* \"#utility.yul\":12259:12265 */\n dup3\n /* \"#utility.yul\":12248:12257 */\n dup6\n /* \"#utility.yul\":12244:12266 */\n add\n /* \"#utility.yul\":12212:12276 */\n tag_272\n jump\t// in\n tag_422:\n /* \"#utility.yul\":12202:12276 */\n swap2\n pop\n /* \"#utility.yul\":12158:12286 */\n pop\n /* \"#utility.yul\":11942:12293 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12299:12951 */\n tag_148:\n /* \"#utility.yul\":12498:12502 */\n 0x00\n /* \"#utility.yul\":12536:12539 */\n 0xa0\n /* \"#utility.yul\":12525:12534 */\n dup3\n /* \"#utility.yul\":12521:12540 */\n add\n /* \"#utility.yul\":12513:12540 */\n swap1\n pop\n /* \"#utility.yul\":12550:12621 */\n tag_424\n /* \"#utility.yul\":12618:12619 */\n 0x00\n /* \"#utility.yul\":12607:12616 */\n dup4\n /* \"#utility.yul\":12603:12620 */\n add\n /* \"#utility.yul\":12594:12600 */\n dup9\n /* \"#utility.yul\":12550:12621 */\n tag_255\n jump\t// in\n tag_424:\n /* \"#utility.yul\":12631:12703 */\n tag_425\n /* \"#utility.yul\":12699:12701 */\n 0x20\n /* \"#utility.yul\":12688:12697 */\n dup4\n /* \"#utility.yul\":12684:12702 */\n add\n /* \"#utility.yul\":12675:12681 */\n dup8\n /* \"#utility.yul\":12631:12703 */\n tag_232\n jump\t// in\n tag_425:\n /* \"#utility.yul\":12713:12783 */\n tag_426\n /* \"#utility.yul\":12779:12781 */\n 0x40\n /* \"#utility.yul\":12768:12777 */\n dup4\n /* \"#utility.yul\":12764:12782 */\n add\n /* \"#utility.yul\":12755:12761 */\n dup7\n /* \"#utility.yul\":12713:12783 */\n tag_262\n jump\t// in\n tag_426:\n /* \"#utility.yul\":12793:12865 */\n tag_427\n /* \"#utility.yul\":12861:12863 */\n 0x60\n /* \"#utility.yul\":12850:12859 */\n dup4\n /* \"#utility.yul\":12846:12864 */\n add\n /* \"#utility.yul\":12837:12843 */\n dup6\n /* \"#utility.yul\":12793:12865 */\n tag_234\n jump\t// in\n tag_427:\n /* \"#utility.yul\":12875:12944 */\n tag_428\n /* \"#utility.yul\":12939:12942 */\n 0x80\n /* \"#utility.yul\":12928:12937 */\n dup4\n /* \"#utility.yul\":12924:12943 */\n add\n /* \"#utility.yul\":12915:12921 */\n dup5\n /* \"#utility.yul\":12875:12944 */\n tag_266\n jump\t// in\n tag_428:\n /* \"#utility.yul\":12299:12951 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12957:13289 */\n tag_155:\n /* \"#utility.yul\":13078:13082 */\n 0x00\n /* \"#utility.yul\":13116:13118 */\n 0x40\n /* \"#utility.yul\":13105:13114 */\n dup3\n /* \"#utility.yul\":13101:13119 */\n add\n /* \"#utility.yul\":13093:13119 */\n swap1\n pop\n /* \"#utility.yul\":13129:13200 */\n tag_430\n /* \"#utility.yul\":13197:13198 */\n 0x00\n /* \"#utility.yul\":13186:13195 */\n dup4\n /* \"#utility.yul\":13182:13199 */\n add\n /* \"#utility.yul\":13173:13179 */\n dup6\n /* \"#utility.yul\":13129:13200 */\n tag_255\n jump\t// in\n tag_430:\n /* \"#utility.yul\":13210:13282 */\n tag_431\n /* \"#utility.yul\":13278:13280 */\n 0x20\n /* \"#utility.yul\":13267:13276 */\n dup4\n /* \"#utility.yul\":13263:13281 */\n add\n /* \"#utility.yul\":13254:13260 */\n dup5\n /* \"#utility.yul\":13210:13282 */\n tag_255\n jump\t// in\n tag_431:\n /* \"#utility.yul\":12957:13289 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13295:13475 */\n tag_273:\n /* \"#utility.yul\":13343:13420 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":13340:13341 */\n 0x00\n /* \"#utility.yul\":13333:13421 */\n mstore\n /* \"#utility.yul\":13440:13444 */\n 0x12\n /* \"#utility.yul\":13437:13438 */\n 0x04\n /* \"#utility.yul\":13430:13445 */\n mstore\n /* \"#utility.yul\":13464:13468 */\n 0x24\n /* \"#utility.yul\":13461:13462 */\n 0x00\n /* \"#utility.yul\":13454:13469 */\n revert\n /* \"#utility.yul\":13481:13666 */\n tag_201:\n /* \"#utility.yul\":13521:13522 */\n 0x00\n /* \"#utility.yul\":13538:13558 */\n tag_434\n /* \"#utility.yul\":13556:13557 */\n dup3\n /* \"#utility.yul\":13538:13558 */\n tag_231\n jump\t// in\n tag_434:\n /* \"#utility.yul\":13533:13558 */\n swap2\n pop\n /* \"#utility.yul\":13572:13592 */\n tag_435\n /* \"#utility.yul\":13590:13591 */\n dup4\n /* \"#utility.yul\":13572:13592 */\n tag_231\n jump\t// in\n tag_435:\n /* \"#utility.yul\":13567:13592 */\n swap3\n pop\n /* \"#utility.yul\":13611:13612 */\n dup3\n /* \"#utility.yul\":13601:13636 */\n tag_436\n jumpi\n /* \"#utility.yul\":13616:13634 */\n tag_437\n tag_273\n jump\t// in\n tag_437:\n /* \"#utility.yul\":13601:13636 */\n tag_436:\n /* \"#utility.yul\":13658:13659 */\n dup3\n /* \"#utility.yul\":13655:13656 */\n dup3\n /* \"#utility.yul\":13651:13660 */\n div\n /* \"#utility.yul\":13646:13660 */\n swap1\n pop\n /* \"#utility.yul\":13481:13666 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13672:14114 */\n tag_203:\n /* \"#utility.yul\":13821:13825 */\n 0x00\n /* \"#utility.yul\":13859:13861 */\n 0x60\n /* \"#utility.yul\":13848:13857 */\n dup3\n /* \"#utility.yul\":13844:13862 */\n add\n /* \"#utility.yul\":13836:13862 */\n swap1\n pop\n /* \"#utility.yul\":13872:13943 */\n tag_439\n /* \"#utility.yul\":13940:13941 */\n 0x00\n /* \"#utility.yul\":13929:13938 */\n dup4\n /* \"#utility.yul\":13925:13942 */\n add\n /* \"#utility.yul\":13916:13922 */\n dup7\n /* \"#utility.yul\":13872:13943 */\n tag_232\n jump\t// in\n tag_439:\n /* \"#utility.yul\":13953:14025 */\n tag_440\n /* \"#utility.yul\":14021:14023 */\n 0x20\n /* \"#utility.yul\":14010:14019 */\n dup4\n /* \"#utility.yul\":14006:14024 */\n add\n /* \"#utility.yul\":13997:14003 */\n dup6\n /* \"#utility.yul\":13953:14025 */\n tag_232\n jump\t// in\n tag_440:\n /* \"#utility.yul\":14035:14107 */\n tag_441\n /* \"#utility.yul\":14103:14105 */\n 0x40\n /* \"#utility.yul\":14092:14101 */\n dup4\n /* \"#utility.yul\":14088:14106 */\n add\n /* \"#utility.yul\":14079:14085 */\n dup5\n /* \"#utility.yul\":14035:14107 */\n tag_232\n jump\t// in\n tag_441:\n /* \"#utility.yul\":13672:14114 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14120:14300 */\n tag_209:\n /* \"#utility.yul\":14168:14245 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":14165:14166 */\n 0x00\n /* \"#utility.yul\":14158:14246 */\n mstore\n /* \"#utility.yul\":14265:14269 */\n 0x32\n /* \"#utility.yul\":14262:14263 */\n 0x04\n /* \"#utility.yul\":14255:14270 */\n mstore\n /* \"#utility.yul\":14289:14293 */\n 0x24\n /* \"#utility.yul\":14286:14287 */\n 0x00\n /* \"#utility.yul\":14279:14294 */\n revert\n /* \"#utility.yul\":14306:14482 */\n tag_211:\n /* \"#utility.yul\":14338:14339 */\n 0x00\n /* \"#utility.yul\":14355:14375 */\n tag_444\n /* \"#utility.yul\":14373:14374 */\n dup3\n /* \"#utility.yul\":14355:14375 */\n tag_231\n jump\t// in\n tag_444:\n /* \"#utility.yul\":14350:14375 */\n swap2\n pop\n /* \"#utility.yul\":14389:14409 */\n tag_445\n /* \"#utility.yul\":14407:14408 */\n dup4\n /* \"#utility.yul\":14389:14409 */\n tag_231\n jump\t// in\n tag_445:\n /* \"#utility.yul\":14384:14409 */\n swap3\n pop\n /* \"#utility.yul\":14428:14429 */\n dup3\n /* \"#utility.yul\":14418:14453 */\n tag_446\n jumpi\n /* \"#utility.yul\":14433:14451 */\n tag_447\n tag_273\n jump\t// in\n tag_447:\n /* \"#utility.yul\":14418:14453 */\n tag_446:\n /* \"#utility.yul\":14474:14475 */\n dup3\n /* \"#utility.yul\":14471:14472 */\n dup3\n /* \"#utility.yul\":14467:14476 */\n mod\n /* \"#utility.yul\":14462:14476 */\n swap1\n pop\n /* \"#utility.yul\":14306:14482 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14488:14663 */\n tag_223:\n /* \"#utility.yul\":14526:14529 */\n 0x00\n /* \"#utility.yul\":14549:14572 */\n tag_449\n /* \"#utility.yul\":14566:14571 */\n dup3\n /* \"#utility.yul\":14549:14572 */\n tag_263\n jump\t// in\n tag_449:\n /* \"#utility.yul\":14540:14572 */\n swap2\n pop\n /* \"#utility.yul\":14594:14604 */\n 0xffffffff\n /* \"#utility.yul\":14587:14592 */\n dup3\n /* \"#utility.yul\":14584:14605 */\n eq\n /* \"#utility.yul\":14581:14628 */\n iszero\n tag_450\n jumpi\n /* \"#utility.yul\":14608:14626 */\n tag_451\n tag_269\n jump\t// in\n tag_451:\n /* \"#utility.yul\":14581:14628 */\n tag_450:\n /* \"#utility.yul\":14655:14656 */\n 0x01\n /* \"#utility.yul\":14648:14653 */\n dup3\n /* \"#utility.yul\":14644:14657 */\n add\n /* \"#utility.yul\":14637:14657 */\n swap1\n pop\n /* \"#utility.yul\":14488:14663 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220dd5f4648a7c60017c9cd5d09ffc8e6f541c8834c9dc3bb425380ca5fc193f38b64736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": { + "@_187": { + "entryPoint": null, + "id": 187, + "parameterSlots": 1, + "returnSlots": 0 + }, + "abi_decode_t_enum$_RandomnessSource_$573_fromMemory": { + "entryPoint": 719, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_enum$_RandomnessSource_$573_fromMemory": { + "entryPoint": 742, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 802, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": 819, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_mul_t_uint64": { + "entryPoint": 624, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 792, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint64": { + "entryPoint": 557, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 577, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x21": { + "entryPoint": 864, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 697, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_enum$_RandomnessSource_$573": { + "entryPoint": 702, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2369:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "51:57:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "61:41:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "76:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "83:18:3", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "72:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "72:30:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "61:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_uint64", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "33:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "43:7:3", + "type": "" + } + ], + "src": "7:101:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "142:152:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "159:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "162:77:3", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "152:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "152:88:3" + }, + "nodeType": "YulExpressionStatement", + "src": "152:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "256:1:3", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "259:4:3", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "249:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "249:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "249:15:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "280:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "283:4:3", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "273:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "273:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "273:15:3" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "114:180:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "347:250:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "357:24:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "379:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint64", + "nodeType": "YulIdentifier", + "src": "362:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "362:19:3" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "357:1:3" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "390:24:3", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "412:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint64", + "nodeType": "YulIdentifier", + "src": "395:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "395:19:3" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "390:1:3" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "539:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "541:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "541:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "541:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "499:1:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "492:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "492:9:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "485:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "485:17:3" + }, + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "507:1:3" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "514:18:3", + "type": "", + "value": "0xffffffffffffffff" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "534:1:3" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "510:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "510:26:3" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "504:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "504:33:3" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "481:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "481:57:3" + }, + "nodeType": "YulIf", + "src": "478:83:3" + }, + { + "nodeType": "YulAssignment", + "src": "571:20:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "586:1:3" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "589:1:3" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "582:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "582:9:3" + }, + "variableNames": [ + { + "name": "product", + "nodeType": "YulIdentifier", + "src": "571:7:3" + } + ] + } + ] + }, + "name": "checked_mul_t_uint64", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "330:1:3", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "333:1:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "product", + "nodeType": "YulTypedName", + "src": "339:7:3", + "type": "" + } + ], + "src": "300:297:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "643:35:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "653:19:3", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "669:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "663:5:3" + }, + "nodeType": "YulFunctionCall", + "src": "663:9:3" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "653:6:3" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "636:6:3", + "type": "" + } + ], + "src": "603:75:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "773:28:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "790:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "793:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "783:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "783:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "783:12:3" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "684:117:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "896:28:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "913:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "916:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "906:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "906:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "906:12:3" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "807:117:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "993:56:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1027:16:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1036:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1039:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1029:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1029:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1029:12:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1016:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1023:1:3", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1013:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "1013:12:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1006:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1006:20:3" + }, + "nodeType": "YulIf", + "src": "1003:40:3" + } + ] + }, + "name": "validator_revert_t_enum$_RandomnessSource_$573", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "986:5:3", + "type": "" + } + ], + "src": "930:119:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1138:100:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1148:22:3", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1163:6:3" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1157:5:3" + }, + "nodeType": "YulFunctionCall", + "src": "1157:13:3" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1148:5:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1226:5:3" + } + ], + "functionName": { + "name": "validator_revert_t_enum$_RandomnessSource_$573", + "nodeType": "YulIdentifier", + "src": "1179:46:3" + }, + "nodeType": "YulFunctionCall", + "src": "1179:53:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1179:53:3" + } + ] + }, + "name": "abi_decode_t_enum$_RandomnessSource_$573_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1116:6:3", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1124:3:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1132:5:3", + "type": "" + } + ], + "src": "1055:183:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1341:294:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1387:83:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1389:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "1389:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1389:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1362:7:3" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1371:9:3" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1358:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1358:23:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1383:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1354:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1354:32:3" + }, + "nodeType": "YulIf", + "src": "1351:119:3" + }, + { + "nodeType": "YulBlock", + "src": "1480:148:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1495:15:3", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1509:1:3", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1499:6:3", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1524:94:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1590:9:3" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1601:6:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1586:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1586:22:3" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1610:7:3" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_RandomnessSource_$573_fromMemory", + "nodeType": "YulIdentifier", + "src": "1534:51:3" + }, + "nodeType": "YulFunctionCall", + "src": "1534:84:3" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1524:6:3" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_enum$_RandomnessSource_$573_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1311:9:3", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1322:7:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1334:6:3", + "type": "" + } + ], + "src": "1244:391:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1686:32:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1696:16:3", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1707:5:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1696:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1668:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1678:7:3", + "type": "" + } + ], + "src": "1641:77:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1789:53:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1806:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1829:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1811:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "1811:24:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1799:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1799:37:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1799:37:3" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1777:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1784:3:3", + "type": "" + } + ], + "src": "1724:118:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1974:206:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1984:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1996:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2007:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1992:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1992:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1984:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2064:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2077:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2088:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2073:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "2073:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "2020:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "2020:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2020:71:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "2145:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2158:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2169:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2154:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "2154:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "2101:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "2101:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2101:72:3" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1938:9:3", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1950:6:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1958:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1969:4:3", + "type": "" + } + ], + "src": "1848:332:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2214:152:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2231:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2234:77:3", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2224:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "2224:88:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2224:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2328:1:3", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2331:4:3", + "type": "", + "value": "0x21" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2321:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "2321:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2321:15:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2352:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2355:4:3", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2345:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "2345:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2345:15:3" + } + ] + }, + "name": "panic_error_0x21", + "nodeType": "YulFunctionDefinition", + "src": "2186:180:3" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_mul_t_uint64(x, y) -> product {\n x := cleanup_t_uint64(x)\n y := cleanup_t_uint64(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function validator_revert_t_enum$_RandomnessSource_$573(value) {\n if iszero(lt(value, 2)) { revert(0, 0) }\n }\n\n function abi_decode_t_enum$_RandomnessSource_$573_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_enum$_RandomnessSource_$573(value)\n }\n\n function abi_decode_tuple_t_enum$_RandomnessSource_$573_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_enum$_RandomnessSource_$573_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n function panic_error_0x21() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n\n}\n", + "id": 3, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "60806040526108096000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a0600060146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550633b9aca00600060149054906101000a900467ffffffffffffffff166200009a919062000270565b67ffffffffffffffff1660015560028060006101000a81548160ff021916908360ff16021790555060028060016101000a81548163ffffffff021916908363ffffffff160217905550600380556014600455670de0b6b3a76400006005557f6d795f64656d6f5f73616c745f6368616e67655f6d650000000000000000000060065560405162001c9738038062001c978339818101604052810190620001419190620002e6565b6000670de0b6b3a7640000905080341015620001985734816040517fea691a4b0000000000000000000000000000000000000000000000000000000081526004016200018f92919062000333565b60405180910390fd5b81600b60146101000a81548160ff02191690836001811115620001c057620001bf62000360565b5b021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006007819055506000600a8190555067ffffffffffffffff60088190555050506200038f565b600067ffffffffffffffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200027d826200022d565b91506200028a836200022d565b92508167ffffffffffffffff0483118215151615620002ae57620002ad62000241565b5b828202905092915050565b600080fd5b60028110620002cc57600080fd5b50565b600081519050620002e081620002be565b92915050565b600060208284031215620002ff57620002fe620002b9565b5b60006200030f84828501620002cf565b91505092915050565b6000819050919050565b6200032d8162000318565b82525050565b60006040820190506200034a600083018562000322565b62000359602083018462000322565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6118f8806200039f6000396000f3fe6080604052600436106101085760003560e01c80633a984bc51161009557806376c7a3c71161006457806376c7a3c71461030a5780637d5a9c5a14610335578063cad0338c14610360578063d11711a21461038b578063f3baf0701461039557610108565b80633a984bc51461025e57806349943a131461028957806351a8e298146102b45780636b31ee01146102df57610108565b80631fe543e3116100dc5780631fe543e314610177578063200d2ed2146101a05780632b855d19146101cb57806335c1d349146101f6578063360131891461023357610108565b80626d6cae1461010d578063081275d414610138578063160344e21461014257806317a472821461014c575b600080fd5b34801561011957600080fd5b506101226103c0565b60405161012f9190611049565b60405180910390f35b6101406103c6565b005b61014a610457565b005b34801561015857600080fd5b50610161610943565b60405161016e919061107d565b60405180910390f35b34801561018357600080fd5b5061019e60048036038101906101999190611231565b610949565b005b3480156101ac57600080fd5b506101b56109cd565b6040516101c29190611304565b60405180910390f35b3480156101d757600080fd5b506101e0610b14565b6040516101ed9190611049565b60405180910390f35b34801561020257600080fd5b5061021d6004803603810190610218919061131f565b610b1a565b60405161022a919061138d565b60405180910390f35b34801561023f57600080fd5b50610248610b59565b6040516102559190611407565b60405180910390f35b34801561026a57600080fd5b50610273610b7d565b6040516102809190611049565b60405180910390f35b34801561029557600080fd5b5061029e610b83565b6040516102ab9190611049565b60405180910390f35b3480156102c057600080fd5b506102c9610b89565b6040516102d69190611445565b60405180910390f35b3480156102eb57600080fd5b506102f4610ba3565b6040516103019190611049565b60405180910390f35b34801561031657600080fd5b5061031f610ba9565b60405161032c9190611049565b60405180910390f35b34801561034157600080fd5b5061034a610baf565b604051610357919061147f565b60405180910390f35b34801561036c57600080fd5b50610375610bc5565b60405161038291906114b6565b60405180910390f35b610393610bd8565b005b3480156103a157600080fd5b506103aa610d99565b6040516103b79190611049565b60405180910390f35b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0408a7f600854346040518363ffffffff1660e01b81526004016104239291906114d1565b600060405180830381600087803b15801561043d57600080fd5b505af1158015610451573d6000803e3d6000fd5b50505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b157600080fd5b600060038111156104c5576104c461128d565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b81526004016105209190611049565b602060405180830381865afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610561919061151f565b60038111156105735761057261128d565b5b146105aa576040517f4edbe0e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460098054905010156105ff576009805490506003546040517f5fdd6f490000000000000000000000000000000000000000000000000000000081526004016105f69291906114d1565b60405180910390fd5b60045460098054905010610653576009805490506004546040517fe318577800000000000000000000000000000000000000000000000000000000815260040161064a9291906114d1565b60405180910390fd5b60003490506001548110156106a357806001546040517f0167202800000000000000000000000000000000000000000000000000000000815260040161069a9291906114d1565b60405180910390fd5b6000670de0b6b3a7640000905080600a546106be919061157b565b47101561071157600a54476106d391906115d1565b816040517fea691a4b0000000000000000000000000000000000000000000000000000000081526004016107089291906114d1565b60405180910390fd5b600060018111156107255761072461128d565b5b600b60149054906101000a900460ff1660018111156107475761074661128d565b5b14156108525760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639478430c3384600060149054906101000a900467ffffffffffffffff16600760008154809291906107b590611605565b9190505560001b60065418600260009054906101000a900460ff16600260019054906101000a900463ffffffff166040518763ffffffff1660e01b81526004016108049695949392919061167f565b6020604051808303816000875af1158015610823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084791906116f5565b60088190555061093f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333c14a633384600060149054906101000a900467ffffffffffffffff16600760008154809291906108ba90611605565b9190505560001b60065418600260009054906101000a900460ff166040518663ffffffff1660e01b81526004016108f5959493929190611722565b6020604051808303816000875af1158015610914573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093891906116f5565b6008819055505b5050565b60065481565b61080973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109bf57336108096040517fc68806f50000000000000000000000000000000000000000000000000000000081526004016109b6929190611775565b60405180910390fd5b6109c98282610d9f565b5050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b8152600401610a2b9190611049565b602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c919061151f565b905060006003811115610a8257610a8161128d565b5b816003811115610a9557610a9461128d565b5b1415610aa5576000915050610b11565b60016003811115610ab957610ab861128d565b5b816003811115610acc57610acb61128d565b5b1480610afc575060026003811115610ae757610ae661128d565b5b816003811115610afa57610af961128d565b5b145b15610b0b576001915050610b11565b60029150505b90565b60075481565b60098181548110610b2a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60055481565b600060149054906101000a900467ffffffffffffffff1681565b600a5481565b60015481565b600260019054906101000a900463ffffffff1681565b600260009054906101000a900460ff1681565b60006003811115610bec57610beb61128d565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b8152600401610c479190611049565b602060405180830381865afa158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c88919061151f565b6003811115610c9a57610c9961128d565b5b14610cd1576040517f4edbe0e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005543414610d1b57346005546040517fe6be2dc8000000000000000000000000000000000000000000000000000000008152600401610d129291906114d1565b60405180910390fd5b6009339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034600a6000828254610d90919061157b565b92505081905550565b60045481565b610da881610dac565b5050565b6000600980549050600260009054906101000a900460ff1660ff1610610dd757600980549050610deb565b600260009054906101000a900460ff1660ff165b9050600081600a54610dfd91906117cd565b90507f94942738dac5813db86bc09e12c382aaa6824a675cfd6f834a8e2d5a964ac3c4600980549050600a5484604051610e39939291906117fe565b60405180910390a160005b828163ffffffff161015610fd6576000848263ffffffff1681518110610e6d57610e6c611835565b5b60200260200101519050600060098054905082610e8a9190611864565b9050600060098281548110610ea257610ea1611835565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060098281548110610ee357610ee2611835565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558073ffffffffffffffffffffffffffffffffffffffff167f7adb26a7cfdd051fb0b5aedd769aead9026d0a9ebcc7f9b4f0b34b19778243a38487604051610f589291906114d1565b60405180910390a284600a6000828254610f7291906115d1565b925050819055508073ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015610fbf573d6000803e3d6000fd5b505050508080610fce90611895565b915050610e44565b5060096000610fe59190610ff2565b6000600881905550505050565b50805460008255906000526020600020908101906110109190611013565b50565b5b8082111561102c576000816000905550600101611014565b5090565b6000819050919050565b61104381611030565b82525050565b600060208201905061105e600083018461103a565b92915050565b6000819050919050565b61107781611064565b82525050565b6000602082019050611092600083018461106e565b92915050565b6000604051905090565b600080fd5b600080fd5b6110b581611030565b81146110c057600080fd5b50565b6000813590506110d2816110ac565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611126826110dd565b810181811067ffffffffffffffff82111715611145576111446110ee565b5b80604052505050565b6000611158611098565b9050611164828261111d565b919050565b600067ffffffffffffffff821115611184576111836110ee565b5b602082029050602081019050919050565b600080fd5b60006111ad6111a884611169565b61114e565b905080838252602082019050602084028301858111156111d0576111cf611195565b5b835b818110156111f957806111e588826110c3565b8452602084019350506020810190506111d2565b5050509392505050565b600082601f830112611218576112176110d8565b5b813561122884826020860161119a565b91505092915050565b60008060408385031215611248576112476110a2565b5b6000611256858286016110c3565b925050602083013567ffffffffffffffff811115611277576112766110a7565b5b61128385828601611203565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106112cd576112cc61128d565b5b50565b60008190506112de826112bc565b919050565b60006112ee826112d0565b9050919050565b6112fe816112e3565b82525050565b600060208201905061131960008301846112f5565b92915050565b600060208284031215611335576113346110a2565b5b6000611343848285016110c3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113778261134c565b9050919050565b6113878161136c565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000819050919050565b60006113cd6113c86113c38461134c565b6113a8565b61134c565b9050919050565b60006113df826113b2565b9050919050565b60006113f1826113d4565b9050919050565b611401816113e6565b82525050565b600060208201905061141c60008301846113f8565b92915050565b600067ffffffffffffffff82169050919050565b61143f81611422565b82525050565b600060208201905061145a6000830184611436565b92915050565b600063ffffffff82169050919050565b61147981611460565b82525050565b60006020820190506114946000830184611470565b92915050565b600060ff82169050919050565b6114b08161149a565b82525050565b60006020820190506114cb60008301846114a7565b92915050565b60006040820190506114e6600083018561103a565b6114f3602083018461103a565b9392505050565b6004811061150757600080fd5b50565b600081519050611519816114fa565b92915050565b600060208284031215611535576115346110a2565b5b60006115438482850161150a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061158682611030565b915061159183611030565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156115c6576115c561154c565b5b828201905092915050565b60006115dc82611030565b91506115e783611030565b9250828210156115fa576115f961154c565b5b828203905092915050565b600061161082611030565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116435761164261154c565b5b600182019050919050565b600061166961166461165f84611460565b6113a8565b611422565b9050919050565b6116798161164e565b82525050565b600060c082019050611694600083018961137e565b6116a1602083018861103a565b6116ae6040830187611436565b6116bb606083018661106e565b6116c860808301856114a7565b6116d560a0830184611670565b979650505050505050565b6000815190506116ef816110ac565b92915050565b60006020828403121561170b5761170a6110a2565b5b6000611719848285016116e0565b91505092915050565b600060a082019050611737600083018861137e565b611744602083018761103a565b6117516040830186611436565b61175e606083018561106e565b61176b60808301846114a7565b9695505050505050565b600060408201905061178a600083018561137e565b611797602083018461137e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006117d882611030565b91506117e383611030565b9250826117f3576117f261179e565b5b828204905092915050565b6000606082019050611813600083018661103a565b611820602083018561103a565b61182d604083018461103a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061186f82611030565b915061187a83611030565b92508261188a5761188961179e565b5b828206905092915050565b60006118a082611460565b915063ffffffff8214156118b7576118b661154c565b5b60018201905091905056fea2646970667358221220dd5f4648a7c60017c9cd5d09ffc8e6f541c8834c9dc3bb425380ca5fc193f38b64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x809 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH3 0x186A0 PUSH1 0x0 PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH8 0xFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH4 0x3B9ACA00 PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH3 0x9A SWAP2 SWAP1 PUSH3 0x270 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x1 SSTORE PUSH1 0x2 DUP1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x2 DUP1 PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH4 0xFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH4 0xFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x3 DUP1 SSTORE PUSH1 0x14 PUSH1 0x4 SSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0x5 SSTORE PUSH32 0x6D795F64656D6F5F73616C745F6368616E67655F6D6500000000000000000000 PUSH1 0x6 SSTORE PUSH1 0x40 MLOAD PUSH3 0x1C97 CODESIZE SUB DUP1 PUSH3 0x1C97 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH3 0x141 SWAP2 SWAP1 PUSH3 0x2E6 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 SWAP1 POP DUP1 CALLVALUE LT ISZERO PUSH3 0x198 JUMPI CALLVALUE DUP2 PUSH1 0x40 MLOAD PUSH32 0xEA691A4B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH3 0x18F SWAP3 SWAP2 SWAP1 PUSH3 0x333 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0xB PUSH1 0x14 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH3 0x1C0 JUMPI PUSH3 0x1BF PUSH3 0x360 JUMP JUMPDEST JUMPDEST MUL OR SWAP1 SSTORE POP CALLER PUSH1 0xB PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x7 DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0xA DUP2 SWAP1 SSTORE POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x8 DUP2 SWAP1 SSTORE POP POP POP PUSH3 0x38F JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x27D DUP3 PUSH3 0x22D JUMP JUMPDEST SWAP2 POP PUSH3 0x28A DUP4 PUSH3 0x22D JUMP JUMPDEST SWAP3 POP DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH3 0x2AE JUMPI PUSH3 0x2AD PUSH3 0x241 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH3 0x2CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH3 0x2E0 DUP2 PUSH3 0x2BE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x2FF JUMPI PUSH3 0x2FE PUSH3 0x2B9 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH3 0x30F DUP5 DUP3 DUP6 ADD PUSH3 0x2CF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0x32D DUP2 PUSH3 0x318 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH3 0x34A PUSH1 0x0 DUP4 ADD DUP6 PUSH3 0x322 JUMP JUMPDEST PUSH3 0x359 PUSH1 0x20 DUP4 ADD DUP5 PUSH3 0x322 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x18F8 DUP1 PUSH3 0x39F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x108 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A984BC5 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0x76C7A3C7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x76C7A3C7 EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0x7D5A9C5A EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xCAD0338C EQ PUSH2 0x360 JUMPI DUP1 PUSH4 0xD11711A2 EQ PUSH2 0x38B JUMPI DUP1 PUSH4 0xF3BAF070 EQ PUSH2 0x395 JUMPI PUSH2 0x108 JUMP JUMPDEST DUP1 PUSH4 0x3A984BC5 EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0x49943A13 EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x51A8E298 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0x6B31EE01 EQ PUSH2 0x2DF JUMPI PUSH2 0x108 JUMP JUMPDEST DUP1 PUSH4 0x1FE543E3 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0x1FE543E3 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x200D2ED2 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x2B855D19 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x35C1D349 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x36013189 EQ PUSH2 0x233 JUMPI PUSH2 0x108 JUMP JUMPDEST DUP1 PUSH3 0x6D6CAE EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x81275D4 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x160344E2 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x17A47282 EQ PUSH2 0x14C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x122 PUSH2 0x3C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH2 0x3C6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x457 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x161 PUSH2 0x943 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x16E SWAP2 SWAP1 PUSH2 0x107D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x199 SWAP2 SWAP1 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0x949 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B5 PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C2 SWAP2 SWAP1 PUSH2 0x1304 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E0 PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1ED SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x202 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x218 SWAP2 SWAP1 PUSH2 0x131F JUMP JUMPDEST PUSH2 0xB1A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22A SWAP2 SWAP1 PUSH2 0x138D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x248 PUSH2 0xB59 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x255 SWAP2 SWAP1 PUSH2 0x1407 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x273 PUSH2 0xB7D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x280 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH2 0xB83 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C9 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D6 SWAP2 SWAP1 PUSH2 0x1445 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F4 PUSH2 0xBA3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x301 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x316 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31F PUSH2 0xBA9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x32C SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34A PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x357 SWAP2 SWAP1 PUSH2 0x147F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x375 PUSH2 0xBC5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x382 SWAP2 SWAP1 PUSH2 0x14B6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x393 PUSH2 0xBD8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AA PUSH2 0xD99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B7 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0408A7F PUSH1 0x8 SLOAD CALLVALUE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x423 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x451 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0xB PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4C5 JUMPI PUSH2 0x4C4 PUSH2 0x128D JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8A4676F PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x520 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x53D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x561 SWAP2 SWAP1 PUSH2 0x151F JUMP JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x573 JUMPI PUSH2 0x572 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ PUSH2 0x5AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x4EDBE0E300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x9 DUP1 SLOAD SWAP1 POP LT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH32 0x5FDD6F4900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5F6 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x9 DUP1 SLOAD SWAP1 POP LT PUSH2 0x653 JUMPI PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE318577800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x64A SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE SWAP1 POP PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0x6A3 JUMPI DUP1 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x167202800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x69A SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 SWAP1 POP DUP1 PUSH1 0xA SLOAD PUSH2 0x6BE SWAP2 SWAP1 PUSH2 0x157B JUMP JUMPDEST SELFBALANCE LT ISZERO PUSH2 0x711 JUMPI PUSH1 0xA SLOAD SELFBALANCE PUSH2 0x6D3 SWAP2 SWAP1 PUSH2 0x15D1 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0xEA691A4B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x708 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x725 JUMPI PUSH2 0x724 PUSH2 0x128D JUMP JUMPDEST JUMPDEST PUSH1 0xB PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x747 JUMPI PUSH2 0x746 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ ISZERO PUSH2 0x852 JUMPI PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9478430C CALLER DUP5 PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x7 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH2 0x7B5 SWAP1 PUSH2 0x1605 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE PUSH1 0x0 SHL PUSH1 0x6 SLOAD XOR PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x804 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x167F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x823 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x847 SWAP2 SWAP1 PUSH2 0x16F5 JUMP JUMPDEST PUSH1 0x8 DUP2 SWAP1 SSTORE POP PUSH2 0x93F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x33C14A63 CALLER DUP5 PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x7 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH2 0x8BA SWAP1 PUSH2 0x1605 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE PUSH1 0x0 SHL PUSH1 0x6 SLOAD XOR PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8F5 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1722 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x914 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x938 SWAP2 SWAP1 PUSH2 0x16F5 JUMP JUMPDEST PUSH1 0x8 DUP2 SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x809 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x9BF JUMPI CALLER PUSH2 0x809 PUSH1 0x40 MLOAD PUSH32 0xC68806F500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9B6 SWAP3 SWAP2 SWAP1 PUSH2 0x1775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9C9 DUP3 DUP3 PUSH2 0xD9F JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8A4676F PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA2B SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA6C SWAP2 SWAP1 PUSH2 0x151F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA82 JUMPI PUSH2 0xA81 PUSH2 0x128D JUMP JUMPDEST JUMPDEST DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA95 JUMPI PUSH2 0xA94 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ ISZERO PUSH2 0xAA5 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0xB11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAB9 JUMPI PUSH2 0xAB8 PUSH2 0x128D JUMP JUMPDEST JUMPDEST DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xACC JUMPI PUSH2 0xACB PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ DUP1 PUSH2 0xAFC JUMPI POP PUSH1 0x2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAE7 JUMPI PUSH2 0xAE6 PUSH2 0x128D JUMP JUMPDEST JUMPDEST DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAFA JUMPI PUSH2 0xAF9 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xB0B JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0xB11 JUMP JUMPDEST PUSH1 0x2 SWAP2 POP POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xB2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xBEC JUMPI PUSH2 0xBEB PUSH2 0x128D JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8A4676F PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC47 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC88 SWAP2 SWAP1 PUSH2 0x151F JUMP JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xC9A JUMPI PUSH2 0xC99 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x4EDBE0E300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD CALLVALUE EQ PUSH2 0xD1B JUMPI CALLVALUE PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE6BE2DC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD12 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x9 CALLER SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP PUSH1 0x1 SWAP1 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP1 SWAP2 SWAP1 SWAP2 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE PUSH1 0xA PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xD90 SWAP2 SWAP1 PUSH2 0x157B JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xDA8 DUP2 PUSH2 0xDAC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND LT PUSH2 0xDD7 JUMPI PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH2 0xDEB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xA SLOAD PUSH2 0xDFD SWAP2 SWAP1 PUSH2 0x17CD JUMP JUMPDEST SWAP1 POP PUSH32 0x94942738DAC5813DB86BC09E12C382AAA6824A675CFD6F834A8E2D5A964AC3C4 PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0xA SLOAD DUP5 PUSH1 0x40 MLOAD PUSH2 0xE39 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x17FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 JUMPDEST DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x0 DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0xE6D JUMPI PUSH2 0xE6C PUSH2 0x1835 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x9 DUP1 SLOAD SWAP1 POP DUP3 PUSH2 0xE8A SWAP2 SWAP1 PUSH2 0x1864 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x9 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xEA2 JUMPI PUSH2 0xEA1 PUSH2 0x1835 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH1 0x9 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xEE3 JUMPI PUSH2 0xEE2 PUSH2 0x1835 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 SSTORE DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7ADB26A7CFDD051FB0B5AEDD769AEAD9026D0A9EBCC7F9B4F0B34B19778243A3 DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0xF58 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP5 PUSH1 0xA PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xF72 SWAP2 SWAP1 PUSH2 0x15D1 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP7 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xFBF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0xFCE SWAP1 PUSH2 0x1895 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xE44 JUMP JUMPDEST POP PUSH1 0x9 PUSH1 0x0 PUSH2 0xFE5 SWAP2 SWAP1 PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1010 SWAP2 SWAP1 PUSH2 0x1013 JUMP JUMPDEST POP JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x102C JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0x1014 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1043 DUP2 PUSH2 0x1030 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x105E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x103A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1077 DUP2 PUSH2 0x1064 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1092 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x106E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10B5 DUP2 PUSH2 0x1030 JUMP JUMPDEST DUP2 EQ PUSH2 0x10C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x10D2 DUP2 PUSH2 0x10AC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1126 DUP3 PUSH2 0x10DD JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1145 JUMPI PUSH2 0x1144 PUSH2 0x10EE JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1158 PUSH2 0x1098 JUMP JUMPDEST SWAP1 POP PUSH2 0x1164 DUP3 DUP3 PUSH2 0x111D JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1184 JUMPI PUSH2 0x1183 PUSH2 0x10EE JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11AD PUSH2 0x11A8 DUP5 PUSH2 0x1169 JUMP JUMPDEST PUSH2 0x114E JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x11D0 JUMPI PUSH2 0x11CF PUSH2 0x1195 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11F9 JUMPI DUP1 PUSH2 0x11E5 DUP9 DUP3 PUSH2 0x10C3 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11D2 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1218 JUMPI PUSH2 0x1217 PUSH2 0x10D8 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1228 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x119A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1248 JUMPI PUSH2 0x1247 PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1256 DUP6 DUP3 DUP7 ADD PUSH2 0x10C3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1277 JUMPI PUSH2 0x1276 PUSH2 0x10A7 JUMP JUMPDEST JUMPDEST PUSH2 0x1283 DUP6 DUP3 DUP7 ADD PUSH2 0x1203 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x12CD JUMPI PUSH2 0x12CC PUSH2 0x128D JUMP JUMPDEST JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH2 0x12DE DUP3 PUSH2 0x12BC JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12EE DUP3 PUSH2 0x12D0 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x12FE DUP2 PUSH2 0x12E3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1319 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x12F5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1335 JUMPI PUSH2 0x1334 PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1343 DUP5 DUP3 DUP6 ADD PUSH2 0x10C3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1377 DUP3 PUSH2 0x134C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1387 DUP2 PUSH2 0x136C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x13A2 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x137E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13CD PUSH2 0x13C8 PUSH2 0x13C3 DUP5 PUSH2 0x134C JUMP JUMPDEST PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x134C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13DF DUP3 PUSH2 0x13B2 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13F1 DUP3 PUSH2 0x13D4 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1401 DUP2 PUSH2 0x13E6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x141C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x13F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x143F DUP2 PUSH2 0x1422 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x145A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1436 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1479 DUP2 PUSH2 0x1460 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1494 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1470 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x14B0 DUP2 PUSH2 0x149A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x14CB PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x14A7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x14E6 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x14F3 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x103A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x1507 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1519 DUP2 PUSH2 0x14FA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1535 JUMPI PUSH2 0x1534 PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1543 DUP5 DUP3 DUP6 ADD PUSH2 0x150A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1586 DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x1591 DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x15C6 JUMPI PUSH2 0x15C5 PUSH2 0x154C JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15DC DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x15E7 DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 LT ISZERO PUSH2 0x15FA JUMPI PUSH2 0x15F9 PUSH2 0x154C JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1610 DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1643 JUMPI PUSH2 0x1642 PUSH2 0x154C JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1669 PUSH2 0x1664 PUSH2 0x165F DUP5 PUSH2 0x1460 JUMP JUMPDEST PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x1422 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1679 DUP2 PUSH2 0x164E JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP PUSH2 0x1694 PUSH1 0x0 DUP4 ADD DUP10 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x16A1 PUSH1 0x20 DUP4 ADD DUP9 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x16AE PUSH1 0x40 DUP4 ADD DUP8 PUSH2 0x1436 JUMP JUMPDEST PUSH2 0x16BB PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x106E JUMP JUMPDEST PUSH2 0x16C8 PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x16D5 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x1670 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x16EF DUP2 PUSH2 0x10AC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x170B JUMPI PUSH2 0x170A PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1719 DUP5 DUP3 DUP6 ADD PUSH2 0x16E0 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1737 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x1744 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x1751 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1436 JUMP JUMPDEST PUSH2 0x175E PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x106E JUMP JUMPDEST PUSH2 0x176B PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x14A7 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x178A PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x1797 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x137E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D8 DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x17E3 DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x17F3 JUMPI PUSH2 0x17F2 PUSH2 0x179E JUMP JUMPDEST JUMPDEST DUP3 DUP3 DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1813 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x1820 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x182D PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x103A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x186F DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x187A DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x188A JUMPI PUSH2 0x1889 PUSH2 0x179E JUMP JUMPDEST JUMPDEST DUP3 DUP3 MOD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18A0 DUP3 PUSH2 0x1460 JUMP JUMPDEST SWAP2 POP PUSH4 0xFFFFFFFF DUP3 EQ ISZERO PUSH2 0x18B7 JUMPI PUSH2 0x18B6 PUSH2 0x154C JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0x5F CHAINID BASEFEE 0xA7 0xC6 STOP OR 0xC9 0xCD 0x5D MULMOD SELFDESTRUCT 0xC8 0xE6 CREATE2 COINBASE 0xC8 DUP4 0x4C SWAP14 0xC3 0xBB TIMESTAMP MSTORE8 DUP1 0xCA 0x5F 0xC1 SWAP4 RETURN DUP12 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "270:11368:0:-:0;;;431:42;381:93;;;;;;;;;;;;;;;;;;;;3063:6;3025:44;;;;;;;;;;;;;;;;;;;;3486:6;3462:21;;;;;;;;;;;:30;;;;:::i;:::-;3437:55;;;;3685:1;3658:28;;;;;;;;;;;;;;;;;;;;292:1:1;4095:53:0;;;;;;;;;;;;;;;;;;;;4261:1;4227:35;;4648:2;4614:36;;4779:7;4744:42;;4875:53;;;5511:692;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5750:23:::1;5776:19;5750:45;;5872:15;5860:9;:27;5856:106;;;5924:9;5935:15;5910:41;;;;;;;;;;;;:::i;:::-;;;;;;;;5856:106;5991:6;5972:16;;:25;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;6015:10;6007:5;;:18;;;;;;;;;;;;;;;;;;6056:1;6035:18;:22;;;;6077:1;6067:7;:11;;;;6187:9;6175;:21;;;;5608:595;5511:692:::0;270:11368;;7:101:3;43:7;83:18;76:5;72:30;61:41;;7:101;;;:::o;114:180::-;162:77;159:1;152:88;259:4;256:1;249:15;283:4;280:1;273:15;300:297;339:7;362:19;379:1;362:19;:::i;:::-;357:24;;395:19;412:1;395:19;:::i;:::-;390:24;;534:1;514:18;510:26;507:1;504:33;499:1;492:9;485:17;481:57;478:83;;;541:18;;:::i;:::-;478:83;589:1;586;582:9;571:20;;300:297;;;;:::o;684:117::-;793:1;790;783:12;930:119;1023:1;1016:5;1013:12;1003:40;;1039:1;1036;1029:12;1003:40;930:119;:::o;1055:183::-;1132:5;1163:6;1157:13;1148:22;;1179:53;1226:5;1179:53;:::i;:::-;1055:183;;;;:::o;1244:391::-;1334:6;1383:2;1371:9;1362:7;1358:23;1354:32;1351:119;;;1389:79;;:::i;:::-;1351:119;1509:1;1534:84;1610:7;1601:6;1590:9;1586:22;1534:84;:::i;:::-;1524:94;;1480:148;1244:391;;;;:::o;1641:77::-;1678:7;1707:5;1696:16;;1641:77;;;:::o;1724:118::-;1811:24;1829:5;1811:24;:::i;:::-;1806:3;1799:37;1724:118;;:::o;1848:332::-;1969:4;2007:2;1996:9;1992:18;1984:26;;2020:71;2088:1;2077:9;2073:17;2064:6;2020:71;:::i;:::-;2101:72;2169:2;2158:9;2154:18;2145:6;2101:72;:::i;:::-;1848:332;;;;;:::o;2186:180::-;2234:77;2231:1;2224:88;2331:4;2328:1;2321:15;2355:4;2352:1;2345:15;270:11368:0;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@FULFILLMENT_GAS_LIMIT_86": { + "entryPoint": 2953, + "id": 86, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@MAX_PARTICIPANTS_108": { + "entryPoint": 3481, + "id": 108, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@MIN_FEE_92": { + "entryPoint": 2985, + "id": 92, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@MIN_PARTICIPANTS_104": { + "entryPoint": 2941, + "id": 104, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@NUM_WINNERS_96": { + "entryPoint": 3013, + "id": 96, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@PARTICIPATION_FEE_112": { + "entryPoint": 2947, + "id": 112, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@SALT_PREFIX_116": { + "entryPoint": 2371, + "id": 116, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@VRF_BLOCKS_DELAY_100": { + "entryPoint": 2991, + "id": 100, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@fulfillRandomWords_529": { + "entryPoint": 3487, + "id": 529, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@globalRequestCount_119": { + "entryPoint": 2836, + "id": 119, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@increaseRequestFee_417": { + "entryPoint": 966, + "id": 417, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@jackpot_129": { + "entryPoint": 2979, + "id": 129, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@participants_126": { + "entryPoint": 2842, + "id": 126, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@participate_274": { + "entryPoint": 3032, + "id": 274, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@pickWinners_515": { + "entryPoint": 3500, + "id": 515, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@randomness_13": { + "entryPoint": 2905, + "id": 13, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@rawFulfillRandomWords_731": { + "entryPoint": 2377, + "id": 731, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@requestId_122": { + "entryPoint": 960, + "id": 122, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@startLottery_404": { + "entryPoint": 1111, + "id": 404, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@status_233": { + "entryPoint": 2509, + "id": 233, + "parameterSlots": 0, + "returnSlots": 1 + }, + "abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr": { + "entryPoint": 4506, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_decode_t_array$_t_uint256_$dyn_memory_ptr": { + "entryPoint": 4611, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_enum$_RequestStatus_$570_fromMemory": { + "entryPoint": 5386, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 4291, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256_fromMemory": { + "entryPoint": 5856, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_enum$_RequestStatus_$570_fromMemory": { + "entryPoint": 5407, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": 4895, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 5877, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_array$_t_uint256_$dyn_memory_ptr": { + "entryPoint": 4657, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_t_address_to_t_address_fromStack": { + "entryPoint": 4990, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_bytes32_to_t_bytes32_fromStack": { + "entryPoint": 4206, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_contract$_Randomness_$687_to_t_address_fromStack": { + "entryPoint": 5112, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_enum$_LotteryStatus_$82_to_t_uint8_fromStack": { + "entryPoint": 4853, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 4154, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint32_to_t_uint32_fromStack": { + "entryPoint": 5232, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint32_to_t_uint64_fromStack": { + "entryPoint": 5744, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint64_to_t_uint64_fromStack": { + "entryPoint": 5174, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint8_to_t_uint8_fromStack": { + "entryPoint": 5287, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": 5005, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed": { + "entryPoint": 6005, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_uint256_t_uint64_t_bytes32_t_uint8__to_t_address_t_uint256_t_uint64_t_bytes32_t_uint8__fromStack_reversed": { + "entryPoint": 5922, + "id": null, + "parameterSlots": 6, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_uint256_t_uint64_t_bytes32_t_uint8_t_uint32__to_t_address_t_uint256_t_uint64_t_bytes32_t_uint8_t_uint64__fromStack_reversed": { + "entryPoint": 5759, + "id": null, + "parameterSlots": 7, + "returnSlots": 1 + }, + "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { + "entryPoint": 4221, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_contract$_Randomness_$687__to_t_address__fromStack_reversed": { + "entryPoint": 5127, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_enum$_LotteryStatus_$82__to_t_uint8__fromStack_reversed": { + "entryPoint": 4868, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 4169, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": 5329, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": 6142, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { + "entryPoint": 5247, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { + "entryPoint": 5189, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": { + "entryPoint": 5302, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_memory": { + "entryPoint": 4430, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": 4248, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr": { + "entryPoint": 4457, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 5499, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_div_t_uint256": { + "entryPoint": 6093, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_sub_t_uint256": { + "entryPoint": 5585, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 4972, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_bytes32": { + "entryPoint": 4196, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_enum$_LotteryStatus_$82": { + "entryPoint": 4816, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 4940, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 4144, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint32": { + "entryPoint": 5216, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint64": { + "entryPoint": 5154, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint8": { + "entryPoint": 5274, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_contract$_Randomness_$687_to_t_address": { + "entryPoint": 5094, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_enum$_LotteryStatus_$82_to_t_uint8": { + "entryPoint": 4835, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_uint160_to_t_address": { + "entryPoint": 5076, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_uint160_to_t_uint160": { + "entryPoint": 5042, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_uint32_to_t_uint64": { + "entryPoint": 5710, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "finalize_allocation": { + "entryPoint": 4381, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "identity": { + "entryPoint": 5032, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "increment_t_uint256": { + "entryPoint": 5637, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "increment_t_uint32": { + "entryPoint": 6293, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "mod_t_uint256": { + "entryPoint": 6244, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 5452, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x12": { + "entryPoint": 6046, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x21": { + "entryPoint": 4749, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x32": { + "entryPoint": 6197, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "panic_error_0x41": { + "entryPoint": 4334, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": { + "entryPoint": 4312, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef": { + "entryPoint": 4501, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": 4263, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 4258, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "round_up_to_mul_of_32": { + "entryPoint": 4317, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "validator_assert_t_enum$_LotteryStatus_$82": { + "entryPoint": 4796, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_enum$_RequestStatus_$570": { + "entryPoint": 5370, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 4268, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:14666:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:32:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:16:3", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:3", + "type": "" + } + ], + "src": "7:77:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "155:53:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "195:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "177:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "177:24:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "165:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "165:37:3" + }, + "nodeType": "YulExpressionStatement", + "src": "165:37:3" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "143:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:3", + "type": "" + } + ], + "src": "90:118:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "312:124:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "322:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "334:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "330:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "330:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "322:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "402:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "358:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "358:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "358:71:3" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "284:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "296:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "307:4:3", + "type": "" + } + ], + "src": "214:222:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "487:32:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "497:16:3", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "497:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_bytes32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "469:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "479:7:3", + "type": "" + } + ], + "src": "442:77:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "590:53:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "607:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "630:5:3" + } + ], + "functionName": { + "name": "cleanup_t_bytes32", + "nodeType": "YulIdentifier", + "src": "612:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "612:24:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "600:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "600:37:3" + }, + "nodeType": "YulExpressionStatement", + "src": "600:37:3" + } + ] + }, + "name": "abi_encode_t_bytes32_to_t_bytes32_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "578:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "585:3:3", + "type": "" + } + ], + "src": "525:118:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "747:124:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "757:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "769:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "780:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "765:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "765:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "757:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "837:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "850:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "861:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "846:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "846:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_fromStack", + "nodeType": "YulIdentifier", + "src": "793:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "793:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "793:71:3" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "719:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "731:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "742:4:3", + "type": "" + } + ], + "src": "649:222:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "917:35:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "927:19:3", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "943:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "937:5:3" + }, + "nodeType": "YulFunctionCall", + "src": "937:9:3" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "927:6:3" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "910:6:3", + "type": "" + } + ], + "src": "877:75:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1047:28:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1064:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1067:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1057:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1057:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1057:12:3" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "958:117:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1170:28:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1187:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1190:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1180:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1180:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1180:12:3" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "1081:117:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1247:79:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1304:16:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1313:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1316:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1306:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1306:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1306:12:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1270:5:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1295:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1277:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "1277:24:3" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "1267:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "1267:35:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1260:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1260:43:3" + }, + "nodeType": "YulIf", + "src": "1257:63:3" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1240:5:3", + "type": "" + } + ], + "src": "1204:122:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1384:87:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1394:29:3", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1416:6:3" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1403:12:3" + }, + "nodeType": "YulFunctionCall", + "src": "1403:20:3" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1394:5:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1459:5:3" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "1432:26:3" + }, + "nodeType": "YulFunctionCall", + "src": "1432:33:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1432:33:3" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1362:6:3", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1370:3:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1378:5:3", + "type": "" + } + ], + "src": "1332:139:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1566:28:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1583:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1586:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1576:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1576:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1576:12:3" + } + ] + }, + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulFunctionDefinition", + "src": "1477:117:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1648:54:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1658:38:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1676:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1683:2:3", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1672:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1672:14:3" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1692:2:3", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "1688:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1688:7:3" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1668:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1668:28:3" + }, + "variableNames": [ + { + "name": "result", + "nodeType": "YulIdentifier", + "src": "1658:6:3" + } + ] + } + ] + }, + "name": "round_up_to_mul_of_32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1631:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "result", + "nodeType": "YulTypedName", + "src": "1641:6:3", + "type": "" + } + ], + "src": "1600:102:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1736:152:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1753:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1756:77:3", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1746:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1746:88:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1746:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1850:1:3", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1853:4:3", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1843:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1843:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1843:15:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1874:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1877:4:3", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1867:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "1867:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "1867:15:3" + } + ] + }, + "name": "panic_error_0x41", + "nodeType": "YulFunctionDefinition", + "src": "1708:180:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1937:238:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1947:58:3", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1969:6:3" + }, + { + "arguments": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "1999:4:3" + } + ], + "functionName": { + "name": "round_up_to_mul_of_32", + "nodeType": "YulIdentifier", + "src": "1977:21:3" + }, + "nodeType": "YulFunctionCall", + "src": "1977:27:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1965:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "1965:40:3" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "1951:10:3", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2116:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "2118:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "2118:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2118:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "2059:10:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2071:18:3", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2056:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "2056:34:3" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "2095:10:3" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2107:6:3" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "2092:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "2092:22:3" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "2053:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "2053:62:3" + }, + "nodeType": "YulIf", + "src": "2050:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2154:2:3", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "2158:10:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2147:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "2147:22:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2147:22:3" + } + ] + }, + "name": "finalize_allocation", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1923:6:3", + "type": "" + }, + { + "name": "size", + "nodeType": "YulTypedName", + "src": "1931:4:3", + "type": "" + } + ], + "src": "1894:281:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2222:88:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2232:30:3", + "value": { + "arguments": [], + "functionName": { + "name": "allocate_unbounded", + "nodeType": "YulIdentifier", + "src": "2242:18:3" + }, + "nodeType": "YulFunctionCall", + "src": "2242:20:3" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2232:6:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2291:6:3" + }, + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2299:4:3" + } + ], + "functionName": { + "name": "finalize_allocation", + "nodeType": "YulIdentifier", + "src": "2271:19:3" + }, + "nodeType": "YulFunctionCall", + "src": "2271:33:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2271:33:3" + } + ] + }, + "name": "allocate_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "2206:4:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "2215:6:3", + "type": "" + } + ], + "src": "2181:129:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2398:229:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2503:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nodeType": "YulIdentifier", + "src": "2505:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "2505:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2505:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2475:6:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2483:18:3", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2472:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "2472:30:3" + }, + "nodeType": "YulIf", + "src": "2469:56:3" + }, + { + "nodeType": "YulAssignment", + "src": "2535:25:3", + "value": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2547:6:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2555:4:3", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "2543:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "2543:17:3" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2535:4:3" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2597:23:3", + "value": { + "arguments": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2609:4:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2615:4:3", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2605:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "2605:15:3" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2597:4:3" + } + ] + } + ] + }, + "name": "array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2382:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "2393:4:3", + "type": "" + } + ], + "src": "2316:311:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2722:28:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2739:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2742:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2732:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "2732:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "2732:12:3" + } + ] + }, + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", + "nodeType": "YulFunctionDefinition", + "src": "2633:117:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2875:608:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2885:90:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2967:6:3" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr", + "nodeType": "YulIdentifier", + "src": "2910:56:3" + }, + "nodeType": "YulFunctionCall", + "src": "2910:64:3" + } + ], + "functionName": { + "name": "allocate_memory", + "nodeType": "YulIdentifier", + "src": "2894:15:3" + }, + "nodeType": "YulFunctionCall", + "src": "2894:81:3" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2885:5:3" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2984:16:3", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2995:5:3" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "2988:3:3", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3017:5:3" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3024:6:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3010:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "3010:21:3" + }, + "nodeType": "YulExpressionStatement", + "src": "3010:21:3" + }, + { + "nodeType": "YulAssignment", + "src": "3040:23:3", + "value": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3051:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3058:4:3", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3047:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3047:16:3" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3040:3:3" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3073:44:3", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3091:6:3" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3103:6:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3111:4:3", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "3099:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3099:17:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3087:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3087:30:3" + }, + "variables": [ + { + "name": "srcEnd", + "nodeType": "YulTypedName", + "src": "3077:6:3", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3145:103:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", + "nodeType": "YulIdentifier", + "src": "3159:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "3159:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "3159:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "3132:6:3" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3140:3:3" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3129:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "3129:15:3" + }, + "nodeType": "YulIf", + "src": "3126:122:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3333:144:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "3348:21:3", + "value": { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3366:3:3" + }, + "variables": [ + { + "name": "elementPos", + "nodeType": "YulTypedName", + "src": "3352:10:3", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3390:3:3" + }, + { + "arguments": [ + { + "name": "elementPos", + "nodeType": "YulIdentifier", + "src": "3416:10:3" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3428:3:3" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "3395:20:3" + }, + "nodeType": "YulFunctionCall", + "src": "3395:37:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3383:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "3383:50:3" + }, + "nodeType": "YulExpressionStatement", + "src": "3383:50:3" + }, + { + "nodeType": "YulAssignment", + "src": "3446:21:3", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3457:3:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3462:4:3", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3453:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3453:14:3" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3446:3:3" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3286:3:3" + }, + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "3291:6:3" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "3283:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "3283:15:3" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "3299:25:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3301:21:3", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3312:3:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3317:4:3", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3308:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3308:14:3" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3301:3:3" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "3261:21:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "3263:17:3", + "value": { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3274:6:3" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "3267:3:3", + "type": "" + } + ] + } + ] + }, + "src": "3257:220:3" + } + ] + }, + "name": "abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2845:6:3", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2853:6:3", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2861:3:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "2869:5:3", + "type": "" + } + ], + "src": "2773:710:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3583:293:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3632:83:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulIdentifier", + "src": "3634:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "3634:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "3634:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3611:6:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3619:4:3", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3607:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3607:17:3" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3626:3:3" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3603:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3603:27:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "3596:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "3596:35:3" + }, + "nodeType": "YulIf", + "src": "3593:122:3" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3724:34:3", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3751:6:3" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3738:12:3" + }, + "nodeType": "YulFunctionCall", + "src": "3738:20:3" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "3728:6:3", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3767:103:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3843:6:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3851:4:3", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3839:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "3839:17:3" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3858:6:3" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3866:3:3" + } + ], + "functionName": { + "name": "abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr", + "nodeType": "YulIdentifier", + "src": "3776:62:3" + }, + "nodeType": "YulFunctionCall", + "src": "3776:94:3" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3767:5:3" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_uint256_$dyn_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3561:6:3", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3569:3:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "3577:5:3", + "type": "" + } + ], + "src": "3506:370:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3990:576:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "4036:83:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "4038:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "4038:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "4038:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "4011:7:3" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4020:9:3" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4007:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "4007:23:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4032:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "4003:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "4003:32:3" + }, + "nodeType": "YulIf", + "src": "4000:119:3" + }, + { + "nodeType": "YulBlock", + "src": "4129:117:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "4144:15:3", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4158:1:3", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4148:6:3", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "4173:63:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4208:9:3" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4219:6:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4204:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "4204:22:3" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "4228:7:3" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "4183:20:3" + }, + "nodeType": "YulFunctionCall", + "src": "4183:53:3" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4173:6:3" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "4256:303:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "4271:46:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4302:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4313:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4298:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "4298:18:3" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4285:12:3" + }, + "nodeType": "YulFunctionCall", + "src": "4285:32:3" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4275:6:3", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4364:83:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulIdentifier", + "src": "4366:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "4366:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "4366:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4336:6:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4344:18:3", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4333:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "4333:30:3" + }, + "nodeType": "YulIf", + "src": "4330:117:3" + }, + { + "nodeType": "YulAssignment", + "src": "4461:88:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4521:9:3" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4532:6:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4517:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "4517:22:3" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "4541:7:3" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_uint256_$dyn_memory_ptr", + "nodeType": "YulIdentifier", + "src": "4471:45:3" + }, + "nodeType": "YulFunctionCall", + "src": "4471:78:3" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "4461:6:3" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256t_array$_t_uint256_$dyn_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "3952:9:3", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "3963:7:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "3975:6:3", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "3983:6:3", + "type": "" + } + ], + "src": "3882:684:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4600:152:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4617:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4620:77:3", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4610:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "4610:88:3" + }, + "nodeType": "YulExpressionStatement", + "src": "4610:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4714:1:3", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4717:4:3", + "type": "", + "value": "0x21" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4707:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "4707:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "4707:15:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4738:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4741:4:3", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4731:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "4731:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "4731:15:3" + } + ] + }, + "name": "panic_error_0x21", + "nodeType": "YulFunctionDefinition", + "src": "4572:180:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4817:62:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "4851:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x21", + "nodeType": "YulIdentifier", + "src": "4853:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "4853:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "4853:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4840:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4847:1:3", + "type": "", + "value": "3" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4837:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "4837:12:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4830:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "4830:20:3" + }, + "nodeType": "YulIf", + "src": "4827:46:3" + } + ] + }, + "name": "validator_assert_t_enum$_LotteryStatus_$82", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4810:5:3", + "type": "" + } + ], + "src": "4758:121:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4946:82:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4956:16:3", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4967:5:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "4956:7:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5016:5:3" + } + ], + "functionName": { + "name": "validator_assert_t_enum$_LotteryStatus_$82", + "nodeType": "YulIdentifier", + "src": "4973:42:3" + }, + "nodeType": "YulFunctionCall", + "src": "4973:49:3" + }, + "nodeType": "YulExpressionStatement", + "src": "4973:49:3" + } + ] + }, + "name": "cleanup_t_enum$_LotteryStatus_$82", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4928:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "4938:7:3", + "type": "" + } + ], + "src": "4885:143:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5108:69:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5118:53:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5165:5:3" + } + ], + "functionName": { + "name": "cleanup_t_enum$_LotteryStatus_$82", + "nodeType": "YulIdentifier", + "src": "5131:33:3" + }, + "nodeType": "YulFunctionCall", + "src": "5131:40:3" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "5118:9:3" + } + ] + } + ] + }, + "name": "convert_t_enum$_LotteryStatus_$82_to_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5088:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "5098:9:3", + "type": "" + } + ], + "src": "5034:143:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5262:80:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5279:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5329:5:3" + } + ], + "functionName": { + "name": "convert_t_enum$_LotteryStatus_$82_to_t_uint8", + "nodeType": "YulIdentifier", + "src": "5284:44:3" + }, + "nodeType": "YulFunctionCall", + "src": "5284:51:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5272:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "5272:64:3" + }, + "nodeType": "YulExpressionStatement", + "src": "5272:64:3" + } + ] + }, + "name": "abi_encode_t_enum$_LotteryStatus_$82_to_t_uint8_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5250:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "5257:3:3", + "type": "" + } + ], + "src": "5183:159:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5460:138:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5470:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5482:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5493:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5478:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "5478:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "5470:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "5564:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5577:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5588:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5573:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "5573:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_LotteryStatus_$82_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "5506:57:3" + }, + "nodeType": "YulFunctionCall", + "src": "5506:85:3" + }, + "nodeType": "YulExpressionStatement", + "src": "5506:85:3" + } + ] + }, + "name": "abi_encode_tuple_t_enum$_LotteryStatus_$82__to_t_uint8__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "5432:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "5444:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "5455:4:3", + "type": "" + } + ], + "src": "5348:250:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5670:263:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "5716:83:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "5718:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "5718:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "5718:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "5691:7:3" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5700:9:3" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "5687:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "5687:23:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5712:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "5683:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "5683:32:3" + }, + "nodeType": "YulIf", + "src": "5680:119:3" + }, + { + "nodeType": "YulBlock", + "src": "5809:117:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5824:15:3", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5838:1:3", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "5828:6:3", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "5853:63:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5888:9:3" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5899:6:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5884:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "5884:22:3" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "5908:7:3" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "5863:20:3" + }, + "nodeType": "YulFunctionCall", + "src": "5863:53:3" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "5853:6:3" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "5640:9:3", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "5651:7:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "5663:6:3", + "type": "" + } + ], + "src": "5604:329:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5984:81:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5994:65:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6009:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6016:42:3", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "6005:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "6005:54:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "5994:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5966:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "5976:7:3", + "type": "" + } + ], + "src": "5939:126:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6116:51:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6126:35:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6155:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "6137:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "6137:24:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "6126:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6098:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "6108:7:3", + "type": "" + } + ], + "src": "6071:96:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6238:53:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6255:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6278:5:3" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "6260:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "6260:24:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6248:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "6248:37:3" + }, + "nodeType": "YulExpressionStatement", + "src": "6248:37:3" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6226:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "6233:3:3", + "type": "" + } + ], + "src": "6173:118:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6395:124:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6405:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6417:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6428:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6413:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "6413:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "6405:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6485:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6498:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6509:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6494:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "6494:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "6441:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "6441:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "6441:71:3" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "6367:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "6379:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "6390:4:3", + "type": "" + } + ], + "src": "6297:222:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6557:28:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6567:12:3", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6574:5:3" + }, + "variableNames": [ + { + "name": "ret", + "nodeType": "YulIdentifier", + "src": "6567:3:3" + } + ] + } + ] + }, + "name": "identity", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6543:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nodeType": "YulTypedName", + "src": "6553:3:3", + "type": "" + } + ], + "src": "6525:60:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6651:82:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6661:66:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6719:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "6701:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "6701:24:3" + } + ], + "functionName": { + "name": "identity", + "nodeType": "YulIdentifier", + "src": "6692:8:3" + }, + "nodeType": "YulFunctionCall", + "src": "6692:34:3" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "6674:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "6674:53:3" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "6661:9:3" + } + ] + } + ] + }, + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6631:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "6641:9:3", + "type": "" + } + ], + "src": "6591:142:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6799:66:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6809:50:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6853:5:3" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulIdentifier", + "src": "6822:30:3" + }, + "nodeType": "YulFunctionCall", + "src": "6822:37:3" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "6809:9:3" + } + ] + } + ] + }, + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6779:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "6789:9:3", + "type": "" + } + ], + "src": "6739:126:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6949:66:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6959:50:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7003:5:3" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulIdentifier", + "src": "6972:30:3" + }, + "nodeType": "YulFunctionCall", + "src": "6972:37:3" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "6959:9:3" + } + ] + } + ] + }, + "name": "convert_t_contract$_Randomness_$687_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6929:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "6939:9:3", + "type": "" + } + ], + "src": "6871:144:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7104:84:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7121:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7175:5:3" + } + ], + "functionName": { + "name": "convert_t_contract$_Randomness_$687_to_t_address", + "nodeType": "YulIdentifier", + "src": "7126:48:3" + }, + "nodeType": "YulFunctionCall", + "src": "7126:55:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7114:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "7114:68:3" + }, + "nodeType": "YulExpressionStatement", + "src": "7114:68:3" + } + ] + }, + "name": "abi_encode_t_contract$_Randomness_$687_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7092:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "7099:3:3", + "type": "" + } + ], + "src": "7021:167:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7310:142:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7320:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7332:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7343:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7328:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "7328:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "7320:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7418:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7431:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7442:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7427:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "7427:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_contract$_Randomness_$687_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "7356:61:3" + }, + "nodeType": "YulFunctionCall", + "src": "7356:89:3" + }, + "nodeType": "YulExpressionStatement", + "src": "7356:89:3" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_Randomness_$687__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7282:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7294:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "7305:4:3", + "type": "" + } + ], + "src": "7194:258:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7502:57:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7512:41:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7527:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7534:18:3", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "7523:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "7523:30:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "7512:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_uint64", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7484:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "7494:7:3", + "type": "" + } + ], + "src": "7458:101:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7628:52:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7645:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7667:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint64", + "nodeType": "YulIdentifier", + "src": "7650:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "7650:23:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7638:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "7638:36:3" + }, + "nodeType": "YulExpressionStatement", + "src": "7638:36:3" + } + ] + }, + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7616:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "7623:3:3", + "type": "" + } + ], + "src": "7565:115:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7782:122:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7792:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7804:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7815:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7800:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "7800:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "7792:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7870:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7883:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7894:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7879:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "7879:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", + "nodeType": "YulIdentifier", + "src": "7828:41:3" + }, + "nodeType": "YulFunctionCall", + "src": "7828:69:3" + }, + "nodeType": "YulExpressionStatement", + "src": "7828:69:3" + } + ] + }, + "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7754:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7766:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "7777:4:3", + "type": "" + } + ], + "src": "7686:218:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7954:49:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7964:33:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7979:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7986:10:3", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "7975:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "7975:22:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "7964:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_uint32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7936:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "7946:7:3", + "type": "" + } + ], + "src": "7910:93:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8072:52:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "8089:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8111:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint32", + "nodeType": "YulIdentifier", + "src": "8094:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "8094:23:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8082:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "8082:36:3" + }, + "nodeType": "YulExpressionStatement", + "src": "8082:36:3" + } + ] + }, + "name": "abi_encode_t_uint32_to_t_uint32_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "8060:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "8067:3:3", + "type": "" + } + ], + "src": "8009:115:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8226:122:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "8236:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8248:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8259:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8244:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "8244:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "8236:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8314:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8327:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8338:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8323:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "8323:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint32_to_t_uint32_fromStack", + "nodeType": "YulIdentifier", + "src": "8272:41:3" + }, + "nodeType": "YulFunctionCall", + "src": "8272:69:3" + }, + "nodeType": "YulExpressionStatement", + "src": "8272:69:3" + } + ] + }, + "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "8198:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "8210:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "8221:4:3", + "type": "" + } + ], + "src": "8130:218:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8397:43:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "8407:27:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8422:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8429:4:3", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "8418:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "8418:16:3" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "8407:7:3" + } + ] + } + ] + }, + "name": "cleanup_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "8379:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "8389:7:3", + "type": "" + } + ], + "src": "8354:86:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8507:51:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "8524:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8545:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint8", + "nodeType": "YulIdentifier", + "src": "8529:15:3" + }, + "nodeType": "YulFunctionCall", + "src": "8529:22:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8517:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "8517:35:3" + }, + "nodeType": "YulExpressionStatement", + "src": "8517:35:3" + } + ] + }, + "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "8495:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "8502:3:3", + "type": "" + } + ], + "src": "8446:112:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8658:120:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "8668:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8680:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8691:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8676:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "8676:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "8668:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8744:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8757:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8768:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8753:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "8753:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "8704:39:3" + }, + "nodeType": "YulFunctionCall", + "src": "8704:67:3" + }, + "nodeType": "YulExpressionStatement", + "src": "8704:67:3" + } + ] + }, + "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "8630:9:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "8642:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "8653:4:3", + "type": "" + } + ], + "src": "8564:214:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8910:206:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "8920:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8932:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8943:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8928:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "8928:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "8920:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9000:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9013:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9024:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9009:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "9009:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "8956:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "8956:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "8956:71:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "9081:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9094:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9105:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9090:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "9090:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "9037:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "9037:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "9037:72:3" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "8874:9:3", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "8886:6:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "8894:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "8905:4:3", + "type": "" + } + ], + "src": "8784:332:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9182:56:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "9216:16:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9225:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9228:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9218:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "9218:12:3" + }, + "nodeType": "YulExpressionStatement", + "src": "9218:12:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9205:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9212:1:3", + "type": "", + "value": "4" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "9202:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "9202:12:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "9195:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "9195:20:3" + }, + "nodeType": "YulIf", + "src": "9192:40:3" + } + ] + }, + "name": "validator_revert_t_enum$_RequestStatus_$570", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9175:5:3", + "type": "" + } + ], + "src": "9122:116:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9324:97:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9334:22:3", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9349:6:3" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9343:5:3" + }, + "nodeType": "YulFunctionCall", + "src": "9343:13:3" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9334:5:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9409:5:3" + } + ], + "functionName": { + "name": "validator_revert_t_enum$_RequestStatus_$570", + "nodeType": "YulIdentifier", + "src": "9365:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "9365:50:3" + }, + "nodeType": "YulExpressionStatement", + "src": "9365:50:3" + } + ] + }, + "name": "abi_decode_t_enum$_RequestStatus_$570_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9302:6:3", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "9310:3:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9318:5:3", + "type": "" + } + ], + "src": "9244:177:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9521:291:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "9567:83:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "9569:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "9569:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "9569:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9542:7:3" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9551:9:3" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "9538:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "9538:23:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9563:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "9534:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "9534:32:3" + }, + "nodeType": "YulIf", + "src": "9531:119:3" + }, + { + "nodeType": "YulBlock", + "src": "9660:145:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "9675:15:3", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9689:1:3", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9679:6:3", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "9704:91:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9767:9:3" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9778:6:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9763:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "9763:22:3" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9787:7:3" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_RequestStatus_$570_fromMemory", + "nodeType": "YulIdentifier", + "src": "9714:48:3" + }, + "nodeType": "YulFunctionCall", + "src": "9714:81:3" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9704:6:3" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_enum$_RequestStatus_$570_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "9491:9:3", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "9502:7:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "9514:6:3", + "type": "" + } + ], + "src": "9427:385:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9846:152:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9863:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9866:77:3", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9856:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "9856:88:3" + }, + "nodeType": "YulExpressionStatement", + "src": "9856:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9960:1:3", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9963:4:3", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9953:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "9953:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "9953:15:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9984:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9987:4:3", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9977:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "9977:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "9977:15:3" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "9818:180:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10048:261:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10058:25:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10081:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10063:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "10063:20:3" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10058:1:3" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10092:25:3", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10115:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10097:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "10097:20:3" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10092:1:3" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10255:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "10257:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "10257:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "10257:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10176:1:3" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10183:66:3", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10251:1:3" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "10179:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "10179:74:3" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10173:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "10173:81:3" + }, + "nodeType": "YulIf", + "src": "10170:107:3" + }, + { + "nodeType": "YulAssignment", + "src": "10287:16:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10298:1:3" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10301:1:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10294:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "10294:9:3" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "10287:3:3" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "10035:1:3", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "10038:1:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "10044:3:3", + "type": "" + } + ], + "src": "10004:305:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10360:146:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10370:25:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10393:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10375:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "10375:20:3" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10370:1:3" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10404:25:3", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10427:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10409:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "10409:20:3" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10404:1:3" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10451:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "10453:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "10453:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "10453:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10445:1:3" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10448:1:3" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "10442:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "10442:8:3" + }, + "nodeType": "YulIf", + "src": "10439:34:3" + }, + { + "nodeType": "YulAssignment", + "src": "10483:17:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "10495:1:3" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "10498:1:3" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "10491:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "10491:9:3" + }, + "variableNames": [ + { + "name": "diff", + "nodeType": "YulIdentifier", + "src": "10483:4:3" + } + ] + } + ] + }, + "name": "checked_sub_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "10346:1:3", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "10349:1:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "diff", + "nodeType": "YulTypedName", + "src": "10355:4:3", + "type": "" + } + ], + "src": "10315:191:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10555:190:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10565:33:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10592:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "10574:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "10574:24:3" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10565:5:3" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10688:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "10690:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "10690:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "10690:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10613:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10620:66:3", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "10610:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "10610:77:3" + }, + "nodeType": "YulIf", + "src": "10607:103:3" + }, + { + "nodeType": "YulAssignment", + "src": "10719:20:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10730:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10737:1:3", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10726:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "10726:13:3" + }, + "variableNames": [ + { + "name": "ret", + "nodeType": "YulIdentifier", + "src": "10719:3:3" + } + ] + } + ] + }, + "name": "increment_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10541:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nodeType": "YulTypedName", + "src": "10551:3:3", + "type": "" + } + ], + "src": "10512:233:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10809:80:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10819:64:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10875:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint32", + "nodeType": "YulIdentifier", + "src": "10858:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "10858:23:3" + } + ], + "functionName": { + "name": "identity", + "nodeType": "YulIdentifier", + "src": "10849:8:3" + }, + "nodeType": "YulFunctionCall", + "src": "10849:33:3" + } + ], + "functionName": { + "name": "cleanup_t_uint64", + "nodeType": "YulIdentifier", + "src": "10832:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "10832:51:3" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "10819:9:3" + } + ] + } + ] + }, + "name": "convert_t_uint32_to_t_uint64", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10789:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "10799:9:3", + "type": "" + } + ], + "src": "10751:138:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10958:64:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "10975:3:3" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11009:5:3" + } + ], + "functionName": { + "name": "convert_t_uint32_to_t_uint64", + "nodeType": "YulIdentifier", + "src": "10980:28:3" + }, + "nodeType": "YulFunctionCall", + "src": "10980:35:3" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10968:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "10968:48:3" + }, + "nodeType": "YulExpressionStatement", + "src": "10968:48:3" + } + ] + }, + "name": "abi_encode_t_uint32_to_t_uint64_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10946:5:3", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "10953:3:3", + "type": "" + } + ], + "src": "10895:127:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11258:529:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11268:27:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11280:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11291:3:3", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11276:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "11276:19:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11268:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11349:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11362:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11373:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11358:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "11358:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "11305:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "11305:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "11305:71:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "11430:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11443:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11454:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11439:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "11439:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "11386:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "11386:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "11386:72:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "11510:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11523:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11534:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11519:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "11519:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", + "nodeType": "YulIdentifier", + "src": "11468:41:3" + }, + "nodeType": "YulFunctionCall", + "src": "11468:70:3" + }, + "nodeType": "YulExpressionStatement", + "src": "11468:70:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "11592:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11605:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11616:2:3", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11601:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "11601:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_fromStack", + "nodeType": "YulIdentifier", + "src": "11548:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "11548:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "11548:72:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "11670:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11683:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11694:3:3", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11679:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "11679:19:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "11630:39:3" + }, + "nodeType": "YulFunctionCall", + "src": "11630:69:3" + }, + "nodeType": "YulExpressionStatement", + "src": "11630:69:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value5", + "nodeType": "YulIdentifier", + "src": "11751:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11764:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11775:3:3", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11760:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "11760:19:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint32_to_t_uint64_fromStack", + "nodeType": "YulIdentifier", + "src": "11709:41:3" + }, + "nodeType": "YulFunctionCall", + "src": "11709:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "11709:71:3" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256_t_uint64_t_bytes32_t_uint8_t_uint32__to_t_address_t_uint256_t_uint64_t_bytes32_t_uint8_t_uint64__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "11190:9:3", + "type": "" + }, + { + "name": "value5", + "nodeType": "YulTypedName", + "src": "11202:6:3", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "11210:6:3", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "11218:6:3", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "11226:6:3", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "11234:6:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "11242:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "11253:4:3", + "type": "" + } + ], + "src": "11028:759:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11856:80:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11866:22:3", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11881:6:3" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11875:5:3" + }, + "nodeType": "YulFunctionCall", + "src": "11875:13:3" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11866:5:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11924:5:3" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "11897:26:3" + }, + "nodeType": "YulFunctionCall", + "src": "11897:33:3" + }, + "nodeType": "YulExpressionStatement", + "src": "11897:33:3" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11834:6:3", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "11842:3:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11850:5:3", + "type": "" + } + ], + "src": "11793:143:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12019:274:3", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "12065:83:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "12067:77:3" + }, + "nodeType": "YulFunctionCall", + "src": "12067:79:3" + }, + "nodeType": "YulExpressionStatement", + "src": "12067:79:3" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "12040:7:3" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12049:9:3" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12036:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12036:23:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12061:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "12032:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12032:32:3" + }, + "nodeType": "YulIf", + "src": "12029:119:3" + }, + { + "nodeType": "YulBlock", + "src": "12158:128:3", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12173:15:3", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12187:1:3", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "12177:6:3", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12202:74:3", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12248:9:3" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "12259:6:3" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12244:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12244:22:3" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "12268:7:3" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "12212:31:3" + }, + "nodeType": "YulFunctionCall", + "src": "12212:64:3" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "12202:6:3" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "11989:9:3", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "12000:7:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "12012:6:3", + "type": "" + } + ], + "src": "11942:351:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12503:448:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12513:27:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12525:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12536:3:3", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12521:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12521:19:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "12513:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "12594:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12607:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12618:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12603:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12603:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "12550:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "12550:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "12550:71:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "12675:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12688:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12699:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12684:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12684:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "12631:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "12631:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "12631:72:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "12755:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12768:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12779:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12764:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12764:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", + "nodeType": "YulIdentifier", + "src": "12713:41:3" + }, + "nodeType": "YulFunctionCall", + "src": "12713:70:3" + }, + "nodeType": "YulExpressionStatement", + "src": "12713:70:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "12837:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12850:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12861:2:3", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12846:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12846:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_bytes32_to_t_bytes32_fromStack", + "nodeType": "YulIdentifier", + "src": "12793:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "12793:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "12793:72:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "12915:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12928:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12939:3:3", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12924:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "12924:19:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "12875:39:3" + }, + "nodeType": "YulFunctionCall", + "src": "12875:69:3" + }, + "nodeType": "YulExpressionStatement", + "src": "12875:69:3" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256_t_uint64_t_bytes32_t_uint8__to_t_address_t_uint256_t_uint64_t_bytes32_t_uint8__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "12443:9:3", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "12455:6:3", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "12463:6:3", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "12471:6:3", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "12479:6:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "12487:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "12498:4:3", + "type": "" + } + ], + "src": "12299:652:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13083:206:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "13093:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13105:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13116:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13101:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "13101:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13093:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "13173:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13186:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13197:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13182:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "13182:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "13129:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "13129:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13129:71:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "13254:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13267:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13278:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13263:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "13263:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "13210:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "13210:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13210:72:3" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "13047:9:3", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "13059:6:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "13067:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "13078:4:3", + "type": "" + } + ], + "src": "12957:332:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13323:152:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13340:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13343:77:3", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13333:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "13333:88:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13333:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13437:1:3", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13440:4:3", + "type": "", + "value": "0x12" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13430:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "13430:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13430:15:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13461:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13464:4:3", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "13454:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "13454:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13454:15:3" + } + ] + }, + "name": "panic_error_0x12", + "nodeType": "YulFunctionDefinition", + "src": "13295:180:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13523:143:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "13533:25:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "13556:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "13538:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "13538:20:3" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "13533:1:3" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13567:25:3", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "13590:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "13572:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "13572:20:3" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "13567:1:3" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13614:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x12", + "nodeType": "YulIdentifier", + "src": "13616:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "13616:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13616:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "13611:1:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "13604:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "13604:9:3" + }, + "nodeType": "YulIf", + "src": "13601:35:3" + }, + { + "nodeType": "YulAssignment", + "src": "13646:14:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "13655:1:3" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "13658:1:3" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "13651:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "13651:9:3" + }, + "variableNames": [ + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "13646:1:3" + } + ] + } + ] + }, + "name": "checked_div_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "13512:1:3", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "13515:1:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "r", + "nodeType": "YulTypedName", + "src": "13521:1:3", + "type": "" + } + ], + "src": "13481:185:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13826:288:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "13836:26:3", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13848:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13859:2:3", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13844:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "13844:18:3" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13836:4:3" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "13916:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13929:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13940:1:3", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13925:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "13925:17:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "13872:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "13872:71:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13872:71:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "13997:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14010:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14021:2:3", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14006:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "14006:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "13953:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "13953:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "13953:72:3" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "14079:6:3" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14092:9:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14103:2:3", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14088:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "14088:18:3" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "14035:43:3" + }, + "nodeType": "YulFunctionCall", + "src": "14035:72:3" + }, + "nodeType": "YulExpressionStatement", + "src": "14035:72:3" + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "13782:9:3", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "13794:6:3", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "13802:6:3", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "13810:6:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "13821:4:3", + "type": "" + } + ], + "src": "13672:442:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14148:152:3", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14165:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14168:77:3", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14158:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "14158:88:3" + }, + "nodeType": "YulExpressionStatement", + "src": "14158:88:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14262:1:3", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14265:4:3", + "type": "", + "value": "0x32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14255:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "14255:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "14255:15:3" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14286:1:3", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14289:4:3", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "14279:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "14279:15:3" + }, + "nodeType": "YulExpressionStatement", + "src": "14279:15:3" + } + ] + }, + "name": "panic_error_0x32", + "nodeType": "YulFunctionDefinition", + "src": "14120:180:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14340:142:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "14350:25:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "14373:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "14355:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "14355:20:3" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "14350:1:3" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "14384:25:3", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "14407:1:3" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "14389:17:3" + }, + "nodeType": "YulFunctionCall", + "src": "14389:20:3" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "14384:1:3" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14431:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x12", + "nodeType": "YulIdentifier", + "src": "14433:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "14433:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "14433:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "14428:1:3" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "14421:6:3" + }, + "nodeType": "YulFunctionCall", + "src": "14421:9:3" + }, + "nodeType": "YulIf", + "src": "14418:35:3" + }, + { + "nodeType": "YulAssignment", + "src": "14462:14:3", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "14471:1:3" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "14474:1:3" + } + ], + "functionName": { + "name": "mod", + "nodeType": "YulIdentifier", + "src": "14467:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "14467:9:3" + }, + "variableNames": [ + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "14462:1:3" + } + ] + } + ] + }, + "name": "mod_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "14329:1:3", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "14332:1:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "r", + "nodeType": "YulTypedName", + "src": "14338:1:3", + "type": "" + } + ], + "src": "14306:176:3" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14530:133:3", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "14540:32:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14566:5:3" + } + ], + "functionName": { + "name": "cleanup_t_uint32", + "nodeType": "YulIdentifier", + "src": "14549:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "14549:23:3" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14540:5:3" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14606:22:3", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "14608:16:3" + }, + "nodeType": "YulFunctionCall", + "src": "14608:18:3" + }, + "nodeType": "YulExpressionStatement", + "src": "14608:18:3" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14587:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14594:10:3", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "14584:2:3" + }, + "nodeType": "YulFunctionCall", + "src": "14584:21:3" + }, + "nodeType": "YulIf", + "src": "14581:47:3" + }, + { + "nodeType": "YulAssignment", + "src": "14637:20:3", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14648:5:3" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14655:1:3", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14644:3:3" + }, + "nodeType": "YulFunctionCall", + "src": "14644:13:3" + }, + "variableNames": [ + { + "name": "ret", + "nodeType": "YulIdentifier", + "src": "14637:3:3" + } + ] + } + ] + }, + "name": "increment_t_uint32", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "14516:5:3", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nodeType": "YulTypedName", + "src": "14526:3:3", + "type": "" + } + ], + "src": "14488:175:3" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_bytes32(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_bytes32_to_t_bytes32_fromStack(value, pos) {\n mstore(pos, cleanup_t_bytes32(value))\n }\n\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bytes32_to_t_bytes32_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n // uint256[]\n function abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_uint256(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // uint256[]\n function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_uint256t_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value1 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x21() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x21)\n revert(0, 0x24)\n }\n\n function validator_assert_t_enum$_LotteryStatus_$82(value) {\n if iszero(lt(value, 3)) { panic_error_0x21() }\n }\n\n function cleanup_t_enum$_LotteryStatus_$82(value) -> cleaned {\n cleaned := value validator_assert_t_enum$_LotteryStatus_$82(value)\n }\n\n function convert_t_enum$_LotteryStatus_$82_to_t_uint8(value) -> converted {\n converted := cleanup_t_enum$_LotteryStatus_$82(value)\n }\n\n function abi_encode_t_enum$_LotteryStatus_$82_to_t_uint8_fromStack(value, pos) {\n mstore(pos, convert_t_enum$_LotteryStatus_$82_to_t_uint8(value))\n }\n\n function abi_encode_tuple_t_enum$_LotteryStatus_$82__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_enum$_LotteryStatus_$82_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_Randomness_$687_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_Randomness_$687_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_Randomness_$687_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_Randomness_$687__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_Randomness_$687_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint64(value))\n }\n\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint32(value) -> cleaned {\n cleaned := and(value, 0xffffffff)\n }\n\n function abi_encode_t_uint32_to_t_uint32_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint32(value))\n }\n\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint32_to_t_uint32_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint8(value) -> cleaned {\n cleaned := and(value, 0xff)\n }\n\n function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n function validator_revert_t_enum$_RequestStatus_$570(value) {\n if iszero(lt(value, 4)) { revert(0, 0) }\n }\n\n function abi_decode_t_enum$_RequestStatus_$570_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_enum$_RequestStatus_$570(value)\n }\n\n function abi_decode_tuple_t_enum$_RequestStatus_$570_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_enum$_RequestStatus_$570_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n if lt(x, y) { panic_error_0x11() }\n\n diff := sub(x, y)\n }\n\n function increment_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n function convert_t_uint32_to_t_uint64(value) -> converted {\n converted := cleanup_t_uint64(identity(cleanup_t_uint32(value)))\n }\n\n function abi_encode_t_uint32_to_t_uint64_fromStack(value, pos) {\n mstore(pos, convert_t_uint32_to_t_uint64(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_uint64_t_bytes32_t_uint8_t_uint32__to_t_address_t_uint256_t_uint64_t_bytes32_t_uint8_t_uint64__fromStack_reversed(headStart , value5, value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 192)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_bytes32_to_t_bytes32_fromStack(value3, add(headStart, 96))\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value4, add(headStart, 128))\n\n abi_encode_t_uint32_to_t_uint64_fromStack(value5, add(headStart, 160))\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_uint64_t_bytes32_t_uint8__to_t_address_t_uint256_t_uint64_t_bytes32_t_uint8__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_bytes32_to_t_bytes32_fromStack(value3, add(headStart, 96))\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value4, add(headStart, 128))\n\n }\n\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n }\n\n function panic_error_0x12() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n\n function checked_div_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n\n r := div(x, y)\n }\n\n function abi_encode_tuple_t_uint256_t_uint256_t_uint256__to_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n tail := add(headStart, 96)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n }\n\n function panic_error_0x32() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n\n function mod_t_uint256(x, y) -> r {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n if iszero(y) { panic_error_0x12() }\n r := mod(x, y)\n }\n\n function increment_t_uint32(value) -> ret {\n value := cleanup_t_uint32(value)\n if eq(value, 0xffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n}\n", + "id": 3, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600436106101085760003560e01c80633a984bc51161009557806376c7a3c71161006457806376c7a3c71461030a5780637d5a9c5a14610335578063cad0338c14610360578063d11711a21461038b578063f3baf0701461039557610108565b80633a984bc51461025e57806349943a131461028957806351a8e298146102b45780636b31ee01146102df57610108565b80631fe543e3116100dc5780631fe543e314610177578063200d2ed2146101a05780632b855d19146101cb57806335c1d349146101f6578063360131891461023357610108565b80626d6cae1461010d578063081275d414610138578063160344e21461014257806317a472821461014c575b600080fd5b34801561011957600080fd5b506101226103c0565b60405161012f9190611049565b60405180910390f35b6101406103c6565b005b61014a610457565b005b34801561015857600080fd5b50610161610943565b60405161016e919061107d565b60405180910390f35b34801561018357600080fd5b5061019e60048036038101906101999190611231565b610949565b005b3480156101ac57600080fd5b506101b56109cd565b6040516101c29190611304565b60405180910390f35b3480156101d757600080fd5b506101e0610b14565b6040516101ed9190611049565b60405180910390f35b34801561020257600080fd5b5061021d6004803603810190610218919061131f565b610b1a565b60405161022a919061138d565b60405180910390f35b34801561023f57600080fd5b50610248610b59565b6040516102559190611407565b60405180910390f35b34801561026a57600080fd5b50610273610b7d565b6040516102809190611049565b60405180910390f35b34801561029557600080fd5b5061029e610b83565b6040516102ab9190611049565b60405180910390f35b3480156102c057600080fd5b506102c9610b89565b6040516102d69190611445565b60405180910390f35b3480156102eb57600080fd5b506102f4610ba3565b6040516103019190611049565b60405180910390f35b34801561031657600080fd5b5061031f610ba9565b60405161032c9190611049565b60405180910390f35b34801561034157600080fd5b5061034a610baf565b604051610357919061147f565b60405180910390f35b34801561036c57600080fd5b50610375610bc5565b60405161038291906114b6565b60405180910390f35b610393610bd8565b005b3480156103a157600080fd5b506103aa610d99565b6040516103b79190611049565b60405180910390f35b60085481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0408a7f600854346040518363ffffffff1660e01b81526004016104239291906114d1565b600060405180830381600087803b15801561043d57600080fd5b505af1158015610451573d6000803e3d6000fd5b50505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104b157600080fd5b600060038111156104c5576104c461128d565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b81526004016105209190611049565b602060405180830381865afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610561919061151f565b60038111156105735761057261128d565b5b146105aa576040517f4edbe0e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460098054905010156105ff576009805490506003546040517f5fdd6f490000000000000000000000000000000000000000000000000000000081526004016105f69291906114d1565b60405180910390fd5b60045460098054905010610653576009805490506004546040517fe318577800000000000000000000000000000000000000000000000000000000815260040161064a9291906114d1565b60405180910390fd5b60003490506001548110156106a357806001546040517f0167202800000000000000000000000000000000000000000000000000000000815260040161069a9291906114d1565b60405180910390fd5b6000670de0b6b3a7640000905080600a546106be919061157b565b47101561071157600a54476106d391906115d1565b816040517fea691a4b0000000000000000000000000000000000000000000000000000000081526004016107089291906114d1565b60405180910390fd5b600060018111156107255761072461128d565b5b600b60149054906101000a900460ff1660018111156107475761074661128d565b5b14156108525760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639478430c3384600060149054906101000a900467ffffffffffffffff16600760008154809291906107b590611605565b9190505560001b60065418600260009054906101000a900460ff16600260019054906101000a900463ffffffff166040518763ffffffff1660e01b81526004016108049695949392919061167f565b6020604051808303816000875af1158015610823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084791906116f5565b60088190555061093f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166333c14a633384600060149054906101000a900467ffffffffffffffff16600760008154809291906108ba90611605565b9190505560001b60065418600260009054906101000a900460ff166040518663ffffffff1660e01b81526004016108f5959493929190611722565b6020604051808303816000875af1158015610914573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093891906116f5565b6008819055505b5050565b60065481565b61080973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109bf57336108096040517fc68806f50000000000000000000000000000000000000000000000000000000081526004016109b6929190611775565b60405180910390fd5b6109c98282610d9f565b5050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b8152600401610a2b9190611049565b602060405180830381865afa158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c919061151f565b905060006003811115610a8257610a8161128d565b5b816003811115610a9557610a9461128d565b5b1415610aa5576000915050610b11565b60016003811115610ab957610ab861128d565b5b816003811115610acc57610acb61128d565b5b1480610afc575060026003811115610ae757610ae661128d565b5b816003811115610afa57610af961128d565b5b145b15610b0b576001915050610b11565b60029150505b90565b60075481565b60098181548110610b2a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60055481565b600060149054906101000a900467ffffffffffffffff1681565b600a5481565b60015481565b600260019054906101000a900463ffffffff1681565b600260009054906101000a900460ff1681565b60006003811115610bec57610beb61128d565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8a4676f6008546040518263ffffffff1660e01b8152600401610c479190611049565b602060405180830381865afa158015610c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c88919061151f565b6003811115610c9a57610c9961128d565b5b14610cd1576040517f4edbe0e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005543414610d1b57346005546040517fe6be2dc8000000000000000000000000000000000000000000000000000000008152600401610d129291906114d1565b60405180910390fd5b6009339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034600a6000828254610d90919061157b565b92505081905550565b60045481565b610da881610dac565b5050565b6000600980549050600260009054906101000a900460ff1660ff1610610dd757600980549050610deb565b600260009054906101000a900460ff1660ff165b9050600081600a54610dfd91906117cd565b90507f94942738dac5813db86bc09e12c382aaa6824a675cfd6f834a8e2d5a964ac3c4600980549050600a5484604051610e39939291906117fe565b60405180910390a160005b828163ffffffff161015610fd6576000848263ffffffff1681518110610e6d57610e6c611835565b5b60200260200101519050600060098054905082610e8a9190611864565b9050600060098281548110610ea257610ea1611835565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060098281548110610ee357610ee2611835565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558073ffffffffffffffffffffffffffffffffffffffff167f7adb26a7cfdd051fb0b5aedd769aead9026d0a9ebcc7f9b4f0b34b19778243a38487604051610f589291906114d1565b60405180910390a284600a6000828254610f7291906115d1565b925050819055508073ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050158015610fbf573d6000803e3d6000fd5b505050508080610fce90611895565b915050610e44565b5060096000610fe59190610ff2565b6000600881905550505050565b50805460008255906000526020600020908101906110109190611013565b50565b5b8082111561102c576000816000905550600101611014565b5090565b6000819050919050565b61104381611030565b82525050565b600060208201905061105e600083018461103a565b92915050565b6000819050919050565b61107781611064565b82525050565b6000602082019050611092600083018461106e565b92915050565b6000604051905090565b600080fd5b600080fd5b6110b581611030565b81146110c057600080fd5b50565b6000813590506110d2816110ac565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611126826110dd565b810181811067ffffffffffffffff82111715611145576111446110ee565b5b80604052505050565b6000611158611098565b9050611164828261111d565b919050565b600067ffffffffffffffff821115611184576111836110ee565b5b602082029050602081019050919050565b600080fd5b60006111ad6111a884611169565b61114e565b905080838252602082019050602084028301858111156111d0576111cf611195565b5b835b818110156111f957806111e588826110c3565b8452602084019350506020810190506111d2565b5050509392505050565b600082601f830112611218576112176110d8565b5b813561122884826020860161119a565b91505092915050565b60008060408385031215611248576112476110a2565b5b6000611256858286016110c3565b925050602083013567ffffffffffffffff811115611277576112766110a7565b5b61128385828601611203565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106112cd576112cc61128d565b5b50565b60008190506112de826112bc565b919050565b60006112ee826112d0565b9050919050565b6112fe816112e3565b82525050565b600060208201905061131960008301846112f5565b92915050565b600060208284031215611335576113346110a2565b5b6000611343848285016110c3565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113778261134c565b9050919050565b6113878161136c565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000819050919050565b60006113cd6113c86113c38461134c565b6113a8565b61134c565b9050919050565b60006113df826113b2565b9050919050565b60006113f1826113d4565b9050919050565b611401816113e6565b82525050565b600060208201905061141c60008301846113f8565b92915050565b600067ffffffffffffffff82169050919050565b61143f81611422565b82525050565b600060208201905061145a6000830184611436565b92915050565b600063ffffffff82169050919050565b61147981611460565b82525050565b60006020820190506114946000830184611470565b92915050565b600060ff82169050919050565b6114b08161149a565b82525050565b60006020820190506114cb60008301846114a7565b92915050565b60006040820190506114e6600083018561103a565b6114f3602083018461103a565b9392505050565b6004811061150757600080fd5b50565b600081519050611519816114fa565b92915050565b600060208284031215611535576115346110a2565b5b60006115438482850161150a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061158682611030565b915061159183611030565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156115c6576115c561154c565b5b828201905092915050565b60006115dc82611030565b91506115e783611030565b9250828210156115fa576115f961154c565b5b828203905092915050565b600061161082611030565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116435761164261154c565b5b600182019050919050565b600061166961166461165f84611460565b6113a8565b611422565b9050919050565b6116798161164e565b82525050565b600060c082019050611694600083018961137e565b6116a1602083018861103a565b6116ae6040830187611436565b6116bb606083018661106e565b6116c860808301856114a7565b6116d560a0830184611670565b979650505050505050565b6000815190506116ef816110ac565b92915050565b60006020828403121561170b5761170a6110a2565b5b6000611719848285016116e0565b91505092915050565b600060a082019050611737600083018861137e565b611744602083018761103a565b6117516040830186611436565b61175e606083018561106e565b61176b60808301846114a7565b9695505050505050565b600060408201905061178a600083018561137e565b611797602083018461137e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006117d882611030565b91506117e383611030565b9250826117f3576117f261179e565b5b828204905092915050565b6000606082019050611813600083018661103a565b611820602083018561103a565b61182d604083018461103a565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061186f82611030565b915061187a83611030565b92508261188a5761188961179e565b5b828206905092915050565b60006118a082611460565b915063ffffffff8214156118b7576118b661154c565b5b60018201905091905056fea2646970667358221220dd5f4648a7c60017c9cd5d09ffc8e6f541c8834c9dc3bb425380ca5fc193f38b64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x108 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3A984BC5 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0x76C7A3C7 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0x76C7A3C7 EQ PUSH2 0x30A JUMPI DUP1 PUSH4 0x7D5A9C5A EQ PUSH2 0x335 JUMPI DUP1 PUSH4 0xCAD0338C EQ PUSH2 0x360 JUMPI DUP1 PUSH4 0xD11711A2 EQ PUSH2 0x38B JUMPI DUP1 PUSH4 0xF3BAF070 EQ PUSH2 0x395 JUMPI PUSH2 0x108 JUMP JUMPDEST DUP1 PUSH4 0x3A984BC5 EQ PUSH2 0x25E JUMPI DUP1 PUSH4 0x49943A13 EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x51A8E298 EQ PUSH2 0x2B4 JUMPI DUP1 PUSH4 0x6B31EE01 EQ PUSH2 0x2DF JUMPI PUSH2 0x108 JUMP JUMPDEST DUP1 PUSH4 0x1FE543E3 GT PUSH2 0xDC JUMPI DUP1 PUSH4 0x1FE543E3 EQ PUSH2 0x177 JUMPI DUP1 PUSH4 0x200D2ED2 EQ PUSH2 0x1A0 JUMPI DUP1 PUSH4 0x2B855D19 EQ PUSH2 0x1CB JUMPI DUP1 PUSH4 0x35C1D349 EQ PUSH2 0x1F6 JUMPI DUP1 PUSH4 0x36013189 EQ PUSH2 0x233 JUMPI PUSH2 0x108 JUMP JUMPDEST DUP1 PUSH3 0x6D6CAE EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0x81275D4 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x160344E2 EQ PUSH2 0x142 JUMPI DUP1 PUSH4 0x17A47282 EQ PUSH2 0x14C JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x119 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x122 PUSH2 0x3C0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x140 PUSH2 0x3C6 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14A PUSH2 0x457 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x161 PUSH2 0x943 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x16E SWAP2 SWAP1 PUSH2 0x107D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x183 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x199 SWAP2 SWAP1 PUSH2 0x1231 JUMP JUMPDEST PUSH2 0x949 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B5 PUSH2 0x9CD JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C2 SWAP2 SWAP1 PUSH2 0x1304 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1E0 PUSH2 0xB14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1ED SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x202 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x21D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x218 SWAP2 SWAP1 PUSH2 0x131F JUMP JUMPDEST PUSH2 0xB1A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x22A SWAP2 SWAP1 PUSH2 0x138D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x23F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x248 PUSH2 0xB59 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x255 SWAP2 SWAP1 PUSH2 0x1407 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x273 PUSH2 0xB7D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x280 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x295 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x29E PUSH2 0xB83 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2AB SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2C9 PUSH2 0xB89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2D6 SWAP2 SWAP1 PUSH2 0x1445 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2F4 PUSH2 0xBA3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x301 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x316 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31F PUSH2 0xBA9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x32C SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34A PUSH2 0xBAF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x357 SWAP2 SWAP1 PUSH2 0x147F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x375 PUSH2 0xBC5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x382 SWAP2 SWAP1 PUSH2 0x14B6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x393 PUSH2 0xBD8 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AA PUSH2 0xD99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B7 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0408A7F PUSH1 0x8 SLOAD CALLVALUE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x423 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x43D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x451 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0xB PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x4B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4C5 JUMPI PUSH2 0x4C4 PUSH2 0x128D JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8A4676F PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x520 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x53D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x561 SWAP2 SWAP1 PUSH2 0x151F JUMP JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x573 JUMPI PUSH2 0x572 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ PUSH2 0x5AA JUMPI PUSH1 0x40 MLOAD PUSH32 0x4EDBE0E300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x9 DUP1 SLOAD SWAP1 POP LT ISZERO PUSH2 0x5FF JUMPI PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH32 0x5FDD6F4900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5F6 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 SLOAD PUSH1 0x9 DUP1 SLOAD SWAP1 POP LT PUSH2 0x653 JUMPI PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0x4 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE318577800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x64A SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE SWAP1 POP PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0x6A3 JUMPI DUP1 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH32 0x167202800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x69A SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 SWAP1 POP DUP1 PUSH1 0xA SLOAD PUSH2 0x6BE SWAP2 SWAP1 PUSH2 0x157B JUMP JUMPDEST SELFBALANCE LT ISZERO PUSH2 0x711 JUMPI PUSH1 0xA SLOAD SELFBALANCE PUSH2 0x6D3 SWAP2 SWAP1 PUSH2 0x15D1 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH32 0xEA691A4B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x708 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x725 JUMPI PUSH2 0x724 PUSH2 0x128D JUMP JUMPDEST JUMPDEST PUSH1 0xB PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x747 JUMPI PUSH2 0x746 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ ISZERO PUSH2 0x852 JUMPI PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9478430C CALLER DUP5 PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x7 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH2 0x7B5 SWAP1 PUSH2 0x1605 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE PUSH1 0x0 SHL PUSH1 0x6 SLOAD XOR PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x2 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND PUSH1 0x40 MLOAD DUP8 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x804 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x167F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x823 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x847 SWAP2 SWAP1 PUSH2 0x16F5 JUMP JUMPDEST PUSH1 0x8 DUP2 SWAP1 SSTORE POP PUSH2 0x93F JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x33C14A63 CALLER DUP5 PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x7 PUSH1 0x0 DUP2 SLOAD DUP1 SWAP3 SWAP2 SWAP1 PUSH2 0x8BA SWAP1 PUSH2 0x1605 JUMP JUMPDEST SWAP2 SWAP1 POP SSTORE PUSH1 0x0 SHL PUSH1 0x6 SLOAD XOR PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8F5 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1722 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x914 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x938 SWAP2 SWAP1 PUSH2 0x16F5 JUMP JUMPDEST PUSH1 0x8 DUP2 SWAP1 SSTORE POP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x809 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x9BF JUMPI CALLER PUSH2 0x809 PUSH1 0x40 MLOAD PUSH32 0xC68806F500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9B6 SWAP3 SWAP2 SWAP1 PUSH2 0x1775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x9C9 DUP3 DUP3 PUSH2 0xD9F JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8A4676F PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xA2B SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xA48 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xA6C SWAP2 SWAP1 PUSH2 0x151F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA82 JUMPI PUSH2 0xA81 PUSH2 0x128D JUMP JUMPDEST JUMPDEST DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xA95 JUMPI PUSH2 0xA94 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ ISZERO PUSH2 0xAA5 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0xB11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAB9 JUMPI PUSH2 0xAB8 PUSH2 0x128D JUMP JUMPDEST JUMPDEST DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xACC JUMPI PUSH2 0xACB PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ DUP1 PUSH2 0xAFC JUMPI POP PUSH1 0x2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAE7 JUMPI PUSH2 0xAE6 PUSH2 0x128D JUMP JUMPDEST JUMPDEST DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xAFA JUMPI PUSH2 0xAF9 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ JUMPDEST ISZERO PUSH2 0xB0B JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0xB11 JUMP JUMPDEST PUSH1 0x2 SWAP2 POP POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x9 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xB2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x14 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0xA SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xBEC JUMPI PUSH2 0xBEB PUSH2 0x128D JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD8A4676F PUSH1 0x8 SLOAD PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xC47 SWAP2 SWAP1 PUSH2 0x1049 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC88 SWAP2 SWAP1 PUSH2 0x151F JUMP JUMPDEST PUSH1 0x3 DUP2 GT ISZERO PUSH2 0xC9A JUMPI PUSH2 0xC99 PUSH2 0x128D JUMP JUMPDEST JUMPDEST EQ PUSH2 0xCD1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x4EDBE0E300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x5 SLOAD CALLVALUE EQ PUSH2 0xD1B JUMPI CALLVALUE PUSH1 0x5 SLOAD PUSH1 0x40 MLOAD PUSH32 0xE6BE2DC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD12 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x9 CALLER SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP PUSH1 0x1 SWAP1 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP1 SWAP2 SWAP1 SWAP2 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE PUSH1 0xA PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xD90 SWAP2 SWAP1 PUSH2 0x157B JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xDA8 DUP2 PUSH2 0xDAC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND LT PUSH2 0xDD7 JUMPI PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH2 0xDEB JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 PUSH1 0xA SLOAD PUSH2 0xDFD SWAP2 SWAP1 PUSH2 0x17CD JUMP JUMPDEST SWAP1 POP PUSH32 0x94942738DAC5813DB86BC09E12C382AAA6824A675CFD6F834A8E2D5A964AC3C4 PUSH1 0x9 DUP1 SLOAD SWAP1 POP PUSH1 0xA SLOAD DUP5 PUSH1 0x40 MLOAD PUSH2 0xE39 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x17FE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 JUMPDEST DUP3 DUP2 PUSH4 0xFFFFFFFF AND LT ISZERO PUSH2 0xFD6 JUMPI PUSH1 0x0 DUP5 DUP3 PUSH4 0xFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0xE6D JUMPI PUSH2 0xE6C PUSH2 0x1835 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x9 DUP1 SLOAD SWAP1 POP DUP3 PUSH2 0xE8A SWAP2 SWAP1 PUSH2 0x1864 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x9 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xEA2 JUMPI PUSH2 0xEA1 PUSH2 0x1835 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH1 0x9 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xEE3 JUMPI PUSH2 0xEE2 PUSH2 0x1835 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 SSTORE DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7ADB26A7CFDD051FB0B5AEDD769AEAD9026D0A9EBCC7F9B4F0B34B19778243A3 DUP5 DUP8 PUSH1 0x40 MLOAD PUSH2 0xF58 SWAP3 SWAP2 SWAP1 PUSH2 0x14D1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP5 PUSH1 0xA PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0xF72 SWAP2 SWAP1 PUSH2 0x15D1 JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP7 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0xFBF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 DUP1 PUSH2 0xFCE SWAP1 PUSH2 0x1895 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xE44 JUMP JUMPDEST POP PUSH1 0x9 PUSH1 0x0 PUSH2 0xFE5 SWAP2 SWAP1 PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST POP DUP1 SLOAD PUSH1 0x0 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP1 PUSH2 0x1010 SWAP2 SWAP1 PUSH2 0x1013 JUMP JUMPDEST POP JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x102C JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 SWAP1 SSTORE POP PUSH1 0x1 ADD PUSH2 0x1014 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1043 DUP2 PUSH2 0x1030 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x105E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x103A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1077 DUP2 PUSH2 0x1064 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1092 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x106E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10B5 DUP2 PUSH2 0x1030 JUMP JUMPDEST DUP2 EQ PUSH2 0x10C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x10D2 DUP2 PUSH2 0x10AC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1126 DUP3 PUSH2 0x10DD JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1145 JUMPI PUSH2 0x1144 PUSH2 0x10EE JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1158 PUSH2 0x1098 JUMP JUMPDEST SWAP1 POP PUSH2 0x1164 DUP3 DUP3 PUSH2 0x111D JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1184 JUMPI PUSH2 0x1183 PUSH2 0x10EE JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x11AD PUSH2 0x11A8 DUP5 PUSH2 0x1169 JUMP JUMPDEST PUSH2 0x114E JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x11D0 JUMPI PUSH2 0x11CF PUSH2 0x1195 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x11F9 JUMPI DUP1 PUSH2 0x11E5 DUP9 DUP3 PUSH2 0x10C3 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x11D2 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1218 JUMPI PUSH2 0x1217 PUSH2 0x10D8 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1228 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x119A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1248 JUMPI PUSH2 0x1247 PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1256 DUP6 DUP3 DUP7 ADD PUSH2 0x10C3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1277 JUMPI PUSH2 0x1276 PUSH2 0x10A7 JUMP JUMPDEST JUMPDEST PUSH2 0x1283 DUP6 DUP3 DUP7 ADD PUSH2 0x1203 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x3 DUP2 LT PUSH2 0x12CD JUMPI PUSH2 0x12CC PUSH2 0x128D JUMP JUMPDEST JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH2 0x12DE DUP3 PUSH2 0x12BC JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12EE DUP3 PUSH2 0x12D0 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x12FE DUP2 PUSH2 0x12E3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1319 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x12F5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1335 JUMPI PUSH2 0x1334 PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1343 DUP5 DUP3 DUP6 ADD PUSH2 0x10C3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1377 DUP3 PUSH2 0x134C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1387 DUP2 PUSH2 0x136C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x13A2 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x137E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13CD PUSH2 0x13C8 PUSH2 0x13C3 DUP5 PUSH2 0x134C JUMP JUMPDEST PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x134C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13DF DUP3 PUSH2 0x13B2 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13F1 DUP3 PUSH2 0x13D4 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1401 DUP2 PUSH2 0x13E6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x141C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x13F8 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x143F DUP2 PUSH2 0x1422 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x145A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1436 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1479 DUP2 PUSH2 0x1460 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1494 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x1470 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x14B0 DUP2 PUSH2 0x149A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x14CB PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x14A7 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x14E6 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x14F3 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x103A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x1507 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1519 DUP2 PUSH2 0x14FA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1535 JUMPI PUSH2 0x1534 PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1543 DUP5 DUP3 DUP6 ADD PUSH2 0x150A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1586 DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x1591 DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x15C6 JUMPI PUSH2 0x15C5 PUSH2 0x154C JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15DC DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x15E7 DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 LT ISZERO PUSH2 0x15FA JUMPI PUSH2 0x15F9 PUSH2 0x154C JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1610 DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x1643 JUMPI PUSH2 0x1642 PUSH2 0x154C JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1669 PUSH2 0x1664 PUSH2 0x165F DUP5 PUSH2 0x1460 JUMP JUMPDEST PUSH2 0x13A8 JUMP JUMPDEST PUSH2 0x1422 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1679 DUP2 PUSH2 0x164E JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP PUSH2 0x1694 PUSH1 0x0 DUP4 ADD DUP10 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x16A1 PUSH1 0x20 DUP4 ADD DUP9 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x16AE PUSH1 0x40 DUP4 ADD DUP8 PUSH2 0x1436 JUMP JUMPDEST PUSH2 0x16BB PUSH1 0x60 DUP4 ADD DUP7 PUSH2 0x106E JUMP JUMPDEST PUSH2 0x16C8 PUSH1 0x80 DUP4 ADD DUP6 PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x16D5 PUSH1 0xA0 DUP4 ADD DUP5 PUSH2 0x1670 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x16EF DUP2 PUSH2 0x10AC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x170B JUMPI PUSH2 0x170A PUSH2 0x10A2 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1719 DUP5 DUP3 DUP6 ADD PUSH2 0x16E0 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1737 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x1744 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x1751 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1436 JUMP JUMPDEST PUSH2 0x175E PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x106E JUMP JUMPDEST PUSH2 0x176B PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x14A7 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x178A PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x1797 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x137E JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D8 DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x17E3 DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x17F3 JUMPI PUSH2 0x17F2 PUSH2 0x179E JUMP JUMPDEST JUMPDEST DUP3 DUP3 DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0x1813 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x1820 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x182D PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x103A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x186F DUP3 PUSH2 0x1030 JUMP JUMPDEST SWAP2 POP PUSH2 0x187A DUP4 PUSH2 0x1030 JUMP JUMPDEST SWAP3 POP DUP3 PUSH2 0x188A JUMPI PUSH2 0x1889 PUSH2 0x179E JUMP JUMPDEST JUMPDEST DUP3 DUP3 MOD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18A0 DUP3 PUSH2 0x1460 JUMP JUMPDEST SWAP2 POP PUSH4 0xFFFFFFFF DUP3 EQ ISZERO PUSH2 0x18B7 JUMPI PUSH2 0x18B6 PUSH2 0x154C JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD 0x5F CHAINID BASEFEE 0xA7 0xC6 STOP OR 0xC9 0xCD 0x5D MULMOD SELFDESTRUCT 0xC8 0xE6 CREATE2 COINBASE 0xC8 DUP4 0x4C SWAP14 0xC3 0xBB TIMESTAMP MSTORE8 DUP1 0xCA 0x5F 0xC1 SWAP4 RETURN DUP12 PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "270:11368:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5138:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10043:115;;;:::i;:::-;;7334:2519;;;:::i;:::-;;4875:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5871:409:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6209:555:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5059:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5218:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;381:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4227:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4744:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3025:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5322:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3437:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4095:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3658:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6770:558;;;:::i;:::-;;4614:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5138:24;;;;:::o;10043:115::-;10100:10;;;;;;;;;;:29;;;10130:9;;10141;10100:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10043:115::o;7334:2519::-;11612:5;;;;;;;;;;;11598:19;;:10;:19;;;11590:28;;;;;;7533:37:::1;7479:91;;;;;;;;:::i;:::-;;:10;::::0;::::1;;;;;;;;:27;;;7507:9;;7479:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:91;;;;;;;;:::i;:::-;;;7462:171;;7602:20;;;;;;;;;;;;;;7462:171;7669:16;;7647:12;:19;;;;:38;7643:136;;;7730:12;:19;;;;7751:16;;7708:60;;;;;;;;;;;;:::i;:::-;;;;;;;;7643:136;7815:16;;7792:12;:19;;;;:39;7788:135;;7874:12;:19;;;;7895:16;;7854:58;;;;;;;;;;;;:::i;:::-;;;;;;;;7788:135;7933:11;7947:9;7933:23;;7976:7;;7970:3;:13;7966:77;;;8019:3;8024:7;;8006:26;;;;;;;;;;;;:::i;:::-;;;;;;;;7966:77;8256:23;8282:19;8256:45;;8400:15;8390:7;;:25;;;;:::i;:::-;8366:21;:49;8362:196;;;8493:7;;8469:21;:31;;;;:::i;:::-;8518:15;8438:109;;;;;;;;;;;;:::i;:::-;;;;;;;;8362:196;8592:36;8572:56;;;;;;;;:::i;:::-;;:16;;;;;;;;;;;:56;;;;;;;;:::i;:::-;;;8568:1279;;;8957:10;::::0;::::1;;;;;;;;:37;;;9012:10;9040:3;9061:21;;;;;;;;;;;9122:18;;:20;;;;;;;;;:::i;:::-;;;;;9114:29;;9100:11;;:43;9161:11;;;;;;;;;;;9190:16;;;;;;;;;;;8957:263;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8945:9;:275;;;;8568:1279;;;9601:10;::::0;::::1;;;;;;;;:43;;;9662:10;9690:3;9711:21;;;;;;;;;;;9772:18;;:20;;;;;;;;;:::i;:::-;;;;;9764:29;;9750:11;;:43;9811:11;;;;;;;;;;;9601:235;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9589:9;:247;;;;8568:1279;7385:2468;;7334:2519::o:0;4875:53::-;;;;:::o;5871:409:2:-;6010:42;5996:56;;:10;:56;;;5992:230;;6127:10;6155:42;6075:136;;;;;;;;;;;;:::i;:::-;;;;;;;;5992:230;6231:42;6250:9;6261:11;6231:18;:42::i;:::-;5871:409;;:::o;6209:555:0:-;6250:13;6275:38;6316:10;;;;;;;;;;:27;;;6357:9;;6316:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6275:101;;6407:37;6390:54;;;;;;;;:::i;:::-;;:13;:54;;;;;;;;:::i;:::-;;;6386:125;;;6467:33;6460:40;;;;;6386:125;6554:32;6537:49;;;;;;;;:::i;:::-;;:13;:49;;;;;;;;:::i;:::-;;;:112;;;;6619:30;6602:47;;;;;;;;:::i;:::-;;:13;:47;;;;;;;;:::i;:::-;;;6537:112;6520:200;;;6681:28;6674:35;;;;;6520:200;6736:21;6729:28;;;6209:555;;:::o;5059:33::-;;;;:::o;5218:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;381:93::-;;;;;;;;;;;;:::o;4227:35::-;;;;:::o;4744:42::-;;;;:::o;3025:44::-;;;;;;;;;;;;;:::o;5322:22::-;;;;:::o;3437:55::-;;;;:::o;4095:53::-;;;;;;;;;;;;;:::o;3658:28::-;;;;;;;;;;;;;:::o;6770:558::-;6958:37;6904:91;;;;;;;;:::i;:::-;;:10;;;;;;;;;;:27;;;6932:9;;6904:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:91;;;;;;;;:::i;:::-;;;6887:171;;7027:20;;;;;;;;;;;;;;6887:171;7149:17;;7136:9;:30;7132:121;;7213:9;7224:17;;7189:53;;;;;;;;;;;;:::i;:::-;;;;;;;;7132:121;7262:12;7280:10;7262:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7312:9;7301:7;;:20;;;;;;;:::i;:::-;;;;;;;;6770:558::o;4614:36::-;;;;:::o;11389:164::-;11522:24;11534:11;11522;:24::i;:::-;11389:164;;:::o;10234:1149::-;10358:20;10395:12;:19;;;;10381:11;;;;;;;;;;;:33;;;:93;;10455:12;:19;;;;10381:93;;;10429:11;;;;;;;;;;;10381:93;;;10358:116;;10590:21;10624:12;10614:7;;:22;;;;:::i;:::-;10590:46;;10651:49;10657:12;:19;;;;10678:7;;10687:12;10651:49;;;;;;;;:::i;:::-;;;;;;;;10715:8;10710:615;10733:12;10729:1;:16;;;10710:615;;;10885:18;10906:11;10918:1;10906:14;;;;;;;;;;:::i;:::-;;;;;;;;10885:35;;11016:13;11045:12;:19;;;;11032:10;:32;;;;:::i;:::-;11016:48;;11078:22;11111:12;11124:5;11111:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11078:53;;11152:12;11165:5;11152:19;;;;;;;;:::i;:::-;;;;;;;;;;11145:26;;;;;;;;;;;11198:6;11190:42;;;11206:10;11218:13;11190:42;;;;;;;:::i;:::-;;;;;;;;11257:13;11246:7;;:24;;;;;;;:::i;:::-;;;;;;;;11284:6;:15;;:30;11300:13;11284:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:573;;;10747:3;;;;;:::i;:::-;;;;10710:615;;;;11341:12;;11334:19;;;;:::i;:::-;11375:1;11363:9;:13;;;;10294:1089;;10234:1149;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:3:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:77::-;479:7;508:5;497:16;;442:77;;;:::o;525:118::-;612:24;630:5;612:24;:::i;:::-;607:3;600:37;525:118;;:::o;649:222::-;742:4;780:2;769:9;765:18;757:26;;793:71;861:1;850:9;846:17;837:6;793:71;:::i;:::-;649:222;;;;:::o;877:75::-;910:6;943:2;937:9;927:19;;877:75;:::o;958:117::-;1067:1;1064;1057:12;1081:117;1190:1;1187;1180:12;1204:122;1277:24;1295:5;1277:24;:::i;:::-;1270:5;1267:35;1257:63;;1316:1;1313;1306:12;1257:63;1204:122;:::o;1332:139::-;1378:5;1416:6;1403:20;1394:29;;1432:33;1459:5;1432:33;:::i;:::-;1332:139;;;;:::o;1477:117::-;1586:1;1583;1576:12;1600:102;1641:6;1692:2;1688:7;1683:2;1676:5;1672:14;1668:28;1658:38;;1600:102;;;:::o;1708:180::-;1756:77;1753:1;1746:88;1853:4;1850:1;1843:15;1877:4;1874:1;1867:15;1894:281;1977:27;1999:4;1977:27;:::i;:::-;1969:6;1965:40;2107:6;2095:10;2092:22;2071:18;2059:10;2056:34;2053:62;2050:88;;;2118:18;;:::i;:::-;2050:88;2158:10;2154:2;2147:22;1937:238;1894:281;;:::o;2181:129::-;2215:6;2242:20;;:::i;:::-;2232:30;;2271:33;2299:4;2291:6;2271:33;:::i;:::-;2181:129;;;:::o;2316:311::-;2393:4;2483:18;2475:6;2472:30;2469:56;;;2505:18;;:::i;:::-;2469:56;2555:4;2547:6;2543:17;2535:25;;2615:4;2609;2605:15;2597:23;;2316:311;;;:::o;2633:117::-;2742:1;2739;2732:12;2773:710;2869:5;2894:81;2910:64;2967:6;2910:64;:::i;:::-;2894:81;:::i;:::-;2885:90;;2995:5;3024:6;3017:5;3010:21;3058:4;3051:5;3047:16;3040:23;;3111:4;3103:6;3099:17;3091:6;3087:30;3140:3;3132:6;3129:15;3126:122;;;3159:79;;:::i;:::-;3126:122;3274:6;3257:220;3291:6;3286:3;3283:15;3257:220;;;3366:3;3395:37;3428:3;3416:10;3395:37;:::i;:::-;3390:3;3383:50;3462:4;3457:3;3453:14;3446:21;;3333:144;3317:4;3312:3;3308:14;3301:21;;3257:220;;;3261:21;2875:608;;2773:710;;;;;:::o;3506:370::-;3577:5;3626:3;3619:4;3611:6;3607:17;3603:27;3593:122;;3634:79;;:::i;:::-;3593:122;3751:6;3738:20;3776:94;3866:3;3858:6;3851:4;3843:6;3839:17;3776:94;:::i;:::-;3767:103;;3583:293;3506:370;;;;:::o;3882:684::-;3975:6;3983;4032:2;4020:9;4011:7;4007:23;4003:32;4000:119;;;4038:79;;:::i;:::-;4000:119;4158:1;4183:53;4228:7;4219:6;4208:9;4204:22;4183:53;:::i;:::-;4173:63;;4129:117;4313:2;4302:9;4298:18;4285:32;4344:18;4336:6;4333:30;4330:117;;;4366:79;;:::i;:::-;4330:117;4471:78;4541:7;4532:6;4521:9;4517:22;4471:78;:::i;:::-;4461:88;;4256:303;3882:684;;;;;:::o;4572:180::-;4620:77;4617:1;4610:88;4717:4;4714:1;4707:15;4741:4;4738:1;4731:15;4758:121;4847:1;4840:5;4837:12;4827:46;;4853:18;;:::i;:::-;4827:46;4758:121;:::o;4885:143::-;4938:7;4967:5;4956:16;;4973:49;5016:5;4973:49;:::i;:::-;4885:143;;;:::o;5034:::-;5098:9;5131:40;5165:5;5131:40;:::i;:::-;5118:53;;5034:143;;;:::o;5183:159::-;5284:51;5329:5;5284:51;:::i;:::-;5279:3;5272:64;5183:159;;:::o;5348:250::-;5455:4;5493:2;5482:9;5478:18;5470:26;;5506:85;5588:1;5577:9;5573:17;5564:6;5506:85;:::i;:::-;5348:250;;;;:::o;5604:329::-;5663:6;5712:2;5700:9;5691:7;5687:23;5683:32;5680:119;;;5718:79;;:::i;:::-;5680:119;5838:1;5863:53;5908:7;5899:6;5888:9;5884:22;5863:53;:::i;:::-;5853:63;;5809:117;5604:329;;;;:::o;5939:126::-;5976:7;6016:42;6009:5;6005:54;5994:65;;5939:126;;;:::o;6071:96::-;6108:7;6137:24;6155:5;6137:24;:::i;:::-;6126:35;;6071:96;;;:::o;6173:118::-;6260:24;6278:5;6260:24;:::i;:::-;6255:3;6248:37;6173:118;;:::o;6297:222::-;6390:4;6428:2;6417:9;6413:18;6405:26;;6441:71;6509:1;6498:9;6494:17;6485:6;6441:71;:::i;:::-;6297:222;;;;:::o;6525:60::-;6553:3;6574:5;6567:12;;6525:60;;;:::o;6591:142::-;6641:9;6674:53;6692:34;6701:24;6719:5;6701:24;:::i;:::-;6692:34;:::i;:::-;6674:53;:::i;:::-;6661:66;;6591:142;;;:::o;6739:126::-;6789:9;6822:37;6853:5;6822:37;:::i;:::-;6809:50;;6739:126;;;:::o;6871:144::-;6939:9;6972:37;7003:5;6972:37;:::i;:::-;6959:50;;6871:144;;;:::o;7021:167::-;7126:55;7175:5;7126:55;:::i;:::-;7121:3;7114:68;7021:167;;:::o;7194:258::-;7305:4;7343:2;7332:9;7328:18;7320:26;;7356:89;7442:1;7431:9;7427:17;7418:6;7356:89;:::i;:::-;7194:258;;;;:::o;7458:101::-;7494:7;7534:18;7527:5;7523:30;7512:41;;7458:101;;;:::o;7565:115::-;7650:23;7667:5;7650:23;:::i;:::-;7645:3;7638:36;7565:115;;:::o;7686:218::-;7777:4;7815:2;7804:9;7800:18;7792:26;;7828:69;7894:1;7883:9;7879:17;7870:6;7828:69;:::i;:::-;7686:218;;;;:::o;7910:93::-;7946:7;7986:10;7979:5;7975:22;7964:33;;7910:93;;;:::o;8009:115::-;8094:23;8111:5;8094:23;:::i;:::-;8089:3;8082:36;8009:115;;:::o;8130:218::-;8221:4;8259:2;8248:9;8244:18;8236:26;;8272:69;8338:1;8327:9;8323:17;8314:6;8272:69;:::i;:::-;8130:218;;;;:::o;8354:86::-;8389:7;8429:4;8422:5;8418:16;8407:27;;8354:86;;;:::o;8446:112::-;8529:22;8545:5;8529:22;:::i;:::-;8524:3;8517:35;8446:112;;:::o;8564:214::-;8653:4;8691:2;8680:9;8676:18;8668:26;;8704:67;8768:1;8757:9;8753:17;8744:6;8704:67;:::i;:::-;8564:214;;;;:::o;8784:332::-;8905:4;8943:2;8932:9;8928:18;8920:26;;8956:71;9024:1;9013:9;9009:17;9000:6;8956:71;:::i;:::-;9037:72;9105:2;9094:9;9090:18;9081:6;9037:72;:::i;:::-;8784:332;;;;;:::o;9122:116::-;9212:1;9205:5;9202:12;9192:40;;9228:1;9225;9218:12;9192:40;9122:116;:::o;9244:177::-;9318:5;9349:6;9343:13;9334:22;;9365:50;9409:5;9365:50;:::i;:::-;9244:177;;;;:::o;9427:385::-;9514:6;9563:2;9551:9;9542:7;9538:23;9534:32;9531:119;;;9569:79;;:::i;:::-;9531:119;9689:1;9714:81;9787:7;9778:6;9767:9;9763:22;9714:81;:::i;:::-;9704:91;;9660:145;9427:385;;;;:::o;9818:180::-;9866:77;9863:1;9856:88;9963:4;9960:1;9953:15;9987:4;9984:1;9977:15;10004:305;10044:3;10063:20;10081:1;10063:20;:::i;:::-;10058:25;;10097:20;10115:1;10097:20;:::i;:::-;10092:25;;10251:1;10183:66;10179:74;10176:1;10173:81;10170:107;;;10257:18;;:::i;:::-;10170:107;10301:1;10298;10294:9;10287:16;;10004:305;;;;:::o;10315:191::-;10355:4;10375:20;10393:1;10375:20;:::i;:::-;10370:25;;10409:20;10427:1;10409:20;:::i;:::-;10404:25;;10448:1;10445;10442:8;10439:34;;;10453:18;;:::i;:::-;10439:34;10498:1;10495;10491:9;10483:17;;10315:191;;;;:::o;10512:233::-;10551:3;10574:24;10592:5;10574:24;:::i;:::-;10565:33;;10620:66;10613:5;10610:77;10607:103;;;10690:18;;:::i;:::-;10607:103;10737:1;10730:5;10726:13;10719:20;;10512:233;;;:::o;10751:138::-;10799:9;10832:51;10849:33;10858:23;10875:5;10858:23;:::i;:::-;10849:33;:::i;:::-;10832:51;:::i;:::-;10819:64;;10751:138;;;:::o;10895:127::-;10980:35;11009:5;10980:35;:::i;:::-;10975:3;10968:48;10895:127;;:::o;11028:759::-;11253:4;11291:3;11280:9;11276:19;11268:27;;11305:71;11373:1;11362:9;11358:17;11349:6;11305:71;:::i;:::-;11386:72;11454:2;11443:9;11439:18;11430:6;11386:72;:::i;:::-;11468:70;11534:2;11523:9;11519:18;11510:6;11468:70;:::i;:::-;11548:72;11616:2;11605:9;11601:18;11592:6;11548:72;:::i;:::-;11630:69;11694:3;11683:9;11679:19;11670:6;11630:69;:::i;:::-;11709:71;11775:3;11764:9;11760:19;11751:6;11709:71;:::i;:::-;11028:759;;;;;;;;;:::o;11793:143::-;11850:5;11881:6;11875:13;11866:22;;11897:33;11924:5;11897:33;:::i;:::-;11793:143;;;;:::o;11942:351::-;12012:6;12061:2;12049:9;12040:7;12036:23;12032:32;12029:119;;;12067:79;;:::i;:::-;12029:119;12187:1;12212:64;12268:7;12259:6;12248:9;12244:22;12212:64;:::i;:::-;12202:74;;12158:128;11942:351;;;;:::o;12299:652::-;12498:4;12536:3;12525:9;12521:19;12513:27;;12550:71;12618:1;12607:9;12603:17;12594:6;12550:71;:::i;:::-;12631:72;12699:2;12688:9;12684:18;12675:6;12631:72;:::i;:::-;12713:70;12779:2;12768:9;12764:18;12755:6;12713:70;:::i;:::-;12793:72;12861:2;12850:9;12846:18;12837:6;12793:72;:::i;:::-;12875:69;12939:3;12928:9;12924:19;12915:6;12875:69;:::i;:::-;12299:652;;;;;;;;:::o;12957:332::-;13078:4;13116:2;13105:9;13101:18;13093:26;;13129:71;13197:1;13186:9;13182:17;13173:6;13129:71;:::i;:::-;13210:72;13278:2;13267:9;13263:18;13254:6;13210:72;:::i;:::-;12957:332;;;;;:::o;13295:180::-;13343:77;13340:1;13333:88;13440:4;13437:1;13430:15;13464:4;13461:1;13454:15;13481:185;13521:1;13538:20;13556:1;13538:20;:::i;:::-;13533:25;;13572:20;13590:1;13572:20;:::i;:::-;13567:25;;13611:1;13601:35;;13616:18;;:::i;:::-;13601:35;13658:1;13655;13651:9;13646:14;;13481:185;;;;:::o;13672:442::-;13821:4;13859:2;13848:9;13844:18;13836:26;;13872:71;13940:1;13929:9;13925:17;13916:6;13872:71;:::i;:::-;13953:72;14021:2;14010:9;14006:18;13997:6;13953:72;:::i;:::-;14035;14103:2;14092:9;14088:18;14079:6;14035:72;:::i;:::-;13672:442;;;;;;:::o;14120:180::-;14168:77;14165:1;14158:88;14265:4;14262:1;14255:15;14289:4;14286:1;14279:15;14306:176;14338:1;14355:20;14373:1;14355:20;:::i;:::-;14350:25;;14389:20;14407:1;14389:20;:::i;:::-;14384:25;;14428:1;14418:35;;14433:18;;:::i;:::-;14418:35;14474:1;14471;14467:9;14462:14;;14306:176;;;;:::o;14488:175::-;14526:3;14549:23;14566:5;14549:23;:::i;:::-;14540:32;;14594:10;14587:5;14584:21;14581:47;;;14608:18;;:::i;:::-;14581:47;14655:1;14648:5;14644:13;14637:20;;14488:175;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "1278400", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "FULFILLMENT_GAS_LIMIT()": "2588", + "MAX_PARTICIPANTS()": "2539", + "MIN_FEE()": "2451", + "MIN_PARTICIPANTS()": "2452", + "NUM_WINNERS()": "2537", + "PARTICIPATION_FEE()": "2474", + "SALT_PREFIX()": "2519", + "VRF_BLOCKS_DELAY()": "2565", + "globalRequestCount()": "2496", + "increaseRequestFee()": "infinite", + "jackpot()": "2518", + "participants(uint256)": "5045", + "participate()": "infinite", + "randomness()": "infinite", + "rawFulfillRandomWords(uint256,uint256[])": "infinite", + "requestId()": "2453", + "startLottery()": "infinite", + "status()": "infinite" + }, + "internal": { + "fulfillRandomWords(uint256,uint256[] memory)": "infinite", + "pickWinners(uint256[] memory)": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 270, "end": 11638, "name": "MSTORE", "source": 0 }, + { + "begin": 431, + "end": 473, + "name": "PUSH", + "source": 0, + "value": "809" + }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 381, "end": 474, "name": "DUP1", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 381, "end": 474, "name": "EXP", "source": 0 }, + { "begin": 381, "end": 474, "name": "DUP2", "source": 0 }, + { "begin": 381, "end": 474, "name": "SLOAD", "source": 0 }, + { "begin": 381, "end": 474, "name": "DUP2", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 381, "end": 474, "name": "MUL", "source": 0 }, + { "begin": 381, "end": 474, "name": "NOT", "source": 0 }, + { "begin": 381, "end": 474, "name": "AND", "source": 0 }, + { "begin": 381, "end": 474, "name": "SWAP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "DUP4", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 381, "end": 474, "name": "AND", "source": 0 }, + { "begin": 381, "end": 474, "name": "MUL", "source": 0 }, + { "begin": 381, "end": 474, "name": "OR", "source": 0 }, + { "begin": 381, "end": 474, "name": "SWAP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "SSTORE", "source": 0 }, + { "begin": 381, "end": 474, "name": "POP", "source": 0 }, + { + "begin": 3063, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "186A0" + }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 3025, "end": 3069, "name": "EXP", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "DUP2", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SLOAD", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "DUP2", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 3025, "end": 3069, "name": "MUL", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "NOT", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "AND", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SWAP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "DUP4", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 3025, "end": 3069, "name": "AND", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "MUL", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "OR", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SWAP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SSTORE", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "POP", "source": 0 }, + { + "begin": 3486, + "end": 3492, + "name": "PUSH", + "source": 0, + "value": "3B9ACA00" + }, + { + "begin": 3462, + "end": 3483, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 3462, + "end": 3483, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { "begin": 3462, "end": 3483, "name": "SWAP1", "source": 0 }, + { "begin": 3462, "end": 3483, "name": "SLOAD", "source": 0 }, + { "begin": 3462, "end": 3483, "name": "SWAP1", "source": 0 }, + { + "begin": 3462, + "end": 3483, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 3462, "end": 3483, "name": "EXP", "source": 0 }, + { "begin": 3462, "end": 3483, "name": "SWAP1", "source": 0 }, + { "begin": 3462, "end": 3483, "name": "DIV", "source": 0 }, + { + "begin": 3462, + "end": 3483, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 3462, "end": 3483, "name": "AND", "source": 0 }, + { + "begin": 3462, + "end": 3492, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 3462, "end": 3492, "name": "SWAP2", "source": 0 }, + { "begin": 3462, "end": 3492, "name": "SWAP1", "source": 0 }, + { + "begin": 3462, + "end": 3492, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { + "begin": 3462, + "end": 3492, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3462, + "end": 3492, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 3462, "end": 3492, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 3437, "end": 3492, "name": "AND", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 3437, "end": 3492, "name": "SSTORE", "source": 0 }, + { + "begin": 3685, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 3658, "end": 3686, "name": "DUP1", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 3658, "end": 3686, "name": "EXP", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "DUP2", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SLOAD", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "DUP2", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 3658, "end": 3686, "name": "MUL", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "NOT", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "AND", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SWAP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "DUP4", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 3658, "end": 3686, "name": "AND", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "MUL", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "OR", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SWAP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SSTORE", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "POP", "source": 0 }, + { + "begin": 292, + "end": 293, + "name": "PUSH", + "source": 1, + "value": "2" + }, + { "begin": 4095, "end": 4148, "name": "DUP1", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 4095, "end": 4148, "name": "EXP", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "DUP2", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SLOAD", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "DUP2", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 4095, "end": 4148, "name": "MUL", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "NOT", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "AND", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SWAP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "DUP4", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 4095, "end": 4148, "name": "AND", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "MUL", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "OR", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SWAP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SSTORE", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "POP", "source": 0 }, + { + "begin": 4261, + "end": 4262, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 4227, "end": 4262, "name": "DUP1", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "SSTORE", "source": 0 }, + { + "begin": 4648, + "end": 4650, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 4614, "end": 4650, "name": "SSTORE", "source": 0 }, + { + "begin": 4779, + "end": 4786, + "name": "PUSH", + "source": 0, + "value": "DE0B6B3A7640000" + }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { "begin": 4744, "end": 4786, "name": "SSTORE", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH", + "source": 0, + "value": "6D795F64656D6F5F73616C745F6368616E67655F6D6500000000000000000000" + }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH", + "source": 0, + "value": "6" + }, + { "begin": 4875, "end": 4928, "name": "SSTORE", "source": 0 }, + { + "begin": 5511, + "end": 6203, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5511, "end": 6203, "name": "MLOAD", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "PUSHSIZE", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "CODESIZE", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "SUB", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "DUP1", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "PUSHSIZE", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "DUP4", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "CODECOPY", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "DUP2", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "DUP2", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "ADD", "source": 0 }, + { + "begin": 5511, + "end": 6203, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5511, "end": 6203, "name": "MSTORE", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "DUP2", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "ADD", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "SWAP1", "source": 0 }, + { + "begin": 5511, + "end": 6203, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 5511, "end": 6203, "name": "SWAP2", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "SWAP1", "source": 0 }, + { + "begin": 5511, + "end": 6203, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 5511, + "end": 6203, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5511, + "end": 6203, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 5511, "end": 6203, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5750, + "end": 5773, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 5776, + "end": 5795, + "name": "PUSH", + "source": 0, + "value": "DE0B6B3A7640000" + }, + { "begin": 5750, "end": 5795, "name": "SWAP1", "source": 0 }, + { "begin": 5750, "end": 5795, "name": "POP", "source": 0 }, + { "begin": 5872, "end": 5887, "name": "DUP1", "source": 0 }, + { "begin": 5860, "end": 5869, "name": "CALLVALUE", "source": 0 }, + { "begin": 5860, "end": 5887, "name": "LT", "source": 0 }, + { "begin": 5856, "end": 5962, "name": "ISZERO", "source": 0 }, + { + "begin": 5856, + "end": 5962, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 5856, "end": 5962, "name": "JUMPI", "source": 0 }, + { "begin": 5924, "end": 5933, "name": "CALLVALUE", "source": 0 }, + { "begin": 5935, "end": 5950, "name": "DUP2", "source": 0 }, + { + "begin": 5910, + "end": 5951, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5910, "end": 5951, "name": "MLOAD", "source": 0 }, + { + "begin": 5910, + "end": 5951, + "name": "PUSH", + "source": 0, + "value": "EA691A4B00000000000000000000000000000000000000000000000000000000" + }, + { "begin": 5910, "end": 5951, "name": "DUP2", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "MSTORE", "source": 0 }, + { + "begin": 5910, + "end": 5951, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 5910, "end": 5951, "name": "ADD", "source": 0 }, + { + "begin": 5910, + "end": 5951, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 5910, "end": 5951, "name": "SWAP3", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "SWAP2", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "SWAP1", "source": 0 }, + { + "begin": 5910, + "end": 5951, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 5910, + "end": 5951, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5910, + "end": 5951, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 5910, "end": 5951, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5910, + "end": 5951, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5910, "end": 5951, "name": "MLOAD", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "DUP1", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "SWAP2", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "SUB", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "SWAP1", "source": 0 }, + { "begin": 5910, "end": 5951, "name": "REVERT", "source": 0 }, + { + "begin": 5856, + "end": 5962, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 5856, "end": 5962, "name": "JUMPDEST", "source": 0 }, + { "begin": 5991, "end": 5997, "name": "DUP2", "source": 0 }, + { + "begin": 5972, + "end": 5988, + "name": "PUSH", + "source": 0, + "value": "B" + }, + { + "begin": 5972, + "end": 5988, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { + "begin": 5972, + "end": 5997, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 5972, "end": 5997, "name": "EXP", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "DUP2", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "SLOAD", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "DUP2", "source": 0 }, + { + "begin": 5972, + "end": 5997, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 5972, "end": 5997, "name": "MUL", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "NOT", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "AND", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "SWAP1", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "DUP4", "source": 0 }, + { + "begin": 5972, + "end": 5997, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 5972, "end": 5997, "name": "DUP2", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "GT", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "ISZERO", "source": 0 }, + { + "begin": 5972, + "end": 5997, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 5972, "end": 5997, "name": "JUMPI", "source": 0 }, + { + "begin": 5972, + "end": 5997, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 5972, + "end": 5997, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 5972, + "end": 5997, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5972, + "end": 5997, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 5972, "end": 5997, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5972, + "end": 5997, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 5972, "end": 5997, "name": "JUMPDEST", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "MUL", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "OR", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "SWAP1", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "SSTORE", "source": 0 }, + { "begin": 5972, "end": 5997, "name": "POP", "source": 0 }, + { "begin": 6015, "end": 6025, "name": "CALLER", "source": 0 }, + { + "begin": 6007, + "end": 6012, + "name": "PUSH", + "source": 0, + "value": "B" + }, + { + "begin": 6007, + "end": 6012, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6007, + "end": 6025, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 6007, "end": 6025, "name": "EXP", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "DUP2", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "SLOAD", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "DUP2", "source": 0 }, + { + "begin": 6007, + "end": 6025, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6007, "end": 6025, "name": "MUL", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "NOT", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "AND", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "SWAP1", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "DUP4", "source": 0 }, + { + "begin": 6007, + "end": 6025, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6007, "end": 6025, "name": "AND", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "MUL", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "OR", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "SWAP1", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "SSTORE", "source": 0 }, + { "begin": 6007, "end": 6025, "name": "POP", "source": 0 }, + { + "begin": 6056, + "end": 6057, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6035, + "end": 6053, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 6035, "end": 6057, "name": "DUP2", "source": 0 }, + { "begin": 6035, "end": 6057, "name": "SWAP1", "source": 0 }, + { "begin": 6035, "end": 6057, "name": "SSTORE", "source": 0 }, + { "begin": 6035, "end": 6057, "name": "POP", "source": 0 }, + { + "begin": 6077, + "end": 6078, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6067, + "end": 6074, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { "begin": 6067, "end": 6078, "name": "DUP2", "source": 0 }, + { "begin": 6067, "end": 6078, "name": "SWAP1", "source": 0 }, + { "begin": 6067, "end": 6078, "name": "SSTORE", "source": 0 }, + { "begin": 6067, "end": 6078, "name": "POP", "source": 0 }, + { + "begin": 6187, + "end": 6196, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { + "begin": 6175, + "end": 6184, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 6175, "end": 6196, "name": "DUP2", "source": 0 }, + { "begin": 6175, "end": 6196, "name": "SWAP1", "source": 0 }, + { "begin": 6175, "end": 6196, "name": "SSTORE", "source": 0 }, + { "begin": 6175, "end": 6196, "name": "POP", "source": 0 }, + { "begin": 5608, "end": 6203, "name": "POP", "source": 0 }, + { "begin": 5511, "end": 6203, "name": "POP", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 270, "end": 11638, "name": "JUMP", "source": 0 }, + { "begin": 7, "end": 108, "name": "tag", "source": 3, "value": "14" }, + { "begin": 7, "end": 108, "name": "JUMPDEST", "source": 3 }, + { "begin": 43, "end": 50, "name": "PUSH", "source": 3, "value": "0" }, + { + "begin": 83, + "end": 101, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 76, "end": 81, "name": "DUP3", "source": 3 }, + { "begin": 72, "end": 102, "name": "AND", "source": 3 }, + { "begin": 61, "end": 102, "name": "SWAP1", "source": 3 }, + { "begin": 61, "end": 102, "name": "POP", "source": 3 }, + { "begin": 7, "end": 108, "name": "SWAP2", "source": 3 }, + { "begin": 7, "end": 108, "name": "SWAP1", "source": 3 }, + { "begin": 7, "end": 108, "name": "POP", "source": 3 }, + { + "begin": 7, + "end": 108, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 114, + "end": 294, + "name": "tag", + "source": 3, + "value": "15" + }, + { "begin": 114, "end": 294, "name": "JUMPDEST", "source": 3 }, + { + "begin": 162, + "end": 239, + "name": "PUSH", + "source": 3, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 159, + "end": 160, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 152, "end": 240, "name": "MSTORE", "source": 3 }, + { + "begin": 259, + "end": 263, + "name": "PUSH", + "source": 3, + "value": "11" + }, + { + "begin": 256, + "end": 257, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 249, "end": 264, "name": "MSTORE", "source": 3 }, + { + "begin": 283, + "end": 287, + "name": "PUSH", + "source": 3, + "value": "24" + }, + { + "begin": 280, + "end": 281, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 273, "end": 288, "name": "REVERT", "source": 3 }, + { + "begin": 300, + "end": 597, + "name": "tag", + "source": 3, + "value": "2" + }, + { "begin": 300, "end": 597, "name": "JUMPDEST", "source": 3 }, + { + "begin": 339, + "end": 346, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 362, + "end": 381, + "name": "PUSH [tag]", + "source": 3, + "value": "27" + }, + { "begin": 379, "end": 380, "name": "DUP3", "source": 3 }, + { + "begin": 362, + "end": 381, + "name": "PUSH [tag]", + "source": 3, + "value": "14" + }, + { + "begin": 362, + "end": 381, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 362, + "end": 381, + "name": "tag", + "source": 3, + "value": "27" + }, + { "begin": 362, "end": 381, "name": "JUMPDEST", "source": 3 }, + { "begin": 357, "end": 381, "name": "SWAP2", "source": 3 }, + { "begin": 357, "end": 381, "name": "POP", "source": 3 }, + { + "begin": 395, + "end": 414, + "name": "PUSH [tag]", + "source": 3, + "value": "28" + }, + { "begin": 412, "end": 413, "name": "DUP4", "source": 3 }, + { + "begin": 395, + "end": 414, + "name": "PUSH [tag]", + "source": 3, + "value": "14" + }, + { + "begin": 395, + "end": 414, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 395, + "end": 414, + "name": "tag", + "source": 3, + "value": "28" + }, + { "begin": 395, "end": 414, "name": "JUMPDEST", "source": 3 }, + { "begin": 390, "end": 414, "name": "SWAP3", "source": 3 }, + { "begin": 390, "end": 414, "name": "POP", "source": 3 }, + { "begin": 534, "end": 535, "name": "DUP2", "source": 3 }, + { + "begin": 514, + "end": 532, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 510, "end": 536, "name": "DIV", "source": 3 }, + { "begin": 507, "end": 508, "name": "DUP4", "source": 3 }, + { "begin": 504, "end": 537, "name": "GT", "source": 3 }, + { "begin": 499, "end": 500, "name": "DUP3", "source": 3 }, + { "begin": 492, "end": 501, "name": "ISZERO", "source": 3 }, + { "begin": 485, "end": 502, "name": "ISZERO", "source": 3 }, + { "begin": 481, "end": 538, "name": "AND", "source": 3 }, + { "begin": 478, "end": 561, "name": "ISZERO", "source": 3 }, + { + "begin": 478, + "end": 561, + "name": "PUSH [tag]", + "source": 3, + "value": "29" + }, + { "begin": 478, "end": 561, "name": "JUMPI", "source": 3 }, + { + "begin": 541, + "end": 559, + "name": "PUSH [tag]", + "source": 3, + "value": "30" + }, + { + "begin": 541, + "end": 559, + "name": "PUSH [tag]", + "source": 3, + "value": "15" + }, + { + "begin": 541, + "end": 559, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 541, + "end": 559, + "name": "tag", + "source": 3, + "value": "30" + }, + { "begin": 541, "end": 559, "name": "JUMPDEST", "source": 3 }, + { + "begin": 478, + "end": 561, + "name": "tag", + "source": 3, + "value": "29" + }, + { "begin": 478, "end": 561, "name": "JUMPDEST", "source": 3 }, + { "begin": 589, "end": 590, "name": "DUP3", "source": 3 }, + { "begin": 586, "end": 587, "name": "DUP3", "source": 3 }, + { "begin": 582, "end": 591, "name": "MUL", "source": 3 }, + { "begin": 571, "end": 591, "name": "SWAP1", "source": 3 }, + { "begin": 571, "end": 591, "name": "POP", "source": 3 }, + { "begin": 300, "end": 597, "name": "SWAP3", "source": 3 }, + { "begin": 300, "end": 597, "name": "SWAP2", "source": 3 }, + { "begin": 300, "end": 597, "name": "POP", "source": 3 }, + { "begin": 300, "end": 597, "name": "POP", "source": 3 }, + { + "begin": 300, + "end": 597, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 684, + "end": 801, + "name": "tag", + "source": 3, + "value": "17" + }, + { "begin": 684, "end": 801, "name": "JUMPDEST", "source": 3 }, + { + "begin": 793, + "end": 794, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 790, "end": 791, "name": "DUP1", "source": 3 }, + { "begin": 783, "end": 795, "name": "REVERT", "source": 3 }, + { + "begin": 930, + "end": 1049, + "name": "tag", + "source": 3, + "value": "19" + }, + { "begin": 930, "end": 1049, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1023, + "end": 1024, + "name": "PUSH", + "source": 3, + "value": "2" + }, + { "begin": 1016, "end": 1021, "name": "DUP2", "source": 3 }, + { "begin": 1013, "end": 1025, "name": "LT", "source": 3 }, + { + "begin": 1003, + "end": 1043, + "name": "PUSH [tag]", + "source": 3, + "value": "35" + }, + { "begin": 1003, "end": 1043, "name": "JUMPI", "source": 3 }, + { + "begin": 1039, + "end": 1040, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1036, "end": 1037, "name": "DUP1", "source": 3 }, + { "begin": 1029, "end": 1041, "name": "REVERT", "source": 3 }, + { + "begin": 1003, + "end": 1043, + "name": "tag", + "source": 3, + "value": "35" + }, + { "begin": 1003, "end": 1043, "name": "JUMPDEST", "source": 3 }, + { "begin": 930, "end": 1049, "name": "POP", "source": 3 }, + { + "begin": 930, + "end": 1049, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1055, + "end": 1238, + "name": "tag", + "source": 3, + "value": "20" + }, + { "begin": 1055, "end": 1238, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1132, + "end": 1137, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1163, "end": 1169, "name": "DUP2", "source": 3 }, + { "begin": 1157, "end": 1170, "name": "MLOAD", "source": 3 }, + { "begin": 1148, "end": 1170, "name": "SWAP1", "source": 3 }, + { "begin": 1148, "end": 1170, "name": "POP", "source": 3 }, + { + "begin": 1179, + "end": 1232, + "name": "PUSH [tag]", + "source": 3, + "value": "37" + }, + { "begin": 1226, "end": 1231, "name": "DUP2", "source": 3 }, + { + "begin": 1179, + "end": 1232, + "name": "PUSH [tag]", + "source": 3, + "value": "19" + }, + { + "begin": 1179, + "end": 1232, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 1179, + "end": 1232, + "name": "tag", + "source": 3, + "value": "37" + }, + { "begin": 1179, "end": 1232, "name": "JUMPDEST", "source": 3 }, + { "begin": 1055, "end": 1238, "name": "SWAP3", "source": 3 }, + { "begin": 1055, "end": 1238, "name": "SWAP2", "source": 3 }, + { "begin": 1055, "end": 1238, "name": "POP", "source": 3 }, + { "begin": 1055, "end": 1238, "name": "POP", "source": 3 }, + { + "begin": 1055, + "end": 1238, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1244, + "end": 1635, + "name": "tag", + "source": 3, + "value": "4" + }, + { "begin": 1244, "end": 1635, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1334, + "end": 1340, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 1383, + "end": 1385, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 1371, "end": 1380, "name": "DUP3", "source": 3 }, + { "begin": 1362, "end": 1369, "name": "DUP5", "source": 3 }, + { "begin": 1358, "end": 1381, "name": "SUB", "source": 3 }, + { "begin": 1354, "end": 1386, "name": "SLT", "source": 3 }, + { "begin": 1351, "end": 1470, "name": "ISZERO", "source": 3 }, + { + "begin": 1351, + "end": 1470, + "name": "PUSH [tag]", + "source": 3, + "value": "39" + }, + { "begin": 1351, "end": 1470, "name": "JUMPI", "source": 3 }, + { + "begin": 1389, + "end": 1468, + "name": "PUSH [tag]", + "source": 3, + "value": "40" + }, + { + "begin": 1389, + "end": 1468, + "name": "PUSH [tag]", + "source": 3, + "value": "17" + }, + { + "begin": 1389, + "end": 1468, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 1389, + "end": 1468, + "name": "tag", + "source": 3, + "value": "40" + }, + { "begin": 1389, "end": 1468, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1351, + "end": 1470, + "name": "tag", + "source": 3, + "value": "39" + }, + { "begin": 1351, "end": 1470, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1509, + "end": 1510, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 1534, + "end": 1618, + "name": "PUSH [tag]", + "source": 3, + "value": "41" + }, + { "begin": 1610, "end": 1617, "name": "DUP5", "source": 3 }, + { "begin": 1601, "end": 1607, "name": "DUP3", "source": 3 }, + { "begin": 1590, "end": 1599, "name": "DUP6", "source": 3 }, + { "begin": 1586, "end": 1608, "name": "ADD", "source": 3 }, + { + "begin": 1534, + "end": 1618, + "name": "PUSH [tag]", + "source": 3, + "value": "20" + }, + { + "begin": 1534, + "end": 1618, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 1534, + "end": 1618, + "name": "tag", + "source": 3, + "value": "41" + }, + { "begin": 1534, "end": 1618, "name": "JUMPDEST", "source": 3 }, + { "begin": 1524, "end": 1618, "name": "SWAP2", "source": 3 }, + { "begin": 1524, "end": 1618, "name": "POP", "source": 3 }, + { "begin": 1480, "end": 1628, "name": "POP", "source": 3 }, + { "begin": 1244, "end": 1635, "name": "SWAP3", "source": 3 }, + { "begin": 1244, "end": 1635, "name": "SWAP2", "source": 3 }, + { "begin": 1244, "end": 1635, "name": "POP", "source": 3 }, + { "begin": 1244, "end": 1635, "name": "POP", "source": 3 }, + { + "begin": 1244, + "end": 1635, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1641, + "end": 1718, + "name": "tag", + "source": 3, + "value": "21" + }, + { "begin": 1641, "end": 1718, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1678, + "end": 1685, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1707, "end": 1712, "name": "DUP2", "source": 3 }, + { "begin": 1696, "end": 1712, "name": "SWAP1", "source": 3 }, + { "begin": 1696, "end": 1712, "name": "POP", "source": 3 }, + { "begin": 1641, "end": 1718, "name": "SWAP2", "source": 3 }, + { "begin": 1641, "end": 1718, "name": "SWAP1", "source": 3 }, + { "begin": 1641, "end": 1718, "name": "POP", "source": 3 }, + { + "begin": 1641, + "end": 1718, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1724, + "end": 1842, + "name": "tag", + "source": 3, + "value": "22" + }, + { "begin": 1724, "end": 1842, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1811, + "end": 1835, + "name": "PUSH [tag]", + "source": 3, + "value": "44" + }, + { "begin": 1829, "end": 1834, "name": "DUP2", "source": 3 }, + { + "begin": 1811, + "end": 1835, + "name": "PUSH [tag]", + "source": 3, + "value": "21" + }, + { + "begin": 1811, + "end": 1835, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 1811, + "end": 1835, + "name": "tag", + "source": 3, + "value": "44" + }, + { "begin": 1811, "end": 1835, "name": "JUMPDEST", "source": 3 }, + { "begin": 1806, "end": 1809, "name": "DUP3", "source": 3 }, + { "begin": 1799, "end": 1836, "name": "MSTORE", "source": 3 }, + { "begin": 1724, "end": 1842, "name": "POP", "source": 3 }, + { "begin": 1724, "end": 1842, "name": "POP", "source": 3 }, + { + "begin": 1724, + "end": 1842, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1848, + "end": 2180, + "name": "tag", + "source": 3, + "value": "9" + }, + { "begin": 1848, "end": 2180, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1969, + "end": 1973, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 2007, + "end": 2009, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 1996, "end": 2005, "name": "DUP3", "source": 3 }, + { "begin": 1992, "end": 2010, "name": "ADD", "source": 3 }, + { "begin": 1984, "end": 2010, "name": "SWAP1", "source": 3 }, + { "begin": 1984, "end": 2010, "name": "POP", "source": 3 }, + { + "begin": 2020, + "end": 2091, + "name": "PUSH [tag]", + "source": 3, + "value": "46" + }, + { + "begin": 2088, + "end": 2089, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 2077, "end": 2086, "name": "DUP4", "source": 3 }, + { "begin": 2073, "end": 2090, "name": "ADD", "source": 3 }, + { "begin": 2064, "end": 2070, "name": "DUP6", "source": 3 }, + { + "begin": 2020, + "end": 2091, + "name": "PUSH [tag]", + "source": 3, + "value": "22" + }, + { + "begin": 2020, + "end": 2091, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2020, + "end": 2091, + "name": "tag", + "source": 3, + "value": "46" + }, + { "begin": 2020, "end": 2091, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2101, + "end": 2173, + "name": "PUSH [tag]", + "source": 3, + "value": "47" + }, + { + "begin": 2169, + "end": 2171, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 2158, "end": 2167, "name": "DUP4", "source": 3 }, + { "begin": 2154, "end": 2172, "name": "ADD", "source": 3 }, + { "begin": 2145, "end": 2151, "name": "DUP5", "source": 3 }, + { + "begin": 2101, + "end": 2173, + "name": "PUSH [tag]", + "source": 3, + "value": "22" + }, + { + "begin": 2101, + "end": 2173, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2101, + "end": 2173, + "name": "tag", + "source": 3, + "value": "47" + }, + { "begin": 2101, "end": 2173, "name": "JUMPDEST", "source": 3 }, + { "begin": 1848, "end": 2180, "name": "SWAP4", "source": 3 }, + { "begin": 1848, "end": 2180, "name": "SWAP3", "source": 3 }, + { "begin": 1848, "end": 2180, "name": "POP", "source": 3 }, + { "begin": 1848, "end": 2180, "name": "POP", "source": 3 }, + { "begin": 1848, "end": 2180, "name": "POP", "source": 3 }, + { + "begin": 1848, + "end": 2180, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 2186, + "end": 2366, + "name": "tag", + "source": 3, + "value": "12" + }, + { "begin": 2186, "end": 2366, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2234, + "end": 2311, + "name": "PUSH", + "source": 3, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 2231, + "end": 2232, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 2224, "end": 2312, "name": "MSTORE", "source": 3 }, + { + "begin": 2331, + "end": 2335, + "name": "PUSH", + "source": 3, + "value": "21" + }, + { + "begin": 2328, + "end": 2329, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 2321, "end": 2336, "name": "MSTORE", "source": 3 }, + { + "begin": 2355, + "end": 2359, + "name": "PUSH", + "source": 3, + "value": "24" + }, + { + "begin": 2352, + "end": 2353, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 2345, "end": 2360, "name": "REVERT", "source": 3 }, + { + "begin": 270, + "end": 11638, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 270, "end": 11638, "name": "JUMPDEST", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 270, "end": 11638, "name": "CODECOPY", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 270, "end": 11638, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220dd5f4648a7c60017c9cd5d09ffc8e6f541c8834c9dc3bb425380ca5fc193f38b64736f6c634300080b0033", + ".code": [ + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 270, "end": 11638, "name": "MSTORE", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { + "begin": 270, + "end": 11638, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 270, "end": 11638, "name": "LT", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 270, + "end": 11638, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 270, "end": 11638, "name": "SHR", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "3A984BC5" + }, + { "begin": 270, "end": 11638, "name": "GT", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "76C7A3C7" + }, + { "begin": 270, "end": 11638, "name": "GT", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "76C7A3C7" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "7D5A9C5A" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "CAD0338C" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "D11711A2" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "F3BAF070" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 270, "end": 11638, "name": "JUMP", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 270, "end": 11638, "name": "JUMPDEST", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "3A984BC5" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "49943A13" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "51A8E298" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "6B31EE01" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 270, "end": 11638, "name": "JUMP", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "tag", + "source": 0, + "value": "20" + }, + { "begin": 270, "end": 11638, "name": "JUMPDEST", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "1FE543E3" + }, + { "begin": 270, "end": 11638, "name": "GT", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "1FE543E3" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "200D2ED2" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "2B855D19" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "35C1D349" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "36013189" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 270, "end": 11638, "name": "JUMP", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 270, "end": 11638, "name": "JUMPDEST", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "6D6CAE" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "81275D4" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "160344E2" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "17A47282" + }, + { "begin": 270, "end": 11638, "name": "EQ", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 270, "end": 11638, "name": "JUMPI", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 270, "end": 11638, "name": "JUMPDEST", "source": 0 }, + { + "begin": 270, + "end": 11638, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 270, "end": 11638, "name": "DUP1", "source": 0 }, + { "begin": 270, "end": 11638, "name": "REVERT", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 5138, "end": 5162, "name": "JUMPDEST", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "CALLVALUE", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "DUP1", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "ISZERO", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { "begin": 5138, "end": 5162, "name": "JUMPI", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5138, "end": 5162, "name": "DUP1", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "REVERT", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "tag", + "source": 0, + "value": "23" + }, + { "begin": 5138, "end": 5162, "name": "JUMPDEST", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "POP", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 5138, + "end": 5162, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5138, + "end": 5162, + "name": "tag", + "source": 0, + "value": "24" + }, + { "begin": 5138, "end": 5162, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5138, "end": 5162, "name": "MLOAD", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH [tag]", + "source": 0, + "value": "26" + }, + { "begin": 5138, "end": 5162, "name": "SWAP2", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "SWAP1", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 5138, + "end": 5162, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5138, + "end": 5162, + "name": "tag", + "source": 0, + "value": "26" + }, + { "begin": 5138, "end": 5162, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5138, "end": 5162, "name": "MLOAD", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "DUP1", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "SWAP2", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "SUB", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "SWAP1", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "RETURN", "source": 0 }, + { + "begin": 10043, + "end": 10158, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 10043, "end": 10158, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10043, + "end": 10158, + "name": "PUSH [tag]", + "source": 0, + "value": "28" + }, + { + "begin": 10043, + "end": 10158, + "name": "PUSH [tag]", + "source": 0, + "value": "29" + }, + { + "begin": 10043, + "end": 10158, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 10043, + "end": 10158, + "name": "tag", + "source": 0, + "value": "28" + }, + { "begin": 10043, "end": 10158, "name": "JUMPDEST", "source": 0 }, + { "begin": 10043, "end": 10158, "name": "STOP", "source": 0 }, + { + "begin": 7334, + "end": 9853, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 7334, "end": 9853, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7334, + "end": 9853, + "name": "PUSH [tag]", + "source": 0, + "value": "30" + }, + { + "begin": 7334, + "end": 9853, + "name": "PUSH [tag]", + "source": 0, + "value": "31" + }, + { + "begin": 7334, + "end": 9853, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7334, + "end": 9853, + "name": "tag", + "source": 0, + "value": "30" + }, + { "begin": 7334, "end": 9853, "name": "JUMPDEST", "source": 0 }, + { "begin": 7334, "end": 9853, "name": "STOP", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 4875, "end": 4928, "name": "JUMPDEST", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "CALLVALUE", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "DUP1", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "ISZERO", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH [tag]", + "source": 0, + "value": "32" + }, + { "begin": 4875, "end": 4928, "name": "JUMPI", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 4875, "end": 4928, "name": "DUP1", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "REVERT", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "tag", + "source": 0, + "value": "32" + }, + { "begin": 4875, "end": 4928, "name": "JUMPDEST", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "POP", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH [tag]", + "source": 0, + "value": "33" + }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH [tag]", + "source": 0, + "value": "34" + }, + { + "begin": 4875, + "end": 4928, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4875, + "end": 4928, + "name": "tag", + "source": 0, + "value": "33" + }, + { "begin": 4875, "end": 4928, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4875, "end": 4928, "name": "MLOAD", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH [tag]", + "source": 0, + "value": "35" + }, + { "begin": 4875, "end": 4928, "name": "SWAP2", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "SWAP1", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH [tag]", + "source": 0, + "value": "36" + }, + { + "begin": 4875, + "end": 4928, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4875, + "end": 4928, + "name": "tag", + "source": 0, + "value": "35" + }, + { "begin": 4875, "end": 4928, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4875, "end": 4928, "name": "MLOAD", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "DUP1", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "SWAP2", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "SUB", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "SWAP1", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "RETURN", "source": 0 }, + { + "begin": 5871, + "end": 6280, + "name": "tag", + "source": 2, + "value": "6" + }, + { "begin": 5871, "end": 6280, "name": "JUMPDEST", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "CALLVALUE", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "DUP1", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "ISZERO", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "PUSH [tag]", + "source": 2, + "value": "37" + }, + { "begin": 5871, "end": 6280, "name": "JUMPI", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 5871, "end": 6280, "name": "DUP1", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "REVERT", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "tag", + "source": 2, + "value": "37" + }, + { "begin": 5871, "end": 6280, "name": "JUMPDEST", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "POP", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "PUSH [tag]", + "source": 2, + "value": "38" + }, + { + "begin": 5871, + "end": 6280, + "name": "PUSH", + "source": 2, + "value": "4" + }, + { "begin": 5871, "end": 6280, "name": "DUP1", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "CALLDATASIZE", + "source": 2 + }, + { "begin": 5871, "end": 6280, "name": "SUB", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "DUP2", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "ADD", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "SWAP1", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "PUSH [tag]", + "source": 2, + "value": "39" + }, + { "begin": 5871, "end": 6280, "name": "SWAP2", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "SWAP1", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "PUSH [tag]", + "source": 2, + "value": "40" + }, + { + "begin": 5871, + "end": 6280, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 5871, + "end": 6280, + "name": "tag", + "source": 2, + "value": "39" + }, + { "begin": 5871, "end": 6280, "name": "JUMPDEST", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "PUSH [tag]", + "source": 2, + "value": "41" + }, + { + "begin": 5871, + "end": 6280, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 5871, + "end": 6280, + "name": "tag", + "source": 2, + "value": "38" + }, + { "begin": 5871, "end": 6280, "name": "JUMPDEST", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "STOP", "source": 2 }, + { + "begin": 6209, + "end": 6764, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 6209, "end": 6764, "name": "JUMPDEST", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "CALLVALUE", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "DUP1", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "ISZERO", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH [tag]", + "source": 0, + "value": "42" + }, + { "begin": 6209, "end": 6764, "name": "JUMPI", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6209, "end": 6764, "name": "DUP1", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "REVERT", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "tag", + "source": 0, + "value": "42" + }, + { "begin": 6209, "end": 6764, "name": "JUMPDEST", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "POP", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH [tag]", + "source": 0, + "value": "43" + }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH [tag]", + "source": 0, + "value": "44" + }, + { + "begin": 6209, + "end": 6764, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6209, + "end": 6764, + "name": "tag", + "source": 0, + "value": "43" + }, + { "begin": 6209, "end": 6764, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6209, "end": 6764, "name": "MLOAD", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH [tag]", + "source": 0, + "value": "45" + }, + { "begin": 6209, "end": 6764, "name": "SWAP2", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "SWAP1", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH [tag]", + "source": 0, + "value": "46" + }, + { + "begin": 6209, + "end": 6764, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6209, + "end": 6764, + "name": "tag", + "source": 0, + "value": "45" + }, + { "begin": 6209, "end": 6764, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6209, "end": 6764, "name": "MLOAD", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "DUP1", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "SWAP2", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "SUB", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "SWAP1", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "RETURN", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 5059, "end": 5092, "name": "JUMPDEST", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "CALLVALUE", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "DUP1", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "ISZERO", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH [tag]", + "source": 0, + "value": "47" + }, + { "begin": 5059, "end": 5092, "name": "JUMPI", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5059, "end": 5092, "name": "DUP1", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "REVERT", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "tag", + "source": 0, + "value": "47" + }, + { "begin": 5059, "end": 5092, "name": "JUMPDEST", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "POP", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH [tag]", + "source": 0, + "value": "48" + }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH [tag]", + "source": 0, + "value": "49" + }, + { + "begin": 5059, + "end": 5092, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5059, + "end": 5092, + "name": "tag", + "source": 0, + "value": "48" + }, + { "begin": 5059, "end": 5092, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5059, "end": 5092, "name": "MLOAD", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { "begin": 5059, "end": 5092, "name": "SWAP2", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "SWAP1", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 5059, + "end": 5092, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5059, + "end": 5092, + "name": "tag", + "source": 0, + "value": "50" + }, + { "begin": 5059, "end": 5092, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5059, "end": 5092, "name": "MLOAD", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "DUP1", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "SWAP2", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "SUB", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "SWAP1", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "RETURN", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 5218, "end": 5247, "name": "JUMPDEST", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "CALLVALUE", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "DUP1", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "ISZERO", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "51" + }, + { "begin": 5218, "end": 5247, "name": "JUMPI", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5218, "end": 5247, "name": "DUP1", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "REVERT", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "tag", + "source": 0, + "value": "51" + }, + { "begin": 5218, "end": 5247, "name": "JUMPDEST", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "POP", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "52" + }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 5218, "end": 5247, "name": "DUP1", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 5218, "end": 5247, "name": "SUB", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "DUP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "ADD", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP1", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { "begin": 5218, "end": 5247, "name": "SWAP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP1", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "54" + }, + { + "begin": 5218, + "end": 5247, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5218, + "end": 5247, + "name": "tag", + "source": 0, + "value": "53" + }, + { "begin": 5218, "end": 5247, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "55" + }, + { + "begin": 5218, + "end": 5247, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5218, + "end": 5247, + "name": "tag", + "source": 0, + "value": "52" + }, + { "begin": 5218, "end": 5247, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5218, "end": 5247, "name": "MLOAD", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "56" + }, + { "begin": 5218, "end": 5247, "name": "SWAP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP1", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "57" + }, + { + "begin": 5218, + "end": 5247, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5218, + "end": 5247, + "name": "tag", + "source": 0, + "value": "56" + }, + { "begin": 5218, "end": 5247, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5218, "end": 5247, "name": "MLOAD", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "DUP1", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SUB", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP1", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "RETURN", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 381, "end": 474, "name": "JUMPDEST", "source": 0 }, + { "begin": 381, "end": 474, "name": "CALLVALUE", "source": 0 }, + { "begin": 381, "end": 474, "name": "DUP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "ISZERO", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH [tag]", + "source": 0, + "value": "58" + }, + { "begin": 381, "end": 474, "name": "JUMPI", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 381, "end": 474, "name": "DUP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "REVERT", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "tag", + "source": 0, + "value": "58" + }, + { "begin": 381, "end": 474, "name": "JUMPDEST", "source": 0 }, + { "begin": 381, "end": 474, "name": "POP", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH [tag]", + "source": 0, + "value": "59" + }, + { + "begin": 381, + "end": 474, + "name": "PUSH [tag]", + "source": 0, + "value": "60" + }, + { + "begin": 381, + "end": 474, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 381, + "end": 474, + "name": "tag", + "source": 0, + "value": "59" + }, + { "begin": 381, "end": 474, "name": "JUMPDEST", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 381, "end": 474, "name": "MLOAD", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH [tag]", + "source": 0, + "value": "61" + }, + { "begin": 381, "end": 474, "name": "SWAP2", "source": 0 }, + { "begin": 381, "end": 474, "name": "SWAP1", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH [tag]", + "source": 0, + "value": "62" + }, + { + "begin": 381, + "end": 474, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 381, + "end": 474, + "name": "tag", + "source": 0, + "value": "61" + }, + { "begin": 381, "end": 474, "name": "JUMPDEST", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 381, "end": 474, "name": "MLOAD", "source": 0 }, + { "begin": 381, "end": 474, "name": "DUP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "SWAP2", "source": 0 }, + { "begin": 381, "end": 474, "name": "SUB", "source": 0 }, + { "begin": 381, "end": 474, "name": "SWAP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "RETURN", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 4227, "end": 4262, "name": "JUMPDEST", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "CALLVALUE", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "DUP1", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "ISZERO", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH [tag]", + "source": 0, + "value": "63" + }, + { "begin": 4227, "end": 4262, "name": "JUMPI", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 4227, "end": 4262, "name": "DUP1", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "REVERT", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "tag", + "source": 0, + "value": "63" + }, + { "begin": 4227, "end": 4262, "name": "JUMPDEST", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "POP", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH [tag]", + "source": 0, + "value": "64" + }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH [tag]", + "source": 0, + "value": "65" + }, + { + "begin": 4227, + "end": 4262, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4227, + "end": 4262, + "name": "tag", + "source": 0, + "value": "64" + }, + { "begin": 4227, "end": 4262, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4227, "end": 4262, "name": "MLOAD", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH [tag]", + "source": 0, + "value": "66" + }, + { "begin": 4227, "end": 4262, "name": "SWAP2", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "SWAP1", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 4227, + "end": 4262, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4227, + "end": 4262, + "name": "tag", + "source": 0, + "value": "66" + }, + { "begin": 4227, "end": 4262, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4227, "end": 4262, "name": "MLOAD", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "DUP1", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "SWAP2", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "SUB", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "SWAP1", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "RETURN", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 4744, "end": 4786, "name": "JUMPDEST", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "CALLVALUE", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "DUP1", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "ISZERO", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH [tag]", + "source": 0, + "value": "67" + }, + { "begin": 4744, "end": 4786, "name": "JUMPI", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 4744, "end": 4786, "name": "DUP1", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "REVERT", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "tag", + "source": 0, + "value": "67" + }, + { "begin": 4744, "end": 4786, "name": "JUMPDEST", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "POP", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH [tag]", + "source": 0, + "value": "68" + }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH [tag]", + "source": 0, + "value": "69" + }, + { + "begin": 4744, + "end": 4786, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4744, + "end": 4786, + "name": "tag", + "source": 0, + "value": "68" + }, + { "begin": 4744, "end": 4786, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4744, "end": 4786, "name": "MLOAD", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH [tag]", + "source": 0, + "value": "70" + }, + { "begin": 4744, "end": 4786, "name": "SWAP2", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "SWAP1", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 4744, + "end": 4786, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4744, + "end": 4786, + "name": "tag", + "source": 0, + "value": "70" + }, + { "begin": 4744, "end": 4786, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4744, "end": 4786, "name": "MLOAD", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "DUP1", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "SWAP2", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "SUB", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "SWAP1", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "RETURN", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 3025, "end": 3069, "name": "JUMPDEST", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "CALLVALUE", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "DUP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "ISZERO", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH [tag]", + "source": 0, + "value": "71" + }, + { "begin": 3025, "end": 3069, "name": "JUMPI", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 3025, "end": 3069, "name": "DUP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "REVERT", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "tag", + "source": 0, + "value": "71" + }, + { "begin": 3025, "end": 3069, "name": "JUMPDEST", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "POP", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH [tag]", + "source": 0, + "value": "72" + }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH [tag]", + "source": 0, + "value": "73" + }, + { + "begin": 3025, + "end": 3069, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3025, + "end": 3069, + "name": "tag", + "source": 0, + "value": "72" + }, + { "begin": 3025, "end": 3069, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 3025, "end": 3069, "name": "MLOAD", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH [tag]", + "source": 0, + "value": "74" + }, + { "begin": 3025, "end": 3069, "name": "SWAP2", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SWAP1", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH [tag]", + "source": 0, + "value": "75" + }, + { + "begin": 3025, + "end": 3069, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3025, + "end": 3069, + "name": "tag", + "source": 0, + "value": "74" + }, + { "begin": 3025, "end": 3069, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 3025, "end": 3069, "name": "MLOAD", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "DUP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SWAP2", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SUB", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SWAP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "RETURN", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 5322, "end": 5344, "name": "JUMPDEST", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "CALLVALUE", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "DUP1", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "ISZERO", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH [tag]", + "source": 0, + "value": "76" + }, + { "begin": 5322, "end": 5344, "name": "JUMPI", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5322, "end": 5344, "name": "DUP1", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "REVERT", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "tag", + "source": 0, + "value": "76" + }, + { "begin": 5322, "end": 5344, "name": "JUMPDEST", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "POP", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH [tag]", + "source": 0, + "value": "77" + }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH [tag]", + "source": 0, + "value": "78" + }, + { + "begin": 5322, + "end": 5344, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5322, + "end": 5344, + "name": "tag", + "source": 0, + "value": "77" + }, + { "begin": 5322, "end": 5344, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5322, "end": 5344, "name": "MLOAD", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH [tag]", + "source": 0, + "value": "79" + }, + { "begin": 5322, "end": 5344, "name": "SWAP2", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "SWAP1", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 5322, + "end": 5344, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 5322, + "end": 5344, + "name": "tag", + "source": 0, + "value": "79" + }, + { "begin": 5322, "end": 5344, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 5322, "end": 5344, "name": "MLOAD", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "DUP1", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "SWAP2", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "SUB", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "SWAP1", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "RETURN", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 3437, "end": 3492, "name": "JUMPDEST", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "CALLVALUE", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "DUP1", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "ISZERO", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH [tag]", + "source": 0, + "value": "80" + }, + { "begin": 3437, "end": 3492, "name": "JUMPI", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 3437, "end": 3492, "name": "DUP1", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "REVERT", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "tag", + "source": 0, + "value": "80" + }, + { "begin": 3437, "end": 3492, "name": "JUMPDEST", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "POP", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH [tag]", + "source": 0, + "value": "81" + }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH [tag]", + "source": 0, + "value": "82" + }, + { + "begin": 3437, + "end": 3492, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3437, + "end": 3492, + "name": "tag", + "source": 0, + "value": "81" + }, + { "begin": 3437, "end": 3492, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 3437, "end": 3492, "name": "MLOAD", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH [tag]", + "source": 0, + "value": "83" + }, + { "begin": 3437, "end": 3492, "name": "SWAP2", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "SWAP1", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 3437, + "end": 3492, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3437, + "end": 3492, + "name": "tag", + "source": 0, + "value": "83" + }, + { "begin": 3437, "end": 3492, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 3437, "end": 3492, "name": "MLOAD", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "DUP1", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "SWAP2", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "SUB", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "SWAP1", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "RETURN", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 4095, "end": 4148, "name": "JUMPDEST", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "CALLVALUE", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "DUP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "ISZERO", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH [tag]", + "source": 0, + "value": "84" + }, + { "begin": 4095, "end": 4148, "name": "JUMPI", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 4095, "end": 4148, "name": "DUP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "REVERT", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "tag", + "source": 0, + "value": "84" + }, + { "begin": 4095, "end": 4148, "name": "JUMPDEST", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "POP", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH [tag]", + "source": 0, + "value": "85" + }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH [tag]", + "source": 0, + "value": "86" + }, + { + "begin": 4095, + "end": 4148, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4095, + "end": 4148, + "name": "tag", + "source": 0, + "value": "85" + }, + { "begin": 4095, "end": 4148, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4095, "end": 4148, "name": "MLOAD", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH [tag]", + "source": 0, + "value": "87" + }, + { "begin": 4095, "end": 4148, "name": "SWAP2", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SWAP1", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH [tag]", + "source": 0, + "value": "88" + }, + { + "begin": 4095, + "end": 4148, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4095, + "end": 4148, + "name": "tag", + "source": 0, + "value": "87" + }, + { "begin": 4095, "end": 4148, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4095, "end": 4148, "name": "MLOAD", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "DUP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SWAP2", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SUB", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SWAP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "RETURN", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "tag", + "source": 0, + "value": "17" + }, + { "begin": 3658, "end": 3686, "name": "JUMPDEST", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "CALLVALUE", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "DUP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "ISZERO", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH [tag]", + "source": 0, + "value": "89" + }, + { "begin": 3658, "end": 3686, "name": "JUMPI", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 3658, "end": 3686, "name": "DUP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "REVERT", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "tag", + "source": 0, + "value": "89" + }, + { "begin": 3658, "end": 3686, "name": "JUMPDEST", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "POP", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH [tag]", + "source": 0, + "value": "90" + }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH [tag]", + "source": 0, + "value": "91" + }, + { + "begin": 3658, + "end": 3686, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3658, + "end": 3686, + "name": "tag", + "source": 0, + "value": "90" + }, + { "begin": 3658, "end": 3686, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 3658, "end": 3686, "name": "MLOAD", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH [tag]", + "source": 0, + "value": "92" + }, + { "begin": 3658, "end": 3686, "name": "SWAP2", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SWAP1", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH [tag]", + "source": 0, + "value": "93" + }, + { + "begin": 3658, + "end": 3686, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 3658, + "end": 3686, + "name": "tag", + "source": 0, + "value": "92" + }, + { "begin": 3658, "end": 3686, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 3658, "end": 3686, "name": "MLOAD", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "DUP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SWAP2", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SUB", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SWAP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "RETURN", "source": 0 }, + { + "begin": 6770, + "end": 7328, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 6770, "end": 7328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6770, + "end": 7328, + "name": "PUSH [tag]", + "source": 0, + "value": "94" + }, + { + "begin": 6770, + "end": 7328, + "name": "PUSH [tag]", + "source": 0, + "value": "95" + }, + { + "begin": 6770, + "end": 7328, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6770, + "end": 7328, + "name": "tag", + "source": 0, + "value": "94" + }, + { "begin": 6770, "end": 7328, "name": "JUMPDEST", "source": 0 }, + { "begin": 6770, "end": 7328, "name": "STOP", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "tag", + "source": 0, + "value": "19" + }, + { "begin": 4614, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "CALLVALUE", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "DUP1", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "ISZERO", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH [tag]", + "source": 0, + "value": "96" + }, + { "begin": 4614, "end": 4650, "name": "JUMPI", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 4614, "end": 4650, "name": "DUP1", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "REVERT", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "tag", + "source": 0, + "value": "96" + }, + { "begin": 4614, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "POP", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH [tag]", + "source": 0, + "value": "97" + }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH [tag]", + "source": 0, + "value": "98" + }, + { + "begin": 4614, + "end": 4650, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4614, + "end": 4650, + "name": "tag", + "source": 0, + "value": "97" + }, + { "begin": 4614, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4614, "end": 4650, "name": "MLOAD", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH [tag]", + "source": 0, + "value": "99" + }, + { "begin": 4614, "end": 4650, "name": "SWAP2", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "SWAP1", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 4614, + "end": 4650, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 4614, + "end": 4650, + "name": "tag", + "source": 0, + "value": "99" + }, + { "begin": 4614, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 4614, "end": 4650, "name": "MLOAD", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "DUP1", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "SWAP2", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "SUB", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "SWAP1", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "RETURN", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "tag", + "source": 0, + "value": "25" + }, + { "begin": 5138, "end": 5162, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 5138, "end": 5162, "name": "SLOAD", "source": 0 }, + { "begin": 5138, "end": 5162, "name": "DUP2", "source": 0 }, + { + "begin": 5138, + "end": 5162, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 10043, + "end": 10158, + "name": "tag", + "source": 0, + "value": "29" + }, + { "begin": 10043, "end": 10158, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10100, + "end": 10110, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10100, "end": 10110, "name": "DUP1", "source": 0 }, + { "begin": 10100, "end": 10110, "name": "SLOAD", "source": 0 }, + { "begin": 10100, "end": 10110, "name": "SWAP1", "source": 0 }, + { + "begin": 10100, + "end": 10110, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 10100, "end": 10110, "name": "EXP", "source": 0 }, + { "begin": 10100, "end": 10110, "name": "SWAP1", "source": 0 }, + { "begin": 10100, "end": 10110, "name": "DIV", "source": 0 }, + { + "begin": 10100, + "end": 10110, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 10100, "end": 10110, "name": "AND", "source": 0 }, + { + "begin": 10100, + "end": 10129, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 10100, "end": 10129, "name": "AND", "source": 0 }, + { + "begin": 10100, + "end": 10129, + "name": "PUSH", + "source": 0, + "value": "D0408A7F" + }, + { + "begin": 10130, + "end": 10139, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 10130, "end": 10139, "name": "SLOAD", "source": 0 }, + { + "begin": 10141, + "end": 10150, + "name": "CALLVALUE", + "source": 0 + }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 10100, "end": 10151, "name": "MLOAD", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP4", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 10100, "end": 10151, "name": "AND", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 10100, "end": 10151, "name": "SHL", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP2", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "MSTORE", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 10100, "end": 10151, "name": "ADD", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH [tag]", + "source": 0, + "value": "101" + }, + { "begin": 10100, "end": 10151, "name": "SWAP3", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "SWAP2", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "SWAP1", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { + "begin": 10100, + "end": 10151, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 10100, + "end": 10151, + "name": "tag", + "source": 0, + "value": "101" + }, + { "begin": 10100, "end": 10151, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 10100, "end": 10151, "name": "MLOAD", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP1", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP4", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "SUB", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP2", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10100, "end": 10151, "name": "DUP8", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP1", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "EXTCODESIZE", + "source": 0 + }, + { "begin": 10100, "end": 10151, "name": "ISZERO", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP1", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "ISZERO", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH [tag]", + "source": 0, + "value": "103" + }, + { "begin": 10100, "end": 10151, "name": "JUMPI", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10100, "end": 10151, "name": "DUP1", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "REVERT", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "tag", + "source": 0, + "value": "103" + }, + { "begin": 10100, "end": 10151, "name": "JUMPDEST", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "POP", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "GAS", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "CALL", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "ISZERO", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "DUP1", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "ISZERO", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH [tag]", + "source": 0, + "value": "105" + }, + { "begin": 10100, "end": 10151, "name": "JUMPI", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10100, "end": 10151, "name": "DUP1", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 10100, + "end": 10151, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 10100, + "end": 10151, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10100, "end": 10151, "name": "REVERT", "source": 0 }, + { + "begin": 10100, + "end": 10151, + "name": "tag", + "source": 0, + "value": "105" + }, + { "begin": 10100, "end": 10151, "name": "JUMPDEST", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "POP", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "POP", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "POP", "source": 0 }, + { "begin": 10100, "end": 10151, "name": "POP", "source": 0 }, + { + "begin": 10043, + "end": 10158, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7334, + "end": 9853, + "name": "tag", + "source": 0, + "value": "31" + }, + { "begin": 7334, "end": 9853, "name": "JUMPDEST", "source": 0 }, + { + "begin": 11612, + "end": 11617, + "name": "PUSH", + "source": 0, + "value": "B" + }, + { + "begin": 11612, + "end": 11617, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11612, "end": 11617, "name": "SWAP1", "source": 0 }, + { "begin": 11612, "end": 11617, "name": "SLOAD", "source": 0 }, + { "begin": 11612, "end": 11617, "name": "SWAP1", "source": 0 }, + { + "begin": 11612, + "end": 11617, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 11612, "end": 11617, "name": "EXP", "source": 0 }, + { "begin": 11612, "end": 11617, "name": "SWAP1", "source": 0 }, + { "begin": 11612, "end": 11617, "name": "DIV", "source": 0 }, + { + "begin": 11612, + "end": 11617, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 11612, "end": 11617, "name": "AND", "source": 0 }, + { + "begin": 11598, + "end": 11617, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 11598, "end": 11617, "name": "AND", "source": 0 }, + { "begin": 11598, "end": 11608, "name": "CALLER", "source": 0 }, + { + "begin": 11598, + "end": 11617, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 11598, "end": 11617, "name": "AND", "source": 0 }, + { "begin": 11598, "end": 11617, "name": "EQ", "source": 0 }, + { + "begin": 11590, + "end": 11618, + "name": "PUSH [tag]", + "source": 0, + "value": "107" + }, + { "begin": 11590, "end": 11618, "name": "JUMPI", "source": 0 }, + { + "begin": 11590, + "end": 11618, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11590, "end": 11618, "name": "DUP1", "source": 0 }, + { "begin": 11590, "end": 11618, "name": "REVERT", "source": 0 }, + { + "begin": 11590, + "end": 11618, + "name": "tag", + "source": 0, + "value": "107" + }, + { "begin": 11590, "end": 11618, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7533, + "end": 7570, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 7479, "end": 7570, "name": "DUP2", "source": 0 }, + { "begin": 7479, "end": 7570, "name": "GT", "source": 0 }, + { "begin": 7479, "end": 7570, "name": "ISZERO", "source": 0 }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH [tag]", + "source": 0, + "value": "109" + }, + { "begin": 7479, "end": 7570, "name": "JUMPI", "source": 0 }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH [tag]", + "source": 0, + "value": "110" + }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 7479, + "end": 7570, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7479, + "end": 7570, + "name": "tag", + "source": 0, + "value": "110" + }, + { "begin": 7479, "end": 7570, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7479, + "end": 7570, + "name": "tag", + "source": 0, + "value": "109" + }, + { "begin": 7479, "end": 7570, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7479, + "end": 7489, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7479, "end": 7489, "name": "DUP1", "source": 0 }, + { "begin": 7479, "end": 7489, "name": "SLOAD", "source": 0 }, + { "begin": 7479, "end": 7489, "name": "SWAP1", "source": 0 }, + { + "begin": 7479, + "end": 7489, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 7479, "end": 7489, "name": "EXP", "source": 0 }, + { "begin": 7479, "end": 7489, "name": "SWAP1", "source": 0 }, + { "begin": 7479, "end": 7489, "name": "DIV", "source": 0 }, + { + "begin": 7479, + "end": 7489, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 7479, "end": 7489, "name": "AND", "source": 0 }, + { + "begin": 7479, + "end": 7506, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 7479, "end": 7506, "name": "AND", "source": 0 }, + { + "begin": 7479, + "end": 7506, + "name": "PUSH", + "source": 0, + "value": "D8A4676F" + }, + { + "begin": 7507, + "end": 7516, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 7507, "end": 7516, "name": "SLOAD", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7479, "end": 7517, "name": "MLOAD", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP3", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 7479, "end": 7517, "name": "AND", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 7479, "end": 7517, "name": "SHL", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP2", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "MSTORE", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7479, "end": 7517, "name": "ADD", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH [tag]", + "source": 0, + "value": "112" + }, + { "begin": 7479, "end": 7517, "name": "SWAP2", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "SWAP1", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 7479, + "end": 7517, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7479, + "end": 7517, + "name": "tag", + "source": 0, + "value": "112" + }, + { "begin": 7479, "end": 7517, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7479, "end": 7517, "name": "MLOAD", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP1", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP4", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "SUB", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP2", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP7", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "GAS", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "STATICCALL", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "ISZERO", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP1", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "ISZERO", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH [tag]", + "source": 0, + "value": "114" + }, + { "begin": 7479, "end": 7517, "name": "JUMPI", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7479, "end": 7517, "name": "DUP1", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 7479, + "end": 7517, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7479, "end": 7517, "name": "REVERT", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "tag", + "source": 0, + "value": "114" + }, + { "begin": 7479, "end": 7517, "name": "JUMPDEST", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "POP", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "POP", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "POP", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "POP", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7479, "end": 7517, "name": "MLOAD", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 7479, "end": 7517, "name": "NOT", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 7479, "end": 7517, "name": "DUP3", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "ADD", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "AND", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP3", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "ADD", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP1", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7479, "end": 7517, "name": "MSTORE", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "POP", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "DUP2", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "ADD", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "SWAP1", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH [tag]", + "source": 0, + "value": "115" + }, + { "begin": 7479, "end": 7517, "name": "SWAP2", "source": 0 }, + { "begin": 7479, "end": 7517, "name": "SWAP1", "source": 0 }, + { + "begin": 7479, + "end": 7517, + "name": "PUSH [tag]", + "source": 0, + "value": "116" + }, + { + "begin": 7479, + "end": 7517, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7479, + "end": 7517, + "name": "tag", + "source": 0, + "value": "115" + }, + { "begin": 7479, "end": 7517, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 7479, "end": 7570, "name": "DUP2", "source": 0 }, + { "begin": 7479, "end": 7570, "name": "GT", "source": 0 }, + { "begin": 7479, "end": 7570, "name": "ISZERO", "source": 0 }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH [tag]", + "source": 0, + "value": "117" + }, + { "begin": 7479, "end": 7570, "name": "JUMPI", "source": 0 }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH [tag]", + "source": 0, + "value": "118" + }, + { + "begin": 7479, + "end": 7570, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 7479, + "end": 7570, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7479, + "end": 7570, + "name": "tag", + "source": 0, + "value": "118" + }, + { "begin": 7479, "end": 7570, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7479, + "end": 7570, + "name": "tag", + "source": 0, + "value": "117" + }, + { "begin": 7479, "end": 7570, "name": "JUMPDEST", "source": 0 }, + { "begin": 7479, "end": 7570, "name": "EQ", "source": 0 }, + { + "begin": 7462, + "end": 7633, + "name": "PUSH [tag]", + "source": 0, + "value": "119" + }, + { "begin": 7462, "end": 7633, "name": "JUMPI", "source": 0 }, + { + "begin": 7602, + "end": 7622, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7602, "end": 7622, "name": "MLOAD", "source": 0 }, + { + "begin": 7602, + "end": 7622, + "name": "PUSH", + "source": 0, + "value": "4EDBE0E300000000000000000000000000000000000000000000000000000000" + }, + { "begin": 7602, "end": 7622, "name": "DUP2", "source": 0 }, + { "begin": 7602, "end": 7622, "name": "MSTORE", "source": 0 }, + { + "begin": 7602, + "end": 7622, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7602, "end": 7622, "name": "ADD", "source": 0 }, + { + "begin": 7602, + "end": 7622, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7602, "end": 7622, "name": "MLOAD", "source": 0 }, + { "begin": 7602, "end": 7622, "name": "DUP1", "source": 0 }, + { "begin": 7602, "end": 7622, "name": "SWAP2", "source": 0 }, + { "begin": 7602, "end": 7622, "name": "SUB", "source": 0 }, + { "begin": 7602, "end": 7622, "name": "SWAP1", "source": 0 }, + { "begin": 7602, "end": 7622, "name": "REVERT", "source": 0 }, + { + "begin": 7462, + "end": 7633, + "name": "tag", + "source": 0, + "value": "119" + }, + { "begin": 7462, "end": 7633, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7669, + "end": 7685, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 7669, "end": 7685, "name": "SLOAD", "source": 0 }, + { + "begin": 7647, + "end": 7659, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 7647, "end": 7666, "name": "DUP1", "source": 0 }, + { "begin": 7647, "end": 7666, "name": "SLOAD", "source": 0 }, + { "begin": 7647, "end": 7666, "name": "SWAP1", "source": 0 }, + { "begin": 7647, "end": 7666, "name": "POP", "source": 0 }, + { "begin": 7647, "end": 7685, "name": "LT", "source": 0 }, + { "begin": 7643, "end": 7779, "name": "ISZERO", "source": 0 }, + { + "begin": 7643, + "end": 7779, + "name": "PUSH [tag]", + "source": 0, + "value": "120" + }, + { "begin": 7643, "end": 7779, "name": "JUMPI", "source": 0 }, + { + "begin": 7730, + "end": 7742, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 7730, "end": 7749, "name": "DUP1", "source": 0 }, + { "begin": 7730, "end": 7749, "name": "SLOAD", "source": 0 }, + { "begin": 7730, "end": 7749, "name": "SWAP1", "source": 0 }, + { "begin": 7730, "end": 7749, "name": "POP", "source": 0 }, + { + "begin": 7751, + "end": 7767, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 7751, "end": 7767, "name": "SLOAD", "source": 0 }, + { + "begin": 7708, + "end": 7768, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7708, "end": 7768, "name": "MLOAD", "source": 0 }, + { + "begin": 7708, + "end": 7768, + "name": "PUSH", + "source": 0, + "value": "5FDD6F4900000000000000000000000000000000000000000000000000000000" + }, + { "begin": 7708, "end": 7768, "name": "DUP2", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "MSTORE", "source": 0 }, + { + "begin": 7708, + "end": 7768, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7708, "end": 7768, "name": "ADD", "source": 0 }, + { + "begin": 7708, + "end": 7768, + "name": "PUSH [tag]", + "source": 0, + "value": "121" + }, + { "begin": 7708, "end": 7768, "name": "SWAP3", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "SWAP2", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "SWAP1", "source": 0 }, + { + "begin": 7708, + "end": 7768, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { + "begin": 7708, + "end": 7768, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7708, + "end": 7768, + "name": "tag", + "source": 0, + "value": "121" + }, + { "begin": 7708, "end": 7768, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7708, + "end": 7768, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7708, "end": 7768, "name": "MLOAD", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "DUP1", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "SWAP2", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "SUB", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "SWAP1", "source": 0 }, + { "begin": 7708, "end": 7768, "name": "REVERT", "source": 0 }, + { + "begin": 7643, + "end": 7779, + "name": "tag", + "source": 0, + "value": "120" + }, + { "begin": 7643, "end": 7779, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7815, + "end": 7831, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7815, "end": 7831, "name": "SLOAD", "source": 0 }, + { + "begin": 7792, + "end": 7804, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 7792, "end": 7811, "name": "DUP1", "source": 0 }, + { "begin": 7792, "end": 7811, "name": "SLOAD", "source": 0 }, + { "begin": 7792, "end": 7811, "name": "SWAP1", "source": 0 }, + { "begin": 7792, "end": 7811, "name": "POP", "source": 0 }, + { "begin": 7792, "end": 7831, "name": "LT", "source": 0 }, + { + "begin": 7788, + "end": 7923, + "name": "PUSH [tag]", + "source": 0, + "value": "122" + }, + { "begin": 7788, "end": 7923, "name": "JUMPI", "source": 0 }, + { + "begin": 7874, + "end": 7886, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 7874, "end": 7893, "name": "DUP1", "source": 0 }, + { "begin": 7874, "end": 7893, "name": "SLOAD", "source": 0 }, + { "begin": 7874, "end": 7893, "name": "SWAP1", "source": 0 }, + { "begin": 7874, "end": 7893, "name": "POP", "source": 0 }, + { + "begin": 7895, + "end": 7911, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7895, "end": 7911, "name": "SLOAD", "source": 0 }, + { + "begin": 7854, + "end": 7912, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7854, "end": 7912, "name": "MLOAD", "source": 0 }, + { + "begin": 7854, + "end": 7912, + "name": "PUSH", + "source": 0, + "value": "E318577800000000000000000000000000000000000000000000000000000000" + }, + { "begin": 7854, "end": 7912, "name": "DUP2", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "MSTORE", "source": 0 }, + { + "begin": 7854, + "end": 7912, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7854, "end": 7912, "name": "ADD", "source": 0 }, + { + "begin": 7854, + "end": 7912, + "name": "PUSH [tag]", + "source": 0, + "value": "123" + }, + { "begin": 7854, "end": 7912, "name": "SWAP3", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "SWAP2", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "SWAP1", "source": 0 }, + { + "begin": 7854, + "end": 7912, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { + "begin": 7854, + "end": 7912, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7854, + "end": 7912, + "name": "tag", + "source": 0, + "value": "123" + }, + { "begin": 7854, "end": 7912, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7854, + "end": 7912, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7854, "end": 7912, "name": "MLOAD", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "DUP1", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "SWAP2", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "SUB", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "SWAP1", "source": 0 }, + { "begin": 7854, "end": 7912, "name": "REVERT", "source": 0 }, + { + "begin": 7788, + "end": 7923, + "name": "tag", + "source": 0, + "value": "122" + }, + { "begin": 7788, "end": 7923, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7933, + "end": 7944, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7947, "end": 7956, "name": "CALLVALUE", "source": 0 }, + { "begin": 7933, "end": 7956, "name": "SWAP1", "source": 0 }, + { "begin": 7933, "end": 7956, "name": "POP", "source": 0 }, + { + "begin": 7976, + "end": 7983, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 7976, "end": 7983, "name": "SLOAD", "source": 0 }, + { "begin": 7970, "end": 7973, "name": "DUP2", "source": 0 }, + { "begin": 7970, "end": 7983, "name": "LT", "source": 0 }, + { "begin": 7966, "end": 8043, "name": "ISZERO", "source": 0 }, + { + "begin": 7966, + "end": 8043, + "name": "PUSH [tag]", + "source": 0, + "value": "124" + }, + { "begin": 7966, "end": 8043, "name": "JUMPI", "source": 0 }, + { "begin": 8019, "end": 8022, "name": "DUP1", "source": 0 }, + { + "begin": 8024, + "end": 8031, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 8024, "end": 8031, "name": "SLOAD", "source": 0 }, + { + "begin": 8006, + "end": 8032, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8006, "end": 8032, "name": "MLOAD", "source": 0 }, + { + "begin": 8006, + "end": 8032, + "name": "PUSH", + "source": 0, + "value": "167202800000000000000000000000000000000000000000000000000000000" + }, + { "begin": 8006, "end": 8032, "name": "DUP2", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "MSTORE", "source": 0 }, + { + "begin": 8006, + "end": 8032, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 8006, "end": 8032, "name": "ADD", "source": 0 }, + { + "begin": 8006, + "end": 8032, + "name": "PUSH [tag]", + "source": 0, + "value": "125" + }, + { "begin": 8006, "end": 8032, "name": "SWAP3", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "SWAP2", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "SWAP1", "source": 0 }, + { + "begin": 8006, + "end": 8032, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { + "begin": 8006, + "end": 8032, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8006, + "end": 8032, + "name": "tag", + "source": 0, + "value": "125" + }, + { "begin": 8006, "end": 8032, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8006, + "end": 8032, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8006, "end": 8032, "name": "MLOAD", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "DUP1", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "SWAP2", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "SUB", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "SWAP1", "source": 0 }, + { "begin": 8006, "end": 8032, "name": "REVERT", "source": 0 }, + { + "begin": 7966, + "end": 8043, + "name": "tag", + "source": 0, + "value": "124" + }, + { "begin": 7966, "end": 8043, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8256, + "end": 8279, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 8282, + "end": 8301, + "name": "PUSH", + "source": 0, + "value": "DE0B6B3A7640000" + }, + { "begin": 8256, "end": 8301, "name": "SWAP1", "source": 0 }, + { "begin": 8256, "end": 8301, "name": "POP", "source": 0 }, + { "begin": 8400, "end": 8415, "name": "DUP1", "source": 0 }, + { + "begin": 8390, + "end": 8397, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { "begin": 8390, "end": 8397, "name": "SLOAD", "source": 0 }, + { + "begin": 8390, + "end": 8415, + "name": "PUSH [tag]", + "source": 0, + "value": "126" + }, + { "begin": 8390, "end": 8415, "name": "SWAP2", "source": 0 }, + { "begin": 8390, "end": 8415, "name": "SWAP1", "source": 0 }, + { + "begin": 8390, + "end": 8415, + "name": "PUSH [tag]", + "source": 0, + "value": "127" + }, + { + "begin": 8390, + "end": 8415, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8390, + "end": 8415, + "name": "tag", + "source": 0, + "value": "126" + }, + { "begin": 8390, "end": 8415, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8366, + "end": 8387, + "name": "SELFBALANCE", + "source": 0 + }, + { "begin": 8366, "end": 8415, "name": "LT", "source": 0 }, + { "begin": 8362, "end": 8558, "name": "ISZERO", "source": 0 }, + { + "begin": 8362, + "end": 8558, + "name": "PUSH [tag]", + "source": 0, + "value": "128" + }, + { "begin": 8362, "end": 8558, "name": "JUMPI", "source": 0 }, + { + "begin": 8493, + "end": 8500, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { "begin": 8493, "end": 8500, "name": "SLOAD", "source": 0 }, + { + "begin": 8469, + "end": 8490, + "name": "SELFBALANCE", + "source": 0 + }, + { + "begin": 8469, + "end": 8500, + "name": "PUSH [tag]", + "source": 0, + "value": "129" + }, + { "begin": 8469, "end": 8500, "name": "SWAP2", "source": 0 }, + { "begin": 8469, "end": 8500, "name": "SWAP1", "source": 0 }, + { + "begin": 8469, + "end": 8500, + "name": "PUSH [tag]", + "source": 0, + "value": "130" + }, + { + "begin": 8469, + "end": 8500, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8469, + "end": 8500, + "name": "tag", + "source": 0, + "value": "129" + }, + { "begin": 8469, "end": 8500, "name": "JUMPDEST", "source": 0 }, + { "begin": 8518, "end": 8533, "name": "DUP2", "source": 0 }, + { + "begin": 8438, + "end": 8547, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8438, "end": 8547, "name": "MLOAD", "source": 0 }, + { + "begin": 8438, + "end": 8547, + "name": "PUSH", + "source": 0, + "value": "EA691A4B00000000000000000000000000000000000000000000000000000000" + }, + { "begin": 8438, "end": 8547, "name": "DUP2", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "MSTORE", "source": 0 }, + { + "begin": 8438, + "end": 8547, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 8438, "end": 8547, "name": "ADD", "source": 0 }, + { + "begin": 8438, + "end": 8547, + "name": "PUSH [tag]", + "source": 0, + "value": "131" + }, + { "begin": 8438, "end": 8547, "name": "SWAP3", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "SWAP2", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "SWAP1", "source": 0 }, + { + "begin": 8438, + "end": 8547, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { + "begin": 8438, + "end": 8547, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8438, + "end": 8547, + "name": "tag", + "source": 0, + "value": "131" + }, + { "begin": 8438, "end": 8547, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8438, + "end": 8547, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8438, "end": 8547, "name": "MLOAD", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "DUP1", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "SWAP2", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "SUB", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "SWAP1", "source": 0 }, + { "begin": 8438, "end": 8547, "name": "REVERT", "source": 0 }, + { + "begin": 8362, + "end": 8558, + "name": "tag", + "source": 0, + "value": "128" + }, + { "begin": 8362, "end": 8558, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8592, + "end": 8628, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 8572, "end": 8628, "name": "DUP2", "source": 0 }, + { "begin": 8572, "end": 8628, "name": "GT", "source": 0 }, + { "begin": 8572, "end": 8628, "name": "ISZERO", "source": 0 }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH [tag]", + "source": 0, + "value": "132" + }, + { "begin": 8572, "end": 8628, "name": "JUMPI", "source": 0 }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH [tag]", + "source": 0, + "value": "133" + }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 8572, + "end": 8628, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8572, + "end": 8628, + "name": "tag", + "source": 0, + "value": "133" + }, + { "begin": 8572, "end": 8628, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8572, + "end": 8628, + "name": "tag", + "source": 0, + "value": "132" + }, + { "begin": 8572, "end": 8628, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8572, + "end": 8588, + "name": "PUSH", + "source": 0, + "value": "B" + }, + { + "begin": 8572, + "end": 8588, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { "begin": 8572, "end": 8588, "name": "SWAP1", "source": 0 }, + { "begin": 8572, "end": 8588, "name": "SLOAD", "source": 0 }, + { "begin": 8572, "end": 8588, "name": "SWAP1", "source": 0 }, + { + "begin": 8572, + "end": 8588, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 8572, "end": 8588, "name": "EXP", "source": 0 }, + { "begin": 8572, "end": 8588, "name": "SWAP1", "source": 0 }, + { "begin": 8572, "end": 8588, "name": "DIV", "source": 0 }, + { + "begin": 8572, + "end": 8588, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 8572, "end": 8588, "name": "AND", "source": 0 }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 8572, "end": 8628, "name": "DUP2", "source": 0 }, + { "begin": 8572, "end": 8628, "name": "GT", "source": 0 }, + { "begin": 8572, "end": 8628, "name": "ISZERO", "source": 0 }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH [tag]", + "source": 0, + "value": "134" + }, + { "begin": 8572, "end": 8628, "name": "JUMPI", "source": 0 }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH [tag]", + "source": 0, + "value": "135" + }, + { + "begin": 8572, + "end": 8628, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 8572, + "end": 8628, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8572, + "end": 8628, + "name": "tag", + "source": 0, + "value": "135" + }, + { "begin": 8572, "end": 8628, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8572, + "end": 8628, + "name": "tag", + "source": 0, + "value": "134" + }, + { "begin": 8572, "end": 8628, "name": "JUMPDEST", "source": 0 }, + { "begin": 8572, "end": 8628, "name": "EQ", "source": 0 }, + { "begin": 8568, "end": 9847, "name": "ISZERO", "source": 0 }, + { + "begin": 8568, + "end": 9847, + "name": "PUSH [tag]", + "source": 0, + "value": "136" + }, + { "begin": 8568, "end": 9847, "name": "JUMPI", "source": 0 }, + { + "begin": 8957, + "end": 8967, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 8957, "end": 8967, "name": "DUP1", "source": 0 }, + { "begin": 8957, "end": 8967, "name": "SLOAD", "source": 0 }, + { "begin": 8957, "end": 8967, "name": "SWAP1", "source": 0 }, + { + "begin": 8957, + "end": 8967, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 8957, "end": 8967, "name": "EXP", "source": 0 }, + { "begin": 8957, "end": 8967, "name": "SWAP1", "source": 0 }, + { "begin": 8957, "end": 8967, "name": "DIV", "source": 0 }, + { + "begin": 8957, + "end": 8967, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 8957, "end": 8967, "name": "AND", "source": 0 }, + { + "begin": 8957, + "end": 8994, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 8957, "end": 8994, "name": "AND", "source": 0 }, + { + "begin": 8957, + "end": 8994, + "name": "PUSH", + "source": 0, + "value": "9478430C" + }, + { "begin": 9012, "end": 9022, "name": "CALLER", "source": 0 }, + { "begin": 9040, "end": 9043, "name": "DUP5", "source": 0 }, + { + "begin": 9061, + "end": 9082, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 9061, + "end": 9082, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { "begin": 9061, "end": 9082, "name": "SWAP1", "source": 0 }, + { "begin": 9061, "end": 9082, "name": "SLOAD", "source": 0 }, + { "begin": 9061, "end": 9082, "name": "SWAP1", "source": 0 }, + { + "begin": 9061, + "end": 9082, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 9061, "end": 9082, "name": "EXP", "source": 0 }, + { "begin": 9061, "end": 9082, "name": "SWAP1", "source": 0 }, + { "begin": 9061, "end": 9082, "name": "DIV", "source": 0 }, + { + "begin": 9061, + "end": 9082, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 9061, "end": 9082, "name": "AND", "source": 0 }, + { + "begin": 9122, + "end": 9140, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 9122, + "end": 9140, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9122, "end": 9142, "name": "DUP2", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "SLOAD", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "DUP1", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "SWAP3", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "SWAP2", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "SWAP1", "source": 0 }, + { + "begin": 9122, + "end": 9142, + "name": "PUSH [tag]", + "source": 0, + "value": "137" + }, + { "begin": 9122, "end": 9142, "name": "SWAP1", "source": 0 }, + { + "begin": 9122, + "end": 9142, + "name": "PUSH [tag]", + "source": 0, + "value": "138" + }, + { + "begin": 9122, + "end": 9142, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 9122, + "end": 9142, + "name": "tag", + "source": 0, + "value": "137" + }, + { "begin": 9122, "end": 9142, "name": "JUMPDEST", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "SWAP2", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "SWAP1", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "POP", "source": 0 }, + { "begin": 9122, "end": 9142, "name": "SSTORE", "source": 0 }, + { + "begin": 9114, + "end": 9143, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9114, "end": 9143, "name": "SHL", "source": 0 }, + { + "begin": 9100, + "end": 9111, + "name": "PUSH", + "source": 0, + "value": "6" + }, + { "begin": 9100, "end": 9111, "name": "SLOAD", "source": 0 }, + { "begin": 9100, "end": 9143, "name": "XOR", "source": 0 }, + { + "begin": 9161, + "end": 9172, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 9161, + "end": 9172, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9161, "end": 9172, "name": "SWAP1", "source": 0 }, + { "begin": 9161, "end": 9172, "name": "SLOAD", "source": 0 }, + { "begin": 9161, "end": 9172, "name": "SWAP1", "source": 0 }, + { + "begin": 9161, + "end": 9172, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 9161, "end": 9172, "name": "EXP", "source": 0 }, + { "begin": 9161, "end": 9172, "name": "SWAP1", "source": 0 }, + { "begin": 9161, "end": 9172, "name": "DIV", "source": 0 }, + { + "begin": 9161, + "end": 9172, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 9161, "end": 9172, "name": "AND", "source": 0 }, + { + "begin": 9190, + "end": 9206, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 9190, + "end": 9206, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 9190, "end": 9206, "name": "SWAP1", "source": 0 }, + { "begin": 9190, "end": 9206, "name": "SLOAD", "source": 0 }, + { "begin": 9190, "end": 9206, "name": "SWAP1", "source": 0 }, + { + "begin": 9190, + "end": 9206, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 9190, "end": 9206, "name": "EXP", "source": 0 }, + { "begin": 9190, "end": 9206, "name": "SWAP1", "source": 0 }, + { "begin": 9190, "end": 9206, "name": "DIV", "source": 0 }, + { + "begin": 9190, + "end": 9206, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 9190, "end": 9206, "name": "AND", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8957, "end": 9220, "name": "MLOAD", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP8", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 8957, "end": 9220, "name": "AND", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 8957, "end": 9220, "name": "SHL", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP2", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "MSTORE", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 8957, "end": 9220, "name": "ADD", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH [tag]", + "source": 0, + "value": "139" + }, + { "begin": 8957, "end": 9220, "name": "SWAP7", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP6", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP5", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP4", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP3", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP2", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP1", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH [tag]", + "source": 0, + "value": "140" + }, + { + "begin": 8957, + "end": 9220, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8957, + "end": 9220, + "name": "tag", + "source": 0, + "value": "139" + }, + { "begin": 8957, "end": 9220, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8957, "end": 9220, "name": "MLOAD", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP1", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP4", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SUB", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP2", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 8957, "end": 9220, "name": "DUP8", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "GAS", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "CALL", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "ISZERO", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP1", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "ISZERO", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH [tag]", + "source": 0, + "value": "142" + }, + { "begin": 8957, "end": 9220, "name": "JUMPI", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 8957, "end": 9220, "name": "DUP1", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 8957, + "end": 9220, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 8957, "end": 9220, "name": "REVERT", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "tag", + "source": 0, + "value": "142" + }, + { "begin": 8957, "end": 9220, "name": "JUMPDEST", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "POP", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "POP", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "POP", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "POP", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8957, "end": 9220, "name": "MLOAD", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 8957, "end": 9220, "name": "NOT", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 8957, "end": 9220, "name": "DUP3", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "ADD", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "AND", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP3", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "ADD", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP1", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 8957, "end": 9220, "name": "MSTORE", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "POP", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "DUP2", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "ADD", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP1", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH [tag]", + "source": 0, + "value": "143" + }, + { "begin": 8957, "end": 9220, "name": "SWAP2", "source": 0 }, + { "begin": 8957, "end": 9220, "name": "SWAP1", "source": 0 }, + { + "begin": 8957, + "end": 9220, + "name": "PUSH [tag]", + "source": 0, + "value": "144" + }, + { + "begin": 8957, + "end": 9220, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 8957, + "end": 9220, + "name": "tag", + "source": 0, + "value": "143" + }, + { "begin": 8957, "end": 9220, "name": "JUMPDEST", "source": 0 }, + { + "begin": 8945, + "end": 8954, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 8945, "end": 9220, "name": "DUP2", "source": 0 }, + { "begin": 8945, "end": 9220, "name": "SWAP1", "source": 0 }, + { "begin": 8945, "end": 9220, "name": "SSTORE", "source": 0 }, + { "begin": 8945, "end": 9220, "name": "POP", "source": 0 }, + { + "begin": 8568, + "end": 9847, + "name": "PUSH [tag]", + "source": 0, + "value": "145" + }, + { "begin": 8568, "end": 9847, "name": "JUMP", "source": 0 }, + { + "begin": 8568, + "end": 9847, + "name": "tag", + "source": 0, + "value": "136" + }, + { "begin": 8568, "end": 9847, "name": "JUMPDEST", "source": 0 }, + { + "begin": 9601, + "end": 9611, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9601, "end": 9611, "name": "DUP1", "source": 0 }, + { "begin": 9601, "end": 9611, "name": "SLOAD", "source": 0 }, + { "begin": 9601, "end": 9611, "name": "SWAP1", "source": 0 }, + { + "begin": 9601, + "end": 9611, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 9601, "end": 9611, "name": "EXP", "source": 0 }, + { "begin": 9601, "end": 9611, "name": "SWAP1", "source": 0 }, + { "begin": 9601, "end": 9611, "name": "DIV", "source": 0 }, + { + "begin": 9601, + "end": 9611, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 9601, "end": 9611, "name": "AND", "source": 0 }, + { + "begin": 9601, + "end": 9644, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 9601, "end": 9644, "name": "AND", "source": 0 }, + { + "begin": 9601, + "end": 9644, + "name": "PUSH", + "source": 0, + "value": "33C14A63" + }, + { "begin": 9662, "end": 9672, "name": "CALLER", "source": 0 }, + { "begin": 9690, "end": 9693, "name": "DUP5", "source": 0 }, + { + "begin": 9711, + "end": 9732, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 9711, + "end": 9732, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { "begin": 9711, "end": 9732, "name": "SWAP1", "source": 0 }, + { "begin": 9711, "end": 9732, "name": "SLOAD", "source": 0 }, + { "begin": 9711, "end": 9732, "name": "SWAP1", "source": 0 }, + { + "begin": 9711, + "end": 9732, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 9711, "end": 9732, "name": "EXP", "source": 0 }, + { "begin": 9711, "end": 9732, "name": "SWAP1", "source": 0 }, + { "begin": 9711, "end": 9732, "name": "DIV", "source": 0 }, + { + "begin": 9711, + "end": 9732, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 9711, "end": 9732, "name": "AND", "source": 0 }, + { + "begin": 9772, + "end": 9790, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { + "begin": 9772, + "end": 9790, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9772, "end": 9792, "name": "DUP2", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "SLOAD", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "DUP1", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "SWAP3", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "SWAP2", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "SWAP1", "source": 0 }, + { + "begin": 9772, + "end": 9792, + "name": "PUSH [tag]", + "source": 0, + "value": "146" + }, + { "begin": 9772, "end": 9792, "name": "SWAP1", "source": 0 }, + { + "begin": 9772, + "end": 9792, + "name": "PUSH [tag]", + "source": 0, + "value": "138" + }, + { + "begin": 9772, + "end": 9792, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 9772, + "end": 9792, + "name": "tag", + "source": 0, + "value": "146" + }, + { "begin": 9772, "end": 9792, "name": "JUMPDEST", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "SWAP2", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "SWAP1", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "POP", "source": 0 }, + { "begin": 9772, "end": 9792, "name": "SSTORE", "source": 0 }, + { + "begin": 9764, + "end": 9793, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9764, "end": 9793, "name": "SHL", "source": 0 }, + { + "begin": 9750, + "end": 9761, + "name": "PUSH", + "source": 0, + "value": "6" + }, + { "begin": 9750, "end": 9761, "name": "SLOAD", "source": 0 }, + { "begin": 9750, "end": 9793, "name": "XOR", "source": 0 }, + { + "begin": 9811, + "end": 9822, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 9811, + "end": 9822, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9811, "end": 9822, "name": "SWAP1", "source": 0 }, + { "begin": 9811, "end": 9822, "name": "SLOAD", "source": 0 }, + { "begin": 9811, "end": 9822, "name": "SWAP1", "source": 0 }, + { + "begin": 9811, + "end": 9822, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 9811, "end": 9822, "name": "EXP", "source": 0 }, + { "begin": 9811, "end": 9822, "name": "SWAP1", "source": 0 }, + { "begin": 9811, "end": 9822, "name": "DIV", "source": 0 }, + { + "begin": 9811, + "end": 9822, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 9811, "end": 9822, "name": "AND", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 9601, "end": 9836, "name": "MLOAD", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP7", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 9601, "end": 9836, "name": "AND", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 9601, "end": 9836, "name": "SHL", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP2", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "MSTORE", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 9601, "end": 9836, "name": "ADD", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH [tag]", + "source": 0, + "value": "147" + }, + { "begin": 9601, "end": 9836, "name": "SWAP6", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SWAP5", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SWAP4", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SWAP3", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SWAP2", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SWAP1", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH [tag]", + "source": 0, + "value": "148" + }, + { + "begin": 9601, + "end": 9836, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 9601, + "end": 9836, + "name": "tag", + "source": 0, + "value": "147" + }, + { "begin": 9601, "end": 9836, "name": "JUMPDEST", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 9601, "end": 9836, "name": "MLOAD", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP1", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP4", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SUB", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP2", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9601, "end": 9836, "name": "DUP8", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "GAS", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "CALL", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "ISZERO", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP1", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "ISZERO", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH [tag]", + "source": 0, + "value": "150" + }, + { "begin": 9601, "end": 9836, "name": "JUMPI", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9601, "end": 9836, "name": "DUP1", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 9601, + "end": 9836, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 9601, "end": 9836, "name": "REVERT", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "tag", + "source": 0, + "value": "150" + }, + { "begin": 9601, "end": 9836, "name": "JUMPDEST", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "POP", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "POP", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "POP", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "POP", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 9601, "end": 9836, "name": "MLOAD", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 9601, "end": 9836, "name": "NOT", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 9601, "end": 9836, "name": "DUP3", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "ADD", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "AND", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP3", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "ADD", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP1", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 9601, "end": 9836, "name": "MSTORE", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "POP", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "DUP2", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "ADD", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SWAP1", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH [tag]", + "source": 0, + "value": "151" + }, + { "begin": 9601, "end": 9836, "name": "SWAP2", "source": 0 }, + { "begin": 9601, "end": 9836, "name": "SWAP1", "source": 0 }, + { + "begin": 9601, + "end": 9836, + "name": "PUSH [tag]", + "source": 0, + "value": "144" + }, + { + "begin": 9601, + "end": 9836, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 9601, + "end": 9836, + "name": "tag", + "source": 0, + "value": "151" + }, + { "begin": 9601, "end": 9836, "name": "JUMPDEST", "source": 0 }, + { + "begin": 9589, + "end": 9598, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 9589, "end": 9836, "name": "DUP2", "source": 0 }, + { "begin": 9589, "end": 9836, "name": "SWAP1", "source": 0 }, + { "begin": 9589, "end": 9836, "name": "SSTORE", "source": 0 }, + { "begin": 9589, "end": 9836, "name": "POP", "source": 0 }, + { + "begin": 8568, + "end": 9847, + "name": "tag", + "source": 0, + "value": "145" + }, + { "begin": 8568, "end": 9847, "name": "JUMPDEST", "source": 0 }, + { "begin": 7385, "end": 9853, "name": "POP", "source": 0 }, + { "begin": 7385, "end": 9853, "name": "POP", "source": 0 }, + { + "begin": 7334, + "end": 9853, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 4875, + "end": 4928, + "name": "tag", + "source": 0, + "value": "34" + }, + { "begin": 4875, "end": 4928, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "PUSH", + "source": 0, + "value": "6" + }, + { "begin": 4875, "end": 4928, "name": "SLOAD", "source": 0 }, + { "begin": 4875, "end": 4928, "name": "DUP2", "source": 0 }, + { + "begin": 4875, + "end": 4928, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 5871, + "end": 6280, + "name": "tag", + "source": 2, + "value": "41" + }, + { "begin": 5871, "end": 6280, "name": "JUMPDEST", "source": 2 }, + { + "begin": 6010, + "end": 6052, + "name": "PUSH", + "source": 2, + "value": "809" + }, + { + "begin": 5996, + "end": 6052, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 5996, "end": 6052, "name": "AND", "source": 2 }, + { "begin": 5996, "end": 6006, "name": "CALLER", "source": 2 }, + { + "begin": 5996, + "end": 6052, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 5996, "end": 6052, "name": "AND", "source": 2 }, + { "begin": 5996, "end": 6052, "name": "EQ", "source": 2 }, + { + "begin": 5992, + "end": 6222, + "name": "PUSH [tag]", + "source": 2, + "value": "153" + }, + { "begin": 5992, "end": 6222, "name": "JUMPI", "source": 2 }, + { "begin": 6127, "end": 6137, "name": "CALLER", "source": 2 }, + { + "begin": 6155, + "end": 6197, + "name": "PUSH", + "source": 2, + "value": "809" + }, + { + "begin": 6075, + "end": 6211, + "name": "PUSH", + "source": 2, + "value": "40" + }, + { "begin": 6075, "end": 6211, "name": "MLOAD", "source": 2 }, + { + "begin": 6075, + "end": 6211, + "name": "PUSH", + "source": 2, + "value": "C68806F500000000000000000000000000000000000000000000000000000000" + }, + { "begin": 6075, "end": 6211, "name": "DUP2", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "MSTORE", "source": 2 }, + { + "begin": 6075, + "end": 6211, + "name": "PUSH", + "source": 2, + "value": "4" + }, + { "begin": 6075, "end": 6211, "name": "ADD", "source": 2 }, + { + "begin": 6075, + "end": 6211, + "name": "PUSH [tag]", + "source": 2, + "value": "154" + }, + { "begin": 6075, "end": 6211, "name": "SWAP3", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "SWAP2", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "SWAP1", "source": 2 }, + { + "begin": 6075, + "end": 6211, + "name": "PUSH [tag]", + "source": 2, + "value": "155" + }, + { + "begin": 6075, + "end": 6211, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 6075, + "end": 6211, + "name": "tag", + "source": 2, + "value": "154" + }, + { "begin": 6075, "end": 6211, "name": "JUMPDEST", "source": 2 }, + { + "begin": 6075, + "end": 6211, + "name": "PUSH", + "source": 2, + "value": "40" + }, + { "begin": 6075, "end": 6211, "name": "MLOAD", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "DUP1", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "SWAP2", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "SUB", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "SWAP1", "source": 2 }, + { "begin": 6075, "end": 6211, "name": "REVERT", "source": 2 }, + { + "begin": 5992, + "end": 6222, + "name": "tag", + "source": 2, + "value": "153" + }, + { "begin": 5992, "end": 6222, "name": "JUMPDEST", "source": 2 }, + { + "begin": 6231, + "end": 6273, + "name": "PUSH [tag]", + "source": 2, + "value": "156" + }, + { "begin": 6250, "end": 6259, "name": "DUP3", "source": 2 }, + { "begin": 6261, "end": 6272, "name": "DUP3", "source": 2 }, + { + "begin": 6231, + "end": 6249, + "name": "PUSH [tag]", + "source": 2, + "value": "157" + }, + { + "begin": 6231, + "end": 6273, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 6231, + "end": 6273, + "name": "tag", + "source": 2, + "value": "156" + }, + { "begin": 6231, "end": 6273, "name": "JUMPDEST", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "POP", "source": 2 }, + { "begin": 5871, "end": 6280, "name": "POP", "source": 2 }, + { + "begin": 5871, + "end": 6280, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 6209, + "end": 6764, + "name": "tag", + "source": 0, + "value": "44" + }, + { "begin": 6209, "end": 6764, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6250, + "end": 6263, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6275, "end": 6313, "name": "DUP1", "source": 0 }, + { + "begin": 6316, + "end": 6326, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6316, "end": 6326, "name": "DUP1", "source": 0 }, + { "begin": 6316, "end": 6326, "name": "SLOAD", "source": 0 }, + { "begin": 6316, "end": 6326, "name": "SWAP1", "source": 0 }, + { + "begin": 6316, + "end": 6326, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 6316, "end": 6326, "name": "EXP", "source": 0 }, + { "begin": 6316, "end": 6326, "name": "SWAP1", "source": 0 }, + { "begin": 6316, "end": 6326, "name": "DIV", "source": 0 }, + { + "begin": 6316, + "end": 6326, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6316, "end": 6326, "name": "AND", "source": 0 }, + { + "begin": 6316, + "end": 6343, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6316, "end": 6343, "name": "AND", "source": 0 }, + { + "begin": 6316, + "end": 6343, + "name": "PUSH", + "source": 0, + "value": "D8A4676F" + }, + { + "begin": 6357, + "end": 6366, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 6357, "end": 6366, "name": "SLOAD", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6316, "end": 6376, "name": "MLOAD", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP3", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 6316, "end": 6376, "name": "AND", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 6316, "end": 6376, "name": "SHL", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP2", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "MSTORE", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 6316, "end": 6376, "name": "ADD", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH [tag]", + "source": 0, + "value": "159" + }, + { "begin": 6316, "end": 6376, "name": "SWAP2", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "SWAP1", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 6316, + "end": 6376, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6316, + "end": 6376, + "name": "tag", + "source": 0, + "value": "159" + }, + { "begin": 6316, "end": 6376, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6316, "end": 6376, "name": "MLOAD", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP1", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP4", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "SUB", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP2", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP7", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "GAS", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "STATICCALL", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "ISZERO", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP1", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "ISZERO", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH [tag]", + "source": 0, + "value": "161" + }, + { "begin": 6316, "end": 6376, "name": "JUMPI", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6316, "end": 6376, "name": "DUP1", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 6316, + "end": 6376, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6316, "end": 6376, "name": "REVERT", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "tag", + "source": 0, + "value": "161" + }, + { "begin": 6316, "end": 6376, "name": "JUMPDEST", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "POP", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "POP", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "POP", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "POP", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6316, "end": 6376, "name": "MLOAD", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 6316, "end": 6376, "name": "NOT", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 6316, "end": 6376, "name": "DUP3", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "ADD", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "AND", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP3", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "ADD", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP1", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6316, "end": 6376, "name": "MSTORE", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "POP", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "DUP2", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "ADD", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "SWAP1", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH [tag]", + "source": 0, + "value": "162" + }, + { "begin": 6316, "end": 6376, "name": "SWAP2", "source": 0 }, + { "begin": 6316, "end": 6376, "name": "SWAP1", "source": 0 }, + { + "begin": 6316, + "end": 6376, + "name": "PUSH [tag]", + "source": 0, + "value": "116" + }, + { + "begin": 6316, + "end": 6376, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6316, + "end": 6376, + "name": "tag", + "source": 0, + "value": "162" + }, + { "begin": 6316, "end": 6376, "name": "JUMPDEST", "source": 0 }, + { "begin": 6275, "end": 6376, "name": "SWAP1", "source": 0 }, + { "begin": 6275, "end": 6376, "name": "POP", "source": 0 }, + { + "begin": 6407, + "end": 6444, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6390, "end": 6444, "name": "DUP2", "source": 0 }, + { "begin": 6390, "end": 6444, "name": "GT", "source": 0 }, + { "begin": 6390, "end": 6444, "name": "ISZERO", "source": 0 }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH [tag]", + "source": 0, + "value": "163" + }, + { "begin": 6390, "end": 6444, "name": "JUMPI", "source": 0 }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH [tag]", + "source": 0, + "value": "164" + }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6390, + "end": 6444, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6390, + "end": 6444, + "name": "tag", + "source": 0, + "value": "164" + }, + { "begin": 6390, "end": 6444, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6390, + "end": 6444, + "name": "tag", + "source": 0, + "value": "163" + }, + { "begin": 6390, "end": 6444, "name": "JUMPDEST", "source": 0 }, + { "begin": 6390, "end": 6403, "name": "DUP2", "source": 0 }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6390, "end": 6444, "name": "DUP2", "source": 0 }, + { "begin": 6390, "end": 6444, "name": "GT", "source": 0 }, + { "begin": 6390, "end": 6444, "name": "ISZERO", "source": 0 }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH [tag]", + "source": 0, + "value": "165" + }, + { "begin": 6390, "end": 6444, "name": "JUMPI", "source": 0 }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH [tag]", + "source": 0, + "value": "166" + }, + { + "begin": 6390, + "end": 6444, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6390, + "end": 6444, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6390, + "end": 6444, + "name": "tag", + "source": 0, + "value": "166" + }, + { "begin": 6390, "end": 6444, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6390, + "end": 6444, + "name": "tag", + "source": 0, + "value": "165" + }, + { "begin": 6390, "end": 6444, "name": "JUMPDEST", "source": 0 }, + { "begin": 6390, "end": 6444, "name": "EQ", "source": 0 }, + { "begin": 6386, "end": 6511, "name": "ISZERO", "source": 0 }, + { + "begin": 6386, + "end": 6511, + "name": "PUSH [tag]", + "source": 0, + "value": "167" + }, + { "begin": 6386, "end": 6511, "name": "JUMPI", "source": 0 }, + { + "begin": 6467, + "end": 6500, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6460, "end": 6500, "name": "SWAP2", "source": 0 }, + { "begin": 6460, "end": 6500, "name": "POP", "source": 0 }, + { "begin": 6460, "end": 6500, "name": "POP", "source": 0 }, + { + "begin": 6460, + "end": 6500, + "name": "PUSH [tag]", + "source": 0, + "value": "158" + }, + { "begin": 6460, "end": 6500, "name": "JUMP", "source": 0 }, + { + "begin": 6386, + "end": 6511, + "name": "tag", + "source": 0, + "value": "167" + }, + { "begin": 6386, "end": 6511, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6554, + "end": 6586, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6537, "end": 6586, "name": "DUP2", "source": 0 }, + { "begin": 6537, "end": 6586, "name": "GT", "source": 0 }, + { "begin": 6537, "end": 6586, "name": "ISZERO", "source": 0 }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH [tag]", + "source": 0, + "value": "168" + }, + { "begin": 6537, "end": 6586, "name": "JUMPI", "source": 0 }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH [tag]", + "source": 0, + "value": "169" + }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6537, + "end": 6586, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6537, + "end": 6586, + "name": "tag", + "source": 0, + "value": "169" + }, + { "begin": 6537, "end": 6586, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6537, + "end": 6586, + "name": "tag", + "source": 0, + "value": "168" + }, + { "begin": 6537, "end": 6586, "name": "JUMPDEST", "source": 0 }, + { "begin": 6537, "end": 6550, "name": "DUP2", "source": 0 }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6537, "end": 6586, "name": "DUP2", "source": 0 }, + { "begin": 6537, "end": 6586, "name": "GT", "source": 0 }, + { "begin": 6537, "end": 6586, "name": "ISZERO", "source": 0 }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH [tag]", + "source": 0, + "value": "170" + }, + { "begin": 6537, "end": 6586, "name": "JUMPI", "source": 0 }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH [tag]", + "source": 0, + "value": "171" + }, + { + "begin": 6537, + "end": 6586, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6537, + "end": 6586, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6537, + "end": 6586, + "name": "tag", + "source": 0, + "value": "171" + }, + { "begin": 6537, "end": 6586, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6537, + "end": 6586, + "name": "tag", + "source": 0, + "value": "170" + }, + { "begin": 6537, "end": 6586, "name": "JUMPDEST", "source": 0 }, + { "begin": 6537, "end": 6586, "name": "EQ", "source": 0 }, + { "begin": 6537, "end": 6649, "name": "DUP1", "source": 0 }, + { + "begin": 6537, + "end": 6649, + "name": "PUSH [tag]", + "source": 0, + "value": "172" + }, + { "begin": 6537, "end": 6649, "name": "JUMPI", "source": 0 }, + { "begin": 6537, "end": 6649, "name": "POP", "source": 0 }, + { + "begin": 6619, + "end": 6649, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6602, "end": 6649, "name": "DUP2", "source": 0 }, + { "begin": 6602, "end": 6649, "name": "GT", "source": 0 }, + { "begin": 6602, "end": 6649, "name": "ISZERO", "source": 0 }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH [tag]", + "source": 0, + "value": "173" + }, + { "begin": 6602, "end": 6649, "name": "JUMPI", "source": 0 }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH [tag]", + "source": 0, + "value": "174" + }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6602, + "end": 6649, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6602, + "end": 6649, + "name": "tag", + "source": 0, + "value": "174" + }, + { "begin": 6602, "end": 6649, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6602, + "end": 6649, + "name": "tag", + "source": 0, + "value": "173" + }, + { "begin": 6602, "end": 6649, "name": "JUMPDEST", "source": 0 }, + { "begin": 6602, "end": 6615, "name": "DUP2", "source": 0 }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6602, "end": 6649, "name": "DUP2", "source": 0 }, + { "begin": 6602, "end": 6649, "name": "GT", "source": 0 }, + { "begin": 6602, "end": 6649, "name": "ISZERO", "source": 0 }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH [tag]", + "source": 0, + "value": "175" + }, + { "begin": 6602, "end": 6649, "name": "JUMPI", "source": 0 }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH [tag]", + "source": 0, + "value": "176" + }, + { + "begin": 6602, + "end": 6649, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6602, + "end": 6649, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6602, + "end": 6649, + "name": "tag", + "source": 0, + "value": "176" + }, + { "begin": 6602, "end": 6649, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6602, + "end": 6649, + "name": "tag", + "source": 0, + "value": "175" + }, + { "begin": 6602, "end": 6649, "name": "JUMPDEST", "source": 0 }, + { "begin": 6602, "end": 6649, "name": "EQ", "source": 0 }, + { + "begin": 6537, + "end": 6649, + "name": "tag", + "source": 0, + "value": "172" + }, + { "begin": 6537, "end": 6649, "name": "JUMPDEST", "source": 0 }, + { "begin": 6520, "end": 6720, "name": "ISZERO", "source": 0 }, + { + "begin": 6520, + "end": 6720, + "name": "PUSH [tag]", + "source": 0, + "value": "177" + }, + { "begin": 6520, "end": 6720, "name": "JUMPI", "source": 0 }, + { + "begin": 6681, + "end": 6709, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 6674, "end": 6709, "name": "SWAP2", "source": 0 }, + { "begin": 6674, "end": 6709, "name": "POP", "source": 0 }, + { "begin": 6674, "end": 6709, "name": "POP", "source": 0 }, + { + "begin": 6674, + "end": 6709, + "name": "PUSH [tag]", + "source": 0, + "value": "158" + }, + { "begin": 6674, "end": 6709, "name": "JUMP", "source": 0 }, + { + "begin": 6520, + "end": 6720, + "name": "tag", + "source": 0, + "value": "177" + }, + { "begin": 6520, "end": 6720, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6736, + "end": 6757, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 6729, "end": 6757, "name": "SWAP2", "source": 0 }, + { "begin": 6729, "end": 6757, "name": "POP", "source": 0 }, + { "begin": 6729, "end": 6757, "name": "POP", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "tag", + "source": 0, + "value": "158" + }, + { "begin": 6209, "end": 6764, "name": "JUMPDEST", "source": 0 }, + { "begin": 6209, "end": 6764, "name": "SWAP1", "source": 0 }, + { + "begin": 6209, + "end": 6764, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 5059, + "end": 5092, + "name": "tag", + "source": 0, + "value": "49" + }, + { "begin": 5059, "end": 5092, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 5059, "end": 5092, "name": "SLOAD", "source": 0 }, + { "begin": 5059, "end": 5092, "name": "DUP2", "source": 0 }, + { + "begin": 5059, + "end": 5092, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 5218, + "end": 5247, + "name": "tag", + "source": 0, + "value": "55" + }, + { "begin": 5218, "end": 5247, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 5218, "end": 5247, "name": "DUP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "DUP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SLOAD", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "DUP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "LT", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH [tag]", + "source": 0, + "value": "178" + }, + { "begin": 5218, "end": 5247, "name": "JUMPI", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5218, "end": 5247, "name": "DUP1", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "REVERT", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "tag", + "source": 0, + "value": "178" + }, + { "begin": 5218, "end": 5247, "name": "JUMPDEST", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP1", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5218, "end": 5247, "name": "MSTORE", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5218, "end": 5247, "name": "KECCAK256", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "ADD", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 5218, "end": 5247, "name": "SWAP2", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "POP", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SLOAD", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP1", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 5218, "end": 5247, "name": "EXP", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "SWAP1", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "DIV", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 5218, "end": 5247, "name": "AND", "source": 0 }, + { "begin": 5218, "end": 5247, "name": "DUP2", "source": 0 }, + { + "begin": 5218, + "end": 5247, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 381, + "end": 474, + "name": "tag", + "source": 0, + "value": "60" + }, + { "begin": 381, "end": 474, "name": "JUMPDEST", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 381, "end": 474, "name": "DUP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "SLOAD", "source": 0 }, + { "begin": 381, "end": 474, "name": "SWAP1", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 381, "end": 474, "name": "EXP", "source": 0 }, + { "begin": 381, "end": 474, "name": "SWAP1", "source": 0 }, + { "begin": 381, "end": 474, "name": "DIV", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 381, "end": 474, "name": "AND", "source": 0 }, + { "begin": 381, "end": 474, "name": "DUP2", "source": 0 }, + { + "begin": 381, + "end": 474, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 4227, + "end": 4262, + "name": "tag", + "source": 0, + "value": "65" + }, + { "begin": 4227, "end": 4262, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 4227, "end": 4262, "name": "SLOAD", "source": 0 }, + { "begin": 4227, "end": 4262, "name": "DUP2", "source": 0 }, + { + "begin": 4227, + "end": 4262, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 4744, + "end": 4786, + "name": "tag", + "source": 0, + "value": "69" + }, + { "begin": 4744, "end": 4786, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { "begin": 4744, "end": 4786, "name": "SLOAD", "source": 0 }, + { "begin": 4744, "end": 4786, "name": "DUP2", "source": 0 }, + { + "begin": 4744, + "end": 4786, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 3025, + "end": 3069, + "name": "tag", + "source": 0, + "value": "73" + }, + { "begin": 3025, "end": 3069, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "14" + }, + { "begin": 3025, "end": 3069, "name": "SWAP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SLOAD", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SWAP1", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 3025, "end": 3069, "name": "EXP", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "SWAP1", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "DIV", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 3025, "end": 3069, "name": "AND", "source": 0 }, + { "begin": 3025, "end": 3069, "name": "DUP2", "source": 0 }, + { + "begin": 3025, + "end": 3069, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 5322, + "end": 5344, + "name": "tag", + "source": 0, + "value": "78" + }, + { "begin": 5322, "end": 5344, "name": "JUMPDEST", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { "begin": 5322, "end": 5344, "name": "SLOAD", "source": 0 }, + { "begin": 5322, "end": 5344, "name": "DUP2", "source": 0 }, + { + "begin": 5322, + "end": 5344, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 3437, + "end": 3492, + "name": "tag", + "source": 0, + "value": "82" + }, + { "begin": 3437, "end": 3492, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 3437, "end": 3492, "name": "SLOAD", "source": 0 }, + { "begin": 3437, "end": 3492, "name": "DUP2", "source": 0 }, + { + "begin": 3437, + "end": 3492, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 4095, + "end": 4148, + "name": "tag", + "source": 0, + "value": "86" + }, + { "begin": 4095, "end": 4148, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 4095, "end": 4148, "name": "SWAP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SLOAD", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SWAP1", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 4095, "end": 4148, "name": "EXP", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "SWAP1", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "DIV", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 4095, "end": 4148, "name": "AND", "source": 0 }, + { "begin": 4095, "end": 4148, "name": "DUP2", "source": 0 }, + { + "begin": 4095, + "end": 4148, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 3658, + "end": 3686, + "name": "tag", + "source": 0, + "value": "91" + }, + { "begin": 3658, "end": 3686, "name": "JUMPDEST", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 3658, "end": 3686, "name": "SWAP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SLOAD", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SWAP1", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 3658, "end": 3686, "name": "EXP", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "SWAP1", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "DIV", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 3658, "end": 3686, "name": "AND", "source": 0 }, + { "begin": 3658, "end": 3686, "name": "DUP2", "source": 0 }, + { + "begin": 3658, + "end": 3686, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 6770, + "end": 7328, + "name": "tag", + "source": 0, + "value": "95" + }, + { "begin": 6770, "end": 7328, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6958, + "end": 6995, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6904, "end": 6995, "name": "DUP2", "source": 0 }, + { "begin": 6904, "end": 6995, "name": "GT", "source": 0 }, + { "begin": 6904, "end": 6995, "name": "ISZERO", "source": 0 }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH [tag]", + "source": 0, + "value": "181" + }, + { "begin": 6904, "end": 6995, "name": "JUMPI", "source": 0 }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH [tag]", + "source": 0, + "value": "182" + }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6904, + "end": 6995, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6904, + "end": 6995, + "name": "tag", + "source": 0, + "value": "182" + }, + { "begin": 6904, "end": 6995, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6904, + "end": 6995, + "name": "tag", + "source": 0, + "value": "181" + }, + { "begin": 6904, "end": 6995, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6904, + "end": 6914, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6904, "end": 6914, "name": "DUP1", "source": 0 }, + { "begin": 6904, "end": 6914, "name": "SLOAD", "source": 0 }, + { "begin": 6904, "end": 6914, "name": "SWAP1", "source": 0 }, + { + "begin": 6904, + "end": 6914, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 6904, "end": 6914, "name": "EXP", "source": 0 }, + { "begin": 6904, "end": 6914, "name": "SWAP1", "source": 0 }, + { "begin": 6904, "end": 6914, "name": "DIV", "source": 0 }, + { + "begin": 6904, + "end": 6914, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6904, "end": 6914, "name": "AND", "source": 0 }, + { + "begin": 6904, + "end": 6931, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6904, "end": 6931, "name": "AND", "source": 0 }, + { + "begin": 6904, + "end": 6931, + "name": "PUSH", + "source": 0, + "value": "D8A4676F" + }, + { + "begin": 6932, + "end": 6941, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 6932, "end": 6941, "name": "SLOAD", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6904, "end": 6942, "name": "MLOAD", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP3", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 6904, "end": 6942, "name": "AND", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 6904, "end": 6942, "name": "SHL", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP2", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "MSTORE", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 6904, "end": 6942, "name": "ADD", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH [tag]", + "source": 0, + "value": "183" + }, + { "begin": 6904, "end": 6942, "name": "SWAP2", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "SWAP1", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { + "begin": 6904, + "end": 6942, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6904, + "end": 6942, + "name": "tag", + "source": 0, + "value": "183" + }, + { "begin": 6904, "end": 6942, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6904, "end": 6942, "name": "MLOAD", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP1", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP4", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "SUB", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP2", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP7", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "GAS", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "STATICCALL", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "ISZERO", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP1", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "ISZERO", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH [tag]", + "source": 0, + "value": "185" + }, + { "begin": 6904, "end": 6942, "name": "JUMPI", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6904, "end": 6942, "name": "DUP1", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 6904, + "end": 6942, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 6904, "end": 6942, "name": "REVERT", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "tag", + "source": 0, + "value": "185" + }, + { "begin": 6904, "end": 6942, "name": "JUMPDEST", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "POP", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "POP", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "POP", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "POP", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6904, "end": 6942, "name": "MLOAD", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 6904, "end": 6942, "name": "NOT", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 6904, "end": 6942, "name": "DUP3", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "ADD", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "AND", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP3", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "ADD", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP1", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 6904, "end": 6942, "name": "MSTORE", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "POP", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "DUP2", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "ADD", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "SWAP1", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH [tag]", + "source": 0, + "value": "186" + }, + { "begin": 6904, "end": 6942, "name": "SWAP2", "source": 0 }, + { "begin": 6904, "end": 6942, "name": "SWAP1", "source": 0 }, + { + "begin": 6904, + "end": 6942, + "name": "PUSH [tag]", + "source": 0, + "value": "116" + }, + { + "begin": 6904, + "end": 6942, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6904, + "end": 6942, + "name": "tag", + "source": 0, + "value": "186" + }, + { "begin": 6904, "end": 6942, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 6904, "end": 6995, "name": "DUP2", "source": 0 }, + { "begin": 6904, "end": 6995, "name": "GT", "source": 0 }, + { "begin": 6904, "end": 6995, "name": "ISZERO", "source": 0 }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH [tag]", + "source": 0, + "value": "187" + }, + { "begin": 6904, "end": 6995, "name": "JUMPI", "source": 0 }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH [tag]", + "source": 0, + "value": "188" + }, + { + "begin": 6904, + "end": 6995, + "name": "PUSH [tag]", + "source": 0, + "value": "111" + }, + { + "begin": 6904, + "end": 6995, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 6904, + "end": 6995, + "name": "tag", + "source": 0, + "value": "188" + }, + { "begin": 6904, "end": 6995, "name": "JUMPDEST", "source": 0 }, + { + "begin": 6904, + "end": 6995, + "name": "tag", + "source": 0, + "value": "187" + }, + { "begin": 6904, "end": 6995, "name": "JUMPDEST", "source": 0 }, + { "begin": 6904, "end": 6995, "name": "EQ", "source": 0 }, + { + "begin": 6887, + "end": 7058, + "name": "PUSH [tag]", + "source": 0, + "value": "189" + }, + { "begin": 6887, "end": 7058, "name": "JUMPI", "source": 0 }, + { + "begin": 7027, + "end": 7047, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7027, "end": 7047, "name": "MLOAD", "source": 0 }, + { + "begin": 7027, + "end": 7047, + "name": "PUSH", + "source": 0, + "value": "4EDBE0E300000000000000000000000000000000000000000000000000000000" + }, + { "begin": 7027, "end": 7047, "name": "DUP2", "source": 0 }, + { "begin": 7027, "end": 7047, "name": "MSTORE", "source": 0 }, + { + "begin": 7027, + "end": 7047, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7027, "end": 7047, "name": "ADD", "source": 0 }, + { + "begin": 7027, + "end": 7047, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7027, "end": 7047, "name": "MLOAD", "source": 0 }, + { "begin": 7027, "end": 7047, "name": "DUP1", "source": 0 }, + { "begin": 7027, "end": 7047, "name": "SWAP2", "source": 0 }, + { "begin": 7027, "end": 7047, "name": "SUB", "source": 0 }, + { "begin": 7027, "end": 7047, "name": "SWAP1", "source": 0 }, + { "begin": 7027, "end": 7047, "name": "REVERT", "source": 0 }, + { + "begin": 6887, + "end": 7058, + "name": "tag", + "source": 0, + "value": "189" + }, + { "begin": 6887, "end": 7058, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7149, + "end": 7166, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { "begin": 7149, "end": 7166, "name": "SLOAD", "source": 0 }, + { "begin": 7136, "end": 7145, "name": "CALLVALUE", "source": 0 }, + { "begin": 7136, "end": 7166, "name": "EQ", "source": 0 }, + { + "begin": 7132, + "end": 7253, + "name": "PUSH [tag]", + "source": 0, + "value": "190" + }, + { "begin": 7132, "end": 7253, "name": "JUMPI", "source": 0 }, + { "begin": 7213, "end": 7222, "name": "CALLVALUE", "source": 0 }, + { + "begin": 7224, + "end": 7241, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { "begin": 7224, "end": 7241, "name": "SLOAD", "source": 0 }, + { + "begin": 7189, + "end": 7242, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7189, "end": 7242, "name": "MLOAD", "source": 0 }, + { + "begin": 7189, + "end": 7242, + "name": "PUSH", + "source": 0, + "value": "E6BE2DC800000000000000000000000000000000000000000000000000000000" + }, + { "begin": 7189, "end": 7242, "name": "DUP2", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "MSTORE", "source": 0 }, + { + "begin": 7189, + "end": 7242, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 7189, "end": 7242, "name": "ADD", "source": 0 }, + { + "begin": 7189, + "end": 7242, + "name": "PUSH [tag]", + "source": 0, + "value": "191" + }, + { "begin": 7189, "end": 7242, "name": "SWAP3", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "SWAP2", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "SWAP1", "source": 0 }, + { + "begin": 7189, + "end": 7242, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { + "begin": 7189, + "end": 7242, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7189, + "end": 7242, + "name": "tag", + "source": 0, + "value": "191" + }, + { "begin": 7189, "end": 7242, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7189, + "end": 7242, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 7189, "end": 7242, "name": "MLOAD", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "DUP1", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "SWAP2", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "SUB", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "SWAP1", "source": 0 }, + { "begin": 7189, "end": 7242, "name": "REVERT", "source": 0 }, + { + "begin": 7132, + "end": 7253, + "name": "tag", + "source": 0, + "value": "190" + }, + { "begin": 7132, "end": 7253, "name": "JUMPDEST", "source": 0 }, + { + "begin": 7262, + "end": 7274, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 7280, "end": 7290, "name": "CALLER", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "DUP1", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 7262, "end": 7291, "name": "DUP2", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SLOAD", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "ADD", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "DUP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "DUP3", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SSTORE", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "DUP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP2", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "POP", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "POP", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SUB", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7262, "end": 7291, "name": "MSTORE", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7262, "end": 7291, "name": "KECCAK256", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "ADD", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP2", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP2", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP2", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 7262, "end": 7291, "name": "EXP", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "DUP2", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SLOAD", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "DUP2", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 7262, "end": 7291, "name": "MUL", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "NOT", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "AND", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "DUP4", "source": 0 }, + { + "begin": 7262, + "end": 7291, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 7262, "end": 7291, "name": "AND", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "MUL", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "OR", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SWAP1", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "SSTORE", "source": 0 }, + { "begin": 7262, "end": 7291, "name": "POP", "source": 0 }, + { "begin": 7312, "end": 7321, "name": "CALLVALUE", "source": 0 }, + { + "begin": 7301, + "end": 7308, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { + "begin": 7301, + "end": 7308, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 7301, "end": 7321, "name": "DUP3", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "DUP3", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "SLOAD", "source": 0 }, + { + "begin": 7301, + "end": 7321, + "name": "PUSH [tag]", + "source": 0, + "value": "193" + }, + { "begin": 7301, "end": 7321, "name": "SWAP2", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "SWAP1", "source": 0 }, + { + "begin": 7301, + "end": 7321, + "name": "PUSH [tag]", + "source": 0, + "value": "127" + }, + { + "begin": 7301, + "end": 7321, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 7301, + "end": 7321, + "name": "tag", + "source": 0, + "value": "193" + }, + { "begin": 7301, "end": 7321, "name": "JUMPDEST", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "SWAP3", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "POP", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "POP", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "DUP2", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "SWAP1", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "SSTORE", "source": 0 }, + { "begin": 7301, "end": 7321, "name": "POP", "source": 0 }, + { + "begin": 6770, + "end": 7328, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 4614, + "end": 4650, + "name": "tag", + "source": 0, + "value": "98" + }, + { "begin": 4614, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 4614, "end": 4650, "name": "SLOAD", "source": 0 }, + { "begin": 4614, "end": 4650, "name": "DUP2", "source": 0 }, + { + "begin": 4614, + "end": 4650, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 11389, + "end": 11553, + "name": "tag", + "source": 0, + "value": "157" + }, + { "begin": 11389, "end": 11553, "name": "JUMPDEST", "source": 0 }, + { + "begin": 11522, + "end": 11546, + "name": "PUSH [tag]", + "source": 0, + "value": "195" + }, + { "begin": 11534, "end": 11545, "name": "DUP2", "source": 0 }, + { + "begin": 11522, + "end": 11533, + "name": "PUSH [tag]", + "source": 0, + "value": "196" + }, + { + "begin": 11522, + "end": 11546, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 11522, + "end": 11546, + "name": "tag", + "source": 0, + "value": "195" + }, + { "begin": 11522, "end": 11546, "name": "JUMPDEST", "source": 0 }, + { "begin": 11389, "end": 11553, "name": "POP", "source": 0 }, + { "begin": 11389, "end": 11553, "name": "POP", "source": 0 }, + { + "begin": 11389, + "end": 11553, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 10234, + "end": 11383, + "name": "tag", + "source": 0, + "value": "196" + }, + { "begin": 10234, "end": 11383, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10358, + "end": 10378, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 10395, + "end": 10407, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 10395, "end": 10414, "name": "DUP1", "source": 0 }, + { "begin": 10395, "end": 10414, "name": "SLOAD", "source": 0 }, + { "begin": 10395, "end": 10414, "name": "SWAP1", "source": 0 }, + { "begin": 10395, "end": 10414, "name": "POP", "source": 0 }, + { + "begin": 10381, + "end": 10392, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 10381, + "end": 10392, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10381, "end": 10392, "name": "SWAP1", "source": 0 }, + { "begin": 10381, "end": 10392, "name": "SLOAD", "source": 0 }, + { "begin": 10381, "end": 10392, "name": "SWAP1", "source": 0 }, + { + "begin": 10381, + "end": 10392, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 10381, "end": 10392, "name": "EXP", "source": 0 }, + { "begin": 10381, "end": 10392, "name": "SWAP1", "source": 0 }, + { "begin": 10381, "end": 10392, "name": "DIV", "source": 0 }, + { + "begin": 10381, + "end": 10392, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 10381, "end": 10392, "name": "AND", "source": 0 }, + { + "begin": 10381, + "end": 10414, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 10381, "end": 10414, "name": "AND", "source": 0 }, + { "begin": 10381, "end": 10414, "name": "LT", "source": 0 }, + { + "begin": 10381, + "end": 10474, + "name": "PUSH [tag]", + "source": 0, + "value": "198" + }, + { "begin": 10381, "end": 10474, "name": "JUMPI", "source": 0 }, + { + "begin": 10455, + "end": 10467, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 10455, "end": 10474, "name": "DUP1", "source": 0 }, + { "begin": 10455, "end": 10474, "name": "SLOAD", "source": 0 }, + { "begin": 10455, "end": 10474, "name": "SWAP1", "source": 0 }, + { "begin": 10455, "end": 10474, "name": "POP", "source": 0 }, + { + "begin": 10381, + "end": 10474, + "name": "PUSH [tag]", + "source": 0, + "value": "199" + }, + { "begin": 10381, "end": 10474, "name": "JUMP", "source": 0 }, + { + "begin": 10381, + "end": 10474, + "name": "tag", + "source": 0, + "value": "198" + }, + { "begin": 10381, "end": 10474, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10429, + "end": 10440, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { + "begin": 10429, + "end": 10440, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10429, "end": 10440, "name": "SWAP1", "source": 0 }, + { "begin": 10429, "end": 10440, "name": "SLOAD", "source": 0 }, + { "begin": 10429, "end": 10440, "name": "SWAP1", "source": 0 }, + { + "begin": 10429, + "end": 10440, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 10429, "end": 10440, "name": "EXP", "source": 0 }, + { "begin": 10429, "end": 10440, "name": "SWAP1", "source": 0 }, + { "begin": 10429, "end": 10440, "name": "DIV", "source": 0 }, + { + "begin": 10429, + "end": 10440, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 10429, "end": 10440, "name": "AND", "source": 0 }, + { + "begin": 10381, + "end": 10474, + "name": "PUSH", + "source": 0, + "value": "FF" + }, + { "begin": 10381, "end": 10474, "name": "AND", "source": 0 }, + { + "begin": 10381, + "end": 10474, + "name": "tag", + "source": 0, + "value": "199" + }, + { "begin": 10381, "end": 10474, "name": "JUMPDEST", "source": 0 }, + { "begin": 10358, "end": 10474, "name": "SWAP1", "source": 0 }, + { "begin": 10358, "end": 10474, "name": "POP", "source": 0 }, + { + "begin": 10590, + "end": 10611, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10624, "end": 10636, "name": "DUP2", "source": 0 }, + { + "begin": 10614, + "end": 10621, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { "begin": 10614, "end": 10621, "name": "SLOAD", "source": 0 }, + { + "begin": 10614, + "end": 10636, + "name": "PUSH [tag]", + "source": 0, + "value": "200" + }, + { "begin": 10614, "end": 10636, "name": "SWAP2", "source": 0 }, + { "begin": 10614, "end": 10636, "name": "SWAP1", "source": 0 }, + { + "begin": 10614, + "end": 10636, + "name": "PUSH [tag]", + "source": 0, + "value": "201" + }, + { + "begin": 10614, + "end": 10636, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 10614, + "end": 10636, + "name": "tag", + "source": 0, + "value": "200" + }, + { "begin": 10614, "end": 10636, "name": "JUMPDEST", "source": 0 }, + { "begin": 10590, "end": 10636, "name": "SWAP1", "source": 0 }, + { "begin": 10590, "end": 10636, "name": "POP", "source": 0 }, + { + "begin": 10651, + "end": 10700, + "name": "PUSH", + "source": 0, + "value": "94942738DAC5813DB86BC09E12C382AAA6824A675CFD6F834A8E2D5A964AC3C4" + }, + { + "begin": 10657, + "end": 10669, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 10657, "end": 10676, "name": "DUP1", "source": 0 }, + { "begin": 10657, "end": 10676, "name": "SLOAD", "source": 0 }, + { "begin": 10657, "end": 10676, "name": "SWAP1", "source": 0 }, + { "begin": 10657, "end": 10676, "name": "POP", "source": 0 }, + { + "begin": 10678, + "end": 10685, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { "begin": 10678, "end": 10685, "name": "SLOAD", "source": 0 }, + { "begin": 10687, "end": 10699, "name": "DUP5", "source": 0 }, + { + "begin": 10651, + "end": 10700, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 10651, "end": 10700, "name": "MLOAD", "source": 0 }, + { + "begin": 10651, + "end": 10700, + "name": "PUSH [tag]", + "source": 0, + "value": "202" + }, + { "begin": 10651, "end": 10700, "name": "SWAP4", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "SWAP3", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "SWAP2", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "SWAP1", "source": 0 }, + { + "begin": 10651, + "end": 10700, + "name": "PUSH [tag]", + "source": 0, + "value": "203" + }, + { + "begin": 10651, + "end": 10700, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 10651, + "end": 10700, + "name": "tag", + "source": 0, + "value": "202" + }, + { "begin": 10651, "end": 10700, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10651, + "end": 10700, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 10651, "end": 10700, "name": "MLOAD", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "DUP1", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "SWAP2", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "SUB", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "SWAP1", "source": 0 }, + { "begin": 10651, "end": 10700, "name": "LOG1", "source": 0 }, + { + "begin": 10715, + "end": 10723, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 10710, + "end": 11325, + "name": "tag", + "source": 0, + "value": "204" + }, + { "begin": 10710, "end": 11325, "name": "JUMPDEST", "source": 0 }, + { "begin": 10733, "end": 10745, "name": "DUP3", "source": 0 }, + { "begin": 10729, "end": 10730, "name": "DUP2", "source": 0 }, + { + "begin": 10729, + "end": 10745, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 10729, "end": 10745, "name": "AND", "source": 0 }, + { "begin": 10729, "end": 10745, "name": "LT", "source": 0 }, + { "begin": 10710, "end": 11325, "name": "ISZERO", "source": 0 }, + { + "begin": 10710, + "end": 11325, + "name": "PUSH [tag]", + "source": 0, + "value": "205" + }, + { "begin": 10710, "end": 11325, "name": "JUMPI", "source": 0 }, + { + "begin": 10885, + "end": 10903, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 10906, "end": 10917, "name": "DUP5", "source": 0 }, + { "begin": 10918, "end": 10919, "name": "DUP3", "source": 0 }, + { + "begin": 10906, + "end": 10920, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 10906, "end": 10920, "name": "AND", "source": 0 }, + { "begin": 10906, "end": 10920, "name": "DUP2", "source": 0 }, + { "begin": 10906, "end": 10920, "name": "MLOAD", "source": 0 }, + { "begin": 10906, "end": 10920, "name": "DUP2", "source": 0 }, + { "begin": 10906, "end": 10920, "name": "LT", "source": 0 }, + { + "begin": 10906, + "end": 10920, + "name": "PUSH [tag]", + "source": 0, + "value": "207" + }, + { "begin": 10906, "end": 10920, "name": "JUMPI", "source": 0 }, + { + "begin": 10906, + "end": 10920, + "name": "PUSH [tag]", + "source": 0, + "value": "208" + }, + { + "begin": 10906, + "end": 10920, + "name": "PUSH [tag]", + "source": 0, + "value": "209" + }, + { + "begin": 10906, + "end": 10920, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 10906, + "end": 10920, + "name": "tag", + "source": 0, + "value": "208" + }, + { "begin": 10906, "end": 10920, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10906, + "end": 10920, + "name": "tag", + "source": 0, + "value": "207" + }, + { "begin": 10906, "end": 10920, "name": "JUMPDEST", "source": 0 }, + { + "begin": 10906, + "end": 10920, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 10906, "end": 10920, "name": "MUL", "source": 0 }, + { + "begin": 10906, + "end": 10920, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { "begin": 10906, "end": 10920, "name": "ADD", "source": 0 }, + { "begin": 10906, "end": 10920, "name": "ADD", "source": 0 }, + { "begin": 10906, "end": 10920, "name": "MLOAD", "source": 0 }, + { "begin": 10885, "end": 10920, "name": "SWAP1", "source": 0 }, + { "begin": 10885, "end": 10920, "name": "POP", "source": 0 }, + { + "begin": 11016, + "end": 11029, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11045, + "end": 11057, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 11045, "end": 11064, "name": "DUP1", "source": 0 }, + { "begin": 11045, "end": 11064, "name": "SLOAD", "source": 0 }, + { "begin": 11045, "end": 11064, "name": "SWAP1", "source": 0 }, + { "begin": 11045, "end": 11064, "name": "POP", "source": 0 }, + { "begin": 11032, "end": 11042, "name": "DUP3", "source": 0 }, + { + "begin": 11032, + "end": 11064, + "name": "PUSH [tag]", + "source": 0, + "value": "210" + }, + { "begin": 11032, "end": 11064, "name": "SWAP2", "source": 0 }, + { "begin": 11032, "end": 11064, "name": "SWAP1", "source": 0 }, + { + "begin": 11032, + "end": 11064, + "name": "PUSH [tag]", + "source": 0, + "value": "211" + }, + { + "begin": 11032, + "end": 11064, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 11032, + "end": 11064, + "name": "tag", + "source": 0, + "value": "210" + }, + { "begin": 11032, "end": 11064, "name": "JUMPDEST", "source": 0 }, + { "begin": 11016, "end": 11064, "name": "SWAP1", "source": 0 }, + { "begin": 11016, "end": 11064, "name": "POP", "source": 0 }, + { + "begin": 11078, + "end": 11100, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11111, + "end": 11123, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 11124, "end": 11129, "name": "DUP3", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "DUP2", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "SLOAD", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "DUP2", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "LT", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH [tag]", + "source": 0, + "value": "212" + }, + { "begin": 11111, "end": 11130, "name": "JUMPI", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH [tag]", + "source": 0, + "value": "213" + }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH [tag]", + "source": 0, + "value": "209" + }, + { + "begin": 11111, + "end": 11130, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 11111, + "end": 11130, + "name": "tag", + "source": 0, + "value": "213" + }, + { "begin": 11111, "end": 11130, "name": "JUMPDEST", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "tag", + "source": 0, + "value": "212" + }, + { "begin": 11111, "end": 11130, "name": "JUMPDEST", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "SWAP1", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11111, "end": 11130, "name": "MSTORE", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11111, + "end": 11130, + "name": "KECCAK256", + "source": 0 + }, + { "begin": 11111, "end": 11130, "name": "ADD", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11111, "end": 11130, "name": "SWAP1", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "SLOAD", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "SWAP1", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 11111, "end": 11130, "name": "EXP", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "SWAP1", "source": 0 }, + { "begin": 11111, "end": 11130, "name": "DIV", "source": 0 }, + { + "begin": 11111, + "end": 11130, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 11111, "end": 11130, "name": "AND", "source": 0 }, + { "begin": 11078, "end": 11131, "name": "SWAP1", "source": 0 }, + { "begin": 11078, "end": 11131, "name": "POP", "source": 0 }, + { + "begin": 11152, + "end": 11164, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 11165, "end": 11170, "name": "DUP3", "source": 0 }, + { "begin": 11152, "end": 11171, "name": "DUP2", "source": 0 }, + { "begin": 11152, "end": 11171, "name": "SLOAD", "source": 0 }, + { "begin": 11152, "end": 11171, "name": "DUP2", "source": 0 }, + { "begin": 11152, "end": 11171, "name": "LT", "source": 0 }, + { + "begin": 11152, + "end": 11171, + "name": "PUSH [tag]", + "source": 0, + "value": "215" + }, + { "begin": 11152, "end": 11171, "name": "JUMPI", "source": 0 }, + { + "begin": 11152, + "end": 11171, + "name": "PUSH [tag]", + "source": 0, + "value": "216" + }, + { + "begin": 11152, + "end": 11171, + "name": "PUSH [tag]", + "source": 0, + "value": "209" + }, + { + "begin": 11152, + "end": 11171, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 11152, + "end": 11171, + "name": "tag", + "source": 0, + "value": "216" + }, + { "begin": 11152, "end": 11171, "name": "JUMPDEST", "source": 0 }, + { + "begin": 11152, + "end": 11171, + "name": "tag", + "source": 0, + "value": "215" + }, + { "begin": 11152, "end": 11171, "name": "JUMPDEST", "source": 0 }, + { "begin": 11152, "end": 11171, "name": "SWAP1", "source": 0 }, + { + "begin": 11152, + "end": 11171, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11152, "end": 11171, "name": "MSTORE", "source": 0 }, + { + "begin": 11152, + "end": 11171, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 11152, + "end": 11171, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11152, + "end": 11171, + "name": "KECCAK256", + "source": 0 + }, + { "begin": 11152, "end": 11171, "name": "ADD", "source": 0 }, + { + "begin": 11152, + "end": 11171, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11145, + "end": 11171, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 11145, "end": 11171, "name": "EXP", "source": 0 }, + { "begin": 11145, "end": 11171, "name": "DUP2", "source": 0 }, + { "begin": 11145, "end": 11171, "name": "SLOAD", "source": 0 }, + { "begin": 11145, "end": 11171, "name": "SWAP1", "source": 0 }, + { + "begin": 11145, + "end": 11171, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 11145, "end": 11171, "name": "MUL", "source": 0 }, + { "begin": 11145, "end": 11171, "name": "NOT", "source": 0 }, + { "begin": 11145, "end": 11171, "name": "AND", "source": 0 }, + { "begin": 11145, "end": 11171, "name": "SWAP1", "source": 0 }, + { "begin": 11145, "end": 11171, "name": "SSTORE", "source": 0 }, + { "begin": 11198, "end": 11204, "name": "DUP1", "source": 0 }, + { + "begin": 11190, + "end": 11232, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 11190, "end": 11232, "name": "AND", "source": 0 }, + { + "begin": 11190, + "end": 11232, + "name": "PUSH", + "source": 0, + "value": "7ADB26A7CFDD051FB0B5AEDD769AEAD9026D0A9EBCC7F9B4F0B34B19778243A3" + }, + { "begin": 11206, "end": 11216, "name": "DUP5", "source": 0 }, + { "begin": 11218, "end": 11231, "name": "DUP8", "source": 0 }, + { + "begin": 11190, + "end": 11232, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 11190, "end": 11232, "name": "MLOAD", "source": 0 }, + { + "begin": 11190, + "end": 11232, + "name": "PUSH [tag]", + "source": 0, + "value": "218" + }, + { "begin": 11190, "end": 11232, "name": "SWAP3", "source": 0 }, + { "begin": 11190, "end": 11232, "name": "SWAP2", "source": 0 }, + { "begin": 11190, "end": 11232, "name": "SWAP1", "source": 0 }, + { + "begin": 11190, + "end": 11232, + "name": "PUSH [tag]", + "source": 0, + "value": "102" + }, + { + "begin": 11190, + "end": 11232, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 11190, + "end": 11232, + "name": "tag", + "source": 0, + "value": "218" + }, + { "begin": 11190, "end": 11232, "name": "JUMPDEST", "source": 0 }, + { + "begin": 11190, + "end": 11232, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 11190, "end": 11232, "name": "MLOAD", "source": 0 }, + { "begin": 11190, "end": 11232, "name": "DUP1", "source": 0 }, + { "begin": 11190, "end": 11232, "name": "SWAP2", "source": 0 }, + { "begin": 11190, "end": 11232, "name": "SUB", "source": 0 }, + { "begin": 11190, "end": 11232, "name": "SWAP1", "source": 0 }, + { "begin": 11190, "end": 11232, "name": "LOG2", "source": 0 }, + { "begin": 11257, "end": 11270, "name": "DUP5", "source": 0 }, + { + "begin": 11246, + "end": 11253, + "name": "PUSH", + "source": 0, + "value": "A" + }, + { + "begin": 11246, + "end": 11253, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11246, "end": 11270, "name": "DUP3", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "DUP3", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "SLOAD", "source": 0 }, + { + "begin": 11246, + "end": 11270, + "name": "PUSH [tag]", + "source": 0, + "value": "219" + }, + { "begin": 11246, "end": 11270, "name": "SWAP2", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "SWAP1", "source": 0 }, + { + "begin": 11246, + "end": 11270, + "name": "PUSH [tag]", + "source": 0, + "value": "130" + }, + { + "begin": 11246, + "end": 11270, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 11246, + "end": 11270, + "name": "tag", + "source": 0, + "value": "219" + }, + { "begin": 11246, "end": 11270, "name": "JUMPDEST", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "SWAP3", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "POP", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "POP", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "DUP2", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "SWAP1", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "SSTORE", "source": 0 }, + { "begin": 11246, "end": 11270, "name": "POP", "source": 0 }, + { "begin": 11284, "end": 11290, "name": "DUP1", "source": 0 }, + { + "begin": 11284, + "end": 11299, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 11284, "end": 11299, "name": "AND", "source": 0 }, + { + "begin": 11284, + "end": 11314, + "name": "PUSH", + "source": 0, + "value": "8FC" + }, + { "begin": 11300, "end": 11313, "name": "DUP7", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "SWAP1", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP2", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "ISZERO", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "MUL", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "SWAP1", "source": 0 }, + { + "begin": 11284, + "end": 11314, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 11284, "end": 11314, "name": "MLOAD", "source": 0 }, + { + "begin": 11284, + "end": 11314, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11284, + "end": 11314, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 11284, "end": 11314, "name": "MLOAD", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP1", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP4", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "SUB", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP2", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP6", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP9", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP9", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "CALL", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "SWAP4", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "POP", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "POP", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "POP", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "POP", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "ISZERO", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "DUP1", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "ISZERO", "source": 0 }, + { + "begin": 11284, + "end": 11314, + "name": "PUSH [tag]", + "source": 0, + "value": "221" + }, + { "begin": 11284, "end": 11314, "name": "JUMPI", "source": 0 }, + { + "begin": 11284, + "end": 11314, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 11284, + "end": 11314, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11284, "end": 11314, "name": "DUP1", "source": 0 }, + { + "begin": 11284, + "end": 11314, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 11284, + "end": 11314, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 11284, + "end": 11314, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 11284, "end": 11314, "name": "REVERT", "source": 0 }, + { + "begin": 11284, + "end": 11314, + "name": "tag", + "source": 0, + "value": "221" + }, + { "begin": 11284, "end": 11314, "name": "JUMPDEST", "source": 0 }, + { "begin": 11284, "end": 11314, "name": "POP", "source": 0 }, + { "begin": 10752, "end": 11325, "name": "POP", "source": 0 }, + { "begin": 10752, "end": 11325, "name": "POP", "source": 0 }, + { "begin": 10752, "end": 11325, "name": "POP", "source": 0 }, + { "begin": 10747, "end": 10750, "name": "DUP1", "source": 0 }, + { "begin": 10747, "end": 10750, "name": "DUP1", "source": 0 }, + { + "begin": 10747, + "end": 10750, + "name": "PUSH [tag]", + "source": 0, + "value": "222" + }, + { "begin": 10747, "end": 10750, "name": "SWAP1", "source": 0 }, + { + "begin": 10747, + "end": 10750, + "name": "PUSH [tag]", + "source": 0, + "value": "223" + }, + { + "begin": 10747, + "end": 10750, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 10747, + "end": 10750, + "name": "tag", + "source": 0, + "value": "222" + }, + { "begin": 10747, "end": 10750, "name": "JUMPDEST", "source": 0 }, + { "begin": 10747, "end": 10750, "name": "SWAP2", "source": 0 }, + { "begin": 10747, "end": 10750, "name": "POP", "source": 0 }, + { "begin": 10747, "end": 10750, "name": "POP", "source": 0 }, + { + "begin": 10710, + "end": 11325, + "name": "PUSH [tag]", + "source": 0, + "value": "204" + }, + { "begin": 10710, "end": 11325, "name": "JUMP", "source": 0 }, + { + "begin": 10710, + "end": 11325, + "name": "tag", + "source": 0, + "value": "205" + }, + { "begin": 10710, "end": 11325, "name": "JUMPDEST", "source": 0 }, + { "begin": 10710, "end": 11325, "name": "POP", "source": 0 }, + { + "begin": 11341, + "end": 11353, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { + "begin": 11341, + "end": 11353, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11334, + "end": 11353, + "name": "PUSH [tag]", + "source": 0, + "value": "224" + }, + { "begin": 11334, "end": 11353, "name": "SWAP2", "source": 0 }, + { "begin": 11334, "end": 11353, "name": "SWAP1", "source": 0 }, + { + "begin": 11334, + "end": 11353, + "name": "PUSH [tag]", + "source": 0, + "value": "225" + }, + { + "begin": 11334, + "end": 11353, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 11334, + "end": 11353, + "name": "tag", + "source": 0, + "value": "224" + }, + { "begin": 11334, "end": 11353, "name": "JUMPDEST", "source": 0 }, + { + "begin": 11375, + "end": 11376, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 11363, + "end": 11372, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 11363, "end": 11376, "name": "DUP2", "source": 0 }, + { "begin": 11363, "end": 11376, "name": "SWAP1", "source": 0 }, + { "begin": 11363, "end": 11376, "name": "SSTORE", "source": 0 }, + { "begin": 11363, "end": 11376, "name": "POP", "source": 0 }, + { "begin": 10294, "end": 11383, "name": "POP", "source": 0 }, + { "begin": 10294, "end": 11383, "name": "POP", "source": 0 }, + { "begin": 10234, "end": 11383, "name": "POP", "source": 0 }, + { + "begin": 10234, + "end": 11383, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "225" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "SLOAD", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "0" + }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "SSTORE", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "0" + }, + { "begin": -1, "end": -1, "name": "MSTORE", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "20" + }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "0" + }, + { "begin": -1, "end": -1, "name": "KECCAK256", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP2", "source": -1 }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH [tag]", + "source": -1, + "value": "227" + }, + { "begin": -1, "end": -1, "name": "SWAP2", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH [tag]", + "source": -1, + "value": "228" + }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[in]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "227" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[out]" + }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "228" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "229" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "DUP3", "source": -1 }, + { "begin": -1, "end": -1, "name": "GT", "source": -1 }, + { "begin": -1, "end": -1, "name": "ISZERO", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH [tag]", + "source": -1, + "value": "230" + }, + { "begin": -1, "end": -1, "name": "JUMPI", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "0" + }, + { "begin": -1, "end": -1, "name": "DUP2", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "0" + }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { "begin": -1, "end": -1, "name": "SSTORE", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH", + "source": -1, + "value": "1" + }, + { "begin": -1, "end": -1, "name": "ADD", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "PUSH [tag]", + "source": -1, + "value": "229" + }, + { "begin": -1, "end": -1, "name": "JUMP", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "tag", + "source": -1, + "value": "230" + }, + { "begin": -1, "end": -1, "name": "JUMPDEST", "source": -1 }, + { "begin": -1, "end": -1, "name": "POP", "source": -1 }, + { "begin": -1, "end": -1, "name": "SWAP1", "source": -1 }, + { + "begin": -1, + "end": -1, + "name": "JUMP", + "source": -1, + "value": "[out]" + }, + { + "begin": 7, + "end": 84, + "name": "tag", + "source": 3, + "value": "231" + }, + { "begin": 7, "end": 84, "name": "JUMPDEST", "source": 3 }, + { + "begin": 44, + "end": 51, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 73, "end": 78, "name": "DUP2", "source": 3 }, + { "begin": 62, "end": 78, "name": "SWAP1", "source": 3 }, + { "begin": 62, "end": 78, "name": "POP", "source": 3 }, + { "begin": 7, "end": 84, "name": "SWAP2", "source": 3 }, + { "begin": 7, "end": 84, "name": "SWAP1", "source": 3 }, + { "begin": 7, "end": 84, "name": "POP", "source": 3 }, + { + "begin": 7, + "end": 84, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 90, + "end": 208, + "name": "tag", + "source": 3, + "value": "232" + }, + { "begin": 90, "end": 208, "name": "JUMPDEST", "source": 3 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 3, + "value": "277" + }, + { "begin": 195, "end": 200, "name": "DUP2", "source": 3 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 177, + "end": 201, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 177, + "end": 201, + "name": "tag", + "source": 3, + "value": "277" + }, + { "begin": 177, "end": 201, "name": "JUMPDEST", "source": 3 }, + { "begin": 172, "end": 175, "name": "DUP3", "source": 3 }, + { "begin": 165, "end": 202, "name": "MSTORE", "source": 3 }, + { "begin": 90, "end": 208, "name": "POP", "source": 3 }, + { "begin": 90, "end": 208, "name": "POP", "source": 3 }, + { + "begin": 90, + "end": 208, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 214, + "end": 436, + "name": "tag", + "source": 3, + "value": "27" + }, + { "begin": 214, "end": 436, "name": "JUMPDEST", "source": 3 }, + { + "begin": 307, + "end": 311, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 345, + "end": 347, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 334, "end": 343, "name": "DUP3", "source": 3 }, + { "begin": 330, "end": 348, "name": "ADD", "source": 3 }, + { "begin": 322, "end": 348, "name": "SWAP1", "source": 3 }, + { "begin": 322, "end": 348, "name": "POP", "source": 3 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 3, + "value": "279" + }, + { + "begin": 426, + "end": 427, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 415, "end": 424, "name": "DUP4", "source": 3 }, + { "begin": 411, "end": 428, "name": "ADD", "source": 3 }, + { "begin": 402, "end": 408, "name": "DUP5", "source": 3 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 358, + "end": 429, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 358, + "end": 429, + "name": "tag", + "source": 3, + "value": "279" + }, + { "begin": 358, "end": 429, "name": "JUMPDEST", "source": 3 }, + { "begin": 214, "end": 436, "name": "SWAP3", "source": 3 }, + { "begin": 214, "end": 436, "name": "SWAP2", "source": 3 }, + { "begin": 214, "end": 436, "name": "POP", "source": 3 }, + { "begin": 214, "end": 436, "name": "POP", "source": 3 }, + { + "begin": 214, + "end": 436, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 442, + "end": 519, + "name": "tag", + "source": 3, + "value": "233" + }, + { "begin": 442, "end": 519, "name": "JUMPDEST", "source": 3 }, + { + "begin": 479, + "end": 486, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 508, "end": 513, "name": "DUP2", "source": 3 }, + { "begin": 497, "end": 513, "name": "SWAP1", "source": 3 }, + { "begin": 497, "end": 513, "name": "POP", "source": 3 }, + { "begin": 442, "end": 519, "name": "SWAP2", "source": 3 }, + { "begin": 442, "end": 519, "name": "SWAP1", "source": 3 }, + { "begin": 442, "end": 519, "name": "POP", "source": 3 }, + { + "begin": 442, + "end": 519, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 525, + "end": 643, + "name": "tag", + "source": 3, + "value": "234" + }, + { "begin": 525, "end": 643, "name": "JUMPDEST", "source": 3 }, + { + "begin": 612, + "end": 636, + "name": "PUSH [tag]", + "source": 3, + "value": "282" + }, + { "begin": 630, "end": 635, "name": "DUP2", "source": 3 }, + { + "begin": 612, + "end": 636, + "name": "PUSH [tag]", + "source": 3, + "value": "233" + }, + { + "begin": 612, + "end": 636, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 612, + "end": 636, + "name": "tag", + "source": 3, + "value": "282" + }, + { "begin": 612, "end": 636, "name": "JUMPDEST", "source": 3 }, + { "begin": 607, "end": 610, "name": "DUP3", "source": 3 }, + { "begin": 600, "end": 637, "name": "MSTORE", "source": 3 }, + { "begin": 525, "end": 643, "name": "POP", "source": 3 }, + { "begin": 525, "end": 643, "name": "POP", "source": 3 }, + { + "begin": 525, + "end": 643, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 649, + "end": 871, + "name": "tag", + "source": 3, + "value": "36" + }, + { "begin": 649, "end": 871, "name": "JUMPDEST", "source": 3 }, + { + "begin": 742, + "end": 746, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 780, + "end": 782, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 769, "end": 778, "name": "DUP3", "source": 3 }, + { "begin": 765, "end": 783, "name": "ADD", "source": 3 }, + { "begin": 757, "end": 783, "name": "SWAP1", "source": 3 }, + { "begin": 757, "end": 783, "name": "POP", "source": 3 }, + { + "begin": 793, + "end": 864, + "name": "PUSH [tag]", + "source": 3, + "value": "284" + }, + { + "begin": 861, + "end": 862, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 850, "end": 859, "name": "DUP4", "source": 3 }, + { "begin": 846, "end": 863, "name": "ADD", "source": 3 }, + { "begin": 837, "end": 843, "name": "DUP5", "source": 3 }, + { + "begin": 793, + "end": 864, + "name": "PUSH [tag]", + "source": 3, + "value": "234" + }, + { + "begin": 793, + "end": 864, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 793, + "end": 864, + "name": "tag", + "source": 3, + "value": "284" + }, + { "begin": 793, "end": 864, "name": "JUMPDEST", "source": 3 }, + { "begin": 649, "end": 871, "name": "SWAP3", "source": 3 }, + { "begin": 649, "end": 871, "name": "SWAP2", "source": 3 }, + { "begin": 649, "end": 871, "name": "POP", "source": 3 }, + { "begin": 649, "end": 871, "name": "POP", "source": 3 }, + { + "begin": 649, + "end": 871, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 877, + "end": 952, + "name": "tag", + "source": 3, + "value": "235" + }, + { "begin": 877, "end": 952, "name": "JUMPDEST", "source": 3 }, + { + "begin": 910, + "end": 916, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 943, + "end": 945, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 937, "end": 946, "name": "MLOAD", "source": 3 }, + { "begin": 927, "end": 946, "name": "SWAP1", "source": 3 }, + { "begin": 927, "end": 946, "name": "POP", "source": 3 }, + { "begin": 877, "end": 952, "name": "SWAP1", "source": 3 }, + { + "begin": 877, + "end": 952, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 958, + "end": 1075, + "name": "tag", + "source": 3, + "value": "236" + }, + { "begin": 958, "end": 1075, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1067, + "end": 1068, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1064, "end": 1065, "name": "DUP1", "source": 3 }, + { "begin": 1057, "end": 1069, "name": "REVERT", "source": 3 }, + { + "begin": 1081, + "end": 1198, + "name": "tag", + "source": 3, + "value": "237" + }, + { "begin": 1081, "end": 1198, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1190, + "end": 1191, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1187, "end": 1188, "name": "DUP1", "source": 3 }, + { "begin": 1180, "end": 1192, "name": "REVERT", "source": 3 }, + { + "begin": 1204, + "end": 1326, + "name": "tag", + "source": 3, + "value": "238" + }, + { "begin": 1204, "end": 1326, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1277, + "end": 1301, + "name": "PUSH [tag]", + "source": 3, + "value": "289" + }, + { "begin": 1295, "end": 1300, "name": "DUP2", "source": 3 }, + { + "begin": 1277, + "end": 1301, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 1277, + "end": 1301, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 1277, + "end": 1301, + "name": "tag", + "source": 3, + "value": "289" + }, + { "begin": 1277, "end": 1301, "name": "JUMPDEST", "source": 3 }, + { "begin": 1270, "end": 1275, "name": "DUP2", "source": 3 }, + { "begin": 1267, "end": 1302, "name": "EQ", "source": 3 }, + { + "begin": 1257, + "end": 1320, + "name": "PUSH [tag]", + "source": 3, + "value": "290" + }, + { "begin": 1257, "end": 1320, "name": "JUMPI", "source": 3 }, + { + "begin": 1316, + "end": 1317, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1313, "end": 1314, "name": "DUP1", "source": 3 }, + { "begin": 1306, "end": 1318, "name": "REVERT", "source": 3 }, + { + "begin": 1257, + "end": 1320, + "name": "tag", + "source": 3, + "value": "290" + }, + { "begin": 1257, "end": 1320, "name": "JUMPDEST", "source": 3 }, + { "begin": 1204, "end": 1326, "name": "POP", "source": 3 }, + { + "begin": 1204, + "end": 1326, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1332, + "end": 1471, + "name": "tag", + "source": 3, + "value": "239" + }, + { "begin": 1332, "end": 1471, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1378, + "end": 1383, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1416, "end": 1422, "name": "DUP2", "source": 3 }, + { + "begin": 1403, + "end": 1423, + "name": "CALLDATALOAD", + "source": 3 + }, + { "begin": 1394, "end": 1423, "name": "SWAP1", "source": 3 }, + { "begin": 1394, "end": 1423, "name": "POP", "source": 3 }, + { + "begin": 1432, + "end": 1465, + "name": "PUSH [tag]", + "source": 3, + "value": "292" + }, + { "begin": 1459, "end": 1464, "name": "DUP2", "source": 3 }, + { + "begin": 1432, + "end": 1465, + "name": "PUSH [tag]", + "source": 3, + "value": "238" + }, + { + "begin": 1432, + "end": 1465, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 1432, + "end": 1465, + "name": "tag", + "source": 3, + "value": "292" + }, + { "begin": 1432, "end": 1465, "name": "JUMPDEST", "source": 3 }, + { "begin": 1332, "end": 1471, "name": "SWAP3", "source": 3 }, + { "begin": 1332, "end": 1471, "name": "SWAP2", "source": 3 }, + { "begin": 1332, "end": 1471, "name": "POP", "source": 3 }, + { "begin": 1332, "end": 1471, "name": "POP", "source": 3 }, + { + "begin": 1332, + "end": 1471, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1477, + "end": 1594, + "name": "tag", + "source": 3, + "value": "240" + }, + { "begin": 1477, "end": 1594, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1586, + "end": 1587, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1583, "end": 1584, "name": "DUP1", "source": 3 }, + { "begin": 1576, "end": 1588, "name": "REVERT", "source": 3 }, + { + "begin": 1600, + "end": 1702, + "name": "tag", + "source": 3, + "value": "241" + }, + { "begin": 1600, "end": 1702, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1641, + "end": 1647, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 1692, + "end": 1694, + "name": "PUSH", + "source": 3, + "value": "1F" + }, + { "begin": 1688, "end": 1695, "name": "NOT", "source": 3 }, + { + "begin": 1683, + "end": 1685, + "name": "PUSH", + "source": 3, + "value": "1F" + }, + { "begin": 1676, "end": 1681, "name": "DUP4", "source": 3 }, + { "begin": 1672, "end": 1686, "name": "ADD", "source": 3 }, + { "begin": 1668, "end": 1696, "name": "AND", "source": 3 }, + { "begin": 1658, "end": 1696, "name": "SWAP1", "source": 3 }, + { "begin": 1658, "end": 1696, "name": "POP", "source": 3 }, + { "begin": 1600, "end": 1702, "name": "SWAP2", "source": 3 }, + { "begin": 1600, "end": 1702, "name": "SWAP1", "source": 3 }, + { "begin": 1600, "end": 1702, "name": "POP", "source": 3 }, + { + "begin": 1600, + "end": 1702, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 1708, + "end": 1888, + "name": "tag", + "source": 3, + "value": "242" + }, + { "begin": 1708, "end": 1888, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1756, + "end": 1833, + "name": "PUSH", + "source": 3, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1753, + "end": 1754, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1746, "end": 1834, "name": "MSTORE", "source": 3 }, + { + "begin": 1853, + "end": 1857, + "name": "PUSH", + "source": 3, + "value": "41" + }, + { + "begin": 1850, + "end": 1851, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 1843, "end": 1858, "name": "MSTORE", "source": 3 }, + { + "begin": 1877, + "end": 1881, + "name": "PUSH", + "source": 3, + "value": "24" + }, + { + "begin": 1874, + "end": 1875, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 1867, "end": 1882, "name": "REVERT", "source": 3 }, + { + "begin": 1894, + "end": 2175, + "name": "tag", + "source": 3, + "value": "243" + }, + { "begin": 1894, "end": 2175, "name": "JUMPDEST", "source": 3 }, + { + "begin": 1977, + "end": 2004, + "name": "PUSH [tag]", + "source": 3, + "value": "297" + }, + { "begin": 1999, "end": 2003, "name": "DUP3", "source": 3 }, + { + "begin": 1977, + "end": 2004, + "name": "PUSH [tag]", + "source": 3, + "value": "241" + }, + { + "begin": 1977, + "end": 2004, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 1977, + "end": 2004, + "name": "tag", + "source": 3, + "value": "297" + }, + { "begin": 1977, "end": 2004, "name": "JUMPDEST", "source": 3 }, + { "begin": 1969, "end": 1975, "name": "DUP2", "source": 3 }, + { "begin": 1965, "end": 2005, "name": "ADD", "source": 3 }, + { "begin": 2107, "end": 2113, "name": "DUP2", "source": 3 }, + { "begin": 2095, "end": 2105, "name": "DUP2", "source": 3 }, + { "begin": 2092, "end": 2114, "name": "LT", "source": 3 }, + { + "begin": 2071, + "end": 2089, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 2059, "end": 2069, "name": "DUP3", "source": 3 }, + { "begin": 2056, "end": 2090, "name": "GT", "source": 3 }, + { "begin": 2053, "end": 2115, "name": "OR", "source": 3 }, + { "begin": 2050, "end": 2138, "name": "ISZERO", "source": 3 }, + { + "begin": 2050, + "end": 2138, + "name": "PUSH [tag]", + "source": 3, + "value": "298" + }, + { "begin": 2050, "end": 2138, "name": "JUMPI", "source": 3 }, + { + "begin": 2118, + "end": 2136, + "name": "PUSH [tag]", + "source": 3, + "value": "299" + }, + { + "begin": 2118, + "end": 2136, + "name": "PUSH [tag]", + "source": 3, + "value": "242" + }, + { + "begin": 2118, + "end": 2136, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2118, + "end": 2136, + "name": "tag", + "source": 3, + "value": "299" + }, + { "begin": 2118, "end": 2136, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2050, + "end": 2138, + "name": "tag", + "source": 3, + "value": "298" + }, + { "begin": 2050, "end": 2138, "name": "JUMPDEST", "source": 3 }, + { "begin": 2158, "end": 2168, "name": "DUP1", "source": 3 }, + { + "begin": 2154, + "end": 2156, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 2147, "end": 2169, "name": "MSTORE", "source": 3 }, + { "begin": 1937, "end": 2175, "name": "POP", "source": 3 }, + { "begin": 1894, "end": 2175, "name": "POP", "source": 3 }, + { "begin": 1894, "end": 2175, "name": "POP", "source": 3 }, + { + "begin": 1894, + "end": 2175, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 2181, + "end": 2310, + "name": "tag", + "source": 3, + "value": "244" + }, + { "begin": 2181, "end": 2310, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2215, + "end": 2221, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 2242, + "end": 2262, + "name": "PUSH [tag]", + "source": 3, + "value": "301" + }, + { + "begin": 2242, + "end": 2262, + "name": "PUSH [tag]", + "source": 3, + "value": "235" + }, + { + "begin": 2242, + "end": 2262, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2242, + "end": 2262, + "name": "tag", + "source": 3, + "value": "301" + }, + { "begin": 2242, "end": 2262, "name": "JUMPDEST", "source": 3 }, + { "begin": 2232, "end": 2262, "name": "SWAP1", "source": 3 }, + { "begin": 2232, "end": 2262, "name": "POP", "source": 3 }, + { + "begin": 2271, + "end": 2304, + "name": "PUSH [tag]", + "source": 3, + "value": "302" + }, + { "begin": 2299, "end": 2303, "name": "DUP3", "source": 3 }, + { "begin": 2291, "end": 2297, "name": "DUP3", "source": 3 }, + { + "begin": 2271, + "end": 2304, + "name": "PUSH [tag]", + "source": 3, + "value": "243" + }, + { + "begin": 2271, + "end": 2304, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2271, + "end": 2304, + "name": "tag", + "source": 3, + "value": "302" + }, + { "begin": 2271, "end": 2304, "name": "JUMPDEST", "source": 3 }, + { "begin": 2181, "end": 2310, "name": "SWAP2", "source": 3 }, + { "begin": 2181, "end": 2310, "name": "SWAP1", "source": 3 }, + { "begin": 2181, "end": 2310, "name": "POP", "source": 3 }, + { + "begin": 2181, + "end": 2310, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 2316, + "end": 2627, + "name": "tag", + "source": 3, + "value": "245" + }, + { "begin": 2316, "end": 2627, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2393, + "end": 2397, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 2483, + "end": 2501, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 2475, "end": 2481, "name": "DUP3", "source": 3 }, + { "begin": 2472, "end": 2502, "name": "GT", "source": 3 }, + { "begin": 2469, "end": 2525, "name": "ISZERO", "source": 3 }, + { + "begin": 2469, + "end": 2525, + "name": "PUSH [tag]", + "source": 3, + "value": "304" + }, + { "begin": 2469, "end": 2525, "name": "JUMPI", "source": 3 }, + { + "begin": 2505, + "end": 2523, + "name": "PUSH [tag]", + "source": 3, + "value": "305" + }, + { + "begin": 2505, + "end": 2523, + "name": "PUSH [tag]", + "source": 3, + "value": "242" + }, + { + "begin": 2505, + "end": 2523, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2505, + "end": 2523, + "name": "tag", + "source": 3, + "value": "305" + }, + { "begin": 2505, "end": 2523, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2469, + "end": 2525, + "name": "tag", + "source": 3, + "value": "304" + }, + { "begin": 2469, "end": 2525, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2555, + "end": 2559, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 2547, "end": 2553, "name": "DUP3", "source": 3 }, + { "begin": 2543, "end": 2560, "name": "MUL", "source": 3 }, + { "begin": 2535, "end": 2560, "name": "SWAP1", "source": 3 }, + { "begin": 2535, "end": 2560, "name": "POP", "source": 3 }, + { + "begin": 2615, + "end": 2619, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 2609, "end": 2613, "name": "DUP2", "source": 3 }, + { "begin": 2605, "end": 2620, "name": "ADD", "source": 3 }, + { "begin": 2597, "end": 2620, "name": "SWAP1", "source": 3 }, + { "begin": 2597, "end": 2620, "name": "POP", "source": 3 }, + { "begin": 2316, "end": 2627, "name": "SWAP2", "source": 3 }, + { "begin": 2316, "end": 2627, "name": "SWAP1", "source": 3 }, + { "begin": 2316, "end": 2627, "name": "POP", "source": 3 }, + { + "begin": 2316, + "end": 2627, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 2633, + "end": 2750, + "name": "tag", + "source": 3, + "value": "246" + }, + { "begin": 2633, "end": 2750, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2742, + "end": 2743, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 2739, "end": 2740, "name": "DUP1", "source": 3 }, + { "begin": 2732, "end": 2744, "name": "REVERT", "source": 3 }, + { + "begin": 2773, + "end": 3483, + "name": "tag", + "source": 3, + "value": "247" + }, + { "begin": 2773, "end": 3483, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2869, + "end": 2874, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 2894, + "end": 2975, + "name": "PUSH [tag]", + "source": 3, + "value": "308" + }, + { + "begin": 2910, + "end": 2974, + "name": "PUSH [tag]", + "source": 3, + "value": "309" + }, + { "begin": 2967, "end": 2973, "name": "DUP5", "source": 3 }, + { + "begin": 2910, + "end": 2974, + "name": "PUSH [tag]", + "source": 3, + "value": "245" + }, + { + "begin": 2910, + "end": 2974, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2910, + "end": 2974, + "name": "tag", + "source": 3, + "value": "309" + }, + { "begin": 2910, "end": 2974, "name": "JUMPDEST", "source": 3 }, + { + "begin": 2894, + "end": 2975, + "name": "PUSH [tag]", + "source": 3, + "value": "244" + }, + { + "begin": 2894, + "end": 2975, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 2894, + "end": 2975, + "name": "tag", + "source": 3, + "value": "308" + }, + { "begin": 2894, "end": 2975, "name": "JUMPDEST", "source": 3 }, + { "begin": 2885, "end": 2975, "name": "SWAP1", "source": 3 }, + { "begin": 2885, "end": 2975, "name": "POP", "source": 3 }, + { "begin": 2995, "end": 3000, "name": "DUP1", "source": 3 }, + { "begin": 3024, "end": 3030, "name": "DUP4", "source": 3 }, + { "begin": 3017, "end": 3022, "name": "DUP3", "source": 3 }, + { "begin": 3010, "end": 3031, "name": "MSTORE", "source": 3 }, + { + "begin": 3058, + "end": 3062, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 3051, "end": 3056, "name": "DUP3", "source": 3 }, + { "begin": 3047, "end": 3063, "name": "ADD", "source": 3 }, + { "begin": 3040, "end": 3063, "name": "SWAP1", "source": 3 }, + { "begin": 3040, "end": 3063, "name": "POP", "source": 3 }, + { + "begin": 3111, + "end": 3115, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 3103, "end": 3109, "name": "DUP5", "source": 3 }, + { "begin": 3099, "end": 3116, "name": "MUL", "source": 3 }, + { "begin": 3091, "end": 3097, "name": "DUP4", "source": 3 }, + { "begin": 3087, "end": 3117, "name": "ADD", "source": 3 }, + { "begin": 3140, "end": 3143, "name": "DUP6", "source": 3 }, + { "begin": 3132, "end": 3138, "name": "DUP2", "source": 3 }, + { "begin": 3129, "end": 3144, "name": "GT", "source": 3 }, + { "begin": 3126, "end": 3248, "name": "ISZERO", "source": 3 }, + { + "begin": 3126, + "end": 3248, + "name": "PUSH [tag]", + "source": 3, + "value": "310" + }, + { "begin": 3126, "end": 3248, "name": "JUMPI", "source": 3 }, + { + "begin": 3159, + "end": 3238, + "name": "PUSH [tag]", + "source": 3, + "value": "311" + }, + { + "begin": 3159, + "end": 3238, + "name": "PUSH [tag]", + "source": 3, + "value": "246" + }, + { + "begin": 3159, + "end": 3238, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 3159, + "end": 3238, + "name": "tag", + "source": 3, + "value": "311" + }, + { "begin": 3159, "end": 3238, "name": "JUMPDEST", "source": 3 }, + { + "begin": 3126, + "end": 3248, + "name": "tag", + "source": 3, + "value": "310" + }, + { "begin": 3126, "end": 3248, "name": "JUMPDEST", "source": 3 }, + { "begin": 3274, "end": 3280, "name": "DUP4", "source": 3 }, + { + "begin": 3257, + "end": 3477, + "name": "tag", + "source": 3, + "value": "312" + }, + { "begin": 3257, "end": 3477, "name": "JUMPDEST", "source": 3 }, + { "begin": 3291, "end": 3297, "name": "DUP2", "source": 3 }, + { "begin": 3286, "end": 3289, "name": "DUP2", "source": 3 }, + { "begin": 3283, "end": 3298, "name": "LT", "source": 3 }, + { "begin": 3257, "end": 3477, "name": "ISZERO", "source": 3 }, + { + "begin": 3257, + "end": 3477, + "name": "PUSH [tag]", + "source": 3, + "value": "314" + }, + { "begin": 3257, "end": 3477, "name": "JUMPI", "source": 3 }, + { "begin": 3366, "end": 3369, "name": "DUP1", "source": 3 }, + { + "begin": 3395, + "end": 3432, + "name": "PUSH [tag]", + "source": 3, + "value": "315" + }, + { "begin": 3428, "end": 3431, "name": "DUP9", "source": 3 }, + { "begin": 3416, "end": 3426, "name": "DUP3", "source": 3 }, + { + "begin": 3395, + "end": 3432, + "name": "PUSH [tag]", + "source": 3, + "value": "239" + }, + { + "begin": 3395, + "end": 3432, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 3395, + "end": 3432, + "name": "tag", + "source": 3, + "value": "315" + }, + { "begin": 3395, "end": 3432, "name": "JUMPDEST", "source": 3 }, + { "begin": 3390, "end": 3393, "name": "DUP5", "source": 3 }, + { "begin": 3383, "end": 3433, "name": "MSTORE", "source": 3 }, + { + "begin": 3462, + "end": 3466, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 3457, "end": 3460, "name": "DUP5", "source": 3 }, + { "begin": 3453, "end": 3467, "name": "ADD", "source": 3 }, + { "begin": 3446, "end": 3467, "name": "SWAP4", "source": 3 }, + { "begin": 3446, "end": 3467, "name": "POP", "source": 3 }, + { "begin": 3333, "end": 3477, "name": "POP", "source": 3 }, + { + "begin": 3317, + "end": 3321, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 3312, "end": 3315, "name": "DUP2", "source": 3 }, + { "begin": 3308, "end": 3322, "name": "ADD", "source": 3 }, + { "begin": 3301, "end": 3322, "name": "SWAP1", "source": 3 }, + { "begin": 3301, "end": 3322, "name": "POP", "source": 3 }, + { + "begin": 3257, + "end": 3477, + "name": "PUSH [tag]", + "source": 3, + "value": "312" + }, + { "begin": 3257, "end": 3477, "name": "JUMP", "source": 3 }, + { + "begin": 3257, + "end": 3477, + "name": "tag", + "source": 3, + "value": "314" + }, + { "begin": 3257, "end": 3477, "name": "JUMPDEST", "source": 3 }, + { "begin": 3261, "end": 3282, "name": "POP", "source": 3 }, + { "begin": 2875, "end": 3483, "name": "POP", "source": 3 }, + { "begin": 2875, "end": 3483, "name": "POP", "source": 3 }, + { "begin": 2773, "end": 3483, "name": "SWAP4", "source": 3 }, + { "begin": 2773, "end": 3483, "name": "SWAP3", "source": 3 }, + { "begin": 2773, "end": 3483, "name": "POP", "source": 3 }, + { "begin": 2773, "end": 3483, "name": "POP", "source": 3 }, + { "begin": 2773, "end": 3483, "name": "POP", "source": 3 }, + { + "begin": 2773, + "end": 3483, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 3506, + "end": 3876, + "name": "tag", + "source": 3, + "value": "248" + }, + { "begin": 3506, "end": 3876, "name": "JUMPDEST", "source": 3 }, + { + "begin": 3577, + "end": 3582, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 3626, "end": 3629, "name": "DUP3", "source": 3 }, + { + "begin": 3619, + "end": 3623, + "name": "PUSH", + "source": 3, + "value": "1F" + }, + { "begin": 3611, "end": 3617, "name": "DUP4", "source": 3 }, + { "begin": 3607, "end": 3624, "name": "ADD", "source": 3 }, + { "begin": 3603, "end": 3630, "name": "SLT", "source": 3 }, + { + "begin": 3593, + "end": 3715, + "name": "PUSH [tag]", + "source": 3, + "value": "317" + }, + { "begin": 3593, "end": 3715, "name": "JUMPI", "source": 3 }, + { + "begin": 3634, + "end": 3713, + "name": "PUSH [tag]", + "source": 3, + "value": "318" + }, + { + "begin": 3634, + "end": 3713, + "name": "PUSH [tag]", + "source": 3, + "value": "240" + }, + { + "begin": 3634, + "end": 3713, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 3634, + "end": 3713, + "name": "tag", + "source": 3, + "value": "318" + }, + { "begin": 3634, "end": 3713, "name": "JUMPDEST", "source": 3 }, + { + "begin": 3593, + "end": 3715, + "name": "tag", + "source": 3, + "value": "317" + }, + { "begin": 3593, "end": 3715, "name": "JUMPDEST", "source": 3 }, + { "begin": 3751, "end": 3757, "name": "DUP2", "source": 3 }, + { + "begin": 3738, + "end": 3758, + "name": "CALLDATALOAD", + "source": 3 + }, + { + "begin": 3776, + "end": 3870, + "name": "PUSH [tag]", + "source": 3, + "value": "319" + }, + { "begin": 3866, "end": 3869, "name": "DUP5", "source": 3 }, + { "begin": 3858, "end": 3864, "name": "DUP3", "source": 3 }, + { + "begin": 3851, + "end": 3855, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 3843, "end": 3849, "name": "DUP7", "source": 3 }, + { "begin": 3839, "end": 3856, "name": "ADD", "source": 3 }, + { + "begin": 3776, + "end": 3870, + "name": "PUSH [tag]", + "source": 3, + "value": "247" + }, + { + "begin": 3776, + "end": 3870, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 3776, + "end": 3870, + "name": "tag", + "source": 3, + "value": "319" + }, + { "begin": 3776, "end": 3870, "name": "JUMPDEST", "source": 3 }, + { "begin": 3767, "end": 3870, "name": "SWAP2", "source": 3 }, + { "begin": 3767, "end": 3870, "name": "POP", "source": 3 }, + { "begin": 3583, "end": 3876, "name": "POP", "source": 3 }, + { "begin": 3506, "end": 3876, "name": "SWAP3", "source": 3 }, + { "begin": 3506, "end": 3876, "name": "SWAP2", "source": 3 }, + { "begin": 3506, "end": 3876, "name": "POP", "source": 3 }, + { "begin": 3506, "end": 3876, "name": "POP", "source": 3 }, + { + "begin": 3506, + "end": 3876, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 3882, + "end": 4566, + "name": "tag", + "source": 3, + "value": "40" + }, + { "begin": 3882, "end": 4566, "name": "JUMPDEST", "source": 3 }, + { + "begin": 3975, + "end": 3981, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 3983, "end": 3989, "name": "DUP1", "source": 3 }, + { + "begin": 4032, + "end": 4034, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 4020, "end": 4029, "name": "DUP4", "source": 3 }, + { "begin": 4011, "end": 4018, "name": "DUP6", "source": 3 }, + { "begin": 4007, "end": 4030, "name": "SUB", "source": 3 }, + { "begin": 4003, "end": 4035, "name": "SLT", "source": 3 }, + { "begin": 4000, "end": 4119, "name": "ISZERO", "source": 3 }, + { + "begin": 4000, + "end": 4119, + "name": "PUSH [tag]", + "source": 3, + "value": "321" + }, + { "begin": 4000, "end": 4119, "name": "JUMPI", "source": 3 }, + { + "begin": 4038, + "end": 4117, + "name": "PUSH [tag]", + "source": 3, + "value": "322" + }, + { + "begin": 4038, + "end": 4117, + "name": "PUSH [tag]", + "source": 3, + "value": "236" + }, + { + "begin": 4038, + "end": 4117, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 4038, + "end": 4117, + "name": "tag", + "source": 3, + "value": "322" + }, + { "begin": 4038, "end": 4117, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4000, + "end": 4119, + "name": "tag", + "source": 3, + "value": "321" + }, + { "begin": 4000, "end": 4119, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4158, + "end": 4159, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 4183, + "end": 4236, + "name": "PUSH [tag]", + "source": 3, + "value": "323" + }, + { "begin": 4228, "end": 4235, "name": "DUP6", "source": 3 }, + { "begin": 4219, "end": 4225, "name": "DUP3", "source": 3 }, + { "begin": 4208, "end": 4217, "name": "DUP7", "source": 3 }, + { "begin": 4204, "end": 4226, "name": "ADD", "source": 3 }, + { + "begin": 4183, + "end": 4236, + "name": "PUSH [tag]", + "source": 3, + "value": "239" + }, + { + "begin": 4183, + "end": 4236, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 4183, + "end": 4236, + "name": "tag", + "source": 3, + "value": "323" + }, + { "begin": 4183, "end": 4236, "name": "JUMPDEST", "source": 3 }, + { "begin": 4173, "end": 4236, "name": "SWAP3", "source": 3 }, + { "begin": 4173, "end": 4236, "name": "POP", "source": 3 }, + { "begin": 4129, "end": 4246, "name": "POP", "source": 3 }, + { + "begin": 4313, + "end": 4315, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 4302, "end": 4311, "name": "DUP4", "source": 3 }, + { "begin": 4298, "end": 4316, "name": "ADD", "source": 3 }, + { + "begin": 4285, + "end": 4317, + "name": "CALLDATALOAD", + "source": 3 + }, + { + "begin": 4344, + "end": 4362, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 4336, "end": 4342, "name": "DUP2", "source": 3 }, + { "begin": 4333, "end": 4363, "name": "GT", "source": 3 }, + { "begin": 4330, "end": 4447, "name": "ISZERO", "source": 3 }, + { + "begin": 4330, + "end": 4447, + "name": "PUSH [tag]", + "source": 3, + "value": "324" + }, + { "begin": 4330, "end": 4447, "name": "JUMPI", "source": 3 }, + { + "begin": 4366, + "end": 4445, + "name": "PUSH [tag]", + "source": 3, + "value": "325" + }, + { + "begin": 4366, + "end": 4445, + "name": "PUSH [tag]", + "source": 3, + "value": "237" + }, + { + "begin": 4366, + "end": 4445, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 4366, + "end": 4445, + "name": "tag", + "source": 3, + "value": "325" + }, + { "begin": 4366, "end": 4445, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4330, + "end": 4447, + "name": "tag", + "source": 3, + "value": "324" + }, + { "begin": 4330, "end": 4447, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4471, + "end": 4549, + "name": "PUSH [tag]", + "source": 3, + "value": "326" + }, + { "begin": 4541, "end": 4548, "name": "DUP6", "source": 3 }, + { "begin": 4532, "end": 4538, "name": "DUP3", "source": 3 }, + { "begin": 4521, "end": 4530, "name": "DUP7", "source": 3 }, + { "begin": 4517, "end": 4539, "name": "ADD", "source": 3 }, + { + "begin": 4471, + "end": 4549, + "name": "PUSH [tag]", + "source": 3, + "value": "248" + }, + { + "begin": 4471, + "end": 4549, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 4471, + "end": 4549, + "name": "tag", + "source": 3, + "value": "326" + }, + { "begin": 4471, "end": 4549, "name": "JUMPDEST", "source": 3 }, + { "begin": 4461, "end": 4549, "name": "SWAP2", "source": 3 }, + { "begin": 4461, "end": 4549, "name": "POP", "source": 3 }, + { "begin": 4256, "end": 4559, "name": "POP", "source": 3 }, + { "begin": 3882, "end": 4566, "name": "SWAP3", "source": 3 }, + { "begin": 3882, "end": 4566, "name": "POP", "source": 3 }, + { "begin": 3882, "end": 4566, "name": "SWAP3", "source": 3 }, + { "begin": 3882, "end": 4566, "name": "SWAP1", "source": 3 }, + { "begin": 3882, "end": 4566, "name": "POP", "source": 3 }, + { + "begin": 3882, + "end": 4566, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 4572, + "end": 4752, + "name": "tag", + "source": 3, + "value": "111" + }, + { "begin": 4572, "end": 4752, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4620, + "end": 4697, + "name": "PUSH", + "source": 3, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 4617, + "end": 4618, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 4610, "end": 4698, "name": "MSTORE", "source": 3 }, + { + "begin": 4717, + "end": 4721, + "name": "PUSH", + "source": 3, + "value": "21" + }, + { + "begin": 4714, + "end": 4715, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 4707, "end": 4722, "name": "MSTORE", "source": 3 }, + { + "begin": 4741, + "end": 4745, + "name": "PUSH", + "source": 3, + "value": "24" + }, + { + "begin": 4738, + "end": 4739, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 4731, "end": 4746, "name": "REVERT", "source": 3 }, + { + "begin": 4758, + "end": 4879, + "name": "tag", + "source": 3, + "value": "249" + }, + { "begin": 4758, "end": 4879, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4847, + "end": 4848, + "name": "PUSH", + "source": 3, + "value": "3" + }, + { "begin": 4840, "end": 4845, "name": "DUP2", "source": 3 }, + { "begin": 4837, "end": 4849, "name": "LT", "source": 3 }, + { + "begin": 4827, + "end": 4873, + "name": "PUSH [tag]", + "source": 3, + "value": "329" + }, + { "begin": 4827, "end": 4873, "name": "JUMPI", "source": 3 }, + { + "begin": 4853, + "end": 4871, + "name": "PUSH [tag]", + "source": 3, + "value": "330" + }, + { + "begin": 4853, + "end": 4871, + "name": "PUSH [tag]", + "source": 3, + "value": "111" + }, + { + "begin": 4853, + "end": 4871, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 4853, + "end": 4871, + "name": "tag", + "source": 3, + "value": "330" + }, + { "begin": 4853, "end": 4871, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4827, + "end": 4873, + "name": "tag", + "source": 3, + "value": "329" + }, + { "begin": 4827, "end": 4873, "name": "JUMPDEST", "source": 3 }, + { "begin": 4758, "end": 4879, "name": "POP", "source": 3 }, + { + "begin": 4758, + "end": 4879, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 4885, + "end": 5028, + "name": "tag", + "source": 3, + "value": "250" + }, + { "begin": 4885, "end": 5028, "name": "JUMPDEST", "source": 3 }, + { + "begin": 4938, + "end": 4945, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 4967, "end": 4972, "name": "DUP2", "source": 3 }, + { "begin": 4956, "end": 4972, "name": "SWAP1", "source": 3 }, + { "begin": 4956, "end": 4972, "name": "POP", "source": 3 }, + { + "begin": 4973, + "end": 5022, + "name": "PUSH [tag]", + "source": 3, + "value": "332" + }, + { "begin": 5016, "end": 5021, "name": "DUP3", "source": 3 }, + { + "begin": 4973, + "end": 5022, + "name": "PUSH [tag]", + "source": 3, + "value": "249" + }, + { + "begin": 4973, + "end": 5022, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 4973, + "end": 5022, + "name": "tag", + "source": 3, + "value": "332" + }, + { "begin": 4973, "end": 5022, "name": "JUMPDEST", "source": 3 }, + { "begin": 4885, "end": 5028, "name": "SWAP2", "source": 3 }, + { "begin": 4885, "end": 5028, "name": "SWAP1", "source": 3 }, + { "begin": 4885, "end": 5028, "name": "POP", "source": 3 }, + { + "begin": 4885, + "end": 5028, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 5034, + "end": 5177, + "name": "tag", + "source": 3, + "value": "251" + }, + { "begin": 5034, "end": 5177, "name": "JUMPDEST", "source": 3 }, + { + "begin": 5098, + "end": 5107, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 5131, + "end": 5171, + "name": "PUSH [tag]", + "source": 3, + "value": "334" + }, + { "begin": 5165, "end": 5170, "name": "DUP3", "source": 3 }, + { + "begin": 5131, + "end": 5171, + "name": "PUSH [tag]", + "source": 3, + "value": "250" + }, + { + "begin": 5131, + "end": 5171, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 5131, + "end": 5171, + "name": "tag", + "source": 3, + "value": "334" + }, + { "begin": 5131, "end": 5171, "name": "JUMPDEST", "source": 3 }, + { "begin": 5118, "end": 5171, "name": "SWAP1", "source": 3 }, + { "begin": 5118, "end": 5171, "name": "POP", "source": 3 }, + { "begin": 5034, "end": 5177, "name": "SWAP2", "source": 3 }, + { "begin": 5034, "end": 5177, "name": "SWAP1", "source": 3 }, + { "begin": 5034, "end": 5177, "name": "POP", "source": 3 }, + { + "begin": 5034, + "end": 5177, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 5183, + "end": 5342, + "name": "tag", + "source": 3, + "value": "252" + }, + { "begin": 5183, "end": 5342, "name": "JUMPDEST", "source": 3 }, + { + "begin": 5284, + "end": 5335, + "name": "PUSH [tag]", + "source": 3, + "value": "336" + }, + { "begin": 5329, "end": 5334, "name": "DUP2", "source": 3 }, + { + "begin": 5284, + "end": 5335, + "name": "PUSH [tag]", + "source": 3, + "value": "251" + }, + { + "begin": 5284, + "end": 5335, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 5284, + "end": 5335, + "name": "tag", + "source": 3, + "value": "336" + }, + { "begin": 5284, "end": 5335, "name": "JUMPDEST", "source": 3 }, + { "begin": 5279, "end": 5282, "name": "DUP3", "source": 3 }, + { "begin": 5272, "end": 5336, "name": "MSTORE", "source": 3 }, + { "begin": 5183, "end": 5342, "name": "POP", "source": 3 }, + { "begin": 5183, "end": 5342, "name": "POP", "source": 3 }, + { + "begin": 5183, + "end": 5342, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 5348, + "end": 5598, + "name": "tag", + "source": 3, + "value": "46" + }, + { "begin": 5348, "end": 5598, "name": "JUMPDEST", "source": 3 }, + { + "begin": 5455, + "end": 5459, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 5493, + "end": 5495, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 5482, "end": 5491, "name": "DUP3", "source": 3 }, + { "begin": 5478, "end": 5496, "name": "ADD", "source": 3 }, + { "begin": 5470, "end": 5496, "name": "SWAP1", "source": 3 }, + { "begin": 5470, "end": 5496, "name": "POP", "source": 3 }, + { + "begin": 5506, + "end": 5591, + "name": "PUSH [tag]", + "source": 3, + "value": "338" + }, + { + "begin": 5588, + "end": 5589, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 5577, "end": 5586, "name": "DUP4", "source": 3 }, + { "begin": 5573, "end": 5590, "name": "ADD", "source": 3 }, + { "begin": 5564, "end": 5570, "name": "DUP5", "source": 3 }, + { + "begin": 5506, + "end": 5591, + "name": "PUSH [tag]", + "source": 3, + "value": "252" + }, + { + "begin": 5506, + "end": 5591, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 5506, + "end": 5591, + "name": "tag", + "source": 3, + "value": "338" + }, + { "begin": 5506, "end": 5591, "name": "JUMPDEST", "source": 3 }, + { "begin": 5348, "end": 5598, "name": "SWAP3", "source": 3 }, + { "begin": 5348, "end": 5598, "name": "SWAP2", "source": 3 }, + { "begin": 5348, "end": 5598, "name": "POP", "source": 3 }, + { "begin": 5348, "end": 5598, "name": "POP", "source": 3 }, + { + "begin": 5348, + "end": 5598, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 5604, + "end": 5933, + "name": "tag", + "source": 3, + "value": "54" + }, + { "begin": 5604, "end": 5933, "name": "JUMPDEST", "source": 3 }, + { + "begin": 5663, + "end": 5669, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 5712, + "end": 5714, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 5700, "end": 5709, "name": "DUP3", "source": 3 }, + { "begin": 5691, "end": 5698, "name": "DUP5", "source": 3 }, + { "begin": 5687, "end": 5710, "name": "SUB", "source": 3 }, + { "begin": 5683, "end": 5715, "name": "SLT", "source": 3 }, + { "begin": 5680, "end": 5799, "name": "ISZERO", "source": 3 }, + { + "begin": 5680, + "end": 5799, + "name": "PUSH [tag]", + "source": 3, + "value": "340" + }, + { "begin": 5680, "end": 5799, "name": "JUMPI", "source": 3 }, + { + "begin": 5718, + "end": 5797, + "name": "PUSH [tag]", + "source": 3, + "value": "341" + }, + { + "begin": 5718, + "end": 5797, + "name": "PUSH [tag]", + "source": 3, + "value": "236" + }, + { + "begin": 5718, + "end": 5797, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 5718, + "end": 5797, + "name": "tag", + "source": 3, + "value": "341" + }, + { "begin": 5718, "end": 5797, "name": "JUMPDEST", "source": 3 }, + { + "begin": 5680, + "end": 5799, + "name": "tag", + "source": 3, + "value": "340" + }, + { "begin": 5680, "end": 5799, "name": "JUMPDEST", "source": 3 }, + { + "begin": 5838, + "end": 5839, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 5863, + "end": 5916, + "name": "PUSH [tag]", + "source": 3, + "value": "342" + }, + { "begin": 5908, "end": 5915, "name": "DUP5", "source": 3 }, + { "begin": 5899, "end": 5905, "name": "DUP3", "source": 3 }, + { "begin": 5888, "end": 5897, "name": "DUP6", "source": 3 }, + { "begin": 5884, "end": 5906, "name": "ADD", "source": 3 }, + { + "begin": 5863, + "end": 5916, + "name": "PUSH [tag]", + "source": 3, + "value": "239" + }, + { + "begin": 5863, + "end": 5916, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 5863, + "end": 5916, + "name": "tag", + "source": 3, + "value": "342" + }, + { "begin": 5863, "end": 5916, "name": "JUMPDEST", "source": 3 }, + { "begin": 5853, "end": 5916, "name": "SWAP2", "source": 3 }, + { "begin": 5853, "end": 5916, "name": "POP", "source": 3 }, + { "begin": 5809, "end": 5926, "name": "POP", "source": 3 }, + { "begin": 5604, "end": 5933, "name": "SWAP3", "source": 3 }, + { "begin": 5604, "end": 5933, "name": "SWAP2", "source": 3 }, + { "begin": 5604, "end": 5933, "name": "POP", "source": 3 }, + { "begin": 5604, "end": 5933, "name": "POP", "source": 3 }, + { + "begin": 5604, + "end": 5933, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 5939, + "end": 6065, + "name": "tag", + "source": 3, + "value": "253" + }, + { "begin": 5939, "end": 6065, "name": "JUMPDEST", "source": 3 }, + { + "begin": 5976, + "end": 5983, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 6016, + "end": 6058, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 6009, "end": 6014, "name": "DUP3", "source": 3 }, + { "begin": 6005, "end": 6059, "name": "AND", "source": 3 }, + { "begin": 5994, "end": 6059, "name": "SWAP1", "source": 3 }, + { "begin": 5994, "end": 6059, "name": "POP", "source": 3 }, + { "begin": 5939, "end": 6065, "name": "SWAP2", "source": 3 }, + { "begin": 5939, "end": 6065, "name": "SWAP1", "source": 3 }, + { "begin": 5939, "end": 6065, "name": "POP", "source": 3 }, + { + "begin": 5939, + "end": 6065, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 6071, + "end": 6167, + "name": "tag", + "source": 3, + "value": "254" + }, + { "begin": 6071, "end": 6167, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6108, + "end": 6115, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 6137, + "end": 6161, + "name": "PUSH [tag]", + "source": 3, + "value": "345" + }, + { "begin": 6155, "end": 6160, "name": "DUP3", "source": 3 }, + { + "begin": 6137, + "end": 6161, + "name": "PUSH [tag]", + "source": 3, + "value": "253" + }, + { + "begin": 6137, + "end": 6161, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6137, + "end": 6161, + "name": "tag", + "source": 3, + "value": "345" + }, + { "begin": 6137, "end": 6161, "name": "JUMPDEST", "source": 3 }, + { "begin": 6126, "end": 6161, "name": "SWAP1", "source": 3 }, + { "begin": 6126, "end": 6161, "name": "POP", "source": 3 }, + { "begin": 6071, "end": 6167, "name": "SWAP2", "source": 3 }, + { "begin": 6071, "end": 6167, "name": "SWAP1", "source": 3 }, + { "begin": 6071, "end": 6167, "name": "POP", "source": 3 }, + { + "begin": 6071, + "end": 6167, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 6173, + "end": 6291, + "name": "tag", + "source": 3, + "value": "255" + }, + { "begin": 6173, "end": 6291, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6260, + "end": 6284, + "name": "PUSH [tag]", + "source": 3, + "value": "347" + }, + { "begin": 6278, "end": 6283, "name": "DUP2", "source": 3 }, + { + "begin": 6260, + "end": 6284, + "name": "PUSH [tag]", + "source": 3, + "value": "254" + }, + { + "begin": 6260, + "end": 6284, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6260, + "end": 6284, + "name": "tag", + "source": 3, + "value": "347" + }, + { "begin": 6260, "end": 6284, "name": "JUMPDEST", "source": 3 }, + { "begin": 6255, "end": 6258, "name": "DUP3", "source": 3 }, + { "begin": 6248, "end": 6285, "name": "MSTORE", "source": 3 }, + { "begin": 6173, "end": 6291, "name": "POP", "source": 3 }, + { "begin": 6173, "end": 6291, "name": "POP", "source": 3 }, + { + "begin": 6173, + "end": 6291, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 6297, + "end": 6519, + "name": "tag", + "source": 3, + "value": "57" + }, + { "begin": 6297, "end": 6519, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6390, + "end": 6394, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 6428, + "end": 6430, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 6417, "end": 6426, "name": "DUP3", "source": 3 }, + { "begin": 6413, "end": 6431, "name": "ADD", "source": 3 }, + { "begin": 6405, "end": 6431, "name": "SWAP1", "source": 3 }, + { "begin": 6405, "end": 6431, "name": "POP", "source": 3 }, + { + "begin": 6441, + "end": 6512, + "name": "PUSH [tag]", + "source": 3, + "value": "349" + }, + { + "begin": 6509, + "end": 6510, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 6498, "end": 6507, "name": "DUP4", "source": 3 }, + { "begin": 6494, "end": 6511, "name": "ADD", "source": 3 }, + { "begin": 6485, "end": 6491, "name": "DUP5", "source": 3 }, + { + "begin": 6441, + "end": 6512, + "name": "PUSH [tag]", + "source": 3, + "value": "255" + }, + { + "begin": 6441, + "end": 6512, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6441, + "end": 6512, + "name": "tag", + "source": 3, + "value": "349" + }, + { "begin": 6441, "end": 6512, "name": "JUMPDEST", "source": 3 }, + { "begin": 6297, "end": 6519, "name": "SWAP3", "source": 3 }, + { "begin": 6297, "end": 6519, "name": "SWAP2", "source": 3 }, + { "begin": 6297, "end": 6519, "name": "POP", "source": 3 }, + { "begin": 6297, "end": 6519, "name": "POP", "source": 3 }, + { + "begin": 6297, + "end": 6519, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 6525, + "end": 6585, + "name": "tag", + "source": 3, + "value": "256" + }, + { "begin": 6525, "end": 6585, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6553, + "end": 6556, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 6574, "end": 6579, "name": "DUP2", "source": 3 }, + { "begin": 6567, "end": 6579, "name": "SWAP1", "source": 3 }, + { "begin": 6567, "end": 6579, "name": "POP", "source": 3 }, + { "begin": 6525, "end": 6585, "name": "SWAP2", "source": 3 }, + { "begin": 6525, "end": 6585, "name": "SWAP1", "source": 3 }, + { "begin": 6525, "end": 6585, "name": "POP", "source": 3 }, + { + "begin": 6525, + "end": 6585, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 6591, + "end": 6733, + "name": "tag", + "source": 3, + "value": "257" + }, + { "begin": 6591, "end": 6733, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6641, + "end": 6650, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 6674, + "end": 6727, + "name": "PUSH [tag]", + "source": 3, + "value": "352" + }, + { + "begin": 6692, + "end": 6726, + "name": "PUSH [tag]", + "source": 3, + "value": "353" + }, + { + "begin": 6701, + "end": 6725, + "name": "PUSH [tag]", + "source": 3, + "value": "354" + }, + { "begin": 6719, "end": 6724, "name": "DUP5", "source": 3 }, + { + "begin": 6701, + "end": 6725, + "name": "PUSH [tag]", + "source": 3, + "value": "253" + }, + { + "begin": 6701, + "end": 6725, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6701, + "end": 6725, + "name": "tag", + "source": 3, + "value": "354" + }, + { "begin": 6701, "end": 6725, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6692, + "end": 6726, + "name": "PUSH [tag]", + "source": 3, + "value": "256" + }, + { + "begin": 6692, + "end": 6726, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6692, + "end": 6726, + "name": "tag", + "source": 3, + "value": "353" + }, + { "begin": 6692, "end": 6726, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6674, + "end": 6727, + "name": "PUSH [tag]", + "source": 3, + "value": "253" + }, + { + "begin": 6674, + "end": 6727, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6674, + "end": 6727, + "name": "tag", + "source": 3, + "value": "352" + }, + { "begin": 6674, "end": 6727, "name": "JUMPDEST", "source": 3 }, + { "begin": 6661, "end": 6727, "name": "SWAP1", "source": 3 }, + { "begin": 6661, "end": 6727, "name": "POP", "source": 3 }, + { "begin": 6591, "end": 6733, "name": "SWAP2", "source": 3 }, + { "begin": 6591, "end": 6733, "name": "SWAP1", "source": 3 }, + { "begin": 6591, "end": 6733, "name": "POP", "source": 3 }, + { + "begin": 6591, + "end": 6733, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 6739, + "end": 6865, + "name": "tag", + "source": 3, + "value": "258" + }, + { "begin": 6739, "end": 6865, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6789, + "end": 6798, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 6822, + "end": 6859, + "name": "PUSH [tag]", + "source": 3, + "value": "356" + }, + { "begin": 6853, "end": 6858, "name": "DUP3", "source": 3 }, + { + "begin": 6822, + "end": 6859, + "name": "PUSH [tag]", + "source": 3, + "value": "257" + }, + { + "begin": 6822, + "end": 6859, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6822, + "end": 6859, + "name": "tag", + "source": 3, + "value": "356" + }, + { "begin": 6822, "end": 6859, "name": "JUMPDEST", "source": 3 }, + { "begin": 6809, "end": 6859, "name": "SWAP1", "source": 3 }, + { "begin": 6809, "end": 6859, "name": "POP", "source": 3 }, + { "begin": 6739, "end": 6865, "name": "SWAP2", "source": 3 }, + { "begin": 6739, "end": 6865, "name": "SWAP1", "source": 3 }, + { "begin": 6739, "end": 6865, "name": "POP", "source": 3 }, + { + "begin": 6739, + "end": 6865, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 6871, + "end": 7015, + "name": "tag", + "source": 3, + "value": "259" + }, + { "begin": 6871, "end": 7015, "name": "JUMPDEST", "source": 3 }, + { + "begin": 6939, + "end": 6948, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 6972, + "end": 7009, + "name": "PUSH [tag]", + "source": 3, + "value": "358" + }, + { "begin": 7003, "end": 7008, "name": "DUP3", "source": 3 }, + { + "begin": 6972, + "end": 7009, + "name": "PUSH [tag]", + "source": 3, + "value": "258" + }, + { + "begin": 6972, + "end": 7009, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 6972, + "end": 7009, + "name": "tag", + "source": 3, + "value": "358" + }, + { "begin": 6972, "end": 7009, "name": "JUMPDEST", "source": 3 }, + { "begin": 6959, "end": 7009, "name": "SWAP1", "source": 3 }, + { "begin": 6959, "end": 7009, "name": "POP", "source": 3 }, + { "begin": 6871, "end": 7015, "name": "SWAP2", "source": 3 }, + { "begin": 6871, "end": 7015, "name": "SWAP1", "source": 3 }, + { "begin": 6871, "end": 7015, "name": "POP", "source": 3 }, + { + "begin": 6871, + "end": 7015, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 7021, + "end": 7188, + "name": "tag", + "source": 3, + "value": "260" + }, + { "begin": 7021, "end": 7188, "name": "JUMPDEST", "source": 3 }, + { + "begin": 7126, + "end": 7181, + "name": "PUSH [tag]", + "source": 3, + "value": "360" + }, + { "begin": 7175, "end": 7180, "name": "DUP2", "source": 3 }, + { + "begin": 7126, + "end": 7181, + "name": "PUSH [tag]", + "source": 3, + "value": "259" + }, + { + "begin": 7126, + "end": 7181, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 7126, + "end": 7181, + "name": "tag", + "source": 3, + "value": "360" + }, + { "begin": 7126, "end": 7181, "name": "JUMPDEST", "source": 3 }, + { "begin": 7121, "end": 7124, "name": "DUP3", "source": 3 }, + { "begin": 7114, "end": 7182, "name": "MSTORE", "source": 3 }, + { "begin": 7021, "end": 7188, "name": "POP", "source": 3 }, + { "begin": 7021, "end": 7188, "name": "POP", "source": 3 }, + { + "begin": 7021, + "end": 7188, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 7194, + "end": 7452, + "name": "tag", + "source": 3, + "value": "62" + }, + { "begin": 7194, "end": 7452, "name": "JUMPDEST", "source": 3 }, + { + "begin": 7305, + "end": 7309, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 7343, + "end": 7345, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 7332, "end": 7341, "name": "DUP3", "source": 3 }, + { "begin": 7328, "end": 7346, "name": "ADD", "source": 3 }, + { "begin": 7320, "end": 7346, "name": "SWAP1", "source": 3 }, + { "begin": 7320, "end": 7346, "name": "POP", "source": 3 }, + { + "begin": 7356, + "end": 7445, + "name": "PUSH [tag]", + "source": 3, + "value": "362" + }, + { + "begin": 7442, + "end": 7443, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 7431, "end": 7440, "name": "DUP4", "source": 3 }, + { "begin": 7427, "end": 7444, "name": "ADD", "source": 3 }, + { "begin": 7418, "end": 7424, "name": "DUP5", "source": 3 }, + { + "begin": 7356, + "end": 7445, + "name": "PUSH [tag]", + "source": 3, + "value": "260" + }, + { + "begin": 7356, + "end": 7445, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 7356, + "end": 7445, + "name": "tag", + "source": 3, + "value": "362" + }, + { "begin": 7356, "end": 7445, "name": "JUMPDEST", "source": 3 }, + { "begin": 7194, "end": 7452, "name": "SWAP3", "source": 3 }, + { "begin": 7194, "end": 7452, "name": "SWAP2", "source": 3 }, + { "begin": 7194, "end": 7452, "name": "POP", "source": 3 }, + { "begin": 7194, "end": 7452, "name": "POP", "source": 3 }, + { + "begin": 7194, + "end": 7452, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 7458, + "end": 7559, + "name": "tag", + "source": 3, + "value": "261" + }, + { "begin": 7458, "end": 7559, "name": "JUMPDEST", "source": 3 }, + { + "begin": 7494, + "end": 7501, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 7534, + "end": 7552, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 7527, "end": 7532, "name": "DUP3", "source": 3 }, + { "begin": 7523, "end": 7553, "name": "AND", "source": 3 }, + { "begin": 7512, "end": 7553, "name": "SWAP1", "source": 3 }, + { "begin": 7512, "end": 7553, "name": "POP", "source": 3 }, + { "begin": 7458, "end": 7559, "name": "SWAP2", "source": 3 }, + { "begin": 7458, "end": 7559, "name": "SWAP1", "source": 3 }, + { "begin": 7458, "end": 7559, "name": "POP", "source": 3 }, + { + "begin": 7458, + "end": 7559, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 7565, + "end": 7680, + "name": "tag", + "source": 3, + "value": "262" + }, + { "begin": 7565, "end": 7680, "name": "JUMPDEST", "source": 3 }, + { + "begin": 7650, + "end": 7673, + "name": "PUSH [tag]", + "source": 3, + "value": "365" + }, + { "begin": 7667, "end": 7672, "name": "DUP2", "source": 3 }, + { + "begin": 7650, + "end": 7673, + "name": "PUSH [tag]", + "source": 3, + "value": "261" + }, + { + "begin": 7650, + "end": 7673, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 7650, + "end": 7673, + "name": "tag", + "source": 3, + "value": "365" + }, + { "begin": 7650, "end": 7673, "name": "JUMPDEST", "source": 3 }, + { "begin": 7645, "end": 7648, "name": "DUP3", "source": 3 }, + { "begin": 7638, "end": 7674, "name": "MSTORE", "source": 3 }, + { "begin": 7565, "end": 7680, "name": "POP", "source": 3 }, + { "begin": 7565, "end": 7680, "name": "POP", "source": 3 }, + { + "begin": 7565, + "end": 7680, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 7686, + "end": 7904, + "name": "tag", + "source": 3, + "value": "75" + }, + { "begin": 7686, "end": 7904, "name": "JUMPDEST", "source": 3 }, + { + "begin": 7777, + "end": 7781, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 7815, + "end": 7817, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 7804, "end": 7813, "name": "DUP3", "source": 3 }, + { "begin": 7800, "end": 7818, "name": "ADD", "source": 3 }, + { "begin": 7792, "end": 7818, "name": "SWAP1", "source": 3 }, + { "begin": 7792, "end": 7818, "name": "POP", "source": 3 }, + { + "begin": 7828, + "end": 7897, + "name": "PUSH [tag]", + "source": 3, + "value": "367" + }, + { + "begin": 7894, + "end": 7895, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 7883, "end": 7892, "name": "DUP4", "source": 3 }, + { "begin": 7879, "end": 7896, "name": "ADD", "source": 3 }, + { "begin": 7870, "end": 7876, "name": "DUP5", "source": 3 }, + { + "begin": 7828, + "end": 7897, + "name": "PUSH [tag]", + "source": 3, + "value": "262" + }, + { + "begin": 7828, + "end": 7897, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 7828, + "end": 7897, + "name": "tag", + "source": 3, + "value": "367" + }, + { "begin": 7828, "end": 7897, "name": "JUMPDEST", "source": 3 }, + { "begin": 7686, "end": 7904, "name": "SWAP3", "source": 3 }, + { "begin": 7686, "end": 7904, "name": "SWAP2", "source": 3 }, + { "begin": 7686, "end": 7904, "name": "POP", "source": 3 }, + { "begin": 7686, "end": 7904, "name": "POP", "source": 3 }, + { + "begin": 7686, + "end": 7904, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 7910, + "end": 8003, + "name": "tag", + "source": 3, + "value": "263" + }, + { "begin": 7910, "end": 8003, "name": "JUMPDEST", "source": 3 }, + { + "begin": 7946, + "end": 7953, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 7986, + "end": 7996, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFF" + }, + { "begin": 7979, "end": 7984, "name": "DUP3", "source": 3 }, + { "begin": 7975, "end": 7997, "name": "AND", "source": 3 }, + { "begin": 7964, "end": 7997, "name": "SWAP1", "source": 3 }, + { "begin": 7964, "end": 7997, "name": "POP", "source": 3 }, + { "begin": 7910, "end": 8003, "name": "SWAP2", "source": 3 }, + { "begin": 7910, "end": 8003, "name": "SWAP1", "source": 3 }, + { "begin": 7910, "end": 8003, "name": "POP", "source": 3 }, + { + "begin": 7910, + "end": 8003, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 8009, + "end": 8124, + "name": "tag", + "source": 3, + "value": "264" + }, + { "begin": 8009, "end": 8124, "name": "JUMPDEST", "source": 3 }, + { + "begin": 8094, + "end": 8117, + "name": "PUSH [tag]", + "source": 3, + "value": "370" + }, + { "begin": 8111, "end": 8116, "name": "DUP2", "source": 3 }, + { + "begin": 8094, + "end": 8117, + "name": "PUSH [tag]", + "source": 3, + "value": "263" + }, + { + "begin": 8094, + "end": 8117, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 8094, + "end": 8117, + "name": "tag", + "source": 3, + "value": "370" + }, + { "begin": 8094, "end": 8117, "name": "JUMPDEST", "source": 3 }, + { "begin": 8089, "end": 8092, "name": "DUP3", "source": 3 }, + { "begin": 8082, "end": 8118, "name": "MSTORE", "source": 3 }, + { "begin": 8009, "end": 8124, "name": "POP", "source": 3 }, + { "begin": 8009, "end": 8124, "name": "POP", "source": 3 }, + { + "begin": 8009, + "end": 8124, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 8130, + "end": 8348, + "name": "tag", + "source": 3, + "value": "88" + }, + { "begin": 8130, "end": 8348, "name": "JUMPDEST", "source": 3 }, + { + "begin": 8221, + "end": 8225, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 8259, + "end": 8261, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 8248, "end": 8257, "name": "DUP3", "source": 3 }, + { "begin": 8244, "end": 8262, "name": "ADD", "source": 3 }, + { "begin": 8236, "end": 8262, "name": "SWAP1", "source": 3 }, + { "begin": 8236, "end": 8262, "name": "POP", "source": 3 }, + { + "begin": 8272, + "end": 8341, + "name": "PUSH [tag]", + "source": 3, + "value": "372" + }, + { + "begin": 8338, + "end": 8339, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 8327, "end": 8336, "name": "DUP4", "source": 3 }, + { "begin": 8323, "end": 8340, "name": "ADD", "source": 3 }, + { "begin": 8314, "end": 8320, "name": "DUP5", "source": 3 }, + { + "begin": 8272, + "end": 8341, + "name": "PUSH [tag]", + "source": 3, + "value": "264" + }, + { + "begin": 8272, + "end": 8341, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 8272, + "end": 8341, + "name": "tag", + "source": 3, + "value": "372" + }, + { "begin": 8272, "end": 8341, "name": "JUMPDEST", "source": 3 }, + { "begin": 8130, "end": 8348, "name": "SWAP3", "source": 3 }, + { "begin": 8130, "end": 8348, "name": "SWAP2", "source": 3 }, + { "begin": 8130, "end": 8348, "name": "POP", "source": 3 }, + { "begin": 8130, "end": 8348, "name": "POP", "source": 3 }, + { + "begin": 8130, + "end": 8348, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 8354, + "end": 8440, + "name": "tag", + "source": 3, + "value": "265" + }, + { "begin": 8354, "end": 8440, "name": "JUMPDEST", "source": 3 }, + { + "begin": 8389, + "end": 8396, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 8429, + "end": 8433, + "name": "PUSH", + "source": 3, + "value": "FF" + }, + { "begin": 8422, "end": 8427, "name": "DUP3", "source": 3 }, + { "begin": 8418, "end": 8434, "name": "AND", "source": 3 }, + { "begin": 8407, "end": 8434, "name": "SWAP1", "source": 3 }, + { "begin": 8407, "end": 8434, "name": "POP", "source": 3 }, + { "begin": 8354, "end": 8440, "name": "SWAP2", "source": 3 }, + { "begin": 8354, "end": 8440, "name": "SWAP1", "source": 3 }, + { "begin": 8354, "end": 8440, "name": "POP", "source": 3 }, + { + "begin": 8354, + "end": 8440, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 8446, + "end": 8558, + "name": "tag", + "source": 3, + "value": "266" + }, + { "begin": 8446, "end": 8558, "name": "JUMPDEST", "source": 3 }, + { + "begin": 8529, + "end": 8551, + "name": "PUSH [tag]", + "source": 3, + "value": "375" + }, + { "begin": 8545, "end": 8550, "name": "DUP2", "source": 3 }, + { + "begin": 8529, + "end": 8551, + "name": "PUSH [tag]", + "source": 3, + "value": "265" + }, + { + "begin": 8529, + "end": 8551, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 8529, + "end": 8551, + "name": "tag", + "source": 3, + "value": "375" + }, + { "begin": 8529, "end": 8551, "name": "JUMPDEST", "source": 3 }, + { "begin": 8524, "end": 8527, "name": "DUP3", "source": 3 }, + { "begin": 8517, "end": 8552, "name": "MSTORE", "source": 3 }, + { "begin": 8446, "end": 8558, "name": "POP", "source": 3 }, + { "begin": 8446, "end": 8558, "name": "POP", "source": 3 }, + { + "begin": 8446, + "end": 8558, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 8564, + "end": 8778, + "name": "tag", + "source": 3, + "value": "93" + }, + { "begin": 8564, "end": 8778, "name": "JUMPDEST", "source": 3 }, + { + "begin": 8653, + "end": 8657, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 8691, + "end": 8693, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 8680, "end": 8689, "name": "DUP3", "source": 3 }, + { "begin": 8676, "end": 8694, "name": "ADD", "source": 3 }, + { "begin": 8668, "end": 8694, "name": "SWAP1", "source": 3 }, + { "begin": 8668, "end": 8694, "name": "POP", "source": 3 }, + { + "begin": 8704, + "end": 8771, + "name": "PUSH [tag]", + "source": 3, + "value": "377" + }, + { + "begin": 8768, + "end": 8769, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 8757, "end": 8766, "name": "DUP4", "source": 3 }, + { "begin": 8753, "end": 8770, "name": "ADD", "source": 3 }, + { "begin": 8744, "end": 8750, "name": "DUP5", "source": 3 }, + { + "begin": 8704, + "end": 8771, + "name": "PUSH [tag]", + "source": 3, + "value": "266" + }, + { + "begin": 8704, + "end": 8771, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 8704, + "end": 8771, + "name": "tag", + "source": 3, + "value": "377" + }, + { "begin": 8704, "end": 8771, "name": "JUMPDEST", "source": 3 }, + { "begin": 8564, "end": 8778, "name": "SWAP3", "source": 3 }, + { "begin": 8564, "end": 8778, "name": "SWAP2", "source": 3 }, + { "begin": 8564, "end": 8778, "name": "POP", "source": 3 }, + { "begin": 8564, "end": 8778, "name": "POP", "source": 3 }, + { + "begin": 8564, + "end": 8778, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 8784, + "end": 9116, + "name": "tag", + "source": 3, + "value": "102" + }, + { "begin": 8784, "end": 9116, "name": "JUMPDEST", "source": 3 }, + { + "begin": 8905, + "end": 8909, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 8943, + "end": 8945, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 8932, "end": 8941, "name": "DUP3", "source": 3 }, + { "begin": 8928, "end": 8946, "name": "ADD", "source": 3 }, + { "begin": 8920, "end": 8946, "name": "SWAP1", "source": 3 }, + { "begin": 8920, "end": 8946, "name": "POP", "source": 3 }, + { + "begin": 8956, + "end": 9027, + "name": "PUSH [tag]", + "source": 3, + "value": "379" + }, + { + "begin": 9024, + "end": 9025, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 9013, "end": 9022, "name": "DUP4", "source": 3 }, + { "begin": 9009, "end": 9026, "name": "ADD", "source": 3 }, + { "begin": 9000, "end": 9006, "name": "DUP6", "source": 3 }, + { + "begin": 8956, + "end": 9027, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 8956, + "end": 9027, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 8956, + "end": 9027, + "name": "tag", + "source": 3, + "value": "379" + }, + { "begin": 8956, "end": 9027, "name": "JUMPDEST", "source": 3 }, + { + "begin": 9037, + "end": 9109, + "name": "PUSH [tag]", + "source": 3, + "value": "380" + }, + { + "begin": 9105, + "end": 9107, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 9094, "end": 9103, "name": "DUP4", "source": 3 }, + { "begin": 9090, "end": 9108, "name": "ADD", "source": 3 }, + { "begin": 9081, "end": 9087, "name": "DUP5", "source": 3 }, + { + "begin": 9037, + "end": 9109, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 9037, + "end": 9109, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 9037, + "end": 9109, + "name": "tag", + "source": 3, + "value": "380" + }, + { "begin": 9037, "end": 9109, "name": "JUMPDEST", "source": 3 }, + { "begin": 8784, "end": 9116, "name": "SWAP4", "source": 3 }, + { "begin": 8784, "end": 9116, "name": "SWAP3", "source": 3 }, + { "begin": 8784, "end": 9116, "name": "POP", "source": 3 }, + { "begin": 8784, "end": 9116, "name": "POP", "source": 3 }, + { "begin": 8784, "end": 9116, "name": "POP", "source": 3 }, + { + "begin": 8784, + "end": 9116, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 9122, + "end": 9238, + "name": "tag", + "source": 3, + "value": "267" + }, + { "begin": 9122, "end": 9238, "name": "JUMPDEST", "source": 3 }, + { + "begin": 9212, + "end": 9213, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 9205, "end": 9210, "name": "DUP2", "source": 3 }, + { "begin": 9202, "end": 9214, "name": "LT", "source": 3 }, + { + "begin": 9192, + "end": 9232, + "name": "PUSH [tag]", + "source": 3, + "value": "382" + }, + { "begin": 9192, "end": 9232, "name": "JUMPI", "source": 3 }, + { + "begin": 9228, + "end": 9229, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 9225, "end": 9226, "name": "DUP1", "source": 3 }, + { "begin": 9218, "end": 9230, "name": "REVERT", "source": 3 }, + { + "begin": 9192, + "end": 9232, + "name": "tag", + "source": 3, + "value": "382" + }, + { "begin": 9192, "end": 9232, "name": "JUMPDEST", "source": 3 }, + { "begin": 9122, "end": 9238, "name": "POP", "source": 3 }, + { + "begin": 9122, + "end": 9238, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 9244, + "end": 9421, + "name": "tag", + "source": 3, + "value": "268" + }, + { "begin": 9244, "end": 9421, "name": "JUMPDEST", "source": 3 }, + { + "begin": 9318, + "end": 9323, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 9349, "end": 9355, "name": "DUP2", "source": 3 }, + { "begin": 9343, "end": 9356, "name": "MLOAD", "source": 3 }, + { "begin": 9334, "end": 9356, "name": "SWAP1", "source": 3 }, + { "begin": 9334, "end": 9356, "name": "POP", "source": 3 }, + { + "begin": 9365, + "end": 9415, + "name": "PUSH [tag]", + "source": 3, + "value": "384" + }, + { "begin": 9409, "end": 9414, "name": "DUP2", "source": 3 }, + { + "begin": 9365, + "end": 9415, + "name": "PUSH [tag]", + "source": 3, + "value": "267" + }, + { + "begin": 9365, + "end": 9415, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 9365, + "end": 9415, + "name": "tag", + "source": 3, + "value": "384" + }, + { "begin": 9365, "end": 9415, "name": "JUMPDEST", "source": 3 }, + { "begin": 9244, "end": 9421, "name": "SWAP3", "source": 3 }, + { "begin": 9244, "end": 9421, "name": "SWAP2", "source": 3 }, + { "begin": 9244, "end": 9421, "name": "POP", "source": 3 }, + { "begin": 9244, "end": 9421, "name": "POP", "source": 3 }, + { + "begin": 9244, + "end": 9421, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 9427, + "end": 9812, + "name": "tag", + "source": 3, + "value": "116" + }, + { "begin": 9427, "end": 9812, "name": "JUMPDEST", "source": 3 }, + { + "begin": 9514, + "end": 9520, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 9563, + "end": 9565, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 9551, "end": 9560, "name": "DUP3", "source": 3 }, + { "begin": 9542, "end": 9549, "name": "DUP5", "source": 3 }, + { "begin": 9538, "end": 9561, "name": "SUB", "source": 3 }, + { "begin": 9534, "end": 9566, "name": "SLT", "source": 3 }, + { "begin": 9531, "end": 9650, "name": "ISZERO", "source": 3 }, + { + "begin": 9531, + "end": 9650, + "name": "PUSH [tag]", + "source": 3, + "value": "386" + }, + { "begin": 9531, "end": 9650, "name": "JUMPI", "source": 3 }, + { + "begin": 9569, + "end": 9648, + "name": "PUSH [tag]", + "source": 3, + "value": "387" + }, + { + "begin": 9569, + "end": 9648, + "name": "PUSH [tag]", + "source": 3, + "value": "236" + }, + { + "begin": 9569, + "end": 9648, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 9569, + "end": 9648, + "name": "tag", + "source": 3, + "value": "387" + }, + { "begin": 9569, "end": 9648, "name": "JUMPDEST", "source": 3 }, + { + "begin": 9531, + "end": 9650, + "name": "tag", + "source": 3, + "value": "386" + }, + { "begin": 9531, "end": 9650, "name": "JUMPDEST", "source": 3 }, + { + "begin": 9689, + "end": 9690, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 9714, + "end": 9795, + "name": "PUSH [tag]", + "source": 3, + "value": "388" + }, + { "begin": 9787, "end": 9794, "name": "DUP5", "source": 3 }, + { "begin": 9778, "end": 9784, "name": "DUP3", "source": 3 }, + { "begin": 9767, "end": 9776, "name": "DUP6", "source": 3 }, + { "begin": 9763, "end": 9785, "name": "ADD", "source": 3 }, + { + "begin": 9714, + "end": 9795, + "name": "PUSH [tag]", + "source": 3, + "value": "268" + }, + { + "begin": 9714, + "end": 9795, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 9714, + "end": 9795, + "name": "tag", + "source": 3, + "value": "388" + }, + { "begin": 9714, "end": 9795, "name": "JUMPDEST", "source": 3 }, + { "begin": 9704, "end": 9795, "name": "SWAP2", "source": 3 }, + { "begin": 9704, "end": 9795, "name": "POP", "source": 3 }, + { "begin": 9660, "end": 9805, "name": "POP", "source": 3 }, + { "begin": 9427, "end": 9812, "name": "SWAP3", "source": 3 }, + { "begin": 9427, "end": 9812, "name": "SWAP2", "source": 3 }, + { "begin": 9427, "end": 9812, "name": "POP", "source": 3 }, + { "begin": 9427, "end": 9812, "name": "POP", "source": 3 }, + { + "begin": 9427, + "end": 9812, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 9818, + "end": 9998, + "name": "tag", + "source": 3, + "value": "269" + }, + { "begin": 9818, "end": 9998, "name": "JUMPDEST", "source": 3 }, + { + "begin": 9866, + "end": 9943, + "name": "PUSH", + "source": 3, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 9863, + "end": 9864, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 9856, "end": 9944, "name": "MSTORE", "source": 3 }, + { + "begin": 9963, + "end": 9967, + "name": "PUSH", + "source": 3, + "value": "11" + }, + { + "begin": 9960, + "end": 9961, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 9953, "end": 9968, "name": "MSTORE", "source": 3 }, + { + "begin": 9987, + "end": 9991, + "name": "PUSH", + "source": 3, + "value": "24" + }, + { + "begin": 9984, + "end": 9985, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 9977, "end": 9992, "name": "REVERT", "source": 3 }, + { + "begin": 10004, + "end": 10309, + "name": "tag", + "source": 3, + "value": "127" + }, + { "begin": 10004, "end": 10309, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10044, + "end": 10047, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 10063, + "end": 10083, + "name": "PUSH [tag]", + "source": 3, + "value": "391" + }, + { "begin": 10081, "end": 10082, "name": "DUP3", "source": 3 }, + { + "begin": 10063, + "end": 10083, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 10063, + "end": 10083, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10063, + "end": 10083, + "name": "tag", + "source": 3, + "value": "391" + }, + { "begin": 10063, "end": 10083, "name": "JUMPDEST", "source": 3 }, + { "begin": 10058, "end": 10083, "name": "SWAP2", "source": 3 }, + { "begin": 10058, "end": 10083, "name": "POP", "source": 3 }, + { + "begin": 10097, + "end": 10117, + "name": "PUSH [tag]", + "source": 3, + "value": "392" + }, + { "begin": 10115, "end": 10116, "name": "DUP4", "source": 3 }, + { + "begin": 10097, + "end": 10117, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 10097, + "end": 10117, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10097, + "end": 10117, + "name": "tag", + "source": 3, + "value": "392" + }, + { "begin": 10097, "end": 10117, "name": "JUMPDEST", "source": 3 }, + { "begin": 10092, "end": 10117, "name": "SWAP3", "source": 3 }, + { "begin": 10092, "end": 10117, "name": "POP", "source": 3 }, + { "begin": 10251, "end": 10252, "name": "DUP3", "source": 3 }, + { + "begin": 10183, + "end": 10249, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 10179, "end": 10253, "name": "SUB", "source": 3 }, + { "begin": 10176, "end": 10177, "name": "DUP3", "source": 3 }, + { "begin": 10173, "end": 10254, "name": "GT", "source": 3 }, + { "begin": 10170, "end": 10277, "name": "ISZERO", "source": 3 }, + { + "begin": 10170, + "end": 10277, + "name": "PUSH [tag]", + "source": 3, + "value": "393" + }, + { "begin": 10170, "end": 10277, "name": "JUMPI", "source": 3 }, + { + "begin": 10257, + "end": 10275, + "name": "PUSH [tag]", + "source": 3, + "value": "394" + }, + { + "begin": 10257, + "end": 10275, + "name": "PUSH [tag]", + "source": 3, + "value": "269" + }, + { + "begin": 10257, + "end": 10275, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10257, + "end": 10275, + "name": "tag", + "source": 3, + "value": "394" + }, + { "begin": 10257, "end": 10275, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10170, + "end": 10277, + "name": "tag", + "source": 3, + "value": "393" + }, + { "begin": 10170, "end": 10277, "name": "JUMPDEST", "source": 3 }, + { "begin": 10301, "end": 10302, "name": "DUP3", "source": 3 }, + { "begin": 10298, "end": 10299, "name": "DUP3", "source": 3 }, + { "begin": 10294, "end": 10303, "name": "ADD", "source": 3 }, + { "begin": 10287, "end": 10303, "name": "SWAP1", "source": 3 }, + { "begin": 10287, "end": 10303, "name": "POP", "source": 3 }, + { "begin": 10004, "end": 10309, "name": "SWAP3", "source": 3 }, + { "begin": 10004, "end": 10309, "name": "SWAP2", "source": 3 }, + { "begin": 10004, "end": 10309, "name": "POP", "source": 3 }, + { "begin": 10004, "end": 10309, "name": "POP", "source": 3 }, + { + "begin": 10004, + "end": 10309, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 10315, + "end": 10506, + "name": "tag", + "source": 3, + "value": "130" + }, + { "begin": 10315, "end": 10506, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10355, + "end": 10359, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 10375, + "end": 10395, + "name": "PUSH [tag]", + "source": 3, + "value": "396" + }, + { "begin": 10393, "end": 10394, "name": "DUP3", "source": 3 }, + { + "begin": 10375, + "end": 10395, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 10375, + "end": 10395, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10375, + "end": 10395, + "name": "tag", + "source": 3, + "value": "396" + }, + { "begin": 10375, "end": 10395, "name": "JUMPDEST", "source": 3 }, + { "begin": 10370, "end": 10395, "name": "SWAP2", "source": 3 }, + { "begin": 10370, "end": 10395, "name": "POP", "source": 3 }, + { + "begin": 10409, + "end": 10429, + "name": "PUSH [tag]", + "source": 3, + "value": "397" + }, + { "begin": 10427, "end": 10428, "name": "DUP4", "source": 3 }, + { + "begin": 10409, + "end": 10429, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 10409, + "end": 10429, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10409, + "end": 10429, + "name": "tag", + "source": 3, + "value": "397" + }, + { "begin": 10409, "end": 10429, "name": "JUMPDEST", "source": 3 }, + { "begin": 10404, "end": 10429, "name": "SWAP3", "source": 3 }, + { "begin": 10404, "end": 10429, "name": "POP", "source": 3 }, + { "begin": 10448, "end": 10449, "name": "DUP3", "source": 3 }, + { "begin": 10445, "end": 10446, "name": "DUP3", "source": 3 }, + { "begin": 10442, "end": 10450, "name": "LT", "source": 3 }, + { "begin": 10439, "end": 10473, "name": "ISZERO", "source": 3 }, + { + "begin": 10439, + "end": 10473, + "name": "PUSH [tag]", + "source": 3, + "value": "398" + }, + { "begin": 10439, "end": 10473, "name": "JUMPI", "source": 3 }, + { + "begin": 10453, + "end": 10471, + "name": "PUSH [tag]", + "source": 3, + "value": "399" + }, + { + "begin": 10453, + "end": 10471, + "name": "PUSH [tag]", + "source": 3, + "value": "269" + }, + { + "begin": 10453, + "end": 10471, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10453, + "end": 10471, + "name": "tag", + "source": 3, + "value": "399" + }, + { "begin": 10453, "end": 10471, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10439, + "end": 10473, + "name": "tag", + "source": 3, + "value": "398" + }, + { "begin": 10439, "end": 10473, "name": "JUMPDEST", "source": 3 }, + { "begin": 10498, "end": 10499, "name": "DUP3", "source": 3 }, + { "begin": 10495, "end": 10496, "name": "DUP3", "source": 3 }, + { "begin": 10491, "end": 10500, "name": "SUB", "source": 3 }, + { "begin": 10483, "end": 10500, "name": "SWAP1", "source": 3 }, + { "begin": 10483, "end": 10500, "name": "POP", "source": 3 }, + { "begin": 10315, "end": 10506, "name": "SWAP3", "source": 3 }, + { "begin": 10315, "end": 10506, "name": "SWAP2", "source": 3 }, + { "begin": 10315, "end": 10506, "name": "POP", "source": 3 }, + { "begin": 10315, "end": 10506, "name": "POP", "source": 3 }, + { + "begin": 10315, + "end": 10506, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 10512, + "end": 10745, + "name": "tag", + "source": 3, + "value": "138" + }, + { "begin": 10512, "end": 10745, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10551, + "end": 10554, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 10574, + "end": 10598, + "name": "PUSH [tag]", + "source": 3, + "value": "401" + }, + { "begin": 10592, "end": 10597, "name": "DUP3", "source": 3 }, + { + "begin": 10574, + "end": 10598, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 10574, + "end": 10598, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10574, + "end": 10598, + "name": "tag", + "source": 3, + "value": "401" + }, + { "begin": 10574, "end": 10598, "name": "JUMPDEST", "source": 3 }, + { "begin": 10565, "end": 10598, "name": "SWAP2", "source": 3 }, + { "begin": 10565, "end": 10598, "name": "POP", "source": 3 }, + { + "begin": 10620, + "end": 10686, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 10613, "end": 10618, "name": "DUP3", "source": 3 }, + { "begin": 10610, "end": 10687, "name": "EQ", "source": 3 }, + { "begin": 10607, "end": 10710, "name": "ISZERO", "source": 3 }, + { + "begin": 10607, + "end": 10710, + "name": "PUSH [tag]", + "source": 3, + "value": "402" + }, + { "begin": 10607, "end": 10710, "name": "JUMPI", "source": 3 }, + { + "begin": 10690, + "end": 10708, + "name": "PUSH [tag]", + "source": 3, + "value": "403" + }, + { + "begin": 10690, + "end": 10708, + "name": "PUSH [tag]", + "source": 3, + "value": "269" + }, + { + "begin": 10690, + "end": 10708, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10690, + "end": 10708, + "name": "tag", + "source": 3, + "value": "403" + }, + { "begin": 10690, "end": 10708, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10607, + "end": 10710, + "name": "tag", + "source": 3, + "value": "402" + }, + { "begin": 10607, "end": 10710, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10737, + "end": 10738, + "name": "PUSH", + "source": 3, + "value": "1" + }, + { "begin": 10730, "end": 10735, "name": "DUP3", "source": 3 }, + { "begin": 10726, "end": 10739, "name": "ADD", "source": 3 }, + { "begin": 10719, "end": 10739, "name": "SWAP1", "source": 3 }, + { "begin": 10719, "end": 10739, "name": "POP", "source": 3 }, + { "begin": 10512, "end": 10745, "name": "SWAP2", "source": 3 }, + { "begin": 10512, "end": 10745, "name": "SWAP1", "source": 3 }, + { "begin": 10512, "end": 10745, "name": "POP", "source": 3 }, + { + "begin": 10512, + "end": 10745, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 10751, + "end": 10889, + "name": "tag", + "source": 3, + "value": "270" + }, + { "begin": 10751, "end": 10889, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10799, + "end": 10808, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 10832, + "end": 10883, + "name": "PUSH [tag]", + "source": 3, + "value": "405" + }, + { + "begin": 10849, + "end": 10882, + "name": "PUSH [tag]", + "source": 3, + "value": "406" + }, + { + "begin": 10858, + "end": 10881, + "name": "PUSH [tag]", + "source": 3, + "value": "407" + }, + { "begin": 10875, "end": 10880, "name": "DUP5", "source": 3 }, + { + "begin": 10858, + "end": 10881, + "name": "PUSH [tag]", + "source": 3, + "value": "263" + }, + { + "begin": 10858, + "end": 10881, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10858, + "end": 10881, + "name": "tag", + "source": 3, + "value": "407" + }, + { "begin": 10858, "end": 10881, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10849, + "end": 10882, + "name": "PUSH [tag]", + "source": 3, + "value": "256" + }, + { + "begin": 10849, + "end": 10882, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10849, + "end": 10882, + "name": "tag", + "source": 3, + "value": "406" + }, + { "begin": 10849, "end": 10882, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10832, + "end": 10883, + "name": "PUSH [tag]", + "source": 3, + "value": "261" + }, + { + "begin": 10832, + "end": 10883, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10832, + "end": 10883, + "name": "tag", + "source": 3, + "value": "405" + }, + { "begin": 10832, "end": 10883, "name": "JUMPDEST", "source": 3 }, + { "begin": 10819, "end": 10883, "name": "SWAP1", "source": 3 }, + { "begin": 10819, "end": 10883, "name": "POP", "source": 3 }, + { "begin": 10751, "end": 10889, "name": "SWAP2", "source": 3 }, + { "begin": 10751, "end": 10889, "name": "SWAP1", "source": 3 }, + { "begin": 10751, "end": 10889, "name": "POP", "source": 3 }, + { + "begin": 10751, + "end": 10889, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 10895, + "end": 11022, + "name": "tag", + "source": 3, + "value": "271" + }, + { "begin": 10895, "end": 11022, "name": "JUMPDEST", "source": 3 }, + { + "begin": 10980, + "end": 11015, + "name": "PUSH [tag]", + "source": 3, + "value": "409" + }, + { "begin": 11009, "end": 11014, "name": "DUP2", "source": 3 }, + { + "begin": 10980, + "end": 11015, + "name": "PUSH [tag]", + "source": 3, + "value": "270" + }, + { + "begin": 10980, + "end": 11015, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 10980, + "end": 11015, + "name": "tag", + "source": 3, + "value": "409" + }, + { "begin": 10980, "end": 11015, "name": "JUMPDEST", "source": 3 }, + { "begin": 10975, "end": 10978, "name": "DUP3", "source": 3 }, + { "begin": 10968, "end": 11016, "name": "MSTORE", "source": 3 }, + { "begin": 10895, "end": 11022, "name": "POP", "source": 3 }, + { "begin": 10895, "end": 11022, "name": "POP", "source": 3 }, + { + "begin": 10895, + "end": 11022, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 11028, + "end": 11787, + "name": "tag", + "source": 3, + "value": "140" + }, + { "begin": 11028, "end": 11787, "name": "JUMPDEST", "source": 3 }, + { + "begin": 11253, + "end": 11257, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 11291, + "end": 11294, + "name": "PUSH", + "source": 3, + "value": "C0" + }, + { "begin": 11280, "end": 11289, "name": "DUP3", "source": 3 }, + { "begin": 11276, "end": 11295, "name": "ADD", "source": 3 }, + { "begin": 11268, "end": 11295, "name": "SWAP1", "source": 3 }, + { "begin": 11268, "end": 11295, "name": "POP", "source": 3 }, + { + "begin": 11305, + "end": 11376, + "name": "PUSH [tag]", + "source": 3, + "value": "411" + }, + { + "begin": 11373, + "end": 11374, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 11362, "end": 11371, "name": "DUP4", "source": 3 }, + { "begin": 11358, "end": 11375, "name": "ADD", "source": 3 }, + { "begin": 11349, "end": 11355, "name": "DUP10", "source": 3 }, + { + "begin": 11305, + "end": 11376, + "name": "PUSH [tag]", + "source": 3, + "value": "255" + }, + { + "begin": 11305, + "end": 11376, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 11305, + "end": 11376, + "name": "tag", + "source": 3, + "value": "411" + }, + { "begin": 11305, "end": 11376, "name": "JUMPDEST", "source": 3 }, + { + "begin": 11386, + "end": 11458, + "name": "PUSH [tag]", + "source": 3, + "value": "412" + }, + { + "begin": 11454, + "end": 11456, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 11443, "end": 11452, "name": "DUP4", "source": 3 }, + { "begin": 11439, "end": 11457, "name": "ADD", "source": 3 }, + { "begin": 11430, "end": 11436, "name": "DUP9", "source": 3 }, + { + "begin": 11386, + "end": 11458, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 11386, + "end": 11458, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 11386, + "end": 11458, + "name": "tag", + "source": 3, + "value": "412" + }, + { "begin": 11386, "end": 11458, "name": "JUMPDEST", "source": 3 }, + { + "begin": 11468, + "end": 11538, + "name": "PUSH [tag]", + "source": 3, + "value": "413" + }, + { + "begin": 11534, + "end": 11536, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 11523, "end": 11532, "name": "DUP4", "source": 3 }, + { "begin": 11519, "end": 11537, "name": "ADD", "source": 3 }, + { "begin": 11510, "end": 11516, "name": "DUP8", "source": 3 }, + { + "begin": 11468, + "end": 11538, + "name": "PUSH [tag]", + "source": 3, + "value": "262" + }, + { + "begin": 11468, + "end": 11538, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 11468, + "end": 11538, + "name": "tag", + "source": 3, + "value": "413" + }, + { "begin": 11468, "end": 11538, "name": "JUMPDEST", "source": 3 }, + { + "begin": 11548, + "end": 11620, + "name": "PUSH [tag]", + "source": 3, + "value": "414" + }, + { + "begin": 11616, + "end": 11618, + "name": "PUSH", + "source": 3, + "value": "60" + }, + { "begin": 11605, "end": 11614, "name": "DUP4", "source": 3 }, + { "begin": 11601, "end": 11619, "name": "ADD", "source": 3 }, + { "begin": 11592, "end": 11598, "name": "DUP7", "source": 3 }, + { + "begin": 11548, + "end": 11620, + "name": "PUSH [tag]", + "source": 3, + "value": "234" + }, + { + "begin": 11548, + "end": 11620, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 11548, + "end": 11620, + "name": "tag", + "source": 3, + "value": "414" + }, + { "begin": 11548, "end": 11620, "name": "JUMPDEST", "source": 3 }, + { + "begin": 11630, + "end": 11699, + "name": "PUSH [tag]", + "source": 3, + "value": "415" + }, + { + "begin": 11694, + "end": 11697, + "name": "PUSH", + "source": 3, + "value": "80" + }, + { "begin": 11683, "end": 11692, "name": "DUP4", "source": 3 }, + { "begin": 11679, "end": 11698, "name": "ADD", "source": 3 }, + { "begin": 11670, "end": 11676, "name": "DUP6", "source": 3 }, + { + "begin": 11630, + "end": 11699, + "name": "PUSH [tag]", + "source": 3, + "value": "266" + }, + { + "begin": 11630, + "end": 11699, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 11630, + "end": 11699, + "name": "tag", + "source": 3, + "value": "415" + }, + { "begin": 11630, "end": 11699, "name": "JUMPDEST", "source": 3 }, + { + "begin": 11709, + "end": 11780, + "name": "PUSH [tag]", + "source": 3, + "value": "416" + }, + { + "begin": 11775, + "end": 11778, + "name": "PUSH", + "source": 3, + "value": "A0" + }, + { "begin": 11764, "end": 11773, "name": "DUP4", "source": 3 }, + { "begin": 11760, "end": 11779, "name": "ADD", "source": 3 }, + { "begin": 11751, "end": 11757, "name": "DUP5", "source": 3 }, + { + "begin": 11709, + "end": 11780, + "name": "PUSH [tag]", + "source": 3, + "value": "271" + }, + { + "begin": 11709, + "end": 11780, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 11709, + "end": 11780, + "name": "tag", + "source": 3, + "value": "416" + }, + { "begin": 11709, "end": 11780, "name": "JUMPDEST", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "SWAP8", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "SWAP7", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "POP", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "POP", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "POP", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "POP", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "POP", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "POP", "source": 3 }, + { "begin": 11028, "end": 11787, "name": "POP", "source": 3 }, + { + "begin": 11028, + "end": 11787, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 11793, + "end": 11936, + "name": "tag", + "source": 3, + "value": "272" + }, + { "begin": 11793, "end": 11936, "name": "JUMPDEST", "source": 3 }, + { + "begin": 11850, + "end": 11855, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 11881, "end": 11887, "name": "DUP2", "source": 3 }, + { "begin": 11875, "end": 11888, "name": "MLOAD", "source": 3 }, + { "begin": 11866, "end": 11888, "name": "SWAP1", "source": 3 }, + { "begin": 11866, "end": 11888, "name": "POP", "source": 3 }, + { + "begin": 11897, + "end": 11930, + "name": "PUSH [tag]", + "source": 3, + "value": "418" + }, + { "begin": 11924, "end": 11929, "name": "DUP2", "source": 3 }, + { + "begin": 11897, + "end": 11930, + "name": "PUSH [tag]", + "source": 3, + "value": "238" + }, + { + "begin": 11897, + "end": 11930, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 11897, + "end": 11930, + "name": "tag", + "source": 3, + "value": "418" + }, + { "begin": 11897, "end": 11930, "name": "JUMPDEST", "source": 3 }, + { "begin": 11793, "end": 11936, "name": "SWAP3", "source": 3 }, + { "begin": 11793, "end": 11936, "name": "SWAP2", "source": 3 }, + { "begin": 11793, "end": 11936, "name": "POP", "source": 3 }, + { "begin": 11793, "end": 11936, "name": "POP", "source": 3 }, + { + "begin": 11793, + "end": 11936, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 11942, + "end": 12293, + "name": "tag", + "source": 3, + "value": "144" + }, + { "begin": 11942, "end": 12293, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12012, + "end": 12018, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 12061, + "end": 12063, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 12049, "end": 12058, "name": "DUP3", "source": 3 }, + { "begin": 12040, "end": 12047, "name": "DUP5", "source": 3 }, + { "begin": 12036, "end": 12059, "name": "SUB", "source": 3 }, + { "begin": 12032, "end": 12064, "name": "SLT", "source": 3 }, + { "begin": 12029, "end": 12148, "name": "ISZERO", "source": 3 }, + { + "begin": 12029, + "end": 12148, + "name": "PUSH [tag]", + "source": 3, + "value": "420" + }, + { "begin": 12029, "end": 12148, "name": "JUMPI", "source": 3 }, + { + "begin": 12067, + "end": 12146, + "name": "PUSH [tag]", + "source": 3, + "value": "421" + }, + { + "begin": 12067, + "end": 12146, + "name": "PUSH [tag]", + "source": 3, + "value": "236" + }, + { + "begin": 12067, + "end": 12146, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 12067, + "end": 12146, + "name": "tag", + "source": 3, + "value": "421" + }, + { "begin": 12067, "end": 12146, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12029, + "end": 12148, + "name": "tag", + "source": 3, + "value": "420" + }, + { "begin": 12029, "end": 12148, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12187, + "end": 12188, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 12212, + "end": 12276, + "name": "PUSH [tag]", + "source": 3, + "value": "422" + }, + { "begin": 12268, "end": 12275, "name": "DUP5", "source": 3 }, + { "begin": 12259, "end": 12265, "name": "DUP3", "source": 3 }, + { "begin": 12248, "end": 12257, "name": "DUP6", "source": 3 }, + { "begin": 12244, "end": 12266, "name": "ADD", "source": 3 }, + { + "begin": 12212, + "end": 12276, + "name": "PUSH [tag]", + "source": 3, + "value": "272" + }, + { + "begin": 12212, + "end": 12276, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 12212, + "end": 12276, + "name": "tag", + "source": 3, + "value": "422" + }, + { "begin": 12212, "end": 12276, "name": "JUMPDEST", "source": 3 }, + { "begin": 12202, "end": 12276, "name": "SWAP2", "source": 3 }, + { "begin": 12202, "end": 12276, "name": "POP", "source": 3 }, + { "begin": 12158, "end": 12286, "name": "POP", "source": 3 }, + { "begin": 11942, "end": 12293, "name": "SWAP3", "source": 3 }, + { "begin": 11942, "end": 12293, "name": "SWAP2", "source": 3 }, + { "begin": 11942, "end": 12293, "name": "POP", "source": 3 }, + { "begin": 11942, "end": 12293, "name": "POP", "source": 3 }, + { + "begin": 11942, + "end": 12293, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 12299, + "end": 12951, + "name": "tag", + "source": 3, + "value": "148" + }, + { "begin": 12299, "end": 12951, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12498, + "end": 12502, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 12536, + "end": 12539, + "name": "PUSH", + "source": 3, + "value": "A0" + }, + { "begin": 12525, "end": 12534, "name": "DUP3", "source": 3 }, + { "begin": 12521, "end": 12540, "name": "ADD", "source": 3 }, + { "begin": 12513, "end": 12540, "name": "SWAP1", "source": 3 }, + { "begin": 12513, "end": 12540, "name": "POP", "source": 3 }, + { + "begin": 12550, + "end": 12621, + "name": "PUSH [tag]", + "source": 3, + "value": "424" + }, + { + "begin": 12618, + "end": 12619, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 12607, "end": 12616, "name": "DUP4", "source": 3 }, + { "begin": 12603, "end": 12620, "name": "ADD", "source": 3 }, + { "begin": 12594, "end": 12600, "name": "DUP9", "source": 3 }, + { + "begin": 12550, + "end": 12621, + "name": "PUSH [tag]", + "source": 3, + "value": "255" + }, + { + "begin": 12550, + "end": 12621, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 12550, + "end": 12621, + "name": "tag", + "source": 3, + "value": "424" + }, + { "begin": 12550, "end": 12621, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12631, + "end": 12703, + "name": "PUSH [tag]", + "source": 3, + "value": "425" + }, + { + "begin": 12699, + "end": 12701, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 12688, "end": 12697, "name": "DUP4", "source": 3 }, + { "begin": 12684, "end": 12702, "name": "ADD", "source": 3 }, + { "begin": 12675, "end": 12681, "name": "DUP8", "source": 3 }, + { + "begin": 12631, + "end": 12703, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 12631, + "end": 12703, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 12631, + "end": 12703, + "name": "tag", + "source": 3, + "value": "425" + }, + { "begin": 12631, "end": 12703, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12713, + "end": 12783, + "name": "PUSH [tag]", + "source": 3, + "value": "426" + }, + { + "begin": 12779, + "end": 12781, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 12768, "end": 12777, "name": "DUP4", "source": 3 }, + { "begin": 12764, "end": 12782, "name": "ADD", "source": 3 }, + { "begin": 12755, "end": 12761, "name": "DUP7", "source": 3 }, + { + "begin": 12713, + "end": 12783, + "name": "PUSH [tag]", + "source": 3, + "value": "262" + }, + { + "begin": 12713, + "end": 12783, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 12713, + "end": 12783, + "name": "tag", + "source": 3, + "value": "426" + }, + { "begin": 12713, "end": 12783, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12793, + "end": 12865, + "name": "PUSH [tag]", + "source": 3, + "value": "427" + }, + { + "begin": 12861, + "end": 12863, + "name": "PUSH", + "source": 3, + "value": "60" + }, + { "begin": 12850, "end": 12859, "name": "DUP4", "source": 3 }, + { "begin": 12846, "end": 12864, "name": "ADD", "source": 3 }, + { "begin": 12837, "end": 12843, "name": "DUP6", "source": 3 }, + { + "begin": 12793, + "end": 12865, + "name": "PUSH [tag]", + "source": 3, + "value": "234" + }, + { + "begin": 12793, + "end": 12865, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 12793, + "end": 12865, + "name": "tag", + "source": 3, + "value": "427" + }, + { "begin": 12793, "end": 12865, "name": "JUMPDEST", "source": 3 }, + { + "begin": 12875, + "end": 12944, + "name": "PUSH [tag]", + "source": 3, + "value": "428" + }, + { + "begin": 12939, + "end": 12942, + "name": "PUSH", + "source": 3, + "value": "80" + }, + { "begin": 12928, "end": 12937, "name": "DUP4", "source": 3 }, + { "begin": 12924, "end": 12943, "name": "ADD", "source": 3 }, + { "begin": 12915, "end": 12921, "name": "DUP5", "source": 3 }, + { + "begin": 12875, + "end": 12944, + "name": "PUSH [tag]", + "source": 3, + "value": "266" + }, + { + "begin": 12875, + "end": 12944, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 12875, + "end": 12944, + "name": "tag", + "source": 3, + "value": "428" + }, + { "begin": 12875, "end": 12944, "name": "JUMPDEST", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "SWAP7", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "SWAP6", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "POP", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "POP", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "POP", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "POP", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "POP", "source": 3 }, + { "begin": 12299, "end": 12951, "name": "POP", "source": 3 }, + { + "begin": 12299, + "end": 12951, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 12957, + "end": 13289, + "name": "tag", + "source": 3, + "value": "155" + }, + { "begin": 12957, "end": 13289, "name": "JUMPDEST", "source": 3 }, + { + "begin": 13078, + "end": 13082, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 13116, + "end": 13118, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 13105, "end": 13114, "name": "DUP3", "source": 3 }, + { "begin": 13101, "end": 13119, "name": "ADD", "source": 3 }, + { "begin": 13093, "end": 13119, "name": "SWAP1", "source": 3 }, + { "begin": 13093, "end": 13119, "name": "POP", "source": 3 }, + { + "begin": 13129, + "end": 13200, + "name": "PUSH [tag]", + "source": 3, + "value": "430" + }, + { + "begin": 13197, + "end": 13198, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 13186, "end": 13195, "name": "DUP4", "source": 3 }, + { "begin": 13182, "end": 13199, "name": "ADD", "source": 3 }, + { "begin": 13173, "end": 13179, "name": "DUP6", "source": 3 }, + { + "begin": 13129, + "end": 13200, + "name": "PUSH [tag]", + "source": 3, + "value": "255" + }, + { + "begin": 13129, + "end": 13200, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 13129, + "end": 13200, + "name": "tag", + "source": 3, + "value": "430" + }, + { "begin": 13129, "end": 13200, "name": "JUMPDEST", "source": 3 }, + { + "begin": 13210, + "end": 13282, + "name": "PUSH [tag]", + "source": 3, + "value": "431" + }, + { + "begin": 13278, + "end": 13280, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 13267, "end": 13276, "name": "DUP4", "source": 3 }, + { "begin": 13263, "end": 13281, "name": "ADD", "source": 3 }, + { "begin": 13254, "end": 13260, "name": "DUP5", "source": 3 }, + { + "begin": 13210, + "end": 13282, + "name": "PUSH [tag]", + "source": 3, + "value": "255" + }, + { + "begin": 13210, + "end": 13282, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 13210, + "end": 13282, + "name": "tag", + "source": 3, + "value": "431" + }, + { "begin": 13210, "end": 13282, "name": "JUMPDEST", "source": 3 }, + { "begin": 12957, "end": 13289, "name": "SWAP4", "source": 3 }, + { "begin": 12957, "end": 13289, "name": "SWAP3", "source": 3 }, + { "begin": 12957, "end": 13289, "name": "POP", "source": 3 }, + { "begin": 12957, "end": 13289, "name": "POP", "source": 3 }, + { "begin": 12957, "end": 13289, "name": "POP", "source": 3 }, + { + "begin": 12957, + "end": 13289, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 13295, + "end": 13475, + "name": "tag", + "source": 3, + "value": "273" + }, + { "begin": 13295, "end": 13475, "name": "JUMPDEST", "source": 3 }, + { + "begin": 13343, + "end": 13420, + "name": "PUSH", + "source": 3, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 13340, + "end": 13341, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 13333, "end": 13421, "name": "MSTORE", "source": 3 }, + { + "begin": 13440, + "end": 13444, + "name": "PUSH", + "source": 3, + "value": "12" + }, + { + "begin": 13437, + "end": 13438, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 13430, "end": 13445, "name": "MSTORE", "source": 3 }, + { + "begin": 13464, + "end": 13468, + "name": "PUSH", + "source": 3, + "value": "24" + }, + { + "begin": 13461, + "end": 13462, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 13454, "end": 13469, "name": "REVERT", "source": 3 }, + { + "begin": 13481, + "end": 13666, + "name": "tag", + "source": 3, + "value": "201" + }, + { "begin": 13481, "end": 13666, "name": "JUMPDEST", "source": 3 }, + { + "begin": 13521, + "end": 13522, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 13538, + "end": 13558, + "name": "PUSH [tag]", + "source": 3, + "value": "434" + }, + { "begin": 13556, "end": 13557, "name": "DUP3", "source": 3 }, + { + "begin": 13538, + "end": 13558, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 13538, + "end": 13558, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 13538, + "end": 13558, + "name": "tag", + "source": 3, + "value": "434" + }, + { "begin": 13538, "end": 13558, "name": "JUMPDEST", "source": 3 }, + { "begin": 13533, "end": 13558, "name": "SWAP2", "source": 3 }, + { "begin": 13533, "end": 13558, "name": "POP", "source": 3 }, + { + "begin": 13572, + "end": 13592, + "name": "PUSH [tag]", + "source": 3, + "value": "435" + }, + { "begin": 13590, "end": 13591, "name": "DUP4", "source": 3 }, + { + "begin": 13572, + "end": 13592, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 13572, + "end": 13592, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 13572, + "end": 13592, + "name": "tag", + "source": 3, + "value": "435" + }, + { "begin": 13572, "end": 13592, "name": "JUMPDEST", "source": 3 }, + { "begin": 13567, "end": 13592, "name": "SWAP3", "source": 3 }, + { "begin": 13567, "end": 13592, "name": "POP", "source": 3 }, + { "begin": 13611, "end": 13612, "name": "DUP3", "source": 3 }, + { + "begin": 13601, + "end": 13636, + "name": "PUSH [tag]", + "source": 3, + "value": "436" + }, + { "begin": 13601, "end": 13636, "name": "JUMPI", "source": 3 }, + { + "begin": 13616, + "end": 13634, + "name": "PUSH [tag]", + "source": 3, + "value": "437" + }, + { + "begin": 13616, + "end": 13634, + "name": "PUSH [tag]", + "source": 3, + "value": "273" + }, + { + "begin": 13616, + "end": 13634, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 13616, + "end": 13634, + "name": "tag", + "source": 3, + "value": "437" + }, + { "begin": 13616, "end": 13634, "name": "JUMPDEST", "source": 3 }, + { + "begin": 13601, + "end": 13636, + "name": "tag", + "source": 3, + "value": "436" + }, + { "begin": 13601, "end": 13636, "name": "JUMPDEST", "source": 3 }, + { "begin": 13658, "end": 13659, "name": "DUP3", "source": 3 }, + { "begin": 13655, "end": 13656, "name": "DUP3", "source": 3 }, + { "begin": 13651, "end": 13660, "name": "DIV", "source": 3 }, + { "begin": 13646, "end": 13660, "name": "SWAP1", "source": 3 }, + { "begin": 13646, "end": 13660, "name": "POP", "source": 3 }, + { "begin": 13481, "end": 13666, "name": "SWAP3", "source": 3 }, + { "begin": 13481, "end": 13666, "name": "SWAP2", "source": 3 }, + { "begin": 13481, "end": 13666, "name": "POP", "source": 3 }, + { "begin": 13481, "end": 13666, "name": "POP", "source": 3 }, + { + "begin": 13481, + "end": 13666, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 13672, + "end": 14114, + "name": "tag", + "source": 3, + "value": "203" + }, + { "begin": 13672, "end": 14114, "name": "JUMPDEST", "source": 3 }, + { + "begin": 13821, + "end": 13825, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 13859, + "end": 13861, + "name": "PUSH", + "source": 3, + "value": "60" + }, + { "begin": 13848, "end": 13857, "name": "DUP3", "source": 3 }, + { "begin": 13844, "end": 13862, "name": "ADD", "source": 3 }, + { "begin": 13836, "end": 13862, "name": "SWAP1", "source": 3 }, + { "begin": 13836, "end": 13862, "name": "POP", "source": 3 }, + { + "begin": 13872, + "end": 13943, + "name": "PUSH [tag]", + "source": 3, + "value": "439" + }, + { + "begin": 13940, + "end": 13941, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 13929, "end": 13938, "name": "DUP4", "source": 3 }, + { "begin": 13925, "end": 13942, "name": "ADD", "source": 3 }, + { "begin": 13916, "end": 13922, "name": "DUP7", "source": 3 }, + { + "begin": 13872, + "end": 13943, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 13872, + "end": 13943, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 13872, + "end": 13943, + "name": "tag", + "source": 3, + "value": "439" + }, + { "begin": 13872, "end": 13943, "name": "JUMPDEST", "source": 3 }, + { + "begin": 13953, + "end": 14025, + "name": "PUSH [tag]", + "source": 3, + "value": "440" + }, + { + "begin": 14021, + "end": 14023, + "name": "PUSH", + "source": 3, + "value": "20" + }, + { "begin": 14010, "end": 14019, "name": "DUP4", "source": 3 }, + { "begin": 14006, "end": 14024, "name": "ADD", "source": 3 }, + { "begin": 13997, "end": 14003, "name": "DUP6", "source": 3 }, + { + "begin": 13953, + "end": 14025, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 13953, + "end": 14025, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 13953, + "end": 14025, + "name": "tag", + "source": 3, + "value": "440" + }, + { "begin": 13953, "end": 14025, "name": "JUMPDEST", "source": 3 }, + { + "begin": 14035, + "end": 14107, + "name": "PUSH [tag]", + "source": 3, + "value": "441" + }, + { + "begin": 14103, + "end": 14105, + "name": "PUSH", + "source": 3, + "value": "40" + }, + { "begin": 14092, "end": 14101, "name": "DUP4", "source": 3 }, + { "begin": 14088, "end": 14106, "name": "ADD", "source": 3 }, + { "begin": 14079, "end": 14085, "name": "DUP5", "source": 3 }, + { + "begin": 14035, + "end": 14107, + "name": "PUSH [tag]", + "source": 3, + "value": "232" + }, + { + "begin": 14035, + "end": 14107, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 14035, + "end": 14107, + "name": "tag", + "source": 3, + "value": "441" + }, + { "begin": 14035, "end": 14107, "name": "JUMPDEST", "source": 3 }, + { "begin": 13672, "end": 14114, "name": "SWAP5", "source": 3 }, + { "begin": 13672, "end": 14114, "name": "SWAP4", "source": 3 }, + { "begin": 13672, "end": 14114, "name": "POP", "source": 3 }, + { "begin": 13672, "end": 14114, "name": "POP", "source": 3 }, + { "begin": 13672, "end": 14114, "name": "POP", "source": 3 }, + { "begin": 13672, "end": 14114, "name": "POP", "source": 3 }, + { + "begin": 13672, + "end": 14114, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 14120, + "end": 14300, + "name": "tag", + "source": 3, + "value": "209" + }, + { "begin": 14120, "end": 14300, "name": "JUMPDEST", "source": 3 }, + { + "begin": 14168, + "end": 14245, + "name": "PUSH", + "source": 3, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 14165, + "end": 14166, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 14158, "end": 14246, "name": "MSTORE", "source": 3 }, + { + "begin": 14265, + "end": 14269, + "name": "PUSH", + "source": 3, + "value": "32" + }, + { + "begin": 14262, + "end": 14263, + "name": "PUSH", + "source": 3, + "value": "4" + }, + { "begin": 14255, "end": 14270, "name": "MSTORE", "source": 3 }, + { + "begin": 14289, + "end": 14293, + "name": "PUSH", + "source": 3, + "value": "24" + }, + { + "begin": 14286, + "end": 14287, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { "begin": 14279, "end": 14294, "name": "REVERT", "source": 3 }, + { + "begin": 14306, + "end": 14482, + "name": "tag", + "source": 3, + "value": "211" + }, + { "begin": 14306, "end": 14482, "name": "JUMPDEST", "source": 3 }, + { + "begin": 14338, + "end": 14339, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 14355, + "end": 14375, + "name": "PUSH [tag]", + "source": 3, + "value": "444" + }, + { "begin": 14373, "end": 14374, "name": "DUP3", "source": 3 }, + { + "begin": 14355, + "end": 14375, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 14355, + "end": 14375, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 14355, + "end": 14375, + "name": "tag", + "source": 3, + "value": "444" + }, + { "begin": 14355, "end": 14375, "name": "JUMPDEST", "source": 3 }, + { "begin": 14350, "end": 14375, "name": "SWAP2", "source": 3 }, + { "begin": 14350, "end": 14375, "name": "POP", "source": 3 }, + { + "begin": 14389, + "end": 14409, + "name": "PUSH [tag]", + "source": 3, + "value": "445" + }, + { "begin": 14407, "end": 14408, "name": "DUP4", "source": 3 }, + { + "begin": 14389, + "end": 14409, + "name": "PUSH [tag]", + "source": 3, + "value": "231" + }, + { + "begin": 14389, + "end": 14409, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 14389, + "end": 14409, + "name": "tag", + "source": 3, + "value": "445" + }, + { "begin": 14389, "end": 14409, "name": "JUMPDEST", "source": 3 }, + { "begin": 14384, "end": 14409, "name": "SWAP3", "source": 3 }, + { "begin": 14384, "end": 14409, "name": "POP", "source": 3 }, + { "begin": 14428, "end": 14429, "name": "DUP3", "source": 3 }, + { + "begin": 14418, + "end": 14453, + "name": "PUSH [tag]", + "source": 3, + "value": "446" + }, + { "begin": 14418, "end": 14453, "name": "JUMPI", "source": 3 }, + { + "begin": 14433, + "end": 14451, + "name": "PUSH [tag]", + "source": 3, + "value": "447" + }, + { + "begin": 14433, + "end": 14451, + "name": "PUSH [tag]", + "source": 3, + "value": "273" + }, + { + "begin": 14433, + "end": 14451, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 14433, + "end": 14451, + "name": "tag", + "source": 3, + "value": "447" + }, + { "begin": 14433, "end": 14451, "name": "JUMPDEST", "source": 3 }, + { + "begin": 14418, + "end": 14453, + "name": "tag", + "source": 3, + "value": "446" + }, + { "begin": 14418, "end": 14453, "name": "JUMPDEST", "source": 3 }, + { "begin": 14474, "end": 14475, "name": "DUP3", "source": 3 }, + { "begin": 14471, "end": 14472, "name": "DUP3", "source": 3 }, + { "begin": 14467, "end": 14476, "name": "MOD", "source": 3 }, + { "begin": 14462, "end": 14476, "name": "SWAP1", "source": 3 }, + { "begin": 14462, "end": 14476, "name": "POP", "source": 3 }, + { "begin": 14306, "end": 14482, "name": "SWAP3", "source": 3 }, + { "begin": 14306, "end": 14482, "name": "SWAP2", "source": 3 }, + { "begin": 14306, "end": 14482, "name": "POP", "source": 3 }, + { "begin": 14306, "end": 14482, "name": "POP", "source": 3 }, + { + "begin": 14306, + "end": 14482, + "name": "JUMP", + "source": 3, + "value": "[out]" + }, + { + "begin": 14488, + "end": 14663, + "name": "tag", + "source": 3, + "value": "223" + }, + { "begin": 14488, "end": 14663, "name": "JUMPDEST", "source": 3 }, + { + "begin": 14526, + "end": 14529, + "name": "PUSH", + "source": 3, + "value": "0" + }, + { + "begin": 14549, + "end": 14572, + "name": "PUSH [tag]", + "source": 3, + "value": "449" + }, + { "begin": 14566, "end": 14571, "name": "DUP3", "source": 3 }, + { + "begin": 14549, + "end": 14572, + "name": "PUSH [tag]", + "source": 3, + "value": "263" + }, + { + "begin": 14549, + "end": 14572, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 14549, + "end": 14572, + "name": "tag", + "source": 3, + "value": "449" + }, + { "begin": 14549, "end": 14572, "name": "JUMPDEST", "source": 3 }, + { "begin": 14540, "end": 14572, "name": "SWAP2", "source": 3 }, + { "begin": 14540, "end": 14572, "name": "POP", "source": 3 }, + { + "begin": 14594, + "end": 14604, + "name": "PUSH", + "source": 3, + "value": "FFFFFFFF" + }, + { "begin": 14587, "end": 14592, "name": "DUP3", "source": 3 }, + { "begin": 14584, "end": 14605, "name": "EQ", "source": 3 }, + { "begin": 14581, "end": 14628, "name": "ISZERO", "source": 3 }, + { + "begin": 14581, + "end": 14628, + "name": "PUSH [tag]", + "source": 3, + "value": "450" + }, + { "begin": 14581, "end": 14628, "name": "JUMPI", "source": 3 }, + { + "begin": 14608, + "end": 14626, + "name": "PUSH [tag]", + "source": 3, + "value": "451" + }, + { + "begin": 14608, + "end": 14626, + "name": "PUSH [tag]", + "source": 3, + "value": "269" + }, + { + "begin": 14608, + "end": 14626, + "name": "JUMP", + "source": 3, + "value": "[in]" + }, + { + "begin": 14608, + "end": 14626, + "name": "tag", + "source": 3, + "value": "451" + }, + { "begin": 14608, "end": 14626, "name": "JUMPDEST", "source": 3 }, + { + "begin": 14581, + "end": 14628, + "name": "tag", + "source": 3, + "value": "450" + }, + { "begin": 14581, "end": 14628, "name": "JUMPDEST", "source": 3 }, + { + "begin": 14655, + "end": 14656, + "name": "PUSH", + "source": 3, + "value": "1" + }, + { "begin": 14648, "end": 14653, "name": "DUP3", "source": 3 }, + { "begin": 14644, "end": 14657, "name": "ADD", "source": 3 }, + { "begin": 14637, "end": 14657, "name": "SWAP1", "source": 3 }, + { "begin": 14637, "end": 14657, "name": "POP", "source": 3 }, + { "begin": 14488, "end": 14663, "name": "SWAP2", "source": 3 }, + { "begin": 14488, "end": 14663, "name": "SWAP1", "source": 3 }, + { "begin": 14488, "end": 14663, "name": "POP", "source": 3 }, + { + "begin": 14488, + "end": 14663, + "name": "JUMP", + "source": 3, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "FULFILLMENT_GAS_LIMIT()": "51a8e298", + "MAX_PARTICIPANTS()": "f3baf070", + "MIN_FEE()": "76c7a3c7", + "MIN_PARTICIPANTS()": "3a984bc5", + "NUM_WINNERS()": "cad0338c", + "PARTICIPATION_FEE()": "49943a13", + "SALT_PREFIX()": "17a47282", + "VRF_BLOCKS_DELAY()": "7d5a9c5a", + "globalRequestCount()": "2b855d19", + "increaseRequestFee()": "081275d4", + "jackpot()": "6b31ee01", + "participants(uint256)": "35c1d349", + "participate()": "d11711a2", + "randomness()": "36013189", + "rawFulfillRandomWords(uint256,uint256[])": "1fe543e3", + "requestId()": "006d6cae", + "startLottery()": "160344e2", + "status()": "200d2ed2" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum Randomness.RandomnessSource\",\"name\":\"source\",\"type\":\"uint8\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"DepositTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"InvalidParticipationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"NotEnoughFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"NotEnoughParticipants\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"have\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"want\",\"type\":\"address\"}],\"name\":\"OnlyRandomnessPrecompileCanFulfill\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"TooManyParticipants\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WaitingFulfillment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"randomWord\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Awarded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"participantCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"jackpot\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"winnerCount\",\"type\":\"uint256\"}],\"name\":\"Ended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"participantCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"jackpot\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"}],\"name\":\"Started\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FULFILLMENT_GAS_LIMIT\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PARTICIPANTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_PARTICIPANTS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NUM_WINNERS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PARTICIPATION_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SALT_PREFIX\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VRF_BLOCKS_DELAY\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"globalRequestCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"increaseRequestFee\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"jackpot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"participants\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"participate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomness\",\"outputs\":[{\"internalType\":\"contract Randomness\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"randomWords\",\"type\":\"uint256[]\"}],\"name\":\"rawFulfillRandomWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startLottery\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enum RandomnessLotteryDemo.LotteryStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Awarded(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount being awarded\",\"randomWord\":\"The randomWord being used (for informative purposes)\",\"winner\":\"The participant getting awarded\"}},\"Ended(uint256,uint256,uint256)\":{\"params\":{\"jackpot\":\"The total jackpot\",\"participantCount\":\"The number of participants\",\"winnerCount\":\"The number of winners\"}},\"Started(uint256,uint256,uint256)\":{\"params\":{\"jackpot\":\"The total jackpot\",\"participantCount\":\"The number of participants\",\"requestId\":\"The pseudo-random request id\"}}},\"kind\":\"dev\",\"methods\":{\"increaseRequestFee()\":{\"details\":\"This is needed if the gas price increase significantly beforethe request is fulfilled\"}},\"stateVariables\":{\"FULFILLMENT_GAS_LIMIT\":{\"details\":\"Depends on the code that is executed and the number of words requestedso XXX is a safe default for this example contract. Test and adjustthis limit based on the size of the request and the processing of thecallback request in the fulfillRandomWords() function.The fee paid to start the lottery needs to be sufficient to pay for the gas limit\"},\"MAX_PARTICIPANTS\":{\"details\":\"It is important to limit the total jackpot (by limiting the number ofparticipants) to guarantee the economic incentive of a collatorto avoid trying to influence the pseudo-random(See Randomness.sol for more details)\"},\"MIN_FEE\":{\"details\":\"This does not guarantee that there will be enough fee to pay for thegas used by the fulfillment. Ideally it should be over-estimatedconsidering possible fluctuation of the gas price.Additional fee will be refunded to the caller\"},\"NUM_WINNERS\":{\"details\":\"This number corresponds to how many random words will requestedCannot exceed MAX_RANDOM_WORDS\"},\"VRF_BLOCKS_DELAY\":{\"details\":\"The MIN_VRF_BLOCKS_DELAY provides a minimum number that is safe enough forgames with low economical value at stake.Increasing the delay reduces slightly the probability (already very low)of a collator being able to predict the pseudo-random number\"},\"globalRequestCount\":{\"details\":\"This number is used as a salt to make it unique for each request\"}},\"version\":1},\"userdoc\":{\"errors\":{\"DepositTooLow(uint256,uint256)\":[{\"notice\":\"The deposit given is too low\"}],\"InvalidParticipationFee(uint256,uint256)\":[{\"notice\":\"The provided fee to participate doesn't match the required amount\"}],\"NotEnoughFee(uint256,uint256)\":[{\"notice\":\"There are not enough fee to start the lottery\"}],\"NotEnoughParticipants(uint256,uint256)\":[{\"notice\":\"The lottery doesn't have enough participants to start\"}],\"TooManyParticipants(uint256,uint256)\":[{\"notice\":\"The lottery doesn't accept additional participants\"}],\"WaitingFulfillment()\":[{\"notice\":\"The lottery has requested random words and is waiting for fulfillment\"}]},\"events\":{\"Awarded(address,uint256,uint256)\":{\"notice\":\"Event sent when a winner is awarded\"},\"Ended(uint256,uint256,uint256)\":{\"notice\":\"Event sent when the lottery ends\"},\"Started(uint256,uint256,uint256)\":{\"notice\":\"Event sent when the lottery started\"}},\"kind\":\"user\",\"methods\":{\"FULFILLMENT_GAS_LIMIT()\":{\"notice\":\"The gas limit allowed to be used for the fulfillment\"},\"MAX_PARTICIPANTS()\":{\"notice\":\"The maximum number of participants allowed to participate\"},\"MIN_FEE()\":{\"notice\":\"The minimum fee needed to start the lottery\"},\"MIN_PARTICIPANTS()\":{\"notice\":\"The minimum number of participants to start the lottery\"},\"NUM_WINNERS()\":{\"notice\":\"The number of winners\"},\"PARTICIPATION_FEE()\":{\"notice\":\"The fee needed to participate in the lottery. Will go into the jackpot\"},\"SALT_PREFIX()\":{\"notice\":\"A string used to allow having different salt that other contracts\"},\"VRF_BLOCKS_DELAY()\":{\"notice\":\"The number of block before the request can be fulfilled (for Local VRF randomness)\"},\"globalRequestCount()\":{\"notice\":\"global number of request done\"},\"increaseRequestFee()\":{\"notice\":\"Allows to increase the fee associated with the request\"},\"jackpot()\":{\"notice\":\"The current amount of token at stake in the lottery\"},\"participants(uint256)\":{\"notice\":\"The list of current participants\"},\"randomness()\":{\"notice\":\"The Randomness Precompile Interface\"},\"requestId()\":{\"notice\":\"The current request id\"}},\"notice\":\"Smart contract to demonstrate how to use requestLocalVRFRandomWords\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"RandomnessLotteryDemo\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xd47fd3df3a07d93d1c092a2bebd464614b9f10ad356f93c146722b25187a4b8f\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://b639db1421201a8d956d4a53310d3ec27dc4577ce4da3628fe4754206baee260\",\"dweb:/ipfs/QmQaj6X2HDoRfD6mECq2YPUevgJWNWzGeEjPAo2CTmBUcU\"]},\"precompiles/randomness/Randomness.sol\":{\"keccak256\":\"0x4a9c5b6746c5c85660a078d3b1f7ebdf8185630ccd31cab26a59372717907ba0\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://ea0d29c24e65a74e99c976548bbb7c3d15fa99a57e31bd65a4f26c813181fc4a\",\"dweb:/ipfs/QmNU17ur1Gxny4dekCBLrswfymydjKaggMrdCc38NLaQv8\"]},\"precompiles/randomness/RandomnessConsumer.sol\":{\"keccak256\":\"0xa2cae2ffd4ab6b21c7b45cafe61bf05a8b5b2106789455ca8e27c39f6e4a008d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://3261c110b45cafdcdbe5536f29a6f32911f03029b25067fd669e05eabb95e93b\",\"dweb:/ipfs/QmTF7bmb2eYwRmtp9WSuzANNUbgXGJVy2SCPHEFXnRz8zP\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 13, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "randomness", + "offset": 0, + "slot": "0", + "type": "t_contract(Randomness)687" + }, + { + "astId": 86, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "FULFILLMENT_GAS_LIMIT", + "offset": 20, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 92, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "MIN_FEE", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 96, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "NUM_WINNERS", + "offset": 0, + "slot": "2", + "type": "t_uint8" + }, + { + "astId": 100, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "VRF_BLOCKS_DELAY", + "offset": 1, + "slot": "2", + "type": "t_uint32" + }, + { + "astId": 104, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "MIN_PARTICIPANTS", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 108, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "MAX_PARTICIPANTS", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 112, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "PARTICIPATION_FEE", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 116, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "SALT_PREFIX", + "offset": 0, + "slot": "6", + "type": "t_bytes32" + }, + { + "astId": 119, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "globalRequestCount", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 122, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "requestId", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 126, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "participants", + "offset": 0, + "slot": "9", + "type": "t_array(t_address)dyn_storage" + }, + { + "astId": 129, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "jackpot", + "offset": 0, + "slot": "10", + "type": "t_uint256" + }, + { + "astId": 132, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "owner", + "offset": 0, + "slot": "11", + "type": "t_address" + }, + { + "astId": 136, + "contract": "main.sol:RandomnessLotteryDemo", + "label": "randomnessSource", + "offset": 20, + "slot": "11", + "type": "t_enum(RandomnessSource)573" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(Randomness)687": { + "encoding": "inplace", + "label": "contract Randomness", + "numberOfBytes": "20" + }, + "t_enum(RandomnessSource)573": { + "encoding": "inplace", + "label": "enum Randomness.RandomnessSource", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "userdoc": { + "errors": { + "DepositTooLow(uint256,uint256)": [ + { "notice": "The deposit given is too low" } + ], + "InvalidParticipationFee(uint256,uint256)": [ + { + "notice": "The provided fee to participate doesn't match the required amount" + } + ], + "NotEnoughFee(uint256,uint256)": [ + { "notice": "There are not enough fee to start the lottery" } + ], + "NotEnoughParticipants(uint256,uint256)": [ + { "notice": "The lottery doesn't have enough participants to start" } + ], + "TooManyParticipants(uint256,uint256)": [ + { "notice": "The lottery doesn't accept additional participants" } + ], + "WaitingFulfillment()": [ + { + "notice": "The lottery has requested random words and is waiting for fulfillment" + } + ] + }, + "events": { + "Awarded(address,uint256,uint256)": { + "notice": "Event sent when a winner is awarded" + }, + "Ended(uint256,uint256,uint256)": { + "notice": "Event sent when the lottery ends" + }, + "Started(uint256,uint256,uint256)": { + "notice": "Event sent when the lottery started" + } + }, + "kind": "user", + "methods": { + "FULFILLMENT_GAS_LIMIT()": { + "notice": "The gas limit allowed to be used for the fulfillment" + }, + "MAX_PARTICIPANTS()": { + "notice": "The maximum number of participants allowed to participate" + }, + "MIN_FEE()": { + "notice": "The minimum fee needed to start the lottery" + }, + "MIN_PARTICIPANTS()": { + "notice": "The minimum number of participants to start the lottery" + }, + "NUM_WINNERS()": { "notice": "The number of winners" }, + "PARTICIPATION_FEE()": { + "notice": "The fee needed to participate in the lottery. Will go into the jackpot" + }, + "SALT_PREFIX()": { + "notice": "A string used to allow having different salt that other contracts" + }, + "VRF_BLOCKS_DELAY()": { + "notice": "The number of block before the request can be fulfilled (for Local VRF randomness)" + }, + "globalRequestCount()": { "notice": "global number of request done" }, + "increaseRequestFee()": { + "notice": "Allows to increase the fee associated with the request" + }, + "jackpot()": { + "notice": "The current amount of token at stake in the lottery" + }, + "participants(uint256)": { + "notice": "The list of current participants" + }, + "randomness()": { "notice": "The Randomness Precompile Interface" }, + "requestId()": { "notice": "The current request id" } + }, + "notice": "Smart contract to demonstrate how to use requestLocalVRFRandomWords", + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\nimport \"../../../precompiles/randomness/Randomness.sol\";\nimport \"../../../precompiles/randomness/RandomnessConsumer.sol\";\n\n/// @notice Smart contract to demonstrate how to use requestLocalVRFRandomWords\ncontract RandomnessLotteryDemo is RandomnessConsumer {\n /// @notice The Randomness Precompile Interface\n Randomness public randomness =\n Randomness(0x0000000000000000000000000000000000000809);\n\n /// @notice The lottery has requested random words and is waiting for fulfillment\n error WaitingFulfillment();\n\n /// @notice The lottery doesn't have enough participants to start\n error NotEnoughParticipants(uint256 value, uint256 required);\n\n /// @notice The lottery doesn't accept additional participants\n error TooManyParticipants(uint256 value, uint256 required);\n\n /// @notice There are not enough fee to start the lottery\n error NotEnoughFee(uint256 value, uint256 required);\n\n /// @notice The deposit given is too low\n error DepositTooLow(uint256 value, uint256 required);\n\n /// @notice The provided fee to participate doesn't match the required amount\n error InvalidParticipationFee(uint256 value, uint256 required);\n\n /// @notice Event sent when a winner is awarded\n /// @param winner The participant getting awarded\n /// @param randomWord The randomWord being used (for informative purposes)\n /// @param amount The amount being awarded\n event Awarded(address indexed winner, uint256 randomWord, uint256 amount);\n\n /// @notice Event sent when the lottery started\n /// @param participantCount The number of participants\n /// @param jackpot The total jackpot\n /// @param requestId The pseudo-random request id\n event Started(uint256 participantCount, uint256 jackpot, uint256 requestId);\n\n /// @notice Event sent when the lottery ends\n /// @param participantCount The number of participants\n /// @param jackpot The total jackpot\n /// @param winnerCount The number of winners\n event Ended(uint256 participantCount, uint256 jackpot, uint256 winnerCount);\n\n /// @notice The status of lottery\n /// @param OpenForRegistration Participants can register to get a chance to win\n /// @param RollingNumbers The lottery has requested the random words and is waiting for them\n /// @param Expired The lottery has been rolling numbers for too long. The randomness has expired\n enum LotteryStatus {\n OpenForRegistration,\n RollingNumbers,\n Expired\n }\n\n /// @notice The gas limit allowed to be used for the fulfillment\n /// @dev Depends on the code that is executed and the number of words requested\n /// @dev so XXX is a safe default for this example contract. Test and adjust\n /// @dev this limit based on the size of the request and the processing of the\n /// @dev callback request in the fulfillRandomWords() function.\n /// @dev The fee paid to start the lottery needs to be sufficient to pay for the gas limit\n uint64 public FULFILLMENT_GAS_LIMIT = 100000; // TODO: fill XXX\n\n /// @notice The minimum fee needed to start the lottery\n /// @dev This does not guarantee that there will be enough fee to pay for the\n /// @dev gas used by the fulfillment. Ideally it should be over-estimated\n /// @dev considering possible fluctuation of the gas price.\n /// @dev Additional fee will be refunded to the caller\n uint256 public MIN_FEE = FULFILLMENT_GAS_LIMIT * 1 gwei;\n\n /// @notice The number of winners\n /// @dev This number corresponds to how many random words will requested\n /// @dev Cannot exceed MAX_RANDOM_WORDS\n uint8 public NUM_WINNERS = 2;\n\n /// @notice The number of block before the request can be fulfilled (for Local VRF randomness)\n /// @dev The MIN_VRF_BLOCKS_DELAY provides a minimum number that is safe enough for\n /// @dev games with low economical value at stake.\n /// @dev Increasing the delay reduces slightly the probability (already very low)\n /// @dev of a collator being able to predict the pseudo-random number\n uint32 public VRF_BLOCKS_DELAY = MIN_VRF_BLOCKS_DELAY;\n\n /// @notice The minimum number of participants to start the lottery\n uint256 public MIN_PARTICIPANTS = 3;\n\n /// @notice The maximum number of participants allowed to participate\n /// @dev It is important to limit the total jackpot (by limiting the number of\n /// @dev participants) to guarantee the economic incentive of a collator\n /// @dev to avoid trying to influence the pseudo-random\n /// @dev (See Randomness.sol for more details)\n uint256 public MAX_PARTICIPANTS = 20;\n\n /// @notice The fee needed to participate in the lottery. Will go into the jackpot\n uint256 public PARTICIPATION_FEE = 1 ether;\n\n /// @notice A string used to allow having different salt that other contracts\n bytes32 public SALT_PREFIX = \"my_demo_salt_change_me\";\n\n /// @notice global number of request done\n /// @dev This number is used as a salt to make it unique for each request\n uint256 public globalRequestCount;\n\n /// @notice The current request id\n uint256 public requestId;\n\n /// @notice The list of current participants\n address[] public participants;\n\n /// @notice The current amount of token at stake in the lottery\n uint256 public jackpot;\n\n /// @notice the owner of the contract\n address owner;\n\n /// @notice Which randomness source to use\n Randomness.RandomnessSource randomnessSource;\n\n constructor(Randomness.RandomnessSource source)\n payable\n RandomnessConsumer()\n {\n /// Because this contract can only perform 1 random request at a time,\n /// We only need to have 1 required deposit.\n uint256 requiredDeposit = 1000000000000000000; // TODO replace with randomness.requiredDeposit();\n if (msg.value < requiredDeposit) {\n revert DepositTooLow(msg.value, requiredDeposit);\n }\n\n randomnessSource = source;\n owner = msg.sender;\n globalRequestCount = 0;\n jackpot = 0;\n /// Set the requestId to the maximum allowed value by the precompile (64 bits)\n requestId = 2**64 - 1;\n }\n\n function status() external view returns (LotteryStatus) {\n Randomness.RequestStatus requestStatus = randomness.getRequestStatus(\n requestId\n );\n if (requestStatus == Randomness.RequestStatus.DoesNotExist) {\n return LotteryStatus.OpenForRegistration;\n }\n if (\n requestStatus == Randomness.RequestStatus.Pending ||\n requestStatus == Randomness.RequestStatus.Ready\n ) {\n return LotteryStatus.RollingNumbers;\n }\n return LotteryStatus.Expired;\n }\n\n function participate() external payable {\n /// We check we haven't started the randomness request yet\n if (\n randomness.getRequestStatus(requestId) !=\n Randomness.RequestStatus.DoesNotExist\n ) {\n revert WaitingFulfillment();\n }\n\n //each player is compelled to add a certain ETH to join\n if (msg.value != PARTICIPATION_FEE) {\n revert InvalidParticipationFee(msg.value, PARTICIPATION_FEE);\n }\n participants.push(msg.sender);\n jackpot += msg.value;\n }\n\n function startLottery() external payable onlyOwner {\n /// We check we haven't started the randomness request yet\n if (\n randomness.getRequestStatus(requestId) !=\n Randomness.RequestStatus.DoesNotExist\n ) {\n revert WaitingFulfillment();\n }\n\n if (participants.length < MIN_PARTICIPANTS) {\n revert NotEnoughParticipants(participants.length, MIN_PARTICIPANTS);\n }\n if (participants.length >= MAX_PARTICIPANTS) {\n revert TooManyParticipants(participants.length, MAX_PARTICIPANTS);\n }\n\n uint256 fee = msg.value;\n if (fee < MIN_FEE) {\n revert NotEnoughFee(fee, MIN_FEE);\n }\n\n /// We verify there is enough balance on the contract to pay for the deposit.\n /// This would fail only if the deposit amount required is changed in the\n /// Randomness Precompile.\n uint256 requiredDeposit = 1000000000000000000; // TODO replace with randomness.requiredDeposit();\n if (address(this).balance < jackpot + requiredDeposit) {\n revert DepositTooLow(\n address(this).balance - jackpot,\n requiredDeposit\n );\n }\n\n if (randomnessSource == Randomness.RandomnessSource.LocalVRF) {\n /// Requesting NUM_WINNERS random words using Local VRF Randomness\n /// with a delay of VRF_BLOCKS_DELAY blocks\n /// Refund after fulfillment will go back to the caller of this function\n /// globalRequestCount is used as salt to be unique for each request\n requestId = randomness.requestLocalVRFRandomWords(\n msg.sender,\n fee,\n FULFILLMENT_GAS_LIMIT,\n SALT_PREFIX ^ bytes32(globalRequestCount++),\n NUM_WINNERS,\n VRF_BLOCKS_DELAY\n );\n } else {\n /// Requesting NUM_WINNERS random words using Babe Epoch Randomness\n /// Babe Epoch Randomness requires a longer delay (depending on the relaychain)\n /// Refund after fulfillment will go back to the caller of this function\n /// globalRequestCount is used as salt to be unique for each request\n requestId = randomness.requestRelayBabeEpochRandomWords(\n msg.sender,\n fee,\n FULFILLMENT_GAS_LIMIT,\n SALT_PREFIX ^ bytes32(globalRequestCount++),\n NUM_WINNERS\n );\n }\n }\n\n /// @notice Allows to increase the fee associated with the request\n /// @dev This is needed if the gas price increase significantly before\n /// @dev the request is fulfilled\n function increaseRequestFee() external payable {\n randomness.increaseRequestFee(requestId, msg.value);\n }\n\n /// @dev This function is called only by the fulfillment callback\n function pickWinners(uint256[] memory randomWords) internal {\n /// Get the total number of winners to select\n uint256 totalWinners = NUM_WINNERS < participants.length\n ? NUM_WINNERS\n : participants.length;\n\n /// The amount distributed to each winner\n /// The left-over is kept for the next lottery\n uint256 amountAwarded = jackpot / totalWinners;\n emit Ended(participants.length, jackpot, totalWinners);\n for (uint32 i = 0; i < totalWinners; i++) {\n /// This is safe to index randomWords with i because we requested\n /// NUM_WINNERS random words\n uint256 randomWord = randomWords[i];\n\n /// Using modulo is not totally fair, but fair enough for this demo.\n uint256 index = randomWord % participants.length;\n address payable winner = payable(participants[index]);\n delete participants[index];\n emit Awarded(winner, randomWord, amountAwarded);\n jackpot -= amountAwarded;\n winner.transfer(amountAwarded);\n }\n delete participants;\n requestId = 0;\n }\n\n function fulfillRandomWords(\n uint256, /* requestId */\n uint256[] memory randomWords\n ) internal override {\n pickWinners(randomWords);\n }\n\n modifier onlyOwner() {\n require(msg.sender == owner);\n _;\n }\n}\n" +} diff --git a/tests/contracts/compiled/RelayEncoder.json b/tests/contracts/compiled/RelayEncoder.json new file mode 100644 index 0000000000..476818cf59 --- /dev/null +++ b/tests/contracts/compiled/RelayEncoder.json @@ -0,0 +1,180 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "controller_address", + "type": "uint256" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "internalType": "bytes", + "name": "reward_destination", + "type": "bytes" + } + ], + "name": "encode_bond", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "encode_bond_extra", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "encode_chill", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "nominees", + "type": "uint256[]" + } + ], + "name": "encode_nominate", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "encode_rebond", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "controller", "type": "uint256" } + ], + "name": "encode_set_controller", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "reward_destination", + "type": "bytes" + } + ], + "name": "encode_set_payee", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "name": "encode_unbond", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "comission", "type": "uint256" }, + { "internalType": "bool", "name": "blocked", "type": "bool" } + ], + "name": "encode_validate", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint32", "name": "slashes", "type": "uint32" } + ], + "name": "encode_withdraw_unbonded", + "outputs": [ + { "internalType": "bytes", "name": "result", "type": "bytes" } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "devdoc": { + "author": "The Moonbeam Team", + "kind": "dev", + "methods": {}, + "title": "The interface through which solidity contracts will interact with Relay Encoder We follow this same interface including four-byte function selectors, in the precompile that wraps the pallet Address : 0x0000000000000000000000000000000000000805", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "encode_bond(uint256,uint256,bytes)": "31627376", + "encode_bond_extra(uint256)": "49def326", + "encode_chill()": "bc4b2187", + "encode_nominate(uint256[])": "a7cb124b", + "encode_rebond(uint256)": "add6b3bf", + "encode_set_controller(uint256)": "7a8f48c2", + "encode_set_payee(bytes)": "9801b147", + "encode_unbond(uint256)": "2cd61217", + "encode_validate(uint256,bool)": "3a0d803a", + "encode_withdraw_unbonded(uint32)": "2d220331" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"controller_address\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"reward_destination\",\"type\":\"bytes\"}],\"name\":\"encode_bond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_bond_extra\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"encode_chill\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nominees\",\"type\":\"uint256[]\"}],\"name\":\"encode_nominate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_rebond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"controller\",\"type\":\"uint256\"}],\"name\":\"encode_set_controller\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reward_destination\",\"type\":\"bytes\"}],\"name\":\"encode_set_payee\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_unbond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"comission\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"blocked\",\"type\":\"bool\"}],\"name\":\"encode_validate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"slashes\",\"type\":\"uint32\"}],\"name\":\"encode_withdraw_unbonded\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"The Moonbeam Team\",\"kind\":\"dev\",\"methods\":{},\"title\":\"The interface through which solidity contracts will interact with Relay Encoder We follow this same interface including four-byte function selectors, in the precompile that wraps the pallet Address : 0x0000000000000000000000000000000000000805\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"RelayEncoder\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x6a4cd850ce045c7d29680c38381f85c194416069b697df6ada6e0168c84c7f00\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://913b557786b7dc204b87f85570f2a885a5c61f2b41b7360ec9cc651a7ebe84a3\",\"dweb:/ipfs/QmUZ7LXi9KD2qNvaPoefRrNt4fgMEoJevKRQWwkGd83XXH\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @author The Moonbeam Team\n * @title The interface through which solidity contracts will interact with Relay Encoder\n * We follow this same interface including four-byte function selectors, in the precompile that\n * wraps the pallet\n * Address : 0x0000000000000000000000000000000000000805\n */\n\ninterface RelayEncoder {\n // dev Encode 'bond' relay call\n // Selector: 31627376\n // @param controller_address: Address of the controller\n // @param amount: The amount to bond\n // @param reward_destination: the account that should receive the reward\n // @returns The bytes associated with the encoded call\n function encode_bond(\n uint256 controller_address,\n uint256 amount,\n bytes memory reward_destination\n ) external pure returns (bytes memory result);\n\n // dev Encode 'bond_extra' relay call\n // Selector: 49def326\n // @param amount: The extra amount to bond\n // @returns The bytes associated with the encoded call\n function encode_bond_extra(uint256 amount)\n external\n pure\n returns (bytes memory result);\n\n // dev Encode 'unbond' relay call\n // Selector: 2cd61217\n // @param amount: The amount to unbond\n // @returns The bytes associated with the encoded call\n function encode_unbond(uint256 amount)\n external\n pure\n returns (bytes memory result);\n\n // dev Encode 'withdraw_unbonded' relay call\n // Selector: 2d220331\n // @param slashes: Weight hint, number of slashing spans\n // @returns The bytes associated with the encoded call\n function encode_withdraw_unbonded(uint32 slashes)\n external\n pure\n returns (bytes memory result);\n\n // dev Encode 'validate' relay call\n // Selector: 3a0d803a\n // @param comission: Comission of the validator as parts_per_billion\n // @param blocked: Whether or not the validator is accepting more nominations\n // @returns The bytes associated with the encoded call\n // selector: 3a0d803a\n function encode_validate(uint256 comission, bool blocked)\n external\n pure\n returns (bytes memory result);\n\n // dev Encode 'nominate' relay call\n // Selector: a7cb124b\n // @param nominees: An array of AccountIds corresponding to the accounts we will nominate\n // @param blocked: Whether or not the validator is accepting more nominations\n // @returns The bytes associated with the encoded call\n function encode_nominate(uint256[] memory nominees)\n external\n pure\n returns (bytes memory result);\n\n // dev Encode 'chill' relay call\n // Selector: bc4b2187\n // @returns The bytes associated with the encoded call\n function encode_chill() external pure returns (bytes memory result);\n\n // dev Encode 'set_payee' relay call\n // Selector: 9801b147\n // @param reward_destination: the account that should receive the reward\n // @returns The bytes associated with the encoded call\n function encode_set_payee(bytes memory reward_destination)\n external\n pure\n returns (bytes memory result);\n\n // dev Encode 'set_controller' relay call\n // Selector: 7a8f48c2\n // @param controller: The controller address\n // @returns The bytes associated with the encoded call\n function encode_set_controller(uint256 controller)\n external\n pure\n returns (bytes memory result);\n\n // dev Encode 'rebond' relay call\n // Selector: add6b3bf\n // @param amount: The amount to rebond\n // @returns The bytes associated with the encoded call\n function encode_rebond(uint256 amount)\n external\n pure\n returns (bytes memory result);\n}\n" +} diff --git a/tests/contracts/compiled/RelayEncoderInstance.json b/tests/contracts/compiled/RelayEncoderInstance.json index 159405184a..7932d6ab7d 100644 --- a/tests/contracts/compiled/RelayEncoderInstance.json +++ b/tests/contracts/compiled/RelayEncoderInstance.json @@ -1,5 +1,5 @@ { - "byteCode": "0x60806040526108056000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50610b16806100626000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806361bdd2e01161007157806361bdd2e01461019e5780637a8f48c2146101bc5780639801b147146101ec578063a7cb124b1461021c578063add6b3bf1461024c578063bc4b21871461027c576100a9565b80632cd61217146100ae5780632d220331146100de578063316273761461010e5780633a0d803a1461013e57806349def3261461016e575b600080fd5b6100c860048036038101906100c3919061057f565b61029a565b6040516100d59190610645565b60405180910390f35b6100f860048036038101906100f391906106a3565b6102d9565b6040516101059190610645565b60405180910390f35b61012860048036038101906101239190610805565b610318565b6040516101359190610645565b60405180910390f35b610158600480360381019061015391906108ac565b610359565b6040516101659190610645565b60405180910390f35b6101886004803603810190610183919061057f565b610399565b6040516101959190610645565b60405180910390f35b6101a66103d8565b6040516101b3919061096b565b60405180910390f35b6101d660048036038101906101d1919061057f565b6103fc565b6040516101e39190610645565b60405180910390f35b61020660048036038101906102019190610986565b61043b565b6040516102139190610645565b60405180910390f35b61023660048036038101906102319190610a97565b61047a565b6040516102439190610645565b60405180910390f35b6102666004803603810190610261919061057f565b6104b9565b6040516102739190610645565b60405180910390f35b6102846104f8565b6040516102919190610645565b60405180910390f35b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090509392505050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905092915050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b6000602082840312156105955761059461053f565b5b60006105a38482850161056a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105e65780820151818401526020810190506105cb565b838111156105f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000610617826105ac565b61062181856105b7565b93506106318185602086016105c8565b61063a816105fb565b840191505092915050565b6000602082019050818103600083015261065f818461060c565b905092915050565b600063ffffffff82169050919050565b61068081610667565b811461068b57600080fd5b50565b60008135905061069d81610677565b92915050565b6000602082840312156106b9576106b861053f565b5b60006106c78482850161068e565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610712826105fb565b810181811067ffffffffffffffff82111715610731576107306106da565b5b80604052505050565b6000610744610535565b90506107508282610709565b919050565b600067ffffffffffffffff8211156107705761076f6106da565b5b610779826105fb565b9050602081019050919050565b82818337600083830152505050565b60006107a86107a384610755565b61073a565b9050828152602081018484840111156107c4576107c36106d5565b5b6107cf848285610786565b509392505050565b600082601f8301126107ec576107eb6106d0565b5b81356107fc848260208601610795565b91505092915050565b60008060006060848603121561081e5761081d61053f565b5b600061082c8682870161056a565b935050602061083d8682870161056a565b925050604084013567ffffffffffffffff81111561085e5761085d610544565b5b61086a868287016107d7565b9150509250925092565b60008115159050919050565b61088981610874565b811461089457600080fd5b50565b6000813590506108a681610880565b92915050565b600080604083850312156108c3576108c261053f565b5b60006108d18582860161056a565b92505060206108e285828601610897565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061093161092c610927846108ec565b61090c565b6108ec565b9050919050565b600061094382610916565b9050919050565b600061095582610938565b9050919050565b6109658161094a565b82525050565b6000602082019050610980600083018461095c565b92915050565b60006020828403121561099c5761099b61053f565b5b600082013567ffffffffffffffff8111156109ba576109b9610544565b5b6109c6848285016107d7565b91505092915050565b600067ffffffffffffffff8211156109ea576109e96106da565b5b602082029050602081019050919050565b600080fd5b6000610a13610a0e846109cf565b61073a565b90508083825260208201905060208402830185811115610a3657610a356109fb565b5b835b81811015610a5f5780610a4b888261056a565b845260208401935050602081019050610a38565b5050509392505050565b600082601f830112610a7e57610a7d6106d0565b5b8135610a8e848260208601610a00565b91505092915050565b600060208284031215610aad57610aac61053f565b5b600082013567ffffffffffffffff811115610acb57610aca610544565b5b610ad784828501610a69565b9150509291505056fea26469706673582212206f7085f9fce5641d8db25d8b9b823efdd7a104ea3e6ff92717d013741fc0ce7864736f6c63430008090033", + "byteCode": "0x60806040526108056000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50610b16806100626000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806361bdd2e01161007157806361bdd2e01461019e5780637a8f48c2146101bc5780639801b147146101ec578063a7cb124b1461021c578063add6b3bf1461024c578063bc4b21871461027c576100a9565b80632cd61217146100ae5780632d220331146100de578063316273761461010e5780633a0d803a1461013e57806349def3261461016e575b600080fd5b6100c860048036038101906100c3919061057f565b61029a565b6040516100d59190610645565b60405180910390f35b6100f860048036038101906100f391906106a3565b6102d9565b6040516101059190610645565b60405180910390f35b61012860048036038101906101239190610805565b610318565b6040516101359190610645565b60405180910390f35b610158600480360381019061015391906108ac565b610359565b6040516101659190610645565b60405180910390f35b6101886004803603810190610183919061057f565b610399565b6040516101959190610645565b60405180910390f35b6101a66103d8565b6040516101b3919061096b565b60405180910390f35b6101d660048036038101906101d1919061057f565b6103fc565b6040516101e39190610645565b60405180910390f35b61020660048036038101906102019190610986565b61043b565b6040516102139190610645565b60405180910390f35b61023660048036038101906102319190610a97565b61047a565b6040516102439190610645565b60405180910390f35b6102666004803603810190610261919061057f565b6104b9565b6040516102739190610645565b60405180910390f35b6102846104f8565b6040516102919190610645565b60405180910390f35b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090509392505050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905092915050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b6000602082840312156105955761059461053f565b5b60006105a38482850161056a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105e65780820151818401526020810190506105cb565b838111156105f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000610617826105ac565b61062181856105b7565b93506106318185602086016105c8565b61063a816105fb565b840191505092915050565b6000602082019050818103600083015261065f818461060c565b905092915050565b600063ffffffff82169050919050565b61068081610667565b811461068b57600080fd5b50565b60008135905061069d81610677565b92915050565b6000602082840312156106b9576106b861053f565b5b60006106c78482850161068e565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610712826105fb565b810181811067ffffffffffffffff82111715610731576107306106da565b5b80604052505050565b6000610744610535565b90506107508282610709565b919050565b600067ffffffffffffffff8211156107705761076f6106da565b5b610779826105fb565b9050602081019050919050565b82818337600083830152505050565b60006107a86107a384610755565b61073a565b9050828152602081018484840111156107c4576107c36106d5565b5b6107cf848285610786565b509392505050565b600082601f8301126107ec576107eb6106d0565b5b81356107fc848260208601610795565b91505092915050565b60008060006060848603121561081e5761081d61053f565b5b600061082c8682870161056a565b935050602061083d8682870161056a565b925050604084013567ffffffffffffffff81111561085e5761085d610544565b5b61086a868287016107d7565b9150509250925092565b60008115159050919050565b61088981610874565b811461089457600080fd5b50565b6000813590506108a681610880565b92915050565b600080604083850312156108c3576108c261053f565b5b60006108d18582860161056a565b92505060206108e285828601610897565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061093161092c610927846108ec565b61090c565b6108ec565b9050919050565b600061094382610916565b9050919050565b600061095582610938565b9050919050565b6109658161094a565b82525050565b6000602082019050610980600083018461095c565b92915050565b60006020828403121561099c5761099b61053f565b5b600082013567ffffffffffffffff8111156109ba576109b9610544565b5b6109c6848285016107d7565b91505092915050565b600067ffffffffffffffff8211156109ea576109e96106da565b5b602082029050602081019050919050565b600080fd5b6000610a13610a0e846109cf565b61073a565b90508083825260208201905060208402830185811115610a3657610a356109fb565b5b835b81811015610a5f5780610a4b888261056a565b845260208401935050602081019050610a38565b5050509392505050565b600082601f830112610a7e57610a7d6106d0565b5b8135610a8e848260208601610a00565b91505092915050565b600060208284031215610aad57610aac61053f565b5b600082013567ffffffffffffffff811115610acb57610aca610544565b5b610ad784828501610a69565b9150509291505056fea2646970667358221220afd7f50e25d8592680ae409611a2aa97ef89feab274d066b5b35acbd4699d3e564736f6c634300080b0033", "contract": { "abi": [ { @@ -145,80 +145,80 @@ ], "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":4022:5993 contract RelayEncoderInstance is RelayEncoder {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":4198:4240 0x0000000000000000000000000000000000000805 */\n 0x0805\n /* \"main.sol\":4150:4241 RelayEncoder public relayencoder = RelayEncoder(0x0000000000000000000000000000000000000805) */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":4022:5993 contract RelayEncoderInstance is RelayEncoder {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":4022:5993 contract RelayEncoderInstance is RelayEncoder {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x61bdd2e0\n gt\n tag_14\n jumpi\n dup1\n 0x61bdd2e0\n eq\n tag_8\n jumpi\n dup1\n 0x7a8f48c2\n eq\n tag_9\n jumpi\n dup1\n 0x9801b147\n eq\n tag_10\n jumpi\n dup1\n 0xa7cb124b\n eq\n tag_11\n jumpi\n dup1\n 0xadd6b3bf\n eq\n tag_12\n jumpi\n dup1\n 0xbc4b2187\n eq\n tag_13\n jumpi\n jump(tag_2)\n tag_14:\n dup1\n 0x2cd61217\n eq\n tag_3\n jumpi\n dup1\n 0x2d220331\n eq\n tag_4\n jumpi\n dup1\n 0x31627376\n eq\n tag_5\n jumpi\n dup1\n 0x3a0d803a\n eq\n tag_6\n jumpi\n dup1\n 0x49def326\n eq\n tag_7\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":4659:4811 function encode_unbond(... */\n tag_3:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n mload(0x40)\n tag_19\n swap2\n swap1\n tag_20\n jump\t// in\n tag_19:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4820:4983 function encode_withdraw_unbonded(... */\n tag_4:\n tag_21\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_22\n swap2\n swap1\n tag_23\n jump\t// in\n tag_22:\n tag_24\n jump\t// in\n tag_21:\n mload(0x40)\n tag_25\n swap2\n swap1\n tag_20\n jump\t// in\n tag_25:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4251:4486 function encode_bond(... */\n tag_5:\n tag_26\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_27\n swap2\n swap1\n tag_28\n jump\t// in\n tag_27:\n tag_29\n jump\t// in\n tag_26:\n mload(0x40)\n tag_30\n swap2\n swap1\n tag_20\n jump\t// in\n tag_30:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4992:5175 function encode_validate(... */\n tag_6:\n tag_31\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_32\n swap2\n swap1\n tag_33\n jump\t// in\n tag_32:\n tag_34\n jump\t// in\n tag_31:\n mload(0x40)\n tag_35\n swap2\n swap1\n tag_20\n jump\t// in\n tag_35:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4495:4650 function encode_bond_extra(... */\n tag_7:\n tag_36\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_37\n swap2\n swap1\n tag_17\n jump\t// in\n tag_37:\n tag_38\n jump\t// in\n tag_36:\n mload(0x40)\n tag_39\n swap2\n swap1\n tag_20\n jump\t// in\n tag_39:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4150:4241 RelayEncoder public relayencoder = RelayEncoder(0x0000000000000000000000000000000000000805) */\n tag_8:\n tag_40\n tag_41\n jump\t// in\n tag_40:\n mload(0x40)\n tag_42\n swap2\n swap1\n tag_43\n jump\t// in\n tag_42:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5664:5827 function encode_set_controller(... */\n tag_9:\n tag_44\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_45\n swap2\n swap1\n tag_17\n jump\t// in\n tag_45:\n tag_46\n jump\t// in\n tag_44:\n mload(0x40)\n tag_47\n swap2\n swap1\n tag_20\n jump\t// in\n tag_47:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5483:5655 function encode_set_payee(... */\n tag_10:\n tag_48\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_49\n swap2\n swap1\n tag_50\n jump\t// in\n tag_49:\n tag_51\n jump\t// in\n tag_48:\n mload(0x40)\n tag_52\n swap2\n swap1\n tag_20\n jump\t// in\n tag_52:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5184:5350 function encode_nominate(... */\n tag_11:\n tag_53\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_54\n swap2\n swap1\n tag_55\n jump\t// in\n tag_54:\n tag_56\n jump\t// in\n tag_53:\n mload(0x40)\n tag_57\n swap2\n swap1\n tag_20\n jump\t// in\n tag_57:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5836:5987 function encode_rebond(... */\n tag_12:\n tag_58\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_59\n swap2\n swap1\n tag_17\n jump\t// in\n tag_59:\n tag_60\n jump\t// in\n tag_58:\n mload(0x40)\n tag_61\n swap2\n swap1\n tag_20\n jump\t// in\n tag_61:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":5359:5474 function encode_chill() external pure override returns (bytes memory result) {... */\n tag_13:\n tag_62\n tag_63\n jump\t// in\n tag_62:\n mload(0x40)\n tag_64\n swap2\n swap1\n tag_20\n jump\t// in\n tag_64:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":4659:4811 function encode_unbond(... */\n tag_18:\n /* \"main.sol\":4752:4771 bytes memory result */\n 0x60\n /* \"main.sol\":4787:4800 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":4659:4811 function encode_unbond(... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":4820:4983 function encode_withdraw_unbonded(... */\n tag_24:\n /* \"main.sol\":4924:4943 bytes memory result */\n 0x60\n /* \"main.sol\":4959:4972 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":4820:4983 function encode_withdraw_unbonded(... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":4251:4486 function encode_bond(... */\n tag_29:\n /* \"main.sol\":4428:4447 bytes memory result */\n 0x60\n /* \"main.sol\":4462:4475 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":4251:4486 function encode_bond(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":4992:5175 function encode_validate(... */\n tag_34:\n /* \"main.sol\":5116:5135 bytes memory result */\n 0x60\n /* \"main.sol\":5151:5164 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":4992:5175 function encode_validate(... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":4495:4650 function encode_bond_extra(... */\n tag_38:\n /* \"main.sol\":4592:4611 bytes memory result */\n 0x60\n /* \"main.sol\":4626:4639 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":4495:4650 function encode_bond_extra(... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":4150:4241 RelayEncoder public relayencoder = RelayEncoder(0x0000000000000000000000000000000000000805) */\n tag_41:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":5664:5827 function encode_set_controller(... */\n tag_46:\n /* \"main.sol\":5769:5788 bytes memory result */\n 0x60\n /* \"main.sol\":5803:5816 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":5664:5827 function encode_set_controller(... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":5483:5655 function encode_set_payee(... */\n tag_51:\n /* \"main.sol\":5596:5615 bytes memory result */\n 0x60\n /* \"main.sol\":5631:5644 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":5483:5655 function encode_set_payee(... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":5184:5350 function encode_nominate(... */\n tag_56:\n /* \"main.sol\":5291:5310 bytes memory result */\n 0x60\n /* \"main.sol\":5326:5339 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":5184:5350 function encode_nominate(... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":5836:5987 function encode_rebond(... */\n tag_60:\n /* \"main.sol\":5929:5948 bytes memory result */\n 0x60\n /* \"main.sol\":5963:5976 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":5836:5987 function encode_rebond(... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":5359:5474 function encode_chill() external pure override returns (bytes memory result) {... */\n tag_63:\n /* \"main.sol\":5415:5434 bytes memory result */\n 0x60\n /* \"main.sol\":5450:5463 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":5359:5474 function encode_chill() external pure override returns (bytes memory result) {... */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_75:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_76:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_77:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:411 */\n tag_78:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\n tag_79:\n /* \"#utility.yul\":490:514 */\n tag_117\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_78\n jump\t// in\n tag_117:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_118\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\n tag_118:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:684 */\n tag_80:\n /* \"#utility.yul\":591:596 */\n 0x00\n /* \"#utility.yul\":629:635 */\n dup2\n /* \"#utility.yul\":616:636 */\n calldataload\n /* \"#utility.yul\":607:636 */\n swap1\n pop\n /* \"#utility.yul\":645:678 */\n tag_120\n /* \"#utility.yul\":672:677 */\n dup2\n /* \"#utility.yul\":645:678 */\n tag_79\n jump\t// in\n tag_120:\n /* \"#utility.yul\":545:684 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":690:1019 */\n tag_17:\n /* \"#utility.yul\":749:755 */\n 0x00\n /* \"#utility.yul\":798:800 */\n 0x20\n /* \"#utility.yul\":786:795 */\n dup3\n /* \"#utility.yul\":777:784 */\n dup5\n /* \"#utility.yul\":773:796 */\n sub\n /* \"#utility.yul\":769:801 */\n slt\n /* \"#utility.yul\":766:885 */\n iszero\n tag_122\n jumpi\n /* \"#utility.yul\":804:883 */\n tag_123\n tag_76\n jump\t// in\n tag_123:\n /* \"#utility.yul\":766:885 */\n tag_122:\n /* \"#utility.yul\":924:925 */\n 0x00\n /* \"#utility.yul\":949:1002 */\n tag_124\n /* \"#utility.yul\":994:1001 */\n dup5\n /* \"#utility.yul\":985:991 */\n dup3\n /* \"#utility.yul\":974:983 */\n dup6\n /* \"#utility.yul\":970:992 */\n add\n /* \"#utility.yul\":949:1002 */\n tag_80\n jump\t// in\n tag_124:\n /* \"#utility.yul\":939:1002 */\n swap2\n pop\n /* \"#utility.yul\":895:1012 */\n pop\n /* \"#utility.yul\":690:1019 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1025:1123 */\n tag_81:\n /* \"#utility.yul\":1076:1082 */\n 0x00\n /* \"#utility.yul\":1110:1115 */\n dup2\n /* \"#utility.yul\":1104:1116 */\n mload\n /* \"#utility.yul\":1094:1116 */\n swap1\n pop\n /* \"#utility.yul\":1025:1123 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1129:1297 */\n tag_82:\n /* \"#utility.yul\":1212:1223 */\n 0x00\n /* \"#utility.yul\":1246:1252 */\n dup3\n /* \"#utility.yul\":1241:1244 */\n dup3\n /* \"#utility.yul\":1234:1253 */\n mstore\n /* \"#utility.yul\":1286:1290 */\n 0x20\n /* \"#utility.yul\":1281:1284 */\n dup3\n /* \"#utility.yul\":1277:1291 */\n add\n /* \"#utility.yul\":1262:1291 */\n swap1\n pop\n /* \"#utility.yul\":1129:1297 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1303:1610 */\n tag_83:\n /* \"#utility.yul\":1371:1372 */\n 0x00\n /* \"#utility.yul\":1381:1494 */\n tag_128:\n /* \"#utility.yul\":1395:1401 */\n dup4\n /* \"#utility.yul\":1392:1393 */\n dup2\n /* \"#utility.yul\":1389:1402 */\n lt\n /* \"#utility.yul\":1381:1494 */\n iszero\n tag_130\n jumpi\n /* \"#utility.yul\":1480:1481 */\n dup1\n /* \"#utility.yul\":1475:1478 */\n dup3\n /* \"#utility.yul\":1471:1482 */\n add\n /* \"#utility.yul\":1465:1483 */\n mload\n /* \"#utility.yul\":1461:1462 */\n dup2\n /* \"#utility.yul\":1456:1459 */\n dup5\n /* \"#utility.yul\":1452:1463 */\n add\n /* \"#utility.yul\":1445:1484 */\n mstore\n /* \"#utility.yul\":1417:1419 */\n 0x20\n /* \"#utility.yul\":1414:1415 */\n dup2\n /* \"#utility.yul\":1410:1420 */\n add\n /* \"#utility.yul\":1405:1420 */\n swap1\n pop\n /* \"#utility.yul\":1381:1494 */\n jump(tag_128)\n tag_130:\n /* \"#utility.yul\":1512:1518 */\n dup4\n /* \"#utility.yul\":1509:1510 */\n dup2\n /* \"#utility.yul\":1506:1519 */\n gt\n /* \"#utility.yul\":1503:1604 */\n iszero\n tag_131\n jumpi\n /* \"#utility.yul\":1592:1593 */\n 0x00\n /* \"#utility.yul\":1583:1589 */\n dup5\n /* \"#utility.yul\":1578:1581 */\n dup5\n /* \"#utility.yul\":1574:1590 */\n add\n /* \"#utility.yul\":1567:1594 */\n mstore\n /* \"#utility.yul\":1503:1604 */\n tag_131:\n /* \"#utility.yul\":1352:1610 */\n pop\n /* \"#utility.yul\":1303:1610 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1616:1718 */\n tag_84:\n /* \"#utility.yul\":1657:1663 */\n 0x00\n /* \"#utility.yul\":1708:1710 */\n 0x1f\n /* \"#utility.yul\":1704:1711 */\n not\n /* \"#utility.yul\":1699:1701 */\n 0x1f\n /* \"#utility.yul\":1692:1697 */\n dup4\n /* \"#utility.yul\":1688:1702 */\n add\n /* \"#utility.yul\":1684:1712 */\n and\n /* \"#utility.yul\":1674:1712 */\n swap1\n pop\n /* \"#utility.yul\":1616:1718 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1724:2084 */\n tag_85:\n /* \"#utility.yul\":1810:1813 */\n 0x00\n /* \"#utility.yul\":1838:1876 */\n tag_134\n /* \"#utility.yul\":1870:1875 */\n dup3\n /* \"#utility.yul\":1838:1876 */\n tag_81\n jump\t// in\n tag_134:\n /* \"#utility.yul\":1892:1962 */\n tag_135\n /* \"#utility.yul\":1955:1961 */\n dup2\n /* \"#utility.yul\":1950:1953 */\n dup6\n /* \"#utility.yul\":1892:1962 */\n tag_82\n jump\t// in\n tag_135:\n /* \"#utility.yul\":1885:1962 */\n swap4\n pop\n /* \"#utility.yul\":1971:2023 */\n tag_136\n /* \"#utility.yul\":2016:2022 */\n dup2\n /* \"#utility.yul\":2011:2014 */\n dup6\n /* \"#utility.yul\":2004:2008 */\n 0x20\n /* \"#utility.yul\":1997:2002 */\n dup7\n /* \"#utility.yul\":1993:2009 */\n add\n /* \"#utility.yul\":1971:2023 */\n tag_83\n jump\t// in\n tag_136:\n /* \"#utility.yul\":2048:2077 */\n tag_137\n /* \"#utility.yul\":2070:2076 */\n dup2\n /* \"#utility.yul\":2048:2077 */\n tag_84\n jump\t// in\n tag_137:\n /* \"#utility.yul\":2043:2046 */\n dup5\n /* \"#utility.yul\":2039:2078 */\n add\n /* \"#utility.yul\":2032:2078 */\n swap2\n pop\n /* \"#utility.yul\":1814:2084 */\n pop\n /* \"#utility.yul\":1724:2084 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2090:2399 */\n tag_20:\n /* \"#utility.yul\":2201:2205 */\n 0x00\n /* \"#utility.yul\":2239:2241 */\n 0x20\n /* \"#utility.yul\":2228:2237 */\n dup3\n /* \"#utility.yul\":2224:2242 */\n add\n /* \"#utility.yul\":2216:2242 */\n swap1\n pop\n /* \"#utility.yul\":2288:2297 */\n dup2\n /* \"#utility.yul\":2282:2286 */\n dup2\n /* \"#utility.yul\":2278:2298 */\n sub\n /* \"#utility.yul\":2274:2275 */\n 0x00\n /* \"#utility.yul\":2263:2272 */\n dup4\n /* \"#utility.yul\":2259:2276 */\n add\n /* \"#utility.yul\":2252:2299 */\n mstore\n /* \"#utility.yul\":2316:2392 */\n tag_139\n /* \"#utility.yul\":2387:2391 */\n dup2\n /* \"#utility.yul\":2378:2384 */\n dup5\n /* \"#utility.yul\":2316:2392 */\n tag_85\n jump\t// in\n tag_139:\n /* \"#utility.yul\":2308:2392 */\n swap1\n pop\n /* \"#utility.yul\":2090:2399 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2405:2498 */\n tag_86:\n /* \"#utility.yul\":2441:2448 */\n 0x00\n /* \"#utility.yul\":2481:2491 */\n 0xffffffff\n /* \"#utility.yul\":2474:2479 */\n dup3\n /* \"#utility.yul\":2470:2492 */\n and\n /* \"#utility.yul\":2459:2492 */\n swap1\n pop\n /* \"#utility.yul\":2405:2498 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2504:2624 */\n tag_87:\n /* \"#utility.yul\":2576:2599 */\n tag_142\n /* \"#utility.yul\":2593:2598 */\n dup2\n /* \"#utility.yul\":2576:2599 */\n tag_86\n jump\t// in\n tag_142:\n /* \"#utility.yul\":2569:2574 */\n dup2\n /* \"#utility.yul\":2566:2600 */\n eq\n /* \"#utility.yul\":2556:2618 */\n tag_143\n jumpi\n /* \"#utility.yul\":2614:2615 */\n 0x00\n /* \"#utility.yul\":2611:2612 */\n dup1\n /* \"#utility.yul\":2604:2616 */\n revert\n /* \"#utility.yul\":2556:2618 */\n tag_143:\n /* \"#utility.yul\":2504:2624 */\n pop\n jump\t// out\n /* \"#utility.yul\":2630:2767 */\n tag_88:\n /* \"#utility.yul\":2675:2680 */\n 0x00\n /* \"#utility.yul\":2713:2719 */\n dup2\n /* \"#utility.yul\":2700:2720 */\n calldataload\n /* \"#utility.yul\":2691:2720 */\n swap1\n pop\n /* \"#utility.yul\":2729:2761 */\n tag_145\n /* \"#utility.yul\":2755:2760 */\n dup2\n /* \"#utility.yul\":2729:2761 */\n tag_87\n jump\t// in\n tag_145:\n /* \"#utility.yul\":2630:2767 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2773:3100 */\n tag_23:\n /* \"#utility.yul\":2831:2837 */\n 0x00\n /* \"#utility.yul\":2880:2882 */\n 0x20\n /* \"#utility.yul\":2868:2877 */\n dup3\n /* \"#utility.yul\":2859:2866 */\n dup5\n /* \"#utility.yul\":2855:2878 */\n sub\n /* \"#utility.yul\":2851:2883 */\n slt\n /* \"#utility.yul\":2848:2967 */\n iszero\n tag_147\n jumpi\n /* \"#utility.yul\":2886:2965 */\n tag_148\n tag_76\n jump\t// in\n tag_148:\n /* \"#utility.yul\":2848:2967 */\n tag_147:\n /* \"#utility.yul\":3006:3007 */\n 0x00\n /* \"#utility.yul\":3031:3083 */\n tag_149\n /* \"#utility.yul\":3075:3082 */\n dup5\n /* \"#utility.yul\":3066:3072 */\n dup3\n /* \"#utility.yul\":3055:3064 */\n dup6\n /* \"#utility.yul\":3051:3073 */\n add\n /* \"#utility.yul\":3031:3083 */\n tag_88\n jump\t// in\n tag_149:\n /* \"#utility.yul\":3021:3083 */\n swap2\n pop\n /* \"#utility.yul\":2977:3093 */\n pop\n /* \"#utility.yul\":2773:3100 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3106:3223 */\n tag_89:\n /* \"#utility.yul\":3215:3216 */\n 0x00\n /* \"#utility.yul\":3212:3213 */\n dup1\n /* \"#utility.yul\":3205:3217 */\n revert\n /* \"#utility.yul\":3229:3346 */\n tag_90:\n /* \"#utility.yul\":3338:3339 */\n 0x00\n /* \"#utility.yul\":3335:3336 */\n dup1\n /* \"#utility.yul\":3328:3340 */\n revert\n /* \"#utility.yul\":3352:3532 */\n tag_91:\n /* \"#utility.yul\":3400:3477 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":3397:3398 */\n 0x00\n /* \"#utility.yul\":3390:3478 */\n mstore\n /* \"#utility.yul\":3497:3501 */\n 0x41\n /* \"#utility.yul\":3494:3495 */\n 0x04\n /* \"#utility.yul\":3487:3502 */\n mstore\n /* \"#utility.yul\":3521:3525 */\n 0x24\n /* \"#utility.yul\":3518:3519 */\n 0x00\n /* \"#utility.yul\":3511:3526 */\n revert\n /* \"#utility.yul\":3538:3819 */\n tag_92:\n /* \"#utility.yul\":3621:3648 */\n tag_154\n /* \"#utility.yul\":3643:3647 */\n dup3\n /* \"#utility.yul\":3621:3648 */\n tag_84\n jump\t// in\n tag_154:\n /* \"#utility.yul\":3613:3619 */\n dup2\n /* \"#utility.yul\":3609:3649 */\n add\n /* \"#utility.yul\":3751:3757 */\n dup2\n /* \"#utility.yul\":3739:3749 */\n dup2\n /* \"#utility.yul\":3736:3758 */\n lt\n /* \"#utility.yul\":3715:3733 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3703:3713 */\n dup3\n /* \"#utility.yul\":3700:3734 */\n gt\n /* \"#utility.yul\":3697:3759 */\n or\n /* \"#utility.yul\":3694:3782 */\n iszero\n tag_155\n jumpi\n /* \"#utility.yul\":3762:3780 */\n tag_156\n tag_91\n jump\t// in\n tag_156:\n /* \"#utility.yul\":3694:3782 */\n tag_155:\n /* \"#utility.yul\":3802:3812 */\n dup1\n /* \"#utility.yul\":3798:3800 */\n 0x40\n /* \"#utility.yul\":3791:3813 */\n mstore\n /* \"#utility.yul\":3581:3819 */\n pop\n /* \"#utility.yul\":3538:3819 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3825:3954 */\n tag_93:\n /* \"#utility.yul\":3859:3865 */\n 0x00\n /* \"#utility.yul\":3886:3906 */\n tag_158\n tag_75\n jump\t// in\n tag_158:\n /* \"#utility.yul\":3876:3906 */\n swap1\n pop\n /* \"#utility.yul\":3915:3948 */\n tag_159\n /* \"#utility.yul\":3943:3947 */\n dup3\n /* \"#utility.yul\":3935:3941 */\n dup3\n /* \"#utility.yul\":3915:3948 */\n tag_92\n jump\t// in\n tag_159:\n /* \"#utility.yul\":3825:3954 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3960:4267 */\n tag_94:\n /* \"#utility.yul\":4021:4025 */\n 0x00\n /* \"#utility.yul\":4111:4129 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4103:4109 */\n dup3\n /* \"#utility.yul\":4100:4130 */\n gt\n /* \"#utility.yul\":4097:4153 */\n iszero\n tag_161\n jumpi\n /* \"#utility.yul\":4133:4151 */\n tag_162\n tag_91\n jump\t// in\n tag_162:\n /* \"#utility.yul\":4097:4153 */\n tag_161:\n /* \"#utility.yul\":4171:4200 */\n tag_163\n /* \"#utility.yul\":4193:4199 */\n dup3\n /* \"#utility.yul\":4171:4200 */\n tag_84\n jump\t// in\n tag_163:\n /* \"#utility.yul\":4163:4200 */\n swap1\n pop\n /* \"#utility.yul\":4255:4259 */\n 0x20\n /* \"#utility.yul\":4249:4253 */\n dup2\n /* \"#utility.yul\":4245:4260 */\n add\n /* \"#utility.yul\":4237:4260 */\n swap1\n pop\n /* \"#utility.yul\":3960:4267 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4273:4427 */\n tag_95:\n /* \"#utility.yul\":4357:4363 */\n dup3\n /* \"#utility.yul\":4352:4355 */\n dup2\n /* \"#utility.yul\":4347:4350 */\n dup4\n /* \"#utility.yul\":4334:4364 */\n calldatacopy\n /* \"#utility.yul\":4419:4420 */\n 0x00\n /* \"#utility.yul\":4410:4416 */\n dup4\n /* \"#utility.yul\":4405:4408 */\n dup4\n /* \"#utility.yul\":4401:4417 */\n add\n /* \"#utility.yul\":4394:4421 */\n mstore\n /* \"#utility.yul\":4273:4427 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4433:4843 */\n tag_96:\n /* \"#utility.yul\":4510:4515 */\n 0x00\n /* \"#utility.yul\":4535:4600 */\n tag_166\n /* \"#utility.yul\":4551:4599 */\n tag_167\n /* \"#utility.yul\":4592:4598 */\n dup5\n /* \"#utility.yul\":4551:4599 */\n tag_94\n jump\t// in\n tag_167:\n /* \"#utility.yul\":4535:4600 */\n tag_93\n jump\t// in\n tag_166:\n /* \"#utility.yul\":4526:4600 */\n swap1\n pop\n /* \"#utility.yul\":4623:4629 */\n dup3\n /* \"#utility.yul\":4616:4621 */\n dup2\n /* \"#utility.yul\":4609:4630 */\n mstore\n /* \"#utility.yul\":4661:4665 */\n 0x20\n /* \"#utility.yul\":4654:4659 */\n dup2\n /* \"#utility.yul\":4650:4666 */\n add\n /* \"#utility.yul\":4699:4702 */\n dup5\n /* \"#utility.yul\":4690:4696 */\n dup5\n /* \"#utility.yul\":4685:4688 */\n dup5\n /* \"#utility.yul\":4681:4697 */\n add\n /* \"#utility.yul\":4678:4703 */\n gt\n /* \"#utility.yul\":4675:4787 */\n iszero\n tag_168\n jumpi\n /* \"#utility.yul\":4706:4785 */\n tag_169\n tag_90\n jump\t// in\n tag_169:\n /* \"#utility.yul\":4675:4787 */\n tag_168:\n /* \"#utility.yul\":4796:4837 */\n tag_170\n /* \"#utility.yul\":4830:4836 */\n dup5\n /* \"#utility.yul\":4825:4828 */\n dup3\n /* \"#utility.yul\":4820:4823 */\n dup6\n /* \"#utility.yul\":4796:4837 */\n tag_95\n jump\t// in\n tag_170:\n /* \"#utility.yul\":4516:4843 */\n pop\n /* \"#utility.yul\":4433:4843 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4862:5200 */\n tag_97:\n /* \"#utility.yul\":4917:4922 */\n 0x00\n /* \"#utility.yul\":4966:4969 */\n dup3\n /* \"#utility.yul\":4959:4963 */\n 0x1f\n /* \"#utility.yul\":4951:4957 */\n dup4\n /* \"#utility.yul\":4947:4964 */\n add\n /* \"#utility.yul\":4943:4970 */\n slt\n /* \"#utility.yul\":4933:5055 */\n tag_172\n jumpi\n /* \"#utility.yul\":4974:5053 */\n tag_173\n tag_89\n jump\t// in\n tag_173:\n /* \"#utility.yul\":4933:5055 */\n tag_172:\n /* \"#utility.yul\":5091:5097 */\n dup2\n /* \"#utility.yul\":5078:5098 */\n calldataload\n /* \"#utility.yul\":5116:5194 */\n tag_174\n /* \"#utility.yul\":5190:5193 */\n dup5\n /* \"#utility.yul\":5182:5188 */\n dup3\n /* \"#utility.yul\":5175:5179 */\n 0x20\n /* \"#utility.yul\":5167:5173 */\n dup7\n /* \"#utility.yul\":5163:5180 */\n add\n /* \"#utility.yul\":5116:5194 */\n tag_96\n jump\t// in\n tag_174:\n /* \"#utility.yul\":5107:5194 */\n swap2\n pop\n /* \"#utility.yul\":4923:5200 */\n pop\n /* \"#utility.yul\":4862:5200 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5206:6003 */\n tag_28:\n /* \"#utility.yul\":5292:5298 */\n 0x00\n /* \"#utility.yul\":5300:5306 */\n dup1\n /* \"#utility.yul\":5308:5314 */\n 0x00\n /* \"#utility.yul\":5357:5359 */\n 0x60\n /* \"#utility.yul\":5345:5354 */\n dup5\n /* \"#utility.yul\":5336:5343 */\n dup7\n /* \"#utility.yul\":5332:5355 */\n sub\n /* \"#utility.yul\":5328:5360 */\n slt\n /* \"#utility.yul\":5325:5444 */\n iszero\n tag_176\n jumpi\n /* \"#utility.yul\":5363:5442 */\n tag_177\n tag_76\n jump\t// in\n tag_177:\n /* \"#utility.yul\":5325:5444 */\n tag_176:\n /* \"#utility.yul\":5483:5484 */\n 0x00\n /* \"#utility.yul\":5508:5561 */\n tag_178\n /* \"#utility.yul\":5553:5560 */\n dup7\n /* \"#utility.yul\":5544:5550 */\n dup3\n /* \"#utility.yul\":5533:5542 */\n dup8\n /* \"#utility.yul\":5529:5551 */\n add\n /* \"#utility.yul\":5508:5561 */\n tag_80\n jump\t// in\n tag_178:\n /* \"#utility.yul\":5498:5561 */\n swap4\n pop\n /* \"#utility.yul\":5454:5571 */\n pop\n /* \"#utility.yul\":5610:5612 */\n 0x20\n /* \"#utility.yul\":5636:5689 */\n tag_179\n /* \"#utility.yul\":5681:5688 */\n dup7\n /* \"#utility.yul\":5672:5678 */\n dup3\n /* \"#utility.yul\":5661:5670 */\n dup8\n /* \"#utility.yul\":5657:5679 */\n add\n /* \"#utility.yul\":5636:5689 */\n tag_80\n jump\t// in\n tag_179:\n /* \"#utility.yul\":5626:5689 */\n swap3\n pop\n /* \"#utility.yul\":5581:5699 */\n pop\n /* \"#utility.yul\":5766:5768 */\n 0x40\n /* \"#utility.yul\":5755:5764 */\n dup5\n /* \"#utility.yul\":5751:5769 */\n add\n /* \"#utility.yul\":5738:5770 */\n calldataload\n /* \"#utility.yul\":5797:5815 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5789:5795 */\n dup2\n /* \"#utility.yul\":5786:5816 */\n gt\n /* \"#utility.yul\":5783:5900 */\n iszero\n tag_180\n jumpi\n /* \"#utility.yul\":5819:5898 */\n tag_181\n tag_77\n jump\t// in\n tag_181:\n /* \"#utility.yul\":5783:5900 */\n tag_180:\n /* \"#utility.yul\":5924:5986 */\n tag_182\n /* \"#utility.yul\":5978:5985 */\n dup7\n /* \"#utility.yul\":5969:5975 */\n dup3\n /* \"#utility.yul\":5958:5967 */\n dup8\n /* \"#utility.yul\":5954:5976 */\n add\n /* \"#utility.yul\":5924:5986 */\n tag_97\n jump\t// in\n tag_182:\n /* \"#utility.yul\":5914:5986 */\n swap2\n pop\n /* \"#utility.yul\":5709:5996 */\n pop\n /* \"#utility.yul\":5206:6003 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":6009:6099 */\n tag_98:\n /* \"#utility.yul\":6043:6050 */\n 0x00\n /* \"#utility.yul\":6086:6091 */\n dup2\n /* \"#utility.yul\":6079:6092 */\n iszero\n /* \"#utility.yul\":6072:6093 */\n iszero\n /* \"#utility.yul\":6061:6093 */\n swap1\n pop\n /* \"#utility.yul\":6009:6099 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6105:6221 */\n tag_99:\n /* \"#utility.yul\":6175:6196 */\n tag_185\n /* \"#utility.yul\":6190:6195 */\n dup2\n /* \"#utility.yul\":6175:6196 */\n tag_98\n jump\t// in\n tag_185:\n /* \"#utility.yul\":6168:6173 */\n dup2\n /* \"#utility.yul\":6165:6197 */\n eq\n /* \"#utility.yul\":6155:6215 */\n tag_186\n jumpi\n /* \"#utility.yul\":6211:6212 */\n 0x00\n /* \"#utility.yul\":6208:6209 */\n dup1\n /* \"#utility.yul\":6201:6213 */\n revert\n /* \"#utility.yul\":6155:6215 */\n tag_186:\n /* \"#utility.yul\":6105:6221 */\n pop\n jump\t// out\n /* \"#utility.yul\":6227:6360 */\n tag_100:\n /* \"#utility.yul\":6270:6275 */\n 0x00\n /* \"#utility.yul\":6308:6314 */\n dup2\n /* \"#utility.yul\":6295:6315 */\n calldataload\n /* \"#utility.yul\":6286:6315 */\n swap1\n pop\n /* \"#utility.yul\":6324:6354 */\n tag_188\n /* \"#utility.yul\":6348:6353 */\n dup2\n /* \"#utility.yul\":6324:6354 */\n tag_99\n jump\t// in\n tag_188:\n /* \"#utility.yul\":6227:6360 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6366:6834 */\n tag_33:\n /* \"#utility.yul\":6431:6437 */\n 0x00\n /* \"#utility.yul\":6439:6445 */\n dup1\n /* \"#utility.yul\":6488:6490 */\n 0x40\n /* \"#utility.yul\":6476:6485 */\n dup4\n /* \"#utility.yul\":6467:6474 */\n dup6\n /* \"#utility.yul\":6463:6486 */\n sub\n /* \"#utility.yul\":6459:6491 */\n slt\n /* \"#utility.yul\":6456:6575 */\n iszero\n tag_190\n jumpi\n /* \"#utility.yul\":6494:6573 */\n tag_191\n tag_76\n jump\t// in\n tag_191:\n /* \"#utility.yul\":6456:6575 */\n tag_190:\n /* \"#utility.yul\":6614:6615 */\n 0x00\n /* \"#utility.yul\":6639:6692 */\n tag_192\n /* \"#utility.yul\":6684:6691 */\n dup6\n /* \"#utility.yul\":6675:6681 */\n dup3\n /* \"#utility.yul\":6664:6673 */\n dup7\n /* \"#utility.yul\":6660:6682 */\n add\n /* \"#utility.yul\":6639:6692 */\n tag_80\n jump\t// in\n tag_192:\n /* \"#utility.yul\":6629:6692 */\n swap3\n pop\n /* \"#utility.yul\":6585:6702 */\n pop\n /* \"#utility.yul\":6741:6743 */\n 0x20\n /* \"#utility.yul\":6767:6817 */\n tag_193\n /* \"#utility.yul\":6809:6816 */\n dup6\n /* \"#utility.yul\":6800:6806 */\n dup3\n /* \"#utility.yul\":6789:6798 */\n dup7\n /* \"#utility.yul\":6785:6807 */\n add\n /* \"#utility.yul\":6767:6817 */\n tag_100\n jump\t// in\n tag_193:\n /* \"#utility.yul\":6757:6817 */\n swap2\n pop\n /* \"#utility.yul\":6712:6827 */\n pop\n /* \"#utility.yul\":6366:6834 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6840:6966 */\n tag_101:\n /* \"#utility.yul\":6877:6884 */\n 0x00\n /* \"#utility.yul\":6917:6959 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":6910:6915 */\n dup3\n /* \"#utility.yul\":6906:6960 */\n and\n /* \"#utility.yul\":6895:6960 */\n swap1\n pop\n /* \"#utility.yul\":6840:6966 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6972:7032 */\n tag_102:\n /* \"#utility.yul\":7000:7003 */\n 0x00\n /* \"#utility.yul\":7021:7026 */\n dup2\n /* \"#utility.yul\":7014:7026 */\n swap1\n pop\n /* \"#utility.yul\":6972:7032 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7038:7180 */\n tag_103:\n /* \"#utility.yul\":7088:7097 */\n 0x00\n /* \"#utility.yul\":7121:7174 */\n tag_197\n /* \"#utility.yul\":7139:7173 */\n tag_198\n /* \"#utility.yul\":7148:7172 */\n tag_199\n /* \"#utility.yul\":7166:7171 */\n dup5\n /* \"#utility.yul\":7148:7172 */\n tag_101\n jump\t// in\n tag_199:\n /* \"#utility.yul\":7139:7173 */\n tag_102\n jump\t// in\n tag_198:\n /* \"#utility.yul\":7121:7174 */\n tag_101\n jump\t// in\n tag_197:\n /* \"#utility.yul\":7108:7174 */\n swap1\n pop\n /* \"#utility.yul\":7038:7180 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7186:7312 */\n tag_104:\n /* \"#utility.yul\":7236:7245 */\n 0x00\n /* \"#utility.yul\":7269:7306 */\n tag_201\n /* \"#utility.yul\":7300:7305 */\n dup3\n /* \"#utility.yul\":7269:7306 */\n tag_103\n jump\t// in\n tag_201:\n /* \"#utility.yul\":7256:7306 */\n swap1\n pop\n /* \"#utility.yul\":7186:7312 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7318:7463 */\n tag_105:\n /* \"#utility.yul\":7387:7396 */\n 0x00\n /* \"#utility.yul\":7420:7457 */\n tag_203\n /* \"#utility.yul\":7451:7456 */\n dup3\n /* \"#utility.yul\":7420:7457 */\n tag_104\n jump\t// in\n tag_203:\n /* \"#utility.yul\":7407:7457 */\n swap1\n pop\n /* \"#utility.yul\":7318:7463 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7469:7638 */\n tag_106:\n /* \"#utility.yul\":7575:7631 */\n tag_205\n /* \"#utility.yul\":7625:7630 */\n dup2\n /* \"#utility.yul\":7575:7631 */\n tag_105\n jump\t// in\n tag_205:\n /* \"#utility.yul\":7570:7573 */\n dup3\n /* \"#utility.yul\":7563:7632 */\n mstore\n /* \"#utility.yul\":7469:7638 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7644:7904 */\n tag_43:\n /* \"#utility.yul\":7756:7760 */\n 0x00\n /* \"#utility.yul\":7794:7796 */\n 0x20\n /* \"#utility.yul\":7783:7792 */\n dup3\n /* \"#utility.yul\":7779:7797 */\n add\n /* \"#utility.yul\":7771:7797 */\n swap1\n pop\n /* \"#utility.yul\":7807:7897 */\n tag_207\n /* \"#utility.yul\":7894:7895 */\n 0x00\n /* \"#utility.yul\":7883:7892 */\n dup4\n /* \"#utility.yul\":7879:7896 */\n add\n /* \"#utility.yul\":7870:7876 */\n dup5\n /* \"#utility.yul\":7807:7897 */\n tag_106\n jump\t// in\n tag_207:\n /* \"#utility.yul\":7644:7904 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7910:8417 */\n tag_50:\n /* \"#utility.yul\":7978:7984 */\n 0x00\n /* \"#utility.yul\":8027:8029 */\n 0x20\n /* \"#utility.yul\":8015:8024 */\n dup3\n /* \"#utility.yul\":8006:8013 */\n dup5\n /* \"#utility.yul\":8002:8025 */\n sub\n /* \"#utility.yul\":7998:8030 */\n slt\n /* \"#utility.yul\":7995:8114 */\n iszero\n tag_209\n jumpi\n /* \"#utility.yul\":8033:8112 */\n tag_210\n tag_76\n jump\t// in\n tag_210:\n /* \"#utility.yul\":7995:8114 */\n tag_209:\n /* \"#utility.yul\":8181:8182 */\n 0x00\n /* \"#utility.yul\":8170:8179 */\n dup3\n /* \"#utility.yul\":8166:8183 */\n add\n /* \"#utility.yul\":8153:8184 */\n calldataload\n /* \"#utility.yul\":8211:8229 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8203:8209 */\n dup2\n /* \"#utility.yul\":8200:8230 */\n gt\n /* \"#utility.yul\":8197:8314 */\n iszero\n tag_211\n jumpi\n /* \"#utility.yul\":8233:8312 */\n tag_212\n tag_77\n jump\t// in\n tag_212:\n /* \"#utility.yul\":8197:8314 */\n tag_211:\n /* \"#utility.yul\":8338:8400 */\n tag_213\n /* \"#utility.yul\":8392:8399 */\n dup5\n /* \"#utility.yul\":8383:8389 */\n dup3\n /* \"#utility.yul\":8372:8381 */\n dup6\n /* \"#utility.yul\":8368:8390 */\n add\n /* \"#utility.yul\":8338:8400 */\n tag_97\n jump\t// in\n tag_213:\n /* \"#utility.yul\":8328:8400 */\n swap2\n pop\n /* \"#utility.yul\":8124:8410 */\n pop\n /* \"#utility.yul\":7910:8417 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8423:8734 */\n tag_107:\n /* \"#utility.yul\":8500:8504 */\n 0x00\n /* \"#utility.yul\":8590:8608 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8582:8588 */\n dup3\n /* \"#utility.yul\":8579:8609 */\n gt\n /* \"#utility.yul\":8576:8632 */\n iszero\n tag_215\n jumpi\n /* \"#utility.yul\":8612:8630 */\n tag_216\n tag_91\n jump\t// in\n tag_216:\n /* \"#utility.yul\":8576:8632 */\n tag_215:\n /* \"#utility.yul\":8662:8666 */\n 0x20\n /* \"#utility.yul\":8654:8660 */\n dup3\n /* \"#utility.yul\":8650:8667 */\n mul\n /* \"#utility.yul\":8642:8667 */\n swap1\n pop\n /* \"#utility.yul\":8722:8726 */\n 0x20\n /* \"#utility.yul\":8716:8720 */\n dup2\n /* \"#utility.yul\":8712:8727 */\n add\n /* \"#utility.yul\":8704:8727 */\n swap1\n pop\n /* \"#utility.yul\":8423:8734 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8740:8857 */\n tag_108:\n /* \"#utility.yul\":8849:8850 */\n 0x00\n /* \"#utility.yul\":8846:8847 */\n dup1\n /* \"#utility.yul\":8839:8851 */\n revert\n /* \"#utility.yul\":8880:9590 */\n tag_109:\n /* \"#utility.yul\":8976:8981 */\n 0x00\n /* \"#utility.yul\":9001:9082 */\n tag_219\n /* \"#utility.yul\":9017:9081 */\n tag_220\n /* \"#utility.yul\":9074:9080 */\n dup5\n /* \"#utility.yul\":9017:9081 */\n tag_107\n jump\t// in\n tag_220:\n /* \"#utility.yul\":9001:9082 */\n tag_93\n jump\t// in\n tag_219:\n /* \"#utility.yul\":8992:9082 */\n swap1\n pop\n /* \"#utility.yul\":9102:9107 */\n dup1\n /* \"#utility.yul\":9131:9137 */\n dup4\n /* \"#utility.yul\":9124:9129 */\n dup3\n /* \"#utility.yul\":9117:9138 */\n mstore\n /* \"#utility.yul\":9165:9169 */\n 0x20\n /* \"#utility.yul\":9158:9163 */\n dup3\n /* \"#utility.yul\":9154:9170 */\n add\n /* \"#utility.yul\":9147:9170 */\n swap1\n pop\n /* \"#utility.yul\":9218:9222 */\n 0x20\n /* \"#utility.yul\":9210:9216 */\n dup5\n /* \"#utility.yul\":9206:9223 */\n mul\n /* \"#utility.yul\":9198:9204 */\n dup4\n /* \"#utility.yul\":9194:9224 */\n add\n /* \"#utility.yul\":9247:9250 */\n dup6\n /* \"#utility.yul\":9239:9245 */\n dup2\n /* \"#utility.yul\":9236:9251 */\n gt\n /* \"#utility.yul\":9233:9355 */\n iszero\n tag_221\n jumpi\n /* \"#utility.yul\":9266:9345 */\n tag_222\n tag_108\n jump\t// in\n tag_222:\n /* \"#utility.yul\":9233:9355 */\n tag_221:\n /* \"#utility.yul\":9381:9387 */\n dup4\n /* \"#utility.yul\":9364:9584 */\n tag_223:\n /* \"#utility.yul\":9398:9404 */\n dup2\n /* \"#utility.yul\":9393:9396 */\n dup2\n /* \"#utility.yul\":9390:9405 */\n lt\n /* \"#utility.yul\":9364:9584 */\n iszero\n tag_225\n jumpi\n /* \"#utility.yul\":9473:9476 */\n dup1\n /* \"#utility.yul\":9502:9539 */\n tag_226\n /* \"#utility.yul\":9535:9538 */\n dup9\n /* \"#utility.yul\":9523:9533 */\n dup3\n /* \"#utility.yul\":9502:9539 */\n tag_80\n jump\t// in\n tag_226:\n /* \"#utility.yul\":9497:9500 */\n dup5\n /* \"#utility.yul\":9490:9540 */\n mstore\n /* \"#utility.yul\":9569:9573 */\n 0x20\n /* \"#utility.yul\":9564:9567 */\n dup5\n /* \"#utility.yul\":9560:9574 */\n add\n /* \"#utility.yul\":9553:9574 */\n swap4\n pop\n /* \"#utility.yul\":9440:9584 */\n pop\n /* \"#utility.yul\":9424:9428 */\n 0x20\n /* \"#utility.yul\":9419:9422 */\n dup2\n /* \"#utility.yul\":9415:9429 */\n add\n /* \"#utility.yul\":9408:9429 */\n swap1\n pop\n /* \"#utility.yul\":9364:9584 */\n jump(tag_223)\n tag_225:\n /* \"#utility.yul\":9368:9389 */\n pop\n /* \"#utility.yul\":8982:9590 */\n pop\n pop\n /* \"#utility.yul\":8880:9590 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9613:9983 */\n tag_110:\n /* \"#utility.yul\":9684:9689 */\n 0x00\n /* \"#utility.yul\":9733:9736 */\n dup3\n /* \"#utility.yul\":9726:9730 */\n 0x1f\n /* \"#utility.yul\":9718:9724 */\n dup4\n /* \"#utility.yul\":9714:9731 */\n add\n /* \"#utility.yul\":9710:9737 */\n slt\n /* \"#utility.yul\":9700:9822 */\n tag_228\n jumpi\n /* \"#utility.yul\":9741:9820 */\n tag_229\n tag_89\n jump\t// in\n tag_229:\n /* \"#utility.yul\":9700:9822 */\n tag_228:\n /* \"#utility.yul\":9858:9864 */\n dup2\n /* \"#utility.yul\":9845:9865 */\n calldataload\n /* \"#utility.yul\":9883:9977 */\n tag_230\n /* \"#utility.yul\":9973:9976 */\n dup5\n /* \"#utility.yul\":9965:9971 */\n dup3\n /* \"#utility.yul\":9958:9962 */\n 0x20\n /* \"#utility.yul\":9950:9956 */\n dup7\n /* \"#utility.yul\":9946:9963 */\n add\n /* \"#utility.yul\":9883:9977 */\n tag_109\n jump\t// in\n tag_230:\n /* \"#utility.yul\":9874:9977 */\n swap2\n pop\n /* \"#utility.yul\":9690:9983 */\n pop\n /* \"#utility.yul\":9613:9983 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9989:10528 */\n tag_55:\n /* \"#utility.yul\":10073:10079 */\n 0x00\n /* \"#utility.yul\":10122:10124 */\n 0x20\n /* \"#utility.yul\":10110:10119 */\n dup3\n /* \"#utility.yul\":10101:10108 */\n dup5\n /* \"#utility.yul\":10097:10120 */\n sub\n /* \"#utility.yul\":10093:10125 */\n slt\n /* \"#utility.yul\":10090:10209 */\n iszero\n tag_232\n jumpi\n /* \"#utility.yul\":10128:10207 */\n tag_233\n tag_76\n jump\t// in\n tag_233:\n /* \"#utility.yul\":10090:10209 */\n tag_232:\n /* \"#utility.yul\":10276:10277 */\n 0x00\n /* \"#utility.yul\":10265:10274 */\n dup3\n /* \"#utility.yul\":10261:10278 */\n add\n /* \"#utility.yul\":10248:10279 */\n calldataload\n /* \"#utility.yul\":10306:10324 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10298:10304 */\n dup2\n /* \"#utility.yul\":10295:10325 */\n gt\n /* \"#utility.yul\":10292:10409 */\n iszero\n tag_234\n jumpi\n /* \"#utility.yul\":10328:10407 */\n tag_235\n tag_77\n jump\t// in\n tag_235:\n /* \"#utility.yul\":10292:10409 */\n tag_234:\n /* \"#utility.yul\":10433:10511 */\n tag_236\n /* \"#utility.yul\":10503:10510 */\n dup5\n /* \"#utility.yul\":10494:10500 */\n dup3\n /* \"#utility.yul\":10483:10492 */\n dup6\n /* \"#utility.yul\":10479:10501 */\n add\n /* \"#utility.yul\":10433:10511 */\n tag_110\n jump\t// in\n tag_236:\n /* \"#utility.yul\":10423:10511 */\n swap2\n pop\n /* \"#utility.yul\":10219:10521 */\n pop\n /* \"#utility.yul\":9989:10528 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212206f7085f9fce5641d8db25d8b9b823efdd7a104ea3e6ff92717d013741fc0ce7864736f6c63430008090033\n}\n", + "assembly": " /* \"main.sol\":223:2202 contract RelayEncoderInstance is RelayEncoder {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":399:441 0x0000000000000000000000000000000000000805 */\n 0x0805\n /* \"main.sol\":343:442 RelayEncoder public relayencoder =... */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":223:2202 contract RelayEncoderInstance is RelayEncoder {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":223:2202 contract RelayEncoderInstance is RelayEncoder {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x61bdd2e0\n gt\n tag_14\n jumpi\n dup1\n 0x61bdd2e0\n eq\n tag_8\n jumpi\n dup1\n 0x7a8f48c2\n eq\n tag_9\n jumpi\n dup1\n 0x9801b147\n eq\n tag_10\n jumpi\n dup1\n 0xa7cb124b\n eq\n tag_11\n jumpi\n dup1\n 0xadd6b3bf\n eq\n tag_12\n jumpi\n dup1\n 0xbc4b2187\n eq\n tag_13\n jumpi\n jump(tag_2)\n tag_14:\n dup1\n 0x2cd61217\n eq\n tag_3\n jumpi\n dup1\n 0x2d220331\n eq\n tag_4\n jumpi\n dup1\n 0x31627376\n eq\n tag_5\n jumpi\n dup1\n 0x3a0d803a\n eq\n tag_6\n jumpi\n dup1\n 0x49def326\n eq\n tag_7\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":834:992 function encode_unbond(uint256 amount)... */\n tag_3:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n mload(0x40)\n tag_19\n swap2\n swap1\n tag_20\n jump\t// in\n tag_19:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":998:1167 function encode_withdraw_unbonded(uint32 slashes)... */\n tag_4:\n tag_21\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_22\n swap2\n swap1\n tag_23\n jump\t// in\n tag_22:\n tag_24\n jump\t// in\n tag_21:\n mload(0x40)\n tag_25\n swap2\n swap1\n tag_20\n jump\t// in\n tag_25:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":449:660 function encode_bond(... */\n tag_5:\n tag_26\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_27\n swap2\n swap1\n tag_28\n jump\t// in\n tag_27:\n tag_29\n jump\t// in\n tag_26:\n mload(0x40)\n tag_30\n swap2\n swap1\n tag_20\n jump\t// in\n tag_30:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1173:1350 function encode_validate(uint256 comission, bool blocked)... */\n tag_6:\n tag_31\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_32\n swap2\n swap1\n tag_33\n jump\t// in\n tag_32:\n tag_34\n jump\t// in\n tag_31:\n mload(0x40)\n tag_35\n swap2\n swap1\n tag_20\n jump\t// in\n tag_35:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":666:828 function encode_bond_extra(uint256 amount)... */\n tag_7:\n tag_36\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_37\n swap2\n swap1\n tag_17\n jump\t// in\n tag_37:\n tag_38\n jump\t// in\n tag_36:\n mload(0x40)\n tag_39\n swap2\n swap1\n tag_20\n jump\t// in\n tag_39:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":343:442 RelayEncoder public relayencoder =... */\n tag_8:\n tag_40\n tag_41\n jump\t// in\n tag_40:\n mload(0x40)\n tag_42\n swap2\n swap1\n tag_43\n jump\t// in\n tag_42:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1866:2036 function encode_set_controller(uint256 controller)... */\n tag_9:\n tag_44\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_45\n swap2\n swap1\n tag_17\n jump\t// in\n tag_45:\n tag_46\n jump\t// in\n tag_44:\n mload(0x40)\n tag_47\n swap2\n swap1\n tag_20\n jump\t// in\n tag_47:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1682:1860 function encode_set_payee(bytes memory reward_destination)... */\n tag_10:\n tag_48\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_49\n swap2\n swap1\n tag_50\n jump\t// in\n tag_49:\n tag_51\n jump\t// in\n tag_48:\n mload(0x40)\n tag_52\n swap2\n swap1\n tag_20\n jump\t// in\n tag_52:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1356:1527 function encode_nominate(uint256[] memory nominees)... */\n tag_11:\n tag_53\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_54\n swap2\n swap1\n tag_55\n jump\t// in\n tag_54:\n tag_56\n jump\t// in\n tag_53:\n mload(0x40)\n tag_57\n swap2\n swap1\n tag_20\n jump\t// in\n tag_57:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2042:2200 function encode_rebond(uint256 amount)... */\n tag_12:\n tag_58\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_59\n swap2\n swap1\n tag_17\n jump\t// in\n tag_59:\n tag_60\n jump\t// in\n tag_58:\n mload(0x40)\n tag_61\n swap2\n swap1\n tag_20\n jump\t// in\n tag_61:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1533:1676 function encode_chill()... */\n tag_13:\n tag_62\n tag_63\n jump\t// in\n tag_62:\n mload(0x40)\n tag_64\n swap2\n swap1\n tag_20\n jump\t// in\n tag_64:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":834:992 function encode_unbond(uint256 amount)... */\n tag_18:\n /* \"main.sol\":937:956 bytes memory result */\n 0x60\n /* \"main.sol\":972:985 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":834:992 function encode_unbond(uint256 amount)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":998:1167 function encode_withdraw_unbonded(uint32 slashes)... */\n tag_24:\n /* \"main.sol\":1112:1131 bytes memory result */\n 0x60\n /* \"main.sol\":1147:1160 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":998:1167 function encode_withdraw_unbonded(uint32 slashes)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":449:660 function encode_bond(... */\n tag_29:\n /* \"main.sol\":609:628 bytes memory result */\n 0x60\n /* \"main.sol\":640:653 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":449:660 function encode_bond(... */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":1173:1350 function encode_validate(uint256 comission, bool blocked)... */\n tag_34:\n /* \"main.sol\":1295:1314 bytes memory result */\n 0x60\n /* \"main.sol\":1330:1343 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1173:1350 function encode_validate(uint256 comission, bool blocked)... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":666:828 function encode_bond_extra(uint256 amount)... */\n tag_38:\n /* \"main.sol\":773:792 bytes memory result */\n 0x60\n /* \"main.sol\":808:821 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":666:828 function encode_bond_extra(uint256 amount)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":343:442 RelayEncoder public relayencoder =... */\n tag_41:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":1866:2036 function encode_set_controller(uint256 controller)... */\n tag_46:\n /* \"main.sol\":1981:2000 bytes memory result */\n 0x60\n /* \"main.sol\":2016:2029 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1866:2036 function encode_set_controller(uint256 controller)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":1682:1860 function encode_set_payee(bytes memory reward_destination)... */\n tag_51:\n /* \"main.sol\":1805:1824 bytes memory result */\n 0x60\n /* \"main.sol\":1840:1853 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1682:1860 function encode_set_payee(bytes memory reward_destination)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":1356:1527 function encode_nominate(uint256[] memory nominees)... */\n tag_56:\n /* \"main.sol\":1472:1491 bytes memory result */\n 0x60\n /* \"main.sol\":1507:1520 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1356:1527 function encode_nominate(uint256[] memory nominees)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":2042:2200 function encode_rebond(uint256 amount)... */\n tag_60:\n /* \"main.sol\":2145:2164 bytes memory result */\n 0x60\n /* \"main.sol\":2180:2193 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":2042:2200 function encode_rebond(uint256 amount)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":1533:1676 function encode_chill()... */\n tag_63:\n /* \"main.sol\":1621:1640 bytes memory result */\n 0x60\n /* \"main.sol\":1656:1669 return \"0x00\" */\n mload(0x40)\n dup1\n 0x40\n add\n 0x40\n mstore\n dup1\n 0x04\n dup2\n mstore\n 0x20\n add\n 0x3078303000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n pop\n swap1\n pop\n /* \"main.sol\":1533:1676 function encode_chill()... */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_75:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_76:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_77:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:411 */\n tag_78:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\n tag_79:\n /* \"#utility.yul\":490:514 */\n tag_117\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_78\n jump\t// in\n tag_117:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_118\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\n tag_118:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:684 */\n tag_80:\n /* \"#utility.yul\":591:596 */\n 0x00\n /* \"#utility.yul\":629:635 */\n dup2\n /* \"#utility.yul\":616:636 */\n calldataload\n /* \"#utility.yul\":607:636 */\n swap1\n pop\n /* \"#utility.yul\":645:678 */\n tag_120\n /* \"#utility.yul\":672:677 */\n dup2\n /* \"#utility.yul\":645:678 */\n tag_79\n jump\t// in\n tag_120:\n /* \"#utility.yul\":545:684 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":690:1019 */\n tag_17:\n /* \"#utility.yul\":749:755 */\n 0x00\n /* \"#utility.yul\":798:800 */\n 0x20\n /* \"#utility.yul\":786:795 */\n dup3\n /* \"#utility.yul\":777:784 */\n dup5\n /* \"#utility.yul\":773:796 */\n sub\n /* \"#utility.yul\":769:801 */\n slt\n /* \"#utility.yul\":766:885 */\n iszero\n tag_122\n jumpi\n /* \"#utility.yul\":804:883 */\n tag_123\n tag_76\n jump\t// in\n tag_123:\n /* \"#utility.yul\":766:885 */\n tag_122:\n /* \"#utility.yul\":924:925 */\n 0x00\n /* \"#utility.yul\":949:1002 */\n tag_124\n /* \"#utility.yul\":994:1001 */\n dup5\n /* \"#utility.yul\":985:991 */\n dup3\n /* \"#utility.yul\":974:983 */\n dup6\n /* \"#utility.yul\":970:992 */\n add\n /* \"#utility.yul\":949:1002 */\n tag_80\n jump\t// in\n tag_124:\n /* \"#utility.yul\":939:1002 */\n swap2\n pop\n /* \"#utility.yul\":895:1012 */\n pop\n /* \"#utility.yul\":690:1019 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1025:1123 */\n tag_81:\n /* \"#utility.yul\":1076:1082 */\n 0x00\n /* \"#utility.yul\":1110:1115 */\n dup2\n /* \"#utility.yul\":1104:1116 */\n mload\n /* \"#utility.yul\":1094:1116 */\n swap1\n pop\n /* \"#utility.yul\":1025:1123 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1129:1297 */\n tag_82:\n /* \"#utility.yul\":1212:1223 */\n 0x00\n /* \"#utility.yul\":1246:1252 */\n dup3\n /* \"#utility.yul\":1241:1244 */\n dup3\n /* \"#utility.yul\":1234:1253 */\n mstore\n /* \"#utility.yul\":1286:1290 */\n 0x20\n /* \"#utility.yul\":1281:1284 */\n dup3\n /* \"#utility.yul\":1277:1291 */\n add\n /* \"#utility.yul\":1262:1291 */\n swap1\n pop\n /* \"#utility.yul\":1129:1297 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1303:1610 */\n tag_83:\n /* \"#utility.yul\":1371:1372 */\n 0x00\n /* \"#utility.yul\":1381:1494 */\n tag_128:\n /* \"#utility.yul\":1395:1401 */\n dup4\n /* \"#utility.yul\":1392:1393 */\n dup2\n /* \"#utility.yul\":1389:1402 */\n lt\n /* \"#utility.yul\":1381:1494 */\n iszero\n tag_130\n jumpi\n /* \"#utility.yul\":1480:1481 */\n dup1\n /* \"#utility.yul\":1475:1478 */\n dup3\n /* \"#utility.yul\":1471:1482 */\n add\n /* \"#utility.yul\":1465:1483 */\n mload\n /* \"#utility.yul\":1461:1462 */\n dup2\n /* \"#utility.yul\":1456:1459 */\n dup5\n /* \"#utility.yul\":1452:1463 */\n add\n /* \"#utility.yul\":1445:1484 */\n mstore\n /* \"#utility.yul\":1417:1419 */\n 0x20\n /* \"#utility.yul\":1414:1415 */\n dup2\n /* \"#utility.yul\":1410:1420 */\n add\n /* \"#utility.yul\":1405:1420 */\n swap1\n pop\n /* \"#utility.yul\":1381:1494 */\n jump(tag_128)\n tag_130:\n /* \"#utility.yul\":1512:1518 */\n dup4\n /* \"#utility.yul\":1509:1510 */\n dup2\n /* \"#utility.yul\":1506:1519 */\n gt\n /* \"#utility.yul\":1503:1604 */\n iszero\n tag_131\n jumpi\n /* \"#utility.yul\":1592:1593 */\n 0x00\n /* \"#utility.yul\":1583:1589 */\n dup5\n /* \"#utility.yul\":1578:1581 */\n dup5\n /* \"#utility.yul\":1574:1590 */\n add\n /* \"#utility.yul\":1567:1594 */\n mstore\n /* \"#utility.yul\":1503:1604 */\n tag_131:\n /* \"#utility.yul\":1352:1610 */\n pop\n /* \"#utility.yul\":1303:1610 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1616:1718 */\n tag_84:\n /* \"#utility.yul\":1657:1663 */\n 0x00\n /* \"#utility.yul\":1708:1710 */\n 0x1f\n /* \"#utility.yul\":1704:1711 */\n not\n /* \"#utility.yul\":1699:1701 */\n 0x1f\n /* \"#utility.yul\":1692:1697 */\n dup4\n /* \"#utility.yul\":1688:1702 */\n add\n /* \"#utility.yul\":1684:1712 */\n and\n /* \"#utility.yul\":1674:1712 */\n swap1\n pop\n /* \"#utility.yul\":1616:1718 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1724:2084 */\n tag_85:\n /* \"#utility.yul\":1810:1813 */\n 0x00\n /* \"#utility.yul\":1838:1876 */\n tag_134\n /* \"#utility.yul\":1870:1875 */\n dup3\n /* \"#utility.yul\":1838:1876 */\n tag_81\n jump\t// in\n tag_134:\n /* \"#utility.yul\":1892:1962 */\n tag_135\n /* \"#utility.yul\":1955:1961 */\n dup2\n /* \"#utility.yul\":1950:1953 */\n dup6\n /* \"#utility.yul\":1892:1962 */\n tag_82\n jump\t// in\n tag_135:\n /* \"#utility.yul\":1885:1962 */\n swap4\n pop\n /* \"#utility.yul\":1971:2023 */\n tag_136\n /* \"#utility.yul\":2016:2022 */\n dup2\n /* \"#utility.yul\":2011:2014 */\n dup6\n /* \"#utility.yul\":2004:2008 */\n 0x20\n /* \"#utility.yul\":1997:2002 */\n dup7\n /* \"#utility.yul\":1993:2009 */\n add\n /* \"#utility.yul\":1971:2023 */\n tag_83\n jump\t// in\n tag_136:\n /* \"#utility.yul\":2048:2077 */\n tag_137\n /* \"#utility.yul\":2070:2076 */\n dup2\n /* \"#utility.yul\":2048:2077 */\n tag_84\n jump\t// in\n tag_137:\n /* \"#utility.yul\":2043:2046 */\n dup5\n /* \"#utility.yul\":2039:2078 */\n add\n /* \"#utility.yul\":2032:2078 */\n swap2\n pop\n /* \"#utility.yul\":1814:2084 */\n pop\n /* \"#utility.yul\":1724:2084 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2090:2399 */\n tag_20:\n /* \"#utility.yul\":2201:2205 */\n 0x00\n /* \"#utility.yul\":2239:2241 */\n 0x20\n /* \"#utility.yul\":2228:2237 */\n dup3\n /* \"#utility.yul\":2224:2242 */\n add\n /* \"#utility.yul\":2216:2242 */\n swap1\n pop\n /* \"#utility.yul\":2288:2297 */\n dup2\n /* \"#utility.yul\":2282:2286 */\n dup2\n /* \"#utility.yul\":2278:2298 */\n sub\n /* \"#utility.yul\":2274:2275 */\n 0x00\n /* \"#utility.yul\":2263:2272 */\n dup4\n /* \"#utility.yul\":2259:2276 */\n add\n /* \"#utility.yul\":2252:2299 */\n mstore\n /* \"#utility.yul\":2316:2392 */\n tag_139\n /* \"#utility.yul\":2387:2391 */\n dup2\n /* \"#utility.yul\":2378:2384 */\n dup5\n /* \"#utility.yul\":2316:2392 */\n tag_85\n jump\t// in\n tag_139:\n /* \"#utility.yul\":2308:2392 */\n swap1\n pop\n /* \"#utility.yul\":2090:2399 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2405:2498 */\n tag_86:\n /* \"#utility.yul\":2441:2448 */\n 0x00\n /* \"#utility.yul\":2481:2491 */\n 0xffffffff\n /* \"#utility.yul\":2474:2479 */\n dup3\n /* \"#utility.yul\":2470:2492 */\n and\n /* \"#utility.yul\":2459:2492 */\n swap1\n pop\n /* \"#utility.yul\":2405:2498 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2504:2624 */\n tag_87:\n /* \"#utility.yul\":2576:2599 */\n tag_142\n /* \"#utility.yul\":2593:2598 */\n dup2\n /* \"#utility.yul\":2576:2599 */\n tag_86\n jump\t// in\n tag_142:\n /* \"#utility.yul\":2569:2574 */\n dup2\n /* \"#utility.yul\":2566:2600 */\n eq\n /* \"#utility.yul\":2556:2618 */\n tag_143\n jumpi\n /* \"#utility.yul\":2614:2615 */\n 0x00\n /* \"#utility.yul\":2611:2612 */\n dup1\n /* \"#utility.yul\":2604:2616 */\n revert\n /* \"#utility.yul\":2556:2618 */\n tag_143:\n /* \"#utility.yul\":2504:2624 */\n pop\n jump\t// out\n /* \"#utility.yul\":2630:2767 */\n tag_88:\n /* \"#utility.yul\":2675:2680 */\n 0x00\n /* \"#utility.yul\":2713:2719 */\n dup2\n /* \"#utility.yul\":2700:2720 */\n calldataload\n /* \"#utility.yul\":2691:2720 */\n swap1\n pop\n /* \"#utility.yul\":2729:2761 */\n tag_145\n /* \"#utility.yul\":2755:2760 */\n dup2\n /* \"#utility.yul\":2729:2761 */\n tag_87\n jump\t// in\n tag_145:\n /* \"#utility.yul\":2630:2767 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2773:3100 */\n tag_23:\n /* \"#utility.yul\":2831:2837 */\n 0x00\n /* \"#utility.yul\":2880:2882 */\n 0x20\n /* \"#utility.yul\":2868:2877 */\n dup3\n /* \"#utility.yul\":2859:2866 */\n dup5\n /* \"#utility.yul\":2855:2878 */\n sub\n /* \"#utility.yul\":2851:2883 */\n slt\n /* \"#utility.yul\":2848:2967 */\n iszero\n tag_147\n jumpi\n /* \"#utility.yul\":2886:2965 */\n tag_148\n tag_76\n jump\t// in\n tag_148:\n /* \"#utility.yul\":2848:2967 */\n tag_147:\n /* \"#utility.yul\":3006:3007 */\n 0x00\n /* \"#utility.yul\":3031:3083 */\n tag_149\n /* \"#utility.yul\":3075:3082 */\n dup5\n /* \"#utility.yul\":3066:3072 */\n dup3\n /* \"#utility.yul\":3055:3064 */\n dup6\n /* \"#utility.yul\":3051:3073 */\n add\n /* \"#utility.yul\":3031:3083 */\n tag_88\n jump\t// in\n tag_149:\n /* \"#utility.yul\":3021:3083 */\n swap2\n pop\n /* \"#utility.yul\":2977:3093 */\n pop\n /* \"#utility.yul\":2773:3100 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3106:3223 */\n tag_89:\n /* \"#utility.yul\":3215:3216 */\n 0x00\n /* \"#utility.yul\":3212:3213 */\n dup1\n /* \"#utility.yul\":3205:3217 */\n revert\n /* \"#utility.yul\":3229:3346 */\n tag_90:\n /* \"#utility.yul\":3338:3339 */\n 0x00\n /* \"#utility.yul\":3335:3336 */\n dup1\n /* \"#utility.yul\":3328:3340 */\n revert\n /* \"#utility.yul\":3352:3532 */\n tag_91:\n /* \"#utility.yul\":3400:3477 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":3397:3398 */\n 0x00\n /* \"#utility.yul\":3390:3478 */\n mstore\n /* \"#utility.yul\":3497:3501 */\n 0x41\n /* \"#utility.yul\":3494:3495 */\n 0x04\n /* \"#utility.yul\":3487:3502 */\n mstore\n /* \"#utility.yul\":3521:3525 */\n 0x24\n /* \"#utility.yul\":3518:3519 */\n 0x00\n /* \"#utility.yul\":3511:3526 */\n revert\n /* \"#utility.yul\":3538:3819 */\n tag_92:\n /* \"#utility.yul\":3621:3648 */\n tag_154\n /* \"#utility.yul\":3643:3647 */\n dup3\n /* \"#utility.yul\":3621:3648 */\n tag_84\n jump\t// in\n tag_154:\n /* \"#utility.yul\":3613:3619 */\n dup2\n /* \"#utility.yul\":3609:3649 */\n add\n /* \"#utility.yul\":3751:3757 */\n dup2\n /* \"#utility.yul\":3739:3749 */\n dup2\n /* \"#utility.yul\":3736:3758 */\n lt\n /* \"#utility.yul\":3715:3733 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3703:3713 */\n dup3\n /* \"#utility.yul\":3700:3734 */\n gt\n /* \"#utility.yul\":3697:3759 */\n or\n /* \"#utility.yul\":3694:3782 */\n iszero\n tag_155\n jumpi\n /* \"#utility.yul\":3762:3780 */\n tag_156\n tag_91\n jump\t// in\n tag_156:\n /* \"#utility.yul\":3694:3782 */\n tag_155:\n /* \"#utility.yul\":3802:3812 */\n dup1\n /* \"#utility.yul\":3798:3800 */\n 0x40\n /* \"#utility.yul\":3791:3813 */\n mstore\n /* \"#utility.yul\":3581:3819 */\n pop\n /* \"#utility.yul\":3538:3819 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3825:3954 */\n tag_93:\n /* \"#utility.yul\":3859:3865 */\n 0x00\n /* \"#utility.yul\":3886:3906 */\n tag_158\n tag_75\n jump\t// in\n tag_158:\n /* \"#utility.yul\":3876:3906 */\n swap1\n pop\n /* \"#utility.yul\":3915:3948 */\n tag_159\n /* \"#utility.yul\":3943:3947 */\n dup3\n /* \"#utility.yul\":3935:3941 */\n dup3\n /* \"#utility.yul\":3915:3948 */\n tag_92\n jump\t// in\n tag_159:\n /* \"#utility.yul\":3825:3954 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3960:4267 */\n tag_94:\n /* \"#utility.yul\":4021:4025 */\n 0x00\n /* \"#utility.yul\":4111:4129 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4103:4109 */\n dup3\n /* \"#utility.yul\":4100:4130 */\n gt\n /* \"#utility.yul\":4097:4153 */\n iszero\n tag_161\n jumpi\n /* \"#utility.yul\":4133:4151 */\n tag_162\n tag_91\n jump\t// in\n tag_162:\n /* \"#utility.yul\":4097:4153 */\n tag_161:\n /* \"#utility.yul\":4171:4200 */\n tag_163\n /* \"#utility.yul\":4193:4199 */\n dup3\n /* \"#utility.yul\":4171:4200 */\n tag_84\n jump\t// in\n tag_163:\n /* \"#utility.yul\":4163:4200 */\n swap1\n pop\n /* \"#utility.yul\":4255:4259 */\n 0x20\n /* \"#utility.yul\":4249:4253 */\n dup2\n /* \"#utility.yul\":4245:4260 */\n add\n /* \"#utility.yul\":4237:4260 */\n swap1\n pop\n /* \"#utility.yul\":3960:4267 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4273:4427 */\n tag_95:\n /* \"#utility.yul\":4357:4363 */\n dup3\n /* \"#utility.yul\":4352:4355 */\n dup2\n /* \"#utility.yul\":4347:4350 */\n dup4\n /* \"#utility.yul\":4334:4364 */\n calldatacopy\n /* \"#utility.yul\":4419:4420 */\n 0x00\n /* \"#utility.yul\":4410:4416 */\n dup4\n /* \"#utility.yul\":4405:4408 */\n dup4\n /* \"#utility.yul\":4401:4417 */\n add\n /* \"#utility.yul\":4394:4421 */\n mstore\n /* \"#utility.yul\":4273:4427 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4433:4843 */\n tag_96:\n /* \"#utility.yul\":4510:4515 */\n 0x00\n /* \"#utility.yul\":4535:4600 */\n tag_166\n /* \"#utility.yul\":4551:4599 */\n tag_167\n /* \"#utility.yul\":4592:4598 */\n dup5\n /* \"#utility.yul\":4551:4599 */\n tag_94\n jump\t// in\n tag_167:\n /* \"#utility.yul\":4535:4600 */\n tag_93\n jump\t// in\n tag_166:\n /* \"#utility.yul\":4526:4600 */\n swap1\n pop\n /* \"#utility.yul\":4623:4629 */\n dup3\n /* \"#utility.yul\":4616:4621 */\n dup2\n /* \"#utility.yul\":4609:4630 */\n mstore\n /* \"#utility.yul\":4661:4665 */\n 0x20\n /* \"#utility.yul\":4654:4659 */\n dup2\n /* \"#utility.yul\":4650:4666 */\n add\n /* \"#utility.yul\":4699:4702 */\n dup5\n /* \"#utility.yul\":4690:4696 */\n dup5\n /* \"#utility.yul\":4685:4688 */\n dup5\n /* \"#utility.yul\":4681:4697 */\n add\n /* \"#utility.yul\":4678:4703 */\n gt\n /* \"#utility.yul\":4675:4787 */\n iszero\n tag_168\n jumpi\n /* \"#utility.yul\":4706:4785 */\n tag_169\n tag_90\n jump\t// in\n tag_169:\n /* \"#utility.yul\":4675:4787 */\n tag_168:\n /* \"#utility.yul\":4796:4837 */\n tag_170\n /* \"#utility.yul\":4830:4836 */\n dup5\n /* \"#utility.yul\":4825:4828 */\n dup3\n /* \"#utility.yul\":4820:4823 */\n dup6\n /* \"#utility.yul\":4796:4837 */\n tag_95\n jump\t// in\n tag_170:\n /* \"#utility.yul\":4516:4843 */\n pop\n /* \"#utility.yul\":4433:4843 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4862:5200 */\n tag_97:\n /* \"#utility.yul\":4917:4922 */\n 0x00\n /* \"#utility.yul\":4966:4969 */\n dup3\n /* \"#utility.yul\":4959:4963 */\n 0x1f\n /* \"#utility.yul\":4951:4957 */\n dup4\n /* \"#utility.yul\":4947:4964 */\n add\n /* \"#utility.yul\":4943:4970 */\n slt\n /* \"#utility.yul\":4933:5055 */\n tag_172\n jumpi\n /* \"#utility.yul\":4974:5053 */\n tag_173\n tag_89\n jump\t// in\n tag_173:\n /* \"#utility.yul\":4933:5055 */\n tag_172:\n /* \"#utility.yul\":5091:5097 */\n dup2\n /* \"#utility.yul\":5078:5098 */\n calldataload\n /* \"#utility.yul\":5116:5194 */\n tag_174\n /* \"#utility.yul\":5190:5193 */\n dup5\n /* \"#utility.yul\":5182:5188 */\n dup3\n /* \"#utility.yul\":5175:5179 */\n 0x20\n /* \"#utility.yul\":5167:5173 */\n dup7\n /* \"#utility.yul\":5163:5180 */\n add\n /* \"#utility.yul\":5116:5194 */\n tag_96\n jump\t// in\n tag_174:\n /* \"#utility.yul\":5107:5194 */\n swap2\n pop\n /* \"#utility.yul\":4923:5200 */\n pop\n /* \"#utility.yul\":4862:5200 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5206:6003 */\n tag_28:\n /* \"#utility.yul\":5292:5298 */\n 0x00\n /* \"#utility.yul\":5300:5306 */\n dup1\n /* \"#utility.yul\":5308:5314 */\n 0x00\n /* \"#utility.yul\":5357:5359 */\n 0x60\n /* \"#utility.yul\":5345:5354 */\n dup5\n /* \"#utility.yul\":5336:5343 */\n dup7\n /* \"#utility.yul\":5332:5355 */\n sub\n /* \"#utility.yul\":5328:5360 */\n slt\n /* \"#utility.yul\":5325:5444 */\n iszero\n tag_176\n jumpi\n /* \"#utility.yul\":5363:5442 */\n tag_177\n tag_76\n jump\t// in\n tag_177:\n /* \"#utility.yul\":5325:5444 */\n tag_176:\n /* \"#utility.yul\":5483:5484 */\n 0x00\n /* \"#utility.yul\":5508:5561 */\n tag_178\n /* \"#utility.yul\":5553:5560 */\n dup7\n /* \"#utility.yul\":5544:5550 */\n dup3\n /* \"#utility.yul\":5533:5542 */\n dup8\n /* \"#utility.yul\":5529:5551 */\n add\n /* \"#utility.yul\":5508:5561 */\n tag_80\n jump\t// in\n tag_178:\n /* \"#utility.yul\":5498:5561 */\n swap4\n pop\n /* \"#utility.yul\":5454:5571 */\n pop\n /* \"#utility.yul\":5610:5612 */\n 0x20\n /* \"#utility.yul\":5636:5689 */\n tag_179\n /* \"#utility.yul\":5681:5688 */\n dup7\n /* \"#utility.yul\":5672:5678 */\n dup3\n /* \"#utility.yul\":5661:5670 */\n dup8\n /* \"#utility.yul\":5657:5679 */\n add\n /* \"#utility.yul\":5636:5689 */\n tag_80\n jump\t// in\n tag_179:\n /* \"#utility.yul\":5626:5689 */\n swap3\n pop\n /* \"#utility.yul\":5581:5699 */\n pop\n /* \"#utility.yul\":5766:5768 */\n 0x40\n /* \"#utility.yul\":5755:5764 */\n dup5\n /* \"#utility.yul\":5751:5769 */\n add\n /* \"#utility.yul\":5738:5770 */\n calldataload\n /* \"#utility.yul\":5797:5815 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5789:5795 */\n dup2\n /* \"#utility.yul\":5786:5816 */\n gt\n /* \"#utility.yul\":5783:5900 */\n iszero\n tag_180\n jumpi\n /* \"#utility.yul\":5819:5898 */\n tag_181\n tag_77\n jump\t// in\n tag_181:\n /* \"#utility.yul\":5783:5900 */\n tag_180:\n /* \"#utility.yul\":5924:5986 */\n tag_182\n /* \"#utility.yul\":5978:5985 */\n dup7\n /* \"#utility.yul\":5969:5975 */\n dup3\n /* \"#utility.yul\":5958:5967 */\n dup8\n /* \"#utility.yul\":5954:5976 */\n add\n /* \"#utility.yul\":5924:5986 */\n tag_97\n jump\t// in\n tag_182:\n /* \"#utility.yul\":5914:5986 */\n swap2\n pop\n /* \"#utility.yul\":5709:5996 */\n pop\n /* \"#utility.yul\":5206:6003 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":6009:6099 */\n tag_98:\n /* \"#utility.yul\":6043:6050 */\n 0x00\n /* \"#utility.yul\":6086:6091 */\n dup2\n /* \"#utility.yul\":6079:6092 */\n iszero\n /* \"#utility.yul\":6072:6093 */\n iszero\n /* \"#utility.yul\":6061:6093 */\n swap1\n pop\n /* \"#utility.yul\":6009:6099 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6105:6221 */\n tag_99:\n /* \"#utility.yul\":6175:6196 */\n tag_185\n /* \"#utility.yul\":6190:6195 */\n dup2\n /* \"#utility.yul\":6175:6196 */\n tag_98\n jump\t// in\n tag_185:\n /* \"#utility.yul\":6168:6173 */\n dup2\n /* \"#utility.yul\":6165:6197 */\n eq\n /* \"#utility.yul\":6155:6215 */\n tag_186\n jumpi\n /* \"#utility.yul\":6211:6212 */\n 0x00\n /* \"#utility.yul\":6208:6209 */\n dup1\n /* \"#utility.yul\":6201:6213 */\n revert\n /* \"#utility.yul\":6155:6215 */\n tag_186:\n /* \"#utility.yul\":6105:6221 */\n pop\n jump\t// out\n /* \"#utility.yul\":6227:6360 */\n tag_100:\n /* \"#utility.yul\":6270:6275 */\n 0x00\n /* \"#utility.yul\":6308:6314 */\n dup2\n /* \"#utility.yul\":6295:6315 */\n calldataload\n /* \"#utility.yul\":6286:6315 */\n swap1\n pop\n /* \"#utility.yul\":6324:6354 */\n tag_188\n /* \"#utility.yul\":6348:6353 */\n dup2\n /* \"#utility.yul\":6324:6354 */\n tag_99\n jump\t// in\n tag_188:\n /* \"#utility.yul\":6227:6360 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6366:6834 */\n tag_33:\n /* \"#utility.yul\":6431:6437 */\n 0x00\n /* \"#utility.yul\":6439:6445 */\n dup1\n /* \"#utility.yul\":6488:6490 */\n 0x40\n /* \"#utility.yul\":6476:6485 */\n dup4\n /* \"#utility.yul\":6467:6474 */\n dup6\n /* \"#utility.yul\":6463:6486 */\n sub\n /* \"#utility.yul\":6459:6491 */\n slt\n /* \"#utility.yul\":6456:6575 */\n iszero\n tag_190\n jumpi\n /* \"#utility.yul\":6494:6573 */\n tag_191\n tag_76\n jump\t// in\n tag_191:\n /* \"#utility.yul\":6456:6575 */\n tag_190:\n /* \"#utility.yul\":6614:6615 */\n 0x00\n /* \"#utility.yul\":6639:6692 */\n tag_192\n /* \"#utility.yul\":6684:6691 */\n dup6\n /* \"#utility.yul\":6675:6681 */\n dup3\n /* \"#utility.yul\":6664:6673 */\n dup7\n /* \"#utility.yul\":6660:6682 */\n add\n /* \"#utility.yul\":6639:6692 */\n tag_80\n jump\t// in\n tag_192:\n /* \"#utility.yul\":6629:6692 */\n swap3\n pop\n /* \"#utility.yul\":6585:6702 */\n pop\n /* \"#utility.yul\":6741:6743 */\n 0x20\n /* \"#utility.yul\":6767:6817 */\n tag_193\n /* \"#utility.yul\":6809:6816 */\n dup6\n /* \"#utility.yul\":6800:6806 */\n dup3\n /* \"#utility.yul\":6789:6798 */\n dup7\n /* \"#utility.yul\":6785:6807 */\n add\n /* \"#utility.yul\":6767:6817 */\n tag_100\n jump\t// in\n tag_193:\n /* \"#utility.yul\":6757:6817 */\n swap2\n pop\n /* \"#utility.yul\":6712:6827 */\n pop\n /* \"#utility.yul\":6366:6834 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6840:6966 */\n tag_101:\n /* \"#utility.yul\":6877:6884 */\n 0x00\n /* \"#utility.yul\":6917:6959 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":6910:6915 */\n dup3\n /* \"#utility.yul\":6906:6960 */\n and\n /* \"#utility.yul\":6895:6960 */\n swap1\n pop\n /* \"#utility.yul\":6840:6966 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6972:7032 */\n tag_102:\n /* \"#utility.yul\":7000:7003 */\n 0x00\n /* \"#utility.yul\":7021:7026 */\n dup2\n /* \"#utility.yul\":7014:7026 */\n swap1\n pop\n /* \"#utility.yul\":6972:7032 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7038:7180 */\n tag_103:\n /* \"#utility.yul\":7088:7097 */\n 0x00\n /* \"#utility.yul\":7121:7174 */\n tag_197\n /* \"#utility.yul\":7139:7173 */\n tag_198\n /* \"#utility.yul\":7148:7172 */\n tag_199\n /* \"#utility.yul\":7166:7171 */\n dup5\n /* \"#utility.yul\":7148:7172 */\n tag_101\n jump\t// in\n tag_199:\n /* \"#utility.yul\":7139:7173 */\n tag_102\n jump\t// in\n tag_198:\n /* \"#utility.yul\":7121:7174 */\n tag_101\n jump\t// in\n tag_197:\n /* \"#utility.yul\":7108:7174 */\n swap1\n pop\n /* \"#utility.yul\":7038:7180 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7186:7312 */\n tag_104:\n /* \"#utility.yul\":7236:7245 */\n 0x00\n /* \"#utility.yul\":7269:7306 */\n tag_201\n /* \"#utility.yul\":7300:7305 */\n dup3\n /* \"#utility.yul\":7269:7306 */\n tag_103\n jump\t// in\n tag_201:\n /* \"#utility.yul\":7256:7306 */\n swap1\n pop\n /* \"#utility.yul\":7186:7312 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7318:7464 */\n tag_105:\n /* \"#utility.yul\":7388:7397 */\n 0x00\n /* \"#utility.yul\":7421:7458 */\n tag_203\n /* \"#utility.yul\":7452:7457 */\n dup3\n /* \"#utility.yul\":7421:7458 */\n tag_104\n jump\t// in\n tag_203:\n /* \"#utility.yul\":7408:7458 */\n swap1\n pop\n /* \"#utility.yul\":7318:7464 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7470:7641 */\n tag_106:\n /* \"#utility.yul\":7577:7634 */\n tag_205\n /* \"#utility.yul\":7628:7633 */\n dup2\n /* \"#utility.yul\":7577:7634 */\n tag_105\n jump\t// in\n tag_205:\n /* \"#utility.yul\":7572:7575 */\n dup3\n /* \"#utility.yul\":7565:7635 */\n mstore\n /* \"#utility.yul\":7470:7641 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7647:7909 */\n tag_43:\n /* \"#utility.yul\":7760:7764 */\n 0x00\n /* \"#utility.yul\":7798:7800 */\n 0x20\n /* \"#utility.yul\":7787:7796 */\n dup3\n /* \"#utility.yul\":7783:7801 */\n add\n /* \"#utility.yul\":7775:7801 */\n swap1\n pop\n /* \"#utility.yul\":7811:7902 */\n tag_207\n /* \"#utility.yul\":7899:7900 */\n 0x00\n /* \"#utility.yul\":7888:7897 */\n dup4\n /* \"#utility.yul\":7884:7901 */\n add\n /* \"#utility.yul\":7875:7881 */\n dup5\n /* \"#utility.yul\":7811:7902 */\n tag_106\n jump\t// in\n tag_207:\n /* \"#utility.yul\":7647:7909 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7915:8422 */\n tag_50:\n /* \"#utility.yul\":7983:7989 */\n 0x00\n /* \"#utility.yul\":8032:8034 */\n 0x20\n /* \"#utility.yul\":8020:8029 */\n dup3\n /* \"#utility.yul\":8011:8018 */\n dup5\n /* \"#utility.yul\":8007:8030 */\n sub\n /* \"#utility.yul\":8003:8035 */\n slt\n /* \"#utility.yul\":8000:8119 */\n iszero\n tag_209\n jumpi\n /* \"#utility.yul\":8038:8117 */\n tag_210\n tag_76\n jump\t// in\n tag_210:\n /* \"#utility.yul\":8000:8119 */\n tag_209:\n /* \"#utility.yul\":8186:8187 */\n 0x00\n /* \"#utility.yul\":8175:8184 */\n dup3\n /* \"#utility.yul\":8171:8188 */\n add\n /* \"#utility.yul\":8158:8189 */\n calldataload\n /* \"#utility.yul\":8216:8234 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8208:8214 */\n dup2\n /* \"#utility.yul\":8205:8235 */\n gt\n /* \"#utility.yul\":8202:8319 */\n iszero\n tag_211\n jumpi\n /* \"#utility.yul\":8238:8317 */\n tag_212\n tag_77\n jump\t// in\n tag_212:\n /* \"#utility.yul\":8202:8319 */\n tag_211:\n /* \"#utility.yul\":8343:8405 */\n tag_213\n /* \"#utility.yul\":8397:8404 */\n dup5\n /* \"#utility.yul\":8388:8394 */\n dup3\n /* \"#utility.yul\":8377:8386 */\n dup6\n /* \"#utility.yul\":8373:8395 */\n add\n /* \"#utility.yul\":8343:8405 */\n tag_97\n jump\t// in\n tag_213:\n /* \"#utility.yul\":8333:8405 */\n swap2\n pop\n /* \"#utility.yul\":8129:8415 */\n pop\n /* \"#utility.yul\":7915:8422 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8428:8739 */\n tag_107:\n /* \"#utility.yul\":8505:8509 */\n 0x00\n /* \"#utility.yul\":8595:8613 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8587:8593 */\n dup3\n /* \"#utility.yul\":8584:8614 */\n gt\n /* \"#utility.yul\":8581:8637 */\n iszero\n tag_215\n jumpi\n /* \"#utility.yul\":8617:8635 */\n tag_216\n tag_91\n jump\t// in\n tag_216:\n /* \"#utility.yul\":8581:8637 */\n tag_215:\n /* \"#utility.yul\":8667:8671 */\n 0x20\n /* \"#utility.yul\":8659:8665 */\n dup3\n /* \"#utility.yul\":8655:8672 */\n mul\n /* \"#utility.yul\":8647:8672 */\n swap1\n pop\n /* \"#utility.yul\":8727:8731 */\n 0x20\n /* \"#utility.yul\":8721:8725 */\n dup2\n /* \"#utility.yul\":8717:8732 */\n add\n /* \"#utility.yul\":8709:8732 */\n swap1\n pop\n /* \"#utility.yul\":8428:8739 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8745:8862 */\n tag_108:\n /* \"#utility.yul\":8854:8855 */\n 0x00\n /* \"#utility.yul\":8851:8852 */\n dup1\n /* \"#utility.yul\":8844:8856 */\n revert\n /* \"#utility.yul\":8885:9595 */\n tag_109:\n /* \"#utility.yul\":8981:8986 */\n 0x00\n /* \"#utility.yul\":9006:9087 */\n tag_219\n /* \"#utility.yul\":9022:9086 */\n tag_220\n /* \"#utility.yul\":9079:9085 */\n dup5\n /* \"#utility.yul\":9022:9086 */\n tag_107\n jump\t// in\n tag_220:\n /* \"#utility.yul\":9006:9087 */\n tag_93\n jump\t// in\n tag_219:\n /* \"#utility.yul\":8997:9087 */\n swap1\n pop\n /* \"#utility.yul\":9107:9112 */\n dup1\n /* \"#utility.yul\":9136:9142 */\n dup4\n /* \"#utility.yul\":9129:9134 */\n dup3\n /* \"#utility.yul\":9122:9143 */\n mstore\n /* \"#utility.yul\":9170:9174 */\n 0x20\n /* \"#utility.yul\":9163:9168 */\n dup3\n /* \"#utility.yul\":9159:9175 */\n add\n /* \"#utility.yul\":9152:9175 */\n swap1\n pop\n /* \"#utility.yul\":9223:9227 */\n 0x20\n /* \"#utility.yul\":9215:9221 */\n dup5\n /* \"#utility.yul\":9211:9228 */\n mul\n /* \"#utility.yul\":9203:9209 */\n dup4\n /* \"#utility.yul\":9199:9229 */\n add\n /* \"#utility.yul\":9252:9255 */\n dup6\n /* \"#utility.yul\":9244:9250 */\n dup2\n /* \"#utility.yul\":9241:9256 */\n gt\n /* \"#utility.yul\":9238:9360 */\n iszero\n tag_221\n jumpi\n /* \"#utility.yul\":9271:9350 */\n tag_222\n tag_108\n jump\t// in\n tag_222:\n /* \"#utility.yul\":9238:9360 */\n tag_221:\n /* \"#utility.yul\":9386:9392 */\n dup4\n /* \"#utility.yul\":9369:9589 */\n tag_223:\n /* \"#utility.yul\":9403:9409 */\n dup2\n /* \"#utility.yul\":9398:9401 */\n dup2\n /* \"#utility.yul\":9395:9410 */\n lt\n /* \"#utility.yul\":9369:9589 */\n iszero\n tag_225\n jumpi\n /* \"#utility.yul\":9478:9481 */\n dup1\n /* \"#utility.yul\":9507:9544 */\n tag_226\n /* \"#utility.yul\":9540:9543 */\n dup9\n /* \"#utility.yul\":9528:9538 */\n dup3\n /* \"#utility.yul\":9507:9544 */\n tag_80\n jump\t// in\n tag_226:\n /* \"#utility.yul\":9502:9505 */\n dup5\n /* \"#utility.yul\":9495:9545 */\n mstore\n /* \"#utility.yul\":9574:9578 */\n 0x20\n /* \"#utility.yul\":9569:9572 */\n dup5\n /* \"#utility.yul\":9565:9579 */\n add\n /* \"#utility.yul\":9558:9579 */\n swap4\n pop\n /* \"#utility.yul\":9445:9589 */\n pop\n /* \"#utility.yul\":9429:9433 */\n 0x20\n /* \"#utility.yul\":9424:9427 */\n dup2\n /* \"#utility.yul\":9420:9434 */\n add\n /* \"#utility.yul\":9413:9434 */\n swap1\n pop\n /* \"#utility.yul\":9369:9589 */\n jump(tag_223)\n tag_225:\n /* \"#utility.yul\":9373:9394 */\n pop\n /* \"#utility.yul\":8987:9595 */\n pop\n pop\n /* \"#utility.yul\":8885:9595 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9618:9988 */\n tag_110:\n /* \"#utility.yul\":9689:9694 */\n 0x00\n /* \"#utility.yul\":9738:9741 */\n dup3\n /* \"#utility.yul\":9731:9735 */\n 0x1f\n /* \"#utility.yul\":9723:9729 */\n dup4\n /* \"#utility.yul\":9719:9736 */\n add\n /* \"#utility.yul\":9715:9742 */\n slt\n /* \"#utility.yul\":9705:9827 */\n tag_228\n jumpi\n /* \"#utility.yul\":9746:9825 */\n tag_229\n tag_89\n jump\t// in\n tag_229:\n /* \"#utility.yul\":9705:9827 */\n tag_228:\n /* \"#utility.yul\":9863:9869 */\n dup2\n /* \"#utility.yul\":9850:9870 */\n calldataload\n /* \"#utility.yul\":9888:9982 */\n tag_230\n /* \"#utility.yul\":9978:9981 */\n dup5\n /* \"#utility.yul\":9970:9976 */\n dup3\n /* \"#utility.yul\":9963:9967 */\n 0x20\n /* \"#utility.yul\":9955:9961 */\n dup7\n /* \"#utility.yul\":9951:9968 */\n add\n /* \"#utility.yul\":9888:9982 */\n tag_109\n jump\t// in\n tag_230:\n /* \"#utility.yul\":9879:9982 */\n swap2\n pop\n /* \"#utility.yul\":9695:9988 */\n pop\n /* \"#utility.yul\":9618:9988 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9994:10533 */\n tag_55:\n /* \"#utility.yul\":10078:10084 */\n 0x00\n /* \"#utility.yul\":10127:10129 */\n 0x20\n /* \"#utility.yul\":10115:10124 */\n dup3\n /* \"#utility.yul\":10106:10113 */\n dup5\n /* \"#utility.yul\":10102:10125 */\n sub\n /* \"#utility.yul\":10098:10130 */\n slt\n /* \"#utility.yul\":10095:10214 */\n iszero\n tag_232\n jumpi\n /* \"#utility.yul\":10133:10212 */\n tag_233\n tag_76\n jump\t// in\n tag_233:\n /* \"#utility.yul\":10095:10214 */\n tag_232:\n /* \"#utility.yul\":10281:10282 */\n 0x00\n /* \"#utility.yul\":10270:10279 */\n dup3\n /* \"#utility.yul\":10266:10283 */\n add\n /* \"#utility.yul\":10253:10284 */\n calldataload\n /* \"#utility.yul\":10311:10329 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10303:10309 */\n dup2\n /* \"#utility.yul\":10300:10330 */\n gt\n /* \"#utility.yul\":10297:10414 */\n iszero\n tag_234\n jumpi\n /* \"#utility.yul\":10333:10412 */\n tag_235\n tag_77\n jump\t// in\n tag_235:\n /* \"#utility.yul\":10297:10414 */\n tag_234:\n /* \"#utility.yul\":10438:10516 */\n tag_236\n /* \"#utility.yul\":10508:10515 */\n dup5\n /* \"#utility.yul\":10499:10505 */\n dup3\n /* \"#utility.yul\":10488:10497 */\n dup6\n /* \"#utility.yul\":10484:10506 */\n add\n /* \"#utility.yul\":10438:10516 */\n tag_110\n jump\t// in\n tag_236:\n /* \"#utility.yul\":10428:10516 */\n swap2\n pop\n /* \"#utility.yul\":10224:10526 */\n pop\n /* \"#utility.yul\":9994:10533 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220afd7f50e25d8592680ae409611a2aa97ef89feab274d066b5b35acbd4699d3e564736f6c634300080b0033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "60806040526108056000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50610b16806100626000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806361bdd2e01161007157806361bdd2e01461019e5780637a8f48c2146101bc5780639801b147146101ec578063a7cb124b1461021c578063add6b3bf1461024c578063bc4b21871461027c576100a9565b80632cd61217146100ae5780632d220331146100de578063316273761461010e5780633a0d803a1461013e57806349def3261461016e575b600080fd5b6100c860048036038101906100c3919061057f565b61029a565b6040516100d59190610645565b60405180910390f35b6100f860048036038101906100f391906106a3565b6102d9565b6040516101059190610645565b60405180910390f35b61012860048036038101906101239190610805565b610318565b6040516101359190610645565b60405180910390f35b610158600480360381019061015391906108ac565b610359565b6040516101659190610645565b60405180910390f35b6101886004803603810190610183919061057f565b610399565b6040516101959190610645565b60405180910390f35b6101a66103d8565b6040516101b3919061096b565b60405180910390f35b6101d660048036038101906101d1919061057f565b6103fc565b6040516101e39190610645565b60405180910390f35b61020660048036038101906102019190610986565b61043b565b6040516102139190610645565b60405180910390f35b61023660048036038101906102319190610a97565b61047a565b6040516102439190610645565b60405180910390f35b6102666004803603810190610261919061057f565b6104b9565b6040516102739190610645565b60405180910390f35b6102846104f8565b6040516102919190610645565b60405180910390f35b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090509392505050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905092915050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b6000602082840312156105955761059461053f565b5b60006105a38482850161056a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105e65780820151818401526020810190506105cb565b838111156105f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000610617826105ac565b61062181856105b7565b93506106318185602086016105c8565b61063a816105fb565b840191505092915050565b6000602082019050818103600083015261065f818461060c565b905092915050565b600063ffffffff82169050919050565b61068081610667565b811461068b57600080fd5b50565b60008135905061069d81610677565b92915050565b6000602082840312156106b9576106b861053f565b5b60006106c78482850161068e565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610712826105fb565b810181811067ffffffffffffffff82111715610731576107306106da565b5b80604052505050565b6000610744610535565b90506107508282610709565b919050565b600067ffffffffffffffff8211156107705761076f6106da565b5b610779826105fb565b9050602081019050919050565b82818337600083830152505050565b60006107a86107a384610755565b61073a565b9050828152602081018484840111156107c4576107c36106d5565b5b6107cf848285610786565b509392505050565b600082601f8301126107ec576107eb6106d0565b5b81356107fc848260208601610795565b91505092915050565b60008060006060848603121561081e5761081d61053f565b5b600061082c8682870161056a565b935050602061083d8682870161056a565b925050604084013567ffffffffffffffff81111561085e5761085d610544565b5b61086a868287016107d7565b9150509250925092565b60008115159050919050565b61088981610874565b811461089457600080fd5b50565b6000813590506108a681610880565b92915050565b600080604083850312156108c3576108c261053f565b5b60006108d18582860161056a565b92505060206108e285828601610897565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061093161092c610927846108ec565b61090c565b6108ec565b9050919050565b600061094382610916565b9050919050565b600061095582610938565b9050919050565b6109658161094a565b82525050565b6000602082019050610980600083018461095c565b92915050565b60006020828403121561099c5761099b61053f565b5b600082013567ffffffffffffffff8111156109ba576109b9610544565b5b6109c6848285016107d7565b91505092915050565b600067ffffffffffffffff8211156109ea576109e96106da565b5b602082029050602081019050919050565b600080fd5b6000610a13610a0e846109cf565b61073a565b90508083825260208201905060208402830185811115610a3657610a356109fb565b5b835b81811015610a5f5780610a4b888261056a565b845260208401935050602081019050610a38565b5050509392505050565b600082601f830112610a7e57610a7d6106d0565b5b8135610a8e848260208601610a00565b91505092915050565b600060208284031215610aad57610aac61053f565b5b600082013567ffffffffffffffff811115610acb57610aca610544565b5b610ad784828501610a69565b9150509291505056fea26469706673582212206f7085f9fce5641d8db25d8b9b823efdd7a104ea3e6ff92717d013741fc0ce7864736f6c63430008090033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x805 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB16 DUP1 PUSH2 0x62 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x61BDD2E0 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x61BDD2E0 EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x7A8F48C2 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x9801B147 EQ PUSH2 0x1EC JUMPI DUP1 PUSH4 0xA7CB124B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xADD6B3BF EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xBC4B2187 EQ PUSH2 0x27C JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x2CD61217 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x2D220331 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x31627376 EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x3A0D803A EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x49DEF326 EQ PUSH2 0x16E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x29A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x105 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x128 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x123 SWAP2 SWAP1 PUSH2 0x805 JUMP JUMPDEST PUSH2 0x318 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x158 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x153 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x359 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x165 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x188 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x183 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A6 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B3 SWAP2 SWAP1 PUSH2 0x96B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1D1 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E3 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x206 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x201 SWAP2 SWAP1 PUSH2 0x986 JUMP JUMPDEST PUSH2 0x43B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x213 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x236 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x231 SWAP2 SWAP1 PUSH2 0xA97 JUMP JUMPDEST PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x243 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x266 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x4B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x284 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x291 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x55C DUP2 PUSH2 0x549 JUMP JUMPDEST DUP2 EQ PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x579 DUP2 PUSH2 0x553 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x595 JUMPI PUSH2 0x594 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x5A3 DUP5 DUP3 DUP6 ADD PUSH2 0x56A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5E6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5CB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5F5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x617 DUP3 PUSH2 0x5AC JUMP JUMPDEST PUSH2 0x621 DUP2 DUP6 PUSH2 0x5B7 JUMP JUMPDEST SWAP4 POP PUSH2 0x631 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x63A DUP2 PUSH2 0x5FB JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x65F DUP2 DUP5 PUSH2 0x60C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x680 DUP2 PUSH2 0x667 JUMP JUMPDEST DUP2 EQ PUSH2 0x68B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x69D DUP2 PUSH2 0x677 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B8 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6C7 DUP5 DUP3 DUP6 ADD PUSH2 0x68E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x712 DUP3 PUSH2 0x5FB JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x731 JUMPI PUSH2 0x730 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x744 PUSH2 0x535 JUMP JUMPDEST SWAP1 POP PUSH2 0x750 DUP3 DUP3 PUSH2 0x709 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x770 JUMPI PUSH2 0x76F PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH2 0x779 DUP3 PUSH2 0x5FB JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A8 PUSH2 0x7A3 DUP5 PUSH2 0x755 JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x7C4 JUMPI PUSH2 0x7C3 PUSH2 0x6D5 JUMP JUMPDEST JUMPDEST PUSH2 0x7CF DUP5 DUP3 DUP6 PUSH2 0x786 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7EC JUMPI PUSH2 0x7EB PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7FC DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x795 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x81E JUMPI PUSH2 0x81D PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x82C DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x83D DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x85E JUMPI PUSH2 0x85D PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x86A DUP7 DUP3 DUP8 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x889 DUP2 PUSH2 0x874 JUMP JUMPDEST DUP2 EQ PUSH2 0x894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x8A6 DUP2 PUSH2 0x880 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C3 JUMPI PUSH2 0x8C2 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x8D1 DUP6 DUP3 DUP7 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x8E2 DUP6 DUP3 DUP7 ADD PUSH2 0x897 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x931 PUSH2 0x92C PUSH2 0x927 DUP5 PUSH2 0x8EC JUMP JUMPDEST PUSH2 0x90C JUMP JUMPDEST PUSH2 0x8EC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x943 DUP3 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x955 DUP3 PUSH2 0x938 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x965 DUP2 PUSH2 0x94A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x980 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x95C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x99C JUMPI PUSH2 0x99B PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9BA JUMPI PUSH2 0x9B9 PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x9C6 DUP5 DUP3 DUP6 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x9EA JUMPI PUSH2 0x9E9 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xA13 PUSH2 0xA0E DUP5 PUSH2 0x9CF JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA36 JUMPI PUSH2 0xA35 PUSH2 0x9FB JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA5F JUMPI DUP1 PUSH2 0xA4B DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xA38 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7E JUMPI PUSH2 0xA7D PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA8E DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xA00 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAD JUMPI PUSH2 0xAAC PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xACB JUMPI PUSH2 0xACA PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0xAD7 DUP5 DUP3 DUP6 ADD PUSH2 0xA69 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x7085F9FCE5641D8DB25D8B9B823EFDD7 LOG1 DIV 0xEA RETURNDATACOPY PUSH16 0xF92717D013741FC0CE7864736F6C6343 STOP ADDMOD MULMOD STOP CALLER ", - "sourceMap": "4022:1971:0:-:0;;;4198:42;4150:91;;;;;;;;;;;;;;;;;;;;4022:1971;;;;;;;;;;;;;;;;" + "object": "60806040526108056000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50610b16806100626000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806361bdd2e01161007157806361bdd2e01461019e5780637a8f48c2146101bc5780639801b147146101ec578063a7cb124b1461021c578063add6b3bf1461024c578063bc4b21871461027c576100a9565b80632cd61217146100ae5780632d220331146100de578063316273761461010e5780633a0d803a1461013e57806349def3261461016e575b600080fd5b6100c860048036038101906100c3919061057f565b61029a565b6040516100d59190610645565b60405180910390f35b6100f860048036038101906100f391906106a3565b6102d9565b6040516101059190610645565b60405180910390f35b61012860048036038101906101239190610805565b610318565b6040516101359190610645565b60405180910390f35b610158600480360381019061015391906108ac565b610359565b6040516101659190610645565b60405180910390f35b6101886004803603810190610183919061057f565b610399565b6040516101959190610645565b60405180910390f35b6101a66103d8565b6040516101b3919061096b565b60405180910390f35b6101d660048036038101906101d1919061057f565b6103fc565b6040516101e39190610645565b60405180910390f35b61020660048036038101906102019190610986565b61043b565b6040516102139190610645565b60405180910390f35b61023660048036038101906102319190610a97565b61047a565b6040516102439190610645565b60405180910390f35b6102666004803603810190610261919061057f565b6104b9565b6040516102739190610645565b60405180910390f35b6102846104f8565b6040516102919190610645565b60405180910390f35b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090509392505050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905092915050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b6000602082840312156105955761059461053f565b5b60006105a38482850161056a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105e65780820151818401526020810190506105cb565b838111156105f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000610617826105ac565b61062181856105b7565b93506106318185602086016105c8565b61063a816105fb565b840191505092915050565b6000602082019050818103600083015261065f818461060c565b905092915050565b600063ffffffff82169050919050565b61068081610667565b811461068b57600080fd5b50565b60008135905061069d81610677565b92915050565b6000602082840312156106b9576106b861053f565b5b60006106c78482850161068e565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610712826105fb565b810181811067ffffffffffffffff82111715610731576107306106da565b5b80604052505050565b6000610744610535565b90506107508282610709565b919050565b600067ffffffffffffffff8211156107705761076f6106da565b5b610779826105fb565b9050602081019050919050565b82818337600083830152505050565b60006107a86107a384610755565b61073a565b9050828152602081018484840111156107c4576107c36106d5565b5b6107cf848285610786565b509392505050565b600082601f8301126107ec576107eb6106d0565b5b81356107fc848260208601610795565b91505092915050565b60008060006060848603121561081e5761081d61053f565b5b600061082c8682870161056a565b935050602061083d8682870161056a565b925050604084013567ffffffffffffffff81111561085e5761085d610544565b5b61086a868287016107d7565b9150509250925092565b60008115159050919050565b61088981610874565b811461089457600080fd5b50565b6000813590506108a681610880565b92915050565b600080604083850312156108c3576108c261053f565b5b60006108d18582860161056a565b92505060206108e285828601610897565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061093161092c610927846108ec565b61090c565b6108ec565b9050919050565b600061094382610916565b9050919050565b600061095582610938565b9050919050565b6109658161094a565b82525050565b6000602082019050610980600083018461095c565b92915050565b60006020828403121561099c5761099b61053f565b5b600082013567ffffffffffffffff8111156109ba576109b9610544565b5b6109c6848285016107d7565b91505092915050565b600067ffffffffffffffff8211156109ea576109e96106da565b5b602082029050602081019050919050565b600080fd5b6000610a13610a0e846109cf565b61073a565b90508083825260208201905060208402830185811115610a3657610a356109fb565b5b835b81811015610a5f5780610a4b888261056a565b845260208401935050602081019050610a38565b5050509392505050565b600082601f830112610a7e57610a7d6106d0565b5b8135610a8e848260208601610a00565b91505092915050565b600060208284031215610aad57610aac61053f565b5b600082013567ffffffffffffffff811115610acb57610aca610544565b5b610ad784828501610a69565b9150509291505056fea2646970667358221220afd7f50e25d8592680ae409611a2aa97ef89feab274d066b5b35acbd4699d3e564736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x805 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xB16 DUP1 PUSH2 0x62 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x61BDD2E0 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x61BDD2E0 EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x7A8F48C2 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x9801B147 EQ PUSH2 0x1EC JUMPI DUP1 PUSH4 0xA7CB124B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xADD6B3BF EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xBC4B2187 EQ PUSH2 0x27C JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x2CD61217 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x2D220331 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x31627376 EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x3A0D803A EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x49DEF326 EQ PUSH2 0x16E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x29A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x105 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x128 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x123 SWAP2 SWAP1 PUSH2 0x805 JUMP JUMPDEST PUSH2 0x318 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x158 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x153 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x359 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x165 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x188 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x183 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A6 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B3 SWAP2 SWAP1 PUSH2 0x96B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1D1 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E3 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x206 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x201 SWAP2 SWAP1 PUSH2 0x986 JUMP JUMPDEST PUSH2 0x43B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x213 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x236 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x231 SWAP2 SWAP1 PUSH2 0xA97 JUMP JUMPDEST PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x243 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x266 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x4B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x284 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x291 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x55C DUP2 PUSH2 0x549 JUMP JUMPDEST DUP2 EQ PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x579 DUP2 PUSH2 0x553 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x595 JUMPI PUSH2 0x594 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x5A3 DUP5 DUP3 DUP6 ADD PUSH2 0x56A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5E6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5CB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5F5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x617 DUP3 PUSH2 0x5AC JUMP JUMPDEST PUSH2 0x621 DUP2 DUP6 PUSH2 0x5B7 JUMP JUMPDEST SWAP4 POP PUSH2 0x631 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x63A DUP2 PUSH2 0x5FB JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x65F DUP2 DUP5 PUSH2 0x60C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x680 DUP2 PUSH2 0x667 JUMP JUMPDEST DUP2 EQ PUSH2 0x68B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x69D DUP2 PUSH2 0x677 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B8 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6C7 DUP5 DUP3 DUP6 ADD PUSH2 0x68E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x712 DUP3 PUSH2 0x5FB JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x731 JUMPI PUSH2 0x730 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x744 PUSH2 0x535 JUMP JUMPDEST SWAP1 POP PUSH2 0x750 DUP3 DUP3 PUSH2 0x709 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x770 JUMPI PUSH2 0x76F PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH2 0x779 DUP3 PUSH2 0x5FB JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A8 PUSH2 0x7A3 DUP5 PUSH2 0x755 JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x7C4 JUMPI PUSH2 0x7C3 PUSH2 0x6D5 JUMP JUMPDEST JUMPDEST PUSH2 0x7CF DUP5 DUP3 DUP6 PUSH2 0x786 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7EC JUMPI PUSH2 0x7EB PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7FC DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x795 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x81E JUMPI PUSH2 0x81D PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x82C DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x83D DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x85E JUMPI PUSH2 0x85D PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x86A DUP7 DUP3 DUP8 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x889 DUP2 PUSH2 0x874 JUMP JUMPDEST DUP2 EQ PUSH2 0x894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x8A6 DUP2 PUSH2 0x880 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C3 JUMPI PUSH2 0x8C2 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x8D1 DUP6 DUP3 DUP7 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x8E2 DUP6 DUP3 DUP7 ADD PUSH2 0x897 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x931 PUSH2 0x92C PUSH2 0x927 DUP5 PUSH2 0x8EC JUMP JUMPDEST PUSH2 0x90C JUMP JUMPDEST PUSH2 0x8EC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x943 DUP3 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x955 DUP3 PUSH2 0x938 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x965 DUP2 PUSH2 0x94A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x980 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x95C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x99C JUMPI PUSH2 0x99B PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9BA JUMPI PUSH2 0x9B9 PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x9C6 DUP5 DUP3 DUP6 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x9EA JUMPI PUSH2 0x9E9 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xA13 PUSH2 0xA0E DUP5 PUSH2 0x9CF JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA36 JUMPI PUSH2 0xA35 PUSH2 0x9FB JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA5F JUMPI DUP1 PUSH2 0xA4B DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xA38 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7E JUMPI PUSH2 0xA7D PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA8E DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xA00 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAD JUMPI PUSH2 0xAAC PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xACB JUMPI PUSH2 0xACA PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0xAD7 DUP5 DUP3 DUP6 ADD PUSH2 0xA69 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0xD7 CREATE2 0xE 0x25 0xD8 MSIZE 0x26 DUP1 0xAE BLOCKHASH SWAP7 GT LOG2 0xAA SWAP8 0xEF DUP10 INVALID 0xAB 0x27 0x4D MOD PUSH12 0x5B35ACBD4699D3E564736F6C PUSH4 0x4300080B STOP CALLER ", + "sourceMap": "223:1979:0:-:0;;;399:42;343:99;;;;;;;;;;;;;;;;;;;;223:1979;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "functionDebugData": { - "@encode_bond_102": { + "@encode_bond_26": { "entryPoint": 792, - "id": 102, + "id": 26, "parameterSlots": 3, "returnSlots": 1 }, - "@encode_bond_extra_113": { + "@encode_bond_extra_37": { "entryPoint": 921, - "id": 113, + "id": 37, "parameterSlots": 1, "returnSlots": 1 }, - "@encode_chill_169": { + "@encode_chill_93": { "entryPoint": 1272, - "id": 169, + "id": 93, "parameterSlots": 0, "returnSlots": 1 }, - "@encode_nominate_160": { + "@encode_nominate_84": { "entryPoint": 1146, - "id": 160, + "id": 84, "parameterSlots": 1, "returnSlots": 1 }, - "@encode_rebond_202": { + "@encode_rebond_126": { "entryPoint": 1209, - "id": 202, + "id": 126, "parameterSlots": 1, "returnSlots": 1 }, - "@encode_set_controller_191": { + "@encode_set_controller_115": { "entryPoint": 1020, - "id": 191, + "id": 115, "parameterSlots": 1, "returnSlots": 1 }, - "@encode_set_payee_180": { + "@encode_set_payee_104": { "entryPoint": 1083, - "id": 180, + "id": 104, "parameterSlots": 1, "returnSlots": 1 }, - "@encode_unbond_124": { + "@encode_unbond_48": { "entryPoint": 666, - "id": 124, + "id": 48, "parameterSlots": 1, "returnSlots": 1 }, - "@encode_validate_148": { + "@encode_validate_72": { "entryPoint": 857, - "id": 148, + "id": 72, "parameterSlots": 2, "returnSlots": 1 }, - "@encode_withdraw_unbonded_135": { + "@encode_withdraw_unbonded_59": { "entryPoint": 729, - "id": 135, + "id": 59, "parameterSlots": 1, "returnSlots": 1 }, - "@relayencoder_87": { + "@relayencoder_11": { "entryPoint": 984, - "id": 87, + "id": 11, "parameterSlots": 0, "returnSlots": 0 }, @@ -306,7 +306,7 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_contract$_RelayEncoder_$78_to_t_address_fromStack": { + "abi_encode_t_contract$_RelayEncoder_$206_to_t_address_fromStack": { "entryPoint": 2396, "id": null, "parameterSlots": 2, @@ -318,7 +318,7 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_tuple_t_contract$_RelayEncoder_$78__to_t_address__fromStack_reversed": { + "abi_encode_tuple_t_contract$_RelayEncoder_$206__to_t_address__fromStack_reversed": { "entryPoint": 2411, "id": null, "parameterSlots": 2, @@ -384,7 +384,7 @@ "parameterSlots": 1, "returnSlots": 1 }, - "convert_t_contract$_RelayEncoder_$78_to_t_address": { + "convert_t_contract$_RelayEncoder_$206_to_t_address": { "entryPoint": 2378, "id": null, "parameterSlots": 1, @@ -491,22 +491,22 @@ { "ast": { "nodeType": "YulBlock", - "src": "0:10531:1", + "src": "0:10536:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "47:35:1", + "src": "47:35:2", "statements": [ { "nodeType": "YulAssignment", - "src": "57:19:1", + "src": "57:19:2", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "73:2:1", + "src": "73:2:2", "type": "", "value": "64" } @@ -514,16 +514,16 @@ "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "67:5:1" + "src": "67:5:2" }, "nodeType": "YulFunctionCall", - "src": "67:9:1" + "src": "67:9:2" }, "variableNames": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "57:6:1" + "src": "57:6:2" } ] } @@ -535,16 +535,16 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "40:6:1", + "src": "40:6:2", "type": "" } ], - "src": "7:75:1" + "src": "7:75:2" }, { "body": { "nodeType": "YulBlock", - "src": "177:28:1", + "src": "177:28:2", "statements": [ { "expression": { @@ -552,14 +552,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "194:1:1", + "src": "194:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "197:1:1", + "src": "197:1:2", "type": "", "value": "0" } @@ -567,24 +567,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "187:6:1" + "src": "187:6:2" }, "nodeType": "YulFunctionCall", - "src": "187:12:1" + "src": "187:12:2" }, "nodeType": "YulExpressionStatement", - "src": "187:12:1" + "src": "187:12:2" } ] }, "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulFunctionDefinition", - "src": "88:117:1" + "src": "88:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "300:28:1", + "src": "300:28:2", "statements": [ { "expression": { @@ -592,14 +592,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "317:1:1", + "src": "317:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "320:1:1", + "src": "320:1:2", "type": "", "value": "0" } @@ -607,38 +607,38 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "310:6:1" + "src": "310:6:2" }, "nodeType": "YulFunctionCall", - "src": "310:12:1" + "src": "310:12:2" }, "nodeType": "YulExpressionStatement", - "src": "310:12:1" + "src": "310:12:2" } ] }, "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulFunctionDefinition", - "src": "211:117:1" + "src": "211:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "379:32:1", + "src": "379:32:2", "statements": [ { "nodeType": "YulAssignment", - "src": "389:16:1", + "src": "389:16:2", "value": { "name": "value", "nodeType": "YulIdentifier", - "src": "400:5:1" + "src": "400:5:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "389:7:1" + "src": "389:7:2" } ] } @@ -650,7 +650,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "361:5:1", + "src": "361:5:2", "type": "" } ], @@ -658,21 +658,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "371:7:1", + "src": "371:7:2", "type": "" } ], - "src": "334:77:1" + "src": "334:77:2" }, { "body": { "nodeType": "YulBlock", - "src": "460:79:1", + "src": "460:79:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "517:16:1", + "src": "517:16:2", "statements": [ { "expression": { @@ -680,14 +680,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "526:1:1", + "src": "526:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "529:1:1", + "src": "529:1:2", "type": "", "value": "0" } @@ -695,13 +695,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "519:6:1" + "src": "519:6:2" }, "nodeType": "YulFunctionCall", - "src": "519:12:1" + "src": "519:12:2" }, "nodeType": "YulExpressionStatement", - "src": "519:12:1" + "src": "519:12:2" } ] }, @@ -712,44 +712,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "483:5:1" + "src": "483:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "508:5:1" + "src": "508:5:2" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "490:17:1" + "src": "490:17:2" }, "nodeType": "YulFunctionCall", - "src": "490:24:1" + "src": "490:24:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "480:2:1" + "src": "480:2:2" }, "nodeType": "YulFunctionCall", - "src": "480:35:1" + "src": "480:35:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "473:6:1" + "src": "473:6:2" }, "nodeType": "YulFunctionCall", - "src": "473:43:1" + "src": "473:43:2" }, "nodeType": "YulIf", - "src": "470:63:1" + "src": "470:63:2" } ] }, @@ -759,41 +759,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "453:5:1", + "src": "453:5:2", "type": "" } ], - "src": "417:122:1" + "src": "417:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "597:87:1", + "src": "597:87:2", "statements": [ { "nodeType": "YulAssignment", - "src": "607:29:1", + "src": "607:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "629:6:1" + "src": "629:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "616:12:1" + "src": "616:12:2" }, "nodeType": "YulFunctionCall", - "src": "616:20:1" + "src": "616:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "607:5:1" + "src": "607:5:2" } ] }, @@ -803,19 +803,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "672:5:1" + "src": "672:5:2" } ], "functionName": { "name": "validator_revert_t_uint256", "nodeType": "YulIdentifier", - "src": "645:26:1" + "src": "645:26:2" }, "nodeType": "YulFunctionCall", - "src": "645:33:1" + "src": "645:33:2" }, "nodeType": "YulExpressionStatement", - "src": "645:33:1" + "src": "645:33:2" } ] }, @@ -825,13 +825,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "575:6:1", + "src": "575:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "583:3:1", + "src": "583:3:2", "type": "" } ], @@ -839,21 +839,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "591:5:1", + "src": "591:5:2", "type": "" } ], - "src": "545:139:1" + "src": "545:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "756:263:1", + "src": "756:263:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "802:83:1", + "src": "802:83:2", "statements": [ { "expression": { @@ -861,13 +861,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "804:77:1" + "src": "804:77:2" }, "nodeType": "YulFunctionCall", - "src": "804:79:1" + "src": "804:79:2" }, "nodeType": "YulExpressionStatement", - "src": "804:79:1" + "src": "804:79:2" } ] }, @@ -878,26 +878,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "777:7:1" + "src": "777:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "786:9:1" + "src": "786:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "773:3:1" + "src": "773:3:2" }, "nodeType": "YulFunctionCall", - "src": "773:23:1" + "src": "773:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "798:2:1", + "src": "798:2:2", "type": "", "value": "32" } @@ -905,25 +905,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "769:3:1" + "src": "769:3:2" }, "nodeType": "YulFunctionCall", - "src": "769:32:1" + "src": "769:32:2" }, "nodeType": "YulIf", - "src": "766:119:1" + "src": "766:119:2" }, { "nodeType": "YulBlock", - "src": "895:117:1", + "src": "895:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "910:15:1", + "src": "910:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "924:1:1", + "src": "924:1:2", "type": "", "value": "0" }, @@ -931,14 +931,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "914:6:1", + "src": "914:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "939:63:1", + "src": "939:63:2", "value": { "arguments": [ { @@ -946,41 +946,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "974:9:1" + "src": "974:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "985:6:1" + "src": "985:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "970:3:1" + "src": "970:3:2" }, "nodeType": "YulFunctionCall", - "src": "970:22:1" + "src": "970:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "994:7:1" + "src": "994:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "949:20:1" + "src": "949:20:2" }, "nodeType": "YulFunctionCall", - "src": "949:53:1" + "src": "949:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "939:6:1" + "src": "939:6:2" } ] } @@ -994,13 +994,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "726:9:1", + "src": "726:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "737:7:1", + "src": "737:7:2", "type": "" } ], @@ -1008,41 +1008,41 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "749:6:1", + "src": "749:6:2", "type": "" } ], - "src": "690:329:1" + "src": "690:329:2" }, { "body": { "nodeType": "YulBlock", - "src": "1083:40:1", + "src": "1083:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1094:22:1", + "src": "1094:22:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1110:5:1" + "src": "1110:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "1104:5:1" + "src": "1104:5:2" }, "nodeType": "YulFunctionCall", - "src": "1104:12:1" + "src": "1104:12:2" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "1094:6:1" + "src": "1094:6:2" } ] } @@ -1054,7 +1054,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1066:5:1", + "src": "1066:5:2", "type": "" } ], @@ -1062,16 +1062,16 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "1076:6:1", + "src": "1076:6:2", "type": "" } ], - "src": "1025:98:1" + "src": "1025:98:2" }, { "body": { "nodeType": "YulBlock", - "src": "1224:73:1", + "src": "1224:73:2", "statements": [ { "expression": { @@ -1079,39 +1079,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "1241:3:1" + "src": "1241:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "1246:6:1" + "src": "1246:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "1234:6:1" + "src": "1234:6:2" }, "nodeType": "YulFunctionCall", - "src": "1234:19:1" + "src": "1234:19:2" }, "nodeType": "YulExpressionStatement", - "src": "1234:19:1" + "src": "1234:19:2" }, { "nodeType": "YulAssignment", - "src": "1262:29:1", + "src": "1262:29:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "1281:3:1" + "src": "1281:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1286:4:1", + "src": "1286:4:2", "type": "", "value": "0x20" } @@ -1119,16 +1119,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1277:3:1" + "src": "1277:3:2" }, "nodeType": "YulFunctionCall", - "src": "1277:14:1" + "src": "1277:14:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "1262:11:1" + "src": "1262:11:2" } ] } @@ -1140,13 +1140,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "1196:3:1", + "src": "1196:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "1201:6:1", + "src": "1201:6:2", "type": "" } ], @@ -1154,24 +1154,24 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "1212:11:1", + "src": "1212:11:2", "type": "" } ], - "src": "1129:168:1" + "src": "1129:168:2" }, { "body": { "nodeType": "YulBlock", - "src": "1352:258:1", + "src": "1352:258:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "1362:10:1", + "src": "1362:10:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "1371:1:1", + "src": "1371:1:2", "type": "", "value": "0" }, @@ -1179,7 +1179,7 @@ { "name": "i", "nodeType": "YulTypedName", - "src": "1366:1:1", + "src": "1366:1:2", "type": "" } ] @@ -1187,7 +1187,7 @@ { "body": { "nodeType": "YulBlock", - "src": "1431:63:1", + "src": "1431:63:2", "statements": [ { "expression": { @@ -1197,21 +1197,21 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "1456:3:1" + "src": "1456:3:2" }, { "name": "i", "nodeType": "YulIdentifier", - "src": "1461:1:1" + "src": "1461:1:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1452:3:1" + "src": "1452:3:2" }, "nodeType": "YulFunctionCall", - "src": "1452:11:1" + "src": "1452:11:2" }, { "arguments": [ @@ -1220,42 +1220,42 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "1475:3:1" + "src": "1475:3:2" }, { "name": "i", "nodeType": "YulIdentifier", - "src": "1480:1:1" + "src": "1480:1:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1471:3:1" + "src": "1471:3:2" }, "nodeType": "YulFunctionCall", - "src": "1471:11:1" + "src": "1471:11:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "1465:5:1" + "src": "1465:5:2" }, "nodeType": "YulFunctionCall", - "src": "1465:18:1" + "src": "1465:18:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "1445:6:1" + "src": "1445:6:2" }, "nodeType": "YulFunctionCall", - "src": "1445:39:1" + "src": "1445:39:2" }, "nodeType": "YulExpressionStatement", - "src": "1445:39:1" + "src": "1445:39:2" } ] }, @@ -1264,41 +1264,41 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "1392:1:1" + "src": "1392:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "1395:6:1" + "src": "1395:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "1389:2:1" + "src": "1389:2:2" }, "nodeType": "YulFunctionCall", - "src": "1389:13:1" + "src": "1389:13:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "1403:19:1", + "src": "1403:19:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1405:15:1", + "src": "1405:15:2", "value": { "arguments": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "1414:1:1" + "src": "1414:1:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1417:2:1", + "src": "1417:2:2", "type": "", "value": "32" } @@ -1306,16 +1306,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1410:3:1" + "src": "1410:3:2" }, "nodeType": "YulFunctionCall", - "src": "1410:10:1" + "src": "1410:10:2" }, "variableNames": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "1405:1:1" + "src": "1405:1:2" } ] } @@ -1323,15 +1323,15 @@ }, "pre": { "nodeType": "YulBlock", - "src": "1385:3:1", + "src": "1385:3:2", "statements": [] }, - "src": "1381:113:1" + "src": "1381:113:2" }, { "body": { "nodeType": "YulBlock", - "src": "1528:76:1", + "src": "1528:76:2", "statements": [ { "expression": { @@ -1341,26 +1341,26 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "1578:3:1" + "src": "1578:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "1583:6:1" + "src": "1583:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1574:3:1" + "src": "1574:3:2" }, "nodeType": "YulFunctionCall", - "src": "1574:16:1" + "src": "1574:16:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1592:1:1", + "src": "1592:1:2", "type": "", "value": "0" } @@ -1368,13 +1368,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "1567:6:1" + "src": "1567:6:2" }, "nodeType": "YulFunctionCall", - "src": "1567:27:1" + "src": "1567:27:2" }, "nodeType": "YulExpressionStatement", - "src": "1567:27:1" + "src": "1567:27:2" } ] }, @@ -1383,24 +1383,24 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "1509:1:1" + "src": "1509:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "1512:6:1" + "src": "1512:6:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "1506:2:1" + "src": "1506:2:2" }, "nodeType": "YulFunctionCall", - "src": "1506:13:1" + "src": "1506:13:2" }, "nodeType": "YulIf", - "src": "1503:101:1" + "src": "1503:101:2" } ] }, @@ -1410,32 +1410,32 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "1334:3:1", + "src": "1334:3:2", "type": "" }, { "name": "dst", "nodeType": "YulTypedName", - "src": "1339:3:1", + "src": "1339:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "1344:6:1", + "src": "1344:6:2", "type": "" } ], - "src": "1303:307:1" + "src": "1303:307:2" }, { "body": { "nodeType": "YulBlock", - "src": "1664:54:1", + "src": "1664:54:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1674:38:1", + "src": "1674:38:2", "value": { "arguments": [ { @@ -1443,12 +1443,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "1692:5:1" + "src": "1692:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1699:2:1", + "src": "1699:2:2", "type": "", "value": "31" } @@ -1456,17 +1456,17 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1688:3:1" + "src": "1688:3:2" }, "nodeType": "YulFunctionCall", - "src": "1688:14:1" + "src": "1688:14:2" }, { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "1708:2:1", + "src": "1708:2:2", "type": "", "value": "31" } @@ -1474,25 +1474,25 @@ "functionName": { "name": "not", "nodeType": "YulIdentifier", - "src": "1704:3:1" + "src": "1704:3:2" }, "nodeType": "YulFunctionCall", - "src": "1704:7:1" + "src": "1704:7:2" } ], "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "1684:3:1" + "src": "1684:3:2" }, "nodeType": "YulFunctionCall", - "src": "1684:28:1" + "src": "1684:28:2" }, "variableNames": [ { "name": "result", "nodeType": "YulIdentifier", - "src": "1674:6:1" + "src": "1674:6:2" } ] } @@ -1504,7 +1504,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1647:5:1", + "src": "1647:5:2", "type": "" } ], @@ -1512,74 +1512,74 @@ { "name": "result", "nodeType": "YulTypedName", - "src": "1657:6:1", + "src": "1657:6:2", "type": "" } ], - "src": "1616:102:1" + "src": "1616:102:2" }, { "body": { "nodeType": "YulBlock", - "src": "1814:270:1", + "src": "1814:270:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "1824:52:1", + "src": "1824:52:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1870:5:1" + "src": "1870:5:2" } ], "functionName": { "name": "array_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "1838:31:1" + "src": "1838:31:2" }, "nodeType": "YulFunctionCall", - "src": "1838:38:1" + "src": "1838:38:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "1828:6:1", + "src": "1828:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "1885:77:1", + "src": "1885:77:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "1950:3:1" + "src": "1950:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "1955:6:1" + "src": "1955:6:2" } ], "functionName": { "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "1892:57:1" + "src": "1892:57:2" }, "nodeType": "YulFunctionCall", - "src": "1892:70:1" + "src": "1892:70:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "1885:3:1" + "src": "1885:3:2" } ] }, @@ -1591,12 +1591,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "1997:5:1" + "src": "1997:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2004:4:1", + "src": "2004:4:2", "type": "", "value": "0x20" } @@ -1604,73 +1604,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "1993:3:1" + "src": "1993:3:2" }, "nodeType": "YulFunctionCall", - "src": "1993:16:1" + "src": "1993:16:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "2011:3:1" + "src": "2011:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "2016:6:1" + "src": "2016:6:2" } ], "functionName": { "name": "copy_memory_to_memory", "nodeType": "YulIdentifier", - "src": "1971:21:1" + "src": "1971:21:2" }, "nodeType": "YulFunctionCall", - "src": "1971:52:1" + "src": "1971:52:2" }, "nodeType": "YulExpressionStatement", - "src": "1971:52:1" + "src": "1971:52:2" }, { "nodeType": "YulAssignment", - "src": "2032:46:1", + "src": "2032:46:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "2043:3:1" + "src": "2043:3:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "2070:6:1" + "src": "2070:6:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "2048:21:1" + "src": "2048:21:2" }, "nodeType": "YulFunctionCall", - "src": "2048:29:1" + "src": "2048:29:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2039:3:1" + "src": "2039:3:2" }, "nodeType": "YulFunctionCall", - "src": "2039:39:1" + "src": "2039:39:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "2032:3:1" + "src": "2032:3:2" } ] } @@ -1682,13 +1682,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1795:5:1", + "src": "1795:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "1802:3:1", + "src": "1802:3:2", "type": "" } ], @@ -1696,31 +1696,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "1810:3:1", + "src": "1810:3:2", "type": "" } ], - "src": "1724:360:1" + "src": "1724:360:2" }, { "body": { "nodeType": "YulBlock", - "src": "2206:193:1", + "src": "2206:193:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2216:26:1", + "src": "2216:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "2228:9:1" + "src": "2228:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2239:2:1", + "src": "2239:2:2", "type": "", "value": "32" } @@ -1728,16 +1728,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2224:3:1" + "src": "2224:3:2" }, "nodeType": "YulFunctionCall", - "src": "2224:18:1" + "src": "2224:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "2216:4:1" + "src": "2216:4:2" } ] }, @@ -1749,12 +1749,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "2263:9:1" + "src": "2263:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2274:1:1", + "src": "2274:1:2", "type": "", "value": "0" } @@ -1762,73 +1762,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2259:3:1" + "src": "2259:3:2" }, "nodeType": "YulFunctionCall", - "src": "2259:17:1" + "src": "2259:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "2282:4:1" + "src": "2282:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "2288:9:1" + "src": "2288:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "2278:3:1" + "src": "2278:3:2" }, "nodeType": "YulFunctionCall", - "src": "2278:20:1" + "src": "2278:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "2252:6:1" + "src": "2252:6:2" }, "nodeType": "YulFunctionCall", - "src": "2252:47:1" + "src": "2252:47:2" }, "nodeType": "YulExpressionStatement", - "src": "2252:47:1" + "src": "2252:47:2" }, { "nodeType": "YulAssignment", - "src": "2308:84:1", + "src": "2308:84:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "2378:6:1" + "src": "2378:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "2387:4:1" + "src": "2387:4:2" } ], "functionName": { "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "2316:61:1" + "src": "2316:61:2" }, "nodeType": "YulFunctionCall", - "src": "2316:76:1" + "src": "2316:76:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "2308:4:1" + "src": "2308:4:2" } ] } @@ -1840,13 +1840,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "2178:9:1", + "src": "2178:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "2190:6:1", + "src": "2190:6:2", "type": "" } ], @@ -1854,31 +1854,31 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "2201:4:1", + "src": "2201:4:2", "type": "" } ], - "src": "2090:309:1" + "src": "2090:309:2" }, { "body": { "nodeType": "YulBlock", - "src": "2449:49:1", + "src": "2449:49:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2459:33:1", + "src": "2459:33:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "2474:5:1" + "src": "2474:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2481:10:1", + "src": "2481:10:2", "type": "", "value": "0xffffffff" } @@ -1886,16 +1886,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "2470:3:1" + "src": "2470:3:2" }, "nodeType": "YulFunctionCall", - "src": "2470:22:1" + "src": "2470:22:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "2459:7:1" + "src": "2459:7:2" } ] } @@ -1907,7 +1907,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "2431:5:1", + "src": "2431:5:2", "type": "" } ], @@ -1915,21 +1915,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "2441:7:1", + "src": "2441:7:2", "type": "" } ], - "src": "2405:93:1" + "src": "2405:93:2" }, { "body": { "nodeType": "YulBlock", - "src": "2546:78:1", + "src": "2546:78:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "2602:16:1", + "src": "2602:16:2", "statements": [ { "expression": { @@ -1937,14 +1937,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "2611:1:1", + "src": "2611:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2614:1:1", + "src": "2614:1:2", "type": "", "value": "0" } @@ -1952,13 +1952,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "2604:6:1" + "src": "2604:6:2" }, "nodeType": "YulFunctionCall", - "src": "2604:12:1" + "src": "2604:12:2" }, "nodeType": "YulExpressionStatement", - "src": "2604:12:1" + "src": "2604:12:2" } ] }, @@ -1969,44 +1969,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "2569:5:1" + "src": "2569:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "2593:5:1" + "src": "2593:5:2" } ], "functionName": { "name": "cleanup_t_uint32", "nodeType": "YulIdentifier", - "src": "2576:16:1" + "src": "2576:16:2" }, "nodeType": "YulFunctionCall", - "src": "2576:23:1" + "src": "2576:23:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "2566:2:1" + "src": "2566:2:2" }, "nodeType": "YulFunctionCall", - "src": "2566:34:1" + "src": "2566:34:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "2559:6:1" + "src": "2559:6:2" }, "nodeType": "YulFunctionCall", - "src": "2559:42:1" + "src": "2559:42:2" }, "nodeType": "YulIf", - "src": "2556:62:1" + "src": "2556:62:2" } ] }, @@ -2016,41 +2016,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "2539:5:1", + "src": "2539:5:2", "type": "" } ], - "src": "2504:120:1" + "src": "2504:120:2" }, { "body": { "nodeType": "YulBlock", - "src": "2681:86:1", + "src": "2681:86:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2691:29:1", + "src": "2691:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "2713:6:1" + "src": "2713:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "2700:12:1" + "src": "2700:12:2" }, "nodeType": "YulFunctionCall", - "src": "2700:20:1" + "src": "2700:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "2691:5:1" + "src": "2691:5:2" } ] }, @@ -2060,19 +2060,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "2755:5:1" + "src": "2755:5:2" } ], "functionName": { "name": "validator_revert_t_uint32", "nodeType": "YulIdentifier", - "src": "2729:25:1" + "src": "2729:25:2" }, "nodeType": "YulFunctionCall", - "src": "2729:32:1" + "src": "2729:32:2" }, "nodeType": "YulExpressionStatement", - "src": "2729:32:1" + "src": "2729:32:2" } ] }, @@ -2082,13 +2082,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "2659:6:1", + "src": "2659:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "2667:3:1", + "src": "2667:3:2", "type": "" } ], @@ -2096,21 +2096,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "2675:5:1", + "src": "2675:5:2", "type": "" } ], - "src": "2630:137:1" + "src": "2630:137:2" }, { "body": { "nodeType": "YulBlock", - "src": "2838:262:1", + "src": "2838:262:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "2884:83:1", + "src": "2884:83:2", "statements": [ { "expression": { @@ -2118,13 +2118,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "2886:77:1" + "src": "2886:77:2" }, "nodeType": "YulFunctionCall", - "src": "2886:79:1" + "src": "2886:79:2" }, "nodeType": "YulExpressionStatement", - "src": "2886:79:1" + "src": "2886:79:2" } ] }, @@ -2135,26 +2135,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "2859:7:1" + "src": "2859:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "2868:9:1" + "src": "2868:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "2855:3:1" + "src": "2855:3:2" }, "nodeType": "YulFunctionCall", - "src": "2855:23:1" + "src": "2855:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2880:2:1", + "src": "2880:2:2", "type": "", "value": "32" } @@ -2162,25 +2162,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "2851:3:1" + "src": "2851:3:2" }, "nodeType": "YulFunctionCall", - "src": "2851:32:1" + "src": "2851:32:2" }, "nodeType": "YulIf", - "src": "2848:119:1" + "src": "2848:119:2" }, { "nodeType": "YulBlock", - "src": "2977:116:1", + "src": "2977:116:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "2992:15:1", + "src": "2992:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "3006:1:1", + "src": "3006:1:2", "type": "", "value": "0" }, @@ -2188,14 +2188,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "2996:6:1", + "src": "2996:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "3021:62:1", + "src": "3021:62:2", "value": { "arguments": [ { @@ -2203,41 +2203,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "3055:9:1" + "src": "3055:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "3066:6:1" + "src": "3066:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3051:3:1" + "src": "3051:3:2" }, "nodeType": "YulFunctionCall", - "src": "3051:22:1" + "src": "3051:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "3075:7:1" + "src": "3075:7:2" } ], "functionName": { "name": "abi_decode_t_uint32", "nodeType": "YulIdentifier", - "src": "3031:19:1" + "src": "3031:19:2" }, "nodeType": "YulFunctionCall", - "src": "3031:52:1" + "src": "3031:52:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "3021:6:1" + "src": "3021:6:2" } ] } @@ -2251,13 +2251,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "2808:9:1", + "src": "2808:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "2819:7:1", + "src": "2819:7:2", "type": "" } ], @@ -2265,16 +2265,16 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "2831:6:1", + "src": "2831:6:2", "type": "" } ], - "src": "2773:327:1" + "src": "2773:327:2" }, { "body": { "nodeType": "YulBlock", - "src": "3195:28:1", + "src": "3195:28:2", "statements": [ { "expression": { @@ -2282,14 +2282,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "3212:1:1", + "src": "3212:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3215:1:1", + "src": "3215:1:2", "type": "", "value": "0" } @@ -2297,24 +2297,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "3205:6:1" + "src": "3205:6:2" }, "nodeType": "YulFunctionCall", - "src": "3205:12:1" + "src": "3205:12:2" }, "nodeType": "YulExpressionStatement", - "src": "3205:12:1" + "src": "3205:12:2" } ] }, "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulFunctionDefinition", - "src": "3106:117:1" + "src": "3106:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "3318:28:1", + "src": "3318:28:2", "statements": [ { "expression": { @@ -2322,14 +2322,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "3335:1:1", + "src": "3335:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3338:1:1", + "src": "3338:1:2", "type": "", "value": "0" } @@ -2337,24 +2337,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "3328:6:1" + "src": "3328:6:2" }, "nodeType": "YulFunctionCall", - "src": "3328:12:1" + "src": "3328:12:2" }, "nodeType": "YulExpressionStatement", - "src": "3328:12:1" + "src": "3328:12:2" } ] }, "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulFunctionDefinition", - "src": "3229:117:1" + "src": "3229:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "3380:152:1", + "src": "3380:152:2", "statements": [ { "expression": { @@ -2362,14 +2362,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "3397:1:1", + "src": "3397:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3400:77:1", + "src": "3400:77:2", "type": "", "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" } @@ -2377,13 +2377,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "3390:6:1" + "src": "3390:6:2" }, "nodeType": "YulFunctionCall", - "src": "3390:88:1" + "src": "3390:88:2" }, "nodeType": "YulExpressionStatement", - "src": "3390:88:1" + "src": "3390:88:2" }, { "expression": { @@ -2391,14 +2391,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "3494:1:1", + "src": "3494:1:2", "type": "", "value": "4" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3497:4:1", + "src": "3497:4:2", "type": "", "value": "0x41" } @@ -2406,13 +2406,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "3487:6:1" + "src": "3487:6:2" }, "nodeType": "YulFunctionCall", - "src": "3487:15:1" + "src": "3487:15:2" }, "nodeType": "YulExpressionStatement", - "src": "3487:15:1" + "src": "3487:15:2" }, { "expression": { @@ -2420,14 +2420,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "3518:1:1", + "src": "3518:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3521:4:1", + "src": "3521:4:2", "type": "", "value": "0x24" } @@ -2435,65 +2435,65 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "3511:6:1" + "src": "3511:6:2" }, "nodeType": "YulFunctionCall", - "src": "3511:15:1" + "src": "3511:15:2" }, "nodeType": "YulExpressionStatement", - "src": "3511:15:1" + "src": "3511:15:2" } ] }, "name": "panic_error_0x41", "nodeType": "YulFunctionDefinition", - "src": "3352:180:1" + "src": "3352:180:2" }, { "body": { "nodeType": "YulBlock", - "src": "3581:238:1", + "src": "3581:238:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "3591:58:1", + "src": "3591:58:2", "value": { "arguments": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "3613:6:1" + "src": "3613:6:2" }, { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "3643:4:1" + "src": "3643:4:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "3621:21:1" + "src": "3621:21:2" }, "nodeType": "YulFunctionCall", - "src": "3621:27:1" + "src": "3621:27:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3609:3:1" + "src": "3609:3:2" }, "nodeType": "YulFunctionCall", - "src": "3609:40:1" + "src": "3609:40:2" }, "variables": [ { "name": "newFreePtr", "nodeType": "YulTypedName", - "src": "3595:10:1", + "src": "3595:10:2", "type": "" } ] @@ -2501,7 +2501,7 @@ { "body": { "nodeType": "YulBlock", - "src": "3760:22:1", + "src": "3760:22:2", "statements": [ { "expression": { @@ -2509,13 +2509,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "3762:16:1" + "src": "3762:16:2" }, "nodeType": "YulFunctionCall", - "src": "3762:18:1" + "src": "3762:18:2" }, "nodeType": "YulExpressionStatement", - "src": "3762:18:1" + "src": "3762:18:2" } ] }, @@ -2526,12 +2526,12 @@ { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "3703:10:1" + "src": "3703:10:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3715:18:1", + "src": "3715:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -2539,43 +2539,43 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "3700:2:1" + "src": "3700:2:2" }, "nodeType": "YulFunctionCall", - "src": "3700:34:1" + "src": "3700:34:2" }, { "arguments": [ { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "3739:10:1" + "src": "3739:10:2" }, { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "3751:6:1" + "src": "3751:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "3736:2:1" + "src": "3736:2:2" }, "nodeType": "YulFunctionCall", - "src": "3736:22:1" + "src": "3736:22:2" } ], "functionName": { "name": "or", "nodeType": "YulIdentifier", - "src": "3697:2:1" + "src": "3697:2:2" }, "nodeType": "YulFunctionCall", - "src": "3697:62:1" + "src": "3697:62:2" }, "nodeType": "YulIf", - "src": "3694:88:1" + "src": "3694:88:2" }, { "expression": { @@ -2583,26 +2583,26 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "3798:2:1", + "src": "3798:2:2", "type": "", "value": "64" }, { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "3802:10:1" + "src": "3802:10:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "3791:6:1" + "src": "3791:6:2" }, "nodeType": "YulFunctionCall", - "src": "3791:22:1" + "src": "3791:22:2" }, "nodeType": "YulExpressionStatement", - "src": "3791:22:1" + "src": "3791:22:2" } ] }, @@ -2612,41 +2612,41 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "3567:6:1", + "src": "3567:6:2", "type": "" }, { "name": "size", "nodeType": "YulTypedName", - "src": "3575:4:1", + "src": "3575:4:2", "type": "" } ], - "src": "3538:281:1" + "src": "3538:281:2" }, { "body": { "nodeType": "YulBlock", - "src": "3866:88:1", + "src": "3866:88:2", "statements": [ { "nodeType": "YulAssignment", - "src": "3876:30:1", + "src": "3876:30:2", "value": { "arguments": [], "functionName": { "name": "allocate_unbounded", "nodeType": "YulIdentifier", - "src": "3886:18:1" + "src": "3886:18:2" }, "nodeType": "YulFunctionCall", - "src": "3886:20:1" + "src": "3886:20:2" }, "variableNames": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "3876:6:1" + "src": "3876:6:2" } ] }, @@ -2656,24 +2656,24 @@ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "3935:6:1" + "src": "3935:6:2" }, { "name": "size", "nodeType": "YulIdentifier", - "src": "3943:4:1" + "src": "3943:4:2" } ], "functionName": { "name": "finalize_allocation", "nodeType": "YulIdentifier", - "src": "3915:19:1" + "src": "3915:19:2" }, "nodeType": "YulFunctionCall", - "src": "3915:33:1" + "src": "3915:33:2" }, "nodeType": "YulExpressionStatement", - "src": "3915:33:1" + "src": "3915:33:2" } ] }, @@ -2683,7 +2683,7 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "3850:4:1", + "src": "3850:4:2", "type": "" } ], @@ -2691,21 +2691,21 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "3859:6:1", + "src": "3859:6:2", "type": "" } ], - "src": "3825:129:1" + "src": "3825:129:2" }, { "body": { "nodeType": "YulBlock", - "src": "4026:241:1", + "src": "4026:241:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "4131:22:1", + "src": "4131:22:2", "statements": [ { "expression": { @@ -2713,13 +2713,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "4133:16:1" + "src": "4133:16:2" }, "nodeType": "YulFunctionCall", - "src": "4133:18:1" + "src": "4133:18:2" }, "nodeType": "YulExpressionStatement", - "src": "4133:18:1" + "src": "4133:18:2" } ] }, @@ -2728,12 +2728,12 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "4103:6:1" + "src": "4103:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4111:18:1", + "src": "4111:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -2741,55 +2741,55 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "4100:2:1" + "src": "4100:2:2" }, "nodeType": "YulFunctionCall", - "src": "4100:30:1" + "src": "4100:30:2" }, "nodeType": "YulIf", - "src": "4097:56:1" + "src": "4097:56:2" }, { "nodeType": "YulAssignment", - "src": "4163:37:1", + "src": "4163:37:2", "value": { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "4193:6:1" + "src": "4193:6:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "4171:21:1" + "src": "4171:21:2" }, "nodeType": "YulFunctionCall", - "src": "4171:29:1" + "src": "4171:29:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "4163:4:1" + "src": "4163:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "4237:23:1", + "src": "4237:23:2", "value": { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "4249:4:1" + "src": "4249:4:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4255:4:1", + "src": "4255:4:2", "type": "", "value": "0x20" } @@ -2797,16 +2797,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4245:3:1" + "src": "4245:3:2" }, "nodeType": "YulFunctionCall", - "src": "4245:15:1" + "src": "4245:15:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "4237:4:1" + "src": "4237:4:2" } ] } @@ -2818,7 +2818,7 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "4010:6:1", + "src": "4010:6:2", "type": "" } ], @@ -2826,16 +2826,16 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "4021:4:1", + "src": "4021:4:2", "type": "" } ], - "src": "3960:307:1" + "src": "3960:307:2" }, { "body": { "nodeType": "YulBlock", - "src": "4324:103:1", + "src": "4324:103:2", "statements": [ { "expression": { @@ -2843,29 +2843,29 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "4347:3:1" + "src": "4347:3:2" }, { "name": "src", "nodeType": "YulIdentifier", - "src": "4352:3:1" + "src": "4352:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "4357:6:1" + "src": "4357:6:2" } ], "functionName": { "name": "calldatacopy", "nodeType": "YulIdentifier", - "src": "4334:12:1" + "src": "4334:12:2" }, "nodeType": "YulFunctionCall", - "src": "4334:30:1" + "src": "4334:30:2" }, "nodeType": "YulExpressionStatement", - "src": "4334:30:1" + "src": "4334:30:2" }, { "expression": { @@ -2875,26 +2875,26 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "4405:3:1" + "src": "4405:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "4410:6:1" + "src": "4410:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4401:3:1" + "src": "4401:3:2" }, "nodeType": "YulFunctionCall", - "src": "4401:16:1" + "src": "4401:16:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4419:1:1", + "src": "4419:1:2", "type": "", "value": "0" } @@ -2902,13 +2902,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "4394:6:1" + "src": "4394:6:2" }, "nodeType": "YulFunctionCall", - "src": "4394:27:1" + "src": "4394:27:2" }, "nodeType": "YulExpressionStatement", - "src": "4394:27:1" + "src": "4394:27:2" } ] }, @@ -2918,32 +2918,32 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "4306:3:1", + "src": "4306:3:2", "type": "" }, { "name": "dst", "nodeType": "YulTypedName", - "src": "4311:3:1", + "src": "4311:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "4316:6:1", + "src": "4316:6:2", "type": "" } ], - "src": "4273:154:1" + "src": "4273:154:2" }, { "body": { "nodeType": "YulBlock", - "src": "4516:327:1", + "src": "4516:327:2", "statements": [ { "nodeType": "YulAssignment", - "src": "4526:74:1", + "src": "4526:74:2", "value": { "arguments": [ { @@ -2951,31 +2951,31 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "4592:6:1" + "src": "4592:6:2" } ], "functionName": { "name": "array_allocation_size_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "4551:40:1" + "src": "4551:40:2" }, "nodeType": "YulFunctionCall", - "src": "4551:48:1" + "src": "4551:48:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "4535:15:1" + "src": "4535:15:2" }, "nodeType": "YulFunctionCall", - "src": "4535:65:1" + "src": "4535:65:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "4526:5:1" + "src": "4526:5:2" } ] }, @@ -2985,39 +2985,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "4616:5:1" + "src": "4616:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "4623:6:1" + "src": "4623:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "4609:6:1" + "src": "4609:6:2" }, "nodeType": "YulFunctionCall", - "src": "4609:21:1" + "src": "4609:21:2" }, "nodeType": "YulExpressionStatement", - "src": "4609:21:1" + "src": "4609:21:2" }, { "nodeType": "YulVariableDeclaration", - "src": "4639:27:1", + "src": "4639:27:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "4654:5:1" + "src": "4654:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4661:4:1", + "src": "4661:4:2", "type": "", "value": "0x20" } @@ -3025,16 +3025,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4650:3:1" + "src": "4650:3:2" }, "nodeType": "YulFunctionCall", - "src": "4650:16:1" + "src": "4650:16:2" }, "variables": [ { "name": "dst", "nodeType": "YulTypedName", - "src": "4643:3:1", + "src": "4643:3:2", "type": "" } ] @@ -3042,7 +3042,7 @@ { "body": { "nodeType": "YulBlock", - "src": "4704:83:1", + "src": "4704:83:2", "statements": [ { "expression": { @@ -3050,13 +3050,13 @@ "functionName": { "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulIdentifier", - "src": "4706:77:1" + "src": "4706:77:2" }, "nodeType": "YulFunctionCall", - "src": "4706:79:1" + "src": "4706:79:2" }, "nodeType": "YulExpressionStatement", - "src": "4706:79:1" + "src": "4706:79:2" } ] }, @@ -3067,38 +3067,38 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "4685:3:1" + "src": "4685:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "4690:6:1" + "src": "4690:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4681:3:1" + "src": "4681:3:2" }, "nodeType": "YulFunctionCall", - "src": "4681:16:1" + "src": "4681:16:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "4699:3:1" + "src": "4699:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "4678:2:1" + "src": "4678:2:2" }, "nodeType": "YulFunctionCall", - "src": "4678:25:1" + "src": "4678:25:2" }, "nodeType": "YulIf", - "src": "4675:112:1" + "src": "4675:112:2" }, { "expression": { @@ -3106,29 +3106,29 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "4820:3:1" + "src": "4820:3:2" }, { "name": "dst", "nodeType": "YulIdentifier", - "src": "4825:3:1" + "src": "4825:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "4830:6:1" + "src": "4830:6:2" } ], "functionName": { "name": "copy_calldata_to_memory", "nodeType": "YulIdentifier", - "src": "4796:23:1" + "src": "4796:23:2" }, "nodeType": "YulFunctionCall", - "src": "4796:41:1" + "src": "4796:41:2" }, "nodeType": "YulExpressionStatement", - "src": "4796:41:1" + "src": "4796:41:2" } ] }, @@ -3138,19 +3138,19 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "4489:3:1", + "src": "4489:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "4494:6:1", + "src": "4494:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "4502:3:1", + "src": "4502:3:2", "type": "" } ], @@ -3158,21 +3158,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "4510:5:1", + "src": "4510:5:2", "type": "" } ], - "src": "4433:410:1" + "src": "4433:410:2" }, { "body": { "nodeType": "YulBlock", - "src": "4923:277:1", + "src": "4923:277:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "4972:83:1", + "src": "4972:83:2", "statements": [ { "expression": { @@ -3180,13 +3180,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "4974:77:1" + "src": "4974:77:2" }, "nodeType": "YulFunctionCall", - "src": "4974:79:1" + "src": "4974:79:2" }, "nodeType": "YulExpressionStatement", - "src": "4974:79:1" + "src": "4974:79:2" } ] }, @@ -3199,12 +3199,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "4951:6:1" + "src": "4951:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4959:4:1", + "src": "4959:4:2", "type": "", "value": "0x1f" } @@ -3212,68 +3212,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4947:3:1" + "src": "4947:3:2" }, "nodeType": "YulFunctionCall", - "src": "4947:17:1" + "src": "4947:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "4966:3:1" + "src": "4966:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "4943:3:1" + "src": "4943:3:2" }, "nodeType": "YulFunctionCall", - "src": "4943:27:1" + "src": "4943:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "4936:6:1" + "src": "4936:6:2" }, "nodeType": "YulFunctionCall", - "src": "4936:35:1" + "src": "4936:35:2" }, "nodeType": "YulIf", - "src": "4933:122:1" + "src": "4933:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "5064:34:1", + "src": "5064:34:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "5091:6:1" + "src": "5091:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "5078:12:1" + "src": "5078:12:2" }, "nodeType": "YulFunctionCall", - "src": "5078:20:1" + "src": "5078:20:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "5068:6:1", + "src": "5068:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "5107:87:1", + "src": "5107:87:2", "value": { "arguments": [ { @@ -3281,12 +3281,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "5167:6:1" + "src": "5167:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5175:4:1", + "src": "5175:4:2", "type": "", "value": "0x20" } @@ -3294,35 +3294,35 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5163:3:1" + "src": "5163:3:2" }, "nodeType": "YulFunctionCall", - "src": "5163:17:1" + "src": "5163:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "5182:6:1" + "src": "5182:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "5190:3:1" + "src": "5190:3:2" } ], "functionName": { "name": "abi_decode_available_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "5116:46:1" + "src": "5116:46:2" }, "nodeType": "YulFunctionCall", - "src": "5116:78:1" + "src": "5116:78:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "5107:5:1" + "src": "5107:5:2" } ] } @@ -3334,13 +3334,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "4901:6:1", + "src": "4901:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "4909:3:1", + "src": "4909:3:2", "type": "" } ], @@ -3348,21 +3348,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "4917:5:1", + "src": "4917:5:2", "type": "" } ], - "src": "4862:338:1" + "src": "4862:338:2" }, { "body": { "nodeType": "YulBlock", - "src": "5315:688:1", + "src": "5315:688:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "5361:83:1", + "src": "5361:83:2", "statements": [ { "expression": { @@ -3370,13 +3370,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "5363:77:1" + "src": "5363:77:2" }, "nodeType": "YulFunctionCall", - "src": "5363:79:1" + "src": "5363:79:2" }, "nodeType": "YulExpressionStatement", - "src": "5363:79:1" + "src": "5363:79:2" } ] }, @@ -3387,26 +3387,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "5336:7:1" + "src": "5336:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5345:9:1" + "src": "5345:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "5332:3:1" + "src": "5332:3:2" }, "nodeType": "YulFunctionCall", - "src": "5332:23:1" + "src": "5332:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5357:2:1", + "src": "5357:2:2", "type": "", "value": "96" } @@ -3414,25 +3414,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "5328:3:1" + "src": "5328:3:2" }, "nodeType": "YulFunctionCall", - "src": "5328:32:1" + "src": "5328:32:2" }, "nodeType": "YulIf", - "src": "5325:119:1" + "src": "5325:119:2" }, { "nodeType": "YulBlock", - "src": "5454:117:1", + "src": "5454:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "5469:15:1", + "src": "5469:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "5483:1:1", + "src": "5483:1:2", "type": "", "value": "0" }, @@ -3440,14 +3440,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "5473:6:1", + "src": "5473:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "5498:63:1", + "src": "5498:63:2", "value": { "arguments": [ { @@ -3455,41 +3455,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5533:9:1" + "src": "5533:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "5544:6:1" + "src": "5544:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5529:3:1" + "src": "5529:3:2" }, "nodeType": "YulFunctionCall", - "src": "5529:22:1" + "src": "5529:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "5553:7:1" + "src": "5553:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "5508:20:1" + "src": "5508:20:2" }, "nodeType": "YulFunctionCall", - "src": "5508:53:1" + "src": "5508:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "5498:6:1" + "src": "5498:6:2" } ] } @@ -3497,15 +3497,15 @@ }, { "nodeType": "YulBlock", - "src": "5581:118:1", + "src": "5581:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "5596:16:1", + "src": "5596:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "5610:2:1", + "src": "5610:2:2", "type": "", "value": "32" }, @@ -3513,14 +3513,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "5600:6:1", + "src": "5600:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "5626:63:1", + "src": "5626:63:2", "value": { "arguments": [ { @@ -3528,41 +3528,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5661:9:1" + "src": "5661:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "5672:6:1" + "src": "5672:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5657:3:1" + "src": "5657:3:2" }, "nodeType": "YulFunctionCall", - "src": "5657:22:1" + "src": "5657:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "5681:7:1" + "src": "5681:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "5636:20:1" + "src": "5636:20:2" }, "nodeType": "YulFunctionCall", - "src": "5636:53:1" + "src": "5636:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "5626:6:1" + "src": "5626:6:2" } ] } @@ -3570,11 +3570,11 @@ }, { "nodeType": "YulBlock", - "src": "5709:287:1", + "src": "5709:287:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "5724:46:1", + "src": "5724:46:2", "value": { "arguments": [ { @@ -3582,12 +3582,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5755:9:1" + "src": "5755:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5766:2:1", + "src": "5766:2:2", "type": "", "value": "64" } @@ -3595,25 +3595,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5751:3:1" + "src": "5751:3:2" }, "nodeType": "YulFunctionCall", - "src": "5751:18:1" + "src": "5751:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "5738:12:1" + "src": "5738:12:2" }, "nodeType": "YulFunctionCall", - "src": "5738:32:1" + "src": "5738:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "5728:6:1", + "src": "5728:6:2", "type": "" } ] @@ -3621,7 +3621,7 @@ { "body": { "nodeType": "YulBlock", - "src": "5817:83:1", + "src": "5817:83:2", "statements": [ { "expression": { @@ -3629,13 +3629,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "5819:77:1" + "src": "5819:77:2" }, "nodeType": "YulFunctionCall", - "src": "5819:79:1" + "src": "5819:79:2" }, "nodeType": "YulExpressionStatement", - "src": "5819:79:1" + "src": "5819:79:2" } ] }, @@ -3644,12 +3644,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "5789:6:1" + "src": "5789:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5797:18:1", + "src": "5797:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -3657,17 +3657,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "5786:2:1" + "src": "5786:2:2" }, "nodeType": "YulFunctionCall", - "src": "5786:30:1" + "src": "5786:30:2" }, "nodeType": "YulIf", - "src": "5783:117:1" + "src": "5783:117:2" }, { "nodeType": "YulAssignment", - "src": "5914:72:1", + "src": "5914:72:2", "value": { "arguments": [ { @@ -3675,41 +3675,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5958:9:1" + "src": "5958:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "5969:6:1" + "src": "5969:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5954:3:1" + "src": "5954:3:2" }, "nodeType": "YulFunctionCall", - "src": "5954:22:1" + "src": "5954:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "5978:7:1" + "src": "5978:7:2" } ], "functionName": { "name": "abi_decode_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "5924:29:1" + "src": "5924:29:2" }, "nodeType": "YulFunctionCall", - "src": "5924:62:1" + "src": "5924:62:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "5914:6:1" + "src": "5914:6:2" } ] } @@ -3723,13 +3723,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "5269:9:1", + "src": "5269:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "5280:7:1", + "src": "5280:7:2", "type": "" } ], @@ -3737,32 +3737,32 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "5292:6:1", + "src": "5292:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "5300:6:1", + "src": "5300:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "5308:6:1", + "src": "5308:6:2", "type": "" } ], - "src": "5206:797:1" + "src": "5206:797:2" }, { "body": { "nodeType": "YulBlock", - "src": "6051:48:1", + "src": "6051:48:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6061:32:1", + "src": "6061:32:2", "value": { "arguments": [ { @@ -3770,31 +3770,31 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "6086:5:1" + "src": "6086:5:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "6079:6:1" + "src": "6079:6:2" }, "nodeType": "YulFunctionCall", - "src": "6079:13:1" + "src": "6079:13:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "6072:6:1" + "src": "6072:6:2" }, "nodeType": "YulFunctionCall", - "src": "6072:21:1" + "src": "6072:21:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "6061:7:1" + "src": "6061:7:2" } ] } @@ -3806,7 +3806,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6033:5:1", + "src": "6033:5:2", "type": "" } ], @@ -3814,21 +3814,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "6043:7:1", + "src": "6043:7:2", "type": "" } ], - "src": "6009:90:1" + "src": "6009:90:2" }, { "body": { "nodeType": "YulBlock", - "src": "6145:76:1", + "src": "6145:76:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "6199:16:1", + "src": "6199:16:2", "statements": [ { "expression": { @@ -3836,14 +3836,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "6208:1:1", + "src": "6208:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6211:1:1", + "src": "6211:1:2", "type": "", "value": "0" } @@ -3851,13 +3851,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "6201:6:1" + "src": "6201:6:2" }, "nodeType": "YulFunctionCall", - "src": "6201:12:1" + "src": "6201:12:2" }, "nodeType": "YulExpressionStatement", - "src": "6201:12:1" + "src": "6201:12:2" } ] }, @@ -3868,44 +3868,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "6168:5:1" + "src": "6168:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "6190:5:1" + "src": "6190:5:2" } ], "functionName": { "name": "cleanup_t_bool", "nodeType": "YulIdentifier", - "src": "6175:14:1" + "src": "6175:14:2" }, "nodeType": "YulFunctionCall", - "src": "6175:21:1" + "src": "6175:21:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "6165:2:1" + "src": "6165:2:2" }, "nodeType": "YulFunctionCall", - "src": "6165:32:1" + "src": "6165:32:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "6158:6:1" + "src": "6158:6:2" }, "nodeType": "YulFunctionCall", - "src": "6158:40:1" + "src": "6158:40:2" }, "nodeType": "YulIf", - "src": "6155:60:1" + "src": "6155:60:2" } ] }, @@ -3915,41 +3915,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6138:5:1", + "src": "6138:5:2", "type": "" } ], - "src": "6105:116:1" + "src": "6105:116:2" }, { "body": { "nodeType": "YulBlock", - "src": "6276:84:1", + "src": "6276:84:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6286:29:1", + "src": "6286:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "6308:6:1" + "src": "6308:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "6295:12:1" + "src": "6295:12:2" }, "nodeType": "YulFunctionCall", - "src": "6295:20:1" + "src": "6295:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "6286:5:1" + "src": "6286:5:2" } ] }, @@ -3959,19 +3959,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "6348:5:1" + "src": "6348:5:2" } ], "functionName": { "name": "validator_revert_t_bool", "nodeType": "YulIdentifier", - "src": "6324:23:1" + "src": "6324:23:2" }, "nodeType": "YulFunctionCall", - "src": "6324:30:1" + "src": "6324:30:2" }, "nodeType": "YulExpressionStatement", - "src": "6324:30:1" + "src": "6324:30:2" } ] }, @@ -3981,13 +3981,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "6254:6:1", + "src": "6254:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "6262:3:1", + "src": "6262:3:2", "type": "" } ], @@ -3995,21 +3995,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6270:5:1", + "src": "6270:5:2", "type": "" } ], - "src": "6227:133:1" + "src": "6227:133:2" }, { "body": { "nodeType": "YulBlock", - "src": "6446:388:1", + "src": "6446:388:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "6492:83:1", + "src": "6492:83:2", "statements": [ { "expression": { @@ -4017,13 +4017,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "6494:77:1" + "src": "6494:77:2" }, "nodeType": "YulFunctionCall", - "src": "6494:79:1" + "src": "6494:79:2" }, "nodeType": "YulExpressionStatement", - "src": "6494:79:1" + "src": "6494:79:2" } ] }, @@ -4034,26 +4034,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6467:7:1" + "src": "6467:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6476:9:1" + "src": "6476:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "6463:3:1" + "src": "6463:3:2" }, "nodeType": "YulFunctionCall", - "src": "6463:23:1" + "src": "6463:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6488:2:1", + "src": "6488:2:2", "type": "", "value": "64" } @@ -4061,25 +4061,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "6459:3:1" + "src": "6459:3:2" }, "nodeType": "YulFunctionCall", - "src": "6459:32:1" + "src": "6459:32:2" }, "nodeType": "YulIf", - "src": "6456:119:1" + "src": "6456:119:2" }, { "nodeType": "YulBlock", - "src": "6585:117:1", + "src": "6585:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6600:15:1", + "src": "6600:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "6614:1:1", + "src": "6614:1:2", "type": "", "value": "0" }, @@ -4087,14 +4087,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "6604:6:1", + "src": "6604:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "6629:63:1", + "src": "6629:63:2", "value": { "arguments": [ { @@ -4102,41 +4102,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6664:9:1" + "src": "6664:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "6675:6:1" + "src": "6675:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6660:3:1" + "src": "6660:3:2" }, "nodeType": "YulFunctionCall", - "src": "6660:22:1" + "src": "6660:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6684:7:1" + "src": "6684:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "6639:20:1" + "src": "6639:20:2" }, "nodeType": "YulFunctionCall", - "src": "6639:53:1" + "src": "6639:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "6629:6:1" + "src": "6629:6:2" } ] } @@ -4144,15 +4144,15 @@ }, { "nodeType": "YulBlock", - "src": "6712:115:1", + "src": "6712:115:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6727:16:1", + "src": "6727:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "6741:2:1", + "src": "6741:2:2", "type": "", "value": "32" }, @@ -4160,14 +4160,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "6731:6:1", + "src": "6731:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "6757:60:1", + "src": "6757:60:2", "value": { "arguments": [ { @@ -4175,41 +4175,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6789:9:1" + "src": "6789:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "6800:6:1" + "src": "6800:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6785:3:1" + "src": "6785:3:2" }, "nodeType": "YulFunctionCall", - "src": "6785:22:1" + "src": "6785:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6809:7:1" + "src": "6809:7:2" } ], "functionName": { "name": "abi_decode_t_bool", "nodeType": "YulIdentifier", - "src": "6767:17:1" + "src": "6767:17:2" }, "nodeType": "YulFunctionCall", - "src": "6767:50:1" + "src": "6767:50:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "6757:6:1" + "src": "6757:6:2" } ] } @@ -4223,13 +4223,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "6408:9:1", + "src": "6408:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "6419:7:1", + "src": "6419:7:2", "type": "" } ], @@ -4237,37 +4237,37 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "6431:6:1", + "src": "6431:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "6439:6:1", + "src": "6439:6:2", "type": "" } ], - "src": "6366:468:1" + "src": "6366:468:2" }, { "body": { "nodeType": "YulBlock", - "src": "6885:81:1", + "src": "6885:81:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6895:65:1", + "src": "6895:65:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "6910:5:1" + "src": "6910:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6917:42:1", + "src": "6917:42:2", "type": "", "value": "0xffffffffffffffffffffffffffffffffffffffff" } @@ -4275,16 +4275,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "6906:3:1" + "src": "6906:3:2" }, "nodeType": "YulFunctionCall", - "src": "6906:54:1" + "src": "6906:54:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "6895:7:1" + "src": "6895:7:2" } ] } @@ -4296,7 +4296,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6867:5:1", + "src": "6867:5:2", "type": "" } ], @@ -4304,30 +4304,30 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "6877:7:1", + "src": "6877:7:2", "type": "" } ], - "src": "6840:126:1" + "src": "6840:126:2" }, { "body": { "nodeType": "YulBlock", - "src": "7004:28:1", + "src": "7004:28:2", "statements": [ { "nodeType": "YulAssignment", - "src": "7014:12:1", + "src": "7014:12:2", "value": { "name": "value", "nodeType": "YulIdentifier", - "src": "7021:5:1" + "src": "7021:5:2" }, "variableNames": [ { "name": "ret", "nodeType": "YulIdentifier", - "src": "7014:3:1" + "src": "7014:3:2" } ] } @@ -4339,7 +4339,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6990:5:1", + "src": "6990:5:2", "type": "" } ], @@ -4347,20 +4347,20 @@ { "name": "ret", "nodeType": "YulTypedName", - "src": "7000:3:1", + "src": "7000:3:2", "type": "" } ], - "src": "6972:60:1" + "src": "6972:60:2" }, { "body": { "nodeType": "YulBlock", - "src": "7098:82:1", + "src": "7098:82:2", "statements": [ { "nodeType": "YulAssignment", - "src": "7108:66:1", + "src": "7108:66:2", "value": { "arguments": [ { @@ -4370,40 +4370,40 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "7166:5:1" + "src": "7166:5:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "7148:17:1" + "src": "7148:17:2" }, "nodeType": "YulFunctionCall", - "src": "7148:24:1" + "src": "7148:24:2" } ], "functionName": { "name": "identity", "nodeType": "YulIdentifier", - "src": "7139:8:1" + "src": "7139:8:2" }, "nodeType": "YulFunctionCall", - "src": "7139:34:1" + "src": "7139:34:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "7121:17:1" + "src": "7121:17:2" }, "nodeType": "YulFunctionCall", - "src": "7121:53:1" + "src": "7121:53:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "7108:9:1" + "src": "7108:9:2" } ] } @@ -4415,7 +4415,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "7078:5:1", + "src": "7078:5:2", "type": "" } ], @@ -4423,41 +4423,41 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "7088:9:1", + "src": "7088:9:2", "type": "" } ], - "src": "7038:142:1" + "src": "7038:142:2" }, { "body": { "nodeType": "YulBlock", - "src": "7246:66:1", + "src": "7246:66:2", "statements": [ { "nodeType": "YulAssignment", - "src": "7256:50:1", + "src": "7256:50:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "7300:5:1" + "src": "7300:5:2" } ], "functionName": { "name": "convert_t_uint160_to_t_uint160", "nodeType": "YulIdentifier", - "src": "7269:30:1" + "src": "7269:30:2" }, "nodeType": "YulFunctionCall", - "src": "7269:37:1" + "src": "7269:37:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "7256:9:1" + "src": "7256:9:2" } ] } @@ -4469,7 +4469,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "7226:5:1", + "src": "7226:5:2", "type": "" } ], @@ -4477,53 +4477,53 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "7236:9:1", + "src": "7236:9:2", "type": "" } ], - "src": "7186:126:1" + "src": "7186:126:2" }, { "body": { "nodeType": "YulBlock", - "src": "7397:66:1", + "src": "7398:66:2", "statements": [ { "nodeType": "YulAssignment", - "src": "7407:50:1", + "src": "7408:50:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "7451:5:1" + "src": "7452:5:2" } ], "functionName": { "name": "convert_t_uint160_to_t_address", "nodeType": "YulIdentifier", - "src": "7420:30:1" + "src": "7421:30:2" }, "nodeType": "YulFunctionCall", - "src": "7420:37:1" + "src": "7421:37:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "7407:9:1" + "src": "7408:9:2" } ] } ] }, - "name": "convert_t_contract$_RelayEncoder_$78_to_t_address", + "name": "convert_t_contract$_RelayEncoder_$206_to_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "7377:5:1", + "src": "7378:5:2", "type": "" } ], @@ -4531,16 +4531,16 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "7387:9:1", + "src": "7388:9:2", "type": "" } ], - "src": "7318:145:1" + "src": "7318:146:2" }, { "body": { "nodeType": "YulBlock", - "src": "7553:85:1", + "src": "7555:86:2", "statements": [ { "expression": { @@ -4548,75 +4548,75 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "7570:3:1" + "src": "7572:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "7625:5:1" + "src": "7628:5:2" } ], "functionName": { - "name": "convert_t_contract$_RelayEncoder_$78_to_t_address", + "name": "convert_t_contract$_RelayEncoder_$206_to_t_address", "nodeType": "YulIdentifier", - "src": "7575:49:1" + "src": "7577:50:2" }, "nodeType": "YulFunctionCall", - "src": "7575:56:1" + "src": "7577:57:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "7563:6:1" + "src": "7565:6:2" }, "nodeType": "YulFunctionCall", - "src": "7563:69:1" + "src": "7565:70:2" }, "nodeType": "YulExpressionStatement", - "src": "7563:69:1" + "src": "7565:70:2" } ] }, - "name": "abi_encode_t_contract$_RelayEncoder_$78_to_t_address_fromStack", + "name": "abi_encode_t_contract$_RelayEncoder_$206_to_t_address_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "7541:5:1", + "src": "7543:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "7548:3:1", + "src": "7550:3:2", "type": "" } ], - "src": "7469:169:1" + "src": "7470:171:2" }, { "body": { "nodeType": "YulBlock", - "src": "7761:143:1", + "src": "7765:144:2", "statements": [ { "nodeType": "YulAssignment", - "src": "7771:26:1", + "src": "7775:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7783:9:1" + "src": "7787:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7794:2:1", + "src": "7798:2:2", "type": "", "value": "32" } @@ -4624,16 +4624,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7779:3:1" + "src": "7783:3:2" }, "nodeType": "YulFunctionCall", - "src": "7779:18:1" + "src": "7783:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "7771:4:1" + "src": "7775:4:2" } ] }, @@ -4643,19 +4643,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "7870:6:1" + "src": "7875:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7883:9:1" + "src": "7888:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7894:1:1", + "src": "7899:1:2", "type": "", "value": "0" } @@ -4663,38 +4663,38 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7879:3:1" + "src": "7884:3:2" }, "nodeType": "YulFunctionCall", - "src": "7879:17:1" + "src": "7884:17:2" } ], "functionName": { - "name": "abi_encode_t_contract$_RelayEncoder_$78_to_t_address_fromStack", + "name": "abi_encode_t_contract$_RelayEncoder_$206_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "7807:62:1" + "src": "7811:63:2" }, "nodeType": "YulFunctionCall", - "src": "7807:90:1" + "src": "7811:91:2" }, "nodeType": "YulExpressionStatement", - "src": "7807:90:1" + "src": "7811:91:2" } ] }, - "name": "abi_encode_tuple_t_contract$_RelayEncoder_$78__to_t_address__fromStack_reversed", + "name": "abi_encode_tuple_t_contract$_RelayEncoder_$206__to_t_address__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "7733:9:1", + "src": "7737:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "7745:6:1", + "src": "7749:6:2", "type": "" } ], @@ -4702,21 +4702,21 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "7756:4:1", + "src": "7760:4:2", "type": "" } ], - "src": "7644:260:1" + "src": "7647:262:2" }, { "body": { "nodeType": "YulBlock", - "src": "7985:432:1", + "src": "7990:432:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8031:83:1", + "src": "8036:83:2", "statements": [ { "expression": { @@ -4724,13 +4724,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "8033:77:1" + "src": "8038:77:2" }, "nodeType": "YulFunctionCall", - "src": "8033:79:1" + "src": "8038:79:2" }, "nodeType": "YulExpressionStatement", - "src": "8033:79:1" + "src": "8038:79:2" } ] }, @@ -4741,26 +4741,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "8006:7:1" + "src": "8011:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "8015:9:1" + "src": "8020:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "8002:3:1" + "src": "8007:3:2" }, "nodeType": "YulFunctionCall", - "src": "8002:23:1" + "src": "8007:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8027:2:1", + "src": "8032:2:2", "type": "", "value": "32" } @@ -4768,21 +4768,21 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "7998:3:1" + "src": "8003:3:2" }, "nodeType": "YulFunctionCall", - "src": "7998:32:1" + "src": "8003:32:2" }, "nodeType": "YulIf", - "src": "7995:119:1" + "src": "8000:119:2" }, { "nodeType": "YulBlock", - "src": "8124:286:1", + "src": "8129:286:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "8139:45:1", + "src": "8144:45:2", "value": { "arguments": [ { @@ -4790,12 +4790,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "8170:9:1" + "src": "8175:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8181:1:1", + "src": "8186:1:2", "type": "", "value": "0" } @@ -4803,25 +4803,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8166:3:1" + "src": "8171:3:2" }, "nodeType": "YulFunctionCall", - "src": "8166:17:1" + "src": "8171:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "8153:12:1" + "src": "8158:12:2" }, "nodeType": "YulFunctionCall", - "src": "8153:31:1" + "src": "8158:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "8143:6:1", + "src": "8148:6:2", "type": "" } ] @@ -4829,7 +4829,7 @@ { "body": { "nodeType": "YulBlock", - "src": "8231:83:1", + "src": "8236:83:2", "statements": [ { "expression": { @@ -4837,13 +4837,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "8233:77:1" + "src": "8238:77:2" }, "nodeType": "YulFunctionCall", - "src": "8233:79:1" + "src": "8238:79:2" }, "nodeType": "YulExpressionStatement", - "src": "8233:79:1" + "src": "8238:79:2" } ] }, @@ -4852,12 +4852,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "8203:6:1" + "src": "8208:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8211:18:1", + "src": "8216:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4865,17 +4865,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "8200:2:1" + "src": "8205:2:2" }, "nodeType": "YulFunctionCall", - "src": "8200:30:1" + "src": "8205:30:2" }, "nodeType": "YulIf", - "src": "8197:117:1" + "src": "8202:117:2" }, { "nodeType": "YulAssignment", - "src": "8328:72:1", + "src": "8333:72:2", "value": { "arguments": [ { @@ -4883,41 +4883,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "8372:9:1" + "src": "8377:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "8383:6:1" + "src": "8388:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8368:3:1" + "src": "8373:3:2" }, "nodeType": "YulFunctionCall", - "src": "8368:22:1" + "src": "8373:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "8392:7:1" + "src": "8397:7:2" } ], "functionName": { "name": "abi_decode_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "8338:29:1" + "src": "8343:29:2" }, "nodeType": "YulFunctionCall", - "src": "8338:62:1" + "src": "8343:62:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "8328:6:1" + "src": "8333:6:2" } ] } @@ -4931,13 +4931,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "7955:9:1", + "src": "7960:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "7966:7:1", + "src": "7971:7:2", "type": "" } ], @@ -4945,21 +4945,21 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "7978:6:1", + "src": "7983:6:2", "type": "" } ], - "src": "7910:507:1" + "src": "7915:507:2" }, { "body": { "nodeType": "YulBlock", - "src": "8505:229:1", + "src": "8510:229:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8610:22:1", + "src": "8615:22:2", "statements": [ { "expression": { @@ -4967,13 +4967,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "8612:16:1" + "src": "8617:16:2" }, "nodeType": "YulFunctionCall", - "src": "8612:18:1" + "src": "8617:18:2" }, "nodeType": "YulExpressionStatement", - "src": "8612:18:1" + "src": "8617:18:2" } ] }, @@ -4982,12 +4982,12 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "8582:6:1" + "src": "8587:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8590:18:1", + "src": "8595:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4995,28 +4995,28 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "8579:2:1" + "src": "8584:2:2" }, "nodeType": "YulFunctionCall", - "src": "8579:30:1" + "src": "8584:30:2" }, "nodeType": "YulIf", - "src": "8576:56:1" + "src": "8581:56:2" }, { "nodeType": "YulAssignment", - "src": "8642:25:1", + "src": "8647:25:2", "value": { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "8654:6:1" + "src": "8659:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8662:4:1", + "src": "8667:4:2", "type": "", "value": "0x20" } @@ -5024,33 +5024,33 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "8650:3:1" + "src": "8655:3:2" }, "nodeType": "YulFunctionCall", - "src": "8650:17:1" + "src": "8655:17:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "8642:4:1" + "src": "8647:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "8704:23:1", + "src": "8709:23:2", "value": { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "8716:4:1" + "src": "8721:4:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8722:4:1", + "src": "8727:4:2", "type": "", "value": "0x20" } @@ -5058,16 +5058,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8712:3:1" + "src": "8717:3:2" }, "nodeType": "YulFunctionCall", - "src": "8712:15:1" + "src": "8717:15:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "8704:4:1" + "src": "8709:4:2" } ] } @@ -5079,7 +5079,7 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "8489:6:1", + "src": "8494:6:2", "type": "" } ], @@ -5087,16 +5087,16 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "8500:4:1", + "src": "8505:4:2", "type": "" } ], - "src": "8423:311:1" + "src": "8428:311:2" }, { "body": { "nodeType": "YulBlock", - "src": "8829:28:1", + "src": "8834:28:2", "statements": [ { "expression": { @@ -5104,14 +5104,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "8846:1:1", + "src": "8851:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8849:1:1", + "src": "8854:1:2", "type": "", "value": "0" } @@ -5119,28 +5119,28 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "8839:6:1" + "src": "8844:6:2" }, "nodeType": "YulFunctionCall", - "src": "8839:12:1" + "src": "8844:12:2" }, "nodeType": "YulExpressionStatement", - "src": "8839:12:1" + "src": "8844:12:2" } ] }, "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", "nodeType": "YulFunctionDefinition", - "src": "8740:117:1" + "src": "8745:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "8982:608:1", + "src": "8987:608:2", "statements": [ { "nodeType": "YulAssignment", - "src": "8992:90:1", + "src": "8997:90:2", "value": { "arguments": [ { @@ -5148,47 +5148,47 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "9074:6:1" + "src": "9079:6:2" } ], "functionName": { "name": "array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "9017:56:1" + "src": "9022:56:2" }, "nodeType": "YulFunctionCall", - "src": "9017:64:1" + "src": "9022:64:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "9001:15:1" + "src": "9006:15:2" }, "nodeType": "YulFunctionCall", - "src": "9001:81:1" + "src": "9006:81:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "8992:5:1" + "src": "8997:5:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "9091:16:1", + "src": "9096:16:2", "value": { "name": "array", "nodeType": "YulIdentifier", - "src": "9102:5:1" + "src": "9107:5:2" }, "variables": [ { "name": "dst", "nodeType": "YulTypedName", - "src": "9095:3:1", + "src": "9100:3:2", "type": "" } ] @@ -5199,39 +5199,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "9124:5:1" + "src": "9129:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "9131:6:1" + "src": "9136:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "9117:6:1" + "src": "9122:6:2" }, "nodeType": "YulFunctionCall", - "src": "9117:21:1" + "src": "9122:21:2" }, "nodeType": "YulExpressionStatement", - "src": "9117:21:1" + "src": "9122:21:2" }, { "nodeType": "YulAssignment", - "src": "9147:23:1", + "src": "9152:23:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "9158:5:1" + "src": "9163:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9165:4:1", + "src": "9170:4:2", "type": "", "value": "0x20" } @@ -5239,40 +5239,40 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9154:3:1" + "src": "9159:3:2" }, "nodeType": "YulFunctionCall", - "src": "9154:16:1" + "src": "9159:16:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "9147:3:1" + "src": "9152:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "9180:44:1", + "src": "9185:44:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "9198:6:1" + "src": "9203:6:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "9210:6:1" + "src": "9215:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9218:4:1", + "src": "9223:4:2", "type": "", "value": "0x20" } @@ -5280,25 +5280,25 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "9206:3:1" + "src": "9211:3:2" }, "nodeType": "YulFunctionCall", - "src": "9206:17:1" + "src": "9211:17:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9194:3:1" + "src": "9199:3:2" }, "nodeType": "YulFunctionCall", - "src": "9194:30:1" + "src": "9199:30:2" }, "variables": [ { "name": "srcEnd", "nodeType": "YulTypedName", - "src": "9184:6:1", + "src": "9189:6:2", "type": "" } ] @@ -5306,7 +5306,7 @@ { "body": { "nodeType": "YulBlock", - "src": "9252:103:1", + "src": "9257:103:2", "statements": [ { "expression": { @@ -5314,13 +5314,13 @@ "functionName": { "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", "nodeType": "YulIdentifier", - "src": "9266:77:1" + "src": "9271:77:2" }, "nodeType": "YulFunctionCall", - "src": "9266:79:1" + "src": "9271:79:2" }, "nodeType": "YulExpressionStatement", - "src": "9266:79:1" + "src": "9271:79:2" } ] }, @@ -5329,43 +5329,43 @@ { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "9239:6:1" + "src": "9244:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "9247:3:1" + "src": "9252:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "9236:2:1" + "src": "9241:2:2" }, "nodeType": "YulFunctionCall", - "src": "9236:15:1" + "src": "9241:15:2" }, "nodeType": "YulIf", - "src": "9233:122:1" + "src": "9238:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "9440:144:1", + "src": "9445:144:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9455:21:1", + "src": "9460:21:2", "value": { "name": "src", "nodeType": "YulIdentifier", - "src": "9473:3:1" + "src": "9478:3:2" }, "variables": [ { "name": "elementPos", "nodeType": "YulTypedName", - "src": "9459:10:1", + "src": "9464:10:2", "type": "" } ] @@ -5376,55 +5376,55 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "9497:3:1" + "src": "9502:3:2" }, { "arguments": [ { "name": "elementPos", "nodeType": "YulIdentifier", - "src": "9523:10:1" + "src": "9528:10:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "9535:3:1" + "src": "9540:3:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "9502:20:1" + "src": "9507:20:2" }, "nodeType": "YulFunctionCall", - "src": "9502:37:1" + "src": "9507:37:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "9490:6:1" + "src": "9495:6:2" }, "nodeType": "YulFunctionCall", - "src": "9490:50:1" + "src": "9495:50:2" }, "nodeType": "YulExpressionStatement", - "src": "9490:50:1" + "src": "9495:50:2" }, { "nodeType": "YulAssignment", - "src": "9553:21:1", + "src": "9558:21:2", "value": { "arguments": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "9564:3:1" + "src": "9569:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9569:4:1", + "src": "9574:4:2", "type": "", "value": "0x20" } @@ -5432,16 +5432,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9560:3:1" + "src": "9565:3:2" }, "nodeType": "YulFunctionCall", - "src": "9560:14:1" + "src": "9565:14:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "9553:3:1" + "src": "9558:3:2" } ] } @@ -5452,41 +5452,41 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "9393:3:1" + "src": "9398:3:2" }, { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "9398:6:1" + "src": "9403:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "9390:2:1" + "src": "9395:2:2" }, "nodeType": "YulFunctionCall", - "src": "9390:15:1" + "src": "9395:15:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "9406:25:1", + "src": "9411:25:2", "statements": [ { "nodeType": "YulAssignment", - "src": "9408:21:1", + "src": "9413:21:2", "value": { "arguments": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "9419:3:1" + "src": "9424:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9424:4:1", + "src": "9429:4:2", "type": "", "value": "0x20" } @@ -5494,16 +5494,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9415:3:1" + "src": "9420:3:2" }, "nodeType": "YulFunctionCall", - "src": "9415:14:1" + "src": "9420:14:2" }, "variableNames": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "9408:3:1" + "src": "9413:3:2" } ] } @@ -5511,28 +5511,28 @@ }, "pre": { "nodeType": "YulBlock", - "src": "9368:21:1", + "src": "9373:21:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9370:17:1", + "src": "9375:17:2", "value": { "name": "offset", "nodeType": "YulIdentifier", - "src": "9381:6:1" + "src": "9386:6:2" }, "variables": [ { "name": "src", "nodeType": "YulTypedName", - "src": "9374:3:1", + "src": "9379:3:2", "type": "" } ] } ] }, - "src": "9364:220:1" + "src": "9369:220:2" } ] }, @@ -5542,19 +5542,19 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "8952:6:1", + "src": "8957:6:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "8960:6:1", + "src": "8965:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "8968:3:1", + "src": "8973:3:2", "type": "" } ], @@ -5562,21 +5562,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "8976:5:1", + "src": "8981:5:2", "type": "" } ], - "src": "8880:710:1" + "src": "8885:710:2" }, { "body": { "nodeType": "YulBlock", - "src": "9690:293:1", + "src": "9695:293:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "9739:83:1", + "src": "9744:83:2", "statements": [ { "expression": { @@ -5584,13 +5584,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "9741:77:1" + "src": "9746:77:2" }, "nodeType": "YulFunctionCall", - "src": "9741:79:1" + "src": "9746:79:2" }, "nodeType": "YulExpressionStatement", - "src": "9741:79:1" + "src": "9746:79:2" } ] }, @@ -5603,12 +5603,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "9718:6:1" + "src": "9723:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9726:4:1", + "src": "9731:4:2", "type": "", "value": "0x1f" } @@ -5616,68 +5616,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9714:3:1" + "src": "9719:3:2" }, "nodeType": "YulFunctionCall", - "src": "9714:17:1" + "src": "9719:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "9733:3:1" + "src": "9738:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "9710:3:1" + "src": "9715:3:2" }, "nodeType": "YulFunctionCall", - "src": "9710:27:1" + "src": "9715:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "9703:6:1" + "src": "9708:6:2" }, "nodeType": "YulFunctionCall", - "src": "9703:35:1" + "src": "9708:35:2" }, "nodeType": "YulIf", - "src": "9700:122:1" + "src": "9705:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "9831:34:1", + "src": "9836:34:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "9858:6:1" + "src": "9863:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "9845:12:1" + "src": "9850:12:2" }, "nodeType": "YulFunctionCall", - "src": "9845:20:1" + "src": "9850:20:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "9835:6:1", + "src": "9840:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "9874:103:1", + "src": "9879:103:2", "value": { "arguments": [ { @@ -5685,12 +5685,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "9950:6:1" + "src": "9955:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9958:4:1", + "src": "9963:4:2", "type": "", "value": "0x20" } @@ -5698,35 +5698,35 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9946:3:1" + "src": "9951:3:2" }, "nodeType": "YulFunctionCall", - "src": "9946:17:1" + "src": "9951:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "9965:6:1" + "src": "9970:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "9973:3:1" + "src": "9978:3:2" } ], "functionName": { "name": "abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "9883:62:1" + "src": "9888:62:2" }, "nodeType": "YulFunctionCall", - "src": "9883:94:1" + "src": "9888:94:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "9874:5:1" + "src": "9879:5:2" } ] } @@ -5738,13 +5738,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "9668:6:1", + "src": "9673:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "9676:3:1", + "src": "9681:3:2", "type": "" } ], @@ -5752,21 +5752,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "9684:5:1", + "src": "9689:5:2", "type": "" } ], - "src": "9613:370:1" + "src": "9618:370:2" }, { "body": { "nodeType": "YulBlock", - "src": "10080:448:1", + "src": "10085:448:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "10126:83:1", + "src": "10131:83:2", "statements": [ { "expression": { @@ -5774,13 +5774,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "10128:77:1" + "src": "10133:77:2" }, "nodeType": "YulFunctionCall", - "src": "10128:79:1" + "src": "10133:79:2" }, "nodeType": "YulExpressionStatement", - "src": "10128:79:1" + "src": "10133:79:2" } ] }, @@ -5791,26 +5791,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "10101:7:1" + "src": "10106:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10110:9:1" + "src": "10115:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "10097:3:1" + "src": "10102:3:2" }, "nodeType": "YulFunctionCall", - "src": "10097:23:1" + "src": "10102:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10122:2:1", + "src": "10127:2:2", "type": "", "value": "32" } @@ -5818,21 +5818,21 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "10093:3:1" + "src": "10098:3:2" }, "nodeType": "YulFunctionCall", - "src": "10093:32:1" + "src": "10098:32:2" }, "nodeType": "YulIf", - "src": "10090:119:1" + "src": "10095:119:2" }, { "nodeType": "YulBlock", - "src": "10219:302:1", + "src": "10224:302:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "10234:45:1", + "src": "10239:45:2", "value": { "arguments": [ { @@ -5840,12 +5840,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10265:9:1" + "src": "10270:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10276:1:1", + "src": "10281:1:2", "type": "", "value": "0" } @@ -5853,25 +5853,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10261:3:1" + "src": "10266:3:2" }, "nodeType": "YulFunctionCall", - "src": "10261:17:1" + "src": "10266:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "10248:12:1" + "src": "10253:12:2" }, "nodeType": "YulFunctionCall", - "src": "10248:31:1" + "src": "10253:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "10238:6:1", + "src": "10243:6:2", "type": "" } ] @@ -5879,7 +5879,7 @@ { "body": { "nodeType": "YulBlock", - "src": "10326:83:1", + "src": "10331:83:2", "statements": [ { "expression": { @@ -5887,13 +5887,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "10328:77:1" + "src": "10333:77:2" }, "nodeType": "YulFunctionCall", - "src": "10328:79:1" + "src": "10333:79:2" }, "nodeType": "YulExpressionStatement", - "src": "10328:79:1" + "src": "10333:79:2" } ] }, @@ -5902,12 +5902,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "10298:6:1" + "src": "10303:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10306:18:1", + "src": "10311:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -5915,17 +5915,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "10295:2:1" + "src": "10300:2:2" }, "nodeType": "YulFunctionCall", - "src": "10295:30:1" + "src": "10300:30:2" }, "nodeType": "YulIf", - "src": "10292:117:1" + "src": "10297:117:2" }, { "nodeType": "YulAssignment", - "src": "10423:88:1", + "src": "10428:88:2", "value": { "arguments": [ { @@ -5933,41 +5933,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "10483:9:1" + "src": "10488:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "10494:6:1" + "src": "10499:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10479:3:1" + "src": "10484:3:2" }, "nodeType": "YulFunctionCall", - "src": "10479:22:1" + "src": "10484:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "10503:7:1" + "src": "10508:7:2" } ], "functionName": { "name": "abi_decode_t_array$_t_uint256_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "10433:45:1" + "src": "10438:45:2" }, "nodeType": "YulFunctionCall", - "src": "10433:78:1" + "src": "10438:78:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "10423:6:1" + "src": "10428:6:2" } ] } @@ -5981,13 +5981,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "10050:9:1", + "src": "10055:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "10061:7:1", + "src": "10066:7:2", "type": "" } ], @@ -5995,25 +5995,25 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "10073:6:1", + "src": "10078:6:2", "type": "" } ], - "src": "9989:539:1" + "src": "9994:539:2" } ] }, - "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value0, tail)\n\n }\n\n function cleanup_t_uint32(value) -> cleaned {\n cleaned := and(value, 0xffffffff)\n }\n\n function validator_revert_t_uint32(value) {\n if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint32(value)\n }\n\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_uint256t_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_RelayEncoder_$78_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_RelayEncoder_$78_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_RelayEncoder_$78_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_RelayEncoder_$78__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_RelayEncoder_$78_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n // uint256[]\n function abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_uint256(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // uint256[]\n function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", - "id": 1, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value0, tail)\n\n }\n\n function cleanup_t_uint32(value) -> cleaned {\n cleaned := and(value, 0xffffffff)\n }\n\n function validator_revert_t_uint32(value) {\n if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint32(value)\n }\n\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_uint256t_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_RelayEncoder_$206_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_RelayEncoder_$206_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_RelayEncoder_$206_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_RelayEncoder_$206__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_RelayEncoder_$206_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n // uint256[]\n function abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_uint256_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_uint256(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // uint256[]\n function abi_decode_t_array$_t_uint256_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_uint256_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_array$_t_uint256_$dyn_memory_ptr(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_array$_t_uint256_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 2, "language": "Yul", "name": "#utility.yul" } ], "immutableReferences": {}, "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c806361bdd2e01161007157806361bdd2e01461019e5780637a8f48c2146101bc5780639801b147146101ec578063a7cb124b1461021c578063add6b3bf1461024c578063bc4b21871461027c576100a9565b80632cd61217146100ae5780632d220331146100de578063316273761461010e5780633a0d803a1461013e57806349def3261461016e575b600080fd5b6100c860048036038101906100c3919061057f565b61029a565b6040516100d59190610645565b60405180910390f35b6100f860048036038101906100f391906106a3565b6102d9565b6040516101059190610645565b60405180910390f35b61012860048036038101906101239190610805565b610318565b6040516101359190610645565b60405180910390f35b610158600480360381019061015391906108ac565b610359565b6040516101659190610645565b60405180910390f35b6101886004803603810190610183919061057f565b610399565b6040516101959190610645565b60405180910390f35b6101a66103d8565b6040516101b3919061096b565b60405180910390f35b6101d660048036038101906101d1919061057f565b6103fc565b6040516101e39190610645565b60405180910390f35b61020660048036038101906102019190610986565b61043b565b6040516102139190610645565b60405180910390f35b61023660048036038101906102319190610a97565b61047a565b6040516102439190610645565b60405180910390f35b6102666004803603810190610261919061057f565b6104b9565b6040516102739190610645565b60405180910390f35b6102846104f8565b6040516102919190610645565b60405180910390f35b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090509392505050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905092915050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b6000602082840312156105955761059461053f565b5b60006105a38482850161056a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105e65780820151818401526020810190506105cb565b838111156105f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000610617826105ac565b61062181856105b7565b93506106318185602086016105c8565b61063a816105fb565b840191505092915050565b6000602082019050818103600083015261065f818461060c565b905092915050565b600063ffffffff82169050919050565b61068081610667565b811461068b57600080fd5b50565b60008135905061069d81610677565b92915050565b6000602082840312156106b9576106b861053f565b5b60006106c78482850161068e565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610712826105fb565b810181811067ffffffffffffffff82111715610731576107306106da565b5b80604052505050565b6000610744610535565b90506107508282610709565b919050565b600067ffffffffffffffff8211156107705761076f6106da565b5b610779826105fb565b9050602081019050919050565b82818337600083830152505050565b60006107a86107a384610755565b61073a565b9050828152602081018484840111156107c4576107c36106d5565b5b6107cf848285610786565b509392505050565b600082601f8301126107ec576107eb6106d0565b5b81356107fc848260208601610795565b91505092915050565b60008060006060848603121561081e5761081d61053f565b5b600061082c8682870161056a565b935050602061083d8682870161056a565b925050604084013567ffffffffffffffff81111561085e5761085d610544565b5b61086a868287016107d7565b9150509250925092565b60008115159050919050565b61088981610874565b811461089457600080fd5b50565b6000813590506108a681610880565b92915050565b600080604083850312156108c3576108c261053f565b5b60006108d18582860161056a565b92505060206108e285828601610897565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061093161092c610927846108ec565b61090c565b6108ec565b9050919050565b600061094382610916565b9050919050565b600061095582610938565b9050919050565b6109658161094a565b82525050565b6000602082019050610980600083018461095c565b92915050565b60006020828403121561099c5761099b61053f565b5b600082013567ffffffffffffffff8111156109ba576109b9610544565b5b6109c6848285016107d7565b91505092915050565b600067ffffffffffffffff8211156109ea576109e96106da565b5b602082029050602081019050919050565b600080fd5b6000610a13610a0e846109cf565b61073a565b90508083825260208201905060208402830185811115610a3657610a356109fb565b5b835b81811015610a5f5780610a4b888261056a565b845260208401935050602081019050610a38565b5050509392505050565b600082601f830112610a7e57610a7d6106d0565b5b8135610a8e848260208601610a00565b91505092915050565b600060208284031215610aad57610aac61053f565b5b600082013567ffffffffffffffff811115610acb57610aca610544565b5b610ad784828501610a69565b9150509291505056fea26469706673582212206f7085f9fce5641d8db25d8b9b823efdd7a104ea3e6ff92717d013741fc0ce7864736f6c63430008090033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x61BDD2E0 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x61BDD2E0 EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x7A8F48C2 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x9801B147 EQ PUSH2 0x1EC JUMPI DUP1 PUSH4 0xA7CB124B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xADD6B3BF EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xBC4B2187 EQ PUSH2 0x27C JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x2CD61217 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x2D220331 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x31627376 EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x3A0D803A EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x49DEF326 EQ PUSH2 0x16E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x29A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x105 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x128 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x123 SWAP2 SWAP1 PUSH2 0x805 JUMP JUMPDEST PUSH2 0x318 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x158 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x153 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x359 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x165 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x188 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x183 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A6 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B3 SWAP2 SWAP1 PUSH2 0x96B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1D1 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E3 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x206 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x201 SWAP2 SWAP1 PUSH2 0x986 JUMP JUMPDEST PUSH2 0x43B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x213 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x236 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x231 SWAP2 SWAP1 PUSH2 0xA97 JUMP JUMPDEST PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x243 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x266 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x4B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x284 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x291 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x55C DUP2 PUSH2 0x549 JUMP JUMPDEST DUP2 EQ PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x579 DUP2 PUSH2 0x553 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x595 JUMPI PUSH2 0x594 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x5A3 DUP5 DUP3 DUP6 ADD PUSH2 0x56A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5E6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5CB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5F5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x617 DUP3 PUSH2 0x5AC JUMP JUMPDEST PUSH2 0x621 DUP2 DUP6 PUSH2 0x5B7 JUMP JUMPDEST SWAP4 POP PUSH2 0x631 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x63A DUP2 PUSH2 0x5FB JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x65F DUP2 DUP5 PUSH2 0x60C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x680 DUP2 PUSH2 0x667 JUMP JUMPDEST DUP2 EQ PUSH2 0x68B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x69D DUP2 PUSH2 0x677 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B8 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6C7 DUP5 DUP3 DUP6 ADD PUSH2 0x68E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x712 DUP3 PUSH2 0x5FB JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x731 JUMPI PUSH2 0x730 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x744 PUSH2 0x535 JUMP JUMPDEST SWAP1 POP PUSH2 0x750 DUP3 DUP3 PUSH2 0x709 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x770 JUMPI PUSH2 0x76F PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH2 0x779 DUP3 PUSH2 0x5FB JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A8 PUSH2 0x7A3 DUP5 PUSH2 0x755 JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x7C4 JUMPI PUSH2 0x7C3 PUSH2 0x6D5 JUMP JUMPDEST JUMPDEST PUSH2 0x7CF DUP5 DUP3 DUP6 PUSH2 0x786 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7EC JUMPI PUSH2 0x7EB PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7FC DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x795 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x81E JUMPI PUSH2 0x81D PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x82C DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x83D DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x85E JUMPI PUSH2 0x85D PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x86A DUP7 DUP3 DUP8 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x889 DUP2 PUSH2 0x874 JUMP JUMPDEST DUP2 EQ PUSH2 0x894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x8A6 DUP2 PUSH2 0x880 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C3 JUMPI PUSH2 0x8C2 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x8D1 DUP6 DUP3 DUP7 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x8E2 DUP6 DUP3 DUP7 ADD PUSH2 0x897 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x931 PUSH2 0x92C PUSH2 0x927 DUP5 PUSH2 0x8EC JUMP JUMPDEST PUSH2 0x90C JUMP JUMPDEST PUSH2 0x8EC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x943 DUP3 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x955 DUP3 PUSH2 0x938 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x965 DUP2 PUSH2 0x94A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x980 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x95C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x99C JUMPI PUSH2 0x99B PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9BA JUMPI PUSH2 0x9B9 PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x9C6 DUP5 DUP3 DUP6 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x9EA JUMPI PUSH2 0x9E9 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xA13 PUSH2 0xA0E DUP5 PUSH2 0x9CF JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA36 JUMPI PUSH2 0xA35 PUSH2 0x9FB JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA5F JUMPI DUP1 PUSH2 0xA4B DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xA38 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7E JUMPI PUSH2 0xA7D PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA8E DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xA00 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAD JUMPI PUSH2 0xAAC PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xACB JUMPI PUSH2 0xACA PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0xAD7 DUP5 DUP3 DUP6 ADD PUSH2 0xA69 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x7085F9FCE5641D8DB25D8B9B823EFDD7 LOG1 DIV 0xEA RETURNDATACOPY PUSH16 0xF92717D013741FC0CE7864736F6C6343 STOP ADDMOD MULMOD STOP CALLER ", - "sourceMap": "4022:1971:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4659:152;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4820:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4251:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4992:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4495:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4150:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5664:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5483:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5184:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5836:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5359:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4659:152;4752:19;4787:13;;;;;;;;;;;;;;;;;;;4659:152;;;:::o;4820:163::-;4924:19;4959:13;;;;;;;;;;;;;;;;;;;4820:163;;;:::o;4251:235::-;4428:19;4462:13;;;;;;;;;;;;;;;;;;;4251:235;;;;;:::o;4992:183::-;5116:19;5151:13;;;;;;;;;;;;;;;;;;;4992:183;;;;:::o;4495:155::-;4592:19;4626:13;;;;;;;;;;;;;;;;;;;4495:155;;;:::o;4150:91::-;;;;;;;;;;;;:::o;5664:163::-;5769:19;5803:13;;;;;;;;;;;;;;;;;;;5664:163;;;:::o;5483:172::-;5596:19;5631:13;;;;;;;;;;;;;;;;;;;5483:172;;;:::o;5184:166::-;5291:19;5326:13;;;;;;;;;;;;;;;;;;;5184:166;;;:::o;5836:151::-;5929:19;5963:13;;;;;;;;;;;;;;;;;;;5836:151;;;:::o;5359:115::-;5415:19;5450:13;;;;;;;;;;;;;;;;;;;5359:115;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:98::-;1076:6;1110:5;1104:12;1094:22;;1025:98;;;:::o;1129:168::-;1212:11;1246:6;1241:3;1234:19;1286:4;1281:3;1277:14;1262:29;;1129:168;;;;:::o;1303:307::-;1371:1;1381:113;1395:6;1392:1;1389:13;1381:113;;;1480:1;1475:3;1471:11;1465:18;1461:1;1456:3;1452:11;1445:39;1417:2;1414:1;1410:10;1405:15;;1381:113;;;1512:6;1509:1;1506:13;1503:101;;;1592:1;1583:6;1578:3;1574:16;1567:27;1503:101;1352:258;1303:307;;;:::o;1616:102::-;1657:6;1708:2;1704:7;1699:2;1692:5;1688:14;1684:28;1674:38;;1616:102;;;:::o;1724:360::-;1810:3;1838:38;1870:5;1838:38;:::i;:::-;1892:70;1955:6;1950:3;1892:70;:::i;:::-;1885:77;;1971:52;2016:6;2011:3;2004:4;1997:5;1993:16;1971:52;:::i;:::-;2048:29;2070:6;2048:29;:::i;:::-;2043:3;2039:39;2032:46;;1814:270;1724:360;;;;:::o;2090:309::-;2201:4;2239:2;2228:9;2224:18;2216:26;;2288:9;2282:4;2278:20;2274:1;2263:9;2259:17;2252:47;2316:76;2387:4;2378:6;2316:76;:::i;:::-;2308:84;;2090:309;;;;:::o;2405:93::-;2441:7;2481:10;2474:5;2470:22;2459:33;;2405:93;;;:::o;2504:120::-;2576:23;2593:5;2576:23;:::i;:::-;2569:5;2566:34;2556:62;;2614:1;2611;2604:12;2556:62;2504:120;:::o;2630:137::-;2675:5;2713:6;2700:20;2691:29;;2729:32;2755:5;2729:32;:::i;:::-;2630:137;;;;:::o;2773:327::-;2831:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:52;3075:7;3066:6;3055:9;3051:22;3031:52;:::i;:::-;3021:62;;2977:116;2773:327;;;;:::o;3106:117::-;3215:1;3212;3205:12;3229:117;3338:1;3335;3328:12;3352:180;3400:77;3397:1;3390:88;3497:4;3494:1;3487:15;3521:4;3518:1;3511:15;3538:281;3621:27;3643:4;3621:27;:::i;:::-;3613:6;3609:40;3751:6;3739:10;3736:22;3715:18;3703:10;3700:34;3697:62;3694:88;;;3762:18;;:::i;:::-;3694:88;3802:10;3798:2;3791:22;3581:238;3538:281;;:::o;3825:129::-;3859:6;3886:20;;:::i;:::-;3876:30;;3915:33;3943:4;3935:6;3915:33;:::i;:::-;3825:129;;;:::o;3960:307::-;4021:4;4111:18;4103:6;4100:30;4097:56;;;4133:18;;:::i;:::-;4097:56;4171:29;4193:6;4171:29;:::i;:::-;4163:37;;4255:4;4249;4245:15;4237:23;;3960:307;;;:::o;4273:154::-;4357:6;4352:3;4347;4334:30;4419:1;4410:6;4405:3;4401:16;4394:27;4273:154;;;:::o;4433:410::-;4510:5;4535:65;4551:48;4592:6;4551:48;:::i;:::-;4535:65;:::i;:::-;4526:74;;4623:6;4616:5;4609:21;4661:4;4654:5;4650:16;4699:3;4690:6;4685:3;4681:16;4678:25;4675:112;;;4706:79;;:::i;:::-;4675:112;4796:41;4830:6;4825:3;4820;4796:41;:::i;:::-;4516:327;4433:410;;;;;:::o;4862:338::-;4917:5;4966:3;4959:4;4951:6;4947:17;4943:27;4933:122;;4974:79;;:::i;:::-;4933:122;5091:6;5078:20;5116:78;5190:3;5182:6;5175:4;5167:6;5163:17;5116:78;:::i;:::-;5107:87;;4923:277;4862:338;;;;:::o;5206:797::-;5292:6;5300;5308;5357:2;5345:9;5336:7;5332:23;5328:32;5325:119;;;5363:79;;:::i;:::-;5325:119;5483:1;5508:53;5553:7;5544:6;5533:9;5529:22;5508:53;:::i;:::-;5498:63;;5454:117;5610:2;5636:53;5681:7;5672:6;5661:9;5657:22;5636:53;:::i;:::-;5626:63;;5581:118;5766:2;5755:9;5751:18;5738:32;5797:18;5789:6;5786:30;5783:117;;;5819:79;;:::i;:::-;5783:117;5924:62;5978:7;5969:6;5958:9;5954:22;5924:62;:::i;:::-;5914:72;;5709:287;5206:797;;;;;:::o;6009:90::-;6043:7;6086:5;6079:13;6072:21;6061:32;;6009:90;;;:::o;6105:116::-;6175:21;6190:5;6175:21;:::i;:::-;6168:5;6165:32;6155:60;;6211:1;6208;6201:12;6155:60;6105:116;:::o;6227:133::-;6270:5;6308:6;6295:20;6286:29;;6324:30;6348:5;6324:30;:::i;:::-;6227:133;;;;:::o;6366:468::-;6431:6;6439;6488:2;6476:9;6467:7;6463:23;6459:32;6456:119;;;6494:79;;:::i;:::-;6456:119;6614:1;6639:53;6684:7;6675:6;6664:9;6660:22;6639:53;:::i;:::-;6629:63;;6585:117;6741:2;6767:50;6809:7;6800:6;6789:9;6785:22;6767:50;:::i;:::-;6757:60;;6712:115;6366:468;;;;;:::o;6840:126::-;6877:7;6917:42;6910:5;6906:54;6895:65;;6840:126;;;:::o;6972:60::-;7000:3;7021:5;7014:12;;6972:60;;;:::o;7038:142::-;7088:9;7121:53;7139:34;7148:24;7166:5;7148:24;:::i;:::-;7139:34;:::i;:::-;7121:53;:::i;:::-;7108:66;;7038:142;;;:::o;7186:126::-;7236:9;7269:37;7300:5;7269:37;:::i;:::-;7256:50;;7186:126;;;:::o;7318:145::-;7387:9;7420:37;7451:5;7420:37;:::i;:::-;7407:50;;7318:145;;;:::o;7469:169::-;7575:56;7625:5;7575:56;:::i;:::-;7570:3;7563:69;7469:169;;:::o;7644:260::-;7756:4;7794:2;7783:9;7779:18;7771:26;;7807:90;7894:1;7883:9;7879:17;7870:6;7807:90;:::i;:::-;7644:260;;;;:::o;7910:507::-;7978:6;8027:2;8015:9;8006:7;8002:23;7998:32;7995:119;;;8033:79;;:::i;:::-;7995:119;8181:1;8170:9;8166:17;8153:31;8211:18;8203:6;8200:30;8197:117;;;8233:79;;:::i;:::-;8197:117;8338:62;8392:7;8383:6;8372:9;8368:22;8338:62;:::i;:::-;8328:72;;8124:286;7910:507;;;;:::o;8423:311::-;8500:4;8590:18;8582:6;8579:30;8576:56;;;8612:18;;:::i;:::-;8576:56;8662:4;8654:6;8650:17;8642:25;;8722:4;8716;8712:15;8704:23;;8423:311;;;:::o;8740:117::-;8849:1;8846;8839:12;8880:710;8976:5;9001:81;9017:64;9074:6;9017:64;:::i;:::-;9001:81;:::i;:::-;8992:90;;9102:5;9131:6;9124:5;9117:21;9165:4;9158:5;9154:16;9147:23;;9218:4;9210:6;9206:17;9198:6;9194:30;9247:3;9239:6;9236:15;9233:122;;;9266:79;;:::i;:::-;9233:122;9381:6;9364:220;9398:6;9393:3;9390:15;9364:220;;;9473:3;9502:37;9535:3;9523:10;9502:37;:::i;:::-;9497:3;9490:50;9569:4;9564:3;9560:14;9553:21;;9440:144;9424:4;9419:3;9415:14;9408:21;;9364:220;;;9368:21;8982:608;;8880:710;;;;;:::o;9613:370::-;9684:5;9733:3;9726:4;9718:6;9714:17;9710:27;9700:122;;9741:79;;:::i;:::-;9700:122;9858:6;9845:20;9883:94;9973:3;9965:6;9958:4;9950:6;9946:17;9883:94;:::i;:::-;9874:103;;9690:293;9613:370;;;;:::o;9989:539::-;10073:6;10122:2;10110:9;10101:7;10097:23;10093:32;10090:119;;;10128:79;;:::i;:::-;10090:119;10276:1;10265:9;10261:17;10248:31;10306:18;10298:6;10295:30;10292:117;;;10328:79;;:::i;:::-;10292:117;10433:78;10503:7;10494:6;10483:9;10479:22;10433:78;:::i;:::-;10423:88;;10219:302;9989:539;;;;:::o" + "object": "608060405234801561001057600080fd5b50600436106100a95760003560e01c806361bdd2e01161007157806361bdd2e01461019e5780637a8f48c2146101bc5780639801b147146101ec578063a7cb124b1461021c578063add6b3bf1461024c578063bc4b21871461027c576100a9565b80632cd61217146100ae5780632d220331146100de578063316273761461010e5780633a0d803a1461013e57806349def3261461016e575b600080fd5b6100c860048036038101906100c3919061057f565b61029a565b6040516100d59190610645565b60405180910390f35b6100f860048036038101906100f391906106a3565b6102d9565b6040516101059190610645565b60405180910390f35b61012860048036038101906101239190610805565b610318565b6040516101359190610645565b60405180910390f35b610158600480360381019061015391906108ac565b610359565b6040516101659190610645565b60405180910390f35b6101886004803603810190610183919061057f565b610399565b6040516101959190610645565b60405180910390f35b6101a66103d8565b6040516101b3919061096b565b60405180910390f35b6101d660048036038101906101d1919061057f565b6103fc565b6040516101e39190610645565b60405180910390f35b61020660048036038101906102019190610986565b61043b565b6040516102139190610645565b60405180910390f35b61023660048036038101906102319190610a97565b61047a565b6040516102439190610645565b60405180910390f35b6102666004803603810190610261919061057f565b6104b9565b6040516102739190610645565b60405180910390f35b6102846104f8565b6040516102919190610645565b60405180910390f35b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f307830300000000000000000000000000000000000000000000000000000000081525090509392505050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905092915050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f30783030000000000000000000000000000000000000000000000000000000008152509050919050565b60606040518060400160405280600481526020017f3078303000000000000000000000000000000000000000000000000000000000815250905090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61055c81610549565b811461056757600080fd5b50565b60008135905061057981610553565b92915050565b6000602082840312156105955761059461053f565b5b60006105a38482850161056a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105e65780820151818401526020810190506105cb565b838111156105f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000610617826105ac565b61062181856105b7565b93506106318185602086016105c8565b61063a816105fb565b840191505092915050565b6000602082019050818103600083015261065f818461060c565b905092915050565b600063ffffffff82169050919050565b61068081610667565b811461068b57600080fd5b50565b60008135905061069d81610677565b92915050565b6000602082840312156106b9576106b861053f565b5b60006106c78482850161068e565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610712826105fb565b810181811067ffffffffffffffff82111715610731576107306106da565b5b80604052505050565b6000610744610535565b90506107508282610709565b919050565b600067ffffffffffffffff8211156107705761076f6106da565b5b610779826105fb565b9050602081019050919050565b82818337600083830152505050565b60006107a86107a384610755565b61073a565b9050828152602081018484840111156107c4576107c36106d5565b5b6107cf848285610786565b509392505050565b600082601f8301126107ec576107eb6106d0565b5b81356107fc848260208601610795565b91505092915050565b60008060006060848603121561081e5761081d61053f565b5b600061082c8682870161056a565b935050602061083d8682870161056a565b925050604084013567ffffffffffffffff81111561085e5761085d610544565b5b61086a868287016107d7565b9150509250925092565b60008115159050919050565b61088981610874565b811461089457600080fd5b50565b6000813590506108a681610880565b92915050565b600080604083850312156108c3576108c261053f565b5b60006108d18582860161056a565b92505060206108e285828601610897565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061093161092c610927846108ec565b61090c565b6108ec565b9050919050565b600061094382610916565b9050919050565b600061095582610938565b9050919050565b6109658161094a565b82525050565b6000602082019050610980600083018461095c565b92915050565b60006020828403121561099c5761099b61053f565b5b600082013567ffffffffffffffff8111156109ba576109b9610544565b5b6109c6848285016107d7565b91505092915050565b600067ffffffffffffffff8211156109ea576109e96106da565b5b602082029050602081019050919050565b600080fd5b6000610a13610a0e846109cf565b61073a565b90508083825260208201905060208402830185811115610a3657610a356109fb565b5b835b81811015610a5f5780610a4b888261056a565b845260208401935050602081019050610a38565b5050509392505050565b600082601f830112610a7e57610a7d6106d0565b5b8135610a8e848260208601610a00565b91505092915050565b600060208284031215610aad57610aac61053f565b5b600082013567ffffffffffffffff811115610acb57610aca610544565b5b610ad784828501610a69565b9150509291505056fea2646970667358221220afd7f50e25d8592680ae409611a2aa97ef89feab274d066b5b35acbd4699d3e564736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x61BDD2E0 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x61BDD2E0 EQ PUSH2 0x19E JUMPI DUP1 PUSH4 0x7A8F48C2 EQ PUSH2 0x1BC JUMPI DUP1 PUSH4 0x9801B147 EQ PUSH2 0x1EC JUMPI DUP1 PUSH4 0xA7CB124B EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xADD6B3BF EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xBC4B2187 EQ PUSH2 0x27C JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x2CD61217 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x2D220331 EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x31627376 EQ PUSH2 0x10E JUMPI DUP1 PUSH4 0x3A0D803A EQ PUSH2 0x13E JUMPI DUP1 PUSH4 0x49DEF326 EQ PUSH2 0x16E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x29A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xF8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xF3 SWAP2 SWAP1 PUSH2 0x6A3 JUMP JUMPDEST PUSH2 0x2D9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x105 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x128 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x123 SWAP2 SWAP1 PUSH2 0x805 JUMP JUMPDEST PUSH2 0x318 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x135 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x158 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x153 SWAP2 SWAP1 PUSH2 0x8AC JUMP JUMPDEST PUSH2 0x359 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x165 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x188 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x183 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x399 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x195 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A6 PUSH2 0x3D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1B3 SWAP2 SWAP1 PUSH2 0x96B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1D1 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E3 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x206 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x201 SWAP2 SWAP1 PUSH2 0x986 JUMP JUMPDEST PUSH2 0x43B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x213 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x236 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x231 SWAP2 SWAP1 PUSH2 0xA97 JUMP JUMPDEST PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x243 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x266 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x261 SWAP2 SWAP1 PUSH2 0x57F JUMP JUMPDEST PUSH2 0x4B9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x273 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x284 PUSH2 0x4F8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x291 SWAP2 SWAP1 PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x3078303000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x55C DUP2 PUSH2 0x549 JUMP JUMPDEST DUP2 EQ PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x579 DUP2 PUSH2 0x553 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x595 JUMPI PUSH2 0x594 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x5A3 DUP5 DUP3 DUP6 ADD PUSH2 0x56A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5E6 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5CB JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5F5 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x617 DUP3 PUSH2 0x5AC JUMP JUMPDEST PUSH2 0x621 DUP2 DUP6 PUSH2 0x5B7 JUMP JUMPDEST SWAP4 POP PUSH2 0x631 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x5C8 JUMP JUMPDEST PUSH2 0x63A DUP2 PUSH2 0x5FB JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x65F DUP2 DUP5 PUSH2 0x60C JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x680 DUP2 PUSH2 0x667 JUMP JUMPDEST DUP2 EQ PUSH2 0x68B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x69D DUP2 PUSH2 0x677 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6B9 JUMPI PUSH2 0x6B8 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6C7 DUP5 DUP3 DUP6 ADD PUSH2 0x68E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x712 DUP3 PUSH2 0x5FB JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x731 JUMPI PUSH2 0x730 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x744 PUSH2 0x535 JUMP JUMPDEST SWAP1 POP PUSH2 0x750 DUP3 DUP3 PUSH2 0x709 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x770 JUMPI PUSH2 0x76F PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH2 0x779 DUP3 PUSH2 0x5FB JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A8 PUSH2 0x7A3 DUP5 PUSH2 0x755 JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x7C4 JUMPI PUSH2 0x7C3 PUSH2 0x6D5 JUMP JUMPDEST JUMPDEST PUSH2 0x7CF DUP5 DUP3 DUP6 PUSH2 0x786 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7EC JUMPI PUSH2 0x7EB PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7FC DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x795 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x81E JUMPI PUSH2 0x81D PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x82C DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x83D DUP7 DUP3 DUP8 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x85E JUMPI PUSH2 0x85D PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x86A DUP7 DUP3 DUP8 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x889 DUP2 PUSH2 0x874 JUMP JUMPDEST DUP2 EQ PUSH2 0x894 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x8A6 DUP2 PUSH2 0x880 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x8C3 JUMPI PUSH2 0x8C2 PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x8D1 DUP6 DUP3 DUP7 ADD PUSH2 0x56A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x8E2 DUP6 DUP3 DUP7 ADD PUSH2 0x897 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x931 PUSH2 0x92C PUSH2 0x927 DUP5 PUSH2 0x8EC JUMP JUMPDEST PUSH2 0x90C JUMP JUMPDEST PUSH2 0x8EC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x943 DUP3 PUSH2 0x916 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x955 DUP3 PUSH2 0x938 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x965 DUP2 PUSH2 0x94A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x980 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x95C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x99C JUMPI PUSH2 0x99B PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9BA JUMPI PUSH2 0x9B9 PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0x9C6 DUP5 DUP3 DUP6 ADD PUSH2 0x7D7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x9EA JUMPI PUSH2 0x9E9 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xA13 PUSH2 0xA0E DUP5 PUSH2 0x9CF JUMP JUMPDEST PUSH2 0x73A JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA36 JUMPI PUSH2 0xA35 PUSH2 0x9FB JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA5F JUMPI DUP1 PUSH2 0xA4B DUP9 DUP3 PUSH2 0x56A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xA38 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA7E JUMPI PUSH2 0xA7D PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA8E DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xA00 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xAAD JUMPI PUSH2 0xAAC PUSH2 0x53F JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xACB JUMPI PUSH2 0xACA PUSH2 0x544 JUMP JUMPDEST JUMPDEST PUSH2 0xAD7 DUP5 DUP3 DUP6 ADD PUSH2 0xA69 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF 0xD7 CREATE2 0xE 0x25 0xD8 MSIZE 0x26 DUP1 0xAE BLOCKHASH SWAP7 GT LOG2 0xAA SWAP8 0xEF DUP10 INVALID 0xAB 0x27 0x4D MOD PUSH12 0x5B35ACBD4699D3E564736F6C PUSH4 0x4300080B STOP CALLER ", + "sourceMap": "223:1979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;834:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;998:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;449:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1173:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;666:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;343:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1866:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1682:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1356:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2042:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1533:143;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;834:158;937:19;972:13;;;;;;;;;;;;;;;;;;;834:158;;;:::o;998:169::-;1112:19;1147:13;;;;;;;;;;;;;;;;;;;998:169;;;:::o;449:211::-;609:19;640:13;;;;;;;;;;;;;;;;;;;449:211;;;;;:::o;1173:177::-;1295:19;1330:13;;;;;;;;;;;;;;;;;;;1173:177;;;;:::o;666:162::-;773:19;808:13;;;;;;;;;;;;;;;;;;;666:162;;;:::o;343:99::-;;;;;;;;;;;;:::o;1866:170::-;1981:19;2016:13;;;;;;;;;;;;;;;;;;;1866:170;;;:::o;1682:178::-;1805:19;1840:13;;;;;;;;;;;;;;;;;;;1682:178;;;:::o;1356:171::-;1472:19;1507:13;;;;;;;;;;;;;;;;;;;1356:171;;;:::o;2042:158::-;2145:19;2180:13;;;;;;;;;;;;;;;;;;;2042:158;;;:::o;1533:143::-;1621:19;1656:13;;;;;;;;;;;;;;;;;;;1533:143;:::o;7:75:2:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:98::-;1076:6;1110:5;1104:12;1094:22;;1025:98;;;:::o;1129:168::-;1212:11;1246:6;1241:3;1234:19;1286:4;1281:3;1277:14;1262:29;;1129:168;;;;:::o;1303:307::-;1371:1;1381:113;1395:6;1392:1;1389:13;1381:113;;;1480:1;1475:3;1471:11;1465:18;1461:1;1456:3;1452:11;1445:39;1417:2;1414:1;1410:10;1405:15;;1381:113;;;1512:6;1509:1;1506:13;1503:101;;;1592:1;1583:6;1578:3;1574:16;1567:27;1503:101;1352:258;1303:307;;;:::o;1616:102::-;1657:6;1708:2;1704:7;1699:2;1692:5;1688:14;1684:28;1674:38;;1616:102;;;:::o;1724:360::-;1810:3;1838:38;1870:5;1838:38;:::i;:::-;1892:70;1955:6;1950:3;1892:70;:::i;:::-;1885:77;;1971:52;2016:6;2011:3;2004:4;1997:5;1993:16;1971:52;:::i;:::-;2048:29;2070:6;2048:29;:::i;:::-;2043:3;2039:39;2032:46;;1814:270;1724:360;;;;:::o;2090:309::-;2201:4;2239:2;2228:9;2224:18;2216:26;;2288:9;2282:4;2278:20;2274:1;2263:9;2259:17;2252:47;2316:76;2387:4;2378:6;2316:76;:::i;:::-;2308:84;;2090:309;;;;:::o;2405:93::-;2441:7;2481:10;2474:5;2470:22;2459:33;;2405:93;;;:::o;2504:120::-;2576:23;2593:5;2576:23;:::i;:::-;2569:5;2566:34;2556:62;;2614:1;2611;2604:12;2556:62;2504:120;:::o;2630:137::-;2675:5;2713:6;2700:20;2691:29;;2729:32;2755:5;2729:32;:::i;:::-;2630:137;;;;:::o;2773:327::-;2831:6;2880:2;2868:9;2859:7;2855:23;2851:32;2848:119;;;2886:79;;:::i;:::-;2848:119;3006:1;3031:52;3075:7;3066:6;3055:9;3051:22;3031:52;:::i;:::-;3021:62;;2977:116;2773:327;;;;:::o;3106:117::-;3215:1;3212;3205:12;3229:117;3338:1;3335;3328:12;3352:180;3400:77;3397:1;3390:88;3497:4;3494:1;3487:15;3521:4;3518:1;3511:15;3538:281;3621:27;3643:4;3621:27;:::i;:::-;3613:6;3609:40;3751:6;3739:10;3736:22;3715:18;3703:10;3700:34;3697:62;3694:88;;;3762:18;;:::i;:::-;3694:88;3802:10;3798:2;3791:22;3581:238;3538:281;;:::o;3825:129::-;3859:6;3886:20;;:::i;:::-;3876:30;;3915:33;3943:4;3935:6;3915:33;:::i;:::-;3825:129;;;:::o;3960:307::-;4021:4;4111:18;4103:6;4100:30;4097:56;;;4133:18;;:::i;:::-;4097:56;4171:29;4193:6;4171:29;:::i;:::-;4163:37;;4255:4;4249;4245:15;4237:23;;3960:307;;;:::o;4273:154::-;4357:6;4352:3;4347;4334:30;4419:1;4410:6;4405:3;4401:16;4394:27;4273:154;;;:::o;4433:410::-;4510:5;4535:65;4551:48;4592:6;4551:48;:::i;:::-;4535:65;:::i;:::-;4526:74;;4623:6;4616:5;4609:21;4661:4;4654:5;4650:16;4699:3;4690:6;4685:3;4681:16;4678:25;4675:112;;;4706:79;;:::i;:::-;4675:112;4796:41;4830:6;4825:3;4820;4796:41;:::i;:::-;4516:327;4433:410;;;;;:::o;4862:338::-;4917:5;4966:3;4959:4;4951:6;4947:17;4943:27;4933:122;;4974:79;;:::i;:::-;4933:122;5091:6;5078:20;5116:78;5190:3;5182:6;5175:4;5167:6;5163:17;5116:78;:::i;:::-;5107:87;;4923:277;4862:338;;;;:::o;5206:797::-;5292:6;5300;5308;5357:2;5345:9;5336:7;5332:23;5328:32;5325:119;;;5363:79;;:::i;:::-;5325:119;5483:1;5508:53;5553:7;5544:6;5533:9;5529:22;5508:53;:::i;:::-;5498:63;;5454:117;5610:2;5636:53;5681:7;5672:6;5661:9;5657:22;5636:53;:::i;:::-;5626:63;;5581:118;5766:2;5755:9;5751:18;5738:32;5797:18;5789:6;5786:30;5783:117;;;5819:79;;:::i;:::-;5783:117;5924:62;5978:7;5969:6;5958:9;5954:22;5924:62;:::i;:::-;5914:72;;5709:287;5206:797;;;;;:::o;6009:90::-;6043:7;6086:5;6079:13;6072:21;6061:32;;6009:90;;;:::o;6105:116::-;6175:21;6190:5;6175:21;:::i;:::-;6168:5;6165:32;6155:60;;6211:1;6208;6201:12;6155:60;6105:116;:::o;6227:133::-;6270:5;6308:6;6295:20;6286:29;;6324:30;6348:5;6324:30;:::i;:::-;6227:133;;;;:::o;6366:468::-;6431:6;6439;6488:2;6476:9;6467:7;6463:23;6459:32;6456:119;;;6494:79;;:::i;:::-;6456:119;6614:1;6639:53;6684:7;6675:6;6664:9;6660:22;6639:53;:::i;:::-;6629:63;;6585:117;6741:2;6767:50;6809:7;6800:6;6789:9;6785:22;6767:50;:::i;:::-;6757:60;;6712:115;6366:468;;;;;:::o;6840:126::-;6877:7;6917:42;6910:5;6906:54;6895:65;;6840:126;;;:::o;6972:60::-;7000:3;7021:5;7014:12;;6972:60;;;:::o;7038:142::-;7088:9;7121:53;7139:34;7148:24;7166:5;7148:24;:::i;:::-;7139:34;:::i;:::-;7121:53;:::i;:::-;7108:66;;7038:142;;;:::o;7186:126::-;7236:9;7269:37;7300:5;7269:37;:::i;:::-;7256:50;;7186:126;;;:::o;7318:146::-;7388:9;7421:37;7452:5;7421:37;:::i;:::-;7408:50;;7318:146;;;:::o;7470:171::-;7577:57;7628:5;7577:57;:::i;:::-;7572:3;7565:70;7470:171;;:::o;7647:262::-;7760:4;7798:2;7787:9;7783:18;7775:26;;7811:91;7899:1;7888:9;7884:17;7875:6;7811:91;:::i;:::-;7647:262;;;;:::o;7915:507::-;7983:6;8032:2;8020:9;8011:7;8007:23;8003:32;8000:119;;;8038:79;;:::i;:::-;8000:119;8186:1;8175:9;8171:17;8158:31;8216:18;8208:6;8205:30;8202:117;;;8238:79;;:::i;:::-;8202:117;8343:62;8397:7;8388:6;8377:9;8373:22;8343:62;:::i;:::-;8333:72;;8129:286;7915:507;;;;:::o;8428:311::-;8505:4;8595:18;8587:6;8584:30;8581:56;;;8617:18;;:::i;:::-;8581:56;8667:4;8659:6;8655:17;8647:25;;8727:4;8721;8717:15;8709:23;;8428:311;;;:::o;8745:117::-;8854:1;8851;8844:12;8885:710;8981:5;9006:81;9022:64;9079:6;9022:64;:::i;:::-;9006:81;:::i;:::-;8997:90;;9107:5;9136:6;9129:5;9122:21;9170:4;9163:5;9159:16;9152:23;;9223:4;9215:6;9211:17;9203:6;9199:30;9252:3;9244:6;9241:15;9238:122;;;9271:79;;:::i;:::-;9238:122;9386:6;9369:220;9403:6;9398:3;9395:15;9369:220;;;9478:3;9507:37;9540:3;9528:10;9507:37;:::i;:::-;9502:3;9495:50;9574:4;9569:3;9565:14;9558:21;;9445:144;9429:4;9424:3;9420:14;9413:21;;9369:220;;;9373:21;8987:608;;8885:710;;;;;:::o;9618:370::-;9689:5;9738:3;9731:4;9723:6;9719:17;9715:27;9705:122;;9746:79;;:::i;:::-;9705:122;9863:6;9850:20;9888:94;9978:3;9970:6;9963:4;9955:6;9951:17;9888:94;:::i;:::-;9879:103;;9695:293;9618:370;;;;:::o;9994:539::-;10078:6;10127:2;10115:9;10106:7;10102:23;10098:32;10095:119;;;10133:79;;:::i;:::-;10095:119;10281:1;10270:9;10266:17;10253:31;10311:18;10303:6;10300:30;10297:117;;;10333:79;;:::i;:::-;10297:117;10438:78;10508:7;10499:6;10488:9;10484:22;10438:78;:::i;:::-;10428:88;;10224:302;9994:539;;;;:::o" }, "gasEstimates": { "creation": { @@ -6038,2721 +6038,2706 @@ "legacyAssembly": { ".code": [ { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4022, "end": 5993, "name": "MSTORE", "source": 0 }, + { "begin": 223, "end": 2202, "name": "MSTORE", "source": 0 }, { - "begin": 4198, - "end": 4240, + "begin": 399, + "end": 441, "name": "PUSH", "source": 0, "value": "805" }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4150, "end": 4241, "name": "DUP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "DUP1", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4150, "end": 4241, "name": "EXP", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "DUP2", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SLOAD", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "DUP2", "source": 0 }, + { "begin": 343, "end": 442, "name": "EXP", "source": 0 }, + { "begin": 343, "end": 442, "name": "DUP2", "source": 0 }, + { "begin": 343, "end": 442, "name": "SLOAD", "source": 0 }, + { "begin": 343, "end": 442, "name": "DUP2", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4150, "end": 4241, "name": "MUL", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "NOT", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "AND", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SWAP1", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "DUP4", "source": 0 }, + { "begin": 343, "end": 442, "name": "MUL", "source": 0 }, + { "begin": 343, "end": 442, "name": "NOT", "source": 0 }, + { "begin": 343, "end": 442, "name": "AND", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "DUP4", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4150, "end": 4241, "name": "AND", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "MUL", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "OR", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SWAP1", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SSTORE", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "POP", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "CALLVALUE", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "ISZERO", "source": 0 }, + { "begin": 343, "end": 442, "name": "AND", "source": 0 }, + { "begin": 343, "end": 442, "name": "MUL", "source": 0 }, + { "begin": 343, "end": 442, "name": "OR", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "SSTORE", "source": 0 }, + { "begin": 343, "end": 442, "name": "POP", "source": 0 }, + { "begin": 223, "end": 2202, "name": "CALLVALUE", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "ISZERO", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "REVERT", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "REVERT", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "tag", "source": 0, "value": "1" }, - { "begin": 4022, "end": 5993, "name": "JUMPDEST", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "POP", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 2202, "name": "POP", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4022, "end": 5993, "name": "CODECOPY", "source": 0 }, + { "begin": 223, "end": 2202, "name": "CODECOPY", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4022, "end": 5993, "name": "RETURN", "source": 0 } + { "begin": 223, "end": 2202, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a26469706673582212206f7085f9fce5641d8db25d8b9b823efdd7a104ea3e6ff92717d013741fc0ce7864736f6c63430008090033", + ".auxdata": "a2646970667358221220afd7f50e25d8592680ae409611a2aa97ef89feab274d066b5b35acbd4699d3e564736f6c634300080b0033", ".code": [ { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4022, "end": 5993, "name": "MSTORE", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "CALLVALUE", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "ISZERO", "source": 0 }, + { "begin": 223, "end": 2202, "name": "MSTORE", "source": 0 }, + { "begin": 223, "end": 2202, "name": "CALLVALUE", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "ISZERO", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "REVERT", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "REVERT", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "tag", "source": 0, "value": "1" }, - { "begin": 4022, "end": 5993, "name": "JUMPDEST", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "POP", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 2202, "name": "POP", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "4" }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "LT", "source": 0 }, + { "begin": 223, "end": 2202, "name": "LT", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "CALLDATALOAD", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 4022, "end": 5993, "name": "SHR", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "SHR", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "61BDD2E0" }, - { "begin": 4022, "end": 5993, "name": "GT", "source": 0 }, + { "begin": 223, "end": 2202, "name": "GT", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "14" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "61BDD2E0" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "8" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "7A8F48C2" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "9" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "9801B147" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "10" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "A7CB124B" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "11" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "ADD6B3BF" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "12" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "BC4B2187" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "13" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 4022, "end": 5993, "name": "JUMP", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMP", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "tag", "source": 0, "value": "14" }, - { "begin": 4022, "end": 5993, "name": "JUMPDEST", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "2CD61217" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "3" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "2D220331" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "4" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "31627376" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "5" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "3A0D803A" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "6" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "49DEF326" }, - { "begin": 4022, "end": 5993, "name": "EQ", "source": 0 }, + { "begin": 223, "end": 2202, "name": "EQ", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH [tag]", "source": 0, "value": "7" }, - { "begin": 4022, "end": 5993, "name": "JUMPI", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPI", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "tag", "source": 0, "value": "2" }, - { "begin": 4022, "end": 5993, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 2202, "name": "JUMPDEST", "source": 0 }, { - "begin": 4022, - "end": 5993, + "begin": 223, + "end": 2202, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4022, "end": 5993, "name": "DUP1", "source": 0 }, - { "begin": 4022, "end": 5993, "name": "REVERT", "source": 0 }, + { "begin": 223, "end": 2202, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 2202, "name": "REVERT", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "tag", "source": 0, "value": "3" }, - { "begin": 4659, "end": 4811, "name": "JUMPDEST", "source": 0 }, + { "begin": 834, "end": 992, "name": "JUMPDEST", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH [tag]", "source": 0, "value": "15" }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4659, "end": 4811, "name": "DUP1", "source": 0 }, + { "begin": 834, "end": 992, "name": "DUP1", "source": 0 }, + { "begin": 834, "end": 992, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 834, "end": 992, "name": "SUB", "source": 0 }, + { "begin": 834, "end": 992, "name": "DUP2", "source": 0 }, + { "begin": 834, "end": 992, "name": "ADD", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP1", "source": 0 }, { - "begin": 4659, - "end": 4811, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 4659, "end": 4811, "name": "SUB", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "DUP2", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "ADD", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SWAP1", "source": 0 }, - { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH [tag]", "source": 0, "value": "16" }, - { "begin": 4659, "end": 4811, "name": "SWAP2", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SWAP1", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP2", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP1", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH [tag]", "source": 0, "value": "17" }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "tag", "source": 0, "value": "16" }, - { "begin": 4659, "end": 4811, "name": "JUMPDEST", "source": 0 }, + { "begin": 834, "end": 992, "name": "JUMPDEST", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH [tag]", "source": 0, "value": "18" }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "tag", "source": 0, "value": "15" }, - { "begin": 4659, "end": 4811, "name": "JUMPDEST", "source": 0 }, + { "begin": 834, "end": 992, "name": "JUMPDEST", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4659, "end": 4811, "name": "MLOAD", "source": 0 }, + { "begin": 834, "end": 992, "name": "MLOAD", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH [tag]", "source": 0, "value": "19" }, - { "begin": 4659, "end": 4811, "name": "SWAP2", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SWAP1", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP2", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP1", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "tag", "source": 0, "value": "19" }, - { "begin": 4659, "end": 4811, "name": "JUMPDEST", "source": 0 }, + { "begin": 834, "end": 992, "name": "JUMPDEST", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4659, "end": 4811, "name": "MLOAD", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "DUP1", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SWAP2", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SUB", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SWAP1", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "RETURN", "source": 0 }, + { "begin": 834, "end": 992, "name": "MLOAD", "source": 0 }, + { "begin": 834, "end": 992, "name": "DUP1", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP2", "source": 0 }, + { "begin": 834, "end": 992, "name": "SUB", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP1", "source": 0 }, + { "begin": 834, "end": 992, "name": "RETURN", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "tag", "source": 0, "value": "4" }, - { "begin": 4820, "end": 4983, "name": "JUMPDEST", "source": 0 }, + { "begin": 998, "end": 1167, "name": "JUMPDEST", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH [tag]", "source": 0, "value": "21" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4820, "end": 4983, "name": "DUP1", "source": 0 }, + { "begin": 998, "end": 1167, "name": "DUP1", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SUB", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "DUP2", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "ADD", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SWAP1", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SUB", "source": 0 }, + { "begin": 998, "end": 1167, "name": "DUP2", "source": 0 }, + { "begin": 998, "end": 1167, "name": "ADD", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP1", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH [tag]", "source": 0, "value": "22" }, - { "begin": 4820, "end": 4983, "name": "SWAP2", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SWAP1", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP2", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP1", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH [tag]", "source": 0, "value": "23" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "tag", "source": 0, "value": "22" }, - { "begin": 4820, "end": 4983, "name": "JUMPDEST", "source": 0 }, + { "begin": 998, "end": 1167, "name": "JUMPDEST", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH [tag]", "source": 0, "value": "24" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "tag", "source": 0, "value": "21" }, - { "begin": 4820, "end": 4983, "name": "JUMPDEST", "source": 0 }, + { "begin": 998, "end": 1167, "name": "JUMPDEST", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4820, "end": 4983, "name": "MLOAD", "source": 0 }, + { "begin": 998, "end": 1167, "name": "MLOAD", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH [tag]", "source": 0, "value": "25" }, - { "begin": 4820, "end": 4983, "name": "SWAP2", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SWAP1", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP2", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP1", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "tag", "source": 0, "value": "25" }, - { "begin": 4820, "end": 4983, "name": "JUMPDEST", "source": 0 }, + { "begin": 998, "end": 1167, "name": "JUMPDEST", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4820, "end": 4983, "name": "MLOAD", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "DUP1", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SWAP2", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SUB", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SWAP1", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "RETURN", "source": 0 }, + { "begin": 998, "end": 1167, "name": "MLOAD", "source": 0 }, + { "begin": 998, "end": 1167, "name": "DUP1", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP2", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SUB", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP1", "source": 0 }, + { "begin": 998, "end": 1167, "name": "RETURN", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "tag", "source": 0, "value": "5" }, - { "begin": 4251, "end": 4486, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 660, "name": "JUMPDEST", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH [tag]", "source": 0, "value": "26" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4251, "end": 4486, "name": "DUP1", "source": 0 }, - { - "begin": 4251, - "end": 4486, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 4251, "end": 4486, "name": "SUB", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "DUP2", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "ADD", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SWAP1", "source": 0 }, + { "begin": 449, "end": 660, "name": "DUP1", "source": 0 }, + { "begin": 449, "end": 660, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 449, "end": 660, "name": "SUB", "source": 0 }, + { "begin": 449, "end": 660, "name": "DUP2", "source": 0 }, + { "begin": 449, "end": 660, "name": "ADD", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP1", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH [tag]", "source": 0, "value": "27" }, - { "begin": 4251, "end": 4486, "name": "SWAP2", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SWAP1", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP2", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP1", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH [tag]", "source": 0, "value": "28" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "tag", "source": 0, "value": "27" }, - { "begin": 4251, "end": 4486, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 660, "name": "JUMPDEST", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH [tag]", "source": 0, "value": "29" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "tag", "source": 0, "value": "26" }, - { "begin": 4251, "end": 4486, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 660, "name": "JUMPDEST", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4251, "end": 4486, "name": "MLOAD", "source": 0 }, + { "begin": 449, "end": 660, "name": "MLOAD", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH [tag]", "source": 0, "value": "30" }, - { "begin": 4251, "end": 4486, "name": "SWAP2", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SWAP1", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP2", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP1", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "tag", "source": 0, "value": "30" }, - { "begin": 4251, "end": 4486, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 660, "name": "JUMPDEST", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4251, "end": 4486, "name": "MLOAD", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "DUP1", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SWAP2", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SUB", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SWAP1", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "RETURN", "source": 0 }, + { "begin": 449, "end": 660, "name": "MLOAD", "source": 0 }, + { "begin": 449, "end": 660, "name": "DUP1", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP2", "source": 0 }, + { "begin": 449, "end": 660, "name": "SUB", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP1", "source": 0 }, + { "begin": 449, "end": 660, "name": "RETURN", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "tag", "source": 0, "value": "6" }, - { "begin": 4992, "end": 5175, "name": "JUMPDEST", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "JUMPDEST", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4992, "end": 5175, "name": "DUP1", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "DUP1", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SUB", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "DUP2", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "ADD", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SWAP1", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SUB", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "DUP2", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "ADD", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP1", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH [tag]", "source": 0, "value": "32" }, - { "begin": 4992, "end": 5175, "name": "SWAP2", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SWAP1", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP2", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP1", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH [tag]", "source": 0, "value": "33" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "tag", "source": 0, "value": "32" }, - { "begin": 4992, "end": 5175, "name": "JUMPDEST", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "JUMPDEST", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH [tag]", "source": 0, "value": "34" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "tag", "source": 0, "value": "31" }, - { "begin": 4992, "end": 5175, "name": "JUMPDEST", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "JUMPDEST", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4992, "end": 5175, "name": "MLOAD", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "MLOAD", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH [tag]", "source": 0, "value": "35" }, - { "begin": 4992, "end": 5175, "name": "SWAP2", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SWAP1", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP2", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP1", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "tag", "source": 0, "value": "35" }, - { "begin": 4992, "end": 5175, "name": "JUMPDEST", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "JUMPDEST", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4992, "end": 5175, "name": "MLOAD", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "DUP1", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SWAP2", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SUB", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SWAP1", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "RETURN", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "MLOAD", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "DUP1", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP2", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SUB", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP1", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "RETURN", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "tag", "source": 0, "value": "7" }, - { "begin": 4495, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { "begin": 666, "end": 828, "name": "JUMPDEST", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH [tag]", "source": 0, "value": "36" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4495, "end": 4650, "name": "DUP1", "source": 0 }, + { "begin": 666, "end": 828, "name": "DUP1", "source": 0 }, + { "begin": 666, "end": 828, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 666, "end": 828, "name": "SUB", "source": 0 }, + { "begin": 666, "end": 828, "name": "DUP2", "source": 0 }, + { "begin": 666, "end": 828, "name": "ADD", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP1", "source": 0 }, { - "begin": 4495, - "end": 4650, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 4495, "end": 4650, "name": "SUB", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "DUP2", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "ADD", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SWAP1", "source": 0 }, - { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH [tag]", "source": 0, "value": "37" }, - { "begin": 4495, "end": 4650, "name": "SWAP2", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SWAP1", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP2", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP1", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH [tag]", "source": 0, "value": "17" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "tag", "source": 0, "value": "37" }, - { "begin": 4495, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { "begin": 666, "end": 828, "name": "JUMPDEST", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "tag", "source": 0, "value": "36" }, - { "begin": 4495, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { "begin": 666, "end": 828, "name": "JUMPDEST", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4495, "end": 4650, "name": "MLOAD", "source": 0 }, + { "begin": 666, "end": 828, "name": "MLOAD", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH [tag]", "source": 0, "value": "39" }, - { "begin": 4495, "end": 4650, "name": "SWAP2", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SWAP1", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP2", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP1", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "tag", "source": 0, "value": "39" }, - { "begin": 4495, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { "begin": 666, "end": 828, "name": "JUMPDEST", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4495, "end": 4650, "name": "MLOAD", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "DUP1", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SWAP2", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SUB", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SWAP1", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "RETURN", "source": 0 }, + { "begin": 666, "end": 828, "name": "MLOAD", "source": 0 }, + { "begin": 666, "end": 828, "name": "DUP1", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP2", "source": 0 }, + { "begin": 666, "end": 828, "name": "SUB", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP1", "source": 0 }, + { "begin": 666, "end": 828, "name": "RETURN", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "tag", "source": 0, "value": "8" }, - { "begin": 4150, "end": 4241, "name": "JUMPDEST", "source": 0 }, + { "begin": 343, "end": 442, "name": "JUMPDEST", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH [tag]", "source": 0, "value": "40" }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH [tag]", "source": 0, "value": "41" }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "tag", "source": 0, "value": "40" }, - { "begin": 4150, "end": 4241, "name": "JUMPDEST", "source": 0 }, + { "begin": 343, "end": 442, "name": "JUMPDEST", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4150, "end": 4241, "name": "MLOAD", "source": 0 }, + { "begin": 343, "end": 442, "name": "MLOAD", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH [tag]", "source": 0, "value": "42" }, - { "begin": 4150, "end": 4241, "name": "SWAP2", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SWAP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP2", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP1", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH [tag]", "source": 0, "value": "43" }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "tag", "source": 0, "value": "42" }, - { "begin": 4150, "end": 4241, "name": "JUMPDEST", "source": 0 }, + { "begin": 343, "end": 442, "name": "JUMPDEST", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4150, "end": 4241, "name": "MLOAD", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "DUP1", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SWAP2", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SUB", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SWAP1", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "RETURN", "source": 0 }, + { "begin": 343, "end": 442, "name": "MLOAD", "source": 0 }, + { "begin": 343, "end": 442, "name": "DUP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP2", "source": 0 }, + { "begin": 343, "end": 442, "name": "SUB", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "RETURN", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "tag", "source": 0, "value": "9" }, - { "begin": 5664, "end": 5827, "name": "JUMPDEST", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "JUMPDEST", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH [tag]", "source": 0, "value": "44" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5664, "end": 5827, "name": "DUP1", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "DUP1", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SUB", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "DUP2", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "ADD", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SWAP1", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SUB", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "DUP2", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "ADD", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP1", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH [tag]", "source": 0, "value": "45" }, - { "begin": 5664, "end": 5827, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SWAP1", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP2", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP1", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH [tag]", "source": 0, "value": "17" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "tag", "source": 0, "value": "45" }, - { "begin": 5664, "end": 5827, "name": "JUMPDEST", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "JUMPDEST", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH [tag]", "source": 0, "value": "46" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "tag", "source": 0, "value": "44" }, - { "begin": 5664, "end": 5827, "name": "JUMPDEST", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "JUMPDEST", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5664, "end": 5827, "name": "MLOAD", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "MLOAD", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH [tag]", "source": 0, "value": "47" }, - { "begin": 5664, "end": 5827, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SWAP1", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP2", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP1", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "tag", "source": 0, "value": "47" }, - { "begin": 5664, "end": 5827, "name": "JUMPDEST", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "JUMPDEST", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5664, "end": 5827, "name": "MLOAD", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "DUP1", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SUB", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SWAP1", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "RETURN", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "MLOAD", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "DUP1", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP2", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SUB", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP1", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "RETURN", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "tag", "source": 0, "value": "10" }, - { "begin": 5483, "end": 5655, "name": "JUMPDEST", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "JUMPDEST", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH [tag]", "source": 0, "value": "48" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5483, "end": 5655, "name": "DUP1", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "DUP1", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SUB", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "DUP2", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "ADD", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SWAP1", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SUB", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "DUP2", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "ADD", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP1", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH [tag]", "source": 0, "value": "49" }, - { "begin": 5483, "end": 5655, "name": "SWAP2", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SWAP1", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP2", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP1", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH [tag]", "source": 0, "value": "50" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "tag", "source": 0, "value": "49" }, - { "begin": 5483, "end": 5655, "name": "JUMPDEST", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "JUMPDEST", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH [tag]", "source": 0, "value": "51" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "tag", "source": 0, "value": "48" }, - { "begin": 5483, "end": 5655, "name": "JUMPDEST", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "JUMPDEST", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5483, "end": 5655, "name": "MLOAD", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "MLOAD", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH [tag]", "source": 0, "value": "52" }, - { "begin": 5483, "end": 5655, "name": "SWAP2", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SWAP1", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP2", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP1", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "tag", "source": 0, "value": "52" }, - { "begin": 5483, "end": 5655, "name": "JUMPDEST", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "JUMPDEST", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5483, "end": 5655, "name": "MLOAD", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "DUP1", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SWAP2", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SUB", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SWAP1", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "RETURN", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "MLOAD", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "DUP1", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP2", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SUB", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP1", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "RETURN", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "tag", "source": 0, "value": "11" }, - { "begin": 5184, "end": 5350, "name": "JUMPDEST", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "JUMPDEST", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH [tag]", "source": 0, "value": "53" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5184, "end": 5350, "name": "DUP1", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "DUP1", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SUB", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "DUP2", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "ADD", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SWAP1", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SUB", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "DUP2", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "ADD", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP1", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH [tag]", "source": 0, "value": "54" }, - { "begin": 5184, "end": 5350, "name": "SWAP2", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SWAP1", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP2", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP1", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH [tag]", "source": 0, "value": "55" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "tag", "source": 0, "value": "54" }, - { "begin": 5184, "end": 5350, "name": "JUMPDEST", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "JUMPDEST", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH [tag]", "source": 0, "value": "56" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "tag", "source": 0, "value": "53" }, - { "begin": 5184, "end": 5350, "name": "JUMPDEST", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "JUMPDEST", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5184, "end": 5350, "name": "MLOAD", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "MLOAD", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH [tag]", "source": 0, "value": "57" }, - { "begin": 5184, "end": 5350, "name": "SWAP2", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SWAP1", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP2", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP1", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "tag", "source": 0, "value": "57" }, - { "begin": 5184, "end": 5350, "name": "JUMPDEST", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "JUMPDEST", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5184, "end": 5350, "name": "MLOAD", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "DUP1", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SWAP2", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SUB", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SWAP1", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "RETURN", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "MLOAD", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "DUP1", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP2", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SUB", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP1", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "RETURN", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "tag", "source": 0, "value": "12" }, - { "begin": 5836, "end": 5987, "name": "JUMPDEST", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "JUMPDEST", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH [tag]", "source": 0, "value": "58" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5836, "end": 5987, "name": "DUP1", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "DUP1", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SUB", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "DUP2", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "ADD", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SWAP1", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SUB", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "DUP2", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "ADD", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP1", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH [tag]", "source": 0, "value": "59" }, - { "begin": 5836, "end": 5987, "name": "SWAP2", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SWAP1", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP2", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP1", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH [tag]", "source": 0, "value": "17" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "tag", "source": 0, "value": "59" }, - { "begin": 5836, "end": 5987, "name": "JUMPDEST", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "JUMPDEST", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH [tag]", "source": 0, "value": "60" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "tag", "source": 0, "value": "58" }, - { "begin": 5836, "end": 5987, "name": "JUMPDEST", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "JUMPDEST", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5836, "end": 5987, "name": "MLOAD", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "MLOAD", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH [tag]", "source": 0, "value": "61" }, - { "begin": 5836, "end": 5987, "name": "SWAP2", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SWAP1", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP2", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP1", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "tag", "source": 0, "value": "61" }, - { "begin": 5836, "end": 5987, "name": "JUMPDEST", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "JUMPDEST", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5836, "end": 5987, "name": "MLOAD", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "DUP1", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SWAP2", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SUB", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SWAP1", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "RETURN", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "MLOAD", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "DUP1", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP2", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SUB", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP1", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "RETURN", "source": 0 }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "tag", "source": 0, "value": "13" }, - { "begin": 5359, "end": 5474, "name": "JUMPDEST", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "JUMPDEST", "source": 0 }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "PUSH [tag]", "source": 0, "value": "62" }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "PUSH [tag]", "source": 0, "value": "63" }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "tag", "source": 0, "value": "62" }, - { "begin": 5359, "end": 5474, "name": "JUMPDEST", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "JUMPDEST", "source": 0 }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5359, "end": 5474, "name": "MLOAD", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "MLOAD", "source": 0 }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "PUSH [tag]", "source": 0, "value": "64" }, - { "begin": 5359, "end": 5474, "name": "SWAP2", "source": 0 }, - { "begin": 5359, "end": 5474, "name": "SWAP1", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "SWAP2", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "SWAP1", "source": 0 }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "PUSH [tag]", "source": 0, "value": "20" }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "tag", "source": 0, "value": "64" }, - { "begin": 5359, "end": 5474, "name": "JUMPDEST", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "JUMPDEST", "source": 0 }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5359, "end": 5474, "name": "MLOAD", "source": 0 }, - { "begin": 5359, "end": 5474, "name": "DUP1", "source": 0 }, - { "begin": 5359, "end": 5474, "name": "SWAP2", "source": 0 }, - { "begin": 5359, "end": 5474, "name": "SUB", "source": 0 }, - { "begin": 5359, "end": 5474, "name": "SWAP1", "source": 0 }, - { "begin": 5359, "end": 5474, "name": "RETURN", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "MLOAD", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "DUP1", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "SWAP2", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "SUB", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "SWAP1", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "RETURN", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "tag", "source": 0, "value": "18" }, - { "begin": 4659, "end": 4811, "name": "JUMPDEST", "source": 0 }, + { "begin": 834, "end": 992, "name": "JUMPDEST", "source": 0 }, { - "begin": 4752, - "end": 4771, + "begin": 937, + "end": 956, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 4787, - "end": 4800, + "begin": 972, + "end": 985, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4787, "end": 4800, "name": "MLOAD", "source": 0 }, - { "begin": 4787, "end": 4800, "name": "DUP1", "source": 0 }, + { "begin": 972, "end": 985, "name": "MLOAD", "source": 0 }, + { "begin": 972, "end": 985, "name": "DUP1", "source": 0 }, { - "begin": 4787, - "end": 4800, + "begin": 972, + "end": 985, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4787, "end": 4800, "name": "ADD", "source": 0 }, + { "begin": 972, "end": 985, "name": "ADD", "source": 0 }, { - "begin": 4787, - "end": 4800, + "begin": 972, + "end": 985, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4787, "end": 4800, "name": "MSTORE", "source": 0 }, - { "begin": 4787, "end": 4800, "name": "DUP1", "source": 0 }, + { "begin": 972, "end": 985, "name": "MSTORE", "source": 0 }, + { "begin": 972, "end": 985, "name": "DUP1", "source": 0 }, { - "begin": 4787, - "end": 4800, + "begin": 972, + "end": 985, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4787, "end": 4800, "name": "DUP2", "source": 0 }, - { "begin": 4787, "end": 4800, "name": "MSTORE", "source": 0 }, + { "begin": 972, "end": 985, "name": "DUP2", "source": 0 }, + { "begin": 972, "end": 985, "name": "MSTORE", "source": 0 }, { - "begin": 4787, - "end": 4800, + "begin": 972, + "end": 985, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 4787, "end": 4800, "name": "ADD", "source": 0 }, + { "begin": 972, "end": 985, "name": "ADD", "source": 0 }, { - "begin": 4787, - "end": 4800, + "begin": 972, + "end": 985, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 4787, "end": 4800, "name": "DUP2", "source": 0 }, - { "begin": 4787, "end": 4800, "name": "MSTORE", "source": 0 }, - { "begin": 4787, "end": 4800, "name": "POP", "source": 0 }, - { "begin": 4787, "end": 4800, "name": "SWAP1", "source": 0 }, - { "begin": 4787, "end": 4800, "name": "POP", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SWAP2", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "SWAP1", "source": 0 }, - { "begin": 4659, "end": 4811, "name": "POP", "source": 0 }, + { "begin": 972, "end": 985, "name": "DUP2", "source": 0 }, + { "begin": 972, "end": 985, "name": "MSTORE", "source": 0 }, + { "begin": 972, "end": 985, "name": "POP", "source": 0 }, + { "begin": 972, "end": 985, "name": "SWAP1", "source": 0 }, + { "begin": 972, "end": 985, "name": "POP", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP2", "source": 0 }, + { "begin": 834, "end": 992, "name": "SWAP1", "source": 0 }, + { "begin": 834, "end": 992, "name": "POP", "source": 0 }, { - "begin": 4659, - "end": 4811, + "begin": 834, + "end": 992, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "tag", "source": 0, "value": "24" }, - { "begin": 4820, "end": 4983, "name": "JUMPDEST", "source": 0 }, + { "begin": 998, "end": 1167, "name": "JUMPDEST", "source": 0 }, { - "begin": 4924, - "end": 4943, + "begin": 1112, + "end": 1131, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 4959, - "end": 4972, + "begin": 1147, + "end": 1160, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4959, "end": 4972, "name": "MLOAD", "source": 0 }, - { "begin": 4959, "end": 4972, "name": "DUP1", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "MLOAD", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "DUP1", "source": 0 }, { - "begin": 4959, - "end": 4972, + "begin": 1147, + "end": 1160, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4959, "end": 4972, "name": "ADD", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "ADD", "source": 0 }, { - "begin": 4959, - "end": 4972, + "begin": 1147, + "end": 1160, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4959, "end": 4972, "name": "MSTORE", "source": 0 }, - { "begin": 4959, "end": 4972, "name": "DUP1", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "MSTORE", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "DUP1", "source": 0 }, { - "begin": 4959, - "end": 4972, + "begin": 1147, + "end": 1160, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4959, "end": 4972, "name": "DUP2", "source": 0 }, - { "begin": 4959, "end": 4972, "name": "MSTORE", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "DUP2", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "MSTORE", "source": 0 }, { - "begin": 4959, - "end": 4972, + "begin": 1147, + "end": 1160, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 4959, "end": 4972, "name": "ADD", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "ADD", "source": 0 }, { - "begin": 4959, - "end": 4972, + "begin": 1147, + "end": 1160, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 4959, "end": 4972, "name": "DUP2", "source": 0 }, - { "begin": 4959, "end": 4972, "name": "MSTORE", "source": 0 }, - { "begin": 4959, "end": 4972, "name": "POP", "source": 0 }, - { "begin": 4959, "end": 4972, "name": "SWAP1", "source": 0 }, - { "begin": 4959, "end": 4972, "name": "POP", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SWAP2", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "SWAP1", "source": 0 }, - { "begin": 4820, "end": 4983, "name": "POP", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "DUP2", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "MSTORE", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "POP", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "SWAP1", "source": 0 }, + { "begin": 1147, "end": 1160, "name": "POP", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP2", "source": 0 }, + { "begin": 998, "end": 1167, "name": "SWAP1", "source": 0 }, + { "begin": 998, "end": 1167, "name": "POP", "source": 0 }, { - "begin": 4820, - "end": 4983, + "begin": 998, + "end": 1167, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "tag", "source": 0, "value": "29" }, - { "begin": 4251, "end": 4486, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 660, "name": "JUMPDEST", "source": 0 }, { - "begin": 4428, - "end": 4447, + "begin": 609, + "end": 628, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 4462, - "end": 4475, + "begin": 640, + "end": 653, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4462, "end": 4475, "name": "MLOAD", "source": 0 }, - { "begin": 4462, "end": 4475, "name": "DUP1", "source": 0 }, + { "begin": 640, "end": 653, "name": "MLOAD", "source": 0 }, + { "begin": 640, "end": 653, "name": "DUP1", "source": 0 }, { - "begin": 4462, - "end": 4475, + "begin": 640, + "end": 653, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4462, "end": 4475, "name": "ADD", "source": 0 }, + { "begin": 640, "end": 653, "name": "ADD", "source": 0 }, { - "begin": 4462, - "end": 4475, + "begin": 640, + "end": 653, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4462, "end": 4475, "name": "MSTORE", "source": 0 }, - { "begin": 4462, "end": 4475, "name": "DUP1", "source": 0 }, + { "begin": 640, "end": 653, "name": "MSTORE", "source": 0 }, + { "begin": 640, "end": 653, "name": "DUP1", "source": 0 }, { - "begin": 4462, - "end": 4475, + "begin": 640, + "end": 653, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4462, "end": 4475, "name": "DUP2", "source": 0 }, - { "begin": 4462, "end": 4475, "name": "MSTORE", "source": 0 }, + { "begin": 640, "end": 653, "name": "DUP2", "source": 0 }, + { "begin": 640, "end": 653, "name": "MSTORE", "source": 0 }, { - "begin": 4462, - "end": 4475, + "begin": 640, + "end": 653, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 4462, "end": 4475, "name": "ADD", "source": 0 }, + { "begin": 640, "end": 653, "name": "ADD", "source": 0 }, { - "begin": 4462, - "end": 4475, + "begin": 640, + "end": 653, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 4462, "end": 4475, "name": "DUP2", "source": 0 }, - { "begin": 4462, "end": 4475, "name": "MSTORE", "source": 0 }, - { "begin": 4462, "end": 4475, "name": "POP", "source": 0 }, - { "begin": 4462, "end": 4475, "name": "SWAP1", "source": 0 }, - { "begin": 4462, "end": 4475, "name": "POP", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SWAP4", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "SWAP3", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "POP", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "POP", "source": 0 }, - { "begin": 4251, "end": 4486, "name": "POP", "source": 0 }, + { "begin": 640, "end": 653, "name": "DUP2", "source": 0 }, + { "begin": 640, "end": 653, "name": "MSTORE", "source": 0 }, + { "begin": 640, "end": 653, "name": "POP", "source": 0 }, + { "begin": 640, "end": 653, "name": "SWAP1", "source": 0 }, + { "begin": 640, "end": 653, "name": "POP", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP4", "source": 0 }, + { "begin": 449, "end": 660, "name": "SWAP3", "source": 0 }, + { "begin": 449, "end": 660, "name": "POP", "source": 0 }, + { "begin": 449, "end": 660, "name": "POP", "source": 0 }, + { "begin": 449, "end": 660, "name": "POP", "source": 0 }, { - "begin": 4251, - "end": 4486, + "begin": 449, + "end": 660, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "tag", "source": 0, "value": "34" }, - { "begin": 4992, "end": 5175, "name": "JUMPDEST", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "JUMPDEST", "source": 0 }, { - "begin": 5116, - "end": 5135, + "begin": 1295, + "end": 1314, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 5151, - "end": 5164, + "begin": 1330, + "end": 1343, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5151, "end": 5164, "name": "MLOAD", "source": 0 }, - { "begin": 5151, "end": 5164, "name": "DUP1", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "MLOAD", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "DUP1", "source": 0 }, { - "begin": 5151, - "end": 5164, + "begin": 1330, + "end": 1343, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5151, "end": 5164, "name": "ADD", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "ADD", "source": 0 }, { - "begin": 5151, - "end": 5164, + "begin": 1330, + "end": 1343, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5151, "end": 5164, "name": "MSTORE", "source": 0 }, - { "begin": 5151, "end": 5164, "name": "DUP1", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "MSTORE", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "DUP1", "source": 0 }, { - "begin": 5151, - "end": 5164, + "begin": 1330, + "end": 1343, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5151, "end": 5164, "name": "DUP2", "source": 0 }, - { "begin": 5151, "end": 5164, "name": "MSTORE", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "DUP2", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "MSTORE", "source": 0 }, { - "begin": 5151, - "end": 5164, + "begin": 1330, + "end": 1343, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 5151, "end": 5164, "name": "ADD", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "ADD", "source": 0 }, { - "begin": 5151, - "end": 5164, + "begin": 1330, + "end": 1343, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 5151, "end": 5164, "name": "DUP2", "source": 0 }, - { "begin": 5151, "end": 5164, "name": "MSTORE", "source": 0 }, - { "begin": 5151, "end": 5164, "name": "POP", "source": 0 }, - { "begin": 5151, "end": 5164, "name": "SWAP1", "source": 0 }, - { "begin": 5151, "end": 5164, "name": "POP", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SWAP3", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "SWAP2", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "POP", "source": 0 }, - { "begin": 4992, "end": 5175, "name": "POP", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "DUP2", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "MSTORE", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "POP", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "SWAP1", "source": 0 }, + { "begin": 1330, "end": 1343, "name": "POP", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP3", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "SWAP2", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "POP", "source": 0 }, + { "begin": 1173, "end": 1350, "name": "POP", "source": 0 }, { - "begin": 4992, - "end": 5175, + "begin": 1173, + "end": 1350, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "tag", "source": 0, "value": "38" }, - { "begin": 4495, "end": 4650, "name": "JUMPDEST", "source": 0 }, + { "begin": 666, "end": 828, "name": "JUMPDEST", "source": 0 }, { - "begin": 4592, - "end": 4611, + "begin": 773, + "end": 792, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 4626, - "end": 4639, + "begin": 808, + "end": 821, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4626, "end": 4639, "name": "MLOAD", "source": 0 }, - { "begin": 4626, "end": 4639, "name": "DUP1", "source": 0 }, + { "begin": 808, "end": 821, "name": "MLOAD", "source": 0 }, + { "begin": 808, "end": 821, "name": "DUP1", "source": 0 }, { - "begin": 4626, - "end": 4639, + "begin": 808, + "end": 821, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4626, "end": 4639, "name": "ADD", "source": 0 }, + { "begin": 808, "end": 821, "name": "ADD", "source": 0 }, { - "begin": 4626, - "end": 4639, + "begin": 808, + "end": 821, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 4626, "end": 4639, "name": "MSTORE", "source": 0 }, - { "begin": 4626, "end": 4639, "name": "DUP1", "source": 0 }, + { "begin": 808, "end": 821, "name": "MSTORE", "source": 0 }, + { "begin": 808, "end": 821, "name": "DUP1", "source": 0 }, { - "begin": 4626, - "end": 4639, + "begin": 808, + "end": 821, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 4626, "end": 4639, "name": "DUP2", "source": 0 }, - { "begin": 4626, "end": 4639, "name": "MSTORE", "source": 0 }, + { "begin": 808, "end": 821, "name": "DUP2", "source": 0 }, + { "begin": 808, "end": 821, "name": "MSTORE", "source": 0 }, { - "begin": 4626, - "end": 4639, + "begin": 808, + "end": 821, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 4626, "end": 4639, "name": "ADD", "source": 0 }, + { "begin": 808, "end": 821, "name": "ADD", "source": 0 }, { - "begin": 4626, - "end": 4639, + "begin": 808, + "end": 821, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 4626, "end": 4639, "name": "DUP2", "source": 0 }, - { "begin": 4626, "end": 4639, "name": "MSTORE", "source": 0 }, - { "begin": 4626, "end": 4639, "name": "POP", "source": 0 }, - { "begin": 4626, "end": 4639, "name": "SWAP1", "source": 0 }, - { "begin": 4626, "end": 4639, "name": "POP", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SWAP2", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "SWAP1", "source": 0 }, - { "begin": 4495, "end": 4650, "name": "POP", "source": 0 }, + { "begin": 808, "end": 821, "name": "DUP2", "source": 0 }, + { "begin": 808, "end": 821, "name": "MSTORE", "source": 0 }, + { "begin": 808, "end": 821, "name": "POP", "source": 0 }, + { "begin": 808, "end": 821, "name": "SWAP1", "source": 0 }, + { "begin": 808, "end": 821, "name": "POP", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP2", "source": 0 }, + { "begin": 666, "end": 828, "name": "SWAP1", "source": 0 }, + { "begin": 666, "end": 828, "name": "POP", "source": 0 }, { - "begin": 4495, - "end": 4650, + "begin": 666, + "end": 828, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "tag", "source": 0, "value": "41" }, - { "begin": 4150, "end": 4241, "name": "JUMPDEST", "source": 0 }, + { "begin": 343, "end": 442, "name": "JUMPDEST", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 4150, "end": 4241, "name": "DUP1", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SLOAD", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SWAP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "DUP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "SLOAD", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP1", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 4150, "end": 4241, "name": "EXP", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "SWAP1", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "DIV", "source": 0 }, + { "begin": 343, "end": 442, "name": "EXP", "source": 0 }, + { "begin": 343, "end": 442, "name": "SWAP1", "source": 0 }, + { "begin": 343, "end": 442, "name": "DIV", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 4150, "end": 4241, "name": "AND", "source": 0 }, - { "begin": 4150, "end": 4241, "name": "DUP2", "source": 0 }, + { "begin": 343, "end": 442, "name": "AND", "source": 0 }, + { "begin": 343, "end": 442, "name": "DUP2", "source": 0 }, { - "begin": 4150, - "end": 4241, + "begin": 343, + "end": 442, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "tag", "source": 0, "value": "46" }, - { "begin": 5664, "end": 5827, "name": "JUMPDEST", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "JUMPDEST", "source": 0 }, { - "begin": 5769, - "end": 5788, + "begin": 1981, + "end": 2000, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 5803, - "end": 5816, + "begin": 2016, + "end": 2029, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5803, "end": 5816, "name": "MLOAD", "source": 0 }, - { "begin": 5803, "end": 5816, "name": "DUP1", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "MLOAD", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "DUP1", "source": 0 }, { - "begin": 5803, - "end": 5816, + "begin": 2016, + "end": 2029, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5803, "end": 5816, "name": "ADD", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "ADD", "source": 0 }, { - "begin": 5803, - "end": 5816, + "begin": 2016, + "end": 2029, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5803, "end": 5816, "name": "MSTORE", "source": 0 }, - { "begin": 5803, "end": 5816, "name": "DUP1", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "MSTORE", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "DUP1", "source": 0 }, { - "begin": 5803, - "end": 5816, + "begin": 2016, + "end": 2029, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5803, "end": 5816, "name": "DUP2", "source": 0 }, - { "begin": 5803, "end": 5816, "name": "MSTORE", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "DUP2", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "MSTORE", "source": 0 }, { - "begin": 5803, - "end": 5816, + "begin": 2016, + "end": 2029, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 5803, "end": 5816, "name": "ADD", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "ADD", "source": 0 }, { - "begin": 5803, - "end": 5816, + "begin": 2016, + "end": 2029, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 5803, "end": 5816, "name": "DUP2", "source": 0 }, - { "begin": 5803, "end": 5816, "name": "MSTORE", "source": 0 }, - { "begin": 5803, "end": 5816, "name": "POP", "source": 0 }, - { "begin": 5803, "end": 5816, "name": "SWAP1", "source": 0 }, - { "begin": 5803, "end": 5816, "name": "POP", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SWAP2", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "SWAP1", "source": 0 }, - { "begin": 5664, "end": 5827, "name": "POP", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "DUP2", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "MSTORE", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "POP", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "SWAP1", "source": 0 }, + { "begin": 2016, "end": 2029, "name": "POP", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP2", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "SWAP1", "source": 0 }, + { "begin": 1866, "end": 2036, "name": "POP", "source": 0 }, { - "begin": 5664, - "end": 5827, + "begin": 1866, + "end": 2036, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "tag", "source": 0, "value": "51" }, - { "begin": 5483, "end": 5655, "name": "JUMPDEST", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "JUMPDEST", "source": 0 }, { - "begin": 5596, - "end": 5615, + "begin": 1805, + "end": 1824, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 5631, - "end": 5644, + "begin": 1840, + "end": 1853, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5631, "end": 5644, "name": "MLOAD", "source": 0 }, - { "begin": 5631, "end": 5644, "name": "DUP1", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "MLOAD", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "DUP1", "source": 0 }, { - "begin": 5631, - "end": 5644, + "begin": 1840, + "end": 1853, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5631, "end": 5644, "name": "ADD", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "ADD", "source": 0 }, { - "begin": 5631, - "end": 5644, + "begin": 1840, + "end": 1853, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5631, "end": 5644, "name": "MSTORE", "source": 0 }, - { "begin": 5631, "end": 5644, "name": "DUP1", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "MSTORE", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "DUP1", "source": 0 }, { - "begin": 5631, - "end": 5644, + "begin": 1840, + "end": 1853, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5631, "end": 5644, "name": "DUP2", "source": 0 }, - { "begin": 5631, "end": 5644, "name": "MSTORE", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "DUP2", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "MSTORE", "source": 0 }, { - "begin": 5631, - "end": 5644, + "begin": 1840, + "end": 1853, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 5631, "end": 5644, "name": "ADD", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "ADD", "source": 0 }, { - "begin": 5631, - "end": 5644, + "begin": 1840, + "end": 1853, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 5631, "end": 5644, "name": "DUP2", "source": 0 }, - { "begin": 5631, "end": 5644, "name": "MSTORE", "source": 0 }, - { "begin": 5631, "end": 5644, "name": "POP", "source": 0 }, - { "begin": 5631, "end": 5644, "name": "SWAP1", "source": 0 }, - { "begin": 5631, "end": 5644, "name": "POP", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SWAP2", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "SWAP1", "source": 0 }, - { "begin": 5483, "end": 5655, "name": "POP", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "DUP2", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "MSTORE", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "POP", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "SWAP1", "source": 0 }, + { "begin": 1840, "end": 1853, "name": "POP", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP2", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "SWAP1", "source": 0 }, + { "begin": 1682, "end": 1860, "name": "POP", "source": 0 }, { - "begin": 5483, - "end": 5655, + "begin": 1682, + "end": 1860, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "tag", "source": 0, "value": "56" }, - { "begin": 5184, "end": 5350, "name": "JUMPDEST", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "JUMPDEST", "source": 0 }, { - "begin": 5291, - "end": 5310, + "begin": 1472, + "end": 1491, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 5326, - "end": 5339, + "begin": 1507, + "end": 1520, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5326, "end": 5339, "name": "MLOAD", "source": 0 }, - { "begin": 5326, "end": 5339, "name": "DUP1", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "MLOAD", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "DUP1", "source": 0 }, { - "begin": 5326, - "end": 5339, + "begin": 1507, + "end": 1520, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5326, "end": 5339, "name": "ADD", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "ADD", "source": 0 }, { - "begin": 5326, - "end": 5339, + "begin": 1507, + "end": 1520, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5326, "end": 5339, "name": "MSTORE", "source": 0 }, - { "begin": 5326, "end": 5339, "name": "DUP1", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "MSTORE", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "DUP1", "source": 0 }, { - "begin": 5326, - "end": 5339, + "begin": 1507, + "end": 1520, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5326, "end": 5339, "name": "DUP2", "source": 0 }, - { "begin": 5326, "end": 5339, "name": "MSTORE", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "DUP2", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "MSTORE", "source": 0 }, { - "begin": 5326, - "end": 5339, + "begin": 1507, + "end": 1520, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 5326, "end": 5339, "name": "ADD", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "ADD", "source": 0 }, { - "begin": 5326, - "end": 5339, + "begin": 1507, + "end": 1520, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 5326, "end": 5339, "name": "DUP2", "source": 0 }, - { "begin": 5326, "end": 5339, "name": "MSTORE", "source": 0 }, - { "begin": 5326, "end": 5339, "name": "POP", "source": 0 }, - { "begin": 5326, "end": 5339, "name": "SWAP1", "source": 0 }, - { "begin": 5326, "end": 5339, "name": "POP", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SWAP2", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "SWAP1", "source": 0 }, - { "begin": 5184, "end": 5350, "name": "POP", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "DUP2", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "MSTORE", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "POP", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "SWAP1", "source": 0 }, + { "begin": 1507, "end": 1520, "name": "POP", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP2", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "SWAP1", "source": 0 }, + { "begin": 1356, "end": 1527, "name": "POP", "source": 0 }, { - "begin": 5184, - "end": 5350, + "begin": 1356, + "end": 1527, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "tag", "source": 0, "value": "60" }, - { "begin": 5836, "end": 5987, "name": "JUMPDEST", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "JUMPDEST", "source": 0 }, { - "begin": 5929, - "end": 5948, + "begin": 2145, + "end": 2164, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 5963, - "end": 5976, + "begin": 2180, + "end": 2193, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5963, "end": 5976, "name": "MLOAD", "source": 0 }, - { "begin": 5963, "end": 5976, "name": "DUP1", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "MLOAD", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "DUP1", "source": 0 }, { - "begin": 5963, - "end": 5976, + "begin": 2180, + "end": 2193, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5963, "end": 5976, "name": "ADD", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "ADD", "source": 0 }, { - "begin": 5963, - "end": 5976, + "begin": 2180, + "end": 2193, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5963, "end": 5976, "name": "MSTORE", "source": 0 }, - { "begin": 5963, "end": 5976, "name": "DUP1", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "MSTORE", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "DUP1", "source": 0 }, { - "begin": 5963, - "end": 5976, + "begin": 2180, + "end": 2193, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5963, "end": 5976, "name": "DUP2", "source": 0 }, - { "begin": 5963, "end": 5976, "name": "MSTORE", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "DUP2", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "MSTORE", "source": 0 }, { - "begin": 5963, - "end": 5976, + "begin": 2180, + "end": 2193, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 5963, "end": 5976, "name": "ADD", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "ADD", "source": 0 }, { - "begin": 5963, - "end": 5976, + "begin": 2180, + "end": 2193, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 5963, "end": 5976, "name": "DUP2", "source": 0 }, - { "begin": 5963, "end": 5976, "name": "MSTORE", "source": 0 }, - { "begin": 5963, "end": 5976, "name": "POP", "source": 0 }, - { "begin": 5963, "end": 5976, "name": "SWAP1", "source": 0 }, - { "begin": 5963, "end": 5976, "name": "POP", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SWAP2", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "SWAP1", "source": 0 }, - { "begin": 5836, "end": 5987, "name": "POP", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "DUP2", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "MSTORE", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "POP", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "SWAP1", "source": 0 }, + { "begin": 2180, "end": 2193, "name": "POP", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP2", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "SWAP1", "source": 0 }, + { "begin": 2042, "end": 2200, "name": "POP", "source": 0 }, { - "begin": 5836, - "end": 5987, + "begin": 2042, + "end": 2200, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "tag", "source": 0, "value": "63" }, - { "begin": 5359, "end": 5474, "name": "JUMPDEST", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "JUMPDEST", "source": 0 }, { - "begin": 5415, - "end": 5434, + "begin": 1621, + "end": 1640, "name": "PUSH", "source": 0, "value": "60" }, { - "begin": 5450, - "end": 5463, + "begin": 1656, + "end": 1669, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5450, "end": 5463, "name": "MLOAD", "source": 0 }, - { "begin": 5450, "end": 5463, "name": "DUP1", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "MLOAD", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "DUP1", "source": 0 }, { - "begin": 5450, - "end": 5463, + "begin": 1656, + "end": 1669, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5450, "end": 5463, "name": "ADD", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "ADD", "source": 0 }, { - "begin": 5450, - "end": 5463, + "begin": 1656, + "end": 1669, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5450, "end": 5463, "name": "MSTORE", "source": 0 }, - { "begin": 5450, "end": 5463, "name": "DUP1", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "MSTORE", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "DUP1", "source": 0 }, { - "begin": 5450, - "end": 5463, + "begin": 1656, + "end": 1669, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5450, "end": 5463, "name": "DUP2", "source": 0 }, - { "begin": 5450, "end": 5463, "name": "MSTORE", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "DUP2", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "MSTORE", "source": 0 }, { - "begin": 5450, - "end": 5463, + "begin": 1656, + "end": 1669, "name": "PUSH", "source": 0, "value": "20" }, - { "begin": 5450, "end": 5463, "name": "ADD", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "ADD", "source": 0 }, { - "begin": 5450, - "end": 5463, + "begin": 1656, + "end": 1669, "name": "PUSH", "source": 0, "value": "3078303000000000000000000000000000000000000000000000000000000000" }, - { "begin": 5450, "end": 5463, "name": "DUP2", "source": 0 }, - { "begin": 5450, "end": 5463, "name": "MSTORE", "source": 0 }, - { "begin": 5450, "end": 5463, "name": "POP", "source": 0 }, - { "begin": 5450, "end": 5463, "name": "SWAP1", "source": 0 }, - { "begin": 5450, "end": 5463, "name": "POP", "source": 0 }, - { "begin": 5359, "end": 5474, "name": "SWAP1", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "DUP2", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "MSTORE", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "POP", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "SWAP1", "source": 0 }, + { "begin": 1656, "end": 1669, "name": "POP", "source": 0 }, + { "begin": 1533, "end": 1676, "name": "SWAP1", "source": 0 }, { - "begin": 5359, - "end": 5474, + "begin": 1533, + "end": 1676, "name": "JUMP", "source": 0, "value": "[out]" @@ -8761,3826 +8746,3826 @@ "begin": 7, "end": 82, "name": "tag", - "source": 1, + "source": 2, "value": "75" }, - { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 2 }, { "begin": 40, "end": 46, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 73, "end": 75, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 67, "end": 76, "name": "MLOAD", "source": 1 }, - { "begin": 57, "end": 76, "name": "SWAP1", "source": 1 }, - { "begin": 57, "end": 76, "name": "POP", "source": 1 }, - { "begin": 7, "end": 82, "name": "SWAP1", "source": 1 }, + { "begin": 67, "end": 76, "name": "MLOAD", "source": 2 }, + { "begin": 57, "end": 76, "name": "SWAP1", "source": 2 }, + { "begin": 57, "end": 76, "name": "POP", "source": 2 }, + { "begin": 7, "end": 82, "name": "SWAP1", "source": 2 }, { "begin": 7, "end": 82, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 88, "end": 205, "name": "tag", - "source": 1, + "source": 2, "value": "76" }, - { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 2 }, { "begin": 197, "end": 198, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, - { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 2 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 2 }, { "begin": 211, "end": 328, "name": "tag", - "source": 1, + "source": 2, "value": "77" }, - { "begin": 211, "end": 328, "name": "JUMPDEST", "source": 1 }, + { "begin": 211, "end": 328, "name": "JUMPDEST", "source": 2 }, { "begin": 320, "end": 321, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 317, "end": 318, "name": "DUP1", "source": 1 }, - { "begin": 310, "end": 322, "name": "REVERT", "source": 1 }, + { "begin": 317, "end": 318, "name": "DUP1", "source": 2 }, + { "begin": 310, "end": 322, "name": "REVERT", "source": 2 }, { "begin": 334, "end": 411, "name": "tag", - "source": 1, + "source": 2, "value": "78" }, - { "begin": 334, "end": 411, "name": "JUMPDEST", "source": 1 }, + { "begin": 334, "end": 411, "name": "JUMPDEST", "source": 2 }, { "begin": 371, "end": 378, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 400, "end": 405, "name": "DUP2", "source": 1 }, - { "begin": 389, "end": 405, "name": "SWAP1", "source": 1 }, - { "begin": 389, "end": 405, "name": "POP", "source": 1 }, - { "begin": 334, "end": 411, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 411, "name": "SWAP1", "source": 1 }, - { "begin": 334, "end": 411, "name": "POP", "source": 1 }, + { "begin": 400, "end": 405, "name": "DUP2", "source": 2 }, + { "begin": 389, "end": 405, "name": "SWAP1", "source": 2 }, + { "begin": 389, "end": 405, "name": "POP", "source": 2 }, + { "begin": 334, "end": 411, "name": "SWAP2", "source": 2 }, + { "begin": 334, "end": 411, "name": "SWAP1", "source": 2 }, + { "begin": 334, "end": 411, "name": "POP", "source": 2 }, { "begin": 334, "end": 411, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 417, "end": 539, "name": "tag", - "source": 1, + "source": 2, "value": "79" }, - { "begin": 417, "end": 539, "name": "JUMPDEST", "source": 1 }, + { "begin": 417, "end": 539, "name": "JUMPDEST", "source": 2 }, { "begin": 490, "end": 514, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "117" }, - { "begin": 508, "end": 513, "name": "DUP2", "source": 1 }, + { "begin": 508, "end": 513, "name": "DUP2", "source": 2 }, { "begin": 490, "end": 514, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "78" }, { "begin": 490, "end": 514, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 490, "end": 514, "name": "tag", - "source": 1, + "source": 2, "value": "117" }, - { "begin": 490, "end": 514, "name": "JUMPDEST", "source": 1 }, - { "begin": 483, "end": 488, "name": "DUP2", "source": 1 }, - { "begin": 480, "end": 515, "name": "EQ", "source": 1 }, + { "begin": 490, "end": 514, "name": "JUMPDEST", "source": 2 }, + { "begin": 483, "end": 488, "name": "DUP2", "source": 2 }, + { "begin": 480, "end": 515, "name": "EQ", "source": 2 }, { "begin": 470, "end": 533, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "118" }, - { "begin": 470, "end": 533, "name": "JUMPI", "source": 1 }, + { "begin": 470, "end": 533, "name": "JUMPI", "source": 2 }, { "begin": 529, "end": 530, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 526, "end": 527, "name": "DUP1", "source": 1 }, - { "begin": 519, "end": 531, "name": "REVERT", "source": 1 }, + { "begin": 526, "end": 527, "name": "DUP1", "source": 2 }, + { "begin": 519, "end": 531, "name": "REVERT", "source": 2 }, { "begin": 470, "end": 533, "name": "tag", - "source": 1, + "source": 2, "value": "118" }, - { "begin": 470, "end": 533, "name": "JUMPDEST", "source": 1 }, - { "begin": 417, "end": 539, "name": "POP", "source": 1 }, + { "begin": 470, "end": 533, "name": "JUMPDEST", "source": 2 }, + { "begin": 417, "end": 539, "name": "POP", "source": 2 }, { "begin": 417, "end": 539, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 545, "end": 684, "name": "tag", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 545, "end": 684, "name": "JUMPDEST", "source": 1 }, + { "begin": 545, "end": 684, "name": "JUMPDEST", "source": 2 }, { "begin": 591, "end": 596, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 629, "end": 635, "name": "DUP2", "source": 1 }, - { "begin": 616, "end": 636, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 607, "end": 636, "name": "SWAP1", "source": 1 }, - { "begin": 607, "end": 636, "name": "POP", "source": 1 }, + { "begin": 629, "end": 635, "name": "DUP2", "source": 2 }, + { "begin": 616, "end": 636, "name": "CALLDATALOAD", "source": 2 }, + { "begin": 607, "end": 636, "name": "SWAP1", "source": 2 }, + { "begin": 607, "end": 636, "name": "POP", "source": 2 }, { "begin": 645, "end": 678, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "120" }, - { "begin": 672, "end": 677, "name": "DUP2", "source": 1 }, + { "begin": 672, "end": 677, "name": "DUP2", "source": 2 }, { "begin": 645, "end": 678, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "79" }, { "begin": 645, "end": 678, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 645, "end": 678, "name": "tag", - "source": 1, + "source": 2, "value": "120" }, - { "begin": 645, "end": 678, "name": "JUMPDEST", "source": 1 }, - { "begin": 545, "end": 684, "name": "SWAP3", "source": 1 }, - { "begin": 545, "end": 684, "name": "SWAP2", "source": 1 }, - { "begin": 545, "end": 684, "name": "POP", "source": 1 }, - { "begin": 545, "end": 684, "name": "POP", "source": 1 }, + { "begin": 645, "end": 678, "name": "JUMPDEST", "source": 2 }, + { "begin": 545, "end": 684, "name": "SWAP3", "source": 2 }, + { "begin": 545, "end": 684, "name": "SWAP2", "source": 2 }, + { "begin": 545, "end": 684, "name": "POP", "source": 2 }, + { "begin": 545, "end": 684, "name": "POP", "source": 2 }, { "begin": 545, "end": 684, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 690, "end": 1019, "name": "tag", - "source": 1, + "source": 2, "value": "17" }, - { "begin": 690, "end": 1019, "name": "JUMPDEST", "source": 1 }, + { "begin": 690, "end": 1019, "name": "JUMPDEST", "source": 2 }, { "begin": 749, "end": 755, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 798, "end": 800, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 786, "end": 795, "name": "DUP3", "source": 1 }, - { "begin": 777, "end": 784, "name": "DUP5", "source": 1 }, - { "begin": 773, "end": 796, "name": "SUB", "source": 1 }, - { "begin": 769, "end": 801, "name": "SLT", "source": 1 }, - { "begin": 766, "end": 885, "name": "ISZERO", "source": 1 }, + { "begin": 786, "end": 795, "name": "DUP3", "source": 2 }, + { "begin": 777, "end": 784, "name": "DUP5", "source": 2 }, + { "begin": 773, "end": 796, "name": "SUB", "source": 2 }, + { "begin": 769, "end": 801, "name": "SLT", "source": 2 }, + { "begin": 766, "end": 885, "name": "ISZERO", "source": 2 }, { "begin": 766, "end": 885, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "122" }, - { "begin": 766, "end": 885, "name": "JUMPI", "source": 1 }, + { "begin": 766, "end": 885, "name": "JUMPI", "source": 2 }, { "begin": 804, "end": 883, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "123" }, { "begin": 804, "end": 883, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { "begin": 804, "end": 883, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 804, "end": 883, "name": "tag", - "source": 1, + "source": 2, "value": "123" }, - { "begin": 804, "end": 883, "name": "JUMPDEST", "source": 1 }, + { "begin": 804, "end": 883, "name": "JUMPDEST", "source": 2 }, { "begin": 766, "end": 885, "name": "tag", - "source": 1, + "source": 2, "value": "122" }, - { "begin": 766, "end": 885, "name": "JUMPDEST", "source": 1 }, + { "begin": 766, "end": 885, "name": "JUMPDEST", "source": 2 }, { "begin": 924, "end": 925, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 949, "end": 1002, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "124" }, - { "begin": 994, "end": 1001, "name": "DUP5", "source": 1 }, - { "begin": 985, "end": 991, "name": "DUP3", "source": 1 }, - { "begin": 974, "end": 983, "name": "DUP6", "source": 1 }, - { "begin": 970, "end": 992, "name": "ADD", "source": 1 }, + { "begin": 994, "end": 1001, "name": "DUP5", "source": 2 }, + { "begin": 985, "end": 991, "name": "DUP3", "source": 2 }, + { "begin": 974, "end": 983, "name": "DUP6", "source": 2 }, + { "begin": 970, "end": 992, "name": "ADD", "source": 2 }, { "begin": 949, "end": 1002, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { "begin": 949, "end": 1002, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 949, "end": 1002, "name": "tag", - "source": 1, + "source": 2, "value": "124" }, - { "begin": 949, "end": 1002, "name": "JUMPDEST", "source": 1 }, - { "begin": 939, "end": 1002, "name": "SWAP2", "source": 1 }, - { "begin": 939, "end": 1002, "name": "POP", "source": 1 }, - { "begin": 895, "end": 1012, "name": "POP", "source": 1 }, - { "begin": 690, "end": 1019, "name": "SWAP3", "source": 1 }, - { "begin": 690, "end": 1019, "name": "SWAP2", "source": 1 }, - { "begin": 690, "end": 1019, "name": "POP", "source": 1 }, - { "begin": 690, "end": 1019, "name": "POP", "source": 1 }, + { "begin": 949, "end": 1002, "name": "JUMPDEST", "source": 2 }, + { "begin": 939, "end": 1002, "name": "SWAP2", "source": 2 }, + { "begin": 939, "end": 1002, "name": "POP", "source": 2 }, + { "begin": 895, "end": 1012, "name": "POP", "source": 2 }, + { "begin": 690, "end": 1019, "name": "SWAP3", "source": 2 }, + { "begin": 690, "end": 1019, "name": "SWAP2", "source": 2 }, + { "begin": 690, "end": 1019, "name": "POP", "source": 2 }, + { "begin": 690, "end": 1019, "name": "POP", "source": 2 }, { "begin": 690, "end": 1019, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1025, "end": 1123, "name": "tag", - "source": 1, + "source": 2, "value": "81" }, - { "begin": 1025, "end": 1123, "name": "JUMPDEST", "source": 1 }, + { "begin": 1025, "end": 1123, "name": "JUMPDEST", "source": 2 }, { "begin": 1076, "end": 1082, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1110, "end": 1115, "name": "DUP2", "source": 1 }, - { "begin": 1104, "end": 1116, "name": "MLOAD", "source": 1 }, - { "begin": 1094, "end": 1116, "name": "SWAP1", "source": 1 }, - { "begin": 1094, "end": 1116, "name": "POP", "source": 1 }, - { "begin": 1025, "end": 1123, "name": "SWAP2", "source": 1 }, - { "begin": 1025, "end": 1123, "name": "SWAP1", "source": 1 }, - { "begin": 1025, "end": 1123, "name": "POP", "source": 1 }, + { "begin": 1110, "end": 1115, "name": "DUP2", "source": 2 }, + { "begin": 1104, "end": 1116, "name": "MLOAD", "source": 2 }, + { "begin": 1094, "end": 1116, "name": "SWAP1", "source": 2 }, + { "begin": 1094, "end": 1116, "name": "POP", "source": 2 }, + { "begin": 1025, "end": 1123, "name": "SWAP2", "source": 2 }, + { "begin": 1025, "end": 1123, "name": "SWAP1", "source": 2 }, + { "begin": 1025, "end": 1123, "name": "POP", "source": 2 }, { "begin": 1025, "end": 1123, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1129, "end": 1297, "name": "tag", - "source": 1, + "source": 2, "value": "82" }, - { "begin": 1129, "end": 1297, "name": "JUMPDEST", "source": 1 }, + { "begin": 1129, "end": 1297, "name": "JUMPDEST", "source": 2 }, { "begin": 1212, "end": 1223, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1246, "end": 1252, "name": "DUP3", "source": 1 }, - { "begin": 1241, "end": 1244, "name": "DUP3", "source": 1 }, - { "begin": 1234, "end": 1253, "name": "MSTORE", "source": 1 }, + { "begin": 1246, "end": 1252, "name": "DUP3", "source": 2 }, + { "begin": 1241, "end": 1244, "name": "DUP3", "source": 2 }, + { "begin": 1234, "end": 1253, "name": "MSTORE", "source": 2 }, { "begin": 1286, "end": 1290, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 1281, "end": 1284, "name": "DUP3", "source": 1 }, - { "begin": 1277, "end": 1291, "name": "ADD", "source": 1 }, - { "begin": 1262, "end": 1291, "name": "SWAP1", "source": 1 }, - { "begin": 1262, "end": 1291, "name": "POP", "source": 1 }, - { "begin": 1129, "end": 1297, "name": "SWAP3", "source": 1 }, - { "begin": 1129, "end": 1297, "name": "SWAP2", "source": 1 }, - { "begin": 1129, "end": 1297, "name": "POP", "source": 1 }, - { "begin": 1129, "end": 1297, "name": "POP", "source": 1 }, + { "begin": 1281, "end": 1284, "name": "DUP3", "source": 2 }, + { "begin": 1277, "end": 1291, "name": "ADD", "source": 2 }, + { "begin": 1262, "end": 1291, "name": "SWAP1", "source": 2 }, + { "begin": 1262, "end": 1291, "name": "POP", "source": 2 }, + { "begin": 1129, "end": 1297, "name": "SWAP3", "source": 2 }, + { "begin": 1129, "end": 1297, "name": "SWAP2", "source": 2 }, + { "begin": 1129, "end": 1297, "name": "POP", "source": 2 }, + { "begin": 1129, "end": 1297, "name": "POP", "source": 2 }, { "begin": 1129, "end": 1297, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1303, "end": 1610, "name": "tag", - "source": 1, + "source": 2, "value": "83" }, - { "begin": 1303, "end": 1610, "name": "JUMPDEST", "source": 1 }, + { "begin": 1303, "end": 1610, "name": "JUMPDEST", "source": 2 }, { "begin": 1371, "end": 1372, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1381, "end": 1494, "name": "tag", - "source": 1, + "source": 2, "value": "128" }, - { "begin": 1381, "end": 1494, "name": "JUMPDEST", "source": 1 }, - { "begin": 1395, "end": 1401, "name": "DUP4", "source": 1 }, - { "begin": 1392, "end": 1393, "name": "DUP2", "source": 1 }, - { "begin": 1389, "end": 1402, "name": "LT", "source": 1 }, - { "begin": 1381, "end": 1494, "name": "ISZERO", "source": 1 }, + { "begin": 1381, "end": 1494, "name": "JUMPDEST", "source": 2 }, + { "begin": 1395, "end": 1401, "name": "DUP4", "source": 2 }, + { "begin": 1392, "end": 1393, "name": "DUP2", "source": 2 }, + { "begin": 1389, "end": 1402, "name": "LT", "source": 2 }, + { "begin": 1381, "end": 1494, "name": "ISZERO", "source": 2 }, { "begin": 1381, "end": 1494, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "130" }, - { "begin": 1381, "end": 1494, "name": "JUMPI", "source": 1 }, - { "begin": 1480, "end": 1481, "name": "DUP1", "source": 1 }, - { "begin": 1475, "end": 1478, "name": "DUP3", "source": 1 }, - { "begin": 1471, "end": 1482, "name": "ADD", "source": 1 }, - { "begin": 1465, "end": 1483, "name": "MLOAD", "source": 1 }, - { "begin": 1461, "end": 1462, "name": "DUP2", "source": 1 }, - { "begin": 1456, "end": 1459, "name": "DUP5", "source": 1 }, - { "begin": 1452, "end": 1463, "name": "ADD", "source": 1 }, - { "begin": 1445, "end": 1484, "name": "MSTORE", "source": 1 }, + { "begin": 1381, "end": 1494, "name": "JUMPI", "source": 2 }, + { "begin": 1480, "end": 1481, "name": "DUP1", "source": 2 }, + { "begin": 1475, "end": 1478, "name": "DUP3", "source": 2 }, + { "begin": 1471, "end": 1482, "name": "ADD", "source": 2 }, + { "begin": 1465, "end": 1483, "name": "MLOAD", "source": 2 }, + { "begin": 1461, "end": 1462, "name": "DUP2", "source": 2 }, + { "begin": 1456, "end": 1459, "name": "DUP5", "source": 2 }, + { "begin": 1452, "end": 1463, "name": "ADD", "source": 2 }, + { "begin": 1445, "end": 1484, "name": "MSTORE", "source": 2 }, { "begin": 1417, "end": 1419, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 1414, "end": 1415, "name": "DUP2", "source": 1 }, - { "begin": 1410, "end": 1420, "name": "ADD", "source": 1 }, - { "begin": 1405, "end": 1420, "name": "SWAP1", "source": 1 }, - { "begin": 1405, "end": 1420, "name": "POP", "source": 1 }, + { "begin": 1414, "end": 1415, "name": "DUP2", "source": 2 }, + { "begin": 1410, "end": 1420, "name": "ADD", "source": 2 }, + { "begin": 1405, "end": 1420, "name": "SWAP1", "source": 2 }, + { "begin": 1405, "end": 1420, "name": "POP", "source": 2 }, { "begin": 1381, "end": 1494, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "128" }, - { "begin": 1381, "end": 1494, "name": "JUMP", "source": 1 }, + { "begin": 1381, "end": 1494, "name": "JUMP", "source": 2 }, { "begin": 1381, "end": 1494, "name": "tag", - "source": 1, + "source": 2, "value": "130" }, - { "begin": 1381, "end": 1494, "name": "JUMPDEST", "source": 1 }, - { "begin": 1512, "end": 1518, "name": "DUP4", "source": 1 }, - { "begin": 1509, "end": 1510, "name": "DUP2", "source": 1 }, - { "begin": 1506, "end": 1519, "name": "GT", "source": 1 }, - { "begin": 1503, "end": 1604, "name": "ISZERO", "source": 1 }, + { "begin": 1381, "end": 1494, "name": "JUMPDEST", "source": 2 }, + { "begin": 1512, "end": 1518, "name": "DUP4", "source": 2 }, + { "begin": 1509, "end": 1510, "name": "DUP2", "source": 2 }, + { "begin": 1506, "end": 1519, "name": "GT", "source": 2 }, + { "begin": 1503, "end": 1604, "name": "ISZERO", "source": 2 }, { "begin": 1503, "end": 1604, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "131" }, - { "begin": 1503, "end": 1604, "name": "JUMPI", "source": 1 }, + { "begin": 1503, "end": 1604, "name": "JUMPI", "source": 2 }, { "begin": 1592, "end": 1593, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1583, "end": 1589, "name": "DUP5", "source": 1 }, - { "begin": 1578, "end": 1581, "name": "DUP5", "source": 1 }, - { "begin": 1574, "end": 1590, "name": "ADD", "source": 1 }, - { "begin": 1567, "end": 1594, "name": "MSTORE", "source": 1 }, + { "begin": 1583, "end": 1589, "name": "DUP5", "source": 2 }, + { "begin": 1578, "end": 1581, "name": "DUP5", "source": 2 }, + { "begin": 1574, "end": 1590, "name": "ADD", "source": 2 }, + { "begin": 1567, "end": 1594, "name": "MSTORE", "source": 2 }, { "begin": 1503, "end": 1604, "name": "tag", - "source": 1, + "source": 2, "value": "131" }, - { "begin": 1503, "end": 1604, "name": "JUMPDEST", "source": 1 }, - { "begin": 1352, "end": 1610, "name": "POP", "source": 1 }, - { "begin": 1303, "end": 1610, "name": "POP", "source": 1 }, - { "begin": 1303, "end": 1610, "name": "POP", "source": 1 }, - { "begin": 1303, "end": 1610, "name": "POP", "source": 1 }, + { "begin": 1503, "end": 1604, "name": "JUMPDEST", "source": 2 }, + { "begin": 1352, "end": 1610, "name": "POP", "source": 2 }, + { "begin": 1303, "end": 1610, "name": "POP", "source": 2 }, + { "begin": 1303, "end": 1610, "name": "POP", "source": 2 }, + { "begin": 1303, "end": 1610, "name": "POP", "source": 2 }, { "begin": 1303, "end": 1610, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1616, "end": 1718, "name": "tag", - "source": 1, + "source": 2, "value": "84" }, - { "begin": 1616, "end": 1718, "name": "JUMPDEST", "source": 1 }, + { "begin": 1616, "end": 1718, "name": "JUMPDEST", "source": 2 }, { "begin": 1657, "end": 1663, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1708, "end": 1710, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 1704, "end": 1711, "name": "NOT", "source": 1 }, + { "begin": 1704, "end": 1711, "name": "NOT", "source": 2 }, { "begin": 1699, "end": 1701, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 1692, "end": 1697, "name": "DUP4", "source": 1 }, - { "begin": 1688, "end": 1702, "name": "ADD", "source": 1 }, - { "begin": 1684, "end": 1712, "name": "AND", "source": 1 }, - { "begin": 1674, "end": 1712, "name": "SWAP1", "source": 1 }, - { "begin": 1674, "end": 1712, "name": "POP", "source": 1 }, - { "begin": 1616, "end": 1718, "name": "SWAP2", "source": 1 }, - { "begin": 1616, "end": 1718, "name": "SWAP1", "source": 1 }, - { "begin": 1616, "end": 1718, "name": "POP", "source": 1 }, + { "begin": 1692, "end": 1697, "name": "DUP4", "source": 2 }, + { "begin": 1688, "end": 1702, "name": "ADD", "source": 2 }, + { "begin": 1684, "end": 1712, "name": "AND", "source": 2 }, + { "begin": 1674, "end": 1712, "name": "SWAP1", "source": 2 }, + { "begin": 1674, "end": 1712, "name": "POP", "source": 2 }, + { "begin": 1616, "end": 1718, "name": "SWAP2", "source": 2 }, + { "begin": 1616, "end": 1718, "name": "SWAP1", "source": 2 }, + { "begin": 1616, "end": 1718, "name": "POP", "source": 2 }, { "begin": 1616, "end": 1718, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1724, "end": 2084, "name": "tag", - "source": 1, + "source": 2, "value": "85" }, - { "begin": 1724, "end": 2084, "name": "JUMPDEST", "source": 1 }, + { "begin": 1724, "end": 2084, "name": "JUMPDEST", "source": 2 }, { "begin": 1810, "end": 1813, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1838, "end": 1876, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "134" }, - { "begin": 1870, "end": 1875, "name": "DUP3", "source": 1 }, + { "begin": 1870, "end": 1875, "name": "DUP3", "source": 2 }, { "begin": 1838, "end": 1876, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "81" }, { "begin": 1838, "end": 1876, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1838, "end": 1876, "name": "tag", - "source": 1, + "source": 2, "value": "134" }, - { "begin": 1838, "end": 1876, "name": "JUMPDEST", "source": 1 }, + { "begin": 1838, "end": 1876, "name": "JUMPDEST", "source": 2 }, { "begin": 1892, "end": 1962, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, - { "begin": 1955, "end": 1961, "name": "DUP2", "source": 1 }, - { "begin": 1950, "end": 1953, "name": "DUP6", "source": 1 }, + { "begin": 1955, "end": 1961, "name": "DUP2", "source": 2 }, + { "begin": 1950, "end": 1953, "name": "DUP6", "source": 2 }, { "begin": 1892, "end": 1962, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { "begin": 1892, "end": 1962, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1892, "end": 1962, "name": "tag", - "source": 1, + "source": 2, "value": "135" }, - { "begin": 1892, "end": 1962, "name": "JUMPDEST", "source": 1 }, - { "begin": 1885, "end": 1962, "name": "SWAP4", "source": 1 }, - { "begin": 1885, "end": 1962, "name": "POP", "source": 1 }, + { "begin": 1892, "end": 1962, "name": "JUMPDEST", "source": 2 }, + { "begin": 1885, "end": 1962, "name": "SWAP4", "source": 2 }, + { "begin": 1885, "end": 1962, "name": "POP", "source": 2 }, { "begin": 1971, "end": 2023, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "136" }, - { "begin": 2016, "end": 2022, "name": "DUP2", "source": 1 }, - { "begin": 2011, "end": 2014, "name": "DUP6", "source": 1 }, + { "begin": 2016, "end": 2022, "name": "DUP2", "source": 2 }, + { "begin": 2011, "end": 2014, "name": "DUP6", "source": 2 }, { "begin": 2004, "end": 2008, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 1997, "end": 2002, "name": "DUP7", "source": 1 }, - { "begin": 1993, "end": 2009, "name": "ADD", "source": 1 }, + { "begin": 1997, "end": 2002, "name": "DUP7", "source": 2 }, + { "begin": 1993, "end": 2009, "name": "ADD", "source": 2 }, { "begin": 1971, "end": 2023, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "83" }, { "begin": 1971, "end": 2023, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1971, "end": 2023, "name": "tag", - "source": 1, + "source": 2, "value": "136" }, - { "begin": 1971, "end": 2023, "name": "JUMPDEST", "source": 1 }, + { "begin": 1971, "end": 2023, "name": "JUMPDEST", "source": 2 }, { "begin": 2048, "end": 2077, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "137" }, - { "begin": 2070, "end": 2076, "name": "DUP2", "source": 1 }, + { "begin": 2070, "end": 2076, "name": "DUP2", "source": 2 }, { "begin": 2048, "end": 2077, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "84" }, { "begin": 2048, "end": 2077, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2048, "end": 2077, "name": "tag", - "source": 1, + "source": 2, "value": "137" }, - { "begin": 2048, "end": 2077, "name": "JUMPDEST", "source": 1 }, - { "begin": 2043, "end": 2046, "name": "DUP5", "source": 1 }, - { "begin": 2039, "end": 2078, "name": "ADD", "source": 1 }, - { "begin": 2032, "end": 2078, "name": "SWAP2", "source": 1 }, - { "begin": 2032, "end": 2078, "name": "POP", "source": 1 }, - { "begin": 1814, "end": 2084, "name": "POP", "source": 1 }, - { "begin": 1724, "end": 2084, "name": "SWAP3", "source": 1 }, - { "begin": 1724, "end": 2084, "name": "SWAP2", "source": 1 }, - { "begin": 1724, "end": 2084, "name": "POP", "source": 1 }, - { "begin": 1724, "end": 2084, "name": "POP", "source": 1 }, + { "begin": 2048, "end": 2077, "name": "JUMPDEST", "source": 2 }, + { "begin": 2043, "end": 2046, "name": "DUP5", "source": 2 }, + { "begin": 2039, "end": 2078, "name": "ADD", "source": 2 }, + { "begin": 2032, "end": 2078, "name": "SWAP2", "source": 2 }, + { "begin": 2032, "end": 2078, "name": "POP", "source": 2 }, + { "begin": 1814, "end": 2084, "name": "POP", "source": 2 }, + { "begin": 1724, "end": 2084, "name": "SWAP3", "source": 2 }, + { "begin": 1724, "end": 2084, "name": "SWAP2", "source": 2 }, + { "begin": 1724, "end": 2084, "name": "POP", "source": 2 }, + { "begin": 1724, "end": 2084, "name": "POP", "source": 2 }, { "begin": 1724, "end": 2084, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2090, "end": 2399, "name": "tag", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 2090, "end": 2399, "name": "JUMPDEST", "source": 1 }, + { "begin": 2090, "end": 2399, "name": "JUMPDEST", "source": 2 }, { "begin": 2201, "end": 2205, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 2239, "end": 2241, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 2228, "end": 2237, "name": "DUP3", "source": 1 }, - { "begin": 2224, "end": 2242, "name": "ADD", "source": 1 }, - { "begin": 2216, "end": 2242, "name": "SWAP1", "source": 1 }, - { "begin": 2216, "end": 2242, "name": "POP", "source": 1 }, - { "begin": 2288, "end": 2297, "name": "DUP2", "source": 1 }, - { "begin": 2282, "end": 2286, "name": "DUP2", "source": 1 }, - { "begin": 2278, "end": 2298, "name": "SUB", "source": 1 }, + { "begin": 2228, "end": 2237, "name": "DUP3", "source": 2 }, + { "begin": 2224, "end": 2242, "name": "ADD", "source": 2 }, + { "begin": 2216, "end": 2242, "name": "SWAP1", "source": 2 }, + { "begin": 2216, "end": 2242, "name": "POP", "source": 2 }, + { "begin": 2288, "end": 2297, "name": "DUP2", "source": 2 }, + { "begin": 2282, "end": 2286, "name": "DUP2", "source": 2 }, + { "begin": 2278, "end": 2298, "name": "SUB", "source": 2 }, { "begin": 2274, "end": 2275, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2263, "end": 2272, "name": "DUP4", "source": 1 }, - { "begin": 2259, "end": 2276, "name": "ADD", "source": 1 }, - { "begin": 2252, "end": 2299, "name": "MSTORE", "source": 1 }, + { "begin": 2263, "end": 2272, "name": "DUP4", "source": 2 }, + { "begin": 2259, "end": 2276, "name": "ADD", "source": 2 }, + { "begin": 2252, "end": 2299, "name": "MSTORE", "source": 2 }, { "begin": 2316, "end": 2392, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "139" }, - { "begin": 2387, "end": 2391, "name": "DUP2", "source": 1 }, - { "begin": 2378, "end": 2384, "name": "DUP5", "source": 1 }, + { "begin": 2387, "end": 2391, "name": "DUP2", "source": 2 }, + { "begin": 2378, "end": 2384, "name": "DUP5", "source": 2 }, { "begin": 2316, "end": 2392, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "85" }, { "begin": 2316, "end": 2392, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2316, "end": 2392, "name": "tag", - "source": 1, + "source": 2, "value": "139" }, - { "begin": 2316, "end": 2392, "name": "JUMPDEST", "source": 1 }, - { "begin": 2308, "end": 2392, "name": "SWAP1", "source": 1 }, - { "begin": 2308, "end": 2392, "name": "POP", "source": 1 }, - { "begin": 2090, "end": 2399, "name": "SWAP3", "source": 1 }, - { "begin": 2090, "end": 2399, "name": "SWAP2", "source": 1 }, - { "begin": 2090, "end": 2399, "name": "POP", "source": 1 }, - { "begin": 2090, "end": 2399, "name": "POP", "source": 1 }, + { "begin": 2316, "end": 2392, "name": "JUMPDEST", "source": 2 }, + { "begin": 2308, "end": 2392, "name": "SWAP1", "source": 2 }, + { "begin": 2308, "end": 2392, "name": "POP", "source": 2 }, + { "begin": 2090, "end": 2399, "name": "SWAP3", "source": 2 }, + { "begin": 2090, "end": 2399, "name": "SWAP2", "source": 2 }, + { "begin": 2090, "end": 2399, "name": "POP", "source": 2 }, + { "begin": 2090, "end": 2399, "name": "POP", "source": 2 }, { "begin": 2090, "end": 2399, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2405, "end": 2498, "name": "tag", - "source": 1, + "source": 2, "value": "86" }, - { "begin": 2405, "end": 2498, "name": "JUMPDEST", "source": 1 }, + { "begin": 2405, "end": 2498, "name": "JUMPDEST", "source": 2 }, { "begin": 2441, "end": 2448, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 2481, "end": 2491, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFF" }, - { "begin": 2474, "end": 2479, "name": "DUP3", "source": 1 }, - { "begin": 2470, "end": 2492, "name": "AND", "source": 1 }, - { "begin": 2459, "end": 2492, "name": "SWAP1", "source": 1 }, - { "begin": 2459, "end": 2492, "name": "POP", "source": 1 }, - { "begin": 2405, "end": 2498, "name": "SWAP2", "source": 1 }, - { "begin": 2405, "end": 2498, "name": "SWAP1", "source": 1 }, - { "begin": 2405, "end": 2498, "name": "POP", "source": 1 }, + { "begin": 2474, "end": 2479, "name": "DUP3", "source": 2 }, + { "begin": 2470, "end": 2492, "name": "AND", "source": 2 }, + { "begin": 2459, "end": 2492, "name": "SWAP1", "source": 2 }, + { "begin": 2459, "end": 2492, "name": "POP", "source": 2 }, + { "begin": 2405, "end": 2498, "name": "SWAP2", "source": 2 }, + { "begin": 2405, "end": 2498, "name": "SWAP1", "source": 2 }, + { "begin": 2405, "end": 2498, "name": "POP", "source": 2 }, { "begin": 2405, "end": 2498, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2504, "end": 2624, "name": "tag", - "source": 1, + "source": 2, "value": "87" }, - { "begin": 2504, "end": 2624, "name": "JUMPDEST", "source": 1 }, + { "begin": 2504, "end": 2624, "name": "JUMPDEST", "source": 2 }, { "begin": 2576, "end": 2599, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "142" }, - { "begin": 2593, "end": 2598, "name": "DUP2", "source": 1 }, + { "begin": 2593, "end": 2598, "name": "DUP2", "source": 2 }, { "begin": 2576, "end": 2599, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "86" }, { "begin": 2576, "end": 2599, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2576, "end": 2599, "name": "tag", - "source": 1, + "source": 2, "value": "142" }, - { "begin": 2576, "end": 2599, "name": "JUMPDEST", "source": 1 }, - { "begin": 2569, "end": 2574, "name": "DUP2", "source": 1 }, - { "begin": 2566, "end": 2600, "name": "EQ", "source": 1 }, + { "begin": 2576, "end": 2599, "name": "JUMPDEST", "source": 2 }, + { "begin": 2569, "end": 2574, "name": "DUP2", "source": 2 }, + { "begin": 2566, "end": 2600, "name": "EQ", "source": 2 }, { "begin": 2556, "end": 2618, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "143" }, - { "begin": 2556, "end": 2618, "name": "JUMPI", "source": 1 }, + { "begin": 2556, "end": 2618, "name": "JUMPI", "source": 2 }, { "begin": 2614, "end": 2615, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2611, "end": 2612, "name": "DUP1", "source": 1 }, - { "begin": 2604, "end": 2616, "name": "REVERT", "source": 1 }, + { "begin": 2611, "end": 2612, "name": "DUP1", "source": 2 }, + { "begin": 2604, "end": 2616, "name": "REVERT", "source": 2 }, { "begin": 2556, "end": 2618, "name": "tag", - "source": 1, + "source": 2, "value": "143" }, - { "begin": 2556, "end": 2618, "name": "JUMPDEST", "source": 1 }, - { "begin": 2504, "end": 2624, "name": "POP", "source": 1 }, + { "begin": 2556, "end": 2618, "name": "JUMPDEST", "source": 2 }, + { "begin": 2504, "end": 2624, "name": "POP", "source": 2 }, { "begin": 2504, "end": 2624, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2630, "end": 2767, "name": "tag", - "source": 1, + "source": 2, "value": "88" }, - { "begin": 2630, "end": 2767, "name": "JUMPDEST", "source": 1 }, + { "begin": 2630, "end": 2767, "name": "JUMPDEST", "source": 2 }, { "begin": 2675, "end": 2680, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2713, "end": 2719, "name": "DUP2", "source": 1 }, + { "begin": 2713, "end": 2719, "name": "DUP2", "source": 2 }, { "begin": 2700, "end": 2720, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 2691, "end": 2720, "name": "SWAP1", "source": 1 }, - { "begin": 2691, "end": 2720, "name": "POP", "source": 1 }, + { "begin": 2691, "end": 2720, "name": "SWAP1", "source": 2 }, + { "begin": 2691, "end": 2720, "name": "POP", "source": 2 }, { "begin": 2729, "end": 2761, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "145" }, - { "begin": 2755, "end": 2760, "name": "DUP2", "source": 1 }, + { "begin": 2755, "end": 2760, "name": "DUP2", "source": 2 }, { "begin": 2729, "end": 2761, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "87" }, { "begin": 2729, "end": 2761, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2729, "end": 2761, "name": "tag", - "source": 1, + "source": 2, "value": "145" }, - { "begin": 2729, "end": 2761, "name": "JUMPDEST", "source": 1 }, - { "begin": 2630, "end": 2767, "name": "SWAP3", "source": 1 }, - { "begin": 2630, "end": 2767, "name": "SWAP2", "source": 1 }, - { "begin": 2630, "end": 2767, "name": "POP", "source": 1 }, - { "begin": 2630, "end": 2767, "name": "POP", "source": 1 }, + { "begin": 2729, "end": 2761, "name": "JUMPDEST", "source": 2 }, + { "begin": 2630, "end": 2767, "name": "SWAP3", "source": 2 }, + { "begin": 2630, "end": 2767, "name": "SWAP2", "source": 2 }, + { "begin": 2630, "end": 2767, "name": "POP", "source": 2 }, + { "begin": 2630, "end": 2767, "name": "POP", "source": 2 }, { "begin": 2630, "end": 2767, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2773, "end": 3100, "name": "tag", - "source": 1, + "source": 2, "value": "23" }, - { "begin": 2773, "end": 3100, "name": "JUMPDEST", "source": 1 }, + { "begin": 2773, "end": 3100, "name": "JUMPDEST", "source": 2 }, { "begin": 2831, "end": 2837, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 2880, "end": 2882, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 2868, "end": 2877, "name": "DUP3", "source": 1 }, - { "begin": 2859, "end": 2866, "name": "DUP5", "source": 1 }, - { "begin": 2855, "end": 2878, "name": "SUB", "source": 1 }, - { "begin": 2851, "end": 2883, "name": "SLT", "source": 1 }, - { "begin": 2848, "end": 2967, "name": "ISZERO", "source": 1 }, + { "begin": 2868, "end": 2877, "name": "DUP3", "source": 2 }, + { "begin": 2859, "end": 2866, "name": "DUP5", "source": 2 }, + { "begin": 2855, "end": 2878, "name": "SUB", "source": 2 }, + { "begin": 2851, "end": 2883, "name": "SLT", "source": 2 }, + { "begin": 2848, "end": 2967, "name": "ISZERO", "source": 2 }, { "begin": 2848, "end": 2967, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "147" }, - { "begin": 2848, "end": 2967, "name": "JUMPI", "source": 1 }, + { "begin": 2848, "end": 2967, "name": "JUMPI", "source": 2 }, { "begin": 2886, "end": 2965, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "148" }, { "begin": 2886, "end": 2965, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { "begin": 2886, "end": 2965, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2886, "end": 2965, "name": "tag", - "source": 1, + "source": 2, "value": "148" }, - { "begin": 2886, "end": 2965, "name": "JUMPDEST", "source": 1 }, + { "begin": 2886, "end": 2965, "name": "JUMPDEST", "source": 2 }, { "begin": 2848, "end": 2967, "name": "tag", - "source": 1, + "source": 2, "value": "147" }, - { "begin": 2848, "end": 2967, "name": "JUMPDEST", "source": 1 }, + { "begin": 2848, "end": 2967, "name": "JUMPDEST", "source": 2 }, { "begin": 3006, "end": 3007, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 3031, "end": 3083, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "149" }, - { "begin": 3075, "end": 3082, "name": "DUP5", "source": 1 }, - { "begin": 3066, "end": 3072, "name": "DUP3", "source": 1 }, - { "begin": 3055, "end": 3064, "name": "DUP6", "source": 1 }, - { "begin": 3051, "end": 3073, "name": "ADD", "source": 1 }, + { "begin": 3075, "end": 3082, "name": "DUP5", "source": 2 }, + { "begin": 3066, "end": 3072, "name": "DUP3", "source": 2 }, + { "begin": 3055, "end": 3064, "name": "DUP6", "source": 2 }, + { "begin": 3051, "end": 3073, "name": "ADD", "source": 2 }, { "begin": 3031, "end": 3083, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "88" }, { "begin": 3031, "end": 3083, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3031, "end": 3083, "name": "tag", - "source": 1, + "source": 2, "value": "149" }, - { "begin": 3031, "end": 3083, "name": "JUMPDEST", "source": 1 }, - { "begin": 3021, "end": 3083, "name": "SWAP2", "source": 1 }, - { "begin": 3021, "end": 3083, "name": "POP", "source": 1 }, - { "begin": 2977, "end": 3093, "name": "POP", "source": 1 }, - { "begin": 2773, "end": 3100, "name": "SWAP3", "source": 1 }, - { "begin": 2773, "end": 3100, "name": "SWAP2", "source": 1 }, - { "begin": 2773, "end": 3100, "name": "POP", "source": 1 }, - { "begin": 2773, "end": 3100, "name": "POP", "source": 1 }, + { "begin": 3031, "end": 3083, "name": "JUMPDEST", "source": 2 }, + { "begin": 3021, "end": 3083, "name": "SWAP2", "source": 2 }, + { "begin": 3021, "end": 3083, "name": "POP", "source": 2 }, + { "begin": 2977, "end": 3093, "name": "POP", "source": 2 }, + { "begin": 2773, "end": 3100, "name": "SWAP3", "source": 2 }, + { "begin": 2773, "end": 3100, "name": "SWAP2", "source": 2 }, + { "begin": 2773, "end": 3100, "name": "POP", "source": 2 }, + { "begin": 2773, "end": 3100, "name": "POP", "source": 2 }, { "begin": 2773, "end": 3100, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3106, "end": 3223, "name": "tag", - "source": 1, + "source": 2, "value": "89" }, - { "begin": 3106, "end": 3223, "name": "JUMPDEST", "source": 1 }, + { "begin": 3106, "end": 3223, "name": "JUMPDEST", "source": 2 }, { "begin": 3215, "end": 3216, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3212, "end": 3213, "name": "DUP1", "source": 1 }, - { "begin": 3205, "end": 3217, "name": "REVERT", "source": 1 }, + { "begin": 3212, "end": 3213, "name": "DUP1", "source": 2 }, + { "begin": 3205, "end": 3217, "name": "REVERT", "source": 2 }, { "begin": 3229, "end": 3346, "name": "tag", - "source": 1, + "source": 2, "value": "90" }, - { "begin": 3229, "end": 3346, "name": "JUMPDEST", "source": 1 }, + { "begin": 3229, "end": 3346, "name": "JUMPDEST", "source": 2 }, { "begin": 3338, "end": 3339, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3335, "end": 3336, "name": "DUP1", "source": 1 }, - { "begin": 3328, "end": 3340, "name": "REVERT", "source": 1 }, + { "begin": 3335, "end": 3336, "name": "DUP1", "source": 2 }, + { "begin": 3328, "end": 3340, "name": "REVERT", "source": 2 }, { "begin": 3352, "end": 3532, "name": "tag", - "source": 1, + "source": 2, "value": "91" }, - { "begin": 3352, "end": 3532, "name": "JUMPDEST", "source": 1 }, + { "begin": 3352, "end": 3532, "name": "JUMPDEST", "source": 2 }, { "begin": 3400, "end": 3477, "name": "PUSH", - "source": 1, + "source": 2, "value": "4E487B7100000000000000000000000000000000000000000000000000000000" }, { "begin": 3397, "end": 3398, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3390, "end": 3478, "name": "MSTORE", "source": 1 }, + { "begin": 3390, "end": 3478, "name": "MSTORE", "source": 2 }, { "begin": 3497, "end": 3501, "name": "PUSH", - "source": 1, + "source": 2, "value": "41" }, { "begin": 3494, "end": 3495, "name": "PUSH", - "source": 1, + "source": 2, "value": "4" }, - { "begin": 3487, "end": 3502, "name": "MSTORE", "source": 1 }, + { "begin": 3487, "end": 3502, "name": "MSTORE", "source": 2 }, { "begin": 3521, "end": 3525, "name": "PUSH", - "source": 1, + "source": 2, "value": "24" }, { "begin": 3518, "end": 3519, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3511, "end": 3526, "name": "REVERT", "source": 1 }, + { "begin": 3511, "end": 3526, "name": "REVERT", "source": 2 }, { "begin": 3538, "end": 3819, "name": "tag", - "source": 1, + "source": 2, "value": "92" }, - { "begin": 3538, "end": 3819, "name": "JUMPDEST", "source": 1 }, + { "begin": 3538, "end": 3819, "name": "JUMPDEST", "source": 2 }, { "begin": 3621, "end": 3648, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "154" }, - { "begin": 3643, "end": 3647, "name": "DUP3", "source": 1 }, + { "begin": 3643, "end": 3647, "name": "DUP3", "source": 2 }, { "begin": 3621, "end": 3648, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "84" }, { "begin": 3621, "end": 3648, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3621, "end": 3648, "name": "tag", - "source": 1, + "source": 2, "value": "154" }, - { "begin": 3621, "end": 3648, "name": "JUMPDEST", "source": 1 }, - { "begin": 3613, "end": 3619, "name": "DUP2", "source": 1 }, - { "begin": 3609, "end": 3649, "name": "ADD", "source": 1 }, - { "begin": 3751, "end": 3757, "name": "DUP2", "source": 1 }, - { "begin": 3739, "end": 3749, "name": "DUP2", "source": 1 }, - { "begin": 3736, "end": 3758, "name": "LT", "source": 1 }, + { "begin": 3621, "end": 3648, "name": "JUMPDEST", "source": 2 }, + { "begin": 3613, "end": 3619, "name": "DUP2", "source": 2 }, + { "begin": 3609, "end": 3649, "name": "ADD", "source": 2 }, + { "begin": 3751, "end": 3757, "name": "DUP2", "source": 2 }, + { "begin": 3739, "end": 3749, "name": "DUP2", "source": 2 }, + { "begin": 3736, "end": 3758, "name": "LT", "source": 2 }, { "begin": 3715, "end": 3733, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 3703, "end": 3713, "name": "DUP3", "source": 1 }, - { "begin": 3700, "end": 3734, "name": "GT", "source": 1 }, - { "begin": 3697, "end": 3759, "name": "OR", "source": 1 }, - { "begin": 3694, "end": 3782, "name": "ISZERO", "source": 1 }, + { "begin": 3703, "end": 3713, "name": "DUP3", "source": 2 }, + { "begin": 3700, "end": 3734, "name": "GT", "source": 2 }, + { "begin": 3697, "end": 3759, "name": "OR", "source": 2 }, + { "begin": 3694, "end": 3782, "name": "ISZERO", "source": 2 }, { "begin": 3694, "end": 3782, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "155" }, - { "begin": 3694, "end": 3782, "name": "JUMPI", "source": 1 }, + { "begin": 3694, "end": 3782, "name": "JUMPI", "source": 2 }, { "begin": 3762, "end": 3780, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "156" }, { "begin": 3762, "end": 3780, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "91" }, { "begin": 3762, "end": 3780, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3762, "end": 3780, "name": "tag", - "source": 1, + "source": 2, "value": "156" }, - { "begin": 3762, "end": 3780, "name": "JUMPDEST", "source": 1 }, + { "begin": 3762, "end": 3780, "name": "JUMPDEST", "source": 2 }, { "begin": 3694, "end": 3782, "name": "tag", - "source": 1, + "source": 2, "value": "155" }, - { "begin": 3694, "end": 3782, "name": "JUMPDEST", "source": 1 }, - { "begin": 3802, "end": 3812, "name": "DUP1", "source": 1 }, + { "begin": 3694, "end": 3782, "name": "JUMPDEST", "source": 2 }, + { "begin": 3802, "end": 3812, "name": "DUP1", "source": 2 }, { "begin": 3798, "end": 3800, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 3791, "end": 3813, "name": "MSTORE", "source": 1 }, - { "begin": 3581, "end": 3819, "name": "POP", "source": 1 }, - { "begin": 3538, "end": 3819, "name": "POP", "source": 1 }, - { "begin": 3538, "end": 3819, "name": "POP", "source": 1 }, + { "begin": 3791, "end": 3813, "name": "MSTORE", "source": 2 }, + { "begin": 3581, "end": 3819, "name": "POP", "source": 2 }, + { "begin": 3538, "end": 3819, "name": "POP", "source": 2 }, + { "begin": 3538, "end": 3819, "name": "POP", "source": 2 }, { "begin": 3538, "end": 3819, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3825, "end": 3954, "name": "tag", - "source": 1, + "source": 2, "value": "93" }, - { "begin": 3825, "end": 3954, "name": "JUMPDEST", "source": 1 }, + { "begin": 3825, "end": 3954, "name": "JUMPDEST", "source": 2 }, { "begin": 3859, "end": 3865, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 3886, "end": 3906, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "158" }, { "begin": 3886, "end": 3906, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "75" }, { "begin": 3886, "end": 3906, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3886, "end": 3906, "name": "tag", - "source": 1, + "source": 2, "value": "158" }, - { "begin": 3886, "end": 3906, "name": "JUMPDEST", "source": 1 }, - { "begin": 3876, "end": 3906, "name": "SWAP1", "source": 1 }, - { "begin": 3876, "end": 3906, "name": "POP", "source": 1 }, + { "begin": 3886, "end": 3906, "name": "JUMPDEST", "source": 2 }, + { "begin": 3876, "end": 3906, "name": "SWAP1", "source": 2 }, + { "begin": 3876, "end": 3906, "name": "POP", "source": 2 }, { "begin": 3915, "end": 3948, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "159" }, - { "begin": 3943, "end": 3947, "name": "DUP3", "source": 1 }, - { "begin": 3935, "end": 3941, "name": "DUP3", "source": 1 }, + { "begin": 3943, "end": 3947, "name": "DUP3", "source": 2 }, + { "begin": 3935, "end": 3941, "name": "DUP3", "source": 2 }, { "begin": 3915, "end": 3948, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "92" }, { "begin": 3915, "end": 3948, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3915, "end": 3948, "name": "tag", - "source": 1, + "source": 2, "value": "159" }, - { "begin": 3915, "end": 3948, "name": "JUMPDEST", "source": 1 }, - { "begin": 3825, "end": 3954, "name": "SWAP2", "source": 1 }, - { "begin": 3825, "end": 3954, "name": "SWAP1", "source": 1 }, - { "begin": 3825, "end": 3954, "name": "POP", "source": 1 }, + { "begin": 3915, "end": 3948, "name": "JUMPDEST", "source": 2 }, + { "begin": 3825, "end": 3954, "name": "SWAP2", "source": 2 }, + { "begin": 3825, "end": 3954, "name": "SWAP1", "source": 2 }, + { "begin": 3825, "end": 3954, "name": "POP", "source": 2 }, { "begin": 3825, "end": 3954, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3960, "end": 4267, "name": "tag", - "source": 1, + "source": 2, "value": "94" }, - { "begin": 3960, "end": 4267, "name": "JUMPDEST", "source": 1 }, + { "begin": 3960, "end": 4267, "name": "JUMPDEST", "source": 2 }, { "begin": 4021, "end": 4025, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 4111, "end": 4129, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 4103, "end": 4109, "name": "DUP3", "source": 1 }, - { "begin": 4100, "end": 4130, "name": "GT", "source": 1 }, - { "begin": 4097, "end": 4153, "name": "ISZERO", "source": 1 }, + { "begin": 4103, "end": 4109, "name": "DUP3", "source": 2 }, + { "begin": 4100, "end": 4130, "name": "GT", "source": 2 }, + { "begin": 4097, "end": 4153, "name": "ISZERO", "source": 2 }, { "begin": 4097, "end": 4153, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "161" }, - { "begin": 4097, "end": 4153, "name": "JUMPI", "source": 1 }, + { "begin": 4097, "end": 4153, "name": "JUMPI", "source": 2 }, { "begin": 4133, "end": 4151, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "162" }, { "begin": 4133, "end": 4151, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "91" }, { "begin": 4133, "end": 4151, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4133, "end": 4151, "name": "tag", - "source": 1, + "source": 2, "value": "162" }, - { "begin": 4133, "end": 4151, "name": "JUMPDEST", "source": 1 }, + { "begin": 4133, "end": 4151, "name": "JUMPDEST", "source": 2 }, { "begin": 4097, "end": 4153, "name": "tag", - "source": 1, + "source": 2, "value": "161" }, - { "begin": 4097, "end": 4153, "name": "JUMPDEST", "source": 1 }, + { "begin": 4097, "end": 4153, "name": "JUMPDEST", "source": 2 }, { "begin": 4171, "end": 4200, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "163" }, - { "begin": 4193, "end": 4199, "name": "DUP3", "source": 1 }, + { "begin": 4193, "end": 4199, "name": "DUP3", "source": 2 }, { "begin": 4171, "end": 4200, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "84" }, { "begin": 4171, "end": 4200, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4171, "end": 4200, "name": "tag", - "source": 1, + "source": 2, "value": "163" }, - { "begin": 4171, "end": 4200, "name": "JUMPDEST", "source": 1 }, - { "begin": 4163, "end": 4200, "name": "SWAP1", "source": 1 }, - { "begin": 4163, "end": 4200, "name": "POP", "source": 1 }, + { "begin": 4171, "end": 4200, "name": "JUMPDEST", "source": 2 }, + { "begin": 4163, "end": 4200, "name": "SWAP1", "source": 2 }, + { "begin": 4163, "end": 4200, "name": "POP", "source": 2 }, { "begin": 4255, "end": 4259, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 4249, "end": 4253, "name": "DUP2", "source": 1 }, - { "begin": 4245, "end": 4260, "name": "ADD", "source": 1 }, - { "begin": 4237, "end": 4260, "name": "SWAP1", "source": 1 }, - { "begin": 4237, "end": 4260, "name": "POP", "source": 1 }, - { "begin": 3960, "end": 4267, "name": "SWAP2", "source": 1 }, - { "begin": 3960, "end": 4267, "name": "SWAP1", "source": 1 }, - { "begin": 3960, "end": 4267, "name": "POP", "source": 1 }, + { "begin": 4249, "end": 4253, "name": "DUP2", "source": 2 }, + { "begin": 4245, "end": 4260, "name": "ADD", "source": 2 }, + { "begin": 4237, "end": 4260, "name": "SWAP1", "source": 2 }, + { "begin": 4237, "end": 4260, "name": "POP", "source": 2 }, + { "begin": 3960, "end": 4267, "name": "SWAP2", "source": 2 }, + { "begin": 3960, "end": 4267, "name": "SWAP1", "source": 2 }, + { "begin": 3960, "end": 4267, "name": "POP", "source": 2 }, { "begin": 3960, "end": 4267, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4273, "end": 4427, "name": "tag", - "source": 1, + "source": 2, "value": "95" }, - { "begin": 4273, "end": 4427, "name": "JUMPDEST", "source": 1 }, - { "begin": 4357, "end": 4363, "name": "DUP3", "source": 1 }, - { "begin": 4352, "end": 4355, "name": "DUP2", "source": 1 }, - { "begin": 4347, "end": 4350, "name": "DUP4", "source": 1 }, + { "begin": 4273, "end": 4427, "name": "JUMPDEST", "source": 2 }, + { "begin": 4357, "end": 4363, "name": "DUP3", "source": 2 }, + { "begin": 4352, "end": 4355, "name": "DUP2", "source": 2 }, + { "begin": 4347, "end": 4350, "name": "DUP4", "source": 2 }, { "begin": 4334, "end": 4364, "name": "CALLDATACOPY", - "source": 1 + "source": 2 }, { "begin": 4419, "end": 4420, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 4410, "end": 4416, "name": "DUP4", "source": 1 }, - { "begin": 4405, "end": 4408, "name": "DUP4", "source": 1 }, - { "begin": 4401, "end": 4417, "name": "ADD", "source": 1 }, - { "begin": 4394, "end": 4421, "name": "MSTORE", "source": 1 }, - { "begin": 4273, "end": 4427, "name": "POP", "source": 1 }, - { "begin": 4273, "end": 4427, "name": "POP", "source": 1 }, - { "begin": 4273, "end": 4427, "name": "POP", "source": 1 }, + { "begin": 4410, "end": 4416, "name": "DUP4", "source": 2 }, + { "begin": 4405, "end": 4408, "name": "DUP4", "source": 2 }, + { "begin": 4401, "end": 4417, "name": "ADD", "source": 2 }, + { "begin": 4394, "end": 4421, "name": "MSTORE", "source": 2 }, + { "begin": 4273, "end": 4427, "name": "POP", "source": 2 }, + { "begin": 4273, "end": 4427, "name": "POP", "source": 2 }, + { "begin": 4273, "end": 4427, "name": "POP", "source": 2 }, { "begin": 4273, "end": 4427, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4433, "end": 4843, "name": "tag", - "source": 1, + "source": 2, "value": "96" }, - { "begin": 4433, "end": 4843, "name": "JUMPDEST", "source": 1 }, + { "begin": 4433, "end": 4843, "name": "JUMPDEST", "source": 2 }, { "begin": 4510, "end": 4515, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 4535, "end": 4600, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "166" }, { "begin": 4551, "end": 4599, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "167" }, - { "begin": 4592, "end": 4598, "name": "DUP5", "source": 1 }, + { "begin": 4592, "end": 4598, "name": "DUP5", "source": 2 }, { "begin": 4551, "end": 4599, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "94" }, { "begin": 4551, "end": 4599, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4551, "end": 4599, "name": "tag", - "source": 1, + "source": 2, "value": "167" }, - { "begin": 4551, "end": 4599, "name": "JUMPDEST", "source": 1 }, + { "begin": 4551, "end": 4599, "name": "JUMPDEST", "source": 2 }, { "begin": 4535, "end": 4600, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "93" }, { "begin": 4535, "end": 4600, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4535, "end": 4600, "name": "tag", - "source": 1, + "source": 2, "value": "166" }, - { "begin": 4535, "end": 4600, "name": "JUMPDEST", "source": 1 }, - { "begin": 4526, "end": 4600, "name": "SWAP1", "source": 1 }, - { "begin": 4526, "end": 4600, "name": "POP", "source": 1 }, - { "begin": 4623, "end": 4629, "name": "DUP3", "source": 1 }, - { "begin": 4616, "end": 4621, "name": "DUP2", "source": 1 }, - { "begin": 4609, "end": 4630, "name": "MSTORE", "source": 1 }, + { "begin": 4535, "end": 4600, "name": "JUMPDEST", "source": 2 }, + { "begin": 4526, "end": 4600, "name": "SWAP1", "source": 2 }, + { "begin": 4526, "end": 4600, "name": "POP", "source": 2 }, + { "begin": 4623, "end": 4629, "name": "DUP3", "source": 2 }, + { "begin": 4616, "end": 4621, "name": "DUP2", "source": 2 }, + { "begin": 4609, "end": 4630, "name": "MSTORE", "source": 2 }, { "begin": 4661, "end": 4665, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 4654, "end": 4659, "name": "DUP2", "source": 1 }, - { "begin": 4650, "end": 4666, "name": "ADD", "source": 1 }, - { "begin": 4699, "end": 4702, "name": "DUP5", "source": 1 }, - { "begin": 4690, "end": 4696, "name": "DUP5", "source": 1 }, - { "begin": 4685, "end": 4688, "name": "DUP5", "source": 1 }, - { "begin": 4681, "end": 4697, "name": "ADD", "source": 1 }, - { "begin": 4678, "end": 4703, "name": "GT", "source": 1 }, - { "begin": 4675, "end": 4787, "name": "ISZERO", "source": 1 }, + { "begin": 4654, "end": 4659, "name": "DUP2", "source": 2 }, + { "begin": 4650, "end": 4666, "name": "ADD", "source": 2 }, + { "begin": 4699, "end": 4702, "name": "DUP5", "source": 2 }, + { "begin": 4690, "end": 4696, "name": "DUP5", "source": 2 }, + { "begin": 4685, "end": 4688, "name": "DUP5", "source": 2 }, + { "begin": 4681, "end": 4697, "name": "ADD", "source": 2 }, + { "begin": 4678, "end": 4703, "name": "GT", "source": 2 }, + { "begin": 4675, "end": 4787, "name": "ISZERO", "source": 2 }, { "begin": 4675, "end": 4787, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "168" }, - { "begin": 4675, "end": 4787, "name": "JUMPI", "source": 1 }, + { "begin": 4675, "end": 4787, "name": "JUMPI", "source": 2 }, { "begin": 4706, "end": 4785, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "169" }, { "begin": 4706, "end": 4785, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "90" }, { "begin": 4706, "end": 4785, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4706, "end": 4785, "name": "tag", - "source": 1, + "source": 2, "value": "169" }, - { "begin": 4706, "end": 4785, "name": "JUMPDEST", "source": 1 }, + { "begin": 4706, "end": 4785, "name": "JUMPDEST", "source": 2 }, { "begin": 4675, "end": 4787, "name": "tag", - "source": 1, + "source": 2, "value": "168" }, - { "begin": 4675, "end": 4787, "name": "JUMPDEST", "source": 1 }, + { "begin": 4675, "end": 4787, "name": "JUMPDEST", "source": 2 }, { "begin": 4796, "end": 4837, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "170" }, - { "begin": 4830, "end": 4836, "name": "DUP5", "source": 1 }, - { "begin": 4825, "end": 4828, "name": "DUP3", "source": 1 }, - { "begin": 4820, "end": 4823, "name": "DUP6", "source": 1 }, + { "begin": 4830, "end": 4836, "name": "DUP5", "source": 2 }, + { "begin": 4825, "end": 4828, "name": "DUP3", "source": 2 }, + { "begin": 4820, "end": 4823, "name": "DUP6", "source": 2 }, { "begin": 4796, "end": 4837, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "95" }, { "begin": 4796, "end": 4837, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4796, "end": 4837, "name": "tag", - "source": 1, + "source": 2, "value": "170" }, - { "begin": 4796, "end": 4837, "name": "JUMPDEST", "source": 1 }, - { "begin": 4516, "end": 4843, "name": "POP", "source": 1 }, - { "begin": 4433, "end": 4843, "name": "SWAP4", "source": 1 }, - { "begin": 4433, "end": 4843, "name": "SWAP3", "source": 1 }, - { "begin": 4433, "end": 4843, "name": "POP", "source": 1 }, - { "begin": 4433, "end": 4843, "name": "POP", "source": 1 }, - { "begin": 4433, "end": 4843, "name": "POP", "source": 1 }, + { "begin": 4796, "end": 4837, "name": "JUMPDEST", "source": 2 }, + { "begin": 4516, "end": 4843, "name": "POP", "source": 2 }, + { "begin": 4433, "end": 4843, "name": "SWAP4", "source": 2 }, + { "begin": 4433, "end": 4843, "name": "SWAP3", "source": 2 }, + { "begin": 4433, "end": 4843, "name": "POP", "source": 2 }, + { "begin": 4433, "end": 4843, "name": "POP", "source": 2 }, + { "begin": 4433, "end": 4843, "name": "POP", "source": 2 }, { "begin": 4433, "end": 4843, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4862, "end": 5200, "name": "tag", - "source": 1, + "source": 2, "value": "97" }, - { "begin": 4862, "end": 5200, "name": "JUMPDEST", "source": 1 }, + { "begin": 4862, "end": 5200, "name": "JUMPDEST", "source": 2 }, { "begin": 4917, "end": 4922, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 4966, "end": 4969, "name": "DUP3", "source": 1 }, + { "begin": 4966, "end": 4969, "name": "DUP3", "source": 2 }, { "begin": 4959, "end": 4963, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 4951, "end": 4957, "name": "DUP4", "source": 1 }, - { "begin": 4947, "end": 4964, "name": "ADD", "source": 1 }, - { "begin": 4943, "end": 4970, "name": "SLT", "source": 1 }, + { "begin": 4951, "end": 4957, "name": "DUP4", "source": 2 }, + { "begin": 4947, "end": 4964, "name": "ADD", "source": 2 }, + { "begin": 4943, "end": 4970, "name": "SLT", "source": 2 }, { "begin": 4933, "end": 5055, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "172" }, - { "begin": 4933, "end": 5055, "name": "JUMPI", "source": 1 }, + { "begin": 4933, "end": 5055, "name": "JUMPI", "source": 2 }, { "begin": 4974, "end": 5053, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "173" }, { "begin": 4974, "end": 5053, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "89" }, { "begin": 4974, "end": 5053, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4974, "end": 5053, "name": "tag", - "source": 1, + "source": 2, "value": "173" }, - { "begin": 4974, "end": 5053, "name": "JUMPDEST", "source": 1 }, + { "begin": 4974, "end": 5053, "name": "JUMPDEST", "source": 2 }, { "begin": 4933, "end": 5055, "name": "tag", - "source": 1, + "source": 2, "value": "172" }, - { "begin": 4933, "end": 5055, "name": "JUMPDEST", "source": 1 }, - { "begin": 5091, "end": 5097, "name": "DUP2", "source": 1 }, + { "begin": 4933, "end": 5055, "name": "JUMPDEST", "source": 2 }, + { "begin": 5091, "end": 5097, "name": "DUP2", "source": 2 }, { "begin": 5078, "end": 5098, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { "begin": 5116, "end": 5194, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "174" }, - { "begin": 5190, "end": 5193, "name": "DUP5", "source": 1 }, - { "begin": 5182, "end": 5188, "name": "DUP3", "source": 1 }, + { "begin": 5190, "end": 5193, "name": "DUP5", "source": 2 }, + { "begin": 5182, "end": 5188, "name": "DUP3", "source": 2 }, { "begin": 5175, "end": 5179, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 5167, "end": 5173, "name": "DUP7", "source": 1 }, - { "begin": 5163, "end": 5180, "name": "ADD", "source": 1 }, + { "begin": 5167, "end": 5173, "name": "DUP7", "source": 2 }, + { "begin": 5163, "end": 5180, "name": "ADD", "source": 2 }, { "begin": 5116, "end": 5194, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "96" }, { "begin": 5116, "end": 5194, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5116, "end": 5194, "name": "tag", - "source": 1, + "source": 2, "value": "174" }, - { "begin": 5116, "end": 5194, "name": "JUMPDEST", "source": 1 }, - { "begin": 5107, "end": 5194, "name": "SWAP2", "source": 1 }, - { "begin": 5107, "end": 5194, "name": "POP", "source": 1 }, - { "begin": 4923, "end": 5200, "name": "POP", "source": 1 }, - { "begin": 4862, "end": 5200, "name": "SWAP3", "source": 1 }, - { "begin": 4862, "end": 5200, "name": "SWAP2", "source": 1 }, - { "begin": 4862, "end": 5200, "name": "POP", "source": 1 }, - { "begin": 4862, "end": 5200, "name": "POP", "source": 1 }, + { "begin": 5116, "end": 5194, "name": "JUMPDEST", "source": 2 }, + { "begin": 5107, "end": 5194, "name": "SWAP2", "source": 2 }, + { "begin": 5107, "end": 5194, "name": "POP", "source": 2 }, + { "begin": 4923, "end": 5200, "name": "POP", "source": 2 }, + { "begin": 4862, "end": 5200, "name": "SWAP3", "source": 2 }, + { "begin": 4862, "end": 5200, "name": "SWAP2", "source": 2 }, + { "begin": 4862, "end": 5200, "name": "POP", "source": 2 }, + { "begin": 4862, "end": 5200, "name": "POP", "source": 2 }, { "begin": 4862, "end": 5200, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 5206, "end": 6003, "name": "tag", - "source": 1, + "source": 2, "value": "28" }, - { "begin": 5206, "end": 6003, "name": "JUMPDEST", "source": 1 }, + { "begin": 5206, "end": 6003, "name": "JUMPDEST", "source": 2 }, { "begin": 5292, "end": 5298, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 5300, "end": 5306, "name": "DUP1", "source": 1 }, + { "begin": 5300, "end": 5306, "name": "DUP1", "source": 2 }, { "begin": 5308, "end": 5314, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 5357, "end": 5359, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 5345, "end": 5354, "name": "DUP5", "source": 1 }, - { "begin": 5336, "end": 5343, "name": "DUP7", "source": 1 }, - { "begin": 5332, "end": 5355, "name": "SUB", "source": 1 }, - { "begin": 5328, "end": 5360, "name": "SLT", "source": 1 }, - { "begin": 5325, "end": 5444, "name": "ISZERO", "source": 1 }, + { "begin": 5345, "end": 5354, "name": "DUP5", "source": 2 }, + { "begin": 5336, "end": 5343, "name": "DUP7", "source": 2 }, + { "begin": 5332, "end": 5355, "name": "SUB", "source": 2 }, + { "begin": 5328, "end": 5360, "name": "SLT", "source": 2 }, + { "begin": 5325, "end": 5444, "name": "ISZERO", "source": 2 }, { "begin": 5325, "end": 5444, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "176" }, - { "begin": 5325, "end": 5444, "name": "JUMPI", "source": 1 }, + { "begin": 5325, "end": 5444, "name": "JUMPI", "source": 2 }, { "begin": 5363, "end": 5442, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "177" }, { "begin": 5363, "end": 5442, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { "begin": 5363, "end": 5442, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5363, "end": 5442, "name": "tag", - "source": 1, + "source": 2, "value": "177" }, - { "begin": 5363, "end": 5442, "name": "JUMPDEST", "source": 1 }, + { "begin": 5363, "end": 5442, "name": "JUMPDEST", "source": 2 }, { "begin": 5325, "end": 5444, "name": "tag", - "source": 1, + "source": 2, "value": "176" }, - { "begin": 5325, "end": 5444, "name": "JUMPDEST", "source": 1 }, + { "begin": 5325, "end": 5444, "name": "JUMPDEST", "source": 2 }, { "begin": 5483, "end": 5484, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 5508, "end": 5561, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "178" }, - { "begin": 5553, "end": 5560, "name": "DUP7", "source": 1 }, - { "begin": 5544, "end": 5550, "name": "DUP3", "source": 1 }, - { "begin": 5533, "end": 5542, "name": "DUP8", "source": 1 }, - { "begin": 5529, "end": 5551, "name": "ADD", "source": 1 }, + { "begin": 5553, "end": 5560, "name": "DUP7", "source": 2 }, + { "begin": 5544, "end": 5550, "name": "DUP3", "source": 2 }, + { "begin": 5533, "end": 5542, "name": "DUP8", "source": 2 }, + { "begin": 5529, "end": 5551, "name": "ADD", "source": 2 }, { "begin": 5508, "end": 5561, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { "begin": 5508, "end": 5561, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5508, "end": 5561, "name": "tag", - "source": 1, + "source": 2, "value": "178" }, - { "begin": 5508, "end": 5561, "name": "JUMPDEST", "source": 1 }, - { "begin": 5498, "end": 5561, "name": "SWAP4", "source": 1 }, - { "begin": 5498, "end": 5561, "name": "POP", "source": 1 }, - { "begin": 5454, "end": 5571, "name": "POP", "source": 1 }, + { "begin": 5508, "end": 5561, "name": "JUMPDEST", "source": 2 }, + { "begin": 5498, "end": 5561, "name": "SWAP4", "source": 2 }, + { "begin": 5498, "end": 5561, "name": "POP", "source": 2 }, + { "begin": 5454, "end": 5571, "name": "POP", "source": 2 }, { "begin": 5610, "end": 5612, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { "begin": 5636, "end": 5689, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "179" }, - { "begin": 5681, "end": 5688, "name": "DUP7", "source": 1 }, - { "begin": 5672, "end": 5678, "name": "DUP3", "source": 1 }, - { "begin": 5661, "end": 5670, "name": "DUP8", "source": 1 }, - { "begin": 5657, "end": 5679, "name": "ADD", "source": 1 }, + { "begin": 5681, "end": 5688, "name": "DUP7", "source": 2 }, + { "begin": 5672, "end": 5678, "name": "DUP3", "source": 2 }, + { "begin": 5661, "end": 5670, "name": "DUP8", "source": 2 }, + { "begin": 5657, "end": 5679, "name": "ADD", "source": 2 }, { "begin": 5636, "end": 5689, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { "begin": 5636, "end": 5689, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5636, "end": 5689, "name": "tag", - "source": 1, + "source": 2, "value": "179" }, - { "begin": 5636, "end": 5689, "name": "JUMPDEST", "source": 1 }, - { "begin": 5626, "end": 5689, "name": "SWAP3", "source": 1 }, - { "begin": 5626, "end": 5689, "name": "POP", "source": 1 }, - { "begin": 5581, "end": 5699, "name": "POP", "source": 1 }, + { "begin": 5636, "end": 5689, "name": "JUMPDEST", "source": 2 }, + { "begin": 5626, "end": 5689, "name": "SWAP3", "source": 2 }, + { "begin": 5626, "end": 5689, "name": "POP", "source": 2 }, + { "begin": 5581, "end": 5699, "name": "POP", "source": 2 }, { "begin": 5766, "end": 5768, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 5755, "end": 5764, "name": "DUP5", "source": 1 }, - { "begin": 5751, "end": 5769, "name": "ADD", "source": 1 }, + { "begin": 5755, "end": 5764, "name": "DUP5", "source": 2 }, + { "begin": 5751, "end": 5769, "name": "ADD", "source": 2 }, { "begin": 5738, "end": 5770, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { "begin": 5797, "end": 5815, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 5789, "end": 5795, "name": "DUP2", "source": 1 }, - { "begin": 5786, "end": 5816, "name": "GT", "source": 1 }, - { "begin": 5783, "end": 5900, "name": "ISZERO", "source": 1 }, + { "begin": 5789, "end": 5795, "name": "DUP2", "source": 2 }, + { "begin": 5786, "end": 5816, "name": "GT", "source": 2 }, + { "begin": 5783, "end": 5900, "name": "ISZERO", "source": 2 }, { "begin": 5783, "end": 5900, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "180" }, - { "begin": 5783, "end": 5900, "name": "JUMPI", "source": 1 }, + { "begin": 5783, "end": 5900, "name": "JUMPI", "source": 2 }, { "begin": 5819, "end": 5898, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "181" }, { "begin": 5819, "end": 5898, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { "begin": 5819, "end": 5898, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5819, "end": 5898, "name": "tag", - "source": 1, + "source": 2, "value": "181" }, - { "begin": 5819, "end": 5898, "name": "JUMPDEST", "source": 1 }, + { "begin": 5819, "end": 5898, "name": "JUMPDEST", "source": 2 }, { "begin": 5783, "end": 5900, "name": "tag", - "source": 1, + "source": 2, "value": "180" }, - { "begin": 5783, "end": 5900, "name": "JUMPDEST", "source": 1 }, + { "begin": 5783, "end": 5900, "name": "JUMPDEST", "source": 2 }, { "begin": 5924, "end": 5986, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "182" }, - { "begin": 5978, "end": 5985, "name": "DUP7", "source": 1 }, - { "begin": 5969, "end": 5975, "name": "DUP3", "source": 1 }, - { "begin": 5958, "end": 5967, "name": "DUP8", "source": 1 }, - { "begin": 5954, "end": 5976, "name": "ADD", "source": 1 }, + { "begin": 5978, "end": 5985, "name": "DUP7", "source": 2 }, + { "begin": 5969, "end": 5975, "name": "DUP3", "source": 2 }, + { "begin": 5958, "end": 5967, "name": "DUP8", "source": 2 }, + { "begin": 5954, "end": 5976, "name": "ADD", "source": 2 }, { "begin": 5924, "end": 5986, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { "begin": 5924, "end": 5986, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 5924, "end": 5986, "name": "tag", - "source": 1, + "source": 2, "value": "182" }, - { "begin": 5924, "end": 5986, "name": "JUMPDEST", "source": 1 }, - { "begin": 5914, "end": 5986, "name": "SWAP2", "source": 1 }, - { "begin": 5914, "end": 5986, "name": "POP", "source": 1 }, - { "begin": 5709, "end": 5996, "name": "POP", "source": 1 }, - { "begin": 5206, "end": 6003, "name": "SWAP3", "source": 1 }, - { "begin": 5206, "end": 6003, "name": "POP", "source": 1 }, - { "begin": 5206, "end": 6003, "name": "SWAP3", "source": 1 }, - { "begin": 5206, "end": 6003, "name": "POP", "source": 1 }, - { "begin": 5206, "end": 6003, "name": "SWAP3", "source": 1 }, + { "begin": 5924, "end": 5986, "name": "JUMPDEST", "source": 2 }, + { "begin": 5914, "end": 5986, "name": "SWAP2", "source": 2 }, + { "begin": 5914, "end": 5986, "name": "POP", "source": 2 }, + { "begin": 5709, "end": 5996, "name": "POP", "source": 2 }, + { "begin": 5206, "end": 6003, "name": "SWAP3", "source": 2 }, + { "begin": 5206, "end": 6003, "name": "POP", "source": 2 }, + { "begin": 5206, "end": 6003, "name": "SWAP3", "source": 2 }, + { "begin": 5206, "end": 6003, "name": "POP", "source": 2 }, + { "begin": 5206, "end": 6003, "name": "SWAP3", "source": 2 }, { "begin": 5206, "end": 6003, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 6009, "end": 6099, "name": "tag", - "source": 1, + "source": 2, "value": "98" }, - { "begin": 6009, "end": 6099, "name": "JUMPDEST", "source": 1 }, + { "begin": 6009, "end": 6099, "name": "JUMPDEST", "source": 2 }, { "begin": 6043, "end": 6050, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6086, "end": 6091, "name": "DUP2", "source": 1 }, - { "begin": 6079, "end": 6092, "name": "ISZERO", "source": 1 }, - { "begin": 6072, "end": 6093, "name": "ISZERO", "source": 1 }, - { "begin": 6061, "end": 6093, "name": "SWAP1", "source": 1 }, - { "begin": 6061, "end": 6093, "name": "POP", "source": 1 }, - { "begin": 6009, "end": 6099, "name": "SWAP2", "source": 1 }, - { "begin": 6009, "end": 6099, "name": "SWAP1", "source": 1 }, - { "begin": 6009, "end": 6099, "name": "POP", "source": 1 }, + { "begin": 6086, "end": 6091, "name": "DUP2", "source": 2 }, + { "begin": 6079, "end": 6092, "name": "ISZERO", "source": 2 }, + { "begin": 6072, "end": 6093, "name": "ISZERO", "source": 2 }, + { "begin": 6061, "end": 6093, "name": "SWAP1", "source": 2 }, + { "begin": 6061, "end": 6093, "name": "POP", "source": 2 }, + { "begin": 6009, "end": 6099, "name": "SWAP2", "source": 2 }, + { "begin": 6009, "end": 6099, "name": "SWAP1", "source": 2 }, + { "begin": 6009, "end": 6099, "name": "POP", "source": 2 }, { "begin": 6009, "end": 6099, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 6105, "end": 6221, "name": "tag", - "source": 1, + "source": 2, "value": "99" }, - { "begin": 6105, "end": 6221, "name": "JUMPDEST", "source": 1 }, + { "begin": 6105, "end": 6221, "name": "JUMPDEST", "source": 2 }, { "begin": 6175, "end": 6196, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "185" }, - { "begin": 6190, "end": 6195, "name": "DUP2", "source": 1 }, + { "begin": 6190, "end": 6195, "name": "DUP2", "source": 2 }, { "begin": 6175, "end": 6196, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "98" }, { "begin": 6175, "end": 6196, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 6175, "end": 6196, "name": "tag", - "source": 1, + "source": 2, "value": "185" }, - { "begin": 6175, "end": 6196, "name": "JUMPDEST", "source": 1 }, - { "begin": 6168, "end": 6173, "name": "DUP2", "source": 1 }, - { "begin": 6165, "end": 6197, "name": "EQ", "source": 1 }, + { "begin": 6175, "end": 6196, "name": "JUMPDEST", "source": 2 }, + { "begin": 6168, "end": 6173, "name": "DUP2", "source": 2 }, + { "begin": 6165, "end": 6197, "name": "EQ", "source": 2 }, { "begin": 6155, "end": 6215, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "186" }, - { "begin": 6155, "end": 6215, "name": "JUMPI", "source": 1 }, + { "begin": 6155, "end": 6215, "name": "JUMPI", "source": 2 }, { "begin": 6211, "end": 6212, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6208, "end": 6209, "name": "DUP1", "source": 1 }, - { "begin": 6201, "end": 6213, "name": "REVERT", "source": 1 }, + { "begin": 6208, "end": 6209, "name": "DUP1", "source": 2 }, + { "begin": 6201, "end": 6213, "name": "REVERT", "source": 2 }, { "begin": 6155, "end": 6215, "name": "tag", - "source": 1, + "source": 2, "value": "186" }, - { "begin": 6155, "end": 6215, "name": "JUMPDEST", "source": 1 }, - { "begin": 6105, "end": 6221, "name": "POP", "source": 1 }, + { "begin": 6155, "end": 6215, "name": "JUMPDEST", "source": 2 }, + { "begin": 6105, "end": 6221, "name": "POP", "source": 2 }, { "begin": 6105, "end": 6221, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 6227, "end": 6360, "name": "tag", - "source": 1, + "source": 2, "value": "100" }, - { "begin": 6227, "end": 6360, "name": "JUMPDEST", "source": 1 }, + { "begin": 6227, "end": 6360, "name": "JUMPDEST", "source": 2 }, { "begin": 6270, "end": 6275, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6308, "end": 6314, "name": "DUP2", "source": 1 }, + { "begin": 6308, "end": 6314, "name": "DUP2", "source": 2 }, { "begin": 6295, "end": 6315, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 6286, "end": 6315, "name": "SWAP1", "source": 1 }, - { "begin": 6286, "end": 6315, "name": "POP", "source": 1 }, + { "begin": 6286, "end": 6315, "name": "SWAP1", "source": 2 }, + { "begin": 6286, "end": 6315, "name": "POP", "source": 2 }, { "begin": 6324, "end": 6354, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "188" }, - { "begin": 6348, "end": 6353, "name": "DUP2", "source": 1 }, + { "begin": 6348, "end": 6353, "name": "DUP2", "source": 2 }, { "begin": 6324, "end": 6354, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "99" }, { "begin": 6324, "end": 6354, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 6324, "end": 6354, "name": "tag", - "source": 1, + "source": 2, "value": "188" }, - { "begin": 6324, "end": 6354, "name": "JUMPDEST", "source": 1 }, - { "begin": 6227, "end": 6360, "name": "SWAP3", "source": 1 }, - { "begin": 6227, "end": 6360, "name": "SWAP2", "source": 1 }, - { "begin": 6227, "end": 6360, "name": "POP", "source": 1 }, - { "begin": 6227, "end": 6360, "name": "POP", "source": 1 }, + { "begin": 6324, "end": 6354, "name": "JUMPDEST", "source": 2 }, + { "begin": 6227, "end": 6360, "name": "SWAP3", "source": 2 }, + { "begin": 6227, "end": 6360, "name": "SWAP2", "source": 2 }, + { "begin": 6227, "end": 6360, "name": "POP", "source": 2 }, + { "begin": 6227, "end": 6360, "name": "POP", "source": 2 }, { "begin": 6227, "end": 6360, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 6366, "end": 6834, "name": "tag", - "source": 1, + "source": 2, "value": "33" }, - { "begin": 6366, "end": 6834, "name": "JUMPDEST", "source": 1 }, + { "begin": 6366, "end": 6834, "name": "JUMPDEST", "source": 2 }, { "begin": 6431, "end": 6437, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6439, "end": 6445, "name": "DUP1", "source": 1 }, + { "begin": 6439, "end": 6445, "name": "DUP1", "source": 2 }, { "begin": 6488, "end": 6490, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 6476, "end": 6485, "name": "DUP4", "source": 1 }, - { "begin": 6467, "end": 6474, "name": "DUP6", "source": 1 }, - { "begin": 6463, "end": 6486, "name": "SUB", "source": 1 }, - { "begin": 6459, "end": 6491, "name": "SLT", "source": 1 }, - { "begin": 6456, "end": 6575, "name": "ISZERO", "source": 1 }, + { "begin": 6476, "end": 6485, "name": "DUP4", "source": 2 }, + { "begin": 6467, "end": 6474, "name": "DUP6", "source": 2 }, + { "begin": 6463, "end": 6486, "name": "SUB", "source": 2 }, + { "begin": 6459, "end": 6491, "name": "SLT", "source": 2 }, + { "begin": 6456, "end": 6575, "name": "ISZERO", "source": 2 }, { "begin": 6456, "end": 6575, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, - { "begin": 6456, "end": 6575, "name": "JUMPI", "source": 1 }, + { "begin": 6456, "end": 6575, "name": "JUMPI", "source": 2 }, { "begin": 6494, "end": 6573, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "191" }, { "begin": 6494, "end": 6573, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { "begin": 6494, "end": 6573, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 6494, "end": 6573, "name": "tag", - "source": 1, + "source": 2, "value": "191" }, - { "begin": 6494, "end": 6573, "name": "JUMPDEST", "source": 1 }, + { "begin": 6494, "end": 6573, "name": "JUMPDEST", "source": 2 }, { "begin": 6456, "end": 6575, "name": "tag", - "source": 1, + "source": 2, "value": "190" }, - { "begin": 6456, "end": 6575, "name": "JUMPDEST", "source": 1 }, + { "begin": 6456, "end": 6575, "name": "JUMPDEST", "source": 2 }, { "begin": 6614, "end": 6615, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 6639, "end": 6692, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "192" }, - { "begin": 6684, "end": 6691, "name": "DUP6", "source": 1 }, - { "begin": 6675, "end": 6681, "name": "DUP3", "source": 1 }, - { "begin": 6664, "end": 6673, "name": "DUP7", "source": 1 }, - { "begin": 6660, "end": 6682, "name": "ADD", "source": 1 }, + { "begin": 6684, "end": 6691, "name": "DUP6", "source": 2 }, + { "begin": 6675, "end": 6681, "name": "DUP3", "source": 2 }, + { "begin": 6664, "end": 6673, "name": "DUP7", "source": 2 }, + { "begin": 6660, "end": 6682, "name": "ADD", "source": 2 }, { "begin": 6639, "end": 6692, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { "begin": 6639, "end": 6692, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 6639, "end": 6692, "name": "tag", - "source": 1, + "source": 2, "value": "192" }, - { "begin": 6639, "end": 6692, "name": "JUMPDEST", "source": 1 }, - { "begin": 6629, "end": 6692, "name": "SWAP3", "source": 1 }, - { "begin": 6629, "end": 6692, "name": "POP", "source": 1 }, - { "begin": 6585, "end": 6702, "name": "POP", "source": 1 }, + { "begin": 6639, "end": 6692, "name": "JUMPDEST", "source": 2 }, + { "begin": 6629, "end": 6692, "name": "SWAP3", "source": 2 }, + { "begin": 6629, "end": 6692, "name": "POP", "source": 2 }, + { "begin": 6585, "end": 6702, "name": "POP", "source": 2 }, { "begin": 6741, "end": 6743, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { "begin": 6767, "end": 6817, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "193" }, - { "begin": 6809, "end": 6816, "name": "DUP6", "source": 1 }, - { "begin": 6800, "end": 6806, "name": "DUP3", "source": 1 }, - { "begin": 6789, "end": 6798, "name": "DUP7", "source": 1 }, - { "begin": 6785, "end": 6807, "name": "ADD", "source": 1 }, + { "begin": 6809, "end": 6816, "name": "DUP6", "source": 2 }, + { "begin": 6800, "end": 6806, "name": "DUP3", "source": 2 }, + { "begin": 6789, "end": 6798, "name": "DUP7", "source": 2 }, + { "begin": 6785, "end": 6807, "name": "ADD", "source": 2 }, { "begin": 6767, "end": 6817, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { "begin": 6767, "end": 6817, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 6767, "end": 6817, "name": "tag", - "source": 1, + "source": 2, "value": "193" }, - { "begin": 6767, "end": 6817, "name": "JUMPDEST", "source": 1 }, - { "begin": 6757, "end": 6817, "name": "SWAP2", "source": 1 }, - { "begin": 6757, "end": 6817, "name": "POP", "source": 1 }, - { "begin": 6712, "end": 6827, "name": "POP", "source": 1 }, - { "begin": 6366, "end": 6834, "name": "SWAP3", "source": 1 }, - { "begin": 6366, "end": 6834, "name": "POP", "source": 1 }, - { "begin": 6366, "end": 6834, "name": "SWAP3", "source": 1 }, - { "begin": 6366, "end": 6834, "name": "SWAP1", "source": 1 }, - { "begin": 6366, "end": 6834, "name": "POP", "source": 1 }, + { "begin": 6767, "end": 6817, "name": "JUMPDEST", "source": 2 }, + { "begin": 6757, "end": 6817, "name": "SWAP2", "source": 2 }, + { "begin": 6757, "end": 6817, "name": "POP", "source": 2 }, + { "begin": 6712, "end": 6827, "name": "POP", "source": 2 }, + { "begin": 6366, "end": 6834, "name": "SWAP3", "source": 2 }, + { "begin": 6366, "end": 6834, "name": "POP", "source": 2 }, + { "begin": 6366, "end": 6834, "name": "SWAP3", "source": 2 }, + { "begin": 6366, "end": 6834, "name": "SWAP1", "source": 2 }, + { "begin": 6366, "end": 6834, "name": "POP", "source": 2 }, { "begin": 6366, "end": 6834, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 6840, "end": 6966, "name": "tag", - "source": 1, + "source": 2, "value": "101" }, - { "begin": 6840, "end": 6966, "name": "JUMPDEST", "source": 1 }, + { "begin": 6840, "end": 6966, "name": "JUMPDEST", "source": 2 }, { "begin": 6877, "end": 6884, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 6917, "end": 6959, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6910, "end": 6915, "name": "DUP3", "source": 1 }, - { "begin": 6906, "end": 6960, "name": "AND", "source": 1 }, - { "begin": 6895, "end": 6960, "name": "SWAP1", "source": 1 }, - { "begin": 6895, "end": 6960, "name": "POP", "source": 1 }, - { "begin": 6840, "end": 6966, "name": "SWAP2", "source": 1 }, - { "begin": 6840, "end": 6966, "name": "SWAP1", "source": 1 }, - { "begin": 6840, "end": 6966, "name": "POP", "source": 1 }, + { "begin": 6910, "end": 6915, "name": "DUP3", "source": 2 }, + { "begin": 6906, "end": 6960, "name": "AND", "source": 2 }, + { "begin": 6895, "end": 6960, "name": "SWAP1", "source": 2 }, + { "begin": 6895, "end": 6960, "name": "POP", "source": 2 }, + { "begin": 6840, "end": 6966, "name": "SWAP2", "source": 2 }, + { "begin": 6840, "end": 6966, "name": "SWAP1", "source": 2 }, + { "begin": 6840, "end": 6966, "name": "POP", "source": 2 }, { "begin": 6840, "end": 6966, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 6972, "end": 7032, "name": "tag", - "source": 1, + "source": 2, "value": "102" }, - { "begin": 6972, "end": 7032, "name": "JUMPDEST", "source": 1 }, + { "begin": 6972, "end": 7032, "name": "JUMPDEST", "source": 2 }, { "begin": 7000, "end": 7003, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 7021, "end": 7026, "name": "DUP2", "source": 1 }, - { "begin": 7014, "end": 7026, "name": "SWAP1", "source": 1 }, - { "begin": 7014, "end": 7026, "name": "POP", "source": 1 }, - { "begin": 6972, "end": 7032, "name": "SWAP2", "source": 1 }, - { "begin": 6972, "end": 7032, "name": "SWAP1", "source": 1 }, - { "begin": 6972, "end": 7032, "name": "POP", "source": 1 }, + { "begin": 7021, "end": 7026, "name": "DUP2", "source": 2 }, + { "begin": 7014, "end": 7026, "name": "SWAP1", "source": 2 }, + { "begin": 7014, "end": 7026, "name": "POP", "source": 2 }, + { "begin": 6972, "end": 7032, "name": "SWAP2", "source": 2 }, + { "begin": 6972, "end": 7032, "name": "SWAP1", "source": 2 }, + { "begin": 6972, "end": 7032, "name": "POP", "source": 2 }, { "begin": 6972, "end": 7032, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 7038, "end": 7180, "name": "tag", - "source": 1, + "source": 2, "value": "103" }, - { "begin": 7038, "end": 7180, "name": "JUMPDEST", "source": 1 }, + { "begin": 7038, "end": 7180, "name": "JUMPDEST", "source": 2 }, { "begin": 7088, "end": 7097, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 7121, "end": 7174, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "197" }, { "begin": 7139, "end": 7173, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "198" }, { "begin": 7148, "end": 7172, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "199" }, - { "begin": 7166, "end": 7171, "name": "DUP5", "source": 1 }, + { "begin": 7166, "end": 7171, "name": "DUP5", "source": 2 }, { "begin": 7148, "end": 7172, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "101" }, { "begin": 7148, "end": 7172, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 7148, "end": 7172, "name": "tag", - "source": 1, + "source": 2, "value": "199" }, - { "begin": 7148, "end": 7172, "name": "JUMPDEST", "source": 1 }, + { "begin": 7148, "end": 7172, "name": "JUMPDEST", "source": 2 }, { "begin": 7139, "end": 7173, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "102" }, { "begin": 7139, "end": 7173, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 7139, "end": 7173, "name": "tag", - "source": 1, + "source": 2, "value": "198" }, - { "begin": 7139, "end": 7173, "name": "JUMPDEST", "source": 1 }, + { "begin": 7139, "end": 7173, "name": "JUMPDEST", "source": 2 }, { "begin": 7121, "end": 7174, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "101" }, { "begin": 7121, "end": 7174, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 7121, "end": 7174, "name": "tag", - "source": 1, + "source": 2, "value": "197" }, - { "begin": 7121, "end": 7174, "name": "JUMPDEST", "source": 1 }, - { "begin": 7108, "end": 7174, "name": "SWAP1", "source": 1 }, - { "begin": 7108, "end": 7174, "name": "POP", "source": 1 }, - { "begin": 7038, "end": 7180, "name": "SWAP2", "source": 1 }, - { "begin": 7038, "end": 7180, "name": "SWAP1", "source": 1 }, - { "begin": 7038, "end": 7180, "name": "POP", "source": 1 }, + { "begin": 7121, "end": 7174, "name": "JUMPDEST", "source": 2 }, + { "begin": 7108, "end": 7174, "name": "SWAP1", "source": 2 }, + { "begin": 7108, "end": 7174, "name": "POP", "source": 2 }, + { "begin": 7038, "end": 7180, "name": "SWAP2", "source": 2 }, + { "begin": 7038, "end": 7180, "name": "SWAP1", "source": 2 }, + { "begin": 7038, "end": 7180, "name": "POP", "source": 2 }, { "begin": 7038, "end": 7180, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 7186, "end": 7312, "name": "tag", - "source": 1, + "source": 2, "value": "104" }, - { "begin": 7186, "end": 7312, "name": "JUMPDEST", "source": 1 }, + { "begin": 7186, "end": 7312, "name": "JUMPDEST", "source": 2 }, { "begin": 7236, "end": 7245, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 7269, "end": 7306, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "201" }, - { "begin": 7300, "end": 7305, "name": "DUP3", "source": 1 }, + { "begin": 7300, "end": 7305, "name": "DUP3", "source": 2 }, { "begin": 7269, "end": 7306, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "103" }, { "begin": 7269, "end": 7306, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 7269, "end": 7306, "name": "tag", - "source": 1, + "source": 2, "value": "201" }, - { "begin": 7269, "end": 7306, "name": "JUMPDEST", "source": 1 }, - { "begin": 7256, "end": 7306, "name": "SWAP1", "source": 1 }, - { "begin": 7256, "end": 7306, "name": "POP", "source": 1 }, - { "begin": 7186, "end": 7312, "name": "SWAP2", "source": 1 }, - { "begin": 7186, "end": 7312, "name": "SWAP1", "source": 1 }, - { "begin": 7186, "end": 7312, "name": "POP", "source": 1 }, + { "begin": 7269, "end": 7306, "name": "JUMPDEST", "source": 2 }, + { "begin": 7256, "end": 7306, "name": "SWAP1", "source": 2 }, + { "begin": 7256, "end": 7306, "name": "POP", "source": 2 }, + { "begin": 7186, "end": 7312, "name": "SWAP2", "source": 2 }, + { "begin": 7186, "end": 7312, "name": "SWAP1", "source": 2 }, + { "begin": 7186, "end": 7312, "name": "POP", "source": 2 }, { "begin": 7186, "end": 7312, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 7318, - "end": 7463, + "end": 7464, "name": "tag", - "source": 1, + "source": 2, "value": "105" }, - { "begin": 7318, "end": 7463, "name": "JUMPDEST", "source": 1 }, + { "begin": 7318, "end": 7464, "name": "JUMPDEST", "source": 2 }, { - "begin": 7387, - "end": 7396, + "begin": 7388, + "end": 7397, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 7420, - "end": 7457, + "begin": 7421, + "end": 7458, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "203" }, - { "begin": 7451, "end": 7456, "name": "DUP3", "source": 1 }, + { "begin": 7452, "end": 7457, "name": "DUP3", "source": 2 }, { - "begin": 7420, - "end": 7457, + "begin": 7421, + "end": 7458, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "104" }, { - "begin": 7420, - "end": 7457, + "begin": 7421, + "end": 7458, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7420, - "end": 7457, + "begin": 7421, + "end": 7458, "name": "tag", - "source": 1, + "source": 2, "value": "203" }, - { "begin": 7420, "end": 7457, "name": "JUMPDEST", "source": 1 }, - { "begin": 7407, "end": 7457, "name": "SWAP1", "source": 1 }, - { "begin": 7407, "end": 7457, "name": "POP", "source": 1 }, - { "begin": 7318, "end": 7463, "name": "SWAP2", "source": 1 }, - { "begin": 7318, "end": 7463, "name": "SWAP1", "source": 1 }, - { "begin": 7318, "end": 7463, "name": "POP", "source": 1 }, + { "begin": 7421, "end": 7458, "name": "JUMPDEST", "source": 2 }, + { "begin": 7408, "end": 7458, "name": "SWAP1", "source": 2 }, + { "begin": 7408, "end": 7458, "name": "POP", "source": 2 }, + { "begin": 7318, "end": 7464, "name": "SWAP2", "source": 2 }, + { "begin": 7318, "end": 7464, "name": "SWAP1", "source": 2 }, + { "begin": 7318, "end": 7464, "name": "POP", "source": 2 }, { "begin": 7318, - "end": 7463, + "end": 7464, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 7469, - "end": 7638, + "begin": 7470, + "end": 7641, "name": "tag", - "source": 1, + "source": 2, "value": "106" }, - { "begin": 7469, "end": 7638, "name": "JUMPDEST", "source": 1 }, + { "begin": 7470, "end": 7641, "name": "JUMPDEST", "source": 2 }, { - "begin": 7575, - "end": 7631, + "begin": 7577, + "end": 7634, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "205" }, - { "begin": 7625, "end": 7630, "name": "DUP2", "source": 1 }, + { "begin": 7628, "end": 7633, "name": "DUP2", "source": 2 }, { - "begin": 7575, - "end": 7631, + "begin": 7577, + "end": 7634, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "105" }, { - "begin": 7575, - "end": 7631, + "begin": 7577, + "end": 7634, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7575, - "end": 7631, + "begin": 7577, + "end": 7634, "name": "tag", - "source": 1, + "source": 2, "value": "205" }, - { "begin": 7575, "end": 7631, "name": "JUMPDEST", "source": 1 }, - { "begin": 7570, "end": 7573, "name": "DUP3", "source": 1 }, - { "begin": 7563, "end": 7632, "name": "MSTORE", "source": 1 }, - { "begin": 7469, "end": 7638, "name": "POP", "source": 1 }, - { "begin": 7469, "end": 7638, "name": "POP", "source": 1 }, + { "begin": 7577, "end": 7634, "name": "JUMPDEST", "source": 2 }, + { "begin": 7572, "end": 7575, "name": "DUP3", "source": 2 }, + { "begin": 7565, "end": 7635, "name": "MSTORE", "source": 2 }, + { "begin": 7470, "end": 7641, "name": "POP", "source": 2 }, + { "begin": 7470, "end": 7641, "name": "POP", "source": 2 }, { - "begin": 7469, - "end": 7638, + "begin": 7470, + "end": 7641, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 7644, - "end": 7904, + "begin": 7647, + "end": 7909, "name": "tag", - "source": 1, + "source": 2, "value": "43" }, - { "begin": 7644, "end": 7904, "name": "JUMPDEST", "source": 1 }, + { "begin": 7647, "end": 7909, "name": "JUMPDEST", "source": 2 }, { - "begin": 7756, - "end": 7760, + "begin": 7760, + "end": 7764, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 7794, - "end": 7796, + "begin": 7798, + "end": 7800, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 7783, "end": 7792, "name": "DUP3", "source": 1 }, - { "begin": 7779, "end": 7797, "name": "ADD", "source": 1 }, - { "begin": 7771, "end": 7797, "name": "SWAP1", "source": 1 }, - { "begin": 7771, "end": 7797, "name": "POP", "source": 1 }, + { "begin": 7787, "end": 7796, "name": "DUP3", "source": 2 }, + { "begin": 7783, "end": 7801, "name": "ADD", "source": 2 }, + { "begin": 7775, "end": 7801, "name": "SWAP1", "source": 2 }, + { "begin": 7775, "end": 7801, "name": "POP", "source": 2 }, { - "begin": 7807, - "end": 7897, + "begin": 7811, + "end": 7902, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "207" }, { - "begin": 7894, - "end": 7895, + "begin": 7899, + "end": 7900, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 7883, "end": 7892, "name": "DUP4", "source": 1 }, - { "begin": 7879, "end": 7896, "name": "ADD", "source": 1 }, - { "begin": 7870, "end": 7876, "name": "DUP5", "source": 1 }, + { "begin": 7888, "end": 7897, "name": "DUP4", "source": 2 }, + { "begin": 7884, "end": 7901, "name": "ADD", "source": 2 }, + { "begin": 7875, "end": 7881, "name": "DUP5", "source": 2 }, { - "begin": 7807, - "end": 7897, + "begin": 7811, + "end": 7902, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "106" }, { - "begin": 7807, - "end": 7897, + "begin": 7811, + "end": 7902, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7807, - "end": 7897, + "begin": 7811, + "end": 7902, "name": "tag", - "source": 1, + "source": 2, "value": "207" }, - { "begin": 7807, "end": 7897, "name": "JUMPDEST", "source": 1 }, - { "begin": 7644, "end": 7904, "name": "SWAP3", "source": 1 }, - { "begin": 7644, "end": 7904, "name": "SWAP2", "source": 1 }, - { "begin": 7644, "end": 7904, "name": "POP", "source": 1 }, - { "begin": 7644, "end": 7904, "name": "POP", "source": 1 }, + { "begin": 7811, "end": 7902, "name": "JUMPDEST", "source": 2 }, + { "begin": 7647, "end": 7909, "name": "SWAP3", "source": 2 }, + { "begin": 7647, "end": 7909, "name": "SWAP2", "source": 2 }, + { "begin": 7647, "end": 7909, "name": "POP", "source": 2 }, + { "begin": 7647, "end": 7909, "name": "POP", "source": 2 }, { - "begin": 7644, - "end": 7904, + "begin": 7647, + "end": 7909, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 7910, - "end": 8417, + "begin": 7915, + "end": 8422, "name": "tag", - "source": 1, + "source": 2, "value": "50" }, - { "begin": 7910, "end": 8417, "name": "JUMPDEST", "source": 1 }, + { "begin": 7915, "end": 8422, "name": "JUMPDEST", "source": 2 }, { - "begin": 7978, - "end": 7984, + "begin": 7983, + "end": 7989, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 8027, - "end": 8029, + "begin": 8032, + "end": 8034, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8015, "end": 8024, "name": "DUP3", "source": 1 }, - { "begin": 8006, "end": 8013, "name": "DUP5", "source": 1 }, - { "begin": 8002, "end": 8025, "name": "SUB", "source": 1 }, - { "begin": 7998, "end": 8030, "name": "SLT", "source": 1 }, - { "begin": 7995, "end": 8114, "name": "ISZERO", "source": 1 }, + { "begin": 8020, "end": 8029, "name": "DUP3", "source": 2 }, + { "begin": 8011, "end": 8018, "name": "DUP5", "source": 2 }, + { "begin": 8007, "end": 8030, "name": "SUB", "source": 2 }, + { "begin": 8003, "end": 8035, "name": "SLT", "source": 2 }, + { "begin": 8000, "end": 8119, "name": "ISZERO", "source": 2 }, { - "begin": 7995, - "end": 8114, + "begin": 8000, + "end": 8119, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "209" }, - { "begin": 7995, "end": 8114, "name": "JUMPI", "source": 1 }, + { "begin": 8000, "end": 8119, "name": "JUMPI", "source": 2 }, { - "begin": 8033, - "end": 8112, + "begin": 8038, + "end": 8117, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "210" }, { - "begin": 8033, - "end": 8112, + "begin": 8038, + "end": 8117, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 8033, - "end": 8112, + "begin": 8038, + "end": 8117, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8033, - "end": 8112, + "begin": 8038, + "end": 8117, "name": "tag", - "source": 1, + "source": 2, "value": "210" }, - { "begin": 8033, "end": 8112, "name": "JUMPDEST", "source": 1 }, + { "begin": 8038, "end": 8117, "name": "JUMPDEST", "source": 2 }, { - "begin": 7995, - "end": 8114, + "begin": 8000, + "end": 8119, "name": "tag", - "source": 1, + "source": 2, "value": "209" }, - { "begin": 7995, "end": 8114, "name": "JUMPDEST", "source": 1 }, + { "begin": 8000, "end": 8119, "name": "JUMPDEST", "source": 2 }, { - "begin": 8181, - "end": 8182, + "begin": 8186, + "end": 8187, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 8170, "end": 8179, "name": "DUP3", "source": 1 }, - { "begin": 8166, "end": 8183, "name": "ADD", "source": 1 }, + { "begin": 8175, "end": 8184, "name": "DUP3", "source": 2 }, + { "begin": 8171, "end": 8188, "name": "ADD", "source": 2 }, { - "begin": 8153, - "end": 8184, + "begin": 8158, + "end": 8189, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 8211, - "end": 8229, + "begin": 8216, + "end": 8234, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 8203, "end": 8209, "name": "DUP2", "source": 1 }, - { "begin": 8200, "end": 8230, "name": "GT", "source": 1 }, - { "begin": 8197, "end": 8314, "name": "ISZERO", "source": 1 }, + { "begin": 8208, "end": 8214, "name": "DUP2", "source": 2 }, + { "begin": 8205, "end": 8235, "name": "GT", "source": 2 }, + { "begin": 8202, "end": 8319, "name": "ISZERO", "source": 2 }, { - "begin": 8197, - "end": 8314, + "begin": 8202, + "end": 8319, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "211" }, - { "begin": 8197, "end": 8314, "name": "JUMPI", "source": 1 }, + { "begin": 8202, "end": 8319, "name": "JUMPI", "source": 2 }, { - "begin": 8233, - "end": 8312, + "begin": 8238, + "end": 8317, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "212" }, { - "begin": 8233, - "end": 8312, + "begin": 8238, + "end": 8317, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 8233, - "end": 8312, + "begin": 8238, + "end": 8317, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8233, - "end": 8312, + "begin": 8238, + "end": 8317, "name": "tag", - "source": 1, + "source": 2, "value": "212" }, - { "begin": 8233, "end": 8312, "name": "JUMPDEST", "source": 1 }, + { "begin": 8238, "end": 8317, "name": "JUMPDEST", "source": 2 }, { - "begin": 8197, - "end": 8314, + "begin": 8202, + "end": 8319, "name": "tag", - "source": 1, + "source": 2, "value": "211" }, - { "begin": 8197, "end": 8314, "name": "JUMPDEST", "source": 1 }, + { "begin": 8202, "end": 8319, "name": "JUMPDEST", "source": 2 }, { - "begin": 8338, - "end": 8400, + "begin": 8343, + "end": 8405, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "213" }, - { "begin": 8392, "end": 8399, "name": "DUP5", "source": 1 }, - { "begin": 8383, "end": 8389, "name": "DUP3", "source": 1 }, - { "begin": 8372, "end": 8381, "name": "DUP6", "source": 1 }, - { "begin": 8368, "end": 8390, "name": "ADD", "source": 1 }, + { "begin": 8397, "end": 8404, "name": "DUP5", "source": 2 }, + { "begin": 8388, "end": 8394, "name": "DUP3", "source": 2 }, + { "begin": 8377, "end": 8386, "name": "DUP6", "source": 2 }, + { "begin": 8373, "end": 8395, "name": "ADD", "source": 2 }, { - "begin": 8338, - "end": 8400, + "begin": 8343, + "end": 8405, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 8338, - "end": 8400, + "begin": 8343, + "end": 8405, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8338, - "end": 8400, + "begin": 8343, + "end": 8405, "name": "tag", - "source": 1, + "source": 2, "value": "213" }, - { "begin": 8338, "end": 8400, "name": "JUMPDEST", "source": 1 }, - { "begin": 8328, "end": 8400, "name": "SWAP2", "source": 1 }, - { "begin": 8328, "end": 8400, "name": "POP", "source": 1 }, - { "begin": 8124, "end": 8410, "name": "POP", "source": 1 }, - { "begin": 7910, "end": 8417, "name": "SWAP3", "source": 1 }, - { "begin": 7910, "end": 8417, "name": "SWAP2", "source": 1 }, - { "begin": 7910, "end": 8417, "name": "POP", "source": 1 }, - { "begin": 7910, "end": 8417, "name": "POP", "source": 1 }, + { "begin": 8343, "end": 8405, "name": "JUMPDEST", "source": 2 }, + { "begin": 8333, "end": 8405, "name": "SWAP2", "source": 2 }, + { "begin": 8333, "end": 8405, "name": "POP", "source": 2 }, + { "begin": 8129, "end": 8415, "name": "POP", "source": 2 }, + { "begin": 7915, "end": 8422, "name": "SWAP3", "source": 2 }, + { "begin": 7915, "end": 8422, "name": "SWAP2", "source": 2 }, + { "begin": 7915, "end": 8422, "name": "POP", "source": 2 }, + { "begin": 7915, "end": 8422, "name": "POP", "source": 2 }, { - "begin": 7910, - "end": 8417, + "begin": 7915, + "end": 8422, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8423, - "end": 8734, + "begin": 8428, + "end": 8739, "name": "tag", - "source": 1, + "source": 2, "value": "107" }, - { "begin": 8423, "end": 8734, "name": "JUMPDEST", "source": 1 }, + { "begin": 8428, "end": 8739, "name": "JUMPDEST", "source": 2 }, { - "begin": 8500, - "end": 8504, + "begin": 8505, + "end": 8509, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 8590, - "end": 8608, + "begin": 8595, + "end": 8613, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 8582, "end": 8588, "name": "DUP3", "source": 1 }, - { "begin": 8579, "end": 8609, "name": "GT", "source": 1 }, - { "begin": 8576, "end": 8632, "name": "ISZERO", "source": 1 }, + { "begin": 8587, "end": 8593, "name": "DUP3", "source": 2 }, + { "begin": 8584, "end": 8614, "name": "GT", "source": 2 }, + { "begin": 8581, "end": 8637, "name": "ISZERO", "source": 2 }, { - "begin": 8576, - "end": 8632, + "begin": 8581, + "end": 8637, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "215" }, - { "begin": 8576, "end": 8632, "name": "JUMPI", "source": 1 }, + { "begin": 8581, "end": 8637, "name": "JUMPI", "source": 2 }, { - "begin": 8612, - "end": 8630, + "begin": 8617, + "end": 8635, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "216" }, { - "begin": 8612, - "end": 8630, + "begin": 8617, + "end": 8635, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "91" }, { - "begin": 8612, - "end": 8630, + "begin": 8617, + "end": 8635, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8612, - "end": 8630, + "begin": 8617, + "end": 8635, "name": "tag", - "source": 1, + "source": 2, "value": "216" }, - { "begin": 8612, "end": 8630, "name": "JUMPDEST", "source": 1 }, + { "begin": 8617, "end": 8635, "name": "JUMPDEST", "source": 2 }, { - "begin": 8576, - "end": 8632, + "begin": 8581, + "end": 8637, "name": "tag", - "source": 1, + "source": 2, "value": "215" }, - { "begin": 8576, "end": 8632, "name": "JUMPDEST", "source": 1 }, + { "begin": 8581, "end": 8637, "name": "JUMPDEST", "source": 2 }, { - "begin": 8662, - "end": 8666, + "begin": 8667, + "end": 8671, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8654, "end": 8660, "name": "DUP3", "source": 1 }, - { "begin": 8650, "end": 8667, "name": "MUL", "source": 1 }, - { "begin": 8642, "end": 8667, "name": "SWAP1", "source": 1 }, - { "begin": 8642, "end": 8667, "name": "POP", "source": 1 }, + { "begin": 8659, "end": 8665, "name": "DUP3", "source": 2 }, + { "begin": 8655, "end": 8672, "name": "MUL", "source": 2 }, + { "begin": 8647, "end": 8672, "name": "SWAP1", "source": 2 }, + { "begin": 8647, "end": 8672, "name": "POP", "source": 2 }, { - "begin": 8722, - "end": 8726, + "begin": 8727, + "end": 8731, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8716, "end": 8720, "name": "DUP2", "source": 1 }, - { "begin": 8712, "end": 8727, "name": "ADD", "source": 1 }, - { "begin": 8704, "end": 8727, "name": "SWAP1", "source": 1 }, - { "begin": 8704, "end": 8727, "name": "POP", "source": 1 }, - { "begin": 8423, "end": 8734, "name": "SWAP2", "source": 1 }, - { "begin": 8423, "end": 8734, "name": "SWAP1", "source": 1 }, - { "begin": 8423, "end": 8734, "name": "POP", "source": 1 }, + { "begin": 8721, "end": 8725, "name": "DUP2", "source": 2 }, + { "begin": 8717, "end": 8732, "name": "ADD", "source": 2 }, + { "begin": 8709, "end": 8732, "name": "SWAP1", "source": 2 }, + { "begin": 8709, "end": 8732, "name": "POP", "source": 2 }, + { "begin": 8428, "end": 8739, "name": "SWAP2", "source": 2 }, + { "begin": 8428, "end": 8739, "name": "SWAP1", "source": 2 }, + { "begin": 8428, "end": 8739, "name": "POP", "source": 2 }, { - "begin": 8423, - "end": 8734, + "begin": 8428, + "end": 8739, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8740, - "end": 8857, + "begin": 8745, + "end": 8862, "name": "tag", - "source": 1, + "source": 2, "value": "108" }, - { "begin": 8740, "end": 8857, "name": "JUMPDEST", "source": 1 }, + { "begin": 8745, "end": 8862, "name": "JUMPDEST", "source": 2 }, { - "begin": 8849, - "end": 8850, + "begin": 8854, + "end": 8855, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 8846, "end": 8847, "name": "DUP1", "source": 1 }, - { "begin": 8839, "end": 8851, "name": "REVERT", "source": 1 }, + { "begin": 8851, "end": 8852, "name": "DUP1", "source": 2 }, + { "begin": 8844, "end": 8856, "name": "REVERT", "source": 2 }, { - "begin": 8880, - "end": 9590, + "begin": 8885, + "end": 9595, "name": "tag", - "source": 1, + "source": 2, "value": "109" }, - { "begin": 8880, "end": 9590, "name": "JUMPDEST", "source": 1 }, + { "begin": 8885, "end": 9595, "name": "JUMPDEST", "source": 2 }, { - "begin": 8976, - "end": 8981, + "begin": 8981, + "end": 8986, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 9001, - "end": 9082, + "begin": 9006, + "end": 9087, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "219" }, { - "begin": 9017, - "end": 9081, + "begin": 9022, + "end": 9086, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "220" }, - { "begin": 9074, "end": 9080, "name": "DUP5", "source": 1 }, + { "begin": 9079, "end": 9085, "name": "DUP5", "source": 2 }, { - "begin": 9017, - "end": 9081, + "begin": 9022, + "end": 9086, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "107" }, { - "begin": 9017, - "end": 9081, + "begin": 9022, + "end": 9086, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9017, - "end": 9081, + "begin": 9022, + "end": 9086, "name": "tag", - "source": 1, + "source": 2, "value": "220" }, - { "begin": 9017, "end": 9081, "name": "JUMPDEST", "source": 1 }, + { "begin": 9022, "end": 9086, "name": "JUMPDEST", "source": 2 }, { - "begin": 9001, - "end": 9082, + "begin": 9006, + "end": 9087, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "93" }, { - "begin": 9001, - "end": 9082, + "begin": 9006, + "end": 9087, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9001, - "end": 9082, + "begin": 9006, + "end": 9087, "name": "tag", - "source": 1, + "source": 2, "value": "219" }, - { "begin": 9001, "end": 9082, "name": "JUMPDEST", "source": 1 }, - { "begin": 8992, "end": 9082, "name": "SWAP1", "source": 1 }, - { "begin": 8992, "end": 9082, "name": "POP", "source": 1 }, - { "begin": 9102, "end": 9107, "name": "DUP1", "source": 1 }, - { "begin": 9131, "end": 9137, "name": "DUP4", "source": 1 }, - { "begin": 9124, "end": 9129, "name": "DUP3", "source": 1 }, - { "begin": 9117, "end": 9138, "name": "MSTORE", "source": 1 }, + { "begin": 9006, "end": 9087, "name": "JUMPDEST", "source": 2 }, + { "begin": 8997, "end": 9087, "name": "SWAP1", "source": 2 }, + { "begin": 8997, "end": 9087, "name": "POP", "source": 2 }, + { "begin": 9107, "end": 9112, "name": "DUP1", "source": 2 }, + { "begin": 9136, "end": 9142, "name": "DUP4", "source": 2 }, + { "begin": 9129, "end": 9134, "name": "DUP3", "source": 2 }, + { "begin": 9122, "end": 9143, "name": "MSTORE", "source": 2 }, { - "begin": 9165, - "end": 9169, + "begin": 9170, + "end": 9174, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9158, "end": 9163, "name": "DUP3", "source": 1 }, - { "begin": 9154, "end": 9170, "name": "ADD", "source": 1 }, - { "begin": 9147, "end": 9170, "name": "SWAP1", "source": 1 }, - { "begin": 9147, "end": 9170, "name": "POP", "source": 1 }, + { "begin": 9163, "end": 9168, "name": "DUP3", "source": 2 }, + { "begin": 9159, "end": 9175, "name": "ADD", "source": 2 }, + { "begin": 9152, "end": 9175, "name": "SWAP1", "source": 2 }, + { "begin": 9152, "end": 9175, "name": "POP", "source": 2 }, { - "begin": 9218, - "end": 9222, + "begin": 9223, + "end": 9227, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9210, "end": 9216, "name": "DUP5", "source": 1 }, - { "begin": 9206, "end": 9223, "name": "MUL", "source": 1 }, - { "begin": 9198, "end": 9204, "name": "DUP4", "source": 1 }, - { "begin": 9194, "end": 9224, "name": "ADD", "source": 1 }, - { "begin": 9247, "end": 9250, "name": "DUP6", "source": 1 }, - { "begin": 9239, "end": 9245, "name": "DUP2", "source": 1 }, - { "begin": 9236, "end": 9251, "name": "GT", "source": 1 }, - { "begin": 9233, "end": 9355, "name": "ISZERO", "source": 1 }, + { "begin": 9215, "end": 9221, "name": "DUP5", "source": 2 }, + { "begin": 9211, "end": 9228, "name": "MUL", "source": 2 }, + { "begin": 9203, "end": 9209, "name": "DUP4", "source": 2 }, + { "begin": 9199, "end": 9229, "name": "ADD", "source": 2 }, + { "begin": 9252, "end": 9255, "name": "DUP6", "source": 2 }, + { "begin": 9244, "end": 9250, "name": "DUP2", "source": 2 }, + { "begin": 9241, "end": 9256, "name": "GT", "source": 2 }, + { "begin": 9238, "end": 9360, "name": "ISZERO", "source": 2 }, { - "begin": 9233, - "end": 9355, + "begin": 9238, + "end": 9360, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "221" }, - { "begin": 9233, "end": 9355, "name": "JUMPI", "source": 1 }, + { "begin": 9238, "end": 9360, "name": "JUMPI", "source": 2 }, { - "begin": 9266, - "end": 9345, + "begin": 9271, + "end": 9350, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "222" }, { - "begin": 9266, - "end": 9345, + "begin": 9271, + "end": 9350, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "108" }, { - "begin": 9266, - "end": 9345, + "begin": 9271, + "end": 9350, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9266, - "end": 9345, + "begin": 9271, + "end": 9350, "name": "tag", - "source": 1, + "source": 2, "value": "222" }, - { "begin": 9266, "end": 9345, "name": "JUMPDEST", "source": 1 }, + { "begin": 9271, "end": 9350, "name": "JUMPDEST", "source": 2 }, { - "begin": 9233, - "end": 9355, + "begin": 9238, + "end": 9360, "name": "tag", - "source": 1, + "source": 2, "value": "221" }, - { "begin": 9233, "end": 9355, "name": "JUMPDEST", "source": 1 }, - { "begin": 9381, "end": 9387, "name": "DUP4", "source": 1 }, + { "begin": 9238, "end": 9360, "name": "JUMPDEST", "source": 2 }, + { "begin": 9386, "end": 9392, "name": "DUP4", "source": 2 }, { - "begin": 9364, - "end": 9584, + "begin": 9369, + "end": 9589, "name": "tag", - "source": 1, + "source": 2, "value": "223" }, - { "begin": 9364, "end": 9584, "name": "JUMPDEST", "source": 1 }, - { "begin": 9398, "end": 9404, "name": "DUP2", "source": 1 }, - { "begin": 9393, "end": 9396, "name": "DUP2", "source": 1 }, - { "begin": 9390, "end": 9405, "name": "LT", "source": 1 }, - { "begin": 9364, "end": 9584, "name": "ISZERO", "source": 1 }, + { "begin": 9369, "end": 9589, "name": "JUMPDEST", "source": 2 }, + { "begin": 9403, "end": 9409, "name": "DUP2", "source": 2 }, + { "begin": 9398, "end": 9401, "name": "DUP2", "source": 2 }, + { "begin": 9395, "end": 9410, "name": "LT", "source": 2 }, + { "begin": 9369, "end": 9589, "name": "ISZERO", "source": 2 }, { - "begin": 9364, - "end": 9584, + "begin": 9369, + "end": 9589, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "225" }, - { "begin": 9364, "end": 9584, "name": "JUMPI", "source": 1 }, - { "begin": 9473, "end": 9476, "name": "DUP1", "source": 1 }, + { "begin": 9369, "end": 9589, "name": "JUMPI", "source": 2 }, + { "begin": 9478, "end": 9481, "name": "DUP1", "source": 2 }, { - "begin": 9502, - "end": 9539, + "begin": 9507, + "end": 9544, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "226" }, - { "begin": 9535, "end": 9538, "name": "DUP9", "source": 1 }, - { "begin": 9523, "end": 9533, "name": "DUP3", "source": 1 }, + { "begin": 9540, "end": 9543, "name": "DUP9", "source": 2 }, + { "begin": 9528, "end": 9538, "name": "DUP3", "source": 2 }, { - "begin": 9502, - "end": 9539, + "begin": 9507, + "end": 9544, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { - "begin": 9502, - "end": 9539, + "begin": 9507, + "end": 9544, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9502, - "end": 9539, + "begin": 9507, + "end": 9544, "name": "tag", - "source": 1, + "source": 2, "value": "226" }, - { "begin": 9502, "end": 9539, "name": "JUMPDEST", "source": 1 }, - { "begin": 9497, "end": 9500, "name": "DUP5", "source": 1 }, - { "begin": 9490, "end": 9540, "name": "MSTORE", "source": 1 }, + { "begin": 9507, "end": 9544, "name": "JUMPDEST", "source": 2 }, + { "begin": 9502, "end": 9505, "name": "DUP5", "source": 2 }, + { "begin": 9495, "end": 9545, "name": "MSTORE", "source": 2 }, { - "begin": 9569, - "end": 9573, + "begin": 9574, + "end": 9578, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9564, "end": 9567, "name": "DUP5", "source": 1 }, - { "begin": 9560, "end": 9574, "name": "ADD", "source": 1 }, - { "begin": 9553, "end": 9574, "name": "SWAP4", "source": 1 }, - { "begin": 9553, "end": 9574, "name": "POP", "source": 1 }, - { "begin": 9440, "end": 9584, "name": "POP", "source": 1 }, + { "begin": 9569, "end": 9572, "name": "DUP5", "source": 2 }, + { "begin": 9565, "end": 9579, "name": "ADD", "source": 2 }, + { "begin": 9558, "end": 9579, "name": "SWAP4", "source": 2 }, + { "begin": 9558, "end": 9579, "name": "POP", "source": 2 }, + { "begin": 9445, "end": 9589, "name": "POP", "source": 2 }, { - "begin": 9424, - "end": 9428, + "begin": 9429, + "end": 9433, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9419, "end": 9422, "name": "DUP2", "source": 1 }, - { "begin": 9415, "end": 9429, "name": "ADD", "source": 1 }, - { "begin": 9408, "end": 9429, "name": "SWAP1", "source": 1 }, - { "begin": 9408, "end": 9429, "name": "POP", "source": 1 }, + { "begin": 9424, "end": 9427, "name": "DUP2", "source": 2 }, + { "begin": 9420, "end": 9434, "name": "ADD", "source": 2 }, + { "begin": 9413, "end": 9434, "name": "SWAP1", "source": 2 }, + { "begin": 9413, "end": 9434, "name": "POP", "source": 2 }, { - "begin": 9364, - "end": 9584, + "begin": 9369, + "end": 9589, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "223" }, - { "begin": 9364, "end": 9584, "name": "JUMP", "source": 1 }, + { "begin": 9369, "end": 9589, "name": "JUMP", "source": 2 }, { - "begin": 9364, - "end": 9584, + "begin": 9369, + "end": 9589, "name": "tag", - "source": 1, + "source": 2, "value": "225" }, - { "begin": 9364, "end": 9584, "name": "JUMPDEST", "source": 1 }, - { "begin": 9368, "end": 9389, "name": "POP", "source": 1 }, - { "begin": 8982, "end": 9590, "name": "POP", "source": 1 }, - { "begin": 8982, "end": 9590, "name": "POP", "source": 1 }, - { "begin": 8880, "end": 9590, "name": "SWAP4", "source": 1 }, - { "begin": 8880, "end": 9590, "name": "SWAP3", "source": 1 }, - { "begin": 8880, "end": 9590, "name": "POP", "source": 1 }, - { "begin": 8880, "end": 9590, "name": "POP", "source": 1 }, - { "begin": 8880, "end": 9590, "name": "POP", "source": 1 }, + { "begin": 9369, "end": 9589, "name": "JUMPDEST", "source": 2 }, + { "begin": 9373, "end": 9394, "name": "POP", "source": 2 }, + { "begin": 8987, "end": 9595, "name": "POP", "source": 2 }, + { "begin": 8987, "end": 9595, "name": "POP", "source": 2 }, + { "begin": 8885, "end": 9595, "name": "SWAP4", "source": 2 }, + { "begin": 8885, "end": 9595, "name": "SWAP3", "source": 2 }, + { "begin": 8885, "end": 9595, "name": "POP", "source": 2 }, + { "begin": 8885, "end": 9595, "name": "POP", "source": 2 }, + { "begin": 8885, "end": 9595, "name": "POP", "source": 2 }, { - "begin": 8880, - "end": 9590, + "begin": 8885, + "end": 9595, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9613, - "end": 9983, + "begin": 9618, + "end": 9988, "name": "tag", - "source": 1, + "source": 2, "value": "110" }, - { "begin": 9613, "end": 9983, "name": "JUMPDEST", "source": 1 }, + { "begin": 9618, "end": 9988, "name": "JUMPDEST", "source": 2 }, { - "begin": 9684, - "end": 9689, + "begin": 9689, + "end": 9694, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 9733, "end": 9736, "name": "DUP3", "source": 1 }, + { "begin": 9738, "end": 9741, "name": "DUP3", "source": 2 }, { - "begin": 9726, - "end": 9730, + "begin": 9731, + "end": 9735, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 9718, "end": 9724, "name": "DUP4", "source": 1 }, - { "begin": 9714, "end": 9731, "name": "ADD", "source": 1 }, - { "begin": 9710, "end": 9737, "name": "SLT", "source": 1 }, + { "begin": 9723, "end": 9729, "name": "DUP4", "source": 2 }, + { "begin": 9719, "end": 9736, "name": "ADD", "source": 2 }, + { "begin": 9715, "end": 9742, "name": "SLT", "source": 2 }, { - "begin": 9700, - "end": 9822, + "begin": 9705, + "end": 9827, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "228" }, - { "begin": 9700, "end": 9822, "name": "JUMPI", "source": 1 }, + { "begin": 9705, "end": 9827, "name": "JUMPI", "source": 2 }, { - "begin": 9741, - "end": 9820, + "begin": 9746, + "end": 9825, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "229" }, { - "begin": 9741, - "end": 9820, + "begin": 9746, + "end": 9825, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "89" }, { - "begin": 9741, - "end": 9820, + "begin": 9746, + "end": 9825, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9741, - "end": 9820, + "begin": 9746, + "end": 9825, "name": "tag", - "source": 1, + "source": 2, "value": "229" }, - { "begin": 9741, "end": 9820, "name": "JUMPDEST", "source": 1 }, + { "begin": 9746, "end": 9825, "name": "JUMPDEST", "source": 2 }, { - "begin": 9700, - "end": 9822, + "begin": 9705, + "end": 9827, "name": "tag", - "source": 1, + "source": 2, "value": "228" }, - { "begin": 9700, "end": 9822, "name": "JUMPDEST", "source": 1 }, - { "begin": 9858, "end": 9864, "name": "DUP2", "source": 1 }, + { "begin": 9705, "end": 9827, "name": "JUMPDEST", "source": 2 }, + { "begin": 9863, "end": 9869, "name": "DUP2", "source": 2 }, { - "begin": 9845, - "end": 9865, + "begin": 9850, + "end": 9870, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 9883, - "end": 9977, + "begin": 9888, + "end": 9982, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "230" }, - { "begin": 9973, "end": 9976, "name": "DUP5", "source": 1 }, - { "begin": 9965, "end": 9971, "name": "DUP3", "source": 1 }, + { "begin": 9978, "end": 9981, "name": "DUP5", "source": 2 }, + { "begin": 9970, "end": 9976, "name": "DUP3", "source": 2 }, { - "begin": 9958, - "end": 9962, + "begin": 9963, + "end": 9967, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9950, "end": 9956, "name": "DUP7", "source": 1 }, - { "begin": 9946, "end": 9963, "name": "ADD", "source": 1 }, + { "begin": 9955, "end": 9961, "name": "DUP7", "source": 2 }, + { "begin": 9951, "end": 9968, "name": "ADD", "source": 2 }, { - "begin": 9883, - "end": 9977, + "begin": 9888, + "end": 9982, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "109" }, { - "begin": 9883, - "end": 9977, + "begin": 9888, + "end": 9982, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9883, - "end": 9977, + "begin": 9888, + "end": 9982, "name": "tag", - "source": 1, + "source": 2, "value": "230" }, - { "begin": 9883, "end": 9977, "name": "JUMPDEST", "source": 1 }, - { "begin": 9874, "end": 9977, "name": "SWAP2", "source": 1 }, - { "begin": 9874, "end": 9977, "name": "POP", "source": 1 }, - { "begin": 9690, "end": 9983, "name": "POP", "source": 1 }, - { "begin": 9613, "end": 9983, "name": "SWAP3", "source": 1 }, - { "begin": 9613, "end": 9983, "name": "SWAP2", "source": 1 }, - { "begin": 9613, "end": 9983, "name": "POP", "source": 1 }, - { "begin": 9613, "end": 9983, "name": "POP", "source": 1 }, + { "begin": 9888, "end": 9982, "name": "JUMPDEST", "source": 2 }, + { "begin": 9879, "end": 9982, "name": "SWAP2", "source": 2 }, + { "begin": 9879, "end": 9982, "name": "POP", "source": 2 }, + { "begin": 9695, "end": 9988, "name": "POP", "source": 2 }, + { "begin": 9618, "end": 9988, "name": "SWAP3", "source": 2 }, + { "begin": 9618, "end": 9988, "name": "SWAP2", "source": 2 }, + { "begin": 9618, "end": 9988, "name": "POP", "source": 2 }, + { "begin": 9618, "end": 9988, "name": "POP", "source": 2 }, { - "begin": 9613, - "end": 9983, + "begin": 9618, + "end": 9988, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9989, - "end": 10528, + "begin": 9994, + "end": 10533, "name": "tag", - "source": 1, + "source": 2, "value": "55" }, - { "begin": 9989, "end": 10528, "name": "JUMPDEST", "source": 1 }, + { "begin": 9994, "end": 10533, "name": "JUMPDEST", "source": 2 }, { - "begin": 10073, - "end": 10079, + "begin": 10078, + "end": 10084, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 10122, - "end": 10124, + "begin": 10127, + "end": 10129, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 10110, "end": 10119, "name": "DUP3", "source": 1 }, - { "begin": 10101, "end": 10108, "name": "DUP5", "source": 1 }, - { "begin": 10097, "end": 10120, "name": "SUB", "source": 1 }, - { "begin": 10093, "end": 10125, "name": "SLT", "source": 1 }, - { "begin": 10090, "end": 10209, "name": "ISZERO", "source": 1 }, + { "begin": 10115, "end": 10124, "name": "DUP3", "source": 2 }, + { "begin": 10106, "end": 10113, "name": "DUP5", "source": 2 }, + { "begin": 10102, "end": 10125, "name": "SUB", "source": 2 }, + { "begin": 10098, "end": 10130, "name": "SLT", "source": 2 }, + { "begin": 10095, "end": 10214, "name": "ISZERO", "source": 2 }, { - "begin": 10090, - "end": 10209, + "begin": 10095, + "end": 10214, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "232" }, - { "begin": 10090, "end": 10209, "name": "JUMPI", "source": 1 }, + { "begin": 10095, "end": 10214, "name": "JUMPI", "source": 2 }, { - "begin": 10128, - "end": 10207, + "begin": 10133, + "end": 10212, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "233" }, { - "begin": 10128, - "end": 10207, + "begin": 10133, + "end": 10212, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 10128, - "end": 10207, + "begin": 10133, + "end": 10212, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10128, - "end": 10207, + "begin": 10133, + "end": 10212, "name": "tag", - "source": 1, + "source": 2, "value": "233" }, - { "begin": 10128, "end": 10207, "name": "JUMPDEST", "source": 1 }, + { "begin": 10133, "end": 10212, "name": "JUMPDEST", "source": 2 }, { - "begin": 10090, - "end": 10209, + "begin": 10095, + "end": 10214, "name": "tag", - "source": 1, + "source": 2, "value": "232" }, - { "begin": 10090, "end": 10209, "name": "JUMPDEST", "source": 1 }, + { "begin": 10095, "end": 10214, "name": "JUMPDEST", "source": 2 }, { - "begin": 10276, - "end": 10277, + "begin": 10281, + "end": 10282, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 10265, "end": 10274, "name": "DUP3", "source": 1 }, - { "begin": 10261, "end": 10278, "name": "ADD", "source": 1 }, + { "begin": 10270, "end": 10279, "name": "DUP3", "source": 2 }, + { "begin": 10266, "end": 10283, "name": "ADD", "source": 2 }, { - "begin": 10248, - "end": 10279, + "begin": 10253, + "end": 10284, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 10306, - "end": 10324, + "begin": 10311, + "end": 10329, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 10298, "end": 10304, "name": "DUP2", "source": 1 }, - { "begin": 10295, "end": 10325, "name": "GT", "source": 1 }, - { "begin": 10292, "end": 10409, "name": "ISZERO", "source": 1 }, + { "begin": 10303, "end": 10309, "name": "DUP2", "source": 2 }, + { "begin": 10300, "end": 10330, "name": "GT", "source": 2 }, + { "begin": 10297, "end": 10414, "name": "ISZERO", "source": 2 }, { - "begin": 10292, - "end": 10409, + "begin": 10297, + "end": 10414, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "234" }, - { "begin": 10292, "end": 10409, "name": "JUMPI", "source": 1 }, + { "begin": 10297, "end": 10414, "name": "JUMPI", "source": 2 }, { - "begin": 10328, - "end": 10407, + "begin": 10333, + "end": 10412, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "235" }, { - "begin": 10328, - "end": 10407, + "begin": 10333, + "end": 10412, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 10328, - "end": 10407, + "begin": 10333, + "end": 10412, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10328, - "end": 10407, + "begin": 10333, + "end": 10412, "name": "tag", - "source": 1, + "source": 2, "value": "235" }, - { "begin": 10328, "end": 10407, "name": "JUMPDEST", "source": 1 }, + { "begin": 10333, "end": 10412, "name": "JUMPDEST", "source": 2 }, { - "begin": 10292, - "end": 10409, + "begin": 10297, + "end": 10414, "name": "tag", - "source": 1, + "source": 2, "value": "234" }, - { "begin": 10292, "end": 10409, "name": "JUMPDEST", "source": 1 }, + { "begin": 10297, "end": 10414, "name": "JUMPDEST", "source": 2 }, { - "begin": 10433, - "end": 10511, + "begin": 10438, + "end": 10516, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "236" }, - { "begin": 10503, "end": 10510, "name": "DUP5", "source": 1 }, - { "begin": 10494, "end": 10500, "name": "DUP3", "source": 1 }, - { "begin": 10483, "end": 10492, "name": "DUP6", "source": 1 }, - { "begin": 10479, "end": 10501, "name": "ADD", "source": 1 }, + { "begin": 10508, "end": 10515, "name": "DUP5", "source": 2 }, + { "begin": 10499, "end": 10505, "name": "DUP3", "source": 2 }, + { "begin": 10488, "end": 10497, "name": "DUP6", "source": 2 }, + { "begin": 10484, "end": 10506, "name": "ADD", "source": 2 }, { - "begin": 10433, - "end": 10511, + "begin": 10438, + "end": 10516, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "110" }, { - "begin": 10433, - "end": 10511, + "begin": 10438, + "end": 10516, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10433, - "end": 10511, + "begin": 10438, + "end": 10516, "name": "tag", - "source": 1, + "source": 2, "value": "236" }, - { "begin": 10433, "end": 10511, "name": "JUMPDEST", "source": 1 }, - { "begin": 10423, "end": 10511, "name": "SWAP2", "source": 1 }, - { "begin": 10423, "end": 10511, "name": "POP", "source": 1 }, - { "begin": 10219, "end": 10521, "name": "POP", "source": 1 }, - { "begin": 9989, "end": 10528, "name": "SWAP3", "source": 1 }, - { "begin": 9989, "end": 10528, "name": "SWAP2", "source": 1 }, - { "begin": 9989, "end": 10528, "name": "POP", "source": 1 }, - { "begin": 9989, "end": 10528, "name": "POP", "source": 1 }, + { "begin": 10438, "end": 10516, "name": "JUMPDEST", "source": 2 }, + { "begin": 10428, "end": 10516, "name": "SWAP2", "source": 2 }, + { "begin": 10428, "end": 10516, "name": "POP", "source": 2 }, + { "begin": 10224, "end": 10526, "name": "POP", "source": 2 }, + { "begin": 9994, "end": 10533, "name": "SWAP3", "source": 2 }, + { "begin": 9994, "end": 10533, "name": "SWAP2", "source": 2 }, + { "begin": 9994, "end": 10533, "name": "POP", "source": 2 }, + { "begin": 9994, "end": 10533, "name": "POP", "source": 2 }, { - "begin": 9989, - "end": 10528, + "begin": 9994, + "end": 10533, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" } ] @@ -12602,20 +12587,20 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"controller_address\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"reward_destination\",\"type\":\"bytes\"}],\"name\":\"encode_bond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_bond_extra\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"encode_chill\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nominees\",\"type\":\"uint256[]\"}],\"name\":\"encode_nominate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_rebond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"controller\",\"type\":\"uint256\"}],\"name\":\"encode_set_controller\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reward_destination\",\"type\":\"bytes\"}],\"name\":\"encode_set_payee\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_unbond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"comission\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"blocked\",\"type\":\"bool\"}],\"name\":\"encode_validate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"slashes\",\"type\":\"uint32\"}],\"name\":\"encode_withdraw_unbonded\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayencoder\",\"outputs\":[{\"internalType\":\"contract RelayEncoder\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"relayencoder()\":{\"notice\":\"The Relay Encoder wrapper at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"RelayEncoderInstance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x380f327a236f2ad80b5622dc655828eac1a3dd92fc46259a7a14534613018418\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://64df5bce997c22e202d8c67601ee22ac80ab1cc24a9461c18758ee5f5c934c4e\",\"dweb:/ipfs/QmSYL5uyid4XFmq4yMBBC6CbnvSeWGKWPZm4475cxUyCtX\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"controller_address\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"reward_destination\",\"type\":\"bytes\"}],\"name\":\"encode_bond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_bond_extra\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"encode_chill\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"nominees\",\"type\":\"uint256[]\"}],\"name\":\"encode_nominate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_rebond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"controller\",\"type\":\"uint256\"}],\"name\":\"encode_set_controller\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reward_destination\",\"type\":\"bytes\"}],\"name\":\"encode_set_payee\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"encode_unbond\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"comission\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"blocked\",\"type\":\"bool\"}],\"name\":\"encode_validate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"slashes\",\"type\":\"uint32\"}],\"name\":\"encode_withdraw_unbonded\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayencoder\",\"outputs\":[{\"internalType\":\"contract RelayEncoder\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"relayencoder()\":{\"notice\":\"The Relay Encoder wrapper at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"RelayEncoderInstance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x9f53bc64a085b8d547a75aad3f9f938fbb014a4dc4487db1f4a21d056559ace6\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://981a47abcec7b94b3793151b487f82b471bff7ccc9ad311c541152542171216d\",\"dweb:/ipfs/QmZXgRsktrcyNEuwd21CwjTN9uzueuVpRT4aaLcDBR2i7p\"]},\"precompiles/relay-encoder/RelayEncoder.sol\":{\"keccak256\":\"0x6a4cd850ce045c7d29680c38381f85c194416069b697df6ada6e0168c84c7f00\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://913b557786b7dc204b87f85570f2a885a5c61f2b41b7360ec9cc651a7ebe84a3\",\"dweb:/ipfs/QmUZ7LXi9KD2qNvaPoefRrNt4fgMEoJevKRQWwkGd83XXH\"]}},\"version\":1}", "storageLayout": { "storage": [ { - "astId": 87, + "astId": 11, "contract": "main.sol:RelayEncoderInstance", "label": "relayencoder", "offset": 0, "slot": "0", - "type": "t_contract(RelayEncoder)78" + "type": "t_contract(RelayEncoder)206" } ], "types": { - "t_contract(RelayEncoder)78": { + "t_contract(RelayEncoder)206": { "encoding": "inplace", "label": "contract RelayEncoder", "numberOfBytes": "20" @@ -12632,5 +12617,5 @@ "version": 1 } }, - "sourceCode": "\n // SPDX-License-Identifier: GPL-3.0-only\n pragma solidity >=0.8.0;\n\n /// @author The Moonbeam Team\n /// @title The interface through which solidity contracts will interact with Relay Encoder\n /// We follow this same interface including four-byte function selectors, in the precompile that\n /// wraps the pallet\n interface RelayEncoder {\n \n // dev Encode 'bond' relay call\n // Selector: 31627376\n // @param controller_address: Address of the controller\n // @param amount: The amount to bond\n // @param reward_destination: the account that should receive the reward\n // @returns The bytes associated with the encoded call\n function encode_bond(\n uint256 controller_address,\n uint256 amount,\n bytes memory reward_destination\n ) external pure returns (bytes memory result);\n \n // dev Encode 'bond_extra' relay call\n // Selector: 49def326\n // @param amount: The extra amount to bond\n // @returns The bytes associated with the encoded call\n function encode_bond_extra(uint256 amount) external pure returns (bytes memory result);\n \n // dev Encode 'unbond' relay call\n // Selector: bc4b2187\n // @param amount: The amount to unbond\n // @returns The bytes associated with the encoded call\n function encode_unbond(uint256 amount) external pure returns (bytes memory result);\n \n // dev Encode 'withdraw_unbonded' relay call\n // Selector: 2d220331\n // @param slashes: Weight hint, number of slashing spans\n // @returns The bytes associated with the encoded call\n function encode_withdraw_unbonded(\n uint32 slashes\n ) external pure returns (bytes memory result);\n \n // dev Encode 'validate' relay call\n // Selector: 3a0d803a\n // @param comission: Comission of the validator as parts_per_billion\n // @param blocked: Whether or not the validator is accepting more nominations\n // @returns The bytes associated with the encoded call\n // selector: 3a0d803a\n function encode_validate(\n uint256 comission,\n bool blocked\n ) external pure returns (bytes memory result);\n \n // dev Encode 'nominate' relay call\n // Selector: a7cb124b\n // @param nominees: An array of AccountIds corresponding to the accounts we will nominate\n // @param blocked: Whether or not the validator is accepting more nominations\n // @returns The bytes associated with the encoded call\n function encode_nominate(\n uint256 [] memory nominees\n ) external pure returns (bytes memory result);\n \n // dev Encode 'chill' relay call\n // Selector: bc4b2187\n // @returns The bytes associated with the encoded call\n function encode_chill() external pure returns (bytes memory result);\n \n // dev Encode 'set_payee' relay call\n // Selector: 9801b147\n // @param reward_destination: the account that should receive the reward\n // @returns The bytes associated with the encoded call\n function encode_set_payee(\n bytes memory reward_destination\n ) external pure returns (bytes memory result);\n \n // dev Encode 'set_controller' relay call\n // Selector: 7a8f48c2\n // @param controller: The controller address\n // @returns The bytes associated with the encoded call\n function encode_set_controller(\n uint256 controller\n ) external pure returns (bytes memory result);\n \n // dev Encode 'rebond' relay call\n // Selector: add6b3bf\n // @param amount: The amount to rebond\n // @returns The bytes associated with the encoded call\n function encode_rebond(uint256 amount) external pure returns (bytes memory result);\n }\n\n // We only use this to be able to generate the input data, since we need a compiled instance\n contract RelayEncoderInstance is RelayEncoder {\n /// The Relay Encoder wrapper at the known pre-compile address.\n RelayEncoder public relayencoder = RelayEncoder(0x0000000000000000000000000000000000000805);\n function encode_bond(\n uint256 controller_address,\n uint256 amount, bytes\n memory reward_destination\n ) external pure override returns (bytes memory result){\n return \"0x00\";\n }\n function encode_bond_extra(\n uint256 amount\n ) external pure override returns (bytes memory result){\n return \"0x00\";\n }\n function encode_unbond(\n uint256 amount\n ) external pure override returns (bytes memory result) {\n return \"0x00\";\n }\n function encode_withdraw_unbonded(\n uint32 slashes\n ) external pure override returns (bytes memory result) {\n return \"0x00\";\n }\n function encode_validate(\n uint256 comission,\n bool blocked\n ) external pure override returns (bytes memory result) {\n return \"0x00\";\n }\n function encode_nominate(\n uint256 [] memory nominees\n ) external pure override returns (bytes memory result) {\n return \"0x00\";\n }\n function encode_chill() external pure override returns (bytes memory result) {\n return \"0x00\";\n }\n function encode_set_payee(\n bytes memory reward_destination\n ) external pure override returns (bytes memory result) {\n return \"0x00\";\n }\n function encode_set_controller(\n uint256 controller\n ) external pure override returns (bytes memory result){\n return \"0x00\";\n }\n function encode_rebond(\n uint256 amount\n ) external pure override returns (bytes memory result){\n return \"0x00\";\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\nimport \"../../../precompiles/relay-encoder/RelayEncoder.sol\";\n\n// We only use this to be able to generate the input data, since we need a compiled instance\ncontract RelayEncoderInstance is RelayEncoder {\n /// The Relay Encoder wrapper at the known pre-compile address.\n RelayEncoder public relayencoder =\n RelayEncoder(0x0000000000000000000000000000000000000805);\n\n function encode_bond(\n uint256 controller_address,\n uint256 amount,\n bytes memory reward_destination\n ) external pure override returns (bytes memory result) {\n return \"0x00\";\n }\n\n function encode_bond_extra(uint256 amount)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_unbond(uint256 amount)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_withdraw_unbonded(uint32 slashes)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_validate(uint256 comission, bool blocked)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_nominate(uint256[] memory nominees)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_chill()\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_set_payee(bytes memory reward_destination)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_set_controller(uint256 controller)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n\n function encode_rebond(uint256 amount)\n external\n pure\n override\n returns (bytes memory result)\n {\n return \"0x00\";\n }\n}\n" } diff --git a/tests/contracts/compiled/SingleEventContract.json b/tests/contracts/compiled/SingleEventContract.json deleted file mode 100644 index ec12305e56..0000000000 --- a/tests/contracts/compiled/SingleEventContract.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "byteCode": "0x6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "Constructed", - "type": "event" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":133:200 constructor() {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":178:188 msg.sender */\n caller\n /* \"main.sol\":166:189 Constructed(msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log2\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":43:206 contract SingleEventContract {... */\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "6080604052348015600f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff167e40d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d60405160405180910390a2603f80605f6000396000f3fe6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH31 0x40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 PUSH1 0x3F DUP1 PUSH1 0x5F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "43:163:0:-:0;;;133:67;;;;;;;;;;178:10;166:23;;;;;;;;;;;;43:163;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600080fdfea2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAE MUL PUSH13 0x320D184CA85465858E1967F27F SWAP4 0xDB SWAP14 0xC4 SWAP12 0xE1 0xD4 0xCE CALL 0xC7 0x22 0xBF OR 0xBC 0xD 0xC2 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "43:163:0:-:0;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "12600", - "executionCost": "1226", - "totalCost": "13826" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 43, - "end": 206, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 43, - "end": 206, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 43, "end": 206, "name": "MSTORE", "source": 0 }, - { "begin": 133, "end": 200, "name": "CALLVALUE", "source": 0 }, - { "begin": 133, "end": 200, "name": "DUP1", "source": 0 }, - { "begin": 133, "end": 200, "name": "ISZERO", "source": 0 }, - { - "begin": 133, - "end": 200, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 133, "end": 200, "name": "JUMPI", "source": 0 }, - { - "begin": 133, - "end": 200, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 133, "end": 200, "name": "DUP1", "source": 0 }, - { "begin": 133, "end": 200, "name": "REVERT", "source": 0 }, - { - "begin": 133, - "end": 200, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 133, "end": 200, "name": "JUMPDEST", "source": 0 }, - { "begin": 133, "end": 200, "name": "POP", "source": 0 }, - { "begin": 178, "end": 188, "name": "CALLER", "source": 0 }, - { - "begin": 166, - "end": 189, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 166, "end": 189, "name": "AND", "source": 0 }, - { - "begin": 166, - "end": 189, - "name": "PUSH", - "source": 0, - "value": "40D54D5E5B097202376B55BCBAAEDD2EE468CE4496F1D30030C4E5308BF94D" - }, - { - "begin": 166, - "end": 189, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 166, "end": 189, "name": "MLOAD", "source": 0 }, - { - "begin": 166, - "end": 189, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 166, "end": 189, "name": "MLOAD", "source": 0 }, - { "begin": 166, "end": 189, "name": "DUP1", "source": 0 }, - { "begin": 166, "end": 189, "name": "SWAP2", "source": 0 }, - { "begin": 166, "end": 189, "name": "SUB", "source": 0 }, - { "begin": 166, "end": 189, "name": "SWAP1", "source": 0 }, - { "begin": 166, "end": 189, "name": "LOG2", "source": 0 }, - { - "begin": 43, - "end": 206, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 43, "end": 206, "name": "DUP1", "source": 0 }, - { - "begin": 43, - "end": 206, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 43, - "end": 206, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 206, "name": "CODECOPY", "source": 0 }, - { - "begin": 43, - "end": 206, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 206, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220ae026c320d184ca85465858e1967f27f93db9dc49be1d4cef1c722bf17bc0dc264736f6c63430008030033", - ".code": [ - { - "begin": 43, - "end": 206, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 43, - "end": 206, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 43, "end": 206, "name": "MSTORE", "source": 0 }, - { - "begin": 43, - "end": 206, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 43, "end": 206, "name": "DUP1", "source": 0 }, - { "begin": 43, "end": 206, "name": "REVERT", "source": 0 } - ] - } - } - }, - "methodIdentifiers": {} - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Constructed\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"SingleEventContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5bdc4e014e35f9b07112af42347d90a14e9ea3cf8b609e48e93273606b5896b2\",\"urls\":[\"bzz-raw://20d9c0eb3ca1fceec867318c063ab277ffcf57928a325da537cb5f061ea713cf\",\"dweb:/ipfs/QmYHPwfoDdMa7p1oUG44unJ3vHQWSSqaBJ2xVj5dJEvoim\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract SingleEventContract {\n event Constructed(address indexed owner);\n\n constructor() {\n emit Constructed(msg.sender);\n }\n }" -} diff --git a/tests/contracts/compiled/SolidityTest.json b/tests/contracts/compiled/SolidityTest.json new file mode 100644 index 0000000000..c49ed05282 --- /dev/null +++ b/tests/contracts/compiled/SolidityTest.json @@ -0,0 +1,239 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "p0", "type": "uint8" }, + { "internalType": "bytes[]", "name": "p1", "type": "bytes[]" } + ], + "internalType": "struct SolidityTest.CustomArg0", + "name": "arg0", + "type": "tuple" + }, + { "internalType": "bytes[]", "name": "arg1", "type": "bytes[]" }, + { "internalType": "uint64", "name": "arg2", "type": "uint64" } + ], + "name": "fnCustomArgs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "p0", "type": "uint8" }, + { "internalType": "bytes[]", "name": "p1", "type": "bytes[]" } + ], + "internalType": "struct SolidityTest.CustomArg0", + "name": "arg0", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address[]", + "name": "p0", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "p1", + "type": "uint256[]" + }, + { "internalType": "bytes[]", "name": "p2", "type": "bytes[]" } + ], + "internalType": "struct SolidityTest.CustomArg1", + "name": "arg1", + "type": "tuple" + }, + { "internalType": "bytes[]", "name": "arg2", "type": "bytes[]" }, + { "internalType": "uint64", "name": "arg3", "type": "uint64" } + ], + "name": "fnCustomArgsMultiple", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address[]", "name": "arg0", "type": "address[]" }, + { "internalType": "uint256[]", "name": "arg1", "type": "uint256[]" }, + { "internalType": "bytes[]", "name": "arg2", "type": "bytes[]" } + ], + "name": "fnMemoryArrayArgs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "fnNoArgs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "arg0", "type": "address" } + ], + "name": "fnOneArg", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint64", "name": "arg0", "type": "uint64" } + ], + "name": "fnOneArgSameLine", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint64", "name": "arg0", "type": "uint64" }, + { "internalType": "uint64", "name": "arg1", "type": "uint64" } + ], + "name": "fnSameArgs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "arg0", "type": "address" }, + { "internalType": "uint256", "name": "arg1", "type": "uint256" } + ], + "name": "fnTwoArgs", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint64", "name": "arg0", "type": "uint64" }, + { "internalType": "bytes32", "name": "arg1", "type": "bytes32" } + ], + "name": "fnTwoArgsSameLine", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint64", "name": "arg0", "type": "uint64" }, + { "internalType": "bytes32", "name": "arg1", "type": "bytes32" } + ], + "name": "fnTwoArgsSameLineExternalSplit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "fnCustomArgs((uint8,bytes[]),bytes[],uint64)": { + "params": { + "arg0": "Arg0 Description", + "arg1": "Arg1 Description", + "arg2": "Arg2 Description Selector: d8af1a4e" + } + }, + "fnCustomArgsMultiple((uint8,bytes[]),(address[],uint256[],bytes[]),bytes[],uint64)": { + "params": { + "arg0": "Arg0 Description", + "arg1": "Arg1 Description", + "arg2": "Arg2 Description", + "arg3": "Arg3 Description Selector: 550c1a4e" + } + }, + "fnMemoryArrayArgs(address[],uint256[],bytes[])": { + "params": { + "arg0": "Arg0 Description", + "arg1": "Arg1 Description", + "arg2": "Arg2 Description Selector: 18001a4e" + } + }, + "fnNoArgs()": { "details": "Function without params and no selector" }, + "fnOneArg(address)": { + "details": "Function info", + "params": { "arg0": "Arg0 Description Selector: c4921133" } + }, + "fnOneArgSameLine(uint64)": { + "params": { "arg0": "Arg0 Description Selector: b9904a86" } + }, + "fnSameArgs(uint64,uint64)": { + "params": { + "arg0": "Arg0 Description", + "arg1": "Arg1 Description Selector: d6b423d9" + } + }, + "fnTwoArgs(address,uint256)": { + "params": { + "arg0": "Arg0 Description", + "arg1": "Arg1 Description Selector: 67ea837e" + } + }, + "fnTwoArgsSameLine(uint64,bytes32)": { + "params": { + "arg0": "Arg0 Description", + "arg1": "Arg1 Description Selector: 28f0c44e" + } + }, + "fnTwoArgsSameLineExternalSplit(uint64,bytes32)": { + "params": { + "arg0": "Arg0 Description", + "arg1": "Arg1 Description Selector: 06f0c1ce" + } + } + }, + "title": "Solidity test file with incorrectly defined selectors", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "fnCustomArgs((uint8,bytes[]),bytes[],uint64)": "f29f96de", + "fnCustomArgsMultiple((uint8,bytes[]),(address[],uint256[],bytes[]),bytes[],uint64)": "b2c9f1a3", + "fnMemoryArrayArgs(address[],uint256[],bytes[])": "a19a07e1", + "fnNoArgs()": "f7af8d91", + "fnOneArg(address)": "d43a9a43", + "fnOneArgSameLine(uint64)": "c6024207", + "fnSameArgs(uint64,uint64)": "cee150c8", + "fnTwoArgs(address,uint256)": "40d6a43d", + "fnTwoArgsSameLine(uint64,bytes32)": "fcbc04c3", + "fnTwoArgsSameLineExternalSplit(uint64,bytes32)": "c590304c" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"p0\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"p1\",\"type\":\"bytes[]\"}],\"internalType\":\"struct SolidityTest.CustomArg0\",\"name\":\"arg0\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"arg1\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64\",\"name\":\"arg2\",\"type\":\"uint64\"}],\"name\":\"fnCustomArgs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"p0\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"p1\",\"type\":\"bytes[]\"}],\"internalType\":\"struct SolidityTest.CustomArg0\",\"name\":\"arg0\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"p0\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"p1\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"p2\",\"type\":\"bytes[]\"}],\"internalType\":\"struct SolidityTest.CustomArg1\",\"name\":\"arg1\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"arg2\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64\",\"name\":\"arg3\",\"type\":\"uint64\"}],\"name\":\"fnCustomArgsMultiple\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"arg0\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"arg1\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"arg2\",\"type\":\"bytes[]\"}],\"name\":\"fnMemoryArrayArgs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fnNoArgs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arg0\",\"type\":\"address\"}],\"name\":\"fnOneArg\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"arg0\",\"type\":\"uint64\"}],\"name\":\"fnOneArgSameLine\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"arg0\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"arg1\",\"type\":\"uint64\"}],\"name\":\"fnSameArgs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arg0\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"arg1\",\"type\":\"uint256\"}],\"name\":\"fnTwoArgs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"arg0\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"arg1\",\"type\":\"bytes32\"}],\"name\":\"fnTwoArgsSameLine\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"arg0\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"arg1\",\"type\":\"bytes32\"}],\"name\":\"fnTwoArgsSameLineExternalSplit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"fnCustomArgs((uint8,bytes[]),bytes[],uint64)\":{\"params\":{\"arg0\":\"Arg0 Description\",\"arg1\":\"Arg1 Description\",\"arg2\":\"Arg2 Description Selector: d8af1a4e\"}},\"fnCustomArgsMultiple((uint8,bytes[]),(address[],uint256[],bytes[]),bytes[],uint64)\":{\"params\":{\"arg0\":\"Arg0 Description\",\"arg1\":\"Arg1 Description\",\"arg2\":\"Arg2 Description\",\"arg3\":\"Arg3 Description Selector: 550c1a4e\"}},\"fnMemoryArrayArgs(address[],uint256[],bytes[])\":{\"params\":{\"arg0\":\"Arg0 Description\",\"arg1\":\"Arg1 Description\",\"arg2\":\"Arg2 Description Selector: 18001a4e\"}},\"fnNoArgs()\":{\"details\":\"Function without params and no selector\"},\"fnOneArg(address)\":{\"details\":\"Function info\",\"params\":{\"arg0\":\"Arg0 Description Selector: c4921133\"}},\"fnOneArgSameLine(uint64)\":{\"params\":{\"arg0\":\"Arg0 Description Selector: b9904a86\"}},\"fnSameArgs(uint64,uint64)\":{\"params\":{\"arg0\":\"Arg0 Description\",\"arg1\":\"Arg1 Description Selector: d6b423d9\"}},\"fnTwoArgs(address,uint256)\":{\"params\":{\"arg0\":\"Arg0 Description\",\"arg1\":\"Arg1 Description Selector: 67ea837e\"}},\"fnTwoArgsSameLine(uint64,bytes32)\":{\"params\":{\"arg0\":\"Arg0 Description\",\"arg1\":\"Arg1 Description Selector: 28f0c44e\"}},\"fnTwoArgsSameLineExternalSplit(uint64,bytes32)\":{\"params\":{\"arg0\":\"Arg0 Description\",\"arg1\":\"Arg1 Description Selector: 06f0c1ce\"}}},\"title\":\"Solidity test file with incorrectly defined selectors\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"SolidityTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xa324f6a00c0cdfc929fb9388322c34ed45da9044c1676f2f9cec535325190c50\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://ef238ac8bee9ebecb42e03e1c4f2be0a14dd8c8f55a8daeb0a17f338b3216fb6\",\"dweb:/ipfs/QmcMkxDeMMiB69SiYATADFq8Z8bGg26C1yoRQ1xFhAEbcz\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/// @title Solidity test file with incorrectly defined selectors\ninterface SolidityTest {\n /// A custom type\n struct CustomArg0 {\n uint8 p0;\n bytes[] p1;\n }\n\n /// A custom type\n struct CustomArg1 {\n address[] p0;\n uint256[] p1;\n bytes[] p2;\n }\n\n /// @dev Function without params and no selector\n function fnNoArgs() external;\n\n /// @dev Function info\n ///\n /// @param arg0 Arg0 Description\n /// Selector: c4921133\n function fnOneArg(address arg0) external;\n\n /// @param arg0 Arg0 Description\n /// @param arg1 Arg1 Description\n /// Selector: 67ea837e\n function fnTwoArgs(address arg0, uint256 arg1) external;\n\n /// @param arg0 Arg0 Description\n /// @param arg1 Arg1 Description\n /// Selector: d6b423d9\n function fnSameArgs(uint64 arg0, uint64 arg1) external;\n\n /// @param arg0 Arg0 Description\n /// Selector: b9904a86\n function fnOneArgSameLine(uint64 arg0) external;\n\n /// @param arg0 Arg0 Description\n /// @param arg1 Arg1 Description\n /// Selector: 28f0c44e\n function fnTwoArgsSameLine(uint64 arg0, bytes32 arg1) external;\n\n /// @param arg0 Arg0 Description\n /// @param arg1 Arg1 Description\n /// Selector: 06f0c1ce\n function fnTwoArgsSameLineExternalSplit(uint64 arg0, bytes32 arg1) external;\n\n /// @param arg0 Arg0 Description\n /// @param arg1 Arg1 Description\n /// @param arg2 Arg2 Description\n /// Selector: 18001a4e\n function fnMemoryArrayArgs(\n address[] memory arg0,\n uint256[] memory arg1,\n bytes[] memory arg2\n ) external;\n\n /// @param arg0 Arg0 Description\n /// @param arg1 Arg1 Description\n /// @param arg2 Arg2 Description\n /// Selector: d8af1a4e\n function fnCustomArgs(\n CustomArg0 memory arg0,\n bytes[] memory arg1,\n uint64 arg2\n ) external;\n\n /// @param arg0 Arg0 Description\n /// @param arg1 Arg1 Description\n /// @param arg2 Arg2 Description\n /// @param arg3 Arg3 Description\n /// Selector: 550c1a4e\n function fnCustomArgsMultiple(\n CustomArg0 memory arg0,\n CustomArg1 memory arg1,\n bytes[] memory arg2,\n uint64 arg3\n ) external;\n}\n" +} diff --git a/tests/contracts/compiled/StakingAttacker.json b/tests/contracts/compiled/StakingAttacker.json new file mode 100644 index 0000000000..91d2f58e1d --- /dev/null +++ b/tests/contracts/compiled/StakingAttacker.json @@ -0,0 +1,4335 @@ +{ + "byteCode": "0x608060405273f24ff3a9cf04c71dbc94d0b566f7a27b94566cac6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610800600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100a757600080fd5b5061041a806100b76000396000f3fe6080604052600436106100345760003560e01c80634cf088d9146100395780638bed00da14610064578063d4b839921461006e575b600080fd5b34801561004557600080fd5b5061004e610099565b60405161005b9190610251565b60405180910390f35b61006c6100bf565b005b34801561007a57600080fd5b506100836101ae565b604051610090919061028d565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663829f5ee360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346001806040518563ffffffff1660e01b815260040161014194939291906102fc565b600060405180830381600087803b15801561015b57600080fd5b505af115801561016f573d6000803e3d6000fd5b505050506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a5906103c4565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061021761021261020d846101d2565b6101f2565b6101d2565b9050919050565b6000610229826101fc565b9050919050565b600061023b8261021e565b9050919050565b61024b81610230565b82525050565b60006020820190506102666000830184610242565b92915050565b6000610277826101d2565b9050919050565b6102878161026c565b82525050565b60006020820190506102a2600083018461027e565b92915050565b6000819050919050565b6102bb816102a8565b82525050565b6000819050919050565b60006102e66102e16102dc846102c1565b6101f2565b6102a8565b9050919050565b6102f6816102cb565b82525050565b6000608082019050610311600083018761027e565b61031e60208301866102b2565b61032b60408301856102ed565b61033860608301846102ed565b95945050505050565b600082825260208201905092915050565b7f427920726576657274696e672074686973207472616e73616374696f6e2c207760008201527f652072657475726e207468652065746820746f207468652063616c6c65720000602082015250565b60006103ae603e83610341565b91506103b982610352565b604082019050919050565b600060208201905081810360008301526103dd816103a1565b905091905056fea2646970667358221220d86163a86199df46f1219e46c4d8dc4c00529f3dbe7cfc299a1d2778d62f9b5564736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [], + "name": "score_a_free_delegation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "staking", + "outputs": [ + { + "internalType": "contract ParachainStaking", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "target", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":138:969 contract StakingAttacker {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":271:313 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n 0xf24ff3a9cf04c71dbc94d0b566f7a27b94566cac\n /* \"main.sol\":247:313 address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":450:492 0x0000000000000000000000000000000000000800 */\n 0x0800\n /* \"main.sol\":391:493 ParachainStaking public staking =... */\n 0x01\n exp(0x0100, 0x00)\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":138:969 contract StakingAttacker {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":138:969 contract StakingAttacker {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x4cf088d9\n eq\n tag_2\n jumpi\n dup1\n 0x8bed00da\n eq\n tag_3\n jumpi\n dup1\n 0xd4b83992\n eq\n tag_4\n jumpi\n tag_1:\n 0x00\n dup1\n revert\n /* \"main.sol\":391:493 ParachainStaking public staking =... */\n tag_2:\n callvalue\n dup1\n iszero\n tag_5\n jumpi\n 0x00\n dup1\n revert\n tag_5:\n pop\n tag_6\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":683:967 function score_a_free_delegation() public payable {... */\n tag_3:\n tag_10\n tag_11\n jump\t// in\n tag_10:\n stop\n /* \"main.sol\":247:313 address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n tag_4:\n callvalue\n dup1\n iszero\n tag_12\n jumpi\n 0x00\n dup1\n revert\n tag_12:\n pop\n tag_13\n tag_14\n jump\t// in\n tag_13:\n mload(0x40)\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":391:493 ParachainStaking public staking =... */\n tag_7:\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":683:967 function score_a_free_delegation() public payable {... */\n tag_11:\n /* \"main.sol\":815:822 staking */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":815:831 staking.delegate */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x829f5ee3\n /* \"main.sol\":832:838 target */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":840:849 msg.value */\n callvalue\n /* \"main.sol\":851:852 1 */\n 0x01\n /* \"main.sol\":854:855 1 */\n dup1\n /* \"main.sol\":815:856 staking.delegate(target, msg.value, 1, 1) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_18\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_20\n jumpi\n 0x00\n dup1\n revert\n tag_20:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_22\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_22:\n pop\n pop\n pop\n pop\n /* \"main.sol\":866:960 revert(... */\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_23\n swap1\n tag_24\n jump\t// in\n tag_23:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":247:313 address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n tag_14:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"#utility.yul\":7:133 */\n tag_25:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":84:126 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":77:82 */\n dup3\n /* \"#utility.yul\":73:127 */\n and\n /* \"#utility.yul\":62:127 */\n swap1\n pop\n /* \"#utility.yul\":7:133 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":139:199 */\n tag_26:\n /* \"#utility.yul\":167:170 */\n 0x00\n /* \"#utility.yul\":188:193 */\n dup2\n /* \"#utility.yul\":181:193 */\n swap1\n pop\n /* \"#utility.yul\":139:199 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":205:347 */\n tag_27:\n /* \"#utility.yul\":255:264 */\n 0x00\n /* \"#utility.yul\":288:341 */\n tag_45\n /* \"#utility.yul\":306:340 */\n tag_46\n /* \"#utility.yul\":315:339 */\n tag_47\n /* \"#utility.yul\":333:338 */\n dup5\n /* \"#utility.yul\":315:339 */\n tag_25\n jump\t// in\n tag_47:\n /* \"#utility.yul\":306:340 */\n tag_26\n jump\t// in\n tag_46:\n /* \"#utility.yul\":288:341 */\n tag_25\n jump\t// in\n tag_45:\n /* \"#utility.yul\":275:341 */\n swap1\n pop\n /* \"#utility.yul\":205:347 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":353:479 */\n tag_28:\n /* \"#utility.yul\":403:412 */\n 0x00\n /* \"#utility.yul\":436:473 */\n tag_49\n /* \"#utility.yul\":467:472 */\n dup3\n /* \"#utility.yul\":436:473 */\n tag_27\n jump\t// in\n tag_49:\n /* \"#utility.yul\":423:473 */\n swap1\n pop\n /* \"#utility.yul\":353:479 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":485:635 */\n tag_29:\n /* \"#utility.yul\":559:568 */\n 0x00\n /* \"#utility.yul\":592:629 */\n tag_51\n /* \"#utility.yul\":623:628 */\n dup3\n /* \"#utility.yul\":592:629 */\n tag_28\n jump\t// in\n tag_51:\n /* \"#utility.yul\":579:629 */\n swap1\n pop\n /* \"#utility.yul\":485:635 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":641:820 */\n tag_30:\n /* \"#utility.yul\":752:813 */\n tag_53\n /* \"#utility.yul\":807:812 */\n dup2\n /* \"#utility.yul\":752:813 */\n tag_29\n jump\t// in\n tag_53:\n /* \"#utility.yul\":747:750 */\n dup3\n /* \"#utility.yul\":740:814 */\n mstore\n /* \"#utility.yul\":641:820 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":826:1096 */\n tag_9:\n /* \"#utility.yul\":943:947 */\n 0x00\n /* \"#utility.yul\":981:983 */\n 0x20\n /* \"#utility.yul\":970:979 */\n dup3\n /* \"#utility.yul\":966:984 */\n add\n /* \"#utility.yul\":958:984 */\n swap1\n pop\n /* \"#utility.yul\":994:1089 */\n tag_55\n /* \"#utility.yul\":1086:1087 */\n 0x00\n /* \"#utility.yul\":1075:1084 */\n dup4\n /* \"#utility.yul\":1071:1088 */\n add\n /* \"#utility.yul\":1062:1068 */\n dup5\n /* \"#utility.yul\":994:1089 */\n tag_30\n jump\t// in\n tag_55:\n /* \"#utility.yul\":826:1096 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1102:1198 */\n tag_31:\n /* \"#utility.yul\":1139:1146 */\n 0x00\n /* \"#utility.yul\":1168:1192 */\n tag_57\n /* \"#utility.yul\":1186:1191 */\n dup3\n /* \"#utility.yul\":1168:1192 */\n tag_25\n jump\t// in\n tag_57:\n /* \"#utility.yul\":1157:1192 */\n swap1\n pop\n /* \"#utility.yul\":1102:1198 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1204:1322 */\n tag_32:\n /* \"#utility.yul\":1291:1315 */\n tag_59\n /* \"#utility.yul\":1309:1314 */\n dup2\n /* \"#utility.yul\":1291:1315 */\n tag_31\n jump\t// in\n tag_59:\n /* \"#utility.yul\":1286:1289 */\n dup3\n /* \"#utility.yul\":1279:1316 */\n mstore\n /* \"#utility.yul\":1204:1322 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1328:1550 */\n tag_16:\n /* \"#utility.yul\":1421:1425 */\n 0x00\n /* \"#utility.yul\":1459:1461 */\n 0x20\n /* \"#utility.yul\":1448:1457 */\n dup3\n /* \"#utility.yul\":1444:1462 */\n add\n /* \"#utility.yul\":1436:1462 */\n swap1\n pop\n /* \"#utility.yul\":1472:1543 */\n tag_61\n /* \"#utility.yul\":1540:1541 */\n 0x00\n /* \"#utility.yul\":1529:1538 */\n dup4\n /* \"#utility.yul\":1525:1542 */\n add\n /* \"#utility.yul\":1516:1522 */\n dup5\n /* \"#utility.yul\":1472:1543 */\n tag_32\n jump\t// in\n tag_61:\n /* \"#utility.yul\":1328:1550 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1556:1633 */\n tag_33:\n /* \"#utility.yul\":1593:1600 */\n 0x00\n /* \"#utility.yul\":1622:1627 */\n dup2\n /* \"#utility.yul\":1611:1627 */\n swap1\n pop\n /* \"#utility.yul\":1556:1633 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1639:1757 */\n tag_34:\n /* \"#utility.yul\":1726:1750 */\n tag_64\n /* \"#utility.yul\":1744:1749 */\n dup2\n /* \"#utility.yul\":1726:1750 */\n tag_33\n jump\t// in\n tag_64:\n /* \"#utility.yul\":1721:1724 */\n dup3\n /* \"#utility.yul\":1714:1751 */\n mstore\n /* \"#utility.yul\":1639:1757 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1763:1848 */\n tag_35:\n /* \"#utility.yul\":1808:1815 */\n 0x00\n /* \"#utility.yul\":1837:1842 */\n dup2\n /* \"#utility.yul\":1826:1842 */\n swap1\n pop\n /* \"#utility.yul\":1763:1848 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1854:2012 */\n tag_36:\n /* \"#utility.yul\":1912:1921 */\n 0x00\n /* \"#utility.yul\":1945:2006 */\n tag_67\n /* \"#utility.yul\":1963:2005 */\n tag_68\n /* \"#utility.yul\":1972:2004 */\n tag_69\n /* \"#utility.yul\":1998:2003 */\n dup5\n /* \"#utility.yul\":1972:2004 */\n tag_35\n jump\t// in\n tag_69:\n /* \"#utility.yul\":1963:2005 */\n tag_26\n jump\t// in\n tag_68:\n /* \"#utility.yul\":1945:2006 */\n tag_33\n jump\t// in\n tag_67:\n /* \"#utility.yul\":1932:2006 */\n swap1\n pop\n /* \"#utility.yul\":1854:2012 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2018:2165 */\n tag_37:\n /* \"#utility.yul\":2113:2158 */\n tag_71\n /* \"#utility.yul\":2152:2157 */\n dup2\n /* \"#utility.yul\":2113:2158 */\n tag_36\n jump\t// in\n tag_71:\n /* \"#utility.yul\":2108:2111 */\n dup3\n /* \"#utility.yul\":2101:2159 */\n mstore\n /* \"#utility.yul\":2018:2165 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2171:2756 */\n tag_19:\n /* \"#utility.yul\":2364:2368 */\n 0x00\n /* \"#utility.yul\":2402:2405 */\n 0x80\n /* \"#utility.yul\":2391:2400 */\n dup3\n /* \"#utility.yul\":2387:2406 */\n add\n /* \"#utility.yul\":2379:2406 */\n swap1\n pop\n /* \"#utility.yul\":2416:2487 */\n tag_73\n /* \"#utility.yul\":2484:2485 */\n 0x00\n /* \"#utility.yul\":2473:2482 */\n dup4\n /* \"#utility.yul\":2469:2486 */\n add\n /* \"#utility.yul\":2460:2466 */\n dup8\n /* \"#utility.yul\":2416:2487 */\n tag_32\n jump\t// in\n tag_73:\n /* \"#utility.yul\":2497:2569 */\n tag_74\n /* \"#utility.yul\":2565:2567 */\n 0x20\n /* \"#utility.yul\":2554:2563 */\n dup4\n /* \"#utility.yul\":2550:2568 */\n add\n /* \"#utility.yul\":2541:2547 */\n dup7\n /* \"#utility.yul\":2497:2569 */\n tag_34\n jump\t// in\n tag_74:\n /* \"#utility.yul\":2579:2659 */\n tag_75\n /* \"#utility.yul\":2655:2657 */\n 0x40\n /* \"#utility.yul\":2644:2653 */\n dup4\n /* \"#utility.yul\":2640:2658 */\n add\n /* \"#utility.yul\":2631:2637 */\n dup6\n /* \"#utility.yul\":2579:2659 */\n tag_37\n jump\t// in\n tag_75:\n /* \"#utility.yul\":2669:2749 */\n tag_76\n /* \"#utility.yul\":2745:2747 */\n 0x60\n /* \"#utility.yul\":2734:2743 */\n dup4\n /* \"#utility.yul\":2730:2748 */\n add\n /* \"#utility.yul\":2721:2727 */\n dup5\n /* \"#utility.yul\":2669:2749 */\n tag_37\n jump\t// in\n tag_76:\n /* \"#utility.yul\":2171:2756 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2762:2931 */\n tag_38:\n /* \"#utility.yul\":2846:2857 */\n 0x00\n /* \"#utility.yul\":2880:2886 */\n dup3\n /* \"#utility.yul\":2875:2878 */\n dup3\n /* \"#utility.yul\":2868:2887 */\n mstore\n /* \"#utility.yul\":2920:2924 */\n 0x20\n /* \"#utility.yul\":2915:2918 */\n dup3\n /* \"#utility.yul\":2911:2925 */\n add\n /* \"#utility.yul\":2896:2925 */\n swap1\n pop\n /* \"#utility.yul\":2762:2931 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2937:3186 */\n tag_39:\n /* \"#utility.yul\":3077:3111 */\n 0x427920726576657274696e672074686973207472616e73616374696f6e2c2077\n /* \"#utility.yul\":3073:3074 */\n 0x00\n /* \"#utility.yul\":3065:3071 */\n dup3\n /* \"#utility.yul\":3061:3075 */\n add\n /* \"#utility.yul\":3054:3112 */\n mstore\n /* \"#utility.yul\":3146:3178 */\n 0x652072657475726e207468652065746820746f207468652063616c6c65720000\n /* \"#utility.yul\":3141:3143 */\n 0x20\n /* \"#utility.yul\":3133:3139 */\n dup3\n /* \"#utility.yul\":3129:3144 */\n add\n /* \"#utility.yul\":3122:3179 */\n mstore\n /* \"#utility.yul\":2937:3186 */\n pop\n jump\t// out\n /* \"#utility.yul\":3192:3558 */\n tag_40:\n /* \"#utility.yul\":3334:3337 */\n 0x00\n /* \"#utility.yul\":3355:3422 */\n tag_80\n /* \"#utility.yul\":3419:3421 */\n 0x3e\n /* \"#utility.yul\":3414:3417 */\n dup4\n /* \"#utility.yul\":3355:3422 */\n tag_38\n jump\t// in\n tag_80:\n /* \"#utility.yul\":3348:3422 */\n swap2\n pop\n /* \"#utility.yul\":3431:3524 */\n tag_81\n /* \"#utility.yul\":3520:3523 */\n dup3\n /* \"#utility.yul\":3431:3524 */\n tag_39\n jump\t// in\n tag_81:\n /* \"#utility.yul\":3549:3551 */\n 0x40\n /* \"#utility.yul\":3544:3547 */\n dup3\n /* \"#utility.yul\":3540:3552 */\n add\n /* \"#utility.yul\":3533:3552 */\n swap1\n pop\n /* \"#utility.yul\":3192:3558 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3564:3983 */\n tag_24:\n /* \"#utility.yul\":3730:3734 */\n 0x00\n /* \"#utility.yul\":3768:3770 */\n 0x20\n /* \"#utility.yul\":3757:3766 */\n dup3\n /* \"#utility.yul\":3753:3771 */\n add\n /* \"#utility.yul\":3745:3771 */\n swap1\n pop\n /* \"#utility.yul\":3817:3826 */\n dup2\n /* \"#utility.yul\":3811:3815 */\n dup2\n /* \"#utility.yul\":3807:3827 */\n sub\n /* \"#utility.yul\":3803:3804 */\n 0x00\n /* \"#utility.yul\":3792:3801 */\n dup4\n /* \"#utility.yul\":3788:3805 */\n add\n /* \"#utility.yul\":3781:3828 */\n mstore\n /* \"#utility.yul\":3845:3976 */\n tag_83\n /* \"#utility.yul\":3971:3975 */\n dup2\n /* \"#utility.yul\":3845:3976 */\n tag_40\n jump\t// in\n tag_83:\n /* \"#utility.yul\":3837:3976 */\n swap1\n pop\n /* \"#utility.yul\":3564:3983 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220d86163a86199df46f1219e46c4d8dc4c00529f3dbe7cfc299a1d2778d62f9b5564736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405273f24ff3a9cf04c71dbc94d0b566f7a27b94566cac6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610800600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100a757600080fd5b5061041a806100b76000396000f3fe6080604052600436106100345760003560e01c80634cf088d9146100395780638bed00da14610064578063d4b839921461006e575b600080fd5b34801561004557600080fd5b5061004e610099565b60405161005b9190610251565b60405180910390f35b61006c6100bf565b005b34801561007a57600080fd5b506100836101ae565b604051610090919061028d565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663829f5ee360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346001806040518563ffffffff1660e01b815260040161014194939291906102fc565b600060405180830381600087803b15801561015b57600080fd5b505af115801561016f573d6000803e3d6000fd5b505050506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a5906103c4565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061021761021261020d846101d2565b6101f2565b6101d2565b9050919050565b6000610229826101fc565b9050919050565b600061023b8261021e565b9050919050565b61024b81610230565b82525050565b60006020820190506102666000830184610242565b92915050565b6000610277826101d2565b9050919050565b6102878161026c565b82525050565b60006020820190506102a2600083018461027e565b92915050565b6000819050919050565b6102bb816102a8565b82525050565b6000819050919050565b60006102e66102e16102dc846102c1565b6101f2565b6102a8565b9050919050565b6102f6816102cb565b82525050565b6000608082019050610311600083018761027e565b61031e60208301866102b2565b61032b60408301856102ed565b61033860608301846102ed565b95945050505050565b600082825260208201905092915050565b7f427920726576657274696e672074686973207472616e73616374696f6e2c207760008201527f652072657475726e207468652065746820746f207468652063616c6c65720000602082015250565b60006103ae603e83610341565b91506103b982610352565b604082019050919050565b600060208201905081810360008301526103dd816103a1565b905091905056fea2646970667358221220d86163a86199df46f1219e46c4d8dc4c00529f3dbe7cfc299a1d2778d62f9b5564736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xF24FF3A9CF04C71DBC94D0B566F7A27B94566CAC PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x800 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x41A DUP1 PUSH2 0xB7 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x8BED00DA EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xD4B83992 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E PUSH2 0x99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x251 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0xBF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x83 PUSH2 0x1AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x90 SWAP2 SWAP1 PUSH2 0x28D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x829F5EE3 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLVALUE PUSH1 0x1 DUP1 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x141 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A5 SWAP1 PUSH2 0x3C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x217 PUSH2 0x212 PUSH2 0x20D DUP5 PUSH2 0x1D2 JUMP JUMPDEST PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x1D2 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x229 DUP3 PUSH2 0x1FC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23B DUP3 PUSH2 0x21E JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x24B DUP2 PUSH2 0x230 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x266 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x242 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x277 DUP3 PUSH2 0x1D2 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x287 DUP2 PUSH2 0x26C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2A2 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x27E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2BB DUP2 PUSH2 0x2A8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E6 PUSH2 0x2E1 PUSH2 0x2DC DUP5 PUSH2 0x2C1 JUMP JUMPDEST PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2A8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2F6 DUP2 PUSH2 0x2CB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x311 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x27E JUMP JUMPDEST PUSH2 0x31E PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x2B2 JUMP JUMPDEST PUSH2 0x32B PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2ED JUMP JUMPDEST PUSH2 0x338 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2ED JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x427920726576657274696E672074686973207472616E73616374696F6E2C2077 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x652072657475726E207468652065746820746F207468652063616C6C65720000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AE PUSH1 0x3E DUP4 PUSH2 0x341 JUMP JUMPDEST SWAP2 POP PUSH2 0x3B9 DUP3 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3DD DUP2 PUSH2 0x3A1 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD8 PUSH2 0x63A8 PUSH2 0x99DF CHAINID CALL 0x21 SWAP15 CHAINID 0xC4 0xD8 0xDC 0x4C STOP MSTORE SWAP16 RETURNDATASIZE 0xBE PUSH29 0xFC299A1D2778D62F9B5564736F6C634300080B00330000000000000000 ", + "sourceMap": "138:831:0:-:0;;;271:42;247:66;;;;;;;;;;;;;;;;;;;;450:42;391:102;;;;;;;;;;;;;;;;;;;;138:831;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@score_a_free_delegation_32": { + "entryPoint": 191, + "id": 32, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@staking_13": { + "entryPoint": 153, + "id": 13, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@target_6": { + "entryPoint": 430, + "id": 6, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_encode_t_address_to_t_address_fromStack": { + "entryPoint": 638, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_contract$_ParachainStaking_$340_to_t_address_fromStack": { + "entryPoint": 578, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_rational_1_by_1_to_t_uint256_fromStack": { + "entryPoint": 749, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack": { + "entryPoint": 929, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 690, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": 653, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_address_t_uint256_t_rational_1_by_1_t_rational_1_by_1__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed": { + "entryPoint": 764, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_contract$_ParachainStaking_$340__to_t_address__fromStack_reversed": { + "entryPoint": 593, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255__to_t_string_memory_ptr__fromStack_reversed": { + "entryPoint": 964, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "array_storeLengthForEncoding_t_string_memory_ptr_fromStack": { + "entryPoint": 833, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 620, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_rational_1_by_1": { + "entryPoint": 705, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 466, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 680, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_contract$_ParachainStaking_$340_to_t_address": { + "entryPoint": 560, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_rational_1_by_1_to_t_uint256": { + "entryPoint": 715, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_uint160_to_t_address": { + "entryPoint": 542, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "convert_t_uint160_to_t_uint160": { + "entryPoint": 508, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "identity": { + "entryPoint": 498, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255": { + "entryPoint": 850, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:3986:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:81:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:65:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "77:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "84:42:2", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "73:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "73:54:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:2", + "type": "" + } + ], + "src": "7:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "171:28:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "181:12:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "188:5:2" + }, + "variableNames": [ + { + "name": "ret", + "nodeType": "YulIdentifier", + "src": "181:3:2" + } + ] + } + ] + }, + "name": "identity", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "157:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nodeType": "YulTypedName", + "src": "167:3:2", + "type": "" + } + ], + "src": "139:60:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "265:82:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "275:66:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "333:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "315:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "315:24:2" + } + ], + "functionName": { + "name": "identity", + "nodeType": "YulIdentifier", + "src": "306:8:2" + }, + "nodeType": "YulFunctionCall", + "src": "306:34:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "288:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "288:53:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "275:9:2" + } + ] + } + ] + }, + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "245:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "255:9:2", + "type": "" + } + ], + "src": "205:142:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "413:66:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "423:50:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "467:5:2" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulIdentifier", + "src": "436:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "436:37:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "423:9:2" + } + ] + } + ] + }, + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "393:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "403:9:2", + "type": "" + } + ], + "src": "353:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "569:66:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "579:50:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "623:5:2" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulIdentifier", + "src": "592:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "592:37:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "579:9:2" + } + ] + } + ] + }, + "name": "convert_t_contract$_ParachainStaking_$340_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "549:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "559:9:2", + "type": "" + } + ], + "src": "485:150:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "730:90:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "747:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "807:5:2" + } + ], + "functionName": { + "name": "convert_t_contract$_ParachainStaking_$340_to_t_address", + "nodeType": "YulIdentifier", + "src": "752:54:2" + }, + "nodeType": "YulFunctionCall", + "src": "752:61:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "740:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "740:74:2" + }, + "nodeType": "YulExpressionStatement", + "src": "740:74:2" + } + ] + }, + "name": "abi_encode_t_contract$_ParachainStaking_$340_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "718:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "725:3:2", + "type": "" + } + ], + "src": "641:179:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "948:148:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "958:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "970:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "981:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "966:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "966:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "958:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1062:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1075:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1086:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1071:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1071:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_contract$_ParachainStaking_$340_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "994:67:2" + }, + "nodeType": "YulFunctionCall", + "src": "994:95:2" + }, + "nodeType": "YulExpressionStatement", + "src": "994:95:2" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_ParachainStaking_$340__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "920:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "932:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "943:4:2", + "type": "" + } + ], + "src": "826:270:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1147:51:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1157:35:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1186:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "1168:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1168:24:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1157:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1129:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1139:7:2", + "type": "" + } + ], + "src": "1102:96:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1269:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1286:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1309:5:2" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "1291:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1291:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1279:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1279:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1279:37:2" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1257:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1264:3:2", + "type": "" + } + ], + "src": "1204:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1426:124:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1436:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1448:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1459:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1444:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1444:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1436:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1516:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1529:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1540:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1525:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1525:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "1472:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "1472:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1472:71:2" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1398:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1410:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1421:4:2", + "type": "" + } + ], + "src": "1328:222:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1601:32:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1611:16:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1622:5:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1611:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1583:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1593:7:2", + "type": "" + } + ], + "src": "1556:77:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1704:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1721:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1744:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1726:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1726:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1714:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1714:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1714:37:2" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1692:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1699:3:2", + "type": "" + } + ], + "src": "1639:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1816:32:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1826:16:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1837:5:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1826:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_rational_1_by_1", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1798:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1808:7:2", + "type": "" + } + ], + "src": "1763:85:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1922:90:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1932:74:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1998:5:2" + } + ], + "functionName": { + "name": "cleanup_t_rational_1_by_1", + "nodeType": "YulIdentifier", + "src": "1972:25:2" + }, + "nodeType": "YulFunctionCall", + "src": "1972:32:2" + } + ], + "functionName": { + "name": "identity", + "nodeType": "YulIdentifier", + "src": "1963:8:2" + }, + "nodeType": "YulFunctionCall", + "src": "1963:42:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1945:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1945:61:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "1932:9:2" + } + ] + } + ] + }, + "name": "convert_t_rational_1_by_1_to_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1902:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "1912:9:2", + "type": "" + } + ], + "src": "1854:158:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2091:74:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2108:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2152:5:2" + } + ], + "functionName": { + "name": "convert_t_rational_1_by_1_to_t_uint256", + "nodeType": "YulIdentifier", + "src": "2113:38:2" + }, + "nodeType": "YulFunctionCall", + "src": "2113:45:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2101:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "2101:58:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2101:58:2" + } + ] + }, + "name": "abi_encode_t_rational_1_by_1_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2079:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2086:3:2", + "type": "" + } + ], + "src": "2018:147:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2369:387:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2379:27:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2391:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2402:3:2", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2387:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2387:19:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "2379:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2460:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2473:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2484:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2469:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2469:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "2416:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "2416:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2416:71:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "2541:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2554:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2565:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2550:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2550:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "2497:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "2497:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2497:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "2631:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2644:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2655:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2640:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2640:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_rational_1_by_1_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "2579:51:2" + }, + "nodeType": "YulFunctionCall", + "src": "2579:80:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2579:80:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "2721:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2734:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2745:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2730:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2730:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_rational_1_by_1_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "2669:51:2" + }, + "nodeType": "YulFunctionCall", + "src": "2669:80:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2669:80:2" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256_t_rational_1_by_1_t_rational_1_by_1__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2317:9:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "2329:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "2337:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "2345:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2353:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "2364:4:2", + "type": "" + } + ], + "src": "2171:585:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2858:73:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2875:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2880:6:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2868:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "2868:19:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2868:19:2" + }, + { + "nodeType": "YulAssignment", + "src": "2896:29:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "2915:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2920:4:2", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2911:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2911:14:2" + }, + "variableNames": [ + { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "2896:11:2" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "2830:3:2", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2835:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "2846:11:2", + "type": "" + } + ], + "src": "2762:169:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3043:143:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3065:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3073:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3061:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3061:14:2" + }, + { + "hexValue": "427920726576657274696e672074686973207472616e73616374696f6e2c2077", + "kind": "string", + "nodeType": "YulLiteral", + "src": "3077:34:2", + "type": "", + "value": "By reverting this transaction, w" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3054:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3054:58:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3054:58:2" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3133:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3141:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3129:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3129:15:2" + }, + { + "hexValue": "652072657475726e207468652065746820746f207468652063616c6c6572", + "kind": "string", + "nodeType": "YulLiteral", + "src": "3146:32:2", + "type": "", + "value": "e return the eth to the caller" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3122:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3122:57:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3122:57:2" + } + ] + }, + "name": "store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "3035:6:2", + "type": "" + } + ], + "src": "2937:249:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3338:220:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3348:74:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3414:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3419:2:2", + "type": "", + "value": "62" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "3355:58:2" + }, + "nodeType": "YulFunctionCall", + "src": "3355:67:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3348:3:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3520:3:2" + } + ], + "functionName": { + "name": "store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255", + "nodeType": "YulIdentifier", + "src": "3431:88:2" + }, + "nodeType": "YulFunctionCall", + "src": "3431:93:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3431:93:2" + }, + { + "nodeType": "YulAssignment", + "src": "3533:19:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3544:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3549:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3540:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3540:12:2" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3533:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "3326:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3334:3:2", + "type": "" + } + ], + "src": "3192:366:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3735:248:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3745:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3757:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3768:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3753:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3753:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3745:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3792:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3803:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3788:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3788:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3811:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3817:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3807:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3807:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3781:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "3781:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "3781:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "3837:139:2", + "value": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3971:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "3845:124:2" + }, + "nodeType": "YulFunctionCall", + "src": "3845:131:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "3837:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "3715:9:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "3730:4:2", + "type": "" + } + ], + "src": "3564:419:2" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_ParachainStaking_$340_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_ParachainStaking_$340_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_ParachainStaking_$340_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_ParachainStaking_$340__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_ParachainStaking_$340_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function cleanup_t_rational_1_by_1(value) -> cleaned {\n cleaned := value\n }\n\n function convert_t_rational_1_by_1_to_t_uint256(value) -> converted {\n converted := cleanup_t_uint256(identity(cleanup_t_rational_1_by_1(value)))\n }\n\n function abi_encode_t_rational_1_by_1_to_t_uint256_fromStack(value, pos) {\n mstore(pos, convert_t_rational_1_by_1_to_t_uint256(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_rational_1_by_1_t_rational_1_by_1__to_t_address_t_uint256_t_uint256_t_uint256__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_rational_1_by_1_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_rational_1_by_1_to_t_uint256_fromStack(value3, add(headStart, 96))\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255(memPtr) {\n\n mstore(add(memPtr, 0), \"By reverting this transaction, w\")\n\n mstore(add(memPtr, 32), \"e return the eth to the caller\")\n\n }\n\n function abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 62)\n store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n}\n", + "id": 2, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "6080604052600436106100345760003560e01c80634cf088d9146100395780638bed00da14610064578063d4b839921461006e575b600080fd5b34801561004557600080fd5b5061004e610099565b60405161005b9190610251565b60405180910390f35b61006c6100bf565b005b34801561007a57600080fd5b506100836101ae565b604051610090919061028d565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663829f5ee360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346001806040518563ffffffff1660e01b815260040161014194939291906102fc565b600060405180830381600087803b15801561015b57600080fd5b505af115801561016f573d6000803e3d6000fd5b505050506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a5906103c4565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061021761021261020d846101d2565b6101f2565b6101d2565b9050919050565b6000610229826101fc565b9050919050565b600061023b8261021e565b9050919050565b61024b81610230565b82525050565b60006020820190506102666000830184610242565b92915050565b6000610277826101d2565b9050919050565b6102878161026c565b82525050565b60006020820190506102a2600083018461027e565b92915050565b6000819050919050565b6102bb816102a8565b82525050565b6000819050919050565b60006102e66102e16102dc846102c1565b6101f2565b6102a8565b9050919050565b6102f6816102cb565b82525050565b6000608082019050610311600083018761027e565b61031e60208301866102b2565b61032b60408301856102ed565b61033860608301846102ed565b95945050505050565b600082825260208201905092915050565b7f427920726576657274696e672074686973207472616e73616374696f6e2c207760008201527f652072657475726e207468652065746820746f207468652063616c6c65720000602082015250565b60006103ae603e83610341565b91506103b982610352565b604082019050919050565b600060208201905081810360008301526103dd816103a1565b905091905056fea2646970667358221220d86163a86199df46f1219e46c4d8dc4c00529f3dbe7cfc299a1d2778d62f9b5564736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x8BED00DA EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xD4B83992 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E PUSH2 0x99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x251 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0xBF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x83 PUSH2 0x1AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x90 SWAP2 SWAP1 PUSH2 0x28D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x829F5EE3 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLVALUE PUSH1 0x1 DUP1 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x141 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2FC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A5 SWAP1 PUSH2 0x3C4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x217 PUSH2 0x212 PUSH2 0x20D DUP5 PUSH2 0x1D2 JUMP JUMPDEST PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x1D2 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x229 DUP3 PUSH2 0x1FC JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23B DUP3 PUSH2 0x21E JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x24B DUP2 PUSH2 0x230 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x266 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x242 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x277 DUP3 PUSH2 0x1D2 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x287 DUP2 PUSH2 0x26C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2A2 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x27E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2BB DUP2 PUSH2 0x2A8 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2E6 PUSH2 0x2E1 PUSH2 0x2DC DUP5 PUSH2 0x2C1 JUMP JUMPDEST PUSH2 0x1F2 JUMP JUMPDEST PUSH2 0x2A8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2F6 DUP2 PUSH2 0x2CB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x311 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x27E JUMP JUMPDEST PUSH2 0x31E PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x2B2 JUMP JUMPDEST PUSH2 0x32B PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2ED JUMP JUMPDEST PUSH2 0x338 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x2ED JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x427920726576657274696E672074686973207472616E73616374696F6E2C2077 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x652072657475726E207468652065746820746F207468652063616C6C65720000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3AE PUSH1 0x3E DUP4 PUSH2 0x341 JUMP JUMPDEST SWAP2 POP PUSH2 0x3B9 DUP3 PUSH2 0x352 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3DD DUP2 PUSH2 0x3A1 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD8 PUSH2 0x63A8 PUSH2 0x99DF CHAINID CALL 0x21 SWAP15 CHAINID 0xC4 0xD8 0xDC 0x4C STOP MSTORE SWAP16 RETURNDATASIZE 0xBE PUSH29 0xFC299A1D2778D62F9B5564736F6C634300080B00330000000000000000 ", + "sourceMap": "138:831:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;391:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;683:284;;;:::i;:::-;;247:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;391:102;;;;;;;;;;;;;:::o;683:284::-;815:7;;;;;;;;;;;:16;;;832:6;;;;;;;;;;840:9;851:1;854;815:41;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;866:94;;;;;;;;;;:::i;:::-;;;;;;;;247:66;;;;;;;;;;;;:::o;7:126:2:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:60::-;167:3;188:5;181:12;;139:60;;;:::o;205:142::-;255:9;288:53;306:34;315:24;333:5;315:24;:::i;:::-;306:34;:::i;:::-;288:53;:::i;:::-;275:66;;205:142;;;:::o;353:126::-;403:9;436:37;467:5;436:37;:::i;:::-;423:50;;353:126;;;:::o;485:150::-;559:9;592:37;623:5;592:37;:::i;:::-;579:50;;485:150;;;:::o;641:179::-;752:61;807:5;752:61;:::i;:::-;747:3;740:74;641:179;;:::o;826:270::-;943:4;981:2;970:9;966:18;958:26;;994:95;1086:1;1075:9;1071:17;1062:6;994:95;:::i;:::-;826:270;;;;:::o;1102:96::-;1139:7;1168:24;1186:5;1168:24;:::i;:::-;1157:35;;1102:96;;;:::o;1204:118::-;1291:24;1309:5;1291:24;:::i;:::-;1286:3;1279:37;1204:118;;:::o;1328:222::-;1421:4;1459:2;1448:9;1444:18;1436:26;;1472:71;1540:1;1529:9;1525:17;1516:6;1472:71;:::i;:::-;1328:222;;;;:::o;1556:77::-;1593:7;1622:5;1611:16;;1556:77;;;:::o;1639:118::-;1726:24;1744:5;1726:24;:::i;:::-;1721:3;1714:37;1639:118;;:::o;1763:85::-;1808:7;1837:5;1826:16;;1763:85;;;:::o;1854:158::-;1912:9;1945:61;1963:42;1972:32;1998:5;1972:32;:::i;:::-;1963:42;:::i;:::-;1945:61;:::i;:::-;1932:74;;1854:158;;;:::o;2018:147::-;2113:45;2152:5;2113:45;:::i;:::-;2108:3;2101:58;2018:147;;:::o;2171:585::-;2364:4;2402:3;2391:9;2387:19;2379:27;;2416:71;2484:1;2473:9;2469:17;2460:6;2416:71;:::i;:::-;2497:72;2565:2;2554:9;2550:18;2541:6;2497:72;:::i;:::-;2579:80;2655:2;2644:9;2640:18;2631:6;2579:80;:::i;:::-;2669;2745:2;2734:9;2730:18;2721:6;2669:80;:::i;:::-;2171:585;;;;;;;:::o;2762:169::-;2846:11;2880:6;2875:3;2868:19;2920:4;2915:3;2911:14;2896:29;;2762:169;;;;:::o;2937:249::-;3077:34;3073:1;3065:6;3061:14;3054:58;3146:32;3141:2;3133:6;3129:15;3122:57;2937:249;:::o;3192:366::-;3334:3;3355:67;3419:2;3414:3;3355:67;:::i;:::-;3348:74;;3431:93;3520:3;3431:93;:::i;:::-;3549:2;3544:3;3540:12;3533:19;;3192:366;;;:::o;3564:419::-;3730:4;3768:2;3757:9;3753:18;3745:26;;3817:9;3811:4;3807:20;3803:1;3792:9;3788:17;3781:47;3845:131;3971:4;3845:131;:::i;:::-;3837:139;;3564:419;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "210000", + "executionCost": "48785", + "totalCost": "258785" + }, + "external": { + "score_a_free_delegation()": "infinite", + "staking()": "infinite", + "target()": "2533" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 138, "end": 969, "name": "MSTORE", "source": 0 }, + { + "begin": 271, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "F24FF3A9CF04C71DBC94D0B566F7A27B94566CAC" + }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 247, "end": 313, "name": "DUP1", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 247, "end": 313, "name": "EXP", "source": 0 }, + { "begin": 247, "end": 313, "name": "DUP2", "source": 0 }, + { "begin": 247, "end": 313, "name": "SLOAD", "source": 0 }, + { "begin": 247, "end": 313, "name": "DUP2", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 247, "end": 313, "name": "MUL", "source": 0 }, + { "begin": 247, "end": 313, "name": "NOT", "source": 0 }, + { "begin": 247, "end": 313, "name": "AND", "source": 0 }, + { "begin": 247, "end": 313, "name": "SWAP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "DUP4", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 247, "end": 313, "name": "AND", "source": 0 }, + { "begin": 247, "end": 313, "name": "MUL", "source": 0 }, + { "begin": 247, "end": 313, "name": "OR", "source": 0 }, + { "begin": 247, "end": 313, "name": "SWAP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "SSTORE", "source": 0 }, + { "begin": 247, "end": 313, "name": "POP", "source": 0 }, + { + "begin": 450, + "end": 492, + "name": "PUSH", + "source": 0, + "value": "800" + }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 391, "end": 493, "name": "EXP", "source": 0 }, + { "begin": 391, "end": 493, "name": "DUP2", "source": 0 }, + { "begin": 391, "end": 493, "name": "SLOAD", "source": 0 }, + { "begin": 391, "end": 493, "name": "DUP2", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 391, "end": 493, "name": "MUL", "source": 0 }, + { "begin": 391, "end": 493, "name": "NOT", "source": 0 }, + { "begin": 391, "end": 493, "name": "AND", "source": 0 }, + { "begin": 391, "end": 493, "name": "SWAP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "DUP4", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 391, "end": 493, "name": "AND", "source": 0 }, + { "begin": 391, "end": 493, "name": "MUL", "source": 0 }, + { "begin": 391, "end": 493, "name": "OR", "source": 0 }, + { "begin": 391, "end": 493, "name": "SWAP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "SSTORE", "source": 0 }, + { "begin": 391, "end": 493, "name": "POP", "source": 0 }, + { "begin": 138, "end": 969, "name": "CALLVALUE", "source": 0 }, + { "begin": 138, "end": 969, "name": "DUP1", "source": 0 }, + { "begin": 138, "end": 969, "name": "ISZERO", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 138, "end": 969, "name": "JUMPI", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 138, "end": 969, "name": "DUP1", "source": 0 }, + { "begin": 138, "end": 969, "name": "REVERT", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 138, "end": 969, "name": "JUMPDEST", "source": 0 }, + { "begin": 138, "end": 969, "name": "POP", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 138, "end": 969, "name": "DUP1", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 138, "end": 969, "name": "CODECOPY", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 138, "end": 969, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220d86163a86199df46f1219e46c4d8dc4c00529f3dbe7cfc299a1d2778d62f9b5564736f6c634300080b0033", + ".code": [ + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 138, "end": 969, "name": "MSTORE", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 138, "end": 969, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 138, "end": 969, "name": "LT", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 138, "end": 969, "name": "JUMPI", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 138, "end": 969, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 138, "end": 969, "name": "SHR", "source": 0 }, + { "begin": 138, "end": 969, "name": "DUP1", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "4CF088D9" + }, + { "begin": 138, "end": 969, "name": "EQ", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 138, "end": 969, "name": "JUMPI", "source": 0 }, + { "begin": 138, "end": 969, "name": "DUP1", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "8BED00DA" + }, + { "begin": 138, "end": 969, "name": "EQ", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 138, "end": 969, "name": "JUMPI", "source": 0 }, + { "begin": 138, "end": 969, "name": "DUP1", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "D4B83992" + }, + { "begin": 138, "end": 969, "name": "EQ", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 138, "end": 969, "name": "JUMPI", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 138, "end": 969, "name": "JUMPDEST", "source": 0 }, + { + "begin": 138, + "end": 969, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 138, "end": 969, "name": "DUP1", "source": 0 }, + { "begin": 138, "end": 969, "name": "REVERT", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 391, "end": 493, "name": "JUMPDEST", "source": 0 }, + { "begin": 391, "end": 493, "name": "CALLVALUE", "source": 0 }, + { "begin": 391, "end": 493, "name": "DUP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "ISZERO", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 391, "end": 493, "name": "JUMPI", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 391, "end": 493, "name": "DUP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "REVERT", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 391, "end": 493, "name": "JUMPDEST", "source": 0 }, + { "begin": 391, "end": 493, "name": "POP", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 391, + "end": 493, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 391, + "end": 493, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 391, + "end": 493, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 391, "end": 493, "name": "JUMPDEST", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 391, "end": 493, "name": "MLOAD", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 391, "end": 493, "name": "SWAP2", "source": 0 }, + { "begin": 391, "end": 493, "name": "SWAP1", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 391, + "end": 493, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 391, + "end": 493, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 391, "end": 493, "name": "JUMPDEST", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 391, "end": 493, "name": "MLOAD", "source": 0 }, + { "begin": 391, "end": 493, "name": "DUP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "SWAP2", "source": 0 }, + { "begin": 391, "end": 493, "name": "SUB", "source": 0 }, + { "begin": 391, "end": 493, "name": "SWAP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "RETURN", "source": 0 }, + { + "begin": 683, + "end": 967, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 683, "end": 967, "name": "JUMPDEST", "source": 0 }, + { + "begin": 683, + "end": 967, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 683, + "end": 967, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 683, + "end": 967, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 683, + "end": 967, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 683, "end": 967, "name": "JUMPDEST", "source": 0 }, + { "begin": 683, "end": 967, "name": "STOP", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 247, "end": 313, "name": "JUMPDEST", "source": 0 }, + { "begin": 247, "end": 313, "name": "CALLVALUE", "source": 0 }, + { "begin": 247, "end": 313, "name": "DUP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "ISZERO", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 247, "end": 313, "name": "JUMPI", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 247, "end": 313, "name": "DUP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "REVERT", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 247, "end": 313, "name": "JUMPDEST", "source": 0 }, + { "begin": 247, "end": 313, "name": "POP", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 247, + "end": 313, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { + "begin": 247, + "end": 313, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 247, + "end": 313, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 247, "end": 313, "name": "JUMPDEST", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 247, "end": 313, "name": "MLOAD", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 247, "end": 313, "name": "SWAP2", "source": 0 }, + { "begin": 247, "end": 313, "name": "SWAP1", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { + "begin": 247, + "end": 313, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 247, + "end": 313, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 247, "end": 313, "name": "JUMPDEST", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 247, "end": 313, "name": "MLOAD", "source": 0 }, + { "begin": 247, "end": 313, "name": "DUP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "SWAP2", "source": 0 }, + { "begin": 247, "end": 313, "name": "SUB", "source": 0 }, + { "begin": 247, "end": 313, "name": "SWAP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "RETURN", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 391, "end": 493, "name": "JUMPDEST", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 391, "end": 493, "name": "SWAP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "SLOAD", "source": 0 }, + { "begin": 391, "end": 493, "name": "SWAP1", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 391, "end": 493, "name": "EXP", "source": 0 }, + { "begin": 391, "end": 493, "name": "SWAP1", "source": 0 }, + { "begin": 391, "end": 493, "name": "DIV", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 391, "end": 493, "name": "AND", "source": 0 }, + { "begin": 391, "end": 493, "name": "DUP2", "source": 0 }, + { + "begin": 391, + "end": 493, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 683, + "end": 967, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 683, "end": 967, "name": "JUMPDEST", "source": 0 }, + { + "begin": 815, + "end": 822, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 815, + "end": 822, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 815, "end": 822, "name": "SWAP1", "source": 0 }, + { "begin": 815, "end": 822, "name": "SLOAD", "source": 0 }, + { "begin": 815, "end": 822, "name": "SWAP1", "source": 0 }, + { + "begin": 815, + "end": 822, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 815, "end": 822, "name": "EXP", "source": 0 }, + { "begin": 815, "end": 822, "name": "SWAP1", "source": 0 }, + { "begin": 815, "end": 822, "name": "DIV", "source": 0 }, + { + "begin": 815, + "end": 822, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 815, "end": 822, "name": "AND", "source": 0 }, + { + "begin": 815, + "end": 831, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 815, "end": 831, "name": "AND", "source": 0 }, + { + "begin": 815, + "end": 831, + "name": "PUSH", + "source": 0, + "value": "829F5EE3" + }, + { + "begin": 832, + "end": 838, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 832, "end": 838, "name": "DUP1", "source": 0 }, + { "begin": 832, "end": 838, "name": "SLOAD", "source": 0 }, + { "begin": 832, "end": 838, "name": "SWAP1", "source": 0 }, + { + "begin": 832, + "end": 838, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 832, "end": 838, "name": "EXP", "source": 0 }, + { "begin": 832, "end": 838, "name": "SWAP1", "source": 0 }, + { "begin": 832, "end": 838, "name": "DIV", "source": 0 }, + { + "begin": 832, + "end": 838, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 832, "end": 838, "name": "AND", "source": 0 }, + { "begin": 840, "end": 849, "name": "CALLVALUE", "source": 0 }, + { + "begin": 851, + "end": 852, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 854, "end": 855, "name": "DUP1", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 815, "end": 856, "name": "MLOAD", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP6", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 815, "end": 856, "name": "AND", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 815, "end": 856, "name": "SHL", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP2", "source": 0 }, + { "begin": 815, "end": 856, "name": "MSTORE", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 815, "end": 856, "name": "ADD", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 815, "end": 856, "name": "SWAP5", "source": 0 }, + { "begin": 815, "end": 856, "name": "SWAP4", "source": 0 }, + { "begin": 815, "end": 856, "name": "SWAP3", "source": 0 }, + { "begin": 815, "end": 856, "name": "SWAP2", "source": 0 }, + { "begin": 815, "end": 856, "name": "SWAP1", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { + "begin": 815, + "end": 856, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 815, + "end": 856, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 815, "end": 856, "name": "JUMPDEST", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 815, "end": 856, "name": "MLOAD", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP1", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP4", "source": 0 }, + { "begin": 815, "end": 856, "name": "SUB", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP2", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 815, "end": 856, "name": "DUP8", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP1", "source": 0 }, + { "begin": 815, "end": 856, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 815, "end": 856, "name": "ISZERO", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP1", "source": 0 }, + { "begin": 815, "end": 856, "name": "ISZERO", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { "begin": 815, "end": 856, "name": "JUMPI", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 815, "end": 856, "name": "DUP1", "source": 0 }, + { "begin": 815, "end": 856, "name": "REVERT", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "tag", + "source": 0, + "value": "20" + }, + { "begin": 815, "end": 856, "name": "JUMPDEST", "source": 0 }, + { "begin": 815, "end": 856, "name": "POP", "source": 0 }, + { "begin": 815, "end": 856, "name": "GAS", "source": 0 }, + { "begin": 815, "end": 856, "name": "CALL", "source": 0 }, + { "begin": 815, "end": 856, "name": "ISZERO", "source": 0 }, + { "begin": 815, "end": 856, "name": "DUP1", "source": 0 }, + { "begin": 815, "end": 856, "name": "ISZERO", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { "begin": 815, "end": 856, "name": "JUMPI", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 815, "end": 856, "name": "DUP1", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 815, + "end": 856, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 815, + "end": 856, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 815, "end": 856, "name": "REVERT", "source": 0 }, + { + "begin": 815, + "end": 856, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 815, "end": 856, "name": "JUMPDEST", "source": 0 }, + { "begin": 815, "end": 856, "name": "POP", "source": 0 }, + { "begin": 815, "end": 856, "name": "POP", "source": 0 }, + { "begin": 815, "end": 856, "name": "POP", "source": 0 }, + { "begin": 815, "end": 856, "name": "POP", "source": 0 }, + { + "begin": 866, + "end": 960, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 866, "end": 960, "name": "MLOAD", "source": 0 }, + { + "begin": 866, + "end": 960, + "name": "PUSH", + "source": 0, + "value": "8C379A000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 866, "end": 960, "name": "DUP2", "source": 0 }, + { "begin": 866, "end": 960, "name": "MSTORE", "source": 0 }, + { + "begin": 866, + "end": 960, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 866, "end": 960, "name": "ADD", "source": 0 }, + { + "begin": 866, + "end": 960, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { "begin": 866, "end": 960, "name": "SWAP1", "source": 0 }, + { + "begin": 866, + "end": 960, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { + "begin": 866, + "end": 960, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 866, + "end": 960, + "name": "tag", + "source": 0, + "value": "23" + }, + { "begin": 866, "end": 960, "name": "JUMPDEST", "source": 0 }, + { + "begin": 866, + "end": 960, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 866, "end": 960, "name": "MLOAD", "source": 0 }, + { "begin": 866, "end": 960, "name": "DUP1", "source": 0 }, + { "begin": 866, "end": 960, "name": "SWAP2", "source": 0 }, + { "begin": 866, "end": 960, "name": "SUB", "source": 0 }, + { "begin": 866, "end": 960, "name": "SWAP1", "source": 0 }, + { "begin": 866, "end": 960, "name": "REVERT", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 247, "end": 313, "name": "JUMPDEST", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 247, "end": 313, "name": "DUP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "SLOAD", "source": 0 }, + { "begin": 247, "end": 313, "name": "SWAP1", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 247, "end": 313, "name": "EXP", "source": 0 }, + { "begin": 247, "end": 313, "name": "SWAP1", "source": 0 }, + { "begin": 247, "end": 313, "name": "DIV", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 247, "end": 313, "name": "AND", "source": 0 }, + { "begin": 247, "end": 313, "name": "DUP2", "source": 0 }, + { + "begin": 247, + "end": 313, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 133, + "name": "tag", + "source": 2, + "value": "25" + }, + { "begin": 7, "end": 133, "name": "JUMPDEST", "source": 2 }, + { + "begin": 44, + "end": 51, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 84, + "end": 126, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 77, "end": 82, "name": "DUP3", "source": 2 }, + { "begin": 73, "end": 127, "name": "AND", "source": 2 }, + { "begin": 62, "end": 127, "name": "SWAP1", "source": 2 }, + { "begin": 62, "end": 127, "name": "POP", "source": 2 }, + { "begin": 7, "end": 133, "name": "SWAP2", "source": 2 }, + { "begin": 7, "end": 133, "name": "SWAP1", "source": 2 }, + { "begin": 7, "end": 133, "name": "POP", "source": 2 }, + { + "begin": 7, + "end": 133, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 139, + "end": 199, + "name": "tag", + "source": 2, + "value": "26" + }, + { "begin": 139, "end": 199, "name": "JUMPDEST", "source": 2 }, + { + "begin": 167, + "end": 170, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 188, "end": 193, "name": "DUP2", "source": 2 }, + { "begin": 181, "end": 193, "name": "SWAP1", "source": 2 }, + { "begin": 181, "end": 193, "name": "POP", "source": 2 }, + { "begin": 139, "end": 199, "name": "SWAP2", "source": 2 }, + { "begin": 139, "end": 199, "name": "SWAP1", "source": 2 }, + { "begin": 139, "end": 199, "name": "POP", "source": 2 }, + { + "begin": 139, + "end": 199, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 205, + "end": 347, + "name": "tag", + "source": 2, + "value": "27" + }, + { "begin": 205, "end": 347, "name": "JUMPDEST", "source": 2 }, + { + "begin": 255, + "end": 264, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 288, + "end": 341, + "name": "PUSH [tag]", + "source": 2, + "value": "45" + }, + { + "begin": 306, + "end": 340, + "name": "PUSH [tag]", + "source": 2, + "value": "46" + }, + { + "begin": 315, + "end": 339, + "name": "PUSH [tag]", + "source": 2, + "value": "47" + }, + { "begin": 333, "end": 338, "name": "DUP5", "source": 2 }, + { + "begin": 315, + "end": 339, + "name": "PUSH [tag]", + "source": 2, + "value": "25" + }, + { + "begin": 315, + "end": 339, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 315, + "end": 339, + "name": "tag", + "source": 2, + "value": "47" + }, + { "begin": 315, "end": 339, "name": "JUMPDEST", "source": 2 }, + { + "begin": 306, + "end": 340, + "name": "PUSH [tag]", + "source": 2, + "value": "26" + }, + { + "begin": 306, + "end": 340, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 306, + "end": 340, + "name": "tag", + "source": 2, + "value": "46" + }, + { "begin": 306, "end": 340, "name": "JUMPDEST", "source": 2 }, + { + "begin": 288, + "end": 341, + "name": "PUSH [tag]", + "source": 2, + "value": "25" + }, + { + "begin": 288, + "end": 341, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 288, + "end": 341, + "name": "tag", + "source": 2, + "value": "45" + }, + { "begin": 288, "end": 341, "name": "JUMPDEST", "source": 2 }, + { "begin": 275, "end": 341, "name": "SWAP1", "source": 2 }, + { "begin": 275, "end": 341, "name": "POP", "source": 2 }, + { "begin": 205, "end": 347, "name": "SWAP2", "source": 2 }, + { "begin": 205, "end": 347, "name": "SWAP1", "source": 2 }, + { "begin": 205, "end": 347, "name": "POP", "source": 2 }, + { + "begin": 205, + "end": 347, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 353, + "end": 479, + "name": "tag", + "source": 2, + "value": "28" + }, + { "begin": 353, "end": 479, "name": "JUMPDEST", "source": 2 }, + { + "begin": 403, + "end": 412, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 436, + "end": 473, + "name": "PUSH [tag]", + "source": 2, + "value": "49" + }, + { "begin": 467, "end": 472, "name": "DUP3", "source": 2 }, + { + "begin": 436, + "end": 473, + "name": "PUSH [tag]", + "source": 2, + "value": "27" + }, + { + "begin": 436, + "end": 473, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 436, + "end": 473, + "name": "tag", + "source": 2, + "value": "49" + }, + { "begin": 436, "end": 473, "name": "JUMPDEST", "source": 2 }, + { "begin": 423, "end": 473, "name": "SWAP1", "source": 2 }, + { "begin": 423, "end": 473, "name": "POP", "source": 2 }, + { "begin": 353, "end": 479, "name": "SWAP2", "source": 2 }, + { "begin": 353, "end": 479, "name": "SWAP1", "source": 2 }, + { "begin": 353, "end": 479, "name": "POP", "source": 2 }, + { + "begin": 353, + "end": 479, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 485, + "end": 635, + "name": "tag", + "source": 2, + "value": "29" + }, + { "begin": 485, "end": 635, "name": "JUMPDEST", "source": 2 }, + { + "begin": 559, + "end": 568, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 592, + "end": 629, + "name": "PUSH [tag]", + "source": 2, + "value": "51" + }, + { "begin": 623, "end": 628, "name": "DUP3", "source": 2 }, + { + "begin": 592, + "end": 629, + "name": "PUSH [tag]", + "source": 2, + "value": "28" + }, + { + "begin": 592, + "end": 629, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 592, + "end": 629, + "name": "tag", + "source": 2, + "value": "51" + }, + { "begin": 592, "end": 629, "name": "JUMPDEST", "source": 2 }, + { "begin": 579, "end": 629, "name": "SWAP1", "source": 2 }, + { "begin": 579, "end": 629, "name": "POP", "source": 2 }, + { "begin": 485, "end": 635, "name": "SWAP2", "source": 2 }, + { "begin": 485, "end": 635, "name": "SWAP1", "source": 2 }, + { "begin": 485, "end": 635, "name": "POP", "source": 2 }, + { + "begin": 485, + "end": 635, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 641, + "end": 820, + "name": "tag", + "source": 2, + "value": "30" + }, + { "begin": 641, "end": 820, "name": "JUMPDEST", "source": 2 }, + { + "begin": 752, + "end": 813, + "name": "PUSH [tag]", + "source": 2, + "value": "53" + }, + { "begin": 807, "end": 812, "name": "DUP2", "source": 2 }, + { + "begin": 752, + "end": 813, + "name": "PUSH [tag]", + "source": 2, + "value": "29" + }, + { + "begin": 752, + "end": 813, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 752, + "end": 813, + "name": "tag", + "source": 2, + "value": "53" + }, + { "begin": 752, "end": 813, "name": "JUMPDEST", "source": 2 }, + { "begin": 747, "end": 750, "name": "DUP3", "source": 2 }, + { "begin": 740, "end": 814, "name": "MSTORE", "source": 2 }, + { "begin": 641, "end": 820, "name": "POP", "source": 2 }, + { "begin": 641, "end": 820, "name": "POP", "source": 2 }, + { + "begin": 641, + "end": 820, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 826, + "end": 1096, + "name": "tag", + "source": 2, + "value": "9" + }, + { "begin": 826, "end": 1096, "name": "JUMPDEST", "source": 2 }, + { + "begin": 943, + "end": 947, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 981, + "end": 983, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 970, "end": 979, "name": "DUP3", "source": 2 }, + { "begin": 966, "end": 984, "name": "ADD", "source": 2 }, + { "begin": 958, "end": 984, "name": "SWAP1", "source": 2 }, + { "begin": 958, "end": 984, "name": "POP", "source": 2 }, + { + "begin": 994, + "end": 1089, + "name": "PUSH [tag]", + "source": 2, + "value": "55" + }, + { + "begin": 1086, + "end": 1087, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 1075, "end": 1084, "name": "DUP4", "source": 2 }, + { "begin": 1071, "end": 1088, "name": "ADD", "source": 2 }, + { "begin": 1062, "end": 1068, "name": "DUP5", "source": 2 }, + { + "begin": 994, + "end": 1089, + "name": "PUSH [tag]", + "source": 2, + "value": "30" + }, + { + "begin": 994, + "end": 1089, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 994, + "end": 1089, + "name": "tag", + "source": 2, + "value": "55" + }, + { "begin": 994, "end": 1089, "name": "JUMPDEST", "source": 2 }, + { "begin": 826, "end": 1096, "name": "SWAP3", "source": 2 }, + { "begin": 826, "end": 1096, "name": "SWAP2", "source": 2 }, + { "begin": 826, "end": 1096, "name": "POP", "source": 2 }, + { "begin": 826, "end": 1096, "name": "POP", "source": 2 }, + { + "begin": 826, + "end": 1096, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1102, + "end": 1198, + "name": "tag", + "source": 2, + "value": "31" + }, + { "begin": 1102, "end": 1198, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1139, + "end": 1146, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1168, + "end": 1192, + "name": "PUSH [tag]", + "source": 2, + "value": "57" + }, + { "begin": 1186, "end": 1191, "name": "DUP3", "source": 2 }, + { + "begin": 1168, + "end": 1192, + "name": "PUSH [tag]", + "source": 2, + "value": "25" + }, + { + "begin": 1168, + "end": 1192, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1168, + "end": 1192, + "name": "tag", + "source": 2, + "value": "57" + }, + { "begin": 1168, "end": 1192, "name": "JUMPDEST", "source": 2 }, + { "begin": 1157, "end": 1192, "name": "SWAP1", "source": 2 }, + { "begin": 1157, "end": 1192, "name": "POP", "source": 2 }, + { "begin": 1102, "end": 1198, "name": "SWAP2", "source": 2 }, + { "begin": 1102, "end": 1198, "name": "SWAP1", "source": 2 }, + { "begin": 1102, "end": 1198, "name": "POP", "source": 2 }, + { + "begin": 1102, + "end": 1198, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1204, + "end": 1322, + "name": "tag", + "source": 2, + "value": "32" + }, + { "begin": 1204, "end": 1322, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1291, + "end": 1315, + "name": "PUSH [tag]", + "source": 2, + "value": "59" + }, + { "begin": 1309, "end": 1314, "name": "DUP2", "source": 2 }, + { + "begin": 1291, + "end": 1315, + "name": "PUSH [tag]", + "source": 2, + "value": "31" + }, + { + "begin": 1291, + "end": 1315, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1291, + "end": 1315, + "name": "tag", + "source": 2, + "value": "59" + }, + { "begin": 1291, "end": 1315, "name": "JUMPDEST", "source": 2 }, + { "begin": 1286, "end": 1289, "name": "DUP3", "source": 2 }, + { "begin": 1279, "end": 1316, "name": "MSTORE", "source": 2 }, + { "begin": 1204, "end": 1322, "name": "POP", "source": 2 }, + { "begin": 1204, "end": 1322, "name": "POP", "source": 2 }, + { + "begin": 1204, + "end": 1322, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1328, + "end": 1550, + "name": "tag", + "source": 2, + "value": "16" + }, + { "begin": 1328, "end": 1550, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1421, + "end": 1425, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1459, + "end": 1461, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 1448, "end": 1457, "name": "DUP3", "source": 2 }, + { "begin": 1444, "end": 1462, "name": "ADD", "source": 2 }, + { "begin": 1436, "end": 1462, "name": "SWAP1", "source": 2 }, + { "begin": 1436, "end": 1462, "name": "POP", "source": 2 }, + { + "begin": 1472, + "end": 1543, + "name": "PUSH [tag]", + "source": 2, + "value": "61" + }, + { + "begin": 1540, + "end": 1541, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 1529, "end": 1538, "name": "DUP4", "source": 2 }, + { "begin": 1525, "end": 1542, "name": "ADD", "source": 2 }, + { "begin": 1516, "end": 1522, "name": "DUP5", "source": 2 }, + { + "begin": 1472, + "end": 1543, + "name": "PUSH [tag]", + "source": 2, + "value": "32" + }, + { + "begin": 1472, + "end": 1543, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1472, + "end": 1543, + "name": "tag", + "source": 2, + "value": "61" + }, + { "begin": 1472, "end": 1543, "name": "JUMPDEST", "source": 2 }, + { "begin": 1328, "end": 1550, "name": "SWAP3", "source": 2 }, + { "begin": 1328, "end": 1550, "name": "SWAP2", "source": 2 }, + { "begin": 1328, "end": 1550, "name": "POP", "source": 2 }, + { "begin": 1328, "end": 1550, "name": "POP", "source": 2 }, + { + "begin": 1328, + "end": 1550, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1556, + "end": 1633, + "name": "tag", + "source": 2, + "value": "33" + }, + { "begin": 1556, "end": 1633, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1593, + "end": 1600, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 1622, "end": 1627, "name": "DUP2", "source": 2 }, + { "begin": 1611, "end": 1627, "name": "SWAP1", "source": 2 }, + { "begin": 1611, "end": 1627, "name": "POP", "source": 2 }, + { "begin": 1556, "end": 1633, "name": "SWAP2", "source": 2 }, + { "begin": 1556, "end": 1633, "name": "SWAP1", "source": 2 }, + { "begin": 1556, "end": 1633, "name": "POP", "source": 2 }, + { + "begin": 1556, + "end": 1633, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1639, + "end": 1757, + "name": "tag", + "source": 2, + "value": "34" + }, + { "begin": 1639, "end": 1757, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1726, + "end": 1750, + "name": "PUSH [tag]", + "source": 2, + "value": "64" + }, + { "begin": 1744, "end": 1749, "name": "DUP2", "source": 2 }, + { + "begin": 1726, + "end": 1750, + "name": "PUSH [tag]", + "source": 2, + "value": "33" + }, + { + "begin": 1726, + "end": 1750, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1726, + "end": 1750, + "name": "tag", + "source": 2, + "value": "64" + }, + { "begin": 1726, "end": 1750, "name": "JUMPDEST", "source": 2 }, + { "begin": 1721, "end": 1724, "name": "DUP3", "source": 2 }, + { "begin": 1714, "end": 1751, "name": "MSTORE", "source": 2 }, + { "begin": 1639, "end": 1757, "name": "POP", "source": 2 }, + { "begin": 1639, "end": 1757, "name": "POP", "source": 2 }, + { + "begin": 1639, + "end": 1757, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1763, + "end": 1848, + "name": "tag", + "source": 2, + "value": "35" + }, + { "begin": 1763, "end": 1848, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1808, + "end": 1815, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 1837, "end": 1842, "name": "DUP2", "source": 2 }, + { "begin": 1826, "end": 1842, "name": "SWAP1", "source": 2 }, + { "begin": 1826, "end": 1842, "name": "POP", "source": 2 }, + { "begin": 1763, "end": 1848, "name": "SWAP2", "source": 2 }, + { "begin": 1763, "end": 1848, "name": "SWAP1", "source": 2 }, + { "begin": 1763, "end": 1848, "name": "POP", "source": 2 }, + { + "begin": 1763, + "end": 1848, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1854, + "end": 2012, + "name": "tag", + "source": 2, + "value": "36" + }, + { "begin": 1854, "end": 2012, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1912, + "end": 1921, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1945, + "end": 2006, + "name": "PUSH [tag]", + "source": 2, + "value": "67" + }, + { + "begin": 1963, + "end": 2005, + "name": "PUSH [tag]", + "source": 2, + "value": "68" + }, + { + "begin": 1972, + "end": 2004, + "name": "PUSH [tag]", + "source": 2, + "value": "69" + }, + { "begin": 1998, "end": 2003, "name": "DUP5", "source": 2 }, + { + "begin": 1972, + "end": 2004, + "name": "PUSH [tag]", + "source": 2, + "value": "35" + }, + { + "begin": 1972, + "end": 2004, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1972, + "end": 2004, + "name": "tag", + "source": 2, + "value": "69" + }, + { "begin": 1972, "end": 2004, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1963, + "end": 2005, + "name": "PUSH [tag]", + "source": 2, + "value": "26" + }, + { + "begin": 1963, + "end": 2005, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1963, + "end": 2005, + "name": "tag", + "source": 2, + "value": "68" + }, + { "begin": 1963, "end": 2005, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1945, + "end": 2006, + "name": "PUSH [tag]", + "source": 2, + "value": "33" + }, + { + "begin": 1945, + "end": 2006, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1945, + "end": 2006, + "name": "tag", + "source": 2, + "value": "67" + }, + { "begin": 1945, "end": 2006, "name": "JUMPDEST", "source": 2 }, + { "begin": 1932, "end": 2006, "name": "SWAP1", "source": 2 }, + { "begin": 1932, "end": 2006, "name": "POP", "source": 2 }, + { "begin": 1854, "end": 2012, "name": "SWAP2", "source": 2 }, + { "begin": 1854, "end": 2012, "name": "SWAP1", "source": 2 }, + { "begin": 1854, "end": 2012, "name": "POP", "source": 2 }, + { + "begin": 1854, + "end": 2012, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 2018, + "end": 2165, + "name": "tag", + "source": 2, + "value": "37" + }, + { "begin": 2018, "end": 2165, "name": "JUMPDEST", "source": 2 }, + { + "begin": 2113, + "end": 2158, + "name": "PUSH [tag]", + "source": 2, + "value": "71" + }, + { "begin": 2152, "end": 2157, "name": "DUP2", "source": 2 }, + { + "begin": 2113, + "end": 2158, + "name": "PUSH [tag]", + "source": 2, + "value": "36" + }, + { + "begin": 2113, + "end": 2158, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 2113, + "end": 2158, + "name": "tag", + "source": 2, + "value": "71" + }, + { "begin": 2113, "end": 2158, "name": "JUMPDEST", "source": 2 }, + { "begin": 2108, "end": 2111, "name": "DUP3", "source": 2 }, + { "begin": 2101, "end": 2159, "name": "MSTORE", "source": 2 }, + { "begin": 2018, "end": 2165, "name": "POP", "source": 2 }, + { "begin": 2018, "end": 2165, "name": "POP", "source": 2 }, + { + "begin": 2018, + "end": 2165, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 2171, + "end": 2756, + "name": "tag", + "source": 2, + "value": "19" + }, + { "begin": 2171, "end": 2756, "name": "JUMPDEST", "source": 2 }, + { + "begin": 2364, + "end": 2368, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 2402, + "end": 2405, + "name": "PUSH", + "source": 2, + "value": "80" + }, + { "begin": 2391, "end": 2400, "name": "DUP3", "source": 2 }, + { "begin": 2387, "end": 2406, "name": "ADD", "source": 2 }, + { "begin": 2379, "end": 2406, "name": "SWAP1", "source": 2 }, + { "begin": 2379, "end": 2406, "name": "POP", "source": 2 }, + { + "begin": 2416, + "end": 2487, + "name": "PUSH [tag]", + "source": 2, + "value": "73" + }, + { + "begin": 2484, + "end": 2485, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 2473, "end": 2482, "name": "DUP4", "source": 2 }, + { "begin": 2469, "end": 2486, "name": "ADD", "source": 2 }, + { "begin": 2460, "end": 2466, "name": "DUP8", "source": 2 }, + { + "begin": 2416, + "end": 2487, + "name": "PUSH [tag]", + "source": 2, + "value": "32" + }, + { + "begin": 2416, + "end": 2487, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 2416, + "end": 2487, + "name": "tag", + "source": 2, + "value": "73" + }, + { "begin": 2416, "end": 2487, "name": "JUMPDEST", "source": 2 }, + { + "begin": 2497, + "end": 2569, + "name": "PUSH [tag]", + "source": 2, + "value": "74" + }, + { + "begin": 2565, + "end": 2567, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 2554, "end": 2563, "name": "DUP4", "source": 2 }, + { "begin": 2550, "end": 2568, "name": "ADD", "source": 2 }, + { "begin": 2541, "end": 2547, "name": "DUP7", "source": 2 }, + { + "begin": 2497, + "end": 2569, + "name": "PUSH [tag]", + "source": 2, + "value": "34" + }, + { + "begin": 2497, + "end": 2569, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 2497, + "end": 2569, + "name": "tag", + "source": 2, + "value": "74" + }, + { "begin": 2497, "end": 2569, "name": "JUMPDEST", "source": 2 }, + { + "begin": 2579, + "end": 2659, + "name": "PUSH [tag]", + "source": 2, + "value": "75" + }, + { + "begin": 2655, + "end": 2657, + "name": "PUSH", + "source": 2, + "value": "40" + }, + { "begin": 2644, "end": 2653, "name": "DUP4", "source": 2 }, + { "begin": 2640, "end": 2658, "name": "ADD", "source": 2 }, + { "begin": 2631, "end": 2637, "name": "DUP6", "source": 2 }, + { + "begin": 2579, + "end": 2659, + "name": "PUSH [tag]", + "source": 2, + "value": "37" + }, + { + "begin": 2579, + "end": 2659, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 2579, + "end": 2659, + "name": "tag", + "source": 2, + "value": "75" + }, + { "begin": 2579, "end": 2659, "name": "JUMPDEST", "source": 2 }, + { + "begin": 2669, + "end": 2749, + "name": "PUSH [tag]", + "source": 2, + "value": "76" + }, + { + "begin": 2745, + "end": 2747, + "name": "PUSH", + "source": 2, + "value": "60" + }, + { "begin": 2734, "end": 2743, "name": "DUP4", "source": 2 }, + { "begin": 2730, "end": 2748, "name": "ADD", "source": 2 }, + { "begin": 2721, "end": 2727, "name": "DUP5", "source": 2 }, + { + "begin": 2669, + "end": 2749, + "name": "PUSH [tag]", + "source": 2, + "value": "37" + }, + { + "begin": 2669, + "end": 2749, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 2669, + "end": 2749, + "name": "tag", + "source": 2, + "value": "76" + }, + { "begin": 2669, "end": 2749, "name": "JUMPDEST", "source": 2 }, + { "begin": 2171, "end": 2756, "name": "SWAP6", "source": 2 }, + { "begin": 2171, "end": 2756, "name": "SWAP5", "source": 2 }, + { "begin": 2171, "end": 2756, "name": "POP", "source": 2 }, + { "begin": 2171, "end": 2756, "name": "POP", "source": 2 }, + { "begin": 2171, "end": 2756, "name": "POP", "source": 2 }, + { "begin": 2171, "end": 2756, "name": "POP", "source": 2 }, + { "begin": 2171, "end": 2756, "name": "POP", "source": 2 }, + { + "begin": 2171, + "end": 2756, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 2762, + "end": 2931, + "name": "tag", + "source": 2, + "value": "38" + }, + { "begin": 2762, "end": 2931, "name": "JUMPDEST", "source": 2 }, + { + "begin": 2846, + "end": 2857, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 2880, "end": 2886, "name": "DUP3", "source": 2 }, + { "begin": 2875, "end": 2878, "name": "DUP3", "source": 2 }, + { "begin": 2868, "end": 2887, "name": "MSTORE", "source": 2 }, + { + "begin": 2920, + "end": 2924, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 2915, "end": 2918, "name": "DUP3", "source": 2 }, + { "begin": 2911, "end": 2925, "name": "ADD", "source": 2 }, + { "begin": 2896, "end": 2925, "name": "SWAP1", "source": 2 }, + { "begin": 2896, "end": 2925, "name": "POP", "source": 2 }, + { "begin": 2762, "end": 2931, "name": "SWAP3", "source": 2 }, + { "begin": 2762, "end": 2931, "name": "SWAP2", "source": 2 }, + { "begin": 2762, "end": 2931, "name": "POP", "source": 2 }, + { "begin": 2762, "end": 2931, "name": "POP", "source": 2 }, + { + "begin": 2762, + "end": 2931, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 2937, + "end": 3186, + "name": "tag", + "source": 2, + "value": "39" + }, + { "begin": 2937, "end": 3186, "name": "JUMPDEST", "source": 2 }, + { + "begin": 3077, + "end": 3111, + "name": "PUSH", + "source": 2, + "value": "427920726576657274696E672074686973207472616E73616374696F6E2C2077" + }, + { + "begin": 3073, + "end": 3074, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 3065, "end": 3071, "name": "DUP3", "source": 2 }, + { "begin": 3061, "end": 3075, "name": "ADD", "source": 2 }, + { "begin": 3054, "end": 3112, "name": "MSTORE", "source": 2 }, + { + "begin": 3146, + "end": 3178, + "name": "PUSH", + "source": 2, + "value": "652072657475726E207468652065746820746F207468652063616C6C65720000" + }, + { + "begin": 3141, + "end": 3143, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 3133, "end": 3139, "name": "DUP3", "source": 2 }, + { "begin": 3129, "end": 3144, "name": "ADD", "source": 2 }, + { "begin": 3122, "end": 3179, "name": "MSTORE", "source": 2 }, + { "begin": 2937, "end": 3186, "name": "POP", "source": 2 }, + { + "begin": 2937, + "end": 3186, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 3192, + "end": 3558, + "name": "tag", + "source": 2, + "value": "40" + }, + { "begin": 3192, "end": 3558, "name": "JUMPDEST", "source": 2 }, + { + "begin": 3334, + "end": 3337, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 3355, + "end": 3422, + "name": "PUSH [tag]", + "source": 2, + "value": "80" + }, + { + "begin": 3419, + "end": 3421, + "name": "PUSH", + "source": 2, + "value": "3E" + }, + { "begin": 3414, "end": 3417, "name": "DUP4", "source": 2 }, + { + "begin": 3355, + "end": 3422, + "name": "PUSH [tag]", + "source": 2, + "value": "38" + }, + { + "begin": 3355, + "end": 3422, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 3355, + "end": 3422, + "name": "tag", + "source": 2, + "value": "80" + }, + { "begin": 3355, "end": 3422, "name": "JUMPDEST", "source": 2 }, + { "begin": 3348, "end": 3422, "name": "SWAP2", "source": 2 }, + { "begin": 3348, "end": 3422, "name": "POP", "source": 2 }, + { + "begin": 3431, + "end": 3524, + "name": "PUSH [tag]", + "source": 2, + "value": "81" + }, + { "begin": 3520, "end": 3523, "name": "DUP3", "source": 2 }, + { + "begin": 3431, + "end": 3524, + "name": "PUSH [tag]", + "source": 2, + "value": "39" + }, + { + "begin": 3431, + "end": 3524, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 3431, + "end": 3524, + "name": "tag", + "source": 2, + "value": "81" + }, + { "begin": 3431, "end": 3524, "name": "JUMPDEST", "source": 2 }, + { + "begin": 3549, + "end": 3551, + "name": "PUSH", + "source": 2, + "value": "40" + }, + { "begin": 3544, "end": 3547, "name": "DUP3", "source": 2 }, + { "begin": 3540, "end": 3552, "name": "ADD", "source": 2 }, + { "begin": 3533, "end": 3552, "name": "SWAP1", "source": 2 }, + { "begin": 3533, "end": 3552, "name": "POP", "source": 2 }, + { "begin": 3192, "end": 3558, "name": "SWAP2", "source": 2 }, + { "begin": 3192, "end": 3558, "name": "SWAP1", "source": 2 }, + { "begin": 3192, "end": 3558, "name": "POP", "source": 2 }, + { + "begin": 3192, + "end": 3558, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 3564, + "end": 3983, + "name": "tag", + "source": 2, + "value": "24" + }, + { "begin": 3564, "end": 3983, "name": "JUMPDEST", "source": 2 }, + { + "begin": 3730, + "end": 3734, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 3768, + "end": 3770, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 3757, "end": 3766, "name": "DUP3", "source": 2 }, + { "begin": 3753, "end": 3771, "name": "ADD", "source": 2 }, + { "begin": 3745, "end": 3771, "name": "SWAP1", "source": 2 }, + { "begin": 3745, "end": 3771, "name": "POP", "source": 2 }, + { "begin": 3817, "end": 3826, "name": "DUP2", "source": 2 }, + { "begin": 3811, "end": 3815, "name": "DUP2", "source": 2 }, + { "begin": 3807, "end": 3827, "name": "SUB", "source": 2 }, + { + "begin": 3803, + "end": 3804, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 3792, "end": 3801, "name": "DUP4", "source": 2 }, + { "begin": 3788, "end": 3805, "name": "ADD", "source": 2 }, + { "begin": 3781, "end": 3828, "name": "MSTORE", "source": 2 }, + { + "begin": 3845, + "end": 3976, + "name": "PUSH [tag]", + "source": 2, + "value": "83" + }, + { "begin": 3971, "end": 3975, "name": "DUP2", "source": 2 }, + { + "begin": 3845, + "end": 3976, + "name": "PUSH [tag]", + "source": 2, + "value": "40" + }, + { + "begin": 3845, + "end": 3976, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 3845, + "end": 3976, + "name": "tag", + "source": 2, + "value": "83" + }, + { "begin": 3845, "end": 3976, "name": "JUMPDEST", "source": 2 }, + { "begin": 3837, "end": 3976, "name": "SWAP1", "source": 2 }, + { "begin": 3837, "end": 3976, "name": "POP", "source": 2 }, + { "begin": 3564, "end": 3983, "name": "SWAP2", "source": 2 }, + { "begin": 3564, "end": 3983, "name": "SWAP1", "source": 2 }, + { "begin": 3564, "end": 3983, "name": "POP", "source": 2 }, + { + "begin": 3564, + "end": 3983, + "name": "JUMP", + "source": 2, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "score_a_free_delegation()": "8bed00da", + "staking()": "4cf088d9", + "target()": "d4b83992" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"score_a_free_delegation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staking\",\"outputs\":[{\"internalType\":\"contract ParachainStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"target\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"score_a_free_delegation()\":{\"notice\":\"Take advantage of the EVMs reversion logic and the fact that it doesn't extend to Substrate storage to score free delegations for a collator candidate of our choosing\"},\"staking()\":{\"notice\":\"The ParachainStaking wrapper at the known pre-compile address.\"},\"target()\":{\"notice\":\"The collator (ALITH) that this contract will benefit with delegations\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"StakingAttacker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xeddacea85db7b6fcaed78a148f82ff27f0ed313ccbfe5b8fb594ed56d5b84801\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://e9a1fd104bada8ccabca69056d082ccd9a92650cc338990c0fc82bb31ed10498\",\"dweb:/ipfs/QmYTsGqXKC1yTrFVzHLiTrgRM4PQpgWUCGmbTYE3vJe984\"]},\"precompiles/parachain-staking/StakingInterface.sol\":{\"keccak256\":\"0x20aee59af4381dddfd83cd4cbdbf9da8178fbcc253a3ef3147f7325b7fe7fe10\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://6280c1f1c49670c81ddf394b6ec31133c982df79fe511955ff7b190e872aadb7\",\"dweb:/ipfs/Qma8gjPkY9htbew81VPJg8tbcwh3GcbRw3zg614TQys8J2\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 6, + "contract": "main.sol:StakingAttacker", + "label": "target", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 13, + "contract": "main.sol:StakingAttacker", + "label": "staking", + "offset": 0, + "slot": "1", + "type": "t_contract(ParachainStaking)340" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_contract(ParachainStaking)340": { + "encoding": "inplace", + "label": "contract ParachainStaking", + "numberOfBytes": "20" + } + } + }, + "userdoc": { + "kind": "user", + "methods": { + "score_a_free_delegation()": { + "notice": "Take advantage of the EVMs reversion logic and the fact that it doesn't extend to Substrate storage to score free delegations for a collator candidate of our choosing" + }, + "staking()": { + "notice": "The ParachainStaking wrapper at the known pre-compile address." + }, + "target()": { + "notice": "The collator (ALITH) that this contract will benefit with delegations" + } + }, + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\nimport \"../../../precompiles/parachain-staking/StakingInterface.sol\";\n\ncontract StakingAttacker {\n /// The collator (ALITH) that this contract will benefit with delegations\n address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac;\n\n /// The ParachainStaking wrapper at the known pre-compile address.\n ParachainStaking public staking =\n ParachainStaking(0x0000000000000000000000000000000000000800);\n\n /// Take advantage of the EVMs reversion logic and the fact that it doesn't extend to\n /// Substrate storage to score free delegations for a collator candidate of our choosing\n function score_a_free_delegation() public payable {\n // We delegate our target collator with all the tokens provided\n staking.delegate(target, msg.value, 1, 1);\n revert(\n \"By reverting this transaction, we return the eth to the caller\"\n );\n }\n}\n" +} diff --git a/tests/contracts/compiled/StakingDelegationAttaker.json b/tests/contracts/compiled/StakingDelegationAttaker.json deleted file mode 100644 index b820d68de8..0000000000 --- a/tests/contracts/compiled/StakingDelegationAttaker.json +++ /dev/null @@ -1,3772 +0,0 @@ -{ - "byteCode": "0x608060405273f24ff3a9cf04c71dbc94d0b566f7a27b94566cac6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610800600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100a757600080fd5b506103be806100b76000396000f3fe6080604052600436106100345760003560e01c80634cf088d9146100395780638bed00da14610064578063d4b839921461006e575b600080fd5b34801561004557600080fd5b5061004e610099565b60405161005b919061024c565b60405180910390f35b61006c6100bf565b005b34801561007a57600080fd5b506100836101a9565b6040516100909190610288565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663026e402b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b815260040161013c9291906102bc565b600060405180830381600087803b15801561015657600080fd5b505af115801561016a573d6000803e3d6000fd5b505050506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a090610368565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061021261020d610208846101cd565b6101ed565b6101cd565b9050919050565b6000610224826101f7565b9050919050565b600061023682610219565b9050919050565b6102468161022b565b82525050565b6000602082019050610261600083018461023d565b92915050565b6000610272826101cd565b9050919050565b61028281610267565b82525050565b600060208201905061029d6000830184610279565b92915050565b6000819050919050565b6102b6816102a3565b82525050565b60006040820190506102d16000830185610279565b6102de60208301846102ad565b9392505050565b600082825260208201905092915050565b7f427920726576657274696e672074686973207472616e73616374696f6e2c207760008201527f652072657475726e207468652065746820746f207468652063616c6c65720000602082015250565b6000610352603e836102e5565b915061035d826102f6565b604082019050919050565b6000602082019050818103600083015261038181610345565b905091905056fea264697066735822122097cecb2728f7bb7f01f12e5af920d72816fdbd8f056819751574f73756dfbfde64736f6c634300080a0033", - "contract": { - "abi": [ - { - "inputs": [], - "name": "score_a_free_delegation", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "staking", - "outputs": [ - { - "internalType": "contract ParachainStaking", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "target", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":2070:2931 contract StakingDelegationAttaker {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":2220:2262 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n 0xf24ff3a9cf04c71dbc94d0b566f7a27b94566cac\n /* \"main.sol\":2196:2262 address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":2396:2438 0x0000000000000000000000000000000000000800 */\n 0x0800\n /* \"main.sol\":2345:2439 ParachainStaking public staking = ParachainStaking(0x0000000000000000000000000000000000000800) */\n 0x01\n exp(0x0100, 0x00)\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":2070:2931 contract StakingDelegationAttaker {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":2070:2931 contract StakingDelegationAttaker {... */\n mstore(0x40, 0x80)\n jumpi(tag_1, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x4cf088d9\n eq\n tag_2\n jumpi\n dup1\n 0x8bed00da\n eq\n tag_3\n jumpi\n dup1\n 0xd4b83992\n eq\n tag_4\n jumpi\n tag_1:\n 0x00\n dup1\n revert\n /* \"main.sol\":2345:2439 ParachainStaking public staking = ParachainStaking(0x0000000000000000000000000000000000000800) */\n tag_2:\n callvalue\n dup1\n iszero\n tag_5\n jumpi\n 0x00\n dup1\n revert\n tag_5:\n pop\n tag_6\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2641:2925 function score_a_free_delegation() public payable{... */\n tag_3:\n tag_10\n tag_11\n jump\t// in\n tag_10:\n stop\n /* \"main.sol\":2196:2262 address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n tag_4:\n callvalue\n dup1\n iszero\n tag_12\n jumpi\n 0x00\n dup1\n revert\n tag_12:\n pop\n tag_13\n tag_14\n jump\t// in\n tag_13:\n mload(0x40)\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2345:2439 ParachainStaking public staking = ParachainStaking(0x0000000000000000000000000000000000000800) */\n tag_7:\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":2641:2925 function score_a_free_delegation() public payable{... */\n tag_11:\n /* \"main.sol\":2793:2800 staking */\n 0x01\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2793:2809 staking.delegate */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x026e402b\n /* \"main.sol\":2810:2816 target */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2818:2827 msg.value */\n callvalue\n /* \"main.sol\":2793:2828 staking.delegate(target, msg.value) */\n mload(0x40)\n dup4\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_18\n swap3\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_20\n jumpi\n 0x00\n dup1\n revert\n tag_20:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_22\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_22:\n pop\n pop\n pop\n pop\n /* \"main.sol\":2842:2914 revert(\"By reverting this transaction, we return the eth to the caller\") */\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_23\n swap1\n tag_24\n jump\t// in\n tag_23:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n /* \"main.sol\":2196:2262 address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac */\n tag_14:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"#utility.yul\":7:133 */\n tag_25:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":84:126 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":77:82 */\n dup3\n /* \"#utility.yul\":73:127 */\n and\n /* \"#utility.yul\":62:127 */\n swap1\n pop\n /* \"#utility.yul\":7:133 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":139:199 */\n tag_26:\n /* \"#utility.yul\":167:170 */\n 0x00\n /* \"#utility.yul\":188:193 */\n dup2\n /* \"#utility.yul\":181:193 */\n swap1\n pop\n /* \"#utility.yul\":139:199 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":205:347 */\n tag_27:\n /* \"#utility.yul\":255:264 */\n 0x00\n /* \"#utility.yul\":288:341 */\n tag_42\n /* \"#utility.yul\":306:340 */\n tag_43\n /* \"#utility.yul\":315:339 */\n tag_44\n /* \"#utility.yul\":333:338 */\n dup5\n /* \"#utility.yul\":315:339 */\n tag_25\n jump\t// in\n tag_44:\n /* \"#utility.yul\":306:340 */\n tag_26\n jump\t// in\n tag_43:\n /* \"#utility.yul\":288:341 */\n tag_25\n jump\t// in\n tag_42:\n /* \"#utility.yul\":275:341 */\n swap1\n pop\n /* \"#utility.yul\":205:347 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":353:479 */\n tag_28:\n /* \"#utility.yul\":403:412 */\n 0x00\n /* \"#utility.yul\":436:473 */\n tag_46\n /* \"#utility.yul\":467:472 */\n dup3\n /* \"#utility.yul\":436:473 */\n tag_27\n jump\t// in\n tag_46:\n /* \"#utility.yul\":423:473 */\n swap1\n pop\n /* \"#utility.yul\":353:479 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":485:634 */\n tag_29:\n /* \"#utility.yul\":558:567 */\n 0x00\n /* \"#utility.yul\":591:628 */\n tag_48\n /* \"#utility.yul\":622:627 */\n dup3\n /* \"#utility.yul\":591:628 */\n tag_28\n jump\t// in\n tag_48:\n /* \"#utility.yul\":578:628 */\n swap1\n pop\n /* \"#utility.yul\":485:634 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":640:817 */\n tag_30:\n /* \"#utility.yul\":750:810 */\n tag_50\n /* \"#utility.yul\":804:809 */\n dup2\n /* \"#utility.yul\":750:810 */\n tag_29\n jump\t// in\n tag_50:\n /* \"#utility.yul\":745:748 */\n dup3\n /* \"#utility.yul\":738:811 */\n mstore\n /* \"#utility.yul\":640:817 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":823:1091 */\n tag_9:\n /* \"#utility.yul\":939:943 */\n 0x00\n /* \"#utility.yul\":977:979 */\n 0x20\n /* \"#utility.yul\":966:975 */\n dup3\n /* \"#utility.yul\":962:980 */\n add\n /* \"#utility.yul\":954:980 */\n swap1\n pop\n /* \"#utility.yul\":990:1084 */\n tag_52\n /* \"#utility.yul\":1081:1082 */\n 0x00\n /* \"#utility.yul\":1070:1079 */\n dup4\n /* \"#utility.yul\":1066:1083 */\n add\n /* \"#utility.yul\":1057:1063 */\n dup5\n /* \"#utility.yul\":990:1084 */\n tag_30\n jump\t// in\n tag_52:\n /* \"#utility.yul\":823:1091 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1097:1193 */\n tag_31:\n /* \"#utility.yul\":1134:1141 */\n 0x00\n /* \"#utility.yul\":1163:1187 */\n tag_54\n /* \"#utility.yul\":1181:1186 */\n dup3\n /* \"#utility.yul\":1163:1187 */\n tag_25\n jump\t// in\n tag_54:\n /* \"#utility.yul\":1152:1187 */\n swap1\n pop\n /* \"#utility.yul\":1097:1193 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1199:1317 */\n tag_32:\n /* \"#utility.yul\":1286:1310 */\n tag_56\n /* \"#utility.yul\":1304:1309 */\n dup2\n /* \"#utility.yul\":1286:1310 */\n tag_31\n jump\t// in\n tag_56:\n /* \"#utility.yul\":1281:1284 */\n dup3\n /* \"#utility.yul\":1274:1311 */\n mstore\n /* \"#utility.yul\":1199:1317 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1323:1545 */\n tag_16:\n /* \"#utility.yul\":1416:1420 */\n 0x00\n /* \"#utility.yul\":1454:1456 */\n 0x20\n /* \"#utility.yul\":1443:1452 */\n dup3\n /* \"#utility.yul\":1439:1457 */\n add\n /* \"#utility.yul\":1431:1457 */\n swap1\n pop\n /* \"#utility.yul\":1467:1538 */\n tag_58\n /* \"#utility.yul\":1535:1536 */\n 0x00\n /* \"#utility.yul\":1524:1533 */\n dup4\n /* \"#utility.yul\":1520:1537 */\n add\n /* \"#utility.yul\":1511:1517 */\n dup5\n /* \"#utility.yul\":1467:1538 */\n tag_32\n jump\t// in\n tag_58:\n /* \"#utility.yul\":1323:1545 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1551:1628 */\n tag_33:\n /* \"#utility.yul\":1588:1595 */\n 0x00\n /* \"#utility.yul\":1617:1622 */\n dup2\n /* \"#utility.yul\":1606:1622 */\n swap1\n pop\n /* \"#utility.yul\":1551:1628 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1634:1752 */\n tag_34:\n /* \"#utility.yul\":1721:1745 */\n tag_61\n /* \"#utility.yul\":1739:1744 */\n dup2\n /* \"#utility.yul\":1721:1745 */\n tag_33\n jump\t// in\n tag_61:\n /* \"#utility.yul\":1716:1719 */\n dup3\n /* \"#utility.yul\":1709:1746 */\n mstore\n /* \"#utility.yul\":1634:1752 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1758:2090 */\n tag_19:\n /* \"#utility.yul\":1879:1883 */\n 0x00\n /* \"#utility.yul\":1917:1919 */\n 0x40\n /* \"#utility.yul\":1906:1915 */\n dup3\n /* \"#utility.yul\":1902:1920 */\n add\n /* \"#utility.yul\":1894:1920 */\n swap1\n pop\n /* \"#utility.yul\":1930:2001 */\n tag_63\n /* \"#utility.yul\":1998:1999 */\n 0x00\n /* \"#utility.yul\":1987:1996 */\n dup4\n /* \"#utility.yul\":1983:2000 */\n add\n /* \"#utility.yul\":1974:1980 */\n dup6\n /* \"#utility.yul\":1930:2001 */\n tag_32\n jump\t// in\n tag_63:\n /* \"#utility.yul\":2011:2083 */\n tag_64\n /* \"#utility.yul\":2079:2081 */\n 0x20\n /* \"#utility.yul\":2068:2077 */\n dup4\n /* \"#utility.yul\":2064:2082 */\n add\n /* \"#utility.yul\":2055:2061 */\n dup5\n /* \"#utility.yul\":2011:2083 */\n tag_34\n jump\t// in\n tag_64:\n /* \"#utility.yul\":1758:2090 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2096:2265 */\n tag_35:\n /* \"#utility.yul\":2180:2191 */\n 0x00\n /* \"#utility.yul\":2214:2220 */\n dup3\n /* \"#utility.yul\":2209:2212 */\n dup3\n /* \"#utility.yul\":2202:2221 */\n mstore\n /* \"#utility.yul\":2254:2258 */\n 0x20\n /* \"#utility.yul\":2249:2252 */\n dup3\n /* \"#utility.yul\":2245:2259 */\n add\n /* \"#utility.yul\":2230:2259 */\n swap1\n pop\n /* \"#utility.yul\":2096:2265 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2271:2520 */\n tag_36:\n /* \"#utility.yul\":2411:2445 */\n 0x427920726576657274696e672074686973207472616e73616374696f6e2c2077\n /* \"#utility.yul\":2407:2408 */\n 0x00\n /* \"#utility.yul\":2399:2405 */\n dup3\n /* \"#utility.yul\":2395:2409 */\n add\n /* \"#utility.yul\":2388:2446 */\n mstore\n /* \"#utility.yul\":2480:2512 */\n 0x652072657475726e207468652065746820746f207468652063616c6c65720000\n /* \"#utility.yul\":2475:2477 */\n 0x20\n /* \"#utility.yul\":2467:2473 */\n dup3\n /* \"#utility.yul\":2463:2478 */\n add\n /* \"#utility.yul\":2456:2513 */\n mstore\n /* \"#utility.yul\":2271:2520 */\n pop\n jump\t// out\n /* \"#utility.yul\":2526:2892 */\n tag_37:\n /* \"#utility.yul\":2668:2671 */\n 0x00\n /* \"#utility.yul\":2689:2756 */\n tag_68\n /* \"#utility.yul\":2753:2755 */\n 0x3e\n /* \"#utility.yul\":2748:2751 */\n dup4\n /* \"#utility.yul\":2689:2756 */\n tag_35\n jump\t// in\n tag_68:\n /* \"#utility.yul\":2682:2756 */\n swap2\n pop\n /* \"#utility.yul\":2765:2858 */\n tag_69\n /* \"#utility.yul\":2854:2857 */\n dup3\n /* \"#utility.yul\":2765:2858 */\n tag_36\n jump\t// in\n tag_69:\n /* \"#utility.yul\":2883:2885 */\n 0x40\n /* \"#utility.yul\":2878:2881 */\n dup3\n /* \"#utility.yul\":2874:2886 */\n add\n /* \"#utility.yul\":2867:2886 */\n swap1\n pop\n /* \"#utility.yul\":2526:2892 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2898:3317 */\n tag_24:\n /* \"#utility.yul\":3064:3068 */\n 0x00\n /* \"#utility.yul\":3102:3104 */\n 0x20\n /* \"#utility.yul\":3091:3100 */\n dup3\n /* \"#utility.yul\":3087:3105 */\n add\n /* \"#utility.yul\":3079:3105 */\n swap1\n pop\n /* \"#utility.yul\":3151:3160 */\n dup2\n /* \"#utility.yul\":3145:3149 */\n dup2\n /* \"#utility.yul\":3141:3161 */\n sub\n /* \"#utility.yul\":3137:3138 */\n 0x00\n /* \"#utility.yul\":3126:3135 */\n dup4\n /* \"#utility.yul\":3122:3139 */\n add\n /* \"#utility.yul\":3115:3162 */\n mstore\n /* \"#utility.yul\":3179:3310 */\n tag_71\n /* \"#utility.yul\":3305:3309 */\n dup2\n /* \"#utility.yul\":3179:3310 */\n tag_37\n jump\t// in\n tag_71:\n /* \"#utility.yul\":3171:3310 */\n swap1\n pop\n /* \"#utility.yul\":2898:3317 */\n swap2\n swap1\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122097cecb2728f7bb7f01f12e5af920d72816fdbd8f056819751574f73756dfbfde64736f6c634300080a0033\n}\n", - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "608060405273f24ff3a9cf04c71dbc94d0b566f7a27b94566cac6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610800600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100a757600080fd5b506103be806100b76000396000f3fe6080604052600436106100345760003560e01c80634cf088d9146100395780638bed00da14610064578063d4b839921461006e575b600080fd5b34801561004557600080fd5b5061004e610099565b60405161005b919061024c565b60405180910390f35b61006c6100bf565b005b34801561007a57600080fd5b506100836101a9565b6040516100909190610288565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663026e402b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b815260040161013c9291906102bc565b600060405180830381600087803b15801561015657600080fd5b505af115801561016a573d6000803e3d6000fd5b505050506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a090610368565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061021261020d610208846101cd565b6101ed565b6101cd565b9050919050565b6000610224826101f7565b9050919050565b600061023682610219565b9050919050565b6102468161022b565b82525050565b6000602082019050610261600083018461023d565b92915050565b6000610272826101cd565b9050919050565b61028281610267565b82525050565b600060208201905061029d6000830184610279565b92915050565b6000819050919050565b6102b6816102a3565b82525050565b60006040820190506102d16000830185610279565b6102de60208301846102ad565b9392505050565b600082825260208201905092915050565b7f427920726576657274696e672074686973207472616e73616374696f6e2c207760008201527f652072657475726e207468652065746820746f207468652063616c6c65720000602082015250565b6000610352603e836102e5565b915061035d826102f6565b604082019050919050565b6000602082019050818103600083015261038181610345565b905091905056fea264697066735822122097cecb2728f7bb7f01f12e5af920d72816fdbd8f056819751574f73756dfbfde64736f6c634300080a0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH20 0xF24FF3A9CF04C71DBC94D0B566F7A27B94566CAC PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x800 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0xA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BE DUP1 PUSH2 0xB7 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x8BED00DA EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xD4B83992 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E PUSH2 0x99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x24C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0xBF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x83 PUSH2 0x1A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x90 SWAP2 SWAP1 PUSH2 0x288 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26E402B PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLVALUE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13C SWAP3 SWAP2 SWAP1 PUSH2 0x2BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP1 PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x212 PUSH2 0x20D PUSH2 0x208 DUP5 PUSH2 0x1CD JUMP JUMPDEST PUSH2 0x1ED JUMP JUMPDEST PUSH2 0x1CD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x224 DUP3 PUSH2 0x1F7 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x236 DUP3 PUSH2 0x219 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x246 DUP2 PUSH2 0x22B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x261 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x23D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x272 DUP3 PUSH2 0x1CD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x282 DUP2 PUSH2 0x267 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x29D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x279 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B6 DUP2 PUSH2 0x2A3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x2D1 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x279 JUMP JUMPDEST PUSH2 0x2DE PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2AD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x427920726576657274696E672074686973207472616E73616374696F6E2C2077 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x652072657475726E207468652065746820746F207468652063616C6C65720000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x352 PUSH1 0x3E DUP4 PUSH2 0x2E5 JUMP JUMPDEST SWAP2 POP PUSH2 0x35D DUP3 PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x381 DUP2 PUSH2 0x345 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xCE 0xCB 0x27 0x28 0xF7 0xBB PUSH32 0x1F12E5AF920D72816FDBD8F056819751574F73756DFBFDE64736F6C63430008 EXP STOP CALLER ", - "sourceMap": "2070:861:0:-:0;;;2220:42;2196:66;;;;;;;;;;;;;;;;;;;;2396:42;2345:94;;;;;;;;;;;;;;;;;;;;2070:861;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@score_a_free_delegation_102": { - "entryPoint": 191, - "id": 102, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@staking_85": { - "entryPoint": 153, - "id": 85, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@target_78": { - "entryPoint": 425, - "id": 78, - "parameterSlots": 0, - "returnSlots": 0 - }, - "abi_encode_t_address_to_t_address_fromStack": { - "entryPoint": 633, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack": { - "entryPoint": 573, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack": { - "entryPoint": 837, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_t_uint256_to_t_uint256_fromStack": { - "entryPoint": 685, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": 648, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { - "entryPoint": 700, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ParachainStaking_$74__to_t_address__fromStack_reversed": { - "entryPoint": 588, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 872, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_storeLengthForEncoding_t_string_memory_ptr_fromStack": { - "entryPoint": 741, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "cleanup_t_address": { - "entryPoint": 615, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "cleanup_t_uint160": { - "entryPoint": 461, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "cleanup_t_uint256": { - "entryPoint": 675, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "convert_t_contract$_ParachainStaking_$74_to_t_address": { - "entryPoint": 555, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "convert_t_uint160_to_t_address": { - "entryPoint": 537, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "convert_t_uint160_to_t_uint160": { - "entryPoint": 503, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "identity": { - "entryPoint": 493, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255": { - "entryPoint": 758, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:3320:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "52:81:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "62:65:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "77:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "84:42:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "73:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "73:54:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "62:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint160", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "34:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "44:7:1", - "type": "" - } - ], - "src": "7:126:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "171:28:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "181:12:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "188:5:1" - }, - "variableNames": [ - { - "name": "ret", - "nodeType": "YulIdentifier", - "src": "181:3:1" - } - ] - } - ] - }, - "name": "identity", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "157:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "ret", - "nodeType": "YulTypedName", - "src": "167:3:1", - "type": "" - } - ], - "src": "139:60:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "265:82:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "275:66:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "333:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint160", - "nodeType": "YulIdentifier", - "src": "315:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "315:24:1" - } - ], - "functionName": { - "name": "identity", - "nodeType": "YulIdentifier", - "src": "306:8:1" - }, - "nodeType": "YulFunctionCall", - "src": "306:34:1" - } - ], - "functionName": { - "name": "cleanup_t_uint160", - "nodeType": "YulIdentifier", - "src": "288:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "288:53:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "275:9:1" - } - ] - } - ] - }, - "name": "convert_t_uint160_to_t_uint160", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "245:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "255:9:1", - "type": "" - } - ], - "src": "205:142:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "413:66:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "423:50:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "467:5:1" - } - ], - "functionName": { - "name": "convert_t_uint160_to_t_uint160", - "nodeType": "YulIdentifier", - "src": "436:30:1" - }, - "nodeType": "YulFunctionCall", - "src": "436:37:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "423:9:1" - } - ] - } - ] - }, - "name": "convert_t_uint160_to_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "393:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "403:9:1", - "type": "" - } - ], - "src": "353:126:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "568:66:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "578:50:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "622:5:1" - } - ], - "functionName": { - "name": "convert_t_uint160_to_t_address", - "nodeType": "YulIdentifier", - "src": "591:30:1" - }, - "nodeType": "YulFunctionCall", - "src": "591:37:1" - }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "578:9:1" - } - ] - } - ] - }, - "name": "convert_t_contract$_ParachainStaking_$74_to_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "548:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "558:9:1", - "type": "" - } - ], - "src": "485:149:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "728:89:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "745:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "804:5:1" - } - ], - "functionName": { - "name": "convert_t_contract$_ParachainStaking_$74_to_t_address", - "nodeType": "YulIdentifier", - "src": "750:53:1" - }, - "nodeType": "YulFunctionCall", - "src": "750:60:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "738:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "738:73:1" - }, - "nodeType": "YulExpressionStatement", - "src": "738:73:1" - } - ] - }, - "name": "abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "716:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "723:3:1", - "type": "" - } - ], - "src": "640:177:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "944:147:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "954:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "966:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "977:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "962:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "962:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "954:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1057:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1070:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1081:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1066:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1066:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack", - "nodeType": "YulIdentifier", - "src": "990:66:1" - }, - "nodeType": "YulFunctionCall", - "src": "990:94:1" - }, - "nodeType": "YulExpressionStatement", - "src": "990:94:1" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ParachainStaking_$74__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "916:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "928:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "939:4:1", - "type": "" - } - ], - "src": "823:268:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1142:51:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1152:35:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1181:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint160", - "nodeType": "YulIdentifier", - "src": "1163:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1163:24:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1152:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1124:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1134:7:1", - "type": "" - } - ], - "src": "1097:96:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1264:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1281:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1304:5:1" - } - ], - "functionName": { - "name": "cleanup_t_address", - "nodeType": "YulIdentifier", - "src": "1286:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1286:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1274:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1274:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1274:37:1" - } - ] - }, - "name": "abi_encode_t_address_to_t_address_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1252:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1259:3:1", - "type": "" - } - ], - "src": "1199:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1421:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1431:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1443:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1454:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1439:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1439:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1431:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1511:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1524:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1535:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1520:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1520:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_address_to_t_address_fromStack", - "nodeType": "YulIdentifier", - "src": "1467:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "1467:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1467:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1393:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1405:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1416:4:1", - "type": "" - } - ], - "src": "1323:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1596:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1606:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1617:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1606:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1578:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1588:7:1", - "type": "" - } - ], - "src": "1551:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1699:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "1716:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1739:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "1721:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1721:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1709:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "1709:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1709:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1687:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "1694:3:1", - "type": "" - } - ], - "src": "1634:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1884:206:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1894:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1906:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1917:2:1", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1902:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1902:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1894:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1974:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1987:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1998:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1983:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1983:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_address_to_t_address_fromStack", - "nodeType": "YulIdentifier", - "src": "1930:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "1930:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1930:71:1" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "2055:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2068:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2079:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2064:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2064:18:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "2011:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "2011:72:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2011:72:1" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1848:9:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "1860:6:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1868:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1879:4:1", - "type": "" - } - ], - "src": "1758:332:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2192:73:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2209:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "2214:6:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2202:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2202:19:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2202:19:1" - }, - { - "nodeType": "YulAssignment", - "src": "2230:29:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2249:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2254:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2245:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2245:14:1" - }, - "variableNames": [ - { - "name": "updated_pos", - "nodeType": "YulIdentifier", - "src": "2230:11:1" - } - ] - } - ] - }, - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2164:3:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2169:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "updated_pos", - "nodeType": "YulTypedName", - "src": "2180:11:1", - "type": "" - } - ], - "src": "2096:169:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2377:143:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2399:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2407:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2395:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2395:14:1" - }, - { - "hexValue": "427920726576657274696e672074686973207472616e73616374696f6e2c2077", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2411:34:1", - "type": "", - "value": "By reverting this transaction, w" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2388:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2388:58:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2388:58:1" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2467:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2475:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2463:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2463:15:1" - }, - { - "hexValue": "652072657475726e207468652065746820746f207468652063616c6c6572", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2480:32:1", - "type": "", - "value": "e return the eth to the caller" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2456:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2456:57:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2456:57:1" - } - ] - }, - "name": "store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "2369:6:1", - "type": "" - } - ], - "src": "2271:249:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2672:220:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2682:74:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2748:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2753:2:1", - "type": "", - "value": "62" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "2689:58:1" - }, - "nodeType": "YulFunctionCall", - "src": "2689:67:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2682:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2854:3:1" - } - ], - "functionName": { - "name": "store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255", - "nodeType": "YulIdentifier", - "src": "2765:88:1" - }, - "nodeType": "YulFunctionCall", - "src": "2765:93:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2765:93:1" - }, - { - "nodeType": "YulAssignment", - "src": "2867:19:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "2878:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2883:2:1", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2874:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2874:12:1" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "2867:3:1" - } - ] - } - ] - }, - "name": "abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "2660:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "2668:3:1", - "type": "" - } - ], - "src": "2526:366:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3069:248:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3079:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3091:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3102:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3087:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3087:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3079:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3126:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3137:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3122:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3122:17:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3145:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3151:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "3141:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3141:20:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3115:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "3115:47:1" - }, - "nodeType": "YulExpressionStatement", - "src": "3115:47:1" - }, - { - "nodeType": "YulAssignment", - "src": "3171:139:1", - "value": { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3305:4:1" - } - ], - "functionName": { - "name": "abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "3179:124:1" - }, - "nodeType": "YulFunctionCall", - "src": "3179:131:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3171:4:1" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3049:9:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3064:4:1", - "type": "" - } - ], - "src": "2898:419:1" - } - ] - }, - "contents": "{\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_ParachainStaking_$74_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_ParachainStaking_$74_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_ParachainStaking_$74__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_ParachainStaking_$74_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255(memPtr) {\n\n mstore(add(memPtr, 0), \"By reverting this transaction, w\")\n\n mstore(add(memPtr, 32), \"e return the eth to the caller\")\n\n }\n\n function abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 62)\n store_literal_in_memory_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_aa581a12dd742704a9cf58ab85712dcb55d611d3a92475052328f0de9c77f255_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600436106100345760003560e01c80634cf088d9146100395780638bed00da14610064578063d4b839921461006e575b600080fd5b34801561004557600080fd5b5061004e610099565b60405161005b919061024c565b60405180910390f35b61006c6100bf565b005b34801561007a57600080fd5b506100836101a9565b6040516100909190610288565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663026e402b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16346040518363ffffffff1660e01b815260040161013c9291906102bc565b600060405180830381600087803b15801561015657600080fd5b505af115801561016a573d6000803e3d6000fd5b505050506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101a090610368565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061021261020d610208846101cd565b6101ed565b6101cd565b9050919050565b6000610224826101f7565b9050919050565b600061023682610219565b9050919050565b6102468161022b565b82525050565b6000602082019050610261600083018461023d565b92915050565b6000610272826101cd565b9050919050565b61028281610267565b82525050565b600060208201905061029d6000830184610279565b92915050565b6000819050919050565b6102b6816102a3565b82525050565b60006040820190506102d16000830185610279565b6102de60208301846102ad565b9392505050565b600082825260208201905092915050565b7f427920726576657274696e672074686973207472616e73616374696f6e2c207760008201527f652072657475726e207468652065746820746f207468652063616c6c65720000602082015250565b6000610352603e836102e5565b915061035d826102f6565b604082019050919050565b6000602082019050818103600083015261038181610345565b905091905056fea264697066735822122097cecb2728f7bb7f01f12e5af920d72816fdbd8f056819751574f73756dfbfde64736f6c634300080a0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x4CF088D9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x8BED00DA EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xD4B83992 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4E PUSH2 0x99 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x24C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0xBF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x83 PUSH2 0x1A9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x90 SWAP2 SWAP1 PUSH2 0x288 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x26E402B PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLVALUE PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x13C SWAP3 SWAP2 SWAP1 PUSH2 0x2BC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP1 PUSH2 0x368 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x212 PUSH2 0x20D PUSH2 0x208 DUP5 PUSH2 0x1CD JUMP JUMPDEST PUSH2 0x1ED JUMP JUMPDEST PUSH2 0x1CD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x224 DUP3 PUSH2 0x1F7 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x236 DUP3 PUSH2 0x219 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x246 DUP2 PUSH2 0x22B JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x261 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x23D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x272 DUP3 PUSH2 0x1CD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x282 DUP2 PUSH2 0x267 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x29D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x279 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x2B6 DUP2 PUSH2 0x2A3 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x2D1 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x279 JUMP JUMPDEST PUSH2 0x2DE PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2AD JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x427920726576657274696E672074686973207472616E73616374696F6E2C2077 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x652072657475726E207468652065746820746F207468652063616C6C65720000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x352 PUSH1 0x3E DUP4 PUSH2 0x2E5 JUMP JUMPDEST SWAP2 POP PUSH2 0x35D DUP3 PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x381 DUP2 PUSH2 0x345 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 0xCE 0xCB 0x27 0x28 0xF7 0xBB PUSH32 0x1F12E5AF920D72816FDBD8F056819751574F73756DFBFDE64736F6C63430008 EXP STOP CALLER ", - "sourceMap": "2070:861:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2641:284;;;:::i;:::-;;2196:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2345:94;;;;;;;;;;;;;:::o;2641:284::-;2793:7;;;;;;;;;;;:16;;;2810:6;;;;;;;;;;2818:9;2793:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2842:72;;;;;;;;;;:::i;:::-;;;;;;;;2196:66;;;;;;;;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:60::-;167:3;188:5;181:12;;139:60;;;:::o;205:142::-;255:9;288:53;306:34;315:24;333:5;315:24;:::i;:::-;306:34;:::i;:::-;288:53;:::i;:::-;275:66;;205:142;;;:::o;353:126::-;403:9;436:37;467:5;436:37;:::i;:::-;423:50;;353:126;;;:::o;485:149::-;558:9;591:37;622:5;591:37;:::i;:::-;578:50;;485:149;;;:::o;640:177::-;750:60;804:5;750:60;:::i;:::-;745:3;738:73;640:177;;:::o;823:268::-;939:4;977:2;966:9;962:18;954:26;;990:94;1081:1;1070:9;1066:17;1057:6;990:94;:::i;:::-;823:268;;;;:::o;1097:96::-;1134:7;1163:24;1181:5;1163:24;:::i;:::-;1152:35;;1097:96;;;:::o;1199:118::-;1286:24;1304:5;1286:24;:::i;:::-;1281:3;1274:37;1199:118;;:::o;1323:222::-;1416:4;1454:2;1443:9;1439:18;1431:26;;1467:71;1535:1;1524:9;1520:17;1511:6;1467:71;:::i;:::-;1323:222;;;;:::o;1551:77::-;1588:7;1617:5;1606:16;;1551:77;;;:::o;1634:118::-;1721:24;1739:5;1721:24;:::i;:::-;1716:3;1709:37;1634:118;;:::o;1758:332::-;1879:4;1917:2;1906:9;1902:18;1894:26;;1930:71;1998:1;1987:9;1983:17;1974:6;1930:71;:::i;:::-;2011:72;2079:2;2068:9;2064:18;2055:6;2011:72;:::i;:::-;1758:332;;;;;:::o;2096:169::-;2180:11;2214:6;2209:3;2202:19;2254:4;2249:3;2245:14;2230:29;;2096:169;;;;:::o;2271:249::-;2411:34;2407:1;2399:6;2395:14;2388:58;2480:32;2475:2;2467:6;2463:15;2456:57;2271:249;:::o;2526:366::-;2668:3;2689:67;2753:2;2748:3;2689:67;:::i;:::-;2682:74;;2765:93;2854:3;2765:93;:::i;:::-;2883:2;2878:3;2874:12;2867:19;;2526:366;;;:::o;2898:419::-;3064:4;3102:2;3091:9;3087:18;3079:26;;3151:9;3145:4;3141:20;3137:1;3126:9;3122:17;3115:47;3179:131;3305:4;3179:131;:::i;:::-;3171:139;;2898:419;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "191600", - "executionCost": "48766", - "totalCost": "240366" - }, - "external": { - "score_a_free_delegation()": "infinite", - "staking()": "infinite", - "target()": "2533" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2070, "end": 2931, "name": "MSTORE", "source": 0 }, - { - "begin": 2220, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "F24FF3A9CF04C71DBC94D0B566F7A27B94566CAC" - }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2196, "end": 2262, "name": "DUP1", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2196, "end": 2262, "name": "EXP", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "DUP2", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SLOAD", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "DUP2", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2196, "end": 2262, "name": "MUL", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "NOT", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "AND", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SWAP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "DUP4", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2196, "end": 2262, "name": "AND", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "MUL", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "OR", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SWAP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SSTORE", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "POP", "source": 0 }, - { - "begin": 2396, - "end": 2438, - "name": "PUSH", - "source": 0, - "value": "800" - }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2345, "end": 2439, "name": "EXP", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "DUP2", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SLOAD", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "DUP2", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2345, "end": 2439, "name": "MUL", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "NOT", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "AND", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SWAP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "DUP4", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2345, "end": 2439, "name": "AND", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "MUL", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "OR", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SWAP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SSTORE", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "POP", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "CALLVALUE", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "DUP1", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "ISZERO", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 2070, "end": 2931, "name": "JUMPI", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2070, "end": 2931, "name": "DUP1", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "REVERT", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 2070, "end": 2931, "name": "JUMPDEST", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "POP", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 2070, "end": 2931, "name": "DUP1", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2070, "end": 2931, "name": "CODECOPY", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2070, "end": 2931, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122097cecb2728f7bb7f01f12e5af920d72816fdbd8f056819751574f73756dfbfde64736f6c634300080a0033", - ".code": [ - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2070, "end": 2931, "name": "MSTORE", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { - "begin": 2070, - "end": 2931, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 2070, "end": 2931, "name": "LT", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 2070, "end": 2931, "name": "JUMPI", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 2070, - "end": 2931, - "name": "CALLDATALOAD", - "source": 0 - }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 2070, "end": 2931, "name": "SHR", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "DUP1", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "4CF088D9" - }, - { "begin": 2070, "end": 2931, "name": "EQ", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 2070, "end": 2931, "name": "JUMPI", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "DUP1", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "8BED00DA" - }, - { "begin": 2070, "end": 2931, "name": "EQ", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 2070, "end": 2931, "name": "JUMPI", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "DUP1", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "D4B83992" - }, - { "begin": 2070, "end": 2931, "name": "EQ", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 2070, "end": 2931, "name": "JUMPI", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 2070, "end": 2931, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2070, - "end": 2931, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2070, "end": 2931, "name": "DUP1", "source": 0 }, - { "begin": 2070, "end": 2931, "name": "REVERT", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 2345, "end": 2439, "name": "JUMPDEST", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "CALLVALUE", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "DUP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "ISZERO", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 2345, "end": 2439, "name": "JUMPI", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2345, "end": 2439, "name": "DUP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "REVERT", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 2345, "end": 2439, "name": "JUMPDEST", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "POP", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 2345, - "end": 2439, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2345, - "end": 2439, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 2345, "end": 2439, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2345, "end": 2439, "name": "MLOAD", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 2345, "end": 2439, "name": "SWAP2", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SWAP1", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 2345, - "end": 2439, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2345, - "end": 2439, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 2345, "end": 2439, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2345, "end": 2439, "name": "MLOAD", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "DUP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SWAP2", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SUB", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SWAP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "RETURN", "source": 0 }, - { - "begin": 2641, - "end": 2925, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 2641, "end": 2925, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2641, - "end": 2925, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 2641, - "end": 2925, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { - "begin": 2641, - "end": 2925, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2641, - "end": 2925, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 2641, "end": 2925, "name": "JUMPDEST", "source": 0 }, - { "begin": 2641, "end": 2925, "name": "STOP", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 2196, "end": 2262, "name": "JUMPDEST", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "CALLVALUE", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "DUP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "ISZERO", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 2196, "end": 2262, "name": "JUMPI", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2196, "end": 2262, "name": "DUP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "REVERT", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 2196, "end": 2262, "name": "JUMPDEST", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "POP", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { - "begin": 2196, - "end": 2262, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2196, - "end": 2262, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 2196, "end": 2262, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2196, "end": 2262, "name": "MLOAD", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { "begin": 2196, "end": 2262, "name": "SWAP2", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SWAP1", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { - "begin": 2196, - "end": 2262, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2196, - "end": 2262, - "name": "tag", - "source": 0, - "value": "15" - }, - { "begin": 2196, "end": 2262, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2196, "end": 2262, "name": "MLOAD", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "DUP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SWAP2", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SUB", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SWAP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "RETURN", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 2345, "end": 2439, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2345, "end": 2439, "name": "SWAP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SLOAD", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SWAP1", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2345, "end": 2439, "name": "EXP", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "SWAP1", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "DIV", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2345, "end": 2439, "name": "AND", "source": 0 }, - { "begin": 2345, "end": 2439, "name": "DUP2", "source": 0 }, - { - "begin": 2345, - "end": 2439, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 2641, - "end": 2925, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 2641, "end": 2925, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2793, - "end": 2800, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 2793, - "end": 2800, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2793, "end": 2800, "name": "SWAP1", "source": 0 }, - { "begin": 2793, "end": 2800, "name": "SLOAD", "source": 0 }, - { "begin": 2793, "end": 2800, "name": "SWAP1", "source": 0 }, - { - "begin": 2793, - "end": 2800, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2793, "end": 2800, "name": "EXP", "source": 0 }, - { "begin": 2793, "end": 2800, "name": "SWAP1", "source": 0 }, - { "begin": 2793, "end": 2800, "name": "DIV", "source": 0 }, - { - "begin": 2793, - "end": 2800, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2793, "end": 2800, "name": "AND", "source": 0 }, - { - "begin": 2793, - "end": 2809, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2793, "end": 2809, "name": "AND", "source": 0 }, - { - "begin": 2793, - "end": 2809, - "name": "PUSH", - "source": 0, - "value": "26E402B" - }, - { - "begin": 2810, - "end": 2816, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2810, "end": 2816, "name": "DUP1", "source": 0 }, - { "begin": 2810, "end": 2816, "name": "SLOAD", "source": 0 }, - { "begin": 2810, "end": 2816, "name": "SWAP1", "source": 0 }, - { - "begin": 2810, - "end": 2816, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2810, "end": 2816, "name": "EXP", "source": 0 }, - { "begin": 2810, "end": 2816, "name": "SWAP1", "source": 0 }, - { "begin": 2810, "end": 2816, "name": "DIV", "source": 0 }, - { - "begin": 2810, - "end": 2816, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2810, "end": 2816, "name": "AND", "source": 0 }, - { "begin": 2818, "end": 2827, "name": "CALLVALUE", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2793, "end": 2828, "name": "MLOAD", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP4", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" - }, - { "begin": 2793, "end": 2828, "name": "AND", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 2793, "end": 2828, "name": "SHL", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP2", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "MSTORE", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 2793, "end": 2828, "name": "ADD", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { "begin": 2793, "end": 2828, "name": "SWAP3", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "SWAP2", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "SWAP1", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH [tag]", - "source": 0, - "value": "19" - }, - { - "begin": 2793, - "end": 2828, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2793, - "end": 2828, - "name": "tag", - "source": 0, - "value": "18" - }, - { "begin": 2793, "end": 2828, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2793, "end": 2828, "name": "MLOAD", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP1", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP4", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "SUB", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP2", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2793, "end": 2828, "name": "DUP8", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP1", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "EXTCODESIZE", - "source": 0 - }, - { "begin": 2793, "end": 2828, "name": "ISZERO", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP1", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "ISZERO", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH [tag]", - "source": 0, - "value": "20" - }, - { "begin": 2793, "end": 2828, "name": "JUMPI", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2793, "end": 2828, "name": "DUP1", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "REVERT", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "tag", - "source": 0, - "value": "20" - }, - { "begin": 2793, "end": 2828, "name": "JUMPDEST", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "POP", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "GAS", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "CALL", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "ISZERO", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "DUP1", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "ISZERO", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH [tag]", - "source": 0, - "value": "22" - }, - { "begin": 2793, "end": 2828, "name": "JUMPI", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "RETURNDATASIZE", - "source": 0 - }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2793, "end": 2828, "name": "DUP1", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "RETURNDATACOPY", - "source": 0 - }, - { - "begin": 2793, - "end": 2828, - "name": "RETURNDATASIZE", - "source": 0 - }, - { - "begin": 2793, - "end": 2828, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2793, "end": 2828, "name": "REVERT", "source": 0 }, - { - "begin": 2793, - "end": 2828, - "name": "tag", - "source": 0, - "value": "22" - }, - { "begin": 2793, "end": 2828, "name": "JUMPDEST", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "POP", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "POP", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "POP", "source": 0 }, - { "begin": 2793, "end": 2828, "name": "POP", "source": 0 }, - { - "begin": 2842, - "end": 2914, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2842, "end": 2914, "name": "MLOAD", "source": 0 }, - { - "begin": 2842, - "end": 2914, - "name": "PUSH", - "source": 0, - "value": "8C379A000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 2842, "end": 2914, "name": "DUP2", "source": 0 }, - { "begin": 2842, "end": 2914, "name": "MSTORE", "source": 0 }, - { - "begin": 2842, - "end": 2914, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 2842, "end": 2914, "name": "ADD", "source": 0 }, - { - "begin": 2842, - "end": 2914, - "name": "PUSH [tag]", - "source": 0, - "value": "23" - }, - { "begin": 2842, "end": 2914, "name": "SWAP1", "source": 0 }, - { - "begin": 2842, - "end": 2914, - "name": "PUSH [tag]", - "source": 0, - "value": "24" - }, - { - "begin": 2842, - "end": 2914, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 2842, - "end": 2914, - "name": "tag", - "source": 0, - "value": "23" - }, - { "begin": 2842, "end": 2914, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2842, - "end": 2914, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2842, "end": 2914, "name": "MLOAD", "source": 0 }, - { "begin": 2842, "end": 2914, "name": "DUP1", "source": 0 }, - { "begin": 2842, "end": 2914, "name": "SWAP2", "source": 0 }, - { "begin": 2842, "end": 2914, "name": "SUB", "source": 0 }, - { "begin": 2842, "end": 2914, "name": "SWAP1", "source": 0 }, - { "begin": 2842, "end": 2914, "name": "REVERT", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 2196, "end": 2262, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2196, "end": 2262, "name": "DUP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SLOAD", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SWAP1", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2196, "end": 2262, "name": "EXP", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "SWAP1", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "DIV", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2196, "end": 2262, "name": "AND", "source": 0 }, - { "begin": 2196, "end": 2262, "name": "DUP2", "source": 0 }, - { - "begin": 2196, - "end": 2262, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 133, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 7, "end": 133, "name": "JUMPDEST", "source": 1 }, - { - "begin": 44, - "end": 51, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 84, - "end": 126, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 77, "end": 82, "name": "DUP3", "source": 1 }, - { "begin": 73, "end": 127, "name": "AND", "source": 1 }, - { "begin": 62, "end": 127, "name": "SWAP1", "source": 1 }, - { "begin": 62, "end": 127, "name": "POP", "source": 1 }, - { "begin": 7, "end": 133, "name": "SWAP2", "source": 1 }, - { "begin": 7, "end": 133, "name": "SWAP1", "source": 1 }, - { "begin": 7, "end": 133, "name": "POP", "source": 1 }, - { - "begin": 7, - "end": 133, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 139, - "end": 199, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 139, "end": 199, "name": "JUMPDEST", "source": 1 }, - { - "begin": 167, - "end": 170, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 188, "end": 193, "name": "DUP2", "source": 1 }, - { "begin": 181, "end": 193, "name": "SWAP1", "source": 1 }, - { "begin": 181, "end": 193, "name": "POP", "source": 1 }, - { "begin": 139, "end": 199, "name": "SWAP2", "source": 1 }, - { "begin": 139, "end": 199, "name": "SWAP1", "source": 1 }, - { "begin": 139, "end": 199, "name": "POP", "source": 1 }, - { - "begin": 139, - "end": 199, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 205, - "end": 347, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 205, "end": 347, "name": "JUMPDEST", "source": 1 }, - { - "begin": 255, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 288, - "end": 341, - "name": "PUSH [tag]", - "source": 1, - "value": "42" - }, - { - "begin": 306, - "end": 340, - "name": "PUSH [tag]", - "source": 1, - "value": "43" - }, - { - "begin": 315, - "end": 339, - "name": "PUSH [tag]", - "source": 1, - "value": "44" - }, - { "begin": 333, "end": 338, "name": "DUP5", "source": 1 }, - { - "begin": 315, - "end": 339, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 315, - "end": 339, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 315, - "end": 339, - "name": "tag", - "source": 1, - "value": "44" - }, - { "begin": 315, "end": 339, "name": "JUMPDEST", "source": 1 }, - { - "begin": 306, - "end": 340, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 306, - "end": 340, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 306, - "end": 340, - "name": "tag", - "source": 1, - "value": "43" - }, - { "begin": 306, "end": 340, "name": "JUMPDEST", "source": 1 }, - { - "begin": 288, - "end": 341, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 288, - "end": 341, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 288, - "end": 341, - "name": "tag", - "source": 1, - "value": "42" - }, - { "begin": 288, "end": 341, "name": "JUMPDEST", "source": 1 }, - { "begin": 275, "end": 341, "name": "SWAP1", "source": 1 }, - { "begin": 275, "end": 341, "name": "POP", "source": 1 }, - { "begin": 205, "end": 347, "name": "SWAP2", "source": 1 }, - { "begin": 205, "end": 347, "name": "SWAP1", "source": 1 }, - { "begin": 205, "end": 347, "name": "POP", "source": 1 }, - { - "begin": 205, - "end": 347, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 353, - "end": 479, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 353, "end": 479, "name": "JUMPDEST", "source": 1 }, - { - "begin": 403, - "end": 412, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 436, - "end": 473, - "name": "PUSH [tag]", - "source": 1, - "value": "46" - }, - { "begin": 467, "end": 472, "name": "DUP3", "source": 1 }, - { - "begin": 436, - "end": 473, - "name": "PUSH [tag]", - "source": 1, - "value": "27" - }, - { - "begin": 436, - "end": 473, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 436, - "end": 473, - "name": "tag", - "source": 1, - "value": "46" - }, - { "begin": 436, "end": 473, "name": "JUMPDEST", "source": 1 }, - { "begin": 423, "end": 473, "name": "SWAP1", "source": 1 }, - { "begin": 423, "end": 473, "name": "POP", "source": 1 }, - { "begin": 353, "end": 479, "name": "SWAP2", "source": 1 }, - { "begin": 353, "end": 479, "name": "SWAP1", "source": 1 }, - { "begin": 353, "end": 479, "name": "POP", "source": 1 }, - { - "begin": 353, - "end": 479, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 485, - "end": 634, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 485, "end": 634, "name": "JUMPDEST", "source": 1 }, - { - "begin": 558, - "end": 567, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 591, - "end": 628, - "name": "PUSH [tag]", - "source": 1, - "value": "48" - }, - { "begin": 622, "end": 627, "name": "DUP3", "source": 1 }, - { - "begin": 591, - "end": 628, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { - "begin": 591, - "end": 628, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 591, - "end": 628, - "name": "tag", - "source": 1, - "value": "48" - }, - { "begin": 591, "end": 628, "name": "JUMPDEST", "source": 1 }, - { "begin": 578, "end": 628, "name": "SWAP1", "source": 1 }, - { "begin": 578, "end": 628, "name": "POP", "source": 1 }, - { "begin": 485, "end": 634, "name": "SWAP2", "source": 1 }, - { "begin": 485, "end": 634, "name": "SWAP1", "source": 1 }, - { "begin": 485, "end": 634, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 634, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 640, - "end": 817, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 640, "end": 817, "name": "JUMPDEST", "source": 1 }, - { - "begin": 750, - "end": 810, - "name": "PUSH [tag]", - "source": 1, - "value": "50" - }, - { "begin": 804, "end": 809, "name": "DUP2", "source": 1 }, - { - "begin": 750, - "end": 810, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { - "begin": 750, - "end": 810, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 750, - "end": 810, - "name": "tag", - "source": 1, - "value": "50" - }, - { "begin": 750, "end": 810, "name": "JUMPDEST", "source": 1 }, - { "begin": 745, "end": 748, "name": "DUP3", "source": 1 }, - { "begin": 738, "end": 811, "name": "MSTORE", "source": 1 }, - { "begin": 640, "end": 817, "name": "POP", "source": 1 }, - { "begin": 640, "end": 817, "name": "POP", "source": 1 }, - { - "begin": 640, - "end": 817, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 823, - "end": 1091, - "name": "tag", - "source": 1, - "value": "9" - }, - { "begin": 823, "end": 1091, "name": "JUMPDEST", "source": 1 }, - { - "begin": 939, - "end": 943, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 977, - "end": 979, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 966, "end": 975, "name": "DUP3", "source": 1 }, - { "begin": 962, "end": 980, "name": "ADD", "source": 1 }, - { "begin": 954, "end": 980, "name": "SWAP1", "source": 1 }, - { "begin": 954, "end": 980, "name": "POP", "source": 1 }, - { - "begin": 990, - "end": 1084, - "name": "PUSH [tag]", - "source": 1, - "value": "52" - }, - { - "begin": 1081, - "end": 1082, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1070, "end": 1079, "name": "DUP4", "source": 1 }, - { "begin": 1066, "end": 1083, "name": "ADD", "source": 1 }, - { "begin": 1057, "end": 1063, "name": "DUP5", "source": 1 }, - { - "begin": 990, - "end": 1084, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { - "begin": 990, - "end": 1084, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 990, - "end": 1084, - "name": "tag", - "source": 1, - "value": "52" - }, - { "begin": 990, "end": 1084, "name": "JUMPDEST", "source": 1 }, - { "begin": 823, "end": 1091, "name": "SWAP3", "source": 1 }, - { "begin": 823, "end": 1091, "name": "SWAP2", "source": 1 }, - { "begin": 823, "end": 1091, "name": "POP", "source": 1 }, - { "begin": 823, "end": 1091, "name": "POP", "source": 1 }, - { - "begin": 823, - "end": 1091, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1097, - "end": 1193, - "name": "tag", - "source": 1, - "value": "31" - }, - { "begin": 1097, "end": 1193, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1134, - "end": 1141, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1163, - "end": 1187, - "name": "PUSH [tag]", - "source": 1, - "value": "54" - }, - { "begin": 1181, "end": 1186, "name": "DUP3", "source": 1 }, - { - "begin": 1163, - "end": 1187, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 1163, - "end": 1187, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1163, - "end": 1187, - "name": "tag", - "source": 1, - "value": "54" - }, - { "begin": 1163, "end": 1187, "name": "JUMPDEST", "source": 1 }, - { "begin": 1152, "end": 1187, "name": "SWAP1", "source": 1 }, - { "begin": 1152, "end": 1187, "name": "POP", "source": 1 }, - { "begin": 1097, "end": 1193, "name": "SWAP2", "source": 1 }, - { "begin": 1097, "end": 1193, "name": "SWAP1", "source": 1 }, - { "begin": 1097, "end": 1193, "name": "POP", "source": 1 }, - { - "begin": 1097, - "end": 1193, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1199, - "end": 1317, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 1199, "end": 1317, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1286, - "end": 1310, - "name": "PUSH [tag]", - "source": 1, - "value": "56" - }, - { "begin": 1304, "end": 1309, "name": "DUP2", "source": 1 }, - { - "begin": 1286, - "end": 1310, - "name": "PUSH [tag]", - "source": 1, - "value": "31" - }, - { - "begin": 1286, - "end": 1310, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1286, - "end": 1310, - "name": "tag", - "source": 1, - "value": "56" - }, - { "begin": 1286, "end": 1310, "name": "JUMPDEST", "source": 1 }, - { "begin": 1281, "end": 1284, "name": "DUP3", "source": 1 }, - { "begin": 1274, "end": 1311, "name": "MSTORE", "source": 1 }, - { "begin": 1199, "end": 1317, "name": "POP", "source": 1 }, - { "begin": 1199, "end": 1317, "name": "POP", "source": 1 }, - { - "begin": 1199, - "end": 1317, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1323, - "end": 1545, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 1323, "end": 1545, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1416, - "end": 1420, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1454, - "end": 1456, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1443, "end": 1452, "name": "DUP3", "source": 1 }, - { "begin": 1439, "end": 1457, "name": "ADD", "source": 1 }, - { "begin": 1431, "end": 1457, "name": "SWAP1", "source": 1 }, - { "begin": 1431, "end": 1457, "name": "POP", "source": 1 }, - { - "begin": 1467, - "end": 1538, - "name": "PUSH [tag]", - "source": 1, - "value": "58" - }, - { - "begin": 1535, - "end": 1536, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1524, "end": 1533, "name": "DUP4", "source": 1 }, - { "begin": 1520, "end": 1537, "name": "ADD", "source": 1 }, - { "begin": 1511, "end": 1517, "name": "DUP5", "source": 1 }, - { - "begin": 1467, - "end": 1538, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 1467, - "end": 1538, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1467, - "end": 1538, - "name": "tag", - "source": 1, - "value": "58" - }, - { "begin": 1467, "end": 1538, "name": "JUMPDEST", "source": 1 }, - { "begin": 1323, "end": 1545, "name": "SWAP3", "source": 1 }, - { "begin": 1323, "end": 1545, "name": "SWAP2", "source": 1 }, - { "begin": 1323, "end": 1545, "name": "POP", "source": 1 }, - { "begin": 1323, "end": 1545, "name": "POP", "source": 1 }, - { - "begin": 1323, - "end": 1545, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1551, - "end": 1628, - "name": "tag", - "source": 1, - "value": "33" - }, - { "begin": 1551, "end": 1628, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1588, - "end": 1595, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1617, "end": 1622, "name": "DUP2", "source": 1 }, - { "begin": 1606, "end": 1622, "name": "SWAP1", "source": 1 }, - { "begin": 1606, "end": 1622, "name": "POP", "source": 1 }, - { "begin": 1551, "end": 1628, "name": "SWAP2", "source": 1 }, - { "begin": 1551, "end": 1628, "name": "SWAP1", "source": 1 }, - { "begin": 1551, "end": 1628, "name": "POP", "source": 1 }, - { - "begin": 1551, - "end": 1628, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1634, - "end": 1752, - "name": "tag", - "source": 1, - "value": "34" - }, - { "begin": 1634, "end": 1752, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1721, - "end": 1745, - "name": "PUSH [tag]", - "source": 1, - "value": "61" - }, - { "begin": 1739, "end": 1744, "name": "DUP2", "source": 1 }, - { - "begin": 1721, - "end": 1745, - "name": "PUSH [tag]", - "source": 1, - "value": "33" - }, - { - "begin": 1721, - "end": 1745, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1721, - "end": 1745, - "name": "tag", - "source": 1, - "value": "61" - }, - { "begin": 1721, "end": 1745, "name": "JUMPDEST", "source": 1 }, - { "begin": 1716, "end": 1719, "name": "DUP3", "source": 1 }, - { "begin": 1709, "end": 1746, "name": "MSTORE", "source": 1 }, - { "begin": 1634, "end": 1752, "name": "POP", "source": 1 }, - { "begin": 1634, "end": 1752, "name": "POP", "source": 1 }, - { - "begin": 1634, - "end": 1752, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1758, - "end": 2090, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 1758, "end": 2090, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1879, - "end": 1883, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1917, - "end": 1919, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 1906, "end": 1915, "name": "DUP3", "source": 1 }, - { "begin": 1902, "end": 1920, "name": "ADD", "source": 1 }, - { "begin": 1894, "end": 1920, "name": "SWAP1", "source": 1 }, - { "begin": 1894, "end": 1920, "name": "POP", "source": 1 }, - { - "begin": 1930, - "end": 2001, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 1998, - "end": 1999, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1987, "end": 1996, "name": "DUP4", "source": 1 }, - { "begin": 1983, "end": 2000, "name": "ADD", "source": 1 }, - { "begin": 1974, "end": 1980, "name": "DUP6", "source": 1 }, - { - "begin": 1930, - "end": 2001, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 1930, - "end": 2001, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1930, - "end": 2001, - "name": "tag", - "source": 1, - "value": "63" - }, - { "begin": 1930, "end": 2001, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2011, - "end": 2083, - "name": "PUSH [tag]", - "source": 1, - "value": "64" - }, - { - "begin": 2079, - "end": 2081, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 2068, "end": 2077, "name": "DUP4", "source": 1 }, - { "begin": 2064, "end": 2082, "name": "ADD", "source": 1 }, - { "begin": 2055, "end": 2061, "name": "DUP5", "source": 1 }, - { - "begin": 2011, - "end": 2083, - "name": "PUSH [tag]", - "source": 1, - "value": "34" - }, - { - "begin": 2011, - "end": 2083, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2011, - "end": 2083, - "name": "tag", - "source": 1, - "value": "64" - }, - { "begin": 2011, "end": 2083, "name": "JUMPDEST", "source": 1 }, - { "begin": 1758, "end": 2090, "name": "SWAP4", "source": 1 }, - { "begin": 1758, "end": 2090, "name": "SWAP3", "source": 1 }, - { "begin": 1758, "end": 2090, "name": "POP", "source": 1 }, - { "begin": 1758, "end": 2090, "name": "POP", "source": 1 }, - { "begin": 1758, "end": 2090, "name": "POP", "source": 1 }, - { - "begin": 1758, - "end": 2090, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2096, - "end": 2265, - "name": "tag", - "source": 1, - "value": "35" - }, - { "begin": 2096, "end": 2265, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2180, - "end": 2191, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2214, "end": 2220, "name": "DUP3", "source": 1 }, - { "begin": 2209, "end": 2212, "name": "DUP3", "source": 1 }, - { "begin": 2202, "end": 2221, "name": "MSTORE", "source": 1 }, - { - "begin": 2254, - "end": 2258, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 2249, "end": 2252, "name": "DUP3", "source": 1 }, - { "begin": 2245, "end": 2259, "name": "ADD", "source": 1 }, - { "begin": 2230, "end": 2259, "name": "SWAP1", "source": 1 }, - { "begin": 2230, "end": 2259, "name": "POP", "source": 1 }, - { "begin": 2096, "end": 2265, "name": "SWAP3", "source": 1 }, - { "begin": 2096, "end": 2265, "name": "SWAP2", "source": 1 }, - { "begin": 2096, "end": 2265, "name": "POP", "source": 1 }, - { "begin": 2096, "end": 2265, "name": "POP", "source": 1 }, - { - "begin": 2096, - "end": 2265, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2271, - "end": 2520, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 2271, "end": 2520, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2411, - "end": 2445, - "name": "PUSH", - "source": 1, - "value": "427920726576657274696E672074686973207472616E73616374696F6E2C2077" - }, - { - "begin": 2407, - "end": 2408, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2399, "end": 2405, "name": "DUP3", "source": 1 }, - { "begin": 2395, "end": 2409, "name": "ADD", "source": 1 }, - { "begin": 2388, "end": 2446, "name": "MSTORE", "source": 1 }, - { - "begin": 2480, - "end": 2512, - "name": "PUSH", - "source": 1, - "value": "652072657475726E207468652065746820746F207468652063616C6C65720000" - }, - { - "begin": 2475, - "end": 2477, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 2467, "end": 2473, "name": "DUP3", "source": 1 }, - { "begin": 2463, "end": 2478, "name": "ADD", "source": 1 }, - { "begin": 2456, "end": 2513, "name": "MSTORE", "source": 1 }, - { "begin": 2271, "end": 2520, "name": "POP", "source": 1 }, - { - "begin": 2271, - "end": 2520, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2526, - "end": 2892, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 2526, "end": 2892, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2668, - "end": 2671, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2689, - "end": 2756, - "name": "PUSH [tag]", - "source": 1, - "value": "68" - }, - { - "begin": 2753, - "end": 2755, - "name": "PUSH", - "source": 1, - "value": "3E" - }, - { "begin": 2748, "end": 2751, "name": "DUP4", "source": 1 }, - { - "begin": 2689, - "end": 2756, - "name": "PUSH [tag]", - "source": 1, - "value": "35" - }, - { - "begin": 2689, - "end": 2756, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2689, - "end": 2756, - "name": "tag", - "source": 1, - "value": "68" - }, - { "begin": 2689, "end": 2756, "name": "JUMPDEST", "source": 1 }, - { "begin": 2682, "end": 2756, "name": "SWAP2", "source": 1 }, - { "begin": 2682, "end": 2756, "name": "POP", "source": 1 }, - { - "begin": 2765, - "end": 2858, - "name": "PUSH [tag]", - "source": 1, - "value": "69" - }, - { "begin": 2854, "end": 2857, "name": "DUP3", "source": 1 }, - { - "begin": 2765, - "end": 2858, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { - "begin": 2765, - "end": 2858, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2765, - "end": 2858, - "name": "tag", - "source": 1, - "value": "69" - }, - { "begin": 2765, "end": 2858, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2883, - "end": 2885, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 2878, "end": 2881, "name": "DUP3", "source": 1 }, - { "begin": 2874, "end": 2886, "name": "ADD", "source": 1 }, - { "begin": 2867, "end": 2886, "name": "SWAP1", "source": 1 }, - { "begin": 2867, "end": 2886, "name": "POP", "source": 1 }, - { "begin": 2526, "end": 2892, "name": "SWAP2", "source": 1 }, - { "begin": 2526, "end": 2892, "name": "SWAP1", "source": 1 }, - { "begin": 2526, "end": 2892, "name": "POP", "source": 1 }, - { - "begin": 2526, - "end": 2892, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2898, - "end": 3317, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 2898, "end": 3317, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3064, - "end": 3068, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 3102, - "end": 3104, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 3091, "end": 3100, "name": "DUP3", "source": 1 }, - { "begin": 3087, "end": 3105, "name": "ADD", "source": 1 }, - { "begin": 3079, "end": 3105, "name": "SWAP1", "source": 1 }, - { "begin": 3079, "end": 3105, "name": "POP", "source": 1 }, - { "begin": 3151, "end": 3160, "name": "DUP2", "source": 1 }, - { "begin": 3145, "end": 3149, "name": "DUP2", "source": 1 }, - { "begin": 3141, "end": 3161, "name": "SUB", "source": 1 }, - { - "begin": 3137, - "end": 3138, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 3126, "end": 3135, "name": "DUP4", "source": 1 }, - { "begin": 3122, "end": 3139, "name": "ADD", "source": 1 }, - { "begin": 3115, "end": 3162, "name": "MSTORE", "source": 1 }, - { - "begin": 3179, - "end": 3310, - "name": "PUSH [tag]", - "source": 1, - "value": "71" - }, - { "begin": 3305, "end": 3309, "name": "DUP2", "source": 1 }, - { - "begin": 3179, - "end": 3310, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { - "begin": 3179, - "end": 3310, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3179, - "end": 3310, - "name": "tag", - "source": 1, - "value": "71" - }, - { "begin": 3179, "end": 3310, "name": "JUMPDEST", "source": 1 }, - { "begin": 3171, "end": 3310, "name": "SWAP1", "source": 1 }, - { "begin": 3171, "end": 3310, "name": "POP", "source": 1 }, - { "begin": 2898, "end": 3317, "name": "SWAP2", "source": 1 }, - { "begin": 2898, "end": 3317, "name": "SWAP1", "source": 1 }, - { "begin": 2898, "end": 3317, "name": "POP", "source": 1 }, - { - "begin": 2898, - "end": 3317, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "score_a_free_delegation()": "8bed00da", - "staking()": "4cf088d9", - "target()": "d4b83992" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"score_a_free_delegation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"staking\",\"outputs\":[{\"internalType\":\"contract ParachainStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"target\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"score_a_free_delegation()\":{\"notice\":\"Take advantage of the EVMs reversion logic and the fact that it doesn't extend to Substrate storage to score free delegations for a collator candidate of our choosing\"},\"staking()\":{\"notice\":\"The ParachainStaking wrapper at the known pre-compile address.\"},\"target()\":{\"notice\":\"The collator (ALITH) that this contract will benefit with delegations\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"StakingDelegationAttaker\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x9a578b2e2c398c41c9297f44278631fe06fa2267399fbdf2c9d0bb879d41f6af\",\"urls\":[\"bzz-raw://190fb9b5cf0c7c729378bc4872c88730b84af15ad95c7625727eb0e9d600065f\",\"dweb:/ipfs/QmdTz1em9bg7WBPsurAE9T5L5U8LoRkzHTXGUK6yKSH119\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 78, - "contract": "main.sol:StakingDelegationAttaker", - "label": "target", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 85, - "contract": "main.sol:StakingDelegationAttaker", - "label": "staking", - "offset": 0, - "slot": "1", - "type": "t_contract(ParachainStaking)74" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_contract(ParachainStaking)74": { - "encoding": "inplace", - "label": "contract ParachainStaking", - "numberOfBytes": "20" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "score_a_free_delegation()": { - "notice": "Take advantage of the EVMs reversion logic and the fact that it doesn't extend to Substrate storage to score free delegations for a collator candidate of our choosing" - }, - "staking()": { - "notice": "The ParachainStaking wrapper at the known pre-compile address." - }, - "target()": { - "notice": "The collator (ALITH) that this contract will benefit with delegations" - } - }, - "version": 1 - } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n\n interface ParachainStaking {\n // First some simple accessors\n \n /// Check whether the specified address is currently a staking delegator\n function is_delegator(address) external view returns (bool);\n \n // Now the dispatchables\n \n /// Join the set of collator candidates\n function join_candidates(uint256 amount) external;\n \n /// Request to leave the set of candidates. If successful, the account is immediately\n /// removed from the candidate pool to prevent selection as a collator, but unbonding is\n /// executed with a delay of BondDuration rounds.\n function schedule_leave_candidates() external;\n \n /// Temporarily leave the set of collator candidates without unbonding\n function go_offline() external;\n \n /// Rejoin the set of collator candidates if previously had called go_offline\n function go_online() external;\n \n /// Bond more for collator candidates\n function schedule_candidate_bond_more(uint256 more) external;\n \n /// Bond less for collator candidates\n function schedule_candidate_bond_less(uint256 less) external;\n \n /// If caller is not a delegator, then join the set of delegators\n /// If caller is a delegator, then makes delegation to change their delegation state\n function delegate(address collator, uint256 amount) external;\n \n /// Leave the set of delegators and, by implication, revoke all ongoing delegations\n function schedule_leave_delegators() external;\n \n /// Revoke an existing delegation\n function revoke_delegation(address candidate) external;\n \n /// Bond more for delegators with respect to a specific collator candidate\n function delegator_bond_more(address candidate, uint256 more) external;\n \n /// Bond less for delegators with respect to a specific collator candidate\n function delegator_bond_less(address candidate, uint256 less) external;\n }\n\n contract StakingDelegationAttaker {\n /// The collator (ALITH) that this contract will benefit with delegations\n address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac; \n\n /// The ParachainStaking wrapper at the known pre-compile address.\n ParachainStaking public staking = ParachainStaking(0x0000000000000000000000000000000000000800);\n\n /// Take advantage of the EVMs reversion logic and the fact that it doesn't extend to\n /// Substrate storage to score free delegations for a collator candidate of our choosing\n function score_a_free_delegation() public payable{\n \n // We delegate our target collator with all the tokens provided\n staking.delegate(target, msg.value);\n revert(\"By reverting this transaction, we return the eth to the caller\");\n }\n }" -} diff --git a/tests/contracts/compiled/StorageBloater.json b/tests/contracts/compiled/StorageBloater.json deleted file mode 100644 index d25a6a0315..0000000000 --- a/tests/contracts/compiled/StorageBloater.json +++ /dev/null @@ -1,4543 +0,0 @@ -{ - "byteCode": "0x6080604052600060015534801561001557600080fd5b5061040e806100256000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806356f510a914610046578063b5ee966014610062578063d9a902b414610092575b600080fd5b610060600480360381019061005b919061020d565b6100ae565b005b61007c600480360381019061007791906101a0565b61010a565b604051610089919061026f565b60405180910390f35b6100ac60048036038101906100a791906101cd565b610122565b005b60005b828110156101045781816100c591906102e0565b846100d0919061028a565b60008083876100df919061028a565b81526020019081526020016000208190555080806100fc90610344565b9150506100b1565b50505050565b60006020528060005260406000206000915090505481565b6000805b8281101561016c57600080828661013d919061028a565b81526020019081526020016000205482610157919061028a565b9150808061016490610344565b915050610126565b50806001600082825461017f919061028a565b92505081905550505050565b60008135905061019a816103c1565b92915050565b6000602082840312156101b6576101b56103bc565b5b60006101c48482850161018b565b91505092915050565b600080604083850312156101e4576101e36103bc565b5b60006101f28582860161018b565b92505060206102038582860161018b565b9150509250929050565b600080600060608486031215610226576102256103bc565b5b60006102348682870161018b565b93505060206102458682870161018b565b92505060406102568682870161018b565b9150509250925092565b6102698161033a565b82525050565b60006020820190506102846000830184610260565b92915050565b60006102958261033a565b91506102a08361033a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156102d5576102d461038d565b5b828201905092915050565b60006102eb8261033a565b91506102f68361033a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561032f5761032e61038d565b5b828202905092915050565b6000819050919050565b600061034f8261033a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103825761038161038d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6103ca8161033a565b81146103d557600080fd5b5056fea2646970667358221220abec915f4f93ce2b1d8fce7509c4a05914401e30a8ad5f58d6aef8baf7fc905864736f6c63430008060033", - "contract": { - "abi": [ - { - "inputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "name": "bloat", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "start", "type": "uint256" }, - { "internalType": "uint256", "name": "num_items", "type": "uint256" }, - { "internalType": "uint256", "name": "seed", "type": "uint256" } - ], - "name": "bloat_storage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "start", "type": "uint256" }, - { "internalType": "uint256", "name": "num_items", "type": "uint256" } - ], - "name": "calculate_sum", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":34:522 contract StorageBloater {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":122:123 0 */\n 0x00\n /* \"main.sol\":108:123 uint256 sum = 0 */\n 0x01\n sstore\n /* \"main.sol\":34:522 contract StorageBloater {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:522 contract StorageBloater {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x56f510a9\n eq\n tag_3\n jumpi\n dup1\n 0xb5ee9660\n eq\n tag_4\n jumpi\n dup1\n 0xd9a902b4\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":132:310 function bloat_storage(uint start, uint num_items, uint seed) public {... */\n tag_3:\n tag_6\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n tag_9\n jump\t// in\n tag_6:\n stop\n /* \"main.sol\":66:100 mapping(uint => uint) public bloat */\n tag_4:\n tag_10\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n tag_13\n jump\t// in\n tag_10:\n mload(0x40)\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":318:516 function calculate_sum(uint start, uint num_items) public {... */\n tag_5:\n tag_16\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_17\n swap2\n swap1\n tag_18\n jump\t// in\n tag_17:\n tag_19\n jump\t// in\n tag_16:\n stop\n /* \"main.sol\":132:310 function bloat_storage(uint start, uint num_items, uint seed) public {... */\n tag_9:\n /* \"main.sol\":216:222 uint i */\n 0x00\n /* \"main.sol\":211:302 for (uint i=0; i uint) public bloat */\n tag_13:\n mstore(0x20, 0x00)\n dup1\n 0x00\n mstore\n keccak256(0x00, 0x40)\n 0x00\n swap2\n pop\n swap1\n pop\n sload\n dup2\n jump\t// out\n /* \"main.sol\":318:516 function calculate_sum(uint start, uint num_items) public {... */\n tag_19:\n /* \"main.sol\":386:397 uint256 tmp */\n 0x00\n /* \"main.sol\":416:422 uint i */\n dup1\n /* \"main.sol\":411:488 for (uint i=0; i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_uint256t_uint256t_uint256(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function increment_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c806356f510a914610046578063b5ee966014610062578063d9a902b414610092575b600080fd5b610060600480360381019061005b919061020d565b6100ae565b005b61007c600480360381019061007791906101a0565b61010a565b604051610089919061026f565b60405180910390f35b6100ac60048036038101906100a791906101cd565b610122565b005b60005b828110156101045781816100c591906102e0565b846100d0919061028a565b60008083876100df919061028a565b81526020019081526020016000208190555080806100fc90610344565b9150506100b1565b50505050565b60006020528060005260406000206000915090505481565b6000805b8281101561016c57600080828661013d919061028a565b81526020019081526020016000205482610157919061028a565b9150808061016490610344565b915050610126565b50806001600082825461017f919061028a565b92505081905550505050565b60008135905061019a816103c1565b92915050565b6000602082840312156101b6576101b56103bc565b5b60006101c48482850161018b565b91505092915050565b600080604083850312156101e4576101e36103bc565b5b60006101f28582860161018b565b92505060206102038582860161018b565b9150509250929050565b600080600060608486031215610226576102256103bc565b5b60006102348682870161018b565b93505060206102458682870161018b565b92505060406102568682870161018b565b9150509250925092565b6102698161033a565b82525050565b60006020820190506102846000830184610260565b92915050565b60006102958261033a565b91506102a08361033a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156102d5576102d461038d565b5b828201905092915050565b60006102eb8261033a565b91506102f68361033a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561032f5761032e61038d565b5b828202905092915050565b6000819050919050565b600061034f8261033a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103825761038161038d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6103ca8161033a565b81146103d557600080fd5b5056fea2646970667358221220abec915f4f93ce2b1d8fce7509c4a05914401e30a8ad5f58d6aef8baf7fc905864736f6c63430008060033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x56F510A9 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xB5EE9660 EQ PUSH2 0x62 JUMPI DUP1 PUSH4 0xD9A902B4 EQ PUSH2 0x92 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x60 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x20D JUMP JUMPDEST PUSH2 0xAE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x77 SWAP2 SWAP1 PUSH2 0x1A0 JUMP JUMPDEST PUSH2 0x10A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x89 SWAP2 SWAP1 PUSH2 0x26F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xAC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xA7 SWAP2 SWAP1 PUSH2 0x1CD JUMP JUMPDEST PUSH2 0x122 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x104 JUMPI DUP2 DUP2 PUSH2 0xC5 SWAP2 SWAP1 PUSH2 0x2E0 JUMP JUMPDEST DUP5 PUSH2 0xD0 SWAP2 SWAP1 PUSH2 0x28A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 DUP8 PUSH2 0xDF SWAP2 SWAP1 PUSH2 0x28A JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 DUP1 PUSH2 0xFC SWAP1 PUSH2 0x344 JUMP JUMPDEST SWAP2 POP POP PUSH2 0xB1 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SWAP1 POP SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x16C JUMPI PUSH1 0x0 DUP1 DUP3 DUP7 PUSH2 0x13D SWAP2 SWAP1 PUSH2 0x28A JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD DUP3 PUSH2 0x157 SWAP2 SWAP1 PUSH2 0x28A JUMP JUMPDEST SWAP2 POP DUP1 DUP1 PUSH2 0x164 SWAP1 PUSH2 0x344 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x126 JUMP JUMPDEST POP DUP1 PUSH1 0x1 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x17F SWAP2 SWAP1 PUSH2 0x28A JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x19A DUP2 PUSH2 0x3C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1B6 JUMPI PUSH2 0x1B5 PUSH2 0x3BC JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1C4 DUP5 DUP3 DUP6 ADD PUSH2 0x18B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1E4 JUMPI PUSH2 0x1E3 PUSH2 0x3BC JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1F2 DUP6 DUP3 DUP7 ADD PUSH2 0x18B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x203 DUP6 DUP3 DUP7 ADD PUSH2 0x18B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x226 JUMPI PUSH2 0x225 PUSH2 0x3BC JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x234 DUP7 DUP3 DUP8 ADD PUSH2 0x18B JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x245 DUP7 DUP3 DUP8 ADD PUSH2 0x18B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x256 DUP7 DUP3 DUP8 ADD PUSH2 0x18B JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH2 0x269 DUP2 PUSH2 0x33A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x284 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x260 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x295 DUP3 PUSH2 0x33A JUMP JUMPDEST SWAP2 POP PUSH2 0x2A0 DUP4 PUSH2 0x33A JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x2D5 JUMPI PUSH2 0x2D4 PUSH2 0x38D JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EB DUP3 PUSH2 0x33A JUMP JUMPDEST SWAP2 POP PUSH2 0x2F6 DUP4 PUSH2 0x33A JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x32F JUMPI PUSH2 0x32E PUSH2 0x38D JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34F DUP3 PUSH2 0x33A JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 EQ ISZERO PUSH2 0x382 JUMPI PUSH2 0x381 PUSH2 0x38D JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3CA DUP2 PUSH2 0x33A JUMP JUMPDEST DUP2 EQ PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB 0xEC SWAP2 0x5F 0x4F SWAP4 0xCE 0x2B SAR DUP16 0xCE PUSH22 0x9C4A05914401E30A8AD5F58D6AEF8BAF7FC90586473 PUSH16 0x6C634300080600330000000000000000 ", - "sourceMap": "34:488:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;132:178;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;66:34;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;318:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;132:178;216:6;211:91;228:9;226:1;:11;211:91;;;287:4;283:1;:8;;;;:::i;:::-;275:5;:16;;;;:::i;:::-;256:5;:16;270:1;262:5;:9;;;;:::i;:::-;256:16;;;;;;;;;;;:35;;;;239:3;;;;;:::i;:::-;;;;211:91;;;;132:178;;;:::o;66:34::-;;;;;;;;;;;;;;;;;:::o;318:198::-;386:11;416:6;411:77;428:9;426:1;:11;411:77;;;463:5;:14;475:1;469:5;:7;;;;:::i;:::-;463:14;;;;;;;;;;;;456:21;;;;;:::i;:::-;;;439:3;;;;;:::i;:::-;;;;411:77;;;;504:3;497;;:10;;;;;;;:::i;:::-;;;;;;;;376:140;318:198;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:329::-;211:6;260:2;248:9;239:7;235:23;231:32;228:2;;;266:79;;:::i;:::-;228:2;386:1;411:53;456:7;447:6;436:9;432:22;411:53;:::i;:::-;401:63;;357:117;218:263;;;;:::o;487:474::-;555:6;563;612:2;600:9;591:7;587:23;583:32;580:2;;;618:79;;:::i;:::-;580:2;738:1;763:53;808:7;799:6;788:9;784:22;763:53;:::i;:::-;753:63;;709:117;865:2;891:53;936:7;927:6;916:9;912:22;891:53;:::i;:::-;881:63;;836:118;570:391;;;;;:::o;967:619::-;1044:6;1052;1060;1109:2;1097:9;1088:7;1084:23;1080:32;1077:2;;;1115:79;;:::i;:::-;1077:2;1235:1;1260:53;1305:7;1296:6;1285:9;1281:22;1260:53;:::i;:::-;1250:63;;1206:117;1362:2;1388:53;1433:7;1424:6;1413:9;1409:22;1388:53;:::i;:::-;1378:63;;1333:118;1490:2;1516:53;1561:7;1552:6;1541:9;1537:22;1516:53;:::i;:::-;1506:63;;1461:118;1067:519;;;;;:::o;1592:118::-;1679:24;1697:5;1679:24;:::i;:::-;1674:3;1667:37;1657:53;;:::o;1716:222::-;1809:4;1847:2;1836:9;1832:18;1824:26;;1860:71;1928:1;1917:9;1913:17;1904:6;1860:71;:::i;:::-;1814:124;;;;:::o;2025:305::-;2065:3;2084:20;2102:1;2084:20;:::i;:::-;2079:25;;2118:20;2136:1;2118:20;:::i;:::-;2113:25;;2272:1;2204:66;2200:74;2197:1;2194:81;2191:2;;;2278:18;;:::i;:::-;2191:2;2322:1;2319;2315:9;2308:16;;2069:261;;;;:::o;2336:348::-;2376:7;2399:20;2417:1;2399:20;:::i;:::-;2394:25;;2433:20;2451:1;2433:20;:::i;:::-;2428:25;;2621:1;2553:66;2549:74;2546:1;2543:81;2538:1;2531:9;2524:17;2520:105;2517:2;;;2628:18;;:::i;:::-;2517:2;2676:1;2673;2669:9;2658:20;;2384:300;;;;:::o;2690:77::-;2727:7;2756:5;2745:16;;2735:32;;;:::o;2773:233::-;2812:3;2835:24;2853:5;2835:24;:::i;:::-;2826:33;;2881:66;2874:5;2871:77;2868:2;;;2951:18;;:::i;:::-;2868:2;2998:1;2991:5;2987:13;2980:20;;2816:190;;;:::o;3012:180::-;3060:77;3057:1;3050:88;3157:4;3154:1;3147:15;3181:4;3178:1;3171:15;3321:117;3430:1;3427;3420:12;3444:122;3517:24;3535:5;3517:24;:::i;:::-;3510:5;3507:35;3497:2;;3556:1;3553;3546:12;3497:2;3487:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "207600", - "executionCost": "5257", - "totalCost": "212857" - }, - "external": { - "bloat(uint256)": "infinite", - "bloat_storage(uint256,uint256,uint256)": "infinite", - "calculate_sum(uint256,uint256)": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 522, "name": "MSTORE", "source": 0 }, - { - "begin": 122, - "end": 123, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 108, - "end": 123, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { "begin": 108, "end": 123, "name": "SSTORE", "source": 0 }, - { "begin": 34, "end": 522, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 522, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 522, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 522, "name": "REVERT", "source": 0 }, - { "begin": 34, "end": 522, "name": "tag", "source": 0, "value": "1" }, - { "begin": 34, "end": 522, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 522, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 522, "name": "CODECOPY", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 522, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220abec915f4f93ce2b1d8fce7509c4a05914401e30a8ad5f58d6aef8baf7fc905864736f6c63430008060033", - ".code": [ - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 522, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 522, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 522, "name": "ISZERO", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 522, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 522, "name": "REVERT", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 34, "end": 522, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 522, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 522, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 522, "name": "LT", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 522, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 522, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 34, "end": 522, "name": "SHR", "source": 0 }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "56F510A9" - }, - { "begin": 34, "end": 522, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 34, "end": 522, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "B5EE9660" - }, - { "begin": 34, "end": 522, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 34, "end": 522, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "D9A902B4" - }, - { "begin": 34, "end": 522, "name": "EQ", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 34, "end": 522, "name": "JUMPI", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 34, "end": 522, "name": "JUMPDEST", "source": 0 }, - { - "begin": 34, - "end": 522, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 34, "end": 522, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 522, "name": "REVERT", "source": 0 }, - { - "begin": 132, - "end": 310, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 132, "end": 310, "name": "JUMPDEST", "source": 0 }, - { - "begin": 132, - "end": 310, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 132, - "end": 310, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 132, "end": 310, "name": "DUP1", "source": 0 }, - { "begin": 132, "end": 310, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 132, "end": 310, "name": "SUB", "source": 0 }, - { "begin": 132, "end": 310, "name": "DUP2", "source": 0 }, - { "begin": 132, "end": 310, "name": "ADD", "source": 0 }, - { "begin": 132, "end": 310, "name": "SWAP1", "source": 0 }, - { - "begin": 132, - "end": 310, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 132, "end": 310, "name": "SWAP2", "source": 0 }, - { "begin": 132, "end": 310, "name": "SWAP1", "source": 0 }, - { - "begin": 132, - "end": 310, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 132, - "end": 310, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 132, - "end": 310, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 132, "end": 310, "name": "JUMPDEST", "source": 0 }, - { - "begin": 132, - "end": 310, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 132, - "end": 310, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 132, - "end": 310, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 132, "end": 310, "name": "JUMPDEST", "source": 0 }, - { "begin": 132, "end": 310, "name": "STOP", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 66, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 66, "end": 100, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 100, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 66, "end": 100, "name": "SUB", "source": 0 }, - { "begin": 66, "end": 100, "name": "DUP2", "source": 0 }, - { "begin": 66, "end": 100, "name": "ADD", "source": 0 }, - { "begin": 66, "end": 100, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 66, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 100, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 66, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 100, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 66, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { - "begin": 66, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 100, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 66, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 66, "end": 100, "name": "MLOAD", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "14" - }, - { "begin": 66, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 100, "name": "SWAP1", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH [tag]", - "source": 0, - "value": "15" - }, - { - "begin": 66, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 66, - "end": 100, - "name": "tag", - "source": 0, - "value": "14" - }, - { "begin": 66, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 66, "end": 100, "name": "MLOAD", "source": 0 }, - { "begin": 66, "end": 100, "name": "DUP1", "source": 0 }, - { "begin": 66, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 100, "name": "SUB", "source": 0 }, - { "begin": 66, "end": 100, "name": "SWAP1", "source": 0 }, - { "begin": 66, "end": 100, "name": "RETURN", "source": 0 }, - { - "begin": 318, - "end": 516, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 318, "end": 516, "name": "JUMPDEST", "source": 0 }, - { - "begin": 318, - "end": 516, - "name": "PUSH [tag]", - "source": 0, - "value": "16" - }, - { - "begin": 318, - "end": 516, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 318, "end": 516, "name": "DUP1", "source": 0 }, - { "begin": 318, "end": 516, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 318, "end": 516, "name": "SUB", "source": 0 }, - { "begin": 318, "end": 516, "name": "DUP2", "source": 0 }, - { "begin": 318, "end": 516, "name": "ADD", "source": 0 }, - { "begin": 318, "end": 516, "name": "SWAP1", "source": 0 }, - { - "begin": 318, - "end": 516, - "name": "PUSH [tag]", - "source": 0, - "value": "17" - }, - { "begin": 318, "end": 516, "name": "SWAP2", "source": 0 }, - { "begin": 318, "end": 516, "name": "SWAP1", "source": 0 }, - { - "begin": 318, - "end": 516, - "name": "PUSH [tag]", - "source": 0, - "value": "18" - }, - { - "begin": 318, - "end": 516, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 318, - "end": 516, - "name": "tag", - "source": 0, - "value": "17" - }, - { "begin": 318, "end": 516, "name": "JUMPDEST", "source": 0 }, - { - "begin": 318, - "end": 516, - "name": "PUSH [tag]", - "source": 0, - "value": "19" - }, - { - "begin": 318, - "end": 516, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 318, - "end": 516, - "name": "tag", - "source": 0, - "value": "16" - }, - { "begin": 318, "end": 516, "name": "JUMPDEST", "source": 0 }, - { "begin": 318, "end": 516, "name": "STOP", "source": 0 }, - { - "begin": 132, - "end": 310, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 132, "end": 310, "name": "JUMPDEST", "source": 0 }, - { - "begin": 216, - "end": 222, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 211, - "end": 302, - "name": "tag", - "source": 0, - "value": "21" - }, - { "begin": 211, "end": 302, "name": "JUMPDEST", "source": 0 }, - { "begin": 228, "end": 237, "name": "DUP3", "source": 0 }, - { "begin": 226, "end": 227, "name": "DUP2", "source": 0 }, - { "begin": 226, "end": 237, "name": "LT", "source": 0 }, - { "begin": 211, "end": 302, "name": "ISZERO", "source": 0 }, - { - "begin": 211, - "end": 302, - "name": "PUSH [tag]", - "source": 0, - "value": "22" - }, - { "begin": 211, "end": 302, "name": "JUMPI", "source": 0 }, - { "begin": 287, "end": 291, "name": "DUP2", "source": 0 }, - { "begin": 283, "end": 284, "name": "DUP2", "source": 0 }, - { - "begin": 283, - "end": 291, - "name": "PUSH [tag]", - "source": 0, - "value": "24" - }, - { "begin": 283, "end": 291, "name": "SWAP2", "source": 0 }, - { "begin": 283, "end": 291, "name": "SWAP1", "source": 0 }, - { - "begin": 283, - "end": 291, - "name": "PUSH [tag]", - "source": 0, - "value": "25" - }, - { - "begin": 283, - "end": 291, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 283, - "end": 291, - "name": "tag", - "source": 0, - "value": "24" - }, - { "begin": 283, "end": 291, "name": "JUMPDEST", "source": 0 }, - { "begin": 275, "end": 280, "name": "DUP5", "source": 0 }, - { - "begin": 275, - "end": 291, - "name": "PUSH [tag]", - "source": 0, - "value": "26" - }, - { "begin": 275, "end": 291, "name": "SWAP2", "source": 0 }, - { "begin": 275, "end": 291, "name": "SWAP1", "source": 0 }, - { - "begin": 275, - "end": 291, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { - "begin": 275, - "end": 291, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 275, - "end": 291, - "name": "tag", - "source": 0, - "value": "26" - }, - { "begin": 275, "end": 291, "name": "JUMPDEST", "source": 0 }, - { - "begin": 256, - "end": 261, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 256, "end": 272, "name": "DUP1", "source": 0 }, - { "begin": 270, "end": 271, "name": "DUP4", "source": 0 }, - { "begin": 262, "end": 267, "name": "DUP8", "source": 0 }, - { - "begin": 262, - "end": 271, - "name": "PUSH [tag]", - "source": 0, - "value": "28" - }, - { "begin": 262, "end": 271, "name": "SWAP2", "source": 0 }, - { "begin": 262, "end": 271, "name": "SWAP1", "source": 0 }, - { - "begin": 262, - "end": 271, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { - "begin": 262, - "end": 271, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 262, - "end": 271, - "name": "tag", - "source": 0, - "value": "28" - }, - { "begin": 262, "end": 271, "name": "JUMPDEST", "source": 0 }, - { "begin": 256, "end": 272, "name": "DUP2", "source": 0 }, - { "begin": 256, "end": 272, "name": "MSTORE", "source": 0 }, - { - "begin": 256, - "end": 272, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 256, "end": 272, "name": "ADD", "source": 0 }, - { "begin": 256, "end": 272, "name": "SWAP1", "source": 0 }, - { "begin": 256, "end": 272, "name": "DUP2", "source": 0 }, - { "begin": 256, "end": 272, "name": "MSTORE", "source": 0 }, - { - "begin": 256, - "end": 272, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 256, "end": 272, "name": "ADD", "source": 0 }, - { - "begin": 256, - "end": 272, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 256, "end": 272, "name": "KECCAK256", "source": 0 }, - { "begin": 256, "end": 291, "name": "DUP2", "source": 0 }, - { "begin": 256, "end": 291, "name": "SWAP1", "source": 0 }, - { "begin": 256, "end": 291, "name": "SSTORE", "source": 0 }, - { "begin": 256, "end": 291, "name": "POP", "source": 0 }, - { "begin": 239, "end": 242, "name": "DUP1", "source": 0 }, - { "begin": 239, "end": 242, "name": "DUP1", "source": 0 }, - { - "begin": 239, - "end": 242, - "name": "PUSH [tag]", - "source": 0, - "value": "29" - }, - { "begin": 239, "end": 242, "name": "SWAP1", "source": 0 }, - { - "begin": 239, - "end": 242, - "name": "PUSH [tag]", - "source": 0, - "value": "30" - }, - { - "begin": 239, - "end": 242, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 239, - "end": 242, - "name": "tag", - "source": 0, - "value": "29" - }, - { "begin": 239, "end": 242, "name": "JUMPDEST", "source": 0 }, - { "begin": 239, "end": 242, "name": "SWAP2", "source": 0 }, - { "begin": 239, "end": 242, "name": "POP", "source": 0 }, - { "begin": 239, "end": 242, "name": "POP", "source": 0 }, - { - "begin": 211, - "end": 302, - "name": "PUSH [tag]", - "source": 0, - "value": "21" - }, - { "begin": 211, "end": 302, "name": "JUMP", "source": 0 }, - { - "begin": 211, - "end": 302, - "name": "tag", - "source": 0, - "value": "22" - }, - { "begin": 211, "end": 302, "name": "JUMPDEST", "source": 0 }, - { "begin": 211, "end": 302, "name": "POP", "source": 0 }, - { "begin": 132, "end": 310, "name": "POP", "source": 0 }, - { "begin": 132, "end": 310, "name": "POP", "source": 0 }, - { "begin": 132, "end": 310, "name": "POP", "source": 0 }, - { - "begin": 132, - "end": 310, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 66, - "end": 100, - "name": "tag", - "source": 0, - "value": "13" - }, - { "begin": 66, "end": 100, "name": "JUMPDEST", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 66, "end": 100, "name": "MSTORE", "source": 0 }, - { "begin": 66, "end": 100, "name": "DUP1", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 66, "end": 100, "name": "MSTORE", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 66, "end": 100, "name": "KECCAK256", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 66, "end": 100, "name": "SWAP2", "source": 0 }, - { "begin": 66, "end": 100, "name": "POP", "source": 0 }, - { "begin": 66, "end": 100, "name": "SWAP1", "source": 0 }, - { "begin": 66, "end": 100, "name": "POP", "source": 0 }, - { "begin": 66, "end": 100, "name": "SLOAD", "source": 0 }, - { "begin": 66, "end": 100, "name": "DUP2", "source": 0 }, - { - "begin": 66, - "end": 100, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 318, - "end": 516, - "name": "tag", - "source": 0, - "value": "19" - }, - { "begin": 318, "end": 516, "name": "JUMPDEST", "source": 0 }, - { - "begin": 386, - "end": 397, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 416, "end": 422, "name": "DUP1", "source": 0 }, - { - "begin": 411, - "end": 488, - "name": "tag", - "source": 0, - "value": "32" - }, - { "begin": 411, "end": 488, "name": "JUMPDEST", "source": 0 }, - { "begin": 428, "end": 437, "name": "DUP3", "source": 0 }, - { "begin": 426, "end": 427, "name": "DUP2", "source": 0 }, - { "begin": 426, "end": 437, "name": "LT", "source": 0 }, - { "begin": 411, "end": 488, "name": "ISZERO", "source": 0 }, - { - "begin": 411, - "end": 488, - "name": "PUSH [tag]", - "source": 0, - "value": "33" - }, - { "begin": 411, "end": 488, "name": "JUMPI", "source": 0 }, - { - "begin": 463, - "end": 468, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 463, "end": 477, "name": "DUP1", "source": 0 }, - { "begin": 475, "end": 476, "name": "DUP3", "source": 0 }, - { "begin": 469, "end": 474, "name": "DUP7", "source": 0 }, - { - "begin": 469, - "end": 476, - "name": "PUSH [tag]", - "source": 0, - "value": "35" - }, - { "begin": 469, "end": 476, "name": "SWAP2", "source": 0 }, - { "begin": 469, "end": 476, "name": "SWAP1", "source": 0 }, - { - "begin": 469, - "end": 476, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { - "begin": 469, - "end": 476, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 469, - "end": 476, - "name": "tag", - "source": 0, - "value": "35" - }, - { "begin": 469, "end": 476, "name": "JUMPDEST", "source": 0 }, - { "begin": 463, "end": 477, "name": "DUP2", "source": 0 }, - { "begin": 463, "end": 477, "name": "MSTORE", "source": 0 }, - { - "begin": 463, - "end": 477, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 463, "end": 477, "name": "ADD", "source": 0 }, - { "begin": 463, "end": 477, "name": "SWAP1", "source": 0 }, - { "begin": 463, "end": 477, "name": "DUP2", "source": 0 }, - { "begin": 463, "end": 477, "name": "MSTORE", "source": 0 }, - { - "begin": 463, - "end": 477, - "name": "PUSH", - "source": 0, - "value": "20" - }, - { "begin": 463, "end": 477, "name": "ADD", "source": 0 }, - { - "begin": 463, - "end": 477, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 463, "end": 477, "name": "KECCAK256", "source": 0 }, - { "begin": 463, "end": 477, "name": "SLOAD", "source": 0 }, - { "begin": 456, "end": 477, "name": "DUP3", "source": 0 }, - { - "begin": 456, - "end": 477, - "name": "PUSH [tag]", - "source": 0, - "value": "36" - }, - { "begin": 456, "end": 477, "name": "SWAP2", "source": 0 }, - { "begin": 456, "end": 477, "name": "SWAP1", "source": 0 }, - { - "begin": 456, - "end": 477, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { - "begin": 456, - "end": 477, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 456, - "end": 477, - "name": "tag", - "source": 0, - "value": "36" - }, - { "begin": 456, "end": 477, "name": "JUMPDEST", "source": 0 }, - { "begin": 456, "end": 477, "name": "SWAP2", "source": 0 }, - { "begin": 456, "end": 477, "name": "POP", "source": 0 }, - { "begin": 439, "end": 442, "name": "DUP1", "source": 0 }, - { "begin": 439, "end": 442, "name": "DUP1", "source": 0 }, - { - "begin": 439, - "end": 442, - "name": "PUSH [tag]", - "source": 0, - "value": "37" - }, - { "begin": 439, "end": 442, "name": "SWAP1", "source": 0 }, - { - "begin": 439, - "end": 442, - "name": "PUSH [tag]", - "source": 0, - "value": "30" - }, - { - "begin": 439, - "end": 442, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 439, - "end": 442, - "name": "tag", - "source": 0, - "value": "37" - }, - { "begin": 439, "end": 442, "name": "JUMPDEST", "source": 0 }, - { "begin": 439, "end": 442, "name": "SWAP2", "source": 0 }, - { "begin": 439, "end": 442, "name": "POP", "source": 0 }, - { "begin": 439, "end": 442, "name": "POP", "source": 0 }, - { - "begin": 411, - "end": 488, - "name": "PUSH [tag]", - "source": 0, - "value": "32" - }, - { "begin": 411, "end": 488, "name": "JUMP", "source": 0 }, - { - "begin": 411, - "end": 488, - "name": "tag", - "source": 0, - "value": "33" - }, - { "begin": 411, "end": 488, "name": "JUMPDEST", "source": 0 }, - { "begin": 411, "end": 488, "name": "POP", "source": 0 }, - { "begin": 504, "end": 507, "name": "DUP1", "source": 0 }, - { - "begin": 497, - "end": 500, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 497, - "end": 500, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 497, "end": 507, "name": "DUP3", "source": 0 }, - { "begin": 497, "end": 507, "name": "DUP3", "source": 0 }, - { "begin": 497, "end": 507, "name": "SLOAD", "source": 0 }, - { - "begin": 497, - "end": 507, - "name": "PUSH [tag]", - "source": 0, - "value": "38" - }, - { "begin": 497, "end": 507, "name": "SWAP2", "source": 0 }, - { "begin": 497, "end": 507, "name": "SWAP1", "source": 0 }, - { - "begin": 497, - "end": 507, - "name": "PUSH [tag]", - "source": 0, - "value": "27" - }, - { - "begin": 497, - "end": 507, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 497, - "end": 507, - "name": "tag", - "source": 0, - "value": "38" - }, - { "begin": 497, "end": 507, "name": "JUMPDEST", "source": 0 }, - { "begin": 497, "end": 507, "name": "SWAP3", "source": 0 }, - { "begin": 497, "end": 507, "name": "POP", "source": 0 }, - { "begin": 497, "end": 507, "name": "POP", "source": 0 }, - { "begin": 497, "end": 507, "name": "DUP2", "source": 0 }, - { "begin": 497, "end": 507, "name": "SWAP1", "source": 0 }, - { "begin": 497, "end": 507, "name": "SSTORE", "source": 0 }, - { "begin": 497, "end": 507, "name": "POP", "source": 0 }, - { "begin": 376, "end": 516, "name": "POP", "source": 0 }, - { "begin": 318, "end": 516, "name": "POP", "source": 0 }, - { "begin": 318, "end": 516, "name": "POP", "source": 0 }, - { - "begin": 318, - "end": 516, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "40" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 53, - "end": 58, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "42" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "43" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "42" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 481, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 152, "end": 481, "name": "JUMPDEST", "source": 1 }, - { - "begin": 211, - "end": 217, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "45" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 266, - "end": 345, - "name": "PUSH [tag]", - "source": 1, - "value": "46" - }, - { - "begin": 266, - "end": 345, - "name": "PUSH [tag]", - "source": 1, - "value": "47" - }, - { - "begin": 266, - "end": 345, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 266, - "end": 345, - "name": "tag", - "source": 1, - "value": "46" - }, - { "begin": 266, "end": 345, "name": "JUMPDEST", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "45" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 386, - "end": 387, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 411, - "end": 464, - "name": "PUSH [tag]", - "source": 1, - "value": "48" - }, - { "begin": 456, "end": 463, "name": "DUP5", "source": 1 }, - { "begin": 447, "end": 453, "name": "DUP3", "source": 1 }, - { "begin": 436, "end": 445, "name": "DUP6", "source": 1 }, - { "begin": 432, "end": 454, "name": "ADD", "source": 1 }, - { - "begin": 411, - "end": 464, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { - "begin": 411, - "end": 464, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 411, - "end": 464, - "name": "tag", - "source": 1, - "value": "48" - }, - { "begin": 411, "end": 464, "name": "JUMPDEST", "source": 1 }, - { "begin": 401, "end": 464, "name": "SWAP2", "source": 1 }, - { "begin": 401, "end": 464, "name": "POP", "source": 1 }, - { "begin": 357, "end": 474, "name": "POP", "source": 1 }, - { "begin": 218, "end": 481, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 481, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 481, "name": "POP", "source": 1 }, - { "begin": 218, "end": 481, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 481, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 487, - "end": 961, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 487, "end": 961, "name": "JUMPDEST", "source": 1 }, - { - "begin": 555, - "end": 561, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 563, "end": 569, "name": "DUP1", "source": 1 }, - { - "begin": 612, - "end": 614, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 600, "end": 609, "name": "DUP4", "source": 1 }, - { "begin": 591, "end": 598, "name": "DUP6", "source": 1 }, - { "begin": 587, "end": 610, "name": "SUB", "source": 1 }, - { "begin": 583, "end": 615, "name": "SLT", "source": 1 }, - { "begin": 580, "end": 582, "name": "ISZERO", "source": 1 }, - { - "begin": 580, - "end": 582, - "name": "PUSH [tag]", - "source": 1, - "value": "50" - }, - { "begin": 580, "end": 582, "name": "JUMPI", "source": 1 }, - { - "begin": 618, - "end": 697, - "name": "PUSH [tag]", - "source": 1, - "value": "51" - }, - { - "begin": 618, - "end": 697, - "name": "PUSH [tag]", - "source": 1, - "value": "47" - }, - { - "begin": 618, - "end": 697, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 618, - "end": 697, - "name": "tag", - "source": 1, - "value": "51" - }, - { "begin": 618, "end": 697, "name": "JUMPDEST", "source": 1 }, - { - "begin": 580, - "end": 582, - "name": "tag", - "source": 1, - "value": "50" - }, - { "begin": 580, "end": 582, "name": "JUMPDEST", "source": 1 }, - { - "begin": 738, - "end": 739, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 763, - "end": 816, - "name": "PUSH [tag]", - "source": 1, - "value": "52" - }, - { "begin": 808, "end": 815, "name": "DUP6", "source": 1 }, - { "begin": 799, "end": 805, "name": "DUP3", "source": 1 }, - { "begin": 788, "end": 797, "name": "DUP7", "source": 1 }, - { "begin": 784, "end": 806, "name": "ADD", "source": 1 }, - { - "begin": 763, - "end": 816, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { - "begin": 763, - "end": 816, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 763, - "end": 816, - "name": "tag", - "source": 1, - "value": "52" - }, - { "begin": 763, "end": 816, "name": "JUMPDEST", "source": 1 }, - { "begin": 753, "end": 816, "name": "SWAP3", "source": 1 }, - { "begin": 753, "end": 816, "name": "POP", "source": 1 }, - { "begin": 709, "end": 826, "name": "POP", "source": 1 }, - { - "begin": 865, - "end": 867, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { - "begin": 891, - "end": 944, - "name": "PUSH [tag]", - "source": 1, - "value": "53" - }, - { "begin": 936, "end": 943, "name": "DUP6", "source": 1 }, - { "begin": 927, "end": 933, "name": "DUP3", "source": 1 }, - { "begin": 916, "end": 925, "name": "DUP7", "source": 1 }, - { "begin": 912, "end": 934, "name": "ADD", "source": 1 }, - { - "begin": 891, - "end": 944, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { - "begin": 891, - "end": 944, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 891, - "end": 944, - "name": "tag", - "source": 1, - "value": "53" - }, - { "begin": 891, "end": 944, "name": "JUMPDEST", "source": 1 }, - { "begin": 881, "end": 944, "name": "SWAP2", "source": 1 }, - { "begin": 881, "end": 944, "name": "POP", "source": 1 }, - { "begin": 836, "end": 954, "name": "POP", "source": 1 }, - { "begin": 570, "end": 961, "name": "SWAP3", "source": 1 }, - { "begin": 570, "end": 961, "name": "POP", "source": 1 }, - { "begin": 570, "end": 961, "name": "SWAP3", "source": 1 }, - { "begin": 570, "end": 961, "name": "SWAP1", "source": 1 }, - { "begin": 570, "end": 961, "name": "POP", "source": 1 }, - { - "begin": 570, - "end": 961, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 967, - "end": 1586, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 967, "end": 1586, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1044, - "end": 1050, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1052, "end": 1058, "name": "DUP1", "source": 1 }, - { - "begin": 1060, - "end": 1066, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1109, - "end": 1111, - "name": "PUSH", - "source": 1, - "value": "60" - }, - { "begin": 1097, "end": 1106, "name": "DUP5", "source": 1 }, - { "begin": 1088, "end": 1095, "name": "DUP7", "source": 1 }, - { "begin": 1084, "end": 1107, "name": "SUB", "source": 1 }, - { "begin": 1080, "end": 1112, "name": "SLT", "source": 1 }, - { "begin": 1077, "end": 1079, "name": "ISZERO", "source": 1 }, - { - "begin": 1077, - "end": 1079, - "name": "PUSH [tag]", - "source": 1, - "value": "55" - }, - { "begin": 1077, "end": 1079, "name": "JUMPI", "source": 1 }, - { - "begin": 1115, - "end": 1194, - "name": "PUSH [tag]", - "source": 1, - "value": "56" - }, - { - "begin": 1115, - "end": 1194, - "name": "PUSH [tag]", - "source": 1, - "value": "47" - }, - { - "begin": 1115, - "end": 1194, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1115, - "end": 1194, - "name": "tag", - "source": 1, - "value": "56" - }, - { "begin": 1115, "end": 1194, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1077, - "end": 1079, - "name": "tag", - "source": 1, - "value": "55" - }, - { "begin": 1077, "end": 1079, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1235, - "end": 1236, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1260, - "end": 1313, - "name": "PUSH [tag]", - "source": 1, - "value": "57" - }, - { "begin": 1305, "end": 1312, "name": "DUP7", "source": 1 }, - { "begin": 1296, "end": 1302, "name": "DUP3", "source": 1 }, - { "begin": 1285, "end": 1294, "name": "DUP8", "source": 1 }, - { "begin": 1281, "end": 1303, "name": "ADD", "source": 1 }, - { - "begin": 1260, - "end": 1313, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { - "begin": 1260, - "end": 1313, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1260, - "end": 1313, - "name": "tag", - "source": 1, - "value": "57" - }, - { "begin": 1260, "end": 1313, "name": "JUMPDEST", "source": 1 }, - { "begin": 1250, "end": 1313, "name": "SWAP4", "source": 1 }, - { "begin": 1250, "end": 1313, "name": "POP", "source": 1 }, - { "begin": 1206, "end": 1323, "name": "POP", "source": 1 }, - { - "begin": 1362, - "end": 1364, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { - "begin": 1388, - "end": 1441, - "name": "PUSH [tag]", - "source": 1, - "value": "58" - }, - { "begin": 1433, "end": 1440, "name": "DUP7", "source": 1 }, - { "begin": 1424, "end": 1430, "name": "DUP3", "source": 1 }, - { "begin": 1413, "end": 1422, "name": "DUP8", "source": 1 }, - { "begin": 1409, "end": 1431, "name": "ADD", "source": 1 }, - { - "begin": 1388, - "end": 1441, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { - "begin": 1388, - "end": 1441, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1388, - "end": 1441, - "name": "tag", - "source": 1, - "value": "58" - }, - { "begin": 1388, "end": 1441, "name": "JUMPDEST", "source": 1 }, - { "begin": 1378, "end": 1441, "name": "SWAP3", "source": 1 }, - { "begin": 1378, "end": 1441, "name": "POP", "source": 1 }, - { "begin": 1333, "end": 1451, "name": "POP", "source": 1 }, - { - "begin": 1490, - "end": 1492, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { - "begin": 1516, - "end": 1569, - "name": "PUSH [tag]", - "source": 1, - "value": "59" - }, - { "begin": 1561, "end": 1568, "name": "DUP7", "source": 1 }, - { "begin": 1552, "end": 1558, "name": "DUP3", "source": 1 }, - { "begin": 1541, "end": 1550, "name": "DUP8", "source": 1 }, - { "begin": 1537, "end": 1559, "name": "ADD", "source": 1 }, - { - "begin": 1516, - "end": 1569, - "name": "PUSH [tag]", - "source": 1, - "value": "40" - }, - { - "begin": 1516, - "end": 1569, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1516, - "end": 1569, - "name": "tag", - "source": 1, - "value": "59" - }, - { "begin": 1516, "end": 1569, "name": "JUMPDEST", "source": 1 }, - { "begin": 1506, "end": 1569, "name": "SWAP2", "source": 1 }, - { "begin": 1506, "end": 1569, "name": "POP", "source": 1 }, - { "begin": 1461, "end": 1579, "name": "POP", "source": 1 }, - { "begin": 1067, "end": 1586, "name": "SWAP3", "source": 1 }, - { "begin": 1067, "end": 1586, "name": "POP", "source": 1 }, - { "begin": 1067, "end": 1586, "name": "SWAP3", "source": 1 }, - { "begin": 1067, "end": 1586, "name": "POP", "source": 1 }, - { "begin": 1067, "end": 1586, "name": "SWAP3", "source": 1 }, - { - "begin": 1067, - "end": 1586, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1592, - "end": 1710, - "name": "tag", - "source": 1, - "value": "60" - }, - { "begin": 1592, "end": 1710, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1679, - "end": 1703, - "name": "PUSH [tag]", - "source": 1, - "value": "62" - }, - { "begin": 1697, "end": 1702, "name": "DUP2", "source": 1 }, - { - "begin": 1679, - "end": 1703, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 1679, - "end": 1703, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1679, - "end": 1703, - "name": "tag", - "source": 1, - "value": "62" - }, - { "begin": 1679, "end": 1703, "name": "JUMPDEST", "source": 1 }, - { "begin": 1674, "end": 1677, "name": "DUP3", "source": 1 }, - { "begin": 1667, "end": 1704, "name": "MSTORE", "source": 1 }, - { "begin": 1657, "end": 1710, "name": "POP", "source": 1 }, - { "begin": 1657, "end": 1710, "name": "POP", "source": 1 }, - { - "begin": 1657, - "end": 1710, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1716, - "end": 1938, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 1716, "end": 1938, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1809, - "end": 1813, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 1847, - "end": 1849, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 1836, "end": 1845, "name": "DUP3", "source": 1 }, - { "begin": 1832, "end": 1850, "name": "ADD", "source": 1 }, - { "begin": 1824, "end": 1850, "name": "SWAP1", "source": 1 }, - { "begin": 1824, "end": 1850, "name": "POP", "source": 1 }, - { - "begin": 1860, - "end": 1931, - "name": "PUSH [tag]", - "source": 1, - "value": "65" - }, - { - "begin": 1928, - "end": 1929, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1917, "end": 1926, "name": "DUP4", "source": 1 }, - { "begin": 1913, "end": 1930, "name": "ADD", "source": 1 }, - { "begin": 1904, "end": 1910, "name": "DUP5", "source": 1 }, - { - "begin": 1860, - "end": 1931, - "name": "PUSH [tag]", - "source": 1, - "value": "60" - }, - { - "begin": 1860, - "end": 1931, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1860, - "end": 1931, - "name": "tag", - "source": 1, - "value": "65" - }, - { "begin": 1860, "end": 1931, "name": "JUMPDEST", "source": 1 }, - { "begin": 1814, "end": 1938, "name": "SWAP3", "source": 1 }, - { "begin": 1814, "end": 1938, "name": "SWAP2", "source": 1 }, - { "begin": 1814, "end": 1938, "name": "POP", "source": 1 }, - { "begin": 1814, "end": 1938, "name": "POP", "source": 1 }, - { - "begin": 1814, - "end": 1938, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2025, - "end": 2330, - "name": "tag", - "source": 1, - "value": "27" - }, - { "begin": 2025, "end": 2330, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2065, - "end": 2068, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2084, - "end": 2104, - "name": "PUSH [tag]", - "source": 1, - "value": "69" - }, - { "begin": 2102, "end": 2103, "name": "DUP3", "source": 1 }, - { - "begin": 2084, - "end": 2104, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 2084, - "end": 2104, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2084, - "end": 2104, - "name": "tag", - "source": 1, - "value": "69" - }, - { "begin": 2084, "end": 2104, "name": "JUMPDEST", "source": 1 }, - { "begin": 2079, "end": 2104, "name": "SWAP2", "source": 1 }, - { "begin": 2079, "end": 2104, "name": "POP", "source": 1 }, - { - "begin": 2118, - "end": 2138, - "name": "PUSH [tag]", - "source": 1, - "value": "70" - }, - { "begin": 2136, "end": 2137, "name": "DUP4", "source": 1 }, - { - "begin": 2118, - "end": 2138, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 2118, - "end": 2138, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2118, - "end": 2138, - "name": "tag", - "source": 1, - "value": "70" - }, - { "begin": 2118, "end": 2138, "name": "JUMPDEST", "source": 1 }, - { "begin": 2113, "end": 2138, "name": "SWAP3", "source": 1 }, - { "begin": 2113, "end": 2138, "name": "POP", "source": 1 }, - { "begin": 2272, "end": 2273, "name": "DUP3", "source": 1 }, - { - "begin": 2204, - "end": 2270, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2200, "end": 2274, "name": "SUB", "source": 1 }, - { "begin": 2197, "end": 2198, "name": "DUP3", "source": 1 }, - { "begin": 2194, "end": 2275, "name": "GT", "source": 1 }, - { "begin": 2191, "end": 2193, "name": "ISZERO", "source": 1 }, - { - "begin": 2191, - "end": 2193, - "name": "PUSH [tag]", - "source": 1, - "value": "71" - }, - { "begin": 2191, "end": 2193, "name": "JUMPI", "source": 1 }, - { - "begin": 2278, - "end": 2296, - "name": "PUSH [tag]", - "source": 1, - "value": "72" - }, - { - "begin": 2278, - "end": 2296, - "name": "PUSH [tag]", - "source": 1, - "value": "73" - }, - { - "begin": 2278, - "end": 2296, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2278, - "end": 2296, - "name": "tag", - "source": 1, - "value": "72" - }, - { "begin": 2278, "end": 2296, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2191, - "end": 2193, - "name": "tag", - "source": 1, - "value": "71" - }, - { "begin": 2191, "end": 2193, "name": "JUMPDEST", "source": 1 }, - { "begin": 2322, "end": 2323, "name": "DUP3", "source": 1 }, - { "begin": 2319, "end": 2320, "name": "DUP3", "source": 1 }, - { "begin": 2315, "end": 2324, "name": "ADD", "source": 1 }, - { "begin": 2308, "end": 2324, "name": "SWAP1", "source": 1 }, - { "begin": 2308, "end": 2324, "name": "POP", "source": 1 }, - { "begin": 2069, "end": 2330, "name": "SWAP3", "source": 1 }, - { "begin": 2069, "end": 2330, "name": "SWAP2", "source": 1 }, - { "begin": 2069, "end": 2330, "name": "POP", "source": 1 }, - { "begin": 2069, "end": 2330, "name": "POP", "source": 1 }, - { - "begin": 2069, - "end": 2330, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2336, - "end": 2684, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 2336, "end": 2684, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2376, - "end": 2383, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2399, - "end": 2419, - "name": "PUSH [tag]", - "source": 1, - "value": "75" - }, - { "begin": 2417, "end": 2418, "name": "DUP3", "source": 1 }, - { - "begin": 2399, - "end": 2419, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 2399, - "end": 2419, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2399, - "end": 2419, - "name": "tag", - "source": 1, - "value": "75" - }, - { "begin": 2399, "end": 2419, "name": "JUMPDEST", "source": 1 }, - { "begin": 2394, "end": 2419, "name": "SWAP2", "source": 1 }, - { "begin": 2394, "end": 2419, "name": "POP", "source": 1 }, - { - "begin": 2433, - "end": 2453, - "name": "PUSH [tag]", - "source": 1, - "value": "76" - }, - { "begin": 2451, "end": 2452, "name": "DUP4", "source": 1 }, - { - "begin": 2433, - "end": 2453, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 2433, - "end": 2453, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2433, - "end": 2453, - "name": "tag", - "source": 1, - "value": "76" - }, - { "begin": 2433, "end": 2453, "name": "JUMPDEST", "source": 1 }, - { "begin": 2428, "end": 2453, "name": "SWAP3", "source": 1 }, - { "begin": 2428, "end": 2453, "name": "POP", "source": 1 }, - { "begin": 2621, "end": 2622, "name": "DUP2", "source": 1 }, - { - "begin": 2553, - "end": 2619, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2549, "end": 2623, "name": "DIV", "source": 1 }, - { "begin": 2546, "end": 2547, "name": "DUP4", "source": 1 }, - { "begin": 2543, "end": 2624, "name": "GT", "source": 1 }, - { "begin": 2538, "end": 2539, "name": "DUP3", "source": 1 }, - { "begin": 2531, "end": 2540, "name": "ISZERO", "source": 1 }, - { "begin": 2524, "end": 2541, "name": "ISZERO", "source": 1 }, - { "begin": 2520, "end": 2625, "name": "AND", "source": 1 }, - { "begin": 2517, "end": 2519, "name": "ISZERO", "source": 1 }, - { - "begin": 2517, - "end": 2519, - "name": "PUSH [tag]", - "source": 1, - "value": "77" - }, - { "begin": 2517, "end": 2519, "name": "JUMPI", "source": 1 }, - { - "begin": 2628, - "end": 2646, - "name": "PUSH [tag]", - "source": 1, - "value": "78" - }, - { - "begin": 2628, - "end": 2646, - "name": "PUSH [tag]", - "source": 1, - "value": "73" - }, - { - "begin": 2628, - "end": 2646, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2628, - "end": 2646, - "name": "tag", - "source": 1, - "value": "78" - }, - { "begin": 2628, "end": 2646, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2517, - "end": 2519, - "name": "tag", - "source": 1, - "value": "77" - }, - { "begin": 2517, "end": 2519, "name": "JUMPDEST", "source": 1 }, - { "begin": 2676, "end": 2677, "name": "DUP3", "source": 1 }, - { "begin": 2673, "end": 2674, "name": "DUP3", "source": 1 }, - { "begin": 2669, "end": 2678, "name": "MUL", "source": 1 }, - { "begin": 2658, "end": 2678, "name": "SWAP1", "source": 1 }, - { "begin": 2658, "end": 2678, "name": "POP", "source": 1 }, - { "begin": 2384, "end": 2684, "name": "SWAP3", "source": 1 }, - { "begin": 2384, "end": 2684, "name": "SWAP2", "source": 1 }, - { "begin": 2384, "end": 2684, "name": "POP", "source": 1 }, - { "begin": 2384, "end": 2684, "name": "POP", "source": 1 }, - { - "begin": 2384, - "end": 2684, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2690, - "end": 2767, - "name": "tag", - "source": 1, - "value": "63" - }, - { "begin": 2690, "end": 2767, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2727, - "end": 2734, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 2756, "end": 2761, "name": "DUP2", "source": 1 }, - { "begin": 2745, "end": 2761, "name": "SWAP1", "source": 1 }, - { "begin": 2745, "end": 2761, "name": "POP", "source": 1 }, - { "begin": 2735, "end": 2767, "name": "SWAP2", "source": 1 }, - { "begin": 2735, "end": 2767, "name": "SWAP1", "source": 1 }, - { "begin": 2735, "end": 2767, "name": "POP", "source": 1 }, - { - "begin": 2735, - "end": 2767, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 2773, - "end": 3006, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 2773, "end": 3006, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2812, - "end": 2815, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 2835, - "end": 2859, - "name": "PUSH [tag]", - "source": 1, - "value": "81" - }, - { "begin": 2853, "end": 2858, "name": "DUP3", "source": 1 }, - { - "begin": 2835, - "end": 2859, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 2835, - "end": 2859, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2835, - "end": 2859, - "name": "tag", - "source": 1, - "value": "81" - }, - { "begin": 2835, "end": 2859, "name": "JUMPDEST", "source": 1 }, - { "begin": 2826, "end": 2859, "name": "SWAP2", "source": 1 }, - { "begin": 2826, "end": 2859, "name": "POP", "source": 1 }, - { - "begin": 2881, - "end": 2947, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 2874, "end": 2879, "name": "DUP3", "source": 1 }, - { "begin": 2871, "end": 2948, "name": "EQ", "source": 1 }, - { "begin": 2868, "end": 2870, "name": "ISZERO", "source": 1 }, - { - "begin": 2868, - "end": 2870, - "name": "PUSH [tag]", - "source": 1, - "value": "82" - }, - { "begin": 2868, "end": 2870, "name": "JUMPI", "source": 1 }, - { - "begin": 2951, - "end": 2969, - "name": "PUSH [tag]", - "source": 1, - "value": "83" - }, - { - "begin": 2951, - "end": 2969, - "name": "PUSH [tag]", - "source": 1, - "value": "73" - }, - { - "begin": 2951, - "end": 2969, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 2951, - "end": 2969, - "name": "tag", - "source": 1, - "value": "83" - }, - { "begin": 2951, "end": 2969, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2868, - "end": 2870, - "name": "tag", - "source": 1, - "value": "82" - }, - { "begin": 2868, "end": 2870, "name": "JUMPDEST", "source": 1 }, - { - "begin": 2998, - "end": 2999, - "name": "PUSH", - "source": 1, - "value": "1" - }, - { "begin": 2991, "end": 2996, "name": "DUP3", "source": 1 }, - { "begin": 2987, "end": 3000, "name": "ADD", "source": 1 }, - { "begin": 2980, "end": 3000, "name": "SWAP1", "source": 1 }, - { "begin": 2980, "end": 3000, "name": "POP", "source": 1 }, - { "begin": 2816, "end": 3006, "name": "SWAP2", "source": 1 }, - { "begin": 2816, "end": 3006, "name": "SWAP1", "source": 1 }, - { "begin": 2816, "end": 3006, "name": "POP", "source": 1 }, - { - "begin": 2816, - "end": 3006, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 3012, - "end": 3192, - "name": "tag", - "source": 1, - "value": "73" - }, - { "begin": 3012, "end": 3192, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3060, - "end": 3137, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 3057, - "end": 3058, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 3050, "end": 3138, "name": "MSTORE", "source": 1 }, - { - "begin": 3157, - "end": 3161, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 3154, - "end": 3155, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 3147, "end": 3162, "name": "MSTORE", "source": 1 }, - { - "begin": 3181, - "end": 3185, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 3178, - "end": 3179, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 3171, "end": 3186, "name": "REVERT", "source": 1 }, - { - "begin": 3321, - "end": 3438, - "name": "tag", - "source": 1, - "value": "47" - }, - { "begin": 3321, "end": 3438, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3430, - "end": 3431, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 3427, "end": 3428, "name": "DUP1", "source": 1 }, - { "begin": 3420, "end": 3432, "name": "REVERT", "source": 1 }, - { - "begin": 3444, - "end": 3566, - "name": "tag", - "source": 1, - "value": "43" - }, - { "begin": 3444, "end": 3566, "name": "JUMPDEST", "source": 1 }, - { - "begin": 3517, - "end": 3541, - "name": "PUSH [tag]", - "source": 1, - "value": "89" - }, - { "begin": 3535, "end": 3540, "name": "DUP2", "source": 1 }, - { - "begin": 3517, - "end": 3541, - "name": "PUSH [tag]", - "source": 1, - "value": "63" - }, - { - "begin": 3517, - "end": 3541, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 3517, - "end": 3541, - "name": "tag", - "source": 1, - "value": "89" - }, - { "begin": 3517, "end": 3541, "name": "JUMPDEST", "source": 1 }, - { "begin": 3510, "end": 3515, "name": "DUP2", "source": 1 }, - { "begin": 3507, "end": 3542, "name": "EQ", "source": 1 }, - { - "begin": 3497, - "end": 3499, - "name": "PUSH [tag]", - "source": 1, - "value": "90" - }, - { "begin": 3497, "end": 3499, "name": "JUMPI", "source": 1 }, - { - "begin": 3556, - "end": 3557, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 3553, "end": 3554, "name": "DUP1", "source": 1 }, - { "begin": 3546, "end": 3558, "name": "REVERT", "source": 1 }, - { - "begin": 3497, - "end": 3499, - "name": "tag", - "source": 1, - "value": "90" - }, - { "begin": 3497, "end": 3499, "name": "JUMPDEST", "source": 1 }, - { "begin": 3487, "end": 3566, "name": "POP", "source": 1 }, - { - "begin": 3487, - "end": 3566, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { - "bloat(uint256)": "b5ee9660", - "bloat_storage(uint256,uint256,uint256)": "56f510a9", - "calculate_sum(uint256,uint256)": "d9a902b4" - } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.6+commit.11564f7e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"bloat\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"num_items\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"}],\"name\":\"bloat_storage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"num_items\",\"type\":\"uint256\"}],\"name\":\"calculate_sum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"StorageBloater\"},\"evmVersion\":\"berlin\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x9430d5c393ed5aadd3515881bdd2f77e09c4d89d89fbe8437197f5027052150d\",\"urls\":[\"bzz-raw://b2281f2ab4ebc78112b570bf118450134fd94f783ea7bb23d58f3bf4240bc42c\",\"dweb:/ipfs/QmdqyGTrfCKNHzC3nmSuBucisAhfDFiFxrmst9cXiUzCGH\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 5, - "contract": "main.sol:StorageBloater", - "label": "bloat", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_uint256,t_uint256)" - }, - { - "astId": 8, - "contract": "main.sol:StorageBloater", - "label": "sum", - "offset": 0, - "slot": "1", - "type": "t_uint256" - } - ], - "types": { - "t_mapping(t_uint256,t_uint256)": { - "encoding": "mapping", - "key": "t_uint256", - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract StorageBloater {\n mapping(uint => uint) public bloat;\n uint256 sum = 0;\n\n function bloat_storage(uint start, uint num_items, uint seed) public {\n for (uint i=0; i value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_mul_t_uint256(x, y) -> product {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x != 0 and y > (maxValue / x)\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n\n product := mul(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b92915050565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC6888FA1 EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x8B JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0xC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x7 DUP3 PUSH2 0x6F SWAP2 SWAP1 PUSH2 0xDE JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85 DUP2 PUSH2 0x171 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0xAB DUP5 DUP3 DUP6 ADD PUSH2 0x76 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBD DUP2 PUSH2 0x138 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD8 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xB4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE9 DUP3 PUSH2 0x138 JUMP JUMPDEST SWAP2 POP PUSH2 0xF4 DUP4 PUSH2 0x138 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0x12D JUMPI PUSH2 0x12C PUSH2 0x142 JUMP JUMPDEST JUMPDEST DUP3 DUP3 MUL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x17A DUP2 PUSH2 0x138 JUMP JUMPDEST DUP2 EQ PUSH2 0x185 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA8 0x2D SELFDESTRUCT SDIV 0xF 0x5E BLOCKHASH 0xB8 PUSH21 0x671C1F40E579B5A8C361F5313D1A9D32437222AB6A CODESIZE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "39:128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;117:6;149:1;146;:4;;;;:::i;:::-;139:11;;71:90;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:118::-;507:24;525:5;507:24;:::i;:::-;502:3;495:37;485:53;;:::o;544:222::-;;675:2;664:9;660:18;652:26;;688:71;756:1;745:9;741:17;732:6;688:71;:::i;:::-;642:124;;;;:::o;772:348::-;;835:20;853:1;835:20;:::i;:::-;830:25;;869:20;887:1;869:20;:::i;:::-;864:25;;1057:1;989:66;985:74;982:1;979:81;974:1;967:9;960:17;956:105;953:2;;;1064:18;;:::i;:::-;953:2;1112:1;1109;1105:9;1094:20;;820:300;;;;:::o;1126:77::-;;1192:5;1181:16;;1171:32;;;:::o;1209:180::-;1257:77;1254:1;1247:88;1354:4;1351:1;1344:15;1378:4;1375:1;1368:15;1395:122;1468:24;1486:5;1468:24;:::i;:::-;1461:5;1458:35;1448:2;;1507:1;1504;1497:12;1448:2;1438:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "89200", - "executionCost": "135", - "totalCost": "89335" - }, - "external": { "multiply(uint256)": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 167, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 167, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 167, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 167, "name": "REVERT", "source": 0 }, - { "begin": 39, "end": 167, "name": "tag", "source": 0, "value": "1" }, - { "begin": 39, "end": 167, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 167, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 167, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 167, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a2646970667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 167, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 167, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 167, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 167, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 167, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 167, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 167, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 167, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 167, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 167, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "C6888FA1" - }, - { "begin": 39, "end": 167, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 167, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 167, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 167, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 167, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 167, "name": "REVERT", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { - "begin": 71, - "end": 161, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 71, "end": 161, "name": "DUP1", "source": 0 }, - { "begin": 71, "end": 161, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 71, "end": 161, "name": "SUB", "source": 0 }, - { "begin": 71, "end": 161, "name": "DUP2", "source": 0 }, - { "begin": 71, "end": 161, "name": "ADD", "source": 0 }, - { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, - { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 71, - "end": 161, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 71, - "end": 161, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { - "begin": 71, - "end": 161, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 71, - "end": 161, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 71, "end": 161, "name": "MLOAD", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, - { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 71, - "end": 161, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 71, - "end": 161, - "name": "tag", - "source": 0, - "value": "8" - }, - { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 71, "end": 161, "name": "MLOAD", "source": 0 }, - { "begin": 71, "end": 161, "name": "DUP1", "source": 0 }, - { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, - { "begin": 71, "end": 161, "name": "SUB", "source": 0 }, - { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, - { "begin": 71, "end": 161, "name": "RETURN", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 71, "end": 161, "name": "JUMPDEST", "source": 0 }, - { - "begin": 117, - "end": 123, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { - "begin": 149, - "end": 150, - "name": "PUSH", - "source": 0, - "value": "7" - }, - { "begin": 146, "end": 147, "name": "DUP3", "source": 0 }, - { - "begin": 146, - "end": 150, - "name": "PUSH [tag]", - "source": 0, - "value": "11" - }, - { "begin": 146, "end": 150, "name": "SWAP2", "source": 0 }, - { "begin": 146, "end": 150, "name": "SWAP1", "source": 0 }, - { - "begin": 146, - "end": 150, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { - "begin": 146, - "end": 150, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 146, - "end": 150, - "name": "tag", - "source": 0, - "value": "11" - }, - { "begin": 146, "end": 150, "name": "JUMPDEST", "source": 0 }, - { "begin": 139, "end": 150, "name": "SWAP1", "source": 0 }, - { "begin": 139, "end": 150, "name": "POP", "source": 0 }, - { "begin": 71, "end": 161, "name": "SWAP2", "source": 0 }, - { "begin": 71, "end": 161, "name": "SWAP1", "source": 0 }, - { "begin": 71, "end": 161, "name": "POP", "source": 0 }, - { - "begin": 71, - "end": 161, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 146, - "name": "tag", - "source": 1, - "value": "14" - }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7, - "end": 146, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "16" - }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, - { - "begin": 107, - "end": 140, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { - "begin": 107, - "end": 140, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 107, - "end": 140, - "name": "tag", - "source": 1, - "value": "16" - }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { - "begin": 59, - "end": 146, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 152, - "end": 414, - "name": "tag", - "source": 1, - "value": "6" - }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, - { - "begin": 152, - "end": 414, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 260, - "end": 262, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "PUSH [tag]", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, - { - "begin": 276, - "end": 277, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, - { - "begin": 228, - "end": 230, - "name": "tag", - "source": 1, - "value": "19" - }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, - { - "begin": 319, - "end": 320, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, - { - "begin": 344, - "end": 397, - "name": "PUSH [tag]", - "source": 1, - "value": "14" - }, - { - "begin": 344, - "end": 397, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 344, - "end": 397, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 420, - "end": 538, - "name": "tag", - "source": 1, - "value": "21" - }, - { "begin": 420, "end": 538, "name": "JUMPDEST", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 525, "end": 530, "name": "DUP2", "source": 1 }, - { - "begin": 507, - "end": 531, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 507, - "end": 531, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 507, - "end": 531, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 507, "end": 531, "name": "JUMPDEST", "source": 1 }, - { "begin": 502, "end": 505, "name": "DUP3", "source": 1 }, - { "begin": 495, "end": 532, "name": "MSTORE", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { "begin": 485, "end": 538, "name": "POP", "source": 1 }, - { - "begin": 485, - "end": 538, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 544, - "end": 766, - "name": "tag", - "source": 1, - "value": "9" - }, - { "begin": 544, "end": 766, "name": "JUMPDEST", "source": 1 }, - { - "begin": 544, - "end": 766, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 675, - "end": 677, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 664, "end": 673, "name": "DUP3", "source": 1 }, - { "begin": 660, "end": 678, "name": "ADD", "source": 1 }, - { "begin": 652, "end": 678, "name": "SWAP1", "source": 1 }, - { "begin": 652, "end": 678, "name": "POP", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 756, - "end": 757, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 745, "end": 754, "name": "DUP4", "source": 1 }, - { "begin": 741, "end": 758, "name": "ADD", "source": 1 }, - { "begin": 732, "end": 738, "name": "DUP5", "source": 1 }, - { - "begin": 688, - "end": 759, - "name": "PUSH [tag]", - "source": 1, - "value": "21" - }, - { - "begin": 688, - "end": 759, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 688, - "end": 759, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 688, "end": 759, "name": "JUMPDEST", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP3", "source": 1 }, - { "begin": 642, "end": 766, "name": "SWAP2", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { "begin": 642, "end": 766, "name": "POP", "source": 1 }, - { - "begin": 642, - "end": 766, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 772, - "end": 1120, - "name": "tag", - "source": 1, - "value": "12" - }, - { "begin": 772, "end": 1120, "name": "JUMPDEST", "source": 1 }, - { - "begin": 772, - "end": 1120, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 835, - "end": 855, - "name": "PUSH [tag]", - "source": 1, - "value": "28" - }, - { "begin": 853, "end": 854, "name": "DUP3", "source": 1 }, - { - "begin": 835, - "end": 855, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 835, - "end": 855, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 835, - "end": 855, - "name": "tag", - "source": 1, - "value": "28" - }, - { "begin": 835, "end": 855, "name": "JUMPDEST", "source": 1 }, - { "begin": 830, "end": 855, "name": "SWAP2", "source": 1 }, - { "begin": 830, "end": 855, "name": "POP", "source": 1 }, - { - "begin": 869, - "end": 889, - "name": "PUSH [tag]", - "source": 1, - "value": "29" - }, - { "begin": 887, "end": 888, "name": "DUP4", "source": 1 }, - { - "begin": 869, - "end": 889, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 869, - "end": 889, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 869, - "end": 889, - "name": "tag", - "source": 1, - "value": "29" - }, - { "begin": 869, "end": 889, "name": "JUMPDEST", "source": 1 }, - { "begin": 864, "end": 889, "name": "SWAP3", "source": 1 }, - { "begin": 864, "end": 889, "name": "POP", "source": 1 }, - { "begin": 1057, "end": 1058, "name": "DUP2", "source": 1 }, - { - "begin": 989, - "end": 1055, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 985, "end": 1059, "name": "DIV", "source": 1 }, - { "begin": 982, "end": 983, "name": "DUP4", "source": 1 }, - { "begin": 979, "end": 1060, "name": "GT", "source": 1 }, - { "begin": 974, "end": 975, "name": "DUP3", "source": 1 }, - { "begin": 967, "end": 976, "name": "ISZERO", "source": 1 }, - { "begin": 960, "end": 977, "name": "ISZERO", "source": 1 }, - { "begin": 956, "end": 1061, "name": "AND", "source": 1 }, - { "begin": 953, "end": 955, "name": "ISZERO", "source": 1 }, - { - "begin": 953, - "end": 955, - "name": "PUSH [tag]", - "source": 1, - "value": "30" - }, - { "begin": 953, "end": 955, "name": "JUMPI", "source": 1 }, - { - "begin": 1064, - "end": 1082, - "name": "PUSH [tag]", - "source": 1, - "value": "31" - }, - { - "begin": 1064, - "end": 1082, - "name": "PUSH [tag]", - "source": 1, - "value": "32" - }, - { - "begin": 1064, - "end": 1082, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1064, - "end": 1082, - "name": "tag", - "source": 1, - "value": "31" - }, - { "begin": 1064, "end": 1082, "name": "JUMPDEST", "source": 1 }, - { - "begin": 953, - "end": 955, - "name": "tag", - "source": 1, - "value": "30" - }, - { "begin": 953, "end": 955, "name": "JUMPDEST", "source": 1 }, - { "begin": 1112, "end": 1113, "name": "DUP3", "source": 1 }, - { "begin": 1109, "end": 1110, "name": "DUP3", "source": 1 }, - { "begin": 1105, "end": 1114, "name": "MUL", "source": 1 }, - { "begin": 1094, "end": 1114, "name": "SWAP1", "source": 1 }, - { "begin": 1094, "end": 1114, "name": "POP", "source": 1 }, - { "begin": 820, "end": 1120, "name": "SWAP3", "source": 1 }, - { "begin": 820, "end": 1120, "name": "SWAP2", "source": 1 }, - { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, - { "begin": 820, "end": 1120, "name": "POP", "source": 1 }, - { - "begin": 820, - "end": 1120, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1126, - "end": 1203, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 1126, "end": 1203, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1126, - "end": 1203, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1192, "end": 1197, "name": "DUP2", "source": 1 }, - { "begin": 1181, "end": 1197, "name": "SWAP1", "source": 1 }, - { "begin": 1181, "end": 1197, "name": "POP", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "SWAP2", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "SWAP1", "source": 1 }, - { "begin": 1171, "end": 1203, "name": "POP", "source": 1 }, - { - "begin": 1171, - "end": 1203, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 1209, - "end": 1389, - "name": "tag", - "source": 1, - "value": "32" - }, - { "begin": 1209, "end": 1389, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1257, - "end": 1334, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 1254, - "end": 1255, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1247, "end": 1335, "name": "MSTORE", "source": 1 }, - { - "begin": 1354, - "end": 1358, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 1351, - "end": 1352, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 1344, "end": 1359, "name": "MSTORE", "source": 1 }, - { - "begin": 1378, - "end": 1382, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 1375, - "end": 1376, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1368, "end": 1383, "name": "REVERT", "source": 1 }, - { - "begin": 1395, - "end": 1517, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 1395, "end": 1517, "name": "JUMPDEST", "source": 1 }, - { - "begin": 1468, - "end": 1492, - "name": "PUSH [tag]", - "source": 1, - "value": "36" - }, - { "begin": 1486, "end": 1491, "name": "DUP2", "source": 1 }, - { - "begin": 1468, - "end": 1492, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { - "begin": 1468, - "end": 1492, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 1468, - "end": 1492, - "name": "tag", - "source": 1, - "value": "36" - }, - { "begin": 1468, "end": 1492, "name": "JUMPDEST", "source": 1 }, - { "begin": 1461, "end": 1466, "name": "DUP2", "source": 1 }, - { "begin": 1458, "end": 1493, "name": "EQ", "source": 1 }, - { - "begin": 1448, - "end": 1450, - "name": "PUSH [tag]", - "source": 1, - "value": "37" - }, - { "begin": 1448, "end": 1450, "name": "JUMPI", "source": 1 }, - { - "begin": 1507, - "end": 1508, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 1504, "end": 1505, "name": "DUP1", "source": 1 }, - { "begin": 1497, "end": 1509, "name": "REVERT", "source": 1 }, - { - "begin": 1448, - "end": 1450, - "name": "tag", - "source": 1, - "value": "37" - }, - { "begin": 1448, "end": 1450, "name": "JUMPDEST", "source": 1 }, - { "begin": 1438, "end": 1517, "name": "POP", "source": 1 }, - { - "begin": 1438, - "end": 1517, - "name": "JUMP", - "source": 1, - "value": "[out]" - } - ] - } - } - }, - "methodIdentifiers": { "multiply(uint256)": "c6888fa1" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"multiply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContract\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5d29beacc41878230d7981905bb45b41180007e0dbc2d810ff03c7b630b4048a\",\"urls\":[\"bzz-raw://b1fbe1547a505b6904392fc22ab43c61ca28882c7687498a84d4d648b374dc0e\",\"dweb:/ipfs/QmRVHiSGD6nBrUfXf8NX18FVrkitbuoVHj2r1To5k2XK6q\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContract {\n function multiply(uint a) public pure returns(uint d) {\n return a *7;\n }\n }" -} diff --git a/tests/contracts/compiled/TestContractIncr.json b/tests/contracts/compiled/TestContractIncr.json deleted file mode 100644 index 5e1d9d95a1..0000000000 --- a/tests/contracts/compiled/TestContractIncr.json +++ /dev/null @@ -1,1389 +0,0 @@ -{ - "byteCode": "0x608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", - "contract": { - "abi": [ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "inputs": [], - "name": "count", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "incr", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "assembly": " /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":107:162 constructor() public {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"main.sol\":150:151 0 */\n 0x00\n /* \"main.sol\":142:147 count */\n dup1\n /* \"main.sol\":142:151 count = 0 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":39:243 contract TestContractIncr {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x06661abd\n eq\n tag_3\n jumpi\n dup1\n 0x119fbbd4\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":75:92 uint public count */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":176:237 function incr() public {... */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":75:92 uint public count */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":176:237 function incr() public {... */\n tag_10:\n /* \"main.sol\":225:226 1 */\n 0x01\n /* \"main.sol\":219:224 count */\n sload(0x00)\n /* \"main.sol\":219:226 count+1 */\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n /* \"main.sol\":213:218 count */\n 0x00\n /* \"main.sol\":213:226 count=count+1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":176:237 function incr() public {... */\n jump\t// out\n /* \"#utility.yul\":7:125 */\n tag_15:\n /* \"#utility.yul\":94:118 */\n tag_17\n /* \"#utility.yul\":112:117 */\n dup2\n /* \"#utility.yul\":94:118 */\n tag_18\n jump\t// in\n tag_17:\n /* \"#utility.yul\":89:92 */\n dup3\n /* \"#utility.yul\":82:119 */\n mstore\n /* \"#utility.yul\":72:125 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":131:353 */\n tag_8:\n 0x00\n /* \"#utility.yul\":262:264 */\n 0x20\n /* \"#utility.yul\":251:260 */\n dup3\n /* \"#utility.yul\":247:265 */\n add\n /* \"#utility.yul\":239:265 */\n swap1\n pop\n /* \"#utility.yul\":275:346 */\n tag_20\n /* \"#utility.yul\":343:344 */\n 0x00\n /* \"#utility.yul\":332:341 */\n dup4\n /* \"#utility.yul\":328:345 */\n add\n /* \"#utility.yul\":319:325 */\n dup5\n /* \"#utility.yul\":275:346 */\n tag_15\n jump\t// in\n tag_20:\n /* \"#utility.yul\":229:353 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":359:664 */\n tag_13:\n 0x00\n /* \"#utility.yul\":418:438 */\n tag_22\n /* \"#utility.yul\":436:437 */\n dup3\n /* \"#utility.yul\":418:438 */\n tag_18\n jump\t// in\n tag_22:\n /* \"#utility.yul\":413:438 */\n swap2\n pop\n /* \"#utility.yul\":452:472 */\n tag_23\n /* \"#utility.yul\":470:471 */\n dup4\n /* \"#utility.yul\":452:472 */\n tag_18\n jump\t// in\n tag_23:\n /* \"#utility.yul\":447:472 */\n swap3\n pop\n /* \"#utility.yul\":606:607 */\n dup3\n /* \"#utility.yul\":538:604 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":534:608 */\n sub\n /* \"#utility.yul\":531:532 */\n dup3\n /* \"#utility.yul\":528:609 */\n gt\n /* \"#utility.yul\":525:527 */\n iszero\n tag_24\n jumpi\n /* \"#utility.yul\":612:630 */\n tag_25\n tag_26\n jump\t// in\n tag_25:\n /* \"#utility.yul\":525:527 */\n tag_24:\n /* \"#utility.yul\":656:657 */\n dup3\n /* \"#utility.yul\":653:654 */\n dup3\n /* \"#utility.yul\":649:658 */\n add\n /* \"#utility.yul\":642:658 */\n swap1\n pop\n /* \"#utility.yul\":403:664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":670:747 */\n tag_18:\n 0x00\n /* \"#utility.yul\":736:741 */\n dup2\n /* \"#utility.yul\":725:741 */\n swap1\n pop\n /* \"#utility.yul\":715:747 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":753:933 */\n tag_26:\n /* \"#utility.yul\":801:878 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":798:799 */\n 0x00\n /* \"#utility.yul\":791:879 */\n mstore\n /* \"#utility.yul\":898:902 */\n 0x11\n /* \"#utility.yul\":895:896 */\n 0x04\n /* \"#utility.yul\":888:903 */\n mstore\n /* \"#utility.yul\":922:926 */\n 0x24\n /* \"#utility.yul\":919:920 */\n 0x00\n /* \"#utility.yul\":912:927 */\n revert\n\n auxdata: 0xa264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033\n}\n", - "bytecode": { - "generatedSources": [], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506000808190555061016f806100276000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 DUP1 DUP2 SWAP1 SSTORE POP PUSH2 0x16F DUP1 PUSH2 0x27 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "39:204:0:-:0;;;107:55;;;;;;;;;;150:1;142:5;:9;;;;39:204;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:936:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "72:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "89:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "112:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "94:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "94:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "82:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "82:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "82:37:1" - } - ] - }, - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "60:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "67:3:1", - "type": "" - } - ], - "src": "7:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "229:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "239:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "251:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "262:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "247:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "247:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "239:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "319:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "332:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "343:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "328:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "328:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "275:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "275:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "275:71:1" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "201:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "213:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "224:4:1", - "type": "" - } - ], - "src": "131:222:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "403:261:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "413:25:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "436:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "418:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "418:20:1" - }, - "variableNames": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "413:1:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "447:25:1", - "value": { - "arguments": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "470:1:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "452:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "452:20:1" - }, - "variableNames": [ - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "447:1:1" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "610:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nodeType": "YulIdentifier", - "src": "612:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "612:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "612:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "531:1:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "538:66:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "606:1:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "534:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "534:74:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "528:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "528:81:1" - }, - "nodeType": "YulIf", - "src": "525:2:1" - }, - { - "nodeType": "YulAssignment", - "src": "642:16:1", - "value": { - "arguments": [ - { - "name": "x", - "nodeType": "YulIdentifier", - "src": "653:1:1" - }, - { - "name": "y", - "nodeType": "YulIdentifier", - "src": "656:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "649:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "649:9:1" - }, - "variableNames": [ - { - "name": "sum", - "nodeType": "YulIdentifier", - "src": "642:3:1" - } - ] - } - ] - }, - "name": "checked_add_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nodeType": "YulTypedName", - "src": "390:1:1", - "type": "" - }, - { - "name": "y", - "nodeType": "YulTypedName", - "src": "393:1:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nodeType": "YulTypedName", - "src": "399:3:1", - "type": "" - } - ], - "src": "359:305:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "715:32:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "725:16:1", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "736:5:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "725:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "697:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "707:7:1", - "type": "" - } - ], - "src": "670:77:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "781:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "798:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "801:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "791:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "791:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "791:88:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "895:1:1", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "898:4:1", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "888:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "888:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "888:15:1" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "919:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "922:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "912:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "912:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "912:15:1" - } - ] - }, - "name": "panic_error_0x11", - "nodeType": "YulFunctionDefinition", - "src": "753:180:1" - } - ] - }, - "contents": "{\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c806306661abd1461003b578063119fbbd414610059575b600080fd5b610043610063565b604051610050919061008f565b60405180910390f35b610061610069565b005b60005481565b600160005461007891906100aa565b600081905550565b61008981610100565b82525050565b60006020820190506100a46000830184610080565b92915050565b60006100b582610100565b91506100c083610100565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156100f5576100f461010a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6661ABD EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x119FBBD4 EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x63 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x69 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SLOAD PUSH2 0x78 SWAP2 SWAP1 PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x89 DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xA4 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x80 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB5 DUP3 PUSH2 0x100 JUMP JUMPDEST SWAP2 POP PUSH2 0xC0 DUP4 PUSH2 0x100 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0xF5 JUMPI PUSH2 0xF4 PUSH2 0x10A JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL SWAP2 PUSH27 0x28B1D30A0337377FFF711D257A31FB69E1A5C469A4DB8E4393E90B 0xD KECCAK256 PUSH5 0x736F6C6343 STOP ADDMOD SUB STOP CALLER ", - "sourceMap": "39:204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;75:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;176:61;;;:::i;:::-;;75:17;;;;:::o;176:61::-;225:1;219:5;;:7;;;;:::i;:::-;213:5;:13;;;;176:61::o;7:118:1:-;94:24;112:5;94:24;:::i;:::-;89:3;82:37;72:53;;:::o;131:222::-;;262:2;251:9;247:18;239:26;;275:71;343:1;332:9;328:17;319:6;275:71;:::i;:::-;229:124;;;;:::o;359:305::-;;418:20;436:1;418:20;:::i;:::-;413:25;;452:20;470:1;452:20;:::i;:::-;447:25;;606:1;538:66;534:74;531:1;528:81;525:2;;;612:18;;:::i;:::-;525:2;656:1;653;649:9;642:16;;403:261;;;;:::o;670:77::-;;736:5;725:16;;715:32;;;:::o;753:180::-;801:77;798:1;791:88;898:4;895:1;888:15;922:4;919:1;912:15" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "73400", - "executionCost": "5137", - "totalCost": "78537" - }, - "external": { "count()": "1107", "incr()": "infinite" } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 243, "name": "MSTORE", "source": 0 }, - { "begin": 107, "end": 162, "name": "CALLVALUE", "source": 0 }, - { "begin": 107, "end": 162, "name": "DUP1", "source": 0 }, - { "begin": 107, "end": 162, "name": "ISZERO", "source": 0 }, - { - "begin": 107, - "end": 162, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 107, "end": 162, "name": "JUMPI", "source": 0 }, - { - "begin": 107, - "end": 162, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 107, "end": 162, "name": "DUP1", "source": 0 }, - { "begin": 107, "end": 162, "name": "REVERT", "source": 0 }, - { - "begin": 107, - "end": 162, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 107, "end": 162, "name": "JUMPDEST", "source": 0 }, - { "begin": 107, "end": 162, "name": "POP", "source": 0 }, - { - "begin": 150, - "end": 151, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 142, "end": 147, "name": "DUP1", "source": 0 }, - { "begin": 142, "end": 151, "name": "DUP2", "source": 0 }, - { "begin": 142, "end": 151, "name": "SWAP1", "source": 0 }, - { "begin": 142, "end": 151, "name": "SSTORE", "source": 0 }, - { "begin": 142, "end": 151, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH #[$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH [$]", - "source": 0, - "value": "0000000000000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 243, "name": "CODECOPY", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 243, "name": "RETURN", "source": 0 } - ], - ".data": { - "0": { - ".auxdata": "a264697066735822122002917a28b1d30a0337377fff711d257a31fb69e1a5c469a4db8e4393e90b0d2064736f6c63430008030033", - ".code": [ - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 39, "end": 243, "name": "MSTORE", "source": 0 }, - { "begin": 39, "end": 243, "name": "CALLVALUE", "source": 0 }, - { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 243, "name": "ISZERO", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 243, "name": "REVERT", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "tag", - "source": 0, - "value": "1" - }, - { "begin": 39, "end": 243, "name": "JUMPDEST", "source": 0 }, - { "begin": 39, "end": 243, "name": "POP", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 243, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 39, "end": 243, "name": "LT", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 243, "name": "CALLDATALOAD", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "E0" - }, - { "begin": 39, "end": 243, "name": "SHR", "source": 0 }, - { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "6661ABD" - }, - { "begin": 39, "end": 243, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, - { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "119FBBD4" - }, - { "begin": 39, "end": 243, "name": "EQ", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH [tag]", - "source": 0, - "value": "4" - }, - { "begin": 39, "end": 243, "name": "JUMPI", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "tag", - "source": 0, - "value": "2" - }, - { "begin": 39, "end": 243, "name": "JUMPDEST", "source": 0 }, - { - "begin": 39, - "end": 243, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 39, "end": 243, "name": "DUP1", "source": 0 }, - { "begin": 39, "end": 243, "name": "REVERT", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "tag", - "source": 0, - "value": "3" - }, - { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "PUSH [tag]", - "source": 0, - "value": "5" - }, - { - "begin": 75, - "end": 92, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { - "begin": 75, - "end": 92, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 92, - "name": "tag", - "source": 0, - "value": "5" - }, - { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 92, "name": "MLOAD", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 75, "end": 92, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 92, "name": "SWAP1", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "PUSH [tag]", - "source": 0, - "value": "8" - }, - { - "begin": 75, - "end": 92, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 75, - "end": 92, - "name": "tag", - "source": 0, - "value": "7" - }, - { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 75, "end": 92, "name": "MLOAD", "source": 0 }, - { "begin": 75, "end": 92, "name": "DUP1", "source": 0 }, - { "begin": 75, "end": 92, "name": "SWAP2", "source": 0 }, - { "begin": 75, "end": 92, "name": "SUB", "source": 0 }, - { "begin": 75, "end": 92, "name": "SWAP1", "source": 0 }, - { "begin": 75, "end": 92, "name": "RETURN", "source": 0 }, - { - "begin": 176, - "end": 237, - "name": "tag", - "source": 0, - "value": "4" - }, - { "begin": 176, "end": 237, "name": "JUMPDEST", "source": 0 }, - { - "begin": 176, - "end": 237, - "name": "PUSH [tag]", - "source": 0, - "value": "9" - }, - { - "begin": 176, - "end": 237, - "name": "PUSH [tag]", - "source": 0, - "value": "10" - }, - { - "begin": 176, - "end": 237, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 176, - "end": 237, - "name": "tag", - "source": 0, - "value": "9" - }, - { "begin": 176, "end": 237, "name": "JUMPDEST", "source": 0 }, - { "begin": 176, "end": 237, "name": "STOP", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 75, "end": 92, "name": "JUMPDEST", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 75, "end": 92, "name": "SLOAD", "source": 0 }, - { "begin": 75, "end": 92, "name": "DUP2", "source": 0 }, - { - "begin": 75, - "end": 92, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 176, - "end": 237, - "name": "tag", - "source": 0, - "value": "10" - }, - { "begin": 176, "end": 237, "name": "JUMPDEST", "source": 0 }, - { - "begin": 225, - "end": 226, - "name": "PUSH", - "source": 0, - "value": "1" - }, - { - "begin": 219, - "end": 224, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 219, "end": 224, "name": "SLOAD", "source": 0 }, - { - "begin": 219, - "end": 226, - "name": "PUSH [tag]", - "source": 0, - "value": "12" - }, - { "begin": 219, "end": 226, "name": "SWAP2", "source": 0 }, - { "begin": 219, "end": 226, "name": "SWAP1", "source": 0 }, - { - "begin": 219, - "end": 226, - "name": "PUSH [tag]", - "source": 0, - "value": "13" - }, - { - "begin": 219, - "end": 226, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { - "begin": 219, - "end": 226, - "name": "tag", - "source": 0, - "value": "12" - }, - { "begin": 219, "end": 226, "name": "JUMPDEST", "source": 0 }, - { - "begin": 213, - "end": 218, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 213, "end": 226, "name": "DUP2", "source": 0 }, - { "begin": 213, "end": 226, "name": "SWAP1", "source": 0 }, - { "begin": 213, "end": 226, "name": "SSTORE", "source": 0 }, - { "begin": 213, "end": 226, "name": "POP", "source": 0 }, - { - "begin": 176, - "end": 237, - "name": "JUMP", - "source": 0, - "value": "[out]" - }, - { - "begin": 7, - "end": 125, - "name": "tag", - "source": 1, - "value": "15" - }, - { "begin": 7, "end": 125, "name": "JUMPDEST", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "17" - }, - { "begin": 112, "end": 117, "name": "DUP2", "source": 1 }, - { - "begin": 94, - "end": 118, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 94, - "end": 118, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 94, - "end": 118, - "name": "tag", - "source": 1, - "value": "17" - }, - { "begin": 94, "end": 118, "name": "JUMPDEST", "source": 1 }, - { "begin": 89, "end": 92, "name": "DUP3", "source": 1 }, - { "begin": 82, "end": 119, "name": "MSTORE", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { "begin": 72, "end": 125, "name": "POP", "source": 1 }, - { - "begin": 72, - "end": 125, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 131, - "end": 353, - "name": "tag", - "source": 1, - "value": "8" - }, - { "begin": 131, "end": 353, "name": "JUMPDEST", "source": 1 }, - { - "begin": 131, - "end": 353, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 262, - "end": 264, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 251, "end": 260, "name": "DUP3", "source": 1 }, - { "begin": 247, "end": 265, "name": "ADD", "source": 1 }, - { "begin": 239, "end": 265, "name": "SWAP1", "source": 1 }, - { "begin": 239, "end": 265, "name": "POP", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "20" - }, - { - "begin": 343, - "end": 344, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 332, "end": 341, "name": "DUP4", "source": 1 }, - { "begin": 328, "end": 345, "name": "ADD", "source": 1 }, - { "begin": 319, "end": 325, "name": "DUP5", "source": 1 }, - { - "begin": 275, - "end": 346, - "name": "PUSH [tag]", - "source": 1, - "value": "15" - }, - { - "begin": 275, - "end": 346, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 275, - "end": 346, - "name": "tag", - "source": 1, - "value": "20" - }, - { "begin": 275, "end": 346, "name": "JUMPDEST", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP3", "source": 1 }, - { "begin": 229, "end": 353, "name": "SWAP2", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { "begin": 229, "end": 353, "name": "POP", "source": 1 }, - { - "begin": 229, - "end": 353, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 359, - "end": 664, - "name": "tag", - "source": 1, - "value": "13" - }, - { "begin": 359, "end": 664, "name": "JUMPDEST", "source": 1 }, - { - "begin": 359, - "end": 664, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "22" - }, - { "begin": 436, "end": 437, "name": "DUP3", "source": 1 }, - { - "begin": 418, - "end": 438, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 418, - "end": 438, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 418, - "end": 438, - "name": "tag", - "source": 1, - "value": "22" - }, - { "begin": 418, "end": 438, "name": "JUMPDEST", "source": 1 }, - { "begin": 413, "end": 438, "name": "SWAP2", "source": 1 }, - { "begin": 413, "end": 438, "name": "POP", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "23" - }, - { "begin": 470, "end": 471, "name": "DUP4", "source": 1 }, - { - "begin": 452, - "end": 472, - "name": "PUSH [tag]", - "source": 1, - "value": "18" - }, - { - "begin": 452, - "end": 472, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 452, - "end": 472, - "name": "tag", - "source": 1, - "value": "23" - }, - { "begin": 452, "end": 472, "name": "JUMPDEST", "source": 1 }, - { "begin": 447, "end": 472, "name": "SWAP3", "source": 1 }, - { "begin": 447, "end": 472, "name": "POP", "source": 1 }, - { "begin": 606, "end": 607, "name": "DUP3", "source": 1 }, - { - "begin": 538, - "end": 604, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 534, "end": 608, "name": "SUB", "source": 1 }, - { "begin": 531, "end": 532, "name": "DUP3", "source": 1 }, - { "begin": 528, "end": 609, "name": "GT", "source": 1 }, - { "begin": 525, "end": 527, "name": "ISZERO", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "PUSH [tag]", - "source": 1, - "value": "24" - }, - { "begin": 525, "end": 527, "name": "JUMPI", "source": 1 }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "25" - }, - { - "begin": 612, - "end": 630, - "name": "PUSH [tag]", - "source": 1, - "value": "26" - }, - { - "begin": 612, - "end": 630, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 612, - "end": 630, - "name": "tag", - "source": 1, - "value": "25" - }, - { "begin": 612, "end": 630, "name": "JUMPDEST", "source": 1 }, - { - "begin": 525, - "end": 527, - "name": "tag", - "source": 1, - "value": "24" - }, - { "begin": 525, "end": 527, "name": "JUMPDEST", "source": 1 }, - { "begin": 656, "end": 657, "name": "DUP3", "source": 1 }, - { "begin": 653, "end": 654, "name": "DUP3", "source": 1 }, - { "begin": 649, "end": 658, "name": "ADD", "source": 1 }, - { "begin": 642, "end": 658, "name": "SWAP1", "source": 1 }, - { "begin": 642, "end": 658, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP3", "source": 1 }, - { "begin": 403, "end": 664, "name": "SWAP2", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { "begin": 403, "end": 664, "name": "POP", "source": 1 }, - { - "begin": 403, - "end": 664, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 670, - "end": 747, - "name": "tag", - "source": 1, - "value": "18" - }, - { "begin": 670, "end": 747, "name": "JUMPDEST", "source": 1 }, - { - "begin": 670, - "end": 747, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 736, "end": 741, "name": "DUP2", "source": 1 }, - { "begin": 725, "end": 741, "name": "SWAP1", "source": 1 }, - { "begin": 725, "end": 741, "name": "POP", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP2", "source": 1 }, - { "begin": 715, "end": 747, "name": "SWAP1", "source": 1 }, - { "begin": 715, "end": 747, "name": "POP", "source": 1 }, - { - "begin": 715, - "end": 747, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 753, - "end": 933, - "name": "tag", - "source": 1, - "value": "26" - }, - { "begin": 753, "end": 933, "name": "JUMPDEST", "source": 1 }, - { - "begin": 801, - "end": 878, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" - }, - { - "begin": 798, - "end": 799, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 791, "end": 879, "name": "MSTORE", "source": 1 }, - { - "begin": 898, - "end": 902, - "name": "PUSH", - "source": 1, - "value": "11" - }, - { - "begin": 895, - "end": 896, - "name": "PUSH", - "source": 1, - "value": "4" - }, - { "begin": 888, "end": 903, "name": "MSTORE", "source": 1 }, - { - "begin": 922, - "end": 926, - "name": "PUSH", - "source": 1, - "value": "24" - }, - { - "begin": 919, - "end": 920, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 912, "end": 927, "name": "REVERT", "source": 1 } - ] - } - } - }, - "methodIdentifiers": { "count()": "06661abd", "incr()": "119fbbd4" } - }, - "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TestContractIncr\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x338162b85eaf39a85daac3fe2d3d8e94fad18f74dd7c238709d0500e96f14b71\",\"urls\":[\"bzz-raw://0229ffcdcdfa88d496ad29dc5532ca35e6ab895b46b64762d09e01bc31056af5\",\"dweb:/ipfs/QmeE5zDfodVZWTxxQ6iTJ6W8GKvdL1bKhAR2P1m21ejfzP\"]}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3, - "contract": "main.sol:TestContractIncr", - "label": "count", - "offset": 0, - "slot": "0", - "type": "t_uint256" - } - ], - "types": { - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "sourceCode": "\n pragma solidity >=0.8.0;\n \n contract TestContractIncr {\n uint public count;\n \n constructor() public {\n count = 0;\n }\n \n function incr() public {\n count=count+1;\n }\n }" -} diff --git a/tests/contracts/compiled/TraceCallee.json b/tests/contracts/compiled/TraceCallee.json new file mode 100644 index 0000000000..03316e2b6a --- /dev/null +++ b/tests/contracts/compiled/TraceCallee.json @@ -0,0 +1,2339 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b506101fe806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063975057e71461003b578063fd63983b14610059575b600080fd5b610043610089565b60405161005091906100ca565b60405180910390f35b610073600480360381019061006e9190610116565b61008f565b60405161008091906100ca565b60405180910390f35b60005481565b600080600790508260008190555080836100a99190610172565b915050919050565b6000819050919050565b6100c4816100b1565b82525050565b60006020820190506100df60008301846100bb565b92915050565b600080fd5b6100f3816100b1565b81146100fe57600080fd5b50565b600081359050610110816100ea565b92915050565b60006020828403121561012c5761012b6100e5565b5b600061013a84828501610101565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061017d826100b1565b9150610188836100b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101bd576101bc610143565b5b82820190509291505056fea264697066735822122043a805007676177ccb837ed0633043277bf9295319401263673c9ab92c1de3aa64736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "uint256", "name": "_value", "type": "uint256" } + ], + "name": "addtwo", + "outputs": [ + { "internalType": "uint256", "name": "result", "type": "uint256" } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "store", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":1576:1779 contract TraceCallee {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":1576:1779 contract TraceCallee {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x975057e7\n eq\n tag_3\n jumpi\n dup1\n 0xfd63983b\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":1603:1623 uint256 public store */\n tag_3:\n tag_5\n tag_6\n jump\t// in\n tag_5:\n mload(0x40)\n tag_7\n swap2\n swap1\n tag_8\n jump\t// in\n tag_7:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1630:1777 function addtwo(uint256 _value) external returns (uint256 result) {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n mload(0x40)\n tag_13\n swap2\n swap1\n tag_8\n jump\t// in\n tag_13:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1603:1623 uint256 public store */\n tag_6:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":1630:1777 function addtwo(uint256 _value) external returns (uint256 result) {... */\n tag_12:\n /* \"main.sol\":1680:1694 uint256 result */\n 0x00\n /* \"main.sol\":1706:1715 uint256 x */\n dup1\n /* \"main.sol\":1718:1719 7 */\n 0x07\n /* \"main.sol\":1706:1719 uint256 x = 7 */\n swap1\n pop\n /* \"main.sol\":1737:1743 _value */\n dup3\n /* \"main.sol\":1729:1734 store */\n 0x00\n /* \"main.sol\":1729:1743 store = _value */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1769:1770 x */\n dup1\n /* \"main.sol\":1760:1766 _value */\n dup4\n /* \"main.sol\":1760:1770 _value + x */\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n /* \"main.sol\":1753:1770 return _value + x */\n swap2\n pop\n pop\n /* \"main.sol\":1630:1777 function addtwo(uint256 _value) external returns (uint256 result) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:84 */\n tag_17:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":73:78 */\n dup2\n /* \"#utility.yul\":62:78 */\n swap1\n pop\n /* \"#utility.yul\":7:84 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":90:208 */\n tag_18:\n /* \"#utility.yul\":177:201 */\n tag_28\n /* \"#utility.yul\":195:200 */\n dup2\n /* \"#utility.yul\":177:201 */\n tag_17\n jump\t// in\n tag_28:\n /* \"#utility.yul\":172:175 */\n dup3\n /* \"#utility.yul\":165:202 */\n mstore\n /* \"#utility.yul\":90:208 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":214:436 */\n tag_8:\n /* \"#utility.yul\":307:311 */\n 0x00\n /* \"#utility.yul\":345:347 */\n 0x20\n /* \"#utility.yul\":334:343 */\n dup3\n /* \"#utility.yul\":330:348 */\n add\n /* \"#utility.yul\":322:348 */\n swap1\n pop\n /* \"#utility.yul\":358:429 */\n tag_30\n /* \"#utility.yul\":426:427 */\n 0x00\n /* \"#utility.yul\":415:424 */\n dup4\n /* \"#utility.yul\":411:428 */\n add\n /* \"#utility.yul\":402:408 */\n dup5\n /* \"#utility.yul\":358:429 */\n tag_18\n jump\t// in\n tag_30:\n /* \"#utility.yul\":214:436 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":523:640 */\n tag_20:\n /* \"#utility.yul\":632:633 */\n 0x00\n /* \"#utility.yul\":629:630 */\n dup1\n /* \"#utility.yul\":622:634 */\n revert\n /* \"#utility.yul\":769:891 */\n tag_22:\n /* \"#utility.yul\":842:866 */\n tag_35\n /* \"#utility.yul\":860:865 */\n dup2\n /* \"#utility.yul\":842:866 */\n tag_17\n jump\t// in\n tag_35:\n /* \"#utility.yul\":835:840 */\n dup2\n /* \"#utility.yul\":832:867 */\n eq\n /* \"#utility.yul\":822:885 */\n tag_36\n jumpi\n /* \"#utility.yul\":881:882 */\n 0x00\n /* \"#utility.yul\":878:879 */\n dup1\n /* \"#utility.yul\":871:883 */\n revert\n /* \"#utility.yul\":822:885 */\n tag_36:\n /* \"#utility.yul\":769:891 */\n pop\n jump\t// out\n /* \"#utility.yul\":897:1036 */\n tag_23:\n /* \"#utility.yul\":943:948 */\n 0x00\n /* \"#utility.yul\":981:987 */\n dup2\n /* \"#utility.yul\":968:988 */\n calldataload\n /* \"#utility.yul\":959:988 */\n swap1\n pop\n /* \"#utility.yul\":997:1030 */\n tag_38\n /* \"#utility.yul\":1024:1029 */\n dup2\n /* \"#utility.yul\":997:1030 */\n tag_22\n jump\t// in\n tag_38:\n /* \"#utility.yul\":897:1036 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1042:1371 */\n tag_11:\n /* \"#utility.yul\":1101:1107 */\n 0x00\n /* \"#utility.yul\":1150:1152 */\n 0x20\n /* \"#utility.yul\":1138:1147 */\n dup3\n /* \"#utility.yul\":1129:1136 */\n dup5\n /* \"#utility.yul\":1125:1148 */\n sub\n /* \"#utility.yul\":1121:1153 */\n slt\n /* \"#utility.yul\":1118:1237 */\n iszero\n tag_40\n jumpi\n /* \"#utility.yul\":1156:1235 */\n tag_41\n tag_20\n jump\t// in\n tag_41:\n /* \"#utility.yul\":1118:1237 */\n tag_40:\n /* \"#utility.yul\":1276:1277 */\n 0x00\n /* \"#utility.yul\":1301:1354 */\n tag_42\n /* \"#utility.yul\":1346:1353 */\n dup5\n /* \"#utility.yul\":1337:1343 */\n dup3\n /* \"#utility.yul\":1326:1335 */\n dup6\n /* \"#utility.yul\":1322:1344 */\n add\n /* \"#utility.yul\":1301:1354 */\n tag_23\n jump\t// in\n tag_42:\n /* \"#utility.yul\":1291:1354 */\n swap2\n pop\n /* \"#utility.yul\":1247:1364 */\n pop\n /* \"#utility.yul\":1042:1371 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1377:1557 */\n tag_24:\n /* \"#utility.yul\":1425:1502 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1422:1423 */\n 0x00\n /* \"#utility.yul\":1415:1503 */\n mstore\n /* \"#utility.yul\":1522:1526 */\n 0x11\n /* \"#utility.yul\":1519:1520 */\n 0x04\n /* \"#utility.yul\":1512:1527 */\n mstore\n /* \"#utility.yul\":1546:1550 */\n 0x24\n /* \"#utility.yul\":1543:1544 */\n 0x00\n /* \"#utility.yul\":1536:1551 */\n revert\n /* \"#utility.yul\":1563:1868 */\n tag_16:\n /* \"#utility.yul\":1603:1606 */\n 0x00\n /* \"#utility.yul\":1622:1642 */\n tag_45\n /* \"#utility.yul\":1640:1641 */\n dup3\n /* \"#utility.yul\":1622:1642 */\n tag_17\n jump\t// in\n tag_45:\n /* \"#utility.yul\":1617:1642 */\n swap2\n pop\n /* \"#utility.yul\":1656:1676 */\n tag_46\n /* \"#utility.yul\":1674:1675 */\n dup4\n /* \"#utility.yul\":1656:1676 */\n tag_17\n jump\t// in\n tag_46:\n /* \"#utility.yul\":1651:1676 */\n swap3\n pop\n /* \"#utility.yul\":1810:1811 */\n dup3\n /* \"#utility.yul\":1742:1808 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1738:1812 */\n sub\n /* \"#utility.yul\":1735:1736 */\n dup3\n /* \"#utility.yul\":1732:1813 */\n gt\n /* \"#utility.yul\":1729:1836 */\n iszero\n tag_47\n jumpi\n /* \"#utility.yul\":1816:1834 */\n tag_48\n tag_24\n jump\t// in\n tag_48:\n /* \"#utility.yul\":1729:1836 */\n tag_47:\n /* \"#utility.yul\":1860:1861 */\n dup3\n /* \"#utility.yul\":1857:1858 */\n dup3\n /* \"#utility.yul\":1853:1862 */\n add\n /* \"#utility.yul\":1846:1862 */\n swap1\n pop\n /* \"#utility.yul\":1563:1868 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122043a805007676177ccb837ed0633043277bf9295319401263673c9ab92c1de3aa64736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506101fe806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063975057e71461003b578063fd63983b14610059575b600080fd5b610043610089565b60405161005091906100ca565b60405180910390f35b610073600480360381019061006e9190610116565b61008f565b60405161008091906100ca565b60405180910390f35b60005481565b600080600790508260008190555080836100a99190610172565b915050919050565b6000819050919050565b6100c4816100b1565b82525050565b60006020820190506100df60008301846100bb565b92915050565b600080fd5b6100f3816100b1565b81146100fe57600080fd5b50565b600081359050610110816100ea565b92915050565b60006020828403121561012c5761012b6100e5565b5b600061013a84828501610101565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061017d826100b1565b9150610188836100b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101bd576101bc610143565b5b82820190509291505056fea264697066735822122043a805007676177ccb837ed0633043277bf9295319401263673c9ab92c1de3aa64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FE DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x975057E7 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xFD63983B EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0xCA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0x116 JUMP JUMPDEST PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xCA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x7 SWAP1 POP DUP3 PUSH1 0x0 DUP2 SWAP1 SSTORE POP DUP1 DUP4 PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x172 JUMP JUMPDEST SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC4 DUP2 PUSH2 0xB1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xDF PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xBB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF3 DUP2 PUSH2 0xB1 JUMP JUMPDEST DUP2 EQ PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x110 DUP2 PUSH2 0xEA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12C JUMPI PUSH2 0x12B PUSH2 0xE5 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x13A DUP5 DUP3 DUP6 ADD PUSH2 0x101 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D DUP3 PUSH2 0xB1 JUMP JUMPDEST SWAP2 POP PUSH2 0x188 DUP4 PUSH2 0xB1 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1BD JUMPI PUSH2 0x1BC PUSH2 0x143 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0xA8 SDIV STOP PUSH23 0x76177CCB837ED0633043277BF9295319401263673C9AB9 0x2C SAR 0xE3 0xAA PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "1576:203:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@addtwo_203": { + "entryPoint": 143, + "id": 203, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@store_183": { + "entryPoint": 137, + "id": 183, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_t_uint256": { + "entryPoint": 257, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": 278, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 187, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 202, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 370, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 177, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 323, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 229, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 234, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1871:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:1", + "type": "" + } + ], + "src": "7:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "155:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "195:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "177:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "177:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "165:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "165:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "165:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "143:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:1", + "type": "" + } + ], + "src": "90:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "312:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "322:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "334:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "330:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "330:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "322:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "402:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "358:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "358:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "358:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "284:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "296:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "307:4:1", + "type": "" + } + ], + "src": "214:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "482:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "492:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "508:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "502:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "502:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "492:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "475:6:1", + "type": "" + } + ], + "src": "442:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "612:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "629:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "632:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "622:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "622:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "622:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "523:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "735:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "752:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "755:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "745:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "745:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "745:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "646:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "812:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "869:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "878:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "881:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "871:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "871:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "871:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "835:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "860:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "842:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "842:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "832:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "832:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "825:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "825:43:1" + }, + "nodeType": "YulIf", + "src": "822:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "805:5:1", + "type": "" + } + ], + "src": "769:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "949:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "959:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "981:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "968:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "968:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "959:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1024:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "997:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "997:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "997:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "927:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "935:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "943:5:1", + "type": "" + } + ], + "src": "897:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1108:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1154:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1156:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "1156:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1156:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1129:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1138:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1125:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1125:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1150:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1121:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1121:32:1" + }, + "nodeType": "YulIf", + "src": "1118:119:1" + }, + { + "nodeType": "YulBlock", + "src": "1247:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1262:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1276:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1266:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1291:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1326:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1337:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1322:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1322:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1346:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1301:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1301:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1291:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1078:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1089:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1101:6:1", + "type": "" + } + ], + "src": "1042:329:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1405:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1422:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1425:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1415:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1415:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1415:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1519:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1522:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1512:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1512:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1512:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1543:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1546:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1536:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1536:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1536:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "1377:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1607:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1617:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1640:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1622:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1622:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1617:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1651:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1674:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1656:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1656:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1651:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1814:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1816:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "1816:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1816:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1735:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1742:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1810:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1738:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1738:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1732:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1732:81:1" + }, + "nodeType": "YulIf", + "src": "1729:107:1" + }, + { + "nodeType": "YulAssignment", + "src": "1846:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1857:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1860:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1853:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1853:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "1846:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "1594:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "1597:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "1603:3:1", + "type": "" + } + ], + "src": "1563:305:1" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c8063975057e71461003b578063fd63983b14610059575b600080fd5b610043610089565b60405161005091906100ca565b60405180910390f35b610073600480360381019061006e9190610116565b61008f565b60405161008091906100ca565b60405180910390f35b60005481565b600080600790508260008190555080836100a99190610172565b915050919050565b6000819050919050565b6100c4816100b1565b82525050565b60006020820190506100df60008301846100bb565b92915050565b600080fd5b6100f3816100b1565b81146100fe57600080fd5b50565b600081359050610110816100ea565b92915050565b60006020828403121561012c5761012b6100e5565b5b600061013a84828501610101565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061017d826100b1565b9150610188836100b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101bd576101bc610143565b5b82820190509291505056fea264697066735822122043a805007676177ccb837ed0633043277bf9295319401263673c9ab92c1de3aa64736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x975057E7 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xFD63983B EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x89 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0xCA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x73 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x6E SWAP2 SWAP1 PUSH2 0x116 JUMP JUMPDEST PUSH2 0x8F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x80 SWAP2 SWAP1 PUSH2 0xCA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x7 SWAP1 POP DUP3 PUSH1 0x0 DUP2 SWAP1 SSTORE POP DUP1 DUP4 PUSH2 0xA9 SWAP2 SWAP1 PUSH2 0x172 JUMP JUMPDEST SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC4 DUP2 PUSH2 0xB1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xDF PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xBB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xF3 DUP2 PUSH2 0xB1 JUMP JUMPDEST DUP2 EQ PUSH2 0xFE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x110 DUP2 PUSH2 0xEA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x12C JUMPI PUSH2 0x12B PUSH2 0xE5 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x13A DUP5 DUP3 DUP6 ADD PUSH2 0x101 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x17D DUP3 PUSH2 0xB1 JUMP JUMPDEST SWAP2 POP PUSH2 0x188 DUP4 PUSH2 0xB1 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x1BD JUMPI PUSH2 0x1BC PUSH2 0x143 JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0xA8 SDIV STOP PUSH23 0x76177CCB837ED0633043277BF9295319401263673C9AB9 0x2C SAR 0xE3 0xAA PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "1576:203:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1603:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1630:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1603:20;;;;:::o;1630:147::-;1680:14;1706:9;1718:1;1706:13;;1737:6;1729:5;:14;;;;1769:1;1760:6;:10;;;;:::i;:::-;1753:17;;;1630:147;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:180::-;1425:77;1422:1;1415:88;1522:4;1519:1;1512:15;1546:4;1543:1;1536:15;1563:305;1603:3;1622:20;1640:1;1622:20;:::i;:::-;1617:25;;1656:20;1674:1;1656:20;:::i;:::-;1651:25;;1810:1;1742:66;1738:74;1735:1;1732:81;1729:107;;;1816:18;;:::i;:::-;1729:107;1860:1;1857;1853:9;1846:16;;1563:305;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "102000", + "executionCost": "147", + "totalCost": "102147" + }, + "external": { "addtwo(uint256)": "infinite", "store()": "2407" } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1576, "end": 1779, "name": "MSTORE", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "CALLVALUE", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "ISZERO", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 1576, "end": 1779, "name": "JUMPI", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "REVERT", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 1576, "end": 1779, "name": "JUMPDEST", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "POP", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1576, "end": 1779, "name": "CODECOPY", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1576, "end": 1779, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122043a805007676177ccb837ed0633043277bf9295319401263673c9ab92c1de3aa64736f6c634300080b0033", + ".code": [ + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1576, "end": 1779, "name": "MSTORE", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "CALLVALUE", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "ISZERO", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 1576, "end": 1779, "name": "JUMPI", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "REVERT", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 1576, "end": 1779, "name": "JUMPDEST", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "POP", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { + "begin": 1576, + "end": 1779, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1576, "end": 1779, "name": "LT", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 1576, "end": 1779, "name": "JUMPI", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1576, + "end": 1779, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 1576, "end": 1779, "name": "SHR", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "975057E7" + }, + { "begin": 1576, "end": 1779, "name": "EQ", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 1576, "end": 1779, "name": "JUMPI", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "FD63983B" + }, + { "begin": 1576, "end": 1779, "name": "EQ", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 1576, "end": 1779, "name": "JUMPI", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 1576, "end": 1779, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1576, + "end": 1779, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1576, "end": 1779, "name": "DUP1", "source": 0 }, + { "begin": 1576, "end": 1779, "name": "REVERT", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 1603, "end": 1623, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 1603, + "end": 1623, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 1603, + "end": 1623, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1603, + "end": 1623, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 1603, "end": 1623, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1603, "end": 1623, "name": "MLOAD", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 1603, "end": 1623, "name": "SWAP2", "source": 0 }, + { "begin": 1603, "end": 1623, "name": "SWAP1", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 1603, + "end": 1623, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1603, + "end": 1623, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 1603, "end": 1623, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1603, "end": 1623, "name": "MLOAD", "source": 0 }, + { "begin": 1603, "end": 1623, "name": "DUP1", "source": 0 }, + { "begin": 1603, "end": 1623, "name": "SWAP2", "source": 0 }, + { "begin": 1603, "end": 1623, "name": "SUB", "source": 0 }, + { "begin": 1603, "end": 1623, "name": "SWAP1", "source": 0 }, + { "begin": 1603, "end": 1623, "name": "RETURN", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 1630, "end": 1777, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1630, "end": 1777, "name": "DUP1", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1630, "end": 1777, "name": "SUB", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "DUP2", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "ADD", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SWAP1", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 1630, "end": 1777, "name": "SWAP2", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SWAP1", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 1630, + "end": 1777, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1630, + "end": 1777, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 1630, "end": 1777, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1630, + "end": 1777, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1630, + "end": 1777, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1630, "end": 1777, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1630, "end": 1777, "name": "MLOAD", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 1630, "end": 1777, "name": "SWAP2", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SWAP1", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 1630, + "end": 1777, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1630, + "end": 1777, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 1630, "end": 1777, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1630, "end": 1777, "name": "MLOAD", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "DUP1", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SWAP2", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SUB", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SWAP1", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "RETURN", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 1603, "end": 1623, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1603, "end": 1623, "name": "SLOAD", "source": 0 }, + { "begin": 1603, "end": 1623, "name": "DUP2", "source": 0 }, + { + "begin": 1603, + "end": 1623, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1630, + "end": 1777, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 1630, "end": 1777, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1680, + "end": 1694, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1706, "end": 1715, "name": "DUP1", "source": 0 }, + { + "begin": 1718, + "end": 1719, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 1706, "end": 1719, "name": "SWAP1", "source": 0 }, + { "begin": 1706, "end": 1719, "name": "POP", "source": 0 }, + { "begin": 1737, "end": 1743, "name": "DUP3", "source": 0 }, + { + "begin": 1729, + "end": 1734, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1729, "end": 1743, "name": "DUP2", "source": 0 }, + { "begin": 1729, "end": 1743, "name": "SWAP1", "source": 0 }, + { "begin": 1729, "end": 1743, "name": "SSTORE", "source": 0 }, + { "begin": 1729, "end": 1743, "name": "POP", "source": 0 }, + { "begin": 1769, "end": 1770, "name": "DUP1", "source": 0 }, + { "begin": 1760, "end": 1766, "name": "DUP4", "source": 0 }, + { + "begin": 1760, + "end": 1770, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 1760, "end": 1770, "name": "SWAP2", "source": 0 }, + { "begin": 1760, "end": 1770, "name": "SWAP1", "source": 0 }, + { + "begin": 1760, + "end": 1770, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { + "begin": 1760, + "end": 1770, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1760, + "end": 1770, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 1760, "end": 1770, "name": "JUMPDEST", "source": 0 }, + { "begin": 1753, "end": 1770, "name": "SWAP2", "source": 0 }, + { "begin": 1753, "end": 1770, "name": "POP", "source": 0 }, + { "begin": 1753, "end": 1770, "name": "POP", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SWAP2", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "SWAP1", "source": 0 }, + { "begin": 1630, "end": 1777, "name": "POP", "source": 0 }, + { + "begin": 1630, + "end": 1777, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 84, + "name": "tag", + "source": 1, + "value": "17" + }, + { "begin": 7, "end": 84, "name": "JUMPDEST", "source": 1 }, + { + "begin": 44, + "end": 51, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 73, "end": 78, "name": "DUP2", "source": 1 }, + { "begin": 62, "end": 78, "name": "SWAP1", "source": 1 }, + { "begin": 62, "end": 78, "name": "POP", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP2", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP1", "source": 1 }, + { "begin": 7, "end": 84, "name": "POP", "source": 1 }, + { + "begin": 7, + "end": 84, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 90, + "end": 208, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 90, "end": 208, "name": "JUMPDEST", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { "begin": 195, "end": 200, "name": "DUP2", "source": 1 }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 177, + "end": 201, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 177, + "end": 201, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 177, "end": 201, "name": "JUMPDEST", "source": 1 }, + { "begin": 172, "end": 175, "name": "DUP3", "source": 1 }, + { "begin": 165, "end": 202, "name": "MSTORE", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { + "begin": 90, + "end": 208, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 214, + "end": 436, + "name": "tag", + "source": 1, + "value": "8" + }, + { "begin": 214, "end": 436, "name": "JUMPDEST", "source": 1 }, + { + "begin": 307, + "end": 311, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 345, + "end": 347, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 334, "end": 343, "name": "DUP3", "source": 1 }, + { "begin": 330, "end": 348, "name": "ADD", "source": 1 }, + { "begin": 322, "end": 348, "name": "SWAP1", "source": 1 }, + { "begin": 322, "end": 348, "name": "POP", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 426, + "end": 427, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 415, "end": 424, "name": "DUP4", "source": 1 }, + { "begin": 411, "end": 428, "name": "ADD", "source": 1 }, + { "begin": 402, "end": 408, "name": "DUP5", "source": 1 }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 358, + "end": 429, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 358, + "end": 429, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 358, "end": 429, "name": "JUMPDEST", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP3", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP2", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { + "begin": 214, + "end": 436, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 523, + "end": 640, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 523, "end": 640, "name": "JUMPDEST", "source": 1 }, + { + "begin": 632, + "end": 633, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 629, "end": 630, "name": "DUP1", "source": 1 }, + { "begin": 622, "end": 634, "name": "REVERT", "source": 1 }, + { + "begin": 769, + "end": 891, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 769, "end": 891, "name": "JUMPDEST", "source": 1 }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "35" + }, + { "begin": 860, "end": 865, "name": "DUP2", "source": 1 }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 842, + "end": 866, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 842, + "end": 866, + "name": "tag", + "source": 1, + "value": "35" + }, + { "begin": 842, "end": 866, "name": "JUMPDEST", "source": 1 }, + { "begin": 835, "end": 840, "name": "DUP2", "source": 1 }, + { "begin": 832, "end": 867, "name": "EQ", "source": 1 }, + { + "begin": 822, + "end": 885, + "name": "PUSH [tag]", + "source": 1, + "value": "36" + }, + { "begin": 822, "end": 885, "name": "JUMPI", "source": 1 }, + { + "begin": 881, + "end": 882, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 878, "end": 879, "name": "DUP1", "source": 1 }, + { "begin": 871, "end": 883, "name": "REVERT", "source": 1 }, + { + "begin": 822, + "end": 885, + "name": "tag", + "source": 1, + "value": "36" + }, + { "begin": 822, "end": 885, "name": "JUMPDEST", "source": 1 }, + { "begin": 769, "end": 891, "name": "POP", "source": 1 }, + { + "begin": 769, + "end": 891, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 897, + "end": 1036, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 897, "end": 1036, "name": "JUMPDEST", "source": 1 }, + { + "begin": 943, + "end": 948, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 981, "end": 987, "name": "DUP2", "source": 1 }, + { "begin": 968, "end": 988, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 959, "end": 988, "name": "SWAP1", "source": 1 }, + { "begin": 959, "end": 988, "name": "POP", "source": 1 }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "38" + }, + { "begin": 1024, "end": 1029, "name": "DUP2", "source": 1 }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 997, + "end": 1030, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 997, + "end": 1030, + "name": "tag", + "source": 1, + "value": "38" + }, + { "begin": 997, "end": 1030, "name": "JUMPDEST", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP3", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP2", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, + { + "begin": 897, + "end": 1036, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1042, + "end": 1371, + "name": "tag", + "source": 1, + "value": "11" + }, + { "begin": 1042, "end": 1371, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1101, + "end": 1107, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1150, + "end": 1152, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1138, "end": 1147, "name": "DUP3", "source": 1 }, + { "begin": 1129, "end": 1136, "name": "DUP5", "source": 1 }, + { "begin": 1125, "end": 1148, "name": "SUB", "source": 1 }, + { "begin": 1121, "end": 1153, "name": "SLT", "source": 1 }, + { "begin": 1118, "end": 1237, "name": "ISZERO", "source": 1 }, + { + "begin": 1118, + "end": 1237, + "name": "PUSH [tag]", + "source": 1, + "value": "40" + }, + { "begin": 1118, "end": 1237, "name": "JUMPI", "source": 1 }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "41" + }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 1156, + "end": 1235, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1156, + "end": 1235, + "name": "tag", + "source": 1, + "value": "41" + }, + { "begin": 1156, "end": 1235, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1118, + "end": 1237, + "name": "tag", + "source": 1, + "value": "40" + }, + { "begin": 1118, "end": 1237, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1276, + "end": 1277, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 1, + "value": "42" + }, + { "begin": 1346, "end": 1353, "name": "DUP5", "source": 1 }, + { "begin": 1337, "end": 1343, "name": "DUP3", "source": 1 }, + { "begin": 1326, "end": 1335, "name": "DUP6", "source": 1 }, + { "begin": 1322, "end": 1344, "name": "ADD", "source": 1 }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 1301, + "end": 1354, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1301, + "end": 1354, + "name": "tag", + "source": 1, + "value": "42" + }, + { "begin": 1301, "end": 1354, "name": "JUMPDEST", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "SWAP2", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "POP", "source": 1 }, + { "begin": 1247, "end": 1364, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP3", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP2", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { + "begin": 1042, + "end": 1371, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1377, + "end": 1557, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 1377, "end": 1557, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1425, + "end": 1502, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1422, + "end": 1423, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1415, "end": 1503, "name": "MSTORE", "source": 1 }, + { + "begin": 1522, + "end": 1526, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 1519, + "end": 1520, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { "begin": 1512, "end": 1527, "name": "MSTORE", "source": 1 }, + { + "begin": 1546, + "end": 1550, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 1543, + "end": 1544, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1536, "end": 1551, "name": "REVERT", "source": 1 }, + { + "begin": 1563, + "end": 1868, + "name": "tag", + "source": 1, + "value": "16" + }, + { "begin": 1563, "end": 1868, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1603, + "end": 1606, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", + "source": 1, + "value": "45" + }, + { "begin": 1640, "end": 1641, "name": "DUP3", "source": 1 }, + { + "begin": 1622, + "end": 1642, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 1622, + "end": 1642, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1622, + "end": 1642, + "name": "tag", + "source": 1, + "value": "45" + }, + { "begin": 1622, "end": 1642, "name": "JUMPDEST", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "SWAP2", "source": 1 }, + { "begin": 1617, "end": 1642, "name": "POP", "source": 1 }, + { + "begin": 1656, + "end": 1676, + "name": "PUSH [tag]", + "source": 1, + "value": "46" + }, + { "begin": 1674, "end": 1675, "name": "DUP4", "source": 1 }, + { + "begin": 1656, + "end": 1676, + "name": "PUSH [tag]", + "source": 1, + "value": "17" + }, + { + "begin": 1656, + "end": 1676, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1656, + "end": 1676, + "name": "tag", + "source": 1, + "value": "46" + }, + { "begin": 1656, "end": 1676, "name": "JUMPDEST", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "SWAP3", "source": 1 }, + { "begin": 1651, "end": 1676, "name": "POP", "source": 1 }, + { "begin": 1810, "end": 1811, "name": "DUP3", "source": 1 }, + { + "begin": 1742, + "end": 1808, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1738, "end": 1812, "name": "SUB", "source": 1 }, + { "begin": 1735, "end": 1736, "name": "DUP3", "source": 1 }, + { "begin": 1732, "end": 1813, "name": "GT", "source": 1 }, + { "begin": 1729, "end": 1836, "name": "ISZERO", "source": 1 }, + { + "begin": 1729, + "end": 1836, + "name": "PUSH [tag]", + "source": 1, + "value": "47" + }, + { "begin": 1729, "end": 1836, "name": "JUMPI", "source": 1 }, + { + "begin": 1816, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "48" + }, + { + "begin": 1816, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 1816, + "end": 1834, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1816, + "end": 1834, + "name": "tag", + "source": 1, + "value": "48" + }, + { "begin": 1816, "end": 1834, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1729, + "end": 1836, + "name": "tag", + "source": 1, + "value": "47" + }, + { "begin": 1729, "end": 1836, "name": "JUMPDEST", "source": 1 }, + { "begin": 1860, "end": 1861, "name": "DUP3", "source": 1 }, + { "begin": 1857, "end": 1858, "name": "DUP3", "source": 1 }, + { "begin": 1853, "end": 1862, "name": "ADD", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "SWAP1", "source": 1 }, + { "begin": 1846, "end": 1862, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP3", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "SWAP2", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { "begin": 1563, "end": 1868, "name": "POP", "source": 1 }, + { + "begin": 1563, + "end": 1868, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "addtwo(uint256)": "fd63983b", + "store()": "975057e7" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"addtwo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"store\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TraceCallee\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4d55fc0d2ba607d43e62a3f476aa2a1c0ea7914816b5412c6b3d834170e87d04\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2786981bec4a827c4a0f6b63097e63d99140c2d425d00ae003e084626e30e001\",\"dweb:/ipfs/QmTAV4vGHrLFnnyicS3aSbx2Bajn463UQrDUKEPyTLdcRC\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 183, + "contract": "main.sol:TraceCallee", + "label": "store", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract TraceFilter {\n constructor(bool should_revert) {\n if (should_revert) {\n revert();\n }\n }\n\n function call_ok() public pure {}\n\n function call_revert() public pure {\n revert();\n }\n\n function subcalls(address target0, address target1) public pure {\n try TraceFilter(target0).subsubcalls(target1) {} catch {}\n try TraceFilter(target0).subsubcalls(target1) {} catch {}\n }\n\n function subsubcalls(address target1) public pure {\n TraceFilter(target1).call_ok();\n TraceFilter(target1).call_revert();\n }\n\n function heavy_steps(uint256 store_steps, uint256 op_steps) external {\n while (store_steps != 0) {\n assembly {\n sstore(store_steps, store_steps)\n }\n store_steps--;\n }\n\n while (op_steps != 0) {\n op_steps--;\n }\n }\n\n // This part is to trace Wasm memory overflow\n uint256 public a;\n uint256 public b;\n uint256 public c;\n uint256 public d;\n uint256 public e;\n uint256 public f;\n uint256 public g;\n uint256 public h;\n uint256 public i;\n uint256 public j;\n\n function set_and_loop(uint256 loops) public returns (uint256 result) {\n a = 1;\n b = 1;\n c = 1;\n d = 1;\n e = 1;\n f = 1;\n g = 1;\n h = 1;\n i = 1;\n j = 1;\n uint256 count = 0;\n while (i < loops) {\n count += 1;\n }\n return 1;\n }\n}\n\ncontract TraceCallee {\n uint256 public store;\n\n function addtwo(uint256 _value) external returns (uint256 result) {\n uint256 x = 7;\n store = _value;\n return _value + x;\n }\n}\n\ncontract TraceCaller {\n TraceCallee internal callee;\n uint256 public store;\n\n function someAction(address _addr, uint256 _number) public {\n callee = TraceCallee(_addr);\n store = callee.addtwo(_number);\n }\n}\n" +} diff --git a/tests/contracts/compiled/TraceCaller.json b/tests/contracts/compiled/TraceCaller.json new file mode 100644 index 0000000000..4808721b0e --- /dev/null +++ b/tests/contracts/compiled/TraceCaller.json @@ -0,0 +1,3192 @@ +{ + "byteCode": "0x608060405234801561001057600080fd5b506102dc806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063398f72231461003b578063975057e714610057575b600080fd5b610055600480360381019061005091906101fa565b610075565b005b61005f61015b565b60405161006c9190610249565b60405180910390f35b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd63983b826040518263ffffffff1660e01b815260040161010e9190610249565b6020604051808303816000875af115801561012d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101519190610279565b6001819055505050565b60015481565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061019182610166565b9050919050565b6101a181610186565b81146101ac57600080fd5b50565b6000813590506101be81610198565b92915050565b6000819050919050565b6101d7816101c4565b81146101e257600080fd5b50565b6000813590506101f4816101ce565b92915050565b6000806040838503121561021157610210610161565b5b600061021f858286016101af565b9250506020610230858286016101e5565b9150509250929050565b610243816101c4565b82525050565b600060208201905061025e600083018461023a565b92915050565b600081519050610273816101ce565b92915050565b60006020828403121561028f5761028e610161565b5b600061029d84828501610264565b9150509291505056fea264697066735822122042a994e09960e833aea3e27dbea3ab51371cda90c7b6277b92dde059ea88f58064736f6c634300080b0033", + "contract": { + "abi": [ + { + "inputs": [ + { "internalType": "address", "name": "_addr", "type": "address" }, + { "internalType": "uint256", "name": "_number", "type": "uint256" } + ], + "name": "someAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "store", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "evm": { + "assembly": " /* \"main.sol\":1781:2013 contract TraceCaller {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":1781:2013 contract TraceCaller {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x398f7223\n eq\n tag_3\n jumpi\n dup1\n 0x975057e7\n eq\n tag_4\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":1868:2011 function someAction(address _addr, uint256 _number) public {... */\n tag_3:\n tag_5\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_6\n swap2\n swap1\n tag_7\n jump\t// in\n tag_6:\n tag_8\n jump\t// in\n tag_5:\n stop\n /* \"main.sol\":1841:1861 uint256 public store */\n tag_4:\n tag_9\n tag_10\n jump\t// in\n tag_9:\n mload(0x40)\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1868:2011 function someAction(address _addr, uint256 _number) public {... */\n tag_8:\n /* \"main.sol\":1958:1963 _addr */\n dup2\n /* \"main.sol\":1937:1943 callee */\n 0x00\n dup1\n /* \"main.sol\":1937:1964 callee = TraceCallee(_addr) */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":1982:1988 callee */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1982:1995 callee.addtwo */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xfd63983b\n /* \"main.sol\":1996:2003 _number */\n dup3\n /* \"main.sol\":1982:2004 callee.addtwo(_number) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_14\n swap2\n swap1\n tag_12\n jump\t// in\n tag_14:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_16\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_16:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_17\n swap2\n swap1\n tag_18\n jump\t// in\n tag_17:\n /* \"main.sol\":1974:1979 store */\n 0x01\n /* \"main.sol\":1974:2004 store = callee.addtwo(_number) */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1868:2011 function someAction(address _addr, uint256 _number) public {... */\n pop\n pop\n jump\t// out\n /* \"main.sol\":1841:1861 uint256 public store */\n tag_10:\n sload(0x01)\n dup2\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_20:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:460 */\n tag_22:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":411:453 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":404:409 */\n dup3\n /* \"#utility.yul\":400:454 */\n and\n /* \"#utility.yul\":389:454 */\n swap1\n pop\n /* \"#utility.yul\":334:460 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":466:562 */\n tag_23:\n /* \"#utility.yul\":503:510 */\n 0x00\n /* \"#utility.yul\":532:556 */\n tag_37\n /* \"#utility.yul\":550:555 */\n dup3\n /* \"#utility.yul\":532:556 */\n tag_22\n jump\t// in\n tag_37:\n /* \"#utility.yul\":521:556 */\n swap1\n pop\n /* \"#utility.yul\":466:562 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":568:690 */\n tag_24:\n /* \"#utility.yul\":641:665 */\n tag_39\n /* \"#utility.yul\":659:664 */\n dup2\n /* \"#utility.yul\":641:665 */\n tag_23\n jump\t// in\n tag_39:\n /* \"#utility.yul\":634:639 */\n dup2\n /* \"#utility.yul\":631:666 */\n eq\n /* \"#utility.yul\":621:684 */\n tag_40\n jumpi\n /* \"#utility.yul\":680:681 */\n 0x00\n /* \"#utility.yul\":677:678 */\n dup1\n /* \"#utility.yul\":670:682 */\n revert\n /* \"#utility.yul\":621:684 */\n tag_40:\n /* \"#utility.yul\":568:690 */\n pop\n jump\t// out\n /* \"#utility.yul\":696:835 */\n tag_25:\n /* \"#utility.yul\":742:747 */\n 0x00\n /* \"#utility.yul\":780:786 */\n dup2\n /* \"#utility.yul\":767:787 */\n calldataload\n /* \"#utility.yul\":758:787 */\n swap1\n pop\n /* \"#utility.yul\":796:829 */\n tag_42\n /* \"#utility.yul\":823:828 */\n dup2\n /* \"#utility.yul\":796:829 */\n tag_24\n jump\t// in\n tag_42:\n /* \"#utility.yul\":696:835 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":841:918 */\n tag_26:\n /* \"#utility.yul\":878:885 */\n 0x00\n /* \"#utility.yul\":907:912 */\n dup2\n /* \"#utility.yul\":896:912 */\n swap1\n pop\n /* \"#utility.yul\":841:918 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":924:1046 */\n tag_27:\n /* \"#utility.yul\":997:1021 */\n tag_45\n /* \"#utility.yul\":1015:1020 */\n dup2\n /* \"#utility.yul\":997:1021 */\n tag_26\n jump\t// in\n tag_45:\n /* \"#utility.yul\":990:995 */\n dup2\n /* \"#utility.yul\":987:1022 */\n eq\n /* \"#utility.yul\":977:1040 */\n tag_46\n jumpi\n /* \"#utility.yul\":1036:1037 */\n 0x00\n /* \"#utility.yul\":1033:1034 */\n dup1\n /* \"#utility.yul\":1026:1038 */\n revert\n /* \"#utility.yul\":977:1040 */\n tag_46:\n /* \"#utility.yul\":924:1046 */\n pop\n jump\t// out\n /* \"#utility.yul\":1052:1191 */\n tag_28:\n /* \"#utility.yul\":1098:1103 */\n 0x00\n /* \"#utility.yul\":1136:1142 */\n dup2\n /* \"#utility.yul\":1123:1143 */\n calldataload\n /* \"#utility.yul\":1114:1143 */\n swap1\n pop\n /* \"#utility.yul\":1152:1185 */\n tag_48\n /* \"#utility.yul\":1179:1184 */\n dup2\n /* \"#utility.yul\":1152:1185 */\n tag_27\n jump\t// in\n tag_48:\n /* \"#utility.yul\":1052:1191 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1197:1671 */\n tag_7:\n /* \"#utility.yul\":1265:1271 */\n 0x00\n /* \"#utility.yul\":1273:1279 */\n dup1\n /* \"#utility.yul\":1322:1324 */\n 0x40\n /* \"#utility.yul\":1310:1319 */\n dup4\n /* \"#utility.yul\":1301:1308 */\n dup6\n /* \"#utility.yul\":1297:1320 */\n sub\n /* \"#utility.yul\":1293:1325 */\n slt\n /* \"#utility.yul\":1290:1409 */\n iszero\n tag_50\n jumpi\n /* \"#utility.yul\":1328:1407 */\n tag_51\n tag_20\n jump\t// in\n tag_51:\n /* \"#utility.yul\":1290:1409 */\n tag_50:\n /* \"#utility.yul\":1448:1449 */\n 0x00\n /* \"#utility.yul\":1473:1526 */\n tag_52\n /* \"#utility.yul\":1518:1525 */\n dup6\n /* \"#utility.yul\":1509:1515 */\n dup3\n /* \"#utility.yul\":1498:1507 */\n dup7\n /* \"#utility.yul\":1494:1516 */\n add\n /* \"#utility.yul\":1473:1526 */\n tag_25\n jump\t// in\n tag_52:\n /* \"#utility.yul\":1463:1526 */\n swap3\n pop\n /* \"#utility.yul\":1419:1536 */\n pop\n /* \"#utility.yul\":1575:1577 */\n 0x20\n /* \"#utility.yul\":1601:1654 */\n tag_53\n /* \"#utility.yul\":1646:1653 */\n dup6\n /* \"#utility.yul\":1637:1643 */\n dup3\n /* \"#utility.yul\":1626:1635 */\n dup7\n /* \"#utility.yul\":1622:1644 */\n add\n /* \"#utility.yul\":1601:1654 */\n tag_28\n jump\t// in\n tag_53:\n /* \"#utility.yul\":1591:1654 */\n swap2\n pop\n /* \"#utility.yul\":1546:1664 */\n pop\n /* \"#utility.yul\":1197:1671 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1677:1795 */\n tag_29:\n /* \"#utility.yul\":1764:1788 */\n tag_55\n /* \"#utility.yul\":1782:1787 */\n dup2\n /* \"#utility.yul\":1764:1788 */\n tag_26\n jump\t// in\n tag_55:\n /* \"#utility.yul\":1759:1762 */\n dup3\n /* \"#utility.yul\":1752:1789 */\n mstore\n /* \"#utility.yul\":1677:1795 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1801:2023 */\n tag_12:\n /* \"#utility.yul\":1894:1898 */\n 0x00\n /* \"#utility.yul\":1932:1934 */\n 0x20\n /* \"#utility.yul\":1921:1930 */\n dup3\n /* \"#utility.yul\":1917:1935 */\n add\n /* \"#utility.yul\":1909:1935 */\n swap1\n pop\n /* \"#utility.yul\":1945:2016 */\n tag_57\n /* \"#utility.yul\":2013:2014 */\n 0x00\n /* \"#utility.yul\":2002:2011 */\n dup4\n /* \"#utility.yul\":1998:2015 */\n add\n /* \"#utility.yul\":1989:1995 */\n dup5\n /* \"#utility.yul\":1945:2016 */\n tag_29\n jump\t// in\n tag_57:\n /* \"#utility.yul\":1801:2023 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2029:2172 */\n tag_30:\n /* \"#utility.yul\":2086:2091 */\n 0x00\n /* \"#utility.yul\":2117:2123 */\n dup2\n /* \"#utility.yul\":2111:2124 */\n mload\n /* \"#utility.yul\":2102:2124 */\n swap1\n pop\n /* \"#utility.yul\":2133:2166 */\n tag_59\n /* \"#utility.yul\":2160:2165 */\n dup2\n /* \"#utility.yul\":2133:2166 */\n tag_27\n jump\t// in\n tag_59:\n /* \"#utility.yul\":2029:2172 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2178:2529 */\n tag_18:\n /* \"#utility.yul\":2248:2254 */\n 0x00\n /* \"#utility.yul\":2297:2299 */\n 0x20\n /* \"#utility.yul\":2285:2294 */\n dup3\n /* \"#utility.yul\":2276:2283 */\n dup5\n /* \"#utility.yul\":2272:2295 */\n sub\n /* \"#utility.yul\":2268:2300 */\n slt\n /* \"#utility.yul\":2265:2384 */\n iszero\n tag_61\n jumpi\n /* \"#utility.yul\":2303:2382 */\n tag_62\n tag_20\n jump\t// in\n tag_62:\n /* \"#utility.yul\":2265:2384 */\n tag_61:\n /* \"#utility.yul\":2423:2424 */\n 0x00\n /* \"#utility.yul\":2448:2512 */\n tag_63\n /* \"#utility.yul\":2504:2511 */\n dup5\n /* \"#utility.yul\":2495:2501 */\n dup3\n /* \"#utility.yul\":2484:2493 */\n dup6\n /* \"#utility.yul\":2480:2502 */\n add\n /* \"#utility.yul\":2448:2512 */\n tag_30\n jump\t// in\n tag_63:\n /* \"#utility.yul\":2438:2512 */\n swap2\n pop\n /* \"#utility.yul\":2394:2522 */\n pop\n /* \"#utility.yul\":2178:2529 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122042a994e09960e833aea3e27dbea3ab51371cda90c7b6277b92dde059ea88f58064736f6c634300080b0033\n}\n", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506102dc806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063398f72231461003b578063975057e714610057575b600080fd5b610055600480360381019061005091906101fa565b610075565b005b61005f61015b565b60405161006c9190610249565b60405180910390f35b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd63983b826040518263ffffffff1660e01b815260040161010e9190610249565b6020604051808303816000875af115801561012d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101519190610279565b6001819055505050565b60015481565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061019182610166565b9050919050565b6101a181610186565b81146101ac57600080fd5b50565b6000813590506101be81610198565b92915050565b6000819050919050565b6101d7816101c4565b81146101e257600080fd5b50565b6000813590506101f4816101ce565b92915050565b6000806040838503121561021157610210610161565b5b600061021f858286016101af565b9250506020610230858286016101e5565b9150509250929050565b610243816101c4565b82525050565b600060208201905061025e600083018461023a565b92915050565b600081519050610273816101ce565b92915050565b60006020828403121561028f5761028e610161565b5b600061029d84828501610264565b9150509291505056fea264697066735822122042a994e09960e833aea3e27dbea3ab51371cda90c7b6277b92dde059ea88f58064736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DC DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x398F7223 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x975057E7 EQ PUSH2 0x57 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x1FA JUMP JUMPDEST PUSH2 0x75 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5F PUSH2 0x15B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6C SWAP2 SWAP1 PUSH2 0x249 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFD63983B DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10E SWAP2 SWAP1 PUSH2 0x249 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x151 SWAP2 SWAP1 PUSH2 0x279 JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x191 DUP3 PUSH2 0x166 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A1 DUP2 PUSH2 0x186 JUMP JUMPDEST DUP2 EQ PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1BE DUP2 PUSH2 0x198 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D7 DUP2 PUSH2 0x1C4 JUMP JUMPDEST DUP2 EQ PUSH2 0x1E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1F4 DUP2 PUSH2 0x1CE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x211 JUMPI PUSH2 0x210 PUSH2 0x161 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x21F DUP6 DUP3 DUP7 ADD PUSH2 0x1AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x230 DUP6 DUP3 DUP7 ADD PUSH2 0x1E5 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x243 DUP2 PUSH2 0x1C4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x25E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x23A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x273 DUP2 PUSH2 0x1CE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28F JUMPI PUSH2 0x28E PUSH2 0x161 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x29D DUP5 DUP3 DUP6 ADD PUSH2 0x264 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP 0xA9 SWAP5 0xE0 SWAP10 PUSH1 0xE8 CALLER 0xAE LOG3 0xE2 PUSH30 0xBEA3AB51371CDA90C7B6277B92DDE059EA88F58064736F6C634300080B00 CALLER ", + "sourceMap": "1781:232:0:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@someAction_230": { + "entryPoint": 117, + "id": 230, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@store_209": { + "entryPoint": 347, + "id": 209, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_t_address": { + "entryPoint": 431, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 485, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256_fromMemory": { + "entryPoint": 612, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_uint256": { + "entryPoint": 506, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 633, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 570, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 585, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 390, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 358, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 452, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 353, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_address": { + "entryPoint": 408, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 462, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2532:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:1", + "type": "" + } + ], + "src": "7:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:81:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:65:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "404:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "411:42:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "400:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "400:54:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:1", + "type": "" + } + ], + "src": "334:126:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "511:51:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "521:35:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "550:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "532:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "532:24:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "521:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "493:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "503:7:1", + "type": "" + } + ], + "src": "466:96:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "611:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "668:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "677:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "680:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "670:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "670:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "670:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "634:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "659:5:1" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "641:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "641:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "631:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "631:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "624:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "624:43:1" + }, + "nodeType": "YulIf", + "src": "621:63:1" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "604:5:1", + "type": "" + } + ], + "src": "568:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "748:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "758:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "780:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "767:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "767:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "758:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "823:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "796:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "796:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "796:33:1" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "726:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "734:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "742:5:1", + "type": "" + } + ], + "src": "696:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "886:32:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "896:16:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "907:5:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "896:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "868:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "878:7:1", + "type": "" + } + ], + "src": "841:77:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "967:79:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1024:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1033:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1036:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1026:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1026:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1026:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "990:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1015:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "997:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "997:24:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "987:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "987:35:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "980:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "980:43:1" + }, + "nodeType": "YulIf", + "src": "977:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "960:5:1", + "type": "" + } + ], + "src": "924:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1104:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1114:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1136:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1123:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "1123:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1114:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1179:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "1152:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "1152:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1152:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1082:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1090:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1098:5:1", + "type": "" + } + ], + "src": "1052:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1280:391:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1326:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1328:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "1328:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1328:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1301:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1310:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1297:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1297:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1322:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1293:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1293:32:1" + }, + "nodeType": "YulIf", + "src": "1290:119:1" + }, + { + "nodeType": "YulBlock", + "src": "1419:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1434:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1448:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1438:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1463:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1498:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1509:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1494:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1494:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1518:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "1473:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1473:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1463:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1546:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1561:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1575:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1565:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1591:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1626:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1637:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1622:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1622:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1646:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1601:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1601:53:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1591:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1242:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1253:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1265:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1273:6:1", + "type": "" + } + ], + "src": "1197:474:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1742:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1759:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1782:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1764:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "1764:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1752:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1752:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1752:37:1" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1730:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1737:3:1", + "type": "" + } + ], + "src": "1677:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1899:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1909:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1921:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1932:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1917:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1917:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1909:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1989:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2002:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2013:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1998:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1998:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "1945:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "1945:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1945:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1871:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1883:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1894:4:1", + "type": "" + } + ], + "src": "1801:222:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2092:80:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2102:22:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2117:6:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2111:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "2111:13:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2102:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2160:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "2133:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "2133:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2133:33:1" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2070:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2078:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2086:5:1", + "type": "" + } + ], + "src": "2029:143:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2255:274:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2301:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "2303:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "2303:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2303:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2276:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2285:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2272:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2272:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2297:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2268:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2268:32:1" + }, + "nodeType": "YulIf", + "src": "2265:119:1" + }, + { + "nodeType": "YulBlock", + "src": "2394:128:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2409:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2423:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2413:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2438:74:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2484:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2495:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2480:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2480:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2504:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "2448:31:1" + }, + "nodeType": "YulFunctionCall", + "src": "2448:64:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2438:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2225:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "2236:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2248:6:1", + "type": "" + } + ], + "src": "2178:351:1" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100365760003560e01c8063398f72231461003b578063975057e714610057575b600080fd5b610055600480360381019061005091906101fa565b610075565b005b61005f61015b565b60405161006c9190610249565b60405180910390f35b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fd63983b826040518263ffffffff1660e01b815260040161010e9190610249565b6020604051808303816000875af115801561012d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101519190610279565b6001819055505050565b60015481565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061019182610166565b9050919050565b6101a181610186565b81146101ac57600080fd5b50565b6000813590506101be81610198565b92915050565b6000819050919050565b6101d7816101c4565b81146101e257600080fd5b50565b6000813590506101f4816101ce565b92915050565b6000806040838503121561021157610210610161565b5b600061021f858286016101af565b9250506020610230858286016101e5565b9150509250929050565b610243816101c4565b82525050565b600060208201905061025e600083018461023a565b92915050565b600081519050610273816101ce565b92915050565b60006020828403121561028f5761028e610161565b5b600061029d84828501610264565b9150509291505056fea264697066735822122042a994e09960e833aea3e27dbea3ab51371cda90c7b6277b92dde059ea88f58064736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x398F7223 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0x975057E7 EQ PUSH2 0x57 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x55 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x1FA JUMP JUMPDEST PUSH2 0x75 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x5F PUSH2 0x15B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6C SWAP2 SWAP1 PUSH2 0x249 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xFD63983B DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x10E SWAP2 SWAP1 PUSH2 0x249 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x151 SWAP2 SWAP1 PUSH2 0x279 JUMP JUMPDEST PUSH1 0x1 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x191 DUP3 PUSH2 0x166 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1A1 DUP2 PUSH2 0x186 JUMP JUMPDEST DUP2 EQ PUSH2 0x1AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1BE DUP2 PUSH2 0x198 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1D7 DUP2 PUSH2 0x1C4 JUMP JUMPDEST DUP2 EQ PUSH2 0x1E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x1F4 DUP2 PUSH2 0x1CE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x211 JUMPI PUSH2 0x210 PUSH2 0x161 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x21F DUP6 DUP3 DUP7 ADD PUSH2 0x1AF JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x230 DUP6 DUP3 DUP7 ADD PUSH2 0x1E5 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x243 DUP2 PUSH2 0x1C4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x25E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x23A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x273 DUP2 PUSH2 0x1CE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x28F JUMPI PUSH2 0x28E PUSH2 0x161 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x29D DUP5 DUP3 DUP6 ADD PUSH2 0x264 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP 0xA9 SWAP5 0xE0 SWAP10 PUSH1 0xE8 CALLER 0xAE LOG3 0xE2 PUSH30 0xBEA3AB51371CDA90C7B6277B92DDE059EA88F58064736F6C634300080B00 CALLER ", + "sourceMap": "1781:232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1868:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1841:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1868:143;1958:5;1937:6;;:27;;;;;;;;;;;;;;;;;;1982:6;;;;;;;;;;:13;;;1996:7;1982:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1974:5;:30;;;;1868:143;;:::o;1841:20::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:143::-;2086:5;2117:6;2111:13;2102:22;;2133:33;2160:5;2133:33;:::i;:::-;2029:143;;;;:::o;2178:351::-;2248:6;2297:2;2285:9;2276:7;2272:23;2268:32;2265:119;;;2303:79;;:::i;:::-;2265:119;2423:1;2448:64;2504:7;2495:6;2484:9;2480:22;2448:64;:::i;:::-;2438:74;;2394:128;2178:351;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "146400", + "executionCost": "190", + "totalCost": "146590" + }, + "external": { + "someAction(address,uint256)": "infinite", + "store()": "2429" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1781, "end": 2013, "name": "MSTORE", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "CALLVALUE", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "ISZERO", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 1781, "end": 2013, "name": "JUMPI", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "REVERT", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 1781, "end": 2013, "name": "JUMPDEST", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "POP", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1781, "end": 2013, "name": "CODECOPY", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1781, "end": 2013, "name": "RETURN", "source": 0 } + ], + ".data": { + "0": { + ".auxdata": "a264697066735822122042a994e09960e833aea3e27dbea3ab51371cda90c7b6277b92dde059ea88f58064736f6c634300080b0033", + ".code": [ + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1781, "end": 2013, "name": "MSTORE", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "CALLVALUE", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "ISZERO", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 1781, "end": 2013, "name": "JUMPI", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "REVERT", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 1781, "end": 2013, "name": "JUMPDEST", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "POP", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { + "begin": 1781, + "end": 2013, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1781, "end": 2013, "name": "LT", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 1781, "end": 2013, "name": "JUMPI", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1781, + "end": 2013, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 1781, "end": 2013, "name": "SHR", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "398F7223" + }, + { "begin": 1781, "end": 2013, "name": "EQ", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 1781, "end": 2013, "name": "JUMPI", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "975057E7" + }, + { "begin": 1781, "end": 2013, "name": "EQ", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 1781, "end": 2013, "name": "JUMPI", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 1781, "end": 2013, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1781, + "end": 2013, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1781, "end": 2013, "name": "DUP1", "source": 0 }, + { "begin": 1781, "end": 2013, "name": "REVERT", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 1868, "end": 2011, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 1868, + "end": 2011, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1868, "end": 2011, "name": "DUP1", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1868, "end": 2011, "name": "SUB", "source": 0 }, + { "begin": 1868, "end": 2011, "name": "DUP2", "source": 0 }, + { "begin": 1868, "end": 2011, "name": "ADD", "source": 0 }, + { "begin": 1868, "end": 2011, "name": "SWAP1", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 1868, "end": 2011, "name": "SWAP2", "source": 0 }, + { "begin": 1868, "end": 2011, "name": "SWAP1", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 1868, + "end": 2011, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1868, + "end": 2011, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 1868, "end": 2011, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 1868, + "end": 2011, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1868, + "end": 2011, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 1868, "end": 2011, "name": "JUMPDEST", "source": 0 }, + { "begin": 1868, "end": 2011, "name": "STOP", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 1841, "end": 1861, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 1841, + "end": 1861, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 1841, + "end": 1861, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1841, + "end": 1861, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1841, "end": 1861, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1841, "end": 1861, "name": "MLOAD", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 1841, "end": 1861, "name": "SWAP2", "source": 0 }, + { "begin": 1841, "end": 1861, "name": "SWAP1", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1841, + "end": 1861, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1841, + "end": 1861, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 1841, "end": 1861, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1841, "end": 1861, "name": "MLOAD", "source": 0 }, + { "begin": 1841, "end": 1861, "name": "DUP1", "source": 0 }, + { "begin": 1841, "end": 1861, "name": "SWAP2", "source": 0 }, + { "begin": 1841, "end": 1861, "name": "SUB", "source": 0 }, + { "begin": 1841, "end": 1861, "name": "SWAP1", "source": 0 }, + { "begin": 1841, "end": 1861, "name": "RETURN", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 1868, "end": 2011, "name": "JUMPDEST", "source": 0 }, + { "begin": 1958, "end": 1963, "name": "DUP2", "source": 0 }, + { + "begin": 1937, + "end": 1943, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1937, "end": 1943, "name": "DUP1", "source": 0 }, + { + "begin": 1937, + "end": 1964, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 1937, "end": 1964, "name": "EXP", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "DUP2", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "SLOAD", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "DUP2", "source": 0 }, + { + "begin": 1937, + "end": 1964, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1937, "end": 1964, "name": "MUL", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "NOT", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "AND", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "SWAP1", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "DUP4", "source": 0 }, + { + "begin": 1937, + "end": 1964, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1937, "end": 1964, "name": "AND", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "MUL", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "OR", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "SWAP1", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "SSTORE", "source": 0 }, + { "begin": 1937, "end": 1964, "name": "POP", "source": 0 }, + { + "begin": 1982, + "end": 1988, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1982, "end": 1988, "name": "DUP1", "source": 0 }, + { "begin": 1982, "end": 1988, "name": "SLOAD", "source": 0 }, + { "begin": 1982, "end": 1988, "name": "SWAP1", "source": 0 }, + { + "begin": 1982, + "end": 1988, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 1982, "end": 1988, "name": "EXP", "source": 0 }, + { "begin": 1982, "end": 1988, "name": "SWAP1", "source": 0 }, + { "begin": 1982, "end": 1988, "name": "DIV", "source": 0 }, + { + "begin": 1982, + "end": 1988, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1982, "end": 1988, "name": "AND", "source": 0 }, + { + "begin": 1982, + "end": 1995, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1982, "end": 1995, "name": "AND", "source": 0 }, + { + "begin": 1982, + "end": 1995, + "name": "PUSH", + "source": 0, + "value": "FD63983B" + }, + { "begin": 1996, "end": 2003, "name": "DUP3", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1982, "end": 2004, "name": "MLOAD", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP3", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 1982, "end": 2004, "name": "AND", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 1982, "end": 2004, "name": "SHL", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP2", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "MSTORE", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1982, "end": 2004, "name": "ADD", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 1982, "end": 2004, "name": "SWAP2", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "SWAP1", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 1982, + "end": 2004, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1982, + "end": 2004, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 1982, "end": 2004, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1982, "end": 2004, "name": "MLOAD", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP1", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP4", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "SUB", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP2", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1982, "end": 2004, "name": "DUP8", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "GAS", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "CALL", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "ISZERO", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP1", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "ISZERO", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 1982, "end": 2004, "name": "JUMPI", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1982, "end": 2004, "name": "DUP1", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 1982, + "end": 2004, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1982, "end": 2004, "name": "REVERT", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 1982, "end": 2004, "name": "JUMPDEST", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "POP", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "POP", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "POP", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "POP", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1982, "end": 2004, "name": "MLOAD", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 1982, "end": 2004, "name": "NOT", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 1982, "end": 2004, "name": "DUP3", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "ADD", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "AND", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP3", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "ADD", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP1", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1982, "end": 2004, "name": "MSTORE", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "POP", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "DUP2", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "ADD", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "SWAP1", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { "begin": 1982, "end": 2004, "name": "SWAP2", "source": 0 }, + { "begin": 1982, "end": 2004, "name": "SWAP1", "source": 0 }, + { + "begin": 1982, + "end": 2004, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { + "begin": 1982, + "end": 2004, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1982, + "end": 2004, + "name": "tag", + "source": 0, + "value": "17" + }, + { "begin": 1982, "end": 2004, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1974, + "end": 1979, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1974, "end": 2004, "name": "DUP2", "source": 0 }, + { "begin": 1974, "end": 2004, "name": "SWAP1", "source": 0 }, + { "begin": 1974, "end": 2004, "name": "SSTORE", "source": 0 }, + { "begin": 1974, "end": 2004, "name": "POP", "source": 0 }, + { "begin": 1868, "end": 2011, "name": "POP", "source": 0 }, + { "begin": 1868, "end": 2011, "name": "POP", "source": 0 }, + { + "begin": 1868, + "end": 2011, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1841, + "end": 1861, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 1841, "end": 1861, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1841, "end": 1861, "name": "SLOAD", "source": 0 }, + { "begin": 1841, "end": 1861, "name": "DUP2", "source": 0 }, + { + "begin": 1841, + "end": 1861, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 88, + "end": 205, + "name": "tag", + "source": 1, + "value": "20" + }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { + "begin": 197, + "end": 198, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, + { + "begin": 334, + "end": 460, + "name": "tag", + "source": 1, + "value": "22" + }, + { "begin": 334, "end": 460, "name": "JUMPDEST", "source": 1 }, + { + "begin": 371, + "end": 378, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 411, + "end": 453, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 404, "end": 409, "name": "DUP3", "source": 1 }, + { "begin": 400, "end": 454, "name": "AND", "source": 1 }, + { "begin": 389, "end": 454, "name": "SWAP1", "source": 1 }, + { "begin": 389, "end": 454, "name": "POP", "source": 1 }, + { "begin": 334, "end": 460, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 460, "name": "SWAP1", "source": 1 }, + { "begin": 334, "end": 460, "name": "POP", "source": 1 }, + { + "begin": 334, + "end": 460, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 466, + "end": 562, + "name": "tag", + "source": 1, + "value": "23" + }, + { "begin": 466, "end": 562, "name": "JUMPDEST", "source": 1 }, + { + "begin": 503, + "end": 510, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 532, + "end": 556, + "name": "PUSH [tag]", + "source": 1, + "value": "37" + }, + { "begin": 550, "end": 555, "name": "DUP3", "source": 1 }, + { + "begin": 532, + "end": 556, + "name": "PUSH [tag]", + "source": 1, + "value": "22" + }, + { + "begin": 532, + "end": 556, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 532, + "end": 556, + "name": "tag", + "source": 1, + "value": "37" + }, + { "begin": 532, "end": 556, "name": "JUMPDEST", "source": 1 }, + { "begin": 521, "end": 556, "name": "SWAP1", "source": 1 }, + { "begin": 521, "end": 556, "name": "POP", "source": 1 }, + { "begin": 466, "end": 562, "name": "SWAP2", "source": 1 }, + { "begin": 466, "end": 562, "name": "SWAP1", "source": 1 }, + { "begin": 466, "end": 562, "name": "POP", "source": 1 }, + { + "begin": 466, + "end": 562, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 568, + "end": 690, + "name": "tag", + "source": 1, + "value": "24" + }, + { "begin": 568, "end": 690, "name": "JUMPDEST", "source": 1 }, + { + "begin": 641, + "end": 665, + "name": "PUSH [tag]", + "source": 1, + "value": "39" + }, + { "begin": 659, "end": 664, "name": "DUP2", "source": 1 }, + { + "begin": 641, + "end": 665, + "name": "PUSH [tag]", + "source": 1, + "value": "23" + }, + { + "begin": 641, + "end": 665, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 641, + "end": 665, + "name": "tag", + "source": 1, + "value": "39" + }, + { "begin": 641, "end": 665, "name": "JUMPDEST", "source": 1 }, + { "begin": 634, "end": 639, "name": "DUP2", "source": 1 }, + { "begin": 631, "end": 666, "name": "EQ", "source": 1 }, + { + "begin": 621, + "end": 684, + "name": "PUSH [tag]", + "source": 1, + "value": "40" + }, + { "begin": 621, "end": 684, "name": "JUMPI", "source": 1 }, + { + "begin": 680, + "end": 681, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 677, "end": 678, "name": "DUP1", "source": 1 }, + { "begin": 670, "end": 682, "name": "REVERT", "source": 1 }, + { + "begin": 621, + "end": 684, + "name": "tag", + "source": 1, + "value": "40" + }, + { "begin": 621, "end": 684, "name": "JUMPDEST", "source": 1 }, + { "begin": 568, "end": 690, "name": "POP", "source": 1 }, + { + "begin": 568, + "end": 690, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 696, + "end": 835, + "name": "tag", + "source": 1, + "value": "25" + }, + { "begin": 696, "end": 835, "name": "JUMPDEST", "source": 1 }, + { + "begin": 742, + "end": 747, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 780, "end": 786, "name": "DUP2", "source": 1 }, + { "begin": 767, "end": 787, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 758, "end": 787, "name": "SWAP1", "source": 1 }, + { "begin": 758, "end": 787, "name": "POP", "source": 1 }, + { + "begin": 796, + "end": 829, + "name": "PUSH [tag]", + "source": 1, + "value": "42" + }, + { "begin": 823, "end": 828, "name": "DUP2", "source": 1 }, + { + "begin": 796, + "end": 829, + "name": "PUSH [tag]", + "source": 1, + "value": "24" + }, + { + "begin": 796, + "end": 829, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 796, + "end": 829, + "name": "tag", + "source": 1, + "value": "42" + }, + { "begin": 796, "end": 829, "name": "JUMPDEST", "source": 1 }, + { "begin": 696, "end": 835, "name": "SWAP3", "source": 1 }, + { "begin": 696, "end": 835, "name": "SWAP2", "source": 1 }, + { "begin": 696, "end": 835, "name": "POP", "source": 1 }, + { "begin": 696, "end": 835, "name": "POP", "source": 1 }, + { + "begin": 696, + "end": 835, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 841, + "end": 918, + "name": "tag", + "source": 1, + "value": "26" + }, + { "begin": 841, "end": 918, "name": "JUMPDEST", "source": 1 }, + { + "begin": 878, + "end": 885, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 907, "end": 912, "name": "DUP2", "source": 1 }, + { "begin": 896, "end": 912, "name": "SWAP1", "source": 1 }, + { "begin": 896, "end": 912, "name": "POP", "source": 1 }, + { "begin": 841, "end": 918, "name": "SWAP2", "source": 1 }, + { "begin": 841, "end": 918, "name": "SWAP1", "source": 1 }, + { "begin": 841, "end": 918, "name": "POP", "source": 1 }, + { + "begin": 841, + "end": 918, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 924, + "end": 1046, + "name": "tag", + "source": 1, + "value": "27" + }, + { "begin": 924, "end": 1046, "name": "JUMPDEST", "source": 1 }, + { + "begin": 997, + "end": 1021, + "name": "PUSH [tag]", + "source": 1, + "value": "45" + }, + { "begin": 1015, "end": 1020, "name": "DUP2", "source": 1 }, + { + "begin": 997, + "end": 1021, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 997, + "end": 1021, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 997, + "end": 1021, + "name": "tag", + "source": 1, + "value": "45" + }, + { "begin": 997, "end": 1021, "name": "JUMPDEST", "source": 1 }, + { "begin": 990, "end": 995, "name": "DUP2", "source": 1 }, + { "begin": 987, "end": 1022, "name": "EQ", "source": 1 }, + { + "begin": 977, + "end": 1040, + "name": "PUSH [tag]", + "source": 1, + "value": "46" + }, + { "begin": 977, "end": 1040, "name": "JUMPI", "source": 1 }, + { + "begin": 1036, + "end": 1037, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1033, "end": 1034, "name": "DUP1", "source": 1 }, + { "begin": 1026, "end": 1038, "name": "REVERT", "source": 1 }, + { + "begin": 977, + "end": 1040, + "name": "tag", + "source": 1, + "value": "46" + }, + { "begin": 977, "end": 1040, "name": "JUMPDEST", "source": 1 }, + { "begin": 924, "end": 1046, "name": "POP", "source": 1 }, + { + "begin": 924, + "end": 1046, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1052, + "end": 1191, + "name": "tag", + "source": 1, + "value": "28" + }, + { "begin": 1052, "end": 1191, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1098, + "end": 1103, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1136, "end": 1142, "name": "DUP2", "source": 1 }, + { + "begin": 1123, + "end": 1143, + "name": "CALLDATALOAD", + "source": 1 + }, + { "begin": 1114, "end": 1143, "name": "SWAP1", "source": 1 }, + { "begin": 1114, "end": 1143, "name": "POP", "source": 1 }, + { + "begin": 1152, + "end": 1185, + "name": "PUSH [tag]", + "source": 1, + "value": "48" + }, + { "begin": 1179, "end": 1184, "name": "DUP2", "source": 1 }, + { + "begin": 1152, + "end": 1185, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 1152, + "end": 1185, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1152, + "end": 1185, + "name": "tag", + "source": 1, + "value": "48" + }, + { "begin": 1152, "end": 1185, "name": "JUMPDEST", "source": 1 }, + { "begin": 1052, "end": 1191, "name": "SWAP3", "source": 1 }, + { "begin": 1052, "end": 1191, "name": "SWAP2", "source": 1 }, + { "begin": 1052, "end": 1191, "name": "POP", "source": 1 }, + { "begin": 1052, "end": 1191, "name": "POP", "source": 1 }, + { + "begin": 1052, + "end": 1191, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1197, + "end": 1671, + "name": "tag", + "source": 1, + "value": "7" + }, + { "begin": 1197, "end": 1671, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1265, + "end": 1271, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 1273, "end": 1279, "name": "DUP1", "source": 1 }, + { + "begin": 1322, + "end": 1324, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { "begin": 1310, "end": 1319, "name": "DUP4", "source": 1 }, + { "begin": 1301, "end": 1308, "name": "DUP6", "source": 1 }, + { "begin": 1297, "end": 1320, "name": "SUB", "source": 1 }, + { "begin": 1293, "end": 1325, "name": "SLT", "source": 1 }, + { "begin": 1290, "end": 1409, "name": "ISZERO", "source": 1 }, + { + "begin": 1290, + "end": 1409, + "name": "PUSH [tag]", + "source": 1, + "value": "50" + }, + { "begin": 1290, "end": 1409, "name": "JUMPI", "source": 1 }, + { + "begin": 1328, + "end": 1407, + "name": "PUSH [tag]", + "source": 1, + "value": "51" + }, + { + "begin": 1328, + "end": 1407, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 1328, + "end": 1407, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1328, + "end": 1407, + "name": "tag", + "source": 1, + "value": "51" + }, + { "begin": 1328, "end": 1407, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1290, + "end": 1409, + "name": "tag", + "source": 1, + "value": "50" + }, + { "begin": 1290, "end": 1409, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1448, + "end": 1449, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1473, + "end": 1526, + "name": "PUSH [tag]", + "source": 1, + "value": "52" + }, + { "begin": 1518, "end": 1525, "name": "DUP6", "source": 1 }, + { "begin": 1509, "end": 1515, "name": "DUP3", "source": 1 }, + { "begin": 1498, "end": 1507, "name": "DUP7", "source": 1 }, + { "begin": 1494, "end": 1516, "name": "ADD", "source": 1 }, + { + "begin": 1473, + "end": 1526, + "name": "PUSH [tag]", + "source": 1, + "value": "25" + }, + { + "begin": 1473, + "end": 1526, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1473, + "end": 1526, + "name": "tag", + "source": 1, + "value": "52" + }, + { "begin": 1473, "end": 1526, "name": "JUMPDEST", "source": 1 }, + { "begin": 1463, "end": 1526, "name": "SWAP3", "source": 1 }, + { "begin": 1463, "end": 1526, "name": "POP", "source": 1 }, + { "begin": 1419, "end": 1536, "name": "POP", "source": 1 }, + { + "begin": 1575, + "end": 1577, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { + "begin": 1601, + "end": 1654, + "name": "PUSH [tag]", + "source": 1, + "value": "53" + }, + { "begin": 1646, "end": 1653, "name": "DUP6", "source": 1 }, + { "begin": 1637, "end": 1643, "name": "DUP3", "source": 1 }, + { "begin": 1626, "end": 1635, "name": "DUP7", "source": 1 }, + { "begin": 1622, "end": 1644, "name": "ADD", "source": 1 }, + { + "begin": 1601, + "end": 1654, + "name": "PUSH [tag]", + "source": 1, + "value": "28" + }, + { + "begin": 1601, + "end": 1654, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1601, + "end": 1654, + "name": "tag", + "source": 1, + "value": "53" + }, + { "begin": 1601, "end": 1654, "name": "JUMPDEST", "source": 1 }, + { "begin": 1591, "end": 1654, "name": "SWAP2", "source": 1 }, + { "begin": 1591, "end": 1654, "name": "POP", "source": 1 }, + { "begin": 1546, "end": 1664, "name": "POP", "source": 1 }, + { "begin": 1197, "end": 1671, "name": "SWAP3", "source": 1 }, + { "begin": 1197, "end": 1671, "name": "POP", "source": 1 }, + { "begin": 1197, "end": 1671, "name": "SWAP3", "source": 1 }, + { "begin": 1197, "end": 1671, "name": "SWAP1", "source": 1 }, + { "begin": 1197, "end": 1671, "name": "POP", "source": 1 }, + { + "begin": 1197, + "end": 1671, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1677, + "end": 1795, + "name": "tag", + "source": 1, + "value": "29" + }, + { "begin": 1677, "end": 1795, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1764, + "end": 1788, + "name": "PUSH [tag]", + "source": 1, + "value": "55" + }, + { "begin": 1782, "end": 1787, "name": "DUP2", "source": 1 }, + { + "begin": 1764, + "end": 1788, + "name": "PUSH [tag]", + "source": 1, + "value": "26" + }, + { + "begin": 1764, + "end": 1788, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1764, + "end": 1788, + "name": "tag", + "source": 1, + "value": "55" + }, + { "begin": 1764, "end": 1788, "name": "JUMPDEST", "source": 1 }, + { "begin": 1759, "end": 1762, "name": "DUP3", "source": 1 }, + { "begin": 1752, "end": 1789, "name": "MSTORE", "source": 1 }, + { "begin": 1677, "end": 1795, "name": "POP", "source": 1 }, + { "begin": 1677, "end": 1795, "name": "POP", "source": 1 }, + { + "begin": 1677, + "end": 1795, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1801, + "end": 2023, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 1801, "end": 2023, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1894, + "end": 1898, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 1932, + "end": 1934, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 1921, "end": 1930, "name": "DUP3", "source": 1 }, + { "begin": 1917, "end": 1935, "name": "ADD", "source": 1 }, + { "begin": 1909, "end": 1935, "name": "SWAP1", "source": 1 }, + { "begin": 1909, "end": 1935, "name": "POP", "source": 1 }, + { + "begin": 1945, + "end": 2016, + "name": "PUSH [tag]", + "source": 1, + "value": "57" + }, + { + "begin": 2013, + "end": 2014, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2002, "end": 2011, "name": "DUP4", "source": 1 }, + { "begin": 1998, "end": 2015, "name": "ADD", "source": 1 }, + { "begin": 1989, "end": 1995, "name": "DUP5", "source": 1 }, + { + "begin": 1945, + "end": 2016, + "name": "PUSH [tag]", + "source": 1, + "value": "29" + }, + { + "begin": 1945, + "end": 2016, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 1945, + "end": 2016, + "name": "tag", + "source": 1, + "value": "57" + }, + { "begin": 1945, "end": 2016, "name": "JUMPDEST", "source": 1 }, + { "begin": 1801, "end": 2023, "name": "SWAP3", "source": 1 }, + { "begin": 1801, "end": 2023, "name": "SWAP2", "source": 1 }, + { "begin": 1801, "end": 2023, "name": "POP", "source": 1 }, + { "begin": 1801, "end": 2023, "name": "POP", "source": 1 }, + { + "begin": 1801, + "end": 2023, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2029, + "end": 2172, + "name": "tag", + "source": 1, + "value": "30" + }, + { "begin": 2029, "end": 2172, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2086, + "end": 2091, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 2117, "end": 2123, "name": "DUP2", "source": 1 }, + { "begin": 2111, "end": 2124, "name": "MLOAD", "source": 1 }, + { "begin": 2102, "end": 2124, "name": "SWAP1", "source": 1 }, + { "begin": 2102, "end": 2124, "name": "POP", "source": 1 }, + { + "begin": 2133, + "end": 2166, + "name": "PUSH [tag]", + "source": 1, + "value": "59" + }, + { "begin": 2160, "end": 2165, "name": "DUP2", "source": 1 }, + { + "begin": 2133, + "end": 2166, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { + "begin": 2133, + "end": 2166, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2133, + "end": 2166, + "name": "tag", + "source": 1, + "value": "59" + }, + { "begin": 2133, "end": 2166, "name": "JUMPDEST", "source": 1 }, + { "begin": 2029, "end": 2172, "name": "SWAP3", "source": 1 }, + { "begin": 2029, "end": 2172, "name": "SWAP2", "source": 1 }, + { "begin": 2029, "end": 2172, "name": "POP", "source": 1 }, + { "begin": 2029, "end": 2172, "name": "POP", "source": 1 }, + { + "begin": 2029, + "end": 2172, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 2178, + "end": 2529, + "name": "tag", + "source": 1, + "value": "18" + }, + { "begin": 2178, "end": 2529, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2248, + "end": 2254, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 2297, + "end": 2299, + "name": "PUSH", + "source": 1, + "value": "20" + }, + { "begin": 2285, "end": 2294, "name": "DUP3", "source": 1 }, + { "begin": 2276, "end": 2283, "name": "DUP5", "source": 1 }, + { "begin": 2272, "end": 2295, "name": "SUB", "source": 1 }, + { "begin": 2268, "end": 2300, "name": "SLT", "source": 1 }, + { "begin": 2265, "end": 2384, "name": "ISZERO", "source": 1 }, + { + "begin": 2265, + "end": 2384, + "name": "PUSH [tag]", + "source": 1, + "value": "61" + }, + { "begin": 2265, "end": 2384, "name": "JUMPI", "source": 1 }, + { + "begin": 2303, + "end": 2382, + "name": "PUSH [tag]", + "source": 1, + "value": "62" + }, + { + "begin": 2303, + "end": 2382, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { + "begin": 2303, + "end": 2382, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2303, + "end": 2382, + "name": "tag", + "source": 1, + "value": "62" + }, + { "begin": 2303, "end": 2382, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2265, + "end": 2384, + "name": "tag", + "source": 1, + "value": "61" + }, + { "begin": 2265, "end": 2384, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2423, + "end": 2424, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 2448, + "end": 2512, + "name": "PUSH [tag]", + "source": 1, + "value": "63" + }, + { "begin": 2504, "end": 2511, "name": "DUP5", "source": 1 }, + { "begin": 2495, "end": 2501, "name": "DUP3", "source": 1 }, + { "begin": 2484, "end": 2493, "name": "DUP6", "source": 1 }, + { "begin": 2480, "end": 2502, "name": "ADD", "source": 1 }, + { + "begin": 2448, + "end": 2512, + "name": "PUSH [tag]", + "source": 1, + "value": "30" + }, + { + "begin": 2448, + "end": 2512, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 2448, + "end": 2512, + "name": "tag", + "source": 1, + "value": "63" + }, + { "begin": 2448, "end": 2512, "name": "JUMPDEST", "source": 1 }, + { "begin": 2438, "end": 2512, "name": "SWAP2", "source": 1 }, + { "begin": 2438, "end": 2512, "name": "POP", "source": 1 }, + { "begin": 2394, "end": 2522, "name": "POP", "source": 1 }, + { "begin": 2178, "end": 2529, "name": "SWAP3", "source": 1 }, + { "begin": 2178, "end": 2529, "name": "SWAP2", "source": 1 }, + { "begin": 2178, "end": 2529, "name": "POP", "source": 1 }, + { "begin": 2178, "end": 2529, "name": "POP", "source": 1 }, + { + "begin": 2178, + "end": 2529, + "name": "JUMP", + "source": 1, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "someAction(address,uint256)": "398f7223", + "store()": "975057e7" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_number\",\"type\":\"uint256\"}],\"name\":\"someAction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"store\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TraceCaller\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4d55fc0d2ba607d43e62a3f476aa2a1c0ea7914816b5412c6b3d834170e87d04\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2786981bec4a827c4a0f6b63097e63d99140c2d425d00ae003e084626e30e001\",\"dweb:/ipfs/QmTAV4vGHrLFnnyicS3aSbx2Bajn463UQrDUKEPyTLdcRC\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 207, + "contract": "main.sol:TraceCaller", + "label": "callee", + "offset": 0, + "slot": "0", + "type": "t_contract(TraceCallee)204" + }, + { + "astId": 209, + "contract": "main.sol:TraceCaller", + "label": "store", + "offset": 0, + "slot": "1", + "type": "t_uint256" + } + ], + "types": { + "t_contract(TraceCallee)204": { + "encoding": "inplace", + "label": "contract TraceCallee", + "numberOfBytes": "20" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract TraceFilter {\n constructor(bool should_revert) {\n if (should_revert) {\n revert();\n }\n }\n\n function call_ok() public pure {}\n\n function call_revert() public pure {\n revert();\n }\n\n function subcalls(address target0, address target1) public pure {\n try TraceFilter(target0).subsubcalls(target1) {} catch {}\n try TraceFilter(target0).subsubcalls(target1) {} catch {}\n }\n\n function subsubcalls(address target1) public pure {\n TraceFilter(target1).call_ok();\n TraceFilter(target1).call_revert();\n }\n\n function heavy_steps(uint256 store_steps, uint256 op_steps) external {\n while (store_steps != 0) {\n assembly {\n sstore(store_steps, store_steps)\n }\n store_steps--;\n }\n\n while (op_steps != 0) {\n op_steps--;\n }\n }\n\n // This part is to trace Wasm memory overflow\n uint256 public a;\n uint256 public b;\n uint256 public c;\n uint256 public d;\n uint256 public e;\n uint256 public f;\n uint256 public g;\n uint256 public h;\n uint256 public i;\n uint256 public j;\n\n function set_and_loop(uint256 loops) public returns (uint256 result) {\n a = 1;\n b = 1;\n c = 1;\n d = 1;\n e = 1;\n f = 1;\n g = 1;\n h = 1;\n i = 1;\n j = 1;\n uint256 count = 0;\n while (i < loops) {\n count += 1;\n }\n return 1;\n }\n}\n\ncontract TraceCallee {\n uint256 public store;\n\n function addtwo(uint256 _value) external returns (uint256 result) {\n uint256 x = 7;\n store = _value;\n return _value + x;\n }\n}\n\ncontract TraceCaller {\n TraceCallee internal callee;\n uint256 public store;\n\n function someAction(address _addr, uint256 _number) public {\n callee = TraceCallee(_addr);\n store = callee.addtwo(_number);\n }\n}\n" +} diff --git a/tests/contracts/compiled/TraceFilter.json b/tests/contracts/compiled/TraceFilter.json index 8609ccc938..27034d8488 100644 --- a/tests/contracts/compiled/TraceFilter.json +++ b/tests/contracts/compiled/TraceFilter.json @@ -1,5 +1,5 @@ { - "byteCode": "0x608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", + "byteCode": "0x608060405234801561001057600080fd5b506040516108ca3803806108ca83398181016040528101906100329190610080565b801561003d57600080fd5b506100ad565b600080fd5b60008115159050919050565b61005d81610048565b811461006857600080fd5b50565b60008151905061007a81610054565b92915050565b60006020828403121561009657610095610043565b5b60006100a48482850161006b565b91505092915050565b61080e806100bc6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b582ec5f11610097578063e2179b8e11610066578063e2179b8e14610253578063e5aa3d5814610271578063f34f16101461028f578063ffae15ba146102ab57610100565b8063b582ec5f146101ef578063b8c9d3651461020d578063c3da42b81461022b578063cb30e6961461024957610100565b80635eaf9bc1116100d35780635eaf9bc11461018f5780636422847b146101995780638a054ac2146101b5578063a885f4e3146101d357610100565b80630dbe671f1461010557806313128fdc1461012357806326121ff0146101535780634df7e3d014610171575b600080fd5b61010d6102c9565b60405161011a919061057b565b60405180910390f35b61013d600480360381019061013891906105c7565b6102cf565b60405161014a919061057b565b60405180910390f35b61015b61034b565b604051610168919061057b565b60405180910390f35b610179610351565b604051610186919061057b565b60405180910390f35b610197610357565b005b6101b360048036038101906101ae91906105f4565b610359565b005b6101bd610398565b6040516101ca919061057b565b60405180910390f35b6101ed60048036038101906101e89190610692565b61039e565b005b6101f761045d565b604051610204919061057b565b60405180910390f35b610215610463565b604051610222919061057b565b60405180910390f35b610233610469565b604051610240919061057b565b60405180910390f35b61025161046f565b005b61025b610474565b604051610268919061057b565b60405180910390f35b61027961047a565b604051610286919061057b565b60405180910390f35b6102a960048036038101906102a491906106bf565b610480565b005b6102b361055c565b6040516102c0919061057b565b60405180910390f35b60005481565b60006001600081905550600180819055506001600281905550600160038190555060016004819055506001600581905550600160068190555060016007819055506001600881905550600160098190555060005b8260085410156103415760018161033a919061072e565b9050610323565b6001915050919050565b60055481565b60015481565b565b5b6000821461037857818255818061037090610784565b92505061035a565b5b6000811461039457808061038c90610784565b915050610379565b5050565b60035481565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b815260040160006040518083038186803b1580156103e457600080fd5b505afa1580156103f8573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b815260040160006040518083038186803b15801561044257600080fd5b505afa158015610456573d6000803e3d6000fd5b5050505050565b60095481565b60075481565b60025481565b600080fd5b60065481565b60085481565b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016104b991906107bd565b60006040518083038186803b1580156104d157600080fd5b505afa9250505080156104e2575060015b6104eb576104ec565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161052591906107bd565b60006040518083038186803b15801561053d57600080fd5b505afa92505050801561054e575060015b61055757610558565b5b5050565b60045481565b6000819050919050565b61057581610562565b82525050565b6000602082019050610590600083018461056c565b92915050565b600080fd5b6105a481610562565b81146105af57600080fd5b50565b6000813590506105c18161059b565b92915050565b6000602082840312156105dd576105dc610596565b5b60006105eb848285016105b2565b91505092915050565b6000806040838503121561060b5761060a610596565b5b6000610619858286016105b2565b925050602061062a858286016105b2565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061065f82610634565b9050919050565b61066f81610654565b811461067a57600080fd5b50565b60008135905061068c81610666565b92915050565b6000602082840312156106a8576106a7610596565b5b60006106b68482850161067d565b91505092915050565b600080604083850312156106d6576106d5610596565b5b60006106e48582860161067d565b92505060206106f58582860161067d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061073982610562565b915061074483610562565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610779576107786106ff565b5b828201905092915050565b600061078f82610562565b915060008214156107a3576107a26106ff565b5b600182039050919050565b6107b781610654565b82525050565b60006020820190506107d260008301846107ae565b9291505056fea2646970667358221220ef9f4c3f0eed8fc4db8a32f5d3348dff9017af9737329f0cba33ef02871c990764736f6c634300080b0033", "contract": { "abi": [ { @@ -9,17 +9,132 @@ "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [], + "name": "a", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "b", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "c", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "call_ok", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "call_revert", "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "d", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "e", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "f", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "g", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "h", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "store_steps", + "type": "uint256" + }, + { "internalType": "uint256", "name": "op_steps", "type": "uint256" } + ], + "name": "heavy_steps", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "i", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "j", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "loops", "type": "uint256" } + ], + "name": "set_and_loop", + "outputs": [ + { "internalType": "uint256", "name": "result", "type": "uint256" } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -30,7 +145,7 @@ ], "name": "subcalls", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "pure", "type": "function" }, { @@ -39,109 +154,272 @@ ], "name": "subsubcalls", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "pure", "type": "function" } ], "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"main.sol\":115:128 should_revert */\n dup1\n /* \"main.sol\":111:171 if (should_revert) {... */\n iszero\n tag_6\n jumpi\n /* \"main.sol\":148:156 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":111:171 if (should_revert) {... */\ntag_6:\n /* \"main.sol\":65:181 constructor(bool should_revert) {... */\n pop\n /* \"main.sol\":34:705 contract TraceFilter {... */\n jump(tag_7)\n /* \"#utility.yul\":7:144 */\ntag_9:\n 0x00\n /* \"#utility.yul\":92:98 */\n dup2\n /* \"#utility.yul\":86:99 */\n mload\n /* \"#utility.yul\":77:99 */\n swap1\n pop\n /* \"#utility.yul\":108:138 */\n tag_11\n /* \"#utility.yul\":132:137 */\n dup2\n /* \"#utility.yul\":108:138 */\n tag_12\n jump\t// in\ntag_11:\n /* \"#utility.yul\":67:144 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":150:428 */\ntag_3:\n 0x00\n /* \"#utility.yul\":266:268 */\n 0x20\n /* \"#utility.yul\":254:263 */\n dup3\n /* \"#utility.yul\":245:252 */\n dup5\n /* \"#utility.yul\":241:264 */\n sub\n /* \"#utility.yul\":237:269 */\n slt\n /* \"#utility.yul\":234:236 */\n iszero\n tag_14\n jumpi\n /* \"#utility.yul\":282:283 */\n 0x00\n /* \"#utility.yul\":279:280 */\n dup1\n /* \"#utility.yul\":272:284 */\n revert\n /* \"#utility.yul\":234:236 */\ntag_14:\n /* \"#utility.yul\":325:326 */\n 0x00\n /* \"#utility.yul\":350:411 */\n tag_15\n /* \"#utility.yul\":403:410 */\n dup5\n /* \"#utility.yul\":394:400 */\n dup3\n /* \"#utility.yul\":383:392 */\n dup6\n /* \"#utility.yul\":379:401 */\n add\n /* \"#utility.yul\":350:411 */\n tag_9\n jump\t// in\ntag_15:\n /* \"#utility.yul\":340:411 */\n swap2\n pop\n /* \"#utility.yul\":296:421 */\n pop\n /* \"#utility.yul\":224:428 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":434:524 */\ntag_16:\n 0x00\n /* \"#utility.yul\":511:516 */\n dup2\n /* \"#utility.yul\":504:517 */\n iszero\n /* \"#utility.yul\":497:518 */\n iszero\n /* \"#utility.yul\":486:518 */\n swap1\n pop\n /* \"#utility.yul\":476:524 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":530:646 */\ntag_12:\n /* \"#utility.yul\":600:621 */\n tag_19\n /* \"#utility.yul\":615:620 */\n dup2\n /* \"#utility.yul\":600:621 */\n tag_16\n jump\t// in\ntag_19:\n /* \"#utility.yul\":593:598 */\n dup2\n /* \"#utility.yul\":590:622 */\n eq\n /* \"#utility.yul\":580:582 */\n tag_20\n jumpi\n /* \"#utility.yul\":636:637 */\n 0x00\n /* \"#utility.yul\":633:634 */\n dup1\n /* \"#utility.yul\":626:638 */\n revert\n /* \"#utility.yul\":580:582 */\ntag_20:\n /* \"#utility.yul\":570:646 */\n pop\n jump\t// out\n /* \"main.sol\":34:705 contract TraceFilter {... */\ntag_7:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":34:705 contract TraceFilter {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5eaf9bc1\n eq\n tag_3\n jumpi\n dup1\n 0xa885f4e3\n eq\n tag_4\n jumpi\n dup1\n 0xcb30e696\n eq\n tag_5\n jumpi\n dup1\n 0xf34f1610\n eq\n tag_6\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_3:\n tag_7\n tag_8\n jump\t// in\n tag_7:\n stop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_4:\n tag_9\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n tag_12\n jump\t// in\n tag_9:\n stop\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_5:\n tag_13\n tag_14\n jump\t// in\n tag_13:\n stop\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_6:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n stop\n /* \"main.sol\":195:224 function call_ok() public { } */\n tag_8:\n jump\t// out\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n tag_12:\n /* \"main.sol\":622:629 target1 */\n dup1\n /* \"main.sol\":610:638 TraceFilter(target1).call_ok */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x5eaf9bc1\n /* \"main.sol\":610:640 TraceFilter(target1).call_ok() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_21\n jumpi\n 0x00\n dup1\n revert\n tag_21:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_23\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_23:\n pop\n pop\n pop\n pop\n /* \"main.sol\":666:673 target1 */\n dup1\n /* \"main.sol\":654:686 TraceFilter(target1).call_revert */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xcb30e696\n /* \"main.sol\":654:688 TraceFilter(target1).call_revert() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_24\n jumpi\n 0x00\n dup1\n revert\n tag_24:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_26\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_26:\n pop\n pop\n pop\n pop\n /* \"main.sol\":551:699 function subsubcalls(address target1) public {... */\n pop\n jump\t// out\n /* \"main.sol\":238:309 function call_revert() public {... */\n tag_14:\n /* \"main.sol\":282:290 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n tag_18:\n /* \"main.sol\":412:419 target0 */\n dup2\n /* \"main.sol\":400:432 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":433:440 target1 */\n dup3\n /* \"main.sol\":400:441 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_29\n swap2\n swap1\n tag_30\n jump\t// in\n tag_29:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_31\n jumpi\n 0x00\n dup1\n revert\n tag_31:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_32\n jumpi\n pop\n 0x01\n tag_32:\n /* \"main.sol\":396:455 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_33\n jumpi\n jump(tag_37)\n tag_33:\n tag_37:\n /* \"main.sol\":484:491 target0 */\n dup2\n /* \"main.sol\":472:504 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":505:512 target1 */\n dup3\n /* \"main.sol\":472:513 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_38\n swap2\n swap1\n tag_30\n jump\t// in\n tag_38:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_39\n jumpi\n 0x00\n dup1\n revert\n tag_39:\n pop\n gas\n call\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_40\n jumpi\n pop\n 0x01\n tag_40:\n /* \"main.sol\":468:527 try TraceFilter(target0).subsubcalls(target1) { } catch { } */\n tag_41\n jumpi\n jump(tag_45)\n tag_41:\n tag_45:\n /* \"main.sol\":323:537 function subcalls(address target0, address target1) public {... */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:146 */\n tag_47:\n 0x00\n /* \"#utility.yul\":91:97 */\n dup2\n /* \"#utility.yul\":78:98 */\n calldataload\n /* \"#utility.yul\":69:98 */\n swap1\n pop\n /* \"#utility.yul\":107:140 */\n tag_49\n /* \"#utility.yul\":134:139 */\n dup2\n /* \"#utility.yul\":107:140 */\n tag_50\n jump\t// in\n tag_49:\n /* \"#utility.yul\":59:146 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":152:414 */\n tag_11:\n 0x00\n /* \"#utility.yul\":260:262 */\n 0x20\n /* \"#utility.yul\":248:257 */\n dup3\n /* \"#utility.yul\":239:246 */\n dup5\n /* \"#utility.yul\":235:258 */\n sub\n /* \"#utility.yul\":231:263 */\n slt\n /* \"#utility.yul\":228:230 */\n iszero\n tag_52\n jumpi\n /* \"#utility.yul\":276:277 */\n 0x00\n /* \"#utility.yul\":273:274 */\n dup1\n /* \"#utility.yul\":266:278 */\n revert\n /* \"#utility.yul\":228:230 */\n tag_52:\n /* \"#utility.yul\":319:320 */\n 0x00\n /* \"#utility.yul\":344:397 */\n tag_53\n /* \"#utility.yul\":389:396 */\n dup5\n /* \"#utility.yul\":380:386 */\n dup3\n /* \"#utility.yul\":369:378 */\n dup6\n /* \"#utility.yul\":365:387 */\n add\n /* \"#utility.yul\":344:397 */\n tag_47\n jump\t// in\n tag_53:\n /* \"#utility.yul\":334:397 */\n swap2\n pop\n /* \"#utility.yul\":290:407 */\n pop\n /* \"#utility.yul\":218:414 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":420:827 */\n tag_17:\n 0x00\n dup1\n /* \"#utility.yul\":545:547 */\n 0x40\n /* \"#utility.yul\":533:542 */\n dup4\n /* \"#utility.yul\":524:531 */\n dup6\n /* \"#utility.yul\":520:543 */\n sub\n /* \"#utility.yul\":516:548 */\n slt\n /* \"#utility.yul\":513:515 */\n iszero\n tag_55\n jumpi\n /* \"#utility.yul\":561:562 */\n 0x00\n /* \"#utility.yul\":558:559 */\n dup1\n /* \"#utility.yul\":551:563 */\n revert\n /* \"#utility.yul\":513:515 */\n tag_55:\n /* \"#utility.yul\":604:605 */\n 0x00\n /* \"#utility.yul\":629:682 */\n tag_56\n /* \"#utility.yul\":674:681 */\n dup6\n /* \"#utility.yul\":665:671 */\n dup3\n /* \"#utility.yul\":654:663 */\n dup7\n /* \"#utility.yul\":650:672 */\n add\n /* \"#utility.yul\":629:682 */\n tag_47\n jump\t// in\n tag_56:\n /* \"#utility.yul\":619:682 */\n swap3\n pop\n /* \"#utility.yul\":575:692 */\n pop\n /* \"#utility.yul\":731:733 */\n 0x20\n /* \"#utility.yul\":757:810 */\n tag_57\n /* \"#utility.yul\":802:809 */\n dup6\n /* \"#utility.yul\":793:799 */\n dup3\n /* \"#utility.yul\":782:791 */\n dup7\n /* \"#utility.yul\":778:800 */\n add\n /* \"#utility.yul\":757:810 */\n tag_47\n jump\t// in\n tag_57:\n /* \"#utility.yul\":747:810 */\n swap2\n pop\n /* \"#utility.yul\":702:820 */\n pop\n /* \"#utility.yul\":503:827 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":833:951 */\n tag_58:\n /* \"#utility.yul\":920:944 */\n tag_60\n /* \"#utility.yul\":938:943 */\n dup2\n /* \"#utility.yul\":920:944 */\n tag_61\n jump\t// in\n tag_60:\n /* \"#utility.yul\":915:918 */\n dup3\n /* \"#utility.yul\":908:945 */\n mstore\n /* \"#utility.yul\":898:951 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":957:1179 */\n tag_30:\n 0x00\n /* \"#utility.yul\":1088:1090 */\n 0x20\n /* \"#utility.yul\":1077:1086 */\n dup3\n /* \"#utility.yul\":1073:1091 */\n add\n /* \"#utility.yul\":1065:1091 */\n swap1\n pop\n /* \"#utility.yul\":1101:1172 */\n tag_63\n /* \"#utility.yul\":1169:1170 */\n 0x00\n /* \"#utility.yul\":1158:1167 */\n dup4\n /* \"#utility.yul\":1154:1171 */\n add\n /* \"#utility.yul\":1145:1151 */\n dup5\n /* \"#utility.yul\":1101:1172 */\n tag_58\n jump\t// in\n tag_63:\n /* \"#utility.yul\":1055:1179 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1185:1281 */\n tag_61:\n 0x00\n /* \"#utility.yul\":1251:1275 */\n tag_65\n /* \"#utility.yul\":1269:1274 */\n dup3\n /* \"#utility.yul\":1251:1275 */\n tag_66\n jump\t// in\n tag_65:\n /* \"#utility.yul\":1240:1275 */\n swap1\n pop\n /* \"#utility.yul\":1230:1281 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1287:1413 */\n tag_66:\n 0x00\n /* \"#utility.yul\":1364:1406 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1357:1362 */\n dup3\n /* \"#utility.yul\":1353:1407 */\n and\n /* \"#utility.yul\":1342:1407 */\n swap1\n pop\n /* \"#utility.yul\":1332:1413 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1419:1541 */\n tag_50:\n /* \"#utility.yul\":1492:1516 */\n tag_69\n /* \"#utility.yul\":1510:1515 */\n dup2\n /* \"#utility.yul\":1492:1516 */\n tag_61\n jump\t// in\n tag_69:\n /* \"#utility.yul\":1485:1490 */\n dup2\n /* \"#utility.yul\":1482:1517 */\n eq\n /* \"#utility.yul\":1472:1474 */\n tag_70\n jumpi\n /* \"#utility.yul\":1531:1532 */\n 0x00\n /* \"#utility.yul\":1528:1529 */\n dup1\n /* \"#utility.yul\":1521:1533 */\n revert\n /* \"#utility.yul\":1472:1474 */\n tag_70:\n /* \"#utility.yul\":1462:1541 */\n pop\n jump\t// out\n\n auxdata: 0xa26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033\n}\n", + "assembly": " /* \"main.sol\":67:1574 contract TraceFilter {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":94:194 constructor(bool should_revert) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"main.sol\":140:153 should_revert */\n dup1\n /* \"main.sol\":136:188 if (should_revert) {... */\n iszero\n tag_6\n jumpi\n /* \"main.sol\":169:177 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":136:188 if (should_revert) {... */\ntag_6:\n /* \"main.sol\":94:194 constructor(bool should_revert) {... */\n pop\n /* \"main.sol\":67:1574 contract TraceFilter {... */\n jump(tag_7)\n /* \"#utility.yul\":88:205 */\ntag_9:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:424 */\ntag_11:\n /* \"#utility.yul\":368:375 */\n 0x00\n /* \"#utility.yul\":411:416 */\n dup2\n /* \"#utility.yul\":404:417 */\n iszero\n /* \"#utility.yul\":397:418 */\n iszero\n /* \"#utility.yul\":386:418 */\n swap1\n pop\n /* \"#utility.yul\":334:424 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":430:546 */\ntag_12:\n /* \"#utility.yul\":500:521 */\n tag_20\n /* \"#utility.yul\":515:520 */\n dup2\n /* \"#utility.yul\":500:521 */\n tag_11\n jump\t// in\ntag_20:\n /* \"#utility.yul\":493:498 */\n dup2\n /* \"#utility.yul\":490:522 */\n eq\n /* \"#utility.yul\":480:540 */\n tag_21\n jumpi\n /* \"#utility.yul\":536:537 */\n 0x00\n /* \"#utility.yul\":533:534 */\n dup1\n /* \"#utility.yul\":526:538 */\n revert\n /* \"#utility.yul\":480:540 */\ntag_21:\n /* \"#utility.yul\":430:546 */\n pop\n jump\t// out\n /* \"#utility.yul\":552:689 */\ntag_13:\n /* \"#utility.yul\":606:611 */\n 0x00\n /* \"#utility.yul\":637:643 */\n dup2\n /* \"#utility.yul\":631:644 */\n mload\n /* \"#utility.yul\":622:644 */\n swap1\n pop\n /* \"#utility.yul\":653:683 */\n tag_23\n /* \"#utility.yul\":677:682 */\n dup2\n /* \"#utility.yul\":653:683 */\n tag_12\n jump\t// in\ntag_23:\n /* \"#utility.yul\":552:689 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":695:1040 */\ntag_3:\n /* \"#utility.yul\":762:768 */\n 0x00\n /* \"#utility.yul\":811:813 */\n 0x20\n /* \"#utility.yul\":799:808 */\n dup3\n /* \"#utility.yul\":790:797 */\n dup5\n /* \"#utility.yul\":786:809 */\n sub\n /* \"#utility.yul\":782:814 */\n slt\n /* \"#utility.yul\":779:898 */\n iszero\n tag_25\n jumpi\n /* \"#utility.yul\":817:896 */\n tag_26\n tag_9\n jump\t// in\ntag_26:\n /* \"#utility.yul\":779:898 */\ntag_25:\n /* \"#utility.yul\":937:938 */\n 0x00\n /* \"#utility.yul\":962:1023 */\n tag_27\n /* \"#utility.yul\":1015:1022 */\n dup5\n /* \"#utility.yul\":1006:1012 */\n dup3\n /* \"#utility.yul\":995:1004 */\n dup6\n /* \"#utility.yul\":991:1013 */\n add\n /* \"#utility.yul\":962:1023 */\n tag_13\n jump\t// in\ntag_27:\n /* \"#utility.yul\":952:1023 */\n swap2\n pop\n /* \"#utility.yul\":908:1033 */\n pop\n /* \"#utility.yul\":695:1040 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"main.sol\":67:1574 contract TraceFilter {... */\ntag_7:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":67:1574 contract TraceFilter {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xb582ec5f\n gt\n tag_19\n jumpi\n dup1\n 0xe2179b8e\n gt\n tag_20\n jumpi\n dup1\n 0xe2179b8e\n eq\n tag_15\n jumpi\n dup1\n 0xe5aa3d58\n eq\n tag_16\n jumpi\n dup1\n 0xf34f1610\n eq\n tag_17\n jumpi\n dup1\n 0xffae15ba\n eq\n tag_18\n jumpi\n jump(tag_2)\n tag_20:\n dup1\n 0xb582ec5f\n eq\n tag_11\n jumpi\n dup1\n 0xb8c9d365\n eq\n tag_12\n jumpi\n dup1\n 0xc3da42b8\n eq\n tag_13\n jumpi\n dup1\n 0xcb30e696\n eq\n tag_14\n jumpi\n jump(tag_2)\n tag_19:\n dup1\n 0x5eaf9bc1\n gt\n tag_21\n jumpi\n dup1\n 0x5eaf9bc1\n eq\n tag_7\n jumpi\n dup1\n 0x6422847b\n eq\n tag_8\n jumpi\n dup1\n 0x8a054ac2\n eq\n tag_9\n jumpi\n dup1\n 0xa885f4e3\n eq\n tag_10\n jumpi\n jump(tag_2)\n tag_21:\n dup1\n 0x0dbe671f\n eq\n tag_3\n jumpi\n dup1\n 0x13128fdc\n eq\n tag_4\n jumpi\n dup1\n 0x26121ff0\n eq\n tag_5\n jumpi\n dup1\n 0x4df7e3d0\n eq\n tag_6\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":1018:1034 uint256 public a */\n tag_3:\n tag_22\n tag_23\n jump\t// in\n tag_22:\n mload(0x40)\n tag_24\n swap2\n swap1\n tag_25\n jump\t// in\n tag_24:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1239:1572 function set_and_loop(uint256 loops) public returns (uint256 result) {... */\n tag_4:\n tag_26\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_27\n swap2\n swap1\n tag_28\n jump\t// in\n tag_27:\n tag_29\n jump\t// in\n tag_26:\n mload(0x40)\n tag_30\n swap2\n swap1\n tag_25\n jump\t// in\n tag_30:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1128:1144 uint256 public f */\n tag_5:\n tag_31\n tag_32\n jump\t// in\n tag_31:\n mload(0x40)\n tag_33\n swap2\n swap1\n tag_25\n jump\t// in\n tag_33:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1040:1056 uint256 public b */\n tag_6:\n tag_34\n tag_35\n jump\t// in\n tag_34:\n mload(0x40)\n tag_36\n swap2\n swap1\n tag_25\n jump\t// in\n tag_36:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":200:233 function call_ok() public pure {} */\n tag_7:\n tag_37\n tag_38\n jump\t// in\n tag_37:\n stop\n /* \"main.sol\":661:962 function heavy_steps(uint256 store_steps, uint256 op_steps) external {... */\n tag_8:\n tag_39\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_40\n swap2\n swap1\n tag_41\n jump\t// in\n tag_40:\n tag_42\n jump\t// in\n tag_39:\n stop\n /* \"main.sol\":1084:1100 uint256 public d */\n tag_9:\n tag_43\n tag_44\n jump\t// in\n tag_43:\n mload(0x40)\n tag_45\n swap2\n swap1\n tag_25\n jump\t// in\n tag_45:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":514:655 function subsubcalls(address target1) public pure {... */\n tag_10:\n tag_46\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_47\n swap2\n swap1\n tag_48\n jump\t// in\n tag_47:\n tag_49\n jump\t// in\n tag_46:\n stop\n /* \"main.sol\":1216:1232 uint256 public j */\n tag_11:\n tag_50\n tag_51\n jump\t// in\n tag_50:\n mload(0x40)\n tag_52\n swap2\n swap1\n tag_25\n jump\t// in\n tag_52:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1172:1188 uint256 public h */\n tag_12:\n tag_53\n tag_54\n jump\t// in\n tag_53:\n mload(0x40)\n tag_55\n swap2\n swap1\n tag_25\n jump\t// in\n tag_55:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1062:1078 uint256 public c */\n tag_13:\n tag_56\n tag_57\n jump\t// in\n tag_56:\n mload(0x40)\n tag_58\n swap2\n swap1\n tag_25\n jump\t// in\n tag_58:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":239:299 function call_revert() public pure {... */\n tag_14:\n tag_59\n tag_60\n jump\t// in\n tag_59:\n stop\n /* \"main.sol\":1150:1166 uint256 public g */\n tag_15:\n tag_61\n tag_62\n jump\t// in\n tag_61:\n mload(0x40)\n tag_63\n swap2\n swap1\n tag_25\n jump\t// in\n tag_63:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1194:1210 uint256 public i */\n tag_16:\n tag_64\n tag_65\n jump\t// in\n tag_64:\n mload(0x40)\n tag_66\n swap2\n swap1\n tag_25\n jump\t// in\n tag_66:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":305:508 function subcalls(address target0, address target1) public pure {... */\n tag_17:\n tag_67\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_68\n swap2\n swap1\n tag_69\n jump\t// in\n tag_68:\n tag_70\n jump\t// in\n tag_67:\n stop\n /* \"main.sol\":1106:1122 uint256 public e */\n tag_18:\n tag_71\n tag_72\n jump\t// in\n tag_71:\n mload(0x40)\n tag_73\n swap2\n swap1\n tag_25\n jump\t// in\n tag_73:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1018:1034 uint256 public a */\n tag_23:\n sload(0x00)\n dup2\n jump\t// out\n /* \"main.sol\":1239:1572 function set_and_loop(uint256 loops) public returns (uint256 result) {... */\n tag_29:\n /* \"main.sol\":1292:1306 uint256 result */\n 0x00\n /* \"main.sol\":1322:1323 1 */\n 0x01\n /* \"main.sol\":1318:1319 a */\n 0x00\n /* \"main.sol\":1318:1323 a = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1337:1338 1 */\n 0x01\n /* \"main.sol\":1333:1334 b */\n dup1\n /* \"main.sol\":1333:1338 b = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1352:1353 1 */\n 0x01\n /* \"main.sol\":1348:1349 c */\n 0x02\n /* \"main.sol\":1348:1353 c = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1367:1368 1 */\n 0x01\n /* \"main.sol\":1363:1364 d */\n 0x03\n /* \"main.sol\":1363:1368 d = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1382:1383 1 */\n 0x01\n /* \"main.sol\":1378:1379 e */\n 0x04\n /* \"main.sol\":1378:1383 e = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1397:1398 1 */\n 0x01\n /* \"main.sol\":1393:1394 f */\n 0x05\n /* \"main.sol\":1393:1398 f = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1412:1413 1 */\n 0x01\n /* \"main.sol\":1408:1409 g */\n 0x06\n /* \"main.sol\":1408:1413 g = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1427:1428 1 */\n 0x01\n /* \"main.sol\":1423:1424 h */\n 0x07\n /* \"main.sol\":1423:1428 h = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1442:1443 1 */\n 0x01\n /* \"main.sol\":1438:1439 i */\n 0x08\n /* \"main.sol\":1438:1443 i = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1457:1458 1 */\n 0x01\n /* \"main.sol\":1453:1454 j */\n 0x09\n /* \"main.sol\":1453:1458 j = 1 */\n dup2\n swap1\n sstore\n pop\n /* \"main.sol\":1468:1481 uint256 count */\n 0x00\n /* \"main.sol\":1495:1548 while (i < loops) {... */\n tag_75:\n /* \"main.sol\":1506:1511 loops */\n dup3\n /* \"main.sol\":1502:1503 i */\n sload(0x08)\n /* \"main.sol\":1502:1511 i < loops */\n lt\n /* \"main.sol\":1495:1548 while (i < loops) {... */\n iszero\n tag_76\n jumpi\n /* \"main.sol\":1536:1537 1 */\n 0x01\n /* \"main.sol\":1527:1537 count += 1 */\n dup2\n tag_77\n swap2\n swap1\n tag_78\n jump\t// in\n tag_77:\n swap1\n pop\n /* \"main.sol\":1495:1548 while (i < loops) {... */\n jump(tag_75)\n tag_76:\n /* \"main.sol\":1564:1565 1 */\n 0x01\n /* \"main.sol\":1557:1565 return 1 */\n swap2\n pop\n pop\n /* \"main.sol\":1239:1572 function set_and_loop(uint256 loops) public returns (uint256 result) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":1128:1144 uint256 public f */\n tag_32:\n sload(0x05)\n dup2\n jump\t// out\n /* \"main.sol\":1040:1056 uint256 public b */\n tag_35:\n sload(0x01)\n dup2\n jump\t// out\n /* \"main.sol\":200:233 function call_ok() public pure {} */\n tag_38:\n jump\t// out\n /* \"main.sol\":661:962 function heavy_steps(uint256 store_steps, uint256 op_steps) external {... */\n tag_42:\n /* \"main.sol\":740:889 while (store_steps != 0) {... */\n tag_81:\n /* \"main.sol\":762:763 0 */\n 0x00\n /* \"main.sol\":747:758 store_steps */\n dup3\n /* \"main.sol\":747:763 store_steps != 0 */\n eq\n /* \"main.sol\":740:889 while (store_steps != 0) {... */\n tag_82\n jumpi\n /* \"main.sol\":826:837 store_steps */\n dup2\n /* \"main.sol\":813:824 store_steps */\n dup3\n /* \"main.sol\":806:838 sstore(store_steps, store_steps) */\n sstore\n /* \"main.sol\":865:878 store_steps-- */\n dup2\n dup1\n tag_83\n swap1\n tag_84\n jump\t// in\n tag_83:\n swap3\n pop\n pop\n /* \"main.sol\":740:889 while (store_steps != 0) {... */\n jump(tag_81)\n tag_82:\n /* \"main.sol\":899:956 while (op_steps != 0) {... */\n tag_85:\n /* \"main.sol\":918:919 0 */\n 0x00\n /* \"main.sol\":906:914 op_steps */\n dup2\n /* \"main.sol\":906:919 op_steps != 0 */\n eq\n /* \"main.sol\":899:956 while (op_steps != 0) {... */\n tag_86\n jumpi\n /* \"main.sol\":935:945 op_steps-- */\n dup1\n dup1\n tag_87\n swap1\n tag_84\n jump\t// in\n tag_87:\n swap2\n pop\n pop\n /* \"main.sol\":899:956 while (op_steps != 0) {... */\n jump(tag_85)\n tag_86:\n /* \"main.sol\":661:962 function heavy_steps(uint256 store_steps, uint256 op_steps) external {... */\n pop\n pop\n jump\t// out\n /* \"main.sol\":1084:1100 uint256 public d */\n tag_44:\n sload(0x03)\n dup2\n jump\t// out\n /* \"main.sol\":514:655 function subsubcalls(address target1) public pure {... */\n tag_49:\n /* \"main.sol\":586:593 target1 */\n dup1\n /* \"main.sol\":574:602 TraceFilter(target1).call_ok */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x5eaf9bc1\n /* \"main.sol\":574:604 TraceFilter(target1).call_ok() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_89\n jumpi\n 0x00\n dup1\n revert\n tag_89:\n pop\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_91\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_91:\n pop\n pop\n pop\n pop\n /* \"main.sol\":626:633 target1 */\n dup1\n /* \"main.sol\":614:646 TraceFilter(target1).call_revert */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xcb30e696\n /* \"main.sol\":614:648 TraceFilter(target1).call_revert() */\n mload(0x40)\n dup2\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_92\n jumpi\n 0x00\n dup1\n revert\n tag_92:\n pop\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_94\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_94:\n pop\n pop\n pop\n pop\n /* \"main.sol\":514:655 function subsubcalls(address target1) public pure {... */\n pop\n jump\t// out\n /* \"main.sol\":1216:1232 uint256 public j */\n tag_51:\n sload(0x09)\n dup2\n jump\t// out\n /* \"main.sol\":1172:1188 uint256 public h */\n tag_54:\n sload(0x07)\n dup2\n jump\t// out\n /* \"main.sol\":1062:1078 uint256 public c */\n tag_57:\n sload(0x02)\n dup2\n jump\t// out\n /* \"main.sol\":239:299 function call_revert() public pure {... */\n tag_60:\n /* \"main.sol\":284:292 revert() */\n 0x00\n dup1\n revert\n /* \"main.sol\":1150:1166 uint256 public g */\n tag_62:\n sload(0x06)\n dup2\n jump\t// out\n /* \"main.sol\":1194:1210 uint256 public i */\n tag_65:\n sload(0x08)\n dup2\n jump\t// out\n /* \"main.sol\":305:508 function subcalls(address target0, address target1) public pure {... */\n tag_70:\n /* \"main.sol\":395:402 target0 */\n dup2\n /* \"main.sol\":383:415 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":416:423 target1 */\n dup3\n /* \"main.sol\":383:424 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_97\n swap2\n swap1\n tag_98\n jump\t// in\n tag_97:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_99\n jumpi\n 0x00\n dup1\n revert\n tag_99:\n pop\n gas\n staticcall\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_100\n jumpi\n pop\n 0x01\n tag_100:\n /* \"main.sol\":379:436 try TraceFilter(target0).subsubcalls(target1) {} catch {} */\n tag_101\n jumpi\n jump(tag_105)\n tag_101:\n tag_105:\n /* \"main.sol\":461:468 target0 */\n dup2\n /* \"main.sol\":449:481 TraceFilter(target0).subsubcalls */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xa885f4e3\n /* \"main.sol\":482:489 target1 */\n dup3\n /* \"main.sol\":449:490 TraceFilter(target0).subsubcalls(target1) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_106\n swap2\n swap1\n tag_98\n jump\t// in\n tag_106:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_107\n jumpi\n 0x00\n dup1\n revert\n tag_107:\n pop\n gas\n staticcall\n swap3\n pop\n pop\n pop\n dup1\n iszero\n tag_108\n jumpi\n pop\n 0x01\n tag_108:\n /* \"main.sol\":445:502 try TraceFilter(target0).subsubcalls(target1) {} catch {} */\n tag_109\n jumpi\n jump(tag_113)\n tag_109:\n tag_113:\n /* \"main.sol\":305:508 function subcalls(address target0, address target1) public pure {... */\n pop\n pop\n jump\t// out\n /* \"main.sol\":1106:1122 uint256 public e */\n tag_72:\n sload(0x04)\n dup2\n jump\t// out\n /* \"#utility.yul\":7:84 */\n tag_114:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":73:78 */\n dup2\n /* \"#utility.yul\":62:78 */\n swap1\n pop\n /* \"#utility.yul\":7:84 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":90:208 */\n tag_115:\n /* \"#utility.yul\":177:201 */\n tag_130\n /* \"#utility.yul\":195:200 */\n dup2\n /* \"#utility.yul\":177:201 */\n tag_114\n jump\t// in\n tag_130:\n /* \"#utility.yul\":172:175 */\n dup3\n /* \"#utility.yul\":165:202 */\n mstore\n /* \"#utility.yul\":90:208 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":214:436 */\n tag_25:\n /* \"#utility.yul\":307:311 */\n 0x00\n /* \"#utility.yul\":345:347 */\n 0x20\n /* \"#utility.yul\":334:343 */\n dup3\n /* \"#utility.yul\":330:348 */\n add\n /* \"#utility.yul\":322:348 */\n swap1\n pop\n /* \"#utility.yul\":358:429 */\n tag_132\n /* \"#utility.yul\":426:427 */\n 0x00\n /* \"#utility.yul\":415:424 */\n dup4\n /* \"#utility.yul\":411:428 */\n add\n /* \"#utility.yul\":402:408 */\n dup5\n /* \"#utility.yul\":358:429 */\n tag_115\n jump\t// in\n tag_132:\n /* \"#utility.yul\":214:436 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":523:640 */\n tag_117:\n /* \"#utility.yul\":632:633 */\n 0x00\n /* \"#utility.yul\":629:630 */\n dup1\n /* \"#utility.yul\":622:634 */\n revert\n /* \"#utility.yul\":769:891 */\n tag_119:\n /* \"#utility.yul\":842:866 */\n tag_137\n /* \"#utility.yul\":860:865 */\n dup2\n /* \"#utility.yul\":842:866 */\n tag_114\n jump\t// in\n tag_137:\n /* \"#utility.yul\":835:840 */\n dup2\n /* \"#utility.yul\":832:867 */\n eq\n /* \"#utility.yul\":822:885 */\n tag_138\n jumpi\n /* \"#utility.yul\":881:882 */\n 0x00\n /* \"#utility.yul\":878:879 */\n dup1\n /* \"#utility.yul\":871:883 */\n revert\n /* \"#utility.yul\":822:885 */\n tag_138:\n /* \"#utility.yul\":769:891 */\n pop\n jump\t// out\n /* \"#utility.yul\":897:1036 */\n tag_120:\n /* \"#utility.yul\":943:948 */\n 0x00\n /* \"#utility.yul\":981:987 */\n dup2\n /* \"#utility.yul\":968:988 */\n calldataload\n /* \"#utility.yul\":959:988 */\n swap1\n pop\n /* \"#utility.yul\":997:1030 */\n tag_140\n /* \"#utility.yul\":1024:1029 */\n dup2\n /* \"#utility.yul\":997:1030 */\n tag_119\n jump\t// in\n tag_140:\n /* \"#utility.yul\":897:1036 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1042:1371 */\n tag_28:\n /* \"#utility.yul\":1101:1107 */\n 0x00\n /* \"#utility.yul\":1150:1152 */\n 0x20\n /* \"#utility.yul\":1138:1147 */\n dup3\n /* \"#utility.yul\":1129:1136 */\n dup5\n /* \"#utility.yul\":1125:1148 */\n sub\n /* \"#utility.yul\":1121:1153 */\n slt\n /* \"#utility.yul\":1118:1237 */\n iszero\n tag_142\n jumpi\n /* \"#utility.yul\":1156:1235 */\n tag_143\n tag_117\n jump\t// in\n tag_143:\n /* \"#utility.yul\":1118:1237 */\n tag_142:\n /* \"#utility.yul\":1276:1277 */\n 0x00\n /* \"#utility.yul\":1301:1354 */\n tag_144\n /* \"#utility.yul\":1346:1353 */\n dup5\n /* \"#utility.yul\":1337:1343 */\n dup3\n /* \"#utility.yul\":1326:1335 */\n dup6\n /* \"#utility.yul\":1322:1344 */\n add\n /* \"#utility.yul\":1301:1354 */\n tag_120\n jump\t// in\n tag_144:\n /* \"#utility.yul\":1291:1354 */\n swap2\n pop\n /* \"#utility.yul\":1247:1364 */\n pop\n /* \"#utility.yul\":1042:1371 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1377:1851 */\n tag_41:\n /* \"#utility.yul\":1445:1451 */\n 0x00\n /* \"#utility.yul\":1453:1459 */\n dup1\n /* \"#utility.yul\":1502:1504 */\n 0x40\n /* \"#utility.yul\":1490:1499 */\n dup4\n /* \"#utility.yul\":1481:1488 */\n dup6\n /* \"#utility.yul\":1477:1500 */\n sub\n /* \"#utility.yul\":1473:1505 */\n slt\n /* \"#utility.yul\":1470:1589 */\n iszero\n tag_146\n jumpi\n /* \"#utility.yul\":1508:1587 */\n tag_147\n tag_117\n jump\t// in\n tag_147:\n /* \"#utility.yul\":1470:1589 */\n tag_146:\n /* \"#utility.yul\":1628:1629 */\n 0x00\n /* \"#utility.yul\":1653:1706 */\n tag_148\n /* \"#utility.yul\":1698:1705 */\n dup6\n /* \"#utility.yul\":1689:1695 */\n dup3\n /* \"#utility.yul\":1678:1687 */\n dup7\n /* \"#utility.yul\":1674:1696 */\n add\n /* \"#utility.yul\":1653:1706 */\n tag_120\n jump\t// in\n tag_148:\n /* \"#utility.yul\":1643:1706 */\n swap3\n pop\n /* \"#utility.yul\":1599:1716 */\n pop\n /* \"#utility.yul\":1755:1757 */\n 0x20\n /* \"#utility.yul\":1781:1834 */\n tag_149\n /* \"#utility.yul\":1826:1833 */\n dup6\n /* \"#utility.yul\":1817:1823 */\n dup3\n /* \"#utility.yul\":1806:1815 */\n dup7\n /* \"#utility.yul\":1802:1824 */\n add\n /* \"#utility.yul\":1781:1834 */\n tag_120\n jump\t// in\n tag_149:\n /* \"#utility.yul\":1771:1834 */\n swap2\n pop\n /* \"#utility.yul\":1726:1844 */\n pop\n /* \"#utility.yul\":1377:1851 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1857:1983 */\n tag_121:\n /* \"#utility.yul\":1894:1901 */\n 0x00\n /* \"#utility.yul\":1934:1976 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1927:1932 */\n dup3\n /* \"#utility.yul\":1923:1977 */\n and\n /* \"#utility.yul\":1912:1977 */\n swap1\n pop\n /* \"#utility.yul\":1857:1983 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1989:2085 */\n tag_122:\n /* \"#utility.yul\":2026:2033 */\n 0x00\n /* \"#utility.yul\":2055:2079 */\n tag_152\n /* \"#utility.yul\":2073:2078 */\n dup3\n /* \"#utility.yul\":2055:2079 */\n tag_121\n jump\t// in\n tag_152:\n /* \"#utility.yul\":2044:2079 */\n swap1\n pop\n /* \"#utility.yul\":1989:2085 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2091:2213 */\n tag_123:\n /* \"#utility.yul\":2164:2188 */\n tag_154\n /* \"#utility.yul\":2182:2187 */\n dup2\n /* \"#utility.yul\":2164:2188 */\n tag_122\n jump\t// in\n tag_154:\n /* \"#utility.yul\":2157:2162 */\n dup2\n /* \"#utility.yul\":2154:2189 */\n eq\n /* \"#utility.yul\":2144:2207 */\n tag_155\n jumpi\n /* \"#utility.yul\":2203:2204 */\n 0x00\n /* \"#utility.yul\":2200:2201 */\n dup1\n /* \"#utility.yul\":2193:2205 */\n revert\n /* \"#utility.yul\":2144:2207 */\n tag_155:\n /* \"#utility.yul\":2091:2213 */\n pop\n jump\t// out\n /* \"#utility.yul\":2219:2358 */\n tag_124:\n /* \"#utility.yul\":2265:2270 */\n 0x00\n /* \"#utility.yul\":2303:2309 */\n dup2\n /* \"#utility.yul\":2290:2310 */\n calldataload\n /* \"#utility.yul\":2281:2310 */\n swap1\n pop\n /* \"#utility.yul\":2319:2352 */\n tag_157\n /* \"#utility.yul\":2346:2351 */\n dup2\n /* \"#utility.yul\":2319:2352 */\n tag_123\n jump\t// in\n tag_157:\n /* \"#utility.yul\":2219:2358 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2364:2693 */\n tag_48:\n /* \"#utility.yul\":2423:2429 */\n 0x00\n /* \"#utility.yul\":2472:2474 */\n 0x20\n /* \"#utility.yul\":2460:2469 */\n dup3\n /* \"#utility.yul\":2451:2458 */\n dup5\n /* \"#utility.yul\":2447:2470 */\n sub\n /* \"#utility.yul\":2443:2475 */\n slt\n /* \"#utility.yul\":2440:2559 */\n iszero\n tag_159\n jumpi\n /* \"#utility.yul\":2478:2557 */\n tag_160\n tag_117\n jump\t// in\n tag_160:\n /* \"#utility.yul\":2440:2559 */\n tag_159:\n /* \"#utility.yul\":2598:2599 */\n 0x00\n /* \"#utility.yul\":2623:2676 */\n tag_161\n /* \"#utility.yul\":2668:2675 */\n dup5\n /* \"#utility.yul\":2659:2665 */\n dup3\n /* \"#utility.yul\":2648:2657 */\n dup6\n /* \"#utility.yul\":2644:2666 */\n add\n /* \"#utility.yul\":2623:2676 */\n tag_124\n jump\t// in\n tag_161:\n /* \"#utility.yul\":2613:2676 */\n swap2\n pop\n /* \"#utility.yul\":2569:2686 */\n pop\n /* \"#utility.yul\":2364:2693 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2699:3173 */\n tag_69:\n /* \"#utility.yul\":2767:2773 */\n 0x00\n /* \"#utility.yul\":2775:2781 */\n dup1\n /* \"#utility.yul\":2824:2826 */\n 0x40\n /* \"#utility.yul\":2812:2821 */\n dup4\n /* \"#utility.yul\":2803:2810 */\n dup6\n /* \"#utility.yul\":2799:2822 */\n sub\n /* \"#utility.yul\":2795:2827 */\n slt\n /* \"#utility.yul\":2792:2911 */\n iszero\n tag_163\n jumpi\n /* \"#utility.yul\":2830:2909 */\n tag_164\n tag_117\n jump\t// in\n tag_164:\n /* \"#utility.yul\":2792:2911 */\n tag_163:\n /* \"#utility.yul\":2950:2951 */\n 0x00\n /* \"#utility.yul\":2975:3028 */\n tag_165\n /* \"#utility.yul\":3020:3027 */\n dup6\n /* \"#utility.yul\":3011:3017 */\n dup3\n /* \"#utility.yul\":3000:3009 */\n dup7\n /* \"#utility.yul\":2996:3018 */\n add\n /* \"#utility.yul\":2975:3028 */\n tag_124\n jump\t// in\n tag_165:\n /* \"#utility.yul\":2965:3028 */\n swap3\n pop\n /* \"#utility.yul\":2921:3038 */\n pop\n /* \"#utility.yul\":3077:3079 */\n 0x20\n /* \"#utility.yul\":3103:3156 */\n tag_166\n /* \"#utility.yul\":3148:3155 */\n dup6\n /* \"#utility.yul\":3139:3145 */\n dup3\n /* \"#utility.yul\":3128:3137 */\n dup7\n /* \"#utility.yul\":3124:3146 */\n add\n /* \"#utility.yul\":3103:3156 */\n tag_124\n jump\t// in\n tag_166:\n /* \"#utility.yul\":3093:3156 */\n swap2\n pop\n /* \"#utility.yul\":3048:3166 */\n pop\n /* \"#utility.yul\":2699:3173 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3179:3359 */\n tag_125:\n /* \"#utility.yul\":3227:3304 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":3224:3225 */\n 0x00\n /* \"#utility.yul\":3217:3305 */\n mstore\n /* \"#utility.yul\":3324:3328 */\n 0x11\n /* \"#utility.yul\":3321:3322 */\n 0x04\n /* \"#utility.yul\":3314:3329 */\n mstore\n /* \"#utility.yul\":3348:3352 */\n 0x24\n /* \"#utility.yul\":3345:3346 */\n 0x00\n /* \"#utility.yul\":3338:3353 */\n revert\n /* \"#utility.yul\":3365:3670 */\n tag_78:\n /* \"#utility.yul\":3405:3408 */\n 0x00\n /* \"#utility.yul\":3424:3444 */\n tag_169\n /* \"#utility.yul\":3442:3443 */\n dup3\n /* \"#utility.yul\":3424:3444 */\n tag_114\n jump\t// in\n tag_169:\n /* \"#utility.yul\":3419:3444 */\n swap2\n pop\n /* \"#utility.yul\":3458:3478 */\n tag_170\n /* \"#utility.yul\":3476:3477 */\n dup4\n /* \"#utility.yul\":3458:3478 */\n tag_114\n jump\t// in\n tag_170:\n /* \"#utility.yul\":3453:3478 */\n swap3\n pop\n /* \"#utility.yul\":3612:3613 */\n dup3\n /* \"#utility.yul\":3544:3610 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":3540:3614 */\n sub\n /* \"#utility.yul\":3537:3538 */\n dup3\n /* \"#utility.yul\":3534:3615 */\n gt\n /* \"#utility.yul\":3531:3638 */\n iszero\n tag_171\n jumpi\n /* \"#utility.yul\":3618:3636 */\n tag_172\n tag_125\n jump\t// in\n tag_172:\n /* \"#utility.yul\":3531:3638 */\n tag_171:\n /* \"#utility.yul\":3662:3663 */\n dup3\n /* \"#utility.yul\":3659:3660 */\n dup3\n /* \"#utility.yul\":3655:3664 */\n add\n /* \"#utility.yul\":3648:3664 */\n swap1\n pop\n /* \"#utility.yul\":3365:3670 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3676:3847 */\n tag_84:\n /* \"#utility.yul\":3715:3718 */\n 0x00\n /* \"#utility.yul\":3738:3762 */\n tag_174\n /* \"#utility.yul\":3756:3761 */\n dup3\n /* \"#utility.yul\":3738:3762 */\n tag_114\n jump\t// in\n tag_174:\n /* \"#utility.yul\":3729:3762 */\n swap2\n pop\n /* \"#utility.yul\":3784:3788 */\n 0x00\n /* \"#utility.yul\":3777:3782 */\n dup3\n /* \"#utility.yul\":3774:3789 */\n eq\n /* \"#utility.yul\":3771:3812 */\n iszero\n tag_175\n jumpi\n /* \"#utility.yul\":3792:3810 */\n tag_176\n tag_125\n jump\t// in\n tag_176:\n /* \"#utility.yul\":3771:3812 */\n tag_175:\n /* \"#utility.yul\":3839:3840 */\n 0x01\n /* \"#utility.yul\":3832:3837 */\n dup3\n /* \"#utility.yul\":3828:3841 */\n sub\n /* \"#utility.yul\":3821:3841 */\n swap1\n pop\n /* \"#utility.yul\":3676:3847 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3853:3971 */\n tag_126:\n /* \"#utility.yul\":3940:3964 */\n tag_178\n /* \"#utility.yul\":3958:3963 */\n dup2\n /* \"#utility.yul\":3940:3964 */\n tag_122\n jump\t// in\n tag_178:\n /* \"#utility.yul\":3935:3938 */\n dup3\n /* \"#utility.yul\":3928:3965 */\n mstore\n /* \"#utility.yul\":3853:3971 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3977:4199 */\n tag_98:\n /* \"#utility.yul\":4070:4074 */\n 0x00\n /* \"#utility.yul\":4108:4110 */\n 0x20\n /* \"#utility.yul\":4097:4106 */\n dup3\n /* \"#utility.yul\":4093:4111 */\n add\n /* \"#utility.yul\":4085:4111 */\n swap1\n pop\n /* \"#utility.yul\":4121:4192 */\n tag_180\n /* \"#utility.yul\":4189:4190 */\n 0x00\n /* \"#utility.yul\":4178:4187 */\n dup4\n /* \"#utility.yul\":4174:4191 */\n add\n /* \"#utility.yul\":4165:4171 */\n dup5\n /* \"#utility.yul\":4121:4192 */\n tag_126\n jump\t// in\n tag_180:\n /* \"#utility.yul\":3977:4199 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220ef9f4c3f0eed8fc4db8a32f5d3348dff9017af9737329f0cba33ef02871c990764736f6c634300080b0033\n}\n", "bytecode": { + "functionDebugData": { + "@_13": { + "entryPoint": null, + "id": 13, + "parameterSlots": 1, + "returnSlots": 0 + }, + "abi_decode_t_bool_fromMemory": { + "entryPoint": 107, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_bool_fromMemory": { + "entryPoint": 128, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_bool": { + "entryPoint": 72, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 67, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_bool": { + "entryPoint": 84, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, "generatedSources": [ { "ast": { "nodeType": "YulBlock", - "src": "0:649:1", + "src": "0:1043:1", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "67:77:1", + "src": "47:35:1", "statements": [ { "nodeType": "YulAssignment", - "src": "77:22:1", + "src": "57:19:1", "value": { "arguments": [ { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "92:6:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:1", + "type": "", + "value": "64" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "86:5:1" + "src": "67:5:1" }, "nodeType": "YulFunctionCall", - "src": "86:13:1" + "src": "67:9:1" }, "variableNames": [ { - "name": "value", + "name": "memPtr", "nodeType": "YulIdentifier", - "src": "77:5:1" + "src": "57:6:1" } ] - }, + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:1", + "type": "" + } + ], + "src": "7:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:1", + "statements": [ { "expression": { "arguments": [ { - "name": "value", - "nodeType": "YulIdentifier", - "src": "132:5:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:1", + "type": "", + "value": "0" } ], "functionName": { - "name": "validator_revert_t_bool", + "name": "revert", "nodeType": "YulIdentifier", - "src": "108:23:1" + "src": "187:6:1" }, "nodeType": "YulFunctionCall", - "src": "108:30:1" + "src": "187:12:1" }, "nodeType": "YulExpressionStatement", - "src": "108:30:1" + "src": "187:12:1" } ] }, - "name": "abi_decode_t_bool_fromMemory", + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:1" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "376:48:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "386:32:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "411:5:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "404:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "404:13:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "397:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "397:21:1" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "386:7:1" + } + ] + } + ] + }, + "name": "cleanup_t_bool", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", - "nodeType": "YulTypedName", - "src": "45:6:1", - "type": "" - }, - { - "name": "end", + "name": "value", "nodeType": "YulTypedName", - "src": "53:3:1", + "src": "358:5:1", "type": "" } ], "returnVariables": [ { - "name": "value", + "name": "cleaned", "nodeType": "YulTypedName", - "src": "61:5:1", + "src": "368:7:1", "type": "" } ], - "src": "7:137:1" + "src": "334:90:1" }, { "body": { "nodeType": "YulBlock", - "src": "224:204:1", + "src": "470:76:1", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "270:16:1", + "src": "524:16:1", "statements": [ { "expression": { @@ -149,14 +427,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "279:1:1", + "src": "533:1:1", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "282:1:1", + "src": "536:1:1", "type": "", "value": "0" } @@ -164,13 +442,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "272:6:1" + "src": "526:6:1" }, "nodeType": "YulFunctionCall", - "src": "272:12:1" + "src": "526:12:1" }, "nodeType": "YulExpressionStatement", - "src": "272:12:1" + "src": "526:12:1" } ] }, @@ -179,54 +457,220 @@ { "arguments": [ { - "name": "dataEnd", + "name": "value", "nodeType": "YulIdentifier", - "src": "245:7:1" + "src": "493:5:1" }, { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "254:9:1" + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "515:5:1" + } + ], + "functionName": { + "name": "cleanup_t_bool", + "nodeType": "YulIdentifier", + "src": "500:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "500:21:1" } ], "functionName": { - "name": "sub", + "name": "eq", "nodeType": "YulIdentifier", - "src": "241:3:1" + "src": "490:2:1" }, "nodeType": "YulFunctionCall", - "src": "241:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "266:2:1", - "type": "", - "value": "32" + "src": "490:32:1" } ], "functionName": { - "name": "slt", + "name": "iszero", "nodeType": "YulIdentifier", - "src": "237:3:1" + "src": "483:6:1" }, "nodeType": "YulFunctionCall", - "src": "237:32:1" + "src": "483:40:1" }, "nodeType": "YulIf", - "src": "234:2:1" - }, + "src": "480:60:1" + } + ] + }, + "name": "validator_revert_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "463:5:1", + "type": "" + } + ], + "src": "430:116:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "612:77:1", + "statements": [ { - "nodeType": "YulBlock", - "src": "296:125:1", - "statements": [ + "nodeType": "YulAssignment", + "src": "622:22:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "637:6:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "631:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "631:13:1" + }, + "variableNames": [ { - "nodeType": "YulVariableDeclaration", - "src": "311:15:1", - "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "622:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "677:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "653:23:1" + }, + "nodeType": "YulFunctionCall", + "src": "653:30:1" + }, + "nodeType": "YulExpressionStatement", + "src": "653:30:1" + } + ] + }, + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "590:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "598:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "606:5:1", + "type": "" + } + ], + "src": "552:137:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "769:271:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "815:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "817:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "817:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "817:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "790:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "799:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "786:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "786:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "811:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "782:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "782:32:1" + }, + "nodeType": "YulIf", + "src": "779:119:1" + }, + { + "nodeType": "YulBlock", + "src": "908:125:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "923:15:1", + "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "325:1:1", + "src": "937:1:1", "type": "", "value": "0" }, @@ -234,14 +678,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "315:6:1", + "src": "927:6:1", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "340:71:1", + "src": "952:71:1", "value": { "arguments": [ { @@ -249,41 +693,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "383:9:1" + "src": "995:9:1" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "394:6:1" + "src": "1006:6:1" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "379:3:1" + "src": "991:3:1" }, "nodeType": "YulFunctionCall", - "src": "379:22:1" + "src": "991:22:1" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "403:7:1" + "src": "1015:7:1" } ], "functionName": { "name": "abi_decode_t_bool_fromMemory", "nodeType": "YulIdentifier", - "src": "350:28:1" + "src": "962:28:1" }, "nodeType": "YulFunctionCall", - "src": "350:61:1" + "src": "962:61:1" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "340:6:1" + "src": "952:6:1" } ] } @@ -297,13 +741,13 @@ { "name": "headStart", "nodeType": "YulTypedName", - "src": "194:9:1", + "src": "739:9:1", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "205:7:1", + "src": "750:7:1", "type": "" } ], @@ -311,64 +755,286 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "217:6:1", + "src": "762:6:1", "type": "" } ], - "src": "150:278:1" - }, + "src": "695:345:1" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506040516108ca3803806108ca83398181016040528101906100329190610080565b801561003d57600080fd5b506100ad565b600080fd5b60008115159050919050565b61005d81610048565b811461006857600080fd5b50565b60008151905061007a81610054565b92915050565b60006020828403121561009657610095610043565b5b60006100a48482850161006b565b91505092915050565b61080e806100bc6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063b582ec5f11610097578063e2179b8e11610066578063e2179b8e14610253578063e5aa3d5814610271578063f34f16101461028f578063ffae15ba146102ab57610100565b8063b582ec5f146101ef578063b8c9d3651461020d578063c3da42b81461022b578063cb30e6961461024957610100565b80635eaf9bc1116100d35780635eaf9bc11461018f5780636422847b146101995780638a054ac2146101b5578063a885f4e3146101d357610100565b80630dbe671f1461010557806313128fdc1461012357806326121ff0146101535780634df7e3d014610171575b600080fd5b61010d6102c9565b60405161011a919061057b565b60405180910390f35b61013d600480360381019061013891906105c7565b6102cf565b60405161014a919061057b565b60405180910390f35b61015b61034b565b604051610168919061057b565b60405180910390f35b610179610351565b604051610186919061057b565b60405180910390f35b610197610357565b005b6101b360048036038101906101ae91906105f4565b610359565b005b6101bd610398565b6040516101ca919061057b565b60405180910390f35b6101ed60048036038101906101e89190610692565b61039e565b005b6101f761045d565b604051610204919061057b565b60405180910390f35b610215610463565b604051610222919061057b565b60405180910390f35b610233610469565b604051610240919061057b565b60405180910390f35b61025161046f565b005b61025b610474565b604051610268919061057b565b60405180910390f35b61027961047a565b604051610286919061057b565b60405180910390f35b6102a960048036038101906102a491906106bf565b610480565b005b6102b361055c565b6040516102c0919061057b565b60405180910390f35b60005481565b60006001600081905550600180819055506001600281905550600160038190555060016004819055506001600581905550600160068190555060016007819055506001600881905550600160098190555060005b8260085410156103415760018161033a919061072e565b9050610323565b6001915050919050565b60055481565b60015481565b565b5b6000821461037857818255818061037090610784565b92505061035a565b5b6000811461039457808061038c90610784565b915050610379565b5050565b60035481565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b815260040160006040518083038186803b1580156103e457600080fd5b505afa1580156103f8573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b815260040160006040518083038186803b15801561044257600080fd5b505afa158015610456573d6000803e3d6000fd5b5050505050565b60095481565b60075481565b60025481565b600080fd5b60065481565b60085481565b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016104b991906107bd565b60006040518083038186803b1580156104d157600080fd5b505afa9250505080156104e2575060015b6104eb576104ec565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161052591906107bd565b60006040518083038186803b15801561053d57600080fd5b505afa92505050801561054e575060015b61055757610558565b5b5050565b60045481565b6000819050919050565b61057581610562565b82525050565b6000602082019050610590600083018461056c565b92915050565b600080fd5b6105a481610562565b81146105af57600080fd5b50565b6000813590506105c18161059b565b92915050565b6000602082840312156105dd576105dc610596565b5b60006105eb848285016105b2565b91505092915050565b6000806040838503121561060b5761060a610596565b5b6000610619858286016105b2565b925050602061062a858286016105b2565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061065f82610634565b9050919050565b61066f81610654565b811461067a57600080fd5b50565b60008135905061068c81610666565b92915050565b6000602082840312156106a8576106a7610596565b5b60006106b68482850161067d565b91505092915050565b600080604083850312156106d6576106d5610596565b5b60006106e48582860161067d565b92505060206106f58582860161067d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061073982610562565b915061074483610562565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610779576107786106ff565b5b828201905092915050565b600061078f82610562565b915060008214156107a3576107a26106ff565b5b600182039050919050565b6107b781610654565b82525050565b60006020820190506107d260008301846107ae565b9291505056fea2646970667358221220ef9f4c3f0eed8fc4db8a32f5d3348dff9017af9737329f0cba33ef02871c990764736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x8CA CODESIZE SUB DUP1 PUSH2 0x8CA DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x80 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAD JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x5D DUP2 PUSH2 0x48 JUMP JUMPDEST DUP2 EQ PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x7A DUP2 PUSH2 0x54 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x96 JUMPI PUSH2 0x95 PUSH2 0x43 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xA4 DUP5 DUP3 DUP6 ADD PUSH2 0x6B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x80E DUP1 PUSH2 0xBC PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB582EC5F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xE2179B8E GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xE2179B8E EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0xE5AA3D58 EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xFFAE15BA EQ PUSH2 0x2AB JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0xB582EC5F EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0xB8C9D365 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0xC3DA42B8 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x249 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x5EAF9BC1 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x18F JUMPI DUP1 PUSH4 0x6422847B EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0x8A054AC2 EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x1D3 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0xDBE671F EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x13128FDC EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x26121FF0 EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x4DF7E3D0 EQ PUSH2 0x171 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D PUSH2 0x2C9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x11A SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x138 SWAP2 SWAP1 PUSH2 0x5C7 JUMP JUMPDEST PUSH2 0x2CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14A SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x15B PUSH2 0x34B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x168 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x179 PUSH2 0x351 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x186 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x197 PUSH2 0x357 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1AE SWAP2 SWAP1 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x359 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BD PUSH2 0x398 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CA SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x692 JUMP JUMPDEST PUSH2 0x39E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F7 PUSH2 0x45D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x204 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x215 PUSH2 0x463 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x222 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x233 PUSH2 0x469 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x251 PUSH2 0x46F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25B PUSH2 0x474 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x279 PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x286 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2A4 SWAP2 SWAP1 PUSH2 0x6BF JUMP JUMPDEST PUSH2 0x480 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2B3 PUSH2 0x55C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2C0 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP1 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x5 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x7 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x8 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x9 DUP2 SWAP1 SSTORE POP PUSH1 0x0 JUMPDEST DUP3 PUSH1 0x8 SLOAD LT ISZERO PUSH2 0x341 JUMPI PUSH1 0x1 DUP2 PUSH2 0x33A SWAP2 SWAP1 PUSH2 0x72E JUMP JUMPDEST SWAP1 POP PUSH2 0x323 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 EQ PUSH2 0x378 JUMPI DUP2 DUP3 SSTORE DUP2 DUP1 PUSH2 0x370 SWAP1 PUSH2 0x784 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x35A JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP2 EQ PUSH2 0x394 JUMPI DUP1 DUP1 PUSH2 0x38C SWAP1 PUSH2 0x784 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x379 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x442 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x456 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4B9 SWAP2 SWAP1 PUSH2 0x7BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x4E2 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x4EB JUMPI PUSH2 0x4EC JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x525 SWAP2 SWAP1 PUSH2 0x7BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x54E JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x557 JUMPI PUSH2 0x558 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x575 DUP2 PUSH2 0x562 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x590 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x56C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A4 DUP2 PUSH2 0x562 JUMP JUMPDEST DUP2 EQ PUSH2 0x5AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5C1 DUP2 PUSH2 0x59B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5DD JUMPI PUSH2 0x5DC PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x5EB DUP5 DUP3 DUP6 ADD PUSH2 0x5B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x60B JUMPI PUSH2 0x60A PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x619 DUP6 DUP3 DUP7 ADD PUSH2 0x5B2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x62A DUP6 DUP3 DUP7 ADD PUSH2 0x5B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x65F DUP3 PUSH2 0x634 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x66F DUP2 PUSH2 0x654 JUMP JUMPDEST DUP2 EQ PUSH2 0x67A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x68C DUP2 PUSH2 0x666 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A8 JUMPI PUSH2 0x6A7 PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6B6 DUP5 DUP3 DUP6 ADD PUSH2 0x67D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6D6 JUMPI PUSH2 0x6D5 PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6E4 DUP6 DUP3 DUP7 ADD PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x6F5 DUP6 DUP3 DUP7 ADD PUSH2 0x67D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x739 DUP3 PUSH2 0x562 JUMP JUMPDEST SWAP2 POP PUSH2 0x744 DUP4 PUSH2 0x562 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x779 JUMPI PUSH2 0x778 PUSH2 0x6FF JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78F DUP3 PUSH2 0x562 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x7A3 JUMPI PUSH2 0x7A2 PUSH2 0x6FF JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 SUB SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7B7 DUP2 PUSH2 0x654 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x7D2 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x7AE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEF SWAP16 0x4C EXTCODEHASH 0xE 0xED DUP16 0xC4 0xDB DUP11 ORIGIN CREATE2 0xD3 CALLVALUE DUP14 SELFDESTRUCT SWAP1 OR 0xAF SWAP8 CALLDATACOPY ORIGIN SWAP16 0xC 0xBA CALLER 0xEF MUL DUP8 SHR SWAP10 SMOD PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:1507:0:-:0;;;94:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;140:13;136:52;;;169:8;;;136:52;94:100;67:1507;;88:117:1;197:1;194;187:12;334:90;368:7;411:5;404:13;397:21;386:32;;334:90;;;:::o;430:116::-;500:21;515:5;500:21;:::i;:::-;493:5;490:32;480:60;;536:1;533;526:12;480:60;430:116;:::o;552:137::-;606:5;637:6;631:13;622:22;;653:30;677:5;653:30;:::i;:::-;552:137;;;;:::o;695:345::-;762:6;811:2;799:9;790:7;786:23;782:32;779:119;;;817:79;;:::i;:::-;779:119;937:1;962:61;1015:7;1006:6;995:9;991:22;962:61;:::i;:::-;952:71;;908:125;695:345;;;;:::o;67:1507:0:-;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@a_99": { + "entryPoint": 713, + "id": 99, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@b_101": { + "entryPoint": 849, + "id": 101, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@c_103": { + "entryPoint": 1129, + "id": 103, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@call_ok_17": { + "entryPoint": 855, + "id": 17, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@call_revert_24": { + "entryPoint": 1135, + "id": 24, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@d_105": { + "entryPoint": 920, + "id": 105, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@e_107": { + "entryPoint": 1372, + "id": 107, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@f_109": { + "entryPoint": 843, + "id": 109, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@g_111": { + "entryPoint": 1140, + "id": 111, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@h_113": { + "entryPoint": 1123, + "id": 113, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@heavy_steps_97": { + "entryPoint": 857, + "id": 97, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@i_115": { + "entryPoint": 1146, + "id": 115, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@j_117": { + "entryPoint": 1117, + "id": 117, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@set_and_loop_180": { + "entryPoint": 719, + "id": 180, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@subcalls_54": { + "entryPoint": 1152, + "id": 54, + "parameterSlots": 2, + "returnSlots": 0 + }, + "@subsubcalls_72": { + "entryPoint": 926, + "id": 72, + "parameterSlots": 1, + "returnSlots": 0 + }, + "abi_decode_t_address": { + "entryPoint": 1661, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_t_uint256": { + "entryPoint": 1458, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_address": { + "entryPoint": 1682, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_addresst_address": { + "entryPoint": 1727, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": 1479, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256t_uint256": { + "entryPoint": 1524, + "id": null, + "parameterSlots": 2, + "returnSlots": 2 + }, + "abi_encode_t_address_to_t_address_fromStack": { + "entryPoint": 1966, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 1388, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { + "entryPoint": 1981, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 1403, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "checked_add_t_uint256": { + "entryPoint": 1838, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 1620, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 1588, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 1378, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "decrement_t_uint256": { + "entryPoint": 1924, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 1791, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 1430, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_address": { + "entryPoint": 1638, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 1435, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:4202:1", + "statements": [ { "body": { "nodeType": "YulBlock", - "src": "476:48:1", + "src": "52:32:1", "statements": [ { "nodeType": "YulAssignment", - "src": "486:32:1", + "src": "62:16:1", "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "511:5:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "504:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "504:13:1" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "497:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "497:21:1" + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:1" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "486:7:1" + "src": "62:7:1" } ] } ] }, - "name": "cleanup_t_bool", + "name": "cleanup_t_uint256", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "458:5:1", + "src": "34:5:1", "type": "" } ], @@ -376,162 +1042,109 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "468:7:1", + "src": "44:7:1", "type": "" } ], - "src": "434:90:1" + "src": "7:77:1" }, { "body": { "nodeType": "YulBlock", - "src": "570:76:1", + "src": "155:53:1", "statements": [ { - "body": { - "nodeType": "YulBlock", - "src": "624:16:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "633:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "636:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "626:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "626:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "626:12:1" - } - ] - }, - "condition": { + "expression": { "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:1" + }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "593:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "615:5:1" - } - ], - "functionName": { - "name": "cleanup_t_bool", - "nodeType": "YulIdentifier", - "src": "600:14:1" - }, - "nodeType": "YulFunctionCall", - "src": "600:21:1" + "src": "195:5:1" } ], "functionName": { - "name": "eq", + "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "590:2:1" + "src": "177:17:1" }, "nodeType": "YulFunctionCall", - "src": "590:32:1" + "src": "177:24:1" } ], "functionName": { - "name": "iszero", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "583:6:1" + "src": "165:6:1" }, "nodeType": "YulFunctionCall", - "src": "583:40:1" + "src": "165:37:1" }, - "nodeType": "YulIf", - "src": "580:2:1" + "nodeType": "YulExpressionStatement", + "src": "165:37:1" } ] }, - "name": "validator_revert_t_bool", + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "563:5:1", + "src": "143:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:1", "type": "" } ], - "src": "530:116:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b5060405161041d38038061041d83398181016040528101906100329190610058565b801561003d57600080fd5b506100a4565b6000815190506100528161008d565b92915050565b60006020828403121561006a57600080fd5b600061007884828501610043565b91505092915050565b60008115159050919050565b61009681610081565b81146100a157600080fd5b50565b61036a806100b36000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x41D CODESIZE SUB DUP1 PUSH2 0x41D DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0x58 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA4 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x52 DUP2 PUSH2 0x8D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x78 DUP5 DUP3 DUP6 ADD PUSH2 0x43 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x96 DUP2 PUSH2 0x81 JUMP JUMPDEST DUP2 EQ PUSH2 0xA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH2 0x36A DUP1 PUSH2 0xB3 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ", - "sourceMap": "34:671:0:-:0;;;65:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;115:13;111:60;;;148:8;;;111:60;65:116;34:671;;7:137:1;;92:6;86:13;77:22;;108:30;132:5;108:30;:::i;:::-;67:77;;;;:::o;150:278::-;;266:2;254:9;245:7;241:23;237:32;234:2;;;282:1;279;272:12;234:2;325:1;350:61;403:7;394:6;383:9;379:22;350:61;:::i;:::-;340:71;;296:125;224:204;;;;:::o;434:90::-;;511:5;504:13;497:21;486:32;;476:48;;;:::o;530:116::-;600:21;615:5;600:21;:::i;:::-;593:5;590:32;580:2;;636:1;633;626:12;580:2;570:76;:::o;34:671:0:-;;;;;;;" - }, - "deployedBytecode": { - "generatedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:1544:1", - "statements": [ + "src": "90:118:1" + }, { "body": { "nodeType": "YulBlock", - "src": "59:87:1", + "src": "312:124:1", "statements": [ { "nodeType": "YulAssignment", - "src": "69:29:1", + "src": "322:26:1", "value": { "arguments": [ { - "name": "offset", + "name": "headStart", "nodeType": "YulIdentifier", - "src": "91:6:1" + "src": "334:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:1", + "type": "", + "value": "32" } ], "functionName": { - "name": "calldataload", + "name": "add", "nodeType": "YulIdentifier", - "src": "78:12:1" + "src": "330:3:1" }, "nodeType": "YulFunctionCall", - "src": "78:20:1" + "src": "330:18:1" }, "variableNames": [ { - "name": "value", + "name": "tail", "nodeType": "YulIdentifier", - "src": "69:5:1" + "src": "322:4:1" } ] }, @@ -539,243 +1152,210 @@ "expression": { "arguments": [ { - "name": "value", + "name": "value0", "nodeType": "YulIdentifier", - "src": "134:5:1" + "src": "402:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:1" } ], "functionName": { - "name": "validator_revert_t_address", + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "107:26:1" + "src": "358:43:1" }, "nodeType": "YulFunctionCall", - "src": "107:33:1" + "src": "358:71:1" }, "nodeType": "YulExpressionStatement", - "src": "107:33:1" + "src": "358:71:1" } ] }, - "name": "abi_decode_t_address", + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", + "name": "headStart", "nodeType": "YulTypedName", - "src": "37:6:1", + "src": "284:9:1", "type": "" }, { - "name": "end", + "name": "value0", "nodeType": "YulTypedName", - "src": "45:3:1", + "src": "296:6:1", "type": "" } ], "returnVariables": [ { - "name": "value", + "name": "tail", "nodeType": "YulTypedName", - "src": "53:5:1", + "src": "307:4:1", "type": "" } ], - "src": "7:139:1" + "src": "214:222:1" }, { "body": { "nodeType": "YulBlock", - "src": "218:196:1", + "src": "482:35:1", "statements": [ { - "body": { - "nodeType": "YulBlock", - "src": "264:16:1", - "statements": [ + "nodeType": "YulAssignment", + "src": "492:19:1", + "value": { + "arguments": [ { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "273:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "276:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "266:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "266:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "266:12:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "508:2:1", + "type": "", + "value": "64" } - ] + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "502:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "502:9:1" }, - "condition": { + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "492:6:1" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "475:6:1", + "type": "" + } + ], + "src": "442:75:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "612:28:1", + "statements": [ + { + "expression": { "arguments": [ { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "239:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "248:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "235:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "235:23:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "629:1:1", + "type": "", + "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "260:2:1", + "src": "632:1:1", "type": "", - "value": "32" + "value": "0" } ], "functionName": { - "name": "slt", + "name": "revert", "nodeType": "YulIdentifier", - "src": "231:3:1" + "src": "622:6:1" }, "nodeType": "YulFunctionCall", - "src": "231:32:1" + "src": "622:12:1" }, - "nodeType": "YulIf", - "src": "228:2:1" - }, + "nodeType": "YulExpressionStatement", + "src": "622:12:1" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "523:117:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "735:28:1", + "statements": [ { - "nodeType": "YulBlock", - "src": "290:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "305:15:1", - "value": { + "expression": { + "arguments": [ + { "kind": "number", "nodeType": "YulLiteral", - "src": "319:1:1", + "src": "752:1:1", "type": "", "value": "0" }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "309:6:1", - "type": "" - } - ] + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "755:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "745:6:1" }, - { - "nodeType": "YulAssignment", - "src": "334:63:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "369:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "380:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "365:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "365:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "389:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_address", - "nodeType": "YulIdentifier", - "src": "344:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "344:53:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "334:6:1" - } - ] - } - ] + "nodeType": "YulFunctionCall", + "src": "745:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "745:12:1" } ] }, - "name": "abi_decode_tuple_t_address", + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "188:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "199:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "211:6:1", - "type": "" - } - ], - "src": "152:262:1" + "src": "646:117:1" }, { "body": { "nodeType": "YulBlock", - "src": "503:324:1", + "src": "812:79:1", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "549:16:1", + "src": "869:16:1", "statements": [ { "expression": { @@ -783,14 +1363,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "558:1:1", + "src": "878:1:1", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "561:1:1", + "src": "881:1:1", "type": "", "value": "0" } @@ -798,13 +1378,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "551:6:1" + "src": "871:6:1" }, "nodeType": "YulFunctionCall", - "src": "551:12:1" + "src": "871:12:1" }, "nodeType": "YulExpressionStatement", - "src": "551:12:1" + "src": "871:12:1" } ] }, @@ -813,142 +1393,235 @@ { "arguments": [ { - "name": "dataEnd", + "name": "value", "nodeType": "YulIdentifier", - "src": "524:7:1" + "src": "835:5:1" }, { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "533:9:1" + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "860:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "842:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "842:24:1" } ], "functionName": { - "name": "sub", + "name": "eq", "nodeType": "YulIdentifier", - "src": "520:3:1" + "src": "832:2:1" }, "nodeType": "YulFunctionCall", - "src": "520:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "545:2:1", - "type": "", - "value": "64" + "src": "832:35:1" } ], "functionName": { - "name": "slt", + "name": "iszero", "nodeType": "YulIdentifier", - "src": "516:3:1" + "src": "825:6:1" }, "nodeType": "YulFunctionCall", - "src": "516:32:1" + "src": "825:43:1" }, "nodeType": "YulIf", - "src": "513:2:1" - }, - { - "nodeType": "YulBlock", - "src": "575:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "590:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "604:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "594:6:1", - "type": "" - } - ] + "src": "822:63:1" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "805:5:1", + "type": "" + } + ], + "src": "769:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "949:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "959:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "981:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "968:12:1" }, + "nodeType": "YulFunctionCall", + "src": "968:20:1" + }, + "variableNames": [ { - "nodeType": "YulAssignment", - "src": "619:63:1", - "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "959:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1024:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "997:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "997:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "997:33:1" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "927:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "935:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "943:5:1", + "type": "" + } + ], + "src": "897:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1108:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1154:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1156:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "1156:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1156:79:1" + } + ] + }, + "condition": { + "arguments": [ + { "arguments": [ { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "654:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "665:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "650:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "650:22:1" + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1129:7:1" }, { - "name": "dataEnd", + "name": "headStart", "nodeType": "YulIdentifier", - "src": "674:7:1" + "src": "1138:9:1" } ], "functionName": { - "name": "abi_decode_t_address", + "name": "sub", "nodeType": "YulIdentifier", - "src": "629:20:1" + "src": "1125:3:1" }, "nodeType": "YulFunctionCall", - "src": "629:53:1" + "src": "1125:23:1" }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "619:6:1" - } - ] - } - ] + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1150:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1121:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1121:32:1" + }, + "nodeType": "YulIf", + "src": "1118:119:1" }, { "nodeType": "YulBlock", - "src": "702:118:1", + "src": "1247:117:1", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "717:16:1", + "src": "1262:15:1", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "731:2:1", + "src": "1276:1:1", "type": "", - "value": "32" + "value": "0" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "721:6:1", + "src": "1266:6:1", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "747:63:1", + "src": "1291:63:1", "value": { "arguments": [ { @@ -956,41 +1629,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "782:9:1" + "src": "1326:9:1" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "793:6:1" + "src": "1337:6:1" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "778:3:1" + "src": "1322:3:1" }, "nodeType": "YulFunctionCall", - "src": "778:22:1" + "src": "1322:22:1" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "802:7:1" + "src": "1346:7:1" } ], "functionName": { - "name": "abi_decode_t_address", + "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "757:20:1" + "src": "1301:20:1" }, "nodeType": "YulFunctionCall", - "src": "757:53:1" + "src": "1301:53:1" }, "variableNames": [ { - "name": "value1", + "name": "value0", "nodeType": "YulIdentifier", - "src": "747:6:1" + "src": "1291:6:1" } ] } @@ -998,19 +1671,19 @@ } ] }, - "name": "abi_decode_tuple_t_addresst_address", + "name": "abi_decode_tuple_t_uint256", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "465:9:1", + "src": "1078:9:1", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "476:7:1", + "src": "1089:7:1", "type": "" } ], @@ -1018,230 +1691,308 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "488:6:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "496:6:1", + "src": "1101:6:1", "type": "" } ], - "src": "420:407:1" + "src": "1042:329:1" }, { "body": { "nodeType": "YulBlock", - "src": "898:53:1", + "src": "1460:391:1", "statements": [ { - "expression": { - "arguments": [ + "body": { + "nodeType": "YulBlock", + "src": "1506:83:1", + "statements": [ { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "915:3:1" - }, + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1508:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "1508:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1508:79:1" + } + ] + }, + "condition": { + "arguments": [ { "arguments": [ { - "name": "value", + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1481:7:1" + }, + { + "name": "headStart", "nodeType": "YulIdentifier", - "src": "938:5:1" + "src": "1490:9:1" } ], "functionName": { - "name": "cleanup_t_address", + "name": "sub", "nodeType": "YulIdentifier", - "src": "920:17:1" + "src": "1477:3:1" }, "nodeType": "YulFunctionCall", - "src": "920:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "908:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "908:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "908:37:1" - } - ] - }, - "name": "abi_encode_t_address_to_t_address_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "886:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "893:3:1", - "type": "" - } - ], - "src": "833:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1055:124:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1065:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1077:9:1" + "src": "1477:23:1" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1088:2:1", + "src": "1502:2:1", "type": "", - "value": "32" + "value": "64" } ], "functionName": { - "name": "add", + "name": "slt", "nodeType": "YulIdentifier", - "src": "1073:3:1" + "src": "1473:3:1" }, "nodeType": "YulFunctionCall", - "src": "1073:18:1" + "src": "1473:32:1" }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1065:4:1" - } - ] + "nodeType": "YulIf", + "src": "1470:119:1" }, { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1145:6:1" + "nodeType": "YulBlock", + "src": "1599:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1614:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1628:1:1", + "type": "", + "value": "0" }, - { - "arguments": [ + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1618:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1643:63:1", + "value": { + "arguments": [ { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1158:9:1" + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1678:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1689:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1674:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1674:22:1" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1169:1:1", - "type": "", - "value": "0" + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1698:7:1" } ], "functionName": { - "name": "add", + "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "1154:3:1" + "src": "1653:20:1" }, "nodeType": "YulFunctionCall", - "src": "1154:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_address_to_t_address_fromStack", - "nodeType": "YulIdentifier", - "src": "1101:43:1" + "src": "1653:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1643:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "1726:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1741:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1755:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1745:6:1", + "type": "" + } + ] }, - "nodeType": "YulFunctionCall", - "src": "1101:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "1101:71:1" + { + "nodeType": "YulAssignment", + "src": "1771:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1806:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1817:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1802:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1802:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1826:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1781:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "1781:53:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1771:6:1" + } + ] + } + ] } ] }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "name": "abi_decode_tuple_t_uint256t_uint256", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "1027:9:1", + "src": "1422:9:1", "type": "" }, { - "name": "value0", + "name": "dataEnd", "nodeType": "YulTypedName", - "src": "1039:6:1", + "src": "1433:7:1", "type": "" } ], "returnVariables": [ { - "name": "tail", + "name": "value0", + "nodeType": "YulTypedName", + "src": "1445:6:1", + "type": "" + }, + { + "name": "value1", "nodeType": "YulTypedName", - "src": "1050:4:1", + "src": "1453:6:1", "type": "" } ], - "src": "957:222:1" + "src": "1377:474:1" }, { "body": { "nodeType": "YulBlock", - "src": "1230:51:1", + "src": "1902:81:1", "statements": [ { "nodeType": "YulAssignment", - "src": "1240:35:1", + "src": "1912:65:1", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1269:5:1" + "src": "1927:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1934:42:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" } ], "functionName": { - "name": "cleanup_t_uint160", + "name": "and", "nodeType": "YulIdentifier", - "src": "1251:17:1" + "src": "1923:3:1" }, "nodeType": "YulFunctionCall", - "src": "1251:24:1" + "src": "1923:54:1" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "1240:7:1" + "src": "1912:7:1" } ] } ] }, - "name": "cleanup_t_address", + "name": "cleanup_t_uint160", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "1212:5:1", + "src": "1884:5:1", "type": "" } ], @@ -1249,60 +2000,53 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "1222:7:1", + "src": "1894:7:1", "type": "" } ], - "src": "1185:96:1" + "src": "1857:126:1" }, { "body": { "nodeType": "YulBlock", - "src": "1332:81:1", + "src": "2034:51:1", "statements": [ { "nodeType": "YulAssignment", - "src": "1342:65:1", + "src": "2044:35:1", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1357:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1364:42:1", - "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" + "src": "2073:5:1" } ], "functionName": { - "name": "and", + "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "1353:3:1" + "src": "2055:17:1" }, "nodeType": "YulFunctionCall", - "src": "1353:54:1" + "src": "2055:24:1" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "1342:7:1" + "src": "2044:7:1" } ] } ] }, - "name": "cleanup_t_uint160", + "name": "cleanup_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "1314:5:1", + "src": "2016:5:1", "type": "" } ], @@ -1310,21 +2054,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "1324:7:1", + "src": "2026:7:1", "type": "" } ], - "src": "1287:126:1" + "src": "1989:96:1" }, { "body": { "nodeType": "YulBlock", - "src": "1462:79:1", + "src": "2134:79:1", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "1519:16:1", + "src": "2191:16:1", "statements": [ { "expression": { @@ -1332,14 +2076,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "1528:1:1", + "src": "2200:1:1", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1531:1:1", + "src": "2203:1:1", "type": "", "value": "0" } @@ -1347,13 +2091,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "1521:6:1" + "src": "2193:6:1" }, "nodeType": "YulFunctionCall", - "src": "1521:12:1" + "src": "2193:12:1" }, "nodeType": "YulExpressionStatement", - "src": "1521:12:1" + "src": "2193:12:1" } ] }, @@ -1364,44 +2108,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "1485:5:1" + "src": "2157:5:1" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1510:5:1" + "src": "2182:5:1" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "1492:17:1" + "src": "2164:17:1" }, "nodeType": "YulFunctionCall", - "src": "1492:24:1" + "src": "2164:24:1" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "1482:2:1" + "src": "2154:2:1" }, "nodeType": "YulFunctionCall", - "src": "1482:35:1" + "src": "2154:35:1" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "1475:6:1" + "src": "2147:6:1" }, "nodeType": "YulFunctionCall", - "src": "1475:43:1" + "src": "2147:43:1" }, "nodeType": "YulIf", - "src": "1472:2:1" + "src": "2144:63:1" } ] }, @@ -1411,2281 +2155,6495 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1455:5:1", + "src": "2127:5:1", "type": "" } ], - "src": "1419:122:1" - } - ] - }, - "contents": "{\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061004c5760003560e01c80635eaf9bc114610051578063a885f4e31461005b578063cb30e69614610077578063f34f161014610081575b600080fd5b61005961009d565b005b6100756004803603810190610070919061025c565b61009f565b005b61007f610162565b005b61009b60048036038101906100969190610285565b610167565b005b565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156100e757600080fd5b505af11580156100fb573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561014757600080fd5b505af115801561015b573d6000803e3d6000fd5b5050505050565b600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016101a091906102d0565b600060405180830381600087803b1580156101ba57600080fd5b505af19250505080156101cb575060015b6101d4576101d5565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161020e91906102d0565b600060405180830381600087803b15801561022857600080fd5b505af1925050508015610239575060015b61024257610243565b5b5050565b6000813590506102568161031d565b92915050565b60006020828403121561026e57600080fd5b600061027c84828501610247565b91505092915050565b6000806040838503121561029857600080fd5b60006102a685828601610247565b92505060206102b785828601610247565b9150509250929050565b6102ca816102eb565b82525050565b60006020820190506102e560008301846102c1565b92915050565b60006102f6826102fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610326816102eb565b811461033157600080fd5b5056fea26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x4C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x51 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x77 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x81 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x59 PUSH2 0x9D JUMP JUMPDEST STOP JUMPDEST PUSH2 0x75 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x70 SWAP2 SWAP1 PUSH2 0x25C JUMP JUMPDEST PUSH2 0x9F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x7F PUSH2 0x162 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9B PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x96 SWAP2 SWAP1 PUSH2 0x285 JUMP JUMPDEST PUSH2 0x167 JUMP JUMPDEST STOP JUMPDEST JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x147 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x15B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A0 SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x1CB JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x1D4 JUMPI PUSH2 0x1D5 JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x20E SWAP2 SWAP1 PUSH2 0x2D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x239 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x242 JUMPI PUSH2 0x243 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x256 DUP2 PUSH2 0x31D JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x27C DUP5 DUP3 DUP6 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x2A6 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x2B7 DUP6 DUP3 DUP7 ADD PUSH2 0x247 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x2CA DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x2E5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x2C1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F6 DUP3 PUSH2 0x2FD JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x326 DUP2 PUSH2 0x2EB JUMP JUMPDEST DUP2 EQ PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSTORE SWAP2 0xEB DUP12 0xAA 0x23 0xBD PUSH9 0xE06CED1A0BB4490E23 ORIGIN PUSH28 0x9D4862ABA762C124C73AE04A9764736F6C6343000803003300000000 ", - "sourceMap": "34:671:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;195:29;;;:::i;:::-;;551:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;238:71;;;:::i;:::-;;323:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;195:29;:::o;551:148::-;622:7;610:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;666:7;654:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:148;:::o;238:71::-;282:8;;;323:214;412:7;400:32;;;433:7;400:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;396:59;;;;;;484:7;472:32;;;505:7;472:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;468:59;;;;;;323:214;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:262::-;;260:2;248:9;239:7;235:23;231:32;228:2;;;276:1;273;266:12;228:2;319:1;344:53;389:7;380:6;369:9;365:22;344:53;:::i;:::-;334:63;;290:117;218:196;;;;:::o;420:407::-;;;545:2;533:9;524:7;520:23;516:32;513:2;;;561:1;558;551:12;513:2;604:1;629:53;674:7;665:6;654:9;650:22;629:53;:::i;:::-;619:63;;575:117;731:2;757:53;802:7;793:6;782:9;778:22;757:53;:::i;:::-;747:63;;702:118;503:324;;;;;:::o;833:118::-;920:24;938:5;920:24;:::i;:::-;915:3;908:37;898:53;;:::o;957:222::-;;1088:2;1077:9;1073:18;1065:26;;1101:71;1169:1;1158:9;1154:17;1145:6;1101:71;:::i;:::-;1055:124;;;;:::o;1185:96::-;;1251:24;1269:5;1251:24;:::i;:::-;1240:35;;1230:51;;;:::o;1287:126::-;;1364:42;1357:5;1353:54;1342:65;;1332:81;;;:::o;1419:122::-;1492:24;1510:5;1492:24;:::i;:::-;1485:5;1482:35;1472:2;;1531:1;1528;1521:12;1472:2;1462:79;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "174800", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "call_ok()": "122", - "call_revert()": "163", - "subcalls(address,address)": "infinite", - "subsubcalls(address)": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 34, - "end": 705, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 34, - "end": 705, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 34, "end": 705, "name": "MSTORE", "source": 0 }, - { "begin": 65, "end": 181, "name": "CALLVALUE", "source": 0 }, - { "begin": 65, "end": 181, "name": "DUP1", "source": 0 }, - { "begin": 65, "end": 181, "name": "ISZERO", "source": 0 }, - { - "begin": 65, - "end": 181, - "name": "PUSH [tag]", - "source": 0, - "value": "1" - }, - { "begin": 65, "end": 181, "name": "JUMPI", "source": 0 }, - { - "begin": 65, - "end": 181, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 65, "end": 181, "name": "DUP1", "source": 0 }, - { "begin": 65, "end": 181, "name": "REVERT", "source": 0 }, - { "begin": 65, "end": 181, "name": "tag", "source": 0, "value": "1" }, - { "begin": 65, "end": 181, "name": "JUMPDEST", "source": 0 }, - { "begin": 65, "end": 181, "name": "POP", "source": 0 }, - { - "begin": 65, - "end": 181, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 65, "end": 181, "name": "MLOAD", "source": 0 }, - { "begin": 65, "end": 181, "name": "PUSHSIZE", "source": 0 }, - { "begin": 65, "end": 181, "name": "CODESIZE", "source": 0 }, - { "begin": 65, "end": 181, "name": "SUB", "source": 0 }, - { "begin": 65, "end": 181, "name": "DUP1", "source": 0 }, - { "begin": 65, "end": 181, "name": "PUSHSIZE", "source": 0 }, - { "begin": 65, "end": 181, "name": "DUP4", "source": 0 }, - { "begin": 65, "end": 181, "name": "CODECOPY", "source": 0 }, - { "begin": 65, "end": 181, "name": "DUP2", "source": 0 }, - { "begin": 65, "end": 181, "name": "DUP2", "source": 0 }, - { "begin": 65, "end": 181, "name": "ADD", "source": 0 }, - { - "begin": 65, - "end": 181, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 65, "end": 181, "name": "MSTORE", "source": 0 }, - { "begin": 65, "end": 181, "name": "DUP2", "source": 0 }, - { "begin": 65, "end": 181, "name": "ADD", "source": 0 }, - { "begin": 65, "end": 181, "name": "SWAP1", "source": 0 }, - { - "begin": 65, - "end": 181, - "name": "PUSH [tag]", - "source": 0, - "value": "2" - }, - { "begin": 65, "end": 181, "name": "SWAP2", "source": 0 }, - { "begin": 65, "end": 181, "name": "SWAP1", "source": 0 }, - { - "begin": 65, - "end": 181, - "name": "PUSH [tag]", - "source": 0, - "value": "3" - }, - { - "begin": 65, - "end": 181, - "name": "JUMP", - "source": 0, - "value": "[in]" - }, - { "begin": 65, "end": 181, "name": "tag", "source": 0, "value": "2" }, - { "begin": 65, "end": 181, "name": "JUMPDEST", "source": 0 }, - { "begin": 115, "end": 128, "name": "DUP1", "source": 0 }, - { "begin": 111, "end": 171, "name": "ISZERO", "source": 0 }, - { - "begin": 111, - "end": 171, - "name": "PUSH [tag]", - "source": 0, - "value": "6" - }, - { "begin": 111, "end": 171, "name": "JUMPI", "source": 0 }, - { - "begin": 148, - "end": 156, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 148, "end": 156, "name": "DUP1", "source": 0 }, - { "begin": 148, "end": 156, "name": "REVERT", "source": 0 }, - { - "begin": 111, - "end": 171, - "name": "tag", - "source": 0, - "value": "6" - }, - { "begin": 111, "end": 171, "name": "JUMPDEST", "source": 0 }, - { "begin": 65, "end": 181, "name": "POP", "source": 0 }, - { - "begin": 34, - "end": 705, - "name": "PUSH [tag]", - "source": 0, - "value": "7" - }, - { "begin": 34, "end": 705, "name": "JUMP", "source": 0 }, - { "begin": 7, "end": 144, "name": "tag", "source": 1, "value": "9" }, - { "begin": 7, "end": 144, "name": "JUMPDEST", "source": 1 }, - { "begin": 7, "end": 144, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 92, "end": 98, "name": "DUP2", "source": 1 }, - { "begin": 86, "end": 99, "name": "MLOAD", "source": 1 }, - { "begin": 77, "end": 99, "name": "SWAP1", "source": 1 }, - { "begin": 77, "end": 99, "name": "POP", "source": 1 }, - { - "begin": 108, - "end": 138, - "name": "PUSH [tag]", - "source": 1, - "value": "11" - }, - { "begin": 132, "end": 137, "name": "DUP2", "source": 1 }, - { - "begin": 108, - "end": 138, - "name": "PUSH [tag]", - "source": 1, - "value": "12" - }, - { - "begin": 108, - "end": 138, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 108, - "end": 138, - "name": "tag", - "source": 1, - "value": "11" - }, - { "begin": 108, "end": 138, "name": "JUMPDEST", "source": 1 }, - { "begin": 67, "end": 144, "name": "SWAP3", "source": 1 }, - { "begin": 67, "end": 144, "name": "SWAP2", "source": 1 }, - { "begin": 67, "end": 144, "name": "POP", "source": 1 }, - { "begin": 67, "end": 144, "name": "POP", "source": 1 }, - { - "begin": 67, - "end": 144, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 150, - "end": 428, - "name": "tag", - "source": 1, + "src": "2091:122:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2271:87:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2281:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2303:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "2290:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "2290:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2281:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2346:5:1" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "2319:26:1" + }, + "nodeType": "YulFunctionCall", + "src": "2319:33:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2319:33:1" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2249:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2257:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2265:5:1", + "type": "" + } + ], + "src": "2219:139:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2430:263:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2476:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "2478:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "2478:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2478:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2451:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2460:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2447:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2447:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2472:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2443:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2443:32:1" + }, + "nodeType": "YulIf", + "src": "2440:119:1" + }, + { + "nodeType": "YulBlock", + "src": "2569:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2584:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2598:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2588:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2613:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2648:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2659:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2644:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2644:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2668:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "2623:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "2623:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2613:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2400:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "2411:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2423:6:1", + "type": "" + } + ], + "src": "2364:329:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2782:391:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2828:83:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "2830:77:1" + }, + "nodeType": "YulFunctionCall", + "src": "2830:79:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2830:79:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2803:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2812:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2799:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2799:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2824:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2795:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2795:32:1" + }, + "nodeType": "YulIf", + "src": "2792:119:1" + }, + { + "nodeType": "YulBlock", + "src": "2921:117:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2936:15:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2950:1:1", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2940:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2965:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3000:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3011:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2996:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2996:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "3020:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "2975:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "2975:53:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2965:6:1" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "3048:118:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "3063:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3077:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3067:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3093:63:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3128:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3139:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3124:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3124:22:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "3148:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "3103:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "3103:53:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "3093:6:1" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2744:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "2755:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2767:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "2775:6:1", + "type": "" + } + ], + "src": "2699:474:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3207:152:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3224:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3227:77:1", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3217:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3217:88:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3217:88:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3321:1:1", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3324:4:1", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3314:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3314:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3314:15:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3345:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3348:4:1", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3338:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3338:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3338:15:1" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "3179:180:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3409:261:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3419:25:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "3442:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "3424:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "3424:20:1" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "3419:1:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3453:25:1", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "3476:1:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "3458:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "3458:20:1" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "3453:1:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3616:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "3618:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "3618:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3618:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "3537:1:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3544:66:1", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "3612:1:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3540:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3540:74:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3534:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3534:81:1" + }, + "nodeType": "YulIf", + "src": "3531:107:1" + }, + { + "nodeType": "YulAssignment", + "src": "3648:16:1", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "3659:1:1" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "3662:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3655:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3655:9:1" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "3648:3:1" + } + ] + } + ] + }, + "name": "checked_add_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "3396:1:1", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "3399:1:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "3405:3:1", + "type": "" + } + ], + "src": "3365:305:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3719:128:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3729:33:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3756:5:1" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "3738:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "3738:24:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3729:5:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3790:22:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "3792:16:1" + }, + "nodeType": "YulFunctionCall", + "src": "3792:18:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3792:18:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3777:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3784:4:1", + "type": "", + "value": "0x00" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "3774:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3774:15:1" + }, + "nodeType": "YulIf", + "src": "3771:41:1" + }, + { + "nodeType": "YulAssignment", + "src": "3821:20:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3832:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3839:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3828:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3828:13:1" + }, + "variableNames": [ + { + "name": "ret", + "nodeType": "YulIdentifier", + "src": "3821:3:1" + } + ] + } + ] + }, + "name": "decrement_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3705:5:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nodeType": "YulTypedName", + "src": "3715:3:1", + "type": "" + } + ], + "src": "3676:171:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3918:53:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "3935:3:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3958:5:1" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "3940:17:1" + }, + "nodeType": "YulFunctionCall", + "src": "3940:24:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3928:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3928:37:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3928:37:1" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3906:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "3913:3:1", + "type": "" + } + ], + "src": "3853:118:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4075:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4085:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4097:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4108:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4093:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4093:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "4085:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4165:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4178:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4189:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4174:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4174:17:1" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "4121:43:1" + }, + "nodeType": "YulFunctionCall", + "src": "4121:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4121:71:1" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "4047:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "4059:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "4070:4:1", + "type": "" + } + ], + "src": "3977:222:1" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_uint256(x, y) -> sum {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n\n // overflow, if x > (maxValue - y)\n if gt(x, sub(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y)) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function decrement_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0x00) { panic_error_0x11() }\n ret := sub(value, 1)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n}\n", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101005760003560e01c8063b582ec5f11610097578063e2179b8e11610066578063e2179b8e14610253578063e5aa3d5814610271578063f34f16101461028f578063ffae15ba146102ab57610100565b8063b582ec5f146101ef578063b8c9d3651461020d578063c3da42b81461022b578063cb30e6961461024957610100565b80635eaf9bc1116100d35780635eaf9bc11461018f5780636422847b146101995780638a054ac2146101b5578063a885f4e3146101d357610100565b80630dbe671f1461010557806313128fdc1461012357806326121ff0146101535780634df7e3d014610171575b600080fd5b61010d6102c9565b60405161011a919061057b565b60405180910390f35b61013d600480360381019061013891906105c7565b6102cf565b60405161014a919061057b565b60405180910390f35b61015b61034b565b604051610168919061057b565b60405180910390f35b610179610351565b604051610186919061057b565b60405180910390f35b610197610357565b005b6101b360048036038101906101ae91906105f4565b610359565b005b6101bd610398565b6040516101ca919061057b565b60405180910390f35b6101ed60048036038101906101e89190610692565b61039e565b005b6101f761045d565b604051610204919061057b565b60405180910390f35b610215610463565b604051610222919061057b565b60405180910390f35b610233610469565b604051610240919061057b565b60405180910390f35b61025161046f565b005b61025b610474565b604051610268919061057b565b60405180910390f35b61027961047a565b604051610286919061057b565b60405180910390f35b6102a960048036038101906102a491906106bf565b610480565b005b6102b361055c565b6040516102c0919061057b565b60405180910390f35b60005481565b60006001600081905550600180819055506001600281905550600160038190555060016004819055506001600581905550600160068190555060016007819055506001600881905550600160098190555060005b8260085410156103415760018161033a919061072e565b9050610323565b6001915050919050565b60055481565b60015481565b565b5b6000821461037857818255818061037090610784565b92505061035a565b5b6000811461039457808061038c90610784565b915050610379565b5050565b60035481565b8073ffffffffffffffffffffffffffffffffffffffff16635eaf9bc16040518163ffffffff1660e01b815260040160006040518083038186803b1580156103e457600080fd5b505afa1580156103f8573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663cb30e6966040518163ffffffff1660e01b815260040160006040518083038186803b15801561044257600080fd5b505afa158015610456573d6000803e3d6000fd5b5050505050565b60095481565b60075481565b60025481565b600080fd5b60065481565b60085481565b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b81526004016104b991906107bd565b60006040518083038186803b1580156104d157600080fd5b505afa9250505080156104e2575060015b6104eb576104ec565b5b8173ffffffffffffffffffffffffffffffffffffffff1663a885f4e3826040518263ffffffff1660e01b815260040161052591906107bd565b60006040518083038186803b15801561053d57600080fd5b505afa92505050801561054e575060015b61055757610558565b5b5050565b60045481565b6000819050919050565b61057581610562565b82525050565b6000602082019050610590600083018461056c565b92915050565b600080fd5b6105a481610562565b81146105af57600080fd5b50565b6000813590506105c18161059b565b92915050565b6000602082840312156105dd576105dc610596565b5b60006105eb848285016105b2565b91505092915050565b6000806040838503121561060b5761060a610596565b5b6000610619858286016105b2565b925050602061062a858286016105b2565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061065f82610634565b9050919050565b61066f81610654565b811461067a57600080fd5b50565b60008135905061068c81610666565b92915050565b6000602082840312156106a8576106a7610596565b5b60006106b68482850161067d565b91505092915050565b600080604083850312156106d6576106d5610596565b5b60006106e48582860161067d565b92505060206106f58582860161067d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061073982610562565b915061074483610562565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610779576107786106ff565b5b828201905092915050565b600061078f82610562565b915060008214156107a3576107a26106ff565b5b600182039050919050565b6107b781610654565b82525050565b60006020820190506107d260008301846107ae565b9291505056fea2646970667358221220ef9f4c3f0eed8fc4db8a32f5d3348dff9017af9737329f0cba33ef02871c990764736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB582EC5F GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xE2179B8E GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xE2179B8E EQ PUSH2 0x253 JUMPI DUP1 PUSH4 0xE5AA3D58 EQ PUSH2 0x271 JUMPI DUP1 PUSH4 0xF34F1610 EQ PUSH2 0x28F JUMPI DUP1 PUSH4 0xFFAE15BA EQ PUSH2 0x2AB JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0xB582EC5F EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0xB8C9D365 EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0xC3DA42B8 EQ PUSH2 0x22B JUMPI DUP1 PUSH4 0xCB30E696 EQ PUSH2 0x249 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x5EAF9BC1 GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x5EAF9BC1 EQ PUSH2 0x18F JUMPI DUP1 PUSH4 0x6422847B EQ PUSH2 0x199 JUMPI DUP1 PUSH4 0x8A054AC2 EQ PUSH2 0x1B5 JUMPI DUP1 PUSH4 0xA885F4E3 EQ PUSH2 0x1D3 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0xDBE671F EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x13128FDC EQ PUSH2 0x123 JUMPI DUP1 PUSH4 0x26121FF0 EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x4DF7E3D0 EQ PUSH2 0x171 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x10D PUSH2 0x2C9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x11A SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x13D PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x138 SWAP2 SWAP1 PUSH2 0x5C7 JUMP JUMPDEST PUSH2 0x2CF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x14A SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x15B PUSH2 0x34B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x168 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x179 PUSH2 0x351 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x186 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x197 PUSH2 0x357 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1B3 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1AE SWAP2 SWAP1 PUSH2 0x5F4 JUMP JUMPDEST PUSH2 0x359 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1BD PUSH2 0x398 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CA SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1ED PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1E8 SWAP2 SWAP1 PUSH2 0x692 JUMP JUMPDEST PUSH2 0x39E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F7 PUSH2 0x45D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x204 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x215 PUSH2 0x463 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x222 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x233 PUSH2 0x469 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x240 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x251 PUSH2 0x46F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x25B PUSH2 0x474 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x268 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x279 PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x286 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x2A9 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x2A4 SWAP2 SWAP1 PUSH2 0x6BF JUMP JUMPDEST PUSH2 0x480 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x2B3 PUSH2 0x55C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2C0 SWAP2 SWAP1 PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP PUSH1 0x1 DUP1 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x2 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x4 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x5 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x6 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x7 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x8 DUP2 SWAP1 SSTORE POP PUSH1 0x1 PUSH1 0x9 DUP2 SWAP1 SSTORE POP PUSH1 0x0 JUMPDEST DUP3 PUSH1 0x8 SLOAD LT ISZERO PUSH2 0x341 JUMPI PUSH1 0x1 DUP2 PUSH2 0x33A SWAP2 SWAP1 PUSH2 0x72E JUMP JUMPDEST SWAP1 POP PUSH2 0x323 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x5 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 JUMP JUMPDEST JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 EQ PUSH2 0x378 JUMPI DUP2 DUP3 SSTORE DUP2 DUP1 PUSH2 0x370 SWAP1 PUSH2 0x784 JUMP JUMPDEST SWAP3 POP POP PUSH2 0x35A JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP2 EQ PUSH2 0x394 JUMPI DUP1 DUP1 PUSH2 0x38C SWAP1 PUSH2 0x784 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x379 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x5EAF9BC1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3F8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB30E696 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x442 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x456 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4B9 SWAP2 SWAP1 PUSH2 0x7BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x4E2 JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x4EB JUMPI PUSH2 0x4EC JUMP JUMPDEST JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA885F4E3 DUP3 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x525 SWAP2 SWAP1 PUSH2 0x7BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x53D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x54E JUMPI POP PUSH1 0x1 JUMPDEST PUSH2 0x557 JUMPI PUSH2 0x558 JUMP JUMPDEST JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x4 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x575 DUP2 PUSH2 0x562 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x590 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x56C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5A4 DUP2 PUSH2 0x562 JUMP JUMPDEST DUP2 EQ PUSH2 0x5AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5C1 DUP2 PUSH2 0x59B JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5DD JUMPI PUSH2 0x5DC PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x5EB DUP5 DUP3 DUP6 ADD PUSH2 0x5B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x60B JUMPI PUSH2 0x60A PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x619 DUP6 DUP3 DUP7 ADD PUSH2 0x5B2 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x62A DUP6 DUP3 DUP7 ADD PUSH2 0x5B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x65F DUP3 PUSH2 0x634 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x66F DUP2 PUSH2 0x654 JUMP JUMPDEST DUP2 EQ PUSH2 0x67A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x68C DUP2 PUSH2 0x666 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x6A8 JUMPI PUSH2 0x6A7 PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6B6 DUP5 DUP3 DUP6 ADD PUSH2 0x67D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x6D6 JUMPI PUSH2 0x6D5 PUSH2 0x596 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x6E4 DUP6 DUP3 DUP7 ADD PUSH2 0x67D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x6F5 DUP6 DUP3 DUP7 ADD PUSH2 0x67D JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x739 DUP3 PUSH2 0x562 JUMP JUMPDEST SWAP2 POP PUSH2 0x744 DUP4 PUSH2 0x562 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP3 GT ISZERO PUSH2 0x779 JUMPI PUSH2 0x778 PUSH2 0x6FF JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78F DUP3 PUSH2 0x562 JUMP JUMPDEST SWAP2 POP PUSH1 0x0 DUP3 EQ ISZERO PUSH2 0x7A3 JUMPI PUSH2 0x7A2 PUSH2 0x6FF JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 SUB SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7B7 DUP2 PUSH2 0x654 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x7D2 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x7AE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEF SWAP16 0x4C EXTCODEHASH 0xE 0xED DUP16 0xC4 0xDB DUP11 ORIGIN CREATE2 0xD3 CALLVALUE DUP14 SELFDESTRUCT SWAP1 OR 0xAF SWAP8 CALLDATACOPY ORIGIN SWAP16 0xC 0xBA CALLER 0xEF MUL DUP8 SHR SWAP10 SMOD PUSH5 0x736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "67:1507:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1018:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1239:333;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1128:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1040;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;200:33;;;:::i;:::-;;661:301;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1084:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;514:141;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1216:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1172;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1062;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;239:60;;;:::i;:::-;;1150:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1194;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;305:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1106:16;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1018;;;;:::o;1239:333::-;1292:14;1322:1;1318;:5;;;;1337:1;1333;:5;;;;1352:1;1348;:5;;;;1367:1;1363;:5;;;;1382:1;1378;:5;;;;1397:1;1393;:5;;;;1412:1;1408;:5;;;;1427:1;1423;:5;;;;1442:1;1438;:5;;;;1457:1;1453;:5;;;;1468:13;1495:53;1506:5;1502:1;;:9;1495:53;;;1536:1;1527:10;;;;;:::i;:::-;;;1495:53;;;1564:1;1557:8;;;1239:333;;;:::o;1128:16::-;;;;:::o;1040:::-;;;;:::o;200:33::-;:::o;661:301::-;740:149;762:1;747:11;:16;740:149;;826:11;813;806:32;865:13;;;;;:::i;:::-;;;;740:149;;;899:57;918:1;906:8;:13;899:57;;935:10;;;;;:::i;:::-;;;;899:57;;;661:301;;:::o;1084:16::-;;;;:::o;514:141::-;586:7;574:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;626:7;614:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;514:141;:::o;1216:16::-;;;;:::o;1172:::-;;;;:::o;1062:::-;;;;:::o;239:60::-;284:8;;;1150:16;;;;:::o;1194:::-;;;;:::o;305:203::-;395:7;383:32;;;416:7;383:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;379:57;;;;;;461:7;449:32;;;482:7;449:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;445:57;;;;;;305:203;;:::o;1106:16::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:474::-;1445:6;1453;1502:2;1490:9;1481:7;1477:23;1473:32;1470:119;;;1508:79;;:::i;:::-;1470:119;1628:1;1653:53;1698:7;1689:6;1678:9;1674:22;1653:53;:::i;:::-;1643:63;;1599:117;1755:2;1781:53;1826:7;1817:6;1806:9;1802:22;1781:53;:::i;:::-;1771:63;;1726:118;1377:474;;;;;:::o;1857:126::-;1894:7;1934:42;1927:5;1923:54;1912:65;;1857:126;;;:::o;1989:96::-;2026:7;2055:24;2073:5;2055:24;:::i;:::-;2044:35;;1989:96;;;:::o;2091:122::-;2164:24;2182:5;2164:24;:::i;:::-;2157:5;2154:35;2144:63;;2203:1;2200;2193:12;2144:63;2091:122;:::o;2219:139::-;2265:5;2303:6;2290:20;2281:29;;2319:33;2346:5;2319:33;:::i;:::-;2219:139;;;;:::o;2364:329::-;2423:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:119;;;2478:79;;:::i;:::-;2440:119;2598:1;2623:53;2668:7;2659:6;2648:9;2644:22;2623:53;:::i;:::-;2613:63;;2569:117;2364:329;;;;:::o;2699:474::-;2767:6;2775;2824:2;2812:9;2803:7;2799:23;2795:32;2792:119;;;2830:79;;:::i;:::-;2792:119;2950:1;2975:53;3020:7;3011:6;3000:9;2996:22;2975:53;:::i;:::-;2965:63;;2921:117;3077:2;3103:53;3148:7;3139:6;3128:9;3124:22;3103:53;:::i;:::-;3093:63;;3048:118;2699:474;;;;;:::o;3179:180::-;3227:77;3224:1;3217:88;3324:4;3321:1;3314:15;3348:4;3345:1;3338:15;3365:305;3405:3;3424:20;3442:1;3424:20;:::i;:::-;3419:25;;3458:20;3476:1;3458:20;:::i;:::-;3453:25;;3612:1;3544:66;3540:74;3537:1;3534:81;3531:107;;;3618:18;;:::i;:::-;3531:107;3662:1;3659;3655:9;3648:16;;3365:305;;;;:::o;3676:171::-;3715:3;3738:24;3756:5;3738:24;:::i;:::-;3729:33;;3784:4;3777:5;3774:15;3771:41;;;3792:18;;:::i;:::-;3771:41;3839:1;3832:5;3828:13;3821:20;;3676:171;;;:::o;3853:118::-;3940:24;3958:5;3940:24;:::i;:::-;3935:3;3928:37;3853:118;;:::o;3977:222::-;4070:4;4108:2;4097:9;4093:18;4085:26;;4121:71;4189:1;4178:9;4174:17;4165:6;4121:71;:::i;:::-;3977:222;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "412400", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "a()": "2453", + "b()": "2519", + "c()": "2496", + "call_ok()": "167", + "call_revert()": "230", + "d()": "2496", + "e()": "2517", + "f()": "2497", + "g()": "2451", + "h()": "2474", + "heavy_steps(uint256,uint256)": "infinite", + "i()": "2473", + "j()": "2452", + "set_and_loop(uint256)": "infinite", + "subcalls(address,address)": "infinite", + "subsubcalls(address)": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 1574, "name": "MSTORE", "source": 0 }, + { "begin": 94, "end": 194, "name": "CALLVALUE", "source": 0 }, + { "begin": 94, "end": 194, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 194, "name": "ISZERO", "source": 0 }, + { + "begin": 94, + "end": 194, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 94, "end": 194, "name": "JUMPI", "source": 0 }, + { + "begin": 94, + "end": 194, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 94, "end": 194, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 194, "name": "REVERT", "source": 0 }, + { "begin": 94, "end": 194, "name": "tag", "source": 0, "value": "1" }, + { "begin": 94, "end": 194, "name": "JUMPDEST", "source": 0 }, + { "begin": 94, "end": 194, "name": "POP", "source": 0 }, + { + "begin": 94, + "end": 194, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 194, "name": "MLOAD", "source": 0 }, + { "begin": 94, "end": 194, "name": "PUSHSIZE", "source": 0 }, + { "begin": 94, "end": 194, "name": "CODESIZE", "source": 0 }, + { "begin": 94, "end": 194, "name": "SUB", "source": 0 }, + { "begin": 94, "end": 194, "name": "DUP1", "source": 0 }, + { "begin": 94, "end": 194, "name": "PUSHSIZE", "source": 0 }, + { "begin": 94, "end": 194, "name": "DUP4", "source": 0 }, + { "begin": 94, "end": 194, "name": "CODECOPY", "source": 0 }, + { "begin": 94, "end": 194, "name": "DUP2", "source": 0 }, + { "begin": 94, "end": 194, "name": "DUP2", "source": 0 }, + { "begin": 94, "end": 194, "name": "ADD", "source": 0 }, + { + "begin": 94, + "end": 194, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 94, "end": 194, "name": "MSTORE", "source": 0 }, + { "begin": 94, "end": 194, "name": "DUP2", "source": 0 }, + { "begin": 94, "end": 194, "name": "ADD", "source": 0 }, + { "begin": 94, "end": 194, "name": "SWAP1", "source": 0 }, + { + "begin": 94, + "end": 194, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 94, "end": 194, "name": "SWAP2", "source": 0 }, + { "begin": 94, "end": 194, "name": "SWAP1", "source": 0 }, + { + "begin": 94, + "end": 194, + "name": "PUSH [tag]", + "source": 0, "value": "3" }, - { "begin": 150, "end": 428, "name": "JUMPDEST", "source": 1 }, { - "begin": 150, - "end": 428, + "begin": 94, + "end": 194, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { "begin": 94, "end": 194, "name": "tag", "source": 0, "value": "2" }, + { "begin": 94, "end": 194, "name": "JUMPDEST", "source": 0 }, + { "begin": 140, "end": 153, "name": "DUP1", "source": 0 }, + { "begin": 136, "end": 188, "name": "ISZERO", "source": 0 }, + { + "begin": 136, + "end": 188, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 136, "end": 188, "name": "JUMPI", "source": 0 }, + { + "begin": 169, + "end": 177, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 169, "end": 177, "name": "DUP1", "source": 0 }, + { "begin": 169, "end": 177, "name": "REVERT", "source": 0 }, + { + "begin": 136, + "end": 188, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 136, "end": 188, "name": "JUMPDEST", "source": 0 }, + { "begin": 94, "end": 194, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 67, "end": 1574, "name": "JUMP", "source": 0 }, + { "begin": 88, "end": 205, "name": "tag", "source": 1, "value": "9" }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { + "begin": 197, + "end": 198, "name": "PUSH", "source": 1, "value": "0" }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, { - "begin": 266, - "end": 268, + "begin": 334, + "end": 424, + "name": "tag", + "source": 1, + "value": "11" + }, + { "begin": 334, "end": 424, "name": "JUMPDEST", "source": 1 }, + { + "begin": 368, + "end": 375, "name": "PUSH", "source": 1, + "value": "0" + }, + { "begin": 411, "end": 416, "name": "DUP2", "source": 1 }, + { "begin": 404, "end": 417, "name": "ISZERO", "source": 1 }, + { "begin": 397, "end": 418, "name": "ISZERO", "source": 1 }, + { "begin": 386, "end": 418, "name": "SWAP1", "source": 1 }, + { "begin": 386, "end": 418, "name": "POP", "source": 1 }, + { "begin": 334, "end": 424, "name": "SWAP2", "source": 1 }, + { "begin": 334, "end": 424, "name": "SWAP1", "source": 1 }, + { "begin": 334, "end": 424, "name": "POP", "source": 1 }, + { + "begin": 334, + "end": 424, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 430, + "end": 546, + "name": "tag", + "source": 1, + "value": "12" + }, + { "begin": 430, "end": 546, "name": "JUMPDEST", "source": 1 }, + { + "begin": 500, + "end": 521, + "name": "PUSH [tag]", + "source": 1, + "value": "20" + }, + { "begin": 515, "end": 520, "name": "DUP2", "source": 1 }, + { + "begin": 500, + "end": 521, + "name": "PUSH [tag]", + "source": 1, + "value": "11" + }, + { + "begin": 500, + "end": 521, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 500, + "end": 521, + "name": "tag", + "source": 1, "value": "20" }, - { "begin": 254, "end": 263, "name": "DUP3", "source": 1 }, - { "begin": 245, "end": 252, "name": "DUP5", "source": 1 }, - { "begin": 241, "end": 264, "name": "SUB", "source": 1 }, - { "begin": 237, "end": 269, "name": "SLT", "source": 1 }, - { "begin": 234, "end": 236, "name": "ISZERO", "source": 1 }, + { "begin": 500, "end": 521, "name": "JUMPDEST", "source": 1 }, + { "begin": 493, "end": 498, "name": "DUP2", "source": 1 }, + { "begin": 490, "end": 522, "name": "EQ", "source": 1 }, { - "begin": 234, - "end": 236, + "begin": 480, + "end": 540, "name": "PUSH [tag]", "source": 1, - "value": "14" + "value": "21" }, - { "begin": 234, "end": 236, "name": "JUMPI", "source": 1 }, + { "begin": 480, "end": 540, "name": "JUMPI", "source": 1 }, { - "begin": 282, - "end": 283, + "begin": 536, + "end": 537, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 279, "end": 280, "name": "DUP1", "source": 1 }, - { "begin": 272, "end": 284, "name": "REVERT", "source": 1 }, + { "begin": 533, "end": 534, "name": "DUP1", "source": 1 }, + { "begin": 526, "end": 538, "name": "REVERT", "source": 1 }, + { + "begin": 480, + "end": 540, + "name": "tag", + "source": 1, + "value": "21" + }, + { "begin": 480, "end": 540, "name": "JUMPDEST", "source": 1 }, + { "begin": 430, "end": 546, "name": "POP", "source": 1 }, + { + "begin": 430, + "end": 546, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, { - "begin": 234, - "end": 236, + "begin": 552, + "end": 689, "name": "tag", "source": 1, - "value": "14" + "value": "13" }, - { "begin": 234, "end": 236, "name": "JUMPDEST", "source": 1 }, + { "begin": 552, "end": 689, "name": "JUMPDEST", "source": 1 }, { - "begin": 325, - "end": 326, + "begin": 606, + "end": 611, "name": "PUSH", "source": 1, "value": "0" }, + { "begin": 637, "end": 643, "name": "DUP2", "source": 1 }, + { "begin": 631, "end": 644, "name": "MLOAD", "source": 1 }, + { "begin": 622, "end": 644, "name": "SWAP1", "source": 1 }, + { "begin": 622, "end": 644, "name": "POP", "source": 1 }, { - "begin": 350, - "end": 411, + "begin": 653, + "end": 683, "name": "PUSH [tag]", "source": 1, - "value": "15" + "value": "23" }, - { "begin": 403, "end": 410, "name": "DUP5", "source": 1 }, - { "begin": 394, "end": 400, "name": "DUP3", "source": 1 }, - { "begin": 383, "end": 392, "name": "DUP6", "source": 1 }, - { "begin": 379, "end": 401, "name": "ADD", "source": 1 }, + { "begin": 677, "end": 682, "name": "DUP2", "source": 1 }, { - "begin": 350, - "end": 411, + "begin": 653, + "end": 683, "name": "PUSH [tag]", "source": 1, - "value": "9" + "value": "12" }, { - "begin": 350, - "end": 411, + "begin": 653, + "end": 683, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 350, - "end": 411, + "begin": 653, + "end": 683, "name": "tag", "source": 1, - "value": "15" - }, - { "begin": 350, "end": 411, "name": "JUMPDEST", "source": 1 }, - { "begin": 340, "end": 411, "name": "SWAP2", "source": 1 }, - { "begin": 340, "end": 411, "name": "POP", "source": 1 }, - { "begin": 296, "end": 421, "name": "POP", "source": 1 }, - { "begin": 224, "end": 428, "name": "SWAP3", "source": 1 }, - { "begin": 224, "end": 428, "name": "SWAP2", "source": 1 }, - { "begin": 224, "end": 428, "name": "POP", "source": 1 }, - { "begin": 224, "end": 428, "name": "POP", "source": 1 }, + "value": "23" + }, + { "begin": 653, "end": 683, "name": "JUMPDEST", "source": 1 }, + { "begin": 552, "end": 689, "name": "SWAP3", "source": 1 }, + { "begin": 552, "end": 689, "name": "SWAP2", "source": 1 }, + { "begin": 552, "end": 689, "name": "POP", "source": 1 }, + { "begin": 552, "end": 689, "name": "POP", "source": 1 }, { - "begin": 224, - "end": 428, + "begin": 552, + "end": 689, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 434, - "end": 524, + "begin": 695, + "end": 1040, "name": "tag", "source": 1, - "value": "16" + "value": "3" }, - { "begin": 434, "end": 524, "name": "JUMPDEST", "source": 1 }, + { "begin": 695, "end": 1040, "name": "JUMPDEST", "source": 1 }, { - "begin": 434, - "end": 524, + "begin": 762, + "end": 768, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 511, "end": 516, "name": "DUP2", "source": 1 }, - { "begin": 504, "end": 517, "name": "ISZERO", "source": 1 }, - { "begin": 497, "end": 518, "name": "ISZERO", "source": 1 }, - { "begin": 486, "end": 518, "name": "SWAP1", "source": 1 }, - { "begin": 486, "end": 518, "name": "POP", "source": 1 }, - { "begin": 476, "end": 524, "name": "SWAP2", "source": 1 }, - { "begin": 476, "end": 524, "name": "SWAP1", "source": 1 }, - { "begin": 476, "end": 524, "name": "POP", "source": 1 }, { - "begin": 476, - "end": 524, - "name": "JUMP", + "begin": 811, + "end": 813, + "name": "PUSH", "source": 1, - "value": "[out]" + "value": "20" }, + { "begin": 799, "end": 808, "name": "DUP3", "source": 1 }, + { "begin": 790, "end": 797, "name": "DUP5", "source": 1 }, + { "begin": 786, "end": 809, "name": "SUB", "source": 1 }, + { "begin": 782, "end": 814, "name": "SLT", "source": 1 }, + { "begin": 779, "end": 898, "name": "ISZERO", "source": 1 }, { - "begin": 530, - "end": 646, - "name": "tag", + "begin": 779, + "end": 898, + "name": "PUSH [tag]", "source": 1, - "value": "12" + "value": "25" }, - { "begin": 530, "end": 646, "name": "JUMPDEST", "source": 1 }, + { "begin": 779, "end": 898, "name": "JUMPI", "source": 1 }, { - "begin": 600, - "end": 621, + "begin": 817, + "end": 896, "name": "PUSH [tag]", "source": 1, - "value": "19" + "value": "26" }, - { "begin": 615, "end": 620, "name": "DUP2", "source": 1 }, { - "begin": 600, - "end": 621, + "begin": 817, + "end": 896, "name": "PUSH [tag]", "source": 1, - "value": "16" + "value": "9" }, { - "begin": 600, - "end": 621, + "begin": 817, + "end": 896, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 600, - "end": 621, + "begin": 817, + "end": 896, "name": "tag", "source": 1, - "value": "19" + "value": "26" }, - { "begin": 600, "end": 621, "name": "JUMPDEST", "source": 1 }, - { "begin": 593, "end": 598, "name": "DUP2", "source": 1 }, - { "begin": 590, "end": 622, "name": "EQ", "source": 1 }, + { "begin": 817, "end": 896, "name": "JUMPDEST", "source": 1 }, { - "begin": 580, - "end": 582, - "name": "PUSH [tag]", + "begin": 779, + "end": 898, + "name": "tag", "source": 1, - "value": "20" + "value": "25" }, - { "begin": 580, "end": 582, "name": "JUMPI", "source": 1 }, + { "begin": 779, "end": 898, "name": "JUMPDEST", "source": 1 }, { - "begin": 636, - "end": 637, + "begin": 937, + "end": 938, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 633, "end": 634, "name": "DUP1", "source": 1 }, - { "begin": 626, "end": 638, "name": "REVERT", "source": 1 }, { - "begin": 580, - "end": 582, + "begin": 962, + "end": 1023, + "name": "PUSH [tag]", + "source": 1, + "value": "27" + }, + { "begin": 1015, "end": 1022, "name": "DUP5", "source": 1 }, + { "begin": 1006, "end": 1012, "name": "DUP3", "source": 1 }, + { "begin": 995, "end": 1004, "name": "DUP6", "source": 1 }, + { "begin": 991, "end": 1013, "name": "ADD", "source": 1 }, + { + "begin": 962, + "end": 1023, + "name": "PUSH [tag]", + "source": 1, + "value": "13" + }, + { + "begin": 962, + "end": 1023, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 962, + "end": 1023, "name": "tag", "source": 1, - "value": "20" + "value": "27" }, - { "begin": 580, "end": 582, "name": "JUMPDEST", "source": 1 }, - { "begin": 570, "end": 646, "name": "POP", "source": 1 }, + { "begin": 962, "end": 1023, "name": "JUMPDEST", "source": 1 }, + { "begin": 952, "end": 1023, "name": "SWAP2", "source": 1 }, + { "begin": 952, "end": 1023, "name": "POP", "source": 1 }, + { "begin": 908, "end": 1033, "name": "POP", "source": 1 }, + { "begin": 695, "end": 1040, "name": "SWAP3", "source": 1 }, + { "begin": 695, "end": 1040, "name": "SWAP2", "source": 1 }, + { "begin": 695, "end": 1040, "name": "POP", "source": 1 }, + { "begin": 695, "end": 1040, "name": "POP", "source": 1 }, { - "begin": 570, - "end": 646, + "begin": 695, + "end": 1040, "name": "JUMP", "source": 1, "value": "[out]" }, - { "begin": 34, "end": 705, "name": "tag", "source": 0, "value": "7" }, - { "begin": 34, "end": 705, "name": "JUMPDEST", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 67, + "end": 1574, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 67, "end": 1574, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 1574, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 67, + "end": 1574, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 34, - "end": 705, + "begin": 67, + "end": 1574, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 705, "name": "CODECOPY", "source": 0 }, + { "begin": 67, "end": 1574, "name": "CODECOPY", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 67, + "end": 1574, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 705, "name": "RETURN", "source": 0 } + { "begin": 67, "end": 1574, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a26469706673582212205291eb8baa23bd68e06ced1a0bb4490e23327b9d4862aba762c124c73ae04a9764736f6c63430008030033", + ".auxdata": "a2646970667358221220ef9f4c3f0eed8fc4db8a32f5d3348dff9017af9737329f0cba33ef02871c990764736f6c634300080b0033", ".code": [ { - "begin": 34, - "end": 705, + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 67, "end": 1574, "name": "MSTORE", "source": 0 }, + { "begin": 67, "end": 1574, "name": "CALLVALUE", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 1574, "name": "ISZERO", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 1574, "name": "REVERT", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 67, "end": 1574, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 1574, "name": "POP", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 1574, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 67, "end": 1574, "name": "LT", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 1574, "name": "CALLDATALOAD", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 67, "end": 1574, "name": "SHR", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "B582EC5F" + }, + { "begin": 67, "end": 1574, "name": "GT", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "E2179B8E" + }, + { "begin": 67, "end": 1574, "name": "GT", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "E2179B8E" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "E5AA3D58" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "F34F1610" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "FFAE15BA" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 1574, "name": "JUMP", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "tag", + "source": 0, + "value": "20" + }, + { "begin": 67, "end": 1574, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "B582EC5F" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "B8C9D365" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "C3DA42B8" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "CB30E696" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 1574, "name": "JUMP", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "tag", + "source": 0, + "value": "19" + }, + { "begin": 67, "end": 1574, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "5EAF9BC1" + }, + { "begin": 67, "end": 1574, "name": "GT", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "5EAF9BC1" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "6422847B" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "8A054AC2" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "A885F4E3" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 1574, "name": "JUMP", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 67, "end": 1574, "name": "JUMPDEST", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "DBE671F" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "13128FDC" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "26121FF0" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "4DF7E3D0" + }, + { "begin": 67, "end": 1574, "name": "EQ", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 67, "end": 1574, "name": "JUMPI", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 67, "end": 1574, "name": "JUMPDEST", "source": 0 }, + { + "begin": 67, + "end": 1574, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 67, "end": 1574, "name": "DUP1", "source": 0 }, + { "begin": 67, "end": 1574, "name": "REVERT", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 1018, "end": 1034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { + "begin": 1018, + "end": 1034, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { + "begin": 1018, + "end": 1034, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1018, + "end": 1034, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 1018, "end": 1034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1018, "end": 1034, "name": "MLOAD", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { "begin": 1018, "end": 1034, "name": "SWAP2", "source": 0 }, + { "begin": 1018, "end": 1034, "name": "SWAP1", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1018, + "end": 1034, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1018, + "end": 1034, + "name": "tag", + "source": 0, + "value": "24" + }, + { "begin": 1018, "end": 1034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1018, "end": 1034, "name": "MLOAD", "source": 0 }, + { "begin": 1018, "end": 1034, "name": "DUP1", "source": 0 }, + { "begin": 1018, "end": 1034, "name": "SWAP2", "source": 0 }, + { "begin": 1018, "end": 1034, "name": "SUB", "source": 0 }, + { "begin": 1018, "end": 1034, "name": "SWAP1", "source": 0 }, + { "begin": 1018, "end": 1034, "name": "RETURN", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 1239, "end": 1572, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH [tag]", + "source": 0, + "value": "26" + }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1239, "end": 1572, "name": "DUP1", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1239, "end": 1572, "name": "SUB", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "DUP2", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "ADD", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SWAP1", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { "begin": 1239, "end": 1572, "name": "SWAP2", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SWAP1", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH [tag]", + "source": 0, + "value": "28" + }, + { + "begin": 1239, + "end": 1572, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1239, + "end": 1572, + "name": "tag", + "source": 0, + "value": "27" + }, + { "begin": 1239, "end": 1572, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH [tag]", + "source": 0, + "value": "29" + }, + { + "begin": 1239, + "end": 1572, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1239, + "end": 1572, + "name": "tag", + "source": 0, + "value": "26" + }, + { "begin": 1239, "end": 1572, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1239, "end": 1572, "name": "MLOAD", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH [tag]", + "source": 0, + "value": "30" + }, + { "begin": 1239, "end": 1572, "name": "SWAP2", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SWAP1", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1239, + "end": 1572, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1239, + "end": 1572, + "name": "tag", + "source": 0, + "value": "30" + }, + { "begin": 1239, "end": 1572, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1239, "end": 1572, "name": "MLOAD", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "DUP1", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SWAP2", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SUB", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SWAP1", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "RETURN", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 1128, "end": 1144, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "PUSH [tag]", + "source": 0, + "value": "31" + }, + { + "begin": 1128, + "end": 1144, + "name": "PUSH [tag]", + "source": 0, + "value": "32" + }, + { + "begin": 1128, + "end": 1144, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1128, + "end": 1144, + "name": "tag", + "source": 0, + "value": "31" + }, + { "begin": 1128, "end": 1144, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1128, "end": 1144, "name": "MLOAD", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "PUSH [tag]", + "source": 0, + "value": "33" + }, + { "begin": 1128, "end": 1144, "name": "SWAP2", "source": 0 }, + { "begin": 1128, "end": 1144, "name": "SWAP1", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1128, + "end": 1144, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1128, + "end": 1144, + "name": "tag", + "source": 0, + "value": "33" + }, + { "begin": 1128, "end": 1144, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1128, "end": 1144, "name": "MLOAD", "source": 0 }, + { "begin": 1128, "end": 1144, "name": "DUP1", "source": 0 }, + { "begin": 1128, "end": 1144, "name": "SWAP2", "source": 0 }, + { "begin": 1128, "end": 1144, "name": "SUB", "source": 0 }, + { "begin": 1128, "end": 1144, "name": "SWAP1", "source": 0 }, + { "begin": 1128, "end": 1144, "name": "RETURN", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 1040, "end": 1056, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "PUSH [tag]", + "source": 0, + "value": "34" + }, + { + "begin": 1040, + "end": 1056, + "name": "PUSH [tag]", + "source": 0, + "value": "35" + }, + { + "begin": 1040, + "end": 1056, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1040, + "end": 1056, + "name": "tag", + "source": 0, + "value": "34" + }, + { "begin": 1040, "end": 1056, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1040, "end": 1056, "name": "MLOAD", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "PUSH [tag]", + "source": 0, + "value": "36" + }, + { "begin": 1040, "end": 1056, "name": "SWAP2", "source": 0 }, + { "begin": 1040, "end": 1056, "name": "SWAP1", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1040, + "end": 1056, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1040, + "end": 1056, + "name": "tag", + "source": 0, + "value": "36" + }, + { "begin": 1040, "end": 1056, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1040, "end": 1056, "name": "MLOAD", "source": 0 }, + { "begin": 1040, "end": 1056, "name": "DUP1", "source": 0 }, + { "begin": 1040, "end": 1056, "name": "SWAP2", "source": 0 }, + { "begin": 1040, "end": 1056, "name": "SUB", "source": 0 }, + { "begin": 1040, "end": 1056, "name": "SWAP1", "source": 0 }, + { "begin": 1040, "end": 1056, "name": "RETURN", "source": 0 }, + { + "begin": 200, + "end": 233, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 200, "end": 233, "name": "JUMPDEST", "source": 0 }, + { + "begin": 200, + "end": 233, + "name": "PUSH [tag]", + "source": 0, + "value": "37" + }, + { + "begin": 200, + "end": 233, + "name": "PUSH [tag]", + "source": 0, + "value": "38" + }, + { + "begin": 200, + "end": 233, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 200, + "end": 233, + "name": "tag", + "source": 0, + "value": "37" + }, + { "begin": 200, "end": 233, "name": "JUMPDEST", "source": 0 }, + { "begin": 200, "end": 233, "name": "STOP", "source": 0 }, + { + "begin": 661, + "end": 962, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 661, "end": 962, "name": "JUMPDEST", "source": 0 }, + { + "begin": 661, + "end": 962, + "name": "PUSH [tag]", + "source": 0, + "value": "39" + }, + { + "begin": 661, + "end": 962, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 661, "end": 962, "name": "DUP1", "source": 0 }, + { "begin": 661, "end": 962, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 661, "end": 962, "name": "SUB", "source": 0 }, + { "begin": 661, "end": 962, "name": "DUP2", "source": 0 }, + { "begin": 661, "end": 962, "name": "ADD", "source": 0 }, + { "begin": 661, "end": 962, "name": "SWAP1", "source": 0 }, + { + "begin": 661, + "end": 962, + "name": "PUSH [tag]", + "source": 0, + "value": "40" + }, + { "begin": 661, "end": 962, "name": "SWAP2", "source": 0 }, + { "begin": 661, "end": 962, "name": "SWAP1", "source": 0 }, + { + "begin": 661, + "end": 962, + "name": "PUSH [tag]", + "source": 0, + "value": "41" + }, + { + "begin": 661, + "end": 962, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 661, + "end": 962, + "name": "tag", + "source": 0, + "value": "40" + }, + { "begin": 661, "end": 962, "name": "JUMPDEST", "source": 0 }, + { + "begin": 661, + "end": 962, + "name": "PUSH [tag]", + "source": 0, + "value": "42" + }, + { + "begin": 661, + "end": 962, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 661, + "end": 962, + "name": "tag", + "source": 0, + "value": "39" + }, + { "begin": 661, "end": 962, "name": "JUMPDEST", "source": 0 }, + { "begin": 661, "end": 962, "name": "STOP", "source": 0 }, + { + "begin": 1084, + "end": 1100, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1084, "end": 1100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1084, + "end": 1100, + "name": "PUSH [tag]", + "source": 0, + "value": "43" + }, + { + "begin": 1084, + "end": 1100, + "name": "PUSH [tag]", + "source": 0, + "value": "44" + }, + { + "begin": 1084, + "end": 1100, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1084, + "end": 1100, + "name": "tag", + "source": 0, + "value": "43" + }, + { "begin": 1084, "end": 1100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1084, + "end": 1100, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1084, "end": 1100, "name": "MLOAD", "source": 0 }, + { + "begin": 1084, + "end": 1100, + "name": "PUSH [tag]", + "source": 0, + "value": "45" + }, + { "begin": 1084, "end": 1100, "name": "SWAP2", "source": 0 }, + { "begin": 1084, "end": 1100, "name": "SWAP1", "source": 0 }, + { + "begin": 1084, + "end": 1100, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1084, + "end": 1100, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1084, + "end": 1100, + "name": "tag", + "source": 0, + "value": "45" + }, + { "begin": 1084, "end": 1100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1084, + "end": 1100, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1084, "end": 1100, "name": "MLOAD", "source": 0 }, + { "begin": 1084, "end": 1100, "name": "DUP1", "source": 0 }, + { "begin": 1084, "end": 1100, "name": "SWAP2", "source": 0 }, + { "begin": 1084, "end": 1100, "name": "SUB", "source": 0 }, + { "begin": 1084, "end": 1100, "name": "SWAP1", "source": 0 }, + { "begin": 1084, "end": 1100, "name": "RETURN", "source": 0 }, + { + "begin": 514, + "end": 655, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 514, "end": 655, "name": "JUMPDEST", "source": 0 }, + { + "begin": 514, + "end": 655, + "name": "PUSH [tag]", + "source": 0, + "value": "46" + }, + { + "begin": 514, + "end": 655, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 514, "end": 655, "name": "DUP1", "source": 0 }, + { "begin": 514, "end": 655, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 514, "end": 655, "name": "SUB", "source": 0 }, + { "begin": 514, "end": 655, "name": "DUP2", "source": 0 }, + { "begin": 514, "end": 655, "name": "ADD", "source": 0 }, + { "begin": 514, "end": 655, "name": "SWAP1", "source": 0 }, + { + "begin": 514, + "end": 655, + "name": "PUSH [tag]", + "source": 0, + "value": "47" + }, + { "begin": 514, "end": 655, "name": "SWAP2", "source": 0 }, + { "begin": 514, "end": 655, "name": "SWAP1", "source": 0 }, + { + "begin": 514, + "end": 655, + "name": "PUSH [tag]", + "source": 0, + "value": "48" + }, + { + "begin": 514, + "end": 655, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 514, + "end": 655, + "name": "tag", + "source": 0, + "value": "47" + }, + { "begin": 514, "end": 655, "name": "JUMPDEST", "source": 0 }, + { + "begin": 514, + "end": 655, + "name": "PUSH [tag]", + "source": 0, + "value": "49" + }, + { + "begin": 514, + "end": 655, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 514, + "end": 655, + "name": "tag", + "source": 0, + "value": "46" + }, + { "begin": 514, "end": 655, "name": "JUMPDEST", "source": 0 }, + { "begin": 514, "end": 655, "name": "STOP", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 1216, "end": 1232, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 1216, + "end": 1232, + "name": "PUSH [tag]", + "source": 0, + "value": "51" + }, + { + "begin": 1216, + "end": 1232, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1216, + "end": 1232, + "name": "tag", + "source": 0, + "value": "50" + }, + { "begin": 1216, "end": 1232, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1216, "end": 1232, "name": "MLOAD", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "PUSH [tag]", + "source": 0, + "value": "52" + }, + { "begin": 1216, "end": 1232, "name": "SWAP2", "source": 0 }, + { "begin": 1216, "end": 1232, "name": "SWAP1", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1216, + "end": 1232, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1216, + "end": 1232, + "name": "tag", + "source": 0, + "value": "52" + }, + { "begin": 1216, "end": 1232, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1216, "end": 1232, "name": "MLOAD", "source": 0 }, + { "begin": 1216, "end": 1232, "name": "DUP1", "source": 0 }, + { "begin": 1216, "end": 1232, "name": "SWAP2", "source": 0 }, + { "begin": 1216, "end": 1232, "name": "SUB", "source": 0 }, + { "begin": 1216, "end": 1232, "name": "SWAP1", "source": 0 }, + { "begin": 1216, "end": 1232, "name": "RETURN", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 1172, "end": 1188, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { + "begin": 1172, + "end": 1188, + "name": "PUSH [tag]", + "source": 0, + "value": "54" + }, + { + "begin": 1172, + "end": 1188, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1172, + "end": 1188, + "name": "tag", + "source": 0, + "value": "53" + }, + { "begin": 1172, "end": 1188, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1172, "end": 1188, "name": "MLOAD", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "PUSH [tag]", + "source": 0, + "value": "55" + }, + { "begin": 1172, "end": 1188, "name": "SWAP2", "source": 0 }, + { "begin": 1172, "end": 1188, "name": "SWAP1", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1172, + "end": 1188, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1172, + "end": 1188, + "name": "tag", + "source": 0, + "value": "55" + }, + { "begin": 1172, "end": 1188, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1172, "end": 1188, "name": "MLOAD", "source": 0 }, + { "begin": 1172, "end": 1188, "name": "DUP1", "source": 0 }, + { "begin": 1172, "end": 1188, "name": "SWAP2", "source": 0 }, + { "begin": 1172, "end": 1188, "name": "SUB", "source": 0 }, + { "begin": 1172, "end": 1188, "name": "SWAP1", "source": 0 }, + { "begin": 1172, "end": 1188, "name": "RETURN", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 1062, "end": 1078, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "PUSH [tag]", + "source": 0, + "value": "56" + }, + { + "begin": 1062, + "end": 1078, + "name": "PUSH [tag]", + "source": 0, + "value": "57" + }, + { + "begin": 1062, + "end": 1078, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1062, + "end": 1078, + "name": "tag", + "source": 0, + "value": "56" + }, + { "begin": 1062, "end": 1078, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1062, "end": 1078, "name": "MLOAD", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "PUSH [tag]", + "source": 0, + "value": "58" + }, + { "begin": 1062, "end": 1078, "name": "SWAP2", "source": 0 }, + { "begin": 1062, "end": 1078, "name": "SWAP1", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1062, + "end": 1078, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1062, + "end": 1078, + "name": "tag", + "source": 0, + "value": "58" + }, + { "begin": 1062, "end": 1078, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1062, "end": 1078, "name": "MLOAD", "source": 0 }, + { "begin": 1062, "end": 1078, "name": "DUP1", "source": 0 }, + { "begin": 1062, "end": 1078, "name": "SWAP2", "source": 0 }, + { "begin": 1062, "end": 1078, "name": "SUB", "source": 0 }, + { "begin": 1062, "end": 1078, "name": "SWAP1", "source": 0 }, + { "begin": 1062, "end": 1078, "name": "RETURN", "source": 0 }, + { + "begin": 239, + "end": 299, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 239, "end": 299, "name": "JUMPDEST", "source": 0 }, + { + "begin": 239, + "end": 299, + "name": "PUSH [tag]", + "source": 0, + "value": "59" + }, + { + "begin": 239, + "end": 299, + "name": "PUSH [tag]", + "source": 0, + "value": "60" + }, + { + "begin": 239, + "end": 299, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 239, + "end": 299, + "name": "tag", + "source": 0, + "value": "59" + }, + { "begin": 239, "end": 299, "name": "JUMPDEST", "source": 0 }, + { "begin": 239, "end": 299, "name": "STOP", "source": 0 }, + { + "begin": 1150, + "end": 1166, + "name": "tag", + "source": 0, + "value": "15" + }, + { "begin": 1150, "end": 1166, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1150, + "end": 1166, + "name": "PUSH [tag]", + "source": 0, + "value": "61" + }, + { + "begin": 1150, + "end": 1166, + "name": "PUSH [tag]", + "source": 0, + "value": "62" + }, + { + "begin": 1150, + "end": 1166, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1150, + "end": 1166, + "name": "tag", + "source": 0, + "value": "61" + }, + { "begin": 1150, "end": 1166, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1150, + "end": 1166, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1150, "end": 1166, "name": "MLOAD", "source": 0 }, + { + "begin": 1150, + "end": 1166, + "name": "PUSH [tag]", + "source": 0, + "value": "63" + }, + { "begin": 1150, "end": 1166, "name": "SWAP2", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "SWAP1", "source": 0 }, + { + "begin": 1150, + "end": 1166, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1150, + "end": 1166, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1150, + "end": 1166, + "name": "tag", + "source": 0, + "value": "63" + }, + { "begin": 1150, "end": 1166, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1150, + "end": 1166, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1150, "end": 1166, "name": "MLOAD", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "DUP1", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "SWAP2", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "SUB", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "SWAP1", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "RETURN", "source": 0 }, + { + "begin": 1194, + "end": 1210, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 1194, "end": 1210, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1194, + "end": 1210, + "name": "PUSH [tag]", + "source": 0, + "value": "64" + }, + { + "begin": 1194, + "end": 1210, + "name": "PUSH [tag]", + "source": 0, + "value": "65" + }, + { + "begin": 1194, + "end": 1210, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1194, + "end": 1210, + "name": "tag", + "source": 0, + "value": "64" + }, + { "begin": 1194, "end": 1210, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1194, + "end": 1210, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1194, "end": 1210, "name": "MLOAD", "source": 0 }, + { + "begin": 1194, + "end": 1210, + "name": "PUSH [tag]", + "source": 0, + "value": "66" + }, + { "begin": 1194, "end": 1210, "name": "SWAP2", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "SWAP1", "source": 0 }, + { + "begin": 1194, + "end": 1210, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1194, + "end": 1210, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1194, + "end": 1210, + "name": "tag", + "source": 0, + "value": "66" + }, + { "begin": 1194, "end": 1210, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1194, + "end": 1210, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1194, "end": 1210, "name": "MLOAD", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "DUP1", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "SWAP2", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "SUB", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "SWAP1", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "RETURN", "source": 0 }, + { + "begin": 305, + "end": 508, + "name": "tag", + "source": 0, + "value": "17" + }, + { "begin": 305, "end": 508, "name": "JUMPDEST", "source": 0 }, + { + "begin": 305, + "end": 508, + "name": "PUSH [tag]", + "source": 0, + "value": "67" + }, + { + "begin": 305, + "end": 508, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 305, "end": 508, "name": "DUP1", "source": 0 }, + { "begin": 305, "end": 508, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 305, "end": 508, "name": "SUB", "source": 0 }, + { "begin": 305, "end": 508, "name": "DUP2", "source": 0 }, + { "begin": 305, "end": 508, "name": "ADD", "source": 0 }, + { "begin": 305, "end": 508, "name": "SWAP1", "source": 0 }, + { + "begin": 305, + "end": 508, + "name": "PUSH [tag]", + "source": 0, + "value": "68" + }, + { "begin": 305, "end": 508, "name": "SWAP2", "source": 0 }, + { "begin": 305, "end": 508, "name": "SWAP1", "source": 0 }, + { + "begin": 305, + "end": 508, + "name": "PUSH [tag]", + "source": 0, + "value": "69" + }, + { + "begin": 305, + "end": 508, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 305, + "end": 508, + "name": "tag", + "source": 0, + "value": "68" + }, + { "begin": 305, "end": 508, "name": "JUMPDEST", "source": 0 }, + { + "begin": 305, + "end": 508, + "name": "PUSH [tag]", + "source": 0, + "value": "70" + }, + { + "begin": 305, + "end": 508, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 305, + "end": 508, + "name": "tag", + "source": 0, + "value": "67" + }, + { "begin": 305, "end": 508, "name": "JUMPDEST", "source": 0 }, + { "begin": 305, "end": 508, "name": "STOP", "source": 0 }, + { + "begin": 1106, + "end": 1122, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 1106, "end": 1122, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1106, + "end": 1122, + "name": "PUSH [tag]", + "source": 0, + "value": "71" + }, + { + "begin": 1106, + "end": 1122, + "name": "PUSH [tag]", + "source": 0, + "value": "72" + }, + { + "begin": 1106, + "end": 1122, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1106, + "end": 1122, + "name": "tag", + "source": 0, + "value": "71" + }, + { "begin": 1106, "end": 1122, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1106, + "end": 1122, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1106, "end": 1122, "name": "MLOAD", "source": 0 }, + { + "begin": 1106, + "end": 1122, + "name": "PUSH [tag]", + "source": 0, + "value": "73" + }, + { "begin": 1106, "end": 1122, "name": "SWAP2", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "SWAP1", "source": 0 }, + { + "begin": 1106, + "end": 1122, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 1106, + "end": 1122, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1106, + "end": 1122, + "name": "tag", + "source": 0, + "value": "73" + }, + { "begin": 1106, "end": 1122, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1106, + "end": 1122, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1106, "end": 1122, "name": "MLOAD", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "DUP1", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "SWAP2", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "SUB", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "SWAP1", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "RETURN", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "tag", + "source": 0, + "value": "23" + }, + { "begin": 1018, "end": 1034, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1018, "end": 1034, "name": "SLOAD", "source": 0 }, + { "begin": 1018, "end": 1034, "name": "DUP2", "source": 0 }, + { + "begin": 1018, + "end": 1034, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1239, + "end": 1572, + "name": "tag", + "source": 0, + "value": "29" + }, + { "begin": 1239, "end": 1572, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1292, + "end": 1306, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1322, + "end": 1323, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1318, + "end": 1319, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1318, "end": 1323, "name": "DUP2", "source": 0 }, + { "begin": 1318, "end": 1323, "name": "SWAP1", "source": 0 }, + { "begin": 1318, "end": 1323, "name": "SSTORE", "source": 0 }, + { "begin": 1318, "end": 1323, "name": "POP", "source": 0 }, + { + "begin": 1337, + "end": 1338, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1333, "end": 1334, "name": "DUP1", "source": 0 }, + { "begin": 1333, "end": 1338, "name": "DUP2", "source": 0 }, + { "begin": 1333, "end": 1338, "name": "SWAP1", "source": 0 }, + { "begin": 1333, "end": 1338, "name": "SSTORE", "source": 0 }, + { "begin": 1333, "end": 1338, "name": "POP", "source": 0 }, + { + "begin": 1352, + "end": 1353, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1348, + "end": 1349, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 1348, "end": 1353, "name": "DUP2", "source": 0 }, + { "begin": 1348, "end": 1353, "name": "SWAP1", "source": 0 }, + { "begin": 1348, "end": 1353, "name": "SSTORE", "source": 0 }, + { "begin": 1348, "end": 1353, "name": "POP", "source": 0 }, + { + "begin": 1367, + "end": 1368, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1363, + "end": 1364, + "name": "PUSH", + "source": 0, + "value": "3" + }, + { "begin": 1363, "end": 1368, "name": "DUP2", "source": 0 }, + { "begin": 1363, "end": 1368, "name": "SWAP1", "source": 0 }, + { "begin": 1363, "end": 1368, "name": "SSTORE", "source": 0 }, + { "begin": 1363, "end": 1368, "name": "POP", "source": 0 }, + { + "begin": 1382, + "end": 1383, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1378, + "end": 1379, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1378, "end": 1383, "name": "DUP2", "source": 0 }, + { "begin": 1378, "end": 1383, "name": "SWAP1", "source": 0 }, + { "begin": 1378, "end": 1383, "name": "SSTORE", "source": 0 }, + { "begin": 1378, "end": 1383, "name": "POP", "source": 0 }, + { + "begin": 1397, + "end": 1398, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1393, + "end": 1394, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { "begin": 1393, "end": 1398, "name": "DUP2", "source": 0 }, + { "begin": 1393, "end": 1398, "name": "SWAP1", "source": 0 }, + { "begin": 1393, "end": 1398, "name": "SSTORE", "source": 0 }, + { "begin": 1393, "end": 1398, "name": "POP", "source": 0 }, + { + "begin": 1412, + "end": 1413, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1408, + "end": 1409, + "name": "PUSH", + "source": 0, + "value": "6" + }, + { "begin": 1408, "end": 1413, "name": "DUP2", "source": 0 }, + { "begin": 1408, "end": 1413, "name": "SWAP1", "source": 0 }, + { "begin": 1408, "end": 1413, "name": "SSTORE", "source": 0 }, + { "begin": 1408, "end": 1413, "name": "POP", "source": 0 }, + { + "begin": 1427, + "end": 1428, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1423, + "end": 1424, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 1423, "end": 1428, "name": "DUP2", "source": 0 }, + { "begin": 1423, "end": 1428, "name": "SWAP1", "source": 0 }, + { "begin": 1423, "end": 1428, "name": "SSTORE", "source": 0 }, + { "begin": 1423, "end": 1428, "name": "POP", "source": 0 }, + { + "begin": 1442, + "end": 1443, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1438, + "end": 1439, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 1438, "end": 1443, "name": "DUP2", "source": 0 }, + { "begin": 1438, "end": 1443, "name": "SWAP1", "source": 0 }, + { "begin": 1438, "end": 1443, "name": "SSTORE", "source": 0 }, + { "begin": 1438, "end": 1443, "name": "POP", "source": 0 }, + { + "begin": 1457, + "end": 1458, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 1453, + "end": 1454, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 1453, "end": 1458, "name": "DUP2", "source": 0 }, + { "begin": 1453, "end": 1458, "name": "SWAP1", "source": 0 }, + { "begin": 1453, "end": 1458, "name": "SSTORE", "source": 0 }, + { "begin": 1453, "end": 1458, "name": "POP", "source": 0 }, + { + "begin": 1468, + "end": 1481, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1495, + "end": 1548, + "name": "tag", + "source": 0, + "value": "75" + }, + { "begin": 1495, "end": 1548, "name": "JUMPDEST", "source": 0 }, + { "begin": 1506, "end": 1511, "name": "DUP3", "source": 0 }, + { + "begin": 1502, + "end": 1503, + "name": "PUSH", + "source": 0, + "value": "8" + }, + { "begin": 1502, "end": 1503, "name": "SLOAD", "source": 0 }, + { "begin": 1502, "end": 1511, "name": "LT", "source": 0 }, + { "begin": 1495, "end": 1548, "name": "ISZERO", "source": 0 }, + { + "begin": 1495, + "end": 1548, + "name": "PUSH [tag]", + "source": 0, + "value": "76" + }, + { "begin": 1495, "end": 1548, "name": "JUMPI", "source": 0 }, + { + "begin": 1536, + "end": 1537, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1527, "end": 1537, "name": "DUP2", "source": 0 }, + { + "begin": 1527, + "end": 1537, + "name": "PUSH [tag]", + "source": 0, + "value": "77" + }, + { "begin": 1527, "end": 1537, "name": "SWAP2", "source": 0 }, + { "begin": 1527, "end": 1537, "name": "SWAP1", "source": 0 }, + { + "begin": 1527, + "end": 1537, + "name": "PUSH [tag]", + "source": 0, + "value": "78" + }, + { + "begin": 1527, + "end": 1537, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1527, + "end": 1537, + "name": "tag", + "source": 0, + "value": "77" + }, + { "begin": 1527, "end": 1537, "name": "JUMPDEST", "source": 0 }, + { "begin": 1527, "end": 1537, "name": "SWAP1", "source": 0 }, + { "begin": 1527, "end": 1537, "name": "POP", "source": 0 }, + { + "begin": 1495, + "end": 1548, + "name": "PUSH [tag]", + "source": 0, + "value": "75" + }, + { "begin": 1495, "end": 1548, "name": "JUMP", "source": 0 }, + { + "begin": 1495, + "end": 1548, + "name": "tag", + "source": 0, + "value": "76" + }, + { "begin": 1495, "end": 1548, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1564, + "end": 1565, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1557, "end": 1565, "name": "SWAP2", "source": 0 }, + { "begin": 1557, "end": 1565, "name": "POP", "source": 0 }, + { "begin": 1557, "end": 1565, "name": "POP", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SWAP2", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "SWAP1", "source": 0 }, + { "begin": 1239, "end": 1572, "name": "POP", "source": 0 }, + { + "begin": 1239, + "end": 1572, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1128, + "end": 1144, + "name": "tag", + "source": 0, + "value": "32" + }, + { "begin": 1128, "end": 1144, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "PUSH", + "source": 0, + "value": "5" + }, + { "begin": 1128, "end": 1144, "name": "SLOAD", "source": 0 }, + { "begin": 1128, "end": 1144, "name": "DUP2", "source": 0 }, + { + "begin": 1128, + "end": 1144, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1040, + "end": 1056, + "name": "tag", + "source": 0, + "value": "35" + }, + { "begin": 1040, "end": 1056, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { "begin": 1040, "end": 1056, "name": "SLOAD", "source": 0 }, + { "begin": 1040, "end": 1056, "name": "DUP2", "source": 0 }, + { + "begin": 1040, + "end": 1056, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 200, + "end": 233, + "name": "tag", + "source": 0, + "value": "38" + }, + { "begin": 200, "end": 233, "name": "JUMPDEST", "source": 0 }, + { + "begin": 200, + "end": 233, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 661, + "end": 962, + "name": "tag", + "source": 0, + "value": "42" + }, + { "begin": 661, "end": 962, "name": "JUMPDEST", "source": 0 }, + { + "begin": 740, + "end": 889, + "name": "tag", + "source": 0, + "value": "81" + }, + { "begin": 740, "end": 889, "name": "JUMPDEST", "source": 0 }, + { + "begin": 762, + "end": 763, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 747, "end": 758, "name": "DUP3", "source": 0 }, + { "begin": 747, "end": 763, "name": "EQ", "source": 0 }, + { + "begin": 740, + "end": 889, + "name": "PUSH [tag]", + "source": 0, + "value": "82" + }, + { "begin": 740, "end": 889, "name": "JUMPI", "source": 0 }, + { "begin": 826, "end": 837, "name": "DUP2", "source": 0 }, + { "begin": 813, "end": 824, "name": "DUP3", "source": 0 }, + { "begin": 806, "end": 838, "name": "SSTORE", "source": 0 }, + { "begin": 865, "end": 878, "name": "DUP2", "source": 0 }, + { "begin": 865, "end": 878, "name": "DUP1", "source": 0 }, + { + "begin": 865, + "end": 878, + "name": "PUSH [tag]", + "source": 0, + "value": "83" + }, + { "begin": 865, "end": 878, "name": "SWAP1", "source": 0 }, + { + "begin": 865, + "end": 878, + "name": "PUSH [tag]", + "source": 0, + "value": "84" + }, + { + "begin": 865, + "end": 878, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 865, + "end": 878, + "name": "tag", + "source": 0, + "value": "83" + }, + { "begin": 865, "end": 878, "name": "JUMPDEST", "source": 0 }, + { "begin": 865, "end": 878, "name": "SWAP3", "source": 0 }, + { "begin": 865, "end": 878, "name": "POP", "source": 0 }, + { "begin": 865, "end": 878, "name": "POP", "source": 0 }, + { + "begin": 740, + "end": 889, + "name": "PUSH [tag]", + "source": 0, + "value": "81" + }, + { "begin": 740, "end": 889, "name": "JUMP", "source": 0 }, + { + "begin": 740, + "end": 889, + "name": "tag", + "source": 0, + "value": "82" + }, + { "begin": 740, "end": 889, "name": "JUMPDEST", "source": 0 }, + { + "begin": 899, + "end": 956, + "name": "tag", + "source": 0, + "value": "85" + }, + { "begin": 899, "end": 956, "name": "JUMPDEST", "source": 0 }, + { + "begin": 918, + "end": 919, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 906, "end": 914, "name": "DUP2", "source": 0 }, + { "begin": 906, "end": 919, "name": "EQ", "source": 0 }, + { + "begin": 899, + "end": 956, + "name": "PUSH [tag]", + "source": 0, + "value": "86" + }, + { "begin": 899, "end": 956, "name": "JUMPI", "source": 0 }, + { "begin": 935, "end": 945, "name": "DUP1", "source": 0 }, + { "begin": 935, "end": 945, "name": "DUP1", "source": 0 }, + { + "begin": 935, + "end": 945, + "name": "PUSH [tag]", + "source": 0, + "value": "87" + }, + { "begin": 935, "end": 945, "name": "SWAP1", "source": 0 }, + { + "begin": 935, + "end": 945, + "name": "PUSH [tag]", + "source": 0, + "value": "84" + }, + { + "begin": 935, + "end": 945, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 935, + "end": 945, + "name": "tag", + "source": 0, + "value": "87" + }, + { "begin": 935, "end": 945, "name": "JUMPDEST", "source": 0 }, + { "begin": 935, "end": 945, "name": "SWAP2", "source": 0 }, + { "begin": 935, "end": 945, "name": "POP", "source": 0 }, + { "begin": 935, "end": 945, "name": "POP", "source": 0 }, + { + "begin": 899, + "end": 956, + "name": "PUSH [tag]", + "source": 0, + "value": "85" + }, + { "begin": 899, "end": 956, "name": "JUMP", "source": 0 }, + { + "begin": 899, + "end": 956, + "name": "tag", + "source": 0, + "value": "86" + }, + { "begin": 899, "end": 956, "name": "JUMPDEST", "source": 0 }, + { "begin": 661, "end": 962, "name": "POP", "source": 0 }, + { "begin": 661, "end": 962, "name": "POP", "source": 0 }, + { + "begin": 661, + "end": 962, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1084, + "end": 1100, + "name": "tag", + "source": 0, + "value": "44" + }, + { "begin": 1084, "end": 1100, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1084, + "end": 1100, "name": "PUSH", "source": 0, - "value": "80" + "value": "3" + }, + { "begin": 1084, "end": 1100, "name": "SLOAD", "source": 0 }, + { "begin": 1084, "end": 1100, "name": "DUP2", "source": 0 }, + { + "begin": 1084, + "end": 1100, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 514, + "end": 655, + "name": "tag", + "source": 0, + "value": "49" + }, + { "begin": 514, "end": 655, "name": "JUMPDEST", "source": 0 }, + { "begin": 586, "end": 593, "name": "DUP1", "source": 0 }, + { + "begin": 574, + "end": 602, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 574, "end": 602, "name": "AND", "source": 0 }, + { + "begin": 574, + "end": 602, + "name": "PUSH", + "source": 0, + "value": "5EAF9BC1" + }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 574, "end": 604, "name": "MLOAD", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP2", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 574, "end": 604, "name": "AND", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 574, "end": 604, "name": "SHL", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP2", "source": 0 }, + { "begin": 574, "end": 604, "name": "MSTORE", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 574, "end": 604, "name": "ADD", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 574, "end": 604, "name": "MLOAD", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP1", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP4", "source": 0 }, + { "begin": 574, "end": 604, "name": "SUB", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP2", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP7", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP1", "source": 0 }, + { "begin": 574, "end": 604, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 574, "end": 604, "name": "ISZERO", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP1", "source": 0 }, + { "begin": 574, "end": 604, "name": "ISZERO", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "PUSH [tag]", + "source": 0, + "value": "89" + }, + { "begin": 574, "end": 604, "name": "JUMPI", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 574, "end": 604, "name": "DUP1", "source": 0 }, + { "begin": 574, "end": 604, "name": "REVERT", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "tag", + "source": 0, + "value": "89" + }, + { "begin": 574, "end": 604, "name": "JUMPDEST", "source": 0 }, + { "begin": 574, "end": 604, "name": "POP", "source": 0 }, + { "begin": 574, "end": 604, "name": "GAS", "source": 0 }, + { "begin": 574, "end": 604, "name": "STATICCALL", "source": 0 }, + { "begin": 574, "end": 604, "name": "ISZERO", "source": 0 }, + { "begin": 574, "end": 604, "name": "DUP1", "source": 0 }, + { "begin": 574, "end": 604, "name": "ISZERO", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "PUSH [tag]", + "source": 0, + "value": "91" + }, + { "begin": 574, "end": 604, "name": "JUMPI", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 574, "end": 604, "name": "DUP1", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 574, + "end": 604, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 574, + "end": 604, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 574, "end": 604, "name": "REVERT", "source": 0 }, + { + "begin": 574, + "end": 604, + "name": "tag", + "source": 0, + "value": "91" + }, + { "begin": 574, "end": 604, "name": "JUMPDEST", "source": 0 }, + { "begin": 574, "end": 604, "name": "POP", "source": 0 }, + { "begin": 574, "end": 604, "name": "POP", "source": 0 }, + { "begin": 574, "end": 604, "name": "POP", "source": 0 }, + { "begin": 574, "end": 604, "name": "POP", "source": 0 }, + { "begin": 626, "end": 633, "name": "DUP1", "source": 0 }, + { + "begin": 614, + "end": 646, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 614, "end": 646, "name": "AND", "source": 0 }, + { + "begin": 614, + "end": 646, + "name": "PUSH", + "source": 0, + "value": "CB30E696" + }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 614, "end": 648, "name": "MLOAD", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP2", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 614, "end": 648, "name": "AND", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 614, "end": 648, "name": "SHL", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP2", "source": 0 }, + { "begin": 614, "end": 648, "name": "MSTORE", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 614, "end": 648, "name": "ADD", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 614, "end": 648, "name": "MLOAD", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP1", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP4", "source": 0 }, + { "begin": 614, "end": 648, "name": "SUB", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP2", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP7", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP1", "source": 0 }, + { "begin": 614, "end": 648, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 614, "end": 648, "name": "ISZERO", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP1", "source": 0 }, + { "begin": 614, "end": 648, "name": "ISZERO", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "PUSH [tag]", + "source": 0, + "value": "92" + }, + { "begin": 614, "end": 648, "name": "JUMPI", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 614, "end": 648, "name": "DUP1", "source": 0 }, + { "begin": 614, "end": 648, "name": "REVERT", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "tag", + "source": 0, + "value": "92" + }, + { "begin": 614, "end": 648, "name": "JUMPDEST", "source": 0 }, + { "begin": 614, "end": 648, "name": "POP", "source": 0 }, + { "begin": 614, "end": 648, "name": "GAS", "source": 0 }, + { "begin": 614, "end": 648, "name": "STATICCALL", "source": 0 }, + { "begin": 614, "end": 648, "name": "ISZERO", "source": 0 }, + { "begin": 614, "end": 648, "name": "DUP1", "source": 0 }, + { "begin": 614, "end": 648, "name": "ISZERO", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "PUSH [tag]", + "source": 0, + "value": "94" + }, + { "begin": 614, "end": 648, "name": "JUMPI", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 614, "end": 648, "name": "DUP1", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 614, + "end": 648, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 614, + "end": 648, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 614, "end": 648, "name": "REVERT", "source": 0 }, + { + "begin": 614, + "end": 648, + "name": "tag", + "source": 0, + "value": "94" + }, + { "begin": 614, "end": 648, "name": "JUMPDEST", "source": 0 }, + { "begin": 614, "end": 648, "name": "POP", "source": 0 }, + { "begin": 614, "end": 648, "name": "POP", "source": 0 }, + { "begin": 614, "end": 648, "name": "POP", "source": 0 }, + { "begin": 614, "end": 648, "name": "POP", "source": 0 }, + { "begin": 514, "end": 655, "name": "POP", "source": 0 }, + { + "begin": 514, + "end": 655, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1216, + "end": 1232, + "name": "tag", + "source": 0, + "value": "51" + }, + { "begin": 1216, "end": 1232, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "PUSH", + "source": 0, + "value": "9" + }, + { "begin": 1216, "end": 1232, "name": "SLOAD", "source": 0 }, + { "begin": 1216, "end": 1232, "name": "DUP2", "source": 0 }, + { + "begin": 1216, + "end": 1232, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1172, + "end": 1188, + "name": "tag", + "source": 0, + "value": "54" + }, + { "begin": 1172, "end": 1188, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "PUSH", + "source": 0, + "value": "7" + }, + { "begin": 1172, "end": 1188, "name": "SLOAD", "source": 0 }, + { "begin": 1172, "end": 1188, "name": "DUP2", "source": 0 }, + { + "begin": 1172, + "end": 1188, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1062, + "end": 1078, + "name": "tag", + "source": 0, + "value": "57" + }, + { "begin": 1062, "end": 1078, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "PUSH", + "source": 0, + "value": "2" + }, + { "begin": 1062, "end": 1078, "name": "SLOAD", "source": 0 }, + { "begin": 1062, "end": 1078, "name": "DUP2", "source": 0 }, + { + "begin": 1062, + "end": 1078, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 239, + "end": 299, + "name": "tag", + "source": 0, + "value": "60" + }, + { "begin": 239, "end": 299, "name": "JUMPDEST", "source": 0 }, + { + "begin": 284, + "end": 292, + "name": "PUSH", + "source": 0, + "value": "0" }, + { "begin": 284, "end": 292, "name": "DUP1", "source": 0 }, + { "begin": 284, "end": 292, "name": "REVERT", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH", + "begin": 1150, + "end": 1166, + "name": "tag", "source": 0, - "value": "40" + "value": "62" }, - { "begin": 34, "end": 705, "name": "MSTORE", "source": 0 }, - { "begin": 34, "end": 705, "name": "CALLVALUE", "source": 0 }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 705, "name": "ISZERO", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "JUMPDEST", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH [tag]", + "begin": 1150, + "end": 1166, + "name": "PUSH", "source": 0, - "value": "1" + "value": "6" }, - { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "SLOAD", "source": 0 }, + { "begin": 1150, "end": 1166, "name": "DUP2", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH", + "begin": 1150, + "end": 1166, + "name": "JUMP", "source": 0, - "value": "0" + "value": "[out]" }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 705, "name": "REVERT", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 1194, + "end": 1210, "name": "tag", "source": 0, - "value": "1" + "value": "65" }, - { "begin": 34, "end": 705, "name": "JUMPDEST", "source": 0 }, - { "begin": 34, "end": 705, "name": "POP", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "JUMPDEST", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 1194, + "end": 1210, "name": "PUSH", "source": 0, - "value": "4" + "value": "8" }, - { "begin": 34, "end": 705, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 34, "end": 705, "name": "LT", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "SLOAD", "source": 0 }, + { "begin": 1194, "end": 1210, "name": "DUP2", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH [tag]", + "begin": 1194, + "end": 1210, + "name": "JUMP", "source": 0, - "value": "2" + "value": "[out]" }, - { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH", + "begin": 305, + "end": 508, + "name": "tag", "source": 0, - "value": "0" + "value": "70" }, - { "begin": 34, "end": 705, "name": "CALLDATALOAD", "source": 0 }, + { "begin": 305, "end": 508, "name": "JUMPDEST", "source": 0 }, + { "begin": 395, "end": 402, "name": "DUP2", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 383, + "end": 415, "name": "PUSH", "source": 0, - "value": "E0" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 34, "end": 705, "name": "SHR", "source": 0 }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 415, "name": "AND", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 383, + "end": 415, "name": "PUSH", "source": 0, - "value": "5EAF9BC1" + "value": "A885F4E3" }, - { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, + { "begin": 416, "end": 423, "name": "DUP3", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH [tag]", + "begin": 383, + "end": 424, + "name": "PUSH", "source": 0, - "value": "3" + "value": "40" }, - { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "MLOAD", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP3", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 383, + "end": 424, "name": "PUSH", "source": 0, - "value": "A885F4E3" + "value": "FFFFFFFF" }, - { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, + { "begin": 383, "end": 424, "name": "AND", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH [tag]", + "begin": 383, + "end": 424, + "name": "PUSH", "source": 0, - "value": "4" + "value": "E0" }, - { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "SHL", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP2", "source": 0 }, + { "begin": 383, "end": 424, "name": "MSTORE", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 383, + "end": 424, "name": "PUSH", "source": 0, - "value": "CB30E696" + "value": "4" }, - { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, + { "begin": 383, "end": 424, "name": "ADD", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 383, + "end": 424, "name": "PUSH [tag]", "source": 0, - "value": "5" + "value": "97" }, - { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "SWAP2", "source": 0 }, + { "begin": 383, "end": 424, "name": "SWAP1", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH", + "begin": 383, + "end": 424, + "name": "PUSH [tag]", "source": 0, - "value": "F34F1610" + "value": "98" }, - { "begin": 34, "end": 705, "name": "EQ", "source": 0 }, { - "begin": 34, - "end": 705, - "name": "PUSH [tag]", + "begin": 383, + "end": 424, + "name": "JUMP", "source": 0, - "value": "6" + "value": "[in]" }, - { "begin": 34, "end": 705, "name": "JUMPI", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 383, + "end": 424, "name": "tag", "source": 0, - "value": "2" + "value": "97" }, - { "begin": 34, "end": 705, "name": "JUMPDEST", "source": 0 }, + { "begin": 383, "end": 424, "name": "JUMPDEST", "source": 0 }, { - "begin": 34, - "end": 705, + "begin": 383, + "end": 424, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 34, "end": 705, "name": "DUP1", "source": 0 }, - { "begin": 34, "end": 705, "name": "REVERT", "source": 0 }, { - "begin": 195, - "end": 224, - "name": "tag", + "begin": 383, + "end": 424, + "name": "PUSH", "source": 0, - "value": "3" + "value": "40" }, - { "begin": 195, "end": 224, "name": "JUMPDEST", "source": 0 }, - { - "begin": 195, - "end": 224, + { "begin": 383, "end": 424, "name": "MLOAD", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP4", "source": 0 }, + { "begin": 383, "end": 424, "name": "SUB", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP2", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP7", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 383, "end": 424, "name": "ISZERO", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "ISZERO", "source": 0 }, + { + "begin": 383, + "end": 424, "name": "PUSH [tag]", "source": 0, - "value": "7" + "value": "99" }, + { "begin": 383, "end": 424, "name": "JUMPI", "source": 0 }, { - "begin": 195, - "end": 224, - "name": "PUSH [tag]", + "begin": 383, + "end": 424, + "name": "PUSH", "source": 0, - "value": "8" + "value": "0" }, + { "begin": 383, "end": 424, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "REVERT", "source": 0 }, { - "begin": 195, - "end": 224, - "name": "JUMP", + "begin": 383, + "end": 424, + "name": "tag", "source": 0, - "value": "[in]" + "value": "99" + }, + { "begin": 383, "end": 424, "name": "JUMPDEST", "source": 0 }, + { "begin": 383, "end": 424, "name": "POP", "source": 0 }, + { "begin": 383, "end": 424, "name": "GAS", "source": 0 }, + { "begin": 383, "end": 424, "name": "STATICCALL", "source": 0 }, + { "begin": 383, "end": 424, "name": "SWAP3", "source": 0 }, + { "begin": 383, "end": 424, "name": "POP", "source": 0 }, + { "begin": 383, "end": 424, "name": "POP", "source": 0 }, + { "begin": 383, "end": 424, "name": "POP", "source": 0 }, + { "begin": 383, "end": 424, "name": "DUP1", "source": 0 }, + { "begin": 383, "end": 424, "name": "ISZERO", "source": 0 }, + { + "begin": 383, + "end": 424, + "name": "PUSH [tag]", + "source": 0, + "value": "100" }, + { "begin": 383, "end": 424, "name": "JUMPI", "source": 0 }, + { "begin": 383, "end": 424, "name": "POP", "source": 0 }, { - "begin": 195, - "end": 224, - "name": "tag", + "begin": 383, + "end": 424, + "name": "PUSH", "source": 0, - "value": "7" + "value": "1" }, - { "begin": 195, "end": 224, "name": "JUMPDEST", "source": 0 }, - { "begin": 195, "end": 224, "name": "STOP", "source": 0 }, { - "begin": 551, - "end": 699, + "begin": 383, + "end": 424, "name": "tag", "source": 0, - "value": "4" + "value": "100" }, - { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, + { "begin": 383, "end": 424, "name": "JUMPDEST", "source": 0 }, { - "begin": 551, - "end": 699, + "begin": 379, + "end": 436, "name": "PUSH [tag]", "source": 0, - "value": "9" + "value": "101" }, + { "begin": 379, "end": 436, "name": "JUMPI", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "PUSH", + "begin": 379, + "end": 436, + "name": "PUSH [tag]", "source": 0, - "value": "4" + "value": "105" }, - { "begin": 551, "end": 699, "name": "DUP1", "source": 0 }, - { "begin": 551, "end": 699, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 551, "end": 699, "name": "SUB", "source": 0 }, - { "begin": 551, "end": 699, "name": "DUP2", "source": 0 }, - { "begin": 551, "end": 699, "name": "ADD", "source": 0 }, - { "begin": 551, "end": 699, "name": "SWAP1", "source": 0 }, + { "begin": 379, "end": 436, "name": "JUMP", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "PUSH [tag]", + "begin": 379, + "end": 436, + "name": "tag", "source": 0, - "value": "10" + "value": "101" }, - { "begin": 551, "end": 699, "name": "SWAP2", "source": 0 }, - { "begin": 551, "end": 699, "name": "SWAP1", "source": 0 }, + { "begin": 379, "end": 436, "name": "JUMPDEST", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "PUSH [tag]", + "begin": 379, + "end": 436, + "name": "tag", "source": 0, - "value": "11" + "value": "105" }, + { "begin": 379, "end": 436, "name": "JUMPDEST", "source": 0 }, + { "begin": 461, "end": 468, "name": "DUP2", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "JUMP", + "begin": 449, + "end": 481, + "name": "PUSH", "source": 0, - "value": "[in]" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, + { "begin": 449, "end": 481, "name": "AND", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "tag", + "begin": 449, + "end": 481, + "name": "PUSH", "source": 0, - "value": "10" + "value": "A885F4E3" }, - { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, + { "begin": 482, "end": 489, "name": "DUP3", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "PUSH [tag]", + "begin": 449, + "end": 490, + "name": "PUSH", "source": 0, - "value": "12" + "value": "40" }, + { "begin": 449, "end": 490, "name": "MLOAD", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP3", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "JUMP", + "begin": 449, + "end": 490, + "name": "PUSH", "source": 0, - "value": "[in]" + "value": "FFFFFFFF" }, + { "begin": 449, "end": 490, "name": "AND", "source": 0 }, { - "begin": 551, - "end": 699, - "name": "tag", + "begin": 449, + "end": 490, + "name": "PUSH", "source": 0, - "value": "9" + "value": "E0" }, - { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, - { "begin": 551, "end": 699, "name": "STOP", "source": 0 }, + { "begin": 449, "end": 490, "name": "SHL", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP2", "source": 0 }, + { "begin": 449, "end": 490, "name": "MSTORE", "source": 0 }, { - "begin": 238, - "end": 309, - "name": "tag", + "begin": 449, + "end": 490, + "name": "PUSH", "source": 0, - "value": "5" + "value": "4" }, - { "begin": 238, "end": 309, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 490, "name": "ADD", "source": 0 }, { - "begin": 238, - "end": 309, + "begin": 449, + "end": 490, "name": "PUSH [tag]", "source": 0, - "value": "13" + "value": "106" }, + { "begin": 449, "end": 490, "name": "SWAP2", "source": 0 }, + { "begin": 449, "end": 490, "name": "SWAP1", "source": 0 }, { - "begin": 238, - "end": 309, + "begin": 449, + "end": 490, "name": "PUSH [tag]", "source": 0, - "value": "14" + "value": "98" }, { - "begin": 238, - "end": 309, + "begin": 449, + "end": 490, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 238, - "end": 309, + "begin": 449, + "end": 490, "name": "tag", "source": 0, - "value": "13" + "value": "106" }, - { "begin": 238, "end": 309, "name": "JUMPDEST", "source": 0 }, - { "begin": 238, "end": 309, "name": "STOP", "source": 0 }, + { "begin": 449, "end": 490, "name": "JUMPDEST", "source": 0 }, { - "begin": 323, - "end": 537, - "name": "tag", + "begin": 449, + "end": 490, + "name": "PUSH", "source": 0, - "value": "6" + "value": "0" }, - { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, { - "begin": 323, - "end": 537, + "begin": 449, + "end": 490, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 449, "end": 490, "name": "MLOAD", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP1", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP4", "source": 0 }, + { "begin": 449, "end": 490, "name": "SUB", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP2", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP7", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP1", "source": 0 }, + { "begin": 449, "end": 490, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 449, "end": 490, "name": "ISZERO", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP1", "source": 0 }, + { "begin": 449, "end": 490, "name": "ISZERO", "source": 0 }, + { + "begin": 449, + "end": 490, "name": "PUSH [tag]", "source": 0, - "value": "15" + "value": "107" }, + { "begin": 449, "end": 490, "name": "JUMPI", "source": 0 }, { - "begin": 323, - "end": 537, + "begin": 449, + "end": 490, "name": "PUSH", "source": 0, - "value": "4" + "value": "0" }, - { "begin": 323, "end": 537, "name": "DUP1", "source": 0 }, - { "begin": 323, "end": 537, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 323, "end": 537, "name": "SUB", "source": 0 }, - { "begin": 323, "end": 537, "name": "DUP2", "source": 0 }, - { "begin": 323, "end": 537, "name": "ADD", "source": 0 }, - { "begin": 323, "end": 537, "name": "SWAP1", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP1", "source": 0 }, + { "begin": 449, "end": 490, "name": "REVERT", "source": 0 }, { - "begin": 323, - "end": 537, - "name": "PUSH [tag]", + "begin": 449, + "end": 490, + "name": "tag", "source": 0, - "value": "16" - }, - { "begin": 323, "end": 537, "name": "SWAP2", "source": 0 }, - { "begin": 323, "end": 537, "name": "SWAP1", "source": 0 }, - { - "begin": 323, - "end": 537, + "value": "107" + }, + { "begin": 449, "end": 490, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 490, "name": "POP", "source": 0 }, + { "begin": 449, "end": 490, "name": "GAS", "source": 0 }, + { "begin": 449, "end": 490, "name": "STATICCALL", "source": 0 }, + { "begin": 449, "end": 490, "name": "SWAP3", "source": 0 }, + { "begin": 449, "end": 490, "name": "POP", "source": 0 }, + { "begin": 449, "end": 490, "name": "POP", "source": 0 }, + { "begin": 449, "end": 490, "name": "POP", "source": 0 }, + { "begin": 449, "end": 490, "name": "DUP1", "source": 0 }, + { "begin": 449, "end": 490, "name": "ISZERO", "source": 0 }, + { + "begin": 449, + "end": 490, "name": "PUSH [tag]", "source": 0, - "value": "17" + "value": "108" }, + { "begin": 449, "end": 490, "name": "JUMPI", "source": 0 }, + { "begin": 449, "end": 490, "name": "POP", "source": 0 }, { - "begin": 323, - "end": 537, - "name": "JUMP", + "begin": 449, + "end": 490, + "name": "PUSH", "source": 0, - "value": "[in]" + "value": "1" }, { - "begin": 323, - "end": 537, + "begin": 449, + "end": 490, "name": "tag", "source": 0, - "value": "16" + "value": "108" }, - { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, + { "begin": 449, "end": 490, "name": "JUMPDEST", "source": 0 }, { - "begin": 323, - "end": 537, + "begin": 445, + "end": 502, "name": "PUSH [tag]", "source": 0, - "value": "18" + "value": "109" }, + { "begin": 445, "end": 502, "name": "JUMPI", "source": 0 }, { - "begin": 323, - "end": 537, - "name": "JUMP", + "begin": 445, + "end": 502, + "name": "PUSH [tag]", "source": 0, - "value": "[in]" + "value": "113" }, + { "begin": 445, "end": 502, "name": "JUMP", "source": 0 }, { - "begin": 323, - "end": 537, + "begin": 445, + "end": 502, "name": "tag", "source": 0, - "value": "15" + "value": "109" }, - { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, - { "begin": 323, "end": 537, "name": "STOP", "source": 0 }, + { "begin": 445, "end": 502, "name": "JUMPDEST", "source": 0 }, { - "begin": 195, - "end": 224, + "begin": 445, + "end": 502, "name": "tag", "source": 0, - "value": "8" + "value": "113" }, - { "begin": 195, "end": 224, "name": "JUMPDEST", "source": 0 }, + { "begin": 445, "end": 502, "name": "JUMPDEST", "source": 0 }, + { "begin": 305, "end": 508, "name": "POP", "source": 0 }, + { "begin": 305, "end": 508, "name": "POP", "source": 0 }, { - "begin": 195, - "end": 224, + "begin": 305, + "end": 508, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 551, - "end": 699, + "begin": 1106, + "end": 1122, "name": "tag", "source": 0, - "value": "12" - }, - { "begin": 551, "end": 699, "name": "JUMPDEST", "source": 0 }, - { "begin": 622, "end": 629, "name": "DUP1", "source": 0 }, - { - "begin": 610, - "end": 638, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" - }, - { "begin": 610, "end": 638, "name": "AND", "source": 0 }, - { - "begin": 610, - "end": 638, - "name": "PUSH", - "source": 0, - "value": "5EAF9BC1" + "value": "72" }, + { "begin": 1106, "end": 1122, "name": "JUMPDEST", "source": 0 }, { - "begin": 610, - "end": 640, + "begin": 1106, + "end": 1122, "name": "PUSH", "source": 0, - "value": "40" + "value": "4" }, - { "begin": 610, "end": 640, "name": "MLOAD", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP2", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "SLOAD", "source": 0 }, + { "begin": 1106, "end": 1122, "name": "DUP2", "source": 0 }, { - "begin": 610, - "end": 640, - "name": "PUSH", + "begin": 1106, + "end": 1122, + "name": "JUMP", "source": 0, - "value": "FFFFFFFF" + "value": "[out]" }, - { "begin": 610, "end": 640, "name": "AND", "source": 0 }, { - "begin": 610, - "end": 640, - "name": "PUSH", - "source": 0, - "value": "E0" + "begin": 7, + "end": 84, + "name": "tag", + "source": 1, + "value": "114" }, - { "begin": 610, "end": 640, "name": "SHL", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP2", "source": 0 }, - { "begin": 610, "end": 640, "name": "MSTORE", "source": 0 }, + { "begin": 7, "end": 84, "name": "JUMPDEST", "source": 1 }, { - "begin": 610, - "end": 640, + "begin": 44, + "end": 51, "name": "PUSH", - "source": 0, - "value": "4" + "source": 1, + "value": "0" }, - { "begin": 610, "end": 640, "name": "ADD", "source": 0 }, + { "begin": 73, "end": 78, "name": "DUP2", "source": 1 }, + { "begin": 62, "end": 78, "name": "SWAP1", "source": 1 }, + { "begin": 62, "end": 78, "name": "POP", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP2", "source": 1 }, + { "begin": 7, "end": 84, "name": "SWAP1", "source": 1 }, + { "begin": 7, "end": 84, "name": "POP", "source": 1 }, { - "begin": 610, - "end": 640, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 7, + "end": 84, + "name": "JUMP", + "source": 1, + "value": "[out]" }, { - "begin": 610, - "end": 640, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 90, + "end": 208, + "name": "tag", + "source": 1, + "value": "115" }, - { "begin": 610, "end": 640, "name": "MLOAD", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP4", "source": 0 }, - { "begin": 610, "end": 640, "name": "SUB", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP2", "source": 0 }, + { "begin": 90, "end": 208, "name": "JUMPDEST", "source": 1 }, { - "begin": 610, - "end": 640, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 1, + "value": "130" }, - { "begin": 610, "end": 640, "name": "DUP8", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, - { "begin": 610, "end": 640, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, - { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, + { "begin": 195, "end": 200, "name": "DUP2", "source": 1 }, { - "begin": 610, - "end": 640, + "begin": 177, + "end": 201, "name": "PUSH [tag]", - "source": 0, - "value": "21" + "source": 1, + "value": "114" }, - { "begin": 610, "end": 640, "name": "JUMPI", "source": 0 }, { - "begin": 610, - "end": 640, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 177, + "end": 201, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, - { "begin": 610, "end": 640, "name": "REVERT", "source": 0 }, { - "begin": 610, - "end": 640, + "begin": 177, + "end": 201, "name": "tag", - "source": 0, - "value": "21" + "source": 1, + "value": "130" }, - { "begin": 610, "end": 640, "name": "JUMPDEST", "source": 0 }, - { "begin": 610, "end": 640, "name": "POP", "source": 0 }, - { "begin": 610, "end": 640, "name": "GAS", "source": 0 }, - { "begin": 610, "end": 640, "name": "CALL", "source": 0 }, - { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, - { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, - { "begin": 610, "end": 640, "name": "ISZERO", "source": 0 }, + { "begin": 177, "end": 201, "name": "JUMPDEST", "source": 1 }, + { "begin": 172, "end": 175, "name": "DUP3", "source": 1 }, + { "begin": 165, "end": 202, "name": "MSTORE", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, + { "begin": 90, "end": 208, "name": "POP", "source": 1 }, { - "begin": 610, - "end": 640, - "name": "PUSH [tag]", - "source": 0, - "value": "23" + "begin": 90, + "end": 208, + "name": "JUMP", + "source": 1, + "value": "[out]" }, - { "begin": 610, "end": 640, "name": "JUMPI", "source": 0 }, { - "begin": 610, - "end": 640, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 214, + "end": 436, + "name": "tag", + "source": 1, + "value": "25" }, + { "begin": 214, "end": 436, "name": "JUMPDEST", "source": 1 }, { - "begin": 610, - "end": 640, + "begin": 307, + "end": 311, "name": "PUSH", - "source": 0, + "source": 1, "value": "0" }, - { "begin": 610, "end": 640, "name": "DUP1", "source": 0 }, { - "begin": 610, - "end": 640, - "name": "RETURNDATACOPY", - "source": 0 + "begin": 345, + "end": 347, + "name": "PUSH", + "source": 1, + "value": "20" }, + { "begin": 334, "end": 343, "name": "DUP3", "source": 1 }, + { "begin": 330, "end": 348, "name": "ADD", "source": 1 }, + { "begin": 322, "end": 348, "name": "SWAP1", "source": 1 }, + { "begin": 322, "end": 348, "name": "POP", "source": 1 }, { - "begin": 610, - "end": 640, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "132" }, { - "begin": 610, - "end": 640, + "begin": 426, + "end": 427, "name": "PUSH", - "source": 0, + "source": 1, "value": "0" }, - { "begin": 610, "end": 640, "name": "REVERT", "source": 0 }, + { "begin": 415, "end": 424, "name": "DUP4", "source": 1 }, + { "begin": 411, "end": 428, "name": "ADD", "source": 1 }, + { "begin": 402, "end": 408, "name": "DUP5", "source": 1 }, { - "begin": 610, - "end": 640, - "name": "tag", - "source": 0, - "value": "23" + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 1, + "value": "115" }, - { "begin": 610, "end": 640, "name": "JUMPDEST", "source": 0 }, - { "begin": 610, "end": 640, "name": "POP", "source": 0 }, - { "begin": 610, "end": 640, "name": "POP", "source": 0 }, - { "begin": 610, "end": 640, "name": "POP", "source": 0 }, - { "begin": 610, "end": 640, "name": "POP", "source": 0 }, - { "begin": 666, "end": 673, "name": "DUP1", "source": 0 }, { - "begin": 654, - "end": 686, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 358, + "end": 429, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 654, "end": 686, "name": "AND", "source": 0 }, { - "begin": 654, - "end": 686, - "name": "PUSH", - "source": 0, - "value": "CB30E696" + "begin": 358, + "end": 429, + "name": "tag", + "source": 1, + "value": "132" }, + { "begin": 358, "end": 429, "name": "JUMPDEST", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP3", "source": 1 }, + { "begin": 214, "end": 436, "name": "SWAP2", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, + { "begin": 214, "end": 436, "name": "POP", "source": 1 }, { - "begin": 654, - "end": 688, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 214, + "end": 436, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 523, + "end": 640, + "name": "tag", + "source": 1, + "value": "117" }, - { "begin": 654, "end": 688, "name": "MLOAD", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP2", "source": 0 }, + { "begin": 523, "end": 640, "name": "JUMPDEST", "source": 1 }, { - "begin": 654, - "end": 688, + "begin": 632, + "end": 633, "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" + "source": 1, + "value": "0" }, - { "begin": 654, "end": 688, "name": "AND", "source": 0 }, + { "begin": 629, "end": 630, "name": "DUP1", "source": 1 }, + { "begin": 622, "end": 634, "name": "REVERT", "source": 1 }, { - "begin": 654, - "end": 688, - "name": "PUSH", - "source": 0, - "value": "E0" + "begin": 769, + "end": 891, + "name": "tag", + "source": 1, + "value": "119" }, - { "begin": 654, "end": 688, "name": "SHL", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP2", "source": 0 }, - { "begin": 654, "end": 688, "name": "MSTORE", "source": 0 }, + { "begin": 769, "end": 891, "name": "JUMPDEST", "source": 1 }, { - "begin": 654, - "end": 688, - "name": "PUSH", - "source": 0, - "value": "4" + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "137" }, - { "begin": 654, "end": 688, "name": "ADD", "source": 0 }, + { "begin": 860, "end": 865, "name": "DUP2", "source": 1 }, { - "begin": 654, - "end": 688, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 1, + "value": "114" }, { - "begin": 654, - "end": 688, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 842, + "end": 866, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 654, "end": 688, "name": "MLOAD", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP4", "source": 0 }, - { "begin": 654, "end": 688, "name": "SUB", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP2", "source": 0 }, { - "begin": 654, - "end": 688, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 842, + "end": 866, + "name": "tag", + "source": 1, + "value": "137" }, - { "begin": 654, "end": 688, "name": "DUP8", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, - { "begin": 654, "end": 688, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, - { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, + { "begin": 842, "end": 866, "name": "JUMPDEST", "source": 1 }, + { "begin": 835, "end": 840, "name": "DUP2", "source": 1 }, + { "begin": 832, "end": 867, "name": "EQ", "source": 1 }, { - "begin": 654, - "end": 688, + "begin": 822, + "end": 885, "name": "PUSH [tag]", - "source": 0, - "value": "24" + "source": 1, + "value": "138" }, - { "begin": 654, "end": 688, "name": "JUMPI", "source": 0 }, + { "begin": 822, "end": 885, "name": "JUMPI", "source": 1 }, { - "begin": 654, - "end": 688, + "begin": 881, + "end": 882, "name": "PUSH", - "source": 0, + "source": 1, "value": "0" }, - { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, - { "begin": 654, "end": 688, "name": "REVERT", "source": 0 }, + { "begin": 878, "end": 879, "name": "DUP1", "source": 1 }, + { "begin": 871, "end": 883, "name": "REVERT", "source": 1 }, { - "begin": 654, - "end": 688, + "begin": 822, + "end": 885, "name": "tag", - "source": 0, - "value": "24" + "source": 1, + "value": "138" }, - { "begin": 654, "end": 688, "name": "JUMPDEST", "source": 0 }, - { "begin": 654, "end": 688, "name": "POP", "source": 0 }, - { "begin": 654, "end": 688, "name": "GAS", "source": 0 }, - { "begin": 654, "end": 688, "name": "CALL", "source": 0 }, - { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, - { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, - { "begin": 654, "end": 688, "name": "ISZERO", "source": 0 }, + { "begin": 822, "end": 885, "name": "JUMPDEST", "source": 1 }, + { "begin": 769, "end": 891, "name": "POP", "source": 1 }, { - "begin": 654, - "end": 688, - "name": "PUSH [tag]", - "source": 0, - "value": "26" + "begin": 769, + "end": 891, + "name": "JUMP", + "source": 1, + "value": "[out]" }, - { "begin": 654, "end": 688, "name": "JUMPI", "source": 0 }, { - "begin": 654, - "end": 688, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 897, + "end": 1036, + "name": "tag", + "source": 1, + "value": "120" }, + { "begin": 897, "end": 1036, "name": "JUMPDEST", "source": 1 }, { - "begin": 654, - "end": 688, + "begin": 943, + "end": 948, "name": "PUSH", - "source": 0, + "source": 1, "value": "0" }, - { "begin": 654, "end": 688, "name": "DUP1", "source": 0 }, + { "begin": 981, "end": 987, "name": "DUP2", "source": 1 }, + { "begin": 968, "end": 988, "name": "CALLDATALOAD", "source": 1 }, + { "begin": 959, "end": 988, "name": "SWAP1", "source": 1 }, + { "begin": 959, "end": 988, "name": "POP", "source": 1 }, { - "begin": 654, - "end": 688, - "name": "RETURNDATACOPY", - "source": 0 + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "140" }, + { "begin": 1024, "end": 1029, "name": "DUP2", "source": 1 }, { - "begin": 654, - "end": 688, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 1, + "value": "119" }, { - "begin": 654, - "end": 688, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 997, + "end": 1030, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 654, "end": 688, "name": "REVERT", "source": 0 }, { - "begin": 654, - "end": 688, + "begin": 997, + "end": 1030, "name": "tag", - "source": 0, - "value": "26" + "source": 1, + "value": "140" }, - { "begin": 654, "end": 688, "name": "JUMPDEST", "source": 0 }, - { "begin": 654, "end": 688, "name": "POP", "source": 0 }, - { "begin": 654, "end": 688, "name": "POP", "source": 0 }, - { "begin": 654, "end": 688, "name": "POP", "source": 0 }, - { "begin": 654, "end": 688, "name": "POP", "source": 0 }, - { "begin": 551, "end": 699, "name": "POP", "source": 0 }, + { "begin": 997, "end": 1030, "name": "JUMPDEST", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP3", "source": 1 }, + { "begin": 897, "end": 1036, "name": "SWAP2", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, + { "begin": 897, "end": 1036, "name": "POP", "source": 1 }, { - "begin": 551, - "end": 699, + "begin": 897, + "end": 1036, "name": "JUMP", - "source": 0, + "source": 1, "value": "[out]" }, { - "begin": 238, - "end": 309, + "begin": 1042, + "end": 1371, "name": "tag", - "source": 0, - "value": "14" + "source": 1, + "value": "28" }, - { "begin": 238, "end": 309, "name": "JUMPDEST", "source": 0 }, + { "begin": 1042, "end": 1371, "name": "JUMPDEST", "source": 1 }, { - "begin": 282, - "end": 290, + "begin": 1101, + "end": 1107, "name": "PUSH", - "source": 0, + "source": 1, "value": "0" }, - { "begin": 282, "end": 290, "name": "DUP1", "source": 0 }, - { "begin": 282, "end": 290, "name": "REVERT", "source": 0 }, { - "begin": 323, - "end": 537, - "name": "tag", - "source": 0, - "value": "18" + "begin": 1150, + "end": 1152, + "name": "PUSH", + "source": 1, + "value": "20" }, - { "begin": 323, "end": 537, "name": "JUMPDEST", "source": 0 }, - { "begin": 412, "end": 419, "name": "DUP2", "source": 0 }, + { "begin": 1138, "end": 1147, "name": "DUP3", "source": 1 }, + { "begin": 1129, "end": 1136, "name": "DUP5", "source": 1 }, + { "begin": 1125, "end": 1148, "name": "SUB", "source": 1 }, + { "begin": 1121, "end": 1153, "name": "SLT", "source": 1 }, + { "begin": 1118, "end": 1237, "name": "ISZERO", "source": 1 }, { - "begin": 400, - "end": 432, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 1118, + "end": 1237, + "name": "PUSH [tag]", + "source": 1, + "value": "142" }, - { "begin": 400, "end": 432, "name": "AND", "source": 0 }, + { "begin": 1118, "end": 1237, "name": "JUMPI", "source": 1 }, { - "begin": 400, - "end": 432, - "name": "PUSH", - "source": 0, - "value": "A885F4E3" + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "143" }, - { "begin": 433, "end": 440, "name": "DUP3", "source": 0 }, { - "begin": 400, - "end": 441, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 1, + "value": "117" }, - { "begin": 400, "end": 441, "name": "MLOAD", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP3", "source": 0 }, { - "begin": 400, - "end": 441, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" + "begin": 1156, + "end": 1235, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 400, "end": 441, "name": "AND", "source": 0 }, { - "begin": 400, - "end": 441, - "name": "PUSH", - "source": 0, - "value": "E0" + "begin": 1156, + "end": 1235, + "name": "tag", + "source": 1, + "value": "143" + }, + { "begin": 1156, "end": 1235, "name": "JUMPDEST", "source": 1 }, + { + "begin": 1118, + "end": 1237, + "name": "tag", + "source": 1, + "value": "142" }, - { "begin": 400, "end": 441, "name": "SHL", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP2", "source": 0 }, - { "begin": 400, "end": 441, "name": "MSTORE", "source": 0 }, + { "begin": 1118, "end": 1237, "name": "JUMPDEST", "source": 1 }, { - "begin": 400, - "end": 441, + "begin": 1276, + "end": 1277, "name": "PUSH", - "source": 0, - "value": "4" + "source": 1, + "value": "0" }, - { "begin": 400, "end": 441, "name": "ADD", "source": 0 }, { - "begin": 400, - "end": 441, + "begin": 1301, + "end": 1354, "name": "PUSH [tag]", - "source": 0, - "value": "29" + "source": 1, + "value": "144" }, - { "begin": 400, "end": 441, "name": "SWAP2", "source": 0 }, - { "begin": 400, "end": 441, "name": "SWAP1", "source": 0 }, + { "begin": 1346, "end": 1353, "name": "DUP5", "source": 1 }, + { "begin": 1337, "end": 1343, "name": "DUP3", "source": 1 }, + { "begin": 1326, "end": 1335, "name": "DUP6", "source": 1 }, + { "begin": 1322, "end": 1344, "name": "ADD", "source": 1 }, { - "begin": 400, - "end": 441, + "begin": 1301, + "end": 1354, "name": "PUSH [tag]", - "source": 0, - "value": "30" + "source": 1, + "value": "120" }, { - "begin": 400, - "end": 441, + "begin": 1301, + "end": 1354, "name": "JUMP", - "source": 0, + "source": 1, "value": "[in]" }, { - "begin": 400, - "end": 441, + "begin": 1301, + "end": 1354, "name": "tag", - "source": 0, - "value": "29" + "source": 1, + "value": "144" + }, + { "begin": 1301, "end": 1354, "name": "JUMPDEST", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "SWAP2", "source": 1 }, + { "begin": 1291, "end": 1354, "name": "POP", "source": 1 }, + { "begin": 1247, "end": 1364, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP3", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "SWAP2", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { "begin": 1042, "end": 1371, "name": "POP", "source": 1 }, + { + "begin": 1042, + "end": 1371, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 1377, + "end": 1851, + "name": "tag", + "source": 1, + "value": "41" }, - { "begin": 400, "end": 441, "name": "JUMPDEST", "source": 0 }, + { "begin": 1377, "end": 1851, "name": "JUMPDEST", "source": 1 }, { - "begin": 400, - "end": 441, + "begin": 1445, + "end": 1451, "name": "PUSH", - "source": 0, + "source": 1, "value": "0" }, + { "begin": 1453, "end": 1459, "name": "DUP1", "source": 1 }, { - "begin": 400, - "end": 441, + "begin": 1502, + "end": 1504, "name": "PUSH", - "source": 0, + "source": 1, "value": "40" }, - { "begin": 400, "end": 441, "name": "MLOAD", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP4", "source": 0 }, - { "begin": 400, "end": 441, "name": "SUB", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP2", "source": 0 }, + { "begin": 1490, "end": 1499, "name": "DUP4", "source": 1 }, + { "begin": 1481, "end": 1488, "name": "DUP6", "source": 1 }, + { "begin": 1477, "end": 1500, "name": "SUB", "source": 1 }, + { "begin": 1473, "end": 1505, "name": "SLT", "source": 1 }, + { "begin": 1470, "end": 1589, "name": "ISZERO", "source": 1 }, { - "begin": 400, - "end": 441, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 1470, + "end": 1589, + "name": "PUSH [tag]", + "source": 1, + "value": "146" }, - { "begin": 400, "end": 441, "name": "DUP8", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, - { "begin": 400, "end": 441, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 400, "end": 441, "name": "ISZERO", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, - { "begin": 400, "end": 441, "name": "ISZERO", "source": 0 }, + { "begin": 1470, "end": 1589, "name": "JUMPI", "source": 1 }, { - "begin": 400, - "end": 441, + "begin": 1508, + "end": 1587, "name": "PUSH [tag]", - "source": 0, - "value": "31" + "source": 1, + "value": "147" }, - { "begin": 400, "end": 441, "name": "JUMPI", "source": 0 }, { - "begin": 400, - "end": 441, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 1508, + "end": 1587, + "name": "PUSH [tag]", + "source": 1, + "value": "117" }, - { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, - { "begin": 400, "end": 441, "name": "REVERT", "source": 0 }, { - "begin": 400, - "end": 441, - "name": "tag", - "source": 0, - "value": "31" + "begin": 1508, + "end": 1587, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 400, "end": 441, "name": "JUMPDEST", "source": 0 }, - { "begin": 400, "end": 441, "name": "POP", "source": 0 }, - { "begin": 400, "end": 441, "name": "GAS", "source": 0 }, - { "begin": 400, "end": 441, "name": "CALL", "source": 0 }, - { "begin": 400, "end": 441, "name": "SWAP3", "source": 0 }, - { "begin": 400, "end": 441, "name": "POP", "source": 0 }, - { "begin": 400, "end": 441, "name": "POP", "source": 0 }, - { "begin": 400, "end": 441, "name": "POP", "source": 0 }, - { "begin": 400, "end": 441, "name": "DUP1", "source": 0 }, - { "begin": 400, "end": 441, "name": "ISZERO", "source": 0 }, { - "begin": 400, - "end": 441, - "name": "PUSH [tag]", - "source": 0, - "value": "32" + "begin": 1508, + "end": 1587, + "name": "tag", + "source": 1, + "value": "147" }, - { "begin": 400, "end": 441, "name": "JUMPI", "source": 0 }, - { "begin": 400, "end": 441, "name": "POP", "source": 0 }, + { "begin": 1508, "end": 1587, "name": "JUMPDEST", "source": 1 }, { - "begin": 400, - "end": 441, - "name": "PUSH", - "source": 0, - "value": "1" + "begin": 1470, + "end": 1589, + "name": "tag", + "source": 1, + "value": "146" }, + { "begin": 1470, "end": 1589, "name": "JUMPDEST", "source": 1 }, { - "begin": 400, - "end": 441, - "name": "tag", - "source": 0, - "value": "32" + "begin": 1628, + "end": 1629, + "name": "PUSH", + "source": 1, + "value": "0" }, - { "begin": 400, "end": 441, "name": "JUMPDEST", "source": 0 }, { - "begin": 396, - "end": 455, + "begin": 1653, + "end": 1706, "name": "PUSH [tag]", - "source": 0, - "value": "33" + "source": 1, + "value": "148" }, - { "begin": 396, "end": 455, "name": "JUMPI", "source": 0 }, + { "begin": 1698, "end": 1705, "name": "DUP6", "source": 1 }, + { "begin": 1689, "end": 1695, "name": "DUP3", "source": 1 }, + { "begin": 1678, "end": 1687, "name": "DUP7", "source": 1 }, + { "begin": 1674, "end": 1696, "name": "ADD", "source": 1 }, { - "begin": 396, - "end": 455, + "begin": 1653, + "end": 1706, "name": "PUSH [tag]", - "source": 0, - "value": "37" + "source": 1, + "value": "120" }, - { "begin": 396, "end": 455, "name": "JUMP", "source": 0 }, { - "begin": 396, - "end": 455, - "name": "tag", - "source": 0, - "value": "33" + "begin": 1653, + "end": 1706, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 396, "end": 455, "name": "JUMPDEST", "source": 0 }, { - "begin": 396, - "end": 455, + "begin": 1653, + "end": 1706, "name": "tag", - "source": 0, - "value": "37" + "source": 1, + "value": "148" }, - { "begin": 396, "end": 455, "name": "JUMPDEST", "source": 0 }, - { "begin": 484, "end": 491, "name": "DUP2", "source": 0 }, + { "begin": 1653, "end": 1706, "name": "JUMPDEST", "source": 1 }, + { "begin": 1643, "end": 1706, "name": "SWAP3", "source": 1 }, + { "begin": 1643, "end": 1706, "name": "POP", "source": 1 }, + { "begin": 1599, "end": 1716, "name": "POP", "source": 1 }, { - "begin": 472, - "end": 504, + "begin": 1755, + "end": 1757, "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "source": 1, + "value": "20" }, - { "begin": 472, "end": 504, "name": "AND", "source": 0 }, { - "begin": 472, - "end": 504, - "name": "PUSH", - "source": 0, - "value": "A885F4E3" + "begin": 1781, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "149" }, - { "begin": 505, "end": 512, "name": "DUP3", "source": 0 }, + { "begin": 1826, "end": 1833, "name": "DUP6", "source": 1 }, + { "begin": 1817, "end": 1823, "name": "DUP3", "source": 1 }, + { "begin": 1806, "end": 1815, "name": "DUP7", "source": 1 }, + { "begin": 1802, "end": 1824, "name": "ADD", "source": 1 }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 1781, + "end": 1834, + "name": "PUSH [tag]", + "source": 1, + "value": "120" }, - { "begin": 472, "end": 513, "name": "MLOAD", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP3", "source": 0 }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" + "begin": 1781, + "end": 1834, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 472, "end": 513, "name": "AND", "source": 0 }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "E0" + "begin": 1781, + "end": 1834, + "name": "tag", + "source": 1, + "value": "149" + }, + { "begin": 1781, "end": 1834, "name": "JUMPDEST", "source": 1 }, + { "begin": 1771, "end": 1834, "name": "SWAP2", "source": 1 }, + { "begin": 1771, "end": 1834, "name": "POP", "source": 1 }, + { "begin": 1726, "end": 1844, "name": "POP", "source": 1 }, + { "begin": 1377, "end": 1851, "name": "SWAP3", "source": 1 }, + { "begin": 1377, "end": 1851, "name": "POP", "source": 1 }, + { "begin": 1377, "end": 1851, "name": "SWAP3", "source": 1 }, + { "begin": 1377, "end": 1851, "name": "SWAP1", "source": 1 }, + { "begin": 1377, "end": 1851, "name": "POP", "source": 1 }, + { + "begin": 1377, + "end": 1851, + "name": "JUMP", + "source": 1, + "value": "[out]" }, - { "begin": 472, "end": 513, "name": "SHL", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP2", "source": 0 }, - { "begin": 472, "end": 513, "name": "MSTORE", "source": 0 }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "4" + "begin": 1857, + "end": 1983, + "name": "tag", + "source": 1, + "value": "121" }, - { "begin": 472, "end": 513, "name": "ADD", "source": 0 }, + { "begin": 1857, "end": 1983, "name": "JUMPDEST", "source": 1 }, { - "begin": 472, - "end": 513, - "name": "PUSH [tag]", - "source": 0, - "value": "38" + "begin": 1894, + "end": 1901, + "name": "PUSH", + "source": 1, + "value": "0" }, - { "begin": 472, "end": 513, "name": "SWAP2", "source": 0 }, - { "begin": 472, "end": 513, "name": "SWAP1", "source": 0 }, { - "begin": 472, - "end": 513, - "name": "PUSH [tag]", - "source": 0, - "value": "30" + "begin": 1934, + "end": 1976, + "name": "PUSH", + "source": 1, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, + { "begin": 1927, "end": 1932, "name": "DUP3", "source": 1 }, + { "begin": 1923, "end": 1977, "name": "AND", "source": 1 }, + { "begin": 1912, "end": 1977, "name": "SWAP1", "source": 1 }, + { "begin": 1912, "end": 1977, "name": "POP", "source": 1 }, + { "begin": 1857, "end": 1983, "name": "SWAP2", "source": 1 }, + { "begin": 1857, "end": 1983, "name": "SWAP1", "source": 1 }, + { "begin": 1857, "end": 1983, "name": "POP", "source": 1 }, { - "begin": 472, - "end": 513, + "begin": 1857, + "end": 1983, "name": "JUMP", - "source": 0, - "value": "[in]" + "source": 1, + "value": "[out]" }, { - "begin": 472, - "end": 513, + "begin": 1989, + "end": 2085, "name": "tag", - "source": 0, - "value": "38" + "source": 1, + "value": "122" }, - { "begin": 472, "end": 513, "name": "JUMPDEST", "source": 0 }, + { "begin": 1989, "end": 2085, "name": "JUMPDEST", "source": 1 }, { - "begin": 472, - "end": 513, + "begin": 2026, + "end": 2033, "name": "PUSH", - "source": 0, + "source": 1, "value": "0" }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 2055, + "end": 2079, + "name": "PUSH [tag]", + "source": 1, + "value": "152" }, - { "begin": 472, "end": 513, "name": "MLOAD", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP4", "source": 0 }, - { "begin": 472, "end": 513, "name": "SUB", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP2", "source": 0 }, + { "begin": 2073, "end": 2078, "name": "DUP3", "source": 1 }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 2055, + "end": 2079, + "name": "PUSH [tag]", + "source": 1, + "value": "121" + }, + { + "begin": 2055, + "end": 2079, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 472, "end": 513, "name": "DUP8", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, - { "begin": 472, "end": 513, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 472, "end": 513, "name": "ISZERO", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, - { "begin": 472, "end": 513, "name": "ISZERO", "source": 0 }, { - "begin": 472, - "end": 513, - "name": "PUSH [tag]", - "source": 0, - "value": "39" + "begin": 2055, + "end": 2079, + "name": "tag", + "source": 1, + "value": "152" }, - { "begin": 472, "end": 513, "name": "JUMPI", "source": 0 }, + { "begin": 2055, "end": 2079, "name": "JUMPDEST", "source": 1 }, + { "begin": 2044, "end": 2079, "name": "SWAP1", "source": 1 }, + { "begin": 2044, "end": 2079, "name": "POP", "source": 1 }, + { "begin": 1989, "end": 2085, "name": "SWAP2", "source": 1 }, + { "begin": 1989, "end": 2085, "name": "SWAP1", "source": 1 }, + { "begin": 1989, "end": 2085, "name": "POP", "source": 1 }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 1989, + "end": 2085, + "name": "JUMP", + "source": 1, + "value": "[out]" }, - { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, - { "begin": 472, "end": 513, "name": "REVERT", "source": 0 }, { - "begin": 472, - "end": 513, + "begin": 2091, + "end": 2213, "name": "tag", - "source": 0, - "value": "39" + "source": 1, + "value": "123" }, - { "begin": 472, "end": 513, "name": "JUMPDEST", "source": 0 }, - { "begin": 472, "end": 513, "name": "POP", "source": 0 }, - { "begin": 472, "end": 513, "name": "GAS", "source": 0 }, - { "begin": 472, "end": 513, "name": "CALL", "source": 0 }, - { "begin": 472, "end": 513, "name": "SWAP3", "source": 0 }, - { "begin": 472, "end": 513, "name": "POP", "source": 0 }, - { "begin": 472, "end": 513, "name": "POP", "source": 0 }, - { "begin": 472, "end": 513, "name": "POP", "source": 0 }, - { "begin": 472, "end": 513, "name": "DUP1", "source": 0 }, - { "begin": 472, "end": 513, "name": "ISZERO", "source": 0 }, + { "begin": 2091, "end": 2213, "name": "JUMPDEST", "source": 1 }, { - "begin": 472, - "end": 513, + "begin": 2164, + "end": 2188, "name": "PUSH [tag]", - "source": 0, - "value": "40" + "source": 1, + "value": "154" }, - { "begin": 472, "end": 513, "name": "JUMPI", "source": 0 }, - { "begin": 472, "end": 513, "name": "POP", "source": 0 }, + { "begin": 2182, "end": 2187, "name": "DUP2", "source": 1 }, { - "begin": 472, - "end": 513, - "name": "PUSH", - "source": 0, - "value": "1" + "begin": 2164, + "end": 2188, + "name": "PUSH [tag]", + "source": 1, + "value": "122" }, { - "begin": 472, - "end": 513, - "name": "tag", - "source": 0, - "value": "40" + "begin": 2164, + "end": 2188, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 472, "end": 513, "name": "JUMPDEST", "source": 0 }, { - "begin": 468, - "end": 527, - "name": "PUSH [tag]", - "source": 0, - "value": "41" + "begin": 2164, + "end": 2188, + "name": "tag", + "source": 1, + "value": "154" }, - { "begin": 468, "end": 527, "name": "JUMPI", "source": 0 }, + { "begin": 2164, "end": 2188, "name": "JUMPDEST", "source": 1 }, + { "begin": 2157, "end": 2162, "name": "DUP2", "source": 1 }, + { "begin": 2154, "end": 2189, "name": "EQ", "source": 1 }, { - "begin": 468, - "end": 527, + "begin": 2144, + "end": 2207, "name": "PUSH [tag]", - "source": 0, - "value": "45" + "source": 1, + "value": "155" }, - { "begin": 468, "end": 527, "name": "JUMP", "source": 0 }, + { "begin": 2144, "end": 2207, "name": "JUMPI", "source": 1 }, { - "begin": 468, - "end": 527, - "name": "tag", - "source": 0, - "value": "41" + "begin": 2203, + "end": 2204, + "name": "PUSH", + "source": 1, + "value": "0" }, - { "begin": 468, "end": 527, "name": "JUMPDEST", "source": 0 }, + { "begin": 2200, "end": 2201, "name": "DUP1", "source": 1 }, + { "begin": 2193, "end": 2205, "name": "REVERT", "source": 1 }, { - "begin": 468, - "end": 527, + "begin": 2144, + "end": 2207, "name": "tag", - "source": 0, - "value": "45" + "source": 1, + "value": "155" }, - { "begin": 468, "end": 527, "name": "JUMPDEST", "source": 0 }, - { "begin": 323, "end": 537, "name": "POP", "source": 0 }, - { "begin": 323, "end": 537, "name": "POP", "source": 0 }, + { "begin": 2144, "end": 2207, "name": "JUMPDEST", "source": 1 }, + { "begin": 2091, "end": 2213, "name": "POP", "source": 1 }, { - "begin": 323, - "end": 537, + "begin": 2091, + "end": 2213, "name": "JUMP", - "source": 0, + "source": 1, "value": "[out]" }, { - "begin": 7, - "end": 146, + "begin": 2219, + "end": 2358, "name": "tag", "source": 1, - "value": "47" + "value": "124" }, - { "begin": 7, "end": 146, "name": "JUMPDEST", "source": 1 }, + { "begin": 2219, "end": 2358, "name": "JUMPDEST", "source": 1 }, { - "begin": 7, - "end": 146, + "begin": 2265, + "end": 2270, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 91, "end": 97, "name": "DUP2", "source": 1 }, - { "begin": 78, "end": 98, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 69, "end": 98, "name": "SWAP1", "source": 1 }, - { "begin": 69, "end": 98, "name": "POP", "source": 1 }, + { "begin": 2303, "end": 2309, "name": "DUP2", "source": 1 }, + { + "begin": 2290, + "end": 2310, + "name": "CALLDATALOAD", + "source": 1 + }, + { "begin": 2281, "end": 2310, "name": "SWAP1", "source": 1 }, + { "begin": 2281, "end": 2310, "name": "POP", "source": 1 }, { - "begin": 107, - "end": 140, + "begin": 2319, + "end": 2352, "name": "PUSH [tag]", "source": 1, - "value": "49" + "value": "157" }, - { "begin": 134, "end": 139, "name": "DUP2", "source": 1 }, + { "begin": 2346, "end": 2351, "name": "DUP2", "source": 1 }, { - "begin": 107, - "end": 140, + "begin": 2319, + "end": 2352, "name": "PUSH [tag]", "source": 1, - "value": "50" + "value": "123" }, { - "begin": 107, - "end": 140, + "begin": 2319, + "end": 2352, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 107, - "end": 140, + "begin": 2319, + "end": 2352, "name": "tag", "source": 1, - "value": "49" + "value": "157" }, - { "begin": 107, "end": 140, "name": "JUMPDEST", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP3", "source": 1 }, - { "begin": 59, "end": 146, "name": "SWAP2", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, - { "begin": 59, "end": 146, "name": "POP", "source": 1 }, + { "begin": 2319, "end": 2352, "name": "JUMPDEST", "source": 1 }, + { "begin": 2219, "end": 2358, "name": "SWAP3", "source": 1 }, + { "begin": 2219, "end": 2358, "name": "SWAP2", "source": 1 }, + { "begin": 2219, "end": 2358, "name": "POP", "source": 1 }, + { "begin": 2219, "end": 2358, "name": "POP", "source": 1 }, { - "begin": 59, - "end": 146, + "begin": 2219, + "end": 2358, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 152, - "end": 414, + "begin": 2364, + "end": 2693, "name": "tag", "source": 1, - "value": "11" + "value": "48" }, - { "begin": 152, "end": 414, "name": "JUMPDEST", "source": 1 }, + { "begin": 2364, "end": 2693, "name": "JUMPDEST", "source": 1 }, { - "begin": 152, - "end": 414, + "begin": 2423, + "end": 2429, "name": "PUSH", "source": 1, "value": "0" }, { - "begin": 260, - "end": 262, + "begin": 2472, + "end": 2474, "name": "PUSH", "source": 1, "value": "20" }, - { "begin": 248, "end": 257, "name": "DUP3", "source": 1 }, - { "begin": 239, "end": 246, "name": "DUP5", "source": 1 }, - { "begin": 235, "end": 258, "name": "SUB", "source": 1 }, - { "begin": 231, "end": 263, "name": "SLT", "source": 1 }, - { "begin": 228, "end": 230, "name": "ISZERO", "source": 1 }, + { "begin": 2460, "end": 2469, "name": "DUP3", "source": 1 }, + { "begin": 2451, "end": 2458, "name": "DUP5", "source": 1 }, + { "begin": 2447, "end": 2470, "name": "SUB", "source": 1 }, + { "begin": 2443, "end": 2475, "name": "SLT", "source": 1 }, + { "begin": 2440, "end": 2559, "name": "ISZERO", "source": 1 }, { - "begin": 228, - "end": 230, + "begin": 2440, + "end": 2559, "name": "PUSH [tag]", "source": 1, - "value": "52" + "value": "159" }, - { "begin": 228, "end": 230, "name": "JUMPI", "source": 1 }, + { "begin": 2440, "end": 2559, "name": "JUMPI", "source": 1 }, { - "begin": 276, - "end": 277, - "name": "PUSH", + "begin": 2478, + "end": 2557, + "name": "PUSH [tag]", "source": 1, - "value": "0" + "value": "160" + }, + { + "begin": 2478, + "end": 2557, + "name": "PUSH [tag]", + "source": 1, + "value": "117" + }, + { + "begin": 2478, + "end": 2557, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 273, "end": 274, "name": "DUP1", "source": 1 }, - { "begin": 266, "end": 278, "name": "REVERT", "source": 1 }, { - "begin": 228, - "end": 230, + "begin": 2478, + "end": 2557, "name": "tag", "source": 1, - "value": "52" + "value": "160" + }, + { "begin": 2478, "end": 2557, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2440, + "end": 2559, + "name": "tag", + "source": 1, + "value": "159" }, - { "begin": 228, "end": 230, "name": "JUMPDEST", "source": 1 }, + { "begin": 2440, "end": 2559, "name": "JUMPDEST", "source": 1 }, { - "begin": 319, - "end": 320, + "begin": 2598, + "end": 2599, "name": "PUSH", "source": 1, "value": "0" }, { - "begin": 344, - "end": 397, + "begin": 2623, + "end": 2676, "name": "PUSH [tag]", "source": 1, - "value": "53" + "value": "161" }, - { "begin": 389, "end": 396, "name": "DUP5", "source": 1 }, - { "begin": 380, "end": 386, "name": "DUP3", "source": 1 }, - { "begin": 369, "end": 378, "name": "DUP6", "source": 1 }, - { "begin": 365, "end": 387, "name": "ADD", "source": 1 }, + { "begin": 2668, "end": 2675, "name": "DUP5", "source": 1 }, + { "begin": 2659, "end": 2665, "name": "DUP3", "source": 1 }, + { "begin": 2648, "end": 2657, "name": "DUP6", "source": 1 }, + { "begin": 2644, "end": 2666, "name": "ADD", "source": 1 }, { - "begin": 344, - "end": 397, + "begin": 2623, + "end": 2676, "name": "PUSH [tag]", "source": 1, - "value": "47" + "value": "124" }, { - "begin": 344, - "end": 397, + "begin": 2623, + "end": 2676, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 344, - "end": 397, + "begin": 2623, + "end": 2676, "name": "tag", "source": 1, - "value": "53" - }, - { "begin": 344, "end": 397, "name": "JUMPDEST", "source": 1 }, - { "begin": 334, "end": 397, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 397, "name": "POP", "source": 1 }, - { "begin": 290, "end": 407, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP3", "source": 1 }, - { "begin": 218, "end": 414, "name": "SWAP2", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { "begin": 218, "end": 414, "name": "POP", "source": 1 }, - { - "begin": 218, - "end": 414, + "value": "161" + }, + { "begin": 2623, "end": 2676, "name": "JUMPDEST", "source": 1 }, + { "begin": 2613, "end": 2676, "name": "SWAP2", "source": 1 }, + { "begin": 2613, "end": 2676, "name": "POP", "source": 1 }, + { "begin": 2569, "end": 2686, "name": "POP", "source": 1 }, + { "begin": 2364, "end": 2693, "name": "SWAP3", "source": 1 }, + { "begin": 2364, "end": 2693, "name": "SWAP2", "source": 1 }, + { "begin": 2364, "end": 2693, "name": "POP", "source": 1 }, + { "begin": 2364, "end": 2693, "name": "POP", "source": 1 }, + { + "begin": 2364, + "end": 2693, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 420, - "end": 827, + "begin": 2699, + "end": 3173, "name": "tag", "source": 1, - "value": "17" + "value": "69" }, - { "begin": 420, "end": 827, "name": "JUMPDEST", "source": 1 }, + { "begin": 2699, "end": 3173, "name": "JUMPDEST", "source": 1 }, { - "begin": 420, - "end": 827, + "begin": 2767, + "end": 2773, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 420, "end": 827, "name": "DUP1", "source": 1 }, + { "begin": 2775, "end": 2781, "name": "DUP1", "source": 1 }, { - "begin": 545, - "end": 547, + "begin": 2824, + "end": 2826, "name": "PUSH", "source": 1, "value": "40" }, - { "begin": 533, "end": 542, "name": "DUP4", "source": 1 }, - { "begin": 524, "end": 531, "name": "DUP6", "source": 1 }, - { "begin": 520, "end": 543, "name": "SUB", "source": 1 }, - { "begin": 516, "end": 548, "name": "SLT", "source": 1 }, - { "begin": 513, "end": 515, "name": "ISZERO", "source": 1 }, + { "begin": 2812, "end": 2821, "name": "DUP4", "source": 1 }, + { "begin": 2803, "end": 2810, "name": "DUP6", "source": 1 }, + { "begin": 2799, "end": 2822, "name": "SUB", "source": 1 }, + { "begin": 2795, "end": 2827, "name": "SLT", "source": 1 }, + { "begin": 2792, "end": 2911, "name": "ISZERO", "source": 1 }, { - "begin": 513, - "end": 515, + "begin": 2792, + "end": 2911, "name": "PUSH [tag]", "source": 1, - "value": "55" + "value": "163" }, - { "begin": 513, "end": 515, "name": "JUMPI", "source": 1 }, + { "begin": 2792, "end": 2911, "name": "JUMPI", "source": 1 }, { - "begin": 561, - "end": 562, - "name": "PUSH", + "begin": 2830, + "end": 2909, + "name": "PUSH [tag]", "source": 1, - "value": "0" + "value": "164" + }, + { + "begin": 2830, + "end": 2909, + "name": "PUSH [tag]", + "source": 1, + "value": "117" + }, + { + "begin": 2830, + "end": 2909, + "name": "JUMP", + "source": 1, + "value": "[in]" }, - { "begin": 558, "end": 559, "name": "DUP1", "source": 1 }, - { "begin": 551, "end": 563, "name": "REVERT", "source": 1 }, { - "begin": 513, - "end": 515, + "begin": 2830, + "end": 2909, "name": "tag", "source": 1, - "value": "55" + "value": "164" }, - { "begin": 513, "end": 515, "name": "JUMPDEST", "source": 1 }, + { "begin": 2830, "end": 2909, "name": "JUMPDEST", "source": 1 }, { - "begin": 604, - "end": 605, + "begin": 2792, + "end": 2911, + "name": "tag", + "source": 1, + "value": "163" + }, + { "begin": 2792, "end": 2911, "name": "JUMPDEST", "source": 1 }, + { + "begin": 2950, + "end": 2951, "name": "PUSH", "source": 1, "value": "0" }, { - "begin": 629, - "end": 682, + "begin": 2975, + "end": 3028, "name": "PUSH [tag]", "source": 1, - "value": "56" + "value": "165" }, - { "begin": 674, "end": 681, "name": "DUP6", "source": 1 }, - { "begin": 665, "end": 671, "name": "DUP3", "source": 1 }, - { "begin": 654, "end": 663, "name": "DUP7", "source": 1 }, - { "begin": 650, "end": 672, "name": "ADD", "source": 1 }, + { "begin": 3020, "end": 3027, "name": "DUP6", "source": 1 }, + { "begin": 3011, "end": 3017, "name": "DUP3", "source": 1 }, + { "begin": 3000, "end": 3009, "name": "DUP7", "source": 1 }, + { "begin": 2996, "end": 3018, "name": "ADD", "source": 1 }, { - "begin": 629, - "end": 682, + "begin": 2975, + "end": 3028, "name": "PUSH [tag]", "source": 1, - "value": "47" + "value": "124" }, { - "begin": 629, - "end": 682, + "begin": 2975, + "end": 3028, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 629, - "end": 682, + "begin": 2975, + "end": 3028, "name": "tag", "source": 1, - "value": "56" + "value": "165" }, - { "begin": 629, "end": 682, "name": "JUMPDEST", "source": 1 }, - { "begin": 619, "end": 682, "name": "SWAP3", "source": 1 }, - { "begin": 619, "end": 682, "name": "POP", "source": 1 }, - { "begin": 575, "end": 692, "name": "POP", "source": 1 }, + { "begin": 2975, "end": 3028, "name": "JUMPDEST", "source": 1 }, + { "begin": 2965, "end": 3028, "name": "SWAP3", "source": 1 }, + { "begin": 2965, "end": 3028, "name": "POP", "source": 1 }, + { "begin": 2921, "end": 3038, "name": "POP", "source": 1 }, { - "begin": 731, - "end": 733, + "begin": 3077, + "end": 3079, "name": "PUSH", "source": 1, "value": "20" }, { - "begin": 757, - "end": 810, + "begin": 3103, + "end": 3156, "name": "PUSH [tag]", "source": 1, - "value": "57" + "value": "166" }, - { "begin": 802, "end": 809, "name": "DUP6", "source": 1 }, - { "begin": 793, "end": 799, "name": "DUP3", "source": 1 }, - { "begin": 782, "end": 791, "name": "DUP7", "source": 1 }, - { "begin": 778, "end": 800, "name": "ADD", "source": 1 }, + { "begin": 3148, "end": 3155, "name": "DUP6", "source": 1 }, + { "begin": 3139, "end": 3145, "name": "DUP3", "source": 1 }, + { "begin": 3128, "end": 3137, "name": "DUP7", "source": 1 }, + { "begin": 3124, "end": 3146, "name": "ADD", "source": 1 }, { - "begin": 757, - "end": 810, + "begin": 3103, + "end": 3156, "name": "PUSH [tag]", "source": 1, - "value": "47" + "value": "124" }, { - "begin": 757, - "end": 810, + "begin": 3103, + "end": 3156, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 757, - "end": 810, + "begin": 3103, + "end": 3156, "name": "tag", "source": 1, - "value": "57" - }, - { "begin": 757, "end": 810, "name": "JUMPDEST", "source": 1 }, - { "begin": 747, "end": 810, "name": "SWAP2", "source": 1 }, - { "begin": 747, "end": 810, "name": "POP", "source": 1 }, - { "begin": 702, "end": 820, "name": "POP", "source": 1 }, - { "begin": 503, "end": 827, "name": "SWAP3", "source": 1 }, - { "begin": 503, "end": 827, "name": "POP", "source": 1 }, - { "begin": 503, "end": 827, "name": "SWAP3", "source": 1 }, - { "begin": 503, "end": 827, "name": "SWAP1", "source": 1 }, - { "begin": 503, "end": 827, "name": "POP", "source": 1 }, - { - "begin": 503, - "end": 827, + "value": "166" + }, + { "begin": 3103, "end": 3156, "name": "JUMPDEST", "source": 1 }, + { "begin": 3093, "end": 3156, "name": "SWAP2", "source": 1 }, + { "begin": 3093, "end": 3156, "name": "POP", "source": 1 }, + { "begin": 3048, "end": 3166, "name": "POP", "source": 1 }, + { "begin": 2699, "end": 3173, "name": "SWAP3", "source": 1 }, + { "begin": 2699, "end": 3173, "name": "POP", "source": 1 }, + { "begin": 2699, "end": 3173, "name": "SWAP3", "source": 1 }, + { "begin": 2699, "end": 3173, "name": "SWAP1", "source": 1 }, + { "begin": 2699, "end": 3173, "name": "POP", "source": 1 }, + { + "begin": 2699, + "end": 3173, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 833, - "end": 951, + "begin": 3179, + "end": 3359, "name": "tag", "source": 1, - "value": "58" + "value": "125" + }, + { "begin": 3179, "end": 3359, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3227, + "end": 3304, + "name": "PUSH", + "source": 1, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 3224, + "end": 3225, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 3217, "end": 3305, "name": "MSTORE", "source": 1 }, + { + "begin": 3324, + "end": 3328, + "name": "PUSH", + "source": 1, + "value": "11" + }, + { + "begin": 3321, + "end": 3322, + "name": "PUSH", + "source": 1, + "value": "4" }, - { "begin": 833, "end": 951, "name": "JUMPDEST", "source": 1 }, + { "begin": 3314, "end": 3329, "name": "MSTORE", "source": 1 }, { - "begin": 920, - "end": 944, + "begin": 3348, + "end": 3352, + "name": "PUSH", + "source": 1, + "value": "24" + }, + { + "begin": 3345, + "end": 3346, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 3338, "end": 3353, "name": "REVERT", "source": 1 }, + { + "begin": 3365, + "end": 3670, + "name": "tag", + "source": 1, + "value": "78" + }, + { "begin": 3365, "end": 3670, "name": "JUMPDEST", "source": 1 }, + { + "begin": 3405, + "end": 3408, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 3424, + "end": 3444, "name": "PUSH [tag]", "source": 1, - "value": "60" + "value": "169" }, - { "begin": 938, "end": 943, "name": "DUP2", "source": 1 }, + { "begin": 3442, "end": 3443, "name": "DUP3", "source": 1 }, { - "begin": 920, - "end": 944, + "begin": 3424, + "end": 3444, "name": "PUSH [tag]", "source": 1, - "value": "61" + "value": "114" }, { - "begin": 920, - "end": 944, + "begin": 3424, + "end": 3444, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 920, - "end": 944, + "begin": 3424, + "end": 3444, "name": "tag", "source": 1, - "value": "60" + "value": "169" }, - { "begin": 920, "end": 944, "name": "JUMPDEST", "source": 1 }, - { "begin": 915, "end": 918, "name": "DUP3", "source": 1 }, - { "begin": 908, "end": 945, "name": "MSTORE", "source": 1 }, - { "begin": 898, "end": 951, "name": "POP", "source": 1 }, - { "begin": 898, "end": 951, "name": "POP", "source": 1 }, + { "begin": 3424, "end": 3444, "name": "JUMPDEST", "source": 1 }, + { "begin": 3419, "end": 3444, "name": "SWAP2", "source": 1 }, + { "begin": 3419, "end": 3444, "name": "POP", "source": 1 }, { - "begin": 898, - "end": 951, - "name": "JUMP", + "begin": 3458, + "end": 3478, + "name": "PUSH [tag]", "source": 1, - "value": "[out]" + "value": "170" }, + { "begin": 3476, "end": 3477, "name": "DUP4", "source": 1 }, { - "begin": 957, - "end": 1179, - "name": "tag", + "begin": 3458, + "end": 3478, + "name": "PUSH [tag]", "source": 1, - "value": "30" + "value": "114" }, - { "begin": 957, "end": 1179, "name": "JUMPDEST", "source": 1 }, { - "begin": 957, - "end": 1179, - "name": "PUSH", + "begin": 3458, + "end": 3478, + "name": "JUMP", "source": 1, - "value": "0" + "value": "[in]" }, { - "begin": 1088, - "end": 1090, + "begin": 3458, + "end": 3478, + "name": "tag", + "source": 1, + "value": "170" + }, + { "begin": 3458, "end": 3478, "name": "JUMPDEST", "source": 1 }, + { "begin": 3453, "end": 3478, "name": "SWAP3", "source": 1 }, + { "begin": 3453, "end": 3478, "name": "POP", "source": 1 }, + { "begin": 3612, "end": 3613, "name": "DUP3", "source": 1 }, + { + "begin": 3544, + "end": 3610, "name": "PUSH", "source": 1, - "value": "20" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 1077, "end": 1086, "name": "DUP3", "source": 1 }, - { "begin": 1073, "end": 1091, "name": "ADD", "source": 1 }, - { "begin": 1065, "end": 1091, "name": "SWAP1", "source": 1 }, - { "begin": 1065, "end": 1091, "name": "POP", "source": 1 }, + { "begin": 3540, "end": 3614, "name": "SUB", "source": 1 }, + { "begin": 3537, "end": 3538, "name": "DUP3", "source": 1 }, + { "begin": 3534, "end": 3615, "name": "GT", "source": 1 }, + { "begin": 3531, "end": 3638, "name": "ISZERO", "source": 1 }, { - "begin": 1101, - "end": 1172, + "begin": 3531, + "end": 3638, "name": "PUSH [tag]", "source": 1, - "value": "63" + "value": "171" }, + { "begin": 3531, "end": 3638, "name": "JUMPI", "source": 1 }, { - "begin": 1169, - "end": 1170, - "name": "PUSH", + "begin": 3618, + "end": 3636, + "name": "PUSH [tag]", "source": 1, - "value": "0" + "value": "172" }, - { "begin": 1158, "end": 1167, "name": "DUP4", "source": 1 }, - { "begin": 1154, "end": 1171, "name": "ADD", "source": 1 }, - { "begin": 1145, "end": 1151, "name": "DUP5", "source": 1 }, { - "begin": 1101, - "end": 1172, + "begin": 3618, + "end": 3636, "name": "PUSH [tag]", "source": 1, - "value": "58" + "value": "125" }, { - "begin": 1101, - "end": 1172, + "begin": 3618, + "end": 3636, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 1101, - "end": 1172, + "begin": 3618, + "end": 3636, "name": "tag", "source": 1, - "value": "63" + "value": "172" }, - { "begin": 1101, "end": 1172, "name": "JUMPDEST", "source": 1 }, - { "begin": 1055, "end": 1179, "name": "SWAP3", "source": 1 }, - { "begin": 1055, "end": 1179, "name": "SWAP2", "source": 1 }, - { "begin": 1055, "end": 1179, "name": "POP", "source": 1 }, - { "begin": 1055, "end": 1179, "name": "POP", "source": 1 }, + { "begin": 3618, "end": 3636, "name": "JUMPDEST", "source": 1 }, { - "begin": 1055, - "end": 1179, + "begin": 3531, + "end": 3638, + "name": "tag", + "source": 1, + "value": "171" + }, + { "begin": 3531, "end": 3638, "name": "JUMPDEST", "source": 1 }, + { "begin": 3662, "end": 3663, "name": "DUP3", "source": 1 }, + { "begin": 3659, "end": 3660, "name": "DUP3", "source": 1 }, + { "begin": 3655, "end": 3664, "name": "ADD", "source": 1 }, + { "begin": 3648, "end": 3664, "name": "SWAP1", "source": 1 }, + { "begin": 3648, "end": 3664, "name": "POP", "source": 1 }, + { "begin": 3365, "end": 3670, "name": "SWAP3", "source": 1 }, + { "begin": 3365, "end": 3670, "name": "SWAP2", "source": 1 }, + { "begin": 3365, "end": 3670, "name": "POP", "source": 1 }, + { "begin": 3365, "end": 3670, "name": "POP", "source": 1 }, + { + "begin": 3365, + "end": 3670, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 1185, - "end": 1281, + "begin": 3676, + "end": 3847, "name": "tag", "source": 1, - "value": "61" + "value": "84" }, - { "begin": 1185, "end": 1281, "name": "JUMPDEST", "source": 1 }, + { "begin": 3676, "end": 3847, "name": "JUMPDEST", "source": 1 }, { - "begin": 1185, - "end": 1281, + "begin": 3715, + "end": 3718, "name": "PUSH", "source": 1, "value": "0" }, { - "begin": 1251, - "end": 1275, + "begin": 3738, + "end": 3762, "name": "PUSH [tag]", "source": 1, - "value": "65" + "value": "174" }, - { "begin": 1269, "end": 1274, "name": "DUP3", "source": 1 }, + { "begin": 3756, "end": 3761, "name": "DUP3", "source": 1 }, { - "begin": 1251, - "end": 1275, + "begin": 3738, + "end": 3762, "name": "PUSH [tag]", "source": 1, - "value": "66" + "value": "114" }, { - "begin": 1251, - "end": 1275, + "begin": 3738, + "end": 3762, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 1251, - "end": 1275, + "begin": 3738, + "end": 3762, "name": "tag", "source": 1, - "value": "65" + "value": "174" + }, + { "begin": 3738, "end": 3762, "name": "JUMPDEST", "source": 1 }, + { "begin": 3729, "end": 3762, "name": "SWAP2", "source": 1 }, + { "begin": 3729, "end": 3762, "name": "POP", "source": 1 }, + { + "begin": 3784, + "end": 3788, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { "begin": 3777, "end": 3782, "name": "DUP3", "source": 1 }, + { "begin": 3774, "end": 3789, "name": "EQ", "source": 1 }, + { "begin": 3771, "end": 3812, "name": "ISZERO", "source": 1 }, + { + "begin": 3771, + "end": 3812, + "name": "PUSH [tag]", + "source": 1, + "value": "175" + }, + { "begin": 3771, "end": 3812, "name": "JUMPI", "source": 1 }, + { + "begin": 3792, + "end": 3810, + "name": "PUSH [tag]", + "source": 1, + "value": "176" + }, + { + "begin": 3792, + "end": 3810, + "name": "PUSH [tag]", + "source": 1, + "value": "125" }, - { "begin": 1251, "end": 1275, "name": "JUMPDEST", "source": 1 }, - { "begin": 1240, "end": 1275, "name": "SWAP1", "source": 1 }, - { "begin": 1240, "end": 1275, "name": "POP", "source": 1 }, - { "begin": 1230, "end": 1281, "name": "SWAP2", "source": 1 }, - { "begin": 1230, "end": 1281, "name": "SWAP1", "source": 1 }, - { "begin": 1230, "end": 1281, "name": "POP", "source": 1 }, { - "begin": 1230, - "end": 1281, + "begin": 3792, + "end": 3810, "name": "JUMP", "source": 1, - "value": "[out]" + "value": "[in]" }, { - "begin": 1287, - "end": 1413, + "begin": 3792, + "end": 3810, "name": "tag", "source": 1, - "value": "66" + "value": "176" }, - { "begin": 1287, "end": 1413, "name": "JUMPDEST", "source": 1 }, + { "begin": 3792, "end": 3810, "name": "JUMPDEST", "source": 1 }, { - "begin": 1287, - "end": 1413, - "name": "PUSH", + "begin": 3771, + "end": 3812, + "name": "tag", "source": 1, - "value": "0" + "value": "175" }, + { "begin": 3771, "end": 3812, "name": "JUMPDEST", "source": 1 }, { - "begin": 1364, - "end": 1406, + "begin": 3839, + "end": 3840, "name": "PUSH", "source": 1, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "value": "1" }, - { "begin": 1357, "end": 1362, "name": "DUP3", "source": 1 }, - { "begin": 1353, "end": 1407, "name": "AND", "source": 1 }, - { "begin": 1342, "end": 1407, "name": "SWAP1", "source": 1 }, - { "begin": 1342, "end": 1407, "name": "POP", "source": 1 }, - { "begin": 1332, "end": 1413, "name": "SWAP2", "source": 1 }, - { "begin": 1332, "end": 1413, "name": "SWAP1", "source": 1 }, - { "begin": 1332, "end": 1413, "name": "POP", "source": 1 }, + { "begin": 3832, "end": 3837, "name": "DUP3", "source": 1 }, + { "begin": 3828, "end": 3841, "name": "SUB", "source": 1 }, + { "begin": 3821, "end": 3841, "name": "SWAP1", "source": 1 }, + { "begin": 3821, "end": 3841, "name": "POP", "source": 1 }, + { "begin": 3676, "end": 3847, "name": "SWAP2", "source": 1 }, + { "begin": 3676, "end": 3847, "name": "SWAP1", "source": 1 }, + { "begin": 3676, "end": 3847, "name": "POP", "source": 1 }, { - "begin": 1332, - "end": 1413, + "begin": 3676, + "end": 3847, "name": "JUMP", "source": 1, "value": "[out]" }, { - "begin": 1419, - "end": 1541, + "begin": 3853, + "end": 3971, "name": "tag", "source": 1, - "value": "50" + "value": "126" }, - { "begin": 1419, "end": 1541, "name": "JUMPDEST", "source": 1 }, + { "begin": 3853, "end": 3971, "name": "JUMPDEST", "source": 1 }, { - "begin": 1492, - "end": 1516, + "begin": 3940, + "end": 3964, "name": "PUSH [tag]", "source": 1, - "value": "69" + "value": "178" }, - { "begin": 1510, "end": 1515, "name": "DUP2", "source": 1 }, + { "begin": 3958, "end": 3963, "name": "DUP2", "source": 1 }, { - "begin": 1492, - "end": 1516, + "begin": 3940, + "end": 3964, "name": "PUSH [tag]", "source": 1, - "value": "61" + "value": "122" }, { - "begin": 1492, - "end": 1516, + "begin": 3940, + "end": 3964, "name": "JUMP", "source": 1, "value": "[in]" }, { - "begin": 1492, - "end": 1516, + "begin": 3940, + "end": 3964, "name": "tag", "source": 1, - "value": "69" + "value": "178" + }, + { "begin": 3940, "end": 3964, "name": "JUMPDEST", "source": 1 }, + { "begin": 3935, "end": 3938, "name": "DUP3", "source": 1 }, + { "begin": 3928, "end": 3965, "name": "MSTORE", "source": 1 }, + { "begin": 3853, "end": 3971, "name": "POP", "source": 1 }, + { "begin": 3853, "end": 3971, "name": "POP", "source": 1 }, + { + "begin": 3853, + "end": 3971, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 3977, + "end": 4199, + "name": "tag", + "source": 1, + "value": "98" + }, + { "begin": 3977, "end": 4199, "name": "JUMPDEST", "source": 1 }, + { + "begin": 4070, + "end": 4074, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 4108, + "end": 4110, + "name": "PUSH", + "source": 1, + "value": "20" }, - { "begin": 1492, "end": 1516, "name": "JUMPDEST", "source": 1 }, - { "begin": 1485, "end": 1490, "name": "DUP2", "source": 1 }, - { "begin": 1482, "end": 1517, "name": "EQ", "source": 1 }, + { "begin": 4097, "end": 4106, "name": "DUP3", "source": 1 }, + { "begin": 4093, "end": 4111, "name": "ADD", "source": 1 }, + { "begin": 4085, "end": 4111, "name": "SWAP1", "source": 1 }, + { "begin": 4085, "end": 4111, "name": "POP", "source": 1 }, { - "begin": 1472, - "end": 1474, + "begin": 4121, + "end": 4192, "name": "PUSH [tag]", "source": 1, - "value": "70" + "value": "180" }, - { "begin": 1472, "end": 1474, "name": "JUMPI", "source": 1 }, { - "begin": 1531, - "end": 1532, + "begin": 4189, + "end": 4190, "name": "PUSH", "source": 1, "value": "0" }, - { "begin": 1528, "end": 1529, "name": "DUP1", "source": 1 }, - { "begin": 1521, "end": 1533, "name": "REVERT", "source": 1 }, + { "begin": 4178, "end": 4187, "name": "DUP4", "source": 1 }, + { "begin": 4174, "end": 4191, "name": "ADD", "source": 1 }, + { "begin": 4165, "end": 4171, "name": "DUP5", "source": 1 }, + { + "begin": 4121, + "end": 4192, + "name": "PUSH [tag]", + "source": 1, + "value": "126" + }, + { + "begin": 4121, + "end": 4192, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, { - "begin": 1472, - "end": 1474, + "begin": 4121, + "end": 4192, "name": "tag", "source": 1, - "value": "70" + "value": "180" }, - { "begin": 1472, "end": 1474, "name": "JUMPDEST", "source": 1 }, - { "begin": 1462, "end": 1541, "name": "POP", "source": 1 }, + { "begin": 4121, "end": 4192, "name": "JUMPDEST", "source": 1 }, + { "begin": 3977, "end": 4199, "name": "SWAP3", "source": 1 }, + { "begin": 3977, "end": 4199, "name": "SWAP2", "source": 1 }, + { "begin": 3977, "end": 4199, "name": "POP", "source": 1 }, + { "begin": 3977, "end": 4199, "name": "POP", "source": 1 }, { - "begin": 1462, - "end": 1541, + "begin": 3977, + "end": 4199, "name": "JUMP", "source": 1, "value": "[out]" @@ -3695,16 +8653,118 @@ } }, "methodIdentifiers": { + "a()": "0dbe671f", + "b()": "4df7e3d0", + "c()": "c3da42b8", "call_ok()": "5eaf9bc1", "call_revert()": "cb30e696", + "d()": "8a054ac2", + "e()": "ffae15ba", + "f()": "26121ff0", + "g()": "e2179b8e", + "h()": "b8c9d365", + "heavy_steps(uint256,uint256)": "6422847b", + "i()": "e5aa3d58", + "j()": "b582ec5f", + "set_and_loop(uint256)": "13128fdc", "subcalls(address,address)": "f34f1610", "subsubcalls(address)": "a885f4e3" } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.3+commit.8d00100c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"should_revert\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"call_ok\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"call_revert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subsubcalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TraceFilter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xf153bb9ac8a40ad2b947921abebad02891a26a7b8d73dbe03472330a1a669e83\",\"urls\":[\"bzz-raw://9180f7c6665f2ee8bb90a0ac0330a1df854a37186bfdf68d982995ae884da57c\",\"dweb:/ipfs/QmPcFyzXLPmF99Zjz4ytwYqw5rkKqumEoSHbDxruCdb2Av\"]}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"should_revert\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"a\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"b\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"c\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"call_ok\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"call_revert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"d\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"e\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"f\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"g\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"h\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"store_steps\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"op_steps\",\"type\":\"uint256\"}],\"name\":\"heavy_steps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"j\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loops\",\"type\":\"uint256\"}],\"name\":\"set_and_loop\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"result\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subcalls\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target1\",\"type\":\"address\"}],\"name\":\"subsubcalls\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"TraceFilter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x4d55fc0d2ba607d43e62a3f476aa2a1c0ea7914816b5412c6b3d834170e87d04\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://2786981bec4a827c4a0f6b63097e63d99140c2d425d00ae003e084626e30e001\",\"dweb:/ipfs/QmTAV4vGHrLFnnyicS3aSbx2Bajn463UQrDUKEPyTLdcRC\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 99, + "contract": "main.sol:TraceFilter", + "label": "a", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 101, + "contract": "main.sol:TraceFilter", + "label": "b", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 103, + "contract": "main.sol:TraceFilter", + "label": "c", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 105, + "contract": "main.sol:TraceFilter", + "label": "d", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 107, + "contract": "main.sol:TraceFilter", + "label": "e", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 109, + "contract": "main.sol:TraceFilter", + "label": "f", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 111, + "contract": "main.sol:TraceFilter", + "label": "g", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 113, + "contract": "main.sol:TraceFilter", + "label": "h", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 115, + "contract": "main.sol:TraceFilter", + "label": "i", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 117, + "contract": "main.sol:TraceFilter", + "label": "j", + "offset": 0, + "slot": "9", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, "userdoc": { "kind": "user", "methods": {}, "version": 1 } }, - "sourceCode": "\n pragma solidity >=0.8.0;\n contract TraceFilter {\n constructor(bool should_revert) {\n if (should_revert) {\n revert();\n }\n }\n \n function call_ok() public { }\n \n function call_revert() public {\n revert(); \n }\n \n function subcalls(address target0, address target1) public {\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n try TraceFilter(target0).subsubcalls(target1) { } catch { }\n }\n \n function subsubcalls(address target1) public {\n TraceFilter(target1).call_ok();\n TraceFilter(target1).call_revert();\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\ncontract TraceFilter {\n constructor(bool should_revert) {\n if (should_revert) {\n revert();\n }\n }\n\n function call_ok() public pure {}\n\n function call_revert() public pure {\n revert();\n }\n\n function subcalls(address target0, address target1) public pure {\n try TraceFilter(target0).subsubcalls(target1) {} catch {}\n try TraceFilter(target0).subsubcalls(target1) {} catch {}\n }\n\n function subsubcalls(address target1) public pure {\n TraceFilter(target1).call_ok();\n TraceFilter(target1).call_revert();\n }\n\n function heavy_steps(uint256 store_steps, uint256 op_steps) external {\n while (store_steps != 0) {\n assembly {\n sstore(store_steps, store_steps)\n }\n store_steps--;\n }\n\n while (op_steps != 0) {\n op_steps--;\n }\n }\n\n // This part is to trace Wasm memory overflow\n uint256 public a;\n uint256 public b;\n uint256 public c;\n uint256 public d;\n uint256 public e;\n uint256 public f;\n uint256 public g;\n uint256 public h;\n uint256 public i;\n uint256 public j;\n\n function set_and_loop(uint256 loops) public returns (uint256 result) {\n a = 1;\n b = 1;\n c = 1;\n d = 1;\n e = 1;\n f = 1;\n g = 1;\n h = 1;\n i = 1;\n j = 1;\n uint256 count = 0;\n while (i < loops) {\n count += 1;\n }\n return 1;\n }\n}\n\ncontract TraceCallee {\n uint256 public store;\n\n function addtwo(uint256 _value) external returns (uint256 result) {\n uint256 x = 7;\n store = _value;\n return _value + x;\n }\n}\n\ncontract TraceCaller {\n TraceCallee internal callee;\n uint256 public store;\n\n function someAction(address _addr, uint256 _number) public {\n callee = TraceCallee(_addr);\n store = callee.addtwo(_number);\n }\n}\n" } diff --git a/tests/contracts/compiled/WrappedNativeCurrency.json b/tests/contracts/compiled/WrappedNativeCurrency.json new file mode 100644 index 0000000000..cd195410e0 --- /dev/null +++ b/tests/contracts/compiled/WrappedNativeCurrency.json @@ -0,0 +1,123 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Withdrawal", + "type": "event" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "details": "Allow compatibility with dApps expecting this precompile to be a WETH-like contract. Moonbase address : 0x0000000000000000000000000000000000000802", + "events": { + "Deposit(address,uint256)": { + "details": "Event emited when deposit() has been called. Selector: e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c", + "params": { + "owner": "address Owner of the tokens", + "value": "uint256 The amount of tokens \"wrapped\"." + } + }, + "Withdrawal(address,uint256)": { + "details": "Event emited when withdraw(uint256) has been called. Selector: 7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "params": { + "owner": "address Owner of the tokens", + "value": "uint256 The amount of tokens \"unwrapped\"." + } + } + }, + "kind": "dev", + "methods": { + "deposit()": { + "details": "Provide compatibility for contracts that expect wETH design. Returns funds to sender as this precompile tokens and the native tokens are the same. Selector: d0e30db0" + }, + "withdraw(uint256)": { + "details": "Provide compatibility for contracts that expect wETH design. Does nothing. Selector: 2e1a7d4d", + "params": { "value": "uint256 The amount to withdraw/unwrap." } + } + }, + "title": "Native currency wrapper interface.", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "deposit()": "d0e30db0", + "withdraw(uint256)": "2e1a7d4d" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Allow compatibility with dApps expecting this precompile to be a WETH-like contract. Moonbase address : 0x0000000000000000000000000000000000000802\",\"events\":{\"Deposit(address,uint256)\":{\"details\":\"Event emited when deposit() has been called. Selector: e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\",\"params\":{\"owner\":\"address Owner of the tokens\",\"value\":\"uint256 The amount of tokens \\\"wrapped\\\".\"}},\"Withdrawal(address,uint256)\":{\"details\":\"Event emited when withdraw(uint256) has been called. Selector: 7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\",\"params\":{\"owner\":\"address Owner of the tokens\",\"value\":\"uint256 The amount of tokens \\\"unwrapped\\\".\"}}},\"kind\":\"dev\",\"methods\":{\"deposit()\":{\"details\":\"Provide compatibility for contracts that expect wETH design. Returns funds to sender as this precompile tokens and the native tokens are the same. Selector: d0e30db0\"},\"withdraw(uint256)\":{\"details\":\"Provide compatibility for contracts that expect wETH design. Does nothing. Selector: 2e1a7d4d\",\"params\":{\"value\":\"uint256 The amount to withdraw/unwrap.\"}}},\"title\":\"Native currency wrapper interface.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"WrappedNativeCurrency\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xece248e8bc2951b0f63e23cb5173ca8efb0d2733b042bcdb32b4e01c4231b42c\",\"urls\":[\"bzz-raw://c11987a04ac15b830ac8615284a30b6781cd7aecda5fc08c11f995a5e8ffb55f\",\"dweb:/ipfs/QmbKDPvdec5CFiwS2fQX2fkPYDC5QZTzV4yXrhRzY9a39S\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "sourceCode": "pragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts\n * Address : 0x0000000000000000000000000000000000000802\n */\n \ninterface IERC20 {\n /**\n * @dev Returns the name of the token.\n * Selector: 06fdde03\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n * Selector: 95d89b41\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n * Selector: 313ce567\n */\n function decimals() external view returns (uint8);\n\n /**\n * @dev Total number of tokens in existence\n * Selector: 18160ddd\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Gets the balance of the specified address.\n * Selector: 70a08231\n * @param owner The address to query the balance of.\n * @return An uint256 representing the amount owned by the passed address.\n */\n function balanceOf(address owner) external view returns (uint256);\n\n /**\n * @dev Function to check the amount of tokens that an owner allowed to a spender.\n * Selector: dd62ed3e\n * @param owner address The address which owns the funds.\n * @param spender address The address which will spend the funds.\n * @return A uint256 specifying the amount of tokens still available for the spender.\n */\n function allowance(address owner, address spender)\n external view returns (uint256);\n\n /**\n * @dev Transfer token for a specified address\n * Selector: a9059cbb\n * @param to The address to transfer to.\n * @param value The amount to be transferred.\n * @return true if the transfer was succesful, revert otherwise.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\n * Beware that changing an allowance with this method brings the risk that someone may use both the old\n * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\n * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * Selector: 095ea7b3\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return true, this cannot fail\n */\n function approve(address spender, uint256 value)\n external returns (bool);\n\n /**\n * @dev Transfer tokens from one address to another\n * Selector: 23b872dd\n * @param from address The address which you want to send tokens from\n * @param to address The address which you want to transfer to\n * @param value uint256 the amount of tokens to be transferred\n * @return true if the transfer was succesful, revert otherwise.\n */\n function transferFrom(address from, address to, uint256 value)\n external returns (bool);\n\n\n /**\n * @dev Event emited when a transfer has been performed.\n * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n * @param from address The address sending the tokens\n * @param to address The address receiving the tokens.\n * @param value uint256 The amount of tokens transfered.\n */\n event Transfer(\n address indexed from,\n address indexed to,\n uint256 value\n );\n\n /**\n * @dev Event emited when an approval has been registered.\n * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925\n * @param owner address Owner of the tokens.\n * @param spender address Allowed spender.\n * @param value uint256 Amount of tokens approved.\n */\n event Approval(\n address indexed owner,\n address indexed spender,\n uint256 value\n );\n}\n\n/**\n * @title Native currency wrapper interface.\n * @dev Allow compatibility with dApps expecting this precompile to be\n * a WETH-like contract.\n * Moonbase address : 0x0000000000000000000000000000000000000802\n */\ninterface WrappedNativeCurrency {\n /**\n * @dev Provide compatibility for contracts that expect wETH design.\n * Returns funds to sender as this precompile tokens and the native tokens are the same.\n * Selector: d0e30db0\n */\n function deposit() external payable;\n\n /**\n * @dev Provide compatibility for contracts that expect wETH design.\n * Does nothing.\n * Selector: 2e1a7d4d\n * @param value uint256 The amount to withdraw/unwrap.\n */\n function withdraw(uint256 value) external;\n\n /**\n * @dev Event emited when deposit() has been called.\n * Selector: e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c\n * @param owner address Owner of the tokens\n * @param value uint256 The amount of tokens \"wrapped\".\n */\n event Deposit(\n address indexed owner,\n uint value\n );\n\n /**\n * @dev Event emited when withdraw(uint256) has been called.\n * Selector: 7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65\n * @param owner address Owner of the tokens\n * @param value uint256 The amount of tokens \"unwrapped\".\n */\n event Withdrawal(\n address indexed owner,\n uint value\n );\n}" +} diff --git a/tests/contracts/compiled/XcmTransactor.json b/tests/contracts/compiled/XcmTransactor.json new file mode 100644 index 0000000000..3b4fd1ed6d --- /dev/null +++ b/tests/contracts/compiled/XcmTransactor.json @@ -0,0 +1,362 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "multilocation", + "type": "tuple" + } + ], + "name": "fee_per_second", + "outputs": [ + { + "internalType": "uint256", + "name": "fee_per_second", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint16", "name": "index", "type": "uint16" } + ], + "name": "index_to_account", + "outputs": [ + { "internalType": "address", "name": "owner", "type": "address" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "multilocation", + "type": "tuple" + } + ], + "name": "transact_info", + "outputs": [ + { + "internalType": "uint64", + "name": "transact_extra_weight", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "fee_per_second", + "type": "uint256" + }, + { "internalType": "uint64", "name": "max_weight", "type": "uint64" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "multilocation", + "type": "tuple" + } + ], + "name": "transact_info_with_signed", + "outputs": [ + { + "internalType": "uint64", + "name": "transact_extra_weight", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "transact_extra_weight_signed", + "type": "uint64" + }, + { "internalType": "uint64", "name": "max_weight", "type": "uint64" } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "transactor", "type": "uint8" }, + { "internalType": "uint16", "name": "index", "type": "uint16" }, + { + "internalType": "address", + "name": "currency_id", + "type": "address" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" }, + { "internalType": "bytes", "name": "inner_call", "type": "bytes" } + ], + "name": "transact_through_derivative", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "transactor", "type": "uint8" }, + { "internalType": "uint16", "name": "index", "type": "uint16" }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "fee_asset", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" }, + { "internalType": "bytes", "name": "inner_call", "type": "bytes" } + ], + "name": "transact_through_derivative_multilocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "dest", + "type": "tuple" + }, + { + "internalType": "address", + "name": "fee_location_address", + "type": "address" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" }, + { "internalType": "bytes", "name": "call", "type": "bytes" } + ], + "name": "transact_through_signed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "dest", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "fee_location", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" }, + { "internalType": "bytes", "name": "call", "type": "bytes" } + ], + "name": "transact_through_signed_multilocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "fee_per_second((uint8,bytes[]))": { + "params": { + "multilocation": "The asset location for which we want to know the fee per second value" + }, + "returns": { + "fee_per_second": "The fee per second that the reserve chain charges for this asset" + } + }, + "index_to_account(uint16)": { + "params": { + "index": "The index of which we want to retrieve the account" + }, + "returns": { "owner": "The owner of the derivative index" } + }, + "transact_info((uint8,bytes[]))": { + "params": { + "multilocation": "The location for which we want to know the transact info" + }, + "returns": { + "fee_per_second": "The amount of fee charged for a second of execution in the dest", + "max_weight": "Maximum allowed weight for a single message in dest", + "transact_extra_weight": "The extra weight involved in the XCM message of using derivative" + } + }, + "transact_info_with_signed((uint8,bytes[]))": { + "params": { + "multilocation": "The location for which we want to know the transact info" + }, + "returns": { + "max_weight": "Maximum allowed weight for a single message in dest", + "transact_extra_weight": "The extra weight involved in the XCM message of using derivative", + "transact_extra_weight_signed": "The extra weight involved in the XCM message of using signed" + } + }, + "transact_through_derivative(uint8,uint16,address,uint64,bytes)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "currency_id": "Address of the currencyId of the asset to be used for fees It has to be a reserve of the destination chain", + "index": "The index to be used", + "inner_call": "The inner call to be executed in the destination chain", + "transactor": "The transactor to be used", + "weight": "The weight we want to buy in the destination chain" + } + }, + "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "fee_asset": "The asset in which we want to pay fees. It has to be a reserve of the destination chain", + "index": "The index to be used", + "inner_call": "The inner call to be executed in the destination chain", + "transactor": "The transactor to be used", + "weight": "The weight we want to buy in the destination chain" + } + }, + "transact_through_signed((uint8,bytes[]),address,uint64,bytes)": { + "details": "No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call", + "params": { + "call": "The call to be executed in the destination chain", + "dest": "The destination chain (as multilocation) where to send the message", + "fee_location_address": "The ERC20 address of the token we want to use to pay for fees only callable if such an asset has been BRIDGED to our chain", + "weight": "The weight we want to buy in the destination chain for the call to be made" + } + }, + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)": { + "details": "No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call", + "params": { + "call": "The call to be executed in the destination chain", + "dest": "The destination chain (as multilocation) where to send the message", + "fee_location": "The asset multilocation that indentifies the fee payment currency It has to be a reserve of the destination chain", + "weight": "The weight we want to buy in the destination chain for the call to be made" + } + } + }, + "title": "Xcm Transactor Interface The interface through which solidity contracts will interact with xcm transactor pallet Address : 0x0000000000000000000000000000000000000806", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "fee_per_second((uint8,bytes[]))": "83f09082", + "index_to_account(uint16)": "71b0edfa", + "transact_info((uint8,bytes[]))": "f87f493f", + "transact_info_with_signed((uint8,bytes[]))": "cb26bf32", + "transact_through_derivative(uint8,uint16,address,uint64,bytes)": "267d4062", + "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)": "9f89f03e", + "transact_through_signed((uint8,bytes[]),address,uint64,bytes)": "0139d697", + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)": "19760407" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"multilocation\",\"type\":\"tuple\"}],\"name\":\"fee_per_second\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee_per_second\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"index_to_account\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"multilocation\",\"type\":\"tuple\"}],\"name\":\"transact_info\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"transact_extra_weight\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"fee_per_second\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"max_weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"multilocation\",\"type\":\"tuple\"}],\"name\":\"transact_info_with_signed\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"transact_extra_weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"transact_extra_weight_signed\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max_weight\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"transactor\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"currency_id\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"inner_call\",\"type\":\"bytes\"}],\"name\":\"transact_through_derivative\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"transactor\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"fee_asset\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"inner_call\",\"type\":\"bytes\"}],\"name\":\"transact_through_derivative_multilocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"dest\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"fee_location_address\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"call\",\"type\":\"bytes\"}],\"name\":\"transact_through_signed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"dest\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"fee_location\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"call\",\"type\":\"bytes\"}],\"name\":\"transact_through_signed_multilocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"fee_per_second((uint8,bytes[]))\":{\"params\":{\"multilocation\":\"The asset location for which we want to know the fee per second value\"},\"returns\":{\"fee_per_second\":\"The fee per second that the reserve chain charges for this asset\"}},\"index_to_account(uint16)\":{\"params\":{\"index\":\"The index of which we want to retrieve the account\"},\"returns\":{\"owner\":\"The owner of the derivative index\"}},\"transact_info((uint8,bytes[]))\":{\"params\":{\"multilocation\":\"The location for which we want to know the transact info\"},\"returns\":{\"fee_per_second\":\"The amount of fee charged for a second of execution in the dest\",\"max_weight\":\"Maximum allowed weight for a single message in dest\",\"transact_extra_weight\":\"The extra weight involved in the XCM message of using derivative\"}},\"transact_info_with_signed((uint8,bytes[]))\":{\"params\":{\"multilocation\":\"The location for which we want to know the transact info\"},\"returns\":{\"max_weight\":\"Maximum allowed weight for a single message in dest\",\"transact_extra_weight\":\"The extra weight involved in the XCM message of using derivative\",\"transact_extra_weight_signed\":\"The extra weight involved in the XCM message of using signed\"}},\"transact_through_derivative(uint8,uint16,address,uint64,bytes)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currency_id\":\"Address of the currencyId of the asset to be used for fees It has to be a reserve of the destination chain\",\"index\":\"The index to be used\",\"inner_call\":\"The inner call to be executed in the destination chain\",\"transactor\":\"The transactor to be used\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"fee_asset\":\"The asset in which we want to pay fees. It has to be a reserve of the destination chain\",\"index\":\"The index to be used\",\"inner_call\":\"The inner call to be executed in the destination chain\",\"transactor\":\"The transactor to be used\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transact_through_signed((uint8,bytes[]),address,uint64,bytes)\":{\"details\":\"No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call\",\"params\":{\"call\":\"The call to be executed in the destination chain\",\"dest\":\"The destination chain (as multilocation) where to send the message\",\"fee_location_address\":\"The ERC20 address of the token we want to use to pay for fees only callable if such an asset has been BRIDGED to our chain\",\"weight\":\"The weight we want to buy in the destination chain for the call to be made\"}},\"transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)\":{\"details\":\"No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call\",\"params\":{\"call\":\"The call to be executed in the destination chain\",\"dest\":\"The destination chain (as multilocation) where to send the message\",\"fee_location\":\"The asset multilocation that indentifies the fee payment currency It has to be a reserve of the destination chain\",\"weight\":\"The weight we want to buy in the destination chain for the call to be made\"}}},\"title\":\"Xcm Transactor Interface The interface through which solidity contracts will interact with xcm transactor pallet Address : 0x0000000000000000000000000000000000000806\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"fee_per_second((uint8,bytes[]))\":{\"notice\":\"Get fee per second charged in its reserve chain for an asset Selector 83f09082\"},\"index_to_account(uint16)\":{\"notice\":\"Get index of an account in xcm transactor Selector 71b0edfa\"},\"transact_info((uint8,bytes[]))\":{\"notice\":\"Get transact info of a multilocation Selector f87f493f\"},\"transact_info_with_signed((uint8,bytes[]))\":{\"notice\":\"Get transact info of a multilocation Selector cb26bf32\"},\"transact_through_derivative(uint8,uint16,address,uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its currency_id Selector 267d4062\"},\"transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its multilocation Selector 9f89f03e\"},\"transact_through_signed((uint8,bytes[]),address,uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its erc20 address through signed origins Selector 0139d697\"},\"transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its multilocation through signed origins Selector 19760407\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"XcmTransactor\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x5a2f8ced3e0294d2d7748203ff07868d64fdae9536fe76518989196cd4438505\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://a9403f646e442983d4fcfcc0395277e33003a5a4a01d2f2d79fdb068f21b5ede\",\"dweb:/ipfs/QmSHGiFx2RurfXV79wpG7CUXBzmn3PugeUjv5q4H4SYuch\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { + "kind": "user", + "methods": { + "fee_per_second((uint8,bytes[]))": { + "notice": "Get fee per second charged in its reserve chain for an asset Selector 83f09082" + }, + "index_to_account(uint16)": { + "notice": "Get index of an account in xcm transactor Selector 71b0edfa" + }, + "transact_info((uint8,bytes[]))": { + "notice": "Get transact info of a multilocation Selector f87f493f" + }, + "transact_info_with_signed((uint8,bytes[]))": { + "notice": "Get transact info of a multilocation Selector cb26bf32" + }, + "transact_through_derivative(uint8,uint16,address,uint64,bytes)": { + "notice": "Transact through XCM using fee based on its currency_id Selector 267d4062" + }, + "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)": { + "notice": "Transact through XCM using fee based on its multilocation Selector 9f89f03e" + }, + "transact_through_signed((uint8,bytes[]),address,uint64,bytes)": { + "notice": "Transact through XCM using fee based on its erc20 address through signed origins Selector 0139d697" + }, + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)": { + "notice": "Transact through XCM using fee based on its multilocation through signed origins Selector 19760407" + } + }, + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @title Xcm Transactor Interface\n * The interface through which solidity contracts will interact with xcm transactor pallet\n * Address : 0x0000000000000000000000000000000000000806\n */\n\ninterface XcmTransactor {\n\n // A multilocation is defined by its number of parents and the encoded junctions (interior)\n struct Multilocation {\n uint8 parents;\n bytes [] interior;\n }\n\n /** Get index of an account in xcm transactor\n * Selector 71b0edfa\n * @param index The index of which we want to retrieve the account\n * @return owner The owner of the derivative index\n */\n function index_to_account(uint16 index) external view returns(address owner);\n\n /// DEPRECATED, replaced by transact_info_with_signed\n /** Get transact info of a multilocation\n * Selector f87f493f\n * @param multilocation The location for which we want to know the transact info\n * @return transact_extra_weight The extra weight involved in the XCM message of using derivative\n * @return fee_per_second The amount of fee charged for a second of execution in the dest\n * @return max_weight Maximum allowed weight for a single message in dest\n */\n function transact_info(Multilocation memory multilocation) external view \n returns(uint64 transact_extra_weight, uint256 fee_per_second, uint64 max_weight);\n \n /** Get transact info of a multilocation\n * Selector cb26bf32\n * @param multilocation The location for which we want to know the transact info\n * @return transact_extra_weight The extra weight involved in the XCM message of using derivative\n * @return transact_extra_weight_signed The extra weight involved in the XCM message of using signed\n * @return max_weight Maximum allowed weight for a single message in dest\n */\n function transact_info_with_signed(Multilocation memory multilocation) external view \n returns(uint64 transact_extra_weight, uint64 transact_extra_weight_signed, uint64 max_weight);\n\n /** Get fee per second charged in its reserve chain for an asset\n * Selector 83f09082\n * @param multilocation The asset location for which we want to know the fee per second value\n * @return fee_per_second The fee per second that the reserve chain charges for this asset\n */\n function fee_per_second(Multilocation memory multilocation) external view \n returns(uint256 fee_per_second);\n\n /** Transact through XCM using fee based on its multilocation\n * Selector 9f89f03e\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param transactor The transactor to be used\n * @param index The index to be used\n * @param fee_asset The asset in which we want to pay fees. \n * It has to be a reserve of the destination chain\n * @param weight The weight we want to buy in the destination chain\n * @param inner_call The inner call to be executed in the destination chain\n */\n function transact_through_derivative_multilocation(\n uint8 transactor,\n uint16 index,\n Multilocation memory fee_asset,\n uint64 weight,\n bytes memory inner_call\n ) external;\n \n /** Transact through XCM using fee based on its currency_id\n * Selector 267d4062\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param transactor The transactor to be used\n * @param index The index to be used\n * @param currency_id Address of the currencyId of the asset to be used for fees\n * It has to be a reserve of the destination chain\n * @param weight The weight we want to buy in the destination chain\n * @param inner_call The inner call to be executed in the destination chain\n */\n function transact_through_derivative(\n uint8 transactor,\n uint16 index,\n address currency_id,\n uint64 weight,\n bytes memory inner_call\n ) external;\n\n /** Transact through XCM using fee based on its multilocation through signed origins\n * Selector 19760407\n * @dev No token is burnt before sending the message. The caller must ensure the destination\n * is able to undertand the DescendOrigin message, and create a unique account from which\n * dispatch the call\n * @param dest The destination chain (as multilocation) where to send the message\n * @param fee_location The asset multilocation that indentifies the fee payment currency\n * It has to be a reserve of the destination chain\n * @param weight The weight we want to buy in the destination chain for the call to be made\n * @param call The call to be executed in the destination chain\n */\n function transact_through_signed_multilocation(\n Multilocation memory dest,\n Multilocation memory fee_location,\n uint64 weight,\n bytes memory call\n ) external;\n\n /** Transact through XCM using fee based on its erc20 address through signed origins\n * Selector 0139d697\n * @dev No token is burnt before sending the message. The caller must ensure the destination\n * is able to undertand the DescendOrigin message, and create a unique account from which\n * dispatch the call\n * @param dest The destination chain (as multilocation) where to send the message\n * @param fee_location_address The ERC20 address of the token we want to use to pay for fees\n * only callable if such an asset has been BRIDGED to our chain\n * @param weight The weight we want to buy in the destination chain for the call to be made\n * @param call The call to be executed in the destination chain\n */\n function transact_through_signed(\n Multilocation memory dest,\n address fee_location_address,\n uint64 weight,\n bytes memory call\n ) external;\n}" +} diff --git a/tests/contracts/compiled/XcmTransactorInstance.json b/tests/contracts/compiled/XcmTransactorInstance.json index c0557a717e..76d35d38e1 100644 --- a/tests/contracts/compiled/XcmTransactorInstance.json +++ b/tests/contracts/compiled/XcmTransactorInstance.json @@ -1,7 +1,30 @@ { - "byteCode": "0x60806040526108066000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50610e49806100626000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063267d40621461005c57806361fc548f1461007857806371b0edfa146100965780639f89f03e146100c6578063f87f493f146100e2575b600080fd5b61007660048036038101906100719190610628565b610114565b005b6100806101ae565b60405161008d919061071e565b60405180910390f35b6100b060048036038101906100ab9190610739565b6101d2565b6040516100bd9190610775565b60405180910390f35b6100e060048036038101906100db91906108ec565b610276565b005b6100fc60048036038101906100f7919061099f565b610310565b60405161010b93929190610a10565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663267d406286868686866040518663ffffffff1660e01b8152600401610175959493929190610aed565b600060405180830381600087803b15801561018f57600080fd5b505af11580156101a3573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371b0edfa836040518263ffffffff1660e01b815260040161022e9190610b47565b602060405180830381865afa15801561024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026f9190610b77565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f89f03e86868686866040518663ffffffff1660e01b81526004016102d7959493929190610cfc565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87f493f856040518263ffffffff1660e01b815260040161036f9190610d5d565b606060405180830381865afa15801561038c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b09190610dc0565b9250925092509193909250565b6000604051905090565b600080fd5b600080fd5b600060ff82169050919050565b6103e7816103d1565b81146103f257600080fd5b50565b600081359050610404816103de565b92915050565b600061ffff82169050919050565b6104218161040a565b811461042c57600080fd5b50565b60008135905061043e81610418565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061046f82610444565b9050919050565b61047f81610464565b811461048a57600080fd5b50565b60008135905061049c81610476565b92915050565b600067ffffffffffffffff82169050919050565b6104bf816104a2565b81146104ca57600080fd5b50565b6000813590506104dc816104b6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610535826104ec565b810181811067ffffffffffffffff82111715610554576105536104fd565b5b80604052505050565b60006105676103bd565b9050610573828261052c565b919050565b600067ffffffffffffffff821115610593576105926104fd565b5b61059c826104ec565b9050602081019050919050565b82818337600083830152505050565b60006105cb6105c684610578565b61055d565b9050828152602081018484840111156105e7576105e66104e7565b5b6105f28482856105a9565b509392505050565b600082601f83011261060f5761060e6104e2565b5b813561061f8482602086016105b8565b91505092915050565b600080600080600060a08688031215610644576106436103c7565b5b6000610652888289016103f5565b95505060206106638882890161042f565b94505060406106748882890161048d565b9350506060610685888289016104cd565b925050608086013567ffffffffffffffff8111156106a6576106a56103cc565b5b6106b2888289016105fa565b9150509295509295909350565b6000819050919050565b60006106e46106df6106da84610444565b6106bf565b610444565b9050919050565b60006106f6826106c9565b9050919050565b6000610708826106eb565b9050919050565b610718816106fd565b82525050565b6000602082019050610733600083018461070f565b92915050565b60006020828403121561074f5761074e6103c7565b5b600061075d8482850161042f565b91505092915050565b61076f81610464565b82525050565b600060208201905061078a6000830184610766565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff8211156107b5576107b46104fd565b5b602082029050602081019050919050565b600080fd5b60006107de6107d98461079a565b61055d565b90508083825260208201905060208402830185811115610801576108006107c6565b5b835b8181101561084857803567ffffffffffffffff811115610826576108256104e2565b5b80860161083389826105fa565b85526020850194505050602081019050610803565b5050509392505050565b600082601f830112610867576108666104e2565b5b81356108778482602086016107cb565b91505092915050565b60006040828403121561089657610895610790565b5b6108a0604061055d565b905060006108b0848285016103f5565b600083015250602082013567ffffffffffffffff8111156108d4576108d3610795565b5b6108e084828501610852565b60208301525092915050565b600080600080600060a08688031215610908576109076103c7565b5b6000610916888289016103f5565b95505060206109278882890161042f565b945050604086013567ffffffffffffffff811115610948576109476103cc565b5b61095488828901610880565b9350506060610965888289016104cd565b925050608086013567ffffffffffffffff811115610986576109856103cc565b5b610992888289016105fa565b9150509295509295909350565b6000602082840312156109b5576109b46103c7565b5b600082013567ffffffffffffffff8111156109d3576109d26103cc565b5b6109df84828501610880565b91505092915050565b6109f1816104a2565b82525050565b6000819050919050565b610a0a816109f7565b82525050565b6000606082019050610a2560008301866109e8565b610a326020830185610a01565b610a3f60408301846109e8565b949350505050565b610a50816103d1565b82525050565b610a5f8161040a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a9f578082015181840152602081019050610a84565b83811115610aae576000848401525b50505050565b6000610abf82610a65565b610ac98185610a70565b9350610ad9818560208601610a81565b610ae2816104ec565b840191505092915050565b600060a082019050610b026000830188610a47565b610b0f6020830187610a56565b610b1c6040830186610766565b610b2960608301856109e8565b8181036080830152610b3b8184610ab4565b90509695505050505050565b6000602082019050610b5c6000830184610a56565b92915050565b600081519050610b7181610476565b92915050565b600060208284031215610b8d57610b8c6103c7565b5b6000610b9b84828501610b62565b91505092915050565b610bad816103d1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000610bfb82610a65565b610c058185610bdf565b9350610c15818560208601610a81565b610c1e816104ec565b840191505092915050565b6000610c358383610bf0565b905092915050565b6000602082019050919050565b6000610c5582610bb3565b610c5f8185610bbe565b935083602082028501610c7185610bcf565b8060005b85811015610cad5784840389528151610c8e8582610c29565b9450610c9983610c3d565b925060208a01995050600181019050610c75565b50829750879550505050505092915050565b6000604083016000830151610cd76000860182610ba4565b5060208301518482036020860152610cef8282610c4a565b9150508091505092915050565b600060a082019050610d116000830188610a47565b610d1e6020830187610a56565b8181036040830152610d308186610cbf565b9050610d3f60608301856109e8565b8181036080830152610d518184610ab4565b90509695505050505050565b60006020820190508181036000830152610d778184610cbf565b905092915050565b600081519050610d8e816104b6565b92915050565b610d9d816109f7565b8114610da857600080fd5b50565b600081519050610dba81610d94565b92915050565b600080600060608486031215610dd957610dd86103c7565b5b6000610de786828701610d7f565b9350506020610df886828701610dab565b9250506040610e0986828701610d7f565b915050925092509256fea26469706673582212200c97281bd15caba3cc6efa4a076e6f49a63c3b3c013798a44e77679bfec3fec964736f6c634300080a0033", + "byteCode": "0x60806040526108066000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50611477806100626000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806371b0edfa1161006657806371b0edfa1461010a57806383f090821461013a5780639f89f03e1461016a578063cb26bf3214610186578063f87f493f146101b857610093565b80630139d6971461009857806319760407146100b4578063267d4062146100d057806361fc548f146100ec575b600080fd5b6100b260048036038101906100ad9190610a9f565b6101ea565b005b6100ce60048036038101906100c99190610b3e565b610281565b005b6100ea60048036038101906100e59190610c33565b610318565b005b6100f46103b2565b6040516101019190610d29565b60405180910390f35b610124600480360381019061011f9190610d44565b6103d6565b6040516101319190610d80565b60405180910390f35b610154600480360381019061014f9190610d9b565b61047a565b6040516101619190610dfd565b60405180910390f35b610184600480360381019061017f9190610e18565b61051e565b005b6101a0600480360381019061019b9190610d9b565b6105b8565b6040516101af93929190610eda565b60405180910390f35b6101d260048036038101906101cd9190610d9b565b610665565b6040516101e193929190610f11565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630139d697858585856040518563ffffffff1660e01b81526004016102499493929190611128565b600060405180830381600087803b15801561026357600080fd5b505af1158015610277573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166319760407858585856040518563ffffffff1660e01b81526004016102e0949392919061117b565b600060405180830381600087803b1580156102fa57600080fd5b505af115801561030e573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663267d406286868686866040518663ffffffff1660e01b81526004016103799594939291906111f3565b600060405180830381600087803b15801561039357600080fd5b505af11580156103a7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371b0edfa836040518263ffffffff1660e01b8152600401610432919061124d565b602060405180830381865afa15801561044f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610473919061127d565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166383f09082836040518263ffffffff1660e01b81526004016104d691906112aa565b602060405180830381865afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906112f8565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f89f03e86868686866040518663ffffffff1660e01b815260040161057f959493929190611325565b600060405180830381600087803b15801561059957600080fd5b505af11580156105ad573d6000803e3d6000fd5b505050505050505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb26bf32856040518263ffffffff1660e01b815260040161061791906112aa565b606060405180830381865afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610658919061139b565b9250925092509193909250565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87f493f856040518263ffffffff1660e01b81526004016106c491906112aa565b606060405180830381865afa1580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070591906113ee565b9250925092509193909250565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107748261072b565b810181811067ffffffffffffffff821117156107935761079261073c565b5b80604052505050565b60006107a6610712565b90506107b2828261076b565b919050565b600080fd5b600060ff82169050919050565b6107d2816107bc565b81146107dd57600080fd5b50565b6000813590506107ef816107c9565b92915050565b600080fd5b600067ffffffffffffffff8211156108155761081461073c565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561084b5761084a61073c565b5b6108548261072b565b9050602081019050919050565b82818337600083830152505050565b600061088361087e84610830565b61079c565b90508281526020810184848401111561089f5761089e61082b565b5b6108aa848285610861565b509392505050565b600082601f8301126108c7576108c66107f5565b5b81356108d7848260208601610870565b91505092915050565b60006108f36108ee846107fa565b61079c565b9050808382526020820190506020840283018581111561091657610915610826565b5b835b8181101561095d57803567ffffffffffffffff81111561093b5761093a6107f5565b5b80860161094889826108b2565b85526020850194505050602081019050610918565b5050509392505050565b600082601f83011261097c5761097b6107f5565b5b813561098c8482602086016108e0565b91505092915050565b6000604082840312156109ab576109aa610726565b5b6109b5604061079c565b905060006109c5848285016107e0565b600083015250602082013567ffffffffffffffff8111156109e9576109e86107b7565b5b6109f584828501610967565b60208301525092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a2c82610a01565b9050919050565b610a3c81610a21565b8114610a4757600080fd5b50565b600081359050610a5981610a33565b92915050565b600067ffffffffffffffff82169050919050565b610a7c81610a5f565b8114610a8757600080fd5b50565b600081359050610a9981610a73565b92915050565b60008060008060808587031215610ab957610ab861071c565b5b600085013567ffffffffffffffff811115610ad757610ad6610721565b5b610ae387828801610995565b9450506020610af487828801610a4a565b9350506040610b0587828801610a8a565b925050606085013567ffffffffffffffff811115610b2657610b25610721565b5b610b32878288016108b2565b91505092959194509250565b60008060008060808587031215610b5857610b5761071c565b5b600085013567ffffffffffffffff811115610b7657610b75610721565b5b610b8287828801610995565b945050602085013567ffffffffffffffff811115610ba357610ba2610721565b5b610baf87828801610995565b9350506040610bc087828801610a8a565b925050606085013567ffffffffffffffff811115610be157610be0610721565b5b610bed878288016108b2565b91505092959194509250565b600061ffff82169050919050565b610c1081610bf9565b8114610c1b57600080fd5b50565b600081359050610c2d81610c07565b92915050565b600080600080600060a08688031215610c4f57610c4e61071c565b5b6000610c5d888289016107e0565b9550506020610c6e88828901610c1e565b9450506040610c7f88828901610a4a565b9350506060610c9088828901610a8a565b925050608086013567ffffffffffffffff811115610cb157610cb0610721565b5b610cbd888289016108b2565b9150509295509295909350565b6000819050919050565b6000610cef610cea610ce584610a01565b610cca565b610a01565b9050919050565b6000610d0182610cd4565b9050919050565b6000610d1382610cf6565b9050919050565b610d2381610d08565b82525050565b6000602082019050610d3e6000830184610d1a565b92915050565b600060208284031215610d5a57610d5961071c565b5b6000610d6884828501610c1e565b91505092915050565b610d7a81610a21565b82525050565b6000602082019050610d956000830184610d71565b92915050565b600060208284031215610db157610db061071c565b5b600082013567ffffffffffffffff811115610dcf57610dce610721565b5b610ddb84828501610995565b91505092915050565b6000819050919050565b610df781610de4565b82525050565b6000602082019050610e126000830184610dee565b92915050565b600080600080600060a08688031215610e3457610e3361071c565b5b6000610e42888289016107e0565b9550506020610e5388828901610c1e565b945050604086013567ffffffffffffffff811115610e7457610e73610721565b5b610e8088828901610995565b9350506060610e9188828901610a8a565b925050608086013567ffffffffffffffff811115610eb257610eb1610721565b5b610ebe888289016108b2565b9150509295509295909350565b610ed481610a5f565b82525050565b6000606082019050610eef6000830186610ecb565b610efc6020830185610ecb565b610f096040830184610ecb565b949350505050565b6000606082019050610f266000830186610ecb565b610f336020830185610dee565b610f406040830184610ecb565b949350505050565b610f51816107bc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fbd578082015181840152602081019050610fa2565b83811115610fcc576000848401525b50505050565b6000610fdd82610f83565b610fe78185610f8e565b9350610ff7818560208601610f9f565b6110008161072b565b840191505092915050565b60006110178383610fd2565b905092915050565b6000602082019050919050565b600061103782610f57565b6110418185610f62565b93508360208202850161105385610f73565b8060005b8581101561108f5784840389528151611070858261100b565b945061107b8361101f565b925060208a01995050600181019050611057565b50829750879550505050505092915050565b60006040830160008301516110b96000860182610f48565b50602083015184820360208601526110d1828261102c565b9150508091505092915050565b600082825260208201905092915050565b60006110fa82610f83565b61110481856110de565b9350611114818560208601610f9f565b61111d8161072b565b840191505092915050565b6000608082019050818103600083015261114281876110a1565b90506111516020830186610d71565b61115e6040830185610ecb565b818103606083015261117081846110ef565b905095945050505050565b6000608082019050818103600083015261119581876110a1565b905081810360208301526111a981866110a1565b90506111b86040830185610ecb565b81810360608301526111ca81846110ef565b905095945050505050565b6111de816107bc565b82525050565b6111ed81610bf9565b82525050565b600060a08201905061120860008301886111d5565b61121560208301876111e4565b6112226040830186610d71565b61122f6060830185610ecb565b818103608083015261124181846110ef565b90509695505050505050565b600060208201905061126260008301846111e4565b92915050565b60008151905061127781610a33565b92915050565b6000602082840312156112935761129261071c565b5b60006112a184828501611268565b91505092915050565b600060208201905081810360008301526112c481846110a1565b905092915050565b6112d581610de4565b81146112e057600080fd5b50565b6000815190506112f2816112cc565b92915050565b60006020828403121561130e5761130d61071c565b5b600061131c848285016112e3565b91505092915050565b600060a08201905061133a60008301886111d5565b61134760208301876111e4565b818103604083015261135981866110a1565b90506113686060830185610ecb565b818103608083015261137a81846110ef565b90509695505050505050565b60008151905061139581610a73565b92915050565b6000806000606084860312156113b4576113b361071c565b5b60006113c286828701611386565b93505060206113d386828701611386565b92505060406113e486828701611386565b9150509250925092565b6000806000606084860312156114075761140661071c565b5b600061141586828701611386565b9350506020611426868287016112e3565b925050604061143786828701611386565b915050925092509256fea2646970667358221220c04621bb052bcda255425291a4fe020cf0831dde7b2dca5e5954b77da1559d9864736f6c634300080b0033", "contract": { "abi": [ + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "multilocation", + "type": "tuple" + } + ], + "name": "fee_per_second", + "outputs": [ + { "internalType": "uint256", "name": "", "type": "uint256" } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { "internalType": "uint16", "name": "index", "type": "uint16" } @@ -38,6 +61,31 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "multilocation", + "type": "tuple" + } + ], + "name": "transact_info_with_signed", + "outputs": [ + { "internalType": "uint64", "name": "", "type": "uint64" }, + { "internalType": "uint64", "name": "", "type": "uint64" }, + { "internalType": "uint64", "name": "", "type": "uint64" } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { "internalType": "uint8", "name": "transactor", "type": "uint8" }, @@ -80,6 +128,70 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "dest", + "type": "tuple" + }, + { + "internalType": "address", + "name": "fee_location_address", + "type": "address" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" }, + { "internalType": "bytes", "name": "call", "type": "bytes" } + ], + "name": "transact_through_signed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "dest", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct XcmTransactor.Multilocation", + "name": "fee_location", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" }, + { "internalType": "bytes", "name": "call", "type": "bytes" } + ], + "name": "transact_through_signed_multilocation", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "xcmtransactor", @@ -97,14 +209,38 @@ "devdoc": { "kind": "dev", "methods": { + "fee_per_second((uint8,bytes[]))": { + "params": { + "multilocation": "The asset location for which we want to know the fee per second value" + }, + "returns": { + "_0": "The fee per second that the reserve chain charges for this asset" + } + }, "index_to_account(uint16)": { "params": { "index": "The index of which we want to retrieve the account" - } + }, + "returns": { "_0": "The owner of the derivative index" } }, "transact_info((uint8,bytes[]))": { "params": { - "multilocation": "The location for which we want to retrieve transact info" + "multilocation": "The location for which we want to know the transact info" + }, + "returns": { + "_0": "The extra weight involved in the XCM message of using derivative", + "_1": "The amount of fee charged for a second of execution in the dest", + "_2": "Maximum allowed weight for a single message in dest" + } + }, + "transact_info_with_signed((uint8,bytes[]))": { + "params": { + "multilocation": "The location for which we want to know the transact info" + }, + "returns": { + "_0": "The extra weight involved in the XCM message of using derivative", + "_1": "The extra weight involved in the XCM message of using signed", + "_2": "Maximum allowed weight for a single message in dest" } }, "transact_through_derivative(uint8,uint16,address,uint64,bytes)": { @@ -126,498 +262,588 @@ "transactor": "The transactor to be used", "weight": "The weight we want to buy in the destination chain" } + }, + "transact_through_signed((uint8,bytes[]),address,uint64,bytes)": { + "details": "No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call", + "params": { + "call": "The call to be executed in the destination chain", + "dest": "The destination chain (as multilocation) where to send the message", + "fee_location_address": "The ERC20 address of the token we want to use to pay for fees only callable if such an asset has been BRIDGED to our chain", + "weight": "The weight we want to buy in the destination chain for the call to be made" + } + }, + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)": { + "details": "No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call", + "params": { + "call": "The call to be executed in the destination chain", + "dest": "The destination chain (as multilocation) where to send the message", + "fee_location": "The asset multilocation that indentifies the fee payment currency It has to be a reserve of the destination chain", + "weight": "The weight we want to buy in the destination chain for the call to be made" + } } }, "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":2664:4346 contract XcmTransactorInstance is XcmTransactor {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":2839:2881 0x0000000000000000000000000000000000000806 */\n 0x0806\n /* \"main.sol\":2788:2882 XcmTransactor public xcmtransactor = XcmTransactor(0x0000000000000000000000000000000000000806) */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":2664:4346 contract XcmTransactorInstance is XcmTransactor {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":2664:4346 contract XcmTransactorInstance is XcmTransactor {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x267d4062\n eq\n tag_3\n jumpi\n dup1\n 0x61fc548f\n eq\n tag_4\n jumpi\n dup1\n 0x71b0edfa\n eq\n tag_5\n jumpi\n dup1\n 0x9f89f03e\n eq\n tag_6\n jumpi\n dup1\n 0xf87f493f\n eq\n tag_7\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":3910:4340 function transact_through_derivative(... */\n tag_3:\n tag_8\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_9\n swap2\n swap1\n tag_10\n jump\t// in\n tag_9:\n tag_11\n jump\t// in\n tag_8:\n stop\n /* \"main.sol\":2788:2882 XcmTransactor public xcmtransactor = XcmTransactor(0x0000000000000000000000000000000000000806) */\n tag_4:\n tag_12\n tag_13\n jump\t// in\n tag_12:\n mload(0x40)\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2893:3118 function index_to_account(uint16 index) external view override returns(address) {... */\n tag_5:\n tag_16\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_17\n swap2\n swap1\n tag_18\n jump\t// in\n tag_17:\n tag_19\n jump\t// in\n tag_16:\n mload(0x40)\n tag_20\n swap2\n swap1\n tag_21\n jump\t// in\n tag_20:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":3425:3892 function transact_through_derivative_multilocation(... */\n tag_6:\n tag_22\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_23\n swap2\n swap1\n tag_24\n jump\t// in\n tag_23:\n tag_25\n jump\t// in\n tag_22:\n stop\n /* \"main.sol\":3128:3415 function transact_info(... */\n tag_7:\n tag_26\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_27\n swap2\n swap1\n tag_28\n jump\t// in\n tag_27:\n tag_29\n jump\t// in\n tag_26:\n mload(0x40)\n tag_30\n swap4\n swap3\n swap2\n swap1\n tag_31\n jump\t// in\n tag_30:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":3910:4340 function transact_through_derivative(... */\n tag_11:\n /* \"main.sol\":4142:4155 xcmtransactor */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":4142:4183 xcmtransactor.transact_through_derivative */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x267d4062\n /* \"main.sol\":4201:4211 transactor */\n dup7\n /* \"main.sol\":4229:4234 index */\n dup7\n /* \"main.sol\":4252:4263 currency_id */\n dup7\n /* \"main.sol\":4281:4287 weight */\n dup7\n /* \"main.sol\":4305:4315 inner_call */\n dup7\n /* \"main.sol\":4142:4329 xcmtransactor.transact_through_derivative(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_33\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_34\n jump\t// in\n tag_33:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_35\n jumpi\n 0x00\n dup1\n revert\n tag_35:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_37\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_37:\n pop\n pop\n pop\n pop\n /* \"main.sol\":3910:4340 function transact_through_derivative(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":2788:2882 XcmTransactor public xcmtransactor = XcmTransactor(0x0000000000000000000000000000000000000806) */\n tag_13:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":2893:3118 function index_to_account(uint16 index) external view override returns(address) {... */\n tag_19:\n /* \"main.sol\":2964:2971 address */\n 0x00\n /* \"main.sol\":3070:3083 xcmtransactor */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":3070:3100 xcmtransactor.index_to_account */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x71b0edfa\n /* \"main.sol\":3101:3106 index */\n dup4\n /* \"main.sol\":3070:3107 xcmtransactor.index_to_account(index) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_39\n swap2\n swap1\n tag_40\n jump\t// in\n tag_39:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_42\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_42:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_43\n swap2\n swap1\n tag_44\n jump\t// in\n tag_43:\n /* \"main.sol\":3063:3107 return xcmtransactor.index_to_account(index) */\n swap1\n pop\n /* \"main.sol\":2893:3118 function index_to_account(uint16 index) external view override returns(address) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":3425:3892 function transact_through_derivative_multilocation(... */\n tag_25:\n /* \"main.sol\":3682:3695 xcmtransactor */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":3682:3737 xcmtransactor.transact_through_derivative_multilocation */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x9f89f03e\n /* \"main.sol\":3755:3765 transactor */\n dup7\n /* \"main.sol\":3783:3788 index */\n dup7\n /* \"main.sol\":3806:3815 fee_asset */\n dup7\n /* \"main.sol\":3833:3839 weight */\n dup7\n /* \"main.sol\":3857:3867 inner_call */\n dup7\n /* \"main.sol\":3682:3881 xcmtransactor.transact_through_derivative_multilocation(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_46\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_48\n jumpi\n 0x00\n dup1\n revert\n tag_48:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_50\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_50:\n pop\n pop\n pop\n pop\n /* \"main.sol\":3425:3892 function transact_through_derivative_multilocation(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":3128:3415 function transact_info(... */\n tag_29:\n /* \"main.sol\":3240:3246 uint64 */\n 0x00\n /* \"main.sol\":3248:3255 uint256 */\n dup1\n /* \"main.sol\":3257:3263 uint64 */\n 0x00\n /* \"main.sol\":3362:3375 xcmtransactor */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":3362:3389 xcmtransactor.transact_info */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xf87f493f\n /* \"main.sol\":3390:3403 multilocation */\n dup6\n /* \"main.sol\":3362:3404 xcmtransactor.transact_info(multilocation) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_52\n swap2\n swap1\n tag_53\n jump\t// in\n tag_52:\n 0x60\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_55\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_55:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_56\n swap2\n swap1\n tag_57\n jump\t// in\n tag_56:\n /* \"main.sol\":3355:3404 return xcmtransactor.transact_info(multilocation) */\n swap3\n pop\n swap3\n pop\n swap3\n pop\n /* \"main.sol\":3128:3415 function transact_info(... */\n swap2\n swap4\n swap1\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_58:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_59:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_60:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:420 */\n tag_61:\n /* \"#utility.yul\":369:376 */\n 0x00\n /* \"#utility.yul\":409:413 */\n 0xff\n /* \"#utility.yul\":402:407 */\n dup3\n /* \"#utility.yul\":398:414 */\n and\n /* \"#utility.yul\":387:414 */\n swap1\n pop\n /* \"#utility.yul\":334:420 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":426:544 */\n tag_62:\n /* \"#utility.yul\":497:519 */\n tag_126\n /* \"#utility.yul\":513:518 */\n dup2\n /* \"#utility.yul\":497:519 */\n tag_61\n jump\t// in\n tag_126:\n /* \"#utility.yul\":490:495 */\n dup2\n /* \"#utility.yul\":487:520 */\n eq\n /* \"#utility.yul\":477:538 */\n tag_127\n jumpi\n /* \"#utility.yul\":534:535 */\n 0x00\n /* \"#utility.yul\":531:532 */\n dup1\n /* \"#utility.yul\":524:536 */\n revert\n /* \"#utility.yul\":477:538 */\n tag_127:\n /* \"#utility.yul\":426:544 */\n pop\n jump\t// out\n /* \"#utility.yul\":550:685 */\n tag_63:\n /* \"#utility.yul\":594:599 */\n 0x00\n /* \"#utility.yul\":632:638 */\n dup2\n /* \"#utility.yul\":619:639 */\n calldataload\n /* \"#utility.yul\":610:639 */\n swap1\n pop\n /* \"#utility.yul\":648:679 */\n tag_129\n /* \"#utility.yul\":673:678 */\n dup2\n /* \"#utility.yul\":648:679 */\n tag_62\n jump\t// in\n tag_129:\n /* \"#utility.yul\":550:685 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":691:780 */\n tag_64:\n /* \"#utility.yul\":727:734 */\n 0x00\n /* \"#utility.yul\":767:773 */\n 0xffff\n /* \"#utility.yul\":760:765 */\n dup3\n /* \"#utility.yul\":756:774 */\n and\n /* \"#utility.yul\":745:774 */\n swap1\n pop\n /* \"#utility.yul\":691:780 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":786:906 */\n tag_65:\n /* \"#utility.yul\":858:881 */\n tag_132\n /* \"#utility.yul\":875:880 */\n dup2\n /* \"#utility.yul\":858:881 */\n tag_64\n jump\t// in\n tag_132:\n /* \"#utility.yul\":851:856 */\n dup2\n /* \"#utility.yul\":848:882 */\n eq\n /* \"#utility.yul\":838:900 */\n tag_133\n jumpi\n /* \"#utility.yul\":896:897 */\n 0x00\n /* \"#utility.yul\":893:894 */\n dup1\n /* \"#utility.yul\":886:898 */\n revert\n /* \"#utility.yul\":838:900 */\n tag_133:\n /* \"#utility.yul\":786:906 */\n pop\n jump\t// out\n /* \"#utility.yul\":912:1049 */\n tag_66:\n /* \"#utility.yul\":957:962 */\n 0x00\n /* \"#utility.yul\":995:1001 */\n dup2\n /* \"#utility.yul\":982:1002 */\n calldataload\n /* \"#utility.yul\":973:1002 */\n swap1\n pop\n /* \"#utility.yul\":1011:1043 */\n tag_135\n /* \"#utility.yul\":1037:1042 */\n dup2\n /* \"#utility.yul\":1011:1043 */\n tag_65\n jump\t// in\n tag_135:\n /* \"#utility.yul\":912:1049 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1055:1181 */\n tag_67:\n /* \"#utility.yul\":1092:1099 */\n 0x00\n /* \"#utility.yul\":1132:1174 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1125:1130 */\n dup3\n /* \"#utility.yul\":1121:1175 */\n and\n /* \"#utility.yul\":1110:1175 */\n swap1\n pop\n /* \"#utility.yul\":1055:1181 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1187:1283 */\n tag_68:\n /* \"#utility.yul\":1224:1231 */\n 0x00\n /* \"#utility.yul\":1253:1277 */\n tag_138\n /* \"#utility.yul\":1271:1276 */\n dup3\n /* \"#utility.yul\":1253:1277 */\n tag_67\n jump\t// in\n tag_138:\n /* \"#utility.yul\":1242:1277 */\n swap1\n pop\n /* \"#utility.yul\":1187:1283 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1289:1411 */\n tag_69:\n /* \"#utility.yul\":1362:1386 */\n tag_140\n /* \"#utility.yul\":1380:1385 */\n dup2\n /* \"#utility.yul\":1362:1386 */\n tag_68\n jump\t// in\n tag_140:\n /* \"#utility.yul\":1355:1360 */\n dup2\n /* \"#utility.yul\":1352:1387 */\n eq\n /* \"#utility.yul\":1342:1405 */\n tag_141\n jumpi\n /* \"#utility.yul\":1401:1402 */\n 0x00\n /* \"#utility.yul\":1398:1399 */\n dup1\n /* \"#utility.yul\":1391:1403 */\n revert\n /* \"#utility.yul\":1342:1405 */\n tag_141:\n /* \"#utility.yul\":1289:1411 */\n pop\n jump\t// out\n /* \"#utility.yul\":1417:1556 */\n tag_70:\n /* \"#utility.yul\":1463:1468 */\n 0x00\n /* \"#utility.yul\":1501:1507 */\n dup2\n /* \"#utility.yul\":1488:1508 */\n calldataload\n /* \"#utility.yul\":1479:1508 */\n swap1\n pop\n /* \"#utility.yul\":1517:1550 */\n tag_143\n /* \"#utility.yul\":1544:1549 */\n dup2\n /* \"#utility.yul\":1517:1550 */\n tag_69\n jump\t// in\n tag_143:\n /* \"#utility.yul\":1417:1556 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1562:1663 */\n tag_71:\n /* \"#utility.yul\":1598:1605 */\n 0x00\n /* \"#utility.yul\":1638:1656 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1631:1636 */\n dup3\n /* \"#utility.yul\":1627:1657 */\n and\n /* \"#utility.yul\":1616:1657 */\n swap1\n pop\n /* \"#utility.yul\":1562:1663 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1669:1789 */\n tag_72:\n /* \"#utility.yul\":1741:1764 */\n tag_146\n /* \"#utility.yul\":1758:1763 */\n dup2\n /* \"#utility.yul\":1741:1764 */\n tag_71\n jump\t// in\n tag_146:\n /* \"#utility.yul\":1734:1739 */\n dup2\n /* \"#utility.yul\":1731:1765 */\n eq\n /* \"#utility.yul\":1721:1783 */\n tag_147\n jumpi\n /* \"#utility.yul\":1779:1780 */\n 0x00\n /* \"#utility.yul\":1776:1777 */\n dup1\n /* \"#utility.yul\":1769:1781 */\n revert\n /* \"#utility.yul\":1721:1783 */\n tag_147:\n /* \"#utility.yul\":1669:1789 */\n pop\n jump\t// out\n /* \"#utility.yul\":1795:1932 */\n tag_73:\n /* \"#utility.yul\":1840:1845 */\n 0x00\n /* \"#utility.yul\":1878:1884 */\n dup2\n /* \"#utility.yul\":1865:1885 */\n calldataload\n /* \"#utility.yul\":1856:1885 */\n swap1\n pop\n /* \"#utility.yul\":1894:1926 */\n tag_149\n /* \"#utility.yul\":1920:1925 */\n dup2\n /* \"#utility.yul\":1894:1926 */\n tag_72\n jump\t// in\n tag_149:\n /* \"#utility.yul\":1795:1932 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1938:2055 */\n tag_74:\n /* \"#utility.yul\":2047:2048 */\n 0x00\n /* \"#utility.yul\":2044:2045 */\n dup1\n /* \"#utility.yul\":2037:2049 */\n revert\n /* \"#utility.yul\":2061:2178 */\n tag_75:\n /* \"#utility.yul\":2170:2171 */\n 0x00\n /* \"#utility.yul\":2167:2168 */\n dup1\n /* \"#utility.yul\":2160:2172 */\n revert\n /* \"#utility.yul\":2184:2286 */\n tag_76:\n /* \"#utility.yul\":2225:2231 */\n 0x00\n /* \"#utility.yul\":2276:2278 */\n 0x1f\n /* \"#utility.yul\":2272:2279 */\n not\n /* \"#utility.yul\":2267:2269 */\n 0x1f\n /* \"#utility.yul\":2260:2265 */\n dup4\n /* \"#utility.yul\":2256:2270 */\n add\n /* \"#utility.yul\":2252:2280 */\n and\n /* \"#utility.yul\":2242:2280 */\n swap1\n pop\n /* \"#utility.yul\":2184:2286 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2292:2472 */\n tag_77:\n /* \"#utility.yul\":2340:2417 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":2337:2338 */\n 0x00\n /* \"#utility.yul\":2330:2418 */\n mstore\n /* \"#utility.yul\":2437:2441 */\n 0x41\n /* \"#utility.yul\":2434:2435 */\n 0x04\n /* \"#utility.yul\":2427:2442 */\n mstore\n /* \"#utility.yul\":2461:2465 */\n 0x24\n /* \"#utility.yul\":2458:2459 */\n 0x00\n /* \"#utility.yul\":2451:2466 */\n revert\n /* \"#utility.yul\":2478:2759 */\n tag_78:\n /* \"#utility.yul\":2561:2588 */\n tag_155\n /* \"#utility.yul\":2583:2587 */\n dup3\n /* \"#utility.yul\":2561:2588 */\n tag_76\n jump\t// in\n tag_155:\n /* \"#utility.yul\":2553:2559 */\n dup2\n /* \"#utility.yul\":2549:2589 */\n add\n /* \"#utility.yul\":2691:2697 */\n dup2\n /* \"#utility.yul\":2679:2689 */\n dup2\n /* \"#utility.yul\":2676:2698 */\n lt\n /* \"#utility.yul\":2655:2673 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2643:2653 */\n dup3\n /* \"#utility.yul\":2640:2674 */\n gt\n /* \"#utility.yul\":2637:2699 */\n or\n /* \"#utility.yul\":2634:2722 */\n iszero\n tag_156\n jumpi\n /* \"#utility.yul\":2702:2720 */\n tag_157\n tag_77\n jump\t// in\n tag_157:\n /* \"#utility.yul\":2634:2722 */\n tag_156:\n /* \"#utility.yul\":2742:2752 */\n dup1\n /* \"#utility.yul\":2738:2740 */\n 0x40\n /* \"#utility.yul\":2731:2753 */\n mstore\n /* \"#utility.yul\":2521:2759 */\n pop\n /* \"#utility.yul\":2478:2759 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2765:2894 */\n tag_79:\n /* \"#utility.yul\":2799:2805 */\n 0x00\n /* \"#utility.yul\":2826:2846 */\n tag_159\n tag_58\n jump\t// in\n tag_159:\n /* \"#utility.yul\":2816:2846 */\n swap1\n pop\n /* \"#utility.yul\":2855:2888 */\n tag_160\n /* \"#utility.yul\":2883:2887 */\n dup3\n /* \"#utility.yul\":2875:2881 */\n dup3\n /* \"#utility.yul\":2855:2888 */\n tag_78\n jump\t// in\n tag_160:\n /* \"#utility.yul\":2765:2894 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2900:3207 */\n tag_80:\n /* \"#utility.yul\":2961:2965 */\n 0x00\n /* \"#utility.yul\":3051:3069 */\n 0xffffffffffffffff\n /* \"#utility.yul\":3043:3049 */\n dup3\n /* \"#utility.yul\":3040:3070 */\n gt\n /* \"#utility.yul\":3037:3093 */\n iszero\n tag_162\n jumpi\n /* \"#utility.yul\":3073:3091 */\n tag_163\n tag_77\n jump\t// in\n tag_163:\n /* \"#utility.yul\":3037:3093 */\n tag_162:\n /* \"#utility.yul\":3111:3140 */\n tag_164\n /* \"#utility.yul\":3133:3139 */\n dup3\n /* \"#utility.yul\":3111:3140 */\n tag_76\n jump\t// in\n tag_164:\n /* \"#utility.yul\":3103:3140 */\n swap1\n pop\n /* \"#utility.yul\":3195:3199 */\n 0x20\n /* \"#utility.yul\":3189:3193 */\n dup2\n /* \"#utility.yul\":3185:3200 */\n add\n /* \"#utility.yul\":3177:3200 */\n swap1\n pop\n /* \"#utility.yul\":2900:3207 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3213:3367 */\n tag_81:\n /* \"#utility.yul\":3297:3303 */\n dup3\n /* \"#utility.yul\":3292:3295 */\n dup2\n /* \"#utility.yul\":3287:3290 */\n dup4\n /* \"#utility.yul\":3274:3304 */\n calldatacopy\n /* \"#utility.yul\":3359:3360 */\n 0x00\n /* \"#utility.yul\":3350:3356 */\n dup4\n /* \"#utility.yul\":3345:3348 */\n dup4\n /* \"#utility.yul\":3341:3357 */\n add\n /* \"#utility.yul\":3334:3361 */\n mstore\n /* \"#utility.yul\":3213:3367 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3373:3783 */\n tag_82:\n /* \"#utility.yul\":3450:3455 */\n 0x00\n /* \"#utility.yul\":3475:3540 */\n tag_167\n /* \"#utility.yul\":3491:3539 */\n tag_168\n /* \"#utility.yul\":3532:3538 */\n dup5\n /* \"#utility.yul\":3491:3539 */\n tag_80\n jump\t// in\n tag_168:\n /* \"#utility.yul\":3475:3540 */\n tag_79\n jump\t// in\n tag_167:\n /* \"#utility.yul\":3466:3540 */\n swap1\n pop\n /* \"#utility.yul\":3563:3569 */\n dup3\n /* \"#utility.yul\":3556:3561 */\n dup2\n /* \"#utility.yul\":3549:3570 */\n mstore\n /* \"#utility.yul\":3601:3605 */\n 0x20\n /* \"#utility.yul\":3594:3599 */\n dup2\n /* \"#utility.yul\":3590:3606 */\n add\n /* \"#utility.yul\":3639:3642 */\n dup5\n /* \"#utility.yul\":3630:3636 */\n dup5\n /* \"#utility.yul\":3625:3628 */\n dup5\n /* \"#utility.yul\":3621:3637 */\n add\n /* \"#utility.yul\":3618:3643 */\n gt\n /* \"#utility.yul\":3615:3727 */\n iszero\n tag_169\n jumpi\n /* \"#utility.yul\":3646:3725 */\n tag_170\n tag_75\n jump\t// in\n tag_170:\n /* \"#utility.yul\":3615:3727 */\n tag_169:\n /* \"#utility.yul\":3736:3777 */\n tag_171\n /* \"#utility.yul\":3770:3776 */\n dup5\n /* \"#utility.yul\":3765:3768 */\n dup3\n /* \"#utility.yul\":3760:3763 */\n dup6\n /* \"#utility.yul\":3736:3777 */\n tag_81\n jump\t// in\n tag_171:\n /* \"#utility.yul\":3456:3783 */\n pop\n /* \"#utility.yul\":3373:3783 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3802:4140 */\n tag_83:\n /* \"#utility.yul\":3857:3862 */\n 0x00\n /* \"#utility.yul\":3906:3909 */\n dup3\n /* \"#utility.yul\":3899:3903 */\n 0x1f\n /* \"#utility.yul\":3891:3897 */\n dup4\n /* \"#utility.yul\":3887:3904 */\n add\n /* \"#utility.yul\":3883:3910 */\n slt\n /* \"#utility.yul\":3873:3995 */\n tag_173\n jumpi\n /* \"#utility.yul\":3914:3993 */\n tag_174\n tag_74\n jump\t// in\n tag_174:\n /* \"#utility.yul\":3873:3995 */\n tag_173:\n /* \"#utility.yul\":4031:4037 */\n dup2\n /* \"#utility.yul\":4018:4038 */\n calldataload\n /* \"#utility.yul\":4056:4134 */\n tag_175\n /* \"#utility.yul\":4130:4133 */\n dup5\n /* \"#utility.yul\":4122:4128 */\n dup3\n /* \"#utility.yul\":4115:4119 */\n 0x20\n /* \"#utility.yul\":4107:4113 */\n dup7\n /* \"#utility.yul\":4103:4120 */\n add\n /* \"#utility.yul\":4056:4134 */\n tag_82\n jump\t// in\n tag_175:\n /* \"#utility.yul\":4047:4134 */\n swap2\n pop\n /* \"#utility.yul\":3863:4140 */\n pop\n /* \"#utility.yul\":3802:4140 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4146:5227 */\n tag_10:\n /* \"#utility.yul\":4246:4252 */\n 0x00\n /* \"#utility.yul\":4254:4260 */\n dup1\n /* \"#utility.yul\":4262:4268 */\n 0x00\n /* \"#utility.yul\":4270:4276 */\n dup1\n /* \"#utility.yul\":4278:4284 */\n 0x00\n /* \"#utility.yul\":4327:4330 */\n 0xa0\n /* \"#utility.yul\":4315:4324 */\n dup7\n /* \"#utility.yul\":4306:4313 */\n dup9\n /* \"#utility.yul\":4302:4325 */\n sub\n /* \"#utility.yul\":4298:4331 */\n slt\n /* \"#utility.yul\":4295:4415 */\n iszero\n tag_177\n jumpi\n /* \"#utility.yul\":4334:4413 */\n tag_178\n tag_59\n jump\t// in\n tag_178:\n /* \"#utility.yul\":4295:4415 */\n tag_177:\n /* \"#utility.yul\":4454:4455 */\n 0x00\n /* \"#utility.yul\":4479:4530 */\n tag_179\n /* \"#utility.yul\":4522:4529 */\n dup9\n /* \"#utility.yul\":4513:4519 */\n dup3\n /* \"#utility.yul\":4502:4511 */\n dup10\n /* \"#utility.yul\":4498:4520 */\n add\n /* \"#utility.yul\":4479:4530 */\n tag_63\n jump\t// in\n tag_179:\n /* \"#utility.yul\":4469:4530 */\n swap6\n pop\n /* \"#utility.yul\":4425:4540 */\n pop\n /* \"#utility.yul\":4579:4581 */\n 0x20\n /* \"#utility.yul\":4605:4657 */\n tag_180\n /* \"#utility.yul\":4649:4656 */\n dup9\n /* \"#utility.yul\":4640:4646 */\n dup3\n /* \"#utility.yul\":4629:4638 */\n dup10\n /* \"#utility.yul\":4625:4647 */\n add\n /* \"#utility.yul\":4605:4657 */\n tag_66\n jump\t// in\n tag_180:\n /* \"#utility.yul\":4595:4657 */\n swap5\n pop\n /* \"#utility.yul\":4550:4667 */\n pop\n /* \"#utility.yul\":4706:4708 */\n 0x40\n /* \"#utility.yul\":4732:4785 */\n tag_181\n /* \"#utility.yul\":4777:4784 */\n dup9\n /* \"#utility.yul\":4768:4774 */\n dup3\n /* \"#utility.yul\":4757:4766 */\n dup10\n /* \"#utility.yul\":4753:4775 */\n add\n /* \"#utility.yul\":4732:4785 */\n tag_70\n jump\t// in\n tag_181:\n /* \"#utility.yul\":4722:4785 */\n swap4\n pop\n /* \"#utility.yul\":4677:4795 */\n pop\n /* \"#utility.yul\":4834:4836 */\n 0x60\n /* \"#utility.yul\":4860:4912 */\n tag_182\n /* \"#utility.yul\":4904:4911 */\n dup9\n /* \"#utility.yul\":4895:4901 */\n dup3\n /* \"#utility.yul\":4884:4893 */\n dup10\n /* \"#utility.yul\":4880:4902 */\n add\n /* \"#utility.yul\":4860:4912 */\n tag_73\n jump\t// in\n tag_182:\n /* \"#utility.yul\":4850:4912 */\n swap3\n pop\n /* \"#utility.yul\":4805:4922 */\n pop\n /* \"#utility.yul\":4989:4992 */\n 0x80\n /* \"#utility.yul\":4978:4987 */\n dup7\n /* \"#utility.yul\":4974:4993 */\n add\n /* \"#utility.yul\":4961:4994 */\n calldataload\n /* \"#utility.yul\":5021:5039 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5013:5019 */\n dup2\n /* \"#utility.yul\":5010:5040 */\n gt\n /* \"#utility.yul\":5007:5124 */\n iszero\n tag_183\n jumpi\n /* \"#utility.yul\":5043:5122 */\n tag_184\n tag_60\n jump\t// in\n tag_184:\n /* \"#utility.yul\":5007:5124 */\n tag_183:\n /* \"#utility.yul\":5148:5210 */\n tag_185\n /* \"#utility.yul\":5202:5209 */\n dup9\n /* \"#utility.yul\":5193:5199 */\n dup3\n /* \"#utility.yul\":5182:5191 */\n dup10\n /* \"#utility.yul\":5178:5200 */\n add\n /* \"#utility.yul\":5148:5210 */\n tag_83\n jump\t// in\n tag_185:\n /* \"#utility.yul\":5138:5210 */\n swap2\n pop\n /* \"#utility.yul\":4932:5220 */\n pop\n /* \"#utility.yul\":4146:5227 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":5233:5293 */\n tag_84:\n /* \"#utility.yul\":5261:5264 */\n 0x00\n /* \"#utility.yul\":5282:5287 */\n dup2\n /* \"#utility.yul\":5275:5287 */\n swap1\n pop\n /* \"#utility.yul\":5233:5293 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5299:5441 */\n tag_85:\n /* \"#utility.yul\":5349:5358 */\n 0x00\n /* \"#utility.yul\":5382:5435 */\n tag_188\n /* \"#utility.yul\":5400:5434 */\n tag_189\n /* \"#utility.yul\":5409:5433 */\n tag_190\n /* \"#utility.yul\":5427:5432 */\n dup5\n /* \"#utility.yul\":5409:5433 */\n tag_67\n jump\t// in\n tag_190:\n /* \"#utility.yul\":5400:5434 */\n tag_84\n jump\t// in\n tag_189:\n /* \"#utility.yul\":5382:5435 */\n tag_67\n jump\t// in\n tag_188:\n /* \"#utility.yul\":5369:5435 */\n swap1\n pop\n /* \"#utility.yul\":5299:5441 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5447:5573 */\n tag_86:\n /* \"#utility.yul\":5497:5506 */\n 0x00\n /* \"#utility.yul\":5530:5567 */\n tag_192\n /* \"#utility.yul\":5561:5566 */\n dup3\n /* \"#utility.yul\":5530:5567 */\n tag_85\n jump\t// in\n tag_192:\n /* \"#utility.yul\":5517:5567 */\n swap1\n pop\n /* \"#utility.yul\":5447:5573 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5579:5725 */\n tag_87:\n /* \"#utility.yul\":5649:5658 */\n 0x00\n /* \"#utility.yul\":5682:5719 */\n tag_194\n /* \"#utility.yul\":5713:5718 */\n dup3\n /* \"#utility.yul\":5682:5719 */\n tag_86\n jump\t// in\n tag_194:\n /* \"#utility.yul\":5669:5719 */\n swap1\n pop\n /* \"#utility.yul\":5579:5725 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5731:5902 */\n tag_88:\n /* \"#utility.yul\":5838:5895 */\n tag_196\n /* \"#utility.yul\":5889:5894 */\n dup2\n /* \"#utility.yul\":5838:5895 */\n tag_87\n jump\t// in\n tag_196:\n /* \"#utility.yul\":5833:5836 */\n dup3\n /* \"#utility.yul\":5826:5896 */\n mstore\n /* \"#utility.yul\":5731:5902 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5908:6170 */\n tag_15:\n /* \"#utility.yul\":6021:6025 */\n 0x00\n /* \"#utility.yul\":6059:6061 */\n 0x20\n /* \"#utility.yul\":6048:6057 */\n dup3\n /* \"#utility.yul\":6044:6062 */\n add\n /* \"#utility.yul\":6036:6062 */\n swap1\n pop\n /* \"#utility.yul\":6072:6163 */\n tag_198\n /* \"#utility.yul\":6160:6161 */\n 0x00\n /* \"#utility.yul\":6149:6158 */\n dup4\n /* \"#utility.yul\":6145:6162 */\n add\n /* \"#utility.yul\":6136:6142 */\n dup5\n /* \"#utility.yul\":6072:6163 */\n tag_88\n jump\t// in\n tag_198:\n /* \"#utility.yul\":5908:6170 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6176:6503 */\n tag_18:\n /* \"#utility.yul\":6234:6240 */\n 0x00\n /* \"#utility.yul\":6283:6285 */\n 0x20\n /* \"#utility.yul\":6271:6280 */\n dup3\n /* \"#utility.yul\":6262:6269 */\n dup5\n /* \"#utility.yul\":6258:6281 */\n sub\n /* \"#utility.yul\":6254:6286 */\n slt\n /* \"#utility.yul\":6251:6370 */\n iszero\n tag_200\n jumpi\n /* \"#utility.yul\":6289:6368 */\n tag_201\n tag_59\n jump\t// in\n tag_201:\n /* \"#utility.yul\":6251:6370 */\n tag_200:\n /* \"#utility.yul\":6409:6410 */\n 0x00\n /* \"#utility.yul\":6434:6486 */\n tag_202\n /* \"#utility.yul\":6478:6485 */\n dup5\n /* \"#utility.yul\":6469:6475 */\n dup3\n /* \"#utility.yul\":6458:6467 */\n dup6\n /* \"#utility.yul\":6454:6476 */\n add\n /* \"#utility.yul\":6434:6486 */\n tag_66\n jump\t// in\n tag_202:\n /* \"#utility.yul\":6424:6486 */\n swap2\n pop\n /* \"#utility.yul\":6380:6496 */\n pop\n /* \"#utility.yul\":6176:6503 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6509:6627 */\n tag_89:\n /* \"#utility.yul\":6596:6620 */\n tag_204\n /* \"#utility.yul\":6614:6619 */\n dup2\n /* \"#utility.yul\":6596:6620 */\n tag_68\n jump\t// in\n tag_204:\n /* \"#utility.yul\":6591:6594 */\n dup3\n /* \"#utility.yul\":6584:6621 */\n mstore\n /* \"#utility.yul\":6509:6627 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6633:6855 */\n tag_21:\n /* \"#utility.yul\":6726:6730 */\n 0x00\n /* \"#utility.yul\":6764:6766 */\n 0x20\n /* \"#utility.yul\":6753:6762 */\n dup3\n /* \"#utility.yul\":6749:6767 */\n add\n /* \"#utility.yul\":6741:6767 */\n swap1\n pop\n /* \"#utility.yul\":6777:6848 */\n tag_206\n /* \"#utility.yul\":6845:6846 */\n 0x00\n /* \"#utility.yul\":6834:6843 */\n dup4\n /* \"#utility.yul\":6830:6847 */\n add\n /* \"#utility.yul\":6821:6827 */\n dup5\n /* \"#utility.yul\":6777:6848 */\n tag_89\n jump\t// in\n tag_206:\n /* \"#utility.yul\":6633:6855 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6861:6978 */\n tag_90:\n /* \"#utility.yul\":6970:6971 */\n 0x00\n /* \"#utility.yul\":6967:6968 */\n dup1\n /* \"#utility.yul\":6960:6972 */\n revert\n /* \"#utility.yul\":6984:7101 */\n tag_91:\n /* \"#utility.yul\":7093:7094 */\n 0x00\n /* \"#utility.yul\":7090:7091 */\n dup1\n /* \"#utility.yul\":7083:7095 */\n revert\n /* \"#utility.yul\":7107:7427 */\n tag_92:\n /* \"#utility.yul\":7193:7197 */\n 0x00\n /* \"#utility.yul\":7283:7301 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7275:7281 */\n dup3\n /* \"#utility.yul\":7272:7302 */\n gt\n /* \"#utility.yul\":7269:7325 */\n iszero\n tag_210\n jumpi\n /* \"#utility.yul\":7305:7323 */\n tag_211\n tag_77\n jump\t// in\n tag_211:\n /* \"#utility.yul\":7269:7325 */\n tag_210:\n /* \"#utility.yul\":7355:7359 */\n 0x20\n /* \"#utility.yul\":7347:7353 */\n dup3\n /* \"#utility.yul\":7343:7360 */\n mul\n /* \"#utility.yul\":7335:7360 */\n swap1\n pop\n /* \"#utility.yul\":7415:7419 */\n 0x20\n /* \"#utility.yul\":7409:7413 */\n dup2\n /* \"#utility.yul\":7405:7420 */\n add\n /* \"#utility.yul\":7397:7420 */\n swap1\n pop\n /* \"#utility.yul\":7107:7427 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7433:7550 */\n tag_93:\n /* \"#utility.yul\":7542:7543 */\n 0x00\n /* \"#utility.yul\":7539:7540 */\n dup1\n /* \"#utility.yul\":7532:7544 */\n revert\n /* \"#utility.yul\":7571:8513 */\n tag_94:\n /* \"#utility.yul\":7676:7681 */\n 0x00\n /* \"#utility.yul\":7701:7791 */\n tag_214\n /* \"#utility.yul\":7717:7790 */\n tag_215\n /* \"#utility.yul\":7783:7789 */\n dup5\n /* \"#utility.yul\":7717:7790 */\n tag_92\n jump\t// in\n tag_215:\n /* \"#utility.yul\":7701:7791 */\n tag_79\n jump\t// in\n tag_214:\n /* \"#utility.yul\":7692:7791 */\n swap1\n pop\n /* \"#utility.yul\":7811:7816 */\n dup1\n /* \"#utility.yul\":7840:7846 */\n dup4\n /* \"#utility.yul\":7833:7838 */\n dup3\n /* \"#utility.yul\":7826:7847 */\n mstore\n /* \"#utility.yul\":7874:7878 */\n 0x20\n /* \"#utility.yul\":7867:7872 */\n dup3\n /* \"#utility.yul\":7863:7879 */\n add\n /* \"#utility.yul\":7856:7879 */\n swap1\n pop\n /* \"#utility.yul\":7927:7931 */\n 0x20\n /* \"#utility.yul\":7919:7925 */\n dup5\n /* \"#utility.yul\":7915:7932 */\n mul\n /* \"#utility.yul\":7907:7913 */\n dup4\n /* \"#utility.yul\":7903:7933 */\n add\n /* \"#utility.yul\":7956:7959 */\n dup6\n /* \"#utility.yul\":7948:7954 */\n dup2\n /* \"#utility.yul\":7945:7960 */\n gt\n /* \"#utility.yul\":7942:8064 */\n iszero\n tag_216\n jumpi\n /* \"#utility.yul\":7975:8054 */\n tag_217\n tag_93\n jump\t// in\n tag_217:\n /* \"#utility.yul\":7942:8064 */\n tag_216:\n /* \"#utility.yul\":8090:8096 */\n dup4\n /* \"#utility.yul\":8073:8507 */\n tag_218:\n /* \"#utility.yul\":8107:8113 */\n dup2\n /* \"#utility.yul\":8102:8105 */\n dup2\n /* \"#utility.yul\":8099:8114 */\n lt\n /* \"#utility.yul\":8073:8507 */\n iszero\n tag_220\n jumpi\n /* \"#utility.yul\":8196:8199 */\n dup1\n /* \"#utility.yul\":8183:8200 */\n calldataload\n /* \"#utility.yul\":8232:8250 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8219:8230 */\n dup2\n /* \"#utility.yul\":8216:8251 */\n gt\n /* \"#utility.yul\":8213:8335 */\n iszero\n tag_221\n jumpi\n /* \"#utility.yul\":8254:8333 */\n tag_222\n tag_74\n jump\t// in\n tag_222:\n /* \"#utility.yul\":8213:8335 */\n tag_221:\n /* \"#utility.yul\":8378:8389 */\n dup1\n /* \"#utility.yul\":8370:8376 */\n dup7\n /* \"#utility.yul\":8366:8390 */\n add\n /* \"#utility.yul\":8416:8462 */\n tag_223\n /* \"#utility.yul\":8458:8461 */\n dup10\n /* \"#utility.yul\":8446:8456 */\n dup3\n /* \"#utility.yul\":8416:8462 */\n tag_83\n jump\t// in\n tag_223:\n /* \"#utility.yul\":8411:8414 */\n dup6\n /* \"#utility.yul\":8404:8463 */\n mstore\n /* \"#utility.yul\":8492:8496 */\n 0x20\n /* \"#utility.yul\":8487:8490 */\n dup6\n /* \"#utility.yul\":8483:8497 */\n add\n /* \"#utility.yul\":8476:8497 */\n swap5\n pop\n /* \"#utility.yul\":8149:8507 */\n pop\n pop\n /* \"#utility.yul\":8133:8137 */\n 0x20\n /* \"#utility.yul\":8128:8131 */\n dup2\n /* \"#utility.yul\":8124:8138 */\n add\n /* \"#utility.yul\":8117:8138 */\n swap1\n pop\n /* \"#utility.yul\":8073:8507 */\n jump(tag_218)\n tag_220:\n /* \"#utility.yul\":8077:8098 */\n pop\n /* \"#utility.yul\":7682:8513 */\n pop\n pop\n /* \"#utility.yul\":7571:8513 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8534:8922 */\n tag_95:\n /* \"#utility.yul\":8614:8619 */\n 0x00\n /* \"#utility.yul\":8663:8666 */\n dup3\n /* \"#utility.yul\":8656:8660 */\n 0x1f\n /* \"#utility.yul\":8648:8654 */\n dup4\n /* \"#utility.yul\":8644:8661 */\n add\n /* \"#utility.yul\":8640:8667 */\n slt\n /* \"#utility.yul\":8630:8752 */\n tag_225\n jumpi\n /* \"#utility.yul\":8671:8750 */\n tag_226\n tag_74\n jump\t// in\n tag_226:\n /* \"#utility.yul\":8630:8752 */\n tag_225:\n /* \"#utility.yul\":8788:8794 */\n dup2\n /* \"#utility.yul\":8775:8795 */\n calldataload\n /* \"#utility.yul\":8813:8916 */\n tag_227\n /* \"#utility.yul\":8912:8915 */\n dup5\n /* \"#utility.yul\":8904:8910 */\n dup3\n /* \"#utility.yul\":8897:8901 */\n 0x20\n /* \"#utility.yul\":8889:8895 */\n dup7\n /* \"#utility.yul\":8885:8902 */\n add\n /* \"#utility.yul\":8813:8916 */\n tag_94\n jump\t// in\n tag_227:\n /* \"#utility.yul\":8804:8916 */\n swap2\n pop\n /* \"#utility.yul\":8620:8922 */\n pop\n /* \"#utility.yul\":8534:8922 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8970:9746 */\n tag_96:\n /* \"#utility.yul\":9047:9052 */\n 0x00\n /* \"#utility.yul\":9091:9095 */\n 0x40\n /* \"#utility.yul\":9079:9088 */\n dup3\n /* \"#utility.yul\":9074:9077 */\n dup5\n /* \"#utility.yul\":9070:9089 */\n sub\n /* \"#utility.yul\":9066:9096 */\n slt\n /* \"#utility.yul\":9063:9180 */\n iszero\n tag_229\n jumpi\n /* \"#utility.yul\":9099:9178 */\n tag_230\n tag_90\n jump\t// in\n tag_230:\n /* \"#utility.yul\":9063:9180 */\n tag_229:\n /* \"#utility.yul\":9198:9219 */\n tag_231\n /* \"#utility.yul\":9214:9218 */\n 0x40\n /* \"#utility.yul\":9198:9219 */\n tag_79\n jump\t// in\n tag_231:\n /* \"#utility.yul\":9189:9219 */\n swap1\n pop\n /* \"#utility.yul\":9281:9282 */\n 0x00\n /* \"#utility.yul\":9321:9368 */\n tag_232\n /* \"#utility.yul\":9364:9367 */\n dup5\n /* \"#utility.yul\":9355:9361 */\n dup3\n /* \"#utility.yul\":9344:9353 */\n dup6\n /* \"#utility.yul\":9340:9362 */\n add\n /* \"#utility.yul\":9321:9368 */\n tag_63\n jump\t// in\n tag_232:\n /* \"#utility.yul\":9314:9318 */\n 0x00\n /* \"#utility.yul\":9307:9312 */\n dup4\n /* \"#utility.yul\":9303:9319 */\n add\n /* \"#utility.yul\":9296:9369 */\n mstore\n /* \"#utility.yul\":9229:9380 */\n pop\n /* \"#utility.yul\":9471:9473 */\n 0x20\n /* \"#utility.yul\":9460:9469 */\n dup3\n /* \"#utility.yul\":9456:9474 */\n add\n /* \"#utility.yul\":9443:9475 */\n calldataload\n /* \"#utility.yul\":9502:9520 */\n 0xffffffffffffffff\n /* \"#utility.yul\":9494:9500 */\n dup2\n /* \"#utility.yul\":9491:9521 */\n gt\n /* \"#utility.yul\":9488:9605 */\n iszero\n tag_233\n jumpi\n /* \"#utility.yul\":9524:9603 */\n tag_234\n tag_91\n jump\t// in\n tag_234:\n /* \"#utility.yul\":9488:9605 */\n tag_233:\n /* \"#utility.yul\":9644:9727 */\n tag_235\n /* \"#utility.yul\":9723:9726 */\n dup5\n /* \"#utility.yul\":9714:9720 */\n dup3\n /* \"#utility.yul\":9703:9712 */\n dup6\n /* \"#utility.yul\":9699:9721 */\n add\n /* \"#utility.yul\":9644:9727 */\n tag_95\n jump\t// in\n tag_235:\n /* \"#utility.yul\":9637:9641 */\n 0x20\n /* \"#utility.yul\":9630:9635 */\n dup4\n /* \"#utility.yul\":9626:9642 */\n add\n /* \"#utility.yul\":9619:9728 */\n mstore\n /* \"#utility.yul\":9390:9739 */\n pop\n /* \"#utility.yul\":8970:9746 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9752:11049 */\n tag_24:\n /* \"#utility.yul\":9880:9886 */\n 0x00\n /* \"#utility.yul\":9888:9894 */\n dup1\n /* \"#utility.yul\":9896:9902 */\n 0x00\n /* \"#utility.yul\":9904:9910 */\n dup1\n /* \"#utility.yul\":9912:9918 */\n 0x00\n /* \"#utility.yul\":9961:9964 */\n 0xa0\n /* \"#utility.yul\":9949:9958 */\n dup7\n /* \"#utility.yul\":9940:9947 */\n dup9\n /* \"#utility.yul\":9936:9959 */\n sub\n /* \"#utility.yul\":9932:9965 */\n slt\n /* \"#utility.yul\":9929:10049 */\n iszero\n tag_237\n jumpi\n /* \"#utility.yul\":9968:10047 */\n tag_238\n tag_59\n jump\t// in\n tag_238:\n /* \"#utility.yul\":9929:10049 */\n tag_237:\n /* \"#utility.yul\":10088:10089 */\n 0x00\n /* \"#utility.yul\":10113:10164 */\n tag_239\n /* \"#utility.yul\":10156:10163 */\n dup9\n /* \"#utility.yul\":10147:10153 */\n dup3\n /* \"#utility.yul\":10136:10145 */\n dup10\n /* \"#utility.yul\":10132:10154 */\n add\n /* \"#utility.yul\":10113:10164 */\n tag_63\n jump\t// in\n tag_239:\n /* \"#utility.yul\":10103:10164 */\n swap6\n pop\n /* \"#utility.yul\":10059:10174 */\n pop\n /* \"#utility.yul\":10213:10215 */\n 0x20\n /* \"#utility.yul\":10239:10291 */\n tag_240\n /* \"#utility.yul\":10283:10290 */\n dup9\n /* \"#utility.yul\":10274:10280 */\n dup3\n /* \"#utility.yul\":10263:10272 */\n dup10\n /* \"#utility.yul\":10259:10281 */\n add\n /* \"#utility.yul\":10239:10291 */\n tag_66\n jump\t// in\n tag_240:\n /* \"#utility.yul\":10229:10291 */\n swap5\n pop\n /* \"#utility.yul\":10184:10301 */\n pop\n /* \"#utility.yul\":10368:10370 */\n 0x40\n /* \"#utility.yul\":10357:10366 */\n dup7\n /* \"#utility.yul\":10353:10371 */\n add\n /* \"#utility.yul\":10340:10372 */\n calldataload\n /* \"#utility.yul\":10399:10417 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10391:10397 */\n dup2\n /* \"#utility.yul\":10388:10418 */\n gt\n /* \"#utility.yul\":10385:10502 */\n iszero\n tag_241\n jumpi\n /* \"#utility.yul\":10421:10500 */\n tag_242\n tag_60\n jump\t// in\n tag_242:\n /* \"#utility.yul\":10385:10502 */\n tag_241:\n /* \"#utility.yul\":10526:10607 */\n tag_243\n /* \"#utility.yul\":10599:10606 */\n dup9\n /* \"#utility.yul\":10590:10596 */\n dup3\n /* \"#utility.yul\":10579:10588 */\n dup10\n /* \"#utility.yul\":10575:10597 */\n add\n /* \"#utility.yul\":10526:10607 */\n tag_96\n jump\t// in\n tag_243:\n /* \"#utility.yul\":10516:10607 */\n swap4\n pop\n /* \"#utility.yul\":10311:10617 */\n pop\n /* \"#utility.yul\":10656:10658 */\n 0x60\n /* \"#utility.yul\":10682:10734 */\n tag_244\n /* \"#utility.yul\":10726:10733 */\n dup9\n /* \"#utility.yul\":10717:10723 */\n dup3\n /* \"#utility.yul\":10706:10715 */\n dup10\n /* \"#utility.yul\":10702:10724 */\n add\n /* \"#utility.yul\":10682:10734 */\n tag_73\n jump\t// in\n tag_244:\n /* \"#utility.yul\":10672:10734 */\n swap3\n pop\n /* \"#utility.yul\":10627:10744 */\n pop\n /* \"#utility.yul\":10811:10814 */\n 0x80\n /* \"#utility.yul\":10800:10809 */\n dup7\n /* \"#utility.yul\":10796:10815 */\n add\n /* \"#utility.yul\":10783:10816 */\n calldataload\n /* \"#utility.yul\":10843:10861 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10835:10841 */\n dup2\n /* \"#utility.yul\":10832:10862 */\n gt\n /* \"#utility.yul\":10829:10946 */\n iszero\n tag_245\n jumpi\n /* \"#utility.yul\":10865:10944 */\n tag_246\n tag_60\n jump\t// in\n tag_246:\n /* \"#utility.yul\":10829:10946 */\n tag_245:\n /* \"#utility.yul\":10970:11032 */\n tag_247\n /* \"#utility.yul\":11024:11031 */\n dup9\n /* \"#utility.yul\":11015:11021 */\n dup3\n /* \"#utility.yul\":11004:11013 */\n dup10\n /* \"#utility.yul\":11000:11022 */\n add\n /* \"#utility.yul\":10970:11032 */\n tag_83\n jump\t// in\n tag_247:\n /* \"#utility.yul\":10960:11032 */\n swap2\n pop\n /* \"#utility.yul\":10754:11042 */\n pop\n /* \"#utility.yul\":9752:11049 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":11055:11600 */\n tag_28:\n /* \"#utility.yul\":11142:11148 */\n 0x00\n /* \"#utility.yul\":11191:11193 */\n 0x20\n /* \"#utility.yul\":11179:11188 */\n dup3\n /* \"#utility.yul\":11170:11177 */\n dup5\n /* \"#utility.yul\":11166:11189 */\n sub\n /* \"#utility.yul\":11162:11194 */\n slt\n /* \"#utility.yul\":11159:11278 */\n iszero\n tag_249\n jumpi\n /* \"#utility.yul\":11197:11276 */\n tag_250\n tag_59\n jump\t// in\n tag_250:\n /* \"#utility.yul\":11159:11278 */\n tag_249:\n /* \"#utility.yul\":11345:11346 */\n 0x00\n /* \"#utility.yul\":11334:11343 */\n dup3\n /* \"#utility.yul\":11330:11347 */\n add\n /* \"#utility.yul\":11317:11348 */\n calldataload\n /* \"#utility.yul\":11375:11393 */\n 0xffffffffffffffff\n /* \"#utility.yul\":11367:11373 */\n dup2\n /* \"#utility.yul\":11364:11394 */\n gt\n /* \"#utility.yul\":11361:11478 */\n iszero\n tag_251\n jumpi\n /* \"#utility.yul\":11397:11476 */\n tag_252\n tag_60\n jump\t// in\n tag_252:\n /* \"#utility.yul\":11361:11478 */\n tag_251:\n /* \"#utility.yul\":11502:11583 */\n tag_253\n /* \"#utility.yul\":11575:11582 */\n dup5\n /* \"#utility.yul\":11566:11572 */\n dup3\n /* \"#utility.yul\":11555:11564 */\n dup6\n /* \"#utility.yul\":11551:11573 */\n add\n /* \"#utility.yul\":11502:11583 */\n tag_96\n jump\t// in\n tag_253:\n /* \"#utility.yul\":11492:11583 */\n swap2\n pop\n /* \"#utility.yul\":11288:11593 */\n pop\n /* \"#utility.yul\":11055:11600 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11606:11721 */\n tag_97:\n /* \"#utility.yul\":11691:11714 */\n tag_255\n /* \"#utility.yul\":11708:11713 */\n dup2\n /* \"#utility.yul\":11691:11714 */\n tag_71\n jump\t// in\n tag_255:\n /* \"#utility.yul\":11686:11689 */\n dup3\n /* \"#utility.yul\":11679:11715 */\n mstore\n /* \"#utility.yul\":11606:11721 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11727:11804 */\n tag_98:\n /* \"#utility.yul\":11764:11771 */\n 0x00\n /* \"#utility.yul\":11793:11798 */\n dup2\n /* \"#utility.yul\":11782:11798 */\n swap1\n pop\n /* \"#utility.yul\":11727:11804 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":11810:11928 */\n tag_99:\n /* \"#utility.yul\":11897:11921 */\n tag_258\n /* \"#utility.yul\":11915:11920 */\n dup2\n /* \"#utility.yul\":11897:11921 */\n tag_98\n jump\t// in\n tag_258:\n /* \"#utility.yul\":11892:11895 */\n dup3\n /* \"#utility.yul\":11885:11922 */\n mstore\n /* \"#utility.yul\":11810:11928 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11934:12368 */\n tag_31:\n /* \"#utility.yul\":12079:12083 */\n 0x00\n /* \"#utility.yul\":12117:12119 */\n 0x60\n /* \"#utility.yul\":12106:12115 */\n dup3\n /* \"#utility.yul\":12102:12120 */\n add\n /* \"#utility.yul\":12094:12120 */\n swap1\n pop\n /* \"#utility.yul\":12130:12199 */\n tag_260\n /* \"#utility.yul\":12196:12197 */\n 0x00\n /* \"#utility.yul\":12185:12194 */\n dup4\n /* \"#utility.yul\":12181:12198 */\n add\n /* \"#utility.yul\":12172:12178 */\n dup7\n /* \"#utility.yul\":12130:12199 */\n tag_97\n jump\t// in\n tag_260:\n /* \"#utility.yul\":12209:12281 */\n tag_261\n /* \"#utility.yul\":12277:12279 */\n 0x20\n /* \"#utility.yul\":12266:12275 */\n dup4\n /* \"#utility.yul\":12262:12280 */\n add\n /* \"#utility.yul\":12253:12259 */\n dup6\n /* \"#utility.yul\":12209:12281 */\n tag_99\n jump\t// in\n tag_261:\n /* \"#utility.yul\":12291:12361 */\n tag_262\n /* \"#utility.yul\":12357:12359 */\n 0x40\n /* \"#utility.yul\":12346:12355 */\n dup4\n /* \"#utility.yul\":12342:12360 */\n add\n /* \"#utility.yul\":12333:12339 */\n dup5\n /* \"#utility.yul\":12291:12361 */\n tag_97\n jump\t// in\n tag_262:\n /* \"#utility.yul\":11934:12368 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12374:12486 */\n tag_100:\n /* \"#utility.yul\":12457:12479 */\n tag_264\n /* \"#utility.yul\":12473:12478 */\n dup2\n /* \"#utility.yul\":12457:12479 */\n tag_61\n jump\t// in\n tag_264:\n /* \"#utility.yul\":12452:12455 */\n dup3\n /* \"#utility.yul\":12445:12480 */\n mstore\n /* \"#utility.yul\":12374:12486 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12492:12607 */\n tag_101:\n /* \"#utility.yul\":12577:12600 */\n tag_266\n /* \"#utility.yul\":12594:12599 */\n dup2\n /* \"#utility.yul\":12577:12600 */\n tag_64\n jump\t// in\n tag_266:\n /* \"#utility.yul\":12572:12575 */\n dup3\n /* \"#utility.yul\":12565:12601 */\n mstore\n /* \"#utility.yul\":12492:12607 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12613:12711 */\n tag_102:\n /* \"#utility.yul\":12664:12670 */\n 0x00\n /* \"#utility.yul\":12698:12703 */\n dup2\n /* \"#utility.yul\":12692:12704 */\n mload\n /* \"#utility.yul\":12682:12704 */\n swap1\n pop\n /* \"#utility.yul\":12613:12711 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12717:12885 */\n tag_103:\n /* \"#utility.yul\":12800:12811 */\n 0x00\n /* \"#utility.yul\":12834:12840 */\n dup3\n /* \"#utility.yul\":12829:12832 */\n dup3\n /* \"#utility.yul\":12822:12841 */\n mstore\n /* \"#utility.yul\":12874:12878 */\n 0x20\n /* \"#utility.yul\":12869:12872 */\n dup3\n /* \"#utility.yul\":12865:12879 */\n add\n /* \"#utility.yul\":12850:12879 */\n swap1\n pop\n /* \"#utility.yul\":12717:12885 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12891:13198 */\n tag_104:\n /* \"#utility.yul\":12959:12960 */\n 0x00\n /* \"#utility.yul\":12969:13082 */\n tag_270:\n /* \"#utility.yul\":12983:12989 */\n dup4\n /* \"#utility.yul\":12980:12981 */\n dup2\n /* \"#utility.yul\":12977:12990 */\n lt\n /* \"#utility.yul\":12969:13082 */\n iszero\n tag_272\n jumpi\n /* \"#utility.yul\":13068:13069 */\n dup1\n /* \"#utility.yul\":13063:13066 */\n dup3\n /* \"#utility.yul\":13059:13070 */\n add\n /* \"#utility.yul\":13053:13071 */\n mload\n /* \"#utility.yul\":13049:13050 */\n dup2\n /* \"#utility.yul\":13044:13047 */\n dup5\n /* \"#utility.yul\":13040:13051 */\n add\n /* \"#utility.yul\":13033:13072 */\n mstore\n /* \"#utility.yul\":13005:13007 */\n 0x20\n /* \"#utility.yul\":13002:13003 */\n dup2\n /* \"#utility.yul\":12998:13008 */\n add\n /* \"#utility.yul\":12993:13008 */\n swap1\n pop\n /* \"#utility.yul\":12969:13082 */\n jump(tag_270)\n tag_272:\n /* \"#utility.yul\":13100:13106 */\n dup4\n /* \"#utility.yul\":13097:13098 */\n dup2\n /* \"#utility.yul\":13094:13107 */\n gt\n /* \"#utility.yul\":13091:13192 */\n iszero\n tag_273\n jumpi\n /* \"#utility.yul\":13180:13181 */\n 0x00\n /* \"#utility.yul\":13171:13177 */\n dup5\n /* \"#utility.yul\":13166:13169 */\n dup5\n /* \"#utility.yul\":13162:13178 */\n add\n /* \"#utility.yul\":13155:13182 */\n mstore\n /* \"#utility.yul\":13091:13192 */\n tag_273:\n /* \"#utility.yul\":12940:13198 */\n pop\n /* \"#utility.yul\":12891:13198 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13204:13564 */\n tag_105:\n /* \"#utility.yul\":13290:13293 */\n 0x00\n /* \"#utility.yul\":13318:13356 */\n tag_275\n /* \"#utility.yul\":13350:13355 */\n dup3\n /* \"#utility.yul\":13318:13356 */\n tag_102\n jump\t// in\n tag_275:\n /* \"#utility.yul\":13372:13442 */\n tag_276\n /* \"#utility.yul\":13435:13441 */\n dup2\n /* \"#utility.yul\":13430:13433 */\n dup6\n /* \"#utility.yul\":13372:13442 */\n tag_103\n jump\t// in\n tag_276:\n /* \"#utility.yul\":13365:13442 */\n swap4\n pop\n /* \"#utility.yul\":13451:13503 */\n tag_277\n /* \"#utility.yul\":13496:13502 */\n dup2\n /* \"#utility.yul\":13491:13494 */\n dup6\n /* \"#utility.yul\":13484:13488 */\n 0x20\n /* \"#utility.yul\":13477:13482 */\n dup7\n /* \"#utility.yul\":13473:13489 */\n add\n /* \"#utility.yul\":13451:13503 */\n tag_104\n jump\t// in\n tag_277:\n /* \"#utility.yul\":13528:13557 */\n tag_278\n /* \"#utility.yul\":13550:13556 */\n dup2\n /* \"#utility.yul\":13528:13557 */\n tag_76\n jump\t// in\n tag_278:\n /* \"#utility.yul\":13523:13526 */\n dup5\n /* \"#utility.yul\":13519:13558 */\n add\n /* \"#utility.yul\":13512:13558 */\n swap2\n pop\n /* \"#utility.yul\":13294:13564 */\n pop\n /* \"#utility.yul\":13204:13564 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13570:14305 */\n tag_34:\n /* \"#utility.yul\":13785:13789 */\n 0x00\n /* \"#utility.yul\":13823:13826 */\n 0xa0\n /* \"#utility.yul\":13812:13821 */\n dup3\n /* \"#utility.yul\":13808:13827 */\n add\n /* \"#utility.yul\":13800:13827 */\n swap1\n pop\n /* \"#utility.yul\":13837:13904 */\n tag_280\n /* \"#utility.yul\":13901:13902 */\n 0x00\n /* \"#utility.yul\":13890:13899 */\n dup4\n /* \"#utility.yul\":13886:13903 */\n add\n /* \"#utility.yul\":13877:13883 */\n dup9\n /* \"#utility.yul\":13837:13904 */\n tag_100\n jump\t// in\n tag_280:\n /* \"#utility.yul\":13914:13984 */\n tag_281\n /* \"#utility.yul\":13980:13982 */\n 0x20\n /* \"#utility.yul\":13969:13978 */\n dup4\n /* \"#utility.yul\":13965:13983 */\n add\n /* \"#utility.yul\":13956:13962 */\n dup8\n /* \"#utility.yul\":13914:13984 */\n tag_101\n jump\t// in\n tag_281:\n /* \"#utility.yul\":13994:14066 */\n tag_282\n /* \"#utility.yul\":14062:14064 */\n 0x40\n /* \"#utility.yul\":14051:14060 */\n dup4\n /* \"#utility.yul\":14047:14065 */\n add\n /* \"#utility.yul\":14038:14044 */\n dup7\n /* \"#utility.yul\":13994:14066 */\n tag_89\n jump\t// in\n tag_282:\n /* \"#utility.yul\":14076:14146 */\n tag_283\n /* \"#utility.yul\":14142:14144 */\n 0x60\n /* \"#utility.yul\":14131:14140 */\n dup4\n /* \"#utility.yul\":14127:14145 */\n add\n /* \"#utility.yul\":14118:14124 */\n dup6\n /* \"#utility.yul\":14076:14146 */\n tag_97\n jump\t// in\n tag_283:\n /* \"#utility.yul\":14194:14203 */\n dup2\n /* \"#utility.yul\":14188:14192 */\n dup2\n /* \"#utility.yul\":14184:14204 */\n sub\n /* \"#utility.yul\":14178:14181 */\n 0x80\n /* \"#utility.yul\":14167:14176 */\n dup4\n /* \"#utility.yul\":14163:14182 */\n add\n /* \"#utility.yul\":14156:14205 */\n mstore\n /* \"#utility.yul\":14222:14298 */\n tag_284\n /* \"#utility.yul\":14293:14297 */\n dup2\n /* \"#utility.yul\":14284:14290 */\n dup5\n /* \"#utility.yul\":14222:14298 */\n tag_105\n jump\t// in\n tag_284:\n /* \"#utility.yul\":14214:14298 */\n swap1\n pop\n /* \"#utility.yul\":13570:14305 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14311:14529 */\n tag_40:\n /* \"#utility.yul\":14402:14406 */\n 0x00\n /* \"#utility.yul\":14440:14442 */\n 0x20\n /* \"#utility.yul\":14429:14438 */\n dup3\n /* \"#utility.yul\":14425:14443 */\n add\n /* \"#utility.yul\":14417:14443 */\n swap1\n pop\n /* \"#utility.yul\":14453:14522 */\n tag_286\n /* \"#utility.yul\":14519:14520 */\n 0x00\n /* \"#utility.yul\":14508:14517 */\n dup4\n /* \"#utility.yul\":14504:14521 */\n add\n /* \"#utility.yul\":14495:14501 */\n dup5\n /* \"#utility.yul\":14453:14522 */\n tag_101\n jump\t// in\n tag_286:\n /* \"#utility.yul\":14311:14529 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14535:14678 */\n tag_106:\n /* \"#utility.yul\":14592:14597 */\n 0x00\n /* \"#utility.yul\":14623:14629 */\n dup2\n /* \"#utility.yul\":14617:14630 */\n mload\n /* \"#utility.yul\":14608:14630 */\n swap1\n pop\n /* \"#utility.yul\":14639:14672 */\n tag_288\n /* \"#utility.yul\":14666:14671 */\n dup2\n /* \"#utility.yul\":14639:14672 */\n tag_69\n jump\t// in\n tag_288:\n /* \"#utility.yul\":14535:14678 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14684:15035 */\n tag_44:\n /* \"#utility.yul\":14754:14760 */\n 0x00\n /* \"#utility.yul\":14803:14805 */\n 0x20\n /* \"#utility.yul\":14791:14800 */\n dup3\n /* \"#utility.yul\":14782:14789 */\n dup5\n /* \"#utility.yul\":14778:14801 */\n sub\n /* \"#utility.yul\":14774:14806 */\n slt\n /* \"#utility.yul\":14771:14890 */\n iszero\n tag_290\n jumpi\n /* \"#utility.yul\":14809:14888 */\n tag_291\n tag_59\n jump\t// in\n tag_291:\n /* \"#utility.yul\":14771:14890 */\n tag_290:\n /* \"#utility.yul\":14929:14930 */\n 0x00\n /* \"#utility.yul\":14954:15018 */\n tag_292\n /* \"#utility.yul\":15010:15017 */\n dup5\n /* \"#utility.yul\":15001:15007 */\n dup3\n /* \"#utility.yul\":14990:14999 */\n dup6\n /* \"#utility.yul\":14986:15008 */\n add\n /* \"#utility.yul\":14954:15018 */\n tag_106\n jump\t// in\n tag_292:\n /* \"#utility.yul\":14944:15018 */\n swap2\n pop\n /* \"#utility.yul\":14900:15028 */\n pop\n /* \"#utility.yul\":14684:15035 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15041:15143 */\n tag_107:\n /* \"#utility.yul\":15114:15136 */\n tag_294\n /* \"#utility.yul\":15130:15135 */\n dup2\n /* \"#utility.yul\":15114:15136 */\n tag_61\n jump\t// in\n tag_294:\n /* \"#utility.yul\":15109:15112 */\n dup3\n /* \"#utility.yul\":15102:15137 */\n mstore\n /* \"#utility.yul\":15041:15143 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15149:15272 */\n tag_108:\n /* \"#utility.yul\":15225:15231 */\n 0x00\n /* \"#utility.yul\":15259:15264 */\n dup2\n /* \"#utility.yul\":15253:15265 */\n mload\n /* \"#utility.yul\":15243:15265 */\n swap1\n pop\n /* \"#utility.yul\":15149:15272 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":15278:15461 */\n tag_109:\n /* \"#utility.yul\":15376:15387 */\n 0x00\n /* \"#utility.yul\":15410:15416 */\n dup3\n /* \"#utility.yul\":15405:15408 */\n dup3\n /* \"#utility.yul\":15398:15417 */\n mstore\n /* \"#utility.yul\":15450:15454 */\n 0x20\n /* \"#utility.yul\":15445:15448 */\n dup3\n /* \"#utility.yul\":15441:15455 */\n add\n /* \"#utility.yul\":15426:15455 */\n swap1\n pop\n /* \"#utility.yul\":15278:15461 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15467:15608 */\n tag_110:\n /* \"#utility.yul\":15543:15547 */\n 0x00\n /* \"#utility.yul\":15566:15569 */\n dup2\n /* \"#utility.yul\":15558:15569 */\n swap1\n pop\n /* \"#utility.yul\":15596:15600 */\n 0x20\n /* \"#utility.yul\":15591:15594 */\n dup3\n /* \"#utility.yul\":15587:15601 */\n add\n /* \"#utility.yul\":15579:15601 */\n swap1\n pop\n /* \"#utility.yul\":15467:15608 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":15614:15772 */\n tag_111:\n /* \"#utility.yul\":15687:15698 */\n 0x00\n /* \"#utility.yul\":15721:15727 */\n dup3\n /* \"#utility.yul\":15716:15719 */\n dup3\n /* \"#utility.yul\":15709:15728 */\n mstore\n /* \"#utility.yul\":15761:15765 */\n 0x20\n /* \"#utility.yul\":15756:15759 */\n dup3\n /* \"#utility.yul\":15752:15766 */\n add\n /* \"#utility.yul\":15737:15766 */\n swap1\n pop\n /* \"#utility.yul\":15614:15772 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15778:16118 */\n tag_112:\n /* \"#utility.yul\":15854:15857 */\n 0x00\n /* \"#utility.yul\":15882:15920 */\n tag_300\n /* \"#utility.yul\":15914:15919 */\n dup3\n /* \"#utility.yul\":15882:15920 */\n tag_102\n jump\t// in\n tag_300:\n /* \"#utility.yul\":15936:15996 */\n tag_301\n /* \"#utility.yul\":15989:15995 */\n dup2\n /* \"#utility.yul\":15984:15987 */\n dup6\n /* \"#utility.yul\":15936:15996 */\n tag_111\n jump\t// in\n tag_301:\n /* \"#utility.yul\":15929:15996 */\n swap4\n pop\n /* \"#utility.yul\":16005:16057 */\n tag_302\n /* \"#utility.yul\":16050:16056 */\n dup2\n /* \"#utility.yul\":16045:16048 */\n dup6\n /* \"#utility.yul\":16038:16042 */\n 0x20\n /* \"#utility.yul\":16031:16036 */\n dup7\n /* \"#utility.yul\":16027:16043 */\n add\n /* \"#utility.yul\":16005:16057 */\n tag_104\n jump\t// in\n tag_302:\n /* \"#utility.yul\":16082:16111 */\n tag_303\n /* \"#utility.yul\":16104:16110 */\n dup2\n /* \"#utility.yul\":16082:16111 */\n tag_76\n jump\t// in\n tag_303:\n /* \"#utility.yul\":16077:16080 */\n dup5\n /* \"#utility.yul\":16073:16112 */\n add\n /* \"#utility.yul\":16066:16112 */\n swap2\n pop\n /* \"#utility.yul\":15858:16118 */\n pop\n /* \"#utility.yul\":15778:16118 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16124:16316 */\n tag_113:\n /* \"#utility.yul\":16211:16221 */\n 0x00\n /* \"#utility.yul\":16246:16310 */\n tag_305\n /* \"#utility.yul\":16306:16309 */\n dup4\n /* \"#utility.yul\":16298:16304 */\n dup4\n /* \"#utility.yul\":16246:16310 */\n tag_112\n jump\t// in\n tag_305:\n /* \"#utility.yul\":16232:16310 */\n swap1\n pop\n /* \"#utility.yul\":16124:16316 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16322:16444 */\n tag_114:\n /* \"#utility.yul\":16401:16405 */\n 0x00\n /* \"#utility.yul\":16433:16437 */\n 0x20\n /* \"#utility.yul\":16428:16431 */\n dup3\n /* \"#utility.yul\":16424:16438 */\n add\n /* \"#utility.yul\":16416:16438 */\n swap1\n pop\n /* \"#utility.yul\":16322:16444 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16476:17439 */\n tag_115:\n /* \"#utility.yul\":16603:16606 */\n 0x00\n /* \"#utility.yul\":16632:16695 */\n tag_308\n /* \"#utility.yul\":16689:16694 */\n dup3\n /* \"#utility.yul\":16632:16695 */\n tag_108\n jump\t// in\n tag_308:\n /* \"#utility.yul\":16711:16796 */\n tag_309\n /* \"#utility.yul\":16789:16795 */\n dup2\n /* \"#utility.yul\":16784:16787 */\n dup6\n /* \"#utility.yul\":16711:16796 */\n tag_109\n jump\t// in\n tag_309:\n /* \"#utility.yul\":16704:16796 */\n swap4\n pop\n /* \"#utility.yul\":16822:16825 */\n dup4\n /* \"#utility.yul\":16867:16871 */\n 0x20\n /* \"#utility.yul\":16859:16865 */\n dup3\n /* \"#utility.yul\":16855:16872 */\n mul\n /* \"#utility.yul\":16850:16853 */\n dup6\n /* \"#utility.yul\":16846:16873 */\n add\n /* \"#utility.yul\":16897:16962 */\n tag_310\n /* \"#utility.yul\":16956:16961 */\n dup6\n /* \"#utility.yul\":16897:16962 */\n tag_110\n jump\t// in\n tag_310:\n /* \"#utility.yul\":16985:16992 */\n dup1\n /* \"#utility.yul\":17016:17017 */\n 0x00\n /* \"#utility.yul\":17001:17394 */\n tag_311:\n /* \"#utility.yul\":17026:17032 */\n dup6\n /* \"#utility.yul\":17023:17024 */\n dup2\n /* \"#utility.yul\":17020:17033 */\n lt\n /* \"#utility.yul\":17001:17394 */\n iszero\n tag_313\n jumpi\n /* \"#utility.yul\":17097:17106 */\n dup5\n /* \"#utility.yul\":17091:17095 */\n dup5\n /* \"#utility.yul\":17087:17107 */\n sub\n /* \"#utility.yul\":17082:17085 */\n dup10\n /* \"#utility.yul\":17075:17108 */\n mstore\n /* \"#utility.yul\":17148:17154 */\n dup2\n /* \"#utility.yul\":17142:17155 */\n mload\n /* \"#utility.yul\":17176:17258 */\n tag_314\n /* \"#utility.yul\":17253:17257 */\n dup6\n /* \"#utility.yul\":17238:17251 */\n dup3\n /* \"#utility.yul\":17176:17258 */\n tag_113\n jump\t// in\n tag_314:\n /* \"#utility.yul\":17168:17258 */\n swap5\n pop\n /* \"#utility.yul\":17281:17350 */\n tag_315\n /* \"#utility.yul\":17343:17349 */\n dup4\n /* \"#utility.yul\":17281:17350 */\n tag_114\n jump\t// in\n tag_315:\n /* \"#utility.yul\":17271:17350 */\n swap3\n pop\n /* \"#utility.yul\":17379:17383 */\n 0x20\n /* \"#utility.yul\":17374:17377 */\n dup11\n /* \"#utility.yul\":17370:17384 */\n add\n /* \"#utility.yul\":17363:17384 */\n swap10\n pop\n /* \"#utility.yul\":17061:17394 */\n pop\n /* \"#utility.yul\":17048:17049 */\n 0x01\n /* \"#utility.yul\":17045:17046 */\n dup2\n /* \"#utility.yul\":17041:17050 */\n add\n /* \"#utility.yul\":17036:17050 */\n swap1\n pop\n /* \"#utility.yul\":17001:17394 */\n jump(tag_311)\n tag_313:\n /* \"#utility.yul\":17005:17019 */\n pop\n /* \"#utility.yul\":17410:17414 */\n dup3\n /* \"#utility.yul\":17403:17414 */\n swap8\n pop\n /* \"#utility.yul\":17430:17433 */\n dup8\n /* \"#utility.yul\":17423:17433 */\n swap6\n pop\n /* \"#utility.yul\":16608:17439 */\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":16476:17439 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17525:18188 */\n tag_116:\n /* \"#utility.yul\":17650:17653 */\n 0x00\n /* \"#utility.yul\":17686:17690 */\n 0x40\n /* \"#utility.yul\":17681:17684 */\n dup4\n /* \"#utility.yul\":17677:17691 */\n add\n /* \"#utility.yul\":17776:17780 */\n 0x00\n /* \"#utility.yul\":17769:17774 */\n dup4\n /* \"#utility.yul\":17765:17781 */\n add\n /* \"#utility.yul\":17759:17782 */\n mload\n /* \"#utility.yul\":17795:17854 */\n tag_317\n /* \"#utility.yul\":17848:17852 */\n 0x00\n /* \"#utility.yul\":17843:17846 */\n dup7\n /* \"#utility.yul\":17839:17853 */\n add\n /* \"#utility.yul\":17825:17837 */\n dup3\n /* \"#utility.yul\":17795:17854 */\n tag_107\n jump\t// in\n tag_317:\n /* \"#utility.yul\":17701:17864 */\n pop\n /* \"#utility.yul\":17950:17954 */\n 0x20\n /* \"#utility.yul\":17943:17948 */\n dup4\n /* \"#utility.yul\":17939:17955 */\n add\n /* \"#utility.yul\":17933:17956 */\n mload\n /* \"#utility.yul\":18003:18006 */\n dup5\n /* \"#utility.yul\":17997:18001 */\n dup3\n /* \"#utility.yul\":17993:18007 */\n sub\n /* \"#utility.yul\":17986:17990 */\n 0x20\n /* \"#utility.yul\":17981:17984 */\n dup7\n /* \"#utility.yul\":17977:17991 */\n add\n /* \"#utility.yul\":17970:18008 */\n mstore\n /* \"#utility.yul\":18029:18150 */\n tag_318\n /* \"#utility.yul\":18145:18149 */\n dup3\n /* \"#utility.yul\":18131:18143 */\n dup3\n /* \"#utility.yul\":18029:18150 */\n tag_115\n jump\t// in\n tag_318:\n /* \"#utility.yul\":18021:18150 */\n swap2\n pop\n /* \"#utility.yul\":17874:18161 */\n pop\n /* \"#utility.yul\":18178:18182 */\n dup1\n /* \"#utility.yul\":18171:18182 */\n swap2\n pop\n /* \"#utility.yul\":17655:18188 */\n pop\n /* \"#utility.yul\":17525:18188 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18194:19092 */\n tag_47:\n /* \"#utility.yul\":18465:18469 */\n 0x00\n /* \"#utility.yul\":18503:18506 */\n 0xa0\n /* \"#utility.yul\":18492:18501 */\n dup3\n /* \"#utility.yul\":18488:18507 */\n add\n /* \"#utility.yul\":18480:18507 */\n swap1\n pop\n /* \"#utility.yul\":18517:18584 */\n tag_320\n /* \"#utility.yul\":18581:18582 */\n 0x00\n /* \"#utility.yul\":18570:18579 */\n dup4\n /* \"#utility.yul\":18566:18583 */\n add\n /* \"#utility.yul\":18557:18563 */\n dup9\n /* \"#utility.yul\":18517:18584 */\n tag_100\n jump\t// in\n tag_320:\n /* \"#utility.yul\":18594:18664 */\n tag_321\n /* \"#utility.yul\":18660:18662 */\n 0x20\n /* \"#utility.yul\":18649:18658 */\n dup4\n /* \"#utility.yul\":18645:18663 */\n add\n /* \"#utility.yul\":18636:18642 */\n dup8\n /* \"#utility.yul\":18594:18664 */\n tag_101\n jump\t// in\n tag_321:\n /* \"#utility.yul\":18711:18720 */\n dup2\n /* \"#utility.yul\":18705:18709 */\n dup2\n /* \"#utility.yul\":18701:18721 */\n sub\n /* \"#utility.yul\":18696:18698 */\n 0x40\n /* \"#utility.yul\":18685:18694 */\n dup4\n /* \"#utility.yul\":18681:18699 */\n add\n /* \"#utility.yul\":18674:18722 */\n mstore\n /* \"#utility.yul\":18739:18853 */\n tag_322\n /* \"#utility.yul\":18848:18852 */\n dup2\n /* \"#utility.yul\":18839:18845 */\n dup7\n /* \"#utility.yul\":18739:18853 */\n tag_116\n jump\t// in\n tag_322:\n /* \"#utility.yul\":18731:18853 */\n swap1\n pop\n /* \"#utility.yul\":18863:18933 */\n tag_323\n /* \"#utility.yul\":18929:18931 */\n 0x60\n /* \"#utility.yul\":18918:18927 */\n dup4\n /* \"#utility.yul\":18914:18932 */\n add\n /* \"#utility.yul\":18905:18911 */\n dup6\n /* \"#utility.yul\":18863:18933 */\n tag_97\n jump\t// in\n tag_323:\n /* \"#utility.yul\":18981:18990 */\n dup2\n /* \"#utility.yul\":18975:18979 */\n dup2\n /* \"#utility.yul\":18971:18991 */\n sub\n /* \"#utility.yul\":18965:18968 */\n 0x80\n /* \"#utility.yul\":18954:18963 */\n dup4\n /* \"#utility.yul\":18950:18969 */\n add\n /* \"#utility.yul\":18943:18992 */\n mstore\n /* \"#utility.yul\":19009:19085 */\n tag_324\n /* \"#utility.yul\":19080:19084 */\n dup2\n /* \"#utility.yul\":19071:19077 */\n dup5\n /* \"#utility.yul\":19009:19085 */\n tag_105\n jump\t// in\n tag_324:\n /* \"#utility.yul\":19001:19085 */\n swap1\n pop\n /* \"#utility.yul\":18194:19092 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19098:19483 */\n tag_53:\n /* \"#utility.yul\":19247:19251 */\n 0x00\n /* \"#utility.yul\":19285:19287 */\n 0x20\n /* \"#utility.yul\":19274:19283 */\n dup3\n /* \"#utility.yul\":19270:19288 */\n add\n /* \"#utility.yul\":19262:19288 */\n swap1\n pop\n /* \"#utility.yul\":19334:19343 */\n dup2\n /* \"#utility.yul\":19328:19332 */\n dup2\n /* \"#utility.yul\":19324:19344 */\n sub\n /* \"#utility.yul\":19320:19321 */\n 0x00\n /* \"#utility.yul\":19309:19318 */\n dup4\n /* \"#utility.yul\":19305:19322 */\n add\n /* \"#utility.yul\":19298:19345 */\n mstore\n /* \"#utility.yul\":19362:19476 */\n tag_326\n /* \"#utility.yul\":19471:19475 */\n dup2\n /* \"#utility.yul\":19462:19468 */\n dup5\n /* \"#utility.yul\":19362:19476 */\n tag_116\n jump\t// in\n tag_326:\n /* \"#utility.yul\":19354:19476 */\n swap1\n pop\n /* \"#utility.yul\":19098:19483 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19489:19630 */\n tag_117:\n /* \"#utility.yul\":19545:19550 */\n 0x00\n /* \"#utility.yul\":19576:19582 */\n dup2\n /* \"#utility.yul\":19570:19583 */\n mload\n /* \"#utility.yul\":19561:19583 */\n swap1\n pop\n /* \"#utility.yul\":19592:19624 */\n tag_328\n /* \"#utility.yul\":19618:19623 */\n dup2\n /* \"#utility.yul\":19592:19624 */\n tag_72\n jump\t// in\n tag_328:\n /* \"#utility.yul\":19489:19630 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19636:19758 */\n tag_118:\n /* \"#utility.yul\":19709:19733 */\n tag_330\n /* \"#utility.yul\":19727:19732 */\n dup2\n /* \"#utility.yul\":19709:19733 */\n tag_98\n jump\t// in\n tag_330:\n /* \"#utility.yul\":19702:19707 */\n dup2\n /* \"#utility.yul\":19699:19734 */\n eq\n /* \"#utility.yul\":19689:19752 */\n tag_331\n jumpi\n /* \"#utility.yul\":19748:19749 */\n 0x00\n /* \"#utility.yul\":19745:19746 */\n dup1\n /* \"#utility.yul\":19738:19750 */\n revert\n /* \"#utility.yul\":19689:19752 */\n tag_331:\n /* \"#utility.yul\":19636:19758 */\n pop\n jump\t// out\n /* \"#utility.yul\":19764:19907 */\n tag_119:\n /* \"#utility.yul\":19821:19826 */\n 0x00\n /* \"#utility.yul\":19852:19858 */\n dup2\n /* \"#utility.yul\":19846:19859 */\n mload\n /* \"#utility.yul\":19837:19859 */\n swap1\n pop\n /* \"#utility.yul\":19868:19901 */\n tag_333\n /* \"#utility.yul\":19895:19900 */\n dup2\n /* \"#utility.yul\":19868:19901 */\n tag_118\n jump\t// in\n tag_333:\n /* \"#utility.yul\":19764:19907 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19913:20572 */\n tag_57:\n /* \"#utility.yul\":19999:20005 */\n 0x00\n /* \"#utility.yul\":20007:20013 */\n dup1\n /* \"#utility.yul\":20015:20021 */\n 0x00\n /* \"#utility.yul\":20064:20066 */\n 0x60\n /* \"#utility.yul\":20052:20061 */\n dup5\n /* \"#utility.yul\":20043:20050 */\n dup7\n /* \"#utility.yul\":20039:20062 */\n sub\n /* \"#utility.yul\":20035:20067 */\n slt\n /* \"#utility.yul\":20032:20151 */\n iszero\n tag_335\n jumpi\n /* \"#utility.yul\":20070:20149 */\n tag_336\n tag_59\n jump\t// in\n tag_336:\n /* \"#utility.yul\":20032:20151 */\n tag_335:\n /* \"#utility.yul\":20190:20191 */\n 0x00\n /* \"#utility.yul\":20215:20278 */\n tag_337\n /* \"#utility.yul\":20270:20277 */\n dup7\n /* \"#utility.yul\":20261:20267 */\n dup3\n /* \"#utility.yul\":20250:20259 */\n dup8\n /* \"#utility.yul\":20246:20268 */\n add\n /* \"#utility.yul\":20215:20278 */\n tag_117\n jump\t// in\n tag_337:\n /* \"#utility.yul\":20205:20278 */\n swap4\n pop\n /* \"#utility.yul\":20161:20288 */\n pop\n /* \"#utility.yul\":20327:20329 */\n 0x20\n /* \"#utility.yul\":20353:20417 */\n tag_338\n /* \"#utility.yul\":20409:20416 */\n dup7\n /* \"#utility.yul\":20400:20406 */\n dup3\n /* \"#utility.yul\":20389:20398 */\n dup8\n /* \"#utility.yul\":20385:20407 */\n add\n /* \"#utility.yul\":20353:20417 */\n tag_119\n jump\t// in\n tag_338:\n /* \"#utility.yul\":20343:20417 */\n swap3\n pop\n /* \"#utility.yul\":20298:20427 */\n pop\n /* \"#utility.yul\":20466:20468 */\n 0x40\n /* \"#utility.yul\":20492:20555 */\n tag_339\n /* \"#utility.yul\":20547:20554 */\n dup7\n /* \"#utility.yul\":20538:20544 */\n dup3\n /* \"#utility.yul\":20527:20536 */\n dup8\n /* \"#utility.yul\":20523:20545 */\n add\n /* \"#utility.yul\":20492:20555 */\n tag_117\n jump\t// in\n tag_339:\n /* \"#utility.yul\":20482:20555 */\n swap2\n pop\n /* \"#utility.yul\":20437:20565 */\n pop\n /* \"#utility.yul\":19913:20572 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n\n auxdata: 0xa26469706673582212200c97281bd15caba3cc6efa4a076e6f49a63c3b3c013798a44e77679bfec3fec964736f6c634300080a0033\n}\n", + "assembly": " /* \"main.sol\":132:2891 contract XcmTransactorInstance is XcmTransactor {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":314:356 0x0000000000000000000000000000000000000806 */\n 0x0806\n /* \"main.sol\":255:357 XcmTransactor public xcmtransactor =... */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":132:2891 contract XcmTransactorInstance is XcmTransactor {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":132:2891 contract XcmTransactorInstance is XcmTransactor {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x71b0edfa\n gt\n tag_12\n jumpi\n dup1\n 0x71b0edfa\n eq\n tag_7\n jumpi\n dup1\n 0x83f09082\n eq\n tag_8\n jumpi\n dup1\n 0x9f89f03e\n eq\n tag_9\n jumpi\n dup1\n 0xcb26bf32\n eq\n tag_10\n jumpi\n dup1\n 0xf87f493f\n eq\n tag_11\n jumpi\n jump(tag_2)\n tag_12:\n dup1\n 0x0139d697\n eq\n tag_3\n jumpi\n dup1\n 0x19760407\n eq\n tag_4\n jumpi\n dup1\n 0x267d4062\n eq\n tag_5\n jumpi\n dup1\n 0x61fc548f\n eq\n tag_6\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":2190:2524 function transact_through_signed(... */\n tag_3:\n tag_13\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_14\n swap2\n swap1\n tag_15\n jump\t// in\n tag_14:\n tag_16\n jump\t// in\n tag_13:\n stop\n /* \"main.sol\":2530:2889 function transact_through_signed_multilocation(... */\n tag_4:\n tag_17\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_18\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n tag_20\n jump\t// in\n tag_17:\n stop\n /* \"main.sol\":1810:2184 function transact_through_derivative(... */\n tag_5:\n tag_21\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_22\n swap2\n swap1\n tag_23\n jump\t// in\n tag_22:\n tag_24\n jump\t// in\n tag_21:\n stop\n /* \"main.sol\":255:357 XcmTransactor public xcmtransactor =... */\n tag_6:\n tag_25\n tag_26\n jump\t// in\n tag_25:\n mload(0x40)\n tag_27\n swap2\n swap1\n tag_28\n jump\t// in\n tag_27:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":364:614 function index_to_account(uint16 index)... */\n tag_7:\n tag_29\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_30\n swap2\n swap1\n tag_31\n jump\t// in\n tag_30:\n tag_32\n jump\t// in\n tag_29:\n mload(0x40)\n tag_33\n swap2\n swap1\n tag_34\n jump\t// in\n tag_33:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1183:1387 function fee_per_second(Multilocation memory multilocation)... */\n tag_8:\n tag_35\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_36\n swap2\n swap1\n tag_37\n jump\t// in\n tag_36:\n tag_38\n jump\t// in\n tag_35:\n mload(0x40)\n tag_39\n swap2\n swap1\n tag_40\n jump\t// in\n tag_39:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":1393:1804 function transact_through_derivative_multilocation(... */\n tag_9:\n tag_41\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_42\n swap2\n swap1\n tag_43\n jump\t// in\n tag_42:\n tag_44\n jump\t// in\n tag_41:\n stop\n /* \"main.sol\":890:1177 function transact_info_with_signed(Multilocation memory multilocation)... */\n tag_10:\n tag_45\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_46\n swap2\n swap1\n tag_37\n jump\t// in\n tag_46:\n tag_47\n jump\t// in\n tag_45:\n mload(0x40)\n tag_48\n swap4\n swap3\n swap2\n swap1\n tag_49\n jump\t// in\n tag_48:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":620:884 function transact_info(Multilocation memory multilocation)... */\n tag_11:\n tag_50\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_51\n swap2\n swap1\n tag_37\n jump\t// in\n tag_51:\n tag_52\n jump\t// in\n tag_50:\n mload(0x40)\n tag_53\n swap4\n swap3\n swap2\n swap1\n tag_54\n jump\t// in\n tag_53:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":2190:2524 function transact_through_signed(... */\n tag_16:\n /* \"main.sol\":2380:2393 xcmtransactor */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2380:2417 xcmtransactor.transact_through_signed */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x0139d697\n /* \"main.sol\":2431:2435 dest */\n dup6\n /* \"main.sol\":2449:2469 fee_location_address */\n dup6\n /* \"main.sol\":2483:2489 weight */\n dup6\n /* \"main.sol\":2503:2507 call */\n dup6\n /* \"main.sol\":2380:2517 xcmtransactor.transact_through_signed(... */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_56\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_57\n jump\t// in\n tag_56:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_58\n jumpi\n 0x00\n dup1\n revert\n tag_58:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_60\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_60:\n pop\n pop\n pop\n pop\n /* \"main.sol\":2190:2524 function transact_through_signed(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":2530:2889 function transact_through_signed_multilocation(... */\n tag_20:\n /* \"main.sol\":2739:2752 xcmtransactor */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2739:2790 xcmtransactor.transact_through_signed_multilocation */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x19760407\n /* \"main.sol\":2804:2808 dest */\n dup6\n /* \"main.sol\":2822:2834 fee_location */\n dup6\n /* \"main.sol\":2848:2854 weight */\n dup6\n /* \"main.sol\":2868:2872 call */\n dup6\n /* \"main.sol\":2739:2882 xcmtransactor.transact_through_signed_multilocation(... */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_62\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_63\n jump\t// in\n tag_62:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_64\n jumpi\n 0x00\n dup1\n revert\n tag_64:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_66\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_66:\n pop\n pop\n pop\n pop\n /* \"main.sol\":2530:2889 function transact_through_signed_multilocation(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":1810:2184 function transact_through_derivative(... */\n tag_24:\n /* \"main.sol\":2014:2027 xcmtransactor */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2014:2055 xcmtransactor.transact_through_derivative */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x267d4062\n /* \"main.sol\":2069:2079 transactor */\n dup7\n /* \"main.sol\":2093:2098 index */\n dup7\n /* \"main.sol\":2112:2123 currency_id */\n dup7\n /* \"main.sol\":2137:2143 weight */\n dup7\n /* \"main.sol\":2157:2167 inner_call */\n dup7\n /* \"main.sol\":2014:2177 xcmtransactor.transact_through_derivative(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_68\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_69\n jump\t// in\n tag_68:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_70\n jumpi\n 0x00\n dup1\n revert\n tag_70:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_72\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_72:\n pop\n pop\n pop\n pop\n /* \"main.sol\":1810:2184 function transact_through_derivative(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":255:357 XcmTransactor public xcmtransactor =... */\n tag_26:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":364:614 function index_to_account(uint16 index)... */\n tag_32:\n /* \"main.sol\":468:475 address */\n 0x00\n /* \"main.sol\":570:583 xcmtransactor */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":570:600 xcmtransactor.index_to_account */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x71b0edfa\n /* \"main.sol\":601:606 index */\n dup4\n /* \"main.sol\":570:607 xcmtransactor.index_to_account(index) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_74\n swap2\n swap1\n tag_75\n jump\t// in\n tag_74:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_77\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_77:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_78\n swap2\n swap1\n tag_79\n jump\t// in\n tag_78:\n /* \"main.sol\":563:607 return xcmtransactor.index_to_account(index) */\n swap1\n pop\n /* \"main.sol\":364:614 function index_to_account(uint16 index)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":1183:1387 function fee_per_second(Multilocation memory multilocation)... */\n tag_38:\n /* \"main.sol\":1307:1314 uint256 */\n 0x00\n /* \"main.sol\":1337:1350 xcmtransactor */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1337:1365 xcmtransactor.fee_per_second */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x83f09082\n /* \"main.sol\":1366:1379 multilocation */\n dup4\n /* \"main.sol\":1337:1380 xcmtransactor.fee_per_second(multilocation) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_81\n swap2\n swap1\n tag_82\n jump\t// in\n tag_81:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_84\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_84:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_85\n swap2\n swap1\n tag_86\n jump\t// in\n tag_85:\n /* \"main.sol\":1330:1380 return xcmtransactor.fee_per_second(multilocation) */\n swap1\n pop\n /* \"main.sol\":1183:1387 function fee_per_second(Multilocation memory multilocation)... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"main.sol\":1393:1804 function transact_through_derivative_multilocation(... */\n tag_44:\n /* \"main.sol\":1622:1635 xcmtransactor */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1622:1677 xcmtransactor.transact_through_derivative_multilocation */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x9f89f03e\n /* \"main.sol\":1691:1701 transactor */\n dup7\n /* \"main.sol\":1715:1720 index */\n dup7\n /* \"main.sol\":1734:1743 fee_asset */\n dup7\n /* \"main.sol\":1757:1763 weight */\n dup7\n /* \"main.sol\":1777:1787 inner_call */\n dup7\n /* \"main.sol\":1622:1797 xcmtransactor.transact_through_derivative_multilocation(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_88\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_89\n jump\t// in\n tag_88:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_90\n jumpi\n 0x00\n dup1\n revert\n tag_90:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_92\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_92:\n pop\n pop\n pop\n pop\n /* \"main.sol\":1393:1804 function transact_through_derivative_multilocation(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":890:1177 function transact_info_with_signed(Multilocation memory multilocation)... */\n tag_47:\n /* \"main.sol\":1038:1044 uint64 */\n 0x00\n /* \"main.sol\":1058:1064 uint64 */\n dup1\n /* \"main.sol\":1078:1084 uint64 */\n 0x00\n /* \"main.sol\":1116:1129 xcmtransactor */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1116:1155 xcmtransactor.transact_info_with_signed */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xcb26bf32\n /* \"main.sol\":1156:1169 multilocation */\n dup6\n /* \"main.sol\":1116:1170 xcmtransactor.transact_info_with_signed(multilocation) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_94\n swap2\n swap1\n tag_82\n jump\t// in\n tag_94:\n 0x60\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_96\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_96:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_97\n swap2\n swap1\n tag_98\n jump\t// in\n tag_97:\n /* \"main.sol\":1109:1170 return xcmtransactor.transact_info_with_signed(multilocation) */\n swap3\n pop\n swap3\n pop\n swap3\n pop\n /* \"main.sol\":890:1177 function transact_info_with_signed(Multilocation memory multilocation)... */\n swap2\n swap4\n swap1\n swap3\n pop\n jump\t// out\n /* \"main.sol\":620:884 function transact_info(Multilocation memory multilocation)... */\n tag_52:\n /* \"main.sol\":756:762 uint64 */\n 0x00\n /* \"main.sol\":776:783 uint256 */\n dup1\n /* \"main.sol\":797:803 uint64 */\n 0x00\n /* \"main.sol\":835:848 xcmtransactor */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":835:862 xcmtransactor.transact_info */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xf87f493f\n /* \"main.sol\":863:876 multilocation */\n dup6\n /* \"main.sol\":835:877 xcmtransactor.transact_info(multilocation) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_100\n swap2\n swap1\n tag_82\n jump\t// in\n tag_100:\n 0x60\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n dup7\n gas\n staticcall\n iszero\n dup1\n iszero\n tag_102\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_102:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_103\n swap2\n swap1\n tag_104\n jump\t// in\n tag_103:\n /* \"main.sol\":828:877 return xcmtransactor.transact_info(multilocation) */\n swap3\n pop\n swap3\n pop\n swap3\n pop\n /* \"main.sol\":620:884 function transact_info(Multilocation memory multilocation)... */\n swap2\n swap4\n swap1\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_105:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_106:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_107:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:451 */\n tag_108:\n /* \"#utility.yul\":443:444 */\n 0x00\n /* \"#utility.yul\":440:441 */\n dup1\n /* \"#utility.yul\":433:445 */\n revert\n /* \"#utility.yul\":457:559 */\n tag_109:\n /* \"#utility.yul\":498:504 */\n 0x00\n /* \"#utility.yul\":549:551 */\n 0x1f\n /* \"#utility.yul\":545:552 */\n not\n /* \"#utility.yul\":540:542 */\n 0x1f\n /* \"#utility.yul\":533:538 */\n dup4\n /* \"#utility.yul\":529:543 */\n add\n /* \"#utility.yul\":525:553 */\n and\n /* \"#utility.yul\":515:553 */\n swap1\n pop\n /* \"#utility.yul\":457:559 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":565:745 */\n tag_110:\n /* \"#utility.yul\":613:690 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":610:611 */\n 0x00\n /* \"#utility.yul\":603:691 */\n mstore\n /* \"#utility.yul\":710:714 */\n 0x41\n /* \"#utility.yul\":707:708 */\n 0x04\n /* \"#utility.yul\":700:715 */\n mstore\n /* \"#utility.yul\":734:738 */\n 0x24\n /* \"#utility.yul\":731:732 */\n 0x00\n /* \"#utility.yul\":724:739 */\n revert\n /* \"#utility.yul\":751:1032 */\n tag_111:\n /* \"#utility.yul\":834:861 */\n tag_175\n /* \"#utility.yul\":856:860 */\n dup3\n /* \"#utility.yul\":834:861 */\n tag_109\n jump\t// in\n tag_175:\n /* \"#utility.yul\":826:832 */\n dup2\n /* \"#utility.yul\":822:862 */\n add\n /* \"#utility.yul\":964:970 */\n dup2\n /* \"#utility.yul\":952:962 */\n dup2\n /* \"#utility.yul\":949:971 */\n lt\n /* \"#utility.yul\":928:946 */\n 0xffffffffffffffff\n /* \"#utility.yul\":916:926 */\n dup3\n /* \"#utility.yul\":913:947 */\n gt\n /* \"#utility.yul\":910:972 */\n or\n /* \"#utility.yul\":907:995 */\n iszero\n tag_176\n jumpi\n /* \"#utility.yul\":975:993 */\n tag_177\n tag_110\n jump\t// in\n tag_177:\n /* \"#utility.yul\":907:995 */\n tag_176:\n /* \"#utility.yul\":1015:1025 */\n dup1\n /* \"#utility.yul\":1011:1013 */\n 0x40\n /* \"#utility.yul\":1004:1026 */\n mstore\n /* \"#utility.yul\":794:1032 */\n pop\n /* \"#utility.yul\":751:1032 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1038:1167 */\n tag_112:\n /* \"#utility.yul\":1072:1078 */\n 0x00\n /* \"#utility.yul\":1099:1119 */\n tag_179\n tag_105\n jump\t// in\n tag_179:\n /* \"#utility.yul\":1089:1119 */\n swap1\n pop\n /* \"#utility.yul\":1128:1161 */\n tag_180\n /* \"#utility.yul\":1156:1160 */\n dup3\n /* \"#utility.yul\":1148:1154 */\n dup3\n /* \"#utility.yul\":1128:1161 */\n tag_111\n jump\t// in\n tag_180:\n /* \"#utility.yul\":1038:1167 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1173:1290 */\n tag_113:\n /* \"#utility.yul\":1282:1283 */\n 0x00\n /* \"#utility.yul\":1279:1280 */\n dup1\n /* \"#utility.yul\":1272:1284 */\n revert\n /* \"#utility.yul\":1296:1382 */\n tag_114:\n /* \"#utility.yul\":1331:1338 */\n 0x00\n /* \"#utility.yul\":1371:1375 */\n 0xff\n /* \"#utility.yul\":1364:1369 */\n dup3\n /* \"#utility.yul\":1360:1376 */\n and\n /* \"#utility.yul\":1349:1376 */\n swap1\n pop\n /* \"#utility.yul\":1296:1382 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1388:1506 */\n tag_115:\n /* \"#utility.yul\":1459:1481 */\n tag_184\n /* \"#utility.yul\":1475:1480 */\n dup2\n /* \"#utility.yul\":1459:1481 */\n tag_114\n jump\t// in\n tag_184:\n /* \"#utility.yul\":1452:1457 */\n dup2\n /* \"#utility.yul\":1449:1482 */\n eq\n /* \"#utility.yul\":1439:1500 */\n tag_185\n jumpi\n /* \"#utility.yul\":1496:1497 */\n 0x00\n /* \"#utility.yul\":1493:1494 */\n dup1\n /* \"#utility.yul\":1486:1498 */\n revert\n /* \"#utility.yul\":1439:1500 */\n tag_185:\n /* \"#utility.yul\":1388:1506 */\n pop\n jump\t// out\n /* \"#utility.yul\":1512:1647 */\n tag_116:\n /* \"#utility.yul\":1556:1561 */\n 0x00\n /* \"#utility.yul\":1594:1600 */\n dup2\n /* \"#utility.yul\":1581:1601 */\n calldataload\n /* \"#utility.yul\":1572:1601 */\n swap1\n pop\n /* \"#utility.yul\":1610:1641 */\n tag_187\n /* \"#utility.yul\":1635:1640 */\n dup2\n /* \"#utility.yul\":1610:1641 */\n tag_115\n jump\t// in\n tag_187:\n /* \"#utility.yul\":1512:1647 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1653:1770 */\n tag_117:\n /* \"#utility.yul\":1762:1763 */\n 0x00\n /* \"#utility.yul\":1759:1760 */\n dup1\n /* \"#utility.yul\":1752:1764 */\n revert\n /* \"#utility.yul\":1776:2096 */\n tag_118:\n /* \"#utility.yul\":1862:1866 */\n 0x00\n /* \"#utility.yul\":1952:1970 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1944:1950 */\n dup3\n /* \"#utility.yul\":1941:1971 */\n gt\n /* \"#utility.yul\":1938:1994 */\n iszero\n tag_190\n jumpi\n /* \"#utility.yul\":1974:1992 */\n tag_191\n tag_110\n jump\t// in\n tag_191:\n /* \"#utility.yul\":1938:1994 */\n tag_190:\n /* \"#utility.yul\":2024:2028 */\n 0x20\n /* \"#utility.yul\":2016:2022 */\n dup3\n /* \"#utility.yul\":2012:2029 */\n mul\n /* \"#utility.yul\":2004:2029 */\n swap1\n pop\n /* \"#utility.yul\":2084:2088 */\n 0x20\n /* \"#utility.yul\":2078:2082 */\n dup2\n /* \"#utility.yul\":2074:2089 */\n add\n /* \"#utility.yul\":2066:2089 */\n swap1\n pop\n /* \"#utility.yul\":1776:2096 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2102:2219 */\n tag_119:\n /* \"#utility.yul\":2211:2212 */\n 0x00\n /* \"#utility.yul\":2208:2209 */\n dup1\n /* \"#utility.yul\":2201:2213 */\n revert\n /* \"#utility.yul\":2225:2342 */\n tag_120:\n /* \"#utility.yul\":2334:2335 */\n 0x00\n /* \"#utility.yul\":2331:2332 */\n dup1\n /* \"#utility.yul\":2324:2336 */\n revert\n /* \"#utility.yul\":2348:2655 */\n tag_121:\n /* \"#utility.yul\":2409:2413 */\n 0x00\n /* \"#utility.yul\":2499:2517 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2491:2497 */\n dup3\n /* \"#utility.yul\":2488:2518 */\n gt\n /* \"#utility.yul\":2485:2541 */\n iszero\n tag_195\n jumpi\n /* \"#utility.yul\":2521:2539 */\n tag_196\n tag_110\n jump\t// in\n tag_196:\n /* \"#utility.yul\":2485:2541 */\n tag_195:\n /* \"#utility.yul\":2559:2588 */\n tag_197\n /* \"#utility.yul\":2581:2587 */\n dup3\n /* \"#utility.yul\":2559:2588 */\n tag_109\n jump\t// in\n tag_197:\n /* \"#utility.yul\":2551:2588 */\n swap1\n pop\n /* \"#utility.yul\":2643:2647 */\n 0x20\n /* \"#utility.yul\":2637:2641 */\n dup2\n /* \"#utility.yul\":2633:2648 */\n add\n /* \"#utility.yul\":2625:2648 */\n swap1\n pop\n /* \"#utility.yul\":2348:2655 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2661:2815 */\n tag_122:\n /* \"#utility.yul\":2745:2751 */\n dup3\n /* \"#utility.yul\":2740:2743 */\n dup2\n /* \"#utility.yul\":2735:2738 */\n dup4\n /* \"#utility.yul\":2722:2752 */\n calldatacopy\n /* \"#utility.yul\":2807:2808 */\n 0x00\n /* \"#utility.yul\":2798:2804 */\n dup4\n /* \"#utility.yul\":2793:2796 */\n dup4\n /* \"#utility.yul\":2789:2805 */\n add\n /* \"#utility.yul\":2782:2809 */\n mstore\n /* \"#utility.yul\":2661:2815 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2821:3231 */\n tag_123:\n /* \"#utility.yul\":2898:2903 */\n 0x00\n /* \"#utility.yul\":2923:2988 */\n tag_200\n /* \"#utility.yul\":2939:2987 */\n tag_201\n /* \"#utility.yul\":2980:2986 */\n dup5\n /* \"#utility.yul\":2939:2987 */\n tag_121\n jump\t// in\n tag_201:\n /* \"#utility.yul\":2923:2988 */\n tag_112\n jump\t// in\n tag_200:\n /* \"#utility.yul\":2914:2988 */\n swap1\n pop\n /* \"#utility.yul\":3011:3017 */\n dup3\n /* \"#utility.yul\":3004:3009 */\n dup2\n /* \"#utility.yul\":2997:3018 */\n mstore\n /* \"#utility.yul\":3049:3053 */\n 0x20\n /* \"#utility.yul\":3042:3047 */\n dup2\n /* \"#utility.yul\":3038:3054 */\n add\n /* \"#utility.yul\":3087:3090 */\n dup5\n /* \"#utility.yul\":3078:3084 */\n dup5\n /* \"#utility.yul\":3073:3076 */\n dup5\n /* \"#utility.yul\":3069:3085 */\n add\n /* \"#utility.yul\":3066:3091 */\n gt\n /* \"#utility.yul\":3063:3175 */\n iszero\n tag_202\n jumpi\n /* \"#utility.yul\":3094:3173 */\n tag_203\n tag_120\n jump\t// in\n tag_203:\n /* \"#utility.yul\":3063:3175 */\n tag_202:\n /* \"#utility.yul\":3184:3225 */\n tag_204\n /* \"#utility.yul\":3218:3224 */\n dup5\n /* \"#utility.yul\":3213:3216 */\n dup3\n /* \"#utility.yul\":3208:3211 */\n dup6\n /* \"#utility.yul\":3184:3225 */\n tag_122\n jump\t// in\n tag_204:\n /* \"#utility.yul\":2904:3231 */\n pop\n /* \"#utility.yul\":2821:3231 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3250:3588 */\n tag_124:\n /* \"#utility.yul\":3305:3310 */\n 0x00\n /* \"#utility.yul\":3354:3357 */\n dup3\n /* \"#utility.yul\":3347:3351 */\n 0x1f\n /* \"#utility.yul\":3339:3345 */\n dup4\n /* \"#utility.yul\":3335:3352 */\n add\n /* \"#utility.yul\":3331:3358 */\n slt\n /* \"#utility.yul\":3321:3443 */\n tag_206\n jumpi\n /* \"#utility.yul\":3362:3441 */\n tag_207\n tag_117\n jump\t// in\n tag_207:\n /* \"#utility.yul\":3321:3443 */\n tag_206:\n /* \"#utility.yul\":3479:3485 */\n dup2\n /* \"#utility.yul\":3466:3486 */\n calldataload\n /* \"#utility.yul\":3504:3582 */\n tag_208\n /* \"#utility.yul\":3578:3581 */\n dup5\n /* \"#utility.yul\":3570:3576 */\n dup3\n /* \"#utility.yul\":3563:3567 */\n 0x20\n /* \"#utility.yul\":3555:3561 */\n dup7\n /* \"#utility.yul\":3551:3568 */\n add\n /* \"#utility.yul\":3504:3582 */\n tag_123\n jump\t// in\n tag_208:\n /* \"#utility.yul\":3495:3582 */\n swap2\n pop\n /* \"#utility.yul\":3311:3588 */\n pop\n /* \"#utility.yul\":3250:3588 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3609:4551 */\n tag_125:\n /* \"#utility.yul\":3714:3719 */\n 0x00\n /* \"#utility.yul\":3739:3829 */\n tag_210\n /* \"#utility.yul\":3755:3828 */\n tag_211\n /* \"#utility.yul\":3821:3827 */\n dup5\n /* \"#utility.yul\":3755:3828 */\n tag_118\n jump\t// in\n tag_211:\n /* \"#utility.yul\":3739:3829 */\n tag_112\n jump\t// in\n tag_210:\n /* \"#utility.yul\":3730:3829 */\n swap1\n pop\n /* \"#utility.yul\":3849:3854 */\n dup1\n /* \"#utility.yul\":3878:3884 */\n dup4\n /* \"#utility.yul\":3871:3876 */\n dup3\n /* \"#utility.yul\":3864:3885 */\n mstore\n /* \"#utility.yul\":3912:3916 */\n 0x20\n /* \"#utility.yul\":3905:3910 */\n dup3\n /* \"#utility.yul\":3901:3917 */\n add\n /* \"#utility.yul\":3894:3917 */\n swap1\n pop\n /* \"#utility.yul\":3965:3969 */\n 0x20\n /* \"#utility.yul\":3957:3963 */\n dup5\n /* \"#utility.yul\":3953:3970 */\n mul\n /* \"#utility.yul\":3945:3951 */\n dup4\n /* \"#utility.yul\":3941:3971 */\n add\n /* \"#utility.yul\":3994:3997 */\n dup6\n /* \"#utility.yul\":3986:3992 */\n dup2\n /* \"#utility.yul\":3983:3998 */\n gt\n /* \"#utility.yul\":3980:4102 */\n iszero\n tag_212\n jumpi\n /* \"#utility.yul\":4013:4092 */\n tag_213\n tag_119\n jump\t// in\n tag_213:\n /* \"#utility.yul\":3980:4102 */\n tag_212:\n /* \"#utility.yul\":4128:4134 */\n dup4\n /* \"#utility.yul\":4111:4545 */\n tag_214:\n /* \"#utility.yul\":4145:4151 */\n dup2\n /* \"#utility.yul\":4140:4143 */\n dup2\n /* \"#utility.yul\":4137:4152 */\n lt\n /* \"#utility.yul\":4111:4545 */\n iszero\n tag_216\n jumpi\n /* \"#utility.yul\":4234:4237 */\n dup1\n /* \"#utility.yul\":4221:4238 */\n calldataload\n /* \"#utility.yul\":4270:4288 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4257:4268 */\n dup2\n /* \"#utility.yul\":4254:4289 */\n gt\n /* \"#utility.yul\":4251:4373 */\n iszero\n tag_217\n jumpi\n /* \"#utility.yul\":4292:4371 */\n tag_218\n tag_117\n jump\t// in\n tag_218:\n /* \"#utility.yul\":4251:4373 */\n tag_217:\n /* \"#utility.yul\":4416:4427 */\n dup1\n /* \"#utility.yul\":4408:4414 */\n dup7\n /* \"#utility.yul\":4404:4428 */\n add\n /* \"#utility.yul\":4454:4500 */\n tag_219\n /* \"#utility.yul\":4496:4499 */\n dup10\n /* \"#utility.yul\":4484:4494 */\n dup3\n /* \"#utility.yul\":4454:4500 */\n tag_124\n jump\t// in\n tag_219:\n /* \"#utility.yul\":4449:4452 */\n dup6\n /* \"#utility.yul\":4442:4501 */\n mstore\n /* \"#utility.yul\":4530:4534 */\n 0x20\n /* \"#utility.yul\":4525:4528 */\n dup6\n /* \"#utility.yul\":4521:4535 */\n add\n /* \"#utility.yul\":4514:4535 */\n swap5\n pop\n /* \"#utility.yul\":4187:4545 */\n pop\n pop\n /* \"#utility.yul\":4171:4175 */\n 0x20\n /* \"#utility.yul\":4166:4169 */\n dup2\n /* \"#utility.yul\":4162:4176 */\n add\n /* \"#utility.yul\":4155:4176 */\n swap1\n pop\n /* \"#utility.yul\":4111:4545 */\n jump(tag_214)\n tag_216:\n /* \"#utility.yul\":4115:4136 */\n pop\n /* \"#utility.yul\":3720:4551 */\n pop\n pop\n /* \"#utility.yul\":3609:4551 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4572:4960 */\n tag_126:\n /* \"#utility.yul\":4652:4657 */\n 0x00\n /* \"#utility.yul\":4701:4704 */\n dup3\n /* \"#utility.yul\":4694:4698 */\n 0x1f\n /* \"#utility.yul\":4686:4692 */\n dup4\n /* \"#utility.yul\":4682:4699 */\n add\n /* \"#utility.yul\":4678:4705 */\n slt\n /* \"#utility.yul\":4668:4790 */\n tag_221\n jumpi\n /* \"#utility.yul\":4709:4788 */\n tag_222\n tag_117\n jump\t// in\n tag_222:\n /* \"#utility.yul\":4668:4790 */\n tag_221:\n /* \"#utility.yul\":4826:4832 */\n dup2\n /* \"#utility.yul\":4813:4833 */\n calldataload\n /* \"#utility.yul\":4851:4954 */\n tag_223\n /* \"#utility.yul\":4950:4953 */\n dup5\n /* \"#utility.yul\":4942:4948 */\n dup3\n /* \"#utility.yul\":4935:4939 */\n 0x20\n /* \"#utility.yul\":4927:4933 */\n dup7\n /* \"#utility.yul\":4923:4940 */\n add\n /* \"#utility.yul\":4851:4954 */\n tag_125\n jump\t// in\n tag_223:\n /* \"#utility.yul\":4842:4954 */\n swap2\n pop\n /* \"#utility.yul\":4658:4960 */\n pop\n /* \"#utility.yul\":4572:4960 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5008:5786 */\n tag_127:\n /* \"#utility.yul\":5087:5092 */\n 0x00\n /* \"#utility.yul\":5131:5135 */\n 0x40\n /* \"#utility.yul\":5119:5128 */\n dup3\n /* \"#utility.yul\":5114:5117 */\n dup5\n /* \"#utility.yul\":5110:5129 */\n sub\n /* \"#utility.yul\":5106:5136 */\n slt\n /* \"#utility.yul\":5103:5220 */\n iszero\n tag_225\n jumpi\n /* \"#utility.yul\":5139:5218 */\n tag_226\n tag_108\n jump\t// in\n tag_226:\n /* \"#utility.yul\":5103:5220 */\n tag_225:\n /* \"#utility.yul\":5238:5259 */\n tag_227\n /* \"#utility.yul\":5254:5258 */\n 0x40\n /* \"#utility.yul\":5238:5259 */\n tag_112\n jump\t// in\n tag_227:\n /* \"#utility.yul\":5229:5259 */\n swap1\n pop\n /* \"#utility.yul\":5321:5322 */\n 0x00\n /* \"#utility.yul\":5361:5408 */\n tag_228\n /* \"#utility.yul\":5404:5407 */\n dup5\n /* \"#utility.yul\":5395:5401 */\n dup3\n /* \"#utility.yul\":5384:5393 */\n dup6\n /* \"#utility.yul\":5380:5402 */\n add\n /* \"#utility.yul\":5361:5408 */\n tag_116\n jump\t// in\n tag_228:\n /* \"#utility.yul\":5354:5358 */\n 0x00\n /* \"#utility.yul\":5347:5352 */\n dup4\n /* \"#utility.yul\":5343:5359 */\n add\n /* \"#utility.yul\":5336:5409 */\n mstore\n /* \"#utility.yul\":5269:5420 */\n pop\n /* \"#utility.yul\":5511:5513 */\n 0x20\n /* \"#utility.yul\":5500:5509 */\n dup3\n /* \"#utility.yul\":5496:5514 */\n add\n /* \"#utility.yul\":5483:5515 */\n calldataload\n /* \"#utility.yul\":5542:5560 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5534:5540 */\n dup2\n /* \"#utility.yul\":5531:5561 */\n gt\n /* \"#utility.yul\":5528:5645 */\n iszero\n tag_229\n jumpi\n /* \"#utility.yul\":5564:5643 */\n tag_230\n tag_113\n jump\t// in\n tag_230:\n /* \"#utility.yul\":5528:5645 */\n tag_229:\n /* \"#utility.yul\":5684:5767 */\n tag_231\n /* \"#utility.yul\":5763:5766 */\n dup5\n /* \"#utility.yul\":5754:5760 */\n dup3\n /* \"#utility.yul\":5743:5752 */\n dup6\n /* \"#utility.yul\":5739:5761 */\n add\n /* \"#utility.yul\":5684:5767 */\n tag_126\n jump\t// in\n tag_231:\n /* \"#utility.yul\":5677:5681 */\n 0x20\n /* \"#utility.yul\":5670:5675 */\n dup4\n /* \"#utility.yul\":5666:5682 */\n add\n /* \"#utility.yul\":5659:5768 */\n mstore\n /* \"#utility.yul\":5430:5779 */\n pop\n /* \"#utility.yul\":5008:5786 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5792:5918 */\n tag_128:\n /* \"#utility.yul\":5829:5836 */\n 0x00\n /* \"#utility.yul\":5869:5911 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":5862:5867 */\n dup3\n /* \"#utility.yul\":5858:5912 */\n and\n /* \"#utility.yul\":5847:5912 */\n swap1\n pop\n /* \"#utility.yul\":5792:5918 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5924:6020 */\n tag_129:\n /* \"#utility.yul\":5961:5968 */\n 0x00\n /* \"#utility.yul\":5990:6014 */\n tag_234\n /* \"#utility.yul\":6008:6013 */\n dup3\n /* \"#utility.yul\":5990:6014 */\n tag_128\n jump\t// in\n tag_234:\n /* \"#utility.yul\":5979:6014 */\n swap1\n pop\n /* \"#utility.yul\":5924:6020 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6026:6148 */\n tag_130:\n /* \"#utility.yul\":6099:6123 */\n tag_236\n /* \"#utility.yul\":6117:6122 */\n dup2\n /* \"#utility.yul\":6099:6123 */\n tag_129\n jump\t// in\n tag_236:\n /* \"#utility.yul\":6092:6097 */\n dup2\n /* \"#utility.yul\":6089:6124 */\n eq\n /* \"#utility.yul\":6079:6142 */\n tag_237\n jumpi\n /* \"#utility.yul\":6138:6139 */\n 0x00\n /* \"#utility.yul\":6135:6136 */\n dup1\n /* \"#utility.yul\":6128:6140 */\n revert\n /* \"#utility.yul\":6079:6142 */\n tag_237:\n /* \"#utility.yul\":6026:6148 */\n pop\n jump\t// out\n /* \"#utility.yul\":6154:6293 */\n tag_131:\n /* \"#utility.yul\":6200:6205 */\n 0x00\n /* \"#utility.yul\":6238:6244 */\n dup2\n /* \"#utility.yul\":6225:6245 */\n calldataload\n /* \"#utility.yul\":6216:6245 */\n swap1\n pop\n /* \"#utility.yul\":6254:6287 */\n tag_239\n /* \"#utility.yul\":6281:6286 */\n dup2\n /* \"#utility.yul\":6254:6287 */\n tag_130\n jump\t// in\n tag_239:\n /* \"#utility.yul\":6154:6293 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6299:6400 */\n tag_132:\n /* \"#utility.yul\":6335:6342 */\n 0x00\n /* \"#utility.yul\":6375:6393 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6368:6373 */\n dup3\n /* \"#utility.yul\":6364:6394 */\n and\n /* \"#utility.yul\":6353:6394 */\n swap1\n pop\n /* \"#utility.yul\":6299:6400 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6406:6526 */\n tag_133:\n /* \"#utility.yul\":6478:6501 */\n tag_242\n /* \"#utility.yul\":6495:6500 */\n dup2\n /* \"#utility.yul\":6478:6501 */\n tag_132\n jump\t// in\n tag_242:\n /* \"#utility.yul\":6471:6476 */\n dup2\n /* \"#utility.yul\":6468:6502 */\n eq\n /* \"#utility.yul\":6458:6520 */\n tag_243\n jumpi\n /* \"#utility.yul\":6516:6517 */\n 0x00\n /* \"#utility.yul\":6513:6514 */\n dup1\n /* \"#utility.yul\":6506:6518 */\n revert\n /* \"#utility.yul\":6458:6520 */\n tag_243:\n /* \"#utility.yul\":6406:6526 */\n pop\n jump\t// out\n /* \"#utility.yul\":6532:6669 */\n tag_134:\n /* \"#utility.yul\":6577:6582 */\n 0x00\n /* \"#utility.yul\":6615:6621 */\n dup2\n /* \"#utility.yul\":6602:6622 */\n calldataload\n /* \"#utility.yul\":6593:6622 */\n swap1\n pop\n /* \"#utility.yul\":6631:6663 */\n tag_245\n /* \"#utility.yul\":6657:6662 */\n dup2\n /* \"#utility.yul\":6631:6663 */\n tag_133\n jump\t// in\n tag_245:\n /* \"#utility.yul\":6532:6669 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6675:7836 */\n tag_15:\n /* \"#utility.yul\":6799:6805 */\n 0x00\n /* \"#utility.yul\":6807:6813 */\n dup1\n /* \"#utility.yul\":6815:6821 */\n 0x00\n /* \"#utility.yul\":6823:6829 */\n dup1\n /* \"#utility.yul\":6872:6875 */\n 0x80\n /* \"#utility.yul\":6860:6869 */\n dup6\n /* \"#utility.yul\":6851:6858 */\n dup8\n /* \"#utility.yul\":6847:6870 */\n sub\n /* \"#utility.yul\":6843:6876 */\n slt\n /* \"#utility.yul\":6840:6960 */\n iszero\n tag_247\n jumpi\n /* \"#utility.yul\":6879:6958 */\n tag_248\n tag_106\n jump\t// in\n tag_248:\n /* \"#utility.yul\":6840:6960 */\n tag_247:\n /* \"#utility.yul\":7027:7028 */\n 0x00\n /* \"#utility.yul\":7016:7025 */\n dup6\n /* \"#utility.yul\":7012:7029 */\n add\n /* \"#utility.yul\":6999:7030 */\n calldataload\n /* \"#utility.yul\":7057:7075 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7049:7055 */\n dup2\n /* \"#utility.yul\":7046:7076 */\n gt\n /* \"#utility.yul\":7043:7160 */\n iszero\n tag_249\n jumpi\n /* \"#utility.yul\":7079:7158 */\n tag_250\n tag_107\n jump\t// in\n tag_250:\n /* \"#utility.yul\":7043:7160 */\n tag_249:\n /* \"#utility.yul\":7184:7267 */\n tag_251\n /* \"#utility.yul\":7259:7266 */\n dup8\n /* \"#utility.yul\":7250:7256 */\n dup3\n /* \"#utility.yul\":7239:7248 */\n dup9\n /* \"#utility.yul\":7235:7257 */\n add\n /* \"#utility.yul\":7184:7267 */\n tag_127\n jump\t// in\n tag_251:\n /* \"#utility.yul\":7174:7267 */\n swap5\n pop\n /* \"#utility.yul\":6970:7277 */\n pop\n /* \"#utility.yul\":7316:7318 */\n 0x20\n /* \"#utility.yul\":7342:7395 */\n tag_252\n /* \"#utility.yul\":7387:7394 */\n dup8\n /* \"#utility.yul\":7378:7384 */\n dup3\n /* \"#utility.yul\":7367:7376 */\n dup9\n /* \"#utility.yul\":7363:7385 */\n add\n /* \"#utility.yul\":7342:7395 */\n tag_131\n jump\t// in\n tag_252:\n /* \"#utility.yul\":7332:7395 */\n swap4\n pop\n /* \"#utility.yul\":7287:7405 */\n pop\n /* \"#utility.yul\":7444:7446 */\n 0x40\n /* \"#utility.yul\":7470:7522 */\n tag_253\n /* \"#utility.yul\":7514:7521 */\n dup8\n /* \"#utility.yul\":7505:7511 */\n dup3\n /* \"#utility.yul\":7494:7503 */\n dup9\n /* \"#utility.yul\":7490:7512 */\n add\n /* \"#utility.yul\":7470:7522 */\n tag_134\n jump\t// in\n tag_253:\n /* \"#utility.yul\":7460:7522 */\n swap3\n pop\n /* \"#utility.yul\":7415:7532 */\n pop\n /* \"#utility.yul\":7599:7601 */\n 0x60\n /* \"#utility.yul\":7588:7597 */\n dup6\n /* \"#utility.yul\":7584:7602 */\n add\n /* \"#utility.yul\":7571:7603 */\n calldataload\n /* \"#utility.yul\":7630:7648 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7622:7628 */\n dup2\n /* \"#utility.yul\":7619:7649 */\n gt\n /* \"#utility.yul\":7616:7733 */\n iszero\n tag_254\n jumpi\n /* \"#utility.yul\":7652:7731 */\n tag_255\n tag_107\n jump\t// in\n tag_255:\n /* \"#utility.yul\":7616:7733 */\n tag_254:\n /* \"#utility.yul\":7757:7819 */\n tag_256\n /* \"#utility.yul\":7811:7818 */\n dup8\n /* \"#utility.yul\":7802:7808 */\n dup3\n /* \"#utility.yul\":7791:7800 */\n dup9\n /* \"#utility.yul\":7787:7809 */\n add\n /* \"#utility.yul\":7757:7819 */\n tag_124\n jump\t// in\n tag_256:\n /* \"#utility.yul\":7747:7819 */\n swap2\n pop\n /* \"#utility.yul\":7542:7829 */\n pop\n /* \"#utility.yul\":6675:7836 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":7842:9223 */\n tag_19:\n /* \"#utility.yul\":7996:8002 */\n 0x00\n /* \"#utility.yul\":8004:8010 */\n dup1\n /* \"#utility.yul\":8012:8018 */\n 0x00\n /* \"#utility.yul\":8020:8026 */\n dup1\n /* \"#utility.yul\":8069:8072 */\n 0x80\n /* \"#utility.yul\":8057:8066 */\n dup6\n /* \"#utility.yul\":8048:8055 */\n dup8\n /* \"#utility.yul\":8044:8067 */\n sub\n /* \"#utility.yul\":8040:8073 */\n slt\n /* \"#utility.yul\":8037:8157 */\n iszero\n tag_258\n jumpi\n /* \"#utility.yul\":8076:8155 */\n tag_259\n tag_106\n jump\t// in\n tag_259:\n /* \"#utility.yul\":8037:8157 */\n tag_258:\n /* \"#utility.yul\":8224:8225 */\n 0x00\n /* \"#utility.yul\":8213:8222 */\n dup6\n /* \"#utility.yul\":8209:8226 */\n add\n /* \"#utility.yul\":8196:8227 */\n calldataload\n /* \"#utility.yul\":8254:8272 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8246:8252 */\n dup2\n /* \"#utility.yul\":8243:8273 */\n gt\n /* \"#utility.yul\":8240:8357 */\n iszero\n tag_260\n jumpi\n /* \"#utility.yul\":8276:8355 */\n tag_261\n tag_107\n jump\t// in\n tag_261:\n /* \"#utility.yul\":8240:8357 */\n tag_260:\n /* \"#utility.yul\":8381:8464 */\n tag_262\n /* \"#utility.yul\":8456:8463 */\n dup8\n /* \"#utility.yul\":8447:8453 */\n dup3\n /* \"#utility.yul\":8436:8445 */\n dup9\n /* \"#utility.yul\":8432:8454 */\n add\n /* \"#utility.yul\":8381:8464 */\n tag_127\n jump\t// in\n tag_262:\n /* \"#utility.yul\":8371:8464 */\n swap5\n pop\n /* \"#utility.yul\":8167:8474 */\n pop\n /* \"#utility.yul\":8541:8543 */\n 0x20\n /* \"#utility.yul\":8530:8539 */\n dup6\n /* \"#utility.yul\":8526:8544 */\n add\n /* \"#utility.yul\":8513:8545 */\n calldataload\n /* \"#utility.yul\":8572:8590 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8564:8570 */\n dup2\n /* \"#utility.yul\":8561:8591 */\n gt\n /* \"#utility.yul\":8558:8675 */\n iszero\n tag_263\n jumpi\n /* \"#utility.yul\":8594:8673 */\n tag_264\n tag_107\n jump\t// in\n tag_264:\n /* \"#utility.yul\":8558:8675 */\n tag_263:\n /* \"#utility.yul\":8699:8782 */\n tag_265\n /* \"#utility.yul\":8774:8781 */\n dup8\n /* \"#utility.yul\":8765:8771 */\n dup3\n /* \"#utility.yul\":8754:8763 */\n dup9\n /* \"#utility.yul\":8750:8772 */\n add\n /* \"#utility.yul\":8699:8782 */\n tag_127\n jump\t// in\n tag_265:\n /* \"#utility.yul\":8689:8782 */\n swap4\n pop\n /* \"#utility.yul\":8484:8792 */\n pop\n /* \"#utility.yul\":8831:8833 */\n 0x40\n /* \"#utility.yul\":8857:8909 */\n tag_266\n /* \"#utility.yul\":8901:8908 */\n dup8\n /* \"#utility.yul\":8892:8898 */\n dup3\n /* \"#utility.yul\":8881:8890 */\n dup9\n /* \"#utility.yul\":8877:8899 */\n add\n /* \"#utility.yul\":8857:8909 */\n tag_134\n jump\t// in\n tag_266:\n /* \"#utility.yul\":8847:8909 */\n swap3\n pop\n /* \"#utility.yul\":8802:8919 */\n pop\n /* \"#utility.yul\":8986:8988 */\n 0x60\n /* \"#utility.yul\":8975:8984 */\n dup6\n /* \"#utility.yul\":8971:8989 */\n add\n /* \"#utility.yul\":8958:8990 */\n calldataload\n /* \"#utility.yul\":9017:9035 */\n 0xffffffffffffffff\n /* \"#utility.yul\":9009:9015 */\n dup2\n /* \"#utility.yul\":9006:9036 */\n gt\n /* \"#utility.yul\":9003:9120 */\n iszero\n tag_267\n jumpi\n /* \"#utility.yul\":9039:9118 */\n tag_268\n tag_107\n jump\t// in\n tag_268:\n /* \"#utility.yul\":9003:9120 */\n tag_267:\n /* \"#utility.yul\":9144:9206 */\n tag_269\n /* \"#utility.yul\":9198:9205 */\n dup8\n /* \"#utility.yul\":9189:9195 */\n dup3\n /* \"#utility.yul\":9178:9187 */\n dup9\n /* \"#utility.yul\":9174:9196 */\n add\n /* \"#utility.yul\":9144:9206 */\n tag_124\n jump\t// in\n tag_269:\n /* \"#utility.yul\":9134:9206 */\n swap2\n pop\n /* \"#utility.yul\":8929:9216 */\n pop\n /* \"#utility.yul\":7842:9223 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":9229:9318 */\n tag_135:\n /* \"#utility.yul\":9265:9272 */\n 0x00\n /* \"#utility.yul\":9305:9311 */\n 0xffff\n /* \"#utility.yul\":9298:9303 */\n dup3\n /* \"#utility.yul\":9294:9312 */\n and\n /* \"#utility.yul\":9283:9312 */\n swap1\n pop\n /* \"#utility.yul\":9229:9318 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":9324:9444 */\n tag_136:\n /* \"#utility.yul\":9396:9419 */\n tag_272\n /* \"#utility.yul\":9413:9418 */\n dup2\n /* \"#utility.yul\":9396:9419 */\n tag_135\n jump\t// in\n tag_272:\n /* \"#utility.yul\":9389:9394 */\n dup2\n /* \"#utility.yul\":9386:9420 */\n eq\n /* \"#utility.yul\":9376:9438 */\n tag_273\n jumpi\n /* \"#utility.yul\":9434:9435 */\n 0x00\n /* \"#utility.yul\":9431:9432 */\n dup1\n /* \"#utility.yul\":9424:9436 */\n revert\n /* \"#utility.yul\":9376:9438 */\n tag_273:\n /* \"#utility.yul\":9324:9444 */\n pop\n jump\t// out\n /* \"#utility.yul\":9450:9587 */\n tag_137:\n /* \"#utility.yul\":9495:9500 */\n 0x00\n /* \"#utility.yul\":9533:9539 */\n dup2\n /* \"#utility.yul\":9520:9540 */\n calldataload\n /* \"#utility.yul\":9511:9540 */\n swap1\n pop\n /* \"#utility.yul\":9549:9581 */\n tag_275\n /* \"#utility.yul\":9575:9580 */\n dup2\n /* \"#utility.yul\":9549:9581 */\n tag_136\n jump\t// in\n tag_275:\n /* \"#utility.yul\":9450:9587 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9593:10674 */\n tag_23:\n /* \"#utility.yul\":9693:9699 */\n 0x00\n /* \"#utility.yul\":9701:9707 */\n dup1\n /* \"#utility.yul\":9709:9715 */\n 0x00\n /* \"#utility.yul\":9717:9723 */\n dup1\n /* \"#utility.yul\":9725:9731 */\n 0x00\n /* \"#utility.yul\":9774:9777 */\n 0xa0\n /* \"#utility.yul\":9762:9771 */\n dup7\n /* \"#utility.yul\":9753:9760 */\n dup9\n /* \"#utility.yul\":9749:9772 */\n sub\n /* \"#utility.yul\":9745:9778 */\n slt\n /* \"#utility.yul\":9742:9862 */\n iszero\n tag_277\n jumpi\n /* \"#utility.yul\":9781:9860 */\n tag_278\n tag_106\n jump\t// in\n tag_278:\n /* \"#utility.yul\":9742:9862 */\n tag_277:\n /* \"#utility.yul\":9901:9902 */\n 0x00\n /* \"#utility.yul\":9926:9977 */\n tag_279\n /* \"#utility.yul\":9969:9976 */\n dup9\n /* \"#utility.yul\":9960:9966 */\n dup3\n /* \"#utility.yul\":9949:9958 */\n dup10\n /* \"#utility.yul\":9945:9967 */\n add\n /* \"#utility.yul\":9926:9977 */\n tag_116\n jump\t// in\n tag_279:\n /* \"#utility.yul\":9916:9977 */\n swap6\n pop\n /* \"#utility.yul\":9872:9987 */\n pop\n /* \"#utility.yul\":10026:10028 */\n 0x20\n /* \"#utility.yul\":10052:10104 */\n tag_280\n /* \"#utility.yul\":10096:10103 */\n dup9\n /* \"#utility.yul\":10087:10093 */\n dup3\n /* \"#utility.yul\":10076:10085 */\n dup10\n /* \"#utility.yul\":10072:10094 */\n add\n /* \"#utility.yul\":10052:10104 */\n tag_137\n jump\t// in\n tag_280:\n /* \"#utility.yul\":10042:10104 */\n swap5\n pop\n /* \"#utility.yul\":9997:10114 */\n pop\n /* \"#utility.yul\":10153:10155 */\n 0x40\n /* \"#utility.yul\":10179:10232 */\n tag_281\n /* \"#utility.yul\":10224:10231 */\n dup9\n /* \"#utility.yul\":10215:10221 */\n dup3\n /* \"#utility.yul\":10204:10213 */\n dup10\n /* \"#utility.yul\":10200:10222 */\n add\n /* \"#utility.yul\":10179:10232 */\n tag_131\n jump\t// in\n tag_281:\n /* \"#utility.yul\":10169:10232 */\n swap4\n pop\n /* \"#utility.yul\":10124:10242 */\n pop\n /* \"#utility.yul\":10281:10283 */\n 0x60\n /* \"#utility.yul\":10307:10359 */\n tag_282\n /* \"#utility.yul\":10351:10358 */\n dup9\n /* \"#utility.yul\":10342:10348 */\n dup3\n /* \"#utility.yul\":10331:10340 */\n dup10\n /* \"#utility.yul\":10327:10349 */\n add\n /* \"#utility.yul\":10307:10359 */\n tag_134\n jump\t// in\n tag_282:\n /* \"#utility.yul\":10297:10359 */\n swap3\n pop\n /* \"#utility.yul\":10252:10369 */\n pop\n /* \"#utility.yul\":10436:10439 */\n 0x80\n /* \"#utility.yul\":10425:10434 */\n dup7\n /* \"#utility.yul\":10421:10440 */\n add\n /* \"#utility.yul\":10408:10441 */\n calldataload\n /* \"#utility.yul\":10468:10486 */\n 0xffffffffffffffff\n /* \"#utility.yul\":10460:10466 */\n dup2\n /* \"#utility.yul\":10457:10487 */\n gt\n /* \"#utility.yul\":10454:10571 */\n iszero\n tag_283\n jumpi\n /* \"#utility.yul\":10490:10569 */\n tag_284\n tag_107\n jump\t// in\n tag_284:\n /* \"#utility.yul\":10454:10571 */\n tag_283:\n /* \"#utility.yul\":10595:10657 */\n tag_285\n /* \"#utility.yul\":10649:10656 */\n dup9\n /* \"#utility.yul\":10640:10646 */\n dup3\n /* \"#utility.yul\":10629:10638 */\n dup10\n /* \"#utility.yul\":10625:10647 */\n add\n /* \"#utility.yul\":10595:10657 */\n tag_124\n jump\t// in\n tag_285:\n /* \"#utility.yul\":10585:10657 */\n swap2\n pop\n /* \"#utility.yul\":10379:10667 */\n pop\n /* \"#utility.yul\":9593:10674 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":10680:10740 */\n tag_138:\n /* \"#utility.yul\":10708:10711 */\n 0x00\n /* \"#utility.yul\":10729:10734 */\n dup2\n /* \"#utility.yul\":10722:10734 */\n swap1\n pop\n /* \"#utility.yul\":10680:10740 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10746:10888 */\n tag_139:\n /* \"#utility.yul\":10796:10805 */\n 0x00\n /* \"#utility.yul\":10829:10882 */\n tag_288\n /* \"#utility.yul\":10847:10881 */\n tag_289\n /* \"#utility.yul\":10856:10880 */\n tag_290\n /* \"#utility.yul\":10874:10879 */\n dup5\n /* \"#utility.yul\":10856:10880 */\n tag_128\n jump\t// in\n tag_290:\n /* \"#utility.yul\":10847:10881 */\n tag_138\n jump\t// in\n tag_289:\n /* \"#utility.yul\":10829:10882 */\n tag_128\n jump\t// in\n tag_288:\n /* \"#utility.yul\":10816:10882 */\n swap1\n pop\n /* \"#utility.yul\":10746:10888 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10894:11020 */\n tag_140:\n /* \"#utility.yul\":10944:10953 */\n 0x00\n /* \"#utility.yul\":10977:11014 */\n tag_292\n /* \"#utility.yul\":11008:11013 */\n dup3\n /* \"#utility.yul\":10977:11014 */\n tag_139\n jump\t// in\n tag_292:\n /* \"#utility.yul\":10964:11014 */\n swap1\n pop\n /* \"#utility.yul\":10894:11020 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":11026:11173 */\n tag_141:\n /* \"#utility.yul\":11097:11106 */\n 0x00\n /* \"#utility.yul\":11130:11167 */\n tag_294\n /* \"#utility.yul\":11161:11166 */\n dup3\n /* \"#utility.yul\":11130:11167 */\n tag_140\n jump\t// in\n tag_294:\n /* \"#utility.yul\":11117:11167 */\n swap1\n pop\n /* \"#utility.yul\":11026:11173 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":11179:11352 */\n tag_142:\n /* \"#utility.yul\":11287:11345 */\n tag_296\n /* \"#utility.yul\":11339:11344 */\n dup2\n /* \"#utility.yul\":11287:11345 */\n tag_141\n jump\t// in\n tag_296:\n /* \"#utility.yul\":11282:11285 */\n dup3\n /* \"#utility.yul\":11275:11346 */\n mstore\n /* \"#utility.yul\":11179:11352 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11358:11622 */\n tag_28:\n /* \"#utility.yul\":11472:11476 */\n 0x00\n /* \"#utility.yul\":11510:11512 */\n 0x20\n /* \"#utility.yul\":11499:11508 */\n dup3\n /* \"#utility.yul\":11495:11513 */\n add\n /* \"#utility.yul\":11487:11513 */\n swap1\n pop\n /* \"#utility.yul\":11523:11615 */\n tag_298\n /* \"#utility.yul\":11612:11613 */\n 0x00\n /* \"#utility.yul\":11601:11610 */\n dup4\n /* \"#utility.yul\":11597:11614 */\n add\n /* \"#utility.yul\":11588:11594 */\n dup5\n /* \"#utility.yul\":11523:11615 */\n tag_142\n jump\t// in\n tag_298:\n /* \"#utility.yul\":11358:11622 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11628:11955 */\n tag_31:\n /* \"#utility.yul\":11686:11692 */\n 0x00\n /* \"#utility.yul\":11735:11737 */\n 0x20\n /* \"#utility.yul\":11723:11732 */\n dup3\n /* \"#utility.yul\":11714:11721 */\n dup5\n /* \"#utility.yul\":11710:11733 */\n sub\n /* \"#utility.yul\":11706:11738 */\n slt\n /* \"#utility.yul\":11703:11822 */\n iszero\n tag_300\n jumpi\n /* \"#utility.yul\":11741:11820 */\n tag_301\n tag_106\n jump\t// in\n tag_301:\n /* \"#utility.yul\":11703:11822 */\n tag_300:\n /* \"#utility.yul\":11861:11862 */\n 0x00\n /* \"#utility.yul\":11886:11938 */\n tag_302\n /* \"#utility.yul\":11930:11937 */\n dup5\n /* \"#utility.yul\":11921:11927 */\n dup3\n /* \"#utility.yul\":11910:11919 */\n dup6\n /* \"#utility.yul\":11906:11928 */\n add\n /* \"#utility.yul\":11886:11938 */\n tag_137\n jump\t// in\n tag_302:\n /* \"#utility.yul\":11876:11938 */\n swap2\n pop\n /* \"#utility.yul\":11832:11948 */\n pop\n /* \"#utility.yul\":11628:11955 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":11961:12079 */\n tag_143:\n /* \"#utility.yul\":12048:12072 */\n tag_304\n /* \"#utility.yul\":12066:12071 */\n dup2\n /* \"#utility.yul\":12048:12072 */\n tag_129\n jump\t// in\n tag_304:\n /* \"#utility.yul\":12043:12046 */\n dup3\n /* \"#utility.yul\":12036:12073 */\n mstore\n /* \"#utility.yul\":11961:12079 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12085:12307 */\n tag_34:\n /* \"#utility.yul\":12178:12182 */\n 0x00\n /* \"#utility.yul\":12216:12218 */\n 0x20\n /* \"#utility.yul\":12205:12214 */\n dup3\n /* \"#utility.yul\":12201:12219 */\n add\n /* \"#utility.yul\":12193:12219 */\n swap1\n pop\n /* \"#utility.yul\":12229:12300 */\n tag_306\n /* \"#utility.yul\":12297:12298 */\n 0x00\n /* \"#utility.yul\":12286:12295 */\n dup4\n /* \"#utility.yul\":12282:12299 */\n add\n /* \"#utility.yul\":12273:12279 */\n dup5\n /* \"#utility.yul\":12229:12300 */\n tag_143\n jump\t// in\n tag_306:\n /* \"#utility.yul\":12085:12307 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12313:12862 */\n tag_37:\n /* \"#utility.yul\":12402:12408 */\n 0x00\n /* \"#utility.yul\":12451:12453 */\n 0x20\n /* \"#utility.yul\":12439:12448 */\n dup3\n /* \"#utility.yul\":12430:12437 */\n dup5\n /* \"#utility.yul\":12426:12449 */\n sub\n /* \"#utility.yul\":12422:12454 */\n slt\n /* \"#utility.yul\":12419:12538 */\n iszero\n tag_308\n jumpi\n /* \"#utility.yul\":12457:12536 */\n tag_309\n tag_106\n jump\t// in\n tag_309:\n /* \"#utility.yul\":12419:12538 */\n tag_308:\n /* \"#utility.yul\":12605:12606 */\n 0x00\n /* \"#utility.yul\":12594:12603 */\n dup3\n /* \"#utility.yul\":12590:12607 */\n add\n /* \"#utility.yul\":12577:12608 */\n calldataload\n /* \"#utility.yul\":12635:12653 */\n 0xffffffffffffffff\n /* \"#utility.yul\":12627:12633 */\n dup2\n /* \"#utility.yul\":12624:12654 */\n gt\n /* \"#utility.yul\":12621:12738 */\n iszero\n tag_310\n jumpi\n /* \"#utility.yul\":12657:12736 */\n tag_311\n tag_107\n jump\t// in\n tag_311:\n /* \"#utility.yul\":12621:12738 */\n tag_310:\n /* \"#utility.yul\":12762:12845 */\n tag_312\n /* \"#utility.yul\":12837:12844 */\n dup5\n /* \"#utility.yul\":12828:12834 */\n dup3\n /* \"#utility.yul\":12817:12826 */\n dup6\n /* \"#utility.yul\":12813:12835 */\n add\n /* \"#utility.yul\":12762:12845 */\n tag_127\n jump\t// in\n tag_312:\n /* \"#utility.yul\":12752:12845 */\n swap2\n pop\n /* \"#utility.yul\":12548:12855 */\n pop\n /* \"#utility.yul\":12313:12862 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12868:12945 */\n tag_144:\n /* \"#utility.yul\":12905:12912 */\n 0x00\n /* \"#utility.yul\":12934:12939 */\n dup2\n /* \"#utility.yul\":12923:12939 */\n swap1\n pop\n /* \"#utility.yul\":12868:12945 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12951:13069 */\n tag_145:\n /* \"#utility.yul\":13038:13062 */\n tag_315\n /* \"#utility.yul\":13056:13061 */\n dup2\n /* \"#utility.yul\":13038:13062 */\n tag_144\n jump\t// in\n tag_315:\n /* \"#utility.yul\":13033:13036 */\n dup3\n /* \"#utility.yul\":13026:13063 */\n mstore\n /* \"#utility.yul\":12951:13069 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13075:13297 */\n tag_40:\n /* \"#utility.yul\":13168:13172 */\n 0x00\n /* \"#utility.yul\":13206:13208 */\n 0x20\n /* \"#utility.yul\":13195:13204 */\n dup3\n /* \"#utility.yul\":13191:13209 */\n add\n /* \"#utility.yul\":13183:13209 */\n swap1\n pop\n /* \"#utility.yul\":13219:13290 */\n tag_317\n /* \"#utility.yul\":13287:13288 */\n 0x00\n /* \"#utility.yul\":13276:13285 */\n dup4\n /* \"#utility.yul\":13272:13289 */\n add\n /* \"#utility.yul\":13263:13269 */\n dup5\n /* \"#utility.yul\":13219:13290 */\n tag_145\n jump\t// in\n tag_317:\n /* \"#utility.yul\":13075:13297 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13303:14604 */\n tag_43:\n /* \"#utility.yul\":13433:13439 */\n 0x00\n /* \"#utility.yul\":13441:13447 */\n dup1\n /* \"#utility.yul\":13449:13455 */\n 0x00\n /* \"#utility.yul\":13457:13463 */\n dup1\n /* \"#utility.yul\":13465:13471 */\n 0x00\n /* \"#utility.yul\":13514:13517 */\n 0xa0\n /* \"#utility.yul\":13502:13511 */\n dup7\n /* \"#utility.yul\":13493:13500 */\n dup9\n /* \"#utility.yul\":13489:13512 */\n sub\n /* \"#utility.yul\":13485:13518 */\n slt\n /* \"#utility.yul\":13482:13602 */\n iszero\n tag_319\n jumpi\n /* \"#utility.yul\":13521:13600 */\n tag_320\n tag_106\n jump\t// in\n tag_320:\n /* \"#utility.yul\":13482:13602 */\n tag_319:\n /* \"#utility.yul\":13641:13642 */\n 0x00\n /* \"#utility.yul\":13666:13717 */\n tag_321\n /* \"#utility.yul\":13709:13716 */\n dup9\n /* \"#utility.yul\":13700:13706 */\n dup3\n /* \"#utility.yul\":13689:13698 */\n dup10\n /* \"#utility.yul\":13685:13707 */\n add\n /* \"#utility.yul\":13666:13717 */\n tag_116\n jump\t// in\n tag_321:\n /* \"#utility.yul\":13656:13717 */\n swap6\n pop\n /* \"#utility.yul\":13612:13727 */\n pop\n /* \"#utility.yul\":13766:13768 */\n 0x20\n /* \"#utility.yul\":13792:13844 */\n tag_322\n /* \"#utility.yul\":13836:13843 */\n dup9\n /* \"#utility.yul\":13827:13833 */\n dup3\n /* \"#utility.yul\":13816:13825 */\n dup10\n /* \"#utility.yul\":13812:13834 */\n add\n /* \"#utility.yul\":13792:13844 */\n tag_137\n jump\t// in\n tag_322:\n /* \"#utility.yul\":13782:13844 */\n swap5\n pop\n /* \"#utility.yul\":13737:13854 */\n pop\n /* \"#utility.yul\":13921:13923 */\n 0x40\n /* \"#utility.yul\":13910:13919 */\n dup7\n /* \"#utility.yul\":13906:13924 */\n add\n /* \"#utility.yul\":13893:13925 */\n calldataload\n /* \"#utility.yul\":13952:13970 */\n 0xffffffffffffffff\n /* \"#utility.yul\":13944:13950 */\n dup2\n /* \"#utility.yul\":13941:13971 */\n gt\n /* \"#utility.yul\":13938:14055 */\n iszero\n tag_323\n jumpi\n /* \"#utility.yul\":13974:14053 */\n tag_324\n tag_107\n jump\t// in\n tag_324:\n /* \"#utility.yul\":13938:14055 */\n tag_323:\n /* \"#utility.yul\":14079:14162 */\n tag_325\n /* \"#utility.yul\":14154:14161 */\n dup9\n /* \"#utility.yul\":14145:14151 */\n dup3\n /* \"#utility.yul\":14134:14143 */\n dup10\n /* \"#utility.yul\":14130:14152 */\n add\n /* \"#utility.yul\":14079:14162 */\n tag_127\n jump\t// in\n tag_325:\n /* \"#utility.yul\":14069:14162 */\n swap4\n pop\n /* \"#utility.yul\":13864:14172 */\n pop\n /* \"#utility.yul\":14211:14213 */\n 0x60\n /* \"#utility.yul\":14237:14289 */\n tag_326\n /* \"#utility.yul\":14281:14288 */\n dup9\n /* \"#utility.yul\":14272:14278 */\n dup3\n /* \"#utility.yul\":14261:14270 */\n dup10\n /* \"#utility.yul\":14257:14279 */\n add\n /* \"#utility.yul\":14237:14289 */\n tag_134\n jump\t// in\n tag_326:\n /* \"#utility.yul\":14227:14289 */\n swap3\n pop\n /* \"#utility.yul\":14182:14299 */\n pop\n /* \"#utility.yul\":14366:14369 */\n 0x80\n /* \"#utility.yul\":14355:14364 */\n dup7\n /* \"#utility.yul\":14351:14370 */\n add\n /* \"#utility.yul\":14338:14371 */\n calldataload\n /* \"#utility.yul\":14398:14416 */\n 0xffffffffffffffff\n /* \"#utility.yul\":14390:14396 */\n dup2\n /* \"#utility.yul\":14387:14417 */\n gt\n /* \"#utility.yul\":14384:14501 */\n iszero\n tag_327\n jumpi\n /* \"#utility.yul\":14420:14499 */\n tag_328\n tag_107\n jump\t// in\n tag_328:\n /* \"#utility.yul\":14384:14501 */\n tag_327:\n /* \"#utility.yul\":14525:14587 */\n tag_329\n /* \"#utility.yul\":14579:14586 */\n dup9\n /* \"#utility.yul\":14570:14576 */\n dup3\n /* \"#utility.yul\":14559:14568 */\n dup10\n /* \"#utility.yul\":14555:14577 */\n add\n /* \"#utility.yul\":14525:14587 */\n tag_124\n jump\t// in\n tag_329:\n /* \"#utility.yul\":14515:14587 */\n swap2\n pop\n /* \"#utility.yul\":14309:14597 */\n pop\n /* \"#utility.yul\":13303:14604 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":14610:14725 */\n tag_146:\n /* \"#utility.yul\":14695:14718 */\n tag_331\n /* \"#utility.yul\":14712:14717 */\n dup2\n /* \"#utility.yul\":14695:14718 */\n tag_132\n jump\t// in\n tag_331:\n /* \"#utility.yul\":14690:14693 */\n dup3\n /* \"#utility.yul\":14683:14719 */\n mstore\n /* \"#utility.yul\":14610:14725 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14731:15161 */\n tag_49:\n /* \"#utility.yul\":14874:14878 */\n 0x00\n /* \"#utility.yul\":14912:14914 */\n 0x60\n /* \"#utility.yul\":14901:14910 */\n dup3\n /* \"#utility.yul\":14897:14915 */\n add\n /* \"#utility.yul\":14889:14915 */\n swap1\n pop\n /* \"#utility.yul\":14925:14994 */\n tag_333\n /* \"#utility.yul\":14991:14992 */\n 0x00\n /* \"#utility.yul\":14980:14989 */\n dup4\n /* \"#utility.yul\":14976:14993 */\n add\n /* \"#utility.yul\":14967:14973 */\n dup7\n /* \"#utility.yul\":14925:14994 */\n tag_146\n jump\t// in\n tag_333:\n /* \"#utility.yul\":15004:15074 */\n tag_334\n /* \"#utility.yul\":15070:15072 */\n 0x20\n /* \"#utility.yul\":15059:15068 */\n dup4\n /* \"#utility.yul\":15055:15073 */\n add\n /* \"#utility.yul\":15046:15052 */\n dup6\n /* \"#utility.yul\":15004:15074 */\n tag_146\n jump\t// in\n tag_334:\n /* \"#utility.yul\":15084:15154 */\n tag_335\n /* \"#utility.yul\":15150:15152 */\n 0x40\n /* \"#utility.yul\":15139:15148 */\n dup4\n /* \"#utility.yul\":15135:15153 */\n add\n /* \"#utility.yul\":15126:15132 */\n dup5\n /* \"#utility.yul\":15084:15154 */\n tag_146\n jump\t// in\n tag_335:\n /* \"#utility.yul\":14731:15161 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15167:15601 */\n tag_54:\n /* \"#utility.yul\":15312:15316 */\n 0x00\n /* \"#utility.yul\":15350:15352 */\n 0x60\n /* \"#utility.yul\":15339:15348 */\n dup3\n /* \"#utility.yul\":15335:15353 */\n add\n /* \"#utility.yul\":15327:15353 */\n swap1\n pop\n /* \"#utility.yul\":15363:15432 */\n tag_337\n /* \"#utility.yul\":15429:15430 */\n 0x00\n /* \"#utility.yul\":15418:15427 */\n dup4\n /* \"#utility.yul\":15414:15431 */\n add\n /* \"#utility.yul\":15405:15411 */\n dup7\n /* \"#utility.yul\":15363:15432 */\n tag_146\n jump\t// in\n tag_337:\n /* \"#utility.yul\":15442:15514 */\n tag_338\n /* \"#utility.yul\":15510:15512 */\n 0x20\n /* \"#utility.yul\":15499:15508 */\n dup4\n /* \"#utility.yul\":15495:15513 */\n add\n /* \"#utility.yul\":15486:15492 */\n dup6\n /* \"#utility.yul\":15442:15514 */\n tag_145\n jump\t// in\n tag_338:\n /* \"#utility.yul\":15524:15594 */\n tag_339\n /* \"#utility.yul\":15590:15592 */\n 0x40\n /* \"#utility.yul\":15579:15588 */\n dup4\n /* \"#utility.yul\":15575:15593 */\n add\n /* \"#utility.yul\":15566:15572 */\n dup5\n /* \"#utility.yul\":15524:15594 */\n tag_146\n jump\t// in\n tag_339:\n /* \"#utility.yul\":15167:15601 */\n swap5\n swap4\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15607:15709 */\n tag_147:\n /* \"#utility.yul\":15680:15702 */\n tag_341\n /* \"#utility.yul\":15696:15701 */\n dup2\n /* \"#utility.yul\":15680:15702 */\n tag_114\n jump\t// in\n tag_341:\n /* \"#utility.yul\":15675:15678 */\n dup3\n /* \"#utility.yul\":15668:15703 */\n mstore\n /* \"#utility.yul\":15607:15709 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15715:15838 */\n tag_148:\n /* \"#utility.yul\":15791:15797 */\n 0x00\n /* \"#utility.yul\":15825:15830 */\n dup2\n /* \"#utility.yul\":15819:15831 */\n mload\n /* \"#utility.yul\":15809:15831 */\n swap1\n pop\n /* \"#utility.yul\":15715:15838 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":15844:16027 */\n tag_149:\n /* \"#utility.yul\":15942:15953 */\n 0x00\n /* \"#utility.yul\":15976:15982 */\n dup3\n /* \"#utility.yul\":15971:15974 */\n dup3\n /* \"#utility.yul\":15964:15983 */\n mstore\n /* \"#utility.yul\":16016:16020 */\n 0x20\n /* \"#utility.yul\":16011:16014 */\n dup3\n /* \"#utility.yul\":16007:16021 */\n add\n /* \"#utility.yul\":15992:16021 */\n swap1\n pop\n /* \"#utility.yul\":15844:16027 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16033:16174 */\n tag_150:\n /* \"#utility.yul\":16109:16113 */\n 0x00\n /* \"#utility.yul\":16132:16135 */\n dup2\n /* \"#utility.yul\":16124:16135 */\n swap1\n pop\n /* \"#utility.yul\":16162:16166 */\n 0x20\n /* \"#utility.yul\":16157:16160 */\n dup3\n /* \"#utility.yul\":16153:16167 */\n add\n /* \"#utility.yul\":16145:16167 */\n swap1\n pop\n /* \"#utility.yul\":16033:16174 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16180:16278 */\n tag_151:\n /* \"#utility.yul\":16231:16237 */\n 0x00\n /* \"#utility.yul\":16265:16270 */\n dup2\n /* \"#utility.yul\":16259:16271 */\n mload\n /* \"#utility.yul\":16249:16271 */\n swap1\n pop\n /* \"#utility.yul\":16180:16278 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16284:16442 */\n tag_152:\n /* \"#utility.yul\":16357:16368 */\n 0x00\n /* \"#utility.yul\":16391:16397 */\n dup3\n /* \"#utility.yul\":16386:16389 */\n dup3\n /* \"#utility.yul\":16379:16398 */\n mstore\n /* \"#utility.yul\":16431:16435 */\n 0x20\n /* \"#utility.yul\":16426:16429 */\n dup3\n /* \"#utility.yul\":16422:16436 */\n add\n /* \"#utility.yul\":16407:16436 */\n swap1\n pop\n /* \"#utility.yul\":16284:16442 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16448:16755 */\n tag_153:\n /* \"#utility.yul\":16516:16517 */\n 0x00\n /* \"#utility.yul\":16526:16639 */\n tag_348:\n /* \"#utility.yul\":16540:16546 */\n dup4\n /* \"#utility.yul\":16537:16538 */\n dup2\n /* \"#utility.yul\":16534:16547 */\n lt\n /* \"#utility.yul\":16526:16639 */\n iszero\n tag_350\n jumpi\n /* \"#utility.yul\":16625:16626 */\n dup1\n /* \"#utility.yul\":16620:16623 */\n dup3\n /* \"#utility.yul\":16616:16627 */\n add\n /* \"#utility.yul\":16610:16628 */\n mload\n /* \"#utility.yul\":16606:16607 */\n dup2\n /* \"#utility.yul\":16601:16604 */\n dup5\n /* \"#utility.yul\":16597:16608 */\n add\n /* \"#utility.yul\":16590:16629 */\n mstore\n /* \"#utility.yul\":16562:16564 */\n 0x20\n /* \"#utility.yul\":16559:16560 */\n dup2\n /* \"#utility.yul\":16555:16565 */\n add\n /* \"#utility.yul\":16550:16565 */\n swap1\n pop\n /* \"#utility.yul\":16526:16639 */\n jump(tag_348)\n tag_350:\n /* \"#utility.yul\":16657:16663 */\n dup4\n /* \"#utility.yul\":16654:16655 */\n dup2\n /* \"#utility.yul\":16651:16664 */\n gt\n /* \"#utility.yul\":16648:16749 */\n iszero\n tag_351\n jumpi\n /* \"#utility.yul\":16737:16738 */\n 0x00\n /* \"#utility.yul\":16728:16734 */\n dup5\n /* \"#utility.yul\":16723:16726 */\n dup5\n /* \"#utility.yul\":16719:16735 */\n add\n /* \"#utility.yul\":16712:16739 */\n mstore\n /* \"#utility.yul\":16648:16749 */\n tag_351:\n /* \"#utility.yul\":16497:16755 */\n pop\n /* \"#utility.yul\":16448:16755 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16761:17101 */\n tag_154:\n /* \"#utility.yul\":16837:16840 */\n 0x00\n /* \"#utility.yul\":16865:16903 */\n tag_353\n /* \"#utility.yul\":16897:16902 */\n dup3\n /* \"#utility.yul\":16865:16903 */\n tag_151\n jump\t// in\n tag_353:\n /* \"#utility.yul\":16919:16979 */\n tag_354\n /* \"#utility.yul\":16972:16978 */\n dup2\n /* \"#utility.yul\":16967:16970 */\n dup6\n /* \"#utility.yul\":16919:16979 */\n tag_152\n jump\t// in\n tag_354:\n /* \"#utility.yul\":16912:16979 */\n swap4\n pop\n /* \"#utility.yul\":16988:17040 */\n tag_355\n /* \"#utility.yul\":17033:17039 */\n dup2\n /* \"#utility.yul\":17028:17031 */\n dup6\n /* \"#utility.yul\":17021:17025 */\n 0x20\n /* \"#utility.yul\":17014:17019 */\n dup7\n /* \"#utility.yul\":17010:17026 */\n add\n /* \"#utility.yul\":16988:17040 */\n tag_153\n jump\t// in\n tag_355:\n /* \"#utility.yul\":17065:17094 */\n tag_356\n /* \"#utility.yul\":17087:17093 */\n dup2\n /* \"#utility.yul\":17065:17094 */\n tag_109\n jump\t// in\n tag_356:\n /* \"#utility.yul\":17060:17063 */\n dup5\n /* \"#utility.yul\":17056:17095 */\n add\n /* \"#utility.yul\":17049:17095 */\n swap2\n pop\n /* \"#utility.yul\":16841:17101 */\n pop\n /* \"#utility.yul\":16761:17101 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17107:17299 */\n tag_155:\n /* \"#utility.yul\":17194:17204 */\n 0x00\n /* \"#utility.yul\":17229:17293 */\n tag_358\n /* \"#utility.yul\":17289:17292 */\n dup4\n /* \"#utility.yul\":17281:17287 */\n dup4\n /* \"#utility.yul\":17229:17293 */\n tag_154\n jump\t// in\n tag_358:\n /* \"#utility.yul\":17215:17293 */\n swap1\n pop\n /* \"#utility.yul\":17107:17299 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17305:17427 */\n tag_156:\n /* \"#utility.yul\":17384:17388 */\n 0x00\n /* \"#utility.yul\":17416:17420 */\n 0x20\n /* \"#utility.yul\":17411:17414 */\n dup3\n /* \"#utility.yul\":17407:17421 */\n add\n /* \"#utility.yul\":17399:17421 */\n swap1\n pop\n /* \"#utility.yul\":17305:17427 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":17459:18422 */\n tag_157:\n /* \"#utility.yul\":17586:17589 */\n 0x00\n /* \"#utility.yul\":17615:17678 */\n tag_361\n /* \"#utility.yul\":17672:17677 */\n dup3\n /* \"#utility.yul\":17615:17678 */\n tag_148\n jump\t// in\n tag_361:\n /* \"#utility.yul\":17694:17779 */\n tag_362\n /* \"#utility.yul\":17772:17778 */\n dup2\n /* \"#utility.yul\":17767:17770 */\n dup6\n /* \"#utility.yul\":17694:17779 */\n tag_149\n jump\t// in\n tag_362:\n /* \"#utility.yul\":17687:17779 */\n swap4\n pop\n /* \"#utility.yul\":17805:17808 */\n dup4\n /* \"#utility.yul\":17850:17854 */\n 0x20\n /* \"#utility.yul\":17842:17848 */\n dup3\n /* \"#utility.yul\":17838:17855 */\n mul\n /* \"#utility.yul\":17833:17836 */\n dup6\n /* \"#utility.yul\":17829:17856 */\n add\n /* \"#utility.yul\":17880:17945 */\n tag_363\n /* \"#utility.yul\":17939:17944 */\n dup6\n /* \"#utility.yul\":17880:17945 */\n tag_150\n jump\t// in\n tag_363:\n /* \"#utility.yul\":17968:17975 */\n dup1\n /* \"#utility.yul\":17999:18000 */\n 0x00\n /* \"#utility.yul\":17984:18377 */\n tag_364:\n /* \"#utility.yul\":18009:18015 */\n dup6\n /* \"#utility.yul\":18006:18007 */\n dup2\n /* \"#utility.yul\":18003:18016 */\n lt\n /* \"#utility.yul\":17984:18377 */\n iszero\n tag_366\n jumpi\n /* \"#utility.yul\":18080:18089 */\n dup5\n /* \"#utility.yul\":18074:18078 */\n dup5\n /* \"#utility.yul\":18070:18090 */\n sub\n /* \"#utility.yul\":18065:18068 */\n dup10\n /* \"#utility.yul\":18058:18091 */\n mstore\n /* \"#utility.yul\":18131:18137 */\n dup2\n /* \"#utility.yul\":18125:18138 */\n mload\n /* \"#utility.yul\":18159:18241 */\n tag_367\n /* \"#utility.yul\":18236:18240 */\n dup6\n /* \"#utility.yul\":18221:18234 */\n dup3\n /* \"#utility.yul\":18159:18241 */\n tag_155\n jump\t// in\n tag_367:\n /* \"#utility.yul\":18151:18241 */\n swap5\n pop\n /* \"#utility.yul\":18264:18333 */\n tag_368\n /* \"#utility.yul\":18326:18332 */\n dup4\n /* \"#utility.yul\":18264:18333 */\n tag_156\n jump\t// in\n tag_368:\n /* \"#utility.yul\":18254:18333 */\n swap3\n pop\n /* \"#utility.yul\":18362:18366 */\n 0x20\n /* \"#utility.yul\":18357:18360 */\n dup11\n /* \"#utility.yul\":18353:18367 */\n add\n /* \"#utility.yul\":18346:18367 */\n swap10\n pop\n /* \"#utility.yul\":18044:18377 */\n pop\n /* \"#utility.yul\":18031:18032 */\n 0x01\n /* \"#utility.yul\":18028:18029 */\n dup2\n /* \"#utility.yul\":18024:18033 */\n add\n /* \"#utility.yul\":18019:18033 */\n swap1\n pop\n /* \"#utility.yul\":17984:18377 */\n jump(tag_364)\n tag_366:\n /* \"#utility.yul\":17988:18002 */\n pop\n /* \"#utility.yul\":18393:18397 */\n dup3\n /* \"#utility.yul\":18386:18397 */\n swap8\n pop\n /* \"#utility.yul\":18413:18416 */\n dup8\n /* \"#utility.yul\":18406:18416 */\n swap6\n pop\n /* \"#utility.yul\":17591:18422 */\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":17459:18422 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18508:19175 */\n tag_158:\n /* \"#utility.yul\":18637:18640 */\n 0x00\n /* \"#utility.yul\":18673:18677 */\n 0x40\n /* \"#utility.yul\":18668:18671 */\n dup4\n /* \"#utility.yul\":18664:18678 */\n add\n /* \"#utility.yul\":18763:18767 */\n 0x00\n /* \"#utility.yul\":18756:18761 */\n dup4\n /* \"#utility.yul\":18752:18768 */\n add\n /* \"#utility.yul\":18746:18769 */\n mload\n /* \"#utility.yul\":18782:18841 */\n tag_370\n /* \"#utility.yul\":18835:18839 */\n 0x00\n /* \"#utility.yul\":18830:18833 */\n dup7\n /* \"#utility.yul\":18826:18840 */\n add\n /* \"#utility.yul\":18812:18824 */\n dup3\n /* \"#utility.yul\":18782:18841 */\n tag_147\n jump\t// in\n tag_370:\n /* \"#utility.yul\":18688:18851 */\n pop\n /* \"#utility.yul\":18937:18941 */\n 0x20\n /* \"#utility.yul\":18930:18935 */\n dup4\n /* \"#utility.yul\":18926:18942 */\n add\n /* \"#utility.yul\":18920:18943 */\n mload\n /* \"#utility.yul\":18990:18993 */\n dup5\n /* \"#utility.yul\":18984:18988 */\n dup3\n /* \"#utility.yul\":18980:18994 */\n sub\n /* \"#utility.yul\":18973:18977 */\n 0x20\n /* \"#utility.yul\":18968:18971 */\n dup7\n /* \"#utility.yul\":18964:18978 */\n add\n /* \"#utility.yul\":18957:18995 */\n mstore\n /* \"#utility.yul\":19016:19137 */\n tag_371\n /* \"#utility.yul\":19132:19136 */\n dup3\n /* \"#utility.yul\":19118:19130 */\n dup3\n /* \"#utility.yul\":19016:19137 */\n tag_157\n jump\t// in\n tag_371:\n /* \"#utility.yul\":19008:19137 */\n swap2\n pop\n /* \"#utility.yul\":18861:19148 */\n pop\n /* \"#utility.yul\":19165:19169 */\n dup1\n /* \"#utility.yul\":19158:19169 */\n swap2\n pop\n /* \"#utility.yul\":18642:19175 */\n pop\n /* \"#utility.yul\":18508:19175 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19181:19349 */\n tag_159:\n /* \"#utility.yul\":19264:19275 */\n 0x00\n /* \"#utility.yul\":19298:19304 */\n dup3\n /* \"#utility.yul\":19293:19296 */\n dup3\n /* \"#utility.yul\":19286:19305 */\n mstore\n /* \"#utility.yul\":19338:19342 */\n 0x20\n /* \"#utility.yul\":19333:19336 */\n dup3\n /* \"#utility.yul\":19329:19343 */\n add\n /* \"#utility.yul\":19314:19343 */\n swap1\n pop\n /* \"#utility.yul\":19181:19349 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19355:19715 */\n tag_160:\n /* \"#utility.yul\":19441:19444 */\n 0x00\n /* \"#utility.yul\":19469:19507 */\n tag_374\n /* \"#utility.yul\":19501:19506 */\n dup3\n /* \"#utility.yul\":19469:19507 */\n tag_151\n jump\t// in\n tag_374:\n /* \"#utility.yul\":19523:19593 */\n tag_375\n /* \"#utility.yul\":19586:19592 */\n dup2\n /* \"#utility.yul\":19581:19584 */\n dup6\n /* \"#utility.yul\":19523:19593 */\n tag_159\n jump\t// in\n tag_375:\n /* \"#utility.yul\":19516:19593 */\n swap4\n pop\n /* \"#utility.yul\":19602:19654 */\n tag_376\n /* \"#utility.yul\":19647:19653 */\n dup2\n /* \"#utility.yul\":19642:19645 */\n dup6\n /* \"#utility.yul\":19635:19639 */\n 0x20\n /* \"#utility.yul\":19628:19633 */\n dup7\n /* \"#utility.yul\":19624:19640 */\n add\n /* \"#utility.yul\":19602:19654 */\n tag_153\n jump\t// in\n tag_376:\n /* \"#utility.yul\":19679:19708 */\n tag_377\n /* \"#utility.yul\":19701:19707 */\n dup2\n /* \"#utility.yul\":19679:19708 */\n tag_109\n jump\t// in\n tag_377:\n /* \"#utility.yul\":19674:19677 */\n dup5\n /* \"#utility.yul\":19670:19709 */\n add\n /* \"#utility.yul\":19663:19709 */\n swap2\n pop\n /* \"#utility.yul\":19445:19715 */\n pop\n /* \"#utility.yul\":19355:19715 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19721:20528 */\n tag_57:\n /* \"#utility.yul\":19974:19978 */\n 0x00\n /* \"#utility.yul\":20012:20015 */\n 0x80\n /* \"#utility.yul\":20001:20010 */\n dup3\n /* \"#utility.yul\":19997:20016 */\n add\n /* \"#utility.yul\":19989:20016 */\n swap1\n pop\n /* \"#utility.yul\":20062:20071 */\n dup2\n /* \"#utility.yul\":20056:20060 */\n dup2\n /* \"#utility.yul\":20052:20072 */\n sub\n /* \"#utility.yul\":20048:20049 */\n 0x00\n /* \"#utility.yul\":20037:20046 */\n dup4\n /* \"#utility.yul\":20033:20050 */\n add\n /* \"#utility.yul\":20026:20073 */\n mstore\n /* \"#utility.yul\":20090:20208 */\n tag_379\n /* \"#utility.yul\":20203:20207 */\n dup2\n /* \"#utility.yul\":20194:20200 */\n dup8\n /* \"#utility.yul\":20090:20208 */\n tag_158\n jump\t// in\n tag_379:\n /* \"#utility.yul\":20082:20208 */\n swap1\n pop\n /* \"#utility.yul\":20218:20290 */\n tag_380\n /* \"#utility.yul\":20286:20288 */\n 0x20\n /* \"#utility.yul\":20275:20284 */\n dup4\n /* \"#utility.yul\":20271:20289 */\n add\n /* \"#utility.yul\":20262:20268 */\n dup7\n /* \"#utility.yul\":20218:20290 */\n tag_143\n jump\t// in\n tag_380:\n /* \"#utility.yul\":20300:20370 */\n tag_381\n /* \"#utility.yul\":20366:20368 */\n 0x40\n /* \"#utility.yul\":20355:20364 */\n dup4\n /* \"#utility.yul\":20351:20369 */\n add\n /* \"#utility.yul\":20342:20348 */\n dup6\n /* \"#utility.yul\":20300:20370 */\n tag_146\n jump\t// in\n tag_381:\n /* \"#utility.yul\":20417:20426 */\n dup2\n /* \"#utility.yul\":20411:20415 */\n dup2\n /* \"#utility.yul\":20407:20427 */\n sub\n /* \"#utility.yul\":20402:20404 */\n 0x60\n /* \"#utility.yul\":20391:20400 */\n dup4\n /* \"#utility.yul\":20387:20405 */\n add\n /* \"#utility.yul\":20380:20428 */\n mstore\n /* \"#utility.yul\":20445:20521 */\n tag_382\n /* \"#utility.yul\":20516:20520 */\n dup2\n /* \"#utility.yul\":20507:20513 */\n dup5\n /* \"#utility.yul\":20445:20521 */\n tag_160\n jump\t// in\n tag_382:\n /* \"#utility.yul\":20437:20521 */\n swap1\n pop\n /* \"#utility.yul\":19721:20528 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20534:21512 */\n tag_63:\n /* \"#utility.yul\":20847:20851 */\n 0x00\n /* \"#utility.yul\":20885:20888 */\n 0x80\n /* \"#utility.yul\":20874:20883 */\n dup3\n /* \"#utility.yul\":20870:20889 */\n add\n /* \"#utility.yul\":20862:20889 */\n swap1\n pop\n /* \"#utility.yul\":20935:20944 */\n dup2\n /* \"#utility.yul\":20929:20933 */\n dup2\n /* \"#utility.yul\":20925:20945 */\n sub\n /* \"#utility.yul\":20921:20922 */\n 0x00\n /* \"#utility.yul\":20910:20919 */\n dup4\n /* \"#utility.yul\":20906:20923 */\n add\n /* \"#utility.yul\":20899:20946 */\n mstore\n /* \"#utility.yul\":20963:21081 */\n tag_384\n /* \"#utility.yul\":21076:21080 */\n dup2\n /* \"#utility.yul\":21067:21073 */\n dup8\n /* \"#utility.yul\":20963:21081 */\n tag_158\n jump\t// in\n tag_384:\n /* \"#utility.yul\":20955:21081 */\n swap1\n pop\n /* \"#utility.yul\":21128:21137 */\n dup2\n /* \"#utility.yul\":21122:21126 */\n dup2\n /* \"#utility.yul\":21118:21138 */\n sub\n /* \"#utility.yul\":21113:21115 */\n 0x20\n /* \"#utility.yul\":21102:21111 */\n dup4\n /* \"#utility.yul\":21098:21116 */\n add\n /* \"#utility.yul\":21091:21139 */\n mstore\n /* \"#utility.yul\":21156:21274 */\n tag_385\n /* \"#utility.yul\":21269:21273 */\n dup2\n /* \"#utility.yul\":21260:21266 */\n dup7\n /* \"#utility.yul\":21156:21274 */\n tag_158\n jump\t// in\n tag_385:\n /* \"#utility.yul\":21148:21274 */\n swap1\n pop\n /* \"#utility.yul\":21284:21354 */\n tag_386\n /* \"#utility.yul\":21350:21352 */\n 0x40\n /* \"#utility.yul\":21339:21348 */\n dup4\n /* \"#utility.yul\":21335:21353 */\n add\n /* \"#utility.yul\":21326:21332 */\n dup6\n /* \"#utility.yul\":21284:21354 */\n tag_146\n jump\t// in\n tag_386:\n /* \"#utility.yul\":21401:21410 */\n dup2\n /* \"#utility.yul\":21395:21399 */\n dup2\n /* \"#utility.yul\":21391:21411 */\n sub\n /* \"#utility.yul\":21386:21388 */\n 0x60\n /* \"#utility.yul\":21375:21384 */\n dup4\n /* \"#utility.yul\":21371:21389 */\n add\n /* \"#utility.yul\":21364:21412 */\n mstore\n /* \"#utility.yul\":21429:21505 */\n tag_387\n /* \"#utility.yul\":21500:21504 */\n dup2\n /* \"#utility.yul\":21491:21497 */\n dup5\n /* \"#utility.yul\":21429:21505 */\n tag_160\n jump\t// in\n tag_387:\n /* \"#utility.yul\":21421:21505 */\n swap1\n pop\n /* \"#utility.yul\":20534:21512 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21518:21630 */\n tag_161:\n /* \"#utility.yul\":21601:21623 */\n tag_389\n /* \"#utility.yul\":21617:21622 */\n dup2\n /* \"#utility.yul\":21601:21623 */\n tag_114\n jump\t// in\n tag_389:\n /* \"#utility.yul\":21596:21599 */\n dup3\n /* \"#utility.yul\":21589:21624 */\n mstore\n /* \"#utility.yul\":21518:21630 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21636:21751 */\n tag_162:\n /* \"#utility.yul\":21721:21744 */\n tag_391\n /* \"#utility.yul\":21738:21743 */\n dup2\n /* \"#utility.yul\":21721:21744 */\n tag_135\n jump\t// in\n tag_391:\n /* \"#utility.yul\":21716:21719 */\n dup3\n /* \"#utility.yul\":21709:21745 */\n mstore\n /* \"#utility.yul\":21636:21751 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21757:22492 */\n tag_69:\n /* \"#utility.yul\":21972:21976 */\n 0x00\n /* \"#utility.yul\":22010:22013 */\n 0xa0\n /* \"#utility.yul\":21999:22008 */\n dup3\n /* \"#utility.yul\":21995:22014 */\n add\n /* \"#utility.yul\":21987:22014 */\n swap1\n pop\n /* \"#utility.yul\":22024:22091 */\n tag_393\n /* \"#utility.yul\":22088:22089 */\n 0x00\n /* \"#utility.yul\":22077:22086 */\n dup4\n /* \"#utility.yul\":22073:22090 */\n add\n /* \"#utility.yul\":22064:22070 */\n dup9\n /* \"#utility.yul\":22024:22091 */\n tag_161\n jump\t// in\n tag_393:\n /* \"#utility.yul\":22101:22171 */\n tag_394\n /* \"#utility.yul\":22167:22169 */\n 0x20\n /* \"#utility.yul\":22156:22165 */\n dup4\n /* \"#utility.yul\":22152:22170 */\n add\n /* \"#utility.yul\":22143:22149 */\n dup8\n /* \"#utility.yul\":22101:22171 */\n tag_162\n jump\t// in\n tag_394:\n /* \"#utility.yul\":22181:22253 */\n tag_395\n /* \"#utility.yul\":22249:22251 */\n 0x40\n /* \"#utility.yul\":22238:22247 */\n dup4\n /* \"#utility.yul\":22234:22252 */\n add\n /* \"#utility.yul\":22225:22231 */\n dup7\n /* \"#utility.yul\":22181:22253 */\n tag_143\n jump\t// in\n tag_395:\n /* \"#utility.yul\":22263:22333 */\n tag_396\n /* \"#utility.yul\":22329:22331 */\n 0x60\n /* \"#utility.yul\":22318:22327 */\n dup4\n /* \"#utility.yul\":22314:22332 */\n add\n /* \"#utility.yul\":22305:22311 */\n dup6\n /* \"#utility.yul\":22263:22333 */\n tag_146\n jump\t// in\n tag_396:\n /* \"#utility.yul\":22381:22390 */\n dup2\n /* \"#utility.yul\":22375:22379 */\n dup2\n /* \"#utility.yul\":22371:22391 */\n sub\n /* \"#utility.yul\":22365:22368 */\n 0x80\n /* \"#utility.yul\":22354:22363 */\n dup4\n /* \"#utility.yul\":22350:22369 */\n add\n /* \"#utility.yul\":22343:22392 */\n mstore\n /* \"#utility.yul\":22409:22485 */\n tag_397\n /* \"#utility.yul\":22480:22484 */\n dup2\n /* \"#utility.yul\":22471:22477 */\n dup5\n /* \"#utility.yul\":22409:22485 */\n tag_160\n jump\t// in\n tag_397:\n /* \"#utility.yul\":22401:22485 */\n swap1\n pop\n /* \"#utility.yul\":21757:22492 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":22498:22716 */\n tag_75:\n /* \"#utility.yul\":22589:22593 */\n 0x00\n /* \"#utility.yul\":22627:22629 */\n 0x20\n /* \"#utility.yul\":22616:22625 */\n dup3\n /* \"#utility.yul\":22612:22630 */\n add\n /* \"#utility.yul\":22604:22630 */\n swap1\n pop\n /* \"#utility.yul\":22640:22709 */\n tag_399\n /* \"#utility.yul\":22706:22707 */\n 0x00\n /* \"#utility.yul\":22695:22704 */\n dup4\n /* \"#utility.yul\":22691:22708 */\n add\n /* \"#utility.yul\":22682:22688 */\n dup5\n /* \"#utility.yul\":22640:22709 */\n tag_162\n jump\t// in\n tag_399:\n /* \"#utility.yul\":22498:22716 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":22722:22865 */\n tag_163:\n /* \"#utility.yul\":22779:22784 */\n 0x00\n /* \"#utility.yul\":22810:22816 */\n dup2\n /* \"#utility.yul\":22804:22817 */\n mload\n /* \"#utility.yul\":22795:22817 */\n swap1\n pop\n /* \"#utility.yul\":22826:22859 */\n tag_401\n /* \"#utility.yul\":22853:22858 */\n dup2\n /* \"#utility.yul\":22826:22859 */\n tag_130\n jump\t// in\n tag_401:\n /* \"#utility.yul\":22722:22865 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":22871:23222 */\n tag_79:\n /* \"#utility.yul\":22941:22947 */\n 0x00\n /* \"#utility.yul\":22990:22992 */\n 0x20\n /* \"#utility.yul\":22978:22987 */\n dup3\n /* \"#utility.yul\":22969:22976 */\n dup5\n /* \"#utility.yul\":22965:22988 */\n sub\n /* \"#utility.yul\":22961:22993 */\n slt\n /* \"#utility.yul\":22958:23077 */\n iszero\n tag_403\n jumpi\n /* \"#utility.yul\":22996:23075 */\n tag_404\n tag_106\n jump\t// in\n tag_404:\n /* \"#utility.yul\":22958:23077 */\n tag_403:\n /* \"#utility.yul\":23116:23117 */\n 0x00\n /* \"#utility.yul\":23141:23205 */\n tag_405\n /* \"#utility.yul\":23197:23204 */\n dup5\n /* \"#utility.yul\":23188:23194 */\n dup3\n /* \"#utility.yul\":23177:23186 */\n dup6\n /* \"#utility.yul\":23173:23195 */\n add\n /* \"#utility.yul\":23141:23205 */\n tag_163\n jump\t// in\n tag_405:\n /* \"#utility.yul\":23131:23205 */\n swap2\n pop\n /* \"#utility.yul\":23087:23215 */\n pop\n /* \"#utility.yul\":22871:23222 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":23228:23621 */\n tag_82:\n /* \"#utility.yul\":23381:23385 */\n 0x00\n /* \"#utility.yul\":23419:23421 */\n 0x20\n /* \"#utility.yul\":23408:23417 */\n dup3\n /* \"#utility.yul\":23404:23422 */\n add\n /* \"#utility.yul\":23396:23422 */\n swap1\n pop\n /* \"#utility.yul\":23468:23477 */\n dup2\n /* \"#utility.yul\":23462:23466 */\n dup2\n /* \"#utility.yul\":23458:23478 */\n sub\n /* \"#utility.yul\":23454:23455 */\n 0x00\n /* \"#utility.yul\":23443:23452 */\n dup4\n /* \"#utility.yul\":23439:23456 */\n add\n /* \"#utility.yul\":23432:23479 */\n mstore\n /* \"#utility.yul\":23496:23614 */\n tag_407\n /* \"#utility.yul\":23609:23613 */\n dup2\n /* \"#utility.yul\":23600:23606 */\n dup5\n /* \"#utility.yul\":23496:23614 */\n tag_158\n jump\t// in\n tag_407:\n /* \"#utility.yul\":23488:23614 */\n swap1\n pop\n /* \"#utility.yul\":23228:23621 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":23627:23749 */\n tag_164:\n /* \"#utility.yul\":23700:23724 */\n tag_409\n /* \"#utility.yul\":23718:23723 */\n dup2\n /* \"#utility.yul\":23700:23724 */\n tag_144\n jump\t// in\n tag_409:\n /* \"#utility.yul\":23693:23698 */\n dup2\n /* \"#utility.yul\":23690:23725 */\n eq\n /* \"#utility.yul\":23680:23743 */\n tag_410\n jumpi\n /* \"#utility.yul\":23739:23740 */\n 0x00\n /* \"#utility.yul\":23736:23737 */\n dup1\n /* \"#utility.yul\":23729:23741 */\n revert\n /* \"#utility.yul\":23680:23743 */\n tag_410:\n /* \"#utility.yul\":23627:23749 */\n pop\n jump\t// out\n /* \"#utility.yul\":23755:23898 */\n tag_165:\n /* \"#utility.yul\":23812:23817 */\n 0x00\n /* \"#utility.yul\":23843:23849 */\n dup2\n /* \"#utility.yul\":23837:23850 */\n mload\n /* \"#utility.yul\":23828:23850 */\n swap1\n pop\n /* \"#utility.yul\":23859:23892 */\n tag_412\n /* \"#utility.yul\":23886:23891 */\n dup2\n /* \"#utility.yul\":23859:23892 */\n tag_164\n jump\t// in\n tag_412:\n /* \"#utility.yul\":23755:23898 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":23904:24255 */\n tag_86:\n /* \"#utility.yul\":23974:23980 */\n 0x00\n /* \"#utility.yul\":24023:24025 */\n 0x20\n /* \"#utility.yul\":24011:24020 */\n dup3\n /* \"#utility.yul\":24002:24009 */\n dup5\n /* \"#utility.yul\":23998:24021 */\n sub\n /* \"#utility.yul\":23994:24026 */\n slt\n /* \"#utility.yul\":23991:24110 */\n iszero\n tag_414\n jumpi\n /* \"#utility.yul\":24029:24108 */\n tag_415\n tag_106\n jump\t// in\n tag_415:\n /* \"#utility.yul\":23991:24110 */\n tag_414:\n /* \"#utility.yul\":24149:24150 */\n 0x00\n /* \"#utility.yul\":24174:24238 */\n tag_416\n /* \"#utility.yul\":24230:24237 */\n dup5\n /* \"#utility.yul\":24221:24227 */\n dup3\n /* \"#utility.yul\":24210:24219 */\n dup6\n /* \"#utility.yul\":24206:24228 */\n add\n /* \"#utility.yul\":24174:24238 */\n tag_165\n jump\t// in\n tag_416:\n /* \"#utility.yul\":24164:24238 */\n swap2\n pop\n /* \"#utility.yul\":24120:24248 */\n pop\n /* \"#utility.yul\":23904:24255 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":24261:25167 */\n tag_89:\n /* \"#utility.yul\":24536:24540 */\n 0x00\n /* \"#utility.yul\":24574:24577 */\n 0xa0\n /* \"#utility.yul\":24563:24572 */\n dup3\n /* \"#utility.yul\":24559:24578 */\n add\n /* \"#utility.yul\":24551:24578 */\n swap1\n pop\n /* \"#utility.yul\":24588:24655 */\n tag_418\n /* \"#utility.yul\":24652:24653 */\n 0x00\n /* \"#utility.yul\":24641:24650 */\n dup4\n /* \"#utility.yul\":24637:24654 */\n add\n /* \"#utility.yul\":24628:24634 */\n dup9\n /* \"#utility.yul\":24588:24655 */\n tag_161\n jump\t// in\n tag_418:\n /* \"#utility.yul\":24665:24735 */\n tag_419\n /* \"#utility.yul\":24731:24733 */\n 0x20\n /* \"#utility.yul\":24720:24729 */\n dup4\n /* \"#utility.yul\":24716:24734 */\n add\n /* \"#utility.yul\":24707:24713 */\n dup8\n /* \"#utility.yul\":24665:24735 */\n tag_162\n jump\t// in\n tag_419:\n /* \"#utility.yul\":24782:24791 */\n dup2\n /* \"#utility.yul\":24776:24780 */\n dup2\n /* \"#utility.yul\":24772:24792 */\n sub\n /* \"#utility.yul\":24767:24769 */\n 0x40\n /* \"#utility.yul\":24756:24765 */\n dup4\n /* \"#utility.yul\":24752:24770 */\n add\n /* \"#utility.yul\":24745:24793 */\n mstore\n /* \"#utility.yul\":24810:24928 */\n tag_420\n /* \"#utility.yul\":24923:24927 */\n dup2\n /* \"#utility.yul\":24914:24920 */\n dup7\n /* \"#utility.yul\":24810:24928 */\n tag_158\n jump\t// in\n tag_420:\n /* \"#utility.yul\":24802:24928 */\n swap1\n pop\n /* \"#utility.yul\":24938:25008 */\n tag_421\n /* \"#utility.yul\":25004:25006 */\n 0x60\n /* \"#utility.yul\":24993:25002 */\n dup4\n /* \"#utility.yul\":24989:25007 */\n add\n /* \"#utility.yul\":24980:24986 */\n dup6\n /* \"#utility.yul\":24938:25008 */\n tag_146\n jump\t// in\n tag_421:\n /* \"#utility.yul\":25056:25065 */\n dup2\n /* \"#utility.yul\":25050:25054 */\n dup2\n /* \"#utility.yul\":25046:25066 */\n sub\n /* \"#utility.yul\":25040:25043 */\n 0x80\n /* \"#utility.yul\":25029:25038 */\n dup4\n /* \"#utility.yul\":25025:25044 */\n add\n /* \"#utility.yul\":25018:25067 */\n mstore\n /* \"#utility.yul\":25084:25160 */\n tag_422\n /* \"#utility.yul\":25155:25159 */\n dup2\n /* \"#utility.yul\":25146:25152 */\n dup5\n /* \"#utility.yul\":25084:25160 */\n tag_160\n jump\t// in\n tag_422:\n /* \"#utility.yul\":25076:25160 */\n swap1\n pop\n /* \"#utility.yul\":24261:25167 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25173:25314 */\n tag_166:\n /* \"#utility.yul\":25229:25234 */\n 0x00\n /* \"#utility.yul\":25260:25266 */\n dup2\n /* \"#utility.yul\":25254:25267 */\n mload\n /* \"#utility.yul\":25245:25267 */\n swap1\n pop\n /* \"#utility.yul\":25276:25308 */\n tag_424\n /* \"#utility.yul\":25302:25307 */\n dup2\n /* \"#utility.yul\":25276:25308 */\n tag_133\n jump\t// in\n tag_424:\n /* \"#utility.yul\":25173:25314 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25320:25977 */\n tag_98:\n /* \"#utility.yul\":25405:25411 */\n 0x00\n /* \"#utility.yul\":25413:25419 */\n dup1\n /* \"#utility.yul\":25421:25427 */\n 0x00\n /* \"#utility.yul\":25470:25472 */\n 0x60\n /* \"#utility.yul\":25458:25467 */\n dup5\n /* \"#utility.yul\":25449:25456 */\n dup7\n /* \"#utility.yul\":25445:25468 */\n sub\n /* \"#utility.yul\":25441:25473 */\n slt\n /* \"#utility.yul\":25438:25557 */\n iszero\n tag_426\n jumpi\n /* \"#utility.yul\":25476:25555 */\n tag_427\n tag_106\n jump\t// in\n tag_427:\n /* \"#utility.yul\":25438:25557 */\n tag_426:\n /* \"#utility.yul\":25596:25597 */\n 0x00\n /* \"#utility.yul\":25621:25684 */\n tag_428\n /* \"#utility.yul\":25676:25683 */\n dup7\n /* \"#utility.yul\":25667:25673 */\n dup3\n /* \"#utility.yul\":25656:25665 */\n dup8\n /* \"#utility.yul\":25652:25674 */\n add\n /* \"#utility.yul\":25621:25684 */\n tag_166\n jump\t// in\n tag_428:\n /* \"#utility.yul\":25611:25684 */\n swap4\n pop\n /* \"#utility.yul\":25567:25694 */\n pop\n /* \"#utility.yul\":25733:25735 */\n 0x20\n /* \"#utility.yul\":25759:25822 */\n tag_429\n /* \"#utility.yul\":25814:25821 */\n dup7\n /* \"#utility.yul\":25805:25811 */\n dup3\n /* \"#utility.yul\":25794:25803 */\n dup8\n /* \"#utility.yul\":25790:25812 */\n add\n /* \"#utility.yul\":25759:25822 */\n tag_166\n jump\t// in\n tag_429:\n /* \"#utility.yul\":25749:25822 */\n swap3\n pop\n /* \"#utility.yul\":25704:25832 */\n pop\n /* \"#utility.yul\":25871:25873 */\n 0x40\n /* \"#utility.yul\":25897:25960 */\n tag_430\n /* \"#utility.yul\":25952:25959 */\n dup7\n /* \"#utility.yul\":25943:25949 */\n dup3\n /* \"#utility.yul\":25932:25941 */\n dup8\n /* \"#utility.yul\":25928:25950 */\n add\n /* \"#utility.yul\":25897:25960 */\n tag_166\n jump\t// in\n tag_430:\n /* \"#utility.yul\":25887:25960 */\n swap2\n pop\n /* \"#utility.yul\":25842:25970 */\n pop\n /* \"#utility.yul\":25320:25977 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n /* \"#utility.yul\":25983:26642 */\n tag_104:\n /* \"#utility.yul\":26069:26075 */\n 0x00\n /* \"#utility.yul\":26077:26083 */\n dup1\n /* \"#utility.yul\":26085:26091 */\n 0x00\n /* \"#utility.yul\":26134:26136 */\n 0x60\n /* \"#utility.yul\":26122:26131 */\n dup5\n /* \"#utility.yul\":26113:26120 */\n dup7\n /* \"#utility.yul\":26109:26132 */\n sub\n /* \"#utility.yul\":26105:26137 */\n slt\n /* \"#utility.yul\":26102:26221 */\n iszero\n tag_432\n jumpi\n /* \"#utility.yul\":26140:26219 */\n tag_433\n tag_106\n jump\t// in\n tag_433:\n /* \"#utility.yul\":26102:26221 */\n tag_432:\n /* \"#utility.yul\":26260:26261 */\n 0x00\n /* \"#utility.yul\":26285:26348 */\n tag_434\n /* \"#utility.yul\":26340:26347 */\n dup7\n /* \"#utility.yul\":26331:26337 */\n dup3\n /* \"#utility.yul\":26320:26329 */\n dup8\n /* \"#utility.yul\":26316:26338 */\n add\n /* \"#utility.yul\":26285:26348 */\n tag_166\n jump\t// in\n tag_434:\n /* \"#utility.yul\":26275:26348 */\n swap4\n pop\n /* \"#utility.yul\":26231:26358 */\n pop\n /* \"#utility.yul\":26397:26399 */\n 0x20\n /* \"#utility.yul\":26423:26487 */\n tag_435\n /* \"#utility.yul\":26479:26486 */\n dup7\n /* \"#utility.yul\":26470:26476 */\n dup3\n /* \"#utility.yul\":26459:26468 */\n dup8\n /* \"#utility.yul\":26455:26477 */\n add\n /* \"#utility.yul\":26423:26487 */\n tag_165\n jump\t// in\n tag_435:\n /* \"#utility.yul\":26413:26487 */\n swap3\n pop\n /* \"#utility.yul\":26368:26497 */\n pop\n /* \"#utility.yul\":26536:26538 */\n 0x40\n /* \"#utility.yul\":26562:26625 */\n tag_436\n /* \"#utility.yul\":26617:26624 */\n dup7\n /* \"#utility.yul\":26608:26614 */\n dup3\n /* \"#utility.yul\":26597:26606 */\n dup8\n /* \"#utility.yul\":26593:26615 */\n add\n /* \"#utility.yul\":26562:26625 */\n tag_166\n jump\t// in\n tag_436:\n /* \"#utility.yul\":26552:26625 */\n swap2\n pop\n /* \"#utility.yul\":26507:26635 */\n pop\n /* \"#utility.yul\":25983:26642 */\n swap3\n pop\n swap3\n pop\n swap3\n jump\t// out\n\n auxdata: 0xa2646970667358221220c04621bb052bcda255425291a4fe020cf0831dde7b2dca5e5954b77da1559d9864736f6c634300080b0033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "60806040526108066000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50610e49806100626000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063267d40621461005c57806361fc548f1461007857806371b0edfa146100965780639f89f03e146100c6578063f87f493f146100e2575b600080fd5b61007660048036038101906100719190610628565b610114565b005b6100806101ae565b60405161008d919061071e565b60405180910390f35b6100b060048036038101906100ab9190610739565b6101d2565b6040516100bd9190610775565b60405180910390f35b6100e060048036038101906100db91906108ec565b610276565b005b6100fc60048036038101906100f7919061099f565b610310565b60405161010b93929190610a10565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663267d406286868686866040518663ffffffff1660e01b8152600401610175959493929190610aed565b600060405180830381600087803b15801561018f57600080fd5b505af11580156101a3573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371b0edfa836040518263ffffffff1660e01b815260040161022e9190610b47565b602060405180830381865afa15801561024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026f9190610b77565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f89f03e86868686866040518663ffffffff1660e01b81526004016102d7959493929190610cfc565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87f493f856040518263ffffffff1660e01b815260040161036f9190610d5d565b606060405180830381865afa15801561038c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b09190610dc0565b9250925092509193909250565b6000604051905090565b600080fd5b600080fd5b600060ff82169050919050565b6103e7816103d1565b81146103f257600080fd5b50565b600081359050610404816103de565b92915050565b600061ffff82169050919050565b6104218161040a565b811461042c57600080fd5b50565b60008135905061043e81610418565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061046f82610444565b9050919050565b61047f81610464565b811461048a57600080fd5b50565b60008135905061049c81610476565b92915050565b600067ffffffffffffffff82169050919050565b6104bf816104a2565b81146104ca57600080fd5b50565b6000813590506104dc816104b6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610535826104ec565b810181811067ffffffffffffffff82111715610554576105536104fd565b5b80604052505050565b60006105676103bd565b9050610573828261052c565b919050565b600067ffffffffffffffff821115610593576105926104fd565b5b61059c826104ec565b9050602081019050919050565b82818337600083830152505050565b60006105cb6105c684610578565b61055d565b9050828152602081018484840111156105e7576105e66104e7565b5b6105f28482856105a9565b509392505050565b600082601f83011261060f5761060e6104e2565b5b813561061f8482602086016105b8565b91505092915050565b600080600080600060a08688031215610644576106436103c7565b5b6000610652888289016103f5565b95505060206106638882890161042f565b94505060406106748882890161048d565b9350506060610685888289016104cd565b925050608086013567ffffffffffffffff8111156106a6576106a56103cc565b5b6106b2888289016105fa565b9150509295509295909350565b6000819050919050565b60006106e46106df6106da84610444565b6106bf565b610444565b9050919050565b60006106f6826106c9565b9050919050565b6000610708826106eb565b9050919050565b610718816106fd565b82525050565b6000602082019050610733600083018461070f565b92915050565b60006020828403121561074f5761074e6103c7565b5b600061075d8482850161042f565b91505092915050565b61076f81610464565b82525050565b600060208201905061078a6000830184610766565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff8211156107b5576107b46104fd565b5b602082029050602081019050919050565b600080fd5b60006107de6107d98461079a565b61055d565b90508083825260208201905060208402830185811115610801576108006107c6565b5b835b8181101561084857803567ffffffffffffffff811115610826576108256104e2565b5b80860161083389826105fa565b85526020850194505050602081019050610803565b5050509392505050565b600082601f830112610867576108666104e2565b5b81356108778482602086016107cb565b91505092915050565b60006040828403121561089657610895610790565b5b6108a0604061055d565b905060006108b0848285016103f5565b600083015250602082013567ffffffffffffffff8111156108d4576108d3610795565b5b6108e084828501610852565b60208301525092915050565b600080600080600060a08688031215610908576109076103c7565b5b6000610916888289016103f5565b95505060206109278882890161042f565b945050604086013567ffffffffffffffff811115610948576109476103cc565b5b61095488828901610880565b9350506060610965888289016104cd565b925050608086013567ffffffffffffffff811115610986576109856103cc565b5b610992888289016105fa565b9150509295509295909350565b6000602082840312156109b5576109b46103c7565b5b600082013567ffffffffffffffff8111156109d3576109d26103cc565b5b6109df84828501610880565b91505092915050565b6109f1816104a2565b82525050565b6000819050919050565b610a0a816109f7565b82525050565b6000606082019050610a2560008301866109e8565b610a326020830185610a01565b610a3f60408301846109e8565b949350505050565b610a50816103d1565b82525050565b610a5f8161040a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a9f578082015181840152602081019050610a84565b83811115610aae576000848401525b50505050565b6000610abf82610a65565b610ac98185610a70565b9350610ad9818560208601610a81565b610ae2816104ec565b840191505092915050565b600060a082019050610b026000830188610a47565b610b0f6020830187610a56565b610b1c6040830186610766565b610b2960608301856109e8565b8181036080830152610b3b8184610ab4565b90509695505050505050565b6000602082019050610b5c6000830184610a56565b92915050565b600081519050610b7181610476565b92915050565b600060208284031215610b8d57610b8c6103c7565b5b6000610b9b84828501610b62565b91505092915050565b610bad816103d1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000610bfb82610a65565b610c058185610bdf565b9350610c15818560208601610a81565b610c1e816104ec565b840191505092915050565b6000610c358383610bf0565b905092915050565b6000602082019050919050565b6000610c5582610bb3565b610c5f8185610bbe565b935083602082028501610c7185610bcf565b8060005b85811015610cad5784840389528151610c8e8582610c29565b9450610c9983610c3d565b925060208a01995050600181019050610c75565b50829750879550505050505092915050565b6000604083016000830151610cd76000860182610ba4565b5060208301518482036020860152610cef8282610c4a565b9150508091505092915050565b600060a082019050610d116000830188610a47565b610d1e6020830187610a56565b8181036040830152610d308186610cbf565b9050610d3f60608301856109e8565b8181036080830152610d518184610ab4565b90509695505050505050565b60006020820190508181036000830152610d778184610cbf565b905092915050565b600081519050610d8e816104b6565b92915050565b610d9d816109f7565b8114610da857600080fd5b50565b600081519050610dba81610d94565b92915050565b600080600060608486031215610dd957610dd86103c7565b5b6000610de786828701610d7f565b9350506020610df886828701610dab565b9250506040610e0986828701610d7f565b915050925092509256fea26469706673582212200c97281bd15caba3cc6efa4a076e6f49a63c3b3c013798a44e77679bfec3fec964736f6c634300080a0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x806 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE49 DUP1 PUSH2 0x62 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x267D4062 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x61FC548F EQ PUSH2 0x78 JUMPI DUP1 PUSH4 0x71B0EDFA EQ PUSH2 0x96 JUMPI DUP1 PUSH4 0x9F89F03E EQ PUSH2 0xC6 JUMPI DUP1 PUSH4 0xF87F493F EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x80 PUSH2 0x1AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8D SWAP2 SWAP1 PUSH2 0x71E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xAB SWAP2 SWAP1 PUSH2 0x739 JUMP JUMPDEST PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xDB SWAP2 SWAP1 PUSH2 0x8EC JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xFC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0x99F JUMP JUMPDEST PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x267D4062 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x175 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xAED JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x71B0EDFA DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP2 SWAP1 PUSH2 0xB47 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26F SWAP2 SWAP1 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9F89F03E DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF87F493F DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x36F SWAP2 SWAP1 PUSH2 0xD5D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B0 SWAP2 SWAP1 PUSH2 0xDC0 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3E7 DUP2 PUSH2 0x3D1 JUMP JUMPDEST DUP2 EQ PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x404 DUP2 PUSH2 0x3DE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x421 DUP2 PUSH2 0x40A JUMP JUMPDEST DUP2 EQ PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x43E DUP2 PUSH2 0x418 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46F DUP3 PUSH2 0x444 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x47F DUP2 PUSH2 0x464 JUMP JUMPDEST DUP2 EQ PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x49C DUP2 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4BF DUP2 PUSH2 0x4A2 JUMP JUMPDEST DUP2 EQ PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x4DC DUP2 PUSH2 0x4B6 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x535 DUP3 PUSH2 0x4EC JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x554 JUMPI PUSH2 0x553 PUSH2 0x4FD JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x567 PUSH2 0x3BD JUMP JUMPDEST SWAP1 POP PUSH2 0x573 DUP3 DUP3 PUSH2 0x52C JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x593 JUMPI PUSH2 0x592 PUSH2 0x4FD JUMP JUMPDEST JUMPDEST PUSH2 0x59C DUP3 PUSH2 0x4EC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5CB PUSH2 0x5C6 DUP5 PUSH2 0x578 JUMP JUMPDEST PUSH2 0x55D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x5E7 JUMPI PUSH2 0x5E6 PUSH2 0x4E7 JUMP JUMPDEST JUMPDEST PUSH2 0x5F2 DUP5 DUP3 DUP6 PUSH2 0x5A9 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x60F JUMPI PUSH2 0x60E PUSH2 0x4E2 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x61F DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x5B8 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x644 JUMPI PUSH2 0x643 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x652 DUP9 DUP3 DUP10 ADD PUSH2 0x3F5 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x663 DUP9 DUP3 DUP10 ADD PUSH2 0x42F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x674 DUP9 DUP3 DUP10 ADD PUSH2 0x48D JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x685 DUP9 DUP3 DUP10 ADD PUSH2 0x4CD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6A6 JUMPI PUSH2 0x6A5 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x6B2 DUP9 DUP3 DUP10 ADD PUSH2 0x5FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6E4 PUSH2 0x6DF PUSH2 0x6DA DUP5 PUSH2 0x444 JUMP JUMPDEST PUSH2 0x6BF JUMP JUMPDEST PUSH2 0x444 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6F6 DUP3 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x708 DUP3 PUSH2 0x6EB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x718 DUP2 PUSH2 0x6FD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x733 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x70F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x74F JUMPI PUSH2 0x74E PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x75D DUP5 DUP3 DUP6 ADD PUSH2 0x42F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x76F DUP2 PUSH2 0x464 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x78A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x766 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x7B5 JUMPI PUSH2 0x7B4 PUSH2 0x4FD JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7DE PUSH2 0x7D9 DUP5 PUSH2 0x79A JUMP JUMPDEST PUSH2 0x55D JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x801 JUMPI PUSH2 0x800 PUSH2 0x7C6 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x848 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x826 JUMPI PUSH2 0x825 PUSH2 0x4E2 JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x833 DUP10 DUP3 PUSH2 0x5FA JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x803 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x867 JUMPI PUSH2 0x866 PUSH2 0x4E2 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x877 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x7CB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x896 JUMPI PUSH2 0x895 PUSH2 0x790 JUMP JUMPDEST JUMPDEST PUSH2 0x8A0 PUSH1 0x40 PUSH2 0x55D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8B0 DUP5 DUP3 DUP6 ADD PUSH2 0x3F5 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8D4 JUMPI PUSH2 0x8D3 PUSH2 0x795 JUMP JUMPDEST JUMPDEST PUSH2 0x8E0 DUP5 DUP3 DUP6 ADD PUSH2 0x852 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x908 JUMPI PUSH2 0x907 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x916 DUP9 DUP3 DUP10 ADD PUSH2 0x3F5 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x927 DUP9 DUP3 DUP10 ADD PUSH2 0x42F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x948 JUMPI PUSH2 0x947 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x954 DUP9 DUP3 DUP10 ADD PUSH2 0x880 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x965 DUP9 DUP3 DUP10 ADD PUSH2 0x4CD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x986 JUMPI PUSH2 0x985 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x992 DUP9 DUP3 DUP10 ADD PUSH2 0x5FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B5 JUMPI PUSH2 0x9B4 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9D3 JUMPI PUSH2 0x9D2 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x9DF DUP5 DUP3 DUP6 ADD PUSH2 0x880 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9F1 DUP2 PUSH2 0x4A2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA0A DUP2 PUSH2 0x9F7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0xA25 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x9E8 JUMP JUMPDEST PUSH2 0xA32 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xA01 JUMP JUMPDEST PUSH2 0xA3F PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x9E8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xA50 DUP2 PUSH2 0x3D1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xA5F DUP2 PUSH2 0x40A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA9F JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xA84 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xAAE JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xABF DUP3 PUSH2 0xA65 JUMP JUMPDEST PUSH2 0xAC9 DUP2 DUP6 PUSH2 0xA70 JUMP JUMPDEST SWAP4 POP PUSH2 0xAD9 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xA81 JUMP JUMPDEST PUSH2 0xAE2 DUP2 PUSH2 0x4EC JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0xB02 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0xA47 JUMP JUMPDEST PUSH2 0xB0F PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0xA56 JUMP JUMPDEST PUSH2 0xB1C PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x766 JUMP JUMPDEST PUSH2 0xB29 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x9E8 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0xB3B DUP2 DUP5 PUSH2 0xAB4 JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB5C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xA56 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xB71 DUP2 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB8D JUMPI PUSH2 0xB8C PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xB9B DUP5 DUP3 DUP6 ADD PUSH2 0xB62 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBAD DUP2 PUSH2 0x3D1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBFB DUP3 PUSH2 0xA65 JUMP JUMPDEST PUSH2 0xC05 DUP2 DUP6 PUSH2 0xBDF JUMP JUMPDEST SWAP4 POP PUSH2 0xC15 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xA81 JUMP JUMPDEST PUSH2 0xC1E DUP2 PUSH2 0x4EC JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC35 DUP4 DUP4 PUSH2 0xBF0 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC55 DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0xC5F DUP2 DUP6 PUSH2 0xBBE JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0xC71 DUP6 PUSH2 0xBCF JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0xCAD JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0xC8E DUP6 DUP3 PUSH2 0xC29 JUMP JUMPDEST SWAP5 POP PUSH2 0xC99 DUP4 PUSH2 0xC3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xC75 JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0xCD7 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xBA4 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0xCEF DUP3 DUP3 PUSH2 0xC4A JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0xD11 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0xA47 JUMP JUMPDEST PUSH2 0xD1E PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0xA56 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xD30 DUP2 DUP7 PUSH2 0xCBF JUMP JUMPDEST SWAP1 POP PUSH2 0xD3F PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x9E8 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0xD51 DUP2 DUP5 PUSH2 0xAB4 JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xD77 DUP2 DUP5 PUSH2 0xCBF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xD8E DUP2 PUSH2 0x4B6 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xD9D DUP2 PUSH2 0x9F7 JUMP JUMPDEST DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xDBA DUP2 PUSH2 0xD94 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xDD9 JUMPI PUSH2 0xDD8 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xDE7 DUP7 DUP3 DUP8 ADD PUSH2 0xD7F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xDF8 DUP7 DUP3 DUP8 ADD PUSH2 0xDAB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xE09 DUP7 DUP3 DUP8 ADD PUSH2 0xD7F JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC SWAP8 0x28 SHL 0xD1 0x5C 0xAB LOG3 0xCC PUSH15 0xFA4A076E6F49A63C3B3C013798A44E PUSH24 0x679BFEC3FEC964736F6C634300080A003300000000000000 ", - "sourceMap": "2664:1682:0:-:0;;;2839:42;2788:94;;;;;;;;;;;;;;;;;;;;2664:1682;;;;;;;;;;;;;;;;" + "object": "60806040526108066000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b50611477806100626000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806371b0edfa1161006657806371b0edfa1461010a57806383f090821461013a5780639f89f03e1461016a578063cb26bf3214610186578063f87f493f146101b857610093565b80630139d6971461009857806319760407146100b4578063267d4062146100d057806361fc548f146100ec575b600080fd5b6100b260048036038101906100ad9190610a9f565b6101ea565b005b6100ce60048036038101906100c99190610b3e565b610281565b005b6100ea60048036038101906100e59190610c33565b610318565b005b6100f46103b2565b6040516101019190610d29565b60405180910390f35b610124600480360381019061011f9190610d44565b6103d6565b6040516101319190610d80565b60405180910390f35b610154600480360381019061014f9190610d9b565b61047a565b6040516101619190610dfd565b60405180910390f35b610184600480360381019061017f9190610e18565b61051e565b005b6101a0600480360381019061019b9190610d9b565b6105b8565b6040516101af93929190610eda565b60405180910390f35b6101d260048036038101906101cd9190610d9b565b610665565b6040516101e193929190610f11565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630139d697858585856040518563ffffffff1660e01b81526004016102499493929190611128565b600060405180830381600087803b15801561026357600080fd5b505af1158015610277573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166319760407858585856040518563ffffffff1660e01b81526004016102e0949392919061117b565b600060405180830381600087803b1580156102fa57600080fd5b505af115801561030e573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663267d406286868686866040518663ffffffff1660e01b81526004016103799594939291906111f3565b600060405180830381600087803b15801561039357600080fd5b505af11580156103a7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371b0edfa836040518263ffffffff1660e01b8152600401610432919061124d565b602060405180830381865afa15801561044f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610473919061127d565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166383f09082836040518263ffffffff1660e01b81526004016104d691906112aa565b602060405180830381865afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906112f8565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f89f03e86868686866040518663ffffffff1660e01b815260040161057f959493929190611325565b600060405180830381600087803b15801561059957600080fd5b505af11580156105ad573d6000803e3d6000fd5b505050505050505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb26bf32856040518263ffffffff1660e01b815260040161061791906112aa565b606060405180830381865afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610658919061139b565b9250925092509193909250565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87f493f856040518263ffffffff1660e01b81526004016106c491906112aa565b606060405180830381865afa1580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070591906113ee565b9250925092509193909250565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107748261072b565b810181811067ffffffffffffffff821117156107935761079261073c565b5b80604052505050565b60006107a6610712565b90506107b2828261076b565b919050565b600080fd5b600060ff82169050919050565b6107d2816107bc565b81146107dd57600080fd5b50565b6000813590506107ef816107c9565b92915050565b600080fd5b600067ffffffffffffffff8211156108155761081461073c565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561084b5761084a61073c565b5b6108548261072b565b9050602081019050919050565b82818337600083830152505050565b600061088361087e84610830565b61079c565b90508281526020810184848401111561089f5761089e61082b565b5b6108aa848285610861565b509392505050565b600082601f8301126108c7576108c66107f5565b5b81356108d7848260208601610870565b91505092915050565b60006108f36108ee846107fa565b61079c565b9050808382526020820190506020840283018581111561091657610915610826565b5b835b8181101561095d57803567ffffffffffffffff81111561093b5761093a6107f5565b5b80860161094889826108b2565b85526020850194505050602081019050610918565b5050509392505050565b600082601f83011261097c5761097b6107f5565b5b813561098c8482602086016108e0565b91505092915050565b6000604082840312156109ab576109aa610726565b5b6109b5604061079c565b905060006109c5848285016107e0565b600083015250602082013567ffffffffffffffff8111156109e9576109e86107b7565b5b6109f584828501610967565b60208301525092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a2c82610a01565b9050919050565b610a3c81610a21565b8114610a4757600080fd5b50565b600081359050610a5981610a33565b92915050565b600067ffffffffffffffff82169050919050565b610a7c81610a5f565b8114610a8757600080fd5b50565b600081359050610a9981610a73565b92915050565b60008060008060808587031215610ab957610ab861071c565b5b600085013567ffffffffffffffff811115610ad757610ad6610721565b5b610ae387828801610995565b9450506020610af487828801610a4a565b9350506040610b0587828801610a8a565b925050606085013567ffffffffffffffff811115610b2657610b25610721565b5b610b32878288016108b2565b91505092959194509250565b60008060008060808587031215610b5857610b5761071c565b5b600085013567ffffffffffffffff811115610b7657610b75610721565b5b610b8287828801610995565b945050602085013567ffffffffffffffff811115610ba357610ba2610721565b5b610baf87828801610995565b9350506040610bc087828801610a8a565b925050606085013567ffffffffffffffff811115610be157610be0610721565b5b610bed878288016108b2565b91505092959194509250565b600061ffff82169050919050565b610c1081610bf9565b8114610c1b57600080fd5b50565b600081359050610c2d81610c07565b92915050565b600080600080600060a08688031215610c4f57610c4e61071c565b5b6000610c5d888289016107e0565b9550506020610c6e88828901610c1e565b9450506040610c7f88828901610a4a565b9350506060610c9088828901610a8a565b925050608086013567ffffffffffffffff811115610cb157610cb0610721565b5b610cbd888289016108b2565b9150509295509295909350565b6000819050919050565b6000610cef610cea610ce584610a01565b610cca565b610a01565b9050919050565b6000610d0182610cd4565b9050919050565b6000610d1382610cf6565b9050919050565b610d2381610d08565b82525050565b6000602082019050610d3e6000830184610d1a565b92915050565b600060208284031215610d5a57610d5961071c565b5b6000610d6884828501610c1e565b91505092915050565b610d7a81610a21565b82525050565b6000602082019050610d956000830184610d71565b92915050565b600060208284031215610db157610db061071c565b5b600082013567ffffffffffffffff811115610dcf57610dce610721565b5b610ddb84828501610995565b91505092915050565b6000819050919050565b610df781610de4565b82525050565b6000602082019050610e126000830184610dee565b92915050565b600080600080600060a08688031215610e3457610e3361071c565b5b6000610e42888289016107e0565b9550506020610e5388828901610c1e565b945050604086013567ffffffffffffffff811115610e7457610e73610721565b5b610e8088828901610995565b9350506060610e9188828901610a8a565b925050608086013567ffffffffffffffff811115610eb257610eb1610721565b5b610ebe888289016108b2565b9150509295509295909350565b610ed481610a5f565b82525050565b6000606082019050610eef6000830186610ecb565b610efc6020830185610ecb565b610f096040830184610ecb565b949350505050565b6000606082019050610f266000830186610ecb565b610f336020830185610dee565b610f406040830184610ecb565b949350505050565b610f51816107bc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fbd578082015181840152602081019050610fa2565b83811115610fcc576000848401525b50505050565b6000610fdd82610f83565b610fe78185610f8e565b9350610ff7818560208601610f9f565b6110008161072b565b840191505092915050565b60006110178383610fd2565b905092915050565b6000602082019050919050565b600061103782610f57565b6110418185610f62565b93508360208202850161105385610f73565b8060005b8581101561108f5784840389528151611070858261100b565b945061107b8361101f565b925060208a01995050600181019050611057565b50829750879550505050505092915050565b60006040830160008301516110b96000860182610f48565b50602083015184820360208601526110d1828261102c565b9150508091505092915050565b600082825260208201905092915050565b60006110fa82610f83565b61110481856110de565b9350611114818560208601610f9f565b61111d8161072b565b840191505092915050565b6000608082019050818103600083015261114281876110a1565b90506111516020830186610d71565b61115e6040830185610ecb565b818103606083015261117081846110ef565b905095945050505050565b6000608082019050818103600083015261119581876110a1565b905081810360208301526111a981866110a1565b90506111b86040830185610ecb565b81810360608301526111ca81846110ef565b905095945050505050565b6111de816107bc565b82525050565b6111ed81610bf9565b82525050565b600060a08201905061120860008301886111d5565b61121560208301876111e4565b6112226040830186610d71565b61122f6060830185610ecb565b818103608083015261124181846110ef565b90509695505050505050565b600060208201905061126260008301846111e4565b92915050565b60008151905061127781610a33565b92915050565b6000602082840312156112935761129261071c565b5b60006112a184828501611268565b91505092915050565b600060208201905081810360008301526112c481846110a1565b905092915050565b6112d581610de4565b81146112e057600080fd5b50565b6000815190506112f2816112cc565b92915050565b60006020828403121561130e5761130d61071c565b5b600061131c848285016112e3565b91505092915050565b600060a08201905061133a60008301886111d5565b61134760208301876111e4565b818103604083015261135981866110a1565b90506113686060830185610ecb565b818103608083015261137a81846110ef565b90509695505050505050565b60008151905061139581610a73565b92915050565b6000806000606084860312156113b4576113b361071c565b5b60006113c286828701611386565b93505060206113d386828701611386565b92505060406113e486828701611386565b9150509250925092565b6000806000606084860312156114075761140661071c565b5b600061141586828701611386565b9350506020611426868287016112e3565b925050604061143786828701611386565b915050925092509256fea2646970667358221220c04621bb052bcda255425291a4fe020cf0831dde7b2dca5e5954b77da1559d9864736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x806 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1477 DUP1 PUSH2 0x62 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x71B0EDFA GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x71B0EDFA EQ PUSH2 0x10A JUMPI DUP1 PUSH4 0x83F09082 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x9F89F03E EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xCB26BF32 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0xF87F493F EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x139D697 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x19760407 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x267D4062 EQ PUSH2 0xD0 JUMPI DUP1 PUSH4 0x61FC548F EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB2 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xAD SWAP2 SWAP1 PUSH2 0xA9F JUMP JUMPDEST PUSH2 0x1EA JUMP JUMPDEST STOP JUMPDEST PUSH2 0xCE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xC9 SWAP2 SWAP1 PUSH2 0xB3E JUMP JUMPDEST PUSH2 0x281 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xEA PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE5 SWAP2 SWAP1 PUSH2 0xC33 JUMP JUMPDEST PUSH2 0x318 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF4 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x101 SWAP2 SWAP1 PUSH2 0xD29 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0xD44 JUMP JUMPDEST PUSH2 0x3D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0xD80 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x14F SWAP2 SWAP1 PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x161 SWAP2 SWAP1 PUSH2 0xDFD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x17F SWAP2 SWAP1 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x51E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x19B SWAP2 SWAP1 PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x5B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1AF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D2 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x665 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xF11 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x139D697 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x249 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x277 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x19760407 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E0 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x117B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x267D4062 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x379 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x11F3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x71B0EDFA DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x432 SWAP2 SWAP1 PUSH2 0x124D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x44F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x473 SWAP2 SWAP1 PUSH2 0x127D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x83F09082 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0x12AA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x517 SWAP2 SWAP1 PUSH2 0x12F8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9F89F03E DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57F SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1325 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB26BF32 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x617 SWAP2 SWAP1 PUSH2 0x12AA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x634 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x658 SWAP2 SWAP1 PUSH2 0x139B JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF87F493F DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6C4 SWAP2 SWAP1 PUSH2 0x12AA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x705 SWAP2 SWAP1 PUSH2 0x13EE JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x774 DUP3 PUSH2 0x72B JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x793 JUMPI PUSH2 0x792 PUSH2 0x73C JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A6 PUSH2 0x712 JUMP JUMPDEST SWAP1 POP PUSH2 0x7B2 DUP3 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7D2 DUP2 PUSH2 0x7BC JUMP JUMPDEST DUP2 EQ PUSH2 0x7DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x7EF DUP2 PUSH2 0x7C9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x815 JUMPI PUSH2 0x814 PUSH2 0x73C JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x84B JUMPI PUSH2 0x84A PUSH2 0x73C JUMP JUMPDEST JUMPDEST PUSH2 0x854 DUP3 PUSH2 0x72B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x883 PUSH2 0x87E DUP5 PUSH2 0x830 JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x89F JUMPI PUSH2 0x89E PUSH2 0x82B JUMP JUMPDEST JUMPDEST PUSH2 0x8AA DUP5 DUP3 DUP6 PUSH2 0x861 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8C7 JUMPI PUSH2 0x8C6 PUSH2 0x7F5 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x8D7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x870 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F3 PUSH2 0x8EE DUP5 PUSH2 0x7FA JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x916 JUMPI PUSH2 0x915 PUSH2 0x826 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x95D JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x93B JUMPI PUSH2 0x93A PUSH2 0x7F5 JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x948 DUP10 DUP3 PUSH2 0x8B2 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x918 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x97C JUMPI PUSH2 0x97B PUSH2 0x7F5 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x98C DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x8E0 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9AB JUMPI PUSH2 0x9AA PUSH2 0x726 JUMP JUMPDEST JUMPDEST PUSH2 0x9B5 PUSH1 0x40 PUSH2 0x79C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9C5 DUP5 DUP3 DUP6 ADD PUSH2 0x7E0 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9E9 JUMPI PUSH2 0x9E8 PUSH2 0x7B7 JUMP JUMPDEST JUMPDEST PUSH2 0x9F5 DUP5 DUP3 DUP6 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2C DUP3 PUSH2 0xA01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA3C DUP2 PUSH2 0xA21 JUMP JUMPDEST DUP2 EQ PUSH2 0xA47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA59 DUP2 PUSH2 0xA33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA7C DUP2 PUSH2 0xA5F JUMP JUMPDEST DUP2 EQ PUSH2 0xA87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA99 DUP2 PUSH2 0xA73 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xAB9 JUMPI PUSH2 0xAB8 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAD7 JUMPI PUSH2 0xAD6 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xAE3 DUP8 DUP3 DUP9 ADD PUSH2 0x995 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xAF4 DUP8 DUP3 DUP9 ADD PUSH2 0xA4A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xB05 DUP8 DUP3 DUP9 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB26 JUMPI PUSH2 0xB25 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xB32 DUP8 DUP3 DUP9 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB58 JUMPI PUSH2 0xB57 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB76 JUMPI PUSH2 0xB75 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xB82 DUP8 DUP3 DUP9 ADD PUSH2 0x995 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBA3 JUMPI PUSH2 0xBA2 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xBAF DUP8 DUP3 DUP9 ADD PUSH2 0x995 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xBC0 DUP8 DUP3 DUP9 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE1 JUMPI PUSH2 0xBE0 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xBED DUP8 DUP3 DUP9 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC10 DUP2 PUSH2 0xBF9 JUMP JUMPDEST DUP2 EQ PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2D DUP2 PUSH2 0xC07 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xC4F JUMPI PUSH2 0xC4E PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xC5D DUP9 DUP3 DUP10 ADD PUSH2 0x7E0 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xC6E DUP9 DUP3 DUP10 ADD PUSH2 0xC1E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xC7F DUP9 DUP3 DUP10 ADD PUSH2 0xA4A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0xC90 DUP9 DUP3 DUP10 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCB1 JUMPI PUSH2 0xCB0 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xCBD DUP9 DUP3 DUP10 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCEF PUSH2 0xCEA PUSH2 0xCE5 DUP5 PUSH2 0xA01 JUMP JUMPDEST PUSH2 0xCCA JUMP JUMPDEST PUSH2 0xA01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD01 DUP3 PUSH2 0xCD4 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD13 DUP3 PUSH2 0xCF6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD23 DUP2 PUSH2 0xD08 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD3E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xD1A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD5A JUMPI PUSH2 0xD59 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD68 DUP5 DUP3 DUP6 ADD PUSH2 0xC1E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xD7A DUP2 PUSH2 0xA21 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD95 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xD71 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDB1 JUMPI PUSH2 0xDB0 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDCF JUMPI PUSH2 0xDCE PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xDDB DUP5 DUP3 DUP6 ADD PUSH2 0x995 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDF7 DUP2 PUSH2 0xDE4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE12 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xDEE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE34 JUMPI PUSH2 0xE33 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE42 DUP9 DUP3 DUP10 ADD PUSH2 0x7E0 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xE53 DUP9 DUP3 DUP10 ADD PUSH2 0xC1E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE74 JUMPI PUSH2 0xE73 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xE80 DUP9 DUP3 DUP10 ADD PUSH2 0x995 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0xE91 DUP9 DUP3 DUP10 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEB2 JUMPI PUSH2 0xEB1 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xEBE DUP9 DUP3 DUP10 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH2 0xED4 DUP2 PUSH2 0xA5F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0xEEF PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0xECB JUMP JUMPDEST PUSH2 0xEFC PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST PUSH2 0xF09 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xECB JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0xF26 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0xECB JUMP JUMPDEST PUSH2 0xF33 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xDEE JUMP JUMPDEST PUSH2 0xF40 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xECB JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xF51 DUP2 PUSH2 0x7BC JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFBD JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFA2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xFCC JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFDD DUP3 PUSH2 0xF83 JUMP JUMPDEST PUSH2 0xFE7 DUP2 DUP6 PUSH2 0xF8E JUMP JUMPDEST SWAP4 POP PUSH2 0xFF7 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xF9F JUMP JUMPDEST PUSH2 0x1000 DUP2 PUSH2 0x72B JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1017 DUP4 DUP4 PUSH2 0xFD2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1037 DUP3 PUSH2 0xF57 JUMP JUMPDEST PUSH2 0x1041 DUP2 DUP6 PUSH2 0xF62 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x1053 DUP6 PUSH2 0xF73 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x108F JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x1070 DUP6 DUP3 PUSH2 0x100B JUMP JUMPDEST SWAP5 POP PUSH2 0x107B DUP4 PUSH2 0x101F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1057 JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x10B9 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF48 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x10D1 DUP3 DUP3 PUSH2 0x102C JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10FA DUP3 PUSH2 0xF83 JUMP JUMPDEST PUSH2 0x1104 DUP2 DUP6 PUSH2 0x10DE JUMP JUMPDEST SWAP4 POP PUSH2 0x1114 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xF9F JUMP JUMPDEST PUSH2 0x111D DUP2 PUSH2 0x72B JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1142 DUP2 DUP8 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0x1151 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0xD71 JUMP JUMPDEST PUSH2 0x115E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1170 DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1195 DUP2 DUP8 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x11A9 DUP2 DUP7 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11B8 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x11CA DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x11DE DUP2 PUSH2 0x7BC JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11ED DUP2 PUSH2 0xBF9 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1208 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x1215 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x11E4 JUMP JUMPDEST PUSH2 0x1222 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0xD71 JUMP JUMPDEST PUSH2 0x122F PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1241 DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1262 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x11E4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1277 DUP2 PUSH2 0xA33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1293 JUMPI PUSH2 0x1292 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x12A1 DUP5 DUP3 DUP6 ADD PUSH2 0x1268 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12C4 DUP2 DUP5 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x12D5 DUP2 PUSH2 0xDE4 JUMP JUMPDEST DUP2 EQ PUSH2 0x12E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x12F2 DUP2 PUSH2 0x12CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x130E JUMPI PUSH2 0x130D PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x131C DUP5 DUP3 DUP6 ADD PUSH2 0x12E3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x133A PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x1347 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x11E4 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1359 DUP2 DUP7 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0x1368 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x137A DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1395 DUP2 PUSH2 0xA73 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x13B4 JUMPI PUSH2 0x13B3 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x13C2 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x13D3 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x13E4 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1407 JUMPI PUSH2 0x1406 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1415 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1426 DUP7 DUP3 DUP8 ADD PUSH2 0x12E3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1437 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 CHAINID 0x21 0xBB SDIV 0x2B 0xCD LOG2 SSTORE TIMESTAMP MSTORE SWAP2 LOG4 INVALID MUL 0xC CREATE DUP4 SAR 0xDE PUSH28 0x2DCA5E5954B77DA1559D9864736F6C634300080B0033000000000000 ", + "sourceMap": "132:2759:0:-:0;;;314:42;255:102;;;;;;;;;;;;;;;;;;;;132:2759;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "functionDebugData": { - "@index_to_account_82": { - "entryPoint": 466, - "id": 82, + "@fee_per_second_78": { + "entryPoint": 1146, + "id": 78, + "parameterSlots": 1, + "returnSlots": 1 + }, + "@index_to_account_25": { + "entryPoint": 982, + "id": 25, "parameterSlots": 1, "returnSlots": 1 }, - "@transact_info_101": { - "entryPoint": 784, - "id": 101, + "@transact_info_44": { + "entryPoint": 1637, + "id": 44, "parameterSlots": 1, "returnSlots": 3 }, - "@transact_through_derivative_152": { - "entryPoint": 276, - "id": 152, + "@transact_info_with_signed_63": { + "entryPoint": 1464, + "id": 63, + "parameterSlots": 1, + "returnSlots": 3 + }, + "@transact_through_derivative_129": { + "entryPoint": 792, + "id": 129, "parameterSlots": 5, "returnSlots": 0 }, - "@transact_through_derivative_multilocation_127": { - "entryPoint": 630, - "id": 127, + "@transact_through_derivative_multilocation_104": { + "entryPoint": 1310, + "id": 104, "parameterSlots": 5, "returnSlots": 0 }, - "@xcmtransactor_68": { - "entryPoint": 430, - "id": 68, + "@transact_through_signed_152": { + "entryPoint": 490, + "id": 152, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@transact_through_signed_multilocation_176": { + "entryPoint": 641, + "id": 176, + "parameterSlots": 4, + "returnSlots": 0 + }, + "@xcmtransactor_11": { + "entryPoint": 946, + "id": 11, "parameterSlots": 0, "returnSlots": 0 }, "abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 1995, + "entryPoint": 2272, "id": null, "parameterSlots": 3, "returnSlots": 1 }, "abi_decode_available_length_t_bytes_memory_ptr": { - "entryPoint": 1464, + "entryPoint": 2160, "id": null, "parameterSlots": 3, "returnSlots": 1 }, "abi_decode_t_address": { - "entryPoint": 1165, + "entryPoint": 2634, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_address_fromMemory": { - "entryPoint": 2914, + "entryPoint": 4712, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 2130, + "entryPoint": 2407, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_bytes_memory_ptr": { - "entryPoint": 1530, + "entryPoint": 2226, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_t_struct$_Multilocation_$8_memory_ptr": { - "entryPoint": 2176, + "abi_decode_t_struct$_Multilocation_$186_memory_ptr": { + "entryPoint": 2453, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_uint16": { - "entryPoint": 1071, + "entryPoint": 3102, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_uint256_fromMemory": { - "entryPoint": 3499, + "entryPoint": 4835, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_uint64": { - "entryPoint": 1229, + "entryPoint": 2698, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_uint64_fromMemory": { - "entryPoint": 3455, + "entryPoint": 4998, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_t_uint8": { - "entryPoint": 1013, + "entryPoint": 2016, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 2935, + "entryPoint": 4733, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptr": { - "entryPoint": 2463, + "abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptr": { + "entryPoint": 3483, "id": null, "parameterSlots": 2, "returnSlots": 1 }, + "abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptrt_addresst_uint64t_bytes_memory_ptr": { + "entryPoint": 2719, + "id": null, + "parameterSlots": 2, + "returnSlots": 4 + }, + "abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptrt_struct$_Multilocation_$186_memory_ptrt_uint64t_bytes_memory_ptr": { + "entryPoint": 2878, + "id": null, + "parameterSlots": 2, + "returnSlots": 4 + }, "abi_decode_tuple_t_uint16": { - "entryPoint": 1849, + "entryPoint": 3396, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 4856, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_decode_tuple_t_uint64t_uint256t_uint64_fromMemory": { - "entryPoint": 3520, + "entryPoint": 5102, + "id": null, + "parameterSlots": 2, + "returnSlots": 3 + }, + "abi_decode_tuple_t_uint64t_uint64t_uint64_fromMemory": { + "entryPoint": 5019, "id": null, "parameterSlots": 2, "returnSlots": 3 }, "abi_decode_tuple_t_uint8t_uint16t_addresst_uint64t_bytes_memory_ptr": { - "entryPoint": 1576, + "entryPoint": 3123, "id": null, "parameterSlots": 2, "returnSlots": 5 }, - "abi_decode_tuple_t_uint8t_uint16t_struct$_Multilocation_$8_memory_ptrt_uint64t_bytes_memory_ptr": { - "entryPoint": 2284, + "abi_decode_tuple_t_uint8t_uint16t_struct$_Multilocation_$186_memory_ptrt_uint64t_bytes_memory_ptr": { + "entryPoint": 3608, "id": null, "parameterSlots": 2, "returnSlots": 5 }, "abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr": { - "entryPoint": 3113, + "entryPoint": 4107, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_encode_t_address_to_t_address_fromStack": { - "entryPoint": 1894, + "entryPoint": 3441, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 3146, + "entryPoint": 4140, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr": { - "entryPoint": 3056, + "entryPoint": 4050, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack": { - "entryPoint": 2740, + "entryPoint": 4335, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_contract$_XcmTransactor_$59_to_t_address_fromStack": { - "entryPoint": 1807, + "abi_encode_t_contract$_XcmTransactor_$286_to_t_address_fromStack": { + "entryPoint": 3354, "id": null, "parameterSlots": 2, "returnSlots": 0 }, - "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack": { - "entryPoint": 3263, + "abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack": { + "entryPoint": 4257, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_encode_t_uint16_to_t_uint16_fromStack": { - "entryPoint": 2646, + "entryPoint": 4580, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "abi_encode_t_uint256_to_t_uint256_fromStack": { - "entryPoint": 2561, + "entryPoint": 3566, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "abi_encode_t_uint64_to_t_uint64_fromStack": { - "entryPoint": 2536, + "entryPoint": 3787, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "abi_encode_t_uint8_to_t_uint8": { - "entryPoint": 2980, + "entryPoint": 3912, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "abi_encode_t_uint8_to_t_uint8_fromStack": { - "entryPoint": 2631, + "entryPoint": 4565, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": 1909, + "entryPoint": 3456, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_tuple_t_contract$_XcmTransactor_$59__to_t_address__fromStack_reversed": { - "entryPoint": 1822, + "abi_encode_tuple_t_contract$_XcmTransactor_$286__to_t_address__fromStack_reversed": { + "entryPoint": 3369, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr__to_t_struct$_Multilocation_$8_memory_ptr__fromStack_reversed": { - "entryPoint": 3421, + "abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr__fromStack_reversed": { + "entryPoint": 4778, "id": null, "parameterSlots": 2, "returnSlots": 1 }, + "abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr_t_address_t_uint64_t_bytes_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 4392, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, + "abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 4475, + "id": null, + "parameterSlots": 5, + "returnSlots": 1 + }, "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed": { - "entryPoint": 2887, + "entryPoint": 4685, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 3581, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "abi_encode_tuple_t_uint64_t_uint256_t_uint64__to_t_uint64_t_uint256_t_uint64__fromStack_reversed": { - "entryPoint": 2576, + "entryPoint": 3857, + "id": null, + "parameterSlots": 4, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint64_t_uint64_t_uint64__to_t_uint64_t_uint64_t_uint64__fromStack_reversed": { + "entryPoint": 3802, "id": null, "parameterSlots": 4, "returnSlots": 1 }, "abi_encode_tuple_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 2797, + "entryPoint": 4595, "id": null, "parameterSlots": 6, "returnSlots": 1 }, - "abi_encode_tuple_t_uint8_t_uint16_t_struct$_Multilocation_$8_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_struct$_Multilocation_$8_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 3324, + "abi_encode_tuple_t_uint8_t_uint16_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed": { + "entryPoint": 4901, "id": null, "parameterSlots": 6, "returnSlots": 1 }, "allocate_memory": { - "entryPoint": 1373, + "entryPoint": 1948, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "allocate_unbounded": { - "entryPoint": 957, + "entryPoint": 1810, "id": null, "parameterSlots": 0, "returnSlots": 1 }, "array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 1946, + "entryPoint": 2042, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "array_allocation_size_t_bytes_memory_ptr": { - "entryPoint": 1400, + "entryPoint": 2096, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 3023, + "entryPoint": 3955, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 2995, + "entryPoint": 3927, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "array_length_t_bytes_memory_ptr": { - "entryPoint": 2661, + "entryPoint": 3971, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 3133, + "entryPoint": 4127, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 3006, + "entryPoint": 3938, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "array_storeLengthForEncoding_t_bytes_memory_ptr": { - "entryPoint": 3039, + "entryPoint": 3982, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack": { - "entryPoint": 2672, + "entryPoint": 4318, "id": null, "parameterSlots": 2, "returnSlots": 1 }, "cleanup_t_address": { - "entryPoint": 1124, + "entryPoint": 2593, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "cleanup_t_uint16": { - "entryPoint": 1034, + "entryPoint": 3065, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "cleanup_t_uint160": { - "entryPoint": 1092, + "entryPoint": 2561, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "cleanup_t_uint256": { - "entryPoint": 2551, + "entryPoint": 3556, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "cleanup_t_uint64": { - "entryPoint": 1186, + "entryPoint": 2655, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "cleanup_t_uint8": { - "entryPoint": 977, + "entryPoint": 1980, "id": null, "parameterSlots": 1, "returnSlots": 1 }, - "convert_t_contract$_XcmTransactor_$59_to_t_address": { - "entryPoint": 1789, + "convert_t_contract$_XcmTransactor_$286_to_t_address": { + "entryPoint": 3336, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "convert_t_uint160_to_t_address": { - "entryPoint": 1771, + "entryPoint": 3318, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "convert_t_uint160_to_t_uint160": { - "entryPoint": 1737, + "entryPoint": 3284, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "copy_calldata_to_memory": { - "entryPoint": 1449, + "entryPoint": 2145, "id": null, "parameterSlots": 3, "returnSlots": 0 }, "copy_memory_to_memory": { - "entryPoint": 2689, + "entryPoint": 3999, "id": null, "parameterSlots": 3, "returnSlots": 0 }, "finalize_allocation": { - "entryPoint": 1324, + "entryPoint": 1899, "id": null, "parameterSlots": 2, "returnSlots": 0 }, "identity": { - "entryPoint": 1727, + "entryPoint": 3274, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "panic_error_0x41": { - "entryPoint": 1277, + "entryPoint": 1852, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": { - "entryPoint": 1250, + "entryPoint": 2037, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f": { - "entryPoint": 1936, + "entryPoint": 1830, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421": { - "entryPoint": 1941, + "entryPoint": 1975, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef": { - "entryPoint": 1990, + "entryPoint": 2086, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae": { - "entryPoint": 1255, + "entryPoint": 2091, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { - "entryPoint": 972, + "entryPoint": 1825, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { - "entryPoint": 967, + "entryPoint": 1820, "id": null, "parameterSlots": 0, "returnSlots": 0 }, "round_up_to_mul_of_32": { - "entryPoint": 1260, + "entryPoint": 1835, "id": null, "parameterSlots": 1, "returnSlots": 1 }, "validator_revert_t_address": { - "entryPoint": 1142, + "entryPoint": 2611, "id": null, "parameterSlots": 1, "returnSlots": 0 }, "validator_revert_t_uint16": { - "entryPoint": 1048, + "entryPoint": 3079, "id": null, "parameterSlots": 1, "returnSlots": 0 }, "validator_revert_t_uint256": { - "entryPoint": 3476, + "entryPoint": 4812, "id": null, "parameterSlots": 1, "returnSlots": 0 }, "validator_revert_t_uint64": { - "entryPoint": 1206, + "entryPoint": 2675, "id": null, "parameterSlots": 1, "returnSlots": 0 }, "validator_revert_t_uint8": { - "entryPoint": 990, + "entryPoint": 1993, "id": null, "parameterSlots": 1, "returnSlots": 0 @@ -627,22 +853,22 @@ { "ast": { "nodeType": "YulBlock", - "src": "0:20575:1", + "src": "0:26645:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "47:35:1", + "src": "47:35:2", "statements": [ { "nodeType": "YulAssignment", - "src": "57:19:1", + "src": "57:19:2", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "73:2:1", + "src": "73:2:2", "type": "", "value": "64" } @@ -650,16 +876,16 @@ "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "67:5:1" + "src": "67:5:2" }, "nodeType": "YulFunctionCall", - "src": "67:9:1" + "src": "67:9:2" }, "variableNames": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "57:6:1" + "src": "57:6:2" } ] } @@ -671,16 +897,16 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "40:6:1", + "src": "40:6:2", "type": "" } ], - "src": "7:75:1" + "src": "7:75:2" }, { "body": { "nodeType": "YulBlock", - "src": "177:28:1", + "src": "177:28:2", "statements": [ { "expression": { @@ -688,14 +914,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "194:1:1", + "src": "194:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "197:1:1", + "src": "197:1:2", "type": "", "value": "0" } @@ -703,24 +929,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "187:6:1" + "src": "187:6:2" }, "nodeType": "YulFunctionCall", - "src": "187:12:1" + "src": "187:12:2" }, "nodeType": "YulExpressionStatement", - "src": "187:12:1" + "src": "187:12:2" } ] }, "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulFunctionDefinition", - "src": "88:117:1" + "src": "88:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "300:28:1", + "src": "300:28:2", "statements": [ { "expression": { @@ -728,14 +954,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "317:1:1", + "src": "317:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "320:1:1", + "src": "320:1:2", "type": "", "value": "0" } @@ -743,119 +969,315 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "310:6:1" + "src": "310:6:2" }, "nodeType": "YulFunctionCall", - "src": "310:12:1" + "src": "310:12:2" }, "nodeType": "YulExpressionStatement", - "src": "310:12:1" + "src": "310:12:2" } ] }, "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulFunctionDefinition", - "src": "211:117:1" + "src": "211:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "377:43:1", + "src": "423:28:2", "statements": [ { - "nodeType": "YulAssignment", - "src": "387:27:1", - "value": { + "expression": { "arguments": [ { - "name": "value", - "nodeType": "YulIdentifier", - "src": "402:5:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "440:1:2", + "type": "", + "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "409:4:1", + "src": "443:1:2", "type": "", - "value": "0xff" + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "433:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "433:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "433:12:2" + } + ] + }, + "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", + "nodeType": "YulFunctionDefinition", + "src": "334:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "505:54:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "515:38:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "533:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "540:2:2", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "529:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "529:14:2" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "549:2:2", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "545:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "545:7:2" } ], "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "398:3:1" + "src": "525:3:2" }, "nodeType": "YulFunctionCall", - "src": "398:16:1" + "src": "525:28:2" }, "variableNames": [ { - "name": "cleaned", + "name": "result", "nodeType": "YulIdentifier", - "src": "387:7:1" + "src": "515:6:2" } ] } ] }, - "name": "cleanup_t_uint8", + "name": "round_up_to_mul_of_32", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "359:5:1", + "src": "488:5:2", "type": "" } ], "returnVariables": [ { - "name": "cleaned", + "name": "result", "nodeType": "YulTypedName", - "src": "369:7:1", + "src": "498:6:2", "type": "" } ], - "src": "334:86:1" + "src": "457:102:2" }, { "body": { "nodeType": "YulBlock", - "src": "467:77:1", + "src": "593:152:2", "statements": [ { - "body": { - "nodeType": "YulBlock", - "src": "522:16:1", - "statements": [ + "expression": { + "arguments": [ { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "531:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "534:1:1", - "type": "", - "value": "0" - } - ], + "kind": "number", + "nodeType": "YulLiteral", + "src": "610:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "613:77:2", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "603:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "603:88:2" + }, + "nodeType": "YulExpressionStatement", + "src": "603:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "707:1:2", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "710:4:2", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "700:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "700:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "700:15:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "731:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "734:4:2", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "724:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "724:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "724:15:2" + } + ] + }, + "name": "panic_error_0x41", + "nodeType": "YulFunctionDefinition", + "src": "565:180:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "794:238:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "804:58:2", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "826:6:2" + }, + { + "arguments": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "856:4:2" + } + ], + "functionName": { + "name": "round_up_to_mul_of_32", + "nodeType": "YulIdentifier", + "src": "834:21:2" + }, + "nodeType": "YulFunctionCall", + "src": "834:27:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "822:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "822:40:2" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "808:10:2", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "973:22:2", + "statements": [ + { + "expression": { + "arguments": [], "functionName": { - "name": "revert", + "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "524:6:1" + "src": "975:16:2" }, "nodeType": "YulFunctionCall", - "src": "524:12:1" + "src": "975:18:2" }, "nodeType": "YulExpressionStatement", - "src": "524:12:1" + "src": "975:18:2" } ] }, @@ -864,90 +1286,129 @@ { "arguments": [ { - "name": "value", + "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "490:5:1" + "src": "916:10:2" }, { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "513:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint8", - "nodeType": "YulIdentifier", - "src": "497:15:1" - }, - "nodeType": "YulFunctionCall", - "src": "497:22:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "928:18:2", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { - "name": "eq", + "name": "gt", + "nodeType": "YulIdentifier", + "src": "913:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "913:34:2" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "952:10:2" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "964:6:2" + } + ], + "functionName": { + "name": "lt", "nodeType": "YulIdentifier", - "src": "487:2:1" + "src": "949:2:2" }, "nodeType": "YulFunctionCall", - "src": "487:33:1" + "src": "949:22:2" } ], "functionName": { - "name": "iszero", + "name": "or", "nodeType": "YulIdentifier", - "src": "480:6:1" + "src": "910:2:2" }, "nodeType": "YulFunctionCall", - "src": "480:41:1" + "src": "910:62:2" }, "nodeType": "YulIf", - "src": "477:61:1" + "src": "907:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1011:2:2", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1015:10:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1004:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1004:22:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1004:22:2" } ] }, - "name": "validator_revert_t_uint8", + "name": "finalize_allocation", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "value", + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "780:6:2", + "type": "" + }, + { + "name": "size", "nodeType": "YulTypedName", - "src": "460:5:1", + "src": "788:4:2", "type": "" } ], - "src": "426:118:1" + "src": "751:281:2" }, { "body": { "nodeType": "YulBlock", - "src": "600:85:1", + "src": "1079:88:2", "statements": [ { "nodeType": "YulAssignment", - "src": "610:29:1", + "src": "1089:30:2", "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "632:6:1" - } - ], + "arguments": [], "functionName": { - "name": "calldataload", + "name": "allocate_unbounded", "nodeType": "YulIdentifier", - "src": "619:12:1" + "src": "1099:18:2" }, "nodeType": "YulFunctionCall", - "src": "619:20:1" + "src": "1099:20:2" }, "variableNames": [ { - "name": "value", + "name": "memPtr", "nodeType": "YulIdentifier", - "src": "610:5:1" + "src": "1089:6:2" } ] }, @@ -955,120 +1416,159 @@ "expression": { "arguments": [ { - "name": "value", + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1148:6:2" + }, + { + "name": "size", "nodeType": "YulIdentifier", - "src": "673:5:1" + "src": "1156:4:2" } ], "functionName": { - "name": "validator_revert_t_uint8", + "name": "finalize_allocation", "nodeType": "YulIdentifier", - "src": "648:24:1" + "src": "1128:19:2" }, "nodeType": "YulFunctionCall", - "src": "648:31:1" + "src": "1128:33:2" }, "nodeType": "YulExpressionStatement", - "src": "648:31:1" + "src": "1128:33:2" } ] }, - "name": "abi_decode_t_uint8", + "name": "allocate_memory", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", - "nodeType": "YulTypedName", - "src": "578:6:1", - "type": "" - }, - { - "name": "end", + "name": "size", "nodeType": "YulTypedName", - "src": "586:3:1", + "src": "1063:4:2", "type": "" } ], "returnVariables": [ { - "name": "value", + "name": "memPtr", "nodeType": "YulTypedName", - "src": "594:5:1", + "src": "1072:6:2", "type": "" } ], - "src": "550:135:1" + "src": "1038:129:2" }, { "body": { "nodeType": "YulBlock", - "src": "735:45:1", + "src": "1262:28:2", "statements": [ { - "nodeType": "YulAssignment", - "src": "745:29:1", - "value": { + "expression": { "arguments": [ { - "name": "value", - "nodeType": "YulIdentifier", - "src": "760:5:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "1279:1:2", + "type": "", + "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "767:6:1", + "src": "1282:1:2", "type": "", - "value": "0xffff" + "value": "0" } ], "functionName": { - "name": "and", + "name": "revert", "nodeType": "YulIdentifier", - "src": "756:3:1" + "src": "1272:6:2" }, "nodeType": "YulFunctionCall", - "src": "756:18:1" + "src": "1272:12:2" }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "745:7:1" - } - ] + "nodeType": "YulExpressionStatement", + "src": "1272:12:2" } ] }, - "name": "cleanup_t_uint16", + "name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421", "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "717:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", + "src": "1173:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1339:43:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1349:27:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1364:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1371:4:2", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1360:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1360:16:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1349:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", "nodeType": "YulTypedName", - "src": "727:7:1", + "src": "1321:5:2", "type": "" } ], - "src": "691:89:1" + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1331:7:2", + "type": "" + } + ], + "src": "1296:86:2" }, { "body": { "nodeType": "YulBlock", - "src": "828:78:1", + "src": "1429:77:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "884:16:1", + "src": "1484:16:2", "statements": [ { "expression": { @@ -1076,14 +1576,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "893:1:1", + "src": "1493:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "896:1:1", + "src": "1496:1:2", "type": "", "value": "0" } @@ -1091,13 +1591,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "886:6:1" + "src": "1486:6:2" }, "nodeType": "YulFunctionCall", - "src": "886:12:1" + "src": "1486:12:2" }, "nodeType": "YulExpressionStatement", - "src": "886:12:1" + "src": "1486:12:2" } ] }, @@ -1108,88 +1608,88 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "851:5:1" + "src": "1452:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "875:5:1" + "src": "1475:5:2" } ], "functionName": { - "name": "cleanup_t_uint16", + "name": "cleanup_t_uint8", "nodeType": "YulIdentifier", - "src": "858:16:1" + "src": "1459:15:2" }, "nodeType": "YulFunctionCall", - "src": "858:23:1" + "src": "1459:22:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "848:2:1" + "src": "1449:2:2" }, "nodeType": "YulFunctionCall", - "src": "848:34:1" + "src": "1449:33:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "841:6:1" + "src": "1442:6:2" }, "nodeType": "YulFunctionCall", - "src": "841:42:1" + "src": "1442:41:2" }, "nodeType": "YulIf", - "src": "838:62:1" + "src": "1439:61:2" } ] }, - "name": "validator_revert_t_uint16", + "name": "validator_revert_t_uint8", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "821:5:1", + "src": "1422:5:2", "type": "" } ], - "src": "786:120:1" + "src": "1388:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "963:86:1", + "src": "1562:85:2", "statements": [ { "nodeType": "YulAssignment", - "src": "973:29:1", + "src": "1572:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "995:6:1" + "src": "1594:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "982:12:1" + "src": "1581:12:2" }, "nodeType": "YulFunctionCall", - "src": "982:20:1" + "src": "1581:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "973:5:1" + "src": "1572:5:2" } ] }, @@ -1199,35 +1699,35 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "1037:5:1" + "src": "1635:5:2" } ], "functionName": { - "name": "validator_revert_t_uint16", + "name": "validator_revert_t_uint8", "nodeType": "YulIdentifier", - "src": "1011:25:1" + "src": "1610:24:2" }, "nodeType": "YulFunctionCall", - "src": "1011:32:1" + "src": "1610:31:2" }, "nodeType": "YulExpressionStatement", - "src": "1011:32:1" + "src": "1610:31:2" } ] }, - "name": "abi_decode_t_uint16", + "name": "abi_decode_t_uint8", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "941:6:1", + "src": "1540:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "949:3:1", + "src": "1548:3:2", "type": "" } ], @@ -1235,863 +1735,612 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "957:5:1", + "src": "1556:5:2", "type": "" } ], - "src": "912:137:1" + "src": "1512:135:2" }, { "body": { "nodeType": "YulBlock", - "src": "1100:81:1", + "src": "1742:28:2", "statements": [ { - "nodeType": "YulAssignment", - "src": "1110:65:1", - "value": { + "expression": { "arguments": [ { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1125:5:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "1759:1:2", + "type": "", + "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1132:42:1", + "src": "1762:1:2", "type": "", - "value": "0xffffffffffffffffffffffffffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1121:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "1121:54:1" - }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1110:7:1" - } - ] - } - ] - }, - "name": "cleanup_t_uint160", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1082:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1092:7:1", - "type": "" - } - ], - "src": "1055:126:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1232:51:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1242:35:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1271:5:1" + "value": "0" } ], "functionName": { - "name": "cleanup_t_uint160", + "name": "revert", "nodeType": "YulIdentifier", - "src": "1253:17:1" + "src": "1752:6:2" }, "nodeType": "YulFunctionCall", - "src": "1253:24:1" + "src": "1752:12:2" }, - "variableNames": [ - { - "name": "cleaned", - "nodeType": "YulIdentifier", - "src": "1242:7:1" - } - ] + "nodeType": "YulExpressionStatement", + "src": "1752:12:2" } ] }, - "name": "cleanup_t_address", + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1214:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1224:7:1", - "type": "" - } - ], - "src": "1187:96:1" + "src": "1653:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "1332:79:1", + "src": "1867:229:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "1389:16:1", + "src": "1972:22:2", "statements": [ { "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1398:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1401:1:1", - "type": "", - "value": "0" - } - ], + "arguments": [], "functionName": { - "name": "revert", + "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "1391:6:1" + "src": "1974:16:2" }, "nodeType": "YulFunctionCall", - "src": "1391:12:1" + "src": "1974:18:2" }, "nodeType": "YulExpressionStatement", - "src": "1391:12:1" + "src": "1974:18:2" } ] }, "condition": { "arguments": [ { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1355:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1380:5:1" - } - ], - "functionName": { - "name": "cleanup_t_address", - "nodeType": "YulIdentifier", - "src": "1362:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "1362:24:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1352:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1352:35:1" + "name": "length", + "nodeType": "YulIdentifier", + "src": "1944:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1952:18:2", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { - "name": "iszero", + "name": "gt", "nodeType": "YulIdentifier", - "src": "1345:6:1" + "src": "1941:2:2" }, "nodeType": "YulFunctionCall", - "src": "1345:43:1" + "src": "1941:30:2" }, "nodeType": "YulIf", - "src": "1342:63:1" - } - ] - }, - "name": "validator_revert_t_address", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1325:5:1", - "type": "" - } - ], - "src": "1289:122:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1469:87:1", - "statements": [ + "src": "1938:56:2" + }, { "nodeType": "YulAssignment", - "src": "1479:29:1", + "src": "2004:25:2", "value": { "arguments": [ { - "name": "offset", + "name": "length", "nodeType": "YulIdentifier", - "src": "1501:6:1" + "src": "2016:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2024:4:2", + "type": "", + "value": "0x20" } ], "functionName": { - "name": "calldataload", + "name": "mul", "nodeType": "YulIdentifier", - "src": "1488:12:1" + "src": "2012:3:2" }, "nodeType": "YulFunctionCall", - "src": "1488:20:1" + "src": "2012:17:2" }, "variableNames": [ { - "name": "value", + "name": "size", "nodeType": "YulIdentifier", - "src": "1479:5:1" + "src": "2004:4:2" } ] }, { - "expression": { + "nodeType": "YulAssignment", + "src": "2066:23:2", + "value": { "arguments": [ { - "name": "value", + "name": "size", "nodeType": "YulIdentifier", - "src": "1544:5:1" + "src": "2078:4:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2084:4:2", + "type": "", + "value": "0x20" } ], "functionName": { - "name": "validator_revert_t_address", + "name": "add", "nodeType": "YulIdentifier", - "src": "1517:26:1" + "src": "2074:3:2" }, "nodeType": "YulFunctionCall", - "src": "1517:33:1" + "src": "2074:15:2" }, - "nodeType": "YulExpressionStatement", - "src": "1517:33:1" + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2066:4:2" + } + ] } ] }, - "name": "abi_decode_t_address", + "name": "array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1447:6:1", - "type": "" - }, - { - "name": "end", + "name": "length", "nodeType": "YulTypedName", - "src": "1455:3:1", + "src": "1851:6:2", "type": "" } ], "returnVariables": [ { - "name": "value", + "name": "size", "nodeType": "YulTypedName", - "src": "1463:5:1", + "src": "1862:4:2", "type": "" } ], - "src": "1417:139:1" + "src": "1776:320:2" }, { "body": { "nodeType": "YulBlock", - "src": "1606:57:1", + "src": "2191:28:2", "statements": [ { - "nodeType": "YulAssignment", - "src": "1616:41:1", - "value": { + "expression": { "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1631:5:1" - }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1638:18:1", + "src": "2208:1:2", "type": "", - "value": "0xffffffffffffffff" + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2211:1:2", + "type": "", + "value": "0" } ], "functionName": { - "name": "and", + "name": "revert", "nodeType": "YulIdentifier", - "src": "1627:3:1" + "src": "2201:6:2" }, "nodeType": "YulFunctionCall", - "src": "1627:30:1" + "src": "2201:12:2" }, - "variableNames": [ - { - "name": "cleaned", + "nodeType": "YulExpressionStatement", + "src": "2201:12:2" + } + ] + }, + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", + "nodeType": "YulFunctionDefinition", + "src": "2102:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2314:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2331:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2334:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", "nodeType": "YulIdentifier", - "src": "1616:7:1" - } - ] + "src": "2324:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "2324:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "2324:12:2" } ] }, - "name": "cleanup_t_uint64", + "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1588:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "cleaned", - "nodeType": "YulTypedName", - "src": "1598:7:1", - "type": "" - } - ], - "src": "1562:101:1" + "src": "2225:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "1711:78:1", + "src": "2414:241:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "1767:16:1", + "src": "2519:22:2", "statements": [ { "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1776:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1779:1:1", - "type": "", - "value": "0" - } - ], + "arguments": [], "functionName": { - "name": "revert", + "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "1769:6:1" + "src": "2521:16:2" }, "nodeType": "YulFunctionCall", - "src": "1769:12:1" + "src": "2521:18:2" }, "nodeType": "YulExpressionStatement", - "src": "1769:12:1" + "src": "2521:18:2" } ] }, "condition": { "arguments": [ { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1734:5:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "1758:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint64", - "nodeType": "YulIdentifier", - "src": "1741:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "1741:23:1" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "1731:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "1731:34:1" + "name": "length", + "nodeType": "YulIdentifier", + "src": "2491:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2499:18:2", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { - "name": "iszero", + "name": "gt", "nodeType": "YulIdentifier", - "src": "1724:6:1" + "src": "2488:2:2" }, "nodeType": "YulFunctionCall", - "src": "1724:42:1" + "src": "2488:30:2" }, "nodeType": "YulIf", - "src": "1721:62:1" - } - ] - }, - "name": "validator_revert_t_uint64", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "1704:5:1", - "type": "" - } - ], - "src": "1669:120:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1846:86:1", - "statements": [ + "src": "2485:56:2" + }, { "nodeType": "YulAssignment", - "src": "1856:29:1", + "src": "2551:37:2", "value": { "arguments": [ { - "name": "offset", + "name": "length", "nodeType": "YulIdentifier", - "src": "1878:6:1" + "src": "2581:6:2" } ], "functionName": { - "name": "calldataload", + "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "1865:12:1" + "src": "2559:21:2" }, "nodeType": "YulFunctionCall", - "src": "1865:20:1" + "src": "2559:29:2" }, "variableNames": [ { - "name": "value", + "name": "size", "nodeType": "YulIdentifier", - "src": "1856:5:1" + "src": "2551:4:2" } ] }, { - "expression": { + "nodeType": "YulAssignment", + "src": "2625:23:2", + "value": { "arguments": [ { - "name": "value", + "name": "size", "nodeType": "YulIdentifier", - "src": "1920:5:1" + "src": "2637:4:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2643:4:2", + "type": "", + "value": "0x20" } ], "functionName": { - "name": "validator_revert_t_uint64", + "name": "add", "nodeType": "YulIdentifier", - "src": "1894:25:1" + "src": "2633:3:2" }, "nodeType": "YulFunctionCall", - "src": "1894:32:1" + "src": "2633:15:2" }, - "nodeType": "YulExpressionStatement", - "src": "1894:32:1" + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "2625:4:2" + } + ] } ] }, - "name": "abi_decode_t_uint64", + "name": "array_allocation_size_t_bytes_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", - "nodeType": "YulTypedName", - "src": "1824:6:1", - "type": "" - }, - { - "name": "end", + "name": "length", "nodeType": "YulTypedName", - "src": "1832:3:1", + "src": "2398:6:2", "type": "" } ], "returnVariables": [ { - "name": "value", + "name": "size", "nodeType": "YulTypedName", - "src": "1840:5:1", + "src": "2409:4:2", "type": "" } ], - "src": "1795:137:1" + "src": "2348:307:2" }, { "body": { "nodeType": "YulBlock", - "src": "2027:28:1", + "src": "2712:103:2", "statements": [ { "expression": { "arguments": [ { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2044:1:1", - "type": "", - "value": "0" + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2735:3:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2047:1:1", - "type": "", - "value": "0" + "name": "src", + "nodeType": "YulIdentifier", + "src": "2740:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2745:6:2" } ], "functionName": { - "name": "revert", + "name": "calldatacopy", "nodeType": "YulIdentifier", - "src": "2037:6:1" + "src": "2722:12:2" }, "nodeType": "YulFunctionCall", - "src": "2037:12:1" + "src": "2722:30:2" }, "nodeType": "YulExpressionStatement", - "src": "2037:12:1" - } - ] - }, - "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", - "nodeType": "YulFunctionDefinition", - "src": "1938:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2150:28:1", - "statements": [ + "src": "2722:30:2" + }, { "expression": { "arguments": [ { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2167:1:1", - "type": "", - "value": "0" + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2793:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2798:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2789:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2789:16:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2170:1:1", + "src": "2807:1:2", "type": "", "value": "0" } ], "functionName": { - "name": "revert", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "2160:6:1" + "src": "2782:6:2" }, "nodeType": "YulFunctionCall", - "src": "2160:12:1" + "src": "2782:27:2" }, "nodeType": "YulExpressionStatement", - "src": "2160:12:1" + "src": "2782:27:2" } ] }, - "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", + "name": "copy_calldata_to_memory", "nodeType": "YulFunctionDefinition", - "src": "2061:117:1" + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "2694:3:2", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "2699:3:2", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2704:6:2", + "type": "" + } + ], + "src": "2661:154:2" }, { "body": { "nodeType": "YulBlock", - "src": "2232:54:1", + "src": "2904:327:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2242:38:1", + "src": "2914:74:2", "value": { "arguments": [ { "arguments": [ { - "name": "value", + "name": "length", "nodeType": "YulIdentifier", - "src": "2260:5:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2267:2:1", - "type": "", - "value": "31" + "src": "2980:6:2" } ], "functionName": { - "name": "add", + "name": "array_allocation_size_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "2256:3:1" + "src": "2939:40:2" }, "nodeType": "YulFunctionCall", - "src": "2256:14:1" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2276:2:1", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "2272:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "2272:7:1" + "src": "2939:48:2" } ], "functionName": { - "name": "and", + "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "2252:3:1" + "src": "2923:15:2" }, "nodeType": "YulFunctionCall", - "src": "2252:28:1" + "src": "2923:65:2" }, "variableNames": [ { - "name": "result", + "name": "array", "nodeType": "YulIdentifier", - "src": "2242:6:1" + "src": "2914:5:2" } ] - } - ] - }, - "name": "round_up_to_mul_of_32", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2215:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "result", - "nodeType": "YulTypedName", - "src": "2225:6:1", - "type": "" - } - ], - "src": "2184:102:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2320:152:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2337:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2340:77:1", - "type": "", - "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2330:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2330:88:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2330:88:1" }, { "expression": { "arguments": [ { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2434:1:1", - "type": "", - "value": "4" + "name": "array", + "nodeType": "YulIdentifier", + "src": "3004:5:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2437:4:1", - "type": "", - "value": "0x41" + "name": "length", + "nodeType": "YulIdentifier", + "src": "3011:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "2427:6:1" + "src": "2997:6:2" }, "nodeType": "YulFunctionCall", - "src": "2427:15:1" + "src": "2997:21:2" }, "nodeType": "YulExpressionStatement", - "src": "2427:15:1" + "src": "2997:21:2" }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2458:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2461:4:1", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2451:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "2451:15:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2451:15:1" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "2292:180:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2521:238:1", - "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "2531:58:1", + "src": "3027:27:2", "value": { "arguments": [ { - "name": "memPtr", + "name": "array", "nodeType": "YulIdentifier", - "src": "2553:6:1" + "src": "3042:5:2" }, { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "2583:4:1" - } - ], - "functionName": { - "name": "round_up_to_mul_of_32", - "nodeType": "YulIdentifier", - "src": "2561:21:1" - }, - "nodeType": "YulFunctionCall", - "src": "2561:27:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "3049:4:2", + "type": "", + "value": "0x20" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2549:3:1" + "src": "3038:3:2" }, "nodeType": "YulFunctionCall", - "src": "2549:40:1" + "src": "3038:16:2" }, "variables": [ { - "name": "newFreePtr", + "name": "dst", "nodeType": "YulTypedName", - "src": "2535:10:1", + "src": "3031:3:2", "type": "" } ] @@ -2099,21 +2348,21 @@ { "body": { "nodeType": "YulBlock", - "src": "2700:22:1", + "src": "3092:83:2", "statements": [ { "expression": { "arguments": [], "functionName": { - "name": "panic_error_0x41", + "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulIdentifier", - "src": "2702:16:1" + "src": "3094:77:2" }, "nodeType": "YulFunctionCall", - "src": "2702:18:1" + "src": "3094:79:2" }, "nodeType": "YulExpressionStatement", - "src": "2702:18:1" + "src": "3094:79:2" } ] }, @@ -2122,426 +2371,303 @@ { "arguments": [ { - "name": "newFreePtr", + "name": "src", "nodeType": "YulIdentifier", - "src": "2643:10:1" + "src": "3073:3:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2655:18:1", - "type": "", - "value": "0xffffffffffffffff" + "name": "length", + "nodeType": "YulIdentifier", + "src": "3078:6:2" } ], "functionName": { - "name": "gt", + "name": "add", "nodeType": "YulIdentifier", - "src": "2640:2:1" + "src": "3069:3:2" }, "nodeType": "YulFunctionCall", - "src": "2640:34:1" + "src": "3069:16:2" }, { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "2679:10:1" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2691:6:1" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "2676:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "2676:22:1" + "name": "end", + "nodeType": "YulIdentifier", + "src": "3087:3:2" } ], "functionName": { - "name": "or", + "name": "gt", "nodeType": "YulIdentifier", - "src": "2637:2:1" + "src": "3066:2:2" }, "nodeType": "YulFunctionCall", - "src": "2637:62:1" + "src": "3066:25:2" }, "nodeType": "YulIf", - "src": "2634:88:1" + "src": "3063:112:2" }, { "expression": { "arguments": [ { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2738:2:1", - "type": "", - "value": "64" + "name": "src", + "nodeType": "YulIdentifier", + "src": "3208:3:2" }, { - "name": "newFreePtr", + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3213:3:2" + }, + { + "name": "length", "nodeType": "YulIdentifier", - "src": "2742:10:1" + "src": "3218:6:2" } ], "functionName": { - "name": "mstore", + "name": "copy_calldata_to_memory", "nodeType": "YulIdentifier", - "src": "2731:6:1" + "src": "3184:23:2" }, "nodeType": "YulFunctionCall", - "src": "2731:22:1" + "src": "3184:41:2" }, "nodeType": "YulExpressionStatement", - "src": "2731:22:1" + "src": "3184:41:2" } ] }, - "name": "finalize_allocation", + "name": "abi_decode_available_length_t_bytes_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "memPtr", + "name": "src", "nodeType": "YulTypedName", - "src": "2507:6:1", + "src": "2877:3:2", "type": "" }, { - "name": "size", + "name": "length", "nodeType": "YulTypedName", - "src": "2515:4:1", + "src": "2882:6:2", "type": "" - } - ], - "src": "2478:281:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2806:88:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "2816:30:1", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_unbounded", - "nodeType": "YulIdentifier", - "src": "2826:18:1" - }, - "nodeType": "YulFunctionCall", - "src": "2826:20:1" - }, - "variableNames": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2816:6:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "2875:6:1" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "2883:4:1" - } - ], - "functionName": { - "name": "finalize_allocation", - "nodeType": "YulIdentifier", - "src": "2855:19:1" - }, - "nodeType": "YulFunctionCall", - "src": "2855:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "2855:33:1" - } - ] - }, - "name": "allocate_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ + }, { - "name": "size", + "name": "end", "nodeType": "YulTypedName", - "src": "2790:4:1", + "src": "2890:3:2", "type": "" } ], "returnVariables": [ { - "name": "memPtr", + "name": "array", "nodeType": "YulTypedName", - "src": "2799:6:1", + "src": "2898:5:2", "type": "" } ], - "src": "2765:129:1" + "src": "2821:410:2" }, { "body": { "nodeType": "YulBlock", - "src": "2966:241:1", + "src": "3311:277:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "3071:22:1", + "src": "3360:83:2", "statements": [ { "expression": { "arguments": [], "functionName": { - "name": "panic_error_0x41", + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "3073:16:1" + "src": "3362:77:2" }, "nodeType": "YulFunctionCall", - "src": "3073:18:1" + "src": "3362:79:2" }, "nodeType": "YulExpressionStatement", - "src": "3073:18:1" + "src": "3362:79:2" } ] }, "condition": { "arguments": [ { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3043:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3051:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "3040:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "3040:30:1" - }, - "nodeType": "YulIf", - "src": "3037:56:1" - }, - { - "nodeType": "YulAssignment", - "src": "3103:37:1", - "value": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3133:6:1" - } - ], + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3339:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3347:4:2", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3335:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3335:17:2" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3354:3:2" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3331:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3331:27:2" + } + ], "functionName": { - "name": "round_up_to_mul_of_32", + "name": "iszero", "nodeType": "YulIdentifier", - "src": "3111:21:1" + "src": "3324:6:2" }, "nodeType": "YulFunctionCall", - "src": "3111:29:1" + "src": "3324:35:2" }, - "variableNames": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "3103:4:1" - } - ] + "nodeType": "YulIf", + "src": "3321:122:2" }, { - "nodeType": "YulAssignment", - "src": "3177:23:1", + "nodeType": "YulVariableDeclaration", + "src": "3452:34:2", "value": { "arguments": [ { - "name": "size", + "name": "offset", "nodeType": "YulIdentifier", - "src": "3189:4:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3195:4:1", - "type": "", - "value": "0x20" + "src": "3479:6:2" } ], "functionName": { - "name": "add", + "name": "calldataload", "nodeType": "YulIdentifier", - "src": "3185:3:1" + "src": "3466:12:2" }, "nodeType": "YulFunctionCall", - "src": "3185:15:1" + "src": "3466:20:2" }, - "variableNames": [ + "variables": [ { - "name": "size", - "nodeType": "YulIdentifier", - "src": "3177:4:1" + "name": "length", + "nodeType": "YulTypedName", + "src": "3456:6:2", + "type": "" } ] - } - ] - }, - "name": "array_allocation_size_t_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "2950:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "2961:4:1", - "type": "" - } - ], - "src": "2900:307:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3264:103:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3287:3:1" - }, - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3292:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3297:6:1" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "3274:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "3274:30:1" - }, - "nodeType": "YulExpressionStatement", - "src": "3274:30:1" }, { - "expression": { + "nodeType": "YulAssignment", + "src": "3495:87:2", + "value": { "arguments": [ { "arguments": [ { - "name": "dst", + "name": "offset", "nodeType": "YulIdentifier", - "src": "3345:3:1" + "src": "3555:6:2" }, { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3350:6:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "3563:4:2", + "type": "", + "value": "0x20" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3341:3:1" + "src": "3551:3:2" }, "nodeType": "YulFunctionCall", - "src": "3341:16:1" + "src": "3551:17:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3359:1:1", - "type": "", - "value": "0" + "name": "length", + "nodeType": "YulIdentifier", + "src": "3570:6:2" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3578:3:2" } ], "functionName": { - "name": "mstore", + "name": "abi_decode_available_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "3334:6:1" + "src": "3504:46:2" }, "nodeType": "YulFunctionCall", - "src": "3334:27:1" + "src": "3504:78:2" }, - "nodeType": "YulExpressionStatement", - "src": "3334:27:1" + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3495:5:2" + } + ] } ] }, - "name": "copy_calldata_to_memory", + "name": "abi_decode_t_bytes_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "src", + "name": "offset", "nodeType": "YulTypedName", - "src": "3246:3:1", + "src": "3289:6:2", "type": "" }, { - "name": "dst", + "name": "end", "nodeType": "YulTypedName", - "src": "3251:3:1", + "src": "3297:3:2", "type": "" - }, + } + ], + "returnVariables": [ { - "name": "length", + "name": "array", "nodeType": "YulTypedName", - "src": "3256:6:1", + "src": "3305:5:2", "type": "" } ], - "src": "3213:154:1" + "src": "3250:338:2" }, { "body": { "nodeType": "YulBlock", - "src": "3456:327:1", + "src": "3720:831:2", "statements": [ { "nodeType": "YulAssignment", - "src": "3466:74:1", + "src": "3730:99:2", "value": { "arguments": [ { @@ -2549,31 +2675,48 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "3532:6:1" + "src": "3821:6:2" } ], "functionName": { - "name": "array_allocation_size_t_bytes_memory_ptr", + "name": "array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "3491:40:1" + "src": "3755:65:2" }, "nodeType": "YulFunctionCall", - "src": "3491:48:1" + "src": "3755:73:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "3475:15:1" + "src": "3739:15:2" }, "nodeType": "YulFunctionCall", - "src": "3475:65:1" + "src": "3739:90:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "3466:5:1" + "src": "3730:5:2" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3838:16:2", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3849:5:2" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "3842:3:2", + "type": "" } ] }, @@ -2583,39 +2726,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "3556:5:1" + "src": "3871:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "3563:6:1" + "src": "3878:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "3549:6:1" + "src": "3864:6:2" }, "nodeType": "YulFunctionCall", - "src": "3549:21:1" + "src": "3864:21:2" }, "nodeType": "YulExpressionStatement", - "src": "3549:21:1" + "src": "3864:21:2" }, { - "nodeType": "YulVariableDeclaration", - "src": "3579:27:1", + "nodeType": "YulAssignment", + "src": "3894:23:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "3594:5:1" + "src": "3905:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3601:4:1", + "src": "3912:4:2", "type": "", "value": "0x20" } @@ -2623,16 +2766,66 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3590:3:1" + "src": "3901:3:2" }, "nodeType": "YulFunctionCall", - "src": "3590:16:1" + "src": "3901:16:2" }, - "variables": [ + "variableNames": [ { "name": "dst", + "nodeType": "YulIdentifier", + "src": "3894:3:2" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3927:44:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3945:6:2" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3957:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3965:4:2", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "3953:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3953:17:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3941:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "3941:30:2" + }, + "variables": [ + { + "name": "srcEnd", "nodeType": "YulTypedName", - "src": "3583:3:1", + "src": "3931:6:2", "type": "" } ] @@ -2640,115 +2833,346 @@ { "body": { "nodeType": "YulBlock", - "src": "3644:83:1", + "src": "3999:103:2", "statements": [ { "expression": { "arguments": [], "functionName": { - "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", + "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", "nodeType": "YulIdentifier", - "src": "3646:77:1" + "src": "4013:77:2" }, "nodeType": "YulFunctionCall", - "src": "3646:79:1" + "src": "4013:79:2" }, "nodeType": "YulExpressionStatement", - "src": "3646:79:1" + "src": "4013:79:2" } ] }, "condition": { "arguments": [ { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3625:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3630:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3621:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "3621:16:1" + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "3986:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "3639:3:1" + "src": "3994:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "3618:2:1" + "src": "3983:2:2" }, "nodeType": "YulFunctionCall", - "src": "3618:25:1" + "src": "3983:15:2" }, "nodeType": "YulIf", - "src": "3615:112:1" + "src": "3980:122:2" }, { - "expression": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3760:3:1" - }, - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3765:3:1" - }, + "body": { + "nodeType": "YulBlock", + "src": "4187:358:2", + "statements": [ { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3770:6:1" - } - ], - "functionName": { - "name": "copy_calldata_to_memory", - "nodeType": "YulIdentifier", - "src": "3736:23:1" - }, - "nodeType": "YulFunctionCall", - "src": "3736:41:1" - }, - "nodeType": "YulExpressionStatement", - "src": "3736:41:1" - } - ] - }, - "name": "abi_decode_available_length_t_bytes_memory_ptr", + "nodeType": "YulVariableDeclaration", + "src": "4202:36:2", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4234:3:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4221:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "4221:17:2" + }, + "variables": [ + { + "name": "innerOffset", + "nodeType": "YulTypedName", + "src": "4206:11:2", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4290:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "nodeType": "YulIdentifier", + "src": "4292:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "4292:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "4292:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "innerOffset", + "nodeType": "YulIdentifier", + "src": "4257:11:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4270:18:2", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4254:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "4254:35:2" + }, + "nodeType": "YulIf", + "src": "4251:122:2" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4386:42:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4408:6:2" + }, + { + "name": "innerOffset", + "nodeType": "YulIdentifier", + "src": "4416:11:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4404:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4404:24:2" + }, + "variables": [ + { + "name": "elementPos", + "nodeType": "YulTypedName", + "src": "4390:10:2", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4449:3:2" + }, + { + "arguments": [ + { + "name": "elementPos", + "nodeType": "YulIdentifier", + "src": "4484:10:2" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4496:3:2" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "4454:29:2" + }, + "nodeType": "YulFunctionCall", + "src": "4454:46:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4442:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "4442:59:2" + }, + "nodeType": "YulExpressionStatement", + "src": "4442:59:2" + }, + { + "nodeType": "YulAssignment", + "src": "4514:21:2", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4525:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4530:4:2", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4521:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4521:14:2" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4514:3:2" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4140:3:2" + }, + { + "name": "srcEnd", + "nodeType": "YulIdentifier", + "src": "4145:6:2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4137:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "4137:15:2" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "4153:25:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4155:21:2", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4166:3:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4171:4:2", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4162:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "4162:14:2" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4155:3:2" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "4115:21:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "4117:17:2", + "value": { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4128:6:2" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "4121:3:2", + "type": "" + } + ] + } + ] + }, + "src": "4111:434:2" + } + ] + }, + "name": "abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "src", + "name": "offset", "nodeType": "YulTypedName", - "src": "3429:3:1", + "src": "3690:6:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "3434:6:1", + "src": "3698:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "3442:3:1", + "src": "3706:3:2", "type": "" } ], @@ -2756,21 +3180,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "3450:5:1", + "src": "3714:5:2", "type": "" } ], - "src": "3373:410:1" + "src": "3609:942:2" }, { "body": { "nodeType": "YulBlock", - "src": "3863:277:1", + "src": "4658:302:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "3912:83:1", + "src": "4707:83:2", "statements": [ { "expression": { @@ -2778,13 +3202,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "3914:77:1" + "src": "4709:77:2" }, "nodeType": "YulFunctionCall", - "src": "3914:79:1" + "src": "4709:79:2" }, "nodeType": "YulExpressionStatement", - "src": "3914:79:1" + "src": "4709:79:2" } ] }, @@ -2797,12 +3221,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "3891:6:1" + "src": "4686:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3899:4:1", + "src": "4694:4:2", "type": "", "value": "0x1f" } @@ -2810,68 +3234,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3887:3:1" + "src": "4682:3:2" }, "nodeType": "YulFunctionCall", - "src": "3887:17:1" + "src": "4682:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "3906:3:1" + "src": "4701:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "3883:3:1" + "src": "4678:3:2" }, "nodeType": "YulFunctionCall", - "src": "3883:27:1" + "src": "4678:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "3876:6:1" + "src": "4671:6:2" }, "nodeType": "YulFunctionCall", - "src": "3876:35:1" + "src": "4671:35:2" }, "nodeType": "YulIf", - "src": "3873:122:1" + "src": "4668:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "4004:34:1", + "src": "4799:34:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "4031:6:1" + "src": "4826:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "4018:12:1" + "src": "4813:12:2" }, "nodeType": "YulFunctionCall", - "src": "4018:20:1" + "src": "4813:20:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "4008:6:1", + "src": "4803:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "4047:87:1", + "src": "4842:112:2", "value": { "arguments": [ { @@ -2879,12 +3303,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "4107:6:1" + "src": "4927:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4115:4:1", + "src": "4935:4:2", "type": "", "value": "0x20" } @@ -2892,53 +3316,53 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4103:3:1" + "src": "4923:3:2" }, "nodeType": "YulFunctionCall", - "src": "4103:17:1" + "src": "4923:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "4122:6:1" + "src": "4942:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "4130:3:1" + "src": "4950:3:2" } ], "functionName": { - "name": "abi_decode_available_length_t_bytes_memory_ptr", + "name": "abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "4056:46:1" + "src": "4851:71:2" }, "nodeType": "YulFunctionCall", - "src": "4056:78:1" + "src": "4851:103:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "4047:5:1" + "src": "4842:5:2" } ] } ] }, - "name": "abi_decode_t_bytes_memory_ptr", + "name": "abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "3841:6:1", + "src": "4636:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "3849:3:1", + "src": "4644:3:2", "type": "" } ], @@ -2946,35 +3370,35 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "3857:5:1", + "src": "4652:5:2", "type": "" } ], - "src": "3802:338:1" + "src": "4572:388:2" }, { "body": { "nodeType": "YulBlock", - "src": "4285:942:1", + "src": "5093:693:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "4332:83:1", + "src": "5137:83:2", "statements": [ { "expression": { "arguments": [], "functionName": { - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", "nodeType": "YulIdentifier", - "src": "4334:77:1" + "src": "5139:77:2" }, "nodeType": "YulFunctionCall", - "src": "4334:79:1" + "src": "5139:79:2" }, "nodeType": "YulExpressionStatement", - "src": "4334:79:1" + "src": "5139:79:2" } ] }, @@ -2983,342 +3407,179 @@ { "arguments": [ { - "name": "dataEnd", + "name": "end", "nodeType": "YulIdentifier", - "src": "4306:7:1" + "src": "5114:3:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4315:9:1" + "src": "5119:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "4302:3:1" + "src": "5110:3:2" }, "nodeType": "YulFunctionCall", - "src": "4302:23:1" + "src": "5110:19:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4327:3:1", + "src": "5131:4:2", "type": "", - "value": "160" + "value": "0x40" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "4298:3:1" + "src": "5106:3:2" }, "nodeType": "YulFunctionCall", - "src": "4298:33:1" + "src": "5106:30:2" }, "nodeType": "YulIf", - "src": "4295:120:1" + "src": "5103:117:2" }, { - "nodeType": "YulBlock", - "src": "4425:115:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4440:15:1", - "value": { + "nodeType": "YulAssignment", + "src": "5229:30:2", + "value": { + "arguments": [ + { "kind": "number", "nodeType": "YulLiteral", - "src": "4454:1:1", + "src": "5254:4:2", "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "4444:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4469:61:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4502:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4513:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4498:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4498:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4522:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint8", - "nodeType": "YulIdentifier", - "src": "4479:18:1" - }, - "nodeType": "YulFunctionCall", - "src": "4479:51:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4469:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "4550:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4565:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4579:2:1", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "4569:6:1", - "type": "" - } - ] + "value": "0x40" + } + ], + "functionName": { + "name": "allocate_memory", + "nodeType": "YulIdentifier", + "src": "5238:15:2" }, + "nodeType": "YulFunctionCall", + "src": "5238:21:2" + }, + "variableNames": [ { - "nodeType": "YulAssignment", - "src": "4595:62:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4629:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4640:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4625:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "4625:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4649:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint16", - "nodeType": "YulIdentifier", - "src": "4605:19:1" - }, - "nodeType": "YulFunctionCall", - "src": "4605:52:1" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "4595:6:1" - } - ] + "name": "value", + "nodeType": "YulIdentifier", + "src": "5229:5:2" } ] }, { "nodeType": "YulBlock", - "src": "4677:118:1", + "src": "5269:151:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "4692:16:1", + "src": "5307:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "4706:2:1", + "src": "5321:1:2", "type": "", - "value": "64" + "value": "0" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "4696:6:1", + "src": "5311:6:2", "type": "" } ] }, { - "nodeType": "YulAssignment", - "src": "4722:63:1", - "value": { + "expression": { "arguments": [ { "arguments": [ { - "name": "headStart", + "name": "value", "nodeType": "YulIdentifier", - "src": "4757:9:1" + "src": "5347:5:2" }, { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "4768:6:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "5354:4:2", + "type": "", + "value": "0x00" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4753:3:1" + "src": "5343:3:2" }, "nodeType": "YulFunctionCall", - "src": "4753:22:1" + "src": "5343:16:2" }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4777:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_address", - "nodeType": "YulIdentifier", - "src": "4732:20:1" - }, - "nodeType": "YulFunctionCall", - "src": "4732:53:1" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "4722:6:1" - } - ] - } - ] - }, - { - "nodeType": "YulBlock", - "src": "4805:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "4820:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4834:2:1", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "4824:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "4850:62:1", - "value": { - "arguments": [ { "arguments": [ { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4884:9:1" + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5384:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5395:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5380:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5380:22:2" }, { - "name": "offset", + "name": "end", "nodeType": "YulIdentifier", - "src": "4895:6:1" + "src": "5404:3:2" } ], "functionName": { - "name": "add", + "name": "abi_decode_t_uint8", "nodeType": "YulIdentifier", - "src": "4880:3:1" + "src": "5361:18:2" }, "nodeType": "YulFunctionCall", - "src": "4880:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4904:7:1" + "src": "5361:47:2" } ], "functionName": { - "name": "abi_decode_t_uint64", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "4860:19:1" + "src": "5336:6:2" }, "nodeType": "YulFunctionCall", - "src": "4860:52:1" + "src": "5336:73:2" }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "4850:6:1" - } - ] + "nodeType": "YulExpressionStatement", + "src": "5336:73:2" } ] }, { "nodeType": "YulBlock", - "src": "4932:288:1", + "src": "5430:349:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "4947:47:1", + "src": "5469:46:2", "value": { "arguments": [ { @@ -3326,38 +3587,38 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "4978:9:1" + "src": "5500:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4989:3:1", + "src": "5511:2:2", "type": "", - "value": "128" + "value": "32" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4974:3:1" + "src": "5496:3:2" }, "nodeType": "YulFunctionCall", - "src": "4974:19:1" + "src": "5496:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "4961:12:1" + "src": "5483:12:2" }, "nodeType": "YulFunctionCall", - "src": "4961:33:1" + "src": "5483:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "4951:6:1", + "src": "5473:6:2", "type": "" } ] @@ -3365,21 +3626,21 @@ { "body": { "nodeType": "YulBlock", - "src": "5041:83:1", + "src": "5562:83:2", "statements": [ { "expression": { "arguments": [], "functionName": { - "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421", "nodeType": "YulIdentifier", - "src": "5043:77:1" + "src": "5564:77:2" }, "nodeType": "YulFunctionCall", - "src": "5043:79:1" + "src": "5564:79:2" }, "nodeType": "YulExpressionStatement", - "src": "5043:79:1" + "src": "5564:79:2" } ] }, @@ -3388,12 +3649,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "5013:6:1" + "src": "5534:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5021:18:1", + "src": "5542:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -3401,440 +3662,606 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "5010:2:1" + "src": "5531:2:2" }, "nodeType": "YulFunctionCall", - "src": "5010:30:1" + "src": "5531:30:2" }, "nodeType": "YulIf", - "src": "5007:117:1" + "src": "5528:117:2" }, { - "nodeType": "YulAssignment", - "src": "5138:72:1", - "value": { + "expression": { "arguments": [ { "arguments": [ { - "name": "headStart", + "name": "value", "nodeType": "YulIdentifier", - "src": "5182:9:1" + "src": "5670:5:2" }, { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "5193:6:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "5677:4:2", + "type": "", + "value": "0x20" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5178:3:1" + "src": "5666:3:2" }, "nodeType": "YulFunctionCall", - "src": "5178:22:1" + "src": "5666:16:2" }, { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "5202:7:1" + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5743:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5754:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5739:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5739:22:2" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5763:3:2" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "nodeType": "YulIdentifier", + "src": "5684:54:2" + }, + "nodeType": "YulFunctionCall", + "src": "5684:83:2" } ], "functionName": { - "name": "abi_decode_t_bytes_memory_ptr", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "5148:29:1" + "src": "5659:6:2" }, "nodeType": "YulFunctionCall", - "src": "5148:62:1" + "src": "5659:109:2" }, - "variableNames": [ - { - "name": "value4", - "nodeType": "YulIdentifier", - "src": "5138:6:1" - } - ] + "nodeType": "YulExpressionStatement", + "src": "5659:109:2" } ] } ] }, - "name": "abi_decode_tuple_t_uint8t_uint16t_addresst_uint64t_bytes_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$186_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "4223:9:1", + "src": "5068:9:2", "type": "" }, { - "name": "dataEnd", + "name": "end", "nodeType": "YulTypedName", - "src": "4234:7:1", + "src": "5079:3:2", "type": "" } ], "returnVariables": [ { - "name": "value0", + "name": "value", "nodeType": "YulTypedName", - "src": "4246:6:1", + "src": "5087:5:2", "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "4254:6:1", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "4262:6:1", - "type": "" - }, + } + ], + "src": "5008:778:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5837:81:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5847:65:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5862:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5869:42:2", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "5858:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "5858:54:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "5847:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ { - "name": "value3", + "name": "value", "nodeType": "YulTypedName", - "src": "4270:6:1", + "src": "5819:5:2", "type": "" - }, + } + ], + "returnVariables": [ { - "name": "value4", + "name": "cleaned", "nodeType": "YulTypedName", - "src": "4278:6:1", + "src": "5829:7:2", "type": "" } ], - "src": "4146:1081:1" + "src": "5792:126:2" }, { "body": { "nodeType": "YulBlock", - "src": "5265:28:1", + "src": "5969:51:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5275:12:1", + "src": "5979:35:2", "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "5282:5:1" + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6008:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "5990:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "5990:24:2" }, "variableNames": [ { - "name": "ret", + "name": "cleaned", "nodeType": "YulIdentifier", - "src": "5275:3:1" + "src": "5979:7:2" } ] } ] }, - "name": "identity", + "name": "cleanup_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "5251:5:1", + "src": "5951:5:2", "type": "" } ], "returnVariables": [ { - "name": "ret", + "name": "cleaned", "nodeType": "YulTypedName", - "src": "5261:3:1", + "src": "5961:7:2", "type": "" } ], - "src": "5233:60:1" + "src": "5924:96:2" }, { "body": { "nodeType": "YulBlock", - "src": "5359:82:1", + "src": "6069:79:2", "statements": [ { - "nodeType": "YulAssignment", - "src": "5369:66:1", - "value": { + "body": { + "nodeType": "YulBlock", + "src": "6126:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6135:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6138:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6128:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "6128:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "6128:12:2" + } + ] + }, + "condition": { "arguments": [ { "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6092:5:2" + }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5427:5:1" + "src": "6117:5:2" } ], "functionName": { - "name": "cleanup_t_uint160", + "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "5409:17:1" + "src": "6099:17:2" }, "nodeType": "YulFunctionCall", - "src": "5409:24:1" + "src": "6099:24:2" } ], "functionName": { - "name": "identity", + "name": "eq", "nodeType": "YulIdentifier", - "src": "5400:8:1" + "src": "6089:2:2" }, "nodeType": "YulFunctionCall", - "src": "5400:34:1" + "src": "6089:35:2" } ], "functionName": { - "name": "cleanup_t_uint160", + "name": "iszero", "nodeType": "YulIdentifier", - "src": "5382:17:1" + "src": "6082:6:2" }, "nodeType": "YulFunctionCall", - "src": "5382:53:1" + "src": "6082:43:2" }, - "variableNames": [ - { - "name": "converted", - "nodeType": "YulIdentifier", - "src": "5369:9:1" - } - ] + "nodeType": "YulIf", + "src": "6079:63:2" } ] }, - "name": "convert_t_uint160_to_t_uint160", + "name": "validator_revert_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "5339:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nodeType": "YulTypedName", - "src": "5349:9:1", + "src": "6062:5:2", "type": "" } ], - "src": "5299:142:1" + "src": "6026:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "5507:66:1", + "src": "6206:87:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5517:50:1", + "src": "6216:29:2", "value": { "arguments": [ { - "name": "value", + "name": "offset", "nodeType": "YulIdentifier", - "src": "5561:5:1" + "src": "6238:6:2" } ], "functionName": { - "name": "convert_t_uint160_to_t_uint160", + "name": "calldataload", "nodeType": "YulIdentifier", - "src": "5530:30:1" + "src": "6225:12:2" }, "nodeType": "YulFunctionCall", - "src": "5530:37:1" + "src": "6225:20:2" }, "variableNames": [ { - "name": "converted", + "name": "value", "nodeType": "YulIdentifier", - "src": "5517:9:1" + "src": "6216:5:2" } ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6281:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "6254:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "6254:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "6254:33:2" } ] }, - "name": "convert_t_uint160_to_t_address", + "name": "abi_decode_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "value", + "name": "offset", + "nodeType": "YulTypedName", + "src": "6184:6:2", + "type": "" + }, + { + "name": "end", "nodeType": "YulTypedName", - "src": "5487:5:1", + "src": "6192:3:2", "type": "" } ], "returnVariables": [ { - "name": "converted", + "name": "value", "nodeType": "YulTypedName", - "src": "5497:9:1", + "src": "6200:5:2", "type": "" } ], - "src": "5447:126:1" + "src": "6154:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "5659:66:1", + "src": "6343:57:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5669:50:1", + "src": "6353:41:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5713:5:1" + "src": "6368:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6375:18:2", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { - "name": "convert_t_uint160_to_t_address", + "name": "and", "nodeType": "YulIdentifier", - "src": "5682:30:1" + "src": "6364:3:2" }, "nodeType": "YulFunctionCall", - "src": "5682:37:1" + "src": "6364:30:2" }, "variableNames": [ { - "name": "converted", + "name": "cleaned", "nodeType": "YulIdentifier", - "src": "5669:9:1" + "src": "6353:7:2" } ] } ] }, - "name": "convert_t_contract$_XcmTransactor_$59_to_t_address", + "name": "cleanup_t_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "5639:5:1", + "src": "6325:5:2", "type": "" } ], "returnVariables": [ { - "name": "converted", + "name": "cleaned", "nodeType": "YulTypedName", - "src": "5649:9:1", + "src": "6335:7:2", "type": "" } ], - "src": "5579:146:1" + "src": "6299:101:2" }, { "body": { "nodeType": "YulBlock", - "src": "5816:86:1", + "src": "6448:78:2", "statements": [ { - "expression": { - "arguments": [ + "body": { + "nodeType": "YulBlock", + "src": "6504:16:2", + "statements": [ { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "5833:3:1" - }, + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6513:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6516:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6506:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "6506:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "6506:12:2" + } + ] + }, + "condition": { + "arguments": [ { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5889:5:1" + "src": "6471:5:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6495:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint64", + "nodeType": "YulIdentifier", + "src": "6478:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "6478:23:2" } ], "functionName": { - "name": "convert_t_contract$_XcmTransactor_$59_to_t_address", + "name": "eq", "nodeType": "YulIdentifier", - "src": "5838:50:1" + "src": "6468:2:2" }, "nodeType": "YulFunctionCall", - "src": "5838:57:1" + "src": "6468:34:2" } ], "functionName": { - "name": "mstore", + "name": "iszero", "nodeType": "YulIdentifier", - "src": "5826:6:1" + "src": "6461:6:2" }, "nodeType": "YulFunctionCall", - "src": "5826:70:1" + "src": "6461:42:2" }, - "nodeType": "YulExpressionStatement", - "src": "5826:70:1" + "nodeType": "YulIf", + "src": "6458:62:2" } ] }, - "name": "abi_encode_t_contract$_XcmTransactor_$59_to_t_address_fromStack", + "name": "validator_revert_t_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "5804:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "5811:3:1", + "src": "6441:5:2", "type": "" } ], - "src": "5731:171:1" + "src": "6406:120:2" }, { "body": { "nodeType": "YulBlock", - "src": "6026:144:1", + "src": "6583:86:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6036:26:1", + "src": "6593:29:2", "value": { "arguments": [ { - "name": "headStart", + "name": "offset", "nodeType": "YulIdentifier", - "src": "6048:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6059:2:1", - "type": "", - "value": "32" + "src": "6615:6:2" } ], "functionName": { - "name": "add", + "name": "calldataload", "nodeType": "YulIdentifier", - "src": "6044:3:1" + "src": "6602:12:2" }, "nodeType": "YulFunctionCall", - "src": "6044:18:1" + "src": "6602:20:2" }, "variableNames": [ { - "name": "tail", + "name": "value", "nodeType": "YulIdentifier", - "src": "6036:4:1" + "src": "6593:5:2" } ] }, @@ -3842,82 +4269,59 @@ "expression": { "arguments": [ { - "name": "value0", + "name": "value", "nodeType": "YulIdentifier", - "src": "6136:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6149:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6160:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6145:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "6145:17:1" + "src": "6657:5:2" } ], "functionName": { - "name": "abi_encode_t_contract$_XcmTransactor_$59_to_t_address_fromStack", + "name": "validator_revert_t_uint64", "nodeType": "YulIdentifier", - "src": "6072:63:1" + "src": "6631:25:2" }, "nodeType": "YulFunctionCall", - "src": "6072:91:1" + "src": "6631:32:2" }, "nodeType": "YulExpressionStatement", - "src": "6072:91:1" + "src": "6631:32:2" } ] }, - "name": "abi_encode_tuple_t_contract$_XcmTransactor_$59__to_t_address__fromStack_reversed", + "name": "abi_decode_t_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "headStart", + "name": "offset", "nodeType": "YulTypedName", - "src": "5998:9:1", + "src": "6561:6:2", "type": "" }, { - "name": "value0", + "name": "end", "nodeType": "YulTypedName", - "src": "6010:6:1", + "src": "6569:3:2", "type": "" } ], "returnVariables": [ { - "name": "tail", + "name": "value", "nodeType": "YulTypedName", - "src": "6021:4:1", + "src": "6577:5:2", "type": "" } ], - "src": "5908:262:1" + "src": "6532:137:2" }, { "body": { "nodeType": "YulBlock", - "src": "6241:262:1", + "src": "6830:1006:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "6287:83:1", + "src": "6877:83:2", "statements": [ { "expression": { @@ -3925,13 +4329,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "6289:77:1" + "src": "6879:77:2" }, "nodeType": "YulFunctionCall", - "src": "6289:79:1" + "src": "6879:79:2" }, "nodeType": "YulExpressionStatement", - "src": "6289:79:1" + "src": "6879:79:2" } ] }, @@ -3942,67 +4346,141 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6262:7:1" + "src": "6851:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6271:9:1" + "src": "6860:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "6258:3:1" + "src": "6847:3:2" }, "nodeType": "YulFunctionCall", - "src": "6258:23:1" + "src": "6847:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6283:2:1", + "src": "6872:3:2", "type": "", - "value": "32" + "value": "128" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "6254:3:1" + "src": "6843:3:2" }, "nodeType": "YulFunctionCall", - "src": "6254:32:1" + "src": "6843:33:2" }, "nodeType": "YulIf", - "src": "6251:119:1" + "src": "6840:120:2" }, { "nodeType": "YulBlock", - "src": "6380:116:1", + "src": "6970:307:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6395:15:1", + "src": "6985:45:2", "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6409:1:1", - "type": "", - "value": "0" + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7016:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7027:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7012:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7012:17:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "6999:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "6999:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "6399:6:1", + "src": "6989:6:2", "type": "" } ] }, + { + "body": { + "nodeType": "YulBlock", + "src": "7077:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulIdentifier", + "src": "7079:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "7079:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "7079:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7049:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7057:18:2", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "7046:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "7046:30:2" + }, + "nodeType": "YulIf", + "src": "7043:117:2" + }, { "nodeType": "YulAssignment", - "src": "6424:62:1", + "src": "7174:93:2", "value": { "arguments": [ { @@ -4010,1056 +4488,1112 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6458:9:1" + "src": "7239:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "6469:6:1" + "src": "7250:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6454:3:1" + "src": "7235:3:2" }, "nodeType": "YulFunctionCall", - "src": "6454:22:1" + "src": "7235:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6478:7:1" + "src": "7259:7:2" } ], "functionName": { - "name": "abi_decode_t_uint16", + "name": "abi_decode_t_struct$_Multilocation_$186_memory_ptr", "nodeType": "YulIdentifier", - "src": "6434:19:1" + "src": "7184:50:2" }, "nodeType": "YulFunctionCall", - "src": "6434:52:1" + "src": "7184:83:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "6424:6:1" + "src": "7174:6:2" } ] } ] - } - ] - }, - "name": "abi_decode_tuple_t_uint16", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "6211:9:1", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "6222:7:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "6234:6:1", - "type": "" - } - ], - "src": "6176:327:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6574:53:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "6591:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "6614:5:1" - } - ], - "functionName": { - "name": "cleanup_t_address", - "nodeType": "YulIdentifier", - "src": "6596:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "6596:24:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "6584:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "6584:37:1" - }, - "nodeType": "YulExpressionStatement", - "src": "6584:37:1" - } - ] - }, - "name": "abi_encode_t_address_to_t_address_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "6562:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "6569:3:1", - "type": "" - } - ], - "src": "6509:118:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "6731:124:1", - "statements": [ + }, { - "nodeType": "YulAssignment", - "src": "6741:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6753:9:1" - }, - { + "nodeType": "YulBlock", + "src": "7287:118:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7302:16:2", + "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "6764:2:1", + "src": "7316:2:2", "type": "", "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6749:3:1" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7306:6:2", + "type": "" + } + ] }, - "nodeType": "YulFunctionCall", - "src": "6749:18:1" - }, - "variableNames": [ { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6741:4:1" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "6821:6:1" - }, - { + "nodeType": "YulAssignment", + "src": "7332:63:2", + "value": { "arguments": [ { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6834:9:1" + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7367:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7378:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7363:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7363:22:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6845:1:1", - "type": "", - "value": "0" + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7387:7:2" } ], "functionName": { - "name": "add", + "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "6830:3:1" + "src": "7342:20:2" }, "nodeType": "YulFunctionCall", - "src": "6830:17:1" - } - ], - "functionName": { - "name": "abi_encode_t_address_to_t_address_fromStack", - "nodeType": "YulIdentifier", - "src": "6777:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "6777:71:1" - }, - "nodeType": "YulExpressionStatement", - "src": "6777:71:1" - } - ] + "src": "7342:53:2" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "7332:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "7415:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7430:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7444:2:2", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7434:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "7460:62:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7494:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7505:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7490:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7490:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7514:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64", + "nodeType": "YulIdentifier", + "src": "7470:19:2" + }, + "nodeType": "YulFunctionCall", + "src": "7470:52:2" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "7460:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "7542:287:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7557:46:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7588:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7599:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7584:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7584:18:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "7571:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "7571:32:2" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7561:6:2", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7650:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulIdentifier", + "src": "7652:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "7652:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "7652:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7622:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7630:18:2", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "7619:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "7619:30:2" + }, + "nodeType": "YulIf", + "src": "7616:117:2" + }, + { + "nodeType": "YulAssignment", + "src": "7747:72:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7791:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7802:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7787:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "7787:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7811:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "7757:29:2" + }, + "nodeType": "YulFunctionCall", + "src": "7757:62:2" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "7747:6:2" + } + ] + } + ] + } + ] }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "name": "abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptrt_addresst_uint64t_bytes_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "6703:9:1", + "src": "6776:9:2", "type": "" }, { - "name": "value0", + "name": "dataEnd", "nodeType": "YulTypedName", - "src": "6715:6:1", + "src": "6787:7:2", "type": "" } ], "returnVariables": [ { - "name": "tail", + "name": "value0", + "nodeType": "YulTypedName", + "src": "6799:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "6807:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "6815:6:2", + "type": "" + }, + { + "name": "value3", "nodeType": "YulTypedName", - "src": "6726:4:1", + "src": "6823:6:2", "type": "" } ], - "src": "6633:222:1" + "src": "6675:1161:2" }, { "body": { "nodeType": "YulBlock", - "src": "6950:28:1", + "src": "8027:1196:2", "statements": [ { - "expression": { + "body": { + "nodeType": "YulBlock", + "src": "8074:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "8076:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "8076:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "8076:79:2" + } + ] + }, + "condition": { "arguments": [ { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6967:1:1", - "type": "", - "value": "0" + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8048:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8057:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "8044:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8044:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6970:1:1", + "src": "8069:3:2", "type": "", - "value": "0" + "value": "128" } ], "functionName": { - "name": "revert", + "name": "slt", "nodeType": "YulIdentifier", - "src": "6960:6:1" + "src": "8040:3:2" }, "nodeType": "YulFunctionCall", - "src": "6960:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "6960:12:1" - } - ] - }, - "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", - "nodeType": "YulFunctionDefinition", - "src": "6861:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7073:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7090:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7093:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "7083:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "7083:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "7083:12:1" - } - ] - }, - "name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421", - "nodeType": "YulFunctionDefinition", - "src": "6984:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7198:229:1", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "7303:22:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "7305:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "7305:18:1" - }, - "nodeType": "YulExpressionStatement", - "src": "7305:18:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7275:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7283:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "7272:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "7272:30:1" + "src": "8040:33:2" }, "nodeType": "YulIf", - "src": "7269:56:1" + "src": "8037:120:2" }, { - "nodeType": "YulAssignment", - "src": "7335:25:1", - "value": { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7347:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7355:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "mul", - "nodeType": "YulIdentifier", - "src": "7343:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "7343:17:1" - }, - "variableNames": [ + "nodeType": "YulBlock", + "src": "8167:307:2", + "statements": [ { - "name": "size", - "nodeType": "YulIdentifier", - "src": "7335:4:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "7397:23:1", - "value": { - "arguments": [ - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "7409:4:1" + "nodeType": "YulVariableDeclaration", + "src": "8182:45:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8213:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8224:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8209:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8209:17:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8196:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "8196:31:2" }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7415:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7405:3:1" + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8186:6:2", + "type": "" + } + ] }, - "nodeType": "YulFunctionCall", - "src": "7405:15:1" - }, - "variableNames": [ { - "name": "size", - "nodeType": "YulIdentifier", - "src": "7397:4:1" - } - ] - } - ] - }, - "name": "array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7182:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "7193:4:1", - "type": "" - } - ], - "src": "7107:320:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7522:28:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7539:1:1", - "type": "", - "value": "0" + "body": { + "nodeType": "YulBlock", + "src": "8274:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulIdentifier", + "src": "8276:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "8276:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "8276:79:2" + } + ] }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7542:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "7532:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "7532:12:1" - }, - "nodeType": "YulExpressionStatement", - "src": "7532:12:1" - } - ] - }, - "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", - "nodeType": "YulFunctionDefinition", - "src": "7433:117:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7682:831:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "7692:99:1", - "value": { - "arguments": [ - { + "condition": { "arguments": [ { - "name": "length", + "name": "offset", "nodeType": "YulIdentifier", - "src": "7783:6:1" + "src": "8246:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8254:18:2", + "type": "", + "value": "0xffffffffffffffff" } ], "functionName": { - "name": "array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "name": "gt", "nodeType": "YulIdentifier", - "src": "7717:65:1" + "src": "8243:2:2" }, "nodeType": "YulFunctionCall", - "src": "7717:73:1" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "7701:15:1" + "src": "8243:30:2" + }, + "nodeType": "YulIf", + "src": "8240:117:2" }, - "nodeType": "YulFunctionCall", - "src": "7701:90:1" - }, - "variableNames": [ { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7692:5:1" + "nodeType": "YulAssignment", + "src": "8371:93:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8436:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8447:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8432:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8432:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8456:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Multilocation_$186_memory_ptr", + "nodeType": "YulIdentifier", + "src": "8381:50:2" + }, + "nodeType": "YulFunctionCall", + "src": "8381:83:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8371:6:2" + } + ] } ] }, { - "nodeType": "YulVariableDeclaration", - "src": "7800:16:1", - "value": { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7811:5:1" - }, - "variables": [ + "nodeType": "YulBlock", + "src": "8484:308:2", + "statements": [ { - "name": "dst", - "nodeType": "YulTypedName", - "src": "7804:3:1", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7833:5:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "7840:6:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "7826:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "7826:21:1" - }, - "nodeType": "YulExpressionStatement", - "src": "7826:21:1" - }, - { - "nodeType": "YulAssignment", - "src": "7856:23:1", - "value": { - "arguments": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "7867:5:1" + "nodeType": "YulVariableDeclaration", + "src": "8499:46:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8530:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8541:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8526:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8526:18:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8513:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "8513:32:2" }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "7874:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7863:3:1" + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8503:6:2", + "type": "" + } + ] }, - "nodeType": "YulFunctionCall", - "src": "7863:16:1" - }, - "variableNames": [ { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "7856:3:1" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "7889:44:1", - "value": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "7907:6:1" + "body": { + "nodeType": "YulBlock", + "src": "8592:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulIdentifier", + "src": "8594:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "8594:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "8594:79:2" + } + ] }, - { + "condition": { "arguments": [ { - "name": "length", + "name": "offset", "nodeType": "YulIdentifier", - "src": "7919:6:1" + "src": "8564:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7927:4:1", + "src": "8572:18:2", "type": "", - "value": "0x20" + "value": "0xffffffffffffffff" } ], "functionName": { - "name": "mul", + "name": "gt", "nodeType": "YulIdentifier", - "src": "7915:3:1" + "src": "8561:2:2" }, "nodeType": "YulFunctionCall", - "src": "7915:17:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "7903:3:1" + "src": "8561:30:2" + }, + "nodeType": "YulIf", + "src": "8558:117:2" }, - "nodeType": "YulFunctionCall", - "src": "7903:30:1" - }, - "variables": [ { - "name": "srcEnd", - "nodeType": "YulTypedName", - "src": "7893:6:1", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "7961:103:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", - "nodeType": "YulIdentifier", - "src": "7975:77:1" + "nodeType": "YulAssignment", + "src": "8689:93:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8754:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8765:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8750:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "8750:22:2" }, - "nodeType": "YulFunctionCall", - "src": "7975:79:1" + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8774:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Multilocation_$186_memory_ptr", + "nodeType": "YulIdentifier", + "src": "8699:50:2" }, - "nodeType": "YulExpressionStatement", - "src": "7975:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "7948:6:1" + "nodeType": "YulFunctionCall", + "src": "8699:83:2" }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "7956:3:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "7945:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "7945:15:1" - }, - "nodeType": "YulIf", - "src": "7942:122:1" + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "8689:6:2" + } + ] + } + ] }, { - "body": { - "nodeType": "YulBlock", - "src": "8149:358:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8164:36:1", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "8196:3:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "8183:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "8183:17:1" - }, - "variables": [ - { - "name": "innerOffset", - "nodeType": "YulTypedName", - "src": "8168:11:1", - "type": "" - } - ] + "nodeType": "YulBlock", + "src": "8802:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8817:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8831:2:2", + "type": "", + "value": "64" }, - { - "body": { - "nodeType": "YulBlock", - "src": "8252:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", - "nodeType": "YulIdentifier", - "src": "8254:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "8254:79:1" + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8821:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8847:62:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8881:9:2" }, - "nodeType": "YulExpressionStatement", - "src": "8254:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8892:6:2" + } + ], + "functionName": { + "name": "add", "nodeType": "YulIdentifier", - "src": "8219:11:1" + "src": "8877:3:2" }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8232:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "8216:2:1" + "nodeType": "YulFunctionCall", + "src": "8877:22:2" }, - "nodeType": "YulFunctionCall", - "src": "8216:35:1" + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8901:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64", + "nodeType": "YulIdentifier", + "src": "8857:19:2" }, - "nodeType": "YulIf", - "src": "8213:122:1" + "nodeType": "YulFunctionCall", + "src": "8857:52:2" }, - { - "nodeType": "YulVariableDeclaration", - "src": "8348:42:1", - "value": { - "arguments": [ - { - "name": "offset", + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "8847:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "8929:287:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8944:46:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8975:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8986:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", "nodeType": "YulIdentifier", - "src": "8370:6:1" + "src": "8971:3:2" }, - { - "name": "innerOffset", - "nodeType": "YulIdentifier", - "src": "8378:11:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8366:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "8366:24:1" - }, - "variables": [ - { - "name": "elementPos", - "nodeType": "YulTypedName", - "src": "8352:10:1", - "type": "" + "nodeType": "YulFunctionCall", + "src": "8971:18:2" } - ] + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8958:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "8958:32:2" }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "8411:3:1" - }, - { - "arguments": [ - { - "name": "elementPos", - "nodeType": "YulIdentifier", - "src": "8446:10:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "8458:3:1" - } - ], + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8948:6:2", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9037:83:2", + "statements": [ + { + "expression": { + "arguments": [], "functionName": { - "name": "abi_decode_t_bytes_memory_ptr", + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "8416:29:1" + "src": "9039:77:2" }, "nodeType": "YulFunctionCall", - "src": "8416:46:1" - } - ], - "functionName": { - "name": "mstore", + "src": "9039:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "9039:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", "nodeType": "YulIdentifier", - "src": "8404:6:1" + "src": "9009:6:2" }, - "nodeType": "YulFunctionCall", - "src": "8404:59:1" + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9017:18:2", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "9006:2:2" }, - "nodeType": "YulExpressionStatement", - "src": "8404:59:1" + "nodeType": "YulFunctionCall", + "src": "9006:30:2" }, - { - "nodeType": "YulAssignment", - "src": "8476:21:1", - "value": { - "arguments": [ - { - "name": "dst", + "nodeType": "YulIf", + "src": "9003:117:2" + }, + { + "nodeType": "YulAssignment", + "src": "9134:72:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9178:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9189:6:2" + } + ], + "functionName": { + "name": "add", "nodeType": "YulIdentifier", - "src": "8487:3:1" + "src": "9174:3:2" }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8492:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8483:3:1" + "nodeType": "YulFunctionCall", + "src": "9174:22:2" }, - "nodeType": "YulFunctionCall", - "src": "8483:14:1" - }, - "variableNames": [ { - "name": "dst", + "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "8476:3:1" + "src": "9198:7:2" } - ] - } - ] - }, - "condition": { + ], + "functionName": { + "name": "abi_decode_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "9144:29:2" + }, + "nodeType": "YulFunctionCall", + "src": "9144:62:2" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "9134:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptrt_struct$_Multilocation_$186_memory_ptrt_uint64t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7973:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "7984:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7996:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "8004:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "8012:6:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "8020:6:2", + "type": "" + } + ], + "src": "7842:1381:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9273:45:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9283:29:2", + "value": { "arguments": [ { - "name": "src", + "name": "value", "nodeType": "YulIdentifier", - "src": "8102:3:1" + "src": "9298:5:2" }, { - "name": "srcEnd", - "nodeType": "YulIdentifier", - "src": "8107:6:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "9305:6:2", + "type": "", + "value": "0xffff" } ], "functionName": { - "name": "lt", + "name": "and", "nodeType": "YulIdentifier", - "src": "8099:2:1" + "src": "9294:3:2" }, "nodeType": "YulFunctionCall", - "src": "8099:15:1" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "8115:25:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "8117:21:1", - "value": { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "8128:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8133:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8124:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "8124:14:1" - }, - "variableNames": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "8117:3:1" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "8077:21:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "8079:17:1", - "value": { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "8090:6:1" - }, - "variables": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "8083:3:1", - "type": "" - } - ] - } - ] + "src": "9294:18:2" }, - "src": "8073:434:1" + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "9283:7:2" + } + ] } ] }, - "name": "abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "name": "cleanup_t_uint16", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", - "nodeType": "YulTypedName", - "src": "7652:6:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "7660:6:1", - "type": "" - }, - { - "name": "end", + "name": "value", "nodeType": "YulTypedName", - "src": "7668:3:1", + "src": "9255:5:2", "type": "" } ], "returnVariables": [ { - "name": "array", + "name": "cleaned", "nodeType": "YulTypedName", - "src": "7676:5:1", + "src": "9265:7:2", "type": "" } ], - "src": "7571:942:1" + "src": "9229:89:2" }, { "body": { "nodeType": "YulBlock", - "src": "8620:302:1", + "src": "9366:78:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8669:83:1", + "src": "9422:16:2", "statements": [ { "expression": { - "arguments": [], + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9431:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9434:1:2", + "type": "", + "value": "0" + } + ], "functionName": { - "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", + "name": "revert", "nodeType": "YulIdentifier", - "src": "8671:77:1" + "src": "9424:6:2" }, "nodeType": "YulFunctionCall", - "src": "8671:79:1" + "src": "9424:12:2" }, "nodeType": "YulExpressionStatement", - "src": "8671:79:1" + "src": "9424:12:2" } ] }, @@ -5067,189 +5601,165 @@ "arguments": [ { "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9389:5:2" + }, { "arguments": [ { - "name": "offset", + "name": "value", "nodeType": "YulIdentifier", - "src": "8648:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8656:4:1", - "type": "", - "value": "0x1f" + "src": "9413:5:2" } ], "functionName": { - "name": "add", + "name": "cleanup_t_uint16", "nodeType": "YulIdentifier", - "src": "8644:3:1" + "src": "9396:16:2" }, "nodeType": "YulFunctionCall", - "src": "8644:17:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "8663:3:1" + "src": "9396:23:2" } ], "functionName": { - "name": "slt", + "name": "eq", "nodeType": "YulIdentifier", - "src": "8640:3:1" + "src": "9386:2:2" }, "nodeType": "YulFunctionCall", - "src": "8640:27:1" + "src": "9386:34:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "8633:6:1" + "src": "9379:6:2" }, "nodeType": "YulFunctionCall", - "src": "8633:35:1" + "src": "9379:42:2" }, "nodeType": "YulIf", - "src": "8630:122:1" - }, + "src": "9376:62:2" + } + ] + }, + "name": "validator_revert_t_uint16", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9359:5:2", + "type": "" + } + ], + "src": "9324:120:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9501:86:2", + "statements": [ { - "nodeType": "YulVariableDeclaration", - "src": "8761:34:1", + "nodeType": "YulAssignment", + "src": "9511:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "8788:6:1" + "src": "9533:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "8775:12:1" + "src": "9520:12:2" }, "nodeType": "YulFunctionCall", - "src": "8775:20:1" + "src": "9520:20:2" }, - "variables": [ + "variableNames": [ { - "name": "length", - "nodeType": "YulTypedName", - "src": "8765:6:1", - "type": "" + "name": "value", + "nodeType": "YulIdentifier", + "src": "9511:5:2" } ] }, { - "nodeType": "YulAssignment", - "src": "8804:112:1", - "value": { + "expression": { "arguments": [ { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "8889:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "8897:4:1", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "8885:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "8885:17:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "8904:6:1" - }, - { - "name": "end", + "name": "value", "nodeType": "YulIdentifier", - "src": "8912:3:1" + "src": "9575:5:2" } ], "functionName": { - "name": "abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "name": "validator_revert_t_uint16", "nodeType": "YulIdentifier", - "src": "8813:71:1" + "src": "9549:25:2" }, "nodeType": "YulFunctionCall", - "src": "8813:103:1" + "src": "9549:32:2" }, - "variableNames": [ - { - "name": "array", - "nodeType": "YulIdentifier", - "src": "8804:5:1" - } - ] + "nodeType": "YulExpressionStatement", + "src": "9549:32:2" } ] }, - "name": "abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_t_uint16", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "8598:6:1", + "src": "9479:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "8606:3:1", + "src": "9487:3:2", "type": "" } ], "returnVariables": [ { - "name": "array", + "name": "value", "nodeType": "YulTypedName", - "src": "8614:5:1", + "src": "9495:5:2", "type": "" } ], - "src": "8534:388:1" + "src": "9450:137:2" }, { "body": { "nodeType": "YulBlock", - "src": "9053:693:1", + "src": "9732:942:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "9097:83:1", + "src": "9779:83:2", "statements": [ { "expression": { "arguments": [], "functionName": { - "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "9099:77:1" + "src": "9781:77:2" }, "nodeType": "YulFunctionCall", - "src": "9099:79:1" + "src": "9781:79:2" }, "nodeType": "YulExpressionStatement", - "src": "9099:79:1" + "src": "9781:79:2" } ] }, @@ -5258,179 +5768,342 @@ { "arguments": [ { - "name": "end", + "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "9074:3:1" + "src": "9753:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9079:9:1" + "src": "9762:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "9070:3:1" + "src": "9749:3:2" }, "nodeType": "YulFunctionCall", - "src": "9070:19:1" + "src": "9749:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9091:4:1", + "src": "9774:3:2", "type": "", - "value": "0x40" + "value": "160" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "9066:3:1" + "src": "9745:3:2" }, "nodeType": "YulFunctionCall", - "src": "9066:30:1" + "src": "9745:33:2" }, "nodeType": "YulIf", - "src": "9063:117:1" + "src": "9742:120:2" }, { - "nodeType": "YulAssignment", - "src": "9189:30:1", - "value": { - "arguments": [ - { + "nodeType": "YulBlock", + "src": "9872:115:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "9887:15:2", + "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "9214:4:1", + "src": "9901:1:2", "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "allocate_memory", - "nodeType": "YulIdentifier", - "src": "9198:15:1" + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9891:6:2", + "type": "" + } + ] }, - "nodeType": "YulFunctionCall", - "src": "9198:21:1" - }, - "variableNames": [ { - "name": "value", - "nodeType": "YulIdentifier", - "src": "9189:5:1" + "nodeType": "YulAssignment", + "src": "9916:61:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9949:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9960:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9945:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "9945:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9969:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint8", + "nodeType": "YulIdentifier", + "src": "9926:18:2" + }, + "nodeType": "YulFunctionCall", + "src": "9926:51:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9916:6:2" + } + ] } ] }, { "nodeType": "YulBlock", - "src": "9229:151:1", + "src": "9997:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9267:15:1", + "src": "10012:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "9281:1:1", + "src": "10026:2:2", "type": "", - "value": "0" + "value": "32" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "9271:6:1", + "src": "10016:6:2", "type": "" } ] }, { - "expression": { + "nodeType": "YulAssignment", + "src": "10042:62:2", + "value": { "arguments": [ { "arguments": [ { - "name": "value", + "name": "headStart", "nodeType": "YulIdentifier", - "src": "9307:5:1" + "src": "10076:9:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9314:4:1", - "type": "", - "value": "0x00" + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10087:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9303:3:1" + "src": "10072:3:2" }, "nodeType": "YulFunctionCall", - "src": "9303:16:1" + "src": "10072:22:2" }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10096:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint16", + "nodeType": "YulIdentifier", + "src": "10052:19:2" + }, + "nodeType": "YulFunctionCall", + "src": "10052:52:2" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "10042:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "10124:118:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "10139:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10153:2:2", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10143:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10169:63:2", + "value": { + "arguments": [ { "arguments": [ { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9344:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "9355:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9340:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "9340:22:1" + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "10204:9:2" }, { - "name": "end", + "name": "offset", "nodeType": "YulIdentifier", - "src": "9364:3:1" + "src": "10215:6:2" } ], "functionName": { - "name": "abi_decode_t_uint8", + "name": "add", "nodeType": "YulIdentifier", - "src": "9321:18:1" + "src": "10200:3:2" }, "nodeType": "YulFunctionCall", - "src": "9321:47:1" + "src": "10200:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10224:7:2" } ], "functionName": { - "name": "mstore", + "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "9296:6:1" + "src": "10179:20:2" }, "nodeType": "YulFunctionCall", - "src": "9296:73:1" + "src": "10179:53:2" }, - "nodeType": "YulExpressionStatement", - "src": "9296:73:1" + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "10169:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "10252:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "10267:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10281:2:2", + "type": "", + "value": "96" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10271:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10297:62:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "10331:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10342:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10327:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "10327:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10351:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64", + "nodeType": "YulIdentifier", + "src": "10307:19:2" + }, + "nodeType": "YulFunctionCall", + "src": "10307:52:2" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "10297:6:2" + } + ] } ] }, { "nodeType": "YulBlock", - "src": "9390:349:1", + "src": "10379:288:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9429:46:1", + "src": "10394:47:2", "value": { "arguments": [ { @@ -5438,38 +6111,38 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9460:9:1" + "src": "10425:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9471:2:1", + "src": "10436:3:2", "type": "", - "value": "32" + "value": "128" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9456:3:1" + "src": "10421:3:2" }, "nodeType": "YulFunctionCall", - "src": "9456:18:1" + "src": "10421:19:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "9443:12:1" + "src": "10408:12:2" }, "nodeType": "YulFunctionCall", - "src": "9443:32:1" + "src": "10408:33:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "9433:6:1", + "src": "10398:6:2", "type": "" } ] @@ -5477,21 +6150,21 @@ { "body": { "nodeType": "YulBlock", - "src": "9522:83:1", + "src": "10488:83:2", "statements": [ { "expression": { "arguments": [], "functionName": { - "name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421", + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "9524:77:1" + "src": "10490:77:2" }, "nodeType": "YulFunctionCall", - "src": "9524:79:1" + "src": "10490:79:2" }, "nodeType": "YulExpressionStatement", - "src": "9524:79:1" + "src": "10490:79:2" } ] }, @@ -5500,12 +6173,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "9494:6:1" + "src": "10460:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9502:18:1", + "src": "10468:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -5513,653 +6186,608 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "9491:2:1" + "src": "10457:2:2" }, "nodeType": "YulFunctionCall", - "src": "9491:30:1" + "src": "10457:30:2" }, "nodeType": "YulIf", - "src": "9488:117:1" + "src": "10454:117:2" }, { - "expression": { + "nodeType": "YulAssignment", + "src": "10585:72:2", + "value": { "arguments": [ { "arguments": [ { - "name": "value", + "name": "headStart", "nodeType": "YulIdentifier", - "src": "9630:5:1" + "src": "10629:9:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9637:4:1", - "type": "", - "value": "0x20" + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10640:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9626:3:1" + "src": "10625:3:2" }, "nodeType": "YulFunctionCall", - "src": "9626:16:1" + "src": "10625:22:2" }, { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9703:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "9714:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "9699:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "9699:22:1" - }, - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "9723:3:1" - } - ], - "functionName": { - "name": "abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "nodeType": "YulIdentifier", - "src": "9644:54:1" - }, - "nodeType": "YulFunctionCall", - "src": "9644:83:1" + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10649:7:2" } ], "functionName": { - "name": "mstore", + "name": "abi_decode_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "9619:6:1" + "src": "10595:29:2" }, "nodeType": "YulFunctionCall", - "src": "9619:109:1" + "src": "10595:62:2" }, - "nodeType": "YulExpressionStatement", - "src": "9619:109:1" + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "10585:6:2" + } + ] } ] } ] }, - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_tuple_t_uint8t_uint16t_addresst_uint64t_bytes_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "9028:9:1", + "src": "9670:9:2", "type": "" }, { - "name": "end", + "name": "dataEnd", "nodeType": "YulTypedName", - "src": "9039:3:1", + "src": "9681:7:2", "type": "" } ], "returnVariables": [ { - "name": "value", + "name": "value0", + "nodeType": "YulTypedName", + "src": "9693:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "9701:6:2", + "type": "" + }, + { + "name": "value2", "nodeType": "YulTypedName", - "src": "9047:5:1", + "src": "9709:6:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "9717:6:2", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "9725:6:2", "type": "" } ], - "src": "8970:776:1" + "src": "9593:1081:2" }, { "body": { "nodeType": "YulBlock", - "src": "9919:1130:1", + "src": "10712:28:2", "statements": [ { - "body": { - "nodeType": "YulBlock", - "src": "9966:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", - "nodeType": "YulIdentifier", - "src": "9968:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "9968:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "9968:79:1" - } - ] + "nodeType": "YulAssignment", + "src": "10722:12:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10729:5:2" }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "9940:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "9949:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "9936:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "9936:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "9961:3:1", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", + "variableNames": [ + { + "name": "ret", "nodeType": "YulIdentifier", - "src": "9932:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "9932:33:1" - }, - "nodeType": "YulIf", - "src": "9929:120:1" - }, + "src": "10722:3:2" + } + ] + } + ] + }, + "name": "identity", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10698:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "ret", + "nodeType": "YulTypedName", + "src": "10708:3:2", + "type": "" + } + ], + "src": "10680:60:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10806:82:2", + "statements": [ { - "nodeType": "YulBlock", - "src": "10059:115:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "10074:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10088:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "10078:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "10103:61:1", - "value": { + "nodeType": "YulAssignment", + "src": "10816:66:2", + "value": { + "arguments": [ + { "arguments": [ { "arguments": [ { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10136:9:1" - }, - { - "name": "offset", + "name": "value", "nodeType": "YulIdentifier", - "src": "10147:6:1" + "src": "10874:5:2" } ], "functionName": { - "name": "add", + "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "10132:3:1" + "src": "10856:17:2" }, "nodeType": "YulFunctionCall", - "src": "10132:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "10156:7:1" + "src": "10856:24:2" } ], "functionName": { - "name": "abi_decode_t_uint8", + "name": "identity", "nodeType": "YulIdentifier", - "src": "10113:18:1" + "src": "10847:8:2" }, "nodeType": "YulFunctionCall", - "src": "10113:51:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "10103:6:1" - } - ] + "src": "10847:34:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "10829:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "10829:53:2" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "10816:9:2" } ] - }, + } + ] + }, + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10786:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "10796:9:2", + "type": "" + } + ], + "src": "10746:142:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10954:66:2", + "statements": [ { - "nodeType": "YulBlock", - "src": "10184:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "10199:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10213:2:1", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "10203:6:1", - "type": "" - } - ] + "nodeType": "YulAssignment", + "src": "10964:50:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11008:5:2" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_uint160", + "nodeType": "YulIdentifier", + "src": "10977:30:2" }, + "nodeType": "YulFunctionCall", + "src": "10977:37:2" + }, + "variableNames": [ { - "nodeType": "YulAssignment", - "src": "10229:62:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10263:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "10274:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10259:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "10259:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "10283:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_uint16", - "nodeType": "YulIdentifier", - "src": "10239:19:1" - }, - "nodeType": "YulFunctionCall", - "src": "10239:52:1" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "10229:6:1" - } - ] + "name": "converted", + "nodeType": "YulIdentifier", + "src": "10964:9:2" } ] - }, + } + ] + }, + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10934:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "10944:9:2", + "type": "" + } + ], + "src": "10894:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11107:66:2", + "statements": [ { - "nodeType": "YulBlock", - "src": "10311:306:1", - "statements": [ + "nodeType": "YulAssignment", + "src": "11117:50:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11161:5:2" + } + ], + "functionName": { + "name": "convert_t_uint160_to_t_address", + "nodeType": "YulIdentifier", + "src": "11130:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "11130:37:2" + }, + "variableNames": [ { - "nodeType": "YulVariableDeclaration", - "src": "10326:46:1", - "value": { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "11117:9:2" + } + ] + } + ] + }, + "name": "convert_t_contract$_XcmTransactor_$286_to_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11087:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "11097:9:2", + "type": "" + } + ], + "src": "11026:147:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11265:87:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11282:3:2" + }, + { "arguments": [ { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10357:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10368:2:1", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10353:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "10353:18:1" + "name": "value", + "nodeType": "YulIdentifier", + "src": "11339:5:2" } ], "functionName": { - "name": "calldataload", + "name": "convert_t_contract$_XcmTransactor_$286_to_t_address", "nodeType": "YulIdentifier", - "src": "10340:12:1" + "src": "11287:51:2" }, "nodeType": "YulFunctionCall", - "src": "10340:32:1" + "src": "11287:58:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11275:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "11275:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "11275:71:2" + } + ] + }, + "name": "abi_encode_t_contract$_XcmTransactor_$286_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11253:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "11260:3:2", + "type": "" + } + ], + "src": "11179:173:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11477:145:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11487:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11499:9:2" }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "10330:6:1", - "type": "" - } - ] + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11510:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11495:3:2" }, + "nodeType": "YulFunctionCall", + "src": "11495:18:2" + }, + "variableNames": [ { - "body": { - "nodeType": "YulBlock", - "src": "10419:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", - "nodeType": "YulIdentifier", - "src": "10421:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "10421:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "10421:79:1" - } - ] + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11487:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11588:6:2" }, - "condition": { + { "arguments": [ { - "name": "offset", + "name": "headStart", "nodeType": "YulIdentifier", - "src": "10391:6:1" + "src": "11601:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10399:18:1", + "src": "11612:1:2", "type": "", - "value": "0xffffffffffffffff" + "value": "0" } ], "functionName": { - "name": "gt", + "name": "add", "nodeType": "YulIdentifier", - "src": "10388:2:1" + "src": "11597:3:2" }, "nodeType": "YulFunctionCall", - "src": "10388:30:1" - }, - "nodeType": "YulIf", - "src": "10385:117:1" + "src": "11597:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_contract$_XcmTransactor_$286_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "11523:64:2" }, - { - "nodeType": "YulAssignment", - "src": "10516:91:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10579:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "10590:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10575:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "10575:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "10599:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", - "nodeType": "YulIdentifier", - "src": "10526:48:1" - }, - "nodeType": "YulFunctionCall", - "src": "10526:81:1" - }, - "variableNames": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "10516:6:1" - } - ] - } - ] - }, + "nodeType": "YulFunctionCall", + "src": "11523:92:2" + }, + "nodeType": "YulExpressionStatement", + "src": "11523:92:2" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_XcmTransactor_$286__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "11449:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "11461:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "11472:4:2", + "type": "" + } + ], + "src": "11358:264:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11693:262:2", + "statements": [ { - "nodeType": "YulBlock", - "src": "10627:117:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "10642:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10656:2:1", - "type": "", - "value": "96" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "10646:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "10672:62:1", - "value": { + "body": { + "nodeType": "YulBlock", + "src": "11739:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "11741:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "11741:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "11741:79:2" + } + ] + }, + "condition": { + "arguments": [ + { "arguments": [ { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10706:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "10717:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10702:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "10702:22:1" + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "11714:7:2" }, { - "name": "dataEnd", + "name": "headStart", "nodeType": "YulIdentifier", - "src": "10726:7:1" + "src": "11723:9:2" } ], "functionName": { - "name": "abi_decode_t_uint64", + "name": "sub", "nodeType": "YulIdentifier", - "src": "10682:19:1" + "src": "11710:3:2" }, "nodeType": "YulFunctionCall", - "src": "10682:52:1" + "src": "11710:23:2" }, - "variableNames": [ - { - "name": "value3", - "nodeType": "YulIdentifier", - "src": "10672:6:1" - } - ] - } - ] + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11735:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "11706:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "11706:32:2" + }, + "nodeType": "YulIf", + "src": "11703:119:2" }, { "nodeType": "YulBlock", - "src": "10754:288:1", + "src": "11832:116:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "10769:47:1", + "src": "11847:15:2", "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "10800:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10811:3:1", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "10796:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "10796:19:1" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "10783:12:1" - }, - "nodeType": "YulFunctionCall", - "src": "10783:33:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "11861:1:2", + "type": "", + "value": "0" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "10773:6:1", + "src": "11851:6:2", "type": "" } ] }, - { - "body": { - "nodeType": "YulBlock", - "src": "10863:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", - "nodeType": "YulIdentifier", - "src": "10865:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "10865:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "10865:79:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "10835:6:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "10843:18:1", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "10832:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "10832:30:1" - }, - "nodeType": "YulIf", - "src": "10829:117:1" - }, { "nodeType": "YulAssignment", - "src": "10960:72:1", + "src": "11876:62:2", "value": { "arguments": [ { @@ -6167,41 +6795,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11004:9:1" + "src": "11910:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "11015:6:1" + "src": "11921:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11000:3:1" + "src": "11906:3:2" }, "nodeType": "YulFunctionCall", - "src": "11000:22:1" + "src": "11906:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "11024:7:1" + "src": "11930:7:2" } ], "functionName": { - "name": "abi_decode_t_bytes_memory_ptr", + "name": "abi_decode_t_uint16", "nodeType": "YulIdentifier", - "src": "10970:29:1" + "src": "11886:19:2" }, "nodeType": "YulFunctionCall", - "src": "10970:62:1" + "src": "11886:52:2" }, "variableNames": [ { - "name": "value4", + "name": "value0", "nodeType": "YulIdentifier", - "src": "10960:6:1" + "src": "11876:6:2" } ] } @@ -6209,19 +6837,19 @@ } ] }, - "name": "abi_decode_tuple_t_uint8t_uint16t_struct$_Multilocation_$8_memory_ptrt_uint64t_bytes_memory_ptr", + "name": "abi_decode_tuple_t_uint16", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "9857:9:1", + "src": "11663:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "9868:7:1", + "src": "11674:7:2", "type": "" } ], @@ -6229,124 +6857,271 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "9880:6:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "9888:6:1", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "9896:6:1", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "9904:6:1", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "9912:6:1", + "src": "11686:6:2", "type": "" } ], - "src": "9752:1297:1" + "src": "11628:327:2" }, { "body": { "nodeType": "YulBlock", - "src": "11149:451:1", + "src": "12026:53:2", "statements": [ { - "body": { - "nodeType": "YulBlock", - "src": "11195:83:1", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", - "nodeType": "YulIdentifier", - "src": "11197:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "11197:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11197:79:1" - } - ] - }, - "condition": { + "expression": { "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12043:3:2" + }, { "arguments": [ { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "11170:7:1" - }, - { - "name": "headStart", + "name": "value", "nodeType": "YulIdentifier", - "src": "11179:9:1" + "src": "12066:5:2" } ], "functionName": { - "name": "sub", + "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "11166:3:1" + "src": "12048:17:2" }, "nodeType": "YulFunctionCall", - "src": "11166:23:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "11191:2:1", - "type": "", - "value": "32" + "src": "12048:24:2" } ], "functionName": { - "name": "slt", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "11162:3:1" + "src": "12036:6:2" }, "nodeType": "YulFunctionCall", - "src": "11162:32:1" + "src": "12036:37:2" }, - "nodeType": "YulIf", - "src": "11159:119:1" - }, - { - "nodeType": "YulBlock", - "src": "11288:305:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "11303:45:1", - "value": { - "arguments": [ - { - "arguments": [ + "nodeType": "YulExpressionStatement", + "src": "12036:37:2" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "12014:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "12021:3:2", + "type": "" + } + ], + "src": "11961:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12183:124:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12193:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12205:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12216:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12201:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12201:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "12193:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "12273:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12286:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12297:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12282:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12282:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "12229:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "12229:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12229:71:2" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "12155:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "12167:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "12178:4:2", + "type": "" + } + ], + "src": "12085:222:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12409:453:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "12455:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "12457:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "12457:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "12457:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "12430:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12439:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12426:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12426:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12451:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "12422:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "12422:32:2" + }, + "nodeType": "YulIf", + "src": "12419:119:2" + }, + { + "nodeType": "YulBlock", + "src": "12548:307:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12563:45:2", + "value": { + "arguments": [ + { + "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11334:9:1" + "src": "12594:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11345:1:1", + "src": "12605:1:2", "type": "", "value": "0" } @@ -6354,25 +7129,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11330:3:1" + "src": "12590:3:2" }, "nodeType": "YulFunctionCall", - "src": "11330:17:1" + "src": "12590:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "11317:12:1" + "src": "12577:12:2" }, "nodeType": "YulFunctionCall", - "src": "11317:31:1" + "src": "12577:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "11307:6:1", + "src": "12567:6:2", "type": "" } ] @@ -6380,7 +7155,7 @@ { "body": { "nodeType": "YulBlock", - "src": "11395:83:1", + "src": "12655:83:2", "statements": [ { "expression": { @@ -6388,13 +7163,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "11397:77:1" + "src": "12657:77:2" }, "nodeType": "YulFunctionCall", - "src": "11397:79:1" + "src": "12657:79:2" }, "nodeType": "YulExpressionStatement", - "src": "11397:79:1" + "src": "12657:79:2" } ] }, @@ -6403,12 +7178,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "11367:6:1" + "src": "12627:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11375:18:1", + "src": "12635:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -6416,17 +7191,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "11364:2:1" + "src": "12624:2:2" }, "nodeType": "YulFunctionCall", - "src": "11364:30:1" + "src": "12624:30:2" }, "nodeType": "YulIf", - "src": "11361:117:1" + "src": "12621:117:2" }, { "nodeType": "YulAssignment", - "src": "11492:91:1", + "src": "12752:93:2", "value": { "arguments": [ { @@ -6434,41 +7209,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11555:9:1" + "src": "12817:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "11566:6:1" + "src": "12828:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11551:3:1" + "src": "12813:3:2" }, "nodeType": "YulFunctionCall", - "src": "11551:22:1" + "src": "12813:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "11575:7:1" + "src": "12837:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$186_memory_ptr", "nodeType": "YulIdentifier", - "src": "11502:48:1" + "src": "12762:50:2" }, "nodeType": "YulFunctionCall", - "src": "11502:81:1" + "src": "12762:83:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "11492:6:1" + "src": "12752:6:2" } ] } @@ -6476,19 +7251,19 @@ } ] }, - "name": "abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "11119:9:1", + "src": "12379:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "11130:7:1", + "src": "12390:7:2", "type": "" } ], @@ -6496,91 +7271,30 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "11142:6:1", - "type": "" - } - ], - "src": "11055:545:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "11669:52:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "11686:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "11708:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint64", - "nodeType": "YulIdentifier", - "src": "11691:16:1" - }, - "nodeType": "YulFunctionCall", - "src": "11691:23:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "11679:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "11679:36:1" - }, - "nodeType": "YulExpressionStatement", - "src": "11679:36:1" - } - ] - }, - "name": "abi_encode_t_uint64_to_t_uint64_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "11657:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "11664:3:1", + "src": "12402:6:2", "type": "" } ], - "src": "11606:115:1" + "src": "12313:549:2" }, { "body": { "nodeType": "YulBlock", - "src": "11772:32:1", + "src": "12913:32:2", "statements": [ { "nodeType": "YulAssignment", - "src": "11782:16:1", + "src": "12923:16:2", "value": { "name": "value", "nodeType": "YulIdentifier", - "src": "11793:5:1" + "src": "12934:5:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "11782:7:1" + "src": "12923:7:2" } ] } @@ -6592,7 +7306,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "11754:5:1", + "src": "12895:5:2", "type": "" } ], @@ -6600,16 +7314,16 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "11764:7:1", + "src": "12905:7:2", "type": "" } ], - "src": "11727:77:1" + "src": "12868:77:2" }, { "body": { "nodeType": "YulBlock", - "src": "11875:53:1", + "src": "13016:53:2", "statements": [ { "expression": { @@ -6617,35 +7331,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "11892:3:1" + "src": "13033:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "11915:5:1" + "src": "13056:5:2" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "11897:17:1" + "src": "13038:17:2" }, "nodeType": "YulFunctionCall", - "src": "11897:24:1" + "src": "13038:24:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "11885:6:1" + "src": "13026:6:2" }, "nodeType": "YulFunctionCall", - "src": "11885:37:1" + "src": "13026:37:2" }, "nodeType": "YulExpressionStatement", - "src": "11885:37:1" + "src": "13026:37:2" } ] }, @@ -6655,54 +7369,54 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "11863:5:1", + "src": "13004:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "11870:3:1", + "src": "13011:3:2", "type": "" } ], - "src": "11810:118:1" + "src": "12951:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "12084:284:1", + "src": "13173:124:2", "statements": [ { "nodeType": "YulAssignment", - "src": "12094:26:1", + "src": "13183:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12106:9:1" + "src": "13195:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "12117:2:1", + "src": "13206:2:2", "type": "", - "value": "96" + "value": "32" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12102:3:1" + "src": "13191:3:2" }, "nodeType": "YulFunctionCall", - "src": "12102:18:1" + "src": "13191:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "12094:4:1" + "src": "13183:4:2" } ] }, @@ -6712,19 +7426,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "12172:6:1" + "src": "13263:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12185:9:1" + "src": "13276:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "12196:1:1", + "src": "13287:1:2", "type": "", "value": "0" } @@ -6732,136 +7446,38 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12181:3:1" + "src": "13272:3:2" }, "nodeType": "YulFunctionCall", - "src": "12181:17:1" + "src": "13272:17:2" } ], "functionName": { - "name": "abi_encode_t_uint64_to_t_uint64_fromStack", + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "12130:41:1" + "src": "13219:43:2" }, "nodeType": "YulFunctionCall", - "src": "12130:69:1" + "src": "13219:71:2" }, "nodeType": "YulExpressionStatement", - "src": "12130:69:1" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "12253:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12266:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12277:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12262:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "12262:18:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint256_to_t_uint256_fromStack", - "nodeType": "YulIdentifier", - "src": "12209:43:1" - }, - "nodeType": "YulFunctionCall", - "src": "12209:72:1" - }, - "nodeType": "YulExpressionStatement", - "src": "12209:72:1" - }, - { - "expression": { - "arguments": [ - { - "name": "value2", - "nodeType": "YulIdentifier", - "src": "12333:6:1" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "12346:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12357:2:1", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12342:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "12342:18:1" - } - ], - "functionName": { - "name": "abi_encode_t_uint64_to_t_uint64_fromStack", - "nodeType": "YulIdentifier", - "src": "12291:41:1" - }, - "nodeType": "YulFunctionCall", - "src": "12291:70:1" - }, - "nodeType": "YulExpressionStatement", - "src": "12291:70:1" + "src": "13219:71:2" } ] }, - "name": "abi_encode_tuple_t_uint64_t_uint256_t_uint64__to_t_uint64_t_uint256_t_uint64__fromStack_reversed", + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "12040:9:1", - "type": "" - }, - { - "name": "value2", - "nodeType": "YulTypedName", - "src": "12052:6:1", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "12060:6:1", + "src": "13145:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "12068:6:1", + "src": "13157:6:2", "type": "" } ], @@ -6869,768 +7485,742 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "12079:4:1", + "src": "13168:4:2", "type": "" } ], - "src": "11934:434:1" + "src": "13075:222:2" }, { "body": { "nodeType": "YulBlock", - "src": "12435:51:1", + "src": "13472:1132:2", "statements": [ { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12452:3:1" - }, + "body": { + "nodeType": "YulBlock", + "src": "13519:83:2", + "statements": [ { - "arguments": [ - { - "name": "value", + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "12473:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint8", - "nodeType": "YulIdentifier", - "src": "12457:15:1" + "src": "13521:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "13521:79:2" }, - "nodeType": "YulFunctionCall", - "src": "12457:22:1" + "nodeType": "YulExpressionStatement", + "src": "13521:79:2" } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12445:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "12445:35:1" + ] }, - "nodeType": "YulExpressionStatement", - "src": "12445:35:1" - } - ] - }, - "name": "abi_encode_t_uint8_to_t_uint8_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "12423:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "12430:3:1", - "type": "" - } - ], - "src": "12374:112:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12555:52:1", - "statements": [ - { - "expression": { + "condition": { "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12572:3:1" - }, { "arguments": [ { - "name": "value", + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "13493:7:2" + }, + { + "name": "headStart", "nodeType": "YulIdentifier", - "src": "12594:5:1" + "src": "13502:9:2" } ], "functionName": { - "name": "cleanup_t_uint16", + "name": "sub", "nodeType": "YulIdentifier", - "src": "12577:16:1" + "src": "13489:3:2" }, "nodeType": "YulFunctionCall", - "src": "12577:23:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "12565:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "12565:36:1" - }, - "nodeType": "YulExpressionStatement", - "src": "12565:36:1" - } - ] - }, - "name": "abi_encode_t_uint16_to_t_uint16_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "12543:5:1", - "type": "" - }, - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "12550:3:1", - "type": "" - } - ], - "src": "12492:115:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12671:40:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12682:22:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "12698:5:1" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "12692:5:1" - }, - "nodeType": "YulFunctionCall", - "src": "12692:12:1" - }, - "variableNames": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "12682:6:1" - } - ] - } - ] - }, - "name": "array_length_t_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "12654:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "12664:6:1", - "type": "" - } - ], - "src": "12613:98:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12812:73:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12829:3:1" + "src": "13489:23:2" }, { - "name": "length", - "nodeType": "YulIdentifier", - "src": "12834:6:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "13514:3:2", + "type": "", + "value": "160" } ], "functionName": { - "name": "mstore", + "name": "slt", "nodeType": "YulIdentifier", - "src": "12822:6:1" + "src": "13485:3:2" }, "nodeType": "YulFunctionCall", - "src": "12822:19:1" + "src": "13485:33:2" }, - "nodeType": "YulExpressionStatement", - "src": "12822:19:1" + "nodeType": "YulIf", + "src": "13482:120:2" }, { - "nodeType": "YulAssignment", - "src": "12850:29:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "12869:3:1" - }, - { + "nodeType": "YulBlock", + "src": "13612:115:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "13627:15:2", + "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "12874:4:1", + "src": "13641:1:2", "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12865:3:1" + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "13631:6:2", + "type": "" + } + ] }, - "nodeType": "YulFunctionCall", - "src": "12865:14:1" - }, - "variableNames": [ { - "name": "updated_pos", - "nodeType": "YulIdentifier", - "src": "12850:11:1" - } - ] - } - ] - }, - "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "12784:3:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "12789:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "updated_pos", - "nodeType": "YulTypedName", - "src": "12800:11:1", - "type": "" - } - ], - "src": "12717:168:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "12940:258:1", - "statements": [ + "nodeType": "YulAssignment", + "src": "13656:61:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13689:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "13700:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13685:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13685:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "13709:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint8", + "nodeType": "YulIdentifier", + "src": "13666:18:2" + }, + "nodeType": "YulFunctionCall", + "src": "13666:51:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "13656:6:2" + } + ] + } + ] + }, { - "nodeType": "YulVariableDeclaration", - "src": "12950:10:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "12959:1:1", - "type": "", - "value": "0" - }, - "variables": [ + "nodeType": "YulBlock", + "src": "13737:117:2", + "statements": [ { - "name": "i", - "nodeType": "YulTypedName", - "src": "12954:1:1", - "type": "" + "nodeType": "YulVariableDeclaration", + "src": "13752:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13766:2:2", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "13756:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "13782:62:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13816:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "13827:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13812:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "13812:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "13836:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint16", + "nodeType": "YulIdentifier", + "src": "13792:19:2" + }, + "nodeType": "YulFunctionCall", + "src": "13792:52:2" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "13782:6:2" + } + ] } ] }, { - "body": { - "nodeType": "YulBlock", - "src": "13019:63:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "13044:3:1" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "13049:1:1" - } - ], - "functionName": { - "name": "add", + "nodeType": "YulBlock", + "src": "13864:308:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "13879:46:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", "nodeType": "YulIdentifier", - "src": "13040:3:1" + "src": "13910:9:2" }, - "nodeType": "YulFunctionCall", - "src": "13040:11:1" + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13921:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13906:3:2" }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "13063:3:1" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "13068:1:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13059:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "13059:11:1" - } - ], + "nodeType": "YulFunctionCall", + "src": "13906:18:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "13893:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "13893:32:2" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "13883:6:2", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13972:83:2", + "statements": [ + { + "expression": { + "arguments": [], "functionName": { - "name": "mload", + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "13053:5:1" + "src": "13974:77:2" }, "nodeType": "YulFunctionCall", - "src": "13053:18:1" - } - ], - "functionName": { - "name": "mstore", + "src": "13974:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "13974:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", "nodeType": "YulIdentifier", - "src": "13033:6:1" + "src": "13944:6:2" }, - "nodeType": "YulFunctionCall", - "src": "13033:39:1" + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13952:18:2", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "13941:2:2" }, - "nodeType": "YulExpressionStatement", - "src": "13033:39:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "12980:1:1" + "nodeType": "YulFunctionCall", + "src": "13941:30:2" }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "12983:6:1" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "12977:2:1" + "nodeType": "YulIf", + "src": "13938:117:2" }, - "nodeType": "YulFunctionCall", - "src": "12977:13:1" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "12991:19:1", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "12993:15:1", - "value": { - "arguments": [ - { - "name": "i", + { + "nodeType": "YulAssignment", + "src": "14069:93:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14134:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "14145:6:2" + } + ], + "functionName": { + "name": "add", "nodeType": "YulIdentifier", - "src": "13002:1:1" + "src": "14130:3:2" }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13005:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "12998:3:1" + "nodeType": "YulFunctionCall", + "src": "14130:22:2" }, - "nodeType": "YulFunctionCall", - "src": "12998:10:1" - }, - "variableNames": [ { - "name": "i", + "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "12993:1:1" + "src": "14154:7:2" } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "12973:3:1", - "statements": [] - }, - "src": "12969:113:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13116:76:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "13166:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13171:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "13162:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "13162:16:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13180:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "13155:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "13155:27:1" + ], + "functionName": { + "name": "abi_decode_t_struct$_Multilocation_$186_memory_ptr", + "nodeType": "YulIdentifier", + "src": "14079:50:2" }, - "nodeType": "YulExpressionStatement", - "src": "13155:27:1" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "13097:1:1" + "nodeType": "YulFunctionCall", + "src": "14079:83:2" }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13100:6:1" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "13094:2:1" - }, - "nodeType": "YulFunctionCall", - "src": "13094:13:1" - }, - "nodeType": "YulIf", - "src": "13091:101:1" - } - ] - }, - "name": "copy_memory_to_memory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "12922:3:1", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "12927:3:1", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "12932:6:1", - "type": "" - } - ], - "src": "12891:307:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "13294:270:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "13304:52:1", - "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "13350:5:1" - } - ], - "functionName": { - "name": "array_length_t_bytes_memory_ptr", - "nodeType": "YulIdentifier", - "src": "13318:31:1" - }, - "nodeType": "YulFunctionCall", - "src": "13318:38:1" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "13308:6:1", - "type": "" + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "14069:6:2" + } + ] } ] }, { - "nodeType": "YulAssignment", - "src": "13365:77:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13430:3:1" + "nodeType": "YulBlock", + "src": "14182:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "14197:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14211:2:2", + "type": "", + "value": "96" }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13435:6:1" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack", - "nodeType": "YulIdentifier", - "src": "13372:57:1" + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "14201:6:2", + "type": "" + } + ] }, - "nodeType": "YulFunctionCall", - "src": "13372:70:1" - }, - "variableNames": [ { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13365:3:1" - } - ] - }, - { - "expression": { - "arguments": [ - { + "nodeType": "YulAssignment", + "src": "14227:62:2", + "value": { "arguments": [ { - "name": "value", - "nodeType": "YulIdentifier", - "src": "13477:5:1" + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14261:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "14272:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14257:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14257:22:2" }, { - "kind": "number", - "nodeType": "YulLiteral", - "src": "13484:4:1", - "type": "", - "value": "0x20" + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "14281:7:2" } ], "functionName": { - "name": "add", + "name": "abi_decode_t_uint64", "nodeType": "YulIdentifier", - "src": "13473:3:1" + "src": "14237:19:2" }, "nodeType": "YulFunctionCall", - "src": "13473:16:1" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "13491:3:1" + "src": "14237:52:2" }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "13496:6:1" - } - ], - "functionName": { - "name": "copy_memory_to_memory", - "nodeType": "YulIdentifier", - "src": "13451:21:1" - }, - "nodeType": "YulFunctionCall", - "src": "13451:52:1" - }, - "nodeType": "YulExpressionStatement", - "src": "13451:52:1" - }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "14227:6:2" + } + ] + } + ] + }, { - "nodeType": "YulAssignment", - "src": "13512:46:1", - "value": { + "nodeType": "YulBlock", + "src": "14309:288:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "14324:47:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14355:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14366:3:2", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14351:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14351:19:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "14338:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "14338:33:2" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "14328:6:2", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14418:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulIdentifier", + "src": "14420:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "14420:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "14420:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "14390:6:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14398:18:2", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "14387:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "14387:30:2" + }, + "nodeType": "YulIf", + "src": "14384:117:2" + }, + { + "nodeType": "YulAssignment", + "src": "14515:72:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14559:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "14570:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14555:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "14555:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "14579:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "14525:29:2" + }, + "nodeType": "YulFunctionCall", + "src": "14525:62:2" + }, + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "14515:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint8t_uint16t_struct$_Multilocation_$186_memory_ptrt_uint64t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "13410:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "13421:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "13433:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "13441:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "13449:6:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "13457:6:2", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "13465:6:2", + "type": "" + } + ], + "src": "13303:1301:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14673:52:2", + "statements": [ + { + "expression": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "13523:3:1" + "src": "14690:3:2" }, { "arguments": [ { - "name": "length", + "name": "value", "nodeType": "YulIdentifier", - "src": "13550:6:1" + "src": "14712:5:2" } ], "functionName": { - "name": "round_up_to_mul_of_32", + "name": "cleanup_t_uint64", "nodeType": "YulIdentifier", - "src": "13528:21:1" + "src": "14695:16:2" }, "nodeType": "YulFunctionCall", - "src": "13528:29:1" + "src": "14695:23:2" } ], "functionName": { - "name": "add", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "13519:3:1" + "src": "14683:6:2" }, "nodeType": "YulFunctionCall", - "src": "13519:39:1" + "src": "14683:36:2" }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "13512:3:1" - } - ] + "nodeType": "YulExpressionStatement", + "src": "14683:36:2" } ] }, - "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "13275:5:1", + "src": "14661:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "13282:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "13290:3:1", + "src": "14668:3:2", "type": "" } ], - "src": "13204:360:1" + "src": "14610:115:2" }, { "body": { "nodeType": "YulBlock", - "src": "13790:515:1", + "src": "14879:282:2", "statements": [ { "nodeType": "YulAssignment", - "src": "13800:27:1", + "src": "14889:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13812:9:1" + "src": "14901:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "13823:3:1", + "src": "14912:2:2", "type": "", - "value": "160" + "value": "96" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13808:3:1" + "src": "14897:3:2" }, "nodeType": "YulFunctionCall", - "src": "13808:19:1" + "src": "14897:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "13800:4:1" + "src": "14889:4:2" } ] }, @@ -7640,19 +8230,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "13877:6:1" + "src": "14967:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13890:9:1" + "src": "14980:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "13901:1:1", + "src": "14991:1:2", "type": "", "value": "0" } @@ -7660,22 +8250,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13886:3:1" + "src": "14976:3:2" }, "nodeType": "YulFunctionCall", - "src": "13886:17:1" + "src": "14976:17:2" } ], "functionName": { - "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "13837:39:1" + "src": "14925:41:2" }, "nodeType": "YulFunctionCall", - "src": "13837:67:1" + "src": "14925:69:2" }, "nodeType": "YulExpressionStatement", - "src": "13837:67:1" + "src": "14925:69:2" }, { "expression": { @@ -7683,19 +8273,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "13956:6:1" + "src": "15046:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13969:9:1" + "src": "15059:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "13980:2:1", + "src": "15070:2:2", "type": "", "value": "32" } @@ -7703,22 +8293,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13965:3:1" + "src": "15055:3:2" }, "nodeType": "YulFunctionCall", - "src": "13965:18:1" + "src": "15055:18:2" } ], "functionName": { - "name": "abi_encode_t_uint16_to_t_uint16_fromStack", + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "13914:41:1" + "src": "15004:41:2" }, "nodeType": "YulFunctionCall", - "src": "13914:70:1" + "src": "15004:70:2" }, "nodeType": "YulExpressionStatement", - "src": "13914:70:1" + "src": "15004:70:2" }, { "expression": { @@ -7726,19 +8316,19 @@ { "name": "value2", "nodeType": "YulIdentifier", - "src": "14038:6:1" + "src": "15126:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14051:9:1" + "src": "15139:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14062:2:1", + "src": "15150:2:2", "type": "", "value": "64" } @@ -7746,196 +8336,258 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14047:3:1" + "src": "15135:3:2" }, "nodeType": "YulFunctionCall", - "src": "14047:18:1" + "src": "15135:18:2" } ], "functionName": { - "name": "abi_encode_t_address_to_t_address_fromStack", + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "13994:43:1" + "src": "15084:41:2" }, "nodeType": "YulFunctionCall", - "src": "13994:72:1" + "src": "15084:70:2" }, "nodeType": "YulExpressionStatement", - "src": "13994:72:1" - }, + "src": "15084:70:2" + } + ] + }, + "name": "abi_encode_tuple_t_uint64_t_uint64_t_uint64__to_t_uint64_t_uint64_t_uint64__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "14835:9:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "14847:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "14855:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "14863:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "14874:4:2", + "type": "" + } + ], + "src": "14731:430:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15317:284:2", + "statements": [ { - "expression": { + "nodeType": "YulAssignment", + "src": "15327:26:2", + "value": { "arguments": [ { - "name": "value3", + "name": "headStart", "nodeType": "YulIdentifier", - "src": "14118:6:1" + "src": "15339:9:2" }, { - "arguments": [ - { - "name": "headStart", + "kind": "number", + "nodeType": "YulLiteral", + "src": "15350:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15335:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15335:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "15327:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "15405:6:2" + }, + { + "arguments": [ + { + "name": "headStart", "nodeType": "YulIdentifier", - "src": "14131:9:1" + "src": "15418:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14142:2:1", + "src": "15429:1:2", "type": "", - "value": "96" + "value": "0" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14127:3:1" + "src": "15414:3:2" }, "nodeType": "YulFunctionCall", - "src": "14127:18:1" + "src": "15414:17:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "14076:41:1" + "src": "15363:41:2" }, "nodeType": "YulFunctionCall", - "src": "14076:70:1" + "src": "15363:69:2" }, "nodeType": "YulExpressionStatement", - "src": "14076:70:1" + "src": "15363:69:2" }, { "expression": { "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "15486:6:2" + }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14167:9:1" + "src": "15499:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14178:3:1", + "src": "15510:2:2", "type": "", - "value": "128" + "value": "32" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14163:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "14163:19:1" - }, - { - "arguments": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14188:4:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14194:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14184:3:1" + "src": "15495:3:2" }, "nodeType": "YulFunctionCall", - "src": "14184:20:1" + "src": "15495:18:2" } ], "functionName": { - "name": "mstore", + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "14156:6:1" + "src": "15442:43:2" }, "nodeType": "YulFunctionCall", - "src": "14156:49:1" + "src": "15442:72:2" }, "nodeType": "YulExpressionStatement", - "src": "14156:49:1" + "src": "15442:72:2" }, { - "nodeType": "YulAssignment", - "src": "14214:84:1", - "value": { + "expression": { "arguments": [ { - "name": "value4", + "name": "value2", "nodeType": "YulIdentifier", - "src": "14284:6:1" + "src": "15566:6:2" }, { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14293:4:1" + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15579:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15590:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15575:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "15575:18:2" } ], "functionName": { - "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "14222:61:1" + "src": "15524:41:2" }, "nodeType": "YulFunctionCall", - "src": "14222:76:1" + "src": "15524:70:2" }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14214:4:1" - } - ] + "nodeType": "YulExpressionStatement", + "src": "15524:70:2" } ] }, - "name": "abi_encode_tuple_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed", + "name": "abi_encode_tuple_t_uint64_t_uint256_t_uint64__to_t_uint64_t_uint256_t_uint64__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "13730:9:1", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "13742:6:1", - "type": "" - }, - { - "name": "value3", - "nodeType": "YulTypedName", - "src": "13750:6:1", + "src": "15273:9:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "13758:6:1", + "src": "15285:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "13766:6:1", + "src": "15293:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "13774:6:1", + "src": "15301:6:2", "type": "" } ], @@ -7943,530 +8595,254 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "13785:4:1", + "src": "15312:4:2", "type": "" } ], - "src": "13570:735:1" + "src": "15167:434:2" }, { "body": { "nodeType": "YulBlock", - "src": "14407:122:1", + "src": "15658:51:2", "statements": [ - { - "nodeType": "YulAssignment", - "src": "14417:26:1", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14429:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14440:2:1", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14425:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "14425:18:1" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "14417:4:1" - } - ] - }, { "expression": { "arguments": [ { - "name": "value0", + "name": "pos", "nodeType": "YulIdentifier", - "src": "14495:6:1" + "src": "15675:3:2" }, { "arguments": [ { - "name": "headStart", + "name": "value", "nodeType": "YulIdentifier", - "src": "14508:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14519:1:1", - "type": "", - "value": "0" + "src": "15696:5:2" } ], "functionName": { - "name": "add", + "name": "cleanup_t_uint8", "nodeType": "YulIdentifier", - "src": "14504:3:1" + "src": "15680:15:2" }, "nodeType": "YulFunctionCall", - "src": "14504:17:1" + "src": "15680:22:2" } ], "functionName": { - "name": "abi_encode_t_uint16_to_t_uint16_fromStack", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "14453:41:1" + "src": "15668:6:2" }, "nodeType": "YulFunctionCall", - "src": "14453:69:1" + "src": "15668:35:2" }, "nodeType": "YulExpressionStatement", - "src": "14453:69:1" + "src": "15668:35:2" } ] }, - "name": "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed", + "name": "abi_encode_t_uint8_to_t_uint8", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "headStart", + "name": "value", "nodeType": "YulTypedName", - "src": "14379:9:1", + "src": "15646:5:2", "type": "" }, { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14391:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", + "name": "pos", "nodeType": "YulTypedName", - "src": "14402:4:1", + "src": "15653:3:2", "type": "" } ], - "src": "14311:218:1" + "src": "15607:102:2" }, { "body": { "nodeType": "YulBlock", - "src": "14598:80:1", + "src": "15798:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "14608:22:1", + "src": "15809:22:2", "value": { "arguments": [ { - "name": "offset", + "name": "value", "nodeType": "YulIdentifier", - "src": "14623:6:1" + "src": "15825:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "14617:5:1" + "src": "15819:5:2" }, "nodeType": "YulFunctionCall", - "src": "14617:13:1" + "src": "15819:12:2" }, "variableNames": [ { - "name": "value", + "name": "length", "nodeType": "YulIdentifier", - "src": "14608:5:1" + "src": "15809:6:2" } ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "14666:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_address", - "nodeType": "YulIdentifier", - "src": "14639:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "14639:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "14639:33:1" } ] }, - "name": "abi_decode_t_address_fromMemory", + "name": "array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", - "nodeType": "YulTypedName", - "src": "14576:6:1", - "type": "" - }, - { - "name": "end", + "name": "value", "nodeType": "YulTypedName", - "src": "14584:3:1", + "src": "15781:5:2", "type": "" } ], "returnVariables": [ { - "name": "value", + "name": "length", "nodeType": "YulTypedName", - "src": "14592:5:1", + "src": "15791:6:2", "type": "" } ], - "src": "14535:143:1" + "src": "15715:123:2" }, { "body": { "nodeType": "YulBlock", - "src": "14761:274:1", + "src": "15954:73:2", "statements": [ { - "body": { - "nodeType": "YulBlock", - "src": "14807:83:1", - "statements": [ + "expression": { + "arguments": [ { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", - "nodeType": "YulIdentifier", - "src": "14809:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "14809:79:1" - }, - "nodeType": "YulExpressionStatement", - "src": "14809:79:1" + "name": "pos", + "nodeType": "YulIdentifier", + "src": "15971:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "15976:6:2" } - ] + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15964:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "15964:19:2" }, - "condition": { + "nodeType": "YulExpressionStatement", + "src": "15964:19:2" + }, + { + "nodeType": "YulAssignment", + "src": "15992:29:2", + "value": { "arguments": [ { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "14782:7:1" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14791:9:1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "14778:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "14778:23:1" + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16011:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14803:2:1", + "src": "16016:4:2", "type": "", - "value": "32" + "value": "0x20" } ], "functionName": { - "name": "slt", + "name": "add", "nodeType": "YulIdentifier", - "src": "14774:3:1" + "src": "16007:3:2" }, "nodeType": "YulFunctionCall", - "src": "14774:32:1" + "src": "16007:14:2" }, - "nodeType": "YulIf", - "src": "14771:119:1" - }, - { - "nodeType": "YulBlock", - "src": "14900:128:1", - "statements": [ + "variableNames": [ { - "nodeType": "YulVariableDeclaration", - "src": "14915:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "14929:1:1", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "14919:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "14944:74:1", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "14990:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "15001:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "14986:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "14986:22:1" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "15010:7:1" - } - ], - "functionName": { - "name": "abi_decode_t_address_fromMemory", - "nodeType": "YulIdentifier", - "src": "14954:31:1" - }, - "nodeType": "YulFunctionCall", - "src": "14954:64:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "14944:6:1" - } - ] + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "15992:11:2" } ] } ] }, - "name": "abi_decode_tuple_t_address_fromMemory", + "name": "array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "headStart", + "name": "pos", "nodeType": "YulTypedName", - "src": "14731:9:1", + "src": "15926:3:2", "type": "" }, { - "name": "dataEnd", + "name": "length", "nodeType": "YulTypedName", - "src": "14742:7:1", + "src": "15931:6:2", "type": "" } ], "returnVariables": [ { - "name": "value0", - "nodeType": "YulTypedName", - "src": "14754:6:1", - "type": "" - } - ], - "src": "14684:351:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15092:51:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "15109:3:1" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "15130:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint8", - "nodeType": "YulIdentifier", - "src": "15114:15:1" - }, - "nodeType": "YulFunctionCall", - "src": "15114:22:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15102:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "15102:35:1" - }, - "nodeType": "YulExpressionStatement", - "src": "15102:35:1" - } - ] - }, - "name": "abi_encode_t_uint8_to_t_uint8", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "15080:5:1", - "type": "" - }, - { - "name": "pos", + "name": "updated_pos", "nodeType": "YulTypedName", - "src": "15087:3:1", + "src": "15942:11:2", "type": "" } ], - "src": "15041:102:1" + "src": "15844:183:2" }, { "body": { "nodeType": "YulBlock", - "src": "15232:40:1", + "src": "16114:60:2", "statements": [ { "nodeType": "YulAssignment", - "src": "15243:22:1", + "src": "16124:11:2", "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "15259:5:1" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "15253:5:1" - }, - "nodeType": "YulFunctionCall", - "src": "15253:12:1" + "name": "ptr", + "nodeType": "YulIdentifier", + "src": "16132:3:2" }, "variableNames": [ { - "name": "length", + "name": "data", "nodeType": "YulIdentifier", - "src": "15243:6:1" + "src": "16124:4:2" } ] - } - ] - }, - "name": "array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "15215:5:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "15225:6:1", - "type": "" - } - ], - "src": "15149:123:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "15388:73:1", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "15405:3:1" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "15410:6:1" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "15398:6:1" - }, - "nodeType": "YulFunctionCall", - "src": "15398:19:1" - }, - "nodeType": "YulExpressionStatement", - "src": "15398:19:1" }, { "nodeType": "YulAssignment", - "src": "15426:29:1", + "src": "16145:22:2", "value": { "arguments": [ { - "name": "pos", + "name": "ptr", "nodeType": "YulIdentifier", - "src": "15445:3:1" + "src": "16157:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "15450:4:1", + "src": "16162:4:2", "type": "", "value": "0x20" } @@ -8474,128 +8850,99 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "15441:3:1" + "src": "16153:3:2" }, "nodeType": "YulFunctionCall", - "src": "15441:14:1" + "src": "16153:14:2" }, "variableNames": [ { - "name": "updated_pos", + "name": "data", "nodeType": "YulIdentifier", - "src": "15426:11:1" + "src": "16145:4:2" } ] } ] }, - "name": "array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "name": "array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "pos", - "nodeType": "YulTypedName", - "src": "15360:3:1", - "type": "" - }, - { - "name": "length", + "name": "ptr", "nodeType": "YulTypedName", - "src": "15365:6:1", + "src": "16101:3:2", "type": "" } ], "returnVariables": [ { - "name": "updated_pos", + "name": "data", "nodeType": "YulTypedName", - "src": "15376:11:1", + "src": "16109:4:2", "type": "" } ], - "src": "15278:183:1" + "src": "16033:141:2" }, { "body": { "nodeType": "YulBlock", - "src": "15548:60:1", + "src": "16238:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "15558:11:1", - "value": { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "15566:3:1" - }, - "variableNames": [ - { - "name": "data", - "nodeType": "YulIdentifier", - "src": "15558:4:1" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "15579:22:1", + "src": "16249:22:2", "value": { "arguments": [ { - "name": "ptr", + "name": "value", "nodeType": "YulIdentifier", - "src": "15591:3:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "15596:4:1", - "type": "", - "value": "0x20" + "src": "16265:5:2" } ], "functionName": { - "name": "add", + "name": "mload", "nodeType": "YulIdentifier", - "src": "15587:3:1" + "src": "16259:5:2" }, "nodeType": "YulFunctionCall", - "src": "15587:14:1" + "src": "16259:12:2" }, "variableNames": [ { - "name": "data", + "name": "length", "nodeType": "YulIdentifier", - "src": "15579:4:1" + "src": "16249:6:2" } ] } ] }, - "name": "array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "name": "array_length_t_bytes_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "ptr", + "name": "value", "nodeType": "YulTypedName", - "src": "15535:3:1", + "src": "16221:5:2", "type": "" } ], "returnVariables": [ { - "name": "data", + "name": "length", "nodeType": "YulTypedName", - "src": "15543:4:1", + "src": "16231:6:2", "type": "" } ], - "src": "15467:141:1" + "src": "16180:98:2" }, { "body": { "nodeType": "YulBlock", - "src": "15699:73:1", + "src": "16369:73:2", "statements": [ { "expression": { @@ -8603,39 +8950,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "15716:3:1" + "src": "16386:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "15721:6:1" + "src": "16391:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "15709:6:1" + "src": "16379:6:2" }, "nodeType": "YulFunctionCall", - "src": "15709:19:1" + "src": "16379:19:2" }, "nodeType": "YulExpressionStatement", - "src": "15709:19:1" + "src": "16379:19:2" }, { "nodeType": "YulAssignment", - "src": "15737:29:1", + "src": "16407:29:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "15756:3:1" + "src": "16426:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "15761:4:1", + "src": "16431:4:2", "type": "", "value": "0x20" } @@ -8643,16 +8990,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "15752:3:1" + "src": "16422:3:2" }, "nodeType": "YulFunctionCall", - "src": "15752:14:1" + "src": "16422:14:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "15737:11:1" + "src": "16407:11:2" } ] } @@ -8664,13 +9011,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "15671:3:1", + "src": "16341:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "15676:6:1", + "src": "16346:6:2", "type": "" } ], @@ -8678,91 +9025,359 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "15687:11:1", + "src": "16357:11:2", "type": "" } ], - "src": "15614:158:1" + "src": "16284:158:2" }, { "body": { "nodeType": "YulBlock", - "src": "15858:260:1", + "src": "16497:258:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "15868:52:1", + "src": "16507:10:2", "value": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "15914:5:1" - } - ], - "functionName": { - "name": "array_length_t_bytes_memory_ptr", - "nodeType": "YulIdentifier", - "src": "15882:31:1" - }, - "nodeType": "YulFunctionCall", - "src": "15882:38:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "16516:1:2", + "type": "", + "value": "0" }, "variables": [ { - "name": "length", + "name": "i", "nodeType": "YulTypedName", - "src": "15872:6:1", + "src": "16511:1:2", "type": "" } ] }, { - "nodeType": "YulAssignment", - "src": "15929:67:1", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "15984:3:1" - }, + "body": { + "nodeType": "YulBlock", + "src": "16576:63:2", + "statements": [ { - "name": "length", - "nodeType": "YulIdentifier", - "src": "15989:6:1" - } - ], - "functionName": { - "name": "array_storeLengthForEncoding_t_bytes_memory_ptr", - "nodeType": "YulIdentifier", - "src": "15936:47:1" - }, - "nodeType": "YulFunctionCall", - "src": "15936:60:1" - }, - "variableNames": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "15929:3:1" - } - ] - }, - { - "expression": { - "arguments": [ + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "16601:3:2" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "16606:1:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16597:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16597:11:2" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "16620:3:2" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "16625:1:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16616:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16616:11:2" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16610:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "16610:18:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16590:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "16590:39:2" + }, + "nodeType": "YulExpressionStatement", + "src": "16590:39:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "16537:1:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "16540:6:2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "16534:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "16534:13:2" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "16548:19:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16550:15:2", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "16559:1:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16562:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16555:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16555:10:2" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "16550:1:2" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "16530:3:2", + "statements": [] + }, + "src": "16526:113:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16673:76:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "16723:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "16728:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16719:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "16719:16:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16737:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16712:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "16712:27:2" + }, + "nodeType": "YulExpressionStatement", + "src": "16712:27:2" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "16654:1:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "16657:6:2" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "16651:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "16651:13:2" + }, + "nodeType": "YulIf", + "src": "16648:101:2" + } + ] + }, + "name": "copy_memory_to_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "16479:3:2", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "16484:3:2", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "16489:6:2", + "type": "" + } + ], + "src": "16448:307:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16841:260:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "16851:52:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16897:5:2" + } + ], + "functionName": { + "name": "array_length_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "16865:31:2" + }, + "nodeType": "YulFunctionCall", + "src": "16865:38:2" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "16855:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "16912:67:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16967:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "16972:6:2" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr", + "nodeType": "YulIdentifier", + "src": "16919:47:2" + }, + "nodeType": "YulFunctionCall", + "src": "16919:60:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "16912:3:2" + } + ] + }, + { + "expression": { + "arguments": [ { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "16031:5:1" + "src": "17014:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16038:4:1", + "src": "17021:4:2", "type": "", "value": "0x20" } @@ -8770,73 +9385,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16027:3:1" + "src": "17010:3:2" }, "nodeType": "YulFunctionCall", - "src": "16027:16:1" + "src": "17010:16:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "16045:3:1" + "src": "17028:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "16050:6:1" + "src": "17033:6:2" } ], "functionName": { "name": "copy_memory_to_memory", "nodeType": "YulIdentifier", - "src": "16005:21:1" + "src": "16988:21:2" }, "nodeType": "YulFunctionCall", - "src": "16005:52:1" + "src": "16988:52:2" }, "nodeType": "YulExpressionStatement", - "src": "16005:52:1" + "src": "16988:52:2" }, { "nodeType": "YulAssignment", - "src": "16066:46:1", + "src": "17049:46:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "16077:3:1" + "src": "17060:3:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "16104:6:1" + "src": "17087:6:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "16082:21:1" + "src": "17065:21:2" }, "nodeType": "YulFunctionCall", - "src": "16082:29:1" + "src": "17065:29:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16073:3:1" + "src": "17056:3:2" }, "nodeType": "YulFunctionCall", - "src": "16073:39:1" + "src": "17056:39:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "16066:3:1" + "src": "17049:3:2" } ] } @@ -8848,13 +9463,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "15839:5:1", + "src": "16822:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "15846:3:1", + "src": "16829:3:2", "type": "" } ], @@ -8862,46 +9477,46 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "15854:3:1", + "src": "16837:3:2", "type": "" } ], - "src": "15778:340:1" + "src": "16761:340:2" }, { "body": { "nodeType": "YulBlock", - "src": "16222:94:1", + "src": "17205:94:2", "statements": [ { "nodeType": "YulAssignment", - "src": "16232:78:1", + "src": "17215:78:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "16298:6:1" + "src": "17281:6:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "16306:3:1" + "src": "17289:3:2" } ], "functionName": { "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "16246:51:1" + "src": "17229:51:2" }, "nodeType": "YulFunctionCall", - "src": "16246:64:1" + "src": "17229:64:2" }, "variableNames": [ { "name": "updatedPos", "nodeType": "YulIdentifier", - "src": "16232:10:1" + "src": "17215:10:2" } ] } @@ -8913,13 +9528,13 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "16195:6:1", + "src": "17178:6:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "16203:3:1", + "src": "17186:3:2", "type": "" } ], @@ -8927,31 +9542,31 @@ { "name": "updatedPos", "nodeType": "YulTypedName", - "src": "16211:10:1", + "src": "17194:10:2", "type": "" } ], - "src": "16124:192:1" + "src": "17107:192:2" }, { "body": { "nodeType": "YulBlock", - "src": "16406:38:1", + "src": "17389:38:2", "statements": [ { "nodeType": "YulAssignment", - "src": "16416:22:1", + "src": "17399:22:2", "value": { "arguments": [ { "name": "ptr", "nodeType": "YulIdentifier", - "src": "16428:3:1" + "src": "17411:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16433:4:1", + "src": "17416:4:2", "type": "", "value": "0x20" } @@ -8959,16 +9574,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16424:3:1" + "src": "17407:3:2" }, "nodeType": "YulFunctionCall", - "src": "16424:14:1" + "src": "17407:14:2" }, "variableNames": [ { "name": "next", "nodeType": "YulIdentifier", - "src": "16416:4:1" + "src": "17399:4:2" } ] } @@ -8980,7 +9595,7 @@ { "name": "ptr", "nodeType": "YulTypedName", - "src": "16393:3:1", + "src": "17376:3:2", "type": "" } ], @@ -8988,115 +9603,115 @@ { "name": "next", "nodeType": "YulTypedName", - "src": "16401:4:1", + "src": "17384:4:2", "type": "" } ], - "src": "16322:122:1" + "src": "17305:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "16608:831:1", + "src": "17591:831:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "16618:77:1", + "src": "17601:77:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "16689:5:1" + "src": "17672:5:2" } ], "functionName": { "name": "array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "16632:56:1" + "src": "17615:56:2" }, "nodeType": "YulFunctionCall", - "src": "16632:63:1" + "src": "17615:63:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "16622:6:1", + "src": "17605:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "16704:92:1", + "src": "17687:92:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "16784:3:1" + "src": "17767:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "16789:6:1" + "src": "17772:6:2" } ], "functionName": { "name": "array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "16711:72:1" + "src": "17694:72:2" }, "nodeType": "YulFunctionCall", - "src": "16711:85:1" + "src": "17694:85:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "16704:3:1" + "src": "17687:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "16805:20:1", + "src": "17788:20:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "16822:3:1" + "src": "17805:3:2" }, "variables": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "16809:9:1", + "src": "17792:9:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "16834:39:1", + "src": "17817:39:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "16850:3:1" + "src": "17833:3:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "16859:6:1" + "src": "17842:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16867:4:1", + "src": "17850:4:2", "type": "", "value": "0x20" } @@ -9104,70 +9719,70 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "16855:3:1" + "src": "17838:3:2" }, "nodeType": "YulFunctionCall", - "src": "16855:17:1" + "src": "17838:17:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16846:3:1" + "src": "17829:3:2" }, "nodeType": "YulFunctionCall", - "src": "16846:27:1" + "src": "17829:27:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "16838:4:1", + "src": "17821:4:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "16882:80:1", + "src": "17865:80:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "16956:5:1" + "src": "17939:5:2" } ], "functionName": { "name": "array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "16897:58:1" + "src": "17880:58:2" }, "nodeType": "YulFunctionCall", - "src": "16897:65:1" + "src": "17880:65:2" }, "variables": [ { "name": "baseRef", "nodeType": "YulTypedName", - "src": "16886:7:1", + "src": "17869:7:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "16971:21:1", + "src": "17954:21:2", "value": { "name": "baseRef", "nodeType": "YulIdentifier", - "src": "16985:7:1" + "src": "17968:7:2" }, "variables": [ { "name": "srcPtr", "nodeType": "YulTypedName", - "src": "16975:6:1", + "src": "17958:6:2", "type": "" } ] @@ -9175,7 +9790,7 @@ { "body": { "nodeType": "YulBlock", - "src": "17061:333:1", + "src": "18044:333:2", "statements": [ { "expression": { @@ -9183,142 +9798,142 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "17082:3:1" + "src": "18065:3:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "17091:4:1" + "src": "18074:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "17097:9:1" + "src": "18080:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "17087:3:1" + "src": "18070:3:2" }, "nodeType": "YulFunctionCall", - "src": "17087:20:1" + "src": "18070:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "17075:6:1" + "src": "18058:6:2" }, "nodeType": "YulFunctionCall", - "src": "17075:33:1" + "src": "18058:33:2" }, "nodeType": "YulExpressionStatement", - "src": "17075:33:1" + "src": "18058:33:2" }, { "nodeType": "YulVariableDeclaration", - "src": "17121:34:1", + "src": "18104:34:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "17148:6:1" + "src": "18131:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "17142:5:1" + "src": "18125:5:2" }, "nodeType": "YulFunctionCall", - "src": "17142:13:1" + "src": "18125:13:2" }, "variables": [ { "name": "elementValue0", "nodeType": "YulTypedName", - "src": "17125:13:1", + "src": "18108:13:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "17168:90:1", + "src": "18151:90:2", "value": { "arguments": [ { "name": "elementValue0", "nodeType": "YulIdentifier", - "src": "17238:13:1" + "src": "18221:13:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "17253:4:1" + "src": "18236:4:2" } ], "functionName": { "name": "abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "17176:61:1" + "src": "18159:61:2" }, "nodeType": "YulFunctionCall", - "src": "17176:82:1" + "src": "18159:82:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "17168:4:1" + "src": "18151:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "17271:79:1", + "src": "18254:79:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "17343:6:1" + "src": "18326:6:2" } ], "functionName": { "name": "array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "17281:61:1" + "src": "18264:61:2" }, "nodeType": "YulFunctionCall", - "src": "17281:69:1" + "src": "18264:69:2" }, "variableNames": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "17271:6:1" + "src": "18254:6:2" } ] }, { "nodeType": "YulAssignment", - "src": "17363:21:1", + "src": "18346:21:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "17374:3:1" + "src": "18357:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17379:4:1", + "src": "18362:4:2", "type": "", "value": "0x20" } @@ -9326,16 +9941,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17370:3:1" + "src": "18353:3:2" }, "nodeType": "YulFunctionCall", - "src": "17370:14:1" + "src": "18353:14:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "17363:3:1" + "src": "18346:3:2" } ] } @@ -9346,41 +9961,41 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "17023:1:1" + "src": "18006:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "17026:6:1" + "src": "18009:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "17020:2:1" + "src": "18003:2:2" }, "nodeType": "YulFunctionCall", - "src": "17020:13:1" + "src": "18003:13:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "17034:18:1", + "src": "18017:18:2", "statements": [ { "nodeType": "YulAssignment", - "src": "17036:14:1", + "src": "18019:14:2", "value": { "arguments": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "17045:1:1" + "src": "18028:1:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17048:1:1", + "src": "18031:1:2", "type": "", "value": "1" } @@ -9388,16 +10003,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17041:3:1" + "src": "18024:3:2" }, "nodeType": "YulFunctionCall", - "src": "17041:9:1" + "src": "18024:9:2" }, "variableNames": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "17036:1:1" + "src": "18019:1:2" } ] } @@ -9405,15 +10020,15 @@ }, "pre": { "nodeType": "YulBlock", - "src": "17005:14:1", + "src": "17988:14:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "17007:10:1", + "src": "17990:10:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "17016:1:1", + "src": "17999:1:2", "type": "", "value": "0" }, @@ -9421,44 +10036,44 @@ { "name": "i", "nodeType": "YulTypedName", - "src": "17011:1:1", + "src": "17994:1:2", "type": "" } ] } ] }, - "src": "17001:393:1" + "src": "17984:393:2" }, { "nodeType": "YulAssignment", - "src": "17403:11:1", + "src": "18386:11:2", "value": { "name": "tail", "nodeType": "YulIdentifier", - "src": "17410:4:1" + "src": "18393:4:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "17403:3:1" + "src": "18386:3:2" } ] }, { "nodeType": "YulAssignment", - "src": "17423:10:1", + "src": "18406:10:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "17430:3:1" + "src": "18413:3:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "17423:3:1" + "src": "18406:3:2" } ] } @@ -9470,13 +10085,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "16587:5:1", + "src": "17570:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "16594:3:1", + "src": "17577:3:2", "type": "" } ], @@ -9484,31 +10099,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "16603:3:1", + "src": "17586:3:2", "type": "" } ], - "src": "16476:963:1" + "src": "17459:963:2" }, { "body": { "nodeType": "YulBlock", - "src": "17655:533:1", + "src": "18642:533:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "17665:26:1", + "src": "18652:26:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "17681:3:1" + "src": "18668:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17686:4:1", + "src": "18673:4:2", "type": "", "value": "0x40" } @@ -9516,27 +10131,27 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17677:3:1" + "src": "18664:3:2" }, "nodeType": "YulFunctionCall", - "src": "17677:14:1" + "src": "18664:14:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "17669:4:1", + "src": "18656:4:2", "type": "" } ] }, { "nodeType": "YulBlock", - "src": "17701:163:1", + "src": "18688:163:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "17739:43:1", + "src": "18726:43:2", "value": { "arguments": [ { @@ -9544,12 +10159,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "17769:5:1" + "src": "18756:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17776:4:1", + "src": "18763:4:2", "type": "", "value": "0x00" } @@ -9557,25 +10172,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17765:3:1" + "src": "18752:3:2" }, "nodeType": "YulFunctionCall", - "src": "17765:16:1" + "src": "18752:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "17759:5:1" + "src": "18746:5:2" }, "nodeType": "YulFunctionCall", - "src": "17759:23:1" + "src": "18746:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "17743:12:1", + "src": "18730:12:2", "type": "" } ] @@ -9586,19 +10201,19 @@ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "17825:12:1" + "src": "18812:12:2" }, { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "17843:3:1" + "src": "18830:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17848:4:1", + "src": "18835:4:2", "type": "", "value": "0x00" } @@ -9606,32 +10221,32 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17839:3:1" + "src": "18826:3:2" }, "nodeType": "YulFunctionCall", - "src": "17839:14:1" + "src": "18826:14:2" } ], "functionName": { "name": "abi_encode_t_uint8_to_t_uint8", "nodeType": "YulIdentifier", - "src": "17795:29:1" + "src": "18782:29:2" }, "nodeType": "YulFunctionCall", - "src": "17795:59:1" + "src": "18782:59:2" }, "nodeType": "YulExpressionStatement", - "src": "17795:59:1" + "src": "18782:59:2" } ] }, { "nodeType": "YulBlock", - "src": "17874:287:1", + "src": "18861:287:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "17913:43:1", + "src": "18900:43:2", "value": { "arguments": [ { @@ -9639,12 +10254,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "17943:5:1" + "src": "18930:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17950:4:1", + "src": "18937:4:2", "type": "", "value": "0x20" } @@ -9652,25 +10267,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17939:3:1" + "src": "18926:3:2" }, "nodeType": "YulFunctionCall", - "src": "17939:16:1" + "src": "18926:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "17933:5:1" + "src": "18920:5:2" }, "nodeType": "YulFunctionCall", - "src": "17933:23:1" + "src": "18920:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "17917:12:1", + "src": "18904:12:2", "type": "" } ] @@ -9683,12 +10298,12 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "17981:3:1" + "src": "18968:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17986:4:1", + "src": "18973:4:2", "type": "", "value": "0x20" } @@ -9696,73 +10311,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17977:3:1" + "src": "18964:3:2" }, "nodeType": "YulFunctionCall", - "src": "17977:14:1" + "src": "18964:14:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "17997:4:1" + "src": "18984:4:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "18003:3:1" + "src": "18990:3:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "17993:3:1" + "src": "18980:3:2" }, "nodeType": "YulFunctionCall", - "src": "17993:14:1" + "src": "18980:14:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "17970:6:1" + "src": "18957:6:2" }, "nodeType": "YulFunctionCall", - "src": "17970:38:1" + "src": "18957:38:2" }, "nodeType": "YulExpressionStatement", - "src": "17970:38:1" + "src": "18957:38:2" }, { "nodeType": "YulAssignment", - "src": "18021:129:1", + "src": "19008:129:2", "value": { "arguments": [ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "18131:12:1" + "src": "19118:12:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "18145:4:1" + "src": "19132:4:2" } ], "functionName": { "name": "abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "18029:101:1" + "src": "19016:101:2" }, "nodeType": "YulFunctionCall", - "src": "18029:121:1" + "src": "19016:121:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "18021:4:1" + "src": "19008:4:2" } ] } @@ -9770,35 +10385,35 @@ }, { "nodeType": "YulAssignment", - "src": "18171:11:1", + "src": "19158:11:2", "value": { "name": "tail", "nodeType": "YulIdentifier", - "src": "18178:4:1" + "src": "19165:4:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "18171:3:1" + "src": "19158:3:2" } ] } ] }, - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "17634:5:1", + "src": "18621:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "17641:3:1", + "src": "18628:3:2", "type": "" } ], @@ -9806,136 +10421,326 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "17650:3:1", + "src": "18637:3:2", "type": "" } ], - "src": "17525:663:1" + "src": "18508:667:2" }, { "body": { "nodeType": "YulBlock", - "src": "18470:622:1", + "src": "19276:73:2", "statements": [ { - "nodeType": "YulAssignment", - "src": "18480:27:1", - "value": { + "expression": { "arguments": [ { - "name": "headStart", + "name": "pos", "nodeType": "YulIdentifier", - "src": "18492:9:1" + "src": "19293:3:2" }, { - "kind": "number", + "name": "length", + "nodeType": "YulIdentifier", + "src": "19298:6:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19286:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "19286:19:2" + }, + "nodeType": "YulExpressionStatement", + "src": "19286:19:2" + }, + { + "nodeType": "YulAssignment", + "src": "19314:29:2", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "19333:3:2" + }, + { + "kind": "number", "nodeType": "YulLiteral", - "src": "18503:3:1", + "src": "19338:4:2", "type": "", - "value": "160" + "value": "0x20" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18488:3:1" + "src": "19329:3:2" }, "nodeType": "YulFunctionCall", - "src": "18488:19:1" + "src": "19329:14:2" }, "variableNames": [ { - "name": "tail", + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "19314:11:2" + } + ] + } + ] + }, + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "19248:3:2", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "19253:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "19264:11:2", + "type": "" + } + ], + "src": "19181:168:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19445:270:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "19455:52:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19501:5:2" + } + ], + "functionName": { + "name": "array_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "18480:4:1" + "src": "19469:31:2" + }, + "nodeType": "YulFunctionCall", + "src": "19469:38:2" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "19459:6:2", + "type": "" } ] }, { - "expression": { + "nodeType": "YulAssignment", + "src": "19516:77:2", + "value": { "arguments": [ { - "name": "value0", + "name": "pos", "nodeType": "YulIdentifier", - "src": "18557:6:1" + "src": "19581:3:2" }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "19586:6:2" + } + ], + "functionName": { + "name": "array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "19523:57:2" + }, + "nodeType": "YulFunctionCall", + "src": "19523:70:2" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "19516:3:2" + } + ] + }, + { + "expression": { + "arguments": [ { "arguments": [ { - "name": "headStart", + "name": "value", "nodeType": "YulIdentifier", - "src": "18570:9:1" + "src": "19628:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18581:1:1", + "src": "19635:4:2", "type": "", - "value": "0" + "value": "0x20" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18566:3:1" + "src": "19624:3:2" }, "nodeType": "YulFunctionCall", - "src": "18566:17:1" + "src": "19624:16:2" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "19642:3:2" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "19647:6:2" } ], "functionName": { - "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "name": "copy_memory_to_memory", "nodeType": "YulIdentifier", - "src": "18517:39:1" + "src": "19602:21:2" }, "nodeType": "YulFunctionCall", - "src": "18517:67:1" + "src": "19602:52:2" }, "nodeType": "YulExpressionStatement", - "src": "18517:67:1" + "src": "19602:52:2" }, { - "expression": { + "nodeType": "YulAssignment", + "src": "19663:46:2", + "value": { "arguments": [ { - "name": "value1", + "name": "pos", "nodeType": "YulIdentifier", - "src": "18636:6:1" + "src": "19674:3:2" }, { "arguments": [ { - "name": "headStart", + "name": "length", "nodeType": "YulIdentifier", - "src": "18649:9:1" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "18660:2:1", - "type": "", - "value": "32" + "src": "19701:6:2" } ], "functionName": { - "name": "add", + "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "18645:3:1" + "src": "19679:21:2" }, "nodeType": "YulFunctionCall", - "src": "18645:18:1" + "src": "19679:29:2" } ], "functionName": { - "name": "abi_encode_t_uint16_to_t_uint16_fromStack", + "name": "add", "nodeType": "YulIdentifier", - "src": "18594:41:1" + "src": "19670:3:2" }, "nodeType": "YulFunctionCall", - "src": "18594:70:1" + "src": "19670:39:2" }, - "nodeType": "YulExpressionStatement", - "src": "18594:70:1" + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "19663:3:2" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "19426:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "19433:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "19441:3:2", + "type": "" + } + ], + "src": "19355:360:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19979:549:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "19989:27:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20001:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20012:3:2", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19997:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "19997:19:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "19989:4:2" + } + ] }, { "expression": { @@ -9945,86 +10750,86 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "18685:9:1" + "src": "20037:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18696:2:1", + "src": "20048:1:2", "type": "", - "value": "64" + "value": "0" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18681:3:1" + "src": "20033:3:2" }, "nodeType": "YulFunctionCall", - "src": "18681:18:1" + "src": "20033:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "18705:4:1" + "src": "20056:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "18711:9:1" + "src": "20062:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "18701:3:1" + "src": "20052:3:2" }, "nodeType": "YulFunctionCall", - "src": "18701:20:1" + "src": "20052:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "18674:6:1" + "src": "20026:6:2" }, "nodeType": "YulFunctionCall", - "src": "18674:48:1" + "src": "20026:47:2" }, "nodeType": "YulExpressionStatement", - "src": "18674:48:1" + "src": "20026:47:2" }, { "nodeType": "YulAssignment", - "src": "18731:122:1", + "src": "20082:126:2", "value": { "arguments": [ { - "name": "value2", + "name": "value0", "nodeType": "YulIdentifier", - "src": "18839:6:1" + "src": "20194:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "18848:4:1" + "src": "20203:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "18739:99:1" + "src": "20090:103:2" }, "nodeType": "YulFunctionCall", - "src": "18739:114:1" + "src": "20090:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "18731:4:1" + "src": "20082:4:2" } ] }, @@ -10032,44 +10837,87 @@ "expression": { "arguments": [ { - "name": "value3", + "name": "value1", "nodeType": "YulIdentifier", - "src": "18905:6:1" + "src": "20262:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "18918:9:1" + "src": "20275:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18929:2:1", + "src": "20286:2:2", "type": "", - "value": "96" + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20271:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "20271:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "20218:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "20218:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "20218:72:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20342:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20355:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20366:2:2", + "type": "", + "value": "64" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18914:3:1" + "src": "20351:3:2" }, "nodeType": "YulFunctionCall", - "src": "18914:18:1" + "src": "20351:18:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "18863:41:1" + "src": "20300:41:2" }, "nodeType": "YulFunctionCall", - "src": "18863:70:1" + "src": "20300:70:2" }, "nodeType": "YulExpressionStatement", - "src": "18863:70:1" + "src": "20300:70:2" }, { "expression": { @@ -10079,128 +10927,122 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "18954:9:1" + "src": "20391:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18965:3:1", + "src": "20402:2:2", "type": "", - "value": "128" + "value": "96" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18950:3:1" + "src": "20387:3:2" }, "nodeType": "YulFunctionCall", - "src": "18950:19:1" + "src": "20387:18:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "18975:4:1" + "src": "20411:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "18981:9:1" + "src": "20417:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "18971:3:1" + "src": "20407:3:2" }, "nodeType": "YulFunctionCall", - "src": "18971:20:1" + "src": "20407:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "18943:6:1" + "src": "20380:6:2" }, "nodeType": "YulFunctionCall", - "src": "18943:49:1" + "src": "20380:48:2" }, "nodeType": "YulExpressionStatement", - "src": "18943:49:1" + "src": "20380:48:2" }, { "nodeType": "YulAssignment", - "src": "19001:84:1", + "src": "20437:84:2", "value": { "arguments": [ { - "name": "value4", + "name": "value3", "nodeType": "YulIdentifier", - "src": "19071:6:1" + "src": "20507:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "19080:4:1" + "src": "20516:4:2" } ], "functionName": { "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "19009:61:1" + "src": "20445:61:2" }, "nodeType": "YulFunctionCall", - "src": "19009:76:1" + "src": "20445:76:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "19001:4:1" + "src": "20437:4:2" } ] } ] }, - "name": "abi_encode_tuple_t_uint8_t_uint16_t_struct$_Multilocation_$8_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_struct$_Multilocation_$8_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed", + "name": "abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr_t_address_t_uint64_t_bytes_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "18410:9:1", - "type": "" - }, - { - "name": "value4", - "nodeType": "YulTypedName", - "src": "18422:6:1", + "src": "19927:9:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "18430:6:1", + "src": "19939:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "18438:6:1", + "src": "19947:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "18446:6:1", + "src": "19955:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "18454:6:1", + "src": "19963:6:2", "type": "" } ], @@ -10208,48 +11050,48 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "18465:4:1", + "src": "19974:4:2", "type": "" } ], - "src": "18194:898:1" + "src": "19721:807:2" }, { "body": { "nodeType": "YulBlock", - "src": "19252:231:1", + "src": "20852:660:2", "statements": [ { "nodeType": "YulAssignment", - "src": "19262:26:1", + "src": "20862:27:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19274:9:1" + "src": "20874:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19285:2:1", + "src": "20885:3:2", "type": "", - "value": "32" + "value": "128" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "19270:3:1" + "src": "20870:3:2" }, "nodeType": "YulFunctionCall", - "src": "19270:18:1" + "src": "20870:19:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "19262:4:1" + "src": "20862:4:2" } ] }, @@ -10261,12 +11103,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19309:9:1" + "src": "20910:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19320:1:1", + "src": "20921:1:2", "type": "", "value": "0" } @@ -10274,133 +11116,164 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "19305:3:1" + "src": "20906:3:2" }, "nodeType": "YulFunctionCall", - "src": "19305:17:1" + "src": "20906:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "19328:4:1" + "src": "20929:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19334:9:1" + "src": "20935:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "19324:3:1" + "src": "20925:3:2" }, "nodeType": "YulFunctionCall", - "src": "19324:20:1" + "src": "20925:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "19298:6:1" + "src": "20899:6:2" }, "nodeType": "YulFunctionCall", - "src": "19298:47:1" + "src": "20899:47:2" }, "nodeType": "YulExpressionStatement", - "src": "19298:47:1" + "src": "20899:47:2" }, { "nodeType": "YulAssignment", - "src": "19354:122:1", + "src": "20955:126:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "19462:6:1" + "src": "21067:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "19471:4:1" + "src": "21076:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "19362:99:1" + "src": "20963:103:2" }, "nodeType": "YulFunctionCall", - "src": "19362:114:1" + "src": "20963:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "19354:4:1" + "src": "20955:4:2" } ] - } - ] - }, - "name": "abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr__to_t_struct$_Multilocation_$8_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "19224:9:1", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "19236:6:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "19247:4:1", - "type": "" - } - ], - "src": "19098:385:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19551:79:1", - "statements": [ + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21102:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21113:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21098:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "21098:18:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "21122:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21128:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "21118:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "21118:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "21091:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "21091:48:2" + }, + "nodeType": "YulExpressionStatement", + "src": "21091:48:2" + }, { "nodeType": "YulAssignment", - "src": "19561:22:1", + "src": "21148:126:2", "value": { "arguments": [ { - "name": "offset", + "name": "value1", "nodeType": "YulIdentifier", - "src": "19576:6:1" + "src": "21260:6:2" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "21269:4:2" } ], "functionName": { - "name": "mload", + "name": "abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "19570:5:1" + "src": "21156:103:2" }, "nodeType": "YulFunctionCall", - "src": "19570:13:1" + "src": "21156:118:2" }, "variableNames": [ { - "name": "value", + "name": "tail", "nodeType": "YulIdentifier", - "src": "19561:5:1" + "src": "21148:4:2" } ] }, @@ -10408,9648 +11281,15276 @@ "expression": { "arguments": [ { - "name": "value", + "name": "value2", "nodeType": "YulIdentifier", - "src": "19618:5:1" + "src": "21326:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21339:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21350:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21335:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "21335:18:2" } ], "functionName": { - "name": "validator_revert_t_uint64", + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "19592:25:1" + "src": "21284:41:2" }, "nodeType": "YulFunctionCall", - "src": "19592:32:1" + "src": "21284:70:2" }, "nodeType": "YulExpressionStatement", - "src": "19592:32:1" - } - ] - }, - "name": "abi_decode_t_uint64_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "19529:6:1", - "type": "" - }, - { - "name": "end", - "nodeType": "YulTypedName", - "src": "19537:3:1", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "19545:5:1", - "type": "" - } - ], - "src": "19489:141:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19679:79:1", - "statements": [ + "src": "21284:70:2" + }, { - "body": { - "nodeType": "YulBlock", - "src": "19736:16:1", - "statements": [ + "expression": { + "arguments": [ { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19745:1:1", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "19748:1:1", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", + "arguments": [ + { + "name": "headStart", "nodeType": "YulIdentifier", - "src": "19738:6:1" + "src": "21375:9:2" }, - "nodeType": "YulFunctionCall", - "src": "19738:12:1" + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21386:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21371:3:2" }, - "nodeType": "YulExpressionStatement", - "src": "19738:12:1" - } - ] - }, - "condition": { - "arguments": [ + "nodeType": "YulFunctionCall", + "src": "21371:18:2" + }, { "arguments": [ { - "name": "value", + "name": "tail", "nodeType": "YulIdentifier", - "src": "19702:5:1" + "src": "21395:4:2" }, { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "19727:5:1" - } - ], - "functionName": { - "name": "cleanup_t_uint256", - "nodeType": "YulIdentifier", - "src": "19709:17:1" - }, - "nodeType": "YulFunctionCall", - "src": "19709:24:1" + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21401:9:2" } ], "functionName": { - "name": "eq", + "name": "sub", "nodeType": "YulIdentifier", - "src": "19699:2:1" + "src": "21391:3:2" }, "nodeType": "YulFunctionCall", - "src": "19699:35:1" + "src": "21391:20:2" } ], "functionName": { - "name": "iszero", + "name": "mstore", "nodeType": "YulIdentifier", - "src": "19692:6:1" + "src": "21364:6:2" }, "nodeType": "YulFunctionCall", - "src": "19692:43:1" + "src": "21364:48:2" }, - "nodeType": "YulIf", - "src": "19689:63:1" - } - ] - }, - "name": "validator_revert_t_uint256", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "19672:5:1", - "type": "" - } - ], - "src": "19636:122:1" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "19827:80:1", - "statements": [ + "nodeType": "YulExpressionStatement", + "src": "21364:48:2" + }, { "nodeType": "YulAssignment", - "src": "19837:22:1", + "src": "21421:84:2", "value": { "arguments": [ { - "name": "offset", + "name": "value3", + "nodeType": "YulIdentifier", + "src": "21491:6:2" + }, + { + "name": "tail", "nodeType": "YulIdentifier", - "src": "19852:6:1" + "src": "21500:4:2" } ], "functionName": { - "name": "mload", + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "19846:5:1" + "src": "21429:61:2" }, "nodeType": "YulFunctionCall", - "src": "19846:13:1" + "src": "21429:76:2" }, "variableNames": [ { - "name": "value", + "name": "tail", "nodeType": "YulIdentifier", - "src": "19837:5:1" + "src": "21421:4:2" } ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "19895:5:1" - } - ], - "functionName": { - "name": "validator_revert_t_uint256", - "nodeType": "YulIdentifier", - "src": "19868:26:1" - }, - "nodeType": "YulFunctionCall", - "src": "19868:33:1" - }, - "nodeType": "YulExpressionStatement", - "src": "19868:33:1" } ] }, - "name": "abi_decode_t_uint256_fromMemory", + "name": "abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { - "name": "offset", + "name": "headStart", "nodeType": "YulTypedName", - "src": "19805:6:1", + "src": "20800:9:2", "type": "" }, { - "name": "end", + "name": "value3", "nodeType": "YulTypedName", - "src": "19813:3:1", + "src": "20812:6:2", "type": "" - } - ], - "returnVariables": [ + }, { - "name": "value", + "name": "value2", "nodeType": "YulTypedName", - "src": "19821:5:1", + "src": "20820:6:2", "type": "" - } - ], - "src": "19764:143:1" - }, - { + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "20828:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "20836:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "20847:4:2", + "type": "" + } + ], + "src": "20534:978:2" + }, + { "body": { "nodeType": "YulBlock", - "src": "20022:550:1", + "src": "21579:51:2", "statements": [ { - "body": { - "nodeType": "YulBlock", - "src": "20068:83:1", - "statements": [ + "expression": { + "arguments": [ { - "expression": { - "arguments": [], - "functionName": { - "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "name": "pos", + "nodeType": "YulIdentifier", + "src": "21596:3:2" + }, + { + "arguments": [ + { + "name": "value", "nodeType": "YulIdentifier", - "src": "20070:77:1" - }, - "nodeType": "YulFunctionCall", - "src": "20070:79:1" + "src": "21617:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint8", + "nodeType": "YulIdentifier", + "src": "21601:15:2" }, - "nodeType": "YulExpressionStatement", - "src": "20070:79:1" + "nodeType": "YulFunctionCall", + "src": "21601:22:2" } - ] + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "21589:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "21589:35:2" }, - "condition": { + "nodeType": "YulExpressionStatement", + "src": "21589:35:2" + } + ] + }, + "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "21567:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "21574:3:2", + "type": "" + } + ], + "src": "21518:112:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21699:52:2", + "statements": [ + { + "expression": { "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "21716:3:2" + }, { "arguments": [ { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "20043:7:1" - }, - { - "name": "headStart", + "name": "value", "nodeType": "YulIdentifier", - "src": "20052:9:1" + "src": "21738:5:2" } ], "functionName": { - "name": "sub", + "name": "cleanup_t_uint16", "nodeType": "YulIdentifier", - "src": "20039:3:1" + "src": "21721:16:2" }, "nodeType": "YulFunctionCall", - "src": "20039:23:1" + "src": "21721:23:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "21709:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "21709:36:2" + }, + "nodeType": "YulExpressionStatement", + "src": "21709:36:2" + } + ] + }, + "name": "abi_encode_t_uint16_to_t_uint16_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "21687:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "21694:3:2", + "type": "" + } + ], + "src": "21636:115:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21977:515:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "21987:27:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21999:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "20064:2:1", + "src": "22010:3:2", "type": "", - "value": "96" + "value": "160" } ], "functionName": { - "name": "slt", + "name": "add", "nodeType": "YulIdentifier", - "src": "20035:3:1" + "src": "21995:3:2" }, "nodeType": "YulFunctionCall", - "src": "20035:32:1" + "src": "21995:19:2" }, - "nodeType": "YulIf", - "src": "20032:119:1" + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "21987:4:2" + } + ] }, { - "nodeType": "YulBlock", - "src": "20161:127:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "20176:15:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20190:1:1", - "type": "", - "value": "0" + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22064:6:2" }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "20180:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "20205:73:1", - "value": { + { "arguments": [ { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20250:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "20261:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20246:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "20246:22:1" + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22077:9:2" }, { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "20270:7:1" + "kind": "number", + "nodeType": "YulLiteral", + "src": "22088:1:2", + "type": "", + "value": "0" } ], "functionName": { - "name": "abi_decode_t_uint64_fromMemory", + "name": "add", "nodeType": "YulIdentifier", - "src": "20215:30:1" + "src": "22073:3:2" }, "nodeType": "YulFunctionCall", - "src": "20215:63:1" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "20205:6:1" - } - ] - } - ] + "src": "22073:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "22024:39:2" + }, + "nodeType": "YulFunctionCall", + "src": "22024:67:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22024:67:2" }, { - "nodeType": "YulBlock", - "src": "20298:129:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "20313:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20327:2:1", - "type": "", - "value": "32" + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "22143:6:2" }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "20317:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "20343:74:1", - "value": { + { "arguments": [ { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20389:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "20400:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20385:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "20385:22:1" + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22156:9:2" }, { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "20409:7:1" - } - ], + "kind": "number", + "nodeType": "YulLiteral", + "src": "22167:2:2", + "type": "", + "value": "32" + } + ], "functionName": { - "name": "abi_decode_t_uint256_fromMemory", + "name": "add", "nodeType": "YulIdentifier", - "src": "20353:31:1" + "src": "22152:3:2" }, "nodeType": "YulFunctionCall", - "src": "20353:64:1" + "src": "22152:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint16_to_t_uint16_fromStack", + "nodeType": "YulIdentifier", + "src": "22101:41:2" + }, + "nodeType": "YulFunctionCall", + "src": "22101:70:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22101:70:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "22225:6:2" }, - "variableNames": [ - { - "name": "value1", + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22238:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22249:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", "nodeType": "YulIdentifier", - "src": "20343:6:1" - } - ] - } - ] + "src": "22234:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "22234:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "22181:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "22181:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22181:72:2" }, { - "nodeType": "YulBlock", - "src": "20437:128:1", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "20452:16:1", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "20466:2:1", - "type": "", - "value": "64" + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "22305:6:2" }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "20456:6:1", - "type": "" - } - ] - }, - { - "nodeType": "YulAssignment", - "src": "20482:73:1", - "value": { + { "arguments": [ { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "20527:9:1" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "20538:6:1" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "20523:3:1" - }, - "nodeType": "YulFunctionCall", - "src": "20523:22:1" + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22318:9:2" }, { - "name": "dataEnd", + "kind": "number", + "nodeType": "YulLiteral", + "src": "22329:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22314:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "22314:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", + "nodeType": "YulIdentifier", + "src": "22263:41:2" + }, + "nodeType": "YulFunctionCall", + "src": "22263:70:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22263:70:2" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", "nodeType": "YulIdentifier", - "src": "20547:7:1" + "src": "22354:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22365:3:2", + "type": "", + "value": "128" } ], "functionName": { - "name": "abi_decode_t_uint64_fromMemory", + "name": "add", "nodeType": "YulIdentifier", - "src": "20492:30:1" + "src": "22350:3:2" }, "nodeType": "YulFunctionCall", - "src": "20492:63:1" + "src": "22350:19:2" }, - "variableNames": [ - { - "name": "value2", + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "22375:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22381:9:2" + } + ], + "functionName": { + "name": "sub", "nodeType": "YulIdentifier", - "src": "20482:6:1" - } - ] + "src": "22371:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "22371:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "22343:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "22343:49:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22343:49:2" + }, + { + "nodeType": "YulAssignment", + "src": "22401:84:2", + "value": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "22471:6:2" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "22480:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "22409:61:2" + }, + "nodeType": "YulFunctionCall", + "src": "22409:76:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "22401:4:2" } ] } ] }, - "name": "abi_decode_tuple_t_uint64t_uint256t_uint64_fromMemory", + "name": "abi_encode_tuple_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "19976:9:1", + "src": "21917:9:2", "type": "" }, { - "name": "dataEnd", + "name": "value4", "nodeType": "YulTypedName", - "src": "19987:7:1", + "src": "21929:6:2", "type": "" - } - ], - "returnVariables": [ + }, { - "name": "value0", + "name": "value3", "nodeType": "YulTypedName", - "src": "19999:6:1", + "src": "21937:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "21945:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "20007:6:1", + "src": "21953:6:2", "type": "" }, { - "name": "value2", + "name": "value0", "nodeType": "YulTypedName", - "src": "20015:6:1", + "src": "21961:6:2", "type": "" } ], - "src": "19913:659:1" - } - ] - }, - "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint8(value) -> cleaned {\n cleaned := and(value, 0xff)\n }\n\n function validator_revert_t_uint8(value) {\n if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint8(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint8(value)\n }\n\n function cleanup_t_uint16(value) -> cleaned {\n cleaned := and(value, 0xffff)\n }\n\n function validator_revert_t_uint16(value) {\n if iszero(eq(value, cleanup_t_uint16(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint16(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint16(value)\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function validator_revert_t_uint64(value) {\n if iszero(eq(value, cleanup_t_uint64(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint64(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint64(value)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_uint8t_uint16t_addresst_uint64t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value4 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_XcmTransactor_$59_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_XcmTransactor_$59_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_XcmTransactor_$59_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_XcmTransactor_$59__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_XcmTransactor_$59_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() {\n revert(0, 0)\n }\n\n function revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() {\n revert(0, 0)\n }\n\n function array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n // bytes[]\n function abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let innerOffset := calldataload(src)\n if gt(innerOffset, 0xffffffffffffffff) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let elementPos := add(offset, innerOffset)\n\n mstore(dst, abi_decode_t_bytes_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes[]\n function abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // struct XcmTransactor.Multilocation\n function abi_decode_t_struct$_Multilocation_$8_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // parents\n\n let offset := 0\n\n mstore(add(value, 0x00), abi_decode_t_uint8(add(headStart, offset), end))\n\n }\n\n {\n // interior\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() }\n\n mstore(add(value, 0x20), abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(headStart, offset), end))\n\n }\n\n }\n\n function abi_decode_tuple_t_uint8t_uint16t_struct$_Multilocation_$8_memory_ptrt_uint64t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value4 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptr(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint64(value))\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint64_t_uint256_t_uint64__to_t_uint64_t_uint256_t_uint64__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n tail := add(headStart, 96)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value2, add(headStart, 64))\n\n }\n\n function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function abi_encode_t_uint16_to_t_uint16_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint16(value))\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint16_to_t_uint16_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_address_to_t_address_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n mstore(add(headStart, 128), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value4, tail)\n\n }\n\n function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint16_to_t_uint16_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_t_address_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint8_to_t_uint8(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos) -> updatedPos {\n updatedPos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos)\n }\n\n function array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // bytes[] -> bytes[]\n function abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value, pos) -> end {\n let length := array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length)\n let headStart := pos\n let tail := add(pos, mul(length, 0x20))\n let baseRef := array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, headStart))\n let elementValue0 := mload(srcPtr)\n tail := abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(elementValue0, tail)\n srcPtr := array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(srcPtr)\n pos := add(pos, 0x20)\n }\n pos := tail\n end := pos\n }\n\n // struct XcmTransactor.Multilocation -> struct XcmTransactor.Multilocation\n function abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // parents\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_uint8_to_t_uint8(memberValue0, add(pos, 0x00))\n }\n\n {\n // interior\n\n let memberValue0 := mload(add(value, 0x20))\n\n mstore(add(pos, 0x20), sub(tail, pos))\n tail := abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(memberValue0, tail)\n\n }\n\n end := tail\n }\n\n function abi_encode_tuple_t_uint8_t_uint16_t_struct$_Multilocation_$8_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_struct$_Multilocation_$8_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint16_to_t_uint16_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n mstore(add(headStart, 128), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value4, tail)\n\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr__to_t_struct$_Multilocation_$8_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value0, tail)\n\n }\n\n function abi_decode_t_uint64_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint64(value)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint64t_uint256t_uint64_fromMemory(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint64_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint64_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", - "id": 1, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": {}, - "linkReferences": {}, - "object": "608060405234801561001057600080fd5b50600436106100575760003560e01c8063267d40621461005c57806361fc548f1461007857806371b0edfa146100965780639f89f03e146100c6578063f87f493f146100e2575b600080fd5b61007660048036038101906100719190610628565b610114565b005b6100806101ae565b60405161008d919061071e565b60405180910390f35b6100b060048036038101906100ab9190610739565b6101d2565b6040516100bd9190610775565b60405180910390f35b6100e060048036038101906100db91906108ec565b610276565b005b6100fc60048036038101906100f7919061099f565b610310565b60405161010b93929190610a10565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663267d406286868686866040518663ffffffff1660e01b8152600401610175959493929190610aed565b600060405180830381600087803b15801561018f57600080fd5b505af11580156101a3573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371b0edfa836040518263ffffffff1660e01b815260040161022e9190610b47565b602060405180830381865afa15801561024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026f9190610b77565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f89f03e86868686866040518663ffffffff1660e01b81526004016102d7959493929190610cfc565b600060405180830381600087803b1580156102f157600080fd5b505af1158015610305573d6000803e3d6000fd5b505050505050505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87f493f856040518263ffffffff1660e01b815260040161036f9190610d5d565b606060405180830381865afa15801561038c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b09190610dc0565b9250925092509193909250565b6000604051905090565b600080fd5b600080fd5b600060ff82169050919050565b6103e7816103d1565b81146103f257600080fd5b50565b600081359050610404816103de565b92915050565b600061ffff82169050919050565b6104218161040a565b811461042c57600080fd5b50565b60008135905061043e81610418565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061046f82610444565b9050919050565b61047f81610464565b811461048a57600080fd5b50565b60008135905061049c81610476565b92915050565b600067ffffffffffffffff82169050919050565b6104bf816104a2565b81146104ca57600080fd5b50565b6000813590506104dc816104b6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610535826104ec565b810181811067ffffffffffffffff82111715610554576105536104fd565b5b80604052505050565b60006105676103bd565b9050610573828261052c565b919050565b600067ffffffffffffffff821115610593576105926104fd565b5b61059c826104ec565b9050602081019050919050565b82818337600083830152505050565b60006105cb6105c684610578565b61055d565b9050828152602081018484840111156105e7576105e66104e7565b5b6105f28482856105a9565b509392505050565b600082601f83011261060f5761060e6104e2565b5b813561061f8482602086016105b8565b91505092915050565b600080600080600060a08688031215610644576106436103c7565b5b6000610652888289016103f5565b95505060206106638882890161042f565b94505060406106748882890161048d565b9350506060610685888289016104cd565b925050608086013567ffffffffffffffff8111156106a6576106a56103cc565b5b6106b2888289016105fa565b9150509295509295909350565b6000819050919050565b60006106e46106df6106da84610444565b6106bf565b610444565b9050919050565b60006106f6826106c9565b9050919050565b6000610708826106eb565b9050919050565b610718816106fd565b82525050565b6000602082019050610733600083018461070f565b92915050565b60006020828403121561074f5761074e6103c7565b5b600061075d8482850161042f565b91505092915050565b61076f81610464565b82525050565b600060208201905061078a6000830184610766565b92915050565b600080fd5b600080fd5b600067ffffffffffffffff8211156107b5576107b46104fd565b5b602082029050602081019050919050565b600080fd5b60006107de6107d98461079a565b61055d565b90508083825260208201905060208402830185811115610801576108006107c6565b5b835b8181101561084857803567ffffffffffffffff811115610826576108256104e2565b5b80860161083389826105fa565b85526020850194505050602081019050610803565b5050509392505050565b600082601f830112610867576108666104e2565b5b81356108778482602086016107cb565b91505092915050565b60006040828403121561089657610895610790565b5b6108a0604061055d565b905060006108b0848285016103f5565b600083015250602082013567ffffffffffffffff8111156108d4576108d3610795565b5b6108e084828501610852565b60208301525092915050565b600080600080600060a08688031215610908576109076103c7565b5b6000610916888289016103f5565b95505060206109278882890161042f565b945050604086013567ffffffffffffffff811115610948576109476103cc565b5b61095488828901610880565b9350506060610965888289016104cd565b925050608086013567ffffffffffffffff811115610986576109856103cc565b5b610992888289016105fa565b9150509295509295909350565b6000602082840312156109b5576109b46103c7565b5b600082013567ffffffffffffffff8111156109d3576109d26103cc565b5b6109df84828501610880565b91505092915050565b6109f1816104a2565b82525050565b6000819050919050565b610a0a816109f7565b82525050565b6000606082019050610a2560008301866109e8565b610a326020830185610a01565b610a3f60408301846109e8565b949350505050565b610a50816103d1565b82525050565b610a5f8161040a565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610a9f578082015181840152602081019050610a84565b83811115610aae576000848401525b50505050565b6000610abf82610a65565b610ac98185610a70565b9350610ad9818560208601610a81565b610ae2816104ec565b840191505092915050565b600060a082019050610b026000830188610a47565b610b0f6020830187610a56565b610b1c6040830186610766565b610b2960608301856109e8565b8181036080830152610b3b8184610ab4565b90509695505050505050565b6000602082019050610b5c6000830184610a56565b92915050565b600081519050610b7181610476565b92915050565b600060208284031215610b8d57610b8c6103c7565b5b6000610b9b84828501610b62565b91505092915050565b610bad816103d1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000610bfb82610a65565b610c058185610bdf565b9350610c15818560208601610a81565b610c1e816104ec565b840191505092915050565b6000610c358383610bf0565b905092915050565b6000602082019050919050565b6000610c5582610bb3565b610c5f8185610bbe565b935083602082028501610c7185610bcf565b8060005b85811015610cad5784840389528151610c8e8582610c29565b9450610c9983610c3d565b925060208a01995050600181019050610c75565b50829750879550505050505092915050565b6000604083016000830151610cd76000860182610ba4565b5060208301518482036020860152610cef8282610c4a565b9150508091505092915050565b600060a082019050610d116000830188610a47565b610d1e6020830187610a56565b8181036040830152610d308186610cbf565b9050610d3f60608301856109e8565b8181036080830152610d518184610ab4565b90509695505050505050565b60006020820190508181036000830152610d778184610cbf565b905092915050565b600081519050610d8e816104b6565b92915050565b610d9d816109f7565b8114610da857600080fd5b50565b600081519050610dba81610d94565b92915050565b600080600060608486031215610dd957610dd86103c7565b5b6000610de786828701610d7f565b9350506020610df886828701610dab565b9250506040610e0986828701610d7f565b915050925092509256fea26469706673582212200c97281bd15caba3cc6efa4a076e6f49a63c3b3c013798a44e77679bfec3fec964736f6c634300080a0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x267D4062 EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x61FC548F EQ PUSH2 0x78 JUMPI DUP1 PUSH4 0x71B0EDFA EQ PUSH2 0x96 JUMPI DUP1 PUSH4 0x9F89F03E EQ PUSH2 0xC6 JUMPI DUP1 PUSH4 0xF87F493F EQ PUSH2 0xE2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x76 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x71 SWAP2 SWAP1 PUSH2 0x628 JUMP JUMPDEST PUSH2 0x114 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x80 PUSH2 0x1AE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x8D SWAP2 SWAP1 PUSH2 0x71E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xB0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xAB SWAP2 SWAP1 PUSH2 0x739 JUMP JUMPDEST PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xBD SWAP2 SWAP1 PUSH2 0x775 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xDB SWAP2 SWAP1 PUSH2 0x8EC JUMP JUMPDEST PUSH2 0x276 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xFC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xF7 SWAP2 SWAP1 PUSH2 0x99F JUMP JUMPDEST PUSH2 0x310 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA10 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x267D4062 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x175 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xAED JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1A3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x71B0EDFA DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x22E SWAP2 SWAP1 PUSH2 0xB47 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x26F SWAP2 SWAP1 PUSH2 0xB77 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9F89F03E DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2D7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCFC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x305 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF87F493F DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x36F SWAP2 SWAP1 PUSH2 0xD5D JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x38C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3B0 SWAP2 SWAP1 PUSH2 0xDC0 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x3E7 DUP2 PUSH2 0x3D1 JUMP JUMPDEST DUP2 EQ PUSH2 0x3F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x404 DUP2 PUSH2 0x3DE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x421 DUP2 PUSH2 0x40A JUMP JUMPDEST DUP2 EQ PUSH2 0x42C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x43E DUP2 PUSH2 0x418 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46F DUP3 PUSH2 0x444 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x47F DUP2 PUSH2 0x464 JUMP JUMPDEST DUP2 EQ PUSH2 0x48A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x49C DUP2 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4BF DUP2 PUSH2 0x4A2 JUMP JUMPDEST DUP2 EQ PUSH2 0x4CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x4DC DUP2 PUSH2 0x4B6 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x535 DUP3 PUSH2 0x4EC JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x554 JUMPI PUSH2 0x553 PUSH2 0x4FD JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x567 PUSH2 0x3BD JUMP JUMPDEST SWAP1 POP PUSH2 0x573 DUP3 DUP3 PUSH2 0x52C JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x593 JUMPI PUSH2 0x592 PUSH2 0x4FD JUMP JUMPDEST JUMPDEST PUSH2 0x59C DUP3 PUSH2 0x4EC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5CB PUSH2 0x5C6 DUP5 PUSH2 0x578 JUMP JUMPDEST PUSH2 0x55D JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x5E7 JUMPI PUSH2 0x5E6 PUSH2 0x4E7 JUMP JUMPDEST JUMPDEST PUSH2 0x5F2 DUP5 DUP3 DUP6 PUSH2 0x5A9 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x60F JUMPI PUSH2 0x60E PUSH2 0x4E2 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x61F DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x5B8 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x644 JUMPI PUSH2 0x643 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x652 DUP9 DUP3 DUP10 ADD PUSH2 0x3F5 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x663 DUP9 DUP3 DUP10 ADD PUSH2 0x42F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x674 DUP9 DUP3 DUP10 ADD PUSH2 0x48D JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x685 DUP9 DUP3 DUP10 ADD PUSH2 0x4CD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x6A6 JUMPI PUSH2 0x6A5 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x6B2 DUP9 DUP3 DUP10 ADD PUSH2 0x5FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6E4 PUSH2 0x6DF PUSH2 0x6DA DUP5 PUSH2 0x444 JUMP JUMPDEST PUSH2 0x6BF JUMP JUMPDEST PUSH2 0x444 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6F6 DUP3 PUSH2 0x6C9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x708 DUP3 PUSH2 0x6EB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x718 DUP2 PUSH2 0x6FD JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x733 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x70F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x74F JUMPI PUSH2 0x74E PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x75D DUP5 DUP3 DUP6 ADD PUSH2 0x42F JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x76F DUP2 PUSH2 0x464 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x78A PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x766 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x7B5 JUMPI PUSH2 0x7B4 PUSH2 0x4FD JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x7DE PUSH2 0x7D9 DUP5 PUSH2 0x79A JUMP JUMPDEST PUSH2 0x55D JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x801 JUMPI PUSH2 0x800 PUSH2 0x7C6 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x848 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x826 JUMPI PUSH2 0x825 PUSH2 0x4E2 JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x833 DUP10 DUP3 PUSH2 0x5FA JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x803 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x867 JUMPI PUSH2 0x866 PUSH2 0x4E2 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x877 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x7CB JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x896 JUMPI PUSH2 0x895 PUSH2 0x790 JUMP JUMPDEST JUMPDEST PUSH2 0x8A0 PUSH1 0x40 PUSH2 0x55D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x8B0 DUP5 DUP3 DUP6 ADD PUSH2 0x3F5 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8D4 JUMPI PUSH2 0x8D3 PUSH2 0x795 JUMP JUMPDEST JUMPDEST PUSH2 0x8E0 DUP5 DUP3 DUP6 ADD PUSH2 0x852 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x908 JUMPI PUSH2 0x907 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x916 DUP9 DUP3 DUP10 ADD PUSH2 0x3F5 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x927 DUP9 DUP3 DUP10 ADD PUSH2 0x42F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x948 JUMPI PUSH2 0x947 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x954 DUP9 DUP3 DUP10 ADD PUSH2 0x880 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0x965 DUP9 DUP3 DUP10 ADD PUSH2 0x4CD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x986 JUMPI PUSH2 0x985 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x992 DUP9 DUP3 DUP10 ADD PUSH2 0x5FA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B5 JUMPI PUSH2 0x9B4 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9D3 JUMPI PUSH2 0x9D2 PUSH2 0x3CC JUMP JUMPDEST JUMPDEST PUSH2 0x9DF DUP5 DUP3 DUP6 ADD PUSH2 0x880 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9F1 DUP2 PUSH2 0x4A2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA0A DUP2 PUSH2 0x9F7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0xA25 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0x9E8 JUMP JUMPDEST PUSH2 0xA32 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xA01 JUMP JUMPDEST PUSH2 0xA3F PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x9E8 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xA50 DUP2 PUSH2 0x3D1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0xA5F DUP2 PUSH2 0x40A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA9F JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xA84 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xAAE JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xABF DUP3 PUSH2 0xA65 JUMP JUMPDEST PUSH2 0xAC9 DUP2 DUP6 PUSH2 0xA70 JUMP JUMPDEST SWAP4 POP PUSH2 0xAD9 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xA81 JUMP JUMPDEST PUSH2 0xAE2 DUP2 PUSH2 0x4EC JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0xB02 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0xA47 JUMP JUMPDEST PUSH2 0xB0F PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0xA56 JUMP JUMPDEST PUSH2 0xB1C PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x766 JUMP JUMPDEST PUSH2 0xB29 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x9E8 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0xB3B DUP2 DUP5 PUSH2 0xAB4 JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xB5C PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xA56 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xB71 DUP2 PUSH2 0x476 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB8D JUMPI PUSH2 0xB8C PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xB9B DUP5 DUP3 DUP6 ADD PUSH2 0xB62 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xBAD DUP2 PUSH2 0x3D1 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBFB DUP3 PUSH2 0xA65 JUMP JUMPDEST PUSH2 0xC05 DUP2 DUP6 PUSH2 0xBDF JUMP JUMPDEST SWAP4 POP PUSH2 0xC15 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xA81 JUMP JUMPDEST PUSH2 0xC1E DUP2 PUSH2 0x4EC JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC35 DUP4 DUP4 PUSH2 0xBF0 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC55 DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0xC5F DUP2 DUP6 PUSH2 0xBBE JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0xC71 DUP6 PUSH2 0xBCF JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0xCAD JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0xC8E DUP6 DUP3 PUSH2 0xC29 JUMP JUMPDEST SWAP5 POP PUSH2 0xC99 DUP4 PUSH2 0xC3D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xC75 JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0xCD7 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xBA4 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0xCEF DUP3 DUP3 PUSH2 0xC4A JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0xD11 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0xA47 JUMP JUMPDEST PUSH2 0xD1E PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0xA56 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xD30 DUP2 DUP7 PUSH2 0xCBF JUMP JUMPDEST SWAP1 POP PUSH2 0xD3F PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0x9E8 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0xD51 DUP2 DUP5 PUSH2 0xAB4 JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xD77 DUP2 DUP5 PUSH2 0xCBF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xD8E DUP2 PUSH2 0x4B6 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xD9D DUP2 PUSH2 0x9F7 JUMP JUMPDEST DUP2 EQ PUSH2 0xDA8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xDBA DUP2 PUSH2 0xD94 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xDD9 JUMPI PUSH2 0xDD8 PUSH2 0x3C7 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xDE7 DUP7 DUP3 DUP8 ADD PUSH2 0xD7F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0xDF8 DUP7 DUP3 DUP8 ADD PUSH2 0xDAB JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0xE09 DUP7 DUP3 DUP8 ADD PUSH2 0xD7F JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC SWAP8 0x28 SHL 0xD1 0x5C 0xAB LOG3 0xCC PUSH15 0xFA4A076E6F49A63C3B3C013798A44E PUSH24 0x679BFEC3FEC964736F6C634300080A003300000000000000 ", - "sourceMap": "2664:1682:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3910:430;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2788:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2893:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3425:467;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3128:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;3910:430;4142:13;;;;;;;;;;:41;;;4201:10;4229:5;4252:11;4281:6;4305:10;4142:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3910:430;;;;;:::o;2788:94::-;;;;;;;;;;;;:::o;2893:225::-;2964:7;3070:13;;;;;;;;;;;:30;;;3101:5;3070:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3063:44;;2893:225;;;:::o;3425:467::-;3682:13;;;;;;;;;;:55;;;3755:10;3783:5;3806:9;3833:6;3857:10;3682:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3425:467;;;;;:::o;3128:287::-;3240:6;3248:7;3257:6;3362:13;;;;;;;;;;;:27;;;3390:13;3362:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3355:49;;;;;;3128:287;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:86;369:7;409:4;402:5;398:16;387:27;;334:86;;;:::o;426:118::-;497:22;513:5;497:22;:::i;:::-;490:5;487:33;477:61;;534:1;531;524:12;477:61;426:118;:::o;550:135::-;594:5;632:6;619:20;610:29;;648:31;673:5;648:31;:::i;:::-;550:135;;;;:::o;691:89::-;727:7;767:6;760:5;756:18;745:29;;691:89;;;:::o;786:120::-;858:23;875:5;858:23;:::i;:::-;851:5;848:34;838:62;;896:1;893;886:12;838:62;786:120;:::o;912:137::-;957:5;995:6;982:20;973:29;;1011:32;1037:5;1011:32;:::i;:::-;912:137;;;;:::o;1055:126::-;1092:7;1132:42;1125:5;1121:54;1110:65;;1055:126;;;:::o;1187:96::-;1224:7;1253:24;1271:5;1253:24;:::i;:::-;1242:35;;1187:96;;;:::o;1289:122::-;1362:24;1380:5;1362:24;:::i;:::-;1355:5;1352:35;1342:63;;1401:1;1398;1391:12;1342:63;1289:122;:::o;1417:139::-;1463:5;1501:6;1488:20;1479:29;;1517:33;1544:5;1517:33;:::i;:::-;1417:139;;;;:::o;1562:101::-;1598:7;1638:18;1631:5;1627:30;1616:41;;1562:101;;;:::o;1669:120::-;1741:23;1758:5;1741:23;:::i;:::-;1734:5;1731:34;1721:62;;1779:1;1776;1769:12;1721:62;1669:120;:::o;1795:137::-;1840:5;1878:6;1865:20;1856:29;;1894:32;1920:5;1894:32;:::i;:::-;1795:137;;;;:::o;1938:117::-;2047:1;2044;2037:12;2061:117;2170:1;2167;2160:12;2184:102;2225:6;2276:2;2272:7;2267:2;2260:5;2256:14;2252:28;2242:38;;2184:102;;;:::o;2292:180::-;2340:77;2337:1;2330:88;2437:4;2434:1;2427:15;2461:4;2458:1;2451:15;2478:281;2561:27;2583:4;2561:27;:::i;:::-;2553:6;2549:40;2691:6;2679:10;2676:22;2655:18;2643:10;2640:34;2637:62;2634:88;;;2702:18;;:::i;:::-;2634:88;2742:10;2738:2;2731:22;2521:238;2478:281;;:::o;2765:129::-;2799:6;2826:20;;:::i;:::-;2816:30;;2855:33;2883:4;2875:6;2855:33;:::i;:::-;2765:129;;;:::o;2900:307::-;2961:4;3051:18;3043:6;3040:30;3037:56;;;3073:18;;:::i;:::-;3037:56;3111:29;3133:6;3111:29;:::i;:::-;3103:37;;3195:4;3189;3185:15;3177:23;;2900:307;;;:::o;3213:154::-;3297:6;3292:3;3287;3274:30;3359:1;3350:6;3345:3;3341:16;3334:27;3213:154;;;:::o;3373:410::-;3450:5;3475:65;3491:48;3532:6;3491:48;:::i;:::-;3475:65;:::i;:::-;3466:74;;3563:6;3556:5;3549:21;3601:4;3594:5;3590:16;3639:3;3630:6;3625:3;3621:16;3618:25;3615:112;;;3646:79;;:::i;:::-;3615:112;3736:41;3770:6;3765:3;3760;3736:41;:::i;:::-;3456:327;3373:410;;;;;:::o;3802:338::-;3857:5;3906:3;3899:4;3891:6;3887:17;3883:27;3873:122;;3914:79;;:::i;:::-;3873:122;4031:6;4018:20;4056:78;4130:3;4122:6;4115:4;4107:6;4103:17;4056:78;:::i;:::-;4047:87;;3863:277;3802:338;;;;:::o;4146:1081::-;4246:6;4254;4262;4270;4278;4327:3;4315:9;4306:7;4302:23;4298:33;4295:120;;;4334:79;;:::i;:::-;4295:120;4454:1;4479:51;4522:7;4513:6;4502:9;4498:22;4479:51;:::i;:::-;4469:61;;4425:115;4579:2;4605:52;4649:7;4640:6;4629:9;4625:22;4605:52;:::i;:::-;4595:62;;4550:117;4706:2;4732:53;4777:7;4768:6;4757:9;4753:22;4732:53;:::i;:::-;4722:63;;4677:118;4834:2;4860:52;4904:7;4895:6;4884:9;4880:22;4860:52;:::i;:::-;4850:62;;4805:117;4989:3;4978:9;4974:19;4961:33;5021:18;5013:6;5010:30;5007:117;;;5043:79;;:::i;:::-;5007:117;5148:62;5202:7;5193:6;5182:9;5178:22;5148:62;:::i;:::-;5138:72;;4932:288;4146:1081;;;;;;;;:::o;5233:60::-;5261:3;5282:5;5275:12;;5233:60;;;:::o;5299:142::-;5349:9;5382:53;5400:34;5409:24;5427:5;5409:24;:::i;:::-;5400:34;:::i;:::-;5382:53;:::i;:::-;5369:66;;5299:142;;;:::o;5447:126::-;5497:9;5530:37;5561:5;5530:37;:::i;:::-;5517:50;;5447:126;;;:::o;5579:146::-;5649:9;5682:37;5713:5;5682:37;:::i;:::-;5669:50;;5579:146;;;:::o;5731:171::-;5838:57;5889:5;5838:57;:::i;:::-;5833:3;5826:70;5731:171;;:::o;5908:262::-;6021:4;6059:2;6048:9;6044:18;6036:26;;6072:91;6160:1;6149:9;6145:17;6136:6;6072:91;:::i;:::-;5908:262;;;;:::o;6176:327::-;6234:6;6283:2;6271:9;6262:7;6258:23;6254:32;6251:119;;;6289:79;;:::i;:::-;6251:119;6409:1;6434:52;6478:7;6469:6;6458:9;6454:22;6434:52;:::i;:::-;6424:62;;6380:116;6176:327;;;;:::o;6509:118::-;6596:24;6614:5;6596:24;:::i;:::-;6591:3;6584:37;6509:118;;:::o;6633:222::-;6726:4;6764:2;6753:9;6749:18;6741:26;;6777:71;6845:1;6834:9;6830:17;6821:6;6777:71;:::i;:::-;6633:222;;;;:::o;6861:117::-;6970:1;6967;6960:12;6984:117;7093:1;7090;7083:12;7107:320;7193:4;7283:18;7275:6;7272:30;7269:56;;;7305:18;;:::i;:::-;7269:56;7355:4;7347:6;7343:17;7335:25;;7415:4;7409;7405:15;7397:23;;7107:320;;;:::o;7433:117::-;7542:1;7539;7532:12;7571:942;7676:5;7701:90;7717:73;7783:6;7717:73;:::i;:::-;7701:90;:::i;:::-;7692:99;;7811:5;7840:6;7833:5;7826:21;7874:4;7867:5;7863:16;7856:23;;7927:4;7919:6;7915:17;7907:6;7903:30;7956:3;7948:6;7945:15;7942:122;;;7975:79;;:::i;:::-;7942:122;8090:6;8073:434;8107:6;8102:3;8099:15;8073:434;;;8196:3;8183:17;8232:18;8219:11;8216:35;8213:122;;;8254:79;;:::i;:::-;8213:122;8378:11;8370:6;8366:24;8416:46;8458:3;8446:10;8416:46;:::i;:::-;8411:3;8404:59;8492:4;8487:3;8483:14;8476:21;;8149:358;;8133:4;8128:3;8124:14;8117:21;;8073:434;;;8077:21;7682:831;;7571:942;;;;;:::o;8534:388::-;8614:5;8663:3;8656:4;8648:6;8644:17;8640:27;8630:122;;8671:79;;:::i;:::-;8630:122;8788:6;8775:20;8813:103;8912:3;8904:6;8897:4;8889:6;8885:17;8813:103;:::i;:::-;8804:112;;8620:302;8534:388;;;;:::o;8970:776::-;9047:5;9091:4;9079:9;9074:3;9070:19;9066:30;9063:117;;;9099:79;;:::i;:::-;9063:117;9198:21;9214:4;9198:21;:::i;:::-;9189:30;;9281:1;9321:47;9364:3;9355:6;9344:9;9340:22;9321:47;:::i;:::-;9314:4;9307:5;9303:16;9296:73;9229:151;9471:2;9460:9;9456:18;9443:32;9502:18;9494:6;9491:30;9488:117;;;9524:79;;:::i;:::-;9488:117;9644:83;9723:3;9714:6;9703:9;9699:22;9644:83;:::i;:::-;9637:4;9630:5;9626:16;9619:109;9390:349;8970:776;;;;:::o;9752:1297::-;9880:6;9888;9896;9904;9912;9961:3;9949:9;9940:7;9936:23;9932:33;9929:120;;;9968:79;;:::i;:::-;9929:120;10088:1;10113:51;10156:7;10147:6;10136:9;10132:22;10113:51;:::i;:::-;10103:61;;10059:115;10213:2;10239:52;10283:7;10274:6;10263:9;10259:22;10239:52;:::i;:::-;10229:62;;10184:117;10368:2;10357:9;10353:18;10340:32;10399:18;10391:6;10388:30;10385:117;;;10421:79;;:::i;:::-;10385:117;10526:81;10599:7;10590:6;10579:9;10575:22;10526:81;:::i;:::-;10516:91;;10311:306;10656:2;10682:52;10726:7;10717:6;10706:9;10702:22;10682:52;:::i;:::-;10672:62;;10627:117;10811:3;10800:9;10796:19;10783:33;10843:18;10835:6;10832:30;10829:117;;;10865:79;;:::i;:::-;10829:117;10970:62;11024:7;11015:6;11004:9;11000:22;10970:62;:::i;:::-;10960:72;;10754:288;9752:1297;;;;;;;;:::o;11055:545::-;11142:6;11191:2;11179:9;11170:7;11166:23;11162:32;11159:119;;;11197:79;;:::i;:::-;11159:119;11345:1;11334:9;11330:17;11317:31;11375:18;11367:6;11364:30;11361:117;;;11397:79;;:::i;:::-;11361:117;11502:81;11575:7;11566:6;11555:9;11551:22;11502:81;:::i;:::-;11492:91;;11288:305;11055:545;;;;:::o;11606:115::-;11691:23;11708:5;11691:23;:::i;:::-;11686:3;11679:36;11606:115;;:::o;11727:77::-;11764:7;11793:5;11782:16;;11727:77;;;:::o;11810:118::-;11897:24;11915:5;11897:24;:::i;:::-;11892:3;11885:37;11810:118;;:::o;11934:434::-;12079:4;12117:2;12106:9;12102:18;12094:26;;12130:69;12196:1;12185:9;12181:17;12172:6;12130:69;:::i;:::-;12209:72;12277:2;12266:9;12262:18;12253:6;12209:72;:::i;:::-;12291:70;12357:2;12346:9;12342:18;12333:6;12291:70;:::i;:::-;11934:434;;;;;;:::o;12374:112::-;12457:22;12473:5;12457:22;:::i;:::-;12452:3;12445:35;12374:112;;:::o;12492:115::-;12577:23;12594:5;12577:23;:::i;:::-;12572:3;12565:36;12492:115;;:::o;12613:98::-;12664:6;12698:5;12692:12;12682:22;;12613:98;;;:::o;12717:168::-;12800:11;12834:6;12829:3;12822:19;12874:4;12869:3;12865:14;12850:29;;12717:168;;;;:::o;12891:307::-;12959:1;12969:113;12983:6;12980:1;12977:13;12969:113;;;13068:1;13063:3;13059:11;13053:18;13049:1;13044:3;13040:11;13033:39;13005:2;13002:1;12998:10;12993:15;;12969:113;;;13100:6;13097:1;13094:13;13091:101;;;13180:1;13171:6;13166:3;13162:16;13155:27;13091:101;12940:258;12891:307;;;:::o;13204:360::-;13290:3;13318:38;13350:5;13318:38;:::i;:::-;13372:70;13435:6;13430:3;13372:70;:::i;:::-;13365:77;;13451:52;13496:6;13491:3;13484:4;13477:5;13473:16;13451:52;:::i;:::-;13528:29;13550:6;13528:29;:::i;:::-;13523:3;13519:39;13512:46;;13294:270;13204:360;;;;:::o;13570:735::-;13785:4;13823:3;13812:9;13808:19;13800:27;;13837:67;13901:1;13890:9;13886:17;13877:6;13837:67;:::i;:::-;13914:70;13980:2;13969:9;13965:18;13956:6;13914:70;:::i;:::-;13994:72;14062:2;14051:9;14047:18;14038:6;13994:72;:::i;:::-;14076:70;14142:2;14131:9;14127:18;14118:6;14076:70;:::i;:::-;14194:9;14188:4;14184:20;14178:3;14167:9;14163:19;14156:49;14222:76;14293:4;14284:6;14222:76;:::i;:::-;14214:84;;13570:735;;;;;;;;:::o;14311:218::-;14402:4;14440:2;14429:9;14425:18;14417:26;;14453:69;14519:1;14508:9;14504:17;14495:6;14453:69;:::i;:::-;14311:218;;;;:::o;14535:143::-;14592:5;14623:6;14617:13;14608:22;;14639:33;14666:5;14639:33;:::i;:::-;14535:143;;;;:::o;14684:351::-;14754:6;14803:2;14791:9;14782:7;14778:23;14774:32;14771:119;;;14809:79;;:::i;:::-;14771:119;14929:1;14954:64;15010:7;15001:6;14990:9;14986:22;14954:64;:::i;:::-;14944:74;;14900:128;14684:351;;;;:::o;15041:102::-;15114:22;15130:5;15114:22;:::i;:::-;15109:3;15102:35;15041:102;;:::o;15149:123::-;15225:6;15259:5;15253:12;15243:22;;15149:123;;;:::o;15278:183::-;15376:11;15410:6;15405:3;15398:19;15450:4;15445:3;15441:14;15426:29;;15278:183;;;;:::o;15467:141::-;15543:4;15566:3;15558:11;;15596:4;15591:3;15587:14;15579:22;;15467:141;;;:::o;15614:158::-;15687:11;15721:6;15716:3;15709:19;15761:4;15756:3;15752:14;15737:29;;15614:158;;;;:::o;15778:340::-;15854:3;15882:38;15914:5;15882:38;:::i;:::-;15936:60;15989:6;15984:3;15936:60;:::i;:::-;15929:67;;16005:52;16050:6;16045:3;16038:4;16031:5;16027:16;16005:52;:::i;:::-;16082:29;16104:6;16082:29;:::i;:::-;16077:3;16073:39;16066:46;;15858:260;15778:340;;;;:::o;16124:192::-;16211:10;16246:64;16306:3;16298:6;16246:64;:::i;:::-;16232:78;;16124:192;;;;:::o;16322:122::-;16401:4;16433;16428:3;16424:14;16416:22;;16322:122;;;:::o;16476:963::-;16603:3;16632:63;16689:5;16632:63;:::i;:::-;16711:85;16789:6;16784:3;16711:85;:::i;:::-;16704:92;;16822:3;16867:4;16859:6;16855:17;16850:3;16846:27;16897:65;16956:5;16897:65;:::i;:::-;16985:7;17016:1;17001:393;17026:6;17023:1;17020:13;17001:393;;;17097:9;17091:4;17087:20;17082:3;17075:33;17148:6;17142:13;17176:82;17253:4;17238:13;17176:82;:::i;:::-;17168:90;;17281:69;17343:6;17281:69;:::i;:::-;17271:79;;17379:4;17374:3;17370:14;17363:21;;17061:333;17048:1;17045;17041:9;17036:14;;17001:393;;;17005:14;17410:4;17403:11;;17430:3;17423:10;;16608:831;;;;;16476:963;;;;:::o;17525:663::-;17650:3;17686:4;17681:3;17677:14;17776:4;17769:5;17765:16;17759:23;17795:59;17848:4;17843:3;17839:14;17825:12;17795:59;:::i;:::-;17701:163;17950:4;17943:5;17939:16;17933:23;18003:3;17997:4;17993:14;17986:4;17981:3;17977:14;17970:38;18029:121;18145:4;18131:12;18029:121;:::i;:::-;18021:129;;17874:287;18178:4;18171:11;;17655:533;17525:663;;;;:::o;18194:898::-;18465:4;18503:3;18492:9;18488:19;18480:27;;18517:67;18581:1;18570:9;18566:17;18557:6;18517:67;:::i;:::-;18594:70;18660:2;18649:9;18645:18;18636:6;18594:70;:::i;:::-;18711:9;18705:4;18701:20;18696:2;18685:9;18681:18;18674:48;18739:114;18848:4;18839:6;18739:114;:::i;:::-;18731:122;;18863:70;18929:2;18918:9;18914:18;18905:6;18863:70;:::i;:::-;18981:9;18975:4;18971:20;18965:3;18954:9;18950:19;18943:49;19009:76;19080:4;19071:6;19009:76;:::i;:::-;19001:84;;18194:898;;;;;;;;:::o;19098:385::-;19247:4;19285:2;19274:9;19270:18;19262:26;;19334:9;19328:4;19324:20;19320:1;19309:9;19305:17;19298:47;19362:114;19471:4;19462:6;19362:114;:::i;:::-;19354:122;;19098:385;;;;:::o;19489:141::-;19545:5;19576:6;19570:13;19561:22;;19592:32;19618:5;19592:32;:::i;:::-;19489:141;;;;:::o;19636:122::-;19709:24;19727:5;19709:24;:::i;:::-;19702:5;19699:35;19689:63;;19748:1;19745;19738:12;19689:63;19636:122;:::o;19764:143::-;19821:5;19852:6;19846:13;19837:22;;19868:33;19895:5;19868:33;:::i;:::-;19764:143;;;;:::o;19913:659::-;19999:6;20007;20015;20064:2;20052:9;20043:7;20039:23;20035:32;20032:119;;;20070:79;;:::i;:::-;20032:119;20190:1;20215:63;20270:7;20261:6;20250:9;20246:22;20215:63;:::i;:::-;20205:73;;20161:127;20327:2;20353:64;20409:7;20400:6;20389:9;20385:22;20353:64;:::i;:::-;20343:74;;20298:129;20466:2;20492:63;20547:7;20538:6;20527:9;20523:22;20492:63;:::i;:::-;20482:73;;20437:128;19913:659;;;;;:::o" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "731400", - "executionCost": "25033", - "totalCost": "756433" - }, - "external": { - "index_to_account(uint16)": "infinite", - "transact_info((uint8,bytes[]))": "infinite", - "transact_through_derivative(uint8,uint16,address,uint64,bytes)": "infinite", - "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)": "infinite", - "xcmtransactor()": "infinite" - } - }, - "legacyAssembly": { - ".code": [ - { - "begin": 2664, - "end": 4346, - "name": "PUSH", - "source": 0, - "value": "80" - }, - { - "begin": 2664, - "end": 4346, - "name": "PUSH", - "source": 0, - "value": "40" - }, - { "begin": 2664, "end": 4346, "name": "MSTORE", "source": 0 }, - { - "begin": 2839, - "end": 2881, - "name": "PUSH", - "source": 0, - "value": "806" - }, - { - "begin": 2788, - "end": 2882, - "name": "PUSH", - "source": 0, - "value": "0" - }, - { "begin": 2788, "end": 2882, "name": "DUP1", "source": 0 }, - { - "begin": 2788, - "end": 2882, - "name": "PUSH", - "source": 0, - "value": "100" - }, - { "begin": 2788, "end": 2882, "name": "EXP", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "DUP2", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SLOAD", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "DUP2", "source": 0 }, - { - "begin": 2788, - "end": 2882, + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "21972:4:2", + "type": "" + } + ], + "src": "21757:735:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22594:122:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "22604:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22616:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22627:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22612:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "22612:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "22604:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22682:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22695:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22706:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22691:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "22691:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint16_to_t_uint16_fromStack", + "nodeType": "YulIdentifier", + "src": "22640:41:2" + }, + "nodeType": "YulFunctionCall", + "src": "22640:69:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22640:69:2" + } + ] + }, + "name": "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "22566:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "22578:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "22589:4:2", + "type": "" + } + ], + "src": "22498:218:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22785:80:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "22795:22:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "22810:6:2" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22804:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "22804:13:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "22795:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "22853:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "22826:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "22826:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22826:33:2" + } + ] + }, + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "22763:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "22771:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "22779:5:2", + "type": "" + } + ], + "src": "22722:143:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22948:274:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "22994:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "22996:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "22996:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "22996:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22969:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22978:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "22965:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "22965:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22990:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "22961:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "22961:32:2" + }, + "nodeType": "YulIf", + "src": "22958:119:2" + }, + { + "nodeType": "YulBlock", + "src": "23087:128:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "23102:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23116:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "23106:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "23131:74:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23177:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "23188:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23173:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "23173:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "23197:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "23141:31:2" + }, + "nodeType": "YulFunctionCall", + "src": "23141:64:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23131:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "22918:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "22929:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "22941:6:2", + "type": "" + } + ], + "src": "22871:351:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23386:235:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "23396:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23408:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23419:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23404:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "23404:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "23396:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23443:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23454:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23439:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "23439:17:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "23462:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23468:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "23458:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "23458:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23432:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "23432:47:2" + }, + "nodeType": "YulExpressionStatement", + "src": "23432:47:2" + }, + { + "nodeType": "YulAssignment", + "src": "23488:126:2", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23600:6:2" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "23609:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "23496:103:2" + }, + "nodeType": "YulFunctionCall", + "src": "23496:118:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "23488:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "23358:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "23370:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "23381:4:2", + "type": "" + } + ], + "src": "23228:393:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23670:79:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "23727:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23736:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23739:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "23729:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "23729:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "23729:12:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23693:5:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23718:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "23700:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "23700:24:2" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "23690:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "23690:35:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "23683:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "23683:43:2" + }, + "nodeType": "YulIf", + "src": "23680:63:2" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "23663:5:2", + "type": "" + } + ], + "src": "23627:122:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23818:80:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "23828:22:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "23843:6:2" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23837:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "23837:13:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23828:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23886:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "23859:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "23859:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "23859:33:2" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "23796:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "23804:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "23812:5:2", + "type": "" + } + ], + "src": "23755:143:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23981:274:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "24027:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "24029:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "24029:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "24029:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "24002:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24011:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "23998:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "23998:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24023:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "23994:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "23994:32:2" + }, + "nodeType": "YulIf", + "src": "23991:119:2" + }, + { + "nodeType": "YulBlock", + "src": "24120:128:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "24135:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24149:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "24139:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "24164:74:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24210:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "24221:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24206:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "24206:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "24230:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "24174:31:2" + }, + "nodeType": "YulFunctionCall", + "src": "24174:64:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24164:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "23951:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "23962:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "23974:6:2", + "type": "" + } + ], + "src": "23904:351:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24541:626:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "24551:27:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24563:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24574:3:2", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24559:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "24559:19:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "24551:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24628:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24641:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24652:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24637:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "24637:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint8_to_t_uint8_fromStack", + "nodeType": "YulIdentifier", + "src": "24588:39:2" + }, + "nodeType": "YulFunctionCall", + "src": "24588:67:2" + }, + "nodeType": "YulExpressionStatement", + "src": "24588:67:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "24707:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24720:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24731:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24716:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "24716:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint16_to_t_uint16_fromStack", + "nodeType": "YulIdentifier", + "src": "24665:41:2" + }, + "nodeType": "YulFunctionCall", + "src": "24665:70:2" + }, + "nodeType": "YulExpressionStatement", + "src": "24665:70:2" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24756:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24767:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24752:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "24752:18:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "24776:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24782:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "24772:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "24772:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24745:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "24745:48:2" + }, + "nodeType": "YulExpressionStatement", + "src": "24745:48:2" + }, + { + "nodeType": "YulAssignment", + "src": "24802:126:2", + "value": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "24914:6:2" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "24923:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "24810:103:2" + }, + "nodeType": "YulFunctionCall", + "src": "24810:118:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "24802:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "24980:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24993:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25004:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24989:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "24989:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint64_to_t_uint64_fromStack", + "nodeType": "YulIdentifier", + "src": "24938:41:2" + }, + "nodeType": "YulFunctionCall", + "src": "24938:70:2" + }, + "nodeType": "YulExpressionStatement", + "src": "24938:70:2" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25029:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25040:3:2", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25025:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "25025:19:2" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "25050:4:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25056:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "25046:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "25046:20:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "25018:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "25018:49:2" + }, + "nodeType": "YulExpressionStatement", + "src": "25018:49:2" + }, + { + "nodeType": "YulAssignment", + "src": "25076:84:2", + "value": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "25146:6:2" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "25155:4:2" + } + ], + "functionName": { + "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack", + "nodeType": "YulIdentifier", + "src": "25084:61:2" + }, + "nodeType": "YulFunctionCall", + "src": "25084:76:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "25076:4:2" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_uint8_t_uint16_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "24481:9:2", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "24493:6:2", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "24501:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "24509:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "24517:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "24525:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "24536:4:2", + "type": "" + } + ], + "src": "24261:906:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25235:79:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "25245:22:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25260:6:2" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "25254:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "25254:13:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "25245:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "25302:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_uint64", + "nodeType": "YulIdentifier", + "src": "25276:25:2" + }, + "nodeType": "YulFunctionCall", + "src": "25276:32:2" + }, + "nodeType": "YulExpressionStatement", + "src": "25276:32:2" + } + ] + }, + "name": "abi_decode_t_uint64_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "25213:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "25221:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "25229:5:2", + "type": "" + } + ], + "src": "25173:141:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25428:549:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "25474:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "25476:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "25476:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "25476:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25449:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25458:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "25445:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "25445:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25470:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "25441:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "25441:32:2" + }, + "nodeType": "YulIf", + "src": "25438:119:2" + }, + { + "nodeType": "YulBlock", + "src": "25567:127:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "25582:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25596:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "25586:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25611:73:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25656:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25667:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25652:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "25652:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25676:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64_fromMemory", + "nodeType": "YulIdentifier", + "src": "25621:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "25621:63:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "25611:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "25704:128:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "25719:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25733:2:2", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "25723:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25749:73:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25794:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25805:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25790:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "25790:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25814:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64_fromMemory", + "nodeType": "YulIdentifier", + "src": "25759:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "25759:63:2" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "25749:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "25842:128:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "25857:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25871:2:2", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "25861:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25887:73:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25932:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25943:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25928:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "25928:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25952:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64_fromMemory", + "nodeType": "YulIdentifier", + "src": "25897:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "25897:63:2" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25887:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint64t_uint64t_uint64_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "25382:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "25393:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "25405:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "25413:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "25421:6:2", + "type": "" + } + ], + "src": "25320:657:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "26092:550:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "26138:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "26140:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "26140:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "26140:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26113:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26122:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26109:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "26109:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26134:2:2", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "26105:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "26105:32:2" + }, + "nodeType": "YulIf", + "src": "26102:119:2" + }, + { + "nodeType": "YulBlock", + "src": "26231:127:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "26246:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26260:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "26250:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26275:73:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26320:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "26331:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26316:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "26316:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26340:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64_fromMemory", + "nodeType": "YulIdentifier", + "src": "26285:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "26285:63:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26275:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "26368:129:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "26383:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26397:2:2", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "26387:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26413:74:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26459:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "26470:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26455:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "26455:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26479:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "26423:31:2" + }, + "nodeType": "YulFunctionCall", + "src": "26423:64:2" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "26413:6:2" + } + ] + } + ] + }, + { + "nodeType": "YulBlock", + "src": "26507:128:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "26522:16:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26536:2:2", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "26526:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26552:73:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26597:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "26608:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26593:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "26593:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26617:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint64_fromMemory", + "nodeType": "YulIdentifier", + "src": "26562:30:2" + }, + "nodeType": "YulFunctionCall", + "src": "26562:63:2" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "26552:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint64t_uint256t_uint64_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "26046:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "26057:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "26069:6:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "26077:6:2", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "26085:6:2", + "type": "" + } + ], + "src": "25983:659:2" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() {\n revert(0, 0)\n }\n\n function cleanup_t_uint8(value) -> cleaned {\n cleaned := and(value, 0xff)\n }\n\n function validator_revert_t_uint8(value) {\n if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint8(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint8(value)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // bytes[]\n function abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let innerOffset := calldataload(src)\n if gt(innerOffset, 0xffffffffffffffff) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let elementPos := add(offset, innerOffset)\n\n mstore(dst, abi_decode_t_bytes_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes[]\n function abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // struct XcmTransactor.Multilocation\n function abi_decode_t_struct$_Multilocation_$186_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // parents\n\n let offset := 0\n\n mstore(add(value, 0x00), abi_decode_t_uint8(add(headStart, offset), end))\n\n }\n\n {\n // interior\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() }\n\n mstore(add(value, 0x20), abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(headStart, offset), end))\n\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function validator_revert_t_uint64(value) {\n if iszero(eq(value, cleanup_t_uint64(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint64(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint64(value)\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptrt_addresst_uint64t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$186_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptrt_struct$_Multilocation_$186_memory_ptrt_uint64t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$186_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value1 := abi_decode_t_struct$_Multilocation_$186_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint16(value) -> cleaned {\n cleaned := and(value, 0xffff)\n }\n\n function validator_revert_t_uint16(value) {\n if iszero(eq(value, cleanup_t_uint16(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint16(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint16(value)\n }\n\n function abi_decode_tuple_t_uint8t_uint16t_addresst_uint64t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value4 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_XcmTransactor_$286_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_XcmTransactor_$286_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_XcmTransactor_$286_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_XcmTransactor_$286__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_XcmTransactor_$286_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_uint16(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$186_memory_ptr(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$186_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_uint8t_uint16t_struct$_Multilocation_$186_memory_ptrt_uint64t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint8(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint16(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$186_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value4 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint64(value))\n }\n\n function abi_encode_tuple_t_uint64_t_uint64_t_uint64__to_t_uint64_t_uint64_t_uint64__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n tail := add(headStart, 96)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value2, add(headStart, 64))\n\n }\n\n function abi_encode_tuple_t_uint64_t_uint256_t_uint64__to_t_uint64_t_uint256_t_uint64__fromStack_reversed(headStart , value2, value1, value0) -> tail {\n tail := add(headStart, 96)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value2, add(headStart, 64))\n\n }\n\n function abi_encode_t_uint8_to_t_uint8(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos) -> updatedPos {\n updatedPos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos)\n }\n\n function array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // bytes[] -> bytes[]\n function abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value, pos) -> end {\n let length := array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length)\n let headStart := pos\n let tail := add(pos, mul(length, 0x20))\n let baseRef := array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, headStart))\n let elementValue0 := mload(srcPtr)\n tail := abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(elementValue0, tail)\n srcPtr := array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(srcPtr)\n pos := add(pos, 0x20)\n }\n pos := tail\n end := pos\n }\n\n // struct XcmTransactor.Multilocation -> struct XcmTransactor.Multilocation\n function abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // parents\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_uint8_to_t_uint8(memberValue0, add(pos, 0x00))\n }\n\n {\n // interior\n\n let memberValue0 := mload(add(value, 0x20))\n\n mstore(add(pos, 0x20), sub(tail, pos))\n tail := abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(memberValue0, tail)\n\n }\n\n end := tail\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr_fromStack(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr_t_address_t_uint64_t_bytes_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value3, tail)\n\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack(value0, tail)\n\n mstore(add(headStart, 32), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack(value1, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value3, tail)\n\n }\n\n function abi_encode_t_uint8_to_t_uint8_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function abi_encode_t_uint16_to_t_uint16_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint16(value))\n }\n\n function abi_encode_tuple_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_address_t_uint64_t_bytes_memory_ptr__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint16_to_t_uint16_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_address_to_t_address_fromStack(value2, add(headStart, 64))\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n mstore(add(headStart, 128), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value4, tail)\n\n }\n\n function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint16_to_t_uint16_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_t_address_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$186_memory_ptr__to_t_struct$_Multilocation_$186_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack(value0, tail)\n\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_tuple_t_uint8_t_uint16_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__to_t_uint8_t_uint16_t_struct$_Multilocation_$186_memory_ptr_t_uint64_t_bytes_memory_ptr__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_uint8_to_t_uint8_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint16_to_t_uint16_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$186_memory_ptr_to_t_struct$_Multilocation_$186_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n mstore(add(headStart, 128), sub(tail, headStart))\n tail := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr_fromStack(value4, tail)\n\n }\n\n function abi_decode_t_uint64_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint64(value)\n }\n\n function abi_decode_tuple_t_uint64t_uint64t_uint64_fromMemory(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint64_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint64_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint64_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_uint64t_uint256t_uint64_fromMemory(headStart, dataEnd) -> value0, value1, value2 {\n if slt(sub(dataEnd, headStart), 96) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint64_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint64_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n", + "id": 2, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100935760003560e01c806371b0edfa1161006657806371b0edfa1461010a57806383f090821461013a5780639f89f03e1461016a578063cb26bf3214610186578063f87f493f146101b857610093565b80630139d6971461009857806319760407146100b4578063267d4062146100d057806361fc548f146100ec575b600080fd5b6100b260048036038101906100ad9190610a9f565b6101ea565b005b6100ce60048036038101906100c99190610b3e565b610281565b005b6100ea60048036038101906100e59190610c33565b610318565b005b6100f46103b2565b6040516101019190610d29565b60405180910390f35b610124600480360381019061011f9190610d44565b6103d6565b6040516101319190610d80565b60405180910390f35b610154600480360381019061014f9190610d9b565b61047a565b6040516101619190610dfd565b60405180910390f35b610184600480360381019061017f9190610e18565b61051e565b005b6101a0600480360381019061019b9190610d9b565b6105b8565b6040516101af93929190610eda565b60405180910390f35b6101d260048036038101906101cd9190610d9b565b610665565b6040516101e193929190610f11565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630139d697858585856040518563ffffffff1660e01b81526004016102499493929190611128565b600060405180830381600087803b15801561026357600080fd5b505af1158015610277573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166319760407858585856040518563ffffffff1660e01b81526004016102e0949392919061117b565b600060405180830381600087803b1580156102fa57600080fd5b505af115801561030e573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663267d406286868686866040518663ffffffff1660e01b81526004016103799594939291906111f3565b600060405180830381600087803b15801561039357600080fd5b505af11580156103a7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371b0edfa836040518263ffffffff1660e01b8152600401610432919061124d565b602060405180830381865afa15801561044f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610473919061127d565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166383f09082836040518263ffffffff1660e01b81526004016104d691906112aa565b602060405180830381865afa1580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906112f8565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639f89f03e86868686866040518663ffffffff1660e01b815260040161057f959493929190611325565b600060405180830381600087803b15801561059957600080fd5b505af11580156105ad573d6000803e3d6000fd5b505050505050505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb26bf32856040518263ffffffff1660e01b815260040161061791906112aa565b606060405180830381865afa158015610634573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610658919061139b565b9250925092509193909250565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f87f493f856040518263ffffffff1660e01b81526004016106c491906112aa565b606060405180830381865afa1580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070591906113ee565b9250925092509193909250565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107748261072b565b810181811067ffffffffffffffff821117156107935761079261073c565b5b80604052505050565b60006107a6610712565b90506107b2828261076b565b919050565b600080fd5b600060ff82169050919050565b6107d2816107bc565b81146107dd57600080fd5b50565b6000813590506107ef816107c9565b92915050565b600080fd5b600067ffffffffffffffff8211156108155761081461073c565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561084b5761084a61073c565b5b6108548261072b565b9050602081019050919050565b82818337600083830152505050565b600061088361087e84610830565b61079c565b90508281526020810184848401111561089f5761089e61082b565b5b6108aa848285610861565b509392505050565b600082601f8301126108c7576108c66107f5565b5b81356108d7848260208601610870565b91505092915050565b60006108f36108ee846107fa565b61079c565b9050808382526020820190506020840283018581111561091657610915610826565b5b835b8181101561095d57803567ffffffffffffffff81111561093b5761093a6107f5565b5b80860161094889826108b2565b85526020850194505050602081019050610918565b5050509392505050565b600082601f83011261097c5761097b6107f5565b5b813561098c8482602086016108e0565b91505092915050565b6000604082840312156109ab576109aa610726565b5b6109b5604061079c565b905060006109c5848285016107e0565b600083015250602082013567ffffffffffffffff8111156109e9576109e86107b7565b5b6109f584828501610967565b60208301525092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a2c82610a01565b9050919050565b610a3c81610a21565b8114610a4757600080fd5b50565b600081359050610a5981610a33565b92915050565b600067ffffffffffffffff82169050919050565b610a7c81610a5f565b8114610a8757600080fd5b50565b600081359050610a9981610a73565b92915050565b60008060008060808587031215610ab957610ab861071c565b5b600085013567ffffffffffffffff811115610ad757610ad6610721565b5b610ae387828801610995565b9450506020610af487828801610a4a565b9350506040610b0587828801610a8a565b925050606085013567ffffffffffffffff811115610b2657610b25610721565b5b610b32878288016108b2565b91505092959194509250565b60008060008060808587031215610b5857610b5761071c565b5b600085013567ffffffffffffffff811115610b7657610b75610721565b5b610b8287828801610995565b945050602085013567ffffffffffffffff811115610ba357610ba2610721565b5b610baf87828801610995565b9350506040610bc087828801610a8a565b925050606085013567ffffffffffffffff811115610be157610be0610721565b5b610bed878288016108b2565b91505092959194509250565b600061ffff82169050919050565b610c1081610bf9565b8114610c1b57600080fd5b50565b600081359050610c2d81610c07565b92915050565b600080600080600060a08688031215610c4f57610c4e61071c565b5b6000610c5d888289016107e0565b9550506020610c6e88828901610c1e565b9450506040610c7f88828901610a4a565b9350506060610c9088828901610a8a565b925050608086013567ffffffffffffffff811115610cb157610cb0610721565b5b610cbd888289016108b2565b9150509295509295909350565b6000819050919050565b6000610cef610cea610ce584610a01565b610cca565b610a01565b9050919050565b6000610d0182610cd4565b9050919050565b6000610d1382610cf6565b9050919050565b610d2381610d08565b82525050565b6000602082019050610d3e6000830184610d1a565b92915050565b600060208284031215610d5a57610d5961071c565b5b6000610d6884828501610c1e565b91505092915050565b610d7a81610a21565b82525050565b6000602082019050610d956000830184610d71565b92915050565b600060208284031215610db157610db061071c565b5b600082013567ffffffffffffffff811115610dcf57610dce610721565b5b610ddb84828501610995565b91505092915050565b6000819050919050565b610df781610de4565b82525050565b6000602082019050610e126000830184610dee565b92915050565b600080600080600060a08688031215610e3457610e3361071c565b5b6000610e42888289016107e0565b9550506020610e5388828901610c1e565b945050604086013567ffffffffffffffff811115610e7457610e73610721565b5b610e8088828901610995565b9350506060610e9188828901610a8a565b925050608086013567ffffffffffffffff811115610eb257610eb1610721565b5b610ebe888289016108b2565b9150509295509295909350565b610ed481610a5f565b82525050565b6000606082019050610eef6000830186610ecb565b610efc6020830185610ecb565b610f096040830184610ecb565b949350505050565b6000606082019050610f266000830186610ecb565b610f336020830185610dee565b610f406040830184610ecb565b949350505050565b610f51816107bc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610fbd578082015181840152602081019050610fa2565b83811115610fcc576000848401525b50505050565b6000610fdd82610f83565b610fe78185610f8e565b9350610ff7818560208601610f9f565b6110008161072b565b840191505092915050565b60006110178383610fd2565b905092915050565b6000602082019050919050565b600061103782610f57565b6110418185610f62565b93508360208202850161105385610f73565b8060005b8581101561108f5784840389528151611070858261100b565b945061107b8361101f565b925060208a01995050600181019050611057565b50829750879550505050505092915050565b60006040830160008301516110b96000860182610f48565b50602083015184820360208601526110d1828261102c565b9150508091505092915050565b600082825260208201905092915050565b60006110fa82610f83565b61110481856110de565b9350611114818560208601610f9f565b61111d8161072b565b840191505092915050565b6000608082019050818103600083015261114281876110a1565b90506111516020830186610d71565b61115e6040830185610ecb565b818103606083015261117081846110ef565b905095945050505050565b6000608082019050818103600083015261119581876110a1565b905081810360208301526111a981866110a1565b90506111b86040830185610ecb565b81810360608301526111ca81846110ef565b905095945050505050565b6111de816107bc565b82525050565b6111ed81610bf9565b82525050565b600060a08201905061120860008301886111d5565b61121560208301876111e4565b6112226040830186610d71565b61122f6060830185610ecb565b818103608083015261124181846110ef565b90509695505050505050565b600060208201905061126260008301846111e4565b92915050565b60008151905061127781610a33565b92915050565b6000602082840312156112935761129261071c565b5b60006112a184828501611268565b91505092915050565b600060208201905081810360008301526112c481846110a1565b905092915050565b6112d581610de4565b81146112e057600080fd5b50565b6000815190506112f2816112cc565b92915050565b60006020828403121561130e5761130d61071c565b5b600061131c848285016112e3565b91505092915050565b600060a08201905061133a60008301886111d5565b61134760208301876111e4565b818103604083015261135981866110a1565b90506113686060830185610ecb565b818103608083015261137a81846110ef565b90509695505050505050565b60008151905061139581610a73565b92915050565b6000806000606084860312156113b4576113b361071c565b5b60006113c286828701611386565b93505060206113d386828701611386565b92505060406113e486828701611386565b9150509250925092565b6000806000606084860312156114075761140661071c565b5b600061141586828701611386565b9350506020611426868287016112e3565b925050604061143786828701611386565b915050925092509256fea2646970667358221220c04621bb052bcda255425291a4fe020cf0831dde7b2dca5e5954b77da1559d9864736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x93 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x71B0EDFA GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x71B0EDFA EQ PUSH2 0x10A JUMPI DUP1 PUSH4 0x83F09082 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x9F89F03E EQ PUSH2 0x16A JUMPI DUP1 PUSH4 0xCB26BF32 EQ PUSH2 0x186 JUMPI DUP1 PUSH4 0xF87F493F EQ PUSH2 0x1B8 JUMPI PUSH2 0x93 JUMP JUMPDEST DUP1 PUSH4 0x139D697 EQ PUSH2 0x98 JUMPI DUP1 PUSH4 0x19760407 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0x267D4062 EQ PUSH2 0xD0 JUMPI DUP1 PUSH4 0x61FC548F EQ PUSH2 0xEC JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB2 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xAD SWAP2 SWAP1 PUSH2 0xA9F JUMP JUMPDEST PUSH2 0x1EA JUMP JUMPDEST STOP JUMPDEST PUSH2 0xCE PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xC9 SWAP2 SWAP1 PUSH2 0xB3E JUMP JUMPDEST PUSH2 0x281 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xEA PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE5 SWAP2 SWAP1 PUSH2 0xC33 JUMP JUMPDEST PUSH2 0x318 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF4 PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x101 SWAP2 SWAP1 PUSH2 0xD29 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x124 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x11F SWAP2 SWAP1 PUSH2 0xD44 JUMP JUMPDEST PUSH2 0x3D6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x131 SWAP2 SWAP1 PUSH2 0xD80 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x154 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x14F SWAP2 SWAP1 PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x47A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x161 SWAP2 SWAP1 PUSH2 0xDFD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x17F SWAP2 SWAP1 PUSH2 0xE18 JUMP JUMPDEST PUSH2 0x51E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x19B SWAP2 SWAP1 PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x5B8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1AF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xEDA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D2 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1CD SWAP2 SWAP1 PUSH2 0xD9B JUMP JUMPDEST PUSH2 0x665 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1E1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xF11 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x139D697 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x249 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x263 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x277 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x19760407 DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E0 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x117B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x30E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x267D4062 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x379 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x11F3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3A7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x71B0EDFA DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x432 SWAP2 SWAP1 PUSH2 0x124D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x44F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x473 SWAP2 SWAP1 PUSH2 0x127D JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x83F09082 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4D6 SWAP2 SWAP1 PUSH2 0x12AA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x517 SWAP2 SWAP1 PUSH2 0x12F8 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9F89F03E DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x57F SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1325 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x599 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCB26BF32 DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x617 SWAP2 SWAP1 PUSH2 0x12AA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x634 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x658 SWAP2 SWAP1 PUSH2 0x139B JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xF87F493F DUP6 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6C4 SWAP2 SWAP1 PUSH2 0x12AA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6E1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x705 SWAP2 SWAP1 PUSH2 0x13EE JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP SWAP2 SWAP4 SWAP1 SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x774 DUP3 PUSH2 0x72B JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x793 JUMPI PUSH2 0x792 PUSH2 0x73C JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A6 PUSH2 0x712 JUMP JUMPDEST SWAP1 POP PUSH2 0x7B2 DUP3 DUP3 PUSH2 0x76B JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7D2 DUP2 PUSH2 0x7BC JUMP JUMPDEST DUP2 EQ PUSH2 0x7DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x7EF DUP2 PUSH2 0x7C9 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x815 JUMPI PUSH2 0x814 PUSH2 0x73C JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x84B JUMPI PUSH2 0x84A PUSH2 0x73C JUMP JUMPDEST JUMPDEST PUSH2 0x854 DUP3 PUSH2 0x72B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x883 PUSH2 0x87E DUP5 PUSH2 0x830 JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x89F JUMPI PUSH2 0x89E PUSH2 0x82B JUMP JUMPDEST JUMPDEST PUSH2 0x8AA DUP5 DUP3 DUP6 PUSH2 0x861 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x8C7 JUMPI PUSH2 0x8C6 PUSH2 0x7F5 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x8D7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x870 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8F3 PUSH2 0x8EE DUP5 PUSH2 0x7FA JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x916 JUMPI PUSH2 0x915 PUSH2 0x826 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x95D JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x93B JUMPI PUSH2 0x93A PUSH2 0x7F5 JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x948 DUP10 DUP3 PUSH2 0x8B2 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x918 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x97C JUMPI PUSH2 0x97B PUSH2 0x7F5 JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x98C DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x8E0 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9AB JUMPI PUSH2 0x9AA PUSH2 0x726 JUMP JUMPDEST JUMPDEST PUSH2 0x9B5 PUSH1 0x40 PUSH2 0x79C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9C5 DUP5 DUP3 DUP6 ADD PUSH2 0x7E0 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x9E9 JUMPI PUSH2 0x9E8 PUSH2 0x7B7 JUMP JUMPDEST JUMPDEST PUSH2 0x9F5 DUP5 DUP3 DUP6 ADD PUSH2 0x967 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA2C DUP3 PUSH2 0xA01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA3C DUP2 PUSH2 0xA21 JUMP JUMPDEST DUP2 EQ PUSH2 0xA47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA59 DUP2 PUSH2 0xA33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA7C DUP2 PUSH2 0xA5F JUMP JUMPDEST DUP2 EQ PUSH2 0xA87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xA99 DUP2 PUSH2 0xA73 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xAB9 JUMPI PUSH2 0xAB8 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAD7 JUMPI PUSH2 0xAD6 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xAE3 DUP8 DUP3 DUP9 ADD PUSH2 0x995 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xAF4 DUP8 DUP3 DUP9 ADD PUSH2 0xA4A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xB05 DUP8 DUP3 DUP9 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB26 JUMPI PUSH2 0xB25 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xB32 DUP8 DUP3 DUP9 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xB58 JUMPI PUSH2 0xB57 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB76 JUMPI PUSH2 0xB75 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xB82 DUP8 DUP3 DUP9 ADD PUSH2 0x995 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBA3 JUMPI PUSH2 0xBA2 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xBAF DUP8 DUP3 DUP9 ADD PUSH2 0x995 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 PUSH2 0xBC0 DUP8 DUP3 DUP9 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBE1 JUMPI PUSH2 0xBE0 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xBED DUP8 DUP3 DUP9 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC10 DUP2 PUSH2 0xBF9 JUMP JUMPDEST DUP2 EQ PUSH2 0xC1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC2D DUP2 PUSH2 0xC07 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xC4F JUMPI PUSH2 0xC4E PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xC5D DUP9 DUP3 DUP10 ADD PUSH2 0x7E0 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xC6E DUP9 DUP3 DUP10 ADD PUSH2 0xC1E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xC7F DUP9 DUP3 DUP10 ADD PUSH2 0xA4A JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0xC90 DUP9 DUP3 DUP10 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCB1 JUMPI PUSH2 0xCB0 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xCBD DUP9 DUP3 DUP10 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCEF PUSH2 0xCEA PUSH2 0xCE5 DUP5 PUSH2 0xA01 JUMP JUMPDEST PUSH2 0xCCA JUMP JUMPDEST PUSH2 0xA01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD01 DUP3 PUSH2 0xCD4 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD13 DUP3 PUSH2 0xCF6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD23 DUP2 PUSH2 0xD08 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD3E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xD1A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD5A JUMPI PUSH2 0xD59 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD68 DUP5 DUP3 DUP6 ADD PUSH2 0xC1E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xD7A DUP2 PUSH2 0xA21 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xD95 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xD71 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDB1 JUMPI PUSH2 0xDB0 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDCF JUMPI PUSH2 0xDCE PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xDDB DUP5 DUP3 DUP6 ADD PUSH2 0x995 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xDF7 DUP2 PUSH2 0xDE4 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE12 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xDEE JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xE34 JUMPI PUSH2 0xE33 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xE42 DUP9 DUP3 DUP10 ADD PUSH2 0x7E0 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xE53 DUP9 DUP3 DUP10 ADD PUSH2 0xC1E JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE74 JUMPI PUSH2 0xE73 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xE80 DUP9 DUP3 DUP10 ADD PUSH2 0x995 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 PUSH2 0xE91 DUP9 DUP3 DUP10 ADD PUSH2 0xA8A JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEB2 JUMPI PUSH2 0xEB1 PUSH2 0x721 JUMP JUMPDEST JUMPDEST PUSH2 0xEBE DUP9 DUP3 DUP10 ADD PUSH2 0x8B2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH2 0xED4 DUP2 PUSH2 0xA5F JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0xEEF PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0xECB JUMP JUMPDEST PUSH2 0xEFC PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST PUSH2 0xF09 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xECB JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD SWAP1 POP PUSH2 0xF26 PUSH1 0x0 DUP4 ADD DUP7 PUSH2 0xECB JUMP JUMPDEST PUSH2 0xF33 PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0xDEE JUMP JUMPDEST PUSH2 0xF40 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0xECB JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH2 0xF51 DUP2 PUSH2 0x7BC JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFBD JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFA2 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xFCC JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFDD DUP3 PUSH2 0xF83 JUMP JUMPDEST PUSH2 0xFE7 DUP2 DUP6 PUSH2 0xF8E JUMP JUMPDEST SWAP4 POP PUSH2 0xFF7 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xF9F JUMP JUMPDEST PUSH2 0x1000 DUP2 PUSH2 0x72B JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1017 DUP4 DUP4 PUSH2 0xFD2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1037 DUP3 PUSH2 0xF57 JUMP JUMPDEST PUSH2 0x1041 DUP2 DUP6 PUSH2 0xF62 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x1053 DUP6 PUSH2 0xF73 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x108F JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x1070 DUP6 DUP3 PUSH2 0x100B JUMP JUMPDEST SWAP5 POP PUSH2 0x107B DUP4 PUSH2 0x101F JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1057 JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x10B9 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF48 JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x10D1 DUP3 DUP3 PUSH2 0x102C JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10FA DUP3 PUSH2 0xF83 JUMP JUMPDEST PUSH2 0x1104 DUP2 DUP6 PUSH2 0x10DE JUMP JUMPDEST SWAP4 POP PUSH2 0x1114 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xF9F JUMP JUMPDEST PUSH2 0x111D DUP2 PUSH2 0x72B JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1142 DUP2 DUP8 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0x1151 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0xD71 JUMP JUMPDEST PUSH2 0x115E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1170 DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1195 DUP2 DUP8 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x11A9 DUP2 DUP7 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0x11B8 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x11CA DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x11DE DUP2 PUSH2 0x7BC JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11ED DUP2 PUSH2 0xBF9 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1208 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x1215 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x11E4 JUMP JUMPDEST PUSH2 0x1222 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0xD71 JUMP JUMPDEST PUSH2 0x122F PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x1241 DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1262 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x11E4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1277 DUP2 PUSH2 0xA33 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1293 JUMPI PUSH2 0x1292 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x12A1 DUP5 DUP3 DUP6 ADD PUSH2 0x1268 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12C4 DUP2 DUP5 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x12D5 DUP2 PUSH2 0xDE4 JUMP JUMPDEST DUP2 EQ PUSH2 0x12E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x12F2 DUP2 PUSH2 0x12CC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x130E JUMPI PUSH2 0x130D PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x131C DUP5 DUP3 DUP6 ADD PUSH2 0x12E3 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x133A PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x11D5 JUMP JUMPDEST PUSH2 0x1347 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x11E4 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1359 DUP2 DUP7 PUSH2 0x10A1 JUMP JUMPDEST SWAP1 POP PUSH2 0x1368 PUSH1 0x60 DUP4 ADD DUP6 PUSH2 0xECB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x137A DUP2 DUP5 PUSH2 0x10EF JUMP JUMPDEST SWAP1 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1395 DUP2 PUSH2 0xA73 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x13B4 JUMPI PUSH2 0x13B3 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x13C2 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x13D3 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x13E4 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1407 JUMPI PUSH2 0x1406 PUSH2 0x71C JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1415 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 PUSH2 0x1426 DUP7 DUP3 DUP8 ADD PUSH2 0x12E3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 PUSH2 0x1437 DUP7 DUP3 DUP8 ADD PUSH2 0x1386 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 CHAINID 0x21 0xBB SDIV 0x2B 0xCD LOG2 SSTORE TIMESTAMP MSTORE SWAP2 LOG4 INVALID MUL 0xC CREATE DUP4 SAR 0xDE PUSH28 0x2DCA5E5954B77DA1559D9864736F6C634300080B0033000000000000 ", + "sourceMap": "132:2759:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2190:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2530:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1810:374;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;255:102;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;364:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1183:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1393:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;890:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;620:264;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;2190:334;2380:13;;;;;;;;;;:37;;;2431:4;2449:20;2483:6;2503:4;2380:137;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2190:334;;;;:::o;2530:359::-;2739:13;;;;;;;;;;:51;;;2804:4;2822:12;2848:6;2868:4;2739:143;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2530:359;;;;:::o;1810:374::-;2014:13;;;;;;;;;;:41;;;2069:10;2093:5;2112:11;2137:6;2157:10;2014:163;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:374;;;;;:::o;255:102::-;;;;;;;;;;;;:::o;364:250::-;468:7;570:13;;;;;;;;;;;:30;;;601:5;570:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;563:44;;364:250;;;:::o;1183:204::-;1307:7;1337:13;;;;;;;;;;;:28;;;1366:13;1337:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1330:50;;1183:204;;;:::o;1393:411::-;1622:13;;;;;;;;;;:55;;;1691:10;1715:5;1734:9;1757:6;1777:10;1622:175;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1393:411;;;;;:::o;890:287::-;1038:6;1058;1078;1116:13;;;;;;;;;;;:39;;;1156:13;1116:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1109:61;;;;;;890:287;;;;;:::o;620:264::-;756:6;776:7;797:6;835:13;;;;;;;;;;;:27;;;863:13;835:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;828:49;;;;;;620:264;;;;;:::o;7:75:2:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:117::-;1282:1;1279;1272:12;1296:86;1331:7;1371:4;1364:5;1360:16;1349:27;;1296:86;;;:::o;1388:118::-;1459:22;1475:5;1459:22;:::i;:::-;1452:5;1449:33;1439:61;;1496:1;1493;1486:12;1439:61;1388:118;:::o;1512:135::-;1556:5;1594:6;1581:20;1572:29;;1610:31;1635:5;1610:31;:::i;:::-;1512:135;;;;:::o;1653:117::-;1762:1;1759;1752:12;1776:320;1862:4;1952:18;1944:6;1941:30;1938:56;;;1974:18;;:::i;:::-;1938:56;2024:4;2016:6;2012:17;2004:25;;2084:4;2078;2074:15;2066:23;;1776:320;;;:::o;2102:117::-;2211:1;2208;2201:12;2225:117;2334:1;2331;2324:12;2348:307;2409:4;2499:18;2491:6;2488:30;2485:56;;;2521:18;;:::i;:::-;2485:56;2559:29;2581:6;2559:29;:::i;:::-;2551:37;;2643:4;2637;2633:15;2625:23;;2348:307;;;:::o;2661:154::-;2745:6;2740:3;2735;2722:30;2807:1;2798:6;2793:3;2789:16;2782:27;2661:154;;;:::o;2821:410::-;2898:5;2923:65;2939:48;2980:6;2939:48;:::i;:::-;2923:65;:::i;:::-;2914:74;;3011:6;3004:5;2997:21;3049:4;3042:5;3038:16;3087:3;3078:6;3073:3;3069:16;3066:25;3063:112;;;3094:79;;:::i;:::-;3063:112;3184:41;3218:6;3213:3;3208;3184:41;:::i;:::-;2904:327;2821:410;;;;;:::o;3250:338::-;3305:5;3354:3;3347:4;3339:6;3335:17;3331:27;3321:122;;3362:79;;:::i;:::-;3321:122;3479:6;3466:20;3504:78;3578:3;3570:6;3563:4;3555:6;3551:17;3504:78;:::i;:::-;3495:87;;3311:277;3250:338;;;;:::o;3609:942::-;3714:5;3739:90;3755:73;3821:6;3755:73;:::i;:::-;3739:90;:::i;:::-;3730:99;;3849:5;3878:6;3871:5;3864:21;3912:4;3905:5;3901:16;3894:23;;3965:4;3957:6;3953:17;3945:6;3941:30;3994:3;3986:6;3983:15;3980:122;;;4013:79;;:::i;:::-;3980:122;4128:6;4111:434;4145:6;4140:3;4137:15;4111:434;;;4234:3;4221:17;4270:18;4257:11;4254:35;4251:122;;;4292:79;;:::i;:::-;4251:122;4416:11;4408:6;4404:24;4454:46;4496:3;4484:10;4454:46;:::i;:::-;4449:3;4442:59;4530:4;4525:3;4521:14;4514:21;;4187:358;;4171:4;4166:3;4162:14;4155:21;;4111:434;;;4115:21;3720:831;;3609:942;;;;;:::o;4572:388::-;4652:5;4701:3;4694:4;4686:6;4682:17;4678:27;4668:122;;4709:79;;:::i;:::-;4668:122;4826:6;4813:20;4851:103;4950:3;4942:6;4935:4;4927:6;4923:17;4851:103;:::i;:::-;4842:112;;4658:302;4572:388;;;;:::o;5008:778::-;5087:5;5131:4;5119:9;5114:3;5110:19;5106:30;5103:117;;;5139:79;;:::i;:::-;5103:117;5238:21;5254:4;5238:21;:::i;:::-;5229:30;;5321:1;5361:47;5404:3;5395:6;5384:9;5380:22;5361:47;:::i;:::-;5354:4;5347:5;5343:16;5336:73;5269:151;5511:2;5500:9;5496:18;5483:32;5542:18;5534:6;5531:30;5528:117;;;5564:79;;:::i;:::-;5528:117;5684:83;5763:3;5754:6;5743:9;5739:22;5684:83;:::i;:::-;5677:4;5670:5;5666:16;5659:109;5430:349;5008:778;;;;:::o;5792:126::-;5829:7;5869:42;5862:5;5858:54;5847:65;;5792:126;;;:::o;5924:96::-;5961:7;5990:24;6008:5;5990:24;:::i;:::-;5979:35;;5924:96;;;:::o;6026:122::-;6099:24;6117:5;6099:24;:::i;:::-;6092:5;6089:35;6079:63;;6138:1;6135;6128:12;6079:63;6026:122;:::o;6154:139::-;6200:5;6238:6;6225:20;6216:29;;6254:33;6281:5;6254:33;:::i;:::-;6154:139;;;;:::o;6299:101::-;6335:7;6375:18;6368:5;6364:30;6353:41;;6299:101;;;:::o;6406:120::-;6478:23;6495:5;6478:23;:::i;:::-;6471:5;6468:34;6458:62;;6516:1;6513;6506:12;6458:62;6406:120;:::o;6532:137::-;6577:5;6615:6;6602:20;6593:29;;6631:32;6657:5;6631:32;:::i;:::-;6532:137;;;;:::o;6675:1161::-;6799:6;6807;6815;6823;6872:3;6860:9;6851:7;6847:23;6843:33;6840:120;;;6879:79;;:::i;:::-;6840:120;7027:1;7016:9;7012:17;6999:31;7057:18;7049:6;7046:30;7043:117;;;7079:79;;:::i;:::-;7043:117;7184:83;7259:7;7250:6;7239:9;7235:22;7184:83;:::i;:::-;7174:93;;6970:307;7316:2;7342:53;7387:7;7378:6;7367:9;7363:22;7342:53;:::i;:::-;7332:63;;7287:118;7444:2;7470:52;7514:7;7505:6;7494:9;7490:22;7470:52;:::i;:::-;7460:62;;7415:117;7599:2;7588:9;7584:18;7571:32;7630:18;7622:6;7619:30;7616:117;;;7652:79;;:::i;:::-;7616:117;7757:62;7811:7;7802:6;7791:9;7787:22;7757:62;:::i;:::-;7747:72;;7542:287;6675:1161;;;;;;;:::o;7842:1381::-;7996:6;8004;8012;8020;8069:3;8057:9;8048:7;8044:23;8040:33;8037:120;;;8076:79;;:::i;:::-;8037:120;8224:1;8213:9;8209:17;8196:31;8254:18;8246:6;8243:30;8240:117;;;8276:79;;:::i;:::-;8240:117;8381:83;8456:7;8447:6;8436:9;8432:22;8381:83;:::i;:::-;8371:93;;8167:307;8541:2;8530:9;8526:18;8513:32;8572:18;8564:6;8561:30;8558:117;;;8594:79;;:::i;:::-;8558:117;8699:83;8774:7;8765:6;8754:9;8750:22;8699:83;:::i;:::-;8689:93;;8484:308;8831:2;8857:52;8901:7;8892:6;8881:9;8877:22;8857:52;:::i;:::-;8847:62;;8802:117;8986:2;8975:9;8971:18;8958:32;9017:18;9009:6;9006:30;9003:117;;;9039:79;;:::i;:::-;9003:117;9144:62;9198:7;9189:6;9178:9;9174:22;9144:62;:::i;:::-;9134:72;;8929:287;7842:1381;;;;;;;:::o;9229:89::-;9265:7;9305:6;9298:5;9294:18;9283:29;;9229:89;;;:::o;9324:120::-;9396:23;9413:5;9396:23;:::i;:::-;9389:5;9386:34;9376:62;;9434:1;9431;9424:12;9376:62;9324:120;:::o;9450:137::-;9495:5;9533:6;9520:20;9511:29;;9549:32;9575:5;9549:32;:::i;:::-;9450:137;;;;:::o;9593:1081::-;9693:6;9701;9709;9717;9725;9774:3;9762:9;9753:7;9749:23;9745:33;9742:120;;;9781:79;;:::i;:::-;9742:120;9901:1;9926:51;9969:7;9960:6;9949:9;9945:22;9926:51;:::i;:::-;9916:61;;9872:115;10026:2;10052:52;10096:7;10087:6;10076:9;10072:22;10052:52;:::i;:::-;10042:62;;9997:117;10153:2;10179:53;10224:7;10215:6;10204:9;10200:22;10179:53;:::i;:::-;10169:63;;10124:118;10281:2;10307:52;10351:7;10342:6;10331:9;10327:22;10307:52;:::i;:::-;10297:62;;10252:117;10436:3;10425:9;10421:19;10408:33;10468:18;10460:6;10457:30;10454:117;;;10490:79;;:::i;:::-;10454:117;10595:62;10649:7;10640:6;10629:9;10625:22;10595:62;:::i;:::-;10585:72;;10379:288;9593:1081;;;;;;;;:::o;10680:60::-;10708:3;10729:5;10722:12;;10680:60;;;:::o;10746:142::-;10796:9;10829:53;10847:34;10856:24;10874:5;10856:24;:::i;:::-;10847:34;:::i;:::-;10829:53;:::i;:::-;10816:66;;10746:142;;;:::o;10894:126::-;10944:9;10977:37;11008:5;10977:37;:::i;:::-;10964:50;;10894:126;;;:::o;11026:147::-;11097:9;11130:37;11161:5;11130:37;:::i;:::-;11117:50;;11026:147;;;:::o;11179:173::-;11287:58;11339:5;11287:58;:::i;:::-;11282:3;11275:71;11179:173;;:::o;11358:264::-;11472:4;11510:2;11499:9;11495:18;11487:26;;11523:92;11612:1;11601:9;11597:17;11588:6;11523:92;:::i;:::-;11358:264;;;;:::o;11628:327::-;11686:6;11735:2;11723:9;11714:7;11710:23;11706:32;11703:119;;;11741:79;;:::i;:::-;11703:119;11861:1;11886:52;11930:7;11921:6;11910:9;11906:22;11886:52;:::i;:::-;11876:62;;11832:116;11628:327;;;;:::o;11961:118::-;12048:24;12066:5;12048:24;:::i;:::-;12043:3;12036:37;11961:118;;:::o;12085:222::-;12178:4;12216:2;12205:9;12201:18;12193:26;;12229:71;12297:1;12286:9;12282:17;12273:6;12229:71;:::i;:::-;12085:222;;;;:::o;12313:549::-;12402:6;12451:2;12439:9;12430:7;12426:23;12422:32;12419:119;;;12457:79;;:::i;:::-;12419:119;12605:1;12594:9;12590:17;12577:31;12635:18;12627:6;12624:30;12621:117;;;12657:79;;:::i;:::-;12621:117;12762:83;12837:7;12828:6;12817:9;12813:22;12762:83;:::i;:::-;12752:93;;12548:307;12313:549;;;;:::o;12868:77::-;12905:7;12934:5;12923:16;;12868:77;;;:::o;12951:118::-;13038:24;13056:5;13038:24;:::i;:::-;13033:3;13026:37;12951:118;;:::o;13075:222::-;13168:4;13206:2;13195:9;13191:18;13183:26;;13219:71;13287:1;13276:9;13272:17;13263:6;13219:71;:::i;:::-;13075:222;;;;:::o;13303:1301::-;13433:6;13441;13449;13457;13465;13514:3;13502:9;13493:7;13489:23;13485:33;13482:120;;;13521:79;;:::i;:::-;13482:120;13641:1;13666:51;13709:7;13700:6;13689:9;13685:22;13666:51;:::i;:::-;13656:61;;13612:115;13766:2;13792:52;13836:7;13827:6;13816:9;13812:22;13792:52;:::i;:::-;13782:62;;13737:117;13921:2;13910:9;13906:18;13893:32;13952:18;13944:6;13941:30;13938:117;;;13974:79;;:::i;:::-;13938:117;14079:83;14154:7;14145:6;14134:9;14130:22;14079:83;:::i;:::-;14069:93;;13864:308;14211:2;14237:52;14281:7;14272:6;14261:9;14257:22;14237:52;:::i;:::-;14227:62;;14182:117;14366:3;14355:9;14351:19;14338:33;14398:18;14390:6;14387:30;14384:117;;;14420:79;;:::i;:::-;14384:117;14525:62;14579:7;14570:6;14559:9;14555:22;14525:62;:::i;:::-;14515:72;;14309:288;13303:1301;;;;;;;;:::o;14610:115::-;14695:23;14712:5;14695:23;:::i;:::-;14690:3;14683:36;14610:115;;:::o;14731:430::-;14874:4;14912:2;14901:9;14897:18;14889:26;;14925:69;14991:1;14980:9;14976:17;14967:6;14925:69;:::i;:::-;15004:70;15070:2;15059:9;15055:18;15046:6;15004:70;:::i;:::-;15084;15150:2;15139:9;15135:18;15126:6;15084:70;:::i;:::-;14731:430;;;;;;:::o;15167:434::-;15312:4;15350:2;15339:9;15335:18;15327:26;;15363:69;15429:1;15418:9;15414:17;15405:6;15363:69;:::i;:::-;15442:72;15510:2;15499:9;15495:18;15486:6;15442:72;:::i;:::-;15524:70;15590:2;15579:9;15575:18;15566:6;15524:70;:::i;:::-;15167:434;;;;;;:::o;15607:102::-;15680:22;15696:5;15680:22;:::i;:::-;15675:3;15668:35;15607:102;;:::o;15715:123::-;15791:6;15825:5;15819:12;15809:22;;15715:123;;;:::o;15844:183::-;15942:11;15976:6;15971:3;15964:19;16016:4;16011:3;16007:14;15992:29;;15844:183;;;;:::o;16033:141::-;16109:4;16132:3;16124:11;;16162:4;16157:3;16153:14;16145:22;;16033:141;;;:::o;16180:98::-;16231:6;16265:5;16259:12;16249:22;;16180:98;;;:::o;16284:158::-;16357:11;16391:6;16386:3;16379:19;16431:4;16426:3;16422:14;16407:29;;16284:158;;;;:::o;16448:307::-;16516:1;16526:113;16540:6;16537:1;16534:13;16526:113;;;16625:1;16620:3;16616:11;16610:18;16606:1;16601:3;16597:11;16590:39;16562:2;16559:1;16555:10;16550:15;;16526:113;;;16657:6;16654:1;16651:13;16648:101;;;16737:1;16728:6;16723:3;16719:16;16712:27;16648:101;16497:258;16448:307;;;:::o;16761:340::-;16837:3;16865:38;16897:5;16865:38;:::i;:::-;16919:60;16972:6;16967:3;16919:60;:::i;:::-;16912:67;;16988:52;17033:6;17028:3;17021:4;17014:5;17010:16;16988:52;:::i;:::-;17065:29;17087:6;17065:29;:::i;:::-;17060:3;17056:39;17049:46;;16841:260;16761:340;;;;:::o;17107:192::-;17194:10;17229:64;17289:3;17281:6;17229:64;:::i;:::-;17215:78;;17107:192;;;;:::o;17305:122::-;17384:4;17416;17411:3;17407:14;17399:22;;17305:122;;;:::o;17459:963::-;17586:3;17615:63;17672:5;17615:63;:::i;:::-;17694:85;17772:6;17767:3;17694:85;:::i;:::-;17687:92;;17805:3;17850:4;17842:6;17838:17;17833:3;17829:27;17880:65;17939:5;17880:65;:::i;:::-;17968:7;17999:1;17984:393;18009:6;18006:1;18003:13;17984:393;;;18080:9;18074:4;18070:20;18065:3;18058:33;18131:6;18125:13;18159:82;18236:4;18221:13;18159:82;:::i;:::-;18151:90;;18264:69;18326:6;18264:69;:::i;:::-;18254:79;;18362:4;18357:3;18353:14;18346:21;;18044:333;18031:1;18028;18024:9;18019:14;;17984:393;;;17988:14;18393:4;18386:11;;18413:3;18406:10;;17591:831;;;;;17459:963;;;;:::o;18508:667::-;18637:3;18673:4;18668:3;18664:14;18763:4;18756:5;18752:16;18746:23;18782:59;18835:4;18830:3;18826:14;18812:12;18782:59;:::i;:::-;18688:163;18937:4;18930:5;18926:16;18920:23;18990:3;18984:4;18980:14;18973:4;18968:3;18964:14;18957:38;19016:121;19132:4;19118:12;19016:121;:::i;:::-;19008:129;;18861:287;19165:4;19158:11;;18642:533;18508:667;;;;:::o;19181:168::-;19264:11;19298:6;19293:3;19286:19;19338:4;19333:3;19329:14;19314:29;;19181:168;;;;:::o;19355:360::-;19441:3;19469:38;19501:5;19469:38;:::i;:::-;19523:70;19586:6;19581:3;19523:70;:::i;:::-;19516:77;;19602:52;19647:6;19642:3;19635:4;19628:5;19624:16;19602:52;:::i;:::-;19679:29;19701:6;19679:29;:::i;:::-;19674:3;19670:39;19663:46;;19445:270;19355:360;;;;:::o;19721:807::-;19974:4;20012:3;20001:9;19997:19;19989:27;;20062:9;20056:4;20052:20;20048:1;20037:9;20033:17;20026:47;20090:118;20203:4;20194:6;20090:118;:::i;:::-;20082:126;;20218:72;20286:2;20275:9;20271:18;20262:6;20218:72;:::i;:::-;20300:70;20366:2;20355:9;20351:18;20342:6;20300:70;:::i;:::-;20417:9;20411:4;20407:20;20402:2;20391:9;20387:18;20380:48;20445:76;20516:4;20507:6;20445:76;:::i;:::-;20437:84;;19721:807;;;;;;;:::o;20534:978::-;20847:4;20885:3;20874:9;20870:19;20862:27;;20935:9;20929:4;20925:20;20921:1;20910:9;20906:17;20899:47;20963:118;21076:4;21067:6;20963:118;:::i;:::-;20955:126;;21128:9;21122:4;21118:20;21113:2;21102:9;21098:18;21091:48;21156:118;21269:4;21260:6;21156:118;:::i;:::-;21148:126;;21284:70;21350:2;21339:9;21335:18;21326:6;21284:70;:::i;:::-;21401:9;21395:4;21391:20;21386:2;21375:9;21371:18;21364:48;21429:76;21500:4;21491:6;21429:76;:::i;:::-;21421:84;;20534:978;;;;;;;:::o;21518:112::-;21601:22;21617:5;21601:22;:::i;:::-;21596:3;21589:35;21518:112;;:::o;21636:115::-;21721:23;21738:5;21721:23;:::i;:::-;21716:3;21709:36;21636:115;;:::o;21757:735::-;21972:4;22010:3;21999:9;21995:19;21987:27;;22024:67;22088:1;22077:9;22073:17;22064:6;22024:67;:::i;:::-;22101:70;22167:2;22156:9;22152:18;22143:6;22101:70;:::i;:::-;22181:72;22249:2;22238:9;22234:18;22225:6;22181:72;:::i;:::-;22263:70;22329:2;22318:9;22314:18;22305:6;22263:70;:::i;:::-;22381:9;22375:4;22371:20;22365:3;22354:9;22350:19;22343:49;22409:76;22480:4;22471:6;22409:76;:::i;:::-;22401:84;;21757:735;;;;;;;;:::o;22498:218::-;22589:4;22627:2;22616:9;22612:18;22604:26;;22640:69;22706:1;22695:9;22691:17;22682:6;22640:69;:::i;:::-;22498:218;;;;:::o;22722:143::-;22779:5;22810:6;22804:13;22795:22;;22826:33;22853:5;22826:33;:::i;:::-;22722:143;;;;:::o;22871:351::-;22941:6;22990:2;22978:9;22969:7;22965:23;22961:32;22958:119;;;22996:79;;:::i;:::-;22958:119;23116:1;23141:64;23197:7;23188:6;23177:9;23173:22;23141:64;:::i;:::-;23131:74;;23087:128;22871:351;;;;:::o;23228:393::-;23381:4;23419:2;23408:9;23404:18;23396:26;;23468:9;23462:4;23458:20;23454:1;23443:9;23439:17;23432:47;23496:118;23609:4;23600:6;23496:118;:::i;:::-;23488:126;;23228:393;;;;:::o;23627:122::-;23700:24;23718:5;23700:24;:::i;:::-;23693:5;23690:35;23680:63;;23739:1;23736;23729:12;23680:63;23627:122;:::o;23755:143::-;23812:5;23843:6;23837:13;23828:22;;23859:33;23886:5;23859:33;:::i;:::-;23755:143;;;;:::o;23904:351::-;23974:6;24023:2;24011:9;24002:7;23998:23;23994:32;23991:119;;;24029:79;;:::i;:::-;23991:119;24149:1;24174:64;24230:7;24221:6;24210:9;24206:22;24174:64;:::i;:::-;24164:74;;24120:128;23904:351;;;;:::o;24261:906::-;24536:4;24574:3;24563:9;24559:19;24551:27;;24588:67;24652:1;24641:9;24637:17;24628:6;24588:67;:::i;:::-;24665:70;24731:2;24720:9;24716:18;24707:6;24665:70;:::i;:::-;24782:9;24776:4;24772:20;24767:2;24756:9;24752:18;24745:48;24810:118;24923:4;24914:6;24810:118;:::i;:::-;24802:126;;24938:70;25004:2;24993:9;24989:18;24980:6;24938:70;:::i;:::-;25056:9;25050:4;25046:20;25040:3;25029:9;25025:19;25018:49;25084:76;25155:4;25146:6;25084:76;:::i;:::-;25076:84;;24261:906;;;;;;;;:::o;25173:141::-;25229:5;25260:6;25254:13;25245:22;;25276:32;25302:5;25276:32;:::i;:::-;25173:141;;;;:::o;25320:657::-;25405:6;25413;25421;25470:2;25458:9;25449:7;25445:23;25441:32;25438:119;;;25476:79;;:::i;:::-;25438:119;25596:1;25621:63;25676:7;25667:6;25656:9;25652:22;25621:63;:::i;:::-;25611:73;;25567:127;25733:2;25759:63;25814:7;25805:6;25794:9;25790:22;25759:63;:::i;:::-;25749:73;;25704:128;25871:2;25897:63;25952:7;25943:6;25932:9;25928:22;25897:63;:::i;:::-;25887:73;;25842:128;25320:657;;;;;:::o;25983:659::-;26069:6;26077;26085;26134:2;26122:9;26113:7;26109:23;26105:32;26102:119;;;26140:79;;:::i;:::-;26102:119;26260:1;26285:63;26340:7;26331:6;26320:9;26316:22;26285:63;:::i;:::-;26275:73;;26231:127;26397:2;26423:64;26479:7;26470:6;26459:9;26455:22;26423:64;:::i;:::-;26413:74;;26368:129;26536:2;26562:63;26617:7;26608:6;26597:9;26593:22;26562:63;:::i;:::-;26552:73;;26507:128;25983:659;;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "1047800", + "executionCost": "25354", + "totalCost": "1073154" + }, + "external": { + "fee_per_second((uint8,bytes[]))": "infinite", + "index_to_account(uint16)": "infinite", + "transact_info((uint8,bytes[]))": "infinite", + "transact_info_with_signed((uint8,bytes[]))": "infinite", + "transact_through_derivative(uint8,uint16,address,uint64,bytes)": "infinite", + "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)": "infinite", + "transact_through_signed((uint8,bytes[]),address,uint64,bytes)": "infinite", + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)": "infinite", + "xcmtransactor()": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 132, "end": 2891, "name": "MSTORE", "source": 0 }, + { + "begin": 314, + "end": 356, + "name": "PUSH", + "source": 0, + "value": "806" + }, + { + "begin": 255, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 255, "end": 357, "name": "DUP1", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 255, "end": 357, "name": "EXP", "source": 0 }, + { "begin": 255, "end": 357, "name": "DUP2", "source": 0 }, + { "begin": 255, "end": 357, "name": "SLOAD", "source": 0 }, + { "begin": 255, "end": 357, "name": "DUP2", "source": 0 }, + { + "begin": 255, + "end": 357, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 2788, "end": 2882, "name": "MUL", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "NOT", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "AND", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SWAP1", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "DUP4", "source": 0 }, + { "begin": 255, "end": 357, "name": "MUL", "source": 0 }, + { "begin": 255, "end": 357, "name": "NOT", "source": 0 }, + { "begin": 255, "end": 357, "name": "AND", "source": 0 }, + { "begin": 255, "end": 357, "name": "SWAP1", "source": 0 }, + { "begin": 255, "end": 357, "name": "DUP4", "source": 0 }, { - "begin": 2788, - "end": 2882, + "begin": 255, + "end": 357, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 2788, "end": 2882, "name": "AND", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "MUL", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "OR", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SWAP1", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SSTORE", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "POP", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "CALLVALUE", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "ISZERO", "source": 0 }, + { "begin": 255, "end": 357, "name": "AND", "source": 0 }, + { "begin": 255, "end": 357, "name": "MUL", "source": 0 }, + { "begin": 255, "end": 357, "name": "OR", "source": 0 }, + { "begin": 255, "end": 357, "name": "SWAP1", "source": 0 }, + { "begin": 255, "end": 357, "name": "SSTORE", "source": 0 }, + { "begin": 255, "end": 357, "name": "POP", "source": 0 }, + { "begin": 132, "end": 2891, "name": "CALLVALUE", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { "begin": 132, "end": 2891, "name": "ISZERO", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 132, + "end": 2891, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 132, + "end": 2891, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "REVERT", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { "begin": 132, "end": 2891, "name": "REVERT", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 132, + "end": 2891, "name": "tag", "source": 0, "value": "1" }, - { "begin": 2664, "end": 4346, "name": "JUMPDEST", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "POP", "source": 0 }, + { "begin": 132, "end": 2891, "name": "JUMPDEST", "source": 0 }, + { "begin": 132, "end": 2891, "name": "POP", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 132, + "end": 2891, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 132, + "end": 2891, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 2664, - "end": 4346, + "begin": 132, + "end": 2891, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 2664, "end": 4346, "name": "CODECOPY", "source": 0 }, + { "begin": 132, "end": 2891, "name": "CODECOPY", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 132, + "end": 2891, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 2664, "end": 4346, "name": "RETURN", "source": 0 } + { "begin": 132, "end": 2891, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a26469706673582212200c97281bd15caba3cc6efa4a076e6f49a63c3b3c013798a44e77679bfec3fec964736f6c634300080a0033", + ".auxdata": "a2646970667358221220c04621bb052bcda255425291a4fe020cf0831dde7b2dca5e5954b77da1559d9864736f6c634300080b0033", ".code": [ { - "begin": 2664, - "end": 4346, - "name": "PUSH", + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 132, "end": 2891, "name": "MSTORE", "source": 0 }, + { "begin": 132, "end": 2891, "name": "CALLVALUE", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { "begin": 132, "end": 2891, "name": "ISZERO", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { "begin": 132, "end": 2891, "name": "REVERT", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "tag", + "source": 0, + "value": "1" + }, + { "begin": 132, "end": 2891, "name": "JUMPDEST", "source": 0 }, + { "begin": 132, "end": 2891, "name": "POP", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { + "begin": 132, + "end": 2891, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 132, "end": 2891, "name": "LT", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 132, + "end": 2891, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 132, "end": 2891, "name": "SHR", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "71B0EDFA" + }, + { "begin": 132, "end": 2891, "name": "GT", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "71B0EDFA" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "83F09082" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "9F89F03E" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "CB26BF32" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "F87F493F" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { "begin": 132, "end": 2891, "name": "JUMP", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "tag", + "source": 0, + "value": "12" + }, + { "begin": 132, "end": 2891, "name": "JUMPDEST", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "139D697" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "19760407" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "267D4062" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "61FC548F" + }, + { "begin": 132, "end": 2891, "name": "EQ", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { "begin": 132, "end": 2891, "name": "JUMPI", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "tag", + "source": 0, + "value": "2" + }, + { "begin": 132, "end": 2891, "name": "JUMPDEST", "source": 0 }, + { + "begin": 132, + "end": 2891, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 132, "end": 2891, "name": "DUP1", "source": 0 }, + { "begin": 132, "end": 2891, "name": "REVERT", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "tag", + "source": 0, + "value": "3" + }, + { "begin": 2190, "end": 2524, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 2190, + "end": 2524, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2190, "end": 2524, "name": "DUP1", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 2190, "end": 2524, "name": "SUB", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "DUP2", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "ADD", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "SWAP1", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "PUSH [tag]", + "source": 0, + "value": "14" + }, + { "begin": 2190, "end": 2524, "name": "SWAP2", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "SWAP1", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 2190, + "end": 2524, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2190, + "end": 2524, + "name": "tag", + "source": 0, + "value": "14" + }, + { "begin": 2190, "end": 2524, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { + "begin": 2190, + "end": 2524, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2190, + "end": 2524, + "name": "tag", + "source": 0, + "value": "13" + }, + { "begin": 2190, "end": 2524, "name": "JUMPDEST", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "STOP", "source": 0 }, + { + "begin": 2530, + "end": 2889, + "name": "tag", + "source": 0, + "value": "4" + }, + { "begin": 2530, "end": 2889, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2530, + "end": 2889, + "name": "PUSH [tag]", + "source": 0, + "value": "17" + }, + { + "begin": 2530, + "end": 2889, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2530, "end": 2889, "name": "DUP1", "source": 0 }, + { + "begin": 2530, + "end": 2889, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 2530, "end": 2889, "name": "SUB", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "DUP2", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "ADD", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "SWAP1", "source": 0 }, + { + "begin": 2530, + "end": 2889, + "name": "PUSH [tag]", + "source": 0, + "value": "18" + }, + { "begin": 2530, "end": 2889, "name": "SWAP2", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "SWAP1", "source": 0 }, + { + "begin": 2530, + "end": 2889, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { + "begin": 2530, + "end": 2889, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2530, + "end": 2889, + "name": "tag", + "source": 0, + "value": "18" + }, + { "begin": 2530, "end": 2889, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2530, + "end": 2889, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { + "begin": 2530, + "end": 2889, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2530, + "end": 2889, + "name": "tag", + "source": 0, + "value": "17" + }, + { "begin": 2530, "end": 2889, "name": "JUMPDEST", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "STOP", "source": 0 }, + { + "begin": 1810, + "end": 2184, + "name": "tag", + "source": 0, + "value": "5" + }, + { "begin": 1810, "end": 2184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1810, + "end": 2184, + "name": "PUSH [tag]", + "source": 0, + "value": "21" + }, + { + "begin": 1810, + "end": 2184, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1810, "end": 2184, "name": "DUP1", "source": 0 }, + { + "begin": 1810, + "end": 2184, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1810, "end": 2184, "name": "SUB", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "DUP2", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "ADD", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "SWAP1", "source": 0 }, + { + "begin": 1810, + "end": 2184, + "name": "PUSH [tag]", + "source": 0, + "value": "22" + }, + { "begin": 1810, "end": 2184, "name": "SWAP2", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "SWAP1", "source": 0 }, + { + "begin": 1810, + "end": 2184, + "name": "PUSH [tag]", + "source": 0, + "value": "23" + }, + { + "begin": 1810, + "end": 2184, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1810, + "end": 2184, + "name": "tag", + "source": 0, + "value": "22" + }, + { "begin": 1810, "end": 2184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1810, + "end": 2184, + "name": "PUSH [tag]", + "source": 0, + "value": "24" + }, + { + "begin": 1810, + "end": 2184, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1810, + "end": 2184, + "name": "tag", + "source": 0, + "value": "21" + }, + { "begin": 1810, "end": 2184, "name": "JUMPDEST", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "STOP", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "tag", + "source": 0, + "value": "6" + }, + { "begin": 255, "end": 357, "name": "JUMPDEST", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH [tag]", + "source": 0, + "value": "25" + }, + { + "begin": 255, + "end": 357, + "name": "PUSH [tag]", + "source": 0, + "value": "26" + }, + { + "begin": 255, + "end": 357, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 255, + "end": 357, + "name": "tag", + "source": 0, + "value": "25" + }, + { "begin": 255, "end": 357, "name": "JUMPDEST", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 255, "end": 357, "name": "MLOAD", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH [tag]", + "source": 0, + "value": "27" + }, + { "begin": 255, "end": 357, "name": "SWAP2", "source": 0 }, + { "begin": 255, "end": 357, "name": "SWAP1", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH [tag]", + "source": 0, + "value": "28" + }, + { + "begin": 255, + "end": 357, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 255, + "end": 357, + "name": "tag", + "source": 0, + "value": "27" + }, + { "begin": 255, "end": 357, "name": "JUMPDEST", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 255, "end": 357, "name": "MLOAD", "source": 0 }, + { "begin": 255, "end": 357, "name": "DUP1", "source": 0 }, + { "begin": 255, "end": 357, "name": "SWAP2", "source": 0 }, + { "begin": 255, "end": 357, "name": "SUB", "source": 0 }, + { "begin": 255, "end": 357, "name": "SWAP1", "source": 0 }, + { "begin": 255, "end": 357, "name": "RETURN", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "tag", + "source": 0, + "value": "7" + }, + { "begin": 364, "end": 614, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH [tag]", + "source": 0, + "value": "29" + }, + { + "begin": 364, + "end": 614, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 364, "end": 614, "name": "DUP1", "source": 0 }, + { "begin": 364, "end": 614, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 364, "end": 614, "name": "SUB", "source": 0 }, + { "begin": 364, "end": 614, "name": "DUP2", "source": 0 }, + { "begin": 364, "end": 614, "name": "ADD", "source": 0 }, + { "begin": 364, "end": 614, "name": "SWAP1", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH [tag]", + "source": 0, + "value": "30" + }, + { "begin": 364, "end": 614, "name": "SWAP2", "source": 0 }, + { "begin": 364, "end": 614, "name": "SWAP1", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH [tag]", + "source": 0, + "value": "31" + }, + { + "begin": 364, + "end": 614, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 364, + "end": 614, + "name": "tag", + "source": 0, + "value": "30" + }, + { "begin": 364, "end": 614, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH [tag]", + "source": 0, + "value": "32" + }, + { + "begin": 364, + "end": 614, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 364, + "end": 614, + "name": "tag", + "source": 0, + "value": "29" + }, + { "begin": 364, "end": 614, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 364, "end": 614, "name": "MLOAD", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH [tag]", + "source": 0, + "value": "33" + }, + { "begin": 364, "end": 614, "name": "SWAP2", "source": 0 }, + { "begin": 364, "end": 614, "name": "SWAP1", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH [tag]", + "source": 0, + "value": "34" + }, + { + "begin": 364, + "end": 614, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 364, + "end": 614, + "name": "tag", + "source": 0, + "value": "33" + }, + { "begin": 364, "end": 614, "name": "JUMPDEST", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 364, "end": 614, "name": "MLOAD", "source": 0 }, + { "begin": 364, "end": 614, "name": "DUP1", "source": 0 }, + { "begin": 364, "end": 614, "name": "SWAP2", "source": 0 }, + { "begin": 364, "end": 614, "name": "SUB", "source": 0 }, + { "begin": 364, "end": 614, "name": "SWAP1", "source": 0 }, + { "begin": 364, "end": 614, "name": "RETURN", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "tag", + "source": 0, + "value": "8" + }, + { "begin": 1183, "end": 1387, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH [tag]", + "source": 0, + "value": "35" + }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1183, "end": 1387, "name": "DUP1", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1183, "end": 1387, "name": "SUB", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "DUP2", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "ADD", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SWAP1", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH [tag]", + "source": 0, + "value": "36" + }, + { "begin": 1183, "end": 1387, "name": "SWAP2", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SWAP1", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH [tag]", + "source": 0, + "value": "37" + }, + { + "begin": 1183, + "end": 1387, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1183, + "end": 1387, + "name": "tag", + "source": 0, + "value": "36" + }, + { "begin": 1183, "end": 1387, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH [tag]", + "source": 0, + "value": "38" + }, + { + "begin": 1183, + "end": 1387, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1183, + "end": 1387, + "name": "tag", + "source": 0, + "value": "35" + }, + { "begin": 1183, "end": 1387, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1183, "end": 1387, "name": "MLOAD", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH [tag]", + "source": 0, + "value": "39" + }, + { "begin": 1183, "end": 1387, "name": "SWAP2", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SWAP1", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH [tag]", + "source": 0, + "value": "40" + }, + { + "begin": 1183, + "end": 1387, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1183, + "end": 1387, + "name": "tag", + "source": 0, + "value": "39" + }, + { "begin": 1183, "end": 1387, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1183, "end": 1387, "name": "MLOAD", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "DUP1", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SWAP2", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SUB", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SWAP1", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "RETURN", "source": 0 }, + { + "begin": 1393, + "end": 1804, + "name": "tag", + "source": 0, + "value": "9" + }, + { "begin": 1393, "end": 1804, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1393, + "end": 1804, + "name": "PUSH [tag]", + "source": 0, + "value": "41" + }, + { + "begin": 1393, + "end": 1804, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1393, "end": 1804, "name": "DUP1", "source": 0 }, + { + "begin": 1393, + "end": 1804, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 1393, "end": 1804, "name": "SUB", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "DUP2", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "ADD", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "SWAP1", "source": 0 }, + { + "begin": 1393, + "end": 1804, + "name": "PUSH [tag]", + "source": 0, + "value": "42" + }, + { "begin": 1393, "end": 1804, "name": "SWAP2", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "SWAP1", "source": 0 }, + { + "begin": 1393, + "end": 1804, + "name": "PUSH [tag]", + "source": 0, + "value": "43" + }, + { + "begin": 1393, + "end": 1804, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1393, + "end": 1804, + "name": "tag", + "source": 0, + "value": "42" + }, + { "begin": 1393, "end": 1804, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1393, + "end": 1804, + "name": "PUSH [tag]", + "source": 0, + "value": "44" + }, + { + "begin": 1393, + "end": 1804, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1393, + "end": 1804, + "name": "tag", + "source": 0, + "value": "41" + }, + { "begin": 1393, "end": 1804, "name": "JUMPDEST", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "STOP", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "tag", + "source": 0, + "value": "10" + }, + { "begin": 890, "end": 1177, "name": "JUMPDEST", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH [tag]", + "source": 0, + "value": "45" + }, + { + "begin": 890, + "end": 1177, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 890, "end": 1177, "name": "DUP1", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "CALLDATASIZE", + "source": 0 + }, + { "begin": 890, "end": 1177, "name": "SUB", "source": 0 }, + { "begin": 890, "end": 1177, "name": "DUP2", "source": 0 }, + { "begin": 890, "end": 1177, "name": "ADD", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP1", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH [tag]", + "source": 0, + "value": "46" + }, + { "begin": 890, "end": 1177, "name": "SWAP2", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP1", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH [tag]", + "source": 0, + "value": "37" + }, + { + "begin": 890, + "end": 1177, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 890, + "end": 1177, + "name": "tag", + "source": 0, + "value": "46" + }, + { "begin": 890, "end": 1177, "name": "JUMPDEST", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH [tag]", + "source": 0, + "value": "47" + }, + { + "begin": 890, + "end": 1177, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 890, + "end": 1177, + "name": "tag", + "source": 0, + "value": "45" + }, + { "begin": 890, "end": 1177, "name": "JUMPDEST", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 890, "end": 1177, "name": "MLOAD", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH [tag]", + "source": 0, + "value": "48" + }, + { "begin": 890, "end": 1177, "name": "SWAP4", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP3", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP2", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP1", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH [tag]", + "source": 0, + "value": "49" + }, + { + "begin": 890, + "end": 1177, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 890, + "end": 1177, + "name": "tag", + "source": 0, + "value": "48" + }, + { "begin": 890, "end": 1177, "name": "JUMPDEST", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 890, "end": 1177, "name": "MLOAD", "source": 0 }, + { "begin": 890, "end": 1177, "name": "DUP1", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP2", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SUB", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP1", "source": 0 }, + { "begin": 890, "end": 1177, "name": "RETURN", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "tag", + "source": 0, + "value": "11" + }, + { "begin": 620, "end": 884, "name": "JUMPDEST", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH [tag]", + "source": 0, + "value": "50" + }, + { + "begin": 620, + "end": 884, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 620, "end": 884, "name": "DUP1", "source": 0 }, + { "begin": 620, "end": 884, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 620, "end": 884, "name": "SUB", "source": 0 }, + { "begin": 620, "end": 884, "name": "DUP2", "source": 0 }, + { "begin": 620, "end": 884, "name": "ADD", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP1", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH [tag]", + "source": 0, + "value": "51" + }, + { "begin": 620, "end": 884, "name": "SWAP2", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP1", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH [tag]", + "source": 0, + "value": "37" + }, + { + "begin": 620, + "end": 884, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 620, + "end": 884, + "name": "tag", + "source": 0, + "value": "51" + }, + { "begin": 620, "end": 884, "name": "JUMPDEST", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH [tag]", + "source": 0, + "value": "52" + }, + { + "begin": 620, + "end": 884, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 620, + "end": 884, + "name": "tag", + "source": 0, + "value": "50" + }, + { "begin": 620, "end": 884, "name": "JUMPDEST", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 620, "end": 884, "name": "MLOAD", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH [tag]", + "source": 0, + "value": "53" + }, + { "begin": 620, "end": 884, "name": "SWAP4", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP3", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP2", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP1", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH [tag]", + "source": 0, + "value": "54" + }, + { + "begin": 620, + "end": 884, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 620, + "end": 884, + "name": "tag", + "source": 0, + "value": "53" + }, + { "begin": 620, "end": 884, "name": "JUMPDEST", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 620, "end": 884, "name": "MLOAD", "source": 0 }, + { "begin": 620, "end": 884, "name": "DUP1", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP2", "source": 0 }, + { "begin": 620, "end": 884, "name": "SUB", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP1", "source": 0 }, + { "begin": 620, "end": 884, "name": "RETURN", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "tag", + "source": 0, + "value": "16" + }, + { "begin": 2190, "end": 2524, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2380, + "end": 2393, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2380, "end": 2393, "name": "DUP1", "source": 0 }, + { "begin": 2380, "end": 2393, "name": "SLOAD", "source": 0 }, + { "begin": 2380, "end": 2393, "name": "SWAP1", "source": 0 }, + { + "begin": 2380, + "end": 2393, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 2380, "end": 2393, "name": "EXP", "source": 0 }, + { "begin": 2380, "end": 2393, "name": "SWAP1", "source": 0 }, + { "begin": 2380, "end": 2393, "name": "DIV", "source": 0 }, + { + "begin": 2380, + "end": 2393, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 2380, "end": 2393, "name": "AND", "source": 0 }, + { + "begin": 2380, + "end": 2417, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 2380, "end": 2417, "name": "AND", "source": 0 }, + { + "begin": 2380, + "end": 2417, + "name": "PUSH", + "source": 0, + "value": "139D697" + }, + { "begin": 2431, "end": 2435, "name": "DUP6", "source": 0 }, + { "begin": 2449, "end": 2469, "name": "DUP6", "source": 0 }, + { "begin": 2483, "end": 2489, "name": "DUP6", "source": 0 }, + { "begin": 2503, "end": 2507, "name": "DUP6", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2380, "end": 2517, "name": "MLOAD", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP6", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 2380, "end": 2517, "name": "AND", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 2380, "end": 2517, "name": "SHL", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP2", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "MSTORE", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2380, "end": 2517, "name": "ADD", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH [tag]", + "source": 0, + "value": "56" + }, + { "begin": 2380, "end": 2517, "name": "SWAP5", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "SWAP4", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "SWAP3", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "SWAP2", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "SWAP1", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH [tag]", + "source": 0, + "value": "57" + }, + { + "begin": 2380, + "end": 2517, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2380, + "end": 2517, + "name": "tag", + "source": 0, + "value": "56" + }, + { "begin": 2380, "end": 2517, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2380, "end": 2517, "name": "MLOAD", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP1", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP4", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "SUB", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP2", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2380, "end": 2517, "name": "DUP8", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP1", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "EXTCODESIZE", + "source": 0 + }, + { "begin": 2380, "end": 2517, "name": "ISZERO", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP1", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "ISZERO", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH [tag]", + "source": 0, + "value": "58" + }, + { "begin": 2380, "end": 2517, "name": "JUMPI", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2380, "end": 2517, "name": "DUP1", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "REVERT", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "tag", + "source": 0, + "value": "58" + }, + { "begin": 2380, "end": 2517, "name": "JUMPDEST", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "POP", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "GAS", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "CALL", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "ISZERO", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "DUP1", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "ISZERO", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH [tag]", + "source": 0, + "value": "60" + }, + { "begin": 2380, "end": 2517, "name": "JUMPI", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2380, "end": 2517, "name": "DUP1", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 2380, + "end": 2517, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 2380, + "end": 2517, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2380, "end": 2517, "name": "REVERT", "source": 0 }, + { + "begin": 2380, + "end": 2517, + "name": "tag", + "source": 0, + "value": "60" + }, + { "begin": 2380, "end": 2517, "name": "JUMPDEST", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "POP", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "POP", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "POP", "source": 0 }, + { "begin": 2380, "end": 2517, "name": "POP", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "POP", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "POP", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "POP", "source": 0 }, + { "begin": 2190, "end": 2524, "name": "POP", "source": 0 }, + { + "begin": 2190, + "end": 2524, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 2530, + "end": 2889, + "name": "tag", + "source": 0, + "value": "20" + }, + { "begin": 2530, "end": 2889, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2739, + "end": 2752, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2739, "end": 2752, "name": "DUP1", "source": 0 }, + { "begin": 2739, "end": 2752, "name": "SLOAD", "source": 0 }, + { "begin": 2739, "end": 2752, "name": "SWAP1", "source": 0 }, + { + "begin": 2739, + "end": 2752, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 2739, "end": 2752, "name": "EXP", "source": 0 }, + { "begin": 2739, "end": 2752, "name": "SWAP1", "source": 0 }, + { "begin": 2739, "end": 2752, "name": "DIV", "source": 0 }, + { + "begin": 2739, + "end": 2752, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 2739, "end": 2752, "name": "AND", "source": 0 }, + { + "begin": 2739, + "end": 2790, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 2739, "end": 2790, "name": "AND", "source": 0 }, + { + "begin": 2739, + "end": 2790, + "name": "PUSH", + "source": 0, + "value": "19760407" + }, + { "begin": 2804, "end": 2808, "name": "DUP6", "source": 0 }, + { "begin": 2822, "end": 2834, "name": "DUP6", "source": 0 }, + { "begin": 2848, "end": 2854, "name": "DUP6", "source": 0 }, + { "begin": 2868, "end": 2872, "name": "DUP6", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2739, "end": 2882, "name": "MLOAD", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP6", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 2739, "end": 2882, "name": "AND", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 2739, "end": 2882, "name": "SHL", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP2", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "MSTORE", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2739, "end": 2882, "name": "ADD", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH [tag]", + "source": 0, + "value": "62" + }, + { "begin": 2739, "end": 2882, "name": "SWAP5", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "SWAP4", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "SWAP3", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "SWAP2", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "SWAP1", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH [tag]", + "source": 0, + "value": "63" + }, + { + "begin": 2739, + "end": 2882, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2739, + "end": 2882, + "name": "tag", + "source": 0, + "value": "62" + }, + { "begin": 2739, "end": 2882, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2739, "end": 2882, "name": "MLOAD", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP1", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP4", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "SUB", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP2", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2739, "end": 2882, "name": "DUP8", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP1", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "EXTCODESIZE", + "source": 0 + }, + { "begin": 2739, "end": 2882, "name": "ISZERO", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP1", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "ISZERO", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH [tag]", + "source": 0, + "value": "64" + }, + { "begin": 2739, "end": 2882, "name": "JUMPI", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2739, "end": 2882, "name": "DUP1", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "REVERT", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "tag", + "source": 0, + "value": "64" + }, + { "begin": 2739, "end": 2882, "name": "JUMPDEST", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "POP", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "GAS", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "CALL", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "ISZERO", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "DUP1", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "ISZERO", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH [tag]", + "source": 0, + "value": "66" + }, + { "begin": 2739, "end": 2882, "name": "JUMPI", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2739, "end": 2882, "name": "DUP1", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 2739, + "end": 2882, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 2739, + "end": 2882, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2739, "end": 2882, "name": "REVERT", "source": 0 }, + { + "begin": 2739, + "end": 2882, + "name": "tag", + "source": 0, + "value": "66" + }, + { "begin": 2739, "end": 2882, "name": "JUMPDEST", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "POP", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "POP", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "POP", "source": 0 }, + { "begin": 2739, "end": 2882, "name": "POP", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "POP", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "POP", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "POP", "source": 0 }, + { "begin": 2530, "end": 2889, "name": "POP", "source": 0 }, + { + "begin": 2530, + "end": 2889, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1810, + "end": 2184, + "name": "tag", + "source": 0, + "value": "24" + }, + { "begin": 1810, "end": 2184, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2014, + "end": 2027, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2014, "end": 2027, "name": "DUP1", "source": 0 }, + { "begin": 2014, "end": 2027, "name": "SLOAD", "source": 0 }, + { "begin": 2014, "end": 2027, "name": "SWAP1", "source": 0 }, + { + "begin": 2014, + "end": 2027, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 2014, "end": 2027, "name": "EXP", "source": 0 }, + { "begin": 2014, "end": 2027, "name": "SWAP1", "source": 0 }, + { "begin": 2014, "end": 2027, "name": "DIV", "source": 0 }, + { + "begin": 2014, + "end": 2027, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 2014, "end": 2027, "name": "AND", "source": 0 }, + { + "begin": 2014, + "end": 2055, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 2014, "end": 2055, "name": "AND", "source": 0 }, + { + "begin": 2014, + "end": 2055, + "name": "PUSH", + "source": 0, + "value": "267D4062" + }, + { "begin": 2069, "end": 2079, "name": "DUP7", "source": 0 }, + { "begin": 2093, "end": 2098, "name": "DUP7", "source": 0 }, + { "begin": 2112, "end": 2123, "name": "DUP7", "source": 0 }, + { "begin": 2137, "end": 2143, "name": "DUP7", "source": 0 }, + { "begin": 2157, "end": 2167, "name": "DUP7", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2014, "end": 2177, "name": "MLOAD", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP7", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 2014, "end": 2177, "name": "AND", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 2014, "end": 2177, "name": "SHL", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP2", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "MSTORE", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 2014, "end": 2177, "name": "ADD", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH [tag]", + "source": 0, + "value": "68" + }, + { "begin": 2014, "end": 2177, "name": "SWAP6", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "SWAP5", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "SWAP4", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "SWAP3", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "SWAP2", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "SWAP1", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH [tag]", + "source": 0, + "value": "69" + }, + { + "begin": 2014, + "end": 2177, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 2014, + "end": 2177, + "name": "tag", + "source": 0, + "value": "68" + }, + { "begin": 2014, "end": 2177, "name": "JUMPDEST", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 2014, "end": 2177, "name": "MLOAD", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP1", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP4", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "SUB", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP2", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2014, "end": 2177, "name": "DUP8", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP1", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "EXTCODESIZE", + "source": 0 + }, + { "begin": 2014, "end": 2177, "name": "ISZERO", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP1", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "ISZERO", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH [tag]", + "source": 0, + "value": "70" + }, + { "begin": 2014, "end": 2177, "name": "JUMPI", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2014, "end": 2177, "name": "DUP1", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "REVERT", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "tag", + "source": 0, + "value": "70" + }, + { "begin": 2014, "end": 2177, "name": "JUMPDEST", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "POP", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "GAS", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "CALL", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "ISZERO", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "DUP1", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "ISZERO", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH [tag]", + "source": 0, + "value": "72" + }, + { "begin": 2014, "end": 2177, "name": "JUMPI", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2014, "end": 2177, "name": "DUP1", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 2014, + "end": 2177, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 2014, + "end": 2177, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 2014, "end": 2177, "name": "REVERT", "source": 0 }, + { + "begin": 2014, + "end": 2177, + "name": "tag", + "source": 0, + "value": "72" + }, + { "begin": 2014, "end": 2177, "name": "JUMPDEST", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "POP", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "POP", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "POP", "source": 0 }, + { "begin": 2014, "end": 2177, "name": "POP", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "POP", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "POP", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "POP", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "POP", "source": 0 }, + { "begin": 1810, "end": 2184, "name": "POP", "source": 0 }, + { + "begin": 1810, + "end": 2184, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 255, + "end": 357, + "name": "tag", + "source": 0, + "value": "26" + }, + { "begin": 255, "end": 357, "name": "JUMPDEST", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 255, "end": 357, "name": "DUP1", "source": 0 }, + { "begin": 255, "end": 357, "name": "SLOAD", "source": 0 }, + { "begin": 255, "end": 357, "name": "SWAP1", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 255, "end": 357, "name": "EXP", "source": 0 }, + { "begin": 255, "end": 357, "name": "SWAP1", "source": 0 }, + { "begin": 255, "end": 357, "name": "DIV", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 255, "end": 357, "name": "AND", "source": 0 }, + { "begin": 255, "end": 357, "name": "DUP2", "source": 0 }, + { + "begin": 255, + "end": 357, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 364, + "end": 614, + "name": "tag", + "source": 0, + "value": "32" + }, + { "begin": 364, "end": 614, "name": "JUMPDEST", "source": 0 }, + { + "begin": 468, + "end": 475, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 570, "end": 583, "name": "DUP1", "source": 0 }, + { + "begin": 570, + "end": 583, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 570, "end": 583, "name": "SWAP1", "source": 0 }, + { "begin": 570, "end": 583, "name": "SLOAD", "source": 0 }, + { "begin": 570, "end": 583, "name": "SWAP1", "source": 0 }, + { + "begin": 570, + "end": 583, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 570, "end": 583, "name": "EXP", "source": 0 }, + { "begin": 570, "end": 583, "name": "SWAP1", "source": 0 }, + { "begin": 570, "end": 583, "name": "DIV", "source": 0 }, + { + "begin": 570, + "end": 583, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 570, "end": 583, "name": "AND", "source": 0 }, + { + "begin": 570, + "end": 600, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 570, "end": 600, "name": "AND", "source": 0 }, + { + "begin": 570, + "end": 600, + "name": "PUSH", + "source": 0, + "value": "71B0EDFA" + }, + { "begin": 601, "end": 606, "name": "DUP4", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 570, "end": 607, "name": "MLOAD", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP3", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 570, "end": 607, "name": "AND", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 570, "end": 607, "name": "SHL", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP2", "source": 0 }, + { "begin": 570, "end": 607, "name": "MSTORE", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 570, "end": 607, "name": "ADD", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH [tag]", + "source": 0, + "value": "74" + }, + { "begin": 570, "end": 607, "name": "SWAP2", "source": 0 }, + { "begin": 570, "end": 607, "name": "SWAP1", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH [tag]", + "source": 0, + "value": "75" + }, + { + "begin": 570, + "end": 607, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 570, + "end": 607, + "name": "tag", + "source": 0, + "value": "74" + }, + { "begin": 570, "end": 607, "name": "JUMPDEST", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 570, "end": 607, "name": "MLOAD", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP1", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP4", "source": 0 }, + { "begin": 570, "end": 607, "name": "SUB", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP2", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP7", "source": 0 }, + { "begin": 570, "end": 607, "name": "GAS", "source": 0 }, + { "begin": 570, "end": 607, "name": "STATICCALL", "source": 0 }, + { "begin": 570, "end": 607, "name": "ISZERO", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP1", "source": 0 }, + { "begin": 570, "end": 607, "name": "ISZERO", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH [tag]", + "source": 0, + "value": "77" + }, + { "begin": 570, "end": 607, "name": "JUMPI", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 570, "end": 607, "name": "DUP1", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 570, + "end": 607, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 570, "end": 607, "name": "REVERT", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "tag", + "source": 0, + "value": "77" + }, + { "begin": 570, "end": 607, "name": "JUMPDEST", "source": 0 }, + { "begin": 570, "end": 607, "name": "POP", "source": 0 }, + { "begin": 570, "end": 607, "name": "POP", "source": 0 }, + { "begin": 570, "end": 607, "name": "POP", "source": 0 }, + { "begin": 570, "end": 607, "name": "POP", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 570, "end": 607, "name": "MLOAD", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 570, "end": 607, "name": "NOT", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 570, "end": 607, "name": "DUP3", "source": 0 }, + { "begin": 570, "end": 607, "name": "ADD", "source": 0 }, + { "begin": 570, "end": 607, "name": "AND", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP3", "source": 0 }, + { "begin": 570, "end": 607, "name": "ADD", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP1", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 570, "end": 607, "name": "MSTORE", "source": 0 }, + { "begin": 570, "end": 607, "name": "POP", "source": 0 }, + { "begin": 570, "end": 607, "name": "DUP2", "source": 0 }, + { "begin": 570, "end": 607, "name": "ADD", "source": 0 }, + { "begin": 570, "end": 607, "name": "SWAP1", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH [tag]", + "source": 0, + "value": "78" + }, + { "begin": 570, "end": 607, "name": "SWAP2", "source": 0 }, + { "begin": 570, "end": 607, "name": "SWAP1", "source": 0 }, + { + "begin": 570, + "end": 607, + "name": "PUSH [tag]", + "source": 0, + "value": "79" + }, + { + "begin": 570, + "end": 607, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 570, + "end": 607, + "name": "tag", + "source": 0, + "value": "78" + }, + { "begin": 570, "end": 607, "name": "JUMPDEST", "source": 0 }, + { "begin": 563, "end": 607, "name": "SWAP1", "source": 0 }, + { "begin": 563, "end": 607, "name": "POP", "source": 0 }, + { "begin": 364, "end": 614, "name": "SWAP2", "source": 0 }, + { "begin": 364, "end": 614, "name": "SWAP1", "source": 0 }, + { "begin": 364, "end": 614, "name": "POP", "source": 0 }, + { + "begin": 364, + "end": 614, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1183, + "end": 1387, + "name": "tag", + "source": 0, + "value": "38" + }, + { "begin": 1183, "end": 1387, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1307, + "end": 1314, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1337, "end": 1350, "name": "DUP1", "source": 0 }, + { + "begin": 1337, + "end": 1350, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1337, "end": 1350, "name": "SWAP1", "source": 0 }, + { "begin": 1337, "end": 1350, "name": "SLOAD", "source": 0 }, + { "begin": 1337, "end": 1350, "name": "SWAP1", "source": 0 }, + { + "begin": 1337, + "end": 1350, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 1337, "end": 1350, "name": "EXP", "source": 0 }, + { "begin": 1337, "end": 1350, "name": "SWAP1", "source": 0 }, + { "begin": 1337, "end": 1350, "name": "DIV", "source": 0 }, + { + "begin": 1337, + "end": 1350, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1337, "end": 1350, "name": "AND", "source": 0 }, + { + "begin": 1337, + "end": 1365, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1337, "end": 1365, "name": "AND", "source": 0 }, + { + "begin": 1337, + "end": 1365, + "name": "PUSH", + "source": 0, + "value": "83F09082" + }, + { "begin": 1366, "end": 1379, "name": "DUP4", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1337, "end": 1380, "name": "MLOAD", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP3", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 1337, "end": 1380, "name": "AND", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 1337, "end": 1380, "name": "SHL", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP2", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "MSTORE", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1337, "end": 1380, "name": "ADD", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH [tag]", + "source": 0, + "value": "81" + }, + { "begin": 1337, "end": 1380, "name": "SWAP2", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "SWAP1", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH [tag]", + "source": 0, + "value": "82" + }, + { + "begin": 1337, + "end": 1380, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1337, + "end": 1380, + "name": "tag", + "source": 0, + "value": "81" + }, + { "begin": 1337, "end": 1380, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "20" + }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1337, "end": 1380, "name": "MLOAD", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP1", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP4", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "SUB", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP2", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP7", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "GAS", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "STATICCALL", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "ISZERO", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP1", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "ISZERO", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH [tag]", + "source": 0, + "value": "84" + }, + { "begin": 1337, "end": 1380, "name": "JUMPI", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1337, "end": 1380, "name": "DUP1", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 1337, + "end": 1380, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1337, "end": 1380, "name": "REVERT", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "tag", + "source": 0, + "value": "84" + }, + { "begin": 1337, "end": 1380, "name": "JUMPDEST", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "POP", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "POP", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "POP", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "POP", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1337, "end": 1380, "name": "MLOAD", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 1337, "end": 1380, "name": "NOT", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 1337, "end": 1380, "name": "DUP3", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "ADD", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "AND", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP3", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "ADD", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP1", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1337, "end": 1380, "name": "MSTORE", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "POP", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "DUP2", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "ADD", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "SWAP1", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH [tag]", + "source": 0, + "value": "85" + }, + { "begin": 1337, "end": 1380, "name": "SWAP2", "source": 0 }, + { "begin": 1337, "end": 1380, "name": "SWAP1", "source": 0 }, + { + "begin": 1337, + "end": 1380, + "name": "PUSH [tag]", + "source": 0, + "value": "86" + }, + { + "begin": 1337, + "end": 1380, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1337, + "end": 1380, + "name": "tag", + "source": 0, + "value": "85" + }, + { "begin": 1337, "end": 1380, "name": "JUMPDEST", "source": 0 }, + { "begin": 1330, "end": 1380, "name": "SWAP1", "source": 0 }, + { "begin": 1330, "end": 1380, "name": "POP", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SWAP2", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "SWAP1", "source": 0 }, + { "begin": 1183, "end": 1387, "name": "POP", "source": 0 }, + { + "begin": 1183, + "end": 1387, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 1393, + "end": 1804, + "name": "tag", + "source": 0, + "value": "44" + }, + { "begin": 1393, "end": 1804, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1622, + "end": 1635, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1622, "end": 1635, "name": "DUP1", "source": 0 }, + { "begin": 1622, "end": 1635, "name": "SLOAD", "source": 0 }, + { "begin": 1622, "end": 1635, "name": "SWAP1", "source": 0 }, + { + "begin": 1622, + "end": 1635, + "name": "PUSH", + "source": 0, + "value": "100" + }, + { "begin": 1622, "end": 1635, "name": "EXP", "source": 0 }, + { "begin": 1622, "end": 1635, "name": "SWAP1", "source": 0 }, + { "begin": 1622, "end": 1635, "name": "DIV", "source": 0 }, + { + "begin": 1622, + "end": 1635, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1622, "end": 1635, "name": "AND", "source": 0 }, + { + "begin": 1622, + "end": 1677, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { "begin": 1622, "end": 1677, "name": "AND", "source": 0 }, + { + "begin": 1622, + "end": 1677, + "name": "PUSH", + "source": 0, + "value": "9F89F03E" + }, + { "begin": 1691, "end": 1701, "name": "DUP7", "source": 0 }, + { "begin": 1715, "end": 1720, "name": "DUP7", "source": 0 }, + { "begin": 1734, "end": 1743, "name": "DUP7", "source": 0 }, + { "begin": 1757, "end": 1763, "name": "DUP7", "source": 0 }, + { "begin": 1777, "end": 1787, "name": "DUP7", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1622, "end": 1797, "name": "MLOAD", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP7", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 1622, "end": 1797, "name": "AND", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 1622, "end": 1797, "name": "SHL", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP2", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "MSTORE", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 1622, "end": 1797, "name": "ADD", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH [tag]", + "source": 0, + "value": "88" + }, + { "begin": 1622, "end": 1797, "name": "SWAP6", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "SWAP5", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "SWAP4", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "SWAP3", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "SWAP2", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "SWAP1", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH [tag]", + "source": 0, + "value": "89" + }, + { + "begin": 1622, + "end": 1797, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1622, + "end": 1797, + "name": "tag", + "source": 0, + "value": "88" + }, + { "begin": 1622, "end": 1797, "name": "JUMPDEST", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1622, "end": 1797, "name": "MLOAD", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP1", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP4", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "SUB", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP2", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { "begin": 1622, "end": 1797, "name": "DUP8", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP1", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "EXTCODESIZE", + "source": 0 + }, + { "begin": 1622, "end": 1797, "name": "ISZERO", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP1", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "ISZERO", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "PUSH [tag]", "source": 0, - "value": "80" + "value": "90" }, + { "begin": 1622, "end": 1797, "name": "JUMPI", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1622, + "end": 1797, "name": "PUSH", "source": 0, - "value": "40" + "value": "0" + }, + { "begin": 1622, "end": 1797, "name": "DUP1", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "REVERT", "source": 0 }, + { + "begin": 1622, + "end": 1797, + "name": "tag", + "source": 0, + "value": "90" }, - { "begin": 2664, "end": 4346, "name": "MSTORE", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "CALLVALUE", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "ISZERO", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "JUMPDEST", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "POP", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "GAS", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "CALL", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "ISZERO", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP1", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "ISZERO", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1622, + "end": 1797, "name": "PUSH [tag]", "source": 0, - "value": "1" + "value": "92" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "JUMPI", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1622, + "end": 1797, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1622, + "end": 1797, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "REVERT", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "DUP1", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "tag", - "source": 0, - "value": "1" + "begin": 1622, + "end": 1797, + "name": "RETURNDATACOPY", + "source": 0 + }, + { + "begin": 1622, + "end": 1797, + "name": "RETURNDATASIZE", + "source": 0 }, - { "begin": 2664, "end": 4346, "name": "JUMPDEST", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "POP", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1622, + "end": 1797, "name": "PUSH", "source": 0, - "value": "4" + "value": "0" }, + { "begin": 1622, "end": 1797, "name": "REVERT", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "CALLDATASIZE", - "source": 0 + "begin": 1622, + "end": 1797, + "name": "tag", + "source": 0, + "value": "92" + }, + { "begin": 1622, "end": 1797, "name": "JUMPDEST", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "POP", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "POP", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "POP", "source": 0 }, + { "begin": 1622, "end": 1797, "name": "POP", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "POP", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "POP", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "POP", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "POP", "source": 0 }, + { "begin": 1393, "end": 1804, "name": "POP", "source": 0 }, + { + "begin": 1393, + "end": 1804, + "name": "JUMP", + "source": 0, + "value": "[out]" }, - { "begin": 2664, "end": 4346, "name": "LT", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "PUSH [tag]", + "begin": 890, + "end": 1177, + "name": "tag", "source": 0, - "value": "2" + "value": "47" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, + { "begin": 890, "end": 1177, "name": "JUMPDEST", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1038, + "end": 1044, "name": "PUSH", "source": 0, "value": "0" }, + { "begin": 1058, "end": 1064, "name": "DUP1", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "CALLDATALOAD", - "source": 0 + "begin": 1078, + "end": 1084, + "name": "PUSH", + "source": 0, + "value": "0" }, + { "begin": 1116, "end": 1129, "name": "DUP1", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1129, "name": "PUSH", "source": 0, - "value": "E0" + "value": "0" }, - { "begin": 2664, "end": 4346, "name": "SHR", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, + { "begin": 1116, "end": 1129, "name": "SWAP1", "source": 0 }, + { "begin": 1116, "end": 1129, "name": "SLOAD", "source": 0 }, + { "begin": 1116, "end": 1129, "name": "SWAP1", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1129, "name": "PUSH", "source": 0, - "value": "267D4062" + "value": "100" }, - { "begin": 2664, "end": 4346, "name": "EQ", "source": 0 }, + { "begin": 1116, "end": 1129, "name": "EXP", "source": 0 }, + { "begin": 1116, "end": 1129, "name": "SWAP1", "source": 0 }, + { "begin": 1116, "end": 1129, "name": "DIV", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "PUSH [tag]", + "begin": 1116, + "end": 1129, + "name": "PUSH", "source": 0, - "value": "3" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, + { "begin": 1116, "end": 1129, "name": "AND", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1155, "name": "PUSH", "source": 0, - "value": "61FC548F" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 2664, "end": 4346, "name": "EQ", "source": 0 }, + { "begin": 1116, "end": 1155, "name": "AND", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "PUSH [tag]", + "begin": 1116, + "end": 1155, + "name": "PUSH", "source": 0, - "value": "4" + "value": "CB26BF32" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, + { "begin": 1156, "end": 1169, "name": "DUP6", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1170, "name": "PUSH", "source": 0, - "value": "71B0EDFA" + "value": "40" }, - { "begin": 2664, "end": 4346, "name": "EQ", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "MLOAD", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP3", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "PUSH [tag]", + "begin": 1116, + "end": 1170, + "name": "PUSH", "source": 0, - "value": "5" + "value": "FFFFFFFF" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "AND", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1170, "name": "PUSH", "source": 0, - "value": "9F89F03E" + "value": "E0" + }, + { "begin": 1116, "end": 1170, "name": "SHL", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP2", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "MSTORE", "source": 0 }, + { + "begin": 1116, + "end": 1170, + "name": "PUSH", + "source": 0, + "value": "4" }, - { "begin": 2664, "end": 4346, "name": "EQ", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "ADD", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1170, "name": "PUSH [tag]", "source": 0, - "value": "6" + "value": "94" + }, + { "begin": 1116, "end": 1170, "name": "SWAP2", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "SWAP1", "source": 0 }, + { + "begin": 1116, + "end": 1170, + "name": "PUSH [tag]", + "source": 0, + "value": "82" + }, + { + "begin": 1116, + "end": 1170, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 1116, + "end": 1170, + "name": "tag", + "source": 0, + "value": "94" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "JUMPDEST", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1170, "name": "PUSH", "source": 0, - "value": "F87F493F" + "value": "60" }, - { "begin": 2664, "end": 4346, "name": "EQ", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1170, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { "begin": 1116, "end": 1170, "name": "MLOAD", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP1", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP4", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "SUB", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP2", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP7", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "GAS", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "STATICCALL", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "ISZERO", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP1", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "ISZERO", "source": 0 }, + { + "begin": 1116, + "end": 1170, "name": "PUSH [tag]", "source": 0, - "value": "7" + "value": "96" }, - { "begin": 2664, "end": 4346, "name": "JUMPI", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "JUMPI", "source": 0 }, { - "begin": 2664, - "end": 4346, - "name": "tag", + "begin": 1116, + "end": 1170, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1116, + "end": 1170, + "name": "PUSH", "source": 0, - "value": "2" + "value": "0" + }, + { "begin": 1116, "end": 1170, "name": "DUP1", "source": 0 }, + { + "begin": 1116, + "end": 1170, + "name": "RETURNDATACOPY", + "source": 0 }, - { "begin": 2664, "end": 4346, "name": "JUMPDEST", "source": 0 }, { - "begin": 2664, - "end": 4346, + "begin": 1116, + "end": 1170, + "name": "RETURNDATASIZE", + "source": 0 + }, + { + "begin": 1116, + "end": 1170, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 2664, "end": 4346, "name": "DUP1", "source": 0 }, - { "begin": 2664, "end": 4346, "name": "REVERT", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "REVERT", "source": 0 }, { - "begin": 3910, - "end": 4340, + "begin": 1116, + "end": 1170, "name": "tag", "source": 0, - "value": "3" + "value": "96" }, - { "begin": 3910, "end": 4340, "name": "JUMPDEST", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "JUMPDEST", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "POP", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "POP", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "POP", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "POP", "source": 0 }, { - "begin": 3910, - "end": 4340, - "name": "PUSH [tag]", + "begin": 1116, + "end": 1170, + "name": "PUSH", "source": 0, - "value": "8" + "value": "40" + }, + { "begin": 1116, "end": 1170, "name": "MLOAD", "source": 0 }, + { + "begin": 1116, + "end": 1170, + "name": "RETURNDATASIZE", + "source": 0 }, { - "begin": 3910, - "end": 4340, + "begin": 1116, + "end": 1170, "name": "PUSH", "source": 0, - "value": "4" + "value": "1F" }, - { "begin": 3910, "end": 4340, "name": "DUP1", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "NOT", "source": 0 }, { - "begin": 3910, - "end": 4340, - "name": "CALLDATASIZE", - "source": 0 + "begin": 1116, + "end": 1170, + "name": "PUSH", + "source": 0, + "value": "1F" + }, + { "begin": 1116, "end": 1170, "name": "DUP3", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "ADD", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "AND", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP3", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "ADD", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP1", "source": 0 }, + { + "begin": 1116, + "end": 1170, + "name": "PUSH", + "source": 0, + "value": "40" }, - { "begin": 3910, "end": 4340, "name": "SUB", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "DUP2", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "ADD", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "SWAP1", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "MSTORE", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "POP", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "DUP2", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "ADD", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "SWAP1", "source": 0 }, { - "begin": 3910, - "end": 4340, + "begin": 1116, + "end": 1170, "name": "PUSH [tag]", "source": 0, - "value": "9" + "value": "97" }, - { "begin": 3910, "end": 4340, "name": "SWAP2", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "SWAP1", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "SWAP2", "source": 0 }, + { "begin": 1116, "end": 1170, "name": "SWAP1", "source": 0 }, { - "begin": 3910, - "end": 4340, + "begin": 1116, + "end": 1170, "name": "PUSH [tag]", "source": 0, - "value": "10" + "value": "98" }, { - "begin": 3910, - "end": 4340, + "begin": 1116, + "end": 1170, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 3910, - "end": 4340, + "begin": 1116, + "end": 1170, "name": "tag", "source": 0, - "value": "9" + "value": "97" + }, + { "begin": 1116, "end": 1170, "name": "JUMPDEST", "source": 0 }, + { "begin": 1109, "end": 1170, "name": "SWAP3", "source": 0 }, + { "begin": 1109, "end": 1170, "name": "POP", "source": 0 }, + { "begin": 1109, "end": 1170, "name": "SWAP3", "source": 0 }, + { "begin": 1109, "end": 1170, "name": "POP", "source": 0 }, + { "begin": 1109, "end": 1170, "name": "SWAP3", "source": 0 }, + { "begin": 1109, "end": 1170, "name": "POP", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP2", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP4", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP1", "source": 0 }, + { "begin": 890, "end": 1177, "name": "SWAP3", "source": 0 }, + { "begin": 890, "end": 1177, "name": "POP", "source": 0 }, + { + "begin": 890, + "end": 1177, + "name": "JUMP", + "source": 0, + "value": "[out]" }, - { "begin": 3910, "end": 4340, "name": "JUMPDEST", "source": 0 }, { - "begin": 3910, - "end": 4340, - "name": "PUSH [tag]", + "begin": 620, + "end": 884, + "name": "tag", "source": 0, - "value": "11" + "value": "52" }, + { "begin": 620, "end": 884, "name": "JUMPDEST", "source": 0 }, { - "begin": 3910, - "end": 4340, - "name": "JUMP", + "begin": 756, + "end": 762, + "name": "PUSH", "source": 0, - "value": "[in]" + "value": "0" }, + { "begin": 776, "end": 783, "name": "DUP1", "source": 0 }, { - "begin": 3910, - "end": 4340, - "name": "tag", + "begin": 797, + "end": 803, + "name": "PUSH", "source": 0, - "value": "8" + "value": "0" }, - { "begin": 3910, "end": 4340, "name": "JUMPDEST", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "STOP", "source": 0 }, + { "begin": 835, "end": 848, "name": "DUP1", "source": 0 }, { - "begin": 2788, - "end": 2882, - "name": "tag", + "begin": 835, + "end": 848, + "name": "PUSH", "source": 0, - "value": "4" + "value": "0" }, - { "begin": 2788, "end": 2882, "name": "JUMPDEST", "source": 0 }, + { "begin": 835, "end": 848, "name": "SWAP1", "source": 0 }, + { "begin": 835, "end": 848, "name": "SLOAD", "source": 0 }, + { "begin": 835, "end": 848, "name": "SWAP1", "source": 0 }, { - "begin": 2788, - "end": 2882, - "name": "PUSH [tag]", + "begin": 835, + "end": 848, + "name": "PUSH", "source": 0, - "value": "12" + "value": "100" }, + { "begin": 835, "end": 848, "name": "EXP", "source": 0 }, + { "begin": 835, "end": 848, "name": "SWAP1", "source": 0 }, + { "begin": 835, "end": 848, "name": "DIV", "source": 0 }, { - "begin": 2788, - "end": 2882, - "name": "PUSH [tag]", + "begin": 835, + "end": 848, + "name": "PUSH", "source": 0, - "value": "13" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, + { "begin": 835, "end": 848, "name": "AND", "source": 0 }, { - "begin": 2788, - "end": 2882, - "name": "JUMP", + "begin": 835, + "end": 862, + "name": "PUSH", "source": 0, - "value": "[in]" + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, + { "begin": 835, "end": 862, "name": "AND", "source": 0 }, { - "begin": 2788, - "end": 2882, - "name": "tag", + "begin": 835, + "end": 862, + "name": "PUSH", "source": 0, - "value": "12" + "value": "F87F493F" }, - { "begin": 2788, "end": 2882, "name": "JUMPDEST", "source": 0 }, + { "begin": 863, "end": 876, "name": "DUP6", "source": 0 }, { - "begin": 2788, - "end": 2882, + "begin": 835, + "end": 877, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 2788, "end": 2882, "name": "MLOAD", "source": 0 }, + { "begin": 835, "end": 877, "name": "MLOAD", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP3", "source": 0 }, { - "begin": 2788, - "end": 2882, + "begin": 835, + "end": 877, + "name": "PUSH", + "source": 0, + "value": "FFFFFFFF" + }, + { "begin": 835, "end": 877, "name": "AND", "source": 0 }, + { + "begin": 835, + "end": 877, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { "begin": 835, "end": 877, "name": "SHL", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP2", "source": 0 }, + { "begin": 835, "end": 877, "name": "MSTORE", "source": 0 }, + { + "begin": 835, + "end": 877, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { "begin": 835, "end": 877, "name": "ADD", "source": 0 }, + { + "begin": 835, + "end": 877, "name": "PUSH [tag]", "source": 0, - "value": "14" + "value": "100" }, - { "begin": 2788, "end": 2882, "name": "SWAP2", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SWAP1", "source": 0 }, + { "begin": 835, "end": 877, "name": "SWAP2", "source": 0 }, + { "begin": 835, "end": 877, "name": "SWAP1", "source": 0 }, { - "begin": 2788, - "end": 2882, + "begin": 835, + "end": 877, "name": "PUSH [tag]", "source": 0, - "value": "15" + "value": "82" }, { - "begin": 2788, - "end": 2882, + "begin": 835, + "end": 877, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 2788, - "end": 2882, + "begin": 835, + "end": 877, "name": "tag", "source": 0, - "value": "14" + "value": "100" }, - { "begin": 2788, "end": 2882, "name": "JUMPDEST", "source": 0 }, + { "begin": 835, "end": 877, "name": "JUMPDEST", "source": 0 }, { - "begin": 2788, - "end": 2882, + "begin": 835, + "end": 877, "name": "PUSH", "source": 0, - "value": "40" + "value": "60" }, - { "begin": 2788, "end": 2882, "name": "MLOAD", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "DUP1", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SWAP2", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SUB", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SWAP1", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "RETURN", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "tag", + "begin": 835, + "end": 877, + "name": "PUSH", "source": 0, - "value": "5" + "value": "40" }, - { "begin": 2893, "end": 3118, "name": "JUMPDEST", "source": 0 }, - { - "begin": 2893, - "end": 3118, + { "begin": 835, "end": 877, "name": "MLOAD", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP1", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP4", "source": 0 }, + { "begin": 835, "end": 877, "name": "SUB", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP2", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP7", "source": 0 }, + { "begin": 835, "end": 877, "name": "GAS", "source": 0 }, + { "begin": 835, "end": 877, "name": "STATICCALL", "source": 0 }, + { "begin": 835, "end": 877, "name": "ISZERO", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP1", "source": 0 }, + { "begin": 835, "end": 877, "name": "ISZERO", "source": 0 }, + { + "begin": 835, + "end": 877, "name": "PUSH [tag]", "source": 0, - "value": "16" + "value": "102" + }, + { "begin": 835, "end": 877, "name": "JUMPI", "source": 0 }, + { + "begin": 835, + "end": 877, + "name": "RETURNDATASIZE", + "source": 0 }, { - "begin": 2893, - "end": 3118, + "begin": 835, + "end": 877, "name": "PUSH", "source": 0, - "value": "4" + "value": "0" }, - { "begin": 2893, "end": 3118, "name": "DUP1", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP1", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "CALLDATASIZE", + "begin": 835, + "end": 877, + "name": "RETURNDATACOPY", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SUB", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "DUP2", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "ADD", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP1", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "PUSH [tag]", - "source": 0, - "value": "17" + "begin": 835, + "end": 877, + "name": "RETURNDATASIZE", + "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP2", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP1", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "PUSH [tag]", + "begin": 835, + "end": 877, + "name": "PUSH", "source": 0, - "value": "18" + "value": "0" }, + { "begin": 835, "end": 877, "name": "REVERT", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "JUMP", + "begin": 835, + "end": 877, + "name": "tag", "source": 0, - "value": "[in]" + "value": "102" }, + { "begin": 835, "end": 877, "name": "JUMPDEST", "source": 0 }, + { "begin": 835, "end": 877, "name": "POP", "source": 0 }, + { "begin": 835, "end": 877, "name": "POP", "source": 0 }, + { "begin": 835, "end": 877, "name": "POP", "source": 0 }, + { "begin": 835, "end": 877, "name": "POP", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "tag", + "begin": 835, + "end": 877, + "name": "PUSH", "source": 0, - "value": "17" + "value": "40" }, - { "begin": 2893, "end": 3118, "name": "JUMPDEST", "source": 0 }, + { "begin": 835, "end": 877, "name": "MLOAD", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "PUSH [tag]", - "source": 0, - "value": "19" + "begin": 835, + "end": 877, + "name": "RETURNDATASIZE", + "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "JUMP", + "begin": 835, + "end": 877, + "name": "PUSH", "source": 0, - "value": "[in]" + "value": "1F" }, + { "begin": 835, "end": 877, "name": "NOT", "source": 0 }, { - "begin": 2893, - "end": 3118, - "name": "tag", + "begin": 835, + "end": 877, + "name": "PUSH", "source": 0, - "value": "16" + "value": "1F" }, - { "begin": 2893, "end": 3118, "name": "JUMPDEST", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP3", "source": 0 }, + { "begin": 835, "end": 877, "name": "ADD", "source": 0 }, + { "begin": 835, "end": 877, "name": "AND", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP3", "source": 0 }, + { "begin": 835, "end": 877, "name": "ADD", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP1", "source": 0 }, { - "begin": 2893, - "end": 3118, + "begin": 835, + "end": 877, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 2893, "end": 3118, "name": "MLOAD", "source": 0 }, + { "begin": 835, "end": 877, "name": "MSTORE", "source": 0 }, + { "begin": 835, "end": 877, "name": "POP", "source": 0 }, + { "begin": 835, "end": 877, "name": "DUP2", "source": 0 }, + { "begin": 835, "end": 877, "name": "ADD", "source": 0 }, + { "begin": 835, "end": 877, "name": "SWAP1", "source": 0 }, { - "begin": 2893, - "end": 3118, + "begin": 835, + "end": 877, "name": "PUSH [tag]", "source": 0, - "value": "20" + "value": "103" }, - { "begin": 2893, "end": 3118, "name": "SWAP2", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP1", "source": 0 }, + { "begin": 835, "end": 877, "name": "SWAP2", "source": 0 }, + { "begin": 835, "end": 877, "name": "SWAP1", "source": 0 }, { - "begin": 2893, - "end": 3118, + "begin": 835, + "end": 877, "name": "PUSH [tag]", "source": 0, - "value": "21" + "value": "104" }, { - "begin": 2893, - "end": 3118, + "begin": 835, + "end": 877, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 2893, - "end": 3118, + "begin": 835, + "end": 877, "name": "tag", "source": 0, - "value": "20" + "value": "103" + }, + { "begin": 835, "end": 877, "name": "JUMPDEST", "source": 0 }, + { "begin": 828, "end": 877, "name": "SWAP3", "source": 0 }, + { "begin": 828, "end": 877, "name": "POP", "source": 0 }, + { "begin": 828, "end": 877, "name": "SWAP3", "source": 0 }, + { "begin": 828, "end": 877, "name": "POP", "source": 0 }, + { "begin": 828, "end": 877, "name": "SWAP3", "source": 0 }, + { "begin": 828, "end": 877, "name": "POP", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP2", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP4", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP1", "source": 0 }, + { "begin": 620, "end": 884, "name": "SWAP3", "source": 0 }, + { "begin": 620, "end": 884, "name": "POP", "source": 0 }, + { + "begin": 620, + "end": 884, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 82, + "name": "tag", + "source": 2, + "value": "105" }, - { "begin": 2893, "end": 3118, "name": "JUMPDEST", "source": 0 }, + { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 2 }, { - "begin": 2893, - "end": 3118, + "begin": 40, + "end": 46, "name": "PUSH", - "source": 0, + "source": 2, + "value": "0" + }, + { + "begin": 73, + "end": 75, + "name": "PUSH", + "source": 2, "value": "40" }, - { "begin": 2893, "end": 3118, "name": "MLOAD", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "DUP1", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP2", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SUB", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP1", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "RETURN", "source": 0 }, + { "begin": 67, "end": 76, "name": "MLOAD", "source": 2 }, + { "begin": 57, "end": 76, "name": "SWAP1", "source": 2 }, + { "begin": 57, "end": 76, "name": "POP", "source": 2 }, + { "begin": 7, "end": 82, "name": "SWAP1", "source": 2 }, { - "begin": 3425, - "end": 3892, - "name": "tag", - "source": 0, - "value": "6" + "begin": 7, + "end": 82, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 3425, "end": 3892, "name": "JUMPDEST", "source": 0 }, { - "begin": 3425, - "end": 3892, - "name": "PUSH [tag]", - "source": 0, - "value": "22" + "begin": 88, + "end": 205, + "name": "tag", + "source": 2, + "value": "106" }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 2 }, { - "begin": 3425, - "end": 3892, + "begin": 197, + "end": 198, "name": "PUSH", - "source": 0, - "value": "4" + "source": 2, + "value": "0" }, - { "begin": 3425, "end": 3892, "name": "DUP1", "source": 0 }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 2 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 2 }, { - "begin": 3425, - "end": 3892, - "name": "CALLDATASIZE", - "source": 0 + "begin": 211, + "end": 328, + "name": "tag", + "source": 2, + "value": "107" }, - { "begin": 3425, "end": 3892, "name": "SUB", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "DUP2", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "ADD", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "SWAP1", "source": 0 }, + { "begin": 211, "end": 328, "name": "JUMPDEST", "source": 2 }, { - "begin": 3425, - "end": 3892, - "name": "PUSH [tag]", - "source": 0, - "value": "23" + "begin": 320, + "end": 321, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 3425, "end": 3892, "name": "SWAP2", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "SWAP1", "source": 0 }, + { "begin": 317, "end": 318, "name": "DUP1", "source": 2 }, + { "begin": 310, "end": 322, "name": "REVERT", "source": 2 }, { - "begin": 3425, - "end": 3892, - "name": "PUSH [tag]", - "source": 0, - "value": "24" + "begin": 334, + "end": 451, + "name": "tag", + "source": 2, + "value": "108" }, + { "begin": 334, "end": 451, "name": "JUMPDEST", "source": 2 }, { - "begin": 3425, - "end": 3892, - "name": "JUMP", - "source": 0, - "value": "[in]" + "begin": 443, + "end": 444, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 440, "end": 441, "name": "DUP1", "source": 2 }, + { "begin": 433, "end": 445, "name": "REVERT", "source": 2 }, { - "begin": 3425, - "end": 3892, + "begin": 457, + "end": 559, "name": "tag", - "source": 0, - "value": "23" + "source": 2, + "value": "109" }, - { "begin": 3425, "end": 3892, "name": "JUMPDEST", "source": 0 }, + { "begin": 457, "end": 559, "name": "JUMPDEST", "source": 2 }, { - "begin": 3425, - "end": 3892, - "name": "PUSH [tag]", - "source": 0, - "value": "25" + "begin": 498, + "end": 504, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 549, + "end": 551, + "name": "PUSH", + "source": 2, + "value": "1F" }, + { "begin": 545, "end": 552, "name": "NOT", "source": 2 }, { - "begin": 3425, - "end": 3892, + "begin": 540, + "end": 542, + "name": "PUSH", + "source": 2, + "value": "1F" + }, + { "begin": 533, "end": 538, "name": "DUP4", "source": 2 }, + { "begin": 529, "end": 543, "name": "ADD", "source": 2 }, + { "begin": 525, "end": 553, "name": "AND", "source": 2 }, + { "begin": 515, "end": 553, "name": "SWAP1", "source": 2 }, + { "begin": 515, "end": 553, "name": "POP", "source": 2 }, + { "begin": 457, "end": 559, "name": "SWAP2", "source": 2 }, + { "begin": 457, "end": 559, "name": "SWAP1", "source": 2 }, + { "begin": 457, "end": 559, "name": "POP", "source": 2 }, + { + "begin": 457, + "end": 559, "name": "JUMP", - "source": 0, - "value": "[in]" + "source": 2, + "value": "[out]" }, { - "begin": 3425, - "end": 3892, + "begin": 565, + "end": 745, "name": "tag", - "source": 0, - "value": "22" + "source": 2, + "value": "110" }, - { "begin": 3425, "end": 3892, "name": "JUMPDEST", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "STOP", "source": 0 }, + { "begin": 565, "end": 745, "name": "JUMPDEST", "source": 2 }, { - "begin": 3128, - "end": 3415, - "name": "tag", - "source": 0, - "value": "7" + "begin": 613, + "end": 690, + "name": "PUSH", + "source": 2, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" }, - { "begin": 3128, "end": 3415, "name": "JUMPDEST", "source": 0 }, { - "begin": 3128, - "end": 3415, - "name": "PUSH [tag]", - "source": 0, - "value": "26" + "begin": 610, + "end": 611, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 603, "end": 691, "name": "MSTORE", "source": 2 }, { - "begin": 3128, - "end": 3415, + "begin": 710, + "end": 714, "name": "PUSH", - "source": 0, + "source": 2, + "value": "41" + }, + { + "begin": 707, + "end": 708, + "name": "PUSH", + "source": 2, "value": "4" }, - { "begin": 3128, "end": 3415, "name": "DUP1", "source": 0 }, + { "begin": 700, "end": 715, "name": "MSTORE", "source": 2 }, { - "begin": 3128, - "end": 3415, - "name": "CALLDATASIZE", - "source": 0 + "begin": 734, + "end": 738, + "name": "PUSH", + "source": 2, + "value": "24" + }, + { + "begin": 731, + "end": 732, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 724, "end": 739, "name": "REVERT", "source": 2 }, + { + "begin": 751, + "end": 1032, + "name": "tag", + "source": 2, + "value": "111" }, - { "begin": 3128, "end": 3415, "name": "SUB", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "DUP2", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "ADD", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP1", "source": 0 }, + { "begin": 751, "end": 1032, "name": "JUMPDEST", "source": 2 }, { - "begin": 3128, - "end": 3415, + "begin": 834, + "end": 861, "name": "PUSH [tag]", - "source": 0, - "value": "27" + "source": 2, + "value": "175" }, - { "begin": 3128, "end": 3415, "name": "SWAP2", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP1", "source": 0 }, + { "begin": 856, "end": 860, "name": "DUP3", "source": 2 }, { - "begin": 3128, - "end": 3415, + "begin": 834, + "end": 861, "name": "PUSH [tag]", - "source": 0, - "value": "28" + "source": 2, + "value": "109" }, { - "begin": 3128, - "end": 3415, + "begin": 834, + "end": 861, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3128, - "end": 3415, + "begin": 834, + "end": 861, "name": "tag", - "source": 0, - "value": "27" + "source": 2, + "value": "175" + }, + { "begin": 834, "end": 861, "name": "JUMPDEST", "source": 2 }, + { "begin": 826, "end": 832, "name": "DUP2", "source": 2 }, + { "begin": 822, "end": 862, "name": "ADD", "source": 2 }, + { "begin": 964, "end": 970, "name": "DUP2", "source": 2 }, + { "begin": 952, "end": 962, "name": "DUP2", "source": 2 }, + { "begin": 949, "end": 971, "name": "LT", "source": 2 }, + { + "begin": 928, + "end": 946, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 3128, "end": 3415, "name": "JUMPDEST", "source": 0 }, + { "begin": 916, "end": 926, "name": "DUP3", "source": 2 }, + { "begin": 913, "end": 947, "name": "GT", "source": 2 }, + { "begin": 910, "end": 972, "name": "OR", "source": 2 }, + { "begin": 907, "end": 995, "name": "ISZERO", "source": 2 }, { - "begin": 3128, - "end": 3415, + "begin": 907, + "end": 995, "name": "PUSH [tag]", - "source": 0, - "value": "29" + "source": 2, + "value": "176" + }, + { "begin": 907, "end": 995, "name": "JUMPI", "source": 2 }, + { + "begin": 975, + "end": 993, + "name": "PUSH [tag]", + "source": 2, + "value": "177" + }, + { + "begin": 975, + "end": 993, + "name": "PUSH [tag]", + "source": 2, + "value": "110" }, { - "begin": 3128, - "end": 3415, + "begin": 975, + "end": 993, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3128, - "end": 3415, + "begin": 975, + "end": 993, "name": "tag", - "source": 0, - "value": "26" + "source": 2, + "value": "177" + }, + { "begin": 975, "end": 993, "name": "JUMPDEST", "source": 2 }, + { + "begin": 907, + "end": 995, + "name": "tag", + "source": 2, + "value": "176" }, - { "begin": 3128, "end": 3415, "name": "JUMPDEST", "source": 0 }, + { "begin": 907, "end": 995, "name": "JUMPDEST", "source": 2 }, + { "begin": 1015, "end": 1025, "name": "DUP1", "source": 2 }, { - "begin": 3128, - "end": 3415, + "begin": 1011, + "end": 1013, "name": "PUSH", - "source": 0, + "source": 2, "value": "40" }, - { "begin": 3128, "end": 3415, "name": "MLOAD", "source": 0 }, + { "begin": 1004, "end": 1026, "name": "MSTORE", "source": 2 }, + { "begin": 794, "end": 1032, "name": "POP", "source": 2 }, + { "begin": 751, "end": 1032, "name": "POP", "source": 2 }, + { "begin": 751, "end": 1032, "name": "POP", "source": 2 }, + { + "begin": 751, + "end": 1032, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1038, + "end": 1167, + "name": "tag", + "source": 2, + "value": "112" + }, + { "begin": 1038, "end": 1167, "name": "JUMPDEST", "source": 2 }, { - "begin": 3128, - "end": 3415, + "begin": 1072, + "end": 1078, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1099, + "end": 1119, "name": "PUSH [tag]", - "source": 0, - "value": "30" + "source": 2, + "value": "179" }, - { "begin": 3128, "end": 3415, "name": "SWAP4", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP3", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP2", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP1", "source": 0 }, { - "begin": 3128, - "end": 3415, + "begin": 1099, + "end": 1119, "name": "PUSH [tag]", - "source": 0, - "value": "31" + "source": 2, + "value": "105" }, { - "begin": 3128, - "end": 3415, + "begin": 1099, + "end": 1119, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3128, - "end": 3415, + "begin": 1099, + "end": 1119, "name": "tag", - "source": 0, - "value": "30" + "source": 2, + "value": "179" }, - { "begin": 3128, "end": 3415, "name": "JUMPDEST", "source": 0 }, + { "begin": 1099, "end": 1119, "name": "JUMPDEST", "source": 2 }, + { "begin": 1089, "end": 1119, "name": "SWAP1", "source": 2 }, + { "begin": 1089, "end": 1119, "name": "POP", "source": 2 }, { - "begin": 3128, - "end": 3415, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 1128, + "end": 1161, + "name": "PUSH [tag]", + "source": 2, + "value": "180" }, - { "begin": 3128, "end": 3415, "name": "MLOAD", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "DUP1", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP2", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SUB", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP1", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "RETURN", "source": 0 }, + { "begin": 1156, "end": 1160, "name": "DUP3", "source": 2 }, + { "begin": 1148, "end": 1154, "name": "DUP3", "source": 2 }, { - "begin": 3910, - "end": 4340, - "name": "tag", - "source": 0, - "value": "11" + "begin": 1128, + "end": 1161, + "name": "PUSH [tag]", + "source": 2, + "value": "111" }, - { "begin": 3910, "end": 4340, "name": "JUMPDEST", "source": 0 }, { - "begin": 4142, - "end": 4155, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 1128, + "end": 1161, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 4142, "end": 4155, "name": "DUP1", "source": 0 }, - { "begin": 4142, "end": 4155, "name": "SLOAD", "source": 0 }, - { "begin": 4142, "end": 4155, "name": "SWAP1", "source": 0 }, { - "begin": 4142, - "end": 4155, - "name": "PUSH", - "source": 0, - "value": "100" + "begin": 1128, + "end": 1161, + "name": "tag", + "source": 2, + "value": "180" }, - { "begin": 4142, "end": 4155, "name": "EXP", "source": 0 }, - { "begin": 4142, "end": 4155, "name": "SWAP1", "source": 0 }, - { "begin": 4142, "end": 4155, "name": "DIV", "source": 0 }, + { "begin": 1128, "end": 1161, "name": "JUMPDEST", "source": 2 }, + { "begin": 1038, "end": 1167, "name": "SWAP2", "source": 2 }, + { "begin": 1038, "end": 1167, "name": "SWAP1", "source": 2 }, + { "begin": 1038, "end": 1167, "name": "POP", "source": 2 }, { - "begin": 4142, - "end": 4155, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 1038, + "end": 1167, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 4142, "end": 4155, "name": "AND", "source": 0 }, { - "begin": 4142, - "end": 4183, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 1173, + "end": 1290, + "name": "tag", + "source": 2, + "value": "113" }, - { "begin": 4142, "end": 4183, "name": "AND", "source": 0 }, + { "begin": 1173, "end": 1290, "name": "JUMPDEST", "source": 2 }, { - "begin": 4142, - "end": 4183, + "begin": 1282, + "end": 1283, "name": "PUSH", - "source": 0, - "value": "267D4062" + "source": 2, + "value": "0" }, - { "begin": 4201, "end": 4211, "name": "DUP7", "source": 0 }, - { "begin": 4229, "end": 4234, "name": "DUP7", "source": 0 }, - { "begin": 4252, "end": 4263, "name": "DUP7", "source": 0 }, - { "begin": 4281, "end": 4287, "name": "DUP7", "source": 0 }, - { "begin": 4305, "end": 4315, "name": "DUP7", "source": 0 }, + { "begin": 1279, "end": 1280, "name": "DUP1", "source": 2 }, + { "begin": 1272, "end": 1284, "name": "REVERT", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 1296, + "end": 1382, + "name": "tag", + "source": 2, + "value": "114" }, - { "begin": 4142, "end": 4329, "name": "MLOAD", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP7", "source": 0 }, + { "begin": 1296, "end": 1382, "name": "JUMPDEST", "source": 2 }, { - "begin": 4142, - "end": 4329, + "begin": 1331, + "end": 1338, "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" + "source": 2, + "value": "0" }, - { "begin": 4142, "end": 4329, "name": "AND", "source": 0 }, { - "begin": 4142, - "end": 4329, + "begin": 1371, + "end": 1375, "name": "PUSH", - "source": 0, - "value": "E0" + "source": 2, + "value": "FF" }, - { "begin": 4142, "end": 4329, "name": "SHL", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP2", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "MSTORE", "source": 0 }, + { "begin": 1364, "end": 1369, "name": "DUP3", "source": 2 }, + { "begin": 1360, "end": 1376, "name": "AND", "source": 2 }, + { "begin": 1349, "end": 1376, "name": "SWAP1", "source": 2 }, + { "begin": 1349, "end": 1376, "name": "POP", "source": 2 }, + { "begin": 1296, "end": 1382, "name": "SWAP2", "source": 2 }, + { "begin": 1296, "end": 1382, "name": "SWAP1", "source": 2 }, + { "begin": 1296, "end": 1382, "name": "POP", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "PUSH", - "source": 0, - "value": "4" + "begin": 1296, + "end": 1382, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 4142, "end": 4329, "name": "ADD", "source": 0 }, { - "begin": 4142, - "end": 4329, + "begin": 1388, + "end": 1506, + "name": "tag", + "source": 2, + "value": "115" + }, + { "begin": 1388, "end": 1506, "name": "JUMPDEST", "source": 2 }, + { + "begin": 1459, + "end": 1481, "name": "PUSH [tag]", - "source": 0, - "value": "33" + "source": 2, + "value": "184" }, - { "begin": 4142, "end": 4329, "name": "SWAP6", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "SWAP5", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "SWAP4", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "SWAP3", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "SWAP2", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "SWAP1", "source": 0 }, + { "begin": 1475, "end": 1480, "name": "DUP2", "source": 2 }, { - "begin": 4142, - "end": 4329, + "begin": 1459, + "end": 1481, "name": "PUSH [tag]", - "source": 0, - "value": "34" + "source": 2, + "value": "114" }, { - "begin": 4142, - "end": 4329, + "begin": 1459, + "end": 1481, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 4142, - "end": 4329, + "begin": 1459, + "end": 1481, "name": "tag", - "source": 0, - "value": "33" + "source": 2, + "value": "184" + }, + { "begin": 1459, "end": 1481, "name": "JUMPDEST", "source": 2 }, + { "begin": 1452, "end": 1457, "name": "DUP2", "source": 2 }, + { "begin": 1449, "end": 1482, "name": "EQ", "source": 2 }, + { + "begin": 1439, + "end": 1500, + "name": "PUSH [tag]", + "source": 2, + "value": "185" }, - { "begin": 4142, "end": 4329, "name": "JUMPDEST", "source": 0 }, + { "begin": 1439, "end": 1500, "name": "JUMPI", "source": 2 }, { - "begin": 4142, - "end": 4329, + "begin": 1496, + "end": 1497, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, + { "begin": 1493, "end": 1494, "name": "DUP1", "source": 2 }, + { "begin": 1486, "end": 1498, "name": "REVERT", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 1439, + "end": 1500, + "name": "tag", + "source": 2, + "value": "185" + }, + { "begin": 1439, "end": 1500, "name": "JUMPDEST", "source": 2 }, + { "begin": 1388, "end": 1506, "name": "POP", "source": 2 }, + { + "begin": 1388, + "end": 1506, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1512, + "end": 1647, + "name": "tag", + "source": 2, + "value": "116" }, - { "begin": 4142, "end": 4329, "name": "MLOAD", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP1", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP4", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "SUB", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP2", "source": 0 }, + { "begin": 1512, "end": 1647, "name": "JUMPDEST", "source": 2 }, { - "begin": 4142, - "end": 4329, + "begin": 1556, + "end": 1561, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, - { "begin": 4142, "end": 4329, "name": "DUP8", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP1", "source": 0 }, + { "begin": 1594, "end": 1600, "name": "DUP2", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "EXTCODESIZE", - "source": 0 + "begin": 1581, + "end": 1601, + "name": "CALLDATALOAD", + "source": 2 }, - { "begin": 4142, "end": 4329, "name": "ISZERO", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP1", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "ISZERO", "source": 0 }, + { "begin": 1572, "end": 1601, "name": "SWAP1", "source": 2 }, + { "begin": 1572, "end": 1601, "name": "POP", "source": 2 }, { - "begin": 4142, - "end": 4329, + "begin": 1610, + "end": 1641, "name": "PUSH [tag]", - "source": 0, - "value": "35" + "source": 2, + "value": "187" }, - { "begin": 4142, "end": 4329, "name": "JUMPI", "source": 0 }, + { "begin": 1635, "end": 1640, "name": "DUP2", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 1610, + "end": 1641, + "name": "PUSH [tag]", + "source": 2, + "value": "115" + }, + { + "begin": 1610, + "end": 1641, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 4142, "end": 4329, "name": "DUP1", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "REVERT", "source": 0 }, { - "begin": 4142, - "end": 4329, + "begin": 1610, + "end": 1641, "name": "tag", - "source": 0, - "value": "35" + "source": 2, + "value": "187" }, - { "begin": 4142, "end": 4329, "name": "JUMPDEST", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "POP", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "GAS", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "CALL", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "ISZERO", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "DUP1", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "ISZERO", "source": 0 }, + { "begin": 1610, "end": 1641, "name": "JUMPDEST", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "SWAP3", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "SWAP2", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "POP", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "POP", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "PUSH [tag]", - "source": 0, - "value": "37" + "begin": 1512, + "end": 1647, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 4142, "end": 4329, "name": "JUMPI", "source": 0 }, { - "begin": 4142, - "end": 4329, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 1653, + "end": 1770, + "name": "tag", + "source": 2, + "value": "117" }, + { "begin": 1653, "end": 1770, "name": "JUMPDEST", "source": 2 }, { - "begin": 4142, - "end": 4329, + "begin": 1762, + "end": 1763, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, - { "begin": 4142, "end": 4329, "name": "DUP1", "source": 0 }, + { "begin": 1759, "end": 1760, "name": "DUP1", "source": 2 }, + { "begin": 1752, "end": 1764, "name": "REVERT", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "RETURNDATACOPY", - "source": 0 + "begin": 1776, + "end": 2096, + "name": "tag", + "source": 2, + "value": "118" }, + { "begin": 1776, "end": 2096, "name": "JUMPDEST", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 1862, + "end": 1866, + "name": "PUSH", + "source": 2, + "value": "0" }, { - "begin": 4142, - "end": 4329, + "begin": 1952, + "end": 1970, "name": "PUSH", - "source": 0, - "value": "0" + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 4142, "end": 4329, "name": "REVERT", "source": 0 }, + { "begin": 1944, "end": 1950, "name": "DUP3", "source": 2 }, + { "begin": 1941, "end": 1971, "name": "GT", "source": 2 }, + { "begin": 1938, "end": 1994, "name": "ISZERO", "source": 2 }, { - "begin": 4142, - "end": 4329, - "name": "tag", - "source": 0, - "value": "37" + "begin": 1938, + "end": 1994, + "name": "PUSH [tag]", + "source": 2, + "value": "190" + }, + { "begin": 1938, "end": 1994, "name": "JUMPI", "source": 2 }, + { + "begin": 1974, + "end": 1992, + "name": "PUSH [tag]", + "source": 2, + "value": "191" + }, + { + "begin": 1974, + "end": 1992, + "name": "PUSH [tag]", + "source": 2, + "value": "110" }, - { "begin": 4142, "end": 4329, "name": "JUMPDEST", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "POP", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "POP", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "POP", "source": 0 }, - { "begin": 4142, "end": 4329, "name": "POP", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "POP", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "POP", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "POP", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "POP", "source": 0 }, - { "begin": 3910, "end": 4340, "name": "POP", "source": 0 }, { - "begin": 3910, - "end": 4340, + "begin": 1974, + "end": 1992, "name": "JUMP", - "source": 0, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 2788, - "end": 2882, + "begin": 1974, + "end": 1992, "name": "tag", - "source": 0, - "value": "13" + "source": 2, + "value": "191" }, - { "begin": 2788, "end": 2882, "name": "JUMPDEST", "source": 0 }, + { "begin": 1974, "end": 1992, "name": "JUMPDEST", "source": 2 }, { - "begin": 2788, - "end": 2882, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 1938, + "end": 1994, + "name": "tag", + "source": 2, + "value": "190" }, - { "begin": 2788, "end": 2882, "name": "DUP1", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SLOAD", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SWAP1", "source": 0 }, + { "begin": 1938, "end": 1994, "name": "JUMPDEST", "source": 2 }, { - "begin": 2788, - "end": 2882, + "begin": 2024, + "end": 2028, "name": "PUSH", - "source": 0, - "value": "100" + "source": 2, + "value": "20" }, - { "begin": 2788, "end": 2882, "name": "EXP", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "SWAP1", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "DIV", "source": 0 }, + { "begin": 2016, "end": 2022, "name": "DUP3", "source": 2 }, + { "begin": 2012, "end": 2029, "name": "MUL", "source": 2 }, + { "begin": 2004, "end": 2029, "name": "SWAP1", "source": 2 }, + { "begin": 2004, "end": 2029, "name": "POP", "source": 2 }, { - "begin": 2788, - "end": 2882, + "begin": 2084, + "end": 2088, "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "source": 2, + "value": "20" }, - { "begin": 2788, "end": 2882, "name": "AND", "source": 0 }, - { "begin": 2788, "end": 2882, "name": "DUP2", "source": 0 }, + { "begin": 2078, "end": 2082, "name": "DUP2", "source": 2 }, + { "begin": 2074, "end": 2089, "name": "ADD", "source": 2 }, + { "begin": 2066, "end": 2089, "name": "SWAP1", "source": 2 }, + { "begin": 2066, "end": 2089, "name": "POP", "source": 2 }, + { "begin": 1776, "end": 2096, "name": "SWAP2", "source": 2 }, + { "begin": 1776, "end": 2096, "name": "SWAP1", "source": 2 }, + { "begin": 1776, "end": 2096, "name": "POP", "source": 2 }, { - "begin": 2788, - "end": 2882, + "begin": 1776, + "end": 2096, "name": "JUMP", - "source": 0, + "source": 2, "value": "[out]" }, { - "begin": 2893, - "end": 3118, + "begin": 2102, + "end": 2219, "name": "tag", - "source": 0, - "value": "19" + "source": 2, + "value": "119" }, - { "begin": 2893, "end": 3118, "name": "JUMPDEST", "source": 0 }, + { "begin": 2102, "end": 2219, "name": "JUMPDEST", "source": 2 }, { - "begin": 2964, - "end": 2971, + "begin": 2211, + "end": 2212, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, - { "begin": 3070, "end": 3083, "name": "DUP1", "source": 0 }, + { "begin": 2208, "end": 2209, "name": "DUP1", "source": 2 }, + { "begin": 2201, "end": 2213, "name": "REVERT", "source": 2 }, + { + "begin": 2225, + "end": 2342, + "name": "tag", + "source": 2, + "value": "120" + }, + { "begin": 2225, "end": 2342, "name": "JUMPDEST", "source": 2 }, { - "begin": 3070, - "end": 3083, + "begin": 2334, + "end": 2335, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, - { "begin": 3070, "end": 3083, "name": "SWAP1", "source": 0 }, - { "begin": 3070, "end": 3083, "name": "SLOAD", "source": 0 }, - { "begin": 3070, "end": 3083, "name": "SWAP1", "source": 0 }, + { "begin": 2331, "end": 2332, "name": "DUP1", "source": 2 }, + { "begin": 2324, "end": 2336, "name": "REVERT", "source": 2 }, { - "begin": 3070, - "end": 3083, - "name": "PUSH", - "source": 0, - "value": "100" + "begin": 2348, + "end": 2655, + "name": "tag", + "source": 2, + "value": "121" }, - { "begin": 3070, "end": 3083, "name": "EXP", "source": 0 }, - { "begin": 3070, "end": 3083, "name": "SWAP1", "source": 0 }, - { "begin": 3070, "end": 3083, "name": "DIV", "source": 0 }, + { "begin": 2348, "end": 2655, "name": "JUMPDEST", "source": 2 }, { - "begin": 3070, - "end": 3083, + "begin": 2409, + "end": 2413, "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "source": 2, + "value": "0" }, - { "begin": 3070, "end": 3083, "name": "AND", "source": 0 }, { - "begin": 3070, - "end": 3100, + "begin": 2499, + "end": 2517, "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 3070, "end": 3100, "name": "AND", "source": 0 }, + { "begin": 2491, "end": 2497, "name": "DUP3", "source": 2 }, + { "begin": 2488, "end": 2518, "name": "GT", "source": 2 }, + { "begin": 2485, "end": 2541, "name": "ISZERO", "source": 2 }, { - "begin": 3070, - "end": 3100, - "name": "PUSH", - "source": 0, - "value": "71B0EDFA" + "begin": 2485, + "end": 2541, + "name": "PUSH [tag]", + "source": 2, + "value": "195" }, - { "begin": 3101, "end": 3106, "name": "DUP4", "source": 0 }, + { "begin": 2485, "end": 2541, "name": "JUMPI", "source": 2 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 2521, + "end": 2539, + "name": "PUSH [tag]", + "source": 2, + "value": "196" }, - { "begin": 3070, "end": 3107, "name": "MLOAD", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP3", "source": 0 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" + "begin": 2521, + "end": 2539, + "name": "PUSH [tag]", + "source": 2, + "value": "110" }, - { "begin": 3070, "end": 3107, "name": "AND", "source": 0 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "E0" + "begin": 2521, + "end": 2539, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 3070, "end": 3107, "name": "SHL", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP2", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "MSTORE", "source": 0 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "4" + "begin": 2521, + "end": 2539, + "name": "tag", + "source": 2, + "value": "196" + }, + { "begin": 2521, "end": 2539, "name": "JUMPDEST", "source": 2 }, + { + "begin": 2485, + "end": 2541, + "name": "tag", + "source": 2, + "value": "195" }, - { "begin": 3070, "end": 3107, "name": "ADD", "source": 0 }, + { "begin": 2485, "end": 2541, "name": "JUMPDEST", "source": 2 }, { - "begin": 3070, - "end": 3107, + "begin": 2559, + "end": 2588, "name": "PUSH [tag]", - "source": 0, - "value": "39" + "source": 2, + "value": "197" }, - { "begin": 3070, "end": 3107, "name": "SWAP2", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "SWAP1", "source": 0 }, + { "begin": 2581, "end": 2587, "name": "DUP3", "source": 2 }, { - "begin": 3070, - "end": 3107, + "begin": 2559, + "end": 2588, "name": "PUSH [tag]", - "source": 0, - "value": "40" + "source": 2, + "value": "109" }, { - "begin": 3070, - "end": 3107, + "begin": 2559, + "end": 2588, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3070, - "end": 3107, + "begin": 2559, + "end": 2588, "name": "tag", - "source": 0, - "value": "39" + "source": 2, + "value": "197" }, - { "begin": 3070, "end": 3107, "name": "JUMPDEST", "source": 0 }, + { "begin": 2559, "end": 2588, "name": "JUMPDEST", "source": 2 }, + { "begin": 2551, "end": 2588, "name": "SWAP1", "source": 2 }, + { "begin": 2551, "end": 2588, "name": "POP", "source": 2 }, { - "begin": 3070, - "end": 3107, + "begin": 2643, + "end": 2647, "name": "PUSH", - "source": 0, + "source": 2, "value": "20" }, + { "begin": 2637, "end": 2641, "name": "DUP2", "source": 2 }, + { "begin": 2633, "end": 2648, "name": "ADD", "source": 2 }, + { "begin": 2625, "end": 2648, "name": "SWAP1", "source": 2 }, + { "begin": 2625, "end": 2648, "name": "POP", "source": 2 }, + { "begin": 2348, "end": 2655, "name": "SWAP2", "source": 2 }, + { "begin": 2348, "end": 2655, "name": "SWAP1", "source": 2 }, + { "begin": 2348, "end": 2655, "name": "POP", "source": 2 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 2348, + "end": 2655, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 3070, "end": 3107, "name": "MLOAD", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP1", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP4", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "SUB", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP2", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP7", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "GAS", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "STATICCALL", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "ISZERO", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP1", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "ISZERO", "source": 0 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH [tag]", - "source": 0, - "value": "42" + "begin": 2661, + "end": 2815, + "name": "tag", + "source": 2, + "value": "122" }, - { "begin": 3070, "end": 3107, "name": "JUMPI", "source": 0 }, + { "begin": 2661, "end": 2815, "name": "JUMPDEST", "source": 2 }, + { "begin": 2745, "end": 2751, "name": "DUP3", "source": 2 }, + { "begin": 2740, "end": 2743, "name": "DUP2", "source": 2 }, + { "begin": 2735, "end": 2738, "name": "DUP4", "source": 2 }, { - "begin": 3070, - "end": 3107, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 2722, + "end": 2752, + "name": "CALLDATACOPY", + "source": 2 }, { - "begin": 3070, - "end": 3107, + "begin": 2807, + "end": 2808, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, - { "begin": 3070, "end": 3107, "name": "DUP1", "source": 0 }, + { "begin": 2798, "end": 2804, "name": "DUP4", "source": 2 }, + { "begin": 2793, "end": 2796, "name": "DUP4", "source": 2 }, + { "begin": 2789, "end": 2805, "name": "ADD", "source": 2 }, + { "begin": 2782, "end": 2809, "name": "MSTORE", "source": 2 }, + { "begin": 2661, "end": 2815, "name": "POP", "source": 2 }, + { "begin": 2661, "end": 2815, "name": "POP", "source": 2 }, + { "begin": 2661, "end": 2815, "name": "POP", "source": 2 }, { - "begin": 3070, - "end": 3107, - "name": "RETURNDATACOPY", - "source": 0 + "begin": 2661, + "end": 2815, + "name": "JUMP", + "source": 2, + "value": "[out]" }, { - "begin": 3070, - "end": 3107, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 2821, + "end": 3231, + "name": "tag", + "source": 2, + "value": "123" }, + { "begin": 2821, "end": 3231, "name": "JUMPDEST", "source": 2 }, { - "begin": 3070, - "end": 3107, + "begin": 2898, + "end": 2903, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, - { "begin": 3070, "end": 3107, "name": "REVERT", "source": 0 }, { - "begin": 3070, - "end": 3107, + "begin": 2923, + "end": 2988, + "name": "PUSH [tag]", + "source": 2, + "value": "200" + }, + { + "begin": 2939, + "end": 2987, + "name": "PUSH [tag]", + "source": 2, + "value": "201" + }, + { "begin": 2980, "end": 2986, "name": "DUP5", "source": 2 }, + { + "begin": 2939, + "end": 2987, + "name": "PUSH [tag]", + "source": 2, + "value": "121" + }, + { + "begin": 2939, + "end": 2987, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 2939, + "end": 2987, "name": "tag", - "source": 0, - "value": "42" + "source": 2, + "value": "201" }, - { "begin": 3070, "end": 3107, "name": "JUMPDEST", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "POP", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "POP", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "POP", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "POP", "source": 0 }, + { "begin": 2939, "end": 2987, "name": "JUMPDEST", "source": 2 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 2923, + "end": 2988, + "name": "PUSH [tag]", + "source": 2, + "value": "112" }, - { "begin": 3070, "end": 3107, "name": "MLOAD", "source": 0 }, { - "begin": 3070, - "end": 3107, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 2923, + "end": 2988, + "name": "JUMP", + "source": 2, + "value": "[in]" }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "1F" + "begin": 2923, + "end": 2988, + "name": "tag", + "source": 2, + "value": "200" }, - { "begin": 3070, "end": 3107, "name": "NOT", "source": 0 }, + { "begin": 2923, "end": 2988, "name": "JUMPDEST", "source": 2 }, + { "begin": 2914, "end": 2988, "name": "SWAP1", "source": 2 }, + { "begin": 2914, "end": 2988, "name": "POP", "source": 2 }, + { "begin": 3011, "end": 3017, "name": "DUP3", "source": 2 }, + { "begin": 3004, "end": 3009, "name": "DUP2", "source": 2 }, + { "begin": 2997, "end": 3018, "name": "MSTORE", "source": 2 }, { - "begin": 3070, - "end": 3107, + "begin": 3049, + "end": 3053, "name": "PUSH", - "source": 0, - "value": "1F" + "source": 2, + "value": "20" }, - { "begin": 3070, "end": 3107, "name": "DUP3", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "ADD", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "AND", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP3", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "ADD", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP1", "source": 0 }, + { "begin": 3042, "end": 3047, "name": "DUP2", "source": 2 }, + { "begin": 3038, "end": 3054, "name": "ADD", "source": 2 }, + { "begin": 3087, "end": 3090, "name": "DUP5", "source": 2 }, + { "begin": 3078, "end": 3084, "name": "DUP5", "source": 2 }, + { "begin": 3073, "end": 3076, "name": "DUP5", "source": 2 }, + { "begin": 3069, "end": 3085, "name": "ADD", "source": 2 }, + { "begin": 3066, "end": 3091, "name": "GT", "source": 2 }, + { "begin": 3063, "end": 3175, "name": "ISZERO", "source": 2 }, { - "begin": 3070, - "end": 3107, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 3063, + "end": 3175, + "name": "PUSH [tag]", + "source": 2, + "value": "202" }, - { "begin": 3070, "end": 3107, "name": "MSTORE", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "POP", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "DUP2", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "ADD", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "SWAP1", "source": 0 }, + { "begin": 3063, "end": 3175, "name": "JUMPI", "source": 2 }, { - "begin": 3070, - "end": 3107, + "begin": 3094, + "end": 3173, "name": "PUSH [tag]", - "source": 0, - "value": "43" + "source": 2, + "value": "203" }, - { "begin": 3070, "end": 3107, "name": "SWAP2", "source": 0 }, - { "begin": 3070, "end": 3107, "name": "SWAP1", "source": 0 }, { - "begin": 3070, - "end": 3107, + "begin": 3094, + "end": 3173, "name": "PUSH [tag]", - "source": 0, - "value": "44" + "source": 2, + "value": "120" }, { - "begin": 3070, - "end": 3107, + "begin": 3094, + "end": 3173, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3070, - "end": 3107, + "begin": 3094, + "end": 3173, "name": "tag", - "source": 0, - "value": "43" - }, - { "begin": 3070, "end": 3107, "name": "JUMPDEST", "source": 0 }, - { "begin": 3063, "end": 3107, "name": "SWAP1", "source": 0 }, - { "begin": 3063, "end": 3107, "name": "POP", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP2", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "SWAP1", "source": 0 }, - { "begin": 2893, "end": 3118, "name": "POP", "source": 0 }, - { - "begin": 2893, - "end": 3118, - "name": "JUMP", - "source": 0, - "value": "[out]" + "source": 2, + "value": "203" }, + { "begin": 3094, "end": 3173, "name": "JUMPDEST", "source": 2 }, { - "begin": 3425, - "end": 3892, + "begin": 3063, + "end": 3175, "name": "tag", - "source": 0, - "value": "25" + "source": 2, + "value": "202" }, - { "begin": 3425, "end": 3892, "name": "JUMPDEST", "source": 0 }, + { "begin": 3063, "end": 3175, "name": "JUMPDEST", "source": 2 }, { - "begin": 3682, - "end": 3695, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 3184, + "end": 3225, + "name": "PUSH [tag]", + "source": 2, + "value": "204" }, - { "begin": 3682, "end": 3695, "name": "DUP1", "source": 0 }, - { "begin": 3682, "end": 3695, "name": "SLOAD", "source": 0 }, - { "begin": 3682, "end": 3695, "name": "SWAP1", "source": 0 }, + { "begin": 3218, "end": 3224, "name": "DUP5", "source": 2 }, + { "begin": 3213, "end": 3216, "name": "DUP3", "source": 2 }, + { "begin": 3208, "end": 3211, "name": "DUP6", "source": 2 }, { - "begin": 3682, - "end": 3695, - "name": "PUSH", - "source": 0, - "value": "100" + "begin": 3184, + "end": 3225, + "name": "PUSH [tag]", + "source": 2, + "value": "122" }, - { "begin": 3682, "end": 3695, "name": "EXP", "source": 0 }, - { "begin": 3682, "end": 3695, "name": "SWAP1", "source": 0 }, - { "begin": 3682, "end": 3695, "name": "DIV", "source": 0 }, { - "begin": 3682, - "end": 3695, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 3184, + "end": 3225, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 3682, "end": 3695, "name": "AND", "source": 0 }, { - "begin": 3682, - "end": 3737, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 3184, + "end": 3225, + "name": "tag", + "source": 2, + "value": "204" }, - { "begin": 3682, "end": 3737, "name": "AND", "source": 0 }, + { "begin": 3184, "end": 3225, "name": "JUMPDEST", "source": 2 }, + { "begin": 2904, "end": 3231, "name": "POP", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "SWAP4", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "SWAP3", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "POP", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "POP", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "POP", "source": 2 }, { - "begin": 3682, - "end": 3737, - "name": "PUSH", - "source": 0, - "value": "9F89F03E" + "begin": 2821, + "end": 3231, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 3755, "end": 3765, "name": "DUP7", "source": 0 }, - { "begin": 3783, "end": 3788, "name": "DUP7", "source": 0 }, - { "begin": 3806, "end": 3815, "name": "DUP7", "source": 0 }, - { "begin": 3833, "end": 3839, "name": "DUP7", "source": 0 }, - { "begin": 3857, "end": 3867, "name": "DUP7", "source": 0 }, { - "begin": 3682, - "end": 3881, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 3250, + "end": 3588, + "name": "tag", + "source": 2, + "value": "124" }, - { "begin": 3682, "end": 3881, "name": "MLOAD", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP7", "source": 0 }, + { "begin": 3250, "end": 3588, "name": "JUMPDEST", "source": 2 }, { - "begin": 3682, - "end": 3881, + "begin": 3305, + "end": 3310, "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" + "source": 2, + "value": "0" }, - { "begin": 3682, "end": 3881, "name": "AND", "source": 0 }, + { "begin": 3354, "end": 3357, "name": "DUP3", "source": 2 }, { - "begin": 3682, - "end": 3881, + "begin": 3347, + "end": 3351, "name": "PUSH", - "source": 0, - "value": "E0" + "source": 2, + "value": "1F" }, - { "begin": 3682, "end": 3881, "name": "SHL", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP2", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "MSTORE", "source": 0 }, + { "begin": 3339, "end": 3345, "name": "DUP4", "source": 2 }, + { "begin": 3335, "end": 3352, "name": "ADD", "source": 2 }, + { "begin": 3331, "end": 3358, "name": "SLT", "source": 2 }, { - "begin": 3682, - "end": 3881, - "name": "PUSH", - "source": 0, - "value": "4" + "begin": 3321, + "end": 3443, + "name": "PUSH [tag]", + "source": 2, + "value": "206" }, - { "begin": 3682, "end": 3881, "name": "ADD", "source": 0 }, + { "begin": 3321, "end": 3443, "name": "JUMPI", "source": 2 }, { - "begin": 3682, - "end": 3881, + "begin": 3362, + "end": 3441, "name": "PUSH [tag]", - "source": 0, - "value": "46" + "source": 2, + "value": "207" }, - { "begin": 3682, "end": 3881, "name": "SWAP6", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "SWAP5", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "SWAP4", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "SWAP3", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "SWAP2", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "SWAP1", "source": 0 }, { - "begin": 3682, - "end": 3881, + "begin": 3362, + "end": 3441, "name": "PUSH [tag]", - "source": 0, - "value": "47" + "source": 2, + "value": "117" }, { - "begin": 3682, - "end": 3881, + "begin": 3362, + "end": 3441, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3682, - "end": 3881, + "begin": 3362, + "end": 3441, "name": "tag", - "source": 0, - "value": "46" + "source": 2, + "value": "207" }, - { "begin": 3682, "end": 3881, "name": "JUMPDEST", "source": 0 }, + { "begin": 3362, "end": 3441, "name": "JUMPDEST", "source": 2 }, { - "begin": 3682, - "end": 3881, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 3321, + "end": 3443, + "name": "tag", + "source": 2, + "value": "206" }, + { "begin": 3321, "end": 3443, "name": "JUMPDEST", "source": 2 }, + { "begin": 3479, "end": 3485, "name": "DUP2", "source": 2 }, { - "begin": 3682, - "end": 3881, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 3466, + "end": 3486, + "name": "CALLDATALOAD", + "source": 2 }, - { "begin": 3682, "end": 3881, "name": "MLOAD", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP1", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP4", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "SUB", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP2", "source": 0 }, { - "begin": 3682, - "end": 3881, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 3504, + "end": 3582, + "name": "PUSH [tag]", + "source": 2, + "value": "208" }, - { "begin": 3682, "end": 3881, "name": "DUP8", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP1", "source": 0 }, + { "begin": 3578, "end": 3581, "name": "DUP5", "source": 2 }, + { "begin": 3570, "end": 3576, "name": "DUP3", "source": 2 }, { - "begin": 3682, - "end": 3881, - "name": "EXTCODESIZE", - "source": 0 + "begin": 3563, + "end": 3567, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 3682, "end": 3881, "name": "ISZERO", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP1", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "ISZERO", "source": 0 }, + { "begin": 3555, "end": 3561, "name": "DUP7", "source": 2 }, + { "begin": 3551, "end": 3568, "name": "ADD", "source": 2 }, { - "begin": 3682, - "end": 3881, + "begin": 3504, + "end": 3582, "name": "PUSH [tag]", - "source": 0, - "value": "48" + "source": 2, + "value": "123" }, - { "begin": 3682, "end": 3881, "name": "JUMPI", "source": 0 }, { - "begin": 3682, - "end": 3881, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 3504, + "end": 3582, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 3682, "end": 3881, "name": "DUP1", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "REVERT", "source": 0 }, { - "begin": 3682, - "end": 3881, + "begin": 3504, + "end": 3582, "name": "tag", - "source": 0, - "value": "48" - }, - { "begin": 3682, "end": 3881, "name": "JUMPDEST", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "POP", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "GAS", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "CALL", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "ISZERO", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "DUP1", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "ISZERO", "source": 0 }, - { - "begin": 3682, - "end": 3881, - "name": "PUSH [tag]", - "source": 0, - "value": "50" + "source": 2, + "value": "208" + }, + { "begin": 3504, "end": 3582, "name": "JUMPDEST", "source": 2 }, + { "begin": 3495, "end": 3582, "name": "SWAP2", "source": 2 }, + { "begin": 3495, "end": 3582, "name": "POP", "source": 2 }, + { "begin": 3311, "end": 3588, "name": "POP", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "SWAP3", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "SWAP2", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "POP", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "POP", "source": 2 }, + { + "begin": 3250, + "end": 3588, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 3682, "end": 3881, "name": "JUMPI", "source": 0 }, { - "begin": 3682, - "end": 3881, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 3609, + "end": 4551, + "name": "tag", + "source": 2, + "value": "125" }, + { "begin": 3609, "end": 4551, "name": "JUMPDEST", "source": 2 }, { - "begin": 3682, - "end": 3881, + "begin": 3714, + "end": 3719, "name": "PUSH", - "source": 0, + "source": 2, "value": "0" }, - { "begin": 3682, "end": 3881, "name": "DUP1", "source": 0 }, { - "begin": 3682, - "end": 3881, - "name": "RETURNDATACOPY", - "source": 0 + "begin": 3739, + "end": 3829, + "name": "PUSH [tag]", + "source": 2, + "value": "210" }, { - "begin": 3682, - "end": 3881, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 3755, + "end": 3828, + "name": "PUSH [tag]", + "source": 2, + "value": "211" }, + { "begin": 3821, "end": 3827, "name": "DUP5", "source": 2 }, { - "begin": 3682, - "end": 3881, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 3755, + "end": 3828, + "name": "PUSH [tag]", + "source": 2, + "value": "118" + }, + { + "begin": 3755, + "end": 3828, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 3682, "end": 3881, "name": "REVERT", "source": 0 }, { - "begin": 3682, - "end": 3881, + "begin": 3755, + "end": 3828, "name": "tag", - "source": 0, - "value": "50" + "source": 2, + "value": "211" + }, + { "begin": 3755, "end": 3828, "name": "JUMPDEST", "source": 2 }, + { + "begin": 3739, + "end": 3829, + "name": "PUSH [tag]", + "source": 2, + "value": "112" }, - { "begin": 3682, "end": 3881, "name": "JUMPDEST", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "POP", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "POP", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "POP", "source": 0 }, - { "begin": 3682, "end": 3881, "name": "POP", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "POP", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "POP", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "POP", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "POP", "source": 0 }, - { "begin": 3425, "end": 3892, "name": "POP", "source": 0 }, { - "begin": 3425, - "end": 3892, + "begin": 3739, + "end": 3829, "name": "JUMP", - "source": 0, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 3128, - "end": 3415, + "begin": 3739, + "end": 3829, "name": "tag", - "source": 0, - "value": "29" + "source": 2, + "value": "210" }, - { "begin": 3128, "end": 3415, "name": "JUMPDEST", "source": 0 }, + { "begin": 3739, "end": 3829, "name": "JUMPDEST", "source": 2 }, + { "begin": 3730, "end": 3829, "name": "SWAP1", "source": 2 }, + { "begin": 3730, "end": 3829, "name": "POP", "source": 2 }, + { "begin": 3849, "end": 3854, "name": "DUP1", "source": 2 }, + { "begin": 3878, "end": 3884, "name": "DUP4", "source": 2 }, + { "begin": 3871, "end": 3876, "name": "DUP3", "source": 2 }, + { "begin": 3864, "end": 3885, "name": "MSTORE", "source": 2 }, { - "begin": 3240, - "end": 3246, + "begin": 3912, + "end": 3916, "name": "PUSH", - "source": 0, - "value": "0" + "source": 2, + "value": "20" }, - { "begin": 3248, "end": 3255, "name": "DUP1", "source": 0 }, + { "begin": 3905, "end": 3910, "name": "DUP3", "source": 2 }, + { "begin": 3901, "end": 3917, "name": "ADD", "source": 2 }, + { "begin": 3894, "end": 3917, "name": "SWAP1", "source": 2 }, + { "begin": 3894, "end": 3917, "name": "POP", "source": 2 }, { - "begin": 3257, - "end": 3263, + "begin": 3965, + "end": 3969, "name": "PUSH", - "source": 0, - "value": "0" + "source": 2, + "value": "20" }, - { "begin": 3362, "end": 3375, "name": "DUP1", "source": 0 }, + { "begin": 3957, "end": 3963, "name": "DUP5", "source": 2 }, + { "begin": 3953, "end": 3970, "name": "MUL", "source": 2 }, + { "begin": 3945, "end": 3951, "name": "DUP4", "source": 2 }, + { "begin": 3941, "end": 3971, "name": "ADD", "source": 2 }, + { "begin": 3994, "end": 3997, "name": "DUP6", "source": 2 }, + { "begin": 3986, "end": 3992, "name": "DUP2", "source": 2 }, + { "begin": 3983, "end": 3998, "name": "GT", "source": 2 }, + { "begin": 3980, "end": 4102, "name": "ISZERO", "source": 2 }, { - "begin": 3362, - "end": 3375, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 3980, + "end": 4102, + "name": "PUSH [tag]", + "source": 2, + "value": "212" }, - { "begin": 3362, "end": 3375, "name": "SWAP1", "source": 0 }, - { "begin": 3362, "end": 3375, "name": "SLOAD", "source": 0 }, - { "begin": 3362, "end": 3375, "name": "SWAP1", "source": 0 }, + { "begin": 3980, "end": 4102, "name": "JUMPI", "source": 2 }, { - "begin": 3362, - "end": 3375, - "name": "PUSH", - "source": 0, - "value": "100" + "begin": 4013, + "end": 4092, + "name": "PUSH [tag]", + "source": 2, + "value": "213" }, - { "begin": 3362, "end": 3375, "name": "EXP", "source": 0 }, - { "begin": 3362, "end": 3375, "name": "SWAP1", "source": 0 }, - { "begin": 3362, "end": 3375, "name": "DIV", "source": 0 }, { - "begin": 3362, - "end": 3375, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 4013, + "end": 4092, + "name": "PUSH [tag]", + "source": 2, + "value": "119" }, - { "begin": 3362, "end": 3375, "name": "AND", "source": 0 }, { - "begin": 3362, - "end": 3389, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "begin": 4013, + "end": 4092, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 3362, "end": 3389, "name": "AND", "source": 0 }, { - "begin": 3362, - "end": 3389, - "name": "PUSH", - "source": 0, - "value": "F87F493F" + "begin": 4013, + "end": 4092, + "name": "tag", + "source": 2, + "value": "213" }, - { "begin": 3390, "end": 3403, "name": "DUP6", "source": 0 }, + { "begin": 4013, "end": 4092, "name": "JUMPDEST", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 3980, + "end": 4102, + "name": "tag", + "source": 2, + "value": "212" }, - { "begin": 3362, "end": 3404, "name": "MLOAD", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP3", "source": 0 }, + { "begin": 3980, "end": 4102, "name": "JUMPDEST", "source": 2 }, + { "begin": 4128, "end": 4134, "name": "DUP4", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "FFFFFFFF" + "begin": 4111, + "end": 4545, + "name": "tag", + "source": 2, + "value": "214" }, - { "begin": 3362, "end": 3404, "name": "AND", "source": 0 }, + { "begin": 4111, "end": 4545, "name": "JUMPDEST", "source": 2 }, + { "begin": 4145, "end": 4151, "name": "DUP2", "source": 2 }, + { "begin": 4140, "end": 4143, "name": "DUP2", "source": 2 }, + { "begin": 4137, "end": 4152, "name": "LT", "source": 2 }, + { "begin": 4111, "end": 4545, "name": "ISZERO", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "E0" + "begin": 4111, + "end": 4545, + "name": "PUSH [tag]", + "source": 2, + "value": "216" }, - { "begin": 3362, "end": 3404, "name": "SHL", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP2", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "MSTORE", "source": 0 }, + { "begin": 4111, "end": 4545, "name": "JUMPI", "source": 2 }, + { "begin": 4234, "end": 4237, "name": "DUP1", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4221, + "end": 4238, + "name": "CALLDATALOAD", + "source": 2 + }, + { + "begin": 4270, + "end": 4288, "name": "PUSH", - "source": 0, - "value": "4" + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 3362, "end": 3404, "name": "ADD", "source": 0 }, + { "begin": 4257, "end": 4268, "name": "DUP2", "source": 2 }, + { "begin": 4254, "end": 4289, "name": "GT", "source": 2 }, + { "begin": 4251, "end": 4373, "name": "ISZERO", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4251, + "end": 4373, "name": "PUSH [tag]", - "source": 0, - "value": "52" + "source": 2, + "value": "217" }, - { "begin": 3362, "end": 3404, "name": "SWAP2", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "SWAP1", "source": 0 }, + { "begin": 4251, "end": 4373, "name": "JUMPI", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4292, + "end": 4371, "name": "PUSH [tag]", - "source": 0, - "value": "53" + "source": 2, + "value": "218" }, { - "begin": 3362, - "end": 3404, + "begin": 4292, + "end": 4371, + "name": "PUSH [tag]", + "source": 2, + "value": "117" + }, + { + "begin": 4292, + "end": 4371, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3362, - "end": 3404, + "begin": 4292, + "end": 4371, "name": "tag", - "source": 0, - "value": "52" + "source": 2, + "value": "218" }, - { "begin": 3362, "end": 3404, "name": "JUMPDEST", "source": 0 }, + { "begin": 4292, "end": 4371, "name": "JUMPDEST", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "60" + "begin": 4251, + "end": 4373, + "name": "tag", + "source": 2, + "value": "217" }, + { "begin": 4251, "end": 4373, "name": "JUMPDEST", "source": 2 }, + { "begin": 4416, "end": 4427, "name": "DUP1", "source": 2 }, + { "begin": 4408, "end": 4414, "name": "DUP7", "source": 2 }, + { "begin": 4404, "end": 4428, "name": "ADD", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 4454, + "end": 4500, + "name": "PUSH [tag]", + "source": 2, + "value": "219" }, - { "begin": 3362, "end": 3404, "name": "MLOAD", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP1", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP4", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "SUB", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP2", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP7", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "GAS", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "STATICCALL", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "ISZERO", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP1", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "ISZERO", "source": 0 }, + { "begin": 4496, "end": 4499, "name": "DUP10", "source": 2 }, + { "begin": 4484, "end": 4494, "name": "DUP3", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4454, + "end": 4500, "name": "PUSH [tag]", - "source": 0, - "value": "55" + "source": 2, + "value": "124" }, - { "begin": 3362, "end": 3404, "name": "JUMPI", "source": 0 }, { - "begin": 3362, - "end": 3404, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 4454, + "end": 4500, + "name": "JUMP", + "source": 2, + "value": "[in]" }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 4454, + "end": 4500, + "name": "tag", + "source": 2, + "value": "219" }, - { "begin": 3362, "end": 3404, "name": "DUP1", "source": 0 }, + { "begin": 4454, "end": 4500, "name": "JUMPDEST", "source": 2 }, + { "begin": 4449, "end": 4452, "name": "DUP6", "source": 2 }, + { "begin": 4442, "end": 4501, "name": "MSTORE", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "RETURNDATACOPY", - "source": 0 + "begin": 4530, + "end": 4534, + "name": "PUSH", + "source": 2, + "value": "20" }, + { "begin": 4525, "end": 4528, "name": "DUP6", "source": 2 }, + { "begin": 4521, "end": 4535, "name": "ADD", "source": 2 }, + { "begin": 4514, "end": 4535, "name": "SWAP5", "source": 2 }, + { "begin": 4514, "end": 4535, "name": "POP", "source": 2 }, + { "begin": 4187, "end": 4545, "name": "POP", "source": 2 }, + { "begin": 4187, "end": 4545, "name": "POP", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 4171, + "end": 4175, + "name": "PUSH", + "source": 2, + "value": "20" }, + { "begin": 4166, "end": 4169, "name": "DUP2", "source": 2 }, + { "begin": 4162, "end": 4176, "name": "ADD", "source": 2 }, + { "begin": 4155, "end": 4176, "name": "SWAP1", "source": 2 }, + { "begin": 4155, "end": 4176, "name": "POP", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "0" + "begin": 4111, + "end": 4545, + "name": "PUSH [tag]", + "source": 2, + "value": "214" }, - { "begin": 3362, "end": 3404, "name": "REVERT", "source": 0 }, + { "begin": 4111, "end": 4545, "name": "JUMP", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4111, + "end": 4545, "name": "tag", - "source": 0, - "value": "55" + "source": 2, + "value": "216" }, - { "begin": 3362, "end": 3404, "name": "JUMPDEST", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "POP", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "POP", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "POP", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "POP", "source": 0 }, - { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "40" + { "begin": 4111, "end": 4545, "name": "JUMPDEST", "source": 2 }, + { "begin": 4115, "end": 4136, "name": "POP", "source": 2 }, + { "begin": 3720, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3720, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "SWAP4", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "SWAP3", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "POP", "source": 2 }, + { + "begin": 3609, + "end": 4551, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 3362, "end": 3404, "name": "MLOAD", "source": 0 }, { - "begin": 3362, - "end": 3404, - "name": "RETURNDATASIZE", - "source": 0 + "begin": 4572, + "end": 4960, + "name": "tag", + "source": 2, + "value": "126" }, + { "begin": 4572, "end": 4960, "name": "JUMPDEST", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4652, + "end": 4657, "name": "PUSH", - "source": 0, - "value": "1F" + "source": 2, + "value": "0" }, - { "begin": 3362, "end": 3404, "name": "NOT", "source": 0 }, + { "begin": 4701, "end": 4704, "name": "DUP3", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4694, + "end": 4698, "name": "PUSH", - "source": 0, + "source": 2, "value": "1F" }, - { "begin": 3362, "end": 3404, "name": "DUP3", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "ADD", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "AND", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP3", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "ADD", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP1", "source": 0 }, + { "begin": 4686, "end": 4692, "name": "DUP4", "source": 2 }, + { "begin": 4682, "end": 4699, "name": "ADD", "source": 2 }, + { "begin": 4678, "end": 4705, "name": "SLT", "source": 2 }, { - "begin": 3362, - "end": 3404, - "name": "PUSH", - "source": 0, - "value": "40" + "begin": 4668, + "end": 4790, + "name": "PUSH [tag]", + "source": 2, + "value": "221" }, - { "begin": 3362, "end": 3404, "name": "MSTORE", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "POP", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "DUP2", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "ADD", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "SWAP1", "source": 0 }, + { "begin": 4668, "end": 4790, "name": "JUMPI", "source": 2 }, { - "begin": 3362, - "end": 3404, + "begin": 4709, + "end": 4788, "name": "PUSH [tag]", - "source": 0, - "value": "56" + "source": 2, + "value": "222" }, - { "begin": 3362, "end": 3404, "name": "SWAP2", "source": 0 }, - { "begin": 3362, "end": 3404, "name": "SWAP1", "source": 0 }, { - "begin": 3362, - "end": 3404, + "begin": 4709, + "end": 4788, "name": "PUSH [tag]", - "source": 0, - "value": "57" + "source": 2, + "value": "117" }, { - "begin": 3362, - "end": 3404, + "begin": 4709, + "end": 4788, "name": "JUMP", - "source": 0, + "source": 2, "value": "[in]" }, { - "begin": 3362, - "end": 3404, + "begin": 4709, + "end": 4788, "name": "tag", - "source": 0, - "value": "56" - }, - { "begin": 3362, "end": 3404, "name": "JUMPDEST", "source": 0 }, - { "begin": 3355, "end": 3404, "name": "SWAP3", "source": 0 }, - { "begin": 3355, "end": 3404, "name": "POP", "source": 0 }, - { "begin": 3355, "end": 3404, "name": "SWAP3", "source": 0 }, - { "begin": 3355, "end": 3404, "name": "POP", "source": 0 }, - { "begin": 3355, "end": 3404, "name": "SWAP3", "source": 0 }, - { "begin": 3355, "end": 3404, "name": "POP", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP2", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP4", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP1", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "SWAP3", "source": 0 }, - { "begin": 3128, "end": 3415, "name": "POP", "source": 0 }, - { - "begin": 3128, - "end": 3415, - "name": "JUMP", - "source": 0, - "value": "[out]" + "source": 2, + "value": "222" }, + { "begin": 4709, "end": 4788, "name": "JUMPDEST", "source": 2 }, { - "begin": 7, - "end": 82, + "begin": 4668, + "end": 4790, "name": "tag", - "source": 1, - "value": "58" + "source": 2, + "value": "221" }, - { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 1 }, + { "begin": 4668, "end": 4790, "name": "JUMPDEST", "source": 2 }, + { "begin": 4826, "end": 4832, "name": "DUP2", "source": 2 }, { - "begin": 40, - "end": 46, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 4813, + "end": 4833, + "name": "CALLDATALOAD", + "source": 2 }, { - "begin": 73, - "end": 75, - "name": "PUSH", - "source": 1, - "value": "40" + "begin": 4851, + "end": 4954, + "name": "PUSH [tag]", + "source": 2, + "value": "223" }, - { "begin": 67, "end": 76, "name": "MLOAD", "source": 1 }, - { "begin": 57, "end": 76, "name": "SWAP1", "source": 1 }, - { "begin": 57, "end": 76, "name": "POP", "source": 1 }, - { "begin": 7, "end": 82, "name": "SWAP1", "source": 1 }, + { "begin": 4950, "end": 4953, "name": "DUP5", "source": 2 }, + { "begin": 4942, "end": 4948, "name": "DUP3", "source": 2 }, { - "begin": 7, - "end": 82, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 4935, + "end": 4939, + "name": "PUSH", + "source": 2, + "value": "20" }, + { "begin": 4927, "end": 4933, "name": "DUP7", "source": 2 }, + { "begin": 4923, "end": 4940, "name": "ADD", "source": 2 }, { - "begin": 88, - "end": 205, - "name": "tag", - "source": 1, - "value": "59" + "begin": 4851, + "end": 4954, + "name": "PUSH [tag]", + "source": 2, + "value": "125" }, - { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, { - "begin": 197, - "end": 198, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 4851, + "end": 4954, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, - { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, { - "begin": 211, - "end": 328, + "begin": 4851, + "end": 4954, "name": "tag", - "source": 1, - "value": "60" + "source": 2, + "value": "223" }, - { "begin": 211, "end": 328, "name": "JUMPDEST", "source": 1 }, - { - "begin": 320, - "end": 321, - "name": "PUSH", - "source": 1, - "value": "0" + { "begin": 4851, "end": 4954, "name": "JUMPDEST", "source": 2 }, + { "begin": 4842, "end": 4954, "name": "SWAP2", "source": 2 }, + { "begin": 4842, "end": 4954, "name": "POP", "source": 2 }, + { "begin": 4658, "end": 4960, "name": "POP", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "SWAP3", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "SWAP2", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "POP", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "POP", "source": 2 }, + { + "begin": 4572, + "end": 4960, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 317, "end": 318, "name": "DUP1", "source": 1 }, - { "begin": 310, "end": 322, "name": "REVERT", "source": 1 }, { - "begin": 334, - "end": 420, + "begin": 5008, + "end": 5786, "name": "tag", - "source": 1, - "value": "61" + "source": 2, + "value": "127" }, - { "begin": 334, "end": 420, "name": "JUMPDEST", "source": 1 }, + { "begin": 5008, "end": 5786, "name": "JUMPDEST", "source": 2 }, { - "begin": 369, - "end": 376, + "begin": 5087, + "end": 5092, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 409, - "end": 413, + "begin": 5131, + "end": 5135, "name": "PUSH", - "source": 1, - "value": "FF" - }, - { "begin": 402, "end": 407, "name": "DUP3", "source": 1 }, - { "begin": 398, "end": 414, "name": "AND", "source": 1 }, - { "begin": 387, "end": 414, "name": "SWAP1", "source": 1 }, - { "begin": 387, "end": 414, "name": "POP", "source": 1 }, - { "begin": 334, "end": 420, "name": "SWAP2", "source": 1 }, - { "begin": 334, "end": 420, "name": "SWAP1", "source": 1 }, - { "begin": 334, "end": 420, "name": "POP", "source": 1 }, - { - "begin": 334, - "end": 420, - "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "40" }, + { "begin": 5119, "end": 5128, "name": "DUP3", "source": 2 }, + { "begin": 5114, "end": 5117, "name": "DUP5", "source": 2 }, + { "begin": 5110, "end": 5129, "name": "SUB", "source": 2 }, + { "begin": 5106, "end": 5136, "name": "SLT", "source": 2 }, + { "begin": 5103, "end": 5220, "name": "ISZERO", "source": 2 }, { - "begin": 426, - "end": 544, - "name": "tag", - "source": 1, - "value": "62" + "begin": 5103, + "end": 5220, + "name": "PUSH [tag]", + "source": 2, + "value": "225" }, - { "begin": 426, "end": 544, "name": "JUMPDEST", "source": 1 }, + { "begin": 5103, "end": 5220, "name": "JUMPI", "source": 2 }, { - "begin": 497, - "end": 519, + "begin": 5139, + "end": 5218, "name": "PUSH [tag]", - "source": 1, - "value": "126" + "source": 2, + "value": "226" }, - { "begin": 513, "end": 518, "name": "DUP2", "source": 1 }, { - "begin": 497, - "end": 519, + "begin": 5139, + "end": 5218, "name": "PUSH [tag]", - "source": 1, - "value": "61" + "source": 2, + "value": "108" }, { - "begin": 497, - "end": 519, + "begin": 5139, + "end": 5218, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 497, - "end": 519, + "begin": 5139, + "end": 5218, "name": "tag", - "source": 1, - "value": "126" + "source": 2, + "value": "226" }, - { "begin": 497, "end": 519, "name": "JUMPDEST", "source": 1 }, - { "begin": 490, "end": 495, "name": "DUP2", "source": 1 }, - { "begin": 487, "end": 520, "name": "EQ", "source": 1 }, + { "begin": 5139, "end": 5218, "name": "JUMPDEST", "source": 2 }, { - "begin": 477, - "end": 538, + "begin": 5103, + "end": 5220, + "name": "tag", + "source": 2, + "value": "225" + }, + { "begin": 5103, "end": 5220, "name": "JUMPDEST", "source": 2 }, + { + "begin": 5238, + "end": 5259, "name": "PUSH [tag]", - "source": 1, - "value": "127" + "source": 2, + "value": "227" }, - { "begin": 477, "end": 538, "name": "JUMPI", "source": 1 }, { - "begin": 534, - "end": 535, + "begin": 5254, + "end": 5258, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "40" }, - { "begin": 531, "end": 532, "name": "DUP1", "source": 1 }, - { "begin": 524, "end": 536, "name": "REVERT", "source": 1 }, { - "begin": 477, - "end": 538, - "name": "tag", - "source": 1, - "value": "127" + "begin": 5238, + "end": 5259, + "name": "PUSH [tag]", + "source": 2, + "value": "112" }, - { "begin": 477, "end": 538, "name": "JUMPDEST", "source": 1 }, - { "begin": 426, "end": 544, "name": "POP", "source": 1 }, { - "begin": 426, - "end": 544, + "begin": 5238, + "end": 5259, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 550, - "end": 685, + "begin": 5238, + "end": 5259, "name": "tag", - "source": 1, - "value": "63" + "source": 2, + "value": "227" }, - { "begin": 550, "end": 685, "name": "JUMPDEST", "source": 1 }, + { "begin": 5238, "end": 5259, "name": "JUMPDEST", "source": 2 }, + { "begin": 5229, "end": 5259, "name": "SWAP1", "source": 2 }, + { "begin": 5229, "end": 5259, "name": "POP", "source": 2 }, { - "begin": 594, - "end": 599, + "begin": 5321, + "end": 5322, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 632, "end": 638, "name": "DUP2", "source": 1 }, - { "begin": 619, "end": 639, "name": "CALLDATALOAD", "source": 1 }, - { "begin": 610, "end": 639, "name": "SWAP1", "source": 1 }, - { "begin": 610, "end": 639, "name": "POP", "source": 1 }, { - "begin": 648, - "end": 679, + "begin": 5361, + "end": 5408, "name": "PUSH [tag]", - "source": 1, - "value": "129" + "source": 2, + "value": "228" }, - { "begin": 673, "end": 678, "name": "DUP2", "source": 1 }, + { "begin": 5404, "end": 5407, "name": "DUP5", "source": 2 }, + { "begin": 5395, "end": 5401, "name": "DUP3", "source": 2 }, + { "begin": 5384, "end": 5393, "name": "DUP6", "source": 2 }, + { "begin": 5380, "end": 5402, "name": "ADD", "source": 2 }, { - "begin": 648, - "end": 679, + "begin": 5361, + "end": 5408, "name": "PUSH [tag]", - "source": 1, - "value": "62" + "source": 2, + "value": "116" }, { - "begin": 648, - "end": 679, + "begin": 5361, + "end": 5408, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 648, - "end": 679, - "name": "tag", - "source": 1, - "value": "129" - }, - { "begin": 648, "end": 679, "name": "JUMPDEST", "source": 1 }, - { "begin": 550, "end": 685, "name": "SWAP3", "source": 1 }, - { "begin": 550, "end": 685, "name": "SWAP2", "source": 1 }, - { "begin": 550, "end": 685, "name": "POP", "source": 1 }, - { "begin": 550, "end": 685, "name": "POP", "source": 1 }, - { - "begin": 550, - "end": 685, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 691, - "end": 780, + "begin": 5361, + "end": 5408, "name": "tag", - "source": 1, - "value": "64" + "source": 2, + "value": "228" }, - { "begin": 691, "end": 780, "name": "JUMPDEST", "source": 1 }, + { "begin": 5361, "end": 5408, "name": "JUMPDEST", "source": 2 }, { - "begin": 727, - "end": 734, + "begin": 5354, + "end": 5358, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 5347, "end": 5352, "name": "DUP4", "source": 2 }, + { "begin": 5343, "end": 5359, "name": "ADD", "source": 2 }, + { "begin": 5336, "end": 5409, "name": "MSTORE", "source": 2 }, + { "begin": 5269, "end": 5420, "name": "POP", "source": 2 }, { - "begin": 767, - "end": 773, + "begin": 5511, + "end": 5513, "name": "PUSH", - "source": 1, - "value": "FFFF" + "source": 2, + "value": "20" }, - { "begin": 760, "end": 765, "name": "DUP3", "source": 1 }, - { "begin": 756, "end": 774, "name": "AND", "source": 1 }, - { "begin": 745, "end": 774, "name": "SWAP1", "source": 1 }, - { "begin": 745, "end": 774, "name": "POP", "source": 1 }, - { "begin": 691, "end": 780, "name": "SWAP2", "source": 1 }, - { "begin": 691, "end": 780, "name": "SWAP1", "source": 1 }, - { "begin": 691, "end": 780, "name": "POP", "source": 1 }, + { "begin": 5500, "end": 5509, "name": "DUP3", "source": 2 }, + { "begin": 5496, "end": 5514, "name": "ADD", "source": 2 }, { - "begin": 691, - "end": 780, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 5483, + "end": 5515, + "name": "CALLDATALOAD", + "source": 2 }, { - "begin": 786, - "end": 906, - "name": "tag", - "source": 1, - "value": "65" + "begin": 5542, + "end": 5560, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 786, "end": 906, "name": "JUMPDEST", "source": 1 }, + { "begin": 5534, "end": 5540, "name": "DUP2", "source": 2 }, + { "begin": 5531, "end": 5561, "name": "GT", "source": 2 }, + { "begin": 5528, "end": 5645, "name": "ISZERO", "source": 2 }, { - "begin": 858, - "end": 881, + "begin": 5528, + "end": 5645, "name": "PUSH [tag]", - "source": 1, - "value": "132" + "source": 2, + "value": "229" }, - { "begin": 875, "end": 880, "name": "DUP2", "source": 1 }, + { "begin": 5528, "end": 5645, "name": "JUMPI", "source": 2 }, { - "begin": 858, - "end": 881, + "begin": 5564, + "end": 5643, "name": "PUSH [tag]", - "source": 1, - "value": "64" - }, - { - "begin": 858, - "end": 881, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 858, - "end": 881, - "name": "tag", - "source": 1, - "value": "132" + "source": 2, + "value": "230" }, - { "begin": 858, "end": 881, "name": "JUMPDEST", "source": 1 }, - { "begin": 851, "end": 856, "name": "DUP2", "source": 1 }, - { "begin": 848, "end": 882, "name": "EQ", "source": 1 }, { - "begin": 838, - "end": 900, + "begin": 5564, + "end": 5643, "name": "PUSH [tag]", - "source": 1, - "value": "133" - }, - { "begin": 838, "end": 900, "name": "JUMPI", "source": 1 }, - { - "begin": 896, - "end": 897, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 893, "end": 894, "name": "DUP1", "source": 1 }, - { "begin": 886, "end": 898, "name": "REVERT", "source": 1 }, - { - "begin": 838, - "end": 900, - "name": "tag", - "source": 1, - "value": "133" + "source": 2, + "value": "113" }, - { "begin": 838, "end": 900, "name": "JUMPDEST", "source": 1 }, - { "begin": 786, "end": 906, "name": "POP", "source": 1 }, { - "begin": 786, - "end": 906, + "begin": 5564, + "end": 5643, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 912, - "end": 1049, + "begin": 5564, + "end": 5643, "name": "tag", - "source": 1, - "value": "66" - }, - { "begin": 912, "end": 1049, "name": "JUMPDEST", "source": 1 }, - { - "begin": 957, - "end": 962, - "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "230" }, - { "begin": 995, "end": 1001, "name": "DUP2", "source": 1 }, + { "begin": 5564, "end": 5643, "name": "JUMPDEST", "source": 2 }, { - "begin": 982, - "end": 1002, - "name": "CALLDATALOAD", - "source": 1 + "begin": 5528, + "end": 5645, + "name": "tag", + "source": 2, + "value": "229" }, - { "begin": 973, "end": 1002, "name": "SWAP1", "source": 1 }, - { "begin": 973, "end": 1002, "name": "POP", "source": 1 }, + { "begin": 5528, "end": 5645, "name": "JUMPDEST", "source": 2 }, { - "begin": 1011, - "end": 1043, + "begin": 5684, + "end": 5767, "name": "PUSH [tag]", - "source": 1, - "value": "135" + "source": 2, + "value": "231" }, - { "begin": 1037, "end": 1042, "name": "DUP2", "source": 1 }, + { "begin": 5763, "end": 5766, "name": "DUP5", "source": 2 }, + { "begin": 5754, "end": 5760, "name": "DUP3", "source": 2 }, + { "begin": 5743, "end": 5752, "name": "DUP6", "source": 2 }, + { "begin": 5739, "end": 5761, "name": "ADD", "source": 2 }, { - "begin": 1011, - "end": 1043, + "begin": 5684, + "end": 5767, "name": "PUSH [tag]", - "source": 1, - "value": "65" + "source": 2, + "value": "126" }, { - "begin": 1011, - "end": 1043, + "begin": 5684, + "end": 5767, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 1011, - "end": 1043, + "begin": 5684, + "end": 5767, "name": "tag", - "source": 1, - "value": "135" + "source": 2, + "value": "231" }, - { "begin": 1011, "end": 1043, "name": "JUMPDEST", "source": 1 }, - { "begin": 912, "end": 1049, "name": "SWAP3", "source": 1 }, - { "begin": 912, "end": 1049, "name": "SWAP2", "source": 1 }, - { "begin": 912, "end": 1049, "name": "POP", "source": 1 }, - { "begin": 912, "end": 1049, "name": "POP", "source": 1 }, + { "begin": 5684, "end": 5767, "name": "JUMPDEST", "source": 2 }, { - "begin": 912, - "end": 1049, + "begin": 5677, + "end": 5681, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 5670, "end": 5675, "name": "DUP4", "source": 2 }, + { "begin": 5666, "end": 5682, "name": "ADD", "source": 2 }, + { "begin": 5659, "end": 5768, "name": "MSTORE", "source": 2 }, + { "begin": 5430, "end": 5779, "name": "POP", "source": 2 }, + { "begin": 5008, "end": 5786, "name": "SWAP3", "source": 2 }, + { "begin": 5008, "end": 5786, "name": "SWAP2", "source": 2 }, + { "begin": 5008, "end": 5786, "name": "POP", "source": 2 }, + { "begin": 5008, "end": 5786, "name": "POP", "source": 2 }, + { + "begin": 5008, + "end": 5786, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1055, - "end": 1181, + "begin": 5792, + "end": 5918, "name": "tag", - "source": 1, - "value": "67" + "source": 2, + "value": "128" }, - { "begin": 1055, "end": 1181, "name": "JUMPDEST", "source": 1 }, + { "begin": 5792, "end": 5918, "name": "JUMPDEST", "source": 2 }, { - "begin": 1092, - "end": 1099, + "begin": 5829, + "end": 5836, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 1132, - "end": 1174, + "begin": 5869, + "end": 5911, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 1125, "end": 1130, "name": "DUP3", "source": 1 }, - { "begin": 1121, "end": 1175, "name": "AND", "source": 1 }, - { "begin": 1110, "end": 1175, "name": "SWAP1", "source": 1 }, - { "begin": 1110, "end": 1175, "name": "POP", "source": 1 }, - { "begin": 1055, "end": 1181, "name": "SWAP2", "source": 1 }, - { "begin": 1055, "end": 1181, "name": "SWAP1", "source": 1 }, - { "begin": 1055, "end": 1181, "name": "POP", "source": 1 }, + { "begin": 5862, "end": 5867, "name": "DUP3", "source": 2 }, + { "begin": 5858, "end": 5912, "name": "AND", "source": 2 }, + { "begin": 5847, "end": 5912, "name": "SWAP1", "source": 2 }, + { "begin": 5847, "end": 5912, "name": "POP", "source": 2 }, + { "begin": 5792, "end": 5918, "name": "SWAP2", "source": 2 }, + { "begin": 5792, "end": 5918, "name": "SWAP1", "source": 2 }, + { "begin": 5792, "end": 5918, "name": "POP", "source": 2 }, { - "begin": 1055, - "end": 1181, + "begin": 5792, + "end": 5918, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1187, - "end": 1283, + "begin": 5924, + "end": 6020, "name": "tag", - "source": 1, - "value": "68" + "source": 2, + "value": "129" }, - { "begin": 1187, "end": 1283, "name": "JUMPDEST", "source": 1 }, + { "begin": 5924, "end": 6020, "name": "JUMPDEST", "source": 2 }, { - "begin": 1224, - "end": 1231, + "begin": 5961, + "end": 5968, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 1253, - "end": 1277, + "begin": 5990, + "end": 6014, "name": "PUSH [tag]", - "source": 1, - "value": "138" + "source": 2, + "value": "234" }, - { "begin": 1271, "end": 1276, "name": "DUP3", "source": 1 }, + { "begin": 6008, "end": 6013, "name": "DUP3", "source": 2 }, { - "begin": 1253, - "end": 1277, + "begin": 5990, + "end": 6014, "name": "PUSH [tag]", - "source": 1, - "value": "67" + "source": 2, + "value": "128" }, { - "begin": 1253, - "end": 1277, + "begin": 5990, + "end": 6014, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 1253, - "end": 1277, + "begin": 5990, + "end": 6014, "name": "tag", - "source": 1, - "value": "138" + "source": 2, + "value": "234" }, - { "begin": 1253, "end": 1277, "name": "JUMPDEST", "source": 1 }, - { "begin": 1242, "end": 1277, "name": "SWAP1", "source": 1 }, - { "begin": 1242, "end": 1277, "name": "POP", "source": 1 }, - { "begin": 1187, "end": 1283, "name": "SWAP2", "source": 1 }, - { "begin": 1187, "end": 1283, "name": "SWAP1", "source": 1 }, - { "begin": 1187, "end": 1283, "name": "POP", "source": 1 }, + { "begin": 5990, "end": 6014, "name": "JUMPDEST", "source": 2 }, + { "begin": 5979, "end": 6014, "name": "SWAP1", "source": 2 }, + { "begin": 5979, "end": 6014, "name": "POP", "source": 2 }, + { "begin": 5924, "end": 6020, "name": "SWAP2", "source": 2 }, + { "begin": 5924, "end": 6020, "name": "SWAP1", "source": 2 }, + { "begin": 5924, "end": 6020, "name": "POP", "source": 2 }, { - "begin": 1187, - "end": 1283, + "begin": 5924, + "end": 6020, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1289, - "end": 1411, + "begin": 6026, + "end": 6148, "name": "tag", - "source": 1, - "value": "69" + "source": 2, + "value": "130" }, - { "begin": 1289, "end": 1411, "name": "JUMPDEST", "source": 1 }, + { "begin": 6026, "end": 6148, "name": "JUMPDEST", "source": 2 }, { - "begin": 1362, - "end": 1386, + "begin": 6099, + "end": 6123, "name": "PUSH [tag]", - "source": 1, - "value": "140" + "source": 2, + "value": "236" }, - { "begin": 1380, "end": 1385, "name": "DUP2", "source": 1 }, + { "begin": 6117, "end": 6122, "name": "DUP2", "source": 2 }, { - "begin": 1362, - "end": 1386, + "begin": 6099, + "end": 6123, "name": "PUSH [tag]", - "source": 1, - "value": "68" + "source": 2, + "value": "129" }, { - "begin": 1362, - "end": 1386, + "begin": 6099, + "end": 6123, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 1362, - "end": 1386, + "begin": 6099, + "end": 6123, "name": "tag", - "source": 1, - "value": "140" + "source": 2, + "value": "236" }, - { "begin": 1362, "end": 1386, "name": "JUMPDEST", "source": 1 }, - { "begin": 1355, "end": 1360, "name": "DUP2", "source": 1 }, - { "begin": 1352, "end": 1387, "name": "EQ", "source": 1 }, + { "begin": 6099, "end": 6123, "name": "JUMPDEST", "source": 2 }, + { "begin": 6092, "end": 6097, "name": "DUP2", "source": 2 }, + { "begin": 6089, "end": 6124, "name": "EQ", "source": 2 }, { - "begin": 1342, - "end": 1405, + "begin": 6079, + "end": 6142, "name": "PUSH [tag]", - "source": 1, - "value": "141" + "source": 2, + "value": "237" }, - { "begin": 1342, "end": 1405, "name": "JUMPI", "source": 1 }, + { "begin": 6079, "end": 6142, "name": "JUMPI", "source": 2 }, { - "begin": 1401, - "end": 1402, + "begin": 6138, + "end": 6139, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1398, "end": 1399, "name": "DUP1", "source": 1 }, - { "begin": 1391, "end": 1403, "name": "REVERT", "source": 1 }, + { "begin": 6135, "end": 6136, "name": "DUP1", "source": 2 }, + { "begin": 6128, "end": 6140, "name": "REVERT", "source": 2 }, { - "begin": 1342, - "end": 1405, + "begin": 6079, + "end": 6142, "name": "tag", - "source": 1, - "value": "141" + "source": 2, + "value": "237" }, - { "begin": 1342, "end": 1405, "name": "JUMPDEST", "source": 1 }, - { "begin": 1289, "end": 1411, "name": "POP", "source": 1 }, + { "begin": 6079, "end": 6142, "name": "JUMPDEST", "source": 2 }, + { "begin": 6026, "end": 6148, "name": "POP", "source": 2 }, { - "begin": 1289, - "end": 1411, + "begin": 6026, + "end": 6148, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1417, - "end": 1556, + "begin": 6154, + "end": 6293, "name": "tag", - "source": 1, - "value": "70" + "source": 2, + "value": "131" }, - { "begin": 1417, "end": 1556, "name": "JUMPDEST", "source": 1 }, + { "begin": 6154, "end": 6293, "name": "JUMPDEST", "source": 2 }, { - "begin": 1463, - "end": 1468, + "begin": 6200, + "end": 6205, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1501, "end": 1507, "name": "DUP2", "source": 1 }, + { "begin": 6238, "end": 6244, "name": "DUP2", "source": 2 }, { - "begin": 1488, - "end": 1508, + "begin": 6225, + "end": 6245, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 1479, "end": 1508, "name": "SWAP1", "source": 1 }, - { "begin": 1479, "end": 1508, "name": "POP", "source": 1 }, + { "begin": 6216, "end": 6245, "name": "SWAP1", "source": 2 }, + { "begin": 6216, "end": 6245, "name": "POP", "source": 2 }, { - "begin": 1517, - "end": 1550, + "begin": 6254, + "end": 6287, "name": "PUSH [tag]", - "source": 1, - "value": "143" + "source": 2, + "value": "239" }, - { "begin": 1544, "end": 1549, "name": "DUP2", "source": 1 }, + { "begin": 6281, "end": 6286, "name": "DUP2", "source": 2 }, { - "begin": 1517, - "end": 1550, + "begin": 6254, + "end": 6287, "name": "PUSH [tag]", - "source": 1, - "value": "69" + "source": 2, + "value": "130" }, { - "begin": 1517, - "end": 1550, + "begin": 6254, + "end": 6287, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 1517, - "end": 1550, + "begin": 6254, + "end": 6287, "name": "tag", - "source": 1, - "value": "143" + "source": 2, + "value": "239" }, - { "begin": 1517, "end": 1550, "name": "JUMPDEST", "source": 1 }, - { "begin": 1417, "end": 1556, "name": "SWAP3", "source": 1 }, - { "begin": 1417, "end": 1556, "name": "SWAP2", "source": 1 }, - { "begin": 1417, "end": 1556, "name": "POP", "source": 1 }, - { "begin": 1417, "end": 1556, "name": "POP", "source": 1 }, + { "begin": 6254, "end": 6287, "name": "JUMPDEST", "source": 2 }, + { "begin": 6154, "end": 6293, "name": "SWAP3", "source": 2 }, + { "begin": 6154, "end": 6293, "name": "SWAP2", "source": 2 }, + { "begin": 6154, "end": 6293, "name": "POP", "source": 2 }, + { "begin": 6154, "end": 6293, "name": "POP", "source": 2 }, { - "begin": 1417, - "end": 1556, + "begin": 6154, + "end": 6293, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1562, - "end": 1663, + "begin": 6299, + "end": 6400, "name": "tag", - "source": 1, - "value": "71" + "source": 2, + "value": "132" }, - { "begin": 1562, "end": 1663, "name": "JUMPDEST", "source": 1 }, + { "begin": 6299, "end": 6400, "name": "JUMPDEST", "source": 2 }, { - "begin": 1598, - "end": 1605, + "begin": 6335, + "end": 6342, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 1638, - "end": 1656, + "begin": 6375, + "end": 6393, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 1631, "end": 1636, "name": "DUP3", "source": 1 }, - { "begin": 1627, "end": 1657, "name": "AND", "source": 1 }, - { "begin": 1616, "end": 1657, "name": "SWAP1", "source": 1 }, - { "begin": 1616, "end": 1657, "name": "POP", "source": 1 }, - { "begin": 1562, "end": 1663, "name": "SWAP2", "source": 1 }, - { "begin": 1562, "end": 1663, "name": "SWAP1", "source": 1 }, - { "begin": 1562, "end": 1663, "name": "POP", "source": 1 }, + { "begin": 6368, "end": 6373, "name": "DUP3", "source": 2 }, + { "begin": 6364, "end": 6394, "name": "AND", "source": 2 }, + { "begin": 6353, "end": 6394, "name": "SWAP1", "source": 2 }, + { "begin": 6353, "end": 6394, "name": "POP", "source": 2 }, + { "begin": 6299, "end": 6400, "name": "SWAP2", "source": 2 }, + { "begin": 6299, "end": 6400, "name": "SWAP1", "source": 2 }, + { "begin": 6299, "end": 6400, "name": "POP", "source": 2 }, { - "begin": 1562, - "end": 1663, + "begin": 6299, + "end": 6400, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1669, - "end": 1789, + "begin": 6406, + "end": 6526, "name": "tag", - "source": 1, - "value": "72" + "source": 2, + "value": "133" }, - { "begin": 1669, "end": 1789, "name": "JUMPDEST", "source": 1 }, + { "begin": 6406, "end": 6526, "name": "JUMPDEST", "source": 2 }, { - "begin": 1741, - "end": 1764, + "begin": 6478, + "end": 6501, "name": "PUSH [tag]", - "source": 1, - "value": "146" + "source": 2, + "value": "242" }, - { "begin": 1758, "end": 1763, "name": "DUP2", "source": 1 }, + { "begin": 6495, "end": 6500, "name": "DUP2", "source": 2 }, { - "begin": 1741, - "end": 1764, + "begin": 6478, + "end": 6501, "name": "PUSH [tag]", - "source": 1, - "value": "71" + "source": 2, + "value": "132" }, { - "begin": 1741, - "end": 1764, + "begin": 6478, + "end": 6501, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 1741, - "end": 1764, + "begin": 6478, + "end": 6501, "name": "tag", - "source": 1, - "value": "146" + "source": 2, + "value": "242" }, - { "begin": 1741, "end": 1764, "name": "JUMPDEST", "source": 1 }, - { "begin": 1734, "end": 1739, "name": "DUP2", "source": 1 }, - { "begin": 1731, "end": 1765, "name": "EQ", "source": 1 }, + { "begin": 6478, "end": 6501, "name": "JUMPDEST", "source": 2 }, + { "begin": 6471, "end": 6476, "name": "DUP2", "source": 2 }, + { "begin": 6468, "end": 6502, "name": "EQ", "source": 2 }, { - "begin": 1721, - "end": 1783, + "begin": 6458, + "end": 6520, "name": "PUSH [tag]", - "source": 1, - "value": "147" + "source": 2, + "value": "243" }, - { "begin": 1721, "end": 1783, "name": "JUMPI", "source": 1 }, + { "begin": 6458, "end": 6520, "name": "JUMPI", "source": 2 }, { - "begin": 1779, - "end": 1780, + "begin": 6516, + "end": 6517, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1776, "end": 1777, "name": "DUP1", "source": 1 }, - { "begin": 1769, "end": 1781, "name": "REVERT", "source": 1 }, + { "begin": 6513, "end": 6514, "name": "DUP1", "source": 2 }, + { "begin": 6506, "end": 6518, "name": "REVERT", "source": 2 }, { - "begin": 1721, - "end": 1783, + "begin": 6458, + "end": 6520, "name": "tag", - "source": 1, - "value": "147" + "source": 2, + "value": "243" }, - { "begin": 1721, "end": 1783, "name": "JUMPDEST", "source": 1 }, - { "begin": 1669, "end": 1789, "name": "POP", "source": 1 }, + { "begin": 6458, "end": 6520, "name": "JUMPDEST", "source": 2 }, + { "begin": 6406, "end": 6526, "name": "POP", "source": 2 }, { - "begin": 1669, - "end": 1789, + "begin": 6406, + "end": 6526, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1795, - "end": 1932, + "begin": 6532, + "end": 6669, "name": "tag", - "source": 1, - "value": "73" + "source": 2, + "value": "134" }, - { "begin": 1795, "end": 1932, "name": "JUMPDEST", "source": 1 }, + { "begin": 6532, "end": 6669, "name": "JUMPDEST", "source": 2 }, { - "begin": 1840, - "end": 1845, + "begin": 6577, + "end": 6582, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1878, "end": 1884, "name": "DUP2", "source": 1 }, + { "begin": 6615, "end": 6621, "name": "DUP2", "source": 2 }, { - "begin": 1865, - "end": 1885, + "begin": 6602, + "end": 6622, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 1856, "end": 1885, "name": "SWAP1", "source": 1 }, - { "begin": 1856, "end": 1885, "name": "POP", "source": 1 }, + { "begin": 6593, "end": 6622, "name": "SWAP1", "source": 2 }, + { "begin": 6593, "end": 6622, "name": "POP", "source": 2 }, { - "begin": 1894, - "end": 1926, + "begin": 6631, + "end": 6663, "name": "PUSH [tag]", - "source": 1, - "value": "149" + "source": 2, + "value": "245" }, - { "begin": 1920, "end": 1925, "name": "DUP2", "source": 1 }, + { "begin": 6657, "end": 6662, "name": "DUP2", "source": 2 }, { - "begin": 1894, - "end": 1926, + "begin": 6631, + "end": 6663, "name": "PUSH [tag]", - "source": 1, - "value": "72" + "source": 2, + "value": "133" }, { - "begin": 1894, - "end": 1926, + "begin": 6631, + "end": 6663, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 1894, - "end": 1926, + "begin": 6631, + "end": 6663, "name": "tag", - "source": 1, - "value": "149" + "source": 2, + "value": "245" }, - { "begin": 1894, "end": 1926, "name": "JUMPDEST", "source": 1 }, - { "begin": 1795, "end": 1932, "name": "SWAP3", "source": 1 }, - { "begin": 1795, "end": 1932, "name": "SWAP2", "source": 1 }, - { "begin": 1795, "end": 1932, "name": "POP", "source": 1 }, - { "begin": 1795, "end": 1932, "name": "POP", "source": 1 }, + { "begin": 6631, "end": 6663, "name": "JUMPDEST", "source": 2 }, + { "begin": 6532, "end": 6669, "name": "SWAP3", "source": 2 }, + { "begin": 6532, "end": 6669, "name": "SWAP2", "source": 2 }, + { "begin": 6532, "end": 6669, "name": "POP", "source": 2 }, + { "begin": 6532, "end": 6669, "name": "POP", "source": 2 }, { - "begin": 1795, - "end": 1932, + "begin": 6532, + "end": 6669, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 1938, - "end": 2055, + "begin": 6675, + "end": 7836, "name": "tag", - "source": 1, - "value": "74" + "source": 2, + "value": "15" }, - { "begin": 1938, "end": 2055, "name": "JUMPDEST", "source": 1 }, + { "begin": 6675, "end": 7836, "name": "JUMPDEST", "source": 2 }, { - "begin": 2047, - "end": 2048, + "begin": 6799, + "end": 6805, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2044, "end": 2045, "name": "DUP1", "source": 1 }, - { "begin": 2037, "end": 2049, "name": "REVERT", "source": 1 }, + { "begin": 6807, "end": 6813, "name": "DUP1", "source": 2 }, { - "begin": 2061, - "end": 2178, - "name": "tag", - "source": 1, - "value": "75" + "begin": 6815, + "end": 6821, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 2061, "end": 2178, "name": "JUMPDEST", "source": 1 }, + { "begin": 6823, "end": 6829, "name": "DUP1", "source": 2 }, { - "begin": 2170, - "end": 2171, + "begin": 6872, + "end": 6875, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "80" + }, + { "begin": 6860, "end": 6869, "name": "DUP6", "source": 2 }, + { "begin": 6851, "end": 6858, "name": "DUP8", "source": 2 }, + { "begin": 6847, "end": 6870, "name": "SUB", "source": 2 }, + { "begin": 6843, "end": 6876, "name": "SLT", "source": 2 }, + { "begin": 6840, "end": 6960, "name": "ISZERO", "source": 2 }, + { + "begin": 6840, + "end": 6960, + "name": "PUSH [tag]", + "source": 2, + "value": "247" + }, + { "begin": 6840, "end": 6960, "name": "JUMPI", "source": 2 }, + { + "begin": 6879, + "end": 6958, + "name": "PUSH [tag]", + "source": 2, + "value": "248" + }, + { + "begin": 6879, + "end": 6958, + "name": "PUSH [tag]", + "source": 2, + "value": "106" }, - { "begin": 2167, "end": 2168, "name": "DUP1", "source": 1 }, - { "begin": 2160, "end": 2172, "name": "REVERT", "source": 1 }, { - "begin": 2184, - "end": 2286, + "begin": 6879, + "end": 6958, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 6879, + "end": 6958, "name": "tag", - "source": 1, - "value": "76" + "source": 2, + "value": "248" }, - { "begin": 2184, "end": 2286, "name": "JUMPDEST", "source": 1 }, + { "begin": 6879, "end": 6958, "name": "JUMPDEST", "source": 2 }, { - "begin": 2225, - "end": 2231, + "begin": 6840, + "end": 6960, + "name": "tag", + "source": 2, + "value": "247" + }, + { "begin": 6840, "end": 6960, "name": "JUMPDEST", "source": 2 }, + { + "begin": 7027, + "end": 7028, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 7016, "end": 7025, "name": "DUP6", "source": 2 }, + { "begin": 7012, "end": 7029, "name": "ADD", "source": 2 }, { - "begin": 2276, - "end": 2278, - "name": "PUSH", - "source": 1, - "value": "1F" + "begin": 6999, + "end": 7030, + "name": "CALLDATALOAD", + "source": 2 }, - { "begin": 2272, "end": 2279, "name": "NOT", "source": 1 }, { - "begin": 2267, - "end": 2269, + "begin": 7057, + "end": 7075, "name": "PUSH", - "source": 1, - "value": "1F" + "source": 2, + "value": "FFFFFFFFFFFFFFFF" + }, + { "begin": 7049, "end": 7055, "name": "DUP2", "source": 2 }, + { "begin": 7046, "end": 7076, "name": "GT", "source": 2 }, + { "begin": 7043, "end": 7160, "name": "ISZERO", "source": 2 }, + { + "begin": 7043, + "end": 7160, + "name": "PUSH [tag]", + "source": 2, + "value": "249" + }, + { "begin": 7043, "end": 7160, "name": "JUMPI", "source": 2 }, + { + "begin": 7079, + "end": 7158, + "name": "PUSH [tag]", + "source": 2, + "value": "250" + }, + { + "begin": 7079, + "end": 7158, + "name": "PUSH [tag]", + "source": 2, + "value": "107" }, - { "begin": 2260, "end": 2265, "name": "DUP4", "source": 1 }, - { "begin": 2256, "end": 2270, "name": "ADD", "source": 1 }, - { "begin": 2252, "end": 2280, "name": "AND", "source": 1 }, - { "begin": 2242, "end": 2280, "name": "SWAP1", "source": 1 }, - { "begin": 2242, "end": 2280, "name": "POP", "source": 1 }, - { "begin": 2184, "end": 2286, "name": "SWAP2", "source": 1 }, - { "begin": 2184, "end": 2286, "name": "SWAP1", "source": 1 }, - { "begin": 2184, "end": 2286, "name": "POP", "source": 1 }, { - "begin": 2184, - "end": 2286, + "begin": 7079, + "end": 7158, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 2292, - "end": 2472, + "begin": 7079, + "end": 7158, "name": "tag", - "source": 1, - "value": "77" + "source": 2, + "value": "250" }, - { "begin": 2292, "end": 2472, "name": "JUMPDEST", "source": 1 }, + { "begin": 7079, "end": 7158, "name": "JUMPDEST", "source": 2 }, { - "begin": 2340, - "end": 2417, - "name": "PUSH", - "source": 1, - "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + "begin": 7043, + "end": 7160, + "name": "tag", + "source": 2, + "value": "249" }, + { "begin": 7043, "end": 7160, "name": "JUMPDEST", "source": 2 }, { - "begin": 2337, - "end": 2338, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 7184, + "end": 7267, + "name": "PUSH [tag]", + "source": 2, + "value": "251" }, - { "begin": 2330, "end": 2418, "name": "MSTORE", "source": 1 }, + { "begin": 7259, "end": 7266, "name": "DUP8", "source": 2 }, + { "begin": 7250, "end": 7256, "name": "DUP3", "source": 2 }, + { "begin": 7239, "end": 7248, "name": "DUP9", "source": 2 }, + { "begin": 7235, "end": 7257, "name": "ADD", "source": 2 }, { - "begin": 2437, - "end": 2441, - "name": "PUSH", - "source": 1, - "value": "41" + "begin": 7184, + "end": 7267, + "name": "PUSH [tag]", + "source": 2, + "value": "127" }, { - "begin": 2434, - "end": 2435, - "name": "PUSH", - "source": 1, - "value": "4" + "begin": 7184, + "end": 7267, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 2427, "end": 2442, "name": "MSTORE", "source": 1 }, { - "begin": 2461, - "end": 2465, - "name": "PUSH", - "source": 1, - "value": "24" + "begin": 7184, + "end": 7267, + "name": "tag", + "source": 2, + "value": "251" }, + { "begin": 7184, "end": 7267, "name": "JUMPDEST", "source": 2 }, + { "begin": 7174, "end": 7267, "name": "SWAP5", "source": 2 }, + { "begin": 7174, "end": 7267, "name": "POP", "source": 2 }, + { "begin": 6970, "end": 7277, "name": "POP", "source": 2 }, { - "begin": 2458, - "end": 2459, + "begin": 7316, + "end": 7318, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "20" + }, + { + "begin": 7342, + "end": 7395, + "name": "PUSH [tag]", + "source": 2, + "value": "252" + }, + { "begin": 7387, "end": 7394, "name": "DUP8", "source": 2 }, + { "begin": 7378, "end": 7384, "name": "DUP3", "source": 2 }, + { "begin": 7367, "end": 7376, "name": "DUP9", "source": 2 }, + { "begin": 7363, "end": 7385, "name": "ADD", "source": 2 }, + { + "begin": 7342, + "end": 7395, + "name": "PUSH [tag]", + "source": 2, + "value": "131" + }, + { + "begin": 7342, + "end": 7395, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 2451, "end": 2466, "name": "REVERT", "source": 1 }, { - "begin": 2478, - "end": 2759, + "begin": 7342, + "end": 7395, "name": "tag", - "source": 1, - "value": "78" + "source": 2, + "value": "252" }, - { "begin": 2478, "end": 2759, "name": "JUMPDEST", "source": 1 }, + { "begin": 7342, "end": 7395, "name": "JUMPDEST", "source": 2 }, + { "begin": 7332, "end": 7395, "name": "SWAP4", "source": 2 }, + { "begin": 7332, "end": 7395, "name": "POP", "source": 2 }, + { "begin": 7287, "end": 7405, "name": "POP", "source": 2 }, { - "begin": 2561, - "end": 2588, + "begin": 7444, + "end": 7446, + "name": "PUSH", + "source": 2, + "value": "40" + }, + { + "begin": 7470, + "end": 7522, "name": "PUSH [tag]", - "source": 1, - "value": "155" + "source": 2, + "value": "253" }, - { "begin": 2583, "end": 2587, "name": "DUP3", "source": 1 }, + { "begin": 7514, "end": 7521, "name": "DUP8", "source": 2 }, + { "begin": 7505, "end": 7511, "name": "DUP3", "source": 2 }, + { "begin": 7494, "end": 7503, "name": "DUP9", "source": 2 }, + { "begin": 7490, "end": 7512, "name": "ADD", "source": 2 }, { - "begin": 2561, - "end": 2588, + "begin": 7470, + "end": 7522, "name": "PUSH [tag]", - "source": 1, - "value": "76" + "source": 2, + "value": "134" }, { - "begin": 2561, - "end": 2588, + "begin": 7470, + "end": 7522, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 2561, - "end": 2588, + "begin": 7470, + "end": 7522, "name": "tag", - "source": 1, - "value": "155" + "source": 2, + "value": "253" + }, + { "begin": 7470, "end": 7522, "name": "JUMPDEST", "source": 2 }, + { "begin": 7460, "end": 7522, "name": "SWAP3", "source": 2 }, + { "begin": 7460, "end": 7522, "name": "POP", "source": 2 }, + { "begin": 7415, "end": 7532, "name": "POP", "source": 2 }, + { + "begin": 7599, + "end": 7601, + "name": "PUSH", + "source": 2, + "value": "60" + }, + { "begin": 7588, "end": 7597, "name": "DUP6", "source": 2 }, + { "begin": 7584, "end": 7602, "name": "ADD", "source": 2 }, + { + "begin": 7571, + "end": 7603, + "name": "CALLDATALOAD", + "source": 2 }, - { "begin": 2561, "end": 2588, "name": "JUMPDEST", "source": 1 }, - { "begin": 2553, "end": 2559, "name": "DUP2", "source": 1 }, - { "begin": 2549, "end": 2589, "name": "ADD", "source": 1 }, - { "begin": 2691, "end": 2697, "name": "DUP2", "source": 1 }, - { "begin": 2679, "end": 2689, "name": "DUP2", "source": 1 }, - { "begin": 2676, "end": 2698, "name": "LT", "source": 1 }, { - "begin": 2655, - "end": 2673, + "begin": 7630, + "end": 7648, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 2643, "end": 2653, "name": "DUP3", "source": 1 }, - { "begin": 2640, "end": 2674, "name": "GT", "source": 1 }, - { "begin": 2637, "end": 2699, "name": "OR", "source": 1 }, - { "begin": 2634, "end": 2722, "name": "ISZERO", "source": 1 }, + { "begin": 7622, "end": 7628, "name": "DUP2", "source": 2 }, + { "begin": 7619, "end": 7649, "name": "GT", "source": 2 }, + { "begin": 7616, "end": 7733, "name": "ISZERO", "source": 2 }, { - "begin": 2634, - "end": 2722, + "begin": 7616, + "end": 7733, "name": "PUSH [tag]", - "source": 1, - "value": "156" + "source": 2, + "value": "254" }, - { "begin": 2634, "end": 2722, "name": "JUMPI", "source": 1 }, + { "begin": 7616, "end": 7733, "name": "JUMPI", "source": 2 }, { - "begin": 2702, - "end": 2720, + "begin": 7652, + "end": 7731, "name": "PUSH [tag]", - "source": 1, - "value": "157" + "source": 2, + "value": "255" }, { - "begin": 2702, - "end": 2720, + "begin": 7652, + "end": 7731, "name": "PUSH [tag]", - "source": 1, - "value": "77" + "source": 2, + "value": "107" }, { - "begin": 2702, - "end": 2720, + "begin": 7652, + "end": 7731, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 2702, - "end": 2720, + "begin": 7652, + "end": 7731, "name": "tag", - "source": 1, - "value": "157" + "source": 2, + "value": "255" }, - { "begin": 2702, "end": 2720, "name": "JUMPDEST", "source": 1 }, + { "begin": 7652, "end": 7731, "name": "JUMPDEST", "source": 2 }, { - "begin": 2634, - "end": 2722, + "begin": 7616, + "end": 7733, "name": "tag", - "source": 1, - "value": "156" + "source": 2, + "value": "254" }, - { "begin": 2634, "end": 2722, "name": "JUMPDEST", "source": 1 }, - { "begin": 2742, "end": 2752, "name": "DUP1", "source": 1 }, + { "begin": 7616, "end": 7733, "name": "JUMPDEST", "source": 2 }, { - "begin": 2738, - "end": 2740, - "name": "PUSH", - "source": 1, - "value": "40" + "begin": 7757, + "end": 7819, + "name": "PUSH [tag]", + "source": 2, + "value": "256" + }, + { "begin": 7811, "end": 7818, "name": "DUP8", "source": 2 }, + { "begin": 7802, "end": 7808, "name": "DUP3", "source": 2 }, + { "begin": 7791, "end": 7800, "name": "DUP9", "source": 2 }, + { "begin": 7787, "end": 7809, "name": "ADD", "source": 2 }, + { + "begin": 7757, + "end": 7819, + "name": "PUSH [tag]", + "source": 2, + "value": "124" + }, + { + "begin": 7757, + "end": 7819, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 2731, "end": 2753, "name": "MSTORE", "source": 1 }, - { "begin": 2521, "end": 2759, "name": "POP", "source": 1 }, - { "begin": 2478, "end": 2759, "name": "POP", "source": 1 }, - { "begin": 2478, "end": 2759, "name": "POP", "source": 1 }, { - "begin": 2478, - "end": 2759, + "begin": 7757, + "end": 7819, + "name": "tag", + "source": 2, + "value": "256" + }, + { "begin": 7757, "end": 7819, "name": "JUMPDEST", "source": 2 }, + { "begin": 7747, "end": 7819, "name": "SWAP2", "source": 2 }, + { "begin": 7747, "end": 7819, "name": "POP", "source": 2 }, + { "begin": 7542, "end": 7829, "name": "POP", "source": 2 }, + { "begin": 6675, "end": 7836, "name": "SWAP3", "source": 2 }, + { "begin": 6675, "end": 7836, "name": "SWAP6", "source": 2 }, + { "begin": 6675, "end": 7836, "name": "SWAP2", "source": 2 }, + { "begin": 6675, "end": 7836, "name": "SWAP5", "source": 2 }, + { "begin": 6675, "end": 7836, "name": "POP", "source": 2 }, + { "begin": 6675, "end": 7836, "name": "SWAP3", "source": 2 }, + { "begin": 6675, "end": 7836, "name": "POP", "source": 2 }, + { + "begin": 6675, + "end": 7836, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 2765, - "end": 2894, + "begin": 7842, + "end": 9223, "name": "tag", - "source": 1, - "value": "79" + "source": 2, + "value": "19" }, - { "begin": 2765, "end": 2894, "name": "JUMPDEST", "source": 1 }, + { "begin": 7842, "end": 9223, "name": "JUMPDEST", "source": 2 }, { - "begin": 2799, - "end": 2805, + "begin": 7996, + "end": 8002, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 8004, "end": 8010, "name": "DUP1", "source": 2 }, { - "begin": 2826, - "end": 2846, - "name": "PUSH [tag]", - "source": 1, - "value": "159" - }, - { - "begin": 2826, - "end": 2846, - "name": "PUSH [tag]", - "source": 1, - "value": "58" + "begin": 8012, + "end": 8018, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 8020, "end": 8026, "name": "DUP1", "source": 2 }, { - "begin": 2826, - "end": 2846, - "name": "JUMP", - "source": 1, - "value": "[in]" + "begin": 8069, + "end": 8072, + "name": "PUSH", + "source": 2, + "value": "80" }, + { "begin": 8057, "end": 8066, "name": "DUP6", "source": 2 }, + { "begin": 8048, "end": 8055, "name": "DUP8", "source": 2 }, + { "begin": 8044, "end": 8067, "name": "SUB", "source": 2 }, + { "begin": 8040, "end": 8073, "name": "SLT", "source": 2 }, + { "begin": 8037, "end": 8157, "name": "ISZERO", "source": 2 }, { - "begin": 2826, - "end": 2846, - "name": "tag", - "source": 1, - "value": "159" + "begin": 8037, + "end": 8157, + "name": "PUSH [tag]", + "source": 2, + "value": "258" }, - { "begin": 2826, "end": 2846, "name": "JUMPDEST", "source": 1 }, - { "begin": 2816, "end": 2846, "name": "SWAP1", "source": 1 }, - { "begin": 2816, "end": 2846, "name": "POP", "source": 1 }, + { "begin": 8037, "end": 8157, "name": "JUMPI", "source": 2 }, { - "begin": 2855, - "end": 2888, + "begin": 8076, + "end": 8155, "name": "PUSH [tag]", - "source": 1, - "value": "160" + "source": 2, + "value": "259" }, - { "begin": 2883, "end": 2887, "name": "DUP3", "source": 1 }, - { "begin": 2875, "end": 2881, "name": "DUP3", "source": 1 }, { - "begin": 2855, - "end": 2888, + "begin": 8076, + "end": 8155, "name": "PUSH [tag]", - "source": 1, - "value": "78" + "source": 2, + "value": "106" }, { - "begin": 2855, - "end": 2888, + "begin": 8076, + "end": 8155, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 2855, - "end": 2888, + "begin": 8076, + "end": 8155, "name": "tag", - "source": 1, - "value": "160" - }, - { "begin": 2855, "end": 2888, "name": "JUMPDEST", "source": 1 }, - { "begin": 2765, "end": 2894, "name": "SWAP2", "source": 1 }, - { "begin": 2765, "end": 2894, "name": "SWAP1", "source": 1 }, - { "begin": 2765, "end": 2894, "name": "POP", "source": 1 }, - { - "begin": 2765, - "end": 2894, - "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "259" }, + { "begin": 8076, "end": 8155, "name": "JUMPDEST", "source": 2 }, { - "begin": 2900, - "end": 3207, + "begin": 8037, + "end": 8157, "name": "tag", - "source": 1, - "value": "80" + "source": 2, + "value": "258" }, - { "begin": 2900, "end": 3207, "name": "JUMPDEST", "source": 1 }, + { "begin": 8037, "end": 8157, "name": "JUMPDEST", "source": 2 }, { - "begin": 2961, - "end": 2965, + "begin": 8224, + "end": 8225, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 8213, "end": 8222, "name": "DUP6", "source": 2 }, + { "begin": 8209, "end": 8226, "name": "ADD", "source": 2 }, + { + "begin": 8196, + "end": 8227, + "name": "CALLDATALOAD", + "source": 2 + }, { - "begin": 3051, - "end": 3069, + "begin": 8254, + "end": 8272, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 3043, "end": 3049, "name": "DUP3", "source": 1 }, - { "begin": 3040, "end": 3070, "name": "GT", "source": 1 }, - { "begin": 3037, "end": 3093, "name": "ISZERO", "source": 1 }, + { "begin": 8246, "end": 8252, "name": "DUP2", "source": 2 }, + { "begin": 8243, "end": 8273, "name": "GT", "source": 2 }, + { "begin": 8240, "end": 8357, "name": "ISZERO", "source": 2 }, { - "begin": 3037, - "end": 3093, + "begin": 8240, + "end": 8357, "name": "PUSH [tag]", - "source": 1, - "value": "162" + "source": 2, + "value": "260" }, - { "begin": 3037, "end": 3093, "name": "JUMPI", "source": 1 }, + { "begin": 8240, "end": 8357, "name": "JUMPI", "source": 2 }, { - "begin": 3073, - "end": 3091, + "begin": 8276, + "end": 8355, "name": "PUSH [tag]", - "source": 1, - "value": "163" + "source": 2, + "value": "261" }, { - "begin": 3073, - "end": 3091, + "begin": 8276, + "end": 8355, "name": "PUSH [tag]", - "source": 1, - "value": "77" + "source": 2, + "value": "107" }, { - "begin": 3073, - "end": 3091, + "begin": 8276, + "end": 8355, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 3073, - "end": 3091, + "begin": 8276, + "end": 8355, "name": "tag", - "source": 1, - "value": "163" + "source": 2, + "value": "261" }, - { "begin": 3073, "end": 3091, "name": "JUMPDEST", "source": 1 }, + { "begin": 8276, "end": 8355, "name": "JUMPDEST", "source": 2 }, { - "begin": 3037, - "end": 3093, + "begin": 8240, + "end": 8357, "name": "tag", - "source": 1, - "value": "162" + "source": 2, + "value": "260" }, - { "begin": 3037, "end": 3093, "name": "JUMPDEST", "source": 1 }, + { "begin": 8240, "end": 8357, "name": "JUMPDEST", "source": 2 }, { - "begin": 3111, - "end": 3140, + "begin": 8381, + "end": 8464, "name": "PUSH [tag]", - "source": 1, - "value": "164" + "source": 2, + "value": "262" }, - { "begin": 3133, "end": 3139, "name": "DUP3", "source": 1 }, + { "begin": 8456, "end": 8463, "name": "DUP8", "source": 2 }, + { "begin": 8447, "end": 8453, "name": "DUP3", "source": 2 }, + { "begin": 8436, "end": 8445, "name": "DUP9", "source": 2 }, + { "begin": 8432, "end": 8454, "name": "ADD", "source": 2 }, { - "begin": 3111, - "end": 3140, + "begin": 8381, + "end": 8464, "name": "PUSH [tag]", - "source": 1, - "value": "76" + "source": 2, + "value": "127" }, { - "begin": 3111, - "end": 3140, + "begin": 8381, + "end": 8464, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 3111, - "end": 3140, + "begin": 8381, + "end": 8464, "name": "tag", - "source": 1, - "value": "164" + "source": 2, + "value": "262" }, - { "begin": 3111, "end": 3140, "name": "JUMPDEST", "source": 1 }, - { "begin": 3103, "end": 3140, "name": "SWAP1", "source": 1 }, - { "begin": 3103, "end": 3140, "name": "POP", "source": 1 }, + { "begin": 8381, "end": 8464, "name": "JUMPDEST", "source": 2 }, + { "begin": 8371, "end": 8464, "name": "SWAP5", "source": 2 }, + { "begin": 8371, "end": 8464, "name": "POP", "source": 2 }, + { "begin": 8167, "end": 8474, "name": "POP", "source": 2 }, { - "begin": 3195, - "end": 3199, + "begin": 8541, + "end": 8543, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 3189, "end": 3193, "name": "DUP2", "source": 1 }, - { "begin": 3185, "end": 3200, "name": "ADD", "source": 1 }, - { "begin": 3177, "end": 3200, "name": "SWAP1", "source": 1 }, - { "begin": 3177, "end": 3200, "name": "POP", "source": 1 }, - { "begin": 2900, "end": 3207, "name": "SWAP2", "source": 1 }, - { "begin": 2900, "end": 3207, "name": "SWAP1", "source": 1 }, - { "begin": 2900, "end": 3207, "name": "POP", "source": 1 }, + { "begin": 8530, "end": 8539, "name": "DUP6", "source": 2 }, + { "begin": 8526, "end": 8544, "name": "ADD", "source": 2 }, { - "begin": 2900, - "end": 3207, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 8513, + "end": 8545, + "name": "CALLDATALOAD", + "source": 2 }, { - "begin": 3213, - "end": 3367, - "name": "tag", - "source": 1, - "value": "81" + "begin": 8572, + "end": 8590, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 3213, "end": 3367, "name": "JUMPDEST", "source": 1 }, - { "begin": 3297, "end": 3303, "name": "DUP3", "source": 1 }, - { "begin": 3292, "end": 3295, "name": "DUP2", "source": 1 }, - { "begin": 3287, "end": 3290, "name": "DUP4", "source": 1 }, + { "begin": 8564, "end": 8570, "name": "DUP2", "source": 2 }, + { "begin": 8561, "end": 8591, "name": "GT", "source": 2 }, + { "begin": 8558, "end": 8675, "name": "ISZERO", "source": 2 }, { - "begin": 3274, - "end": 3304, - "name": "CALLDATACOPY", - "source": 1 + "begin": 8558, + "end": 8675, + "name": "PUSH [tag]", + "source": 2, + "value": "263" }, + { "begin": 8558, "end": 8675, "name": "JUMPI", "source": 2 }, { - "begin": 3359, - "end": 3360, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 8594, + "end": 8673, + "name": "PUSH [tag]", + "source": 2, + "value": "264" }, - { "begin": 3350, "end": 3356, "name": "DUP4", "source": 1 }, - { "begin": 3345, "end": 3348, "name": "DUP4", "source": 1 }, - { "begin": 3341, "end": 3357, "name": "ADD", "source": 1 }, - { "begin": 3334, "end": 3361, "name": "MSTORE", "source": 1 }, - { "begin": 3213, "end": 3367, "name": "POP", "source": 1 }, - { "begin": 3213, "end": 3367, "name": "POP", "source": 1 }, - { "begin": 3213, "end": 3367, "name": "POP", "source": 1 }, { - "begin": 3213, - "end": 3367, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 8594, + "end": 8673, + "name": "PUSH [tag]", + "source": 2, + "value": "107" }, { - "begin": 3373, - "end": 3783, - "name": "tag", - "source": 1, - "value": "82" + "begin": 8594, + "end": 8673, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 3373, "end": 3783, "name": "JUMPDEST", "source": 1 }, { - "begin": 3450, - "end": 3455, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 8594, + "end": 8673, + "name": "tag", + "source": 2, + "value": "264" }, + { "begin": 8594, "end": 8673, "name": "JUMPDEST", "source": 2 }, { - "begin": 3475, - "end": 3540, - "name": "PUSH [tag]", - "source": 1, - "value": "167" + "begin": 8558, + "end": 8675, + "name": "tag", + "source": 2, + "value": "263" }, + { "begin": 8558, "end": 8675, "name": "JUMPDEST", "source": 2 }, { - "begin": 3491, - "end": 3539, + "begin": 8699, + "end": 8782, "name": "PUSH [tag]", - "source": 1, - "value": "168" + "source": 2, + "value": "265" }, - { "begin": 3532, "end": 3538, "name": "DUP5", "source": 1 }, + { "begin": 8774, "end": 8781, "name": "DUP8", "source": 2 }, + { "begin": 8765, "end": 8771, "name": "DUP3", "source": 2 }, + { "begin": 8754, "end": 8763, "name": "DUP9", "source": 2 }, + { "begin": 8750, "end": 8772, "name": "ADD", "source": 2 }, { - "begin": 3491, - "end": 3539, + "begin": 8699, + "end": 8782, "name": "PUSH [tag]", - "source": 1, - "value": "80" + "source": 2, + "value": "127" }, { - "begin": 3491, - "end": 3539, + "begin": 8699, + "end": 8782, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 3491, - "end": 3539, + "begin": 8699, + "end": 8782, "name": "tag", - "source": 1, - "value": "168" + "source": 2, + "value": "265" + }, + { "begin": 8699, "end": 8782, "name": "JUMPDEST", "source": 2 }, + { "begin": 8689, "end": 8782, "name": "SWAP4", "source": 2 }, + { "begin": 8689, "end": 8782, "name": "POP", "source": 2 }, + { "begin": 8484, "end": 8792, "name": "POP", "source": 2 }, + { + "begin": 8831, + "end": 8833, + "name": "PUSH", + "source": 2, + "value": "40" }, - { "begin": 3491, "end": 3539, "name": "JUMPDEST", "source": 1 }, { - "begin": 3475, - "end": 3540, + "begin": 8857, + "end": 8909, "name": "PUSH [tag]", - "source": 1, - "value": "79" + "source": 2, + "value": "266" + }, + { "begin": 8901, "end": 8908, "name": "DUP8", "source": 2 }, + { "begin": 8892, "end": 8898, "name": "DUP3", "source": 2 }, + { "begin": 8881, "end": 8890, "name": "DUP9", "source": 2 }, + { "begin": 8877, "end": 8899, "name": "ADD", "source": 2 }, + { + "begin": 8857, + "end": 8909, + "name": "PUSH [tag]", + "source": 2, + "value": "134" }, { - "begin": 3475, - "end": 3540, + "begin": 8857, + "end": 8909, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 3475, - "end": 3540, + "begin": 8857, + "end": 8909, "name": "tag", - "source": 1, - "value": "167" + "source": 2, + "value": "266" }, - { "begin": 3475, "end": 3540, "name": "JUMPDEST", "source": 1 }, - { "begin": 3466, "end": 3540, "name": "SWAP1", "source": 1 }, - { "begin": 3466, "end": 3540, "name": "POP", "source": 1 }, - { "begin": 3563, "end": 3569, "name": "DUP3", "source": 1 }, - { "begin": 3556, "end": 3561, "name": "DUP2", "source": 1 }, - { "begin": 3549, "end": 3570, "name": "MSTORE", "source": 1 }, + { "begin": 8857, "end": 8909, "name": "JUMPDEST", "source": 2 }, + { "begin": 8847, "end": 8909, "name": "SWAP3", "source": 2 }, + { "begin": 8847, "end": 8909, "name": "POP", "source": 2 }, + { "begin": 8802, "end": 8919, "name": "POP", "source": 2 }, { - "begin": 3601, - "end": 3605, + "begin": 8986, + "end": 8988, "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "60" + }, + { "begin": 8975, "end": 8984, "name": "DUP6", "source": 2 }, + { "begin": 8971, "end": 8989, "name": "ADD", "source": 2 }, + { + "begin": 8958, + "end": 8990, + "name": "CALLDATALOAD", + "source": 2 + }, + { + "begin": 9017, + "end": 9035, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 3594, "end": 3599, "name": "DUP2", "source": 1 }, - { "begin": 3590, "end": 3606, "name": "ADD", "source": 1 }, - { "begin": 3639, "end": 3642, "name": "DUP5", "source": 1 }, - { "begin": 3630, "end": 3636, "name": "DUP5", "source": 1 }, - { "begin": 3625, "end": 3628, "name": "DUP5", "source": 1 }, - { "begin": 3621, "end": 3637, "name": "ADD", "source": 1 }, - { "begin": 3618, "end": 3643, "name": "GT", "source": 1 }, - { "begin": 3615, "end": 3727, "name": "ISZERO", "source": 1 }, + { "begin": 9009, "end": 9015, "name": "DUP2", "source": 2 }, + { "begin": 9006, "end": 9036, "name": "GT", "source": 2 }, + { "begin": 9003, "end": 9120, "name": "ISZERO", "source": 2 }, { - "begin": 3615, - "end": 3727, + "begin": 9003, + "end": 9120, "name": "PUSH [tag]", - "source": 1, - "value": "169" + "source": 2, + "value": "267" }, - { "begin": 3615, "end": 3727, "name": "JUMPI", "source": 1 }, + { "begin": 9003, "end": 9120, "name": "JUMPI", "source": 2 }, { - "begin": 3646, - "end": 3725, + "begin": 9039, + "end": 9118, "name": "PUSH [tag]", - "source": 1, - "value": "170" + "source": 2, + "value": "268" }, { - "begin": 3646, - "end": 3725, + "begin": 9039, + "end": 9118, "name": "PUSH [tag]", - "source": 1, - "value": "75" + "source": 2, + "value": "107" }, { - "begin": 3646, - "end": 3725, + "begin": 9039, + "end": 9118, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 3646, - "end": 3725, + "begin": 9039, + "end": 9118, "name": "tag", - "source": 1, - "value": "170" + "source": 2, + "value": "268" }, - { "begin": 3646, "end": 3725, "name": "JUMPDEST", "source": 1 }, + { "begin": 9039, "end": 9118, "name": "JUMPDEST", "source": 2 }, { - "begin": 3615, - "end": 3727, + "begin": 9003, + "end": 9120, "name": "tag", - "source": 1, - "value": "169" + "source": 2, + "value": "267" }, - { "begin": 3615, "end": 3727, "name": "JUMPDEST", "source": 1 }, + { "begin": 9003, "end": 9120, "name": "JUMPDEST", "source": 2 }, { - "begin": 3736, - "end": 3777, + "begin": 9144, + "end": 9206, "name": "PUSH [tag]", - "source": 1, - "value": "171" + "source": 2, + "value": "269" }, - { "begin": 3770, "end": 3776, "name": "DUP5", "source": 1 }, - { "begin": 3765, "end": 3768, "name": "DUP3", "source": 1 }, - { "begin": 3760, "end": 3763, "name": "DUP6", "source": 1 }, + { "begin": 9198, "end": 9205, "name": "DUP8", "source": 2 }, + { "begin": 9189, "end": 9195, "name": "DUP3", "source": 2 }, + { "begin": 9178, "end": 9187, "name": "DUP9", "source": 2 }, + { "begin": 9174, "end": 9196, "name": "ADD", "source": 2 }, { - "begin": 3736, - "end": 3777, + "begin": 9144, + "end": 9206, "name": "PUSH [tag]", - "source": 1, - "value": "81" + "source": 2, + "value": "124" }, { - "begin": 3736, - "end": 3777, + "begin": 9144, + "end": 9206, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 3736, - "end": 3777, + "begin": 9144, + "end": 9206, "name": "tag", - "source": 1, - "value": "171" - }, - { "begin": 3736, "end": 3777, "name": "JUMPDEST", "source": 1 }, - { "begin": 3456, "end": 3783, "name": "POP", "source": 1 }, - { "begin": 3373, "end": 3783, "name": "SWAP4", "source": 1 }, - { "begin": 3373, "end": 3783, "name": "SWAP3", "source": 1 }, - { "begin": 3373, "end": 3783, "name": "POP", "source": 1 }, - { "begin": 3373, "end": 3783, "name": "POP", "source": 1 }, - { "begin": 3373, "end": 3783, "name": "POP", "source": 1 }, - { - "begin": 3373, - "end": 3783, + "source": 2, + "value": "269" + }, + { "begin": 9144, "end": 9206, "name": "JUMPDEST", "source": 2 }, + { "begin": 9134, "end": 9206, "name": "SWAP2", "source": 2 }, + { "begin": 9134, "end": 9206, "name": "POP", "source": 2 }, + { "begin": 8929, "end": 9216, "name": "POP", "source": 2 }, + { "begin": 7842, "end": 9223, "name": "SWAP3", "source": 2 }, + { "begin": 7842, "end": 9223, "name": "SWAP6", "source": 2 }, + { "begin": 7842, "end": 9223, "name": "SWAP2", "source": 2 }, + { "begin": 7842, "end": 9223, "name": "SWAP5", "source": 2 }, + { "begin": 7842, "end": 9223, "name": "POP", "source": 2 }, + { "begin": 7842, "end": 9223, "name": "SWAP3", "source": 2 }, + { "begin": 7842, "end": 9223, "name": "POP", "source": 2 }, + { + "begin": 7842, + "end": 9223, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 3802, - "end": 4140, + "begin": 9229, + "end": 9318, "name": "tag", - "source": 1, - "value": "83" + "source": 2, + "value": "135" }, - { "begin": 3802, "end": 4140, "name": "JUMPDEST", "source": 1 }, + { "begin": 9229, "end": 9318, "name": "JUMPDEST", "source": 2 }, { - "begin": 3857, - "end": 3862, + "begin": 9265, + "end": 9272, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3906, "end": 3909, "name": "DUP3", "source": 1 }, { - "begin": 3899, - "end": 3903, + "begin": 9305, + "end": 9311, "name": "PUSH", - "source": 1, - "value": "1F" + "source": 2, + "value": "FFFF" }, - { "begin": 3891, "end": 3897, "name": "DUP4", "source": 1 }, - { "begin": 3887, "end": 3904, "name": "ADD", "source": 1 }, - { "begin": 3883, "end": 3910, "name": "SLT", "source": 1 }, + { "begin": 9298, "end": 9303, "name": "DUP3", "source": 2 }, + { "begin": 9294, "end": 9312, "name": "AND", "source": 2 }, + { "begin": 9283, "end": 9312, "name": "SWAP1", "source": 2 }, + { "begin": 9283, "end": 9312, "name": "POP", "source": 2 }, + { "begin": 9229, "end": 9318, "name": "SWAP2", "source": 2 }, + { "begin": 9229, "end": 9318, "name": "SWAP1", "source": 2 }, + { "begin": 9229, "end": 9318, "name": "POP", "source": 2 }, { - "begin": 3873, - "end": 3995, - "name": "PUSH [tag]", - "source": 1, - "value": "173" + "begin": 9229, + "end": 9318, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 9324, + "end": 9444, + "name": "tag", + "source": 2, + "value": "136" }, - { "begin": 3873, "end": 3995, "name": "JUMPI", "source": 1 }, + { "begin": 9324, "end": 9444, "name": "JUMPDEST", "source": 2 }, { - "begin": 3914, - "end": 3993, + "begin": 9396, + "end": 9419, "name": "PUSH [tag]", - "source": 1, - "value": "174" + "source": 2, + "value": "272" }, + { "begin": 9413, "end": 9418, "name": "DUP2", "source": 2 }, { - "begin": 3914, - "end": 3993, + "begin": 9396, + "end": 9419, "name": "PUSH [tag]", - "source": 1, - "value": "74" + "source": 2, + "value": "135" }, { - "begin": 3914, - "end": 3993, + "begin": 9396, + "end": 9419, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 3914, - "end": 3993, + "begin": 9396, + "end": 9419, "name": "tag", - "source": 1, - "value": "174" + "source": 2, + "value": "272" + }, + { "begin": 9396, "end": 9419, "name": "JUMPDEST", "source": 2 }, + { "begin": 9389, "end": 9394, "name": "DUP2", "source": 2 }, + { "begin": 9386, "end": 9420, "name": "EQ", "source": 2 }, + { + "begin": 9376, + "end": 9438, + "name": "PUSH [tag]", + "source": 2, + "value": "273" }, - { "begin": 3914, "end": 3993, "name": "JUMPDEST", "source": 1 }, + { "begin": 9376, "end": 9438, "name": "JUMPI", "source": 2 }, { - "begin": 3873, - "end": 3995, + "begin": 9434, + "end": 9435, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 9431, "end": 9432, "name": "DUP1", "source": 2 }, + { "begin": 9424, "end": 9436, "name": "REVERT", "source": 2 }, + { + "begin": 9376, + "end": 9438, "name": "tag", - "source": 1, - "value": "173" + "source": 2, + "value": "273" }, - { "begin": 3873, "end": 3995, "name": "JUMPDEST", "source": 1 }, - { "begin": 4031, "end": 4037, "name": "DUP2", "source": 1 }, + { "begin": 9376, "end": 9438, "name": "JUMPDEST", "source": 2 }, + { "begin": 9324, "end": 9444, "name": "POP", "source": 2 }, { - "begin": 4018, - "end": 4038, - "name": "CALLDATALOAD", - "source": 1 + "begin": 9324, + "end": 9444, + "name": "JUMP", + "source": 2, + "value": "[out]" }, { - "begin": 4056, - "end": 4134, - "name": "PUSH [tag]", - "source": 1, - "value": "175" + "begin": 9450, + "end": 9587, + "name": "tag", + "source": 2, + "value": "137" }, - { "begin": 4130, "end": 4133, "name": "DUP5", "source": 1 }, - { "begin": 4122, "end": 4128, "name": "DUP3", "source": 1 }, + { "begin": 9450, "end": 9587, "name": "JUMPDEST", "source": 2 }, { - "begin": 4115, - "end": 4119, + "begin": 9495, + "end": 9500, "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "0" + }, + { "begin": 9533, "end": 9539, "name": "DUP2", "source": 2 }, + { + "begin": 9520, + "end": 9540, + "name": "CALLDATALOAD", + "source": 2 }, - { "begin": 4107, "end": 4113, "name": "DUP7", "source": 1 }, - { "begin": 4103, "end": 4120, "name": "ADD", "source": 1 }, + { "begin": 9511, "end": 9540, "name": "SWAP1", "source": 2 }, + { "begin": 9511, "end": 9540, "name": "POP", "source": 2 }, { - "begin": 4056, - "end": 4134, + "begin": 9549, + "end": 9581, "name": "PUSH [tag]", - "source": 1, - "value": "82" + "source": 2, + "value": "275" + }, + { "begin": 9575, "end": 9580, "name": "DUP2", "source": 2 }, + { + "begin": 9549, + "end": 9581, + "name": "PUSH [tag]", + "source": 2, + "value": "136" }, { - "begin": 4056, - "end": 4134, + "begin": 9549, + "end": 9581, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 4056, - "end": 4134, + "begin": 9549, + "end": 9581, "name": "tag", - "source": 1, - "value": "175" + "source": 2, + "value": "275" }, - { "begin": 4056, "end": 4134, "name": "JUMPDEST", "source": 1 }, - { "begin": 4047, "end": 4134, "name": "SWAP2", "source": 1 }, - { "begin": 4047, "end": 4134, "name": "POP", "source": 1 }, - { "begin": 3863, "end": 4140, "name": "POP", "source": 1 }, - { "begin": 3802, "end": 4140, "name": "SWAP3", "source": 1 }, - { "begin": 3802, "end": 4140, "name": "SWAP2", "source": 1 }, - { "begin": 3802, "end": 4140, "name": "POP", "source": 1 }, - { "begin": 3802, "end": 4140, "name": "POP", "source": 1 }, + { "begin": 9549, "end": 9581, "name": "JUMPDEST", "source": 2 }, + { "begin": 9450, "end": 9587, "name": "SWAP3", "source": 2 }, + { "begin": 9450, "end": 9587, "name": "SWAP2", "source": 2 }, + { "begin": 9450, "end": 9587, "name": "POP", "source": 2 }, + { "begin": 9450, "end": 9587, "name": "POP", "source": 2 }, { - "begin": 3802, - "end": 4140, + "begin": 9450, + "end": 9587, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 4146, - "end": 5227, + "begin": 9593, + "end": 10674, "name": "tag", - "source": 1, - "value": "10" + "source": 2, + "value": "23" }, - { "begin": 4146, "end": 5227, "name": "JUMPDEST", "source": 1 }, + { "begin": 9593, "end": 10674, "name": "JUMPDEST", "source": 2 }, { - "begin": 4246, - "end": 4252, + "begin": 9693, + "end": 9699, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 4254, "end": 4260, "name": "DUP1", "source": 1 }, + { "begin": 9701, "end": 9707, "name": "DUP1", "source": 2 }, { - "begin": 4262, - "end": 4268, + "begin": 9709, + "end": 9715, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 4270, "end": 4276, "name": "DUP1", "source": 1 }, + { "begin": 9717, "end": 9723, "name": "DUP1", "source": 2 }, { - "begin": 4278, - "end": 4284, + "begin": 9725, + "end": 9731, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 4327, - "end": 4330, + "begin": 9774, + "end": 9777, "name": "PUSH", - "source": 1, + "source": 2, "value": "A0" }, - { "begin": 4315, "end": 4324, "name": "DUP7", "source": 1 }, - { "begin": 4306, "end": 4313, "name": "DUP9", "source": 1 }, - { "begin": 4302, "end": 4325, "name": "SUB", "source": 1 }, - { "begin": 4298, "end": 4331, "name": "SLT", "source": 1 }, - { "begin": 4295, "end": 4415, "name": "ISZERO", "source": 1 }, + { "begin": 9762, "end": 9771, "name": "DUP7", "source": 2 }, + { "begin": 9753, "end": 9760, "name": "DUP9", "source": 2 }, + { "begin": 9749, "end": 9772, "name": "SUB", "source": 2 }, + { "begin": 9745, "end": 9778, "name": "SLT", "source": 2 }, + { "begin": 9742, "end": 9862, "name": "ISZERO", "source": 2 }, { - "begin": 4295, - "end": 4415, + "begin": 9742, + "end": 9862, "name": "PUSH [tag]", - "source": 1, - "value": "177" + "source": 2, + "value": "277" }, - { "begin": 4295, "end": 4415, "name": "JUMPI", "source": 1 }, + { "begin": 9742, "end": 9862, "name": "JUMPI", "source": 2 }, { - "begin": 4334, - "end": 4413, + "begin": 9781, + "end": 9860, "name": "PUSH [tag]", - "source": 1, - "value": "178" + "source": 2, + "value": "278" }, { - "begin": 4334, - "end": 4413, + "begin": 9781, + "end": 9860, "name": "PUSH [tag]", - "source": 1, - "value": "59" + "source": 2, + "value": "106" }, { - "begin": 4334, - "end": 4413, + "begin": 9781, + "end": 9860, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 4334, - "end": 4413, + "begin": 9781, + "end": 9860, "name": "tag", - "source": 1, - "value": "178" + "source": 2, + "value": "278" }, - { "begin": 4334, "end": 4413, "name": "JUMPDEST", "source": 1 }, + { "begin": 9781, "end": 9860, "name": "JUMPDEST", "source": 2 }, { - "begin": 4295, - "end": 4415, + "begin": 9742, + "end": 9862, "name": "tag", - "source": 1, - "value": "177" + "source": 2, + "value": "277" }, - { "begin": 4295, "end": 4415, "name": "JUMPDEST", "source": 1 }, + { "begin": 9742, "end": 9862, "name": "JUMPDEST", "source": 2 }, { - "begin": 4454, - "end": 4455, + "begin": 9901, + "end": 9902, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 4479, - "end": 4530, + "begin": 9926, + "end": 9977, "name": "PUSH [tag]", - "source": 1, - "value": "179" + "source": 2, + "value": "279" }, - { "begin": 4522, "end": 4529, "name": "DUP9", "source": 1 }, - { "begin": 4513, "end": 4519, "name": "DUP3", "source": 1 }, - { "begin": 4502, "end": 4511, "name": "DUP10", "source": 1 }, - { "begin": 4498, "end": 4520, "name": "ADD", "source": 1 }, + { "begin": 9969, "end": 9976, "name": "DUP9", "source": 2 }, + { "begin": 9960, "end": 9966, "name": "DUP3", "source": 2 }, + { "begin": 9949, "end": 9958, "name": "DUP10", "source": 2 }, + { "begin": 9945, "end": 9967, "name": "ADD", "source": 2 }, { - "begin": 4479, - "end": 4530, + "begin": 9926, + "end": 9977, "name": "PUSH [tag]", - "source": 1, - "value": "63" + "source": 2, + "value": "116" }, { - "begin": 4479, - "end": 4530, + "begin": 9926, + "end": 9977, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 4479, - "end": 4530, + "begin": 9926, + "end": 9977, "name": "tag", - "source": 1, - "value": "179" + "source": 2, + "value": "279" }, - { "begin": 4479, "end": 4530, "name": "JUMPDEST", "source": 1 }, - { "begin": 4469, "end": 4530, "name": "SWAP6", "source": 1 }, - { "begin": 4469, "end": 4530, "name": "POP", "source": 1 }, - { "begin": 4425, "end": 4540, "name": "POP", "source": 1 }, + { "begin": 9926, "end": 9977, "name": "JUMPDEST", "source": 2 }, + { "begin": 9916, "end": 9977, "name": "SWAP6", "source": 2 }, + { "begin": 9916, "end": 9977, "name": "POP", "source": 2 }, + { "begin": 9872, "end": 9987, "name": "POP", "source": 2 }, { - "begin": 4579, - "end": 4581, + "begin": 10026, + "end": 10028, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 4605, - "end": 4657, + "begin": 10052, + "end": 10104, "name": "PUSH [tag]", - "source": 1, - "value": "180" + "source": 2, + "value": "280" }, - { "begin": 4649, "end": 4656, "name": "DUP9", "source": 1 }, - { "begin": 4640, "end": 4646, "name": "DUP3", "source": 1 }, - { "begin": 4629, "end": 4638, "name": "DUP10", "source": 1 }, - { "begin": 4625, "end": 4647, "name": "ADD", "source": 1 }, + { "begin": 10096, "end": 10103, "name": "DUP9", "source": 2 }, + { "begin": 10087, "end": 10093, "name": "DUP3", "source": 2 }, + { "begin": 10076, "end": 10085, "name": "DUP10", "source": 2 }, + { "begin": 10072, "end": 10094, "name": "ADD", "source": 2 }, { - "begin": 4605, - "end": 4657, + "begin": 10052, + "end": 10104, "name": "PUSH [tag]", - "source": 1, - "value": "66" + "source": 2, + "value": "137" }, { - "begin": 4605, - "end": 4657, + "begin": 10052, + "end": 10104, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 4605, - "end": 4657, + "begin": 10052, + "end": 10104, "name": "tag", - "source": 1, - "value": "180" + "source": 2, + "value": "280" }, - { "begin": 4605, "end": 4657, "name": "JUMPDEST", "source": 1 }, - { "begin": 4595, "end": 4657, "name": "SWAP5", "source": 1 }, - { "begin": 4595, "end": 4657, "name": "POP", "source": 1 }, - { "begin": 4550, "end": 4667, "name": "POP", "source": 1 }, + { "begin": 10052, "end": 10104, "name": "JUMPDEST", "source": 2 }, + { "begin": 10042, "end": 10104, "name": "SWAP5", "source": 2 }, + { "begin": 10042, "end": 10104, "name": "POP", "source": 2 }, + { "begin": 9997, "end": 10114, "name": "POP", "source": 2 }, { - "begin": 4706, - "end": 4708, + "begin": 10153, + "end": 10155, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { - "begin": 4732, - "end": 4785, + "begin": 10179, + "end": 10232, "name": "PUSH [tag]", - "source": 1, - "value": "181" + "source": 2, + "value": "281" }, - { "begin": 4777, "end": 4784, "name": "DUP9", "source": 1 }, - { "begin": 4768, "end": 4774, "name": "DUP3", "source": 1 }, - { "begin": 4757, "end": 4766, "name": "DUP10", "source": 1 }, - { "begin": 4753, "end": 4775, "name": "ADD", "source": 1 }, + { "begin": 10224, "end": 10231, "name": "DUP9", "source": 2 }, + { "begin": 10215, "end": 10221, "name": "DUP3", "source": 2 }, + { "begin": 10204, "end": 10213, "name": "DUP10", "source": 2 }, + { "begin": 10200, "end": 10222, "name": "ADD", "source": 2 }, { - "begin": 4732, - "end": 4785, + "begin": 10179, + "end": 10232, "name": "PUSH [tag]", - "source": 1, - "value": "70" + "source": 2, + "value": "131" }, { - "begin": 4732, - "end": 4785, + "begin": 10179, + "end": 10232, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 4732, - "end": 4785, + "begin": 10179, + "end": 10232, "name": "tag", - "source": 1, - "value": "181" + "source": 2, + "value": "281" }, - { "begin": 4732, "end": 4785, "name": "JUMPDEST", "source": 1 }, - { "begin": 4722, "end": 4785, "name": "SWAP4", "source": 1 }, - { "begin": 4722, "end": 4785, "name": "POP", "source": 1 }, - { "begin": 4677, "end": 4795, "name": "POP", "source": 1 }, + { "begin": 10179, "end": 10232, "name": "JUMPDEST", "source": 2 }, + { "begin": 10169, "end": 10232, "name": "SWAP4", "source": 2 }, + { "begin": 10169, "end": 10232, "name": "POP", "source": 2 }, + { "begin": 10124, "end": 10242, "name": "POP", "source": 2 }, { - "begin": 4834, - "end": 4836, + "begin": 10281, + "end": 10283, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, { - "begin": 4860, - "end": 4912, + "begin": 10307, + "end": 10359, "name": "PUSH [tag]", - "source": 1, - "value": "182" + "source": 2, + "value": "282" }, - { "begin": 4904, "end": 4911, "name": "DUP9", "source": 1 }, - { "begin": 4895, "end": 4901, "name": "DUP3", "source": 1 }, - { "begin": 4884, "end": 4893, "name": "DUP10", "source": 1 }, - { "begin": 4880, "end": 4902, "name": "ADD", "source": 1 }, + { "begin": 10351, "end": 10358, "name": "DUP9", "source": 2 }, + { "begin": 10342, "end": 10348, "name": "DUP3", "source": 2 }, + { "begin": 10331, "end": 10340, "name": "DUP10", "source": 2 }, + { "begin": 10327, "end": 10349, "name": "ADD", "source": 2 }, { - "begin": 4860, - "end": 4912, + "begin": 10307, + "end": 10359, "name": "PUSH [tag]", - "source": 1, - "value": "73" + "source": 2, + "value": "134" }, { - "begin": 4860, - "end": 4912, + "begin": 10307, + "end": 10359, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 4860, - "end": 4912, + "begin": 10307, + "end": 10359, "name": "tag", - "source": 1, - "value": "182" + "source": 2, + "value": "282" }, - { "begin": 4860, "end": 4912, "name": "JUMPDEST", "source": 1 }, - { "begin": 4850, "end": 4912, "name": "SWAP3", "source": 1 }, - { "begin": 4850, "end": 4912, "name": "POP", "source": 1 }, - { "begin": 4805, "end": 4922, "name": "POP", "source": 1 }, + { "begin": 10307, "end": 10359, "name": "JUMPDEST", "source": 2 }, + { "begin": 10297, "end": 10359, "name": "SWAP3", "source": 2 }, + { "begin": 10297, "end": 10359, "name": "POP", "source": 2 }, + { "begin": 10252, "end": 10369, "name": "POP", "source": 2 }, { - "begin": 4989, - "end": 4992, + "begin": 10436, + "end": 10439, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 4978, "end": 4987, "name": "DUP7", "source": 1 }, - { "begin": 4974, "end": 4993, "name": "ADD", "source": 1 }, + { "begin": 10425, "end": 10434, "name": "DUP7", "source": 2 }, + { "begin": 10421, "end": 10440, "name": "ADD", "source": 2 }, { - "begin": 4961, - "end": 4994, + "begin": 10408, + "end": 10441, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 5021, - "end": 5039, + "begin": 10468, + "end": 10486, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 5013, "end": 5019, "name": "DUP2", "source": 1 }, - { "begin": 5010, "end": 5040, "name": "GT", "source": 1 }, - { "begin": 5007, "end": 5124, "name": "ISZERO", "source": 1 }, + { "begin": 10460, "end": 10466, "name": "DUP2", "source": 2 }, + { "begin": 10457, "end": 10487, "name": "GT", "source": 2 }, + { "begin": 10454, "end": 10571, "name": "ISZERO", "source": 2 }, { - "begin": 5007, - "end": 5124, + "begin": 10454, + "end": 10571, "name": "PUSH [tag]", - "source": 1, - "value": "183" + "source": 2, + "value": "283" }, - { "begin": 5007, "end": 5124, "name": "JUMPI", "source": 1 }, + { "begin": 10454, "end": 10571, "name": "JUMPI", "source": 2 }, { - "begin": 5043, - "end": 5122, + "begin": 10490, + "end": 10569, "name": "PUSH [tag]", - "source": 1, - "value": "184" + "source": 2, + "value": "284" }, { - "begin": 5043, - "end": 5122, + "begin": 10490, + "end": 10569, "name": "PUSH [tag]", - "source": 1, - "value": "60" + "source": 2, + "value": "107" }, { - "begin": 5043, - "end": 5122, + "begin": 10490, + "end": 10569, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5043, - "end": 5122, + "begin": 10490, + "end": 10569, "name": "tag", - "source": 1, - "value": "184" + "source": 2, + "value": "284" }, - { "begin": 5043, "end": 5122, "name": "JUMPDEST", "source": 1 }, + { "begin": 10490, "end": 10569, "name": "JUMPDEST", "source": 2 }, { - "begin": 5007, - "end": 5124, + "begin": 10454, + "end": 10571, "name": "tag", - "source": 1, - "value": "183" + "source": 2, + "value": "283" }, - { "begin": 5007, "end": 5124, "name": "JUMPDEST", "source": 1 }, + { "begin": 10454, "end": 10571, "name": "JUMPDEST", "source": 2 }, { - "begin": 5148, - "end": 5210, + "begin": 10595, + "end": 10657, "name": "PUSH [tag]", - "source": 1, - "value": "185" + "source": 2, + "value": "285" }, - { "begin": 5202, "end": 5209, "name": "DUP9", "source": 1 }, - { "begin": 5193, "end": 5199, "name": "DUP3", "source": 1 }, - { "begin": 5182, "end": 5191, "name": "DUP10", "source": 1 }, - { "begin": 5178, "end": 5200, "name": "ADD", "source": 1 }, + { "begin": 10649, "end": 10656, "name": "DUP9", "source": 2 }, + { "begin": 10640, "end": 10646, "name": "DUP3", "source": 2 }, + { "begin": 10629, "end": 10638, "name": "DUP10", "source": 2 }, + { "begin": 10625, "end": 10647, "name": "ADD", "source": 2 }, { - "begin": 5148, - "end": 5210, + "begin": 10595, + "end": 10657, "name": "PUSH [tag]", - "source": 1, - "value": "83" + "source": 2, + "value": "124" }, { - "begin": 5148, - "end": 5210, + "begin": 10595, + "end": 10657, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5148, - "end": 5210, + "begin": 10595, + "end": 10657, "name": "tag", - "source": 1, - "value": "185" - }, - { "begin": 5148, "end": 5210, "name": "JUMPDEST", "source": 1 }, - { "begin": 5138, "end": 5210, "name": "SWAP2", "source": 1 }, - { "begin": 5138, "end": 5210, "name": "POP", "source": 1 }, - { "begin": 4932, "end": 5220, "name": "POP", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "SWAP3", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "SWAP6", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "POP", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "SWAP3", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "SWAP6", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "SWAP1", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "SWAP4", "source": 1 }, - { "begin": 4146, "end": 5227, "name": "POP", "source": 1 }, - { - "begin": 4146, - "end": 5227, - "name": "JUMP", - "source": 1, + "source": 2, + "value": "285" + }, + { "begin": 10595, "end": 10657, "name": "JUMPDEST", "source": 2 }, + { "begin": 10585, "end": 10657, "name": "SWAP2", "source": 2 }, + { "begin": 10585, "end": 10657, "name": "POP", "source": 2 }, + { "begin": 10379, "end": 10667, "name": "POP", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "SWAP3", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "SWAP6", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "POP", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "SWAP3", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "SWAP6", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "SWAP1", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "SWAP4", "source": 2 }, + { "begin": 9593, "end": 10674, "name": "POP", "source": 2 }, + { + "begin": 9593, + "end": 10674, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 5233, - "end": 5293, + "begin": 10680, + "end": 10740, "name": "tag", - "source": 1, - "value": "84" + "source": 2, + "value": "138" }, - { "begin": 5233, "end": 5293, "name": "JUMPDEST", "source": 1 }, + { "begin": 10680, "end": 10740, "name": "JUMPDEST", "source": 2 }, { - "begin": 5261, - "end": 5264, + "begin": 10708, + "end": 10711, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 5282, "end": 5287, "name": "DUP2", "source": 1 }, - { "begin": 5275, "end": 5287, "name": "SWAP1", "source": 1 }, - { "begin": 5275, "end": 5287, "name": "POP", "source": 1 }, - { "begin": 5233, "end": 5293, "name": "SWAP2", "source": 1 }, - { "begin": 5233, "end": 5293, "name": "SWAP1", "source": 1 }, - { "begin": 5233, "end": 5293, "name": "POP", "source": 1 }, + { "begin": 10729, "end": 10734, "name": "DUP2", "source": 2 }, + { "begin": 10722, "end": 10734, "name": "SWAP1", "source": 2 }, + { "begin": 10722, "end": 10734, "name": "POP", "source": 2 }, + { "begin": 10680, "end": 10740, "name": "SWAP2", "source": 2 }, + { "begin": 10680, "end": 10740, "name": "SWAP1", "source": 2 }, + { "begin": 10680, "end": 10740, "name": "POP", "source": 2 }, { - "begin": 5233, - "end": 5293, + "begin": 10680, + "end": 10740, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5299, - "end": 5441, + "begin": 10746, + "end": 10888, "name": "tag", - "source": 1, - "value": "85" + "source": 2, + "value": "139" }, - { "begin": 5299, "end": 5441, "name": "JUMPDEST", "source": 1 }, + { "begin": 10746, "end": 10888, "name": "JUMPDEST", "source": 2 }, { - "begin": 5349, - "end": 5358, + "begin": 10796, + "end": 10805, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 5382, - "end": 5435, + "begin": 10829, + "end": 10882, "name": "PUSH [tag]", - "source": 1, - "value": "188" + "source": 2, + "value": "288" }, { - "begin": 5400, - "end": 5434, + "begin": 10847, + "end": 10881, "name": "PUSH [tag]", - "source": 1, - "value": "189" + "source": 2, + "value": "289" }, { - "begin": 5409, - "end": 5433, + "begin": 10856, + "end": 10880, "name": "PUSH [tag]", - "source": 1, - "value": "190" + "source": 2, + "value": "290" }, - { "begin": 5427, "end": 5432, "name": "DUP5", "source": 1 }, + { "begin": 10874, "end": 10879, "name": "DUP5", "source": 2 }, { - "begin": 5409, - "end": 5433, + "begin": 10856, + "end": 10880, "name": "PUSH [tag]", - "source": 1, - "value": "67" + "source": 2, + "value": "128" }, { - "begin": 5409, - "end": 5433, + "begin": 10856, + "end": 10880, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5409, - "end": 5433, + "begin": 10856, + "end": 10880, "name": "tag", - "source": 1, - "value": "190" + "source": 2, + "value": "290" }, - { "begin": 5409, "end": 5433, "name": "JUMPDEST", "source": 1 }, + { "begin": 10856, "end": 10880, "name": "JUMPDEST", "source": 2 }, { - "begin": 5400, - "end": 5434, + "begin": 10847, + "end": 10881, "name": "PUSH [tag]", - "source": 1, - "value": "84" + "source": 2, + "value": "138" }, { - "begin": 5400, - "end": 5434, + "begin": 10847, + "end": 10881, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5400, - "end": 5434, + "begin": 10847, + "end": 10881, "name": "tag", - "source": 1, - "value": "189" + "source": 2, + "value": "289" }, - { "begin": 5400, "end": 5434, "name": "JUMPDEST", "source": 1 }, + { "begin": 10847, "end": 10881, "name": "JUMPDEST", "source": 2 }, { - "begin": 5382, - "end": 5435, + "begin": 10829, + "end": 10882, "name": "PUSH [tag]", - "source": 1, - "value": "67" + "source": 2, + "value": "128" }, { - "begin": 5382, - "end": 5435, + "begin": 10829, + "end": 10882, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5382, - "end": 5435, + "begin": 10829, + "end": 10882, "name": "tag", - "source": 1, - "value": "188" + "source": 2, + "value": "288" }, - { "begin": 5382, "end": 5435, "name": "JUMPDEST", "source": 1 }, - { "begin": 5369, "end": 5435, "name": "SWAP1", "source": 1 }, - { "begin": 5369, "end": 5435, "name": "POP", "source": 1 }, - { "begin": 5299, "end": 5441, "name": "SWAP2", "source": 1 }, - { "begin": 5299, "end": 5441, "name": "SWAP1", "source": 1 }, - { "begin": 5299, "end": 5441, "name": "POP", "source": 1 }, + { "begin": 10829, "end": 10882, "name": "JUMPDEST", "source": 2 }, + { "begin": 10816, "end": 10882, "name": "SWAP1", "source": 2 }, + { "begin": 10816, "end": 10882, "name": "POP", "source": 2 }, + { "begin": 10746, "end": 10888, "name": "SWAP2", "source": 2 }, + { "begin": 10746, "end": 10888, "name": "SWAP1", "source": 2 }, + { "begin": 10746, "end": 10888, "name": "POP", "source": 2 }, { - "begin": 5299, - "end": 5441, + "begin": 10746, + "end": 10888, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5447, - "end": 5573, + "begin": 10894, + "end": 11020, "name": "tag", - "source": 1, - "value": "86" + "source": 2, + "value": "140" }, - { "begin": 5447, "end": 5573, "name": "JUMPDEST", "source": 1 }, + { "begin": 10894, "end": 11020, "name": "JUMPDEST", "source": 2 }, { - "begin": 5497, - "end": 5506, + "begin": 10944, + "end": 10953, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 5530, - "end": 5567, + "begin": 10977, + "end": 11014, "name": "PUSH [tag]", - "source": 1, - "value": "192" + "source": 2, + "value": "292" }, - { "begin": 5561, "end": 5566, "name": "DUP3", "source": 1 }, + { "begin": 11008, "end": 11013, "name": "DUP3", "source": 2 }, { - "begin": 5530, - "end": 5567, + "begin": 10977, + "end": 11014, "name": "PUSH [tag]", - "source": 1, - "value": "85" + "source": 2, + "value": "139" }, { - "begin": 5530, - "end": 5567, + "begin": 10977, + "end": 11014, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5530, - "end": 5567, + "begin": 10977, + "end": 11014, "name": "tag", - "source": 1, - "value": "192" + "source": 2, + "value": "292" }, - { "begin": 5530, "end": 5567, "name": "JUMPDEST", "source": 1 }, - { "begin": 5517, "end": 5567, "name": "SWAP1", "source": 1 }, - { "begin": 5517, "end": 5567, "name": "POP", "source": 1 }, - { "begin": 5447, "end": 5573, "name": "SWAP2", "source": 1 }, - { "begin": 5447, "end": 5573, "name": "SWAP1", "source": 1 }, - { "begin": 5447, "end": 5573, "name": "POP", "source": 1 }, + { "begin": 10977, "end": 11014, "name": "JUMPDEST", "source": 2 }, + { "begin": 10964, "end": 11014, "name": "SWAP1", "source": 2 }, + { "begin": 10964, "end": 11014, "name": "POP", "source": 2 }, + { "begin": 10894, "end": 11020, "name": "SWAP2", "source": 2 }, + { "begin": 10894, "end": 11020, "name": "SWAP1", "source": 2 }, + { "begin": 10894, "end": 11020, "name": "POP", "source": 2 }, { - "begin": 5447, - "end": 5573, + "begin": 10894, + "end": 11020, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5579, - "end": 5725, + "begin": 11026, + "end": 11173, "name": "tag", - "source": 1, - "value": "87" + "source": 2, + "value": "141" }, - { "begin": 5579, "end": 5725, "name": "JUMPDEST", "source": 1 }, + { "begin": 11026, "end": 11173, "name": "JUMPDEST", "source": 2 }, { - "begin": 5649, - "end": 5658, + "begin": 11097, + "end": 11106, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 5682, - "end": 5719, + "begin": 11130, + "end": 11167, "name": "PUSH [tag]", - "source": 1, - "value": "194" + "source": 2, + "value": "294" }, - { "begin": 5713, "end": 5718, "name": "DUP3", "source": 1 }, + { "begin": 11161, "end": 11166, "name": "DUP3", "source": 2 }, { - "begin": 5682, - "end": 5719, + "begin": 11130, + "end": 11167, "name": "PUSH [tag]", - "source": 1, - "value": "86" + "source": 2, + "value": "140" }, { - "begin": 5682, - "end": 5719, + "begin": 11130, + "end": 11167, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5682, - "end": 5719, + "begin": 11130, + "end": 11167, "name": "tag", - "source": 1, - "value": "194" + "source": 2, + "value": "294" }, - { "begin": 5682, "end": 5719, "name": "JUMPDEST", "source": 1 }, - { "begin": 5669, "end": 5719, "name": "SWAP1", "source": 1 }, - { "begin": 5669, "end": 5719, "name": "POP", "source": 1 }, - { "begin": 5579, "end": 5725, "name": "SWAP2", "source": 1 }, - { "begin": 5579, "end": 5725, "name": "SWAP1", "source": 1 }, - { "begin": 5579, "end": 5725, "name": "POP", "source": 1 }, + { "begin": 11130, "end": 11167, "name": "JUMPDEST", "source": 2 }, + { "begin": 11117, "end": 11167, "name": "SWAP1", "source": 2 }, + { "begin": 11117, "end": 11167, "name": "POP", "source": 2 }, + { "begin": 11026, "end": 11173, "name": "SWAP2", "source": 2 }, + { "begin": 11026, "end": 11173, "name": "SWAP1", "source": 2 }, + { "begin": 11026, "end": 11173, "name": "POP", "source": 2 }, { - "begin": 5579, - "end": 5725, + "begin": 11026, + "end": 11173, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5731, - "end": 5902, + "begin": 11179, + "end": 11352, "name": "tag", - "source": 1, - "value": "88" + "source": 2, + "value": "142" }, - { "begin": 5731, "end": 5902, "name": "JUMPDEST", "source": 1 }, + { "begin": 11179, "end": 11352, "name": "JUMPDEST", "source": 2 }, { - "begin": 5838, - "end": 5895, + "begin": 11287, + "end": 11345, "name": "PUSH [tag]", - "source": 1, - "value": "196" + "source": 2, + "value": "296" }, - { "begin": 5889, "end": 5894, "name": "DUP2", "source": 1 }, + { "begin": 11339, "end": 11344, "name": "DUP2", "source": 2 }, { - "begin": 5838, - "end": 5895, + "begin": 11287, + "end": 11345, "name": "PUSH [tag]", - "source": 1, - "value": "87" + "source": 2, + "value": "141" }, { - "begin": 5838, - "end": 5895, + "begin": 11287, + "end": 11345, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5838, - "end": 5895, + "begin": 11287, + "end": 11345, "name": "tag", - "source": 1, - "value": "196" + "source": 2, + "value": "296" }, - { "begin": 5838, "end": 5895, "name": "JUMPDEST", "source": 1 }, - { "begin": 5833, "end": 5836, "name": "DUP3", "source": 1 }, - { "begin": 5826, "end": 5896, "name": "MSTORE", "source": 1 }, - { "begin": 5731, "end": 5902, "name": "POP", "source": 1 }, - { "begin": 5731, "end": 5902, "name": "POP", "source": 1 }, + { "begin": 11287, "end": 11345, "name": "JUMPDEST", "source": 2 }, + { "begin": 11282, "end": 11285, "name": "DUP3", "source": 2 }, + { "begin": 11275, "end": 11346, "name": "MSTORE", "source": 2 }, + { "begin": 11179, "end": 11352, "name": "POP", "source": 2 }, + { "begin": 11179, "end": 11352, "name": "POP", "source": 2 }, { - "begin": 5731, - "end": 5902, + "begin": 11179, + "end": 11352, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5908, - "end": 6170, + "begin": 11358, + "end": 11622, "name": "tag", - "source": 1, - "value": "15" + "source": 2, + "value": "28" }, - { "begin": 5908, "end": 6170, "name": "JUMPDEST", "source": 1 }, + { "begin": 11358, "end": 11622, "name": "JUMPDEST", "source": 2 }, { - "begin": 6021, - "end": 6025, + "begin": 11472, + "end": 11476, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6059, - "end": 6061, + "begin": 11510, + "end": 11512, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 6048, "end": 6057, "name": "DUP3", "source": 1 }, - { "begin": 6044, "end": 6062, "name": "ADD", "source": 1 }, - { "begin": 6036, "end": 6062, "name": "SWAP1", "source": 1 }, - { "begin": 6036, "end": 6062, "name": "POP", "source": 1 }, + { "begin": 11499, "end": 11508, "name": "DUP3", "source": 2 }, + { "begin": 11495, "end": 11513, "name": "ADD", "source": 2 }, + { "begin": 11487, "end": 11513, "name": "SWAP1", "source": 2 }, + { "begin": 11487, "end": 11513, "name": "POP", "source": 2 }, { - "begin": 6072, - "end": 6163, + "begin": 11523, + "end": 11615, "name": "PUSH [tag]", - "source": 1, - "value": "198" + "source": 2, + "value": "298" }, { - "begin": 6160, - "end": 6161, + "begin": 11612, + "end": 11613, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6149, "end": 6158, "name": "DUP4", "source": 1 }, - { "begin": 6145, "end": 6162, "name": "ADD", "source": 1 }, - { "begin": 6136, "end": 6142, "name": "DUP5", "source": 1 }, + { "begin": 11601, "end": 11610, "name": "DUP4", "source": 2 }, + { "begin": 11597, "end": 11614, "name": "ADD", "source": 2 }, + { "begin": 11588, "end": 11594, "name": "DUP5", "source": 2 }, { - "begin": 6072, - "end": 6163, + "begin": 11523, + "end": 11615, "name": "PUSH [tag]", - "source": 1, - "value": "88" + "source": 2, + "value": "142" }, { - "begin": 6072, - "end": 6163, + "begin": 11523, + "end": 11615, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6072, - "end": 6163, + "begin": 11523, + "end": 11615, "name": "tag", - "source": 1, - "value": "198" + "source": 2, + "value": "298" }, - { "begin": 6072, "end": 6163, "name": "JUMPDEST", "source": 1 }, - { "begin": 5908, "end": 6170, "name": "SWAP3", "source": 1 }, - { "begin": 5908, "end": 6170, "name": "SWAP2", "source": 1 }, - { "begin": 5908, "end": 6170, "name": "POP", "source": 1 }, - { "begin": 5908, "end": 6170, "name": "POP", "source": 1 }, + { "begin": 11523, "end": 11615, "name": "JUMPDEST", "source": 2 }, + { "begin": 11358, "end": 11622, "name": "SWAP3", "source": 2 }, + { "begin": 11358, "end": 11622, "name": "SWAP2", "source": 2 }, + { "begin": 11358, "end": 11622, "name": "POP", "source": 2 }, + { "begin": 11358, "end": 11622, "name": "POP", "source": 2 }, { - "begin": 5908, - "end": 6170, + "begin": 11358, + "end": 11622, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6176, - "end": 6503, + "begin": 11628, + "end": 11955, "name": "tag", - "source": 1, - "value": "18" + "source": 2, + "value": "31" }, - { "begin": 6176, "end": 6503, "name": "JUMPDEST", "source": 1 }, + { "begin": 11628, "end": 11955, "name": "JUMPDEST", "source": 2 }, { - "begin": 6234, - "end": 6240, + "begin": 11686, + "end": 11692, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6283, - "end": 6285, + "begin": 11735, + "end": 11737, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 6271, "end": 6280, "name": "DUP3", "source": 1 }, - { "begin": 6262, "end": 6269, "name": "DUP5", "source": 1 }, - { "begin": 6258, "end": 6281, "name": "SUB", "source": 1 }, - { "begin": 6254, "end": 6286, "name": "SLT", "source": 1 }, - { "begin": 6251, "end": 6370, "name": "ISZERO", "source": 1 }, + { "begin": 11723, "end": 11732, "name": "DUP3", "source": 2 }, + { "begin": 11714, "end": 11721, "name": "DUP5", "source": 2 }, + { "begin": 11710, "end": 11733, "name": "SUB", "source": 2 }, + { "begin": 11706, "end": 11738, "name": "SLT", "source": 2 }, + { "begin": 11703, "end": 11822, "name": "ISZERO", "source": 2 }, { - "begin": 6251, - "end": 6370, + "begin": 11703, + "end": 11822, "name": "PUSH [tag]", - "source": 1, - "value": "200" + "source": 2, + "value": "300" }, - { "begin": 6251, "end": 6370, "name": "JUMPI", "source": 1 }, + { "begin": 11703, "end": 11822, "name": "JUMPI", "source": 2 }, { - "begin": 6289, - "end": 6368, + "begin": 11741, + "end": 11820, "name": "PUSH [tag]", - "source": 1, - "value": "201" + "source": 2, + "value": "301" }, { - "begin": 6289, - "end": 6368, + "begin": 11741, + "end": 11820, "name": "PUSH [tag]", - "source": 1, - "value": "59" + "source": 2, + "value": "106" }, { - "begin": 6289, - "end": 6368, + "begin": 11741, + "end": 11820, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6289, - "end": 6368, + "begin": 11741, + "end": 11820, "name": "tag", - "source": 1, - "value": "201" + "source": 2, + "value": "301" }, - { "begin": 6289, "end": 6368, "name": "JUMPDEST", "source": 1 }, + { "begin": 11741, "end": 11820, "name": "JUMPDEST", "source": 2 }, { - "begin": 6251, - "end": 6370, + "begin": 11703, + "end": 11822, "name": "tag", - "source": 1, - "value": "200" + "source": 2, + "value": "300" }, - { "begin": 6251, "end": 6370, "name": "JUMPDEST", "source": 1 }, + { "begin": 11703, "end": 11822, "name": "JUMPDEST", "source": 2 }, { - "begin": 6409, - "end": 6410, + "begin": 11861, + "end": 11862, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6434, - "end": 6486, + "begin": 11886, + "end": 11938, "name": "PUSH [tag]", - "source": 1, - "value": "202" + "source": 2, + "value": "302" }, - { "begin": 6478, "end": 6485, "name": "DUP5", "source": 1 }, - { "begin": 6469, "end": 6475, "name": "DUP3", "source": 1 }, - { "begin": 6458, "end": 6467, "name": "DUP6", "source": 1 }, - { "begin": 6454, "end": 6476, "name": "ADD", "source": 1 }, + { "begin": 11930, "end": 11937, "name": "DUP5", "source": 2 }, + { "begin": 11921, "end": 11927, "name": "DUP3", "source": 2 }, + { "begin": 11910, "end": 11919, "name": "DUP6", "source": 2 }, + { "begin": 11906, "end": 11928, "name": "ADD", "source": 2 }, { - "begin": 6434, - "end": 6486, + "begin": 11886, + "end": 11938, "name": "PUSH [tag]", - "source": 1, - "value": "66" + "source": 2, + "value": "137" }, { - "begin": 6434, - "end": 6486, + "begin": 11886, + "end": 11938, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6434, - "end": 6486, + "begin": 11886, + "end": 11938, "name": "tag", - "source": 1, - "value": "202" + "source": 2, + "value": "302" }, - { "begin": 6434, "end": 6486, "name": "JUMPDEST", "source": 1 }, - { "begin": 6424, "end": 6486, "name": "SWAP2", "source": 1 }, - { "begin": 6424, "end": 6486, "name": "POP", "source": 1 }, - { "begin": 6380, "end": 6496, "name": "POP", "source": 1 }, - { "begin": 6176, "end": 6503, "name": "SWAP3", "source": 1 }, - { "begin": 6176, "end": 6503, "name": "SWAP2", "source": 1 }, - { "begin": 6176, "end": 6503, "name": "POP", "source": 1 }, - { "begin": 6176, "end": 6503, "name": "POP", "source": 1 }, - { - "begin": 6176, - "end": 6503, + { "begin": 11886, "end": 11938, "name": "JUMPDEST", "source": 2 }, + { "begin": 11876, "end": 11938, "name": "SWAP2", "source": 2 }, + { "begin": 11876, "end": 11938, "name": "POP", "source": 2 }, + { "begin": 11832, "end": 11948, "name": "POP", "source": 2 }, + { "begin": 11628, "end": 11955, "name": "SWAP3", "source": 2 }, + { "begin": 11628, "end": 11955, "name": "SWAP2", "source": 2 }, + { "begin": 11628, "end": 11955, "name": "POP", "source": 2 }, + { "begin": 11628, "end": 11955, "name": "POP", "source": 2 }, + { + "begin": 11628, + "end": 11955, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6509, - "end": 6627, + "begin": 11961, + "end": 12079, "name": "tag", - "source": 1, - "value": "89" + "source": 2, + "value": "143" }, - { "begin": 6509, "end": 6627, "name": "JUMPDEST", "source": 1 }, + { "begin": 11961, "end": 12079, "name": "JUMPDEST", "source": 2 }, { - "begin": 6596, - "end": 6620, + "begin": 12048, + "end": 12072, "name": "PUSH [tag]", - "source": 1, - "value": "204" + "source": 2, + "value": "304" }, - { "begin": 6614, "end": 6619, "name": "DUP2", "source": 1 }, + { "begin": 12066, "end": 12071, "name": "DUP2", "source": 2 }, { - "begin": 6596, - "end": 6620, + "begin": 12048, + "end": 12072, "name": "PUSH [tag]", - "source": 1, - "value": "68" + "source": 2, + "value": "129" }, { - "begin": 6596, - "end": 6620, + "begin": 12048, + "end": 12072, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6596, - "end": 6620, + "begin": 12048, + "end": 12072, "name": "tag", - "source": 1, - "value": "204" + "source": 2, + "value": "304" }, - { "begin": 6596, "end": 6620, "name": "JUMPDEST", "source": 1 }, - { "begin": 6591, "end": 6594, "name": "DUP3", "source": 1 }, - { "begin": 6584, "end": 6621, "name": "MSTORE", "source": 1 }, - { "begin": 6509, "end": 6627, "name": "POP", "source": 1 }, - { "begin": 6509, "end": 6627, "name": "POP", "source": 1 }, + { "begin": 12048, "end": 12072, "name": "JUMPDEST", "source": 2 }, + { "begin": 12043, "end": 12046, "name": "DUP3", "source": 2 }, + { "begin": 12036, "end": 12073, "name": "MSTORE", "source": 2 }, + { "begin": 11961, "end": 12079, "name": "POP", "source": 2 }, + { "begin": 11961, "end": 12079, "name": "POP", "source": 2 }, { - "begin": 6509, - "end": 6627, + "begin": 11961, + "end": 12079, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6633, - "end": 6855, + "begin": 12085, + "end": 12307, "name": "tag", - "source": 1, - "value": "21" + "source": 2, + "value": "34" }, - { "begin": 6633, "end": 6855, "name": "JUMPDEST", "source": 1 }, + { "begin": 12085, "end": 12307, "name": "JUMPDEST", "source": 2 }, { - "begin": 6726, - "end": 6730, + "begin": 12178, + "end": 12182, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6764, - "end": 6766, + "begin": 12216, + "end": 12218, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 6753, "end": 6762, "name": "DUP3", "source": 1 }, - { "begin": 6749, "end": 6767, "name": "ADD", "source": 1 }, - { "begin": 6741, "end": 6767, "name": "SWAP1", "source": 1 }, - { "begin": 6741, "end": 6767, "name": "POP", "source": 1 }, + { "begin": 12205, "end": 12214, "name": "DUP3", "source": 2 }, + { "begin": 12201, "end": 12219, "name": "ADD", "source": 2 }, + { "begin": 12193, "end": 12219, "name": "SWAP1", "source": 2 }, + { "begin": 12193, "end": 12219, "name": "POP", "source": 2 }, { - "begin": 6777, - "end": 6848, + "begin": 12229, + "end": 12300, "name": "PUSH [tag]", - "source": 1, - "value": "206" + "source": 2, + "value": "306" }, { - "begin": 6845, - "end": 6846, + "begin": 12297, + "end": 12298, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6834, "end": 6843, "name": "DUP4", "source": 1 }, - { "begin": 6830, "end": 6847, "name": "ADD", "source": 1 }, - { "begin": 6821, "end": 6827, "name": "DUP5", "source": 1 }, + { "begin": 12286, "end": 12295, "name": "DUP4", "source": 2 }, + { "begin": 12282, "end": 12299, "name": "ADD", "source": 2 }, + { "begin": 12273, "end": 12279, "name": "DUP5", "source": 2 }, { - "begin": 6777, - "end": 6848, + "begin": 12229, + "end": 12300, "name": "PUSH [tag]", - "source": 1, - "value": "89" + "source": 2, + "value": "143" }, { - "begin": 6777, - "end": 6848, + "begin": 12229, + "end": 12300, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6777, - "end": 6848, + "begin": 12229, + "end": 12300, "name": "tag", - "source": 1, - "value": "206" + "source": 2, + "value": "306" }, - { "begin": 6777, "end": 6848, "name": "JUMPDEST", "source": 1 }, - { "begin": 6633, "end": 6855, "name": "SWAP3", "source": 1 }, - { "begin": 6633, "end": 6855, "name": "SWAP2", "source": 1 }, - { "begin": 6633, "end": 6855, "name": "POP", "source": 1 }, - { "begin": 6633, "end": 6855, "name": "POP", "source": 1 }, + { "begin": 12229, "end": 12300, "name": "JUMPDEST", "source": 2 }, + { "begin": 12085, "end": 12307, "name": "SWAP3", "source": 2 }, + { "begin": 12085, "end": 12307, "name": "SWAP2", "source": 2 }, + { "begin": 12085, "end": 12307, "name": "POP", "source": 2 }, + { "begin": 12085, "end": 12307, "name": "POP", "source": 2 }, { - "begin": 6633, - "end": 6855, + "begin": 12085, + "end": 12307, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6861, - "end": 6978, + "begin": 12313, + "end": 12862, "name": "tag", - "source": 1, - "value": "90" + "source": 2, + "value": "37" }, - { "begin": 6861, "end": 6978, "name": "JUMPDEST", "source": 1 }, + { "begin": 12313, "end": 12862, "name": "JUMPDEST", "source": 2 }, { - "begin": 6970, - "end": 6971, + "begin": 12402, + "end": 12408, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6967, "end": 6968, "name": "DUP1", "source": 1 }, - { "begin": 6960, "end": 6972, "name": "REVERT", "source": 1 }, { - "begin": 6984, - "end": 7101, - "name": "tag", - "source": 1, - "value": "91" + "begin": 12451, + "end": 12453, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 6984, "end": 7101, "name": "JUMPDEST", "source": 1 }, + { "begin": 12439, "end": 12448, "name": "DUP3", "source": 2 }, + { "begin": 12430, "end": 12437, "name": "DUP5", "source": 2 }, + { "begin": 12426, "end": 12449, "name": "SUB", "source": 2 }, + { "begin": 12422, "end": 12454, "name": "SLT", "source": 2 }, + { "begin": 12419, "end": 12538, "name": "ISZERO", "source": 2 }, { - "begin": 7093, - "end": 7094, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 12419, + "end": 12538, + "name": "PUSH [tag]", + "source": 2, + "value": "308" }, - { "begin": 7090, "end": 7091, "name": "DUP1", "source": 1 }, - { "begin": 7083, "end": 7095, "name": "REVERT", "source": 1 }, + { "begin": 12419, "end": 12538, "name": "JUMPI", "source": 2 }, { - "begin": 7107, - "end": 7427, + "begin": 12457, + "end": 12536, + "name": "PUSH [tag]", + "source": 2, + "value": "309" + }, + { + "begin": 12457, + "end": 12536, + "name": "PUSH [tag]", + "source": 2, + "value": "106" + }, + { + "begin": 12457, + "end": 12536, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 12457, + "end": 12536, "name": "tag", - "source": 1, - "value": "92" + "source": 2, + "value": "309" + }, + { "begin": 12457, "end": 12536, "name": "JUMPDEST", "source": 2 }, + { + "begin": 12419, + "end": 12538, + "name": "tag", + "source": 2, + "value": "308" }, - { "begin": 7107, "end": 7427, "name": "JUMPDEST", "source": 1 }, + { "begin": 12419, "end": 12538, "name": "JUMPDEST", "source": 2 }, { - "begin": 7193, - "end": 7197, + "begin": 12605, + "end": 12606, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 12594, "end": 12603, "name": "DUP3", "source": 2 }, + { "begin": 12590, "end": 12607, "name": "ADD", "source": 2 }, + { + "begin": 12577, + "end": 12608, + "name": "CALLDATALOAD", + "source": 2 + }, { - "begin": 7283, - "end": 7301, + "begin": 12635, + "end": 12653, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 7275, "end": 7281, "name": "DUP3", "source": 1 }, - { "begin": 7272, "end": 7302, "name": "GT", "source": 1 }, - { "begin": 7269, "end": 7325, "name": "ISZERO", "source": 1 }, + { "begin": 12627, "end": 12633, "name": "DUP2", "source": 2 }, + { "begin": 12624, "end": 12654, "name": "GT", "source": 2 }, + { "begin": 12621, "end": 12738, "name": "ISZERO", "source": 2 }, { - "begin": 7269, - "end": 7325, + "begin": 12621, + "end": 12738, "name": "PUSH [tag]", - "source": 1, - "value": "210" + "source": 2, + "value": "310" }, - { "begin": 7269, "end": 7325, "name": "JUMPI", "source": 1 }, + { "begin": 12621, "end": 12738, "name": "JUMPI", "source": 2 }, { - "begin": 7305, - "end": 7323, + "begin": 12657, + "end": 12736, "name": "PUSH [tag]", - "source": 1, - "value": "211" + "source": 2, + "value": "311" }, { - "begin": 7305, - "end": 7323, + "begin": 12657, + "end": 12736, "name": "PUSH [tag]", - "source": 1, - "value": "77" + "source": 2, + "value": "107" }, { - "begin": 7305, - "end": 7323, + "begin": 12657, + "end": 12736, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7305, - "end": 7323, + "begin": 12657, + "end": 12736, "name": "tag", - "source": 1, - "value": "211" + "source": 2, + "value": "311" }, - { "begin": 7305, "end": 7323, "name": "JUMPDEST", "source": 1 }, + { "begin": 12657, "end": 12736, "name": "JUMPDEST", "source": 2 }, { - "begin": 7269, - "end": 7325, + "begin": 12621, + "end": 12738, "name": "tag", - "source": 1, - "value": "210" + "source": 2, + "value": "310" }, - { "begin": 7269, "end": 7325, "name": "JUMPDEST", "source": 1 }, + { "begin": 12621, "end": 12738, "name": "JUMPDEST", "source": 2 }, { - "begin": 7355, - "end": 7359, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 12762, + "end": 12845, + "name": "PUSH [tag]", + "source": 2, + "value": "312" }, - { "begin": 7347, "end": 7353, "name": "DUP3", "source": 1 }, - { "begin": 7343, "end": 7360, "name": "MUL", "source": 1 }, - { "begin": 7335, "end": 7360, "name": "SWAP1", "source": 1 }, - { "begin": 7335, "end": 7360, "name": "POP", "source": 1 }, + { "begin": 12837, "end": 12844, "name": "DUP5", "source": 2 }, + { "begin": 12828, "end": 12834, "name": "DUP3", "source": 2 }, + { "begin": 12817, "end": 12826, "name": "DUP6", "source": 2 }, + { "begin": 12813, "end": 12835, "name": "ADD", "source": 2 }, { - "begin": 7415, - "end": 7419, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 12762, + "end": 12845, + "name": "PUSH [tag]", + "source": 2, + "value": "127" }, - { "begin": 7409, "end": 7413, "name": "DUP2", "source": 1 }, - { "begin": 7405, "end": 7420, "name": "ADD", "source": 1 }, - { "begin": 7397, "end": 7420, "name": "SWAP1", "source": 1 }, - { "begin": 7397, "end": 7420, "name": "POP", "source": 1 }, - { "begin": 7107, "end": 7427, "name": "SWAP2", "source": 1 }, - { "begin": 7107, "end": 7427, "name": "SWAP1", "source": 1 }, - { "begin": 7107, "end": 7427, "name": "POP", "source": 1 }, { - "begin": 7107, - "end": 7427, + "begin": 12762, + "end": 12845, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 7433, - "end": 7550, + "begin": 12762, + "end": 12845, "name": "tag", - "source": 1, - "value": "93" - }, - { "begin": 7433, "end": 7550, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7542, - "end": 7543, - "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "312" + }, + { "begin": 12762, "end": 12845, "name": "JUMPDEST", "source": 2 }, + { "begin": 12752, "end": 12845, "name": "SWAP2", "source": 2 }, + { "begin": 12752, "end": 12845, "name": "POP", "source": 2 }, + { "begin": 12548, "end": 12855, "name": "POP", "source": 2 }, + { "begin": 12313, "end": 12862, "name": "SWAP3", "source": 2 }, + { "begin": 12313, "end": 12862, "name": "SWAP2", "source": 2 }, + { "begin": 12313, "end": 12862, "name": "POP", "source": 2 }, + { "begin": 12313, "end": 12862, "name": "POP", "source": 2 }, + { + "begin": 12313, + "end": 12862, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 7539, "end": 7540, "name": "DUP1", "source": 1 }, - { "begin": 7532, "end": 7544, "name": "REVERT", "source": 1 }, { - "begin": 7571, - "end": 8513, + "begin": 12868, + "end": 12945, "name": "tag", - "source": 1, - "value": "94" + "source": 2, + "value": "144" }, - { "begin": 7571, "end": 8513, "name": "JUMPDEST", "source": 1 }, + { "begin": 12868, "end": 12945, "name": "JUMPDEST", "source": 2 }, { - "begin": 7676, - "end": 7681, + "begin": 12905, + "end": 12912, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 12934, "end": 12939, "name": "DUP2", "source": 2 }, + { "begin": 12923, "end": 12939, "name": "SWAP1", "source": 2 }, + { "begin": 12923, "end": 12939, "name": "POP", "source": 2 }, + { "begin": 12868, "end": 12945, "name": "SWAP2", "source": 2 }, + { "begin": 12868, "end": 12945, "name": "SWAP1", "source": 2 }, + { "begin": 12868, "end": 12945, "name": "POP", "source": 2 }, { - "begin": 7701, - "end": 7791, - "name": "PUSH [tag]", - "source": 1, - "value": "214" + "begin": 12868, + "end": 12945, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 12951, + "end": 13069, + "name": "tag", + "source": 2, + "value": "145" }, + { "begin": 12951, "end": 13069, "name": "JUMPDEST", "source": 2 }, { - "begin": 7717, - "end": 7790, + "begin": 13038, + "end": 13062, "name": "PUSH [tag]", - "source": 1, - "value": "215" + "source": 2, + "value": "315" }, - { "begin": 7783, "end": 7789, "name": "DUP5", "source": 1 }, + { "begin": 13056, "end": 13061, "name": "DUP2", "source": 2 }, { - "begin": 7717, - "end": 7790, + "begin": 13038, + "end": 13062, "name": "PUSH [tag]", - "source": 1, - "value": "92" + "source": 2, + "value": "144" }, { - "begin": 7717, - "end": 7790, + "begin": 13038, + "end": 13062, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7717, - "end": 7790, + "begin": 13038, + "end": 13062, "name": "tag", - "source": 1, - "value": "215" - }, - { "begin": 7717, "end": 7790, "name": "JUMPDEST", "source": 1 }, - { - "begin": 7701, - "end": 7791, - "name": "PUSH [tag]", - "source": 1, - "value": "79" + "source": 2, + "value": "315" }, + { "begin": 13038, "end": 13062, "name": "JUMPDEST", "source": 2 }, + { "begin": 13033, "end": 13036, "name": "DUP3", "source": 2 }, + { "begin": 13026, "end": 13063, "name": "MSTORE", "source": 2 }, + { "begin": 12951, "end": 13069, "name": "POP", "source": 2 }, + { "begin": 12951, "end": 13069, "name": "POP", "source": 2 }, { - "begin": 7701, - "end": 7791, + "begin": 12951, + "end": 13069, "name": "JUMP", - "source": 1, - "value": "[in]" + "source": 2, + "value": "[out]" }, { - "begin": 7701, - "end": 7791, + "begin": 13075, + "end": 13297, "name": "tag", - "source": 1, - "value": "214" + "source": 2, + "value": "40" }, - { "begin": 7701, "end": 7791, "name": "JUMPDEST", "source": 1 }, - { "begin": 7692, "end": 7791, "name": "SWAP1", "source": 1 }, - { "begin": 7692, "end": 7791, "name": "POP", "source": 1 }, - { "begin": 7811, "end": 7816, "name": "DUP1", "source": 1 }, - { "begin": 7840, "end": 7846, "name": "DUP4", "source": 1 }, - { "begin": 7833, "end": 7838, "name": "DUP3", "source": 1 }, - { "begin": 7826, "end": 7847, "name": "MSTORE", "source": 1 }, + { "begin": 13075, "end": 13297, "name": "JUMPDEST", "source": 2 }, { - "begin": 7874, - "end": 7878, + "begin": 13168, + "end": 13172, "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "0" }, - { "begin": 7867, "end": 7872, "name": "DUP3", "source": 1 }, - { "begin": 7863, "end": 7879, "name": "ADD", "source": 1 }, - { "begin": 7856, "end": 7879, "name": "SWAP1", "source": 1 }, - { "begin": 7856, "end": 7879, "name": "POP", "source": 1 }, { - "begin": 7927, - "end": 7931, + "begin": 13206, + "end": 13208, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 7919, "end": 7925, "name": "DUP5", "source": 1 }, - { "begin": 7915, "end": 7932, "name": "MUL", "source": 1 }, - { "begin": 7907, "end": 7913, "name": "DUP4", "source": 1 }, - { "begin": 7903, "end": 7933, "name": "ADD", "source": 1 }, - { "begin": 7956, "end": 7959, "name": "DUP6", "source": 1 }, - { "begin": 7948, "end": 7954, "name": "DUP2", "source": 1 }, - { "begin": 7945, "end": 7960, "name": "GT", "source": 1 }, - { "begin": 7942, "end": 8064, "name": "ISZERO", "source": 1 }, + { "begin": 13195, "end": 13204, "name": "DUP3", "source": 2 }, + { "begin": 13191, "end": 13209, "name": "ADD", "source": 2 }, + { "begin": 13183, "end": 13209, "name": "SWAP1", "source": 2 }, + { "begin": 13183, "end": 13209, "name": "POP", "source": 2 }, { - "begin": 7942, - "end": 8064, + "begin": 13219, + "end": 13290, "name": "PUSH [tag]", - "source": 1, - "value": "216" + "source": 2, + "value": "317" }, - { "begin": 7942, "end": 8064, "name": "JUMPI", "source": 1 }, { - "begin": 7975, - "end": 8054, - "name": "PUSH [tag]", - "source": 1, - "value": "217" + "begin": 13287, + "end": 13288, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 13276, "end": 13285, "name": "DUP4", "source": 2 }, + { "begin": 13272, "end": 13289, "name": "ADD", "source": 2 }, + { "begin": 13263, "end": 13269, "name": "DUP5", "source": 2 }, { - "begin": 7975, - "end": 8054, + "begin": 13219, + "end": 13290, "name": "PUSH [tag]", - "source": 1, - "value": "93" + "source": 2, + "value": "145" }, { - "begin": 7975, - "end": 8054, + "begin": 13219, + "end": 13290, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7975, - "end": 8054, + "begin": 13219, + "end": 13290, "name": "tag", - "source": 1, - "value": "217" + "source": 2, + "value": "317" }, - { "begin": 7975, "end": 8054, "name": "JUMPDEST", "source": 1 }, + { "begin": 13219, "end": 13290, "name": "JUMPDEST", "source": 2 }, + { "begin": 13075, "end": 13297, "name": "SWAP3", "source": 2 }, + { "begin": 13075, "end": 13297, "name": "SWAP2", "source": 2 }, + { "begin": 13075, "end": 13297, "name": "POP", "source": 2 }, + { "begin": 13075, "end": 13297, "name": "POP", "source": 2 }, { - "begin": 7942, - "end": 8064, - "name": "tag", - "source": 1, - "value": "216" + "begin": 13075, + "end": 13297, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 7942, "end": 8064, "name": "JUMPDEST", "source": 1 }, - { "begin": 8090, "end": 8096, "name": "DUP4", "source": 1 }, { - "begin": 8073, - "end": 8507, + "begin": 13303, + "end": 14604, "name": "tag", - "source": 1, - "value": "218" + "source": 2, + "value": "43" }, - { "begin": 8073, "end": 8507, "name": "JUMPDEST", "source": 1 }, - { "begin": 8107, "end": 8113, "name": "DUP2", "source": 1 }, - { "begin": 8102, "end": 8105, "name": "DUP2", "source": 1 }, - { "begin": 8099, "end": 8114, "name": "LT", "source": 1 }, - { "begin": 8073, "end": 8507, "name": "ISZERO", "source": 1 }, + { "begin": 13303, "end": 14604, "name": "JUMPDEST", "source": 2 }, { - "begin": 8073, - "end": 8507, - "name": "PUSH [tag]", - "source": 1, - "value": "220" + "begin": 13433, + "end": 13439, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 8073, "end": 8507, "name": "JUMPI", "source": 1 }, - { "begin": 8196, "end": 8199, "name": "DUP1", "source": 1 }, + { "begin": 13441, "end": 13447, "name": "DUP1", "source": 2 }, { - "begin": 8183, - "end": 8200, - "name": "CALLDATALOAD", - "source": 1 + "begin": 13449, + "end": 13455, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 13457, "end": 13463, "name": "DUP1", "source": 2 }, { - "begin": 8232, - "end": 8250, + "begin": 13465, + "end": 13471, "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" + "source": 2, + "value": "0" + }, + { + "begin": 13514, + "end": 13517, + "name": "PUSH", + "source": 2, + "value": "A0" }, - { "begin": 8219, "end": 8230, "name": "DUP2", "source": 1 }, - { "begin": 8216, "end": 8251, "name": "GT", "source": 1 }, - { "begin": 8213, "end": 8335, "name": "ISZERO", "source": 1 }, + { "begin": 13502, "end": 13511, "name": "DUP7", "source": 2 }, + { "begin": 13493, "end": 13500, "name": "DUP9", "source": 2 }, + { "begin": 13489, "end": 13512, "name": "SUB", "source": 2 }, + { "begin": 13485, "end": 13518, "name": "SLT", "source": 2 }, + { "begin": 13482, "end": 13602, "name": "ISZERO", "source": 2 }, { - "begin": 8213, - "end": 8335, + "begin": 13482, + "end": 13602, "name": "PUSH [tag]", - "source": 1, - "value": "221" + "source": 2, + "value": "319" }, - { "begin": 8213, "end": 8335, "name": "JUMPI", "source": 1 }, + { "begin": 13482, "end": 13602, "name": "JUMPI", "source": 2 }, { - "begin": 8254, - "end": 8333, + "begin": 13521, + "end": 13600, "name": "PUSH [tag]", - "source": 1, - "value": "222" + "source": 2, + "value": "320" }, { - "begin": 8254, - "end": 8333, + "begin": 13521, + "end": 13600, "name": "PUSH [tag]", - "source": 1, - "value": "74" + "source": 2, + "value": "106" }, { - "begin": 8254, - "end": 8333, + "begin": 13521, + "end": 13600, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8254, - "end": 8333, + "begin": 13521, + "end": 13600, "name": "tag", - "source": 1, - "value": "222" + "source": 2, + "value": "320" }, - { "begin": 8254, "end": 8333, "name": "JUMPDEST", "source": 1 }, + { "begin": 13521, "end": 13600, "name": "JUMPDEST", "source": 2 }, { - "begin": 8213, - "end": 8335, + "begin": 13482, + "end": 13602, "name": "tag", - "source": 1, - "value": "221" + "source": 2, + "value": "319" + }, + { "begin": 13482, "end": 13602, "name": "JUMPDEST", "source": 2 }, + { + "begin": 13641, + "end": 13642, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 8213, "end": 8335, "name": "JUMPDEST", "source": 1 }, - { "begin": 8378, "end": 8389, "name": "DUP1", "source": 1 }, - { "begin": 8370, "end": 8376, "name": "DUP7", "source": 1 }, - { "begin": 8366, "end": 8390, "name": "ADD", "source": 1 }, { - "begin": 8416, - "end": 8462, + "begin": 13666, + "end": 13717, "name": "PUSH [tag]", - "source": 1, - "value": "223" + "source": 2, + "value": "321" }, - { "begin": 8458, "end": 8461, "name": "DUP10", "source": 1 }, - { "begin": 8446, "end": 8456, "name": "DUP3", "source": 1 }, + { "begin": 13709, "end": 13716, "name": "DUP9", "source": 2 }, + { "begin": 13700, "end": 13706, "name": "DUP3", "source": 2 }, + { "begin": 13689, "end": 13698, "name": "DUP10", "source": 2 }, + { "begin": 13685, "end": 13707, "name": "ADD", "source": 2 }, { - "begin": 8416, - "end": 8462, + "begin": 13666, + "end": 13717, "name": "PUSH [tag]", - "source": 1, - "value": "83" + "source": 2, + "value": "116" }, { - "begin": 8416, - "end": 8462, + "begin": 13666, + "end": 13717, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8416, - "end": 8462, + "begin": 13666, + "end": 13717, "name": "tag", - "source": 1, - "value": "223" - }, - { "begin": 8416, "end": 8462, "name": "JUMPDEST", "source": 1 }, - { "begin": 8411, "end": 8414, "name": "DUP6", "source": 1 }, - { "begin": 8404, "end": 8463, "name": "MSTORE", "source": 1 }, - { - "begin": 8492, - "end": 8496, - "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "321" }, - { "begin": 8487, "end": 8490, "name": "DUP6", "source": 1 }, - { "begin": 8483, "end": 8497, "name": "ADD", "source": 1 }, - { "begin": 8476, "end": 8497, "name": "SWAP5", "source": 1 }, - { "begin": 8476, "end": 8497, "name": "POP", "source": 1 }, - { "begin": 8149, "end": 8507, "name": "POP", "source": 1 }, - { "begin": 8149, "end": 8507, "name": "POP", "source": 1 }, + { "begin": 13666, "end": 13717, "name": "JUMPDEST", "source": 2 }, + { "begin": 13656, "end": 13717, "name": "SWAP6", "source": 2 }, + { "begin": 13656, "end": 13717, "name": "POP", "source": 2 }, + { "begin": 13612, "end": 13727, "name": "POP", "source": 2 }, { - "begin": 8133, - "end": 8137, + "begin": 13766, + "end": 13768, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8128, "end": 8131, "name": "DUP2", "source": 1 }, - { "begin": 8124, "end": 8138, "name": "ADD", "source": 1 }, - { "begin": 8117, "end": 8138, "name": "SWAP1", "source": 1 }, - { "begin": 8117, "end": 8138, "name": "POP", "source": 1 }, { - "begin": 8073, - "end": 8507, + "begin": 13792, + "end": 13844, "name": "PUSH [tag]", - "source": 1, - "value": "218" + "source": 2, + "value": "322" }, - { "begin": 8073, "end": 8507, "name": "JUMP", "source": 1 }, + { "begin": 13836, "end": 13843, "name": "DUP9", "source": 2 }, + { "begin": 13827, "end": 13833, "name": "DUP3", "source": 2 }, + { "begin": 13816, "end": 13825, "name": "DUP10", "source": 2 }, + { "begin": 13812, "end": 13834, "name": "ADD", "source": 2 }, { - "begin": 8073, - "end": 8507, - "name": "tag", - "source": 1, - "value": "220" + "begin": 13792, + "end": 13844, + "name": "PUSH [tag]", + "source": 2, + "value": "137" }, - { "begin": 8073, "end": 8507, "name": "JUMPDEST", "source": 1 }, - { "begin": 8077, "end": 8098, "name": "POP", "source": 1 }, - { "begin": 7682, "end": 8513, "name": "POP", "source": 1 }, - { "begin": 7682, "end": 8513, "name": "POP", "source": 1 }, - { "begin": 7571, "end": 8513, "name": "SWAP4", "source": 1 }, - { "begin": 7571, "end": 8513, "name": "SWAP3", "source": 1 }, - { "begin": 7571, "end": 8513, "name": "POP", "source": 1 }, - { "begin": 7571, "end": 8513, "name": "POP", "source": 1 }, - { "begin": 7571, "end": 8513, "name": "POP", "source": 1 }, { - "begin": 7571, - "end": 8513, + "begin": 13792, + "end": 13844, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 8534, - "end": 8922, + "begin": 13792, + "end": 13844, "name": "tag", - "source": 1, - "value": "95" + "source": 2, + "value": "322" }, - { "begin": 8534, "end": 8922, "name": "JUMPDEST", "source": 1 }, + { "begin": 13792, "end": 13844, "name": "JUMPDEST", "source": 2 }, + { "begin": 13782, "end": 13844, "name": "SWAP5", "source": 2 }, + { "begin": 13782, "end": 13844, "name": "POP", "source": 2 }, + { "begin": 13737, "end": 13854, "name": "POP", "source": 2 }, { - "begin": 8614, - "end": 8619, + "begin": 13921, + "end": 13923, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "40" + }, + { "begin": 13910, "end": 13919, "name": "DUP7", "source": 2 }, + { "begin": 13906, "end": 13924, "name": "ADD", "source": 2 }, + { + "begin": 13893, + "end": 13925, + "name": "CALLDATALOAD", + "source": 2 }, - { "begin": 8663, "end": 8666, "name": "DUP3", "source": 1 }, { - "begin": 8656, - "end": 8660, + "begin": 13952, + "end": 13970, "name": "PUSH", - "source": 1, - "value": "1F" + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 8648, "end": 8654, "name": "DUP4", "source": 1 }, - { "begin": 8644, "end": 8661, "name": "ADD", "source": 1 }, - { "begin": 8640, "end": 8667, "name": "SLT", "source": 1 }, + { "begin": 13944, "end": 13950, "name": "DUP2", "source": 2 }, + { "begin": 13941, "end": 13971, "name": "GT", "source": 2 }, + { "begin": 13938, "end": 14055, "name": "ISZERO", "source": 2 }, { - "begin": 8630, - "end": 8752, + "begin": 13938, + "end": 14055, "name": "PUSH [tag]", - "source": 1, - "value": "225" + "source": 2, + "value": "323" }, - { "begin": 8630, "end": 8752, "name": "JUMPI", "source": 1 }, + { "begin": 13938, "end": 14055, "name": "JUMPI", "source": 2 }, { - "begin": 8671, - "end": 8750, + "begin": 13974, + "end": 14053, "name": "PUSH [tag]", - "source": 1, - "value": "226" + "source": 2, + "value": "324" }, { - "begin": 8671, - "end": 8750, + "begin": 13974, + "end": 14053, "name": "PUSH [tag]", - "source": 1, - "value": "74" + "source": 2, + "value": "107" }, { - "begin": 8671, - "end": 8750, + "begin": 13974, + "end": 14053, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8671, - "end": 8750, + "begin": 13974, + "end": 14053, "name": "tag", - "source": 1, - "value": "226" + "source": 2, + "value": "324" }, - { "begin": 8671, "end": 8750, "name": "JUMPDEST", "source": 1 }, + { "begin": 13974, "end": 14053, "name": "JUMPDEST", "source": 2 }, { - "begin": 8630, - "end": 8752, + "begin": 13938, + "end": 14055, "name": "tag", - "source": 1, - "value": "225" - }, - { "begin": 8630, "end": 8752, "name": "JUMPDEST", "source": 1 }, - { "begin": 8788, "end": 8794, "name": "DUP2", "source": 1 }, - { - "begin": 8775, - "end": 8795, - "name": "CALLDATALOAD", - "source": 1 + "source": 2, + "value": "323" }, + { "begin": 13938, "end": 14055, "name": "JUMPDEST", "source": 2 }, { - "begin": 8813, - "end": 8916, + "begin": 14079, + "end": 14162, "name": "PUSH [tag]", - "source": 1, - "value": "227" - }, - { "begin": 8912, "end": 8915, "name": "DUP5", "source": 1 }, - { "begin": 8904, "end": 8910, "name": "DUP3", "source": 1 }, - { - "begin": 8897, - "end": 8901, - "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "325" }, - { "begin": 8889, "end": 8895, "name": "DUP7", "source": 1 }, - { "begin": 8885, "end": 8902, "name": "ADD", "source": 1 }, + { "begin": 14154, "end": 14161, "name": "DUP9", "source": 2 }, + { "begin": 14145, "end": 14151, "name": "DUP3", "source": 2 }, + { "begin": 14134, "end": 14143, "name": "DUP10", "source": 2 }, + { "begin": 14130, "end": 14152, "name": "ADD", "source": 2 }, { - "begin": 8813, - "end": 8916, + "begin": 14079, + "end": 14162, "name": "PUSH [tag]", - "source": 1, - "value": "94" + "source": 2, + "value": "127" }, { - "begin": 8813, - "end": 8916, + "begin": 14079, + "end": 14162, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8813, - "end": 8916, - "name": "tag", - "source": 1, - "value": "227" - }, - { "begin": 8813, "end": 8916, "name": "JUMPDEST", "source": 1 }, - { "begin": 8804, "end": 8916, "name": "SWAP2", "source": 1 }, - { "begin": 8804, "end": 8916, "name": "POP", "source": 1 }, - { "begin": 8620, "end": 8922, "name": "POP", "source": 1 }, - { "begin": 8534, "end": 8922, "name": "SWAP3", "source": 1 }, - { "begin": 8534, "end": 8922, "name": "SWAP2", "source": 1 }, - { "begin": 8534, "end": 8922, "name": "POP", "source": 1 }, - { "begin": 8534, "end": 8922, "name": "POP", "source": 1 }, - { - "begin": 8534, - "end": 8922, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 8970, - "end": 9746, + "begin": 14079, + "end": 14162, "name": "tag", - "source": 1, - "value": "96" + "source": 2, + "value": "325" }, - { "begin": 8970, "end": 9746, "name": "JUMPDEST", "source": 1 }, + { "begin": 14079, "end": 14162, "name": "JUMPDEST", "source": 2 }, + { "begin": 14069, "end": 14162, "name": "SWAP4", "source": 2 }, + { "begin": 14069, "end": 14162, "name": "POP", "source": 2 }, + { "begin": 13864, "end": 14172, "name": "POP", "source": 2 }, { - "begin": 9047, - "end": 9052, + "begin": 14211, + "end": 14213, "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 9091, - "end": 9095, - "name": "PUSH", - "source": 1, - "value": "40" - }, - { "begin": 9079, "end": 9088, "name": "DUP3", "source": 1 }, - { "begin": 9074, "end": 9077, "name": "DUP5", "source": 1 }, - { "begin": 9070, "end": 9089, "name": "SUB", "source": 1 }, - { "begin": 9066, "end": 9096, "name": "SLT", "source": 1 }, - { "begin": 9063, "end": 9180, "name": "ISZERO", "source": 1 }, - { - "begin": 9063, - "end": 9180, - "name": "PUSH [tag]", - "source": 1, - "value": "229" + "source": 2, + "value": "60" }, - { "begin": 9063, "end": 9180, "name": "JUMPI", "source": 1 }, { - "begin": 9099, - "end": 9178, + "begin": 14237, + "end": 14289, "name": "PUSH [tag]", - "source": 1, - "value": "230" + "source": 2, + "value": "326" }, + { "begin": 14281, "end": 14288, "name": "DUP9", "source": 2 }, + { "begin": 14272, "end": 14278, "name": "DUP3", "source": 2 }, + { "begin": 14261, "end": 14270, "name": "DUP10", "source": 2 }, + { "begin": 14257, "end": 14279, "name": "ADD", "source": 2 }, { - "begin": 9099, - "end": 9178, + "begin": 14237, + "end": 14289, "name": "PUSH [tag]", - "source": 1, - "value": "90" + "source": 2, + "value": "134" }, { - "begin": 9099, - "end": 9178, + "begin": 14237, + "end": 14289, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9099, - "end": 9178, + "begin": 14237, + "end": 14289, "name": "tag", - "source": 1, - "value": "230" + "source": 2, + "value": "326" }, - { "begin": 9099, "end": 9178, "name": "JUMPDEST", "source": 1 }, + { "begin": 14237, "end": 14289, "name": "JUMPDEST", "source": 2 }, + { "begin": 14227, "end": 14289, "name": "SWAP3", "source": 2 }, + { "begin": 14227, "end": 14289, "name": "POP", "source": 2 }, + { "begin": 14182, "end": 14299, "name": "POP", "source": 2 }, { - "begin": 9063, - "end": 9180, - "name": "tag", - "source": 1, - "value": "229" + "begin": 14366, + "end": 14369, + "name": "PUSH", + "source": 2, + "value": "80" }, - { "begin": 9063, "end": 9180, "name": "JUMPDEST", "source": 1 }, + { "begin": 14355, "end": 14364, "name": "DUP7", "source": 2 }, + { "begin": 14351, "end": 14370, "name": "ADD", "source": 2 }, { - "begin": 9198, - "end": 9219, - "name": "PUSH [tag]", - "source": 1, - "value": "231" + "begin": 14338, + "end": 14371, + "name": "CALLDATALOAD", + "source": 2 }, { - "begin": 9214, - "end": 9218, + "begin": 14398, + "end": 14416, "name": "PUSH", - "source": 1, - "value": "40" + "source": 2, + "value": "FFFFFFFFFFFFFFFF" }, + { "begin": 14390, "end": 14396, "name": "DUP2", "source": 2 }, + { "begin": 14387, "end": 14417, "name": "GT", "source": 2 }, + { "begin": 14384, "end": 14501, "name": "ISZERO", "source": 2 }, { - "begin": 9198, - "end": 9219, + "begin": 14384, + "end": 14501, "name": "PUSH [tag]", - "source": 1, - "value": "79" - }, - { - "begin": 9198, - "end": 9219, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 9198, - "end": 9219, - "name": "tag", - "source": 1, - "value": "231" - }, - { "begin": 9198, "end": 9219, "name": "JUMPDEST", "source": 1 }, - { "begin": 9189, "end": 9219, "name": "SWAP1", "source": 1 }, - { "begin": 9189, "end": 9219, "name": "POP", "source": 1 }, - { - "begin": 9281, - "end": 9282, - "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "327" }, + { "begin": 14384, "end": 14501, "name": "JUMPI", "source": 2 }, { - "begin": 9321, - "end": 9368, + "begin": 14420, + "end": 14499, "name": "PUSH [tag]", - "source": 1, - "value": "232" + "source": 2, + "value": "328" }, - { "begin": 9364, "end": 9367, "name": "DUP5", "source": 1 }, - { "begin": 9355, "end": 9361, "name": "DUP3", "source": 1 }, - { "begin": 9344, "end": 9353, "name": "DUP6", "source": 1 }, - { "begin": 9340, "end": 9362, "name": "ADD", "source": 1 }, { - "begin": 9321, - "end": 9368, + "begin": 14420, + "end": 14499, "name": "PUSH [tag]", - "source": 1, - "value": "63" + "source": 2, + "value": "107" }, { - "begin": 9321, - "end": 9368, + "begin": 14420, + "end": 14499, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9321, - "end": 9368, + "begin": 14420, + "end": 14499, "name": "tag", - "source": 1, - "value": "232" - }, - { "begin": 9321, "end": 9368, "name": "JUMPDEST", "source": 1 }, - { - "begin": 9314, - "end": 9318, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 9307, "end": 9312, "name": "DUP4", "source": 1 }, - { "begin": 9303, "end": 9319, "name": "ADD", "source": 1 }, - { "begin": 9296, "end": 9369, "name": "MSTORE", "source": 1 }, - { "begin": 9229, "end": 9380, "name": "POP", "source": 1 }, - { - "begin": 9471, - "end": 9473, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 9460, "end": 9469, "name": "DUP3", "source": 1 }, - { "begin": 9456, "end": 9474, "name": "ADD", "source": 1 }, - { - "begin": 9443, - "end": 9475, - "name": "CALLDATALOAD", - "source": 1 - }, - { - "begin": 9502, - "end": 9520, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" + "source": 2, + "value": "328" }, - { "begin": 9494, "end": 9500, "name": "DUP2", "source": 1 }, - { "begin": 9491, "end": 9521, "name": "GT", "source": 1 }, - { "begin": 9488, "end": 9605, "name": "ISZERO", "source": 1 }, + { "begin": 14420, "end": 14499, "name": "JUMPDEST", "source": 2 }, { - "begin": 9488, - "end": 9605, - "name": "PUSH [tag]", - "source": 1, - "value": "233" + "begin": 14384, + "end": 14501, + "name": "tag", + "source": 2, + "value": "327" }, - { "begin": 9488, "end": 9605, "name": "JUMPI", "source": 1 }, + { "begin": 14384, "end": 14501, "name": "JUMPDEST", "source": 2 }, { - "begin": 9524, - "end": 9603, + "begin": 14525, + "end": 14587, "name": "PUSH [tag]", - "source": 1, - "value": "234" + "source": 2, + "value": "329" }, + { "begin": 14579, "end": 14586, "name": "DUP9", "source": 2 }, + { "begin": 14570, "end": 14576, "name": "DUP3", "source": 2 }, + { "begin": 14559, "end": 14568, "name": "DUP10", "source": 2 }, + { "begin": 14555, "end": 14577, "name": "ADD", "source": 2 }, { - "begin": 9524, - "end": 9603, + "begin": 14525, + "end": 14587, "name": "PUSH [tag]", - "source": 1, - "value": "91" + "source": 2, + "value": "124" }, { - "begin": 9524, - "end": 9603, + "begin": 14525, + "end": 14587, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9524, - "end": 9603, + "begin": 14525, + "end": 14587, "name": "tag", - "source": 1, - "value": "234" + "source": 2, + "value": "329" + }, + { "begin": 14525, "end": 14587, "name": "JUMPDEST", "source": 2 }, + { "begin": 14515, "end": 14587, "name": "SWAP2", "source": 2 }, + { "begin": 14515, "end": 14587, "name": "POP", "source": 2 }, + { "begin": 14309, "end": 14597, "name": "POP", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "SWAP3", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "SWAP6", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "POP", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "SWAP3", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "SWAP6", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "SWAP1", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "SWAP4", "source": 2 }, + { "begin": 13303, "end": 14604, "name": "POP", "source": 2 }, + { + "begin": 13303, + "end": 14604, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 9524, "end": 9603, "name": "JUMPDEST", "source": 1 }, { - "begin": 9488, - "end": 9605, + "begin": 14610, + "end": 14725, "name": "tag", - "source": 1, - "value": "233" + "source": 2, + "value": "146" }, - { "begin": 9488, "end": 9605, "name": "JUMPDEST", "source": 1 }, + { "begin": 14610, "end": 14725, "name": "JUMPDEST", "source": 2 }, { - "begin": 9644, - "end": 9727, + "begin": 14695, + "end": 14718, "name": "PUSH [tag]", - "source": 1, - "value": "235" + "source": 2, + "value": "331" }, - { "begin": 9723, "end": 9726, "name": "DUP5", "source": 1 }, - { "begin": 9714, "end": 9720, "name": "DUP3", "source": 1 }, - { "begin": 9703, "end": 9712, "name": "DUP6", "source": 1 }, - { "begin": 9699, "end": 9721, "name": "ADD", "source": 1 }, + { "begin": 14712, "end": 14717, "name": "DUP2", "source": 2 }, { - "begin": 9644, - "end": 9727, + "begin": 14695, + "end": 14718, "name": "PUSH [tag]", - "source": 1, - "value": "95" + "source": 2, + "value": "132" }, { - "begin": 9644, - "end": 9727, + "begin": 14695, + "end": 14718, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9644, - "end": 9727, + "begin": 14695, + "end": 14718, "name": "tag", - "source": 1, - "value": "235" - }, - { "begin": 9644, "end": 9727, "name": "JUMPDEST", "source": 1 }, - { - "begin": 9637, - "end": 9641, - "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "331" }, - { "begin": 9630, "end": 9635, "name": "DUP4", "source": 1 }, - { "begin": 9626, "end": 9642, "name": "ADD", "source": 1 }, - { "begin": 9619, "end": 9728, "name": "MSTORE", "source": 1 }, - { "begin": 9390, "end": 9739, "name": "POP", "source": 1 }, - { "begin": 8970, "end": 9746, "name": "SWAP3", "source": 1 }, - { "begin": 8970, "end": 9746, "name": "SWAP2", "source": 1 }, - { "begin": 8970, "end": 9746, "name": "POP", "source": 1 }, - { "begin": 8970, "end": 9746, "name": "POP", "source": 1 }, + { "begin": 14695, "end": 14718, "name": "JUMPDEST", "source": 2 }, + { "begin": 14690, "end": 14693, "name": "DUP3", "source": 2 }, + { "begin": 14683, "end": 14719, "name": "MSTORE", "source": 2 }, + { "begin": 14610, "end": 14725, "name": "POP", "source": 2 }, + { "begin": 14610, "end": 14725, "name": "POP", "source": 2 }, { - "begin": 8970, - "end": 9746, + "begin": 14610, + "end": 14725, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9752, - "end": 11049, + "begin": 14731, + "end": 15161, "name": "tag", - "source": 1, - "value": "24" + "source": 2, + "value": "49" }, - { "begin": 9752, "end": 11049, "name": "JUMPDEST", "source": 1 }, + { "begin": 14731, "end": 15161, "name": "JUMPDEST", "source": 2 }, { - "begin": 9880, - "end": 9886, + "begin": 14874, + "end": 14878, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 9888, "end": 9894, "name": "DUP1", "source": 1 }, { - "begin": 9896, - "end": 9902, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { "begin": 9904, "end": 9910, "name": "DUP1", "source": 1 }, - { - "begin": 9912, - "end": 9918, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 9961, - "end": 9964, + "begin": 14912, + "end": 14914, "name": "PUSH", - "source": 1, - "value": "A0" + "source": 2, + "value": "60" }, - { "begin": 9949, "end": 9958, "name": "DUP7", "source": 1 }, - { "begin": 9940, "end": 9947, "name": "DUP9", "source": 1 }, - { "begin": 9936, "end": 9959, "name": "SUB", "source": 1 }, - { "begin": 9932, "end": 9965, "name": "SLT", "source": 1 }, - { "begin": 9929, "end": 10049, "name": "ISZERO", "source": 1 }, + { "begin": 14901, "end": 14910, "name": "DUP3", "source": 2 }, + { "begin": 14897, "end": 14915, "name": "ADD", "source": 2 }, + { "begin": 14889, "end": 14915, "name": "SWAP1", "source": 2 }, + { "begin": 14889, "end": 14915, "name": "POP", "source": 2 }, { - "begin": 9929, - "end": 10049, + "begin": 14925, + "end": 14994, "name": "PUSH [tag]", - "source": 1, - "value": "237" + "source": 2, + "value": "333" }, - { "begin": 9929, "end": 10049, "name": "JUMPI", "source": 1 }, { - "begin": 9968, - "end": 10047, - "name": "PUSH [tag]", - "source": 1, - "value": "238" + "begin": 14991, + "end": 14992, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 14980, "end": 14989, "name": "DUP4", "source": 2 }, + { "begin": 14976, "end": 14993, "name": "ADD", "source": 2 }, + { "begin": 14967, "end": 14973, "name": "DUP7", "source": 2 }, { - "begin": 9968, - "end": 10047, + "begin": 14925, + "end": 14994, "name": "PUSH [tag]", - "source": 1, - "value": "59" + "source": 2, + "value": "146" }, { - "begin": 9968, - "end": 10047, + "begin": 14925, + "end": 14994, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9968, - "end": 10047, + "begin": 14925, + "end": 14994, "name": "tag", - "source": 1, - "value": "238" + "source": 2, + "value": "333" }, - { "begin": 9968, "end": 10047, "name": "JUMPDEST", "source": 1 }, + { "begin": 14925, "end": 14994, "name": "JUMPDEST", "source": 2 }, { - "begin": 9929, - "end": 10049, - "name": "tag", - "source": 1, - "value": "237" + "begin": 15004, + "end": 15074, + "name": "PUSH [tag]", + "source": 2, + "value": "334" }, - { "begin": 9929, "end": 10049, "name": "JUMPDEST", "source": 1 }, { - "begin": 10088, - "end": 10089, + "begin": 15070, + "end": 15072, "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 10113, - "end": 10164, - "name": "PUSH [tag]", - "source": 1, - "value": "239" + "source": 2, + "value": "20" }, - { "begin": 10156, "end": 10163, "name": "DUP9", "source": 1 }, - { "begin": 10147, "end": 10153, "name": "DUP3", "source": 1 }, - { "begin": 10136, "end": 10145, "name": "DUP10", "source": 1 }, - { "begin": 10132, "end": 10154, "name": "ADD", "source": 1 }, + { "begin": 15059, "end": 15068, "name": "DUP4", "source": 2 }, + { "begin": 15055, "end": 15073, "name": "ADD", "source": 2 }, + { "begin": 15046, "end": 15052, "name": "DUP6", "source": 2 }, { - "begin": 10113, - "end": 10164, + "begin": 15004, + "end": 15074, "name": "PUSH [tag]", - "source": 1, - "value": "63" + "source": 2, + "value": "146" }, { - "begin": 10113, - "end": 10164, + "begin": 15004, + "end": 15074, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10113, - "end": 10164, + "begin": 15004, + "end": 15074, "name": "tag", - "source": 1, - "value": "239" + "source": 2, + "value": "334" }, - { "begin": 10113, "end": 10164, "name": "JUMPDEST", "source": 1 }, - { "begin": 10103, "end": 10164, "name": "SWAP6", "source": 1 }, - { "begin": 10103, "end": 10164, "name": "POP", "source": 1 }, - { "begin": 10059, "end": 10174, "name": "POP", "source": 1 }, + { "begin": 15004, "end": 15074, "name": "JUMPDEST", "source": 2 }, { - "begin": 10213, - "end": 10215, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 15084, + "end": 15154, + "name": "PUSH [tag]", + "source": 2, + "value": "335" }, { - "begin": 10239, - "end": 10291, - "name": "PUSH [tag]", - "source": 1, - "value": "240" + "begin": 15150, + "end": 15152, + "name": "PUSH", + "source": 2, + "value": "40" }, - { "begin": 10283, "end": 10290, "name": "DUP9", "source": 1 }, - { "begin": 10274, "end": 10280, "name": "DUP3", "source": 1 }, - { "begin": 10263, "end": 10272, "name": "DUP10", "source": 1 }, - { "begin": 10259, "end": 10281, "name": "ADD", "source": 1 }, + { "begin": 15139, "end": 15148, "name": "DUP4", "source": 2 }, + { "begin": 15135, "end": 15153, "name": "ADD", "source": 2 }, + { "begin": 15126, "end": 15132, "name": "DUP5", "source": 2 }, { - "begin": 10239, - "end": 10291, + "begin": 15084, + "end": 15154, "name": "PUSH [tag]", - "source": 1, - "value": "66" + "source": 2, + "value": "146" }, { - "begin": 10239, - "end": 10291, + "begin": 15084, + "end": 15154, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10239, - "end": 10291, + "begin": 15084, + "end": 15154, "name": "tag", - "source": 1, - "value": "240" + "source": 2, + "value": "335" }, - { "begin": 10239, "end": 10291, "name": "JUMPDEST", "source": 1 }, - { "begin": 10229, "end": 10291, "name": "SWAP5", "source": 1 }, - { "begin": 10229, "end": 10291, "name": "POP", "source": 1 }, - { "begin": 10184, "end": 10301, "name": "POP", "source": 1 }, + { "begin": 15084, "end": 15154, "name": "JUMPDEST", "source": 2 }, + { "begin": 14731, "end": 15161, "name": "SWAP5", "source": 2 }, + { "begin": 14731, "end": 15161, "name": "SWAP4", "source": 2 }, + { "begin": 14731, "end": 15161, "name": "POP", "source": 2 }, + { "begin": 14731, "end": 15161, "name": "POP", "source": 2 }, + { "begin": 14731, "end": 15161, "name": "POP", "source": 2 }, + { "begin": 14731, "end": 15161, "name": "POP", "source": 2 }, { - "begin": 10368, - "end": 10370, - "name": "PUSH", - "source": 1, - "value": "40" + "begin": 14731, + "end": 15161, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 10357, "end": 10366, "name": "DUP7", "source": 1 }, - { "begin": 10353, "end": 10371, "name": "ADD", "source": 1 }, { - "begin": 10340, - "end": 10372, - "name": "CALLDATALOAD", - "source": 1 + "begin": 15167, + "end": 15601, + "name": "tag", + "source": 2, + "value": "54" }, + { "begin": 15167, "end": 15601, "name": "JUMPDEST", "source": 2 }, { - "begin": 10399, - "end": 10417, + "begin": 15312, + "end": 15316, "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" + "source": 2, + "value": "0" }, - { "begin": 10391, "end": 10397, "name": "DUP2", "source": 1 }, - { "begin": 10388, "end": 10418, "name": "GT", "source": 1 }, - { "begin": 10385, "end": 10502, "name": "ISZERO", "source": 1 }, { - "begin": 10385, - "end": 10502, - "name": "PUSH [tag]", - "source": 1, - "value": "241" + "begin": 15350, + "end": 15352, + "name": "PUSH", + "source": 2, + "value": "60" }, - { "begin": 10385, "end": 10502, "name": "JUMPI", "source": 1 }, + { "begin": 15339, "end": 15348, "name": "DUP3", "source": 2 }, + { "begin": 15335, "end": 15353, "name": "ADD", "source": 2 }, + { "begin": 15327, "end": 15353, "name": "SWAP1", "source": 2 }, + { "begin": 15327, "end": 15353, "name": "POP", "source": 2 }, { - "begin": 10421, - "end": 10500, + "begin": 15363, + "end": 15432, "name": "PUSH [tag]", - "source": 1, - "value": "242" + "source": 2, + "value": "337" + }, + { + "begin": 15429, + "end": 15430, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 15418, "end": 15427, "name": "DUP4", "source": 2 }, + { "begin": 15414, "end": 15431, "name": "ADD", "source": 2 }, + { "begin": 15405, "end": 15411, "name": "DUP7", "source": 2 }, { - "begin": 10421, - "end": 10500, + "begin": 15363, + "end": 15432, "name": "PUSH [tag]", - "source": 1, - "value": "60" + "source": 2, + "value": "146" }, { - "begin": 10421, - "end": 10500, + "begin": 15363, + "end": 15432, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10421, - "end": 10500, + "begin": 15363, + "end": 15432, "name": "tag", - "source": 1, - "value": "242" + "source": 2, + "value": "337" }, - { "begin": 10421, "end": 10500, "name": "JUMPDEST", "source": 1 }, + { "begin": 15363, "end": 15432, "name": "JUMPDEST", "source": 2 }, { - "begin": 10385, - "end": 10502, - "name": "tag", - "source": 1, - "value": "241" + "begin": 15442, + "end": 15514, + "name": "PUSH [tag]", + "source": 2, + "value": "338" }, - { "begin": 10385, "end": 10502, "name": "JUMPDEST", "source": 1 }, { - "begin": 10526, - "end": 10607, - "name": "PUSH [tag]", - "source": 1, - "value": "243" + "begin": 15510, + "end": 15512, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 10599, "end": 10606, "name": "DUP9", "source": 1 }, - { "begin": 10590, "end": 10596, "name": "DUP3", "source": 1 }, - { "begin": 10579, "end": 10588, "name": "DUP10", "source": 1 }, - { "begin": 10575, "end": 10597, "name": "ADD", "source": 1 }, + { "begin": 15499, "end": 15508, "name": "DUP4", "source": 2 }, + { "begin": 15495, "end": 15513, "name": "ADD", "source": 2 }, + { "begin": 15486, "end": 15492, "name": "DUP6", "source": 2 }, { - "begin": 10526, - "end": 10607, + "begin": 15442, + "end": 15514, "name": "PUSH [tag]", - "source": 1, - "value": "96" + "source": 2, + "value": "145" }, { - "begin": 10526, - "end": 10607, + "begin": 15442, + "end": 15514, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10526, - "end": 10607, + "begin": 15442, + "end": 15514, "name": "tag", - "source": 1, - "value": "243" + "source": 2, + "value": "338" }, - { "begin": 10526, "end": 10607, "name": "JUMPDEST", "source": 1 }, - { "begin": 10516, "end": 10607, "name": "SWAP4", "source": 1 }, - { "begin": 10516, "end": 10607, "name": "POP", "source": 1 }, - { "begin": 10311, "end": 10617, "name": "POP", "source": 1 }, + { "begin": 15442, "end": 15514, "name": "JUMPDEST", "source": 2 }, { - "begin": 10656, - "end": 10658, - "name": "PUSH", - "source": 1, - "value": "60" + "begin": 15524, + "end": 15594, + "name": "PUSH [tag]", + "source": 2, + "value": "339" }, { - "begin": 10682, - "end": 10734, - "name": "PUSH [tag]", - "source": 1, - "value": "244" + "begin": 15590, + "end": 15592, + "name": "PUSH", + "source": 2, + "value": "40" }, - { "begin": 10726, "end": 10733, "name": "DUP9", "source": 1 }, - { "begin": 10717, "end": 10723, "name": "DUP3", "source": 1 }, - { "begin": 10706, "end": 10715, "name": "DUP10", "source": 1 }, - { "begin": 10702, "end": 10724, "name": "ADD", "source": 1 }, + { "begin": 15579, "end": 15588, "name": "DUP4", "source": 2 }, + { "begin": 15575, "end": 15593, "name": "ADD", "source": 2 }, + { "begin": 15566, "end": 15572, "name": "DUP5", "source": 2 }, { - "begin": 10682, - "end": 10734, + "begin": 15524, + "end": 15594, "name": "PUSH [tag]", - "source": 1, - "value": "73" + "source": 2, + "value": "146" }, { - "begin": 10682, - "end": 10734, + "begin": 15524, + "end": 15594, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10682, - "end": 10734, + "begin": 15524, + "end": 15594, "name": "tag", - "source": 1, - "value": "244" - }, - { "begin": 10682, "end": 10734, "name": "JUMPDEST", "source": 1 }, - { "begin": 10672, "end": 10734, "name": "SWAP3", "source": 1 }, - { "begin": 10672, "end": 10734, "name": "POP", "source": 1 }, - { "begin": 10627, "end": 10744, "name": "POP", "source": 1 }, - { - "begin": 10811, - "end": 10814, - "name": "PUSH", - "source": 1, - "value": "80" - }, - { "begin": 10800, "end": 10809, "name": "DUP7", "source": 1 }, - { "begin": 10796, "end": 10815, "name": "ADD", "source": 1 }, - { - "begin": 10783, - "end": 10816, - "name": "CALLDATALOAD", - "source": 1 + "source": 2, + "value": "339" }, + { "begin": 15524, "end": 15594, "name": "JUMPDEST", "source": 2 }, + { "begin": 15167, "end": 15601, "name": "SWAP5", "source": 2 }, + { "begin": 15167, "end": 15601, "name": "SWAP4", "source": 2 }, + { "begin": 15167, "end": 15601, "name": "POP", "source": 2 }, + { "begin": 15167, "end": 15601, "name": "POP", "source": 2 }, + { "begin": 15167, "end": 15601, "name": "POP", "source": 2 }, + { "begin": 15167, "end": 15601, "name": "POP", "source": 2 }, { - "begin": 10843, - "end": 10861, - "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" + "begin": 15167, + "end": 15601, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 10835, "end": 10841, "name": "DUP2", "source": 1 }, - { "begin": 10832, "end": 10862, "name": "GT", "source": 1 }, - { "begin": 10829, "end": 10946, "name": "ISZERO", "source": 1 }, { - "begin": 10829, - "end": 10946, - "name": "PUSH [tag]", - "source": 1, - "value": "245" + "begin": 15607, + "end": 15709, + "name": "tag", + "source": 2, + "value": "147" }, - { "begin": 10829, "end": 10946, "name": "JUMPI", "source": 1 }, + { "begin": 15607, "end": 15709, "name": "JUMPDEST", "source": 2 }, { - "begin": 10865, - "end": 10944, + "begin": 15680, + "end": 15702, "name": "PUSH [tag]", - "source": 1, - "value": "246" + "source": 2, + "value": "341" }, + { "begin": 15696, "end": 15701, "name": "DUP2", "source": 2 }, { - "begin": 10865, - "end": 10944, + "begin": 15680, + "end": 15702, "name": "PUSH [tag]", - "source": 1, - "value": "60" + "source": 2, + "value": "114" }, { - "begin": 10865, - "end": 10944, + "begin": 15680, + "end": 15702, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10865, - "end": 10944, + "begin": 15680, + "end": 15702, "name": "tag", - "source": 1, - "value": "246" + "source": 2, + "value": "341" }, - { "begin": 10865, "end": 10944, "name": "JUMPDEST", "source": 1 }, + { "begin": 15680, "end": 15702, "name": "JUMPDEST", "source": 2 }, + { "begin": 15675, "end": 15678, "name": "DUP3", "source": 2 }, + { "begin": 15668, "end": 15703, "name": "MSTORE", "source": 2 }, + { "begin": 15607, "end": 15709, "name": "POP", "source": 2 }, + { "begin": 15607, "end": 15709, "name": "POP", "source": 2 }, { - "begin": 10829, - "end": 10946, - "name": "tag", - "source": 1, - "value": "245" + "begin": 15607, + "end": 15709, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 10829, "end": 10946, "name": "JUMPDEST", "source": 1 }, { - "begin": 10970, - "end": 11032, - "name": "PUSH [tag]", - "source": 1, - "value": "247" + "begin": 15715, + "end": 15838, + "name": "tag", + "source": 2, + "value": "148" }, - { "begin": 11024, "end": 11031, "name": "DUP9", "source": 1 }, - { "begin": 11015, "end": 11021, "name": "DUP3", "source": 1 }, - { "begin": 11004, "end": 11013, "name": "DUP10", "source": 1 }, - { "begin": 11000, "end": 11022, "name": "ADD", "source": 1 }, + { "begin": 15715, "end": 15838, "name": "JUMPDEST", "source": 2 }, { - "begin": 10970, - "end": 11032, - "name": "PUSH [tag]", - "source": 1, - "value": "83" + "begin": 15791, + "end": 15797, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 15825, "end": 15830, "name": "DUP2", "source": 2 }, + { "begin": 15819, "end": 15831, "name": "MLOAD", "source": 2 }, + { "begin": 15809, "end": 15831, "name": "SWAP1", "source": 2 }, + { "begin": 15809, "end": 15831, "name": "POP", "source": 2 }, + { "begin": 15715, "end": 15838, "name": "SWAP2", "source": 2 }, + { "begin": 15715, "end": 15838, "name": "SWAP1", "source": 2 }, + { "begin": 15715, "end": 15838, "name": "POP", "source": 2 }, { - "begin": 10970, - "end": 11032, + "begin": 15715, + "end": 15838, "name": "JUMP", - "source": 1, - "value": "[in]" + "source": 2, + "value": "[out]" }, { - "begin": 10970, - "end": 11032, + "begin": 15844, + "end": 16027, "name": "tag", - "source": 1, - "value": "247" + "source": 2, + "value": "149" + }, + { "begin": 15844, "end": 16027, "name": "JUMPDEST", "source": 2 }, + { + "begin": 15942, + "end": 15953, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { "begin": 15976, "end": 15982, "name": "DUP3", "source": 2 }, + { "begin": 15971, "end": 15974, "name": "DUP3", "source": 2 }, + { "begin": 15964, "end": 15983, "name": "MSTORE", "source": 2 }, + { + "begin": 16016, + "end": 16020, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 10970, "end": 11032, "name": "JUMPDEST", "source": 1 }, - { "begin": 10960, "end": 11032, "name": "SWAP2", "source": 1 }, - { "begin": 10960, "end": 11032, "name": "POP", "source": 1 }, - { "begin": 10754, "end": 11042, "name": "POP", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "SWAP3", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "SWAP6", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "POP", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "SWAP3", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "SWAP6", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "SWAP1", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "SWAP4", "source": 1 }, - { "begin": 9752, "end": 11049, "name": "POP", "source": 1 }, - { - "begin": 9752, - "end": 11049, - "name": "JUMP", - "source": 1, + { "begin": 16011, "end": 16014, "name": "DUP3", "source": 2 }, + { "begin": 16007, "end": 16021, "name": "ADD", "source": 2 }, + { "begin": 15992, "end": 16021, "name": "SWAP1", "source": 2 }, + { "begin": 15992, "end": 16021, "name": "POP", "source": 2 }, + { "begin": 15844, "end": 16027, "name": "SWAP3", "source": 2 }, + { "begin": 15844, "end": 16027, "name": "SWAP2", "source": 2 }, + { "begin": 15844, "end": 16027, "name": "POP", "source": 2 }, + { "begin": 15844, "end": 16027, "name": "POP", "source": 2 }, + { + "begin": 15844, + "end": 16027, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 11055, - "end": 11600, + "begin": 16033, + "end": 16174, "name": "tag", - "source": 1, - "value": "28" + "source": 2, + "value": "150" }, - { "begin": 11055, "end": 11600, "name": "JUMPDEST", "source": 1 }, + { "begin": 16033, "end": 16174, "name": "JUMPDEST", "source": 2 }, { - "begin": 11142, - "end": 11148, + "begin": 16109, + "end": 16113, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 16132, "end": 16135, "name": "DUP2", "source": 2 }, + { "begin": 16124, "end": 16135, "name": "SWAP1", "source": 2 }, + { "begin": 16124, "end": 16135, "name": "POP", "source": 2 }, { - "begin": 11191, - "end": 11193, + "begin": 16162, + "end": 16166, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 11179, "end": 11188, "name": "DUP3", "source": 1 }, - { "begin": 11170, "end": 11177, "name": "DUP5", "source": 1 }, - { "begin": 11166, "end": 11189, "name": "SUB", "source": 1 }, - { "begin": 11162, "end": 11194, "name": "SLT", "source": 1 }, - { "begin": 11159, "end": 11278, "name": "ISZERO", "source": 1 }, + { "begin": 16157, "end": 16160, "name": "DUP3", "source": 2 }, + { "begin": 16153, "end": 16167, "name": "ADD", "source": 2 }, + { "begin": 16145, "end": 16167, "name": "SWAP1", "source": 2 }, + { "begin": 16145, "end": 16167, "name": "POP", "source": 2 }, + { "begin": 16033, "end": 16174, "name": "SWAP2", "source": 2 }, + { "begin": 16033, "end": 16174, "name": "SWAP1", "source": 2 }, + { "begin": 16033, "end": 16174, "name": "POP", "source": 2 }, { - "begin": 11159, - "end": 11278, - "name": "PUSH [tag]", - "source": 1, - "value": "249" + "begin": 16033, + "end": 16174, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 11159, "end": 11278, "name": "JUMPI", "source": 1 }, { - "begin": 11197, - "end": 11276, - "name": "PUSH [tag]", - "source": 1, - "value": "250" + "begin": 16180, + "end": 16278, + "name": "tag", + "source": 2, + "value": "151" }, + { "begin": 16180, "end": 16278, "name": "JUMPDEST", "source": 2 }, { - "begin": 11197, - "end": 11276, - "name": "PUSH [tag]", - "source": 1, - "value": "59" + "begin": 16231, + "end": 16237, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 16265, "end": 16270, "name": "DUP2", "source": 2 }, + { "begin": 16259, "end": 16271, "name": "MLOAD", "source": 2 }, + { "begin": 16249, "end": 16271, "name": "SWAP1", "source": 2 }, + { "begin": 16249, "end": 16271, "name": "POP", "source": 2 }, + { "begin": 16180, "end": 16278, "name": "SWAP2", "source": 2 }, + { "begin": 16180, "end": 16278, "name": "SWAP1", "source": 2 }, + { "begin": 16180, "end": 16278, "name": "POP", "source": 2 }, { - "begin": 11197, - "end": 11276, + "begin": 16180, + "end": 16278, "name": "JUMP", - "source": 1, - "value": "[in]" + "source": 2, + "value": "[out]" }, { - "begin": 11197, - "end": 11276, + "begin": 16284, + "end": 16442, "name": "tag", - "source": 1, - "value": "250" + "source": 2, + "value": "152" }, - { "begin": 11197, "end": 11276, "name": "JUMPDEST", "source": 1 }, + { "begin": 16284, "end": 16442, "name": "JUMPDEST", "source": 2 }, { - "begin": 11159, - "end": 11278, - "name": "tag", - "source": 1, - "value": "249" + "begin": 16357, + "end": 16368, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 11159, "end": 11278, "name": "JUMPDEST", "source": 1 }, + { "begin": 16391, "end": 16397, "name": "DUP3", "source": 2 }, + { "begin": 16386, "end": 16389, "name": "DUP3", "source": 2 }, + { "begin": 16379, "end": 16398, "name": "MSTORE", "source": 2 }, { - "begin": 11345, - "end": 11346, + "begin": 16431, + "end": 16435, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "20" + }, + { "begin": 16426, "end": 16429, "name": "DUP3", "source": 2 }, + { "begin": 16422, "end": 16436, "name": "ADD", "source": 2 }, + { "begin": 16407, "end": 16436, "name": "SWAP1", "source": 2 }, + { "begin": 16407, "end": 16436, "name": "POP", "source": 2 }, + { "begin": 16284, "end": 16442, "name": "SWAP3", "source": 2 }, + { "begin": 16284, "end": 16442, "name": "SWAP2", "source": 2 }, + { "begin": 16284, "end": 16442, "name": "POP", "source": 2 }, + { "begin": 16284, "end": 16442, "name": "POP", "source": 2 }, + { + "begin": 16284, + "end": 16442, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 11334, "end": 11343, "name": "DUP3", "source": 1 }, - { "begin": 11330, "end": 11347, "name": "ADD", "source": 1 }, { - "begin": 11317, - "end": 11348, - "name": "CALLDATALOAD", - "source": 1 + "begin": 16448, + "end": 16755, + "name": "tag", + "source": 2, + "value": "153" }, + { "begin": 16448, "end": 16755, "name": "JUMPDEST", "source": 2 }, { - "begin": 11375, - "end": 11393, + "begin": 16516, + "end": 16517, "name": "PUSH", - "source": 1, - "value": "FFFFFFFFFFFFFFFF" + "source": 2, + "value": "0" }, - { "begin": 11367, "end": 11373, "name": "DUP2", "source": 1 }, - { "begin": 11364, "end": 11394, "name": "GT", "source": 1 }, - { "begin": 11361, "end": 11478, "name": "ISZERO", "source": 1 }, { - "begin": 11361, - "end": 11478, - "name": "PUSH [tag]", - "source": 1, - "value": "251" + "begin": 16526, + "end": 16639, + "name": "tag", + "source": 2, + "value": "348" + }, + { "begin": 16526, "end": 16639, "name": "JUMPDEST", "source": 2 }, + { "begin": 16540, "end": 16546, "name": "DUP4", "source": 2 }, + { "begin": 16537, "end": 16538, "name": "DUP2", "source": 2 }, + { "begin": 16534, "end": 16547, "name": "LT", "source": 2 }, + { "begin": 16526, "end": 16639, "name": "ISZERO", "source": 2 }, + { + "begin": 16526, + "end": 16639, + "name": "PUSH [tag]", + "source": 2, + "value": "350" + }, + { "begin": 16526, "end": 16639, "name": "JUMPI", "source": 2 }, + { "begin": 16625, "end": 16626, "name": "DUP1", "source": 2 }, + { "begin": 16620, "end": 16623, "name": "DUP3", "source": 2 }, + { "begin": 16616, "end": 16627, "name": "ADD", "source": 2 }, + { "begin": 16610, "end": 16628, "name": "MLOAD", "source": 2 }, + { "begin": 16606, "end": 16607, "name": "DUP2", "source": 2 }, + { "begin": 16601, "end": 16604, "name": "DUP5", "source": 2 }, + { "begin": 16597, "end": 16608, "name": "ADD", "source": 2 }, + { "begin": 16590, "end": 16629, "name": "MSTORE", "source": 2 }, + { + "begin": 16562, + "end": 16564, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 11361, "end": 11478, "name": "JUMPI", "source": 1 }, + { "begin": 16559, "end": 16560, "name": "DUP2", "source": 2 }, + { "begin": 16555, "end": 16565, "name": "ADD", "source": 2 }, + { "begin": 16550, "end": 16565, "name": "SWAP1", "source": 2 }, + { "begin": 16550, "end": 16565, "name": "POP", "source": 2 }, { - "begin": 11397, - "end": 11476, + "begin": 16526, + "end": 16639, "name": "PUSH [tag]", - "source": 1, - "value": "252" + "source": 2, + "value": "348" }, + { "begin": 16526, "end": 16639, "name": "JUMP", "source": 2 }, { - "begin": 11397, - "end": 11476, + "begin": 16526, + "end": 16639, + "name": "tag", + "source": 2, + "value": "350" + }, + { "begin": 16526, "end": 16639, "name": "JUMPDEST", "source": 2 }, + { "begin": 16657, "end": 16663, "name": "DUP4", "source": 2 }, + { "begin": 16654, "end": 16655, "name": "DUP2", "source": 2 }, + { "begin": 16651, "end": 16664, "name": "GT", "source": 2 }, + { "begin": 16648, "end": 16749, "name": "ISZERO", "source": 2 }, + { + "begin": 16648, + "end": 16749, "name": "PUSH [tag]", - "source": 1, - "value": "60" + "source": 2, + "value": "351" }, + { "begin": 16648, "end": 16749, "name": "JUMPI", "source": 2 }, { - "begin": 11397, - "end": 11476, - "name": "JUMP", - "source": 1, - "value": "[in]" + "begin": 16737, + "end": 16738, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 16728, "end": 16734, "name": "DUP5", "source": 2 }, + { "begin": 16723, "end": 16726, "name": "DUP5", "source": 2 }, + { "begin": 16719, "end": 16735, "name": "ADD", "source": 2 }, + { "begin": 16712, "end": 16739, "name": "MSTORE", "source": 2 }, { - "begin": 11397, - "end": 11476, + "begin": 16648, + "end": 16749, "name": "tag", - "source": 1, - "value": "252" + "source": 2, + "value": "351" + }, + { "begin": 16648, "end": 16749, "name": "JUMPDEST", "source": 2 }, + { "begin": 16497, "end": 16755, "name": "POP", "source": 2 }, + { "begin": 16448, "end": 16755, "name": "POP", "source": 2 }, + { "begin": 16448, "end": 16755, "name": "POP", "source": 2 }, + { "begin": 16448, "end": 16755, "name": "POP", "source": 2 }, + { + "begin": 16448, + "end": 16755, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 11397, "end": 11476, "name": "JUMPDEST", "source": 1 }, { - "begin": 11361, - "end": 11478, + "begin": 16761, + "end": 17101, "name": "tag", - "source": 1, - "value": "251" + "source": 2, + "value": "154" + }, + { "begin": 16761, "end": 17101, "name": "JUMPDEST", "source": 2 }, + { + "begin": 16837, + "end": 16840, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 11361, "end": 11478, "name": "JUMPDEST", "source": 1 }, { - "begin": 11502, - "end": 11583, + "begin": 16865, + "end": 16903, "name": "PUSH [tag]", - "source": 1, - "value": "253" + "source": 2, + "value": "353" }, - { "begin": 11575, "end": 11582, "name": "DUP5", "source": 1 }, - { "begin": 11566, "end": 11572, "name": "DUP3", "source": 1 }, - { "begin": 11555, "end": 11564, "name": "DUP6", "source": 1 }, - { "begin": 11551, "end": 11573, "name": "ADD", "source": 1 }, + { "begin": 16897, "end": 16902, "name": "DUP3", "source": 2 }, { - "begin": 11502, - "end": 11583, + "begin": 16865, + "end": 16903, "name": "PUSH [tag]", - "source": 1, - "value": "96" + "source": 2, + "value": "151" }, { - "begin": 11502, - "end": 11583, + "begin": 16865, + "end": 16903, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11502, - "end": 11583, + "begin": 16865, + "end": 16903, "name": "tag", - "source": 1, - "value": "253" + "source": 2, + "value": "353" + }, + { "begin": 16865, "end": 16903, "name": "JUMPDEST", "source": 2 }, + { + "begin": 16919, + "end": 16979, + "name": "PUSH [tag]", + "source": 2, + "value": "354" + }, + { "begin": 16972, "end": 16978, "name": "DUP2", "source": 2 }, + { "begin": 16967, "end": 16970, "name": "DUP6", "source": 2 }, + { + "begin": 16919, + "end": 16979, + "name": "PUSH [tag]", + "source": 2, + "value": "152" }, - { "begin": 11502, "end": 11583, "name": "JUMPDEST", "source": 1 }, - { "begin": 11492, "end": 11583, "name": "SWAP2", "source": 1 }, - { "begin": 11492, "end": 11583, "name": "POP", "source": 1 }, - { "begin": 11288, "end": 11593, "name": "POP", "source": 1 }, - { "begin": 11055, "end": 11600, "name": "SWAP3", "source": 1 }, - { "begin": 11055, "end": 11600, "name": "SWAP2", "source": 1 }, - { "begin": 11055, "end": 11600, "name": "POP", "source": 1 }, - { "begin": 11055, "end": 11600, "name": "POP", "source": 1 }, { - "begin": 11055, - "end": 11600, + "begin": 16919, + "end": 16979, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 11606, - "end": 11721, + "begin": 16919, + "end": 16979, "name": "tag", - "source": 1, - "value": "97" + "source": 2, + "value": "354" }, - { "begin": 11606, "end": 11721, "name": "JUMPDEST", "source": 1 }, + { "begin": 16919, "end": 16979, "name": "JUMPDEST", "source": 2 }, + { "begin": 16912, "end": 16979, "name": "SWAP4", "source": 2 }, + { "begin": 16912, "end": 16979, "name": "POP", "source": 2 }, { - "begin": 11691, - "end": 11714, + "begin": 16988, + "end": 17040, "name": "PUSH [tag]", - "source": 1, - "value": "255" + "source": 2, + "value": "355" + }, + { "begin": 17033, "end": 17039, "name": "DUP2", "source": 2 }, + { "begin": 17028, "end": 17031, "name": "DUP6", "source": 2 }, + { + "begin": 17021, + "end": 17025, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 11708, "end": 11713, "name": "DUP2", "source": 1 }, + { "begin": 17014, "end": 17019, "name": "DUP7", "source": 2 }, + { "begin": 17010, "end": 17026, "name": "ADD", "source": 2 }, { - "begin": 11691, - "end": 11714, + "begin": 16988, + "end": 17040, "name": "PUSH [tag]", - "source": 1, - "value": "71" + "source": 2, + "value": "153" }, { - "begin": 11691, - "end": 11714, + "begin": 16988, + "end": 17040, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11691, - "end": 11714, + "begin": 16988, + "end": 17040, "name": "tag", - "source": 1, - "value": "255" + "source": 2, + "value": "355" }, - { "begin": 11691, "end": 11714, "name": "JUMPDEST", "source": 1 }, - { "begin": 11686, "end": 11689, "name": "DUP3", "source": 1 }, - { "begin": 11679, "end": 11715, "name": "MSTORE", "source": 1 }, - { "begin": 11606, "end": 11721, "name": "POP", "source": 1 }, - { "begin": 11606, "end": 11721, "name": "POP", "source": 1 }, + { "begin": 16988, "end": 17040, "name": "JUMPDEST", "source": 2 }, { - "begin": 11606, - "end": 11721, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 17065, + "end": 17094, + "name": "PUSH [tag]", + "source": 2, + "value": "356" }, + { "begin": 17087, "end": 17093, "name": "DUP2", "source": 2 }, { - "begin": 11727, - "end": 11804, - "name": "tag", - "source": 1, - "value": "98" + "begin": 17065, + "end": 17094, + "name": "PUSH [tag]", + "source": 2, + "value": "109" }, - { "begin": 11727, "end": 11804, "name": "JUMPDEST", "source": 1 }, { - "begin": 11764, - "end": 11771, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 17065, + "end": 17094, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 11793, "end": 11798, "name": "DUP2", "source": 1 }, - { "begin": 11782, "end": 11798, "name": "SWAP1", "source": 1 }, - { "begin": 11782, "end": 11798, "name": "POP", "source": 1 }, - { "begin": 11727, "end": 11804, "name": "SWAP2", "source": 1 }, - { "begin": 11727, "end": 11804, "name": "SWAP1", "source": 1 }, - { "begin": 11727, "end": 11804, "name": "POP", "source": 1 }, { - "begin": 11727, - "end": 11804, + "begin": 17065, + "end": 17094, + "name": "tag", + "source": 2, + "value": "356" + }, + { "begin": 17065, "end": 17094, "name": "JUMPDEST", "source": 2 }, + { "begin": 17060, "end": 17063, "name": "DUP5", "source": 2 }, + { "begin": 17056, "end": 17095, "name": "ADD", "source": 2 }, + { "begin": 17049, "end": 17095, "name": "SWAP2", "source": 2 }, + { "begin": 17049, "end": 17095, "name": "POP", "source": 2 }, + { "begin": 16841, "end": 17101, "name": "POP", "source": 2 }, + { "begin": 16761, "end": 17101, "name": "SWAP3", "source": 2 }, + { "begin": 16761, "end": 17101, "name": "SWAP2", "source": 2 }, + { "begin": 16761, "end": 17101, "name": "POP", "source": 2 }, + { "begin": 16761, "end": 17101, "name": "POP", "source": 2 }, + { + "begin": 16761, + "end": 17101, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 11810, - "end": 11928, + "begin": 17107, + "end": 17299, "name": "tag", - "source": 1, - "value": "99" + "source": 2, + "value": "155" + }, + { "begin": 17107, "end": 17299, "name": "JUMPDEST", "source": 2 }, + { + "begin": 17194, + "end": 17204, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 11810, "end": 11928, "name": "JUMPDEST", "source": 1 }, { - "begin": 11897, - "end": 11921, + "begin": 17229, + "end": 17293, "name": "PUSH [tag]", - "source": 1, - "value": "258" + "source": 2, + "value": "358" }, - { "begin": 11915, "end": 11920, "name": "DUP2", "source": 1 }, + { "begin": 17289, "end": 17292, "name": "DUP4", "source": 2 }, + { "begin": 17281, "end": 17287, "name": "DUP4", "source": 2 }, { - "begin": 11897, - "end": 11921, + "begin": 17229, + "end": 17293, "name": "PUSH [tag]", - "source": 1, - "value": "98" + "source": 2, + "value": "154" }, { - "begin": 11897, - "end": 11921, + "begin": 17229, + "end": 17293, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11897, - "end": 11921, + "begin": 17229, + "end": 17293, "name": "tag", - "source": 1, - "value": "258" - }, - { "begin": 11897, "end": 11921, "name": "JUMPDEST", "source": 1 }, - { "begin": 11892, "end": 11895, "name": "DUP3", "source": 1 }, - { "begin": 11885, "end": 11922, "name": "MSTORE", "source": 1 }, - { "begin": 11810, "end": 11928, "name": "POP", "source": 1 }, - { "begin": 11810, "end": 11928, "name": "POP", "source": 1 }, - { - "begin": 11810, - "end": 11928, + "source": 2, + "value": "358" + }, + { "begin": 17229, "end": 17293, "name": "JUMPDEST", "source": 2 }, + { "begin": 17215, "end": 17293, "name": "SWAP1", "source": 2 }, + { "begin": 17215, "end": 17293, "name": "POP", "source": 2 }, + { "begin": 17107, "end": 17299, "name": "SWAP3", "source": 2 }, + { "begin": 17107, "end": 17299, "name": "SWAP2", "source": 2 }, + { "begin": 17107, "end": 17299, "name": "POP", "source": 2 }, + { "begin": 17107, "end": 17299, "name": "POP", "source": 2 }, + { + "begin": 17107, + "end": 17299, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 11934, - "end": 12368, + "begin": 17305, + "end": 17427, "name": "tag", - "source": 1, - "value": "31" + "source": 2, + "value": "156" }, - { "begin": 11934, "end": 12368, "name": "JUMPDEST", "source": 1 }, + { "begin": 17305, "end": 17427, "name": "JUMPDEST", "source": 2 }, { - "begin": 12079, - "end": 12083, + "begin": 17384, + "end": 17388, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 12117, - "end": 12119, + "begin": 17416, + "end": 17420, "name": "PUSH", - "source": 1, - "value": "60" + "source": 2, + "value": "20" }, - { "begin": 12106, "end": 12115, "name": "DUP3", "source": 1 }, - { "begin": 12102, "end": 12120, "name": "ADD", "source": 1 }, - { "begin": 12094, "end": 12120, "name": "SWAP1", "source": 1 }, - { "begin": 12094, "end": 12120, "name": "POP", "source": 1 }, + { "begin": 17411, "end": 17414, "name": "DUP3", "source": 2 }, + { "begin": 17407, "end": 17421, "name": "ADD", "source": 2 }, + { "begin": 17399, "end": 17421, "name": "SWAP1", "source": 2 }, + { "begin": 17399, "end": 17421, "name": "POP", "source": 2 }, + { "begin": 17305, "end": 17427, "name": "SWAP2", "source": 2 }, + { "begin": 17305, "end": 17427, "name": "SWAP1", "source": 2 }, + { "begin": 17305, "end": 17427, "name": "POP", "source": 2 }, { - "begin": 12130, - "end": 12199, - "name": "PUSH [tag]", - "source": 1, - "value": "260" + "begin": 17305, + "end": 17427, + "name": "JUMP", + "source": 2, + "value": "[out]" }, { - "begin": 12196, - "end": 12197, + "begin": 17459, + "end": 18422, + "name": "tag", + "source": 2, + "value": "157" + }, + { "begin": 17459, "end": 18422, "name": "JUMPDEST", "source": 2 }, + { + "begin": 17586, + "end": 17589, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 12185, "end": 12194, "name": "DUP4", "source": 1 }, - { "begin": 12181, "end": 12198, "name": "ADD", "source": 1 }, - { "begin": 12172, "end": 12178, "name": "DUP7", "source": 1 }, { - "begin": 12130, - "end": 12199, + "begin": 17615, + "end": 17678, "name": "PUSH [tag]", - "source": 1, - "value": "97" + "source": 2, + "value": "361" + }, + { "begin": 17672, "end": 17677, "name": "DUP3", "source": 2 }, + { + "begin": 17615, + "end": 17678, + "name": "PUSH [tag]", + "source": 2, + "value": "148" }, { - "begin": 12130, - "end": 12199, + "begin": 17615, + "end": 17678, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12130, - "end": 12199, + "begin": 17615, + "end": 17678, "name": "tag", - "source": 1, - "value": "260" + "source": 2, + "value": "361" }, - { "begin": 12130, "end": 12199, "name": "JUMPDEST", "source": 1 }, + { "begin": 17615, "end": 17678, "name": "JUMPDEST", "source": 2 }, { - "begin": 12209, - "end": 12281, + "begin": 17694, + "end": 17779, "name": "PUSH [tag]", - "source": 1, - "value": "261" - }, - { - "begin": 12277, - "end": 12279, - "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "362" }, - { "begin": 12266, "end": 12275, "name": "DUP4", "source": 1 }, - { "begin": 12262, "end": 12280, "name": "ADD", "source": 1 }, - { "begin": 12253, "end": 12259, "name": "DUP6", "source": 1 }, + { "begin": 17772, "end": 17778, "name": "DUP2", "source": 2 }, + { "begin": 17767, "end": 17770, "name": "DUP6", "source": 2 }, { - "begin": 12209, - "end": 12281, + "begin": 17694, + "end": 17779, "name": "PUSH [tag]", - "source": 1, - "value": "99" + "source": 2, + "value": "149" }, { - "begin": 12209, - "end": 12281, + "begin": 17694, + "end": 17779, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12209, - "end": 12281, + "begin": 17694, + "end": 17779, "name": "tag", - "source": 1, - "value": "261" + "source": 2, + "value": "362" }, - { "begin": 12209, "end": 12281, "name": "JUMPDEST", "source": 1 }, + { "begin": 17694, "end": 17779, "name": "JUMPDEST", "source": 2 }, + { "begin": 17687, "end": 17779, "name": "SWAP4", "source": 2 }, + { "begin": 17687, "end": 17779, "name": "POP", "source": 2 }, + { "begin": 17805, "end": 17808, "name": "DUP4", "source": 2 }, { - "begin": 12291, - "end": 12361, - "name": "PUSH [tag]", - "source": 1, - "value": "262" + "begin": 17850, + "end": 17854, + "name": "PUSH", + "source": 2, + "value": "20" }, + { "begin": 17842, "end": 17848, "name": "DUP3", "source": 2 }, + { "begin": 17838, "end": 17855, "name": "MUL", "source": 2 }, + { "begin": 17833, "end": 17836, "name": "DUP6", "source": 2 }, + { "begin": 17829, "end": 17856, "name": "ADD", "source": 2 }, { - "begin": 12357, - "end": 12359, - "name": "PUSH", - "source": 1, - "value": "40" + "begin": 17880, + "end": 17945, + "name": "PUSH [tag]", + "source": 2, + "value": "363" }, - { "begin": 12346, "end": 12355, "name": "DUP4", "source": 1 }, - { "begin": 12342, "end": 12360, "name": "ADD", "source": 1 }, - { "begin": 12333, "end": 12339, "name": "DUP5", "source": 1 }, + { "begin": 17939, "end": 17944, "name": "DUP6", "source": 2 }, { - "begin": 12291, - "end": 12361, + "begin": 17880, + "end": 17945, "name": "PUSH [tag]", - "source": 1, - "value": "97" + "source": 2, + "value": "150" }, { - "begin": 12291, - "end": 12361, + "begin": 17880, + "end": 17945, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12291, - "end": 12361, + "begin": 17880, + "end": 17945, "name": "tag", - "source": 1, - "value": "262" + "source": 2, + "value": "363" }, - { "begin": 12291, "end": 12361, "name": "JUMPDEST", "source": 1 }, - { "begin": 11934, "end": 12368, "name": "SWAP5", "source": 1 }, - { "begin": 11934, "end": 12368, "name": "SWAP4", "source": 1 }, - { "begin": 11934, "end": 12368, "name": "POP", "source": 1 }, - { "begin": 11934, "end": 12368, "name": "POP", "source": 1 }, - { "begin": 11934, "end": 12368, "name": "POP", "source": 1 }, - { "begin": 11934, "end": 12368, "name": "POP", "source": 1 }, + { "begin": 17880, "end": 17945, "name": "JUMPDEST", "source": 2 }, + { "begin": 17968, "end": 17975, "name": "DUP1", "source": 2 }, { - "begin": 11934, - "end": 12368, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 17999, + "end": 18000, + "name": "PUSH", + "source": 2, + "value": "0" }, { - "begin": 12374, - "end": 12486, + "begin": 17984, + "end": 18377, "name": "tag", - "source": 1, - "value": "100" + "source": 2, + "value": "364" }, - { "begin": 12374, "end": 12486, "name": "JUMPDEST", "source": 1 }, + { "begin": 17984, "end": 18377, "name": "JUMPDEST", "source": 2 }, + { "begin": 18009, "end": 18015, "name": "DUP6", "source": 2 }, + { "begin": 18006, "end": 18007, "name": "DUP2", "source": 2 }, + { "begin": 18003, "end": 18016, "name": "LT", "source": 2 }, + { "begin": 17984, "end": 18377, "name": "ISZERO", "source": 2 }, { - "begin": 12457, - "end": 12479, + "begin": 17984, + "end": 18377, "name": "PUSH [tag]", - "source": 1, - "value": "264" + "source": 2, + "value": "366" }, - { "begin": 12473, "end": 12478, "name": "DUP2", "source": 1 }, + { "begin": 17984, "end": 18377, "name": "JUMPI", "source": 2 }, + { "begin": 18080, "end": 18089, "name": "DUP5", "source": 2 }, + { "begin": 18074, "end": 18078, "name": "DUP5", "source": 2 }, + { "begin": 18070, "end": 18090, "name": "SUB", "source": 2 }, + { "begin": 18065, "end": 18068, "name": "DUP10", "source": 2 }, + { "begin": 18058, "end": 18091, "name": "MSTORE", "source": 2 }, + { "begin": 18131, "end": 18137, "name": "DUP2", "source": 2 }, + { "begin": 18125, "end": 18138, "name": "MLOAD", "source": 2 }, { - "begin": 12457, - "end": 12479, + "begin": 18159, + "end": 18241, "name": "PUSH [tag]", - "source": 1, - "value": "61" - }, - { - "begin": 12457, - "end": 12479, - "name": "JUMP", - "source": 1, - "value": "[in]" + "source": 2, + "value": "367" }, + { "begin": 18236, "end": 18240, "name": "DUP6", "source": 2 }, + { "begin": 18221, "end": 18234, "name": "DUP3", "source": 2 }, { - "begin": 12457, - "end": 12479, - "name": "tag", - "source": 1, - "value": "264" + "begin": 18159, + "end": 18241, + "name": "PUSH [tag]", + "source": 2, + "value": "155" }, - { "begin": 12457, "end": 12479, "name": "JUMPDEST", "source": 1 }, - { "begin": 12452, "end": 12455, "name": "DUP3", "source": 1 }, - { "begin": 12445, "end": 12480, "name": "MSTORE", "source": 1 }, - { "begin": 12374, "end": 12486, "name": "POP", "source": 1 }, - { "begin": 12374, "end": 12486, "name": "POP", "source": 1 }, { - "begin": 12374, - "end": 12486, + "begin": 18159, + "end": 18241, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 12492, - "end": 12607, + "begin": 18159, + "end": 18241, "name": "tag", - "source": 1, - "value": "101" + "source": 2, + "value": "367" }, - { "begin": 12492, "end": 12607, "name": "JUMPDEST", "source": 1 }, + { "begin": 18159, "end": 18241, "name": "JUMPDEST", "source": 2 }, + { "begin": 18151, "end": 18241, "name": "SWAP5", "source": 2 }, + { "begin": 18151, "end": 18241, "name": "POP", "source": 2 }, { - "begin": 12577, - "end": 12600, + "begin": 18264, + "end": 18333, "name": "PUSH [tag]", - "source": 1, - "value": "266" + "source": 2, + "value": "368" }, - { "begin": 12594, "end": 12599, "name": "DUP2", "source": 1 }, + { "begin": 18326, "end": 18332, "name": "DUP4", "source": 2 }, { - "begin": 12577, - "end": 12600, + "begin": 18264, + "end": 18333, "name": "PUSH [tag]", - "source": 1, - "value": "64" + "source": 2, + "value": "156" }, { - "begin": 12577, - "end": 12600, + "begin": 18264, + "end": 18333, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12577, - "end": 12600, + "begin": 18264, + "end": 18333, "name": "tag", - "source": 1, - "value": "266" + "source": 2, + "value": "368" }, - { "begin": 12577, "end": 12600, "name": "JUMPDEST", "source": 1 }, - { "begin": 12572, "end": 12575, "name": "DUP3", "source": 1 }, - { "begin": 12565, "end": 12601, "name": "MSTORE", "source": 1 }, - { "begin": 12492, "end": 12607, "name": "POP", "source": 1 }, - { "begin": 12492, "end": 12607, "name": "POP", "source": 1 }, + { "begin": 18264, "end": 18333, "name": "JUMPDEST", "source": 2 }, + { "begin": 18254, "end": 18333, "name": "SWAP3", "source": 2 }, + { "begin": 18254, "end": 18333, "name": "POP", "source": 2 }, { - "begin": 12492, - "end": 12607, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 18362, + "end": 18366, + "name": "PUSH", + "source": 2, + "value": "20" }, + { "begin": 18357, "end": 18360, "name": "DUP11", "source": 2 }, + { "begin": 18353, "end": 18367, "name": "ADD", "source": 2 }, + { "begin": 18346, "end": 18367, "name": "SWAP10", "source": 2 }, + { "begin": 18346, "end": 18367, "name": "POP", "source": 2 }, + { "begin": 18044, "end": 18377, "name": "POP", "source": 2 }, { - "begin": 12613, - "end": 12711, - "name": "tag", - "source": 1, - "value": "102" + "begin": 18031, + "end": 18032, + "name": "PUSH", + "source": 2, + "value": "1" }, - { "begin": 12613, "end": 12711, "name": "JUMPDEST", "source": 1 }, + { "begin": 18028, "end": 18029, "name": "DUP2", "source": 2 }, + { "begin": 18024, "end": 18033, "name": "ADD", "source": 2 }, + { "begin": 18019, "end": 18033, "name": "SWAP1", "source": 2 }, + { "begin": 18019, "end": 18033, "name": "POP", "source": 2 }, { - "begin": 12664, - "end": 12670, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 17984, + "end": 18377, + "name": "PUSH [tag]", + "source": 2, + "value": "364" }, - { "begin": 12698, "end": 12703, "name": "DUP2", "source": 1 }, - { "begin": 12692, "end": 12704, "name": "MLOAD", "source": 1 }, - { "begin": 12682, "end": 12704, "name": "SWAP1", "source": 1 }, - { "begin": 12682, "end": 12704, "name": "POP", "source": 1 }, - { "begin": 12613, "end": 12711, "name": "SWAP2", "source": 1 }, - { "begin": 12613, "end": 12711, "name": "SWAP1", "source": 1 }, - { "begin": 12613, "end": 12711, "name": "POP", "source": 1 }, + { "begin": 17984, "end": 18377, "name": "JUMP", "source": 2 }, { - "begin": 12613, - "end": 12711, + "begin": 17984, + "end": 18377, + "name": "tag", + "source": 2, + "value": "366" + }, + { "begin": 17984, "end": 18377, "name": "JUMPDEST", "source": 2 }, + { "begin": 17988, "end": 18002, "name": "POP", "source": 2 }, + { "begin": 18393, "end": 18397, "name": "DUP3", "source": 2 }, + { "begin": 18386, "end": 18397, "name": "SWAP8", "source": 2 }, + { "begin": 18386, "end": 18397, "name": "POP", "source": 2 }, + { "begin": 18413, "end": 18416, "name": "DUP8", "source": 2 }, + { "begin": 18406, "end": 18416, "name": "SWAP6", "source": 2 }, + { "begin": 18406, "end": 18416, "name": "POP", "source": 2 }, + { "begin": 17591, "end": 18422, "name": "POP", "source": 2 }, + { "begin": 17591, "end": 18422, "name": "POP", "source": 2 }, + { "begin": 17591, "end": 18422, "name": "POP", "source": 2 }, + { "begin": 17591, "end": 18422, "name": "POP", "source": 2 }, + { "begin": 17591, "end": 18422, "name": "POP", "source": 2 }, + { "begin": 17459, "end": 18422, "name": "SWAP3", "source": 2 }, + { "begin": 17459, "end": 18422, "name": "SWAP2", "source": 2 }, + { "begin": 17459, "end": 18422, "name": "POP", "source": 2 }, + { "begin": 17459, "end": 18422, "name": "POP", "source": 2 }, + { + "begin": 17459, + "end": 18422, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 12717, - "end": 12885, + "begin": 18508, + "end": 19175, "name": "tag", - "source": 1, - "value": "103" + "source": 2, + "value": "158" }, - { "begin": 12717, "end": 12885, "name": "JUMPDEST", "source": 1 }, + { "begin": 18508, "end": 19175, "name": "JUMPDEST", "source": 2 }, { - "begin": 12800, - "end": 12811, + "begin": 18637, + "end": 18640, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 12834, "end": 12840, "name": "DUP3", "source": 1 }, - { "begin": 12829, "end": 12832, "name": "DUP3", "source": 1 }, - { "begin": 12822, "end": 12841, "name": "MSTORE", "source": 1 }, { - "begin": 12874, - "end": 12878, + "begin": 18673, + "end": 18677, "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "40" }, - { "begin": 12869, "end": 12872, "name": "DUP3", "source": 1 }, - { "begin": 12865, "end": 12879, "name": "ADD", "source": 1 }, - { "begin": 12850, "end": 12879, "name": "SWAP1", "source": 1 }, - { "begin": 12850, "end": 12879, "name": "POP", "source": 1 }, - { "begin": 12717, "end": 12885, "name": "SWAP3", "source": 1 }, - { "begin": 12717, "end": 12885, "name": "SWAP2", "source": 1 }, - { "begin": 12717, "end": 12885, "name": "POP", "source": 1 }, - { "begin": 12717, "end": 12885, "name": "POP", "source": 1 }, + { "begin": 18668, "end": 18671, "name": "DUP4", "source": 2 }, + { "begin": 18664, "end": 18678, "name": "ADD", "source": 2 }, { - "begin": 12717, - "end": 12885, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 18763, + "end": 18767, + "name": "PUSH", + "source": 2, + "value": "0" }, + { "begin": 18756, "end": 18761, "name": "DUP4", "source": 2 }, + { "begin": 18752, "end": 18768, "name": "ADD", "source": 2 }, + { "begin": 18746, "end": 18769, "name": "MLOAD", "source": 2 }, { - "begin": 12891, - "end": 13198, - "name": "tag", - "source": 1, - "value": "104" + "begin": 18782, + "end": 18841, + "name": "PUSH [tag]", + "source": 2, + "value": "370" }, - { "begin": 12891, "end": 13198, "name": "JUMPDEST", "source": 1 }, { - "begin": 12959, - "end": 12960, + "begin": 18835, + "end": 18839, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 18830, "end": 18833, "name": "DUP7", "source": 2 }, + { "begin": 18826, "end": 18840, "name": "ADD", "source": 2 }, + { "begin": 18812, "end": 18824, "name": "DUP3", "source": 2 }, + { + "begin": 18782, + "end": 18841, + "name": "PUSH [tag]", + "source": 2, + "value": "147" + }, { - "begin": 12969, - "end": 13082, + "begin": 18782, + "end": 18841, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 18782, + "end": 18841, "name": "tag", - "source": 1, - "value": "270" + "source": 2, + "value": "370" }, - { "begin": 12969, "end": 13082, "name": "JUMPDEST", "source": 1 }, - { "begin": 12983, "end": 12989, "name": "DUP4", "source": 1 }, - { "begin": 12980, "end": 12981, "name": "DUP2", "source": 1 }, - { "begin": 12977, "end": 12990, "name": "LT", "source": 1 }, - { "begin": 12969, "end": 13082, "name": "ISZERO", "source": 1 }, + { "begin": 18782, "end": 18841, "name": "JUMPDEST", "source": 2 }, + { "begin": 18688, "end": 18851, "name": "POP", "source": 2 }, { - "begin": 12969, - "end": 13082, - "name": "PUSH [tag]", - "source": 1, - "value": "272" + "begin": 18937, + "end": 18941, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 12969, "end": 13082, "name": "JUMPI", "source": 1 }, - { "begin": 13068, "end": 13069, "name": "DUP1", "source": 1 }, - { "begin": 13063, "end": 13066, "name": "DUP3", "source": 1 }, - { "begin": 13059, "end": 13070, "name": "ADD", "source": 1 }, - { "begin": 13053, "end": 13071, "name": "MLOAD", "source": 1 }, - { "begin": 13049, "end": 13050, "name": "DUP2", "source": 1 }, - { "begin": 13044, "end": 13047, "name": "DUP5", "source": 1 }, - { "begin": 13040, "end": 13051, "name": "ADD", "source": 1 }, - { "begin": 13033, "end": 13072, "name": "MSTORE", "source": 1 }, + { "begin": 18930, "end": 18935, "name": "DUP4", "source": 2 }, + { "begin": 18926, "end": 18942, "name": "ADD", "source": 2 }, + { "begin": 18920, "end": 18943, "name": "MLOAD", "source": 2 }, + { "begin": 18990, "end": 18993, "name": "DUP5", "source": 2 }, + { "begin": 18984, "end": 18988, "name": "DUP3", "source": 2 }, + { "begin": 18980, "end": 18994, "name": "SUB", "source": 2 }, { - "begin": 13005, - "end": 13007, + "begin": 18973, + "end": 18977, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 13002, "end": 13003, "name": "DUP2", "source": 1 }, - { "begin": 12998, "end": 13008, "name": "ADD", "source": 1 }, - { "begin": 12993, "end": 13008, "name": "SWAP1", "source": 1 }, - { "begin": 12993, "end": 13008, "name": "POP", "source": 1 }, + { "begin": 18968, "end": 18971, "name": "DUP7", "source": 2 }, + { "begin": 18964, "end": 18978, "name": "ADD", "source": 2 }, + { "begin": 18957, "end": 18995, "name": "MSTORE", "source": 2 }, { - "begin": 12969, - "end": 13082, + "begin": 19016, + "end": 19137, "name": "PUSH [tag]", - "source": 1, - "value": "270" + "source": 2, + "value": "371" + }, + { "begin": 19132, "end": 19136, "name": "DUP3", "source": 2 }, + { "begin": 19118, "end": 19130, "name": "DUP3", "source": 2 }, + { + "begin": 19016, + "end": 19137, + "name": "PUSH [tag]", + "source": 2, + "value": "157" + }, + { + "begin": 19016, + "end": 19137, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 12969, "end": 13082, "name": "JUMP", "source": 1 }, { - "begin": 12969, - "end": 13082, + "begin": 19016, + "end": 19137, "name": "tag", - "source": 1, - "value": "272" + "source": 2, + "value": "371" + }, + { "begin": 19016, "end": 19137, "name": "JUMPDEST", "source": 2 }, + { "begin": 19008, "end": 19137, "name": "SWAP2", "source": 2 }, + { "begin": 19008, "end": 19137, "name": "POP", "source": 2 }, + { "begin": 18861, "end": 19148, "name": "POP", "source": 2 }, + { "begin": 19165, "end": 19169, "name": "DUP1", "source": 2 }, + { "begin": 19158, "end": 19169, "name": "SWAP2", "source": 2 }, + { "begin": 19158, "end": 19169, "name": "POP", "source": 2 }, + { "begin": 18642, "end": 19175, "name": "POP", "source": 2 }, + { "begin": 18508, "end": 19175, "name": "SWAP3", "source": 2 }, + { "begin": 18508, "end": 19175, "name": "SWAP2", "source": 2 }, + { "begin": 18508, "end": 19175, "name": "POP", "source": 2 }, + { "begin": 18508, "end": 19175, "name": "POP", "source": 2 }, + { + "begin": 18508, + "end": 19175, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 12969, "end": 13082, "name": "JUMPDEST", "source": 1 }, - { "begin": 13100, "end": 13106, "name": "DUP4", "source": 1 }, - { "begin": 13097, "end": 13098, "name": "DUP2", "source": 1 }, - { "begin": 13094, "end": 13107, "name": "GT", "source": 1 }, - { "begin": 13091, "end": 13192, "name": "ISZERO", "source": 1 }, { - "begin": 13091, - "end": 13192, - "name": "PUSH [tag]", - "source": 1, - "value": "273" + "begin": 19181, + "end": 19349, + "name": "tag", + "source": 2, + "value": "159" }, - { "begin": 13091, "end": 13192, "name": "JUMPI", "source": 1 }, + { "begin": 19181, "end": 19349, "name": "JUMPDEST", "source": 2 }, { - "begin": 13180, - "end": 13181, + "begin": 19264, + "end": 19275, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 13171, "end": 13177, "name": "DUP5", "source": 1 }, - { "begin": 13166, "end": 13169, "name": "DUP5", "source": 1 }, - { "begin": 13162, "end": 13178, "name": "ADD", "source": 1 }, - { "begin": 13155, "end": 13182, "name": "MSTORE", "source": 1 }, + { "begin": 19298, "end": 19304, "name": "DUP3", "source": 2 }, + { "begin": 19293, "end": 19296, "name": "DUP3", "source": 2 }, + { "begin": 19286, "end": 19305, "name": "MSTORE", "source": 2 }, { - "begin": 13091, - "end": 13192, - "name": "tag", - "source": 1, - "value": "273" + "begin": 19338, + "end": 19342, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 13091, "end": 13192, "name": "JUMPDEST", "source": 1 }, - { "begin": 12940, "end": 13198, "name": "POP", "source": 1 }, - { "begin": 12891, "end": 13198, "name": "POP", "source": 1 }, - { "begin": 12891, "end": 13198, "name": "POP", "source": 1 }, - { "begin": 12891, "end": 13198, "name": "POP", "source": 1 }, - { - "begin": 12891, - "end": 13198, + { "begin": 19333, "end": 19336, "name": "DUP3", "source": 2 }, + { "begin": 19329, "end": 19343, "name": "ADD", "source": 2 }, + { "begin": 19314, "end": 19343, "name": "SWAP1", "source": 2 }, + { "begin": 19314, "end": 19343, "name": "POP", "source": 2 }, + { "begin": 19181, "end": 19349, "name": "SWAP3", "source": 2 }, + { "begin": 19181, "end": 19349, "name": "SWAP2", "source": 2 }, + { "begin": 19181, "end": 19349, "name": "POP", "source": 2 }, + { "begin": 19181, "end": 19349, "name": "POP", "source": 2 }, + { + "begin": 19181, + "end": 19349, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 13204, - "end": 13564, + "begin": 19355, + "end": 19715, "name": "tag", - "source": 1, - "value": "105" + "source": 2, + "value": "160" }, - { "begin": 13204, "end": 13564, "name": "JUMPDEST", "source": 1 }, + { "begin": 19355, "end": 19715, "name": "JUMPDEST", "source": 2 }, { - "begin": 13290, - "end": 13293, + "begin": 19441, + "end": 19444, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 13318, - "end": 13356, + "begin": 19469, + "end": 19507, "name": "PUSH [tag]", - "source": 1, - "value": "275" + "source": 2, + "value": "374" }, - { "begin": 13350, "end": 13355, "name": "DUP3", "source": 1 }, + { "begin": 19501, "end": 19506, "name": "DUP3", "source": 2 }, { - "begin": 13318, - "end": 13356, + "begin": 19469, + "end": 19507, "name": "PUSH [tag]", - "source": 1, - "value": "102" + "source": 2, + "value": "151" }, { - "begin": 13318, - "end": 13356, + "begin": 19469, + "end": 19507, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13318, - "end": 13356, + "begin": 19469, + "end": 19507, "name": "tag", - "source": 1, - "value": "275" + "source": 2, + "value": "374" }, - { "begin": 13318, "end": 13356, "name": "JUMPDEST", "source": 1 }, + { "begin": 19469, "end": 19507, "name": "JUMPDEST", "source": 2 }, { - "begin": 13372, - "end": 13442, + "begin": 19523, + "end": 19593, "name": "PUSH [tag]", - "source": 1, - "value": "276" + "source": 2, + "value": "375" }, - { "begin": 13435, "end": 13441, "name": "DUP2", "source": 1 }, - { "begin": 13430, "end": 13433, "name": "DUP6", "source": 1 }, + { "begin": 19586, "end": 19592, "name": "DUP2", "source": 2 }, + { "begin": 19581, "end": 19584, "name": "DUP6", "source": 2 }, { - "begin": 13372, - "end": 13442, + "begin": 19523, + "end": 19593, "name": "PUSH [tag]", - "source": 1, - "value": "103" + "source": 2, + "value": "159" }, { - "begin": 13372, - "end": 13442, + "begin": 19523, + "end": 19593, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13372, - "end": 13442, + "begin": 19523, + "end": 19593, "name": "tag", - "source": 1, - "value": "276" + "source": 2, + "value": "375" }, - { "begin": 13372, "end": 13442, "name": "JUMPDEST", "source": 1 }, - { "begin": 13365, "end": 13442, "name": "SWAP4", "source": 1 }, - { "begin": 13365, "end": 13442, "name": "POP", "source": 1 }, + { "begin": 19523, "end": 19593, "name": "JUMPDEST", "source": 2 }, + { "begin": 19516, "end": 19593, "name": "SWAP4", "source": 2 }, + { "begin": 19516, "end": 19593, "name": "POP", "source": 2 }, { - "begin": 13451, - "end": 13503, + "begin": 19602, + "end": 19654, "name": "PUSH [tag]", - "source": 1, - "value": "277" + "source": 2, + "value": "376" }, - { "begin": 13496, "end": 13502, "name": "DUP2", "source": 1 }, - { "begin": 13491, "end": 13494, "name": "DUP6", "source": 1 }, + { "begin": 19647, "end": 19653, "name": "DUP2", "source": 2 }, + { "begin": 19642, "end": 19645, "name": "DUP6", "source": 2 }, { - "begin": 13484, - "end": 13488, + "begin": 19635, + "end": 19639, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 13477, "end": 13482, "name": "DUP7", "source": 1 }, - { "begin": 13473, "end": 13489, "name": "ADD", "source": 1 }, + { "begin": 19628, "end": 19633, "name": "DUP7", "source": 2 }, + { "begin": 19624, "end": 19640, "name": "ADD", "source": 2 }, { - "begin": 13451, - "end": 13503, + "begin": 19602, + "end": 19654, "name": "PUSH [tag]", - "source": 1, - "value": "104" + "source": 2, + "value": "153" }, { - "begin": 13451, - "end": 13503, + "begin": 19602, + "end": 19654, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13451, - "end": 13503, + "begin": 19602, + "end": 19654, "name": "tag", - "source": 1, - "value": "277" + "source": 2, + "value": "376" }, - { "begin": 13451, "end": 13503, "name": "JUMPDEST", "source": 1 }, + { "begin": 19602, "end": 19654, "name": "JUMPDEST", "source": 2 }, { - "begin": 13528, - "end": 13557, + "begin": 19679, + "end": 19708, "name": "PUSH [tag]", - "source": 1, - "value": "278" + "source": 2, + "value": "377" }, - { "begin": 13550, "end": 13556, "name": "DUP2", "source": 1 }, + { "begin": 19701, "end": 19707, "name": "DUP2", "source": 2 }, { - "begin": 13528, - "end": 13557, + "begin": 19679, + "end": 19708, "name": "PUSH [tag]", - "source": 1, - "value": "76" + "source": 2, + "value": "109" }, { - "begin": 13528, - "end": 13557, + "begin": 19679, + "end": 19708, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13528, - "end": 13557, + "begin": 19679, + "end": 19708, "name": "tag", - "source": 1, - "value": "278" - }, - { "begin": 13528, "end": 13557, "name": "JUMPDEST", "source": 1 }, - { "begin": 13523, "end": 13526, "name": "DUP5", "source": 1 }, - { "begin": 13519, "end": 13558, "name": "ADD", "source": 1 }, - { "begin": 13512, "end": 13558, "name": "SWAP2", "source": 1 }, - { "begin": 13512, "end": 13558, "name": "POP", "source": 1 }, - { "begin": 13294, "end": 13564, "name": "POP", "source": 1 }, - { "begin": 13204, "end": 13564, "name": "SWAP3", "source": 1 }, - { "begin": 13204, "end": 13564, "name": "SWAP2", "source": 1 }, - { "begin": 13204, "end": 13564, "name": "POP", "source": 1 }, - { "begin": 13204, "end": 13564, "name": "POP", "source": 1 }, - { - "begin": 13204, - "end": 13564, - "name": "JUMP", - "source": 1, + "source": 2, + "value": "377" + }, + { "begin": 19679, "end": 19708, "name": "JUMPDEST", "source": 2 }, + { "begin": 19674, "end": 19677, "name": "DUP5", "source": 2 }, + { "begin": 19670, "end": 19709, "name": "ADD", "source": 2 }, + { "begin": 19663, "end": 19709, "name": "SWAP2", "source": 2 }, + { "begin": 19663, "end": 19709, "name": "POP", "source": 2 }, + { "begin": 19445, "end": 19715, "name": "POP", "source": 2 }, + { "begin": 19355, "end": 19715, "name": "SWAP3", "source": 2 }, + { "begin": 19355, "end": 19715, "name": "SWAP2", "source": 2 }, + { "begin": 19355, "end": 19715, "name": "POP", "source": 2 }, + { "begin": 19355, "end": 19715, "name": "POP", "source": 2 }, + { + "begin": 19355, + "end": 19715, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 13570, - "end": 14305, + "begin": 19721, + "end": 20528, "name": "tag", - "source": 1, - "value": "34" + "source": 2, + "value": "57" }, - { "begin": 13570, "end": 14305, "name": "JUMPDEST", "source": 1 }, + { "begin": 19721, "end": 20528, "name": "JUMPDEST", "source": 2 }, { - "begin": 13785, - "end": 13789, + "begin": 19974, + "end": 19978, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 13823, - "end": 13826, + "begin": 20012, + "end": 20015, "name": "PUSH", - "source": 1, - "value": "A0" - }, - { "begin": 13812, "end": 13821, "name": "DUP3", "source": 1 }, - { "begin": 13808, "end": 13827, "name": "ADD", "source": 1 }, - { "begin": 13800, "end": 13827, "name": "SWAP1", "source": 1 }, - { "begin": 13800, "end": 13827, "name": "POP", "source": 1 }, - { - "begin": 13837, - "end": 13904, - "name": "PUSH [tag]", - "source": 1, - "value": "280" + "source": 2, + "value": "80" }, + { "begin": 20001, "end": 20010, "name": "DUP3", "source": 2 }, + { "begin": 19997, "end": 20016, "name": "ADD", "source": 2 }, + { "begin": 19989, "end": 20016, "name": "SWAP1", "source": 2 }, + { "begin": 19989, "end": 20016, "name": "POP", "source": 2 }, + { "begin": 20062, "end": 20071, "name": "DUP2", "source": 2 }, + { "begin": 20056, "end": 20060, "name": "DUP2", "source": 2 }, + { "begin": 20052, "end": 20072, "name": "SUB", "source": 2 }, { - "begin": 13901, - "end": 13902, + "begin": 20048, + "end": 20049, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 13890, "end": 13899, "name": "DUP4", "source": 1 }, - { "begin": 13886, "end": 13903, "name": "ADD", "source": 1 }, - { "begin": 13877, "end": 13883, "name": "DUP9", "source": 1 }, - { - "begin": 13837, - "end": 13904, - "name": "PUSH [tag]", - "source": 1, - "value": "100" - }, - { - "begin": 13837, - "end": 13904, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 13837, - "end": 13904, - "name": "tag", - "source": 1, - "value": "280" - }, - { "begin": 13837, "end": 13904, "name": "JUMPDEST", "source": 1 }, + { "begin": 20037, "end": 20046, "name": "DUP4", "source": 2 }, + { "begin": 20033, "end": 20050, "name": "ADD", "source": 2 }, + { "begin": 20026, "end": 20073, "name": "MSTORE", "source": 2 }, { - "begin": 13914, - "end": 13984, + "begin": 20090, + "end": 20208, "name": "PUSH [tag]", - "source": 1, - "value": "281" + "source": 2, + "value": "379" }, + { "begin": 20203, "end": 20207, "name": "DUP2", "source": 2 }, + { "begin": 20194, "end": 20200, "name": "DUP8", "source": 2 }, { - "begin": 13980, - "end": 13982, - "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 13969, "end": 13978, "name": "DUP4", "source": 1 }, - { "begin": 13965, "end": 13983, "name": "ADD", "source": 1 }, - { "begin": 13956, "end": 13962, "name": "DUP8", "source": 1 }, - { - "begin": 13914, - "end": 13984, + "begin": 20090, + "end": 20208, "name": "PUSH [tag]", - "source": 1, - "value": "101" + "source": 2, + "value": "158" }, { - "begin": 13914, - "end": 13984, + "begin": 20090, + "end": 20208, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13914, - "end": 13984, + "begin": 20090, + "end": 20208, "name": "tag", - "source": 1, - "value": "281" + "source": 2, + "value": "379" }, - { "begin": 13914, "end": 13984, "name": "JUMPDEST", "source": 1 }, + { "begin": 20090, "end": 20208, "name": "JUMPDEST", "source": 2 }, + { "begin": 20082, "end": 20208, "name": "SWAP1", "source": 2 }, + { "begin": 20082, "end": 20208, "name": "POP", "source": 2 }, { - "begin": 13994, - "end": 14066, + "begin": 20218, + "end": 20290, "name": "PUSH [tag]", - "source": 1, - "value": "282" + "source": 2, + "value": "380" }, { - "begin": 14062, - "end": 14064, + "begin": 20286, + "end": 20288, "name": "PUSH", - "source": 1, - "value": "40" + "source": 2, + "value": "20" }, - { "begin": 14051, "end": 14060, "name": "DUP4", "source": 1 }, - { "begin": 14047, "end": 14065, "name": "ADD", "source": 1 }, - { "begin": 14038, "end": 14044, "name": "DUP7", "source": 1 }, + { "begin": 20275, "end": 20284, "name": "DUP4", "source": 2 }, + { "begin": 20271, "end": 20289, "name": "ADD", "source": 2 }, + { "begin": 20262, "end": 20268, "name": "DUP7", "source": 2 }, { - "begin": 13994, - "end": 14066, + "begin": 20218, + "end": 20290, "name": "PUSH [tag]", - "source": 1, - "value": "89" + "source": 2, + "value": "143" }, { - "begin": 13994, - "end": 14066, + "begin": 20218, + "end": 20290, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13994, - "end": 14066, + "begin": 20218, + "end": 20290, "name": "tag", - "source": 1, - "value": "282" + "source": 2, + "value": "380" }, - { "begin": 13994, "end": 14066, "name": "JUMPDEST", "source": 1 }, + { "begin": 20218, "end": 20290, "name": "JUMPDEST", "source": 2 }, { - "begin": 14076, - "end": 14146, + "begin": 20300, + "end": 20370, "name": "PUSH [tag]", - "source": 1, - "value": "283" + "source": 2, + "value": "381" }, { - "begin": 14142, - "end": 14144, + "begin": 20366, + "end": 20368, "name": "PUSH", - "source": 1, - "value": "60" + "source": 2, + "value": "40" }, - { "begin": 14131, "end": 14140, "name": "DUP4", "source": 1 }, - { "begin": 14127, "end": 14145, "name": "ADD", "source": 1 }, - { "begin": 14118, "end": 14124, "name": "DUP6", "source": 1 }, + { "begin": 20355, "end": 20364, "name": "DUP4", "source": 2 }, + { "begin": 20351, "end": 20369, "name": "ADD", "source": 2 }, + { "begin": 20342, "end": 20348, "name": "DUP6", "source": 2 }, { - "begin": 14076, - "end": 14146, + "begin": 20300, + "end": 20370, "name": "PUSH [tag]", - "source": 1, - "value": "97" + "source": 2, + "value": "146" }, { - "begin": 14076, - "end": 14146, + "begin": 20300, + "end": 20370, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14076, - "end": 14146, + "begin": 20300, + "end": 20370, "name": "tag", - "source": 1, - "value": "283" + "source": 2, + "value": "381" }, - { "begin": 14076, "end": 14146, "name": "JUMPDEST", "source": 1 }, - { "begin": 14194, "end": 14203, "name": "DUP2", "source": 1 }, - { "begin": 14188, "end": 14192, "name": "DUP2", "source": 1 }, - { "begin": 14184, "end": 14204, "name": "SUB", "source": 1 }, + { "begin": 20300, "end": 20370, "name": "JUMPDEST", "source": 2 }, + { "begin": 20417, "end": 20426, "name": "DUP2", "source": 2 }, + { "begin": 20411, "end": 20415, "name": "DUP2", "source": 2 }, + { "begin": 20407, "end": 20427, "name": "SUB", "source": 2 }, { - "begin": 14178, - "end": 14181, + "begin": 20402, + "end": 20404, "name": "PUSH", - "source": 1, - "value": "80" + "source": 2, + "value": "60" }, - { "begin": 14167, "end": 14176, "name": "DUP4", "source": 1 }, - { "begin": 14163, "end": 14182, "name": "ADD", "source": 1 }, - { "begin": 14156, "end": 14205, "name": "MSTORE", "source": 1 }, + { "begin": 20391, "end": 20400, "name": "DUP4", "source": 2 }, + { "begin": 20387, "end": 20405, "name": "ADD", "source": 2 }, + { "begin": 20380, "end": 20428, "name": "MSTORE", "source": 2 }, { - "begin": 14222, - "end": 14298, + "begin": 20445, + "end": 20521, "name": "PUSH [tag]", - "source": 1, - "value": "284" + "source": 2, + "value": "382" }, - { "begin": 14293, "end": 14297, "name": "DUP2", "source": 1 }, - { "begin": 14284, "end": 14290, "name": "DUP5", "source": 1 }, + { "begin": 20516, "end": 20520, "name": "DUP2", "source": 2 }, + { "begin": 20507, "end": 20513, "name": "DUP5", "source": 2 }, { - "begin": 14222, - "end": 14298, + "begin": 20445, + "end": 20521, "name": "PUSH [tag]", - "source": 1, - "value": "105" + "source": 2, + "value": "160" }, { - "begin": 14222, - "end": 14298, + "begin": 20445, + "end": 20521, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14222, - "end": 14298, + "begin": 20445, + "end": 20521, "name": "tag", - "source": 1, - "value": "284" - }, - { "begin": 14222, "end": 14298, "name": "JUMPDEST", "source": 1 }, - { "begin": 14214, "end": 14298, "name": "SWAP1", "source": 1 }, - { "begin": 14214, "end": 14298, "name": "POP", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "SWAP7", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "SWAP6", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "POP", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "POP", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "POP", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "POP", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "POP", "source": 1 }, - { "begin": 13570, "end": 14305, "name": "POP", "source": 1 }, - { - "begin": 13570, - "end": 14305, - "name": "JUMP", - "source": 1, + "source": 2, + "value": "382" + }, + { "begin": 20445, "end": 20521, "name": "JUMPDEST", "source": 2 }, + { "begin": 20437, "end": 20521, "name": "SWAP1", "source": 2 }, + { "begin": 20437, "end": 20521, "name": "POP", "source": 2 }, + { "begin": 19721, "end": 20528, "name": "SWAP6", "source": 2 }, + { "begin": 19721, "end": 20528, "name": "SWAP5", "source": 2 }, + { "begin": 19721, "end": 20528, "name": "POP", "source": 2 }, + { "begin": 19721, "end": 20528, "name": "POP", "source": 2 }, + { "begin": 19721, "end": 20528, "name": "POP", "source": 2 }, + { "begin": 19721, "end": 20528, "name": "POP", "source": 2 }, + { "begin": 19721, "end": 20528, "name": "POP", "source": 2 }, + { + "begin": 19721, + "end": 20528, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 14311, - "end": 14529, + "begin": 20534, + "end": 21512, "name": "tag", - "source": 1, - "value": "40" + "source": 2, + "value": "63" }, - { "begin": 14311, "end": 14529, "name": "JUMPDEST", "source": 1 }, + { "begin": 20534, "end": 21512, "name": "JUMPDEST", "source": 2 }, { - "begin": 14402, - "end": 14406, + "begin": 20847, + "end": 20851, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 14440, - "end": 14442, + "begin": 20885, + "end": 20888, "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 14429, "end": 14438, "name": "DUP3", "source": 1 }, - { "begin": 14425, "end": 14443, "name": "ADD", "source": 1 }, - { "begin": 14417, "end": 14443, "name": "SWAP1", "source": 1 }, - { "begin": 14417, "end": 14443, "name": "POP", "source": 1 }, - { - "begin": 14453, - "end": 14522, - "name": "PUSH [tag]", - "source": 1, - "value": "286" + "source": 2, + "value": "80" }, + { "begin": 20874, "end": 20883, "name": "DUP3", "source": 2 }, + { "begin": 20870, "end": 20889, "name": "ADD", "source": 2 }, + { "begin": 20862, "end": 20889, "name": "SWAP1", "source": 2 }, + { "begin": 20862, "end": 20889, "name": "POP", "source": 2 }, + { "begin": 20935, "end": 20944, "name": "DUP2", "source": 2 }, + { "begin": 20929, "end": 20933, "name": "DUP2", "source": 2 }, + { "begin": 20925, "end": 20945, "name": "SUB", "source": 2 }, { - "begin": 14519, - "end": 14520, + "begin": 20921, + "end": 20922, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 14508, "end": 14517, "name": "DUP4", "source": 1 }, - { "begin": 14504, "end": 14521, "name": "ADD", "source": 1 }, - { "begin": 14495, "end": 14501, "name": "DUP5", "source": 1 }, + { "begin": 20910, "end": 20919, "name": "DUP4", "source": 2 }, + { "begin": 20906, "end": 20923, "name": "ADD", "source": 2 }, + { "begin": 20899, "end": 20946, "name": "MSTORE", "source": 2 }, { - "begin": 14453, - "end": 14522, + "begin": 20963, + "end": 21081, "name": "PUSH [tag]", - "source": 1, - "value": "101" + "source": 2, + "value": "384" }, + { "begin": 21076, "end": 21080, "name": "DUP2", "source": 2 }, + { "begin": 21067, "end": 21073, "name": "DUP8", "source": 2 }, { - "begin": 14453, - "end": 14522, - "name": "JUMP", - "source": 1, - "value": "[in]" - }, - { - "begin": 14453, - "end": 14522, - "name": "tag", - "source": 1, - "value": "286" + "begin": 20963, + "end": 21081, + "name": "PUSH [tag]", + "source": 2, + "value": "158" }, - { "begin": 14453, "end": 14522, "name": "JUMPDEST", "source": 1 }, - { "begin": 14311, "end": 14529, "name": "SWAP3", "source": 1 }, - { "begin": 14311, "end": 14529, "name": "SWAP2", "source": 1 }, - { "begin": 14311, "end": 14529, "name": "POP", "source": 1 }, - { "begin": 14311, "end": 14529, "name": "POP", "source": 1 }, { - "begin": 14311, - "end": 14529, + "begin": 20963, + "end": 21081, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 14535, - "end": 14678, + "begin": 20963, + "end": 21081, "name": "tag", - "source": 1, - "value": "106" + "source": 2, + "value": "384" }, - { "begin": 14535, "end": 14678, "name": "JUMPDEST", "source": 1 }, + { "begin": 20963, "end": 21081, "name": "JUMPDEST", "source": 2 }, + { "begin": 20955, "end": 21081, "name": "SWAP1", "source": 2 }, + { "begin": 20955, "end": 21081, "name": "POP", "source": 2 }, + { "begin": 21128, "end": 21137, "name": "DUP2", "source": 2 }, + { "begin": 21122, "end": 21126, "name": "DUP2", "source": 2 }, + { "begin": 21118, "end": 21138, "name": "SUB", "source": 2 }, { - "begin": 14592, - "end": 14597, + "begin": 21113, + "end": 21115, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "20" }, - { "begin": 14623, "end": 14629, "name": "DUP2", "source": 1 }, - { "begin": 14617, "end": 14630, "name": "MLOAD", "source": 1 }, - { "begin": 14608, "end": 14630, "name": "SWAP1", "source": 1 }, - { "begin": 14608, "end": 14630, "name": "POP", "source": 1 }, + { "begin": 21102, "end": 21111, "name": "DUP4", "source": 2 }, + { "begin": 21098, "end": 21116, "name": "ADD", "source": 2 }, + { "begin": 21091, "end": 21139, "name": "MSTORE", "source": 2 }, { - "begin": 14639, - "end": 14672, + "begin": 21156, + "end": 21274, "name": "PUSH [tag]", - "source": 1, - "value": "288" + "source": 2, + "value": "385" }, - { "begin": 14666, "end": 14671, "name": "DUP2", "source": 1 }, + { "begin": 21269, "end": 21273, "name": "DUP2", "source": 2 }, + { "begin": 21260, "end": 21266, "name": "DUP7", "source": 2 }, { - "begin": 14639, - "end": 14672, + "begin": 21156, + "end": 21274, "name": "PUSH [tag]", - "source": 1, - "value": "69" + "source": 2, + "value": "158" }, { - "begin": 14639, - "end": 14672, + "begin": 21156, + "end": 21274, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14639, - "end": 14672, - "name": "tag", - "source": 1, - "value": "288" - }, - { "begin": 14639, "end": 14672, "name": "JUMPDEST", "source": 1 }, - { "begin": 14535, "end": 14678, "name": "SWAP3", "source": 1 }, - { "begin": 14535, "end": 14678, "name": "SWAP2", "source": 1 }, - { "begin": 14535, "end": 14678, "name": "POP", "source": 1 }, - { "begin": 14535, "end": 14678, "name": "POP", "source": 1 }, - { - "begin": 14535, - "end": 14678, - "name": "JUMP", - "source": 1, - "value": "[out]" - }, - { - "begin": 14684, - "end": 15035, + "begin": 21156, + "end": 21274, "name": "tag", - "source": 1, - "value": "44" - }, - { "begin": 14684, "end": 15035, "name": "JUMPDEST", "source": 1 }, - { - "begin": 14754, - "end": 14760, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 14803, - "end": 14805, - "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "385" }, - { "begin": 14791, "end": 14800, "name": "DUP3", "source": 1 }, - { "begin": 14782, "end": 14789, "name": "DUP5", "source": 1 }, - { "begin": 14778, "end": 14801, "name": "SUB", "source": 1 }, - { "begin": 14774, "end": 14806, "name": "SLT", "source": 1 }, - { "begin": 14771, "end": 14890, "name": "ISZERO", "source": 1 }, + { "begin": 21156, "end": 21274, "name": "JUMPDEST", "source": 2 }, + { "begin": 21148, "end": 21274, "name": "SWAP1", "source": 2 }, + { "begin": 21148, "end": 21274, "name": "POP", "source": 2 }, { - "begin": 14771, - "end": 14890, + "begin": 21284, + "end": 21354, "name": "PUSH [tag]", - "source": 1, - "value": "290" + "source": 2, + "value": "386" }, - { "begin": 14771, "end": 14890, "name": "JUMPI", "source": 1 }, { - "begin": 14809, - "end": 14888, - "name": "PUSH [tag]", - "source": 1, - "value": "291" + "begin": 21350, + "end": 21352, + "name": "PUSH", + "source": 2, + "value": "40" }, + { "begin": 21339, "end": 21348, "name": "DUP4", "source": 2 }, + { "begin": 21335, "end": 21353, "name": "ADD", "source": 2 }, + { "begin": 21326, "end": 21332, "name": "DUP6", "source": 2 }, { - "begin": 14809, - "end": 14888, + "begin": 21284, + "end": 21354, "name": "PUSH [tag]", - "source": 1, - "value": "59" + "source": 2, + "value": "146" }, { - "begin": 14809, - "end": 14888, + "begin": 21284, + "end": 21354, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14809, - "end": 14888, - "name": "tag", - "source": 1, - "value": "291" - }, - { "begin": 14809, "end": 14888, "name": "JUMPDEST", "source": 1 }, - { - "begin": 14771, - "end": 14890, + "begin": 21284, + "end": 21354, "name": "tag", - "source": 1, - "value": "290" + "source": 2, + "value": "386" }, - { "begin": 14771, "end": 14890, "name": "JUMPDEST", "source": 1 }, + { "begin": 21284, "end": 21354, "name": "JUMPDEST", "source": 2 }, + { "begin": 21401, "end": 21410, "name": "DUP2", "source": 2 }, + { "begin": 21395, "end": 21399, "name": "DUP2", "source": 2 }, + { "begin": 21391, "end": 21411, "name": "SUB", "source": 2 }, { - "begin": 14929, - "end": 14930, + "begin": 21386, + "end": 21388, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "60" }, + { "begin": 21375, "end": 21384, "name": "DUP4", "source": 2 }, + { "begin": 21371, "end": 21389, "name": "ADD", "source": 2 }, + { "begin": 21364, "end": 21412, "name": "MSTORE", "source": 2 }, { - "begin": 14954, - "end": 15018, + "begin": 21429, + "end": 21505, "name": "PUSH [tag]", - "source": 1, - "value": "292" + "source": 2, + "value": "387" }, - { "begin": 15010, "end": 15017, "name": "DUP5", "source": 1 }, - { "begin": 15001, "end": 15007, "name": "DUP3", "source": 1 }, - { "begin": 14990, "end": 14999, "name": "DUP6", "source": 1 }, - { "begin": 14986, "end": 15008, "name": "ADD", "source": 1 }, + { "begin": 21500, "end": 21504, "name": "DUP2", "source": 2 }, + { "begin": 21491, "end": 21497, "name": "DUP5", "source": 2 }, { - "begin": 14954, - "end": 15018, + "begin": 21429, + "end": 21505, "name": "PUSH [tag]", - "source": 1, - "value": "106" + "source": 2, + "value": "160" }, { - "begin": 14954, - "end": 15018, + "begin": 21429, + "end": 21505, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14954, - "end": 15018, + "begin": 21429, + "end": 21505, "name": "tag", - "source": 1, - "value": "292" - }, - { "begin": 14954, "end": 15018, "name": "JUMPDEST", "source": 1 }, - { "begin": 14944, "end": 15018, "name": "SWAP2", "source": 1 }, - { "begin": 14944, "end": 15018, "name": "POP", "source": 1 }, - { "begin": 14900, "end": 15028, "name": "POP", "source": 1 }, - { "begin": 14684, "end": 15035, "name": "SWAP3", "source": 1 }, - { "begin": 14684, "end": 15035, "name": "SWAP2", "source": 1 }, - { "begin": 14684, "end": 15035, "name": "POP", "source": 1 }, - { "begin": 14684, "end": 15035, "name": "POP", "source": 1 }, - { - "begin": 14684, - "end": 15035, + "source": 2, + "value": "387" + }, + { "begin": 21429, "end": 21505, "name": "JUMPDEST", "source": 2 }, + { "begin": 21421, "end": 21505, "name": "SWAP1", "source": 2 }, + { "begin": 21421, "end": 21505, "name": "POP", "source": 2 }, + { "begin": 20534, "end": 21512, "name": "SWAP6", "source": 2 }, + { "begin": 20534, "end": 21512, "name": "SWAP5", "source": 2 }, + { "begin": 20534, "end": 21512, "name": "POP", "source": 2 }, + { "begin": 20534, "end": 21512, "name": "POP", "source": 2 }, + { "begin": 20534, "end": 21512, "name": "POP", "source": 2 }, + { "begin": 20534, "end": 21512, "name": "POP", "source": 2 }, + { "begin": 20534, "end": 21512, "name": "POP", "source": 2 }, + { + "begin": 20534, + "end": 21512, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 15041, - "end": 15143, + "begin": 21518, + "end": 21630, "name": "tag", - "source": 1, - "value": "107" + "source": 2, + "value": "161" }, - { "begin": 15041, "end": 15143, "name": "JUMPDEST", "source": 1 }, + { "begin": 21518, "end": 21630, "name": "JUMPDEST", "source": 2 }, { - "begin": 15114, - "end": 15136, + "begin": 21601, + "end": 21623, "name": "PUSH [tag]", - "source": 1, - "value": "294" + "source": 2, + "value": "389" }, - { "begin": 15130, "end": 15135, "name": "DUP2", "source": 1 }, + { "begin": 21617, "end": 21622, "name": "DUP2", "source": 2 }, { - "begin": 15114, - "end": 15136, + "begin": 21601, + "end": 21623, "name": "PUSH [tag]", - "source": 1, - "value": "61" + "source": 2, + "value": "114" }, { - "begin": 15114, - "end": 15136, + "begin": 21601, + "end": 21623, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15114, - "end": 15136, + "begin": 21601, + "end": 21623, "name": "tag", - "source": 1, - "value": "294" + "source": 2, + "value": "389" }, - { "begin": 15114, "end": 15136, "name": "JUMPDEST", "source": 1 }, - { "begin": 15109, "end": 15112, "name": "DUP3", "source": 1 }, - { "begin": 15102, "end": 15137, "name": "MSTORE", "source": 1 }, - { "begin": 15041, "end": 15143, "name": "POP", "source": 1 }, - { "begin": 15041, "end": 15143, "name": "POP", "source": 1 }, + { "begin": 21601, "end": 21623, "name": "JUMPDEST", "source": 2 }, + { "begin": 21596, "end": 21599, "name": "DUP3", "source": 2 }, + { "begin": 21589, "end": 21624, "name": "MSTORE", "source": 2 }, + { "begin": 21518, "end": 21630, "name": "POP", "source": 2 }, + { "begin": 21518, "end": 21630, "name": "POP", "source": 2 }, { - "begin": 15041, - "end": 15143, + "begin": 21518, + "end": 21630, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 15149, - "end": 15272, + "begin": 21636, + "end": 21751, "name": "tag", - "source": 1, - "value": "108" - }, - { "begin": 15149, "end": 15272, "name": "JUMPDEST", "source": 1 }, - { - "begin": 15225, - "end": 15231, - "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "162" }, - { "begin": 15259, "end": 15264, "name": "DUP2", "source": 1 }, - { "begin": 15253, "end": 15265, "name": "MLOAD", "source": 1 }, - { "begin": 15243, "end": 15265, "name": "SWAP1", "source": 1 }, - { "begin": 15243, "end": 15265, "name": "POP", "source": 1 }, - { "begin": 15149, "end": 15272, "name": "SWAP2", "source": 1 }, - { "begin": 15149, "end": 15272, "name": "SWAP1", "source": 1 }, - { "begin": 15149, "end": 15272, "name": "POP", "source": 1 }, + { "begin": 21636, "end": 21751, "name": "JUMPDEST", "source": 2 }, { - "begin": 15149, - "end": 15272, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 21721, + "end": 21744, + "name": "PUSH [tag]", + "source": 2, + "value": "391" }, + { "begin": 21738, "end": 21743, "name": "DUP2", "source": 2 }, { - "begin": 15278, - "end": 15461, - "name": "tag", - "source": 1, - "value": "109" + "begin": 21721, + "end": 21744, + "name": "PUSH [tag]", + "source": 2, + "value": "135" }, - { "begin": 15278, "end": 15461, "name": "JUMPDEST", "source": 1 }, { - "begin": 15376, - "end": 15387, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 21721, + "end": 21744, + "name": "JUMP", + "source": 2, + "value": "[in]" }, - { "begin": 15410, "end": 15416, "name": "DUP3", "source": 1 }, - { "begin": 15405, "end": 15408, "name": "DUP3", "source": 1 }, - { "begin": 15398, "end": 15417, "name": "MSTORE", "source": 1 }, { - "begin": 15450, - "end": 15454, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 21721, + "end": 21744, + "name": "tag", + "source": 2, + "value": "391" }, - { "begin": 15445, "end": 15448, "name": "DUP3", "source": 1 }, - { "begin": 15441, "end": 15455, "name": "ADD", "source": 1 }, - { "begin": 15426, "end": 15455, "name": "SWAP1", "source": 1 }, - { "begin": 15426, "end": 15455, "name": "POP", "source": 1 }, - { "begin": 15278, "end": 15461, "name": "SWAP3", "source": 1 }, - { "begin": 15278, "end": 15461, "name": "SWAP2", "source": 1 }, - { "begin": 15278, "end": 15461, "name": "POP", "source": 1 }, - { "begin": 15278, "end": 15461, "name": "POP", "source": 1 }, + { "begin": 21721, "end": 21744, "name": "JUMPDEST", "source": 2 }, + { "begin": 21716, "end": 21719, "name": "DUP3", "source": 2 }, + { "begin": 21709, "end": 21745, "name": "MSTORE", "source": 2 }, + { "begin": 21636, "end": 21751, "name": "POP", "source": 2 }, + { "begin": 21636, "end": 21751, "name": "POP", "source": 2 }, { - "begin": 15278, - "end": 15461, + "begin": 21636, + "end": 21751, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 15467, - "end": 15608, + "begin": 21757, + "end": 22492, "name": "tag", - "source": 1, - "value": "110" + "source": 2, + "value": "69" }, - { "begin": 15467, "end": 15608, "name": "JUMPDEST", "source": 1 }, + { "begin": 21757, "end": 22492, "name": "JUMPDEST", "source": 2 }, { - "begin": 15543, - "end": 15547, + "begin": 21972, + "end": 21976, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 15566, "end": 15569, "name": "DUP2", "source": 1 }, - { "begin": 15558, "end": 15569, "name": "SWAP1", "source": 1 }, - { "begin": 15558, "end": 15569, "name": "POP", "source": 1 }, { - "begin": 15596, - "end": 15600, + "begin": 22010, + "end": 22013, "name": "PUSH", - "source": 1, - "value": "20" - }, - { "begin": 15591, "end": 15594, "name": "DUP3", "source": 1 }, - { "begin": 15587, "end": 15601, "name": "ADD", "source": 1 }, - { "begin": 15579, "end": 15601, "name": "SWAP1", "source": 1 }, - { "begin": 15579, "end": 15601, "name": "POP", "source": 1 }, - { "begin": 15467, "end": 15608, "name": "SWAP2", "source": 1 }, - { "begin": 15467, "end": 15608, "name": "SWAP1", "source": 1 }, - { "begin": 15467, "end": 15608, "name": "POP", "source": 1 }, - { - "begin": 15467, - "end": 15608, - "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "A0" }, + { "begin": 21999, "end": 22008, "name": "DUP3", "source": 2 }, + { "begin": 21995, "end": 22014, "name": "ADD", "source": 2 }, + { "begin": 21987, "end": 22014, "name": "SWAP1", "source": 2 }, + { "begin": 21987, "end": 22014, "name": "POP", "source": 2 }, { - "begin": 15614, - "end": 15772, - "name": "tag", - "source": 1, - "value": "111" + "begin": 22024, + "end": 22091, + "name": "PUSH [tag]", + "source": 2, + "value": "393" }, - { "begin": 15614, "end": 15772, "name": "JUMPDEST", "source": 1 }, { - "begin": 15687, - "end": 15698, + "begin": 22088, + "end": 22089, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 15721, "end": 15727, "name": "DUP3", "source": 1 }, - { "begin": 15716, "end": 15719, "name": "DUP3", "source": 1 }, - { "begin": 15709, "end": 15728, "name": "MSTORE", "source": 1 }, + { "begin": 22077, "end": 22086, "name": "DUP4", "source": 2 }, + { "begin": 22073, "end": 22090, "name": "ADD", "source": 2 }, + { "begin": 22064, "end": 22070, "name": "DUP9", "source": 2 }, { - "begin": 15761, - "end": 15765, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 22024, + "end": 22091, + "name": "PUSH [tag]", + "source": 2, + "value": "161" }, - { "begin": 15756, "end": 15759, "name": "DUP3", "source": 1 }, - { "begin": 15752, "end": 15766, "name": "ADD", "source": 1 }, - { "begin": 15737, "end": 15766, "name": "SWAP1", "source": 1 }, - { "begin": 15737, "end": 15766, "name": "POP", "source": 1 }, - { "begin": 15614, "end": 15772, "name": "SWAP3", "source": 1 }, - { "begin": 15614, "end": 15772, "name": "SWAP2", "source": 1 }, - { "begin": 15614, "end": 15772, "name": "POP", "source": 1 }, - { "begin": 15614, "end": 15772, "name": "POP", "source": 1 }, { - "begin": 15614, - "end": 15772, + "begin": 22024, + "end": 22091, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 15778, - "end": 16118, + "begin": 22024, + "end": 22091, "name": "tag", - "source": 1, - "value": "112" + "source": 2, + "value": "393" }, - { "begin": 15778, "end": 16118, "name": "JUMPDEST", "source": 1 }, + { "begin": 22024, "end": 22091, "name": "JUMPDEST", "source": 2 }, { - "begin": 15854, - "end": 15857, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 22101, + "end": 22171, + "name": "PUSH [tag]", + "source": 2, + "value": "394" }, { - "begin": 15882, - "end": 15920, - "name": "PUSH [tag]", - "source": 1, - "value": "300" + "begin": 22167, + "end": 22169, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 15914, "end": 15919, "name": "DUP3", "source": 1 }, + { "begin": 22156, "end": 22165, "name": "DUP4", "source": 2 }, + { "begin": 22152, "end": 22170, "name": "ADD", "source": 2 }, + { "begin": 22143, "end": 22149, "name": "DUP8", "source": 2 }, { - "begin": 15882, - "end": 15920, + "begin": 22101, + "end": 22171, "name": "PUSH [tag]", - "source": 1, - "value": "102" + "source": 2, + "value": "162" }, { - "begin": 15882, - "end": 15920, + "begin": 22101, + "end": 22171, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15882, - "end": 15920, + "begin": 22101, + "end": 22171, "name": "tag", - "source": 1, - "value": "300" + "source": 2, + "value": "394" }, - { "begin": 15882, "end": 15920, "name": "JUMPDEST", "source": 1 }, + { "begin": 22101, "end": 22171, "name": "JUMPDEST", "source": 2 }, { - "begin": 15936, - "end": 15996, + "begin": 22181, + "end": 22253, "name": "PUSH [tag]", - "source": 1, - "value": "301" + "source": 2, + "value": "395" + }, + { + "begin": 22249, + "end": 22251, + "name": "PUSH", + "source": 2, + "value": "40" }, - { "begin": 15989, "end": 15995, "name": "DUP2", "source": 1 }, - { "begin": 15984, "end": 15987, "name": "DUP6", "source": 1 }, + { "begin": 22238, "end": 22247, "name": "DUP4", "source": 2 }, + { "begin": 22234, "end": 22252, "name": "ADD", "source": 2 }, + { "begin": 22225, "end": 22231, "name": "DUP7", "source": 2 }, { - "begin": 15936, - "end": 15996, + "begin": 22181, + "end": 22253, "name": "PUSH [tag]", - "source": 1, - "value": "111" + "source": 2, + "value": "143" }, { - "begin": 15936, - "end": 15996, + "begin": 22181, + "end": 22253, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15936, - "end": 15996, + "begin": 22181, + "end": 22253, "name": "tag", - "source": 1, - "value": "301" + "source": 2, + "value": "395" }, - { "begin": 15936, "end": 15996, "name": "JUMPDEST", "source": 1 }, - { "begin": 15929, "end": 15996, "name": "SWAP4", "source": 1 }, - { "begin": 15929, "end": 15996, "name": "POP", "source": 1 }, + { "begin": 22181, "end": 22253, "name": "JUMPDEST", "source": 2 }, { - "begin": 16005, - "end": 16057, + "begin": 22263, + "end": 22333, "name": "PUSH [tag]", - "source": 1, - "value": "302" + "source": 2, + "value": "396" }, - { "begin": 16050, "end": 16056, "name": "DUP2", "source": 1 }, - { "begin": 16045, "end": 16048, "name": "DUP6", "source": 1 }, { - "begin": 16038, - "end": 16042, + "begin": 22329, + "end": 22331, "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "60" }, - { "begin": 16031, "end": 16036, "name": "DUP7", "source": 1 }, - { "begin": 16027, "end": 16043, "name": "ADD", "source": 1 }, + { "begin": 22318, "end": 22327, "name": "DUP4", "source": 2 }, + { "begin": 22314, "end": 22332, "name": "ADD", "source": 2 }, + { "begin": 22305, "end": 22311, "name": "DUP6", "source": 2 }, { - "begin": 16005, - "end": 16057, + "begin": 22263, + "end": 22333, "name": "PUSH [tag]", - "source": 1, - "value": "104" + "source": 2, + "value": "146" }, { - "begin": 16005, - "end": 16057, + "begin": 22263, + "end": 22333, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16005, - "end": 16057, + "begin": 22263, + "end": 22333, "name": "tag", - "source": 1, - "value": "302" + "source": 2, + "value": "396" }, - { "begin": 16005, "end": 16057, "name": "JUMPDEST", "source": 1 }, + { "begin": 22263, "end": 22333, "name": "JUMPDEST", "source": 2 }, + { "begin": 22381, "end": 22390, "name": "DUP2", "source": 2 }, + { "begin": 22375, "end": 22379, "name": "DUP2", "source": 2 }, + { "begin": 22371, "end": 22391, "name": "SUB", "source": 2 }, { - "begin": 16082, - "end": 16111, + "begin": 22365, + "end": 22368, + "name": "PUSH", + "source": 2, + "value": "80" + }, + { "begin": 22354, "end": 22363, "name": "DUP4", "source": 2 }, + { "begin": 22350, "end": 22369, "name": "ADD", "source": 2 }, + { "begin": 22343, "end": 22392, "name": "MSTORE", "source": 2 }, + { + "begin": 22409, + "end": 22485, "name": "PUSH [tag]", - "source": 1, - "value": "303" + "source": 2, + "value": "397" }, - { "begin": 16104, "end": 16110, "name": "DUP2", "source": 1 }, + { "begin": 22480, "end": 22484, "name": "DUP2", "source": 2 }, + { "begin": 22471, "end": 22477, "name": "DUP5", "source": 2 }, { - "begin": 16082, - "end": 16111, + "begin": 22409, + "end": 22485, "name": "PUSH [tag]", - "source": 1, - "value": "76" + "source": 2, + "value": "160" }, { - "begin": 16082, - "end": 16111, + "begin": 22409, + "end": 22485, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16082, - "end": 16111, + "begin": 22409, + "end": 22485, "name": "tag", - "source": 1, - "value": "303" - }, - { "begin": 16082, "end": 16111, "name": "JUMPDEST", "source": 1 }, - { "begin": 16077, "end": 16080, "name": "DUP5", "source": 1 }, - { "begin": 16073, "end": 16112, "name": "ADD", "source": 1 }, - { "begin": 16066, "end": 16112, "name": "SWAP2", "source": 1 }, - { "begin": 16066, "end": 16112, "name": "POP", "source": 1 }, - { "begin": 15858, "end": 16118, "name": "POP", "source": 1 }, - { "begin": 15778, "end": 16118, "name": "SWAP3", "source": 1 }, - { "begin": 15778, "end": 16118, "name": "SWAP2", "source": 1 }, - { "begin": 15778, "end": 16118, "name": "POP", "source": 1 }, - { "begin": 15778, "end": 16118, "name": "POP", "source": 1 }, - { - "begin": 15778, - "end": 16118, + "source": 2, + "value": "397" + }, + { "begin": 22409, "end": 22485, "name": "JUMPDEST", "source": 2 }, + { "begin": 22401, "end": 22485, "name": "SWAP1", "source": 2 }, + { "begin": 22401, "end": 22485, "name": "POP", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "SWAP7", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "SWAP6", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "POP", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "POP", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "POP", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "POP", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "POP", "source": 2 }, + { "begin": 21757, "end": 22492, "name": "POP", "source": 2 }, + { + "begin": 21757, + "end": 22492, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 16124, - "end": 16316, + "begin": 22498, + "end": 22716, "name": "tag", - "source": 1, - "value": "113" + "source": 2, + "value": "75" }, - { "begin": 16124, "end": 16316, "name": "JUMPDEST", "source": 1 }, + { "begin": 22498, "end": 22716, "name": "JUMPDEST", "source": 2 }, { - "begin": 16211, - "end": 16221, + "begin": 22589, + "end": 22593, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 16246, - "end": 16310, + "begin": 22627, + "end": 22629, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 22616, "end": 22625, "name": "DUP3", "source": 2 }, + { "begin": 22612, "end": 22630, "name": "ADD", "source": 2 }, + { "begin": 22604, "end": 22630, "name": "SWAP1", "source": 2 }, + { "begin": 22604, "end": 22630, "name": "POP", "source": 2 }, + { + "begin": 22640, + "end": 22709, "name": "PUSH [tag]", - "source": 1, - "value": "305" + "source": 2, + "value": "399" + }, + { + "begin": 22706, + "end": 22707, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 16306, "end": 16309, "name": "DUP4", "source": 1 }, - { "begin": 16298, "end": 16304, "name": "DUP4", "source": 1 }, + { "begin": 22695, "end": 22704, "name": "DUP4", "source": 2 }, + { "begin": 22691, "end": 22708, "name": "ADD", "source": 2 }, + { "begin": 22682, "end": 22688, "name": "DUP5", "source": 2 }, { - "begin": 16246, - "end": 16310, + "begin": 22640, + "end": 22709, "name": "PUSH [tag]", - "source": 1, - "value": "112" + "source": 2, + "value": "162" }, { - "begin": 16246, - "end": 16310, + "begin": 22640, + "end": 22709, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16246, - "end": 16310, + "begin": 22640, + "end": 22709, "name": "tag", - "source": 1, - "value": "305" + "source": 2, + "value": "399" }, - { "begin": 16246, "end": 16310, "name": "JUMPDEST", "source": 1 }, - { "begin": 16232, "end": 16310, "name": "SWAP1", "source": 1 }, - { "begin": 16232, "end": 16310, "name": "POP", "source": 1 }, - { "begin": 16124, "end": 16316, "name": "SWAP3", "source": 1 }, - { "begin": 16124, "end": 16316, "name": "SWAP2", "source": 1 }, - { "begin": 16124, "end": 16316, "name": "POP", "source": 1 }, - { "begin": 16124, "end": 16316, "name": "POP", "source": 1 }, + { "begin": 22640, "end": 22709, "name": "JUMPDEST", "source": 2 }, + { "begin": 22498, "end": 22716, "name": "SWAP3", "source": 2 }, + { "begin": 22498, "end": 22716, "name": "SWAP2", "source": 2 }, + { "begin": 22498, "end": 22716, "name": "POP", "source": 2 }, + { "begin": 22498, "end": 22716, "name": "POP", "source": 2 }, { - "begin": 16124, - "end": 16316, + "begin": 22498, + "end": 22716, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 16322, - "end": 16444, + "begin": 22722, + "end": 22865, "name": "tag", - "source": 1, - "value": "114" + "source": 2, + "value": "163" }, - { "begin": 16322, "end": 16444, "name": "JUMPDEST", "source": 1 }, + { "begin": 22722, "end": 22865, "name": "JUMPDEST", "source": 2 }, { - "begin": 16401, - "end": 16405, + "begin": 22779, + "end": 22784, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 22810, "end": 22816, "name": "DUP2", "source": 2 }, + { "begin": 22804, "end": 22817, "name": "MLOAD", "source": 2 }, + { "begin": 22795, "end": 22817, "name": "SWAP1", "source": 2 }, + { "begin": 22795, "end": 22817, "name": "POP", "source": 2 }, { - "begin": 16433, - "end": 16437, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 22826, + "end": 22859, + "name": "PUSH [tag]", + "source": 2, + "value": "401" }, - { "begin": 16428, "end": 16431, "name": "DUP3", "source": 1 }, - { "begin": 16424, "end": 16438, "name": "ADD", "source": 1 }, - { "begin": 16416, "end": 16438, "name": "SWAP1", "source": 1 }, - { "begin": 16416, "end": 16438, "name": "POP", "source": 1 }, - { "begin": 16322, "end": 16444, "name": "SWAP2", "source": 1 }, - { "begin": 16322, "end": 16444, "name": "SWAP1", "source": 1 }, - { "begin": 16322, "end": 16444, "name": "POP", "source": 1 }, + { "begin": 22853, "end": 22858, "name": "DUP2", "source": 2 }, { - "begin": 16322, - "end": 16444, + "begin": 22826, + "end": 22859, + "name": "PUSH [tag]", + "source": 2, + "value": "130" + }, + { + "begin": 22826, + "end": 22859, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 16476, - "end": 17439, + "begin": 22826, + "end": 22859, "name": "tag", - "source": 1, - "value": "115" + "source": 2, + "value": "401" }, - { "begin": 16476, "end": 17439, "name": "JUMPDEST", "source": 1 }, + { "begin": 22826, "end": 22859, "name": "JUMPDEST", "source": 2 }, + { "begin": 22722, "end": 22865, "name": "SWAP3", "source": 2 }, + { "begin": 22722, "end": 22865, "name": "SWAP2", "source": 2 }, + { "begin": 22722, "end": 22865, "name": "POP", "source": 2 }, + { "begin": 22722, "end": 22865, "name": "POP", "source": 2 }, { - "begin": 16603, - "end": 16606, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 22722, + "end": 22865, + "name": "JUMP", + "source": 2, + "value": "[out]" }, { - "begin": 16632, - "end": 16695, - "name": "PUSH [tag]", - "source": 1, - "value": "308" + "begin": 22871, + "end": 23222, + "name": "tag", + "source": 2, + "value": "79" }, - { "begin": 16689, "end": 16694, "name": "DUP3", "source": 1 }, + { "begin": 22871, "end": 23222, "name": "JUMPDEST", "source": 2 }, { - "begin": 16632, - "end": 16695, - "name": "PUSH [tag]", - "source": 1, - "value": "108" + "begin": 22941, + "end": 22947, + "name": "PUSH", + "source": 2, + "value": "0" }, { - "begin": 16632, - "end": 16695, - "name": "JUMP", - "source": 1, - "value": "[in]" + "begin": 22990, + "end": 22992, + "name": "PUSH", + "source": 2, + "value": "20" }, + { "begin": 22978, "end": 22987, "name": "DUP3", "source": 2 }, + { "begin": 22969, "end": 22976, "name": "DUP5", "source": 2 }, + { "begin": 22965, "end": 22988, "name": "SUB", "source": 2 }, + { "begin": 22961, "end": 22993, "name": "SLT", "source": 2 }, + { "begin": 22958, "end": 23077, "name": "ISZERO", "source": 2 }, { - "begin": 16632, - "end": 16695, - "name": "tag", - "source": 1, - "value": "308" + "begin": 22958, + "end": 23077, + "name": "PUSH [tag]", + "source": 2, + "value": "403" }, - { "begin": 16632, "end": 16695, "name": "JUMPDEST", "source": 1 }, + { "begin": 22958, "end": 23077, "name": "JUMPI", "source": 2 }, { - "begin": 16711, - "end": 16796, + "begin": 22996, + "end": 23075, "name": "PUSH [tag]", - "source": 1, - "value": "309" + "source": 2, + "value": "404" }, - { "begin": 16789, "end": 16795, "name": "DUP2", "source": 1 }, - { "begin": 16784, "end": 16787, "name": "DUP6", "source": 1 }, { - "begin": 16711, - "end": 16796, + "begin": 22996, + "end": 23075, "name": "PUSH [tag]", - "source": 1, - "value": "109" + "source": 2, + "value": "106" }, { - "begin": 16711, - "end": 16796, + "begin": 22996, + "end": 23075, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16711, - "end": 16796, + "begin": 22996, + "end": 23075, "name": "tag", - "source": 1, - "value": "309" + "source": 2, + "value": "404" + }, + { "begin": 22996, "end": 23075, "name": "JUMPDEST", "source": 2 }, + { + "begin": 22958, + "end": 23077, + "name": "tag", + "source": 2, + "value": "403" }, - { "begin": 16711, "end": 16796, "name": "JUMPDEST", "source": 1 }, - { "begin": 16704, "end": 16796, "name": "SWAP4", "source": 1 }, - { "begin": 16704, "end": 16796, "name": "POP", "source": 1 }, - { "begin": 16822, "end": 16825, "name": "DUP4", "source": 1 }, + { "begin": 22958, "end": 23077, "name": "JUMPDEST", "source": 2 }, { - "begin": 16867, - "end": 16871, + "begin": 23116, + "end": 23117, "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "0" }, - { "begin": 16859, "end": 16865, "name": "DUP3", "source": 1 }, - { "begin": 16855, "end": 16872, "name": "MUL", "source": 1 }, - { "begin": 16850, "end": 16853, "name": "DUP6", "source": 1 }, - { "begin": 16846, "end": 16873, "name": "ADD", "source": 1 }, { - "begin": 16897, - "end": 16962, + "begin": 23141, + "end": 23205, "name": "PUSH [tag]", - "source": 1, - "value": "310" + "source": 2, + "value": "405" }, - { "begin": 16956, "end": 16961, "name": "DUP6", "source": 1 }, + { "begin": 23197, "end": 23204, "name": "DUP5", "source": 2 }, + { "begin": 23188, "end": 23194, "name": "DUP3", "source": 2 }, + { "begin": 23177, "end": 23186, "name": "DUP6", "source": 2 }, + { "begin": 23173, "end": 23195, "name": "ADD", "source": 2 }, { - "begin": 16897, - "end": 16962, + "begin": 23141, + "end": 23205, "name": "PUSH [tag]", - "source": 1, - "value": "110" + "source": 2, + "value": "163" }, { - "begin": 16897, - "end": 16962, + "begin": 23141, + "end": 23205, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16897, - "end": 16962, + "begin": 23141, + "end": 23205, "name": "tag", - "source": 1, - "value": "310" + "source": 2, + "value": "405" + }, + { "begin": 23141, "end": 23205, "name": "JUMPDEST", "source": 2 }, + { "begin": 23131, "end": 23205, "name": "SWAP2", "source": 2 }, + { "begin": 23131, "end": 23205, "name": "POP", "source": 2 }, + { "begin": 23087, "end": 23215, "name": "POP", "source": 2 }, + { "begin": 22871, "end": 23222, "name": "SWAP3", "source": 2 }, + { "begin": 22871, "end": 23222, "name": "SWAP2", "source": 2 }, + { "begin": 22871, "end": 23222, "name": "POP", "source": 2 }, + { "begin": 22871, "end": 23222, "name": "POP", "source": 2 }, + { + "begin": 22871, + "end": 23222, + "name": "JUMP", + "source": 2, + "value": "[out]" }, - { "begin": 16897, "end": 16962, "name": "JUMPDEST", "source": 1 }, - { "begin": 16985, "end": 16992, "name": "DUP1", "source": 1 }, { - "begin": 17016, - "end": 17017, + "begin": 23228, + "end": 23621, + "name": "tag", + "source": 2, + "value": "82" + }, + { "begin": 23228, "end": 23621, "name": "JUMPDEST", "source": 2 }, + { + "begin": 23381, + "end": 23385, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 17001, - "end": 17394, - "name": "tag", - "source": 1, - "value": "311" + "begin": 23419, + "end": 23421, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 17001, "end": 17394, "name": "JUMPDEST", "source": 1 }, - { "begin": 17026, "end": 17032, "name": "DUP6", "source": 1 }, - { "begin": 17023, "end": 17024, "name": "DUP2", "source": 1 }, - { "begin": 17020, "end": 17033, "name": "LT", "source": 1 }, - { "begin": 17001, "end": 17394, "name": "ISZERO", "source": 1 }, + { "begin": 23408, "end": 23417, "name": "DUP3", "source": 2 }, + { "begin": 23404, "end": 23422, "name": "ADD", "source": 2 }, + { "begin": 23396, "end": 23422, "name": "SWAP1", "source": 2 }, + { "begin": 23396, "end": 23422, "name": "POP", "source": 2 }, + { "begin": 23468, "end": 23477, "name": "DUP2", "source": 2 }, + { "begin": 23462, "end": 23466, "name": "DUP2", "source": 2 }, + { "begin": 23458, "end": 23478, "name": "SUB", "source": 2 }, { - "begin": 17001, - "end": 17394, - "name": "PUSH [tag]", - "source": 1, - "value": "313" + "begin": 23454, + "end": 23455, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 17001, "end": 17394, "name": "JUMPI", "source": 1 }, - { "begin": 17097, "end": 17106, "name": "DUP5", "source": 1 }, - { "begin": 17091, "end": 17095, "name": "DUP5", "source": 1 }, - { "begin": 17087, "end": 17107, "name": "SUB", "source": 1 }, - { "begin": 17082, "end": 17085, "name": "DUP10", "source": 1 }, - { "begin": 17075, "end": 17108, "name": "MSTORE", "source": 1 }, - { "begin": 17148, "end": 17154, "name": "DUP2", "source": 1 }, - { "begin": 17142, "end": 17155, "name": "MLOAD", "source": 1 }, + { "begin": 23443, "end": 23452, "name": "DUP4", "source": 2 }, + { "begin": 23439, "end": 23456, "name": "ADD", "source": 2 }, + { "begin": 23432, "end": 23479, "name": "MSTORE", "source": 2 }, { - "begin": 17176, - "end": 17258, + "begin": 23496, + "end": 23614, "name": "PUSH [tag]", - "source": 1, - "value": "314" + "source": 2, + "value": "407" }, - { "begin": 17253, "end": 17257, "name": "DUP6", "source": 1 }, - { "begin": 17238, "end": 17251, "name": "DUP3", "source": 1 }, + { "begin": 23609, "end": 23613, "name": "DUP2", "source": 2 }, + { "begin": 23600, "end": 23606, "name": "DUP5", "source": 2 }, { - "begin": 17176, - "end": 17258, + "begin": 23496, + "end": 23614, "name": "PUSH [tag]", - "source": 1, - "value": "113" + "source": 2, + "value": "158" }, { - "begin": 17176, - "end": 17258, + "begin": 23496, + "end": 23614, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17176, - "end": 17258, + "begin": 23496, + "end": 23614, + "name": "tag", + "source": 2, + "value": "407" + }, + { "begin": 23496, "end": 23614, "name": "JUMPDEST", "source": 2 }, + { "begin": 23488, "end": 23614, "name": "SWAP1", "source": 2 }, + { "begin": 23488, "end": 23614, "name": "POP", "source": 2 }, + { "begin": 23228, "end": 23621, "name": "SWAP3", "source": 2 }, + { "begin": 23228, "end": 23621, "name": "SWAP2", "source": 2 }, + { "begin": 23228, "end": 23621, "name": "POP", "source": 2 }, + { "begin": 23228, "end": 23621, "name": "POP", "source": 2 }, + { + "begin": 23228, + "end": 23621, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 23627, + "end": 23749, "name": "tag", - "source": 1, - "value": "314" + "source": 2, + "value": "164" }, - { "begin": 17176, "end": 17258, "name": "JUMPDEST", "source": 1 }, - { "begin": 17168, "end": 17258, "name": "SWAP5", "source": 1 }, - { "begin": 17168, "end": 17258, "name": "POP", "source": 1 }, + { "begin": 23627, "end": 23749, "name": "JUMPDEST", "source": 2 }, { - "begin": 17281, - "end": 17350, + "begin": 23700, + "end": 23724, "name": "PUSH [tag]", - "source": 1, - "value": "315" + "source": 2, + "value": "409" }, - { "begin": 17343, "end": 17349, "name": "DUP4", "source": 1 }, + { "begin": 23718, "end": 23723, "name": "DUP2", "source": 2 }, { - "begin": 17281, - "end": 17350, + "begin": 23700, + "end": 23724, "name": "PUSH [tag]", - "source": 1, - "value": "114" + "source": 2, + "value": "144" }, { - "begin": 17281, - "end": 17350, + "begin": 23700, + "end": 23724, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17281, - "end": 17350, + "begin": 23700, + "end": 23724, "name": "tag", - "source": 1, - "value": "315" + "source": 2, + "value": "409" }, - { "begin": 17281, "end": 17350, "name": "JUMPDEST", "source": 1 }, - { "begin": 17271, "end": 17350, "name": "SWAP3", "source": 1 }, - { "begin": 17271, "end": 17350, "name": "POP", "source": 1 }, + { "begin": 23700, "end": 23724, "name": "JUMPDEST", "source": 2 }, + { "begin": 23693, "end": 23698, "name": "DUP2", "source": 2 }, + { "begin": 23690, "end": 23725, "name": "EQ", "source": 2 }, { - "begin": 17379, - "end": 17383, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 23680, + "end": 23743, + "name": "PUSH [tag]", + "source": 2, + "value": "410" }, - { "begin": 17374, "end": 17377, "name": "DUP11", "source": 1 }, - { "begin": 17370, "end": 17384, "name": "ADD", "source": 1 }, - { "begin": 17363, "end": 17384, "name": "SWAP10", "source": 1 }, - { "begin": 17363, "end": 17384, "name": "POP", "source": 1 }, - { "begin": 17061, "end": 17394, "name": "POP", "source": 1 }, + { "begin": 23680, "end": 23743, "name": "JUMPI", "source": 2 }, { - "begin": 17048, - "end": 17049, + "begin": 23739, + "end": 23740, "name": "PUSH", - "source": 1, - "value": "1" + "source": 2, + "value": "0" }, - { "begin": 17045, "end": 17046, "name": "DUP2", "source": 1 }, - { "begin": 17041, "end": 17050, "name": "ADD", "source": 1 }, - { "begin": 17036, "end": 17050, "name": "SWAP1", "source": 1 }, - { "begin": 17036, "end": 17050, "name": "POP", "source": 1 }, + { "begin": 23736, "end": 23737, "name": "DUP1", "source": 2 }, + { "begin": 23729, "end": 23741, "name": "REVERT", "source": 2 }, { - "begin": 17001, - "end": 17394, - "name": "PUSH [tag]", - "source": 1, - "value": "311" + "begin": 23680, + "end": 23743, + "name": "tag", + "source": 2, + "value": "410" }, - { "begin": 17001, "end": 17394, "name": "JUMP", "source": 1 }, - { - "begin": 17001, - "end": 17394, - "name": "tag", - "source": 1, - "value": "313" - }, - { "begin": 17001, "end": 17394, "name": "JUMPDEST", "source": 1 }, - { "begin": 17005, "end": 17019, "name": "POP", "source": 1 }, - { "begin": 17410, "end": 17414, "name": "DUP3", "source": 1 }, - { "begin": 17403, "end": 17414, "name": "SWAP8", "source": 1 }, - { "begin": 17403, "end": 17414, "name": "POP", "source": 1 }, - { "begin": 17430, "end": 17433, "name": "DUP8", "source": 1 }, - { "begin": 17423, "end": 17433, "name": "SWAP6", "source": 1 }, - { "begin": 17423, "end": 17433, "name": "POP", "source": 1 }, - { "begin": 16608, "end": 17439, "name": "POP", "source": 1 }, - { "begin": 16608, "end": 17439, "name": "POP", "source": 1 }, - { "begin": 16608, "end": 17439, "name": "POP", "source": 1 }, - { "begin": 16608, "end": 17439, "name": "POP", "source": 1 }, - { "begin": 16608, "end": 17439, "name": "POP", "source": 1 }, - { "begin": 16476, "end": 17439, "name": "SWAP3", "source": 1 }, - { "begin": 16476, "end": 17439, "name": "SWAP2", "source": 1 }, - { "begin": 16476, "end": 17439, "name": "POP", "source": 1 }, - { "begin": 16476, "end": 17439, "name": "POP", "source": 1 }, - { - "begin": 16476, - "end": 17439, - "name": "JUMP", - "source": 1, + { "begin": 23680, "end": 23743, "name": "JUMPDEST", "source": 2 }, + { "begin": 23627, "end": 23749, "name": "POP", "source": 2 }, + { + "begin": 23627, + "end": 23749, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 17525, - "end": 18188, + "begin": 23755, + "end": 23898, "name": "tag", - "source": 1, - "value": "116" + "source": 2, + "value": "165" }, - { "begin": 17525, "end": 18188, "name": "JUMPDEST", "source": 1 }, + { "begin": 23755, "end": 23898, "name": "JUMPDEST", "source": 2 }, { - "begin": 17650, - "end": 17653, + "begin": 23812, + "end": 23817, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, + { "begin": 23843, "end": 23849, "name": "DUP2", "source": 2 }, + { "begin": 23837, "end": 23850, "name": "MLOAD", "source": 2 }, + { "begin": 23828, "end": 23850, "name": "SWAP1", "source": 2 }, + { "begin": 23828, "end": 23850, "name": "POP", "source": 2 }, { - "begin": 17686, - "end": 17690, - "name": "PUSH", - "source": 1, - "value": "40" + "begin": 23859, + "end": 23892, + "name": "PUSH [tag]", + "source": 2, + "value": "412" + }, + { "begin": 23886, "end": 23891, "name": "DUP2", "source": 2 }, + { + "begin": 23859, + "end": 23892, + "name": "PUSH [tag]", + "source": 2, + "value": "164" + }, + { + "begin": 23859, + "end": 23892, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 23859, + "end": 23892, + "name": "tag", + "source": 2, + "value": "412" + }, + { "begin": 23859, "end": 23892, "name": "JUMPDEST", "source": 2 }, + { "begin": 23755, "end": 23898, "name": "SWAP3", "source": 2 }, + { "begin": 23755, "end": 23898, "name": "SWAP2", "source": 2 }, + { "begin": 23755, "end": 23898, "name": "POP", "source": 2 }, + { "begin": 23755, "end": 23898, "name": "POP", "source": 2 }, + { + "begin": 23755, + "end": 23898, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 23904, + "end": 24255, + "name": "tag", + "source": 2, + "value": "86" }, - { "begin": 17681, "end": 17684, "name": "DUP4", "source": 1 }, - { "begin": 17677, "end": 17691, "name": "ADD", "source": 1 }, + { "begin": 23904, "end": 24255, "name": "JUMPDEST", "source": 2 }, { - "begin": 17776, - "end": 17780, + "begin": 23974, + "end": 23980, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 17769, "end": 17774, "name": "DUP4", "source": 1 }, - { "begin": 17765, "end": 17781, "name": "ADD", "source": 1 }, - { "begin": 17759, "end": 17782, "name": "MLOAD", "source": 1 }, { - "begin": 17795, - "end": 17854, + "begin": 24023, + "end": 24025, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { "begin": 24011, "end": 24020, "name": "DUP3", "source": 2 }, + { "begin": 24002, "end": 24009, "name": "DUP5", "source": 2 }, + { "begin": 23998, "end": 24021, "name": "SUB", "source": 2 }, + { "begin": 23994, "end": 24026, "name": "SLT", "source": 2 }, + { "begin": 23991, "end": 24110, "name": "ISZERO", "source": 2 }, + { + "begin": 23991, + "end": 24110, "name": "PUSH [tag]", - "source": 1, - "value": "317" + "source": 2, + "value": "414" }, + { "begin": 23991, "end": 24110, "name": "JUMPI", "source": 2 }, { - "begin": 17848, - "end": 17852, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 24029, + "end": 24108, + "name": "PUSH [tag]", + "source": 2, + "value": "415" }, - { "begin": 17843, "end": 17846, "name": "DUP7", "source": 1 }, - { "begin": 17839, "end": 17853, "name": "ADD", "source": 1 }, - { "begin": 17825, "end": 17837, "name": "DUP3", "source": 1 }, { - "begin": 17795, - "end": 17854, + "begin": 24029, + "end": 24108, "name": "PUSH [tag]", - "source": 1, - "value": "107" + "source": 2, + "value": "106" }, { - "begin": 17795, - "end": 17854, + "begin": 24029, + "end": 24108, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17795, - "end": 17854, + "begin": 24029, + "end": 24108, "name": "tag", - "source": 1, - "value": "317" + "source": 2, + "value": "415" }, - { "begin": 17795, "end": 17854, "name": "JUMPDEST", "source": 1 }, - { "begin": 17701, "end": 17864, "name": "POP", "source": 1 }, + { "begin": 24029, "end": 24108, "name": "JUMPDEST", "source": 2 }, { - "begin": 17950, - "end": 17954, - "name": "PUSH", - "source": 1, - "value": "20" + "begin": 23991, + "end": 24110, + "name": "tag", + "source": 2, + "value": "414" }, - { "begin": 17943, "end": 17948, "name": "DUP4", "source": 1 }, - { "begin": 17939, "end": 17955, "name": "ADD", "source": 1 }, - { "begin": 17933, "end": 17956, "name": "MLOAD", "source": 1 }, - { "begin": 18003, "end": 18006, "name": "DUP5", "source": 1 }, - { "begin": 17997, "end": 18001, "name": "DUP3", "source": 1 }, - { "begin": 17993, "end": 18007, "name": "SUB", "source": 1 }, + { "begin": 23991, "end": 24110, "name": "JUMPDEST", "source": 2 }, { - "begin": 17986, - "end": 17990, + "begin": 24149, + "end": 24150, "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "0" }, - { "begin": 17981, "end": 17984, "name": "DUP7", "source": 1 }, - { "begin": 17977, "end": 17991, "name": "ADD", "source": 1 }, - { "begin": 17970, "end": 18008, "name": "MSTORE", "source": 1 }, { - "begin": 18029, - "end": 18150, + "begin": 24174, + "end": 24238, "name": "PUSH [tag]", - "source": 1, - "value": "318" + "source": 2, + "value": "416" }, - { "begin": 18145, "end": 18149, "name": "DUP3", "source": 1 }, - { "begin": 18131, "end": 18143, "name": "DUP3", "source": 1 }, + { "begin": 24230, "end": 24237, "name": "DUP5", "source": 2 }, + { "begin": 24221, "end": 24227, "name": "DUP3", "source": 2 }, + { "begin": 24210, "end": 24219, "name": "DUP6", "source": 2 }, + { "begin": 24206, "end": 24228, "name": "ADD", "source": 2 }, { - "begin": 18029, - "end": 18150, + "begin": 24174, + "end": 24238, "name": "PUSH [tag]", - "source": 1, - "value": "115" + "source": 2, + "value": "165" }, { - "begin": 18029, - "end": 18150, + "begin": 24174, + "end": 24238, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18029, - "end": 18150, + "begin": 24174, + "end": 24238, "name": "tag", - "source": 1, - "value": "318" - }, - { "begin": 18029, "end": 18150, "name": "JUMPDEST", "source": 1 }, - { "begin": 18021, "end": 18150, "name": "SWAP2", "source": 1 }, - { "begin": 18021, "end": 18150, "name": "POP", "source": 1 }, - { "begin": 17874, "end": 18161, "name": "POP", "source": 1 }, - { "begin": 18178, "end": 18182, "name": "DUP1", "source": 1 }, - { "begin": 18171, "end": 18182, "name": "SWAP2", "source": 1 }, - { "begin": 18171, "end": 18182, "name": "POP", "source": 1 }, - { "begin": 17655, "end": 18188, "name": "POP", "source": 1 }, - { "begin": 17525, "end": 18188, "name": "SWAP3", "source": 1 }, - { "begin": 17525, "end": 18188, "name": "SWAP2", "source": 1 }, - { "begin": 17525, "end": 18188, "name": "POP", "source": 1 }, - { "begin": 17525, "end": 18188, "name": "POP", "source": 1 }, - { - "begin": 17525, - "end": 18188, + "source": 2, + "value": "416" + }, + { "begin": 24174, "end": 24238, "name": "JUMPDEST", "source": 2 }, + { "begin": 24164, "end": 24238, "name": "SWAP2", "source": 2 }, + { "begin": 24164, "end": 24238, "name": "POP", "source": 2 }, + { "begin": 24120, "end": 24248, "name": "POP", "source": 2 }, + { "begin": 23904, "end": 24255, "name": "SWAP3", "source": 2 }, + { "begin": 23904, "end": 24255, "name": "SWAP2", "source": 2 }, + { "begin": 23904, "end": 24255, "name": "POP", "source": 2 }, + { "begin": 23904, "end": 24255, "name": "POP", "source": 2 }, + { + "begin": 23904, + "end": 24255, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 18194, - "end": 19092, + "begin": 24261, + "end": 25167, "name": "tag", - "source": 1, - "value": "47" + "source": 2, + "value": "89" }, - { "begin": 18194, "end": 19092, "name": "JUMPDEST", "source": 1 }, + { "begin": 24261, "end": 25167, "name": "JUMPDEST", "source": 2 }, { - "begin": 18465, - "end": 18469, + "begin": 24536, + "end": 24540, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 18503, - "end": 18506, + "begin": 24574, + "end": 24577, "name": "PUSH", - "source": 1, + "source": 2, "value": "A0" }, - { "begin": 18492, "end": 18501, "name": "DUP3", "source": 1 }, - { "begin": 18488, "end": 18507, "name": "ADD", "source": 1 }, - { "begin": 18480, "end": 18507, "name": "SWAP1", "source": 1 }, - { "begin": 18480, "end": 18507, "name": "POP", "source": 1 }, + { "begin": 24563, "end": 24572, "name": "DUP3", "source": 2 }, + { "begin": 24559, "end": 24578, "name": "ADD", "source": 2 }, + { "begin": 24551, "end": 24578, "name": "SWAP1", "source": 2 }, + { "begin": 24551, "end": 24578, "name": "POP", "source": 2 }, { - "begin": 18517, - "end": 18584, + "begin": 24588, + "end": 24655, "name": "PUSH [tag]", - "source": 1, - "value": "320" + "source": 2, + "value": "418" }, { - "begin": 18581, - "end": 18582, + "begin": 24652, + "end": 24653, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 18570, "end": 18579, "name": "DUP4", "source": 1 }, - { "begin": 18566, "end": 18583, "name": "ADD", "source": 1 }, - { "begin": 18557, "end": 18563, "name": "DUP9", "source": 1 }, + { "begin": 24641, "end": 24650, "name": "DUP4", "source": 2 }, + { "begin": 24637, "end": 24654, "name": "ADD", "source": 2 }, + { "begin": 24628, "end": 24634, "name": "DUP9", "source": 2 }, { - "begin": 18517, - "end": 18584, + "begin": 24588, + "end": 24655, "name": "PUSH [tag]", - "source": 1, - "value": "100" + "source": 2, + "value": "161" }, { - "begin": 18517, - "end": 18584, + "begin": 24588, + "end": 24655, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18517, - "end": 18584, + "begin": 24588, + "end": 24655, "name": "tag", - "source": 1, - "value": "320" + "source": 2, + "value": "418" }, - { "begin": 18517, "end": 18584, "name": "JUMPDEST", "source": 1 }, + { "begin": 24588, "end": 24655, "name": "JUMPDEST", "source": 2 }, { - "begin": 18594, - "end": 18664, + "begin": 24665, + "end": 24735, "name": "PUSH [tag]", - "source": 1, - "value": "321" + "source": 2, + "value": "419" }, { - "begin": 18660, - "end": 18662, + "begin": 24731, + "end": 24733, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 18649, "end": 18658, "name": "DUP4", "source": 1 }, - { "begin": 18645, "end": 18663, "name": "ADD", "source": 1 }, - { "begin": 18636, "end": 18642, "name": "DUP8", "source": 1 }, + { "begin": 24720, "end": 24729, "name": "DUP4", "source": 2 }, + { "begin": 24716, "end": 24734, "name": "ADD", "source": 2 }, + { "begin": 24707, "end": 24713, "name": "DUP8", "source": 2 }, { - "begin": 18594, - "end": 18664, + "begin": 24665, + "end": 24735, "name": "PUSH [tag]", - "source": 1, - "value": "101" + "source": 2, + "value": "162" }, { - "begin": 18594, - "end": 18664, + "begin": 24665, + "end": 24735, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18594, - "end": 18664, + "begin": 24665, + "end": 24735, "name": "tag", - "source": 1, - "value": "321" + "source": 2, + "value": "419" }, - { "begin": 18594, "end": 18664, "name": "JUMPDEST", "source": 1 }, - { "begin": 18711, "end": 18720, "name": "DUP2", "source": 1 }, - { "begin": 18705, "end": 18709, "name": "DUP2", "source": 1 }, - { "begin": 18701, "end": 18721, "name": "SUB", "source": 1 }, + { "begin": 24665, "end": 24735, "name": "JUMPDEST", "source": 2 }, + { "begin": 24782, "end": 24791, "name": "DUP2", "source": 2 }, + { "begin": 24776, "end": 24780, "name": "DUP2", "source": 2 }, + { "begin": 24772, "end": 24792, "name": "SUB", "source": 2 }, { - "begin": 18696, - "end": 18698, + "begin": 24767, + "end": 24769, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 18685, "end": 18694, "name": "DUP4", "source": 1 }, - { "begin": 18681, "end": 18699, "name": "ADD", "source": 1 }, - { "begin": 18674, "end": 18722, "name": "MSTORE", "source": 1 }, + { "begin": 24756, "end": 24765, "name": "DUP4", "source": 2 }, + { "begin": 24752, "end": 24770, "name": "ADD", "source": 2 }, + { "begin": 24745, "end": 24793, "name": "MSTORE", "source": 2 }, { - "begin": 18739, - "end": 18853, + "begin": 24810, + "end": 24928, "name": "PUSH [tag]", - "source": 1, - "value": "322" + "source": 2, + "value": "420" }, - { "begin": 18848, "end": 18852, "name": "DUP2", "source": 1 }, - { "begin": 18839, "end": 18845, "name": "DUP7", "source": 1 }, + { "begin": 24923, "end": 24927, "name": "DUP2", "source": 2 }, + { "begin": 24914, "end": 24920, "name": "DUP7", "source": 2 }, { - "begin": 18739, - "end": 18853, + "begin": 24810, + "end": 24928, "name": "PUSH [tag]", - "source": 1, - "value": "116" + "source": 2, + "value": "158" }, { - "begin": 18739, - "end": 18853, + "begin": 24810, + "end": 24928, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18739, - "end": 18853, + "begin": 24810, + "end": 24928, "name": "tag", - "source": 1, - "value": "322" + "source": 2, + "value": "420" }, - { "begin": 18739, "end": 18853, "name": "JUMPDEST", "source": 1 }, - { "begin": 18731, "end": 18853, "name": "SWAP1", "source": 1 }, - { "begin": 18731, "end": 18853, "name": "POP", "source": 1 }, + { "begin": 24810, "end": 24928, "name": "JUMPDEST", "source": 2 }, + { "begin": 24802, "end": 24928, "name": "SWAP1", "source": 2 }, + { "begin": 24802, "end": 24928, "name": "POP", "source": 2 }, { - "begin": 18863, - "end": 18933, + "begin": 24938, + "end": 25008, "name": "PUSH [tag]", - "source": 1, - "value": "323" + "source": 2, + "value": "421" }, { - "begin": 18929, - "end": 18931, + "begin": 25004, + "end": 25006, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 18918, "end": 18927, "name": "DUP4", "source": 1 }, - { "begin": 18914, "end": 18932, "name": "ADD", "source": 1 }, - { "begin": 18905, "end": 18911, "name": "DUP6", "source": 1 }, + { "begin": 24993, "end": 25002, "name": "DUP4", "source": 2 }, + { "begin": 24989, "end": 25007, "name": "ADD", "source": 2 }, + { "begin": 24980, "end": 24986, "name": "DUP6", "source": 2 }, { - "begin": 18863, - "end": 18933, + "begin": 24938, + "end": 25008, "name": "PUSH [tag]", - "source": 1, - "value": "97" + "source": 2, + "value": "146" }, { - "begin": 18863, - "end": 18933, + "begin": 24938, + "end": 25008, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18863, - "end": 18933, + "begin": 24938, + "end": 25008, "name": "tag", - "source": 1, - "value": "323" + "source": 2, + "value": "421" }, - { "begin": 18863, "end": 18933, "name": "JUMPDEST", "source": 1 }, - { "begin": 18981, "end": 18990, "name": "DUP2", "source": 1 }, - { "begin": 18975, "end": 18979, "name": "DUP2", "source": 1 }, - { "begin": 18971, "end": 18991, "name": "SUB", "source": 1 }, + { "begin": 24938, "end": 25008, "name": "JUMPDEST", "source": 2 }, + { "begin": 25056, "end": 25065, "name": "DUP2", "source": 2 }, + { "begin": 25050, "end": 25054, "name": "DUP2", "source": 2 }, + { "begin": 25046, "end": 25066, "name": "SUB", "source": 2 }, { - "begin": 18965, - "end": 18968, + "begin": 25040, + "end": 25043, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 18954, "end": 18963, "name": "DUP4", "source": 1 }, - { "begin": 18950, "end": 18969, "name": "ADD", "source": 1 }, - { "begin": 18943, "end": 18992, "name": "MSTORE", "source": 1 }, + { "begin": 25029, "end": 25038, "name": "DUP4", "source": 2 }, + { "begin": 25025, "end": 25044, "name": "ADD", "source": 2 }, + { "begin": 25018, "end": 25067, "name": "MSTORE", "source": 2 }, { - "begin": 19009, - "end": 19085, + "begin": 25084, + "end": 25160, "name": "PUSH [tag]", - "source": 1, - "value": "324" + "source": 2, + "value": "422" }, - { "begin": 19080, "end": 19084, "name": "DUP2", "source": 1 }, - { "begin": 19071, "end": 19077, "name": "DUP5", "source": 1 }, + { "begin": 25155, "end": 25159, "name": "DUP2", "source": 2 }, + { "begin": 25146, "end": 25152, "name": "DUP5", "source": 2 }, { - "begin": 19009, - "end": 19085, + "begin": 25084, + "end": 25160, "name": "PUSH [tag]", - "source": 1, - "value": "105" + "source": 2, + "value": "160" }, { - "begin": 19009, - "end": 19085, + "begin": 25084, + "end": 25160, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19009, - "end": 19085, + "begin": 25084, + "end": 25160, "name": "tag", - "source": 1, - "value": "324" - }, - { "begin": 19009, "end": 19085, "name": "JUMPDEST", "source": 1 }, - { "begin": 19001, "end": 19085, "name": "SWAP1", "source": 1 }, - { "begin": 19001, "end": 19085, "name": "POP", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "SWAP7", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "SWAP6", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "POP", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "POP", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "POP", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "POP", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "POP", "source": 1 }, - { "begin": 18194, "end": 19092, "name": "POP", "source": 1 }, - { - "begin": 18194, - "end": 19092, - "name": "JUMP", - "source": 1, + "source": 2, + "value": "422" + }, + { "begin": 25084, "end": 25160, "name": "JUMPDEST", "source": 2 }, + { "begin": 25076, "end": 25160, "name": "SWAP1", "source": 2 }, + { "begin": 25076, "end": 25160, "name": "POP", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "SWAP7", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "SWAP6", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "POP", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "POP", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "POP", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "POP", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "POP", "source": 2 }, + { "begin": 24261, "end": 25167, "name": "POP", "source": 2 }, + { + "begin": 24261, + "end": 25167, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 19098, - "end": 19483, + "begin": 25173, + "end": 25314, "name": "tag", - "source": 1, - "value": "53" - }, - { "begin": 19098, "end": 19483, "name": "JUMPDEST", "source": 1 }, - { - "begin": 19247, - "end": 19251, - "name": "PUSH", - "source": 1, - "value": "0" - }, - { - "begin": 19285, - "end": 19287, - "name": "PUSH", - "source": 1, - "value": "20" + "source": 2, + "value": "166" }, - { "begin": 19274, "end": 19283, "name": "DUP3", "source": 1 }, - { "begin": 19270, "end": 19288, "name": "ADD", "source": 1 }, - { "begin": 19262, "end": 19288, "name": "SWAP1", "source": 1 }, - { "begin": 19262, "end": 19288, "name": "POP", "source": 1 }, - { "begin": 19334, "end": 19343, "name": "DUP2", "source": 1 }, - { "begin": 19328, "end": 19332, "name": "DUP2", "source": 1 }, - { "begin": 19324, "end": 19344, "name": "SUB", "source": 1 }, + { "begin": 25173, "end": 25314, "name": "JUMPDEST", "source": 2 }, { - "begin": 19320, - "end": 19321, + "begin": 25229, + "end": 25234, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 19309, "end": 19318, "name": "DUP4", "source": 1 }, - { "begin": 19305, "end": 19322, "name": "ADD", "source": 1 }, - { "begin": 19298, "end": 19345, "name": "MSTORE", "source": 1 }, + { "begin": 25260, "end": 25266, "name": "DUP2", "source": 2 }, + { "begin": 25254, "end": 25267, "name": "MLOAD", "source": 2 }, + { "begin": 25245, "end": 25267, "name": "SWAP1", "source": 2 }, + { "begin": 25245, "end": 25267, "name": "POP", "source": 2 }, { - "begin": 19362, - "end": 19476, + "begin": 25276, + "end": 25308, "name": "PUSH [tag]", - "source": 1, - "value": "326" + "source": 2, + "value": "424" }, - { "begin": 19471, "end": 19475, "name": "DUP2", "source": 1 }, - { "begin": 19462, "end": 19468, "name": "DUP5", "source": 1 }, + { "begin": 25302, "end": 25307, "name": "DUP2", "source": 2 }, { - "begin": 19362, - "end": 19476, + "begin": 25276, + "end": 25308, "name": "PUSH [tag]", - "source": 1, - "value": "116" + "source": 2, + "value": "133" }, { - "begin": 19362, - "end": 19476, + "begin": 25276, + "end": 25308, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19362, - "end": 19476, + "begin": 25276, + "end": 25308, "name": "tag", - "source": 1, - "value": "326" + "source": 2, + "value": "424" }, - { "begin": 19362, "end": 19476, "name": "JUMPDEST", "source": 1 }, - { "begin": 19354, "end": 19476, "name": "SWAP1", "source": 1 }, - { "begin": 19354, "end": 19476, "name": "POP", "source": 1 }, - { "begin": 19098, "end": 19483, "name": "SWAP3", "source": 1 }, - { "begin": 19098, "end": 19483, "name": "SWAP2", "source": 1 }, - { "begin": 19098, "end": 19483, "name": "POP", "source": 1 }, - { "begin": 19098, "end": 19483, "name": "POP", "source": 1 }, + { "begin": 25276, "end": 25308, "name": "JUMPDEST", "source": 2 }, + { "begin": 25173, "end": 25314, "name": "SWAP3", "source": 2 }, + { "begin": 25173, "end": 25314, "name": "SWAP2", "source": 2 }, + { "begin": 25173, "end": 25314, "name": "POP", "source": 2 }, + { "begin": 25173, "end": 25314, "name": "POP", "source": 2 }, { - "begin": 19098, - "end": 19483, + "begin": 25173, + "end": 25314, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 19489, - "end": 19630, + "begin": 25320, + "end": 25977, "name": "tag", - "source": 1, - "value": "117" + "source": 2, + "value": "98" + }, + { "begin": 25320, "end": 25977, "name": "JUMPDEST", "source": 2 }, + { + "begin": 25405, + "end": 25411, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 19489, "end": 19630, "name": "JUMPDEST", "source": 1 }, + { "begin": 25413, "end": 25419, "name": "DUP1", "source": 2 }, { - "begin": 19545, - "end": 19550, + "begin": 25421, + "end": 25427, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 19576, "end": 19582, "name": "DUP2", "source": 1 }, - { "begin": 19570, "end": 19583, "name": "MLOAD", "source": 1 }, - { "begin": 19561, "end": 19583, "name": "SWAP1", "source": 1 }, - { "begin": 19561, "end": 19583, "name": "POP", "source": 1 }, { - "begin": 19592, - "end": 19624, + "begin": 25470, + "end": 25472, + "name": "PUSH", + "source": 2, + "value": "60" + }, + { "begin": 25458, "end": 25467, "name": "DUP5", "source": 2 }, + { "begin": 25449, "end": 25456, "name": "DUP7", "source": 2 }, + { "begin": 25445, "end": 25468, "name": "SUB", "source": 2 }, + { "begin": 25441, "end": 25473, "name": "SLT", "source": 2 }, + { "begin": 25438, "end": 25557, "name": "ISZERO", "source": 2 }, + { + "begin": 25438, + "end": 25557, "name": "PUSH [tag]", - "source": 1, - "value": "328" + "source": 2, + "value": "426" }, - { "begin": 19618, "end": 19623, "name": "DUP2", "source": 1 }, + { "begin": 25438, "end": 25557, "name": "JUMPI", "source": 2 }, { - "begin": 19592, - "end": 19624, + "begin": 25476, + "end": 25555, "name": "PUSH [tag]", - "source": 1, - "value": "72" + "source": 2, + "value": "427" + }, + { + "begin": 25476, + "end": 25555, + "name": "PUSH [tag]", + "source": 2, + "value": "106" }, { - "begin": 19592, - "end": 19624, + "begin": 25476, + "end": 25555, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19592, - "end": 19624, + "begin": 25476, + "end": 25555, "name": "tag", - "source": 1, - "value": "328" + "source": 2, + "value": "427" }, - { "begin": 19592, "end": 19624, "name": "JUMPDEST", "source": 1 }, - { "begin": 19489, "end": 19630, "name": "SWAP3", "source": 1 }, - { "begin": 19489, "end": 19630, "name": "SWAP2", "source": 1 }, - { "begin": 19489, "end": 19630, "name": "POP", "source": 1 }, - { "begin": 19489, "end": 19630, "name": "POP", "source": 1 }, + { "begin": 25476, "end": 25555, "name": "JUMPDEST", "source": 2 }, { - "begin": 19489, - "end": 19630, - "name": "JUMP", - "source": 1, - "value": "[out]" + "begin": 25438, + "end": 25557, + "name": "tag", + "source": 2, + "value": "426" }, + { "begin": 25438, "end": 25557, "name": "JUMPDEST", "source": 2 }, { - "begin": 19636, - "end": 19758, - "name": "tag", - "source": 1, - "value": "118" + "begin": 25596, + "end": 25597, + "name": "PUSH", + "source": 2, + "value": "0" }, - { "begin": 19636, "end": 19758, "name": "JUMPDEST", "source": 1 }, { - "begin": 19709, - "end": 19733, + "begin": 25621, + "end": 25684, "name": "PUSH [tag]", - "source": 1, - "value": "330" + "source": 2, + "value": "428" }, - { "begin": 19727, "end": 19732, "name": "DUP2", "source": 1 }, + { "begin": 25676, "end": 25683, "name": "DUP7", "source": 2 }, + { "begin": 25667, "end": 25673, "name": "DUP3", "source": 2 }, + { "begin": 25656, "end": 25665, "name": "DUP8", "source": 2 }, + { "begin": 25652, "end": 25674, "name": "ADD", "source": 2 }, { - "begin": 19709, - "end": 19733, + "begin": 25621, + "end": 25684, "name": "PUSH [tag]", - "source": 1, - "value": "98" + "source": 2, + "value": "166" }, { - "begin": 19709, - "end": 19733, + "begin": 25621, + "end": 25684, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19709, - "end": 19733, + "begin": 25621, + "end": 25684, "name": "tag", - "source": 1, - "value": "330" + "source": 2, + "value": "428" }, - { "begin": 19709, "end": 19733, "name": "JUMPDEST", "source": 1 }, - { "begin": 19702, "end": 19707, "name": "DUP2", "source": 1 }, - { "begin": 19699, "end": 19734, "name": "EQ", "source": 1 }, + { "begin": 25621, "end": 25684, "name": "JUMPDEST", "source": 2 }, + { "begin": 25611, "end": 25684, "name": "SWAP4", "source": 2 }, + { "begin": 25611, "end": 25684, "name": "POP", "source": 2 }, + { "begin": 25567, "end": 25694, "name": "POP", "source": 2 }, { - "begin": 19689, - "end": 19752, - "name": "PUSH [tag]", - "source": 1, - "value": "331" + "begin": 25733, + "end": 25735, + "name": "PUSH", + "source": 2, + "value": "20" }, - { "begin": 19689, "end": 19752, "name": "JUMPI", "source": 1 }, { - "begin": 19748, - "end": 19749, - "name": "PUSH", - "source": 1, - "value": "0" + "begin": 25759, + "end": 25822, + "name": "PUSH [tag]", + "source": 2, + "value": "429" }, - { "begin": 19745, "end": 19746, "name": "DUP1", "source": 1 }, - { "begin": 19738, "end": 19750, "name": "REVERT", "source": 1 }, + { "begin": 25814, "end": 25821, "name": "DUP7", "source": 2 }, + { "begin": 25805, "end": 25811, "name": "DUP3", "source": 2 }, + { "begin": 25794, "end": 25803, "name": "DUP8", "source": 2 }, + { "begin": 25790, "end": 25812, "name": "ADD", "source": 2 }, { - "begin": 19689, - "end": 19752, - "name": "tag", - "source": 1, - "value": "331" + "begin": 25759, + "end": 25822, + "name": "PUSH [tag]", + "source": 2, + "value": "166" }, - { "begin": 19689, "end": 19752, "name": "JUMPDEST", "source": 1 }, - { "begin": 19636, "end": 19758, "name": "POP", "source": 1 }, { - "begin": 19636, - "end": 19758, + "begin": 25759, + "end": 25822, "name": "JUMP", - "source": 1, - "value": "[out]" + "source": 2, + "value": "[in]" }, { - "begin": 19764, - "end": 19907, + "begin": 25759, + "end": 25822, "name": "tag", - "source": 1, - "value": "119" + "source": 2, + "value": "429" }, - { "begin": 19764, "end": 19907, "name": "JUMPDEST", "source": 1 }, + { "begin": 25759, "end": 25822, "name": "JUMPDEST", "source": 2 }, + { "begin": 25749, "end": 25822, "name": "SWAP3", "source": 2 }, + { "begin": 25749, "end": 25822, "name": "POP", "source": 2 }, + { "begin": 25704, "end": 25832, "name": "POP", "source": 2 }, { - "begin": 19821, - "end": 19826, + "begin": 25871, + "end": 25873, "name": "PUSH", - "source": 1, - "value": "0" + "source": 2, + "value": "40" }, - { "begin": 19852, "end": 19858, "name": "DUP2", "source": 1 }, - { "begin": 19846, "end": 19859, "name": "MLOAD", "source": 1 }, - { "begin": 19837, "end": 19859, "name": "SWAP1", "source": 1 }, - { "begin": 19837, "end": 19859, "name": "POP", "source": 1 }, { - "begin": 19868, - "end": 19901, + "begin": 25897, + "end": 25960, "name": "PUSH [tag]", - "source": 1, - "value": "333" + "source": 2, + "value": "430" }, - { "begin": 19895, "end": 19900, "name": "DUP2", "source": 1 }, + { "begin": 25952, "end": 25959, "name": "DUP7", "source": 2 }, + { "begin": 25943, "end": 25949, "name": "DUP3", "source": 2 }, + { "begin": 25932, "end": 25941, "name": "DUP8", "source": 2 }, + { "begin": 25928, "end": 25950, "name": "ADD", "source": 2 }, { - "begin": 19868, - "end": 19901, + "begin": 25897, + "end": 25960, "name": "PUSH [tag]", - "source": 1, - "value": "118" + "source": 2, + "value": "166" }, { - "begin": 19868, - "end": 19901, + "begin": 25897, + "end": 25960, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19868, - "end": 19901, + "begin": 25897, + "end": 25960, "name": "tag", - "source": 1, - "value": "333" - }, - { "begin": 19868, "end": 19901, "name": "JUMPDEST", "source": 1 }, - { "begin": 19764, "end": 19907, "name": "SWAP3", "source": 1 }, - { "begin": 19764, "end": 19907, "name": "SWAP2", "source": 1 }, - { "begin": 19764, "end": 19907, "name": "POP", "source": 1 }, - { "begin": 19764, "end": 19907, "name": "POP", "source": 1 }, - { - "begin": 19764, - "end": 19907, + "source": 2, + "value": "430" + }, + { "begin": 25897, "end": 25960, "name": "JUMPDEST", "source": 2 }, + { "begin": 25887, "end": 25960, "name": "SWAP2", "source": 2 }, + { "begin": 25887, "end": 25960, "name": "POP", "source": 2 }, + { "begin": 25842, "end": 25970, "name": "POP", "source": 2 }, + { "begin": 25320, "end": 25977, "name": "SWAP3", "source": 2 }, + { "begin": 25320, "end": 25977, "name": "POP", "source": 2 }, + { "begin": 25320, "end": 25977, "name": "SWAP3", "source": 2 }, + { "begin": 25320, "end": 25977, "name": "POP", "source": 2 }, + { "begin": 25320, "end": 25977, "name": "SWAP3", "source": 2 }, + { + "begin": 25320, + "end": 25977, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 19913, - "end": 20572, + "begin": 25983, + "end": 26642, "name": "tag", - "source": 1, - "value": "57" + "source": 2, + "value": "104" }, - { "begin": 19913, "end": 20572, "name": "JUMPDEST", "source": 1 }, + { "begin": 25983, "end": 26642, "name": "JUMPDEST", "source": 2 }, { - "begin": 19999, - "end": 20005, + "begin": 26069, + "end": 26075, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 20007, "end": 20013, "name": "DUP1", "source": 1 }, + { "begin": 26077, "end": 26083, "name": "DUP1", "source": 2 }, { - "begin": 20015, - "end": 20021, + "begin": 26085, + "end": 26091, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 20064, - "end": 20066, + "begin": 26134, + "end": 26136, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 20052, "end": 20061, "name": "DUP5", "source": 1 }, - { "begin": 20043, "end": 20050, "name": "DUP7", "source": 1 }, - { "begin": 20039, "end": 20062, "name": "SUB", "source": 1 }, - { "begin": 20035, "end": 20067, "name": "SLT", "source": 1 }, - { "begin": 20032, "end": 20151, "name": "ISZERO", "source": 1 }, + { "begin": 26122, "end": 26131, "name": "DUP5", "source": 2 }, + { "begin": 26113, "end": 26120, "name": "DUP7", "source": 2 }, + { "begin": 26109, "end": 26132, "name": "SUB", "source": 2 }, + { "begin": 26105, "end": 26137, "name": "SLT", "source": 2 }, + { "begin": 26102, "end": 26221, "name": "ISZERO", "source": 2 }, { - "begin": 20032, - "end": 20151, + "begin": 26102, + "end": 26221, "name": "PUSH [tag]", - "source": 1, - "value": "335" + "source": 2, + "value": "432" }, - { "begin": 20032, "end": 20151, "name": "JUMPI", "source": 1 }, + { "begin": 26102, "end": 26221, "name": "JUMPI", "source": 2 }, { - "begin": 20070, - "end": 20149, + "begin": 26140, + "end": 26219, "name": "PUSH [tag]", - "source": 1, - "value": "336" + "source": 2, + "value": "433" }, { - "begin": 20070, - "end": 20149, + "begin": 26140, + "end": 26219, "name": "PUSH [tag]", - "source": 1, - "value": "59" + "source": 2, + "value": "106" }, { - "begin": 20070, - "end": 20149, + "begin": 26140, + "end": 26219, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20070, - "end": 20149, + "begin": 26140, + "end": 26219, "name": "tag", - "source": 1, - "value": "336" + "source": 2, + "value": "433" }, - { "begin": 20070, "end": 20149, "name": "JUMPDEST", "source": 1 }, + { "begin": 26140, "end": 26219, "name": "JUMPDEST", "source": 2 }, { - "begin": 20032, - "end": 20151, + "begin": 26102, + "end": 26221, "name": "tag", - "source": 1, - "value": "335" + "source": 2, + "value": "432" }, - { "begin": 20032, "end": 20151, "name": "JUMPDEST", "source": 1 }, + { "begin": 26102, "end": 26221, "name": "JUMPDEST", "source": 2 }, { - "begin": 20190, - "end": 20191, + "begin": 26260, + "end": 26261, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 20215, - "end": 20278, + "begin": 26285, + "end": 26348, "name": "PUSH [tag]", - "source": 1, - "value": "337" + "source": 2, + "value": "434" }, - { "begin": 20270, "end": 20277, "name": "DUP7", "source": 1 }, - { "begin": 20261, "end": 20267, "name": "DUP3", "source": 1 }, - { "begin": 20250, "end": 20259, "name": "DUP8", "source": 1 }, - { "begin": 20246, "end": 20268, "name": "ADD", "source": 1 }, + { "begin": 26340, "end": 26347, "name": "DUP7", "source": 2 }, + { "begin": 26331, "end": 26337, "name": "DUP3", "source": 2 }, + { "begin": 26320, "end": 26329, "name": "DUP8", "source": 2 }, + { "begin": 26316, "end": 26338, "name": "ADD", "source": 2 }, { - "begin": 20215, - "end": 20278, + "begin": 26285, + "end": 26348, "name": "PUSH [tag]", - "source": 1, - "value": "117" + "source": 2, + "value": "166" }, { - "begin": 20215, - "end": 20278, + "begin": 26285, + "end": 26348, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20215, - "end": 20278, + "begin": 26285, + "end": 26348, "name": "tag", - "source": 1, - "value": "337" + "source": 2, + "value": "434" }, - { "begin": 20215, "end": 20278, "name": "JUMPDEST", "source": 1 }, - { "begin": 20205, "end": 20278, "name": "SWAP4", "source": 1 }, - { "begin": 20205, "end": 20278, "name": "POP", "source": 1 }, - { "begin": 20161, "end": 20288, "name": "POP", "source": 1 }, + { "begin": 26285, "end": 26348, "name": "JUMPDEST", "source": 2 }, + { "begin": 26275, "end": 26348, "name": "SWAP4", "source": 2 }, + { "begin": 26275, "end": 26348, "name": "POP", "source": 2 }, + { "begin": 26231, "end": 26358, "name": "POP", "source": 2 }, { - "begin": 20327, - "end": 20329, + "begin": 26397, + "end": 26399, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 20353, - "end": 20417, + "begin": 26423, + "end": 26487, "name": "PUSH [tag]", - "source": 1, - "value": "338" + "source": 2, + "value": "435" }, - { "begin": 20409, "end": 20416, "name": "DUP7", "source": 1 }, - { "begin": 20400, "end": 20406, "name": "DUP3", "source": 1 }, - { "begin": 20389, "end": 20398, "name": "DUP8", "source": 1 }, - { "begin": 20385, "end": 20407, "name": "ADD", "source": 1 }, + { "begin": 26479, "end": 26486, "name": "DUP7", "source": 2 }, + { "begin": 26470, "end": 26476, "name": "DUP3", "source": 2 }, + { "begin": 26459, "end": 26468, "name": "DUP8", "source": 2 }, + { "begin": 26455, "end": 26477, "name": "ADD", "source": 2 }, { - "begin": 20353, - "end": 20417, + "begin": 26423, + "end": 26487, "name": "PUSH [tag]", - "source": 1, - "value": "119" + "source": 2, + "value": "165" }, { - "begin": 20353, - "end": 20417, + "begin": 26423, + "end": 26487, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20353, - "end": 20417, + "begin": 26423, + "end": 26487, "name": "tag", - "source": 1, - "value": "338" + "source": 2, + "value": "435" }, - { "begin": 20353, "end": 20417, "name": "JUMPDEST", "source": 1 }, - { "begin": 20343, "end": 20417, "name": "SWAP3", "source": 1 }, - { "begin": 20343, "end": 20417, "name": "POP", "source": 1 }, - { "begin": 20298, "end": 20427, "name": "POP", "source": 1 }, + { "begin": 26423, "end": 26487, "name": "JUMPDEST", "source": 2 }, + { "begin": 26413, "end": 26487, "name": "SWAP3", "source": 2 }, + { "begin": 26413, "end": 26487, "name": "POP", "source": 2 }, + { "begin": 26368, "end": 26497, "name": "POP", "source": 2 }, { - "begin": 20466, - "end": 20468, + "begin": 26536, + "end": 26538, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { - "begin": 20492, - "end": 20555, + "begin": 26562, + "end": 26625, "name": "PUSH [tag]", - "source": 1, - "value": "339" + "source": 2, + "value": "436" }, - { "begin": 20547, "end": 20554, "name": "DUP7", "source": 1 }, - { "begin": 20538, "end": 20544, "name": "DUP3", "source": 1 }, - { "begin": 20527, "end": 20536, "name": "DUP8", "source": 1 }, - { "begin": 20523, "end": 20545, "name": "ADD", "source": 1 }, + { "begin": 26617, "end": 26624, "name": "DUP7", "source": 2 }, + { "begin": 26608, "end": 26614, "name": "DUP3", "source": 2 }, + { "begin": 26597, "end": 26606, "name": "DUP8", "source": 2 }, + { "begin": 26593, "end": 26615, "name": "ADD", "source": 2 }, { - "begin": 20492, - "end": 20555, + "begin": 26562, + "end": 26625, "name": "PUSH [tag]", - "source": 1, - "value": "117" + "source": 2, + "value": "166" }, { - "begin": 20492, - "end": 20555, + "begin": 26562, + "end": 26625, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20492, - "end": 20555, + "begin": 26562, + "end": 26625, "name": "tag", - "source": 1, - "value": "339" - }, - { "begin": 20492, "end": 20555, "name": "JUMPDEST", "source": 1 }, - { "begin": 20482, "end": 20555, "name": "SWAP2", "source": 1 }, - { "begin": 20482, "end": 20555, "name": "POP", "source": 1 }, - { "begin": 20437, "end": 20565, "name": "POP", "source": 1 }, - { "begin": 19913, "end": 20572, "name": "SWAP3", "source": 1 }, - { "begin": 19913, "end": 20572, "name": "POP", "source": 1 }, - { "begin": 19913, "end": 20572, "name": "SWAP3", "source": 1 }, - { "begin": 19913, "end": 20572, "name": "POP", "source": 1 }, - { "begin": 19913, "end": 20572, "name": "SWAP3", "source": 1 }, - { - "begin": 19913, - "end": 20572, + "source": 2, + "value": "436" + }, + { "begin": 26562, "end": 26625, "name": "JUMPDEST", "source": 2 }, + { "begin": 26552, "end": 26625, "name": "SWAP2", "source": 2 }, + { "begin": 26552, "end": 26625, "name": "POP", "source": 2 }, + { "begin": 26507, "end": 26635, "name": "POP", "source": 2 }, + { "begin": 25983, "end": 26642, "name": "SWAP3", "source": 2 }, + { "begin": 25983, "end": 26642, "name": "POP", "source": 2 }, + { "begin": 25983, "end": 26642, "name": "SWAP3", "source": 2 }, + { "begin": 25983, "end": 26642, "name": "POP", "source": 2 }, + { "begin": 25983, "end": 26642, "name": "SWAP3", "source": 2 }, + { + "begin": 25983, + "end": 26642, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" } ] @@ -20057,28 +26558,32 @@ } }, "methodIdentifiers": { + "fee_per_second((uint8,bytes[]))": "83f09082", "index_to_account(uint16)": "71b0edfa", "transact_info((uint8,bytes[]))": "f87f493f", + "transact_info_with_signed((uint8,bytes[]))": "cb26bf32", "transact_through_derivative(uint8,uint16,address,uint64,bytes)": "267d4062", "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)": "9f89f03e", + "transact_through_signed((uint8,bytes[]),address,uint64,bytes)": "0139d697", + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)": "19760407", "xcmtransactor()": "61fc548f" } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"index_to_account\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"multilocation\",\"type\":\"tuple\"}],\"name\":\"transact_info\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"transactor\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"currency_id\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"inner_call\",\"type\":\"bytes\"}],\"name\":\"transact_through_derivative\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"transactor\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"fee_asset\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"inner_call\",\"type\":\"bytes\"}],\"name\":\"transact_through_derivative_multilocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xcmtransactor\",\"outputs\":[{\"internalType\":\"contract XcmTransactor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"index_to_account(uint16)\":{\"params\":{\"index\":\"The index of which we want to retrieve the account\"}},\"transact_info((uint8,bytes[]))\":{\"params\":{\"multilocation\":\"The location for which we want to retrieve transact info\"}},\"transact_through_derivative(uint8,uint16,address,uint64,bytes)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currency_id\":\"Address of the currencyId of the asset to be used for fees It has to be a reserve of the destination chain\",\"index\":\"The index to be used\",\"inner_call\":\"The inner call to be executed in the destination chain\",\"transactor\":\"The transactor to be used\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"fee_asset\":\"The asset in which we want to pay fees. It has to be a reserve of the destination chain\",\"index\":\"The index to be used\",\"inner_call\":\"The inner call to be executed in the destination chain\",\"transactor\":\"The transactor to be used\",\"weight\":\"The weight we want to buy in the destination chain\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"index_to_account(uint16)\":{\"notice\":\"Get index of an account in xcm transactor\"},\"transact_info((uint8,bytes[]))\":{\"notice\":\"Get transact info of a multilocation Selector 71b0edfa\"},\"transact_through_derivative(uint8,uint16,address,uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its currency_id\"},\"transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its multilocation\"},\"xcmtransactor()\":{\"notice\":\"The Xcm Transactor wrapper at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"XcmTransactorInstance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xb14662b54d0168dd23e6f47c545fcee9f418fcf7aee39065bf05317339eaeb5b\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cea58e5636585ec0d117872fd09bb5315078257a20bb58ad6824fd64ce8664d3\",\"dweb:/ipfs/QmYBG2jamBRmreuajupRiZsPfu8t9nuwu3dyCm4ENunDf4\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"multilocation\",\"type\":\"tuple\"}],\"name\":\"fee_per_second\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"index_to_account\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"multilocation\",\"type\":\"tuple\"}],\"name\":\"transact_info\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"multilocation\",\"type\":\"tuple\"}],\"name\":\"transact_info_with_signed\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"transactor\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"currency_id\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"inner_call\",\"type\":\"bytes\"}],\"name\":\"transact_through_derivative\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"transactor\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"fee_asset\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"inner_call\",\"type\":\"bytes\"}],\"name\":\"transact_through_derivative_multilocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"dest\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"fee_location_address\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"call\",\"type\":\"bytes\"}],\"name\":\"transact_through_signed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"dest\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct XcmTransactor.Multilocation\",\"name\":\"fee_location\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"call\",\"type\":\"bytes\"}],\"name\":\"transact_through_signed_multilocation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xcmtransactor\",\"outputs\":[{\"internalType\":\"contract XcmTransactor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"fee_per_second((uint8,bytes[]))\":{\"params\":{\"multilocation\":\"The asset location for which we want to know the fee per second value\"},\"returns\":{\"_0\":\"The fee per second that the reserve chain charges for this asset\"}},\"index_to_account(uint16)\":{\"params\":{\"index\":\"The index of which we want to retrieve the account\"},\"returns\":{\"_0\":\"The owner of the derivative index\"}},\"transact_info((uint8,bytes[]))\":{\"params\":{\"multilocation\":\"The location for which we want to know the transact info\"},\"returns\":{\"_0\":\"The extra weight involved in the XCM message of using derivative\",\"_1\":\"The amount of fee charged for a second of execution in the dest\",\"_2\":\"Maximum allowed weight for a single message in dest\"}},\"transact_info_with_signed((uint8,bytes[]))\":{\"params\":{\"multilocation\":\"The location for which we want to know the transact info\"},\"returns\":{\"_0\":\"The extra weight involved in the XCM message of using derivative\",\"_1\":\"The extra weight involved in the XCM message of using signed\",\"_2\":\"Maximum allowed weight for a single message in dest\"}},\"transact_through_derivative(uint8,uint16,address,uint64,bytes)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currency_id\":\"Address of the currencyId of the asset to be used for fees It has to be a reserve of the destination chain\",\"index\":\"The index to be used\",\"inner_call\":\"The inner call to be executed in the destination chain\",\"transactor\":\"The transactor to be used\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"fee_asset\":\"The asset in which we want to pay fees. It has to be a reserve of the destination chain\",\"index\":\"The index to be used\",\"inner_call\":\"The inner call to be executed in the destination chain\",\"transactor\":\"The transactor to be used\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transact_through_signed((uint8,bytes[]),address,uint64,bytes)\":{\"details\":\"No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call\",\"params\":{\"call\":\"The call to be executed in the destination chain\",\"dest\":\"The destination chain (as multilocation) where to send the message\",\"fee_location_address\":\"The ERC20 address of the token we want to use to pay for fees only callable if such an asset has been BRIDGED to our chain\",\"weight\":\"The weight we want to buy in the destination chain for the call to be made\"}},\"transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)\":{\"details\":\"No token is burnt before sending the message. The caller must ensure the destination is able to undertand the DescendOrigin message, and create a unique account from which dispatch the call\",\"params\":{\"call\":\"The call to be executed in the destination chain\",\"dest\":\"The destination chain (as multilocation) where to send the message\",\"fee_location\":\"The asset multilocation that indentifies the fee payment currency It has to be a reserve of the destination chain\",\"weight\":\"The weight we want to buy in the destination chain for the call to be made\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"fee_per_second((uint8,bytes[]))\":{\"notice\":\"Get fee per second charged in its reserve chain for an asset Selector 83f09082\"},\"index_to_account(uint16)\":{\"notice\":\"Get index of an account in xcm transactor Selector 71b0edfa\"},\"transact_info((uint8,bytes[]))\":{\"notice\":\"Get transact info of a multilocation Selector f87f493f\"},\"transact_info_with_signed((uint8,bytes[]))\":{\"notice\":\"Get transact info of a multilocation Selector cb26bf32\"},\"transact_through_derivative(uint8,uint16,address,uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its currency_id Selector 267d4062\"},\"transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its multilocation Selector 9f89f03e\"},\"transact_through_signed((uint8,bytes[]),address,uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its erc20 address through signed origins Selector 0139d697\"},\"transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)\":{\"notice\":\"Transact through XCM using fee based on its multilocation through signed origins Selector 19760407\"},\"xcmtransactor()\":{\"notice\":\"The Xcm Transactor wrapper at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"XcmTransactorInstance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xe67ddfd897c9f3059885325d1800d975db1491d72c9562fb83236ca48503d790\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://cfc993d17ad8000b754c27a4457e8f479d25db11937081db449265dd84f8a646\",\"dweb:/ipfs/QmXciFqLuWQ4xRtKvp3jaCvRiKqTPJ65P8jCLbWwJ65vBy\"]},\"precompiles/xcm-transactor/XcmTransactor.sol\":{\"keccak256\":\"0x5a2f8ced3e0294d2d7748203ff07868d64fdae9536fe76518989196cd4438505\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://a9403f646e442983d4fcfcc0395277e33003a5a4a01d2f2d79fdb068f21b5ede\",\"dweb:/ipfs/QmSHGiFx2RurfXV79wpG7CUXBzmn3PugeUjv5q4H4SYuch\"]}},\"version\":1}", "storageLayout": { "storage": [ { - "astId": 68, + "astId": 11, "contract": "main.sol:XcmTransactorInstance", "label": "xcmtransactor", "offset": 0, "slot": "0", - "type": "t_contract(XcmTransactor)59" + "type": "t_contract(XcmTransactor)286" } ], "types": { - "t_contract(XcmTransactor)59": { + "t_contract(XcmTransactor)286": { "encoding": "inplace", "label": "contract XcmTransactor", "numberOfBytes": "20" @@ -20088,17 +26593,29 @@ "userdoc": { "kind": "user", "methods": { + "fee_per_second((uint8,bytes[]))": { + "notice": "Get fee per second charged in its reserve chain for an asset Selector 83f09082" + }, "index_to_account(uint16)": { - "notice": "Get index of an account in xcm transactor" + "notice": "Get index of an account in xcm transactor Selector 71b0edfa" }, "transact_info((uint8,bytes[]))": { - "notice": "Get transact info of a multilocation Selector 71b0edfa" + "notice": "Get transact info of a multilocation Selector f87f493f" + }, + "transact_info_with_signed((uint8,bytes[]))": { + "notice": "Get transact info of a multilocation Selector cb26bf32" }, "transact_through_derivative(uint8,uint16,address,uint64,bytes)": { - "notice": "Transact through XCM using fee based on its currency_id" + "notice": "Transact through XCM using fee based on its currency_id Selector 267d4062" }, "transact_through_derivative_multilocation(uint8,uint16,(uint8,bytes[]),uint64,bytes)": { - "notice": "Transact through XCM using fee based on its multilocation" + "notice": "Transact through XCM using fee based on its multilocation Selector 9f89f03e" + }, + "transact_through_signed((uint8,bytes[]),address,uint64,bytes)": { + "notice": "Transact through XCM using fee based on its erc20 address through signed origins Selector 0139d697" + }, + "transact_through_signed_multilocation((uint8,bytes[]),(uint8,bytes[]),uint64,bytes)": { + "notice": "Transact through XCM using fee based on its multilocation through signed origins Selector 19760407" }, "xcmtransactor()": { "notice": "The Xcm Transactor wrapper at the known pre-compile address." @@ -20107,5 +26624,5 @@ "version": 1 } }, - "sourceCode": "\n // SPDX-License-Identifier: GPL-3.0-only\n pragma solidity >=0.8.0;\n\n /**\n * @title Xcm Transactor Interface\n *\n * The interface through which solidity contracts will interact with xcm transactor pallet\n *\n */\n interface XcmTransactor {\n // A multilocation is defined by its number of parents and the encoded junctions (interior)\n struct Multilocation {\n uint8 parents;\n bytes [] interior;\n }\n\n /** Get index of an account in xcm transactor\n *\n * @param index The index of which we want to retrieve the account\n */\n function index_to_account(uint16 index) external view returns(address);\n\n /** Get transact info of a multilocation\n * Selector 71b0edfa\n * @param multilocation The location for which we want to retrieve transact info\n */\n function transact_info(\n Multilocation memory multilocation) \n external view returns(uint64, uint256, uint64);\n\n /** Transact through XCM using fee based on its multilocation\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param transactor The transactor to be used\n * @param index The index to be used\n * @param fee_asset The asset in which we want to pay fees. \n * It has to be a reserve of the destination chain\n * @param weight The weight we want to buy in the destination chain\n * @param inner_call The inner call to be executed in the destination chain\n */\n function transact_through_derivative_multilocation(\n uint8 transactor,\n uint16 index,\n Multilocation memory fee_asset,\n uint64 weight,\n bytes memory inner_call\n ) external;\n \n /** Transact through XCM using fee based on its currency_id\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param transactor The transactor to be used\n * @param index The index to be used\n * @param currency_id Address of the currencyId of the asset to be used for fees\n * It has to be a reserve of the destination chain\n * @param weight The weight we want to buy in the destination chain\n * @param inner_call The inner call to be executed in the destination chain\n */\n function transact_through_derivative(\n uint8 transactor,\n uint16 index,\n address currency_id,\n uint64 weight,\n bytes memory inner_call\n ) external;\n }\n\n contract XcmTransactorInstance is XcmTransactor {\n\n /// The Xcm Transactor wrapper at the known pre-compile address.\n XcmTransactor public xcmtransactor = XcmTransactor(0x0000000000000000000000000000000000000806);\n\n function index_to_account(uint16 index) external view override returns(address) {\n // We nominate our target collator with all the tokens provided\n return xcmtransactor.index_to_account(index);\n }\n\n function transact_info(\n Multilocation memory multilocation\n ) external view override returns(uint64, uint256, uint64) {\n // We nominate our target collator with all the tokens provided\n return xcmtransactor.transact_info(multilocation);\n }\n\n function transact_through_derivative_multilocation(\n uint8 transactor,\n uint16 index,\n Multilocation memory fee_asset,\n uint64 weight,\n bytes memory inner_call\n ) override external {\n xcmtransactor.transact_through_derivative_multilocation(\n transactor,\n index,\n fee_asset,\n weight,\n inner_call\n );\n }\n \n function transact_through_derivative(\n uint8 transactor,\n uint16 index,\n address currency_id,\n uint64 weight,\n bytes memory inner_call\n ) override external {\n xcmtransactor.transact_through_derivative(\n transactor,\n index,\n currency_id,\n weight,\n inner_call\n );\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\nimport \"../../../precompiles/xcm-transactor/XcmTransactor.sol\";\n\ncontract XcmTransactorInstance is XcmTransactor {\n /// The Xcm Transactor wrapper at the known pre-compile address.\n XcmTransactor public xcmtransactor =\n XcmTransactor(0x0000000000000000000000000000000000000806);\n\n function index_to_account(uint16 index)\n external\n view\n override\n returns (address)\n {\n // We nominate our target collator with all the tokens provided\n return xcmtransactor.index_to_account(index);\n }\n\n function transact_info(Multilocation memory multilocation)\n external\n view\n override\n returns (\n uint64,\n uint256,\n uint64\n )\n {\n return xcmtransactor.transact_info(multilocation);\n }\n\n function transact_info_with_signed(Multilocation memory multilocation)\n external\n view\n override\n returns (\n uint64,\n uint64,\n uint64\n )\n {\n return xcmtransactor.transact_info_with_signed(multilocation);\n }\n\n function fee_per_second(Multilocation memory multilocation)\n external\n view\n override\n returns (uint256)\n {\n return xcmtransactor.fee_per_second(multilocation);\n }\n\n function transact_through_derivative_multilocation(\n uint8 transactor,\n uint16 index,\n Multilocation memory fee_asset,\n uint64 weight,\n bytes memory inner_call\n ) external override {\n xcmtransactor.transact_through_derivative_multilocation(\n transactor,\n index,\n fee_asset,\n weight,\n inner_call\n );\n }\n\n function transact_through_derivative(\n uint8 transactor,\n uint16 index,\n address currency_id,\n uint64 weight,\n bytes memory inner_call\n ) external override {\n xcmtransactor.transact_through_derivative(\n transactor,\n index,\n currency_id,\n weight,\n inner_call\n );\n }\n\n function transact_through_signed(\n Multilocation memory dest,\n address fee_location_address,\n uint64 weight,\n bytes memory call\n ) external override {\n xcmtransactor.transact_through_signed(\n dest,\n fee_location_address,\n weight,\n call\n );\n }\n\n function transact_through_signed_multilocation(\n Multilocation memory dest,\n Multilocation memory fee_location,\n uint64 weight,\n bytes memory call\n ) external override {\n xcmtransactor.transact_through_signed_multilocation(\n dest,\n fee_location,\n weight,\n call\n );\n }\n}\n" } diff --git a/tests/contracts/compiled/Xtokens.json b/tests/contracts/compiled/Xtokens.json new file mode 100644 index 0000000000..97be8e0fa7 --- /dev/null +++ b/tests/contracts/compiled/Xtokens.json @@ -0,0 +1,336 @@ +{ + "byteCode": "0x", + "contract": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "currency_address", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "destination", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint8", + "name": "parents", + "type": "uint8" + }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "location", + "type": "tuple" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct Xtokens.MultiAsset[]", + "name": "assets", + "type": "tuple[]" + }, + { "internalType": "uint32", "name": "fee_item", "type": "uint32" }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "destination", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" } + ], + "name": "transfer_multi_assets", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "currency_address", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" } + ], + "internalType": "struct Xtokens.Currency[]", + "name": "currencies", + "type": "tuple[]" + }, + { "internalType": "uint32", "name": "fee_item", "type": "uint32" }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "destination", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" } + ], + "name": "transfer_multi_currencies", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "asset", + "type": "tuple" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "destination", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" } + ], + "name": "transfer_multiasset", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "asset", + "type": "tuple" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "uint256", "name": "fee", "type": "uint256" }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "destination", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" } + ], + "name": "transfer_multiasset_with_fee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "currency_address", + "type": "address" + }, + { "internalType": "uint256", "name": "amount", "type": "uint256" }, + { "internalType": "uint256", "name": "fee", "type": "uint256" }, + { + "components": [ + { "internalType": "uint8", "name": "parents", "type": "uint8" }, + { + "internalType": "bytes[]", + "name": "interior", + "type": "bytes[]" + } + ], + "internalType": "struct Xtokens.Multilocation", + "name": "destination", + "type": "tuple" + }, + { "internalType": "uint64", "name": "weight", "type": "uint64" } + ], + "name": "transfer_with_fee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "transfer(address,uint256,(uint8,bytes[]),uint64)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "amount": "The amount of tokens we want to transfer", + "currency_address": "The ERC20 address of the currency we want to transfer", + "destination": "The weight we want to buy in the destination chain Selector: b9f813ff" + } + }, + "transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "assets": "The assets we want to transfer, defined by their location and amount.", + "destination": "The Multilocation to which we want to send the tokens", + "fee_item": "Which of the currencies to be used as fee", + "weight": "The weight we want to buy in the destination chain Selector: b38c60fa" + } + }, + "transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "currencies": "The currencies we want to transfer, defined by their address and amount.", + "destination": "The Multilocation to which we want to send the tokens", + "fee_item": "Which of the currencies to be used as fee", + "weight": "The weight we want to buy in the destination chain Selector: 8a362d5c" + } + }, + "transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "amount": "The amount of tokens we want to transfer", + "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", + "destination": "The weight we want to buy in the destination chain Selector: b38c60fa" + } + }, + "transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "amount": "The amount of tokens we want to transfer", + "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", + "destination": "The weight we want to buy in the destination chain Selector: 89a570fc" + } + }, + "transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)": { + "details": "The token transfer burns/transfers the corresponding amount before sending", + "params": { + "amount": "The amount of tokens we want to transfer", + "currency_address": "The ERC20 address of the currency we want to transfer", + "destination": "The weight we want to buy in the destination chain" + } + } + }, + "title": "Xtokens Interface The interface through which solidity contracts will interact with xtokens pallet Address : 0x0000000000000000000000000000000000000804", + "version": 1 + }, + "evm": { + "assembly": "", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "functionDebugData": {}, + "generatedSources": [], + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "legacyAssembly": null, + "methodIdentifiers": { + "transfer(address,uint256,(uint8,bytes[]),uint64)": "b9f813ff", + "transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)": "dab20fdc", + "transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)": "8a362d5c", + "transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)": "b38c60fa", + "transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)": "89a570fc", + "transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)": "94f69115" + } + }, + "ewasm": { "wasm": "" }, + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"location\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.MultiAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"fee_item\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multi_assets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.Currency[]\",\"name\":\"currencies\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"fee_item\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multi_currencies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multiasset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multiasset_with_fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_with_fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currency_address\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain Selector: b9f813ff\"}},\"transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"assets\":\"The assets we want to transfer, defined by their location and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"fee_item\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain Selector: b38c60fa\"}},\"transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currencies\":\"The currencies we want to transfer, defined by their address and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"fee_item\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain Selector: 8a362d5c\"}},\"transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain Selector: b38c60fa\"}},\"transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain Selector: 89a570fc\"}},\"transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currency_address\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}}},\"title\":\"Xtokens Interface The interface through which solidity contracts will interact with xtokens pallet Address : 0x0000000000000000000000000000000000000804\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId\"},\"transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its location specifying fee\"},\"transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its address specifying fee\"},\"transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation\"},\"transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation specifying fee\"},\"transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId specifying fee\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"Xtokens\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0x99336cb8e07e1e5341b96f9cd0e54c532e6b9e293a845ee2390e9feaad2f67de\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1689443a4ccefae92b268afdcafe018c54a189efee91532f8a0ad10aa9a57d95\",\"dweb:/ipfs/QmTD3WjviaJgaa765GxwcS3yMhVN3C2ccJQJdNTKn8Piv5\"]}},\"version\":1}", + "storageLayout": { "storage": [], "types": null }, + "userdoc": { + "kind": "user", + "methods": { + "transfer(address,uint256,(uint8,bytes[]),uint64)": { + "notice": "Transfer a token through XCM based on its currencyId" + }, + "transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)": { + "notice": "Transfer several tokens at once through XCM based on its location specifying fee" + }, + "transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)": { + "notice": "Transfer several tokens at once through XCM based on its address specifying fee" + }, + "transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)": { + "notice": "Transfer a token through XCM based on its MultiLocation" + }, + "transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)": { + "notice": "Transfer a token through XCM based on its MultiLocation specifying fee" + }, + "transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)": { + "notice": "Transfer a token through XCM based on its currencyId specifying fee" + } + }, + "version": 1 + } + }, + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\n/**\n * @title Xtokens Interface\n * The interface through which solidity contracts will interact with xtokens pallet\n * Address : 0x0000000000000000000000000000000000000804\n */\n\ninterface Xtokens {\n // A multilocation is defined by its number of parents and the encoded junctions (interior)\n struct Multilocation {\n uint8 parents;\n bytes[] interior;\n }\n\n // A MultiAsset is defined by a multilocation and an amount\n struct MultiAsset {\n Multilocation location;\n uint256 amount;\n }\n\n // A Currency is defined by address and the amount to be transferred\n struct Currency {\n address currency_address;\n uint256 amount;\n }\n\n /** Transfer a token through XCM based on its currencyId\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param currency_address The ERC20 address of the currency we want to transfer\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n * Selector: b9f813ff\n */\n function transfer(\n address currency_address,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /** Transfer a token through XCM based on its currencyId specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param currency_address The ERC20 address of the currency we want to transfer\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n */\n function transfer_with_fee(\n address currency_address,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /** Transfer a token through XCM based on its MultiLocation\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param asset The asset we want to transfer, defined by its multilocation.\n * Currently only Concrete Fungible assets\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n * Selector: b38c60fa\n */\n function transfer_multiasset(\n Multilocation memory asset,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /** Transfer a token through XCM based on its MultiLocation specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param asset The asset we want to transfer, defined by its multilocation.\n * Currently only Concrete Fungible assets\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n * Selector: 89a570fc\n */\n function transfer_multiasset_with_fee(\n Multilocation memory asset,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /** Transfer several tokens at once through XCM based on its address specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param currencies The currencies we want to transfer, defined by their address and amount.\n * @param fee_item Which of the currencies to be used as fee\n * @param destination The Multilocation to which we want to send the tokens\n * @param weight The weight we want to buy in the destination chain\n * Selector: 8a362d5c\n */\n function transfer_multi_currencies(\n Currency[] memory currencies,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) external;\n\n /** Transfer several tokens at once through XCM based on its location specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param assets The assets we want to transfer, defined by their location and amount.\n * @param fee_item Which of the currencies to be used as fee\n * @param destination The Multilocation to which we want to send the tokens\n * @param weight The weight we want to buy in the destination chain\n * Selector: b38c60fa\n */\n function transfer_multi_assets(\n MultiAsset[] memory assets,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) external;\n}\n" +} diff --git a/tests/contracts/compiled/XtokensInstance.json b/tests/contracts/compiled/XtokensInstance.json index 72cd78e3cb..9ccf4a5725 100644 --- a/tests/contracts/compiled/XtokensInstance.json +++ b/tests/contracts/compiled/XtokensInstance.json @@ -1,5 +1,5 @@ { - "byteCode": "0x60806040526108046000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b506115bf806100626000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063af3dcee81161005b578063af3dcee8146100d6578063b38c60fa146100f4578063b9f813ff14610110578063dab20fdc1461012c5761007d565b806389a570fc146100825780638a362d5c1461009e57806394f69115146100ba575b600080fd5b61009c60048036038101906100979190610861565b610148565b005b6100b860048036038101906100b39190610ac1565b6101e2565b005b6100d460048036038101906100cf9190610b60565b610279565b005b6100de610313565b6040516100eb9190610c56565b60405180910390f35b61010e60048036038101906101099190610c71565b610337565b005b61012a60048036038101906101259190610d10565b6103ce565b005b61014660048036038101906101419190610ee0565b610465565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389a570fc86868686866040518663ffffffff1660e01b81526004016101a9959493929190611133565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a362d5c858585856040518563ffffffff1660e01b8152600401610241949392919061129f565b600060405180830381600087803b15801561025b57600080fd5b505af115801561026f573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394f6911586868686866040518663ffffffff1660e01b81526004016102da959493929190611301565b600060405180830381600087803b1580156102f457600080fd5b505af1158015610308573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b38c60fa858585856040518563ffffffff1660e01b8152600401610396949392919061135b565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9f813ff858585856040518563ffffffff1660e01b815260040161042d94939291906113ae565b600060405180830381600087803b15801561044757600080fd5b505af115801561045b573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dab20fdc858585856040518563ffffffff1660e01b81526004016104c49493929190611536565b600060405180830381600087803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61055e82610515565b810181811067ffffffffffffffff8211171561057d5761057c610526565b5b80604052505050565b60006105906104fc565b905061059c8282610555565b919050565b600080fd5b600060ff82169050919050565b6105bc816105a6565b81146105c757600080fd5b50565b6000813590506105d9816105b3565b92915050565b600080fd5b600067ffffffffffffffff8211156105ff576105fe610526565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561063557610634610526565b5b61063e82610515565b9050602081019050919050565b82818337600083830152505050565b600061066d6106688461061a565b610586565b90508281526020810184848401111561068957610688610615565b5b61069484828561064b565b509392505050565b600082601f8301126106b1576106b06105df565b5b81356106c184826020860161065a565b91505092915050565b60006106dd6106d8846105e4565b610586565b90508083825260208201905060208402830185811115610700576106ff610610565b5b835b8181101561074757803567ffffffffffffffff811115610725576107246105df565b5b808601610732898261069c565b85526020850194505050602081019050610702565b5050509392505050565b600082601f830112610766576107656105df565b5b81356107768482602086016106ca565b91505092915050565b60006040828403121561079557610794610510565b5b61079f6040610586565b905060006107af848285016105ca565b600083015250602082013567ffffffffffffffff8111156107d3576107d26105a1565b5b6107df84828501610751565b60208301525092915050565b6000819050919050565b6107fe816107eb565b811461080957600080fd5b50565b60008135905061081b816107f5565b92915050565b600067ffffffffffffffff82169050919050565b61083e81610821565b811461084957600080fd5b50565b60008135905061085b81610835565b92915050565b600080600080600060a0868803121561087d5761087c610506565b5b600086013567ffffffffffffffff81111561089b5761089a61050b565b5b6108a78882890161077f565b95505060206108b88882890161080c565b94505060406108c98882890161080c565b935050606086013567ffffffffffffffff8111156108ea576108e961050b565b5b6108f68882890161077f565b92505060806109078882890161084c565b9150509295509295909350565b600067ffffffffffffffff82111561092f5761092e610526565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061096b82610940565b9050919050565b61097b81610960565b811461098657600080fd5b50565b60008135905061099881610972565b92915050565b6000604082840312156109b4576109b3610510565b5b6109be6040610586565b905060006109ce84828501610989565b60008301525060206109e28482850161080c565b60208301525092915050565b6000610a016109fc84610914565b610586565b90508083825260208201905060408402830185811115610a2457610a23610610565b5b835b81811015610a4d5780610a39888261099e565b845260208401935050604081019050610a26565b5050509392505050565b600082601f830112610a6c57610a6b6105df565b5b8135610a7c8482602086016109ee565b91505092915050565b600063ffffffff82169050919050565b610a9e81610a85565b8114610aa957600080fd5b50565b600081359050610abb81610a95565b92915050565b60008060008060808587031215610adb57610ada610506565b5b600085013567ffffffffffffffff811115610af957610af861050b565b5b610b0587828801610a57565b9450506020610b1687828801610aac565b935050604085013567ffffffffffffffff811115610b3757610b3661050b565b5b610b438782880161077f565b9250506060610b548782880161084c565b91505092959194509250565b600080600080600060a08688031215610b7c57610b7b610506565b5b6000610b8a88828901610989565b9550506020610b9b8882890161080c565b9450506040610bac8882890161080c565b935050606086013567ffffffffffffffff811115610bcd57610bcc61050b565b5b610bd98882890161077f565b9250506080610bea8882890161084c565b9150509295509295909350565b6000819050919050565b6000610c1c610c17610c1284610940565b610bf7565b610940565b9050919050565b6000610c2e82610c01565b9050919050565b6000610c4082610c23565b9050919050565b610c5081610c35565b82525050565b6000602082019050610c6b6000830184610c47565b92915050565b60008060008060808587031215610c8b57610c8a610506565b5b600085013567ffffffffffffffff811115610ca957610ca861050b565b5b610cb58782880161077f565b9450506020610cc68782880161080c565b935050604085013567ffffffffffffffff811115610ce757610ce661050b565b5b610cf38782880161077f565b9250506060610d048782880161084c565b91505092959194509250565b60008060008060808587031215610d2a57610d29610506565b5b6000610d3887828801610989565b9450506020610d498782880161080c565b935050604085013567ffffffffffffffff811115610d6a57610d6961050b565b5b610d768782880161077f565b9250506060610d878782880161084c565b91505092959194509250565b600067ffffffffffffffff821115610dae57610dad610526565b5b602082029050602081019050919050565b600060408284031215610dd557610dd4610510565b5b610ddf6040610586565b9050600082013567ffffffffffffffff811115610dff57610dfe6105a1565b5b610e0b8482850161077f565b6000830152506020610e1f8482850161080c565b60208301525092915050565b6000610e3e610e3984610d93565b610586565b90508083825260208201905060208402830185811115610e6157610e60610610565b5b835b81811015610ea857803567ffffffffffffffff811115610e8657610e856105df565b5b808601610e938982610dbf565b85526020850194505050602081019050610e63565b5050509392505050565b600082601f830112610ec757610ec66105df565b5b8135610ed7848260208601610e2b565b91505092915050565b60008060008060808587031215610efa57610ef9610506565b5b600085013567ffffffffffffffff811115610f1857610f1761050b565b5b610f2487828801610eb2565b9450506020610f3587828801610aac565b935050604085013567ffffffffffffffff811115610f5657610f5561050b565b5b610f628782880161077f565b9250506060610f738782880161084c565b91505092959194509250565b610f88816105a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ff4578082015181840152602081019050610fd9565b83811115611003576000848401525b50505050565b600061101482610fba565b61101e8185610fc5565b935061102e818560208601610fd6565b61103781610515565b840191505092915050565b600061104e8383611009565b905092915050565b6000602082019050919050565b600061106e82610f8e565b6110788185610f99565b93508360208202850161108a85610faa565b8060005b858110156110c657848403895281516110a78582611042565b94506110b283611056565b925060208a0199505060018101905061108e565b50829750879550505050505092915050565b60006040830160008301516110f06000860182610f7f565b50602083015184820360208601526111088282611063565b9150508091505092915050565b61111e816107eb565b82525050565b61112d81610821565b82525050565b600060a082019050818103600083015261114d81886110d8565b905061115c6020830187611115565b6111696040830186611115565b818103606083015261117b81856110d8565b905061118a6080830184611124565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6111c981610960565b82525050565b6111d8816107eb565b82525050565b6040820160008201516111f460008501826111c0565b50602082015161120760208501826111cf565b50505050565b600061121983836111de565b60408301905092915050565b6000602082019050919050565b600061123d82611194565b611247818561119f565b9350611252836111b0565b8060005b8381101561128357815161126a888261120d565b975061127583611225565b925050600181019050611256565b5085935050505092915050565b61129981610a85565b82525050565b600060808201905081810360008301526112b98187611232565b90506112c86020830186611290565b81810360408301526112da81856110d8565b90506112e96060830184611124565b95945050505050565b6112fb81610960565b82525050565b600060a08201905061131660008301886112f2565b6113236020830187611115565b6113306040830186611115565b818103606083015261134281856110d8565b90506113516080830184611124565b9695505050505050565b6000608082019050818103600083015261137581876110d8565b90506113846020830186611115565b818103604083015261139681856110d8565b90506113a56060830184611124565b95945050505050565b60006080820190506113c360008301876112f2565b6113d06020830186611115565b81810360408301526113e281856110d8565b90506113f16060830184611124565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060408301600083015161143e6000860182610f7f565b50602083015184820360208601526114568282611063565b9150508091505092915050565b600060408301600083015184820360008601526114808282611426565b915050602083015161149560208601826111cf565b508091505092915050565b60006114ac8383611463565b905092915050565b6000602082019050919050565b60006114cc826113fa565b6114d68185611405565b9350836020820285016114e885611416565b8060005b85811015611524578484038952815161150585826114a0565b9450611510836114b4565b925060208a019950506001810190506114ec565b50829750879550505050505092915050565b6000608082019050818103600083015261155081876114c1565b905061155f6020830186611290565b818103604083015261157181856110d8565b90506115806060830184611124565b9594505050505056fea264697066735822122032dfb9c750567e10ba5fcf6b460f97ca764c58029ec0ed48d16954288648a94764736f6c634300080b0033", + "byteCode": "0x60806040526108046000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b506115bf806100626000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063af3dcee81161005b578063af3dcee8146100d6578063b38c60fa146100f4578063b9f813ff14610110578063dab20fdc1461012c5761007d565b806389a570fc146100825780638a362d5c1461009e57806394f69115146100ba575b600080fd5b61009c60048036038101906100979190610861565b610148565b005b6100b860048036038101906100b39190610ac1565b6101e2565b005b6100d460048036038101906100cf9190610b60565b610279565b005b6100de610313565b6040516100eb9190610c56565b60405180910390f35b61010e60048036038101906101099190610c71565b610337565b005b61012a60048036038101906101259190610d10565b6103ce565b005b61014660048036038101906101419190610ee0565b610465565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389a570fc86868686866040518663ffffffff1660e01b81526004016101a9959493929190611133565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a362d5c858585856040518563ffffffff1660e01b8152600401610241949392919061129f565b600060405180830381600087803b15801561025b57600080fd5b505af115801561026f573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394f6911586868686866040518663ffffffff1660e01b81526004016102da959493929190611301565b600060405180830381600087803b1580156102f457600080fd5b505af1158015610308573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b38c60fa858585856040518563ffffffff1660e01b8152600401610396949392919061135b565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9f813ff858585856040518563ffffffff1660e01b815260040161042d94939291906113ae565b600060405180830381600087803b15801561044757600080fd5b505af115801561045b573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dab20fdc858585856040518563ffffffff1660e01b81526004016104c49493929190611536565b600060405180830381600087803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61055e82610515565b810181811067ffffffffffffffff8211171561057d5761057c610526565b5b80604052505050565b60006105906104fc565b905061059c8282610555565b919050565b600080fd5b600060ff82169050919050565b6105bc816105a6565b81146105c757600080fd5b50565b6000813590506105d9816105b3565b92915050565b600080fd5b600067ffffffffffffffff8211156105ff576105fe610526565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561063557610634610526565b5b61063e82610515565b9050602081019050919050565b82818337600083830152505050565b600061066d6106688461061a565b610586565b90508281526020810184848401111561068957610688610615565b5b61069484828561064b565b509392505050565b600082601f8301126106b1576106b06105df565b5b81356106c184826020860161065a565b91505092915050565b60006106dd6106d8846105e4565b610586565b90508083825260208201905060208402830185811115610700576106ff610610565b5b835b8181101561074757803567ffffffffffffffff811115610725576107246105df565b5b808601610732898261069c565b85526020850194505050602081019050610702565b5050509392505050565b600082601f830112610766576107656105df565b5b81356107768482602086016106ca565b91505092915050565b60006040828403121561079557610794610510565b5b61079f6040610586565b905060006107af848285016105ca565b600083015250602082013567ffffffffffffffff8111156107d3576107d26105a1565b5b6107df84828501610751565b60208301525092915050565b6000819050919050565b6107fe816107eb565b811461080957600080fd5b50565b60008135905061081b816107f5565b92915050565b600067ffffffffffffffff82169050919050565b61083e81610821565b811461084957600080fd5b50565b60008135905061085b81610835565b92915050565b600080600080600060a0868803121561087d5761087c610506565b5b600086013567ffffffffffffffff81111561089b5761089a61050b565b5b6108a78882890161077f565b95505060206108b88882890161080c565b94505060406108c98882890161080c565b935050606086013567ffffffffffffffff8111156108ea576108e961050b565b5b6108f68882890161077f565b92505060806109078882890161084c565b9150509295509295909350565b600067ffffffffffffffff82111561092f5761092e610526565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061096b82610940565b9050919050565b61097b81610960565b811461098657600080fd5b50565b60008135905061099881610972565b92915050565b6000604082840312156109b4576109b3610510565b5b6109be6040610586565b905060006109ce84828501610989565b60008301525060206109e28482850161080c565b60208301525092915050565b6000610a016109fc84610914565b610586565b90508083825260208201905060408402830185811115610a2457610a23610610565b5b835b81811015610a4d5780610a39888261099e565b845260208401935050604081019050610a26565b5050509392505050565b600082601f830112610a6c57610a6b6105df565b5b8135610a7c8482602086016109ee565b91505092915050565b600063ffffffff82169050919050565b610a9e81610a85565b8114610aa957600080fd5b50565b600081359050610abb81610a95565b92915050565b60008060008060808587031215610adb57610ada610506565b5b600085013567ffffffffffffffff811115610af957610af861050b565b5b610b0587828801610a57565b9450506020610b1687828801610aac565b935050604085013567ffffffffffffffff811115610b3757610b3661050b565b5b610b438782880161077f565b9250506060610b548782880161084c565b91505092959194509250565b600080600080600060a08688031215610b7c57610b7b610506565b5b6000610b8a88828901610989565b9550506020610b9b8882890161080c565b9450506040610bac8882890161080c565b935050606086013567ffffffffffffffff811115610bcd57610bcc61050b565b5b610bd98882890161077f565b9250506080610bea8882890161084c565b9150509295509295909350565b6000819050919050565b6000610c1c610c17610c1284610940565b610bf7565b610940565b9050919050565b6000610c2e82610c01565b9050919050565b6000610c4082610c23565b9050919050565b610c5081610c35565b82525050565b6000602082019050610c6b6000830184610c47565b92915050565b60008060008060808587031215610c8b57610c8a610506565b5b600085013567ffffffffffffffff811115610ca957610ca861050b565b5b610cb58782880161077f565b9450506020610cc68782880161080c565b935050604085013567ffffffffffffffff811115610ce757610ce661050b565b5b610cf38782880161077f565b9250506060610d048782880161084c565b91505092959194509250565b60008060008060808587031215610d2a57610d29610506565b5b6000610d3887828801610989565b9450506020610d498782880161080c565b935050604085013567ffffffffffffffff811115610d6a57610d6961050b565b5b610d768782880161077f565b9250506060610d878782880161084c565b91505092959194509250565b600067ffffffffffffffff821115610dae57610dad610526565b5b602082029050602081019050919050565b600060408284031215610dd557610dd4610510565b5b610ddf6040610586565b9050600082013567ffffffffffffffff811115610dff57610dfe6105a1565b5b610e0b8482850161077f565b6000830152506020610e1f8482850161080c565b60208301525092915050565b6000610e3e610e3984610d93565b610586565b90508083825260208201905060208402830185811115610e6157610e60610610565b5b835b81811015610ea857803567ffffffffffffffff811115610e8657610e856105df565b5b808601610e938982610dbf565b85526020850194505050602081019050610e63565b5050509392505050565b600082601f830112610ec757610ec66105df565b5b8135610ed7848260208601610e2b565b91505092915050565b60008060008060808587031215610efa57610ef9610506565b5b600085013567ffffffffffffffff811115610f1857610f1761050b565b5b610f2487828801610eb2565b9450506020610f3587828801610aac565b935050604085013567ffffffffffffffff811115610f5657610f5561050b565b5b610f628782880161077f565b9250506060610f738782880161084c565b91505092959194509250565b610f88816105a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ff4578082015181840152602081019050610fd9565b83811115611003576000848401525b50505050565b600061101482610fba565b61101e8185610fc5565b935061102e818560208601610fd6565b61103781610515565b840191505092915050565b600061104e8383611009565b905092915050565b6000602082019050919050565b600061106e82610f8e565b6110788185610f99565b93508360208202850161108a85610faa565b8060005b858110156110c657848403895281516110a78582611042565b94506110b283611056565b925060208a0199505060018101905061108e565b50829750879550505050505092915050565b60006040830160008301516110f06000860182610f7f565b50602083015184820360208601526111088282611063565b9150508091505092915050565b61111e816107eb565b82525050565b61112d81610821565b82525050565b600060a082019050818103600083015261114d81886110d8565b905061115c6020830187611115565b6111696040830186611115565b818103606083015261117b81856110d8565b905061118a6080830184611124565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6111c981610960565b82525050565b6111d8816107eb565b82525050565b6040820160008201516111f460008501826111c0565b50602082015161120760208501826111cf565b50505050565b600061121983836111de565b60408301905092915050565b6000602082019050919050565b600061123d82611194565b611247818561119f565b9350611252836111b0565b8060005b8381101561128357815161126a888261120d565b975061127583611225565b925050600181019050611256565b5085935050505092915050565b61129981610a85565b82525050565b600060808201905081810360008301526112b98187611232565b90506112c86020830186611290565b81810360408301526112da81856110d8565b90506112e96060830184611124565b95945050505050565b6112fb81610960565b82525050565b600060a08201905061131660008301886112f2565b6113236020830187611115565b6113306040830186611115565b818103606083015261134281856110d8565b90506113516080830184611124565b9695505050505050565b6000608082019050818103600083015261137581876110d8565b90506113846020830186611115565b818103604083015261139681856110d8565b90506113a56060830184611124565b95945050505050565b60006080820190506113c360008301876112f2565b6113d06020830186611115565b81810360408301526113e281856110d8565b90506113f16060830184611124565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060408301600083015161143e6000860182610f7f565b50602083015184820360208601526114568282611063565b9150508091505092915050565b600060408301600083015184820360008601526114808282611426565b915050602083015161149560208601826111cf565b508091505092915050565b60006114ac8383611463565b905092915050565b6000602082019050919050565b60006114cc826113fa565b6114d68185611405565b9350836020820285016114e885611416565b8060005b85811015611524578484038952815161150585826114a0565b9450611510836114b4565b925060208a019950506001810190506114ec565b50829750879550505050505092915050565b6000608082019050818103600083015261155081876114c1565b905061155f6020830186611290565b818103604083015261157181856110d8565b90506115806060830184611124565b9594505050505056fea264697066735822122045f09e9526479cb895d7cea7861283c3c0bba940b35a00486c33d9eed6ab352464736f6c634300080b0033", "contract": { "abi": [ { @@ -234,41 +234,41 @@ "params": { "amount": "The amount of tokens we want to transfer", "currency_address": "The ERC20 address of the currency we want to transfer", - "destination": "The weight we want to buy in the destination chain" + "destination": "The weight we want to buy in the destination chain Selector: b9f813ff" } }, "transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)": { "details": "The token transfer burns/transfers the corresponding amount before sending", "params": { - "assets": "The assets we want to transfer, defined by their location and amount. ", + "assets": "The assets we want to transfer, defined by their location and amount.", "destination": "The Multilocation to which we want to send the tokens", "fee_item": "Which of the currencies to be used as fee", - "weight": "The weight we want to buy in the destination chain" + "weight": "The weight we want to buy in the destination chain Selector: b38c60fa" } }, "transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)": { "details": "The token transfer burns/transfers the corresponding amount before sending", "params": { - "currencies": "The currencies we want to transfer, defined by their address and amount. ", + "currencies": "The currencies we want to transfer, defined by their address and amount.", "destination": "The Multilocation to which we want to send the tokens", "fee_item": "Which of the currencies to be used as fee", - "weight": "The weight we want to buy in the destination chain" + "weight": "The weight we want to buy in the destination chain Selector: 8a362d5c" } }, "transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)": { "details": "The token transfer burns/transfers the corresponding amount before sending", "params": { "amount": "The amount of tokens we want to transfer", - "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", - "destination": "The weight we want to buy in the destination chain" + "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", + "destination": "The weight we want to buy in the destination chain Selector: b38c60fa" } }, "transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)": { "details": "The token transfer burns/transfers the corresponding amount before sending", "params": { "amount": "The amount of tokens we want to transfer", - "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", - "destination": "The weight we want to buy in the destination chain" + "asset": "The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets", + "destination": "The weight we want to buy in the destination chain Selector: 89a570fc" } }, "transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)": { @@ -283,56 +283,56 @@ "version": 1 }, "evm": { - "assembly": " /* \"main.sol\":5303:7378 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":5449:5491 0x0000000000000000000000000000000000000804 */\n 0x0804\n /* \"main.sol\":5416:5492 Xtokens public xtokens = Xtokens(0x0000000000000000000000000000000000000804) */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":5303:7378 contract XtokensInstance is Xtokens {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":5303:7378 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xaf3dcee8\n gt\n tag_10\n jumpi\n dup1\n 0xaf3dcee8\n eq\n tag_6\n jumpi\n dup1\n 0xb38c60fa\n eq\n tag_7\n jumpi\n dup1\n 0xb9f813ff\n eq\n tag_8\n jumpi\n dup1\n 0xdab20fdc\n eq\n tag_9\n jumpi\n jump(tag_2)\n tag_10:\n dup1\n 0x89a570fc\n eq\n tag_3\n jumpi\n dup1\n 0x8a362d5c\n eq\n tag_4\n jumpi\n dup1\n 0x94f69115\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":6418:6752 function transfer_multiasset_with_fee(... */\n tag_3:\n tag_11\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n tag_14\n jump\t// in\n tag_11:\n stop\n /* \"main.sol\":6761:7069 function transfer_multi_currencies(... */\n tag_4:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n stop\n /* \"main.sol\":5793:6114 function transfer_with_fee(... */\n tag_5:\n tag_19\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_20\n swap2\n swap1\n tag_21\n jump\t// in\n tag_20:\n tag_22\n jump\t// in\n tag_19:\n stop\n /* \"main.sol\":5416:5492 Xtokens public xtokens = Xtokens(0x0000000000000000000000000000000000000804) */\n tag_6:\n tag_23\n tag_24\n jump\t// in\n tag_23:\n mload(0x40)\n tag_25\n swap2\n swap1\n tag_26\n jump\t// in\n tag_25:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":6123:6409 function transfer_multiasset(... */\n tag_7:\n tag_27\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_28\n swap2\n swap1\n tag_29\n jump\t// in\n tag_28:\n tag_30\n jump\t// in\n tag_27:\n stop\n /* \"main.sol\":5511:5784 function transfer(... */\n tag_8:\n tag_31\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_32\n swap2\n swap1\n tag_33\n jump\t// in\n tag_32:\n tag_34\n jump\t// in\n tag_31:\n stop\n /* \"main.sol\":7078:7372 function transfer_multi_assets(... */\n tag_9:\n tag_35\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_36\n swap2\n swap1\n tag_37\n jump\t// in\n tag_36:\n tag_38\n jump\t// in\n tag_35:\n stop\n /* \"main.sol\":6418:6752 function transfer_multiasset_with_fee(... */\n tag_14:\n /* \"main.sol\":6664:6671 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6664:6700 xtokens.transfer_multiasset_with_fee */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x89a570fc\n /* \"main.sol\":6701:6706 asset */\n dup7\n /* \"main.sol\":6708:6714 amount */\n dup7\n /* \"main.sol\":6716:6719 fee */\n dup7\n /* \"main.sol\":6721:6732 destination */\n dup7\n /* \"main.sol\":6734:6740 weight */\n dup7\n /* \"main.sol\":6664:6741 xtokens.transfer_multiasset_with_fee(asset, amount, fee, destination, weight) */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_40\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_41\n jump\t// in\n tag_40:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_42\n jumpi\n 0x00\n dup1\n revert\n tag_42:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_44\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_44:\n pop\n pop\n pop\n pop\n /* \"main.sol\":6418:6752 function transfer_multiasset_with_fee(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":6761:7069 function transfer_multi_currencies(... */\n tag_18:\n /* \"main.sol\":6982:6989 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6982:7015 xtokens.transfer_multi_currencies */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x8a362d5c\n /* \"main.sol\":7016:7026 currencies */\n dup6\n /* \"main.sol\":7028:7036 fee_item */\n dup6\n /* \"main.sol\":7038:7049 destination */\n dup6\n /* \"main.sol\":7051:7057 weight */\n dup6\n /* \"main.sol\":6982:7058 xtokens.transfer_multi_currencies(currencies, fee_item, destination, weight) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_46\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_48\n jumpi\n 0x00\n dup1\n revert\n tag_48:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_50\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_50:\n pop\n pop\n pop\n pop\n /* \"main.sol\":6761:7069 function transfer_multi_currencies(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":5793:6114 function transfer_with_fee(... */\n tag_22:\n /* \"main.sol\":6026:6033 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6026:6051 xtokens.transfer_with_fee */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x94f69115\n /* \"main.sol\":6052:6068 currency_address */\n dup7\n /* \"main.sol\":6070:6076 amount */\n dup7\n /* \"main.sol\":6078:6081 fee */\n dup7\n /* \"main.sol\":6083:6094 destination */\n dup7\n /* \"main.sol\":6096:6102 weight */\n dup7\n /* \"main.sol\":6026:6103 xtokens.transfer_with_fee(currency_address, amount, fee, destination, weight) */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_52\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_53\n jump\t// in\n tag_52:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_54\n jumpi\n 0x00\n dup1\n revert\n tag_54:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_56\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_56:\n pop\n pop\n pop\n pop\n /* \"main.sol\":5793:6114 function transfer_with_fee(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":5416:5492 Xtokens public xtokens = Xtokens(0x0000000000000000000000000000000000000804) */\n tag_24:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":6123:6409 function transfer_multiasset(... */\n tag_30:\n /* \"main.sol\":6335:6342 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":6335:6362 xtokens.transfer_multiasset */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xb38c60fa\n /* \"main.sol\":6363:6368 asset */\n dup6\n /* \"main.sol\":6370:6376 amount */\n dup6\n /* \"main.sol\":6378:6389 destination */\n dup6\n /* \"main.sol\":6391:6397 weight */\n dup6\n /* \"main.sol\":6335:6398 xtokens.transfer_multiasset(asset, amount, destination, weight) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_58\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_59\n jump\t// in\n tag_58:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_60\n jumpi\n 0x00\n dup1\n revert\n tag_60:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_62\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_62:\n pop\n pop\n pop\n pop\n /* \"main.sol\":6123:6409 function transfer_multiasset(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":5511:5784 function transfer(... */\n tag_34:\n /* \"main.sol\":5710:5717 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":5710:5726 xtokens.transfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xb9f813ff\n /* \"main.sol\":5727:5743 currency_address */\n dup6\n /* \"main.sol\":5745:5751 amount */\n dup6\n /* \"main.sol\":5753:5764 destination */\n dup6\n /* \"main.sol\":5766:5772 weight */\n dup6\n /* \"main.sol\":5710:5773 xtokens.transfer(currency_address, amount, destination, weight) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_64\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_65\n jump\t// in\n tag_64:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_66\n jumpi\n 0x00\n dup1\n revert\n tag_66:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_68\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_68:\n pop\n pop\n pop\n pop\n /* \"main.sol\":5511:5784 function transfer(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":7078:7372 function transfer_multi_assets(... */\n tag_38:\n /* \"main.sol\":7293:7300 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":7293:7322 xtokens.transfer_multi_assets */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xdab20fdc\n /* \"main.sol\":7323:7329 assets */\n dup6\n /* \"main.sol\":7331:7339 fee_item */\n dup6\n /* \"main.sol\":7341:7352 destination */\n dup6\n /* \"main.sol\":7354:7360 weight */\n dup6\n /* \"main.sol\":7293:7361 xtokens.transfer_multi_assets(assets, fee_item, destination, weight) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_70\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_71\n jump\t// in\n tag_70:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_72\n jumpi\n 0x00\n dup1\n revert\n tag_72:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_74\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_74:\n pop\n pop\n pop\n pop\n /* \"main.sol\":7078:7372 function transfer_multi_assets(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_75:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_76:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_77:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:451 */\n tag_78:\n /* \"#utility.yul\":443:444 */\n 0x00\n /* \"#utility.yul\":440:441 */\n dup1\n /* \"#utility.yul\":433:445 */\n revert\n /* \"#utility.yul\":457:559 */\n tag_79:\n /* \"#utility.yul\":498:504 */\n 0x00\n /* \"#utility.yul\":549:551 */\n 0x1f\n /* \"#utility.yul\":545:552 */\n not\n /* \"#utility.yul\":540:542 */\n 0x1f\n /* \"#utility.yul\":533:538 */\n dup4\n /* \"#utility.yul\":529:543 */\n add\n /* \"#utility.yul\":525:553 */\n and\n /* \"#utility.yul\":515:553 */\n swap1\n pop\n /* \"#utility.yul\":457:559 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":565:745 */\n tag_80:\n /* \"#utility.yul\":613:690 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":610:611 */\n 0x00\n /* \"#utility.yul\":603:691 */\n mstore\n /* \"#utility.yul\":710:714 */\n 0x41\n /* \"#utility.yul\":707:708 */\n 0x04\n /* \"#utility.yul\":700:715 */\n mstore\n /* \"#utility.yul\":734:738 */\n 0x24\n /* \"#utility.yul\":731:732 */\n 0x00\n /* \"#utility.yul\":724:739 */\n revert\n /* \"#utility.yul\":751:1032 */\n tag_81:\n /* \"#utility.yul\":834:861 */\n tag_165\n /* \"#utility.yul\":856:860 */\n dup3\n /* \"#utility.yul\":834:861 */\n tag_79\n jump\t// in\n tag_165:\n /* \"#utility.yul\":826:832 */\n dup2\n /* \"#utility.yul\":822:862 */\n add\n /* \"#utility.yul\":964:970 */\n dup2\n /* \"#utility.yul\":952:962 */\n dup2\n /* \"#utility.yul\":949:971 */\n lt\n /* \"#utility.yul\":928:946 */\n 0xffffffffffffffff\n /* \"#utility.yul\":916:926 */\n dup3\n /* \"#utility.yul\":913:947 */\n gt\n /* \"#utility.yul\":910:972 */\n or\n /* \"#utility.yul\":907:995 */\n iszero\n tag_166\n jumpi\n /* \"#utility.yul\":975:993 */\n tag_167\n tag_80\n jump\t// in\n tag_167:\n /* \"#utility.yul\":907:995 */\n tag_166:\n /* \"#utility.yul\":1015:1025 */\n dup1\n /* \"#utility.yul\":1011:1013 */\n 0x40\n /* \"#utility.yul\":1004:1026 */\n mstore\n /* \"#utility.yul\":794:1032 */\n pop\n /* \"#utility.yul\":751:1032 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1038:1167 */\n tag_82:\n /* \"#utility.yul\":1072:1078 */\n 0x00\n /* \"#utility.yul\":1099:1119 */\n tag_169\n tag_75\n jump\t// in\n tag_169:\n /* \"#utility.yul\":1089:1119 */\n swap1\n pop\n /* \"#utility.yul\":1128:1161 */\n tag_170\n /* \"#utility.yul\":1156:1160 */\n dup3\n /* \"#utility.yul\":1148:1154 */\n dup3\n /* \"#utility.yul\":1128:1161 */\n tag_81\n jump\t// in\n tag_170:\n /* \"#utility.yul\":1038:1167 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1173:1290 */\n tag_83:\n /* \"#utility.yul\":1282:1283 */\n 0x00\n /* \"#utility.yul\":1279:1280 */\n dup1\n /* \"#utility.yul\":1272:1284 */\n revert\n /* \"#utility.yul\":1296:1382 */\n tag_84:\n /* \"#utility.yul\":1331:1338 */\n 0x00\n /* \"#utility.yul\":1371:1375 */\n 0xff\n /* \"#utility.yul\":1364:1369 */\n dup3\n /* \"#utility.yul\":1360:1376 */\n and\n /* \"#utility.yul\":1349:1376 */\n swap1\n pop\n /* \"#utility.yul\":1296:1382 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1388:1506 */\n tag_85:\n /* \"#utility.yul\":1459:1481 */\n tag_174\n /* \"#utility.yul\":1475:1480 */\n dup2\n /* \"#utility.yul\":1459:1481 */\n tag_84\n jump\t// in\n tag_174:\n /* \"#utility.yul\":1452:1457 */\n dup2\n /* \"#utility.yul\":1449:1482 */\n eq\n /* \"#utility.yul\":1439:1500 */\n tag_175\n jumpi\n /* \"#utility.yul\":1496:1497 */\n 0x00\n /* \"#utility.yul\":1493:1494 */\n dup1\n /* \"#utility.yul\":1486:1498 */\n revert\n /* \"#utility.yul\":1439:1500 */\n tag_175:\n /* \"#utility.yul\":1388:1506 */\n pop\n jump\t// out\n /* \"#utility.yul\":1512:1647 */\n tag_86:\n /* \"#utility.yul\":1556:1561 */\n 0x00\n /* \"#utility.yul\":1594:1600 */\n dup2\n /* \"#utility.yul\":1581:1601 */\n calldataload\n /* \"#utility.yul\":1572:1601 */\n swap1\n pop\n /* \"#utility.yul\":1610:1641 */\n tag_177\n /* \"#utility.yul\":1635:1640 */\n dup2\n /* \"#utility.yul\":1610:1641 */\n tag_85\n jump\t// in\n tag_177:\n /* \"#utility.yul\":1512:1647 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1653:1770 */\n tag_87:\n /* \"#utility.yul\":1762:1763 */\n 0x00\n /* \"#utility.yul\":1759:1760 */\n dup1\n /* \"#utility.yul\":1752:1764 */\n revert\n /* \"#utility.yul\":1776:2096 */\n tag_88:\n /* \"#utility.yul\":1862:1866 */\n 0x00\n /* \"#utility.yul\":1952:1970 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1944:1950 */\n dup3\n /* \"#utility.yul\":1941:1971 */\n gt\n /* \"#utility.yul\":1938:1994 */\n iszero\n tag_180\n jumpi\n /* \"#utility.yul\":1974:1992 */\n tag_181\n tag_80\n jump\t// in\n tag_181:\n /* \"#utility.yul\":1938:1994 */\n tag_180:\n /* \"#utility.yul\":2024:2028 */\n 0x20\n /* \"#utility.yul\":2016:2022 */\n dup3\n /* \"#utility.yul\":2012:2029 */\n mul\n /* \"#utility.yul\":2004:2029 */\n swap1\n pop\n /* \"#utility.yul\":2084:2088 */\n 0x20\n /* \"#utility.yul\":2078:2082 */\n dup2\n /* \"#utility.yul\":2074:2089 */\n add\n /* \"#utility.yul\":2066:2089 */\n swap1\n pop\n /* \"#utility.yul\":1776:2096 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2102:2219 */\n tag_89:\n /* \"#utility.yul\":2211:2212 */\n 0x00\n /* \"#utility.yul\":2208:2209 */\n dup1\n /* \"#utility.yul\":2201:2213 */\n revert\n /* \"#utility.yul\":2225:2342 */\n tag_90:\n /* \"#utility.yul\":2334:2335 */\n 0x00\n /* \"#utility.yul\":2331:2332 */\n dup1\n /* \"#utility.yul\":2324:2336 */\n revert\n /* \"#utility.yul\":2348:2655 */\n tag_91:\n /* \"#utility.yul\":2409:2413 */\n 0x00\n /* \"#utility.yul\":2499:2517 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2491:2497 */\n dup3\n /* \"#utility.yul\":2488:2518 */\n gt\n /* \"#utility.yul\":2485:2541 */\n iszero\n tag_185\n jumpi\n /* \"#utility.yul\":2521:2539 */\n tag_186\n tag_80\n jump\t// in\n tag_186:\n /* \"#utility.yul\":2485:2541 */\n tag_185:\n /* \"#utility.yul\":2559:2588 */\n tag_187\n /* \"#utility.yul\":2581:2587 */\n dup3\n /* \"#utility.yul\":2559:2588 */\n tag_79\n jump\t// in\n tag_187:\n /* \"#utility.yul\":2551:2588 */\n swap1\n pop\n /* \"#utility.yul\":2643:2647 */\n 0x20\n /* \"#utility.yul\":2637:2641 */\n dup2\n /* \"#utility.yul\":2633:2648 */\n add\n /* \"#utility.yul\":2625:2648 */\n swap1\n pop\n /* \"#utility.yul\":2348:2655 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2661:2815 */\n tag_92:\n /* \"#utility.yul\":2745:2751 */\n dup3\n /* \"#utility.yul\":2740:2743 */\n dup2\n /* \"#utility.yul\":2735:2738 */\n dup4\n /* \"#utility.yul\":2722:2752 */\n calldatacopy\n /* \"#utility.yul\":2807:2808 */\n 0x00\n /* \"#utility.yul\":2798:2804 */\n dup4\n /* \"#utility.yul\":2793:2796 */\n dup4\n /* \"#utility.yul\":2789:2805 */\n add\n /* \"#utility.yul\":2782:2809 */\n mstore\n /* \"#utility.yul\":2661:2815 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2821:3231 */\n tag_93:\n /* \"#utility.yul\":2898:2903 */\n 0x00\n /* \"#utility.yul\":2923:2988 */\n tag_190\n /* \"#utility.yul\":2939:2987 */\n tag_191\n /* \"#utility.yul\":2980:2986 */\n dup5\n /* \"#utility.yul\":2939:2987 */\n tag_91\n jump\t// in\n tag_191:\n /* \"#utility.yul\":2923:2988 */\n tag_82\n jump\t// in\n tag_190:\n /* \"#utility.yul\":2914:2988 */\n swap1\n pop\n /* \"#utility.yul\":3011:3017 */\n dup3\n /* \"#utility.yul\":3004:3009 */\n dup2\n /* \"#utility.yul\":2997:3018 */\n mstore\n /* \"#utility.yul\":3049:3053 */\n 0x20\n /* \"#utility.yul\":3042:3047 */\n dup2\n /* \"#utility.yul\":3038:3054 */\n add\n /* \"#utility.yul\":3087:3090 */\n dup5\n /* \"#utility.yul\":3078:3084 */\n dup5\n /* \"#utility.yul\":3073:3076 */\n dup5\n /* \"#utility.yul\":3069:3085 */\n add\n /* \"#utility.yul\":3066:3091 */\n gt\n /* \"#utility.yul\":3063:3175 */\n iszero\n tag_192\n jumpi\n /* \"#utility.yul\":3094:3173 */\n tag_193\n tag_90\n jump\t// in\n tag_193:\n /* \"#utility.yul\":3063:3175 */\n tag_192:\n /* \"#utility.yul\":3184:3225 */\n tag_194\n /* \"#utility.yul\":3218:3224 */\n dup5\n /* \"#utility.yul\":3213:3216 */\n dup3\n /* \"#utility.yul\":3208:3211 */\n dup6\n /* \"#utility.yul\":3184:3225 */\n tag_92\n jump\t// in\n tag_194:\n /* \"#utility.yul\":2904:3231 */\n pop\n /* \"#utility.yul\":2821:3231 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3250:3588 */\n tag_94:\n /* \"#utility.yul\":3305:3310 */\n 0x00\n /* \"#utility.yul\":3354:3357 */\n dup3\n /* \"#utility.yul\":3347:3351 */\n 0x1f\n /* \"#utility.yul\":3339:3345 */\n dup4\n /* \"#utility.yul\":3335:3352 */\n add\n /* \"#utility.yul\":3331:3358 */\n slt\n /* \"#utility.yul\":3321:3443 */\n tag_196\n jumpi\n /* \"#utility.yul\":3362:3441 */\n tag_197\n tag_87\n jump\t// in\n tag_197:\n /* \"#utility.yul\":3321:3443 */\n tag_196:\n /* \"#utility.yul\":3479:3485 */\n dup2\n /* \"#utility.yul\":3466:3486 */\n calldataload\n /* \"#utility.yul\":3504:3582 */\n tag_198\n /* \"#utility.yul\":3578:3581 */\n dup5\n /* \"#utility.yul\":3570:3576 */\n dup3\n /* \"#utility.yul\":3563:3567 */\n 0x20\n /* \"#utility.yul\":3555:3561 */\n dup7\n /* \"#utility.yul\":3551:3568 */\n add\n /* \"#utility.yul\":3504:3582 */\n tag_93\n jump\t// in\n tag_198:\n /* \"#utility.yul\":3495:3582 */\n swap2\n pop\n /* \"#utility.yul\":3311:3588 */\n pop\n /* \"#utility.yul\":3250:3588 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3609:4551 */\n tag_95:\n /* \"#utility.yul\":3714:3719 */\n 0x00\n /* \"#utility.yul\":3739:3829 */\n tag_200\n /* \"#utility.yul\":3755:3828 */\n tag_201\n /* \"#utility.yul\":3821:3827 */\n dup5\n /* \"#utility.yul\":3755:3828 */\n tag_88\n jump\t// in\n tag_201:\n /* \"#utility.yul\":3739:3829 */\n tag_82\n jump\t// in\n tag_200:\n /* \"#utility.yul\":3730:3829 */\n swap1\n pop\n /* \"#utility.yul\":3849:3854 */\n dup1\n /* \"#utility.yul\":3878:3884 */\n dup4\n /* \"#utility.yul\":3871:3876 */\n dup3\n /* \"#utility.yul\":3864:3885 */\n mstore\n /* \"#utility.yul\":3912:3916 */\n 0x20\n /* \"#utility.yul\":3905:3910 */\n dup3\n /* \"#utility.yul\":3901:3917 */\n add\n /* \"#utility.yul\":3894:3917 */\n swap1\n pop\n /* \"#utility.yul\":3965:3969 */\n 0x20\n /* \"#utility.yul\":3957:3963 */\n dup5\n /* \"#utility.yul\":3953:3970 */\n mul\n /* \"#utility.yul\":3945:3951 */\n dup4\n /* \"#utility.yul\":3941:3971 */\n add\n /* \"#utility.yul\":3994:3997 */\n dup6\n /* \"#utility.yul\":3986:3992 */\n dup2\n /* \"#utility.yul\":3983:3998 */\n gt\n /* \"#utility.yul\":3980:4102 */\n iszero\n tag_202\n jumpi\n /* \"#utility.yul\":4013:4092 */\n tag_203\n tag_89\n jump\t// in\n tag_203:\n /* \"#utility.yul\":3980:4102 */\n tag_202:\n /* \"#utility.yul\":4128:4134 */\n dup4\n /* \"#utility.yul\":4111:4545 */\n tag_204:\n /* \"#utility.yul\":4145:4151 */\n dup2\n /* \"#utility.yul\":4140:4143 */\n dup2\n /* \"#utility.yul\":4137:4152 */\n lt\n /* \"#utility.yul\":4111:4545 */\n iszero\n tag_206\n jumpi\n /* \"#utility.yul\":4234:4237 */\n dup1\n /* \"#utility.yul\":4221:4238 */\n calldataload\n /* \"#utility.yul\":4270:4288 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4257:4268 */\n dup2\n /* \"#utility.yul\":4254:4289 */\n gt\n /* \"#utility.yul\":4251:4373 */\n iszero\n tag_207\n jumpi\n /* \"#utility.yul\":4292:4371 */\n tag_208\n tag_87\n jump\t// in\n tag_208:\n /* \"#utility.yul\":4251:4373 */\n tag_207:\n /* \"#utility.yul\":4416:4427 */\n dup1\n /* \"#utility.yul\":4408:4414 */\n dup7\n /* \"#utility.yul\":4404:4428 */\n add\n /* \"#utility.yul\":4454:4500 */\n tag_209\n /* \"#utility.yul\":4496:4499 */\n dup10\n /* \"#utility.yul\":4484:4494 */\n dup3\n /* \"#utility.yul\":4454:4500 */\n tag_94\n jump\t// in\n tag_209:\n /* \"#utility.yul\":4449:4452 */\n dup6\n /* \"#utility.yul\":4442:4501 */\n mstore\n /* \"#utility.yul\":4530:4534 */\n 0x20\n /* \"#utility.yul\":4525:4528 */\n dup6\n /* \"#utility.yul\":4521:4535 */\n add\n /* \"#utility.yul\":4514:4535 */\n swap5\n pop\n /* \"#utility.yul\":4187:4545 */\n pop\n pop\n /* \"#utility.yul\":4171:4175 */\n 0x20\n /* \"#utility.yul\":4166:4169 */\n dup2\n /* \"#utility.yul\":4162:4176 */\n add\n /* \"#utility.yul\":4155:4176 */\n swap1\n pop\n /* \"#utility.yul\":4111:4545 */\n jump(tag_204)\n tag_206:\n /* \"#utility.yul\":4115:4136 */\n pop\n /* \"#utility.yul\":3720:4551 */\n pop\n pop\n /* \"#utility.yul\":3609:4551 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4572:4960 */\n tag_96:\n /* \"#utility.yul\":4652:4657 */\n 0x00\n /* \"#utility.yul\":4701:4704 */\n dup3\n /* \"#utility.yul\":4694:4698 */\n 0x1f\n /* \"#utility.yul\":4686:4692 */\n dup4\n /* \"#utility.yul\":4682:4699 */\n add\n /* \"#utility.yul\":4678:4705 */\n slt\n /* \"#utility.yul\":4668:4790 */\n tag_211\n jumpi\n /* \"#utility.yul\":4709:4788 */\n tag_212\n tag_87\n jump\t// in\n tag_212:\n /* \"#utility.yul\":4668:4790 */\n tag_211:\n /* \"#utility.yul\":4826:4832 */\n dup2\n /* \"#utility.yul\":4813:4833 */\n calldataload\n /* \"#utility.yul\":4851:4954 */\n tag_213\n /* \"#utility.yul\":4950:4953 */\n dup5\n /* \"#utility.yul\":4942:4948 */\n dup3\n /* \"#utility.yul\":4935:4939 */\n 0x20\n /* \"#utility.yul\":4927:4933 */\n dup7\n /* \"#utility.yul\":4923:4940 */\n add\n /* \"#utility.yul\":4851:4954 */\n tag_95\n jump\t// in\n tag_213:\n /* \"#utility.yul\":4842:4954 */\n swap2\n pop\n /* \"#utility.yul\":4658:4960 */\n pop\n /* \"#utility.yul\":4572:4960 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5002:5778 */\n tag_97:\n /* \"#utility.yul\":5079:5084 */\n 0x00\n /* \"#utility.yul\":5123:5127 */\n 0x40\n /* \"#utility.yul\":5111:5120 */\n dup3\n /* \"#utility.yul\":5106:5109 */\n dup5\n /* \"#utility.yul\":5102:5121 */\n sub\n /* \"#utility.yul\":5098:5128 */\n slt\n /* \"#utility.yul\":5095:5212 */\n iszero\n tag_215\n jumpi\n /* \"#utility.yul\":5131:5210 */\n tag_216\n tag_78\n jump\t// in\n tag_216:\n /* \"#utility.yul\":5095:5212 */\n tag_215:\n /* \"#utility.yul\":5230:5251 */\n tag_217\n /* \"#utility.yul\":5246:5250 */\n 0x40\n /* \"#utility.yul\":5230:5251 */\n tag_82\n jump\t// in\n tag_217:\n /* \"#utility.yul\":5221:5251 */\n swap1\n pop\n /* \"#utility.yul\":5313:5314 */\n 0x00\n /* \"#utility.yul\":5353:5400 */\n tag_218\n /* \"#utility.yul\":5396:5399 */\n dup5\n /* \"#utility.yul\":5387:5393 */\n dup3\n /* \"#utility.yul\":5376:5385 */\n dup6\n /* \"#utility.yul\":5372:5394 */\n add\n /* \"#utility.yul\":5353:5400 */\n tag_86\n jump\t// in\n tag_218:\n /* \"#utility.yul\":5346:5350 */\n 0x00\n /* \"#utility.yul\":5339:5344 */\n dup4\n /* \"#utility.yul\":5335:5351 */\n add\n /* \"#utility.yul\":5328:5401 */\n mstore\n /* \"#utility.yul\":5261:5412 */\n pop\n /* \"#utility.yul\":5503:5505 */\n 0x20\n /* \"#utility.yul\":5492:5501 */\n dup3\n /* \"#utility.yul\":5488:5506 */\n add\n /* \"#utility.yul\":5475:5507 */\n calldataload\n /* \"#utility.yul\":5534:5552 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5526:5532 */\n dup2\n /* \"#utility.yul\":5523:5553 */\n gt\n /* \"#utility.yul\":5520:5637 */\n iszero\n tag_219\n jumpi\n /* \"#utility.yul\":5556:5635 */\n tag_220\n tag_83\n jump\t// in\n tag_220:\n /* \"#utility.yul\":5520:5637 */\n tag_219:\n /* \"#utility.yul\":5676:5759 */\n tag_221\n /* \"#utility.yul\":5755:5758 */\n dup5\n /* \"#utility.yul\":5746:5752 */\n dup3\n /* \"#utility.yul\":5735:5744 */\n dup6\n /* \"#utility.yul\":5731:5753 */\n add\n /* \"#utility.yul\":5676:5759 */\n tag_96\n jump\t// in\n tag_221:\n /* \"#utility.yul\":5669:5673 */\n 0x20\n /* \"#utility.yul\":5662:5667 */\n dup4\n /* \"#utility.yul\":5658:5674 */\n add\n /* \"#utility.yul\":5651:5760 */\n mstore\n /* \"#utility.yul\":5422:5771 */\n pop\n /* \"#utility.yul\":5002:5778 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5784:5861 */\n tag_98:\n /* \"#utility.yul\":5821:5828 */\n 0x00\n /* \"#utility.yul\":5850:5855 */\n dup2\n /* \"#utility.yul\":5839:5855 */\n swap1\n pop\n /* \"#utility.yul\":5784:5861 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5867:5989 */\n tag_99:\n /* \"#utility.yul\":5940:5964 */\n tag_224\n /* \"#utility.yul\":5958:5963 */\n dup2\n /* \"#utility.yul\":5940:5964 */\n tag_98\n jump\t// in\n tag_224:\n /* \"#utility.yul\":5933:5938 */\n dup2\n /* \"#utility.yul\":5930:5965 */\n eq\n /* \"#utility.yul\":5920:5983 */\n tag_225\n jumpi\n /* \"#utility.yul\":5979:5980 */\n 0x00\n /* \"#utility.yul\":5976:5977 */\n dup1\n /* \"#utility.yul\":5969:5981 */\n revert\n /* \"#utility.yul\":5920:5983 */\n tag_225:\n /* \"#utility.yul\":5867:5989 */\n pop\n jump\t// out\n /* \"#utility.yul\":5995:6134 */\n tag_100:\n /* \"#utility.yul\":6041:6046 */\n 0x00\n /* \"#utility.yul\":6079:6085 */\n dup2\n /* \"#utility.yul\":6066:6086 */\n calldataload\n /* \"#utility.yul\":6057:6086 */\n swap1\n pop\n /* \"#utility.yul\":6095:6128 */\n tag_227\n /* \"#utility.yul\":6122:6127 */\n dup2\n /* \"#utility.yul\":6095:6128 */\n tag_99\n jump\t// in\n tag_227:\n /* \"#utility.yul\":5995:6134 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6140:6241 */\n tag_101:\n /* \"#utility.yul\":6176:6183 */\n 0x00\n /* \"#utility.yul\":6216:6234 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6209:6214 */\n dup3\n /* \"#utility.yul\":6205:6235 */\n and\n /* \"#utility.yul\":6194:6235 */\n swap1\n pop\n /* \"#utility.yul\":6140:6241 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6247:6367 */\n tag_102:\n /* \"#utility.yul\":6319:6342 */\n tag_230\n /* \"#utility.yul\":6336:6341 */\n dup2\n /* \"#utility.yul\":6319:6342 */\n tag_101\n jump\t// in\n tag_230:\n /* \"#utility.yul\":6312:6317 */\n dup2\n /* \"#utility.yul\":6309:6343 */\n eq\n /* \"#utility.yul\":6299:6361 */\n tag_231\n jumpi\n /* \"#utility.yul\":6357:6358 */\n 0x00\n /* \"#utility.yul\":6354:6355 */\n dup1\n /* \"#utility.yul\":6347:6359 */\n revert\n /* \"#utility.yul\":6299:6361 */\n tag_231:\n /* \"#utility.yul\":6247:6367 */\n pop\n jump\t// out\n /* \"#utility.yul\":6373:6510 */\n tag_103:\n /* \"#utility.yul\":6418:6423 */\n 0x00\n /* \"#utility.yul\":6456:6462 */\n dup2\n /* \"#utility.yul\":6443:6463 */\n calldataload\n /* \"#utility.yul\":6434:6463 */\n swap1\n pop\n /* \"#utility.yul\":6472:6504 */\n tag_233\n /* \"#utility.yul\":6498:6503 */\n dup2\n /* \"#utility.yul\":6472:6504 */\n tag_102\n jump\t// in\n tag_233:\n /* \"#utility.yul\":6373:6510 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6516:7857 */\n tag_13:\n /* \"#utility.yul\":6666:6672 */\n 0x00\n /* \"#utility.yul\":6674:6680 */\n dup1\n /* \"#utility.yul\":6682:6688 */\n 0x00\n /* \"#utility.yul\":6690:6696 */\n dup1\n /* \"#utility.yul\":6698:6704 */\n 0x00\n /* \"#utility.yul\":6747:6750 */\n 0xa0\n /* \"#utility.yul\":6735:6744 */\n dup7\n /* \"#utility.yul\":6726:6733 */\n dup9\n /* \"#utility.yul\":6722:6745 */\n sub\n /* \"#utility.yul\":6718:6751 */\n slt\n /* \"#utility.yul\":6715:6835 */\n iszero\n tag_235\n jumpi\n /* \"#utility.yul\":6754:6833 */\n tag_236\n tag_76\n jump\t// in\n tag_236:\n /* \"#utility.yul\":6715:6835 */\n tag_235:\n /* \"#utility.yul\":6902:6903 */\n 0x00\n /* \"#utility.yul\":6891:6900 */\n dup7\n /* \"#utility.yul\":6887:6904 */\n add\n /* \"#utility.yul\":6874:6905 */\n calldataload\n /* \"#utility.yul\":6932:6950 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6924:6930 */\n dup2\n /* \"#utility.yul\":6921:6951 */\n gt\n /* \"#utility.yul\":6918:7035 */\n iszero\n tag_237\n jumpi\n /* \"#utility.yul\":6954:7033 */\n tag_238\n tag_77\n jump\t// in\n tag_238:\n /* \"#utility.yul\":6918:7035 */\n tag_237:\n /* \"#utility.yul\":7059:7140 */\n tag_239\n /* \"#utility.yul\":7132:7139 */\n dup9\n /* \"#utility.yul\":7123:7129 */\n dup3\n /* \"#utility.yul\":7112:7121 */\n dup10\n /* \"#utility.yul\":7108:7130 */\n add\n /* \"#utility.yul\":7059:7140 */\n tag_97\n jump\t// in\n tag_239:\n /* \"#utility.yul\":7049:7140 */\n swap6\n pop\n /* \"#utility.yul\":6845:7150 */\n pop\n /* \"#utility.yul\":7189:7191 */\n 0x20\n /* \"#utility.yul\":7215:7268 */\n tag_240\n /* \"#utility.yul\":7260:7267 */\n dup9\n /* \"#utility.yul\":7251:7257 */\n dup3\n /* \"#utility.yul\":7240:7249 */\n dup10\n /* \"#utility.yul\":7236:7258 */\n add\n /* \"#utility.yul\":7215:7268 */\n tag_100\n jump\t// in\n tag_240:\n /* \"#utility.yul\":7205:7268 */\n swap5\n pop\n /* \"#utility.yul\":7160:7278 */\n pop\n /* \"#utility.yul\":7317:7319 */\n 0x40\n /* \"#utility.yul\":7343:7396 */\n tag_241\n /* \"#utility.yul\":7388:7395 */\n dup9\n /* \"#utility.yul\":7379:7385 */\n dup3\n /* \"#utility.yul\":7368:7377 */\n dup10\n /* \"#utility.yul\":7364:7386 */\n add\n /* \"#utility.yul\":7343:7396 */\n tag_100\n jump\t// in\n tag_241:\n /* \"#utility.yul\":7333:7396 */\n swap4\n pop\n /* \"#utility.yul\":7288:7406 */\n pop\n /* \"#utility.yul\":7473:7475 */\n 0x60\n /* \"#utility.yul\":7462:7471 */\n dup7\n /* \"#utility.yul\":7458:7476 */\n add\n /* \"#utility.yul\":7445:7477 */\n calldataload\n /* \"#utility.yul\":7504:7522 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7496:7502 */\n dup2\n /* \"#utility.yul\":7493:7523 */\n gt\n /* \"#utility.yul\":7490:7607 */\n iszero\n tag_242\n jumpi\n /* \"#utility.yul\":7526:7605 */\n tag_243\n tag_77\n jump\t// in\n tag_243:\n /* \"#utility.yul\":7490:7607 */\n tag_242:\n /* \"#utility.yul\":7631:7712 */\n tag_244\n /* \"#utility.yul\":7704:7711 */\n dup9\n /* \"#utility.yul\":7695:7701 */\n dup3\n /* \"#utility.yul\":7684:7693 */\n dup10\n /* \"#utility.yul\":7680:7702 */\n add\n /* \"#utility.yul\":7631:7712 */\n tag_97\n jump\t// in\n tag_244:\n /* \"#utility.yul\":7621:7712 */\n swap3\n pop\n /* \"#utility.yul\":7416:7722 */\n pop\n /* \"#utility.yul\":7761:7764 */\n 0x80\n /* \"#utility.yul\":7788:7840 */\n tag_245\n /* \"#utility.yul\":7832:7839 */\n dup9\n /* \"#utility.yul\":7823:7829 */\n dup3\n /* \"#utility.yul\":7812:7821 */\n dup10\n /* \"#utility.yul\":7808:7830 */\n add\n /* \"#utility.yul\":7788:7840 */\n tag_103\n jump\t// in\n tag_245:\n /* \"#utility.yul\":7778:7840 */\n swap2\n pop\n /* \"#utility.yul\":7732:7850 */\n pop\n /* \"#utility.yul\":6516:7857 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":7863:8198 */\n tag_104:\n /* \"#utility.yul\":7964:7968 */\n 0x00\n /* \"#utility.yul\":8054:8072 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8046:8052 */\n dup3\n /* \"#utility.yul\":8043:8073 */\n gt\n /* \"#utility.yul\":8040:8096 */\n iszero\n tag_247\n jumpi\n /* \"#utility.yul\":8076:8094 */\n tag_248\n tag_80\n jump\t// in\n tag_248:\n /* \"#utility.yul\":8040:8096 */\n tag_247:\n /* \"#utility.yul\":8126:8130 */\n 0x20\n /* \"#utility.yul\":8118:8124 */\n dup3\n /* \"#utility.yul\":8114:8131 */\n mul\n /* \"#utility.yul\":8106:8131 */\n swap1\n pop\n /* \"#utility.yul\":8186:8190 */\n 0x20\n /* \"#utility.yul\":8180:8184 */\n dup2\n /* \"#utility.yul\":8176:8191 */\n add\n /* \"#utility.yul\":8168:8191 */\n swap1\n pop\n /* \"#utility.yul\":7863:8198 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8204:8330 */\n tag_105:\n /* \"#utility.yul\":8241:8248 */\n 0x00\n /* \"#utility.yul\":8281:8323 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":8274:8279 */\n dup3\n /* \"#utility.yul\":8270:8324 */\n and\n /* \"#utility.yul\":8259:8324 */\n swap1\n pop\n /* \"#utility.yul\":8204:8330 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8336:8432 */\n tag_106:\n /* \"#utility.yul\":8373:8380 */\n 0x00\n /* \"#utility.yul\":8402:8426 */\n tag_251\n /* \"#utility.yul\":8420:8425 */\n dup3\n /* \"#utility.yul\":8402:8426 */\n tag_105\n jump\t// in\n tag_251:\n /* \"#utility.yul\":8391:8426 */\n swap1\n pop\n /* \"#utility.yul\":8336:8432 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8438:8560 */\n tag_107:\n /* \"#utility.yul\":8511:8535 */\n tag_253\n /* \"#utility.yul\":8529:8534 */\n dup2\n /* \"#utility.yul\":8511:8535 */\n tag_106\n jump\t// in\n tag_253:\n /* \"#utility.yul\":8504:8509 */\n dup2\n /* \"#utility.yul\":8501:8536 */\n eq\n /* \"#utility.yul\":8491:8554 */\n tag_254\n jumpi\n /* \"#utility.yul\":8550:8551 */\n 0x00\n /* \"#utility.yul\":8547:8548 */\n dup1\n /* \"#utility.yul\":8540:8552 */\n revert\n /* \"#utility.yul\":8491:8554 */\n tag_254:\n /* \"#utility.yul\":8438:8560 */\n pop\n jump\t// out\n /* \"#utility.yul\":8566:8705 */\n tag_108:\n /* \"#utility.yul\":8612:8617 */\n 0x00\n /* \"#utility.yul\":8650:8656 */\n dup2\n /* \"#utility.yul\":8637:8657 */\n calldataload\n /* \"#utility.yul\":8628:8657 */\n swap1\n pop\n /* \"#utility.yul\":8666:8699 */\n tag_256\n /* \"#utility.yul\":8693:8698 */\n dup2\n /* \"#utility.yul\":8666:8699 */\n tag_107\n jump\t// in\n tag_256:\n /* \"#utility.yul\":8566:8705 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8742:9329 */\n tag_109:\n /* \"#utility.yul\":8815:8820 */\n 0x00\n /* \"#utility.yul\":8859:8863 */\n 0x40\n /* \"#utility.yul\":8847:8856 */\n dup3\n /* \"#utility.yul\":8842:8845 */\n dup5\n /* \"#utility.yul\":8838:8857 */\n sub\n /* \"#utility.yul\":8834:8864 */\n slt\n /* \"#utility.yul\":8831:8948 */\n iszero\n tag_258\n jumpi\n /* \"#utility.yul\":8867:8946 */\n tag_259\n tag_78\n jump\t// in\n tag_259:\n /* \"#utility.yul\":8831:8948 */\n tag_258:\n /* \"#utility.yul\":8966:8987 */\n tag_260\n /* \"#utility.yul\":8982:8986 */\n 0x40\n /* \"#utility.yul\":8966:8987 */\n tag_82\n jump\t// in\n tag_260:\n /* \"#utility.yul\":8957:8987 */\n swap1\n pop\n /* \"#utility.yul\":9058:9059 */\n 0x00\n /* \"#utility.yul\":9098:9147 */\n tag_261\n /* \"#utility.yul\":9143:9146 */\n dup5\n /* \"#utility.yul\":9134:9140 */\n dup3\n /* \"#utility.yul\":9123:9132 */\n dup6\n /* \"#utility.yul\":9119:9141 */\n add\n /* \"#utility.yul\":9098:9147 */\n tag_108\n jump\t// in\n tag_261:\n /* \"#utility.yul\":9091:9095 */\n 0x00\n /* \"#utility.yul\":9084:9089 */\n dup4\n /* \"#utility.yul\":9080:9096 */\n add\n /* \"#utility.yul\":9073:9148 */\n mstore\n /* \"#utility.yul\":8997:9159 */\n pop\n /* \"#utility.yul\":9220:9222 */\n 0x20\n /* \"#utility.yul\":9261:9310 */\n tag_262\n /* \"#utility.yul\":9306:9309 */\n dup5\n /* \"#utility.yul\":9297:9303 */\n dup3\n /* \"#utility.yul\":9286:9295 */\n dup6\n /* \"#utility.yul\":9282:9304 */\n add\n /* \"#utility.yul\":9261:9310 */\n tag_100\n jump\t// in\n tag_262:\n /* \"#utility.yul\":9254:9258 */\n 0x20\n /* \"#utility.yul\":9247:9252 */\n dup4\n /* \"#utility.yul\":9243:9259 */\n add\n /* \"#utility.yul\":9236:9311 */\n mstore\n /* \"#utility.yul\":9169:9322 */\n pop\n /* \"#utility.yul\":8742:9329 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9368:10150 */\n tag_110:\n /* \"#utility.yul\":9488:9493 */\n 0x00\n /* \"#utility.yul\":9513:9618 */\n tag_264\n /* \"#utility.yul\":9529:9617 */\n tag_265\n /* \"#utility.yul\":9610:9616 */\n dup5\n /* \"#utility.yul\":9529:9617 */\n tag_104\n jump\t// in\n tag_265:\n /* \"#utility.yul\":9513:9618 */\n tag_82\n jump\t// in\n tag_264:\n /* \"#utility.yul\":9504:9618 */\n swap1\n pop\n /* \"#utility.yul\":9638:9643 */\n dup1\n /* \"#utility.yul\":9667:9673 */\n dup4\n /* \"#utility.yul\":9660:9665 */\n dup3\n /* \"#utility.yul\":9653:9674 */\n mstore\n /* \"#utility.yul\":9701:9705 */\n 0x20\n /* \"#utility.yul\":9694:9699 */\n dup3\n /* \"#utility.yul\":9690:9706 */\n add\n /* \"#utility.yul\":9683:9706 */\n swap1\n pop\n /* \"#utility.yul\":9754:9758 */\n 0x40\n /* \"#utility.yul\":9746:9752 */\n dup5\n /* \"#utility.yul\":9742:9759 */\n mul\n /* \"#utility.yul\":9734:9740 */\n dup4\n /* \"#utility.yul\":9730:9760 */\n add\n /* \"#utility.yul\":9783:9786 */\n dup6\n /* \"#utility.yul\":9775:9781 */\n dup2\n /* \"#utility.yul\":9772:9787 */\n gt\n /* \"#utility.yul\":9769:9891 */\n iszero\n tag_266\n jumpi\n /* \"#utility.yul\":9802:9881 */\n tag_267\n tag_89\n jump\t// in\n tag_267:\n /* \"#utility.yul\":9769:9891 */\n tag_266:\n /* \"#utility.yul\":9917:9923 */\n dup4\n /* \"#utility.yul\":9900:10144 */\n tag_268:\n /* \"#utility.yul\":9934:9940 */\n dup2\n /* \"#utility.yul\":9929:9932 */\n dup2\n /* \"#utility.yul\":9926:9941 */\n lt\n /* \"#utility.yul\":9900:10144 */\n iszero\n tag_270\n jumpi\n /* \"#utility.yul\":10009:10012 */\n dup1\n /* \"#utility.yul\":10038:10099 */\n tag_271\n /* \"#utility.yul\":10095:10098 */\n dup9\n /* \"#utility.yul\":10083:10093 */\n dup3\n /* \"#utility.yul\":10038:10099 */\n tag_109\n jump\t// in\n tag_271:\n /* \"#utility.yul\":10033:10036 */\n dup5\n /* \"#utility.yul\":10026:10100 */\n mstore\n /* \"#utility.yul\":10129:10133 */\n 0x20\n /* \"#utility.yul\":10124:10127 */\n dup5\n /* \"#utility.yul\":10120:10134 */\n add\n /* \"#utility.yul\":10113:10134 */\n swap4\n pop\n /* \"#utility.yul\":9976:10144 */\n pop\n /* \"#utility.yul\":9960:9964 */\n 0x40\n /* \"#utility.yul\":9955:9958 */\n dup2\n /* \"#utility.yul\":9951:9965 */\n add\n /* \"#utility.yul\":9944:9965 */\n swap1\n pop\n /* \"#utility.yul\":9900:10144 */\n jump(tag_268)\n tag_270:\n /* \"#utility.yul\":9904:9925 */\n pop\n /* \"#utility.yul\":9494:10150 */\n pop\n pop\n /* \"#utility.yul\":9368:10150 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10189:10607 */\n tag_111:\n /* \"#utility.yul\":10284:10289 */\n 0x00\n /* \"#utility.yul\":10333:10336 */\n dup3\n /* \"#utility.yul\":10326:10330 */\n 0x1f\n /* \"#utility.yul\":10318:10324 */\n dup4\n /* \"#utility.yul\":10314:10331 */\n add\n /* \"#utility.yul\":10310:10337 */\n slt\n /* \"#utility.yul\":10300:10422 */\n tag_273\n jumpi\n /* \"#utility.yul\":10341:10420 */\n tag_274\n tag_87\n jump\t// in\n tag_274:\n /* \"#utility.yul\":10300:10422 */\n tag_273:\n /* \"#utility.yul\":10458:10464 */\n dup2\n /* \"#utility.yul\":10445:10465 */\n calldataload\n /* \"#utility.yul\":10483:10601 */\n tag_275\n /* \"#utility.yul\":10597:10600 */\n dup5\n /* \"#utility.yul\":10589:10595 */\n dup3\n /* \"#utility.yul\":10582:10586 */\n 0x20\n /* \"#utility.yul\":10574:10580 */\n dup7\n /* \"#utility.yul\":10570:10587 */\n add\n /* \"#utility.yul\":10483:10601 */\n tag_110\n jump\t// in\n tag_275:\n /* \"#utility.yul\":10474:10601 */\n swap2\n pop\n /* \"#utility.yul\":10290:10607 */\n pop\n /* \"#utility.yul\":10189:10607 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10613:10706 */\n tag_112:\n /* \"#utility.yul\":10649:10656 */\n 0x00\n /* \"#utility.yul\":10689:10699 */\n 0xffffffff\n /* \"#utility.yul\":10682:10687 */\n dup3\n /* \"#utility.yul\":10678:10700 */\n and\n /* \"#utility.yul\":10667:10700 */\n swap1\n pop\n /* \"#utility.yul\":10613:10706 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10712:10832 */\n tag_113:\n /* \"#utility.yul\":10784:10807 */\n tag_278\n /* \"#utility.yul\":10801:10806 */\n dup2\n /* \"#utility.yul\":10784:10807 */\n tag_112\n jump\t// in\n tag_278:\n /* \"#utility.yul\":10777:10782 */\n dup2\n /* \"#utility.yul\":10774:10808 */\n eq\n /* \"#utility.yul\":10764:10826 */\n tag_279\n jumpi\n /* \"#utility.yul\":10822:10823 */\n 0x00\n /* \"#utility.yul\":10819:10820 */\n dup1\n /* \"#utility.yul\":10812:10824 */\n revert\n /* \"#utility.yul\":10764:10826 */\n tag_279:\n /* \"#utility.yul\":10712:10832 */\n pop\n jump\t// out\n /* \"#utility.yul\":10838:10975 */\n tag_114:\n /* \"#utility.yul\":10883:10888 */\n 0x00\n /* \"#utility.yul\":10921:10927 */\n dup2\n /* \"#utility.yul\":10908:10928 */\n calldataload\n /* \"#utility.yul\":10899:10928 */\n swap1\n pop\n /* \"#utility.yul\":10937:10969 */\n tag_281\n /* \"#utility.yul\":10963:10968 */\n dup2\n /* \"#utility.yul\":10937:10969 */\n tag_113\n jump\t// in\n tag_281:\n /* \"#utility.yul\":10838:10975 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10981:12216 */\n tag_17:\n /* \"#utility.yul\":11142:11148 */\n 0x00\n /* \"#utility.yul\":11150:11156 */\n dup1\n /* \"#utility.yul\":11158:11164 */\n 0x00\n /* \"#utility.yul\":11166:11172 */\n dup1\n /* \"#utility.yul\":11215:11218 */\n 0x80\n /* \"#utility.yul\":11203:11212 */\n dup6\n /* \"#utility.yul\":11194:11201 */\n dup8\n /* \"#utility.yul\":11190:11213 */\n sub\n /* \"#utility.yul\":11186:11219 */\n slt\n /* \"#utility.yul\":11183:11303 */\n iszero\n tag_283\n jumpi\n /* \"#utility.yul\":11222:11301 */\n tag_284\n tag_76\n jump\t// in\n tag_284:\n /* \"#utility.yul\":11183:11303 */\n tag_283:\n /* \"#utility.yul\":11370:11371 */\n 0x00\n /* \"#utility.yul\":11359:11368 */\n dup6\n /* \"#utility.yul\":11355:11372 */\n add\n /* \"#utility.yul\":11342:11373 */\n calldataload\n /* \"#utility.yul\":11400:11418 */\n 0xffffffffffffffff\n /* \"#utility.yul\":11392:11398 */\n dup2\n /* \"#utility.yul\":11389:11419 */\n gt\n /* \"#utility.yul\":11386:11503 */\n iszero\n tag_285\n jumpi\n /* \"#utility.yul\":11422:11501 */\n tag_286\n tag_77\n jump\t// in\n tag_286:\n /* \"#utility.yul\":11386:11503 */\n tag_285:\n /* \"#utility.yul\":11527:11629 */\n tag_287\n /* \"#utility.yul\":11621:11628 */\n dup8\n /* \"#utility.yul\":11612:11618 */\n dup3\n /* \"#utility.yul\":11601:11610 */\n dup9\n /* \"#utility.yul\":11597:11619 */\n add\n /* \"#utility.yul\":11527:11629 */\n tag_111\n jump\t// in\n tag_287:\n /* \"#utility.yul\":11517:11629 */\n swap5\n pop\n /* \"#utility.yul\":11313:11639 */\n pop\n /* \"#utility.yul\":11678:11680 */\n 0x20\n /* \"#utility.yul\":11704:11756 */\n tag_288\n /* \"#utility.yul\":11748:11755 */\n dup8\n /* \"#utility.yul\":11739:11745 */\n dup3\n /* \"#utility.yul\":11728:11737 */\n dup9\n /* \"#utility.yul\":11724:11746 */\n add\n /* \"#utility.yul\":11704:11756 */\n tag_114\n jump\t// in\n tag_288:\n /* \"#utility.yul\":11694:11756 */\n swap4\n pop\n /* \"#utility.yul\":11649:11766 */\n pop\n /* \"#utility.yul\":11833:11835 */\n 0x40\n /* \"#utility.yul\":11822:11831 */\n dup6\n /* \"#utility.yul\":11818:11836 */\n add\n /* \"#utility.yul\":11805:11837 */\n calldataload\n /* \"#utility.yul\":11864:11882 */\n 0xffffffffffffffff\n /* \"#utility.yul\":11856:11862 */\n dup2\n /* \"#utility.yul\":11853:11883 */\n gt\n /* \"#utility.yul\":11850:11967 */\n iszero\n tag_289\n jumpi\n /* \"#utility.yul\":11886:11965 */\n tag_290\n tag_77\n jump\t// in\n tag_290:\n /* \"#utility.yul\":11850:11967 */\n tag_289:\n /* \"#utility.yul\":11991:12072 */\n tag_291\n /* \"#utility.yul\":12064:12071 */\n dup8\n /* \"#utility.yul\":12055:12061 */\n dup3\n /* \"#utility.yul\":12044:12053 */\n dup9\n /* \"#utility.yul\":12040:12062 */\n add\n /* \"#utility.yul\":11991:12072 */\n tag_97\n jump\t// in\n tag_291:\n /* \"#utility.yul\":11981:12072 */\n swap3\n pop\n /* \"#utility.yul\":11776:12082 */\n pop\n /* \"#utility.yul\":12121:12123 */\n 0x60\n /* \"#utility.yul\":12147:12199 */\n tag_292\n /* \"#utility.yul\":12191:12198 */\n dup8\n /* \"#utility.yul\":12182:12188 */\n dup3\n /* \"#utility.yul\":12171:12180 */\n dup9\n /* \"#utility.yul\":12167:12189 */\n add\n /* \"#utility.yul\":12147:12199 */\n tag_103\n jump\t// in\n tag_292:\n /* \"#utility.yul\":12137:12199 */\n swap2\n pop\n /* \"#utility.yul\":12092:12209 */\n pop\n /* \"#utility.yul\":10981:12216 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":12222:13347 */\n tag_21:\n /* \"#utility.yul\":12344:12350 */\n 0x00\n /* \"#utility.yul\":12352:12358 */\n dup1\n /* \"#utility.yul\":12360:12366 */\n 0x00\n /* \"#utility.yul\":12368:12374 */\n dup1\n /* \"#utility.yul\":12376:12382 */\n 0x00\n /* \"#utility.yul\":12425:12428 */\n 0xa0\n /* \"#utility.yul\":12413:12422 */\n dup7\n /* \"#utility.yul\":12404:12411 */\n dup9\n /* \"#utility.yul\":12400:12423 */\n sub\n /* \"#utility.yul\":12396:12429 */\n slt\n /* \"#utility.yul\":12393:12513 */\n iszero\n tag_294\n jumpi\n /* \"#utility.yul\":12432:12511 */\n tag_295\n tag_76\n jump\t// in\n tag_295:\n /* \"#utility.yul\":12393:12513 */\n tag_294:\n /* \"#utility.yul\":12552:12553 */\n 0x00\n /* \"#utility.yul\":12577:12630 */\n tag_296\n /* \"#utility.yul\":12622:12629 */\n dup9\n /* \"#utility.yul\":12613:12619 */\n dup3\n /* \"#utility.yul\":12602:12611 */\n dup10\n /* \"#utility.yul\":12598:12620 */\n add\n /* \"#utility.yul\":12577:12630 */\n tag_108\n jump\t// in\n tag_296:\n /* \"#utility.yul\":12567:12630 */\n swap6\n pop\n /* \"#utility.yul\":12523:12640 */\n pop\n /* \"#utility.yul\":12679:12681 */\n 0x20\n /* \"#utility.yul\":12705:12758 */\n tag_297\n /* \"#utility.yul\":12750:12757 */\n dup9\n /* \"#utility.yul\":12741:12747 */\n dup3\n /* \"#utility.yul\":12730:12739 */\n dup10\n /* \"#utility.yul\":12726:12748 */\n add\n /* \"#utility.yul\":12705:12758 */\n tag_100\n jump\t// in\n tag_297:\n /* \"#utility.yul\":12695:12758 */\n swap5\n pop\n /* \"#utility.yul\":12650:12768 */\n pop\n /* \"#utility.yul\":12807:12809 */\n 0x40\n /* \"#utility.yul\":12833:12886 */\n tag_298\n /* \"#utility.yul\":12878:12885 */\n dup9\n /* \"#utility.yul\":12869:12875 */\n dup3\n /* \"#utility.yul\":12858:12867 */\n dup10\n /* \"#utility.yul\":12854:12876 */\n add\n /* \"#utility.yul\":12833:12886 */\n tag_100\n jump\t// in\n tag_298:\n /* \"#utility.yul\":12823:12886 */\n swap4\n pop\n /* \"#utility.yul\":12778:12896 */\n pop\n /* \"#utility.yul\":12963:12965 */\n 0x60\n /* \"#utility.yul\":12952:12961 */\n dup7\n /* \"#utility.yul\":12948:12966 */\n add\n /* \"#utility.yul\":12935:12967 */\n calldataload\n /* \"#utility.yul\":12994:13012 */\n 0xffffffffffffffff\n /* \"#utility.yul\":12986:12992 */\n dup2\n /* \"#utility.yul\":12983:13013 */\n gt\n /* \"#utility.yul\":12980:13097 */\n iszero\n tag_299\n jumpi\n /* \"#utility.yul\":13016:13095 */\n tag_300\n tag_77\n jump\t// in\n tag_300:\n /* \"#utility.yul\":12980:13097 */\n tag_299:\n /* \"#utility.yul\":13121:13202 */\n tag_301\n /* \"#utility.yul\":13194:13201 */\n dup9\n /* \"#utility.yul\":13185:13191 */\n dup3\n /* \"#utility.yul\":13174:13183 */\n dup10\n /* \"#utility.yul\":13170:13192 */\n add\n /* \"#utility.yul\":13121:13202 */\n tag_97\n jump\t// in\n tag_301:\n /* \"#utility.yul\":13111:13202 */\n swap3\n pop\n /* \"#utility.yul\":12906:13212 */\n pop\n /* \"#utility.yul\":13251:13254 */\n 0x80\n /* \"#utility.yul\":13278:13330 */\n tag_302\n /* \"#utility.yul\":13322:13329 */\n dup9\n /* \"#utility.yul\":13313:13319 */\n dup3\n /* \"#utility.yul\":13302:13311 */\n dup10\n /* \"#utility.yul\":13298:13320 */\n add\n /* \"#utility.yul\":13278:13330 */\n tag_103\n jump\t// in\n tag_302:\n /* \"#utility.yul\":13268:13330 */\n swap2\n pop\n /* \"#utility.yul\":13222:13340 */\n pop\n /* \"#utility.yul\":12222:13347 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":13353:13413 */\n tag_115:\n /* \"#utility.yul\":13381:13384 */\n 0x00\n /* \"#utility.yul\":13402:13407 */\n dup2\n /* \"#utility.yul\":13395:13407 */\n swap1\n pop\n /* \"#utility.yul\":13353:13413 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13419:13561 */\n tag_116:\n /* \"#utility.yul\":13469:13478 */\n 0x00\n /* \"#utility.yul\":13502:13555 */\n tag_305\n /* \"#utility.yul\":13520:13554 */\n tag_306\n /* \"#utility.yul\":13529:13553 */\n tag_307\n /* \"#utility.yul\":13547:13552 */\n dup5\n /* \"#utility.yul\":13529:13553 */\n tag_105\n jump\t// in\n tag_307:\n /* \"#utility.yul\":13520:13554 */\n tag_115\n jump\t// in\n tag_306:\n /* \"#utility.yul\":13502:13555 */\n tag_105\n jump\t// in\n tag_305:\n /* \"#utility.yul\":13489:13555 */\n swap1\n pop\n /* \"#utility.yul\":13419:13561 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13567:13693 */\n tag_117:\n /* \"#utility.yul\":13617:13626 */\n 0x00\n /* \"#utility.yul\":13650:13687 */\n tag_309\n /* \"#utility.yul\":13681:13686 */\n dup3\n /* \"#utility.yul\":13650:13687 */\n tag_116\n jump\t// in\n tag_309:\n /* \"#utility.yul\":13637:13687 */\n swap1\n pop\n /* \"#utility.yul\":13567:13693 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13699:13840 */\n tag_118:\n /* \"#utility.yul\":13764:13773 */\n 0x00\n /* \"#utility.yul\":13797:13834 */\n tag_311\n /* \"#utility.yul\":13828:13833 */\n dup3\n /* \"#utility.yul\":13797:13834 */\n tag_117\n jump\t// in\n tag_311:\n /* \"#utility.yul\":13784:13834 */\n swap1\n pop\n /* \"#utility.yul\":13699:13840 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13846:14007 */\n tag_119:\n /* \"#utility.yul\":13948:14000 */\n tag_313\n /* \"#utility.yul\":13994:13999 */\n dup2\n /* \"#utility.yul\":13948:14000 */\n tag_118\n jump\t// in\n tag_313:\n /* \"#utility.yul\":13943:13946 */\n dup3\n /* \"#utility.yul\":13936:14001 */\n mstore\n /* \"#utility.yul\":13846:14007 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14013:14265 */\n tag_26:\n /* \"#utility.yul\":14121:14125 */\n 0x00\n /* \"#utility.yul\":14159:14161 */\n 0x20\n /* \"#utility.yul\":14148:14157 */\n dup3\n /* \"#utility.yul\":14144:14162 */\n add\n /* \"#utility.yul\":14136:14162 */\n swap1\n pop\n /* \"#utility.yul\":14172:14258 */\n tag_315\n /* \"#utility.yul\":14255:14256 */\n 0x00\n /* \"#utility.yul\":14244:14253 */\n dup4\n /* \"#utility.yul\":14240:14257 */\n add\n /* \"#utility.yul\":14231:14237 */\n dup5\n /* \"#utility.yul\":14172:14258 */\n tag_119\n jump\t// in\n tag_315:\n /* \"#utility.yul\":14013:14265 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14271:15466 */\n tag_29:\n /* \"#utility.yul\":14412:14418 */\n 0x00\n /* \"#utility.yul\":14420:14426 */\n dup1\n /* \"#utility.yul\":14428:14434 */\n 0x00\n /* \"#utility.yul\":14436:14442 */\n dup1\n /* \"#utility.yul\":14485:14488 */\n 0x80\n /* \"#utility.yul\":14473:14482 */\n dup6\n /* \"#utility.yul\":14464:14471 */\n dup8\n /* \"#utility.yul\":14460:14483 */\n sub\n /* \"#utility.yul\":14456:14489 */\n slt\n /* \"#utility.yul\":14453:14573 */\n iszero\n tag_317\n jumpi\n /* \"#utility.yul\":14492:14571 */\n tag_318\n tag_76\n jump\t// in\n tag_318:\n /* \"#utility.yul\":14453:14573 */\n tag_317:\n /* \"#utility.yul\":14640:14641 */\n 0x00\n /* \"#utility.yul\":14629:14638 */\n dup6\n /* \"#utility.yul\":14625:14642 */\n add\n /* \"#utility.yul\":14612:14643 */\n calldataload\n /* \"#utility.yul\":14670:14688 */\n 0xffffffffffffffff\n /* \"#utility.yul\":14662:14668 */\n dup2\n /* \"#utility.yul\":14659:14689 */\n gt\n /* \"#utility.yul\":14656:14773 */\n iszero\n tag_319\n jumpi\n /* \"#utility.yul\":14692:14771 */\n tag_320\n tag_77\n jump\t// in\n tag_320:\n /* \"#utility.yul\":14656:14773 */\n tag_319:\n /* \"#utility.yul\":14797:14878 */\n tag_321\n /* \"#utility.yul\":14870:14877 */\n dup8\n /* \"#utility.yul\":14861:14867 */\n dup3\n /* \"#utility.yul\":14850:14859 */\n dup9\n /* \"#utility.yul\":14846:14868 */\n add\n /* \"#utility.yul\":14797:14878 */\n tag_97\n jump\t// in\n tag_321:\n /* \"#utility.yul\":14787:14878 */\n swap5\n pop\n /* \"#utility.yul\":14583:14888 */\n pop\n /* \"#utility.yul\":14927:14929 */\n 0x20\n /* \"#utility.yul\":14953:15006 */\n tag_322\n /* \"#utility.yul\":14998:15005 */\n dup8\n /* \"#utility.yul\":14989:14995 */\n dup3\n /* \"#utility.yul\":14978:14987 */\n dup9\n /* \"#utility.yul\":14974:14996 */\n add\n /* \"#utility.yul\":14953:15006 */\n tag_100\n jump\t// in\n tag_322:\n /* \"#utility.yul\":14943:15006 */\n swap4\n pop\n /* \"#utility.yul\":14898:15016 */\n pop\n /* \"#utility.yul\":15083:15085 */\n 0x40\n /* \"#utility.yul\":15072:15081 */\n dup6\n /* \"#utility.yul\":15068:15086 */\n add\n /* \"#utility.yul\":15055:15087 */\n calldataload\n /* \"#utility.yul\":15114:15132 */\n 0xffffffffffffffff\n /* \"#utility.yul\":15106:15112 */\n dup2\n /* \"#utility.yul\":15103:15133 */\n gt\n /* \"#utility.yul\":15100:15217 */\n iszero\n tag_323\n jumpi\n /* \"#utility.yul\":15136:15215 */\n tag_324\n tag_77\n jump\t// in\n tag_324:\n /* \"#utility.yul\":15100:15217 */\n tag_323:\n /* \"#utility.yul\":15241:15322 */\n tag_325\n /* \"#utility.yul\":15314:15321 */\n dup8\n /* \"#utility.yul\":15305:15311 */\n dup3\n /* \"#utility.yul\":15294:15303 */\n dup9\n /* \"#utility.yul\":15290:15312 */\n add\n /* \"#utility.yul\":15241:15322 */\n tag_97\n jump\t// in\n tag_325:\n /* \"#utility.yul\":15231:15322 */\n swap3\n pop\n /* \"#utility.yul\":15026:15332 */\n pop\n /* \"#utility.yul\":15371:15373 */\n 0x60\n /* \"#utility.yul\":15397:15449 */\n tag_326\n /* \"#utility.yul\":15441:15448 */\n dup8\n /* \"#utility.yul\":15432:15438 */\n dup3\n /* \"#utility.yul\":15421:15430 */\n dup9\n /* \"#utility.yul\":15417:15439 */\n add\n /* \"#utility.yul\":15397:15449 */\n tag_103\n jump\t// in\n tag_326:\n /* \"#utility.yul\":15387:15449 */\n swap2\n pop\n /* \"#utility.yul\":15342:15459 */\n pop\n /* \"#utility.yul\":14271:15466 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":15472:16451 */\n tag_33:\n /* \"#utility.yul\":15585:15591 */\n 0x00\n /* \"#utility.yul\":15593:15599 */\n dup1\n /* \"#utility.yul\":15601:15607 */\n 0x00\n /* \"#utility.yul\":15609:15615 */\n dup1\n /* \"#utility.yul\":15658:15661 */\n 0x80\n /* \"#utility.yul\":15646:15655 */\n dup6\n /* \"#utility.yul\":15637:15644 */\n dup8\n /* \"#utility.yul\":15633:15656 */\n sub\n /* \"#utility.yul\":15629:15662 */\n slt\n /* \"#utility.yul\":15626:15746 */\n iszero\n tag_328\n jumpi\n /* \"#utility.yul\":15665:15744 */\n tag_329\n tag_76\n jump\t// in\n tag_329:\n /* \"#utility.yul\":15626:15746 */\n tag_328:\n /* \"#utility.yul\":15785:15786 */\n 0x00\n /* \"#utility.yul\":15810:15863 */\n tag_330\n /* \"#utility.yul\":15855:15862 */\n dup8\n /* \"#utility.yul\":15846:15852 */\n dup3\n /* \"#utility.yul\":15835:15844 */\n dup9\n /* \"#utility.yul\":15831:15853 */\n add\n /* \"#utility.yul\":15810:15863 */\n tag_108\n jump\t// in\n tag_330:\n /* \"#utility.yul\":15800:15863 */\n swap5\n pop\n /* \"#utility.yul\":15756:15873 */\n pop\n /* \"#utility.yul\":15912:15914 */\n 0x20\n /* \"#utility.yul\":15938:15991 */\n tag_331\n /* \"#utility.yul\":15983:15990 */\n dup8\n /* \"#utility.yul\":15974:15980 */\n dup3\n /* \"#utility.yul\":15963:15972 */\n dup9\n /* \"#utility.yul\":15959:15981 */\n add\n /* \"#utility.yul\":15938:15991 */\n tag_100\n jump\t// in\n tag_331:\n /* \"#utility.yul\":15928:15991 */\n swap4\n pop\n /* \"#utility.yul\":15883:16001 */\n pop\n /* \"#utility.yul\":16068:16070 */\n 0x40\n /* \"#utility.yul\":16057:16066 */\n dup6\n /* \"#utility.yul\":16053:16071 */\n add\n /* \"#utility.yul\":16040:16072 */\n calldataload\n /* \"#utility.yul\":16099:16117 */\n 0xffffffffffffffff\n /* \"#utility.yul\":16091:16097 */\n dup2\n /* \"#utility.yul\":16088:16118 */\n gt\n /* \"#utility.yul\":16085:16202 */\n iszero\n tag_332\n jumpi\n /* \"#utility.yul\":16121:16200 */\n tag_333\n tag_77\n jump\t// in\n tag_333:\n /* \"#utility.yul\":16085:16202 */\n tag_332:\n /* \"#utility.yul\":16226:16307 */\n tag_334\n /* \"#utility.yul\":16299:16306 */\n dup8\n /* \"#utility.yul\":16290:16296 */\n dup3\n /* \"#utility.yul\":16279:16288 */\n dup9\n /* \"#utility.yul\":16275:16297 */\n add\n /* \"#utility.yul\":16226:16307 */\n tag_97\n jump\t// in\n tag_334:\n /* \"#utility.yul\":16216:16307 */\n swap3\n pop\n /* \"#utility.yul\":16011:16317 */\n pop\n /* \"#utility.yul\":16356:16358 */\n 0x60\n /* \"#utility.yul\":16382:16434 */\n tag_335\n /* \"#utility.yul\":16426:16433 */\n dup8\n /* \"#utility.yul\":16417:16423 */\n dup3\n /* \"#utility.yul\":16406:16415 */\n dup9\n /* \"#utility.yul\":16402:16424 */\n add\n /* \"#utility.yul\":16382:16434 */\n tag_103\n jump\t// in\n tag_335:\n /* \"#utility.yul\":16372:16434 */\n swap2\n pop\n /* \"#utility.yul\":16327:16444 */\n pop\n /* \"#utility.yul\":15472:16451 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":16457:16794 */\n tag_120:\n /* \"#utility.yul\":16560:16564 */\n 0x00\n /* \"#utility.yul\":16650:16668 */\n 0xffffffffffffffff\n /* \"#utility.yul\":16642:16648 */\n dup3\n /* \"#utility.yul\":16639:16669 */\n gt\n /* \"#utility.yul\":16636:16692 */\n iszero\n tag_337\n jumpi\n /* \"#utility.yul\":16672:16690 */\n tag_338\n tag_80\n jump\t// in\n tag_338:\n /* \"#utility.yul\":16636:16692 */\n tag_337:\n /* \"#utility.yul\":16722:16726 */\n 0x20\n /* \"#utility.yul\":16714:16720 */\n dup3\n /* \"#utility.yul\":16710:16727 */\n mul\n /* \"#utility.yul\":16702:16727 */\n swap1\n pop\n /* \"#utility.yul\":16782:16786 */\n 0x20\n /* \"#utility.yul\":16776:16780 */\n dup2\n /* \"#utility.yul\":16772:16787 */\n add\n /* \"#utility.yul\":16764:16787 */\n swap1\n pop\n /* \"#utility.yul\":16457:16794 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16833:17602 */\n tag_121:\n /* \"#utility.yul\":16908:16913 */\n 0x00\n /* \"#utility.yul\":16952:16956 */\n 0x40\n /* \"#utility.yul\":16940:16949 */\n dup3\n /* \"#utility.yul\":16935:16938 */\n dup5\n /* \"#utility.yul\":16931:16950 */\n sub\n /* \"#utility.yul\":16927:16957 */\n slt\n /* \"#utility.yul\":16924:17041 */\n iszero\n tag_340\n jumpi\n /* \"#utility.yul\":16960:17039 */\n tag_341\n tag_78\n jump\t// in\n tag_341:\n /* \"#utility.yul\":16924:17041 */\n tag_340:\n /* \"#utility.yul\":17059:17080 */\n tag_342\n /* \"#utility.yul\":17075:17079 */\n 0x40\n /* \"#utility.yul\":17059:17080 */\n tag_82\n jump\t// in\n tag_342:\n /* \"#utility.yul\":17050:17080 */\n swap1\n pop\n /* \"#utility.yul\":17171:17172 */\n 0x00\n /* \"#utility.yul\":17160:17169 */\n dup3\n /* \"#utility.yul\":17156:17173 */\n add\n /* \"#utility.yul\":17143:17174 */\n calldataload\n /* \"#utility.yul\":17201:17219 */\n 0xffffffffffffffff\n /* \"#utility.yul\":17193:17199 */\n dup2\n /* \"#utility.yul\":17190:17220 */\n gt\n /* \"#utility.yul\":17187:17304 */\n iszero\n tag_343\n jumpi\n /* \"#utility.yul\":17223:17302 */\n tag_344\n tag_83\n jump\t// in\n tag_344:\n /* \"#utility.yul\":17187:17304 */\n tag_343:\n /* \"#utility.yul\":17343:17420 */\n tag_345\n /* \"#utility.yul\":17416:17419 */\n dup5\n /* \"#utility.yul\":17407:17413 */\n dup3\n /* \"#utility.yul\":17396:17405 */\n dup6\n /* \"#utility.yul\":17392:17414 */\n add\n /* \"#utility.yul\":17343:17420 */\n tag_97\n jump\t// in\n tag_345:\n /* \"#utility.yul\":17336:17340 */\n 0x00\n /* \"#utility.yul\":17329:17334 */\n dup4\n /* \"#utility.yul\":17325:17341 */\n add\n /* \"#utility.yul\":17318:17421 */\n mstore\n /* \"#utility.yul\":17090:17432 */\n pop\n /* \"#utility.yul\":17493:17495 */\n 0x20\n /* \"#utility.yul\":17534:17583 */\n tag_346\n /* \"#utility.yul\":17579:17582 */\n dup5\n /* \"#utility.yul\":17570:17576 */\n dup3\n /* \"#utility.yul\":17559:17568 */\n dup6\n /* \"#utility.yul\":17555:17577 */\n add\n /* \"#utility.yul\":17534:17583 */\n tag_100\n jump\t// in\n tag_346:\n /* \"#utility.yul\":17527:17531 */\n 0x20\n /* \"#utility.yul\":17520:17525 */\n dup4\n /* \"#utility.yul\":17516:17532 */\n add\n /* \"#utility.yul\":17509:17584 */\n mstore\n /* \"#utility.yul\":17442:17595 */\n pop\n /* \"#utility.yul\":16833:17602 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17643:18636 */\n tag_122:\n /* \"#utility.yul\":17765:17770 */\n 0x00\n /* \"#utility.yul\":17790:17897 */\n tag_348\n /* \"#utility.yul\":17806:17896 */\n tag_349\n /* \"#utility.yul\":17889:17895 */\n dup5\n /* \"#utility.yul\":17806:17896 */\n tag_120\n jump\t// in\n tag_349:\n /* \"#utility.yul\":17790:17897 */\n tag_82\n jump\t// in\n tag_348:\n /* \"#utility.yul\":17781:17897 */\n swap1\n pop\n /* \"#utility.yul\":17917:17922 */\n dup1\n /* \"#utility.yul\":17946:17952 */\n dup4\n /* \"#utility.yul\":17939:17944 */\n dup3\n /* \"#utility.yul\":17932:17953 */\n mstore\n /* \"#utility.yul\":17980:17984 */\n 0x20\n /* \"#utility.yul\":17973:17978 */\n dup3\n /* \"#utility.yul\":17969:17985 */\n add\n /* \"#utility.yul\":17962:17985 */\n swap1\n pop\n /* \"#utility.yul\":18033:18037 */\n 0x20\n /* \"#utility.yul\":18025:18031 */\n dup5\n /* \"#utility.yul\":18021:18038 */\n mul\n /* \"#utility.yul\":18013:18019 */\n dup4\n /* \"#utility.yul\":18009:18039 */\n add\n /* \"#utility.yul\":18062:18065 */\n dup6\n /* \"#utility.yul\":18054:18060 */\n dup2\n /* \"#utility.yul\":18051:18066 */\n gt\n /* \"#utility.yul\":18048:18170 */\n iszero\n tag_350\n jumpi\n /* \"#utility.yul\":18081:18160 */\n tag_351\n tag_89\n jump\t// in\n tag_351:\n /* \"#utility.yul\":18048:18170 */\n tag_350:\n /* \"#utility.yul\":18196:18202 */\n dup4\n /* \"#utility.yul\":18179:18630 */\n tag_352:\n /* \"#utility.yul\":18213:18219 */\n dup2\n /* \"#utility.yul\":18208:18211 */\n dup2\n /* \"#utility.yul\":18205:18220 */\n lt\n /* \"#utility.yul\":18179:18630 */\n iszero\n tag_354\n jumpi\n /* \"#utility.yul\":18302:18305 */\n dup1\n /* \"#utility.yul\":18289:18306 */\n calldataload\n /* \"#utility.yul\":18338:18356 */\n 0xffffffffffffffff\n /* \"#utility.yul\":18325:18336 */\n dup2\n /* \"#utility.yul\":18322:18357 */\n gt\n /* \"#utility.yul\":18319:18441 */\n iszero\n tag_355\n jumpi\n /* \"#utility.yul\":18360:18439 */\n tag_356\n tag_87\n jump\t// in\n tag_356:\n /* \"#utility.yul\":18319:18441 */\n tag_355:\n /* \"#utility.yul\":18484:18495 */\n dup1\n /* \"#utility.yul\":18476:18482 */\n dup7\n /* \"#utility.yul\":18472:18496 */\n add\n /* \"#utility.yul\":18522:18585 */\n tag_357\n /* \"#utility.yul\":18581:18584 */\n dup10\n /* \"#utility.yul\":18569:18579 */\n dup3\n /* \"#utility.yul\":18522:18585 */\n tag_121\n jump\t// in\n tag_357:\n /* \"#utility.yul\":18517:18520 */\n dup6\n /* \"#utility.yul\":18510:18586 */\n mstore\n /* \"#utility.yul\":18615:18619 */\n 0x20\n /* \"#utility.yul\":18610:18613 */\n dup6\n /* \"#utility.yul\":18606:18620 */\n add\n /* \"#utility.yul\":18599:18620 */\n swap5\n pop\n /* \"#utility.yul\":18255:18630 */\n pop\n pop\n /* \"#utility.yul\":18239:18243 */\n 0x20\n /* \"#utility.yul\":18234:18237 */\n dup2\n /* \"#utility.yul\":18230:18244 */\n add\n /* \"#utility.yul\":18223:18244 */\n swap1\n pop\n /* \"#utility.yul\":18179:18630 */\n jump(tag_352)\n tag_354:\n /* \"#utility.yul\":18183:18204 */\n pop\n /* \"#utility.yul\":17771:18636 */\n pop\n pop\n /* \"#utility.yul\":17643:18636 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18677:19099 */\n tag_123:\n /* \"#utility.yul\":18774:18779 */\n 0x00\n /* \"#utility.yul\":18823:18826 */\n dup3\n /* \"#utility.yul\":18816:18820 */\n 0x1f\n /* \"#utility.yul\":18808:18814 */\n dup4\n /* \"#utility.yul\":18804:18821 */\n add\n /* \"#utility.yul\":18800:18827 */\n slt\n /* \"#utility.yul\":18790:18912 */\n tag_359\n jumpi\n /* \"#utility.yul\":18831:18910 */\n tag_360\n tag_87\n jump\t// in\n tag_360:\n /* \"#utility.yul\":18790:18912 */\n tag_359:\n /* \"#utility.yul\":18948:18954 */\n dup2\n /* \"#utility.yul\":18935:18955 */\n calldataload\n /* \"#utility.yul\":18973:19093 */\n tag_361\n /* \"#utility.yul\":19089:19092 */\n dup5\n /* \"#utility.yul\":19081:19087 */\n dup3\n /* \"#utility.yul\":19074:19078 */\n 0x20\n /* \"#utility.yul\":19066:19072 */\n dup7\n /* \"#utility.yul\":19062:19079 */\n add\n /* \"#utility.yul\":18973:19093 */\n tag_122\n jump\t// in\n tag_361:\n /* \"#utility.yul\":18964:19093 */\n swap2\n pop\n /* \"#utility.yul\":18780:19099 */\n pop\n /* \"#utility.yul\":18677:19099 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19105:20344 */\n tag_37:\n /* \"#utility.yul\":19268:19274 */\n 0x00\n /* \"#utility.yul\":19276:19282 */\n dup1\n /* \"#utility.yul\":19284:19290 */\n 0x00\n /* \"#utility.yul\":19292:19298 */\n dup1\n /* \"#utility.yul\":19341:19344 */\n 0x80\n /* \"#utility.yul\":19329:19338 */\n dup6\n /* \"#utility.yul\":19320:19327 */\n dup8\n /* \"#utility.yul\":19316:19339 */\n sub\n /* \"#utility.yul\":19312:19345 */\n slt\n /* \"#utility.yul\":19309:19429 */\n iszero\n tag_363\n jumpi\n /* \"#utility.yul\":19348:19427 */\n tag_364\n tag_76\n jump\t// in\n tag_364:\n /* \"#utility.yul\":19309:19429 */\n tag_363:\n /* \"#utility.yul\":19496:19497 */\n 0x00\n /* \"#utility.yul\":19485:19494 */\n dup6\n /* \"#utility.yul\":19481:19498 */\n add\n /* \"#utility.yul\":19468:19499 */\n calldataload\n /* \"#utility.yul\":19526:19544 */\n 0xffffffffffffffff\n /* \"#utility.yul\":19518:19524 */\n dup2\n /* \"#utility.yul\":19515:19545 */\n gt\n /* \"#utility.yul\":19512:19629 */\n iszero\n tag_365\n jumpi\n /* \"#utility.yul\":19548:19627 */\n tag_366\n tag_77\n jump\t// in\n tag_366:\n /* \"#utility.yul\":19512:19629 */\n tag_365:\n /* \"#utility.yul\":19653:19757 */\n tag_367\n /* \"#utility.yul\":19749:19756 */\n dup8\n /* \"#utility.yul\":19740:19746 */\n dup3\n /* \"#utility.yul\":19729:19738 */\n dup9\n /* \"#utility.yul\":19725:19747 */\n add\n /* \"#utility.yul\":19653:19757 */\n tag_123\n jump\t// in\n tag_367:\n /* \"#utility.yul\":19643:19757 */\n swap5\n pop\n /* \"#utility.yul\":19439:19767 */\n pop\n /* \"#utility.yul\":19806:19808 */\n 0x20\n /* \"#utility.yul\":19832:19884 */\n tag_368\n /* \"#utility.yul\":19876:19883 */\n dup8\n /* \"#utility.yul\":19867:19873 */\n dup3\n /* \"#utility.yul\":19856:19865 */\n dup9\n /* \"#utility.yul\":19852:19874 */\n add\n /* \"#utility.yul\":19832:19884 */\n tag_114\n jump\t// in\n tag_368:\n /* \"#utility.yul\":19822:19884 */\n swap4\n pop\n /* \"#utility.yul\":19777:19894 */\n pop\n /* \"#utility.yul\":19961:19963 */\n 0x40\n /* \"#utility.yul\":19950:19959 */\n dup6\n /* \"#utility.yul\":19946:19964 */\n add\n /* \"#utility.yul\":19933:19965 */\n calldataload\n /* \"#utility.yul\":19992:20010 */\n 0xffffffffffffffff\n /* \"#utility.yul\":19984:19990 */\n dup2\n /* \"#utility.yul\":19981:20011 */\n gt\n /* \"#utility.yul\":19978:20095 */\n iszero\n tag_369\n jumpi\n /* \"#utility.yul\":20014:20093 */\n tag_370\n tag_77\n jump\t// in\n tag_370:\n /* \"#utility.yul\":19978:20095 */\n tag_369:\n /* \"#utility.yul\":20119:20200 */\n tag_371\n /* \"#utility.yul\":20192:20199 */\n dup8\n /* \"#utility.yul\":20183:20189 */\n dup3\n /* \"#utility.yul\":20172:20181 */\n dup9\n /* \"#utility.yul\":20168:20190 */\n add\n /* \"#utility.yul\":20119:20200 */\n tag_97\n jump\t// in\n tag_371:\n /* \"#utility.yul\":20109:20200 */\n swap3\n pop\n /* \"#utility.yul\":19904:20210 */\n pop\n /* \"#utility.yul\":20249:20251 */\n 0x60\n /* \"#utility.yul\":20275:20327 */\n tag_372\n /* \"#utility.yul\":20319:20326 */\n dup8\n /* \"#utility.yul\":20310:20316 */\n dup3\n /* \"#utility.yul\":20299:20308 */\n dup9\n /* \"#utility.yul\":20295:20317 */\n add\n /* \"#utility.yul\":20275:20327 */\n tag_103\n jump\t// in\n tag_372:\n /* \"#utility.yul\":20265:20327 */\n swap2\n pop\n /* \"#utility.yul\":20220:20337 */\n pop\n /* \"#utility.yul\":19105:20344 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":20350:20452 */\n tag_124:\n /* \"#utility.yul\":20423:20445 */\n tag_374\n /* \"#utility.yul\":20439:20444 */\n dup2\n /* \"#utility.yul\":20423:20445 */\n tag_84\n jump\t// in\n tag_374:\n /* \"#utility.yul\":20418:20421 */\n dup3\n /* \"#utility.yul\":20411:20446 */\n mstore\n /* \"#utility.yul\":20350:20452 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20458:20581 */\n tag_125:\n /* \"#utility.yul\":20534:20540 */\n 0x00\n /* \"#utility.yul\":20568:20573 */\n dup2\n /* \"#utility.yul\":20562:20574 */\n mload\n /* \"#utility.yul\":20552:20574 */\n swap1\n pop\n /* \"#utility.yul\":20458:20581 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":20587:20770 */\n tag_126:\n /* \"#utility.yul\":20685:20696 */\n 0x00\n /* \"#utility.yul\":20719:20725 */\n dup3\n /* \"#utility.yul\":20714:20717 */\n dup3\n /* \"#utility.yul\":20707:20726 */\n mstore\n /* \"#utility.yul\":20759:20763 */\n 0x20\n /* \"#utility.yul\":20754:20757 */\n dup3\n /* \"#utility.yul\":20750:20764 */\n add\n /* \"#utility.yul\":20735:20764 */\n swap1\n pop\n /* \"#utility.yul\":20587:20770 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20776:20917 */\n tag_127:\n /* \"#utility.yul\":20852:20856 */\n 0x00\n /* \"#utility.yul\":20875:20878 */\n dup2\n /* \"#utility.yul\":20867:20878 */\n swap1\n pop\n /* \"#utility.yul\":20905:20909 */\n 0x20\n /* \"#utility.yul\":20900:20903 */\n dup3\n /* \"#utility.yul\":20896:20910 */\n add\n /* \"#utility.yul\":20888:20910 */\n swap1\n pop\n /* \"#utility.yul\":20776:20917 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":20923:21021 */\n tag_128:\n /* \"#utility.yul\":20974:20980 */\n 0x00\n /* \"#utility.yul\":21008:21013 */\n dup2\n /* \"#utility.yul\":21002:21014 */\n mload\n /* \"#utility.yul\":20992:21014 */\n swap1\n pop\n /* \"#utility.yul\":20923:21021 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":21027:21185 */\n tag_129:\n /* \"#utility.yul\":21100:21111 */\n 0x00\n /* \"#utility.yul\":21134:21140 */\n dup3\n /* \"#utility.yul\":21129:21132 */\n dup3\n /* \"#utility.yul\":21122:21141 */\n mstore\n /* \"#utility.yul\":21174:21178 */\n 0x20\n /* \"#utility.yul\":21169:21172 */\n dup3\n /* \"#utility.yul\":21165:21179 */\n add\n /* \"#utility.yul\":21150:21179 */\n swap1\n pop\n /* \"#utility.yul\":21027:21185 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21191:21498 */\n tag_130:\n /* \"#utility.yul\":21259:21260 */\n 0x00\n /* \"#utility.yul\":21269:21382 */\n tag_381:\n /* \"#utility.yul\":21283:21289 */\n dup4\n /* \"#utility.yul\":21280:21281 */\n dup2\n /* \"#utility.yul\":21277:21290 */\n lt\n /* \"#utility.yul\":21269:21382 */\n iszero\n tag_383\n jumpi\n /* \"#utility.yul\":21368:21369 */\n dup1\n /* \"#utility.yul\":21363:21366 */\n dup3\n /* \"#utility.yul\":21359:21370 */\n add\n /* \"#utility.yul\":21353:21371 */\n mload\n /* \"#utility.yul\":21349:21350 */\n dup2\n /* \"#utility.yul\":21344:21347 */\n dup5\n /* \"#utility.yul\":21340:21351 */\n add\n /* \"#utility.yul\":21333:21372 */\n mstore\n /* \"#utility.yul\":21305:21307 */\n 0x20\n /* \"#utility.yul\":21302:21303 */\n dup2\n /* \"#utility.yul\":21298:21308 */\n add\n /* \"#utility.yul\":21293:21308 */\n swap1\n pop\n /* \"#utility.yul\":21269:21382 */\n jump(tag_381)\n tag_383:\n /* \"#utility.yul\":21400:21406 */\n dup4\n /* \"#utility.yul\":21397:21398 */\n dup2\n /* \"#utility.yul\":21394:21407 */\n gt\n /* \"#utility.yul\":21391:21492 */\n iszero\n tag_384\n jumpi\n /* \"#utility.yul\":21480:21481 */\n 0x00\n /* \"#utility.yul\":21471:21477 */\n dup5\n /* \"#utility.yul\":21466:21469 */\n dup5\n /* \"#utility.yul\":21462:21478 */\n add\n /* \"#utility.yul\":21455:21482 */\n mstore\n /* \"#utility.yul\":21391:21492 */\n tag_384:\n /* \"#utility.yul\":21240:21498 */\n pop\n /* \"#utility.yul\":21191:21498 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21504:21844 */\n tag_131:\n /* \"#utility.yul\":21580:21583 */\n 0x00\n /* \"#utility.yul\":21608:21646 */\n tag_386\n /* \"#utility.yul\":21640:21645 */\n dup3\n /* \"#utility.yul\":21608:21646 */\n tag_128\n jump\t// in\n tag_386:\n /* \"#utility.yul\":21662:21722 */\n tag_387\n /* \"#utility.yul\":21715:21721 */\n dup2\n /* \"#utility.yul\":21710:21713 */\n dup6\n /* \"#utility.yul\":21662:21722 */\n tag_129\n jump\t// in\n tag_387:\n /* \"#utility.yul\":21655:21722 */\n swap4\n pop\n /* \"#utility.yul\":21731:21783 */\n tag_388\n /* \"#utility.yul\":21776:21782 */\n dup2\n /* \"#utility.yul\":21771:21774 */\n dup6\n /* \"#utility.yul\":21764:21768 */\n 0x20\n /* \"#utility.yul\":21757:21762 */\n dup7\n /* \"#utility.yul\":21753:21769 */\n add\n /* \"#utility.yul\":21731:21783 */\n tag_130\n jump\t// in\n tag_388:\n /* \"#utility.yul\":21808:21837 */\n tag_389\n /* \"#utility.yul\":21830:21836 */\n dup2\n /* \"#utility.yul\":21808:21837 */\n tag_79\n jump\t// in\n tag_389:\n /* \"#utility.yul\":21803:21806 */\n dup5\n /* \"#utility.yul\":21799:21838 */\n add\n /* \"#utility.yul\":21792:21838 */\n swap2\n pop\n /* \"#utility.yul\":21584:21844 */\n pop\n /* \"#utility.yul\":21504:21844 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21850:22042 */\n tag_132:\n /* \"#utility.yul\":21937:21947 */\n 0x00\n /* \"#utility.yul\":21972:22036 */\n tag_391\n /* \"#utility.yul\":22032:22035 */\n dup4\n /* \"#utility.yul\":22024:22030 */\n dup4\n /* \"#utility.yul\":21972:22036 */\n tag_131\n jump\t// in\n tag_391:\n /* \"#utility.yul\":21958:22036 */\n swap1\n pop\n /* \"#utility.yul\":21850:22042 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":22048:22170 */\n tag_133:\n /* \"#utility.yul\":22127:22131 */\n 0x00\n /* \"#utility.yul\":22159:22163 */\n 0x20\n /* \"#utility.yul\":22154:22157 */\n dup3\n /* \"#utility.yul\":22150:22164 */\n add\n /* \"#utility.yul\":22142:22164 */\n swap1\n pop\n /* \"#utility.yul\":22048:22170 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":22202:23165 */\n tag_134:\n /* \"#utility.yul\":22329:22332 */\n 0x00\n /* \"#utility.yul\":22358:22421 */\n tag_394\n /* \"#utility.yul\":22415:22420 */\n dup3\n /* \"#utility.yul\":22358:22421 */\n tag_125\n jump\t// in\n tag_394:\n /* \"#utility.yul\":22437:22522 */\n tag_395\n /* \"#utility.yul\":22515:22521 */\n dup2\n /* \"#utility.yul\":22510:22513 */\n dup6\n /* \"#utility.yul\":22437:22522 */\n tag_126\n jump\t// in\n tag_395:\n /* \"#utility.yul\":22430:22522 */\n swap4\n pop\n /* \"#utility.yul\":22548:22551 */\n dup4\n /* \"#utility.yul\":22593:22597 */\n 0x20\n /* \"#utility.yul\":22585:22591 */\n dup3\n /* \"#utility.yul\":22581:22598 */\n mul\n /* \"#utility.yul\":22576:22579 */\n dup6\n /* \"#utility.yul\":22572:22599 */\n add\n /* \"#utility.yul\":22623:22688 */\n tag_396\n /* \"#utility.yul\":22682:22687 */\n dup6\n /* \"#utility.yul\":22623:22688 */\n tag_127\n jump\t// in\n tag_396:\n /* \"#utility.yul\":22711:22718 */\n dup1\n /* \"#utility.yul\":22742:22743 */\n 0x00\n /* \"#utility.yul\":22727:23120 */\n tag_397:\n /* \"#utility.yul\":22752:22758 */\n dup6\n /* \"#utility.yul\":22749:22750 */\n dup2\n /* \"#utility.yul\":22746:22759 */\n lt\n /* \"#utility.yul\":22727:23120 */\n iszero\n tag_399\n jumpi\n /* \"#utility.yul\":22823:22832 */\n dup5\n /* \"#utility.yul\":22817:22821 */\n dup5\n /* \"#utility.yul\":22813:22833 */\n sub\n /* \"#utility.yul\":22808:22811 */\n dup10\n /* \"#utility.yul\":22801:22834 */\n mstore\n /* \"#utility.yul\":22874:22880 */\n dup2\n /* \"#utility.yul\":22868:22881 */\n mload\n /* \"#utility.yul\":22902:22984 */\n tag_400\n /* \"#utility.yul\":22979:22983 */\n dup6\n /* \"#utility.yul\":22964:22977 */\n dup3\n /* \"#utility.yul\":22902:22984 */\n tag_132\n jump\t// in\n tag_400:\n /* \"#utility.yul\":22894:22984 */\n swap5\n pop\n /* \"#utility.yul\":23007:23076 */\n tag_401\n /* \"#utility.yul\":23069:23075 */\n dup4\n /* \"#utility.yul\":23007:23076 */\n tag_133\n jump\t// in\n tag_401:\n /* \"#utility.yul\":22997:23076 */\n swap3\n pop\n /* \"#utility.yul\":23105:23109 */\n 0x20\n /* \"#utility.yul\":23100:23103 */\n dup11\n /* \"#utility.yul\":23096:23110 */\n add\n /* \"#utility.yul\":23089:23110 */\n swap10\n pop\n /* \"#utility.yul\":22787:23120 */\n pop\n /* \"#utility.yul\":22774:22775 */\n 0x01\n /* \"#utility.yul\":22771:22772 */\n dup2\n /* \"#utility.yul\":22767:22776 */\n add\n /* \"#utility.yul\":22762:22776 */\n swap1\n pop\n /* \"#utility.yul\":22727:23120 */\n jump(tag_397)\n tag_399:\n /* \"#utility.yul\":22731:22745 */\n pop\n /* \"#utility.yul\":23136:23140 */\n dup3\n /* \"#utility.yul\":23129:23140 */\n swap8\n pop\n /* \"#utility.yul\":23156:23159 */\n dup8\n /* \"#utility.yul\":23149:23159 */\n swap6\n pop\n /* \"#utility.yul\":22334:23165 */\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":22202:23165 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":23239:23902 */\n tag_135:\n /* \"#utility.yul\":23364:23367 */\n 0x00\n /* \"#utility.yul\":23400:23404 */\n 0x40\n /* \"#utility.yul\":23395:23398 */\n dup4\n /* \"#utility.yul\":23391:23405 */\n add\n /* \"#utility.yul\":23490:23494 */\n 0x00\n /* \"#utility.yul\":23483:23488 */\n dup4\n /* \"#utility.yul\":23479:23495 */\n add\n /* \"#utility.yul\":23473:23496 */\n mload\n /* \"#utility.yul\":23509:23568 */\n tag_403\n /* \"#utility.yul\":23562:23566 */\n 0x00\n /* \"#utility.yul\":23557:23560 */\n dup7\n /* \"#utility.yul\":23553:23567 */\n add\n /* \"#utility.yul\":23539:23551 */\n dup3\n /* \"#utility.yul\":23509:23568 */\n tag_124\n jump\t// in\n tag_403:\n /* \"#utility.yul\":23415:23578 */\n pop\n /* \"#utility.yul\":23664:23668 */\n 0x20\n /* \"#utility.yul\":23657:23662 */\n dup4\n /* \"#utility.yul\":23653:23669 */\n add\n /* \"#utility.yul\":23647:23670 */\n mload\n /* \"#utility.yul\":23717:23720 */\n dup5\n /* \"#utility.yul\":23711:23715 */\n dup3\n /* \"#utility.yul\":23707:23721 */\n sub\n /* \"#utility.yul\":23700:23704 */\n 0x20\n /* \"#utility.yul\":23695:23698 */\n dup7\n /* \"#utility.yul\":23691:23705 */\n add\n /* \"#utility.yul\":23684:23722 */\n mstore\n /* \"#utility.yul\":23743:23864 */\n tag_404\n /* \"#utility.yul\":23859:23863 */\n dup3\n /* \"#utility.yul\":23845:23857 */\n dup3\n /* \"#utility.yul\":23743:23864 */\n tag_134\n jump\t// in\n tag_404:\n /* \"#utility.yul\":23735:23864 */\n swap2\n pop\n /* \"#utility.yul\":23588:23875 */\n pop\n /* \"#utility.yul\":23892:23896 */\n dup1\n /* \"#utility.yul\":23885:23896 */\n swap2\n pop\n /* \"#utility.yul\":23369:23902 */\n pop\n /* \"#utility.yul\":23239:23902 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":23908:24026 */\n tag_136:\n /* \"#utility.yul\":23995:24019 */\n tag_406\n /* \"#utility.yul\":24013:24018 */\n dup2\n /* \"#utility.yul\":23995:24019 */\n tag_98\n jump\t// in\n tag_406:\n /* \"#utility.yul\":23990:23993 */\n dup3\n /* \"#utility.yul\":23983:24020 */\n mstore\n /* \"#utility.yul\":23908:24026 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":24032:24147 */\n tag_137:\n /* \"#utility.yul\":24117:24140 */\n tag_408\n /* \"#utility.yul\":24134:24139 */\n dup2\n /* \"#utility.yul\":24117:24140 */\n tag_101\n jump\t// in\n tag_408:\n /* \"#utility.yul\":24112:24115 */\n dup3\n /* \"#utility.yul\":24105:24141 */\n mstore\n /* \"#utility.yul\":24032:24147 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":24153:25139 */\n tag_41:\n /* \"#utility.yul\":24468:24472 */\n 0x00\n /* \"#utility.yul\":24506:24509 */\n 0xa0\n /* \"#utility.yul\":24495:24504 */\n dup3\n /* \"#utility.yul\":24491:24510 */\n add\n /* \"#utility.yul\":24483:24510 */\n swap1\n pop\n /* \"#utility.yul\":24556:24565 */\n dup2\n /* \"#utility.yul\":24550:24554 */\n dup2\n /* \"#utility.yul\":24546:24566 */\n sub\n /* \"#utility.yul\":24542:24543 */\n 0x00\n /* \"#utility.yul\":24531:24540 */\n dup4\n /* \"#utility.yul\":24527:24544 */\n add\n /* \"#utility.yul\":24520:24567 */\n mstore\n /* \"#utility.yul\":24584:24698 */\n tag_410\n /* \"#utility.yul\":24693:24697 */\n dup2\n /* \"#utility.yul\":24684:24690 */\n dup9\n /* \"#utility.yul\":24584:24698 */\n tag_135\n jump\t// in\n tag_410:\n /* \"#utility.yul\":24576:24698 */\n swap1\n pop\n /* \"#utility.yul\":24708:24780 */\n tag_411\n /* \"#utility.yul\":24776:24778 */\n 0x20\n /* \"#utility.yul\":24765:24774 */\n dup4\n /* \"#utility.yul\":24761:24779 */\n add\n /* \"#utility.yul\":24752:24758 */\n dup8\n /* \"#utility.yul\":24708:24780 */\n tag_136\n jump\t// in\n tag_411:\n /* \"#utility.yul\":24790:24862 */\n tag_412\n /* \"#utility.yul\":24858:24860 */\n 0x40\n /* \"#utility.yul\":24847:24856 */\n dup4\n /* \"#utility.yul\":24843:24861 */\n add\n /* \"#utility.yul\":24834:24840 */\n dup7\n /* \"#utility.yul\":24790:24862 */\n tag_136\n jump\t// in\n tag_412:\n /* \"#utility.yul\":24909:24918 */\n dup2\n /* \"#utility.yul\":24903:24907 */\n dup2\n /* \"#utility.yul\":24899:24919 */\n sub\n /* \"#utility.yul\":24894:24896 */\n 0x60\n /* \"#utility.yul\":24883:24892 */\n dup4\n /* \"#utility.yul\":24879:24897 */\n add\n /* \"#utility.yul\":24872:24920 */\n mstore\n /* \"#utility.yul\":24937:25051 */\n tag_413\n /* \"#utility.yul\":25046:25050 */\n dup2\n /* \"#utility.yul\":25037:25043 */\n dup6\n /* \"#utility.yul\":24937:25051 */\n tag_135\n jump\t// in\n tag_413:\n /* \"#utility.yul\":24929:25051 */\n swap1\n pop\n /* \"#utility.yul\":25061:25132 */\n tag_414\n /* \"#utility.yul\":25127:25130 */\n 0x80\n /* \"#utility.yul\":25116:25125 */\n dup4\n /* \"#utility.yul\":25112:25131 */\n add\n /* \"#utility.yul\":25103:25109 */\n dup5\n /* \"#utility.yul\":25061:25132 */\n tag_137\n jump\t// in\n tag_414:\n /* \"#utility.yul\":24153:25139 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25145:25283 */\n tag_138:\n /* \"#utility.yul\":25236:25242 */\n 0x00\n /* \"#utility.yul\":25270:25275 */\n dup2\n /* \"#utility.yul\":25264:25276 */\n mload\n /* \"#utility.yul\":25254:25276 */\n swap1\n pop\n /* \"#utility.yul\":25145:25283 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":25289:25497 */\n tag_139:\n /* \"#utility.yul\":25412:25423 */\n 0x00\n /* \"#utility.yul\":25446:25452 */\n dup3\n /* \"#utility.yul\":25441:25444 */\n dup3\n /* \"#utility.yul\":25434:25453 */\n mstore\n /* \"#utility.yul\":25486:25490 */\n 0x20\n /* \"#utility.yul\":25481:25484 */\n dup3\n /* \"#utility.yul\":25477:25491 */\n add\n /* \"#utility.yul\":25462:25491 */\n swap1\n pop\n /* \"#utility.yul\":25289:25497 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25503:25659 */\n tag_140:\n /* \"#utility.yul\":25594:25598 */\n 0x00\n /* \"#utility.yul\":25617:25620 */\n dup2\n /* \"#utility.yul\":25609:25620 */\n swap1\n pop\n /* \"#utility.yul\":25647:25651 */\n 0x20\n /* \"#utility.yul\":25642:25645 */\n dup3\n /* \"#utility.yul\":25638:25652 */\n add\n /* \"#utility.yul\":25630:25652 */\n swap1\n pop\n /* \"#utility.yul\":25503:25659 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":25665:25773 */\n tag_141:\n /* \"#utility.yul\":25742:25766 */\n tag_419\n /* \"#utility.yul\":25760:25765 */\n dup2\n /* \"#utility.yul\":25742:25766 */\n tag_106\n jump\t// in\n tag_419:\n /* \"#utility.yul\":25737:25740 */\n dup3\n /* \"#utility.yul\":25730:25767 */\n mstore\n /* \"#utility.yul\":25665:25773 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25779:25887 */\n tag_142:\n /* \"#utility.yul\":25856:25880 */\n tag_421\n /* \"#utility.yul\":25874:25879 */\n dup2\n /* \"#utility.yul\":25856:25880 */\n tag_98\n jump\t// in\n tag_421:\n /* \"#utility.yul\":25851:25854 */\n dup3\n /* \"#utility.yul\":25844:25881 */\n mstore\n /* \"#utility.yul\":25779:25887 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25951:26460 */\n tag_143:\n /* \"#utility.yul\":26086:26090 */\n 0x40\n /* \"#utility.yul\":26081:26084 */\n dup3\n /* \"#utility.yul\":26077:26091 */\n add\n /* \"#utility.yul\":26185:26189 */\n 0x00\n /* \"#utility.yul\":26178:26183 */\n dup3\n /* \"#utility.yul\":26174:26190 */\n add\n /* \"#utility.yul\":26168:26191 */\n mload\n /* \"#utility.yul\":26204:26267 */\n tag_423\n /* \"#utility.yul\":26261:26265 */\n 0x00\n /* \"#utility.yul\":26256:26259 */\n dup6\n /* \"#utility.yul\":26252:26266 */\n add\n /* \"#utility.yul\":26238:26250 */\n dup3\n /* \"#utility.yul\":26204:26267 */\n tag_141\n jump\t// in\n tag_423:\n /* \"#utility.yul\":26101:26277 */\n pop\n /* \"#utility.yul\":26361:26365 */\n 0x20\n /* \"#utility.yul\":26354:26359 */\n dup3\n /* \"#utility.yul\":26350:26366 */\n add\n /* \"#utility.yul\":26344:26367 */\n mload\n /* \"#utility.yul\":26380:26443 */\n tag_424\n /* \"#utility.yul\":26437:26441 */\n 0x20\n /* \"#utility.yul\":26432:26435 */\n dup6\n /* \"#utility.yul\":26428:26442 */\n add\n /* \"#utility.yul\":26414:26426 */\n dup3\n /* \"#utility.yul\":26380:26443 */\n tag_142\n jump\t// in\n tag_424:\n /* \"#utility.yul\":26287:26453 */\n pop\n /* \"#utility.yul\":26055:26460 */\n pop\n /* \"#utility.yul\":25951:26460 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":26466:26741 */\n tag_144:\n /* \"#utility.yul\":26583:26593 */\n 0x00\n /* \"#utility.yul\":26604:26698 */\n tag_426\n /* \"#utility.yul\":26694:26697 */\n dup4\n /* \"#utility.yul\":26686:26692 */\n dup4\n /* \"#utility.yul\":26604:26698 */\n tag_143\n jump\t// in\n tag_426:\n /* \"#utility.yul\":26730:26734 */\n 0x40\n /* \"#utility.yul\":26725:26728 */\n dup4\n /* \"#utility.yul\":26721:26735 */\n add\n /* \"#utility.yul\":26707:26735 */\n swap1\n pop\n /* \"#utility.yul\":26466:26741 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":26747:26884 */\n tag_145:\n /* \"#utility.yul\":26841:26845 */\n 0x00\n /* \"#utility.yul\":26873:26877 */\n 0x20\n /* \"#utility.yul\":26868:26871 */\n dup3\n /* \"#utility.yul\":26864:26878 */\n add\n /* \"#utility.yul\":26856:26878 */\n swap1\n pop\n /* \"#utility.yul\":26747:26884 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":26952:27876 */\n tag_146:\n /* \"#utility.yul\":27119:27122 */\n 0x00\n /* \"#utility.yul\":27148:27226 */\n tag_429\n /* \"#utility.yul\":27220:27225 */\n dup3\n /* \"#utility.yul\":27148:27226 */\n tag_138\n jump\t// in\n tag_429:\n /* \"#utility.yul\":27242:27352 */\n tag_430\n /* \"#utility.yul\":27345:27351 */\n dup2\n /* \"#utility.yul\":27340:27343 */\n dup6\n /* \"#utility.yul\":27242:27352 */\n tag_139\n jump\t// in\n tag_430:\n /* \"#utility.yul\":27235:27352 */\n swap4\n pop\n /* \"#utility.yul\":27376:27456 */\n tag_431\n /* \"#utility.yul\":27450:27455 */\n dup4\n /* \"#utility.yul\":27376:27456 */\n tag_140\n jump\t// in\n tag_431:\n /* \"#utility.yul\":27479:27486 */\n dup1\n /* \"#utility.yul\":27510:27511 */\n 0x00\n /* \"#utility.yul\":27495:27851 */\n tag_432:\n /* \"#utility.yul\":27520:27526 */\n dup4\n /* \"#utility.yul\":27517:27518 */\n dup2\n /* \"#utility.yul\":27514:27527 */\n lt\n /* \"#utility.yul\":27495:27851 */\n iszero\n tag_434\n jumpi\n /* \"#utility.yul\":27596:27602 */\n dup2\n /* \"#utility.yul\":27590:27603 */\n mload\n /* \"#utility.yul\":27623:27734 */\n tag_435\n /* \"#utility.yul\":27730:27733 */\n dup9\n /* \"#utility.yul\":27715:27728 */\n dup3\n /* \"#utility.yul\":27623:27734 */\n tag_144\n jump\t// in\n tag_435:\n /* \"#utility.yul\":27616:27734 */\n swap8\n pop\n /* \"#utility.yul\":27757:27841 */\n tag_436\n /* \"#utility.yul\":27834:27840 */\n dup4\n /* \"#utility.yul\":27757:27841 */\n tag_145\n jump\t// in\n tag_436:\n /* \"#utility.yul\":27747:27841 */\n swap3\n pop\n /* \"#utility.yul\":27555:27851 */\n pop\n /* \"#utility.yul\":27542:27543 */\n 0x01\n /* \"#utility.yul\":27539:27540 */\n dup2\n /* \"#utility.yul\":27535:27544 */\n add\n /* \"#utility.yul\":27530:27544 */\n swap1\n pop\n /* \"#utility.yul\":27495:27851 */\n jump(tag_432)\n tag_434:\n /* \"#utility.yul\":27499:27513 */\n pop\n /* \"#utility.yul\":27867:27870 */\n dup6\n /* \"#utility.yul\":27860:27870 */\n swap4\n pop\n /* \"#utility.yul\":27124:27876 */\n pop\n pop\n pop\n /* \"#utility.yul\":26952:27876 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":27882:27997 */\n tag_147:\n /* \"#utility.yul\":27967:27990 */\n tag_438\n /* \"#utility.yul\":27984:27989 */\n dup2\n /* \"#utility.yul\":27967:27990 */\n tag_112\n jump\t// in\n tag_438:\n /* \"#utility.yul\":27962:27965 */\n dup3\n /* \"#utility.yul\":27955:27991 */\n mstore\n /* \"#utility.yul\":27882:27997 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":28003:28958 */\n tag_47:\n /* \"#utility.yul\":28330:28334 */\n 0x00\n /* \"#utility.yul\":28368:28371 */\n 0x80\n /* \"#utility.yul\":28357:28366 */\n dup3\n /* \"#utility.yul\":28353:28372 */\n add\n /* \"#utility.yul\":28345:28372 */\n swap1\n pop\n /* \"#utility.yul\":28418:28427 */\n dup2\n /* \"#utility.yul\":28412:28416 */\n dup2\n /* \"#utility.yul\":28408:28428 */\n sub\n /* \"#utility.yul\":28404:28405 */\n 0x00\n /* \"#utility.yul\":28393:28402 */\n dup4\n /* \"#utility.yul\":28389:28406 */\n add\n /* \"#utility.yul\":28382:28429 */\n mstore\n /* \"#utility.yul\":28446:28602 */\n tag_440\n /* \"#utility.yul\":28597:28601 */\n dup2\n /* \"#utility.yul\":28588:28594 */\n dup8\n /* \"#utility.yul\":28446:28602 */\n tag_146\n jump\t// in\n tag_440:\n /* \"#utility.yul\":28438:28602 */\n swap1\n pop\n /* \"#utility.yul\":28612:28682 */\n tag_441\n /* \"#utility.yul\":28678:28680 */\n 0x20\n /* \"#utility.yul\":28667:28676 */\n dup4\n /* \"#utility.yul\":28663:28681 */\n add\n /* \"#utility.yul\":28654:28660 */\n dup7\n /* \"#utility.yul\":28612:28682 */\n tag_147\n jump\t// in\n tag_441:\n /* \"#utility.yul\":28729:28738 */\n dup2\n /* \"#utility.yul\":28723:28727 */\n dup2\n /* \"#utility.yul\":28719:28739 */\n sub\n /* \"#utility.yul\":28714:28716 */\n 0x40\n /* \"#utility.yul\":28703:28712 */\n dup4\n /* \"#utility.yul\":28699:28717 */\n add\n /* \"#utility.yul\":28692:28740 */\n mstore\n /* \"#utility.yul\":28757:28871 */\n tag_442\n /* \"#utility.yul\":28866:28870 */\n dup2\n /* \"#utility.yul\":28857:28863 */\n dup6\n /* \"#utility.yul\":28757:28871 */\n tag_135\n jump\t// in\n tag_442:\n /* \"#utility.yul\":28749:28871 */\n swap1\n pop\n /* \"#utility.yul\":28881:28951 */\n tag_443\n /* \"#utility.yul\":28947:28949 */\n 0x60\n /* \"#utility.yul\":28936:28945 */\n dup4\n /* \"#utility.yul\":28932:28950 */\n add\n /* \"#utility.yul\":28923:28929 */\n dup5\n /* \"#utility.yul\":28881:28951 */\n tag_137\n jump\t// in\n tag_443:\n /* \"#utility.yul\":28003:28958 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":28964:29082 */\n tag_148:\n /* \"#utility.yul\":29051:29075 */\n tag_445\n /* \"#utility.yul\":29069:29074 */\n dup2\n /* \"#utility.yul\":29051:29075 */\n tag_106\n jump\t// in\n tag_445:\n /* \"#utility.yul\":29046:29049 */\n dup3\n /* \"#utility.yul\":29039:29076 */\n mstore\n /* \"#utility.yul\":28964:29082 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":29088:29911 */\n tag_53:\n /* \"#utility.yul\":29347:29351 */\n 0x00\n /* \"#utility.yul\":29385:29388 */\n 0xa0\n /* \"#utility.yul\":29374:29383 */\n dup3\n /* \"#utility.yul\":29370:29389 */\n add\n /* \"#utility.yul\":29362:29389 */\n swap1\n pop\n /* \"#utility.yul\":29399:29470 */\n tag_447\n /* \"#utility.yul\":29467:29468 */\n 0x00\n /* \"#utility.yul\":29456:29465 */\n dup4\n /* \"#utility.yul\":29452:29469 */\n add\n /* \"#utility.yul\":29443:29449 */\n dup9\n /* \"#utility.yul\":29399:29470 */\n tag_148\n jump\t// in\n tag_447:\n /* \"#utility.yul\":29480:29552 */\n tag_448\n /* \"#utility.yul\":29548:29550 */\n 0x20\n /* \"#utility.yul\":29537:29546 */\n dup4\n /* \"#utility.yul\":29533:29551 */\n add\n /* \"#utility.yul\":29524:29530 */\n dup8\n /* \"#utility.yul\":29480:29552 */\n tag_136\n jump\t// in\n tag_448:\n /* \"#utility.yul\":29562:29634 */\n tag_449\n /* \"#utility.yul\":29630:29632 */\n 0x40\n /* \"#utility.yul\":29619:29628 */\n dup4\n /* \"#utility.yul\":29615:29633 */\n add\n /* \"#utility.yul\":29606:29612 */\n dup7\n /* \"#utility.yul\":29562:29634 */\n tag_136\n jump\t// in\n tag_449:\n /* \"#utility.yul\":29681:29690 */\n dup2\n /* \"#utility.yul\":29675:29679 */\n dup2\n /* \"#utility.yul\":29671:29691 */\n sub\n /* \"#utility.yul\":29666:29668 */\n 0x60\n /* \"#utility.yul\":29655:29664 */\n dup4\n /* \"#utility.yul\":29651:29669 */\n add\n /* \"#utility.yul\":29644:29692 */\n mstore\n /* \"#utility.yul\":29709:29823 */\n tag_450\n /* \"#utility.yul\":29818:29822 */\n dup2\n /* \"#utility.yul\":29809:29815 */\n dup6\n /* \"#utility.yul\":29709:29823 */\n tag_135\n jump\t// in\n tag_450:\n /* \"#utility.yul\":29701:29823 */\n swap1\n pop\n /* \"#utility.yul\":29833:29904 */\n tag_451\n /* \"#utility.yul\":29899:29902 */\n 0x80\n /* \"#utility.yul\":29888:29897 */\n dup4\n /* \"#utility.yul\":29884:29903 */\n add\n /* \"#utility.yul\":29875:29881 */\n dup5\n /* \"#utility.yul\":29833:29904 */\n tag_137\n jump\t// in\n tag_451:\n /* \"#utility.yul\":29088:29911 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":29917:30792 */\n tag_59:\n /* \"#utility.yul\":30204:30208 */\n 0x00\n /* \"#utility.yul\":30242:30245 */\n 0x80\n /* \"#utility.yul\":30231:30240 */\n dup3\n /* \"#utility.yul\":30227:30246 */\n add\n /* \"#utility.yul\":30219:30246 */\n swap1\n pop\n /* \"#utility.yul\":30292:30301 */\n dup2\n /* \"#utility.yul\":30286:30290 */\n dup2\n /* \"#utility.yul\":30282:30302 */\n sub\n /* \"#utility.yul\":30278:30279 */\n 0x00\n /* \"#utility.yul\":30267:30276 */\n dup4\n /* \"#utility.yul\":30263:30280 */\n add\n /* \"#utility.yul\":30256:30303 */\n mstore\n /* \"#utility.yul\":30320:30434 */\n tag_453\n /* \"#utility.yul\":30429:30433 */\n dup2\n /* \"#utility.yul\":30420:30426 */\n dup8\n /* \"#utility.yul\":30320:30434 */\n tag_135\n jump\t// in\n tag_453:\n /* \"#utility.yul\":30312:30434 */\n swap1\n pop\n /* \"#utility.yul\":30444:30516 */\n tag_454\n /* \"#utility.yul\":30512:30514 */\n 0x20\n /* \"#utility.yul\":30501:30510 */\n dup4\n /* \"#utility.yul\":30497:30515 */\n add\n /* \"#utility.yul\":30488:30494 */\n dup7\n /* \"#utility.yul\":30444:30516 */\n tag_136\n jump\t// in\n tag_454:\n /* \"#utility.yul\":30563:30572 */\n dup2\n /* \"#utility.yul\":30557:30561 */\n dup2\n /* \"#utility.yul\":30553:30573 */\n sub\n /* \"#utility.yul\":30548:30550 */\n 0x40\n /* \"#utility.yul\":30537:30546 */\n dup4\n /* \"#utility.yul\":30533:30551 */\n add\n /* \"#utility.yul\":30526:30574 */\n mstore\n /* \"#utility.yul\":30591:30705 */\n tag_455\n /* \"#utility.yul\":30700:30704 */\n dup2\n /* \"#utility.yul\":30691:30697 */\n dup6\n /* \"#utility.yul\":30591:30705 */\n tag_135\n jump\t// in\n tag_455:\n /* \"#utility.yul\":30583:30705 */\n swap1\n pop\n /* \"#utility.yul\":30715:30785 */\n tag_456\n /* \"#utility.yul\":30781:30783 */\n 0x60\n /* \"#utility.yul\":30770:30779 */\n dup4\n /* \"#utility.yul\":30766:30784 */\n add\n /* \"#utility.yul\":30757:30763 */\n dup5\n /* \"#utility.yul\":30715:30785 */\n tag_137\n jump\t// in\n tag_456:\n /* \"#utility.yul\":29917:30792 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":30798:31510 */\n tag_65:\n /* \"#utility.yul\":31029:31033 */\n 0x00\n /* \"#utility.yul\":31067:31070 */\n 0x80\n /* \"#utility.yul\":31056:31065 */\n dup3\n /* \"#utility.yul\":31052:31071 */\n add\n /* \"#utility.yul\":31044:31071 */\n swap1\n pop\n /* \"#utility.yul\":31081:31152 */\n tag_458\n /* \"#utility.yul\":31149:31150 */\n 0x00\n /* \"#utility.yul\":31138:31147 */\n dup4\n /* \"#utility.yul\":31134:31151 */\n add\n /* \"#utility.yul\":31125:31131 */\n dup8\n /* \"#utility.yul\":31081:31152 */\n tag_148\n jump\t// in\n tag_458:\n /* \"#utility.yul\":31162:31234 */\n tag_459\n /* \"#utility.yul\":31230:31232 */\n 0x20\n /* \"#utility.yul\":31219:31228 */\n dup4\n /* \"#utility.yul\":31215:31233 */\n add\n /* \"#utility.yul\":31206:31212 */\n dup7\n /* \"#utility.yul\":31162:31234 */\n tag_136\n jump\t// in\n tag_459:\n /* \"#utility.yul\":31281:31290 */\n dup2\n /* \"#utility.yul\":31275:31279 */\n dup2\n /* \"#utility.yul\":31271:31291 */\n sub\n /* \"#utility.yul\":31266:31268 */\n 0x40\n /* \"#utility.yul\":31255:31264 */\n dup4\n /* \"#utility.yul\":31251:31269 */\n add\n /* \"#utility.yul\":31244:31292 */\n mstore\n /* \"#utility.yul\":31309:31423 */\n tag_460\n /* \"#utility.yul\":31418:31422 */\n dup2\n /* \"#utility.yul\":31409:31415 */\n dup6\n /* \"#utility.yul\":31309:31423 */\n tag_135\n jump\t// in\n tag_460:\n /* \"#utility.yul\":31301:31423 */\n swap1\n pop\n /* \"#utility.yul\":31433:31503 */\n tag_461\n /* \"#utility.yul\":31499:31501 */\n 0x60\n /* \"#utility.yul\":31488:31497 */\n dup4\n /* \"#utility.yul\":31484:31502 */\n add\n /* \"#utility.yul\":31475:31481 */\n dup5\n /* \"#utility.yul\":31433:31503 */\n tag_137\n jump\t// in\n tag_461:\n /* \"#utility.yul\":30798:31510 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":31516:31656 */\n tag_149:\n /* \"#utility.yul\":31609:31615 */\n 0x00\n /* \"#utility.yul\":31643:31648 */\n dup2\n /* \"#utility.yul\":31637:31649 */\n mload\n /* \"#utility.yul\":31627:31649 */\n swap1\n pop\n /* \"#utility.yul\":31516:31656 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":31662:31872 */\n tag_150:\n /* \"#utility.yul\":31787:31798 */\n 0x00\n /* \"#utility.yul\":31821:31827 */\n dup3\n /* \"#utility.yul\":31816:31819 */\n dup3\n /* \"#utility.yul\":31809:31828 */\n mstore\n /* \"#utility.yul\":31861:31865 */\n 0x20\n /* \"#utility.yul\":31856:31859 */\n dup3\n /* \"#utility.yul\":31852:31866 */\n add\n /* \"#utility.yul\":31837:31866 */\n swap1\n pop\n /* \"#utility.yul\":31662:31872 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":31878:32036 */\n tag_151:\n /* \"#utility.yul\":31971:31975 */\n 0x00\n /* \"#utility.yul\":31994:31997 */\n dup2\n /* \"#utility.yul\":31986:31997 */\n swap1\n pop\n /* \"#utility.yul\":32024:32028 */\n 0x20\n /* \"#utility.yul\":32019:32022 */\n dup3\n /* \"#utility.yul\":32015:32029 */\n add\n /* \"#utility.yul\":32007:32029 */\n swap1\n pop\n /* \"#utility.yul\":31878:32036 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":32110:32763 */\n tag_152:\n /* \"#utility.yul\":32225:32228 */\n 0x00\n /* \"#utility.yul\":32261:32265 */\n 0x40\n /* \"#utility.yul\":32256:32259 */\n dup4\n /* \"#utility.yul\":32252:32266 */\n add\n /* \"#utility.yul\":32351:32355 */\n 0x00\n /* \"#utility.yul\":32344:32349 */\n dup4\n /* \"#utility.yul\":32340:32356 */\n add\n /* \"#utility.yul\":32334:32357 */\n mload\n /* \"#utility.yul\":32370:32429 */\n tag_466\n /* \"#utility.yul\":32423:32427 */\n 0x00\n /* \"#utility.yul\":32418:32421 */\n dup7\n /* \"#utility.yul\":32414:32428 */\n add\n /* \"#utility.yul\":32400:32412 */\n dup3\n /* \"#utility.yul\":32370:32429 */\n tag_124\n jump\t// in\n tag_466:\n /* \"#utility.yul\":32276:32439 */\n pop\n /* \"#utility.yul\":32525:32529 */\n 0x20\n /* \"#utility.yul\":32518:32523 */\n dup4\n /* \"#utility.yul\":32514:32530 */\n add\n /* \"#utility.yul\":32508:32531 */\n mload\n /* \"#utility.yul\":32578:32581 */\n dup5\n /* \"#utility.yul\":32572:32576 */\n dup3\n /* \"#utility.yul\":32568:32582 */\n sub\n /* \"#utility.yul\":32561:32565 */\n 0x20\n /* \"#utility.yul\":32556:32559 */\n dup7\n /* \"#utility.yul\":32552:32566 */\n add\n /* \"#utility.yul\":32545:32583 */\n mstore\n /* \"#utility.yul\":32604:32725 */\n tag_467\n /* \"#utility.yul\":32720:32724 */\n dup3\n /* \"#utility.yul\":32706:32718 */\n dup3\n /* \"#utility.yul\":32604:32725 */\n tag_134\n jump\t// in\n tag_467:\n /* \"#utility.yul\":32596:32725 */\n swap2\n pop\n /* \"#utility.yul\":32449:32736 */\n pop\n /* \"#utility.yul\":32753:32757 */\n dup1\n /* \"#utility.yul\":32746:32757 */\n swap2\n pop\n /* \"#utility.yul\":32230:32763 */\n pop\n /* \"#utility.yul\":32110:32763 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":32831:33471 */\n tag_153:\n /* \"#utility.yul\":32942:32945 */\n 0x00\n /* \"#utility.yul\":32978:32982 */\n 0x40\n /* \"#utility.yul\":32973:32976 */\n dup4\n /* \"#utility.yul\":32969:32983 */\n add\n /* \"#utility.yul\":33069:33073 */\n 0x00\n /* \"#utility.yul\":33062:33067 */\n dup4\n /* \"#utility.yul\":33058:33074 */\n add\n /* \"#utility.yul\":33052:33075 */\n mload\n /* \"#utility.yul\":33122:33125 */\n dup5\n /* \"#utility.yul\":33116:33120 */\n dup3\n /* \"#utility.yul\":33112:33126 */\n sub\n /* \"#utility.yul\":33105:33109 */\n 0x00\n /* \"#utility.yul\":33100:33103 */\n dup7\n /* \"#utility.yul\":33096:33110 */\n add\n /* \"#utility.yul\":33089:33127 */\n mstore\n /* \"#utility.yul\":33148:33257 */\n tag_469\n /* \"#utility.yul\":33252:33256 */\n dup3\n /* \"#utility.yul\":33238:33250 */\n dup3\n /* \"#utility.yul\":33148:33257 */\n tag_152\n jump\t// in\n tag_469:\n /* \"#utility.yul\":33140:33257 */\n swap2\n pop\n /* \"#utility.yul\":32993:33268 */\n pop\n /* \"#utility.yul\":33352:33356 */\n 0x20\n /* \"#utility.yul\":33345:33350 */\n dup4\n /* \"#utility.yul\":33341:33357 */\n add\n /* \"#utility.yul\":33335:33358 */\n mload\n /* \"#utility.yul\":33371:33434 */\n tag_470\n /* \"#utility.yul\":33428:33432 */\n 0x20\n /* \"#utility.yul\":33423:33426 */\n dup7\n /* \"#utility.yul\":33419:33433 */\n add\n /* \"#utility.yul\":33405:33417 */\n dup3\n /* \"#utility.yul\":33371:33434 */\n tag_142\n jump\t// in\n tag_470:\n /* \"#utility.yul\":33278:33444 */\n pop\n /* \"#utility.yul\":33461:33465 */\n dup1\n /* \"#utility.yul\":33454:33465 */\n swap2\n pop\n /* \"#utility.yul\":32947:33471 */\n pop\n /* \"#utility.yul\":32831:33471 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":33477:33737 */\n tag_154:\n /* \"#utility.yul\":33598:33608 */\n 0x00\n /* \"#utility.yul\":33633:33731 */\n tag_472\n /* \"#utility.yul\":33727:33730 */\n dup4\n /* \"#utility.yul\":33719:33725 */\n dup4\n /* \"#utility.yul\":33633:33731 */\n tag_153\n jump\t// in\n tag_472:\n /* \"#utility.yul\":33619:33731 */\n swap1\n pop\n /* \"#utility.yul\":33477:33737 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":33743:33882 */\n tag_155:\n /* \"#utility.yul\":33839:33843 */\n 0x00\n /* \"#utility.yul\":33871:33875 */\n 0x20\n /* \"#utility.yul\":33866:33869 */\n dup3\n /* \"#utility.yul\":33862:33876 */\n add\n /* \"#utility.yul\":33854:33876 */\n swap1\n pop\n /* \"#utility.yul\":33743:33882 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":33954:35073 */\n tag_156:\n /* \"#utility.yul\":34125:34128 */\n 0x00\n /* \"#utility.yul\":34154:34234 */\n tag_475\n /* \"#utility.yul\":34228:34233 */\n dup3\n /* \"#utility.yul\":34154:34234 */\n tag_149\n jump\t// in\n tag_475:\n /* \"#utility.yul\":34250:34362 */\n tag_476\n /* \"#utility.yul\":34355:34361 */\n dup2\n /* \"#utility.yul\":34350:34353 */\n dup6\n /* \"#utility.yul\":34250:34362 */\n tag_150\n jump\t// in\n tag_476:\n /* \"#utility.yul\":34243:34362 */\n swap4\n pop\n /* \"#utility.yul\":34388:34391 */\n dup4\n /* \"#utility.yul\":34433:34437 */\n 0x20\n /* \"#utility.yul\":34425:34431 */\n dup3\n /* \"#utility.yul\":34421:34438 */\n mul\n /* \"#utility.yul\":34416:34419 */\n dup6\n /* \"#utility.yul\":34412:34439 */\n add\n /* \"#utility.yul\":34463:34545 */\n tag_477\n /* \"#utility.yul\":34539:34544 */\n dup6\n /* \"#utility.yul\":34463:34545 */\n tag_151\n jump\t// in\n tag_477:\n /* \"#utility.yul\":34568:34575 */\n dup1\n /* \"#utility.yul\":34599:34600 */\n 0x00\n /* \"#utility.yul\":34584:35028 */\n tag_478:\n /* \"#utility.yul\":34609:34615 */\n dup6\n /* \"#utility.yul\":34606:34607 */\n dup2\n /* \"#utility.yul\":34603:34616 */\n lt\n /* \"#utility.yul\":34584:35028 */\n iszero\n tag_480\n jumpi\n /* \"#utility.yul\":34680:34689 */\n dup5\n /* \"#utility.yul\":34674:34678 */\n dup5\n /* \"#utility.yul\":34670:34690 */\n sub\n /* \"#utility.yul\":34665:34668 */\n dup10\n /* \"#utility.yul\":34658:34691 */\n mstore\n /* \"#utility.yul\":34731:34737 */\n dup2\n /* \"#utility.yul\":34725:34738 */\n mload\n /* \"#utility.yul\":34759:34875 */\n tag_481\n /* \"#utility.yul\":34870:34874 */\n dup6\n /* \"#utility.yul\":34855:34868 */\n dup3\n /* \"#utility.yul\":34759:34875 */\n tag_154\n jump\t// in\n tag_481:\n /* \"#utility.yul\":34751:34875 */\n swap5\n pop\n /* \"#utility.yul\":34898:34984 */\n tag_482\n /* \"#utility.yul\":34977:34983 */\n dup4\n /* \"#utility.yul\":34898:34984 */\n tag_155\n jump\t// in\n tag_482:\n /* \"#utility.yul\":34888:34984 */\n swap3\n pop\n /* \"#utility.yul\":35013:35017 */\n 0x20\n /* \"#utility.yul\":35008:35011 */\n dup11\n /* \"#utility.yul\":35004:35018 */\n add\n /* \"#utility.yul\":34997:35018 */\n swap10\n pop\n /* \"#utility.yul\":34644:35028 */\n pop\n /* \"#utility.yul\":34631:34632 */\n 0x01\n /* \"#utility.yul\":34628:34629 */\n dup2\n /* \"#utility.yul\":34624:34633 */\n add\n /* \"#utility.yul\":34619:34633 */\n swap1\n pop\n /* \"#utility.yul\":34584:35028 */\n jump(tag_478)\n tag_480:\n /* \"#utility.yul\":34588:34602 */\n pop\n /* \"#utility.yul\":35044:35048 */\n dup3\n /* \"#utility.yul\":35037:35048 */\n swap8\n pop\n /* \"#utility.yul\":35064:35067 */\n dup8\n /* \"#utility.yul\":35057:35067 */\n swap6\n pop\n /* \"#utility.yul\":34130:35073 */\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":33954:35073 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":35079:36042 */\n tag_71:\n /* \"#utility.yul\":35410:35414 */\n 0x00\n /* \"#utility.yul\":35448:35451 */\n 0x80\n /* \"#utility.yul\":35437:35446 */\n dup3\n /* \"#utility.yul\":35433:35452 */\n add\n /* \"#utility.yul\":35425:35452 */\n swap1\n pop\n /* \"#utility.yul\":35498:35507 */\n dup2\n /* \"#utility.yul\":35492:35496 */\n dup2\n /* \"#utility.yul\":35488:35508 */\n sub\n /* \"#utility.yul\":35484:35485 */\n 0x00\n /* \"#utility.yul\":35473:35482 */\n dup4\n /* \"#utility.yul\":35469:35486 */\n add\n /* \"#utility.yul\":35462:35509 */\n mstore\n /* \"#utility.yul\":35526:35686 */\n tag_484\n /* \"#utility.yul\":35681:35685 */\n dup2\n /* \"#utility.yul\":35672:35678 */\n dup8\n /* \"#utility.yul\":35526:35686 */\n tag_156\n jump\t// in\n tag_484:\n /* \"#utility.yul\":35518:35686 */\n swap1\n pop\n /* \"#utility.yul\":35696:35766 */\n tag_485\n /* \"#utility.yul\":35762:35764 */\n 0x20\n /* \"#utility.yul\":35751:35760 */\n dup4\n /* \"#utility.yul\":35747:35765 */\n add\n /* \"#utility.yul\":35738:35744 */\n dup7\n /* \"#utility.yul\":35696:35766 */\n tag_147\n jump\t// in\n tag_485:\n /* \"#utility.yul\":35813:35822 */\n dup2\n /* \"#utility.yul\":35807:35811 */\n dup2\n /* \"#utility.yul\":35803:35823 */\n sub\n /* \"#utility.yul\":35798:35800 */\n 0x40\n /* \"#utility.yul\":35787:35796 */\n dup4\n /* \"#utility.yul\":35783:35801 */\n add\n /* \"#utility.yul\":35776:35824 */\n mstore\n /* \"#utility.yul\":35841:35955 */\n tag_486\n /* \"#utility.yul\":35950:35954 */\n dup2\n /* \"#utility.yul\":35941:35947 */\n dup6\n /* \"#utility.yul\":35841:35955 */\n tag_135\n jump\t// in\n tag_486:\n /* \"#utility.yul\":35833:35955 */\n swap1\n pop\n /* \"#utility.yul\":35965:36035 */\n tag_487\n /* \"#utility.yul\":36031:36033 */\n 0x60\n /* \"#utility.yul\":36020:36029 */\n dup4\n /* \"#utility.yul\":36016:36034 */\n add\n /* \"#utility.yul\":36007:36013 */\n dup5\n /* \"#utility.yul\":35965:36035 */\n tag_137\n jump\t// in\n tag_487:\n /* \"#utility.yul\":35079:36042 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122032dfb9c750567e10ba5fcf6b460f97ca764c58029ec0ed48d16954288648a94764736f6c634300080b0033\n}\n", + "assembly": " /* \"main.sol\":119:2184 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n /* \"main.sol\":264:306 0x0000000000000000000000000000000000000804 */\n 0x0804\n /* \"main.sol\":223:307 Xtokens public xtokens =... */\n 0x00\n dup1\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"main.sol\":119:2184 contract XtokensInstance is Xtokens {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"main.sol\":119:2184 contract XtokensInstance is Xtokens {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0xaf3dcee8\n gt\n tag_10\n jumpi\n dup1\n 0xaf3dcee8\n eq\n tag_6\n jumpi\n dup1\n 0xb38c60fa\n eq\n tag_7\n jumpi\n dup1\n 0xb9f813ff\n eq\n tag_8\n jumpi\n dup1\n 0xdab20fdc\n eq\n tag_9\n jumpi\n jump(tag_2)\n tag_10:\n dup1\n 0x89a570fc\n eq\n tag_3\n jumpi\n dup1\n 0x8a362d5c\n eq\n tag_4\n jumpi\n dup1\n 0x94f69115\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"main.sol\":1194:1566 function transfer_multiasset_with_fee(... */\n tag_3:\n tag_11\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_12\n swap2\n swap1\n tag_13\n jump\t// in\n tag_12:\n tag_14\n jump\t// in\n tag_11:\n stop\n /* \"main.sol\":1572:1910 function transfer_multi_currencies(... */\n tag_4:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n stop\n /* \"main.sol\":565:924 function transfer_with_fee(... */\n tag_5:\n tag_19\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_20\n swap2\n swap1\n tag_21\n jump\t// in\n tag_20:\n tag_22\n jump\t// in\n tag_19:\n stop\n /* \"main.sol\":223:307 Xtokens public xtokens =... */\n tag_6:\n tag_23\n tag_24\n jump\t// in\n tag_23:\n mload(0x40)\n tag_25\n swap2\n swap1\n tag_26\n jump\t// in\n tag_25:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"main.sol\":930:1188 function transfer_multiasset(... */\n tag_7:\n tag_27\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_28\n swap2\n swap1\n tag_29\n jump\t// in\n tag_28:\n tag_30\n jump\t// in\n tag_27:\n stop\n /* \"main.sol\":314:559 function transfer(... */\n tag_8:\n tag_31\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_32\n swap2\n swap1\n tag_33\n jump\t// in\n tag_32:\n tag_34\n jump\t// in\n tag_31:\n stop\n /* \"main.sol\":1916:2182 function transfer_multi_assets(... */\n tag_9:\n tag_35\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_36\n swap2\n swap1\n tag_37\n jump\t// in\n tag_36:\n tag_38\n jump\t// in\n tag_35:\n stop\n /* \"main.sol\":1194:1566 function transfer_multiasset_with_fee(... */\n tag_14:\n /* \"main.sol\":1412:1419 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1412:1448 xtokens.transfer_multiasset_with_fee */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x89a570fc\n /* \"main.sol\":1462:1467 asset */\n dup7\n /* \"main.sol\":1481:1487 amount */\n dup7\n /* \"main.sol\":1501:1504 fee */\n dup7\n /* \"main.sol\":1518:1529 destination */\n dup7\n /* \"main.sol\":1543:1549 weight */\n dup7\n /* \"main.sol\":1412:1559 xtokens.transfer_multiasset_with_fee(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_40\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_41\n jump\t// in\n tag_40:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_42\n jumpi\n 0x00\n dup1\n revert\n tag_42:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_44\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_44:\n pop\n pop\n pop\n pop\n /* \"main.sol\":1194:1566 function transfer_multiasset_with_fee(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":1572:1910 function transfer_multi_currencies(... */\n tag_18:\n /* \"main.sol\":1769:1776 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1769:1802 xtokens.transfer_multi_currencies */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x8a362d5c\n /* \"main.sol\":1816:1826 currencies */\n dup6\n /* \"main.sol\":1840:1848 fee_item */\n dup6\n /* \"main.sol\":1862:1873 destination */\n dup6\n /* \"main.sol\":1887:1893 weight */\n dup6\n /* \"main.sol\":1769:1903 xtokens.transfer_multi_currencies(... */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_46\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_48\n jumpi\n 0x00\n dup1\n revert\n tag_48:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_50\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_50:\n pop\n pop\n pop\n pop\n /* \"main.sol\":1572:1910 function transfer_multi_currencies(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":565:924 function transfer_with_fee(... */\n tag_22:\n /* \"main.sol\":770:777 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":770:795 xtokens.transfer_with_fee */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x94f69115\n /* \"main.sol\":809:825 currency_address */\n dup7\n /* \"main.sol\":839:845 amount */\n dup7\n /* \"main.sol\":859:862 fee */\n dup7\n /* \"main.sol\":876:887 destination */\n dup7\n /* \"main.sol\":901:907 weight */\n dup7\n /* \"main.sol\":770:917 xtokens.transfer_with_fee(... */\n mload(0x40)\n dup7\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_52\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_53\n jump\t// in\n tag_52:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_54\n jumpi\n 0x00\n dup1\n revert\n tag_54:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_56\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_56:\n pop\n pop\n pop\n pop\n /* \"main.sol\":565:924 function transfer_with_fee(... */\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":223:307 Xtokens public xtokens =... */\n tag_24:\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n jump\t// out\n /* \"main.sol\":930:1188 function transfer_multiasset(... */\n tag_30:\n /* \"main.sol\":1118:1125 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":1118:1145 xtokens.transfer_multiasset */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xb38c60fa\n /* \"main.sol\":1146:1151 asset */\n dup6\n /* \"main.sol\":1153:1159 amount */\n dup6\n /* \"main.sol\":1161:1172 destination */\n dup6\n /* \"main.sol\":1174:1180 weight */\n dup6\n /* \"main.sol\":1118:1181 xtokens.transfer_multiasset(asset, amount, destination, weight) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_58\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_59\n jump\t// in\n tag_58:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_60\n jumpi\n 0x00\n dup1\n revert\n tag_60:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_62\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_62:\n pop\n pop\n pop\n pop\n /* \"main.sol\":930:1188 function transfer_multiasset(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":314:559 function transfer(... */\n tag_34:\n /* \"main.sol\":489:496 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":489:505 xtokens.transfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xb9f813ff\n /* \"main.sol\":506:522 currency_address */\n dup6\n /* \"main.sol\":524:530 amount */\n dup6\n /* \"main.sol\":532:543 destination */\n dup6\n /* \"main.sol\":545:551 weight */\n dup6\n /* \"main.sol\":489:552 xtokens.transfer(currency_address, amount, destination, weight) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_64\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_65\n jump\t// in\n tag_64:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_66\n jumpi\n 0x00\n dup1\n revert\n tag_66:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_68\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_68:\n pop\n pop\n pop\n pop\n /* \"main.sol\":314:559 function transfer(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"main.sol\":1916:2182 function transfer_multi_assets(... */\n tag_38:\n /* \"main.sol\":2107:2114 xtokens */\n 0x00\n dup1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"main.sol\":2107:2136 xtokens.transfer_multi_assets */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xdab20fdc\n /* \"main.sol\":2137:2143 assets */\n dup6\n /* \"main.sol\":2145:2153 fee_item */\n dup6\n /* \"main.sol\":2155:2166 destination */\n dup6\n /* \"main.sol\":2168:2174 weight */\n dup6\n /* \"main.sol\":2107:2175 xtokens.transfer_multi_assets(assets, fee_item, destination, weight) */\n mload(0x40)\n dup6\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_70\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_71\n jump\t// in\n tag_70:\n 0x00\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n dup1\n extcodesize\n iszero\n dup1\n iszero\n tag_72\n jumpi\n 0x00\n dup1\n revert\n tag_72:\n pop\n gas\n call\n iszero\n dup1\n iszero\n tag_74\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_74:\n pop\n pop\n pop\n pop\n /* \"main.sol\":1916:2182 function transfer_multi_assets(... */\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_75:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_76:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_77:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:451 */\n tag_78:\n /* \"#utility.yul\":443:444 */\n 0x00\n /* \"#utility.yul\":440:441 */\n dup1\n /* \"#utility.yul\":433:445 */\n revert\n /* \"#utility.yul\":457:559 */\n tag_79:\n /* \"#utility.yul\":498:504 */\n 0x00\n /* \"#utility.yul\":549:551 */\n 0x1f\n /* \"#utility.yul\":545:552 */\n not\n /* \"#utility.yul\":540:542 */\n 0x1f\n /* \"#utility.yul\":533:538 */\n dup4\n /* \"#utility.yul\":529:543 */\n add\n /* \"#utility.yul\":525:553 */\n and\n /* \"#utility.yul\":515:553 */\n swap1\n pop\n /* \"#utility.yul\":457:559 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":565:745 */\n tag_80:\n /* \"#utility.yul\":613:690 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":610:611 */\n 0x00\n /* \"#utility.yul\":603:691 */\n mstore\n /* \"#utility.yul\":710:714 */\n 0x41\n /* \"#utility.yul\":707:708 */\n 0x04\n /* \"#utility.yul\":700:715 */\n mstore\n /* \"#utility.yul\":734:738 */\n 0x24\n /* \"#utility.yul\":731:732 */\n 0x00\n /* \"#utility.yul\":724:739 */\n revert\n /* \"#utility.yul\":751:1032 */\n tag_81:\n /* \"#utility.yul\":834:861 */\n tag_165\n /* \"#utility.yul\":856:860 */\n dup3\n /* \"#utility.yul\":834:861 */\n tag_79\n jump\t// in\n tag_165:\n /* \"#utility.yul\":826:832 */\n dup2\n /* \"#utility.yul\":822:862 */\n add\n /* \"#utility.yul\":964:970 */\n dup2\n /* \"#utility.yul\":952:962 */\n dup2\n /* \"#utility.yul\":949:971 */\n lt\n /* \"#utility.yul\":928:946 */\n 0xffffffffffffffff\n /* \"#utility.yul\":916:926 */\n dup3\n /* \"#utility.yul\":913:947 */\n gt\n /* \"#utility.yul\":910:972 */\n or\n /* \"#utility.yul\":907:995 */\n iszero\n tag_166\n jumpi\n /* \"#utility.yul\":975:993 */\n tag_167\n tag_80\n jump\t// in\n tag_167:\n /* \"#utility.yul\":907:995 */\n tag_166:\n /* \"#utility.yul\":1015:1025 */\n dup1\n /* \"#utility.yul\":1011:1013 */\n 0x40\n /* \"#utility.yul\":1004:1026 */\n mstore\n /* \"#utility.yul\":794:1032 */\n pop\n /* \"#utility.yul\":751:1032 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1038:1167 */\n tag_82:\n /* \"#utility.yul\":1072:1078 */\n 0x00\n /* \"#utility.yul\":1099:1119 */\n tag_169\n tag_75\n jump\t// in\n tag_169:\n /* \"#utility.yul\":1089:1119 */\n swap1\n pop\n /* \"#utility.yul\":1128:1161 */\n tag_170\n /* \"#utility.yul\":1156:1160 */\n dup3\n /* \"#utility.yul\":1148:1154 */\n dup3\n /* \"#utility.yul\":1128:1161 */\n tag_81\n jump\t// in\n tag_170:\n /* \"#utility.yul\":1038:1167 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1173:1290 */\n tag_83:\n /* \"#utility.yul\":1282:1283 */\n 0x00\n /* \"#utility.yul\":1279:1280 */\n dup1\n /* \"#utility.yul\":1272:1284 */\n revert\n /* \"#utility.yul\":1296:1382 */\n tag_84:\n /* \"#utility.yul\":1331:1338 */\n 0x00\n /* \"#utility.yul\":1371:1375 */\n 0xff\n /* \"#utility.yul\":1364:1369 */\n dup3\n /* \"#utility.yul\":1360:1376 */\n and\n /* \"#utility.yul\":1349:1376 */\n swap1\n pop\n /* \"#utility.yul\":1296:1382 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1388:1506 */\n tag_85:\n /* \"#utility.yul\":1459:1481 */\n tag_174\n /* \"#utility.yul\":1475:1480 */\n dup2\n /* \"#utility.yul\":1459:1481 */\n tag_84\n jump\t// in\n tag_174:\n /* \"#utility.yul\":1452:1457 */\n dup2\n /* \"#utility.yul\":1449:1482 */\n eq\n /* \"#utility.yul\":1439:1500 */\n tag_175\n jumpi\n /* \"#utility.yul\":1496:1497 */\n 0x00\n /* \"#utility.yul\":1493:1494 */\n dup1\n /* \"#utility.yul\":1486:1498 */\n revert\n /* \"#utility.yul\":1439:1500 */\n tag_175:\n /* \"#utility.yul\":1388:1506 */\n pop\n jump\t// out\n /* \"#utility.yul\":1512:1647 */\n tag_86:\n /* \"#utility.yul\":1556:1561 */\n 0x00\n /* \"#utility.yul\":1594:1600 */\n dup2\n /* \"#utility.yul\":1581:1601 */\n calldataload\n /* \"#utility.yul\":1572:1601 */\n swap1\n pop\n /* \"#utility.yul\":1610:1641 */\n tag_177\n /* \"#utility.yul\":1635:1640 */\n dup2\n /* \"#utility.yul\":1610:1641 */\n tag_85\n jump\t// in\n tag_177:\n /* \"#utility.yul\":1512:1647 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1653:1770 */\n tag_87:\n /* \"#utility.yul\":1762:1763 */\n 0x00\n /* \"#utility.yul\":1759:1760 */\n dup1\n /* \"#utility.yul\":1752:1764 */\n revert\n /* \"#utility.yul\":1776:2096 */\n tag_88:\n /* \"#utility.yul\":1862:1866 */\n 0x00\n /* \"#utility.yul\":1952:1970 */\n 0xffffffffffffffff\n /* \"#utility.yul\":1944:1950 */\n dup3\n /* \"#utility.yul\":1941:1971 */\n gt\n /* \"#utility.yul\":1938:1994 */\n iszero\n tag_180\n jumpi\n /* \"#utility.yul\":1974:1992 */\n tag_181\n tag_80\n jump\t// in\n tag_181:\n /* \"#utility.yul\":1938:1994 */\n tag_180:\n /* \"#utility.yul\":2024:2028 */\n 0x20\n /* \"#utility.yul\":2016:2022 */\n dup3\n /* \"#utility.yul\":2012:2029 */\n mul\n /* \"#utility.yul\":2004:2029 */\n swap1\n pop\n /* \"#utility.yul\":2084:2088 */\n 0x20\n /* \"#utility.yul\":2078:2082 */\n dup2\n /* \"#utility.yul\":2074:2089 */\n add\n /* \"#utility.yul\":2066:2089 */\n swap1\n pop\n /* \"#utility.yul\":1776:2096 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2102:2219 */\n tag_89:\n /* \"#utility.yul\":2211:2212 */\n 0x00\n /* \"#utility.yul\":2208:2209 */\n dup1\n /* \"#utility.yul\":2201:2213 */\n revert\n /* \"#utility.yul\":2225:2342 */\n tag_90:\n /* \"#utility.yul\":2334:2335 */\n 0x00\n /* \"#utility.yul\":2331:2332 */\n dup1\n /* \"#utility.yul\":2324:2336 */\n revert\n /* \"#utility.yul\":2348:2655 */\n tag_91:\n /* \"#utility.yul\":2409:2413 */\n 0x00\n /* \"#utility.yul\":2499:2517 */\n 0xffffffffffffffff\n /* \"#utility.yul\":2491:2497 */\n dup3\n /* \"#utility.yul\":2488:2518 */\n gt\n /* \"#utility.yul\":2485:2541 */\n iszero\n tag_185\n jumpi\n /* \"#utility.yul\":2521:2539 */\n tag_186\n tag_80\n jump\t// in\n tag_186:\n /* \"#utility.yul\":2485:2541 */\n tag_185:\n /* \"#utility.yul\":2559:2588 */\n tag_187\n /* \"#utility.yul\":2581:2587 */\n dup3\n /* \"#utility.yul\":2559:2588 */\n tag_79\n jump\t// in\n tag_187:\n /* \"#utility.yul\":2551:2588 */\n swap1\n pop\n /* \"#utility.yul\":2643:2647 */\n 0x20\n /* \"#utility.yul\":2637:2641 */\n dup2\n /* \"#utility.yul\":2633:2648 */\n add\n /* \"#utility.yul\":2625:2648 */\n swap1\n pop\n /* \"#utility.yul\":2348:2655 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2661:2815 */\n tag_92:\n /* \"#utility.yul\":2745:2751 */\n dup3\n /* \"#utility.yul\":2740:2743 */\n dup2\n /* \"#utility.yul\":2735:2738 */\n dup4\n /* \"#utility.yul\":2722:2752 */\n calldatacopy\n /* \"#utility.yul\":2807:2808 */\n 0x00\n /* \"#utility.yul\":2798:2804 */\n dup4\n /* \"#utility.yul\":2793:2796 */\n dup4\n /* \"#utility.yul\":2789:2805 */\n add\n /* \"#utility.yul\":2782:2809 */\n mstore\n /* \"#utility.yul\":2661:2815 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2821:3231 */\n tag_93:\n /* \"#utility.yul\":2898:2903 */\n 0x00\n /* \"#utility.yul\":2923:2988 */\n tag_190\n /* \"#utility.yul\":2939:2987 */\n tag_191\n /* \"#utility.yul\":2980:2986 */\n dup5\n /* \"#utility.yul\":2939:2987 */\n tag_91\n jump\t// in\n tag_191:\n /* \"#utility.yul\":2923:2988 */\n tag_82\n jump\t// in\n tag_190:\n /* \"#utility.yul\":2914:2988 */\n swap1\n pop\n /* \"#utility.yul\":3011:3017 */\n dup3\n /* \"#utility.yul\":3004:3009 */\n dup2\n /* \"#utility.yul\":2997:3018 */\n mstore\n /* \"#utility.yul\":3049:3053 */\n 0x20\n /* \"#utility.yul\":3042:3047 */\n dup2\n /* \"#utility.yul\":3038:3054 */\n add\n /* \"#utility.yul\":3087:3090 */\n dup5\n /* \"#utility.yul\":3078:3084 */\n dup5\n /* \"#utility.yul\":3073:3076 */\n dup5\n /* \"#utility.yul\":3069:3085 */\n add\n /* \"#utility.yul\":3066:3091 */\n gt\n /* \"#utility.yul\":3063:3175 */\n iszero\n tag_192\n jumpi\n /* \"#utility.yul\":3094:3173 */\n tag_193\n tag_90\n jump\t// in\n tag_193:\n /* \"#utility.yul\":3063:3175 */\n tag_192:\n /* \"#utility.yul\":3184:3225 */\n tag_194\n /* \"#utility.yul\":3218:3224 */\n dup5\n /* \"#utility.yul\":3213:3216 */\n dup3\n /* \"#utility.yul\":3208:3211 */\n dup6\n /* \"#utility.yul\":3184:3225 */\n tag_92\n jump\t// in\n tag_194:\n /* \"#utility.yul\":2904:3231 */\n pop\n /* \"#utility.yul\":2821:3231 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3250:3588 */\n tag_94:\n /* \"#utility.yul\":3305:3310 */\n 0x00\n /* \"#utility.yul\":3354:3357 */\n dup3\n /* \"#utility.yul\":3347:3351 */\n 0x1f\n /* \"#utility.yul\":3339:3345 */\n dup4\n /* \"#utility.yul\":3335:3352 */\n add\n /* \"#utility.yul\":3331:3358 */\n slt\n /* \"#utility.yul\":3321:3443 */\n tag_196\n jumpi\n /* \"#utility.yul\":3362:3441 */\n tag_197\n tag_87\n jump\t// in\n tag_197:\n /* \"#utility.yul\":3321:3443 */\n tag_196:\n /* \"#utility.yul\":3479:3485 */\n dup2\n /* \"#utility.yul\":3466:3486 */\n calldataload\n /* \"#utility.yul\":3504:3582 */\n tag_198\n /* \"#utility.yul\":3578:3581 */\n dup5\n /* \"#utility.yul\":3570:3576 */\n dup3\n /* \"#utility.yul\":3563:3567 */\n 0x20\n /* \"#utility.yul\":3555:3561 */\n dup7\n /* \"#utility.yul\":3551:3568 */\n add\n /* \"#utility.yul\":3504:3582 */\n tag_93\n jump\t// in\n tag_198:\n /* \"#utility.yul\":3495:3582 */\n swap2\n pop\n /* \"#utility.yul\":3311:3588 */\n pop\n /* \"#utility.yul\":3250:3588 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3609:4551 */\n tag_95:\n /* \"#utility.yul\":3714:3719 */\n 0x00\n /* \"#utility.yul\":3739:3829 */\n tag_200\n /* \"#utility.yul\":3755:3828 */\n tag_201\n /* \"#utility.yul\":3821:3827 */\n dup5\n /* \"#utility.yul\":3755:3828 */\n tag_88\n jump\t// in\n tag_201:\n /* \"#utility.yul\":3739:3829 */\n tag_82\n jump\t// in\n tag_200:\n /* \"#utility.yul\":3730:3829 */\n swap1\n pop\n /* \"#utility.yul\":3849:3854 */\n dup1\n /* \"#utility.yul\":3878:3884 */\n dup4\n /* \"#utility.yul\":3871:3876 */\n dup3\n /* \"#utility.yul\":3864:3885 */\n mstore\n /* \"#utility.yul\":3912:3916 */\n 0x20\n /* \"#utility.yul\":3905:3910 */\n dup3\n /* \"#utility.yul\":3901:3917 */\n add\n /* \"#utility.yul\":3894:3917 */\n swap1\n pop\n /* \"#utility.yul\":3965:3969 */\n 0x20\n /* \"#utility.yul\":3957:3963 */\n dup5\n /* \"#utility.yul\":3953:3970 */\n mul\n /* \"#utility.yul\":3945:3951 */\n dup4\n /* \"#utility.yul\":3941:3971 */\n add\n /* \"#utility.yul\":3994:3997 */\n dup6\n /* \"#utility.yul\":3986:3992 */\n dup2\n /* \"#utility.yul\":3983:3998 */\n gt\n /* \"#utility.yul\":3980:4102 */\n iszero\n tag_202\n jumpi\n /* \"#utility.yul\":4013:4092 */\n tag_203\n tag_89\n jump\t// in\n tag_203:\n /* \"#utility.yul\":3980:4102 */\n tag_202:\n /* \"#utility.yul\":4128:4134 */\n dup4\n /* \"#utility.yul\":4111:4545 */\n tag_204:\n /* \"#utility.yul\":4145:4151 */\n dup2\n /* \"#utility.yul\":4140:4143 */\n dup2\n /* \"#utility.yul\":4137:4152 */\n lt\n /* \"#utility.yul\":4111:4545 */\n iszero\n tag_206\n jumpi\n /* \"#utility.yul\":4234:4237 */\n dup1\n /* \"#utility.yul\":4221:4238 */\n calldataload\n /* \"#utility.yul\":4270:4288 */\n 0xffffffffffffffff\n /* \"#utility.yul\":4257:4268 */\n dup2\n /* \"#utility.yul\":4254:4289 */\n gt\n /* \"#utility.yul\":4251:4373 */\n iszero\n tag_207\n jumpi\n /* \"#utility.yul\":4292:4371 */\n tag_208\n tag_87\n jump\t// in\n tag_208:\n /* \"#utility.yul\":4251:4373 */\n tag_207:\n /* \"#utility.yul\":4416:4427 */\n dup1\n /* \"#utility.yul\":4408:4414 */\n dup7\n /* \"#utility.yul\":4404:4428 */\n add\n /* \"#utility.yul\":4454:4500 */\n tag_209\n /* \"#utility.yul\":4496:4499 */\n dup10\n /* \"#utility.yul\":4484:4494 */\n dup3\n /* \"#utility.yul\":4454:4500 */\n tag_94\n jump\t// in\n tag_209:\n /* \"#utility.yul\":4449:4452 */\n dup6\n /* \"#utility.yul\":4442:4501 */\n mstore\n /* \"#utility.yul\":4530:4534 */\n 0x20\n /* \"#utility.yul\":4525:4528 */\n dup6\n /* \"#utility.yul\":4521:4535 */\n add\n /* \"#utility.yul\":4514:4535 */\n swap5\n pop\n /* \"#utility.yul\":4187:4545 */\n pop\n pop\n /* \"#utility.yul\":4171:4175 */\n 0x20\n /* \"#utility.yul\":4166:4169 */\n dup2\n /* \"#utility.yul\":4162:4176 */\n add\n /* \"#utility.yul\":4155:4176 */\n swap1\n pop\n /* \"#utility.yul\":4111:4545 */\n jump(tag_204)\n tag_206:\n /* \"#utility.yul\":4115:4136 */\n pop\n /* \"#utility.yul\":3720:4551 */\n pop\n pop\n /* \"#utility.yul\":3609:4551 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4572:4960 */\n tag_96:\n /* \"#utility.yul\":4652:4657 */\n 0x00\n /* \"#utility.yul\":4701:4704 */\n dup3\n /* \"#utility.yul\":4694:4698 */\n 0x1f\n /* \"#utility.yul\":4686:4692 */\n dup4\n /* \"#utility.yul\":4682:4699 */\n add\n /* \"#utility.yul\":4678:4705 */\n slt\n /* \"#utility.yul\":4668:4790 */\n tag_211\n jumpi\n /* \"#utility.yul\":4709:4788 */\n tag_212\n tag_87\n jump\t// in\n tag_212:\n /* \"#utility.yul\":4668:4790 */\n tag_211:\n /* \"#utility.yul\":4826:4832 */\n dup2\n /* \"#utility.yul\":4813:4833 */\n calldataload\n /* \"#utility.yul\":4851:4954 */\n tag_213\n /* \"#utility.yul\":4950:4953 */\n dup5\n /* \"#utility.yul\":4942:4948 */\n dup3\n /* \"#utility.yul\":4935:4939 */\n 0x20\n /* \"#utility.yul\":4927:4933 */\n dup7\n /* \"#utility.yul\":4923:4940 */\n add\n /* \"#utility.yul\":4851:4954 */\n tag_95\n jump\t// in\n tag_213:\n /* \"#utility.yul\":4842:4954 */\n swap2\n pop\n /* \"#utility.yul\":4658:4960 */\n pop\n /* \"#utility.yul\":4572:4960 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5002:5780 */\n tag_97:\n /* \"#utility.yul\":5081:5086 */\n 0x00\n /* \"#utility.yul\":5125:5129 */\n 0x40\n /* \"#utility.yul\":5113:5122 */\n dup3\n /* \"#utility.yul\":5108:5111 */\n dup5\n /* \"#utility.yul\":5104:5123 */\n sub\n /* \"#utility.yul\":5100:5130 */\n slt\n /* \"#utility.yul\":5097:5214 */\n iszero\n tag_215\n jumpi\n /* \"#utility.yul\":5133:5212 */\n tag_216\n tag_78\n jump\t// in\n tag_216:\n /* \"#utility.yul\":5097:5214 */\n tag_215:\n /* \"#utility.yul\":5232:5253 */\n tag_217\n /* \"#utility.yul\":5248:5252 */\n 0x40\n /* \"#utility.yul\":5232:5253 */\n tag_82\n jump\t// in\n tag_217:\n /* \"#utility.yul\":5223:5253 */\n swap1\n pop\n /* \"#utility.yul\":5315:5316 */\n 0x00\n /* \"#utility.yul\":5355:5402 */\n tag_218\n /* \"#utility.yul\":5398:5401 */\n dup5\n /* \"#utility.yul\":5389:5395 */\n dup3\n /* \"#utility.yul\":5378:5387 */\n dup6\n /* \"#utility.yul\":5374:5396 */\n add\n /* \"#utility.yul\":5355:5402 */\n tag_86\n jump\t// in\n tag_218:\n /* \"#utility.yul\":5348:5352 */\n 0x00\n /* \"#utility.yul\":5341:5346 */\n dup4\n /* \"#utility.yul\":5337:5353 */\n add\n /* \"#utility.yul\":5330:5403 */\n mstore\n /* \"#utility.yul\":5263:5414 */\n pop\n /* \"#utility.yul\":5505:5507 */\n 0x20\n /* \"#utility.yul\":5494:5503 */\n dup3\n /* \"#utility.yul\":5490:5508 */\n add\n /* \"#utility.yul\":5477:5509 */\n calldataload\n /* \"#utility.yul\":5536:5554 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5528:5534 */\n dup2\n /* \"#utility.yul\":5525:5555 */\n gt\n /* \"#utility.yul\":5522:5639 */\n iszero\n tag_219\n jumpi\n /* \"#utility.yul\":5558:5637 */\n tag_220\n tag_83\n jump\t// in\n tag_220:\n /* \"#utility.yul\":5522:5639 */\n tag_219:\n /* \"#utility.yul\":5678:5761 */\n tag_221\n /* \"#utility.yul\":5757:5760 */\n dup5\n /* \"#utility.yul\":5748:5754 */\n dup3\n /* \"#utility.yul\":5737:5746 */\n dup6\n /* \"#utility.yul\":5733:5755 */\n add\n /* \"#utility.yul\":5678:5761 */\n tag_96\n jump\t// in\n tag_221:\n /* \"#utility.yul\":5671:5675 */\n 0x20\n /* \"#utility.yul\":5664:5669 */\n dup4\n /* \"#utility.yul\":5660:5676 */\n add\n /* \"#utility.yul\":5653:5762 */\n mstore\n /* \"#utility.yul\":5424:5773 */\n pop\n /* \"#utility.yul\":5002:5780 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5786:5863 */\n tag_98:\n /* \"#utility.yul\":5823:5830 */\n 0x00\n /* \"#utility.yul\":5852:5857 */\n dup2\n /* \"#utility.yul\":5841:5857 */\n swap1\n pop\n /* \"#utility.yul\":5786:5863 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5869:5991 */\n tag_99:\n /* \"#utility.yul\":5942:5966 */\n tag_224\n /* \"#utility.yul\":5960:5965 */\n dup2\n /* \"#utility.yul\":5942:5966 */\n tag_98\n jump\t// in\n tag_224:\n /* \"#utility.yul\":5935:5940 */\n dup2\n /* \"#utility.yul\":5932:5967 */\n eq\n /* \"#utility.yul\":5922:5985 */\n tag_225\n jumpi\n /* \"#utility.yul\":5981:5982 */\n 0x00\n /* \"#utility.yul\":5978:5979 */\n dup1\n /* \"#utility.yul\":5971:5983 */\n revert\n /* \"#utility.yul\":5922:5985 */\n tag_225:\n /* \"#utility.yul\":5869:5991 */\n pop\n jump\t// out\n /* \"#utility.yul\":5997:6136 */\n tag_100:\n /* \"#utility.yul\":6043:6048 */\n 0x00\n /* \"#utility.yul\":6081:6087 */\n dup2\n /* \"#utility.yul\":6068:6088 */\n calldataload\n /* \"#utility.yul\":6059:6088 */\n swap1\n pop\n /* \"#utility.yul\":6097:6130 */\n tag_227\n /* \"#utility.yul\":6124:6129 */\n dup2\n /* \"#utility.yul\":6097:6130 */\n tag_99\n jump\t// in\n tag_227:\n /* \"#utility.yul\":5997:6136 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6142:6243 */\n tag_101:\n /* \"#utility.yul\":6178:6185 */\n 0x00\n /* \"#utility.yul\":6218:6236 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6211:6216 */\n dup3\n /* \"#utility.yul\":6207:6237 */\n and\n /* \"#utility.yul\":6196:6237 */\n swap1\n pop\n /* \"#utility.yul\":6142:6243 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":6249:6369 */\n tag_102:\n /* \"#utility.yul\":6321:6344 */\n tag_230\n /* \"#utility.yul\":6338:6343 */\n dup2\n /* \"#utility.yul\":6321:6344 */\n tag_101\n jump\t// in\n tag_230:\n /* \"#utility.yul\":6314:6319 */\n dup2\n /* \"#utility.yul\":6311:6345 */\n eq\n /* \"#utility.yul\":6301:6363 */\n tag_231\n jumpi\n /* \"#utility.yul\":6359:6360 */\n 0x00\n /* \"#utility.yul\":6356:6357 */\n dup1\n /* \"#utility.yul\":6349:6361 */\n revert\n /* \"#utility.yul\":6301:6363 */\n tag_231:\n /* \"#utility.yul\":6249:6369 */\n pop\n jump\t// out\n /* \"#utility.yul\":6375:6512 */\n tag_103:\n /* \"#utility.yul\":6420:6425 */\n 0x00\n /* \"#utility.yul\":6458:6464 */\n dup2\n /* \"#utility.yul\":6445:6465 */\n calldataload\n /* \"#utility.yul\":6436:6465 */\n swap1\n pop\n /* \"#utility.yul\":6474:6506 */\n tag_233\n /* \"#utility.yul\":6500:6505 */\n dup2\n /* \"#utility.yul\":6474:6506 */\n tag_102\n jump\t// in\n tag_233:\n /* \"#utility.yul\":6375:6512 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6518:7867 */\n tag_13:\n /* \"#utility.yul\":6672:6678 */\n 0x00\n /* \"#utility.yul\":6680:6686 */\n dup1\n /* \"#utility.yul\":6688:6694 */\n 0x00\n /* \"#utility.yul\":6696:6702 */\n dup1\n /* \"#utility.yul\":6704:6710 */\n 0x00\n /* \"#utility.yul\":6753:6756 */\n 0xa0\n /* \"#utility.yul\":6741:6750 */\n dup7\n /* \"#utility.yul\":6732:6739 */\n dup9\n /* \"#utility.yul\":6728:6751 */\n sub\n /* \"#utility.yul\":6724:6757 */\n slt\n /* \"#utility.yul\":6721:6841 */\n iszero\n tag_235\n jumpi\n /* \"#utility.yul\":6760:6839 */\n tag_236\n tag_76\n jump\t// in\n tag_236:\n /* \"#utility.yul\":6721:6841 */\n tag_235:\n /* \"#utility.yul\":6908:6909 */\n 0x00\n /* \"#utility.yul\":6897:6906 */\n dup7\n /* \"#utility.yul\":6893:6910 */\n add\n /* \"#utility.yul\":6880:6911 */\n calldataload\n /* \"#utility.yul\":6938:6956 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6930:6936 */\n dup2\n /* \"#utility.yul\":6927:6957 */\n gt\n /* \"#utility.yul\":6924:7041 */\n iszero\n tag_237\n jumpi\n /* \"#utility.yul\":6960:7039 */\n tag_238\n tag_77\n jump\t// in\n tag_238:\n /* \"#utility.yul\":6924:7041 */\n tag_237:\n /* \"#utility.yul\":7065:7148 */\n tag_239\n /* \"#utility.yul\":7140:7147 */\n dup9\n /* \"#utility.yul\":7131:7137 */\n dup3\n /* \"#utility.yul\":7120:7129 */\n dup10\n /* \"#utility.yul\":7116:7138 */\n add\n /* \"#utility.yul\":7065:7148 */\n tag_97\n jump\t// in\n tag_239:\n /* \"#utility.yul\":7055:7148 */\n swap6\n pop\n /* \"#utility.yul\":6851:7158 */\n pop\n /* \"#utility.yul\":7197:7199 */\n 0x20\n /* \"#utility.yul\":7223:7276 */\n tag_240\n /* \"#utility.yul\":7268:7275 */\n dup9\n /* \"#utility.yul\":7259:7265 */\n dup3\n /* \"#utility.yul\":7248:7257 */\n dup10\n /* \"#utility.yul\":7244:7266 */\n add\n /* \"#utility.yul\":7223:7276 */\n tag_100\n jump\t// in\n tag_240:\n /* \"#utility.yul\":7213:7276 */\n swap5\n pop\n /* \"#utility.yul\":7168:7286 */\n pop\n /* \"#utility.yul\":7325:7327 */\n 0x40\n /* \"#utility.yul\":7351:7404 */\n tag_241\n /* \"#utility.yul\":7396:7403 */\n dup9\n /* \"#utility.yul\":7387:7393 */\n dup3\n /* \"#utility.yul\":7376:7385 */\n dup10\n /* \"#utility.yul\":7372:7394 */\n add\n /* \"#utility.yul\":7351:7404 */\n tag_100\n jump\t// in\n tag_241:\n /* \"#utility.yul\":7341:7404 */\n swap4\n pop\n /* \"#utility.yul\":7296:7414 */\n pop\n /* \"#utility.yul\":7481:7483 */\n 0x60\n /* \"#utility.yul\":7470:7479 */\n dup7\n /* \"#utility.yul\":7466:7484 */\n add\n /* \"#utility.yul\":7453:7485 */\n calldataload\n /* \"#utility.yul\":7512:7530 */\n 0xffffffffffffffff\n /* \"#utility.yul\":7504:7510 */\n dup2\n /* \"#utility.yul\":7501:7531 */\n gt\n /* \"#utility.yul\":7498:7615 */\n iszero\n tag_242\n jumpi\n /* \"#utility.yul\":7534:7613 */\n tag_243\n tag_77\n jump\t// in\n tag_243:\n /* \"#utility.yul\":7498:7615 */\n tag_242:\n /* \"#utility.yul\":7639:7722 */\n tag_244\n /* \"#utility.yul\":7714:7721 */\n dup9\n /* \"#utility.yul\":7705:7711 */\n dup3\n /* \"#utility.yul\":7694:7703 */\n dup10\n /* \"#utility.yul\":7690:7712 */\n add\n /* \"#utility.yul\":7639:7722 */\n tag_97\n jump\t// in\n tag_244:\n /* \"#utility.yul\":7629:7722 */\n swap3\n pop\n /* \"#utility.yul\":7424:7732 */\n pop\n /* \"#utility.yul\":7771:7774 */\n 0x80\n /* \"#utility.yul\":7798:7850 */\n tag_245\n /* \"#utility.yul\":7842:7849 */\n dup9\n /* \"#utility.yul\":7833:7839 */\n dup3\n /* \"#utility.yul\":7822:7831 */\n dup10\n /* \"#utility.yul\":7818:7840 */\n add\n /* \"#utility.yul\":7798:7850 */\n tag_103\n jump\t// in\n tag_245:\n /* \"#utility.yul\":7788:7850 */\n swap2\n pop\n /* \"#utility.yul\":7742:7860 */\n pop\n /* \"#utility.yul\":6518:7867 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":7873:8209 */\n tag_104:\n /* \"#utility.yul\":7975:7979 */\n 0x00\n /* \"#utility.yul\":8065:8083 */\n 0xffffffffffffffff\n /* \"#utility.yul\":8057:8063 */\n dup3\n /* \"#utility.yul\":8054:8084 */\n gt\n /* \"#utility.yul\":8051:8107 */\n iszero\n tag_247\n jumpi\n /* \"#utility.yul\":8087:8105 */\n tag_248\n tag_80\n jump\t// in\n tag_248:\n /* \"#utility.yul\":8051:8107 */\n tag_247:\n /* \"#utility.yul\":8137:8141 */\n 0x20\n /* \"#utility.yul\":8129:8135 */\n dup3\n /* \"#utility.yul\":8125:8142 */\n mul\n /* \"#utility.yul\":8117:8142 */\n swap1\n pop\n /* \"#utility.yul\":8197:8201 */\n 0x20\n /* \"#utility.yul\":8191:8195 */\n dup2\n /* \"#utility.yul\":8187:8202 */\n add\n /* \"#utility.yul\":8179:8202 */\n swap1\n pop\n /* \"#utility.yul\":7873:8209 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8215:8341 */\n tag_105:\n /* \"#utility.yul\":8252:8259 */\n 0x00\n /* \"#utility.yul\":8292:8334 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":8285:8290 */\n dup3\n /* \"#utility.yul\":8281:8335 */\n and\n /* \"#utility.yul\":8270:8335 */\n swap1\n pop\n /* \"#utility.yul\":8215:8341 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8347:8443 */\n tag_106:\n /* \"#utility.yul\":8384:8391 */\n 0x00\n /* \"#utility.yul\":8413:8437 */\n tag_251\n /* \"#utility.yul\":8431:8436 */\n dup3\n /* \"#utility.yul\":8413:8437 */\n tag_105\n jump\t// in\n tag_251:\n /* \"#utility.yul\":8402:8437 */\n swap1\n pop\n /* \"#utility.yul\":8347:8443 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8449:8571 */\n tag_107:\n /* \"#utility.yul\":8522:8546 */\n tag_253\n /* \"#utility.yul\":8540:8545 */\n dup2\n /* \"#utility.yul\":8522:8546 */\n tag_106\n jump\t// in\n tag_253:\n /* \"#utility.yul\":8515:8520 */\n dup2\n /* \"#utility.yul\":8512:8547 */\n eq\n /* \"#utility.yul\":8502:8565 */\n tag_254\n jumpi\n /* \"#utility.yul\":8561:8562 */\n 0x00\n /* \"#utility.yul\":8558:8559 */\n dup1\n /* \"#utility.yul\":8551:8563 */\n revert\n /* \"#utility.yul\":8502:8565 */\n tag_254:\n /* \"#utility.yul\":8449:8571 */\n pop\n jump\t// out\n /* \"#utility.yul\":8577:8716 */\n tag_108:\n /* \"#utility.yul\":8623:8628 */\n 0x00\n /* \"#utility.yul\":8661:8667 */\n dup2\n /* \"#utility.yul\":8648:8668 */\n calldataload\n /* \"#utility.yul\":8639:8668 */\n swap1\n pop\n /* \"#utility.yul\":8677:8710 */\n tag_256\n /* \"#utility.yul\":8704:8709 */\n dup2\n /* \"#utility.yul\":8677:8710 */\n tag_107\n jump\t// in\n tag_256:\n /* \"#utility.yul\":8577:8716 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8753:9341 */\n tag_109:\n /* \"#utility.yul\":8827:8832 */\n 0x00\n /* \"#utility.yul\":8871:8875 */\n 0x40\n /* \"#utility.yul\":8859:8868 */\n dup3\n /* \"#utility.yul\":8854:8857 */\n dup5\n /* \"#utility.yul\":8850:8869 */\n sub\n /* \"#utility.yul\":8846:8876 */\n slt\n /* \"#utility.yul\":8843:8960 */\n iszero\n tag_258\n jumpi\n /* \"#utility.yul\":8879:8958 */\n tag_259\n tag_78\n jump\t// in\n tag_259:\n /* \"#utility.yul\":8843:8960 */\n tag_258:\n /* \"#utility.yul\":8978:8999 */\n tag_260\n /* \"#utility.yul\":8994:8998 */\n 0x40\n /* \"#utility.yul\":8978:8999 */\n tag_82\n jump\t// in\n tag_260:\n /* \"#utility.yul\":8969:8999 */\n swap1\n pop\n /* \"#utility.yul\":9070:9071 */\n 0x00\n /* \"#utility.yul\":9110:9159 */\n tag_261\n /* \"#utility.yul\":9155:9158 */\n dup5\n /* \"#utility.yul\":9146:9152 */\n dup3\n /* \"#utility.yul\":9135:9144 */\n dup6\n /* \"#utility.yul\":9131:9153 */\n add\n /* \"#utility.yul\":9110:9159 */\n tag_108\n jump\t// in\n tag_261:\n /* \"#utility.yul\":9103:9107 */\n 0x00\n /* \"#utility.yul\":9096:9101 */\n dup4\n /* \"#utility.yul\":9092:9108 */\n add\n /* \"#utility.yul\":9085:9160 */\n mstore\n /* \"#utility.yul\":9009:9171 */\n pop\n /* \"#utility.yul\":9232:9234 */\n 0x20\n /* \"#utility.yul\":9273:9322 */\n tag_262\n /* \"#utility.yul\":9318:9321 */\n dup5\n /* \"#utility.yul\":9309:9315 */\n dup3\n /* \"#utility.yul\":9298:9307 */\n dup6\n /* \"#utility.yul\":9294:9316 */\n add\n /* \"#utility.yul\":9273:9322 */\n tag_100\n jump\t// in\n tag_262:\n /* \"#utility.yul\":9266:9270 */\n 0x20\n /* \"#utility.yul\":9259:9264 */\n dup4\n /* \"#utility.yul\":9255:9271 */\n add\n /* \"#utility.yul\":9248:9323 */\n mstore\n /* \"#utility.yul\":9181:9334 */\n pop\n /* \"#utility.yul\":8753:9341 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9380:10165 */\n tag_110:\n /* \"#utility.yul\":9501:9506 */\n 0x00\n /* \"#utility.yul\":9526:9632 */\n tag_264\n /* \"#utility.yul\":9542:9631 */\n tag_265\n /* \"#utility.yul\":9624:9630 */\n dup5\n /* \"#utility.yul\":9542:9631 */\n tag_104\n jump\t// in\n tag_265:\n /* \"#utility.yul\":9526:9632 */\n tag_82\n jump\t// in\n tag_264:\n /* \"#utility.yul\":9517:9632 */\n swap1\n pop\n /* \"#utility.yul\":9652:9657 */\n dup1\n /* \"#utility.yul\":9681:9687 */\n dup4\n /* \"#utility.yul\":9674:9679 */\n dup3\n /* \"#utility.yul\":9667:9688 */\n mstore\n /* \"#utility.yul\":9715:9719 */\n 0x20\n /* \"#utility.yul\":9708:9713 */\n dup3\n /* \"#utility.yul\":9704:9720 */\n add\n /* \"#utility.yul\":9697:9720 */\n swap1\n pop\n /* \"#utility.yul\":9768:9772 */\n 0x40\n /* \"#utility.yul\":9760:9766 */\n dup5\n /* \"#utility.yul\":9756:9773 */\n mul\n /* \"#utility.yul\":9748:9754 */\n dup4\n /* \"#utility.yul\":9744:9774 */\n add\n /* \"#utility.yul\":9797:9800 */\n dup6\n /* \"#utility.yul\":9789:9795 */\n dup2\n /* \"#utility.yul\":9786:9801 */\n gt\n /* \"#utility.yul\":9783:9905 */\n iszero\n tag_266\n jumpi\n /* \"#utility.yul\":9816:9895 */\n tag_267\n tag_89\n jump\t// in\n tag_267:\n /* \"#utility.yul\":9783:9905 */\n tag_266:\n /* \"#utility.yul\":9931:9937 */\n dup4\n /* \"#utility.yul\":9914:10159 */\n tag_268:\n /* \"#utility.yul\":9948:9954 */\n dup2\n /* \"#utility.yul\":9943:9946 */\n dup2\n /* \"#utility.yul\":9940:9955 */\n lt\n /* \"#utility.yul\":9914:10159 */\n iszero\n tag_270\n jumpi\n /* \"#utility.yul\":10023:10026 */\n dup1\n /* \"#utility.yul\":10052:10114 */\n tag_271\n /* \"#utility.yul\":10110:10113 */\n dup9\n /* \"#utility.yul\":10098:10108 */\n dup3\n /* \"#utility.yul\":10052:10114 */\n tag_109\n jump\t// in\n tag_271:\n /* \"#utility.yul\":10047:10050 */\n dup5\n /* \"#utility.yul\":10040:10115 */\n mstore\n /* \"#utility.yul\":10144:10148 */\n 0x20\n /* \"#utility.yul\":10139:10142 */\n dup5\n /* \"#utility.yul\":10135:10149 */\n add\n /* \"#utility.yul\":10128:10149 */\n swap4\n pop\n /* \"#utility.yul\":9990:10159 */\n pop\n /* \"#utility.yul\":9974:9978 */\n 0x40\n /* \"#utility.yul\":9969:9972 */\n dup2\n /* \"#utility.yul\":9965:9979 */\n add\n /* \"#utility.yul\":9958:9979 */\n swap1\n pop\n /* \"#utility.yul\":9914:10159 */\n jump(tag_268)\n tag_270:\n /* \"#utility.yul\":9918:9939 */\n pop\n /* \"#utility.yul\":9507:10165 */\n pop\n pop\n /* \"#utility.yul\":9380:10165 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10204:10624 */\n tag_111:\n /* \"#utility.yul\":10300:10305 */\n 0x00\n /* \"#utility.yul\":10349:10352 */\n dup3\n /* \"#utility.yul\":10342:10346 */\n 0x1f\n /* \"#utility.yul\":10334:10340 */\n dup4\n /* \"#utility.yul\":10330:10347 */\n add\n /* \"#utility.yul\":10326:10353 */\n slt\n /* \"#utility.yul\":10316:10438 */\n tag_273\n jumpi\n /* \"#utility.yul\":10357:10436 */\n tag_274\n tag_87\n jump\t// in\n tag_274:\n /* \"#utility.yul\":10316:10438 */\n tag_273:\n /* \"#utility.yul\":10474:10480 */\n dup2\n /* \"#utility.yul\":10461:10481 */\n calldataload\n /* \"#utility.yul\":10499:10618 */\n tag_275\n /* \"#utility.yul\":10614:10617 */\n dup5\n /* \"#utility.yul\":10606:10612 */\n dup3\n /* \"#utility.yul\":10599:10603 */\n 0x20\n /* \"#utility.yul\":10591:10597 */\n dup7\n /* \"#utility.yul\":10587:10604 */\n add\n /* \"#utility.yul\":10499:10618 */\n tag_110\n jump\t// in\n tag_275:\n /* \"#utility.yul\":10490:10618 */\n swap2\n pop\n /* \"#utility.yul\":10306:10624 */\n pop\n /* \"#utility.yul\":10204:10624 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10630:10723 */\n tag_112:\n /* \"#utility.yul\":10666:10673 */\n 0x00\n /* \"#utility.yul\":10706:10716 */\n 0xffffffff\n /* \"#utility.yul\":10699:10704 */\n dup3\n /* \"#utility.yul\":10695:10717 */\n and\n /* \"#utility.yul\":10684:10717 */\n swap1\n pop\n /* \"#utility.yul\":10630:10723 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10729:10849 */\n tag_113:\n /* \"#utility.yul\":10801:10824 */\n tag_278\n /* \"#utility.yul\":10818:10823 */\n dup2\n /* \"#utility.yul\":10801:10824 */\n tag_112\n jump\t// in\n tag_278:\n /* \"#utility.yul\":10794:10799 */\n dup2\n /* \"#utility.yul\":10791:10825 */\n eq\n /* \"#utility.yul\":10781:10843 */\n tag_279\n jumpi\n /* \"#utility.yul\":10839:10840 */\n 0x00\n /* \"#utility.yul\":10836:10837 */\n dup1\n /* \"#utility.yul\":10829:10841 */\n revert\n /* \"#utility.yul\":10781:10843 */\n tag_279:\n /* \"#utility.yul\":10729:10849 */\n pop\n jump\t// out\n /* \"#utility.yul\":10855:10992 */\n tag_114:\n /* \"#utility.yul\":10900:10905 */\n 0x00\n /* \"#utility.yul\":10938:10944 */\n dup2\n /* \"#utility.yul\":10925:10945 */\n calldataload\n /* \"#utility.yul\":10916:10945 */\n swap1\n pop\n /* \"#utility.yul\":10954:10986 */\n tag_281\n /* \"#utility.yul\":10980:10985 */\n dup2\n /* \"#utility.yul\":10954:10986 */\n tag_113\n jump\t// in\n tag_281:\n /* \"#utility.yul\":10855:10992 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10998:12239 */\n tag_17:\n /* \"#utility.yul\":11162:11168 */\n 0x00\n /* \"#utility.yul\":11170:11176 */\n dup1\n /* \"#utility.yul\":11178:11184 */\n 0x00\n /* \"#utility.yul\":11186:11192 */\n dup1\n /* \"#utility.yul\":11235:11238 */\n 0x80\n /* \"#utility.yul\":11223:11232 */\n dup6\n /* \"#utility.yul\":11214:11221 */\n dup8\n /* \"#utility.yul\":11210:11233 */\n sub\n /* \"#utility.yul\":11206:11239 */\n slt\n /* \"#utility.yul\":11203:11323 */\n iszero\n tag_283\n jumpi\n /* \"#utility.yul\":11242:11321 */\n tag_284\n tag_76\n jump\t// in\n tag_284:\n /* \"#utility.yul\":11203:11323 */\n tag_283:\n /* \"#utility.yul\":11390:11391 */\n 0x00\n /* \"#utility.yul\":11379:11388 */\n dup6\n /* \"#utility.yul\":11375:11392 */\n add\n /* \"#utility.yul\":11362:11393 */\n calldataload\n /* \"#utility.yul\":11420:11438 */\n 0xffffffffffffffff\n /* \"#utility.yul\":11412:11418 */\n dup2\n /* \"#utility.yul\":11409:11439 */\n gt\n /* \"#utility.yul\":11406:11523 */\n iszero\n tag_285\n jumpi\n /* \"#utility.yul\":11442:11521 */\n tag_286\n tag_77\n jump\t// in\n tag_286:\n /* \"#utility.yul\":11406:11523 */\n tag_285:\n /* \"#utility.yul\":11547:11650 */\n tag_287\n /* \"#utility.yul\":11642:11649 */\n dup8\n /* \"#utility.yul\":11633:11639 */\n dup3\n /* \"#utility.yul\":11622:11631 */\n dup9\n /* \"#utility.yul\":11618:11640 */\n add\n /* \"#utility.yul\":11547:11650 */\n tag_111\n jump\t// in\n tag_287:\n /* \"#utility.yul\":11537:11650 */\n swap5\n pop\n /* \"#utility.yul\":11333:11660 */\n pop\n /* \"#utility.yul\":11699:11701 */\n 0x20\n /* \"#utility.yul\":11725:11777 */\n tag_288\n /* \"#utility.yul\":11769:11776 */\n dup8\n /* \"#utility.yul\":11760:11766 */\n dup3\n /* \"#utility.yul\":11749:11758 */\n dup9\n /* \"#utility.yul\":11745:11767 */\n add\n /* \"#utility.yul\":11725:11777 */\n tag_114\n jump\t// in\n tag_288:\n /* \"#utility.yul\":11715:11777 */\n swap4\n pop\n /* \"#utility.yul\":11670:11787 */\n pop\n /* \"#utility.yul\":11854:11856 */\n 0x40\n /* \"#utility.yul\":11843:11852 */\n dup6\n /* \"#utility.yul\":11839:11857 */\n add\n /* \"#utility.yul\":11826:11858 */\n calldataload\n /* \"#utility.yul\":11885:11903 */\n 0xffffffffffffffff\n /* \"#utility.yul\":11877:11883 */\n dup2\n /* \"#utility.yul\":11874:11904 */\n gt\n /* \"#utility.yul\":11871:11988 */\n iszero\n tag_289\n jumpi\n /* \"#utility.yul\":11907:11986 */\n tag_290\n tag_77\n jump\t// in\n tag_290:\n /* \"#utility.yul\":11871:11988 */\n tag_289:\n /* \"#utility.yul\":12012:12095 */\n tag_291\n /* \"#utility.yul\":12087:12094 */\n dup8\n /* \"#utility.yul\":12078:12084 */\n dup3\n /* \"#utility.yul\":12067:12076 */\n dup9\n /* \"#utility.yul\":12063:12085 */\n add\n /* \"#utility.yul\":12012:12095 */\n tag_97\n jump\t// in\n tag_291:\n /* \"#utility.yul\":12002:12095 */\n swap3\n pop\n /* \"#utility.yul\":11797:12105 */\n pop\n /* \"#utility.yul\":12144:12146 */\n 0x60\n /* \"#utility.yul\":12170:12222 */\n tag_292\n /* \"#utility.yul\":12214:12221 */\n dup8\n /* \"#utility.yul\":12205:12211 */\n dup3\n /* \"#utility.yul\":12194:12203 */\n dup9\n /* \"#utility.yul\":12190:12212 */\n add\n /* \"#utility.yul\":12170:12222 */\n tag_103\n jump\t// in\n tag_292:\n /* \"#utility.yul\":12160:12222 */\n swap2\n pop\n /* \"#utility.yul\":12115:12232 */\n pop\n /* \"#utility.yul\":10998:12239 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":12245:13374 */\n tag_21:\n /* \"#utility.yul\":12369:12375 */\n 0x00\n /* \"#utility.yul\":12377:12383 */\n dup1\n /* \"#utility.yul\":12385:12391 */\n 0x00\n /* \"#utility.yul\":12393:12399 */\n dup1\n /* \"#utility.yul\":12401:12407 */\n 0x00\n /* \"#utility.yul\":12450:12453 */\n 0xa0\n /* \"#utility.yul\":12438:12447 */\n dup7\n /* \"#utility.yul\":12429:12436 */\n dup9\n /* \"#utility.yul\":12425:12448 */\n sub\n /* \"#utility.yul\":12421:12454 */\n slt\n /* \"#utility.yul\":12418:12538 */\n iszero\n tag_294\n jumpi\n /* \"#utility.yul\":12457:12536 */\n tag_295\n tag_76\n jump\t// in\n tag_295:\n /* \"#utility.yul\":12418:12538 */\n tag_294:\n /* \"#utility.yul\":12577:12578 */\n 0x00\n /* \"#utility.yul\":12602:12655 */\n tag_296\n /* \"#utility.yul\":12647:12654 */\n dup9\n /* \"#utility.yul\":12638:12644 */\n dup3\n /* \"#utility.yul\":12627:12636 */\n dup10\n /* \"#utility.yul\":12623:12645 */\n add\n /* \"#utility.yul\":12602:12655 */\n tag_108\n jump\t// in\n tag_296:\n /* \"#utility.yul\":12592:12655 */\n swap6\n pop\n /* \"#utility.yul\":12548:12665 */\n pop\n /* \"#utility.yul\":12704:12706 */\n 0x20\n /* \"#utility.yul\":12730:12783 */\n tag_297\n /* \"#utility.yul\":12775:12782 */\n dup9\n /* \"#utility.yul\":12766:12772 */\n dup3\n /* \"#utility.yul\":12755:12764 */\n dup10\n /* \"#utility.yul\":12751:12773 */\n add\n /* \"#utility.yul\":12730:12783 */\n tag_100\n jump\t// in\n tag_297:\n /* \"#utility.yul\":12720:12783 */\n swap5\n pop\n /* \"#utility.yul\":12675:12793 */\n pop\n /* \"#utility.yul\":12832:12834 */\n 0x40\n /* \"#utility.yul\":12858:12911 */\n tag_298\n /* \"#utility.yul\":12903:12910 */\n dup9\n /* \"#utility.yul\":12894:12900 */\n dup3\n /* \"#utility.yul\":12883:12892 */\n dup10\n /* \"#utility.yul\":12879:12901 */\n add\n /* \"#utility.yul\":12858:12911 */\n tag_100\n jump\t// in\n tag_298:\n /* \"#utility.yul\":12848:12911 */\n swap4\n pop\n /* \"#utility.yul\":12803:12921 */\n pop\n /* \"#utility.yul\":12988:12990 */\n 0x60\n /* \"#utility.yul\":12977:12986 */\n dup7\n /* \"#utility.yul\":12973:12991 */\n add\n /* \"#utility.yul\":12960:12992 */\n calldataload\n /* \"#utility.yul\":13019:13037 */\n 0xffffffffffffffff\n /* \"#utility.yul\":13011:13017 */\n dup2\n /* \"#utility.yul\":13008:13038 */\n gt\n /* \"#utility.yul\":13005:13122 */\n iszero\n tag_299\n jumpi\n /* \"#utility.yul\":13041:13120 */\n tag_300\n tag_77\n jump\t// in\n tag_300:\n /* \"#utility.yul\":13005:13122 */\n tag_299:\n /* \"#utility.yul\":13146:13229 */\n tag_301\n /* \"#utility.yul\":13221:13228 */\n dup9\n /* \"#utility.yul\":13212:13218 */\n dup3\n /* \"#utility.yul\":13201:13210 */\n dup10\n /* \"#utility.yul\":13197:13219 */\n add\n /* \"#utility.yul\":13146:13229 */\n tag_97\n jump\t// in\n tag_301:\n /* \"#utility.yul\":13136:13229 */\n swap3\n pop\n /* \"#utility.yul\":12931:13239 */\n pop\n /* \"#utility.yul\":13278:13281 */\n 0x80\n /* \"#utility.yul\":13305:13357 */\n tag_302\n /* \"#utility.yul\":13349:13356 */\n dup9\n /* \"#utility.yul\":13340:13346 */\n dup3\n /* \"#utility.yul\":13329:13338 */\n dup10\n /* \"#utility.yul\":13325:13347 */\n add\n /* \"#utility.yul\":13305:13357 */\n tag_103\n jump\t// in\n tag_302:\n /* \"#utility.yul\":13295:13357 */\n swap2\n pop\n /* \"#utility.yul\":13249:13367 */\n pop\n /* \"#utility.yul\":12245:13374 */\n swap3\n swap6\n pop\n swap3\n swap6\n swap1\n swap4\n pop\n jump\t// out\n /* \"#utility.yul\":13380:13440 */\n tag_115:\n /* \"#utility.yul\":13408:13411 */\n 0x00\n /* \"#utility.yul\":13429:13434 */\n dup2\n /* \"#utility.yul\":13422:13434 */\n swap1\n pop\n /* \"#utility.yul\":13380:13440 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13446:13588 */\n tag_116:\n /* \"#utility.yul\":13496:13505 */\n 0x00\n /* \"#utility.yul\":13529:13582 */\n tag_305\n /* \"#utility.yul\":13547:13581 */\n tag_306\n /* \"#utility.yul\":13556:13580 */\n tag_307\n /* \"#utility.yul\":13574:13579 */\n dup5\n /* \"#utility.yul\":13556:13580 */\n tag_105\n jump\t// in\n tag_307:\n /* \"#utility.yul\":13547:13581 */\n tag_115\n jump\t// in\n tag_306:\n /* \"#utility.yul\":13529:13582 */\n tag_105\n jump\t// in\n tag_305:\n /* \"#utility.yul\":13516:13582 */\n swap1\n pop\n /* \"#utility.yul\":13446:13588 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13594:13720 */\n tag_117:\n /* \"#utility.yul\":13644:13653 */\n 0x00\n /* \"#utility.yul\":13677:13714 */\n tag_309\n /* \"#utility.yul\":13708:13713 */\n dup3\n /* \"#utility.yul\":13677:13714 */\n tag_116\n jump\t// in\n tag_309:\n /* \"#utility.yul\":13664:13714 */\n swap1\n pop\n /* \"#utility.yul\":13594:13720 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13726:13867 */\n tag_118:\n /* \"#utility.yul\":13791:13800 */\n 0x00\n /* \"#utility.yul\":13824:13861 */\n tag_311\n /* \"#utility.yul\":13855:13860 */\n dup3\n /* \"#utility.yul\":13824:13861 */\n tag_117\n jump\t// in\n tag_311:\n /* \"#utility.yul\":13811:13861 */\n swap1\n pop\n /* \"#utility.yul\":13726:13867 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13873:14034 */\n tag_119:\n /* \"#utility.yul\":13975:14027 */\n tag_313\n /* \"#utility.yul\":14021:14026 */\n dup2\n /* \"#utility.yul\":13975:14027 */\n tag_118\n jump\t// in\n tag_313:\n /* \"#utility.yul\":13970:13973 */\n dup3\n /* \"#utility.yul\":13963:14028 */\n mstore\n /* \"#utility.yul\":13873:14034 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14040:14292 */\n tag_26:\n /* \"#utility.yul\":14148:14152 */\n 0x00\n /* \"#utility.yul\":14186:14188 */\n 0x20\n /* \"#utility.yul\":14175:14184 */\n dup3\n /* \"#utility.yul\":14171:14189 */\n add\n /* \"#utility.yul\":14163:14189 */\n swap1\n pop\n /* \"#utility.yul\":14199:14285 */\n tag_315\n /* \"#utility.yul\":14282:14283 */\n 0x00\n /* \"#utility.yul\":14271:14280 */\n dup4\n /* \"#utility.yul\":14267:14284 */\n add\n /* \"#utility.yul\":14258:14264 */\n dup5\n /* \"#utility.yul\":14199:14285 */\n tag_119\n jump\t// in\n tag_315:\n /* \"#utility.yul\":14040:14292 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14298:15501 */\n tag_29:\n /* \"#utility.yul\":14443:14449 */\n 0x00\n /* \"#utility.yul\":14451:14457 */\n dup1\n /* \"#utility.yul\":14459:14465 */\n 0x00\n /* \"#utility.yul\":14467:14473 */\n dup1\n /* \"#utility.yul\":14516:14519 */\n 0x80\n /* \"#utility.yul\":14504:14513 */\n dup6\n /* \"#utility.yul\":14495:14502 */\n dup8\n /* \"#utility.yul\":14491:14514 */\n sub\n /* \"#utility.yul\":14487:14520 */\n slt\n /* \"#utility.yul\":14484:14604 */\n iszero\n tag_317\n jumpi\n /* \"#utility.yul\":14523:14602 */\n tag_318\n tag_76\n jump\t// in\n tag_318:\n /* \"#utility.yul\":14484:14604 */\n tag_317:\n /* \"#utility.yul\":14671:14672 */\n 0x00\n /* \"#utility.yul\":14660:14669 */\n dup6\n /* \"#utility.yul\":14656:14673 */\n add\n /* \"#utility.yul\":14643:14674 */\n calldataload\n /* \"#utility.yul\":14701:14719 */\n 0xffffffffffffffff\n /* \"#utility.yul\":14693:14699 */\n dup2\n /* \"#utility.yul\":14690:14720 */\n gt\n /* \"#utility.yul\":14687:14804 */\n iszero\n tag_319\n jumpi\n /* \"#utility.yul\":14723:14802 */\n tag_320\n tag_77\n jump\t// in\n tag_320:\n /* \"#utility.yul\":14687:14804 */\n tag_319:\n /* \"#utility.yul\":14828:14911 */\n tag_321\n /* \"#utility.yul\":14903:14910 */\n dup8\n /* \"#utility.yul\":14894:14900 */\n dup3\n /* \"#utility.yul\":14883:14892 */\n dup9\n /* \"#utility.yul\":14879:14901 */\n add\n /* \"#utility.yul\":14828:14911 */\n tag_97\n jump\t// in\n tag_321:\n /* \"#utility.yul\":14818:14911 */\n swap5\n pop\n /* \"#utility.yul\":14614:14921 */\n pop\n /* \"#utility.yul\":14960:14962 */\n 0x20\n /* \"#utility.yul\":14986:15039 */\n tag_322\n /* \"#utility.yul\":15031:15038 */\n dup8\n /* \"#utility.yul\":15022:15028 */\n dup3\n /* \"#utility.yul\":15011:15020 */\n dup9\n /* \"#utility.yul\":15007:15029 */\n add\n /* \"#utility.yul\":14986:15039 */\n tag_100\n jump\t// in\n tag_322:\n /* \"#utility.yul\":14976:15039 */\n swap4\n pop\n /* \"#utility.yul\":14931:15049 */\n pop\n /* \"#utility.yul\":15116:15118 */\n 0x40\n /* \"#utility.yul\":15105:15114 */\n dup6\n /* \"#utility.yul\":15101:15119 */\n add\n /* \"#utility.yul\":15088:15120 */\n calldataload\n /* \"#utility.yul\":15147:15165 */\n 0xffffffffffffffff\n /* \"#utility.yul\":15139:15145 */\n dup2\n /* \"#utility.yul\":15136:15166 */\n gt\n /* \"#utility.yul\":15133:15250 */\n iszero\n tag_323\n jumpi\n /* \"#utility.yul\":15169:15248 */\n tag_324\n tag_77\n jump\t// in\n tag_324:\n /* \"#utility.yul\":15133:15250 */\n tag_323:\n /* \"#utility.yul\":15274:15357 */\n tag_325\n /* \"#utility.yul\":15349:15356 */\n dup8\n /* \"#utility.yul\":15340:15346 */\n dup3\n /* \"#utility.yul\":15329:15338 */\n dup9\n /* \"#utility.yul\":15325:15347 */\n add\n /* \"#utility.yul\":15274:15357 */\n tag_97\n jump\t// in\n tag_325:\n /* \"#utility.yul\":15264:15357 */\n swap3\n pop\n /* \"#utility.yul\":15059:15367 */\n pop\n /* \"#utility.yul\":15406:15408 */\n 0x60\n /* \"#utility.yul\":15432:15484 */\n tag_326\n /* \"#utility.yul\":15476:15483 */\n dup8\n /* \"#utility.yul\":15467:15473 */\n dup3\n /* \"#utility.yul\":15456:15465 */\n dup9\n /* \"#utility.yul\":15452:15474 */\n add\n /* \"#utility.yul\":15432:15484 */\n tag_103\n jump\t// in\n tag_326:\n /* \"#utility.yul\":15422:15484 */\n swap2\n pop\n /* \"#utility.yul\":15377:15494 */\n pop\n /* \"#utility.yul\":14298:15501 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":15507:16490 */\n tag_33:\n /* \"#utility.yul\":15622:15628 */\n 0x00\n /* \"#utility.yul\":15630:15636 */\n dup1\n /* \"#utility.yul\":15638:15644 */\n 0x00\n /* \"#utility.yul\":15646:15652 */\n dup1\n /* \"#utility.yul\":15695:15698 */\n 0x80\n /* \"#utility.yul\":15683:15692 */\n dup6\n /* \"#utility.yul\":15674:15681 */\n dup8\n /* \"#utility.yul\":15670:15693 */\n sub\n /* \"#utility.yul\":15666:15699 */\n slt\n /* \"#utility.yul\":15663:15783 */\n iszero\n tag_328\n jumpi\n /* \"#utility.yul\":15702:15781 */\n tag_329\n tag_76\n jump\t// in\n tag_329:\n /* \"#utility.yul\":15663:15783 */\n tag_328:\n /* \"#utility.yul\":15822:15823 */\n 0x00\n /* \"#utility.yul\":15847:15900 */\n tag_330\n /* \"#utility.yul\":15892:15899 */\n dup8\n /* \"#utility.yul\":15883:15889 */\n dup3\n /* \"#utility.yul\":15872:15881 */\n dup9\n /* \"#utility.yul\":15868:15890 */\n add\n /* \"#utility.yul\":15847:15900 */\n tag_108\n jump\t// in\n tag_330:\n /* \"#utility.yul\":15837:15900 */\n swap5\n pop\n /* \"#utility.yul\":15793:15910 */\n pop\n /* \"#utility.yul\":15949:15951 */\n 0x20\n /* \"#utility.yul\":15975:16028 */\n tag_331\n /* \"#utility.yul\":16020:16027 */\n dup8\n /* \"#utility.yul\":16011:16017 */\n dup3\n /* \"#utility.yul\":16000:16009 */\n dup9\n /* \"#utility.yul\":15996:16018 */\n add\n /* \"#utility.yul\":15975:16028 */\n tag_100\n jump\t// in\n tag_331:\n /* \"#utility.yul\":15965:16028 */\n swap4\n pop\n /* \"#utility.yul\":15920:16038 */\n pop\n /* \"#utility.yul\":16105:16107 */\n 0x40\n /* \"#utility.yul\":16094:16103 */\n dup6\n /* \"#utility.yul\":16090:16108 */\n add\n /* \"#utility.yul\":16077:16109 */\n calldataload\n /* \"#utility.yul\":16136:16154 */\n 0xffffffffffffffff\n /* \"#utility.yul\":16128:16134 */\n dup2\n /* \"#utility.yul\":16125:16155 */\n gt\n /* \"#utility.yul\":16122:16239 */\n iszero\n tag_332\n jumpi\n /* \"#utility.yul\":16158:16237 */\n tag_333\n tag_77\n jump\t// in\n tag_333:\n /* \"#utility.yul\":16122:16239 */\n tag_332:\n /* \"#utility.yul\":16263:16346 */\n tag_334\n /* \"#utility.yul\":16338:16345 */\n dup8\n /* \"#utility.yul\":16329:16335 */\n dup3\n /* \"#utility.yul\":16318:16327 */\n dup9\n /* \"#utility.yul\":16314:16336 */\n add\n /* \"#utility.yul\":16263:16346 */\n tag_97\n jump\t// in\n tag_334:\n /* \"#utility.yul\":16253:16346 */\n swap3\n pop\n /* \"#utility.yul\":16048:16356 */\n pop\n /* \"#utility.yul\":16395:16397 */\n 0x60\n /* \"#utility.yul\":16421:16473 */\n tag_335\n /* \"#utility.yul\":16465:16472 */\n dup8\n /* \"#utility.yul\":16456:16462 */\n dup3\n /* \"#utility.yul\":16445:16454 */\n dup9\n /* \"#utility.yul\":16441:16463 */\n add\n /* \"#utility.yul\":16421:16473 */\n tag_103\n jump\t// in\n tag_335:\n /* \"#utility.yul\":16411:16473 */\n swap2\n pop\n /* \"#utility.yul\":16366:16483 */\n pop\n /* \"#utility.yul\":15507:16490 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":16496:16834 */\n tag_120:\n /* \"#utility.yul\":16600:16604 */\n 0x00\n /* \"#utility.yul\":16690:16708 */\n 0xffffffffffffffff\n /* \"#utility.yul\":16682:16688 */\n dup3\n /* \"#utility.yul\":16679:16709 */\n gt\n /* \"#utility.yul\":16676:16732 */\n iszero\n tag_337\n jumpi\n /* \"#utility.yul\":16712:16730 */\n tag_338\n tag_80\n jump\t// in\n tag_338:\n /* \"#utility.yul\":16676:16732 */\n tag_337:\n /* \"#utility.yul\":16762:16766 */\n 0x20\n /* \"#utility.yul\":16754:16760 */\n dup3\n /* \"#utility.yul\":16750:16767 */\n mul\n /* \"#utility.yul\":16742:16767 */\n swap1\n pop\n /* \"#utility.yul\":16822:16826 */\n 0x20\n /* \"#utility.yul\":16816:16820 */\n dup2\n /* \"#utility.yul\":16812:16827 */\n add\n /* \"#utility.yul\":16804:16827 */\n swap1\n pop\n /* \"#utility.yul\":16496:16834 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":16873:17645 */\n tag_121:\n /* \"#utility.yul\":16949:16954 */\n 0x00\n /* \"#utility.yul\":16993:16997 */\n 0x40\n /* \"#utility.yul\":16981:16990 */\n dup3\n /* \"#utility.yul\":16976:16979 */\n dup5\n /* \"#utility.yul\":16972:16991 */\n sub\n /* \"#utility.yul\":16968:16998 */\n slt\n /* \"#utility.yul\":16965:17082 */\n iszero\n tag_340\n jumpi\n /* \"#utility.yul\":17001:17080 */\n tag_341\n tag_78\n jump\t// in\n tag_341:\n /* \"#utility.yul\":16965:17082 */\n tag_340:\n /* \"#utility.yul\":17100:17121 */\n tag_342\n /* \"#utility.yul\":17116:17120 */\n 0x40\n /* \"#utility.yul\":17100:17121 */\n tag_82\n jump\t// in\n tag_342:\n /* \"#utility.yul\":17091:17121 */\n swap1\n pop\n /* \"#utility.yul\":17212:17213 */\n 0x00\n /* \"#utility.yul\":17201:17210 */\n dup3\n /* \"#utility.yul\":17197:17214 */\n add\n /* \"#utility.yul\":17184:17215 */\n calldataload\n /* \"#utility.yul\":17242:17260 */\n 0xffffffffffffffff\n /* \"#utility.yul\":17234:17240 */\n dup2\n /* \"#utility.yul\":17231:17261 */\n gt\n /* \"#utility.yul\":17228:17345 */\n iszero\n tag_343\n jumpi\n /* \"#utility.yul\":17264:17343 */\n tag_344\n tag_83\n jump\t// in\n tag_344:\n /* \"#utility.yul\":17228:17345 */\n tag_343:\n /* \"#utility.yul\":17384:17463 */\n tag_345\n /* \"#utility.yul\":17459:17462 */\n dup5\n /* \"#utility.yul\":17450:17456 */\n dup3\n /* \"#utility.yul\":17439:17448 */\n dup6\n /* \"#utility.yul\":17435:17457 */\n add\n /* \"#utility.yul\":17384:17463 */\n tag_97\n jump\t// in\n tag_345:\n /* \"#utility.yul\":17377:17381 */\n 0x00\n /* \"#utility.yul\":17370:17375 */\n dup4\n /* \"#utility.yul\":17366:17382 */\n add\n /* \"#utility.yul\":17359:17464 */\n mstore\n /* \"#utility.yul\":17131:17475 */\n pop\n /* \"#utility.yul\":17536:17538 */\n 0x20\n /* \"#utility.yul\":17577:17626 */\n tag_346\n /* \"#utility.yul\":17622:17625 */\n dup5\n /* \"#utility.yul\":17613:17619 */\n dup3\n /* \"#utility.yul\":17602:17611 */\n dup6\n /* \"#utility.yul\":17598:17620 */\n add\n /* \"#utility.yul\":17577:17626 */\n tag_100\n jump\t// in\n tag_346:\n /* \"#utility.yul\":17570:17574 */\n 0x20\n /* \"#utility.yul\":17563:17568 */\n dup4\n /* \"#utility.yul\":17559:17575 */\n add\n /* \"#utility.yul\":17552:17627 */\n mstore\n /* \"#utility.yul\":17485:17638 */\n pop\n /* \"#utility.yul\":16873:17645 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17686:18682 */\n tag_122:\n /* \"#utility.yul\":17809:17814 */\n 0x00\n /* \"#utility.yul\":17834:17942 */\n tag_348\n /* \"#utility.yul\":17850:17941 */\n tag_349\n /* \"#utility.yul\":17934:17940 */\n dup5\n /* \"#utility.yul\":17850:17941 */\n tag_120\n jump\t// in\n tag_349:\n /* \"#utility.yul\":17834:17942 */\n tag_82\n jump\t// in\n tag_348:\n /* \"#utility.yul\":17825:17942 */\n swap1\n pop\n /* \"#utility.yul\":17962:17967 */\n dup1\n /* \"#utility.yul\":17991:17997 */\n dup4\n /* \"#utility.yul\":17984:17989 */\n dup3\n /* \"#utility.yul\":17977:17998 */\n mstore\n /* \"#utility.yul\":18025:18029 */\n 0x20\n /* \"#utility.yul\":18018:18023 */\n dup3\n /* \"#utility.yul\":18014:18030 */\n add\n /* \"#utility.yul\":18007:18030 */\n swap1\n pop\n /* \"#utility.yul\":18078:18082 */\n 0x20\n /* \"#utility.yul\":18070:18076 */\n dup5\n /* \"#utility.yul\":18066:18083 */\n mul\n /* \"#utility.yul\":18058:18064 */\n dup4\n /* \"#utility.yul\":18054:18084 */\n add\n /* \"#utility.yul\":18107:18110 */\n dup6\n /* \"#utility.yul\":18099:18105 */\n dup2\n /* \"#utility.yul\":18096:18111 */\n gt\n /* \"#utility.yul\":18093:18215 */\n iszero\n tag_350\n jumpi\n /* \"#utility.yul\":18126:18205 */\n tag_351\n tag_89\n jump\t// in\n tag_351:\n /* \"#utility.yul\":18093:18215 */\n tag_350:\n /* \"#utility.yul\":18241:18247 */\n dup4\n /* \"#utility.yul\":18224:18676 */\n tag_352:\n /* \"#utility.yul\":18258:18264 */\n dup2\n /* \"#utility.yul\":18253:18256 */\n dup2\n /* \"#utility.yul\":18250:18265 */\n lt\n /* \"#utility.yul\":18224:18676 */\n iszero\n tag_354\n jumpi\n /* \"#utility.yul\":18347:18350 */\n dup1\n /* \"#utility.yul\":18334:18351 */\n calldataload\n /* \"#utility.yul\":18383:18401 */\n 0xffffffffffffffff\n /* \"#utility.yul\":18370:18381 */\n dup2\n /* \"#utility.yul\":18367:18402 */\n gt\n /* \"#utility.yul\":18364:18486 */\n iszero\n tag_355\n jumpi\n /* \"#utility.yul\":18405:18484 */\n tag_356\n tag_87\n jump\t// in\n tag_356:\n /* \"#utility.yul\":18364:18486 */\n tag_355:\n /* \"#utility.yul\":18529:18540 */\n dup1\n /* \"#utility.yul\":18521:18527 */\n dup7\n /* \"#utility.yul\":18517:18541 */\n add\n /* \"#utility.yul\":18567:18631 */\n tag_357\n /* \"#utility.yul\":18627:18630 */\n dup10\n /* \"#utility.yul\":18615:18625 */\n dup3\n /* \"#utility.yul\":18567:18631 */\n tag_121\n jump\t// in\n tag_357:\n /* \"#utility.yul\":18562:18565 */\n dup6\n /* \"#utility.yul\":18555:18632 */\n mstore\n /* \"#utility.yul\":18661:18665 */\n 0x20\n /* \"#utility.yul\":18656:18659 */\n dup6\n /* \"#utility.yul\":18652:18666 */\n add\n /* \"#utility.yul\":18645:18666 */\n swap5\n pop\n /* \"#utility.yul\":18300:18676 */\n pop\n pop\n /* \"#utility.yul\":18284:18288 */\n 0x20\n /* \"#utility.yul\":18279:18282 */\n dup2\n /* \"#utility.yul\":18275:18289 */\n add\n /* \"#utility.yul\":18268:18289 */\n swap1\n pop\n /* \"#utility.yul\":18224:18676 */\n jump(tag_352)\n tag_354:\n /* \"#utility.yul\":18228:18249 */\n pop\n /* \"#utility.yul\":17815:18682 */\n pop\n pop\n /* \"#utility.yul\":17686:18682 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18723:19147 */\n tag_123:\n /* \"#utility.yul\":18821:18826 */\n 0x00\n /* \"#utility.yul\":18870:18873 */\n dup3\n /* \"#utility.yul\":18863:18867 */\n 0x1f\n /* \"#utility.yul\":18855:18861 */\n dup4\n /* \"#utility.yul\":18851:18868 */\n add\n /* \"#utility.yul\":18847:18874 */\n slt\n /* \"#utility.yul\":18837:18959 */\n tag_359\n jumpi\n /* \"#utility.yul\":18878:18957 */\n tag_360\n tag_87\n jump\t// in\n tag_360:\n /* \"#utility.yul\":18837:18959 */\n tag_359:\n /* \"#utility.yul\":18995:19001 */\n dup2\n /* \"#utility.yul\":18982:19002 */\n calldataload\n /* \"#utility.yul\":19020:19141 */\n tag_361\n /* \"#utility.yul\":19137:19140 */\n dup5\n /* \"#utility.yul\":19129:19135 */\n dup3\n /* \"#utility.yul\":19122:19126 */\n 0x20\n /* \"#utility.yul\":19114:19120 */\n dup7\n /* \"#utility.yul\":19110:19127 */\n add\n /* \"#utility.yul\":19020:19141 */\n tag_122\n jump\t// in\n tag_361:\n /* \"#utility.yul\":19011:19141 */\n swap2\n pop\n /* \"#utility.yul\":18827:19147 */\n pop\n /* \"#utility.yul\":18723:19147 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19153:20398 */\n tag_37:\n /* \"#utility.yul\":19319:19325 */\n 0x00\n /* \"#utility.yul\":19327:19333 */\n dup1\n /* \"#utility.yul\":19335:19341 */\n 0x00\n /* \"#utility.yul\":19343:19349 */\n dup1\n /* \"#utility.yul\":19392:19395 */\n 0x80\n /* \"#utility.yul\":19380:19389 */\n dup6\n /* \"#utility.yul\":19371:19378 */\n dup8\n /* \"#utility.yul\":19367:19390 */\n sub\n /* \"#utility.yul\":19363:19396 */\n slt\n /* \"#utility.yul\":19360:19480 */\n iszero\n tag_363\n jumpi\n /* \"#utility.yul\":19399:19478 */\n tag_364\n tag_76\n jump\t// in\n tag_364:\n /* \"#utility.yul\":19360:19480 */\n tag_363:\n /* \"#utility.yul\":19547:19548 */\n 0x00\n /* \"#utility.yul\":19536:19545 */\n dup6\n /* \"#utility.yul\":19532:19549 */\n add\n /* \"#utility.yul\":19519:19550 */\n calldataload\n /* \"#utility.yul\":19577:19595 */\n 0xffffffffffffffff\n /* \"#utility.yul\":19569:19575 */\n dup2\n /* \"#utility.yul\":19566:19596 */\n gt\n /* \"#utility.yul\":19563:19680 */\n iszero\n tag_365\n jumpi\n /* \"#utility.yul\":19599:19678 */\n tag_366\n tag_77\n jump\t// in\n tag_366:\n /* \"#utility.yul\":19563:19680 */\n tag_365:\n /* \"#utility.yul\":19704:19809 */\n tag_367\n /* \"#utility.yul\":19801:19808 */\n dup8\n /* \"#utility.yul\":19792:19798 */\n dup3\n /* \"#utility.yul\":19781:19790 */\n dup9\n /* \"#utility.yul\":19777:19799 */\n add\n /* \"#utility.yul\":19704:19809 */\n tag_123\n jump\t// in\n tag_367:\n /* \"#utility.yul\":19694:19809 */\n swap5\n pop\n /* \"#utility.yul\":19490:19819 */\n pop\n /* \"#utility.yul\":19858:19860 */\n 0x20\n /* \"#utility.yul\":19884:19936 */\n tag_368\n /* \"#utility.yul\":19928:19935 */\n dup8\n /* \"#utility.yul\":19919:19925 */\n dup3\n /* \"#utility.yul\":19908:19917 */\n dup9\n /* \"#utility.yul\":19904:19926 */\n add\n /* \"#utility.yul\":19884:19936 */\n tag_114\n jump\t// in\n tag_368:\n /* \"#utility.yul\":19874:19936 */\n swap4\n pop\n /* \"#utility.yul\":19829:19946 */\n pop\n /* \"#utility.yul\":20013:20015 */\n 0x40\n /* \"#utility.yul\":20002:20011 */\n dup6\n /* \"#utility.yul\":19998:20016 */\n add\n /* \"#utility.yul\":19985:20017 */\n calldataload\n /* \"#utility.yul\":20044:20062 */\n 0xffffffffffffffff\n /* \"#utility.yul\":20036:20042 */\n dup2\n /* \"#utility.yul\":20033:20063 */\n gt\n /* \"#utility.yul\":20030:20147 */\n iszero\n tag_369\n jumpi\n /* \"#utility.yul\":20066:20145 */\n tag_370\n tag_77\n jump\t// in\n tag_370:\n /* \"#utility.yul\":20030:20147 */\n tag_369:\n /* \"#utility.yul\":20171:20254 */\n tag_371\n /* \"#utility.yul\":20246:20253 */\n dup8\n /* \"#utility.yul\":20237:20243 */\n dup3\n /* \"#utility.yul\":20226:20235 */\n dup9\n /* \"#utility.yul\":20222:20244 */\n add\n /* \"#utility.yul\":20171:20254 */\n tag_97\n jump\t// in\n tag_371:\n /* \"#utility.yul\":20161:20254 */\n swap3\n pop\n /* \"#utility.yul\":19956:20264 */\n pop\n /* \"#utility.yul\":20303:20305 */\n 0x60\n /* \"#utility.yul\":20329:20381 */\n tag_372\n /* \"#utility.yul\":20373:20380 */\n dup8\n /* \"#utility.yul\":20364:20370 */\n dup3\n /* \"#utility.yul\":20353:20362 */\n dup9\n /* \"#utility.yul\":20349:20371 */\n add\n /* \"#utility.yul\":20329:20381 */\n tag_103\n jump\t// in\n tag_372:\n /* \"#utility.yul\":20319:20381 */\n swap2\n pop\n /* \"#utility.yul\":20274:20391 */\n pop\n /* \"#utility.yul\":19153:20398 */\n swap3\n swap6\n swap2\n swap5\n pop\n swap3\n pop\n jump\t// out\n /* \"#utility.yul\":20404:20506 */\n tag_124:\n /* \"#utility.yul\":20477:20499 */\n tag_374\n /* \"#utility.yul\":20493:20498 */\n dup2\n /* \"#utility.yul\":20477:20499 */\n tag_84\n jump\t// in\n tag_374:\n /* \"#utility.yul\":20472:20475 */\n dup3\n /* \"#utility.yul\":20465:20500 */\n mstore\n /* \"#utility.yul\":20404:20506 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20512:20635 */\n tag_125:\n /* \"#utility.yul\":20588:20594 */\n 0x00\n /* \"#utility.yul\":20622:20627 */\n dup2\n /* \"#utility.yul\":20616:20628 */\n mload\n /* \"#utility.yul\":20606:20628 */\n swap1\n pop\n /* \"#utility.yul\":20512:20635 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":20641:20824 */\n tag_126:\n /* \"#utility.yul\":20739:20750 */\n 0x00\n /* \"#utility.yul\":20773:20779 */\n dup3\n /* \"#utility.yul\":20768:20771 */\n dup3\n /* \"#utility.yul\":20761:20780 */\n mstore\n /* \"#utility.yul\":20813:20817 */\n 0x20\n /* \"#utility.yul\":20808:20811 */\n dup3\n /* \"#utility.yul\":20804:20818 */\n add\n /* \"#utility.yul\":20789:20818 */\n swap1\n pop\n /* \"#utility.yul\":20641:20824 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":20830:20971 */\n tag_127:\n /* \"#utility.yul\":20906:20910 */\n 0x00\n /* \"#utility.yul\":20929:20932 */\n dup2\n /* \"#utility.yul\":20921:20932 */\n swap1\n pop\n /* \"#utility.yul\":20959:20963 */\n 0x20\n /* \"#utility.yul\":20954:20957 */\n dup3\n /* \"#utility.yul\":20950:20964 */\n add\n /* \"#utility.yul\":20942:20964 */\n swap1\n pop\n /* \"#utility.yul\":20830:20971 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":20977:21075 */\n tag_128:\n /* \"#utility.yul\":21028:21034 */\n 0x00\n /* \"#utility.yul\":21062:21067 */\n dup2\n /* \"#utility.yul\":21056:21068 */\n mload\n /* \"#utility.yul\":21046:21068 */\n swap1\n pop\n /* \"#utility.yul\":20977:21075 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":21081:21239 */\n tag_129:\n /* \"#utility.yul\":21154:21165 */\n 0x00\n /* \"#utility.yul\":21188:21194 */\n dup3\n /* \"#utility.yul\":21183:21186 */\n dup3\n /* \"#utility.yul\":21176:21195 */\n mstore\n /* \"#utility.yul\":21228:21232 */\n 0x20\n /* \"#utility.yul\":21223:21226 */\n dup3\n /* \"#utility.yul\":21219:21233 */\n add\n /* \"#utility.yul\":21204:21233 */\n swap1\n pop\n /* \"#utility.yul\":21081:21239 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21245:21552 */\n tag_130:\n /* \"#utility.yul\":21313:21314 */\n 0x00\n /* \"#utility.yul\":21323:21436 */\n tag_381:\n /* \"#utility.yul\":21337:21343 */\n dup4\n /* \"#utility.yul\":21334:21335 */\n dup2\n /* \"#utility.yul\":21331:21344 */\n lt\n /* \"#utility.yul\":21323:21436 */\n iszero\n tag_383\n jumpi\n /* \"#utility.yul\":21422:21423 */\n dup1\n /* \"#utility.yul\":21417:21420 */\n dup3\n /* \"#utility.yul\":21413:21424 */\n add\n /* \"#utility.yul\":21407:21425 */\n mload\n /* \"#utility.yul\":21403:21404 */\n dup2\n /* \"#utility.yul\":21398:21401 */\n dup5\n /* \"#utility.yul\":21394:21405 */\n add\n /* \"#utility.yul\":21387:21426 */\n mstore\n /* \"#utility.yul\":21359:21361 */\n 0x20\n /* \"#utility.yul\":21356:21357 */\n dup2\n /* \"#utility.yul\":21352:21362 */\n add\n /* \"#utility.yul\":21347:21362 */\n swap1\n pop\n /* \"#utility.yul\":21323:21436 */\n jump(tag_381)\n tag_383:\n /* \"#utility.yul\":21454:21460 */\n dup4\n /* \"#utility.yul\":21451:21452 */\n dup2\n /* \"#utility.yul\":21448:21461 */\n gt\n /* \"#utility.yul\":21445:21546 */\n iszero\n tag_384\n jumpi\n /* \"#utility.yul\":21534:21535 */\n 0x00\n /* \"#utility.yul\":21525:21531 */\n dup5\n /* \"#utility.yul\":21520:21523 */\n dup5\n /* \"#utility.yul\":21516:21532 */\n add\n /* \"#utility.yul\":21509:21536 */\n mstore\n /* \"#utility.yul\":21445:21546 */\n tag_384:\n /* \"#utility.yul\":21294:21552 */\n pop\n /* \"#utility.yul\":21245:21552 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21558:21898 */\n tag_131:\n /* \"#utility.yul\":21634:21637 */\n 0x00\n /* \"#utility.yul\":21662:21700 */\n tag_386\n /* \"#utility.yul\":21694:21699 */\n dup3\n /* \"#utility.yul\":21662:21700 */\n tag_128\n jump\t// in\n tag_386:\n /* \"#utility.yul\":21716:21776 */\n tag_387\n /* \"#utility.yul\":21769:21775 */\n dup2\n /* \"#utility.yul\":21764:21767 */\n dup6\n /* \"#utility.yul\":21716:21776 */\n tag_129\n jump\t// in\n tag_387:\n /* \"#utility.yul\":21709:21776 */\n swap4\n pop\n /* \"#utility.yul\":21785:21837 */\n tag_388\n /* \"#utility.yul\":21830:21836 */\n dup2\n /* \"#utility.yul\":21825:21828 */\n dup6\n /* \"#utility.yul\":21818:21822 */\n 0x20\n /* \"#utility.yul\":21811:21816 */\n dup7\n /* \"#utility.yul\":21807:21823 */\n add\n /* \"#utility.yul\":21785:21837 */\n tag_130\n jump\t// in\n tag_388:\n /* \"#utility.yul\":21862:21891 */\n tag_389\n /* \"#utility.yul\":21884:21890 */\n dup2\n /* \"#utility.yul\":21862:21891 */\n tag_79\n jump\t// in\n tag_389:\n /* \"#utility.yul\":21857:21860 */\n dup5\n /* \"#utility.yul\":21853:21892 */\n add\n /* \"#utility.yul\":21846:21892 */\n swap2\n pop\n /* \"#utility.yul\":21638:21898 */\n pop\n /* \"#utility.yul\":21558:21898 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21904:22096 */\n tag_132:\n /* \"#utility.yul\":21991:22001 */\n 0x00\n /* \"#utility.yul\":22026:22090 */\n tag_391\n /* \"#utility.yul\":22086:22089 */\n dup4\n /* \"#utility.yul\":22078:22084 */\n dup4\n /* \"#utility.yul\":22026:22090 */\n tag_131\n jump\t// in\n tag_391:\n /* \"#utility.yul\":22012:22090 */\n swap1\n pop\n /* \"#utility.yul\":21904:22096 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":22102:22224 */\n tag_133:\n /* \"#utility.yul\":22181:22185 */\n 0x00\n /* \"#utility.yul\":22213:22217 */\n 0x20\n /* \"#utility.yul\":22208:22211 */\n dup3\n /* \"#utility.yul\":22204:22218 */\n add\n /* \"#utility.yul\":22196:22218 */\n swap1\n pop\n /* \"#utility.yul\":22102:22224 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":22256:23219 */\n tag_134:\n /* \"#utility.yul\":22383:22386 */\n 0x00\n /* \"#utility.yul\":22412:22475 */\n tag_394\n /* \"#utility.yul\":22469:22474 */\n dup3\n /* \"#utility.yul\":22412:22475 */\n tag_125\n jump\t// in\n tag_394:\n /* \"#utility.yul\":22491:22576 */\n tag_395\n /* \"#utility.yul\":22569:22575 */\n dup2\n /* \"#utility.yul\":22564:22567 */\n dup6\n /* \"#utility.yul\":22491:22576 */\n tag_126\n jump\t// in\n tag_395:\n /* \"#utility.yul\":22484:22576 */\n swap4\n pop\n /* \"#utility.yul\":22602:22605 */\n dup4\n /* \"#utility.yul\":22647:22651 */\n 0x20\n /* \"#utility.yul\":22639:22645 */\n dup3\n /* \"#utility.yul\":22635:22652 */\n mul\n /* \"#utility.yul\":22630:22633 */\n dup6\n /* \"#utility.yul\":22626:22653 */\n add\n /* \"#utility.yul\":22677:22742 */\n tag_396\n /* \"#utility.yul\":22736:22741 */\n dup6\n /* \"#utility.yul\":22677:22742 */\n tag_127\n jump\t// in\n tag_396:\n /* \"#utility.yul\":22765:22772 */\n dup1\n /* \"#utility.yul\":22796:22797 */\n 0x00\n /* \"#utility.yul\":22781:23174 */\n tag_397:\n /* \"#utility.yul\":22806:22812 */\n dup6\n /* \"#utility.yul\":22803:22804 */\n dup2\n /* \"#utility.yul\":22800:22813 */\n lt\n /* \"#utility.yul\":22781:23174 */\n iszero\n tag_399\n jumpi\n /* \"#utility.yul\":22877:22886 */\n dup5\n /* \"#utility.yul\":22871:22875 */\n dup5\n /* \"#utility.yul\":22867:22887 */\n sub\n /* \"#utility.yul\":22862:22865 */\n dup10\n /* \"#utility.yul\":22855:22888 */\n mstore\n /* \"#utility.yul\":22928:22934 */\n dup2\n /* \"#utility.yul\":22922:22935 */\n mload\n /* \"#utility.yul\":22956:23038 */\n tag_400\n /* \"#utility.yul\":23033:23037 */\n dup6\n /* \"#utility.yul\":23018:23031 */\n dup3\n /* \"#utility.yul\":22956:23038 */\n tag_132\n jump\t// in\n tag_400:\n /* \"#utility.yul\":22948:23038 */\n swap5\n pop\n /* \"#utility.yul\":23061:23130 */\n tag_401\n /* \"#utility.yul\":23123:23129 */\n dup4\n /* \"#utility.yul\":23061:23130 */\n tag_133\n jump\t// in\n tag_401:\n /* \"#utility.yul\":23051:23130 */\n swap3\n pop\n /* \"#utility.yul\":23159:23163 */\n 0x20\n /* \"#utility.yul\":23154:23157 */\n dup11\n /* \"#utility.yul\":23150:23164 */\n add\n /* \"#utility.yul\":23143:23164 */\n swap10\n pop\n /* \"#utility.yul\":22841:23174 */\n pop\n /* \"#utility.yul\":22828:22829 */\n 0x01\n /* \"#utility.yul\":22825:22826 */\n dup2\n /* \"#utility.yul\":22821:22830 */\n add\n /* \"#utility.yul\":22816:22830 */\n swap1\n pop\n /* \"#utility.yul\":22781:23174 */\n jump(tag_397)\n tag_399:\n /* \"#utility.yul\":22785:22799 */\n pop\n /* \"#utility.yul\":23190:23194 */\n dup3\n /* \"#utility.yul\":23183:23194 */\n swap8\n pop\n /* \"#utility.yul\":23210:23213 */\n dup8\n /* \"#utility.yul\":23203:23213 */\n swap6\n pop\n /* \"#utility.yul\":22388:23219 */\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":22256:23219 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":23293:23960 */\n tag_135:\n /* \"#utility.yul\":23422:23425 */\n 0x00\n /* \"#utility.yul\":23458:23462 */\n 0x40\n /* \"#utility.yul\":23453:23456 */\n dup4\n /* \"#utility.yul\":23449:23463 */\n add\n /* \"#utility.yul\":23548:23552 */\n 0x00\n /* \"#utility.yul\":23541:23546 */\n dup4\n /* \"#utility.yul\":23537:23553 */\n add\n /* \"#utility.yul\":23531:23554 */\n mload\n /* \"#utility.yul\":23567:23626 */\n tag_403\n /* \"#utility.yul\":23620:23624 */\n 0x00\n /* \"#utility.yul\":23615:23618 */\n dup7\n /* \"#utility.yul\":23611:23625 */\n add\n /* \"#utility.yul\":23597:23609 */\n dup3\n /* \"#utility.yul\":23567:23626 */\n tag_124\n jump\t// in\n tag_403:\n /* \"#utility.yul\":23473:23636 */\n pop\n /* \"#utility.yul\":23722:23726 */\n 0x20\n /* \"#utility.yul\":23715:23720 */\n dup4\n /* \"#utility.yul\":23711:23727 */\n add\n /* \"#utility.yul\":23705:23728 */\n mload\n /* \"#utility.yul\":23775:23778 */\n dup5\n /* \"#utility.yul\":23769:23773 */\n dup3\n /* \"#utility.yul\":23765:23779 */\n sub\n /* \"#utility.yul\":23758:23762 */\n 0x20\n /* \"#utility.yul\":23753:23756 */\n dup7\n /* \"#utility.yul\":23749:23763 */\n add\n /* \"#utility.yul\":23742:23780 */\n mstore\n /* \"#utility.yul\":23801:23922 */\n tag_404\n /* \"#utility.yul\":23917:23921 */\n dup3\n /* \"#utility.yul\":23903:23915 */\n dup3\n /* \"#utility.yul\":23801:23922 */\n tag_134\n jump\t// in\n tag_404:\n /* \"#utility.yul\":23793:23922 */\n swap2\n pop\n /* \"#utility.yul\":23646:23933 */\n pop\n /* \"#utility.yul\":23950:23954 */\n dup1\n /* \"#utility.yul\":23943:23954 */\n swap2\n pop\n /* \"#utility.yul\":23427:23960 */\n pop\n /* \"#utility.yul\":23293:23960 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":23966:24084 */\n tag_136:\n /* \"#utility.yul\":24053:24077 */\n tag_406\n /* \"#utility.yul\":24071:24076 */\n dup2\n /* \"#utility.yul\":24053:24077 */\n tag_98\n jump\t// in\n tag_406:\n /* \"#utility.yul\":24048:24051 */\n dup3\n /* \"#utility.yul\":24041:24078 */\n mstore\n /* \"#utility.yul\":23966:24084 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":24090:24205 */\n tag_137:\n /* \"#utility.yul\":24175:24198 */\n tag_408\n /* \"#utility.yul\":24192:24197 */\n dup2\n /* \"#utility.yul\":24175:24198 */\n tag_101\n jump\t// in\n tag_408:\n /* \"#utility.yul\":24170:24173 */\n dup3\n /* \"#utility.yul\":24163:24199 */\n mstore\n /* \"#utility.yul\":24090:24205 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":24211:25213 */\n tag_41:\n /* \"#utility.yul\":24534:24538 */\n 0x00\n /* \"#utility.yul\":24572:24575 */\n 0xa0\n /* \"#utility.yul\":24561:24570 */\n dup3\n /* \"#utility.yul\":24557:24576 */\n add\n /* \"#utility.yul\":24549:24576 */\n swap1\n pop\n /* \"#utility.yul\":24622:24631 */\n dup2\n /* \"#utility.yul\":24616:24620 */\n dup2\n /* \"#utility.yul\":24612:24632 */\n sub\n /* \"#utility.yul\":24608:24609 */\n 0x00\n /* \"#utility.yul\":24597:24606 */\n dup4\n /* \"#utility.yul\":24593:24610 */\n add\n /* \"#utility.yul\":24586:24633 */\n mstore\n /* \"#utility.yul\":24650:24768 */\n tag_410\n /* \"#utility.yul\":24763:24767 */\n dup2\n /* \"#utility.yul\":24754:24760 */\n dup9\n /* \"#utility.yul\":24650:24768 */\n tag_135\n jump\t// in\n tag_410:\n /* \"#utility.yul\":24642:24768 */\n swap1\n pop\n /* \"#utility.yul\":24778:24850 */\n tag_411\n /* \"#utility.yul\":24846:24848 */\n 0x20\n /* \"#utility.yul\":24835:24844 */\n dup4\n /* \"#utility.yul\":24831:24849 */\n add\n /* \"#utility.yul\":24822:24828 */\n dup8\n /* \"#utility.yul\":24778:24850 */\n tag_136\n jump\t// in\n tag_411:\n /* \"#utility.yul\":24860:24932 */\n tag_412\n /* \"#utility.yul\":24928:24930 */\n 0x40\n /* \"#utility.yul\":24917:24926 */\n dup4\n /* \"#utility.yul\":24913:24931 */\n add\n /* \"#utility.yul\":24904:24910 */\n dup7\n /* \"#utility.yul\":24860:24932 */\n tag_136\n jump\t// in\n tag_412:\n /* \"#utility.yul\":24979:24988 */\n dup2\n /* \"#utility.yul\":24973:24977 */\n dup2\n /* \"#utility.yul\":24969:24989 */\n sub\n /* \"#utility.yul\":24964:24966 */\n 0x60\n /* \"#utility.yul\":24953:24962 */\n dup4\n /* \"#utility.yul\":24949:24967 */\n add\n /* \"#utility.yul\":24942:24990 */\n mstore\n /* \"#utility.yul\":25007:25125 */\n tag_413\n /* \"#utility.yul\":25120:25124 */\n dup2\n /* \"#utility.yul\":25111:25117 */\n dup6\n /* \"#utility.yul\":25007:25125 */\n tag_135\n jump\t// in\n tag_413:\n /* \"#utility.yul\":24999:25125 */\n swap1\n pop\n /* \"#utility.yul\":25135:25206 */\n tag_414\n /* \"#utility.yul\":25201:25204 */\n 0x80\n /* \"#utility.yul\":25190:25199 */\n dup4\n /* \"#utility.yul\":25186:25205 */\n add\n /* \"#utility.yul\":25177:25183 */\n dup5\n /* \"#utility.yul\":25135:25206 */\n tag_137\n jump\t// in\n tag_414:\n /* \"#utility.yul\":24211:25213 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25219:25358 */\n tag_138:\n /* \"#utility.yul\":25311:25317 */\n 0x00\n /* \"#utility.yul\":25345:25350 */\n dup2\n /* \"#utility.yul\":25339:25351 */\n mload\n /* \"#utility.yul\":25329:25351 */\n swap1\n pop\n /* \"#utility.yul\":25219:25358 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":25364:25573 */\n tag_139:\n /* \"#utility.yul\":25488:25499 */\n 0x00\n /* \"#utility.yul\":25522:25528 */\n dup3\n /* \"#utility.yul\":25517:25520 */\n dup3\n /* \"#utility.yul\":25510:25529 */\n mstore\n /* \"#utility.yul\":25562:25566 */\n 0x20\n /* \"#utility.yul\":25557:25560 */\n dup3\n /* \"#utility.yul\":25553:25567 */\n add\n /* \"#utility.yul\":25538:25567 */\n swap1\n pop\n /* \"#utility.yul\":25364:25573 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25579:25736 */\n tag_140:\n /* \"#utility.yul\":25671:25675 */\n 0x00\n /* \"#utility.yul\":25694:25697 */\n dup2\n /* \"#utility.yul\":25686:25697 */\n swap1\n pop\n /* \"#utility.yul\":25724:25728 */\n 0x20\n /* \"#utility.yul\":25719:25722 */\n dup3\n /* \"#utility.yul\":25715:25729 */\n add\n /* \"#utility.yul\":25707:25729 */\n swap1\n pop\n /* \"#utility.yul\":25579:25736 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":25742:25850 */\n tag_141:\n /* \"#utility.yul\":25819:25843 */\n tag_419\n /* \"#utility.yul\":25837:25842 */\n dup2\n /* \"#utility.yul\":25819:25843 */\n tag_106\n jump\t// in\n tag_419:\n /* \"#utility.yul\":25814:25817 */\n dup3\n /* \"#utility.yul\":25807:25844 */\n mstore\n /* \"#utility.yul\":25742:25850 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":25856:25964 */\n tag_142:\n /* \"#utility.yul\":25933:25957 */\n tag_421\n /* \"#utility.yul\":25951:25956 */\n dup2\n /* \"#utility.yul\":25933:25957 */\n tag_98\n jump\t// in\n tag_421:\n /* \"#utility.yul\":25928:25931 */\n dup3\n /* \"#utility.yul\":25921:25958 */\n mstore\n /* \"#utility.yul\":25856:25964 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":26028:26539 */\n tag_143:\n /* \"#utility.yul\":26165:26169 */\n 0x40\n /* \"#utility.yul\":26160:26163 */\n dup3\n /* \"#utility.yul\":26156:26170 */\n add\n /* \"#utility.yul\":26264:26268 */\n 0x00\n /* \"#utility.yul\":26257:26262 */\n dup3\n /* \"#utility.yul\":26253:26269 */\n add\n /* \"#utility.yul\":26247:26270 */\n mload\n /* \"#utility.yul\":26283:26346 */\n tag_423\n /* \"#utility.yul\":26340:26344 */\n 0x00\n /* \"#utility.yul\":26335:26338 */\n dup6\n /* \"#utility.yul\":26331:26345 */\n add\n /* \"#utility.yul\":26317:26329 */\n dup3\n /* \"#utility.yul\":26283:26346 */\n tag_141\n jump\t// in\n tag_423:\n /* \"#utility.yul\":26180:26356 */\n pop\n /* \"#utility.yul\":26440:26444 */\n 0x20\n /* \"#utility.yul\":26433:26438 */\n dup3\n /* \"#utility.yul\":26429:26445 */\n add\n /* \"#utility.yul\":26423:26446 */\n mload\n /* \"#utility.yul\":26459:26522 */\n tag_424\n /* \"#utility.yul\":26516:26520 */\n 0x20\n /* \"#utility.yul\":26511:26514 */\n dup6\n /* \"#utility.yul\":26507:26521 */\n add\n /* \"#utility.yul\":26493:26505 */\n dup3\n /* \"#utility.yul\":26459:26522 */\n tag_142\n jump\t// in\n tag_424:\n /* \"#utility.yul\":26366:26532 */\n pop\n /* \"#utility.yul\":26134:26539 */\n pop\n /* \"#utility.yul\":26028:26539 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":26545:26824 */\n tag_144:\n /* \"#utility.yul\":26664:26674 */\n 0x00\n /* \"#utility.yul\":26685:26781 */\n tag_426\n /* \"#utility.yul\":26777:26780 */\n dup4\n /* \"#utility.yul\":26769:26775 */\n dup4\n /* \"#utility.yul\":26685:26781 */\n tag_143\n jump\t// in\n tag_426:\n /* \"#utility.yul\":26813:26817 */\n 0x40\n /* \"#utility.yul\":26808:26811 */\n dup4\n /* \"#utility.yul\":26804:26818 */\n add\n /* \"#utility.yul\":26790:26818 */\n swap1\n pop\n /* \"#utility.yul\":26545:26824 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":26830:26968 */\n tag_145:\n /* \"#utility.yul\":26925:26929 */\n 0x00\n /* \"#utility.yul\":26957:26961 */\n 0x20\n /* \"#utility.yul\":26952:26955 */\n dup3\n /* \"#utility.yul\":26948:26962 */\n add\n /* \"#utility.yul\":26940:26962 */\n swap1\n pop\n /* \"#utility.yul\":26830:26968 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":27036:27968 */\n tag_146:\n /* \"#utility.yul\":27205:27208 */\n 0x00\n /* \"#utility.yul\":27234:27313 */\n tag_429\n /* \"#utility.yul\":27307:27312 */\n dup3\n /* \"#utility.yul\":27234:27313 */\n tag_138\n jump\t// in\n tag_429:\n /* \"#utility.yul\":27329:27440 */\n tag_430\n /* \"#utility.yul\":27433:27439 */\n dup2\n /* \"#utility.yul\":27428:27431 */\n dup6\n /* \"#utility.yul\":27329:27440 */\n tag_139\n jump\t// in\n tag_430:\n /* \"#utility.yul\":27322:27440 */\n swap4\n pop\n /* \"#utility.yul\":27464:27545 */\n tag_431\n /* \"#utility.yul\":27539:27544 */\n dup4\n /* \"#utility.yul\":27464:27545 */\n tag_140\n jump\t// in\n tag_431:\n /* \"#utility.yul\":27568:27575 */\n dup1\n /* \"#utility.yul\":27599:27600 */\n 0x00\n /* \"#utility.yul\":27584:27943 */\n tag_432:\n /* \"#utility.yul\":27609:27615 */\n dup4\n /* \"#utility.yul\":27606:27607 */\n dup2\n /* \"#utility.yul\":27603:27616 */\n lt\n /* \"#utility.yul\":27584:27943 */\n iszero\n tag_434\n jumpi\n /* \"#utility.yul\":27685:27691 */\n dup2\n /* \"#utility.yul\":27679:27692 */\n mload\n /* \"#utility.yul\":27712:27825 */\n tag_435\n /* \"#utility.yul\":27821:27824 */\n dup9\n /* \"#utility.yul\":27806:27819 */\n dup3\n /* \"#utility.yul\":27712:27825 */\n tag_144\n jump\t// in\n tag_435:\n /* \"#utility.yul\":27705:27825 */\n swap8\n pop\n /* \"#utility.yul\":27848:27933 */\n tag_436\n /* \"#utility.yul\":27926:27932 */\n dup4\n /* \"#utility.yul\":27848:27933 */\n tag_145\n jump\t// in\n tag_436:\n /* \"#utility.yul\":27838:27933 */\n swap3\n pop\n /* \"#utility.yul\":27644:27943 */\n pop\n /* \"#utility.yul\":27631:27632 */\n 0x01\n /* \"#utility.yul\":27628:27629 */\n dup2\n /* \"#utility.yul\":27624:27633 */\n add\n /* \"#utility.yul\":27619:27633 */\n swap1\n pop\n /* \"#utility.yul\":27584:27943 */\n jump(tag_432)\n tag_434:\n /* \"#utility.yul\":27588:27602 */\n pop\n /* \"#utility.yul\":27959:27962 */\n dup6\n /* \"#utility.yul\":27952:27962 */\n swap4\n pop\n /* \"#utility.yul\":27210:27968 */\n pop\n pop\n pop\n /* \"#utility.yul\":27036:27968 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":27974:28089 */\n tag_147:\n /* \"#utility.yul\":28059:28082 */\n tag_438\n /* \"#utility.yul\":28076:28081 */\n dup2\n /* \"#utility.yul\":28059:28082 */\n tag_112\n jump\t// in\n tag_438:\n /* \"#utility.yul\":28054:28057 */\n dup3\n /* \"#utility.yul\":28047:28083 */\n mstore\n /* \"#utility.yul\":27974:28089 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":28095:29062 */\n tag_47:\n /* \"#utility.yul\":28428:28432 */\n 0x00\n /* \"#utility.yul\":28466:28469 */\n 0x80\n /* \"#utility.yul\":28455:28464 */\n dup3\n /* \"#utility.yul\":28451:28470 */\n add\n /* \"#utility.yul\":28443:28470 */\n swap1\n pop\n /* \"#utility.yul\":28516:28525 */\n dup2\n /* \"#utility.yul\":28510:28514 */\n dup2\n /* \"#utility.yul\":28506:28526 */\n sub\n /* \"#utility.yul\":28502:28503 */\n 0x00\n /* \"#utility.yul\":28491:28500 */\n dup4\n /* \"#utility.yul\":28487:28504 */\n add\n /* \"#utility.yul\":28480:28527 */\n mstore\n /* \"#utility.yul\":28544:28702 */\n tag_440\n /* \"#utility.yul\":28697:28701 */\n dup2\n /* \"#utility.yul\":28688:28694 */\n dup8\n /* \"#utility.yul\":28544:28702 */\n tag_146\n jump\t// in\n tag_440:\n /* \"#utility.yul\":28536:28702 */\n swap1\n pop\n /* \"#utility.yul\":28712:28782 */\n tag_441\n /* \"#utility.yul\":28778:28780 */\n 0x20\n /* \"#utility.yul\":28767:28776 */\n dup4\n /* \"#utility.yul\":28763:28781 */\n add\n /* \"#utility.yul\":28754:28760 */\n dup7\n /* \"#utility.yul\":28712:28782 */\n tag_147\n jump\t// in\n tag_441:\n /* \"#utility.yul\":28829:28838 */\n dup2\n /* \"#utility.yul\":28823:28827 */\n dup2\n /* \"#utility.yul\":28819:28839 */\n sub\n /* \"#utility.yul\":28814:28816 */\n 0x40\n /* \"#utility.yul\":28803:28812 */\n dup4\n /* \"#utility.yul\":28799:28817 */\n add\n /* \"#utility.yul\":28792:28840 */\n mstore\n /* \"#utility.yul\":28857:28975 */\n tag_442\n /* \"#utility.yul\":28970:28974 */\n dup2\n /* \"#utility.yul\":28961:28967 */\n dup6\n /* \"#utility.yul\":28857:28975 */\n tag_135\n jump\t// in\n tag_442:\n /* \"#utility.yul\":28849:28975 */\n swap1\n pop\n /* \"#utility.yul\":28985:29055 */\n tag_443\n /* \"#utility.yul\":29051:29053 */\n 0x60\n /* \"#utility.yul\":29040:29049 */\n dup4\n /* \"#utility.yul\":29036:29054 */\n add\n /* \"#utility.yul\":29027:29033 */\n dup5\n /* \"#utility.yul\":28985:29055 */\n tag_137\n jump\t// in\n tag_443:\n /* \"#utility.yul\":28095:29062 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":29068:29186 */\n tag_148:\n /* \"#utility.yul\":29155:29179 */\n tag_445\n /* \"#utility.yul\":29173:29178 */\n dup2\n /* \"#utility.yul\":29155:29179 */\n tag_106\n jump\t// in\n tag_445:\n /* \"#utility.yul\":29150:29153 */\n dup3\n /* \"#utility.yul\":29143:29180 */\n mstore\n /* \"#utility.yul\":29068:29186 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":29192:30023 */\n tag_53:\n /* \"#utility.yul\":29455:29459 */\n 0x00\n /* \"#utility.yul\":29493:29496 */\n 0xa0\n /* \"#utility.yul\":29482:29491 */\n dup3\n /* \"#utility.yul\":29478:29497 */\n add\n /* \"#utility.yul\":29470:29497 */\n swap1\n pop\n /* \"#utility.yul\":29507:29578 */\n tag_447\n /* \"#utility.yul\":29575:29576 */\n 0x00\n /* \"#utility.yul\":29564:29573 */\n dup4\n /* \"#utility.yul\":29560:29577 */\n add\n /* \"#utility.yul\":29551:29557 */\n dup9\n /* \"#utility.yul\":29507:29578 */\n tag_148\n jump\t// in\n tag_447:\n /* \"#utility.yul\":29588:29660 */\n tag_448\n /* \"#utility.yul\":29656:29658 */\n 0x20\n /* \"#utility.yul\":29645:29654 */\n dup4\n /* \"#utility.yul\":29641:29659 */\n add\n /* \"#utility.yul\":29632:29638 */\n dup8\n /* \"#utility.yul\":29588:29660 */\n tag_136\n jump\t// in\n tag_448:\n /* \"#utility.yul\":29670:29742 */\n tag_449\n /* \"#utility.yul\":29738:29740 */\n 0x40\n /* \"#utility.yul\":29727:29736 */\n dup4\n /* \"#utility.yul\":29723:29741 */\n add\n /* \"#utility.yul\":29714:29720 */\n dup7\n /* \"#utility.yul\":29670:29742 */\n tag_136\n jump\t// in\n tag_449:\n /* \"#utility.yul\":29789:29798 */\n dup2\n /* \"#utility.yul\":29783:29787 */\n dup2\n /* \"#utility.yul\":29779:29799 */\n sub\n /* \"#utility.yul\":29774:29776 */\n 0x60\n /* \"#utility.yul\":29763:29772 */\n dup4\n /* \"#utility.yul\":29759:29777 */\n add\n /* \"#utility.yul\":29752:29800 */\n mstore\n /* \"#utility.yul\":29817:29935 */\n tag_450\n /* \"#utility.yul\":29930:29934 */\n dup2\n /* \"#utility.yul\":29921:29927 */\n dup6\n /* \"#utility.yul\":29817:29935 */\n tag_135\n jump\t// in\n tag_450:\n /* \"#utility.yul\":29809:29935 */\n swap1\n pop\n /* \"#utility.yul\":29945:30016 */\n tag_451\n /* \"#utility.yul\":30011:30014 */\n 0x80\n /* \"#utility.yul\":30000:30009 */\n dup4\n /* \"#utility.yul\":29996:30015 */\n add\n /* \"#utility.yul\":29987:29993 */\n dup5\n /* \"#utility.yul\":29945:30016 */\n tag_137\n jump\t// in\n tag_451:\n /* \"#utility.yul\":29192:30023 */\n swap7\n swap6\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":30029:30920 */\n tag_59:\n /* \"#utility.yul\":30324:30328 */\n 0x00\n /* \"#utility.yul\":30362:30365 */\n 0x80\n /* \"#utility.yul\":30351:30360 */\n dup3\n /* \"#utility.yul\":30347:30366 */\n add\n /* \"#utility.yul\":30339:30366 */\n swap1\n pop\n /* \"#utility.yul\":30412:30421 */\n dup2\n /* \"#utility.yul\":30406:30410 */\n dup2\n /* \"#utility.yul\":30402:30422 */\n sub\n /* \"#utility.yul\":30398:30399 */\n 0x00\n /* \"#utility.yul\":30387:30396 */\n dup4\n /* \"#utility.yul\":30383:30400 */\n add\n /* \"#utility.yul\":30376:30423 */\n mstore\n /* \"#utility.yul\":30440:30558 */\n tag_453\n /* \"#utility.yul\":30553:30557 */\n dup2\n /* \"#utility.yul\":30544:30550 */\n dup8\n /* \"#utility.yul\":30440:30558 */\n tag_135\n jump\t// in\n tag_453:\n /* \"#utility.yul\":30432:30558 */\n swap1\n pop\n /* \"#utility.yul\":30568:30640 */\n tag_454\n /* \"#utility.yul\":30636:30638 */\n 0x20\n /* \"#utility.yul\":30625:30634 */\n dup4\n /* \"#utility.yul\":30621:30639 */\n add\n /* \"#utility.yul\":30612:30618 */\n dup7\n /* \"#utility.yul\":30568:30640 */\n tag_136\n jump\t// in\n tag_454:\n /* \"#utility.yul\":30687:30696 */\n dup2\n /* \"#utility.yul\":30681:30685 */\n dup2\n /* \"#utility.yul\":30677:30697 */\n sub\n /* \"#utility.yul\":30672:30674 */\n 0x40\n /* \"#utility.yul\":30661:30670 */\n dup4\n /* \"#utility.yul\":30657:30675 */\n add\n /* \"#utility.yul\":30650:30698 */\n mstore\n /* \"#utility.yul\":30715:30833 */\n tag_455\n /* \"#utility.yul\":30828:30832 */\n dup2\n /* \"#utility.yul\":30819:30825 */\n dup6\n /* \"#utility.yul\":30715:30833 */\n tag_135\n jump\t// in\n tag_455:\n /* \"#utility.yul\":30707:30833 */\n swap1\n pop\n /* \"#utility.yul\":30843:30913 */\n tag_456\n /* \"#utility.yul\":30909:30911 */\n 0x60\n /* \"#utility.yul\":30898:30907 */\n dup4\n /* \"#utility.yul\":30894:30912 */\n add\n /* \"#utility.yul\":30885:30891 */\n dup5\n /* \"#utility.yul\":30843:30913 */\n tag_137\n jump\t// in\n tag_456:\n /* \"#utility.yul\":30029:30920 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":30926:31646 */\n tag_65:\n /* \"#utility.yul\":31161:31165 */\n 0x00\n /* \"#utility.yul\":31199:31202 */\n 0x80\n /* \"#utility.yul\":31188:31197 */\n dup3\n /* \"#utility.yul\":31184:31203 */\n add\n /* \"#utility.yul\":31176:31203 */\n swap1\n pop\n /* \"#utility.yul\":31213:31284 */\n tag_458\n /* \"#utility.yul\":31281:31282 */\n 0x00\n /* \"#utility.yul\":31270:31279 */\n dup4\n /* \"#utility.yul\":31266:31283 */\n add\n /* \"#utility.yul\":31257:31263 */\n dup8\n /* \"#utility.yul\":31213:31284 */\n tag_148\n jump\t// in\n tag_458:\n /* \"#utility.yul\":31294:31366 */\n tag_459\n /* \"#utility.yul\":31362:31364 */\n 0x20\n /* \"#utility.yul\":31351:31360 */\n dup4\n /* \"#utility.yul\":31347:31365 */\n add\n /* \"#utility.yul\":31338:31344 */\n dup7\n /* \"#utility.yul\":31294:31366 */\n tag_136\n jump\t// in\n tag_459:\n /* \"#utility.yul\":31413:31422 */\n dup2\n /* \"#utility.yul\":31407:31411 */\n dup2\n /* \"#utility.yul\":31403:31423 */\n sub\n /* \"#utility.yul\":31398:31400 */\n 0x40\n /* \"#utility.yul\":31387:31396 */\n dup4\n /* \"#utility.yul\":31383:31401 */\n add\n /* \"#utility.yul\":31376:31424 */\n mstore\n /* \"#utility.yul\":31441:31559 */\n tag_460\n /* \"#utility.yul\":31554:31558 */\n dup2\n /* \"#utility.yul\":31545:31551 */\n dup6\n /* \"#utility.yul\":31441:31559 */\n tag_135\n jump\t// in\n tag_460:\n /* \"#utility.yul\":31433:31559 */\n swap1\n pop\n /* \"#utility.yul\":31569:31639 */\n tag_461\n /* \"#utility.yul\":31635:31637 */\n 0x60\n /* \"#utility.yul\":31624:31633 */\n dup4\n /* \"#utility.yul\":31620:31638 */\n add\n /* \"#utility.yul\":31611:31617 */\n dup5\n /* \"#utility.yul\":31569:31639 */\n tag_137\n jump\t// in\n tag_461:\n /* \"#utility.yul\":30926:31646 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":31652:31793 */\n tag_149:\n /* \"#utility.yul\":31746:31752 */\n 0x00\n /* \"#utility.yul\":31780:31785 */\n dup2\n /* \"#utility.yul\":31774:31786 */\n mload\n /* \"#utility.yul\":31764:31786 */\n swap1\n pop\n /* \"#utility.yul\":31652:31793 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":31799:32010 */\n tag_150:\n /* \"#utility.yul\":31925:31936 */\n 0x00\n /* \"#utility.yul\":31959:31965 */\n dup3\n /* \"#utility.yul\":31954:31957 */\n dup3\n /* \"#utility.yul\":31947:31966 */\n mstore\n /* \"#utility.yul\":31999:32003 */\n 0x20\n /* \"#utility.yul\":31994:31997 */\n dup3\n /* \"#utility.yul\":31990:32004 */\n add\n /* \"#utility.yul\":31975:32004 */\n swap1\n pop\n /* \"#utility.yul\":31799:32010 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":32016:32175 */\n tag_151:\n /* \"#utility.yul\":32110:32114 */\n 0x00\n /* \"#utility.yul\":32133:32136 */\n dup2\n /* \"#utility.yul\":32125:32136 */\n swap1\n pop\n /* \"#utility.yul\":32163:32167 */\n 0x20\n /* \"#utility.yul\":32158:32161 */\n dup3\n /* \"#utility.yul\":32154:32168 */\n add\n /* \"#utility.yul\":32146:32168 */\n swap1\n pop\n /* \"#utility.yul\":32016:32175 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":32249:32906 */\n tag_152:\n /* \"#utility.yul\":32368:32371 */\n 0x00\n /* \"#utility.yul\":32404:32408 */\n 0x40\n /* \"#utility.yul\":32399:32402 */\n dup4\n /* \"#utility.yul\":32395:32409 */\n add\n /* \"#utility.yul\":32494:32498 */\n 0x00\n /* \"#utility.yul\":32487:32492 */\n dup4\n /* \"#utility.yul\":32483:32499 */\n add\n /* \"#utility.yul\":32477:32500 */\n mload\n /* \"#utility.yul\":32513:32572 */\n tag_466\n /* \"#utility.yul\":32566:32570 */\n 0x00\n /* \"#utility.yul\":32561:32564 */\n dup7\n /* \"#utility.yul\":32557:32571 */\n add\n /* \"#utility.yul\":32543:32555 */\n dup3\n /* \"#utility.yul\":32513:32572 */\n tag_124\n jump\t// in\n tag_466:\n /* \"#utility.yul\":32419:32582 */\n pop\n /* \"#utility.yul\":32668:32672 */\n 0x20\n /* \"#utility.yul\":32661:32666 */\n dup4\n /* \"#utility.yul\":32657:32673 */\n add\n /* \"#utility.yul\":32651:32674 */\n mload\n /* \"#utility.yul\":32721:32724 */\n dup5\n /* \"#utility.yul\":32715:32719 */\n dup3\n /* \"#utility.yul\":32711:32725 */\n sub\n /* \"#utility.yul\":32704:32708 */\n 0x20\n /* \"#utility.yul\":32699:32702 */\n dup7\n /* \"#utility.yul\":32695:32709 */\n add\n /* \"#utility.yul\":32688:32726 */\n mstore\n /* \"#utility.yul\":32747:32868 */\n tag_467\n /* \"#utility.yul\":32863:32867 */\n dup3\n /* \"#utility.yul\":32849:32861 */\n dup3\n /* \"#utility.yul\":32747:32868 */\n tag_134\n jump\t// in\n tag_467:\n /* \"#utility.yul\":32739:32868 */\n swap2\n pop\n /* \"#utility.yul\":32592:32879 */\n pop\n /* \"#utility.yul\":32896:32900 */\n dup1\n /* \"#utility.yul\":32889:32900 */\n swap2\n pop\n /* \"#utility.yul\":32373:32906 */\n pop\n /* \"#utility.yul\":32249:32906 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":32974:33620 */\n tag_153:\n /* \"#utility.yul\":33087:33090 */\n 0x00\n /* \"#utility.yul\":33123:33127 */\n 0x40\n /* \"#utility.yul\":33118:33121 */\n dup4\n /* \"#utility.yul\":33114:33128 */\n add\n /* \"#utility.yul\":33214:33218 */\n 0x00\n /* \"#utility.yul\":33207:33212 */\n dup4\n /* \"#utility.yul\":33203:33219 */\n add\n /* \"#utility.yul\":33197:33220 */\n mload\n /* \"#utility.yul\":33267:33270 */\n dup5\n /* \"#utility.yul\":33261:33265 */\n dup3\n /* \"#utility.yul\":33257:33271 */\n sub\n /* \"#utility.yul\":33250:33254 */\n 0x00\n /* \"#utility.yul\":33245:33248 */\n dup7\n /* \"#utility.yul\":33241:33255 */\n add\n /* \"#utility.yul\":33234:33272 */\n mstore\n /* \"#utility.yul\":33293:33406 */\n tag_469\n /* \"#utility.yul\":33401:33405 */\n dup3\n /* \"#utility.yul\":33387:33399 */\n dup3\n /* \"#utility.yul\":33293:33406 */\n tag_152\n jump\t// in\n tag_469:\n /* \"#utility.yul\":33285:33406 */\n swap2\n pop\n /* \"#utility.yul\":33138:33417 */\n pop\n /* \"#utility.yul\":33501:33505 */\n 0x20\n /* \"#utility.yul\":33494:33499 */\n dup4\n /* \"#utility.yul\":33490:33506 */\n add\n /* \"#utility.yul\":33484:33507 */\n mload\n /* \"#utility.yul\":33520:33583 */\n tag_470\n /* \"#utility.yul\":33577:33581 */\n 0x20\n /* \"#utility.yul\":33572:33575 */\n dup7\n /* \"#utility.yul\":33568:33582 */\n add\n /* \"#utility.yul\":33554:33566 */\n dup3\n /* \"#utility.yul\":33520:33583 */\n tag_142\n jump\t// in\n tag_470:\n /* \"#utility.yul\":33427:33593 */\n pop\n /* \"#utility.yul\":33610:33614 */\n dup1\n /* \"#utility.yul\":33603:33614 */\n swap2\n pop\n /* \"#utility.yul\":33092:33620 */\n pop\n /* \"#utility.yul\":32974:33620 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":33626:33890 */\n tag_154:\n /* \"#utility.yul\":33749:33759 */\n 0x00\n /* \"#utility.yul\":33784:33884 */\n tag_472\n /* \"#utility.yul\":33880:33883 */\n dup4\n /* \"#utility.yul\":33872:33878 */\n dup4\n /* \"#utility.yul\":33784:33884 */\n tag_153\n jump\t// in\n tag_472:\n /* \"#utility.yul\":33770:33884 */\n swap1\n pop\n /* \"#utility.yul\":33626:33890 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":33896:34036 */\n tag_155:\n /* \"#utility.yul\":33993:33997 */\n 0x00\n /* \"#utility.yul\":34025:34029 */\n 0x20\n /* \"#utility.yul\":34020:34023 */\n dup3\n /* \"#utility.yul\":34016:34030 */\n add\n /* \"#utility.yul\":34008:34030 */\n swap1\n pop\n /* \"#utility.yul\":33896:34036 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":34108:35235 */\n tag_156:\n /* \"#utility.yul\":34281:34284 */\n 0x00\n /* \"#utility.yul\":34310:34391 */\n tag_475\n /* \"#utility.yul\":34385:34390 */\n dup3\n /* \"#utility.yul\":34310:34391 */\n tag_149\n jump\t// in\n tag_475:\n /* \"#utility.yul\":34407:34520 */\n tag_476\n /* \"#utility.yul\":34513:34519 */\n dup2\n /* \"#utility.yul\":34508:34511 */\n dup6\n /* \"#utility.yul\":34407:34520 */\n tag_150\n jump\t// in\n tag_476:\n /* \"#utility.yul\":34400:34520 */\n swap4\n pop\n /* \"#utility.yul\":34546:34549 */\n dup4\n /* \"#utility.yul\":34591:34595 */\n 0x20\n /* \"#utility.yul\":34583:34589 */\n dup3\n /* \"#utility.yul\":34579:34596 */\n mul\n /* \"#utility.yul\":34574:34577 */\n dup6\n /* \"#utility.yul\":34570:34597 */\n add\n /* \"#utility.yul\":34621:34704 */\n tag_477\n /* \"#utility.yul\":34698:34703 */\n dup6\n /* \"#utility.yul\":34621:34704 */\n tag_151\n jump\t// in\n tag_477:\n /* \"#utility.yul\":34727:34734 */\n dup1\n /* \"#utility.yul\":34758:34759 */\n 0x00\n /* \"#utility.yul\":34743:35190 */\n tag_478:\n /* \"#utility.yul\":34768:34774 */\n dup6\n /* \"#utility.yul\":34765:34766 */\n dup2\n /* \"#utility.yul\":34762:34775 */\n lt\n /* \"#utility.yul\":34743:35190 */\n iszero\n tag_480\n jumpi\n /* \"#utility.yul\":34839:34848 */\n dup5\n /* \"#utility.yul\":34833:34837 */\n dup5\n /* \"#utility.yul\":34829:34849 */\n sub\n /* \"#utility.yul\":34824:34827 */\n dup10\n /* \"#utility.yul\":34817:34850 */\n mstore\n /* \"#utility.yul\":34890:34896 */\n dup2\n /* \"#utility.yul\":34884:34897 */\n mload\n /* \"#utility.yul\":34918:35036 */\n tag_481\n /* \"#utility.yul\":35031:35035 */\n dup6\n /* \"#utility.yul\":35016:35029 */\n dup3\n /* \"#utility.yul\":34918:35036 */\n tag_154\n jump\t// in\n tag_481:\n /* \"#utility.yul\":34910:35036 */\n swap5\n pop\n /* \"#utility.yul\":35059:35146 */\n tag_482\n /* \"#utility.yul\":35139:35145 */\n dup4\n /* \"#utility.yul\":35059:35146 */\n tag_155\n jump\t// in\n tag_482:\n /* \"#utility.yul\":35049:35146 */\n swap3\n pop\n /* \"#utility.yul\":35175:35179 */\n 0x20\n /* \"#utility.yul\":35170:35173 */\n dup11\n /* \"#utility.yul\":35166:35180 */\n add\n /* \"#utility.yul\":35159:35180 */\n swap10\n pop\n /* \"#utility.yul\":34803:35190 */\n pop\n /* \"#utility.yul\":34790:34791 */\n 0x01\n /* \"#utility.yul\":34787:34788 */\n dup2\n /* \"#utility.yul\":34783:34792 */\n add\n /* \"#utility.yul\":34778:34792 */\n swap1\n pop\n /* \"#utility.yul\":34743:35190 */\n jump(tag_478)\n tag_480:\n /* \"#utility.yul\":34747:34761 */\n pop\n /* \"#utility.yul\":35206:35210 */\n dup3\n /* \"#utility.yul\":35199:35210 */\n swap8\n pop\n /* \"#utility.yul\":35226:35229 */\n dup8\n /* \"#utility.yul\":35219:35229 */\n swap6\n pop\n /* \"#utility.yul\":34286:35235 */\n pop\n pop\n pop\n pop\n pop\n /* \"#utility.yul\":34108:35235 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":35241:36216 */\n tag_71:\n /* \"#utility.yul\":35578:35582 */\n 0x00\n /* \"#utility.yul\":35616:35619 */\n 0x80\n /* \"#utility.yul\":35605:35614 */\n dup3\n /* \"#utility.yul\":35601:35620 */\n add\n /* \"#utility.yul\":35593:35620 */\n swap1\n pop\n /* \"#utility.yul\":35666:35675 */\n dup2\n /* \"#utility.yul\":35660:35664 */\n dup2\n /* \"#utility.yul\":35656:35676 */\n sub\n /* \"#utility.yul\":35652:35653 */\n 0x00\n /* \"#utility.yul\":35641:35650 */\n dup4\n /* \"#utility.yul\":35637:35654 */\n add\n /* \"#utility.yul\":35630:35677 */\n mstore\n /* \"#utility.yul\":35694:35856 */\n tag_484\n /* \"#utility.yul\":35851:35855 */\n dup2\n /* \"#utility.yul\":35842:35848 */\n dup8\n /* \"#utility.yul\":35694:35856 */\n tag_156\n jump\t// in\n tag_484:\n /* \"#utility.yul\":35686:35856 */\n swap1\n pop\n /* \"#utility.yul\":35866:35936 */\n tag_485\n /* \"#utility.yul\":35932:35934 */\n 0x20\n /* \"#utility.yul\":35921:35930 */\n dup4\n /* \"#utility.yul\":35917:35935 */\n add\n /* \"#utility.yul\":35908:35914 */\n dup7\n /* \"#utility.yul\":35866:35936 */\n tag_147\n jump\t// in\n tag_485:\n /* \"#utility.yul\":35983:35992 */\n dup2\n /* \"#utility.yul\":35977:35981 */\n dup2\n /* \"#utility.yul\":35973:35993 */\n sub\n /* \"#utility.yul\":35968:35970 */\n 0x40\n /* \"#utility.yul\":35957:35966 */\n dup4\n /* \"#utility.yul\":35953:35971 */\n add\n /* \"#utility.yul\":35946:35994 */\n mstore\n /* \"#utility.yul\":36011:36129 */\n tag_486\n /* \"#utility.yul\":36124:36128 */\n dup2\n /* \"#utility.yul\":36115:36121 */\n dup6\n /* \"#utility.yul\":36011:36129 */\n tag_135\n jump\t// in\n tag_486:\n /* \"#utility.yul\":36003:36129 */\n swap1\n pop\n /* \"#utility.yul\":36139:36209 */\n tag_487\n /* \"#utility.yul\":36205:36207 */\n 0x60\n /* \"#utility.yul\":36194:36203 */\n dup4\n /* \"#utility.yul\":36190:36208 */\n add\n /* \"#utility.yul\":36181:36187 */\n dup5\n /* \"#utility.yul\":36139:36209 */\n tag_137\n jump\t// in\n tag_487:\n /* \"#utility.yul\":35241:36216 */\n swap6\n swap5\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa264697066735822122045f09e9526479cb895d7cea7861283c3c0bba940b35a00486c33d9eed6ab352464736f6c634300080b0033\n}\n", "bytecode": { "functionDebugData": {}, "generatedSources": [], "linkReferences": {}, - "object": "60806040526108046000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b506115bf806100626000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063af3dcee81161005b578063af3dcee8146100d6578063b38c60fa146100f4578063b9f813ff14610110578063dab20fdc1461012c5761007d565b806389a570fc146100825780638a362d5c1461009e57806394f69115146100ba575b600080fd5b61009c60048036038101906100979190610861565b610148565b005b6100b860048036038101906100b39190610ac1565b6101e2565b005b6100d460048036038101906100cf9190610b60565b610279565b005b6100de610313565b6040516100eb9190610c56565b60405180910390f35b61010e60048036038101906101099190610c71565b610337565b005b61012a60048036038101906101259190610d10565b6103ce565b005b61014660048036038101906101419190610ee0565b610465565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389a570fc86868686866040518663ffffffff1660e01b81526004016101a9959493929190611133565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a362d5c858585856040518563ffffffff1660e01b8152600401610241949392919061129f565b600060405180830381600087803b15801561025b57600080fd5b505af115801561026f573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394f6911586868686866040518663ffffffff1660e01b81526004016102da959493929190611301565b600060405180830381600087803b1580156102f457600080fd5b505af1158015610308573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b38c60fa858585856040518563ffffffff1660e01b8152600401610396949392919061135b565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9f813ff858585856040518563ffffffff1660e01b815260040161042d94939291906113ae565b600060405180830381600087803b15801561044757600080fd5b505af115801561045b573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dab20fdc858585856040518563ffffffff1660e01b81526004016104c49493929190611536565b600060405180830381600087803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61055e82610515565b810181811067ffffffffffffffff8211171561057d5761057c610526565b5b80604052505050565b60006105906104fc565b905061059c8282610555565b919050565b600080fd5b600060ff82169050919050565b6105bc816105a6565b81146105c757600080fd5b50565b6000813590506105d9816105b3565b92915050565b600080fd5b600067ffffffffffffffff8211156105ff576105fe610526565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561063557610634610526565b5b61063e82610515565b9050602081019050919050565b82818337600083830152505050565b600061066d6106688461061a565b610586565b90508281526020810184848401111561068957610688610615565b5b61069484828561064b565b509392505050565b600082601f8301126106b1576106b06105df565b5b81356106c184826020860161065a565b91505092915050565b60006106dd6106d8846105e4565b610586565b90508083825260208201905060208402830185811115610700576106ff610610565b5b835b8181101561074757803567ffffffffffffffff811115610725576107246105df565b5b808601610732898261069c565b85526020850194505050602081019050610702565b5050509392505050565b600082601f830112610766576107656105df565b5b81356107768482602086016106ca565b91505092915050565b60006040828403121561079557610794610510565b5b61079f6040610586565b905060006107af848285016105ca565b600083015250602082013567ffffffffffffffff8111156107d3576107d26105a1565b5b6107df84828501610751565b60208301525092915050565b6000819050919050565b6107fe816107eb565b811461080957600080fd5b50565b60008135905061081b816107f5565b92915050565b600067ffffffffffffffff82169050919050565b61083e81610821565b811461084957600080fd5b50565b60008135905061085b81610835565b92915050565b600080600080600060a0868803121561087d5761087c610506565b5b600086013567ffffffffffffffff81111561089b5761089a61050b565b5b6108a78882890161077f565b95505060206108b88882890161080c565b94505060406108c98882890161080c565b935050606086013567ffffffffffffffff8111156108ea576108e961050b565b5b6108f68882890161077f565b92505060806109078882890161084c565b9150509295509295909350565b600067ffffffffffffffff82111561092f5761092e610526565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061096b82610940565b9050919050565b61097b81610960565b811461098657600080fd5b50565b60008135905061099881610972565b92915050565b6000604082840312156109b4576109b3610510565b5b6109be6040610586565b905060006109ce84828501610989565b60008301525060206109e28482850161080c565b60208301525092915050565b6000610a016109fc84610914565b610586565b90508083825260208201905060408402830185811115610a2457610a23610610565b5b835b81811015610a4d5780610a39888261099e565b845260208401935050604081019050610a26565b5050509392505050565b600082601f830112610a6c57610a6b6105df565b5b8135610a7c8482602086016109ee565b91505092915050565b600063ffffffff82169050919050565b610a9e81610a85565b8114610aa957600080fd5b50565b600081359050610abb81610a95565b92915050565b60008060008060808587031215610adb57610ada610506565b5b600085013567ffffffffffffffff811115610af957610af861050b565b5b610b0587828801610a57565b9450506020610b1687828801610aac565b935050604085013567ffffffffffffffff811115610b3757610b3661050b565b5b610b438782880161077f565b9250506060610b548782880161084c565b91505092959194509250565b600080600080600060a08688031215610b7c57610b7b610506565b5b6000610b8a88828901610989565b9550506020610b9b8882890161080c565b9450506040610bac8882890161080c565b935050606086013567ffffffffffffffff811115610bcd57610bcc61050b565b5b610bd98882890161077f565b9250506080610bea8882890161084c565b9150509295509295909350565b6000819050919050565b6000610c1c610c17610c1284610940565b610bf7565b610940565b9050919050565b6000610c2e82610c01565b9050919050565b6000610c4082610c23565b9050919050565b610c5081610c35565b82525050565b6000602082019050610c6b6000830184610c47565b92915050565b60008060008060808587031215610c8b57610c8a610506565b5b600085013567ffffffffffffffff811115610ca957610ca861050b565b5b610cb58782880161077f565b9450506020610cc68782880161080c565b935050604085013567ffffffffffffffff811115610ce757610ce661050b565b5b610cf38782880161077f565b9250506060610d048782880161084c565b91505092959194509250565b60008060008060808587031215610d2a57610d29610506565b5b6000610d3887828801610989565b9450506020610d498782880161080c565b935050604085013567ffffffffffffffff811115610d6a57610d6961050b565b5b610d768782880161077f565b9250506060610d878782880161084c565b91505092959194509250565b600067ffffffffffffffff821115610dae57610dad610526565b5b602082029050602081019050919050565b600060408284031215610dd557610dd4610510565b5b610ddf6040610586565b9050600082013567ffffffffffffffff811115610dff57610dfe6105a1565b5b610e0b8482850161077f565b6000830152506020610e1f8482850161080c565b60208301525092915050565b6000610e3e610e3984610d93565b610586565b90508083825260208201905060208402830185811115610e6157610e60610610565b5b835b81811015610ea857803567ffffffffffffffff811115610e8657610e856105df565b5b808601610e938982610dbf565b85526020850194505050602081019050610e63565b5050509392505050565b600082601f830112610ec757610ec66105df565b5b8135610ed7848260208601610e2b565b91505092915050565b60008060008060808587031215610efa57610ef9610506565b5b600085013567ffffffffffffffff811115610f1857610f1761050b565b5b610f2487828801610eb2565b9450506020610f3587828801610aac565b935050604085013567ffffffffffffffff811115610f5657610f5561050b565b5b610f628782880161077f565b9250506060610f738782880161084c565b91505092959194509250565b610f88816105a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ff4578082015181840152602081019050610fd9565b83811115611003576000848401525b50505050565b600061101482610fba565b61101e8185610fc5565b935061102e818560208601610fd6565b61103781610515565b840191505092915050565b600061104e8383611009565b905092915050565b6000602082019050919050565b600061106e82610f8e565b6110788185610f99565b93508360208202850161108a85610faa565b8060005b858110156110c657848403895281516110a78582611042565b94506110b283611056565b925060208a0199505060018101905061108e565b50829750879550505050505092915050565b60006040830160008301516110f06000860182610f7f565b50602083015184820360208601526111088282611063565b9150508091505092915050565b61111e816107eb565b82525050565b61112d81610821565b82525050565b600060a082019050818103600083015261114d81886110d8565b905061115c6020830187611115565b6111696040830186611115565b818103606083015261117b81856110d8565b905061118a6080830184611124565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6111c981610960565b82525050565b6111d8816107eb565b82525050565b6040820160008201516111f460008501826111c0565b50602082015161120760208501826111cf565b50505050565b600061121983836111de565b60408301905092915050565b6000602082019050919050565b600061123d82611194565b611247818561119f565b9350611252836111b0565b8060005b8381101561128357815161126a888261120d565b975061127583611225565b925050600181019050611256565b5085935050505092915050565b61129981610a85565b82525050565b600060808201905081810360008301526112b98187611232565b90506112c86020830186611290565b81810360408301526112da81856110d8565b90506112e96060830184611124565b95945050505050565b6112fb81610960565b82525050565b600060a08201905061131660008301886112f2565b6113236020830187611115565b6113306040830186611115565b818103606083015261134281856110d8565b90506113516080830184611124565b9695505050505050565b6000608082019050818103600083015261137581876110d8565b90506113846020830186611115565b818103604083015261139681856110d8565b90506113a56060830184611124565b95945050505050565b60006080820190506113c360008301876112f2565b6113d06020830186611115565b81810360408301526113e281856110d8565b90506113f16060830184611124565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060408301600083015161143e6000860182610f7f565b50602083015184820360208601526114568282611063565b9150508091505092915050565b600060408301600083015184820360008601526114808282611426565b915050602083015161149560208601826111cf565b508091505092915050565b60006114ac8383611463565b905092915050565b6000602082019050919050565b60006114cc826113fa565b6114d68185611405565b9350836020820285016114e885611416565b8060005b85811015611524578484038952815161150585826114a0565b9450611510836114b4565b925060208a019950506001810190506114ec565b50829750879550505050505092915050565b6000608082019050818103600083015261155081876114c1565b905061155f6020830186611290565b818103604083015261157181856110d8565b90506115806060830184611124565b9594505050505056fea264697066735822122032dfb9c750567e10ba5fcf6b460f97ca764c58029ec0ed48d16954288648a94764736f6c634300080b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x804 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15BF DUP1 PUSH2 0x62 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAF3DCEE8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAF3DCEE8 EQ PUSH2 0xD6 JUMPI DUP1 PUSH4 0xB38C60FA EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xDAB20FDC EQ PUSH2 0x12C JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x89A570FC EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x8A362D5C EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x94F69115 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x861 JUMP JUMPDEST PUSH2 0x148 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0xAC1 JUMP JUMPDEST PUSH2 0x1E2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xCF SWAP2 SWAP1 PUSH2 0xB60 JUMP JUMPDEST PUSH2 0x279 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDE PUSH2 0x313 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x109 SWAP2 SWAP1 PUSH2 0xC71 JUMP JUMPDEST PUSH2 0x337 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xD10 JUMP JUMPDEST PUSH2 0x3CE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x146 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x141 SWAP2 SWAP1 PUSH2 0xEE0 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x89A570FC DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1133 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A362D5C DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x241 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x94F69115 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2DA SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1301 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x308 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB38C60FA DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x396 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x135B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB9F813FF DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x42D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x13AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDAB20FDC DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4C4 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x55E DUP3 PUSH2 0x515 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x57D JUMPI PUSH2 0x57C PUSH2 0x526 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x590 PUSH2 0x4FC JUMP JUMPDEST SWAP1 POP PUSH2 0x59C DUP3 DUP3 PUSH2 0x555 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x5BC DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP2 EQ PUSH2 0x5C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5D9 DUP2 PUSH2 0x5B3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5FF JUMPI PUSH2 0x5FE PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x635 JUMPI PUSH2 0x634 PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH2 0x63E DUP3 PUSH2 0x515 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x66D PUSH2 0x668 DUP5 PUSH2 0x61A JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x689 JUMPI PUSH2 0x688 PUSH2 0x615 JUMP JUMPDEST JUMPDEST PUSH2 0x694 DUP5 DUP3 DUP6 PUSH2 0x64B JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6B1 JUMPI PUSH2 0x6B0 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6C1 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x65A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DD PUSH2 0x6D8 DUP5 PUSH2 0x5E4 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x6FF PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x747 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x725 JUMPI PUSH2 0x724 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x732 DUP10 DUP3 PUSH2 0x69C JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x702 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x766 JUMPI PUSH2 0x765 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x776 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x6CA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x795 JUMPI PUSH2 0x794 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x79F PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x7AF DUP5 DUP3 DUP6 ADD PUSH2 0x5CA JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7D3 JUMPI PUSH2 0x7D2 PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0x7DF DUP5 DUP3 DUP6 ADD PUSH2 0x751 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7FE DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP2 EQ PUSH2 0x809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x81B DUP2 PUSH2 0x7F5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x83E DUP2 PUSH2 0x821 JUMP JUMPDEST DUP2 EQ PUSH2 0x849 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85B DUP2 PUSH2 0x835 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x87D JUMPI PUSH2 0x87C PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x89B JUMPI PUSH2 0x89A PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8A7 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x8B8 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x8C9 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8EA JUMPI PUSH2 0x8E9 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8F6 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x907 DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x92F JUMPI PUSH2 0x92E PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x96B DUP3 PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x97B DUP2 PUSH2 0x960 JUMP JUMPDEST DUP2 EQ PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x998 DUP2 PUSH2 0x972 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B4 JUMPI PUSH2 0x9B3 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x9BE PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9CE DUP5 DUP3 DUP6 ADD PUSH2 0x989 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0x9E2 DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA01 PUSH2 0x9FC DUP5 PUSH2 0x914 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x40 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA24 JUMPI PUSH2 0xA23 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA4D JUMPI DUP1 PUSH2 0xA39 DUP9 DUP3 PUSH2 0x99E JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x40 DUP2 ADD SWAP1 POP PUSH2 0xA26 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA6C JUMPI PUSH2 0xA6B PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA7C DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x9EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA9E DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP2 EQ PUSH2 0xAA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xABB DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xADB JUMPI PUSH2 0xADA PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAF9 JUMPI PUSH2 0xAF8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB05 DUP8 DUP3 DUP9 ADD PUSH2 0xA57 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xB16 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB37 JUMPI PUSH2 0xB36 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB43 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xB54 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB7C JUMPI PUSH2 0xB7B PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xB8A DUP9 DUP3 DUP10 ADD PUSH2 0x989 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xB9B DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xBAC DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBCD JUMPI PUSH2 0xBCC PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xBD9 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0xBEA DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1C PUSH2 0xC17 PUSH2 0xC12 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2E DUP3 PUSH2 0xC01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC40 DUP3 PUSH2 0xC23 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC50 DUP2 PUSH2 0xC35 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xC6B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC47 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC8B JUMPI PUSH2 0xC8A PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCA9 JUMPI PUSH2 0xCA8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCB5 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xCC6 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCE7 JUMPI PUSH2 0xCE6 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCF3 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD04 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD2A JUMPI PUSH2 0xD29 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD38 DUP8 DUP3 DUP9 ADD PUSH2 0x989 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xD49 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD6A JUMPI PUSH2 0xD69 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xD76 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD87 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDAE JUMPI PUSH2 0xDAD PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDD5 JUMPI PUSH2 0xDD4 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0xDDF PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFF JUMPI PUSH2 0xDFE PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0xE0B DUP5 DUP3 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0xE1F DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE3E PUSH2 0xE39 DUP5 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xE61 JUMPI PUSH2 0xE60 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xEA8 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE86 JUMPI PUSH2 0xE85 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0xE93 DUP10 DUP3 PUSH2 0xDBF JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE63 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xEC7 JUMPI PUSH2 0xEC6 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xED7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xE2B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xEFA JUMPI PUSH2 0xEF9 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF18 JUMPI PUSH2 0xF17 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF24 DUP8 DUP3 DUP9 ADD PUSH2 0xEB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xF35 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF56 JUMPI PUSH2 0xF55 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF62 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xF73 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xF88 DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFF4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFD9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1003 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1014 DUP3 PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x101E DUP2 DUP6 PUSH2 0xFC5 JUMP JUMPDEST SWAP4 POP PUSH2 0x102E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x1037 DUP2 PUSH2 0x515 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x104E DUP4 DUP4 PUSH2 0x1009 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x106E DUP3 PUSH2 0xF8E JUMP JUMPDEST PUSH2 0x1078 DUP2 DUP6 PUSH2 0xF99 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x108A DUP6 PUSH2 0xFAA JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x10C6 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x10A7 DUP6 DUP3 PUSH2 0x1042 JUMP JUMPDEST SWAP5 POP PUSH2 0x10B2 DUP4 PUSH2 0x1056 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x108E JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x10F0 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1108 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111E DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x821 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x114D DUP2 DUP9 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x115C PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1169 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x117B DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x118A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11C9 DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11D8 DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD PUSH1 0x0 DUP3 ADD MLOAD PUSH2 0x11F4 PUSH1 0x0 DUP6 ADD DUP3 PUSH2 0x11C0 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1207 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1219 DUP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x123D DUP3 PUSH2 0x1194 JUMP JUMPDEST PUSH2 0x1247 DUP2 DUP6 PUSH2 0x119F JUMP JUMPDEST SWAP4 POP PUSH2 0x1252 DUP4 PUSH2 0x11B0 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1283 JUMPI DUP2 MLOAD PUSH2 0x126A DUP9 DUP3 PUSH2 0x120D JUMP JUMPDEST SWAP8 POP PUSH2 0x1275 DUP4 PUSH2 0x1225 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1256 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1299 DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12B9 DUP2 DUP8 PUSH2 0x1232 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C8 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x12DA DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x12E9 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12FB DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1316 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x1323 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1330 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1342 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1351 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1375 DUP2 DUP8 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1384 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1396 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13A5 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x13C3 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x13D0 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x13E2 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13F1 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x143E PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1456 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x0 DUP7 ADD MSTORE PUSH2 0x1480 DUP3 DUP3 PUSH2 0x1426 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1495 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14AC DUP4 DUP4 PUSH2 0x1463 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14CC DUP3 PUSH2 0x13FA JUMP JUMPDEST PUSH2 0x14D6 DUP2 DUP6 PUSH2 0x1405 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x14E8 DUP6 PUSH2 0x1416 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1524 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x1505 DUP6 DUP3 PUSH2 0x14A0 JUMP JUMPDEST SWAP5 POP PUSH2 0x1510 DUP4 PUSH2 0x14B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x14EC JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1550 DUP2 DUP8 PUSH2 0x14C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x155F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1571 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1580 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ORIGIN 0xDF 0xB9 0xC7 POP JUMP PUSH31 0x10BA5FCF6B460F97CA764C58029EC0ED48D16954288648A94764736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "5303:2075:0:-:0;;;5449:42;5416:76;;;;;;;;;;;;;;;;;;;;5303:2075;;;;;;;;;;;;;;;;" + "object": "60806040526108046000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561005257600080fd5b506115bf806100626000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063af3dcee81161005b578063af3dcee8146100d6578063b38c60fa146100f4578063b9f813ff14610110578063dab20fdc1461012c5761007d565b806389a570fc146100825780638a362d5c1461009e57806394f69115146100ba575b600080fd5b61009c60048036038101906100979190610861565b610148565b005b6100b860048036038101906100b39190610ac1565b6101e2565b005b6100d460048036038101906100cf9190610b60565b610279565b005b6100de610313565b6040516100eb9190610c56565b60405180910390f35b61010e60048036038101906101099190610c71565b610337565b005b61012a60048036038101906101259190610d10565b6103ce565b005b61014660048036038101906101419190610ee0565b610465565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389a570fc86868686866040518663ffffffff1660e01b81526004016101a9959493929190611133565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a362d5c858585856040518563ffffffff1660e01b8152600401610241949392919061129f565b600060405180830381600087803b15801561025b57600080fd5b505af115801561026f573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394f6911586868686866040518663ffffffff1660e01b81526004016102da959493929190611301565b600060405180830381600087803b1580156102f457600080fd5b505af1158015610308573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b38c60fa858585856040518563ffffffff1660e01b8152600401610396949392919061135b565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9f813ff858585856040518563ffffffff1660e01b815260040161042d94939291906113ae565b600060405180830381600087803b15801561044757600080fd5b505af115801561045b573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dab20fdc858585856040518563ffffffff1660e01b81526004016104c49493929190611536565b600060405180830381600087803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61055e82610515565b810181811067ffffffffffffffff8211171561057d5761057c610526565b5b80604052505050565b60006105906104fc565b905061059c8282610555565b919050565b600080fd5b600060ff82169050919050565b6105bc816105a6565b81146105c757600080fd5b50565b6000813590506105d9816105b3565b92915050565b600080fd5b600067ffffffffffffffff8211156105ff576105fe610526565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561063557610634610526565b5b61063e82610515565b9050602081019050919050565b82818337600083830152505050565b600061066d6106688461061a565b610586565b90508281526020810184848401111561068957610688610615565b5b61069484828561064b565b509392505050565b600082601f8301126106b1576106b06105df565b5b81356106c184826020860161065a565b91505092915050565b60006106dd6106d8846105e4565b610586565b90508083825260208201905060208402830185811115610700576106ff610610565b5b835b8181101561074757803567ffffffffffffffff811115610725576107246105df565b5b808601610732898261069c565b85526020850194505050602081019050610702565b5050509392505050565b600082601f830112610766576107656105df565b5b81356107768482602086016106ca565b91505092915050565b60006040828403121561079557610794610510565b5b61079f6040610586565b905060006107af848285016105ca565b600083015250602082013567ffffffffffffffff8111156107d3576107d26105a1565b5b6107df84828501610751565b60208301525092915050565b6000819050919050565b6107fe816107eb565b811461080957600080fd5b50565b60008135905061081b816107f5565b92915050565b600067ffffffffffffffff82169050919050565b61083e81610821565b811461084957600080fd5b50565b60008135905061085b81610835565b92915050565b600080600080600060a0868803121561087d5761087c610506565b5b600086013567ffffffffffffffff81111561089b5761089a61050b565b5b6108a78882890161077f565b95505060206108b88882890161080c565b94505060406108c98882890161080c565b935050606086013567ffffffffffffffff8111156108ea576108e961050b565b5b6108f68882890161077f565b92505060806109078882890161084c565b9150509295509295909350565b600067ffffffffffffffff82111561092f5761092e610526565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061096b82610940565b9050919050565b61097b81610960565b811461098657600080fd5b50565b60008135905061099881610972565b92915050565b6000604082840312156109b4576109b3610510565b5b6109be6040610586565b905060006109ce84828501610989565b60008301525060206109e28482850161080c565b60208301525092915050565b6000610a016109fc84610914565b610586565b90508083825260208201905060408402830185811115610a2457610a23610610565b5b835b81811015610a4d5780610a39888261099e565b845260208401935050604081019050610a26565b5050509392505050565b600082601f830112610a6c57610a6b6105df565b5b8135610a7c8482602086016109ee565b91505092915050565b600063ffffffff82169050919050565b610a9e81610a85565b8114610aa957600080fd5b50565b600081359050610abb81610a95565b92915050565b60008060008060808587031215610adb57610ada610506565b5b600085013567ffffffffffffffff811115610af957610af861050b565b5b610b0587828801610a57565b9450506020610b1687828801610aac565b935050604085013567ffffffffffffffff811115610b3757610b3661050b565b5b610b438782880161077f565b9250506060610b548782880161084c565b91505092959194509250565b600080600080600060a08688031215610b7c57610b7b610506565b5b6000610b8a88828901610989565b9550506020610b9b8882890161080c565b9450506040610bac8882890161080c565b935050606086013567ffffffffffffffff811115610bcd57610bcc61050b565b5b610bd98882890161077f565b9250506080610bea8882890161084c565b9150509295509295909350565b6000819050919050565b6000610c1c610c17610c1284610940565b610bf7565b610940565b9050919050565b6000610c2e82610c01565b9050919050565b6000610c4082610c23565b9050919050565b610c5081610c35565b82525050565b6000602082019050610c6b6000830184610c47565b92915050565b60008060008060808587031215610c8b57610c8a610506565b5b600085013567ffffffffffffffff811115610ca957610ca861050b565b5b610cb58782880161077f565b9450506020610cc68782880161080c565b935050604085013567ffffffffffffffff811115610ce757610ce661050b565b5b610cf38782880161077f565b9250506060610d048782880161084c565b91505092959194509250565b60008060008060808587031215610d2a57610d29610506565b5b6000610d3887828801610989565b9450506020610d498782880161080c565b935050604085013567ffffffffffffffff811115610d6a57610d6961050b565b5b610d768782880161077f565b9250506060610d878782880161084c565b91505092959194509250565b600067ffffffffffffffff821115610dae57610dad610526565b5b602082029050602081019050919050565b600060408284031215610dd557610dd4610510565b5b610ddf6040610586565b9050600082013567ffffffffffffffff811115610dff57610dfe6105a1565b5b610e0b8482850161077f565b6000830152506020610e1f8482850161080c565b60208301525092915050565b6000610e3e610e3984610d93565b610586565b90508083825260208201905060208402830185811115610e6157610e60610610565b5b835b81811015610ea857803567ffffffffffffffff811115610e8657610e856105df565b5b808601610e938982610dbf565b85526020850194505050602081019050610e63565b5050509392505050565b600082601f830112610ec757610ec66105df565b5b8135610ed7848260208601610e2b565b91505092915050565b60008060008060808587031215610efa57610ef9610506565b5b600085013567ffffffffffffffff811115610f1857610f1761050b565b5b610f2487828801610eb2565b9450506020610f3587828801610aac565b935050604085013567ffffffffffffffff811115610f5657610f5561050b565b5b610f628782880161077f565b9250506060610f738782880161084c565b91505092959194509250565b610f88816105a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ff4578082015181840152602081019050610fd9565b83811115611003576000848401525b50505050565b600061101482610fba565b61101e8185610fc5565b935061102e818560208601610fd6565b61103781610515565b840191505092915050565b600061104e8383611009565b905092915050565b6000602082019050919050565b600061106e82610f8e565b6110788185610f99565b93508360208202850161108a85610faa565b8060005b858110156110c657848403895281516110a78582611042565b94506110b283611056565b925060208a0199505060018101905061108e565b50829750879550505050505092915050565b60006040830160008301516110f06000860182610f7f565b50602083015184820360208601526111088282611063565b9150508091505092915050565b61111e816107eb565b82525050565b61112d81610821565b82525050565b600060a082019050818103600083015261114d81886110d8565b905061115c6020830187611115565b6111696040830186611115565b818103606083015261117b81856110d8565b905061118a6080830184611124565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6111c981610960565b82525050565b6111d8816107eb565b82525050565b6040820160008201516111f460008501826111c0565b50602082015161120760208501826111cf565b50505050565b600061121983836111de565b60408301905092915050565b6000602082019050919050565b600061123d82611194565b611247818561119f565b9350611252836111b0565b8060005b8381101561128357815161126a888261120d565b975061127583611225565b925050600181019050611256565b5085935050505092915050565b61129981610a85565b82525050565b600060808201905081810360008301526112b98187611232565b90506112c86020830186611290565b81810360408301526112da81856110d8565b90506112e96060830184611124565b95945050505050565b6112fb81610960565b82525050565b600060a08201905061131660008301886112f2565b6113236020830187611115565b6113306040830186611115565b818103606083015261134281856110d8565b90506113516080830184611124565b9695505050505050565b6000608082019050818103600083015261137581876110d8565b90506113846020830186611115565b818103604083015261139681856110d8565b90506113a56060830184611124565b95945050505050565b60006080820190506113c360008301876112f2565b6113d06020830186611115565b81810360408301526113e281856110d8565b90506113f16060830184611124565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060408301600083015161143e6000860182610f7f565b50602083015184820360208601526114568282611063565b9150508091505092915050565b600060408301600083015184820360008601526114808282611426565b915050602083015161149560208601826111cf565b508091505092915050565b60006114ac8383611463565b905092915050565b6000602082019050919050565b60006114cc826113fa565b6114d68185611405565b9350836020820285016114e885611416565b8060005b85811015611524578484038952815161150585826114a0565b9450611510836114b4565b925060208a019950506001810190506114ec565b50829750879550505050505092915050565b6000608082019050818103600083015261155081876114c1565b905061155f6020830186611290565b818103604083015261157181856110d8565b90506115806060830184611124565b9594505050505056fea264697066735822122045f09e9526479cb895d7cea7861283c3c0bba940b35a00486c33d9eed6ab352464736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH2 0x804 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x15BF DUP1 PUSH2 0x62 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAF3DCEE8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAF3DCEE8 EQ PUSH2 0xD6 JUMPI DUP1 PUSH4 0xB38C60FA EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xDAB20FDC EQ PUSH2 0x12C JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x89A570FC EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x8A362D5C EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x94F69115 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x861 JUMP JUMPDEST PUSH2 0x148 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0xAC1 JUMP JUMPDEST PUSH2 0x1E2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xCF SWAP2 SWAP1 PUSH2 0xB60 JUMP JUMPDEST PUSH2 0x279 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDE PUSH2 0x313 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x109 SWAP2 SWAP1 PUSH2 0xC71 JUMP JUMPDEST PUSH2 0x337 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xD10 JUMP JUMPDEST PUSH2 0x3CE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x146 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x141 SWAP2 SWAP1 PUSH2 0xEE0 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x89A570FC DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1133 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A362D5C DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x241 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x94F69115 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2DA SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1301 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x308 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB38C60FA DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x396 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x135B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB9F813FF DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x42D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x13AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDAB20FDC DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4C4 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x55E DUP3 PUSH2 0x515 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x57D JUMPI PUSH2 0x57C PUSH2 0x526 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x590 PUSH2 0x4FC JUMP JUMPDEST SWAP1 POP PUSH2 0x59C DUP3 DUP3 PUSH2 0x555 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x5BC DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP2 EQ PUSH2 0x5C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5D9 DUP2 PUSH2 0x5B3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5FF JUMPI PUSH2 0x5FE PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x635 JUMPI PUSH2 0x634 PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH2 0x63E DUP3 PUSH2 0x515 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x66D PUSH2 0x668 DUP5 PUSH2 0x61A JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x689 JUMPI PUSH2 0x688 PUSH2 0x615 JUMP JUMPDEST JUMPDEST PUSH2 0x694 DUP5 DUP3 DUP6 PUSH2 0x64B JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6B1 JUMPI PUSH2 0x6B0 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6C1 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x65A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DD PUSH2 0x6D8 DUP5 PUSH2 0x5E4 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x6FF PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x747 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x725 JUMPI PUSH2 0x724 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x732 DUP10 DUP3 PUSH2 0x69C JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x702 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x766 JUMPI PUSH2 0x765 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x776 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x6CA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x795 JUMPI PUSH2 0x794 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x79F PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x7AF DUP5 DUP3 DUP6 ADD PUSH2 0x5CA JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7D3 JUMPI PUSH2 0x7D2 PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0x7DF DUP5 DUP3 DUP6 ADD PUSH2 0x751 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7FE DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP2 EQ PUSH2 0x809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x81B DUP2 PUSH2 0x7F5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x83E DUP2 PUSH2 0x821 JUMP JUMPDEST DUP2 EQ PUSH2 0x849 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85B DUP2 PUSH2 0x835 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x87D JUMPI PUSH2 0x87C PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x89B JUMPI PUSH2 0x89A PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8A7 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x8B8 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x8C9 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8EA JUMPI PUSH2 0x8E9 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8F6 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x907 DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x92F JUMPI PUSH2 0x92E PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x96B DUP3 PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x97B DUP2 PUSH2 0x960 JUMP JUMPDEST DUP2 EQ PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x998 DUP2 PUSH2 0x972 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B4 JUMPI PUSH2 0x9B3 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x9BE PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9CE DUP5 DUP3 DUP6 ADD PUSH2 0x989 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0x9E2 DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA01 PUSH2 0x9FC DUP5 PUSH2 0x914 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x40 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA24 JUMPI PUSH2 0xA23 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA4D JUMPI DUP1 PUSH2 0xA39 DUP9 DUP3 PUSH2 0x99E JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x40 DUP2 ADD SWAP1 POP PUSH2 0xA26 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA6C JUMPI PUSH2 0xA6B PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA7C DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x9EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA9E DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP2 EQ PUSH2 0xAA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xABB DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xADB JUMPI PUSH2 0xADA PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAF9 JUMPI PUSH2 0xAF8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB05 DUP8 DUP3 DUP9 ADD PUSH2 0xA57 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xB16 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB37 JUMPI PUSH2 0xB36 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB43 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xB54 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB7C JUMPI PUSH2 0xB7B PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xB8A DUP9 DUP3 DUP10 ADD PUSH2 0x989 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xB9B DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xBAC DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBCD JUMPI PUSH2 0xBCC PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xBD9 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0xBEA DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1C PUSH2 0xC17 PUSH2 0xC12 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2E DUP3 PUSH2 0xC01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC40 DUP3 PUSH2 0xC23 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC50 DUP2 PUSH2 0xC35 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xC6B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC47 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC8B JUMPI PUSH2 0xC8A PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCA9 JUMPI PUSH2 0xCA8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCB5 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xCC6 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCE7 JUMPI PUSH2 0xCE6 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCF3 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD04 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD2A JUMPI PUSH2 0xD29 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD38 DUP8 DUP3 DUP9 ADD PUSH2 0x989 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xD49 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD6A JUMPI PUSH2 0xD69 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xD76 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD87 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDAE JUMPI PUSH2 0xDAD PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDD5 JUMPI PUSH2 0xDD4 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0xDDF PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFF JUMPI PUSH2 0xDFE PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0xE0B DUP5 DUP3 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0xE1F DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE3E PUSH2 0xE39 DUP5 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xE61 JUMPI PUSH2 0xE60 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xEA8 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE86 JUMPI PUSH2 0xE85 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0xE93 DUP10 DUP3 PUSH2 0xDBF JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE63 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xEC7 JUMPI PUSH2 0xEC6 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xED7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xE2B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xEFA JUMPI PUSH2 0xEF9 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF18 JUMPI PUSH2 0xF17 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF24 DUP8 DUP3 DUP9 ADD PUSH2 0xEB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xF35 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF56 JUMPI PUSH2 0xF55 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF62 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xF73 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xF88 DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFF4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFD9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1003 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1014 DUP3 PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x101E DUP2 DUP6 PUSH2 0xFC5 JUMP JUMPDEST SWAP4 POP PUSH2 0x102E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x1037 DUP2 PUSH2 0x515 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x104E DUP4 DUP4 PUSH2 0x1009 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x106E DUP3 PUSH2 0xF8E JUMP JUMPDEST PUSH2 0x1078 DUP2 DUP6 PUSH2 0xF99 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x108A DUP6 PUSH2 0xFAA JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x10C6 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x10A7 DUP6 DUP3 PUSH2 0x1042 JUMP JUMPDEST SWAP5 POP PUSH2 0x10B2 DUP4 PUSH2 0x1056 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x108E JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x10F0 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1108 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111E DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x821 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x114D DUP2 DUP9 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x115C PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1169 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x117B DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x118A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11C9 DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11D8 DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD PUSH1 0x0 DUP3 ADD MLOAD PUSH2 0x11F4 PUSH1 0x0 DUP6 ADD DUP3 PUSH2 0x11C0 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1207 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1219 DUP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x123D DUP3 PUSH2 0x1194 JUMP JUMPDEST PUSH2 0x1247 DUP2 DUP6 PUSH2 0x119F JUMP JUMPDEST SWAP4 POP PUSH2 0x1252 DUP4 PUSH2 0x11B0 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1283 JUMPI DUP2 MLOAD PUSH2 0x126A DUP9 DUP3 PUSH2 0x120D JUMP JUMPDEST SWAP8 POP PUSH2 0x1275 DUP4 PUSH2 0x1225 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1256 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1299 DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12B9 DUP2 DUP8 PUSH2 0x1232 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C8 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x12DA DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x12E9 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12FB DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1316 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x1323 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1330 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1342 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1351 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1375 DUP2 DUP8 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1384 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1396 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13A5 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x13C3 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x13D0 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x13E2 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13F1 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x143E PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1456 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x0 DUP7 ADD MSTORE PUSH2 0x1480 DUP3 DUP3 PUSH2 0x1426 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1495 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14AC DUP4 DUP4 PUSH2 0x1463 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14CC DUP3 PUSH2 0x13FA JUMP JUMPDEST PUSH2 0x14D6 DUP2 DUP6 PUSH2 0x1405 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x14E8 DUP6 PUSH2 0x1416 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1524 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x1505 DUP6 DUP3 PUSH2 0x14A0 JUMP JUMPDEST SWAP5 POP PUSH2 0x1510 DUP4 PUSH2 0x14B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x14EC JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1550 DUP2 DUP8 PUSH2 0x14C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x155F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1571 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1580 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASLIMIT CREATE SWAP15 SWAP6 0x26 SELFBALANCE SWAP13 0xB8 SWAP6 0xD7 0xCE 0xA7 DUP7 SLT DUP4 0xC3 0xC0 0xBB 0xA9 BLOCKHASH 0xB3 GAS STOP BASEFEE PUSH13 0x33D9EED6AB352464736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "119:2065:0:-:0;;;264:42;223:84;;;;;;;;;;;;;;;;;;;;119:2065;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "functionDebugData": { - "@transfer_140": { + "@transfer_34": { "entryPoint": 974, - "id": 140, + "id": 34, "parameterSlots": 4, "returnSlots": 0 }, - "@transfer_multi_assets_267": { + "@transfer_multi_assets_161": { "entryPoint": 1125, - "id": 267, + "id": 161, "parameterSlots": 4, "returnSlots": 0 }, - "@transfer_multi_currencies_242": { + "@transfer_multi_currencies_136": { "entryPoint": 482, - "id": 242, + "id": 136, "parameterSlots": 4, "returnSlots": 0 }, - "@transfer_multiasset_190": { + "@transfer_multiasset_84": { "entryPoint": 823, - "id": 190, + "id": 84, "parameterSlots": 4, "returnSlots": 0 }, - "@transfer_multiasset_with_fee_217": { + "@transfer_multiasset_with_fee_111": { "entryPoint": 328, - "id": 217, + "id": 111, "parameterSlots": 5, "returnSlots": 0 }, - "@transfer_with_fee_166": { + "@transfer_with_fee_60": { "entryPoint": 633, - "id": 166, + "id": 60, "parameterSlots": 5, "returnSlots": 0 }, - "@xtokens_117": { + "@xtokens_11": { "entryPoint": 787, - "id": 117, + "id": 11, "parameterSlots": 0, "returnSlots": 0 }, @@ -342,13 +342,13 @@ "parameterSlots": 3, "returnSlots": 1 }, - "abi_decode_available_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr": { + "abi_decode_available_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr": { "entryPoint": 2542, "id": null, "parameterSlots": 3, "returnSlots": 1 }, - "abi_decode_available_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr": { + "abi_decode_available_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr": { "entryPoint": 3627, "id": null, "parameterSlots": 3, @@ -372,13 +372,13 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr": { + "abi_decode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr": { "entryPoint": 2647, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr": { + "abi_decode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr": { "entryPoint": 3762, "id": null, "parameterSlots": 2, @@ -390,19 +390,19 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_t_struct$_Currency_$19_memory_ptr": { + "abi_decode_t_struct$_Currency_$182_memory_ptr": { "entryPoint": 2462, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_t_struct$_MultiAsset_$14_memory_ptr": { + "abi_decode_t_struct$_MultiAsset_$177_memory_ptr": { "entryPoint": 3519, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_t_struct$_Multilocation_$8_memory_ptr": { + "abi_decode_t_struct$_Multilocation_$171_memory_ptr": { "entryPoint": 1919, "id": null, "parameterSlots": 2, @@ -432,37 +432,37 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_decode_tuple_t_addresst_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64": { + "abi_decode_tuple_t_addresst_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64": { "entryPoint": 3344, "id": null, "parameterSlots": 2, "returnSlots": 4 }, - "abi_decode_tuple_t_addresst_uint256t_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64": { + "abi_decode_tuple_t_addresst_uint256t_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64": { "entryPoint": 2912, "id": null, "parameterSlots": 2, "returnSlots": 5 }, - "abi_decode_tuple_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$8_memory_ptrt_uint64": { + "abi_decode_tuple_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$171_memory_ptrt_uint64": { "entryPoint": 2753, "id": null, "parameterSlots": 2, "returnSlots": 4 }, - "abi_decode_tuple_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$8_memory_ptrt_uint64": { + "abi_decode_tuple_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$171_memory_ptrt_uint64": { "entryPoint": 3808, "id": null, "parameterSlots": 2, "returnSlots": 4 }, - "abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptrt_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64": { + "abi_decode_tuple_t_struct$_Multilocation_$171_memory_ptrt_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64": { "entryPoint": 3185, "id": null, "parameterSlots": 2, "returnSlots": 4 }, - "abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptrt_uint256t_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64": { + "abi_decode_tuple_t_struct$_Multilocation_$171_memory_ptrt_uint256t_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64": { "entryPoint": 2145, "id": null, "parameterSlots": 2, @@ -474,13 +474,13 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_encodeUpdatedPos_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr": { + "abi_encodeUpdatedPos_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr": { "entryPoint": 4621, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encodeUpdatedPos_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr": { + "abi_encodeUpdatedPos_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr": { "entryPoint": 5280, "id": null, "parameterSlots": 2, @@ -504,13 +504,13 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack": { + "abi_encode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack": { "entryPoint": 4658, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack": { + "abi_encode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack": { "entryPoint": 5313, "id": null, "parameterSlots": 2, @@ -522,31 +522,31 @@ "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_contract$_Xtokens_$108_to_t_address_fromStack": { + "abi_encode_t_contract$_Xtokens_$271_to_t_address_fromStack": { "entryPoint": 3143, "id": null, "parameterSlots": 2, "returnSlots": 0 }, - "abi_encode_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr": { + "abi_encode_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr": { "entryPoint": 4574, "id": null, "parameterSlots": 2, "returnSlots": 0 }, - "abi_encode_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr": { + "abi_encode_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr": { "entryPoint": 5219, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr": { + "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr": { "entryPoint": 5158, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack": { + "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack": { "entryPoint": 4312, "id": null, "parameterSlots": 2, @@ -582,43 +582,43 @@ "parameterSlots": 2, "returnSlots": 0 }, - "abi_encode_tuple_t_address_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_address_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed": { + "abi_encode_tuple_t_address_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_address_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed": { "entryPoint": 5038, "id": null, "parameterSlots": 5, "returnSlots": 1 }, - "abi_encode_tuple_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed": { + "abi_encode_tuple_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed": { "entryPoint": 4865, "id": null, "parameterSlots": 6, "returnSlots": 1 }, - "abi_encode_tuple_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed": { + "abi_encode_tuple_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed": { "entryPoint": 4767, "id": null, "parameterSlots": 5, "returnSlots": 1 }, - "abi_encode_tuple_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed": { + "abi_encode_tuple_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed": { "entryPoint": 5430, "id": null, "parameterSlots": 5, "returnSlots": 1 }, - "abi_encode_tuple_t_contract$_Xtokens_$108__to_t_address__fromStack_reversed": { + "abi_encode_tuple_t_contract$_Xtokens_$271__to_t_address__fromStack_reversed": { "entryPoint": 3158, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed": { + "abi_encode_tuple_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed": { "entryPoint": 4955, "id": null, "parameterSlots": 5, "returnSlots": 1 }, - "abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed": { + "abi_encode_tuple_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed": { "entryPoint": 4403, "id": null, "parameterSlots": 6, @@ -642,13 +642,13 @@ "parameterSlots": 1, "returnSlots": 1 }, - "array_allocation_size_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr": { + "array_allocation_size_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr": { "entryPoint": 2324, "id": null, "parameterSlots": 1, "returnSlots": 1 }, - "array_allocation_size_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr": { + "array_allocation_size_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr": { "entryPoint": 3475, "id": null, "parameterSlots": 1, @@ -666,13 +666,13 @@ "parameterSlots": 1, "returnSlots": 1 }, - "array_dataslot_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr": { + "array_dataslot_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr": { "entryPoint": 4528, "id": null, "parameterSlots": 1, "returnSlots": 1 }, - "array_dataslot_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr": { + "array_dataslot_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr": { "entryPoint": 5142, "id": null, "parameterSlots": 1, @@ -684,13 +684,13 @@ "parameterSlots": 1, "returnSlots": 1 }, - "array_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr": { + "array_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr": { "entryPoint": 4500, "id": null, "parameterSlots": 1, "returnSlots": 1 }, - "array_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr": { + "array_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr": { "entryPoint": 5114, "id": null, "parameterSlots": 1, @@ -708,13 +708,13 @@ "parameterSlots": 1, "returnSlots": 1 }, - "array_nextElement_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr": { + "array_nextElement_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr": { "entryPoint": 4645, "id": null, "parameterSlots": 1, "returnSlots": 1 }, - "array_nextElement_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr": { + "array_nextElement_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr": { "entryPoint": 5300, "id": null, "parameterSlots": 1, @@ -726,13 +726,13 @@ "parameterSlots": 2, "returnSlots": 1 }, - "array_storeLengthForEncoding_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack": { + "array_storeLengthForEncoding_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack": { "entryPoint": 4511, "id": null, "parameterSlots": 2, "returnSlots": 1 }, - "array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack": { + "array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack": { "entryPoint": 5125, "id": null, "parameterSlots": 2, @@ -780,7 +780,7 @@ "parameterSlots": 1, "returnSlots": 1 }, - "convert_t_contract$_Xtokens_$108_to_t_address": { + "convert_t_contract$_Xtokens_$271_to_t_address": { "entryPoint": 3125, "id": null, "parameterSlots": 1, @@ -911,22 +911,22 @@ { "ast": { "nodeType": "YulBlock", - "src": "0:36045:1", + "src": "0:36219:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "47:35:1", + "src": "47:35:2", "statements": [ { "nodeType": "YulAssignment", - "src": "57:19:1", + "src": "57:19:2", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "73:2:1", + "src": "73:2:2", "type": "", "value": "64" } @@ -934,16 +934,16 @@ "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "67:5:1" + "src": "67:5:2" }, "nodeType": "YulFunctionCall", - "src": "67:9:1" + "src": "67:9:2" }, "variableNames": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "57:6:1" + "src": "57:6:2" } ] } @@ -955,16 +955,16 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "40:6:1", + "src": "40:6:2", "type": "" } ], - "src": "7:75:1" + "src": "7:75:2" }, { "body": { "nodeType": "YulBlock", - "src": "177:28:1", + "src": "177:28:2", "statements": [ { "expression": { @@ -972,14 +972,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "194:1:1", + "src": "194:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "197:1:1", + "src": "197:1:2", "type": "", "value": "0" } @@ -987,24 +987,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "187:6:1" + "src": "187:6:2" }, "nodeType": "YulFunctionCall", - "src": "187:12:1" + "src": "187:12:2" }, "nodeType": "YulExpressionStatement", - "src": "187:12:1" + "src": "187:12:2" } ] }, "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulFunctionDefinition", - "src": "88:117:1" + "src": "88:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "300:28:1", + "src": "300:28:2", "statements": [ { "expression": { @@ -1012,14 +1012,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "317:1:1", + "src": "317:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "320:1:1", + "src": "320:1:2", "type": "", "value": "0" } @@ -1027,24 +1027,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "310:6:1" + "src": "310:6:2" }, "nodeType": "YulFunctionCall", - "src": "310:12:1" + "src": "310:12:2" }, "nodeType": "YulExpressionStatement", - "src": "310:12:1" + "src": "310:12:2" } ] }, "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulFunctionDefinition", - "src": "211:117:1" + "src": "211:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "423:28:1", + "src": "423:28:2", "statements": [ { "expression": { @@ -1052,14 +1052,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "440:1:1", + "src": "440:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "443:1:1", + "src": "443:1:2", "type": "", "value": "0" } @@ -1067,28 +1067,28 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "433:6:1" + "src": "433:6:2" }, "nodeType": "YulFunctionCall", - "src": "433:12:1" + "src": "433:12:2" }, "nodeType": "YulExpressionStatement", - "src": "433:12:1" + "src": "433:12:2" } ] }, "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", "nodeType": "YulFunctionDefinition", - "src": "334:117:1" + "src": "334:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "505:54:1", + "src": "505:54:2", "statements": [ { "nodeType": "YulAssignment", - "src": "515:38:1", + "src": "515:38:2", "value": { "arguments": [ { @@ -1096,12 +1096,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "533:5:1" + "src": "533:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "540:2:1", + "src": "540:2:2", "type": "", "value": "31" } @@ -1109,17 +1109,17 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "529:3:1" + "src": "529:3:2" }, "nodeType": "YulFunctionCall", - "src": "529:14:1" + "src": "529:14:2" }, { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "549:2:1", + "src": "549:2:2", "type": "", "value": "31" } @@ -1127,25 +1127,25 @@ "functionName": { "name": "not", "nodeType": "YulIdentifier", - "src": "545:3:1" + "src": "545:3:2" }, "nodeType": "YulFunctionCall", - "src": "545:7:1" + "src": "545:7:2" } ], "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "525:3:1" + "src": "525:3:2" }, "nodeType": "YulFunctionCall", - "src": "525:28:1" + "src": "525:28:2" }, "variableNames": [ { "name": "result", "nodeType": "YulIdentifier", - "src": "515:6:1" + "src": "515:6:2" } ] } @@ -1157,7 +1157,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "488:5:1", + "src": "488:5:2", "type": "" } ], @@ -1165,16 +1165,16 @@ { "name": "result", "nodeType": "YulTypedName", - "src": "498:6:1", + "src": "498:6:2", "type": "" } ], - "src": "457:102:1" + "src": "457:102:2" }, { "body": { "nodeType": "YulBlock", - "src": "593:152:1", + "src": "593:152:2", "statements": [ { "expression": { @@ -1182,14 +1182,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "610:1:1", + "src": "610:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "613:77:1", + "src": "613:77:2", "type": "", "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" } @@ -1197,13 +1197,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "603:6:1" + "src": "603:6:2" }, "nodeType": "YulFunctionCall", - "src": "603:88:1" + "src": "603:88:2" }, "nodeType": "YulExpressionStatement", - "src": "603:88:1" + "src": "603:88:2" }, { "expression": { @@ -1211,14 +1211,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "707:1:1", + "src": "707:1:2", "type": "", "value": "4" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "710:4:1", + "src": "710:4:2", "type": "", "value": "0x41" } @@ -1226,13 +1226,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "700:6:1" + "src": "700:6:2" }, "nodeType": "YulFunctionCall", - "src": "700:15:1" + "src": "700:15:2" }, "nodeType": "YulExpressionStatement", - "src": "700:15:1" + "src": "700:15:2" }, { "expression": { @@ -1240,14 +1240,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "731:1:1", + "src": "731:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "734:4:1", + "src": "734:4:2", "type": "", "value": "0x24" } @@ -1255,65 +1255,65 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "724:6:1" + "src": "724:6:2" }, "nodeType": "YulFunctionCall", - "src": "724:15:1" + "src": "724:15:2" }, "nodeType": "YulExpressionStatement", - "src": "724:15:1" + "src": "724:15:2" } ] }, "name": "panic_error_0x41", "nodeType": "YulFunctionDefinition", - "src": "565:180:1" + "src": "565:180:2" }, { "body": { "nodeType": "YulBlock", - "src": "794:238:1", + "src": "794:238:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "804:58:1", + "src": "804:58:2", "value": { "arguments": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "826:6:1" + "src": "826:6:2" }, { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "856:4:1" + "src": "856:4:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "834:21:1" + "src": "834:21:2" }, "nodeType": "YulFunctionCall", - "src": "834:27:1" + "src": "834:27:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "822:3:1" + "src": "822:3:2" }, "nodeType": "YulFunctionCall", - "src": "822:40:1" + "src": "822:40:2" }, "variables": [ { "name": "newFreePtr", "nodeType": "YulTypedName", - "src": "808:10:1", + "src": "808:10:2", "type": "" } ] @@ -1321,7 +1321,7 @@ { "body": { "nodeType": "YulBlock", - "src": "973:22:1", + "src": "973:22:2", "statements": [ { "expression": { @@ -1329,13 +1329,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "975:16:1" + "src": "975:16:2" }, "nodeType": "YulFunctionCall", - "src": "975:18:1" + "src": "975:18:2" }, "nodeType": "YulExpressionStatement", - "src": "975:18:1" + "src": "975:18:2" } ] }, @@ -1346,12 +1346,12 @@ { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "916:10:1" + "src": "916:10:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "928:18:1", + "src": "928:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -1359,43 +1359,43 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "913:2:1" + "src": "913:2:2" }, "nodeType": "YulFunctionCall", - "src": "913:34:1" + "src": "913:34:2" }, { "arguments": [ { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "952:10:1" + "src": "952:10:2" }, { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "964:6:1" + "src": "964:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "949:2:1" + "src": "949:2:2" }, "nodeType": "YulFunctionCall", - "src": "949:22:1" + "src": "949:22:2" } ], "functionName": { "name": "or", "nodeType": "YulIdentifier", - "src": "910:2:1" + "src": "910:2:2" }, "nodeType": "YulFunctionCall", - "src": "910:62:1" + "src": "910:62:2" }, "nodeType": "YulIf", - "src": "907:88:1" + "src": "907:88:2" }, { "expression": { @@ -1403,26 +1403,26 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "1011:2:1", + "src": "1011:2:2", "type": "", "value": "64" }, { "name": "newFreePtr", "nodeType": "YulIdentifier", - "src": "1015:10:1" + "src": "1015:10:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "1004:6:1" + "src": "1004:6:2" }, "nodeType": "YulFunctionCall", - "src": "1004:22:1" + "src": "1004:22:2" }, "nodeType": "YulExpressionStatement", - "src": "1004:22:1" + "src": "1004:22:2" } ] }, @@ -1432,41 +1432,41 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "780:6:1", + "src": "780:6:2", "type": "" }, { "name": "size", "nodeType": "YulTypedName", - "src": "788:4:1", + "src": "788:4:2", "type": "" } ], - "src": "751:281:1" + "src": "751:281:2" }, { "body": { "nodeType": "YulBlock", - "src": "1079:88:1", + "src": "1079:88:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1089:30:1", + "src": "1089:30:2", "value": { "arguments": [], "functionName": { "name": "allocate_unbounded", "nodeType": "YulIdentifier", - "src": "1099:18:1" + "src": "1099:18:2" }, "nodeType": "YulFunctionCall", - "src": "1099:20:1" + "src": "1099:20:2" }, "variableNames": [ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "1089:6:1" + "src": "1089:6:2" } ] }, @@ -1476,24 +1476,24 @@ { "name": "memPtr", "nodeType": "YulIdentifier", - "src": "1148:6:1" + "src": "1148:6:2" }, { "name": "size", "nodeType": "YulIdentifier", - "src": "1156:4:1" + "src": "1156:4:2" } ], "functionName": { "name": "finalize_allocation", "nodeType": "YulIdentifier", - "src": "1128:19:1" + "src": "1128:19:2" }, "nodeType": "YulFunctionCall", - "src": "1128:33:1" + "src": "1128:33:2" }, "nodeType": "YulExpressionStatement", - "src": "1128:33:1" + "src": "1128:33:2" } ] }, @@ -1503,7 +1503,7 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "1063:4:1", + "src": "1063:4:2", "type": "" } ], @@ -1511,16 +1511,16 @@ { "name": "memPtr", "nodeType": "YulTypedName", - "src": "1072:6:1", + "src": "1072:6:2", "type": "" } ], - "src": "1038:129:1" + "src": "1038:129:2" }, { "body": { "nodeType": "YulBlock", - "src": "1262:28:1", + "src": "1262:28:2", "statements": [ { "expression": { @@ -1528,14 +1528,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "1279:1:1", + "src": "1279:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1282:1:1", + "src": "1282:1:2", "type": "", "value": "0" } @@ -1543,39 +1543,39 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "1272:6:1" + "src": "1272:6:2" }, "nodeType": "YulFunctionCall", - "src": "1272:12:1" + "src": "1272:12:2" }, "nodeType": "YulExpressionStatement", - "src": "1272:12:1" + "src": "1272:12:2" } ] }, "name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421", "nodeType": "YulFunctionDefinition", - "src": "1173:117:1" + "src": "1173:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "1339:43:1", + "src": "1339:43:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1349:27:1", + "src": "1349:27:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1364:5:1" + "src": "1364:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1371:4:1", + "src": "1371:4:2", "type": "", "value": "0xff" } @@ -1583,16 +1583,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "1360:3:1" + "src": "1360:3:2" }, "nodeType": "YulFunctionCall", - "src": "1360:16:1" + "src": "1360:16:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "1349:7:1" + "src": "1349:7:2" } ] } @@ -1604,7 +1604,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1321:5:1", + "src": "1321:5:2", "type": "" } ], @@ -1612,21 +1612,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "1331:7:1", + "src": "1331:7:2", "type": "" } ], - "src": "1296:86:1" + "src": "1296:86:2" }, { "body": { "nodeType": "YulBlock", - "src": "1429:77:1", + "src": "1429:77:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "1484:16:1", + "src": "1484:16:2", "statements": [ { "expression": { @@ -1634,14 +1634,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "1493:1:1", + "src": "1493:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1496:1:1", + "src": "1496:1:2", "type": "", "value": "0" } @@ -1649,13 +1649,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "1486:6:1" + "src": "1486:6:2" }, "nodeType": "YulFunctionCall", - "src": "1486:12:1" + "src": "1486:12:2" }, "nodeType": "YulExpressionStatement", - "src": "1486:12:1" + "src": "1486:12:2" } ] }, @@ -1666,44 +1666,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "1452:5:1" + "src": "1452:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1475:5:1" + "src": "1475:5:2" } ], "functionName": { "name": "cleanup_t_uint8", "nodeType": "YulIdentifier", - "src": "1459:15:1" + "src": "1459:15:2" }, "nodeType": "YulFunctionCall", - "src": "1459:22:1" + "src": "1459:22:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "1449:2:1" + "src": "1449:2:2" }, "nodeType": "YulFunctionCall", - "src": "1449:33:1" + "src": "1449:33:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "1442:6:1" + "src": "1442:6:2" }, "nodeType": "YulFunctionCall", - "src": "1442:41:1" + "src": "1442:41:2" }, "nodeType": "YulIf", - "src": "1439:61:1" + "src": "1439:61:2" } ] }, @@ -1713,41 +1713,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1422:5:1", + "src": "1422:5:2", "type": "" } ], - "src": "1388:118:1" + "src": "1388:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "1562:85:1", + "src": "1562:85:2", "statements": [ { "nodeType": "YulAssignment", - "src": "1572:29:1", + "src": "1572:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "1594:6:1" + "src": "1594:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "1581:12:1" + "src": "1581:12:2" }, "nodeType": "YulFunctionCall", - "src": "1581:20:1" + "src": "1581:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "1572:5:1" + "src": "1572:5:2" } ] }, @@ -1757,19 +1757,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "1635:5:1" + "src": "1635:5:2" } ], "functionName": { "name": "validator_revert_t_uint8", "nodeType": "YulIdentifier", - "src": "1610:24:1" + "src": "1610:24:2" }, "nodeType": "YulFunctionCall", - "src": "1610:31:1" + "src": "1610:31:2" }, "nodeType": "YulExpressionStatement", - "src": "1610:31:1" + "src": "1610:31:2" } ] }, @@ -1779,13 +1779,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "1540:6:1", + "src": "1540:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "1548:3:1", + "src": "1548:3:2", "type": "" } ], @@ -1793,16 +1793,16 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "1556:5:1", + "src": "1556:5:2", "type": "" } ], - "src": "1512:135:1" + "src": "1512:135:2" }, { "body": { "nodeType": "YulBlock", - "src": "1742:28:1", + "src": "1742:28:2", "statements": [ { "expression": { @@ -1810,14 +1810,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "1759:1:1", + "src": "1759:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1762:1:1", + "src": "1762:1:2", "type": "", "value": "0" } @@ -1825,29 +1825,29 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "1752:6:1" + "src": "1752:6:2" }, "nodeType": "YulFunctionCall", - "src": "1752:12:1" + "src": "1752:12:2" }, "nodeType": "YulExpressionStatement", - "src": "1752:12:1" + "src": "1752:12:2" } ] }, "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulFunctionDefinition", - "src": "1653:117:1" + "src": "1653:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "1867:229:1", + "src": "1867:229:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "1972:22:1", + "src": "1972:22:2", "statements": [ { "expression": { @@ -1855,13 +1855,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "1974:16:1" + "src": "1974:16:2" }, "nodeType": "YulFunctionCall", - "src": "1974:18:1" + "src": "1974:18:2" }, "nodeType": "YulExpressionStatement", - "src": "1974:18:1" + "src": "1974:18:2" } ] }, @@ -1870,12 +1870,12 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "1944:6:1" + "src": "1944:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "1952:18:1", + "src": "1952:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -1883,28 +1883,28 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "1941:2:1" + "src": "1941:2:2" }, "nodeType": "YulFunctionCall", - "src": "1941:30:1" + "src": "1941:30:2" }, "nodeType": "YulIf", - "src": "1938:56:1" + "src": "1938:56:2" }, { "nodeType": "YulAssignment", - "src": "2004:25:1", + "src": "2004:25:2", "value": { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "2016:6:1" + "src": "2016:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2024:4:1", + "src": "2024:4:2", "type": "", "value": "0x20" } @@ -1912,33 +1912,33 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "2012:3:1" + "src": "2012:3:2" }, "nodeType": "YulFunctionCall", - "src": "2012:17:1" + "src": "2012:17:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "2004:4:1" + "src": "2004:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "2066:23:1", + "src": "2066:23:2", "value": { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "2078:4:1" + "src": "2078:4:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2084:4:1", + "src": "2084:4:2", "type": "", "value": "0x20" } @@ -1946,16 +1946,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2074:3:1" + "src": "2074:3:2" }, "nodeType": "YulFunctionCall", - "src": "2074:15:1" + "src": "2074:15:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "2066:4:1" + "src": "2066:4:2" } ] } @@ -1967,7 +1967,7 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "1851:6:1", + "src": "1851:6:2", "type": "" } ], @@ -1975,16 +1975,16 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "1862:4:1", + "src": "1862:4:2", "type": "" } ], - "src": "1776:320:1" + "src": "1776:320:2" }, { "body": { "nodeType": "YulBlock", - "src": "2191:28:1", + "src": "2191:28:2", "statements": [ { "expression": { @@ -1992,14 +1992,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "2208:1:1", + "src": "2208:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2211:1:1", + "src": "2211:1:2", "type": "", "value": "0" } @@ -2007,24 +2007,24 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "2201:6:1" + "src": "2201:6:2" }, "nodeType": "YulFunctionCall", - "src": "2201:12:1" + "src": "2201:12:2" }, "nodeType": "YulExpressionStatement", - "src": "2201:12:1" + "src": "2201:12:2" } ] }, "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", "nodeType": "YulFunctionDefinition", - "src": "2102:117:1" + "src": "2102:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "2314:28:1", + "src": "2314:28:2", "statements": [ { "expression": { @@ -2032,14 +2032,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "2331:1:1", + "src": "2331:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2334:1:1", + "src": "2334:1:2", "type": "", "value": "0" } @@ -2047,29 +2047,29 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "2324:6:1" + "src": "2324:6:2" }, "nodeType": "YulFunctionCall", - "src": "2324:12:1" + "src": "2324:12:2" }, "nodeType": "YulExpressionStatement", - "src": "2324:12:1" + "src": "2324:12:2" } ] }, "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulFunctionDefinition", - "src": "2225:117:1" + "src": "2225:117:2" }, { "body": { "nodeType": "YulBlock", - "src": "2414:241:1", + "src": "2414:241:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "2519:22:1", + "src": "2519:22:2", "statements": [ { "expression": { @@ -2077,13 +2077,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "2521:16:1" + "src": "2521:16:2" }, "nodeType": "YulFunctionCall", - "src": "2521:18:1" + "src": "2521:18:2" }, "nodeType": "YulExpressionStatement", - "src": "2521:18:1" + "src": "2521:18:2" } ] }, @@ -2092,12 +2092,12 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "2491:6:1" + "src": "2491:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2499:18:1", + "src": "2499:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -2105,55 +2105,55 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "2488:2:1" + "src": "2488:2:2" }, "nodeType": "YulFunctionCall", - "src": "2488:30:1" + "src": "2488:30:2" }, "nodeType": "YulIf", - "src": "2485:56:1" + "src": "2485:56:2" }, { "nodeType": "YulAssignment", - "src": "2551:37:1", + "src": "2551:37:2", "value": { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "2581:6:1" + "src": "2581:6:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "2559:21:1" + "src": "2559:21:2" }, "nodeType": "YulFunctionCall", - "src": "2559:29:1" + "src": "2559:29:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "2551:4:1" + "src": "2551:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "2625:23:1", + "src": "2625:23:2", "value": { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "2637:4:1" + "src": "2637:4:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2643:4:1", + "src": "2643:4:2", "type": "", "value": "0x20" } @@ -2161,16 +2161,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2633:3:1" + "src": "2633:3:2" }, "nodeType": "YulFunctionCall", - "src": "2633:15:1" + "src": "2633:15:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "2625:4:1" + "src": "2625:4:2" } ] } @@ -2182,7 +2182,7 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "2398:6:1", + "src": "2398:6:2", "type": "" } ], @@ -2190,16 +2190,16 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "2409:4:1", + "src": "2409:4:2", "type": "" } ], - "src": "2348:307:1" + "src": "2348:307:2" }, { "body": { "nodeType": "YulBlock", - "src": "2712:103:1", + "src": "2712:103:2", "statements": [ { "expression": { @@ -2207,29 +2207,29 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "2735:3:1" + "src": "2735:3:2" }, { "name": "src", "nodeType": "YulIdentifier", - "src": "2740:3:1" + "src": "2740:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "2745:6:1" + "src": "2745:6:2" } ], "functionName": { "name": "calldatacopy", "nodeType": "YulIdentifier", - "src": "2722:12:1" + "src": "2722:12:2" }, "nodeType": "YulFunctionCall", - "src": "2722:30:1" + "src": "2722:30:2" }, "nodeType": "YulExpressionStatement", - "src": "2722:30:1" + "src": "2722:30:2" }, { "expression": { @@ -2239,26 +2239,26 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "2793:3:1" + "src": "2793:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "2798:6:1" + "src": "2798:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "2789:3:1" + "src": "2789:3:2" }, "nodeType": "YulFunctionCall", - "src": "2789:16:1" + "src": "2789:16:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "2807:1:1", + "src": "2807:1:2", "type": "", "value": "0" } @@ -2266,13 +2266,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "2782:6:1" + "src": "2782:6:2" }, "nodeType": "YulFunctionCall", - "src": "2782:27:1" + "src": "2782:27:2" }, "nodeType": "YulExpressionStatement", - "src": "2782:27:1" + "src": "2782:27:2" } ] }, @@ -2282,32 +2282,32 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "2694:3:1", + "src": "2694:3:2", "type": "" }, { "name": "dst", "nodeType": "YulTypedName", - "src": "2699:3:1", + "src": "2699:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "2704:6:1", + "src": "2704:6:2", "type": "" } ], - "src": "2661:154:1" + "src": "2661:154:2" }, { "body": { "nodeType": "YulBlock", - "src": "2904:327:1", + "src": "2904:327:2", "statements": [ { "nodeType": "YulAssignment", - "src": "2914:74:1", + "src": "2914:74:2", "value": { "arguments": [ { @@ -2315,31 +2315,31 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "2980:6:1" + "src": "2980:6:2" } ], "functionName": { "name": "array_allocation_size_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "2939:40:1" + "src": "2939:40:2" }, "nodeType": "YulFunctionCall", - "src": "2939:48:1" + "src": "2939:48:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "2923:15:1" + "src": "2923:15:2" }, "nodeType": "YulFunctionCall", - "src": "2923:65:1" + "src": "2923:65:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "2914:5:1" + "src": "2914:5:2" } ] }, @@ -2349,39 +2349,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "3004:5:1" + "src": "3004:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "3011:6:1" + "src": "3011:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "2997:6:1" + "src": "2997:6:2" }, "nodeType": "YulFunctionCall", - "src": "2997:21:1" + "src": "2997:21:2" }, "nodeType": "YulExpressionStatement", - "src": "2997:21:1" + "src": "2997:21:2" }, { "nodeType": "YulVariableDeclaration", - "src": "3027:27:1", + "src": "3027:27:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "3042:5:1" + "src": "3042:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3049:4:1", + "src": "3049:4:2", "type": "", "value": "0x20" } @@ -2389,16 +2389,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3038:3:1" + "src": "3038:3:2" }, "nodeType": "YulFunctionCall", - "src": "3038:16:1" + "src": "3038:16:2" }, "variables": [ { "name": "dst", "nodeType": "YulTypedName", - "src": "3031:3:1", + "src": "3031:3:2", "type": "" } ] @@ -2406,7 +2406,7 @@ { "body": { "nodeType": "YulBlock", - "src": "3092:83:1", + "src": "3092:83:2", "statements": [ { "expression": { @@ -2414,13 +2414,13 @@ "functionName": { "name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae", "nodeType": "YulIdentifier", - "src": "3094:77:1" + "src": "3094:77:2" }, "nodeType": "YulFunctionCall", - "src": "3094:79:1" + "src": "3094:79:2" }, "nodeType": "YulExpressionStatement", - "src": "3094:79:1" + "src": "3094:79:2" } ] }, @@ -2431,38 +2431,38 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "3073:3:1" + "src": "3073:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "3078:6:1" + "src": "3078:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3069:3:1" + "src": "3069:3:2" }, "nodeType": "YulFunctionCall", - "src": "3069:16:1" + "src": "3069:16:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "3087:3:1" + "src": "3087:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "3066:2:1" + "src": "3066:2:2" }, "nodeType": "YulFunctionCall", - "src": "3066:25:1" + "src": "3066:25:2" }, "nodeType": "YulIf", - "src": "3063:112:1" + "src": "3063:112:2" }, { "expression": { @@ -2470,29 +2470,29 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "3208:3:1" + "src": "3208:3:2" }, { "name": "dst", "nodeType": "YulIdentifier", - "src": "3213:3:1" + "src": "3213:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "3218:6:1" + "src": "3218:6:2" } ], "functionName": { "name": "copy_calldata_to_memory", "nodeType": "YulIdentifier", - "src": "3184:23:1" + "src": "3184:23:2" }, "nodeType": "YulFunctionCall", - "src": "3184:41:1" + "src": "3184:41:2" }, "nodeType": "YulExpressionStatement", - "src": "3184:41:1" + "src": "3184:41:2" } ] }, @@ -2502,19 +2502,19 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "2877:3:1", + "src": "2877:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "2882:6:1", + "src": "2882:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "2890:3:1", + "src": "2890:3:2", "type": "" } ], @@ -2522,21 +2522,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "2898:5:1", + "src": "2898:5:2", "type": "" } ], - "src": "2821:410:1" + "src": "2821:410:2" }, { "body": { "nodeType": "YulBlock", - "src": "3311:277:1", + "src": "3311:277:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "3360:83:1", + "src": "3360:83:2", "statements": [ { "expression": { @@ -2544,13 +2544,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "3362:77:1" + "src": "3362:77:2" }, "nodeType": "YulFunctionCall", - "src": "3362:79:1" + "src": "3362:79:2" }, "nodeType": "YulExpressionStatement", - "src": "3362:79:1" + "src": "3362:79:2" } ] }, @@ -2563,12 +2563,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "3339:6:1" + "src": "3339:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3347:4:1", + "src": "3347:4:2", "type": "", "value": "0x1f" } @@ -2576,68 +2576,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3335:3:1" + "src": "3335:3:2" }, "nodeType": "YulFunctionCall", - "src": "3335:17:1" + "src": "3335:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "3354:3:1" + "src": "3354:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "3331:3:1" + "src": "3331:3:2" }, "nodeType": "YulFunctionCall", - "src": "3331:27:1" + "src": "3331:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "3324:6:1" + "src": "3324:6:2" }, "nodeType": "YulFunctionCall", - "src": "3324:35:1" + "src": "3324:35:2" }, "nodeType": "YulIf", - "src": "3321:122:1" + "src": "3321:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "3452:34:1", + "src": "3452:34:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "3479:6:1" + "src": "3479:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "3466:12:1" + "src": "3466:12:2" }, "nodeType": "YulFunctionCall", - "src": "3466:20:1" + "src": "3466:20:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "3456:6:1", + "src": "3456:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "3495:87:1", + "src": "3495:87:2", "value": { "arguments": [ { @@ -2645,12 +2645,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "3555:6:1" + "src": "3555:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3563:4:1", + "src": "3563:4:2", "type": "", "value": "0x20" } @@ -2658,35 +2658,35 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3551:3:1" + "src": "3551:3:2" }, "nodeType": "YulFunctionCall", - "src": "3551:17:1" + "src": "3551:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "3570:6:1" + "src": "3570:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "3578:3:1" + "src": "3578:3:2" } ], "functionName": { "name": "abi_decode_available_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "3504:46:1" + "src": "3504:46:2" }, "nodeType": "YulFunctionCall", - "src": "3504:78:1" + "src": "3504:78:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "3495:5:1" + "src": "3495:5:2" } ] } @@ -2698,13 +2698,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "3289:6:1", + "src": "3289:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "3297:3:1", + "src": "3297:3:2", "type": "" } ], @@ -2712,20 +2712,20 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "3305:5:1", + "src": "3305:5:2", "type": "" } ], - "src": "3250:338:1" + "src": "3250:338:2" }, { "body": { "nodeType": "YulBlock", - "src": "3720:831:1", + "src": "3720:831:2", "statements": [ { "nodeType": "YulAssignment", - "src": "3730:99:1", + "src": "3730:99:2", "value": { "arguments": [ { @@ -2733,47 +2733,47 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "3821:6:1" + "src": "3821:6:2" } ], "functionName": { "name": "array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "3755:65:1" + "src": "3755:65:2" }, "nodeType": "YulFunctionCall", - "src": "3755:73:1" + "src": "3755:73:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "3739:15:1" + "src": "3739:15:2" }, "nodeType": "YulFunctionCall", - "src": "3739:90:1" + "src": "3739:90:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "3730:5:1" + "src": "3730:5:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "3838:16:1", + "src": "3838:16:2", "value": { "name": "array", "nodeType": "YulIdentifier", - "src": "3849:5:1" + "src": "3849:5:2" }, "variables": [ { "name": "dst", "nodeType": "YulTypedName", - "src": "3842:3:1", + "src": "3842:3:2", "type": "" } ] @@ -2784,39 +2784,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "3871:5:1" + "src": "3871:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "3878:6:1" + "src": "3878:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "3864:6:1" + "src": "3864:6:2" }, "nodeType": "YulFunctionCall", - "src": "3864:21:1" + "src": "3864:21:2" }, "nodeType": "YulExpressionStatement", - "src": "3864:21:1" + "src": "3864:21:2" }, { "nodeType": "YulAssignment", - "src": "3894:23:1", + "src": "3894:23:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "3905:5:1" + "src": "3905:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3912:4:1", + "src": "3912:4:2", "type": "", "value": "0x20" } @@ -2824,40 +2824,40 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3901:3:1" + "src": "3901:3:2" }, "nodeType": "YulFunctionCall", - "src": "3901:16:1" + "src": "3901:16:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "3894:3:1" + "src": "3894:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "3927:44:1", + "src": "3927:44:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "3945:6:1" + "src": "3945:6:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "3957:6:1" + "src": "3957:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "3965:4:1", + "src": "3965:4:2", "type": "", "value": "0x20" } @@ -2865,25 +2865,25 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "3953:3:1" + "src": "3953:3:2" }, "nodeType": "YulFunctionCall", - "src": "3953:17:1" + "src": "3953:17:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "3941:3:1" + "src": "3941:3:2" }, "nodeType": "YulFunctionCall", - "src": "3941:30:1" + "src": "3941:30:2" }, "variables": [ { "name": "srcEnd", "nodeType": "YulTypedName", - "src": "3931:6:1", + "src": "3931:6:2", "type": "" } ] @@ -2891,7 +2891,7 @@ { "body": { "nodeType": "YulBlock", - "src": "3999:103:1", + "src": "3999:103:2", "statements": [ { "expression": { @@ -2899,13 +2899,13 @@ "functionName": { "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", "nodeType": "YulIdentifier", - "src": "4013:77:1" + "src": "4013:77:2" }, "nodeType": "YulFunctionCall", - "src": "4013:79:1" + "src": "4013:79:2" }, "nodeType": "YulExpressionStatement", - "src": "4013:79:1" + "src": "4013:79:2" } ] }, @@ -2914,54 +2914,54 @@ { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "3986:6:1" + "src": "3986:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "3994:3:1" + "src": "3994:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "3983:2:1" + "src": "3983:2:2" }, "nodeType": "YulFunctionCall", - "src": "3983:15:1" + "src": "3983:15:2" }, "nodeType": "YulIf", - "src": "3980:122:1" + "src": "3980:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "4187:358:1", + "src": "4187:358:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "4202:36:1", + "src": "4202:36:2", "value": { "arguments": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "4234:3:1" + "src": "4234:3:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "4221:12:1" + "src": "4221:12:2" }, "nodeType": "YulFunctionCall", - "src": "4221:17:1" + "src": "4221:17:2" }, "variables": [ { "name": "innerOffset", "nodeType": "YulTypedName", - "src": "4206:11:1", + "src": "4206:11:2", "type": "" } ] @@ -2969,7 +2969,7 @@ { "body": { "nodeType": "YulBlock", - "src": "4290:83:1", + "src": "4290:83:2", "statements": [ { "expression": { @@ -2977,13 +2977,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "4292:77:1" + "src": "4292:77:2" }, "nodeType": "YulFunctionCall", - "src": "4292:79:1" + "src": "4292:79:2" }, "nodeType": "YulExpressionStatement", - "src": "4292:79:1" + "src": "4292:79:2" } ] }, @@ -2992,12 +2992,12 @@ { "name": "innerOffset", "nodeType": "YulIdentifier", - "src": "4257:11:1" + "src": "4257:11:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4270:18:1", + "src": "4270:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -3005,43 +3005,43 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "4254:2:1" + "src": "4254:2:2" }, "nodeType": "YulFunctionCall", - "src": "4254:35:1" + "src": "4254:35:2" }, "nodeType": "YulIf", - "src": "4251:122:1" + "src": "4251:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "4386:42:1", + "src": "4386:42:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "4408:6:1" + "src": "4408:6:2" }, { "name": "innerOffset", "nodeType": "YulIdentifier", - "src": "4416:11:1" + "src": "4416:11:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4404:3:1" + "src": "4404:3:2" }, "nodeType": "YulFunctionCall", - "src": "4404:24:1" + "src": "4404:24:2" }, "variables": [ { "name": "elementPos", "nodeType": "YulTypedName", - "src": "4390:10:1", + "src": "4390:10:2", "type": "" } ] @@ -3052,55 +3052,55 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "4449:3:1" + "src": "4449:3:2" }, { "arguments": [ { "name": "elementPos", "nodeType": "YulIdentifier", - "src": "4484:10:1" + "src": "4484:10:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "4496:3:1" + "src": "4496:3:2" } ], "functionName": { "name": "abi_decode_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "4454:29:1" + "src": "4454:29:2" }, "nodeType": "YulFunctionCall", - "src": "4454:46:1" + "src": "4454:46:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "4442:6:1" + "src": "4442:6:2" }, "nodeType": "YulFunctionCall", - "src": "4442:59:1" + "src": "4442:59:2" }, "nodeType": "YulExpressionStatement", - "src": "4442:59:1" + "src": "4442:59:2" }, { "nodeType": "YulAssignment", - "src": "4514:21:1", + "src": "4514:21:2", "value": { "arguments": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "4525:3:1" + "src": "4525:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4530:4:1", + "src": "4530:4:2", "type": "", "value": "0x20" } @@ -3108,16 +3108,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4521:3:1" + "src": "4521:3:2" }, "nodeType": "YulFunctionCall", - "src": "4521:14:1" + "src": "4521:14:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "4514:3:1" + "src": "4514:3:2" } ] } @@ -3128,41 +3128,41 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "4140:3:1" + "src": "4140:3:2" }, { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "4145:6:1" + "src": "4145:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "4137:2:1" + "src": "4137:2:2" }, "nodeType": "YulFunctionCall", - "src": "4137:15:1" + "src": "4137:15:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "4153:25:1", + "src": "4153:25:2", "statements": [ { "nodeType": "YulAssignment", - "src": "4155:21:1", + "src": "4155:21:2", "value": { "arguments": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "4166:3:1" + "src": "4166:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4171:4:1", + "src": "4171:4:2", "type": "", "value": "0x20" } @@ -3170,16 +3170,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4162:3:1" + "src": "4162:3:2" }, "nodeType": "YulFunctionCall", - "src": "4162:14:1" + "src": "4162:14:2" }, "variableNames": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "4155:3:1" + "src": "4155:3:2" } ] } @@ -3187,28 +3187,28 @@ }, "pre": { "nodeType": "YulBlock", - "src": "4115:21:1", + "src": "4115:21:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "4117:17:1", + "src": "4117:17:2", "value": { "name": "offset", "nodeType": "YulIdentifier", - "src": "4128:6:1" + "src": "4128:6:2" }, "variables": [ { "name": "src", "nodeType": "YulTypedName", - "src": "4121:3:1", + "src": "4121:3:2", "type": "" } ] } ] }, - "src": "4111:434:1" + "src": "4111:434:2" } ] }, @@ -3218,19 +3218,19 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "3690:6:1", + "src": "3690:6:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "3698:6:1", + "src": "3698:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "3706:3:1", + "src": "3706:3:2", "type": "" } ], @@ -3238,21 +3238,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "3714:5:1", + "src": "3714:5:2", "type": "" } ], - "src": "3609:942:1" + "src": "3609:942:2" }, { "body": { "nodeType": "YulBlock", - "src": "4658:302:1", + "src": "4658:302:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "4707:83:1", + "src": "4707:83:2", "statements": [ { "expression": { @@ -3260,13 +3260,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "4709:77:1" + "src": "4709:77:2" }, "nodeType": "YulFunctionCall", - "src": "4709:79:1" + "src": "4709:79:2" }, "nodeType": "YulExpressionStatement", - "src": "4709:79:1" + "src": "4709:79:2" } ] }, @@ -3279,12 +3279,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "4686:6:1" + "src": "4686:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4694:4:1", + "src": "4694:4:2", "type": "", "value": "0x1f" } @@ -3292,68 +3292,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4682:3:1" + "src": "4682:3:2" }, "nodeType": "YulFunctionCall", - "src": "4682:17:1" + "src": "4682:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "4701:3:1" + "src": "4701:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "4678:3:1" + "src": "4678:3:2" }, "nodeType": "YulFunctionCall", - "src": "4678:27:1" + "src": "4678:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "4671:6:1" + "src": "4671:6:2" }, "nodeType": "YulFunctionCall", - "src": "4671:35:1" + "src": "4671:35:2" }, "nodeType": "YulIf", - "src": "4668:122:1" + "src": "4668:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "4799:34:1", + "src": "4799:34:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "4826:6:1" + "src": "4826:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "4813:12:1" + "src": "4813:12:2" }, "nodeType": "YulFunctionCall", - "src": "4813:20:1" + "src": "4813:20:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "4803:6:1", + "src": "4803:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "4842:112:1", + "src": "4842:112:2", "value": { "arguments": [ { @@ -3361,12 +3361,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "4927:6:1" + "src": "4927:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "4935:4:1", + "src": "4935:4:2", "type": "", "value": "0x20" } @@ -3374,35 +3374,35 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "4923:3:1" + "src": "4923:3:2" }, "nodeType": "YulFunctionCall", - "src": "4923:17:1" + "src": "4923:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "4942:6:1" + "src": "4942:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "4950:3:1" + "src": "4950:3:2" } ], "functionName": { "name": "abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "4851:71:1" + "src": "4851:71:2" }, "nodeType": "YulFunctionCall", - "src": "4851:103:1" + "src": "4851:103:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "4842:5:1" + "src": "4842:5:2" } ] } @@ -3414,13 +3414,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "4636:6:1", + "src": "4636:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "4644:3:1", + "src": "4644:3:2", "type": "" } ], @@ -3428,21 +3428,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "4652:5:1", + "src": "4652:5:2", "type": "" } ], - "src": "4572:388:1" + "src": "4572:388:2" }, { "body": { "nodeType": "YulBlock", - "src": "5085:693:1", + "src": "5087:693:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "5129:83:1", + "src": "5131:83:2", "statements": [ { "expression": { @@ -3450,13 +3450,13 @@ "functionName": { "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", "nodeType": "YulIdentifier", - "src": "5131:77:1" + "src": "5133:77:2" }, "nodeType": "YulFunctionCall", - "src": "5131:79:1" + "src": "5133:79:2" }, "nodeType": "YulExpressionStatement", - "src": "5131:79:1" + "src": "5133:79:2" } ] }, @@ -3467,26 +3467,26 @@ { "name": "end", "nodeType": "YulIdentifier", - "src": "5106:3:1" + "src": "5108:3:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5111:9:1" + "src": "5113:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "5102:3:1" + "src": "5104:3:2" }, "nodeType": "YulFunctionCall", - "src": "5102:19:1" + "src": "5104:19:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5123:4:1", + "src": "5125:4:2", "type": "", "value": "0x40" } @@ -3494,23 +3494,23 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "5098:3:1" + "src": "5100:3:2" }, "nodeType": "YulFunctionCall", - "src": "5098:30:1" + "src": "5100:30:2" }, "nodeType": "YulIf", - "src": "5095:117:1" + "src": "5097:117:2" }, { "nodeType": "YulAssignment", - "src": "5221:30:1", + "src": "5223:30:2", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "5246:4:1", + "src": "5248:4:2", "type": "", "value": "0x40" } @@ -3518,30 +3518,30 @@ "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "5230:15:1" + "src": "5232:15:2" }, "nodeType": "YulFunctionCall", - "src": "5230:21:1" + "src": "5232:21:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5221:5:1" + "src": "5223:5:2" } ] }, { "nodeType": "YulBlock", - "src": "5261:151:1", + "src": "5263:151:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "5299:15:1", + "src": "5301:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "5313:1:1", + "src": "5315:1:2", "type": "", "value": "0" }, @@ -3549,7 +3549,7 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "5303:6:1", + "src": "5305:6:2", "type": "" } ] @@ -3562,12 +3562,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "5339:5:1" + "src": "5341:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5346:4:1", + "src": "5348:4:2", "type": "", "value": "0x00" } @@ -3575,10 +3575,10 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5335:3:1" + "src": "5337:3:2" }, "nodeType": "YulFunctionCall", - "src": "5335:16:1" + "src": "5337:16:2" }, { "arguments": [ @@ -3587,57 +3587,57 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5376:9:1" + "src": "5378:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "5387:6:1" + "src": "5389:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5372:3:1" + "src": "5374:3:2" }, "nodeType": "YulFunctionCall", - "src": "5372:22:1" + "src": "5374:22:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "5396:3:1" + "src": "5398:3:2" } ], "functionName": { "name": "abi_decode_t_uint8", "nodeType": "YulIdentifier", - "src": "5353:18:1" + "src": "5355:18:2" }, "nodeType": "YulFunctionCall", - "src": "5353:47:1" + "src": "5355:47:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "5328:6:1" + "src": "5330:6:2" }, "nodeType": "YulFunctionCall", - "src": "5328:73:1" + "src": "5330:73:2" }, "nodeType": "YulExpressionStatement", - "src": "5328:73:1" + "src": "5330:73:2" } ] }, { "nodeType": "YulBlock", - "src": "5422:349:1", + "src": "5424:349:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "5461:46:1", + "src": "5463:46:2", "value": { "arguments": [ { @@ -3645,12 +3645,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5492:9:1" + "src": "5494:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5503:2:1", + "src": "5505:2:2", "type": "", "value": "32" } @@ -3658,25 +3658,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5488:3:1" + "src": "5490:3:2" }, "nodeType": "YulFunctionCall", - "src": "5488:18:1" + "src": "5490:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "5475:12:1" + "src": "5477:12:2" }, "nodeType": "YulFunctionCall", - "src": "5475:32:1" + "src": "5477:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "5465:6:1", + "src": "5467:6:2", "type": "" } ] @@ -3684,7 +3684,7 @@ { "body": { "nodeType": "YulBlock", - "src": "5554:83:1", + "src": "5556:83:2", "statements": [ { "expression": { @@ -3692,13 +3692,13 @@ "functionName": { "name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421", "nodeType": "YulIdentifier", - "src": "5556:77:1" + "src": "5558:77:2" }, "nodeType": "YulFunctionCall", - "src": "5556:79:1" + "src": "5558:79:2" }, "nodeType": "YulExpressionStatement", - "src": "5556:79:1" + "src": "5558:79:2" } ] }, @@ -3707,12 +3707,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "5526:6:1" + "src": "5528:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5534:18:1", + "src": "5536:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -3720,13 +3720,13 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "5523:2:1" + "src": "5525:2:2" }, "nodeType": "YulFunctionCall", - "src": "5523:30:1" + "src": "5525:30:2" }, "nodeType": "YulIf", - "src": "5520:117:1" + "src": "5522:117:2" }, { "expression": { @@ -3736,12 +3736,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "5662:5:1" + "src": "5664:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5669:4:1", + "src": "5671:4:2", "type": "", "value": "0x20" } @@ -3749,10 +3749,10 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5658:3:1" + "src": "5660:3:2" }, "nodeType": "YulFunctionCall", - "src": "5658:16:1" + "src": "5660:16:2" }, { "arguments": [ @@ -3761,65 +3761,65 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "5735:9:1" + "src": "5737:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "5746:6:1" + "src": "5748:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "5731:3:1" + "src": "5733:3:2" }, "nodeType": "YulFunctionCall", - "src": "5731:22:1" + "src": "5733:22:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "5755:3:1" + "src": "5757:3:2" } ], "functionName": { "name": "abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "5676:54:1" + "src": "5678:54:2" }, "nodeType": "YulFunctionCall", - "src": "5676:83:1" + "src": "5678:83:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "5651:6:1" + "src": "5653:6:2" }, "nodeType": "YulFunctionCall", - "src": "5651:109:1" + "src": "5653:109:2" }, "nodeType": "YulExpressionStatement", - "src": "5651:109:1" + "src": "5653:109:2" } ] } ] }, - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "5060:9:1", + "src": "5062:9:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "5071:3:1", + "src": "5073:3:2", "type": "" } ], @@ -3827,30 +3827,30 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "5079:5:1", + "src": "5081:5:2", "type": "" } ], - "src": "5002:776:1" + "src": "5002:778:2" }, { "body": { "nodeType": "YulBlock", - "src": "5829:32:1", + "src": "5831:32:2", "statements": [ { "nodeType": "YulAssignment", - "src": "5839:16:1", + "src": "5841:16:2", "value": { "name": "value", "nodeType": "YulIdentifier", - "src": "5850:5:1" + "src": "5852:5:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "5839:7:1" + "src": "5841:7:2" } ] } @@ -3862,7 +3862,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "5811:5:1", + "src": "5813:5:2", "type": "" } ], @@ -3870,21 +3870,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "5821:7:1", + "src": "5823:7:2", "type": "" } ], - "src": "5784:77:1" + "src": "5786:77:2" }, { "body": { "nodeType": "YulBlock", - "src": "5910:79:1", + "src": "5912:79:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "5967:16:1", + "src": "5969:16:2", "statements": [ { "expression": { @@ -3892,14 +3892,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "5976:1:1", + "src": "5978:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "5979:1:1", + "src": "5981:1:2", "type": "", "value": "0" } @@ -3907,13 +3907,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "5969:6:1" + "src": "5971:6:2" }, "nodeType": "YulFunctionCall", - "src": "5969:12:1" + "src": "5971:12:2" }, "nodeType": "YulExpressionStatement", - "src": "5969:12:1" + "src": "5971:12:2" } ] }, @@ -3924,44 +3924,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "5933:5:1" + "src": "5935:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "5958:5:1" + "src": "5960:5:2" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "5940:17:1" + "src": "5942:17:2" }, "nodeType": "YulFunctionCall", - "src": "5940:24:1" + "src": "5942:24:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "5930:2:1" + "src": "5932:2:2" }, "nodeType": "YulFunctionCall", - "src": "5930:35:1" + "src": "5932:35:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "5923:6:1" + "src": "5925:6:2" }, "nodeType": "YulFunctionCall", - "src": "5923:43:1" + "src": "5925:43:2" }, "nodeType": "YulIf", - "src": "5920:63:1" + "src": "5922:63:2" } ] }, @@ -3971,41 +3971,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "5903:5:1", + "src": "5905:5:2", "type": "" } ], - "src": "5867:122:1" + "src": "5869:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "6047:87:1", + "src": "6049:87:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6057:29:1", + "src": "6059:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "6079:6:1" + "src": "6081:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "6066:12:1" + "src": "6068:12:2" }, "nodeType": "YulFunctionCall", - "src": "6066:20:1" + "src": "6068:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "6057:5:1" + "src": "6059:5:2" } ] }, @@ -4015,19 +4015,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "6122:5:1" + "src": "6124:5:2" } ], "functionName": { "name": "validator_revert_t_uint256", "nodeType": "YulIdentifier", - "src": "6095:26:1" + "src": "6097:26:2" }, "nodeType": "YulFunctionCall", - "src": "6095:33:1" + "src": "6097:33:2" }, "nodeType": "YulExpressionStatement", - "src": "6095:33:1" + "src": "6097:33:2" } ] }, @@ -4037,13 +4037,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "6025:6:1", + "src": "6027:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "6033:3:1", + "src": "6035:3:2", "type": "" } ], @@ -4051,31 +4051,31 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6041:5:1", + "src": "6043:5:2", "type": "" } ], - "src": "5995:139:1" + "src": "5997:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "6184:57:1", + "src": "6186:57:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6194:41:1", + "src": "6196:41:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "6209:5:1" + "src": "6211:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6216:18:1", + "src": "6218:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4083,16 +4083,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "6205:3:1" + "src": "6207:3:2" }, "nodeType": "YulFunctionCall", - "src": "6205:30:1" + "src": "6207:30:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "6194:7:1" + "src": "6196:7:2" } ] } @@ -4104,7 +4104,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6166:5:1", + "src": "6168:5:2", "type": "" } ], @@ -4112,21 +4112,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "6176:7:1", + "src": "6178:7:2", "type": "" } ], - "src": "6140:101:1" + "src": "6142:101:2" }, { "body": { "nodeType": "YulBlock", - "src": "6289:78:1", + "src": "6291:78:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "6345:16:1", + "src": "6347:16:2", "statements": [ { "expression": { @@ -4134,14 +4134,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "6354:1:1", + "src": "6356:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6357:1:1", + "src": "6359:1:2", "type": "", "value": "0" } @@ -4149,13 +4149,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "6347:6:1" + "src": "6349:6:2" }, "nodeType": "YulFunctionCall", - "src": "6347:12:1" + "src": "6349:12:2" }, "nodeType": "YulExpressionStatement", - "src": "6347:12:1" + "src": "6349:12:2" } ] }, @@ -4166,44 +4166,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "6312:5:1" + "src": "6314:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "6336:5:1" + "src": "6338:5:2" } ], "functionName": { "name": "cleanup_t_uint64", "nodeType": "YulIdentifier", - "src": "6319:16:1" + "src": "6321:16:2" }, "nodeType": "YulFunctionCall", - "src": "6319:23:1" + "src": "6321:23:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "6309:2:1" + "src": "6311:2:2" }, "nodeType": "YulFunctionCall", - "src": "6309:34:1" + "src": "6311:34:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "6302:6:1" + "src": "6304:6:2" }, "nodeType": "YulFunctionCall", - "src": "6302:42:1" + "src": "6304:42:2" }, "nodeType": "YulIf", - "src": "6299:62:1" + "src": "6301:62:2" } ] }, @@ -4213,41 +4213,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6282:5:1", + "src": "6284:5:2", "type": "" } ], - "src": "6247:120:1" + "src": "6249:120:2" }, { "body": { "nodeType": "YulBlock", - "src": "6424:86:1", + "src": "6426:86:2", "statements": [ { "nodeType": "YulAssignment", - "src": "6434:29:1", + "src": "6436:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "6456:6:1" + "src": "6458:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "6443:12:1" + "src": "6445:12:2" }, "nodeType": "YulFunctionCall", - "src": "6443:20:1" + "src": "6445:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "6434:5:1" + "src": "6436:5:2" } ] }, @@ -4257,19 +4257,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "6498:5:1" + "src": "6500:5:2" } ], "functionName": { "name": "validator_revert_t_uint64", "nodeType": "YulIdentifier", - "src": "6472:25:1" + "src": "6474:25:2" }, "nodeType": "YulFunctionCall", - "src": "6472:32:1" + "src": "6474:32:2" }, "nodeType": "YulExpressionStatement", - "src": "6472:32:1" + "src": "6474:32:2" } ] }, @@ -4279,13 +4279,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "6402:6:1", + "src": "6404:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "6410:3:1", + "src": "6412:3:2", "type": "" } ], @@ -4293,21 +4293,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "6418:5:1", + "src": "6420:5:2", "type": "" } ], - "src": "6373:137:1" + "src": "6375:137:2" }, { "body": { "nodeType": "YulBlock", - "src": "6705:1152:1", + "src": "6711:1156:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "6752:83:1", + "src": "6758:83:2", "statements": [ { "expression": { @@ -4315,13 +4315,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "6754:77:1" + "src": "6760:77:2" }, "nodeType": "YulFunctionCall", - "src": "6754:79:1" + "src": "6760:79:2" }, "nodeType": "YulExpressionStatement", - "src": "6754:79:1" + "src": "6760:79:2" } ] }, @@ -4332,26 +4332,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "6726:7:1" + "src": "6732:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6735:9:1" + "src": "6741:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "6722:3:1" + "src": "6728:3:2" }, "nodeType": "YulFunctionCall", - "src": "6722:23:1" + "src": "6728:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6747:3:1", + "src": "6753:3:2", "type": "", "value": "160" } @@ -4359,21 +4359,21 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "6718:3:1" + "src": "6724:3:2" }, "nodeType": "YulFunctionCall", - "src": "6718:33:1" + "src": "6724:33:2" }, "nodeType": "YulIf", - "src": "6715:120:1" + "src": "6721:120:2" }, { "nodeType": "YulBlock", - "src": "6845:305:1", + "src": "6851:307:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "6860:45:1", + "src": "6866:45:2", "value": { "arguments": [ { @@ -4381,12 +4381,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "6891:9:1" + "src": "6897:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6902:1:1", + "src": "6908:1:2", "type": "", "value": "0" } @@ -4394,25 +4394,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "6887:3:1" + "src": "6893:3:2" }, "nodeType": "YulFunctionCall", - "src": "6887:17:1" + "src": "6893:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "6874:12:1" + "src": "6880:12:2" }, "nodeType": "YulFunctionCall", - "src": "6874:31:1" + "src": "6880:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "6864:6:1", + "src": "6870:6:2", "type": "" } ] @@ -4420,7 +4420,7 @@ { "body": { "nodeType": "YulBlock", - "src": "6952:83:1", + "src": "6958:83:2", "statements": [ { "expression": { @@ -4428,13 +4428,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "6954:77:1" + "src": "6960:77:2" }, "nodeType": "YulFunctionCall", - "src": "6954:79:1" + "src": "6960:79:2" }, "nodeType": "YulExpressionStatement", - "src": "6954:79:1" + "src": "6960:79:2" } ] }, @@ -4443,12 +4443,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "6924:6:1" + "src": "6930:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "6932:18:1", + "src": "6938:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4456,17 +4456,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "6921:2:1" + "src": "6927:2:2" }, "nodeType": "YulFunctionCall", - "src": "6921:30:1" + "src": "6927:30:2" }, "nodeType": "YulIf", - "src": "6918:117:1" + "src": "6924:117:2" }, { "nodeType": "YulAssignment", - "src": "7049:91:1", + "src": "7055:93:2", "value": { "arguments": [ { @@ -4474,41 +4474,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7112:9:1" + "src": "7120:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "7123:6:1" + "src": "7131:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7108:3:1" + "src": "7116:3:2" }, "nodeType": "YulFunctionCall", - "src": "7108:22:1" + "src": "7116:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "7132:7:1" + "src": "7140:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "7059:48:1" + "src": "7065:50:2" }, "nodeType": "YulFunctionCall", - "src": "7059:81:1" + "src": "7065:83:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "7049:6:1" + "src": "7055:6:2" } ] } @@ -4516,15 +4516,15 @@ }, { "nodeType": "YulBlock", - "src": "7160:118:1", + "src": "7168:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "7175:16:1", + "src": "7183:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "7189:2:1", + "src": "7197:2:2", "type": "", "value": "32" }, @@ -4532,14 +4532,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "7179:6:1", + "src": "7187:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "7205:63:1", + "src": "7213:63:2", "value": { "arguments": [ { @@ -4547,41 +4547,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7240:9:1" + "src": "7248:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "7251:6:1" + "src": "7259:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7236:3:1" + "src": "7244:3:2" }, "nodeType": "YulFunctionCall", - "src": "7236:22:1" + "src": "7244:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "7260:7:1" + "src": "7268:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "7215:20:1" + "src": "7223:20:2" }, "nodeType": "YulFunctionCall", - "src": "7215:53:1" + "src": "7223:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "7205:6:1" + "src": "7213:6:2" } ] } @@ -4589,15 +4589,15 @@ }, { "nodeType": "YulBlock", - "src": "7288:118:1", + "src": "7296:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "7303:16:1", + "src": "7311:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "7317:2:1", + "src": "7325:2:2", "type": "", "value": "64" }, @@ -4605,14 +4605,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "7307:6:1", + "src": "7315:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "7333:63:1", + "src": "7341:63:2", "value": { "arguments": [ { @@ -4620,41 +4620,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7368:9:1" + "src": "7376:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "7379:6:1" + "src": "7387:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7364:3:1" + "src": "7372:3:2" }, "nodeType": "YulFunctionCall", - "src": "7364:22:1" + "src": "7372:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "7388:7:1" + "src": "7396:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "7343:20:1" + "src": "7351:20:2" }, "nodeType": "YulFunctionCall", - "src": "7343:53:1" + "src": "7351:53:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "7333:6:1" + "src": "7341:6:2" } ] } @@ -4662,11 +4662,11 @@ }, { "nodeType": "YulBlock", - "src": "7416:306:1", + "src": "7424:308:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "7431:46:1", + "src": "7439:46:2", "value": { "arguments": [ { @@ -4674,12 +4674,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7462:9:1" + "src": "7470:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7473:2:1", + "src": "7481:2:2", "type": "", "value": "96" } @@ -4687,25 +4687,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7458:3:1" + "src": "7466:3:2" }, "nodeType": "YulFunctionCall", - "src": "7458:18:1" + "src": "7466:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "7445:12:1" + "src": "7453:12:2" }, "nodeType": "YulFunctionCall", - "src": "7445:32:1" + "src": "7453:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "7435:6:1", + "src": "7443:6:2", "type": "" } ] @@ -4713,7 +4713,7 @@ { "body": { "nodeType": "YulBlock", - "src": "7524:83:1", + "src": "7532:83:2", "statements": [ { "expression": { @@ -4721,13 +4721,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "7526:77:1" + "src": "7534:77:2" }, "nodeType": "YulFunctionCall", - "src": "7526:79:1" + "src": "7534:79:2" }, "nodeType": "YulExpressionStatement", - "src": "7526:79:1" + "src": "7534:79:2" } ] }, @@ -4736,12 +4736,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "7496:6:1" + "src": "7504:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "7504:18:1", + "src": "7512:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4749,17 +4749,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "7493:2:1" + "src": "7501:2:2" }, "nodeType": "YulFunctionCall", - "src": "7493:30:1" + "src": "7501:30:2" }, "nodeType": "YulIf", - "src": "7490:117:1" + "src": "7498:117:2" }, { "nodeType": "YulAssignment", - "src": "7621:91:1", + "src": "7629:93:2", "value": { "arguments": [ { @@ -4767,41 +4767,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7684:9:1" + "src": "7694:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "7695:6:1" + "src": "7705:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7680:3:1" + "src": "7690:3:2" }, "nodeType": "YulFunctionCall", - "src": "7680:22:1" + "src": "7690:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "7704:7:1" + "src": "7714:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "7631:48:1" + "src": "7639:50:2" }, "nodeType": "YulFunctionCall", - "src": "7631:81:1" + "src": "7639:83:2" }, "variableNames": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "7621:6:1" + "src": "7629:6:2" } ] } @@ -4809,15 +4809,15 @@ }, { "nodeType": "YulBlock", - "src": "7732:118:1", + "src": "7742:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "7747:17:1", + "src": "7757:17:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "7761:3:1", + "src": "7771:3:2", "type": "", "value": "128" }, @@ -4825,14 +4825,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "7751:6:1", + "src": "7761:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "7778:62:1", + "src": "7788:62:2", "value": { "arguments": [ { @@ -4840,41 +4840,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "7812:9:1" + "src": "7822:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "7823:6:1" + "src": "7833:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "7808:3:1" + "src": "7818:3:2" }, "nodeType": "YulFunctionCall", - "src": "7808:22:1" + "src": "7818:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "7832:7:1" + "src": "7842:7:2" } ], "functionName": { "name": "abi_decode_t_uint64", "nodeType": "YulIdentifier", - "src": "7788:19:1" + "src": "7798:19:2" }, "nodeType": "YulFunctionCall", - "src": "7788:52:1" + "src": "7798:52:2" }, "variableNames": [ { "name": "value4", "nodeType": "YulIdentifier", - "src": "7778:6:1" + "src": "7788:6:2" } ] } @@ -4882,19 +4882,19 @@ } ] }, - "name": "abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptrt_uint256t_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64", + "name": "abi_decode_tuple_t_struct$_Multilocation_$171_memory_ptrt_uint256t_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "6643:9:1", + "src": "6649:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "6654:7:1", + "src": "6660:7:2", "type": "" } ], @@ -4902,45 +4902,45 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "6666:6:1", + "src": "6672:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "6674:6:1", + "src": "6680:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "6682:6:1", + "src": "6688:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "6690:6:1", + "src": "6696:6:2", "type": "" }, { "name": "value4", "nodeType": "YulTypedName", - "src": "6698:6:1", + "src": "6704:6:2", "type": "" } ], - "src": "6516:1341:1" + "src": "6518:1349:2" }, { "body": { "nodeType": "YulBlock", - "src": "7969:229:1", + "src": "7980:229:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8074:22:1", + "src": "8085:22:2", "statements": [ { "expression": { @@ -4948,13 +4948,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "8076:16:1" + "src": "8087:16:2" }, "nodeType": "YulFunctionCall", - "src": "8076:18:1" + "src": "8087:18:2" }, "nodeType": "YulExpressionStatement", - "src": "8076:18:1" + "src": "8087:18:2" } ] }, @@ -4963,12 +4963,12 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "8046:6:1" + "src": "8057:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8054:18:1", + "src": "8065:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -4976,28 +4976,28 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "8043:2:1" + "src": "8054:2:2" }, "nodeType": "YulFunctionCall", - "src": "8043:30:1" + "src": "8054:30:2" }, "nodeType": "YulIf", - "src": "8040:56:1" + "src": "8051:56:2" }, { "nodeType": "YulAssignment", - "src": "8106:25:1", + "src": "8117:25:2", "value": { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "8118:6:1" + "src": "8129:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8126:4:1", + "src": "8137:4:2", "type": "", "value": "0x20" } @@ -5005,33 +5005,33 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "8114:3:1" + "src": "8125:3:2" }, "nodeType": "YulFunctionCall", - "src": "8114:17:1" + "src": "8125:17:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "8106:4:1" + "src": "8117:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "8168:23:1", + "src": "8179:23:2", "value": { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "8180:4:1" + "src": "8191:4:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8186:4:1", + "src": "8197:4:2", "type": "", "value": "0x20" } @@ -5039,28 +5039,28 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "8176:3:1" + "src": "8187:3:2" }, "nodeType": "YulFunctionCall", - "src": "8176:15:1" + "src": "8187:15:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "8168:4:1" + "src": "8179:4:2" } ] } ] }, - "name": "array_allocation_size_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_allocation_size_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "length", "nodeType": "YulTypedName", - "src": "7953:6:1", + "src": "7964:6:2", "type": "" } ], @@ -5068,31 +5068,31 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "7964:4:1", + "src": "7975:4:2", "type": "" } ], - "src": "7863:335:1" + "src": "7873:336:2" }, { "body": { "nodeType": "YulBlock", - "src": "8249:81:1", + "src": "8260:81:2", "statements": [ { "nodeType": "YulAssignment", - "src": "8259:65:1", + "src": "8270:65:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "8274:5:1" + "src": "8285:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8281:42:1", + "src": "8292:42:2", "type": "", "value": "0xffffffffffffffffffffffffffffffffffffffff" } @@ -5100,16 +5100,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "8270:3:1" + "src": "8281:3:2" }, "nodeType": "YulFunctionCall", - "src": "8270:54:1" + "src": "8281:54:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "8259:7:1" + "src": "8270:7:2" } ] } @@ -5121,7 +5121,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "8231:5:1", + "src": "8242:5:2", "type": "" } ], @@ -5129,41 +5129,41 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "8241:7:1", + "src": "8252:7:2", "type": "" } ], - "src": "8204:126:1" + "src": "8215:126:2" }, { "body": { "nodeType": "YulBlock", - "src": "8381:51:1", + "src": "8392:51:2", "statements": [ { "nodeType": "YulAssignment", - "src": "8391:35:1", + "src": "8402:35:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "8420:5:1" + "src": "8431:5:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "8402:17:1" + "src": "8413:17:2" }, "nodeType": "YulFunctionCall", - "src": "8402:24:1" + "src": "8413:24:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "8391:7:1" + "src": "8402:7:2" } ] } @@ -5175,7 +5175,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "8363:5:1", + "src": "8374:5:2", "type": "" } ], @@ -5183,21 +5183,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "8373:7:1", + "src": "8384:7:2", "type": "" } ], - "src": "8336:96:1" + "src": "8347:96:2" }, { "body": { "nodeType": "YulBlock", - "src": "8481:79:1", + "src": "8492:79:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8538:16:1", + "src": "8549:16:2", "statements": [ { "expression": { @@ -5205,14 +5205,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "8547:1:1", + "src": "8558:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8550:1:1", + "src": "8561:1:2", "type": "", "value": "0" } @@ -5220,13 +5220,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "8540:6:1" + "src": "8551:6:2" }, "nodeType": "YulFunctionCall", - "src": "8540:12:1" + "src": "8551:12:2" }, "nodeType": "YulExpressionStatement", - "src": "8540:12:1" + "src": "8551:12:2" } ] }, @@ -5237,44 +5237,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "8504:5:1" + "src": "8515:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "8529:5:1" + "src": "8540:5:2" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "8511:17:1" + "src": "8522:17:2" }, "nodeType": "YulFunctionCall", - "src": "8511:24:1" + "src": "8522:24:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "8501:2:1" + "src": "8512:2:2" }, "nodeType": "YulFunctionCall", - "src": "8501:35:1" + "src": "8512:35:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "8494:6:1" + "src": "8505:6:2" }, "nodeType": "YulFunctionCall", - "src": "8494:43:1" + "src": "8505:43:2" }, "nodeType": "YulIf", - "src": "8491:63:1" + "src": "8502:63:2" } ] }, @@ -5284,41 +5284,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "8474:5:1", + "src": "8485:5:2", "type": "" } ], - "src": "8438:122:1" + "src": "8449:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "8618:87:1", + "src": "8629:87:2", "statements": [ { "nodeType": "YulAssignment", - "src": "8628:29:1", + "src": "8639:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "8650:6:1" + "src": "8661:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "8637:12:1" + "src": "8648:12:2" }, "nodeType": "YulFunctionCall", - "src": "8637:20:1" + "src": "8648:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "8628:5:1" + "src": "8639:5:2" } ] }, @@ -5328,19 +5328,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "8693:5:1" + "src": "8704:5:2" } ], "functionName": { "name": "validator_revert_t_address", "nodeType": "YulIdentifier", - "src": "8666:26:1" + "src": "8677:26:2" }, "nodeType": "YulFunctionCall", - "src": "8666:33:1" + "src": "8677:33:2" }, "nodeType": "YulExpressionStatement", - "src": "8666:33:1" + "src": "8677:33:2" } ] }, @@ -5350,13 +5350,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "8596:6:1", + "src": "8607:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "8604:3:1", + "src": "8615:3:2", "type": "" } ], @@ -5364,21 +5364,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "8612:5:1", + "src": "8623:5:2", "type": "" } ], - "src": "8566:139:1" + "src": "8577:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "8821:508:1", + "src": "8833:508:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "8865:83:1", + "src": "8877:83:2", "statements": [ { "expression": { @@ -5386,13 +5386,13 @@ "functionName": { "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", "nodeType": "YulIdentifier", - "src": "8867:77:1" + "src": "8879:77:2" }, "nodeType": "YulFunctionCall", - "src": "8867:79:1" + "src": "8879:79:2" }, "nodeType": "YulExpressionStatement", - "src": "8867:79:1" + "src": "8879:79:2" } ] }, @@ -5403,26 +5403,26 @@ { "name": "end", "nodeType": "YulIdentifier", - "src": "8842:3:1" + "src": "8854:3:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "8847:9:1" + "src": "8859:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "8838:3:1" + "src": "8850:3:2" }, "nodeType": "YulFunctionCall", - "src": "8838:19:1" + "src": "8850:19:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "8859:4:1", + "src": "8871:4:2", "type": "", "value": "0x40" } @@ -5430,23 +5430,23 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "8834:3:1" + "src": "8846:3:2" }, "nodeType": "YulFunctionCall", - "src": "8834:30:1" + "src": "8846:30:2" }, "nodeType": "YulIf", - "src": "8831:117:1" + "src": "8843:117:2" }, { "nodeType": "YulAssignment", - "src": "8957:30:1", + "src": "8969:30:2", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "8982:4:1", + "src": "8994:4:2", "type": "", "value": "0x40" } @@ -5454,30 +5454,30 @@ "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "8966:15:1" + "src": "8978:15:2" }, "nodeType": "YulFunctionCall", - "src": "8966:21:1" + "src": "8978:21:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "8957:5:1" + "src": "8969:5:2" } ] }, { "nodeType": "YulBlock", - "src": "8997:162:1", + "src": "9009:162:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9044:15:1", + "src": "9056:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "9058:1:1", + "src": "9070:1:2", "type": "", "value": "0" }, @@ -5485,7 +5485,7 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "9048:6:1", + "src": "9060:6:2", "type": "" } ] @@ -5498,12 +5498,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "9084:5:1" + "src": "9096:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9091:4:1", + "src": "9103:4:2", "type": "", "value": "0x00" } @@ -5511,10 +5511,10 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9080:3:1" + "src": "9092:3:2" }, "nodeType": "YulFunctionCall", - "src": "9080:16:1" + "src": "9092:16:2" }, { "arguments": [ @@ -5523,61 +5523,61 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9123:9:1" + "src": "9135:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "9134:6:1" + "src": "9146:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9119:3:1" + "src": "9131:3:2" }, "nodeType": "YulFunctionCall", - "src": "9119:22:1" + "src": "9131:22:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "9143:3:1" + "src": "9155:3:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "9098:20:1" + "src": "9110:20:2" }, "nodeType": "YulFunctionCall", - "src": "9098:49:1" + "src": "9110:49:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "9073:6:1" + "src": "9085:6:2" }, "nodeType": "YulFunctionCall", - "src": "9073:75:1" + "src": "9085:75:2" }, "nodeType": "YulExpressionStatement", - "src": "9073:75:1" + "src": "9085:75:2" } ] }, { "nodeType": "YulBlock", - "src": "9169:153:1", + "src": "9181:153:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9206:16:1", + "src": "9218:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "9220:2:1", + "src": "9232:2:2", "type": "", "value": "32" }, @@ -5585,7 +5585,7 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "9210:6:1", + "src": "9222:6:2", "type": "" } ] @@ -5598,12 +5598,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "9247:5:1" + "src": "9259:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9254:4:1", + "src": "9266:4:2", "type": "", "value": "0x20" } @@ -5611,10 +5611,10 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9243:3:1" + "src": "9255:3:2" }, "nodeType": "YulFunctionCall", - "src": "9243:16:1" + "src": "9255:16:2" }, { "arguments": [ @@ -5623,65 +5623,65 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "9286:9:1" + "src": "9298:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "9297:6:1" + "src": "9309:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9282:3:1" + "src": "9294:3:2" }, "nodeType": "YulFunctionCall", - "src": "9282:22:1" + "src": "9294:22:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "9306:3:1" + "src": "9318:3:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "9261:20:1" + "src": "9273:20:2" }, "nodeType": "YulFunctionCall", - "src": "9261:49:1" + "src": "9273:49:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "9236:6:1" + "src": "9248:6:2" }, "nodeType": "YulFunctionCall", - "src": "9236:75:1" + "src": "9248:75:2" }, "nodeType": "YulExpressionStatement", - "src": "9236:75:1" + "src": "9248:75:2" } ] } ] }, - "name": "abi_decode_t_struct$_Currency_$19_memory_ptr", + "name": "abi_decode_t_struct$_Currency_$182_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "8796:9:1", + "src": "8808:9:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "8807:3:1", + "src": "8819:3:2", "type": "" } ], @@ -5689,20 +5689,20 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "8815:5:1", + "src": "8827:5:2", "type": "" } ], - "src": "8742:587:1" + "src": "8753:588:2" }, { "body": { "nodeType": "YulBlock", - "src": "9494:656:1", + "src": "9507:658:2", "statements": [ { "nodeType": "YulAssignment", - "src": "9504:114:1", + "src": "9517:115:2", "value": { "arguments": [ { @@ -5710,47 +5710,47 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "9610:6:1" + "src": "9624:6:2" } ], "functionName": { - "name": "array_allocation_size_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_allocation_size_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "9529:80:1" + "src": "9542:81:2" }, "nodeType": "YulFunctionCall", - "src": "9529:88:1" + "src": "9542:89:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "9513:15:1" + "src": "9526:15:2" }, "nodeType": "YulFunctionCall", - "src": "9513:105:1" + "src": "9526:106:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "9504:5:1" + "src": "9517:5:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "9627:16:1", + "src": "9641:16:2", "value": { "name": "array", "nodeType": "YulIdentifier", - "src": "9638:5:1" + "src": "9652:5:2" }, "variables": [ { "name": "dst", "nodeType": "YulTypedName", - "src": "9631:3:1", + "src": "9645:3:2", "type": "" } ] @@ -5761,39 +5761,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "9660:5:1" + "src": "9674:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "9667:6:1" + "src": "9681:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "9653:6:1" + "src": "9667:6:2" }, "nodeType": "YulFunctionCall", - "src": "9653:21:1" + "src": "9667:21:2" }, "nodeType": "YulExpressionStatement", - "src": "9653:21:1" + "src": "9667:21:2" }, { "nodeType": "YulAssignment", - "src": "9683:23:1", + "src": "9697:23:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "9694:5:1" + "src": "9708:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9701:4:1", + "src": "9715:4:2", "type": "", "value": "0x20" } @@ -5801,40 +5801,40 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9690:3:1" + "src": "9704:3:2" }, "nodeType": "YulFunctionCall", - "src": "9690:16:1" + "src": "9704:16:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "9683:3:1" + "src": "9697:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "9716:44:1", + "src": "9730:44:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "9734:6:1" + "src": "9748:6:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "9746:6:1" + "src": "9760:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9754:4:1", + "src": "9768:4:2", "type": "", "value": "0x40" } @@ -5842,25 +5842,25 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "9742:3:1" + "src": "9756:3:2" }, "nodeType": "YulFunctionCall", - "src": "9742:17:1" + "src": "9756:17:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9730:3:1" + "src": "9744:3:2" }, "nodeType": "YulFunctionCall", - "src": "9730:30:1" + "src": "9744:30:2" }, "variables": [ { "name": "srcEnd", "nodeType": "YulTypedName", - "src": "9720:6:1", + "src": "9734:6:2", "type": "" } ] @@ -5868,7 +5868,7 @@ { "body": { "nodeType": "YulBlock", - "src": "9788:103:1", + "src": "9802:103:2", "statements": [ { "expression": { @@ -5876,13 +5876,13 @@ "functionName": { "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", "nodeType": "YulIdentifier", - "src": "9802:77:1" + "src": "9816:77:2" }, "nodeType": "YulFunctionCall", - "src": "9802:79:1" + "src": "9816:79:2" }, "nodeType": "YulExpressionStatement", - "src": "9802:79:1" + "src": "9816:79:2" } ] }, @@ -5891,43 +5891,43 @@ { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "9775:6:1" + "src": "9789:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "9783:3:1" + "src": "9797:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "9772:2:1" + "src": "9786:2:2" }, "nodeType": "YulFunctionCall", - "src": "9772:15:1" + "src": "9786:15:2" }, "nodeType": "YulIf", - "src": "9769:122:1" + "src": "9783:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "9976:168:1", + "src": "9990:169:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9991:21:1", + "src": "10005:21:2", "value": { "name": "src", "nodeType": "YulIdentifier", - "src": "10009:3:1" + "src": "10023:3:2" }, "variables": [ { "name": "elementPos", "nodeType": "YulTypedName", - "src": "9995:10:1", + "src": "10009:10:2", "type": "" } ] @@ -5938,55 +5938,55 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "10033:3:1" + "src": "10047:3:2" }, { "arguments": [ { "name": "elementPos", "nodeType": "YulIdentifier", - "src": "10083:10:1" + "src": "10098:10:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "10095:3:1" + "src": "10110:3:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Currency_$19_memory_ptr", + "name": "abi_decode_t_struct$_Currency_$182_memory_ptr", "nodeType": "YulIdentifier", - "src": "10038:44:1" + "src": "10052:45:2" }, "nodeType": "YulFunctionCall", - "src": "10038:61:1" + "src": "10052:62:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "10026:6:1" + "src": "10040:6:2" }, "nodeType": "YulFunctionCall", - "src": "10026:74:1" + "src": "10040:75:2" }, "nodeType": "YulExpressionStatement", - "src": "10026:74:1" + "src": "10040:75:2" }, { "nodeType": "YulAssignment", - "src": "10113:21:1", + "src": "10128:21:2", "value": { "arguments": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "10124:3:1" + "src": "10139:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10129:4:1", + "src": "10144:4:2", "type": "", "value": "0x20" } @@ -5994,16 +5994,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10120:3:1" + "src": "10135:3:2" }, "nodeType": "YulFunctionCall", - "src": "10120:14:1" + "src": "10135:14:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "10113:3:1" + "src": "10128:3:2" } ] } @@ -6014,41 +6014,41 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "9929:3:1" + "src": "9943:3:2" }, { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "9934:6:1" + "src": "9948:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "9926:2:1" + "src": "9940:2:2" }, "nodeType": "YulFunctionCall", - "src": "9926:15:1" + "src": "9940:15:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "9942:25:1", + "src": "9956:25:2", "statements": [ { "nodeType": "YulAssignment", - "src": "9944:21:1", + "src": "9958:21:2", "value": { "arguments": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "9955:3:1" + "src": "9969:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "9960:4:1", + "src": "9974:4:2", "type": "", "value": "0x40" } @@ -6056,16 +6056,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "9951:3:1" + "src": "9965:3:2" }, "nodeType": "YulFunctionCall", - "src": "9951:14:1" + "src": "9965:14:2" }, "variableNames": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "9944:3:1" + "src": "9958:3:2" } ] } @@ -6073,50 +6073,50 @@ }, "pre": { "nodeType": "YulBlock", - "src": "9904:21:1", + "src": "9918:21:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "9906:17:1", + "src": "9920:17:2", "value": { "name": "offset", "nodeType": "YulIdentifier", - "src": "9917:6:1" + "src": "9931:6:2" }, "variables": [ { "name": "src", "nodeType": "YulTypedName", - "src": "9910:3:1", + "src": "9924:3:2", "type": "" } ] } ] }, - "src": "9900:244:1" + "src": "9914:245:2" } ] }, - "name": "abi_decode_available_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_available_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "9464:6:1", + "src": "9477:6:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "9472:6:1", + "src": "9485:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "9480:3:1", + "src": "9493:3:2", "type": "" } ], @@ -6124,21 +6124,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "9488:5:1", + "src": "9501:5:2", "type": "" } ], - "src": "9368:782:1" + "src": "9380:785:2" }, { "body": { "nodeType": "YulBlock", - "src": "10290:317:1", + "src": "10306:318:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "10339:83:1", + "src": "10355:83:2", "statements": [ { "expression": { @@ -6146,13 +6146,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "10341:77:1" + "src": "10357:77:2" }, "nodeType": "YulFunctionCall", - "src": "10341:79:1" + "src": "10357:79:2" }, "nodeType": "YulExpressionStatement", - "src": "10341:79:1" + "src": "10357:79:2" } ] }, @@ -6165,12 +6165,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "10318:6:1" + "src": "10334:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10326:4:1", + "src": "10342:4:2", "type": "", "value": "0x1f" } @@ -6178,68 +6178,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10314:3:1" + "src": "10330:3:2" }, "nodeType": "YulFunctionCall", - "src": "10314:17:1" + "src": "10330:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "10333:3:1" + "src": "10349:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "10310:3:1" + "src": "10326:3:2" }, "nodeType": "YulFunctionCall", - "src": "10310:27:1" + "src": "10326:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "10303:6:1" + "src": "10319:6:2" }, "nodeType": "YulFunctionCall", - "src": "10303:35:1" + "src": "10319:35:2" }, "nodeType": "YulIf", - "src": "10300:122:1" + "src": "10316:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "10431:34:1", + "src": "10447:34:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "10458:6:1" + "src": "10474:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "10445:12:1" + "src": "10461:12:2" }, "nodeType": "YulFunctionCall", - "src": "10445:20:1" + "src": "10461:20:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "10435:6:1", + "src": "10451:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "10474:127:1", + "src": "10490:128:2", "value": { "arguments": [ { @@ -6247,12 +6247,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "10574:6:1" + "src": "10591:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10582:4:1", + "src": "10599:4:2", "type": "", "value": "0x20" } @@ -6260,53 +6260,53 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "10570:3:1" + "src": "10587:3:2" }, "nodeType": "YulFunctionCall", - "src": "10570:17:1" + "src": "10587:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "10589:6:1" + "src": "10606:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "10597:3:1" + "src": "10614:3:2" } ], "functionName": { - "name": "abi_decode_available_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_available_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "10483:86:1" + "src": "10499:87:2" }, "nodeType": "YulFunctionCall", - "src": "10483:118:1" + "src": "10499:119:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "10474:5:1" + "src": "10490:5:2" } ] } ] }, - "name": "abi_decode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "10268:6:1", + "src": "10284:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "10276:3:1", + "src": "10292:3:2", "type": "" } ], @@ -6314,31 +6314,31 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "10284:5:1", + "src": "10300:5:2", "type": "" } ], - "src": "10189:418:1" + "src": "10204:420:2" }, { "body": { "nodeType": "YulBlock", - "src": "10657:49:1", + "src": "10674:49:2", "statements": [ { "nodeType": "YulAssignment", - "src": "10667:33:1", + "src": "10684:33:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "10682:5:1" + "src": "10699:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10689:10:1", + "src": "10706:10:2", "type": "", "value": "0xffffffff" } @@ -6346,16 +6346,16 @@ "functionName": { "name": "and", "nodeType": "YulIdentifier", - "src": "10678:3:1" + "src": "10695:3:2" }, "nodeType": "YulFunctionCall", - "src": "10678:22:1" + "src": "10695:22:2" }, "variableNames": [ { "name": "cleaned", "nodeType": "YulIdentifier", - "src": "10667:7:1" + "src": "10684:7:2" } ] } @@ -6367,7 +6367,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "10639:5:1", + "src": "10656:5:2", "type": "" } ], @@ -6375,21 +6375,21 @@ { "name": "cleaned", "nodeType": "YulTypedName", - "src": "10649:7:1", + "src": "10666:7:2", "type": "" } ], - "src": "10613:93:1" + "src": "10630:93:2" }, { "body": { "nodeType": "YulBlock", - "src": "10754:78:1", + "src": "10771:78:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "10810:16:1", + "src": "10827:16:2", "statements": [ { "expression": { @@ -6397,14 +6397,14 @@ { "kind": "number", "nodeType": "YulLiteral", - "src": "10819:1:1", + "src": "10836:1:2", "type": "", "value": "0" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "10822:1:1", + "src": "10839:1:2", "type": "", "value": "0" } @@ -6412,13 +6412,13 @@ "functionName": { "name": "revert", "nodeType": "YulIdentifier", - "src": "10812:6:1" + "src": "10829:6:2" }, "nodeType": "YulFunctionCall", - "src": "10812:12:1" + "src": "10829:12:2" }, "nodeType": "YulExpressionStatement", - "src": "10812:12:1" + "src": "10829:12:2" } ] }, @@ -6429,44 +6429,44 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "10777:5:1" + "src": "10794:5:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "10801:5:1" + "src": "10818:5:2" } ], "functionName": { "name": "cleanup_t_uint32", "nodeType": "YulIdentifier", - "src": "10784:16:1" + "src": "10801:16:2" }, "nodeType": "YulFunctionCall", - "src": "10784:23:1" + "src": "10801:23:2" } ], "functionName": { "name": "eq", "nodeType": "YulIdentifier", - "src": "10774:2:1" + "src": "10791:2:2" }, "nodeType": "YulFunctionCall", - "src": "10774:34:1" + "src": "10791:34:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "10767:6:1" + "src": "10784:6:2" }, "nodeType": "YulFunctionCall", - "src": "10767:42:1" + "src": "10784:42:2" }, "nodeType": "YulIf", - "src": "10764:62:1" + "src": "10781:62:2" } ] }, @@ -6476,41 +6476,41 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "10747:5:1", + "src": "10764:5:2", "type": "" } ], - "src": "10712:120:1" + "src": "10729:120:2" }, { "body": { "nodeType": "YulBlock", - "src": "10889:86:1", + "src": "10906:86:2", "statements": [ { "nodeType": "YulAssignment", - "src": "10899:29:1", + "src": "10916:29:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "10921:6:1" + "src": "10938:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "10908:12:1" + "src": "10925:12:2" }, "nodeType": "YulFunctionCall", - "src": "10908:20:1" + "src": "10925:20:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "10899:5:1" + "src": "10916:5:2" } ] }, @@ -6520,19 +6520,19 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "10963:5:1" + "src": "10980:5:2" } ], "functionName": { "name": "validator_revert_t_uint32", "nodeType": "YulIdentifier", - "src": "10937:25:1" + "src": "10954:25:2" }, "nodeType": "YulFunctionCall", - "src": "10937:32:1" + "src": "10954:32:2" }, "nodeType": "YulExpressionStatement", - "src": "10937:32:1" + "src": "10954:32:2" } ] }, @@ -6542,13 +6542,13 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "10867:6:1", + "src": "10884:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "10875:3:1", + "src": "10892:3:2", "type": "" } ], @@ -6556,21 +6556,21 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "10883:5:1", + "src": "10900:5:2", "type": "" } ], - "src": "10838:137:1" + "src": "10855:137:2" }, { "body": { "nodeType": "YulBlock", - "src": "11173:1043:1", + "src": "11193:1046:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "11220:83:1", + "src": "11240:83:2", "statements": [ { "expression": { @@ -6578,13 +6578,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "11222:77:1" + "src": "11242:77:2" }, "nodeType": "YulFunctionCall", - "src": "11222:79:1" + "src": "11242:79:2" }, "nodeType": "YulExpressionStatement", - "src": "11222:79:1" + "src": "11242:79:2" } ] }, @@ -6595,26 +6595,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "11194:7:1" + "src": "11214:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11203:9:1" + "src": "11223:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "11190:3:1" + "src": "11210:3:2" }, "nodeType": "YulFunctionCall", - "src": "11190:23:1" + "src": "11210:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11215:3:1", + "src": "11235:3:2", "type": "", "value": "128" } @@ -6622,21 +6622,21 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "11186:3:1" + "src": "11206:3:2" }, "nodeType": "YulFunctionCall", - "src": "11186:33:1" + "src": "11206:33:2" }, "nodeType": "YulIf", - "src": "11183:120:1" + "src": "11203:120:2" }, { "nodeType": "YulBlock", - "src": "11313:326:1", + "src": "11333:327:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "11328:45:1", + "src": "11348:45:2", "value": { "arguments": [ { @@ -6644,12 +6644,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11359:9:1" + "src": "11379:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11370:1:1", + "src": "11390:1:2", "type": "", "value": "0" } @@ -6657,25 +6657,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11355:3:1" + "src": "11375:3:2" }, "nodeType": "YulFunctionCall", - "src": "11355:17:1" + "src": "11375:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "11342:12:1" + "src": "11362:12:2" }, "nodeType": "YulFunctionCall", - "src": "11342:31:1" + "src": "11362:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "11332:6:1", + "src": "11352:6:2", "type": "" } ] @@ -6683,7 +6683,7 @@ { "body": { "nodeType": "YulBlock", - "src": "11420:83:1", + "src": "11440:83:2", "statements": [ { "expression": { @@ -6691,13 +6691,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "11422:77:1" + "src": "11442:77:2" }, "nodeType": "YulFunctionCall", - "src": "11422:79:1" + "src": "11442:79:2" }, "nodeType": "YulExpressionStatement", - "src": "11422:79:1" + "src": "11442:79:2" } ] }, @@ -6706,12 +6706,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "11392:6:1" + "src": "11412:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11400:18:1", + "src": "11420:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -6719,17 +6719,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "11389:2:1" + "src": "11409:2:2" }, "nodeType": "YulFunctionCall", - "src": "11389:30:1" + "src": "11409:30:2" }, "nodeType": "YulIf", - "src": "11386:117:1" + "src": "11406:117:2" }, { "nodeType": "YulAssignment", - "src": "11517:112:1", + "src": "11537:113:2", "value": { "arguments": [ { @@ -6737,41 +6737,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11601:9:1" + "src": "11622:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "11612:6:1" + "src": "11633:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11597:3:1" + "src": "11618:3:2" }, "nodeType": "YulFunctionCall", - "src": "11597:22:1" + "src": "11618:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "11621:7:1" + "src": "11642:7:2" } ], "functionName": { - "name": "abi_decode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "11527:69:1" + "src": "11547:70:2" }, "nodeType": "YulFunctionCall", - "src": "11527:102:1" + "src": "11547:103:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "11517:6:1" + "src": "11537:6:2" } ] } @@ -6779,15 +6779,15 @@ }, { "nodeType": "YulBlock", - "src": "11649:117:1", + "src": "11670:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "11664:16:1", + "src": "11685:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "11678:2:1", + "src": "11699:2:2", "type": "", "value": "32" }, @@ -6795,14 +6795,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "11668:6:1", + "src": "11689:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "11694:62:1", + "src": "11715:62:2", "value": { "arguments": [ { @@ -6810,41 +6810,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11728:9:1" + "src": "11749:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "11739:6:1" + "src": "11760:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11724:3:1" + "src": "11745:3:2" }, "nodeType": "YulFunctionCall", - "src": "11724:22:1" + "src": "11745:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "11748:7:1" + "src": "11769:7:2" } ], "functionName": { "name": "abi_decode_t_uint32", "nodeType": "YulIdentifier", - "src": "11704:19:1" + "src": "11725:19:2" }, "nodeType": "YulFunctionCall", - "src": "11704:52:1" + "src": "11725:52:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "11694:6:1" + "src": "11715:6:2" } ] } @@ -6852,11 +6852,11 @@ }, { "nodeType": "YulBlock", - "src": "11776:306:1", + "src": "11797:308:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "11791:46:1", + "src": "11812:46:2", "value": { "arguments": [ { @@ -6864,12 +6864,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "11822:9:1" + "src": "11843:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11833:2:1", + "src": "11854:2:2", "type": "", "value": "64" } @@ -6877,25 +6877,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "11818:3:1" + "src": "11839:3:2" }, "nodeType": "YulFunctionCall", - "src": "11818:18:1" + "src": "11839:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "11805:12:1" + "src": "11826:12:2" }, "nodeType": "YulFunctionCall", - "src": "11805:32:1" + "src": "11826:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "11795:6:1", + "src": "11816:6:2", "type": "" } ] @@ -6903,7 +6903,7 @@ { "body": { "nodeType": "YulBlock", - "src": "11884:83:1", + "src": "11905:83:2", "statements": [ { "expression": { @@ -6911,13 +6911,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "11886:77:1" + "src": "11907:77:2" }, "nodeType": "YulFunctionCall", - "src": "11886:79:1" + "src": "11907:79:2" }, "nodeType": "YulExpressionStatement", - "src": "11886:79:1" + "src": "11907:79:2" } ] }, @@ -6926,12 +6926,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "11856:6:1" + "src": "11877:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "11864:18:1", + "src": "11885:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -6939,17 +6939,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "11853:2:1" + "src": "11874:2:2" }, "nodeType": "YulFunctionCall", - "src": "11853:30:1" + "src": "11874:30:2" }, "nodeType": "YulIf", - "src": "11850:117:1" + "src": "11871:117:2" }, { "nodeType": "YulAssignment", - "src": "11981:91:1", + "src": "12002:93:2", "value": { "arguments": [ { @@ -6957,41 +6957,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12044:9:1" + "src": "12067:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "12055:6:1" + "src": "12078:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12040:3:1" + "src": "12063:3:2" }, "nodeType": "YulFunctionCall", - "src": "12040:22:1" + "src": "12063:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "12064:7:1" + "src": "12087:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "11991:48:1" + "src": "12012:50:2" }, "nodeType": "YulFunctionCall", - "src": "11991:81:1" + "src": "12012:83:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "11981:6:1" + "src": "12002:6:2" } ] } @@ -6999,15 +6999,15 @@ }, { "nodeType": "YulBlock", - "src": "12092:117:1", + "src": "12115:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "12107:16:1", + "src": "12130:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "12121:2:1", + "src": "12144:2:2", "type": "", "value": "96" }, @@ -7015,14 +7015,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "12111:6:1", + "src": "12134:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "12137:62:1", + "src": "12160:62:2", "value": { "arguments": [ { @@ -7030,41 +7030,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12171:9:1" + "src": "12194:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "12182:6:1" + "src": "12205:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12167:3:1" + "src": "12190:3:2" }, "nodeType": "YulFunctionCall", - "src": "12167:22:1" + "src": "12190:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "12191:7:1" + "src": "12214:7:2" } ], "functionName": { "name": "abi_decode_t_uint64", "nodeType": "YulIdentifier", - "src": "12147:19:1" + "src": "12170:19:2" }, "nodeType": "YulFunctionCall", - "src": "12147:52:1" + "src": "12170:52:2" }, "variableNames": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "12137:6:1" + "src": "12160:6:2" } ] } @@ -7072,19 +7072,19 @@ } ] }, - "name": "abi_decode_tuple_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$8_memory_ptrt_uint64", + "name": "abi_decode_tuple_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$171_memory_ptrt_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "11119:9:1", + "src": "11139:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "11130:7:1", + "src": "11150:7:2", "type": "" } ], @@ -7092,39 +7092,39 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "11142:6:1", + "src": "11162:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "11150:6:1", + "src": "11170:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "11158:6:1", + "src": "11178:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "11166:6:1", + "src": "11186:6:2", "type": "" } ], - "src": "10981:1235:1" + "src": "10998:1241:2" }, { "body": { "nodeType": "YulBlock", - "src": "12383:964:1", + "src": "12408:966:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "12430:83:1", + "src": "12455:83:2", "statements": [ { "expression": { @@ -7132,13 +7132,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "12432:77:1" + "src": "12457:77:2" }, "nodeType": "YulFunctionCall", - "src": "12432:79:1" + "src": "12457:79:2" }, "nodeType": "YulExpressionStatement", - "src": "12432:79:1" + "src": "12457:79:2" } ] }, @@ -7149,26 +7149,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "12404:7:1" + "src": "12429:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12413:9:1" + "src": "12438:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "12400:3:1" + "src": "12425:3:2" }, "nodeType": "YulFunctionCall", - "src": "12400:23:1" + "src": "12425:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "12425:3:1", + "src": "12450:3:2", "type": "", "value": "160" } @@ -7176,25 +7176,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "12396:3:1" + "src": "12421:3:2" }, "nodeType": "YulFunctionCall", - "src": "12396:33:1" + "src": "12421:33:2" }, "nodeType": "YulIf", - "src": "12393:120:1" + "src": "12418:120:2" }, { "nodeType": "YulBlock", - "src": "12523:117:1", + "src": "12548:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "12538:15:1", + "src": "12563:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "12552:1:1", + "src": "12577:1:2", "type": "", "value": "0" }, @@ -7202,14 +7202,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "12542:6:1", + "src": "12567:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "12567:63:1", + "src": "12592:63:2", "value": { "arguments": [ { @@ -7217,41 +7217,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12602:9:1" + "src": "12627:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "12613:6:1" + "src": "12638:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12598:3:1" + "src": "12623:3:2" }, "nodeType": "YulFunctionCall", - "src": "12598:22:1" + "src": "12623:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "12622:7:1" + "src": "12647:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "12577:20:1" + "src": "12602:20:2" }, "nodeType": "YulFunctionCall", - "src": "12577:53:1" + "src": "12602:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "12567:6:1" + "src": "12592:6:2" } ] } @@ -7259,15 +7259,15 @@ }, { "nodeType": "YulBlock", - "src": "12650:118:1", + "src": "12675:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "12665:16:1", + "src": "12690:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "12679:2:1", + "src": "12704:2:2", "type": "", "value": "32" }, @@ -7275,14 +7275,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "12669:6:1", + "src": "12694:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "12695:63:1", + "src": "12720:63:2", "value": { "arguments": [ { @@ -7290,41 +7290,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12730:9:1" + "src": "12755:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "12741:6:1" + "src": "12766:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12726:3:1" + "src": "12751:3:2" }, "nodeType": "YulFunctionCall", - "src": "12726:22:1" + "src": "12751:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "12750:7:1" + "src": "12775:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "12705:20:1" + "src": "12730:20:2" }, "nodeType": "YulFunctionCall", - "src": "12705:53:1" + "src": "12730:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "12695:6:1" + "src": "12720:6:2" } ] } @@ -7332,15 +7332,15 @@ }, { "nodeType": "YulBlock", - "src": "12778:118:1", + "src": "12803:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "12793:16:1", + "src": "12818:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "12807:2:1", + "src": "12832:2:2", "type": "", "value": "64" }, @@ -7348,14 +7348,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "12797:6:1", + "src": "12822:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "12823:63:1", + "src": "12848:63:2", "value": { "arguments": [ { @@ -7363,41 +7363,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12858:9:1" + "src": "12883:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "12869:6:1" + "src": "12894:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12854:3:1" + "src": "12879:3:2" }, "nodeType": "YulFunctionCall", - "src": "12854:22:1" + "src": "12879:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "12878:7:1" + "src": "12903:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "12833:20:1" + "src": "12858:20:2" }, "nodeType": "YulFunctionCall", - "src": "12833:53:1" + "src": "12858:53:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "12823:6:1" + "src": "12848:6:2" } ] } @@ -7405,11 +7405,11 @@ }, { "nodeType": "YulBlock", - "src": "12906:306:1", + "src": "12931:308:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "12921:46:1", + "src": "12946:46:2", "value": { "arguments": [ { @@ -7417,12 +7417,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "12952:9:1" + "src": "12977:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "12963:2:1", + "src": "12988:2:2", "type": "", "value": "96" } @@ -7430,25 +7430,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "12948:3:1" + "src": "12973:3:2" }, "nodeType": "YulFunctionCall", - "src": "12948:18:1" + "src": "12973:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "12935:12:1" + "src": "12960:12:2" }, "nodeType": "YulFunctionCall", - "src": "12935:32:1" + "src": "12960:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "12925:6:1", + "src": "12950:6:2", "type": "" } ] @@ -7456,7 +7456,7 @@ { "body": { "nodeType": "YulBlock", - "src": "13014:83:1", + "src": "13039:83:2", "statements": [ { "expression": { @@ -7464,13 +7464,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "13016:77:1" + "src": "13041:77:2" }, "nodeType": "YulFunctionCall", - "src": "13016:79:1" + "src": "13041:79:2" }, "nodeType": "YulExpressionStatement", - "src": "13016:79:1" + "src": "13041:79:2" } ] }, @@ -7479,12 +7479,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "12986:6:1" + "src": "13011:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "12994:18:1", + "src": "13019:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -7492,17 +7492,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "12983:2:1" + "src": "13008:2:2" }, "nodeType": "YulFunctionCall", - "src": "12983:30:1" + "src": "13008:30:2" }, "nodeType": "YulIf", - "src": "12980:117:1" + "src": "13005:117:2" }, { "nodeType": "YulAssignment", - "src": "13111:91:1", + "src": "13136:93:2", "value": { "arguments": [ { @@ -7510,41 +7510,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13174:9:1" + "src": "13201:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "13185:6:1" + "src": "13212:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13170:3:1" + "src": "13197:3:2" }, "nodeType": "YulFunctionCall", - "src": "13170:22:1" + "src": "13197:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "13194:7:1" + "src": "13221:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "13121:48:1" + "src": "13146:50:2" }, "nodeType": "YulFunctionCall", - "src": "13121:81:1" + "src": "13146:83:2" }, "variableNames": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "13111:6:1" + "src": "13136:6:2" } ] } @@ -7552,15 +7552,15 @@ }, { "nodeType": "YulBlock", - "src": "13222:118:1", + "src": "13249:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "13237:17:1", + "src": "13264:17:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "13251:3:1", + "src": "13278:3:2", "type": "", "value": "128" }, @@ -7568,14 +7568,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "13241:6:1", + "src": "13268:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "13268:62:1", + "src": "13295:62:2", "value": { "arguments": [ { @@ -7583,41 +7583,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "13302:9:1" + "src": "13329:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "13313:6:1" + "src": "13340:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "13298:3:1" + "src": "13325:3:2" }, "nodeType": "YulFunctionCall", - "src": "13298:22:1" + "src": "13325:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "13322:7:1" + "src": "13349:7:2" } ], "functionName": { "name": "abi_decode_t_uint64", "nodeType": "YulIdentifier", - "src": "13278:19:1" + "src": "13305:19:2" }, "nodeType": "YulFunctionCall", - "src": "13278:52:1" + "src": "13305:52:2" }, "variableNames": [ { "name": "value4", "nodeType": "YulIdentifier", - "src": "13268:6:1" + "src": "13295:6:2" } ] } @@ -7625,19 +7625,19 @@ } ] }, - "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64", + "name": "abi_decode_tuple_t_addresst_uint256t_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "12321:9:1", + "src": "12346:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "12332:7:1", + "src": "12357:7:2", "type": "" } ], @@ -7645,54 +7645,54 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "12344:6:1", + "src": "12369:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "12352:6:1", + "src": "12377:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "12360:6:1", + "src": "12385:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "12368:6:1", + "src": "12393:6:2", "type": "" }, { "name": "value4", "nodeType": "YulTypedName", - "src": "12376:6:1", + "src": "12401:6:2", "type": "" } ], - "src": "12222:1125:1" + "src": "12245:1129:2" }, { "body": { "nodeType": "YulBlock", - "src": "13385:28:1", + "src": "13412:28:2", "statements": [ { "nodeType": "YulAssignment", - "src": "13395:12:1", + "src": "13422:12:2", "value": { "name": "value", "nodeType": "YulIdentifier", - "src": "13402:5:1" + "src": "13429:5:2" }, "variableNames": [ { "name": "ret", "nodeType": "YulIdentifier", - "src": "13395:3:1" + "src": "13422:3:2" } ] } @@ -7704,7 +7704,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "13371:5:1", + "src": "13398:5:2", "type": "" } ], @@ -7712,20 +7712,20 @@ { "name": "ret", "nodeType": "YulTypedName", - "src": "13381:3:1", + "src": "13408:3:2", "type": "" } ], - "src": "13353:60:1" + "src": "13380:60:2" }, { "body": { "nodeType": "YulBlock", - "src": "13479:82:1", + "src": "13506:82:2", "statements": [ { "nodeType": "YulAssignment", - "src": "13489:66:1", + "src": "13516:66:2", "value": { "arguments": [ { @@ -7735,40 +7735,40 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "13547:5:1" + "src": "13574:5:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "13529:17:1" + "src": "13556:17:2" }, "nodeType": "YulFunctionCall", - "src": "13529:24:1" + "src": "13556:24:2" } ], "functionName": { "name": "identity", "nodeType": "YulIdentifier", - "src": "13520:8:1" + "src": "13547:8:2" }, "nodeType": "YulFunctionCall", - "src": "13520:34:1" + "src": "13547:34:2" } ], "functionName": { "name": "cleanup_t_uint160", "nodeType": "YulIdentifier", - "src": "13502:17:1" + "src": "13529:17:2" }, "nodeType": "YulFunctionCall", - "src": "13502:53:1" + "src": "13529:53:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "13489:9:1" + "src": "13516:9:2" } ] } @@ -7780,7 +7780,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "13459:5:1", + "src": "13486:5:2", "type": "" } ], @@ -7788,41 +7788,41 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "13469:9:1", + "src": "13496:9:2", "type": "" } ], - "src": "13419:142:1" + "src": "13446:142:2" }, { "body": { "nodeType": "YulBlock", - "src": "13627:66:1", + "src": "13654:66:2", "statements": [ { "nodeType": "YulAssignment", - "src": "13637:50:1", + "src": "13664:50:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "13681:5:1" + "src": "13708:5:2" } ], "functionName": { "name": "convert_t_uint160_to_t_uint160", "nodeType": "YulIdentifier", - "src": "13650:30:1" + "src": "13677:30:2" }, "nodeType": "YulFunctionCall", - "src": "13650:37:1" + "src": "13677:37:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "13637:9:1" + "src": "13664:9:2" } ] } @@ -7834,7 +7834,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "13607:5:1", + "src": "13634:5:2", "type": "" } ], @@ -7842,53 +7842,53 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "13617:9:1", + "src": "13644:9:2", "type": "" } ], - "src": "13567:126:1" + "src": "13594:126:2" }, { "body": { "nodeType": "YulBlock", - "src": "13774:66:1", + "src": "13801:66:2", "statements": [ { "nodeType": "YulAssignment", - "src": "13784:50:1", + "src": "13811:50:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "13828:5:1" + "src": "13855:5:2" } ], "functionName": { "name": "convert_t_uint160_to_t_address", "nodeType": "YulIdentifier", - "src": "13797:30:1" + "src": "13824:30:2" }, "nodeType": "YulFunctionCall", - "src": "13797:37:1" + "src": "13824:37:2" }, "variableNames": [ { "name": "converted", "nodeType": "YulIdentifier", - "src": "13784:9:1" + "src": "13811:9:2" } ] } ] }, - "name": "convert_t_contract$_Xtokens_$108_to_t_address", + "name": "convert_t_contract$_Xtokens_$271_to_t_address", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "13754:5:1", + "src": "13781:5:2", "type": "" } ], @@ -7896,16 +7896,16 @@ { "name": "converted", "nodeType": "YulTypedName", - "src": "13764:9:1", + "src": "13791:9:2", "type": "" } ], - "src": "13699:141:1" + "src": "13726:141:2" }, { "body": { "nodeType": "YulBlock", - "src": "13926:81:1", + "src": "13953:81:2", "statements": [ { "expression": { @@ -7913,75 +7913,75 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "13943:3:1" + "src": "13970:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "13994:5:1" + "src": "14021:5:2" } ], "functionName": { - "name": "convert_t_contract$_Xtokens_$108_to_t_address", + "name": "convert_t_contract$_Xtokens_$271_to_t_address", "nodeType": "YulIdentifier", - "src": "13948:45:1" + "src": "13975:45:2" }, "nodeType": "YulFunctionCall", - "src": "13948:52:1" + "src": "13975:52:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "13936:6:1" + "src": "13963:6:2" }, "nodeType": "YulFunctionCall", - "src": "13936:65:1" + "src": "13963:65:2" }, "nodeType": "YulExpressionStatement", - "src": "13936:65:1" + "src": "13963:65:2" } ] }, - "name": "abi_encode_t_contract$_Xtokens_$108_to_t_address_fromStack", + "name": "abi_encode_t_contract$_Xtokens_$271_to_t_address_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "13914:5:1", + "src": "13941:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "13921:3:1", + "src": "13948:3:2", "type": "" } ], - "src": "13846:161:1" + "src": "13873:161:2" }, { "body": { "nodeType": "YulBlock", - "src": "14126:139:1", + "src": "14153:139:2", "statements": [ { "nodeType": "YulAssignment", - "src": "14136:26:1", + "src": "14163:26:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14148:9:1" + "src": "14175:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14159:2:1", + "src": "14186:2:2", "type": "", "value": "32" } @@ -7989,16 +7989,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14144:3:1" + "src": "14171:3:2" }, "nodeType": "YulFunctionCall", - "src": "14144:18:1" + "src": "14171:18:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "14136:4:1" + "src": "14163:4:2" } ] }, @@ -8008,19 +8008,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "14231:6:1" + "src": "14258:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14244:9:1" + "src": "14271:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14255:1:1", + "src": "14282:1:2", "type": "", "value": "0" } @@ -8028,38 +8028,38 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14240:3:1" + "src": "14267:3:2" }, "nodeType": "YulFunctionCall", - "src": "14240:17:1" + "src": "14267:17:2" } ], "functionName": { - "name": "abi_encode_t_contract$_Xtokens_$108_to_t_address_fromStack", + "name": "abi_encode_t_contract$_Xtokens_$271_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "14172:58:1" + "src": "14199:58:2" }, "nodeType": "YulFunctionCall", - "src": "14172:86:1" + "src": "14199:86:2" }, "nodeType": "YulExpressionStatement", - "src": "14172:86:1" + "src": "14199:86:2" } ] }, - "name": "abi_encode_tuple_t_contract$_Xtokens_$108__to_t_address__fromStack_reversed", + "name": "abi_encode_tuple_t_contract$_Xtokens_$271__to_t_address__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "14098:9:1", + "src": "14125:9:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "14110:6:1", + "src": "14137:6:2", "type": "" } ], @@ -8067,21 +8067,21 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "14121:4:1", + "src": "14148:4:2", "type": "" } ], - "src": "14013:252:1" + "src": "14040:252:2" }, { "body": { "nodeType": "YulBlock", - "src": "14443:1023:1", + "src": "14474:1027:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "14490:83:1", + "src": "14521:83:2", "statements": [ { "expression": { @@ -8089,13 +8089,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "14492:77:1" + "src": "14523:77:2" }, "nodeType": "YulFunctionCall", - "src": "14492:79:1" + "src": "14523:79:2" }, "nodeType": "YulExpressionStatement", - "src": "14492:79:1" + "src": "14523:79:2" } ] }, @@ -8106,26 +8106,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "14464:7:1" + "src": "14495:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14473:9:1" + "src": "14504:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "14460:3:1" + "src": "14491:3:2" }, "nodeType": "YulFunctionCall", - "src": "14460:23:1" + "src": "14491:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14485:3:1", + "src": "14516:3:2", "type": "", "value": "128" } @@ -8133,21 +8133,21 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "14456:3:1" + "src": "14487:3:2" }, "nodeType": "YulFunctionCall", - "src": "14456:33:1" + "src": "14487:33:2" }, "nodeType": "YulIf", - "src": "14453:120:1" + "src": "14484:120:2" }, { "nodeType": "YulBlock", - "src": "14583:305:1", + "src": "14614:307:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "14598:45:1", + "src": "14629:45:2", "value": { "arguments": [ { @@ -8155,12 +8155,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14629:9:1" + "src": "14660:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14640:1:1", + "src": "14671:1:2", "type": "", "value": "0" } @@ -8168,25 +8168,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14625:3:1" + "src": "14656:3:2" }, "nodeType": "YulFunctionCall", - "src": "14625:17:1" + "src": "14656:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "14612:12:1" + "src": "14643:12:2" }, "nodeType": "YulFunctionCall", - "src": "14612:31:1" + "src": "14643:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "14602:6:1", + "src": "14633:6:2", "type": "" } ] @@ -8194,7 +8194,7 @@ { "body": { "nodeType": "YulBlock", - "src": "14690:83:1", + "src": "14721:83:2", "statements": [ { "expression": { @@ -8202,13 +8202,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "14692:77:1" + "src": "14723:77:2" }, "nodeType": "YulFunctionCall", - "src": "14692:79:1" + "src": "14723:79:2" }, "nodeType": "YulExpressionStatement", - "src": "14692:79:1" + "src": "14723:79:2" } ] }, @@ -8217,12 +8217,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "14662:6:1" + "src": "14693:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "14670:18:1", + "src": "14701:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -8230,17 +8230,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "14659:2:1" + "src": "14690:2:2" }, "nodeType": "YulFunctionCall", - "src": "14659:30:1" + "src": "14690:30:2" }, "nodeType": "YulIf", - "src": "14656:117:1" + "src": "14687:117:2" }, { "nodeType": "YulAssignment", - "src": "14787:91:1", + "src": "14818:93:2", "value": { "arguments": [ { @@ -8248,41 +8248,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14850:9:1" + "src": "14883:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "14861:6:1" + "src": "14894:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14846:3:1" + "src": "14879:3:2" }, "nodeType": "YulFunctionCall", - "src": "14846:22:1" + "src": "14879:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "14870:7:1" + "src": "14903:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "14797:48:1" + "src": "14828:50:2" }, "nodeType": "YulFunctionCall", - "src": "14797:81:1" + "src": "14828:83:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "14787:6:1" + "src": "14818:6:2" } ] } @@ -8290,15 +8290,15 @@ }, { "nodeType": "YulBlock", - "src": "14898:118:1", + "src": "14931:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "14913:16:1", + "src": "14946:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "14927:2:1", + "src": "14960:2:2", "type": "", "value": "32" }, @@ -8306,14 +8306,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "14917:6:1", + "src": "14950:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "14943:63:1", + "src": "14976:63:2", "value": { "arguments": [ { @@ -8321,41 +8321,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "14978:9:1" + "src": "15011:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "14989:6:1" + "src": "15022:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "14974:3:1" + "src": "15007:3:2" }, "nodeType": "YulFunctionCall", - "src": "14974:22:1" + "src": "15007:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "14998:7:1" + "src": "15031:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "14953:20:1" + "src": "14986:20:2" }, "nodeType": "YulFunctionCall", - "src": "14953:53:1" + "src": "14986:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "14943:6:1" + "src": "14976:6:2" } ] } @@ -8363,11 +8363,11 @@ }, { "nodeType": "YulBlock", - "src": "15026:306:1", + "src": "15059:308:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "15041:46:1", + "src": "15074:46:2", "value": { "arguments": [ { @@ -8375,12 +8375,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "15072:9:1" + "src": "15105:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "15083:2:1", + "src": "15116:2:2", "type": "", "value": "64" } @@ -8388,25 +8388,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "15068:3:1" + "src": "15101:3:2" }, "nodeType": "YulFunctionCall", - "src": "15068:18:1" + "src": "15101:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "15055:12:1" + "src": "15088:12:2" }, "nodeType": "YulFunctionCall", - "src": "15055:32:1" + "src": "15088:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "15045:6:1", + "src": "15078:6:2", "type": "" } ] @@ -8414,7 +8414,7 @@ { "body": { "nodeType": "YulBlock", - "src": "15134:83:1", + "src": "15167:83:2", "statements": [ { "expression": { @@ -8422,13 +8422,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "15136:77:1" + "src": "15169:77:2" }, "nodeType": "YulFunctionCall", - "src": "15136:79:1" + "src": "15169:79:2" }, "nodeType": "YulExpressionStatement", - "src": "15136:79:1" + "src": "15169:79:2" } ] }, @@ -8437,12 +8437,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "15106:6:1" + "src": "15139:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "15114:18:1", + "src": "15147:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -8450,17 +8450,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "15103:2:1" + "src": "15136:2:2" }, "nodeType": "YulFunctionCall", - "src": "15103:30:1" + "src": "15136:30:2" }, "nodeType": "YulIf", - "src": "15100:117:1" + "src": "15133:117:2" }, { "nodeType": "YulAssignment", - "src": "15231:91:1", + "src": "15264:93:2", "value": { "arguments": [ { @@ -8468,41 +8468,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "15294:9:1" + "src": "15329:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "15305:6:1" + "src": "15340:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "15290:3:1" + "src": "15325:3:2" }, "nodeType": "YulFunctionCall", - "src": "15290:22:1" + "src": "15325:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "15314:7:1" + "src": "15349:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "15241:48:1" + "src": "15274:50:2" }, "nodeType": "YulFunctionCall", - "src": "15241:81:1" + "src": "15274:83:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "15231:6:1" + "src": "15264:6:2" } ] } @@ -8510,15 +8510,15 @@ }, { "nodeType": "YulBlock", - "src": "15342:117:1", + "src": "15377:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "15357:16:1", + "src": "15392:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "15371:2:1", + "src": "15406:2:2", "type": "", "value": "96" }, @@ -8526,14 +8526,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "15361:6:1", + "src": "15396:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "15387:62:1", + "src": "15422:62:2", "value": { "arguments": [ { @@ -8541,41 +8541,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "15421:9:1" + "src": "15456:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "15432:6:1" + "src": "15467:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "15417:3:1" + "src": "15452:3:2" }, "nodeType": "YulFunctionCall", - "src": "15417:22:1" + "src": "15452:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "15441:7:1" + "src": "15476:7:2" } ], "functionName": { "name": "abi_decode_t_uint64", "nodeType": "YulIdentifier", - "src": "15397:19:1" + "src": "15432:19:2" }, "nodeType": "YulFunctionCall", - "src": "15397:52:1" + "src": "15432:52:2" }, "variableNames": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "15387:6:1" + "src": "15422:6:2" } ] } @@ -8583,19 +8583,19 @@ } ] }, - "name": "abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptrt_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64", + "name": "abi_decode_tuple_t_struct$_Multilocation_$171_memory_ptrt_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "14389:9:1", + "src": "14420:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "14400:7:1", + "src": "14431:7:2", "type": "" } ], @@ -8603,39 +8603,39 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "14412:6:1", + "src": "14443:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "14420:6:1", + "src": "14451:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "14428:6:1", + "src": "14459:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "14436:6:1", + "src": "14467:6:2", "type": "" } ], - "src": "14271:1195:1" + "src": "14298:1203:2" }, { "body": { "nodeType": "YulBlock", - "src": "15616:835:1", + "src": "15653:837:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "15663:83:1", + "src": "15700:83:2", "statements": [ { "expression": { @@ -8643,13 +8643,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "15665:77:1" + "src": "15702:77:2" }, "nodeType": "YulFunctionCall", - "src": "15665:79:1" + "src": "15702:79:2" }, "nodeType": "YulExpressionStatement", - "src": "15665:79:1" + "src": "15702:79:2" } ] }, @@ -8660,26 +8660,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "15637:7:1" + "src": "15674:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "15646:9:1" + "src": "15683:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "15633:3:1" + "src": "15670:3:2" }, "nodeType": "YulFunctionCall", - "src": "15633:23:1" + "src": "15670:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "15658:3:1", + "src": "15695:3:2", "type": "", "value": "128" } @@ -8687,25 +8687,25 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "15629:3:1" + "src": "15666:3:2" }, "nodeType": "YulFunctionCall", - "src": "15629:33:1" + "src": "15666:33:2" }, "nodeType": "YulIf", - "src": "15626:120:1" + "src": "15663:120:2" }, { "nodeType": "YulBlock", - "src": "15756:117:1", + "src": "15793:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "15771:15:1", + "src": "15808:15:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "15785:1:1", + "src": "15822:1:2", "type": "", "value": "0" }, @@ -8713,14 +8713,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "15775:6:1", + "src": "15812:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "15800:63:1", + "src": "15837:63:2", "value": { "arguments": [ { @@ -8728,41 +8728,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "15835:9:1" + "src": "15872:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "15846:6:1" + "src": "15883:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "15831:3:1" + "src": "15868:3:2" }, "nodeType": "YulFunctionCall", - "src": "15831:22:1" + "src": "15868:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "15855:7:1" + "src": "15892:7:2" } ], "functionName": { "name": "abi_decode_t_address", "nodeType": "YulIdentifier", - "src": "15810:20:1" + "src": "15847:20:2" }, "nodeType": "YulFunctionCall", - "src": "15810:53:1" + "src": "15847:53:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "15800:6:1" + "src": "15837:6:2" } ] } @@ -8770,15 +8770,15 @@ }, { "nodeType": "YulBlock", - "src": "15883:118:1", + "src": "15920:118:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "15898:16:1", + "src": "15935:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "15912:2:1", + "src": "15949:2:2", "type": "", "value": "32" }, @@ -8786,14 +8786,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "15902:6:1", + "src": "15939:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "15928:63:1", + "src": "15965:63:2", "value": { "arguments": [ { @@ -8801,41 +8801,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "15963:9:1" + "src": "16000:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "15974:6:1" + "src": "16011:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "15959:3:1" + "src": "15996:3:2" }, "nodeType": "YulFunctionCall", - "src": "15959:22:1" + "src": "15996:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "15983:7:1" + "src": "16020:7:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "15938:20:1" + "src": "15975:20:2" }, "nodeType": "YulFunctionCall", - "src": "15938:53:1" + "src": "15975:53:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "15928:6:1" + "src": "15965:6:2" } ] } @@ -8843,11 +8843,11 @@ }, { "nodeType": "YulBlock", - "src": "16011:306:1", + "src": "16048:308:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "16026:46:1", + "src": "16063:46:2", "value": { "arguments": [ { @@ -8855,12 +8855,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "16057:9:1" + "src": "16094:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16068:2:1", + "src": "16105:2:2", "type": "", "value": "64" } @@ -8868,25 +8868,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16053:3:1" + "src": "16090:3:2" }, "nodeType": "YulFunctionCall", - "src": "16053:18:1" + "src": "16090:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "16040:12:1" + "src": "16077:12:2" }, "nodeType": "YulFunctionCall", - "src": "16040:32:1" + "src": "16077:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "16030:6:1", + "src": "16067:6:2", "type": "" } ] @@ -8894,7 +8894,7 @@ { "body": { "nodeType": "YulBlock", - "src": "16119:83:1", + "src": "16156:83:2", "statements": [ { "expression": { @@ -8902,13 +8902,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "16121:77:1" + "src": "16158:77:2" }, "nodeType": "YulFunctionCall", - "src": "16121:79:1" + "src": "16158:79:2" }, "nodeType": "YulExpressionStatement", - "src": "16121:79:1" + "src": "16158:79:2" } ] }, @@ -8917,12 +8917,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "16091:6:1" + "src": "16128:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16099:18:1", + "src": "16136:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -8930,17 +8930,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "16088:2:1" + "src": "16125:2:2" }, "nodeType": "YulFunctionCall", - "src": "16088:30:1" + "src": "16125:30:2" }, "nodeType": "YulIf", - "src": "16085:117:1" + "src": "16122:117:2" }, { "nodeType": "YulAssignment", - "src": "16216:91:1", + "src": "16253:93:2", "value": { "arguments": [ { @@ -8948,41 +8948,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "16279:9:1" + "src": "16318:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "16290:6:1" + "src": "16329:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16275:3:1" + "src": "16314:3:2" }, "nodeType": "YulFunctionCall", - "src": "16275:22:1" + "src": "16314:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "16299:7:1" + "src": "16338:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "16226:48:1" + "src": "16263:50:2" }, "nodeType": "YulFunctionCall", - "src": "16226:81:1" + "src": "16263:83:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "16216:6:1" + "src": "16253:6:2" } ] } @@ -8990,15 +8990,15 @@ }, { "nodeType": "YulBlock", - "src": "16327:117:1", + "src": "16366:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "16342:16:1", + "src": "16381:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "16356:2:1", + "src": "16395:2:2", "type": "", "value": "96" }, @@ -9006,14 +9006,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "16346:6:1", + "src": "16385:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "16372:62:1", + "src": "16411:62:2", "value": { "arguments": [ { @@ -9021,41 +9021,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "16406:9:1" + "src": "16445:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "16417:6:1" + "src": "16456:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16402:3:1" + "src": "16441:3:2" }, "nodeType": "YulFunctionCall", - "src": "16402:22:1" + "src": "16441:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "16426:7:1" + "src": "16465:7:2" } ], "functionName": { "name": "abi_decode_t_uint64", "nodeType": "YulIdentifier", - "src": "16382:19:1" + "src": "16421:19:2" }, "nodeType": "YulFunctionCall", - "src": "16382:52:1" + "src": "16421:52:2" }, "variableNames": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "16372:6:1" + "src": "16411:6:2" } ] } @@ -9063,19 +9063,19 @@ } ] }, - "name": "abi_decode_tuple_t_addresst_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64", + "name": "abi_decode_tuple_t_addresst_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "15562:9:1", + "src": "15599:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "15573:7:1", + "src": "15610:7:2", "type": "" } ], @@ -9083,39 +9083,39 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "15585:6:1", + "src": "15622:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "15593:6:1", + "src": "15630:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "15601:6:1", + "src": "15638:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "15609:6:1", + "src": "15646:6:2", "type": "" } ], - "src": "15472:979:1" + "src": "15507:983:2" }, { "body": { "nodeType": "YulBlock", - "src": "16565:229:1", + "src": "16605:229:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "16670:22:1", + "src": "16710:22:2", "statements": [ { "expression": { @@ -9123,13 +9123,13 @@ "functionName": { "name": "panic_error_0x41", "nodeType": "YulIdentifier", - "src": "16672:16:1" + "src": "16712:16:2" }, "nodeType": "YulFunctionCall", - "src": "16672:18:1" + "src": "16712:18:2" }, "nodeType": "YulExpressionStatement", - "src": "16672:18:1" + "src": "16712:18:2" } ] }, @@ -9138,12 +9138,12 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "16642:6:1" + "src": "16682:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16650:18:1", + "src": "16690:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -9151,28 +9151,28 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "16639:2:1" + "src": "16679:2:2" }, "nodeType": "YulFunctionCall", - "src": "16639:30:1" + "src": "16679:30:2" }, "nodeType": "YulIf", - "src": "16636:56:1" + "src": "16676:56:2" }, { "nodeType": "YulAssignment", - "src": "16702:25:1", + "src": "16742:25:2", "value": { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "16714:6:1" + "src": "16754:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16722:4:1", + "src": "16762:4:2", "type": "", "value": "0x20" } @@ -9180,33 +9180,33 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "16710:3:1" + "src": "16750:3:2" }, "nodeType": "YulFunctionCall", - "src": "16710:17:1" + "src": "16750:17:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "16702:4:1" + "src": "16742:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "16764:23:1", + "src": "16804:23:2", "value": { "arguments": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "16776:4:1" + "src": "16816:4:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16782:4:1", + "src": "16822:4:2", "type": "", "value": "0x20" } @@ -9214,28 +9214,28 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "16772:3:1" + "src": "16812:3:2" }, "nodeType": "YulFunctionCall", - "src": "16772:15:1" + "src": "16812:15:2" }, "variableNames": [ { "name": "size", "nodeType": "YulIdentifier", - "src": "16764:4:1" + "src": "16804:4:2" } ] } ] }, - "name": "array_allocation_size_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_allocation_size_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "length", "nodeType": "YulTypedName", - "src": "16549:6:1", + "src": "16589:6:2", "type": "" } ], @@ -9243,21 +9243,21 @@ { "name": "size", "nodeType": "YulTypedName", - "src": "16560:4:1", + "src": "16600:4:2", "type": "" } ], - "src": "16457:337:1" + "src": "16496:338:2" }, { "body": { "nodeType": "YulBlock", - "src": "16914:688:1", + "src": "16955:690:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "16958:83:1", + "src": "16999:83:2", "statements": [ { "expression": { @@ -9265,13 +9265,13 @@ "functionName": { "name": "revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f", "nodeType": "YulIdentifier", - "src": "16960:77:1" + "src": "17001:77:2" }, "nodeType": "YulFunctionCall", - "src": "16960:79:1" + "src": "17001:79:2" }, "nodeType": "YulExpressionStatement", - "src": "16960:79:1" + "src": "17001:79:2" } ] }, @@ -9282,26 +9282,26 @@ { "name": "end", "nodeType": "YulIdentifier", - "src": "16935:3:1" + "src": "16976:3:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "16940:9:1" + "src": "16981:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "16931:3:1" + "src": "16972:3:2" }, "nodeType": "YulFunctionCall", - "src": "16931:19:1" + "src": "16972:19:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "16952:4:1", + "src": "16993:4:2", "type": "", "value": "0x40" } @@ -9309,23 +9309,23 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "16927:3:1" + "src": "16968:3:2" }, "nodeType": "YulFunctionCall", - "src": "16927:30:1" + "src": "16968:30:2" }, "nodeType": "YulIf", - "src": "16924:117:1" + "src": "16965:117:2" }, { "nodeType": "YulAssignment", - "src": "17050:30:1", + "src": "17091:30:2", "value": { "arguments": [ { "kind": "number", "nodeType": "YulLiteral", - "src": "17075:4:1", + "src": "17116:4:2", "type": "", "value": "0x40" } @@ -9333,26 +9333,26 @@ "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "17059:15:1" + "src": "17100:15:2" }, "nodeType": "YulFunctionCall", - "src": "17059:21:1" + "src": "17100:21:2" }, "variableNames": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "17050:5:1" + "src": "17091:5:2" } ] }, { "nodeType": "YulBlock", - "src": "17090:342:1", + "src": "17131:344:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "17129:45:1", + "src": "17170:45:2", "value": { "arguments": [ { @@ -9360,12 +9360,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "17160:9:1" + "src": "17201:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17171:1:1", + "src": "17212:1:2", "type": "", "value": "0" } @@ -9373,25 +9373,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17156:3:1" + "src": "17197:3:2" }, "nodeType": "YulFunctionCall", - "src": "17156:17:1" + "src": "17197:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "17143:12:1" + "src": "17184:12:2" }, "nodeType": "YulFunctionCall", - "src": "17143:31:1" + "src": "17184:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "17133:6:1", + "src": "17174:6:2", "type": "" } ] @@ -9399,7 +9399,7 @@ { "body": { "nodeType": "YulBlock", - "src": "17221:83:1", + "src": "17262:83:2", "statements": [ { "expression": { @@ -9407,13 +9407,13 @@ "functionName": { "name": "revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421", "nodeType": "YulIdentifier", - "src": "17223:77:1" + "src": "17264:77:2" }, "nodeType": "YulFunctionCall", - "src": "17223:79:1" + "src": "17264:79:2" }, "nodeType": "YulExpressionStatement", - "src": "17223:79:1" + "src": "17264:79:2" } ] }, @@ -9422,12 +9422,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "17193:6:1" + "src": "17234:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17201:18:1", + "src": "17242:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -9435,13 +9435,13 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "17190:2:1" + "src": "17231:2:2" }, "nodeType": "YulFunctionCall", - "src": "17190:30:1" + "src": "17231:30:2" }, "nodeType": "YulIf", - "src": "17187:117:1" + "src": "17228:117:2" }, { "expression": { @@ -9451,12 +9451,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "17329:5:1" + "src": "17370:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17336:4:1", + "src": "17377:4:2", "type": "", "value": "0x00" } @@ -9464,10 +9464,10 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17325:3:1" + "src": "17366:3:2" }, "nodeType": "YulFunctionCall", - "src": "17325:16:1" + "src": "17366:16:2" }, { "arguments": [ @@ -9476,61 +9476,61 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "17396:9:1" + "src": "17439:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "17407:6:1" + "src": "17450:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17392:3:1" + "src": "17435:3:2" }, "nodeType": "YulFunctionCall", - "src": "17392:22:1" + "src": "17435:22:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "17416:3:1" + "src": "17459:3:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "17343:48:1" + "src": "17384:50:2" }, "nodeType": "YulFunctionCall", - "src": "17343:77:1" + "src": "17384:79:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "17318:6:1" + "src": "17359:6:2" }, "nodeType": "YulFunctionCall", - "src": "17318:103:1" + "src": "17359:105:2" }, "nodeType": "YulExpressionStatement", - "src": "17318:103:1" + "src": "17359:105:2" } ] }, { "nodeType": "YulBlock", - "src": "17442:153:1", + "src": "17485:153:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "17479:16:1", + "src": "17522:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "17493:2:1", + "src": "17536:2:2", "type": "", "value": "32" }, @@ -9538,7 +9538,7 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "17483:6:1", + "src": "17526:6:2", "type": "" } ] @@ -9551,12 +9551,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "17520:5:1" + "src": "17563:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17527:4:1", + "src": "17570:4:2", "type": "", "value": "0x20" } @@ -9564,10 +9564,10 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17516:3:1" + "src": "17559:3:2" }, "nodeType": "YulFunctionCall", - "src": "17516:16:1" + "src": "17559:16:2" }, { "arguments": [ @@ -9576,65 +9576,65 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "17559:9:1" + "src": "17602:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "17570:6:1" + "src": "17613:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17555:3:1" + "src": "17598:3:2" }, "nodeType": "YulFunctionCall", - "src": "17555:22:1" + "src": "17598:22:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "17579:3:1" + "src": "17622:3:2" } ], "functionName": { "name": "abi_decode_t_uint256", "nodeType": "YulIdentifier", - "src": "17534:20:1" + "src": "17577:20:2" }, "nodeType": "YulFunctionCall", - "src": "17534:49:1" + "src": "17577:49:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "17509:6:1" + "src": "17552:6:2" }, "nodeType": "YulFunctionCall", - "src": "17509:75:1" + "src": "17552:75:2" }, "nodeType": "YulExpressionStatement", - "src": "17509:75:1" + "src": "17552:75:2" } ] } ] }, - "name": "abi_decode_t_struct$_MultiAsset_$14_memory_ptr", + "name": "abi_decode_t_struct$_MultiAsset_$177_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "16889:9:1", + "src": "16930:9:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "16900:3:1", + "src": "16941:3:2", "type": "" } ], @@ -9642,20 +9642,20 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "16908:5:1", + "src": "16949:5:2", "type": "" } ], - "src": "16833:769:1" + "src": "16873:772:2" }, { "body": { "nodeType": "YulBlock", - "src": "17771:865:1", + "src": "17815:867:2", "statements": [ { "nodeType": "YulAssignment", - "src": "17781:116:1", + "src": "17825:117:2", "value": { "arguments": [ { @@ -9663,47 +9663,47 @@ { "name": "length", "nodeType": "YulIdentifier", - "src": "17889:6:1" + "src": "17934:6:2" } ], "functionName": { - "name": "array_allocation_size_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_allocation_size_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "17806:82:1" + "src": "17850:83:2" }, "nodeType": "YulFunctionCall", - "src": "17806:90:1" + "src": "17850:91:2" } ], "functionName": { "name": "allocate_memory", "nodeType": "YulIdentifier", - "src": "17790:15:1" + "src": "17834:15:2" }, "nodeType": "YulFunctionCall", - "src": "17790:107:1" + "src": "17834:108:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "17781:5:1" + "src": "17825:5:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "17906:16:1", + "src": "17951:16:2", "value": { "name": "array", "nodeType": "YulIdentifier", - "src": "17917:5:1" + "src": "17962:5:2" }, "variables": [ { "name": "dst", "nodeType": "YulTypedName", - "src": "17910:3:1", + "src": "17955:3:2", "type": "" } ] @@ -9714,39 +9714,39 @@ { "name": "array", "nodeType": "YulIdentifier", - "src": "17939:5:1" + "src": "17984:5:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "17946:6:1" + "src": "17991:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "17932:6:1" + "src": "17977:6:2" }, "nodeType": "YulFunctionCall", - "src": "17932:21:1" + "src": "17977:21:2" }, "nodeType": "YulExpressionStatement", - "src": "17932:21:1" + "src": "17977:21:2" }, { "nodeType": "YulAssignment", - "src": "17962:23:1", + "src": "18007:23:2", "value": { "arguments": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "17973:5:1" + "src": "18018:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "17980:4:1", + "src": "18025:4:2", "type": "", "value": "0x20" } @@ -9754,40 +9754,40 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "17969:3:1" + "src": "18014:3:2" }, "nodeType": "YulFunctionCall", - "src": "17969:16:1" + "src": "18014:16:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "17962:3:1" + "src": "18007:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "17995:44:1", + "src": "18040:44:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "18013:6:1" + "src": "18058:6:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "18025:6:1" + "src": "18070:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18033:4:1", + "src": "18078:4:2", "type": "", "value": "0x20" } @@ -9795,25 +9795,25 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "18021:3:1" + "src": "18066:3:2" }, "nodeType": "YulFunctionCall", - "src": "18021:17:1" + "src": "18066:17:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18009:3:1" + "src": "18054:3:2" }, "nodeType": "YulFunctionCall", - "src": "18009:30:1" + "src": "18054:30:2" }, "variables": [ { "name": "srcEnd", "nodeType": "YulTypedName", - "src": "17999:6:1", + "src": "18044:6:2", "type": "" } ] @@ -9821,7 +9821,7 @@ { "body": { "nodeType": "YulBlock", - "src": "18067:103:1", + "src": "18112:103:2", "statements": [ { "expression": { @@ -9829,13 +9829,13 @@ "functionName": { "name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef", "nodeType": "YulIdentifier", - "src": "18081:77:1" + "src": "18126:77:2" }, "nodeType": "YulFunctionCall", - "src": "18081:79:1" + "src": "18126:79:2" }, "nodeType": "YulExpressionStatement", - "src": "18081:79:1" + "src": "18126:79:2" } ] }, @@ -9844,54 +9844,54 @@ { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "18054:6:1" + "src": "18099:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "18062:3:1" + "src": "18107:3:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "18051:2:1" + "src": "18096:2:2" }, "nodeType": "YulFunctionCall", - "src": "18051:15:1" + "src": "18096:15:2" }, "nodeType": "YulIf", - "src": "18048:122:1" + "src": "18093:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "18255:375:1", + "src": "18300:376:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "18270:36:1", + "src": "18315:36:2", "value": { "arguments": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "18302:3:1" + "src": "18347:3:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "18289:12:1" + "src": "18334:12:2" }, "nodeType": "YulFunctionCall", - "src": "18289:17:1" + "src": "18334:17:2" }, "variables": [ { "name": "innerOffset", "nodeType": "YulTypedName", - "src": "18274:11:1", + "src": "18319:11:2", "type": "" } ] @@ -9899,7 +9899,7 @@ { "body": { "nodeType": "YulBlock", - "src": "18358:83:1", + "src": "18403:83:2", "statements": [ { "expression": { @@ -9907,13 +9907,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "18360:77:1" + "src": "18405:77:2" }, "nodeType": "YulFunctionCall", - "src": "18360:79:1" + "src": "18405:79:2" }, "nodeType": "YulExpressionStatement", - "src": "18360:79:1" + "src": "18405:79:2" } ] }, @@ -9922,12 +9922,12 @@ { "name": "innerOffset", "nodeType": "YulIdentifier", - "src": "18325:11:1" + "src": "18370:11:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18338:18:1", + "src": "18383:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -9935,43 +9935,43 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "18322:2:1" + "src": "18367:2:2" }, "nodeType": "YulFunctionCall", - "src": "18322:35:1" + "src": "18367:35:2" }, "nodeType": "YulIf", - "src": "18319:122:1" + "src": "18364:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "18454:42:1", + "src": "18499:42:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "18476:6:1" + "src": "18521:6:2" }, { "name": "innerOffset", "nodeType": "YulIdentifier", - "src": "18484:11:1" + "src": "18529:11:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18472:3:1" + "src": "18517:3:2" }, "nodeType": "YulFunctionCall", - "src": "18472:24:1" + "src": "18517:24:2" }, "variables": [ { "name": "elementPos", "nodeType": "YulTypedName", - "src": "18458:10:1", + "src": "18503:10:2", "type": "" } ] @@ -9982,55 +9982,55 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "18517:3:1" + "src": "18562:3:2" }, { "arguments": [ { "name": "elementPos", "nodeType": "YulIdentifier", - "src": "18569:10:1" + "src": "18615:10:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "18581:3:1" + "src": "18627:3:2" } ], "functionName": { - "name": "abi_decode_t_struct$_MultiAsset_$14_memory_ptr", + "name": "abi_decode_t_struct$_MultiAsset_$177_memory_ptr", "nodeType": "YulIdentifier", - "src": "18522:46:1" + "src": "18567:47:2" }, "nodeType": "YulFunctionCall", - "src": "18522:63:1" + "src": "18567:64:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "18510:6:1" + "src": "18555:6:2" }, "nodeType": "YulFunctionCall", - "src": "18510:76:1" + "src": "18555:77:2" }, "nodeType": "YulExpressionStatement", - "src": "18510:76:1" + "src": "18555:77:2" }, { "nodeType": "YulAssignment", - "src": "18599:21:1", + "src": "18645:21:2", "value": { "arguments": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "18610:3:1" + "src": "18656:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18615:4:1", + "src": "18661:4:2", "type": "", "value": "0x20" } @@ -10038,16 +10038,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18606:3:1" + "src": "18652:3:2" }, "nodeType": "YulFunctionCall", - "src": "18606:14:1" + "src": "18652:14:2" }, "variableNames": [ { "name": "dst", "nodeType": "YulIdentifier", - "src": "18599:3:1" + "src": "18645:3:2" } ] } @@ -10058,41 +10058,41 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "18208:3:1" + "src": "18253:3:2" }, { "name": "srcEnd", "nodeType": "YulIdentifier", - "src": "18213:6:1" + "src": "18258:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "18205:2:1" + "src": "18250:2:2" }, "nodeType": "YulFunctionCall", - "src": "18205:15:1" + "src": "18250:15:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "18221:25:1", + "src": "18266:25:2", "statements": [ { "nodeType": "YulAssignment", - "src": "18223:21:1", + "src": "18268:21:2", "value": { "arguments": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "18234:3:1" + "src": "18279:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18239:4:1", + "src": "18284:4:2", "type": "", "value": "0x20" } @@ -10100,16 +10100,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18230:3:1" + "src": "18275:3:2" }, "nodeType": "YulFunctionCall", - "src": "18230:14:1" + "src": "18275:14:2" }, "variableNames": [ { "name": "src", "nodeType": "YulIdentifier", - "src": "18223:3:1" + "src": "18268:3:2" } ] } @@ -10117,50 +10117,50 @@ }, "pre": { "nodeType": "YulBlock", - "src": "18183:21:1", + "src": "18228:21:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "18185:17:1", + "src": "18230:17:2", "value": { "name": "offset", "nodeType": "YulIdentifier", - "src": "18196:6:1" + "src": "18241:6:2" }, "variables": [ { "name": "src", "nodeType": "YulTypedName", - "src": "18189:3:1", + "src": "18234:3:2", "type": "" } ] } ] }, - "src": "18179:451:1" + "src": "18224:452:2" } ] }, - "name": "abi_decode_available_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_available_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "17741:6:1", + "src": "17785:6:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "17749:6:1", + "src": "17793:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "17757:3:1", + "src": "17801:3:2", "type": "" } ], @@ -10168,21 +10168,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "17765:5:1", + "src": "17809:5:2", "type": "" } ], - "src": "17643:993:1" + "src": "17686:996:2" }, { "body": { "nodeType": "YulBlock", - "src": "18780:319:1", + "src": "18827:320:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "18829:83:1", + "src": "18876:83:2", "statements": [ { "expression": { @@ -10190,13 +10190,13 @@ "functionName": { "name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d", "nodeType": "YulIdentifier", - "src": "18831:77:1" + "src": "18878:77:2" }, "nodeType": "YulFunctionCall", - "src": "18831:79:1" + "src": "18878:79:2" }, "nodeType": "YulExpressionStatement", - "src": "18831:79:1" + "src": "18878:79:2" } ] }, @@ -10209,12 +10209,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "18808:6:1" + "src": "18855:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "18816:4:1", + "src": "18863:4:2", "type": "", "value": "0x1f" } @@ -10222,68 +10222,68 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "18804:3:1" + "src": "18851:3:2" }, "nodeType": "YulFunctionCall", - "src": "18804:17:1" + "src": "18851:17:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "18823:3:1" + "src": "18870:3:2" } ], "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "18800:3:1" + "src": "18847:3:2" }, "nodeType": "YulFunctionCall", - "src": "18800:27:1" + "src": "18847:27:2" } ], "functionName": { "name": "iszero", "nodeType": "YulIdentifier", - "src": "18793:6:1" + "src": "18840:6:2" }, "nodeType": "YulFunctionCall", - "src": "18793:35:1" + "src": "18840:35:2" }, "nodeType": "YulIf", - "src": "18790:122:1" + "src": "18837:122:2" }, { "nodeType": "YulVariableDeclaration", - "src": "18921:34:1", + "src": "18968:34:2", "value": { "arguments": [ { "name": "offset", "nodeType": "YulIdentifier", - "src": "18948:6:1" + "src": "18995:6:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "18935:12:1" + "src": "18982:12:2" }, "nodeType": "YulFunctionCall", - "src": "18935:20:1" + "src": "18982:20:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "18925:6:1", + "src": "18972:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "18964:129:1", + "src": "19011:130:2", "value": { "arguments": [ { @@ -10291,12 +10291,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "19066:6:1" + "src": "19114:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19074:4:1", + "src": "19122:4:2", "type": "", "value": "0x20" } @@ -10304,53 +10304,53 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "19062:3:1" + "src": "19110:3:2" }, "nodeType": "YulFunctionCall", - "src": "19062:17:1" + "src": "19110:17:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "19081:6:1" + "src": "19129:6:2" }, { "name": "end", "nodeType": "YulIdentifier", - "src": "19089:3:1" + "src": "19137:3:2" } ], "functionName": { - "name": "abi_decode_available_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_available_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "18973:88:1" + "src": "19020:89:2" }, "nodeType": "YulFunctionCall", - "src": "18973:120:1" + "src": "19020:121:2" }, "variableNames": [ { "name": "array", "nodeType": "YulIdentifier", - "src": "18964:5:1" + "src": "19011:5:2" } ] } ] }, - "name": "abi_decode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "18758:6:1", + "src": "18805:6:2", "type": "" }, { "name": "end", "nodeType": "YulTypedName", - "src": "18766:3:1", + "src": "18813:3:2", "type": "" } ], @@ -10358,21 +10358,21 @@ { "name": "array", "nodeType": "YulTypedName", - "src": "18774:5:1", + "src": "18821:5:2", "type": "" } ], - "src": "18677:422:1" + "src": "18723:424:2" }, { "body": { "nodeType": "YulBlock", - "src": "19299:1045:1", + "src": "19350:1048:2", "statements": [ { "body": { "nodeType": "YulBlock", - "src": "19346:83:1", + "src": "19397:83:2", "statements": [ { "expression": { @@ -10380,13 +10380,13 @@ "functionName": { "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", "nodeType": "YulIdentifier", - "src": "19348:77:1" + "src": "19399:77:2" }, "nodeType": "YulFunctionCall", - "src": "19348:79:1" + "src": "19399:79:2" }, "nodeType": "YulExpressionStatement", - "src": "19348:79:1" + "src": "19399:79:2" } ] }, @@ -10397,26 +10397,26 @@ { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "19320:7:1" + "src": "19371:7:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19329:9:1" + "src": "19380:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "19316:3:1" + "src": "19367:3:2" }, "nodeType": "YulFunctionCall", - "src": "19316:23:1" + "src": "19367:23:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19341:3:1", + "src": "19392:3:2", "type": "", "value": "128" } @@ -10424,21 +10424,21 @@ "functionName": { "name": "slt", "nodeType": "YulIdentifier", - "src": "19312:3:1" + "src": "19363:3:2" }, "nodeType": "YulFunctionCall", - "src": "19312:33:1" + "src": "19363:33:2" }, "nodeType": "YulIf", - "src": "19309:120:1" + "src": "19360:120:2" }, { "nodeType": "YulBlock", - "src": "19439:328:1", + "src": "19490:329:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "19454:45:1", + "src": "19505:45:2", "value": { "arguments": [ { @@ -10446,12 +10446,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19485:9:1" + "src": "19536:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19496:1:1", + "src": "19547:1:2", "type": "", "value": "0" } @@ -10459,25 +10459,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "19481:3:1" + "src": "19532:3:2" }, "nodeType": "YulFunctionCall", - "src": "19481:17:1" + "src": "19532:17:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "19468:12:1" + "src": "19519:12:2" }, "nodeType": "YulFunctionCall", - "src": "19468:31:1" + "src": "19519:31:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "19458:6:1", + "src": "19509:6:2", "type": "" } ] @@ -10485,7 +10485,7 @@ { "body": { "nodeType": "YulBlock", - "src": "19546:83:1", + "src": "19597:83:2", "statements": [ { "expression": { @@ -10493,13 +10493,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "19548:77:1" + "src": "19599:77:2" }, "nodeType": "YulFunctionCall", - "src": "19548:79:1" + "src": "19599:79:2" }, "nodeType": "YulExpressionStatement", - "src": "19548:79:1" + "src": "19599:79:2" } ] }, @@ -10508,12 +10508,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "19518:6:1" + "src": "19569:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19526:18:1", + "src": "19577:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -10521,17 +10521,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "19515:2:1" + "src": "19566:2:2" }, "nodeType": "YulFunctionCall", - "src": "19515:30:1" + "src": "19566:30:2" }, "nodeType": "YulIf", - "src": "19512:117:1" + "src": "19563:117:2" }, { "nodeType": "YulAssignment", - "src": "19643:114:1", + "src": "19694:115:2", "value": { "arguments": [ { @@ -10539,41 +10539,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19729:9:1" + "src": "19781:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "19740:6:1" + "src": "19792:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "19725:3:1" + "src": "19777:3:2" }, "nodeType": "YulFunctionCall", - "src": "19725:22:1" + "src": "19777:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "19749:7:1" + "src": "19801:7:2" } ], "functionName": { - "name": "abi_decode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "abi_decode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "19653:71:1" + "src": "19704:72:2" }, "nodeType": "YulFunctionCall", - "src": "19653:104:1" + "src": "19704:105:2" }, "variableNames": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "19643:6:1" + "src": "19694:6:2" } ] } @@ -10581,15 +10581,15 @@ }, { "nodeType": "YulBlock", - "src": "19777:117:1", + "src": "19829:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "19792:16:1", + "src": "19844:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "19806:2:1", + "src": "19858:2:2", "type": "", "value": "32" }, @@ -10597,14 +10597,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "19796:6:1", + "src": "19848:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "19822:62:1", + "src": "19874:62:2", "value": { "arguments": [ { @@ -10612,41 +10612,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19856:9:1" + "src": "19908:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "19867:6:1" + "src": "19919:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "19852:3:1" + "src": "19904:3:2" }, "nodeType": "YulFunctionCall", - "src": "19852:22:1" + "src": "19904:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "19876:7:1" + "src": "19928:7:2" } ], "functionName": { "name": "abi_decode_t_uint32", "nodeType": "YulIdentifier", - "src": "19832:19:1" + "src": "19884:19:2" }, "nodeType": "YulFunctionCall", - "src": "19832:52:1" + "src": "19884:52:2" }, "variableNames": [ { "name": "value1", "nodeType": "YulIdentifier", - "src": "19822:6:1" + "src": "19874:6:2" } ] } @@ -10654,11 +10654,11 @@ }, { "nodeType": "YulBlock", - "src": "19904:306:1", + "src": "19956:308:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "19919:46:1", + "src": "19971:46:2", "value": { "arguments": [ { @@ -10666,12 +10666,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "19950:9:1" + "src": "20002:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19961:2:1", + "src": "20013:2:2", "type": "", "value": "64" } @@ -10679,25 +10679,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "19946:3:1" + "src": "19998:3:2" }, "nodeType": "YulFunctionCall", - "src": "19946:18:1" + "src": "19998:18:2" } ], "functionName": { "name": "calldataload", "nodeType": "YulIdentifier", - "src": "19933:12:1" + "src": "19985:12:2" }, "nodeType": "YulFunctionCall", - "src": "19933:32:1" + "src": "19985:32:2" }, "variables": [ { "name": "offset", "nodeType": "YulTypedName", - "src": "19923:6:1", + "src": "19975:6:2", "type": "" } ] @@ -10705,7 +10705,7 @@ { "body": { "nodeType": "YulBlock", - "src": "20012:83:1", + "src": "20064:83:2", "statements": [ { "expression": { @@ -10713,13 +10713,13 @@ "functionName": { "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", "nodeType": "YulIdentifier", - "src": "20014:77:1" + "src": "20066:77:2" }, "nodeType": "YulFunctionCall", - "src": "20014:79:1" + "src": "20066:79:2" }, "nodeType": "YulExpressionStatement", - "src": "20014:79:1" + "src": "20066:79:2" } ] }, @@ -10728,12 +10728,12 @@ { "name": "offset", "nodeType": "YulIdentifier", - "src": "19984:6:1" + "src": "20036:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "19992:18:1", + "src": "20044:18:2", "type": "", "value": "0xffffffffffffffff" } @@ -10741,17 +10741,17 @@ "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "19981:2:1" + "src": "20033:2:2" }, "nodeType": "YulFunctionCall", - "src": "19981:30:1" + "src": "20033:30:2" }, "nodeType": "YulIf", - "src": "19978:117:1" + "src": "20030:117:2" }, { "nodeType": "YulAssignment", - "src": "20109:91:1", + "src": "20161:93:2", "value": { "arguments": [ { @@ -10759,41 +10759,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "20172:9:1" + "src": "20226:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "20183:6:1" + "src": "20237:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "20168:3:1" + "src": "20222:3:2" }, "nodeType": "YulFunctionCall", - "src": "20168:22:1" + "src": "20222:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "20192:7:1" + "src": "20246:7:2" } ], "functionName": { - "name": "abi_decode_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_decode_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "20119:48:1" + "src": "20171:50:2" }, "nodeType": "YulFunctionCall", - "src": "20119:81:1" + "src": "20171:83:2" }, "variableNames": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "20109:6:1" + "src": "20161:6:2" } ] } @@ -10801,15 +10801,15 @@ }, { "nodeType": "YulBlock", - "src": "20220:117:1", + "src": "20274:117:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "20235:16:1", + "src": "20289:16:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "20249:2:1", + "src": "20303:2:2", "type": "", "value": "96" }, @@ -10817,14 +10817,14 @@ { "name": "offset", "nodeType": "YulTypedName", - "src": "20239:6:1", + "src": "20293:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "20265:62:1", + "src": "20319:62:2", "value": { "arguments": [ { @@ -10832,41 +10832,41 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "20299:9:1" + "src": "20353:9:2" }, { "name": "offset", "nodeType": "YulIdentifier", - "src": "20310:6:1" + "src": "20364:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "20295:3:1" + "src": "20349:3:2" }, "nodeType": "YulFunctionCall", - "src": "20295:22:1" + "src": "20349:22:2" }, { "name": "dataEnd", "nodeType": "YulIdentifier", - "src": "20319:7:1" + "src": "20373:7:2" } ], "functionName": { "name": "abi_decode_t_uint64", "nodeType": "YulIdentifier", - "src": "20275:19:1" + "src": "20329:19:2" }, "nodeType": "YulFunctionCall", - "src": "20275:52:1" + "src": "20329:52:2" }, "variableNames": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "20265:6:1" + "src": "20319:6:2" } ] } @@ -10874,19 +10874,19 @@ } ] }, - "name": "abi_decode_tuple_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$8_memory_ptrt_uint64", + "name": "abi_decode_tuple_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$171_memory_ptrt_uint64", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "19245:9:1", + "src": "19296:9:2", "type": "" }, { "name": "dataEnd", "nodeType": "YulTypedName", - "src": "19256:7:1", + "src": "19307:7:2", "type": "" } ], @@ -10894,34 +10894,34 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "19268:6:1", + "src": "19319:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "19276:6:1", + "src": "19327:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "19284:6:1", + "src": "19335:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "19292:6:1", + "src": "19343:6:2", "type": "" } ], - "src": "19105:1239:1" + "src": "19153:1245:2" }, { "body": { "nodeType": "YulBlock", - "src": "20401:51:1", + "src": "20455:51:2", "statements": [ { "expression": { @@ -10929,35 +10929,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "20418:3:1" + "src": "20472:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "20439:5:1" + "src": "20493:5:2" } ], "functionName": { "name": "cleanup_t_uint8", "nodeType": "YulIdentifier", - "src": "20423:15:1" + "src": "20477:15:2" }, "nodeType": "YulFunctionCall", - "src": "20423:22:1" + "src": "20477:22:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "20411:6:1" + "src": "20465:6:2" }, "nodeType": "YulFunctionCall", - "src": "20411:35:1" + "src": "20465:35:2" }, "nodeType": "YulExpressionStatement", - "src": "20411:35:1" + "src": "20465:35:2" } ] }, @@ -10967,47 +10967,47 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "20389:5:1", + "src": "20443:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "20396:3:1", + "src": "20450:3:2", "type": "" } ], - "src": "20350:102:1" + "src": "20404:102:2" }, { "body": { "nodeType": "YulBlock", - "src": "20541:40:1", + "src": "20595:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "20552:22:1", + "src": "20606:22:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "20568:5:1" + "src": "20622:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "20562:5:1" + "src": "20616:5:2" }, "nodeType": "YulFunctionCall", - "src": "20562:12:1" + "src": "20616:12:2" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "20552:6:1" + "src": "20606:6:2" } ] } @@ -11019,7 +11019,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "20524:5:1", + "src": "20578:5:2", "type": "" } ], @@ -11027,16 +11027,16 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "20534:6:1", + "src": "20588:6:2", "type": "" } ], - "src": "20458:123:1" + "src": "20512:123:2" }, { "body": { "nodeType": "YulBlock", - "src": "20697:73:1", + "src": "20751:73:2", "statements": [ { "expression": { @@ -11044,39 +11044,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "20714:3:1" + "src": "20768:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "20719:6:1" + "src": "20773:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "20707:6:1" + "src": "20761:6:2" }, "nodeType": "YulFunctionCall", - "src": "20707:19:1" + "src": "20761:19:2" }, "nodeType": "YulExpressionStatement", - "src": "20707:19:1" + "src": "20761:19:2" }, { "nodeType": "YulAssignment", - "src": "20735:29:1", + "src": "20789:29:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "20754:3:1" + "src": "20808:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "20759:4:1", + "src": "20813:4:2", "type": "", "value": "0x20" } @@ -11084,16 +11084,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "20750:3:1" + "src": "20804:3:2" }, "nodeType": "YulFunctionCall", - "src": "20750:14:1" + "src": "20804:14:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "20735:11:1" + "src": "20789:11:2" } ] } @@ -11105,13 +11105,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "20669:3:1", + "src": "20723:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "20674:6:1", + "src": "20728:6:2", "type": "" } ], @@ -11119,47 +11119,47 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "20685:11:1", + "src": "20739:11:2", "type": "" } ], - "src": "20587:183:1" + "src": "20641:183:2" }, { "body": { "nodeType": "YulBlock", - "src": "20857:60:1", + "src": "20911:60:2", "statements": [ { "nodeType": "YulAssignment", - "src": "20867:11:1", + "src": "20921:11:2", "value": { "name": "ptr", "nodeType": "YulIdentifier", - "src": "20875:3:1" + "src": "20929:3:2" }, "variableNames": [ { "name": "data", "nodeType": "YulIdentifier", - "src": "20867:4:1" + "src": "20921:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "20888:22:1", + "src": "20942:22:2", "value": { "arguments": [ { "name": "ptr", "nodeType": "YulIdentifier", - "src": "20900:3:1" + "src": "20954:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "20905:4:1", + "src": "20959:4:2", "type": "", "value": "0x20" } @@ -11167,16 +11167,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "20896:3:1" + "src": "20950:3:2" }, "nodeType": "YulFunctionCall", - "src": "20896:14:1" + "src": "20950:14:2" }, "variableNames": [ { "name": "data", "nodeType": "YulIdentifier", - "src": "20888:4:1" + "src": "20942:4:2" } ] } @@ -11188,7 +11188,7 @@ { "name": "ptr", "nodeType": "YulTypedName", - "src": "20844:3:1", + "src": "20898:3:2", "type": "" } ], @@ -11196,41 +11196,41 @@ { "name": "data", "nodeType": "YulTypedName", - "src": "20852:4:1", + "src": "20906:4:2", "type": "" } ], - "src": "20776:141:1" + "src": "20830:141:2" }, { "body": { "nodeType": "YulBlock", - "src": "20981:40:1", + "src": "21035:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "20992:22:1", + "src": "21046:22:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "21008:5:1" + "src": "21062:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "21002:5:1" + "src": "21056:5:2" }, "nodeType": "YulFunctionCall", - "src": "21002:12:1" + "src": "21056:12:2" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "20992:6:1" + "src": "21046:6:2" } ] } @@ -11242,7 +11242,7 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "20964:5:1", + "src": "21018:5:2", "type": "" } ], @@ -11250,16 +11250,16 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "20974:6:1", + "src": "21028:6:2", "type": "" } ], - "src": "20923:98:1" + "src": "20977:98:2" }, { "body": { "nodeType": "YulBlock", - "src": "21112:73:1", + "src": "21166:73:2", "statements": [ { "expression": { @@ -11267,39 +11267,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "21129:3:1" + "src": "21183:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "21134:6:1" + "src": "21188:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "21122:6:1" + "src": "21176:6:2" }, "nodeType": "YulFunctionCall", - "src": "21122:19:1" + "src": "21176:19:2" }, "nodeType": "YulExpressionStatement", - "src": "21122:19:1" + "src": "21176:19:2" }, { "nodeType": "YulAssignment", - "src": "21150:29:1", + "src": "21204:29:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "21169:3:1" + "src": "21223:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "21174:4:1", + "src": "21228:4:2", "type": "", "value": "0x20" } @@ -11307,16 +11307,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "21165:3:1" + "src": "21219:3:2" }, "nodeType": "YulFunctionCall", - "src": "21165:14:1" + "src": "21219:14:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "21150:11:1" + "src": "21204:11:2" } ] } @@ -11328,13 +11328,13 @@ { "name": "pos", "nodeType": "YulTypedName", - "src": "21084:3:1", + "src": "21138:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "21089:6:1", + "src": "21143:6:2", "type": "" } ], @@ -11342,24 +11342,24 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "21100:11:1", + "src": "21154:11:2", "type": "" } ], - "src": "21027:158:1" + "src": "21081:158:2" }, { "body": { "nodeType": "YulBlock", - "src": "21240:258:1", + "src": "21294:258:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "21250:10:1", + "src": "21304:10:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "21259:1:1", + "src": "21313:1:2", "type": "", "value": "0" }, @@ -11367,7 +11367,7 @@ { "name": "i", "nodeType": "YulTypedName", - "src": "21254:1:1", + "src": "21308:1:2", "type": "" } ] @@ -11375,7 +11375,7 @@ { "body": { "nodeType": "YulBlock", - "src": "21319:63:1", + "src": "21373:63:2", "statements": [ { "expression": { @@ -11385,21 +11385,21 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "21344:3:1" + "src": "21398:3:2" }, { "name": "i", "nodeType": "YulIdentifier", - "src": "21349:1:1" + "src": "21403:1:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "21340:3:1" + "src": "21394:3:2" }, "nodeType": "YulFunctionCall", - "src": "21340:11:1" + "src": "21394:11:2" }, { "arguments": [ @@ -11408,42 +11408,42 @@ { "name": "src", "nodeType": "YulIdentifier", - "src": "21363:3:1" + "src": "21417:3:2" }, { "name": "i", "nodeType": "YulIdentifier", - "src": "21368:1:1" + "src": "21422:1:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "21359:3:1" + "src": "21413:3:2" }, "nodeType": "YulFunctionCall", - "src": "21359:11:1" + "src": "21413:11:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "21353:5:1" + "src": "21407:5:2" }, "nodeType": "YulFunctionCall", - "src": "21353:18:1" + "src": "21407:18:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "21333:6:1" + "src": "21387:6:2" }, "nodeType": "YulFunctionCall", - "src": "21333:39:1" + "src": "21387:39:2" }, "nodeType": "YulExpressionStatement", - "src": "21333:39:1" + "src": "21387:39:2" } ] }, @@ -11452,41 +11452,41 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "21280:1:1" + "src": "21334:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "21283:6:1" + "src": "21337:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "21277:2:1" + "src": "21331:2:2" }, "nodeType": "YulFunctionCall", - "src": "21277:13:1" + "src": "21331:13:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "21291:19:1", + "src": "21345:19:2", "statements": [ { "nodeType": "YulAssignment", - "src": "21293:15:1", + "src": "21347:15:2", "value": { "arguments": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "21302:1:1" + "src": "21356:1:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "21305:2:1", + "src": "21359:2:2", "type": "", "value": "32" } @@ -11494,16 +11494,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "21298:3:1" + "src": "21352:3:2" }, "nodeType": "YulFunctionCall", - "src": "21298:10:1" + "src": "21352:10:2" }, "variableNames": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "21293:1:1" + "src": "21347:1:2" } ] } @@ -11511,15 +11511,15 @@ }, "pre": { "nodeType": "YulBlock", - "src": "21273:3:1", + "src": "21327:3:2", "statements": [] }, - "src": "21269:113:1" + "src": "21323:113:2" }, { "body": { "nodeType": "YulBlock", - "src": "21416:76:1", + "src": "21470:76:2", "statements": [ { "expression": { @@ -11529,26 +11529,26 @@ { "name": "dst", "nodeType": "YulIdentifier", - "src": "21466:3:1" + "src": "21520:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "21471:6:1" + "src": "21525:6:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "21462:3:1" + "src": "21516:3:2" }, "nodeType": "YulFunctionCall", - "src": "21462:16:1" + "src": "21516:16:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "21480:1:1", + "src": "21534:1:2", "type": "", "value": "0" } @@ -11556,13 +11556,13 @@ "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "21455:6:1" + "src": "21509:6:2" }, "nodeType": "YulFunctionCall", - "src": "21455:27:1" + "src": "21509:27:2" }, "nodeType": "YulExpressionStatement", - "src": "21455:27:1" + "src": "21509:27:2" } ] }, @@ -11571,24 +11571,24 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "21397:1:1" + "src": "21451:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "21400:6:1" + "src": "21454:6:2" } ], "functionName": { "name": "gt", "nodeType": "YulIdentifier", - "src": "21394:2:1" + "src": "21448:2:2" }, "nodeType": "YulFunctionCall", - "src": "21394:13:1" + "src": "21448:13:2" }, "nodeType": "YulIf", - "src": "21391:101:1" + "src": "21445:101:2" } ] }, @@ -11598,86 +11598,86 @@ { "name": "src", "nodeType": "YulTypedName", - "src": "21222:3:1", + "src": "21276:3:2", "type": "" }, { "name": "dst", "nodeType": "YulTypedName", - "src": "21227:3:1", + "src": "21281:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "21232:6:1", + "src": "21286:6:2", "type": "" } ], - "src": "21191:307:1" + "src": "21245:307:2" }, { "body": { "nodeType": "YulBlock", - "src": "21584:260:1", + "src": "21638:260:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "21594:52:1", + "src": "21648:52:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "21640:5:1" + "src": "21694:5:2" } ], "functionName": { "name": "array_length_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "21608:31:1" + "src": "21662:31:2" }, "nodeType": "YulFunctionCall", - "src": "21608:38:1" + "src": "21662:38:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "21598:6:1", + "src": "21652:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "21655:67:1", + "src": "21709:67:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "21710:3:1" + "src": "21764:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "21715:6:1" + "src": "21769:6:2" } ], "functionName": { "name": "array_storeLengthForEncoding_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "21662:47:1" + "src": "21716:47:2" }, "nodeType": "YulFunctionCall", - "src": "21662:60:1" + "src": "21716:60:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "21655:3:1" + "src": "21709:3:2" } ] }, @@ -11689,12 +11689,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "21757:5:1" + "src": "21811:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "21764:4:1", + "src": "21818:4:2", "type": "", "value": "0x20" } @@ -11702,73 +11702,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "21753:3:1" + "src": "21807:3:2" }, "nodeType": "YulFunctionCall", - "src": "21753:16:1" + "src": "21807:16:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "21771:3:1" + "src": "21825:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "21776:6:1" + "src": "21830:6:2" } ], "functionName": { "name": "copy_memory_to_memory", "nodeType": "YulIdentifier", - "src": "21731:21:1" + "src": "21785:21:2" }, "nodeType": "YulFunctionCall", - "src": "21731:52:1" + "src": "21785:52:2" }, "nodeType": "YulExpressionStatement", - "src": "21731:52:1" + "src": "21785:52:2" }, { "nodeType": "YulAssignment", - "src": "21792:46:1", + "src": "21846:46:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "21803:3:1" + "src": "21857:3:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "21830:6:1" + "src": "21884:6:2" } ], "functionName": { "name": "round_up_to_mul_of_32", "nodeType": "YulIdentifier", - "src": "21808:21:1" + "src": "21862:21:2" }, "nodeType": "YulFunctionCall", - "src": "21808:29:1" + "src": "21862:29:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "21799:3:1" + "src": "21853:3:2" }, "nodeType": "YulFunctionCall", - "src": "21799:39:1" + "src": "21853:39:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "21792:3:1" + "src": "21846:3:2" } ] } @@ -11780,13 +11780,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "21565:5:1", + "src": "21619:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "21572:3:1", + "src": "21626:3:2", "type": "" } ], @@ -11794,46 +11794,46 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "21580:3:1", + "src": "21634:3:2", "type": "" } ], - "src": "21504:340:1" + "src": "21558:340:2" }, { "body": { "nodeType": "YulBlock", - "src": "21948:94:1", + "src": "22002:94:2", "statements": [ { "nodeType": "YulAssignment", - "src": "21958:78:1", + "src": "22012:78:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "22024:6:1" + "src": "22078:6:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "22032:3:1" + "src": "22086:3:2" } ], "functionName": { "name": "abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "21972:51:1" + "src": "22026:51:2" }, "nodeType": "YulFunctionCall", - "src": "21972:64:1" + "src": "22026:64:2" }, "variableNames": [ { "name": "updatedPos", "nodeType": "YulIdentifier", - "src": "21958:10:1" + "src": "22012:10:2" } ] } @@ -11845,13 +11845,13 @@ { "name": "value0", "nodeType": "YulTypedName", - "src": "21921:6:1", + "src": "21975:6:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "21929:3:1", + "src": "21983:3:2", "type": "" } ], @@ -11859,31 +11859,31 @@ { "name": "updatedPos", "nodeType": "YulTypedName", - "src": "21937:10:1", + "src": "21991:10:2", "type": "" } ], - "src": "21850:192:1" + "src": "21904:192:2" }, { "body": { "nodeType": "YulBlock", - "src": "22132:38:1", + "src": "22186:38:2", "statements": [ { "nodeType": "YulAssignment", - "src": "22142:22:1", + "src": "22196:22:2", "value": { "arguments": [ { "name": "ptr", "nodeType": "YulIdentifier", - "src": "22154:3:1" + "src": "22208:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "22159:4:1", + "src": "22213:4:2", "type": "", "value": "0x20" } @@ -11891,16 +11891,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "22150:3:1" + "src": "22204:3:2" }, "nodeType": "YulFunctionCall", - "src": "22150:14:1" + "src": "22204:14:2" }, "variableNames": [ { "name": "next", "nodeType": "YulIdentifier", - "src": "22142:4:1" + "src": "22196:4:2" } ] } @@ -11912,7 +11912,7 @@ { "name": "ptr", "nodeType": "YulTypedName", - "src": "22119:3:1", + "src": "22173:3:2", "type": "" } ], @@ -11920,115 +11920,115 @@ { "name": "next", "nodeType": "YulTypedName", - "src": "22127:4:1", + "src": "22181:4:2", "type": "" } ], - "src": "22048:122:1" + "src": "22102:122:2" }, { "body": { "nodeType": "YulBlock", - "src": "22334:831:1", + "src": "22388:831:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "22344:77:1", + "src": "22398:77:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "22415:5:1" + "src": "22469:5:2" } ], "functionName": { "name": "array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "22358:56:1" + "src": "22412:56:2" }, "nodeType": "YulFunctionCall", - "src": "22358:63:1" + "src": "22412:63:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "22348:6:1", + "src": "22402:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "22430:92:1", + "src": "22484:92:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "22510:3:1" + "src": "22564:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "22515:6:1" + "src": "22569:6:2" } ], "functionName": { "name": "array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "22437:72:1" + "src": "22491:72:2" }, "nodeType": "YulFunctionCall", - "src": "22437:85:1" + "src": "22491:85:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "22430:3:1" + "src": "22484:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "22531:20:1", + "src": "22585:20:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "22548:3:1" + "src": "22602:3:2" }, "variables": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "22535:9:1", + "src": "22589:9:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "22560:39:1", + "src": "22614:39:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "22576:3:1" + "src": "22630:3:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "22585:6:1" + "src": "22639:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "22593:4:1", + "src": "22647:4:2", "type": "", "value": "0x20" } @@ -12036,70 +12036,70 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "22581:3:1" + "src": "22635:3:2" }, "nodeType": "YulFunctionCall", - "src": "22581:17:1" + "src": "22635:17:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "22572:3:1" + "src": "22626:3:2" }, "nodeType": "YulFunctionCall", - "src": "22572:27:1" + "src": "22626:27:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "22564:4:1", + "src": "22618:4:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "22608:80:1", + "src": "22662:80:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "22682:5:1" + "src": "22736:5:2" } ], "functionName": { "name": "array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "22623:58:1" + "src": "22677:58:2" }, "nodeType": "YulFunctionCall", - "src": "22623:65:1" + "src": "22677:65:2" }, "variables": [ { "name": "baseRef", "nodeType": "YulTypedName", - "src": "22612:7:1", + "src": "22666:7:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "22697:21:1", + "src": "22751:21:2", "value": { "name": "baseRef", "nodeType": "YulIdentifier", - "src": "22711:7:1" + "src": "22765:7:2" }, "variables": [ { "name": "srcPtr", "nodeType": "YulTypedName", - "src": "22701:6:1", + "src": "22755:6:2", "type": "" } ] @@ -12107,7 +12107,7 @@ { "body": { "nodeType": "YulBlock", - "src": "22787:333:1", + "src": "22841:333:2", "statements": [ { "expression": { @@ -12115,142 +12115,142 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "22808:3:1" + "src": "22862:3:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "22817:4:1" + "src": "22871:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "22823:9:1" + "src": "22877:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "22813:3:1" + "src": "22867:3:2" }, "nodeType": "YulFunctionCall", - "src": "22813:20:1" + "src": "22867:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "22801:6:1" + "src": "22855:6:2" }, "nodeType": "YulFunctionCall", - "src": "22801:33:1" + "src": "22855:33:2" }, "nodeType": "YulExpressionStatement", - "src": "22801:33:1" + "src": "22855:33:2" }, { "nodeType": "YulVariableDeclaration", - "src": "22847:34:1", + "src": "22901:34:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "22874:6:1" + "src": "22928:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "22868:5:1" + "src": "22922:5:2" }, "nodeType": "YulFunctionCall", - "src": "22868:13:1" + "src": "22922:13:2" }, "variables": [ { "name": "elementValue0", "nodeType": "YulTypedName", - "src": "22851:13:1", + "src": "22905:13:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "22894:90:1", + "src": "22948:90:2", "value": { "arguments": [ { "name": "elementValue0", "nodeType": "YulIdentifier", - "src": "22964:13:1" + "src": "23018:13:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "22979:4:1" + "src": "23033:4:2" } ], "functionName": { "name": "abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr", "nodeType": "YulIdentifier", - "src": "22902:61:1" + "src": "22956:61:2" }, "nodeType": "YulFunctionCall", - "src": "22902:82:1" + "src": "22956:82:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "22894:4:1" + "src": "22948:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "22997:79:1", + "src": "23051:79:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "23069:6:1" + "src": "23123:6:2" } ], "functionName": { "name": "array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "23007:61:1" + "src": "23061:61:2" }, "nodeType": "YulFunctionCall", - "src": "23007:69:1" + "src": "23061:69:2" }, "variableNames": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "22997:6:1" + "src": "23051:6:2" } ] }, { "nodeType": "YulAssignment", - "src": "23089:21:1", + "src": "23143:21:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "23100:3:1" + "src": "23154:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "23105:4:1", + "src": "23159:4:2", "type": "", "value": "0x20" } @@ -12258,16 +12258,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "23096:3:1" + "src": "23150:3:2" }, "nodeType": "YulFunctionCall", - "src": "23096:14:1" + "src": "23150:14:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "23089:3:1" + "src": "23143:3:2" } ] } @@ -12278,41 +12278,41 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "22749:1:1" + "src": "22803:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "22752:6:1" + "src": "22806:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "22746:2:1" + "src": "22800:2:2" }, "nodeType": "YulFunctionCall", - "src": "22746:13:1" + "src": "22800:13:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "22760:18:1", + "src": "22814:18:2", "statements": [ { "nodeType": "YulAssignment", - "src": "22762:14:1", + "src": "22816:14:2", "value": { "arguments": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "22771:1:1" + "src": "22825:1:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "22774:1:1", + "src": "22828:1:2", "type": "", "value": "1" } @@ -12320,16 +12320,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "22767:3:1" + "src": "22821:3:2" }, "nodeType": "YulFunctionCall", - "src": "22767:9:1" + "src": "22821:9:2" }, "variableNames": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "22762:1:1" + "src": "22816:1:2" } ] } @@ -12337,15 +12337,15 @@ }, "pre": { "nodeType": "YulBlock", - "src": "22731:14:1", + "src": "22785:14:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "22733:10:1", + "src": "22787:10:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "22742:1:1", + "src": "22796:1:2", "type": "", "value": "0" }, @@ -12353,44 +12353,44 @@ { "name": "i", "nodeType": "YulTypedName", - "src": "22737:1:1", + "src": "22791:1:2", "type": "" } ] } ] }, - "src": "22727:393:1" + "src": "22781:393:2" }, { "nodeType": "YulAssignment", - "src": "23129:11:1", + "src": "23183:11:2", "value": { "name": "tail", "nodeType": "YulIdentifier", - "src": "23136:4:1" + "src": "23190:4:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "23129:3:1" + "src": "23183:3:2" } ] }, { "nodeType": "YulAssignment", - "src": "23149:10:1", + "src": "23203:10:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "23156:3:1" + "src": "23210:3:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "23149:3:1" + "src": "23203:3:2" } ] } @@ -12402,13 +12402,13 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "22313:5:1", + "src": "22367:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "22320:3:1", + "src": "22374:3:2", "type": "" } ], @@ -12416,31 +12416,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "22329:3:1", + "src": "22383:3:2", "type": "" } ], - "src": "22202:963:1" + "src": "22256:963:2" }, { "body": { "nodeType": "YulBlock", - "src": "23369:533:1", + "src": "23427:533:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "23379:26:1", + "src": "23437:26:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "23395:3:1" + "src": "23453:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "23400:4:1", + "src": "23458:4:2", "type": "", "value": "0x40" } @@ -12448,27 +12448,27 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "23391:3:1" + "src": "23449:3:2" }, "nodeType": "YulFunctionCall", - "src": "23391:14:1" + "src": "23449:14:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "23383:4:1", + "src": "23441:4:2", "type": "" } ] }, { "nodeType": "YulBlock", - "src": "23415:163:1", + "src": "23473:163:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "23453:43:1", + "src": "23511:43:2", "value": { "arguments": [ { @@ -12476,12 +12476,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "23483:5:1" + "src": "23541:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "23490:4:1", + "src": "23548:4:2", "type": "", "value": "0x00" } @@ -12489,25 +12489,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "23479:3:1" + "src": "23537:3:2" }, "nodeType": "YulFunctionCall", - "src": "23479:16:1" + "src": "23537:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "23473:5:1" + "src": "23531:5:2" }, "nodeType": "YulFunctionCall", - "src": "23473:23:1" + "src": "23531:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "23457:12:1", + "src": "23515:12:2", "type": "" } ] @@ -12518,19 +12518,19 @@ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "23539:12:1" + "src": "23597:12:2" }, { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "23557:3:1" + "src": "23615:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "23562:4:1", + "src": "23620:4:2", "type": "", "value": "0x00" } @@ -12538,32 +12538,32 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "23553:3:1" + "src": "23611:3:2" }, "nodeType": "YulFunctionCall", - "src": "23553:14:1" + "src": "23611:14:2" } ], "functionName": { "name": "abi_encode_t_uint8_to_t_uint8", "nodeType": "YulIdentifier", - "src": "23509:29:1" + "src": "23567:29:2" }, "nodeType": "YulFunctionCall", - "src": "23509:59:1" + "src": "23567:59:2" }, "nodeType": "YulExpressionStatement", - "src": "23509:59:1" + "src": "23567:59:2" } ] }, { "nodeType": "YulBlock", - "src": "23588:287:1", + "src": "23646:287:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "23627:43:1", + "src": "23685:43:2", "value": { "arguments": [ { @@ -12571,12 +12571,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "23657:5:1" + "src": "23715:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "23664:4:1", + "src": "23722:4:2", "type": "", "value": "0x20" } @@ -12584,25 +12584,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "23653:3:1" + "src": "23711:3:2" }, "nodeType": "YulFunctionCall", - "src": "23653:16:1" + "src": "23711:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "23647:5:1" + "src": "23705:5:2" }, "nodeType": "YulFunctionCall", - "src": "23647:23:1" + "src": "23705:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "23631:12:1", + "src": "23689:12:2", "type": "" } ] @@ -12615,12 +12615,12 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "23695:3:1" + "src": "23753:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "23700:4:1", + "src": "23758:4:2", "type": "", "value": "0x20" } @@ -12628,73 +12628,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "23691:3:1" + "src": "23749:3:2" }, "nodeType": "YulFunctionCall", - "src": "23691:14:1" + "src": "23749:14:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "23711:4:1" + "src": "23769:4:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "23717:3:1" + "src": "23775:3:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "23707:3:1" + "src": "23765:3:2" }, "nodeType": "YulFunctionCall", - "src": "23707:14:1" + "src": "23765:14:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "23684:6:1" + "src": "23742:6:2" }, "nodeType": "YulFunctionCall", - "src": "23684:38:1" + "src": "23742:38:2" }, "nodeType": "YulExpressionStatement", - "src": "23684:38:1" + "src": "23742:38:2" }, { "nodeType": "YulAssignment", - "src": "23735:129:1", + "src": "23793:129:2", "value": { "arguments": [ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "23845:12:1" + "src": "23903:12:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "23859:4:1" + "src": "23917:4:2" } ], "functionName": { "name": "abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "23743:101:1" + "src": "23801:101:2" }, "nodeType": "YulFunctionCall", - "src": "23743:121:1" + "src": "23801:121:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "23735:4:1" + "src": "23793:4:2" } ] } @@ -12702,35 +12702,35 @@ }, { "nodeType": "YulAssignment", - "src": "23885:11:1", + "src": "23943:11:2", "value": { "name": "tail", "nodeType": "YulIdentifier", - "src": "23892:4:1" + "src": "23950:4:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "23885:3:1" + "src": "23943:3:2" } ] } ] }, - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "23348:5:1", + "src": "23406:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "23355:3:1", + "src": "23413:3:2", "type": "" } ], @@ -12738,16 +12738,16 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "23364:3:1", + "src": "23422:3:2", "type": "" } ], - "src": "23239:663:1" + "src": "23293:667:2" }, { "body": { "nodeType": "YulBlock", - "src": "23973:53:1", + "src": "24031:53:2", "statements": [ { "expression": { @@ -12755,35 +12755,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "23990:3:1" + "src": "24048:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "24013:5:1" + "src": "24071:5:2" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "23995:17:1" + "src": "24053:17:2" }, "nodeType": "YulFunctionCall", - "src": "23995:24:1" + "src": "24053:24:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "23983:6:1" + "src": "24041:6:2" }, "nodeType": "YulFunctionCall", - "src": "23983:37:1" + "src": "24041:37:2" }, "nodeType": "YulExpressionStatement", - "src": "23983:37:1" + "src": "24041:37:2" } ] }, @@ -12793,22 +12793,22 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "23961:5:1", + "src": "24019:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "23968:3:1", + "src": "24026:3:2", "type": "" } ], - "src": "23908:118:1" + "src": "23966:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "24095:52:1", + "src": "24153:52:2", "statements": [ { "expression": { @@ -12816,35 +12816,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "24112:3:1" + "src": "24170:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "24134:5:1" + "src": "24192:5:2" } ], "functionName": { "name": "cleanup_t_uint64", "nodeType": "YulIdentifier", - "src": "24117:16:1" + "src": "24175:16:2" }, "nodeType": "YulFunctionCall", - "src": "24117:23:1" + "src": "24175:23:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "24105:6:1" + "src": "24163:6:2" }, "nodeType": "YulFunctionCall", - "src": "24105:36:1" + "src": "24163:36:2" }, "nodeType": "YulExpressionStatement", - "src": "24105:36:1" + "src": "24163:36:2" } ] }, @@ -12854,37 +12854,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "24083:5:1", + "src": "24141:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "24090:3:1", + "src": "24148:3:2", "type": "" } ], - "src": "24032:115:1" + "src": "24090:115:2" }, { "body": { "nodeType": "YulBlock", - "src": "24473:666:1", + "src": "24539:674:2", "statements": [ { "nodeType": "YulAssignment", - "src": "24483:27:1", + "src": "24549:27:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "24495:9:1" + "src": "24561:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "24506:3:1", + "src": "24572:3:2", "type": "", "value": "160" } @@ -12892,16 +12892,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "24491:3:1" + "src": "24557:3:2" }, "nodeType": "YulFunctionCall", - "src": "24491:19:1" + "src": "24557:19:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "24483:4:1" + "src": "24549:4:2" } ] }, @@ -12913,12 +12913,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "24531:9:1" + "src": "24597:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "24542:1:1", + "src": "24608:1:2", "type": "", "value": "0" } @@ -12926,73 +12926,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "24527:3:1" + "src": "24593:3:2" }, "nodeType": "YulFunctionCall", - "src": "24527:17:1" + "src": "24593:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "24550:4:1" + "src": "24616:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "24556:9:1" + "src": "24622:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "24546:3:1" + "src": "24612:3:2" }, "nodeType": "YulFunctionCall", - "src": "24546:20:1" + "src": "24612:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "24520:6:1" + "src": "24586:6:2" }, "nodeType": "YulFunctionCall", - "src": "24520:47:1" + "src": "24586:47:2" }, "nodeType": "YulExpressionStatement", - "src": "24520:47:1" + "src": "24586:47:2" }, { "nodeType": "YulAssignment", - "src": "24576:122:1", + "src": "24642:126:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "24684:6:1" + "src": "24754:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "24693:4:1" + "src": "24763:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "24584:99:1" + "src": "24650:103:2" }, "nodeType": "YulFunctionCall", - "src": "24584:114:1" + "src": "24650:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "24576:4:1" + "src": "24642:4:2" } ] }, @@ -13002,19 +13002,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "24752:6:1" + "src": "24822:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "24765:9:1" + "src": "24835:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "24776:2:1", + "src": "24846:2:2", "type": "", "value": "32" } @@ -13022,22 +13022,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "24761:3:1" + "src": "24831:3:2" }, "nodeType": "YulFunctionCall", - "src": "24761:18:1" + "src": "24831:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "24708:43:1" + "src": "24778:43:2" }, "nodeType": "YulFunctionCall", - "src": "24708:72:1" + "src": "24778:72:2" }, "nodeType": "YulExpressionStatement", - "src": "24708:72:1" + "src": "24778:72:2" }, { "expression": { @@ -13045,19 +13045,19 @@ { "name": "value2", "nodeType": "YulIdentifier", - "src": "24834:6:1" + "src": "24904:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "24847:9:1" + "src": "24917:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "24858:2:1", + "src": "24928:2:2", "type": "", "value": "64" } @@ -13065,22 +13065,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "24843:3:1" + "src": "24913:3:2" }, "nodeType": "YulFunctionCall", - "src": "24843:18:1" + "src": "24913:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "24790:43:1" + "src": "24860:43:2" }, "nodeType": "YulFunctionCall", - "src": "24790:72:1" + "src": "24860:72:2" }, "nodeType": "YulExpressionStatement", - "src": "24790:72:1" + "src": "24860:72:2" }, { "expression": { @@ -13090,12 +13090,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "24883:9:1" + "src": "24953:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "24894:2:1", + "src": "24964:2:2", "type": "", "value": "96" } @@ -13103,73 +13103,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "24879:3:1" + "src": "24949:3:2" }, "nodeType": "YulFunctionCall", - "src": "24879:18:1" + "src": "24949:18:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "24903:4:1" + "src": "24973:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "24909:9:1" + "src": "24979:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "24899:3:1" + "src": "24969:3:2" }, "nodeType": "YulFunctionCall", - "src": "24899:20:1" + "src": "24969:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "24872:6:1" + "src": "24942:6:2" }, "nodeType": "YulFunctionCall", - "src": "24872:48:1" + "src": "24942:48:2" }, "nodeType": "YulExpressionStatement", - "src": "24872:48:1" + "src": "24942:48:2" }, { "nodeType": "YulAssignment", - "src": "24929:122:1", + "src": "24999:126:2", "value": { "arguments": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "25037:6:1" + "src": "25111:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "25046:4:1" + "src": "25120:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "24937:99:1" + "src": "25007:103:2" }, "nodeType": "YulFunctionCall", - "src": "24937:114:1" + "src": "25007:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "24929:4:1" + "src": "24999:4:2" } ] }, @@ -13179,19 +13179,19 @@ { "name": "value4", "nodeType": "YulIdentifier", - "src": "25103:6:1" + "src": "25177:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "25116:9:1" + "src": "25190:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "25127:3:1", + "src": "25201:3:2", "type": "", "value": "128" } @@ -13199,62 +13199,62 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "25112:3:1" + "src": "25186:3:2" }, "nodeType": "YulFunctionCall", - "src": "25112:19:1" + "src": "25186:19:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "25061:41:1" + "src": "25135:41:2" }, "nodeType": "YulFunctionCall", - "src": "25061:71:1" + "src": "25135:71:2" }, "nodeType": "YulExpressionStatement", - "src": "25061:71:1" + "src": "25135:71:2" } ] }, - "name": "abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed", + "name": "abi_encode_tuple_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "24413:9:1", + "src": "24479:9:2", "type": "" }, { "name": "value4", "nodeType": "YulTypedName", - "src": "24425:6:1", + "src": "24491:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "24433:6:1", + "src": "24499:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "24441:6:1", + "src": "24507:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "24449:6:1", + "src": "24515:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "24457:6:1", + "src": "24523:6:2", "type": "" } ], @@ -13262,53 +13262,53 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "24468:4:1", + "src": "24534:4:2", "type": "" } ], - "src": "24153:986:1" + "src": "24211:1002:2" }, { "body": { "nodeType": "YulBlock", - "src": "25243:40:1", + "src": "25318:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "25254:22:1", + "src": "25329:22:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "25270:5:1" + "src": "25345:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "25264:5:1" + "src": "25339:5:2" }, "nodeType": "YulFunctionCall", - "src": "25264:12:1" + "src": "25339:12:2" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "25254:6:1" + "src": "25329:6:2" } ] } ] }, - "name": "array_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "25226:5:1", + "src": "25301:5:2", "type": "" } ], @@ -13316,16 +13316,16 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "25236:6:1", + "src": "25311:6:2", "type": "" } ], - "src": "25145:138:1" + "src": "25219:139:2" }, { "body": { "nodeType": "YulBlock", - "src": "25424:73:1", + "src": "25500:73:2", "statements": [ { "expression": { @@ -13333,39 +13333,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "25441:3:1" + "src": "25517:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "25446:6:1" + "src": "25522:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "25434:6:1" + "src": "25510:6:2" }, "nodeType": "YulFunctionCall", - "src": "25434:19:1" + "src": "25510:19:2" }, "nodeType": "YulExpressionStatement", - "src": "25434:19:1" + "src": "25510:19:2" }, { "nodeType": "YulAssignment", - "src": "25462:29:1", + "src": "25538:29:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "25481:3:1" + "src": "25557:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "25486:4:1", + "src": "25562:4:2", "type": "", "value": "0x20" } @@ -13373,34 +13373,34 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "25477:3:1" + "src": "25553:3:2" }, "nodeType": "YulFunctionCall", - "src": "25477:14:1" + "src": "25553:14:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "25462:11:1" + "src": "25538:11:2" } ] } ] }, - "name": "array_storeLengthForEncoding_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "array_storeLengthForEncoding_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "pos", "nodeType": "YulTypedName", - "src": "25396:3:1", + "src": "25472:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "25401:6:1", + "src": "25477:6:2", "type": "" } ], @@ -13408,47 +13408,47 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "25412:11:1", + "src": "25488:11:2", "type": "" } ], - "src": "25289:208:1" + "src": "25364:209:2" }, { "body": { "nodeType": "YulBlock", - "src": "25599:60:1", + "src": "25676:60:2", "statements": [ { "nodeType": "YulAssignment", - "src": "25609:11:1", + "src": "25686:11:2", "value": { "name": "ptr", "nodeType": "YulIdentifier", - "src": "25617:3:1" + "src": "25694:3:2" }, "variableNames": [ { "name": "data", "nodeType": "YulIdentifier", - "src": "25609:4:1" + "src": "25686:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "25630:22:1", + "src": "25707:22:2", "value": { "arguments": [ { "name": "ptr", "nodeType": "YulIdentifier", - "src": "25642:3:1" + "src": "25719:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "25647:4:1", + "src": "25724:4:2", "type": "", "value": "0x20" } @@ -13456,28 +13456,28 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "25638:3:1" + "src": "25715:3:2" }, "nodeType": "YulFunctionCall", - "src": "25638:14:1" + "src": "25715:14:2" }, "variableNames": [ { "name": "data", "nodeType": "YulIdentifier", - "src": "25630:4:1" + "src": "25707:4:2" } ] } ] }, - "name": "array_dataslot_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_dataslot_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "ptr", "nodeType": "YulTypedName", - "src": "25586:3:1", + "src": "25663:3:2", "type": "" } ], @@ -13485,16 +13485,16 @@ { "name": "data", "nodeType": "YulTypedName", - "src": "25594:4:1", + "src": "25671:4:2", "type": "" } ], - "src": "25503:156:1" + "src": "25579:157:2" }, { "body": { "nodeType": "YulBlock", - "src": "25720:53:1", + "src": "25797:53:2", "statements": [ { "expression": { @@ -13502,35 +13502,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "25737:3:1" + "src": "25814:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "25760:5:1" + "src": "25837:5:2" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "25742:17:1" + "src": "25819:17:2" }, "nodeType": "YulFunctionCall", - "src": "25742:24:1" + "src": "25819:24:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "25730:6:1" + "src": "25807:6:2" }, "nodeType": "YulFunctionCall", - "src": "25730:37:1" + "src": "25807:37:2" }, "nodeType": "YulExpressionStatement", - "src": "25730:37:1" + "src": "25807:37:2" } ] }, @@ -13540,22 +13540,22 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "25708:5:1", + "src": "25785:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "25715:3:1", + "src": "25792:3:2", "type": "" } ], - "src": "25665:108:1" + "src": "25742:108:2" }, { "body": { "nodeType": "YulBlock", - "src": "25834:53:1", + "src": "25911:53:2", "statements": [ { "expression": { @@ -13563,35 +13563,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "25851:3:1" + "src": "25928:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "25874:5:1" + "src": "25951:5:2" } ], "functionName": { "name": "cleanup_t_uint256", "nodeType": "YulIdentifier", - "src": "25856:17:1" + "src": "25933:17:2" }, "nodeType": "YulFunctionCall", - "src": "25856:24:1" + "src": "25933:24:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "25844:6:1" + "src": "25921:6:2" }, "nodeType": "YulFunctionCall", - "src": "25844:37:1" + "src": "25921:37:2" }, "nodeType": "YulExpressionStatement", - "src": "25844:37:1" + "src": "25921:37:2" } ] }, @@ -13601,37 +13601,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "25822:5:1", + "src": "25899:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "25829:3:1", + "src": "25906:3:2", "type": "" } ], - "src": "25779:108:1" + "src": "25856:108:2" }, { "body": { "nodeType": "YulBlock", - "src": "26055:405:1", + "src": "26134:405:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "26065:26:1", + "src": "26144:26:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "26081:3:1" + "src": "26160:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "26086:4:1", + "src": "26165:4:2", "type": "", "value": "0x40" } @@ -13639,27 +13639,27 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "26077:3:1" + "src": "26156:3:2" }, "nodeType": "YulFunctionCall", - "src": "26077:14:1" + "src": "26156:14:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "26069:4:1", + "src": "26148:4:2", "type": "" } ] }, { "nodeType": "YulBlock", - "src": "26101:176:1", + "src": "26180:176:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "26148:43:1", + "src": "26227:43:2", "value": { "arguments": [ { @@ -13667,12 +13667,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "26178:5:1" + "src": "26257:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "26185:4:1", + "src": "26264:4:2", "type": "", "value": "0x00" } @@ -13680,25 +13680,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "26174:3:1" + "src": "26253:3:2" }, "nodeType": "YulFunctionCall", - "src": "26174:16:1" + "src": "26253:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "26168:5:1" + "src": "26247:5:2" }, "nodeType": "YulFunctionCall", - "src": "26168:23:1" + "src": "26247:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "26152:12:1", + "src": "26231:12:2", "type": "" } ] @@ -13709,19 +13709,19 @@ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "26238:12:1" + "src": "26317:12:2" }, { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "26256:3:1" + "src": "26335:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "26261:4:1", + "src": "26340:4:2", "type": "", "value": "0x00" } @@ -13729,32 +13729,32 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "26252:3:1" + "src": "26331:3:2" }, "nodeType": "YulFunctionCall", - "src": "26252:14:1" + "src": "26331:14:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address", "nodeType": "YulIdentifier", - "src": "26204:33:1" + "src": "26283:33:2" }, "nodeType": "YulFunctionCall", - "src": "26204:63:1" + "src": "26283:63:2" }, "nodeType": "YulExpressionStatement", - "src": "26204:63:1" + "src": "26283:63:2" } ] }, { "nodeType": "YulBlock", - "src": "26287:166:1", + "src": "26366:166:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "26324:43:1", + "src": "26403:43:2", "value": { "arguments": [ { @@ -13762,12 +13762,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "26354:5:1" + "src": "26433:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "26361:4:1", + "src": "26440:4:2", "type": "", "value": "0x20" } @@ -13775,25 +13775,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "26350:3:1" + "src": "26429:3:2" }, "nodeType": "YulFunctionCall", - "src": "26350:16:1" + "src": "26429:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "26344:5:1" + "src": "26423:5:2" }, "nodeType": "YulFunctionCall", - "src": "26344:23:1" + "src": "26423:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "26328:12:1", + "src": "26407:12:2", "type": "" } ] @@ -13804,19 +13804,19 @@ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "26414:12:1" + "src": "26493:12:2" }, { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "26432:3:1" + "src": "26511:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "26437:4:1", + "src": "26516:4:2", "type": "", "value": "0x20" } @@ -13824,49 +13824,49 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "26428:3:1" + "src": "26507:3:2" }, "nodeType": "YulFunctionCall", - "src": "26428:14:1" + "src": "26507:14:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256", "nodeType": "YulIdentifier", - "src": "26380:33:1" + "src": "26459:33:2" }, "nodeType": "YulFunctionCall", - "src": "26380:63:1" + "src": "26459:63:2" }, "nodeType": "YulExpressionStatement", - "src": "26380:63:1" + "src": "26459:63:2" } ] } ] }, - "name": "abi_encode_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr", + "name": "abi_encode_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "26042:5:1", + "src": "26121:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "26049:3:1", + "src": "26128:3:2", "type": "" } ], - "src": "25951:509:1" + "src": "26028:511:2" }, { "body": { "nodeType": "YulBlock", - "src": "26594:147:1", + "src": "26675:149:2", "statements": [ { "expression": { @@ -13874,39 +13874,39 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "26686:6:1" + "src": "26769:6:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "26694:3:1" + "src": "26777:3:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr", + "name": "abi_encode_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr", "nodeType": "YulIdentifier", - "src": "26604:81:1" + "src": "26685:83:2" }, "nodeType": "YulFunctionCall", - "src": "26604:94:1" + "src": "26685:96:2" }, "nodeType": "YulExpressionStatement", - "src": "26604:94:1" + "src": "26685:96:2" }, { "nodeType": "YulAssignment", - "src": "26707:28:1", + "src": "26790:28:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "26725:3:1" + "src": "26808:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "26730:4:1", + "src": "26813:4:2", "type": "", "value": "0x40" } @@ -13914,34 +13914,34 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "26721:3:1" + "src": "26804:3:2" }, "nodeType": "YulFunctionCall", - "src": "26721:14:1" + "src": "26804:14:2" }, "variableNames": [ { "name": "updatedPos", "nodeType": "YulIdentifier", - "src": "26707:10:1" + "src": "26790:10:2" } ] } ] }, - "name": "abi_encodeUpdatedPos_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr", + "name": "abi_encodeUpdatedPos_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value0", "nodeType": "YulTypedName", - "src": "26567:6:1", + "src": "26648:6:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "26575:3:1", + "src": "26656:3:2", "type": "" } ], @@ -13949,31 +13949,31 @@ { "name": "updatedPos", "nodeType": "YulTypedName", - "src": "26583:10:1", + "src": "26664:10:2", "type": "" } ], - "src": "26466:275:1" + "src": "26545:279:2" }, { "body": { "nodeType": "YulBlock", - "src": "26846:38:1", + "src": "26930:38:2", "statements": [ { "nodeType": "YulAssignment", - "src": "26856:22:1", + "src": "26940:22:2", "value": { "arguments": [ { "name": "ptr", "nodeType": "YulIdentifier", - "src": "26868:3:1" + "src": "26952:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "26873:4:1", + "src": "26957:4:2", "type": "", "value": "0x20" } @@ -13981,28 +13981,28 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "26864:3:1" + "src": "26948:3:2" }, "nodeType": "YulFunctionCall", - "src": "26864:14:1" + "src": "26948:14:2" }, "variableNames": [ { "name": "next", "nodeType": "YulIdentifier", - "src": "26856:4:1" + "src": "26940:4:2" } ] } ] }, - "name": "array_nextElement_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_nextElement_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "ptr", "nodeType": "YulTypedName", - "src": "26833:3:1", + "src": "26917:3:2", "type": "" } ], @@ -14010,118 +14010,118 @@ { "name": "next", "nodeType": "YulTypedName", - "src": "26841:4:1", + "src": "26925:4:2", "type": "" } ], - "src": "26747:137:1" + "src": "26830:138:2" }, { "body": { "nodeType": "YulBlock", - "src": "27124:752:1", + "src": "27210:758:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "27134:92:1", + "src": "27220:93:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "27220:5:1" + "src": "27307:5:2" } ], "functionName": { - "name": "array_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "27148:71:1" + "src": "27234:72:2" }, "nodeType": "YulFunctionCall", - "src": "27148:78:1" + "src": "27234:79:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "27138:6:1", + "src": "27224:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "27235:117:1", + "src": "27322:118:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "27340:3:1" + "src": "27428:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "27345:6:1" + "src": "27433:6:2" } ], "functionName": { - "name": "array_storeLengthForEncoding_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "array_storeLengthForEncoding_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "27242:97:1" + "src": "27329:98:2" }, "nodeType": "YulFunctionCall", - "src": "27242:110:1" + "src": "27329:111:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "27235:3:1" + "src": "27322:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "27361:95:1", + "src": "27449:96:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "27450:5:1" + "src": "27539:5:2" } ], "functionName": { - "name": "array_dataslot_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_dataslot_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "27376:73:1" + "src": "27464:74:2" }, "nodeType": "YulFunctionCall", - "src": "27376:80:1" + "src": "27464:81:2" }, "variables": [ { "name": "baseRef", "nodeType": "YulTypedName", - "src": "27365:7:1", + "src": "27453:7:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "27465:21:1", + "src": "27554:21:2", "value": { "name": "baseRef", "nodeType": "YulIdentifier", - "src": "27479:7:1" + "src": "27568:7:2" }, "variables": [ { "name": "srcPtr", "nodeType": "YulTypedName", - "src": "27469:6:1", + "src": "27558:6:2", "type": "" } ] @@ -14129,92 +14129,92 @@ { "body": { "nodeType": "YulBlock", - "src": "27555:296:1", + "src": "27644:299:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "27569:34:1", + "src": "27658:34:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "27596:6:1" + "src": "27685:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "27590:5:1" + "src": "27679:5:2" }, "nodeType": "YulFunctionCall", - "src": "27590:13:1" + "src": "27679:13:2" }, "variables": [ { "name": "elementValue0", "nodeType": "YulTypedName", - "src": "27573:13:1", + "src": "27662:13:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "27616:118:1", + "src": "27705:120:2", "value": { "arguments": [ { "name": "elementValue0", "nodeType": "YulIdentifier", - "src": "27715:13:1" + "src": "27806:13:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "27730:3:1" + "src": "27821:3:2" } ], "functionName": { - "name": "abi_encodeUpdatedPos_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr", + "name": "abi_encodeUpdatedPos_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr", "nodeType": "YulIdentifier", - "src": "27623:91:1" + "src": "27712:93:2" }, "nodeType": "YulFunctionCall", - "src": "27623:111:1" + "src": "27712:113:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "27616:3:1" + "src": "27705:3:2" } ] }, { "nodeType": "YulAssignment", - "src": "27747:94:1", + "src": "27838:95:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "27834:6:1" + "src": "27926:6:2" } ], "functionName": { - "name": "array_nextElement_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr", + "name": "array_nextElement_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "27757:76:1" + "src": "27848:77:2" }, "nodeType": "YulFunctionCall", - "src": "27757:84:1" + "src": "27848:85:2" }, "variableNames": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "27747:6:1" + "src": "27838:6:2" } ] } @@ -14225,41 +14225,41 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "27517:1:1" + "src": "27606:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "27520:6:1" + "src": "27609:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "27514:2:1" + "src": "27603:2:2" }, "nodeType": "YulFunctionCall", - "src": "27514:13:1" + "src": "27603:13:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "27528:18:1", + "src": "27617:18:2", "statements": [ { "nodeType": "YulAssignment", - "src": "27530:14:1", + "src": "27619:14:2", "value": { "arguments": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "27539:1:1" + "src": "27628:1:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "27542:1:1", + "src": "27631:1:2", "type": "", "value": "1" } @@ -14267,16 +14267,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "27535:3:1" + "src": "27624:3:2" }, "nodeType": "YulFunctionCall", - "src": "27535:9:1" + "src": "27624:9:2" }, "variableNames": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "27530:1:1" + "src": "27619:1:2" } ] } @@ -14284,15 +14284,15 @@ }, "pre": { "nodeType": "YulBlock", - "src": "27499:14:1", + "src": "27588:14:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "27501:10:1", + "src": "27590:10:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "27510:1:1", + "src": "27599:1:2", "type": "", "value": "0" }, @@ -14300,46 +14300,46 @@ { "name": "i", "nodeType": "YulTypedName", - "src": "27505:1:1", + "src": "27594:1:2", "type": "" } ] } ] }, - "src": "27495:356:1" + "src": "27584:359:2" }, { "nodeType": "YulAssignment", - "src": "27860:10:1", + "src": "27952:10:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "27867:3:1" + "src": "27959:3:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "27860:3:1" + "src": "27952:3:2" } ] } ] }, - "name": "abi_encode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "abi_encode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "27103:5:1", + "src": "27189:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "27110:3:1", + "src": "27196:3:2", "type": "" } ], @@ -14347,16 +14347,16 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "27119:3:1", + "src": "27205:3:2", "type": "" } ], - "src": "26952:924:1" + "src": "27036:932:2" }, { "body": { "nodeType": "YulBlock", - "src": "27945:52:1", + "src": "28037:52:2", "statements": [ { "expression": { @@ -14364,35 +14364,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "27962:3:1" + "src": "28054:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "27984:5:1" + "src": "28076:5:2" } ], "functionName": { "name": "cleanup_t_uint32", "nodeType": "YulIdentifier", - "src": "27967:16:1" + "src": "28059:16:2" }, "nodeType": "YulFunctionCall", - "src": "27967:23:1" + "src": "28059:23:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "27955:6:1" + "src": "28047:6:2" }, "nodeType": "YulFunctionCall", - "src": "27955:36:1" + "src": "28047:36:2" }, "nodeType": "YulExpressionStatement", - "src": "27955:36:1" + "src": "28047:36:2" } ] }, @@ -14402,37 +14402,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "27933:5:1", + "src": "28025:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "27940:3:1", + "src": "28032:3:2", "type": "" } ], - "src": "27882:115:1" + "src": "27974:115:2" }, { "body": { "nodeType": "YulBlock", - "src": "28335:623:1", + "src": "28433:629:2", "statements": [ { "nodeType": "YulAssignment", - "src": "28345:27:1", + "src": "28443:27:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "28357:9:1" + "src": "28455:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "28368:3:1", + "src": "28466:3:2", "type": "", "value": "128" } @@ -14440,16 +14440,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "28353:3:1" + "src": "28451:3:2" }, "nodeType": "YulFunctionCall", - "src": "28353:19:1" + "src": "28451:19:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "28345:4:1" + "src": "28443:4:2" } ] }, @@ -14461,12 +14461,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "28393:9:1" + "src": "28491:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "28404:1:1", + "src": "28502:1:2", "type": "", "value": "0" } @@ -14474,73 +14474,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "28389:3:1" + "src": "28487:3:2" }, "nodeType": "YulFunctionCall", - "src": "28389:17:1" + "src": "28487:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "28412:4:1" + "src": "28510:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "28418:9:1" + "src": "28516:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "28408:3:1" + "src": "28506:3:2" }, "nodeType": "YulFunctionCall", - "src": "28408:20:1" + "src": "28506:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "28382:6:1" + "src": "28480:6:2" }, "nodeType": "YulFunctionCall", - "src": "28382:47:1" + "src": "28480:47:2" }, "nodeType": "YulExpressionStatement", - "src": "28382:47:1" + "src": "28480:47:2" }, { "nodeType": "YulAssignment", - "src": "28438:164:1", + "src": "28536:166:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "28588:6:1" + "src": "28688:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "28597:4:1" + "src": "28697:4:2" } ], "functionName": { - "name": "abi_encode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "abi_encode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "28446:141:1" + "src": "28544:143:2" }, "nodeType": "YulFunctionCall", - "src": "28446:156:1" + "src": "28544:158:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "28438:4:1" + "src": "28536:4:2" } ] }, @@ -14550,19 +14550,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "28654:6:1" + "src": "28754:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "28667:9:1" + "src": "28767:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "28678:2:1", + "src": "28778:2:2", "type": "", "value": "32" } @@ -14570,22 +14570,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "28663:3:1" + "src": "28763:3:2" }, "nodeType": "YulFunctionCall", - "src": "28663:18:1" + "src": "28763:18:2" } ], "functionName": { "name": "abi_encode_t_uint32_to_t_uint32_fromStack", "nodeType": "YulIdentifier", - "src": "28612:41:1" + "src": "28712:41:2" }, "nodeType": "YulFunctionCall", - "src": "28612:70:1" + "src": "28712:70:2" }, "nodeType": "YulExpressionStatement", - "src": "28612:70:1" + "src": "28712:70:2" }, { "expression": { @@ -14595,12 +14595,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "28703:9:1" + "src": "28803:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "28714:2:1", + "src": "28814:2:2", "type": "", "value": "64" } @@ -14608,73 +14608,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "28699:3:1" + "src": "28799:3:2" }, "nodeType": "YulFunctionCall", - "src": "28699:18:1" + "src": "28799:18:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "28723:4:1" + "src": "28823:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "28729:9:1" + "src": "28829:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "28719:3:1" + "src": "28819:3:2" }, "nodeType": "YulFunctionCall", - "src": "28719:20:1" + "src": "28819:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "28692:6:1" + "src": "28792:6:2" }, "nodeType": "YulFunctionCall", - "src": "28692:48:1" + "src": "28792:48:2" }, "nodeType": "YulExpressionStatement", - "src": "28692:48:1" + "src": "28792:48:2" }, { "nodeType": "YulAssignment", - "src": "28749:122:1", + "src": "28849:126:2", "value": { "arguments": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "28857:6:1" + "src": "28961:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "28866:4:1" + "src": "28970:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "28757:99:1" + "src": "28857:103:2" }, "nodeType": "YulFunctionCall", - "src": "28757:114:1" + "src": "28857:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "28749:4:1" + "src": "28849:4:2" } ] }, @@ -14684,19 +14684,19 @@ { "name": "value3", "nodeType": "YulIdentifier", - "src": "28923:6:1" + "src": "29027:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "28936:9:1" + "src": "29040:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "28947:2:1", + "src": "29051:2:2", "type": "", "value": "96" } @@ -14704,56 +14704,56 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "28932:3:1" + "src": "29036:3:2" }, "nodeType": "YulFunctionCall", - "src": "28932:18:1" + "src": "29036:18:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "28881:41:1" + "src": "28985:41:2" }, "nodeType": "YulFunctionCall", - "src": "28881:70:1" + "src": "28985:70:2" }, "nodeType": "YulExpressionStatement", - "src": "28881:70:1" + "src": "28985:70:2" } ] }, - "name": "abi_encode_tuple_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed", + "name": "abi_encode_tuple_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "28283:9:1", + "src": "28381:9:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "28295:6:1", + "src": "28393:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "28303:6:1", + "src": "28401:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "28311:6:1", + "src": "28409:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "28319:6:1", + "src": "28417:6:2", "type": "" } ], @@ -14761,16 +14761,16 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "28330:4:1", + "src": "28428:4:2", "type": "" } ], - "src": "28003:955:1" + "src": "28095:967:2" }, { "body": { "nodeType": "YulBlock", - "src": "29029:53:1", + "src": "29133:53:2", "statements": [ { "expression": { @@ -14778,35 +14778,35 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "29046:3:1" + "src": "29150:3:2" }, { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "29069:5:1" + "src": "29173:5:2" } ], "functionName": { "name": "cleanup_t_address", "nodeType": "YulIdentifier", - "src": "29051:17:1" + "src": "29155:17:2" }, "nodeType": "YulFunctionCall", - "src": "29051:24:1" + "src": "29155:24:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "29039:6:1" + "src": "29143:6:2" }, "nodeType": "YulFunctionCall", - "src": "29039:37:1" + "src": "29143:37:2" }, "nodeType": "YulExpressionStatement", - "src": "29039:37:1" + "src": "29143:37:2" } ] }, @@ -14816,37 +14816,37 @@ { "name": "value", "nodeType": "YulTypedName", - "src": "29017:5:1", + "src": "29121:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "29024:3:1", + "src": "29128:3:2", "type": "" } ], - "src": "28964:118:1" + "src": "29068:118:2" }, { "body": { "nodeType": "YulBlock", - "src": "29352:559:1", + "src": "29460:563:2", "statements": [ { "nodeType": "YulAssignment", - "src": "29362:27:1", + "src": "29470:27:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "29374:9:1" + "src": "29482:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "29385:3:1", + "src": "29493:3:2", "type": "", "value": "160" } @@ -14854,16 +14854,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "29370:3:1" + "src": "29478:3:2" }, "nodeType": "YulFunctionCall", - "src": "29370:19:1" + "src": "29478:19:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "29362:4:1" + "src": "29470:4:2" } ] }, @@ -14873,19 +14873,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "29443:6:1" + "src": "29551:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "29456:9:1" + "src": "29564:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "29467:1:1", + "src": "29575:1:2", "type": "", "value": "0" } @@ -14893,22 +14893,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "29452:3:1" + "src": "29560:3:2" }, "nodeType": "YulFunctionCall", - "src": "29452:17:1" + "src": "29560:17:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "29399:43:1" + "src": "29507:43:2" }, "nodeType": "YulFunctionCall", - "src": "29399:71:1" + "src": "29507:71:2" }, "nodeType": "YulExpressionStatement", - "src": "29399:71:1" + "src": "29507:71:2" }, { "expression": { @@ -14916,19 +14916,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "29524:6:1" + "src": "29632:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "29537:9:1" + "src": "29645:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "29548:2:1", + "src": "29656:2:2", "type": "", "value": "32" } @@ -14936,22 +14936,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "29533:3:1" + "src": "29641:3:2" }, "nodeType": "YulFunctionCall", - "src": "29533:18:1" + "src": "29641:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "29480:43:1" + "src": "29588:43:2" }, "nodeType": "YulFunctionCall", - "src": "29480:72:1" + "src": "29588:72:2" }, "nodeType": "YulExpressionStatement", - "src": "29480:72:1" + "src": "29588:72:2" }, { "expression": { @@ -14959,19 +14959,19 @@ { "name": "value2", "nodeType": "YulIdentifier", - "src": "29606:6:1" + "src": "29714:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "29619:9:1" + "src": "29727:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "29630:2:1", + "src": "29738:2:2", "type": "", "value": "64" } @@ -14979,22 +14979,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "29615:3:1" + "src": "29723:3:2" }, "nodeType": "YulFunctionCall", - "src": "29615:18:1" + "src": "29723:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "29562:43:1" + "src": "29670:43:2" }, "nodeType": "YulFunctionCall", - "src": "29562:72:1" + "src": "29670:72:2" }, "nodeType": "YulExpressionStatement", - "src": "29562:72:1" + "src": "29670:72:2" }, { "expression": { @@ -15004,12 +15004,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "29655:9:1" + "src": "29763:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "29666:2:1", + "src": "29774:2:2", "type": "", "value": "96" } @@ -15017,73 +15017,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "29651:3:1" + "src": "29759:3:2" }, "nodeType": "YulFunctionCall", - "src": "29651:18:1" + "src": "29759:18:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "29675:4:1" + "src": "29783:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "29681:9:1" + "src": "29789:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "29671:3:1" + "src": "29779:3:2" }, "nodeType": "YulFunctionCall", - "src": "29671:20:1" + "src": "29779:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "29644:6:1" + "src": "29752:6:2" }, "nodeType": "YulFunctionCall", - "src": "29644:48:1" + "src": "29752:48:2" }, "nodeType": "YulExpressionStatement", - "src": "29644:48:1" + "src": "29752:48:2" }, { "nodeType": "YulAssignment", - "src": "29701:122:1", + "src": "29809:126:2", "value": { "arguments": [ { "name": "value3", "nodeType": "YulIdentifier", - "src": "29809:6:1" + "src": "29921:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "29818:4:1" + "src": "29930:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "29709:99:1" + "src": "29817:103:2" }, "nodeType": "YulFunctionCall", - "src": "29709:114:1" + "src": "29817:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "29701:4:1" + "src": "29809:4:2" } ] }, @@ -15093,19 +15093,19 @@ { "name": "value4", "nodeType": "YulIdentifier", - "src": "29875:6:1" + "src": "29987:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "29888:9:1" + "src": "30000:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "29899:3:1", + "src": "30011:3:2", "type": "", "value": "128" } @@ -15113,62 +15113,62 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "29884:3:1" + "src": "29996:3:2" }, "nodeType": "YulFunctionCall", - "src": "29884:19:1" + "src": "29996:19:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "29833:41:1" + "src": "29945:41:2" }, "nodeType": "YulFunctionCall", - "src": "29833:71:1" + "src": "29945:71:2" }, "nodeType": "YulExpressionStatement", - "src": "29833:71:1" + "src": "29945:71:2" } ] }, - "name": "abi_encode_tuple_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed", + "name": "abi_encode_tuple_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "29292:9:1", + "src": "29400:9:2", "type": "" }, { "name": "value4", "nodeType": "YulTypedName", - "src": "29304:6:1", + "src": "29412:6:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "29312:6:1", + "src": "29420:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "29320:6:1", + "src": "29428:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "29328:6:1", + "src": "29436:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "29336:6:1", + "src": "29444:6:2", "type": "" } ], @@ -15176,31 +15176,31 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "29347:4:1", + "src": "29455:4:2", "type": "" } ], - "src": "29088:823:1" + "src": "29192:831:2" }, { "body": { "nodeType": "YulBlock", - "src": "30209:583:1", + "src": "30329:591:2", "statements": [ { "nodeType": "YulAssignment", - "src": "30219:27:1", + "src": "30339:27:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30231:9:1" + "src": "30351:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30242:3:1", + "src": "30362:3:2", "type": "", "value": "128" } @@ -15208,16 +15208,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30227:3:1" + "src": "30347:3:2" }, "nodeType": "YulFunctionCall", - "src": "30227:19:1" + "src": "30347:19:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "30219:4:1" + "src": "30339:4:2" } ] }, @@ -15229,12 +15229,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30267:9:1" + "src": "30387:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30278:1:1", + "src": "30398:1:2", "type": "", "value": "0" } @@ -15242,73 +15242,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30263:3:1" + "src": "30383:3:2" }, "nodeType": "YulFunctionCall", - "src": "30263:17:1" + "src": "30383:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "30286:4:1" + "src": "30406:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30292:9:1" + "src": "30412:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "30282:3:1" + "src": "30402:3:2" }, "nodeType": "YulFunctionCall", - "src": "30282:20:1" + "src": "30402:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "30256:6:1" + "src": "30376:6:2" }, "nodeType": "YulFunctionCall", - "src": "30256:47:1" + "src": "30376:47:2" }, "nodeType": "YulExpressionStatement", - "src": "30256:47:1" + "src": "30376:47:2" }, { "nodeType": "YulAssignment", - "src": "30312:122:1", + "src": "30432:126:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "30420:6:1" + "src": "30544:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "30429:4:1" + "src": "30553:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "30320:99:1" + "src": "30440:103:2" }, "nodeType": "YulFunctionCall", - "src": "30320:114:1" + "src": "30440:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "30312:4:1" + "src": "30432:4:2" } ] }, @@ -15318,19 +15318,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "30488:6:1" + "src": "30612:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30501:9:1" + "src": "30625:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30512:2:1", + "src": "30636:2:2", "type": "", "value": "32" } @@ -15338,22 +15338,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30497:3:1" + "src": "30621:3:2" }, "nodeType": "YulFunctionCall", - "src": "30497:18:1" + "src": "30621:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "30444:43:1" + "src": "30568:43:2" }, "nodeType": "YulFunctionCall", - "src": "30444:72:1" + "src": "30568:72:2" }, "nodeType": "YulExpressionStatement", - "src": "30444:72:1" + "src": "30568:72:2" }, { "expression": { @@ -15363,12 +15363,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30537:9:1" + "src": "30661:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30548:2:1", + "src": "30672:2:2", "type": "", "value": "64" } @@ -15376,73 +15376,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30533:3:1" + "src": "30657:3:2" }, "nodeType": "YulFunctionCall", - "src": "30533:18:1" + "src": "30657:18:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "30557:4:1" + "src": "30681:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30563:9:1" + "src": "30687:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "30553:3:1" + "src": "30677:3:2" }, "nodeType": "YulFunctionCall", - "src": "30553:20:1" + "src": "30677:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "30526:6:1" + "src": "30650:6:2" }, "nodeType": "YulFunctionCall", - "src": "30526:48:1" + "src": "30650:48:2" }, "nodeType": "YulExpressionStatement", - "src": "30526:48:1" + "src": "30650:48:2" }, { "nodeType": "YulAssignment", - "src": "30583:122:1", + "src": "30707:126:2", "value": { "arguments": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "30691:6:1" + "src": "30819:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "30700:4:1" + "src": "30828:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "30591:99:1" + "src": "30715:103:2" }, "nodeType": "YulFunctionCall", - "src": "30591:114:1" + "src": "30715:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "30583:4:1" + "src": "30707:4:2" } ] }, @@ -15452,19 +15452,19 @@ { "name": "value3", "nodeType": "YulIdentifier", - "src": "30757:6:1" + "src": "30885:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "30770:9:1" + "src": "30898:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "30781:2:1", + "src": "30909:2:2", "type": "", "value": "96" } @@ -15472,56 +15472,56 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "30766:3:1" + "src": "30894:3:2" }, "nodeType": "YulFunctionCall", - "src": "30766:18:1" + "src": "30894:18:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "30715:41:1" + "src": "30843:41:2" }, "nodeType": "YulFunctionCall", - "src": "30715:70:1" + "src": "30843:70:2" }, "nodeType": "YulExpressionStatement", - "src": "30715:70:1" + "src": "30843:70:2" } ] }, - "name": "abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed", + "name": "abi_encode_tuple_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "30157:9:1", + "src": "30277:9:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "30169:6:1", + "src": "30289:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "30177:6:1", + "src": "30297:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "30185:6:1", + "src": "30305:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "30193:6:1", + "src": "30313:6:2", "type": "" } ], @@ -15529,31 +15529,31 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "30204:4:1", + "src": "30324:4:2", "type": "" } ], - "src": "29917:875:1" + "src": "30029:891:2" }, { "body": { "nodeType": "YulBlock", - "src": "31034:476:1", + "src": "31166:480:2", "statements": [ { "nodeType": "YulAssignment", - "src": "31044:27:1", + "src": "31176:27:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31056:9:1" + "src": "31188:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "31067:3:1", + "src": "31199:3:2", "type": "", "value": "128" } @@ -15561,16 +15561,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "31052:3:1" + "src": "31184:3:2" }, "nodeType": "YulFunctionCall", - "src": "31052:19:1" + "src": "31184:19:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "31044:4:1" + "src": "31176:4:2" } ] }, @@ -15580,19 +15580,19 @@ { "name": "value0", "nodeType": "YulIdentifier", - "src": "31125:6:1" + "src": "31257:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31138:9:1" + "src": "31270:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "31149:1:1", + "src": "31281:1:2", "type": "", "value": "0" } @@ -15600,22 +15600,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "31134:3:1" + "src": "31266:3:2" }, "nodeType": "YulFunctionCall", - "src": "31134:17:1" + "src": "31266:17:2" } ], "functionName": { "name": "abi_encode_t_address_to_t_address_fromStack", "nodeType": "YulIdentifier", - "src": "31081:43:1" + "src": "31213:43:2" }, "nodeType": "YulFunctionCall", - "src": "31081:71:1" + "src": "31213:71:2" }, "nodeType": "YulExpressionStatement", - "src": "31081:71:1" + "src": "31213:71:2" }, { "expression": { @@ -15623,19 +15623,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "31206:6:1" + "src": "31338:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31219:9:1" + "src": "31351:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "31230:2:1", + "src": "31362:2:2", "type": "", "value": "32" } @@ -15643,22 +15643,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "31215:3:1" + "src": "31347:3:2" }, "nodeType": "YulFunctionCall", - "src": "31215:18:1" + "src": "31347:18:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256_fromStack", "nodeType": "YulIdentifier", - "src": "31162:43:1" + "src": "31294:43:2" }, "nodeType": "YulFunctionCall", - "src": "31162:72:1" + "src": "31294:72:2" }, "nodeType": "YulExpressionStatement", - "src": "31162:72:1" + "src": "31294:72:2" }, { "expression": { @@ -15668,12 +15668,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31255:9:1" + "src": "31387:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "31266:2:1", + "src": "31398:2:2", "type": "", "value": "64" } @@ -15681,73 +15681,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "31251:3:1" + "src": "31383:3:2" }, "nodeType": "YulFunctionCall", - "src": "31251:18:1" + "src": "31383:18:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "31275:4:1" + "src": "31407:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31281:9:1" + "src": "31413:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "31271:3:1" + "src": "31403:3:2" }, "nodeType": "YulFunctionCall", - "src": "31271:20:1" + "src": "31403:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "31244:6:1" + "src": "31376:6:2" }, "nodeType": "YulFunctionCall", - "src": "31244:48:1" + "src": "31376:48:2" }, "nodeType": "YulExpressionStatement", - "src": "31244:48:1" + "src": "31376:48:2" }, { "nodeType": "YulAssignment", - "src": "31301:122:1", + "src": "31433:126:2", "value": { "arguments": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "31409:6:1" + "src": "31545:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "31418:4:1" + "src": "31554:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "31309:99:1" + "src": "31441:103:2" }, "nodeType": "YulFunctionCall", - "src": "31309:114:1" + "src": "31441:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "31301:4:1" + "src": "31433:4:2" } ] }, @@ -15757,19 +15757,19 @@ { "name": "value3", "nodeType": "YulIdentifier", - "src": "31475:6:1" + "src": "31611:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "31488:9:1" + "src": "31624:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "31499:2:1", + "src": "31635:2:2", "type": "", "value": "96" } @@ -15777,56 +15777,56 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "31484:3:1" + "src": "31620:3:2" }, "nodeType": "YulFunctionCall", - "src": "31484:18:1" + "src": "31620:18:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "31433:41:1" + "src": "31569:41:2" }, "nodeType": "YulFunctionCall", - "src": "31433:70:1" + "src": "31569:70:2" }, "nodeType": "YulExpressionStatement", - "src": "31433:70:1" + "src": "31569:70:2" } ] }, - "name": "abi_encode_tuple_t_address_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_address_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed", + "name": "abi_encode_tuple_t_address_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_address_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "30982:9:1", + "src": "31114:9:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "30994:6:1", + "src": "31126:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "31002:6:1", + "src": "31134:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "31010:6:1", + "src": "31142:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "31018:6:1", + "src": "31150:6:2", "type": "" } ], @@ -15834,53 +15834,53 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "31029:4:1", + "src": "31161:4:2", "type": "" } ], - "src": "30798:712:1" + "src": "30926:720:2" }, { "body": { "nodeType": "YulBlock", - "src": "31616:40:1", + "src": "31753:40:2", "statements": [ { "nodeType": "YulAssignment", - "src": "31627:22:1", + "src": "31764:22:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "31643:5:1" + "src": "31780:5:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "31637:5:1" + "src": "31774:5:2" }, "nodeType": "YulFunctionCall", - "src": "31637:12:1" + "src": "31774:12:2" }, "variableNames": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "31627:6:1" + "src": "31764:6:2" } ] } ] }, - "name": "array_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "31599:5:1", + "src": "31736:5:2", "type": "" } ], @@ -15888,16 +15888,16 @@ { "name": "length", "nodeType": "YulTypedName", - "src": "31609:6:1", + "src": "31746:6:2", "type": "" } ], - "src": "31516:140:1" + "src": "31652:141:2" }, { "body": { "nodeType": "YulBlock", - "src": "31799:73:1", + "src": "31937:73:2", "statements": [ { "expression": { @@ -15905,39 +15905,39 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "31816:3:1" + "src": "31954:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "31821:6:1" + "src": "31959:6:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "31809:6:1" + "src": "31947:6:2" }, "nodeType": "YulFunctionCall", - "src": "31809:19:1" + "src": "31947:19:2" }, "nodeType": "YulExpressionStatement", - "src": "31809:19:1" + "src": "31947:19:2" }, { "nodeType": "YulAssignment", - "src": "31837:29:1", + "src": "31975:29:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "31856:3:1" + "src": "31994:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "31861:4:1", + "src": "31999:4:2", "type": "", "value": "0x20" } @@ -15945,34 +15945,34 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "31852:3:1" + "src": "31990:3:2" }, "nodeType": "YulFunctionCall", - "src": "31852:14:1" + "src": "31990:14:2" }, "variableNames": [ { "name": "updated_pos", "nodeType": "YulIdentifier", - "src": "31837:11:1" + "src": "31975:11:2" } ] } ] }, - "name": "array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "pos", "nodeType": "YulTypedName", - "src": "31771:3:1", + "src": "31909:3:2", "type": "" }, { "name": "length", "nodeType": "YulTypedName", - "src": "31776:6:1", + "src": "31914:6:2", "type": "" } ], @@ -15980,47 +15980,47 @@ { "name": "updated_pos", "nodeType": "YulTypedName", - "src": "31787:11:1", + "src": "31925:11:2", "type": "" } ], - "src": "31662:210:1" + "src": "31799:211:2" }, { "body": { "nodeType": "YulBlock", - "src": "31976:60:1", + "src": "32115:60:2", "statements": [ { "nodeType": "YulAssignment", - "src": "31986:11:1", + "src": "32125:11:2", "value": { "name": "ptr", "nodeType": "YulIdentifier", - "src": "31994:3:1" + "src": "32133:3:2" }, "variableNames": [ { "name": "data", "nodeType": "YulIdentifier", - "src": "31986:4:1" + "src": "32125:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "32007:22:1", + "src": "32146:22:2", "value": { "arguments": [ { "name": "ptr", "nodeType": "YulIdentifier", - "src": "32019:3:1" + "src": "32158:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "32024:4:1", + "src": "32163:4:2", "type": "", "value": "0x20" } @@ -16028,28 +16028,28 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "32015:3:1" + "src": "32154:3:2" }, "nodeType": "YulFunctionCall", - "src": "32015:14:1" + "src": "32154:14:2" }, "variableNames": [ { "name": "data", "nodeType": "YulIdentifier", - "src": "32007:4:1" + "src": "32146:4:2" } ] } ] }, - "name": "array_dataslot_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_dataslot_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "ptr", "nodeType": "YulTypedName", - "src": "31963:3:1", + "src": "32102:3:2", "type": "" } ], @@ -16057,31 +16057,31 @@ { "name": "data", "nodeType": "YulTypedName", - "src": "31971:4:1", + "src": "32110:4:2", "type": "" } ], - "src": "31878:158:1" + "src": "32016:159:2" }, { "body": { "nodeType": "YulBlock", - "src": "32230:533:1", + "src": "32373:533:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "32240:26:1", + "src": "32383:26:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "32256:3:1" + "src": "32399:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "32261:4:1", + "src": "32404:4:2", "type": "", "value": "0x40" } @@ -16089,27 +16089,27 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "32252:3:1" + "src": "32395:3:2" }, "nodeType": "YulFunctionCall", - "src": "32252:14:1" + "src": "32395:14:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "32244:4:1", + "src": "32387:4:2", "type": "" } ] }, { "nodeType": "YulBlock", - "src": "32276:163:1", + "src": "32419:163:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "32314:43:1", + "src": "32457:43:2", "value": { "arguments": [ { @@ -16117,12 +16117,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "32344:5:1" + "src": "32487:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "32351:4:1", + "src": "32494:4:2", "type": "", "value": "0x00" } @@ -16130,25 +16130,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "32340:3:1" + "src": "32483:3:2" }, "nodeType": "YulFunctionCall", - "src": "32340:16:1" + "src": "32483:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "32334:5:1" + "src": "32477:5:2" }, "nodeType": "YulFunctionCall", - "src": "32334:23:1" + "src": "32477:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "32318:12:1", + "src": "32461:12:2", "type": "" } ] @@ -16159,19 +16159,19 @@ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "32400:12:1" + "src": "32543:12:2" }, { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "32418:3:1" + "src": "32561:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "32423:4:1", + "src": "32566:4:2", "type": "", "value": "0x00" } @@ -16179,32 +16179,32 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "32414:3:1" + "src": "32557:3:2" }, "nodeType": "YulFunctionCall", - "src": "32414:14:1" + "src": "32557:14:2" } ], "functionName": { "name": "abi_encode_t_uint8_to_t_uint8", "nodeType": "YulIdentifier", - "src": "32370:29:1" + "src": "32513:29:2" }, "nodeType": "YulFunctionCall", - "src": "32370:59:1" + "src": "32513:59:2" }, "nodeType": "YulExpressionStatement", - "src": "32370:59:1" + "src": "32513:59:2" } ] }, { "nodeType": "YulBlock", - "src": "32449:287:1", + "src": "32592:287:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "32488:43:1", + "src": "32631:43:2", "value": { "arguments": [ { @@ -16212,12 +16212,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "32518:5:1" + "src": "32661:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "32525:4:1", + "src": "32668:4:2", "type": "", "value": "0x20" } @@ -16225,25 +16225,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "32514:3:1" + "src": "32657:3:2" }, "nodeType": "YulFunctionCall", - "src": "32514:16:1" + "src": "32657:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "32508:5:1" + "src": "32651:5:2" }, "nodeType": "YulFunctionCall", - "src": "32508:23:1" + "src": "32651:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "32492:12:1", + "src": "32635:12:2", "type": "" } ] @@ -16256,12 +16256,12 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "32556:3:1" + "src": "32699:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "32561:4:1", + "src": "32704:4:2", "type": "", "value": "0x20" } @@ -16269,73 +16269,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "32552:3:1" + "src": "32695:3:2" }, "nodeType": "YulFunctionCall", - "src": "32552:14:1" + "src": "32695:14:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "32572:4:1" + "src": "32715:4:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "32578:3:1" + "src": "32721:3:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "32568:3:1" + "src": "32711:3:2" }, "nodeType": "YulFunctionCall", - "src": "32568:14:1" + "src": "32711:14:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "32545:6:1" + "src": "32688:6:2" }, "nodeType": "YulFunctionCall", - "src": "32545:38:1" + "src": "32688:38:2" }, "nodeType": "YulExpressionStatement", - "src": "32545:38:1" + "src": "32688:38:2" }, { "nodeType": "YulAssignment", - "src": "32596:129:1", + "src": "32739:129:2", "value": { "arguments": [ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "32706:12:1" + "src": "32849:12:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "32720:4:1" + "src": "32863:4:2" } ], "functionName": { "name": "abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "32604:101:1" + "src": "32747:101:2" }, "nodeType": "YulFunctionCall", - "src": "32604:121:1" + "src": "32747:121:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "32596:4:1" + "src": "32739:4:2" } ] } @@ -16343,35 +16343,35 @@ }, { "nodeType": "YulAssignment", - "src": "32746:11:1", + "src": "32889:11:2", "value": { "name": "tail", "nodeType": "YulIdentifier", - "src": "32753:4:1" + "src": "32896:4:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "32746:3:1" + "src": "32889:3:2" } ] } ] }, - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "32209:5:1", + "src": "32352:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "32216:3:1", + "src": "32359:3:2", "type": "" } ], @@ -16379,31 +16379,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "32225:3:1", + "src": "32368:3:2", "type": "" } ], - "src": "32110:653:1" + "src": "32249:657:2" }, { "body": { "nodeType": "YulBlock", - "src": "32947:524:1", + "src": "33092:528:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "32957:26:1", + "src": "33102:26:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "32973:3:1" + "src": "33118:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "32978:4:1", + "src": "33123:4:2", "type": "", "value": "0x40" } @@ -16411,27 +16411,27 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "32969:3:1" + "src": "33114:3:2" }, "nodeType": "YulFunctionCall", - "src": "32969:14:1" + "src": "33114:14:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "32961:4:1", + "src": "33106:4:2", "type": "" } ] }, { "nodeType": "YulBlock", - "src": "32993:275:1", + "src": "33138:279:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "33032:43:1", + "src": "33177:43:2", "value": { "arguments": [ { @@ -16439,12 +16439,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "33062:5:1" + "src": "33207:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "33069:4:1", + "src": "33214:4:2", "type": "", "value": "0x00" } @@ -16452,25 +16452,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "33058:3:1" + "src": "33203:3:2" }, "nodeType": "YulFunctionCall", - "src": "33058:16:1" + "src": "33203:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "33052:5:1" + "src": "33197:5:2" }, "nodeType": "YulFunctionCall", - "src": "33052:23:1" + "src": "33197:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "33036:12:1", + "src": "33181:12:2", "type": "" } ] @@ -16483,12 +16483,12 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "33100:3:1" + "src": "33245:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "33105:4:1", + "src": "33250:4:2", "type": "", "value": "0x00" } @@ -16496,73 +16496,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "33096:3:1" + "src": "33241:3:2" }, "nodeType": "YulFunctionCall", - "src": "33096:14:1" + "src": "33241:14:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "33116:4:1" + "src": "33261:4:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "33122:3:1" + "src": "33267:3:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "33112:3:1" + "src": "33257:3:2" }, "nodeType": "YulFunctionCall", - "src": "33112:14:1" + "src": "33257:14:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "33089:6:1" + "src": "33234:6:2" }, "nodeType": "YulFunctionCall", - "src": "33089:38:1" + "src": "33234:38:2" }, "nodeType": "YulExpressionStatement", - "src": "33089:38:1" + "src": "33234:38:2" }, { "nodeType": "YulAssignment", - "src": "33140:117:1", + "src": "33285:121:2", "value": { "arguments": [ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "33238:12:1" + "src": "33387:12:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "33252:4:1" + "src": "33401:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr", "nodeType": "YulIdentifier", - "src": "33148:89:1" + "src": "33293:93:2" }, "nodeType": "YulFunctionCall", - "src": "33148:109:1" + "src": "33293:113:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "33140:4:1" + "src": "33285:4:2" } ] } @@ -16570,11 +16570,11 @@ }, { "nodeType": "YulBlock", - "src": "33278:166:1", + "src": "33427:166:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "33315:43:1", + "src": "33464:43:2", "value": { "arguments": [ { @@ -16582,12 +16582,12 @@ { "name": "value", "nodeType": "YulIdentifier", - "src": "33345:5:1" + "src": "33494:5:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "33352:4:1", + "src": "33501:4:2", "type": "", "value": "0x20" } @@ -16595,25 +16595,25 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "33341:3:1" + "src": "33490:3:2" }, "nodeType": "YulFunctionCall", - "src": "33341:16:1" + "src": "33490:16:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "33335:5:1" + "src": "33484:5:2" }, "nodeType": "YulFunctionCall", - "src": "33335:23:1" + "src": "33484:23:2" }, "variables": [ { "name": "memberValue0", "nodeType": "YulTypedName", - "src": "33319:12:1", + "src": "33468:12:2", "type": "" } ] @@ -16624,19 +16624,19 @@ { "name": "memberValue0", "nodeType": "YulIdentifier", - "src": "33405:12:1" + "src": "33554:12:2" }, { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "33423:3:1" + "src": "33572:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "33428:4:1", + "src": "33577:4:2", "type": "", "value": "0x20" } @@ -16644,56 +16644,56 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "33419:3:1" + "src": "33568:3:2" }, "nodeType": "YulFunctionCall", - "src": "33419:14:1" + "src": "33568:14:2" } ], "functionName": { "name": "abi_encode_t_uint256_to_t_uint256", "nodeType": "YulIdentifier", - "src": "33371:33:1" + "src": "33520:33:2" }, "nodeType": "YulFunctionCall", - "src": "33371:63:1" + "src": "33520:63:2" }, "nodeType": "YulExpressionStatement", - "src": "33371:63:1" + "src": "33520:63:2" } ] }, { "nodeType": "YulAssignment", - "src": "33454:11:1", + "src": "33603:11:2", "value": { "name": "tail", "nodeType": "YulIdentifier", - "src": "33461:4:1" + "src": "33610:4:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "33454:3:1" + "src": "33603:3:2" } ] } ] }, - "name": "abi_encode_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr", + "name": "abi_encode_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "32926:5:1", + "src": "33071:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "32933:3:1", + "src": "33078:3:2", "type": "" } ], @@ -16701,64 +16701,64 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "32942:3:1", + "src": "33087:3:2", "type": "" } ], - "src": "32831:640:1" + "src": "32974:646:2" }, { "body": { "nodeType": "YulBlock", - "src": "33609:128:1", + "src": "33760:130:2", "statements": [ { "nodeType": "YulAssignment", - "src": "33619:112:1", + "src": "33770:114:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "33719:6:1" + "src": "33872:6:2" }, { "name": "pos", "nodeType": "YulIdentifier", - "src": "33727:3:1" + "src": "33880:3:2" } ], "functionName": { - "name": "abi_encode_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr", + "name": "abi_encode_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr", "nodeType": "YulIdentifier", - "src": "33633:85:1" + "src": "33784:87:2" }, "nodeType": "YulFunctionCall", - "src": "33633:98:1" + "src": "33784:100:2" }, "variableNames": [ { "name": "updatedPos", "nodeType": "YulIdentifier", - "src": "33619:10:1" + "src": "33770:10:2" } ] } ] }, - "name": "abi_encodeUpdatedPos_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr", + "name": "abi_encodeUpdatedPos_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value0", "nodeType": "YulTypedName", - "src": "33582:6:1", + "src": "33733:6:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "33590:3:1", + "src": "33741:3:2", "type": "" } ], @@ -16766,31 +16766,31 @@ { "name": "updatedPos", "nodeType": "YulTypedName", - "src": "33598:10:1", + "src": "33749:10:2", "type": "" } ], - "src": "33477:260:1" + "src": "33626:264:2" }, { "body": { "nodeType": "YulBlock", - "src": "33844:38:1", + "src": "33998:38:2", "statements": [ { "nodeType": "YulAssignment", - "src": "33854:22:1", + "src": "34008:22:2", "value": { "arguments": [ { "name": "ptr", "nodeType": "YulIdentifier", - "src": "33866:3:1" + "src": "34020:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "33871:4:1", + "src": "34025:4:2", "type": "", "value": "0x20" } @@ -16798,28 +16798,28 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "33862:3:1" + "src": "34016:3:2" }, "nodeType": "YulFunctionCall", - "src": "33862:14:1" + "src": "34016:14:2" }, "variableNames": [ { "name": "next", "nodeType": "YulIdentifier", - "src": "33854:4:1" + "src": "34008:4:2" } ] } ] }, - "name": "array_nextElement_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_nextElement_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "ptr", "nodeType": "YulTypedName", - "src": "33831:3:1", + "src": "33985:3:2", "type": "" } ], @@ -16827,115 +16827,115 @@ { "name": "next", "nodeType": "YulTypedName", - "src": "33839:4:1", + "src": "33993:4:2", "type": "" } ], - "src": "33743:139:1" + "src": "33896:140:2" }, { "body": { "nodeType": "YulBlock", - "src": "34130:943:1", + "src": "34286:949:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "34140:94:1", + "src": "34296:95:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "34228:5:1" + "src": "34385:5:2" } ], "functionName": { - "name": "array_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "34154:73:1" + "src": "34310:74:2" }, "nodeType": "YulFunctionCall", - "src": "34154:80:1" + "src": "34310:81:2" }, "variables": [ { "name": "length", "nodeType": "YulTypedName", - "src": "34144:6:1", + "src": "34300:6:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "34243:119:1", + "src": "34400:120:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "34350:3:1" + "src": "34508:3:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "34355:6:1" + "src": "34513:6:2" } ], "functionName": { - "name": "array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "34250:99:1" + "src": "34407:100:2" }, "nodeType": "YulFunctionCall", - "src": "34250:112:1" + "src": "34407:113:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "34243:3:1" + "src": "34400:3:2" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "34371:20:1", + "src": "34529:20:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "34388:3:1" + "src": "34546:3:2" }, "variables": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "34375:9:1", + "src": "34533:9:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "34400:39:1", + "src": "34558:39:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "34416:3:1" + "src": "34574:3:2" }, { "arguments": [ { "name": "length", "nodeType": "YulIdentifier", - "src": "34425:6:1" + "src": "34583:6:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "34433:4:1", + "src": "34591:4:2", "type": "", "value": "0x20" } @@ -16943,70 +16943,70 @@ "functionName": { "name": "mul", "nodeType": "YulIdentifier", - "src": "34421:3:1" + "src": "34579:3:2" }, "nodeType": "YulFunctionCall", - "src": "34421:17:1" + "src": "34579:17:2" } ], "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "34412:3:1" + "src": "34570:3:2" }, "nodeType": "YulFunctionCall", - "src": "34412:27:1" + "src": "34570:27:2" }, "variables": [ { "name": "tail", "nodeType": "YulTypedName", - "src": "34404:4:1", + "src": "34562:4:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "34448:97:1", + "src": "34606:98:2", "value": { "arguments": [ { "name": "value", "nodeType": "YulIdentifier", - "src": "34539:5:1" + "src": "34698:5:2" } ], "functionName": { - "name": "array_dataslot_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_dataslot_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "34463:75:1" + "src": "34621:76:2" }, "nodeType": "YulFunctionCall", - "src": "34463:82:1" + "src": "34621:83:2" }, "variables": [ { "name": "baseRef", "nodeType": "YulTypedName", - "src": "34452:7:1", + "src": "34610:7:2", "type": "" } ] }, { "nodeType": "YulVariableDeclaration", - "src": "34554:21:1", + "src": "34713:21:2", "value": { "name": "baseRef", "nodeType": "YulIdentifier", - "src": "34568:7:1" + "src": "34727:7:2" }, "variables": [ { "name": "srcPtr", "nodeType": "YulTypedName", - "src": "34558:6:1", + "src": "34717:6:2", "type": "" } ] @@ -17014,7 +17014,7 @@ { "body": { "nodeType": "YulBlock", - "src": "34644:384:1", + "src": "34803:387:2", "statements": [ { "expression": { @@ -17022,142 +17022,142 @@ { "name": "pos", "nodeType": "YulIdentifier", - "src": "34665:3:1" + "src": "34824:3:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "34674:4:1" + "src": "34833:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "34680:9:1" + "src": "34839:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "34670:3:1" + "src": "34829:3:2" }, "nodeType": "YulFunctionCall", - "src": "34670:20:1" + "src": "34829:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "34658:6:1" + "src": "34817:6:2" }, "nodeType": "YulFunctionCall", - "src": "34658:33:1" + "src": "34817:33:2" }, "nodeType": "YulExpressionStatement", - "src": "34658:33:1" + "src": "34817:33:2" }, { "nodeType": "YulVariableDeclaration", - "src": "34704:34:1", + "src": "34863:34:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "34731:6:1" + "src": "34890:6:2" } ], "functionName": { "name": "mload", "nodeType": "YulIdentifier", - "src": "34725:5:1" + "src": "34884:5:2" }, "nodeType": "YulFunctionCall", - "src": "34725:13:1" + "src": "34884:13:2" }, "variables": [ { "name": "elementValue0", "nodeType": "YulTypedName", - "src": "34708:13:1", + "src": "34867:13:2", "type": "" } ] }, { "nodeType": "YulAssignment", - "src": "34751:124:1", + "src": "34910:126:2", "value": { "arguments": [ { "name": "elementValue0", "nodeType": "YulIdentifier", - "src": "34855:13:1" + "src": "35016:13:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "34870:4:1" + "src": "35031:4:2" } ], "functionName": { - "name": "abi_encodeUpdatedPos_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr", + "name": "abi_encodeUpdatedPos_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr", "nodeType": "YulIdentifier", - "src": "34759:95:1" + "src": "34918:97:2" }, "nodeType": "YulFunctionCall", - "src": "34759:116:1" + "src": "34918:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "34751:4:1" + "src": "34910:4:2" } ] }, { "nodeType": "YulAssignment", - "src": "34888:96:1", + "src": "35049:97:2", "value": { "arguments": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "34977:6:1" + "src": "35139:6:2" } ], "functionName": { - "name": "array_nextElement_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr", + "name": "array_nextElement_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr", "nodeType": "YulIdentifier", - "src": "34898:78:1" + "src": "35059:79:2" }, "nodeType": "YulFunctionCall", - "src": "34898:86:1" + "src": "35059:87:2" }, "variableNames": [ { "name": "srcPtr", "nodeType": "YulIdentifier", - "src": "34888:6:1" + "src": "35049:6:2" } ] }, { "nodeType": "YulAssignment", - "src": "34997:21:1", + "src": "35159:21:2", "value": { "arguments": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "35008:3:1" + "src": "35170:3:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "35013:4:1", + "src": "35175:4:2", "type": "", "value": "0x20" } @@ -17165,16 +17165,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "35004:3:1" + "src": "35166:3:2" }, "nodeType": "YulFunctionCall", - "src": "35004:14:1" + "src": "35166:14:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "34997:3:1" + "src": "35159:3:2" } ] } @@ -17185,41 +17185,41 @@ { "name": "i", "nodeType": "YulIdentifier", - "src": "34606:1:1" + "src": "34765:1:2" }, { "name": "length", "nodeType": "YulIdentifier", - "src": "34609:6:1" + "src": "34768:6:2" } ], "functionName": { "name": "lt", "nodeType": "YulIdentifier", - "src": "34603:2:1" + "src": "34762:2:2" }, "nodeType": "YulFunctionCall", - "src": "34603:13:1" + "src": "34762:13:2" }, "nodeType": "YulForLoop", "post": { "nodeType": "YulBlock", - "src": "34617:18:1", + "src": "34776:18:2", "statements": [ { "nodeType": "YulAssignment", - "src": "34619:14:1", + "src": "34778:14:2", "value": { "arguments": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "34628:1:1" + "src": "34787:1:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "34631:1:1", + "src": "34790:1:2", "type": "", "value": "1" } @@ -17227,16 +17227,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "34624:3:1" + "src": "34783:3:2" }, "nodeType": "YulFunctionCall", - "src": "34624:9:1" + "src": "34783:9:2" }, "variableNames": [ { "name": "i", "nodeType": "YulIdentifier", - "src": "34619:1:1" + "src": "34778:1:2" } ] } @@ -17244,15 +17244,15 @@ }, "pre": { "nodeType": "YulBlock", - "src": "34588:14:1", + "src": "34747:14:2", "statements": [ { "nodeType": "YulVariableDeclaration", - "src": "34590:10:1", + "src": "34749:10:2", "value": { "kind": "number", "nodeType": "YulLiteral", - "src": "34599:1:1", + "src": "34758:1:2", "type": "", "value": "0" }, @@ -17260,62 +17260,62 @@ { "name": "i", "nodeType": "YulTypedName", - "src": "34594:1:1", + "src": "34753:1:2", "type": "" } ] } ] }, - "src": "34584:444:1" + "src": "34743:447:2" }, { "nodeType": "YulAssignment", - "src": "35037:11:1", + "src": "35199:11:2", "value": { "name": "tail", "nodeType": "YulIdentifier", - "src": "35044:4:1" + "src": "35206:4:2" }, "variableNames": [ { "name": "pos", "nodeType": "YulIdentifier", - "src": "35037:3:1" + "src": "35199:3:2" } ] }, { "nodeType": "YulAssignment", - "src": "35057:10:1", + "src": "35219:10:2", "value": { "name": "pos", "nodeType": "YulIdentifier", - "src": "35064:3:1" + "src": "35226:3:2" }, "variableNames": [ { "name": "end", "nodeType": "YulIdentifier", - "src": "35057:3:1" + "src": "35219:3:2" } ] } ] }, - "name": "abi_encode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "abi_encode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "value", "nodeType": "YulTypedName", - "src": "34109:5:1", + "src": "34265:5:2", "type": "" }, { "name": "pos", "nodeType": "YulTypedName", - "src": "34116:3:1", + "src": "34272:3:2", "type": "" } ], @@ -17323,31 +17323,31 @@ { "name": "end", "nodeType": "YulTypedName", - "src": "34125:3:1", + "src": "34281:3:2", "type": "" } ], - "src": "33954:1119:1" + "src": "34108:1127:2" }, { "body": { "nodeType": "YulBlock", - "src": "35415:627:1", + "src": "35583:633:2", "statements": [ { "nodeType": "YulAssignment", - "src": "35425:27:1", + "src": "35593:27:2", "value": { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "35437:9:1" + "src": "35605:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "35448:3:1", + "src": "35616:3:2", "type": "", "value": "128" } @@ -17355,16 +17355,16 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "35433:3:1" + "src": "35601:3:2" }, "nodeType": "YulFunctionCall", - "src": "35433:19:1" + "src": "35601:19:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "35425:4:1" + "src": "35593:4:2" } ] }, @@ -17376,12 +17376,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "35473:9:1" + "src": "35641:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "35484:1:1", + "src": "35652:1:2", "type": "", "value": "0" } @@ -17389,73 +17389,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "35469:3:1" + "src": "35637:3:2" }, "nodeType": "YulFunctionCall", - "src": "35469:17:1" + "src": "35637:17:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "35492:4:1" + "src": "35660:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "35498:9:1" + "src": "35666:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "35488:3:1" + "src": "35656:3:2" }, "nodeType": "YulFunctionCall", - "src": "35488:20:1" + "src": "35656:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "35462:6:1" + "src": "35630:6:2" }, "nodeType": "YulFunctionCall", - "src": "35462:47:1" + "src": "35630:47:2" }, "nodeType": "YulExpressionStatement", - "src": "35462:47:1" + "src": "35630:47:2" }, { "nodeType": "YulAssignment", - "src": "35518:168:1", + "src": "35686:170:2", "value": { "arguments": [ { "name": "value0", "nodeType": "YulIdentifier", - "src": "35672:6:1" + "src": "35842:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "35681:4:1" + "src": "35851:4:2" } ], "functionName": { - "name": "abi_encode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack", + "name": "abi_encode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "35526:145:1" + "src": "35694:147:2" }, "nodeType": "YulFunctionCall", - "src": "35526:160:1" + "src": "35694:162:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "35518:4:1" + "src": "35686:4:2" } ] }, @@ -17465,19 +17465,19 @@ { "name": "value1", "nodeType": "YulIdentifier", - "src": "35738:6:1" + "src": "35908:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "35751:9:1" + "src": "35921:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "35762:2:1", + "src": "35932:2:2", "type": "", "value": "32" } @@ -17485,22 +17485,22 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "35747:3:1" + "src": "35917:3:2" }, "nodeType": "YulFunctionCall", - "src": "35747:18:1" + "src": "35917:18:2" } ], "functionName": { "name": "abi_encode_t_uint32_to_t_uint32_fromStack", "nodeType": "YulIdentifier", - "src": "35696:41:1" + "src": "35866:41:2" }, "nodeType": "YulFunctionCall", - "src": "35696:70:1" + "src": "35866:70:2" }, "nodeType": "YulExpressionStatement", - "src": "35696:70:1" + "src": "35866:70:2" }, { "expression": { @@ -17510,12 +17510,12 @@ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "35787:9:1" + "src": "35957:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "35798:2:1", + "src": "35968:2:2", "type": "", "value": "64" } @@ -17523,73 +17523,73 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "35783:3:1" + "src": "35953:3:2" }, "nodeType": "YulFunctionCall", - "src": "35783:18:1" + "src": "35953:18:2" }, { "arguments": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "35807:4:1" + "src": "35977:4:2" }, { "name": "headStart", "nodeType": "YulIdentifier", - "src": "35813:9:1" + "src": "35983:9:2" } ], "functionName": { "name": "sub", "nodeType": "YulIdentifier", - "src": "35803:3:1" + "src": "35973:3:2" }, "nodeType": "YulFunctionCall", - "src": "35803:20:1" + "src": "35973:20:2" } ], "functionName": { "name": "mstore", "nodeType": "YulIdentifier", - "src": "35776:6:1" + "src": "35946:6:2" }, "nodeType": "YulFunctionCall", - "src": "35776:48:1" + "src": "35946:48:2" }, "nodeType": "YulExpressionStatement", - "src": "35776:48:1" + "src": "35946:48:2" }, { "nodeType": "YulAssignment", - "src": "35833:122:1", + "src": "36003:126:2", "value": { "arguments": [ { "name": "value2", "nodeType": "YulIdentifier", - "src": "35941:6:1" + "src": "36115:6:2" }, { "name": "tail", "nodeType": "YulIdentifier", - "src": "35950:4:1" + "src": "36124:4:2" } ], "functionName": { - "name": "abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack", + "name": "abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack", "nodeType": "YulIdentifier", - "src": "35841:99:1" + "src": "36011:103:2" }, "nodeType": "YulFunctionCall", - "src": "35841:114:1" + "src": "36011:118:2" }, "variableNames": [ { "name": "tail", "nodeType": "YulIdentifier", - "src": "35833:4:1" + "src": "36003:4:2" } ] }, @@ -17599,19 +17599,19 @@ { "name": "value3", "nodeType": "YulIdentifier", - "src": "36007:6:1" + "src": "36181:6:2" }, { "arguments": [ { "name": "headStart", "nodeType": "YulIdentifier", - "src": "36020:9:1" + "src": "36194:9:2" }, { "kind": "number", "nodeType": "YulLiteral", - "src": "36031:2:1", + "src": "36205:2:2", "type": "", "value": "96" } @@ -17619,56 +17619,56 @@ "functionName": { "name": "add", "nodeType": "YulIdentifier", - "src": "36016:3:1" + "src": "36190:3:2" }, "nodeType": "YulFunctionCall", - "src": "36016:18:1" + "src": "36190:18:2" } ], "functionName": { "name": "abi_encode_t_uint64_to_t_uint64_fromStack", "nodeType": "YulIdentifier", - "src": "35965:41:1" + "src": "36139:41:2" }, "nodeType": "YulFunctionCall", - "src": "35965:70:1" + "src": "36139:70:2" }, "nodeType": "YulExpressionStatement", - "src": "35965:70:1" + "src": "36139:70:2" } ] }, - "name": "abi_encode_tuple_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed", + "name": "abi_encode_tuple_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed", "nodeType": "YulFunctionDefinition", "parameters": [ { "name": "headStart", "nodeType": "YulTypedName", - "src": "35363:9:1", + "src": "35531:9:2", "type": "" }, { "name": "value3", "nodeType": "YulTypedName", - "src": "35375:6:1", + "src": "35543:6:2", "type": "" }, { "name": "value2", "nodeType": "YulTypedName", - "src": "35383:6:1", + "src": "35551:6:2", "type": "" }, { "name": "value1", "nodeType": "YulTypedName", - "src": "35391:6:1", + "src": "35559:6:2", "type": "" }, { "name": "value0", "nodeType": "YulTypedName", - "src": "35399:6:1", + "src": "35567:6:2", "type": "" } ], @@ -17676,25 +17676,25 @@ { "name": "tail", "nodeType": "YulTypedName", - "src": "35410:4:1", + "src": "35578:4:2", "type": "" } ], - "src": "35079:963:1" + "src": "35241:975:2" } ] }, - "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() {\n revert(0, 0)\n }\n\n function cleanup_t_uint8(value) -> cleaned {\n cleaned := and(value, 0xff)\n }\n\n function validator_revert_t_uint8(value) {\n if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint8(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint8(value)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // bytes[]\n function abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let innerOffset := calldataload(src)\n if gt(innerOffset, 0xffffffffffffffff) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let elementPos := add(offset, innerOffset)\n\n mstore(dst, abi_decode_t_bytes_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes[]\n function abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // struct Xtokens.Multilocation\n function abi_decode_t_struct$_Multilocation_$8_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // parents\n\n let offset := 0\n\n mstore(add(value, 0x00), abi_decode_t_uint8(add(headStart, offset), end))\n\n }\n\n {\n // interior\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() }\n\n mstore(add(value, 0x20), abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(headStart, offset), end))\n\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function validator_revert_t_uint64(value) {\n if iszero(eq(value, cleanup_t_uint64(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint64(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint64(value)\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptrt_uint256t_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 128\n\n value4 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_allocation_size_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n // struct Xtokens.Currency\n function abi_decode_t_struct$_Currency_$19_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // currency_address\n\n let offset := 0\n\n mstore(add(value, 0x00), abi_decode_t_address(add(headStart, offset), end))\n\n }\n\n {\n // amount\n\n let offset := 32\n\n mstore(add(value, 0x20), abi_decode_t_uint256(add(headStart, offset), end))\n\n }\n\n }\n\n // struct Xtokens.Currency[]\n function abi_decode_available_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x40))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x40) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_struct$_Currency_$19_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // struct Xtokens.Currency[]\n function abi_decode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function cleanup_t_uint32(value) -> cleaned {\n cleaned := and(value, 0xffffffff)\n }\n\n function validator_revert_t_uint32(value) {\n if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint32(value)\n }\n\n function abi_decode_tuple_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$8_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_uint256t_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 128\n\n value4 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_Xtokens_$108_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_Xtokens_$108_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_Xtokens_$108_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_Xtokens_$108__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_Xtokens_$108_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$8_memory_ptrt_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_uint256t_struct$_Multilocation_$8_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_allocation_size_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n // struct Xtokens.MultiAsset\n function abi_decode_t_struct$_MultiAsset_$14_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // location\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() }\n\n mstore(add(value, 0x00), abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), end))\n\n }\n\n {\n // amount\n\n let offset := 32\n\n mstore(add(value, 0x20), abi_decode_t_uint256(add(headStart, offset), end))\n\n }\n\n }\n\n // struct Xtokens.MultiAsset[]\n function abi_decode_available_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let innerOffset := calldataload(src)\n if gt(innerOffset, 0xffffffffffffffff) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let elementPos := add(offset, innerOffset)\n\n mstore(dst, abi_decode_t_struct$_MultiAsset_$14_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // struct Xtokens.MultiAsset[]\n function abi_decode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$8_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$8_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint8_to_t_uint8(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos) -> updatedPos {\n updatedPos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos)\n }\n\n function array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // bytes[] -> bytes[]\n function abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value, pos) -> end {\n let length := array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length)\n let headStart := pos\n let tail := add(pos, mul(length, 0x20))\n let baseRef := array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, headStart))\n let elementValue0 := mload(srcPtr)\n tail := abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(elementValue0, tail)\n srcPtr := array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(srcPtr)\n pos := add(pos, 0x20)\n }\n pos := tail\n end := pos\n }\n\n // struct Xtokens.Multilocation -> struct Xtokens.Multilocation\n function abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // parents\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_uint8_to_t_uint8(memberValue0, add(pos, 0x00))\n }\n\n {\n // interior\n\n let memberValue0 := mload(add(value, 0x20))\n\n mstore(add(pos, 0x20), sub(tail, pos))\n tail := abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(memberValue0, tail)\n\n }\n\n end := tail\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint64(value))\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value3, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value4, add(headStart, 128))\n\n }\n\n function array_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n function abi_encode_t_address_to_t_address(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_t_uint256_to_t_uint256(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n // struct Xtokens.Currency -> struct Xtokens.Currency\n function abi_encode_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr(value, pos) {\n let tail := add(pos, 0x40)\n\n {\n // currency_address\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_address_to_t_address(memberValue0, add(pos, 0x00))\n }\n\n {\n // amount\n\n let memberValue0 := mload(add(value, 0x20))\n abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x20))\n }\n\n }\n\n function abi_encodeUpdatedPos_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr(value0, pos) -> updatedPos {\n abi_encode_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr(value0, pos)\n updatedPos := add(pos, 0x40)\n }\n\n function array_nextElement_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // struct Xtokens.Currency[] -> struct Xtokens.Currency[]\n function abi_encode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack(pos, length)\n let baseRef := array_dataslot_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n let elementValue0 := mload(srcPtr)\n pos := abi_encodeUpdatedPos_t_struct$_Currency_$19_memory_ptr_to_t_struct$_Currency_$19_memory_ptr(elementValue0, pos)\n srcPtr := array_nextElement_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr(srcPtr)\n }\n end := pos\n }\n\n function abi_encode_t_uint32_to_t_uint32_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint32(value))\n }\n\n function abi_encode_tuple_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$19_memory_ptr_$dyn_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint32_to_t_uint32_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value3, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value4, add(headStart, 128))\n\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_struct$_Multilocation_$8_memory_ptr_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_address_t_uint256_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n function array_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n // struct Xtokens.Multilocation -> struct Xtokens.Multilocation\n function abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // parents\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_uint8_to_t_uint8(memberValue0, add(pos, 0x00))\n }\n\n {\n // interior\n\n let memberValue0 := mload(add(value, 0x20))\n\n mstore(add(pos, 0x20), sub(tail, pos))\n tail := abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(memberValue0, tail)\n\n }\n\n end := tail\n }\n\n // struct Xtokens.MultiAsset -> struct Xtokens.MultiAsset\n function abi_encode_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // location\n\n let memberValue0 := mload(add(value, 0x00))\n\n mstore(add(pos, 0x00), sub(tail, pos))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr(memberValue0, tail)\n\n }\n\n {\n // amount\n\n let memberValue0 := mload(add(value, 0x20))\n abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x20))\n }\n\n end := tail\n }\n\n function abi_encodeUpdatedPos_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr(value0, pos) -> updatedPos {\n updatedPos := abi_encode_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr(value0, pos)\n }\n\n function array_nextElement_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // struct Xtokens.MultiAsset[] -> struct Xtokens.MultiAsset[]\n function abi_encode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack(pos, length)\n let headStart := pos\n let tail := add(pos, mul(length, 0x20))\n let baseRef := array_dataslot_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, headStart))\n let elementValue0 := mload(srcPtr)\n tail := abi_encodeUpdatedPos_t_struct$_MultiAsset_$14_memory_ptr_to_t_struct$_MultiAsset_$14_memory_ptr(elementValue0, tail)\n srcPtr := array_nextElement_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr(srcPtr)\n pos := add(pos, 0x20)\n }\n pos := tail\n end := pos\n }\n\n function abi_encode_tuple_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$8_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$14_memory_ptr_$dyn_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint32_to_t_uint32_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$8_memory_ptr_to_t_struct$_Multilocation_$8_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n}\n", - "id": 1, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() {\n revert(0, 0)\n }\n\n function round_up_to_mul_of_32(value) -> result {\n result := and(add(value, 31), not(31))\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function finalize_allocation(memPtr, size) {\n let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n // protect against overflow\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n\n function allocate_memory(size) -> memPtr {\n memPtr := allocate_unbounded()\n finalize_allocation(memPtr, size)\n }\n\n function revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() {\n revert(0, 0)\n }\n\n function cleanup_t_uint8(value) -> cleaned {\n cleaned := and(value, 0xff)\n }\n\n function validator_revert_t_uint8(value) {\n if iszero(eq(value, cleanup_t_uint8(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint8(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint8(value)\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n function revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() {\n revert(0, 0)\n }\n\n function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := round_up_to_mul_of_32(length)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n // clear end\n mstore(add(dst, length), 0)\n }\n\n function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n mstore(array, length)\n let dst := add(array, 0x20)\n if gt(add(src, length), end) { revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae() }\n copy_calldata_to_memory(src, dst, length)\n }\n\n // bytes\n function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // bytes[]\n function abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let innerOffset := calldataload(src)\n if gt(innerOffset, 0xffffffffffffffff) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let elementPos := add(offset, innerOffset)\n\n mstore(dst, abi_decode_t_bytes_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // bytes[]\n function abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n // struct Xtokens.Multilocation\n function abi_decode_t_struct$_Multilocation_$171_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // parents\n\n let offset := 0\n\n mstore(add(value, 0x00), abi_decode_t_uint8(add(headStart, offset), end))\n\n }\n\n {\n // interior\n\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() }\n\n mstore(add(value, 0x20), abi_decode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(add(headStart, offset), end))\n\n }\n\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function cleanup_t_uint64(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffff)\n }\n\n function validator_revert_t_uint64(value) {\n if iszero(eq(value, cleanup_t_uint64(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint64(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint64(value)\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$171_memory_ptrt_uint256t_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 128\n\n value4 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_allocation_size_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n // struct Xtokens.Currency\n function abi_decode_t_struct$_Currency_$182_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // currency_address\n\n let offset := 0\n\n mstore(add(value, 0x00), abi_decode_t_address(add(headStart, offset), end))\n\n }\n\n {\n // amount\n\n let offset := 32\n\n mstore(add(value, 0x20), abi_decode_t_uint256(add(headStart, offset), end))\n\n }\n\n }\n\n // struct Xtokens.Currency[]\n function abi_decode_available_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x40))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x40) }\n {\n\n let elementPos := src\n\n mstore(dst, abi_decode_t_struct$_Currency_$182_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // struct Xtokens.Currency[]\n function abi_decode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function cleanup_t_uint32(value) -> cleaned {\n cleaned := and(value, 0xffffffff)\n }\n\n function validator_revert_t_uint32(value) {\n if iszero(eq(value, cleanup_t_uint32(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint32(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint32(value)\n }\n\n function abi_decode_tuple_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$171_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_uint256t_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3, value4 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 128\n\n value4 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function identity(value) -> ret {\n ret := value\n }\n\n function convert_t_uint160_to_t_uint160(value) -> converted {\n converted := cleanup_t_uint160(identity(cleanup_t_uint160(value)))\n }\n\n function convert_t_uint160_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_uint160(value)\n }\n\n function convert_t_contract$_Xtokens_$271_to_t_address(value) -> converted {\n converted := convert_t_uint160_to_t_address(value)\n }\n\n function abi_encode_t_contract$_Xtokens_$271_to_t_address_fromStack(value, pos) {\n mstore(pos, convert_t_contract$_Xtokens_$271_to_t_address(value))\n }\n\n function abi_encode_tuple_t_contract$_Xtokens_$271__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_contract$_Xtokens_$271_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function abi_decode_tuple_t_struct$_Multilocation_$171_memory_ptrt_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_addresst_uint256t_struct$_Multilocation_$171_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_allocation_size_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(length) -> size {\n // Make sure we can allocate memory without overflow\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n size := mul(length, 0x20)\n\n // add length slot\n size := add(size, 0x20)\n\n }\n\n // struct Xtokens.MultiAsset\n function abi_decode_t_struct$_MultiAsset_$177_memory_ptr(headStart, end) -> value {\n if slt(sub(end, headStart), 0x40) { revert_error_3538a459e4a0eb828f1aed5ebe5dc96fe59620a31d9b33e41259bb820cae769f() }\n value := allocate_memory(0x40)\n\n {\n // location\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_5e8f644817bc4960744f35c15999b6eff64ae702f94b1c46297cfd4e1aec2421() }\n\n mstore(add(value, 0x00), abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), end))\n\n }\n\n {\n // amount\n\n let offset := 32\n\n mstore(add(value, 0x20), abi_decode_t_uint256(add(headStart, offset), end))\n\n }\n\n }\n\n // struct Xtokens.MultiAsset[]\n function abi_decode_available_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(offset, length, end) -> array {\n array := allocate_memory(array_allocation_size_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(length))\n let dst := array\n\n mstore(array, length)\n dst := add(array, 0x20)\n\n let srcEnd := add(offset, mul(length, 0x20))\n if gt(srcEnd, end) {\n revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef()\n }\n for { let src := offset } lt(src, srcEnd) { src := add(src, 0x20) }\n {\n\n let innerOffset := calldataload(src)\n if gt(innerOffset, 0xffffffffffffffff) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let elementPos := add(offset, innerOffset)\n\n mstore(dst, abi_decode_t_struct$_MultiAsset_$177_memory_ptr(elementPos, end))\n dst := add(dst, 0x20)\n }\n }\n\n // struct Xtokens.MultiAsset[]\n function abi_decode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(offset, end) -> array {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n let length := calldataload(offset)\n array := abi_decode_available_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(add(offset, 0x20), length, end)\n }\n\n function abi_decode_tuple_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptrt_uint32t_struct$_Multilocation_$171_memory_ptrt_uint64(headStart, dataEnd) -> value0, value1, value2, value3 {\n if slt(sub(dataEnd, headStart), 128) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := calldataload(add(headStart, 0))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value0 := abi_decode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_uint32(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value2 := abi_decode_t_struct$_Multilocation_$171_memory_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 96\n\n value3 := abi_decode_t_uint64(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_encode_t_uint8_to_t_uint8(value, pos) {\n mstore(pos, cleanup_t_uint8(value))\n }\n\n function array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n function array_length_t_bytes_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function copy_memory_to_memory(src, dst, length) {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length)\n {\n // clear end\n mstore(add(dst, length), 0)\n }\n }\n\n function abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value, pos) -> end {\n let length := array_length_t_bytes_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_bytes_memory_ptr(pos, length)\n copy_memory_to_memory(add(value, 0x20), pos, length)\n end := add(pos, round_up_to_mul_of_32(length))\n }\n\n function abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos) -> updatedPos {\n updatedPos := abi_encode_t_bytes_memory_ptr_to_t_bytes_memory_ptr(value0, pos)\n }\n\n function array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // bytes[] -> bytes[]\n function abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value, pos) -> end {\n let length := array_length_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(pos, length)\n let headStart := pos\n let tail := add(pos, mul(length, 0x20))\n let baseRef := array_dataslot_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, headStart))\n let elementValue0 := mload(srcPtr)\n tail := abi_encodeUpdatedPos_t_bytes_memory_ptr_to_t_bytes_memory_ptr(elementValue0, tail)\n srcPtr := array_nextElement_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(srcPtr)\n pos := add(pos, 0x20)\n }\n pos := tail\n end := pos\n }\n\n // struct Xtokens.Multilocation -> struct Xtokens.Multilocation\n function abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // parents\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_uint8_to_t_uint8(memberValue0, add(pos, 0x00))\n }\n\n {\n // interior\n\n let memberValue0 := mload(add(value, 0x20))\n\n mstore(add(pos, 0x20), sub(tail, pos))\n tail := abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(memberValue0, tail)\n\n }\n\n end := tail\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_t_uint64_to_t_uint64_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint64(value))\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value3, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value4, add(headStart, 128))\n\n }\n\n function array_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n function abi_encode_t_address_to_t_address(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_t_uint256_to_t_uint256(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n // struct Xtokens.Currency -> struct Xtokens.Currency\n function abi_encode_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr(value, pos) {\n let tail := add(pos, 0x40)\n\n {\n // currency_address\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_address_to_t_address(memberValue0, add(pos, 0x00))\n }\n\n {\n // amount\n\n let memberValue0 := mload(add(value, 0x20))\n abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x20))\n }\n\n }\n\n function abi_encodeUpdatedPos_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr(value0, pos) -> updatedPos {\n abi_encode_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr(value0, pos)\n updatedPos := add(pos, 0x40)\n }\n\n function array_nextElement_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // struct Xtokens.Currency[] -> struct Xtokens.Currency[]\n function abi_encode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack(pos, length)\n let baseRef := array_dataslot_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n let elementValue0 := mload(srcPtr)\n pos := abi_encodeUpdatedPos_t_struct$_Currency_$182_memory_ptr_to_t_struct$_Currency_$182_memory_ptr(elementValue0, pos)\n srcPtr := array_nextElement_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr(srcPtr)\n }\n end := pos\n }\n\n function abi_encode_t_uint32_to_t_uint32_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint32(value))\n }\n\n function abi_encode_tuple_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_Currency_$182_memory_ptr_$dyn_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint32_to_t_uint32_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_address_t_uint256_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed(headStart , value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value3, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value4, add(headStart, 128))\n\n }\n\n function abi_encode_tuple_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_struct$_Multilocation_$171_memory_ptr_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n function abi_encode_tuple_t_address_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_address_t_uint256_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n function array_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n // struct Xtokens.Multilocation -> struct Xtokens.Multilocation\n function abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // parents\n\n let memberValue0 := mload(add(value, 0x00))\n abi_encode_t_uint8_to_t_uint8(memberValue0, add(pos, 0x00))\n }\n\n {\n // interior\n\n let memberValue0 := mload(add(value, 0x20))\n\n mstore(add(pos, 0x20), sub(tail, pos))\n tail := abi_encode_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_to_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr(memberValue0, tail)\n\n }\n\n end := tail\n }\n\n // struct Xtokens.MultiAsset -> struct Xtokens.MultiAsset\n function abi_encode_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr(value, pos) -> end {\n let tail := add(pos, 0x40)\n\n {\n // location\n\n let memberValue0 := mload(add(value, 0x00))\n\n mstore(add(pos, 0x00), sub(tail, pos))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr(memberValue0, tail)\n\n }\n\n {\n // amount\n\n let memberValue0 := mload(add(value, 0x20))\n abi_encode_t_uint256_to_t_uint256(memberValue0, add(pos, 0x20))\n }\n\n end := tail\n }\n\n function abi_encodeUpdatedPos_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr(value0, pos) -> updatedPos {\n updatedPos := abi_encode_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr(value0, pos)\n }\n\n function array_nextElement_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // struct Xtokens.MultiAsset[] -> struct Xtokens.MultiAsset[]\n function abi_encode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack(pos, length)\n let headStart := pos\n let tail := add(pos, mul(length, 0x20))\n let baseRef := array_dataslot_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, headStart))\n let elementValue0 := mload(srcPtr)\n tail := abi_encodeUpdatedPos_t_struct$_MultiAsset_$177_memory_ptr_to_t_struct$_MultiAsset_$177_memory_ptr(elementValue0, tail)\n srcPtr := array_nextElement_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr(srcPtr)\n pos := add(pos, 0x20)\n }\n pos := tail\n end := pos\n }\n\n function abi_encode_tuple_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_t_uint32_t_struct$_Multilocation_$171_memory_ptr_t_uint64__fromStack_reversed(headStart , value3, value2, value1, value0) -> tail {\n tail := add(headStart, 128)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_to_t_array$_t_struct$_MultiAsset_$177_memory_ptr_$dyn_memory_ptr_fromStack(value0, tail)\n\n abi_encode_t_uint32_to_t_uint32_fromStack(value1, add(headStart, 32))\n\n mstore(add(headStart, 64), sub(tail, headStart))\n tail := abi_encode_t_struct$_Multilocation_$171_memory_ptr_to_t_struct$_Multilocation_$171_memory_ptr_fromStack(value2, tail)\n\n abi_encode_t_uint64_to_t_uint64_fromStack(value3, add(headStart, 96))\n\n }\n\n}\n", + "id": 2, "language": "Yul", "name": "#utility.yul" } ], "immutableReferences": {}, "linkReferences": {}, - "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063af3dcee81161005b578063af3dcee8146100d6578063b38c60fa146100f4578063b9f813ff14610110578063dab20fdc1461012c5761007d565b806389a570fc146100825780638a362d5c1461009e57806394f69115146100ba575b600080fd5b61009c60048036038101906100979190610861565b610148565b005b6100b860048036038101906100b39190610ac1565b6101e2565b005b6100d460048036038101906100cf9190610b60565b610279565b005b6100de610313565b6040516100eb9190610c56565b60405180910390f35b61010e60048036038101906101099190610c71565b610337565b005b61012a60048036038101906101259190610d10565b6103ce565b005b61014660048036038101906101419190610ee0565b610465565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389a570fc86868686866040518663ffffffff1660e01b81526004016101a9959493929190611133565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a362d5c858585856040518563ffffffff1660e01b8152600401610241949392919061129f565b600060405180830381600087803b15801561025b57600080fd5b505af115801561026f573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394f6911586868686866040518663ffffffff1660e01b81526004016102da959493929190611301565b600060405180830381600087803b1580156102f457600080fd5b505af1158015610308573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b38c60fa858585856040518563ffffffff1660e01b8152600401610396949392919061135b565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9f813ff858585856040518563ffffffff1660e01b815260040161042d94939291906113ae565b600060405180830381600087803b15801561044757600080fd5b505af115801561045b573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dab20fdc858585856040518563ffffffff1660e01b81526004016104c49493929190611536565b600060405180830381600087803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61055e82610515565b810181811067ffffffffffffffff8211171561057d5761057c610526565b5b80604052505050565b60006105906104fc565b905061059c8282610555565b919050565b600080fd5b600060ff82169050919050565b6105bc816105a6565b81146105c757600080fd5b50565b6000813590506105d9816105b3565b92915050565b600080fd5b600067ffffffffffffffff8211156105ff576105fe610526565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561063557610634610526565b5b61063e82610515565b9050602081019050919050565b82818337600083830152505050565b600061066d6106688461061a565b610586565b90508281526020810184848401111561068957610688610615565b5b61069484828561064b565b509392505050565b600082601f8301126106b1576106b06105df565b5b81356106c184826020860161065a565b91505092915050565b60006106dd6106d8846105e4565b610586565b90508083825260208201905060208402830185811115610700576106ff610610565b5b835b8181101561074757803567ffffffffffffffff811115610725576107246105df565b5b808601610732898261069c565b85526020850194505050602081019050610702565b5050509392505050565b600082601f830112610766576107656105df565b5b81356107768482602086016106ca565b91505092915050565b60006040828403121561079557610794610510565b5b61079f6040610586565b905060006107af848285016105ca565b600083015250602082013567ffffffffffffffff8111156107d3576107d26105a1565b5b6107df84828501610751565b60208301525092915050565b6000819050919050565b6107fe816107eb565b811461080957600080fd5b50565b60008135905061081b816107f5565b92915050565b600067ffffffffffffffff82169050919050565b61083e81610821565b811461084957600080fd5b50565b60008135905061085b81610835565b92915050565b600080600080600060a0868803121561087d5761087c610506565b5b600086013567ffffffffffffffff81111561089b5761089a61050b565b5b6108a78882890161077f565b95505060206108b88882890161080c565b94505060406108c98882890161080c565b935050606086013567ffffffffffffffff8111156108ea576108e961050b565b5b6108f68882890161077f565b92505060806109078882890161084c565b9150509295509295909350565b600067ffffffffffffffff82111561092f5761092e610526565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061096b82610940565b9050919050565b61097b81610960565b811461098657600080fd5b50565b60008135905061099881610972565b92915050565b6000604082840312156109b4576109b3610510565b5b6109be6040610586565b905060006109ce84828501610989565b60008301525060206109e28482850161080c565b60208301525092915050565b6000610a016109fc84610914565b610586565b90508083825260208201905060408402830185811115610a2457610a23610610565b5b835b81811015610a4d5780610a39888261099e565b845260208401935050604081019050610a26565b5050509392505050565b600082601f830112610a6c57610a6b6105df565b5b8135610a7c8482602086016109ee565b91505092915050565b600063ffffffff82169050919050565b610a9e81610a85565b8114610aa957600080fd5b50565b600081359050610abb81610a95565b92915050565b60008060008060808587031215610adb57610ada610506565b5b600085013567ffffffffffffffff811115610af957610af861050b565b5b610b0587828801610a57565b9450506020610b1687828801610aac565b935050604085013567ffffffffffffffff811115610b3757610b3661050b565b5b610b438782880161077f565b9250506060610b548782880161084c565b91505092959194509250565b600080600080600060a08688031215610b7c57610b7b610506565b5b6000610b8a88828901610989565b9550506020610b9b8882890161080c565b9450506040610bac8882890161080c565b935050606086013567ffffffffffffffff811115610bcd57610bcc61050b565b5b610bd98882890161077f565b9250506080610bea8882890161084c565b9150509295509295909350565b6000819050919050565b6000610c1c610c17610c1284610940565b610bf7565b610940565b9050919050565b6000610c2e82610c01565b9050919050565b6000610c4082610c23565b9050919050565b610c5081610c35565b82525050565b6000602082019050610c6b6000830184610c47565b92915050565b60008060008060808587031215610c8b57610c8a610506565b5b600085013567ffffffffffffffff811115610ca957610ca861050b565b5b610cb58782880161077f565b9450506020610cc68782880161080c565b935050604085013567ffffffffffffffff811115610ce757610ce661050b565b5b610cf38782880161077f565b9250506060610d048782880161084c565b91505092959194509250565b60008060008060808587031215610d2a57610d29610506565b5b6000610d3887828801610989565b9450506020610d498782880161080c565b935050604085013567ffffffffffffffff811115610d6a57610d6961050b565b5b610d768782880161077f565b9250506060610d878782880161084c565b91505092959194509250565b600067ffffffffffffffff821115610dae57610dad610526565b5b602082029050602081019050919050565b600060408284031215610dd557610dd4610510565b5b610ddf6040610586565b9050600082013567ffffffffffffffff811115610dff57610dfe6105a1565b5b610e0b8482850161077f565b6000830152506020610e1f8482850161080c565b60208301525092915050565b6000610e3e610e3984610d93565b610586565b90508083825260208201905060208402830185811115610e6157610e60610610565b5b835b81811015610ea857803567ffffffffffffffff811115610e8657610e856105df565b5b808601610e938982610dbf565b85526020850194505050602081019050610e63565b5050509392505050565b600082601f830112610ec757610ec66105df565b5b8135610ed7848260208601610e2b565b91505092915050565b60008060008060808587031215610efa57610ef9610506565b5b600085013567ffffffffffffffff811115610f1857610f1761050b565b5b610f2487828801610eb2565b9450506020610f3587828801610aac565b935050604085013567ffffffffffffffff811115610f5657610f5561050b565b5b610f628782880161077f565b9250506060610f738782880161084c565b91505092959194509250565b610f88816105a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ff4578082015181840152602081019050610fd9565b83811115611003576000848401525b50505050565b600061101482610fba565b61101e8185610fc5565b935061102e818560208601610fd6565b61103781610515565b840191505092915050565b600061104e8383611009565b905092915050565b6000602082019050919050565b600061106e82610f8e565b6110788185610f99565b93508360208202850161108a85610faa565b8060005b858110156110c657848403895281516110a78582611042565b94506110b283611056565b925060208a0199505060018101905061108e565b50829750879550505050505092915050565b60006040830160008301516110f06000860182610f7f565b50602083015184820360208601526111088282611063565b9150508091505092915050565b61111e816107eb565b82525050565b61112d81610821565b82525050565b600060a082019050818103600083015261114d81886110d8565b905061115c6020830187611115565b6111696040830186611115565b818103606083015261117b81856110d8565b905061118a6080830184611124565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6111c981610960565b82525050565b6111d8816107eb565b82525050565b6040820160008201516111f460008501826111c0565b50602082015161120760208501826111cf565b50505050565b600061121983836111de565b60408301905092915050565b6000602082019050919050565b600061123d82611194565b611247818561119f565b9350611252836111b0565b8060005b8381101561128357815161126a888261120d565b975061127583611225565b925050600181019050611256565b5085935050505092915050565b61129981610a85565b82525050565b600060808201905081810360008301526112b98187611232565b90506112c86020830186611290565b81810360408301526112da81856110d8565b90506112e96060830184611124565b95945050505050565b6112fb81610960565b82525050565b600060a08201905061131660008301886112f2565b6113236020830187611115565b6113306040830186611115565b818103606083015261134281856110d8565b90506113516080830184611124565b9695505050505050565b6000608082019050818103600083015261137581876110d8565b90506113846020830186611115565b818103604083015261139681856110d8565b90506113a56060830184611124565b95945050505050565b60006080820190506113c360008301876112f2565b6113d06020830186611115565b81810360408301526113e281856110d8565b90506113f16060830184611124565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060408301600083015161143e6000860182610f7f565b50602083015184820360208601526114568282611063565b9150508091505092915050565b600060408301600083015184820360008601526114808282611426565b915050602083015161149560208601826111cf565b508091505092915050565b60006114ac8383611463565b905092915050565b6000602082019050919050565b60006114cc826113fa565b6114d68185611405565b9350836020820285016114e885611416565b8060005b85811015611524578484038952815161150585826114a0565b9450611510836114b4565b925060208a019950506001810190506114ec565b50829750879550505050505092915050565b6000608082019050818103600083015261155081876114c1565b905061155f6020830186611290565b818103604083015261157181856110d8565b90506115806060830184611124565b9594505050505056fea264697066735822122032dfb9c750567e10ba5fcf6b460f97ca764c58029ec0ed48d16954288648a94764736f6c634300080b0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAF3DCEE8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAF3DCEE8 EQ PUSH2 0xD6 JUMPI DUP1 PUSH4 0xB38C60FA EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xDAB20FDC EQ PUSH2 0x12C JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x89A570FC EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x8A362D5C EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x94F69115 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x861 JUMP JUMPDEST PUSH2 0x148 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0xAC1 JUMP JUMPDEST PUSH2 0x1E2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xCF SWAP2 SWAP1 PUSH2 0xB60 JUMP JUMPDEST PUSH2 0x279 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDE PUSH2 0x313 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x109 SWAP2 SWAP1 PUSH2 0xC71 JUMP JUMPDEST PUSH2 0x337 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xD10 JUMP JUMPDEST PUSH2 0x3CE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x146 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x141 SWAP2 SWAP1 PUSH2 0xEE0 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x89A570FC DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1133 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A362D5C DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x241 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x94F69115 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2DA SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1301 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x308 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB38C60FA DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x396 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x135B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB9F813FF DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x42D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x13AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDAB20FDC DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4C4 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x55E DUP3 PUSH2 0x515 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x57D JUMPI PUSH2 0x57C PUSH2 0x526 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x590 PUSH2 0x4FC JUMP JUMPDEST SWAP1 POP PUSH2 0x59C DUP3 DUP3 PUSH2 0x555 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x5BC DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP2 EQ PUSH2 0x5C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5D9 DUP2 PUSH2 0x5B3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5FF JUMPI PUSH2 0x5FE PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x635 JUMPI PUSH2 0x634 PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH2 0x63E DUP3 PUSH2 0x515 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x66D PUSH2 0x668 DUP5 PUSH2 0x61A JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x689 JUMPI PUSH2 0x688 PUSH2 0x615 JUMP JUMPDEST JUMPDEST PUSH2 0x694 DUP5 DUP3 DUP6 PUSH2 0x64B JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6B1 JUMPI PUSH2 0x6B0 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6C1 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x65A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DD PUSH2 0x6D8 DUP5 PUSH2 0x5E4 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x6FF PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x747 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x725 JUMPI PUSH2 0x724 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x732 DUP10 DUP3 PUSH2 0x69C JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x702 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x766 JUMPI PUSH2 0x765 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x776 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x6CA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x795 JUMPI PUSH2 0x794 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x79F PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x7AF DUP5 DUP3 DUP6 ADD PUSH2 0x5CA JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7D3 JUMPI PUSH2 0x7D2 PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0x7DF DUP5 DUP3 DUP6 ADD PUSH2 0x751 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7FE DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP2 EQ PUSH2 0x809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x81B DUP2 PUSH2 0x7F5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x83E DUP2 PUSH2 0x821 JUMP JUMPDEST DUP2 EQ PUSH2 0x849 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85B DUP2 PUSH2 0x835 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x87D JUMPI PUSH2 0x87C PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x89B JUMPI PUSH2 0x89A PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8A7 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x8B8 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x8C9 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8EA JUMPI PUSH2 0x8E9 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8F6 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x907 DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x92F JUMPI PUSH2 0x92E PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x96B DUP3 PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x97B DUP2 PUSH2 0x960 JUMP JUMPDEST DUP2 EQ PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x998 DUP2 PUSH2 0x972 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B4 JUMPI PUSH2 0x9B3 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x9BE PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9CE DUP5 DUP3 DUP6 ADD PUSH2 0x989 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0x9E2 DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA01 PUSH2 0x9FC DUP5 PUSH2 0x914 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x40 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA24 JUMPI PUSH2 0xA23 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA4D JUMPI DUP1 PUSH2 0xA39 DUP9 DUP3 PUSH2 0x99E JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x40 DUP2 ADD SWAP1 POP PUSH2 0xA26 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA6C JUMPI PUSH2 0xA6B PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA7C DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x9EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA9E DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP2 EQ PUSH2 0xAA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xABB DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xADB JUMPI PUSH2 0xADA PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAF9 JUMPI PUSH2 0xAF8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB05 DUP8 DUP3 DUP9 ADD PUSH2 0xA57 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xB16 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB37 JUMPI PUSH2 0xB36 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB43 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xB54 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB7C JUMPI PUSH2 0xB7B PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xB8A DUP9 DUP3 DUP10 ADD PUSH2 0x989 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xB9B DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xBAC DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBCD JUMPI PUSH2 0xBCC PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xBD9 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0xBEA DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1C PUSH2 0xC17 PUSH2 0xC12 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2E DUP3 PUSH2 0xC01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC40 DUP3 PUSH2 0xC23 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC50 DUP2 PUSH2 0xC35 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xC6B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC47 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC8B JUMPI PUSH2 0xC8A PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCA9 JUMPI PUSH2 0xCA8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCB5 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xCC6 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCE7 JUMPI PUSH2 0xCE6 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCF3 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD04 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD2A JUMPI PUSH2 0xD29 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD38 DUP8 DUP3 DUP9 ADD PUSH2 0x989 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xD49 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD6A JUMPI PUSH2 0xD69 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xD76 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD87 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDAE JUMPI PUSH2 0xDAD PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDD5 JUMPI PUSH2 0xDD4 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0xDDF PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFF JUMPI PUSH2 0xDFE PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0xE0B DUP5 DUP3 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0xE1F DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE3E PUSH2 0xE39 DUP5 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xE61 JUMPI PUSH2 0xE60 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xEA8 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE86 JUMPI PUSH2 0xE85 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0xE93 DUP10 DUP3 PUSH2 0xDBF JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE63 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xEC7 JUMPI PUSH2 0xEC6 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xED7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xE2B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xEFA JUMPI PUSH2 0xEF9 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF18 JUMPI PUSH2 0xF17 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF24 DUP8 DUP3 DUP9 ADD PUSH2 0xEB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xF35 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF56 JUMPI PUSH2 0xF55 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF62 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xF73 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xF88 DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFF4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFD9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1003 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1014 DUP3 PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x101E DUP2 DUP6 PUSH2 0xFC5 JUMP JUMPDEST SWAP4 POP PUSH2 0x102E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x1037 DUP2 PUSH2 0x515 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x104E DUP4 DUP4 PUSH2 0x1009 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x106E DUP3 PUSH2 0xF8E JUMP JUMPDEST PUSH2 0x1078 DUP2 DUP6 PUSH2 0xF99 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x108A DUP6 PUSH2 0xFAA JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x10C6 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x10A7 DUP6 DUP3 PUSH2 0x1042 JUMP JUMPDEST SWAP5 POP PUSH2 0x10B2 DUP4 PUSH2 0x1056 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x108E JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x10F0 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1108 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111E DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x821 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x114D DUP2 DUP9 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x115C PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1169 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x117B DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x118A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11C9 DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11D8 DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD PUSH1 0x0 DUP3 ADD MLOAD PUSH2 0x11F4 PUSH1 0x0 DUP6 ADD DUP3 PUSH2 0x11C0 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1207 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1219 DUP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x123D DUP3 PUSH2 0x1194 JUMP JUMPDEST PUSH2 0x1247 DUP2 DUP6 PUSH2 0x119F JUMP JUMPDEST SWAP4 POP PUSH2 0x1252 DUP4 PUSH2 0x11B0 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1283 JUMPI DUP2 MLOAD PUSH2 0x126A DUP9 DUP3 PUSH2 0x120D JUMP JUMPDEST SWAP8 POP PUSH2 0x1275 DUP4 PUSH2 0x1225 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1256 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1299 DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12B9 DUP2 DUP8 PUSH2 0x1232 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C8 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x12DA DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x12E9 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12FB DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1316 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x1323 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1330 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1342 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1351 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1375 DUP2 DUP8 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1384 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1396 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13A5 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x13C3 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x13D0 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x13E2 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13F1 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x143E PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1456 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x0 DUP7 ADD MSTORE PUSH2 0x1480 DUP3 DUP3 PUSH2 0x1426 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1495 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14AC DUP4 DUP4 PUSH2 0x1463 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14CC DUP3 PUSH2 0x13FA JUMP JUMPDEST PUSH2 0x14D6 DUP2 DUP6 PUSH2 0x1405 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x14E8 DUP6 PUSH2 0x1416 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1524 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x1505 DUP6 DUP3 PUSH2 0x14A0 JUMP JUMPDEST SWAP5 POP PUSH2 0x1510 DUP4 PUSH2 0x14B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x14EC JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1550 DUP2 DUP8 PUSH2 0x14C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x155F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1571 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1580 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ORIGIN 0xDF 0xB9 0xC7 POP JUMP PUSH31 0x10BA5FCF6B460F97CA764C58029EC0ED48D16954288648A94764736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", - "sourceMap": "5303:2075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6418:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6761:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5793:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5416:76;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6123:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5511:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7078:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6418:334;6664:7;;;;;;;;;;:36;;;6701:5;6708:6;6716:3;6721:11;6734:6;6664:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6418:334;;;;;:::o;6761:308::-;6982:7;;;;;;;;;;:33;;;7016:10;7028:8;7038:11;7051:6;6982:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6761:308;;;;:::o;5793:321::-;6026:7;;;;;;;;;;:25;;;6052:16;6070:6;6078:3;6083:11;6096:6;6026:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5793:321;;;;;:::o;5416:76::-;;;;;;;;;;;;:::o;6123:286::-;6335:7;;;;;;;;;;:27;;;6363:5;6370:6;6378:11;6391:6;6335:63;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6123:286;;;;:::o;5511:273::-;5710:7;;;;;;;;;;:16;;;5727;5745:6;5753:11;5766:6;5710:63;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5511:273;;;;:::o;7078:294::-;7293:7;;;;;;;;;;:29;;;7323:6;7331:8;7341:11;7354:6;7293:68;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7078:294;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:117::-;1282:1;1279;1272:12;1296:86;1331:7;1371:4;1364:5;1360:16;1349:27;;1296:86;;;:::o;1388:118::-;1459:22;1475:5;1459:22;:::i;:::-;1452:5;1449:33;1439:61;;1496:1;1493;1486:12;1439:61;1388:118;:::o;1512:135::-;1556:5;1594:6;1581:20;1572:29;;1610:31;1635:5;1610:31;:::i;:::-;1512:135;;;;:::o;1653:117::-;1762:1;1759;1752:12;1776:320;1862:4;1952:18;1944:6;1941:30;1938:56;;;1974:18;;:::i;:::-;1938:56;2024:4;2016:6;2012:17;2004:25;;2084:4;2078;2074:15;2066:23;;1776:320;;;:::o;2102:117::-;2211:1;2208;2201:12;2225:117;2334:1;2331;2324:12;2348:307;2409:4;2499:18;2491:6;2488:30;2485:56;;;2521:18;;:::i;:::-;2485:56;2559:29;2581:6;2559:29;:::i;:::-;2551:37;;2643:4;2637;2633:15;2625:23;;2348:307;;;:::o;2661:154::-;2745:6;2740:3;2735;2722:30;2807:1;2798:6;2793:3;2789:16;2782:27;2661:154;;;:::o;2821:410::-;2898:5;2923:65;2939:48;2980:6;2939:48;:::i;:::-;2923:65;:::i;:::-;2914:74;;3011:6;3004:5;2997:21;3049:4;3042:5;3038:16;3087:3;3078:6;3073:3;3069:16;3066:25;3063:112;;;3094:79;;:::i;:::-;3063:112;3184:41;3218:6;3213:3;3208;3184:41;:::i;:::-;2904:327;2821:410;;;;;:::o;3250:338::-;3305:5;3354:3;3347:4;3339:6;3335:17;3331:27;3321:122;;3362:79;;:::i;:::-;3321:122;3479:6;3466:20;3504:78;3578:3;3570:6;3563:4;3555:6;3551:17;3504:78;:::i;:::-;3495:87;;3311:277;3250:338;;;;:::o;3609:942::-;3714:5;3739:90;3755:73;3821:6;3755:73;:::i;:::-;3739:90;:::i;:::-;3730:99;;3849:5;3878:6;3871:5;3864:21;3912:4;3905:5;3901:16;3894:23;;3965:4;3957:6;3953:17;3945:6;3941:30;3994:3;3986:6;3983:15;3980:122;;;4013:79;;:::i;:::-;3980:122;4128:6;4111:434;4145:6;4140:3;4137:15;4111:434;;;4234:3;4221:17;4270:18;4257:11;4254:35;4251:122;;;4292:79;;:::i;:::-;4251:122;4416:11;4408:6;4404:24;4454:46;4496:3;4484:10;4454:46;:::i;:::-;4449:3;4442:59;4530:4;4525:3;4521:14;4514:21;;4187:358;;4171:4;4166:3;4162:14;4155:21;;4111:434;;;4115:21;3720:831;;3609:942;;;;;:::o;4572:388::-;4652:5;4701:3;4694:4;4686:6;4682:17;4678:27;4668:122;;4709:79;;:::i;:::-;4668:122;4826:6;4813:20;4851:103;4950:3;4942:6;4935:4;4927:6;4923:17;4851:103;:::i;:::-;4842:112;;4658:302;4572:388;;;;:::o;5002:776::-;5079:5;5123:4;5111:9;5106:3;5102:19;5098:30;5095:117;;;5131:79;;:::i;:::-;5095:117;5230:21;5246:4;5230:21;:::i;:::-;5221:30;;5313:1;5353:47;5396:3;5387:6;5376:9;5372:22;5353:47;:::i;:::-;5346:4;5339:5;5335:16;5328:73;5261:151;5503:2;5492:9;5488:18;5475:32;5534:18;5526:6;5523:30;5520:117;;;5556:79;;:::i;:::-;5520:117;5676:83;5755:3;5746:6;5735:9;5731:22;5676:83;:::i;:::-;5669:4;5662:5;5658:16;5651:109;5422:349;5002:776;;;;:::o;5784:77::-;5821:7;5850:5;5839:16;;5784:77;;;:::o;5867:122::-;5940:24;5958:5;5940:24;:::i;:::-;5933:5;5930:35;5920:63;;5979:1;5976;5969:12;5920:63;5867:122;:::o;5995:139::-;6041:5;6079:6;6066:20;6057:29;;6095:33;6122:5;6095:33;:::i;:::-;5995:139;;;;:::o;6140:101::-;6176:7;6216:18;6209:5;6205:30;6194:41;;6140:101;;;:::o;6247:120::-;6319:23;6336:5;6319:23;:::i;:::-;6312:5;6309:34;6299:62;;6357:1;6354;6347:12;6299:62;6247:120;:::o;6373:137::-;6418:5;6456:6;6443:20;6434:29;;6472:32;6498:5;6472:32;:::i;:::-;6373:137;;;;:::o;6516:1341::-;6666:6;6674;6682;6690;6698;6747:3;6735:9;6726:7;6722:23;6718:33;6715:120;;;6754:79;;:::i;:::-;6715:120;6902:1;6891:9;6887:17;6874:31;6932:18;6924:6;6921:30;6918:117;;;6954:79;;:::i;:::-;6918:117;7059:81;7132:7;7123:6;7112:9;7108:22;7059:81;:::i;:::-;7049:91;;6845:305;7189:2;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7160:118;7317:2;7343:53;7388:7;7379:6;7368:9;7364:22;7343:53;:::i;:::-;7333:63;;7288:118;7473:2;7462:9;7458:18;7445:32;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7631:81;7704:7;7695:6;7684:9;7680:22;7631:81;:::i;:::-;7621:91;;7416:306;7761:3;7788:52;7832:7;7823:6;7812:9;7808:22;7788:52;:::i;:::-;7778:62;;7732:118;6516:1341;;;;;;;;:::o;7863:335::-;7964:4;8054:18;8046:6;8043:30;8040:56;;;8076:18;;:::i;:::-;8040:56;8126:4;8118:6;8114:17;8106:25;;8186:4;8180;8176:15;8168:23;;7863:335;;;:::o;8204:126::-;8241:7;8281:42;8274:5;8270:54;8259:65;;8204:126;;;:::o;8336:96::-;8373:7;8402:24;8420:5;8402:24;:::i;:::-;8391:35;;8336:96;;;:::o;8438:122::-;8511:24;8529:5;8511:24;:::i;:::-;8504:5;8501:35;8491:63;;8550:1;8547;8540:12;8491:63;8438:122;:::o;8566:139::-;8612:5;8650:6;8637:20;8628:29;;8666:33;8693:5;8666:33;:::i;:::-;8566:139;;;;:::o;8742:587::-;8815:5;8859:4;8847:9;8842:3;8838:19;8834:30;8831:117;;;8867:79;;:::i;:::-;8831:117;8966:21;8982:4;8966:21;:::i;:::-;8957:30;;9058:1;9098:49;9143:3;9134:6;9123:9;9119:22;9098:49;:::i;:::-;9091:4;9084:5;9080:16;9073:75;8997:162;9220:2;9261:49;9306:3;9297:6;9286:9;9282:22;9261:49;:::i;:::-;9254:4;9247:5;9243:16;9236:75;9169:153;8742:587;;;;:::o;9368:782::-;9488:5;9513:105;9529:88;9610:6;9529:88;:::i;:::-;9513:105;:::i;:::-;9504:114;;9638:5;9667:6;9660:5;9653:21;9701:4;9694:5;9690:16;9683:23;;9754:4;9746:6;9742:17;9734:6;9730:30;9783:3;9775:6;9772:15;9769:122;;;9802:79;;:::i;:::-;9769:122;9917:6;9900:244;9934:6;9929:3;9926:15;9900:244;;;10009:3;10038:61;10095:3;10083:10;10038:61;:::i;:::-;10033:3;10026:74;10129:4;10124:3;10120:14;10113:21;;9976:168;9960:4;9955:3;9951:14;9944:21;;9900:244;;;9904:21;9494:656;;9368:782;;;;;:::o;10189:418::-;10284:5;10333:3;10326:4;10318:6;10314:17;10310:27;10300:122;;10341:79;;:::i;:::-;10300:122;10458:6;10445:20;10483:118;10597:3;10589:6;10582:4;10574:6;10570:17;10483:118;:::i;:::-;10474:127;;10290:317;10189:418;;;;:::o;10613:93::-;10649:7;10689:10;10682:5;10678:22;10667:33;;10613:93;;;:::o;10712:120::-;10784:23;10801:5;10784:23;:::i;:::-;10777:5;10774:34;10764:62;;10822:1;10819;10812:12;10764:62;10712:120;:::o;10838:137::-;10883:5;10921:6;10908:20;10899:29;;10937:32;10963:5;10937:32;:::i;:::-;10838:137;;;;:::o;10981:1235::-;11142:6;11150;11158;11166;11215:3;11203:9;11194:7;11190:23;11186:33;11183:120;;;11222:79;;:::i;:::-;11183:120;11370:1;11359:9;11355:17;11342:31;11400:18;11392:6;11389:30;11386:117;;;11422:79;;:::i;:::-;11386:117;11527:102;11621:7;11612:6;11601:9;11597:22;11527:102;:::i;:::-;11517:112;;11313:326;11678:2;11704:52;11748:7;11739:6;11728:9;11724:22;11704:52;:::i;:::-;11694:62;;11649:117;11833:2;11822:9;11818:18;11805:32;11864:18;11856:6;11853:30;11850:117;;;11886:79;;:::i;:::-;11850:117;11991:81;12064:7;12055:6;12044:9;12040:22;11991:81;:::i;:::-;11981:91;;11776:306;12121:2;12147:52;12191:7;12182:6;12171:9;12167:22;12147:52;:::i;:::-;12137:62;;12092:117;10981:1235;;;;;;;:::o;12222:1125::-;12344:6;12352;12360;12368;12376;12425:3;12413:9;12404:7;12400:23;12396:33;12393:120;;;12432:79;;:::i;:::-;12393:120;12552:1;12577:53;12622:7;12613:6;12602:9;12598:22;12577:53;:::i;:::-;12567:63;;12523:117;12679:2;12705:53;12750:7;12741:6;12730:9;12726:22;12705:53;:::i;:::-;12695:63;;12650:118;12807:2;12833:53;12878:7;12869:6;12858:9;12854:22;12833:53;:::i;:::-;12823:63;;12778:118;12963:2;12952:9;12948:18;12935:32;12994:18;12986:6;12983:30;12980:117;;;13016:79;;:::i;:::-;12980:117;13121:81;13194:7;13185:6;13174:9;13170:22;13121:81;:::i;:::-;13111:91;;12906:306;13251:3;13278:52;13322:7;13313:6;13302:9;13298:22;13278:52;:::i;:::-;13268:62;;13222:118;12222:1125;;;;;;;;:::o;13353:60::-;13381:3;13402:5;13395:12;;13353:60;;;:::o;13419:142::-;13469:9;13502:53;13520:34;13529:24;13547:5;13529:24;:::i;:::-;13520:34;:::i;:::-;13502:53;:::i;:::-;13489:66;;13419:142;;;:::o;13567:126::-;13617:9;13650:37;13681:5;13650:37;:::i;:::-;13637:50;;13567:126;;;:::o;13699:141::-;13764:9;13797:37;13828:5;13797:37;:::i;:::-;13784:50;;13699:141;;;:::o;13846:161::-;13948:52;13994:5;13948:52;:::i;:::-;13943:3;13936:65;13846:161;;:::o;14013:252::-;14121:4;14159:2;14148:9;14144:18;14136:26;;14172:86;14255:1;14244:9;14240:17;14231:6;14172:86;:::i;:::-;14013:252;;;;:::o;14271:1195::-;14412:6;14420;14428;14436;14485:3;14473:9;14464:7;14460:23;14456:33;14453:120;;;14492:79;;:::i;:::-;14453:120;14640:1;14629:9;14625:17;14612:31;14670:18;14662:6;14659:30;14656:117;;;14692:79;;:::i;:::-;14656:117;14797:81;14870:7;14861:6;14850:9;14846:22;14797:81;:::i;:::-;14787:91;;14583:305;14927:2;14953:53;14998:7;14989:6;14978:9;14974:22;14953:53;:::i;:::-;14943:63;;14898:118;15083:2;15072:9;15068:18;15055:32;15114:18;15106:6;15103:30;15100:117;;;15136:79;;:::i;:::-;15100:117;15241:81;15314:7;15305:6;15294:9;15290:22;15241:81;:::i;:::-;15231:91;;15026:306;15371:2;15397:52;15441:7;15432:6;15421:9;15417:22;15397:52;:::i;:::-;15387:62;;15342:117;14271:1195;;;;;;;:::o;15472:979::-;15585:6;15593;15601;15609;15658:3;15646:9;15637:7;15633:23;15629:33;15626:120;;;15665:79;;:::i;:::-;15626:120;15785:1;15810:53;15855:7;15846:6;15835:9;15831:22;15810:53;:::i;:::-;15800:63;;15756:117;15912:2;15938:53;15983:7;15974:6;15963:9;15959:22;15938:53;:::i;:::-;15928:63;;15883:118;16068:2;16057:9;16053:18;16040:32;16099:18;16091:6;16088:30;16085:117;;;16121:79;;:::i;:::-;16085:117;16226:81;16299:7;16290:6;16279:9;16275:22;16226:81;:::i;:::-;16216:91;;16011:306;16356:2;16382:52;16426:7;16417:6;16406:9;16402:22;16382:52;:::i;:::-;16372:62;;16327:117;15472:979;;;;;;;:::o;16457:337::-;16560:4;16650:18;16642:6;16639:30;16636:56;;;16672:18;;:::i;:::-;16636:56;16722:4;16714:6;16710:17;16702:25;;16782:4;16776;16772:15;16764:23;;16457:337;;;:::o;16833:769::-;16908:5;16952:4;16940:9;16935:3;16931:19;16927:30;16924:117;;;16960:79;;:::i;:::-;16924:117;17059:21;17075:4;17059:21;:::i;:::-;17050:30;;17171:1;17160:9;17156:17;17143:31;17201:18;17193:6;17190:30;17187:117;;;17223:79;;:::i;:::-;17187:117;17343:77;17416:3;17407:6;17396:9;17392:22;17343:77;:::i;:::-;17336:4;17329:5;17325:16;17318:103;17090:342;17493:2;17534:49;17579:3;17570:6;17559:9;17555:22;17534:49;:::i;:::-;17527:4;17520:5;17516:16;17509:75;17442:153;16833:769;;;;:::o;17643:993::-;17765:5;17790:107;17806:90;17889:6;17806:90;:::i;:::-;17790:107;:::i;:::-;17781:116;;17917:5;17946:6;17939:5;17932:21;17980:4;17973:5;17969:16;17962:23;;18033:4;18025:6;18021:17;18013:6;18009:30;18062:3;18054:6;18051:15;18048:122;;;18081:79;;:::i;:::-;18048:122;18196:6;18179:451;18213:6;18208:3;18205:15;18179:451;;;18302:3;18289:17;18338:18;18325:11;18322:35;18319:122;;;18360:79;;:::i;:::-;18319:122;18484:11;18476:6;18472:24;18522:63;18581:3;18569:10;18522:63;:::i;:::-;18517:3;18510:76;18615:4;18610:3;18606:14;18599:21;;18255:375;;18239:4;18234:3;18230:14;18223:21;;18179:451;;;18183:21;17771:865;;17643:993;;;;;:::o;18677:422::-;18774:5;18823:3;18816:4;18808:6;18804:17;18800:27;18790:122;;18831:79;;:::i;:::-;18790:122;18948:6;18935:20;18973:120;19089:3;19081:6;19074:4;19066:6;19062:17;18973:120;:::i;:::-;18964:129;;18780:319;18677:422;;;;:::o;19105:1239::-;19268:6;19276;19284;19292;19341:3;19329:9;19320:7;19316:23;19312:33;19309:120;;;19348:79;;:::i;:::-;19309:120;19496:1;19485:9;19481:17;19468:31;19526:18;19518:6;19515:30;19512:117;;;19548:79;;:::i;:::-;19512:117;19653:104;19749:7;19740:6;19729:9;19725:22;19653:104;:::i;:::-;19643:114;;19439:328;19806:2;19832:52;19876:7;19867:6;19856:9;19852:22;19832:52;:::i;:::-;19822:62;;19777:117;19961:2;19950:9;19946:18;19933:32;19992:18;19984:6;19981:30;19978:117;;;20014:79;;:::i;:::-;19978:117;20119:81;20192:7;20183:6;20172:9;20168:22;20119:81;:::i;:::-;20109:91;;19904:306;20249:2;20275:52;20319:7;20310:6;20299:9;20295:22;20275:52;:::i;:::-;20265:62;;20220:117;19105:1239;;;;;;;:::o;20350:102::-;20423:22;20439:5;20423:22;:::i;:::-;20418:3;20411:35;20350:102;;:::o;20458:123::-;20534:6;20568:5;20562:12;20552:22;;20458:123;;;:::o;20587:183::-;20685:11;20719:6;20714:3;20707:19;20759:4;20754:3;20750:14;20735:29;;20587:183;;;;:::o;20776:141::-;20852:4;20875:3;20867:11;;20905:4;20900:3;20896:14;20888:22;;20776:141;;;:::o;20923:98::-;20974:6;21008:5;21002:12;20992:22;;20923:98;;;:::o;21027:158::-;21100:11;21134:6;21129:3;21122:19;21174:4;21169:3;21165:14;21150:29;;21027:158;;;;:::o;21191:307::-;21259:1;21269:113;21283:6;21280:1;21277:13;21269:113;;;21368:1;21363:3;21359:11;21353:18;21349:1;21344:3;21340:11;21333:39;21305:2;21302:1;21298:10;21293:15;;21269:113;;;21400:6;21397:1;21394:13;21391:101;;;21480:1;21471:6;21466:3;21462:16;21455:27;21391:101;21240:258;21191:307;;;:::o;21504:340::-;21580:3;21608:38;21640:5;21608:38;:::i;:::-;21662:60;21715:6;21710:3;21662:60;:::i;:::-;21655:67;;21731:52;21776:6;21771:3;21764:4;21757:5;21753:16;21731:52;:::i;:::-;21808:29;21830:6;21808:29;:::i;:::-;21803:3;21799:39;21792:46;;21584:260;21504:340;;;;:::o;21850:192::-;21937:10;21972:64;22032:3;22024:6;21972:64;:::i;:::-;21958:78;;21850:192;;;;:::o;22048:122::-;22127:4;22159;22154:3;22150:14;22142:22;;22048:122;;;:::o;22202:963::-;22329:3;22358:63;22415:5;22358:63;:::i;:::-;22437:85;22515:6;22510:3;22437:85;:::i;:::-;22430:92;;22548:3;22593:4;22585:6;22581:17;22576:3;22572:27;22623:65;22682:5;22623:65;:::i;:::-;22711:7;22742:1;22727:393;22752:6;22749:1;22746:13;22727:393;;;22823:9;22817:4;22813:20;22808:3;22801:33;22874:6;22868:13;22902:82;22979:4;22964:13;22902:82;:::i;:::-;22894:90;;23007:69;23069:6;23007:69;:::i;:::-;22997:79;;23105:4;23100:3;23096:14;23089:21;;22787:333;22774:1;22771;22767:9;22762:14;;22727:393;;;22731:14;23136:4;23129:11;;23156:3;23149:10;;22334:831;;;;;22202:963;;;;:::o;23239:663::-;23364:3;23400:4;23395:3;23391:14;23490:4;23483:5;23479:16;23473:23;23509:59;23562:4;23557:3;23553:14;23539:12;23509:59;:::i;:::-;23415:163;23664:4;23657:5;23653:16;23647:23;23717:3;23711:4;23707:14;23700:4;23695:3;23691:14;23684:38;23743:121;23859:4;23845:12;23743:121;:::i;:::-;23735:129;;23588:287;23892:4;23885:11;;23369:533;23239:663;;;;:::o;23908:118::-;23995:24;24013:5;23995:24;:::i;:::-;23990:3;23983:37;23908:118;;:::o;24032:115::-;24117:23;24134:5;24117:23;:::i;:::-;24112:3;24105:36;24032:115;;:::o;24153:986::-;24468:4;24506:3;24495:9;24491:19;24483:27;;24556:9;24550:4;24546:20;24542:1;24531:9;24527:17;24520:47;24584:114;24693:4;24684:6;24584:114;:::i;:::-;24576:122;;24708:72;24776:2;24765:9;24761:18;24752:6;24708:72;:::i;:::-;24790;24858:2;24847:9;24843:18;24834:6;24790:72;:::i;:::-;24909:9;24903:4;24899:20;24894:2;24883:9;24879:18;24872:48;24937:114;25046:4;25037:6;24937:114;:::i;:::-;24929:122;;25061:71;25127:3;25116:9;25112:19;25103:6;25061:71;:::i;:::-;24153:986;;;;;;;;:::o;25145:138::-;25236:6;25270:5;25264:12;25254:22;;25145:138;;;:::o;25289:208::-;25412:11;25446:6;25441:3;25434:19;25486:4;25481:3;25477:14;25462:29;;25289:208;;;;:::o;25503:156::-;25594:4;25617:3;25609:11;;25647:4;25642:3;25638:14;25630:22;;25503:156;;;:::o;25665:108::-;25742:24;25760:5;25742:24;:::i;:::-;25737:3;25730:37;25665:108;;:::o;25779:::-;25856:24;25874:5;25856:24;:::i;:::-;25851:3;25844:37;25779:108;;:::o;25951:509::-;26086:4;26081:3;26077:14;26185:4;26178:5;26174:16;26168:23;26204:63;26261:4;26256:3;26252:14;26238:12;26204:63;:::i;:::-;26101:176;26361:4;26354:5;26350:16;26344:23;26380:63;26437:4;26432:3;26428:14;26414:12;26380:63;:::i;:::-;26287:166;26055:405;25951:509;;:::o;26466:275::-;26583:10;26604:94;26694:3;26686:6;26604:94;:::i;:::-;26730:4;26725:3;26721:14;26707:28;;26466:275;;;;:::o;26747:137::-;26841:4;26873;26868:3;26864:14;26856:22;;26747:137;;;:::o;26952:924::-;27119:3;27148:78;27220:5;27148:78;:::i;:::-;27242:110;27345:6;27340:3;27242:110;:::i;:::-;27235:117;;27376:80;27450:5;27376:80;:::i;:::-;27479:7;27510:1;27495:356;27520:6;27517:1;27514:13;27495:356;;;27596:6;27590:13;27623:111;27730:3;27715:13;27623:111;:::i;:::-;27616:118;;27757:84;27834:6;27757:84;:::i;:::-;27747:94;;27555:296;27542:1;27539;27535:9;27530:14;;27495:356;;;27499:14;27867:3;27860:10;;27124:752;;;26952:924;;;;:::o;27882:115::-;27967:23;27984:5;27967:23;:::i;:::-;27962:3;27955:36;27882:115;;:::o;28003:955::-;28330:4;28368:3;28357:9;28353:19;28345:27;;28418:9;28412:4;28408:20;28404:1;28393:9;28389:17;28382:47;28446:156;28597:4;28588:6;28446:156;:::i;:::-;28438:164;;28612:70;28678:2;28667:9;28663:18;28654:6;28612:70;:::i;:::-;28729:9;28723:4;28719:20;28714:2;28703:9;28699:18;28692:48;28757:114;28866:4;28857:6;28757:114;:::i;:::-;28749:122;;28881:70;28947:2;28936:9;28932:18;28923:6;28881:70;:::i;:::-;28003:955;;;;;;;:::o;28964:118::-;29051:24;29069:5;29051:24;:::i;:::-;29046:3;29039:37;28964:118;;:::o;29088:823::-;29347:4;29385:3;29374:9;29370:19;29362:27;;29399:71;29467:1;29456:9;29452:17;29443:6;29399:71;:::i;:::-;29480:72;29548:2;29537:9;29533:18;29524:6;29480:72;:::i;:::-;29562;29630:2;29619:9;29615:18;29606:6;29562:72;:::i;:::-;29681:9;29675:4;29671:20;29666:2;29655:9;29651:18;29644:48;29709:114;29818:4;29809:6;29709:114;:::i;:::-;29701:122;;29833:71;29899:3;29888:9;29884:19;29875:6;29833:71;:::i;:::-;29088:823;;;;;;;;:::o;29917:875::-;30204:4;30242:3;30231:9;30227:19;30219:27;;30292:9;30286:4;30282:20;30278:1;30267:9;30263:17;30256:47;30320:114;30429:4;30420:6;30320:114;:::i;:::-;30312:122;;30444:72;30512:2;30501:9;30497:18;30488:6;30444:72;:::i;:::-;30563:9;30557:4;30553:20;30548:2;30537:9;30533:18;30526:48;30591:114;30700:4;30691:6;30591:114;:::i;:::-;30583:122;;30715:70;30781:2;30770:9;30766:18;30757:6;30715:70;:::i;:::-;29917:875;;;;;;;:::o;30798:712::-;31029:4;31067:3;31056:9;31052:19;31044:27;;31081:71;31149:1;31138:9;31134:17;31125:6;31081:71;:::i;:::-;31162:72;31230:2;31219:9;31215:18;31206:6;31162:72;:::i;:::-;31281:9;31275:4;31271:20;31266:2;31255:9;31251:18;31244:48;31309:114;31418:4;31409:6;31309:114;:::i;:::-;31301:122;;31433:70;31499:2;31488:9;31484:18;31475:6;31433:70;:::i;:::-;30798:712;;;;;;;:::o;31516:140::-;31609:6;31643:5;31637:12;31627:22;;31516:140;;;:::o;31662:210::-;31787:11;31821:6;31816:3;31809:19;31861:4;31856:3;31852:14;31837:29;;31662:210;;;;:::o;31878:158::-;31971:4;31994:3;31986:11;;32024:4;32019:3;32015:14;32007:22;;31878:158;;;:::o;32110:653::-;32225:3;32261:4;32256:3;32252:14;32351:4;32344:5;32340:16;32334:23;32370:59;32423:4;32418:3;32414:14;32400:12;32370:59;:::i;:::-;32276:163;32525:4;32518:5;32514:16;32508:23;32578:3;32572:4;32568:14;32561:4;32556:3;32552:14;32545:38;32604:121;32720:4;32706:12;32604:121;:::i;:::-;32596:129;;32449:287;32753:4;32746:11;;32230:533;32110:653;;;;:::o;32831:640::-;32942:3;32978:4;32973:3;32969:14;33069:4;33062:5;33058:16;33052:23;33122:3;33116:4;33112:14;33105:4;33100:3;33096:14;33089:38;33148:109;33252:4;33238:12;33148:109;:::i;:::-;33140:117;;32993:275;33352:4;33345:5;33341:16;33335:23;33371:63;33428:4;33423:3;33419:14;33405:12;33371:63;:::i;:::-;33278:166;33461:4;33454:11;;32947:524;32831:640;;;;:::o;33477:260::-;33598:10;33633:98;33727:3;33719:6;33633:98;:::i;:::-;33619:112;;33477:260;;;;:::o;33743:139::-;33839:4;33871;33866:3;33862:14;33854:22;;33743:139;;;:::o;33954:1119::-;34125:3;34154:80;34228:5;34154:80;:::i;:::-;34250:112;34355:6;34350:3;34250:112;:::i;:::-;34243:119;;34388:3;34433:4;34425:6;34421:17;34416:3;34412:27;34463:82;34539:5;34463:82;:::i;:::-;34568:7;34599:1;34584:444;34609:6;34606:1;34603:13;34584:444;;;34680:9;34674:4;34670:20;34665:3;34658:33;34731:6;34725:13;34759:116;34870:4;34855:13;34759:116;:::i;:::-;34751:124;;34898:86;34977:6;34898:86;:::i;:::-;34888:96;;35013:4;35008:3;35004:14;34997:21;;34644:384;34631:1;34628;34624:9;34619:14;;34584:444;;;34588:14;35044:4;35037:11;;35064:3;35057:10;;34130:943;;;;;33954:1119;;;;:::o;35079:963::-;35410:4;35448:3;35437:9;35433:19;35425:27;;35498:9;35492:4;35488:20;35484:1;35473:9;35469:17;35462:47;35526:160;35681:4;35672:6;35526:160;:::i;:::-;35518:168;;35696:70;35762:2;35751:9;35747:18;35738:6;35696:70;:::i;:::-;35813:9;35807:4;35803:20;35798:2;35787:9;35783:18;35776:48;35841:114;35950:4;35941:6;35841:114;:::i;:::-;35833:122;;35965:70;36031:2;36020:9;36016:18;36007:6;35965:70;:::i;:::-;35079:963;;;;;;;:::o" + "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063af3dcee81161005b578063af3dcee8146100d6578063b38c60fa146100f4578063b9f813ff14610110578063dab20fdc1461012c5761007d565b806389a570fc146100825780638a362d5c1461009e57806394f69115146100ba575b600080fd5b61009c60048036038101906100979190610861565b610148565b005b6100b860048036038101906100b39190610ac1565b6101e2565b005b6100d460048036038101906100cf9190610b60565b610279565b005b6100de610313565b6040516100eb9190610c56565b60405180910390f35b61010e60048036038101906101099190610c71565b610337565b005b61012a60048036038101906101259190610d10565b6103ce565b005b61014660048036038101906101419190610ee0565b610465565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389a570fc86868686866040518663ffffffff1660e01b81526004016101a9959493929190611133565b600060405180830381600087803b1580156101c357600080fd5b505af11580156101d7573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638a362d5c858585856040518563ffffffff1660e01b8152600401610241949392919061129f565b600060405180830381600087803b15801561025b57600080fd5b505af115801561026f573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394f6911586868686866040518663ffffffff1660e01b81526004016102da959493929190611301565b600060405180830381600087803b1580156102f457600080fd5b505af1158015610308573d6000803e3d6000fd5b505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b38c60fa858585856040518563ffffffff1660e01b8152600401610396949392919061135b565b600060405180830381600087803b1580156103b057600080fd5b505af11580156103c4573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9f813ff858585856040518563ffffffff1660e01b815260040161042d94939291906113ae565b600060405180830381600087803b15801561044757600080fd5b505af115801561045b573d6000803e3d6000fd5b5050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dab20fdc858585856040518563ffffffff1660e01b81526004016104c49493929190611536565b600060405180830381600087803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61055e82610515565b810181811067ffffffffffffffff8211171561057d5761057c610526565b5b80604052505050565b60006105906104fc565b905061059c8282610555565b919050565b600080fd5b600060ff82169050919050565b6105bc816105a6565b81146105c757600080fd5b50565b6000813590506105d9816105b3565b92915050565b600080fd5b600067ffffffffffffffff8211156105ff576105fe610526565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561063557610634610526565b5b61063e82610515565b9050602081019050919050565b82818337600083830152505050565b600061066d6106688461061a565b610586565b90508281526020810184848401111561068957610688610615565b5b61069484828561064b565b509392505050565b600082601f8301126106b1576106b06105df565b5b81356106c184826020860161065a565b91505092915050565b60006106dd6106d8846105e4565b610586565b90508083825260208201905060208402830185811115610700576106ff610610565b5b835b8181101561074757803567ffffffffffffffff811115610725576107246105df565b5b808601610732898261069c565b85526020850194505050602081019050610702565b5050509392505050565b600082601f830112610766576107656105df565b5b81356107768482602086016106ca565b91505092915050565b60006040828403121561079557610794610510565b5b61079f6040610586565b905060006107af848285016105ca565b600083015250602082013567ffffffffffffffff8111156107d3576107d26105a1565b5b6107df84828501610751565b60208301525092915050565b6000819050919050565b6107fe816107eb565b811461080957600080fd5b50565b60008135905061081b816107f5565b92915050565b600067ffffffffffffffff82169050919050565b61083e81610821565b811461084957600080fd5b50565b60008135905061085b81610835565b92915050565b600080600080600060a0868803121561087d5761087c610506565b5b600086013567ffffffffffffffff81111561089b5761089a61050b565b5b6108a78882890161077f565b95505060206108b88882890161080c565b94505060406108c98882890161080c565b935050606086013567ffffffffffffffff8111156108ea576108e961050b565b5b6108f68882890161077f565b92505060806109078882890161084c565b9150509295509295909350565b600067ffffffffffffffff82111561092f5761092e610526565b5b602082029050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061096b82610940565b9050919050565b61097b81610960565b811461098657600080fd5b50565b60008135905061099881610972565b92915050565b6000604082840312156109b4576109b3610510565b5b6109be6040610586565b905060006109ce84828501610989565b60008301525060206109e28482850161080c565b60208301525092915050565b6000610a016109fc84610914565b610586565b90508083825260208201905060408402830185811115610a2457610a23610610565b5b835b81811015610a4d5780610a39888261099e565b845260208401935050604081019050610a26565b5050509392505050565b600082601f830112610a6c57610a6b6105df565b5b8135610a7c8482602086016109ee565b91505092915050565b600063ffffffff82169050919050565b610a9e81610a85565b8114610aa957600080fd5b50565b600081359050610abb81610a95565b92915050565b60008060008060808587031215610adb57610ada610506565b5b600085013567ffffffffffffffff811115610af957610af861050b565b5b610b0587828801610a57565b9450506020610b1687828801610aac565b935050604085013567ffffffffffffffff811115610b3757610b3661050b565b5b610b438782880161077f565b9250506060610b548782880161084c565b91505092959194509250565b600080600080600060a08688031215610b7c57610b7b610506565b5b6000610b8a88828901610989565b9550506020610b9b8882890161080c565b9450506040610bac8882890161080c565b935050606086013567ffffffffffffffff811115610bcd57610bcc61050b565b5b610bd98882890161077f565b9250506080610bea8882890161084c565b9150509295509295909350565b6000819050919050565b6000610c1c610c17610c1284610940565b610bf7565b610940565b9050919050565b6000610c2e82610c01565b9050919050565b6000610c4082610c23565b9050919050565b610c5081610c35565b82525050565b6000602082019050610c6b6000830184610c47565b92915050565b60008060008060808587031215610c8b57610c8a610506565b5b600085013567ffffffffffffffff811115610ca957610ca861050b565b5b610cb58782880161077f565b9450506020610cc68782880161080c565b935050604085013567ffffffffffffffff811115610ce757610ce661050b565b5b610cf38782880161077f565b9250506060610d048782880161084c565b91505092959194509250565b60008060008060808587031215610d2a57610d29610506565b5b6000610d3887828801610989565b9450506020610d498782880161080c565b935050604085013567ffffffffffffffff811115610d6a57610d6961050b565b5b610d768782880161077f565b9250506060610d878782880161084c565b91505092959194509250565b600067ffffffffffffffff821115610dae57610dad610526565b5b602082029050602081019050919050565b600060408284031215610dd557610dd4610510565b5b610ddf6040610586565b9050600082013567ffffffffffffffff811115610dff57610dfe6105a1565b5b610e0b8482850161077f565b6000830152506020610e1f8482850161080c565b60208301525092915050565b6000610e3e610e3984610d93565b610586565b90508083825260208201905060208402830185811115610e6157610e60610610565b5b835b81811015610ea857803567ffffffffffffffff811115610e8657610e856105df565b5b808601610e938982610dbf565b85526020850194505050602081019050610e63565b5050509392505050565b600082601f830112610ec757610ec66105df565b5b8135610ed7848260208601610e2b565b91505092915050565b60008060008060808587031215610efa57610ef9610506565b5b600085013567ffffffffffffffff811115610f1857610f1761050b565b5b610f2487828801610eb2565b9450506020610f3587828801610aac565b935050604085013567ffffffffffffffff811115610f5657610f5561050b565b5b610f628782880161077f565b9250506060610f738782880161084c565b91505092959194509250565b610f88816105a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ff4578082015181840152602081019050610fd9565b83811115611003576000848401525b50505050565b600061101482610fba565b61101e8185610fc5565b935061102e818560208601610fd6565b61103781610515565b840191505092915050565b600061104e8383611009565b905092915050565b6000602082019050919050565b600061106e82610f8e565b6110788185610f99565b93508360208202850161108a85610faa565b8060005b858110156110c657848403895281516110a78582611042565b94506110b283611056565b925060208a0199505060018101905061108e565b50829750879550505050505092915050565b60006040830160008301516110f06000860182610f7f565b50602083015184820360208601526111088282611063565b9150508091505092915050565b61111e816107eb565b82525050565b61112d81610821565b82525050565b600060a082019050818103600083015261114d81886110d8565b905061115c6020830187611115565b6111696040830186611115565b818103606083015261117b81856110d8565b905061118a6080830184611124565b9695505050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6111c981610960565b82525050565b6111d8816107eb565b82525050565b6040820160008201516111f460008501826111c0565b50602082015161120760208501826111cf565b50505050565b600061121983836111de565b60408301905092915050565b6000602082019050919050565b600061123d82611194565b611247818561119f565b9350611252836111b0565b8060005b8381101561128357815161126a888261120d565b975061127583611225565b925050600181019050611256565b5085935050505092915050565b61129981610a85565b82525050565b600060808201905081810360008301526112b98187611232565b90506112c86020830186611290565b81810360408301526112da81856110d8565b90506112e96060830184611124565b95945050505050565b6112fb81610960565b82525050565b600060a08201905061131660008301886112f2565b6113236020830187611115565b6113306040830186611115565b818103606083015261134281856110d8565b90506113516080830184611124565b9695505050505050565b6000608082019050818103600083015261137581876110d8565b90506113846020830186611115565b818103604083015261139681856110d8565b90506113a56060830184611124565b95945050505050565b60006080820190506113c360008301876112f2565b6113d06020830186611115565b81810360408301526113e281856110d8565b90506113f16060830184611124565b95945050505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060408301600083015161143e6000860182610f7f565b50602083015184820360208601526114568282611063565b9150508091505092915050565b600060408301600083015184820360008601526114808282611426565b915050602083015161149560208601826111cf565b508091505092915050565b60006114ac8383611463565b905092915050565b6000602082019050919050565b60006114cc826113fa565b6114d68185611405565b9350836020820285016114e885611416565b8060005b85811015611524578484038952815161150585826114a0565b9450611510836114b4565b925060208a019950506001810190506114ec565b50829750879550505050505092915050565b6000608082019050818103600083015261155081876114c1565b905061155f6020830186611290565b818103604083015261157181856110d8565b90506115806060830184611124565b9594505050505056fea264697066735822122045f09e9526479cb895d7cea7861283c3c0bba940b35a00486c33d9eed6ab352464736f6c634300080b0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xAF3DCEE8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xAF3DCEE8 EQ PUSH2 0xD6 JUMPI DUP1 PUSH4 0xB38C60FA EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xB9F813FF EQ PUSH2 0x110 JUMPI DUP1 PUSH4 0xDAB20FDC EQ PUSH2 0x12C JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x89A570FC EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x8A362D5C EQ PUSH2 0x9E JUMPI DUP1 PUSH4 0x94F69115 EQ PUSH2 0xBA JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x9C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x861 JUMP JUMPDEST PUSH2 0x148 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xB8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB3 SWAP2 SWAP1 PUSH2 0xAC1 JUMP JUMPDEST PUSH2 0x1E2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xD4 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xCF SWAP2 SWAP1 PUSH2 0xB60 JUMP JUMPDEST PUSH2 0x279 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xDE PUSH2 0x313 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEB SWAP2 SWAP1 PUSH2 0xC56 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x10E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x109 SWAP2 SWAP1 PUSH2 0xC71 JUMP JUMPDEST PUSH2 0x337 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x12A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x125 SWAP2 SWAP1 PUSH2 0xD10 JUMP JUMPDEST PUSH2 0x3CE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x146 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x141 SWAP2 SWAP1 PUSH2 0xEE0 JUMP JUMPDEST PUSH2 0x465 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x89A570FC DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A9 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1133 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1D7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x8A362D5C DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x241 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x129F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x25B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x26F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x94F69115 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD DUP7 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2DA SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1301 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2F4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x308 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB38C60FA DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x396 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x135B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3C4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xB9F813FF DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x42D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x13AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x447 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x45B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xDAB20FDC DUP6 DUP6 DUP6 DUP6 PUSH1 0x40 MLOAD DUP6 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x4C4 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1536 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x55E DUP3 PUSH2 0x515 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x57D JUMPI PUSH2 0x57C PUSH2 0x526 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x590 PUSH2 0x4FC JUMP JUMPDEST SWAP1 POP PUSH2 0x59C DUP3 DUP3 PUSH2 0x555 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x5BC DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP2 EQ PUSH2 0x5C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x5D9 DUP2 PUSH2 0x5B3 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5FF JUMPI PUSH2 0x5FE PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x635 JUMPI PUSH2 0x634 PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH2 0x63E DUP3 PUSH2 0x515 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x66D PUSH2 0x668 DUP5 PUSH2 0x61A JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x689 JUMPI PUSH2 0x688 PUSH2 0x615 JUMP JUMPDEST JUMPDEST PUSH2 0x694 DUP5 DUP3 DUP6 PUSH2 0x64B JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x6B1 JUMPI PUSH2 0x6B0 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x6C1 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x65A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x6DD PUSH2 0x6D8 DUP5 PUSH2 0x5E4 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0x700 JUMPI PUSH2 0x6FF PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x747 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x725 JUMPI PUSH2 0x724 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0x732 DUP10 DUP3 PUSH2 0x69C JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x702 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x766 JUMPI PUSH2 0x765 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x776 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x6CA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x795 JUMPI PUSH2 0x794 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x79F PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x7AF DUP5 DUP3 DUP6 ADD PUSH2 0x5CA JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x7D3 JUMPI PUSH2 0x7D2 PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0x7DF DUP5 DUP3 DUP6 ADD PUSH2 0x751 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x7FE DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP2 EQ PUSH2 0x809 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x81B DUP2 PUSH2 0x7F5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x83E DUP2 PUSH2 0x821 JUMP JUMPDEST DUP2 EQ PUSH2 0x849 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x85B DUP2 PUSH2 0x835 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x87D JUMPI PUSH2 0x87C PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x89B JUMPI PUSH2 0x89A PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8A7 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0x8B8 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0x8C9 DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x8EA JUMPI PUSH2 0x8E9 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0x8F6 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0x907 DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x92F JUMPI PUSH2 0x92E PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x96B DUP3 PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x97B DUP2 PUSH2 0x960 JUMP JUMPDEST DUP2 EQ PUSH2 0x986 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x998 DUP2 PUSH2 0x972 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x9B4 JUMPI PUSH2 0x9B3 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0x9BE PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9CE DUP5 DUP3 DUP6 ADD PUSH2 0x989 JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0x9E2 DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA01 PUSH2 0x9FC DUP5 PUSH2 0x914 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x40 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xA24 JUMPI PUSH2 0xA23 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA4D JUMPI DUP1 PUSH2 0xA39 DUP9 DUP3 PUSH2 0x99E JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP4 POP POP PUSH1 0x40 DUP2 ADD SWAP1 POP PUSH2 0xA26 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xA6C JUMPI PUSH2 0xA6B PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA7C DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x9EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH4 0xFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xA9E DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP2 EQ PUSH2 0xAA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xABB DUP2 PUSH2 0xA95 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xADB JUMPI PUSH2 0xADA PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xAF9 JUMPI PUSH2 0xAF8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB05 DUP8 DUP3 DUP9 ADD PUSH2 0xA57 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xB16 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB37 JUMPI PUSH2 0xB36 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xB43 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xB54 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0xB7C JUMPI PUSH2 0xB7B PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xB8A DUP9 DUP3 DUP10 ADD PUSH2 0x989 JUMP JUMPDEST SWAP6 POP POP PUSH1 0x20 PUSH2 0xB9B DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH2 0xBAC DUP9 DUP3 DUP10 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBCD JUMPI PUSH2 0xBCC PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xBD9 DUP9 DUP3 DUP10 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x80 PUSH2 0xBEA DUP9 DUP3 DUP10 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 SWAP1 SWAP4 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1C PUSH2 0xC17 PUSH2 0xC12 DUP5 PUSH2 0x940 JUMP JUMPDEST PUSH2 0xBF7 JUMP JUMPDEST PUSH2 0x940 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC2E DUP3 PUSH2 0xC01 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC40 DUP3 PUSH2 0xC23 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC50 DUP2 PUSH2 0xC35 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xC6B PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC47 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC8B JUMPI PUSH2 0xC8A PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCA9 JUMPI PUSH2 0xCA8 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCB5 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xCC6 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xCE7 JUMPI PUSH2 0xCE6 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xCF3 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD04 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xD2A JUMPI PUSH2 0xD29 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD38 DUP8 DUP3 DUP9 ADD PUSH2 0x989 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xD49 DUP8 DUP3 DUP9 ADD PUSH2 0x80C JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xD6A JUMPI PUSH2 0xD69 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xD76 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xD87 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0xDAE JUMPI PUSH2 0xDAD PUSH2 0x526 JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP3 MUL SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xDD5 JUMPI PUSH2 0xDD4 PUSH2 0x510 JUMP JUMPDEST JUMPDEST PUSH2 0xDDF PUSH1 0x40 PUSH2 0x586 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xDFF JUMPI PUSH2 0xDFE PUSH2 0x5A1 JUMP JUMPDEST JUMPDEST PUSH2 0xE0B DUP5 DUP3 DUP6 ADD PUSH2 0x77F JUMP JUMPDEST PUSH1 0x0 DUP4 ADD MSTORE POP PUSH1 0x20 PUSH2 0xE1F DUP5 DUP3 DUP6 ADD PUSH2 0x80C JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE3E PUSH2 0xE39 DUP5 PUSH2 0xD93 JUMP JUMPDEST PUSH2 0x586 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH1 0x20 DUP5 MUL DUP4 ADD DUP6 DUP2 GT ISZERO PUSH2 0xE61 JUMPI PUSH2 0xE60 PUSH2 0x610 JUMP JUMPDEST JUMPDEST DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xEA8 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE86 JUMPI PUSH2 0xE85 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP1 DUP7 ADD PUSH2 0xE93 DUP10 DUP3 PUSH2 0xDBF JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 POP POP POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xE63 JUMP JUMPDEST POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xEC7 JUMPI PUSH2 0xEC6 PUSH2 0x5DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0xED7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0xE2B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xEFA JUMPI PUSH2 0xEF9 PUSH2 0x506 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF18 JUMPI PUSH2 0xF17 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF24 DUP8 DUP3 DUP9 ADD PUSH2 0xEB2 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x20 PUSH2 0xF35 DUP8 DUP3 DUP9 ADD PUSH2 0xAAC JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF56 JUMPI PUSH2 0xF55 PUSH2 0x50B JUMP JUMPDEST JUMPDEST PUSH2 0xF62 DUP8 DUP3 DUP9 ADD PUSH2 0x77F JUMP JUMPDEST SWAP3 POP POP PUSH1 0x60 PUSH2 0xF73 DUP8 DUP3 DUP9 ADD PUSH2 0x84C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH2 0xF88 DUP2 PUSH2 0x5A6 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xFF4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xFD9 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x1003 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1014 DUP3 PUSH2 0xFBA JUMP JUMPDEST PUSH2 0x101E DUP2 DUP6 PUSH2 0xFC5 JUMP JUMPDEST SWAP4 POP PUSH2 0x102E DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xFD6 JUMP JUMPDEST PUSH2 0x1037 DUP2 PUSH2 0x515 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x104E DUP4 DUP4 PUSH2 0x1009 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x106E DUP3 PUSH2 0xF8E JUMP JUMPDEST PUSH2 0x1078 DUP2 DUP6 PUSH2 0xF99 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x108A DUP6 PUSH2 0xFAA JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x10C6 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x10A7 DUP6 DUP3 PUSH2 0x1042 JUMP JUMPDEST SWAP5 POP PUSH2 0x10B2 DUP4 PUSH2 0x1056 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x108E JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x10F0 PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1108 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x111E DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x112D DUP2 PUSH2 0x821 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x114D DUP2 DUP9 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x115C PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1169 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x117B DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x118A PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11C9 DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x11D8 DUP2 PUSH2 0x7EB JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x40 DUP3 ADD PUSH1 0x0 DUP3 ADD MLOAD PUSH2 0x11F4 PUSH1 0x0 DUP6 ADD DUP3 PUSH2 0x11C0 JUMP JUMPDEST POP PUSH1 0x20 DUP3 ADD MLOAD PUSH2 0x1207 PUSH1 0x20 DUP6 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1219 DUP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x123D DUP3 PUSH2 0x1194 JUMP JUMPDEST PUSH2 0x1247 DUP2 DUP6 PUSH2 0x119F JUMP JUMPDEST SWAP4 POP PUSH2 0x1252 DUP4 PUSH2 0x11B0 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1283 JUMPI DUP2 MLOAD PUSH2 0x126A DUP9 DUP3 PUSH2 0x120D JUMP JUMPDEST SWAP8 POP PUSH2 0x1275 DUP4 PUSH2 0x1225 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1256 JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1299 DUP2 PUSH2 0xA85 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12B9 DUP2 DUP8 PUSH2 0x1232 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C8 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x12DA DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x12E9 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x12FB DUP2 PUSH2 0x960 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x1316 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x1323 PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x1115 JUMP JUMPDEST PUSH2 0x1330 PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1342 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1351 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1375 DUP2 DUP8 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1384 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1396 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13A5 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP PUSH2 0x13C3 PUSH1 0x0 DUP4 ADD DUP8 PUSH2 0x12F2 JUMP JUMPDEST PUSH2 0x13D0 PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1115 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x13E2 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x13F1 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD PUSH2 0x143E PUSH1 0x0 DUP7 ADD DUP3 PUSH2 0xF7F JUMP JUMPDEST POP PUSH1 0x20 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH2 0x1456 DUP3 DUP3 PUSH2 0x1063 JUMP JUMPDEST SWAP2 POP POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP4 ADD PUSH1 0x0 DUP4 ADD MLOAD DUP5 DUP3 SUB PUSH1 0x0 DUP7 ADD MSTORE PUSH2 0x1480 DUP3 DUP3 PUSH2 0x1426 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x1495 PUSH1 0x20 DUP7 ADD DUP3 PUSH2 0x11CF JUMP JUMPDEST POP DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14AC DUP4 DUP4 PUSH2 0x1463 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14CC DUP3 PUSH2 0x13FA JUMP JUMPDEST PUSH2 0x14D6 DUP2 DUP6 PUSH2 0x1405 JUMP JUMPDEST SWAP4 POP DUP4 PUSH1 0x20 DUP3 MUL DUP6 ADD PUSH2 0x14E8 DUP6 PUSH2 0x1416 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP6 DUP2 LT ISZERO PUSH2 0x1524 JUMPI DUP5 DUP5 SUB DUP10 MSTORE DUP2 MLOAD PUSH2 0x1505 DUP6 DUP3 PUSH2 0x14A0 JUMP JUMPDEST SWAP5 POP PUSH2 0x1510 DUP4 PUSH2 0x14B4 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP11 ADD SWAP10 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x14EC JUMP JUMPDEST POP DUP3 SWAP8 POP DUP8 SWAP6 POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1550 DUP2 DUP8 PUSH2 0x14C1 JUMP JUMPDEST SWAP1 POP PUSH2 0x155F PUSH1 0x20 DUP4 ADD DUP7 PUSH2 0x1290 JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1571 DUP2 DUP6 PUSH2 0x10D8 JUMP JUMPDEST SWAP1 POP PUSH2 0x1580 PUSH1 0x60 DUP4 ADD DUP5 PUSH2 0x1124 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASLIMIT CREATE SWAP15 SWAP6 0x26 SELFBALANCE SWAP13 0xB8 SWAP6 0xD7 0xCE 0xA7 DUP7 SLT DUP4 0xC3 0xC0 0xBB 0xA9 BLOCKHASH 0xB3 GAS STOP BASEFEE PUSH13 0x33D9EED6AB352464736F6C6343 STOP ADDMOD SIGNEXTEND STOP CALLER ", + "sourceMap": "119:2065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:372;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1572:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;565:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;223:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;930:258;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;314:245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1916:266;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1194:372;1412:7;;;;;;;;;;:36;;;1462:5;1481:6;1501:3;1518:11;1543:6;1412:147;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:372;;;;;:::o;1572:338::-;1769:7;;;;;;;;;;:33;;;1816:10;1840:8;1862:11;1887:6;1769:134;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1572:338;;;;:::o;565:359::-;770:7;;;;;;;;;;:25;;;809:16;839:6;859:3;876:11;901:6;770:147;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;565:359;;;;;:::o;223:84::-;;;;;;;;;;;;:::o;930:258::-;1118:7;;;;;;;;;;:27;;;1146:5;1153:6;1161:11;1174:6;1118:63;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;930:258;;;;:::o;314:245::-;489:7;;;;;;;;;;:16;;;506;524:6;532:11;545:6;489:63;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;314:245;;;;:::o;1916:266::-;2107:7;;;;;;;;;;:29;;;2137:6;2145:8;2155:11;2168:6;2107:68;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1916:266;;;;:::o;7:75:2:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:102;498:6;549:2;545:7;540:2;533:5;529:14;525:28;515:38;;457:102;;;:::o;565:180::-;613:77;610:1;603:88;710:4;707:1;700:15;734:4;731:1;724:15;751:281;834:27;856:4;834:27;:::i;:::-;826:6;822:40;964:6;952:10;949:22;928:18;916:10;913:34;910:62;907:88;;;975:18;;:::i;:::-;907:88;1015:10;1011:2;1004:22;794:238;751:281;;:::o;1038:129::-;1072:6;1099:20;;:::i;:::-;1089:30;;1128:33;1156:4;1148:6;1128:33;:::i;:::-;1038:129;;;:::o;1173:117::-;1282:1;1279;1272:12;1296:86;1331:7;1371:4;1364:5;1360:16;1349:27;;1296:86;;;:::o;1388:118::-;1459:22;1475:5;1459:22;:::i;:::-;1452:5;1449:33;1439:61;;1496:1;1493;1486:12;1439:61;1388:118;:::o;1512:135::-;1556:5;1594:6;1581:20;1572:29;;1610:31;1635:5;1610:31;:::i;:::-;1512:135;;;;:::o;1653:117::-;1762:1;1759;1752:12;1776:320;1862:4;1952:18;1944:6;1941:30;1938:56;;;1974:18;;:::i;:::-;1938:56;2024:4;2016:6;2012:17;2004:25;;2084:4;2078;2074:15;2066:23;;1776:320;;;:::o;2102:117::-;2211:1;2208;2201:12;2225:117;2334:1;2331;2324:12;2348:307;2409:4;2499:18;2491:6;2488:30;2485:56;;;2521:18;;:::i;:::-;2485:56;2559:29;2581:6;2559:29;:::i;:::-;2551:37;;2643:4;2637;2633:15;2625:23;;2348:307;;;:::o;2661:154::-;2745:6;2740:3;2735;2722:30;2807:1;2798:6;2793:3;2789:16;2782:27;2661:154;;;:::o;2821:410::-;2898:5;2923:65;2939:48;2980:6;2939:48;:::i;:::-;2923:65;:::i;:::-;2914:74;;3011:6;3004:5;2997:21;3049:4;3042:5;3038:16;3087:3;3078:6;3073:3;3069:16;3066:25;3063:112;;;3094:79;;:::i;:::-;3063:112;3184:41;3218:6;3213:3;3208;3184:41;:::i;:::-;2904:327;2821:410;;;;;:::o;3250:338::-;3305:5;3354:3;3347:4;3339:6;3335:17;3331:27;3321:122;;3362:79;;:::i;:::-;3321:122;3479:6;3466:20;3504:78;3578:3;3570:6;3563:4;3555:6;3551:17;3504:78;:::i;:::-;3495:87;;3311:277;3250:338;;;;:::o;3609:942::-;3714:5;3739:90;3755:73;3821:6;3755:73;:::i;:::-;3739:90;:::i;:::-;3730:99;;3849:5;3878:6;3871:5;3864:21;3912:4;3905:5;3901:16;3894:23;;3965:4;3957:6;3953:17;3945:6;3941:30;3994:3;3986:6;3983:15;3980:122;;;4013:79;;:::i;:::-;3980:122;4128:6;4111:434;4145:6;4140:3;4137:15;4111:434;;;4234:3;4221:17;4270:18;4257:11;4254:35;4251:122;;;4292:79;;:::i;:::-;4251:122;4416:11;4408:6;4404:24;4454:46;4496:3;4484:10;4454:46;:::i;:::-;4449:3;4442:59;4530:4;4525:3;4521:14;4514:21;;4187:358;;4171:4;4166:3;4162:14;4155:21;;4111:434;;;4115:21;3720:831;;3609:942;;;;;:::o;4572:388::-;4652:5;4701:3;4694:4;4686:6;4682:17;4678:27;4668:122;;4709:79;;:::i;:::-;4668:122;4826:6;4813:20;4851:103;4950:3;4942:6;4935:4;4927:6;4923:17;4851:103;:::i;:::-;4842:112;;4658:302;4572:388;;;;:::o;5002:778::-;5081:5;5125:4;5113:9;5108:3;5104:19;5100:30;5097:117;;;5133:79;;:::i;:::-;5097:117;5232:21;5248:4;5232:21;:::i;:::-;5223:30;;5315:1;5355:47;5398:3;5389:6;5378:9;5374:22;5355:47;:::i;:::-;5348:4;5341:5;5337:16;5330:73;5263:151;5505:2;5494:9;5490:18;5477:32;5536:18;5528:6;5525:30;5522:117;;;5558:79;;:::i;:::-;5522:117;5678:83;5757:3;5748:6;5737:9;5733:22;5678:83;:::i;:::-;5671:4;5664:5;5660:16;5653:109;5424:349;5002:778;;;;:::o;5786:77::-;5823:7;5852:5;5841:16;;5786:77;;;:::o;5869:122::-;5942:24;5960:5;5942:24;:::i;:::-;5935:5;5932:35;5922:63;;5981:1;5978;5971:12;5922:63;5869:122;:::o;5997:139::-;6043:5;6081:6;6068:20;6059:29;;6097:33;6124:5;6097:33;:::i;:::-;5997:139;;;;:::o;6142:101::-;6178:7;6218:18;6211:5;6207:30;6196:41;;6142:101;;;:::o;6249:120::-;6321:23;6338:5;6321:23;:::i;:::-;6314:5;6311:34;6301:62;;6359:1;6356;6349:12;6301:62;6249:120;:::o;6375:137::-;6420:5;6458:6;6445:20;6436:29;;6474:32;6500:5;6474:32;:::i;:::-;6375:137;;;;:::o;6518:1349::-;6672:6;6680;6688;6696;6704;6753:3;6741:9;6732:7;6728:23;6724:33;6721:120;;;6760:79;;:::i;:::-;6721:120;6908:1;6897:9;6893:17;6880:31;6938:18;6930:6;6927:30;6924:117;;;6960:79;;:::i;:::-;6924:117;7065:83;7140:7;7131:6;7120:9;7116:22;7065:83;:::i;:::-;7055:93;;6851:307;7197:2;7223:53;7268:7;7259:6;7248:9;7244:22;7223:53;:::i;:::-;7213:63;;7168:118;7325:2;7351:53;7396:7;7387:6;7376:9;7372:22;7351:53;:::i;:::-;7341:63;;7296:118;7481:2;7470:9;7466:18;7453:32;7512:18;7504:6;7501:30;7498:117;;;7534:79;;:::i;:::-;7498:117;7639:83;7714:7;7705:6;7694:9;7690:22;7639:83;:::i;:::-;7629:93;;7424:308;7771:3;7798:52;7842:7;7833:6;7822:9;7818:22;7798:52;:::i;:::-;7788:62;;7742:118;6518:1349;;;;;;;;:::o;7873:336::-;7975:4;8065:18;8057:6;8054:30;8051:56;;;8087:18;;:::i;:::-;8051:56;8137:4;8129:6;8125:17;8117:25;;8197:4;8191;8187:15;8179:23;;7873:336;;;:::o;8215:126::-;8252:7;8292:42;8285:5;8281:54;8270:65;;8215:126;;;:::o;8347:96::-;8384:7;8413:24;8431:5;8413:24;:::i;:::-;8402:35;;8347:96;;;:::o;8449:122::-;8522:24;8540:5;8522:24;:::i;:::-;8515:5;8512:35;8502:63;;8561:1;8558;8551:12;8502:63;8449:122;:::o;8577:139::-;8623:5;8661:6;8648:20;8639:29;;8677:33;8704:5;8677:33;:::i;:::-;8577:139;;;;:::o;8753:588::-;8827:5;8871:4;8859:9;8854:3;8850:19;8846:30;8843:117;;;8879:79;;:::i;:::-;8843:117;8978:21;8994:4;8978:21;:::i;:::-;8969:30;;9070:1;9110:49;9155:3;9146:6;9135:9;9131:22;9110:49;:::i;:::-;9103:4;9096:5;9092:16;9085:75;9009:162;9232:2;9273:49;9318:3;9309:6;9298:9;9294:22;9273:49;:::i;:::-;9266:4;9259:5;9255:16;9248:75;9181:153;8753:588;;;;:::o;9380:785::-;9501:5;9526:106;9542:89;9624:6;9542:89;:::i;:::-;9526:106;:::i;:::-;9517:115;;9652:5;9681:6;9674:5;9667:21;9715:4;9708:5;9704:16;9697:23;;9768:4;9760:6;9756:17;9748:6;9744:30;9797:3;9789:6;9786:15;9783:122;;;9816:79;;:::i;:::-;9783:122;9931:6;9914:245;9948:6;9943:3;9940:15;9914:245;;;10023:3;10052:62;10110:3;10098:10;10052:62;:::i;:::-;10047:3;10040:75;10144:4;10139:3;10135:14;10128:21;;9990:169;9974:4;9969:3;9965:14;9958:21;;9914:245;;;9918:21;9507:658;;9380:785;;;;;:::o;10204:420::-;10300:5;10349:3;10342:4;10334:6;10330:17;10326:27;10316:122;;10357:79;;:::i;:::-;10316:122;10474:6;10461:20;10499:119;10614:3;10606:6;10599:4;10591:6;10587:17;10499:119;:::i;:::-;10490:128;;10306:318;10204:420;;;;:::o;10630:93::-;10666:7;10706:10;10699:5;10695:22;10684:33;;10630:93;;;:::o;10729:120::-;10801:23;10818:5;10801:23;:::i;:::-;10794:5;10791:34;10781:62;;10839:1;10836;10829:12;10781:62;10729:120;:::o;10855:137::-;10900:5;10938:6;10925:20;10916:29;;10954:32;10980:5;10954:32;:::i;:::-;10855:137;;;;:::o;10998:1241::-;11162:6;11170;11178;11186;11235:3;11223:9;11214:7;11210:23;11206:33;11203:120;;;11242:79;;:::i;:::-;11203:120;11390:1;11379:9;11375:17;11362:31;11420:18;11412:6;11409:30;11406:117;;;11442:79;;:::i;:::-;11406:117;11547:103;11642:7;11633:6;11622:9;11618:22;11547:103;:::i;:::-;11537:113;;11333:327;11699:2;11725:52;11769:7;11760:6;11749:9;11745:22;11725:52;:::i;:::-;11715:62;;11670:117;11854:2;11843:9;11839:18;11826:32;11885:18;11877:6;11874:30;11871:117;;;11907:79;;:::i;:::-;11871:117;12012:83;12087:7;12078:6;12067:9;12063:22;12012:83;:::i;:::-;12002:93;;11797:308;12144:2;12170:52;12214:7;12205:6;12194:9;12190:22;12170:52;:::i;:::-;12160:62;;12115:117;10998:1241;;;;;;;:::o;12245:1129::-;12369:6;12377;12385;12393;12401;12450:3;12438:9;12429:7;12425:23;12421:33;12418:120;;;12457:79;;:::i;:::-;12418:120;12577:1;12602:53;12647:7;12638:6;12627:9;12623:22;12602:53;:::i;:::-;12592:63;;12548:117;12704:2;12730:53;12775:7;12766:6;12755:9;12751:22;12730:53;:::i;:::-;12720:63;;12675:118;12832:2;12858:53;12903:7;12894:6;12883:9;12879:22;12858:53;:::i;:::-;12848:63;;12803:118;12988:2;12977:9;12973:18;12960:32;13019:18;13011:6;13008:30;13005:117;;;13041:79;;:::i;:::-;13005:117;13146:83;13221:7;13212:6;13201:9;13197:22;13146:83;:::i;:::-;13136:93;;12931:308;13278:3;13305:52;13349:7;13340:6;13329:9;13325:22;13305:52;:::i;:::-;13295:62;;13249:118;12245:1129;;;;;;;;:::o;13380:60::-;13408:3;13429:5;13422:12;;13380:60;;;:::o;13446:142::-;13496:9;13529:53;13547:34;13556:24;13574:5;13556:24;:::i;:::-;13547:34;:::i;:::-;13529:53;:::i;:::-;13516:66;;13446:142;;;:::o;13594:126::-;13644:9;13677:37;13708:5;13677:37;:::i;:::-;13664:50;;13594:126;;;:::o;13726:141::-;13791:9;13824:37;13855:5;13824:37;:::i;:::-;13811:50;;13726:141;;;:::o;13873:161::-;13975:52;14021:5;13975:52;:::i;:::-;13970:3;13963:65;13873:161;;:::o;14040:252::-;14148:4;14186:2;14175:9;14171:18;14163:26;;14199:86;14282:1;14271:9;14267:17;14258:6;14199:86;:::i;:::-;14040:252;;;;:::o;14298:1203::-;14443:6;14451;14459;14467;14516:3;14504:9;14495:7;14491:23;14487:33;14484:120;;;14523:79;;:::i;:::-;14484:120;14671:1;14660:9;14656:17;14643:31;14701:18;14693:6;14690:30;14687:117;;;14723:79;;:::i;:::-;14687:117;14828:83;14903:7;14894:6;14883:9;14879:22;14828:83;:::i;:::-;14818:93;;14614:307;14960:2;14986:53;15031:7;15022:6;15011:9;15007:22;14986:53;:::i;:::-;14976:63;;14931:118;15116:2;15105:9;15101:18;15088:32;15147:18;15139:6;15136:30;15133:117;;;15169:79;;:::i;:::-;15133:117;15274:83;15349:7;15340:6;15329:9;15325:22;15274:83;:::i;:::-;15264:93;;15059:308;15406:2;15432:52;15476:7;15467:6;15456:9;15452:22;15432:52;:::i;:::-;15422:62;;15377:117;14298:1203;;;;;;;:::o;15507:983::-;15622:6;15630;15638;15646;15695:3;15683:9;15674:7;15670:23;15666:33;15663:120;;;15702:79;;:::i;:::-;15663:120;15822:1;15847:53;15892:7;15883:6;15872:9;15868:22;15847:53;:::i;:::-;15837:63;;15793:117;15949:2;15975:53;16020:7;16011:6;16000:9;15996:22;15975:53;:::i;:::-;15965:63;;15920:118;16105:2;16094:9;16090:18;16077:32;16136:18;16128:6;16125:30;16122:117;;;16158:79;;:::i;:::-;16122:117;16263:83;16338:7;16329:6;16318:9;16314:22;16263:83;:::i;:::-;16253:93;;16048:308;16395:2;16421:52;16465:7;16456:6;16445:9;16441:22;16421:52;:::i;:::-;16411:62;;16366:117;15507:983;;;;;;;:::o;16496:338::-;16600:4;16690:18;16682:6;16679:30;16676:56;;;16712:18;;:::i;:::-;16676:56;16762:4;16754:6;16750:17;16742:25;;16822:4;16816;16812:15;16804:23;;16496:338;;;:::o;16873:772::-;16949:5;16993:4;16981:9;16976:3;16972:19;16968:30;16965:117;;;17001:79;;:::i;:::-;16965:117;17100:21;17116:4;17100:21;:::i;:::-;17091:30;;17212:1;17201:9;17197:17;17184:31;17242:18;17234:6;17231:30;17228:117;;;17264:79;;:::i;:::-;17228:117;17384:79;17459:3;17450:6;17439:9;17435:22;17384:79;:::i;:::-;17377:4;17370:5;17366:16;17359:105;17131:344;17536:2;17577:49;17622:3;17613:6;17602:9;17598:22;17577:49;:::i;:::-;17570:4;17563:5;17559:16;17552:75;17485:153;16873:772;;;;:::o;17686:996::-;17809:5;17834:108;17850:91;17934:6;17850:91;:::i;:::-;17834:108;:::i;:::-;17825:117;;17962:5;17991:6;17984:5;17977:21;18025:4;18018:5;18014:16;18007:23;;18078:4;18070:6;18066:17;18058:6;18054:30;18107:3;18099:6;18096:15;18093:122;;;18126:79;;:::i;:::-;18093:122;18241:6;18224:452;18258:6;18253:3;18250:15;18224:452;;;18347:3;18334:17;18383:18;18370:11;18367:35;18364:122;;;18405:79;;:::i;:::-;18364:122;18529:11;18521:6;18517:24;18567:64;18627:3;18615:10;18567:64;:::i;:::-;18562:3;18555:77;18661:4;18656:3;18652:14;18645:21;;18300:376;;18284:4;18279:3;18275:14;18268:21;;18224:452;;;18228:21;17815:867;;17686:996;;;;;:::o;18723:424::-;18821:5;18870:3;18863:4;18855:6;18851:17;18847:27;18837:122;;18878:79;;:::i;:::-;18837:122;18995:6;18982:20;19020:121;19137:3;19129:6;19122:4;19114:6;19110:17;19020:121;:::i;:::-;19011:130;;18827:320;18723:424;;;;:::o;19153:1245::-;19319:6;19327;19335;19343;19392:3;19380:9;19371:7;19367:23;19363:33;19360:120;;;19399:79;;:::i;:::-;19360:120;19547:1;19536:9;19532:17;19519:31;19577:18;19569:6;19566:30;19563:117;;;19599:79;;:::i;:::-;19563:117;19704:105;19801:7;19792:6;19781:9;19777:22;19704:105;:::i;:::-;19694:115;;19490:329;19858:2;19884:52;19928:7;19919:6;19908:9;19904:22;19884:52;:::i;:::-;19874:62;;19829:117;20013:2;20002:9;19998:18;19985:32;20044:18;20036:6;20033:30;20030:117;;;20066:79;;:::i;:::-;20030:117;20171:83;20246:7;20237:6;20226:9;20222:22;20171:83;:::i;:::-;20161:93;;19956:308;20303:2;20329:52;20373:7;20364:6;20353:9;20349:22;20329:52;:::i;:::-;20319:62;;20274:117;19153:1245;;;;;;;:::o;20404:102::-;20477:22;20493:5;20477:22;:::i;:::-;20472:3;20465:35;20404:102;;:::o;20512:123::-;20588:6;20622:5;20616:12;20606:22;;20512:123;;;:::o;20641:183::-;20739:11;20773:6;20768:3;20761:19;20813:4;20808:3;20804:14;20789:29;;20641:183;;;;:::o;20830:141::-;20906:4;20929:3;20921:11;;20959:4;20954:3;20950:14;20942:22;;20830:141;;;:::o;20977:98::-;21028:6;21062:5;21056:12;21046:22;;20977:98;;;:::o;21081:158::-;21154:11;21188:6;21183:3;21176:19;21228:4;21223:3;21219:14;21204:29;;21081:158;;;;:::o;21245:307::-;21313:1;21323:113;21337:6;21334:1;21331:13;21323:113;;;21422:1;21417:3;21413:11;21407:18;21403:1;21398:3;21394:11;21387:39;21359:2;21356:1;21352:10;21347:15;;21323:113;;;21454:6;21451:1;21448:13;21445:101;;;21534:1;21525:6;21520:3;21516:16;21509:27;21445:101;21294:258;21245:307;;;:::o;21558:340::-;21634:3;21662:38;21694:5;21662:38;:::i;:::-;21716:60;21769:6;21764:3;21716:60;:::i;:::-;21709:67;;21785:52;21830:6;21825:3;21818:4;21811:5;21807:16;21785:52;:::i;:::-;21862:29;21884:6;21862:29;:::i;:::-;21857:3;21853:39;21846:46;;21638:260;21558:340;;;;:::o;21904:192::-;21991:10;22026:64;22086:3;22078:6;22026:64;:::i;:::-;22012:78;;21904:192;;;;:::o;22102:122::-;22181:4;22213;22208:3;22204:14;22196:22;;22102:122;;;:::o;22256:963::-;22383:3;22412:63;22469:5;22412:63;:::i;:::-;22491:85;22569:6;22564:3;22491:85;:::i;:::-;22484:92;;22602:3;22647:4;22639:6;22635:17;22630:3;22626:27;22677:65;22736:5;22677:65;:::i;:::-;22765:7;22796:1;22781:393;22806:6;22803:1;22800:13;22781:393;;;22877:9;22871:4;22867:20;22862:3;22855:33;22928:6;22922:13;22956:82;23033:4;23018:13;22956:82;:::i;:::-;22948:90;;23061:69;23123:6;23061:69;:::i;:::-;23051:79;;23159:4;23154:3;23150:14;23143:21;;22841:333;22828:1;22825;22821:9;22816:14;;22781:393;;;22785:14;23190:4;23183:11;;23210:3;23203:10;;22388:831;;;;;22256:963;;;;:::o;23293:667::-;23422:3;23458:4;23453:3;23449:14;23548:4;23541:5;23537:16;23531:23;23567:59;23620:4;23615:3;23611:14;23597:12;23567:59;:::i;:::-;23473:163;23722:4;23715:5;23711:16;23705:23;23775:3;23769:4;23765:14;23758:4;23753:3;23749:14;23742:38;23801:121;23917:4;23903:12;23801:121;:::i;:::-;23793:129;;23646:287;23950:4;23943:11;;23427:533;23293:667;;;;:::o;23966:118::-;24053:24;24071:5;24053:24;:::i;:::-;24048:3;24041:37;23966:118;;:::o;24090:115::-;24175:23;24192:5;24175:23;:::i;:::-;24170:3;24163:36;24090:115;;:::o;24211:1002::-;24534:4;24572:3;24561:9;24557:19;24549:27;;24622:9;24616:4;24612:20;24608:1;24597:9;24593:17;24586:47;24650:118;24763:4;24754:6;24650:118;:::i;:::-;24642:126;;24778:72;24846:2;24835:9;24831:18;24822:6;24778:72;:::i;:::-;24860;24928:2;24917:9;24913:18;24904:6;24860:72;:::i;:::-;24979:9;24973:4;24969:20;24964:2;24953:9;24949:18;24942:48;25007:118;25120:4;25111:6;25007:118;:::i;:::-;24999:126;;25135:71;25201:3;25190:9;25186:19;25177:6;25135:71;:::i;:::-;24211:1002;;;;;;;;:::o;25219:139::-;25311:6;25345:5;25339:12;25329:22;;25219:139;;;:::o;25364:209::-;25488:11;25522:6;25517:3;25510:19;25562:4;25557:3;25553:14;25538:29;;25364:209;;;;:::o;25579:157::-;25671:4;25694:3;25686:11;;25724:4;25719:3;25715:14;25707:22;;25579:157;;;:::o;25742:108::-;25819:24;25837:5;25819:24;:::i;:::-;25814:3;25807:37;25742:108;;:::o;25856:::-;25933:24;25951:5;25933:24;:::i;:::-;25928:3;25921:37;25856:108;;:::o;26028:511::-;26165:4;26160:3;26156:14;26264:4;26257:5;26253:16;26247:23;26283:63;26340:4;26335:3;26331:14;26317:12;26283:63;:::i;:::-;26180:176;26440:4;26433:5;26429:16;26423:23;26459:63;26516:4;26511:3;26507:14;26493:12;26459:63;:::i;:::-;26366:166;26134:405;26028:511;;:::o;26545:279::-;26664:10;26685:96;26777:3;26769:6;26685:96;:::i;:::-;26813:4;26808:3;26804:14;26790:28;;26545:279;;;;:::o;26830:138::-;26925:4;26957;26952:3;26948:14;26940:22;;26830:138;;;:::o;27036:932::-;27205:3;27234:79;27307:5;27234:79;:::i;:::-;27329:111;27433:6;27428:3;27329:111;:::i;:::-;27322:118;;27464:81;27539:5;27464:81;:::i;:::-;27568:7;27599:1;27584:359;27609:6;27606:1;27603:13;27584:359;;;27685:6;27679:13;27712:113;27821:3;27806:13;27712:113;:::i;:::-;27705:120;;27848:85;27926:6;27848:85;:::i;:::-;27838:95;;27644:299;27631:1;27628;27624:9;27619:14;;27584:359;;;27588:14;27959:3;27952:10;;27210:758;;;27036:932;;;;:::o;27974:115::-;28059:23;28076:5;28059:23;:::i;:::-;28054:3;28047:36;27974:115;;:::o;28095:967::-;28428:4;28466:3;28455:9;28451:19;28443:27;;28516:9;28510:4;28506:20;28502:1;28491:9;28487:17;28480:47;28544:158;28697:4;28688:6;28544:158;:::i;:::-;28536:166;;28712:70;28778:2;28767:9;28763:18;28754:6;28712:70;:::i;:::-;28829:9;28823:4;28819:20;28814:2;28803:9;28799:18;28792:48;28857:118;28970:4;28961:6;28857:118;:::i;:::-;28849:126;;28985:70;29051:2;29040:9;29036:18;29027:6;28985:70;:::i;:::-;28095:967;;;;;;;:::o;29068:118::-;29155:24;29173:5;29155:24;:::i;:::-;29150:3;29143:37;29068:118;;:::o;29192:831::-;29455:4;29493:3;29482:9;29478:19;29470:27;;29507:71;29575:1;29564:9;29560:17;29551:6;29507:71;:::i;:::-;29588:72;29656:2;29645:9;29641:18;29632:6;29588:72;:::i;:::-;29670;29738:2;29727:9;29723:18;29714:6;29670:72;:::i;:::-;29789:9;29783:4;29779:20;29774:2;29763:9;29759:18;29752:48;29817:118;29930:4;29921:6;29817:118;:::i;:::-;29809:126;;29945:71;30011:3;30000:9;29996:19;29987:6;29945:71;:::i;:::-;29192:831;;;;;;;;:::o;30029:891::-;30324:4;30362:3;30351:9;30347:19;30339:27;;30412:9;30406:4;30402:20;30398:1;30387:9;30383:17;30376:47;30440:118;30553:4;30544:6;30440:118;:::i;:::-;30432:126;;30568:72;30636:2;30625:9;30621:18;30612:6;30568:72;:::i;:::-;30687:9;30681:4;30677:20;30672:2;30661:9;30657:18;30650:48;30715:118;30828:4;30819:6;30715:118;:::i;:::-;30707:126;;30843:70;30909:2;30898:9;30894:18;30885:6;30843:70;:::i;:::-;30029:891;;;;;;;:::o;30926:720::-;31161:4;31199:3;31188:9;31184:19;31176:27;;31213:71;31281:1;31270:9;31266:17;31257:6;31213:71;:::i;:::-;31294:72;31362:2;31351:9;31347:18;31338:6;31294:72;:::i;:::-;31413:9;31407:4;31403:20;31398:2;31387:9;31383:18;31376:48;31441:118;31554:4;31545:6;31441:118;:::i;:::-;31433:126;;31569:70;31635:2;31624:9;31620:18;31611:6;31569:70;:::i;:::-;30926:720;;;;;;;:::o;31652:141::-;31746:6;31780:5;31774:12;31764:22;;31652:141;;;:::o;31799:211::-;31925:11;31959:6;31954:3;31947:19;31999:4;31994:3;31990:14;31975:29;;31799:211;;;;:::o;32016:159::-;32110:4;32133:3;32125:11;;32163:4;32158:3;32154:14;32146:22;;32016:159;;;:::o;32249:657::-;32368:3;32404:4;32399:3;32395:14;32494:4;32487:5;32483:16;32477:23;32513:59;32566:4;32561:3;32557:14;32543:12;32513:59;:::i;:::-;32419:163;32668:4;32661:5;32657:16;32651:23;32721:3;32715:4;32711:14;32704:4;32699:3;32695:14;32688:38;32747:121;32863:4;32849:12;32747:121;:::i;:::-;32739:129;;32592:287;32896:4;32889:11;;32373:533;32249:657;;;;:::o;32974:646::-;33087:3;33123:4;33118:3;33114:14;33214:4;33207:5;33203:16;33197:23;33267:3;33261:4;33257:14;33250:4;33245:3;33241:14;33234:38;33293:113;33401:4;33387:12;33293:113;:::i;:::-;33285:121;;33138:279;33501:4;33494:5;33490:16;33484:23;33520:63;33577:4;33572:3;33568:14;33554:12;33520:63;:::i;:::-;33427:166;33610:4;33603:11;;33092:528;32974:646;;;;:::o;33626:264::-;33749:10;33784:100;33880:3;33872:6;33784:100;:::i;:::-;33770:114;;33626:264;;;;:::o;33896:140::-;33993:4;34025;34020:3;34016:14;34008:22;;33896:140;;;:::o;34108:1127::-;34281:3;34310:81;34385:5;34310:81;:::i;:::-;34407:113;34513:6;34508:3;34407:113;:::i;:::-;34400:120;;34546:3;34591:4;34583:6;34579:17;34574:3;34570:27;34621:83;34698:5;34621:83;:::i;:::-;34727:7;34758:1;34743:447;34768:6;34765:1;34762:13;34743:447;;;34839:9;34833:4;34829:20;34824:3;34817:33;34890:6;34884:13;34918:118;35031:4;35016:13;34918:118;:::i;:::-;34910:126;;35059:87;35139:6;35059:87;:::i;:::-;35049:97;;35175:4;35170:3;35166:14;35159:21;;34803:387;34790:1;34787;34783:9;34778:14;;34743:447;;;34747:14;35206:4;35199:11;;35226:3;35219:10;;34286:949;;;;;34108:1127;;;;:::o;35241:975::-;35578:4;35616:3;35605:9;35601:19;35593:27;;35666:9;35660:4;35656:20;35652:1;35641:9;35637:17;35630:47;35694:162;35851:4;35842:6;35694:162;:::i;:::-;35686:170;;35866:70;35932:2;35921:9;35917:18;35908:6;35866:70;:::i;:::-;35983:9;35977:4;35973:20;35968:2;35957:9;35953:18;35946:48;36011:118;36124:4;36115:6;36011:118;:::i;:::-;36003:126;;36139:70;36205:2;36194:9;36190:18;36181:6;36139:70;:::i;:::-;35241:975;;;;;;;:::o" }, "gasEstimates": { "creation": { @@ -17715,2591 +17715,2571 @@ "legacyAssembly": { ".code": [ { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5303, "end": 7378, "name": "MSTORE", "source": 0 }, + { "begin": 119, "end": 2184, "name": "MSTORE", "source": 0 }, { - "begin": 5449, - "end": 5491, + "begin": 264, + "end": 306, "name": "PUSH", "source": 0, "value": "804" }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5416, "end": 5492, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "DUP1", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5416, "end": 5492, "name": "EXP", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "DUP2", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SLOAD", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "DUP2", "source": 0 }, + { "begin": 223, "end": 307, "name": "EXP", "source": 0 }, + { "begin": 223, "end": 307, "name": "DUP2", "source": 0 }, + { "begin": 223, "end": 307, "name": "SLOAD", "source": 0 }, + { "begin": 223, "end": 307, "name": "DUP2", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5416, "end": 5492, "name": "MUL", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "NOT", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "AND", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SWAP1", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "DUP4", "source": 0 }, + { "begin": 223, "end": 307, "name": "MUL", "source": 0 }, + { "begin": 223, "end": 307, "name": "NOT", "source": 0 }, + { "begin": 223, "end": 307, "name": "AND", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "DUP4", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5416, "end": 5492, "name": "AND", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "MUL", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "OR", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SWAP1", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SSTORE", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "POP", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "CALLVALUE", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "ISZERO", "source": 0 }, + { "begin": 223, "end": 307, "name": "AND", "source": 0 }, + { "begin": 223, "end": 307, "name": "MUL", "source": 0 }, + { "begin": 223, "end": 307, "name": "OR", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "SSTORE", "source": 0 }, + { "begin": 223, "end": 307, "name": "POP", "source": 0 }, + { "begin": 119, "end": 2184, "name": "CALLVALUE", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "ISZERO", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "REVERT", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "REVERT", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "tag", "source": 0, "value": "1" }, - { "begin": 5303, "end": 7378, "name": "JUMPDEST", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "POP", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPDEST", "source": 0 }, + { "begin": 119, "end": 2184, "name": "POP", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH #[$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [$]", "source": 0, "value": "0000000000000000000000000000000000000000000000000000000000000000" }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5303, "end": 7378, "name": "CODECOPY", "source": 0 }, + { "begin": 119, "end": 2184, "name": "CODECOPY", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5303, "end": 7378, "name": "RETURN", "source": 0 } + { "begin": 119, "end": 2184, "name": "RETURN", "source": 0 } ], ".data": { "0": { - ".auxdata": "a264697066735822122032dfb9c750567e10ba5fcf6b460f97ca764c58029ec0ed48d16954288648a94764736f6c634300080b0033", + ".auxdata": "a264697066735822122045f09e9526479cb895d7cea7861283c3c0bba940b35a00486c33d9eed6ab352464736f6c634300080b0033", ".code": [ { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "80" }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5303, "end": 7378, "name": "MSTORE", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "CALLVALUE", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "ISZERO", "source": 0 }, + { "begin": 119, "end": 2184, "name": "MSTORE", "source": 0 }, + { "begin": 119, "end": 2184, "name": "CALLVALUE", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "ISZERO", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "1" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "REVERT", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "REVERT", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "tag", "source": 0, "value": "1" }, - { "begin": 5303, "end": 7378, "name": "JUMPDEST", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "POP", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPDEST", "source": 0 }, + { "begin": 119, "end": 2184, "name": "POP", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "4" }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "LT", "source": 0 }, + { "begin": 119, "end": 2184, "name": "LT", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "CALLDATALOAD", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 5303, "end": 7378, "name": "SHR", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "SHR", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "AF3DCEE8" }, - { "begin": 5303, "end": 7378, "name": "GT", "source": 0 }, + { "begin": 119, "end": 2184, "name": "GT", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "10" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "AF3DCEE8" }, - { "begin": 5303, "end": 7378, "name": "EQ", "source": 0 }, + { "begin": 119, "end": 2184, "name": "EQ", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "6" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "B38C60FA" }, - { "begin": 5303, "end": 7378, "name": "EQ", "source": 0 }, + { "begin": 119, "end": 2184, "name": "EQ", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "7" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "B9F813FF" }, - { "begin": 5303, "end": 7378, "name": "EQ", "source": 0 }, + { "begin": 119, "end": 2184, "name": "EQ", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "8" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "DAB20FDC" }, - { "begin": 5303, "end": 7378, "name": "EQ", "source": 0 }, + { "begin": 119, "end": 2184, "name": "EQ", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "9" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "2" }, - { "begin": 5303, "end": 7378, "name": "JUMP", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMP", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "tag", "source": 0, "value": "10" }, - { "begin": 5303, "end": 7378, "name": "JUMPDEST", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPDEST", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "89A570FC" }, - { "begin": 5303, "end": 7378, "name": "EQ", "source": 0 }, + { "begin": 119, "end": 2184, "name": "EQ", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "3" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "8A362D5C" }, - { "begin": 5303, "end": 7378, "name": "EQ", "source": 0 }, + { "begin": 119, "end": 2184, "name": "EQ", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "4" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "94F69115" }, - { "begin": 5303, "end": 7378, "name": "EQ", "source": 0 }, + { "begin": 119, "end": 2184, "name": "EQ", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH [tag]", "source": 0, "value": "5" }, - { "begin": 5303, "end": 7378, "name": "JUMPI", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPI", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "tag", "source": 0, "value": "2" }, - { "begin": 5303, "end": 7378, "name": "JUMPDEST", "source": 0 }, + { "begin": 119, "end": 2184, "name": "JUMPDEST", "source": 0 }, { - "begin": 5303, - "end": 7378, + "begin": 119, + "end": 2184, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5303, "end": 7378, "name": "DUP1", "source": 0 }, - { "begin": 5303, "end": 7378, "name": "REVERT", "source": 0 }, + { "begin": 119, "end": 2184, "name": "DUP1", "source": 0 }, + { "begin": 119, "end": 2184, "name": "REVERT", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "tag", "source": 0, "value": "3" }, - { "begin": 6418, "end": 6752, "name": "JUMPDEST", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "JUMPDEST", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "PUSH [tag]", "source": 0, "value": "11" }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6418, "end": 6752, "name": "DUP1", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "DUP1", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "SUB", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "DUP2", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "ADD", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "SWAP1", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "SUB", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "DUP2", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "ADD", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "SWAP1", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "PUSH [tag]", "source": 0, "value": "12" }, - { "begin": 6418, "end": 6752, "name": "SWAP2", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "SWAP1", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "SWAP2", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "SWAP1", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "PUSH [tag]", "source": 0, "value": "13" }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "tag", "source": 0, "value": "12" }, - { "begin": 6418, "end": 6752, "name": "JUMPDEST", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "JUMPDEST", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "PUSH [tag]", "source": 0, "value": "14" }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "tag", "source": 0, "value": "11" }, - { "begin": 6418, "end": 6752, "name": "JUMPDEST", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "STOP", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "JUMPDEST", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "STOP", "source": 0 }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "tag", "source": 0, "value": "4" }, - { "begin": 6761, "end": 7069, "name": "JUMPDEST", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "JUMPDEST", "source": 0 }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "PUSH [tag]", "source": 0, "value": "15" }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6761, "end": 7069, "name": "DUP1", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "DUP1", "source": 0 }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "SUB", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "DUP2", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "ADD", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "SWAP1", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "SUB", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "DUP2", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "ADD", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "SWAP1", "source": 0 }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "PUSH [tag]", "source": 0, "value": "16" }, - { "begin": 6761, "end": 7069, "name": "SWAP2", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "SWAP1", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "SWAP2", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "SWAP1", "source": 0 }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "PUSH [tag]", "source": 0, "value": "17" }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "tag", "source": 0, "value": "16" }, - { "begin": 6761, "end": 7069, "name": "JUMPDEST", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "JUMPDEST", "source": 0 }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "PUSH [tag]", "source": 0, "value": "18" }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "tag", "source": 0, "value": "15" }, - { "begin": 6761, "end": 7069, "name": "JUMPDEST", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "STOP", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "JUMPDEST", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "STOP", "source": 0 }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "tag", "source": 0, "value": "5" }, - { "begin": 5793, "end": 6114, "name": "JUMPDEST", "source": 0 }, + { "begin": 565, "end": 924, "name": "JUMPDEST", "source": 0 }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "PUSH [tag]", "source": 0, "value": "19" }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5793, "end": 6114, "name": "DUP1", "source": 0 }, + { "begin": 565, "end": 924, "name": "DUP1", "source": 0 }, + { "begin": 565, "end": 924, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 565, "end": 924, "name": "SUB", "source": 0 }, + { "begin": 565, "end": 924, "name": "DUP2", "source": 0 }, + { "begin": 565, "end": 924, "name": "ADD", "source": 0 }, + { "begin": 565, "end": 924, "name": "SWAP1", "source": 0 }, { - "begin": 5793, - "end": 6114, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 5793, "end": 6114, "name": "SUB", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "DUP2", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "ADD", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "SWAP1", "source": 0 }, - { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "PUSH [tag]", "source": 0, "value": "20" }, - { "begin": 5793, "end": 6114, "name": "SWAP2", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "SWAP1", "source": 0 }, + { "begin": 565, "end": 924, "name": "SWAP2", "source": 0 }, + { "begin": 565, "end": 924, "name": "SWAP1", "source": 0 }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "PUSH [tag]", "source": 0, "value": "21" }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "tag", "source": 0, "value": "20" }, - { "begin": 5793, "end": 6114, "name": "JUMPDEST", "source": 0 }, + { "begin": 565, "end": 924, "name": "JUMPDEST", "source": 0 }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "PUSH [tag]", "source": 0, "value": "22" }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "tag", "source": 0, "value": "19" }, - { "begin": 5793, "end": 6114, "name": "JUMPDEST", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "STOP", "source": 0 }, + { "begin": 565, "end": 924, "name": "JUMPDEST", "source": 0 }, + { "begin": 565, "end": 924, "name": "STOP", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "tag", "source": 0, "value": "6" }, - { "begin": 5416, "end": 5492, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 307, "name": "JUMPDEST", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH [tag]", "source": 0, "value": "23" }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH [tag]", "source": 0, "value": "24" }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "tag", "source": 0, "value": "23" }, - { "begin": 5416, "end": 5492, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 307, "name": "JUMPDEST", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5416, "end": 5492, "name": "MLOAD", "source": 0 }, + { "begin": 223, "end": 307, "name": "MLOAD", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH [tag]", "source": 0, "value": "25" }, - { "begin": 5416, "end": 5492, "name": "SWAP2", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SWAP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP2", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP1", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH [tag]", "source": 0, "value": "26" }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "tag", "source": 0, "value": "25" }, - { "begin": 5416, "end": 5492, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 307, "name": "JUMPDEST", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5416, "end": 5492, "name": "MLOAD", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "DUP1", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SWAP2", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SUB", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SWAP1", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "RETURN", "source": 0 }, + { "begin": 223, "end": 307, "name": "MLOAD", "source": 0 }, + { "begin": 223, "end": 307, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP2", "source": 0 }, + { "begin": 223, "end": 307, "name": "SUB", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "RETURN", "source": 0 }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "tag", "source": 0, "value": "7" }, - { "begin": 6123, "end": 6409, "name": "JUMPDEST", "source": 0 }, + { "begin": 930, "end": 1188, "name": "JUMPDEST", "source": 0 }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "PUSH [tag]", "source": 0, "value": "27" }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6123, "end": 6409, "name": "DUP1", "source": 0 }, + { "begin": 930, "end": 1188, "name": "DUP1", "source": 0 }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "SUB", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "DUP2", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "ADD", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "SWAP1", "source": 0 }, + { "begin": 930, "end": 1188, "name": "SUB", "source": 0 }, + { "begin": 930, "end": 1188, "name": "DUP2", "source": 0 }, + { "begin": 930, "end": 1188, "name": "ADD", "source": 0 }, + { "begin": 930, "end": 1188, "name": "SWAP1", "source": 0 }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "PUSH [tag]", "source": 0, "value": "28" }, - { "begin": 6123, "end": 6409, "name": "SWAP2", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "SWAP1", "source": 0 }, + { "begin": 930, "end": 1188, "name": "SWAP2", "source": 0 }, + { "begin": 930, "end": 1188, "name": "SWAP1", "source": 0 }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "PUSH [tag]", "source": 0, "value": "29" }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "tag", "source": 0, "value": "28" }, - { "begin": 6123, "end": 6409, "name": "JUMPDEST", "source": 0 }, + { "begin": 930, "end": 1188, "name": "JUMPDEST", "source": 0 }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "PUSH [tag]", "source": 0, "value": "30" }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "tag", "source": 0, "value": "27" }, - { "begin": 6123, "end": 6409, "name": "JUMPDEST", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "STOP", "source": 0 }, + { "begin": 930, "end": 1188, "name": "JUMPDEST", "source": 0 }, + { "begin": 930, "end": 1188, "name": "STOP", "source": 0 }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "tag", "source": 0, "value": "8" }, - { "begin": 5511, "end": 5784, "name": "JUMPDEST", "source": 0 }, + { "begin": 314, "end": 559, "name": "JUMPDEST", "source": 0 }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "PUSH [tag]", "source": 0, "value": "31" }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5511, "end": 5784, "name": "DUP1", "source": 0 }, + { "begin": 314, "end": 559, "name": "DUP1", "source": 0 }, + { "begin": 314, "end": 559, "name": "CALLDATASIZE", "source": 0 }, + { "begin": 314, "end": 559, "name": "SUB", "source": 0 }, + { "begin": 314, "end": 559, "name": "DUP2", "source": 0 }, + { "begin": 314, "end": 559, "name": "ADD", "source": 0 }, + { "begin": 314, "end": 559, "name": "SWAP1", "source": 0 }, { - "begin": 5511, - "end": 5784, - "name": "CALLDATASIZE", - "source": 0 - }, - { "begin": 5511, "end": 5784, "name": "SUB", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "DUP2", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "ADD", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "SWAP1", "source": 0 }, - { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "PUSH [tag]", "source": 0, "value": "32" }, - { "begin": 5511, "end": 5784, "name": "SWAP2", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "SWAP1", "source": 0 }, + { "begin": 314, "end": 559, "name": "SWAP2", "source": 0 }, + { "begin": 314, "end": 559, "name": "SWAP1", "source": 0 }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "PUSH [tag]", "source": 0, "value": "33" }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "tag", "source": 0, "value": "32" }, - { "begin": 5511, "end": 5784, "name": "JUMPDEST", "source": 0 }, + { "begin": 314, "end": 559, "name": "JUMPDEST", "source": 0 }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "PUSH [tag]", "source": 0, "value": "34" }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "tag", "source": 0, "value": "31" }, - { "begin": 5511, "end": 5784, "name": "JUMPDEST", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "STOP", "source": 0 }, + { "begin": 314, "end": 559, "name": "JUMPDEST", "source": 0 }, + { "begin": 314, "end": 559, "name": "STOP", "source": 0 }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "tag", "source": 0, "value": "9" }, - { "begin": 7078, "end": 7372, "name": "JUMPDEST", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "JUMPDEST", "source": 0 }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "PUSH [tag]", "source": 0, "value": "35" }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 7078, "end": 7372, "name": "DUP1", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "DUP1", "source": 0 }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "CALLDATASIZE", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "SUB", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "DUP2", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "ADD", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "SWAP1", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "SUB", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "DUP2", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "ADD", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "SWAP1", "source": 0 }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "PUSH [tag]", "source": 0, "value": "36" }, - { "begin": 7078, "end": 7372, "name": "SWAP2", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "SWAP1", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "SWAP2", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "SWAP1", "source": 0 }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "PUSH [tag]", "source": 0, "value": "37" }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "tag", "source": 0, "value": "36" }, - { "begin": 7078, "end": 7372, "name": "JUMPDEST", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "JUMPDEST", "source": 0 }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "PUSH [tag]", "source": 0, "value": "38" }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "tag", "source": 0, "value": "35" }, - { "begin": 7078, "end": 7372, "name": "JUMPDEST", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "STOP", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "JUMPDEST", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "STOP", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "tag", "source": 0, "value": "14" }, - { "begin": 6418, "end": 6752, "name": "JUMPDEST", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "JUMPDEST", "source": 0 }, { - "begin": 6664, - "end": 6671, + "begin": 1412, + "end": 1419, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6664, "end": 6671, "name": "DUP1", "source": 0 }, - { "begin": 6664, "end": 6671, "name": "SLOAD", "source": 0 }, - { "begin": 6664, "end": 6671, "name": "SWAP1", "source": 0 }, + { "begin": 1412, "end": 1419, "name": "DUP1", "source": 0 }, + { "begin": 1412, "end": 1419, "name": "SLOAD", "source": 0 }, + { "begin": 1412, "end": 1419, "name": "SWAP1", "source": 0 }, { - "begin": 6664, - "end": 6671, + "begin": 1412, + "end": 1419, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6664, "end": 6671, "name": "EXP", "source": 0 }, - { "begin": 6664, "end": 6671, "name": "SWAP1", "source": 0 }, - { "begin": 6664, "end": 6671, "name": "DIV", "source": 0 }, + { "begin": 1412, "end": 1419, "name": "EXP", "source": 0 }, + { "begin": 1412, "end": 1419, "name": "SWAP1", "source": 0 }, + { "begin": 1412, "end": 1419, "name": "DIV", "source": 0 }, { - "begin": 6664, - "end": 6671, + "begin": 1412, + "end": 1419, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6664, "end": 6671, "name": "AND", "source": 0 }, + { "begin": 1412, "end": 1419, "name": "AND", "source": 0 }, { - "begin": 6664, - "end": 6700, + "begin": 1412, + "end": 1448, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6664, "end": 6700, "name": "AND", "source": 0 }, + { "begin": 1412, "end": 1448, "name": "AND", "source": 0 }, { - "begin": 6664, - "end": 6700, + "begin": 1412, + "end": 1448, "name": "PUSH", "source": 0, "value": "89A570FC" }, - { "begin": 6701, "end": 6706, "name": "DUP7", "source": 0 }, - { "begin": 6708, "end": 6714, "name": "DUP7", "source": 0 }, - { "begin": 6716, "end": 6719, "name": "DUP7", "source": 0 }, - { "begin": 6721, "end": 6732, "name": "DUP7", "source": 0 }, - { "begin": 6734, "end": 6740, "name": "DUP7", "source": 0 }, + { "begin": 1462, "end": 1467, "name": "DUP7", "source": 0 }, + { "begin": 1481, "end": 1487, "name": "DUP7", "source": 0 }, + { "begin": 1501, "end": 1504, "name": "DUP7", "source": 0 }, + { "begin": 1518, "end": 1529, "name": "DUP7", "source": 0 }, + { "begin": 1543, "end": 1549, "name": "DUP7", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6664, "end": 6741, "name": "MLOAD", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP7", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "MLOAD", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP7", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 6664, "end": 6741, "name": "AND", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "AND", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 6664, "end": 6741, "name": "SHL", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP2", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "MSTORE", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SHL", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP2", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "MSTORE", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6664, "end": 6741, "name": "ADD", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "ADD", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH [tag]", "source": 0, "value": "40" }, - { "begin": 6664, "end": 6741, "name": "SWAP6", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "SWAP5", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "SWAP4", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "SWAP3", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "SWAP2", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "SWAP1", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SWAP6", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SWAP5", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SWAP4", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SWAP3", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SWAP2", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SWAP1", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH [tag]", "source": 0, "value": "41" }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "tag", "source": 0, "value": "40" }, - { "begin": 6664, "end": 6741, "name": "JUMPDEST", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "JUMPDEST", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6664, "end": 6741, "name": "MLOAD", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP1", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP4", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "SUB", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP2", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "MLOAD", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP1", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP4", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "SUB", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP2", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6664, "end": 6741, "name": "DUP8", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP1", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP8", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP1", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "ISZERO", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP1", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "ISZERO", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "ISZERO", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP1", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "ISZERO", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH [tag]", "source": 0, "value": "42" }, - { "begin": 6664, "end": 6741, "name": "JUMPI", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "JUMPI", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6664, "end": 6741, "name": "DUP1", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "REVERT", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP1", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "REVERT", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "tag", "source": 0, "value": "42" }, - { "begin": 6664, "end": 6741, "name": "JUMPDEST", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "POP", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "GAS", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "CALL", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "ISZERO", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "DUP1", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "ISZERO", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "JUMPDEST", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "POP", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "GAS", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "CALL", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "ISZERO", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP1", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "ISZERO", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH [tag]", "source": 0, "value": "44" }, - { "begin": 6664, "end": 6741, "name": "JUMPI", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "JUMPI", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6664, "end": 6741, "name": "DUP1", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "DUP1", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6664, "end": 6741, "name": "REVERT", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "REVERT", "source": 0 }, { - "begin": 6664, - "end": 6741, + "begin": 1412, + "end": 1559, "name": "tag", "source": 0, "value": "44" }, - { "begin": 6664, "end": 6741, "name": "JUMPDEST", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "POP", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "POP", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "POP", "source": 0 }, - { "begin": 6664, "end": 6741, "name": "POP", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "POP", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "POP", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "POP", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "POP", "source": 0 }, - { "begin": 6418, "end": 6752, "name": "POP", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "JUMPDEST", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "POP", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "POP", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "POP", "source": 0 }, + { "begin": 1412, "end": 1559, "name": "POP", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "POP", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "POP", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "POP", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "POP", "source": 0 }, + { "begin": 1194, "end": 1566, "name": "POP", "source": 0 }, { - "begin": 6418, - "end": 6752, + "begin": 1194, + "end": 1566, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "tag", "source": 0, "value": "18" }, - { "begin": 6761, "end": 7069, "name": "JUMPDEST", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "JUMPDEST", "source": 0 }, { - "begin": 6982, - "end": 6989, + "begin": 1769, + "end": 1776, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6982, "end": 6989, "name": "DUP1", "source": 0 }, - { "begin": 6982, "end": 6989, "name": "SLOAD", "source": 0 }, - { "begin": 6982, "end": 6989, "name": "SWAP1", "source": 0 }, + { "begin": 1769, "end": 1776, "name": "DUP1", "source": 0 }, + { "begin": 1769, "end": 1776, "name": "SLOAD", "source": 0 }, + { "begin": 1769, "end": 1776, "name": "SWAP1", "source": 0 }, { - "begin": 6982, - "end": 6989, + "begin": 1769, + "end": 1776, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6982, "end": 6989, "name": "EXP", "source": 0 }, - { "begin": 6982, "end": 6989, "name": "SWAP1", "source": 0 }, - { "begin": 6982, "end": 6989, "name": "DIV", "source": 0 }, + { "begin": 1769, "end": 1776, "name": "EXP", "source": 0 }, + { "begin": 1769, "end": 1776, "name": "SWAP1", "source": 0 }, + { "begin": 1769, "end": 1776, "name": "DIV", "source": 0 }, { - "begin": 6982, - "end": 6989, + "begin": 1769, + "end": 1776, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6982, "end": 6989, "name": "AND", "source": 0 }, + { "begin": 1769, "end": 1776, "name": "AND", "source": 0 }, { - "begin": 6982, - "end": 7015, + "begin": 1769, + "end": 1802, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6982, "end": 7015, "name": "AND", "source": 0 }, + { "begin": 1769, "end": 1802, "name": "AND", "source": 0 }, { - "begin": 6982, - "end": 7015, + "begin": 1769, + "end": 1802, "name": "PUSH", "source": 0, "value": "8A362D5C" }, - { "begin": 7016, "end": 7026, "name": "DUP6", "source": 0 }, - { "begin": 7028, "end": 7036, "name": "DUP6", "source": 0 }, - { "begin": 7038, "end": 7049, "name": "DUP6", "source": 0 }, - { "begin": 7051, "end": 7057, "name": "DUP6", "source": 0 }, + { "begin": 1816, "end": 1826, "name": "DUP6", "source": 0 }, + { "begin": 1840, "end": 1848, "name": "DUP6", "source": 0 }, + { "begin": 1862, "end": 1873, "name": "DUP6", "source": 0 }, + { "begin": 1887, "end": 1893, "name": "DUP6", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6982, "end": 7058, "name": "MLOAD", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP6", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "MLOAD", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP6", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 6982, "end": 7058, "name": "AND", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "AND", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 6982, "end": 7058, "name": "SHL", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP2", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "MSTORE", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "SHL", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP2", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "MSTORE", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6982, "end": 7058, "name": "ADD", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "ADD", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH [tag]", "source": 0, "value": "46" }, - { "begin": 6982, "end": 7058, "name": "SWAP5", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "SWAP4", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "SWAP3", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "SWAP2", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "SWAP1", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "SWAP5", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "SWAP4", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "SWAP3", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "SWAP2", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "SWAP1", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH [tag]", "source": 0, "value": "47" }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "tag", "source": 0, "value": "46" }, - { "begin": 6982, "end": 7058, "name": "JUMPDEST", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "JUMPDEST", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6982, "end": 7058, "name": "MLOAD", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP1", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP4", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "SUB", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP2", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "MLOAD", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP1", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP4", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "SUB", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP2", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6982, "end": 7058, "name": "DUP8", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP1", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP8", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP1", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "ISZERO", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP1", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "ISZERO", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "ISZERO", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP1", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "ISZERO", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH [tag]", "source": 0, "value": "48" }, - { "begin": 6982, "end": 7058, "name": "JUMPI", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "JUMPI", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6982, "end": 7058, "name": "DUP1", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "REVERT", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP1", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "REVERT", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "tag", "source": 0, "value": "48" }, - { "begin": 6982, "end": 7058, "name": "JUMPDEST", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "POP", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "GAS", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "CALL", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "ISZERO", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "DUP1", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "ISZERO", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "JUMPDEST", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "POP", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "GAS", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "CALL", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "ISZERO", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP1", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "ISZERO", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH [tag]", "source": 0, "value": "50" }, - { "begin": 6982, "end": 7058, "name": "JUMPI", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "JUMPI", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6982, "end": 7058, "name": "DUP1", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "DUP1", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6982, "end": 7058, "name": "REVERT", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "REVERT", "source": 0 }, { - "begin": 6982, - "end": 7058, + "begin": 1769, + "end": 1903, "name": "tag", "source": 0, "value": "50" }, - { "begin": 6982, "end": 7058, "name": "JUMPDEST", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "POP", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "POP", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "POP", "source": 0 }, - { "begin": 6982, "end": 7058, "name": "POP", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "POP", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "POP", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "POP", "source": 0 }, - { "begin": 6761, "end": 7069, "name": "POP", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "JUMPDEST", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "POP", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "POP", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "POP", "source": 0 }, + { "begin": 1769, "end": 1903, "name": "POP", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "POP", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "POP", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "POP", "source": 0 }, + { "begin": 1572, "end": 1910, "name": "POP", "source": 0 }, { - "begin": 6761, - "end": 7069, + "begin": 1572, + "end": 1910, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "tag", "source": 0, "value": "22" }, - { "begin": 5793, "end": 6114, "name": "JUMPDEST", "source": 0 }, + { "begin": 565, "end": 924, "name": "JUMPDEST", "source": 0 }, { - "begin": 6026, - "end": 6033, + "begin": 770, + "end": 777, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6026, "end": 6033, "name": "DUP1", "source": 0 }, - { "begin": 6026, "end": 6033, "name": "SLOAD", "source": 0 }, - { "begin": 6026, "end": 6033, "name": "SWAP1", "source": 0 }, + { "begin": 770, "end": 777, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 777, "name": "SLOAD", "source": 0 }, + { "begin": 770, "end": 777, "name": "SWAP1", "source": 0 }, { - "begin": 6026, - "end": 6033, + "begin": 770, + "end": 777, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6026, "end": 6033, "name": "EXP", "source": 0 }, - { "begin": 6026, "end": 6033, "name": "SWAP1", "source": 0 }, - { "begin": 6026, "end": 6033, "name": "DIV", "source": 0 }, + { "begin": 770, "end": 777, "name": "EXP", "source": 0 }, + { "begin": 770, "end": 777, "name": "SWAP1", "source": 0 }, + { "begin": 770, "end": 777, "name": "DIV", "source": 0 }, { - "begin": 6026, - "end": 6033, + "begin": 770, + "end": 777, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6026, "end": 6033, "name": "AND", "source": 0 }, + { "begin": 770, "end": 777, "name": "AND", "source": 0 }, { - "begin": 6026, - "end": 6051, + "begin": 770, + "end": 795, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6026, "end": 6051, "name": "AND", "source": 0 }, + { "begin": 770, "end": 795, "name": "AND", "source": 0 }, { - "begin": 6026, - "end": 6051, + "begin": 770, + "end": 795, "name": "PUSH", "source": 0, "value": "94F69115" }, - { "begin": 6052, "end": 6068, "name": "DUP7", "source": 0 }, - { "begin": 6070, "end": 6076, "name": "DUP7", "source": 0 }, - { "begin": 6078, "end": 6081, "name": "DUP7", "source": 0 }, - { "begin": 6083, "end": 6094, "name": "DUP7", "source": 0 }, - { "begin": 6096, "end": 6102, "name": "DUP7", "source": 0 }, + { "begin": 809, "end": 825, "name": "DUP7", "source": 0 }, + { "begin": 839, "end": 845, "name": "DUP7", "source": 0 }, + { "begin": 859, "end": 862, "name": "DUP7", "source": 0 }, + { "begin": 876, "end": 887, "name": "DUP7", "source": 0 }, + { "begin": 901, "end": 907, "name": "DUP7", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6026, "end": 6103, "name": "MLOAD", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP7", "source": 0 }, + { "begin": 770, "end": 917, "name": "MLOAD", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP7", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 6026, "end": 6103, "name": "AND", "source": 0 }, + { "begin": 770, "end": 917, "name": "AND", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 6026, "end": 6103, "name": "SHL", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP2", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "MSTORE", "source": 0 }, + { "begin": 770, "end": 917, "name": "SHL", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP2", "source": 0 }, + { "begin": 770, "end": 917, "name": "MSTORE", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6026, "end": 6103, "name": "ADD", "source": 0 }, + { "begin": 770, "end": 917, "name": "ADD", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH [tag]", "source": 0, "value": "52" }, - { "begin": 6026, "end": 6103, "name": "SWAP6", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "SWAP5", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "SWAP4", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "SWAP3", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "SWAP2", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "SWAP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "SWAP6", "source": 0 }, + { "begin": 770, "end": 917, "name": "SWAP5", "source": 0 }, + { "begin": 770, "end": 917, "name": "SWAP4", "source": 0 }, + { "begin": 770, "end": 917, "name": "SWAP3", "source": 0 }, + { "begin": 770, "end": 917, "name": "SWAP2", "source": 0 }, + { "begin": 770, "end": 917, "name": "SWAP1", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH [tag]", "source": 0, "value": "53" }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "tag", "source": 0, "value": "52" }, - { "begin": 6026, "end": 6103, "name": "JUMPDEST", "source": 0 }, + { "begin": 770, "end": 917, "name": "JUMPDEST", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6026, "end": 6103, "name": "MLOAD", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP1", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP4", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "SUB", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP2", "source": 0 }, + { "begin": 770, "end": 917, "name": "MLOAD", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP4", "source": 0 }, + { "begin": 770, "end": 917, "name": "SUB", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP2", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6026, "end": 6103, "name": "DUP8", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP8", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 770, "end": 917, "name": "ISZERO", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "ISZERO", "source": 0 }, { - "begin": 6026, - "end": 6103, - "name": "EXTCODESIZE", - "source": 0 - }, - { "begin": 6026, "end": 6103, "name": "ISZERO", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP1", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "ISZERO", "source": 0 }, - { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH [tag]", "source": 0, "value": "54" }, - { "begin": 6026, "end": 6103, "name": "JUMPI", "source": 0 }, + { "begin": 770, "end": 917, "name": "JUMPI", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6026, "end": 6103, "name": "DUP1", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "REVERT", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "REVERT", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "tag", "source": 0, "value": "54" }, - { "begin": 6026, "end": 6103, "name": "JUMPDEST", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "POP", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "GAS", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "CALL", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "ISZERO", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "DUP1", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "ISZERO", "source": 0 }, + { "begin": 770, "end": 917, "name": "JUMPDEST", "source": 0 }, + { "begin": 770, "end": 917, "name": "POP", "source": 0 }, + { "begin": 770, "end": 917, "name": "GAS", "source": 0 }, + { "begin": 770, "end": 917, "name": "CALL", "source": 0 }, + { "begin": 770, "end": 917, "name": "ISZERO", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "ISZERO", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH [tag]", "source": 0, "value": "56" }, - { "begin": 6026, "end": 6103, "name": "JUMPI", "source": 0 }, + { "begin": 770, "end": 917, "name": "JUMPI", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6026, "end": 6103, "name": "DUP1", "source": 0 }, + { "begin": 770, "end": 917, "name": "DUP1", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6026, "end": 6103, "name": "REVERT", "source": 0 }, + { "begin": 770, "end": 917, "name": "REVERT", "source": 0 }, { - "begin": 6026, - "end": 6103, + "begin": 770, + "end": 917, "name": "tag", "source": 0, "value": "56" }, - { "begin": 6026, "end": 6103, "name": "JUMPDEST", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "POP", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "POP", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "POP", "source": 0 }, - { "begin": 6026, "end": 6103, "name": "POP", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "POP", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "POP", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "POP", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "POP", "source": 0 }, - { "begin": 5793, "end": 6114, "name": "POP", "source": 0 }, + { "begin": 770, "end": 917, "name": "JUMPDEST", "source": 0 }, + { "begin": 770, "end": 917, "name": "POP", "source": 0 }, + { "begin": 770, "end": 917, "name": "POP", "source": 0 }, + { "begin": 770, "end": 917, "name": "POP", "source": 0 }, + { "begin": 770, "end": 917, "name": "POP", "source": 0 }, + { "begin": 565, "end": 924, "name": "POP", "source": 0 }, + { "begin": 565, "end": 924, "name": "POP", "source": 0 }, + { "begin": 565, "end": 924, "name": "POP", "source": 0 }, + { "begin": 565, "end": 924, "name": "POP", "source": 0 }, + { "begin": 565, "end": 924, "name": "POP", "source": 0 }, { - "begin": 5793, - "end": 6114, + "begin": 565, + "end": 924, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "tag", "source": 0, "value": "24" }, - { "begin": 5416, "end": 5492, "name": "JUMPDEST", "source": 0 }, + { "begin": 223, "end": 307, "name": "JUMPDEST", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5416, "end": 5492, "name": "DUP1", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SLOAD", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SWAP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "DUP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "SLOAD", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP1", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5416, "end": 5492, "name": "EXP", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "SWAP1", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "DIV", "source": 0 }, + { "begin": 223, "end": 307, "name": "EXP", "source": 0 }, + { "begin": 223, "end": 307, "name": "SWAP1", "source": 0 }, + { "begin": 223, "end": 307, "name": "DIV", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5416, "end": 5492, "name": "AND", "source": 0 }, - { "begin": 5416, "end": 5492, "name": "DUP2", "source": 0 }, + { "begin": 223, "end": 307, "name": "AND", "source": 0 }, + { "begin": 223, "end": 307, "name": "DUP2", "source": 0 }, { - "begin": 5416, - "end": 5492, + "begin": 223, + "end": 307, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "tag", "source": 0, "value": "30" }, - { "begin": 6123, "end": 6409, "name": "JUMPDEST", "source": 0 }, + { "begin": 930, "end": 1188, "name": "JUMPDEST", "source": 0 }, { - "begin": 6335, - "end": 6342, + "begin": 1118, + "end": 1125, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6335, "end": 6342, "name": "DUP1", "source": 0 }, - { "begin": 6335, "end": 6342, "name": "SLOAD", "source": 0 }, - { "begin": 6335, "end": 6342, "name": "SWAP1", "source": 0 }, + { "begin": 1118, "end": 1125, "name": "DUP1", "source": 0 }, + { "begin": 1118, "end": 1125, "name": "SLOAD", "source": 0 }, + { "begin": 1118, "end": 1125, "name": "SWAP1", "source": 0 }, { - "begin": 6335, - "end": 6342, + "begin": 1118, + "end": 1125, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 6335, "end": 6342, "name": "EXP", "source": 0 }, - { "begin": 6335, "end": 6342, "name": "SWAP1", "source": 0 }, - { "begin": 6335, "end": 6342, "name": "DIV", "source": 0 }, + { "begin": 1118, "end": 1125, "name": "EXP", "source": 0 }, + { "begin": 1118, "end": 1125, "name": "SWAP1", "source": 0 }, + { "begin": 1118, "end": 1125, "name": "DIV", "source": 0 }, { - "begin": 6335, - "end": 6342, + "begin": 1118, + "end": 1125, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6335, "end": 6342, "name": "AND", "source": 0 }, + { "begin": 1118, "end": 1125, "name": "AND", "source": 0 }, { - "begin": 6335, - "end": 6362, + "begin": 1118, + "end": 1145, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 6335, "end": 6362, "name": "AND", "source": 0 }, + { "begin": 1118, "end": 1145, "name": "AND", "source": 0 }, { - "begin": 6335, - "end": 6362, + "begin": 1118, + "end": 1145, "name": "PUSH", "source": 0, "value": "B38C60FA" }, - { "begin": 6363, "end": 6368, "name": "DUP6", "source": 0 }, - { "begin": 6370, "end": 6376, "name": "DUP6", "source": 0 }, - { "begin": 6378, "end": 6389, "name": "DUP6", "source": 0 }, - { "begin": 6391, "end": 6397, "name": "DUP6", "source": 0 }, + { "begin": 1146, "end": 1151, "name": "DUP6", "source": 0 }, + { "begin": 1153, "end": 1159, "name": "DUP6", "source": 0 }, + { "begin": 1161, "end": 1172, "name": "DUP6", "source": 0 }, + { "begin": 1174, "end": 1180, "name": "DUP6", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6335, "end": 6398, "name": "MLOAD", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP6", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "MLOAD", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP6", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 6335, "end": 6398, "name": "AND", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "AND", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 6335, "end": 6398, "name": "SHL", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP2", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "MSTORE", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "SHL", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP2", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "MSTORE", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 6335, "end": 6398, "name": "ADD", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "ADD", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH [tag]", "source": 0, "value": "58" }, - { "begin": 6335, "end": 6398, "name": "SWAP5", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "SWAP4", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "SWAP3", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "SWAP2", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "SWAP1", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "SWAP5", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "SWAP4", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "SWAP3", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "SWAP2", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "SWAP1", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH [tag]", "source": 0, "value": "59" }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "tag", "source": 0, "value": "58" }, - { "begin": 6335, "end": 6398, "name": "JUMPDEST", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "JUMPDEST", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 6335, "end": 6398, "name": "MLOAD", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP1", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP4", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "SUB", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP2", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "MLOAD", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP1", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP4", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "SUB", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP2", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6335, "end": 6398, "name": "DUP8", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP1", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP8", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP1", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "ISZERO", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP1", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "ISZERO", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "ISZERO", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP1", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "ISZERO", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH [tag]", "source": 0, "value": "60" }, - { "begin": 6335, "end": 6398, "name": "JUMPI", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "JUMPI", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6335, "end": 6398, "name": "DUP1", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "REVERT", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP1", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "REVERT", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "tag", "source": 0, "value": "60" }, - { "begin": 6335, "end": 6398, "name": "JUMPDEST", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "POP", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "GAS", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "CALL", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "ISZERO", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "DUP1", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "ISZERO", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "JUMPDEST", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "POP", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "GAS", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "CALL", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "ISZERO", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP1", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "ISZERO", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH [tag]", "source": 0, "value": "62" }, - { "begin": 6335, "end": 6398, "name": "JUMPI", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "JUMPI", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6335, "end": 6398, "name": "DUP1", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "DUP1", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 6335, "end": 6398, "name": "REVERT", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "REVERT", "source": 0 }, { - "begin": 6335, - "end": 6398, + "begin": 1118, + "end": 1181, "name": "tag", "source": 0, "value": "62" }, - { "begin": 6335, "end": 6398, "name": "JUMPDEST", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "POP", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "POP", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "POP", "source": 0 }, - { "begin": 6335, "end": 6398, "name": "POP", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "POP", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "POP", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "POP", "source": 0 }, - { "begin": 6123, "end": 6409, "name": "POP", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "JUMPDEST", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "POP", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "POP", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "POP", "source": 0 }, + { "begin": 1118, "end": 1181, "name": "POP", "source": 0 }, + { "begin": 930, "end": 1188, "name": "POP", "source": 0 }, + { "begin": 930, "end": 1188, "name": "POP", "source": 0 }, + { "begin": 930, "end": 1188, "name": "POP", "source": 0 }, + { "begin": 930, "end": 1188, "name": "POP", "source": 0 }, { - "begin": 6123, - "end": 6409, + "begin": 930, + "end": 1188, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 5511, - "end": 5784, + "begin": 314, + "end": 559, "name": "tag", "source": 0, "value": "34" }, - { "begin": 5511, "end": 5784, "name": "JUMPDEST", "source": 0 }, + { "begin": 314, "end": 559, "name": "JUMPDEST", "source": 0 }, { - "begin": 5710, - "end": 5717, + "begin": 489, + "end": 496, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5710, "end": 5717, "name": "DUP1", "source": 0 }, - { "begin": 5710, "end": 5717, "name": "SLOAD", "source": 0 }, - { "begin": 5710, "end": 5717, "name": "SWAP1", "source": 0 }, + { "begin": 489, "end": 496, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 496, "name": "SLOAD", "source": 0 }, + { "begin": 489, "end": 496, "name": "SWAP1", "source": 0 }, { - "begin": 5710, - "end": 5717, + "begin": 489, + "end": 496, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 5710, "end": 5717, "name": "EXP", "source": 0 }, - { "begin": 5710, "end": 5717, "name": "SWAP1", "source": 0 }, - { "begin": 5710, "end": 5717, "name": "DIV", "source": 0 }, + { "begin": 489, "end": 496, "name": "EXP", "source": 0 }, + { "begin": 489, "end": 496, "name": "SWAP1", "source": 0 }, + { "begin": 489, "end": 496, "name": "DIV", "source": 0 }, { - "begin": 5710, - "end": 5717, + "begin": 489, + "end": 496, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5710, "end": 5717, "name": "AND", "source": 0 }, + { "begin": 489, "end": 496, "name": "AND", "source": 0 }, { - "begin": 5710, - "end": 5726, + "begin": 489, + "end": 505, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 5710, "end": 5726, "name": "AND", "source": 0 }, + { "begin": 489, "end": 505, "name": "AND", "source": 0 }, { - "begin": 5710, - "end": 5726, + "begin": 489, + "end": 505, "name": "PUSH", "source": 0, "value": "B9F813FF" }, - { "begin": 5727, "end": 5743, "name": "DUP6", "source": 0 }, - { "begin": 5745, "end": 5751, "name": "DUP6", "source": 0 }, - { "begin": 5753, "end": 5764, "name": "DUP6", "source": 0 }, - { "begin": 5766, "end": 5772, "name": "DUP6", "source": 0 }, + { "begin": 506, "end": 522, "name": "DUP6", "source": 0 }, + { "begin": 524, "end": 530, "name": "DUP6", "source": 0 }, + { "begin": 532, "end": 543, "name": "DUP6", "source": 0 }, + { "begin": 545, "end": 551, "name": "DUP6", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5710, "end": 5773, "name": "MLOAD", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP6", "source": 0 }, + { "begin": 489, "end": 552, "name": "MLOAD", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP6", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 5710, "end": 5773, "name": "AND", "source": 0 }, + { "begin": 489, "end": 552, "name": "AND", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 5710, "end": 5773, "name": "SHL", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP2", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "MSTORE", "source": 0 }, + { "begin": 489, "end": 552, "name": "SHL", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP2", "source": 0 }, + { "begin": 489, "end": 552, "name": "MSTORE", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 5710, "end": 5773, "name": "ADD", "source": 0 }, + { "begin": 489, "end": 552, "name": "ADD", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH [tag]", "source": 0, "value": "64" }, - { "begin": 5710, "end": 5773, "name": "SWAP5", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "SWAP4", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "SWAP3", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "SWAP2", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "SWAP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "SWAP5", "source": 0 }, + { "begin": 489, "end": 552, "name": "SWAP4", "source": 0 }, + { "begin": 489, "end": 552, "name": "SWAP3", "source": 0 }, + { "begin": 489, "end": 552, "name": "SWAP2", "source": 0 }, + { "begin": 489, "end": 552, "name": "SWAP1", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH [tag]", "source": 0, "value": "65" }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "tag", "source": 0, "value": "64" }, - { "begin": 5710, "end": 5773, "name": "JUMPDEST", "source": 0 }, + { "begin": 489, "end": 552, "name": "JUMPDEST", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 5710, "end": 5773, "name": "MLOAD", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP1", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP4", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "SUB", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP2", "source": 0 }, + { "begin": 489, "end": 552, "name": "MLOAD", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP4", "source": 0 }, + { "begin": 489, "end": 552, "name": "SUB", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP2", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5710, "end": 5773, "name": "DUP8", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP8", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "EXTCODESIZE", "source": 0 }, + { "begin": 489, "end": 552, "name": "ISZERO", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "ISZERO", "source": 0 }, { - "begin": 5710, - "end": 5773, - "name": "EXTCODESIZE", - "source": 0 - }, - { "begin": 5710, "end": 5773, "name": "ISZERO", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP1", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "ISZERO", "source": 0 }, - { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH [tag]", "source": 0, "value": "66" }, - { "begin": 5710, "end": 5773, "name": "JUMPI", "source": 0 }, + { "begin": 489, "end": 552, "name": "JUMPI", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5710, "end": 5773, "name": "DUP1", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "REVERT", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "REVERT", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "tag", "source": 0, "value": "66" }, - { "begin": 5710, "end": 5773, "name": "JUMPDEST", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "POP", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "GAS", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "CALL", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "ISZERO", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "DUP1", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "ISZERO", "source": 0 }, + { "begin": 489, "end": 552, "name": "JUMPDEST", "source": 0 }, + { "begin": 489, "end": 552, "name": "POP", "source": 0 }, + { "begin": 489, "end": 552, "name": "GAS", "source": 0 }, + { "begin": 489, "end": 552, "name": "CALL", "source": 0 }, + { "begin": 489, "end": 552, "name": "ISZERO", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "ISZERO", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH [tag]", "source": 0, "value": "68" }, - { "begin": 5710, "end": 5773, "name": "JUMPI", "source": 0 }, + { "begin": 489, "end": 552, "name": "JUMPI", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5710, "end": 5773, "name": "DUP1", "source": 0 }, + { "begin": 489, "end": 552, "name": "DUP1", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 5710, "end": 5773, "name": "REVERT", "source": 0 }, + { "begin": 489, "end": 552, "name": "REVERT", "source": 0 }, { - "begin": 5710, - "end": 5773, + "begin": 489, + "end": 552, "name": "tag", "source": 0, "value": "68" }, - { "begin": 5710, "end": 5773, "name": "JUMPDEST", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "POP", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "POP", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "POP", "source": 0 }, - { "begin": 5710, "end": 5773, "name": "POP", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "POP", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "POP", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "POP", "source": 0 }, - { "begin": 5511, "end": 5784, "name": "POP", "source": 0 }, - { - "begin": 5511, - "end": 5784, + { "begin": 489, "end": 552, "name": "JUMPDEST", "source": 0 }, + { "begin": 489, "end": 552, "name": "POP", "source": 0 }, + { "begin": 489, "end": 552, "name": "POP", "source": 0 }, + { "begin": 489, "end": 552, "name": "POP", "source": 0 }, + { "begin": 489, "end": 552, "name": "POP", "source": 0 }, + { "begin": 314, "end": 559, "name": "POP", "source": 0 }, + { "begin": 314, "end": 559, "name": "POP", "source": 0 }, + { "begin": 314, "end": 559, "name": "POP", "source": 0 }, + { "begin": 314, "end": 559, "name": "POP", "source": 0 }, + { + "begin": 314, + "end": 559, "name": "JUMP", "source": 0, "value": "[out]" }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "tag", "source": 0, "value": "38" }, - { "begin": 7078, "end": 7372, "name": "JUMPDEST", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "JUMPDEST", "source": 0 }, { - "begin": 7293, - "end": 7300, + "begin": 2107, + "end": 2114, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7293, "end": 7300, "name": "DUP1", "source": 0 }, - { "begin": 7293, "end": 7300, "name": "SLOAD", "source": 0 }, - { "begin": 7293, "end": 7300, "name": "SWAP1", "source": 0 }, + { "begin": 2107, "end": 2114, "name": "DUP1", "source": 0 }, + { "begin": 2107, "end": 2114, "name": "SLOAD", "source": 0 }, + { "begin": 2107, "end": 2114, "name": "SWAP1", "source": 0 }, { - "begin": 7293, - "end": 7300, + "begin": 2107, + "end": 2114, "name": "PUSH", "source": 0, "value": "100" }, - { "begin": 7293, "end": 7300, "name": "EXP", "source": 0 }, - { "begin": 7293, "end": 7300, "name": "SWAP1", "source": 0 }, - { "begin": 7293, "end": 7300, "name": "DIV", "source": 0 }, + { "begin": 2107, "end": 2114, "name": "EXP", "source": 0 }, + { "begin": 2107, "end": 2114, "name": "SWAP1", "source": 0 }, + { "begin": 2107, "end": 2114, "name": "DIV", "source": 0 }, { - "begin": 7293, - "end": 7300, + "begin": 2107, + "end": 2114, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7293, "end": 7300, "name": "AND", "source": 0 }, + { "begin": 2107, "end": 2114, "name": "AND", "source": 0 }, { - "begin": 7293, - "end": 7322, + "begin": 2107, + "end": 2136, "name": "PUSH", "source": 0, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 7293, "end": 7322, "name": "AND", "source": 0 }, + { "begin": 2107, "end": 2136, "name": "AND", "source": 0 }, { - "begin": 7293, - "end": 7322, + "begin": 2107, + "end": 2136, "name": "PUSH", "source": 0, "value": "DAB20FDC" }, - { "begin": 7323, "end": 7329, "name": "DUP6", "source": 0 }, - { "begin": 7331, "end": 7339, "name": "DUP6", "source": 0 }, - { "begin": 7341, "end": 7352, "name": "DUP6", "source": 0 }, - { "begin": 7354, "end": 7360, "name": "DUP6", "source": 0 }, + { "begin": 2137, "end": 2143, "name": "DUP6", "source": 0 }, + { "begin": 2145, "end": 2153, "name": "DUP6", "source": 0 }, + { "begin": 2155, "end": 2166, "name": "DUP6", "source": 0 }, + { "begin": 2168, "end": 2174, "name": "DUP6", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7293, "end": 7361, "name": "MLOAD", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP6", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "MLOAD", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP6", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "FFFFFFFF" }, - { "begin": 7293, "end": 7361, "name": "AND", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "AND", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "E0" }, - { "begin": 7293, "end": 7361, "name": "SHL", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP2", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "MSTORE", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "SHL", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP2", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "MSTORE", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "4" }, - { "begin": 7293, "end": 7361, "name": "ADD", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "ADD", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH [tag]", "source": 0, "value": "70" }, - { "begin": 7293, "end": 7361, "name": "SWAP5", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "SWAP4", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "SWAP3", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "SWAP2", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "SWAP1", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "SWAP5", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "SWAP4", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "SWAP3", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "SWAP2", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "SWAP1", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH [tag]", "source": 0, "value": "71" }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "JUMP", "source": 0, "value": "[in]" }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "tag", "source": 0, "value": "70" }, - { "begin": 7293, "end": 7361, "name": "JUMPDEST", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "JUMPDEST", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "0" }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "40" }, - { "begin": 7293, "end": 7361, "name": "MLOAD", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP1", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP4", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "SUB", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP2", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "MLOAD", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP1", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP4", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "SUB", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP2", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7293, "end": 7361, "name": "DUP8", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP1", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP8", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP1", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "EXTCODESIZE", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "ISZERO", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP1", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "ISZERO", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "ISZERO", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP1", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "ISZERO", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH [tag]", "source": 0, "value": "72" }, - { "begin": 7293, "end": 7361, "name": "JUMPI", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "JUMPI", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7293, "end": 7361, "name": "DUP1", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "REVERT", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP1", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "REVERT", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "tag", "source": 0, "value": "72" }, - { "begin": 7293, "end": 7361, "name": "JUMPDEST", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "POP", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "GAS", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "CALL", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "ISZERO", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "DUP1", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "ISZERO", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "JUMPDEST", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "POP", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "GAS", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "CALL", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "ISZERO", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP1", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "ISZERO", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH [tag]", "source": 0, "value": "74" }, - { "begin": 7293, "end": 7361, "name": "JUMPI", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "JUMPI", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7293, "end": 7361, "name": "DUP1", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "DUP1", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "RETURNDATACOPY", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "RETURNDATASIZE", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "PUSH", "source": 0, "value": "0" }, - { "begin": 7293, "end": 7361, "name": "REVERT", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "REVERT", "source": 0 }, { - "begin": 7293, - "end": 7361, + "begin": 2107, + "end": 2175, "name": "tag", "source": 0, "value": "74" }, - { "begin": 7293, "end": 7361, "name": "JUMPDEST", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "POP", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "POP", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "POP", "source": 0 }, - { "begin": 7293, "end": 7361, "name": "POP", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "POP", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "POP", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "POP", "source": 0 }, - { "begin": 7078, "end": 7372, "name": "POP", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "JUMPDEST", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "POP", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "POP", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "POP", "source": 0 }, + { "begin": 2107, "end": 2175, "name": "POP", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "POP", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "POP", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "POP", "source": 0 }, + { "begin": 1916, "end": 2182, "name": "POP", "source": 0 }, { - "begin": 7078, - "end": 7372, + "begin": 1916, + "end": 2182, "name": "JUMP", "source": 0, "value": "[out]" @@ -20308,10984 +20288,10984 @@ "begin": 7, "end": 82, "name": "tag", - "source": 1, + "source": 2, "value": "75" }, - { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 1 }, + { "begin": 7, "end": 82, "name": "JUMPDEST", "source": 2 }, { "begin": 40, "end": 46, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 73, "end": 75, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 67, "end": 76, "name": "MLOAD", "source": 1 }, - { "begin": 57, "end": 76, "name": "SWAP1", "source": 1 }, - { "begin": 57, "end": 76, "name": "POP", "source": 1 }, - { "begin": 7, "end": 82, "name": "SWAP1", "source": 1 }, + { "begin": 67, "end": 76, "name": "MLOAD", "source": 2 }, + { "begin": 57, "end": 76, "name": "SWAP1", "source": 2 }, + { "begin": 57, "end": 76, "name": "POP", "source": 2 }, + { "begin": 7, "end": 82, "name": "SWAP1", "source": 2 }, { "begin": 7, "end": 82, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 88, "end": 205, "name": "tag", - "source": 1, + "source": 2, "value": "76" }, - { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 1 }, + { "begin": 88, "end": 205, "name": "JUMPDEST", "source": 2 }, { "begin": 197, "end": 198, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 194, "end": 195, "name": "DUP1", "source": 1 }, - { "begin": 187, "end": 199, "name": "REVERT", "source": 1 }, + { "begin": 194, "end": 195, "name": "DUP1", "source": 2 }, + { "begin": 187, "end": 199, "name": "REVERT", "source": 2 }, { "begin": 211, "end": 328, "name": "tag", - "source": 1, + "source": 2, "value": "77" }, - { "begin": 211, "end": 328, "name": "JUMPDEST", "source": 1 }, + { "begin": 211, "end": 328, "name": "JUMPDEST", "source": 2 }, { "begin": 320, "end": 321, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 317, "end": 318, "name": "DUP1", "source": 1 }, - { "begin": 310, "end": 322, "name": "REVERT", "source": 1 }, + { "begin": 317, "end": 318, "name": "DUP1", "source": 2 }, + { "begin": 310, "end": 322, "name": "REVERT", "source": 2 }, { "begin": 334, "end": 451, "name": "tag", - "source": 1, + "source": 2, "value": "78" }, - { "begin": 334, "end": 451, "name": "JUMPDEST", "source": 1 }, + { "begin": 334, "end": 451, "name": "JUMPDEST", "source": 2 }, { "begin": 443, "end": 444, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 440, "end": 441, "name": "DUP1", "source": 1 }, - { "begin": 433, "end": 445, "name": "REVERT", "source": 1 }, + { "begin": 440, "end": 441, "name": "DUP1", "source": 2 }, + { "begin": 433, "end": 445, "name": "REVERT", "source": 2 }, { "begin": 457, "end": 559, "name": "tag", - "source": 1, + "source": 2, "value": "79" }, - { "begin": 457, "end": 559, "name": "JUMPDEST", "source": 1 }, + { "begin": 457, "end": 559, "name": "JUMPDEST", "source": 2 }, { "begin": 498, "end": 504, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 549, "end": 551, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 545, "end": 552, "name": "NOT", "source": 1 }, + { "begin": 545, "end": 552, "name": "NOT", "source": 2 }, { "begin": 540, "end": 542, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 533, "end": 538, "name": "DUP4", "source": 1 }, - { "begin": 529, "end": 543, "name": "ADD", "source": 1 }, - { "begin": 525, "end": 553, "name": "AND", "source": 1 }, - { "begin": 515, "end": 553, "name": "SWAP1", "source": 1 }, - { "begin": 515, "end": 553, "name": "POP", "source": 1 }, - { "begin": 457, "end": 559, "name": "SWAP2", "source": 1 }, - { "begin": 457, "end": 559, "name": "SWAP1", "source": 1 }, - { "begin": 457, "end": 559, "name": "POP", "source": 1 }, + { "begin": 533, "end": 538, "name": "DUP4", "source": 2 }, + { "begin": 529, "end": 543, "name": "ADD", "source": 2 }, + { "begin": 525, "end": 553, "name": "AND", "source": 2 }, + { "begin": 515, "end": 553, "name": "SWAP1", "source": 2 }, + { "begin": 515, "end": 553, "name": "POP", "source": 2 }, + { "begin": 457, "end": 559, "name": "SWAP2", "source": 2 }, + { "begin": 457, "end": 559, "name": "SWAP1", "source": 2 }, + { "begin": 457, "end": 559, "name": "POP", "source": 2 }, { "begin": 457, "end": 559, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 565, "end": 745, "name": "tag", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 565, "end": 745, "name": "JUMPDEST", "source": 1 }, + { "begin": 565, "end": 745, "name": "JUMPDEST", "source": 2 }, { "begin": 613, "end": 690, "name": "PUSH", - "source": 1, + "source": 2, "value": "4E487B7100000000000000000000000000000000000000000000000000000000" }, { "begin": 610, "end": 611, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 603, "end": 691, "name": "MSTORE", "source": 1 }, + { "begin": 603, "end": 691, "name": "MSTORE", "source": 2 }, { "begin": 710, "end": 714, "name": "PUSH", - "source": 1, + "source": 2, "value": "41" }, { "begin": 707, "end": 708, "name": "PUSH", - "source": 1, + "source": 2, "value": "4" }, - { "begin": 700, "end": 715, "name": "MSTORE", "source": 1 }, + { "begin": 700, "end": 715, "name": "MSTORE", "source": 2 }, { "begin": 734, "end": 738, "name": "PUSH", - "source": 1, + "source": 2, "value": "24" }, { "begin": 731, "end": 732, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 724, "end": 739, "name": "REVERT", "source": 1 }, + { "begin": 724, "end": 739, "name": "REVERT", "source": 2 }, { "begin": 751, "end": 1032, "name": "tag", - "source": 1, + "source": 2, "value": "81" }, - { "begin": 751, "end": 1032, "name": "JUMPDEST", "source": 1 }, + { "begin": 751, "end": 1032, "name": "JUMPDEST", "source": 2 }, { "begin": 834, "end": 861, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "165" }, - { "begin": 856, "end": 860, "name": "DUP3", "source": 1 }, + { "begin": 856, "end": 860, "name": "DUP3", "source": 2 }, { "begin": 834, "end": 861, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "79" }, { "begin": 834, "end": 861, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 834, "end": 861, "name": "tag", - "source": 1, + "source": 2, "value": "165" }, - { "begin": 834, "end": 861, "name": "JUMPDEST", "source": 1 }, - { "begin": 826, "end": 832, "name": "DUP2", "source": 1 }, - { "begin": 822, "end": 862, "name": "ADD", "source": 1 }, - { "begin": 964, "end": 970, "name": "DUP2", "source": 1 }, - { "begin": 952, "end": 962, "name": "DUP2", "source": 1 }, - { "begin": 949, "end": 971, "name": "LT", "source": 1 }, + { "begin": 834, "end": 861, "name": "JUMPDEST", "source": 2 }, + { "begin": 826, "end": 832, "name": "DUP2", "source": 2 }, + { "begin": 822, "end": 862, "name": "ADD", "source": 2 }, + { "begin": 964, "end": 970, "name": "DUP2", "source": 2 }, + { "begin": 952, "end": 962, "name": "DUP2", "source": 2 }, + { "begin": 949, "end": 971, "name": "LT", "source": 2 }, { "begin": 928, "end": 946, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 916, "end": 926, "name": "DUP3", "source": 1 }, - { "begin": 913, "end": 947, "name": "GT", "source": 1 }, - { "begin": 910, "end": 972, "name": "OR", "source": 1 }, - { "begin": 907, "end": 995, "name": "ISZERO", "source": 1 }, + { "begin": 916, "end": 926, "name": "DUP3", "source": 2 }, + { "begin": 913, "end": 947, "name": "GT", "source": 2 }, + { "begin": 910, "end": 972, "name": "OR", "source": 2 }, + { "begin": 907, "end": 995, "name": "ISZERO", "source": 2 }, { "begin": 907, "end": 995, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "166" }, - { "begin": 907, "end": 995, "name": "JUMPI", "source": 1 }, + { "begin": 907, "end": 995, "name": "JUMPI", "source": 2 }, { "begin": 975, "end": 993, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "167" }, { "begin": 975, "end": 993, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { "begin": 975, "end": 993, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 975, "end": 993, "name": "tag", - "source": 1, + "source": 2, "value": "167" }, - { "begin": 975, "end": 993, "name": "JUMPDEST", "source": 1 }, + { "begin": 975, "end": 993, "name": "JUMPDEST", "source": 2 }, { "begin": 907, "end": 995, "name": "tag", - "source": 1, + "source": 2, "value": "166" }, - { "begin": 907, "end": 995, "name": "JUMPDEST", "source": 1 }, - { "begin": 1015, "end": 1025, "name": "DUP1", "source": 1 }, + { "begin": 907, "end": 995, "name": "JUMPDEST", "source": 2 }, + { "begin": 1015, "end": 1025, "name": "DUP1", "source": 2 }, { "begin": 1011, "end": 1013, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 1004, "end": 1026, "name": "MSTORE", "source": 1 }, - { "begin": 794, "end": 1032, "name": "POP", "source": 1 }, - { "begin": 751, "end": 1032, "name": "POP", "source": 1 }, - { "begin": 751, "end": 1032, "name": "POP", "source": 1 }, + { "begin": 1004, "end": 1026, "name": "MSTORE", "source": 2 }, + { "begin": 794, "end": 1032, "name": "POP", "source": 2 }, + { "begin": 751, "end": 1032, "name": "POP", "source": 2 }, + { "begin": 751, "end": 1032, "name": "POP", "source": 2 }, { "begin": 751, "end": 1032, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1038, "end": 1167, "name": "tag", - "source": 1, + "source": 2, "value": "82" }, - { "begin": 1038, "end": 1167, "name": "JUMPDEST", "source": 1 }, + { "begin": 1038, "end": 1167, "name": "JUMPDEST", "source": 2 }, { "begin": 1072, "end": 1078, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1099, "end": 1119, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "169" }, { "begin": 1099, "end": 1119, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "75" }, { "begin": 1099, "end": 1119, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1099, "end": 1119, "name": "tag", - "source": 1, + "source": 2, "value": "169" }, - { "begin": 1099, "end": 1119, "name": "JUMPDEST", "source": 1 }, - { "begin": 1089, "end": 1119, "name": "SWAP1", "source": 1 }, - { "begin": 1089, "end": 1119, "name": "POP", "source": 1 }, + { "begin": 1099, "end": 1119, "name": "JUMPDEST", "source": 2 }, + { "begin": 1089, "end": 1119, "name": "SWAP1", "source": 2 }, + { "begin": 1089, "end": 1119, "name": "POP", "source": 2 }, { "begin": 1128, "end": 1161, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "170" }, - { "begin": 1156, "end": 1160, "name": "DUP3", "source": 1 }, - { "begin": 1148, "end": 1154, "name": "DUP3", "source": 1 }, + { "begin": 1156, "end": 1160, "name": "DUP3", "source": 2 }, + { "begin": 1148, "end": 1154, "name": "DUP3", "source": 2 }, { "begin": 1128, "end": 1161, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "81" }, { "begin": 1128, "end": 1161, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1128, "end": 1161, "name": "tag", - "source": 1, + "source": 2, "value": "170" }, - { "begin": 1128, "end": 1161, "name": "JUMPDEST", "source": 1 }, - { "begin": 1038, "end": 1167, "name": "SWAP2", "source": 1 }, - { "begin": 1038, "end": 1167, "name": "SWAP1", "source": 1 }, - { "begin": 1038, "end": 1167, "name": "POP", "source": 1 }, + { "begin": 1128, "end": 1161, "name": "JUMPDEST", "source": 2 }, + { "begin": 1038, "end": 1167, "name": "SWAP2", "source": 2 }, + { "begin": 1038, "end": 1167, "name": "SWAP1", "source": 2 }, + { "begin": 1038, "end": 1167, "name": "POP", "source": 2 }, { "begin": 1038, "end": 1167, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1173, "end": 1290, "name": "tag", - "source": 1, + "source": 2, "value": "83" }, - { "begin": 1173, "end": 1290, "name": "JUMPDEST", "source": 1 }, + { "begin": 1173, "end": 1290, "name": "JUMPDEST", "source": 2 }, { "begin": 1282, "end": 1283, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1279, "end": 1280, "name": "DUP1", "source": 1 }, - { "begin": 1272, "end": 1284, "name": "REVERT", "source": 1 }, + { "begin": 1279, "end": 1280, "name": "DUP1", "source": 2 }, + { "begin": 1272, "end": 1284, "name": "REVERT", "source": 2 }, { "begin": 1296, "end": 1382, "name": "tag", - "source": 1, + "source": 2, "value": "84" }, - { "begin": 1296, "end": 1382, "name": "JUMPDEST", "source": 1 }, + { "begin": 1296, "end": 1382, "name": "JUMPDEST", "source": 2 }, { "begin": 1331, "end": 1338, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1371, "end": 1375, "name": "PUSH", - "source": 1, + "source": 2, "value": "FF" }, - { "begin": 1364, "end": 1369, "name": "DUP3", "source": 1 }, - { "begin": 1360, "end": 1376, "name": "AND", "source": 1 }, - { "begin": 1349, "end": 1376, "name": "SWAP1", "source": 1 }, - { "begin": 1349, "end": 1376, "name": "POP", "source": 1 }, - { "begin": 1296, "end": 1382, "name": "SWAP2", "source": 1 }, - { "begin": 1296, "end": 1382, "name": "SWAP1", "source": 1 }, - { "begin": 1296, "end": 1382, "name": "POP", "source": 1 }, + { "begin": 1364, "end": 1369, "name": "DUP3", "source": 2 }, + { "begin": 1360, "end": 1376, "name": "AND", "source": 2 }, + { "begin": 1349, "end": 1376, "name": "SWAP1", "source": 2 }, + { "begin": 1349, "end": 1376, "name": "POP", "source": 2 }, + { "begin": 1296, "end": 1382, "name": "SWAP2", "source": 2 }, + { "begin": 1296, "end": 1382, "name": "SWAP1", "source": 2 }, + { "begin": 1296, "end": 1382, "name": "POP", "source": 2 }, { "begin": 1296, "end": 1382, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1388, "end": 1506, "name": "tag", - "source": 1, + "source": 2, "value": "85" }, - { "begin": 1388, "end": 1506, "name": "JUMPDEST", "source": 1 }, + { "begin": 1388, "end": 1506, "name": "JUMPDEST", "source": 2 }, { "begin": 1459, "end": 1481, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "174" }, - { "begin": 1475, "end": 1480, "name": "DUP2", "source": 1 }, + { "begin": 1475, "end": 1480, "name": "DUP2", "source": 2 }, { "begin": 1459, "end": 1481, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "84" }, { "begin": 1459, "end": 1481, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1459, "end": 1481, "name": "tag", - "source": 1, + "source": 2, "value": "174" }, - { "begin": 1459, "end": 1481, "name": "JUMPDEST", "source": 1 }, - { "begin": 1452, "end": 1457, "name": "DUP2", "source": 1 }, - { "begin": 1449, "end": 1482, "name": "EQ", "source": 1 }, + { "begin": 1459, "end": 1481, "name": "JUMPDEST", "source": 2 }, + { "begin": 1452, "end": 1457, "name": "DUP2", "source": 2 }, + { "begin": 1449, "end": 1482, "name": "EQ", "source": 2 }, { "begin": 1439, "end": 1500, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "175" }, - { "begin": 1439, "end": 1500, "name": "JUMPI", "source": 1 }, + { "begin": 1439, "end": 1500, "name": "JUMPI", "source": 2 }, { "begin": 1496, "end": 1497, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1493, "end": 1494, "name": "DUP1", "source": 1 }, - { "begin": 1486, "end": 1498, "name": "REVERT", "source": 1 }, + { "begin": 1493, "end": 1494, "name": "DUP1", "source": 2 }, + { "begin": 1486, "end": 1498, "name": "REVERT", "source": 2 }, { "begin": 1439, "end": 1500, "name": "tag", - "source": 1, + "source": 2, "value": "175" }, - { "begin": 1439, "end": 1500, "name": "JUMPDEST", "source": 1 }, - { "begin": 1388, "end": 1506, "name": "POP", "source": 1 }, + { "begin": 1439, "end": 1500, "name": "JUMPDEST", "source": 2 }, + { "begin": 1388, "end": 1506, "name": "POP", "source": 2 }, { "begin": 1388, "end": 1506, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1512, "end": 1647, "name": "tag", - "source": 1, + "source": 2, "value": "86" }, - { "begin": 1512, "end": 1647, "name": "JUMPDEST", "source": 1 }, + { "begin": 1512, "end": 1647, "name": "JUMPDEST", "source": 2 }, { "begin": 1556, "end": 1561, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1594, "end": 1600, "name": "DUP2", "source": 1 }, + { "begin": 1594, "end": 1600, "name": "DUP2", "source": 2 }, { "begin": 1581, "end": 1601, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 1572, "end": 1601, "name": "SWAP1", "source": 1 }, - { "begin": 1572, "end": 1601, "name": "POP", "source": 1 }, + { "begin": 1572, "end": 1601, "name": "SWAP1", "source": 2 }, + { "begin": 1572, "end": 1601, "name": "POP", "source": 2 }, { "begin": 1610, "end": 1641, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "177" }, - { "begin": 1635, "end": 1640, "name": "DUP2", "source": 1 }, + { "begin": 1635, "end": 1640, "name": "DUP2", "source": 2 }, { "begin": 1610, "end": 1641, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "85" }, { "begin": 1610, "end": 1641, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1610, "end": 1641, "name": "tag", - "source": 1, + "source": 2, "value": "177" }, - { "begin": 1610, "end": 1641, "name": "JUMPDEST", "source": 1 }, - { "begin": 1512, "end": 1647, "name": "SWAP3", "source": 1 }, - { "begin": 1512, "end": 1647, "name": "SWAP2", "source": 1 }, - { "begin": 1512, "end": 1647, "name": "POP", "source": 1 }, - { "begin": 1512, "end": 1647, "name": "POP", "source": 1 }, + { "begin": 1610, "end": 1641, "name": "JUMPDEST", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "SWAP3", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "SWAP2", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "POP", "source": 2 }, + { "begin": 1512, "end": 1647, "name": "POP", "source": 2 }, { "begin": 1512, "end": 1647, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 1653, "end": 1770, "name": "tag", - "source": 1, + "source": 2, "value": "87" }, - { "begin": 1653, "end": 1770, "name": "JUMPDEST", "source": 1 }, + { "begin": 1653, "end": 1770, "name": "JUMPDEST", "source": 2 }, { "begin": 1762, "end": 1763, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 1759, "end": 1760, "name": "DUP1", "source": 1 }, - { "begin": 1752, "end": 1764, "name": "REVERT", "source": 1 }, + { "begin": 1759, "end": 1760, "name": "DUP1", "source": 2 }, + { "begin": 1752, "end": 1764, "name": "REVERT", "source": 2 }, { "begin": 1776, "end": 2096, "name": "tag", - "source": 1, + "source": 2, "value": "88" }, - { "begin": 1776, "end": 2096, "name": "JUMPDEST", "source": 1 }, + { "begin": 1776, "end": 2096, "name": "JUMPDEST", "source": 2 }, { "begin": 1862, "end": 1866, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 1952, "end": 1970, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 1944, "end": 1950, "name": "DUP3", "source": 1 }, - { "begin": 1941, "end": 1971, "name": "GT", "source": 1 }, - { "begin": 1938, "end": 1994, "name": "ISZERO", "source": 1 }, + { "begin": 1944, "end": 1950, "name": "DUP3", "source": 2 }, + { "begin": 1941, "end": 1971, "name": "GT", "source": 2 }, + { "begin": 1938, "end": 1994, "name": "ISZERO", "source": 2 }, { "begin": 1938, "end": 1994, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "180" }, - { "begin": 1938, "end": 1994, "name": "JUMPI", "source": 1 }, + { "begin": 1938, "end": 1994, "name": "JUMPI", "source": 2 }, { "begin": 1974, "end": 1992, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "181" }, { "begin": 1974, "end": 1992, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { "begin": 1974, "end": 1992, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 1974, "end": 1992, "name": "tag", - "source": 1, + "source": 2, "value": "181" }, - { "begin": 1974, "end": 1992, "name": "JUMPDEST", "source": 1 }, + { "begin": 1974, "end": 1992, "name": "JUMPDEST", "source": 2 }, { "begin": 1938, "end": 1994, "name": "tag", - "source": 1, + "source": 2, "value": "180" }, - { "begin": 1938, "end": 1994, "name": "JUMPDEST", "source": 1 }, + { "begin": 1938, "end": 1994, "name": "JUMPDEST", "source": 2 }, { "begin": 2024, "end": 2028, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 2016, "end": 2022, "name": "DUP3", "source": 1 }, - { "begin": 2012, "end": 2029, "name": "MUL", "source": 1 }, - { "begin": 2004, "end": 2029, "name": "SWAP1", "source": 1 }, - { "begin": 2004, "end": 2029, "name": "POP", "source": 1 }, + { "begin": 2016, "end": 2022, "name": "DUP3", "source": 2 }, + { "begin": 2012, "end": 2029, "name": "MUL", "source": 2 }, + { "begin": 2004, "end": 2029, "name": "SWAP1", "source": 2 }, + { "begin": 2004, "end": 2029, "name": "POP", "source": 2 }, { "begin": 2084, "end": 2088, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 2078, "end": 2082, "name": "DUP2", "source": 1 }, - { "begin": 2074, "end": 2089, "name": "ADD", "source": 1 }, - { "begin": 2066, "end": 2089, "name": "SWAP1", "source": 1 }, - { "begin": 2066, "end": 2089, "name": "POP", "source": 1 }, - { "begin": 1776, "end": 2096, "name": "SWAP2", "source": 1 }, - { "begin": 1776, "end": 2096, "name": "SWAP1", "source": 1 }, - { "begin": 1776, "end": 2096, "name": "POP", "source": 1 }, + { "begin": 2078, "end": 2082, "name": "DUP2", "source": 2 }, + { "begin": 2074, "end": 2089, "name": "ADD", "source": 2 }, + { "begin": 2066, "end": 2089, "name": "SWAP1", "source": 2 }, + { "begin": 2066, "end": 2089, "name": "POP", "source": 2 }, + { "begin": 1776, "end": 2096, "name": "SWAP2", "source": 2 }, + { "begin": 1776, "end": 2096, "name": "SWAP1", "source": 2 }, + { "begin": 1776, "end": 2096, "name": "POP", "source": 2 }, { "begin": 1776, "end": 2096, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2102, "end": 2219, "name": "tag", - "source": 1, + "source": 2, "value": "89" }, - { "begin": 2102, "end": 2219, "name": "JUMPDEST", "source": 1 }, + { "begin": 2102, "end": 2219, "name": "JUMPDEST", "source": 2 }, { "begin": 2211, "end": 2212, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2208, "end": 2209, "name": "DUP1", "source": 1 }, - { "begin": 2201, "end": 2213, "name": "REVERT", "source": 1 }, + { "begin": 2208, "end": 2209, "name": "DUP1", "source": 2 }, + { "begin": 2201, "end": 2213, "name": "REVERT", "source": 2 }, { "begin": 2225, "end": 2342, "name": "tag", - "source": 1, + "source": 2, "value": "90" }, - { "begin": 2225, "end": 2342, "name": "JUMPDEST", "source": 1 }, + { "begin": 2225, "end": 2342, "name": "JUMPDEST", "source": 2 }, { "begin": 2334, "end": 2335, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2331, "end": 2332, "name": "DUP1", "source": 1 }, - { "begin": 2324, "end": 2336, "name": "REVERT", "source": 1 }, + { "begin": 2331, "end": 2332, "name": "DUP1", "source": 2 }, + { "begin": 2324, "end": 2336, "name": "REVERT", "source": 2 }, { "begin": 2348, "end": 2655, "name": "tag", - "source": 1, + "source": 2, "value": "91" }, - { "begin": 2348, "end": 2655, "name": "JUMPDEST", "source": 1 }, + { "begin": 2348, "end": 2655, "name": "JUMPDEST", "source": 2 }, { "begin": 2409, "end": 2413, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 2499, "end": 2517, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 2491, "end": 2497, "name": "DUP3", "source": 1 }, - { "begin": 2488, "end": 2518, "name": "GT", "source": 1 }, - { "begin": 2485, "end": 2541, "name": "ISZERO", "source": 1 }, + { "begin": 2491, "end": 2497, "name": "DUP3", "source": 2 }, + { "begin": 2488, "end": 2518, "name": "GT", "source": 2 }, + { "begin": 2485, "end": 2541, "name": "ISZERO", "source": 2 }, { "begin": 2485, "end": 2541, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "185" }, - { "begin": 2485, "end": 2541, "name": "JUMPI", "source": 1 }, + { "begin": 2485, "end": 2541, "name": "JUMPI", "source": 2 }, { "begin": 2521, "end": 2539, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "186" }, { "begin": 2521, "end": 2539, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { "begin": 2521, "end": 2539, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2521, "end": 2539, "name": "tag", - "source": 1, + "source": 2, "value": "186" }, - { "begin": 2521, "end": 2539, "name": "JUMPDEST", "source": 1 }, + { "begin": 2521, "end": 2539, "name": "JUMPDEST", "source": 2 }, { "begin": 2485, "end": 2541, "name": "tag", - "source": 1, + "source": 2, "value": "185" }, - { "begin": 2485, "end": 2541, "name": "JUMPDEST", "source": 1 }, + { "begin": 2485, "end": 2541, "name": "JUMPDEST", "source": 2 }, { "begin": 2559, "end": 2588, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "187" }, - { "begin": 2581, "end": 2587, "name": "DUP3", "source": 1 }, + { "begin": 2581, "end": 2587, "name": "DUP3", "source": 2 }, { "begin": 2559, "end": 2588, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "79" }, { "begin": 2559, "end": 2588, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2559, "end": 2588, "name": "tag", - "source": 1, + "source": 2, "value": "187" }, - { "begin": 2559, "end": 2588, "name": "JUMPDEST", "source": 1 }, - { "begin": 2551, "end": 2588, "name": "SWAP1", "source": 1 }, - { "begin": 2551, "end": 2588, "name": "POP", "source": 1 }, + { "begin": 2559, "end": 2588, "name": "JUMPDEST", "source": 2 }, + { "begin": 2551, "end": 2588, "name": "SWAP1", "source": 2 }, + { "begin": 2551, "end": 2588, "name": "POP", "source": 2 }, { "begin": 2643, "end": 2647, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 2637, "end": 2641, "name": "DUP2", "source": 1 }, - { "begin": 2633, "end": 2648, "name": "ADD", "source": 1 }, - { "begin": 2625, "end": 2648, "name": "SWAP1", "source": 1 }, - { "begin": 2625, "end": 2648, "name": "POP", "source": 1 }, - { "begin": 2348, "end": 2655, "name": "SWAP2", "source": 1 }, - { "begin": 2348, "end": 2655, "name": "SWAP1", "source": 1 }, - { "begin": 2348, "end": 2655, "name": "POP", "source": 1 }, + { "begin": 2637, "end": 2641, "name": "DUP2", "source": 2 }, + { "begin": 2633, "end": 2648, "name": "ADD", "source": 2 }, + { "begin": 2625, "end": 2648, "name": "SWAP1", "source": 2 }, + { "begin": 2625, "end": 2648, "name": "POP", "source": 2 }, + { "begin": 2348, "end": 2655, "name": "SWAP2", "source": 2 }, + { "begin": 2348, "end": 2655, "name": "SWAP1", "source": 2 }, + { "begin": 2348, "end": 2655, "name": "POP", "source": 2 }, { "begin": 2348, "end": 2655, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2661, "end": 2815, "name": "tag", - "source": 1, + "source": 2, "value": "92" }, - { "begin": 2661, "end": 2815, "name": "JUMPDEST", "source": 1 }, - { "begin": 2745, "end": 2751, "name": "DUP3", "source": 1 }, - { "begin": 2740, "end": 2743, "name": "DUP2", "source": 1 }, - { "begin": 2735, "end": 2738, "name": "DUP4", "source": 1 }, + { "begin": 2661, "end": 2815, "name": "JUMPDEST", "source": 2 }, + { "begin": 2745, "end": 2751, "name": "DUP3", "source": 2 }, + { "begin": 2740, "end": 2743, "name": "DUP2", "source": 2 }, + { "begin": 2735, "end": 2738, "name": "DUP4", "source": 2 }, { "begin": 2722, "end": 2752, "name": "CALLDATACOPY", - "source": 1 + "source": 2 }, { "begin": 2807, "end": 2808, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 2798, "end": 2804, "name": "DUP4", "source": 1 }, - { "begin": 2793, "end": 2796, "name": "DUP4", "source": 1 }, - { "begin": 2789, "end": 2805, "name": "ADD", "source": 1 }, - { "begin": 2782, "end": 2809, "name": "MSTORE", "source": 1 }, - { "begin": 2661, "end": 2815, "name": "POP", "source": 1 }, - { "begin": 2661, "end": 2815, "name": "POP", "source": 1 }, - { "begin": 2661, "end": 2815, "name": "POP", "source": 1 }, + { "begin": 2798, "end": 2804, "name": "DUP4", "source": 2 }, + { "begin": 2793, "end": 2796, "name": "DUP4", "source": 2 }, + { "begin": 2789, "end": 2805, "name": "ADD", "source": 2 }, + { "begin": 2782, "end": 2809, "name": "MSTORE", "source": 2 }, + { "begin": 2661, "end": 2815, "name": "POP", "source": 2 }, + { "begin": 2661, "end": 2815, "name": "POP", "source": 2 }, + { "begin": 2661, "end": 2815, "name": "POP", "source": 2 }, { "begin": 2661, "end": 2815, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 2821, "end": 3231, "name": "tag", - "source": 1, + "source": 2, "value": "93" }, - { "begin": 2821, "end": 3231, "name": "JUMPDEST", "source": 1 }, + { "begin": 2821, "end": 3231, "name": "JUMPDEST", "source": 2 }, { "begin": 2898, "end": 2903, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 2923, "end": 2988, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "190" }, { "begin": 2939, "end": 2987, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "191" }, - { "begin": 2980, "end": 2986, "name": "DUP5", "source": 1 }, + { "begin": 2980, "end": 2986, "name": "DUP5", "source": 2 }, { "begin": 2939, "end": 2987, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "91" }, { "begin": 2939, "end": 2987, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2939, "end": 2987, "name": "tag", - "source": 1, + "source": 2, "value": "191" }, - { "begin": 2939, "end": 2987, "name": "JUMPDEST", "source": 1 }, + { "begin": 2939, "end": 2987, "name": "JUMPDEST", "source": 2 }, { "begin": 2923, "end": 2988, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { "begin": 2923, "end": 2988, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 2923, "end": 2988, "name": "tag", - "source": 1, + "source": 2, "value": "190" }, - { "begin": 2923, "end": 2988, "name": "JUMPDEST", "source": 1 }, - { "begin": 2914, "end": 2988, "name": "SWAP1", "source": 1 }, - { "begin": 2914, "end": 2988, "name": "POP", "source": 1 }, - { "begin": 3011, "end": 3017, "name": "DUP3", "source": 1 }, - { "begin": 3004, "end": 3009, "name": "DUP2", "source": 1 }, - { "begin": 2997, "end": 3018, "name": "MSTORE", "source": 1 }, + { "begin": 2923, "end": 2988, "name": "JUMPDEST", "source": 2 }, + { "begin": 2914, "end": 2988, "name": "SWAP1", "source": 2 }, + { "begin": 2914, "end": 2988, "name": "POP", "source": 2 }, + { "begin": 3011, "end": 3017, "name": "DUP3", "source": 2 }, + { "begin": 3004, "end": 3009, "name": "DUP2", "source": 2 }, + { "begin": 2997, "end": 3018, "name": "MSTORE", "source": 2 }, { "begin": 3049, "end": 3053, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 3042, "end": 3047, "name": "DUP2", "source": 1 }, - { "begin": 3038, "end": 3054, "name": "ADD", "source": 1 }, - { "begin": 3087, "end": 3090, "name": "DUP5", "source": 1 }, - { "begin": 3078, "end": 3084, "name": "DUP5", "source": 1 }, - { "begin": 3073, "end": 3076, "name": "DUP5", "source": 1 }, - { "begin": 3069, "end": 3085, "name": "ADD", "source": 1 }, - { "begin": 3066, "end": 3091, "name": "GT", "source": 1 }, - { "begin": 3063, "end": 3175, "name": "ISZERO", "source": 1 }, + { "begin": 3042, "end": 3047, "name": "DUP2", "source": 2 }, + { "begin": 3038, "end": 3054, "name": "ADD", "source": 2 }, + { "begin": 3087, "end": 3090, "name": "DUP5", "source": 2 }, + { "begin": 3078, "end": 3084, "name": "DUP5", "source": 2 }, + { "begin": 3073, "end": 3076, "name": "DUP5", "source": 2 }, + { "begin": 3069, "end": 3085, "name": "ADD", "source": 2 }, + { "begin": 3066, "end": 3091, "name": "GT", "source": 2 }, + { "begin": 3063, "end": 3175, "name": "ISZERO", "source": 2 }, { "begin": 3063, "end": 3175, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "192" }, - { "begin": 3063, "end": 3175, "name": "JUMPI", "source": 1 }, + { "begin": 3063, "end": 3175, "name": "JUMPI", "source": 2 }, { "begin": 3094, "end": 3173, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "193" }, { "begin": 3094, "end": 3173, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "90" }, { "begin": 3094, "end": 3173, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3094, "end": 3173, "name": "tag", - "source": 1, + "source": 2, "value": "193" }, - { "begin": 3094, "end": 3173, "name": "JUMPDEST", "source": 1 }, + { "begin": 3094, "end": 3173, "name": "JUMPDEST", "source": 2 }, { "begin": 3063, "end": 3175, "name": "tag", - "source": 1, + "source": 2, "value": "192" }, - { "begin": 3063, "end": 3175, "name": "JUMPDEST", "source": 1 }, + { "begin": 3063, "end": 3175, "name": "JUMPDEST", "source": 2 }, { "begin": 3184, "end": 3225, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "194" }, - { "begin": 3218, "end": 3224, "name": "DUP5", "source": 1 }, - { "begin": 3213, "end": 3216, "name": "DUP3", "source": 1 }, - { "begin": 3208, "end": 3211, "name": "DUP6", "source": 1 }, + { "begin": 3218, "end": 3224, "name": "DUP5", "source": 2 }, + { "begin": 3213, "end": 3216, "name": "DUP3", "source": 2 }, + { "begin": 3208, "end": 3211, "name": "DUP6", "source": 2 }, { "begin": 3184, "end": 3225, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "92" }, { "begin": 3184, "end": 3225, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3184, "end": 3225, "name": "tag", - "source": 1, + "source": 2, "value": "194" }, - { "begin": 3184, "end": 3225, "name": "JUMPDEST", "source": 1 }, - { "begin": 2904, "end": 3231, "name": "POP", "source": 1 }, - { "begin": 2821, "end": 3231, "name": "SWAP4", "source": 1 }, - { "begin": 2821, "end": 3231, "name": "SWAP3", "source": 1 }, - { "begin": 2821, "end": 3231, "name": "POP", "source": 1 }, - { "begin": 2821, "end": 3231, "name": "POP", "source": 1 }, - { "begin": 2821, "end": 3231, "name": "POP", "source": 1 }, + { "begin": 3184, "end": 3225, "name": "JUMPDEST", "source": 2 }, + { "begin": 2904, "end": 3231, "name": "POP", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "SWAP4", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "SWAP3", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "POP", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "POP", "source": 2 }, + { "begin": 2821, "end": 3231, "name": "POP", "source": 2 }, { "begin": 2821, "end": 3231, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3250, "end": 3588, "name": "tag", - "source": 1, + "source": 2, "value": "94" }, - { "begin": 3250, "end": 3588, "name": "JUMPDEST", "source": 1 }, + { "begin": 3250, "end": 3588, "name": "JUMPDEST", "source": 2 }, { "begin": 3305, "end": 3310, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 3354, "end": 3357, "name": "DUP3", "source": 1 }, + { "begin": 3354, "end": 3357, "name": "DUP3", "source": 2 }, { "begin": 3347, "end": 3351, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 3339, "end": 3345, "name": "DUP4", "source": 1 }, - { "begin": 3335, "end": 3352, "name": "ADD", "source": 1 }, - { "begin": 3331, "end": 3358, "name": "SLT", "source": 1 }, + { "begin": 3339, "end": 3345, "name": "DUP4", "source": 2 }, + { "begin": 3335, "end": 3352, "name": "ADD", "source": 2 }, + { "begin": 3331, "end": 3358, "name": "SLT", "source": 2 }, { "begin": 3321, "end": 3443, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "196" }, - { "begin": 3321, "end": 3443, "name": "JUMPI", "source": 1 }, + { "begin": 3321, "end": 3443, "name": "JUMPI", "source": 2 }, { "begin": 3362, "end": 3441, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "197" }, { "begin": 3362, "end": 3441, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "87" }, { "begin": 3362, "end": 3441, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3362, "end": 3441, "name": "tag", - "source": 1, + "source": 2, "value": "197" }, - { "begin": 3362, "end": 3441, "name": "JUMPDEST", "source": 1 }, + { "begin": 3362, "end": 3441, "name": "JUMPDEST", "source": 2 }, { "begin": 3321, "end": 3443, "name": "tag", - "source": 1, + "source": 2, "value": "196" }, - { "begin": 3321, "end": 3443, "name": "JUMPDEST", "source": 1 }, - { "begin": 3479, "end": 3485, "name": "DUP2", "source": 1 }, + { "begin": 3321, "end": 3443, "name": "JUMPDEST", "source": 2 }, + { "begin": 3479, "end": 3485, "name": "DUP2", "source": 2 }, { "begin": 3466, "end": 3486, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { "begin": 3504, "end": 3582, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "198" }, - { "begin": 3578, "end": 3581, "name": "DUP5", "source": 1 }, - { "begin": 3570, "end": 3576, "name": "DUP3", "source": 1 }, + { "begin": 3578, "end": 3581, "name": "DUP5", "source": 2 }, + { "begin": 3570, "end": 3576, "name": "DUP3", "source": 2 }, { "begin": 3563, "end": 3567, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 3555, "end": 3561, "name": "DUP7", "source": 1 }, - { "begin": 3551, "end": 3568, "name": "ADD", "source": 1 }, + { "begin": 3555, "end": 3561, "name": "DUP7", "source": 2 }, + { "begin": 3551, "end": 3568, "name": "ADD", "source": 2 }, { "begin": 3504, "end": 3582, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "93" }, { "begin": 3504, "end": 3582, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3504, "end": 3582, "name": "tag", - "source": 1, + "source": 2, "value": "198" }, - { "begin": 3504, "end": 3582, "name": "JUMPDEST", "source": 1 }, - { "begin": 3495, "end": 3582, "name": "SWAP2", "source": 1 }, - { "begin": 3495, "end": 3582, "name": "POP", "source": 1 }, - { "begin": 3311, "end": 3588, "name": "POP", "source": 1 }, - { "begin": 3250, "end": 3588, "name": "SWAP3", "source": 1 }, - { "begin": 3250, "end": 3588, "name": "SWAP2", "source": 1 }, - { "begin": 3250, "end": 3588, "name": "POP", "source": 1 }, - { "begin": 3250, "end": 3588, "name": "POP", "source": 1 }, + { "begin": 3504, "end": 3582, "name": "JUMPDEST", "source": 2 }, + { "begin": 3495, "end": 3582, "name": "SWAP2", "source": 2 }, + { "begin": 3495, "end": 3582, "name": "POP", "source": 2 }, + { "begin": 3311, "end": 3588, "name": "POP", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "SWAP3", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "SWAP2", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "POP", "source": 2 }, + { "begin": 3250, "end": 3588, "name": "POP", "source": 2 }, { "begin": 3250, "end": 3588, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 3609, "end": 4551, "name": "tag", - "source": 1, + "source": 2, "value": "95" }, - { "begin": 3609, "end": 4551, "name": "JUMPDEST", "source": 1 }, + { "begin": 3609, "end": 4551, "name": "JUMPDEST", "source": 2 }, { "begin": 3714, "end": 3719, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { "begin": 3739, "end": 3829, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "200" }, { "begin": 3755, "end": 3828, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "201" }, - { "begin": 3821, "end": 3827, "name": "DUP5", "source": 1 }, + { "begin": 3821, "end": 3827, "name": "DUP5", "source": 2 }, { "begin": 3755, "end": 3828, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "88" }, { "begin": 3755, "end": 3828, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3755, "end": 3828, "name": "tag", - "source": 1, + "source": 2, "value": "201" }, - { "begin": 3755, "end": 3828, "name": "JUMPDEST", "source": 1 }, + { "begin": 3755, "end": 3828, "name": "JUMPDEST", "source": 2 }, { "begin": 3739, "end": 3829, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { "begin": 3739, "end": 3829, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 3739, "end": 3829, "name": "tag", - "source": 1, + "source": 2, "value": "200" }, - { "begin": 3739, "end": 3829, "name": "JUMPDEST", "source": 1 }, - { "begin": 3730, "end": 3829, "name": "SWAP1", "source": 1 }, - { "begin": 3730, "end": 3829, "name": "POP", "source": 1 }, - { "begin": 3849, "end": 3854, "name": "DUP1", "source": 1 }, - { "begin": 3878, "end": 3884, "name": "DUP4", "source": 1 }, - { "begin": 3871, "end": 3876, "name": "DUP3", "source": 1 }, - { "begin": 3864, "end": 3885, "name": "MSTORE", "source": 1 }, + { "begin": 3739, "end": 3829, "name": "JUMPDEST", "source": 2 }, + { "begin": 3730, "end": 3829, "name": "SWAP1", "source": 2 }, + { "begin": 3730, "end": 3829, "name": "POP", "source": 2 }, + { "begin": 3849, "end": 3854, "name": "DUP1", "source": 2 }, + { "begin": 3878, "end": 3884, "name": "DUP4", "source": 2 }, + { "begin": 3871, "end": 3876, "name": "DUP3", "source": 2 }, + { "begin": 3864, "end": 3885, "name": "MSTORE", "source": 2 }, { "begin": 3912, "end": 3916, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 3905, "end": 3910, "name": "DUP3", "source": 1 }, - { "begin": 3901, "end": 3917, "name": "ADD", "source": 1 }, - { "begin": 3894, "end": 3917, "name": "SWAP1", "source": 1 }, - { "begin": 3894, "end": 3917, "name": "POP", "source": 1 }, + { "begin": 3905, "end": 3910, "name": "DUP3", "source": 2 }, + { "begin": 3901, "end": 3917, "name": "ADD", "source": 2 }, + { "begin": 3894, "end": 3917, "name": "SWAP1", "source": 2 }, + { "begin": 3894, "end": 3917, "name": "POP", "source": 2 }, { "begin": 3965, "end": 3969, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 3957, "end": 3963, "name": "DUP5", "source": 1 }, - { "begin": 3953, "end": 3970, "name": "MUL", "source": 1 }, - { "begin": 3945, "end": 3951, "name": "DUP4", "source": 1 }, - { "begin": 3941, "end": 3971, "name": "ADD", "source": 1 }, - { "begin": 3994, "end": 3997, "name": "DUP6", "source": 1 }, - { "begin": 3986, "end": 3992, "name": "DUP2", "source": 1 }, - { "begin": 3983, "end": 3998, "name": "GT", "source": 1 }, - { "begin": 3980, "end": 4102, "name": "ISZERO", "source": 1 }, + { "begin": 3957, "end": 3963, "name": "DUP5", "source": 2 }, + { "begin": 3953, "end": 3970, "name": "MUL", "source": 2 }, + { "begin": 3945, "end": 3951, "name": "DUP4", "source": 2 }, + { "begin": 3941, "end": 3971, "name": "ADD", "source": 2 }, + { "begin": 3994, "end": 3997, "name": "DUP6", "source": 2 }, + { "begin": 3986, "end": 3992, "name": "DUP2", "source": 2 }, + { "begin": 3983, "end": 3998, "name": "GT", "source": 2 }, + { "begin": 3980, "end": 4102, "name": "ISZERO", "source": 2 }, { "begin": 3980, "end": 4102, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "202" }, - { "begin": 3980, "end": 4102, "name": "JUMPI", "source": 1 }, + { "begin": 3980, "end": 4102, "name": "JUMPI", "source": 2 }, { "begin": 4013, "end": 4092, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "203" }, { "begin": 4013, "end": 4092, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "89" }, { "begin": 4013, "end": 4092, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4013, "end": 4092, "name": "tag", - "source": 1, + "source": 2, "value": "203" }, - { "begin": 4013, "end": 4092, "name": "JUMPDEST", "source": 1 }, + { "begin": 4013, "end": 4092, "name": "JUMPDEST", "source": 2 }, { "begin": 3980, "end": 4102, "name": "tag", - "source": 1, + "source": 2, "value": "202" }, - { "begin": 3980, "end": 4102, "name": "JUMPDEST", "source": 1 }, - { "begin": 4128, "end": 4134, "name": "DUP4", "source": 1 }, + { "begin": 3980, "end": 4102, "name": "JUMPDEST", "source": 2 }, + { "begin": 4128, "end": 4134, "name": "DUP4", "source": 2 }, { "begin": 4111, "end": 4545, "name": "tag", - "source": 1, + "source": 2, "value": "204" }, - { "begin": 4111, "end": 4545, "name": "JUMPDEST", "source": 1 }, - { "begin": 4145, "end": 4151, "name": "DUP2", "source": 1 }, - { "begin": 4140, "end": 4143, "name": "DUP2", "source": 1 }, - { "begin": 4137, "end": 4152, "name": "LT", "source": 1 }, - { "begin": 4111, "end": 4545, "name": "ISZERO", "source": 1 }, + { "begin": 4111, "end": 4545, "name": "JUMPDEST", "source": 2 }, + { "begin": 4145, "end": 4151, "name": "DUP2", "source": 2 }, + { "begin": 4140, "end": 4143, "name": "DUP2", "source": 2 }, + { "begin": 4137, "end": 4152, "name": "LT", "source": 2 }, + { "begin": 4111, "end": 4545, "name": "ISZERO", "source": 2 }, { "begin": 4111, "end": 4545, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "206" }, - { "begin": 4111, "end": 4545, "name": "JUMPI", "source": 1 }, - { "begin": 4234, "end": 4237, "name": "DUP1", "source": 1 }, + { "begin": 4111, "end": 4545, "name": "JUMPI", "source": 2 }, + { "begin": 4234, "end": 4237, "name": "DUP1", "source": 2 }, { "begin": 4221, "end": 4238, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { "begin": 4270, "end": 4288, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 4257, "end": 4268, "name": "DUP2", "source": 1 }, - { "begin": 4254, "end": 4289, "name": "GT", "source": 1 }, - { "begin": 4251, "end": 4373, "name": "ISZERO", "source": 1 }, + { "begin": 4257, "end": 4268, "name": "DUP2", "source": 2 }, + { "begin": 4254, "end": 4289, "name": "GT", "source": 2 }, + { "begin": 4251, "end": 4373, "name": "ISZERO", "source": 2 }, { "begin": 4251, "end": 4373, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "207" }, - { "begin": 4251, "end": 4373, "name": "JUMPI", "source": 1 }, + { "begin": 4251, "end": 4373, "name": "JUMPI", "source": 2 }, { "begin": 4292, "end": 4371, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "208" }, { "begin": 4292, "end": 4371, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "87" }, { "begin": 4292, "end": 4371, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4292, "end": 4371, "name": "tag", - "source": 1, + "source": 2, "value": "208" }, - { "begin": 4292, "end": 4371, "name": "JUMPDEST", "source": 1 }, + { "begin": 4292, "end": 4371, "name": "JUMPDEST", "source": 2 }, { "begin": 4251, "end": 4373, "name": "tag", - "source": 1, + "source": 2, "value": "207" }, - { "begin": 4251, "end": 4373, "name": "JUMPDEST", "source": 1 }, - { "begin": 4416, "end": 4427, "name": "DUP1", "source": 1 }, - { "begin": 4408, "end": 4414, "name": "DUP7", "source": 1 }, - { "begin": 4404, "end": 4428, "name": "ADD", "source": 1 }, + { "begin": 4251, "end": 4373, "name": "JUMPDEST", "source": 2 }, + { "begin": 4416, "end": 4427, "name": "DUP1", "source": 2 }, + { "begin": 4408, "end": 4414, "name": "DUP7", "source": 2 }, + { "begin": 4404, "end": 4428, "name": "ADD", "source": 2 }, { "begin": 4454, "end": 4500, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "209" }, - { "begin": 4496, "end": 4499, "name": "DUP10", "source": 1 }, - { "begin": 4484, "end": 4494, "name": "DUP3", "source": 1 }, + { "begin": 4496, "end": 4499, "name": "DUP10", "source": 2 }, + { "begin": 4484, "end": 4494, "name": "DUP3", "source": 2 }, { "begin": 4454, "end": 4500, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "94" }, { "begin": 4454, "end": 4500, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4454, "end": 4500, "name": "tag", - "source": 1, + "source": 2, "value": "209" }, - { "begin": 4454, "end": 4500, "name": "JUMPDEST", "source": 1 }, - { "begin": 4449, "end": 4452, "name": "DUP6", "source": 1 }, - { "begin": 4442, "end": 4501, "name": "MSTORE", "source": 1 }, + { "begin": 4454, "end": 4500, "name": "JUMPDEST", "source": 2 }, + { "begin": 4449, "end": 4452, "name": "DUP6", "source": 2 }, + { "begin": 4442, "end": 4501, "name": "MSTORE", "source": 2 }, { "begin": 4530, "end": 4534, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 4525, "end": 4528, "name": "DUP6", "source": 1 }, - { "begin": 4521, "end": 4535, "name": "ADD", "source": 1 }, - { "begin": 4514, "end": 4535, "name": "SWAP5", "source": 1 }, - { "begin": 4514, "end": 4535, "name": "POP", "source": 1 }, - { "begin": 4187, "end": 4545, "name": "POP", "source": 1 }, - { "begin": 4187, "end": 4545, "name": "POP", "source": 1 }, + { "begin": 4525, "end": 4528, "name": "DUP6", "source": 2 }, + { "begin": 4521, "end": 4535, "name": "ADD", "source": 2 }, + { "begin": 4514, "end": 4535, "name": "SWAP5", "source": 2 }, + { "begin": 4514, "end": 4535, "name": "POP", "source": 2 }, + { "begin": 4187, "end": 4545, "name": "POP", "source": 2 }, + { "begin": 4187, "end": 4545, "name": "POP", "source": 2 }, { "begin": 4171, "end": 4175, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 4166, "end": 4169, "name": "DUP2", "source": 1 }, - { "begin": 4162, "end": 4176, "name": "ADD", "source": 1 }, - { "begin": 4155, "end": 4176, "name": "SWAP1", "source": 1 }, - { "begin": 4155, "end": 4176, "name": "POP", "source": 1 }, + { "begin": 4166, "end": 4169, "name": "DUP2", "source": 2 }, + { "begin": 4162, "end": 4176, "name": "ADD", "source": 2 }, + { "begin": 4155, "end": 4176, "name": "SWAP1", "source": 2 }, + { "begin": 4155, "end": 4176, "name": "POP", "source": 2 }, { "begin": 4111, "end": 4545, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "204" }, - { "begin": 4111, "end": 4545, "name": "JUMP", "source": 1 }, + { "begin": 4111, "end": 4545, "name": "JUMP", "source": 2 }, { "begin": 4111, "end": 4545, "name": "tag", - "source": 1, + "source": 2, "value": "206" }, - { "begin": 4111, "end": 4545, "name": "JUMPDEST", "source": 1 }, - { "begin": 4115, "end": 4136, "name": "POP", "source": 1 }, - { "begin": 3720, "end": 4551, "name": "POP", "source": 1 }, - { "begin": 3720, "end": 4551, "name": "POP", "source": 1 }, - { "begin": 3609, "end": 4551, "name": "SWAP4", "source": 1 }, - { "begin": 3609, "end": 4551, "name": "SWAP3", "source": 1 }, - { "begin": 3609, "end": 4551, "name": "POP", "source": 1 }, - { "begin": 3609, "end": 4551, "name": "POP", "source": 1 }, - { "begin": 3609, "end": 4551, "name": "POP", "source": 1 }, + { "begin": 4111, "end": 4545, "name": "JUMPDEST", "source": 2 }, + { "begin": 4115, "end": 4136, "name": "POP", "source": 2 }, + { "begin": 3720, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3720, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "SWAP4", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "SWAP3", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "POP", "source": 2 }, + { "begin": 3609, "end": 4551, "name": "POP", "source": 2 }, { "begin": 3609, "end": 4551, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 4572, "end": 4960, "name": "tag", - "source": 1, + "source": 2, "value": "96" }, - { "begin": 4572, "end": 4960, "name": "JUMPDEST", "source": 1 }, + { "begin": 4572, "end": 4960, "name": "JUMPDEST", "source": 2 }, { "begin": 4652, "end": 4657, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 4701, "end": 4704, "name": "DUP3", "source": 1 }, + { "begin": 4701, "end": 4704, "name": "DUP3", "source": 2 }, { "begin": 4694, "end": 4698, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 4686, "end": 4692, "name": "DUP4", "source": 1 }, - { "begin": 4682, "end": 4699, "name": "ADD", "source": 1 }, - { "begin": 4678, "end": 4705, "name": "SLT", "source": 1 }, + { "begin": 4686, "end": 4692, "name": "DUP4", "source": 2 }, + { "begin": 4682, "end": 4699, "name": "ADD", "source": 2 }, + { "begin": 4678, "end": 4705, "name": "SLT", "source": 2 }, { "begin": 4668, "end": 4790, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "211" }, - { "begin": 4668, "end": 4790, "name": "JUMPI", "source": 1 }, + { "begin": 4668, "end": 4790, "name": "JUMPI", "source": 2 }, { "begin": 4709, "end": 4788, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "212" }, { "begin": 4709, "end": 4788, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "87" }, { "begin": 4709, "end": 4788, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4709, "end": 4788, "name": "tag", - "source": 1, + "source": 2, "value": "212" }, - { "begin": 4709, "end": 4788, "name": "JUMPDEST", "source": 1 }, + { "begin": 4709, "end": 4788, "name": "JUMPDEST", "source": 2 }, { "begin": 4668, "end": 4790, "name": "tag", - "source": 1, + "source": 2, "value": "211" }, - { "begin": 4668, "end": 4790, "name": "JUMPDEST", "source": 1 }, - { "begin": 4826, "end": 4832, "name": "DUP2", "source": 1 }, + { "begin": 4668, "end": 4790, "name": "JUMPDEST", "source": 2 }, + { "begin": 4826, "end": 4832, "name": "DUP2", "source": 2 }, { "begin": 4813, "end": 4833, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { "begin": 4851, "end": 4954, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "213" }, - { "begin": 4950, "end": 4953, "name": "DUP5", "source": 1 }, - { "begin": 4942, "end": 4948, "name": "DUP3", "source": 1 }, + { "begin": 4950, "end": 4953, "name": "DUP5", "source": 2 }, + { "begin": 4942, "end": 4948, "name": "DUP3", "source": 2 }, { "begin": 4935, "end": 4939, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 4927, "end": 4933, "name": "DUP7", "source": 1 }, - { "begin": 4923, "end": 4940, "name": "ADD", "source": 1 }, + { "begin": 4927, "end": 4933, "name": "DUP7", "source": 2 }, + { "begin": 4923, "end": 4940, "name": "ADD", "source": 2 }, { "begin": 4851, "end": 4954, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "95" }, { "begin": 4851, "end": 4954, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { "begin": 4851, "end": 4954, "name": "tag", - "source": 1, + "source": 2, "value": "213" }, - { "begin": 4851, "end": 4954, "name": "JUMPDEST", "source": 1 }, - { "begin": 4842, "end": 4954, "name": "SWAP2", "source": 1 }, - { "begin": 4842, "end": 4954, "name": "POP", "source": 1 }, - { "begin": 4658, "end": 4960, "name": "POP", "source": 1 }, - { "begin": 4572, "end": 4960, "name": "SWAP3", "source": 1 }, - { "begin": 4572, "end": 4960, "name": "SWAP2", "source": 1 }, - { "begin": 4572, "end": 4960, "name": "POP", "source": 1 }, - { "begin": 4572, "end": 4960, "name": "POP", "source": 1 }, + { "begin": 4851, "end": 4954, "name": "JUMPDEST", "source": 2 }, + { "begin": 4842, "end": 4954, "name": "SWAP2", "source": 2 }, + { "begin": 4842, "end": 4954, "name": "POP", "source": 2 }, + { "begin": 4658, "end": 4960, "name": "POP", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "SWAP3", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "SWAP2", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "POP", "source": 2 }, + { "begin": 4572, "end": 4960, "name": "POP", "source": 2 }, { "begin": 4572, "end": 4960, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { "begin": 5002, - "end": 5778, + "end": 5780, "name": "tag", - "source": 1, + "source": 2, "value": "97" }, - { "begin": 5002, "end": 5778, "name": "JUMPDEST", "source": 1 }, + { "begin": 5002, "end": 5780, "name": "JUMPDEST", "source": 2 }, { - "begin": 5079, - "end": 5084, + "begin": 5081, + "end": 5086, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 5123, - "end": 5127, + "begin": 5125, + "end": 5129, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 5111, "end": 5120, "name": "DUP3", "source": 1 }, - { "begin": 5106, "end": 5109, "name": "DUP5", "source": 1 }, - { "begin": 5102, "end": 5121, "name": "SUB", "source": 1 }, - { "begin": 5098, "end": 5128, "name": "SLT", "source": 1 }, - { "begin": 5095, "end": 5212, "name": "ISZERO", "source": 1 }, + { "begin": 5113, "end": 5122, "name": "DUP3", "source": 2 }, + { "begin": 5108, "end": 5111, "name": "DUP5", "source": 2 }, + { "begin": 5104, "end": 5123, "name": "SUB", "source": 2 }, + { "begin": 5100, "end": 5130, "name": "SLT", "source": 2 }, + { "begin": 5097, "end": 5214, "name": "ISZERO", "source": 2 }, { - "begin": 5095, - "end": 5212, + "begin": 5097, + "end": 5214, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "215" }, - { "begin": 5095, "end": 5212, "name": "JUMPI", "source": 1 }, + { "begin": 5097, "end": 5214, "name": "JUMPI", "source": 2 }, { - "begin": 5131, - "end": 5210, + "begin": 5133, + "end": 5212, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "216" }, { - "begin": 5131, - "end": 5210, + "begin": 5133, + "end": 5212, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "78" }, { - "begin": 5131, - "end": 5210, + "begin": 5133, + "end": 5212, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5131, - "end": 5210, + "begin": 5133, + "end": 5212, "name": "tag", - "source": 1, + "source": 2, "value": "216" }, - { "begin": 5131, "end": 5210, "name": "JUMPDEST", "source": 1 }, + { "begin": 5133, "end": 5212, "name": "JUMPDEST", "source": 2 }, { - "begin": 5095, - "end": 5212, + "begin": 5097, + "end": 5214, "name": "tag", - "source": 1, + "source": 2, "value": "215" }, - { "begin": 5095, "end": 5212, "name": "JUMPDEST", "source": 1 }, + { "begin": 5097, "end": 5214, "name": "JUMPDEST", "source": 2 }, { - "begin": 5230, - "end": 5251, + "begin": 5232, + "end": 5253, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "217" }, { - "begin": 5246, - "end": 5250, + "begin": 5248, + "end": 5252, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { - "begin": 5230, - "end": 5251, + "begin": 5232, + "end": 5253, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { - "begin": 5230, - "end": 5251, + "begin": 5232, + "end": 5253, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5230, - "end": 5251, + "begin": 5232, + "end": 5253, "name": "tag", - "source": 1, + "source": 2, "value": "217" }, - { "begin": 5230, "end": 5251, "name": "JUMPDEST", "source": 1 }, - { "begin": 5221, "end": 5251, "name": "SWAP1", "source": 1 }, - { "begin": 5221, "end": 5251, "name": "POP", "source": 1 }, + { "begin": 5232, "end": 5253, "name": "JUMPDEST", "source": 2 }, + { "begin": 5223, "end": 5253, "name": "SWAP1", "source": 2 }, + { "begin": 5223, "end": 5253, "name": "POP", "source": 2 }, { - "begin": 5313, - "end": 5314, + "begin": 5315, + "end": 5316, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 5353, - "end": 5400, + "begin": 5355, + "end": 5402, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "218" }, - { "begin": 5396, "end": 5399, "name": "DUP5", "source": 1 }, - { "begin": 5387, "end": 5393, "name": "DUP3", "source": 1 }, - { "begin": 5376, "end": 5385, "name": "DUP6", "source": 1 }, - { "begin": 5372, "end": 5394, "name": "ADD", "source": 1 }, + { "begin": 5398, "end": 5401, "name": "DUP5", "source": 2 }, + { "begin": 5389, "end": 5395, "name": "DUP3", "source": 2 }, + { "begin": 5378, "end": 5387, "name": "DUP6", "source": 2 }, + { "begin": 5374, "end": 5396, "name": "ADD", "source": 2 }, { - "begin": 5353, - "end": 5400, + "begin": 5355, + "end": 5402, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "86" }, { - "begin": 5353, - "end": 5400, + "begin": 5355, + "end": 5402, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5353, - "end": 5400, + "begin": 5355, + "end": 5402, "name": "tag", - "source": 1, + "source": 2, "value": "218" }, - { "begin": 5353, "end": 5400, "name": "JUMPDEST", "source": 1 }, + { "begin": 5355, "end": 5402, "name": "JUMPDEST", "source": 2 }, { - "begin": 5346, - "end": 5350, + "begin": 5348, + "end": 5352, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 5339, "end": 5344, "name": "DUP4", "source": 1 }, - { "begin": 5335, "end": 5351, "name": "ADD", "source": 1 }, - { "begin": 5328, "end": 5401, "name": "MSTORE", "source": 1 }, - { "begin": 5261, "end": 5412, "name": "POP", "source": 1 }, + { "begin": 5341, "end": 5346, "name": "DUP4", "source": 2 }, + { "begin": 5337, "end": 5353, "name": "ADD", "source": 2 }, + { "begin": 5330, "end": 5403, "name": "MSTORE", "source": 2 }, + { "begin": 5263, "end": 5414, "name": "POP", "source": 2 }, { - "begin": 5503, - "end": 5505, + "begin": 5505, + "end": 5507, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 5492, "end": 5501, "name": "DUP3", "source": 1 }, - { "begin": 5488, "end": 5506, "name": "ADD", "source": 1 }, + { "begin": 5494, "end": 5503, "name": "DUP3", "source": 2 }, + { "begin": 5490, "end": 5508, "name": "ADD", "source": 2 }, { - "begin": 5475, - "end": 5507, + "begin": 5477, + "end": 5509, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 5534, - "end": 5552, + "begin": 5536, + "end": 5554, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 5526, "end": 5532, "name": "DUP2", "source": 1 }, - { "begin": 5523, "end": 5553, "name": "GT", "source": 1 }, - { "begin": 5520, "end": 5637, "name": "ISZERO", "source": 1 }, + { "begin": 5528, "end": 5534, "name": "DUP2", "source": 2 }, + { "begin": 5525, "end": 5555, "name": "GT", "source": 2 }, + { "begin": 5522, "end": 5639, "name": "ISZERO", "source": 2 }, { - "begin": 5520, - "end": 5637, + "begin": 5522, + "end": 5639, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "219" }, - { "begin": 5520, "end": 5637, "name": "JUMPI", "source": 1 }, + { "begin": 5522, "end": 5639, "name": "JUMPI", "source": 2 }, { - "begin": 5556, - "end": 5635, + "begin": 5558, + "end": 5637, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "220" }, { - "begin": 5556, - "end": 5635, + "begin": 5558, + "end": 5637, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "83" }, { - "begin": 5556, - "end": 5635, + "begin": 5558, + "end": 5637, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5556, - "end": 5635, + "begin": 5558, + "end": 5637, "name": "tag", - "source": 1, + "source": 2, "value": "220" }, - { "begin": 5556, "end": 5635, "name": "JUMPDEST", "source": 1 }, + { "begin": 5558, "end": 5637, "name": "JUMPDEST", "source": 2 }, { - "begin": 5520, - "end": 5637, + "begin": 5522, + "end": 5639, "name": "tag", - "source": 1, + "source": 2, "value": "219" }, - { "begin": 5520, "end": 5637, "name": "JUMPDEST", "source": 1 }, + { "begin": 5522, "end": 5639, "name": "JUMPDEST", "source": 2 }, { - "begin": 5676, - "end": 5759, + "begin": 5678, + "end": 5761, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "221" }, - { "begin": 5755, "end": 5758, "name": "DUP5", "source": 1 }, - { "begin": 5746, "end": 5752, "name": "DUP3", "source": 1 }, - { "begin": 5735, "end": 5744, "name": "DUP6", "source": 1 }, - { "begin": 5731, "end": 5753, "name": "ADD", "source": 1 }, + { "begin": 5757, "end": 5760, "name": "DUP5", "source": 2 }, + { "begin": 5748, "end": 5754, "name": "DUP3", "source": 2 }, + { "begin": 5737, "end": 5746, "name": "DUP6", "source": 2 }, + { "begin": 5733, "end": 5755, "name": "ADD", "source": 2 }, { - "begin": 5676, - "end": 5759, + "begin": 5678, + "end": 5761, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "96" }, { - "begin": 5676, - "end": 5759, + "begin": 5678, + "end": 5761, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5676, - "end": 5759, + "begin": 5678, + "end": 5761, "name": "tag", - "source": 1, + "source": 2, "value": "221" }, - { "begin": 5676, "end": 5759, "name": "JUMPDEST", "source": 1 }, + { "begin": 5678, "end": 5761, "name": "JUMPDEST", "source": 2 }, { - "begin": 5669, - "end": 5673, + "begin": 5671, + "end": 5675, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 5662, "end": 5667, "name": "DUP4", "source": 1 }, - { "begin": 5658, "end": 5674, "name": "ADD", "source": 1 }, - { "begin": 5651, "end": 5760, "name": "MSTORE", "source": 1 }, - { "begin": 5422, "end": 5771, "name": "POP", "source": 1 }, - { "begin": 5002, "end": 5778, "name": "SWAP3", "source": 1 }, - { "begin": 5002, "end": 5778, "name": "SWAP2", "source": 1 }, - { "begin": 5002, "end": 5778, "name": "POP", "source": 1 }, - { "begin": 5002, "end": 5778, "name": "POP", "source": 1 }, + { "begin": 5664, "end": 5669, "name": "DUP4", "source": 2 }, + { "begin": 5660, "end": 5676, "name": "ADD", "source": 2 }, + { "begin": 5653, "end": 5762, "name": "MSTORE", "source": 2 }, + { "begin": 5424, "end": 5773, "name": "POP", "source": 2 }, + { "begin": 5002, "end": 5780, "name": "SWAP3", "source": 2 }, + { "begin": 5002, "end": 5780, "name": "SWAP2", "source": 2 }, + { "begin": 5002, "end": 5780, "name": "POP", "source": 2 }, + { "begin": 5002, "end": 5780, "name": "POP", "source": 2 }, { "begin": 5002, - "end": 5778, + "end": 5780, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5784, - "end": 5861, + "begin": 5786, + "end": 5863, "name": "tag", - "source": 1, + "source": 2, "value": "98" }, - { "begin": 5784, "end": 5861, "name": "JUMPDEST", "source": 1 }, + { "begin": 5786, "end": 5863, "name": "JUMPDEST", "source": 2 }, { - "begin": 5821, - "end": 5828, + "begin": 5823, + "end": 5830, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 5850, "end": 5855, "name": "DUP2", "source": 1 }, - { "begin": 5839, "end": 5855, "name": "SWAP1", "source": 1 }, - { "begin": 5839, "end": 5855, "name": "POP", "source": 1 }, - { "begin": 5784, "end": 5861, "name": "SWAP2", "source": 1 }, - { "begin": 5784, "end": 5861, "name": "SWAP1", "source": 1 }, - { "begin": 5784, "end": 5861, "name": "POP", "source": 1 }, + { "begin": 5852, "end": 5857, "name": "DUP2", "source": 2 }, + { "begin": 5841, "end": 5857, "name": "SWAP1", "source": 2 }, + { "begin": 5841, "end": 5857, "name": "POP", "source": 2 }, + { "begin": 5786, "end": 5863, "name": "SWAP2", "source": 2 }, + { "begin": 5786, "end": 5863, "name": "SWAP1", "source": 2 }, + { "begin": 5786, "end": 5863, "name": "POP", "source": 2 }, { - "begin": 5784, - "end": 5861, + "begin": 5786, + "end": 5863, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5867, - "end": 5989, + "begin": 5869, + "end": 5991, "name": "tag", - "source": 1, + "source": 2, "value": "99" }, - { "begin": 5867, "end": 5989, "name": "JUMPDEST", "source": 1 }, + { "begin": 5869, "end": 5991, "name": "JUMPDEST", "source": 2 }, { - "begin": 5940, - "end": 5964, + "begin": 5942, + "end": 5966, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "224" }, - { "begin": 5958, "end": 5963, "name": "DUP2", "source": 1 }, + { "begin": 5960, "end": 5965, "name": "DUP2", "source": 2 }, { - "begin": 5940, - "end": 5964, + "begin": 5942, + "end": 5966, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "98" }, { - "begin": 5940, - "end": 5964, + "begin": 5942, + "end": 5966, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 5940, - "end": 5964, + "begin": 5942, + "end": 5966, "name": "tag", - "source": 1, + "source": 2, "value": "224" }, - { "begin": 5940, "end": 5964, "name": "JUMPDEST", "source": 1 }, - { "begin": 5933, "end": 5938, "name": "DUP2", "source": 1 }, - { "begin": 5930, "end": 5965, "name": "EQ", "source": 1 }, + { "begin": 5942, "end": 5966, "name": "JUMPDEST", "source": 2 }, + { "begin": 5935, "end": 5940, "name": "DUP2", "source": 2 }, + { "begin": 5932, "end": 5967, "name": "EQ", "source": 2 }, { - "begin": 5920, - "end": 5983, + "begin": 5922, + "end": 5985, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "225" }, - { "begin": 5920, "end": 5983, "name": "JUMPI", "source": 1 }, + { "begin": 5922, "end": 5985, "name": "JUMPI", "source": 2 }, { - "begin": 5979, - "end": 5980, + "begin": 5981, + "end": 5982, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 5976, "end": 5977, "name": "DUP1", "source": 1 }, - { "begin": 5969, "end": 5981, "name": "REVERT", "source": 1 }, + { "begin": 5978, "end": 5979, "name": "DUP1", "source": 2 }, + { "begin": 5971, "end": 5983, "name": "REVERT", "source": 2 }, { - "begin": 5920, - "end": 5983, + "begin": 5922, + "end": 5985, "name": "tag", - "source": 1, + "source": 2, "value": "225" }, - { "begin": 5920, "end": 5983, "name": "JUMPDEST", "source": 1 }, - { "begin": 5867, "end": 5989, "name": "POP", "source": 1 }, + { "begin": 5922, "end": 5985, "name": "JUMPDEST", "source": 2 }, + { "begin": 5869, "end": 5991, "name": "POP", "source": 2 }, { - "begin": 5867, - "end": 5989, + "begin": 5869, + "end": 5991, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 5995, - "end": 6134, + "begin": 5997, + "end": 6136, "name": "tag", - "source": 1, + "source": 2, "value": "100" }, - { "begin": 5995, "end": 6134, "name": "JUMPDEST", "source": 1 }, + { "begin": 5997, "end": 6136, "name": "JUMPDEST", "source": 2 }, { - "begin": 6041, - "end": 6046, + "begin": 6043, + "end": 6048, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6079, "end": 6085, "name": "DUP2", "source": 1 }, + { "begin": 6081, "end": 6087, "name": "DUP2", "source": 2 }, { - "begin": 6066, - "end": 6086, + "begin": 6068, + "end": 6088, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 6057, "end": 6086, "name": "SWAP1", "source": 1 }, - { "begin": 6057, "end": 6086, "name": "POP", "source": 1 }, + { "begin": 6059, "end": 6088, "name": "SWAP1", "source": 2 }, + { "begin": 6059, "end": 6088, "name": "POP", "source": 2 }, { - "begin": 6095, - "end": 6128, + "begin": 6097, + "end": 6130, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "227" }, - { "begin": 6122, "end": 6127, "name": "DUP2", "source": 1 }, + { "begin": 6124, "end": 6129, "name": "DUP2", "source": 2 }, { - "begin": 6095, - "end": 6128, + "begin": 6097, + "end": 6130, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "99" }, { - "begin": 6095, - "end": 6128, + "begin": 6097, + "end": 6130, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6095, - "end": 6128, + "begin": 6097, + "end": 6130, "name": "tag", - "source": 1, + "source": 2, "value": "227" }, - { "begin": 6095, "end": 6128, "name": "JUMPDEST", "source": 1 }, - { "begin": 5995, "end": 6134, "name": "SWAP3", "source": 1 }, - { "begin": 5995, "end": 6134, "name": "SWAP2", "source": 1 }, - { "begin": 5995, "end": 6134, "name": "POP", "source": 1 }, - { "begin": 5995, "end": 6134, "name": "POP", "source": 1 }, + { "begin": 6097, "end": 6130, "name": "JUMPDEST", "source": 2 }, + { "begin": 5997, "end": 6136, "name": "SWAP3", "source": 2 }, + { "begin": 5997, "end": 6136, "name": "SWAP2", "source": 2 }, + { "begin": 5997, "end": 6136, "name": "POP", "source": 2 }, + { "begin": 5997, "end": 6136, "name": "POP", "source": 2 }, { - "begin": 5995, - "end": 6134, + "begin": 5997, + "end": 6136, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6140, - "end": 6241, + "begin": 6142, + "end": 6243, "name": "tag", - "source": 1, + "source": 2, "value": "101" }, - { "begin": 6140, "end": 6241, "name": "JUMPDEST", "source": 1 }, + { "begin": 6142, "end": 6243, "name": "JUMPDEST", "source": 2 }, { - "begin": 6176, - "end": 6183, + "begin": 6178, + "end": 6185, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6216, - "end": 6234, + "begin": 6218, + "end": 6236, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 6209, "end": 6214, "name": "DUP3", "source": 1 }, - { "begin": 6205, "end": 6235, "name": "AND", "source": 1 }, - { "begin": 6194, "end": 6235, "name": "SWAP1", "source": 1 }, - { "begin": 6194, "end": 6235, "name": "POP", "source": 1 }, - { "begin": 6140, "end": 6241, "name": "SWAP2", "source": 1 }, - { "begin": 6140, "end": 6241, "name": "SWAP1", "source": 1 }, - { "begin": 6140, "end": 6241, "name": "POP", "source": 1 }, + { "begin": 6211, "end": 6216, "name": "DUP3", "source": 2 }, + { "begin": 6207, "end": 6237, "name": "AND", "source": 2 }, + { "begin": 6196, "end": 6237, "name": "SWAP1", "source": 2 }, + { "begin": 6196, "end": 6237, "name": "POP", "source": 2 }, + { "begin": 6142, "end": 6243, "name": "SWAP2", "source": 2 }, + { "begin": 6142, "end": 6243, "name": "SWAP1", "source": 2 }, + { "begin": 6142, "end": 6243, "name": "POP", "source": 2 }, { - "begin": 6140, - "end": 6241, + "begin": 6142, + "end": 6243, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6247, - "end": 6367, + "begin": 6249, + "end": 6369, "name": "tag", - "source": 1, + "source": 2, "value": "102" }, - { "begin": 6247, "end": 6367, "name": "JUMPDEST", "source": 1 }, + { "begin": 6249, "end": 6369, "name": "JUMPDEST", "source": 2 }, { - "begin": 6319, - "end": 6342, + "begin": 6321, + "end": 6344, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "230" }, - { "begin": 6336, "end": 6341, "name": "DUP2", "source": 1 }, + { "begin": 6338, "end": 6343, "name": "DUP2", "source": 2 }, { - "begin": 6319, - "end": 6342, + "begin": 6321, + "end": 6344, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "101" }, { - "begin": 6319, - "end": 6342, + "begin": 6321, + "end": 6344, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6319, - "end": 6342, + "begin": 6321, + "end": 6344, "name": "tag", - "source": 1, + "source": 2, "value": "230" }, - { "begin": 6319, "end": 6342, "name": "JUMPDEST", "source": 1 }, - { "begin": 6312, "end": 6317, "name": "DUP2", "source": 1 }, - { "begin": 6309, "end": 6343, "name": "EQ", "source": 1 }, + { "begin": 6321, "end": 6344, "name": "JUMPDEST", "source": 2 }, + { "begin": 6314, "end": 6319, "name": "DUP2", "source": 2 }, + { "begin": 6311, "end": 6345, "name": "EQ", "source": 2 }, { - "begin": 6299, - "end": 6361, + "begin": 6301, + "end": 6363, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "231" }, - { "begin": 6299, "end": 6361, "name": "JUMPI", "source": 1 }, + { "begin": 6301, "end": 6363, "name": "JUMPI", "source": 2 }, { - "begin": 6357, - "end": 6358, + "begin": 6359, + "end": 6360, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6354, "end": 6355, "name": "DUP1", "source": 1 }, - { "begin": 6347, "end": 6359, "name": "REVERT", "source": 1 }, + { "begin": 6356, "end": 6357, "name": "DUP1", "source": 2 }, + { "begin": 6349, "end": 6361, "name": "REVERT", "source": 2 }, { - "begin": 6299, - "end": 6361, + "begin": 6301, + "end": 6363, "name": "tag", - "source": 1, + "source": 2, "value": "231" }, - { "begin": 6299, "end": 6361, "name": "JUMPDEST", "source": 1 }, - { "begin": 6247, "end": 6367, "name": "POP", "source": 1 }, + { "begin": 6301, "end": 6363, "name": "JUMPDEST", "source": 2 }, + { "begin": 6249, "end": 6369, "name": "POP", "source": 2 }, { - "begin": 6247, - "end": 6367, + "begin": 6249, + "end": 6369, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6373, - "end": 6510, + "begin": 6375, + "end": 6512, "name": "tag", - "source": 1, + "source": 2, "value": "103" }, - { "begin": 6373, "end": 6510, "name": "JUMPDEST", "source": 1 }, + { "begin": 6375, "end": 6512, "name": "JUMPDEST", "source": 2 }, { - "begin": 6418, - "end": 6423, + "begin": 6420, + "end": 6425, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6456, "end": 6462, "name": "DUP2", "source": 1 }, + { "begin": 6458, "end": 6464, "name": "DUP2", "source": 2 }, { - "begin": 6443, - "end": 6463, + "begin": 6445, + "end": 6465, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 6434, "end": 6463, "name": "SWAP1", "source": 1 }, - { "begin": 6434, "end": 6463, "name": "POP", "source": 1 }, + { "begin": 6436, "end": 6465, "name": "SWAP1", "source": 2 }, + { "begin": 6436, "end": 6465, "name": "POP", "source": 2 }, { - "begin": 6472, - "end": 6504, + "begin": 6474, + "end": 6506, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "233" }, - { "begin": 6498, "end": 6503, "name": "DUP2", "source": 1 }, + { "begin": 6500, "end": 6505, "name": "DUP2", "source": 2 }, { - "begin": 6472, - "end": 6504, + "begin": 6474, + "end": 6506, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "102" }, { - "begin": 6472, - "end": 6504, + "begin": 6474, + "end": 6506, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6472, - "end": 6504, + "begin": 6474, + "end": 6506, "name": "tag", - "source": 1, + "source": 2, "value": "233" }, - { "begin": 6472, "end": 6504, "name": "JUMPDEST", "source": 1 }, - { "begin": 6373, "end": 6510, "name": "SWAP3", "source": 1 }, - { "begin": 6373, "end": 6510, "name": "SWAP2", "source": 1 }, - { "begin": 6373, "end": 6510, "name": "POP", "source": 1 }, - { "begin": 6373, "end": 6510, "name": "POP", "source": 1 }, + { "begin": 6474, "end": 6506, "name": "JUMPDEST", "source": 2 }, + { "begin": 6375, "end": 6512, "name": "SWAP3", "source": 2 }, + { "begin": 6375, "end": 6512, "name": "SWAP2", "source": 2 }, + { "begin": 6375, "end": 6512, "name": "POP", "source": 2 }, + { "begin": 6375, "end": 6512, "name": "POP", "source": 2 }, { - "begin": 6373, - "end": 6510, + "begin": 6375, + "end": 6512, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 6516, - "end": 7857, + "begin": 6518, + "end": 7867, "name": "tag", - "source": 1, + "source": 2, "value": "13" }, - { "begin": 6516, "end": 7857, "name": "JUMPDEST", "source": 1 }, + { "begin": 6518, "end": 7867, "name": "JUMPDEST", "source": 2 }, { - "begin": 6666, - "end": 6672, + "begin": 6672, + "end": 6678, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6674, "end": 6680, "name": "DUP1", "source": 1 }, + { "begin": 6680, "end": 6686, "name": "DUP1", "source": 2 }, { - "begin": 6682, - "end": 6688, + "begin": 6688, + "end": 6694, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6690, "end": 6696, "name": "DUP1", "source": 1 }, + { "begin": 6696, "end": 6702, "name": "DUP1", "source": 2 }, { - "begin": 6698, - "end": 6704, + "begin": 6704, + "end": 6710, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 6747, - "end": 6750, + "begin": 6753, + "end": 6756, "name": "PUSH", - "source": 1, + "source": 2, "value": "A0" }, - { "begin": 6735, "end": 6744, "name": "DUP7", "source": 1 }, - { "begin": 6726, "end": 6733, "name": "DUP9", "source": 1 }, - { "begin": 6722, "end": 6745, "name": "SUB", "source": 1 }, - { "begin": 6718, "end": 6751, "name": "SLT", "source": 1 }, - { "begin": 6715, "end": 6835, "name": "ISZERO", "source": 1 }, + { "begin": 6741, "end": 6750, "name": "DUP7", "source": 2 }, + { "begin": 6732, "end": 6739, "name": "DUP9", "source": 2 }, + { "begin": 6728, "end": 6751, "name": "SUB", "source": 2 }, + { "begin": 6724, "end": 6757, "name": "SLT", "source": 2 }, + { "begin": 6721, "end": 6841, "name": "ISZERO", "source": 2 }, { - "begin": 6715, - "end": 6835, + "begin": 6721, + "end": 6841, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "235" }, - { "begin": 6715, "end": 6835, "name": "JUMPI", "source": 1 }, + { "begin": 6721, "end": 6841, "name": "JUMPI", "source": 2 }, { - "begin": 6754, - "end": 6833, + "begin": 6760, + "end": 6839, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "236" }, { - "begin": 6754, - "end": 6833, + "begin": 6760, + "end": 6839, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 6754, - "end": 6833, + "begin": 6760, + "end": 6839, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6754, - "end": 6833, + "begin": 6760, + "end": 6839, "name": "tag", - "source": 1, + "source": 2, "value": "236" }, - { "begin": 6754, "end": 6833, "name": "JUMPDEST", "source": 1 }, + { "begin": 6760, "end": 6839, "name": "JUMPDEST", "source": 2 }, { - "begin": 6715, - "end": 6835, + "begin": 6721, + "end": 6841, "name": "tag", - "source": 1, + "source": 2, "value": "235" }, - { "begin": 6715, "end": 6835, "name": "JUMPDEST", "source": 1 }, + { "begin": 6721, "end": 6841, "name": "JUMPDEST", "source": 2 }, { - "begin": 6902, - "end": 6903, + "begin": 6908, + "end": 6909, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 6891, "end": 6900, "name": "DUP7", "source": 1 }, - { "begin": 6887, "end": 6904, "name": "ADD", "source": 1 }, + { "begin": 6897, "end": 6906, "name": "DUP7", "source": 2 }, + { "begin": 6893, "end": 6910, "name": "ADD", "source": 2 }, { - "begin": 6874, - "end": 6905, + "begin": 6880, + "end": 6911, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 6932, - "end": 6950, + "begin": 6938, + "end": 6956, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 6924, "end": 6930, "name": "DUP2", "source": 1 }, - { "begin": 6921, "end": 6951, "name": "GT", "source": 1 }, - { "begin": 6918, "end": 7035, "name": "ISZERO", "source": 1 }, + { "begin": 6930, "end": 6936, "name": "DUP2", "source": 2 }, + { "begin": 6927, "end": 6957, "name": "GT", "source": 2 }, + { "begin": 6924, "end": 7041, "name": "ISZERO", "source": 2 }, { - "begin": 6918, - "end": 7035, + "begin": 6924, + "end": 7041, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "237" }, - { "begin": 6918, "end": 7035, "name": "JUMPI", "source": 1 }, + { "begin": 6924, "end": 7041, "name": "JUMPI", "source": 2 }, { - "begin": 6954, - "end": 7033, + "begin": 6960, + "end": 7039, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "238" }, { - "begin": 6954, - "end": 7033, + "begin": 6960, + "end": 7039, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 6954, - "end": 7033, + "begin": 6960, + "end": 7039, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 6954, - "end": 7033, + "begin": 6960, + "end": 7039, "name": "tag", - "source": 1, + "source": 2, "value": "238" }, - { "begin": 6954, "end": 7033, "name": "JUMPDEST", "source": 1 }, + { "begin": 6960, "end": 7039, "name": "JUMPDEST", "source": 2 }, { - "begin": 6918, - "end": 7035, + "begin": 6924, + "end": 7041, "name": "tag", - "source": 1, + "source": 2, "value": "237" }, - { "begin": 6918, "end": 7035, "name": "JUMPDEST", "source": 1 }, + { "begin": 6924, "end": 7041, "name": "JUMPDEST", "source": 2 }, { - "begin": 7059, - "end": 7140, + "begin": 7065, + "end": 7148, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "239" }, - { "begin": 7132, "end": 7139, "name": "DUP9", "source": 1 }, - { "begin": 7123, "end": 7129, "name": "DUP3", "source": 1 }, - { "begin": 7112, "end": 7121, "name": "DUP10", "source": 1 }, - { "begin": 7108, "end": 7130, "name": "ADD", "source": 1 }, + { "begin": 7140, "end": 7147, "name": "DUP9", "source": 2 }, + { "begin": 7131, "end": 7137, "name": "DUP3", "source": 2 }, + { "begin": 7120, "end": 7129, "name": "DUP10", "source": 2 }, + { "begin": 7116, "end": 7138, "name": "ADD", "source": 2 }, { - "begin": 7059, - "end": 7140, + "begin": 7065, + "end": 7148, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 7059, - "end": 7140, + "begin": 7065, + "end": 7148, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7059, - "end": 7140, + "begin": 7065, + "end": 7148, "name": "tag", - "source": 1, + "source": 2, "value": "239" }, - { "begin": 7059, "end": 7140, "name": "JUMPDEST", "source": 1 }, - { "begin": 7049, "end": 7140, "name": "SWAP6", "source": 1 }, - { "begin": 7049, "end": 7140, "name": "POP", "source": 1 }, - { "begin": 6845, "end": 7150, "name": "POP", "source": 1 }, + { "begin": 7065, "end": 7148, "name": "JUMPDEST", "source": 2 }, + { "begin": 7055, "end": 7148, "name": "SWAP6", "source": 2 }, + { "begin": 7055, "end": 7148, "name": "POP", "source": 2 }, + { "begin": 6851, "end": 7158, "name": "POP", "source": 2 }, { - "begin": 7189, - "end": 7191, + "begin": 7197, + "end": 7199, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 7215, - "end": 7268, + "begin": 7223, + "end": 7276, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "240" }, - { "begin": 7260, "end": 7267, "name": "DUP9", "source": 1 }, - { "begin": 7251, "end": 7257, "name": "DUP3", "source": 1 }, - { "begin": 7240, "end": 7249, "name": "DUP10", "source": 1 }, - { "begin": 7236, "end": 7258, "name": "ADD", "source": 1 }, + { "begin": 7268, "end": 7275, "name": "DUP9", "source": 2 }, + { "begin": 7259, "end": 7265, "name": "DUP3", "source": 2 }, + { "begin": 7248, "end": 7257, "name": "DUP10", "source": 2 }, + { "begin": 7244, "end": 7266, "name": "ADD", "source": 2 }, { - "begin": 7215, - "end": 7268, + "begin": 7223, + "end": 7276, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 7215, - "end": 7268, + "begin": 7223, + "end": 7276, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7215, - "end": 7268, + "begin": 7223, + "end": 7276, "name": "tag", - "source": 1, + "source": 2, "value": "240" }, - { "begin": 7215, "end": 7268, "name": "JUMPDEST", "source": 1 }, - { "begin": 7205, "end": 7268, "name": "SWAP5", "source": 1 }, - { "begin": 7205, "end": 7268, "name": "POP", "source": 1 }, - { "begin": 7160, "end": 7278, "name": "POP", "source": 1 }, + { "begin": 7223, "end": 7276, "name": "JUMPDEST", "source": 2 }, + { "begin": 7213, "end": 7276, "name": "SWAP5", "source": 2 }, + { "begin": 7213, "end": 7276, "name": "POP", "source": 2 }, + { "begin": 7168, "end": 7286, "name": "POP", "source": 2 }, { - "begin": 7317, - "end": 7319, + "begin": 7325, + "end": 7327, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { - "begin": 7343, - "end": 7396, + "begin": 7351, + "end": 7404, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "241" }, - { "begin": 7388, "end": 7395, "name": "DUP9", "source": 1 }, - { "begin": 7379, "end": 7385, "name": "DUP3", "source": 1 }, - { "begin": 7368, "end": 7377, "name": "DUP10", "source": 1 }, - { "begin": 7364, "end": 7386, "name": "ADD", "source": 1 }, + { "begin": 7396, "end": 7403, "name": "DUP9", "source": 2 }, + { "begin": 7387, "end": 7393, "name": "DUP3", "source": 2 }, + { "begin": 7376, "end": 7385, "name": "DUP10", "source": 2 }, + { "begin": 7372, "end": 7394, "name": "ADD", "source": 2 }, { - "begin": 7343, - "end": 7396, + "begin": 7351, + "end": 7404, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 7343, - "end": 7396, + "begin": 7351, + "end": 7404, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7343, - "end": 7396, + "begin": 7351, + "end": 7404, "name": "tag", - "source": 1, + "source": 2, "value": "241" }, - { "begin": 7343, "end": 7396, "name": "JUMPDEST", "source": 1 }, - { "begin": 7333, "end": 7396, "name": "SWAP4", "source": 1 }, - { "begin": 7333, "end": 7396, "name": "POP", "source": 1 }, - { "begin": 7288, "end": 7406, "name": "POP", "source": 1 }, + { "begin": 7351, "end": 7404, "name": "JUMPDEST", "source": 2 }, + { "begin": 7341, "end": 7404, "name": "SWAP4", "source": 2 }, + { "begin": 7341, "end": 7404, "name": "POP", "source": 2 }, + { "begin": 7296, "end": 7414, "name": "POP", "source": 2 }, { - "begin": 7473, - "end": 7475, + "begin": 7481, + "end": 7483, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 7462, "end": 7471, "name": "DUP7", "source": 1 }, - { "begin": 7458, "end": 7476, "name": "ADD", "source": 1 }, + { "begin": 7470, "end": 7479, "name": "DUP7", "source": 2 }, + { "begin": 7466, "end": 7484, "name": "ADD", "source": 2 }, { - "begin": 7445, - "end": 7477, + "begin": 7453, + "end": 7485, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 7504, - "end": 7522, + "begin": 7512, + "end": 7530, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 7496, "end": 7502, "name": "DUP2", "source": 1 }, - { "begin": 7493, "end": 7523, "name": "GT", "source": 1 }, - { "begin": 7490, "end": 7607, "name": "ISZERO", "source": 1 }, + { "begin": 7504, "end": 7510, "name": "DUP2", "source": 2 }, + { "begin": 7501, "end": 7531, "name": "GT", "source": 2 }, + { "begin": 7498, "end": 7615, "name": "ISZERO", "source": 2 }, { - "begin": 7490, - "end": 7607, + "begin": 7498, + "end": 7615, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "242" }, - { "begin": 7490, "end": 7607, "name": "JUMPI", "source": 1 }, + { "begin": 7498, "end": 7615, "name": "JUMPI", "source": 2 }, { - "begin": 7526, - "end": 7605, + "begin": 7534, + "end": 7613, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "243" }, { - "begin": 7526, - "end": 7605, + "begin": 7534, + "end": 7613, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 7526, - "end": 7605, + "begin": 7534, + "end": 7613, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7526, - "end": 7605, + "begin": 7534, + "end": 7613, "name": "tag", - "source": 1, + "source": 2, "value": "243" }, - { "begin": 7526, "end": 7605, "name": "JUMPDEST", "source": 1 }, + { "begin": 7534, "end": 7613, "name": "JUMPDEST", "source": 2 }, { - "begin": 7490, - "end": 7607, + "begin": 7498, + "end": 7615, "name": "tag", - "source": 1, + "source": 2, "value": "242" }, - { "begin": 7490, "end": 7607, "name": "JUMPDEST", "source": 1 }, + { "begin": 7498, "end": 7615, "name": "JUMPDEST", "source": 2 }, { - "begin": 7631, - "end": 7712, + "begin": 7639, + "end": 7722, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "244" }, - { "begin": 7704, "end": 7711, "name": "DUP9", "source": 1 }, - { "begin": 7695, "end": 7701, "name": "DUP3", "source": 1 }, - { "begin": 7684, "end": 7693, "name": "DUP10", "source": 1 }, - { "begin": 7680, "end": 7702, "name": "ADD", "source": 1 }, + { "begin": 7714, "end": 7721, "name": "DUP9", "source": 2 }, + { "begin": 7705, "end": 7711, "name": "DUP3", "source": 2 }, + { "begin": 7694, "end": 7703, "name": "DUP10", "source": 2 }, + { "begin": 7690, "end": 7712, "name": "ADD", "source": 2 }, { - "begin": 7631, - "end": 7712, + "begin": 7639, + "end": 7722, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 7631, - "end": 7712, + "begin": 7639, + "end": 7722, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7631, - "end": 7712, + "begin": 7639, + "end": 7722, "name": "tag", - "source": 1, + "source": 2, "value": "244" }, - { "begin": 7631, "end": 7712, "name": "JUMPDEST", "source": 1 }, - { "begin": 7621, "end": 7712, "name": "SWAP3", "source": 1 }, - { "begin": 7621, "end": 7712, "name": "POP", "source": 1 }, - { "begin": 7416, "end": 7722, "name": "POP", "source": 1 }, + { "begin": 7639, "end": 7722, "name": "JUMPDEST", "source": 2 }, + { "begin": 7629, "end": 7722, "name": "SWAP3", "source": 2 }, + { "begin": 7629, "end": 7722, "name": "POP", "source": 2 }, + { "begin": 7424, "end": 7732, "name": "POP", "source": 2 }, { - "begin": 7761, - "end": 7764, + "begin": 7771, + "end": 7774, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, { - "begin": 7788, - "end": 7840, + "begin": 7798, + "end": 7850, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "245" }, - { "begin": 7832, "end": 7839, "name": "DUP9", "source": 1 }, - { "begin": 7823, "end": 7829, "name": "DUP3", "source": 1 }, - { "begin": 7812, "end": 7821, "name": "DUP10", "source": 1 }, - { "begin": 7808, "end": 7830, "name": "ADD", "source": 1 }, + { "begin": 7842, "end": 7849, "name": "DUP9", "source": 2 }, + { "begin": 7833, "end": 7839, "name": "DUP3", "source": 2 }, + { "begin": 7822, "end": 7831, "name": "DUP10", "source": 2 }, + { "begin": 7818, "end": 7840, "name": "ADD", "source": 2 }, { - "begin": 7788, - "end": 7840, + "begin": 7798, + "end": 7850, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "103" }, { - "begin": 7788, - "end": 7840, + "begin": 7798, + "end": 7850, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 7788, - "end": 7840, + "begin": 7798, + "end": 7850, "name": "tag", - "source": 1, + "source": 2, "value": "245" }, - { "begin": 7788, "end": 7840, "name": "JUMPDEST", "source": 1 }, - { "begin": 7778, "end": 7840, "name": "SWAP2", "source": 1 }, - { "begin": 7778, "end": 7840, "name": "POP", "source": 1 }, - { "begin": 7732, "end": 7850, "name": "POP", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "SWAP3", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "SWAP6", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "POP", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "SWAP3", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "SWAP6", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "SWAP1", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "SWAP4", "source": 1 }, - { "begin": 6516, "end": 7857, "name": "POP", "source": 1 }, - { - "begin": 6516, - "end": 7857, - "name": "JUMP", - "source": 1, + { "begin": 7798, "end": 7850, "name": "JUMPDEST", "source": 2 }, + { "begin": 7788, "end": 7850, "name": "SWAP2", "source": 2 }, + { "begin": 7788, "end": 7850, "name": "POP", "source": 2 }, + { "begin": 7742, "end": 7860, "name": "POP", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "SWAP3", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "SWAP6", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "POP", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "SWAP3", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "SWAP6", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "SWAP1", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "SWAP4", "source": 2 }, + { "begin": 6518, "end": 7867, "name": "POP", "source": 2 }, + { + "begin": 6518, + "end": 7867, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 7863, - "end": 8198, + "begin": 7873, + "end": 8209, "name": "tag", - "source": 1, + "source": 2, "value": "104" }, - { "begin": 7863, "end": 8198, "name": "JUMPDEST", "source": 1 }, + { "begin": 7873, "end": 8209, "name": "JUMPDEST", "source": 2 }, { - "begin": 7964, - "end": 7968, + "begin": 7975, + "end": 7979, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 8054, - "end": 8072, + "begin": 8065, + "end": 8083, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 8046, "end": 8052, "name": "DUP3", "source": 1 }, - { "begin": 8043, "end": 8073, "name": "GT", "source": 1 }, - { "begin": 8040, "end": 8096, "name": "ISZERO", "source": 1 }, + { "begin": 8057, "end": 8063, "name": "DUP3", "source": 2 }, + { "begin": 8054, "end": 8084, "name": "GT", "source": 2 }, + { "begin": 8051, "end": 8107, "name": "ISZERO", "source": 2 }, { - "begin": 8040, - "end": 8096, + "begin": 8051, + "end": 8107, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "247" }, - { "begin": 8040, "end": 8096, "name": "JUMPI", "source": 1 }, + { "begin": 8051, "end": 8107, "name": "JUMPI", "source": 2 }, { - "begin": 8076, - "end": 8094, + "begin": 8087, + "end": 8105, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "248" }, { - "begin": 8076, - "end": 8094, + "begin": 8087, + "end": 8105, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { - "begin": 8076, - "end": 8094, + "begin": 8087, + "end": 8105, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8076, - "end": 8094, + "begin": 8087, + "end": 8105, "name": "tag", - "source": 1, + "source": 2, "value": "248" }, - { "begin": 8076, "end": 8094, "name": "JUMPDEST", "source": 1 }, + { "begin": 8087, "end": 8105, "name": "JUMPDEST", "source": 2 }, { - "begin": 8040, - "end": 8096, + "begin": 8051, + "end": 8107, "name": "tag", - "source": 1, + "source": 2, "value": "247" }, - { "begin": 8040, "end": 8096, "name": "JUMPDEST", "source": 1 }, + { "begin": 8051, "end": 8107, "name": "JUMPDEST", "source": 2 }, { - "begin": 8126, - "end": 8130, + "begin": 8137, + "end": 8141, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8118, "end": 8124, "name": "DUP3", "source": 1 }, - { "begin": 8114, "end": 8131, "name": "MUL", "source": 1 }, - { "begin": 8106, "end": 8131, "name": "SWAP1", "source": 1 }, - { "begin": 8106, "end": 8131, "name": "POP", "source": 1 }, + { "begin": 8129, "end": 8135, "name": "DUP3", "source": 2 }, + { "begin": 8125, "end": 8142, "name": "MUL", "source": 2 }, + { "begin": 8117, "end": 8142, "name": "SWAP1", "source": 2 }, + { "begin": 8117, "end": 8142, "name": "POP", "source": 2 }, { - "begin": 8186, - "end": 8190, + "begin": 8197, + "end": 8201, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 8180, "end": 8184, "name": "DUP2", "source": 1 }, - { "begin": 8176, "end": 8191, "name": "ADD", "source": 1 }, - { "begin": 8168, "end": 8191, "name": "SWAP1", "source": 1 }, - { "begin": 8168, "end": 8191, "name": "POP", "source": 1 }, - { "begin": 7863, "end": 8198, "name": "SWAP2", "source": 1 }, - { "begin": 7863, "end": 8198, "name": "SWAP1", "source": 1 }, - { "begin": 7863, "end": 8198, "name": "POP", "source": 1 }, + { "begin": 8191, "end": 8195, "name": "DUP2", "source": 2 }, + { "begin": 8187, "end": 8202, "name": "ADD", "source": 2 }, + { "begin": 8179, "end": 8202, "name": "SWAP1", "source": 2 }, + { "begin": 8179, "end": 8202, "name": "POP", "source": 2 }, + { "begin": 7873, "end": 8209, "name": "SWAP2", "source": 2 }, + { "begin": 7873, "end": 8209, "name": "SWAP1", "source": 2 }, + { "begin": 7873, "end": 8209, "name": "POP", "source": 2 }, { - "begin": 7863, - "end": 8198, + "begin": 7873, + "end": 8209, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8204, - "end": 8330, + "begin": 8215, + "end": 8341, "name": "tag", - "source": 1, + "source": 2, "value": "105" }, - { "begin": 8204, "end": 8330, "name": "JUMPDEST", "source": 1 }, + { "begin": 8215, "end": 8341, "name": "JUMPDEST", "source": 2 }, { - "begin": 8241, - "end": 8248, + "begin": 8252, + "end": 8259, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 8281, - "end": 8323, + "begin": 8292, + "end": 8334, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }, - { "begin": 8274, "end": 8279, "name": "DUP3", "source": 1 }, - { "begin": 8270, "end": 8324, "name": "AND", "source": 1 }, - { "begin": 8259, "end": 8324, "name": "SWAP1", "source": 1 }, - { "begin": 8259, "end": 8324, "name": "POP", "source": 1 }, - { "begin": 8204, "end": 8330, "name": "SWAP2", "source": 1 }, - { "begin": 8204, "end": 8330, "name": "SWAP1", "source": 1 }, - { "begin": 8204, "end": 8330, "name": "POP", "source": 1 }, + { "begin": 8285, "end": 8290, "name": "DUP3", "source": 2 }, + { "begin": 8281, "end": 8335, "name": "AND", "source": 2 }, + { "begin": 8270, "end": 8335, "name": "SWAP1", "source": 2 }, + { "begin": 8270, "end": 8335, "name": "POP", "source": 2 }, + { "begin": 8215, "end": 8341, "name": "SWAP2", "source": 2 }, + { "begin": 8215, "end": 8341, "name": "SWAP1", "source": 2 }, + { "begin": 8215, "end": 8341, "name": "POP", "source": 2 }, { - "begin": 8204, - "end": 8330, + "begin": 8215, + "end": 8341, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8336, - "end": 8432, + "begin": 8347, + "end": 8443, "name": "tag", - "source": 1, + "source": 2, "value": "106" }, - { "begin": 8336, "end": 8432, "name": "JUMPDEST", "source": 1 }, + { "begin": 8347, "end": 8443, "name": "JUMPDEST", "source": 2 }, { - "begin": 8373, - "end": 8380, + "begin": 8384, + "end": 8391, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 8402, - "end": 8426, + "begin": 8413, + "end": 8437, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "251" }, - { "begin": 8420, "end": 8425, "name": "DUP3", "source": 1 }, + { "begin": 8431, "end": 8436, "name": "DUP3", "source": 2 }, { - "begin": 8402, - "end": 8426, + "begin": 8413, + "end": 8437, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "105" }, { - "begin": 8402, - "end": 8426, + "begin": 8413, + "end": 8437, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8402, - "end": 8426, + "begin": 8413, + "end": 8437, "name": "tag", - "source": 1, + "source": 2, "value": "251" }, - { "begin": 8402, "end": 8426, "name": "JUMPDEST", "source": 1 }, - { "begin": 8391, "end": 8426, "name": "SWAP1", "source": 1 }, - { "begin": 8391, "end": 8426, "name": "POP", "source": 1 }, - { "begin": 8336, "end": 8432, "name": "SWAP2", "source": 1 }, - { "begin": 8336, "end": 8432, "name": "SWAP1", "source": 1 }, - { "begin": 8336, "end": 8432, "name": "POP", "source": 1 }, + { "begin": 8413, "end": 8437, "name": "JUMPDEST", "source": 2 }, + { "begin": 8402, "end": 8437, "name": "SWAP1", "source": 2 }, + { "begin": 8402, "end": 8437, "name": "POP", "source": 2 }, + { "begin": 8347, "end": 8443, "name": "SWAP2", "source": 2 }, + { "begin": 8347, "end": 8443, "name": "SWAP1", "source": 2 }, + { "begin": 8347, "end": 8443, "name": "POP", "source": 2 }, { - "begin": 8336, - "end": 8432, + "begin": 8347, + "end": 8443, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8438, - "end": 8560, + "begin": 8449, + "end": 8571, "name": "tag", - "source": 1, + "source": 2, "value": "107" }, - { "begin": 8438, "end": 8560, "name": "JUMPDEST", "source": 1 }, + { "begin": 8449, "end": 8571, "name": "JUMPDEST", "source": 2 }, { - "begin": 8511, - "end": 8535, + "begin": 8522, + "end": 8546, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "253" }, - { "begin": 8529, "end": 8534, "name": "DUP2", "source": 1 }, + { "begin": 8540, "end": 8545, "name": "DUP2", "source": 2 }, { - "begin": 8511, - "end": 8535, + "begin": 8522, + "end": 8546, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "106" }, { - "begin": 8511, - "end": 8535, + "begin": 8522, + "end": 8546, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8511, - "end": 8535, + "begin": 8522, + "end": 8546, "name": "tag", - "source": 1, + "source": 2, "value": "253" }, - { "begin": 8511, "end": 8535, "name": "JUMPDEST", "source": 1 }, - { "begin": 8504, "end": 8509, "name": "DUP2", "source": 1 }, - { "begin": 8501, "end": 8536, "name": "EQ", "source": 1 }, + { "begin": 8522, "end": 8546, "name": "JUMPDEST", "source": 2 }, + { "begin": 8515, "end": 8520, "name": "DUP2", "source": 2 }, + { "begin": 8512, "end": 8547, "name": "EQ", "source": 2 }, { - "begin": 8491, - "end": 8554, + "begin": 8502, + "end": 8565, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "254" }, - { "begin": 8491, "end": 8554, "name": "JUMPI", "source": 1 }, + { "begin": 8502, "end": 8565, "name": "JUMPI", "source": 2 }, { - "begin": 8550, - "end": 8551, + "begin": 8561, + "end": 8562, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 8547, "end": 8548, "name": "DUP1", "source": 1 }, - { "begin": 8540, "end": 8552, "name": "REVERT", "source": 1 }, + { "begin": 8558, "end": 8559, "name": "DUP1", "source": 2 }, + { "begin": 8551, "end": 8563, "name": "REVERT", "source": 2 }, { - "begin": 8491, - "end": 8554, + "begin": 8502, + "end": 8565, "name": "tag", - "source": 1, + "source": 2, "value": "254" }, - { "begin": 8491, "end": 8554, "name": "JUMPDEST", "source": 1 }, - { "begin": 8438, "end": 8560, "name": "POP", "source": 1 }, + { "begin": 8502, "end": 8565, "name": "JUMPDEST", "source": 2 }, + { "begin": 8449, "end": 8571, "name": "POP", "source": 2 }, { - "begin": 8438, - "end": 8560, + "begin": 8449, + "end": 8571, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8566, - "end": 8705, + "begin": 8577, + "end": 8716, "name": "tag", - "source": 1, + "source": 2, "value": "108" }, - { "begin": 8566, "end": 8705, "name": "JUMPDEST", "source": 1 }, + { "begin": 8577, "end": 8716, "name": "JUMPDEST", "source": 2 }, { - "begin": 8612, - "end": 8617, + "begin": 8623, + "end": 8628, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 8650, "end": 8656, "name": "DUP2", "source": 1 }, + { "begin": 8661, "end": 8667, "name": "DUP2", "source": 2 }, { - "begin": 8637, - "end": 8657, + "begin": 8648, + "end": 8668, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 8628, "end": 8657, "name": "SWAP1", "source": 1 }, - { "begin": 8628, "end": 8657, "name": "POP", "source": 1 }, + { "begin": 8639, "end": 8668, "name": "SWAP1", "source": 2 }, + { "begin": 8639, "end": 8668, "name": "POP", "source": 2 }, { - "begin": 8666, - "end": 8699, + "begin": 8677, + "end": 8710, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "256" }, - { "begin": 8693, "end": 8698, "name": "DUP2", "source": 1 }, + { "begin": 8704, "end": 8709, "name": "DUP2", "source": 2 }, { - "begin": 8666, - "end": 8699, + "begin": 8677, + "end": 8710, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "107" }, { - "begin": 8666, - "end": 8699, + "begin": 8677, + "end": 8710, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8666, - "end": 8699, + "begin": 8677, + "end": 8710, "name": "tag", - "source": 1, + "source": 2, "value": "256" }, - { "begin": 8666, "end": 8699, "name": "JUMPDEST", "source": 1 }, - { "begin": 8566, "end": 8705, "name": "SWAP3", "source": 1 }, - { "begin": 8566, "end": 8705, "name": "SWAP2", "source": 1 }, - { "begin": 8566, "end": 8705, "name": "POP", "source": 1 }, - { "begin": 8566, "end": 8705, "name": "POP", "source": 1 }, + { "begin": 8677, "end": 8710, "name": "JUMPDEST", "source": 2 }, + { "begin": 8577, "end": 8716, "name": "SWAP3", "source": 2 }, + { "begin": 8577, "end": 8716, "name": "SWAP2", "source": 2 }, + { "begin": 8577, "end": 8716, "name": "POP", "source": 2 }, + { "begin": 8577, "end": 8716, "name": "POP", "source": 2 }, { - "begin": 8566, - "end": 8705, + "begin": 8577, + "end": 8716, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 8742, - "end": 9329, + "begin": 8753, + "end": 9341, "name": "tag", - "source": 1, + "source": 2, "value": "109" }, - { "begin": 8742, "end": 9329, "name": "JUMPDEST", "source": 1 }, + { "begin": 8753, "end": 9341, "name": "JUMPDEST", "source": 2 }, { - "begin": 8815, - "end": 8820, + "begin": 8827, + "end": 8832, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 8859, - "end": 8863, + "begin": 8871, + "end": 8875, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 8847, "end": 8856, "name": "DUP3", "source": 1 }, - { "begin": 8842, "end": 8845, "name": "DUP5", "source": 1 }, - { "begin": 8838, "end": 8857, "name": "SUB", "source": 1 }, - { "begin": 8834, "end": 8864, "name": "SLT", "source": 1 }, - { "begin": 8831, "end": 8948, "name": "ISZERO", "source": 1 }, + { "begin": 8859, "end": 8868, "name": "DUP3", "source": 2 }, + { "begin": 8854, "end": 8857, "name": "DUP5", "source": 2 }, + { "begin": 8850, "end": 8869, "name": "SUB", "source": 2 }, + { "begin": 8846, "end": 8876, "name": "SLT", "source": 2 }, + { "begin": 8843, "end": 8960, "name": "ISZERO", "source": 2 }, { - "begin": 8831, - "end": 8948, + "begin": 8843, + "end": 8960, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "258" }, - { "begin": 8831, "end": 8948, "name": "JUMPI", "source": 1 }, + { "begin": 8843, "end": 8960, "name": "JUMPI", "source": 2 }, { - "begin": 8867, - "end": 8946, + "begin": 8879, + "end": 8958, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "259" }, { - "begin": 8867, - "end": 8946, + "begin": 8879, + "end": 8958, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "78" }, { - "begin": 8867, - "end": 8946, + "begin": 8879, + "end": 8958, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8867, - "end": 8946, + "begin": 8879, + "end": 8958, "name": "tag", - "source": 1, + "source": 2, "value": "259" }, - { "begin": 8867, "end": 8946, "name": "JUMPDEST", "source": 1 }, + { "begin": 8879, "end": 8958, "name": "JUMPDEST", "source": 2 }, { - "begin": 8831, - "end": 8948, + "begin": 8843, + "end": 8960, "name": "tag", - "source": 1, + "source": 2, "value": "258" }, - { "begin": 8831, "end": 8948, "name": "JUMPDEST", "source": 1 }, + { "begin": 8843, "end": 8960, "name": "JUMPDEST", "source": 2 }, { - "begin": 8966, - "end": 8987, + "begin": 8978, + "end": 8999, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "260" }, { - "begin": 8982, - "end": 8986, + "begin": 8994, + "end": 8998, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { - "begin": 8966, - "end": 8987, + "begin": 8978, + "end": 8999, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { - "begin": 8966, - "end": 8987, + "begin": 8978, + "end": 8999, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 8966, - "end": 8987, + "begin": 8978, + "end": 8999, "name": "tag", - "source": 1, + "source": 2, "value": "260" }, - { "begin": 8966, "end": 8987, "name": "JUMPDEST", "source": 1 }, - { "begin": 8957, "end": 8987, "name": "SWAP1", "source": 1 }, - { "begin": 8957, "end": 8987, "name": "POP", "source": 1 }, + { "begin": 8978, "end": 8999, "name": "JUMPDEST", "source": 2 }, + { "begin": 8969, "end": 8999, "name": "SWAP1", "source": 2 }, + { "begin": 8969, "end": 8999, "name": "POP", "source": 2 }, { - "begin": 9058, - "end": 9059, + "begin": 9070, + "end": 9071, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 9098, - "end": 9147, + "begin": 9110, + "end": 9159, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "261" }, - { "begin": 9143, "end": 9146, "name": "DUP5", "source": 1 }, - { "begin": 9134, "end": 9140, "name": "DUP3", "source": 1 }, - { "begin": 9123, "end": 9132, "name": "DUP6", "source": 1 }, - { "begin": 9119, "end": 9141, "name": "ADD", "source": 1 }, + { "begin": 9155, "end": 9158, "name": "DUP5", "source": 2 }, + { "begin": 9146, "end": 9152, "name": "DUP3", "source": 2 }, + { "begin": 9135, "end": 9144, "name": "DUP6", "source": 2 }, + { "begin": 9131, "end": 9153, "name": "ADD", "source": 2 }, { - "begin": 9098, - "end": 9147, + "begin": 9110, + "end": 9159, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "108" }, { - "begin": 9098, - "end": 9147, + "begin": 9110, + "end": 9159, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9098, - "end": 9147, + "begin": 9110, + "end": 9159, "name": "tag", - "source": 1, + "source": 2, "value": "261" }, - { "begin": 9098, "end": 9147, "name": "JUMPDEST", "source": 1 }, + { "begin": 9110, "end": 9159, "name": "JUMPDEST", "source": 2 }, { - "begin": 9091, - "end": 9095, + "begin": 9103, + "end": 9107, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 9084, "end": 9089, "name": "DUP4", "source": 1 }, - { "begin": 9080, "end": 9096, "name": "ADD", "source": 1 }, - { "begin": 9073, "end": 9148, "name": "MSTORE", "source": 1 }, - { "begin": 8997, "end": 9159, "name": "POP", "source": 1 }, + { "begin": 9096, "end": 9101, "name": "DUP4", "source": 2 }, + { "begin": 9092, "end": 9108, "name": "ADD", "source": 2 }, + { "begin": 9085, "end": 9160, "name": "MSTORE", "source": 2 }, + { "begin": 9009, "end": 9171, "name": "POP", "source": 2 }, { - "begin": 9220, - "end": 9222, + "begin": 9232, + "end": 9234, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 9261, - "end": 9310, + "begin": 9273, + "end": 9322, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "262" }, - { "begin": 9306, "end": 9309, "name": "DUP5", "source": 1 }, - { "begin": 9297, "end": 9303, "name": "DUP3", "source": 1 }, - { "begin": 9286, "end": 9295, "name": "DUP6", "source": 1 }, - { "begin": 9282, "end": 9304, "name": "ADD", "source": 1 }, + { "begin": 9318, "end": 9321, "name": "DUP5", "source": 2 }, + { "begin": 9309, "end": 9315, "name": "DUP3", "source": 2 }, + { "begin": 9298, "end": 9307, "name": "DUP6", "source": 2 }, + { "begin": 9294, "end": 9316, "name": "ADD", "source": 2 }, { - "begin": 9261, - "end": 9310, + "begin": 9273, + "end": 9322, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 9261, - "end": 9310, + "begin": 9273, + "end": 9322, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9261, - "end": 9310, + "begin": 9273, + "end": 9322, "name": "tag", - "source": 1, + "source": 2, "value": "262" }, - { "begin": 9261, "end": 9310, "name": "JUMPDEST", "source": 1 }, + { "begin": 9273, "end": 9322, "name": "JUMPDEST", "source": 2 }, { - "begin": 9254, - "end": 9258, + "begin": 9266, + "end": 9270, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9247, "end": 9252, "name": "DUP4", "source": 1 }, - { "begin": 9243, "end": 9259, "name": "ADD", "source": 1 }, - { "begin": 9236, "end": 9311, "name": "MSTORE", "source": 1 }, - { "begin": 9169, "end": 9322, "name": "POP", "source": 1 }, - { "begin": 8742, "end": 9329, "name": "SWAP3", "source": 1 }, - { "begin": 8742, "end": 9329, "name": "SWAP2", "source": 1 }, - { "begin": 8742, "end": 9329, "name": "POP", "source": 1 }, - { "begin": 8742, "end": 9329, "name": "POP", "source": 1 }, + { "begin": 9259, "end": 9264, "name": "DUP4", "source": 2 }, + { "begin": 9255, "end": 9271, "name": "ADD", "source": 2 }, + { "begin": 9248, "end": 9323, "name": "MSTORE", "source": 2 }, + { "begin": 9181, "end": 9334, "name": "POP", "source": 2 }, + { "begin": 8753, "end": 9341, "name": "SWAP3", "source": 2 }, + { "begin": 8753, "end": 9341, "name": "SWAP2", "source": 2 }, + { "begin": 8753, "end": 9341, "name": "POP", "source": 2 }, + { "begin": 8753, "end": 9341, "name": "POP", "source": 2 }, { - "begin": 8742, - "end": 9329, + "begin": 8753, + "end": 9341, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 9368, - "end": 10150, + "begin": 9380, + "end": 10165, "name": "tag", - "source": 1, + "source": 2, "value": "110" }, - { "begin": 9368, "end": 10150, "name": "JUMPDEST", "source": 1 }, + { "begin": 9380, "end": 10165, "name": "JUMPDEST", "source": 2 }, { - "begin": 9488, - "end": 9493, + "begin": 9501, + "end": 9506, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 9513, - "end": 9618, + "begin": 9526, + "end": 9632, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "264" }, { - "begin": 9529, - "end": 9617, + "begin": 9542, + "end": 9631, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "265" }, - { "begin": 9610, "end": 9616, "name": "DUP5", "source": 1 }, + { "begin": 9624, "end": 9630, "name": "DUP5", "source": 2 }, { - "begin": 9529, - "end": 9617, + "begin": 9542, + "end": 9631, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "104" }, { - "begin": 9529, - "end": 9617, + "begin": 9542, + "end": 9631, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9529, - "end": 9617, + "begin": 9542, + "end": 9631, "name": "tag", - "source": 1, + "source": 2, "value": "265" }, - { "begin": 9529, "end": 9617, "name": "JUMPDEST", "source": 1 }, + { "begin": 9542, "end": 9631, "name": "JUMPDEST", "source": 2 }, { - "begin": 9513, - "end": 9618, + "begin": 9526, + "end": 9632, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { - "begin": 9513, - "end": 9618, + "begin": 9526, + "end": 9632, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9513, - "end": 9618, + "begin": 9526, + "end": 9632, "name": "tag", - "source": 1, + "source": 2, "value": "264" }, - { "begin": 9513, "end": 9618, "name": "JUMPDEST", "source": 1 }, - { "begin": 9504, "end": 9618, "name": "SWAP1", "source": 1 }, - { "begin": 9504, "end": 9618, "name": "POP", "source": 1 }, - { "begin": 9638, "end": 9643, "name": "DUP1", "source": 1 }, - { "begin": 9667, "end": 9673, "name": "DUP4", "source": 1 }, - { "begin": 9660, "end": 9665, "name": "DUP3", "source": 1 }, - { "begin": 9653, "end": 9674, "name": "MSTORE", "source": 1 }, + { "begin": 9526, "end": 9632, "name": "JUMPDEST", "source": 2 }, + { "begin": 9517, "end": 9632, "name": "SWAP1", "source": 2 }, + { "begin": 9517, "end": 9632, "name": "POP", "source": 2 }, + { "begin": 9652, "end": 9657, "name": "DUP1", "source": 2 }, + { "begin": 9681, "end": 9687, "name": "DUP4", "source": 2 }, + { "begin": 9674, "end": 9679, "name": "DUP3", "source": 2 }, + { "begin": 9667, "end": 9688, "name": "MSTORE", "source": 2 }, { - "begin": 9701, - "end": 9705, + "begin": 9715, + "end": 9719, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 9694, "end": 9699, "name": "DUP3", "source": 1 }, - { "begin": 9690, "end": 9706, "name": "ADD", "source": 1 }, - { "begin": 9683, "end": 9706, "name": "SWAP1", "source": 1 }, - { "begin": 9683, "end": 9706, "name": "POP", "source": 1 }, + { "begin": 9708, "end": 9713, "name": "DUP3", "source": 2 }, + { "begin": 9704, "end": 9720, "name": "ADD", "source": 2 }, + { "begin": 9697, "end": 9720, "name": "SWAP1", "source": 2 }, + { "begin": 9697, "end": 9720, "name": "POP", "source": 2 }, { - "begin": 9754, - "end": 9758, + "begin": 9768, + "end": 9772, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 9746, "end": 9752, "name": "DUP5", "source": 1 }, - { "begin": 9742, "end": 9759, "name": "MUL", "source": 1 }, - { "begin": 9734, "end": 9740, "name": "DUP4", "source": 1 }, - { "begin": 9730, "end": 9760, "name": "ADD", "source": 1 }, - { "begin": 9783, "end": 9786, "name": "DUP6", "source": 1 }, - { "begin": 9775, "end": 9781, "name": "DUP2", "source": 1 }, - { "begin": 9772, "end": 9787, "name": "GT", "source": 1 }, - { "begin": 9769, "end": 9891, "name": "ISZERO", "source": 1 }, + { "begin": 9760, "end": 9766, "name": "DUP5", "source": 2 }, + { "begin": 9756, "end": 9773, "name": "MUL", "source": 2 }, + { "begin": 9748, "end": 9754, "name": "DUP4", "source": 2 }, + { "begin": 9744, "end": 9774, "name": "ADD", "source": 2 }, + { "begin": 9797, "end": 9800, "name": "DUP6", "source": 2 }, + { "begin": 9789, "end": 9795, "name": "DUP2", "source": 2 }, + { "begin": 9786, "end": 9801, "name": "GT", "source": 2 }, + { "begin": 9783, "end": 9905, "name": "ISZERO", "source": 2 }, { - "begin": 9769, - "end": 9891, + "begin": 9783, + "end": 9905, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "266" }, - { "begin": 9769, "end": 9891, "name": "JUMPI", "source": 1 }, + { "begin": 9783, "end": 9905, "name": "JUMPI", "source": 2 }, { - "begin": 9802, - "end": 9881, + "begin": 9816, + "end": 9895, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "267" }, { - "begin": 9802, - "end": 9881, + "begin": 9816, + "end": 9895, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "89" }, { - "begin": 9802, - "end": 9881, + "begin": 9816, + "end": 9895, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 9802, - "end": 9881, + "begin": 9816, + "end": 9895, "name": "tag", - "source": 1, + "source": 2, "value": "267" }, - { "begin": 9802, "end": 9881, "name": "JUMPDEST", "source": 1 }, + { "begin": 9816, "end": 9895, "name": "JUMPDEST", "source": 2 }, { - "begin": 9769, - "end": 9891, + "begin": 9783, + "end": 9905, "name": "tag", - "source": 1, + "source": 2, "value": "266" }, - { "begin": 9769, "end": 9891, "name": "JUMPDEST", "source": 1 }, - { "begin": 9917, "end": 9923, "name": "DUP4", "source": 1 }, + { "begin": 9783, "end": 9905, "name": "JUMPDEST", "source": 2 }, + { "begin": 9931, "end": 9937, "name": "DUP4", "source": 2 }, { - "begin": 9900, - "end": 10144, + "begin": 9914, + "end": 10159, "name": "tag", - "source": 1, + "source": 2, "value": "268" }, - { "begin": 9900, "end": 10144, "name": "JUMPDEST", "source": 1 }, - { "begin": 9934, "end": 9940, "name": "DUP2", "source": 1 }, - { "begin": 9929, "end": 9932, "name": "DUP2", "source": 1 }, - { "begin": 9926, "end": 9941, "name": "LT", "source": 1 }, - { "begin": 9900, "end": 10144, "name": "ISZERO", "source": 1 }, + { "begin": 9914, "end": 10159, "name": "JUMPDEST", "source": 2 }, + { "begin": 9948, "end": 9954, "name": "DUP2", "source": 2 }, + { "begin": 9943, "end": 9946, "name": "DUP2", "source": 2 }, + { "begin": 9940, "end": 9955, "name": "LT", "source": 2 }, + { "begin": 9914, "end": 10159, "name": "ISZERO", "source": 2 }, { - "begin": 9900, - "end": 10144, + "begin": 9914, + "end": 10159, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "270" }, - { "begin": 9900, "end": 10144, "name": "JUMPI", "source": 1 }, - { "begin": 10009, "end": 10012, "name": "DUP1", "source": 1 }, + { "begin": 9914, "end": 10159, "name": "JUMPI", "source": 2 }, + { "begin": 10023, "end": 10026, "name": "DUP1", "source": 2 }, { - "begin": 10038, - "end": 10099, + "begin": 10052, + "end": 10114, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "271" }, - { "begin": 10095, "end": 10098, "name": "DUP9", "source": 1 }, - { "begin": 10083, "end": 10093, "name": "DUP3", "source": 1 }, + { "begin": 10110, "end": 10113, "name": "DUP9", "source": 2 }, + { "begin": 10098, "end": 10108, "name": "DUP3", "source": 2 }, { - "begin": 10038, - "end": 10099, + "begin": 10052, + "end": 10114, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "109" }, { - "begin": 10038, - "end": 10099, + "begin": 10052, + "end": 10114, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10038, - "end": 10099, + "begin": 10052, + "end": 10114, "name": "tag", - "source": 1, + "source": 2, "value": "271" }, - { "begin": 10038, "end": 10099, "name": "JUMPDEST", "source": 1 }, - { "begin": 10033, "end": 10036, "name": "DUP5", "source": 1 }, - { "begin": 10026, "end": 10100, "name": "MSTORE", "source": 1 }, + { "begin": 10052, "end": 10114, "name": "JUMPDEST", "source": 2 }, + { "begin": 10047, "end": 10050, "name": "DUP5", "source": 2 }, + { "begin": 10040, "end": 10115, "name": "MSTORE", "source": 2 }, { - "begin": 10129, - "end": 10133, + "begin": 10144, + "end": 10148, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 10124, "end": 10127, "name": "DUP5", "source": 1 }, - { "begin": 10120, "end": 10134, "name": "ADD", "source": 1 }, - { "begin": 10113, "end": 10134, "name": "SWAP4", "source": 1 }, - { "begin": 10113, "end": 10134, "name": "POP", "source": 1 }, - { "begin": 9976, "end": 10144, "name": "POP", "source": 1 }, + { "begin": 10139, "end": 10142, "name": "DUP5", "source": 2 }, + { "begin": 10135, "end": 10149, "name": "ADD", "source": 2 }, + { "begin": 10128, "end": 10149, "name": "SWAP4", "source": 2 }, + { "begin": 10128, "end": 10149, "name": "POP", "source": 2 }, + { "begin": 9990, "end": 10159, "name": "POP", "source": 2 }, { - "begin": 9960, - "end": 9964, + "begin": 9974, + "end": 9978, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 9955, "end": 9958, "name": "DUP2", "source": 1 }, - { "begin": 9951, "end": 9965, "name": "ADD", "source": 1 }, - { "begin": 9944, "end": 9965, "name": "SWAP1", "source": 1 }, - { "begin": 9944, "end": 9965, "name": "POP", "source": 1 }, + { "begin": 9969, "end": 9972, "name": "DUP2", "source": 2 }, + { "begin": 9965, "end": 9979, "name": "ADD", "source": 2 }, + { "begin": 9958, "end": 9979, "name": "SWAP1", "source": 2 }, + { "begin": 9958, "end": 9979, "name": "POP", "source": 2 }, { - "begin": 9900, - "end": 10144, + "begin": 9914, + "end": 10159, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "268" }, - { "begin": 9900, "end": 10144, "name": "JUMP", "source": 1 }, + { "begin": 9914, "end": 10159, "name": "JUMP", "source": 2 }, { - "begin": 9900, - "end": 10144, + "begin": 9914, + "end": 10159, "name": "tag", - "source": 1, + "source": 2, "value": "270" }, - { "begin": 9900, "end": 10144, "name": "JUMPDEST", "source": 1 }, - { "begin": 9904, "end": 9925, "name": "POP", "source": 1 }, - { "begin": 9494, "end": 10150, "name": "POP", "source": 1 }, - { "begin": 9494, "end": 10150, "name": "POP", "source": 1 }, - { "begin": 9368, "end": 10150, "name": "SWAP4", "source": 1 }, - { "begin": 9368, "end": 10150, "name": "SWAP3", "source": 1 }, - { "begin": 9368, "end": 10150, "name": "POP", "source": 1 }, - { "begin": 9368, "end": 10150, "name": "POP", "source": 1 }, - { "begin": 9368, "end": 10150, "name": "POP", "source": 1 }, + { "begin": 9914, "end": 10159, "name": "JUMPDEST", "source": 2 }, + { "begin": 9918, "end": 9939, "name": "POP", "source": 2 }, + { "begin": 9507, "end": 10165, "name": "POP", "source": 2 }, + { "begin": 9507, "end": 10165, "name": "POP", "source": 2 }, + { "begin": 9380, "end": 10165, "name": "SWAP4", "source": 2 }, + { "begin": 9380, "end": 10165, "name": "SWAP3", "source": 2 }, + { "begin": 9380, "end": 10165, "name": "POP", "source": 2 }, + { "begin": 9380, "end": 10165, "name": "POP", "source": 2 }, + { "begin": 9380, "end": 10165, "name": "POP", "source": 2 }, { - "begin": 9368, - "end": 10150, + "begin": 9380, + "end": 10165, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10189, - "end": 10607, + "begin": 10204, + "end": 10624, "name": "tag", - "source": 1, + "source": 2, "value": "111" }, - { "begin": 10189, "end": 10607, "name": "JUMPDEST", "source": 1 }, + { "begin": 10204, "end": 10624, "name": "JUMPDEST", "source": 2 }, { - "begin": 10284, - "end": 10289, + "begin": 10300, + "end": 10305, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 10333, "end": 10336, "name": "DUP3", "source": 1 }, + { "begin": 10349, "end": 10352, "name": "DUP3", "source": 2 }, { - "begin": 10326, - "end": 10330, + "begin": 10342, + "end": 10346, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 10318, "end": 10324, "name": "DUP4", "source": 1 }, - { "begin": 10314, "end": 10331, "name": "ADD", "source": 1 }, - { "begin": 10310, "end": 10337, "name": "SLT", "source": 1 }, + { "begin": 10334, "end": 10340, "name": "DUP4", "source": 2 }, + { "begin": 10330, "end": 10347, "name": "ADD", "source": 2 }, + { "begin": 10326, "end": 10353, "name": "SLT", "source": 2 }, { - "begin": 10300, - "end": 10422, + "begin": 10316, + "end": 10438, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "273" }, - { "begin": 10300, "end": 10422, "name": "JUMPI", "source": 1 }, + { "begin": 10316, "end": 10438, "name": "JUMPI", "source": 2 }, { - "begin": 10341, - "end": 10420, + "begin": 10357, + "end": 10436, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "274" }, { - "begin": 10341, - "end": 10420, + "begin": 10357, + "end": 10436, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "87" }, { - "begin": 10341, - "end": 10420, + "begin": 10357, + "end": 10436, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10341, - "end": 10420, + "begin": 10357, + "end": 10436, "name": "tag", - "source": 1, + "source": 2, "value": "274" }, - { "begin": 10341, "end": 10420, "name": "JUMPDEST", "source": 1 }, + { "begin": 10357, "end": 10436, "name": "JUMPDEST", "source": 2 }, { - "begin": 10300, - "end": 10422, + "begin": 10316, + "end": 10438, "name": "tag", - "source": 1, + "source": 2, "value": "273" }, - { "begin": 10300, "end": 10422, "name": "JUMPDEST", "source": 1 }, - { "begin": 10458, "end": 10464, "name": "DUP2", "source": 1 }, + { "begin": 10316, "end": 10438, "name": "JUMPDEST", "source": 2 }, + { "begin": 10474, "end": 10480, "name": "DUP2", "source": 2 }, { - "begin": 10445, - "end": 10465, + "begin": 10461, + "end": 10481, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 10483, - "end": 10601, + "begin": 10499, + "end": 10618, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "275" }, - { "begin": 10597, "end": 10600, "name": "DUP5", "source": 1 }, - { "begin": 10589, "end": 10595, "name": "DUP3", "source": 1 }, + { "begin": 10614, "end": 10617, "name": "DUP5", "source": 2 }, + { "begin": 10606, "end": 10612, "name": "DUP3", "source": 2 }, { - "begin": 10582, - "end": 10586, + "begin": 10599, + "end": 10603, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 10574, "end": 10580, "name": "DUP7", "source": 1 }, - { "begin": 10570, "end": 10587, "name": "ADD", "source": 1 }, + { "begin": 10591, "end": 10597, "name": "DUP7", "source": 2 }, + { "begin": 10587, "end": 10604, "name": "ADD", "source": 2 }, { - "begin": 10483, - "end": 10601, + "begin": 10499, + "end": 10618, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "110" }, { - "begin": 10483, - "end": 10601, + "begin": 10499, + "end": 10618, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10483, - "end": 10601, + "begin": 10499, + "end": 10618, "name": "tag", - "source": 1, + "source": 2, "value": "275" }, - { "begin": 10483, "end": 10601, "name": "JUMPDEST", "source": 1 }, - { "begin": 10474, "end": 10601, "name": "SWAP2", "source": 1 }, - { "begin": 10474, "end": 10601, "name": "POP", "source": 1 }, - { "begin": 10290, "end": 10607, "name": "POP", "source": 1 }, - { "begin": 10189, "end": 10607, "name": "SWAP3", "source": 1 }, - { "begin": 10189, "end": 10607, "name": "SWAP2", "source": 1 }, - { "begin": 10189, "end": 10607, "name": "POP", "source": 1 }, - { "begin": 10189, "end": 10607, "name": "POP", "source": 1 }, + { "begin": 10499, "end": 10618, "name": "JUMPDEST", "source": 2 }, + { "begin": 10490, "end": 10618, "name": "SWAP2", "source": 2 }, + { "begin": 10490, "end": 10618, "name": "POP", "source": 2 }, + { "begin": 10306, "end": 10624, "name": "POP", "source": 2 }, + { "begin": 10204, "end": 10624, "name": "SWAP3", "source": 2 }, + { "begin": 10204, "end": 10624, "name": "SWAP2", "source": 2 }, + { "begin": 10204, "end": 10624, "name": "POP", "source": 2 }, + { "begin": 10204, "end": 10624, "name": "POP", "source": 2 }, { - "begin": 10189, - "end": 10607, + "begin": 10204, + "end": 10624, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10613, - "end": 10706, + "begin": 10630, + "end": 10723, "name": "tag", - "source": 1, + "source": 2, "value": "112" }, - { "begin": 10613, "end": 10706, "name": "JUMPDEST", "source": 1 }, + { "begin": 10630, "end": 10723, "name": "JUMPDEST", "source": 2 }, { - "begin": 10649, - "end": 10656, + "begin": 10666, + "end": 10673, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 10689, - "end": 10699, + "begin": 10706, + "end": 10716, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFF" }, - { "begin": 10682, "end": 10687, "name": "DUP3", "source": 1 }, - { "begin": 10678, "end": 10700, "name": "AND", "source": 1 }, - { "begin": 10667, "end": 10700, "name": "SWAP1", "source": 1 }, - { "begin": 10667, "end": 10700, "name": "POP", "source": 1 }, - { "begin": 10613, "end": 10706, "name": "SWAP2", "source": 1 }, - { "begin": 10613, "end": 10706, "name": "SWAP1", "source": 1 }, - { "begin": 10613, "end": 10706, "name": "POP", "source": 1 }, + { "begin": 10699, "end": 10704, "name": "DUP3", "source": 2 }, + { "begin": 10695, "end": 10717, "name": "AND", "source": 2 }, + { "begin": 10684, "end": 10717, "name": "SWAP1", "source": 2 }, + { "begin": 10684, "end": 10717, "name": "POP", "source": 2 }, + { "begin": 10630, "end": 10723, "name": "SWAP2", "source": 2 }, + { "begin": 10630, "end": 10723, "name": "SWAP1", "source": 2 }, + { "begin": 10630, "end": 10723, "name": "POP", "source": 2 }, { - "begin": 10613, - "end": 10706, + "begin": 10630, + "end": 10723, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10712, - "end": 10832, + "begin": 10729, + "end": 10849, "name": "tag", - "source": 1, + "source": 2, "value": "113" }, - { "begin": 10712, "end": 10832, "name": "JUMPDEST", "source": 1 }, + { "begin": 10729, "end": 10849, "name": "JUMPDEST", "source": 2 }, { - "begin": 10784, - "end": 10807, + "begin": 10801, + "end": 10824, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "278" }, - { "begin": 10801, "end": 10806, "name": "DUP2", "source": 1 }, + { "begin": 10818, "end": 10823, "name": "DUP2", "source": 2 }, { - "begin": 10784, - "end": 10807, + "begin": 10801, + "end": 10824, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "112" }, { - "begin": 10784, - "end": 10807, + "begin": 10801, + "end": 10824, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10784, - "end": 10807, + "begin": 10801, + "end": 10824, "name": "tag", - "source": 1, + "source": 2, "value": "278" }, - { "begin": 10784, "end": 10807, "name": "JUMPDEST", "source": 1 }, - { "begin": 10777, "end": 10782, "name": "DUP2", "source": 1 }, - { "begin": 10774, "end": 10808, "name": "EQ", "source": 1 }, + { "begin": 10801, "end": 10824, "name": "JUMPDEST", "source": 2 }, + { "begin": 10794, "end": 10799, "name": "DUP2", "source": 2 }, + { "begin": 10791, "end": 10825, "name": "EQ", "source": 2 }, { - "begin": 10764, - "end": 10826, + "begin": 10781, + "end": 10843, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "279" }, - { "begin": 10764, "end": 10826, "name": "JUMPI", "source": 1 }, + { "begin": 10781, "end": 10843, "name": "JUMPI", "source": 2 }, { - "begin": 10822, - "end": 10823, + "begin": 10839, + "end": 10840, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 10819, "end": 10820, "name": "DUP1", "source": 1 }, - { "begin": 10812, "end": 10824, "name": "REVERT", "source": 1 }, + { "begin": 10836, "end": 10837, "name": "DUP1", "source": 2 }, + { "begin": 10829, "end": 10841, "name": "REVERT", "source": 2 }, { - "begin": 10764, - "end": 10826, + "begin": 10781, + "end": 10843, "name": "tag", - "source": 1, + "source": 2, "value": "279" }, - { "begin": 10764, "end": 10826, "name": "JUMPDEST", "source": 1 }, - { "begin": 10712, "end": 10832, "name": "POP", "source": 1 }, + { "begin": 10781, "end": 10843, "name": "JUMPDEST", "source": 2 }, + { "begin": 10729, "end": 10849, "name": "POP", "source": 2 }, { - "begin": 10712, - "end": 10832, + "begin": 10729, + "end": 10849, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10838, - "end": 10975, + "begin": 10855, + "end": 10992, "name": "tag", - "source": 1, + "source": 2, "value": "114" }, - { "begin": 10838, "end": 10975, "name": "JUMPDEST", "source": 1 }, + { "begin": 10855, "end": 10992, "name": "JUMPDEST", "source": 2 }, { - "begin": 10883, - "end": 10888, + "begin": 10900, + "end": 10905, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 10921, "end": 10927, "name": "DUP2", "source": 1 }, + { "begin": 10938, "end": 10944, "name": "DUP2", "source": 2 }, { - "begin": 10908, - "end": 10928, + "begin": 10925, + "end": 10945, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, - { "begin": 10899, "end": 10928, "name": "SWAP1", "source": 1 }, - { "begin": 10899, "end": 10928, "name": "POP", "source": 1 }, + { "begin": 10916, "end": 10945, "name": "SWAP1", "source": 2 }, + { "begin": 10916, "end": 10945, "name": "POP", "source": 2 }, { - "begin": 10937, - "end": 10969, + "begin": 10954, + "end": 10986, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "281" }, - { "begin": 10963, "end": 10968, "name": "DUP2", "source": 1 }, + { "begin": 10980, "end": 10985, "name": "DUP2", "source": 2 }, { - "begin": 10937, - "end": 10969, + "begin": 10954, + "end": 10986, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "113" }, { - "begin": 10937, - "end": 10969, + "begin": 10954, + "end": 10986, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 10937, - "end": 10969, + "begin": 10954, + "end": 10986, "name": "tag", - "source": 1, + "source": 2, "value": "281" }, - { "begin": 10937, "end": 10969, "name": "JUMPDEST", "source": 1 }, - { "begin": 10838, "end": 10975, "name": "SWAP3", "source": 1 }, - { "begin": 10838, "end": 10975, "name": "SWAP2", "source": 1 }, - { "begin": 10838, "end": 10975, "name": "POP", "source": 1 }, - { "begin": 10838, "end": 10975, "name": "POP", "source": 1 }, + { "begin": 10954, "end": 10986, "name": "JUMPDEST", "source": 2 }, + { "begin": 10855, "end": 10992, "name": "SWAP3", "source": 2 }, + { "begin": 10855, "end": 10992, "name": "SWAP2", "source": 2 }, + { "begin": 10855, "end": 10992, "name": "POP", "source": 2 }, + { "begin": 10855, "end": 10992, "name": "POP", "source": 2 }, { - "begin": 10838, - "end": 10975, + "begin": 10855, + "end": 10992, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 10981, - "end": 12216, + "begin": 10998, + "end": 12239, "name": "tag", - "source": 1, + "source": 2, "value": "17" }, - { "begin": 10981, "end": 12216, "name": "JUMPDEST", "source": 1 }, + { "begin": 10998, "end": 12239, "name": "JUMPDEST", "source": 2 }, { - "begin": 11142, - "end": 11148, + "begin": 11162, + "end": 11168, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 11150, "end": 11156, "name": "DUP1", "source": 1 }, + { "begin": 11170, "end": 11176, "name": "DUP1", "source": 2 }, { - "begin": 11158, - "end": 11164, + "begin": 11178, + "end": 11184, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 11166, "end": 11172, "name": "DUP1", "source": 1 }, + { "begin": 11186, "end": 11192, "name": "DUP1", "source": 2 }, { - "begin": 11215, - "end": 11218, + "begin": 11235, + "end": 11238, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 11203, "end": 11212, "name": "DUP6", "source": 1 }, - { "begin": 11194, "end": 11201, "name": "DUP8", "source": 1 }, - { "begin": 11190, "end": 11213, "name": "SUB", "source": 1 }, - { "begin": 11186, "end": 11219, "name": "SLT", "source": 1 }, - { "begin": 11183, "end": 11303, "name": "ISZERO", "source": 1 }, + { "begin": 11223, "end": 11232, "name": "DUP6", "source": 2 }, + { "begin": 11214, "end": 11221, "name": "DUP8", "source": 2 }, + { "begin": 11210, "end": 11233, "name": "SUB", "source": 2 }, + { "begin": 11206, "end": 11239, "name": "SLT", "source": 2 }, + { "begin": 11203, "end": 11323, "name": "ISZERO", "source": 2 }, { - "begin": 11183, - "end": 11303, + "begin": 11203, + "end": 11323, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "283" }, - { "begin": 11183, "end": 11303, "name": "JUMPI", "source": 1 }, + { "begin": 11203, "end": 11323, "name": "JUMPI", "source": 2 }, { - "begin": 11222, - "end": 11301, + "begin": 11242, + "end": 11321, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "284" }, { - "begin": 11222, - "end": 11301, + "begin": 11242, + "end": 11321, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 11222, - "end": 11301, + "begin": 11242, + "end": 11321, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11222, - "end": 11301, + "begin": 11242, + "end": 11321, "name": "tag", - "source": 1, + "source": 2, "value": "284" }, - { "begin": 11222, "end": 11301, "name": "JUMPDEST", "source": 1 }, + { "begin": 11242, "end": 11321, "name": "JUMPDEST", "source": 2 }, { - "begin": 11183, - "end": 11303, + "begin": 11203, + "end": 11323, "name": "tag", - "source": 1, + "source": 2, "value": "283" }, - { "begin": 11183, "end": 11303, "name": "JUMPDEST", "source": 1 }, + { "begin": 11203, "end": 11323, "name": "JUMPDEST", "source": 2 }, { - "begin": 11370, - "end": 11371, + "begin": 11390, + "end": 11391, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 11359, "end": 11368, "name": "DUP6", "source": 1 }, - { "begin": 11355, "end": 11372, "name": "ADD", "source": 1 }, + { "begin": 11379, "end": 11388, "name": "DUP6", "source": 2 }, + { "begin": 11375, "end": 11392, "name": "ADD", "source": 2 }, { - "begin": 11342, - "end": 11373, + "begin": 11362, + "end": 11393, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 11400, - "end": 11418, + "begin": 11420, + "end": 11438, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 11392, "end": 11398, "name": "DUP2", "source": 1 }, - { "begin": 11389, "end": 11419, "name": "GT", "source": 1 }, - { "begin": 11386, "end": 11503, "name": "ISZERO", "source": 1 }, + { "begin": 11412, "end": 11418, "name": "DUP2", "source": 2 }, + { "begin": 11409, "end": 11439, "name": "GT", "source": 2 }, + { "begin": 11406, "end": 11523, "name": "ISZERO", "source": 2 }, { - "begin": 11386, - "end": 11503, + "begin": 11406, + "end": 11523, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "285" }, - { "begin": 11386, "end": 11503, "name": "JUMPI", "source": 1 }, + { "begin": 11406, "end": 11523, "name": "JUMPI", "source": 2 }, { - "begin": 11422, - "end": 11501, + "begin": 11442, + "end": 11521, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "286" }, { - "begin": 11422, - "end": 11501, + "begin": 11442, + "end": 11521, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 11422, - "end": 11501, + "begin": 11442, + "end": 11521, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11422, - "end": 11501, + "begin": 11442, + "end": 11521, "name": "tag", - "source": 1, + "source": 2, "value": "286" }, - { "begin": 11422, "end": 11501, "name": "JUMPDEST", "source": 1 }, + { "begin": 11442, "end": 11521, "name": "JUMPDEST", "source": 2 }, { - "begin": 11386, - "end": 11503, + "begin": 11406, + "end": 11523, "name": "tag", - "source": 1, + "source": 2, "value": "285" }, - { "begin": 11386, "end": 11503, "name": "JUMPDEST", "source": 1 }, + { "begin": 11406, "end": 11523, "name": "JUMPDEST", "source": 2 }, { - "begin": 11527, - "end": 11629, + "begin": 11547, + "end": 11650, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "287" }, - { "begin": 11621, "end": 11628, "name": "DUP8", "source": 1 }, - { "begin": 11612, "end": 11618, "name": "DUP3", "source": 1 }, - { "begin": 11601, "end": 11610, "name": "DUP9", "source": 1 }, - { "begin": 11597, "end": 11619, "name": "ADD", "source": 1 }, + { "begin": 11642, "end": 11649, "name": "DUP8", "source": 2 }, + { "begin": 11633, "end": 11639, "name": "DUP3", "source": 2 }, + { "begin": 11622, "end": 11631, "name": "DUP9", "source": 2 }, + { "begin": 11618, "end": 11640, "name": "ADD", "source": 2 }, { - "begin": 11527, - "end": 11629, + "begin": 11547, + "end": 11650, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "111" }, { - "begin": 11527, - "end": 11629, + "begin": 11547, + "end": 11650, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11527, - "end": 11629, + "begin": 11547, + "end": 11650, "name": "tag", - "source": 1, + "source": 2, "value": "287" }, - { "begin": 11527, "end": 11629, "name": "JUMPDEST", "source": 1 }, - { "begin": 11517, "end": 11629, "name": "SWAP5", "source": 1 }, - { "begin": 11517, "end": 11629, "name": "POP", "source": 1 }, - { "begin": 11313, "end": 11639, "name": "POP", "source": 1 }, + { "begin": 11547, "end": 11650, "name": "JUMPDEST", "source": 2 }, + { "begin": 11537, "end": 11650, "name": "SWAP5", "source": 2 }, + { "begin": 11537, "end": 11650, "name": "POP", "source": 2 }, + { "begin": 11333, "end": 11660, "name": "POP", "source": 2 }, { - "begin": 11678, - "end": 11680, + "begin": 11699, + "end": 11701, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 11704, - "end": 11756, + "begin": 11725, + "end": 11777, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "288" }, - { "begin": 11748, "end": 11755, "name": "DUP8", "source": 1 }, - { "begin": 11739, "end": 11745, "name": "DUP3", "source": 1 }, - { "begin": 11728, "end": 11737, "name": "DUP9", "source": 1 }, - { "begin": 11724, "end": 11746, "name": "ADD", "source": 1 }, + { "begin": 11769, "end": 11776, "name": "DUP8", "source": 2 }, + { "begin": 11760, "end": 11766, "name": "DUP3", "source": 2 }, + { "begin": 11749, "end": 11758, "name": "DUP9", "source": 2 }, + { "begin": 11745, "end": 11767, "name": "ADD", "source": 2 }, { - "begin": 11704, - "end": 11756, + "begin": 11725, + "end": 11777, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "114" }, { - "begin": 11704, - "end": 11756, + "begin": 11725, + "end": 11777, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11704, - "end": 11756, + "begin": 11725, + "end": 11777, "name": "tag", - "source": 1, + "source": 2, "value": "288" }, - { "begin": 11704, "end": 11756, "name": "JUMPDEST", "source": 1 }, - { "begin": 11694, "end": 11756, "name": "SWAP4", "source": 1 }, - { "begin": 11694, "end": 11756, "name": "POP", "source": 1 }, - { "begin": 11649, "end": 11766, "name": "POP", "source": 1 }, + { "begin": 11725, "end": 11777, "name": "JUMPDEST", "source": 2 }, + { "begin": 11715, "end": 11777, "name": "SWAP4", "source": 2 }, + { "begin": 11715, "end": 11777, "name": "POP", "source": 2 }, + { "begin": 11670, "end": 11787, "name": "POP", "source": 2 }, { - "begin": 11833, - "end": 11835, + "begin": 11854, + "end": 11856, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 11822, "end": 11831, "name": "DUP6", "source": 1 }, - { "begin": 11818, "end": 11836, "name": "ADD", "source": 1 }, + { "begin": 11843, "end": 11852, "name": "DUP6", "source": 2 }, + { "begin": 11839, "end": 11857, "name": "ADD", "source": 2 }, { - "begin": 11805, - "end": 11837, + "begin": 11826, + "end": 11858, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 11864, - "end": 11882, + "begin": 11885, + "end": 11903, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 11856, "end": 11862, "name": "DUP2", "source": 1 }, - { "begin": 11853, "end": 11883, "name": "GT", "source": 1 }, - { "begin": 11850, "end": 11967, "name": "ISZERO", "source": 1 }, + { "begin": 11877, "end": 11883, "name": "DUP2", "source": 2 }, + { "begin": 11874, "end": 11904, "name": "GT", "source": 2 }, + { "begin": 11871, "end": 11988, "name": "ISZERO", "source": 2 }, { - "begin": 11850, - "end": 11967, + "begin": 11871, + "end": 11988, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "289" }, - { "begin": 11850, "end": 11967, "name": "JUMPI", "source": 1 }, + { "begin": 11871, "end": 11988, "name": "JUMPI", "source": 2 }, { - "begin": 11886, - "end": 11965, + "begin": 11907, + "end": 11986, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "290" }, { - "begin": 11886, - "end": 11965, + "begin": 11907, + "end": 11986, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 11886, - "end": 11965, + "begin": 11907, + "end": 11986, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11886, - "end": 11965, + "begin": 11907, + "end": 11986, "name": "tag", - "source": 1, + "source": 2, "value": "290" }, - { "begin": 11886, "end": 11965, "name": "JUMPDEST", "source": 1 }, + { "begin": 11907, "end": 11986, "name": "JUMPDEST", "source": 2 }, { - "begin": 11850, - "end": 11967, + "begin": 11871, + "end": 11988, "name": "tag", - "source": 1, + "source": 2, "value": "289" }, - { "begin": 11850, "end": 11967, "name": "JUMPDEST", "source": 1 }, + { "begin": 11871, "end": 11988, "name": "JUMPDEST", "source": 2 }, { - "begin": 11991, - "end": 12072, + "begin": 12012, + "end": 12095, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "291" }, - { "begin": 12064, "end": 12071, "name": "DUP8", "source": 1 }, - { "begin": 12055, "end": 12061, "name": "DUP3", "source": 1 }, - { "begin": 12044, "end": 12053, "name": "DUP9", "source": 1 }, - { "begin": 12040, "end": 12062, "name": "ADD", "source": 1 }, + { "begin": 12087, "end": 12094, "name": "DUP8", "source": 2 }, + { "begin": 12078, "end": 12084, "name": "DUP3", "source": 2 }, + { "begin": 12067, "end": 12076, "name": "DUP9", "source": 2 }, + { "begin": 12063, "end": 12085, "name": "ADD", "source": 2 }, { - "begin": 11991, - "end": 12072, + "begin": 12012, + "end": 12095, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 11991, - "end": 12072, + "begin": 12012, + "end": 12095, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 11991, - "end": 12072, + "begin": 12012, + "end": 12095, "name": "tag", - "source": 1, + "source": 2, "value": "291" }, - { "begin": 11991, "end": 12072, "name": "JUMPDEST", "source": 1 }, - { "begin": 11981, "end": 12072, "name": "SWAP3", "source": 1 }, - { "begin": 11981, "end": 12072, "name": "POP", "source": 1 }, - { "begin": 11776, "end": 12082, "name": "POP", "source": 1 }, + { "begin": 12012, "end": 12095, "name": "JUMPDEST", "source": 2 }, + { "begin": 12002, "end": 12095, "name": "SWAP3", "source": 2 }, + { "begin": 12002, "end": 12095, "name": "POP", "source": 2 }, + { "begin": 11797, "end": 12105, "name": "POP", "source": 2 }, { - "begin": 12121, - "end": 12123, + "begin": 12144, + "end": 12146, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, { - "begin": 12147, - "end": 12199, + "begin": 12170, + "end": 12222, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "292" }, - { "begin": 12191, "end": 12198, "name": "DUP8", "source": 1 }, - { "begin": 12182, "end": 12188, "name": "DUP3", "source": 1 }, - { "begin": 12171, "end": 12180, "name": "DUP9", "source": 1 }, - { "begin": 12167, "end": 12189, "name": "ADD", "source": 1 }, + { "begin": 12214, "end": 12221, "name": "DUP8", "source": 2 }, + { "begin": 12205, "end": 12211, "name": "DUP3", "source": 2 }, + { "begin": 12194, "end": 12203, "name": "DUP9", "source": 2 }, + { "begin": 12190, "end": 12212, "name": "ADD", "source": 2 }, { - "begin": 12147, - "end": 12199, + "begin": 12170, + "end": 12222, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "103" }, { - "begin": 12147, - "end": 12199, + "begin": 12170, + "end": 12222, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12147, - "end": 12199, + "begin": 12170, + "end": 12222, "name": "tag", - "source": 1, + "source": 2, "value": "292" }, - { "begin": 12147, "end": 12199, "name": "JUMPDEST", "source": 1 }, - { "begin": 12137, "end": 12199, "name": "SWAP2", "source": 1 }, - { "begin": 12137, "end": 12199, "name": "POP", "source": 1 }, - { "begin": 12092, "end": 12209, "name": "POP", "source": 1 }, - { "begin": 10981, "end": 12216, "name": "SWAP3", "source": 1 }, - { "begin": 10981, "end": 12216, "name": "SWAP6", "source": 1 }, - { "begin": 10981, "end": 12216, "name": "SWAP2", "source": 1 }, - { "begin": 10981, "end": 12216, "name": "SWAP5", "source": 1 }, - { "begin": 10981, "end": 12216, "name": "POP", "source": 1 }, - { "begin": 10981, "end": 12216, "name": "SWAP3", "source": 1 }, - { "begin": 10981, "end": 12216, "name": "POP", "source": 1 }, - { - "begin": 10981, - "end": 12216, - "name": "JUMP", - "source": 1, + { "begin": 12170, "end": 12222, "name": "JUMPDEST", "source": 2 }, + { "begin": 12160, "end": 12222, "name": "SWAP2", "source": 2 }, + { "begin": 12160, "end": 12222, "name": "POP", "source": 2 }, + { "begin": 12115, "end": 12232, "name": "POP", "source": 2 }, + { "begin": 10998, "end": 12239, "name": "SWAP3", "source": 2 }, + { "begin": 10998, "end": 12239, "name": "SWAP6", "source": 2 }, + { "begin": 10998, "end": 12239, "name": "SWAP2", "source": 2 }, + { "begin": 10998, "end": 12239, "name": "SWAP5", "source": 2 }, + { "begin": 10998, "end": 12239, "name": "POP", "source": 2 }, + { "begin": 10998, "end": 12239, "name": "SWAP3", "source": 2 }, + { "begin": 10998, "end": 12239, "name": "POP", "source": 2 }, + { + "begin": 10998, + "end": 12239, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 12222, - "end": 13347, + "begin": 12245, + "end": 13374, "name": "tag", - "source": 1, + "source": 2, "value": "21" }, - { "begin": 12222, "end": 13347, "name": "JUMPDEST", "source": 1 }, + { "begin": 12245, "end": 13374, "name": "JUMPDEST", "source": 2 }, { - "begin": 12344, - "end": 12350, + "begin": 12369, + "end": 12375, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 12352, "end": 12358, "name": "DUP1", "source": 1 }, + { "begin": 12377, "end": 12383, "name": "DUP1", "source": 2 }, { - "begin": 12360, - "end": 12366, + "begin": 12385, + "end": 12391, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 12368, "end": 12374, "name": "DUP1", "source": 1 }, + { "begin": 12393, "end": 12399, "name": "DUP1", "source": 2 }, { - "begin": 12376, - "end": 12382, + "begin": 12401, + "end": 12407, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 12425, - "end": 12428, + "begin": 12450, + "end": 12453, "name": "PUSH", - "source": 1, + "source": 2, "value": "A0" }, - { "begin": 12413, "end": 12422, "name": "DUP7", "source": 1 }, - { "begin": 12404, "end": 12411, "name": "DUP9", "source": 1 }, - { "begin": 12400, "end": 12423, "name": "SUB", "source": 1 }, - { "begin": 12396, "end": 12429, "name": "SLT", "source": 1 }, - { "begin": 12393, "end": 12513, "name": "ISZERO", "source": 1 }, + { "begin": 12438, "end": 12447, "name": "DUP7", "source": 2 }, + { "begin": 12429, "end": 12436, "name": "DUP9", "source": 2 }, + { "begin": 12425, "end": 12448, "name": "SUB", "source": 2 }, + { "begin": 12421, "end": 12454, "name": "SLT", "source": 2 }, + { "begin": 12418, "end": 12538, "name": "ISZERO", "source": 2 }, { - "begin": 12393, - "end": 12513, + "begin": 12418, + "end": 12538, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "294" }, - { "begin": 12393, "end": 12513, "name": "JUMPI", "source": 1 }, + { "begin": 12418, "end": 12538, "name": "JUMPI", "source": 2 }, { - "begin": 12432, - "end": 12511, + "begin": 12457, + "end": 12536, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "295" }, { - "begin": 12432, - "end": 12511, + "begin": 12457, + "end": 12536, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 12432, - "end": 12511, + "begin": 12457, + "end": 12536, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12432, - "end": 12511, + "begin": 12457, + "end": 12536, "name": "tag", - "source": 1, + "source": 2, "value": "295" }, - { "begin": 12432, "end": 12511, "name": "JUMPDEST", "source": 1 }, + { "begin": 12457, "end": 12536, "name": "JUMPDEST", "source": 2 }, { - "begin": 12393, - "end": 12513, + "begin": 12418, + "end": 12538, "name": "tag", - "source": 1, + "source": 2, "value": "294" }, - { "begin": 12393, "end": 12513, "name": "JUMPDEST", "source": 1 }, + { "begin": 12418, "end": 12538, "name": "JUMPDEST", "source": 2 }, { - "begin": 12552, - "end": 12553, + "begin": 12577, + "end": 12578, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 12577, - "end": 12630, + "begin": 12602, + "end": 12655, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "296" }, - { "begin": 12622, "end": 12629, "name": "DUP9", "source": 1 }, - { "begin": 12613, "end": 12619, "name": "DUP3", "source": 1 }, - { "begin": 12602, "end": 12611, "name": "DUP10", "source": 1 }, - { "begin": 12598, "end": 12620, "name": "ADD", "source": 1 }, + { "begin": 12647, "end": 12654, "name": "DUP9", "source": 2 }, + { "begin": 12638, "end": 12644, "name": "DUP3", "source": 2 }, + { "begin": 12627, "end": 12636, "name": "DUP10", "source": 2 }, + { "begin": 12623, "end": 12645, "name": "ADD", "source": 2 }, { - "begin": 12577, - "end": 12630, + "begin": 12602, + "end": 12655, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "108" }, { - "begin": 12577, - "end": 12630, + "begin": 12602, + "end": 12655, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12577, - "end": 12630, + "begin": 12602, + "end": 12655, "name": "tag", - "source": 1, + "source": 2, "value": "296" }, - { "begin": 12577, "end": 12630, "name": "JUMPDEST", "source": 1 }, - { "begin": 12567, "end": 12630, "name": "SWAP6", "source": 1 }, - { "begin": 12567, "end": 12630, "name": "POP", "source": 1 }, - { "begin": 12523, "end": 12640, "name": "POP", "source": 1 }, + { "begin": 12602, "end": 12655, "name": "JUMPDEST", "source": 2 }, + { "begin": 12592, "end": 12655, "name": "SWAP6", "source": 2 }, + { "begin": 12592, "end": 12655, "name": "POP", "source": 2 }, + { "begin": 12548, "end": 12665, "name": "POP", "source": 2 }, { - "begin": 12679, - "end": 12681, + "begin": 12704, + "end": 12706, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 12705, - "end": 12758, + "begin": 12730, + "end": 12783, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "297" }, - { "begin": 12750, "end": 12757, "name": "DUP9", "source": 1 }, - { "begin": 12741, "end": 12747, "name": "DUP3", "source": 1 }, - { "begin": 12730, "end": 12739, "name": "DUP10", "source": 1 }, - { "begin": 12726, "end": 12748, "name": "ADD", "source": 1 }, + { "begin": 12775, "end": 12782, "name": "DUP9", "source": 2 }, + { "begin": 12766, "end": 12772, "name": "DUP3", "source": 2 }, + { "begin": 12755, "end": 12764, "name": "DUP10", "source": 2 }, + { "begin": 12751, "end": 12773, "name": "ADD", "source": 2 }, { - "begin": 12705, - "end": 12758, + "begin": 12730, + "end": 12783, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 12705, - "end": 12758, + "begin": 12730, + "end": 12783, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12705, - "end": 12758, + "begin": 12730, + "end": 12783, "name": "tag", - "source": 1, + "source": 2, "value": "297" }, - { "begin": 12705, "end": 12758, "name": "JUMPDEST", "source": 1 }, - { "begin": 12695, "end": 12758, "name": "SWAP5", "source": 1 }, - { "begin": 12695, "end": 12758, "name": "POP", "source": 1 }, - { "begin": 12650, "end": 12768, "name": "POP", "source": 1 }, + { "begin": 12730, "end": 12783, "name": "JUMPDEST", "source": 2 }, + { "begin": 12720, "end": 12783, "name": "SWAP5", "source": 2 }, + { "begin": 12720, "end": 12783, "name": "POP", "source": 2 }, + { "begin": 12675, "end": 12793, "name": "POP", "source": 2 }, { - "begin": 12807, - "end": 12809, + "begin": 12832, + "end": 12834, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { - "begin": 12833, - "end": 12886, + "begin": 12858, + "end": 12911, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "298" }, - { "begin": 12878, "end": 12885, "name": "DUP9", "source": 1 }, - { "begin": 12869, "end": 12875, "name": "DUP3", "source": 1 }, - { "begin": 12858, "end": 12867, "name": "DUP10", "source": 1 }, - { "begin": 12854, "end": 12876, "name": "ADD", "source": 1 }, + { "begin": 12903, "end": 12910, "name": "DUP9", "source": 2 }, + { "begin": 12894, "end": 12900, "name": "DUP3", "source": 2 }, + { "begin": 12883, "end": 12892, "name": "DUP10", "source": 2 }, + { "begin": 12879, "end": 12901, "name": "ADD", "source": 2 }, { - "begin": 12833, - "end": 12886, + "begin": 12858, + "end": 12911, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 12833, - "end": 12886, + "begin": 12858, + "end": 12911, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 12833, - "end": 12886, + "begin": 12858, + "end": 12911, "name": "tag", - "source": 1, + "source": 2, "value": "298" }, - { "begin": 12833, "end": 12886, "name": "JUMPDEST", "source": 1 }, - { "begin": 12823, "end": 12886, "name": "SWAP4", "source": 1 }, - { "begin": 12823, "end": 12886, "name": "POP", "source": 1 }, - { "begin": 12778, "end": 12896, "name": "POP", "source": 1 }, + { "begin": 12858, "end": 12911, "name": "JUMPDEST", "source": 2 }, + { "begin": 12848, "end": 12911, "name": "SWAP4", "source": 2 }, + { "begin": 12848, "end": 12911, "name": "POP", "source": 2 }, + { "begin": 12803, "end": 12921, "name": "POP", "source": 2 }, { - "begin": 12963, - "end": 12965, + "begin": 12988, + "end": 12990, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 12952, "end": 12961, "name": "DUP7", "source": 1 }, - { "begin": 12948, "end": 12966, "name": "ADD", "source": 1 }, + { "begin": 12977, "end": 12986, "name": "DUP7", "source": 2 }, + { "begin": 12973, "end": 12991, "name": "ADD", "source": 2 }, { - "begin": 12935, - "end": 12967, + "begin": 12960, + "end": 12992, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 12994, - "end": 13012, + "begin": 13019, + "end": 13037, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 12986, "end": 12992, "name": "DUP2", "source": 1 }, - { "begin": 12983, "end": 13013, "name": "GT", "source": 1 }, - { "begin": 12980, "end": 13097, "name": "ISZERO", "source": 1 }, + { "begin": 13011, "end": 13017, "name": "DUP2", "source": 2 }, + { "begin": 13008, "end": 13038, "name": "GT", "source": 2 }, + { "begin": 13005, "end": 13122, "name": "ISZERO", "source": 2 }, { - "begin": 12980, - "end": 13097, + "begin": 13005, + "end": 13122, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "299" }, - { "begin": 12980, "end": 13097, "name": "JUMPI", "source": 1 }, + { "begin": 13005, "end": 13122, "name": "JUMPI", "source": 2 }, { - "begin": 13016, - "end": 13095, + "begin": 13041, + "end": 13120, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "300" }, { - "begin": 13016, - "end": 13095, + "begin": 13041, + "end": 13120, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 13016, - "end": 13095, + "begin": 13041, + "end": 13120, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13016, - "end": 13095, + "begin": 13041, + "end": 13120, "name": "tag", - "source": 1, + "source": 2, "value": "300" }, - { "begin": 13016, "end": 13095, "name": "JUMPDEST", "source": 1 }, + { "begin": 13041, "end": 13120, "name": "JUMPDEST", "source": 2 }, { - "begin": 12980, - "end": 13097, + "begin": 13005, + "end": 13122, "name": "tag", - "source": 1, + "source": 2, "value": "299" }, - { "begin": 12980, "end": 13097, "name": "JUMPDEST", "source": 1 }, + { "begin": 13005, "end": 13122, "name": "JUMPDEST", "source": 2 }, { - "begin": 13121, - "end": 13202, + "begin": 13146, + "end": 13229, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "301" }, - { "begin": 13194, "end": 13201, "name": "DUP9", "source": 1 }, - { "begin": 13185, "end": 13191, "name": "DUP3", "source": 1 }, - { "begin": 13174, "end": 13183, "name": "DUP10", "source": 1 }, - { "begin": 13170, "end": 13192, "name": "ADD", "source": 1 }, + { "begin": 13221, "end": 13228, "name": "DUP9", "source": 2 }, + { "begin": 13212, "end": 13218, "name": "DUP3", "source": 2 }, + { "begin": 13201, "end": 13210, "name": "DUP10", "source": 2 }, + { "begin": 13197, "end": 13219, "name": "ADD", "source": 2 }, { - "begin": 13121, - "end": 13202, + "begin": 13146, + "end": 13229, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 13121, - "end": 13202, + "begin": 13146, + "end": 13229, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13121, - "end": 13202, + "begin": 13146, + "end": 13229, "name": "tag", - "source": 1, + "source": 2, "value": "301" }, - { "begin": 13121, "end": 13202, "name": "JUMPDEST", "source": 1 }, - { "begin": 13111, "end": 13202, "name": "SWAP3", "source": 1 }, - { "begin": 13111, "end": 13202, "name": "POP", "source": 1 }, - { "begin": 12906, "end": 13212, "name": "POP", "source": 1 }, + { "begin": 13146, "end": 13229, "name": "JUMPDEST", "source": 2 }, + { "begin": 13136, "end": 13229, "name": "SWAP3", "source": 2 }, + { "begin": 13136, "end": 13229, "name": "POP", "source": 2 }, + { "begin": 12931, "end": 13239, "name": "POP", "source": 2 }, { - "begin": 13251, - "end": 13254, + "begin": 13278, + "end": 13281, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, { - "begin": 13278, - "end": 13330, + "begin": 13305, + "end": 13357, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "302" }, - { "begin": 13322, "end": 13329, "name": "DUP9", "source": 1 }, - { "begin": 13313, "end": 13319, "name": "DUP3", "source": 1 }, - { "begin": 13302, "end": 13311, "name": "DUP10", "source": 1 }, - { "begin": 13298, "end": 13320, "name": "ADD", "source": 1 }, + { "begin": 13349, "end": 13356, "name": "DUP9", "source": 2 }, + { "begin": 13340, "end": 13346, "name": "DUP3", "source": 2 }, + { "begin": 13329, "end": 13338, "name": "DUP10", "source": 2 }, + { "begin": 13325, "end": 13347, "name": "ADD", "source": 2 }, { - "begin": 13278, - "end": 13330, + "begin": 13305, + "end": 13357, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "103" }, { - "begin": 13278, - "end": 13330, + "begin": 13305, + "end": 13357, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13278, - "end": 13330, + "begin": 13305, + "end": 13357, "name": "tag", - "source": 1, + "source": 2, "value": "302" }, - { "begin": 13278, "end": 13330, "name": "JUMPDEST", "source": 1 }, - { "begin": 13268, "end": 13330, "name": "SWAP2", "source": 1 }, - { "begin": 13268, "end": 13330, "name": "POP", "source": 1 }, - { "begin": 13222, "end": 13340, "name": "POP", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "SWAP3", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "SWAP6", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "POP", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "SWAP3", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "SWAP6", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "SWAP1", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "SWAP4", "source": 1 }, - { "begin": 12222, "end": 13347, "name": "POP", "source": 1 }, - { - "begin": 12222, - "end": 13347, - "name": "JUMP", - "source": 1, + { "begin": 13305, "end": 13357, "name": "JUMPDEST", "source": 2 }, + { "begin": 13295, "end": 13357, "name": "SWAP2", "source": 2 }, + { "begin": 13295, "end": 13357, "name": "POP", "source": 2 }, + { "begin": 13249, "end": 13367, "name": "POP", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "SWAP3", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "SWAP6", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "POP", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "SWAP3", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "SWAP6", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "SWAP1", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "SWAP4", "source": 2 }, + { "begin": 12245, "end": 13374, "name": "POP", "source": 2 }, + { + "begin": 12245, + "end": 13374, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 13353, - "end": 13413, + "begin": 13380, + "end": 13440, "name": "tag", - "source": 1, + "source": 2, "value": "115" }, - { "begin": 13353, "end": 13413, "name": "JUMPDEST", "source": 1 }, + { "begin": 13380, "end": 13440, "name": "JUMPDEST", "source": 2 }, { - "begin": 13381, - "end": 13384, + "begin": 13408, + "end": 13411, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 13402, "end": 13407, "name": "DUP2", "source": 1 }, - { "begin": 13395, "end": 13407, "name": "SWAP1", "source": 1 }, - { "begin": 13395, "end": 13407, "name": "POP", "source": 1 }, - { "begin": 13353, "end": 13413, "name": "SWAP2", "source": 1 }, - { "begin": 13353, "end": 13413, "name": "SWAP1", "source": 1 }, - { "begin": 13353, "end": 13413, "name": "POP", "source": 1 }, + { "begin": 13429, "end": 13434, "name": "DUP2", "source": 2 }, + { "begin": 13422, "end": 13434, "name": "SWAP1", "source": 2 }, + { "begin": 13422, "end": 13434, "name": "POP", "source": 2 }, + { "begin": 13380, "end": 13440, "name": "SWAP2", "source": 2 }, + { "begin": 13380, "end": 13440, "name": "SWAP1", "source": 2 }, + { "begin": 13380, "end": 13440, "name": "POP", "source": 2 }, { - "begin": 13353, - "end": 13413, + "begin": 13380, + "end": 13440, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 13419, - "end": 13561, + "begin": 13446, + "end": 13588, "name": "tag", - "source": 1, + "source": 2, "value": "116" }, - { "begin": 13419, "end": 13561, "name": "JUMPDEST", "source": 1 }, + { "begin": 13446, "end": 13588, "name": "JUMPDEST", "source": 2 }, { - "begin": 13469, - "end": 13478, + "begin": 13496, + "end": 13505, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 13502, - "end": 13555, + "begin": 13529, + "end": 13582, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "305" }, { - "begin": 13520, - "end": 13554, + "begin": 13547, + "end": 13581, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "306" }, { - "begin": 13529, - "end": 13553, + "begin": 13556, + "end": 13580, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "307" }, - { "begin": 13547, "end": 13552, "name": "DUP5", "source": 1 }, + { "begin": 13574, "end": 13579, "name": "DUP5", "source": 2 }, { - "begin": 13529, - "end": 13553, + "begin": 13556, + "end": 13580, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "105" }, { - "begin": 13529, - "end": 13553, + "begin": 13556, + "end": 13580, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13529, - "end": 13553, + "begin": 13556, + "end": 13580, "name": "tag", - "source": 1, + "source": 2, "value": "307" }, - { "begin": 13529, "end": 13553, "name": "JUMPDEST", "source": 1 }, + { "begin": 13556, "end": 13580, "name": "JUMPDEST", "source": 2 }, { - "begin": 13520, - "end": 13554, + "begin": 13547, + "end": 13581, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "115" }, { - "begin": 13520, - "end": 13554, + "begin": 13547, + "end": 13581, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13520, - "end": 13554, + "begin": 13547, + "end": 13581, "name": "tag", - "source": 1, + "source": 2, "value": "306" }, - { "begin": 13520, "end": 13554, "name": "JUMPDEST", "source": 1 }, + { "begin": 13547, "end": 13581, "name": "JUMPDEST", "source": 2 }, { - "begin": 13502, - "end": 13555, + "begin": 13529, + "end": 13582, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "105" }, { - "begin": 13502, - "end": 13555, + "begin": 13529, + "end": 13582, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13502, - "end": 13555, + "begin": 13529, + "end": 13582, "name": "tag", - "source": 1, + "source": 2, "value": "305" }, - { "begin": 13502, "end": 13555, "name": "JUMPDEST", "source": 1 }, - { "begin": 13489, "end": 13555, "name": "SWAP1", "source": 1 }, - { "begin": 13489, "end": 13555, "name": "POP", "source": 1 }, - { "begin": 13419, "end": 13561, "name": "SWAP2", "source": 1 }, - { "begin": 13419, "end": 13561, "name": "SWAP1", "source": 1 }, - { "begin": 13419, "end": 13561, "name": "POP", "source": 1 }, + { "begin": 13529, "end": 13582, "name": "JUMPDEST", "source": 2 }, + { "begin": 13516, "end": 13582, "name": "SWAP1", "source": 2 }, + { "begin": 13516, "end": 13582, "name": "POP", "source": 2 }, + { "begin": 13446, "end": 13588, "name": "SWAP2", "source": 2 }, + { "begin": 13446, "end": 13588, "name": "SWAP1", "source": 2 }, + { "begin": 13446, "end": 13588, "name": "POP", "source": 2 }, { - "begin": 13419, - "end": 13561, + "begin": 13446, + "end": 13588, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 13567, - "end": 13693, + "begin": 13594, + "end": 13720, "name": "tag", - "source": 1, + "source": 2, "value": "117" }, - { "begin": 13567, "end": 13693, "name": "JUMPDEST", "source": 1 }, + { "begin": 13594, "end": 13720, "name": "JUMPDEST", "source": 2 }, { - "begin": 13617, - "end": 13626, + "begin": 13644, + "end": 13653, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 13650, - "end": 13687, + "begin": 13677, + "end": 13714, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "309" }, - { "begin": 13681, "end": 13686, "name": "DUP3", "source": 1 }, + { "begin": 13708, "end": 13713, "name": "DUP3", "source": 2 }, { - "begin": 13650, - "end": 13687, + "begin": 13677, + "end": 13714, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "116" }, { - "begin": 13650, - "end": 13687, + "begin": 13677, + "end": 13714, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13650, - "end": 13687, + "begin": 13677, + "end": 13714, "name": "tag", - "source": 1, + "source": 2, "value": "309" }, - { "begin": 13650, "end": 13687, "name": "JUMPDEST", "source": 1 }, - { "begin": 13637, "end": 13687, "name": "SWAP1", "source": 1 }, - { "begin": 13637, "end": 13687, "name": "POP", "source": 1 }, - { "begin": 13567, "end": 13693, "name": "SWAP2", "source": 1 }, - { "begin": 13567, "end": 13693, "name": "SWAP1", "source": 1 }, - { "begin": 13567, "end": 13693, "name": "POP", "source": 1 }, + { "begin": 13677, "end": 13714, "name": "JUMPDEST", "source": 2 }, + { "begin": 13664, "end": 13714, "name": "SWAP1", "source": 2 }, + { "begin": 13664, "end": 13714, "name": "POP", "source": 2 }, + { "begin": 13594, "end": 13720, "name": "SWAP2", "source": 2 }, + { "begin": 13594, "end": 13720, "name": "SWAP1", "source": 2 }, + { "begin": 13594, "end": 13720, "name": "POP", "source": 2 }, { - "begin": 13567, - "end": 13693, + "begin": 13594, + "end": 13720, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 13699, - "end": 13840, + "begin": 13726, + "end": 13867, "name": "tag", - "source": 1, + "source": 2, "value": "118" }, - { "begin": 13699, "end": 13840, "name": "JUMPDEST", "source": 1 }, + { "begin": 13726, "end": 13867, "name": "JUMPDEST", "source": 2 }, { - "begin": 13764, - "end": 13773, + "begin": 13791, + "end": 13800, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 13797, - "end": 13834, + "begin": 13824, + "end": 13861, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "311" }, - { "begin": 13828, "end": 13833, "name": "DUP3", "source": 1 }, + { "begin": 13855, "end": 13860, "name": "DUP3", "source": 2 }, { - "begin": 13797, - "end": 13834, + "begin": 13824, + "end": 13861, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "117" }, { - "begin": 13797, - "end": 13834, + "begin": 13824, + "end": 13861, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13797, - "end": 13834, + "begin": 13824, + "end": 13861, "name": "tag", - "source": 1, + "source": 2, "value": "311" }, - { "begin": 13797, "end": 13834, "name": "JUMPDEST", "source": 1 }, - { "begin": 13784, "end": 13834, "name": "SWAP1", "source": 1 }, - { "begin": 13784, "end": 13834, "name": "POP", "source": 1 }, - { "begin": 13699, "end": 13840, "name": "SWAP2", "source": 1 }, - { "begin": 13699, "end": 13840, "name": "SWAP1", "source": 1 }, - { "begin": 13699, "end": 13840, "name": "POP", "source": 1 }, + { "begin": 13824, "end": 13861, "name": "JUMPDEST", "source": 2 }, + { "begin": 13811, "end": 13861, "name": "SWAP1", "source": 2 }, + { "begin": 13811, "end": 13861, "name": "POP", "source": 2 }, + { "begin": 13726, "end": 13867, "name": "SWAP2", "source": 2 }, + { "begin": 13726, "end": 13867, "name": "SWAP1", "source": 2 }, + { "begin": 13726, "end": 13867, "name": "POP", "source": 2 }, { - "begin": 13699, - "end": 13840, + "begin": 13726, + "end": 13867, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 13846, - "end": 14007, + "begin": 13873, + "end": 14034, "name": "tag", - "source": 1, + "source": 2, "value": "119" }, - { "begin": 13846, "end": 14007, "name": "JUMPDEST", "source": 1 }, + { "begin": 13873, "end": 14034, "name": "JUMPDEST", "source": 2 }, { - "begin": 13948, - "end": 14000, + "begin": 13975, + "end": 14027, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "313" }, - { "begin": 13994, "end": 13999, "name": "DUP2", "source": 1 }, + { "begin": 14021, "end": 14026, "name": "DUP2", "source": 2 }, { - "begin": 13948, - "end": 14000, + "begin": 13975, + "end": 14027, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "118" }, { - "begin": 13948, - "end": 14000, + "begin": 13975, + "end": 14027, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 13948, - "end": 14000, + "begin": 13975, + "end": 14027, "name": "tag", - "source": 1, + "source": 2, "value": "313" }, - { "begin": 13948, "end": 14000, "name": "JUMPDEST", "source": 1 }, - { "begin": 13943, "end": 13946, "name": "DUP3", "source": 1 }, - { "begin": 13936, "end": 14001, "name": "MSTORE", "source": 1 }, - { "begin": 13846, "end": 14007, "name": "POP", "source": 1 }, - { "begin": 13846, "end": 14007, "name": "POP", "source": 1 }, + { "begin": 13975, "end": 14027, "name": "JUMPDEST", "source": 2 }, + { "begin": 13970, "end": 13973, "name": "DUP3", "source": 2 }, + { "begin": 13963, "end": 14028, "name": "MSTORE", "source": 2 }, + { "begin": 13873, "end": 14034, "name": "POP", "source": 2 }, + { "begin": 13873, "end": 14034, "name": "POP", "source": 2 }, { - "begin": 13846, - "end": 14007, + "begin": 13873, + "end": 14034, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 14013, - "end": 14265, + "begin": 14040, + "end": 14292, "name": "tag", - "source": 1, + "source": 2, "value": "26" }, - { "begin": 14013, "end": 14265, "name": "JUMPDEST", "source": 1 }, + { "begin": 14040, "end": 14292, "name": "JUMPDEST", "source": 2 }, { - "begin": 14121, - "end": 14125, + "begin": 14148, + "end": 14152, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 14159, - "end": 14161, + "begin": 14186, + "end": 14188, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 14148, "end": 14157, "name": "DUP3", "source": 1 }, - { "begin": 14144, "end": 14162, "name": "ADD", "source": 1 }, - { "begin": 14136, "end": 14162, "name": "SWAP1", "source": 1 }, - { "begin": 14136, "end": 14162, "name": "POP", "source": 1 }, + { "begin": 14175, "end": 14184, "name": "DUP3", "source": 2 }, + { "begin": 14171, "end": 14189, "name": "ADD", "source": 2 }, + { "begin": 14163, "end": 14189, "name": "SWAP1", "source": 2 }, + { "begin": 14163, "end": 14189, "name": "POP", "source": 2 }, { - "begin": 14172, - "end": 14258, + "begin": 14199, + "end": 14285, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "315" }, { - "begin": 14255, - "end": 14256, + "begin": 14282, + "end": 14283, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 14244, "end": 14253, "name": "DUP4", "source": 1 }, - { "begin": 14240, "end": 14257, "name": "ADD", "source": 1 }, - { "begin": 14231, "end": 14237, "name": "DUP5", "source": 1 }, + { "begin": 14271, "end": 14280, "name": "DUP4", "source": 2 }, + { "begin": 14267, "end": 14284, "name": "ADD", "source": 2 }, + { "begin": 14258, "end": 14264, "name": "DUP5", "source": 2 }, { - "begin": 14172, - "end": 14258, + "begin": 14199, + "end": 14285, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "119" }, { - "begin": 14172, - "end": 14258, + "begin": 14199, + "end": 14285, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14172, - "end": 14258, + "begin": 14199, + "end": 14285, "name": "tag", - "source": 1, + "source": 2, "value": "315" }, - { "begin": 14172, "end": 14258, "name": "JUMPDEST", "source": 1 }, - { "begin": 14013, "end": 14265, "name": "SWAP3", "source": 1 }, - { "begin": 14013, "end": 14265, "name": "SWAP2", "source": 1 }, - { "begin": 14013, "end": 14265, "name": "POP", "source": 1 }, - { "begin": 14013, "end": 14265, "name": "POP", "source": 1 }, + { "begin": 14199, "end": 14285, "name": "JUMPDEST", "source": 2 }, + { "begin": 14040, "end": 14292, "name": "SWAP3", "source": 2 }, + { "begin": 14040, "end": 14292, "name": "SWAP2", "source": 2 }, + { "begin": 14040, "end": 14292, "name": "POP", "source": 2 }, + { "begin": 14040, "end": 14292, "name": "POP", "source": 2 }, { - "begin": 14013, - "end": 14265, + "begin": 14040, + "end": 14292, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 14271, - "end": 15466, + "begin": 14298, + "end": 15501, "name": "tag", - "source": 1, + "source": 2, "value": "29" }, - { "begin": 14271, "end": 15466, "name": "JUMPDEST", "source": 1 }, + { "begin": 14298, "end": 15501, "name": "JUMPDEST", "source": 2 }, { - "begin": 14412, - "end": 14418, + "begin": 14443, + "end": 14449, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 14420, "end": 14426, "name": "DUP1", "source": 1 }, + { "begin": 14451, "end": 14457, "name": "DUP1", "source": 2 }, { - "begin": 14428, - "end": 14434, + "begin": 14459, + "end": 14465, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 14436, "end": 14442, "name": "DUP1", "source": 1 }, + { "begin": 14467, "end": 14473, "name": "DUP1", "source": 2 }, { - "begin": 14485, - "end": 14488, + "begin": 14516, + "end": 14519, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 14473, "end": 14482, "name": "DUP6", "source": 1 }, - { "begin": 14464, "end": 14471, "name": "DUP8", "source": 1 }, - { "begin": 14460, "end": 14483, "name": "SUB", "source": 1 }, - { "begin": 14456, "end": 14489, "name": "SLT", "source": 1 }, - { "begin": 14453, "end": 14573, "name": "ISZERO", "source": 1 }, + { "begin": 14504, "end": 14513, "name": "DUP6", "source": 2 }, + { "begin": 14495, "end": 14502, "name": "DUP8", "source": 2 }, + { "begin": 14491, "end": 14514, "name": "SUB", "source": 2 }, + { "begin": 14487, "end": 14520, "name": "SLT", "source": 2 }, + { "begin": 14484, "end": 14604, "name": "ISZERO", "source": 2 }, { - "begin": 14453, - "end": 14573, + "begin": 14484, + "end": 14604, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "317" }, - { "begin": 14453, "end": 14573, "name": "JUMPI", "source": 1 }, + { "begin": 14484, "end": 14604, "name": "JUMPI", "source": 2 }, { - "begin": 14492, - "end": 14571, + "begin": 14523, + "end": 14602, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "318" }, { - "begin": 14492, - "end": 14571, + "begin": 14523, + "end": 14602, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 14492, - "end": 14571, + "begin": 14523, + "end": 14602, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14492, - "end": 14571, + "begin": 14523, + "end": 14602, "name": "tag", - "source": 1, + "source": 2, "value": "318" }, - { "begin": 14492, "end": 14571, "name": "JUMPDEST", "source": 1 }, + { "begin": 14523, "end": 14602, "name": "JUMPDEST", "source": 2 }, { - "begin": 14453, - "end": 14573, + "begin": 14484, + "end": 14604, "name": "tag", - "source": 1, + "source": 2, "value": "317" }, - { "begin": 14453, "end": 14573, "name": "JUMPDEST", "source": 1 }, + { "begin": 14484, "end": 14604, "name": "JUMPDEST", "source": 2 }, { - "begin": 14640, - "end": 14641, + "begin": 14671, + "end": 14672, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 14629, "end": 14638, "name": "DUP6", "source": 1 }, - { "begin": 14625, "end": 14642, "name": "ADD", "source": 1 }, + { "begin": 14660, "end": 14669, "name": "DUP6", "source": 2 }, + { "begin": 14656, "end": 14673, "name": "ADD", "source": 2 }, { - "begin": 14612, - "end": 14643, + "begin": 14643, + "end": 14674, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 14670, - "end": 14688, + "begin": 14701, + "end": 14719, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 14662, "end": 14668, "name": "DUP2", "source": 1 }, - { "begin": 14659, "end": 14689, "name": "GT", "source": 1 }, - { "begin": 14656, "end": 14773, "name": "ISZERO", "source": 1 }, + { "begin": 14693, "end": 14699, "name": "DUP2", "source": 2 }, + { "begin": 14690, "end": 14720, "name": "GT", "source": 2 }, + { "begin": 14687, "end": 14804, "name": "ISZERO", "source": 2 }, { - "begin": 14656, - "end": 14773, + "begin": 14687, + "end": 14804, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "319" }, - { "begin": 14656, "end": 14773, "name": "JUMPI", "source": 1 }, + { "begin": 14687, "end": 14804, "name": "JUMPI", "source": 2 }, { - "begin": 14692, - "end": 14771, + "begin": 14723, + "end": 14802, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "320" }, { - "begin": 14692, - "end": 14771, + "begin": 14723, + "end": 14802, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 14692, - "end": 14771, + "begin": 14723, + "end": 14802, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14692, - "end": 14771, + "begin": 14723, + "end": 14802, "name": "tag", - "source": 1, + "source": 2, "value": "320" }, - { "begin": 14692, "end": 14771, "name": "JUMPDEST", "source": 1 }, + { "begin": 14723, "end": 14802, "name": "JUMPDEST", "source": 2 }, { - "begin": 14656, - "end": 14773, + "begin": 14687, + "end": 14804, "name": "tag", - "source": 1, + "source": 2, "value": "319" }, - { "begin": 14656, "end": 14773, "name": "JUMPDEST", "source": 1 }, + { "begin": 14687, "end": 14804, "name": "JUMPDEST", "source": 2 }, { - "begin": 14797, - "end": 14878, + "begin": 14828, + "end": 14911, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "321" }, - { "begin": 14870, "end": 14877, "name": "DUP8", "source": 1 }, - { "begin": 14861, "end": 14867, "name": "DUP3", "source": 1 }, - { "begin": 14850, "end": 14859, "name": "DUP9", "source": 1 }, - { "begin": 14846, "end": 14868, "name": "ADD", "source": 1 }, + { "begin": 14903, "end": 14910, "name": "DUP8", "source": 2 }, + { "begin": 14894, "end": 14900, "name": "DUP3", "source": 2 }, + { "begin": 14883, "end": 14892, "name": "DUP9", "source": 2 }, + { "begin": 14879, "end": 14901, "name": "ADD", "source": 2 }, { - "begin": 14797, - "end": 14878, + "begin": 14828, + "end": 14911, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 14797, - "end": 14878, + "begin": 14828, + "end": 14911, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14797, - "end": 14878, + "begin": 14828, + "end": 14911, "name": "tag", - "source": 1, + "source": 2, "value": "321" }, - { "begin": 14797, "end": 14878, "name": "JUMPDEST", "source": 1 }, - { "begin": 14787, "end": 14878, "name": "SWAP5", "source": 1 }, - { "begin": 14787, "end": 14878, "name": "POP", "source": 1 }, - { "begin": 14583, "end": 14888, "name": "POP", "source": 1 }, + { "begin": 14828, "end": 14911, "name": "JUMPDEST", "source": 2 }, + { "begin": 14818, "end": 14911, "name": "SWAP5", "source": 2 }, + { "begin": 14818, "end": 14911, "name": "POP", "source": 2 }, + { "begin": 14614, "end": 14921, "name": "POP", "source": 2 }, { - "begin": 14927, - "end": 14929, + "begin": 14960, + "end": 14962, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 14953, - "end": 15006, + "begin": 14986, + "end": 15039, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "322" }, - { "begin": 14998, "end": 15005, "name": "DUP8", "source": 1 }, - { "begin": 14989, "end": 14995, "name": "DUP3", "source": 1 }, - { "begin": 14978, "end": 14987, "name": "DUP9", "source": 1 }, - { "begin": 14974, "end": 14996, "name": "ADD", "source": 1 }, + { "begin": 15031, "end": 15038, "name": "DUP8", "source": 2 }, + { "begin": 15022, "end": 15028, "name": "DUP3", "source": 2 }, + { "begin": 15011, "end": 15020, "name": "DUP9", "source": 2 }, + { "begin": 15007, "end": 15029, "name": "ADD", "source": 2 }, { - "begin": 14953, - "end": 15006, + "begin": 14986, + "end": 15039, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 14953, - "end": 15006, + "begin": 14986, + "end": 15039, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 14953, - "end": 15006, + "begin": 14986, + "end": 15039, "name": "tag", - "source": 1, + "source": 2, "value": "322" }, - { "begin": 14953, "end": 15006, "name": "JUMPDEST", "source": 1 }, - { "begin": 14943, "end": 15006, "name": "SWAP4", "source": 1 }, - { "begin": 14943, "end": 15006, "name": "POP", "source": 1 }, - { "begin": 14898, "end": 15016, "name": "POP", "source": 1 }, + { "begin": 14986, "end": 15039, "name": "JUMPDEST", "source": 2 }, + { "begin": 14976, "end": 15039, "name": "SWAP4", "source": 2 }, + { "begin": 14976, "end": 15039, "name": "POP", "source": 2 }, + { "begin": 14931, "end": 15049, "name": "POP", "source": 2 }, { - "begin": 15083, - "end": 15085, + "begin": 15116, + "end": 15118, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 15072, "end": 15081, "name": "DUP6", "source": 1 }, - { "begin": 15068, "end": 15086, "name": "ADD", "source": 1 }, + { "begin": 15105, "end": 15114, "name": "DUP6", "source": 2 }, + { "begin": 15101, "end": 15119, "name": "ADD", "source": 2 }, { - "begin": 15055, - "end": 15087, + "begin": 15088, + "end": 15120, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 15114, - "end": 15132, + "begin": 15147, + "end": 15165, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 15106, "end": 15112, "name": "DUP2", "source": 1 }, - { "begin": 15103, "end": 15133, "name": "GT", "source": 1 }, - { "begin": 15100, "end": 15217, "name": "ISZERO", "source": 1 }, + { "begin": 15139, "end": 15145, "name": "DUP2", "source": 2 }, + { "begin": 15136, "end": 15166, "name": "GT", "source": 2 }, + { "begin": 15133, "end": 15250, "name": "ISZERO", "source": 2 }, { - "begin": 15100, - "end": 15217, + "begin": 15133, + "end": 15250, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "323" }, - { "begin": 15100, "end": 15217, "name": "JUMPI", "source": 1 }, + { "begin": 15133, "end": 15250, "name": "JUMPI", "source": 2 }, { - "begin": 15136, - "end": 15215, + "begin": 15169, + "end": 15248, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "324" }, { - "begin": 15136, - "end": 15215, + "begin": 15169, + "end": 15248, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 15136, - "end": 15215, + "begin": 15169, + "end": 15248, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15136, - "end": 15215, + "begin": 15169, + "end": 15248, "name": "tag", - "source": 1, + "source": 2, "value": "324" }, - { "begin": 15136, "end": 15215, "name": "JUMPDEST", "source": 1 }, + { "begin": 15169, "end": 15248, "name": "JUMPDEST", "source": 2 }, { - "begin": 15100, - "end": 15217, + "begin": 15133, + "end": 15250, "name": "tag", - "source": 1, + "source": 2, "value": "323" }, - { "begin": 15100, "end": 15217, "name": "JUMPDEST", "source": 1 }, + { "begin": 15133, "end": 15250, "name": "JUMPDEST", "source": 2 }, { - "begin": 15241, - "end": 15322, + "begin": 15274, + "end": 15357, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "325" }, - { "begin": 15314, "end": 15321, "name": "DUP8", "source": 1 }, - { "begin": 15305, "end": 15311, "name": "DUP3", "source": 1 }, - { "begin": 15294, "end": 15303, "name": "DUP9", "source": 1 }, - { "begin": 15290, "end": 15312, "name": "ADD", "source": 1 }, + { "begin": 15349, "end": 15356, "name": "DUP8", "source": 2 }, + { "begin": 15340, "end": 15346, "name": "DUP3", "source": 2 }, + { "begin": 15329, "end": 15338, "name": "DUP9", "source": 2 }, + { "begin": 15325, "end": 15347, "name": "ADD", "source": 2 }, { - "begin": 15241, - "end": 15322, + "begin": 15274, + "end": 15357, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 15241, - "end": 15322, + "begin": 15274, + "end": 15357, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15241, - "end": 15322, + "begin": 15274, + "end": 15357, "name": "tag", - "source": 1, + "source": 2, "value": "325" }, - { "begin": 15241, "end": 15322, "name": "JUMPDEST", "source": 1 }, - { "begin": 15231, "end": 15322, "name": "SWAP3", "source": 1 }, - { "begin": 15231, "end": 15322, "name": "POP", "source": 1 }, - { "begin": 15026, "end": 15332, "name": "POP", "source": 1 }, + { "begin": 15274, "end": 15357, "name": "JUMPDEST", "source": 2 }, + { "begin": 15264, "end": 15357, "name": "SWAP3", "source": 2 }, + { "begin": 15264, "end": 15357, "name": "POP", "source": 2 }, + { "begin": 15059, "end": 15367, "name": "POP", "source": 2 }, { - "begin": 15371, - "end": 15373, + "begin": 15406, + "end": 15408, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, { - "begin": 15397, - "end": 15449, + "begin": 15432, + "end": 15484, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "326" }, - { "begin": 15441, "end": 15448, "name": "DUP8", "source": 1 }, - { "begin": 15432, "end": 15438, "name": "DUP3", "source": 1 }, - { "begin": 15421, "end": 15430, "name": "DUP9", "source": 1 }, - { "begin": 15417, "end": 15439, "name": "ADD", "source": 1 }, + { "begin": 15476, "end": 15483, "name": "DUP8", "source": 2 }, + { "begin": 15467, "end": 15473, "name": "DUP3", "source": 2 }, + { "begin": 15456, "end": 15465, "name": "DUP9", "source": 2 }, + { "begin": 15452, "end": 15474, "name": "ADD", "source": 2 }, { - "begin": 15397, - "end": 15449, + "begin": 15432, + "end": 15484, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "103" }, { - "begin": 15397, - "end": 15449, + "begin": 15432, + "end": 15484, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15397, - "end": 15449, + "begin": 15432, + "end": 15484, "name": "tag", - "source": 1, + "source": 2, "value": "326" }, - { "begin": 15397, "end": 15449, "name": "JUMPDEST", "source": 1 }, - { "begin": 15387, "end": 15449, "name": "SWAP2", "source": 1 }, - { "begin": 15387, "end": 15449, "name": "POP", "source": 1 }, - { "begin": 15342, "end": 15459, "name": "POP", "source": 1 }, - { "begin": 14271, "end": 15466, "name": "SWAP3", "source": 1 }, - { "begin": 14271, "end": 15466, "name": "SWAP6", "source": 1 }, - { "begin": 14271, "end": 15466, "name": "SWAP2", "source": 1 }, - { "begin": 14271, "end": 15466, "name": "SWAP5", "source": 1 }, - { "begin": 14271, "end": 15466, "name": "POP", "source": 1 }, - { "begin": 14271, "end": 15466, "name": "SWAP3", "source": 1 }, - { "begin": 14271, "end": 15466, "name": "POP", "source": 1 }, - { - "begin": 14271, - "end": 15466, - "name": "JUMP", - "source": 1, + { "begin": 15432, "end": 15484, "name": "JUMPDEST", "source": 2 }, + { "begin": 15422, "end": 15484, "name": "SWAP2", "source": 2 }, + { "begin": 15422, "end": 15484, "name": "POP", "source": 2 }, + { "begin": 15377, "end": 15494, "name": "POP", "source": 2 }, + { "begin": 14298, "end": 15501, "name": "SWAP3", "source": 2 }, + { "begin": 14298, "end": 15501, "name": "SWAP6", "source": 2 }, + { "begin": 14298, "end": 15501, "name": "SWAP2", "source": 2 }, + { "begin": 14298, "end": 15501, "name": "SWAP5", "source": 2 }, + { "begin": 14298, "end": 15501, "name": "POP", "source": 2 }, + { "begin": 14298, "end": 15501, "name": "SWAP3", "source": 2 }, + { "begin": 14298, "end": 15501, "name": "POP", "source": 2 }, + { + "begin": 14298, + "end": 15501, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 15472, - "end": 16451, + "begin": 15507, + "end": 16490, "name": "tag", - "source": 1, + "source": 2, "value": "33" }, - { "begin": 15472, "end": 16451, "name": "JUMPDEST", "source": 1 }, + { "begin": 15507, "end": 16490, "name": "JUMPDEST", "source": 2 }, { - "begin": 15585, - "end": 15591, + "begin": 15622, + "end": 15628, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 15593, "end": 15599, "name": "DUP1", "source": 1 }, + { "begin": 15630, "end": 15636, "name": "DUP1", "source": 2 }, { - "begin": 15601, - "end": 15607, + "begin": 15638, + "end": 15644, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 15609, "end": 15615, "name": "DUP1", "source": 1 }, + { "begin": 15646, "end": 15652, "name": "DUP1", "source": 2 }, { - "begin": 15658, - "end": 15661, + "begin": 15695, + "end": 15698, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 15646, "end": 15655, "name": "DUP6", "source": 1 }, - { "begin": 15637, "end": 15644, "name": "DUP8", "source": 1 }, - { "begin": 15633, "end": 15656, "name": "SUB", "source": 1 }, - { "begin": 15629, "end": 15662, "name": "SLT", "source": 1 }, - { "begin": 15626, "end": 15746, "name": "ISZERO", "source": 1 }, + { "begin": 15683, "end": 15692, "name": "DUP6", "source": 2 }, + { "begin": 15674, "end": 15681, "name": "DUP8", "source": 2 }, + { "begin": 15670, "end": 15693, "name": "SUB", "source": 2 }, + { "begin": 15666, "end": 15699, "name": "SLT", "source": 2 }, + { "begin": 15663, "end": 15783, "name": "ISZERO", "source": 2 }, { - "begin": 15626, - "end": 15746, + "begin": 15663, + "end": 15783, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "328" }, - { "begin": 15626, "end": 15746, "name": "JUMPI", "source": 1 }, + { "begin": 15663, "end": 15783, "name": "JUMPI", "source": 2 }, { - "begin": 15665, - "end": 15744, + "begin": 15702, + "end": 15781, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "329" }, { - "begin": 15665, - "end": 15744, + "begin": 15702, + "end": 15781, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 15665, - "end": 15744, + "begin": 15702, + "end": 15781, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15665, - "end": 15744, + "begin": 15702, + "end": 15781, "name": "tag", - "source": 1, + "source": 2, "value": "329" }, - { "begin": 15665, "end": 15744, "name": "JUMPDEST", "source": 1 }, + { "begin": 15702, "end": 15781, "name": "JUMPDEST", "source": 2 }, { - "begin": 15626, - "end": 15746, + "begin": 15663, + "end": 15783, "name": "tag", - "source": 1, + "source": 2, "value": "328" }, - { "begin": 15626, "end": 15746, "name": "JUMPDEST", "source": 1 }, + { "begin": 15663, "end": 15783, "name": "JUMPDEST", "source": 2 }, { - "begin": 15785, - "end": 15786, + "begin": 15822, + "end": 15823, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 15810, - "end": 15863, + "begin": 15847, + "end": 15900, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "330" }, - { "begin": 15855, "end": 15862, "name": "DUP8", "source": 1 }, - { "begin": 15846, "end": 15852, "name": "DUP3", "source": 1 }, - { "begin": 15835, "end": 15844, "name": "DUP9", "source": 1 }, - { "begin": 15831, "end": 15853, "name": "ADD", "source": 1 }, + { "begin": 15892, "end": 15899, "name": "DUP8", "source": 2 }, + { "begin": 15883, "end": 15889, "name": "DUP3", "source": 2 }, + { "begin": 15872, "end": 15881, "name": "DUP9", "source": 2 }, + { "begin": 15868, "end": 15890, "name": "ADD", "source": 2 }, { - "begin": 15810, - "end": 15863, + "begin": 15847, + "end": 15900, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "108" }, { - "begin": 15810, - "end": 15863, + "begin": 15847, + "end": 15900, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15810, - "end": 15863, + "begin": 15847, + "end": 15900, "name": "tag", - "source": 1, + "source": 2, "value": "330" }, - { "begin": 15810, "end": 15863, "name": "JUMPDEST", "source": 1 }, - { "begin": 15800, "end": 15863, "name": "SWAP5", "source": 1 }, - { "begin": 15800, "end": 15863, "name": "POP", "source": 1 }, - { "begin": 15756, "end": 15873, "name": "POP", "source": 1 }, + { "begin": 15847, "end": 15900, "name": "JUMPDEST", "source": 2 }, + { "begin": 15837, "end": 15900, "name": "SWAP5", "source": 2 }, + { "begin": 15837, "end": 15900, "name": "POP", "source": 2 }, + { "begin": 15793, "end": 15910, "name": "POP", "source": 2 }, { - "begin": 15912, - "end": 15914, + "begin": 15949, + "end": 15951, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 15938, - "end": 15991, + "begin": 15975, + "end": 16028, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "331" }, - { "begin": 15983, "end": 15990, "name": "DUP8", "source": 1 }, - { "begin": 15974, "end": 15980, "name": "DUP3", "source": 1 }, - { "begin": 15963, "end": 15972, "name": "DUP9", "source": 1 }, - { "begin": 15959, "end": 15981, "name": "ADD", "source": 1 }, + { "begin": 16020, "end": 16027, "name": "DUP8", "source": 2 }, + { "begin": 16011, "end": 16017, "name": "DUP3", "source": 2 }, + { "begin": 16000, "end": 16009, "name": "DUP9", "source": 2 }, + { "begin": 15996, "end": 16018, "name": "ADD", "source": 2 }, { - "begin": 15938, - "end": 15991, + "begin": 15975, + "end": 16028, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 15938, - "end": 15991, + "begin": 15975, + "end": 16028, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 15938, - "end": 15991, + "begin": 15975, + "end": 16028, "name": "tag", - "source": 1, + "source": 2, "value": "331" }, - { "begin": 15938, "end": 15991, "name": "JUMPDEST", "source": 1 }, - { "begin": 15928, "end": 15991, "name": "SWAP4", "source": 1 }, - { "begin": 15928, "end": 15991, "name": "POP", "source": 1 }, - { "begin": 15883, "end": 16001, "name": "POP", "source": 1 }, + { "begin": 15975, "end": 16028, "name": "JUMPDEST", "source": 2 }, + { "begin": 15965, "end": 16028, "name": "SWAP4", "source": 2 }, + { "begin": 15965, "end": 16028, "name": "POP", "source": 2 }, + { "begin": 15920, "end": 16038, "name": "POP", "source": 2 }, { - "begin": 16068, - "end": 16070, + "begin": 16105, + "end": 16107, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 16057, "end": 16066, "name": "DUP6", "source": 1 }, - { "begin": 16053, "end": 16071, "name": "ADD", "source": 1 }, + { "begin": 16094, "end": 16103, "name": "DUP6", "source": 2 }, + { "begin": 16090, "end": 16108, "name": "ADD", "source": 2 }, { - "begin": 16040, - "end": 16072, + "begin": 16077, + "end": 16109, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 16099, - "end": 16117, + "begin": 16136, + "end": 16154, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 16091, "end": 16097, "name": "DUP2", "source": 1 }, - { "begin": 16088, "end": 16118, "name": "GT", "source": 1 }, - { "begin": 16085, "end": 16202, "name": "ISZERO", "source": 1 }, + { "begin": 16128, "end": 16134, "name": "DUP2", "source": 2 }, + { "begin": 16125, "end": 16155, "name": "GT", "source": 2 }, + { "begin": 16122, "end": 16239, "name": "ISZERO", "source": 2 }, { - "begin": 16085, - "end": 16202, + "begin": 16122, + "end": 16239, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "332" }, - { "begin": 16085, "end": 16202, "name": "JUMPI", "source": 1 }, + { "begin": 16122, "end": 16239, "name": "JUMPI", "source": 2 }, { - "begin": 16121, - "end": 16200, + "begin": 16158, + "end": 16237, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "333" }, { - "begin": 16121, - "end": 16200, + "begin": 16158, + "end": 16237, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 16121, - "end": 16200, + "begin": 16158, + "end": 16237, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16121, - "end": 16200, + "begin": 16158, + "end": 16237, "name": "tag", - "source": 1, + "source": 2, "value": "333" }, - { "begin": 16121, "end": 16200, "name": "JUMPDEST", "source": 1 }, + { "begin": 16158, "end": 16237, "name": "JUMPDEST", "source": 2 }, { - "begin": 16085, - "end": 16202, + "begin": 16122, + "end": 16239, "name": "tag", - "source": 1, + "source": 2, "value": "332" }, - { "begin": 16085, "end": 16202, "name": "JUMPDEST", "source": 1 }, + { "begin": 16122, "end": 16239, "name": "JUMPDEST", "source": 2 }, { - "begin": 16226, - "end": 16307, + "begin": 16263, + "end": 16346, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "334" }, - { "begin": 16299, "end": 16306, "name": "DUP8", "source": 1 }, - { "begin": 16290, "end": 16296, "name": "DUP3", "source": 1 }, - { "begin": 16279, "end": 16288, "name": "DUP9", "source": 1 }, - { "begin": 16275, "end": 16297, "name": "ADD", "source": 1 }, + { "begin": 16338, "end": 16345, "name": "DUP8", "source": 2 }, + { "begin": 16329, "end": 16335, "name": "DUP3", "source": 2 }, + { "begin": 16318, "end": 16327, "name": "DUP9", "source": 2 }, + { "begin": 16314, "end": 16336, "name": "ADD", "source": 2 }, { - "begin": 16226, - "end": 16307, + "begin": 16263, + "end": 16346, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 16226, - "end": 16307, + "begin": 16263, + "end": 16346, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16226, - "end": 16307, + "begin": 16263, + "end": 16346, "name": "tag", - "source": 1, + "source": 2, "value": "334" }, - { "begin": 16226, "end": 16307, "name": "JUMPDEST", "source": 1 }, - { "begin": 16216, "end": 16307, "name": "SWAP3", "source": 1 }, - { "begin": 16216, "end": 16307, "name": "POP", "source": 1 }, - { "begin": 16011, "end": 16317, "name": "POP", "source": 1 }, + { "begin": 16263, "end": 16346, "name": "JUMPDEST", "source": 2 }, + { "begin": 16253, "end": 16346, "name": "SWAP3", "source": 2 }, + { "begin": 16253, "end": 16346, "name": "POP", "source": 2 }, + { "begin": 16048, "end": 16356, "name": "POP", "source": 2 }, { - "begin": 16356, - "end": 16358, + "begin": 16395, + "end": 16397, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, { - "begin": 16382, - "end": 16434, + "begin": 16421, + "end": 16473, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "335" }, - { "begin": 16426, "end": 16433, "name": "DUP8", "source": 1 }, - { "begin": 16417, "end": 16423, "name": "DUP3", "source": 1 }, - { "begin": 16406, "end": 16415, "name": "DUP9", "source": 1 }, - { "begin": 16402, "end": 16424, "name": "ADD", "source": 1 }, + { "begin": 16465, "end": 16472, "name": "DUP8", "source": 2 }, + { "begin": 16456, "end": 16462, "name": "DUP3", "source": 2 }, + { "begin": 16445, "end": 16454, "name": "DUP9", "source": 2 }, + { "begin": 16441, "end": 16463, "name": "ADD", "source": 2 }, { - "begin": 16382, - "end": 16434, + "begin": 16421, + "end": 16473, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "103" }, { - "begin": 16382, - "end": 16434, + "begin": 16421, + "end": 16473, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16382, - "end": 16434, + "begin": 16421, + "end": 16473, "name": "tag", - "source": 1, + "source": 2, "value": "335" }, - { "begin": 16382, "end": 16434, "name": "JUMPDEST", "source": 1 }, - { "begin": 16372, "end": 16434, "name": "SWAP2", "source": 1 }, - { "begin": 16372, "end": 16434, "name": "POP", "source": 1 }, - { "begin": 16327, "end": 16444, "name": "POP", "source": 1 }, - { "begin": 15472, "end": 16451, "name": "SWAP3", "source": 1 }, - { "begin": 15472, "end": 16451, "name": "SWAP6", "source": 1 }, - { "begin": 15472, "end": 16451, "name": "SWAP2", "source": 1 }, - { "begin": 15472, "end": 16451, "name": "SWAP5", "source": 1 }, - { "begin": 15472, "end": 16451, "name": "POP", "source": 1 }, - { "begin": 15472, "end": 16451, "name": "SWAP3", "source": 1 }, - { "begin": 15472, "end": 16451, "name": "POP", "source": 1 }, - { - "begin": 15472, - "end": 16451, - "name": "JUMP", - "source": 1, + { "begin": 16421, "end": 16473, "name": "JUMPDEST", "source": 2 }, + { "begin": 16411, "end": 16473, "name": "SWAP2", "source": 2 }, + { "begin": 16411, "end": 16473, "name": "POP", "source": 2 }, + { "begin": 16366, "end": 16483, "name": "POP", "source": 2 }, + { "begin": 15507, "end": 16490, "name": "SWAP3", "source": 2 }, + { "begin": 15507, "end": 16490, "name": "SWAP6", "source": 2 }, + { "begin": 15507, "end": 16490, "name": "SWAP2", "source": 2 }, + { "begin": 15507, "end": 16490, "name": "SWAP5", "source": 2 }, + { "begin": 15507, "end": 16490, "name": "POP", "source": 2 }, + { "begin": 15507, "end": 16490, "name": "SWAP3", "source": 2 }, + { "begin": 15507, "end": 16490, "name": "POP", "source": 2 }, + { + "begin": 15507, + "end": 16490, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 16457, - "end": 16794, + "begin": 16496, + "end": 16834, "name": "tag", - "source": 1, + "source": 2, "value": "120" }, - { "begin": 16457, "end": 16794, "name": "JUMPDEST", "source": 1 }, + { "begin": 16496, "end": 16834, "name": "JUMPDEST", "source": 2 }, { - "begin": 16560, - "end": 16564, + "begin": 16600, + "end": 16604, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 16650, - "end": 16668, + "begin": 16690, + "end": 16708, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 16642, "end": 16648, "name": "DUP3", "source": 1 }, - { "begin": 16639, "end": 16669, "name": "GT", "source": 1 }, - { "begin": 16636, "end": 16692, "name": "ISZERO", "source": 1 }, + { "begin": 16682, "end": 16688, "name": "DUP3", "source": 2 }, + { "begin": 16679, "end": 16709, "name": "GT", "source": 2 }, + { "begin": 16676, "end": 16732, "name": "ISZERO", "source": 2 }, { - "begin": 16636, - "end": 16692, + "begin": 16676, + "end": 16732, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "337" }, - { "begin": 16636, "end": 16692, "name": "JUMPI", "source": 1 }, + { "begin": 16676, "end": 16732, "name": "JUMPI", "source": 2 }, { - "begin": 16672, - "end": 16690, + "begin": 16712, + "end": 16730, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "338" }, { - "begin": 16672, - "end": 16690, + "begin": 16712, + "end": 16730, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "80" }, { - "begin": 16672, - "end": 16690, + "begin": 16712, + "end": 16730, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16672, - "end": 16690, + "begin": 16712, + "end": 16730, "name": "tag", - "source": 1, + "source": 2, "value": "338" }, - { "begin": 16672, "end": 16690, "name": "JUMPDEST", "source": 1 }, + { "begin": 16712, "end": 16730, "name": "JUMPDEST", "source": 2 }, { - "begin": 16636, - "end": 16692, + "begin": 16676, + "end": 16732, "name": "tag", - "source": 1, + "source": 2, "value": "337" }, - { "begin": 16636, "end": 16692, "name": "JUMPDEST", "source": 1 }, + { "begin": 16676, "end": 16732, "name": "JUMPDEST", "source": 2 }, { - "begin": 16722, - "end": 16726, + "begin": 16762, + "end": 16766, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 16714, "end": 16720, "name": "DUP3", "source": 1 }, - { "begin": 16710, "end": 16727, "name": "MUL", "source": 1 }, - { "begin": 16702, "end": 16727, "name": "SWAP1", "source": 1 }, - { "begin": 16702, "end": 16727, "name": "POP", "source": 1 }, + { "begin": 16754, "end": 16760, "name": "DUP3", "source": 2 }, + { "begin": 16750, "end": 16767, "name": "MUL", "source": 2 }, + { "begin": 16742, "end": 16767, "name": "SWAP1", "source": 2 }, + { "begin": 16742, "end": 16767, "name": "POP", "source": 2 }, { - "begin": 16782, - "end": 16786, + "begin": 16822, + "end": 16826, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 16776, "end": 16780, "name": "DUP2", "source": 1 }, - { "begin": 16772, "end": 16787, "name": "ADD", "source": 1 }, - { "begin": 16764, "end": 16787, "name": "SWAP1", "source": 1 }, - { "begin": 16764, "end": 16787, "name": "POP", "source": 1 }, - { "begin": 16457, "end": 16794, "name": "SWAP2", "source": 1 }, - { "begin": 16457, "end": 16794, "name": "SWAP1", "source": 1 }, - { "begin": 16457, "end": 16794, "name": "POP", "source": 1 }, + { "begin": 16816, "end": 16820, "name": "DUP2", "source": 2 }, + { "begin": 16812, "end": 16827, "name": "ADD", "source": 2 }, + { "begin": 16804, "end": 16827, "name": "SWAP1", "source": 2 }, + { "begin": 16804, "end": 16827, "name": "POP", "source": 2 }, + { "begin": 16496, "end": 16834, "name": "SWAP2", "source": 2 }, + { "begin": 16496, "end": 16834, "name": "SWAP1", "source": 2 }, + { "begin": 16496, "end": 16834, "name": "POP", "source": 2 }, { - "begin": 16457, - "end": 16794, + "begin": 16496, + "end": 16834, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 16833, - "end": 17602, + "begin": 16873, + "end": 17645, "name": "tag", - "source": 1, + "source": 2, "value": "121" }, - { "begin": 16833, "end": 17602, "name": "JUMPDEST", "source": 1 }, + { "begin": 16873, "end": 17645, "name": "JUMPDEST", "source": 2 }, { - "begin": 16908, - "end": 16913, + "begin": 16949, + "end": 16954, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 16952, - "end": 16956, + "begin": 16993, + "end": 16997, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 16940, "end": 16949, "name": "DUP3", "source": 1 }, - { "begin": 16935, "end": 16938, "name": "DUP5", "source": 1 }, - { "begin": 16931, "end": 16950, "name": "SUB", "source": 1 }, - { "begin": 16927, "end": 16957, "name": "SLT", "source": 1 }, - { "begin": 16924, "end": 17041, "name": "ISZERO", "source": 1 }, + { "begin": 16981, "end": 16990, "name": "DUP3", "source": 2 }, + { "begin": 16976, "end": 16979, "name": "DUP5", "source": 2 }, + { "begin": 16972, "end": 16991, "name": "SUB", "source": 2 }, + { "begin": 16968, "end": 16998, "name": "SLT", "source": 2 }, + { "begin": 16965, "end": 17082, "name": "ISZERO", "source": 2 }, { - "begin": 16924, - "end": 17041, + "begin": 16965, + "end": 17082, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "340" }, - { "begin": 16924, "end": 17041, "name": "JUMPI", "source": 1 }, + { "begin": 16965, "end": 17082, "name": "JUMPI", "source": 2 }, { - "begin": 16960, - "end": 17039, + "begin": 17001, + "end": 17080, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "341" }, { - "begin": 16960, - "end": 17039, + "begin": 17001, + "end": 17080, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "78" }, { - "begin": 16960, - "end": 17039, + "begin": 17001, + "end": 17080, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 16960, - "end": 17039, + "begin": 17001, + "end": 17080, "name": "tag", - "source": 1, + "source": 2, "value": "341" }, - { "begin": 16960, "end": 17039, "name": "JUMPDEST", "source": 1 }, + { "begin": 17001, "end": 17080, "name": "JUMPDEST", "source": 2 }, { - "begin": 16924, - "end": 17041, + "begin": 16965, + "end": 17082, "name": "tag", - "source": 1, + "source": 2, "value": "340" }, - { "begin": 16924, "end": 17041, "name": "JUMPDEST", "source": 1 }, + { "begin": 16965, "end": 17082, "name": "JUMPDEST", "source": 2 }, { - "begin": 17059, - "end": 17080, + "begin": 17100, + "end": 17121, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "342" }, { - "begin": 17075, - "end": 17079, + "begin": 17116, + "end": 17120, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, { - "begin": 17059, - "end": 17080, + "begin": 17100, + "end": 17121, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { - "begin": 17059, - "end": 17080, + "begin": 17100, + "end": 17121, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17059, - "end": 17080, + "begin": 17100, + "end": 17121, "name": "tag", - "source": 1, + "source": 2, "value": "342" }, - { "begin": 17059, "end": 17080, "name": "JUMPDEST", "source": 1 }, - { "begin": 17050, "end": 17080, "name": "SWAP1", "source": 1 }, - { "begin": 17050, "end": 17080, "name": "POP", "source": 1 }, + { "begin": 17100, "end": 17121, "name": "JUMPDEST", "source": 2 }, + { "begin": 17091, "end": 17121, "name": "SWAP1", "source": 2 }, + { "begin": 17091, "end": 17121, "name": "POP", "source": 2 }, { - "begin": 17171, - "end": 17172, + "begin": 17212, + "end": 17213, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 17160, "end": 17169, "name": "DUP3", "source": 1 }, - { "begin": 17156, "end": 17173, "name": "ADD", "source": 1 }, + { "begin": 17201, "end": 17210, "name": "DUP3", "source": 2 }, + { "begin": 17197, "end": 17214, "name": "ADD", "source": 2 }, { - "begin": 17143, - "end": 17174, + "begin": 17184, + "end": 17215, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 17201, - "end": 17219, + "begin": 17242, + "end": 17260, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 17193, "end": 17199, "name": "DUP2", "source": 1 }, - { "begin": 17190, "end": 17220, "name": "GT", "source": 1 }, - { "begin": 17187, "end": 17304, "name": "ISZERO", "source": 1 }, + { "begin": 17234, "end": 17240, "name": "DUP2", "source": 2 }, + { "begin": 17231, "end": 17261, "name": "GT", "source": 2 }, + { "begin": 17228, "end": 17345, "name": "ISZERO", "source": 2 }, { - "begin": 17187, - "end": 17304, + "begin": 17228, + "end": 17345, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "343" }, - { "begin": 17187, "end": 17304, "name": "JUMPI", "source": 1 }, + { "begin": 17228, "end": 17345, "name": "JUMPI", "source": 2 }, { - "begin": 17223, - "end": 17302, + "begin": 17264, + "end": 17343, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "344" }, { - "begin": 17223, - "end": 17302, + "begin": 17264, + "end": 17343, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "83" }, { - "begin": 17223, - "end": 17302, + "begin": 17264, + "end": 17343, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17223, - "end": 17302, + "begin": 17264, + "end": 17343, "name": "tag", - "source": 1, + "source": 2, "value": "344" }, - { "begin": 17223, "end": 17302, "name": "JUMPDEST", "source": 1 }, + { "begin": 17264, "end": 17343, "name": "JUMPDEST", "source": 2 }, { - "begin": 17187, - "end": 17304, + "begin": 17228, + "end": 17345, "name": "tag", - "source": 1, + "source": 2, "value": "343" }, - { "begin": 17187, "end": 17304, "name": "JUMPDEST", "source": 1 }, + { "begin": 17228, "end": 17345, "name": "JUMPDEST", "source": 2 }, { - "begin": 17343, - "end": 17420, + "begin": 17384, + "end": 17463, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "345" }, - { "begin": 17416, "end": 17419, "name": "DUP5", "source": 1 }, - { "begin": 17407, "end": 17413, "name": "DUP3", "source": 1 }, - { "begin": 17396, "end": 17405, "name": "DUP6", "source": 1 }, - { "begin": 17392, "end": 17414, "name": "ADD", "source": 1 }, + { "begin": 17459, "end": 17462, "name": "DUP5", "source": 2 }, + { "begin": 17450, "end": 17456, "name": "DUP3", "source": 2 }, + { "begin": 17439, "end": 17448, "name": "DUP6", "source": 2 }, + { "begin": 17435, "end": 17457, "name": "ADD", "source": 2 }, { - "begin": 17343, - "end": 17420, + "begin": 17384, + "end": 17463, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 17343, - "end": 17420, + "begin": 17384, + "end": 17463, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17343, - "end": 17420, + "begin": 17384, + "end": 17463, "name": "tag", - "source": 1, + "source": 2, "value": "345" }, - { "begin": 17343, "end": 17420, "name": "JUMPDEST", "source": 1 }, + { "begin": 17384, "end": 17463, "name": "JUMPDEST", "source": 2 }, { - "begin": 17336, - "end": 17340, + "begin": 17377, + "end": 17381, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 17329, "end": 17334, "name": "DUP4", "source": 1 }, - { "begin": 17325, "end": 17341, "name": "ADD", "source": 1 }, - { "begin": 17318, "end": 17421, "name": "MSTORE", "source": 1 }, - { "begin": 17090, "end": 17432, "name": "POP", "source": 1 }, + { "begin": 17370, "end": 17375, "name": "DUP4", "source": 2 }, + { "begin": 17366, "end": 17382, "name": "ADD", "source": 2 }, + { "begin": 17359, "end": 17464, "name": "MSTORE", "source": 2 }, + { "begin": 17131, "end": 17475, "name": "POP", "source": 2 }, { - "begin": 17493, - "end": 17495, + "begin": 17536, + "end": 17538, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 17534, - "end": 17583, + "begin": 17577, + "end": 17626, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "346" }, - { "begin": 17579, "end": 17582, "name": "DUP5", "source": 1 }, - { "begin": 17570, "end": 17576, "name": "DUP3", "source": 1 }, - { "begin": 17559, "end": 17568, "name": "DUP6", "source": 1 }, - { "begin": 17555, "end": 17577, "name": "ADD", "source": 1 }, + { "begin": 17622, "end": 17625, "name": "DUP5", "source": 2 }, + { "begin": 17613, "end": 17619, "name": "DUP3", "source": 2 }, + { "begin": 17602, "end": 17611, "name": "DUP6", "source": 2 }, + { "begin": 17598, "end": 17620, "name": "ADD", "source": 2 }, { - "begin": 17534, - "end": 17583, + "begin": 17577, + "end": 17626, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "100" }, { - "begin": 17534, - "end": 17583, + "begin": 17577, + "end": 17626, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17534, - "end": 17583, + "begin": 17577, + "end": 17626, "name": "tag", - "source": 1, + "source": 2, "value": "346" }, - { "begin": 17534, "end": 17583, "name": "JUMPDEST", "source": 1 }, + { "begin": 17577, "end": 17626, "name": "JUMPDEST", "source": 2 }, { - "begin": 17527, - "end": 17531, + "begin": 17570, + "end": 17574, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 17520, "end": 17525, "name": "DUP4", "source": 1 }, - { "begin": 17516, "end": 17532, "name": "ADD", "source": 1 }, - { "begin": 17509, "end": 17584, "name": "MSTORE", "source": 1 }, - { "begin": 17442, "end": 17595, "name": "POP", "source": 1 }, - { "begin": 16833, "end": 17602, "name": "SWAP3", "source": 1 }, - { "begin": 16833, "end": 17602, "name": "SWAP2", "source": 1 }, - { "begin": 16833, "end": 17602, "name": "POP", "source": 1 }, - { "begin": 16833, "end": 17602, "name": "POP", "source": 1 }, + { "begin": 17563, "end": 17568, "name": "DUP4", "source": 2 }, + { "begin": 17559, "end": 17575, "name": "ADD", "source": 2 }, + { "begin": 17552, "end": 17627, "name": "MSTORE", "source": 2 }, + { "begin": 17485, "end": 17638, "name": "POP", "source": 2 }, + { "begin": 16873, "end": 17645, "name": "SWAP3", "source": 2 }, + { "begin": 16873, "end": 17645, "name": "SWAP2", "source": 2 }, + { "begin": 16873, "end": 17645, "name": "POP", "source": 2 }, + { "begin": 16873, "end": 17645, "name": "POP", "source": 2 }, { - "begin": 16833, - "end": 17602, + "begin": 16873, + "end": 17645, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 17643, - "end": 18636, + "begin": 17686, + "end": 18682, "name": "tag", - "source": 1, + "source": 2, "value": "122" }, - { "begin": 17643, "end": 18636, "name": "JUMPDEST", "source": 1 }, + { "begin": 17686, "end": 18682, "name": "JUMPDEST", "source": 2 }, { - "begin": 17765, - "end": 17770, + "begin": 17809, + "end": 17814, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 17790, - "end": 17897, + "begin": 17834, + "end": 17942, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "348" }, { - "begin": 17806, - "end": 17896, + "begin": 17850, + "end": 17941, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "349" }, - { "begin": 17889, "end": 17895, "name": "DUP5", "source": 1 }, + { "begin": 17934, "end": 17940, "name": "DUP5", "source": 2 }, { - "begin": 17806, - "end": 17896, + "begin": 17850, + "end": 17941, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "120" }, { - "begin": 17806, - "end": 17896, + "begin": 17850, + "end": 17941, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17806, - "end": 17896, + "begin": 17850, + "end": 17941, "name": "tag", - "source": 1, + "source": 2, "value": "349" }, - { "begin": 17806, "end": 17896, "name": "JUMPDEST", "source": 1 }, + { "begin": 17850, "end": 17941, "name": "JUMPDEST", "source": 2 }, { - "begin": 17790, - "end": 17897, + "begin": 17834, + "end": 17942, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "82" }, { - "begin": 17790, - "end": 17897, + "begin": 17834, + "end": 17942, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 17790, - "end": 17897, + "begin": 17834, + "end": 17942, "name": "tag", - "source": 1, + "source": 2, "value": "348" }, - { "begin": 17790, "end": 17897, "name": "JUMPDEST", "source": 1 }, - { "begin": 17781, "end": 17897, "name": "SWAP1", "source": 1 }, - { "begin": 17781, "end": 17897, "name": "POP", "source": 1 }, - { "begin": 17917, "end": 17922, "name": "DUP1", "source": 1 }, - { "begin": 17946, "end": 17952, "name": "DUP4", "source": 1 }, - { "begin": 17939, "end": 17944, "name": "DUP3", "source": 1 }, - { "begin": 17932, "end": 17953, "name": "MSTORE", "source": 1 }, + { "begin": 17834, "end": 17942, "name": "JUMPDEST", "source": 2 }, + { "begin": 17825, "end": 17942, "name": "SWAP1", "source": 2 }, + { "begin": 17825, "end": 17942, "name": "POP", "source": 2 }, + { "begin": 17962, "end": 17967, "name": "DUP1", "source": 2 }, + { "begin": 17991, "end": 17997, "name": "DUP4", "source": 2 }, + { "begin": 17984, "end": 17989, "name": "DUP3", "source": 2 }, + { "begin": 17977, "end": 17998, "name": "MSTORE", "source": 2 }, { - "begin": 17980, - "end": 17984, + "begin": 18025, + "end": 18029, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 17973, "end": 17978, "name": "DUP3", "source": 1 }, - { "begin": 17969, "end": 17985, "name": "ADD", "source": 1 }, - { "begin": 17962, "end": 17985, "name": "SWAP1", "source": 1 }, - { "begin": 17962, "end": 17985, "name": "POP", "source": 1 }, + { "begin": 18018, "end": 18023, "name": "DUP3", "source": 2 }, + { "begin": 18014, "end": 18030, "name": "ADD", "source": 2 }, + { "begin": 18007, "end": 18030, "name": "SWAP1", "source": 2 }, + { "begin": 18007, "end": 18030, "name": "POP", "source": 2 }, { - "begin": 18033, - "end": 18037, + "begin": 18078, + "end": 18082, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 18025, "end": 18031, "name": "DUP5", "source": 1 }, - { "begin": 18021, "end": 18038, "name": "MUL", "source": 1 }, - { "begin": 18013, "end": 18019, "name": "DUP4", "source": 1 }, - { "begin": 18009, "end": 18039, "name": "ADD", "source": 1 }, - { "begin": 18062, "end": 18065, "name": "DUP6", "source": 1 }, - { "begin": 18054, "end": 18060, "name": "DUP2", "source": 1 }, - { "begin": 18051, "end": 18066, "name": "GT", "source": 1 }, - { "begin": 18048, "end": 18170, "name": "ISZERO", "source": 1 }, + { "begin": 18070, "end": 18076, "name": "DUP5", "source": 2 }, + { "begin": 18066, "end": 18083, "name": "MUL", "source": 2 }, + { "begin": 18058, "end": 18064, "name": "DUP4", "source": 2 }, + { "begin": 18054, "end": 18084, "name": "ADD", "source": 2 }, + { "begin": 18107, "end": 18110, "name": "DUP6", "source": 2 }, + { "begin": 18099, "end": 18105, "name": "DUP2", "source": 2 }, + { "begin": 18096, "end": 18111, "name": "GT", "source": 2 }, + { "begin": 18093, "end": 18215, "name": "ISZERO", "source": 2 }, { - "begin": 18048, - "end": 18170, + "begin": 18093, + "end": 18215, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "350" }, - { "begin": 18048, "end": 18170, "name": "JUMPI", "source": 1 }, + { "begin": 18093, "end": 18215, "name": "JUMPI", "source": 2 }, { - "begin": 18081, - "end": 18160, + "begin": 18126, + "end": 18205, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "351" }, { - "begin": 18081, - "end": 18160, + "begin": 18126, + "end": 18205, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "89" }, { - "begin": 18081, - "end": 18160, + "begin": 18126, + "end": 18205, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18081, - "end": 18160, + "begin": 18126, + "end": 18205, "name": "tag", - "source": 1, + "source": 2, "value": "351" }, - { "begin": 18081, "end": 18160, "name": "JUMPDEST", "source": 1 }, + { "begin": 18126, "end": 18205, "name": "JUMPDEST", "source": 2 }, { - "begin": 18048, - "end": 18170, + "begin": 18093, + "end": 18215, "name": "tag", - "source": 1, + "source": 2, "value": "350" }, - { "begin": 18048, "end": 18170, "name": "JUMPDEST", "source": 1 }, - { "begin": 18196, "end": 18202, "name": "DUP4", "source": 1 }, + { "begin": 18093, "end": 18215, "name": "JUMPDEST", "source": 2 }, + { "begin": 18241, "end": 18247, "name": "DUP4", "source": 2 }, { - "begin": 18179, - "end": 18630, + "begin": 18224, + "end": 18676, "name": "tag", - "source": 1, + "source": 2, "value": "352" }, - { "begin": 18179, "end": 18630, "name": "JUMPDEST", "source": 1 }, - { "begin": 18213, "end": 18219, "name": "DUP2", "source": 1 }, - { "begin": 18208, "end": 18211, "name": "DUP2", "source": 1 }, - { "begin": 18205, "end": 18220, "name": "LT", "source": 1 }, - { "begin": 18179, "end": 18630, "name": "ISZERO", "source": 1 }, + { "begin": 18224, "end": 18676, "name": "JUMPDEST", "source": 2 }, + { "begin": 18258, "end": 18264, "name": "DUP2", "source": 2 }, + { "begin": 18253, "end": 18256, "name": "DUP2", "source": 2 }, + { "begin": 18250, "end": 18265, "name": "LT", "source": 2 }, + { "begin": 18224, "end": 18676, "name": "ISZERO", "source": 2 }, { - "begin": 18179, - "end": 18630, + "begin": 18224, + "end": 18676, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "354" }, - { "begin": 18179, "end": 18630, "name": "JUMPI", "source": 1 }, - { "begin": 18302, "end": 18305, "name": "DUP1", "source": 1 }, + { "begin": 18224, "end": 18676, "name": "JUMPI", "source": 2 }, + { "begin": 18347, "end": 18350, "name": "DUP1", "source": 2 }, { - "begin": 18289, - "end": 18306, + "begin": 18334, + "end": 18351, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 18338, - "end": 18356, + "begin": 18383, + "end": 18401, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 18325, "end": 18336, "name": "DUP2", "source": 1 }, - { "begin": 18322, "end": 18357, "name": "GT", "source": 1 }, - { "begin": 18319, "end": 18441, "name": "ISZERO", "source": 1 }, + { "begin": 18370, "end": 18381, "name": "DUP2", "source": 2 }, + { "begin": 18367, "end": 18402, "name": "GT", "source": 2 }, + { "begin": 18364, "end": 18486, "name": "ISZERO", "source": 2 }, { - "begin": 18319, - "end": 18441, + "begin": 18364, + "end": 18486, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "355" }, - { "begin": 18319, "end": 18441, "name": "JUMPI", "source": 1 }, + { "begin": 18364, "end": 18486, "name": "JUMPI", "source": 2 }, { - "begin": 18360, - "end": 18439, + "begin": 18405, + "end": 18484, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "356" }, { - "begin": 18360, - "end": 18439, + "begin": 18405, + "end": 18484, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "87" }, { - "begin": 18360, - "end": 18439, + "begin": 18405, + "end": 18484, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18360, - "end": 18439, + "begin": 18405, + "end": 18484, "name": "tag", - "source": 1, + "source": 2, "value": "356" }, - { "begin": 18360, "end": 18439, "name": "JUMPDEST", "source": 1 }, + { "begin": 18405, "end": 18484, "name": "JUMPDEST", "source": 2 }, { - "begin": 18319, - "end": 18441, + "begin": 18364, + "end": 18486, "name": "tag", - "source": 1, + "source": 2, "value": "355" }, - { "begin": 18319, "end": 18441, "name": "JUMPDEST", "source": 1 }, - { "begin": 18484, "end": 18495, "name": "DUP1", "source": 1 }, - { "begin": 18476, "end": 18482, "name": "DUP7", "source": 1 }, - { "begin": 18472, "end": 18496, "name": "ADD", "source": 1 }, + { "begin": 18364, "end": 18486, "name": "JUMPDEST", "source": 2 }, + { "begin": 18529, "end": 18540, "name": "DUP1", "source": 2 }, + { "begin": 18521, "end": 18527, "name": "DUP7", "source": 2 }, + { "begin": 18517, "end": 18541, "name": "ADD", "source": 2 }, { - "begin": 18522, - "end": 18585, + "begin": 18567, + "end": 18631, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "357" }, - { "begin": 18581, "end": 18584, "name": "DUP10", "source": 1 }, - { "begin": 18569, "end": 18579, "name": "DUP3", "source": 1 }, + { "begin": 18627, "end": 18630, "name": "DUP10", "source": 2 }, + { "begin": 18615, "end": 18625, "name": "DUP3", "source": 2 }, { - "begin": 18522, - "end": 18585, + "begin": 18567, + "end": 18631, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "121" }, { - "begin": 18522, - "end": 18585, + "begin": 18567, + "end": 18631, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18522, - "end": 18585, + "begin": 18567, + "end": 18631, "name": "tag", - "source": 1, + "source": 2, "value": "357" }, - { "begin": 18522, "end": 18585, "name": "JUMPDEST", "source": 1 }, - { "begin": 18517, "end": 18520, "name": "DUP6", "source": 1 }, - { "begin": 18510, "end": 18586, "name": "MSTORE", "source": 1 }, + { "begin": 18567, "end": 18631, "name": "JUMPDEST", "source": 2 }, + { "begin": 18562, "end": 18565, "name": "DUP6", "source": 2 }, + { "begin": 18555, "end": 18632, "name": "MSTORE", "source": 2 }, { - "begin": 18615, - "end": 18619, + "begin": 18661, + "end": 18665, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 18610, "end": 18613, "name": "DUP6", "source": 1 }, - { "begin": 18606, "end": 18620, "name": "ADD", "source": 1 }, - { "begin": 18599, "end": 18620, "name": "SWAP5", "source": 1 }, - { "begin": 18599, "end": 18620, "name": "POP", "source": 1 }, - { "begin": 18255, "end": 18630, "name": "POP", "source": 1 }, - { "begin": 18255, "end": 18630, "name": "POP", "source": 1 }, + { "begin": 18656, "end": 18659, "name": "DUP6", "source": 2 }, + { "begin": 18652, "end": 18666, "name": "ADD", "source": 2 }, + { "begin": 18645, "end": 18666, "name": "SWAP5", "source": 2 }, + { "begin": 18645, "end": 18666, "name": "POP", "source": 2 }, + { "begin": 18300, "end": 18676, "name": "POP", "source": 2 }, + { "begin": 18300, "end": 18676, "name": "POP", "source": 2 }, { - "begin": 18239, - "end": 18243, + "begin": 18284, + "end": 18288, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 18234, "end": 18237, "name": "DUP2", "source": 1 }, - { "begin": 18230, "end": 18244, "name": "ADD", "source": 1 }, - { "begin": 18223, "end": 18244, "name": "SWAP1", "source": 1 }, - { "begin": 18223, "end": 18244, "name": "POP", "source": 1 }, + { "begin": 18279, "end": 18282, "name": "DUP2", "source": 2 }, + { "begin": 18275, "end": 18289, "name": "ADD", "source": 2 }, + { "begin": 18268, "end": 18289, "name": "SWAP1", "source": 2 }, + { "begin": 18268, "end": 18289, "name": "POP", "source": 2 }, { - "begin": 18179, - "end": 18630, + "begin": 18224, + "end": 18676, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "352" }, - { "begin": 18179, "end": 18630, "name": "JUMP", "source": 1 }, + { "begin": 18224, "end": 18676, "name": "JUMP", "source": 2 }, { - "begin": 18179, - "end": 18630, + "begin": 18224, + "end": 18676, "name": "tag", - "source": 1, + "source": 2, "value": "354" }, - { "begin": 18179, "end": 18630, "name": "JUMPDEST", "source": 1 }, - { "begin": 18183, "end": 18204, "name": "POP", "source": 1 }, - { "begin": 17771, "end": 18636, "name": "POP", "source": 1 }, - { "begin": 17771, "end": 18636, "name": "POP", "source": 1 }, - { "begin": 17643, "end": 18636, "name": "SWAP4", "source": 1 }, - { "begin": 17643, "end": 18636, "name": "SWAP3", "source": 1 }, - { "begin": 17643, "end": 18636, "name": "POP", "source": 1 }, - { "begin": 17643, "end": 18636, "name": "POP", "source": 1 }, - { "begin": 17643, "end": 18636, "name": "POP", "source": 1 }, + { "begin": 18224, "end": 18676, "name": "JUMPDEST", "source": 2 }, + { "begin": 18228, "end": 18249, "name": "POP", "source": 2 }, + { "begin": 17815, "end": 18682, "name": "POP", "source": 2 }, + { "begin": 17815, "end": 18682, "name": "POP", "source": 2 }, + { "begin": 17686, "end": 18682, "name": "SWAP4", "source": 2 }, + { "begin": 17686, "end": 18682, "name": "SWAP3", "source": 2 }, + { "begin": 17686, "end": 18682, "name": "POP", "source": 2 }, + { "begin": 17686, "end": 18682, "name": "POP", "source": 2 }, + { "begin": 17686, "end": 18682, "name": "POP", "source": 2 }, { - "begin": 17643, - "end": 18636, + "begin": 17686, + "end": 18682, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 18677, - "end": 19099, + "begin": 18723, + "end": 19147, "name": "tag", - "source": 1, + "source": 2, "value": "123" }, - { "begin": 18677, "end": 19099, "name": "JUMPDEST", "source": 1 }, + { "begin": 18723, "end": 19147, "name": "JUMPDEST", "source": 2 }, { - "begin": 18774, - "end": 18779, + "begin": 18821, + "end": 18826, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 18823, "end": 18826, "name": "DUP3", "source": 1 }, + { "begin": 18870, "end": 18873, "name": "DUP3", "source": 2 }, { - "begin": 18816, - "end": 18820, + "begin": 18863, + "end": 18867, "name": "PUSH", - "source": 1, + "source": 2, "value": "1F" }, - { "begin": 18808, "end": 18814, "name": "DUP4", "source": 1 }, - { "begin": 18804, "end": 18821, "name": "ADD", "source": 1 }, - { "begin": 18800, "end": 18827, "name": "SLT", "source": 1 }, + { "begin": 18855, "end": 18861, "name": "DUP4", "source": 2 }, + { "begin": 18851, "end": 18868, "name": "ADD", "source": 2 }, + { "begin": 18847, "end": 18874, "name": "SLT", "source": 2 }, { - "begin": 18790, - "end": 18912, + "begin": 18837, + "end": 18959, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "359" }, - { "begin": 18790, "end": 18912, "name": "JUMPI", "source": 1 }, + { "begin": 18837, "end": 18959, "name": "JUMPI", "source": 2 }, { - "begin": 18831, - "end": 18910, + "begin": 18878, + "end": 18957, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "360" }, { - "begin": 18831, - "end": 18910, + "begin": 18878, + "end": 18957, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "87" }, { - "begin": 18831, - "end": 18910, + "begin": 18878, + "end": 18957, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18831, - "end": 18910, + "begin": 18878, + "end": 18957, "name": "tag", - "source": 1, + "source": 2, "value": "360" }, - { "begin": 18831, "end": 18910, "name": "JUMPDEST", "source": 1 }, + { "begin": 18878, "end": 18957, "name": "JUMPDEST", "source": 2 }, { - "begin": 18790, - "end": 18912, + "begin": 18837, + "end": 18959, "name": "tag", - "source": 1, + "source": 2, "value": "359" }, - { "begin": 18790, "end": 18912, "name": "JUMPDEST", "source": 1 }, - { "begin": 18948, "end": 18954, "name": "DUP2", "source": 1 }, + { "begin": 18837, "end": 18959, "name": "JUMPDEST", "source": 2 }, + { "begin": 18995, "end": 19001, "name": "DUP2", "source": 2 }, { - "begin": 18935, - "end": 18955, + "begin": 18982, + "end": 19002, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 18973, - "end": 19093, + "begin": 19020, + "end": 19141, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "361" }, - { "begin": 19089, "end": 19092, "name": "DUP5", "source": 1 }, - { "begin": 19081, "end": 19087, "name": "DUP3", "source": 1 }, + { "begin": 19137, "end": 19140, "name": "DUP5", "source": 2 }, + { "begin": 19129, "end": 19135, "name": "DUP3", "source": 2 }, { - "begin": 19074, - "end": 19078, + "begin": 19122, + "end": 19126, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 19066, "end": 19072, "name": "DUP7", "source": 1 }, - { "begin": 19062, "end": 19079, "name": "ADD", "source": 1 }, + { "begin": 19114, "end": 19120, "name": "DUP7", "source": 2 }, + { "begin": 19110, "end": 19127, "name": "ADD", "source": 2 }, { - "begin": 18973, - "end": 19093, + "begin": 19020, + "end": 19141, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "122" }, { - "begin": 18973, - "end": 19093, + "begin": 19020, + "end": 19141, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 18973, - "end": 19093, + "begin": 19020, + "end": 19141, "name": "tag", - "source": 1, + "source": 2, "value": "361" }, - { "begin": 18973, "end": 19093, "name": "JUMPDEST", "source": 1 }, - { "begin": 18964, "end": 19093, "name": "SWAP2", "source": 1 }, - { "begin": 18964, "end": 19093, "name": "POP", "source": 1 }, - { "begin": 18780, "end": 19099, "name": "POP", "source": 1 }, - { "begin": 18677, "end": 19099, "name": "SWAP3", "source": 1 }, - { "begin": 18677, "end": 19099, "name": "SWAP2", "source": 1 }, - { "begin": 18677, "end": 19099, "name": "POP", "source": 1 }, - { "begin": 18677, "end": 19099, "name": "POP", "source": 1 }, + { "begin": 19020, "end": 19141, "name": "JUMPDEST", "source": 2 }, + { "begin": 19011, "end": 19141, "name": "SWAP2", "source": 2 }, + { "begin": 19011, "end": 19141, "name": "POP", "source": 2 }, + { "begin": 18827, "end": 19147, "name": "POP", "source": 2 }, + { "begin": 18723, "end": 19147, "name": "SWAP3", "source": 2 }, + { "begin": 18723, "end": 19147, "name": "SWAP2", "source": 2 }, + { "begin": 18723, "end": 19147, "name": "POP", "source": 2 }, + { "begin": 18723, "end": 19147, "name": "POP", "source": 2 }, { - "begin": 18677, - "end": 19099, + "begin": 18723, + "end": 19147, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 19105, - "end": 20344, + "begin": 19153, + "end": 20398, "name": "tag", - "source": 1, + "source": 2, "value": "37" }, - { "begin": 19105, "end": 20344, "name": "JUMPDEST", "source": 1 }, + { "begin": 19153, "end": 20398, "name": "JUMPDEST", "source": 2 }, { - "begin": 19268, - "end": 19274, + "begin": 19319, + "end": 19325, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 19276, "end": 19282, "name": "DUP1", "source": 1 }, + { "begin": 19327, "end": 19333, "name": "DUP1", "source": 2 }, { - "begin": 19284, - "end": 19290, + "begin": 19335, + "end": 19341, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 19292, "end": 19298, "name": "DUP1", "source": 1 }, + { "begin": 19343, "end": 19349, "name": "DUP1", "source": 2 }, { - "begin": 19341, - "end": 19344, + "begin": 19392, + "end": 19395, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 19329, "end": 19338, "name": "DUP6", "source": 1 }, - { "begin": 19320, "end": 19327, "name": "DUP8", "source": 1 }, - { "begin": 19316, "end": 19339, "name": "SUB", "source": 1 }, - { "begin": 19312, "end": 19345, "name": "SLT", "source": 1 }, - { "begin": 19309, "end": 19429, "name": "ISZERO", "source": 1 }, + { "begin": 19380, "end": 19389, "name": "DUP6", "source": 2 }, + { "begin": 19371, "end": 19378, "name": "DUP8", "source": 2 }, + { "begin": 19367, "end": 19390, "name": "SUB", "source": 2 }, + { "begin": 19363, "end": 19396, "name": "SLT", "source": 2 }, + { "begin": 19360, "end": 19480, "name": "ISZERO", "source": 2 }, { - "begin": 19309, - "end": 19429, + "begin": 19360, + "end": 19480, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "363" }, - { "begin": 19309, "end": 19429, "name": "JUMPI", "source": 1 }, + { "begin": 19360, "end": 19480, "name": "JUMPI", "source": 2 }, { - "begin": 19348, - "end": 19427, + "begin": 19399, + "end": 19478, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "364" }, { - "begin": 19348, - "end": 19427, + "begin": 19399, + "end": 19478, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "76" }, { - "begin": 19348, - "end": 19427, + "begin": 19399, + "end": 19478, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19348, - "end": 19427, + "begin": 19399, + "end": 19478, "name": "tag", - "source": 1, + "source": 2, "value": "364" }, - { "begin": 19348, "end": 19427, "name": "JUMPDEST", "source": 1 }, + { "begin": 19399, "end": 19478, "name": "JUMPDEST", "source": 2 }, { - "begin": 19309, - "end": 19429, + "begin": 19360, + "end": 19480, "name": "tag", - "source": 1, + "source": 2, "value": "363" }, - { "begin": 19309, "end": 19429, "name": "JUMPDEST", "source": 1 }, + { "begin": 19360, "end": 19480, "name": "JUMPDEST", "source": 2 }, { - "begin": 19496, - "end": 19497, + "begin": 19547, + "end": 19548, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 19485, "end": 19494, "name": "DUP6", "source": 1 }, - { "begin": 19481, "end": 19498, "name": "ADD", "source": 1 }, + { "begin": 19536, "end": 19545, "name": "DUP6", "source": 2 }, + { "begin": 19532, "end": 19549, "name": "ADD", "source": 2 }, { - "begin": 19468, - "end": 19499, + "begin": 19519, + "end": 19550, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 19526, - "end": 19544, + "begin": 19577, + "end": 19595, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 19518, "end": 19524, "name": "DUP2", "source": 1 }, - { "begin": 19515, "end": 19545, "name": "GT", "source": 1 }, - { "begin": 19512, "end": 19629, "name": "ISZERO", "source": 1 }, + { "begin": 19569, "end": 19575, "name": "DUP2", "source": 2 }, + { "begin": 19566, "end": 19596, "name": "GT", "source": 2 }, + { "begin": 19563, "end": 19680, "name": "ISZERO", "source": 2 }, { - "begin": 19512, - "end": 19629, + "begin": 19563, + "end": 19680, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "365" }, - { "begin": 19512, "end": 19629, "name": "JUMPI", "source": 1 }, + { "begin": 19563, "end": 19680, "name": "JUMPI", "source": 2 }, { - "begin": 19548, - "end": 19627, + "begin": 19599, + "end": 19678, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "366" }, { - "begin": 19548, - "end": 19627, + "begin": 19599, + "end": 19678, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 19548, - "end": 19627, + "begin": 19599, + "end": 19678, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19548, - "end": 19627, + "begin": 19599, + "end": 19678, "name": "tag", - "source": 1, + "source": 2, "value": "366" }, - { "begin": 19548, "end": 19627, "name": "JUMPDEST", "source": 1 }, + { "begin": 19599, "end": 19678, "name": "JUMPDEST", "source": 2 }, { - "begin": 19512, - "end": 19629, + "begin": 19563, + "end": 19680, "name": "tag", - "source": 1, + "source": 2, "value": "365" }, - { "begin": 19512, "end": 19629, "name": "JUMPDEST", "source": 1 }, + { "begin": 19563, "end": 19680, "name": "JUMPDEST", "source": 2 }, { - "begin": 19653, - "end": 19757, + "begin": 19704, + "end": 19809, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "367" }, - { "begin": 19749, "end": 19756, "name": "DUP8", "source": 1 }, - { "begin": 19740, "end": 19746, "name": "DUP3", "source": 1 }, - { "begin": 19729, "end": 19738, "name": "DUP9", "source": 1 }, - { "begin": 19725, "end": 19747, "name": "ADD", "source": 1 }, + { "begin": 19801, "end": 19808, "name": "DUP8", "source": 2 }, + { "begin": 19792, "end": 19798, "name": "DUP3", "source": 2 }, + { "begin": 19781, "end": 19790, "name": "DUP9", "source": 2 }, + { "begin": 19777, "end": 19799, "name": "ADD", "source": 2 }, { - "begin": 19653, - "end": 19757, + "begin": 19704, + "end": 19809, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "123" }, { - "begin": 19653, - "end": 19757, + "begin": 19704, + "end": 19809, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19653, - "end": 19757, + "begin": 19704, + "end": 19809, "name": "tag", - "source": 1, + "source": 2, "value": "367" }, - { "begin": 19653, "end": 19757, "name": "JUMPDEST", "source": 1 }, - { "begin": 19643, "end": 19757, "name": "SWAP5", "source": 1 }, - { "begin": 19643, "end": 19757, "name": "POP", "source": 1 }, - { "begin": 19439, "end": 19767, "name": "POP", "source": 1 }, + { "begin": 19704, "end": 19809, "name": "JUMPDEST", "source": 2 }, + { "begin": 19694, "end": 19809, "name": "SWAP5", "source": 2 }, + { "begin": 19694, "end": 19809, "name": "POP", "source": 2 }, + { "begin": 19490, "end": 19819, "name": "POP", "source": 2 }, { - "begin": 19806, - "end": 19808, + "begin": 19858, + "end": 19860, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, { - "begin": 19832, - "end": 19884, + "begin": 19884, + "end": 19936, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "368" }, - { "begin": 19876, "end": 19883, "name": "DUP8", "source": 1 }, - { "begin": 19867, "end": 19873, "name": "DUP3", "source": 1 }, - { "begin": 19856, "end": 19865, "name": "DUP9", "source": 1 }, - { "begin": 19852, "end": 19874, "name": "ADD", "source": 1 }, + { "begin": 19928, "end": 19935, "name": "DUP8", "source": 2 }, + { "begin": 19919, "end": 19925, "name": "DUP3", "source": 2 }, + { "begin": 19908, "end": 19917, "name": "DUP9", "source": 2 }, + { "begin": 19904, "end": 19926, "name": "ADD", "source": 2 }, { - "begin": 19832, - "end": 19884, + "begin": 19884, + "end": 19936, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "114" }, { - "begin": 19832, - "end": 19884, + "begin": 19884, + "end": 19936, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 19832, - "end": 19884, + "begin": 19884, + "end": 19936, "name": "tag", - "source": 1, + "source": 2, "value": "368" }, - { "begin": 19832, "end": 19884, "name": "JUMPDEST", "source": 1 }, - { "begin": 19822, "end": 19884, "name": "SWAP4", "source": 1 }, - { "begin": 19822, "end": 19884, "name": "POP", "source": 1 }, - { "begin": 19777, "end": 19894, "name": "POP", "source": 1 }, + { "begin": 19884, "end": 19936, "name": "JUMPDEST", "source": 2 }, + { "begin": 19874, "end": 19936, "name": "SWAP4", "source": 2 }, + { "begin": 19874, "end": 19936, "name": "POP", "source": 2 }, + { "begin": 19829, "end": 19946, "name": "POP", "source": 2 }, { - "begin": 19961, - "end": 19963, + "begin": 20013, + "end": 20015, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 19950, "end": 19959, "name": "DUP6", "source": 1 }, - { "begin": 19946, "end": 19964, "name": "ADD", "source": 1 }, + { "begin": 20002, "end": 20011, "name": "DUP6", "source": 2 }, + { "begin": 19998, "end": 20016, "name": "ADD", "source": 2 }, { - "begin": 19933, - "end": 19965, + "begin": 19985, + "end": 20017, "name": "CALLDATALOAD", - "source": 1 + "source": 2 }, { - "begin": 19992, - "end": 20010, + "begin": 20044, + "end": 20062, "name": "PUSH", - "source": 1, + "source": 2, "value": "FFFFFFFFFFFFFFFF" }, - { "begin": 19984, "end": 19990, "name": "DUP2", "source": 1 }, - { "begin": 19981, "end": 20011, "name": "GT", "source": 1 }, - { "begin": 19978, "end": 20095, "name": "ISZERO", "source": 1 }, + { "begin": 20036, "end": 20042, "name": "DUP2", "source": 2 }, + { "begin": 20033, "end": 20063, "name": "GT", "source": 2 }, + { "begin": 20030, "end": 20147, "name": "ISZERO", "source": 2 }, { - "begin": 19978, - "end": 20095, + "begin": 20030, + "end": 20147, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "369" }, - { "begin": 19978, "end": 20095, "name": "JUMPI", "source": 1 }, + { "begin": 20030, "end": 20147, "name": "JUMPI", "source": 2 }, { - "begin": 20014, - "end": 20093, + "begin": 20066, + "end": 20145, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "370" }, { - "begin": 20014, - "end": 20093, + "begin": 20066, + "end": 20145, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "77" }, { - "begin": 20014, - "end": 20093, + "begin": 20066, + "end": 20145, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20014, - "end": 20093, + "begin": 20066, + "end": 20145, "name": "tag", - "source": 1, + "source": 2, "value": "370" }, - { "begin": 20014, "end": 20093, "name": "JUMPDEST", "source": 1 }, + { "begin": 20066, "end": 20145, "name": "JUMPDEST", "source": 2 }, { - "begin": 19978, - "end": 20095, + "begin": 20030, + "end": 20147, "name": "tag", - "source": 1, + "source": 2, "value": "369" }, - { "begin": 19978, "end": 20095, "name": "JUMPDEST", "source": 1 }, + { "begin": 20030, "end": 20147, "name": "JUMPDEST", "source": 2 }, { - "begin": 20119, - "end": 20200, + "begin": 20171, + "end": 20254, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "371" }, - { "begin": 20192, "end": 20199, "name": "DUP8", "source": 1 }, - { "begin": 20183, "end": 20189, "name": "DUP3", "source": 1 }, - { "begin": 20172, "end": 20181, "name": "DUP9", "source": 1 }, - { "begin": 20168, "end": 20190, "name": "ADD", "source": 1 }, + { "begin": 20246, "end": 20253, "name": "DUP8", "source": 2 }, + { "begin": 20237, "end": 20243, "name": "DUP3", "source": 2 }, + { "begin": 20226, "end": 20235, "name": "DUP9", "source": 2 }, + { "begin": 20222, "end": 20244, "name": "ADD", "source": 2 }, { - "begin": 20119, - "end": 20200, + "begin": 20171, + "end": 20254, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "97" }, { - "begin": 20119, - "end": 20200, + "begin": 20171, + "end": 20254, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20119, - "end": 20200, + "begin": 20171, + "end": 20254, "name": "tag", - "source": 1, + "source": 2, "value": "371" }, - { "begin": 20119, "end": 20200, "name": "JUMPDEST", "source": 1 }, - { "begin": 20109, "end": 20200, "name": "SWAP3", "source": 1 }, - { "begin": 20109, "end": 20200, "name": "POP", "source": 1 }, - { "begin": 19904, "end": 20210, "name": "POP", "source": 1 }, + { "begin": 20171, "end": 20254, "name": "JUMPDEST", "source": 2 }, + { "begin": 20161, "end": 20254, "name": "SWAP3", "source": 2 }, + { "begin": 20161, "end": 20254, "name": "POP", "source": 2 }, + { "begin": 19956, "end": 20264, "name": "POP", "source": 2 }, { - "begin": 20249, - "end": 20251, + "begin": 20303, + "end": 20305, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, { - "begin": 20275, - "end": 20327, + "begin": 20329, + "end": 20381, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "372" }, - { "begin": 20319, "end": 20326, "name": "DUP8", "source": 1 }, - { "begin": 20310, "end": 20316, "name": "DUP3", "source": 1 }, - { "begin": 20299, "end": 20308, "name": "DUP9", "source": 1 }, - { "begin": 20295, "end": 20317, "name": "ADD", "source": 1 }, + { "begin": 20373, "end": 20380, "name": "DUP8", "source": 2 }, + { "begin": 20364, "end": 20370, "name": "DUP3", "source": 2 }, + { "begin": 20353, "end": 20362, "name": "DUP9", "source": 2 }, + { "begin": 20349, "end": 20371, "name": "ADD", "source": 2 }, { - "begin": 20275, - "end": 20327, + "begin": 20329, + "end": 20381, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "103" }, { - "begin": 20275, - "end": 20327, + "begin": 20329, + "end": 20381, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20275, - "end": 20327, + "begin": 20329, + "end": 20381, "name": "tag", - "source": 1, + "source": 2, "value": "372" }, - { "begin": 20275, "end": 20327, "name": "JUMPDEST", "source": 1 }, - { "begin": 20265, "end": 20327, "name": "SWAP2", "source": 1 }, - { "begin": 20265, "end": 20327, "name": "POP", "source": 1 }, - { "begin": 20220, "end": 20337, "name": "POP", "source": 1 }, - { "begin": 19105, "end": 20344, "name": "SWAP3", "source": 1 }, - { "begin": 19105, "end": 20344, "name": "SWAP6", "source": 1 }, - { "begin": 19105, "end": 20344, "name": "SWAP2", "source": 1 }, - { "begin": 19105, "end": 20344, "name": "SWAP5", "source": 1 }, - { "begin": 19105, "end": 20344, "name": "POP", "source": 1 }, - { "begin": 19105, "end": 20344, "name": "SWAP3", "source": 1 }, - { "begin": 19105, "end": 20344, "name": "POP", "source": 1 }, - { - "begin": 19105, - "end": 20344, - "name": "JUMP", - "source": 1, + { "begin": 20329, "end": 20381, "name": "JUMPDEST", "source": 2 }, + { "begin": 20319, "end": 20381, "name": "SWAP2", "source": 2 }, + { "begin": 20319, "end": 20381, "name": "POP", "source": 2 }, + { "begin": 20274, "end": 20391, "name": "POP", "source": 2 }, + { "begin": 19153, "end": 20398, "name": "SWAP3", "source": 2 }, + { "begin": 19153, "end": 20398, "name": "SWAP6", "source": 2 }, + { "begin": 19153, "end": 20398, "name": "SWAP2", "source": 2 }, + { "begin": 19153, "end": 20398, "name": "SWAP5", "source": 2 }, + { "begin": 19153, "end": 20398, "name": "POP", "source": 2 }, + { "begin": 19153, "end": 20398, "name": "SWAP3", "source": 2 }, + { "begin": 19153, "end": 20398, "name": "POP", "source": 2 }, + { + "begin": 19153, + "end": 20398, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 20350, - "end": 20452, + "begin": 20404, + "end": 20506, "name": "tag", - "source": 1, + "source": 2, "value": "124" }, - { "begin": 20350, "end": 20452, "name": "JUMPDEST", "source": 1 }, + { "begin": 20404, "end": 20506, "name": "JUMPDEST", "source": 2 }, { - "begin": 20423, - "end": 20445, + "begin": 20477, + "end": 20499, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "374" }, - { "begin": 20439, "end": 20444, "name": "DUP2", "source": 1 }, + { "begin": 20493, "end": 20498, "name": "DUP2", "source": 2 }, { - "begin": 20423, - "end": 20445, + "begin": 20477, + "end": 20499, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "84" }, { - "begin": 20423, - "end": 20445, + "begin": 20477, + "end": 20499, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 20423, - "end": 20445, + "begin": 20477, + "end": 20499, "name": "tag", - "source": 1, + "source": 2, "value": "374" }, - { "begin": 20423, "end": 20445, "name": "JUMPDEST", "source": 1 }, - { "begin": 20418, "end": 20421, "name": "DUP3", "source": 1 }, - { "begin": 20411, "end": 20446, "name": "MSTORE", "source": 1 }, - { "begin": 20350, "end": 20452, "name": "POP", "source": 1 }, - { "begin": 20350, "end": 20452, "name": "POP", "source": 1 }, + { "begin": 20477, "end": 20499, "name": "JUMPDEST", "source": 2 }, + { "begin": 20472, "end": 20475, "name": "DUP3", "source": 2 }, + { "begin": 20465, "end": 20500, "name": "MSTORE", "source": 2 }, + { "begin": 20404, "end": 20506, "name": "POP", "source": 2 }, + { "begin": 20404, "end": 20506, "name": "POP", "source": 2 }, { - "begin": 20350, - "end": 20452, + "begin": 20404, + "end": 20506, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 20458, - "end": 20581, + "begin": 20512, + "end": 20635, "name": "tag", - "source": 1, + "source": 2, "value": "125" }, - { "begin": 20458, "end": 20581, "name": "JUMPDEST", "source": 1 }, + { "begin": 20512, "end": 20635, "name": "JUMPDEST", "source": 2 }, { - "begin": 20534, - "end": 20540, + "begin": 20588, + "end": 20594, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 20568, "end": 20573, "name": "DUP2", "source": 1 }, - { "begin": 20562, "end": 20574, "name": "MLOAD", "source": 1 }, - { "begin": 20552, "end": 20574, "name": "SWAP1", "source": 1 }, - { "begin": 20552, "end": 20574, "name": "POP", "source": 1 }, - { "begin": 20458, "end": 20581, "name": "SWAP2", "source": 1 }, - { "begin": 20458, "end": 20581, "name": "SWAP1", "source": 1 }, - { "begin": 20458, "end": 20581, "name": "POP", "source": 1 }, + { "begin": 20622, "end": 20627, "name": "DUP2", "source": 2 }, + { "begin": 20616, "end": 20628, "name": "MLOAD", "source": 2 }, + { "begin": 20606, "end": 20628, "name": "SWAP1", "source": 2 }, + { "begin": 20606, "end": 20628, "name": "POP", "source": 2 }, + { "begin": 20512, "end": 20635, "name": "SWAP2", "source": 2 }, + { "begin": 20512, "end": 20635, "name": "SWAP1", "source": 2 }, + { "begin": 20512, "end": 20635, "name": "POP", "source": 2 }, { - "begin": 20458, - "end": 20581, + "begin": 20512, + "end": 20635, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 20587, - "end": 20770, + "begin": 20641, + "end": 20824, "name": "tag", - "source": 1, + "source": 2, "value": "126" }, - { "begin": 20587, "end": 20770, "name": "JUMPDEST", "source": 1 }, + { "begin": 20641, "end": 20824, "name": "JUMPDEST", "source": 2 }, { - "begin": 20685, - "end": 20696, + "begin": 20739, + "end": 20750, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 20719, "end": 20725, "name": "DUP3", "source": 1 }, - { "begin": 20714, "end": 20717, "name": "DUP3", "source": 1 }, - { "begin": 20707, "end": 20726, "name": "MSTORE", "source": 1 }, + { "begin": 20773, "end": 20779, "name": "DUP3", "source": 2 }, + { "begin": 20768, "end": 20771, "name": "DUP3", "source": 2 }, + { "begin": 20761, "end": 20780, "name": "MSTORE", "source": 2 }, { - "begin": 20759, - "end": 20763, + "begin": 20813, + "end": 20817, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 20754, "end": 20757, "name": "DUP3", "source": 1 }, - { "begin": 20750, "end": 20764, "name": "ADD", "source": 1 }, - { "begin": 20735, "end": 20764, "name": "SWAP1", "source": 1 }, - { "begin": 20735, "end": 20764, "name": "POP", "source": 1 }, - { "begin": 20587, "end": 20770, "name": "SWAP3", "source": 1 }, - { "begin": 20587, "end": 20770, "name": "SWAP2", "source": 1 }, - { "begin": 20587, "end": 20770, "name": "POP", "source": 1 }, - { "begin": 20587, "end": 20770, "name": "POP", "source": 1 }, + { "begin": 20808, "end": 20811, "name": "DUP3", "source": 2 }, + { "begin": 20804, "end": 20818, "name": "ADD", "source": 2 }, + { "begin": 20789, "end": 20818, "name": "SWAP1", "source": 2 }, + { "begin": 20789, "end": 20818, "name": "POP", "source": 2 }, + { "begin": 20641, "end": 20824, "name": "SWAP3", "source": 2 }, + { "begin": 20641, "end": 20824, "name": "SWAP2", "source": 2 }, + { "begin": 20641, "end": 20824, "name": "POP", "source": 2 }, + { "begin": 20641, "end": 20824, "name": "POP", "source": 2 }, { - "begin": 20587, - "end": 20770, + "begin": 20641, + "end": 20824, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 20776, - "end": 20917, + "begin": 20830, + "end": 20971, "name": "tag", - "source": 1, + "source": 2, "value": "127" }, - { "begin": 20776, "end": 20917, "name": "JUMPDEST", "source": 1 }, + { "begin": 20830, "end": 20971, "name": "JUMPDEST", "source": 2 }, { - "begin": 20852, - "end": 20856, + "begin": 20906, + "end": 20910, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 20875, "end": 20878, "name": "DUP2", "source": 1 }, - { "begin": 20867, "end": 20878, "name": "SWAP1", "source": 1 }, - { "begin": 20867, "end": 20878, "name": "POP", "source": 1 }, + { "begin": 20929, "end": 20932, "name": "DUP2", "source": 2 }, + { "begin": 20921, "end": 20932, "name": "SWAP1", "source": 2 }, + { "begin": 20921, "end": 20932, "name": "POP", "source": 2 }, { - "begin": 20905, - "end": 20909, + "begin": 20959, + "end": 20963, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 20900, "end": 20903, "name": "DUP3", "source": 1 }, - { "begin": 20896, "end": 20910, "name": "ADD", "source": 1 }, - { "begin": 20888, "end": 20910, "name": "SWAP1", "source": 1 }, - { "begin": 20888, "end": 20910, "name": "POP", "source": 1 }, - { "begin": 20776, "end": 20917, "name": "SWAP2", "source": 1 }, - { "begin": 20776, "end": 20917, "name": "SWAP1", "source": 1 }, - { "begin": 20776, "end": 20917, "name": "POP", "source": 1 }, + { "begin": 20954, "end": 20957, "name": "DUP3", "source": 2 }, + { "begin": 20950, "end": 20964, "name": "ADD", "source": 2 }, + { "begin": 20942, "end": 20964, "name": "SWAP1", "source": 2 }, + { "begin": 20942, "end": 20964, "name": "POP", "source": 2 }, + { "begin": 20830, "end": 20971, "name": "SWAP2", "source": 2 }, + { "begin": 20830, "end": 20971, "name": "SWAP1", "source": 2 }, + { "begin": 20830, "end": 20971, "name": "POP", "source": 2 }, { - "begin": 20776, - "end": 20917, + "begin": 20830, + "end": 20971, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 20923, - "end": 21021, + "begin": 20977, + "end": 21075, "name": "tag", - "source": 1, + "source": 2, "value": "128" }, - { "begin": 20923, "end": 21021, "name": "JUMPDEST", "source": 1 }, + { "begin": 20977, "end": 21075, "name": "JUMPDEST", "source": 2 }, { - "begin": 20974, - "end": 20980, + "begin": 21028, + "end": 21034, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 21008, "end": 21013, "name": "DUP2", "source": 1 }, - { "begin": 21002, "end": 21014, "name": "MLOAD", "source": 1 }, - { "begin": 20992, "end": 21014, "name": "SWAP1", "source": 1 }, - { "begin": 20992, "end": 21014, "name": "POP", "source": 1 }, - { "begin": 20923, "end": 21021, "name": "SWAP2", "source": 1 }, - { "begin": 20923, "end": 21021, "name": "SWAP1", "source": 1 }, - { "begin": 20923, "end": 21021, "name": "POP", "source": 1 }, + { "begin": 21062, "end": 21067, "name": "DUP2", "source": 2 }, + { "begin": 21056, "end": 21068, "name": "MLOAD", "source": 2 }, + { "begin": 21046, "end": 21068, "name": "SWAP1", "source": 2 }, + { "begin": 21046, "end": 21068, "name": "POP", "source": 2 }, + { "begin": 20977, "end": 21075, "name": "SWAP2", "source": 2 }, + { "begin": 20977, "end": 21075, "name": "SWAP1", "source": 2 }, + { "begin": 20977, "end": 21075, "name": "POP", "source": 2 }, { - "begin": 20923, - "end": 21021, + "begin": 20977, + "end": 21075, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 21027, - "end": 21185, + "begin": 21081, + "end": 21239, "name": "tag", - "source": 1, + "source": 2, "value": "129" }, - { "begin": 21027, "end": 21185, "name": "JUMPDEST", "source": 1 }, + { "begin": 21081, "end": 21239, "name": "JUMPDEST", "source": 2 }, { - "begin": 21100, - "end": 21111, + "begin": 21154, + "end": 21165, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 21134, "end": 21140, "name": "DUP3", "source": 1 }, - { "begin": 21129, "end": 21132, "name": "DUP3", "source": 1 }, - { "begin": 21122, "end": 21141, "name": "MSTORE", "source": 1 }, + { "begin": 21188, "end": 21194, "name": "DUP3", "source": 2 }, + { "begin": 21183, "end": 21186, "name": "DUP3", "source": 2 }, + { "begin": 21176, "end": 21195, "name": "MSTORE", "source": 2 }, { - "begin": 21174, - "end": 21178, + "begin": 21228, + "end": 21232, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 21169, "end": 21172, "name": "DUP3", "source": 1 }, - { "begin": 21165, "end": 21179, "name": "ADD", "source": 1 }, - { "begin": 21150, "end": 21179, "name": "SWAP1", "source": 1 }, - { "begin": 21150, "end": 21179, "name": "POP", "source": 1 }, - { "begin": 21027, "end": 21185, "name": "SWAP3", "source": 1 }, - { "begin": 21027, "end": 21185, "name": "SWAP2", "source": 1 }, - { "begin": 21027, "end": 21185, "name": "POP", "source": 1 }, - { "begin": 21027, "end": 21185, "name": "POP", "source": 1 }, + { "begin": 21223, "end": 21226, "name": "DUP3", "source": 2 }, + { "begin": 21219, "end": 21233, "name": "ADD", "source": 2 }, + { "begin": 21204, "end": 21233, "name": "SWAP1", "source": 2 }, + { "begin": 21204, "end": 21233, "name": "POP", "source": 2 }, + { "begin": 21081, "end": 21239, "name": "SWAP3", "source": 2 }, + { "begin": 21081, "end": 21239, "name": "SWAP2", "source": 2 }, + { "begin": 21081, "end": 21239, "name": "POP", "source": 2 }, + { "begin": 21081, "end": 21239, "name": "POP", "source": 2 }, { - "begin": 21027, - "end": 21185, + "begin": 21081, + "end": 21239, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 21191, - "end": 21498, + "begin": 21245, + "end": 21552, "name": "tag", - "source": 1, + "source": 2, "value": "130" }, - { "begin": 21191, "end": 21498, "name": "JUMPDEST", "source": 1 }, + { "begin": 21245, "end": 21552, "name": "JUMPDEST", "source": 2 }, { - "begin": 21259, - "end": 21260, + "begin": 21313, + "end": 21314, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 21269, - "end": 21382, + "begin": 21323, + "end": 21436, "name": "tag", - "source": 1, + "source": 2, "value": "381" }, - { "begin": 21269, "end": 21382, "name": "JUMPDEST", "source": 1 }, - { "begin": 21283, "end": 21289, "name": "DUP4", "source": 1 }, - { "begin": 21280, "end": 21281, "name": "DUP2", "source": 1 }, - { "begin": 21277, "end": 21290, "name": "LT", "source": 1 }, - { "begin": 21269, "end": 21382, "name": "ISZERO", "source": 1 }, + { "begin": 21323, "end": 21436, "name": "JUMPDEST", "source": 2 }, + { "begin": 21337, "end": 21343, "name": "DUP4", "source": 2 }, + { "begin": 21334, "end": 21335, "name": "DUP2", "source": 2 }, + { "begin": 21331, "end": 21344, "name": "LT", "source": 2 }, + { "begin": 21323, "end": 21436, "name": "ISZERO", "source": 2 }, { - "begin": 21269, - "end": 21382, + "begin": 21323, + "end": 21436, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "383" }, - { "begin": 21269, "end": 21382, "name": "JUMPI", "source": 1 }, - { "begin": 21368, "end": 21369, "name": "DUP1", "source": 1 }, - { "begin": 21363, "end": 21366, "name": "DUP3", "source": 1 }, - { "begin": 21359, "end": 21370, "name": "ADD", "source": 1 }, - { "begin": 21353, "end": 21371, "name": "MLOAD", "source": 1 }, - { "begin": 21349, "end": 21350, "name": "DUP2", "source": 1 }, - { "begin": 21344, "end": 21347, "name": "DUP5", "source": 1 }, - { "begin": 21340, "end": 21351, "name": "ADD", "source": 1 }, - { "begin": 21333, "end": 21372, "name": "MSTORE", "source": 1 }, + { "begin": 21323, "end": 21436, "name": "JUMPI", "source": 2 }, + { "begin": 21422, "end": 21423, "name": "DUP1", "source": 2 }, + { "begin": 21417, "end": 21420, "name": "DUP3", "source": 2 }, + { "begin": 21413, "end": 21424, "name": "ADD", "source": 2 }, + { "begin": 21407, "end": 21425, "name": "MLOAD", "source": 2 }, + { "begin": 21403, "end": 21404, "name": "DUP2", "source": 2 }, + { "begin": 21398, "end": 21401, "name": "DUP5", "source": 2 }, + { "begin": 21394, "end": 21405, "name": "ADD", "source": 2 }, + { "begin": 21387, "end": 21426, "name": "MSTORE", "source": 2 }, { - "begin": 21305, - "end": 21307, + "begin": 21359, + "end": 21361, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 21302, "end": 21303, "name": "DUP2", "source": 1 }, - { "begin": 21298, "end": 21308, "name": "ADD", "source": 1 }, - { "begin": 21293, "end": 21308, "name": "SWAP1", "source": 1 }, - { "begin": 21293, "end": 21308, "name": "POP", "source": 1 }, + { "begin": 21356, "end": 21357, "name": "DUP2", "source": 2 }, + { "begin": 21352, "end": 21362, "name": "ADD", "source": 2 }, + { "begin": 21347, "end": 21362, "name": "SWAP1", "source": 2 }, + { "begin": 21347, "end": 21362, "name": "POP", "source": 2 }, { - "begin": 21269, - "end": 21382, + "begin": 21323, + "end": 21436, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "381" }, - { "begin": 21269, "end": 21382, "name": "JUMP", "source": 1 }, + { "begin": 21323, "end": 21436, "name": "JUMP", "source": 2 }, { - "begin": 21269, - "end": 21382, + "begin": 21323, + "end": 21436, "name": "tag", - "source": 1, + "source": 2, "value": "383" }, - { "begin": 21269, "end": 21382, "name": "JUMPDEST", "source": 1 }, - { "begin": 21400, "end": 21406, "name": "DUP4", "source": 1 }, - { "begin": 21397, "end": 21398, "name": "DUP2", "source": 1 }, - { "begin": 21394, "end": 21407, "name": "GT", "source": 1 }, - { "begin": 21391, "end": 21492, "name": "ISZERO", "source": 1 }, + { "begin": 21323, "end": 21436, "name": "JUMPDEST", "source": 2 }, + { "begin": 21454, "end": 21460, "name": "DUP4", "source": 2 }, + { "begin": 21451, "end": 21452, "name": "DUP2", "source": 2 }, + { "begin": 21448, "end": 21461, "name": "GT", "source": 2 }, + { "begin": 21445, "end": 21546, "name": "ISZERO", "source": 2 }, { - "begin": 21391, - "end": 21492, + "begin": 21445, + "end": 21546, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "384" }, - { "begin": 21391, "end": 21492, "name": "JUMPI", "source": 1 }, + { "begin": 21445, "end": 21546, "name": "JUMPI", "source": 2 }, { - "begin": 21480, - "end": 21481, + "begin": 21534, + "end": 21535, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 21471, "end": 21477, "name": "DUP5", "source": 1 }, - { "begin": 21466, "end": 21469, "name": "DUP5", "source": 1 }, - { "begin": 21462, "end": 21478, "name": "ADD", "source": 1 }, - { "begin": 21455, "end": 21482, "name": "MSTORE", "source": 1 }, + { "begin": 21525, "end": 21531, "name": "DUP5", "source": 2 }, + { "begin": 21520, "end": 21523, "name": "DUP5", "source": 2 }, + { "begin": 21516, "end": 21532, "name": "ADD", "source": 2 }, + { "begin": 21509, "end": 21536, "name": "MSTORE", "source": 2 }, { - "begin": 21391, - "end": 21492, + "begin": 21445, + "end": 21546, "name": "tag", - "source": 1, + "source": 2, "value": "384" }, - { "begin": 21391, "end": 21492, "name": "JUMPDEST", "source": 1 }, - { "begin": 21240, "end": 21498, "name": "POP", "source": 1 }, - { "begin": 21191, "end": 21498, "name": "POP", "source": 1 }, - { "begin": 21191, "end": 21498, "name": "POP", "source": 1 }, - { "begin": 21191, "end": 21498, "name": "POP", "source": 1 }, + { "begin": 21445, "end": 21546, "name": "JUMPDEST", "source": 2 }, + { "begin": 21294, "end": 21552, "name": "POP", "source": 2 }, + { "begin": 21245, "end": 21552, "name": "POP", "source": 2 }, + { "begin": 21245, "end": 21552, "name": "POP", "source": 2 }, + { "begin": 21245, "end": 21552, "name": "POP", "source": 2 }, { - "begin": 21191, - "end": 21498, + "begin": 21245, + "end": 21552, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 21504, - "end": 21844, + "begin": 21558, + "end": 21898, "name": "tag", - "source": 1, + "source": 2, "value": "131" }, - { "begin": 21504, "end": 21844, "name": "JUMPDEST", "source": 1 }, + { "begin": 21558, "end": 21898, "name": "JUMPDEST", "source": 2 }, { - "begin": 21580, - "end": 21583, + "begin": 21634, + "end": 21637, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 21608, - "end": 21646, + "begin": 21662, + "end": 21700, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "386" }, - { "begin": 21640, "end": 21645, "name": "DUP3", "source": 1 }, + { "begin": 21694, "end": 21699, "name": "DUP3", "source": 2 }, { - "begin": 21608, - "end": 21646, + "begin": 21662, + "end": 21700, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "128" }, { - "begin": 21608, - "end": 21646, + "begin": 21662, + "end": 21700, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 21608, - "end": 21646, + "begin": 21662, + "end": 21700, "name": "tag", - "source": 1, + "source": 2, "value": "386" }, - { "begin": 21608, "end": 21646, "name": "JUMPDEST", "source": 1 }, + { "begin": 21662, "end": 21700, "name": "JUMPDEST", "source": 2 }, { - "begin": 21662, - "end": 21722, + "begin": 21716, + "end": 21776, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "387" }, - { "begin": 21715, "end": 21721, "name": "DUP2", "source": 1 }, - { "begin": 21710, "end": 21713, "name": "DUP6", "source": 1 }, + { "begin": 21769, "end": 21775, "name": "DUP2", "source": 2 }, + { "begin": 21764, "end": 21767, "name": "DUP6", "source": 2 }, { - "begin": 21662, - "end": 21722, + "begin": 21716, + "end": 21776, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "129" }, { - "begin": 21662, - "end": 21722, + "begin": 21716, + "end": 21776, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 21662, - "end": 21722, + "begin": 21716, + "end": 21776, "name": "tag", - "source": 1, + "source": 2, "value": "387" }, - { "begin": 21662, "end": 21722, "name": "JUMPDEST", "source": 1 }, - { "begin": 21655, "end": 21722, "name": "SWAP4", "source": 1 }, - { "begin": 21655, "end": 21722, "name": "POP", "source": 1 }, + { "begin": 21716, "end": 21776, "name": "JUMPDEST", "source": 2 }, + { "begin": 21709, "end": 21776, "name": "SWAP4", "source": 2 }, + { "begin": 21709, "end": 21776, "name": "POP", "source": 2 }, { - "begin": 21731, - "end": 21783, + "begin": 21785, + "end": 21837, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "388" }, - { "begin": 21776, "end": 21782, "name": "DUP2", "source": 1 }, - { "begin": 21771, "end": 21774, "name": "DUP6", "source": 1 }, + { "begin": 21830, "end": 21836, "name": "DUP2", "source": 2 }, + { "begin": 21825, "end": 21828, "name": "DUP6", "source": 2 }, { - "begin": 21764, - "end": 21768, + "begin": 21818, + "end": 21822, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 21757, "end": 21762, "name": "DUP7", "source": 1 }, - { "begin": 21753, "end": 21769, "name": "ADD", "source": 1 }, + { "begin": 21811, "end": 21816, "name": "DUP7", "source": 2 }, + { "begin": 21807, "end": 21823, "name": "ADD", "source": 2 }, { - "begin": 21731, - "end": 21783, + "begin": 21785, + "end": 21837, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "130" }, { - "begin": 21731, - "end": 21783, + "begin": 21785, + "end": 21837, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 21731, - "end": 21783, + "begin": 21785, + "end": 21837, "name": "tag", - "source": 1, + "source": 2, "value": "388" }, - { "begin": 21731, "end": 21783, "name": "JUMPDEST", "source": 1 }, + { "begin": 21785, "end": 21837, "name": "JUMPDEST", "source": 2 }, { - "begin": 21808, - "end": 21837, + "begin": 21862, + "end": 21891, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "389" }, - { "begin": 21830, "end": 21836, "name": "DUP2", "source": 1 }, + { "begin": 21884, "end": 21890, "name": "DUP2", "source": 2 }, { - "begin": 21808, - "end": 21837, + "begin": 21862, + "end": 21891, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "79" }, { - "begin": 21808, - "end": 21837, + "begin": 21862, + "end": 21891, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 21808, - "end": 21837, + "begin": 21862, + "end": 21891, "name": "tag", - "source": 1, + "source": 2, "value": "389" }, - { "begin": 21808, "end": 21837, "name": "JUMPDEST", "source": 1 }, - { "begin": 21803, "end": 21806, "name": "DUP5", "source": 1 }, - { "begin": 21799, "end": 21838, "name": "ADD", "source": 1 }, - { "begin": 21792, "end": 21838, "name": "SWAP2", "source": 1 }, - { "begin": 21792, "end": 21838, "name": "POP", "source": 1 }, - { "begin": 21584, "end": 21844, "name": "POP", "source": 1 }, - { "begin": 21504, "end": 21844, "name": "SWAP3", "source": 1 }, - { "begin": 21504, "end": 21844, "name": "SWAP2", "source": 1 }, - { "begin": 21504, "end": 21844, "name": "POP", "source": 1 }, - { "begin": 21504, "end": 21844, "name": "POP", "source": 1 }, - { - "begin": 21504, - "end": 21844, - "name": "JUMP", - "source": 1, + { "begin": 21862, "end": 21891, "name": "JUMPDEST", "source": 2 }, + { "begin": 21857, "end": 21860, "name": "DUP5", "source": 2 }, + { "begin": 21853, "end": 21892, "name": "ADD", "source": 2 }, + { "begin": 21846, "end": 21892, "name": "SWAP2", "source": 2 }, + { "begin": 21846, "end": 21892, "name": "POP", "source": 2 }, + { "begin": 21638, "end": 21898, "name": "POP", "source": 2 }, + { "begin": 21558, "end": 21898, "name": "SWAP3", "source": 2 }, + { "begin": 21558, "end": 21898, "name": "SWAP2", "source": 2 }, + { "begin": 21558, "end": 21898, "name": "POP", "source": 2 }, + { "begin": 21558, "end": 21898, "name": "POP", "source": 2 }, + { + "begin": 21558, + "end": 21898, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 21850, - "end": 22042, + "begin": 21904, + "end": 22096, "name": "tag", - "source": 1, + "source": 2, "value": "132" }, - { "begin": 21850, "end": 22042, "name": "JUMPDEST", "source": 1 }, + { "begin": 21904, "end": 22096, "name": "JUMPDEST", "source": 2 }, { - "begin": 21937, - "end": 21947, + "begin": 21991, + "end": 22001, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 21972, - "end": 22036, + "begin": 22026, + "end": 22090, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "391" }, - { "begin": 22032, "end": 22035, "name": "DUP4", "source": 1 }, - { "begin": 22024, "end": 22030, "name": "DUP4", "source": 1 }, + { "begin": 22086, "end": 22089, "name": "DUP4", "source": 2 }, + { "begin": 22078, "end": 22084, "name": "DUP4", "source": 2 }, { - "begin": 21972, - "end": 22036, + "begin": 22026, + "end": 22090, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "131" }, { - "begin": 21972, - "end": 22036, + "begin": 22026, + "end": 22090, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 21972, - "end": 22036, + "begin": 22026, + "end": 22090, "name": "tag", - "source": 1, + "source": 2, "value": "391" }, - { "begin": 21972, "end": 22036, "name": "JUMPDEST", "source": 1 }, - { "begin": 21958, "end": 22036, "name": "SWAP1", "source": 1 }, - { "begin": 21958, "end": 22036, "name": "POP", "source": 1 }, - { "begin": 21850, "end": 22042, "name": "SWAP3", "source": 1 }, - { "begin": 21850, "end": 22042, "name": "SWAP2", "source": 1 }, - { "begin": 21850, "end": 22042, "name": "POP", "source": 1 }, - { "begin": 21850, "end": 22042, "name": "POP", "source": 1 }, + { "begin": 22026, "end": 22090, "name": "JUMPDEST", "source": 2 }, + { "begin": 22012, "end": 22090, "name": "SWAP1", "source": 2 }, + { "begin": 22012, "end": 22090, "name": "POP", "source": 2 }, + { "begin": 21904, "end": 22096, "name": "SWAP3", "source": 2 }, + { "begin": 21904, "end": 22096, "name": "SWAP2", "source": 2 }, + { "begin": 21904, "end": 22096, "name": "POP", "source": 2 }, + { "begin": 21904, "end": 22096, "name": "POP", "source": 2 }, { - "begin": 21850, - "end": 22042, + "begin": 21904, + "end": 22096, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 22048, - "end": 22170, + "begin": 22102, + "end": 22224, "name": "tag", - "source": 1, + "source": 2, "value": "133" }, - { "begin": 22048, "end": 22170, "name": "JUMPDEST", "source": 1 }, + { "begin": 22102, "end": 22224, "name": "JUMPDEST", "source": 2 }, { - "begin": 22127, - "end": 22131, + "begin": 22181, + "end": 22185, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 22159, - "end": 22163, + "begin": 22213, + "end": 22217, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 22154, "end": 22157, "name": "DUP3", "source": 1 }, - { "begin": 22150, "end": 22164, "name": "ADD", "source": 1 }, - { "begin": 22142, "end": 22164, "name": "SWAP1", "source": 1 }, - { "begin": 22142, "end": 22164, "name": "POP", "source": 1 }, - { "begin": 22048, "end": 22170, "name": "SWAP2", "source": 1 }, - { "begin": 22048, "end": 22170, "name": "SWAP1", "source": 1 }, - { "begin": 22048, "end": 22170, "name": "POP", "source": 1 }, + { "begin": 22208, "end": 22211, "name": "DUP3", "source": 2 }, + { "begin": 22204, "end": 22218, "name": "ADD", "source": 2 }, + { "begin": 22196, "end": 22218, "name": "SWAP1", "source": 2 }, + { "begin": 22196, "end": 22218, "name": "POP", "source": 2 }, + { "begin": 22102, "end": 22224, "name": "SWAP2", "source": 2 }, + { "begin": 22102, "end": 22224, "name": "SWAP1", "source": 2 }, + { "begin": 22102, "end": 22224, "name": "POP", "source": 2 }, { - "begin": 22048, - "end": 22170, + "begin": 22102, + "end": 22224, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 22202, - "end": 23165, + "begin": 22256, + "end": 23219, "name": "tag", - "source": 1, + "source": 2, "value": "134" }, - { "begin": 22202, "end": 23165, "name": "JUMPDEST", "source": 1 }, + { "begin": 22256, "end": 23219, "name": "JUMPDEST", "source": 2 }, { - "begin": 22329, - "end": 22332, + "begin": 22383, + "end": 22386, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 22358, - "end": 22421, + "begin": 22412, + "end": 22475, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "394" }, - { "begin": 22415, "end": 22420, "name": "DUP3", "source": 1 }, + { "begin": 22469, "end": 22474, "name": "DUP3", "source": 2 }, { - "begin": 22358, - "end": 22421, + "begin": 22412, + "end": 22475, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "125" }, { - "begin": 22358, - "end": 22421, + "begin": 22412, + "end": 22475, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 22358, - "end": 22421, + "begin": 22412, + "end": 22475, "name": "tag", - "source": 1, + "source": 2, "value": "394" }, - { "begin": 22358, "end": 22421, "name": "JUMPDEST", "source": 1 }, + { "begin": 22412, "end": 22475, "name": "JUMPDEST", "source": 2 }, { - "begin": 22437, - "end": 22522, + "begin": 22491, + "end": 22576, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "395" }, - { "begin": 22515, "end": 22521, "name": "DUP2", "source": 1 }, - { "begin": 22510, "end": 22513, "name": "DUP6", "source": 1 }, + { "begin": 22569, "end": 22575, "name": "DUP2", "source": 2 }, + { "begin": 22564, "end": 22567, "name": "DUP6", "source": 2 }, { - "begin": 22437, - "end": 22522, + "begin": 22491, + "end": 22576, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "126" }, { - "begin": 22437, - "end": 22522, + "begin": 22491, + "end": 22576, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 22437, - "end": 22522, + "begin": 22491, + "end": 22576, "name": "tag", - "source": 1, + "source": 2, "value": "395" }, - { "begin": 22437, "end": 22522, "name": "JUMPDEST", "source": 1 }, - { "begin": 22430, "end": 22522, "name": "SWAP4", "source": 1 }, - { "begin": 22430, "end": 22522, "name": "POP", "source": 1 }, - { "begin": 22548, "end": 22551, "name": "DUP4", "source": 1 }, + { "begin": 22491, "end": 22576, "name": "JUMPDEST", "source": 2 }, + { "begin": 22484, "end": 22576, "name": "SWAP4", "source": 2 }, + { "begin": 22484, "end": 22576, "name": "POP", "source": 2 }, + { "begin": 22602, "end": 22605, "name": "DUP4", "source": 2 }, { - "begin": 22593, - "end": 22597, + "begin": 22647, + "end": 22651, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 22585, "end": 22591, "name": "DUP3", "source": 1 }, - { "begin": 22581, "end": 22598, "name": "MUL", "source": 1 }, - { "begin": 22576, "end": 22579, "name": "DUP6", "source": 1 }, - { "begin": 22572, "end": 22599, "name": "ADD", "source": 1 }, + { "begin": 22639, "end": 22645, "name": "DUP3", "source": 2 }, + { "begin": 22635, "end": 22652, "name": "MUL", "source": 2 }, + { "begin": 22630, "end": 22633, "name": "DUP6", "source": 2 }, + { "begin": 22626, "end": 22653, "name": "ADD", "source": 2 }, { - "begin": 22623, - "end": 22688, + "begin": 22677, + "end": 22742, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "396" }, - { "begin": 22682, "end": 22687, "name": "DUP6", "source": 1 }, + { "begin": 22736, "end": 22741, "name": "DUP6", "source": 2 }, { - "begin": 22623, - "end": 22688, + "begin": 22677, + "end": 22742, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "127" }, { - "begin": 22623, - "end": 22688, + "begin": 22677, + "end": 22742, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 22623, - "end": 22688, + "begin": 22677, + "end": 22742, "name": "tag", - "source": 1, + "source": 2, "value": "396" }, - { "begin": 22623, "end": 22688, "name": "JUMPDEST", "source": 1 }, - { "begin": 22711, "end": 22718, "name": "DUP1", "source": 1 }, + { "begin": 22677, "end": 22742, "name": "JUMPDEST", "source": 2 }, + { "begin": 22765, "end": 22772, "name": "DUP1", "source": 2 }, { - "begin": 22742, - "end": 22743, + "begin": 22796, + "end": 22797, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 22727, - "end": 23120, + "begin": 22781, + "end": 23174, "name": "tag", - "source": 1, + "source": 2, "value": "397" }, - { "begin": 22727, "end": 23120, "name": "JUMPDEST", "source": 1 }, - { "begin": 22752, "end": 22758, "name": "DUP6", "source": 1 }, - { "begin": 22749, "end": 22750, "name": "DUP2", "source": 1 }, - { "begin": 22746, "end": 22759, "name": "LT", "source": 1 }, - { "begin": 22727, "end": 23120, "name": "ISZERO", "source": 1 }, + { "begin": 22781, "end": 23174, "name": "JUMPDEST", "source": 2 }, + { "begin": 22806, "end": 22812, "name": "DUP6", "source": 2 }, + { "begin": 22803, "end": 22804, "name": "DUP2", "source": 2 }, + { "begin": 22800, "end": 22813, "name": "LT", "source": 2 }, + { "begin": 22781, "end": 23174, "name": "ISZERO", "source": 2 }, { - "begin": 22727, - "end": 23120, + "begin": 22781, + "end": 23174, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "399" }, - { "begin": 22727, "end": 23120, "name": "JUMPI", "source": 1 }, - { "begin": 22823, "end": 22832, "name": "DUP5", "source": 1 }, - { "begin": 22817, "end": 22821, "name": "DUP5", "source": 1 }, - { "begin": 22813, "end": 22833, "name": "SUB", "source": 1 }, - { "begin": 22808, "end": 22811, "name": "DUP10", "source": 1 }, - { "begin": 22801, "end": 22834, "name": "MSTORE", "source": 1 }, - { "begin": 22874, "end": 22880, "name": "DUP2", "source": 1 }, - { "begin": 22868, "end": 22881, "name": "MLOAD", "source": 1 }, + { "begin": 22781, "end": 23174, "name": "JUMPI", "source": 2 }, + { "begin": 22877, "end": 22886, "name": "DUP5", "source": 2 }, + { "begin": 22871, "end": 22875, "name": "DUP5", "source": 2 }, + { "begin": 22867, "end": 22887, "name": "SUB", "source": 2 }, + { "begin": 22862, "end": 22865, "name": "DUP10", "source": 2 }, + { "begin": 22855, "end": 22888, "name": "MSTORE", "source": 2 }, + { "begin": 22928, "end": 22934, "name": "DUP2", "source": 2 }, + { "begin": 22922, "end": 22935, "name": "MLOAD", "source": 2 }, { - "begin": 22902, - "end": 22984, + "begin": 22956, + "end": 23038, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "400" }, - { "begin": 22979, "end": 22983, "name": "DUP6", "source": 1 }, - { "begin": 22964, "end": 22977, "name": "DUP3", "source": 1 }, + { "begin": 23033, "end": 23037, "name": "DUP6", "source": 2 }, + { "begin": 23018, "end": 23031, "name": "DUP3", "source": 2 }, { - "begin": 22902, - "end": 22984, + "begin": 22956, + "end": 23038, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "132" }, { - "begin": 22902, - "end": 22984, + "begin": 22956, + "end": 23038, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 22902, - "end": 22984, + "begin": 22956, + "end": 23038, "name": "tag", - "source": 1, + "source": 2, "value": "400" }, - { "begin": 22902, "end": 22984, "name": "JUMPDEST", "source": 1 }, - { "begin": 22894, "end": 22984, "name": "SWAP5", "source": 1 }, - { "begin": 22894, "end": 22984, "name": "POP", "source": 1 }, + { "begin": 22956, "end": 23038, "name": "JUMPDEST", "source": 2 }, + { "begin": 22948, "end": 23038, "name": "SWAP5", "source": 2 }, + { "begin": 22948, "end": 23038, "name": "POP", "source": 2 }, { - "begin": 23007, - "end": 23076, + "begin": 23061, + "end": 23130, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "401" }, - { "begin": 23069, "end": 23075, "name": "DUP4", "source": 1 }, + { "begin": 23123, "end": 23129, "name": "DUP4", "source": 2 }, { - "begin": 23007, - "end": 23076, + "begin": 23061, + "end": 23130, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "133" }, { - "begin": 23007, - "end": 23076, + "begin": 23061, + "end": 23130, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 23007, - "end": 23076, + "begin": 23061, + "end": 23130, "name": "tag", - "source": 1, + "source": 2, "value": "401" }, - { "begin": 23007, "end": 23076, "name": "JUMPDEST", "source": 1 }, - { "begin": 22997, "end": 23076, "name": "SWAP3", "source": 1 }, - { "begin": 22997, "end": 23076, "name": "POP", "source": 1 }, + { "begin": 23061, "end": 23130, "name": "JUMPDEST", "source": 2 }, + { "begin": 23051, "end": 23130, "name": "SWAP3", "source": 2 }, + { "begin": 23051, "end": 23130, "name": "POP", "source": 2 }, { - "begin": 23105, - "end": 23109, + "begin": 23159, + "end": 23163, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 23100, "end": 23103, "name": "DUP11", "source": 1 }, - { "begin": 23096, "end": 23110, "name": "ADD", "source": 1 }, - { "begin": 23089, "end": 23110, "name": "SWAP10", "source": 1 }, - { "begin": 23089, "end": 23110, "name": "POP", "source": 1 }, - { "begin": 22787, "end": 23120, "name": "POP", "source": 1 }, + { "begin": 23154, "end": 23157, "name": "DUP11", "source": 2 }, + { "begin": 23150, "end": 23164, "name": "ADD", "source": 2 }, + { "begin": 23143, "end": 23164, "name": "SWAP10", "source": 2 }, + { "begin": 23143, "end": 23164, "name": "POP", "source": 2 }, + { "begin": 22841, "end": 23174, "name": "POP", "source": 2 }, { - "begin": 22774, - "end": 22775, + "begin": 22828, + "end": 22829, "name": "PUSH", - "source": 1, + "source": 2, "value": "1" }, - { "begin": 22771, "end": 22772, "name": "DUP2", "source": 1 }, - { "begin": 22767, "end": 22776, "name": "ADD", "source": 1 }, - { "begin": 22762, "end": 22776, "name": "SWAP1", "source": 1 }, - { "begin": 22762, "end": 22776, "name": "POP", "source": 1 }, + { "begin": 22825, "end": 22826, "name": "DUP2", "source": 2 }, + { "begin": 22821, "end": 22830, "name": "ADD", "source": 2 }, + { "begin": 22816, "end": 22830, "name": "SWAP1", "source": 2 }, + { "begin": 22816, "end": 22830, "name": "POP", "source": 2 }, { - "begin": 22727, - "end": 23120, + "begin": 22781, + "end": 23174, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "397" }, - { "begin": 22727, "end": 23120, "name": "JUMP", "source": 1 }, + { "begin": 22781, "end": 23174, "name": "JUMP", "source": 2 }, { - "begin": 22727, - "end": 23120, + "begin": 22781, + "end": 23174, "name": "tag", - "source": 1, + "source": 2, "value": "399" }, - { "begin": 22727, "end": 23120, "name": "JUMPDEST", "source": 1 }, - { "begin": 22731, "end": 22745, "name": "POP", "source": 1 }, - { "begin": 23136, "end": 23140, "name": "DUP3", "source": 1 }, - { "begin": 23129, "end": 23140, "name": "SWAP8", "source": 1 }, - { "begin": 23129, "end": 23140, "name": "POP", "source": 1 }, - { "begin": 23156, "end": 23159, "name": "DUP8", "source": 1 }, - { "begin": 23149, "end": 23159, "name": "SWAP6", "source": 1 }, - { "begin": 23149, "end": 23159, "name": "POP", "source": 1 }, - { "begin": 22334, "end": 23165, "name": "POP", "source": 1 }, - { "begin": 22334, "end": 23165, "name": "POP", "source": 1 }, - { "begin": 22334, "end": 23165, "name": "POP", "source": 1 }, - { "begin": 22334, "end": 23165, "name": "POP", "source": 1 }, - { "begin": 22334, "end": 23165, "name": "POP", "source": 1 }, - { "begin": 22202, "end": 23165, "name": "SWAP3", "source": 1 }, - { "begin": 22202, "end": 23165, "name": "SWAP2", "source": 1 }, - { "begin": 22202, "end": 23165, "name": "POP", "source": 1 }, - { "begin": 22202, "end": 23165, "name": "POP", "source": 1 }, - { - "begin": 22202, - "end": 23165, - "name": "JUMP", - "source": 1, + { "begin": 22781, "end": 23174, "name": "JUMPDEST", "source": 2 }, + { "begin": 22785, "end": 22799, "name": "POP", "source": 2 }, + { "begin": 23190, "end": 23194, "name": "DUP3", "source": 2 }, + { "begin": 23183, "end": 23194, "name": "SWAP8", "source": 2 }, + { "begin": 23183, "end": 23194, "name": "POP", "source": 2 }, + { "begin": 23210, "end": 23213, "name": "DUP8", "source": 2 }, + { "begin": 23203, "end": 23213, "name": "SWAP6", "source": 2 }, + { "begin": 23203, "end": 23213, "name": "POP", "source": 2 }, + { "begin": 22388, "end": 23219, "name": "POP", "source": 2 }, + { "begin": 22388, "end": 23219, "name": "POP", "source": 2 }, + { "begin": 22388, "end": 23219, "name": "POP", "source": 2 }, + { "begin": 22388, "end": 23219, "name": "POP", "source": 2 }, + { "begin": 22388, "end": 23219, "name": "POP", "source": 2 }, + { "begin": 22256, "end": 23219, "name": "SWAP3", "source": 2 }, + { "begin": 22256, "end": 23219, "name": "SWAP2", "source": 2 }, + { "begin": 22256, "end": 23219, "name": "POP", "source": 2 }, + { "begin": 22256, "end": 23219, "name": "POP", "source": 2 }, + { + "begin": 22256, + "end": 23219, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 23239, - "end": 23902, + "begin": 23293, + "end": 23960, "name": "tag", - "source": 1, + "source": 2, "value": "135" }, - { "begin": 23239, "end": 23902, "name": "JUMPDEST", "source": 1 }, + { "begin": 23293, "end": 23960, "name": "JUMPDEST", "source": 2 }, { - "begin": 23364, - "end": 23367, + "begin": 23422, + "end": 23425, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 23400, - "end": 23404, + "begin": 23458, + "end": 23462, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 23395, "end": 23398, "name": "DUP4", "source": 1 }, - { "begin": 23391, "end": 23405, "name": "ADD", "source": 1 }, + { "begin": 23453, "end": 23456, "name": "DUP4", "source": 2 }, + { "begin": 23449, "end": 23463, "name": "ADD", "source": 2 }, { - "begin": 23490, - "end": 23494, + "begin": 23548, + "end": 23552, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 23483, "end": 23488, "name": "DUP4", "source": 1 }, - { "begin": 23479, "end": 23495, "name": "ADD", "source": 1 }, - { "begin": 23473, "end": 23496, "name": "MLOAD", "source": 1 }, + { "begin": 23541, "end": 23546, "name": "DUP4", "source": 2 }, + { "begin": 23537, "end": 23553, "name": "ADD", "source": 2 }, + { "begin": 23531, "end": 23554, "name": "MLOAD", "source": 2 }, { - "begin": 23509, - "end": 23568, + "begin": 23567, + "end": 23626, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "403" }, { - "begin": 23562, - "end": 23566, + "begin": 23620, + "end": 23624, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 23557, "end": 23560, "name": "DUP7", "source": 1 }, - { "begin": 23553, "end": 23567, "name": "ADD", "source": 1 }, - { "begin": 23539, "end": 23551, "name": "DUP3", "source": 1 }, + { "begin": 23615, "end": 23618, "name": "DUP7", "source": 2 }, + { "begin": 23611, "end": 23625, "name": "ADD", "source": 2 }, + { "begin": 23597, "end": 23609, "name": "DUP3", "source": 2 }, { - "begin": 23509, - "end": 23568, + "begin": 23567, + "end": 23626, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "124" }, { - "begin": 23509, - "end": 23568, + "begin": 23567, + "end": 23626, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 23509, - "end": 23568, + "begin": 23567, + "end": 23626, "name": "tag", - "source": 1, + "source": 2, "value": "403" }, - { "begin": 23509, "end": 23568, "name": "JUMPDEST", "source": 1 }, - { "begin": 23415, "end": 23578, "name": "POP", "source": 1 }, + { "begin": 23567, "end": 23626, "name": "JUMPDEST", "source": 2 }, + { "begin": 23473, "end": 23636, "name": "POP", "source": 2 }, { - "begin": 23664, - "end": 23668, + "begin": 23722, + "end": 23726, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 23657, "end": 23662, "name": "DUP4", "source": 1 }, - { "begin": 23653, "end": 23669, "name": "ADD", "source": 1 }, - { "begin": 23647, "end": 23670, "name": "MLOAD", "source": 1 }, - { "begin": 23717, "end": 23720, "name": "DUP5", "source": 1 }, - { "begin": 23711, "end": 23715, "name": "DUP3", "source": 1 }, - { "begin": 23707, "end": 23721, "name": "SUB", "source": 1 }, + { "begin": 23715, "end": 23720, "name": "DUP4", "source": 2 }, + { "begin": 23711, "end": 23727, "name": "ADD", "source": 2 }, + { "begin": 23705, "end": 23728, "name": "MLOAD", "source": 2 }, + { "begin": 23775, "end": 23778, "name": "DUP5", "source": 2 }, + { "begin": 23769, "end": 23773, "name": "DUP3", "source": 2 }, + { "begin": 23765, "end": 23779, "name": "SUB", "source": 2 }, { - "begin": 23700, - "end": 23704, + "begin": 23758, + "end": 23762, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 23695, "end": 23698, "name": "DUP7", "source": 1 }, - { "begin": 23691, "end": 23705, "name": "ADD", "source": 1 }, - { "begin": 23684, "end": 23722, "name": "MSTORE", "source": 1 }, + { "begin": 23753, "end": 23756, "name": "DUP7", "source": 2 }, + { "begin": 23749, "end": 23763, "name": "ADD", "source": 2 }, + { "begin": 23742, "end": 23780, "name": "MSTORE", "source": 2 }, { - "begin": 23743, - "end": 23864, + "begin": 23801, + "end": 23922, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "404" }, - { "begin": 23859, "end": 23863, "name": "DUP3", "source": 1 }, - { "begin": 23845, "end": 23857, "name": "DUP3", "source": 1 }, + { "begin": 23917, "end": 23921, "name": "DUP3", "source": 2 }, + { "begin": 23903, "end": 23915, "name": "DUP3", "source": 2 }, { - "begin": 23743, - "end": 23864, + "begin": 23801, + "end": 23922, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "134" }, { - "begin": 23743, - "end": 23864, + "begin": 23801, + "end": 23922, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 23743, - "end": 23864, + "begin": 23801, + "end": 23922, "name": "tag", - "source": 1, + "source": 2, "value": "404" }, - { "begin": 23743, "end": 23864, "name": "JUMPDEST", "source": 1 }, - { "begin": 23735, "end": 23864, "name": "SWAP2", "source": 1 }, - { "begin": 23735, "end": 23864, "name": "POP", "source": 1 }, - { "begin": 23588, "end": 23875, "name": "POP", "source": 1 }, - { "begin": 23892, "end": 23896, "name": "DUP1", "source": 1 }, - { "begin": 23885, "end": 23896, "name": "SWAP2", "source": 1 }, - { "begin": 23885, "end": 23896, "name": "POP", "source": 1 }, - { "begin": 23369, "end": 23902, "name": "POP", "source": 1 }, - { "begin": 23239, "end": 23902, "name": "SWAP3", "source": 1 }, - { "begin": 23239, "end": 23902, "name": "SWAP2", "source": 1 }, - { "begin": 23239, "end": 23902, "name": "POP", "source": 1 }, - { "begin": 23239, "end": 23902, "name": "POP", "source": 1 }, - { - "begin": 23239, - "end": 23902, - "name": "JUMP", - "source": 1, + { "begin": 23801, "end": 23922, "name": "JUMPDEST", "source": 2 }, + { "begin": 23793, "end": 23922, "name": "SWAP2", "source": 2 }, + { "begin": 23793, "end": 23922, "name": "POP", "source": 2 }, + { "begin": 23646, "end": 23933, "name": "POP", "source": 2 }, + { "begin": 23950, "end": 23954, "name": "DUP1", "source": 2 }, + { "begin": 23943, "end": 23954, "name": "SWAP2", "source": 2 }, + { "begin": 23943, "end": 23954, "name": "POP", "source": 2 }, + { "begin": 23427, "end": 23960, "name": "POP", "source": 2 }, + { "begin": 23293, "end": 23960, "name": "SWAP3", "source": 2 }, + { "begin": 23293, "end": 23960, "name": "SWAP2", "source": 2 }, + { "begin": 23293, "end": 23960, "name": "POP", "source": 2 }, + { "begin": 23293, "end": 23960, "name": "POP", "source": 2 }, + { + "begin": 23293, + "end": 23960, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 23908, - "end": 24026, + "begin": 23966, + "end": 24084, "name": "tag", - "source": 1, + "source": 2, "value": "136" }, - { "begin": 23908, "end": 24026, "name": "JUMPDEST", "source": 1 }, + { "begin": 23966, "end": 24084, "name": "JUMPDEST", "source": 2 }, { - "begin": 23995, - "end": 24019, + "begin": 24053, + "end": 24077, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "406" }, - { "begin": 24013, "end": 24018, "name": "DUP2", "source": 1 }, + { "begin": 24071, "end": 24076, "name": "DUP2", "source": 2 }, { - "begin": 23995, - "end": 24019, + "begin": 24053, + "end": 24077, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "98" }, { - "begin": 23995, - "end": 24019, + "begin": 24053, + "end": 24077, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 23995, - "end": 24019, + "begin": 24053, + "end": 24077, "name": "tag", - "source": 1, + "source": 2, "value": "406" }, - { "begin": 23995, "end": 24019, "name": "JUMPDEST", "source": 1 }, - { "begin": 23990, "end": 23993, "name": "DUP3", "source": 1 }, - { "begin": 23983, "end": 24020, "name": "MSTORE", "source": 1 }, - { "begin": 23908, "end": 24026, "name": "POP", "source": 1 }, - { "begin": 23908, "end": 24026, "name": "POP", "source": 1 }, + { "begin": 24053, "end": 24077, "name": "JUMPDEST", "source": 2 }, + { "begin": 24048, "end": 24051, "name": "DUP3", "source": 2 }, + { "begin": 24041, "end": 24078, "name": "MSTORE", "source": 2 }, + { "begin": 23966, "end": 24084, "name": "POP", "source": 2 }, + { "begin": 23966, "end": 24084, "name": "POP", "source": 2 }, { - "begin": 23908, - "end": 24026, + "begin": 23966, + "end": 24084, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 24032, - "end": 24147, + "begin": 24090, + "end": 24205, "name": "tag", - "source": 1, + "source": 2, "value": "137" }, - { "begin": 24032, "end": 24147, "name": "JUMPDEST", "source": 1 }, + { "begin": 24090, "end": 24205, "name": "JUMPDEST", "source": 2 }, { - "begin": 24117, - "end": 24140, + "begin": 24175, + "end": 24198, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "408" }, - { "begin": 24134, "end": 24139, "name": "DUP2", "source": 1 }, + { "begin": 24192, "end": 24197, "name": "DUP2", "source": 2 }, { - "begin": 24117, - "end": 24140, + "begin": 24175, + "end": 24198, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "101" }, { - "begin": 24117, - "end": 24140, + "begin": 24175, + "end": 24198, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 24117, - "end": 24140, + "begin": 24175, + "end": 24198, "name": "tag", - "source": 1, + "source": 2, "value": "408" }, - { "begin": 24117, "end": 24140, "name": "JUMPDEST", "source": 1 }, - { "begin": 24112, "end": 24115, "name": "DUP3", "source": 1 }, - { "begin": 24105, "end": 24141, "name": "MSTORE", "source": 1 }, - { "begin": 24032, "end": 24147, "name": "POP", "source": 1 }, - { "begin": 24032, "end": 24147, "name": "POP", "source": 1 }, + { "begin": 24175, "end": 24198, "name": "JUMPDEST", "source": 2 }, + { "begin": 24170, "end": 24173, "name": "DUP3", "source": 2 }, + { "begin": 24163, "end": 24199, "name": "MSTORE", "source": 2 }, + { "begin": 24090, "end": 24205, "name": "POP", "source": 2 }, + { "begin": 24090, "end": 24205, "name": "POP", "source": 2 }, { - "begin": 24032, - "end": 24147, + "begin": 24090, + "end": 24205, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 24153, - "end": 25139, + "begin": 24211, + "end": 25213, "name": "tag", - "source": 1, + "source": 2, "value": "41" }, - { "begin": 24153, "end": 25139, "name": "JUMPDEST", "source": 1 }, + { "begin": 24211, "end": 25213, "name": "JUMPDEST", "source": 2 }, { - "begin": 24468, - "end": 24472, + "begin": 24534, + "end": 24538, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 24506, - "end": 24509, + "begin": 24572, + "end": 24575, "name": "PUSH", - "source": 1, + "source": 2, "value": "A0" }, - { "begin": 24495, "end": 24504, "name": "DUP3", "source": 1 }, - { "begin": 24491, "end": 24510, "name": "ADD", "source": 1 }, - { "begin": 24483, "end": 24510, "name": "SWAP1", "source": 1 }, - { "begin": 24483, "end": 24510, "name": "POP", "source": 1 }, - { "begin": 24556, "end": 24565, "name": "DUP2", "source": 1 }, - { "begin": 24550, "end": 24554, "name": "DUP2", "source": 1 }, - { "begin": 24546, "end": 24566, "name": "SUB", "source": 1 }, + { "begin": 24561, "end": 24570, "name": "DUP3", "source": 2 }, + { "begin": 24557, "end": 24576, "name": "ADD", "source": 2 }, + { "begin": 24549, "end": 24576, "name": "SWAP1", "source": 2 }, + { "begin": 24549, "end": 24576, "name": "POP", "source": 2 }, + { "begin": 24622, "end": 24631, "name": "DUP2", "source": 2 }, + { "begin": 24616, "end": 24620, "name": "DUP2", "source": 2 }, + { "begin": 24612, "end": 24632, "name": "SUB", "source": 2 }, { - "begin": 24542, - "end": 24543, + "begin": 24608, + "end": 24609, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 24531, "end": 24540, "name": "DUP4", "source": 1 }, - { "begin": 24527, "end": 24544, "name": "ADD", "source": 1 }, - { "begin": 24520, "end": 24567, "name": "MSTORE", "source": 1 }, + { "begin": 24597, "end": 24606, "name": "DUP4", "source": 2 }, + { "begin": 24593, "end": 24610, "name": "ADD", "source": 2 }, + { "begin": 24586, "end": 24633, "name": "MSTORE", "source": 2 }, { - "begin": 24584, - "end": 24698, + "begin": 24650, + "end": 24768, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "410" }, - { "begin": 24693, "end": 24697, "name": "DUP2", "source": 1 }, - { "begin": 24684, "end": 24690, "name": "DUP9", "source": 1 }, + { "begin": 24763, "end": 24767, "name": "DUP2", "source": 2 }, + { "begin": 24754, "end": 24760, "name": "DUP9", "source": 2 }, { - "begin": 24584, - "end": 24698, + "begin": 24650, + "end": 24768, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 24584, - "end": 24698, + "begin": 24650, + "end": 24768, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 24584, - "end": 24698, + "begin": 24650, + "end": 24768, "name": "tag", - "source": 1, + "source": 2, "value": "410" }, - { "begin": 24584, "end": 24698, "name": "JUMPDEST", "source": 1 }, - { "begin": 24576, "end": 24698, "name": "SWAP1", "source": 1 }, - { "begin": 24576, "end": 24698, "name": "POP", "source": 1 }, + { "begin": 24650, "end": 24768, "name": "JUMPDEST", "source": 2 }, + { "begin": 24642, "end": 24768, "name": "SWAP1", "source": 2 }, + { "begin": 24642, "end": 24768, "name": "POP", "source": 2 }, { - "begin": 24708, - "end": 24780, + "begin": 24778, + "end": 24850, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "411" }, { - "begin": 24776, - "end": 24778, + "begin": 24846, + "end": 24848, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 24765, "end": 24774, "name": "DUP4", "source": 1 }, - { "begin": 24761, "end": 24779, "name": "ADD", "source": 1 }, - { "begin": 24752, "end": 24758, "name": "DUP8", "source": 1 }, + { "begin": 24835, "end": 24844, "name": "DUP4", "source": 2 }, + { "begin": 24831, "end": 24849, "name": "ADD", "source": 2 }, + { "begin": 24822, "end": 24828, "name": "DUP8", "source": 2 }, { - "begin": 24708, - "end": 24780, + "begin": 24778, + "end": 24850, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "136" }, { - "begin": 24708, - "end": 24780, + "begin": 24778, + "end": 24850, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 24708, - "end": 24780, + "begin": 24778, + "end": 24850, "name": "tag", - "source": 1, + "source": 2, "value": "411" }, - { "begin": 24708, "end": 24780, "name": "JUMPDEST", "source": 1 }, + { "begin": 24778, "end": 24850, "name": "JUMPDEST", "source": 2 }, { - "begin": 24790, - "end": 24862, + "begin": 24860, + "end": 24932, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "412" }, { - "begin": 24858, - "end": 24860, + "begin": 24928, + "end": 24930, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 24847, "end": 24856, "name": "DUP4", "source": 1 }, - { "begin": 24843, "end": 24861, "name": "ADD", "source": 1 }, - { "begin": 24834, "end": 24840, "name": "DUP7", "source": 1 }, + { "begin": 24917, "end": 24926, "name": "DUP4", "source": 2 }, + { "begin": 24913, "end": 24931, "name": "ADD", "source": 2 }, + { "begin": 24904, "end": 24910, "name": "DUP7", "source": 2 }, { - "begin": 24790, - "end": 24862, + "begin": 24860, + "end": 24932, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "136" }, { - "begin": 24790, - "end": 24862, + "begin": 24860, + "end": 24932, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 24790, - "end": 24862, + "begin": 24860, + "end": 24932, "name": "tag", - "source": 1, + "source": 2, "value": "412" }, - { "begin": 24790, "end": 24862, "name": "JUMPDEST", "source": 1 }, - { "begin": 24909, "end": 24918, "name": "DUP2", "source": 1 }, - { "begin": 24903, "end": 24907, "name": "DUP2", "source": 1 }, - { "begin": 24899, "end": 24919, "name": "SUB", "source": 1 }, + { "begin": 24860, "end": 24932, "name": "JUMPDEST", "source": 2 }, + { "begin": 24979, "end": 24988, "name": "DUP2", "source": 2 }, + { "begin": 24973, "end": 24977, "name": "DUP2", "source": 2 }, + { "begin": 24969, "end": 24989, "name": "SUB", "source": 2 }, { - "begin": 24894, - "end": 24896, + "begin": 24964, + "end": 24966, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 24883, "end": 24892, "name": "DUP4", "source": 1 }, - { "begin": 24879, "end": 24897, "name": "ADD", "source": 1 }, - { "begin": 24872, "end": 24920, "name": "MSTORE", "source": 1 }, + { "begin": 24953, "end": 24962, "name": "DUP4", "source": 2 }, + { "begin": 24949, "end": 24967, "name": "ADD", "source": 2 }, + { "begin": 24942, "end": 24990, "name": "MSTORE", "source": 2 }, { - "begin": 24937, - "end": 25051, + "begin": 25007, + "end": 25125, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "413" }, - { "begin": 25046, "end": 25050, "name": "DUP2", "source": 1 }, - { "begin": 25037, "end": 25043, "name": "DUP6", "source": 1 }, + { "begin": 25120, "end": 25124, "name": "DUP2", "source": 2 }, + { "begin": 25111, "end": 25117, "name": "DUP6", "source": 2 }, { - "begin": 24937, - "end": 25051, + "begin": 25007, + "end": 25125, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 24937, - "end": 25051, + "begin": 25007, + "end": 25125, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 24937, - "end": 25051, + "begin": 25007, + "end": 25125, "name": "tag", - "source": 1, + "source": 2, "value": "413" }, - { "begin": 24937, "end": 25051, "name": "JUMPDEST", "source": 1 }, - { "begin": 24929, "end": 25051, "name": "SWAP1", "source": 1 }, - { "begin": 24929, "end": 25051, "name": "POP", "source": 1 }, + { "begin": 25007, "end": 25125, "name": "JUMPDEST", "source": 2 }, + { "begin": 24999, "end": 25125, "name": "SWAP1", "source": 2 }, + { "begin": 24999, "end": 25125, "name": "POP", "source": 2 }, { - "begin": 25061, - "end": 25132, + "begin": 25135, + "end": 25206, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "414" }, { - "begin": 25127, - "end": 25130, + "begin": 25201, + "end": 25204, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 25116, "end": 25125, "name": "DUP4", "source": 1 }, - { "begin": 25112, "end": 25131, "name": "ADD", "source": 1 }, - { "begin": 25103, "end": 25109, "name": "DUP5", "source": 1 }, + { "begin": 25190, "end": 25199, "name": "DUP4", "source": 2 }, + { "begin": 25186, "end": 25205, "name": "ADD", "source": 2 }, + { "begin": 25177, "end": 25183, "name": "DUP5", "source": 2 }, { - "begin": 25061, - "end": 25132, + "begin": 25135, + "end": 25206, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "137" }, { - "begin": 25061, - "end": 25132, + "begin": 25135, + "end": 25206, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 25061, - "end": 25132, + "begin": 25135, + "end": 25206, "name": "tag", - "source": 1, + "source": 2, "value": "414" }, - { "begin": 25061, "end": 25132, "name": "JUMPDEST", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "SWAP7", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "SWAP6", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "POP", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "POP", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "POP", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "POP", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "POP", "source": 1 }, - { "begin": 24153, "end": 25139, "name": "POP", "source": 1 }, + { "begin": 25135, "end": 25206, "name": "JUMPDEST", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "SWAP7", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "SWAP6", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "POP", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "POP", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "POP", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "POP", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "POP", "source": 2 }, + { "begin": 24211, "end": 25213, "name": "POP", "source": 2 }, { - "begin": 24153, - "end": 25139, + "begin": 24211, + "end": 25213, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 25145, - "end": 25283, + "begin": 25219, + "end": 25358, "name": "tag", - "source": 1, + "source": 2, "value": "138" }, - { "begin": 25145, "end": 25283, "name": "JUMPDEST", "source": 1 }, + { "begin": 25219, "end": 25358, "name": "JUMPDEST", "source": 2 }, { - "begin": 25236, - "end": 25242, + "begin": 25311, + "end": 25317, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 25270, "end": 25275, "name": "DUP2", "source": 1 }, - { "begin": 25264, "end": 25276, "name": "MLOAD", "source": 1 }, - { "begin": 25254, "end": 25276, "name": "SWAP1", "source": 1 }, - { "begin": 25254, "end": 25276, "name": "POP", "source": 1 }, - { "begin": 25145, "end": 25283, "name": "SWAP2", "source": 1 }, - { "begin": 25145, "end": 25283, "name": "SWAP1", "source": 1 }, - { "begin": 25145, "end": 25283, "name": "POP", "source": 1 }, + { "begin": 25345, "end": 25350, "name": "DUP2", "source": 2 }, + { "begin": 25339, "end": 25351, "name": "MLOAD", "source": 2 }, + { "begin": 25329, "end": 25351, "name": "SWAP1", "source": 2 }, + { "begin": 25329, "end": 25351, "name": "POP", "source": 2 }, + { "begin": 25219, "end": 25358, "name": "SWAP2", "source": 2 }, + { "begin": 25219, "end": 25358, "name": "SWAP1", "source": 2 }, + { "begin": 25219, "end": 25358, "name": "POP", "source": 2 }, { - "begin": 25145, - "end": 25283, + "begin": 25219, + "end": 25358, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 25289, - "end": 25497, + "begin": 25364, + "end": 25573, "name": "tag", - "source": 1, + "source": 2, "value": "139" }, - { "begin": 25289, "end": 25497, "name": "JUMPDEST", "source": 1 }, + { "begin": 25364, "end": 25573, "name": "JUMPDEST", "source": 2 }, { - "begin": 25412, - "end": 25423, + "begin": 25488, + "end": 25499, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 25446, "end": 25452, "name": "DUP3", "source": 1 }, - { "begin": 25441, "end": 25444, "name": "DUP3", "source": 1 }, - { "begin": 25434, "end": 25453, "name": "MSTORE", "source": 1 }, + { "begin": 25522, "end": 25528, "name": "DUP3", "source": 2 }, + { "begin": 25517, "end": 25520, "name": "DUP3", "source": 2 }, + { "begin": 25510, "end": 25529, "name": "MSTORE", "source": 2 }, { - "begin": 25486, - "end": 25490, + "begin": 25562, + "end": 25566, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 25481, "end": 25484, "name": "DUP3", "source": 1 }, - { "begin": 25477, "end": 25491, "name": "ADD", "source": 1 }, - { "begin": 25462, "end": 25491, "name": "SWAP1", "source": 1 }, - { "begin": 25462, "end": 25491, "name": "POP", "source": 1 }, - { "begin": 25289, "end": 25497, "name": "SWAP3", "source": 1 }, - { "begin": 25289, "end": 25497, "name": "SWAP2", "source": 1 }, - { "begin": 25289, "end": 25497, "name": "POP", "source": 1 }, - { "begin": 25289, "end": 25497, "name": "POP", "source": 1 }, + { "begin": 25557, "end": 25560, "name": "DUP3", "source": 2 }, + { "begin": 25553, "end": 25567, "name": "ADD", "source": 2 }, + { "begin": 25538, "end": 25567, "name": "SWAP1", "source": 2 }, + { "begin": 25538, "end": 25567, "name": "POP", "source": 2 }, + { "begin": 25364, "end": 25573, "name": "SWAP3", "source": 2 }, + { "begin": 25364, "end": 25573, "name": "SWAP2", "source": 2 }, + { "begin": 25364, "end": 25573, "name": "POP", "source": 2 }, + { "begin": 25364, "end": 25573, "name": "POP", "source": 2 }, { - "begin": 25289, - "end": 25497, + "begin": 25364, + "end": 25573, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 25503, - "end": 25659, + "begin": 25579, + "end": 25736, "name": "tag", - "source": 1, + "source": 2, "value": "140" }, - { "begin": 25503, "end": 25659, "name": "JUMPDEST", "source": 1 }, + { "begin": 25579, "end": 25736, "name": "JUMPDEST", "source": 2 }, { - "begin": 25594, - "end": 25598, + "begin": 25671, + "end": 25675, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 25617, "end": 25620, "name": "DUP2", "source": 1 }, - { "begin": 25609, "end": 25620, "name": "SWAP1", "source": 1 }, - { "begin": 25609, "end": 25620, "name": "POP", "source": 1 }, + { "begin": 25694, "end": 25697, "name": "DUP2", "source": 2 }, + { "begin": 25686, "end": 25697, "name": "SWAP1", "source": 2 }, + { "begin": 25686, "end": 25697, "name": "POP", "source": 2 }, { - "begin": 25647, - "end": 25651, + "begin": 25724, + "end": 25728, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 25642, "end": 25645, "name": "DUP3", "source": 1 }, - { "begin": 25638, "end": 25652, "name": "ADD", "source": 1 }, - { "begin": 25630, "end": 25652, "name": "SWAP1", "source": 1 }, - { "begin": 25630, "end": 25652, "name": "POP", "source": 1 }, - { "begin": 25503, "end": 25659, "name": "SWAP2", "source": 1 }, - { "begin": 25503, "end": 25659, "name": "SWAP1", "source": 1 }, - { "begin": 25503, "end": 25659, "name": "POP", "source": 1 }, + { "begin": 25719, "end": 25722, "name": "DUP3", "source": 2 }, + { "begin": 25715, "end": 25729, "name": "ADD", "source": 2 }, + { "begin": 25707, "end": 25729, "name": "SWAP1", "source": 2 }, + { "begin": 25707, "end": 25729, "name": "POP", "source": 2 }, + { "begin": 25579, "end": 25736, "name": "SWAP2", "source": 2 }, + { "begin": 25579, "end": 25736, "name": "SWAP1", "source": 2 }, + { "begin": 25579, "end": 25736, "name": "POP", "source": 2 }, { - "begin": 25503, - "end": 25659, + "begin": 25579, + "end": 25736, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 25665, - "end": 25773, + "begin": 25742, + "end": 25850, "name": "tag", - "source": 1, + "source": 2, "value": "141" }, - { "begin": 25665, "end": 25773, "name": "JUMPDEST", "source": 1 }, + { "begin": 25742, "end": 25850, "name": "JUMPDEST", "source": 2 }, { - "begin": 25742, - "end": 25766, + "begin": 25819, + "end": 25843, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "419" }, - { "begin": 25760, "end": 25765, "name": "DUP2", "source": 1 }, + { "begin": 25837, "end": 25842, "name": "DUP2", "source": 2 }, { - "begin": 25742, - "end": 25766, + "begin": 25819, + "end": 25843, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "106" }, { - "begin": 25742, - "end": 25766, + "begin": 25819, + "end": 25843, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 25742, - "end": 25766, + "begin": 25819, + "end": 25843, "name": "tag", - "source": 1, + "source": 2, "value": "419" }, - { "begin": 25742, "end": 25766, "name": "JUMPDEST", "source": 1 }, - { "begin": 25737, "end": 25740, "name": "DUP3", "source": 1 }, - { "begin": 25730, "end": 25767, "name": "MSTORE", "source": 1 }, - { "begin": 25665, "end": 25773, "name": "POP", "source": 1 }, - { "begin": 25665, "end": 25773, "name": "POP", "source": 1 }, + { "begin": 25819, "end": 25843, "name": "JUMPDEST", "source": 2 }, + { "begin": 25814, "end": 25817, "name": "DUP3", "source": 2 }, + { "begin": 25807, "end": 25844, "name": "MSTORE", "source": 2 }, + { "begin": 25742, "end": 25850, "name": "POP", "source": 2 }, + { "begin": 25742, "end": 25850, "name": "POP", "source": 2 }, { - "begin": 25665, - "end": 25773, + "begin": 25742, + "end": 25850, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 25779, - "end": 25887, + "begin": 25856, + "end": 25964, "name": "tag", - "source": 1, + "source": 2, "value": "142" }, - { "begin": 25779, "end": 25887, "name": "JUMPDEST", "source": 1 }, + { "begin": 25856, "end": 25964, "name": "JUMPDEST", "source": 2 }, { - "begin": 25856, - "end": 25880, + "begin": 25933, + "end": 25957, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "421" }, - { "begin": 25874, "end": 25879, "name": "DUP2", "source": 1 }, + { "begin": 25951, "end": 25956, "name": "DUP2", "source": 2 }, { - "begin": 25856, - "end": 25880, + "begin": 25933, + "end": 25957, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "98" }, { - "begin": 25856, - "end": 25880, + "begin": 25933, + "end": 25957, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 25856, - "end": 25880, + "begin": 25933, + "end": 25957, "name": "tag", - "source": 1, + "source": 2, "value": "421" }, - { "begin": 25856, "end": 25880, "name": "JUMPDEST", "source": 1 }, - { "begin": 25851, "end": 25854, "name": "DUP3", "source": 1 }, - { "begin": 25844, "end": 25881, "name": "MSTORE", "source": 1 }, - { "begin": 25779, "end": 25887, "name": "POP", "source": 1 }, - { "begin": 25779, "end": 25887, "name": "POP", "source": 1 }, + { "begin": 25933, "end": 25957, "name": "JUMPDEST", "source": 2 }, + { "begin": 25928, "end": 25931, "name": "DUP3", "source": 2 }, + { "begin": 25921, "end": 25958, "name": "MSTORE", "source": 2 }, + { "begin": 25856, "end": 25964, "name": "POP", "source": 2 }, + { "begin": 25856, "end": 25964, "name": "POP", "source": 2 }, { - "begin": 25779, - "end": 25887, + "begin": 25856, + "end": 25964, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 25951, - "end": 26460, + "begin": 26028, + "end": 26539, "name": "tag", - "source": 1, + "source": 2, "value": "143" }, - { "begin": 25951, "end": 26460, "name": "JUMPDEST", "source": 1 }, + { "begin": 26028, "end": 26539, "name": "JUMPDEST", "source": 2 }, { - "begin": 26086, - "end": 26090, + "begin": 26165, + "end": 26169, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 26081, "end": 26084, "name": "DUP3", "source": 1 }, - { "begin": 26077, "end": 26091, "name": "ADD", "source": 1 }, + { "begin": 26160, "end": 26163, "name": "DUP3", "source": 2 }, + { "begin": 26156, "end": 26170, "name": "ADD", "source": 2 }, { - "begin": 26185, - "end": 26189, + "begin": 26264, + "end": 26268, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 26178, "end": 26183, "name": "DUP3", "source": 1 }, - { "begin": 26174, "end": 26190, "name": "ADD", "source": 1 }, - { "begin": 26168, "end": 26191, "name": "MLOAD", "source": 1 }, + { "begin": 26257, "end": 26262, "name": "DUP3", "source": 2 }, + { "begin": 26253, "end": 26269, "name": "ADD", "source": 2 }, + { "begin": 26247, "end": 26270, "name": "MLOAD", "source": 2 }, { - "begin": 26204, - "end": 26267, + "begin": 26283, + "end": 26346, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "423" }, { - "begin": 26261, - "end": 26265, + "begin": 26340, + "end": 26344, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 26256, "end": 26259, "name": "DUP6", "source": 1 }, - { "begin": 26252, "end": 26266, "name": "ADD", "source": 1 }, - { "begin": 26238, "end": 26250, "name": "DUP3", "source": 1 }, + { "begin": 26335, "end": 26338, "name": "DUP6", "source": 2 }, + { "begin": 26331, "end": 26345, "name": "ADD", "source": 2 }, + { "begin": 26317, "end": 26329, "name": "DUP3", "source": 2 }, { - "begin": 26204, - "end": 26267, + "begin": 26283, + "end": 26346, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "141" }, { - "begin": 26204, - "end": 26267, + "begin": 26283, + "end": 26346, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 26204, - "end": 26267, + "begin": 26283, + "end": 26346, "name": "tag", - "source": 1, + "source": 2, "value": "423" }, - { "begin": 26204, "end": 26267, "name": "JUMPDEST", "source": 1 }, - { "begin": 26101, "end": 26277, "name": "POP", "source": 1 }, + { "begin": 26283, "end": 26346, "name": "JUMPDEST", "source": 2 }, + { "begin": 26180, "end": 26356, "name": "POP", "source": 2 }, { - "begin": 26361, - "end": 26365, + "begin": 26440, + "end": 26444, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 26354, "end": 26359, "name": "DUP3", "source": 1 }, - { "begin": 26350, "end": 26366, "name": "ADD", "source": 1 }, - { "begin": 26344, "end": 26367, "name": "MLOAD", "source": 1 }, + { "begin": 26433, "end": 26438, "name": "DUP3", "source": 2 }, + { "begin": 26429, "end": 26445, "name": "ADD", "source": 2 }, + { "begin": 26423, "end": 26446, "name": "MLOAD", "source": 2 }, { - "begin": 26380, - "end": 26443, + "begin": 26459, + "end": 26522, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "424" }, { - "begin": 26437, - "end": 26441, + "begin": 26516, + "end": 26520, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 26432, "end": 26435, "name": "DUP6", "source": 1 }, - { "begin": 26428, "end": 26442, "name": "ADD", "source": 1 }, - { "begin": 26414, "end": 26426, "name": "DUP3", "source": 1 }, + { "begin": 26511, "end": 26514, "name": "DUP6", "source": 2 }, + { "begin": 26507, "end": 26521, "name": "ADD", "source": 2 }, + { "begin": 26493, "end": 26505, "name": "DUP3", "source": 2 }, { - "begin": 26380, - "end": 26443, + "begin": 26459, + "end": 26522, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "142" }, { - "begin": 26380, - "end": 26443, + "begin": 26459, + "end": 26522, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 26380, - "end": 26443, + "begin": 26459, + "end": 26522, "name": "tag", - "source": 1, + "source": 2, "value": "424" }, - { "begin": 26380, "end": 26443, "name": "JUMPDEST", "source": 1 }, - { "begin": 26287, "end": 26453, "name": "POP", "source": 1 }, - { "begin": 26055, "end": 26460, "name": "POP", "source": 1 }, - { "begin": 25951, "end": 26460, "name": "POP", "source": 1 }, - { "begin": 25951, "end": 26460, "name": "POP", "source": 1 }, + { "begin": 26459, "end": 26522, "name": "JUMPDEST", "source": 2 }, + { "begin": 26366, "end": 26532, "name": "POP", "source": 2 }, + { "begin": 26134, "end": 26539, "name": "POP", "source": 2 }, + { "begin": 26028, "end": 26539, "name": "POP", "source": 2 }, + { "begin": 26028, "end": 26539, "name": "POP", "source": 2 }, { - "begin": 25951, - "end": 26460, + "begin": 26028, + "end": 26539, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 26466, - "end": 26741, + "begin": 26545, + "end": 26824, "name": "tag", - "source": 1, + "source": 2, "value": "144" }, - { "begin": 26466, "end": 26741, "name": "JUMPDEST", "source": 1 }, + { "begin": 26545, "end": 26824, "name": "JUMPDEST", "source": 2 }, { - "begin": 26583, - "end": 26593, + "begin": 26664, + "end": 26674, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 26604, - "end": 26698, + "begin": 26685, + "end": 26781, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "426" }, - { "begin": 26694, "end": 26697, "name": "DUP4", "source": 1 }, - { "begin": 26686, "end": 26692, "name": "DUP4", "source": 1 }, + { "begin": 26777, "end": 26780, "name": "DUP4", "source": 2 }, + { "begin": 26769, "end": 26775, "name": "DUP4", "source": 2 }, { - "begin": 26604, - "end": 26698, + "begin": 26685, + "end": 26781, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "143" }, { - "begin": 26604, - "end": 26698, + "begin": 26685, + "end": 26781, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 26604, - "end": 26698, + "begin": 26685, + "end": 26781, "name": "tag", - "source": 1, + "source": 2, "value": "426" }, - { "begin": 26604, "end": 26698, "name": "JUMPDEST", "source": 1 }, + { "begin": 26685, "end": 26781, "name": "JUMPDEST", "source": 2 }, { - "begin": 26730, - "end": 26734, + "begin": 26813, + "end": 26817, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 26725, "end": 26728, "name": "DUP4", "source": 1 }, - { "begin": 26721, "end": 26735, "name": "ADD", "source": 1 }, - { "begin": 26707, "end": 26735, "name": "SWAP1", "source": 1 }, - { "begin": 26707, "end": 26735, "name": "POP", "source": 1 }, - { "begin": 26466, "end": 26741, "name": "SWAP3", "source": 1 }, - { "begin": 26466, "end": 26741, "name": "SWAP2", "source": 1 }, - { "begin": 26466, "end": 26741, "name": "POP", "source": 1 }, - { "begin": 26466, "end": 26741, "name": "POP", "source": 1 }, + { "begin": 26808, "end": 26811, "name": "DUP4", "source": 2 }, + { "begin": 26804, "end": 26818, "name": "ADD", "source": 2 }, + { "begin": 26790, "end": 26818, "name": "SWAP1", "source": 2 }, + { "begin": 26790, "end": 26818, "name": "POP", "source": 2 }, + { "begin": 26545, "end": 26824, "name": "SWAP3", "source": 2 }, + { "begin": 26545, "end": 26824, "name": "SWAP2", "source": 2 }, + { "begin": 26545, "end": 26824, "name": "POP", "source": 2 }, + { "begin": 26545, "end": 26824, "name": "POP", "source": 2 }, { - "begin": 26466, - "end": 26741, + "begin": 26545, + "end": 26824, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 26747, - "end": 26884, + "begin": 26830, + "end": 26968, "name": "tag", - "source": 1, + "source": 2, "value": "145" }, - { "begin": 26747, "end": 26884, "name": "JUMPDEST", "source": 1 }, + { "begin": 26830, "end": 26968, "name": "JUMPDEST", "source": 2 }, { - "begin": 26841, - "end": 26845, + "begin": 26925, + "end": 26929, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 26873, - "end": 26877, + "begin": 26957, + "end": 26961, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 26868, "end": 26871, "name": "DUP3", "source": 1 }, - { "begin": 26864, "end": 26878, "name": "ADD", "source": 1 }, - { "begin": 26856, "end": 26878, "name": "SWAP1", "source": 1 }, - { "begin": 26856, "end": 26878, "name": "POP", "source": 1 }, - { "begin": 26747, "end": 26884, "name": "SWAP2", "source": 1 }, - { "begin": 26747, "end": 26884, "name": "SWAP1", "source": 1 }, - { "begin": 26747, "end": 26884, "name": "POP", "source": 1 }, + { "begin": 26952, "end": 26955, "name": "DUP3", "source": 2 }, + { "begin": 26948, "end": 26962, "name": "ADD", "source": 2 }, + { "begin": 26940, "end": 26962, "name": "SWAP1", "source": 2 }, + { "begin": 26940, "end": 26962, "name": "POP", "source": 2 }, + { "begin": 26830, "end": 26968, "name": "SWAP2", "source": 2 }, + { "begin": 26830, "end": 26968, "name": "SWAP1", "source": 2 }, + { "begin": 26830, "end": 26968, "name": "POP", "source": 2 }, { - "begin": 26747, - "end": 26884, + "begin": 26830, + "end": 26968, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 26952, - "end": 27876, + "begin": 27036, + "end": 27968, "name": "tag", - "source": 1, + "source": 2, "value": "146" }, - { "begin": 26952, "end": 27876, "name": "JUMPDEST", "source": 1 }, + { "begin": 27036, "end": 27968, "name": "JUMPDEST", "source": 2 }, { - "begin": 27119, - "end": 27122, + "begin": 27205, + "end": 27208, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 27148, - "end": 27226, + "begin": 27234, + "end": 27313, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "429" }, - { "begin": 27220, "end": 27225, "name": "DUP3", "source": 1 }, + { "begin": 27307, "end": 27312, "name": "DUP3", "source": 2 }, { - "begin": 27148, - "end": 27226, + "begin": 27234, + "end": 27313, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "138" }, { - "begin": 27148, - "end": 27226, + "begin": 27234, + "end": 27313, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 27148, - "end": 27226, + "begin": 27234, + "end": 27313, "name": "tag", - "source": 1, + "source": 2, "value": "429" }, - { "begin": 27148, "end": 27226, "name": "JUMPDEST", "source": 1 }, + { "begin": 27234, "end": 27313, "name": "JUMPDEST", "source": 2 }, { - "begin": 27242, - "end": 27352, + "begin": 27329, + "end": 27440, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "430" }, - { "begin": 27345, "end": 27351, "name": "DUP2", "source": 1 }, - { "begin": 27340, "end": 27343, "name": "DUP6", "source": 1 }, + { "begin": 27433, "end": 27439, "name": "DUP2", "source": 2 }, + { "begin": 27428, "end": 27431, "name": "DUP6", "source": 2 }, { - "begin": 27242, - "end": 27352, + "begin": 27329, + "end": 27440, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "139" }, { - "begin": 27242, - "end": 27352, + "begin": 27329, + "end": 27440, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 27242, - "end": 27352, + "begin": 27329, + "end": 27440, "name": "tag", - "source": 1, + "source": 2, "value": "430" }, - { "begin": 27242, "end": 27352, "name": "JUMPDEST", "source": 1 }, - { "begin": 27235, "end": 27352, "name": "SWAP4", "source": 1 }, - { "begin": 27235, "end": 27352, "name": "POP", "source": 1 }, + { "begin": 27329, "end": 27440, "name": "JUMPDEST", "source": 2 }, + { "begin": 27322, "end": 27440, "name": "SWAP4", "source": 2 }, + { "begin": 27322, "end": 27440, "name": "POP", "source": 2 }, { - "begin": 27376, - "end": 27456, + "begin": 27464, + "end": 27545, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "431" }, - { "begin": 27450, "end": 27455, "name": "DUP4", "source": 1 }, + { "begin": 27539, "end": 27544, "name": "DUP4", "source": 2 }, { - "begin": 27376, - "end": 27456, + "begin": 27464, + "end": 27545, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "140" }, { - "begin": 27376, - "end": 27456, + "begin": 27464, + "end": 27545, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 27376, - "end": 27456, + "begin": 27464, + "end": 27545, "name": "tag", - "source": 1, + "source": 2, "value": "431" }, - { "begin": 27376, "end": 27456, "name": "JUMPDEST", "source": 1 }, - { "begin": 27479, "end": 27486, "name": "DUP1", "source": 1 }, + { "begin": 27464, "end": 27545, "name": "JUMPDEST", "source": 2 }, + { "begin": 27568, "end": 27575, "name": "DUP1", "source": 2 }, { - "begin": 27510, - "end": 27511, + "begin": 27599, + "end": 27600, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 27495, - "end": 27851, + "begin": 27584, + "end": 27943, "name": "tag", - "source": 1, + "source": 2, "value": "432" }, - { "begin": 27495, "end": 27851, "name": "JUMPDEST", "source": 1 }, - { "begin": 27520, "end": 27526, "name": "DUP4", "source": 1 }, - { "begin": 27517, "end": 27518, "name": "DUP2", "source": 1 }, - { "begin": 27514, "end": 27527, "name": "LT", "source": 1 }, - { "begin": 27495, "end": 27851, "name": "ISZERO", "source": 1 }, + { "begin": 27584, "end": 27943, "name": "JUMPDEST", "source": 2 }, + { "begin": 27609, "end": 27615, "name": "DUP4", "source": 2 }, + { "begin": 27606, "end": 27607, "name": "DUP2", "source": 2 }, + { "begin": 27603, "end": 27616, "name": "LT", "source": 2 }, + { "begin": 27584, "end": 27943, "name": "ISZERO", "source": 2 }, { - "begin": 27495, - "end": 27851, + "begin": 27584, + "end": 27943, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "434" }, - { "begin": 27495, "end": 27851, "name": "JUMPI", "source": 1 }, - { "begin": 27596, "end": 27602, "name": "DUP2", "source": 1 }, - { "begin": 27590, "end": 27603, "name": "MLOAD", "source": 1 }, + { "begin": 27584, "end": 27943, "name": "JUMPI", "source": 2 }, + { "begin": 27685, "end": 27691, "name": "DUP2", "source": 2 }, + { "begin": 27679, "end": 27692, "name": "MLOAD", "source": 2 }, { - "begin": 27623, - "end": 27734, + "begin": 27712, + "end": 27825, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "435" }, - { "begin": 27730, "end": 27733, "name": "DUP9", "source": 1 }, - { "begin": 27715, "end": 27728, "name": "DUP3", "source": 1 }, + { "begin": 27821, "end": 27824, "name": "DUP9", "source": 2 }, + { "begin": 27806, "end": 27819, "name": "DUP3", "source": 2 }, { - "begin": 27623, - "end": 27734, + "begin": 27712, + "end": 27825, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "144" }, { - "begin": 27623, - "end": 27734, + "begin": 27712, + "end": 27825, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 27623, - "end": 27734, + "begin": 27712, + "end": 27825, "name": "tag", - "source": 1, + "source": 2, "value": "435" }, - { "begin": 27623, "end": 27734, "name": "JUMPDEST", "source": 1 }, - { "begin": 27616, "end": 27734, "name": "SWAP8", "source": 1 }, - { "begin": 27616, "end": 27734, "name": "POP", "source": 1 }, + { "begin": 27712, "end": 27825, "name": "JUMPDEST", "source": 2 }, + { "begin": 27705, "end": 27825, "name": "SWAP8", "source": 2 }, + { "begin": 27705, "end": 27825, "name": "POP", "source": 2 }, { - "begin": 27757, - "end": 27841, + "begin": 27848, + "end": 27933, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "436" }, - { "begin": 27834, "end": 27840, "name": "DUP4", "source": 1 }, + { "begin": 27926, "end": 27932, "name": "DUP4", "source": 2 }, { - "begin": 27757, - "end": 27841, + "begin": 27848, + "end": 27933, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "145" }, { - "begin": 27757, - "end": 27841, + "begin": 27848, + "end": 27933, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 27757, - "end": 27841, + "begin": 27848, + "end": 27933, "name": "tag", - "source": 1, + "source": 2, "value": "436" }, - { "begin": 27757, "end": 27841, "name": "JUMPDEST", "source": 1 }, - { "begin": 27747, "end": 27841, "name": "SWAP3", "source": 1 }, - { "begin": 27747, "end": 27841, "name": "POP", "source": 1 }, - { "begin": 27555, "end": 27851, "name": "POP", "source": 1 }, + { "begin": 27848, "end": 27933, "name": "JUMPDEST", "source": 2 }, + { "begin": 27838, "end": 27933, "name": "SWAP3", "source": 2 }, + { "begin": 27838, "end": 27933, "name": "POP", "source": 2 }, + { "begin": 27644, "end": 27943, "name": "POP", "source": 2 }, { - "begin": 27542, - "end": 27543, + "begin": 27631, + "end": 27632, "name": "PUSH", - "source": 1, + "source": 2, "value": "1" }, - { "begin": 27539, "end": 27540, "name": "DUP2", "source": 1 }, - { "begin": 27535, "end": 27544, "name": "ADD", "source": 1 }, - { "begin": 27530, "end": 27544, "name": "SWAP1", "source": 1 }, - { "begin": 27530, "end": 27544, "name": "POP", "source": 1 }, + { "begin": 27628, "end": 27629, "name": "DUP2", "source": 2 }, + { "begin": 27624, "end": 27633, "name": "ADD", "source": 2 }, + { "begin": 27619, "end": 27633, "name": "SWAP1", "source": 2 }, + { "begin": 27619, "end": 27633, "name": "POP", "source": 2 }, { - "begin": 27495, - "end": 27851, + "begin": 27584, + "end": 27943, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "432" }, - { "begin": 27495, "end": 27851, "name": "JUMP", "source": 1 }, + { "begin": 27584, "end": 27943, "name": "JUMP", "source": 2 }, { - "begin": 27495, - "end": 27851, + "begin": 27584, + "end": 27943, "name": "tag", - "source": 1, + "source": 2, "value": "434" }, - { "begin": 27495, "end": 27851, "name": "JUMPDEST", "source": 1 }, - { "begin": 27499, "end": 27513, "name": "POP", "source": 1 }, - { "begin": 27867, "end": 27870, "name": "DUP6", "source": 1 }, - { "begin": 27860, "end": 27870, "name": "SWAP4", "source": 1 }, - { "begin": 27860, "end": 27870, "name": "POP", "source": 1 }, - { "begin": 27124, "end": 27876, "name": "POP", "source": 1 }, - { "begin": 27124, "end": 27876, "name": "POP", "source": 1 }, - { "begin": 27124, "end": 27876, "name": "POP", "source": 1 }, - { "begin": 26952, "end": 27876, "name": "SWAP3", "source": 1 }, - { "begin": 26952, "end": 27876, "name": "SWAP2", "source": 1 }, - { "begin": 26952, "end": 27876, "name": "POP", "source": 1 }, - { "begin": 26952, "end": 27876, "name": "POP", "source": 1 }, - { - "begin": 26952, - "end": 27876, - "name": "JUMP", - "source": 1, + { "begin": 27584, "end": 27943, "name": "JUMPDEST", "source": 2 }, + { "begin": 27588, "end": 27602, "name": "POP", "source": 2 }, + { "begin": 27959, "end": 27962, "name": "DUP6", "source": 2 }, + { "begin": 27952, "end": 27962, "name": "SWAP4", "source": 2 }, + { "begin": 27952, "end": 27962, "name": "POP", "source": 2 }, + { "begin": 27210, "end": 27968, "name": "POP", "source": 2 }, + { "begin": 27210, "end": 27968, "name": "POP", "source": 2 }, + { "begin": 27210, "end": 27968, "name": "POP", "source": 2 }, + { "begin": 27036, "end": 27968, "name": "SWAP3", "source": 2 }, + { "begin": 27036, "end": 27968, "name": "SWAP2", "source": 2 }, + { "begin": 27036, "end": 27968, "name": "POP", "source": 2 }, + { "begin": 27036, "end": 27968, "name": "POP", "source": 2 }, + { + "begin": 27036, + "end": 27968, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 27882, - "end": 27997, + "begin": 27974, + "end": 28089, "name": "tag", - "source": 1, + "source": 2, "value": "147" }, - { "begin": 27882, "end": 27997, "name": "JUMPDEST", "source": 1 }, + { "begin": 27974, "end": 28089, "name": "JUMPDEST", "source": 2 }, { - "begin": 27967, - "end": 27990, + "begin": 28059, + "end": 28082, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "438" }, - { "begin": 27984, "end": 27989, "name": "DUP2", "source": 1 }, + { "begin": 28076, "end": 28081, "name": "DUP2", "source": 2 }, { - "begin": 27967, - "end": 27990, + "begin": 28059, + "end": 28082, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "112" }, { - "begin": 27967, - "end": 27990, + "begin": 28059, + "end": 28082, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 27967, - "end": 27990, + "begin": 28059, + "end": 28082, "name": "tag", - "source": 1, + "source": 2, "value": "438" }, - { "begin": 27967, "end": 27990, "name": "JUMPDEST", "source": 1 }, - { "begin": 27962, "end": 27965, "name": "DUP3", "source": 1 }, - { "begin": 27955, "end": 27991, "name": "MSTORE", "source": 1 }, - { "begin": 27882, "end": 27997, "name": "POP", "source": 1 }, - { "begin": 27882, "end": 27997, "name": "POP", "source": 1 }, + { "begin": 28059, "end": 28082, "name": "JUMPDEST", "source": 2 }, + { "begin": 28054, "end": 28057, "name": "DUP3", "source": 2 }, + { "begin": 28047, "end": 28083, "name": "MSTORE", "source": 2 }, + { "begin": 27974, "end": 28089, "name": "POP", "source": 2 }, + { "begin": 27974, "end": 28089, "name": "POP", "source": 2 }, { - "begin": 27882, - "end": 27997, + "begin": 27974, + "end": 28089, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 28003, - "end": 28958, + "begin": 28095, + "end": 29062, "name": "tag", - "source": 1, + "source": 2, "value": "47" }, - { "begin": 28003, "end": 28958, "name": "JUMPDEST", "source": 1 }, + { "begin": 28095, "end": 29062, "name": "JUMPDEST", "source": 2 }, { - "begin": 28330, - "end": 28334, + "begin": 28428, + "end": 28432, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 28368, - "end": 28371, + "begin": 28466, + "end": 28469, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 28357, "end": 28366, "name": "DUP3", "source": 1 }, - { "begin": 28353, "end": 28372, "name": "ADD", "source": 1 }, - { "begin": 28345, "end": 28372, "name": "SWAP1", "source": 1 }, - { "begin": 28345, "end": 28372, "name": "POP", "source": 1 }, - { "begin": 28418, "end": 28427, "name": "DUP2", "source": 1 }, - { "begin": 28412, "end": 28416, "name": "DUP2", "source": 1 }, - { "begin": 28408, "end": 28428, "name": "SUB", "source": 1 }, + { "begin": 28455, "end": 28464, "name": "DUP3", "source": 2 }, + { "begin": 28451, "end": 28470, "name": "ADD", "source": 2 }, + { "begin": 28443, "end": 28470, "name": "SWAP1", "source": 2 }, + { "begin": 28443, "end": 28470, "name": "POP", "source": 2 }, + { "begin": 28516, "end": 28525, "name": "DUP2", "source": 2 }, + { "begin": 28510, "end": 28514, "name": "DUP2", "source": 2 }, + { "begin": 28506, "end": 28526, "name": "SUB", "source": 2 }, { - "begin": 28404, - "end": 28405, + "begin": 28502, + "end": 28503, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 28393, "end": 28402, "name": "DUP4", "source": 1 }, - { "begin": 28389, "end": 28406, "name": "ADD", "source": 1 }, - { "begin": 28382, "end": 28429, "name": "MSTORE", "source": 1 }, + { "begin": 28491, "end": 28500, "name": "DUP4", "source": 2 }, + { "begin": 28487, "end": 28504, "name": "ADD", "source": 2 }, + { "begin": 28480, "end": 28527, "name": "MSTORE", "source": 2 }, { - "begin": 28446, - "end": 28602, + "begin": 28544, + "end": 28702, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "440" }, - { "begin": 28597, "end": 28601, "name": "DUP2", "source": 1 }, - { "begin": 28588, "end": 28594, "name": "DUP8", "source": 1 }, + { "begin": 28697, "end": 28701, "name": "DUP2", "source": 2 }, + { "begin": 28688, "end": 28694, "name": "DUP8", "source": 2 }, { - "begin": 28446, - "end": 28602, + "begin": 28544, + "end": 28702, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "146" }, { - "begin": 28446, - "end": 28602, + "begin": 28544, + "end": 28702, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 28446, - "end": 28602, + "begin": 28544, + "end": 28702, "name": "tag", - "source": 1, + "source": 2, "value": "440" }, - { "begin": 28446, "end": 28602, "name": "JUMPDEST", "source": 1 }, - { "begin": 28438, "end": 28602, "name": "SWAP1", "source": 1 }, - { "begin": 28438, "end": 28602, "name": "POP", "source": 1 }, + { "begin": 28544, "end": 28702, "name": "JUMPDEST", "source": 2 }, + { "begin": 28536, "end": 28702, "name": "SWAP1", "source": 2 }, + { "begin": 28536, "end": 28702, "name": "POP", "source": 2 }, { - "begin": 28612, - "end": 28682, + "begin": 28712, + "end": 28782, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "441" }, { - "begin": 28678, - "end": 28680, + "begin": 28778, + "end": 28780, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 28667, "end": 28676, "name": "DUP4", "source": 1 }, - { "begin": 28663, "end": 28681, "name": "ADD", "source": 1 }, - { "begin": 28654, "end": 28660, "name": "DUP7", "source": 1 }, + { "begin": 28767, "end": 28776, "name": "DUP4", "source": 2 }, + { "begin": 28763, "end": 28781, "name": "ADD", "source": 2 }, + { "begin": 28754, "end": 28760, "name": "DUP7", "source": 2 }, { - "begin": 28612, - "end": 28682, + "begin": 28712, + "end": 28782, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "147" }, { - "begin": 28612, - "end": 28682, + "begin": 28712, + "end": 28782, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 28612, - "end": 28682, + "begin": 28712, + "end": 28782, "name": "tag", - "source": 1, + "source": 2, "value": "441" }, - { "begin": 28612, "end": 28682, "name": "JUMPDEST", "source": 1 }, - { "begin": 28729, "end": 28738, "name": "DUP2", "source": 1 }, - { "begin": 28723, "end": 28727, "name": "DUP2", "source": 1 }, - { "begin": 28719, "end": 28739, "name": "SUB", "source": 1 }, + { "begin": 28712, "end": 28782, "name": "JUMPDEST", "source": 2 }, + { "begin": 28829, "end": 28838, "name": "DUP2", "source": 2 }, + { "begin": 28823, "end": 28827, "name": "DUP2", "source": 2 }, + { "begin": 28819, "end": 28839, "name": "SUB", "source": 2 }, { - "begin": 28714, - "end": 28716, + "begin": 28814, + "end": 28816, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 28703, "end": 28712, "name": "DUP4", "source": 1 }, - { "begin": 28699, "end": 28717, "name": "ADD", "source": 1 }, - { "begin": 28692, "end": 28740, "name": "MSTORE", "source": 1 }, + { "begin": 28803, "end": 28812, "name": "DUP4", "source": 2 }, + { "begin": 28799, "end": 28817, "name": "ADD", "source": 2 }, + { "begin": 28792, "end": 28840, "name": "MSTORE", "source": 2 }, { - "begin": 28757, - "end": 28871, + "begin": 28857, + "end": 28975, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "442" }, - { "begin": 28866, "end": 28870, "name": "DUP2", "source": 1 }, - { "begin": 28857, "end": 28863, "name": "DUP6", "source": 1 }, + { "begin": 28970, "end": 28974, "name": "DUP2", "source": 2 }, + { "begin": 28961, "end": 28967, "name": "DUP6", "source": 2 }, { - "begin": 28757, - "end": 28871, + "begin": 28857, + "end": 28975, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 28757, - "end": 28871, + "begin": 28857, + "end": 28975, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 28757, - "end": 28871, + "begin": 28857, + "end": 28975, "name": "tag", - "source": 1, + "source": 2, "value": "442" }, - { "begin": 28757, "end": 28871, "name": "JUMPDEST", "source": 1 }, - { "begin": 28749, "end": 28871, "name": "SWAP1", "source": 1 }, - { "begin": 28749, "end": 28871, "name": "POP", "source": 1 }, + { "begin": 28857, "end": 28975, "name": "JUMPDEST", "source": 2 }, + { "begin": 28849, "end": 28975, "name": "SWAP1", "source": 2 }, + { "begin": 28849, "end": 28975, "name": "POP", "source": 2 }, { - "begin": 28881, - "end": 28951, + "begin": 28985, + "end": 29055, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "443" }, { - "begin": 28947, - "end": 28949, + "begin": 29051, + "end": 29053, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 28936, "end": 28945, "name": "DUP4", "source": 1 }, - { "begin": 28932, "end": 28950, "name": "ADD", "source": 1 }, - { "begin": 28923, "end": 28929, "name": "DUP5", "source": 1 }, + { "begin": 29040, "end": 29049, "name": "DUP4", "source": 2 }, + { "begin": 29036, "end": 29054, "name": "ADD", "source": 2 }, + { "begin": 29027, "end": 29033, "name": "DUP5", "source": 2 }, { - "begin": 28881, - "end": 28951, + "begin": 28985, + "end": 29055, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "137" }, { - "begin": 28881, - "end": 28951, + "begin": 28985, + "end": 29055, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 28881, - "end": 28951, + "begin": 28985, + "end": 29055, "name": "tag", - "source": 1, + "source": 2, "value": "443" }, - { "begin": 28881, "end": 28951, "name": "JUMPDEST", "source": 1 }, - { "begin": 28003, "end": 28958, "name": "SWAP6", "source": 1 }, - { "begin": 28003, "end": 28958, "name": "SWAP5", "source": 1 }, - { "begin": 28003, "end": 28958, "name": "POP", "source": 1 }, - { "begin": 28003, "end": 28958, "name": "POP", "source": 1 }, - { "begin": 28003, "end": 28958, "name": "POP", "source": 1 }, - { "begin": 28003, "end": 28958, "name": "POP", "source": 1 }, - { "begin": 28003, "end": 28958, "name": "POP", "source": 1 }, + { "begin": 28985, "end": 29055, "name": "JUMPDEST", "source": 2 }, + { "begin": 28095, "end": 29062, "name": "SWAP6", "source": 2 }, + { "begin": 28095, "end": 29062, "name": "SWAP5", "source": 2 }, + { "begin": 28095, "end": 29062, "name": "POP", "source": 2 }, + { "begin": 28095, "end": 29062, "name": "POP", "source": 2 }, + { "begin": 28095, "end": 29062, "name": "POP", "source": 2 }, + { "begin": 28095, "end": 29062, "name": "POP", "source": 2 }, + { "begin": 28095, "end": 29062, "name": "POP", "source": 2 }, { - "begin": 28003, - "end": 28958, + "begin": 28095, + "end": 29062, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 28964, - "end": 29082, + "begin": 29068, + "end": 29186, "name": "tag", - "source": 1, + "source": 2, "value": "148" }, - { "begin": 28964, "end": 29082, "name": "JUMPDEST", "source": 1 }, + { "begin": 29068, "end": 29186, "name": "JUMPDEST", "source": 2 }, { - "begin": 29051, - "end": 29075, + "begin": 29155, + "end": 29179, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "445" }, - { "begin": 29069, "end": 29074, "name": "DUP2", "source": 1 }, + { "begin": 29173, "end": 29178, "name": "DUP2", "source": 2 }, { - "begin": 29051, - "end": 29075, + "begin": 29155, + "end": 29179, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "106" }, { - "begin": 29051, - "end": 29075, + "begin": 29155, + "end": 29179, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 29051, - "end": 29075, + "begin": 29155, + "end": 29179, "name": "tag", - "source": 1, + "source": 2, "value": "445" }, - { "begin": 29051, "end": 29075, "name": "JUMPDEST", "source": 1 }, - { "begin": 29046, "end": 29049, "name": "DUP3", "source": 1 }, - { "begin": 29039, "end": 29076, "name": "MSTORE", "source": 1 }, - { "begin": 28964, "end": 29082, "name": "POP", "source": 1 }, - { "begin": 28964, "end": 29082, "name": "POP", "source": 1 }, + { "begin": 29155, "end": 29179, "name": "JUMPDEST", "source": 2 }, + { "begin": 29150, "end": 29153, "name": "DUP3", "source": 2 }, + { "begin": 29143, "end": 29180, "name": "MSTORE", "source": 2 }, + { "begin": 29068, "end": 29186, "name": "POP", "source": 2 }, + { "begin": 29068, "end": 29186, "name": "POP", "source": 2 }, { - "begin": 28964, - "end": 29082, + "begin": 29068, + "end": 29186, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 29088, - "end": 29911, + "begin": 29192, + "end": 30023, "name": "tag", - "source": 1, + "source": 2, "value": "53" }, - { "begin": 29088, "end": 29911, "name": "JUMPDEST", "source": 1 }, + { "begin": 29192, "end": 30023, "name": "JUMPDEST", "source": 2 }, { - "begin": 29347, - "end": 29351, + "begin": 29455, + "end": 29459, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 29385, - "end": 29388, + "begin": 29493, + "end": 29496, "name": "PUSH", - "source": 1, + "source": 2, "value": "A0" }, - { "begin": 29374, "end": 29383, "name": "DUP3", "source": 1 }, - { "begin": 29370, "end": 29389, "name": "ADD", "source": 1 }, - { "begin": 29362, "end": 29389, "name": "SWAP1", "source": 1 }, - { "begin": 29362, "end": 29389, "name": "POP", "source": 1 }, + { "begin": 29482, "end": 29491, "name": "DUP3", "source": 2 }, + { "begin": 29478, "end": 29497, "name": "ADD", "source": 2 }, + { "begin": 29470, "end": 29497, "name": "SWAP1", "source": 2 }, + { "begin": 29470, "end": 29497, "name": "POP", "source": 2 }, { - "begin": 29399, - "end": 29470, + "begin": 29507, + "end": 29578, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "447" }, { - "begin": 29467, - "end": 29468, + "begin": 29575, + "end": 29576, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 29456, "end": 29465, "name": "DUP4", "source": 1 }, - { "begin": 29452, "end": 29469, "name": "ADD", "source": 1 }, - { "begin": 29443, "end": 29449, "name": "DUP9", "source": 1 }, + { "begin": 29564, "end": 29573, "name": "DUP4", "source": 2 }, + { "begin": 29560, "end": 29577, "name": "ADD", "source": 2 }, + { "begin": 29551, "end": 29557, "name": "DUP9", "source": 2 }, { - "begin": 29399, - "end": 29470, + "begin": 29507, + "end": 29578, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "148" }, { - "begin": 29399, - "end": 29470, + "begin": 29507, + "end": 29578, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 29399, - "end": 29470, + "begin": 29507, + "end": 29578, "name": "tag", - "source": 1, + "source": 2, "value": "447" }, - { "begin": 29399, "end": 29470, "name": "JUMPDEST", "source": 1 }, + { "begin": 29507, "end": 29578, "name": "JUMPDEST", "source": 2 }, { - "begin": 29480, - "end": 29552, + "begin": 29588, + "end": 29660, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "448" }, { - "begin": 29548, - "end": 29550, + "begin": 29656, + "end": 29658, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 29537, "end": 29546, "name": "DUP4", "source": 1 }, - { "begin": 29533, "end": 29551, "name": "ADD", "source": 1 }, - { "begin": 29524, "end": 29530, "name": "DUP8", "source": 1 }, + { "begin": 29645, "end": 29654, "name": "DUP4", "source": 2 }, + { "begin": 29641, "end": 29659, "name": "ADD", "source": 2 }, + { "begin": 29632, "end": 29638, "name": "DUP8", "source": 2 }, { - "begin": 29480, - "end": 29552, + "begin": 29588, + "end": 29660, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "136" }, { - "begin": 29480, - "end": 29552, + "begin": 29588, + "end": 29660, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 29480, - "end": 29552, + "begin": 29588, + "end": 29660, "name": "tag", - "source": 1, + "source": 2, "value": "448" }, - { "begin": 29480, "end": 29552, "name": "JUMPDEST", "source": 1 }, + { "begin": 29588, "end": 29660, "name": "JUMPDEST", "source": 2 }, { - "begin": 29562, - "end": 29634, + "begin": 29670, + "end": 29742, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "449" }, { - "begin": 29630, - "end": 29632, + "begin": 29738, + "end": 29740, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 29619, "end": 29628, "name": "DUP4", "source": 1 }, - { "begin": 29615, "end": 29633, "name": "ADD", "source": 1 }, - { "begin": 29606, "end": 29612, "name": "DUP7", "source": 1 }, + { "begin": 29727, "end": 29736, "name": "DUP4", "source": 2 }, + { "begin": 29723, "end": 29741, "name": "ADD", "source": 2 }, + { "begin": 29714, "end": 29720, "name": "DUP7", "source": 2 }, { - "begin": 29562, - "end": 29634, + "begin": 29670, + "end": 29742, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "136" }, { - "begin": 29562, - "end": 29634, + "begin": 29670, + "end": 29742, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 29562, - "end": 29634, + "begin": 29670, + "end": 29742, "name": "tag", - "source": 1, + "source": 2, "value": "449" }, - { "begin": 29562, "end": 29634, "name": "JUMPDEST", "source": 1 }, - { "begin": 29681, "end": 29690, "name": "DUP2", "source": 1 }, - { "begin": 29675, "end": 29679, "name": "DUP2", "source": 1 }, - { "begin": 29671, "end": 29691, "name": "SUB", "source": 1 }, + { "begin": 29670, "end": 29742, "name": "JUMPDEST", "source": 2 }, + { "begin": 29789, "end": 29798, "name": "DUP2", "source": 2 }, + { "begin": 29783, "end": 29787, "name": "DUP2", "source": 2 }, + { "begin": 29779, "end": 29799, "name": "SUB", "source": 2 }, { - "begin": 29666, - "end": 29668, + "begin": 29774, + "end": 29776, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 29655, "end": 29664, "name": "DUP4", "source": 1 }, - { "begin": 29651, "end": 29669, "name": "ADD", "source": 1 }, - { "begin": 29644, "end": 29692, "name": "MSTORE", "source": 1 }, + { "begin": 29763, "end": 29772, "name": "DUP4", "source": 2 }, + { "begin": 29759, "end": 29777, "name": "ADD", "source": 2 }, + { "begin": 29752, "end": 29800, "name": "MSTORE", "source": 2 }, { - "begin": 29709, - "end": 29823, + "begin": 29817, + "end": 29935, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "450" }, - { "begin": 29818, "end": 29822, "name": "DUP2", "source": 1 }, - { "begin": 29809, "end": 29815, "name": "DUP6", "source": 1 }, + { "begin": 29930, "end": 29934, "name": "DUP2", "source": 2 }, + { "begin": 29921, "end": 29927, "name": "DUP6", "source": 2 }, { - "begin": 29709, - "end": 29823, + "begin": 29817, + "end": 29935, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 29709, - "end": 29823, + "begin": 29817, + "end": 29935, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 29709, - "end": 29823, + "begin": 29817, + "end": 29935, "name": "tag", - "source": 1, + "source": 2, "value": "450" }, - { "begin": 29709, "end": 29823, "name": "JUMPDEST", "source": 1 }, - { "begin": 29701, "end": 29823, "name": "SWAP1", "source": 1 }, - { "begin": 29701, "end": 29823, "name": "POP", "source": 1 }, + { "begin": 29817, "end": 29935, "name": "JUMPDEST", "source": 2 }, + { "begin": 29809, "end": 29935, "name": "SWAP1", "source": 2 }, + { "begin": 29809, "end": 29935, "name": "POP", "source": 2 }, { - "begin": 29833, - "end": 29904, + "begin": 29945, + "end": 30016, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "451" }, { - "begin": 29899, - "end": 29902, + "begin": 30011, + "end": 30014, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 29888, "end": 29897, "name": "DUP4", "source": 1 }, - { "begin": 29884, "end": 29903, "name": "ADD", "source": 1 }, - { "begin": 29875, "end": 29881, "name": "DUP5", "source": 1 }, + { "begin": 30000, "end": 30009, "name": "DUP4", "source": 2 }, + { "begin": 29996, "end": 30015, "name": "ADD", "source": 2 }, + { "begin": 29987, "end": 29993, "name": "DUP5", "source": 2 }, { - "begin": 29833, - "end": 29904, + "begin": 29945, + "end": 30016, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "137" }, { - "begin": 29833, - "end": 29904, + "begin": 29945, + "end": 30016, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 29833, - "end": 29904, + "begin": 29945, + "end": 30016, "name": "tag", - "source": 1, + "source": 2, "value": "451" }, - { "begin": 29833, "end": 29904, "name": "JUMPDEST", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "SWAP7", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "SWAP6", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "POP", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "POP", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "POP", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "POP", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "POP", "source": 1 }, - { "begin": 29088, "end": 29911, "name": "POP", "source": 1 }, + { "begin": 29945, "end": 30016, "name": "JUMPDEST", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "SWAP7", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "SWAP6", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "POP", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "POP", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "POP", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "POP", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "POP", "source": 2 }, + { "begin": 29192, "end": 30023, "name": "POP", "source": 2 }, { - "begin": 29088, - "end": 29911, + "begin": 29192, + "end": 30023, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 29917, - "end": 30792, + "begin": 30029, + "end": 30920, "name": "tag", - "source": 1, + "source": 2, "value": "59" }, - { "begin": 29917, "end": 30792, "name": "JUMPDEST", "source": 1 }, + { "begin": 30029, "end": 30920, "name": "JUMPDEST", "source": 2 }, { - "begin": 30204, - "end": 30208, + "begin": 30324, + "end": 30328, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 30242, - "end": 30245, + "begin": 30362, + "end": 30365, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 30231, "end": 30240, "name": "DUP3", "source": 1 }, - { "begin": 30227, "end": 30246, "name": "ADD", "source": 1 }, - { "begin": 30219, "end": 30246, "name": "SWAP1", "source": 1 }, - { "begin": 30219, "end": 30246, "name": "POP", "source": 1 }, - { "begin": 30292, "end": 30301, "name": "DUP2", "source": 1 }, - { "begin": 30286, "end": 30290, "name": "DUP2", "source": 1 }, - { "begin": 30282, "end": 30302, "name": "SUB", "source": 1 }, + { "begin": 30351, "end": 30360, "name": "DUP3", "source": 2 }, + { "begin": 30347, "end": 30366, "name": "ADD", "source": 2 }, + { "begin": 30339, "end": 30366, "name": "SWAP1", "source": 2 }, + { "begin": 30339, "end": 30366, "name": "POP", "source": 2 }, + { "begin": 30412, "end": 30421, "name": "DUP2", "source": 2 }, + { "begin": 30406, "end": 30410, "name": "DUP2", "source": 2 }, + { "begin": 30402, "end": 30422, "name": "SUB", "source": 2 }, { - "begin": 30278, - "end": 30279, + "begin": 30398, + "end": 30399, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 30267, "end": 30276, "name": "DUP4", "source": 1 }, - { "begin": 30263, "end": 30280, "name": "ADD", "source": 1 }, - { "begin": 30256, "end": 30303, "name": "MSTORE", "source": 1 }, + { "begin": 30387, "end": 30396, "name": "DUP4", "source": 2 }, + { "begin": 30383, "end": 30400, "name": "ADD", "source": 2 }, + { "begin": 30376, "end": 30423, "name": "MSTORE", "source": 2 }, { - "begin": 30320, - "end": 30434, + "begin": 30440, + "end": 30558, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "453" }, - { "begin": 30429, "end": 30433, "name": "DUP2", "source": 1 }, - { "begin": 30420, "end": 30426, "name": "DUP8", "source": 1 }, + { "begin": 30553, "end": 30557, "name": "DUP2", "source": 2 }, + { "begin": 30544, "end": 30550, "name": "DUP8", "source": 2 }, { - "begin": 30320, - "end": 30434, + "begin": 30440, + "end": 30558, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 30320, - "end": 30434, + "begin": 30440, + "end": 30558, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 30320, - "end": 30434, + "begin": 30440, + "end": 30558, "name": "tag", - "source": 1, + "source": 2, "value": "453" }, - { "begin": 30320, "end": 30434, "name": "JUMPDEST", "source": 1 }, - { "begin": 30312, "end": 30434, "name": "SWAP1", "source": 1 }, - { "begin": 30312, "end": 30434, "name": "POP", "source": 1 }, + { "begin": 30440, "end": 30558, "name": "JUMPDEST", "source": 2 }, + { "begin": 30432, "end": 30558, "name": "SWAP1", "source": 2 }, + { "begin": 30432, "end": 30558, "name": "POP", "source": 2 }, { - "begin": 30444, - "end": 30516, + "begin": 30568, + "end": 30640, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "454" }, { - "begin": 30512, - "end": 30514, + "begin": 30636, + "end": 30638, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 30501, "end": 30510, "name": "DUP4", "source": 1 }, - { "begin": 30497, "end": 30515, "name": "ADD", "source": 1 }, - { "begin": 30488, "end": 30494, "name": "DUP7", "source": 1 }, + { "begin": 30625, "end": 30634, "name": "DUP4", "source": 2 }, + { "begin": 30621, "end": 30639, "name": "ADD", "source": 2 }, + { "begin": 30612, "end": 30618, "name": "DUP7", "source": 2 }, { - "begin": 30444, - "end": 30516, + "begin": 30568, + "end": 30640, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "136" }, { - "begin": 30444, - "end": 30516, + "begin": 30568, + "end": 30640, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 30444, - "end": 30516, + "begin": 30568, + "end": 30640, "name": "tag", - "source": 1, + "source": 2, "value": "454" }, - { "begin": 30444, "end": 30516, "name": "JUMPDEST", "source": 1 }, - { "begin": 30563, "end": 30572, "name": "DUP2", "source": 1 }, - { "begin": 30557, "end": 30561, "name": "DUP2", "source": 1 }, - { "begin": 30553, "end": 30573, "name": "SUB", "source": 1 }, + { "begin": 30568, "end": 30640, "name": "JUMPDEST", "source": 2 }, + { "begin": 30687, "end": 30696, "name": "DUP2", "source": 2 }, + { "begin": 30681, "end": 30685, "name": "DUP2", "source": 2 }, + { "begin": 30677, "end": 30697, "name": "SUB", "source": 2 }, { - "begin": 30548, - "end": 30550, + "begin": 30672, + "end": 30674, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 30537, "end": 30546, "name": "DUP4", "source": 1 }, - { "begin": 30533, "end": 30551, "name": "ADD", "source": 1 }, - { "begin": 30526, "end": 30574, "name": "MSTORE", "source": 1 }, + { "begin": 30661, "end": 30670, "name": "DUP4", "source": 2 }, + { "begin": 30657, "end": 30675, "name": "ADD", "source": 2 }, + { "begin": 30650, "end": 30698, "name": "MSTORE", "source": 2 }, { - "begin": 30591, - "end": 30705, + "begin": 30715, + "end": 30833, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "455" }, - { "begin": 30700, "end": 30704, "name": "DUP2", "source": 1 }, - { "begin": 30691, "end": 30697, "name": "DUP6", "source": 1 }, + { "begin": 30828, "end": 30832, "name": "DUP2", "source": 2 }, + { "begin": 30819, "end": 30825, "name": "DUP6", "source": 2 }, { - "begin": 30591, - "end": 30705, + "begin": 30715, + "end": 30833, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 30591, - "end": 30705, + "begin": 30715, + "end": 30833, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 30591, - "end": 30705, + "begin": 30715, + "end": 30833, "name": "tag", - "source": 1, + "source": 2, "value": "455" }, - { "begin": 30591, "end": 30705, "name": "JUMPDEST", "source": 1 }, - { "begin": 30583, "end": 30705, "name": "SWAP1", "source": 1 }, - { "begin": 30583, "end": 30705, "name": "POP", "source": 1 }, + { "begin": 30715, "end": 30833, "name": "JUMPDEST", "source": 2 }, + { "begin": 30707, "end": 30833, "name": "SWAP1", "source": 2 }, + { "begin": 30707, "end": 30833, "name": "POP", "source": 2 }, { - "begin": 30715, - "end": 30785, + "begin": 30843, + "end": 30913, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "456" }, { - "begin": 30781, - "end": 30783, + "begin": 30909, + "end": 30911, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 30770, "end": 30779, "name": "DUP4", "source": 1 }, - { "begin": 30766, "end": 30784, "name": "ADD", "source": 1 }, - { "begin": 30757, "end": 30763, "name": "DUP5", "source": 1 }, + { "begin": 30898, "end": 30907, "name": "DUP4", "source": 2 }, + { "begin": 30894, "end": 30912, "name": "ADD", "source": 2 }, + { "begin": 30885, "end": 30891, "name": "DUP5", "source": 2 }, { - "begin": 30715, - "end": 30785, + "begin": 30843, + "end": 30913, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "137" }, { - "begin": 30715, - "end": 30785, + "begin": 30843, + "end": 30913, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 30715, - "end": 30785, + "begin": 30843, + "end": 30913, "name": "tag", - "source": 1, + "source": 2, "value": "456" }, - { "begin": 30715, "end": 30785, "name": "JUMPDEST", "source": 1 }, - { "begin": 29917, "end": 30792, "name": "SWAP6", "source": 1 }, - { "begin": 29917, "end": 30792, "name": "SWAP5", "source": 1 }, - { "begin": 29917, "end": 30792, "name": "POP", "source": 1 }, - { "begin": 29917, "end": 30792, "name": "POP", "source": 1 }, - { "begin": 29917, "end": 30792, "name": "POP", "source": 1 }, - { "begin": 29917, "end": 30792, "name": "POP", "source": 1 }, - { "begin": 29917, "end": 30792, "name": "POP", "source": 1 }, + { "begin": 30843, "end": 30913, "name": "JUMPDEST", "source": 2 }, + { "begin": 30029, "end": 30920, "name": "SWAP6", "source": 2 }, + { "begin": 30029, "end": 30920, "name": "SWAP5", "source": 2 }, + { "begin": 30029, "end": 30920, "name": "POP", "source": 2 }, + { "begin": 30029, "end": 30920, "name": "POP", "source": 2 }, + { "begin": 30029, "end": 30920, "name": "POP", "source": 2 }, + { "begin": 30029, "end": 30920, "name": "POP", "source": 2 }, + { "begin": 30029, "end": 30920, "name": "POP", "source": 2 }, { - "begin": 29917, - "end": 30792, + "begin": 30029, + "end": 30920, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 30798, - "end": 31510, + "begin": 30926, + "end": 31646, "name": "tag", - "source": 1, + "source": 2, "value": "65" }, - { "begin": 30798, "end": 31510, "name": "JUMPDEST", "source": 1 }, + { "begin": 30926, "end": 31646, "name": "JUMPDEST", "source": 2 }, { - "begin": 31029, - "end": 31033, + "begin": 31161, + "end": 31165, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 31067, - "end": 31070, + "begin": 31199, + "end": 31202, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 31056, "end": 31065, "name": "DUP3", "source": 1 }, - { "begin": 31052, "end": 31071, "name": "ADD", "source": 1 }, - { "begin": 31044, "end": 31071, "name": "SWAP1", "source": 1 }, - { "begin": 31044, "end": 31071, "name": "POP", "source": 1 }, + { "begin": 31188, "end": 31197, "name": "DUP3", "source": 2 }, + { "begin": 31184, "end": 31203, "name": "ADD", "source": 2 }, + { "begin": 31176, "end": 31203, "name": "SWAP1", "source": 2 }, + { "begin": 31176, "end": 31203, "name": "POP", "source": 2 }, { - "begin": 31081, - "end": 31152, + "begin": 31213, + "end": 31284, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "458" }, { - "begin": 31149, - "end": 31150, + "begin": 31281, + "end": 31282, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 31138, "end": 31147, "name": "DUP4", "source": 1 }, - { "begin": 31134, "end": 31151, "name": "ADD", "source": 1 }, - { "begin": 31125, "end": 31131, "name": "DUP8", "source": 1 }, + { "begin": 31270, "end": 31279, "name": "DUP4", "source": 2 }, + { "begin": 31266, "end": 31283, "name": "ADD", "source": 2 }, + { "begin": 31257, "end": 31263, "name": "DUP8", "source": 2 }, { - "begin": 31081, - "end": 31152, + "begin": 31213, + "end": 31284, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "148" }, { - "begin": 31081, - "end": 31152, + "begin": 31213, + "end": 31284, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 31081, - "end": 31152, + "begin": 31213, + "end": 31284, "name": "tag", - "source": 1, + "source": 2, "value": "458" }, - { "begin": 31081, "end": 31152, "name": "JUMPDEST", "source": 1 }, + { "begin": 31213, "end": 31284, "name": "JUMPDEST", "source": 2 }, { - "begin": 31162, - "end": 31234, + "begin": 31294, + "end": 31366, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "459" }, { - "begin": 31230, - "end": 31232, + "begin": 31362, + "end": 31364, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 31219, "end": 31228, "name": "DUP4", "source": 1 }, - { "begin": 31215, "end": 31233, "name": "ADD", "source": 1 }, - { "begin": 31206, "end": 31212, "name": "DUP7", "source": 1 }, + { "begin": 31351, "end": 31360, "name": "DUP4", "source": 2 }, + { "begin": 31347, "end": 31365, "name": "ADD", "source": 2 }, + { "begin": 31338, "end": 31344, "name": "DUP7", "source": 2 }, { - "begin": 31162, - "end": 31234, + "begin": 31294, + "end": 31366, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "136" }, { - "begin": 31162, - "end": 31234, + "begin": 31294, + "end": 31366, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 31162, - "end": 31234, + "begin": 31294, + "end": 31366, "name": "tag", - "source": 1, + "source": 2, "value": "459" }, - { "begin": 31162, "end": 31234, "name": "JUMPDEST", "source": 1 }, - { "begin": 31281, "end": 31290, "name": "DUP2", "source": 1 }, - { "begin": 31275, "end": 31279, "name": "DUP2", "source": 1 }, - { "begin": 31271, "end": 31291, "name": "SUB", "source": 1 }, + { "begin": 31294, "end": 31366, "name": "JUMPDEST", "source": 2 }, + { "begin": 31413, "end": 31422, "name": "DUP2", "source": 2 }, + { "begin": 31407, "end": 31411, "name": "DUP2", "source": 2 }, + { "begin": 31403, "end": 31423, "name": "SUB", "source": 2 }, { - "begin": 31266, - "end": 31268, + "begin": 31398, + "end": 31400, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 31255, "end": 31264, "name": "DUP4", "source": 1 }, - { "begin": 31251, "end": 31269, "name": "ADD", "source": 1 }, - { "begin": 31244, "end": 31292, "name": "MSTORE", "source": 1 }, + { "begin": 31387, "end": 31396, "name": "DUP4", "source": 2 }, + { "begin": 31383, "end": 31401, "name": "ADD", "source": 2 }, + { "begin": 31376, "end": 31424, "name": "MSTORE", "source": 2 }, { - "begin": 31309, - "end": 31423, + "begin": 31441, + "end": 31559, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "460" }, - { "begin": 31418, "end": 31422, "name": "DUP2", "source": 1 }, - { "begin": 31409, "end": 31415, "name": "DUP6", "source": 1 }, + { "begin": 31554, "end": 31558, "name": "DUP2", "source": 2 }, + { "begin": 31545, "end": 31551, "name": "DUP6", "source": 2 }, { - "begin": 31309, - "end": 31423, + "begin": 31441, + "end": 31559, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 31309, - "end": 31423, + "begin": 31441, + "end": 31559, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 31309, - "end": 31423, + "begin": 31441, + "end": 31559, "name": "tag", - "source": 1, + "source": 2, "value": "460" }, - { "begin": 31309, "end": 31423, "name": "JUMPDEST", "source": 1 }, - { "begin": 31301, "end": 31423, "name": "SWAP1", "source": 1 }, - { "begin": 31301, "end": 31423, "name": "POP", "source": 1 }, + { "begin": 31441, "end": 31559, "name": "JUMPDEST", "source": 2 }, + { "begin": 31433, "end": 31559, "name": "SWAP1", "source": 2 }, + { "begin": 31433, "end": 31559, "name": "POP", "source": 2 }, { - "begin": 31433, - "end": 31503, + "begin": 31569, + "end": 31639, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "461" }, { - "begin": 31499, - "end": 31501, + "begin": 31635, + "end": 31637, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 31488, "end": 31497, "name": "DUP4", "source": 1 }, - { "begin": 31484, "end": 31502, "name": "ADD", "source": 1 }, - { "begin": 31475, "end": 31481, "name": "DUP5", "source": 1 }, + { "begin": 31624, "end": 31633, "name": "DUP4", "source": 2 }, + { "begin": 31620, "end": 31638, "name": "ADD", "source": 2 }, + { "begin": 31611, "end": 31617, "name": "DUP5", "source": 2 }, { - "begin": 31433, - "end": 31503, + "begin": 31569, + "end": 31639, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "137" }, { - "begin": 31433, - "end": 31503, + "begin": 31569, + "end": 31639, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 31433, - "end": 31503, + "begin": 31569, + "end": 31639, "name": "tag", - "source": 1, + "source": 2, "value": "461" }, - { "begin": 31433, "end": 31503, "name": "JUMPDEST", "source": 1 }, - { "begin": 30798, "end": 31510, "name": "SWAP6", "source": 1 }, - { "begin": 30798, "end": 31510, "name": "SWAP5", "source": 1 }, - { "begin": 30798, "end": 31510, "name": "POP", "source": 1 }, - { "begin": 30798, "end": 31510, "name": "POP", "source": 1 }, - { "begin": 30798, "end": 31510, "name": "POP", "source": 1 }, - { "begin": 30798, "end": 31510, "name": "POP", "source": 1 }, - { "begin": 30798, "end": 31510, "name": "POP", "source": 1 }, + { "begin": 31569, "end": 31639, "name": "JUMPDEST", "source": 2 }, + { "begin": 30926, "end": 31646, "name": "SWAP6", "source": 2 }, + { "begin": 30926, "end": 31646, "name": "SWAP5", "source": 2 }, + { "begin": 30926, "end": 31646, "name": "POP", "source": 2 }, + { "begin": 30926, "end": 31646, "name": "POP", "source": 2 }, + { "begin": 30926, "end": 31646, "name": "POP", "source": 2 }, + { "begin": 30926, "end": 31646, "name": "POP", "source": 2 }, + { "begin": 30926, "end": 31646, "name": "POP", "source": 2 }, { - "begin": 30798, - "end": 31510, + "begin": 30926, + "end": 31646, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 31516, - "end": 31656, + "begin": 31652, + "end": 31793, "name": "tag", - "source": 1, + "source": 2, "value": "149" }, - { "begin": 31516, "end": 31656, "name": "JUMPDEST", "source": 1 }, + { "begin": 31652, "end": 31793, "name": "JUMPDEST", "source": 2 }, { - "begin": 31609, - "end": 31615, + "begin": 31746, + "end": 31752, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 31643, "end": 31648, "name": "DUP2", "source": 1 }, - { "begin": 31637, "end": 31649, "name": "MLOAD", "source": 1 }, - { "begin": 31627, "end": 31649, "name": "SWAP1", "source": 1 }, - { "begin": 31627, "end": 31649, "name": "POP", "source": 1 }, - { "begin": 31516, "end": 31656, "name": "SWAP2", "source": 1 }, - { "begin": 31516, "end": 31656, "name": "SWAP1", "source": 1 }, - { "begin": 31516, "end": 31656, "name": "POP", "source": 1 }, + { "begin": 31780, "end": 31785, "name": "DUP2", "source": 2 }, + { "begin": 31774, "end": 31786, "name": "MLOAD", "source": 2 }, + { "begin": 31764, "end": 31786, "name": "SWAP1", "source": 2 }, + { "begin": 31764, "end": 31786, "name": "POP", "source": 2 }, + { "begin": 31652, "end": 31793, "name": "SWAP2", "source": 2 }, + { "begin": 31652, "end": 31793, "name": "SWAP1", "source": 2 }, + { "begin": 31652, "end": 31793, "name": "POP", "source": 2 }, { - "begin": 31516, - "end": 31656, + "begin": 31652, + "end": 31793, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 31662, - "end": 31872, + "begin": 31799, + "end": 32010, "name": "tag", - "source": 1, + "source": 2, "value": "150" }, - { "begin": 31662, "end": 31872, "name": "JUMPDEST", "source": 1 }, + { "begin": 31799, "end": 32010, "name": "JUMPDEST", "source": 2 }, { - "begin": 31787, - "end": 31798, + "begin": 31925, + "end": 31936, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 31821, "end": 31827, "name": "DUP3", "source": 1 }, - { "begin": 31816, "end": 31819, "name": "DUP3", "source": 1 }, - { "begin": 31809, "end": 31828, "name": "MSTORE", "source": 1 }, + { "begin": 31959, "end": 31965, "name": "DUP3", "source": 2 }, + { "begin": 31954, "end": 31957, "name": "DUP3", "source": 2 }, + { "begin": 31947, "end": 31966, "name": "MSTORE", "source": 2 }, { - "begin": 31861, - "end": 31865, + "begin": 31999, + "end": 32003, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 31856, "end": 31859, "name": "DUP3", "source": 1 }, - { "begin": 31852, "end": 31866, "name": "ADD", "source": 1 }, - { "begin": 31837, "end": 31866, "name": "SWAP1", "source": 1 }, - { "begin": 31837, "end": 31866, "name": "POP", "source": 1 }, - { "begin": 31662, "end": 31872, "name": "SWAP3", "source": 1 }, - { "begin": 31662, "end": 31872, "name": "SWAP2", "source": 1 }, - { "begin": 31662, "end": 31872, "name": "POP", "source": 1 }, - { "begin": 31662, "end": 31872, "name": "POP", "source": 1 }, + { "begin": 31994, "end": 31997, "name": "DUP3", "source": 2 }, + { "begin": 31990, "end": 32004, "name": "ADD", "source": 2 }, + { "begin": 31975, "end": 32004, "name": "SWAP1", "source": 2 }, + { "begin": 31975, "end": 32004, "name": "POP", "source": 2 }, + { "begin": 31799, "end": 32010, "name": "SWAP3", "source": 2 }, + { "begin": 31799, "end": 32010, "name": "SWAP2", "source": 2 }, + { "begin": 31799, "end": 32010, "name": "POP", "source": 2 }, + { "begin": 31799, "end": 32010, "name": "POP", "source": 2 }, { - "begin": 31662, - "end": 31872, + "begin": 31799, + "end": 32010, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 31878, - "end": 32036, + "begin": 32016, + "end": 32175, "name": "tag", - "source": 1, + "source": 2, "value": "151" }, - { "begin": 31878, "end": 32036, "name": "JUMPDEST", "source": 1 }, + { "begin": 32016, "end": 32175, "name": "JUMPDEST", "source": 2 }, { - "begin": 31971, - "end": 31975, + "begin": 32110, + "end": 32114, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 31994, "end": 31997, "name": "DUP2", "source": 1 }, - { "begin": 31986, "end": 31997, "name": "SWAP1", "source": 1 }, - { "begin": 31986, "end": 31997, "name": "POP", "source": 1 }, + { "begin": 32133, "end": 32136, "name": "DUP2", "source": 2 }, + { "begin": 32125, "end": 32136, "name": "SWAP1", "source": 2 }, + { "begin": 32125, "end": 32136, "name": "POP", "source": 2 }, { - "begin": 32024, - "end": 32028, + "begin": 32163, + "end": 32167, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 32019, "end": 32022, "name": "DUP3", "source": 1 }, - { "begin": 32015, "end": 32029, "name": "ADD", "source": 1 }, - { "begin": 32007, "end": 32029, "name": "SWAP1", "source": 1 }, - { "begin": 32007, "end": 32029, "name": "POP", "source": 1 }, - { "begin": 31878, "end": 32036, "name": "SWAP2", "source": 1 }, - { "begin": 31878, "end": 32036, "name": "SWAP1", "source": 1 }, - { "begin": 31878, "end": 32036, "name": "POP", "source": 1 }, + { "begin": 32158, "end": 32161, "name": "DUP3", "source": 2 }, + { "begin": 32154, "end": 32168, "name": "ADD", "source": 2 }, + { "begin": 32146, "end": 32168, "name": "SWAP1", "source": 2 }, + { "begin": 32146, "end": 32168, "name": "POP", "source": 2 }, + { "begin": 32016, "end": 32175, "name": "SWAP2", "source": 2 }, + { "begin": 32016, "end": 32175, "name": "SWAP1", "source": 2 }, + { "begin": 32016, "end": 32175, "name": "POP", "source": 2 }, { - "begin": 31878, - "end": 32036, + "begin": 32016, + "end": 32175, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 32110, - "end": 32763, + "begin": 32249, + "end": 32906, "name": "tag", - "source": 1, + "source": 2, "value": "152" }, - { "begin": 32110, "end": 32763, "name": "JUMPDEST", "source": 1 }, + { "begin": 32249, "end": 32906, "name": "JUMPDEST", "source": 2 }, { - "begin": 32225, - "end": 32228, + "begin": 32368, + "end": 32371, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 32261, - "end": 32265, + "begin": 32404, + "end": 32408, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 32256, "end": 32259, "name": "DUP4", "source": 1 }, - { "begin": 32252, "end": 32266, "name": "ADD", "source": 1 }, + { "begin": 32399, "end": 32402, "name": "DUP4", "source": 2 }, + { "begin": 32395, "end": 32409, "name": "ADD", "source": 2 }, { - "begin": 32351, - "end": 32355, + "begin": 32494, + "end": 32498, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 32344, "end": 32349, "name": "DUP4", "source": 1 }, - { "begin": 32340, "end": 32356, "name": "ADD", "source": 1 }, - { "begin": 32334, "end": 32357, "name": "MLOAD", "source": 1 }, + { "begin": 32487, "end": 32492, "name": "DUP4", "source": 2 }, + { "begin": 32483, "end": 32499, "name": "ADD", "source": 2 }, + { "begin": 32477, "end": 32500, "name": "MLOAD", "source": 2 }, { - "begin": 32370, - "end": 32429, + "begin": 32513, + "end": 32572, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "466" }, { - "begin": 32423, - "end": 32427, + "begin": 32566, + "end": 32570, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 32418, "end": 32421, "name": "DUP7", "source": 1 }, - { "begin": 32414, "end": 32428, "name": "ADD", "source": 1 }, - { "begin": 32400, "end": 32412, "name": "DUP3", "source": 1 }, + { "begin": 32561, "end": 32564, "name": "DUP7", "source": 2 }, + { "begin": 32557, "end": 32571, "name": "ADD", "source": 2 }, + { "begin": 32543, "end": 32555, "name": "DUP3", "source": 2 }, { - "begin": 32370, - "end": 32429, + "begin": 32513, + "end": 32572, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "124" }, { - "begin": 32370, - "end": 32429, + "begin": 32513, + "end": 32572, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 32370, - "end": 32429, + "begin": 32513, + "end": 32572, "name": "tag", - "source": 1, + "source": 2, "value": "466" }, - { "begin": 32370, "end": 32429, "name": "JUMPDEST", "source": 1 }, - { "begin": 32276, "end": 32439, "name": "POP", "source": 1 }, + { "begin": 32513, "end": 32572, "name": "JUMPDEST", "source": 2 }, + { "begin": 32419, "end": 32582, "name": "POP", "source": 2 }, { - "begin": 32525, - "end": 32529, + "begin": 32668, + "end": 32672, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 32518, "end": 32523, "name": "DUP4", "source": 1 }, - { "begin": 32514, "end": 32530, "name": "ADD", "source": 1 }, - { "begin": 32508, "end": 32531, "name": "MLOAD", "source": 1 }, - { "begin": 32578, "end": 32581, "name": "DUP5", "source": 1 }, - { "begin": 32572, "end": 32576, "name": "DUP3", "source": 1 }, - { "begin": 32568, "end": 32582, "name": "SUB", "source": 1 }, + { "begin": 32661, "end": 32666, "name": "DUP4", "source": 2 }, + { "begin": 32657, "end": 32673, "name": "ADD", "source": 2 }, + { "begin": 32651, "end": 32674, "name": "MLOAD", "source": 2 }, + { "begin": 32721, "end": 32724, "name": "DUP5", "source": 2 }, + { "begin": 32715, "end": 32719, "name": "DUP3", "source": 2 }, + { "begin": 32711, "end": 32725, "name": "SUB", "source": 2 }, { - "begin": 32561, - "end": 32565, + "begin": 32704, + "end": 32708, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 32556, "end": 32559, "name": "DUP7", "source": 1 }, - { "begin": 32552, "end": 32566, "name": "ADD", "source": 1 }, - { "begin": 32545, "end": 32583, "name": "MSTORE", "source": 1 }, + { "begin": 32699, "end": 32702, "name": "DUP7", "source": 2 }, + { "begin": 32695, "end": 32709, "name": "ADD", "source": 2 }, + { "begin": 32688, "end": 32726, "name": "MSTORE", "source": 2 }, { - "begin": 32604, - "end": 32725, + "begin": 32747, + "end": 32868, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "467" }, - { "begin": 32720, "end": 32724, "name": "DUP3", "source": 1 }, - { "begin": 32706, "end": 32718, "name": "DUP3", "source": 1 }, + { "begin": 32863, "end": 32867, "name": "DUP3", "source": 2 }, + { "begin": 32849, "end": 32861, "name": "DUP3", "source": 2 }, { - "begin": 32604, - "end": 32725, + "begin": 32747, + "end": 32868, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "134" }, { - "begin": 32604, - "end": 32725, + "begin": 32747, + "end": 32868, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 32604, - "end": 32725, + "begin": 32747, + "end": 32868, "name": "tag", - "source": 1, + "source": 2, "value": "467" }, - { "begin": 32604, "end": 32725, "name": "JUMPDEST", "source": 1 }, - { "begin": 32596, "end": 32725, "name": "SWAP2", "source": 1 }, - { "begin": 32596, "end": 32725, "name": "POP", "source": 1 }, - { "begin": 32449, "end": 32736, "name": "POP", "source": 1 }, - { "begin": 32753, "end": 32757, "name": "DUP1", "source": 1 }, - { "begin": 32746, "end": 32757, "name": "SWAP2", "source": 1 }, - { "begin": 32746, "end": 32757, "name": "POP", "source": 1 }, - { "begin": 32230, "end": 32763, "name": "POP", "source": 1 }, - { "begin": 32110, "end": 32763, "name": "SWAP3", "source": 1 }, - { "begin": 32110, "end": 32763, "name": "SWAP2", "source": 1 }, - { "begin": 32110, "end": 32763, "name": "POP", "source": 1 }, - { "begin": 32110, "end": 32763, "name": "POP", "source": 1 }, - { - "begin": 32110, - "end": 32763, - "name": "JUMP", - "source": 1, + { "begin": 32747, "end": 32868, "name": "JUMPDEST", "source": 2 }, + { "begin": 32739, "end": 32868, "name": "SWAP2", "source": 2 }, + { "begin": 32739, "end": 32868, "name": "POP", "source": 2 }, + { "begin": 32592, "end": 32879, "name": "POP", "source": 2 }, + { "begin": 32896, "end": 32900, "name": "DUP1", "source": 2 }, + { "begin": 32889, "end": 32900, "name": "SWAP2", "source": 2 }, + { "begin": 32889, "end": 32900, "name": "POP", "source": 2 }, + { "begin": 32373, "end": 32906, "name": "POP", "source": 2 }, + { "begin": 32249, "end": 32906, "name": "SWAP3", "source": 2 }, + { "begin": 32249, "end": 32906, "name": "SWAP2", "source": 2 }, + { "begin": 32249, "end": 32906, "name": "POP", "source": 2 }, + { "begin": 32249, "end": 32906, "name": "POP", "source": 2 }, + { + "begin": 32249, + "end": 32906, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 32831, - "end": 33471, + "begin": 32974, + "end": 33620, "name": "tag", - "source": 1, + "source": 2, "value": "153" }, - { "begin": 32831, "end": 33471, "name": "JUMPDEST", "source": 1 }, + { "begin": 32974, "end": 33620, "name": "JUMPDEST", "source": 2 }, { - "begin": 32942, - "end": 32945, + "begin": 33087, + "end": 33090, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 32978, - "end": 32982, + "begin": 33123, + "end": 33127, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 32973, "end": 32976, "name": "DUP4", "source": 1 }, - { "begin": 32969, "end": 32983, "name": "ADD", "source": 1 }, + { "begin": 33118, "end": 33121, "name": "DUP4", "source": 2 }, + { "begin": 33114, "end": 33128, "name": "ADD", "source": 2 }, { - "begin": 33069, - "end": 33073, + "begin": 33214, + "end": 33218, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 33062, "end": 33067, "name": "DUP4", "source": 1 }, - { "begin": 33058, "end": 33074, "name": "ADD", "source": 1 }, - { "begin": 33052, "end": 33075, "name": "MLOAD", "source": 1 }, - { "begin": 33122, "end": 33125, "name": "DUP5", "source": 1 }, - { "begin": 33116, "end": 33120, "name": "DUP3", "source": 1 }, - { "begin": 33112, "end": 33126, "name": "SUB", "source": 1 }, + { "begin": 33207, "end": 33212, "name": "DUP4", "source": 2 }, + { "begin": 33203, "end": 33219, "name": "ADD", "source": 2 }, + { "begin": 33197, "end": 33220, "name": "MLOAD", "source": 2 }, + { "begin": 33267, "end": 33270, "name": "DUP5", "source": 2 }, + { "begin": 33261, "end": 33265, "name": "DUP3", "source": 2 }, + { "begin": 33257, "end": 33271, "name": "SUB", "source": 2 }, { - "begin": 33105, - "end": 33109, + "begin": 33250, + "end": 33254, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 33100, "end": 33103, "name": "DUP7", "source": 1 }, - { "begin": 33096, "end": 33110, "name": "ADD", "source": 1 }, - { "begin": 33089, "end": 33127, "name": "MSTORE", "source": 1 }, + { "begin": 33245, "end": 33248, "name": "DUP7", "source": 2 }, + { "begin": 33241, "end": 33255, "name": "ADD", "source": 2 }, + { "begin": 33234, "end": 33272, "name": "MSTORE", "source": 2 }, { - "begin": 33148, - "end": 33257, + "begin": 33293, + "end": 33406, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "469" }, - { "begin": 33252, "end": 33256, "name": "DUP3", "source": 1 }, - { "begin": 33238, "end": 33250, "name": "DUP3", "source": 1 }, + { "begin": 33401, "end": 33405, "name": "DUP3", "source": 2 }, + { "begin": 33387, "end": 33399, "name": "DUP3", "source": 2 }, { - "begin": 33148, - "end": 33257, + "begin": 33293, + "end": 33406, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "152" }, { - "begin": 33148, - "end": 33257, + "begin": 33293, + "end": 33406, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 33148, - "end": 33257, + "begin": 33293, + "end": 33406, "name": "tag", - "source": 1, + "source": 2, "value": "469" }, - { "begin": 33148, "end": 33257, "name": "JUMPDEST", "source": 1 }, - { "begin": 33140, "end": 33257, "name": "SWAP2", "source": 1 }, - { "begin": 33140, "end": 33257, "name": "POP", "source": 1 }, - { "begin": 32993, "end": 33268, "name": "POP", "source": 1 }, + { "begin": 33293, "end": 33406, "name": "JUMPDEST", "source": 2 }, + { "begin": 33285, "end": 33406, "name": "SWAP2", "source": 2 }, + { "begin": 33285, "end": 33406, "name": "POP", "source": 2 }, + { "begin": 33138, "end": 33417, "name": "POP", "source": 2 }, { - "begin": 33352, - "end": 33356, + "begin": 33501, + "end": 33505, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 33345, "end": 33350, "name": "DUP4", "source": 1 }, - { "begin": 33341, "end": 33357, "name": "ADD", "source": 1 }, - { "begin": 33335, "end": 33358, "name": "MLOAD", "source": 1 }, + { "begin": 33494, "end": 33499, "name": "DUP4", "source": 2 }, + { "begin": 33490, "end": 33506, "name": "ADD", "source": 2 }, + { "begin": 33484, "end": 33507, "name": "MLOAD", "source": 2 }, { - "begin": 33371, - "end": 33434, + "begin": 33520, + "end": 33583, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "470" }, { - "begin": 33428, - "end": 33432, + "begin": 33577, + "end": 33581, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 33423, "end": 33426, "name": "DUP7", "source": 1 }, - { "begin": 33419, "end": 33433, "name": "ADD", "source": 1 }, - { "begin": 33405, "end": 33417, "name": "DUP3", "source": 1 }, + { "begin": 33572, "end": 33575, "name": "DUP7", "source": 2 }, + { "begin": 33568, "end": 33582, "name": "ADD", "source": 2 }, + { "begin": 33554, "end": 33566, "name": "DUP3", "source": 2 }, { - "begin": 33371, - "end": 33434, + "begin": 33520, + "end": 33583, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "142" }, { - "begin": 33371, - "end": 33434, + "begin": 33520, + "end": 33583, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 33371, - "end": 33434, + "begin": 33520, + "end": 33583, "name": "tag", - "source": 1, + "source": 2, "value": "470" }, - { "begin": 33371, "end": 33434, "name": "JUMPDEST", "source": 1 }, - { "begin": 33278, "end": 33444, "name": "POP", "source": 1 }, - { "begin": 33461, "end": 33465, "name": "DUP1", "source": 1 }, - { "begin": 33454, "end": 33465, "name": "SWAP2", "source": 1 }, - { "begin": 33454, "end": 33465, "name": "POP", "source": 1 }, - { "begin": 32947, "end": 33471, "name": "POP", "source": 1 }, - { "begin": 32831, "end": 33471, "name": "SWAP3", "source": 1 }, - { "begin": 32831, "end": 33471, "name": "SWAP2", "source": 1 }, - { "begin": 32831, "end": 33471, "name": "POP", "source": 1 }, - { "begin": 32831, "end": 33471, "name": "POP", "source": 1 }, - { - "begin": 32831, - "end": 33471, - "name": "JUMP", - "source": 1, + { "begin": 33520, "end": 33583, "name": "JUMPDEST", "source": 2 }, + { "begin": 33427, "end": 33593, "name": "POP", "source": 2 }, + { "begin": 33610, "end": 33614, "name": "DUP1", "source": 2 }, + { "begin": 33603, "end": 33614, "name": "SWAP2", "source": 2 }, + { "begin": 33603, "end": 33614, "name": "POP", "source": 2 }, + { "begin": 33092, "end": 33620, "name": "POP", "source": 2 }, + { "begin": 32974, "end": 33620, "name": "SWAP3", "source": 2 }, + { "begin": 32974, "end": 33620, "name": "SWAP2", "source": 2 }, + { "begin": 32974, "end": 33620, "name": "POP", "source": 2 }, + { "begin": 32974, "end": 33620, "name": "POP", "source": 2 }, + { + "begin": 32974, + "end": 33620, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 33477, - "end": 33737, + "begin": 33626, + "end": 33890, "name": "tag", - "source": 1, + "source": 2, "value": "154" }, - { "begin": 33477, "end": 33737, "name": "JUMPDEST", "source": 1 }, + { "begin": 33626, "end": 33890, "name": "JUMPDEST", "source": 2 }, { - "begin": 33598, - "end": 33608, + "begin": 33749, + "end": 33759, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 33633, - "end": 33731, + "begin": 33784, + "end": 33884, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "472" }, - { "begin": 33727, "end": 33730, "name": "DUP4", "source": 1 }, - { "begin": 33719, "end": 33725, "name": "DUP4", "source": 1 }, + { "begin": 33880, "end": 33883, "name": "DUP4", "source": 2 }, + { "begin": 33872, "end": 33878, "name": "DUP4", "source": 2 }, { - "begin": 33633, - "end": 33731, + "begin": 33784, + "end": 33884, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "153" }, { - "begin": 33633, - "end": 33731, + "begin": 33784, + "end": 33884, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 33633, - "end": 33731, + "begin": 33784, + "end": 33884, "name": "tag", - "source": 1, + "source": 2, "value": "472" }, - { "begin": 33633, "end": 33731, "name": "JUMPDEST", "source": 1 }, - { "begin": 33619, "end": 33731, "name": "SWAP1", "source": 1 }, - { "begin": 33619, "end": 33731, "name": "POP", "source": 1 }, - { "begin": 33477, "end": 33737, "name": "SWAP3", "source": 1 }, - { "begin": 33477, "end": 33737, "name": "SWAP2", "source": 1 }, - { "begin": 33477, "end": 33737, "name": "POP", "source": 1 }, - { "begin": 33477, "end": 33737, "name": "POP", "source": 1 }, + { "begin": 33784, "end": 33884, "name": "JUMPDEST", "source": 2 }, + { "begin": 33770, "end": 33884, "name": "SWAP1", "source": 2 }, + { "begin": 33770, "end": 33884, "name": "POP", "source": 2 }, + { "begin": 33626, "end": 33890, "name": "SWAP3", "source": 2 }, + { "begin": 33626, "end": 33890, "name": "SWAP2", "source": 2 }, + { "begin": 33626, "end": 33890, "name": "POP", "source": 2 }, + { "begin": 33626, "end": 33890, "name": "POP", "source": 2 }, { - "begin": 33477, - "end": 33737, + "begin": 33626, + "end": 33890, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 33743, - "end": 33882, + "begin": 33896, + "end": 34036, "name": "tag", - "source": 1, + "source": 2, "value": "155" }, - { "begin": 33743, "end": 33882, "name": "JUMPDEST", "source": 1 }, + { "begin": 33896, "end": 34036, "name": "JUMPDEST", "source": 2 }, { - "begin": 33839, - "end": 33843, + "begin": 33993, + "end": 33997, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 33871, - "end": 33875, + "begin": 34025, + "end": 34029, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 33866, "end": 33869, "name": "DUP3", "source": 1 }, - { "begin": 33862, "end": 33876, "name": "ADD", "source": 1 }, - { "begin": 33854, "end": 33876, "name": "SWAP1", "source": 1 }, - { "begin": 33854, "end": 33876, "name": "POP", "source": 1 }, - { "begin": 33743, "end": 33882, "name": "SWAP2", "source": 1 }, - { "begin": 33743, "end": 33882, "name": "SWAP1", "source": 1 }, - { "begin": 33743, "end": 33882, "name": "POP", "source": 1 }, + { "begin": 34020, "end": 34023, "name": "DUP3", "source": 2 }, + { "begin": 34016, "end": 34030, "name": "ADD", "source": 2 }, + { "begin": 34008, "end": 34030, "name": "SWAP1", "source": 2 }, + { "begin": 34008, "end": 34030, "name": "POP", "source": 2 }, + { "begin": 33896, "end": 34036, "name": "SWAP2", "source": 2 }, + { "begin": 33896, "end": 34036, "name": "SWAP1", "source": 2 }, + { "begin": 33896, "end": 34036, "name": "POP", "source": 2 }, { - "begin": 33743, - "end": 33882, + "begin": 33896, + "end": 34036, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" }, { - "begin": 33954, - "end": 35073, + "begin": 34108, + "end": 35235, "name": "tag", - "source": 1, + "source": 2, "value": "156" }, - { "begin": 33954, "end": 35073, "name": "JUMPDEST", "source": 1 }, + { "begin": 34108, "end": 35235, "name": "JUMPDEST", "source": 2 }, { - "begin": 34125, - "end": 34128, + "begin": 34281, + "end": 34284, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 34154, - "end": 34234, + "begin": 34310, + "end": 34391, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "475" }, - { "begin": 34228, "end": 34233, "name": "DUP3", "source": 1 }, + { "begin": 34385, "end": 34390, "name": "DUP3", "source": 2 }, { - "begin": 34154, - "end": 34234, + "begin": 34310, + "end": 34391, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "149" }, { - "begin": 34154, - "end": 34234, + "begin": 34310, + "end": 34391, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 34154, - "end": 34234, + "begin": 34310, + "end": 34391, "name": "tag", - "source": 1, + "source": 2, "value": "475" }, - { "begin": 34154, "end": 34234, "name": "JUMPDEST", "source": 1 }, + { "begin": 34310, "end": 34391, "name": "JUMPDEST", "source": 2 }, { - "begin": 34250, - "end": 34362, + "begin": 34407, + "end": 34520, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "476" }, - { "begin": 34355, "end": 34361, "name": "DUP2", "source": 1 }, - { "begin": 34350, "end": 34353, "name": "DUP6", "source": 1 }, + { "begin": 34513, "end": 34519, "name": "DUP2", "source": 2 }, + { "begin": 34508, "end": 34511, "name": "DUP6", "source": 2 }, { - "begin": 34250, - "end": 34362, + "begin": 34407, + "end": 34520, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "150" }, { - "begin": 34250, - "end": 34362, + "begin": 34407, + "end": 34520, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 34250, - "end": 34362, + "begin": 34407, + "end": 34520, "name": "tag", - "source": 1, + "source": 2, "value": "476" }, - { "begin": 34250, "end": 34362, "name": "JUMPDEST", "source": 1 }, - { "begin": 34243, "end": 34362, "name": "SWAP4", "source": 1 }, - { "begin": 34243, "end": 34362, "name": "POP", "source": 1 }, - { "begin": 34388, "end": 34391, "name": "DUP4", "source": 1 }, + { "begin": 34407, "end": 34520, "name": "JUMPDEST", "source": 2 }, + { "begin": 34400, "end": 34520, "name": "SWAP4", "source": 2 }, + { "begin": 34400, "end": 34520, "name": "POP", "source": 2 }, + { "begin": 34546, "end": 34549, "name": "DUP4", "source": 2 }, { - "begin": 34433, - "end": 34437, + "begin": 34591, + "end": 34595, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 34425, "end": 34431, "name": "DUP3", "source": 1 }, - { "begin": 34421, "end": 34438, "name": "MUL", "source": 1 }, - { "begin": 34416, "end": 34419, "name": "DUP6", "source": 1 }, - { "begin": 34412, "end": 34439, "name": "ADD", "source": 1 }, + { "begin": 34583, "end": 34589, "name": "DUP3", "source": 2 }, + { "begin": 34579, "end": 34596, "name": "MUL", "source": 2 }, + { "begin": 34574, "end": 34577, "name": "DUP6", "source": 2 }, + { "begin": 34570, "end": 34597, "name": "ADD", "source": 2 }, { - "begin": 34463, - "end": 34545, + "begin": 34621, + "end": 34704, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "477" }, - { "begin": 34539, "end": 34544, "name": "DUP6", "source": 1 }, + { "begin": 34698, "end": 34703, "name": "DUP6", "source": 2 }, { - "begin": 34463, - "end": 34545, + "begin": 34621, + "end": 34704, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "151" }, { - "begin": 34463, - "end": 34545, + "begin": 34621, + "end": 34704, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 34463, - "end": 34545, + "begin": 34621, + "end": 34704, "name": "tag", - "source": 1, + "source": 2, "value": "477" }, - { "begin": 34463, "end": 34545, "name": "JUMPDEST", "source": 1 }, - { "begin": 34568, "end": 34575, "name": "DUP1", "source": 1 }, + { "begin": 34621, "end": 34704, "name": "JUMPDEST", "source": 2 }, + { "begin": 34727, "end": 34734, "name": "DUP1", "source": 2 }, { - "begin": 34599, - "end": 34600, + "begin": 34758, + "end": 34759, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 34584, - "end": 35028, + "begin": 34743, + "end": 35190, "name": "tag", - "source": 1, + "source": 2, "value": "478" }, - { "begin": 34584, "end": 35028, "name": "JUMPDEST", "source": 1 }, - { "begin": 34609, "end": 34615, "name": "DUP6", "source": 1 }, - { "begin": 34606, "end": 34607, "name": "DUP2", "source": 1 }, - { "begin": 34603, "end": 34616, "name": "LT", "source": 1 }, - { "begin": 34584, "end": 35028, "name": "ISZERO", "source": 1 }, + { "begin": 34743, "end": 35190, "name": "JUMPDEST", "source": 2 }, + { "begin": 34768, "end": 34774, "name": "DUP6", "source": 2 }, + { "begin": 34765, "end": 34766, "name": "DUP2", "source": 2 }, + { "begin": 34762, "end": 34775, "name": "LT", "source": 2 }, + { "begin": 34743, "end": 35190, "name": "ISZERO", "source": 2 }, { - "begin": 34584, - "end": 35028, + "begin": 34743, + "end": 35190, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "480" }, - { "begin": 34584, "end": 35028, "name": "JUMPI", "source": 1 }, - { "begin": 34680, "end": 34689, "name": "DUP5", "source": 1 }, - { "begin": 34674, "end": 34678, "name": "DUP5", "source": 1 }, - { "begin": 34670, "end": 34690, "name": "SUB", "source": 1 }, - { "begin": 34665, "end": 34668, "name": "DUP10", "source": 1 }, - { "begin": 34658, "end": 34691, "name": "MSTORE", "source": 1 }, - { "begin": 34731, "end": 34737, "name": "DUP2", "source": 1 }, - { "begin": 34725, "end": 34738, "name": "MLOAD", "source": 1 }, + { "begin": 34743, "end": 35190, "name": "JUMPI", "source": 2 }, + { "begin": 34839, "end": 34848, "name": "DUP5", "source": 2 }, + { "begin": 34833, "end": 34837, "name": "DUP5", "source": 2 }, + { "begin": 34829, "end": 34849, "name": "SUB", "source": 2 }, + { "begin": 34824, "end": 34827, "name": "DUP10", "source": 2 }, + { "begin": 34817, "end": 34850, "name": "MSTORE", "source": 2 }, + { "begin": 34890, "end": 34896, "name": "DUP2", "source": 2 }, + { "begin": 34884, "end": 34897, "name": "MLOAD", "source": 2 }, { - "begin": 34759, - "end": 34875, + "begin": 34918, + "end": 35036, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "481" }, - { "begin": 34870, "end": 34874, "name": "DUP6", "source": 1 }, - { "begin": 34855, "end": 34868, "name": "DUP3", "source": 1 }, + { "begin": 35031, "end": 35035, "name": "DUP6", "source": 2 }, + { "begin": 35016, "end": 35029, "name": "DUP3", "source": 2 }, { - "begin": 34759, - "end": 34875, + "begin": 34918, + "end": 35036, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "154" }, { - "begin": 34759, - "end": 34875, + "begin": 34918, + "end": 35036, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 34759, - "end": 34875, + "begin": 34918, + "end": 35036, "name": "tag", - "source": 1, + "source": 2, "value": "481" }, - { "begin": 34759, "end": 34875, "name": "JUMPDEST", "source": 1 }, - { "begin": 34751, "end": 34875, "name": "SWAP5", "source": 1 }, - { "begin": 34751, "end": 34875, "name": "POP", "source": 1 }, + { "begin": 34918, "end": 35036, "name": "JUMPDEST", "source": 2 }, + { "begin": 34910, "end": 35036, "name": "SWAP5", "source": 2 }, + { "begin": 34910, "end": 35036, "name": "POP", "source": 2 }, { - "begin": 34898, - "end": 34984, + "begin": 35059, + "end": 35146, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "482" }, - { "begin": 34977, "end": 34983, "name": "DUP4", "source": 1 }, + { "begin": 35139, "end": 35145, "name": "DUP4", "source": 2 }, { - "begin": 34898, - "end": 34984, + "begin": 35059, + "end": 35146, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "155" }, { - "begin": 34898, - "end": 34984, + "begin": 35059, + "end": 35146, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 34898, - "end": 34984, + "begin": 35059, + "end": 35146, "name": "tag", - "source": 1, + "source": 2, "value": "482" }, - { "begin": 34898, "end": 34984, "name": "JUMPDEST", "source": 1 }, - { "begin": 34888, "end": 34984, "name": "SWAP3", "source": 1 }, - { "begin": 34888, "end": 34984, "name": "POP", "source": 1 }, + { "begin": 35059, "end": 35146, "name": "JUMPDEST", "source": 2 }, + { "begin": 35049, "end": 35146, "name": "SWAP3", "source": 2 }, + { "begin": 35049, "end": 35146, "name": "POP", "source": 2 }, { - "begin": 35013, - "end": 35017, + "begin": 35175, + "end": 35179, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 35008, "end": 35011, "name": "DUP11", "source": 1 }, - { "begin": 35004, "end": 35018, "name": "ADD", "source": 1 }, - { "begin": 34997, "end": 35018, "name": "SWAP10", "source": 1 }, - { "begin": 34997, "end": 35018, "name": "POP", "source": 1 }, - { "begin": 34644, "end": 35028, "name": "POP", "source": 1 }, + { "begin": 35170, "end": 35173, "name": "DUP11", "source": 2 }, + { "begin": 35166, "end": 35180, "name": "ADD", "source": 2 }, + { "begin": 35159, "end": 35180, "name": "SWAP10", "source": 2 }, + { "begin": 35159, "end": 35180, "name": "POP", "source": 2 }, + { "begin": 34803, "end": 35190, "name": "POP", "source": 2 }, { - "begin": 34631, - "end": 34632, + "begin": 34790, + "end": 34791, "name": "PUSH", - "source": 1, + "source": 2, "value": "1" }, - { "begin": 34628, "end": 34629, "name": "DUP2", "source": 1 }, - { "begin": 34624, "end": 34633, "name": "ADD", "source": 1 }, - { "begin": 34619, "end": 34633, "name": "SWAP1", "source": 1 }, - { "begin": 34619, "end": 34633, "name": "POP", "source": 1 }, + { "begin": 34787, "end": 34788, "name": "DUP2", "source": 2 }, + { "begin": 34783, "end": 34792, "name": "ADD", "source": 2 }, + { "begin": 34778, "end": 34792, "name": "SWAP1", "source": 2 }, + { "begin": 34778, "end": 34792, "name": "POP", "source": 2 }, { - "begin": 34584, - "end": 35028, + "begin": 34743, + "end": 35190, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "478" }, - { "begin": 34584, "end": 35028, "name": "JUMP", "source": 1 }, + { "begin": 34743, "end": 35190, "name": "JUMP", "source": 2 }, { - "begin": 34584, - "end": 35028, + "begin": 34743, + "end": 35190, "name": "tag", - "source": 1, + "source": 2, "value": "480" }, - { "begin": 34584, "end": 35028, "name": "JUMPDEST", "source": 1 }, - { "begin": 34588, "end": 34602, "name": "POP", "source": 1 }, - { "begin": 35044, "end": 35048, "name": "DUP3", "source": 1 }, - { "begin": 35037, "end": 35048, "name": "SWAP8", "source": 1 }, - { "begin": 35037, "end": 35048, "name": "POP", "source": 1 }, - { "begin": 35064, "end": 35067, "name": "DUP8", "source": 1 }, - { "begin": 35057, "end": 35067, "name": "SWAP6", "source": 1 }, - { "begin": 35057, "end": 35067, "name": "POP", "source": 1 }, - { "begin": 34130, "end": 35073, "name": "POP", "source": 1 }, - { "begin": 34130, "end": 35073, "name": "POP", "source": 1 }, - { "begin": 34130, "end": 35073, "name": "POP", "source": 1 }, - { "begin": 34130, "end": 35073, "name": "POP", "source": 1 }, - { "begin": 34130, "end": 35073, "name": "POP", "source": 1 }, - { "begin": 33954, "end": 35073, "name": "SWAP3", "source": 1 }, - { "begin": 33954, "end": 35073, "name": "SWAP2", "source": 1 }, - { "begin": 33954, "end": 35073, "name": "POP", "source": 1 }, - { "begin": 33954, "end": 35073, "name": "POP", "source": 1 }, - { - "begin": 33954, - "end": 35073, - "name": "JUMP", - "source": 1, + { "begin": 34743, "end": 35190, "name": "JUMPDEST", "source": 2 }, + { "begin": 34747, "end": 34761, "name": "POP", "source": 2 }, + { "begin": 35206, "end": 35210, "name": "DUP3", "source": 2 }, + { "begin": 35199, "end": 35210, "name": "SWAP8", "source": 2 }, + { "begin": 35199, "end": 35210, "name": "POP", "source": 2 }, + { "begin": 35226, "end": 35229, "name": "DUP8", "source": 2 }, + { "begin": 35219, "end": 35229, "name": "SWAP6", "source": 2 }, + { "begin": 35219, "end": 35229, "name": "POP", "source": 2 }, + { "begin": 34286, "end": 35235, "name": "POP", "source": 2 }, + { "begin": 34286, "end": 35235, "name": "POP", "source": 2 }, + { "begin": 34286, "end": 35235, "name": "POP", "source": 2 }, + { "begin": 34286, "end": 35235, "name": "POP", "source": 2 }, + { "begin": 34286, "end": 35235, "name": "POP", "source": 2 }, + { "begin": 34108, "end": 35235, "name": "SWAP3", "source": 2 }, + { "begin": 34108, "end": 35235, "name": "SWAP2", "source": 2 }, + { "begin": 34108, "end": 35235, "name": "POP", "source": 2 }, + { "begin": 34108, "end": 35235, "name": "POP", "source": 2 }, + { + "begin": 34108, + "end": 35235, + "name": "JUMP", + "source": 2, "value": "[out]" }, { - "begin": 35079, - "end": 36042, + "begin": 35241, + "end": 36216, "name": "tag", - "source": 1, + "source": 2, "value": "71" }, - { "begin": 35079, "end": 36042, "name": "JUMPDEST", "source": 1 }, + { "begin": 35241, "end": 36216, "name": "JUMPDEST", "source": 2 }, { - "begin": 35410, - "end": 35414, + "begin": 35578, + "end": 35582, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, { - "begin": 35448, - "end": 35451, + "begin": 35616, + "end": 35619, "name": "PUSH", - "source": 1, + "source": 2, "value": "80" }, - { "begin": 35437, "end": 35446, "name": "DUP3", "source": 1 }, - { "begin": 35433, "end": 35452, "name": "ADD", "source": 1 }, - { "begin": 35425, "end": 35452, "name": "SWAP1", "source": 1 }, - { "begin": 35425, "end": 35452, "name": "POP", "source": 1 }, - { "begin": 35498, "end": 35507, "name": "DUP2", "source": 1 }, - { "begin": 35492, "end": 35496, "name": "DUP2", "source": 1 }, - { "begin": 35488, "end": 35508, "name": "SUB", "source": 1 }, + { "begin": 35605, "end": 35614, "name": "DUP3", "source": 2 }, + { "begin": 35601, "end": 35620, "name": "ADD", "source": 2 }, + { "begin": 35593, "end": 35620, "name": "SWAP1", "source": 2 }, + { "begin": 35593, "end": 35620, "name": "POP", "source": 2 }, + { "begin": 35666, "end": 35675, "name": "DUP2", "source": 2 }, + { "begin": 35660, "end": 35664, "name": "DUP2", "source": 2 }, + { "begin": 35656, "end": 35676, "name": "SUB", "source": 2 }, { - "begin": 35484, - "end": 35485, + "begin": 35652, + "end": 35653, "name": "PUSH", - "source": 1, + "source": 2, "value": "0" }, - { "begin": 35473, "end": 35482, "name": "DUP4", "source": 1 }, - { "begin": 35469, "end": 35486, "name": "ADD", "source": 1 }, - { "begin": 35462, "end": 35509, "name": "MSTORE", "source": 1 }, + { "begin": 35641, "end": 35650, "name": "DUP4", "source": 2 }, + { "begin": 35637, "end": 35654, "name": "ADD", "source": 2 }, + { "begin": 35630, "end": 35677, "name": "MSTORE", "source": 2 }, { - "begin": 35526, - "end": 35686, + "begin": 35694, + "end": 35856, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "484" }, - { "begin": 35681, "end": 35685, "name": "DUP2", "source": 1 }, - { "begin": 35672, "end": 35678, "name": "DUP8", "source": 1 }, + { "begin": 35851, "end": 35855, "name": "DUP2", "source": 2 }, + { "begin": 35842, "end": 35848, "name": "DUP8", "source": 2 }, { - "begin": 35526, - "end": 35686, + "begin": 35694, + "end": 35856, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "156" }, { - "begin": 35526, - "end": 35686, + "begin": 35694, + "end": 35856, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 35526, - "end": 35686, + "begin": 35694, + "end": 35856, "name": "tag", - "source": 1, + "source": 2, "value": "484" }, - { "begin": 35526, "end": 35686, "name": "JUMPDEST", "source": 1 }, - { "begin": 35518, "end": 35686, "name": "SWAP1", "source": 1 }, - { "begin": 35518, "end": 35686, "name": "POP", "source": 1 }, + { "begin": 35694, "end": 35856, "name": "JUMPDEST", "source": 2 }, + { "begin": 35686, "end": 35856, "name": "SWAP1", "source": 2 }, + { "begin": 35686, "end": 35856, "name": "POP", "source": 2 }, { - "begin": 35696, - "end": 35766, + "begin": 35866, + "end": 35936, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "485" }, { - "begin": 35762, - "end": 35764, + "begin": 35932, + "end": 35934, "name": "PUSH", - "source": 1, + "source": 2, "value": "20" }, - { "begin": 35751, "end": 35760, "name": "DUP4", "source": 1 }, - { "begin": 35747, "end": 35765, "name": "ADD", "source": 1 }, - { "begin": 35738, "end": 35744, "name": "DUP7", "source": 1 }, + { "begin": 35921, "end": 35930, "name": "DUP4", "source": 2 }, + { "begin": 35917, "end": 35935, "name": "ADD", "source": 2 }, + { "begin": 35908, "end": 35914, "name": "DUP7", "source": 2 }, { - "begin": 35696, - "end": 35766, + "begin": 35866, + "end": 35936, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "147" }, { - "begin": 35696, - "end": 35766, + "begin": 35866, + "end": 35936, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 35696, - "end": 35766, + "begin": 35866, + "end": 35936, "name": "tag", - "source": 1, + "source": 2, "value": "485" }, - { "begin": 35696, "end": 35766, "name": "JUMPDEST", "source": 1 }, - { "begin": 35813, "end": 35822, "name": "DUP2", "source": 1 }, - { "begin": 35807, "end": 35811, "name": "DUP2", "source": 1 }, - { "begin": 35803, "end": 35823, "name": "SUB", "source": 1 }, + { "begin": 35866, "end": 35936, "name": "JUMPDEST", "source": 2 }, + { "begin": 35983, "end": 35992, "name": "DUP2", "source": 2 }, + { "begin": 35977, "end": 35981, "name": "DUP2", "source": 2 }, + { "begin": 35973, "end": 35993, "name": "SUB", "source": 2 }, { - "begin": 35798, - "end": 35800, + "begin": 35968, + "end": 35970, "name": "PUSH", - "source": 1, + "source": 2, "value": "40" }, - { "begin": 35787, "end": 35796, "name": "DUP4", "source": 1 }, - { "begin": 35783, "end": 35801, "name": "ADD", "source": 1 }, - { "begin": 35776, "end": 35824, "name": "MSTORE", "source": 1 }, + { "begin": 35957, "end": 35966, "name": "DUP4", "source": 2 }, + { "begin": 35953, "end": 35971, "name": "ADD", "source": 2 }, + { "begin": 35946, "end": 35994, "name": "MSTORE", "source": 2 }, { - "begin": 35841, - "end": 35955, + "begin": 36011, + "end": 36129, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "486" }, - { "begin": 35950, "end": 35954, "name": "DUP2", "source": 1 }, - { "begin": 35941, "end": 35947, "name": "DUP6", "source": 1 }, + { "begin": 36124, "end": 36128, "name": "DUP2", "source": 2 }, + { "begin": 36115, "end": 36121, "name": "DUP6", "source": 2 }, { - "begin": 35841, - "end": 35955, + "begin": 36011, + "end": 36129, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "135" }, { - "begin": 35841, - "end": 35955, + "begin": 36011, + "end": 36129, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 35841, - "end": 35955, + "begin": 36011, + "end": 36129, "name": "tag", - "source": 1, + "source": 2, "value": "486" }, - { "begin": 35841, "end": 35955, "name": "JUMPDEST", "source": 1 }, - { "begin": 35833, "end": 35955, "name": "SWAP1", "source": 1 }, - { "begin": 35833, "end": 35955, "name": "POP", "source": 1 }, + { "begin": 36011, "end": 36129, "name": "JUMPDEST", "source": 2 }, + { "begin": 36003, "end": 36129, "name": "SWAP1", "source": 2 }, + { "begin": 36003, "end": 36129, "name": "POP", "source": 2 }, { - "begin": 35965, - "end": 36035, + "begin": 36139, + "end": 36209, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "487" }, { - "begin": 36031, - "end": 36033, + "begin": 36205, + "end": 36207, "name": "PUSH", - "source": 1, + "source": 2, "value": "60" }, - { "begin": 36020, "end": 36029, "name": "DUP4", "source": 1 }, - { "begin": 36016, "end": 36034, "name": "ADD", "source": 1 }, - { "begin": 36007, "end": 36013, "name": "DUP5", "source": 1 }, + { "begin": 36194, "end": 36203, "name": "DUP4", "source": 2 }, + { "begin": 36190, "end": 36208, "name": "ADD", "source": 2 }, + { "begin": 36181, "end": 36187, "name": "DUP5", "source": 2 }, { - "begin": 35965, - "end": 36035, + "begin": 36139, + "end": 36209, "name": "PUSH [tag]", - "source": 1, + "source": 2, "value": "137" }, { - "begin": 35965, - "end": 36035, + "begin": 36139, + "end": 36209, "name": "JUMP", - "source": 1, + "source": 2, "value": "[in]" }, { - "begin": 35965, - "end": 36035, + "begin": 36139, + "end": 36209, "name": "tag", - "source": 1, + "source": 2, "value": "487" }, - { "begin": 35965, "end": 36035, "name": "JUMPDEST", "source": 1 }, - { "begin": 35079, "end": 36042, "name": "SWAP6", "source": 1 }, - { "begin": 35079, "end": 36042, "name": "SWAP5", "source": 1 }, - { "begin": 35079, "end": 36042, "name": "POP", "source": 1 }, - { "begin": 35079, "end": 36042, "name": "POP", "source": 1 }, - { "begin": 35079, "end": 36042, "name": "POP", "source": 1 }, - { "begin": 35079, "end": 36042, "name": "POP", "source": 1 }, - { "begin": 35079, "end": 36042, "name": "POP", "source": 1 }, + { "begin": 36139, "end": 36209, "name": "JUMPDEST", "source": 2 }, + { "begin": 35241, "end": 36216, "name": "SWAP6", "source": 2 }, + { "begin": 35241, "end": 36216, "name": "SWAP5", "source": 2 }, + { "begin": 35241, "end": 36216, "name": "POP", "source": 2 }, + { "begin": 35241, "end": 36216, "name": "POP", "source": 2 }, + { "begin": 35241, "end": 36216, "name": "POP", "source": 2 }, + { "begin": 35241, "end": 36216, "name": "POP", "source": 2 }, + { "begin": 35241, "end": 36216, "name": "POP", "source": 2 }, { - "begin": 35079, - "end": 36042, + "begin": 35241, + "end": 36216, "name": "JUMP", - "source": 1, + "source": 2, "value": "[out]" } ] @@ -31303,20 +31283,20 @@ } }, "ewasm": { "wasm": "" }, - "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"location\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.MultiAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"fee_item\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multi_assets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.Currency[]\",\"name\":\"currencies\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"fee_item\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multi_currencies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multiasset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multiasset_with_fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_with_fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xtokens\",\"outputs\":[{\"internalType\":\"contract Xtokens\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currency_address\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"assets\":\"The assets we want to transfer, defined by their location and amount. \",\"destination\":\"The Multilocation to which we want to send the tokens\",\"fee_item\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currencies\":\"The currencies we want to transfer, defined by their address and amount. \",\"destination\":\"The Multilocation to which we want to send the tokens\",\"fee_item\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain\"}},\"transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain\"}},\"transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currency_address\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId\"},\"transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its location specifying fee\"},\"transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its address specifying fee\"},\"transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation\"},\"transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation specifying fee\"},\"transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId specifying fee\"},\"xtokens()\":{\"notice\":\"The Xtokens wrapper at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"XtokensInstance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xea2be7bba3fc1c5d4f78f7ed78fc4f7810e29101886cd06b34248c03047007f8\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://7fbf0f671c87f36f95965dab5dce442507b0c35897101694cc90247085b4e347\",\"dweb:/ipfs/QmYX9FvMqii3jSHP1WfXMYx4xCwn9pb1cPPGYz3vNLJUc5\"]}},\"version\":1}", + "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"location\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.MultiAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"fee_item\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multi_assets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct Xtokens.Currency[]\",\"name\":\"currencies\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"fee_item\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multi_currencies\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multiasset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_multiasset_with_fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currency_address\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"parents\",\"type\":\"uint8\"},{\"internalType\":\"bytes[]\",\"name\":\"interior\",\"type\":\"bytes[]\"}],\"internalType\":\"struct Xtokens.Multilocation\",\"name\":\"destination\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"transfer_with_fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xtokens\",\"outputs\":[{\"internalType\":\"contract Xtokens\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currency_address\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain Selector: b9f813ff\"}},\"transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"assets\":\"The assets we want to transfer, defined by their location and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"fee_item\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain Selector: b38c60fa\"}},\"transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"currencies\":\"The currencies we want to transfer, defined by their address and amount.\",\"destination\":\"The Multilocation to which we want to send the tokens\",\"fee_item\":\"Which of the currencies to be used as fee\",\"weight\":\"The weight we want to buy in the destination chain Selector: 8a362d5c\"}},\"transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain Selector: b38c60fa\"}},\"transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"asset\":\"The asset we want to transfer, defined by its multilocation. Currently only Concrete Fungible assets\",\"destination\":\"The weight we want to buy in the destination chain Selector: 89a570fc\"}},\"transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"details\":\"The token transfer burns/transfers the corresponding amount before sending\",\"params\":{\"amount\":\"The amount of tokens we want to transfer\",\"currency_address\":\"The ERC20 address of the currency we want to transfer\",\"destination\":\"The weight we want to buy in the destination chain\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"transfer(address,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId\"},\"transfer_multi_assets(((uint8,bytes[]),uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its location specifying fee\"},\"transfer_multi_currencies((address,uint256)[],uint32,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer several tokens at once through XCM based on its address specifying fee\"},\"transfer_multiasset((uint8,bytes[]),uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation\"},\"transfer_multiasset_with_fee((uint8,bytes[]),uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its MultiLocation specifying fee\"},\"transfer_with_fee(address,uint256,uint256,(uint8,bytes[]),uint64)\":{\"notice\":\"Transfer a token through XCM based on its currencyId specifying fee\"},\"xtokens()\":{\"notice\":\"The Xtokens wrapper at the known pre-compile address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"main.sol\":\"XtokensInstance\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"main.sol\":{\"keccak256\":\"0xcf35cda99fb23867196fdf45108c882758dd6ef9c2c92f9fd94ab1c78e3eaacf\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://d7ccd5f3fd3e042b02960cebcc9c28aaebc88fe376355deeaeda764859548259\",\"dweb:/ipfs/QmYAk4oUgUbxoDVoEAsL9V7x3TYE85qPQEzSgAhhGyCkiq\"]},\"precompiles/xtokens/Xtokens.sol\":{\"keccak256\":\"0x99336cb8e07e1e5341b96f9cd0e54c532e6b9e293a845ee2390e9feaad2f67de\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://1689443a4ccefae92b268afdcafe018c54a189efee91532f8a0ad10aa9a57d95\",\"dweb:/ipfs/QmTD3WjviaJgaa765GxwcS3yMhVN3C2ccJQJdNTKn8Piv5\"]}},\"version\":1}", "storageLayout": { "storage": [ { - "astId": 117, + "astId": 11, "contract": "main.sol:XtokensInstance", "label": "xtokens", "offset": 0, "slot": "0", - "type": "t_contract(Xtokens)108" + "type": "t_contract(Xtokens)271" } ], "types": { - "t_contract(Xtokens)108": { + "t_contract(Xtokens)271": { "encoding": "inplace", "label": "contract Xtokens", "numberOfBytes": "20" @@ -31351,5 +31331,5 @@ "version": 1 } }, - "sourceCode": "\n // SPDX-License-Identifier: GPL-3.0-only\n pragma solidity >=0.8.0;\n \n /**\n * @title Xtokens Interface\n * The interface through which solidity contracts will interact with xtokens pallet\n * Address : 0x0000000000000000000000000000000000000804\n */\n \n interface Xtokens {\n // A multilocation is defined by its number of parents and the encoded junctions (interior)\n struct Multilocation {\n uint8 parents;\n bytes [] interior;\n \n }\n \n // A MultiAsset is defined by a multilocation and an amount\n struct MultiAsset {\n Multilocation location;\n uint256 amount;\n }\n \n // A Currency is defined by address and the amount to be transferred\n struct Currency {\n address currency_address;\n uint256 amount;\n }\n \n /** Transfer a token through XCM based on its currencyId\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param currency_address The ERC20 address of the currency we want to transfer\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n */\n function transfer(\n address currency_address,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external;\n \n /** Transfer a token through XCM based on its currencyId specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param currency_address The ERC20 address of the currency we want to transfer\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n */\n function transfer_with_fee(\n address currency_address,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external;\n \n /** Transfer a token through XCM based on its MultiLocation\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param asset The asset we want to transfer, defined by its multilocation. \n * Currently only Concrete Fungible assets\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n */\n function transfer_multiasset(\n Multilocation memory asset,\n uint256 amount,\n Multilocation memory destination, uint64 weight) external;\n \n /** Transfer a token through XCM based on its MultiLocation specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param asset The asset we want to transfer, defined by its multilocation. \n * Currently only Concrete Fungible assets\n * @param amount The amount of tokens we want to transfer\n * @param destination The Multilocation to which we want to send the tokens\n * @param destination The weight we want to buy in the destination chain\n */\n function transfer_multiasset_with_fee(\n Multilocation memory asset,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination, uint64 weight) external;\n \n /** Transfer several tokens at once through XCM based on its address specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param currencies The currencies we want to transfer, defined by their address and amount. \n * @param fee_item Which of the currencies to be used as fee\n * @param destination The Multilocation to which we want to send the tokens\n * @param weight The weight we want to buy in the destination chain\n */\n function transfer_multi_currencies(\n Currency[] memory currencies,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) external;\n \n /** Transfer several tokens at once through XCM based on its location specifying fee\n *\n * @dev The token transfer burns/transfers the corresponding amount before sending\n * @param assets The assets we want to transfer, defined by their location and amount. \n * @param fee_item Which of the currencies to be used as fee\n * @param destination The Multilocation to which we want to send the tokens\n * @param weight The weight we want to buy in the destination chain\n */\n function transfer_multi_assets(\n MultiAsset[] memory assets,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) external;\n }\n\n contract XtokensInstance is Xtokens {\n\n /// The Xtokens wrapper at the known pre-compile address.\n Xtokens public xtokens = Xtokens(0x0000000000000000000000000000000000000804);\n \n function transfer(\n address currency_address,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) override external {\n xtokens.transfer(currency_address, amount, destination, weight);\n }\n function transfer_with_fee(\n address currency_address,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) override external {\n xtokens.transfer_with_fee(currency_address, amount, fee, destination, weight);\n }\n function transfer_multiasset(\n Multilocation memory asset,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) override external {\n xtokens.transfer_multiasset(asset, amount, destination, weight);\n }\n function transfer_multiasset_with_fee(\n Multilocation memory asset,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) override external {\n xtokens.transfer_multiasset_with_fee(asset, amount, fee, destination, weight);\n }\n function transfer_multi_currencies(\n Currency[] memory currencies,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) override external {\n xtokens.transfer_multi_currencies(currencies, fee_item, destination, weight);\n }\n function transfer_multi_assets(\n MultiAsset[] memory assets,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) override external {\n xtokens.transfer_multi_assets(assets, fee_item, destination, weight);\n }\n }" + "sourceCode": "// SPDX-License-Identifier: GPL-3.0-only\npragma solidity >=0.8.0;\n\nimport \"../../../precompiles/xtokens/Xtokens.sol\";\n\ncontract XtokensInstance is Xtokens {\n /// The Xtokens wrapper at the known pre-compile address.\n Xtokens public xtokens =\n Xtokens(0x0000000000000000000000000000000000000804);\n\n function transfer(\n address currency_address,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external override {\n xtokens.transfer(currency_address, amount, destination, weight);\n }\n\n function transfer_with_fee(\n address currency_address,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external override {\n xtokens.transfer_with_fee(\n currency_address,\n amount,\n fee,\n destination,\n weight\n );\n }\n\n function transfer_multiasset(\n Multilocation memory asset,\n uint256 amount,\n Multilocation memory destination,\n uint64 weight\n ) external override {\n xtokens.transfer_multiasset(asset, amount, destination, weight);\n }\n\n function transfer_multiasset_with_fee(\n Multilocation memory asset,\n uint256 amount,\n uint256 fee,\n Multilocation memory destination,\n uint64 weight\n ) external override {\n xtokens.transfer_multiasset_with_fee(\n asset,\n amount,\n fee,\n destination,\n weight\n );\n }\n\n function transfer_multi_currencies(\n Currency[] memory currencies,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) external override {\n xtokens.transfer_multi_currencies(\n currencies,\n fee_item,\n destination,\n weight\n );\n }\n\n function transfer_multi_assets(\n MultiAsset[] memory assets,\n uint32 fee_item,\n Multilocation memory destination,\n uint64 weight\n ) external override {\n xtokens.transfer_multi_assets(assets, fee_item, destination, weight);\n }\n}\n" } diff --git a/tests/contracts/solidity/BlockVariables.sol b/tests/contracts/solidity/BlockVariables.sol new file mode 100644 index 0000000000..af184bfb87 --- /dev/null +++ b/tests/contracts/solidity/BlockVariables.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract BlockVariables { + uint256 public initialgaslimit; + uint256 public initialchainid; + uint256 public initialnumber; + + constructor() { + initialgaslimit = block.gaslimit; + initialchainid = block.chainid; + initialnumber = block.number; + } + + function getGasLimit() public view returns (uint256) { + return block.gaslimit; + } + + function getChainId() public view returns (uint256) { + return block.chainid; + } + + function getNumber() public view returns (uint256) { + return block.number; + } +} diff --git a/tests/contracts/solidity/ERC20Instance.sol b/tests/contracts/solidity/ERC20Instance.sol new file mode 100644 index 0000000000..6683a47bf3 --- /dev/null +++ b/tests/contracts/solidity/ERC20Instance.sol @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +import "../../../precompiles/assets-erc20/ERC20.sol"; + +contract ERC20Instance is IERC20 { + /// The ierc20 at the known pre-compile address. + IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080); + address erc20address = 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080; + + receive() external payable { + // React to receiving ether + } + + function name() external view override returns (string memory) { + // We nominate our target collator with all the tokens provided + return erc20.name(); + } + + function symbol() external view override returns (string memory) { + // We nominate our target collator with all the tokens provided + return erc20.symbol(); + } + + function decimals() external view override returns (uint8) { + // We nominate our target collator with all the tokens provided + return erc20.decimals(); + } + + function totalSupply() external view override returns (uint256) { + // We nominate our target collator with all the tokens provided + return erc20.totalSupply(); + } + + function balanceOf(address who) external view override returns (uint256) { + // We nominate our target collator with all the tokens provided + return erc20.balanceOf(who); + } + + function allowance(address owner, address spender) + external + view + override + returns (uint256) + { + return erc20.allowance(owner, spender); + } + + function transfer(address to, uint256 value) + external + override + returns (bool) + { + return erc20.transfer(to, value); + } + + function transfer_delegate(address to, uint256 value) + external + returns (bool) + { + (bool result, bytes memory data) = erc20address.delegatecall( + abi.encodeWithSignature("transfer(address,uint256)", to, value) + ); + return result; + } + + function approve(address spender, uint256 value) + external + override + returns (bool) + { + return erc20.approve(spender, value); + } + + function approve_delegate(address spender, uint256 value) + external + returns (bool) + { + (bool result, bytes memory data) = erc20address.delegatecall( + abi.encodeWithSignature("approve(address,uint256)", spender, value) + ); + return result; + } + + function transferFrom( + address from, + address to, + uint256 value + ) external override returns (bool) { + return erc20.transferFrom(from, to, value); + } + + function transferFrom_delegate( + address from, + address to, + uint256 value + ) external returns (bool) { + (bool result, bytes memory data) = erc20address.delegatecall( + abi.encodeWithSignature( + "transferFrom(address,address,uint256)", + from, + to, + value + ) + ); + return result; + } +} diff --git a/tests/contracts/solidity/EventEmitter.sol b/tests/contracts/solidity/EventEmitter.sol new file mode 100644 index 0000000000..7a6e3735a5 --- /dev/null +++ b/tests/contracts/solidity/EventEmitter.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract EventEmitter { + event Constructed(address indexed owner); + + constructor() { + emit Constructed(msg.sender); + } +} diff --git a/tests/contracts/solidity/FailingConstructor.sol b/tests/contracts/solidity/FailingConstructor.sol new file mode 100644 index 0000000000..d92cde952a --- /dev/null +++ b/tests/contracts/solidity/FailingConstructor.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract FailingConstructor { + constructor() { + require(false); + } +} diff --git a/tests/contracts/solidity/Fibonacci.sol b/tests/contracts/solidity/Fibonacci.sol new file mode 100644 index 0000000000..f0bddc1193 --- /dev/null +++ b/tests/contracts/solidity/Fibonacci.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract Fibonacci { + function fib2(uint256 n) public pure returns (uint256 b) { + if (n == 0) { + return 0; + } + uint256 a = 1; + b = 1; + for (uint256 i = 2; i < n; i++) { + uint256 c = a + b; + a = b; + b = c; + } + return b; + } +} diff --git a/tests/contracts/solidity/HasherChecker.sol b/tests/contracts/solidity/HasherChecker.sol new file mode 100644 index 0000000000..8718e8ce51 --- /dev/null +++ b/tests/contracts/solidity/HasherChecker.sol @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract HasherChecker { + function ripemd160Check() public pure { + require( + ripemd160(bytes("Hello World!")) == + hex"8476ee4631b9b30ac2754b0ee0c47e161d3f724c" + ); + } + + function bn128AdditionCheck() public { + bool success; + uint256[4] memory input = [ + 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703, + 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915, + 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9, + 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 + ]; + uint256[2] memory result; + + assembly { + // 0x06 id of the bn256Add precompile + // 0 number of ether to transfer + // 128 size of call parameters, i.e. 128 bytes total + // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point + success := call(not(0), 0x06, 0, input, 128, result, 64) + } + require(success, "elliptic curve addition failed"); + require( + result[0] == + 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7, + "failed" + ); + require( + result[1] == + 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204, + "failed" + ); + } + + function bn128MultiplyCheck() public { + bool success; + uint256[3] memory input = [ + 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3, + 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6, + 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 + ]; + uint256[2] memory result; + + assembly { + // 0x07 id of the bn256Mul precompile + // 0 number of ether to transfer + // 96 size of call parameters, i.e. 128 bytes total + // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point + success := call(not(0), 0x07, 0, input, 96, result, 64) + } + require(success, "elliptic curve addition failed"); + require( + result[0] == + 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3, + "failed" + ); + require( + result[1] == + 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451, + "failed" + ); + } + + function bn128PairingCheck() public { + uint256[12] memory input = [ + 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02, + 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84, + 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee, + 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f, + 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237, + 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f, + 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9, + 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1, + 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2, + 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed, + 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b, + 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa + ]; + uint256[1] memory result; + bool success; + assembly { + // 0x08 id of the bn256CheckPairing precompile + // 0 number of ether to transfer + // 0 since we have an array of fixed length, our input starts in 0 + // 384 size of call parameters, i.e. 12*256 bits == 384 bytes + // 32 size of result (one 32 byte boolean!) + success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) + } + require(success, "elliptic curve pairing failed"); + require(result[0] == 1, "failed"); + } + + function modExpWrapper( + uint256 _b, + uint256 _e, + uint256 _m + ) public returns (uint256 result) { + assembly { + // Free memory pointer + let pointer := mload(0x40) + // Define length of base, exponent and modulus. 0x20 == 32 bytes + mstore(pointer, 0x20) + mstore(add(pointer, 0x20), 0x20) + mstore(add(pointer, 0x40), 0x20) + // Define variables base, exponent and modulus + mstore(add(pointer, 0x60), _b) + mstore(add(pointer, 0x80), _e) + + mstore(add(pointer, 0xa0), _m) + // Store the result + let value := mload(0xc0) + // Call the precompiled contract 0x05 = bigModExp + if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) { + revert(0, 0) + } + result := mload(value) + } + } + + function modExpChecker() public { + require(modExpWrapper(3, 5, 7) == 5); + require(modExpWrapper(5, 7, 11) == 3); + } + + function blake2Wrapper( + uint32 rounds, + bytes32[2] memory h, + bytes32[4] memory m, + bytes8[2] memory t, + bool f + ) public view returns (bytes32[2] memory) { + bytes32[2] memory output; + + bytes memory args = abi.encodePacked( + rounds, + h[0], + h[1], + m[0], + m[1], + m[2], + m[3], + t[0], + t[1], + f + ); + + assembly { + if iszero( + staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40) + ) { + revert(0, 0) + } + } + + return output; + } + + function blake2Check() public { + uint32 rounds = 12; + + bytes32[2] memory h; + h[ + 0 + ] = hex"48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5"; + h[ + 1 + ] = hex"d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b"; + + bytes32[4] memory m; + m[ + 0 + ] = hex"6162630000000000000000000000000000000000000000000000000000000000"; + m[ + 1 + ] = hex"0000000000000000000000000000000000000000000000000000000000000000"; + m[ + 2 + ] = hex"0000000000000000000000000000000000000000000000000000000000000000"; + m[ + 3 + ] = hex"0000000000000000000000000000000000000000000000000000000000000000"; + + bytes8[2] memory t; + t[0] = hex"03000000"; + t[1] = hex"00000000"; + + bool f = true; + + // Expected output: + // ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1 + // 7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923 + + bytes32[2] memory result = blake2Wrapper(rounds, h, m, t, f); + require( + result[0] == + 0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1, + "failed" + ); + require( + result[1] == + 0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923, + "failed" + ); + } +} diff --git a/tests/contracts/solidity/Incrementor.sol b/tests/contracts/solidity/Incrementor.sol new file mode 100644 index 0000000000..218bd9fe09 --- /dev/null +++ b/tests/contracts/solidity/Incrementor.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract Incrementor { + uint256 public count; + + constructor() { + count = 0; + } + + function incr() public { + count = count + 1; + } + + function incr(uint256 num) public returns (uint256) { + count = count + num; + return count; + } +} diff --git a/tests/contracts/solidity/LocalAssetExtendedErc20Instance.sol b/tests/contracts/solidity/LocalAssetExtendedErc20Instance.sol new file mode 100644 index 0000000000..03f4c14ac4 --- /dev/null +++ b/tests/contracts/solidity/LocalAssetExtendedErc20Instance.sol @@ -0,0 +1,362 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +/** + * @title ERC20 interface + * @dev see https://github.com/ethereum/EIPs/issues/20 + * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts + */ +interface LocalAssetExtendedErc20 { + /** + * @dev Returns the name of the token. + * Selector: 06fdde03 + */ + function name() external view returns (string memory); + + /** + * @dev Returns the symbol of the token. + * Selector: 95d89b41 + */ + function symbol() external view returns (string memory); + + /** + * @dev Returns the decimals places of the token. + * Selector: 313ce567 + */ + function decimals() external view returns (uint8); + + /** + * @dev Total number of tokens in existence + * Selector: 18160ddd + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Gets the balance of the specified address. + * Selector: 70a08231 + * @param who The address to query the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address who) external view returns (uint256); + + /** + * @dev Function to check the amount of tokens that an owner allowed to a spender. + * Selector: dd62ed3e + * @param owner address The address which owns the funds. + * @param spender address The address which will spend the funds. + * @return A uint256 specifying the amount of tokens still available for the spender. + */ + function allowance(address owner, address spender) + external + view + returns (uint256); + + /** + * @dev Transfer token for a specified address + * Selector: a9059cbb + * @param to The address to transfer to. + * @param value The amount to be transferred. + */ + function transfer(address to, uint256 value) external returns (bool); + + /** + * @dev Approve the passed address to spend the specified amount of tokens on behalf + * of msg.sender. + * Beware that changing an allowance with this method brings the risk that someone may + * use both the old + * and the new allowance by unfortunate transaction ordering. One possible solution to + * mitigate this race condition is to first reduce the spender's allowance to 0 and set + * the desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * Selector: 095ea7b3 + * @param spender The address which will spend the funds. + * @param value The amount of tokens to be spent. + */ + function approve(address spender, uint256 value) external returns (bool); + + /** + * @dev Transfer tokens from one address to another + * Selector: 23b872dd + * @param from address The address which you want to send tokens from + * @param to address The address which you want to transfer to + * @param value uint256 the amount of tokens to be transferred + */ + function transferFrom( + address from, + address to, + uint256 value + ) external returns (bool); + + /** + * @dev Mint tokens to an address + * Selector: 23b872dd + * @param to address The address to which you want to mint tokens + * @param value uint256 the amount of tokens to be minted + */ + function mint(address to, uint256 value) external returns (bool); + + /** + * @dev Burn tokens from an address + * Selector: 23b872dd + * @param from address The address from which you want to burn tokens + * @param value uint256 the amount of tokens to be burnt + */ + function burn(address from, uint256 value) external returns (bool); + + /** + * @dev Freeze an account, preventing it from operating with the asset + * Selector: 23b872dd + * @param account address The address that you want to freeze + */ + function freeze(address account) external returns (bool); + + /** + * @dev Unfreeze an account, letting it from operating againt with the asset + * Selector: 23b872dd + * @param account address The address that you want to unfreeze + */ + function thaw(address account) external returns (bool); + + /** + * @dev Freeze the entire asset operations + * Selector: 23b872dd + */ + function freeze_asset() external returns (bool); + + /** + * @dev Unfreeze the entire asset operations + * Selector: 23b872dd + */ + function thaw_asset() external returns (bool); + + /** + * @dev Transfer the ownership of an asset to a new account + * Selector: 23b872dd + * @param owner address The address of the new owner + */ + function transfer_ownership(address owner) external returns (bool); + + /** + * @dev Specify the issuer, admin and freezer of an asset + * Selector: 23b872dd + * @param issuer address The address capable of issuing tokens + * @param admin address The address capable of burning tokens and unfreezing accounts/assets + * @param freezer address The address capable of freezing accounts/asset + */ + function set_team( + address issuer, + address admin, + address freezer + ) external returns (bool); + + /** + * @dev Specify the name, symbol and decimals of your asset + * Selector: 23b872dd + * @param name string The name of the asset + * @param symbol string The symbol of the asset + * @param decimals uint8 The number of decimals of your asset + */ + function set_metadata( + string calldata name, + string calldata symbol, + uint8 decimals + ) external returns (bool); + + /** + * @dev Clear the name, symbol and decimals of your asset + * Selector: 23b872dd + */ + function clear_metadata() external returns (bool); + + /** + * @dev Event emited when a transfer has been performed. + * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef + * @param from address The address sending the tokens + * @param to address The address receiving the tokens. + * @param value uint256 The amount of tokens transfered. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Event emited when an approval has been registered. + * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 + * @param owner address Owner of the tokens. + * @param spender address Allowed spender. + * @param value uint256 Amount of tokens approved. + */ + event Approval( + address indexed owner, + address indexed spender, + uint256 value + ); +} + +contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 { + /// The ierc20 at the known pre-compile address. + LocalAssetExtendedErc20 public localasseterc20 = + LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701); + address localasseterc20address = 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701; + + receive() external payable { + // React to receiving ether + } + + function set_address_interface(address instance_address) public { + localasseterc20 = LocalAssetExtendedErc20(instance_address); + localasseterc20address = instance_address; + } + + function get_address() public view returns (address) { + return localasseterc20address; + } + + function name() external view override returns (string memory) { + // We nominate our target collator with all the tokens provided + return localasseterc20.name(); + } + + function symbol() external view override returns (string memory) { + // We nominate our target collator with all the tokens provided + return localasseterc20.symbol(); + } + + function decimals() external view override returns (uint8) { + // We nominate our target collator with all the tokens provided + return localasseterc20.decimals(); + } + + function totalSupply() external view override returns (uint256) { + // We nominate our target collator with all the tokens provided + return localasseterc20.totalSupply(); + } + + function balanceOf(address who) external view override returns (uint256) { + // We nominate our target collator with all the tokens provided + return localasseterc20.balanceOf(who); + } + + function allowance(address owner, address spender) + external + view + override + returns (uint256) + { + return localasseterc20.allowance(owner, spender); + } + + function transfer(address to, uint256 value) + external + override + returns (bool) + { + return localasseterc20.transfer(to, value); + } + + function mint(address to, uint256 value) external override returns (bool) { + return localasseterc20.mint(to, value); + } + + function burn(address from, uint256 value) + external + override + returns (bool) + { + return localasseterc20.burn(from, value); + } + + function freeze(address account) external override returns (bool) { + return localasseterc20.freeze(account); + } + + function thaw(address account) external override returns (bool) { + return localasseterc20.thaw(account); + } + + function freeze_asset() external override returns (bool) { + return localasseterc20.freeze_asset(); + } + + function thaw_asset() external override returns (bool) { + return localasseterc20.thaw_asset(); + } + + function transfer_ownership(address owner) + external + override + returns (bool) + { + return localasseterc20.transfer_ownership(owner); + } + + function set_team( + address issuer, + address admin, + address freezer + ) external override returns (bool) { + return localasseterc20.set_team(issuer, admin, freezer); + } + + function set_metadata( + string calldata name, + string calldata symbol, + uint8 decimals + ) external override returns (bool) { + return localasseterc20.set_metadata(name, symbol, decimals); + } + + function clear_metadata() external override returns (bool) { + return localasseterc20.clear_metadata(); + } + + function transfer_delegate(address to, uint256 value) + external + returns (bool) + { + (bool result, bytes memory data) = localasseterc20address.delegatecall( + abi.encodeWithSignature("transfer(address,uint256)", to, value) + ); + return result; + } + + function approve(address spender, uint256 value) + external + override + returns (bool) + { + return localasseterc20.approve(spender, value); + } + + function approve_delegate(address spender, uint256 value) + external + returns (bool) + { + (bool result, bytes memory data) = localasseterc20address.delegatecall( + abi.encodeWithSignature("approve(address,uint256)", spender, value) + ); + return result; + } + + function transferFrom( + address from, + address to, + uint256 value + ) external override returns (bool) { + return localasseterc20.transferFrom(from, to, value); + } + + function transferFrom_delegate( + address from, + address to, + uint256 value + ) external returns (bool) { + (bool result, bytes memory data) = localasseterc20address.delegatecall( + abi.encodeWithSignature( + "transferFrom(address,address,uint256)", + from, + to, + value + ) + ); + return result; + } +} diff --git a/tests/contracts/solidity/Looper.sol b/tests/contracts/solidity/Looper.sol new file mode 100644 index 0000000000..2c32a8776e --- /dev/null +++ b/tests/contracts/solidity/Looper.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract Looper { + uint256 public count; + + function infinite() public pure { + while (true) {} + } + + function incrementalLoop(uint256 n) public { + uint256 i = 0; + while (i < n) { + count = count + 1; + i += 1; + } + } +} diff --git a/tests/contracts/solidity/MultiplyBy7.sol b/tests/contracts/solidity/MultiplyBy7.sol new file mode 100644 index 0000000000..5da97fe7ce --- /dev/null +++ b/tests/contracts/solidity/MultiplyBy7.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract MultiplyBy7 { + function multiply(uint256 a) public pure returns (uint256 d) { + return a * 7; + } +} diff --git a/tests/contracts/solidity/Proxy.sol b/tests/contracts/solidity/Proxy.sol new file mode 100644 index 0000000000..7c04255e7d --- /dev/null +++ b/tests/contracts/solidity/Proxy.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract Proxy { + function call(address target, bytes memory data) + public + returns (bool, bytes memory) + { + return target.call(data); + } + + function delegateCall(address target, bytes memory data) + public + returns (bool, bytes memory) + { + return target.delegatecall(data); + } +} diff --git a/tests/contracts/solidity/RandomnessLotteryDemo.sol b/tests/contracts/solidity/RandomnessLotteryDemo.sol new file mode 100644 index 0000000000..c51a5210e3 --- /dev/null +++ b/tests/contracts/solidity/RandomnessLotteryDemo.sol @@ -0,0 +1,279 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +import "../../../precompiles/randomness/Randomness.sol"; +import "../../../precompiles/randomness/RandomnessConsumer.sol"; + +/// @notice Smart contract to demonstrate how to use requestLocalVRFRandomWords +contract RandomnessLotteryDemo is RandomnessConsumer { + /// @notice The Randomness Precompile Interface + Randomness public randomness = + Randomness(0x0000000000000000000000000000000000000809); + + /// @notice The lottery has requested random words and is waiting for fulfillment + error WaitingFulfillment(); + + /// @notice The lottery doesn't have enough participants to start + error NotEnoughParticipants(uint256 value, uint256 required); + + /// @notice The lottery doesn't accept additional participants + error TooManyParticipants(uint256 value, uint256 required); + + /// @notice There are not enough fee to start the lottery + error NotEnoughFee(uint256 value, uint256 required); + + /// @notice The deposit given is too low + error DepositTooLow(uint256 value, uint256 required); + + /// @notice The provided fee to participate doesn't match the required amount + error InvalidParticipationFee(uint256 value, uint256 required); + + /// @notice Event sent when a winner is awarded + /// @param winner The participant getting awarded + /// @param randomWord The randomWord being used (for informative purposes) + /// @param amount The amount being awarded + event Awarded(address indexed winner, uint256 randomWord, uint256 amount); + + /// @notice Event sent when the lottery started + /// @param participantCount The number of participants + /// @param jackpot The total jackpot + /// @param requestId The pseudo-random request id + event Started(uint256 participantCount, uint256 jackpot, uint256 requestId); + + /// @notice Event sent when the lottery ends + /// @param participantCount The number of participants + /// @param jackpot The total jackpot + /// @param winnerCount The number of winners + event Ended(uint256 participantCount, uint256 jackpot, uint256 winnerCount); + + /// @notice The status of lottery + /// @param OpenForRegistration Participants can register to get a chance to win + /// @param RollingNumbers The lottery has requested the random words and is waiting for them + /// @param Expired The lottery has been rolling numbers for too long. The randomness has expired + enum LotteryStatus { + OpenForRegistration, + RollingNumbers, + Expired + } + + /// @notice The gas limit allowed to be used for the fulfillment + /// @dev Depends on the code that is executed and the number of words requested + /// @dev so XXX is a safe default for this example contract. Test and adjust + /// @dev this limit based on the size of the request and the processing of the + /// @dev callback request in the fulfillRandomWords() function. + /// @dev The fee paid to start the lottery needs to be sufficient to pay for the gas limit + uint64 public FULFILLMENT_GAS_LIMIT = 100000; // TODO: fill XXX + + /// @notice The minimum fee needed to start the lottery + /// @dev This does not guarantee that there will be enough fee to pay for the + /// @dev gas used by the fulfillment. Ideally it should be over-estimated + /// @dev considering possible fluctuation of the gas price. + /// @dev Additional fee will be refunded to the caller + uint256 public MIN_FEE = FULFILLMENT_GAS_LIMIT * 1 gwei; + + /// @notice The number of winners + /// @dev This number corresponds to how many random words will requested + /// @dev Cannot exceed MAX_RANDOM_WORDS + uint8 public NUM_WINNERS = 2; + + /// @notice The number of block before the request can be fulfilled (for Local VRF randomness) + /// @dev The MIN_VRF_BLOCKS_DELAY provides a minimum number that is safe enough for + /// @dev games with low economical value at stake. + /// @dev Increasing the delay reduces slightly the probability (already very low) + /// @dev of a collator being able to predict the pseudo-random number + uint32 public VRF_BLOCKS_DELAY = MIN_VRF_BLOCKS_DELAY; + + /// @notice The minimum number of participants to start the lottery + uint256 public MIN_PARTICIPANTS = 3; + + /// @notice The maximum number of participants allowed to participate + /// @dev It is important to limit the total jackpot (by limiting the number of + /// @dev participants) to guarantee the economic incentive of a collator + /// @dev to avoid trying to influence the pseudo-random + /// @dev (See Randomness.sol for more details) + uint256 public MAX_PARTICIPANTS = 20; + + /// @notice The fee needed to participate in the lottery. Will go into the jackpot + uint256 public PARTICIPATION_FEE = 1 ether; + + /// @notice A string used to allow having different salt that other contracts + bytes32 public SALT_PREFIX = "my_demo_salt_change_me"; + + /// @notice global number of request done + /// @dev This number is used as a salt to make it unique for each request + uint256 public globalRequestCount; + + /// @notice The current request id + uint256 public requestId; + + /// @notice The list of current participants + address[] public participants; + + /// @notice The current amount of token at stake in the lottery + uint256 public jackpot; + + /// @notice the owner of the contract + address owner; + + /// @notice Which randomness source to use + Randomness.RandomnessSource randomnessSource; + + constructor(Randomness.RandomnessSource source) + payable + RandomnessConsumer() + { + /// Because this contract can only perform 1 random request at a time, + /// We only need to have 1 required deposit. + uint256 requiredDeposit = 1000000000000000000; // TODO replace with randomness.requiredDeposit(); + if (msg.value < requiredDeposit) { + revert DepositTooLow(msg.value, requiredDeposit); + } + + randomnessSource = source; + owner = msg.sender; + globalRequestCount = 0; + jackpot = 0; + /// Set the requestId to the maximum allowed value by the precompile (64 bits) + requestId = 2**64 - 1; + } + + function status() external view returns (LotteryStatus) { + Randomness.RequestStatus requestStatus = randomness.getRequestStatus( + requestId + ); + if (requestStatus == Randomness.RequestStatus.DoesNotExist) { + return LotteryStatus.OpenForRegistration; + } + if ( + requestStatus == Randomness.RequestStatus.Pending || + requestStatus == Randomness.RequestStatus.Ready + ) { + return LotteryStatus.RollingNumbers; + } + return LotteryStatus.Expired; + } + + function participate() external payable { + /// We check we haven't started the randomness request yet + if ( + randomness.getRequestStatus(requestId) != + Randomness.RequestStatus.DoesNotExist + ) { + revert WaitingFulfillment(); + } + + //each player is compelled to add a certain ETH to join + if (msg.value != PARTICIPATION_FEE) { + revert InvalidParticipationFee(msg.value, PARTICIPATION_FEE); + } + participants.push(msg.sender); + jackpot += msg.value; + } + + function startLottery() external payable onlyOwner { + /// We check we haven't started the randomness request yet + if ( + randomness.getRequestStatus(requestId) != + Randomness.RequestStatus.DoesNotExist + ) { + revert WaitingFulfillment(); + } + + if (participants.length < MIN_PARTICIPANTS) { + revert NotEnoughParticipants(participants.length, MIN_PARTICIPANTS); + } + if (participants.length >= MAX_PARTICIPANTS) { + revert TooManyParticipants(participants.length, MAX_PARTICIPANTS); + } + + uint256 fee = msg.value; + if (fee < MIN_FEE) { + revert NotEnoughFee(fee, MIN_FEE); + } + + /// We verify there is enough balance on the contract to pay for the deposit. + /// This would fail only if the deposit amount required is changed in the + /// Randomness Precompile. + uint256 requiredDeposit = 1000000000000000000; // TODO replace with randomness.requiredDeposit(); + if (address(this).balance < jackpot + requiredDeposit) { + revert DepositTooLow( + address(this).balance - jackpot, + requiredDeposit + ); + } + + if (randomnessSource == Randomness.RandomnessSource.LocalVRF) { + /// Requesting NUM_WINNERS random words using Local VRF Randomness + /// with a delay of VRF_BLOCKS_DELAY blocks + /// Refund after fulfillment will go back to the caller of this function + /// globalRequestCount is used as salt to be unique for each request + requestId = randomness.requestLocalVRFRandomWords( + msg.sender, + fee, + FULFILLMENT_GAS_LIMIT, + SALT_PREFIX ^ bytes32(globalRequestCount++), + NUM_WINNERS, + VRF_BLOCKS_DELAY + ); + } else { + /// Requesting NUM_WINNERS random words using Babe Epoch Randomness + /// Babe Epoch Randomness requires a longer delay (depending on the relaychain) + /// Refund after fulfillment will go back to the caller of this function + /// globalRequestCount is used as salt to be unique for each request + requestId = randomness.requestRelayBabeEpochRandomWords( + msg.sender, + fee, + FULFILLMENT_GAS_LIMIT, + SALT_PREFIX ^ bytes32(globalRequestCount++), + NUM_WINNERS + ); + } + } + + /// @notice Allows to increase the fee associated with the request + /// @dev This is needed if the gas price increase significantly before + /// @dev the request is fulfilled + function increaseRequestFee() external payable { + randomness.increaseRequestFee(requestId, msg.value); + } + + /// @dev This function is called only by the fulfillment callback + function pickWinners(uint256[] memory randomWords) internal { + /// Get the total number of winners to select + uint256 totalWinners = NUM_WINNERS < participants.length + ? NUM_WINNERS + : participants.length; + + /// The amount distributed to each winner + /// The left-over is kept for the next lottery + uint256 amountAwarded = jackpot / totalWinners; + emit Ended(participants.length, jackpot, totalWinners); + for (uint32 i = 0; i < totalWinners; i++) { + /// This is safe to index randomWords with i because we requested + /// NUM_WINNERS random words + uint256 randomWord = randomWords[i]; + + /// Using modulo is not totally fair, but fair enough for this demo. + uint256 index = randomWord % participants.length; + address payable winner = payable(participants[index]); + delete participants[index]; + emit Awarded(winner, randomWord, amountAwarded); + jackpot -= amountAwarded; + winner.transfer(amountAwarded); + } + delete participants; + requestId = 0; + } + + function fulfillRandomWords( + uint256, /* requestId */ + uint256[] memory randomWords + ) internal override { + pickWinners(randomWords); + } + + modifier onlyOwner() { + require(msg.sender == owner); + _; + } +} diff --git a/tests/contracts/solidity/RelayEncoderInstance.sol b/tests/contracts/solidity/RelayEncoderInstance.sol new file mode 100644 index 0000000000..385aad72bf --- /dev/null +++ b/tests/contracts/solidity/RelayEncoderInstance.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +import "../../../precompiles/relay-encoder/RelayEncoder.sol"; + +// We only use this to be able to generate the input data, since we need a compiled instance +contract RelayEncoderInstance is RelayEncoder { + /// The Relay Encoder wrapper at the known pre-compile address. + RelayEncoder public relayencoder = + RelayEncoder(0x0000000000000000000000000000000000000805); + + function encode_bond( + uint256 controller_address, + uint256 amount, + bytes memory reward_destination + ) external pure override returns (bytes memory result) { + return "0x00"; + } + + function encode_bond_extra(uint256 amount) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_unbond(uint256 amount) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_withdraw_unbonded(uint32 slashes) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_validate(uint256 comission, bool blocked) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_nominate(uint256[] memory nominees) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_chill() + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_set_payee(bytes memory reward_destination) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_set_controller(uint256 controller) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } + + function encode_rebond(uint256 amount) + external + pure + override + returns (bytes memory result) + { + return "0x00"; + } +} diff --git a/tests/contracts/solidity/StakingAttacker.sol b/tests/contracts/solidity/StakingAttacker.sol new file mode 100644 index 0000000000..2a38f5cd09 --- /dev/null +++ b/tests/contracts/solidity/StakingAttacker.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +import "../../../precompiles/parachain-staking/StakingInterface.sol"; + +contract StakingAttacker { + /// The collator (ALITH) that this contract will benefit with delegations + address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac; + + /// The ParachainStaking wrapper at the known pre-compile address. + ParachainStaking public staking = + ParachainStaking(0x0000000000000000000000000000000000000800); + + /// Take advantage of the EVMs reversion logic and the fact that it doesn't extend to + /// Substrate storage to score free delegations for a collator candidate of our choosing + function score_a_free_delegation() public payable { + // We delegate our target collator with all the tokens provided + staking.delegate(target, msg.value, 1, 1); + revert( + "By reverting this transaction, we return the eth to the caller" + ); + } +} diff --git a/tests/contracts/solidity/TraceFilter.sol b/tests/contracts/solidity/TraceFilter.sol new file mode 100644 index 0000000000..feb42c3be8 --- /dev/null +++ b/tests/contracts/solidity/TraceFilter.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +contract TraceFilter { + constructor(bool should_revert) { + if (should_revert) { + revert(); + } + } + + function call_ok() public pure {} + + function call_revert() public pure { + revert(); + } + + function subcalls(address target0, address target1) public pure { + try TraceFilter(target0).subsubcalls(target1) {} catch {} + try TraceFilter(target0).subsubcalls(target1) {} catch {} + } + + function subsubcalls(address target1) public pure { + TraceFilter(target1).call_ok(); + TraceFilter(target1).call_revert(); + } + + function heavy_steps(uint256 store_steps, uint256 op_steps) external { + while (store_steps != 0) { + assembly { + sstore(store_steps, store_steps) + } + store_steps--; + } + + while (op_steps != 0) { + op_steps--; + } + } + + // This part is to trace Wasm memory overflow + uint256 public a; + uint256 public b; + uint256 public c; + uint256 public d; + uint256 public e; + uint256 public f; + uint256 public g; + uint256 public h; + uint256 public i; + uint256 public j; + + function set_and_loop(uint256 loops) public returns (uint256 result) { + a = 1; + b = 1; + c = 1; + d = 1; + e = 1; + f = 1; + g = 1; + h = 1; + i = 1; + j = 1; + uint256 count = 0; + while (i < loops) { + count += 1; + } + return 1; + } +} + +contract TraceCallee { + uint256 public store; + + function addtwo(uint256 _value) external returns (uint256 result) { + uint256 x = 7; + store = _value; + return _value + x; + } +} + +contract TraceCaller { + TraceCallee internal callee; + uint256 public store; + + function someAction(address _addr, uint256 _number) public { + callee = TraceCallee(_addr); + store = callee.addtwo(_number); + } +} diff --git a/tests/contracts/solidity/XCMTransactorInstance.sol b/tests/contracts/solidity/XCMTransactorInstance.sol new file mode 100644 index 0000000000..624d9dc2ae --- /dev/null +++ b/tests/contracts/solidity/XCMTransactorInstance.sol @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +import "../../../precompiles/xcm-transactor/XcmTransactor.sol"; + +contract XcmTransactorInstance is XcmTransactor { + /// The Xcm Transactor wrapper at the known pre-compile address. + XcmTransactor public xcmtransactor = + XcmTransactor(0x0000000000000000000000000000000000000806); + + function index_to_account(uint16 index) + external + view + override + returns (address) + { + // We nominate our target collator with all the tokens provided + return xcmtransactor.index_to_account(index); + } + + function transact_info(Multilocation memory multilocation) + external + view + override + returns ( + uint64, + uint256, + uint64 + ) + { + return xcmtransactor.transact_info(multilocation); + } + + function transact_info_with_signed(Multilocation memory multilocation) + external + view + override + returns ( + uint64, + uint64, + uint64 + ) + { + return xcmtransactor.transact_info_with_signed(multilocation); + } + + function fee_per_second(Multilocation memory multilocation) + external + view + override + returns (uint256) + { + return xcmtransactor.fee_per_second(multilocation); + } + + function transact_through_derivative_multilocation( + uint8 transactor, + uint16 index, + Multilocation memory fee_asset, + uint64 weight, + bytes memory inner_call + ) external override { + xcmtransactor.transact_through_derivative_multilocation( + transactor, + index, + fee_asset, + weight, + inner_call + ); + } + + function transact_through_derivative( + uint8 transactor, + uint16 index, + address currency_id, + uint64 weight, + bytes memory inner_call + ) external override { + xcmtransactor.transact_through_derivative( + transactor, + index, + currency_id, + weight, + inner_call + ); + } + + function transact_through_signed( + Multilocation memory dest, + address fee_location_address, + uint64 weight, + bytes memory call + ) external override { + xcmtransactor.transact_through_signed( + dest, + fee_location_address, + weight, + call + ); + } + + function transact_through_signed_multilocation( + Multilocation memory dest, + Multilocation memory fee_location, + uint64 weight, + bytes memory call + ) external override { + xcmtransactor.transact_through_signed_multilocation( + dest, + fee_location, + weight, + call + ); + } +} diff --git a/tests/contracts/solidity/XTokensInstance.sol b/tests/contracts/solidity/XTokensInstance.sol new file mode 100644 index 0000000000..1e8010960b --- /dev/null +++ b/tests/contracts/solidity/XTokensInstance.sol @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.0; + +import "../../../precompiles/xtokens/Xtokens.sol"; + +contract XtokensInstance is Xtokens { + /// The Xtokens wrapper at the known pre-compile address. + Xtokens public xtokens = + Xtokens(0x0000000000000000000000000000000000000804); + + function transfer( + address currency_address, + uint256 amount, + Multilocation memory destination, + uint64 weight + ) external override { + xtokens.transfer(currency_address, amount, destination, weight); + } + + function transfer_with_fee( + address currency_address, + uint256 amount, + uint256 fee, + Multilocation memory destination, + uint64 weight + ) external override { + xtokens.transfer_with_fee( + currency_address, + amount, + fee, + destination, + weight + ); + } + + function transfer_multiasset( + Multilocation memory asset, + uint256 amount, + Multilocation memory destination, + uint64 weight + ) external override { + xtokens.transfer_multiasset(asset, amount, destination, weight); + } + + function transfer_multiasset_with_fee( + Multilocation memory asset, + uint256 amount, + uint256 fee, + Multilocation memory destination, + uint64 weight + ) external override { + xtokens.transfer_multiasset_with_fee( + asset, + amount, + fee, + destination, + weight + ); + } + + function transfer_multi_currencies( + Currency[] memory currencies, + uint32 fee_item, + Multilocation memory destination, + uint64 weight + ) external override { + xtokens.transfer_multi_currencies( + currencies, + fee_item, + destination, + weight + ); + } + + function transfer_multi_assets( + MultiAsset[] memory assets, + uint32 fee_item, + Multilocation memory destination, + uint64 weight + ) external override { + xtokens.transfer_multi_assets(assets, fee_item, destination, weight); + } +} diff --git a/tests/contracts/sources.ts b/tests/contracts/sources.ts deleted file mode 100644 index b416bb35c0..0000000000 --- a/tests/contracts/sources.ts +++ /dev/null @@ -1,1797 +0,0 @@ -export const contractSources: { [key: string]: string } = { - TestContract: ` - pragma solidity >=0.8.0; - - contract TestContract { - function multiply(uint a) public pure returns(uint d) { - return a *7; - } - }`, - FailContract: ` - pragma solidity >=0.8.0; - - contract FailContract { - constructor() public { - require(false); - } - }`, - // simple incremental count contract to test contract with state changes - TestContractIncr: ` - pragma solidity >=0.8.0; - - contract TestContractIncr { - uint public count; - - constructor() public { - count = 0; - } - - function incr() public { - count=count+1; - } - }`, - // infinite loop call - InfiniteContract: ` - pragma solidity >=0.8.0; - - contract InfiniteContract { - function infinite() public pure returns(uint d) {while (true) {}} - }`, - // infinite loop call with variable allocation - InfiniteContractVar: ` - pragma solidity >=0.8.0; - - contract InfiniteContractVar { - uint public count; - - constructor() public { - count = 0; - } - - function infinite() public { - while (true) { - count=count+1; - } - } - }`, - // definite loop call with variable allocation - FiniteLoopContract: ` - pragma solidity >=0.8.0; - - contract FiniteLoopContract { - uint public count; - - constructor() public { - count = 0; - } - - function incr(uint n) public { - uint i=0; - while (i=0.8.0; - - contract SingleEventContract { - event Constructed(address indexed owner); - - constructor() { - emit Constructed(msg.sender); - } - }`, - HashRipmd160: ` - pragma solidity >=0.8.0; - contract HashRipmd160 { - constructor() { - require(ripemd160(bytes ('Hello World!')) == - hex'8476ee4631b9b30ac2754b0ee0c47e161d3f724c'); - } - }`, - Bn128Addition: ` - pragma solidity >=0.8.0; - contract Bn128Addition{ - constructor() { - bool success; - uint256[4] memory input = [ - 0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703, - 0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915, - 0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9, - 0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266 - ]; - uint256[2] memory result; - - assembly { - // 0x06 id of the bn256Add precompile - // 0 number of ether to transfer - // 128 size of call parameters, i.e. 128 bytes total - // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point - success := call(not(0), 0x06, 0, input, 128, result, 64) - } - require(success, "elliptic curve addition failed"); - require( - result[0] == - 0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7, - "failed"); - require( - result[1] == - 0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204, - "failed"); - } - }`, - Bn128Multiply: ` - pragma solidity >=0.8.0; - contract Bn128Multiply{ - constructor() { - bool success; - uint256[3] memory input = [ - 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3, - 0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6, - 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000 - ]; - uint256[2] memory result; - - assembly { - // 0x07 id of the bn256Mul precompile - // 0 number of ether to transfer - // 96 size of call parameters, i.e. 128 bytes total - // 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point - success := call(not(0), 0x07, 0, input, 96, result, 64) - } - require(success, "elliptic curve addition failed"); - require( - result[0] == - 0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3, - "failed"); - require( - result[1] == - 0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451, - "failed"); - } - }`, - Bn128Pairing: ` - pragma solidity >=0.8.0; - contract Bn128Pairing { - constructor() { - uint256[12] memory input = [ - 0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02, - 0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84, - 0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee, - 0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f, - 0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237, - 0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f, - 0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9, - 0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1, - 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2, - 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed, - 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b, - 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - ]; - uint256[1] memory result; - bool success; - assembly { - // 0x08 id of the bn256CheckPairing precompile - // 0 number of ether to transfer - // 0 since we have an array of fixed length, our input starts in 0 - // 384 size of call parameters, i.e. 12*256 bits == 384 bytes - // 32 size of result (one 32 byte boolean!) - success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32) - } - require(success, "elliptic curve pairing failed"); - require(result[0] == 1, "failed"); - } - }`, - ModularCheck: ` - pragma solidity >=0.8.0; - contract ModularCheck { - // Verify simple modular exponentiation - constructor() { - require(modExp(3, 5, 7) == 5); - require(modExp(5, 7, 11) == 3); - } - // Wrapper function to use the precompile. - // Taken from https://ethereum.stackexchange.com/a/71590/9963 - function modExp(uint256 _b, uint256 _e, uint256 _m) public returns (uint256 result) { - assembly { - // Free memory pointer - let pointer := mload(0x40) - // Define length of base, exponent and modulus. 0x20 == 32 bytes - mstore(pointer, 0x20) - mstore(add(pointer, 0x20), 0x20) - mstore(add(pointer, 0x40), 0x20) - // Define variables base, exponent and modulus - mstore(add(pointer, 0x60), _b) - mstore(add(pointer, 0x80), _e) - - mstore(add(pointer, 0xa0), _m) - // Store the result - let value := mload(0xc0) - // Call the precompiled contract 0x05 = bigModExp - if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) { - revert(0, 0) - } - result := mload(value) - } - } - }`, - TraceFilter: ` - pragma solidity >=0.8.0; - contract TraceFilter { - constructor(bool should_revert) { - if (should_revert) { - revert(); - } - } - - function call_ok() public { } - - function call_revert() public { - revert(); - } - - function subcalls(address target0, address target1) public { - try TraceFilter(target0).subsubcalls(target1) { } catch { } - try TraceFilter(target0).subsubcalls(target1) { } catch { } - } - - function subsubcalls(address target1) public { - TraceFilter(target1).call_ok(); - TraceFilter(target1).call_revert(); - } - }`, - Callee: ` - pragma solidity >=0.8.0; - contract Callee { - uint public store; - function addtwo(uint _value) external returns (uint result) { - uint x = 7; - store = _value; - return _value + x; - } - }`, - Caller: ` - pragma solidity >=0.8.0; - interface Callee { - function addtwo(uint _value) external returns (uint result); - } - contract Caller { - Callee internal callee; - uint public store; - function someAction(address _addr, uint _number) public { - callee = Callee(_addr); - store = callee.addtwo(_number); - } - }`, - Incrementer: ` - pragma solidity >=0.8.0; - contract Incrementer { - uint256 number; - function sum(uint256 num) public returns (uint256){ - number += num; - return number; - } - }`, - CheckBlockVariables: ` - pragma solidity >=0.8.0; - contract CheckBlockVariables { - uint public initialgaslimit; - uint public initialchainid; - uint public initialnumber; - - constructor() { - initialgaslimit = block.gaslimit; - initialchainid = block.chainid; - initialnumber = block.number; - } - - function getGasLimit() public view returns (uint) { - return block.gaslimit; - } - - function getChainId() public view returns (uint) { - return block.chainid; - } - - function getNumber() public view returns (uint) { - return block.number; - } - }`, - JoinCandidatesWrapper: ` - pragma solidity >=0.8.0; - - interface ParachainStaking { - // First some simple accessors - - /// Check whether the specified address is currently a staking delegator - function is_delegator(address) external view returns (bool); - - // Now the dispatchables - - /// Join the set of collator candidates - function join_candidates(uint256 amount) external; - - /// Request to leave the set of candidates. If successful, the account is immediately - /// removed from the candidate pool to prevent selection as a collator, but unbonding is - /// executed with a delay of BondDuration rounds. - function schedule_leave_candidates() external; - - /// Temporarily leave the set of collator candidates without unbonding - function go_offline() external; - - /// Rejoin the set of collator candidates if previously had called go_offline - function go_online() external; - - /// Bond more for collator candidates - function candidate_bond_more(uint256 more) external; - - /// Bond less for collator candidates - function candidate_bond_less(uint256 less) external; - - /// If caller is not a delegator, then join the set of delegators - /// If caller is a delegator, then makes delegation to change their delegation state - function delegate(address candidate, uint256 amount) external; - - /// Leave the set of delegators and, by implication, revoke all ongoing delegations - function leave_delegators() external; - - /// Revoke an existing delegation - function revoke_delegation(address candidate) external; - - /// Bond more for delegators with respect to a specific collator candidate - function delegator_bond_more(address candidate, uint256 more) external; - - /// Bond less for delegators with respect to a specific collator candidate - function delegator_bond_less(address candidate, uint256 less) external; - } - - /// An even more dead simple example to call the precompile - contract JoinCandidatesWrapper { - /// The ParachainStaking wrapper at the known precompile address. This will be used to - /// make all calls to the underlying staking solution - ParachainStaking public staking; - - /// Solely for debugging purposes - event Trace(uint256); - - constructor(address _staking) { - staking = ParachainStaking(_staking); - } - - receive() external payable {} - - function join() public { - emit Trace(1 << 250); - staking.join_candidates(1234 ether); - emit Trace(2 << 250); - } - }`, - OverflowingTrace: ` - pragma solidity >=0.8.0; - contract OverflowingTrace { - uint public a; - uint public b; - uint public c; - uint public d; - uint public e; - uint public f; - uint public g; - uint public h; - uint public i; - uint public j; - function set_and_loop(uint loops) public returns (uint result) { - a = 1; - b = 1; - c = 1; - d = 1; - e = 1; - f = 1; - g = 1; - h = 1; - i = 1; - j = 1; - uint count = 0; - while (i < loops) { - count += 1; - } - return 1; - } - }`, - StorageBloater: ` - pragma solidity >=0.8.0; - contract StorageBloater { - mapping(uint => uint) public bloat; - uint256 sum = 0; - - function bloat_storage(uint start, uint num_items, uint seed) public { - for (uint i=0; i= 0.8.0; - contract Fibonacci { - function fib2(uint n) public returns(uint b) { - if (n == 0) { - return 0; - } - uint a = 1; - b = 1; - for (uint i = 2; i < n; i++) { - uint c = a + b; - a = b; - b = c; - } - return b; - } - }`, - StakingDelegationAttaker: ` - pragma solidity >=0.8.0; - - - interface ParachainStaking { - // First some simple accessors - - /// Check whether the specified address is currently a staking delegator - function is_delegator(address) external view returns (bool); - - // Now the dispatchables - - /// Join the set of collator candidates - function join_candidates(uint256 amount) external; - - /// Request to leave the set of candidates. If successful, the account is immediately - /// removed from the candidate pool to prevent selection as a collator, but unbonding is - /// executed with a delay of BondDuration rounds. - function schedule_leave_candidates() external; - - /// Temporarily leave the set of collator candidates without unbonding - function go_offline() external; - - /// Rejoin the set of collator candidates if previously had called go_offline - function go_online() external; - - /// Bond more for collator candidates - function schedule_candidate_bond_more(uint256 more) external; - - /// Bond less for collator candidates - function schedule_candidate_bond_less(uint256 less) external; - - /// If caller is not a delegator, then join the set of delegators - /// If caller is a delegator, then makes delegation to change their delegation state - function delegate(address collator, uint256 amount) external; - - /// Leave the set of delegators and, by implication, revoke all ongoing delegations - function schedule_leave_delegators() external; - - /// Revoke an existing delegation - function revoke_delegation(address candidate) external; - - /// Bond more for delegators with respect to a specific collator candidate - function delegator_bond_more(address candidate, uint256 more) external; - - /// Bond less for delegators with respect to a specific collator candidate - function delegator_bond_less(address candidate, uint256 less) external; - } - - contract StakingDelegationAttaker { - /// The collator (ALITH) that this contract will benefit with delegations - address public target = 0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac; - - /// The ParachainStaking wrapper at the known pre-compile address. - ParachainStaking public staking = ParachainStaking(0x0000000000000000000000000000000000000800); - - /// Take advantage of the EVMs reversion logic and the fact that it doesn't extend to - /// Substrate storage to score free delegations for a collator candidate of our choosing - function score_a_free_delegation() public payable{ - - // We delegate our target collator with all the tokens provided - staking.delegate(target, msg.value); - revert("By reverting this transaction, we return the eth to the caller"); - } - }`, - RelayEncoderInstance: ` - // SPDX-License-Identifier: GPL-3.0-only - pragma solidity >=0.8.0; - - /// @author The Moonbeam Team - /// @title The interface through which solidity contracts will interact with Relay Encoder - /// We follow this same interface including four-byte function selectors, in the precompile that - /// wraps the pallet - interface RelayEncoder { - - // dev Encode 'bond' relay call - // Selector: 31627376 - // @param controller_address: Address of the controller - // @param amount: The amount to bond - // @param reward_destination: the account that should receive the reward - // @returns The bytes associated with the encoded call - function encode_bond( - uint256 controller_address, - uint256 amount, - bytes memory reward_destination - ) external pure returns (bytes memory result); - - // dev Encode 'bond_extra' relay call - // Selector: 49def326 - // @param amount: The extra amount to bond - // @returns The bytes associated with the encoded call - function encode_bond_extra(uint256 amount) external pure returns (bytes memory result); - - // dev Encode 'unbond' relay call - // Selector: bc4b2187 - // @param amount: The amount to unbond - // @returns The bytes associated with the encoded call - function encode_unbond(uint256 amount) external pure returns (bytes memory result); - - // dev Encode 'withdraw_unbonded' relay call - // Selector: 2d220331 - // @param slashes: Weight hint, number of slashing spans - // @returns The bytes associated with the encoded call - function encode_withdraw_unbonded( - uint32 slashes - ) external pure returns (bytes memory result); - - // dev Encode 'validate' relay call - // Selector: 3a0d803a - // @param comission: Comission of the validator as parts_per_billion - // @param blocked: Whether or not the validator is accepting more nominations - // @returns The bytes associated with the encoded call - // selector: 3a0d803a - function encode_validate( - uint256 comission, - bool blocked - ) external pure returns (bytes memory result); - - // dev Encode 'nominate' relay call - // Selector: a7cb124b - // @param nominees: An array of AccountIds corresponding to the accounts we will nominate - // @param blocked: Whether or not the validator is accepting more nominations - // @returns The bytes associated with the encoded call - function encode_nominate( - uint256 [] memory nominees - ) external pure returns (bytes memory result); - - // dev Encode 'chill' relay call - // Selector: bc4b2187 - // @returns The bytes associated with the encoded call - function encode_chill() external pure returns (bytes memory result); - - // dev Encode 'set_payee' relay call - // Selector: 9801b147 - // @param reward_destination: the account that should receive the reward - // @returns The bytes associated with the encoded call - function encode_set_payee( - bytes memory reward_destination - ) external pure returns (bytes memory result); - - // dev Encode 'set_controller' relay call - // Selector: 7a8f48c2 - // @param controller: The controller address - // @returns The bytes associated with the encoded call - function encode_set_controller( - uint256 controller - ) external pure returns (bytes memory result); - - // dev Encode 'rebond' relay call - // Selector: add6b3bf - // @param amount: The amount to rebond - // @returns The bytes associated with the encoded call - function encode_rebond(uint256 amount) external pure returns (bytes memory result); - } - - // We only use this to be able to generate the input data, since we need a compiled instance - contract RelayEncoderInstance is RelayEncoder { - /// The Relay Encoder wrapper at the known pre-compile address. - RelayEncoder public relayencoder = RelayEncoder(0x0000000000000000000000000000000000000805); - function encode_bond( - uint256 controller_address, - uint256 amount, bytes - memory reward_destination - ) external pure override returns (bytes memory result){ - return "0x00"; - } - function encode_bond_extra( - uint256 amount - ) external pure override returns (bytes memory result){ - return "0x00"; - } - function encode_unbond( - uint256 amount - ) external pure override returns (bytes memory result) { - return "0x00"; - } - function encode_withdraw_unbonded( - uint32 slashes - ) external pure override returns (bytes memory result) { - return "0x00"; - } - function encode_validate( - uint256 comission, - bool blocked - ) external pure override returns (bytes memory result) { - return "0x00"; - } - function encode_nominate( - uint256 [] memory nominees - ) external pure override returns (bytes memory result) { - return "0x00"; - } - function encode_chill() external pure override returns (bytes memory result) { - return "0x00"; - } - function encode_set_payee( - bytes memory reward_destination - ) external pure override returns (bytes memory result) { - return "0x00"; - } - function encode_set_controller( - uint256 controller - ) external pure override returns (bytes memory result){ - return "0x00"; - } - function encode_rebond( - uint256 amount - ) external pure override returns (bytes memory result){ - return "0x00"; - } - }`, - XtokensInstance: ` - // SPDX-License-Identifier: GPL-3.0-only - pragma solidity >=0.8.0; - - /** - * @title Xtokens Interface - * The interface through which solidity contracts will interact with xtokens pallet - * Address : 0x0000000000000000000000000000000000000804 - */ - - interface Xtokens { - // A multilocation is defined by its number of parents and the encoded junctions (interior) - struct Multilocation { - uint8 parents; - bytes [] interior; - - } - - // A MultiAsset is defined by a multilocation and an amount - struct MultiAsset { - Multilocation location; - uint256 amount; - } - - // A Currency is defined by address and the amount to be transferred - struct Currency { - address currency_address; - uint256 amount; - } - - /** Transfer a token through XCM based on its currencyId - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param currency_address The ERC20 address of the currency we want to transfer - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ - function transfer( - address currency_address, - uint256 amount, - Multilocation memory destination, - uint64 weight - ) external; - - /** Transfer a token through XCM based on its currencyId specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param currency_address The ERC20 address of the currency we want to transfer - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ - function transfer_with_fee( - address currency_address, - uint256 amount, - uint256 fee, - Multilocation memory destination, - uint64 weight - ) external; - - /** Transfer a token through XCM based on its MultiLocation - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param asset The asset we want to transfer, defined by its multilocation. - * Currently only Concrete Fungible assets - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ - function transfer_multiasset( - Multilocation memory asset, - uint256 amount, - Multilocation memory destination, uint64 weight) external; - - /** Transfer a token through XCM based on its MultiLocation specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param asset The asset we want to transfer, defined by its multilocation. - * Currently only Concrete Fungible assets - * @param amount The amount of tokens we want to transfer - * @param destination The Multilocation to which we want to send the tokens - * @param destination The weight we want to buy in the destination chain - */ - function transfer_multiasset_with_fee( - Multilocation memory asset, - uint256 amount, - uint256 fee, - Multilocation memory destination, uint64 weight) external; - - /** Transfer several tokens at once through XCM based on its address specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param currencies The currencies we want to transfer, defined by address and amount. - * @param fee_item Which of the currencies to be used as fee - * @param destination The Multilocation to which we want to send the tokens - * @param weight The weight we want to buy in the destination chain - */ - function transfer_multi_currencies( - Currency[] memory currencies, - uint32 fee_item, - Multilocation memory destination, - uint64 weight - ) external; - - /** Transfer several tokens at once through XCM based on its location specifying fee - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param assets The assets we want to transfer, defined by their location and amount. - * @param fee_item Which of the currencies to be used as fee - * @param destination The Multilocation to which we want to send the tokens - * @param weight The weight we want to buy in the destination chain - */ - function transfer_multi_assets( - MultiAsset[] memory assets, - uint32 fee_item, - Multilocation memory destination, - uint64 weight - ) external; - } - - contract XtokensInstance is Xtokens { - - /// The Xtokens wrapper at the known pre-compile address. - Xtokens public xtokens = Xtokens(0x0000000000000000000000000000000000000804); - - function transfer( - address currency_address, - uint256 amount, - Multilocation memory destination, - uint64 weight - ) override external { - xtokens.transfer(currency_address, amount, destination, weight); - } - function transfer_with_fee( - address currency_address, - uint256 amount, - uint256 fee, - Multilocation memory destination, - uint64 weight - ) override external { - xtokens.transfer_with_fee(currency_address, amount, fee, destination, weight); - } - function transfer_multiasset( - Multilocation memory asset, - uint256 amount, - Multilocation memory destination, - uint64 weight - ) override external { - xtokens.transfer_multiasset(asset, amount, destination, weight); - } - function transfer_multiasset_with_fee( - Multilocation memory asset, - uint256 amount, - uint256 fee, - Multilocation memory destination, - uint64 weight - ) override external { - xtokens.transfer_multiasset_with_fee(asset, amount, fee, destination, weight); - } - function transfer_multi_currencies( - Currency[] memory currencies, - uint32 fee_item, - Multilocation memory destination, - uint64 weight - ) override external { - xtokens.transfer_multi_currencies(currencies, fee_item, destination, weight); - } - function transfer_multi_assets( - MultiAsset[] memory assets, - uint32 fee_item, - Multilocation memory destination, - uint64 weight - ) override external { - xtokens.transfer_multi_assets(assets, fee_item, destination, weight); - } - }`, - XcmTransactorInstance: ` - // SPDX-License-Identifier: GPL-3.0-only - pragma solidity >=0.8.0; - - /** - * @title Xcm Transactor Interface - * - * The interface through which solidity contracts will interact with xcm transactor pallet - * - */ - interface XcmTransactor { - // A multilocation is defined by its number of parents and the encoded junctions (interior) - struct Multilocation { - uint8 parents; - bytes [] interior; - } - - /** Get index of an account in xcm transactor - * - * @param index The index of which we want to retrieve the account - */ - function index_to_account(uint16 index) external view returns(address); - - /** Get transact info of a multilocation - * Selector 71b0edfa - * @param multilocation The location for which we want to retrieve transact info - */ - function transact_info( - Multilocation memory multilocation) - external view returns(uint64, uint256, uint64); - - /** Transact through XCM using fee based on its multilocation - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param transactor The transactor to be used - * @param index The index to be used - * @param fee_asset The asset in which we want to pay fees. - * It has to be a reserve of the destination chain - * @param weight The weight we want to buy in the destination chain - * @param inner_call The inner call to be executed in the destination chain - */ - function transact_through_derivative_multilocation( - uint8 transactor, - uint16 index, - Multilocation memory fee_asset, - uint64 weight, - bytes memory inner_call - ) external; - - /** Transact through XCM using fee based on its currency_id - * - * @dev The token transfer burns/transfers the corresponding amount before sending - * @param transactor The transactor to be used - * @param index The index to be used - * @param currency_id Address of the currencyId of the asset to be used for fees - * It has to be a reserve of the destination chain - * @param weight The weight we want to buy in the destination chain - * @param inner_call The inner call to be executed in the destination chain - */ - function transact_through_derivative( - uint8 transactor, - uint16 index, - address currency_id, - uint64 weight, - bytes memory inner_call - ) external; - } - - contract XcmTransactorInstance is XcmTransactor { - - /// The Xcm Transactor wrapper at the known pre-compile address. - XcmTransactor public xcmtransactor = XcmTransactor(0x0000000000000000000000000000000000000806); - - function index_to_account(uint16 index) external view override returns(address) { - // We nominate our target collator with all the tokens provided - return xcmtransactor.index_to_account(index); - } - - function transact_info( - Multilocation memory multilocation - ) external view override returns(uint64, uint256, uint64) { - // We nominate our target collator with all the tokens provided - return xcmtransactor.transact_info(multilocation); - } - - function transact_through_derivative_multilocation( - uint8 transactor, - uint16 index, - Multilocation memory fee_asset, - uint64 weight, - bytes memory inner_call - ) override external { - xcmtransactor.transact_through_derivative_multilocation( - transactor, - index, - fee_asset, - weight, - inner_call - ); - } - - function transact_through_derivative( - uint8 transactor, - uint16 index, - address currency_id, - uint64 weight, - bytes memory inner_call - ) override external { - xcmtransactor.transact_through_derivative( - transactor, - index, - currency_id, - weight, - inner_call - ); - } - }`, - // Blake2Check contract used to test blake2 precompile at address 0x9 - // source: https://eips.ethereum.org/EIPS/eip-152#example-usage-in-solidity - Blake2Check: ` - pragma solidity >=0.8.0; - - contract Blake2Check { - - function F( - uint32 rounds, - bytes32[2] memory h, - bytes32[4] memory m, - bytes8[2] memory t, - bool f - ) public view returns (bytes32[2] memory) { - - bytes32[2] memory output; - - bytes memory args = - abi.encodePacked(rounds, h[0], h[1], m[0], m[1], m[2], m[3], t[0], t[1], f); - - assembly { - if iszero(staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40)) { - revert(0, 0) - } - } - - return output; - } - - function callF() public view returns (bytes32[2] memory) { - uint32 rounds = 12; - - bytes32[2] memory h; - h[0] = hex"48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5"; - h[1] = hex"d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b"; - - bytes32[4] memory m; - m[0] = hex"6162630000000000000000000000000000000000000000000000000000000000"; - m[1] = hex"0000000000000000000000000000000000000000000000000000000000000000"; - m[2] = hex"0000000000000000000000000000000000000000000000000000000000000000"; - m[3] = hex"0000000000000000000000000000000000000000000000000000000000000000"; - - bytes8[2] memory t; - t[0] = hex"03000000"; - t[1] = hex"00000000"; - - bool f = true; - - // Expected output: - // ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1 - // 7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923 - return F(rounds, h, m, t, f); - } - }`, - ERC20Instance: ` - // SPDX-License-Identifier: GPL-3.0-only - pragma solidity ^0.8.0; - - /** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts - */ - interface IERC20 { - - /** - * @dev Returns the name of the token. - * Selector: 06fdde03 - */ - function name() external view returns (string memory); - - /** - * @dev Returns the symbol of the token. - * Selector: 95d89b41 - */ - function symbol() external view returns (string memory); - - /** - * @dev Returns the decimals places of the token. - * Selector: 313ce567 - */ - function decimals() external view returns (uint8); - - /** - * @dev Total number of tokens in existence - * Selector: 18160ddd - */ - function totalSupply() external view returns (uint256); - - /** - * @dev Gets the balance of the specified address. - * Selector: 70a08231 - * @param who The address to query the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address who) external view returns (uint256); - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * Selector: dd62ed3e - * @param owner address The address which owns the funds. - * @param spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address owner, address spender) - external view returns (uint256); - - /** - * @dev Transfer token for a specified address - * Selector: a9059cbb - * @param to The address to transfer to. - * @param value The amount to be transferred. - */ - function transfer(address to, uint256 value) external returns (bool); - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf - * of msg.sender. - * Beware that changing an allowance with this method brings the risk that someone may - * use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to - * mitigate this race condition is to first reduce the spender's allowance to 0 and set - * the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * Selector: 095ea7b3 - * @param spender The address which will spend the funds. - * @param value The amount of tokens to be spent. - */ - function approve(address spender, uint256 value) - external returns (bool); - - /** - * @dev Transfer tokens from one address to another - * Selector: 23b872dd - * @param from address The address which you want to send tokens from - * @param to address The address which you want to transfer to - * @param value uint256 the amount of delegated tokens to be transferred - */ - function transferFrom(address from, address to, uint256 value) - external returns (bool); - - /** - * @dev Event emited when a transfer has been performed. - * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef - * @param from address The address sending the tokens - * @param to address The address receiving the tokens. - * @param value uint256 The amount of tokens transfered. - */ - event Transfer( - address indexed from, - address indexed to, - uint256 value - ); - - /** - * @dev Event emited when an approval has been registered. - * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 - * @param owner address Owner of the tokens. - * @param spender address Allowed spender. - * @param value uint256 Amount of tokens approved. - */ - event Approval( - address indexed owner, - address indexed spender, - uint256 value - ); - } - - contract ERC20Instance is IERC20 { - - /// The ierc20 at the known pre-compile address. - IERC20 public erc20 = IERC20(0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080); - address erc20address = 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080; - - receive() external payable { - // React to receiving ether - } - - function name() override external view returns (string memory) { - // We nominate our target collator with all the tokens provided - return erc20.name(); - } - - function symbol() override external view returns (string memory) { - // We nominate our target collator with all the tokens provided - return erc20.symbol(); - } - - function decimals() override external view returns (uint8) { - // We nominate our target collator with all the tokens provided - return erc20.decimals(); - } - - function totalSupply() override external view returns (uint256){ - // We nominate our target collator with all the tokens provided - return erc20.totalSupply(); - } - - function balanceOf(address who) override external view returns (uint256){ - // We nominate our target collator with all the tokens provided - return erc20.balanceOf(who); - } - - function allowance( - address owner, - address spender - ) override external view returns (uint256){ - return erc20.allowance(owner, spender); - } - - function transfer(address to, uint256 value) override external returns (bool) { - return erc20.transfer(to, value); - } - - function transfer_delegate(address to, uint256 value) external returns (bool) { - (bool result, bytes memory data) = erc20address.delegatecall( - abi.encodeWithSignature("transfer(address,uint256)", to, value)); - return result; - } - - function approve(address spender, uint256 value) override external returns (bool) { - return erc20.approve(spender, value); - } - - function approve_delegate(address spender, uint256 value) external returns (bool) { - (bool result, bytes memory data) = erc20address.delegatecall( - abi.encodeWithSignature("approve(address,uint256)", spender, value)); - return result; - } - - function transferFrom( - address from, - address to, - uint256 value) - override external returns (bool) { - return erc20.transferFrom(from, to, value); - } - - function transferFrom_delegate( - address from, - address to, - uint256 value) external returns (bool) { - (bool result, bytes memory data) = erc20address.delegatecall( - abi.encodeWithSignature("transferFrom(address,address,uint256)", from, to, value)); - return result; - } - }`, - Democracy: ` - pragma solidity >=0.8.0; - interface Democracy { - // First some simple accessors - - /** - * Get The total number of public proposals past and present - * Selector: 56fdf547 - * - * @return The total number of public proposals past and present - */ - function public_prop_count() external view returns (uint256); - - /** - * Get details about all public porposals. - * Selector: - * @return (prop index, proposal hash, proposer) - * TODO This is supposed to be a vec. Let's save this one for later. - */ - // function public_props() - // external - // view - // returns ( - // uint256, - // bytes32, - // address - // ); - - /** - * Get the total amount locked behind a proposal. - * Selector: a30305e9 - * - * @dev Unlike the similarly-named Rust function this one only returns the value, not the - * complete list of backers. - * @param prop_index The index of the proposal you are interested in - * @return The amount of tokens locked behind the proposal - */ - function deposit_of(uint256 prop_index) external view returns (uint256); - - /** - * Get the index of the lowest unbaked referendum - * Selector: 0388f282 - * - * @return The lowest referendum index representing an unbaked referendum. - */ - function lowest_unbaked() external view returns (uint256); - - /** - * Get the details about an ongoing referendum. - * Selector: 8b93d11a - * - * @dev This, along with "finished_referendum_info", wraps the pallet's "referendum_info" - * function. It is necessary to split it into two here because Solidity only has c-style enums. - * @param ref_index The index of the referendum you are interested in - * @return A tuple including: - * * The block in which the referendum ended - * * The proposal hash - * * The baising mechanism 0-SuperMajorityApprove, 1-SuperMajorityAgainst, 2-SimpleMajority - * * The delay between passing and launching - * * The total aye vote (including conviction) - * * The total nay vote (including conviction) - * * The total turnout (not including conviction) - */ - function ongoing_referendum_info(uint256 ref_index) - external - view - returns ( - uint256, - bytes32, - uint256, - uint256, - uint256, - uint256, - uint256 - ); - - /** - * Get the details about a finished referendum. - * Selector: b1fd383f - * - * @dev This, along with "ongoing_referendum_info", wraps the pallet's "referendum_info" - * function. It is necessary to split it into two here because Solidity only has c-style enums. - * @param ref_index The index of the referendum you are interested in - * @return A tuple including whether the referendum passed, and the block at which it finished. - */ - function finished_referendum_info(uint256 ref_index) - external - view - returns (bool, uint256); - - // Now the dispatchables - - /** - * Make a new proposal - * Selector: 7824e7d1 - * - * @param proposal_hash The hash of the proposal you are making - * @param value The number of tokens to be locked behind this proposal. - */ - function propose(bytes32 proposal_hash, uint256 value) external; - - /** - * Signal agreement with a proposal - * Selector: c7a76601 - * - * @dev No amount is necessary here. Seconds are always for the same amount that the original - * proposer locked. You may second multiple times. - * - * @param prop_index index of the proposal you want to second - * @param seconds_upper_bound A number greater than or equal to the current number of seconds. - * This is necessary for calculating the weight of the call. - */ - function second(uint256 prop_index, uint256 seconds_upper_bound) external; - - //TODO should we have an alternative "simple_second" where the upper bound is read from storage? - - /** - * Vote in a referendum. - * Selector: 3f3c21cc - * - * @param ref_index index of the referendum you want to vote in - * @param aye "true" is a vote to enact the proposal; "false" is a vote to keep the status quo. - * @param vote_amount The number of tokens you are willing to lock if you get your way - * @param conviction How strongly you want to vote. Higher conviction means longer lock time. - * This must be an interget in the range 0 to 6 - * - * @dev This function only supposrts "Standard" votes where you either vote aye xor nay. - * It does not support "Split" votes where you vote on both sides. If such a need - * arises, we should add an additional function to this interface called "split_vote". - */ - function standard_vote( - uint256 ref_index, - bool aye, - uint256 vote_amount, - uint256 conviction - ) external; - - /** Remove a vote for a referendum. - * Selector: 2042f50b - * - * @dev Locks get complex when votes are removed. See pallet-democracy's docs for details. - * @param ref_index The index of the referendum you are interested in - */ - function remove_vote(uint256 ref_index) external; - - /** - * Delegate voting power to another account. - * Selector: 0185921e - * - * @dev The balance delegated is locked for as long as it is delegated, and thereafter for the - * time appropriate for the conviction's lock period. - * @param representative The account to whom the vote shall be delegated. - * @param conviction The conviction with which you are delegating. This conviction is used for - * _all_ delegated votes. - * @param amount The number of tokens whose voting power shall be delegated. - */ - function delegate( - address representative, - uint256 conviction, - uint256 amount - ) external; - - /** - * Undelegatehe voting power - * Selector: cb37b8ea - * - * @dev Tokens may be unlocked once the lock period corresponding to the conviction with which - * the delegation was issued has elapsed. - */ - function un_delegate() external; - - /** - * Unlock tokens that have an expired lock. - * Selector: 2f6c493c - * - * @param target The account whose tokens should be unlocked. This may be any account. - */ - function unlock(address target) external; - - /** - * Register the preimage for an upcoming proposal. This doesn't require the proposal to be - * in the dispatch queue but does require a deposit, returned once enacted. - * Selector: 200881f5 - * - * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain. - */ - function note_preimage(bytes memory encoded_proposal) external; - - /** - * Register the preimage for an upcoming proposal. This requires the proposal to be - * in the dispatch queue. No deposit is needed. When this call is successful, i.e. - * the preimage has not been uploaded before and matches some imminent proposal, - * no fee is paid. - * Selector: cf205f96 - * - * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain. - */ - function note_imminent_preimage(bytes memory encoded_proposal) external; - }`, - AuthorMapping: ` - pragma solidity >=0.8.0; - - /** - * @title Pallet AuthorMapping Interface - * - * The interface through which solidity contracts will interact with pallet-author.mapping - */ - interface AuthorMapping { - /** - * Add association - * Selector: aa5ac585 - * - * @param nimbus_id The nimbusId to be associated - */ - function add_association(bytes32 nimbus_id) external; - - /** - * Update existing association - * Selector: d9cef879 - * - * @param old_nimbus_id The old nimbusId to be replaced - * @param new_nimbus_id The new nimbusId to be associated - */ - function update_association(bytes32 old_nimbus_id, bytes32 new_nimbus_id) external; - - /** - * Clear existing associationg - * Selector: 7354c91d - * - * @param nimbus_id The nimbusId to be cleared - */ - function clear_association(bytes32 nimbus_id) external; - } - - - contract AuthorMappingInstance is AuthorMapping { - - /// The AuthorMapping wrapper at the known pre-compile address. - AuthorMapping public author_mapping = AuthorMapping( - 0x0000000000000000000000000000000000000807 - ); - - function add_association( - bytes32 nimbus_id - ) override external { - author_mapping.add_association(nimbus_id); - } - function update_association( - bytes32 old_nimbus_id, - bytes32 new_nimbus_id - ) override external { - author_mapping.update_association(old_nimbus_id, new_nimbus_id); - } - function clear_association( - bytes32 nimbus_id - ) override external { - author_mapping.clear_association(nimbus_id); - } - }`, - LocalAssetExtendedErc20Instance: ` - pragma solidity ^0.8.0; - - /** - * @title ERC20 interface - * @dev see https://github.com/ethereum/EIPs/issues/20 - * @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts - */ - interface LocalAssetExtendedErc20 { - - /** - * @dev Returns the name of the token. - * Selector: 06fdde03 - */ - function name() external view returns (string memory); - - /** - * @dev Returns the symbol of the token. - * Selector: 95d89b41 - */ - function symbol() external view returns (string memory); - - /** - * @dev Returns the decimals places of the token. - * Selector: 313ce567 - */ - function decimals() external view returns (uint8); - - /** - * @dev Total number of tokens in existence - * Selector: 18160ddd - */ - function totalSupply() external view returns (uint256); - - /** - * @dev Gets the balance of the specified address. - * Selector: 70a08231 - * @param who The address to query the balance of. - * @return An uint256 representing the amount owned by the passed address. - */ - function balanceOf(address who) external view returns (uint256); - - /** - * @dev Function to check the amount of tokens that an owner allowed to a spender. - * Selector: dd62ed3e - * @param owner address The address which owns the funds. - * @param spender address The address which will spend the funds. - * @return A uint256 specifying the amount of tokens still available for the spender. - */ - function allowance(address owner, address spender) - external view returns (uint256); - - /** - * @dev Transfer token for a specified address - * Selector: a9059cbb - * @param to The address to transfer to. - * @param value The amount to be transferred. - */ - function transfer(address to, uint256 value) external returns (bool); - - /** - * @dev Approve the passed address to spend the specified amount of tokens on behalf - * of msg.sender. - * Beware that changing an allowance with this method brings the risk that someone may - * use both the old - * and the new allowance by unfortunate transaction ordering. One possible solution to - * mitigate this race condition is to first reduce the spender's allowance to 0 and set - * the desired value afterwards: - * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - * Selector: 095ea7b3 - * @param spender The address which will spend the funds. - * @param value The amount of tokens to be spent. - */ - function approve(address spender, uint256 value) - external returns (bool); - - /** - * @dev Transfer tokens from one address to another - * Selector: 23b872dd - * @param from address The address which you want to send tokens from - * @param to address The address which you want to transfer to - * @param value uint256 the amount of tokens to be transferred - */ - function transferFrom(address from, address to, uint256 value) - external returns (bool); - - /** - * @dev Mint tokens to an address - * Selector: 23b872dd - * @param to address The address to which you want to mint tokens - * @param value uint256 the amount of tokens to be minted - */ - function mint(address to, uint256 value) - external returns (bool); - - /** - * @dev Burn tokens from an address - * Selector: 23b872dd - * @param from address The address from which you want to burn tokens - * @param value uint256 the amount of tokens to be burnt - */ - function burn(address from, uint256 value) - external returns (bool); - - /** - * @dev Freeze an account, preventing it from operating with the asset - * Selector: 23b872dd - * @param account address The address that you want to freeze - */ - function freeze(address account) - external returns (bool); - - /** - * @dev Unfreeze an account, letting it from operating againt with the asset - * Selector: 23b872dd - * @param account address The address that you want to unfreeze - */ - function thaw(address account) - external returns (bool); - - /** - * @dev Freeze the entire asset operations - * Selector: 23b872dd - */ - function freeze_asset() - external returns (bool); - - /** - * @dev Unfreeze the entire asset operations - * Selector: 23b872dd - */ - function thaw_asset() - external returns (bool); - - /** - * @dev Transfer the ownership of an asset to a new account - * Selector: 23b872dd - * @param owner address The address of the new owner - */ - function transfer_ownership(address owner) - external returns (bool); - - /** - * @dev Specify the issuer, admin and freezer of an asset - * Selector: 23b872dd - * @param issuer address The address capable of issuing tokens - * @param admin address The address capable of burning tokens and unfreezing accounts/assets - * @param freezer address The address capable of freezing accounts/asset - */ - function set_team(address issuer, address admin, address freezer) - external returns (bool); - - /** - * @dev Specify the name, symbol and decimals of your asset - * Selector: 23b872dd - * @param name string The name of the asset - * @param symbol string The symbol of the asset - * @param decimals uint8 The number of decimals of your asset - */ - function set_metadata(string calldata name, string calldata symbol, uint8 decimals) - external returns (bool); - - /** - * @dev Clear the name, symbol and decimals of your asset - * Selector: 23b872dd - */ - function clear_metadata() - external returns (bool); - /** - * @dev Event emited when a transfer has been performed. - * Selector: ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef - * @param from address The address sending the tokens - * @param to address The address receiving the tokens. - * @param value uint256 The amount of tokens transfered. - */ - event Transfer( - address indexed from, - address indexed to, - uint256 value - ); - - /** - * @dev Event emited when an approval has been registered. - * Selector: 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 - * @param owner address Owner of the tokens. - * @param spender address Allowed spender. - * @param value uint256 Amount of tokens approved. - */ - event Approval( - address indexed owner, - address indexed spender, - uint256 value - ); - } - - contract LocalAssetExtendedErc20Instance is LocalAssetExtendedErc20 { - - /// The ierc20 at the known pre-compile address. - LocalAssetExtendedErc20 public localasseterc20 = - LocalAssetExtendedErc20(0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701); - address localasseterc20address = 0xffFfFffEDe9001a6f7F4798cCb76ef1E7f664701; - - receive() external payable { - // React to receiving ether - } - - function set_address_interface(address instance_address) public { - localasseterc20 = LocalAssetExtendedErc20(instance_address); - localasseterc20address = instance_address; - } - - function get_address() public view returns(address) { - return localasseterc20address; - } - - function name() override external view returns (string memory) { - // We nominate our target collator with all the tokens provided - return localasseterc20.name(); - } - - function symbol() override external view returns (string memory) { - // We nominate our target collator with all the tokens provided - return localasseterc20.symbol(); - } - - function decimals() override external view returns (uint8) { - // We nominate our target collator with all the tokens provided - return localasseterc20.decimals(); - } - - function totalSupply() override external view returns (uint256){ - // We nominate our target collator with all the tokens provided - return localasseterc20.totalSupply(); - } - - function balanceOf(address who) override external view returns (uint256){ - // We nominate our target collator with all the tokens provided - return localasseterc20.balanceOf(who); - } - - function allowance( - address owner, - address spender - ) override external view returns (uint256){ - return localasseterc20.allowance(owner, spender); - } - - function transfer(address to, uint256 value) override external returns (bool) { - return localasseterc20.transfer(to, value); - } - - function mint(address to, uint256 value) override external returns (bool) { - return localasseterc20.mint(to, value); - } - - function burn(address from, uint256 value) override external returns (bool) { - return localasseterc20.burn(from, value); - } - - function freeze(address account) override external returns (bool) { - return localasseterc20.freeze(account); - } - - function thaw(address account) override external returns (bool) { - return localasseterc20.thaw(account); - } - - function freeze_asset() override external returns (bool) { - return localasseterc20.freeze_asset(); - } - - function thaw_asset() override external returns (bool) { - return localasseterc20.thaw_asset(); - } - - function transfer_ownership(address owner) override external returns (bool) { - return localasseterc20.transfer_ownership(owner); - } - - function set_team( - address issuer, - address admin, - address freezer - ) override external returns (bool) { - return localasseterc20.set_team(issuer, admin, freezer); - } - - function set_metadata( - string calldata name, - string calldata symbol, - uint8 decimals - ) override external returns (bool) { - return localasseterc20.set_metadata(name, symbol, decimals); - } - - function clear_metadata() override external returns (bool) { - return localasseterc20.clear_metadata(); - } - - function transfer_delegate(address to, uint256 value) external returns (bool) { - (bool result, bytes memory data) = localasseterc20address.delegatecall( - abi.encodeWithSignature("transfer(address,uint256)", to, value)); - return result; - } - - function approve(address spender, uint256 value) override external returns (bool) { - return localasseterc20.approve(spender, value); - } - - function approve_delegate(address spender, uint256 value) external returns (bool) { - (bool result, bytes memory data) = localasseterc20address.delegatecall( - abi.encodeWithSignature("approve(address,uint256)", spender, value)); - return result; - } - - function transferFrom( - address from, - address to, - uint256 value) - override external returns (bool) { - return localasseterc20.transferFrom(from, to, value); - } - - function transferFrom_delegate( - address from, - address to, - uint256 value) external returns (bool) { - (bool result, bytes memory data) = localasseterc20address.delegatecall( - abi.encodeWithSignature("transferFrom(address,address,uint256)", from, to, value)); - return result; - } - }`, - TestCallList: ` - pragma solidity >=0.8.0; - - contract TestCallList { - function call(address target, bytes memory data) public returns (bool, bytes memory) { - return target.call(data); - } - - function delegateCall( - address target, - bytes memory data - ) public returns (bool, bytes memory) { - return target.delegatecall(data); - } - }`, -}; diff --git a/tests/fork-tests/test-pov-migration.ts b/tests/fork-tests/test-pov-migration.ts new file mode 100644 index 0000000000..57da25be57 --- /dev/null +++ b/tests/fork-tests/test-pov-migration.ts @@ -0,0 +1,137 @@ +import child_process from "child_process"; +import { alith } from "../util/accounts"; + +import { describeParachain } from "../util/setup-para-tests"; + +/** + * This is a complex test, mostly meant to run on automated setup: + * - It requires to have modified exported state of an existing network + * - It also uses local git to retrieve existing released versions + * - It upgrades the network with all released version up to the local one + * (defined in the runtime file). + * This is for cases when testing a new runtime without having the previous one already deployed + * on the targeted runtime + * - It performs an upgrade using the local runtime wasm + * - It verifies the new node is producing blocks + * - It verifies the compressed PoV is not exceeding 2Mb + */ + +const RUNTIME_NAME = process.env.RUNTIME_NAME as "moonbeam" | "moonbase" | "moonriver"; +const SPEC_FILE = process.env.SPEC_FILE; +const PARA_ID = process.env.PARA_ID && parseInt(process.env.PARA_ID); +const SKIP_INTERMEDIATE_RUNTIME = process.env.SKIP_INTERMEDIATE_RUNTIME == "true"; + +if (!RUNTIME_NAME) { + console.error(`Missing RUNTIME_NAME (ex: moonbeam)`); + process.exit(1); +} + +if (!SPEC_FILE) { + console.error(`Missing SPEC_FILE (ex: ~/exports/moonbeam-state.mod.json)`); + process.exit(1); +} + +if (!PARA_ID) { + console.error(`Missing PARA_ID (ex: 2004)`); + process.exit(1); +} + +const localVersion = parseInt( + child_process + .execSync( + `grep 'spec_version: [0-9]*' ../runtime/${RUNTIME_NAME}/src/lib.rs | grep -o '[0-9]*'` + ) + .toString() + .trim() +); + +const allRuntimes = child_process + .execSync(`git tag -l -n 'runtime-[0-9]*' | cut -d' ' -f 1 | cut -d'-' -f 2 | sort -n`) + .toString() + .split("\n") + .filter((s) => !!s) + .map((s) => parseInt(s.trim())) + .filter((runtime) => runtime != localVersion); + +// Filter only latest minor version for each major (excluding current major) +const currentMajor = Math.floor(localVersion / 100); +const allPreviousMajorRuntimes = Object.values( + allRuntimes.reduce((p, v) => { + const major = Math.floor(v / 100); + if (major == currentMajor) { + return p; + } + if (!p[major] || v > p[major]) { + p[major] = v; + } + return p; + }, {} as { [index: number]: number }) +); + +console.log(`SKIP_INTERMEDIATE_RUNTIME: ${SKIP_INTERMEDIATE_RUNTIME}`); +console.log(`Local version: ${localVersion}`); +console.log(allPreviousMajorRuntimes.map((r) => ` - ${r}`).join("\n")); + +describeParachain( + `Runtime upgrade on forked ${RUNTIME_NAME}`, + { + parachain: { + spec: SPEC_FILE, + binary: "local", + }, + paraId: PARA_ID, + relaychain: { + binary: "local", + }, + }, + (context) => { + it("should not fail", async function () { + this.timeout(5000000); + + // Wait for chain to start + await context.waitBlocks(1); + + const currentVersion = await ( + await context.polkadotApiParaone.query.system.lastRuntimeUpgrade() + ).unwrap(); + console.log( + `Current runtime: ✅ runtime ${currentVersion.specName.toString()} ` + + `${currentVersion.specVersion.toString()}` + ); + + if (!SKIP_INTERMEDIATE_RUNTIME) { + // We pick each latest major runtime before current local version + console.log(`currentMajor: ${currentMajor}`); + console.log( + allPreviousMajorRuntimes.length, + allPreviousMajorRuntimes.map((r) => ` - ${r}`).join("\n") + ); + + for (const runtime of allPreviousMajorRuntimes) { + if (runtime > currentVersion.specVersion.toNumber()) { + console.log(`Found already released runtime not deployed: ${runtime}`); + await context.upgradeRuntime(alith, RUNTIME_NAME, `runtime-${runtime}`, { + useGovernance: true, + }); + // Wait for upgrade cooldown + await context.waitBlocks(1); + } + } + } + + await context.upgradeRuntime(alith, RUNTIME_NAME, "local", { useGovernance: true }); + + const postCurrentVersion = await ( + (await context.polkadotApiParaone.query.system.lastRuntimeUpgrade()) as any + ).unwrap(); + console.log( + `New runtime: ✅ runtime ${postCurrentVersion.specName.toString()}` + + ` ${postCurrentVersion.specVersion.toString()}` + ); + + process.stdout.write("Waiting extra block being produced..."); + await context.waitBlocks(20); // Make sure the new runtime is producing blocks + process.stdout.write(`✅ total ${context.blockNumber} block produced\n`); + }); + } +); diff --git a/tests/non_ci_tests/test-frontier.ts b/tests/non_ci_tests/test-frontier.ts deleted file mode 100644 index ac42f427af..0000000000 --- a/tests/non_ci_tests/test-frontier.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { expect } from "chai"; - -import { customRequest } from "../tests/util"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "../tests/constants"; -import { - createAndFinalizeBlockWithFrontier, - describeWithFrontier, -} from "../tests/util/testWithFrontier"; - -const FRONTIER_GENESIS_ACCOUNT_BALANCE = "340282366920938463463374607431768211455"; - -// This is an example of a Frontier test. It requires to have a clone of frontier in the same repo -// The binary needs to be built with `cargo build --no-default-features --features=manual-seal` -describeWithFrontier("Frontier RPC (Balance)", `frontier-specs.json`, (context) => { - it("genesis balance is setup correctly (web3)", async function () { - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - FRONTIER_GENESIS_ACCOUNT_BALANCE - ); - }); - it("balance to be updated after transfer", async function () { - const tx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: TEST_ACCOUNT, - value: "0x200", // Must be higher than ExistentialDeposit (0) - gasPrice: 1_000_000_000, - gas: "0x100000", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - await customRequest(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); - await createAndFinalizeBlockWithFrontier(context.web3); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - "340282366920938463463374607431768189943" - ); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("512"); - }); -}); diff --git a/tests/package-lock.json b/tests/package-lock.json index 523eb68110..fa2b71e1ce 100644 --- a/tests/package-lock.json +++ b/tests/package-lock.json @@ -1,204 +1,102 @@ { "name": "ts-tests", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@acala-network/type-definitions": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@acala-network/type-definitions/-/type-definitions-4.0.1.tgz", - "integrity": "sha512-LA3hltYi2tU5BuaW9tbZsbVDdS5sLW2Wtl7AXCyYKMaHU43rsZXeBWoXotxJ3NamJXu1RI6695zLbSd0Hy42YQ==", - "requires": { - "@open-web3/orml-type-definitions": "^1.0.2-0" + "packages": { + "": { + "name": "ts-tests", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@moonbeam-network/api-augment": "^0.1700.0", + "@polkadot/api": "^8.8.2", + "@polkadot/keyring": "^9.5.1", + "@polkadot/util": "^9.5.1", + "@substrate/txwrapper-core": "^3.1.2", + "@substrate/txwrapper-substrate": "^3.1.2", + "@types/chai": "^4.2.11", + "@types/chai-as-promised": "^7.1.4", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "chai-as-promised": "^7.1.1", + "chalk": "^4.0.1", + "debug": "^4.3.2", + "eth-object": "github:aurora-is-near/eth-object#master", + "eth-util-lite": "1.0.1", + "ethers": "^5.4.6", + "merkle-patricia-tree": "^3.0.0", + "mocha": "^10.0.0", + "moonbeam-types-bundle": "^2.0.7", + "npm-watch": "^0.9.0", + "polkadot-launch": "github:PureStake/polkadot-launch#crystalin-para-id", + "randchacha": "^1.0.2", + "rimraf": "^3.0.2", + "solc": "^0.8.3", + "tcp-port-used": "^1.0.2", + "ts-node": "^10.8.1", + "typescript": "^4.7.4", + "web3": "^1.3.5" + }, + "devDependencies": { + "@types/tcp-port-used": "^1.0.1" } }, - "@babel/runtime": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", - "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", - "requires": { + "node_modules/@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "dependencies": { "regenerator-runtime": "^0.13.4" - } - }, - "@bifrost-finance/type-definitions": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@bifrost-finance/type-definitions/-/type-definitions-1.4.0.tgz", - "integrity": "sha512-PLrqQHwwBUolMJEYDBEf90xDncxRVz31I7QLxTGwvI+T4/x8oh4FJ/XWLT2g1obnBbQB3e0KIxZFhQ4l4BnKQQ==", - "requires": { - "@open-web3/orml-type-definitions": "^0.9.4-38" }, - "dependencies": { - "@open-web3/orml-type-definitions": { - "version": "0.9.4-38", - "resolved": "https://registry.npmjs.org/@open-web3/orml-type-definitions/-/orml-type-definitions-0.9.4-38.tgz", - "integrity": "sha512-kV0++JlRLEf7Z1y+Jm+792zqx6Q7dzpGP73rJJmQrBaeTML5mQzu4veZ24TVtcLV6hsGjUU/ixrJODNj6CCuZQ==", - "requires": { - "lodash.merge": "^4.6.2" - } - } + "engines": { + "node": ">=6.9.0" } }, - "@crustio/type-definitions": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@crustio/type-definitions/-/type-definitions-1.2.0.tgz", - "integrity": "sha512-i/u3WUuhfC76JirlSwyGIKDwoFrax5QUonxGG/wgX2KEDKM9MIVx4qEsphE/tjAxlX1/qO3c72dzvKR2gndhgg==", - "requires": { - "@open-web3/orml-type-definitions": "^0.8.2-9" - }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dependencies": { - "@open-web3/orml-type-definitions": { - "version": "0.8.2-11", - "resolved": "https://registry.npmjs.org/@open-web3/orml-type-definitions/-/orml-type-definitions-0.8.2-11.tgz", - "integrity": "sha512-cUv5+mprnaGNt0tu3FhK1nFRBK7SGjPhA1O0nxWWeRmuuH5fjkr0glbHE9kcKuCBfsh7nt6NGwxwl9emQtUDSA==" - } - } - }, - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==" - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@darwinia/types": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@darwinia/types/-/types-2.7.2.tgz", - "integrity": "sha512-FivxJTF1WvEcrE5sI/oXZfRkvDy7q3JCu1piiqXq4y/vXl93kwG4rwM5B4S1Q10eRu4JkzxOWhGsOXM6EtteKQ==", - "requires": { - "@darwinia/types-known": "^2.7.2" - } - }, - "@darwinia/types-known": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@darwinia/types-known/-/types-known-2.7.3.tgz", - "integrity": "sha512-zbfw3A/PiXt3T28uFkHSHKEiJguaYGMuScchaqw/n83qXmvBHIU0AzWhpt2vEnWa9tiI5kDu+/t+DZlze4113g==", - "requires": { - "@babel/runtime": "^7.9.6" - } - }, - "@digitalnative/type-definitions": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/@digitalnative/type-definitions/-/type-definitions-1.1.27.tgz", - "integrity": "sha512-xzkcPX/yv4oYp7OzlkfozVR1KDwqLjQFJhIPLJp3zuVudGFo4I+spwFQmWQswcxgZI1HGoQGVePzEqAQIRZtVQ==", - "requires": { - "@polkadot/keyring": "^6.9.1", - "@polkadot/types": "^4.13.1" + "@jridgewell/trace-mapping": "0.3.9" }, - "dependencies": { - "@polkadot/networks": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-6.11.1.tgz", - "integrity": "sha512-0C6Ha2kvr42se3Gevx6UhHzv3KnPHML0N73Amjwvdr4y0HLZ1Nfw+vcm5yqpz5gpiehqz97XqFrsPRauYdcksQ==", - "requires": { - "@babel/runtime": "^7.14.6" - } - }, - "@polkadot/types": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-4.17.1.tgz", - "integrity": "sha512-rjW4OFdwvFekzN3ATLibC2JPSd8AWt5YepJhmuCPdwH26r3zB8bEC6dM7YQExLVUmygVPvgXk5ffHI6RAdXBMg==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/metadata": "4.17.1", - "@polkadot/util": "^6.11.1", - "@polkadot/util-crypto": "^6.11.1", - "@polkadot/x-rxjs": "^6.11.1" - }, - "dependencies": { - "@polkadot/util-crypto": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-6.11.1.tgz", - "integrity": "sha512-fWA1Nz17FxWJslweZS4l0Uo30WXb5mYV1KEACVzM+BSZAvG5eoiOAYX6VYZjyw6/7u53XKrWQlD83iPsg3KvZw==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/networks": "6.11.1", - "@polkadot/util": "6.11.1", - "@polkadot/wasm-crypto": "^4.0.2", - "@polkadot/x-randomvalues": "6.11.1", - "base-x": "^3.0.8", - "base64-js": "^1.5.1", - "blakejs": "^1.1.1", - "bn.js": "^4.11.9", - "create-hash": "^1.2.0", - "elliptic": "^6.5.4", - "hash.js": "^1.1.7", - "js-sha3": "^0.8.0", - "scryptsy": "^2.1.0", - "tweetnacl": "^1.0.3", - "xxhashjs": "^0.2.2" - } - } - } - }, - "@polkadot/util": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-6.11.1.tgz", - "integrity": "sha512-TEdCetr9rsdUfJZqQgX/vxLuV4XU8KMoKBMJdx+JuQ5EWemIdQkEtMBdL8k8udNGbgSNiYFA6rPppATeIxAScg==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-textdecoder": "6.11.1", - "@polkadot/x-textencoder": "6.11.1", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.11.9", - "camelcase": "^5.3.1", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/x-randomvalues": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-6.11.1.tgz", - "integrity": "sha512-2MfUfGZSOkuPt7GF5OJkPDbl4yORI64SUuKM25EGrJ22o1UyoBnPOClm9eYujLMD6BfDZRM/7bQqqoLW+NuHVw==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-global": "6.11.1" - } - } + "engines": { + "node": ">=12" } }, - "@docknetwork/node-types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@docknetwork/node-types/-/node-types-0.6.0.tgz", - "integrity": "sha512-Bkl1Fxhu0Viyu7g9dTwFeMnfXsuXXlQ+PftLv2NV0Uh240HBXfQxm3PxPLw3JMAo0UCQw/g7xUHQrV5hJzfB4g==" - }, - "@edgeware/node-types": { - "version": "3.6.2-wako", - "resolved": "https://registry.npmjs.org/@edgeware/node-types/-/node-types-3.6.2-wako.tgz", - "integrity": "sha512-kBGCoWoRSUOj864BiTwHGfsfuhGr2ycWEsjw9FB2VdJ5esJDVq3K6WZs/J2rtrtybKJWADqIp5K0ptDBlg1XqA==" - }, - "@equilab/definitions": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@equilab/definitions/-/definitions-1.4.11.tgz", - "integrity": "sha512-rlp4ADHgjpzbtJz+Pify1Z/3D3IcAe/ksCQgmBnCgeqEsPltyO54Rd7tGxNXl4eTobNWL8kbJ9wkl3rOx/i8rw==" - }, - "@ethereumjs/common": { + "node_modules/@ethereumjs/common": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.1.tgz", "integrity": "sha512-eUe5RsYiOnazszPsgQOdaetCwgVquiiQHBpB59xNABOrBPNh/ZdTJz+uhHGzKvPm6Dr91ViBGYZcdclTgtki0g==", - "requires": { + "dependencies": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.4" } }, - "@ethereumjs/tx": { + "node_modules/@ethereumjs/tx": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.0.tgz", "integrity": "sha512-/+ZNbnJhQhXC83Xuvy6I9k4jT5sXiV0tMR9C+AzSSpcCV64+NB8dTE1m3x98RYMqb8+TLYWA+HML4F5lfXTlJw==", - "requires": { + "dependencies": { "@ethereumjs/common": "^2.6.1", "ethereumjs-util": "^7.1.4" } }, - "@ethersproject/abi": { + "node_modules/@ethersproject/abi": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/address": "^5.5.0", "@ethersproject/bignumber": "^5.5.0", "@ethersproject/bytes": "^5.5.0", @@ -210,11 +108,21 @@ "@ethersproject/strings": "^5.5.0" } }, - "@ethersproject/abstract-provider": { + "node_modules/@ethersproject/abstract-provider": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bignumber": "^5.5.0", "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0", @@ -224,11 +132,21 @@ "@ethersproject/web": "^5.5.0" } }, - "@ethersproject/abstract-signer": { + "node_modules/@ethersproject/abstract-signer": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/bignumber": "^5.5.0", "@ethersproject/bytes": "^5.5.0", @@ -236,11 +154,21 @@ "@ethersproject/properties": "^5.5.0" } }, - "@ethersproject/address": { + "node_modules/@ethersproject/address": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bignumber": "^5.5.0", "@ethersproject/bytes": "^5.5.0", "@ethersproject/keccak256": "^5.5.0", @@ -248,54 +176,114 @@ "@ethersproject/rlp": "^5.5.0" } }, - "@ethersproject/base64": { + "node_modules/@ethersproject/base64": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0" } }, - "@ethersproject/basex": { + "node_modules/@ethersproject/basex": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/properties": "^5.5.0" } }, - "@ethersproject/bignumber": { + "node_modules/@ethersproject/bignumber": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0", "bn.js": "^4.11.9" } }, - "@ethersproject/bytes": { + "node_modules/@ethersproject/bytes": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/logger": "^5.5.0" } }, - "@ethersproject/constants": { + "node_modules/@ethersproject/constants": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bignumber": "^5.5.0" } }, - "@ethersproject/contracts": { + "node_modules/@ethersproject/contracts": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/abi": "^5.5.0", "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/abstract-signer": "^5.5.0", @@ -308,11 +296,21 @@ "@ethersproject/transactions": "^5.5.0" } }, - "@ethersproject/hash": { + "node_modules/@ethersproject/hash": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/abstract-signer": "^5.5.0", "@ethersproject/address": "^5.5.0", "@ethersproject/bignumber": "^5.5.0", @@ -323,11 +321,21 @@ "@ethersproject/strings": "^5.5.0" } }, - "@ethersproject/hdnode": { + "node_modules/@ethersproject/hdnode": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/abstract-signer": "^5.5.0", "@ethersproject/basex": "^5.5.0", "@ethersproject/bignumber": "^5.5.0", @@ -342,11 +350,21 @@ "@ethersproject/wordlists": "^5.5.0" } }, - "@ethersproject/json-wallets": { + "node_modules/@ethersproject/json-wallets": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/abstract-signer": "^5.5.0", "@ethersproject/address": "^5.5.0", "@ethersproject/bytes": "^5.5.0", @@ -362,50 +380,110 @@ "scrypt-js": "3.0.1" } }, - "@ethersproject/keccak256": { + "node_modules/@ethersproject/keccak256": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "js-sha3": "0.8.0" } }, - "@ethersproject/logger": { + "node_modules/@ethersproject/logger": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", - "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" + "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] }, - "@ethersproject/networks": { + "node_modules/@ethersproject/networks": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/logger": "^5.5.0" } }, - "@ethersproject/pbkdf2": { + "node_modules/@ethersproject/pbkdf2": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/sha2": "^5.5.0" } }, - "@ethersproject/properties": { + "node_modules/@ethersproject/properties": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/logger": "^5.5.0" } }, - "@ethersproject/providers": { + "node_modules/@ethersproject/providers": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.3.tgz", "integrity": "sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/abstract-signer": "^5.5.0", "@ethersproject/address": "^5.5.0", @@ -427,39 +505,79 @@ "ws": "7.4.6" } }, - "@ethersproject/random": { + "node_modules/@ethersproject/random": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0" } }, - "@ethersproject/rlp": { + "node_modules/@ethersproject/rlp": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0" } }, - "@ethersproject/sha2": { + "node_modules/@ethersproject/sha2": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0", "hash.js": "1.1.7" } }, - "@ethersproject/signing-key": { + "node_modules/@ethersproject/signing-key": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0", "@ethersproject/properties": "^5.5.0", @@ -468,11 +586,21 @@ "hash.js": "1.1.7" } }, - "@ethersproject/solidity": { + "node_modules/@ethersproject/solidity": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bignumber": "^5.5.0", "@ethersproject/bytes": "^5.5.0", "@ethersproject/keccak256": "^5.5.0", @@ -481,21 +609,41 @@ "@ethersproject/strings": "^5.5.0" } }, - "@ethersproject/strings": { + "node_modules/@ethersproject/strings": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/constants": "^5.5.0", "@ethersproject/logger": "^5.5.0" } }, - "@ethersproject/transactions": { + "node_modules/@ethersproject/transactions": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/address": "^5.5.0", "@ethersproject/bignumber": "^5.5.0", "@ethersproject/bytes": "^5.5.0", @@ -507,21 +655,41 @@ "@ethersproject/signing-key": "^5.5.0" } }, - "@ethersproject/units": { + "node_modules/@ethersproject/units": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bignumber": "^5.5.0", "@ethersproject/constants": "^5.5.0", "@ethersproject/logger": "^5.5.0" } }, - "@ethersproject/wallet": { + "node_modules/@ethersproject/wallet": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/abstract-provider": "^5.5.0", "@ethersproject/abstract-signer": "^5.5.0", "@ethersproject/address": "^5.5.0", @@ -539,11 +707,21 @@ "@ethersproject/wordlists": "^5.5.0" } }, - "@ethersproject/web": { + "node_modules/@ethersproject/web": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/base64": "^5.5.0", "@ethersproject/bytes": "^5.5.0", "@ethersproject/logger": "^5.5.0", @@ -551,11 +729,21 @@ "@ethersproject/strings": "^5.5.0" } }, - "@ethersproject/wordlists": { + "node_modules/@ethersproject/wordlists": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { "@ethersproject/bytes": "^5.5.0", "@ethersproject/hash": "^5.5.0", "@ethersproject/logger": "^5.5.0", @@ -563,717 +751,8054 @@ "@ethersproject/strings": "^5.5.0" } }, - "@interlay/interbtc-types": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/@interlay/interbtc-types/-/interbtc-types-1.5.10.tgz", - "integrity": "sha512-7pUzNKmNeHi74uJl9WBoYzwyKh8+X18wZz9MVDvx58SgkDiEjUpyeafjhcmVhJptaB+OwPJ1V76RDbJRxr0T4w==" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "engines": { + "node": ">=6.0.0" + } }, - "@kiltprotocol/type-definitions": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@kiltprotocol/type-definitions/-/type-definitions-0.1.23.tgz", - "integrity": "sha512-5bGUDo8aVTWttwUrV1gyRUlbBn9zllv6/ofAda9ejMbjY5o99YqsAWlXg1mro6BqE3rcF/i0tGbIdO9Z0tOttA==" + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" }, - "@laminar/type-definitions": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@laminar/type-definitions/-/type-definitions-0.3.1.tgz", - "integrity": "sha512-QWC2qtvbPIxal+gMfUocZmwK0UsD7Sb0RUm4Hallkp+OXXL+3uBLwztYDLS5LtocOn0tfR//sgpnfsEIEb71Lw==", - "requires": { - "@open-web3/orml-type-definitions": "^0.8.2-9" - }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dependencies": { - "@open-web3/orml-type-definitions": { - "version": "0.8.2-11", - "resolved": "https://registry.npmjs.org/@open-web3/orml-type-definitions/-/orml-type-definitions-0.8.2-11.tgz", - "integrity": "sha512-cUv5+mprnaGNt0tu3FhK1nFRBK7SGjPhA1O0nxWWeRmuuH5fjkr0glbHE9kcKuCBfsh7nt6NGwxwl9emQtUDSA==" - } + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@metaverse-network-sdk/type-definitions": { - "version": "0.0.1-13", - "resolved": "https://registry.npmjs.org/@metaverse-network-sdk/type-definitions/-/type-definitions-0.0.1-13.tgz", - "integrity": "sha512-qxV8M/wHK5R5bJP+t1SOQP2l8zRT8e1+wCbrqpVeh4VOw/DU9+EBBTYXnui9AbuJvrej/wLDiI0g3MqK0TsYrA==", - "requires": { - "lodash.merge": "^4.6.2" + "node_modules/@moonbeam-network/api-augment": { + "version": "0.1700.0", + "resolved": "https://registry.npmjs.org/@moonbeam-network/api-augment/-/api-augment-0.1700.0.tgz", + "integrity": "sha512-HpRVtS1HyONSrPNGh8pkjqU9TDCItF0WdX/VfYtFFXgXyUz+KFb8fEK/frU4G7ZZmskMUmCxi/ccMfH86dgMuw==", + "license": "GPL-3.0-only", + "engines": { + "node": ">=14.0.0" } }, - "@moonbeam-network/api-augment": { - "version": "0.1502.0", - "resolved": "https://registry.npmjs.org/@moonbeam-network/api-augment/-/api-augment-0.1502.0.tgz", - "integrity": "sha512-xjxDVhiibyD9majOKSGuMr/wv9/KBctQHgUsthrfC5XWEfCFc3Ui/T6fq67hSg8De1V5NVHyM9asAdae0RDTlQ==" - }, - "@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" + "node_modules/@noble/hashes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.1.tgz", + "integrity": "sha512-Lkp9+NijmV7eSVZqiUvt3UCuuHeJpUVmRrvh430gyJjJiuJMqkeHf6/A9lQ/smmbWV/0spDeJscscPzyB4waZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, - "@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==" + "node_modules/@noble/secp256k1": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", + "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, - "@open-web3/orml-type-definitions": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@open-web3/orml-type-definitions/-/orml-type-definitions-1.1.3.tgz", - "integrity": "sha512-kIYIGzaILjUikKsUxs3mE2akQINC+rctVuq4rYYniZPsWA2L0+4FLt8tefTxTy6OcfsmQeefrbFiFBHs9igC7w==", - "requires": { - "lodash.merge": "^4.6.2" + "node_modules/@polkadot/api": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.8.2.tgz", + "integrity": "sha512-kqHYLGIivYAHGF0B19ApBANDrreUqeyXuqtNHxieQSe63yoAksyUbwTmdl58Z0WnvXg39fjXXNZzLXFt2/txIQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/api-derive": "8.8.2", + "@polkadot/keyring": "^9.4.1", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/types-known": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "eventemitter3": "^4.0.7", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" } }, - "@parallel-finance/type-definitions": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/@parallel-finance/type-definitions/-/type-definitions-1.5.9.tgz", - "integrity": "sha512-Uvl0ZmGjWWYxiW6QWG78/P4kM4DRrwtkhcJm1zBO02MCQ3b+Ngz70GMdKl6PYvm+mIaM35NPiR2/VuMaiRvEEg==", - "requires": { - "@open-web3/orml-type-definitions": "^1.0.2-3" + "node_modules/@polkadot/api-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.8.2.tgz", + "integrity": "sha512-c99guuBvHrGbFBD9x32YG4Yc5osP1jVkGz/hlriRuTZNMUa/ZBjeoZtbVchL4PlpNC1sjdvvrIC9j3uQhvYHJQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "@phala/typedefs": { - "version": "0.2.30", - "resolved": "https://registry.npmjs.org/@phala/typedefs/-/typedefs-0.2.30.tgz", - "integrity": "sha512-9OOPm0oWGoJ216EbziqMU3SCybNuOhYrSnthMFiYdaWigabwQBXFkDDNIT8RFPnVe4Jnf225vWGgvDjypF/Ayg==" + "node_modules/@polkadot/api-base": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.8.2.tgz", + "integrity": "sha512-V04Hw6WJhWGUr5m50lNWE/9ao7ZjcJq005kVMtMRdI94HLmKDMnS3M4EI6USGtLWQ0VOlIMmlp7k2R3SyVFwQA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } }, - "@polkadot/api": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-7.15.1.tgz", - "integrity": "sha512-z0z6+k8+R9ixRMWzfsYrNDnqSV5zHKmyhTCL0I7+1I081V18MJTCFUKubrh0t1gD0/FCt3U9Ibvr4IbtukYLrQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/api-augment": "7.15.1", - "@polkadot/api-base": "7.15.1", - "@polkadot/api-derive": "7.15.1", - "@polkadot/keyring": "^8.7.1", - "@polkadot/rpc-augment": "7.15.1", - "@polkadot/rpc-core": "7.15.1", - "@polkadot/rpc-provider": "7.15.1", - "@polkadot/types": "7.15.1", - "@polkadot/types-augment": "7.15.1", - "@polkadot/types-codec": "7.15.1", - "@polkadot/types-create": "7.15.1", - "@polkadot/types-known": "7.15.1", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", - "eventemitter3": "^4.0.7", + "node_modules/@polkadot/api-derive": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.8.2.tgz", + "integrity": "sha512-ltHft5kp+TFasolSSQlip6zQpw3WFinu6CQZRmcAAyGaM7QgNweIWh3ZdoigrjnZaJPraGWNCfJv0pSg+2j0vg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.8.2", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", "rxjs": "^7.5.5" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/keyring": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.5.1.tgz", + "integrity": "sha512-ixv2lq1zNzYa+GqZQTzcraNw5ZrTTK+2/sqfeMOIr7gBGk0UCALuK0NCvTRAUtQK1RT2psBkkm2lr/rrNCeK+A==", "dependencies": { - "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - } + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.5.1", + "@polkadot/util-crypto": "9.5.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.5.1", + "@polkadot/util-crypto": "9.5.1" } }, - "@polkadot/api-augment": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-7.15.1.tgz", - "integrity": "sha512-7csQLS6zuYuGq7W1EkTBz1ZmxyRvx/Qpz7E7zPSwxmY8Whb7Yn2effU9XF0eCcRpyfSW8LodF8wMmLxGYs1OaQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/api-base": "7.15.1", - "@polkadot/rpc-augment": "7.15.1", - "@polkadot/types": "7.15.1", - "@polkadot/types-augment": "7.15.1", - "@polkadot/types-codec": "7.15.1", - "@polkadot/util": "^8.7.1" + "node_modules/@polkadot/networks": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.4.1.tgz", + "integrity": "sha512-ibH8bZ2/XMXv0XEsP1fGOqNnm2mg1rHo5kHXSJ3QBcZJFh1+xkI4Ovl2xrFfZ+SYATA3Wsl5R6knqimk2EqyJQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.4.1", + "@substrate/ss58-registry": "^1.22.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/api-base": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-7.15.1.tgz", - "integrity": "sha512-UlhLdljJPDwGpm5FxOjvJNFTxXMRFaMuVNx6EklbuetbBEJ/Amihhtj0EJRodxQwtZ4ZtPKYKt+g+Dn7OJJh4g==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/rpc-core": "7.15.1", - "@polkadot/types": "7.15.1", - "@polkadot/util": "^8.7.1", - "rxjs": "^7.5.5" + "node_modules/@polkadot/networks/node_modules/@polkadot/util": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.4.1.tgz", + "integrity": "sha512-z0HcnIe3zMWyK1s09wQIwc1M8gDKygSF9tDAbC8H9KDeIRZB2ldhwWEFx/1DJGOgFFrmRfkxeC6dcDpfzQhFow==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.4.1", + "@polkadot/x-global": "9.4.1", + "@polkadot/x-textdecoder": "9.4.1", + "@polkadot/x-textencoder": "9.4.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/api-derive": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-7.15.1.tgz", - "integrity": "sha512-CsOQppksQBaa34L1fWRzmfQQpoEBwfH0yTTQxgj3h7rFYGVPxEKGeFjo1+IgI2vXXvOO73Z8E4H/MnbxvKrs1Q==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/api": "7.15.1", - "@polkadot/api-augment": "7.15.1", - "@polkadot/api-base": "7.15.1", - "@polkadot/rpc-core": "7.15.1", - "@polkadot/types": "7.15.1", - "@polkadot/types-codec": "7.15.1", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", + "node_modules/@polkadot/networks/node_modules/@polkadot/x-bigint": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.4.1.tgz", + "integrity": "sha512-KlbXboegENoyrpjj+eXfY13vsqrXgk4620zCAUhKNH622ogdvAepHbY/DpV6w0FLEC6MwN9zd5cRuDBEXVeWiw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/networks/node_modules/@polkadot/x-global": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.4.1.tgz", + "integrity": "sha512-eN4oZeRdIKQeUPNN7OtH5XeYp349d8V9+gW6W0BmCfB2lTg8TDlG1Nj+Cyxpjl9DNF5CiKudTq72zr0dDSRbwA==", + "dependencies": { + "@babel/runtime": "^7.18.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/networks/node_modules/@polkadot/x-textdecoder": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.4.1.tgz", + "integrity": "sha512-yLulcgVASFUBJqrvS6Ssy0ko9teAfbu1ajH0r3Jjnqkpmmz2DJ1CS7tAktVa7THd4GHPGeKAVfxl+BbV/LZl+w==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/networks/node_modules/@polkadot/x-textencoder": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.4.1.tgz", + "integrity": "sha512-/47wa31jBa43ULqMO60vzcJigTG+ZAGNcyT5r6hFLrQzRzc8nIBjIOD8YWtnKM92r9NvlNv2wJhdamqyU0mntg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/networks/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/networks/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/rpc-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.8.2.tgz", + "integrity": "sha512-z9rOSmPvcS/YQSJIhM5F2uLyYZ6azll35V9xGs19hypO5wkwzLYByLbXQ7j1SFI267q/IIXVnri0yI6mtsQgzA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-core": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.8.2.tgz", + "integrity": "sha512-2MrIra52NYsvWv192sHM5b6dUXYYYzA8IB/rB7YF9Hm4aIDJbQJ/8uBivHZjMzyHsegxMDAe9WQSEkR0eagojQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", "rxjs": "^7.5.5" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.8.2.tgz", + "integrity": "sha512-LzzTTOxmqDndOcYdukYkpfEBq3GlbKAOb2pisKF4CtcGPcZ6bG0vktwx6qlWQ+Apmdu98rabt+iQPfwvOSg8sA==", "dependencies": { - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-support": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "@polkadot/x-fetch": "^9.4.1", + "@polkadot/x-global": "^9.4.1", + "@polkadot/x-ws": "^9.4.1", + "@substrate/connect": "0.7.5", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.6" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/apps-config": { - "version": "0.110.1", - "resolved": "https://registry.npmjs.org/@polkadot/apps-config/-/apps-config-0.110.1.tgz", - "integrity": "sha512-fH/+OAOeM+Qs6PMFInAYGK/dBx53isJHBvU4ckHhh9izlnEdD0kiF4IT/IOgTEs0g2CPbDTPm3AqW+UnxarrRA==", - "requires": { - "@acala-network/type-definitions": "^4.0.1", - "@babel/runtime": "^7.17.8", - "@bifrost-finance/type-definitions": "1.4.0", - "@crustio/type-definitions": "1.2.0", - "@darwinia/types": "2.7.2", - "@digitalnative/type-definitions": "1.1.27", - "@docknetwork/node-types": "0.6.0", - "@edgeware/node-types": "3.6.2-wako", - "@equilab/definitions": "1.4.11", - "@interlay/interbtc-types": "1.5.10", - "@kiltprotocol/type-definitions": "0.1.23", - "@laminar/type-definitions": "0.3.1", - "@metaverse-network-sdk/type-definitions": "^0.0.1-13", - "@parallel-finance/type-definitions": "1.5.9", - "@phala/typedefs": "0.2.30", - "@polkadot/api": "^7.13.1", - "@polkadot/api-derive": "^7.13.1", - "@polkadot/networks": "^8.6.1", - "@polkadot/types": "^7.13.1", - "@polkadot/util": "^8.6.1", - "@polkadot/x-fetch": "^8.6.1", - "@polymathnetwork/polymesh-types": "0.0.2", - "@snowfork/snowbridge-types": "0.2.7", - "@sora-substrate/type-definitions": "1.8.1", - "@subsocial/types": "0.6.5", - "@unique-nft/types": "0.3.1", - "@zeitgeistpm/type-defs": "0.4.5", - "@zeroio/type-definitions": "0.0.14", - "i18next": "^21.6.14", - "lodash": "^4.17.21", - "moonbeam-types-bundle": "2.0.3", - "pontem-types-bundle": "1.0.15", + "node_modules/@polkadot/types": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.8.2.tgz", + "integrity": "sha512-O90MEfGbpPh/FmUAv0m3LcweZLWH6pmkODb1EGnwBHjZadYLCHFjdFO50yhoch9hh3+aEFmac6ma8swsy6IjAw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/keyring": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-6.11.1.tgz", - "integrity": "sha512-rW8INl7pO6Dmaffd6Df1yAYCRWa2RmWQ0LGfJeA/M6seVIkI6J3opZqAd4q2Op+h9a7z4TESQGk8yggOEL+Csg==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/util": "6.11.1", - "@polkadot/util-crypto": "6.11.1" + "node_modules/@polkadot/types-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.8.2.tgz", + "integrity": "sha512-WalxIz5Z0RPp2FS0cWvhBjYL7FKzDqkIBc+r/DN4vYRQzp5JBVNJjPWWUPtq9ucEl1wiaD2vJNG34rWIYVtObg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-codec": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.8.2.tgz", + "integrity": "sha512-p3YZU8WZIMnnSxTKpoiCPi64T/sSR7dX7ObkpvUITulE6dzXUPUvkdSVS9YlTlb4R43pZ0iSyB18vpnlpq8LYQ==", "dependencies": { - "@polkadot/networks": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-6.11.1.tgz", - "integrity": "sha512-0C6Ha2kvr42se3Gevx6UhHzv3KnPHML0N73Amjwvdr4y0HLZ1Nfw+vcm5yqpz5gpiehqz97XqFrsPRauYdcksQ==", - "requires": { - "@babel/runtime": "^7.14.6" - } - }, - "@polkadot/util": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-6.11.1.tgz", - "integrity": "sha512-TEdCetr9rsdUfJZqQgX/vxLuV4XU8KMoKBMJdx+JuQ5EWemIdQkEtMBdL8k8udNGbgSNiYFA6rPppATeIxAScg==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-textdecoder": "6.11.1", - "@polkadot/x-textencoder": "6.11.1", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.11.9", - "camelcase": "^5.3.1", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-6.11.1.tgz", - "integrity": "sha512-fWA1Nz17FxWJslweZS4l0Uo30WXb5mYV1KEACVzM+BSZAvG5eoiOAYX6VYZjyw6/7u53XKrWQlD83iPsg3KvZw==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/networks": "6.11.1", - "@polkadot/util": "6.11.1", - "@polkadot/wasm-crypto": "^4.0.2", - "@polkadot/x-randomvalues": "6.11.1", - "base-x": "^3.0.8", - "base64-js": "^1.5.1", - "blakejs": "^1.1.1", - "bn.js": "^4.11.9", - "create-hash": "^1.2.0", - "elliptic": "^6.5.4", - "hash.js": "^1.1.7", - "js-sha3": "^0.8.0", - "scryptsy": "^2.1.0", - "tweetnacl": "^1.0.3", - "xxhashjs": "^0.2.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-6.11.1.tgz", - "integrity": "sha512-2MfUfGZSOkuPt7GF5OJkPDbl4yORI64SUuKM25EGrJ22o1UyoBnPOClm9eYujLMD6BfDZRM/7bQqqoLW+NuHVw==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-global": "6.11.1" - } - } + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/metadata": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@polkadot/metadata/-/metadata-4.17.1.tgz", - "integrity": "sha512-219isiCWVfbu5JxZnOPj+cV4T+S0XHS4+Jal3t3xz9y4nbgr+25Pa4KInEsJPx0u8EZAxMeiUCX3vd5U7oe72g==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/types": "4.17.1", - "@polkadot/types-known": "4.17.1", - "@polkadot/util": "^6.11.1", - "@polkadot/util-crypto": "^6.11.1" + "node_modules/@polkadot/types-create": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.8.2.tgz", + "integrity": "sha512-YMpiLCVFs2KKpvn3n24HahUzneaLKmjgwwd+QvFCooJClV/0YK22kwvlEteLO3aWPx2jy8ySSpUFn8kd/oWEAA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-known": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.8.2.tgz", + "integrity": "sha512-Ywa7v7K+UIYpQM3gbl6oA0zKiriX1OJfoYBxX7BcVLKW8cWmdy2xH9W6qNqxDWGAc2LXqNLhn0uzaRxq1niCCQ==", "dependencies": { - "@polkadot/networks": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-6.11.1.tgz", - "integrity": "sha512-0C6Ha2kvr42se3Gevx6UhHzv3KnPHML0N73Amjwvdr4y0HLZ1Nfw+vcm5yqpz5gpiehqz97XqFrsPRauYdcksQ==", - "requires": { - "@babel/runtime": "^7.14.6" - } - }, - "@polkadot/types": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-4.17.1.tgz", - "integrity": "sha512-rjW4OFdwvFekzN3ATLibC2JPSd8AWt5YepJhmuCPdwH26r3zB8bEC6dM7YQExLVUmygVPvgXk5ffHI6RAdXBMg==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/metadata": "4.17.1", - "@polkadot/util": "^6.11.1", - "@polkadot/util-crypto": "^6.11.1", - "@polkadot/x-rxjs": "^6.11.1" - } - }, - "@polkadot/types-known": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-4.17.1.tgz", - "integrity": "sha512-YkOwGrO+k9aVrBR8FgYHnfJKhOfpdgC5ZRYNL/xJ9oa7lBYqPts9ENAxeBmJS/5IGeDF9f32MNyrCP2umeCXWg==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/networks": "^6.11.1", - "@polkadot/types": "4.17.1", - "@polkadot/util": "^6.11.1" - } - }, - "@polkadot/util": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-6.11.1.tgz", - "integrity": "sha512-TEdCetr9rsdUfJZqQgX/vxLuV4XU8KMoKBMJdx+JuQ5EWemIdQkEtMBdL8k8udNGbgSNiYFA6rPppATeIxAScg==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-textdecoder": "6.11.1", - "@polkadot/x-textencoder": "6.11.1", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.11.9", - "camelcase": "^5.3.1", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-6.11.1.tgz", - "integrity": "sha512-fWA1Nz17FxWJslweZS4l0Uo30WXb5mYV1KEACVzM+BSZAvG5eoiOAYX6VYZjyw6/7u53XKrWQlD83iPsg3KvZw==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/networks": "6.11.1", - "@polkadot/util": "6.11.1", - "@polkadot/wasm-crypto": "^4.0.2", - "@polkadot/x-randomvalues": "6.11.1", - "base-x": "^3.0.8", - "base64-js": "^1.5.1", - "blakejs": "^1.1.1", - "bn.js": "^4.11.9", - "create-hash": "^1.2.0", - "elliptic": "^6.5.4", - "hash.js": "^1.1.7", - "js-sha3": "^0.8.0", - "scryptsy": "^2.1.0", - "tweetnacl": "^1.0.3", - "xxhashjs": "^0.2.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-6.11.1.tgz", - "integrity": "sha512-2MfUfGZSOkuPt7GF5OJkPDbl4yORI64SUuKM25EGrJ22o1UyoBnPOClm9eYujLMD6BfDZRM/7bQqqoLW+NuHVw==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-global": "6.11.1" - } - } + "@babel/runtime": "^7.18.3", + "@polkadot/networks": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/networks": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-8.7.1.tgz", - "integrity": "sha512-8xAmhDW0ry5EKcEjp6VTuwoTm0DdDo/zHsmx88P6sVL87gupuFsL+B6TrsYLl8GcaqxujwrOlKB+CKTUg7qFKg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@substrate/ss58-registry": "^1.17.0" + "node_modules/@polkadot/types-support": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.8.2.tgz", + "integrity": "sha512-z4yjN8odDgFFlhGBrJAeHX4YsUeprmBAzWDCJMBeL4C/E1yIG7RyzQryVJNb3m/galiX1Tzuuch4kqE/jABnfw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/rpc-augment": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-7.15.1.tgz", - "integrity": "sha512-sK0+mphN7nGz/eNPsshVi0qd0+N0Pqxuebwc1YkUGP0f9EkDxzSGp6UjGcSwWVaAtk9WZZ1MpK1Jwb/2GrKV7Q==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/rpc-core": "7.15.1", - "@polkadot/types": "7.15.1", - "@polkadot/types-codec": "7.15.1", - "@polkadot/util": "^8.7.1" + "node_modules/@polkadot/util": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.5.1.tgz", + "integrity": "sha512-cI2ar15vkoXjs//YNn1yT5eUdK7jF32XNw3Oc6YJ2qEpenwy30c3BUQJOiqW7J6UBYLYll5O5y0ejv6LQoSFBQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.5.1", + "@polkadot/x-global": "9.5.1", + "@polkadot/x-textdecoder": "9.5.1", + "@polkadot/x-textencoder": "9.5.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/rpc-core": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-7.15.1.tgz", - "integrity": "sha512-4Sb0e0PWmarCOizzxQAE1NQSr5z0n+hdkrq3+aPohGu9Rh4PodG+OWeIBy7Ov/3GgdhNQyBLG+RiVtliXecM3g==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/rpc-augment": "7.15.1", - "@polkadot/rpc-provider": "7.15.1", - "@polkadot/types": "7.15.1", - "@polkadot/util": "^8.7.1", - "rxjs": "^7.5.5" + "node_modules/@polkadot/util-crypto": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.5.1.tgz", + "integrity": "sha512-4YwJJ2/mXx3PXTy4WLekQOo1MlDtQzYgTZsjOagi3Uz3Q/ITvS+/iu6eF/H6Tz0uEQjwX6t9tsMkM5FWk/XoGg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@noble/hashes": "1.1.1", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.5.1", + "@polkadot/util": "9.5.1", + "@polkadot/wasm-crypto": "^6.1.1", + "@polkadot/x-bigint": "9.5.1", + "@polkadot/x-randomvalues": "9.5.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.5.1" } }, - "@polkadot/rpc-provider": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-7.15.1.tgz", - "integrity": "sha512-n0RWfSaD/r90JXeJkKry1aGZwJeBUUiMpXUQ9Uvp6DYBbYEDs0fKtWLpdT3PdFrMbe5y3kwQmNLxwe6iF4+mzg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/keyring": "^8.7.1", - "@polkadot/types": "7.15.1", - "@polkadot/types-support": "7.15.1", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", - "@polkadot/x-fetch": "^8.7.1", - "@polkadot/x-global": "^8.7.1", - "@polkadot/x-ws": "^8.7.1", - "@substrate/connect": "0.7.0-alpha.0", - "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.2", - "nock": "^13.2.4" + "node_modules/@polkadot/util-crypto/node_modules/@polkadot/networks": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.5.1.tgz", + "integrity": "sha512-1q9jm7NLk1ZMqFJL+kYkpn1phEO+N0d5LU81ropjYf0hC9boBAya4Zqvv3DwasPuLp6qaj4r0nrfzmkP5xHKZQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.5.1", + "@substrate/ss58-registry": "^1.22.0" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/util-crypto/node_modules/@polkadot/x-bigint": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.5.1.tgz", + "integrity": "sha512-rTp7j3KvCy8vANRoaW6j0pCQdLc/eed6uSRXoxh3z1buJhw460/Q/hJ0Bey6fyeNSDzIwFk4SGwf/Gzf+kS1vQ==", "dependencies": { - "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/types": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-7.15.1.tgz", - "integrity": "sha512-KawZVS+eLR1D6O7c/P5cSUwr6biM9Qd2KwKtJIO8l1Mrxp7r+y2tQnXSSXVAd6XPdb3wVMhnIID+NW3W99TAnQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/keyring": "^8.7.1", - "@polkadot/types-augment": "7.15.1", - "@polkadot/types-codec": "7.15.1", - "@polkadot/types-create": "7.15.1", - "@polkadot/util": "^8.7.1", - "@polkadot/util-crypto": "^8.7.1", - "rxjs": "^7.5.5" + "node_modules/@polkadot/util/node_modules/@polkadot/x-bigint": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.5.1.tgz", + "integrity": "sha512-rTp7j3KvCy8vANRoaW6j0pCQdLc/eed6uSRXoxh3z1buJhw460/Q/hJ0Bey6fyeNSDzIwFk4SGwf/Gzf+kS1vQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/util/node_modules/@polkadot/x-textdecoder": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.5.1.tgz", + "integrity": "sha512-bY0J3Tov5y4oZi8qB/UtoEYCSgo5sDiiOa3Wmgen09LfB4gXJhWFGJSmcZqHERXCdEcmZojdbHTvOGSeYM9U1w==", "dependencies": { - "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "@polkadot/types-augment": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-7.15.1.tgz", - "integrity": "sha512-aqm7xT/66TCna0I2utpIekoquKo0K5pnkA/7WDzZ6gyD8he2h0IXfe8xWjVmuyhjxrT/C/7X1aUF2Z0xlOCwzQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/types": "7.15.1", - "@polkadot/types-codec": "7.15.1", - "@polkadot/util": "^8.7.1" + "node_modules/@polkadot/util/node_modules/@polkadot/x-textencoder": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.5.1.tgz", + "integrity": "sha512-zt121nqxiudMeZnanpnfWhCE0SOTcVRqn/atqO59us/yf6LMTf23mgd7P4795TgJwXOUcui4fhm/g/VcpsLq9Q==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/util/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/util/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.1.1.tgz", + "integrity": "sha512-Cy0k00VCu+HWxie+nn9GWPlSPdiZl8Id8ulSGA2FKET0jIbffmOo4e1E2FXNucfR1UPEpqov5BCF9T5YxEXZDg==", + "dependencies": { + "@babel/runtime": "^7.17.9" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.1.1.tgz", + "integrity": "sha512-hv9RCbMYtgjCy7+FKZFnO2Afu/whax9sk6udnZqGRBRiwaNagtyliWZGrKNGvaXMIO0VyaY4jWUwSzUgPrLu1A==", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-init": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1", + "@polkadot/wasm-util": "6.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.1.1.tgz", + "integrity": "sha512-gG4FStVumkyRNH7WcTB+hn3EEwCssJhQyi4B1BOUt+eYYmw9xJdzIhqjzSd9b/yF2e5sRaAzfnMj2srGufsE6A==", + "dependencies": { + "@babel/runtime": "^7.17.9" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.1.1.tgz", + "integrity": "sha512-rbBm/9FOOUjISL4gGNokjcKy2X+Af6Chaet4zlabatpImtPIAK26B2UUBGoaRUnvl/w6K3+GwBL4LuBC+CvzFw==", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.1.1.tgz", + "integrity": "sha512-zkz5Ct4KfTBT+YNEA5qbsHhTV58/FAxDave8wYIOaW4TrBnFPPs+J0WBWlGFertgIhPkvjFnQC/xzRyhet9prg==", + "dependencies": { + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-util": "6.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.1.1.tgz", + "integrity": "sha512-DgpLoFXMT53UKcfZ8eT2GkJlJAOh89AWO+TP6a6qeZQpvXVe5f1yR45WQpkZlgZyUP+/19+kY56GK0pQxfslqg==", + "dependencies": { + "@babel/runtime": "^7.17.9" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.5.1.tgz", + "integrity": "sha512-jMWpDVE4CyH+vVuONmvcKlJJnsRqmglmJTppsl+38JTnGL2FbELn2q92N8b5uTxmPP0lf+QTn1THXnkWvG7Ojw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-global": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.5.1.tgz", + "integrity": "sha512-asG5YlW1K3f4YjyuZ+HrbF9H5d78i5v9+7Bh+9gD+sVfB3KhqwVYZB+wzOaJkPp6lwUbBA9OBHFCVBqpR3wBJw==", + "dependencies": { + "@babel/runtime": "^7.18.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.5.1.tgz", + "integrity": "sha512-NFvG//NsBjFP01dEtQATNPn5lSAZwh6jkkUXG2rHlgvW6k8nVJ0aJPvO5MlgItgS5Ry2F88AIiSsO3cfoTpszg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.5.1.tgz", + "integrity": "sha512-d91Hf7p9+mWqSvx+lZr0f7eVkHXGzNqvQnXYAizU1HE1HHl5gLixPKoGldTKrYhvV30OwKKDJChKHzvQL6nVdQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@substrate/connect": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.5.tgz", + "integrity": "sha512-sdAZ6IGuTNxRGlH/O+6IaXvkYzZFwMK03VbQMgxUzry9dz1+JzyaNf8iOTVHxhMIUZc0h0E90JQz/hNiUYPlUw==", + "dependencies": { + "@substrate/connect-extension-protocol": "^1.0.0", + "@substrate/smoldot-light": "0.6.16", + "eventemitter3": "^4.0.7" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.0.tgz", + "integrity": "sha512-nFVuKdp71hMd/MGlllAOh+a2hAqt8m6J2G0aSsS/RcALZexxF9jodbFc62ni8RDtJboeOfXAHhenYOANvJKPIg==" + }, + "node_modules/@substrate/smoldot-light": { + "version": "0.6.16", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.16.tgz", + "integrity": "sha512-Ej0ZdNPTW0EXbp45gv/5Kt/JV+c9cmRZRYAXg+EALxXPm0hW9h2QdVLm61A2PAskOGptW4wnJ1WzzruaenwAXQ==", + "dependencies": { + "buffer": "^6.0.1", + "pako": "^2.0.4", + "websocket": "^1.0.32" + } + }, + "node_modules/@substrate/smoldot-light/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.22.0.tgz", + "integrity": "sha512-IKqrPY0B3AeIXEc5/JGgEhPZLy+SmVyQf+k0SIGcNSTqt1GLI3gQFEOFwSScJdem+iYZQUrn6YPPxC3TpdSC3A==" + }, + "node_modules/@substrate/txwrapper-core": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@substrate/txwrapper-core/-/txwrapper-core-3.1.2.tgz", + "integrity": "sha512-kZbduyjiAnH4hGIQiD2RA2qgWZ+x+0vm15hAIdQhFzxOXXgkiKmEV4zygErqbYBi0nAkHBLa55JlNfjp7LnMKw==", + "dependencies": { + "@polkadot/api": "8.8.2", + "memoizee": "0.4.15" + } + }, + "node_modules/@substrate/txwrapper-substrate": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@substrate/txwrapper-substrate/-/txwrapper-substrate-3.1.2.tgz", + "integrity": "sha512-2yj/HIubPOV+27Ss0f+XwkAfh61sF316XZwCb/cWfqFy1+/T5yfewjeNj+G5KOT9IirFr+27umqzQ6quz1Klpg==", + "dependencies": { + "@substrate/txwrapper-core": "^3.1.2" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==" + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", + "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==" + }, + "node_modules/@types/node": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tcp-port-used": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/tcp-port-used/-/tcp-port-used-1.0.1.tgz", + "integrity": "sha512-6pwWTx8oUtWvsiZUCrhrK/53MzKVLnuNSSaZILPy3uMes9QnTrLMar9BDlJArbMOjDcjb3QXFk6Rz8qmmuySZw==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", + "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/abstract-leveldown": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", + "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/blakejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", + "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/chacha": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chacha/-/chacha-2.1.0.tgz", + "integrity": "sha512-FhVtqaZOiHlOKUkAWfDlJ+oe/O8iPQbCC0pFXJqphr4YQBCZPXa8Mv3j35+W4eWFWCoTUcW2u5IWDDkknygvVA==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^1.0.33" + }, + "optionalDependencies": { + "chacha-native": "^2.0.0" + } + }, + "node_modules/chacha-native": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chacha-native/-/chacha-native-2.0.3.tgz", + "integrity": "sha512-93h+osfjhR2sMHAaapTLlL/COoBPEZ6upicPBQ4GfUyadoMb8t9/M0PKK8kC+F+DEA/Oy3Kg9w3HzY3J1foP3g==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "bindings": "^1.2.1", + "inherits": "^2.0.1", + "nan": "^2.4.0" + } + }, + "node_modules/chacha/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/chacha/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-hash/node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/deferred-leveldown": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz", + "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==", + "dependencies": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ed2curve": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ed2curve/-/ed2curve-0.3.0.tgz", + "integrity": "sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==", + "dependencies": { + "tweetnacl": "1.x.x" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding-down": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-5.0.4.tgz", + "integrity": "sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==", + "dependencies": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "node_modules/eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/eth-lib/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/eth-lib/node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/eth-object": { + "version": "1.0.3", + "resolved": "git+ssh://git@github.com/aurora-is-near/eth-object.git#383b6ea68c7050bea4cab6950c1d5a7fa553e72b", + "license": "ISC", + "dependencies": { + "eth-util-lite": "near/eth-util-lite#master", + "ethereumjs-util": "^7.0.3", + "web3": "^1.2.9" + } + }, + "node_modules/eth-util-lite": { + "version": "1.0.1", + "resolved": "git+ssh://git@github.com/near/eth-util-lite.git#ae0210cbe127b4d43ba01fd7cd4898d1a3f6c96a", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.8", + "js-sha3": "^0.8.0", + "rlp": "^2.2.3", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", + "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethereumjs-util/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/ethers": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.4.tgz", + "integrity": "sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.5.0", + "@ethersproject/abstract-provider": "5.5.1", + "@ethersproject/abstract-signer": "5.5.0", + "@ethersproject/address": "5.5.0", + "@ethersproject/base64": "5.5.0", + "@ethersproject/basex": "5.5.0", + "@ethersproject/bignumber": "5.5.0", + "@ethersproject/bytes": "5.5.0", + "@ethersproject/constants": "5.5.0", + "@ethersproject/contracts": "5.5.0", + "@ethersproject/hash": "5.5.0", + "@ethersproject/hdnode": "5.5.0", + "@ethersproject/json-wallets": "5.5.0", + "@ethersproject/keccak256": "5.5.0", + "@ethersproject/logger": "5.5.0", + "@ethersproject/networks": "5.5.2", + "@ethersproject/pbkdf2": "5.5.0", + "@ethersproject/properties": "5.5.0", + "@ethersproject/providers": "5.5.3", + "@ethersproject/random": "5.5.1", + "@ethersproject/rlp": "5.5.0", + "@ethersproject/sha2": "5.5.0", + "@ethersproject/signing-key": "5.5.0", + "@ethersproject/solidity": "5.5.0", + "@ethersproject/strings": "5.5.0", + "@ethersproject/transactions": "5.5.0", + "@ethersproject/units": "5.5.0", + "@ethersproject/wallet": "5.5.0", + "@ethersproject/web": "5.5.1", + "@ethersproject/wordlists": "5.5.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-console": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/filter-console/-/filter-console-0.1.1.tgz", + "integrity": "sha512-zrXoV1Uaz52DqPs+qEwNJWJFAWZpYJ47UNmpN9q4j+/EYsz85uV0DC9k8tRND5kYmoVzL0W+Y75q4Rg8sRJCdg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "engines": { + "node": ">=4.x" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "engines": { + "node": "*" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "node_modules/immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", + "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/is2": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", + "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", + "dependencies": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + }, + "engines": { + "node": ">=v0.10.0" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iso-random-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", + "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", + "dependencies": { + "events": "^3.3.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keypair": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", + "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-iterator-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz", + "integrity": "sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-iterator-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/level-iterator-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/level-iterator-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/level-mem": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-3.0.1.tgz", + "integrity": "sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==", + "dependencies": { + "level-packager": "~4.0.0", + "memdown": "~3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-packager": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-4.0.1.tgz", + "integrity": "sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q==", + "dependencies": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-ws": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-1.0.0.tgz", + "integrity": "sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q==", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.8", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-ws/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/level-ws/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/level-ws/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/level-ws/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/levelup": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-3.1.1.tgz", + "integrity": "sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==", + "dependencies": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/libp2p-crypto": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", + "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", + "dependencies": { + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "keypair": "^1.0.4", + "multiformats": "^9.4.5", + "noble-ed25519": "^1.2.6", + "noble-secp256k1": "^1.2.10", + "node-forge": "^0.10.0", + "pem-jwk": "^2.0.0", + "protobufjs": "^6.11.2", + "uint8arrays": "^3.0.0", + "ursa-optional": "^0.10.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/loupe": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.2.tgz", + "integrity": "sha512-QgVamnvj0jX1LMPlCAq0MK6hATORFtGqHoUKXTkwNe13BqlN6aePQCKnnTcFvdDYEEITcJ+gBl4mTW7YJtJbyQ==", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memdown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-3.0.0.tgz", + "integrity": "sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA==", + "dependencies": { + "abstract-leveldown": "~5.0.0", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/memdown/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/memoizee/node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merkle-patricia-tree": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz", + "integrity": "sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ==", + "dependencies": { + "async": "^2.6.1", + "ethereumjs-util": "^5.2.0", + "level-mem": "^3.0.1", + "level-ws": "^1.0.0", + "readable-stream": "^3.0.6", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + }, + "node_modules/mock-socket": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/moonbeam-types-bundle": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/moonbeam-types-bundle/-/moonbeam-types-bundle-2.0.7.tgz", + "integrity": "sha512-YU/q/fS1jj2bK7+egeN7fQ5l5UqWQtRBZWekywQyskbpSNs/IlBdgo3uZixC5OiB4Vmtk+XXoIlHifgHgoFrnA==", + "dependencies": { + "@polkadot/api": "^8.8.2", + "typescript": "^4.7.4" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/multiformats": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.5.tgz", + "integrity": "sha512-vMwf/FUO+qAPvl3vlSZEgEVFY/AxeZq5yg761ScF3CZsXgmTi/HGkicUiNN0CI4PW8FiY2P0OLklOcmQjdQJhw==" + }, + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha512-mc/caHeUcdjnC/boPWJefDr4KUIWQNv+tlnFnJd38QMou86QtxQzBJfxgGRzvx8jazYRqrVlaHarfO72uNxPOg==" + }, + "node_modules/noble-ed25519": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.6.tgz", + "integrity": "sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==", + "deprecated": "Switch to namespaced @noble/ed25519 for security and feature updates" + }, + "node_modules/noble-secp256k1": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", + "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==", + "deprecated": "Switch to namespaced @noble/secp256k1 for security and feature updates" + }, + "node_modules/nock": { + "version": "13.2.7", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.7.tgz", + "integrity": "sha512-R6NUw7RIPtKwgK7jskuKoEi4VFMqIHtV2Uu9K/Uegc4TA5cqe+oNMYslZcUmnVNQCTG6wcSqUBaGTDd7sq5srg==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-watch": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.9.0.tgz", + "integrity": "sha512-C5Rgh5+jvY33K1EH8Qjr1hfpH9Nhasc90QJ0W+JyKg2ogE0LOCZI4xirC8QmywW7XinyBpynwxlrN6aPfjc3Hw==", + "dependencies": { + "nodemon": "^2.0.7", + "through2": "^4.0.2" + }, + "bin": { + "npm-watch": "cli.js" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=", + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-headers": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", + "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/peer-id": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.15.4.tgz", + "integrity": "sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==", + "dependencies": { + "class-is": "^1.1.0", + "libp2p-crypto": "^0.20.0", + "minimist": "^1.2.5", + "multiformats": "^9.4.5", + "protobufjs": "^6.10.2", + "uint8arrays": "^3.0.0" + }, + "bin": { + "peer-id": "src/bin.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/pem-jwk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", + "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", + "dependencies": { + "asn1.js": "^5.0.1" + }, + "bin": { + "pem-jwk": "bin/pem-jwk.js" + }, + "engines": { + "node": ">=5.10.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/polkadot-launch": { + "version": "2.0.0", + "resolved": "git+ssh://git@github.com/PureStake/polkadot-launch.git#ff3014afde11ca55c1f84df79c86b50acb46cb36", + "license": "MIT", + "dependencies": { + "@polkadot/api": "^8.8.2", + "@types/chai": "^4.2.22", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "ethers": "^5.4.7", + "filter-console": "^0.1.1", + "libp2p-crypto": "^0.20.0", + "mocha": "^9.1.2", + "peer-id": "^0.15.3", + "tcp-port-used": "^1.0.2", + "ts-node": "^10.3.0", + "web3": "^1.6.0", + "web3-core": "^1.6.0", + "web3-eth": "^1.6.0", + "yargs": "^15.4.1" + }, + "bin": { + "polkadot-launch": "dist/cli.js" + } + }, + "node_modules/polkadot-launch/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/polkadot-launch/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/polkadot-launch/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/polkadot-launch/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/polkadot-launch/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/polkadot-launch/node_modules/mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/polkadot-launch/node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/polkadot-launch/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/polkadot-launch/node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/polkadot-launch/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/polkadot-launch/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/polkadot-launch/node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + }, + "node_modules/polkadot-launch/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/polkadot-launch/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randchacha": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/randchacha/-/randchacha-1.0.2.tgz", + "integrity": "sha512-Ghc8MLVGQaYYz8TNLm49744u9992rVqEER1KoGBY/dcmJPx2V/x1YBdl7XY4k5Ut4IFPxTQO1kD3wu/rN+o1tw==", + "dependencies": { + "chacha": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/rlp/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/solc": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.11.tgz", + "integrity": "sha512-CdK4pk6VZowmXv7l4lftbr/QUWsHEr+xcdcGHJVgynD08gRwFT4zAFCb3b/eR0FUVVszcHulpGJwEoKRKKrnKw==", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js": { + "version": "0.1.40", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", + "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dependencies": { + "debug": "4.3.1", + "is2": "^2.0.6" + } + }, + "node_modules/tcp-port-used/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tcp-port-used/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/ts-node": { + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uint8arrays": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ursa-optional": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", + "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.14.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz", + "integrity": "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/web3": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.0.tgz", + "integrity": "sha512-n39O7QQNkpsjhiHMJ/6JY6TaLbdX+2FT5iGs8tb3HbIWOhPm4+a7UDbr5Lkm+gLa9aRKWesZs5D5hWyEvg4aJA==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.7.0", + "web3-core": "1.7.0", + "web3-eth": "1.7.0", + "web3-eth-personal": "1.7.0", + "web3-net": "1.7.0", + "web3-shh": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.0.tgz", + "integrity": "sha512-XPhTWUnZa8gnARfiqaag3jJ9+6+a66Li8OikgBUJoMUqPuQTCJPncTbGYqOJIfRFGavEAdlMnfYXx9lvgv2ZPw==", + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-core": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.0.tgz", + "integrity": "sha512-U/CRL53h3T5KHl8L3njzCBT7fCaHkbE6BGJe3McazvFldRbfTDEHXkUJCyM30ZD0RoLi3aDfTVeFIusmEyCctA==", + "dependencies": { + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.7.0", + "web3-core-method": "1.7.0", + "web3-core-requestmanager": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.0.tgz", + "integrity": "sha512-kFiqsZFHJliKF8VKZNjt2JvKu3gu7h3N1/ke3EPhdp9Li/rLmiyzFVr6ApryZ1FSjbSx6vyOkibG3m6xQ5EHJA==", + "dependencies": { + "web3-eth-iban": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.0.tgz", + "integrity": "sha512-43Om+kZX8wU5u1pJ28TltF9e9pSTRph6b8wrOb6wgXAfPHqMulq6UTBJWjXXIRVN46Eiqv0nflw35hp9bbgnbA==", + "dependencies": { + "@ethersproject/transactions": "^5.0.0-beta.135", + "web3-core-helpers": "1.7.0", + "web3-core-promievent": "1.7.0", + "web3-core-subscriptions": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.0.tgz", + "integrity": "sha512-xPH66XeC0K0k29GoRd0vyPQ07yxERPRd4yVPrbMzGAz/e9E4M3XN//XK6+PdfGvGw3fx8VojS+tNIMiw+PujbQ==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-core-requestmanager": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.0.tgz", + "integrity": "sha512-rA3dBTBPrt+eIfTAQ2/oYNTN/2wbZaYNR3pFZGqG8+2oCK03+7oQyz4sWISKy/nYQhURh4GK01rs9sN4o/Tq9w==", + "dependencies": { + "util": "^0.12.0", + "web3-core-helpers": "1.7.0", + "web3-providers-http": "1.7.0", + "web3-providers-ipc": "1.7.0", + "web3-providers-ws": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.0.tgz", + "integrity": "sha512-6giF8pyJrPmWrRpc2WLoVCvQdMMADp20ZpAusEW72axauZCNlW1XfTjs0i4QHQBfdd2lFp65qad9IuATPhuzrQ==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-eth": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.0.tgz", + "integrity": "sha512-3uYwjMjn/MZjKIzXCt4YL9ja/k9X5shfa4lKparZhZE6uesmu+xmSmrEFXA/e9qcveF50jkV7frjkT8H+cLYtw==", + "dependencies": { + "web3-core": "1.7.0", + "web3-core-helpers": "1.7.0", + "web3-core-method": "1.7.0", + "web3-core-subscriptions": "1.7.0", + "web3-eth-abi": "1.7.0", + "web3-eth-accounts": "1.7.0", + "web3-eth-contract": "1.7.0", + "web3-eth-ens": "1.7.0", + "web3-eth-iban": "1.7.0", + "web3-eth-personal": "1.7.0", + "web3-net": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.0.tgz", + "integrity": "sha512-heqR0bWxgCJwjWIhq2sGyNj9bwun5+Xox/LdZKe+WMyTSy0cXDXEAgv3XKNkXC4JqdDt/ZlbTEx4TWak4TRMSg==", + "dependencies": { + "@ethersproject/abi": "5.0.7", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi/node_modules/@ethersproject/abi": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", + "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", + "dependencies": { + "@ethersproject/address": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/hash": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/strings": "^5.0.4" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.0.tgz", + "integrity": "sha512-Zwm7TlQXdXGRuS6+ib1YsR5fQwpfnFyL6UAZg1zERdrUrs3IkCZSL3yCP/8ZYbAjdTEwWljoott2iSqXNH09ug==", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "@ethereumjs/tx": "^3.3.2", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.0.10", + "scrypt-js": "^3.0.1", + "uuid": "3.3.2", + "web3-core": "1.7.0", + "web3-core-helpers": "1.7.0", + "web3-core-method": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.0.tgz", + "integrity": "sha512-2LY1Xwxu5rx468nqHuhvupQAIpytxIUj3mGL9uexszkhrQf05THVe3i4OnUCzkeN6B2cDztNOqLT3j9SSnVQDg==", + "dependencies": { + "@types/bn.js": "^4.11.5", + "web3-core": "1.7.0", + "web3-core-helpers": "1.7.0", + "web3-core-method": "1.7.0", + "web3-core-promievent": "1.7.0", + "web3-core-subscriptions": "1.7.0", + "web3-eth-abi": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.0.tgz", + "integrity": "sha512-I1bikYJJWQ/FJZIAvwsGOvzAgcRIkosWG4s1L6veRoXaU8OEJFeh4s00KcfHDxg7GWZZGbUSbdbzKpwRbWnvkg==", + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.7.0", + "web3-core-helpers": "1.7.0", + "web3-core-promievent": "1.7.0", + "web3-eth-abi": "1.7.0", + "web3-eth-contract": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.0.tgz", + "integrity": "sha512-1PFE/Og+sPZaug+M9TqVUtjOtq0HecE+SjDcsOOysXSzslNC2CItBGkcRwbvUcS+LbIkA7MFsuqYxOL0IV/gyA==", + "dependencies": { + "bn.js": "^4.11.9", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.0.tgz", + "integrity": "sha512-Dr9RZTNOR80PhrPKGdktDUXpOgExEcCcosBj080lKCJFU1paSPj9Zfnth3u6BtIOXyKsVFTrpqekqUDyAwXnNw==", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.7.0", + "web3-core-helpers": "1.7.0", + "web3-core-method": "1.7.0", + "web3-net": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-net": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.0.tgz", + "integrity": "sha512-8pmfU1Se7DmG40Pu8nOCKlhuI12VsVzCtdFDnLAai0zGVAOUuuOCK71B2aKm6u9amWBJjtOlyrCwvsG+QEd6dw==", + "dependencies": { + "web3-core": "1.7.0", + "web3-core-method": "1.7.0", + "web3-utils": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.0.tgz", + "integrity": "sha512-Y9reeEiApfvQKLUUtrU4Z0c+H6b7BMWcsxjgoXndI1C5NB297mIUfltXxfXsh5C/jk5qn4Q3sJp3SwQTyVjH7Q==", + "dependencies": { + "web3-core-helpers": "1.7.0", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.0.tgz", + "integrity": "sha512-U5YLXgu6fvAK4nnMYqo9eoml3WywgTym0dgCdVX/n1UegLIQ4nctTubBAuWQEJzmAzwh+a6ValGcE7ZApTRI7Q==", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.0.tgz", + "integrity": "sha512-0a8+lVV3JBf+eYnGOsdzOpftK1kis5X7s35QAdoaG5SDapnEylXFlR4xDSSSU88ZwMwvse8hvng2xW6A7oeWxw==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.7.0", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/web3-shh": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.0.tgz", + "integrity": "sha512-RZhxcevALIPK178VZCpwMBvQeW+IoWtRJ4EMdegpbnETeZaC3aRUcs6vKnrf0jXJjm4J/E2Dt438Y1Ord/1IMw==", + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.7.0", + "web3-core-method": "1.7.0", + "web3-core-subscriptions": "1.7.0", + "web3-net": "1.7.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.0.tgz", + "integrity": "sha512-O8Tl4Ky40Sp6pe89Olk2FsaUkgHyb5QAXuaKo38ms3CxZZ4d3rPGfjP9DNKGm5+IUgAZBNpF1VmlSmNCqfDI1w==", + "dependencies": { + "bn.js": "^4.11.9", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/which-typed-array": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", + "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@ethereumjs/common": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.1.tgz", + "integrity": "sha512-eUe5RsYiOnazszPsgQOdaetCwgVquiiQHBpB59xNABOrBPNh/ZdTJz+uhHGzKvPm6Dr91ViBGYZcdclTgtki0g==", + "requires": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.4" + } + }, + "@ethereumjs/tx": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.0.tgz", + "integrity": "sha512-/+ZNbnJhQhXC83Xuvy6I9k4jT5sXiV0tMR9C+AzSSpcCV64+NB8dTE1m3x98RYMqb8+TLYWA+HML4F5lfXTlJw==", + "requires": { + "@ethereumjs/common": "^2.6.1", + "ethereumjs-util": "^7.1.4" + } + }, + "@ethersproject/abi": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", + "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", + "requires": { + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", + "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", + "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", + "requires": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0" + } + }, + "@ethersproject/address": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", + "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/rlp": "^5.5.0" + } + }, + "@ethersproject/base64": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", + "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", + "requires": { + "@ethersproject/bytes": "^5.5.0" + } + }, + "@ethersproject/basex": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", + "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/properties": "^5.5.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", + "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "bn.js": "^4.11.9" + } + }, + "@ethersproject/bytes": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", + "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", + "requires": { + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/constants": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", + "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", + "requires": { + "@ethersproject/bignumber": "^5.5.0" + } + }, + "@ethersproject/contracts": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", + "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", + "requires": { + "@ethersproject/abi": "^5.5.0", + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0" + } + }, + "@ethersproject/hash": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", + "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", + "requires": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/hdnode": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", + "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", + "requires": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", + "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", + "requires": { + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", + "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", + "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" + }, + "@ethersproject/networks": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", + "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", + "requires": { + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", + "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/sha2": "^5.5.0" + } + }, + "@ethersproject/properties": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", + "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", + "requires": { + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/providers": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.3.tgz", + "integrity": "sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA==", + "requires": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", + "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/rlp": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", + "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/sha2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", + "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", + "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", + "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/strings": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", + "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/transactions": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", + "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", + "requires": { + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0" + } + }, + "@ethersproject/units": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", + "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", + "requires": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" + } + }, + "@ethersproject/wallet": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", + "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", + "requires": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/json-wallets": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" + } + }, + "@ethersproject/web": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", + "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", + "requires": { + "@ethersproject/base64": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@ethersproject/wordlists": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", + "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", + "requires": { + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@moonbeam-network/api-augment": { + "version": "0.1700.0", + "resolved": "https://registry.npmjs.org/@moonbeam-network/api-augment/-/api-augment-0.1700.0.tgz", + "integrity": "sha512-HpRVtS1HyONSrPNGh8pkjqU9TDCItF0WdX/VfYtFFXgXyUz+KFb8fEK/frU4G7ZZmskMUmCxi/ccMfH86dgMuw==" + }, + "@noble/hashes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.1.tgz", + "integrity": "sha512-Lkp9+NijmV7eSVZqiUvt3UCuuHeJpUVmRrvh430gyJjJiuJMqkeHf6/A9lQ/smmbWV/0spDeJscscPzyB4waZg==" + }, + "@noble/secp256k1": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", + "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==" + }, + "@polkadot/api": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.8.2.tgz", + "integrity": "sha512-kqHYLGIivYAHGF0B19ApBANDrreUqeyXuqtNHxieQSe63yoAksyUbwTmdl58Z0WnvXg39fjXXNZzLXFt2/txIQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/api-derive": "8.8.2", + "@polkadot/keyring": "^9.4.1", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/types-known": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "eventemitter3": "^4.0.7", + "rxjs": "^7.5.5" + } + }, + "@polkadot/api-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.8.2.tgz", + "integrity": "sha512-c99guuBvHrGbFBD9x32YG4Yc5osP1jVkGz/hlriRuTZNMUa/ZBjeoZtbVchL4PlpNC1sjdvvrIC9j3uQhvYHJQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + } + }, + "@polkadot/api-base": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.8.2.tgz", + "integrity": "sha512-V04Hw6WJhWGUr5m50lNWE/9ao7ZjcJq005kVMtMRdI94HLmKDMnS3M4EI6USGtLWQ0VOlIMmlp7k2R3SyVFwQA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/api-derive": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.8.2.tgz", + "integrity": "sha512-ltHft5kp+TFasolSSQlip6zQpw3WFinu6CQZRmcAAyGaM7QgNweIWh3ZdoigrjnZaJPraGWNCfJv0pSg+2j0vg==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.8.2", + "@polkadot/api-augment": "8.8.2", + "@polkadot/api-base": "8.8.2", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "rxjs": "^7.5.5" } }, - "@polkadot/types-codec": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-7.15.1.tgz", - "integrity": "sha512-nI11dT7FGaeDd/fKPD8iJRFGhosOJoyjhZ0gLFFDlKCaD3AcGBRTTY8HFJpP/5QXXhZzfZsD93fVKrosnegU0Q==", + "@polkadot/keyring": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.5.1.tgz", + "integrity": "sha512-ixv2lq1zNzYa+GqZQTzcraNw5ZrTTK+2/sqfeMOIr7gBGk0UCALuK0NCvTRAUtQK1RT2psBkkm2lr/rrNCeK+A==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.5.1", + "@polkadot/util-crypto": "9.5.1" } }, - "@polkadot/types-create": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-7.15.1.tgz", - "integrity": "sha512-+HiaHn7XOwP0kv/rVdORlVkNuMoxuvt+jd67A/CeEreJiXqRLu+S61Mdk7wi6719PTaOal1hTDFfyGrtUd8FSQ==", + "@polkadot/networks": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.4.1.tgz", + "integrity": "sha512-ibH8bZ2/XMXv0XEsP1fGOqNnm2mg1rHo5kHXSJ3QBcZJFh1+xkI4Ovl2xrFfZ+SYATA3Wsl5R6knqimk2EqyJQ==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/types-codec": "7.15.1", - "@polkadot/util": "^8.7.1" - } - }, - "@polkadot/types-known": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-7.15.1.tgz", - "integrity": "sha512-LMcNP0CxT84DqAKV62/qDeeIVIJCR5yzE9b+9AsYhyfhE4apwxjrThqZA7K0CF56bOdQJSexAerYB/jwk2IijA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/networks": "^8.7.1", - "@polkadot/types": "7.15.1", - "@polkadot/types-codec": "7.15.1", - "@polkadot/types-create": "7.15.1", - "@polkadot/util": "^8.7.1" - }, - "dependencies": { - "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.4.1", + "@substrate/ss58-registry": "^1.22.0" + }, + "dependencies": { + "@polkadot/util": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.4.1.tgz", + "integrity": "sha512-z0HcnIe3zMWyK1s09wQIwc1M8gDKygSF9tDAbC8H9KDeIRZB2ldhwWEFx/1DJGOgFFrmRfkxeC6dcDpfzQhFow==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.4.1", + "@polkadot/x-global": "9.4.1", + "@polkadot/x-textdecoder": "9.4.1", + "@polkadot/x-textencoder": "9.4.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" } }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", + "@polkadot/x-bigint": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.4.1.tgz", + "integrity": "sha512-KlbXboegENoyrpjj+eXfY13vsqrXgk4620zCAUhKNH622ogdvAepHbY/DpV6w0FLEC6MwN9zd5cRuDBEXVeWiw==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" } }, "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.4.1.tgz", + "integrity": "sha512-eN4oZeRdIKQeUPNN7OtH5XeYp349d8V9+gW6W0BmCfB2lTg8TDlG1Nj+Cyxpjl9DNF5CiKudTq72zr0dDSRbwA==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.18.3" } }, "@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.4.1.tgz", + "integrity": "sha512-yLulcgVASFUBJqrvS6Ssy0ko9teAfbu1ajH0r3Jjnqkpmmz2DJ1CS7tAktVa7THd4GHPGeKAVfxl+BbV/LZl+w==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" } }, "@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.4.1.tgz", + "integrity": "sha512-/47wa31jBa43ULqMO60vzcJigTG+ZAGNcyT5r6hFLrQzRzc8nIBjIOD8YWtnKM92r9NvlNv2wJhdamqyU0mntg==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.4.1" } }, "@types/bn.js": { @@ -1285,60 +8810,164 @@ } }, "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" } } }, + "@polkadot/rpc-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.8.2.tgz", + "integrity": "sha512-z9rOSmPvcS/YQSJIhM5F2uLyYZ6azll35V9xGs19hypO5wkwzLYByLbXQ7j1SFI267q/IIXVnri0yI6mtsQgzA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + } + }, + "@polkadot/rpc-core": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.8.2.tgz", + "integrity": "sha512-2MrIra52NYsvWv192sHM5b6dUXYYYzA8IB/rB7YF9Hm4aIDJbQJ/8uBivHZjMzyHsegxMDAe9WQSEkR0eagojQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-augment": "8.8.2", + "@polkadot/rpc-provider": "8.8.2", + "@polkadot/types": "8.8.2", + "@polkadot/util": "^9.4.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/rpc-provider": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.8.2.tgz", + "integrity": "sha512-LzzTTOxmqDndOcYdukYkpfEBq3GlbKAOb2pisKF4CtcGPcZ6bG0vktwx6qlWQ+Apmdu98rabt+iQPfwvOSg8sA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-support": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "@polkadot/x-fetch": "^9.4.1", + "@polkadot/x-global": "^9.4.1", + "@polkadot/x-ws": "^9.4.1", + "@substrate/connect": "0.7.5", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.6" + } + }, + "@polkadot/types": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.8.2.tgz", + "integrity": "sha512-O90MEfGbpPh/FmUAv0m3LcweZLWH6pmkODb1EGnwBHjZadYLCHFjdFO50yhoch9hh3+aEFmac6ma8swsy6IjAw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.4.1", + "@polkadot/types-augment": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1", + "@polkadot/util-crypto": "^9.4.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/types-augment": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.8.2.tgz", + "integrity": "sha512-WalxIz5Z0RPp2FS0cWvhBjYL7FKzDqkIBc+r/DN4vYRQzp5JBVNJjPWWUPtq9ucEl1wiaD2vJNG34rWIYVtObg==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + } + }, + "@polkadot/types-codec": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.8.2.tgz", + "integrity": "sha512-p3YZU8WZIMnnSxTKpoiCPi64T/sSR7dX7ObkpvUITulE6dzXUPUvkdSVS9YlTlb4R43pZ0iSyB18vpnlpq8LYQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" + } + }, + "@polkadot/types-create": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.8.2.tgz", + "integrity": "sha512-YMpiLCVFs2KKpvn3n24HahUzneaLKmjgwwd+QvFCooJClV/0YK22kwvlEteLO3aWPx2jy8ySSpUFn8kd/oWEAA==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/types-codec": "8.8.2", + "@polkadot/util": "^9.4.1" + } + }, + "@polkadot/types-known": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.8.2.tgz", + "integrity": "sha512-Ywa7v7K+UIYpQM3gbl6oA0zKiriX1OJfoYBxX7BcVLKW8cWmdy2xH9W6qNqxDWGAc2LXqNLhn0uzaRxq1niCCQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/networks": "^9.4.1", + "@polkadot/types": "8.8.2", + "@polkadot/types-codec": "8.8.2", + "@polkadot/types-create": "8.8.2", + "@polkadot/util": "^9.4.1" + } + }, "@polkadot/types-support": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-7.15.1.tgz", - "integrity": "sha512-FIK251ffVo+NaUXLlaJeB5OvT7idDd3uxaoBM6IwsS87rzt2CcWMyCbu0uX89AHZUhSviVx7xaBxfkGEqMePWA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.8.2.tgz", + "integrity": "sha512-z4yjN8odDgFFlhGBrJAeHX4YsUeprmBAzWDCJMBeL4C/E1yIG7RyzQryVJNb3m/galiX1Tzuuch4kqE/jABnfw==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "^8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.4.1" } }, "@polkadot/util": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-8.7.1.tgz", - "integrity": "sha512-XjY1bTo7V6OvOCe4yn8H2vifeuBciCy0gq0k5P1tlGUQLI/Yt0hvDmxcA0FEPtqg8CL+rYRG7WXGPVNjkrNvyQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-global": "8.7.1", - "@polkadot/x-textdecoder": "8.7.1", - "@polkadot/x-textencoder": "8.7.1", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.5.1.tgz", + "integrity": "sha512-cI2ar15vkoXjs//YNn1yT5eUdK7jF32XNw3Oc6YJ2qEpenwy30c3BUQJOiqW7J6UBYLYll5O5y0ejv6LQoSFBQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.5.1", + "@polkadot/x-global": "9.5.1", + "@polkadot/x-textdecoder": "9.5.1", + "@polkadot/x-textencoder": "9.5.1", "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", + "bn.js": "^5.2.1", "ip-regex": "^4.3.0" }, "dependencies": { - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", + "@polkadot/x-bigint": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.5.1.tgz", + "integrity": "sha512-rTp7j3KvCy8vANRoaW6j0pCQdLc/eed6uSRXoxh3z1buJhw460/Q/hJ0Bey6fyeNSDzIwFk4SGwf/Gzf+kS1vQ==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" } }, "@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.5.1.tgz", + "integrity": "sha512-bY0J3Tov5y4oZi8qB/UtoEYCSgo5sDiiOa3Wmgen09LfB4gXJhWFGJSmcZqHERXCdEcmZojdbHTvOGSeYM9U1w==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" } }, "@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.5.1.tgz", + "integrity": "sha512-zt121nqxiudMeZnanpnfWhCE0SOTcVRqn/atqO59us/yf6LMTf23mgd7P4795TgJwXOUcui4fhm/g/VcpsLq9Q==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" } }, "@types/bn.js": { @@ -1350,223 +8979,151 @@ } }, "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" } } }, "@polkadot/util-crypto": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-8.7.1.tgz", - "integrity": "sha512-TaSuJ2aNrB5sYK7YXszkEv24nYJKRFqjF2OrggoMg6uYxUAECvTkldFnhtgeizMweRMxJIBu6bMHlSIutbWgjw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@polkadot/networks": "8.7.1", - "@polkadot/util": "8.7.1", - "@polkadot/wasm-crypto": "^5.1.1", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-randomvalues": "8.7.1", - "@scure/base": "1.0.0", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.5.1.tgz", + "integrity": "sha512-4YwJJ2/mXx3PXTy4WLekQOo1MlDtQzYgTZsjOagi3Uz3Q/ITvS+/iu6eF/H6Tz0uEQjwX6t9tsMkM5FWk/XoGg==", + "requires": { + "@babel/runtime": "^7.18.3", + "@noble/hashes": "1.1.1", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.5.1", + "@polkadot/util": "9.5.1", + "@polkadot/wasm-crypto": "^6.1.1", + "@polkadot/x-bigint": "9.5.1", + "@polkadot/x-randomvalues": "9.5.1", + "@scure/base": "1.1.1", "ed2curve": "^0.3.0", "tweetnacl": "^1.0.3" }, "dependencies": { - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", + "@polkadot/networks": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.5.1.tgz", + "integrity": "sha512-1q9jm7NLk1ZMqFJL+kYkpn1phEO+N0d5LU81ropjYf0hC9boBAya4Zqvv3DwasPuLp6qaj4r0nrfzmkP5xHKZQ==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.5.1", + "@substrate/ss58-registry": "^1.22.0" } }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", + "@polkadot/x-bigint": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.5.1.tgz", + "integrity": "sha512-rTp7j3KvCy8vANRoaW6j0pCQdLc/eed6uSRXoxh3z1buJhw460/Q/hJ0Bey6fyeNSDzIwFk4SGwf/Gzf+kS1vQ==", "requires": { - "@babel/runtime": "^7.17.8" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" } } } }, + "@polkadot/wasm-bridge": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.1.1.tgz", + "integrity": "sha512-Cy0k00VCu+HWxie+nn9GWPlSPdiZl8Id8ulSGA2FKET0jIbffmOo4e1E2FXNucfR1UPEpqov5BCF9T5YxEXZDg==", + "requires": { + "@babel/runtime": "^7.17.9" + } + }, "@polkadot/wasm-crypto": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-4.6.1.tgz", - "integrity": "sha512-2wEftBDxDG+TN8Ah6ogtvzjdZdcF0mAjU4UNNOfpmkBCxQYZOrAHB8HXhzo3noSsKkLX7PDX57NxvJ9OhoTAjw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.1.1.tgz", + "integrity": "sha512-hv9RCbMYtgjCy7+FKZFnO2Afu/whax9sk6udnZqGRBRiwaNagtyliWZGrKNGvaXMIO0VyaY4jWUwSzUgPrLu1A==", "requires": { - "@babel/runtime": "^7.17.2", - "@polkadot/wasm-crypto-asmjs": "^4.6.1", - "@polkadot/wasm-crypto-wasm": "^4.6.1" + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-init": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1", + "@polkadot/wasm-util": "6.1.1" } }, "@polkadot/wasm-crypto-asmjs": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.6.1.tgz", - "integrity": "sha512-1oHQjz2oEO1kCIcQniOP+dZ9N2YXf2yCLHLsKaKSvfXiWaetVCaBNB8oIHIVYvuLnVc8qlMi66O6xc1UublHsw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.1.1.tgz", + "integrity": "sha512-gG4FStVumkyRNH7WcTB+hn3EEwCssJhQyi4B1BOUt+eYYmw9xJdzIhqjzSd9b/yF2e5sRaAzfnMj2srGufsE6A==", + "requires": { + "@babel/runtime": "^7.17.9" + } + }, + "@polkadot/wasm-crypto-init": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.1.1.tgz", + "integrity": "sha512-rbBm/9FOOUjISL4gGNokjcKy2X+Af6Chaet4zlabatpImtPIAK26B2UUBGoaRUnvl/w6K3+GwBL4LuBC+CvzFw==", "requires": { - "@babel/runtime": "^7.17.2" + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-bridge": "6.1.1", + "@polkadot/wasm-crypto-asmjs": "6.1.1", + "@polkadot/wasm-crypto-wasm": "6.1.1" } }, "@polkadot/wasm-crypto-wasm": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.6.1.tgz", - "integrity": "sha512-NI3JVwmLjrSYpSVuhu0yeQYSlsZrdpK41UC48sY3kyxXC71pi6OVePbtHS1K3xh3FFmDd9srSchExi3IwzKzMw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.1.1.tgz", + "integrity": "sha512-zkz5Ct4KfTBT+YNEA5qbsHhTV58/FAxDave8wYIOaW4TrBnFPPs+J0WBWlGFertgIhPkvjFnQC/xzRyhet9prg==", "requires": { - "@babel/runtime": "^7.17.2" + "@babel/runtime": "^7.17.9", + "@polkadot/wasm-util": "6.1.1" } }, - "@polkadot/x-bigint": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-8.7.1.tgz", - "integrity": "sha512-ClkhgdB/KqcAKk3zA6Qw8wBL6Wz67pYTPkrAtImpvoPJmR+l4RARauv+MH34JXMUNlNb3aUwqN6lq2Z1zN+mJg==", + "@polkadot/wasm-util": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.1.1.tgz", + "integrity": "sha512-DgpLoFXMT53UKcfZ8eT2GkJlJAOh89AWO+TP6a6qeZQpvXVe5f1yR45WQpkZlgZyUP+/19+kY56GK0pQxfslqg==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } + "@babel/runtime": "^7.17.9" } }, "@polkadot/x-fetch": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-8.7.1.tgz", - "integrity": "sha512-ygNparcalYFGbspXtdtZOHvNXZBkNgmNO+um9C0JYq74K5OY9/be93uyfJKJ8JcRJtOqBfVDsJpbiRkuJ1PRfg==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.5.1.tgz", + "integrity": "sha512-jMWpDVE4CyH+vVuONmvcKlJJnsRqmglmJTppsl+38JTnGL2FbELn2q92N8b5uTxmPP0lf+QTn1THXnkWvG7Ojw==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", - "@types/node-fetch": "^2.6.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1", + "@types/node-fetch": "^2.6.2", "node-fetch": "^2.6.7" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } } }, "@polkadot/x-global": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-6.11.1.tgz", - "integrity": "sha512-lsBK/e4KbjfieyRmnPs7bTiGbP/6EoCZz7rqD/voNS5qsJAaXgB9LR+ilubun9gK/TDpebyxgO+J19OBiQPIRw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.5.1.tgz", + "integrity": "sha512-asG5YlW1K3f4YjyuZ+HrbF9H5d78i5v9+7Bh+9gD+sVfB3KhqwVYZB+wzOaJkPp6lwUbBA9OBHFCVBqpR3wBJw==", "requires": { - "@babel/runtime": "^7.14.6" + "@babel/runtime": "^7.18.3" } }, "@polkadot/x-randomvalues": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-8.7.1.tgz", - "integrity": "sha512-njt17MlfN6yNyNEti7fL12lr5qM6A1aSGkWKVuqzc7XwSBesifJuW4km5u6r2gwhXjH2eHDv9SoQ7WXu8vrrkg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } - } - }, - "@polkadot/x-rxjs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-rxjs/-/x-rxjs-6.11.1.tgz", - "integrity": "sha512-zIciEmij7SUuXXg9g/683Irx6GogxivrQS2pgBir2DI/YZq+um52+Dqg1mqsEZt74N4KMTMnzAZAP6LJOBOMww==", - "requires": { - "@babel/runtime": "^7.14.6", - "rxjs": "^6.6.7" - }, - "dependencies": { - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "@polkadot/x-textdecoder": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-6.11.1.tgz", - "integrity": "sha512-DI1Ym2lyDSS/UhnTT2e9WutukevFZ0WGpzj4eotuG2BTHN3e21uYtYTt24SlyRNMrWJf5+TkZItmZeqs1nwAfQ==", - "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-global": "6.11.1" - } - }, - "@polkadot/x-textencoder": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-6.11.1.tgz", - "integrity": "sha512-8ipjWdEuqFo+R4Nxsc3/WW9CSEiprX4XU91a37ZyRVC4e9R1bmvClrpXmRQLVcAQyhRvG8DKOOtWbz8xM+oXKg==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.5.1.tgz", + "integrity": "sha512-NFvG//NsBjFP01dEtQATNPn5lSAZwh6jkkUXG2rHlgvW6k8nVJ0aJPvO5MlgItgS5Ry2F88AIiSsO3cfoTpszg==", "requires": { - "@babel/runtime": "^7.14.6", - "@polkadot/x-global": "6.11.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1" } }, "@polkadot/x-ws": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-8.7.1.tgz", - "integrity": "sha512-Mt0tcNzGXyKnN3DQ06alkv+JLtTfXWu6zSypFrrKHSQe3u79xMQ1nSicmpT3gWLhIa8YF+8CYJXMrqaXgCnDhw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.5.1.tgz", + "integrity": "sha512-d91Hf7p9+mWqSvx+lZr0f7eVkHXGzNqvQnXYAizU1HE1HHl5gLixPKoGldTKrYhvV30OwKKDJChKHzvQL6nVdQ==", "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.5.1", "@types/websocket": "^1.0.5", "websocket": "^1.0.34" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } } }, - "@polymathnetwork/polymesh-types": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@polymathnetwork/polymesh-types/-/polymesh-types-0.0.2.tgz", - "integrity": "sha512-wGexzpZ4IdrwReQGSH7ViCN+kyoKMQcQC5exATgeG+1cZxOtcbxp+1LWP9xTrnw7R5+PYWPzIl+f71gMkSDD5A==" - }, "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "@protobufjs/base64": { "version": "1.1.2", @@ -1578,354 +9135,62 @@ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" - }, - "@scure/base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", - "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@sindresorhus/slugify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", - "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", - "requires": { - "@sindresorhus/transliterate": "^0.1.1", - "escape-string-regexp": "^4.0.0" - } - }, - "@sindresorhus/transliterate": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", - "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", - "requires": { - "escape-string-regexp": "^2.0.0", - "lodash.deburr": "^4.1.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "@snowfork/snowbridge-types": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@snowfork/snowbridge-types/-/snowbridge-types-0.2.7.tgz", - "integrity": "sha512-Dz3OM8xvYhzL7XU/QOjgyPWZI4IgPKGByaJo6eZe3UMS6F7TLaFaZW1oYhQVTTahGWWAE6ZwwCuMkVh2FC/9bw==", - "requires": { - "@polkadot/api": "^7.2.1", - "@polkadot/keyring": "^8.2.2", - "@polkadot/types": "^7.2.1" - }, - "dependencies": { - "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - } - } - }, - "@sora-substrate/type-definitions": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sora-substrate/type-definitions/-/type-definitions-1.8.1.tgz", - "integrity": "sha512-VAisjedJPMzTRTaQ6APQOUUEb3mwVq7/WjkDz7RU7buBIsnDO1UYe2evNV7Qn4OnG16ncjg1lAmWnNi2hMmDyw==", - "requires": { - "@open-web3/orml-type-definitions": "^0.9.4-35" - }, - "dependencies": { - "@open-web3/orml-type-definitions": { - "version": "0.9.4-38", - "resolved": "https://registry.npmjs.org/@open-web3/orml-type-definitions/-/orml-type-definitions-0.9.4-38.tgz", - "integrity": "sha512-kV0++JlRLEf7Z1y+Jm+792zqx6Q7dzpGP73rJJmQrBaeTML5mQzu4veZ24TVtcLV6hsGjUU/ixrJODNj6CCuZQ==", - "requires": { - "lodash.merge": "^4.6.2" - } - } - } - }, - "@subsocial/types": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@subsocial/types/-/types-0.6.5.tgz", - "integrity": "sha512-2Xw4DA6Kyi7catmH6SzCDwzW74JVeKFNZDZN8k/2SEtGyjP1Xc7xRDA/T+DmizS4HAHlrNdjHANnNyuTLby3lQ==", - "requires": { - "@polkadot/types": "6.9.2", - "@polkadot/types-known": "6.9.2", - "@polkadot/types-support": "6.9.2", - "@subsocial/utils": "^0.6.5", - "cids": "^0.7.1" - }, - "dependencies": { - "@polkadot/networks": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-7.9.2.tgz", - "integrity": "sha512-4obI1RdW5/7TFwbwKA9oqw8aggVZ65JAUvIFMd2YmMC2T4+NiZLnok0WhRkhZkUnqjLIHXYNwq7Ho1i39dte0g==", - "requires": { - "@babel/runtime": "^7.16.3" - } - }, - "@polkadot/types": { - "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-6.9.2.tgz", - "integrity": "sha512-GOFlMFv9627uojTyQwyJyg3oWvI0nE7HONakPfXE3pMrnYfM+nBxrh3mH3ETHSyVj9QqrPNqenFmTUdCy0awGg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/util": "^7.9.2", - "@polkadot/util-crypto": "^7.9.2", - "rxjs": "^7.4.0" - } - }, - "@polkadot/types-known": { - "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-6.9.2.tgz", - "integrity": "sha512-u3mpiyG6xeLV9YVdVWzXMlFjB/1qjFedZWtE400c5/s/rWLWbF92JIkA9QV/K6wDbM7bz8xXO7iRj7LlNMU1Ew==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "^7.9.2", - "@polkadot/types": "6.9.2", - "@polkadot/util": "^7.9.2" - } - }, - "@polkadot/types-support": { - "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-6.9.2.tgz", - "integrity": "sha512-93LpTOj7VZ6fy9X0JWyko5RPeZuLXd76raRNRPTWMNPQHW/ZSu3MRyoRV2HHhkCc7u8poT+ntFzzAbNEvrbDGw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/util": "^7.9.2" - } - }, - "@polkadot/util": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-7.9.2.tgz", - "integrity": "sha512-6ABY6ErgkCsM4C6+X+AJSY4pBGwbKlHZmUtHftaiTvbaj4XuA4nTo3GU28jw8wY0Jh2cJZJvt6/BJ5GVkm5tBA==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-textdecoder": "7.9.2", - "@polkadot/x-textencoder": "7.9.2", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.12.0", - "camelcase": "^6.2.1", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-7.9.2.tgz", - "integrity": "sha512-nNwqUwP44eCH9jKKcPie+IHLKkg9LMe6H7hXo91hy3AtoslnNrT51tP3uAm5yllhLvswJfnAgnlHq7ybCgqeFw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "7.9.2", - "@polkadot/util": "7.9.2", - "@polkadot/wasm-crypto": "^4.4.1", - "@polkadot/x-randomvalues": "7.9.2", - "blakejs": "^1.1.1", - "bn.js": "^4.12.0", - "create-hash": "^1.2.0", - "ed2curve": "^0.3.0", - "elliptic": "^6.5.4", - "hash.js": "^1.1.7", - "js-sha3": "^0.8.0", - "micro-base": "^0.9.0", - "scryptsy": "^2.1.0", - "tweetnacl": "^1.0.3", - "xxhashjs": "^0.2.2" - } - }, - "@polkadot/x-global": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-7.9.2.tgz", - "integrity": "sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A==", - "requires": { - "@babel/runtime": "^7.16.3" - } - }, - "@polkadot/x-randomvalues": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-7.9.2.tgz", - "integrity": "sha512-svQfG31yCXf6yVyIgP0NgCzEy7oc3Lw054ZspkaqjOivxYdrXaf5w3JSSUyM/MRjI2+nk+B/EyJoMYcfSwTfsQ==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-7.9.2.tgz", - "integrity": "sha512-wfwbSHXPhrOAl12QvlIOGNkMH/N/h8PId2ytIjvM/8zPPFB5Il6DWSFLtVapOGEpIFjEWbd5t8Td4pHBVXIEbg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - } - }, - "@polkadot/x-textencoder": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-7.9.2.tgz", - "integrity": "sha512-A19wwYINuZwU2dUyQ/mMzB0ISjyfc4cISfL4zCMUAVgj7xVoXMYV2GfjNdMpA8Wsjch3su6pxLbtJ2wU03sRTQ==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - } - } - }, - "@subsocial/utils": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@subsocial/utils/-/utils-0.6.7.tgz", - "integrity": "sha512-A7vF7L7nXtiSA3jdprgKKY67czifslaktZ9Jg7T772xl38wB5zW097DaUETliJcHGkUvL0nc9yJpwsppuk5ZUg==", - "requires": { - "@polkadot/util-crypto": "^8.4.1", - "@sindresorhus/slugify": "^1.1.0", - "bignumber.js": "^9.0.1", - "bn.js": "^5.1.1", - "chalk": "^3.0.0", - "dayjs": "^1.10.7", - "lodash.isempty": "^4.4.0", - "lodash.memoize": "^4.1.2", - "lodash.truncate": "^4.4.2", - "loglevel": "^1.7.0", - "loglevel-plugin-prefix": "^0.8.4", - "remark": "^13.0.0", - "remark-gfm": "^1.0.0", - "remark-html": "^13.0.1", - "strip-markdown": "^4.0.0" - }, - "dependencies": { - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - } + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, "@substrate/connect": { - "version": "0.7.0-alpha.0", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.0-alpha.0.tgz", - "integrity": "sha512-fvO7w++M8R95R/pGJFW9+cWOt8OYnnTfgswxtlPqSgzqX4tta8xcNQ51crC72FcL5agwSGkA1gc2/+eyTj7O8A==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.5.tgz", + "integrity": "sha512-sdAZ6IGuTNxRGlH/O+6IaXvkYzZFwMK03VbQMgxUzry9dz1+JzyaNf8iOTVHxhMIUZc0h0E90JQz/hNiUYPlUw==", "requires": { "@substrate/connect-extension-protocol": "^1.0.0", - "@substrate/smoldot-light": "0.6.8", + "@substrate/smoldot-light": "0.6.16", "eventemitter3": "^4.0.7" } }, @@ -1935,9 +9200,9 @@ "integrity": "sha512-nFVuKdp71hMd/MGlllAOh+a2hAqt8m6J2G0aSsS/RcALZexxF9jodbFc62ni8RDtJboeOfXAHhenYOANvJKPIg==" }, "@substrate/smoldot-light": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.8.tgz", - "integrity": "sha512-9lVwbG6wrtss0sd6013BJGe4WN4taujsGG49pwyt1Lj36USeL2Sb164TTUxmZF/g2NQEqDPwPROBdekQ2gFmgg==", + "version": "0.6.16", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.16.tgz", + "integrity": "sha512-Ej0ZdNPTW0EXbp45gv/5Kt/JV+c9cmRZRYAXg+EALxXPm0hW9h2QdVLm61A2PAskOGptW4wnJ1WzzruaenwAXQ==", "requires": { "buffer": "^6.0.1", "pako": "^2.0.4", @@ -1956,35 +9221,25 @@ } }, "@substrate/ss58-registry": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.17.0.tgz", - "integrity": "sha512-YdQOxCtEZLnYZFg/zSzfROYtvIs5+iLD7p/VHoll7AVEhrPAmxgF5ggMDB2Dass7dfwABVx7heATbPFNg95Q8w==" + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.22.0.tgz", + "integrity": "sha512-IKqrPY0B3AeIXEc5/JGgEhPZLy+SmVyQf+k0SIGcNSTqt1GLI3gQFEOFwSScJdem+iYZQUrn6YPPxC3TpdSC3A==" }, "@substrate/txwrapper-core": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/@substrate/txwrapper-core/-/txwrapper-core-1.5.9.tgz", - "integrity": "sha512-TW/l33lcd2GkkG0Sf8oNpDavIGLDYXwViL7ly3CRfNDpGMEJtrLKJ0aG5FXg40XfARt3sIqHHzsGmv3O9huzQw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@substrate/txwrapper-core/-/txwrapper-core-3.1.2.tgz", + "integrity": "sha512-kZbduyjiAnH4hGIQiD2RA2qgWZ+x+0vm15hAIdQhFzxOXXgkiKmEV4zygErqbYBi0nAkHBLa55JlNfjp7LnMKw==", "requires": { - "@polkadot/api": "^7.14.3", + "@polkadot/api": "8.8.2", "memoizee": "0.4.15" } }, - "@substrate/txwrapper-registry": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/@substrate/txwrapper-registry/-/txwrapper-registry-1.5.9.tgz", - "integrity": "sha512-BTfhmkzg4AHsV8zYD2W9qT7T5Rd3C9SUH2U5UO9OYmmrwhVYXIIL7bCQXKo17Rysj3c/OXxy1Da8L3BePNDIlQ==", - "requires": { - "@polkadot/apps-config": "^0.110.1", - "@polkadot/networks": "^8.7.1", - "@substrate/txwrapper-core": "^1.5.9" - } - }, "@substrate/txwrapper-substrate": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/@substrate/txwrapper-substrate/-/txwrapper-substrate-1.5.9.tgz", - "integrity": "sha512-8jjPT8PD4DCB4MqhrYU1Cjdz/Mz5Qs2Nk3PMK0syZ+eDYbq7tUSOIXmFcUg0KlYUppr7xrDaVv9x0fxvHZPCcQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@substrate/txwrapper-substrate/-/txwrapper-substrate-3.1.2.tgz", + "integrity": "sha512-2yj/HIubPOV+27Ss0f+XwkAfh61sF316XZwCb/cWfqFy1+/T5yfewjeNj+G5KOT9IirFr+27umqzQ6quz1Klpg==", "requires": { - "@substrate/txwrapper-core": "^1.5.9" + "@substrate/txwrapper-core": "^3.1.2" } }, "@szmarczak/http-timer": { @@ -1996,24 +9251,24 @@ } }, "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" }, "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" }, "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" }, "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" }, "@types/bn.js": { "version": "4.11.6", @@ -2037,17 +9292,9 @@ } }, "@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/mocha": { "version": "9.1.0", @@ -2055,14 +9302,14 @@ "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==" }, "@types/node": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", - "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==" + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" }, "@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "requires": { "@types/node": "*", "form-data": "^3.0.0" @@ -2084,10 +9331,11 @@ "@types/node": "*" } }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + "@types/tcp-port-used": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/tcp-port-used/-/tcp-port-used-1.0.1.tgz", + "integrity": "sha512-6pwWTx8oUtWvsiZUCrhrK/53MzKVLnuNSSaZILPy3uMes9QnTrLMar9BDlJArbMOjDcjb3QXFk6Rz8qmmuySZw==", + "dev": true }, "@types/websocket": { "version": "1.0.5", @@ -2102,26 +9350,19 @@ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" }, - "@unique-nft/types": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@unique-nft/types/-/types-0.3.1.tgz", - "integrity": "sha512-RtrHq8vSzhs02V8Yt2WnbNzTWjcXtPIeqZWcppl8IFl1Wy39sM7jsMHN2B9kIFsMoEZxf3BRCLp3j4JNElTTDQ==" - }, - "@zeitgeistpm/type-defs": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@zeitgeistpm/type-defs/-/type-defs-0.4.5.tgz", - "integrity": "sha512-tmF9EWO3Rw8Oxd5Q92VzezMV2ZlP9sJqxCfBw/yVwtZPsViKwf0s7rb5pVm5+iAY6gOMgtrMFQ8Ttpavd6fd5w==" - }, - "@zeroio/type-definitions": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/@zeroio/type-definitions/-/type-definitions-0.0.14.tgz", - "integrity": "sha512-OkqtOLPkR7oqWLrsgRKhzyLZVFLnNLfEF3DMXH+Rpn1fMNMDq/fOY9pXt55B+flBc62saN73CfOTy3hMSVZFTA==" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abstract-leveldown": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", + "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", + "requires": { + "xtend": "~4.0.0" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -2132,9 +9373,9 @@ } }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" }, "acorn-walk": { "version": "8.2.0", @@ -2236,6 +9477,14 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", @@ -2261,11 +9510,6 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2295,7 +9539,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" } } }, @@ -2383,15 +9627,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } } } }, @@ -2466,9 +9701,9 @@ }, "dependencies": { "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" } } }, @@ -2489,9 +9724,9 @@ }, "dependencies": { "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" } } }, @@ -2593,10 +9828,44 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + "chacha": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chacha/-/chacha-2.1.0.tgz", + "integrity": "sha512-FhVtqaZOiHlOKUkAWfDlJ+oe/O8iPQbCC0pFXJqphr4YQBCZPXa8Mv3j35+W4eWFWCoTUcW2u5IWDDkknygvVA==", + "requires": { + "chacha-native": "^2.0.0", + "inherits": "^2.0.1", + "readable-stream": "^1.0.33" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "chacha-native": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chacha-native/-/chacha-native-2.0.3.tgz", + "integrity": "sha512-93h+osfjhR2sMHAaapTLlL/COoBPEZ6upicPBQ4GfUyadoMb8t9/M0PKK8kC+F+DEA/Oy3Kg9w3HzY3J1foP3g==", + "optional": true, + "requires": { + "bindings": "^1.2.1", + "inherits": "^2.0.1", + "nan": "^2.4.0" + } }, "chai": { "version": "4.3.6", @@ -2621,34 +9890,14 @@ } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -2749,11 +9998,6 @@ "delayed-stream": "~1.0.0" } }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, "command-exists": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", @@ -2915,11 +10159,6 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=" - }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -2937,15 +10176,10 @@ "assert-plus": "^1.0.0" } }, - "dayjs": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.0.tgz", - "integrity": "sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==" - }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" }, @@ -2998,12 +10232,22 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "deferred-leveldown": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz", + "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==", + "requires": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" + } + }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "delayed-stream": { @@ -3109,6 +10353,18 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "encoding-down": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-5.0.4.tgz", + "integrity": "sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==", + "requires": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3122,31 +10378,42 @@ "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, "es-to-primitive": { @@ -3236,7 +10503,7 @@ "js-sha3": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" } } }, @@ -3270,6 +10537,25 @@ } } }, + "eth-object": { + "version": "git+ssh://git@github.com/aurora-is-near/eth-object.git#383b6ea68c7050bea4cab6950c1d5a7fa553e72b", + "from": "eth-object@github:aurora-is-near/eth-object#master", + "requires": { + "eth-util-lite": "near/eth-util-lite#master", + "ethereumjs-util": "^7.0.3", + "web3": "^1.2.9" + } + }, + "eth-util-lite": { + "version": "git+ssh://git@github.com/near/eth-util-lite.git#ae0210cbe127b4d43ba01fd7cd4898d1a3f6c96a", + "from": "eth-util-lite@1.0.1", + "requires": { + "bn.js": "^4.11.8", + "js-sha3": "^0.8.0", + "rlp": "^2.2.3", + "safe-buffer": "^5.1.2" + } + }, "ethereum-bloom-filters": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", @@ -3321,9 +10607,9 @@ } }, "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" } } }, @@ -3376,10 +10662,19 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", @@ -3620,6 +10915,27 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3754,24 +11070,32 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-to-string-tag-x": { "version": "1.4.1", @@ -3813,41 +11137,6 @@ "minimalistic-assert": "^1.0.1" } }, - "hast-util-is-element": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", - "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==" - }, - "hast-util-sanitize": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-3.0.2.tgz", - "integrity": "sha512-+2I0x2ZCAyiZOO/sb4yNLFmdwPBnyJ4PBkVTUMKMqBwYNA+lXSgOmoRXlJFazoyid9QPogRRKgKhVEodv181sA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "hast-util-to-html": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-7.1.3.tgz", - "integrity": "sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==", - "requires": { - "ccount": "^1.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-is-element": "^1.0.0", - "hast-util-whitespace": "^1.0.0", - "html-void-elements": "^1.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0", - "stringify-entities": "^3.0.1", - "unist-util-is": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "hast-util-whitespace": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", - "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==" - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3863,11 +11152,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -3900,14 +11184,6 @@ "sshpk": "^1.7.0" } }, - "i18next": { - "version": "21.6.14", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.14.tgz", - "integrity": "sha512-XL6WyD+xlwQwbieXRlXhKWoLb/rkch50/rA+vl6untHnJ+aYnkQ0YDZciTWE78PPhOpbi2gR0LTJCJpiAhA+uQ==", - "requires": { - "@babel/runtime": "^7.17.2" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3927,7 +11203,7 @@ "punycode": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" } } }, @@ -3941,6 +11217,11 @@ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -3990,20 +11271,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -4038,11 +11305,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -4064,11 +11326,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4105,11 +11362,6 @@ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, "is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -4135,9 +11387,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { "has-tostringtag": "^1.0.0" } @@ -4182,9 +11434,12 @@ "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "1.1.0", @@ -4257,10 +11512,15 @@ "is-url": "^1.2.4" } }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "iso-random-stream": { "version": "2.0.2", @@ -4326,7 +11586,7 @@ "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "requires": { "graceful-fs": "^4.1.6" } @@ -4381,6 +11641,139 @@ "package-json": "^6.3.0" } }, + "level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "requires": { + "buffer": "^5.6.0" + } + }, + "level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "requires": { + "errno": "~0.1.1" + } + }, + "level-iterator-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz", + "integrity": "sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "level-mem": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-3.0.1.tgz", + "integrity": "sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==", + "requires": { + "level-packager": "~4.0.0", + "memdown": "~3.0.0" + } + }, + "level-packager": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-4.0.1.tgz", + "integrity": "sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q==", + "requires": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + } + }, + "level-ws": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-1.0.0.tgz", + "integrity": "sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.8", + "xtend": "^4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "levelup": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-3.1.1.tgz", + "integrity": "sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==", + "requires": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + } + }, "libp2p-crypto": { "version": "0.20.0", "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", @@ -4412,36 +11805,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.deburr": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", - "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" - }, - "lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -4449,39 +11812,13 @@ "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } } }, - "loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" - }, - "loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==" - }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, - "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" - }, "loupe": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.2.tgz", @@ -4511,6 +11848,11 @@ "es5-ext": "~0.10.2" } }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -4531,14 +11873,6 @@ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "requires": { - "repeat-string": "^1.0.0" - } - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -4549,126 +11883,31 @@ "safe-buffer": "^5.1.2" } }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-find-and-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", - "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", - "requires": { - "escape-string-regexp": "^4.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "mdast-util-gfm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", - "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", - "requires": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", - "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", - "requires": { - "ccount": "^1.0.0", - "mdast-util-find-and-replace": "^1.1.0", - "micromark": "^2.11.3" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", - "requires": { - "mdast-util-to-markdown": "^0.6.0" - } - }, - "mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", - "requires": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", - "requires": { - "mdast-util-to-markdown": "~0.6.0" - } - }, - "mdast-util-to-hast": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz", - "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "requires": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memdown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-3.0.0.tgz", + "integrity": "sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA==", + "requires": { + "abstract-leveldown": "~5.0.0", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "memoizee": { "version": "0.4.15", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", @@ -4701,75 +11940,41 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merkle-patricia-tree": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz", + "integrity": "sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ==", + "requires": { + "async": "^2.6.1", + "ethereumjs-util": "^5.2.0", + "level-mem": "^3.0.1", + "level-ws": "^1.0.0", + "readable-stream": "^3.0.6", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "requires": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + } + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micro-base": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/micro-base/-/micro-base-0.9.0.tgz", - "integrity": "sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg==" - }, - "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "micromark-extension-gfm": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", - "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", - "requires": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.5", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", - "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", - "requires": { - "micromark": "~2.11.3" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", - "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", - "requires": { - "micromark": "~2.11.0" - } - }, - "micromark-extension-gfm-table": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", - "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", - "requires": { - "micromark": "~2.11.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==" - }, - "micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", - "requires": { - "micromark": "~2.11.0" - } - }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -4821,17 +12026,17 @@ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "2.9.0", @@ -4858,9 +12063,12 @@ } }, "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } }, "mkdirp-promise": { "version": "5.0.1", @@ -4871,36 +12079,50 @@ } }, "mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -4922,298 +12144,23 @@ "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" }, "mock-socket": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.2.tgz", - "integrity": "sha512-XKZkCnQ9ISOlTnaPg4LYYSMj7+6i78HyadYzLA5JM4465ibLdjappZD9Csnqc3Tfzep/eEK/LCJ29BTaLHoB1A==" + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==" }, "moonbeam-types-bundle": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/moonbeam-types-bundle/-/moonbeam-types-bundle-2.0.3.tgz", - "integrity": "sha512-6ytT1f04GvoRiycQ3kpNmQPbZ5d+Ur/sYN6R+xCqMecXISB2jiYds6Gd2eQPlNtevJzihuFyqFQZDNNdDJDWaA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/moonbeam-types-bundle/-/moonbeam-types-bundle-2.0.7.tgz", + "integrity": "sha512-YU/q/fS1jj2bK7+egeN7fQ5l5UqWQtRBZWekywQyskbpSNs/IlBdgo3uZixC5OiB4Vmtk+XXoIlHifgHgoFrnA==", "requires": { - "@polkadot/api": "^6.11.1", - "@polkadot/keyring": "^7.8.2", - "@polkadot/types": "^6.11.1", - "typescript": "^4.5.2" - }, - "dependencies": { - "@polkadot/api": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-6.12.1.tgz", - "integrity": "sha512-RVdTiA2WaEvproM3i6E9TKS1bfXpPd9Ly9lUG/kVLaspjKoIot9DJUDTl97TJ+7xr8LXGbXqm448Ud0hsEBV8Q==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/api-derive": "6.12.1", - "@polkadot/keyring": "^8.1.2", - "@polkadot/rpc-core": "6.12.1", - "@polkadot/rpc-provider": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/types-known": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "eventemitter3": "^4.0.7", - "rxjs": "^7.4.0" - }, - "dependencies": { - "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - } - } - }, - "@polkadot/api-derive": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-6.12.1.tgz", - "integrity": "sha512-5LOVlG5EBCT+ytY6aHmQ4RdEWZovZQqRoc6DLd5BLhkR7BFTHKSkLQW+89so8jd0zEtmSXBVPPnsrXS8joM35Q==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/api": "6.12.1", - "@polkadot/rpc-core": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "rxjs": "^7.4.0" - } - }, - "@polkadot/keyring": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-7.9.2.tgz", - "integrity": "sha512-6UGoIxhiTyISkYEZhUbCPpgVxaneIfb/DBVlHtbvaABc8Mqh1KuqcTIq19Mh9wXlBuijl25rw4lUASrE/9sBqg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/util": "7.9.2", - "@polkadot/util-crypto": "7.9.2" - }, - "dependencies": { - "@polkadot/networks": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-7.9.2.tgz", - "integrity": "sha512-4obI1RdW5/7TFwbwKA9oqw8aggVZ65JAUvIFMd2YmMC2T4+NiZLnok0WhRkhZkUnqjLIHXYNwq7Ho1i39dte0g==", - "requires": { - "@babel/runtime": "^7.16.3" - } - }, - "@polkadot/util": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-7.9.2.tgz", - "integrity": "sha512-6ABY6ErgkCsM4C6+X+AJSY4pBGwbKlHZmUtHftaiTvbaj4XuA4nTo3GU28jw8wY0Jh2cJZJvt6/BJ5GVkm5tBA==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-textdecoder": "7.9.2", - "@polkadot/x-textencoder": "7.9.2", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.12.0", - "camelcase": "^6.2.1", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-7.9.2.tgz", - "integrity": "sha512-nNwqUwP44eCH9jKKcPie+IHLKkg9LMe6H7hXo91hy3AtoslnNrT51tP3uAm5yllhLvswJfnAgnlHq7ybCgqeFw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "7.9.2", - "@polkadot/util": "7.9.2", - "@polkadot/wasm-crypto": "^4.4.1", - "@polkadot/x-randomvalues": "7.9.2", - "blakejs": "^1.1.1", - "bn.js": "^4.12.0", - "create-hash": "^1.2.0", - "ed2curve": "^0.3.0", - "elliptic": "^6.5.4", - "hash.js": "^1.1.7", - "js-sha3": "^0.8.0", - "micro-base": "^0.9.0", - "scryptsy": "^2.1.0", - "tweetnacl": "^1.0.3", - "xxhashjs": "^0.2.2" - } - }, - "@polkadot/wasm-crypto": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-4.6.1.tgz", - "integrity": "sha512-2wEftBDxDG+TN8Ah6ogtvzjdZdcF0mAjU4UNNOfpmkBCxQYZOrAHB8HXhzo3noSsKkLX7PDX57NxvJ9OhoTAjw==", - "requires": { - "@babel/runtime": "^7.17.2", - "@polkadot/wasm-crypto-asmjs": "^4.6.1", - "@polkadot/wasm-crypto-wasm": "^4.6.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.6.1.tgz", - "integrity": "sha512-1oHQjz2oEO1kCIcQniOP+dZ9N2YXf2yCLHLsKaKSvfXiWaetVCaBNB8oIHIVYvuLnVc8qlMi66O6xc1UublHsw==", - "requires": { - "@babel/runtime": "^7.17.2" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.6.1.tgz", - "integrity": "sha512-NI3JVwmLjrSYpSVuhu0yeQYSlsZrdpK41UC48sY3kyxXC71pi6OVePbtHS1K3xh3FFmDd9srSchExi3IwzKzMw==", - "requires": { - "@babel/runtime": "^7.17.2" - } - }, - "@polkadot/x-global": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-7.9.2.tgz", - "integrity": "sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A==", - "requires": { - "@babel/runtime": "^7.16.3" - } - }, - "@polkadot/x-randomvalues": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-7.9.2.tgz", - "integrity": "sha512-svQfG31yCXf6yVyIgP0NgCzEy7oc3Lw054ZspkaqjOivxYdrXaf5w3JSSUyM/MRjI2+nk+B/EyJoMYcfSwTfsQ==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - } - } - } - }, - "@polkadot/rpc-core": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-6.12.1.tgz", - "integrity": "sha512-Hb08D9zho3SB1UNlUCmG5q0gdgbOx25JKGLDfSYpD/wtD0Y1Sf2X5cfgtMoSYE3USWiRdCu4BxQkXTiRjPjzJg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/rpc-provider": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "rxjs": "^7.4.0" - } - }, - "@polkadot/rpc-provider": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-6.12.1.tgz", - "integrity": "sha512-uUHD3fLTOeZYWJoc6DQlhz+MJR33rVelasV+OxFY2nSD9MSNXRwQh+9UKDQBnyxw5B4BZ2QaEGfucDeavXmVDw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "@polkadot/x-fetch": "^8.1.2", - "@polkadot/x-global": "^8.1.2", - "@polkadot/x-ws": "^8.1.2", - "eventemitter3": "^4.0.7" - } - }, - "@polkadot/types": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-6.12.1.tgz", - "integrity": "sha512-O37cAGUL0xiXTuO3ySweVh0OuFUD6asrd0TfuzGsEp3jAISWdElEHV5QDiftWq8J9Vf8BMgTcP2QLFbmSusxqA==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/types-known": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "rxjs": "^7.4.0" - } - }, - "@polkadot/types-known": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-6.12.1.tgz", - "integrity": "sha512-Z8bHpPQy+mqUm0uR1tai6ra0bQIoPmgRcGFYUM+rJtW1kx/6kZLh10HAICjLpPeA1cwLRzaxHRDqH5MCU6OgXw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "^8.1.2", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-textdecoder": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-7.9.2.tgz", - "integrity": "sha512-wfwbSHXPhrOAl12QvlIOGNkMH/N/h8PId2ytIjvM/8zPPFB5Il6DWSFLtVapOGEpIFjEWbd5t8Td4pHBVXIEbg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-7.9.2.tgz", - "integrity": "sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A==", - "requires": { - "@babel/runtime": "^7.16.3" - } - } - } - }, - "@polkadot/x-textencoder": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-7.9.2.tgz", - "integrity": "sha512-A19wwYINuZwU2dUyQ/mMzB0ISjyfc4cISfL4zCMUAVgj7xVoXMYV2GfjNdMpA8Wsjch3su6pxLbtJ2wU03sRTQ==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-7.9.2.tgz", - "integrity": "sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A==", - "requires": { - "@babel/runtime": "^7.16.3" - } - } - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - } + "@polkadot/api": "^8.8.2", + "typescript": "^4.7.4" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "multibase": { "version": "0.6.1", @@ -5234,9 +12181,9 @@ } }, "multiformats": { - "version": "9.6.4", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.4.tgz", - "integrity": "sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==" + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.6.5.tgz", + "integrity": "sha512-vMwf/FUO+qAPvl3vlSZEgEVFY/AxeZq5yg761ScF3CZsXgmTi/HGkicUiNN0CI4PW8FiY2P0OLklOcmQjdQJhw==" }, "multihashes": { "version": "0.4.21", @@ -5270,9 +12217,9 @@ "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" }, "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" }, "negotiator": { "version": "0.6.2", @@ -5282,7 +12229,7 @@ "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + "integrity": "sha512-mc/caHeUcdjnC/boPWJefDr4KUIWQNv+tlnFnJd38QMou86QtxQzBJfxgGRzvx8jazYRqrVlaHarfO72uNxPOg==" }, "noble-ed25519": { "version": "1.2.6", @@ -5295,13 +12242,13 @@ "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==" }, "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", + "version": "13.2.7", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.7.tgz", + "integrity": "sha512-R6NUw7RIPtKwgK7jskuKoEi4VFMqIHtV2Uu9K/Uegc4TA5cqe+oNMYslZcUmnVNQCTG6wcSqUBaGTDd7sq5srg==", "requires": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", + "lodash": "^4.17.21", "propagate": "^2.0.0" } }, @@ -5356,7 +12303,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "ms": { "version": "2.1.3", @@ -5412,7 +12359,7 @@ "bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" } } }, @@ -5550,19 +12497,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, "parse-headers": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", @@ -5637,10 +12571,10 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "polkadot-launch": { - "version": "git+https://github.com/PureStake/polkadot-launch.git#0dbb67f6d5229c69c0cd930d5f918e7722455b1d", - "from": "git+https://github.com/PureStake/polkadot-launch.git#crystalin-para-id", + "version": "git+ssh://git@github.com/PureStake/polkadot-launch.git#ff3014afde11ca55c1f84df79c86b50acb46cb36", + "from": "polkadot-launch@github:PureStake/polkadot-launch#crystalin-para-id", "requires": { - "@polkadot/api": "^7.6.2-5", + "@polkadot/api": "^8.8.2", "@types/chai": "^4.2.22", "@types/mocha": "^9.0.0", "chai": "^4.3.4", @@ -5667,10 +12601,25 @@ "wrap-ansi": "^6.2.0" } }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "find-up": { "version": "4.1.0", @@ -5681,13 +12630,141 @@ "path-exists": "^4.0.0" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" }, "p-limit": { "version": "2.3.0", @@ -5705,6 +12782,19 @@ "p-limit": "^2.2.0" } }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -5749,325 +12839,10 @@ } } }, - "pontem-types-bundle": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/pontem-types-bundle/-/pontem-types-bundle-1.0.15.tgz", - "integrity": "sha512-PXQTwvb6QB5VW3UILU9w7du55j7hd2mZspfLPcum7XEwxhVhzH22dygd3waSNEhybTgcsV40XB4d3OIdwgaLvw==", - "requires": { - "@polkadot/keyring": "^7.4.1", - "@polkadot/types": "^6.0.5", - "typescript": "^4.4.3" - }, - "dependencies": { - "@polkadot/keyring": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-7.9.2.tgz", - "integrity": "sha512-6UGoIxhiTyISkYEZhUbCPpgVxaneIfb/DBVlHtbvaABc8Mqh1KuqcTIq19Mh9wXlBuijl25rw4lUASrE/9sBqg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/util": "7.9.2", - "@polkadot/util-crypto": "7.9.2" - } - }, - "@polkadot/networks": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-7.9.2.tgz", - "integrity": "sha512-4obI1RdW5/7TFwbwKA9oqw8aggVZ65JAUvIFMd2YmMC2T4+NiZLnok0WhRkhZkUnqjLIHXYNwq7Ho1i39dte0g==", - "requires": { - "@babel/runtime": "^7.16.3" - } - }, - "@polkadot/types": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-6.12.1.tgz", - "integrity": "sha512-O37cAGUL0xiXTuO3ySweVh0OuFUD6asrd0TfuzGsEp3jAISWdElEHV5QDiftWq8J9Vf8BMgTcP2QLFbmSusxqA==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/types-known": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "rxjs": "^7.4.0" - }, - "dependencies": { - "@polkadot/networks": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-8.7.1.tgz", - "integrity": "sha512-8xAmhDW0ry5EKcEjp6VTuwoTm0DdDo/zHsmx88P6sVL87gupuFsL+B6TrsYLl8GcaqxujwrOlKB+CKTUg7qFKg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@substrate/ss58-registry": "^1.17.0" - } - }, - "@polkadot/util": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-8.7.1.tgz", - "integrity": "sha512-XjY1bTo7V6OvOCe4yn8H2vifeuBciCy0gq0k5P1tlGUQLI/Yt0hvDmxcA0FEPtqg8CL+rYRG7WXGPVNjkrNvyQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-global": "8.7.1", - "@polkadot/x-textdecoder": "8.7.1", - "@polkadot/x-textencoder": "8.7.1", - "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-8.7.1.tgz", - "integrity": "sha512-TaSuJ2aNrB5sYK7YXszkEv24nYJKRFqjF2OrggoMg6uYxUAECvTkldFnhtgeizMweRMxJIBu6bMHlSIutbWgjw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@polkadot/networks": "8.7.1", - "@polkadot/util": "8.7.1", - "@polkadot/wasm-crypto": "^5.1.1", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-randomvalues": "8.7.1", - "@scure/base": "1.0.0", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-randomvalues": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-8.7.1.tgz", - "integrity": "sha512-njt17MlfN6yNyNEti7fL12lr5qM6A1aSGkWKVuqzc7XwSBesifJuW4km5u6r2gwhXjH2eHDv9SoQ7WXu8vrrkg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - } - } - }, - "@polkadot/types-known": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-6.12.1.tgz", - "integrity": "sha512-Z8bHpPQy+mqUm0uR1tai6ra0bQIoPmgRcGFYUM+rJtW1kx/6kZLh10HAICjLpPeA1cwLRzaxHRDqH5MCU6OgXw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "^8.1.2", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2" - }, - "dependencies": { - "@polkadot/networks": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-8.7.1.tgz", - "integrity": "sha512-8xAmhDW0ry5EKcEjp6VTuwoTm0DdDo/zHsmx88P6sVL87gupuFsL+B6TrsYLl8GcaqxujwrOlKB+CKTUg7qFKg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@substrate/ss58-registry": "^1.17.0" - } - }, - "@polkadot/util": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-8.7.1.tgz", - "integrity": "sha512-XjY1bTo7V6OvOCe4yn8H2vifeuBciCy0gq0k5P1tlGUQLI/Yt0hvDmxcA0FEPtqg8CL+rYRG7WXGPVNjkrNvyQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-global": "8.7.1", - "@polkadot/x-textdecoder": "8.7.1", - "@polkadot/x-textencoder": "8.7.1", - "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - } - } - }, - "@polkadot/util": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-7.9.2.tgz", - "integrity": "sha512-6ABY6ErgkCsM4C6+X+AJSY4pBGwbKlHZmUtHftaiTvbaj4XuA4nTo3GU28jw8wY0Jh2cJZJvt6/BJ5GVkm5tBA==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-textdecoder": "7.9.2", - "@polkadot/x-textencoder": "7.9.2", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.12.0", - "camelcase": "^6.2.1", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-7.9.2.tgz", - "integrity": "sha512-nNwqUwP44eCH9jKKcPie+IHLKkg9LMe6H7hXo91hy3AtoslnNrT51tP3uAm5yllhLvswJfnAgnlHq7ybCgqeFw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "7.9.2", - "@polkadot/util": "7.9.2", - "@polkadot/wasm-crypto": "^4.4.1", - "@polkadot/x-randomvalues": "7.9.2", - "blakejs": "^1.1.1", - "bn.js": "^4.12.0", - "create-hash": "^1.2.0", - "ed2curve": "^0.3.0", - "elliptic": "^6.5.4", - "hash.js": "^1.1.7", - "js-sha3": "^0.8.0", - "micro-base": "^0.9.0", - "scryptsy": "^2.1.0", - "tweetnacl": "^1.0.3", - "xxhashjs": "^0.2.2" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-global": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-7.9.2.tgz", - "integrity": "sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A==", - "requires": { - "@babel/runtime": "^7.16.3" - } - }, - "@polkadot/x-randomvalues": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-7.9.2.tgz", - "integrity": "sha512-svQfG31yCXf6yVyIgP0NgCzEy7oc3Lw054ZspkaqjOivxYdrXaf5w3JSSUyM/MRjI2+nk+B/EyJoMYcfSwTfsQ==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-7.9.2.tgz", - "integrity": "sha512-wfwbSHXPhrOAl12QvlIOGNkMH/N/h8PId2ytIjvM/8zPPFB5Il6DWSFLtVapOGEpIFjEWbd5t8Td4pHBVXIEbg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - } - }, - "@polkadot/x-textencoder": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-7.9.2.tgz", - "integrity": "sha512-A19wwYINuZwU2dUyQ/mMzB0ISjyfc4cISfL4zCMUAVgj7xVoXMYV2GfjNdMpA8Wsjch3su6pxLbtJ2wU03sRTQ==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/x-global": "7.9.2" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - } - } - }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "printj": { "version": "1.3.1", @@ -6079,23 +12854,20 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "propagate": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, "protobufjs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz", - "integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==", + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -6121,6 +12893,11 @@ "ipaddr.js": "1.9.1" } }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -6181,6 +12958,14 @@ "strict-uri-encode": "^1.0.0" } }, + "randchacha": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/randchacha/-/randchacha-1.0.2.tgz", + "integrity": "sha512-Ghc8MLVGQaYYz8TNLm49744u9992rVqEER1KoGBY/dcmJPx2V/x1YBdl7XY4k5Ut4IFPxTQO1kD3wu/rN+o1tw==", + "requires": { + "chacha": "^2.1.0" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6233,7 +13018,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" } } }, @@ -6260,6 +13045,16 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, "registry-auth-token": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", @@ -6276,56 +13071,6 @@ "rc": "^1.2.8" } }, - "remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "requires": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - } - }, - "remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "requires": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - } - }, - "remark-html": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-13.0.2.tgz", - "integrity": "sha512-LhSRQ+3RKdBqB/RGesFWkNNfkGqprDUCwjq54SylfFeNyZby5kqOG8Dn/vYsRoM8htab6EWxFXCY6XIZvMoRiQ==", - "requires": { - "hast-util-sanitize": "^3.0.0", - "hast-util-to-html": "^7.0.0", - "mdast-util-to-hast": "^10.0.0" - } - }, - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "requires": { - "mdast-util-from-markdown": "^0.8.0" - } - }, - "remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", - "requires": { - "mdast-util-to-markdown": "^0.6.0" - } - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -6419,9 +13164,9 @@ }, "dependencies": { "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" } } }, @@ -6448,11 +13193,6 @@ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, - "scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" - }, "secp256k1": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", @@ -6463,6 +13203,11 @@ "node-gyp-build": "^4.2.0" } }, + "semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -6514,7 +13259,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" } } }, @@ -6591,9 +13336,9 @@ } }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-concat": { "version": "1.0.1", @@ -6629,7 +13374,7 @@ "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -6641,7 +13386,7 @@ "jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", "requires": { "graceful-fs": "^4.1.6" } @@ -6656,11 +13401,6 @@ } } }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, "sshpk": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", @@ -6680,7 +13420,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" } } }, @@ -6694,6 +13434,14 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -6705,39 +13453,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "stringify-entities": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", - "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "strip-ansi": { @@ -6761,11 +13493,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, - "strip-markdown": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/strip-markdown/-/strip-markdown-4.2.0.tgz", - "integrity": "sha512-sZYHI1KoKOOBfIq78R3E62NHg7kk6aKtZSqiH7wWxFB6Ak6PTZe4N88aJnzjV00Lbfw91oyLpy3baYfTTqNYBA==" - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6795,7 +13522,7 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" }, "got": { "version": "7.1.0", @@ -6821,7 +13548,7 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" }, "p-cancelable": { "version": "0.3.0", @@ -6831,12 +13558,12 @@ "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "requires": { "prepend-http": "^1.0.1" } @@ -6857,14 +13584,6 @@ "yallist": "^3.1.1" }, "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -6966,17 +13685,12 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, "ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", "requires": { - "@cspotcode/source-map-support": "0.7.0", + "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -6987,6 +13701,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "dependencies": { @@ -6998,9 +13713,9 @@ } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "tunnel-agent": { "version": "0.6.0", @@ -7048,9 +13763,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" }, "uint8arrays": { "version": "3.0.0", @@ -7066,13 +13781,13 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, @@ -7081,19 +13796,6 @@ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" }, - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -7102,53 +13804,6 @@ "crypto-random-string": "^2.0.0" } }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -7180,19 +13835,10 @@ "xdg-basedir": "^4.0.0" }, "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { "lru-cache": "^6.0.0" } @@ -7210,7 +13856,7 @@ "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "requires": { "prepend-http": "^2.0.0" } @@ -7271,9 +13917,14 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "varint": { "version": "5.0.2", @@ -7295,26 +13946,6 @@ "extsprintf": "^1.2.0" } }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, "web3": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.0.tgz", @@ -7340,9 +13971,9 @@ }, "dependencies": { "@types/node": { - "version": "12.20.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.43.tgz", - "integrity": "sha512-HCfJdaYqJX3BCzeihgZrD7b85Cu05OC/GVJ4kEYIflwUs4jbnUlLLWoq7hw1LBcdvUyehO+gr6P5JQ895/2ZfA==" + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" } } }, @@ -7361,9 +13992,9 @@ }, "dependencies": { "@types/node": { - "version": "12.20.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.43.tgz", - "integrity": "sha512-HCfJdaYqJX3BCzeihgZrD7b85Cu05OC/GVJ4kEYIflwUs4jbnUlLLWoq7hw1LBcdvUyehO+gr6P5JQ895/2ZfA==" + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" } } }, @@ -7504,11 +14135,6 @@ "elliptic": "^6.4.0", "xhr-request-promise": "^0.1.2" } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" } } }, @@ -7565,9 +14191,9 @@ }, "dependencies": { "@types/node": { - "version": "12.20.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.43.tgz", - "integrity": "sha512-HCfJdaYqJX3BCzeihgZrD7b85Cu05OC/GVJ4kEYIflwUs4jbnUlLLWoq7hw1LBcdvUyehO+gr6P5JQ895/2ZfA==" + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" } } }, @@ -7725,9 +14351,9 @@ } }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" }, "wrap-ansi": { "version": "7.0.0", @@ -7758,7 +14384,8 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} }, "xdg-basedir": { "version": "4.0.0", @@ -7811,14 +14438,6 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "requires": { - "cuint": "^0.2.2" - } - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -7880,11 +14499,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" } } } diff --git a/tests/package.json b/tests/package.json index 88b8d910fe..7db1ffc107 100644 --- a/tests/package.json +++ b/tests/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "", "main": "index.js", + "type": "commonjs", "watch": { "build": { "patterns": [ @@ -30,18 +31,18 @@ }, "scripts": { "test-with-logs": "mocha --printlogs -r ts-node/register 'tests/**/test-*.ts'", - "pre-build-contracts": "ts-node ./pre-build-contracts.ts && npx prettier -w ./contracts/compiled/*.json", + "pre-build-contracts": "ts-node tools/pre-build-contracts.ts && npx prettier -w ./contracts/compiled/*.json", "test": "mocha --parallel -r ts-node/register 'tests/**/test-*.ts' -- -j 4", "test-seq": "mocha -r ts-node/register 'tests/**/test-*.ts'", - "tracing-test": "ETHAPI_CMD='--ethapi=txpool,debug,trace' mocha --parallel -r ts-node/register 'tracing-tests/**/*.ts'", + "tracing-test": "ETHAPI_CMD='--ethapi=txpool,debug,trace' FORCE_WASM_EXECUTION='true' FORCE_COMPILED_WASM='true' WASM_RUNTIME_OVERRIDES='moonbase-overrides' mocha --parallel -r ts-node/register 'tracing-tests/**/*.ts'", + "tracing-test-single": "ETHAPI_CMD='--ethapi=txpool,debug,trace' FORCE_WASM_EXECUTION='true' FORCE_COMPILED_WASM='true' WASM_RUNTIME_OVERRIDES='moonbase-overrides' mocha -r ts-node/register 'tracing-tests/test-trace-filter.ts'", "para-test": "mocha -r ts-node/register 'para-tests/**/test-*.ts'", "para-test-single": "mocha -r ts-node/register 'para-tests-no-ci/test-xcm-para.ts'", - "para-test-no-ci": "DEBUG=test:substrateEvents mocha -r ts-node/register 'para-tests-no-ci/**/test-*.ts'", "smoke-test": "mocha -r ts-node/register 'smoke-tests/**/test-*.ts'", + "fork-test": "mocha -r ts-node/register 'fork-tests/**/test-*.ts'", "watch": "npm-watch", - "build": "cargo build --release", - "non-ci-test": "mocha -r ts-node/register 'non_ci_tests/**/test-*.ts'", - "test-single": "mocha -r ts-node/register 'tests/test-precompile/test-precompile-democracy.ts'", + "build": "tsc", + "test-single": "mocha -r ts-node/register 'tests/test-block/test-block-gas.ts'", "current-test": "mocha -r ts-node/register", "lint": "npx prettier --write --ignore-path .gitignore '**/*.(yml|js|ts|json)'", "clean": "rimraf *.log binaries/* runtimes/* specs/*" @@ -49,26 +50,36 @@ "author": "", "license": "ISC", "dependencies": { - "@moonbeam-network/api-augment": "^0.1502.0", - "@polkadot/api": "^7.15.1", - "@substrate/txwrapper-core": "^1.5.9", - "@substrate/txwrapper-registry": "^1.5.9", - "@substrate/txwrapper-substrate": "^1.5.9", + "@moonbeam-network/api-augment": "^0.1700.0", + "@polkadot/api": "^8.8.2", + "@polkadot/keyring": "^9.5.1", + "@polkadot/util": "^9.5.1", + "@substrate/txwrapper-core": "^3.1.2", + "@substrate/txwrapper-substrate": "^3.1.2", "@types/chai": "^4.2.11", "@types/chai-as-promised": "^7.1.4", "@types/mocha": "^9.0.0", "chai": "^4.3.4", "chai-as-promised": "^7.1.1", + "chalk": "^4.0.1", "debug": "^4.3.2", + "eth-object": "github:aurora-is-near/eth-object#master", + "eth-util-lite": "1.0.1", "ethers": "^5.4.6", - "mocha": "^9.1.3", + "merkle-patricia-tree": "^3.0.0", + "mocha": "^10.0.0", + "moonbeam-types-bundle": "^2.0.7", "npm-watch": "^0.9.0", - "polkadot-launch": "git+https://github.com/PureStake/polkadot-launch.git#crystalin-para-id", + "polkadot-launch": "github:PureStake/polkadot-launch#crystalin-para-id", + "randchacha": "^1.0.2", "rimraf": "^3.0.2", "solc": "^0.8.3", "tcp-port-used": "^1.0.2", - "ts-node": "^10.2.1", - "typescript": "^4.3.5", + "ts-node": "^10.8.1", + "typescript": "^4.7.4", "web3": "^1.3.5" + }, + "devDependencies": { + "@types/tcp-port-used": "^1.0.1" } } diff --git a/tests/para-tests-no-ci/test-xcm-para.ts b/tests/para-tests-no-ci/test-xcm-para.ts deleted file mode 100644 index aa8c8206f1..0000000000 --- a/tests/para-tests-no-ci/test-xcm-para.ts +++ /dev/null @@ -1,1073 +0,0 @@ -import Keyring from "@polkadot/keyring"; -import { expect } from "chai"; -import { BN, hexToU8a } from "@polkadot/util"; - -import { ALITH, ALITH_PRIV_KEY, BALTATHAR, BALTATHAR_PRIV_KEY } from "../util/constants"; -import { describeParachain } from "../util/setup-para-tests"; -import { createBlockWithExtrinsicParachain, logEvents, waitOneBlock } from "../util/substrate-rpc"; -import { KeyringPair } from "@polkadot/keyring/types"; -import { ApiPromise } from "@polkadot/api"; -import { execFromTwoThirdsOfCouncil } from "../util/governance"; -import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types"; - -const palletId = "0x6D6f646c617373746d6E67720000000000000000"; -const HUNDRED_UNITS = 100000000000000; -const HUNDRED_UNITS_PARA = 100_000_000_000_000_000_000n; -const THOUSAND_UNITS = 1000000000000000; - -interface AssetMetadata { - name: string; - symbol: string; - decimals: BN; - isFrozen: boolean; -} -const relayAssetMetadata: AssetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: new BN(12), - isFrozen: false, -}; -const paraAssetMetadata: AssetMetadata = { - name: "GLMR", - symbol: "GLMR", - decimals: new BN(18), - isFrozen: false, -}; -interface SourceLocation { - XCM: { - parents: number | BN; - interior: any; - }; -} -const sourceLocationRelay = { XCM: { parents: 1, interior: "Here" } }; - -const execFromAllMembersOfTechCommittee = async >( - parachainApi: ApiPromise, - polkadotCall: Call, - key_1: KeyringPair, - key_2: KeyringPair, - index: Number -) => { - let lengthBound = polkadotCall.encodedLength; - const { events: proposalEvents } = await createBlockWithExtrinsicParachain( - parachainApi, - key_1, - parachainApi.tx.techCommitteeCollective.propose(2, polkadotCall, lengthBound) - ); - - const proposalHash = proposalEvents - .find((e) => e.method.toString() == "Proposed") - .data[2].toHex() as string; - - await createBlockWithExtrinsicParachain( - parachainApi, - key_1, - parachainApi.tx.techCommitteeCollective.vote(proposalHash, index, true) - ); - - await createBlockWithExtrinsicParachain( - parachainApi, - key_2, - parachainApi.tx.techCommitteeCollective.vote(proposalHash, index, true) - ); - - await createBlockWithExtrinsicParachain( - parachainApi, - key_2, - parachainApi.tx.techCommitteeCollective.close(proposalHash, index, 1_000_000_000, lengthBound) - ); -}; - -async function registerAssetToParachain( - parachainApi: ApiPromise, - sudoKeyring: KeyringPair, - assetLocation: SourceLocation = sourceLocationRelay, - assetMetadata: AssetMetadata = relayAssetMetadata -) { - const { events: eventsRegister } = await createBlockWithExtrinsicParachain( - parachainApi, - sudoKeyring, - parachainApi.tx.sudo.sudo( - parachainApi.tx.assetManager.registerAsset(assetLocation, assetMetadata, new BN(1), true) - ) - ); - let assetId: string; - // Look for assetId in events - eventsRegister.forEach((e) => { - let ev = e.toHuman(); - if (ev.section === "assetManager") { - assetId = ev.data[0]; - } - }); - if (!assetId) { - await new Promise((res) => setTimeout(res, 20000)); - } - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsicParachain( - parachainApi, - sudoKeyring, - parachainApi.tx.sudo.sudo(parachainApi.tx.assetManager.setAssetUnitsPerSecond(assetLocation, 0)) - ); - return { events, assetId }; -} - -async function setDefaultVersionRelay(relayApi: ApiPromise, sudoKeyring: KeyringPair) { - // Set supported version - // Release-v0.9.12 does not have yet automatic versioning - const { events } = await createBlockWithExtrinsicParachain( - relayApi, - sudoKeyring, - relayApi.tx.sudo.sudo(relayApi.tx.xcmPallet.forceDefaultXcmVersion(1)) - ); - return { events }; -} - -describeParachain( - "XCM - receive_relay_asset_from_relay", - { chain: "moonbase-local" }, - (context) => { - it("should be able to receive an asset from relay", async function () { - const keyring = new Keyring({ type: "sr25519" }); - const aliceRelay = keyring.addFromUri("//Alice"); - - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApiParaone; - const relayOne = context._polkadotApiRelaychains[0]; - - // Log events - logEvents(parachainOne, "PARA"); - - logEvents(relayOne, "RELAY"); - - await new Promise((res) => setTimeout(res, 10000)); - - // PARACHAINS - // registerAsset - const { events, assetId } = await registerAssetToParachain(parachainOne, alith); - - expect(events[1].toHuman().method).to.eq("UnitsPerSecondChanged"); - expect(events[4].toHuman().method).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = await parachainOne.query.assets.asset(assetId); - expect((registeredAsset.toHuman() as { owner: string }).owner).to.eq(palletId); - - // RELAYCHAIN - // Sets default xcm version to relay - await setDefaultVersionRelay(relayOne, aliceRelay); - - let beforeAliceRelayBalance = ( - (await relayOne.query.system.account(aliceRelay.address)) as any - ).data.free; - - let reserveTrasnsferAssetsCall = relayOne.tx.xcmPallet.reserveTransferAssets( - { V1: { parents: new BN(0), interior: { X1: { Parachain: new BN(1000) } } } }, - { - V1: { - parents: new BN(0), - interior: { X1: { AccountKey20: { network: "Any", key: ALITH } } }, - }, - }, - { - V0: [{ ConcreteFungible: { id: "Null", amount: new BN(THOUSAND_UNITS) } }], - }, - 0 - ); - // Fees - const fee = (await reserveTrasnsferAssetsCall.paymentInfo(aliceRelay)).partialFee as any; - // Trigger the transfer - const { events: eventsRelay } = await createBlockWithExtrinsicParachain( - relayOne, - aliceRelay, - reserveTrasnsferAssetsCall - ); - - let expectedAfterRelayBalance = - BigInt(beforeAliceRelayBalance) - BigInt(fee) - BigInt(THOUSAND_UNITS); - expect(eventsRelay[3].toHuman().method).to.eq("Attempted"); - - // Wait for parachain block to have been emited - await waitOneBlock(parachainOne, 2); - // about 1k should have been substracted from AliceRelay - let afterAliceRelayBalance = ( - (await relayOne.query.system.account(aliceRelay.address)) as any - ).data.free; - - expect(afterAliceRelayBalance.toString()).to.eq(expectedAfterRelayBalance.toString()); - - // Alith asset balance should have been increased to 1000*e12 - expect( - ((await parachainOne.query.assets.account(assetId, ALITH)) as any).balance.toString() - ).to.eq(BigInt(THOUSAND_UNITS).toString()); - }); - } -); - -describeParachain("XCM - send_relay_asset_to_relay", { chain: "moonbase-local" }, (context) => { - let keyring: Keyring, - aliceRelay: KeyringPair, - alith: KeyringPair, - baltathar: KeyringPair, - parachainOne: ApiPromise, - relayOne: ApiPromise, - assetId: string; - before("First send relay chain asset to parachain", async function () { - keyring = new Keyring({ type: "sr25519" }); - - // Setup Relaychain - aliceRelay = keyring.addFromUri("//Alice"); - relayOne = context._polkadotApiRelaychains[0]; - - // Setup Parachain - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - parachainOne = context.polkadotApiParaone; - - // Log events - logEvents(parachainOne, "PARA"); - - logEvents(relayOne, "RELAY"); - - await new Promise((res) => setTimeout(res, 10000)); - - // PARACHAIN A - // registerAsset - ({ assetId } = await registerAssetToParachain(parachainOne, alith)); - - // RELAYCHAIN - // Sets default xcm version to relay - await setDefaultVersionRelay(relayOne, aliceRelay); - - let beforeAliceRelayBalance = ((await relayOne.query.system.account(aliceRelay.address)) as any) - .data.free; - - let reserveTrasnsferAssetsCall = relayOne.tx.xcmPallet.reserveTransferAssets( - { V1: { parents: new BN(0), interior: { X1: { Parachain: new BN(1000) } } } }, - { - V1: { - parents: new BN(0), - interior: { X1: { AccountKey20: { network: "Any", key: BALTATHAR } } }, - }, - }, - { - V0: [{ ConcreteFungible: { id: "Null", amount: new BN(THOUSAND_UNITS) } }], - }, - 0 - ); - // Fees - const fee = (await reserveTrasnsferAssetsCall.paymentInfo(aliceRelay)).partialFee as any; - - let expectedAfterRelayBalance = - BigInt(beforeAliceRelayBalance) - BigInt(fee) - BigInt(THOUSAND_UNITS); - - // Transfer 1000 units to para a baltathar - await createBlockWithExtrinsicParachain(relayOne, aliceRelay, reserveTrasnsferAssetsCall); - - // Wait for parachain block to have been emited - await waitOneBlock(parachainOne, 2); - - // about 1k should have been substracted from AliceRelay (plus fees) - let afterAliceRelayBalance = ((await relayOne.query.system.account(aliceRelay.address)) as any) - .data.free; - - expect(afterAliceRelayBalance.toString()).to.eq(expectedAfterRelayBalance.toString()); - // // BALTATHAR asset balance should have been increased to 1000*e12 - expect( - ((await parachainOne.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(BigInt(THOUSAND_UNITS).toString()); - }); - it("should be able to receive an asset in relaychain from parachain", async function () { - // about 1k should have been substracted from AliceRelay (plus fees) - let beforeAliceRelayBalance = ((await relayOne.query.system.account(aliceRelay.address)) as any) - .data.free; - // PARACHAIN A - // xToken transfer : sending 100 units back to relay - const { events: eventsTransfer } = await createBlockWithExtrinsicParachain( - parachainOne, - baltathar, - parachainOne.tx.xTokens.transfer( - { OtherReserve: assetId }, - new BN(HUNDRED_UNITS), - { - V1: { - parents: new BN(1), - interior: { X1: { AccountId32: { network: "Any", id: aliceRelay.addressRaw } } }, - }, - }, - new BN(4000000000) - ) - ); - - expect(eventsTransfer[7].toHuman().method).to.eq("ExtrinsicSuccess"); - // Constant, but we cannot easily take them - // Fees related to WithdrawAsset + ClearOrigin+ BuyExecution + DepositAsset - // I think this corresponds to 8 units per weight times 1000000000 pero instruction - let fees = BigInt(32000000000); - - let expectedAliceBalance = BigInt(beforeAliceRelayBalance) + BigInt(HUNDRED_UNITS) - fees; - - await waitOneBlock(relayOne, 3); - // about 100 should have been added to AliceRelay (minus fees) - expect( - ((await relayOne.query.system.account(aliceRelay.address)) as any).data.free.toString() - ).to.eq(expectedAliceBalance.toString()); - // Baltathar should have 100 * 10^12 less - expect( - ((await parachainOne.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq((BigInt(THOUSAND_UNITS) - BigInt(HUNDRED_UNITS)).toString()); - }); -}); - -describeParachain( - "XCM - send_relay_asset_to_para_b - aka parachainTwo", - { chain: "moonbase-local", numberOfParachains: 2 }, - (context) => { - let keyring: Keyring, - aliceRelay: KeyringPair, - alith: KeyringPair, - baltathar: KeyringPair, - parachainOne: ApiPromise, - parachainTwo: ApiPromise, - relayOne: ApiPromise, - assetId: string; - before("First send relay chain asset to parachain", async function () { - keyring = new Keyring({ type: "sr25519" }); - - // Setup Relaychain - aliceRelay = keyring.addFromUri("//Alice"); - relayOne = context._polkadotApiRelaychains[0]; - - // Setup Parachains - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - parachainOne = context.polkadotApiParaone; - parachainTwo = context._polkadotApiParachains[1].apis[0]; - - // Log events - logEvents(parachainOne, "PARA A"); - logEvents(parachainTwo, "PARA B"); - logEvents(relayOne, "RELAY"); - - await new Promise((res) => setTimeout(res, 2000)); - - // PARACHAIN A - // registerAsset - ({ assetId } = await registerAssetToParachain(parachainOne, alith)); - - // PARACHAIN B - // registerAsset - const { assetId: assetIdB } = await registerAssetToParachain(parachainTwo, alith); - - // They should have the same id - expect(assetId).to.eq(assetIdB); - - // Sets default xcm version to relay - await setDefaultVersionRelay(relayOne, aliceRelay); - - let beforeAliceRelayBalance = ( - (await relayOne.query.system.account(aliceRelay.address)) as any - ).data.free; - - let reserveTrasnsferAssetsCall = relayOne.tx.xcmPallet.reserveTransferAssets( - { V1: { parents: new BN(0), interior: { X1: { Parachain: new BN(1000) } } } }, - { - V1: { - parents: new BN(0), - interior: { X1: { AccountKey20: { network: "Any", key: BALTATHAR } } }, - }, - }, - { - V0: [{ ConcreteFungible: { id: "Null", amount: new BN(THOUSAND_UNITS) } }], - }, - 0 - ); - - // Fees - const fee = (await reserveTrasnsferAssetsCall.paymentInfo(aliceRelay)).partialFee as any; - - let expectedAfterRelayBalance = - BigInt(beforeAliceRelayBalance) - BigInt(fee) - BigInt(THOUSAND_UNITS); - - // Transfer 1000 units to para a baltathar - await createBlockWithExtrinsicParachain(relayOne, aliceRelay, reserveTrasnsferAssetsCall); - - // Wait for parachain block to have been emited - await waitOneBlock(parachainOne, 2); - - let afterAliceRelayBalance = ( - (await relayOne.query.system.account(aliceRelay.address)) as any - ).data.free; - - expect(afterAliceRelayBalance.toString()).to.eq(expectedAfterRelayBalance.toString()); - - expect( - ((await parachainOne.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(BigInt(THOUSAND_UNITS).toString()); - }); - it("should be able to receive a non-reserve asset in para b from para a", async function () { - // PARACHAIN A - // transfer 100 units to parachain B - const { events: eventsTransfer } = await createBlockWithExtrinsicParachain( - parachainOne, - baltathar, - parachainOne.tx.xTokens.transfer( - { OtherReserve: assetId }, - new BN(HUNDRED_UNITS), - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(2000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - - await waitOneBlock(parachainTwo, 3); - - // These are related to the operations in the relay - // Constant, but we cannot easily take them - // Fees related to WithdrawAsset + ClearOrigin + DepositReserveAsset + ReserveAssetDeposited - // I think this corresponds to 8 units per weight times 1000000000 pero instruction - let relayFees = BigInt(32000000000); - let expectedBaltatharParaTwoBalance = BigInt(HUNDRED_UNITS) - relayFees; - - expect( - ((await parachainOne.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq((BigInt(THOUSAND_UNITS) - BigInt(HUNDRED_UNITS)).toString()); - expect( - ((await parachainTwo.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(expectedBaltatharParaTwoBalance.toString()); - }); - } -); - -describeParachain( - "XCM - send_para_a_asset_to_para_b - aka parachainTwo", - { chain: "moonbase-local", numberOfParachains: 2 }, - (context) => { - let keyring: Keyring, - alith: KeyringPair, - baltathar: KeyringPair, - parachainOne: ApiPromise, - parachainTwo: ApiPromise, - relayOne: ApiPromise, - assetId: string, - sourceLocationParaA: SourceLocation, - initialBalance: number; - before("First send relay chain asset to parachain", async function () { - keyring = new Keyring({ type: "ethereum" }); - - // Setup Relaychain - relayOne = context._polkadotApiRelaychains[0]; - - // Setup Parachains - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - parachainOne = context.polkadotApiParaone; - parachainTwo = context._polkadotApiParachains[1].apis[0]; - - // Log events - logEvents(parachainOne, "PARA A"); - logEvents(parachainTwo, "PARA B"); - logEvents(relayOne, "RELAY"); - - initialBalance = Number( - ((await parachainOne.query.system.account(BALTATHAR)) as any).data.free - ); - - // Get Pallet balances index - const metadata = await parachainOne.rpc.state.getMetadata(); - const palletIndex = (metadata.asLatest.toHuman().pallets as Array).find((pallet) => { - return pallet.name === "Balances"; - }).index; - - expect(palletIndex); - - sourceLocationParaA = { - XCM: { - parents: 1, - interior: { X2: [{ Parachain: new BN(1000) }, { Palletinstance: new BN(palletIndex) }] }, - }, - }; - - // PARACHAIN B - // registerAsset - ({ assetId } = await registerAssetToParachain( - parachainTwo, - alith, - sourceLocationParaA, - paraAssetMetadata - )); - }); - it("should be able to receive an asset in para b from para a", async function () { - // PARACHAIN A - // transfer 100 units to parachain B - const { events: eventsTransfer } = await createBlockWithExtrinsicParachain( - parachainOne, - baltathar, - parachainOne.tx.xTokens.transfer( - "SelfReserve", - HUNDRED_UNITS_PARA, - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(2000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - - expect(eventsTransfer[5].toHuman().method).to.eq("XcmpMessageSent"); - expect(eventsTransfer[6].toHuman().method).to.eq("Transferred"); - expect(eventsTransfer[11].toHuman().method).to.eq("ExtrinsicSuccess"); - - await waitOneBlock(parachainTwo, 3); - - // Verify that difference is 100 units plus fees (less than 1% of 10^18) - const targetBalance: number = Number(BigInt(BigInt(initialBalance) - HUNDRED_UNITS_PARA)); - const diff = - Number(((await parachainOne.query.system.account(BALTATHAR)) as any).data.free) - - targetBalance; - expect(diff < 10000000000000000).to.eq(true); - - let expectedBaltatharParaTwoBalance = BigInt(HUNDRED_UNITS_PARA); - - expect( - ((await parachainTwo.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(expectedBaltatharParaTwoBalance.toString()); - }); - } -); - -describeParachain( - "XCM - send_para_a_asset_to_para_b_and_back_to_para_a - aka parachainTwo", - { chain: "moonbase-local", numberOfParachains: 2 }, - (context) => { - let keyring: Keyring, - alith: KeyringPair, - baltathar: KeyringPair, - parachainOne: ApiPromise, - parachainTwo: ApiPromise, - relayOne: ApiPromise, - assetId: string, - sourceLocationParaA: SourceLocation, - initialBalance: number; - before("First send relay chain asset to parachain", async function () { - keyring = new Keyring({ type: "ethereum" }); - - // Setup Relaychain - relayOne = context._polkadotApiRelaychains[0]; - - // Setup Parachains - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - parachainOne = context.polkadotApiParaone; - parachainTwo = context._polkadotApiParachains[1].apis[0]; - - // Log events - logEvents(parachainOne, "PARA A"); - logEvents(parachainTwo, "PARA B"); - logEvents(relayOne, "RELAY"); - - initialBalance = Number( - ((await parachainOne.query.system.account(BALTATHAR)) as any).data.free - ); - - // Get Pallet balances index - const metadata = await parachainOne.rpc.state.getMetadata(); - const palletIndex = (metadata.asLatest.toHuman().pallets as Array).find((pallet) => { - return pallet.name === "Balances"; - }).index; - - expect(palletIndex); - - sourceLocationParaA = { - XCM: { - parents: new BN(1), - interior: { X2: [{ Parachain: new BN(1000) }, { Palletinstance: new BN(palletIndex) }] }, - }, - }; - - // PARACHAIN B - // registerAsset - ({ assetId } = await registerAssetToParachain( - parachainTwo, - alith, - sourceLocationParaA, - paraAssetMetadata - )); - - // PARACHAIN A - // transfer 100 units to parachain B - await createBlockWithExtrinsicParachain( - parachainOne, - baltathar, - parachainOne.tx.xTokens.transfer( - "SelfReserve", - HUNDRED_UNITS_PARA, - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(2000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - - await waitOneBlock(parachainTwo, 3); - }); - it("should be able to receive an asset in para b from para a", async function () { - // PARACHAIN B - // transfer back 100 units to parachain A - const { events: eventsTransfer } = await createBlockWithExtrinsicParachain( - parachainTwo, - baltathar, - parachainTwo.tx.xTokens.transfer( - { OtherReserve: assetId }, - HUNDRED_UNITS_PARA, - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(1000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - - expect(eventsTransfer[2].toHuman().method).to.eq("XcmpMessageSent"); - expect(eventsTransfer[3].toHuman().method).to.eq("Transferred"); - expect(eventsTransfer[8].toHuman().method).to.eq("ExtrinsicSuccess"); - - await waitOneBlock(parachainTwo, 3); - - const diff = - initialBalance - - Number(((await parachainOne.query.system.account(BALTATHAR)) as any).data.free); - // Verify that difference is fees (less than 1% of 10^18) - expect(diff < 10000000000000000).to.eq(true); - - let expectedBaltatharParaTwoBalance = BigInt(0); - - expect( - ((await parachainTwo.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(expectedBaltatharParaTwoBalance.toString()); - }); - } -); - -describeParachain( - "XCM - send_para_a_asset_from_para_b_to_para_c", - { chain: "moonbase-local", numberOfParachains: 3 }, - (context) => { - let keyring: Keyring, - alith: KeyringPair, - baltathar: KeyringPair, - parachainOne: ApiPromise, - parachainTwo: ApiPromise, - parachainThree: ApiPromise, - relayOne: ApiPromise, - assetId: string, - sourceLocationParaA: SourceLocation, - initialBalance: number; - before("First send relay chain asset to parachain", async function () { - keyring = new Keyring({ type: "ethereum" }); - - // Setup Relaychain - relayOne = context._polkadotApiRelaychains[0]; - - // Setup Parachains - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - parachainOne = context.polkadotApiParaone; - parachainTwo = context._polkadotApiParachains[1].apis[0]; - parachainThree = context._polkadotApiParachains[2].apis[0]; - - // Log events - logEvents(parachainOne, "PARA A"); - logEvents(parachainTwo, "PARA B"); - logEvents(parachainThree, "PARA C"); - logEvents(relayOne, "RELAY"); - - initialBalance = Number( - ((await parachainOne.query.system.account(BALTATHAR)) as any).data.free - ); - - // Get Pallet balances index - const metadata = await parachainOne.rpc.state.getMetadata(); - const palletIndex = (metadata.asLatest.toHuman().pallets as Array).find((pallet) => { - return pallet.name === "Balances"; - }).index; - - expect(palletIndex); - - sourceLocationParaA = { - XCM: { - parents: new BN(1), - interior: { X2: [{ Parachain: new BN(1000) }, { Palletinstance: new BN(palletIndex) }] }, - }, - }; - - // PARACHAIN B - // registerAsset - ({ assetId } = await registerAssetToParachain( - parachainTwo, - alith, - sourceLocationParaA, - paraAssetMetadata - )); - - // PARACHAIN C - // registerAsset - await registerAssetToParachain(parachainThree, alith, sourceLocationParaA, paraAssetMetadata); - }); - it("should be able to receive an asset back in para a from para b", async function () { - // PARACHAIN A - // transfer 100 units to parachain B - await createBlockWithExtrinsicParachain( - parachainOne, - baltathar, - parachainOne.tx.xTokens.transfer( - "SelfReserve", - HUNDRED_UNITS_PARA, - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(2000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - - await waitOneBlock(parachainTwo, 6); - - // PARACHAIN B - // transfer 100 units to parachain C - const { events: eventsTransfer2 } = await createBlockWithExtrinsicParachain( - parachainTwo, - baltathar, - parachainTwo.tx.xTokens.transfer( - { OtherReserve: assetId }, - HUNDRED_UNITS_PARA, - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(3000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - - expect(eventsTransfer2[2].toHuman().method).to.eq("XcmpMessageSent"); - expect(eventsTransfer2[3].toHuman().method).to.eq("Transferred"); - expect(eventsTransfer2[8].toHuman().method).to.eq("ExtrinsicSuccess"); - - await waitOneBlock(parachainThree, 3); - // Verify that difference is 100 units plus fees (less than 1% of 10^18) - const targetBalance: number = Number(BigInt(BigInt(initialBalance) - HUNDRED_UNITS_PARA)); - let expectedBaltatharParaTwoBalance = BigInt(0); - let paraAXcmFee = BigInt(400000000); - const diff = - Number(((await parachainOne.query.system.account(BALTATHAR)) as any).data.free) - - targetBalance; - expect(diff < 10000000000000000).to.eq(true); - expect( - ((await parachainTwo.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(expectedBaltatharParaTwoBalance.toString()); - expect( - ((await parachainThree.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq((BigInt(HUNDRED_UNITS_PARA) - paraAXcmFee).toString()); - }); - } -); - -describeParachain( - "XCM - receive_relay_asset_from_relay", - { chain: "moonbase-local" }, - (context) => { - it("should enqueue DMP messages in maintenance and execute when normal", async function () { - const keyring = new Keyring({ type: "sr25519" }); - const aliceRelay = keyring.addFromUri("//Alice"); - - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApiParaone; - const relayOne = context._polkadotApiRelaychains[0]; - - // Log events - logEvents(parachainOne, "PARA"); - - logEvents(relayOne, "RELAY"); - - await new Promise((res) => setTimeout(res, 10000)); - - // PARACHAINS - // registerAsset - const { events, assetId } = await registerAssetToParachain(parachainOne, alith); - - expect(events[1].toHuman().method).to.eq("UnitsPerSecondChanged"); - expect(events[4].toHuman().method).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = await parachainOne.query.assets.asset(assetId); - expect((registeredAsset.toHuman() as { owner: string }).owner).to.eq(palletId); - - // PARACHAIN - // go into Maintenance - await execFromAllMembersOfTechCommittee( - parachainOne, - parachainOne.tx.maintenanceMode.enterMaintenanceMode(), - alith, - baltathar, - 0 - ); - - // Make sure we are on maintenance - expect(((await parachainOne.query.maintenanceMode.maintenanceMode()) as any).toHuman()).to.eq( - true - ); - - // RELAYCHAIN - // set default version - await setDefaultVersionRelay(relayOne, aliceRelay); - // Trigger the transfer - const { events: eventsRelay } = await createBlockWithExtrinsicParachain( - relayOne, - aliceRelay, - relayOne.tx.xcmPallet.reserveTransferAssets( - { V1: { parents: new BN(0), interior: { X1: { Parachain: new BN(1000) } } } }, - { - V1: { - parents: new BN(0), - interior: { X1: { AccountKey20: { network: "Any", key: ALITH } } }, - }, - }, - { - V0: [{ ConcreteFungible: { id: "Null", amount: new BN(THOUSAND_UNITS) } }], - }, - 0 - ) - ); - - expect(eventsRelay[3].toHuman().method).to.eq("Attempted"); - - // The DMP queue should queue up - // Wait for parachain block to have been emited - await waitOneBlock(parachainOne, 2); - - // Assert the DMP message arrived and got queued - expect(((await parachainOne.query.dmpQueue.pages(null)) as any).length).to.eq(1); - - // Assert it did not get executed - expect( - ((await parachainOne.query.assets.account(assetId, ALITH)) as any).balance.toString() - ).to.eq(BigInt(0).toString()); - - // PARACHAIN - // get out of Maintenance - await execFromAllMembersOfTechCommittee( - parachainOne, - parachainOne.tx.maintenanceMode.resumeNormalOperation(), - alith, - baltathar, - 1 - ); - - expect(((await parachainOne.query.maintenanceMode.maintenanceMode()) as any).toHuman()).to.eq( - false - ); - - // Assert the DMP message got executed - expect(((await parachainOne.query.dmpQueue.pages(null)) as any).length).to.eq(0); - - // Alith asset balance should have been increased to 1000*e12 after messages is executed - expect( - ((await parachainOne.query.assets.account(assetId, ALITH)) as any).balance.toString() - ).to.eq(BigInt(THOUSAND_UNITS).toString()); - }); - } -); - -describeParachain( - "XCM - send_para_a_asset_to_para_b - aka parachainTwo", - { chain: "moonbase-local", numberOfParachains: 2 }, - (context) => { - let keyring: Keyring, - alith: KeyringPair, - baltathar: KeyringPair, - parachainOne: ApiPromise, - parachainTwo: ApiPromise, - relayOne: ApiPromise, - assetId: string, - sourceLocationParaA: SourceLocation, - initialBalance: number; - before("Register Para A asset in Para B", async function () { - keyring = new Keyring({ type: "ethereum" }); - - // Setup Relaychain - relayOne = context._polkadotApiRelaychains[0]; - - // Setup Parachains - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - parachainOne = context.polkadotApiParaone; - parachainTwo = context._polkadotApiParachains[1].apis[0]; - - // Log events - logEvents(parachainOne, "PARA A"); - logEvents(parachainTwo, "PARA B"); - logEvents(relayOne, "RELAY"); - - initialBalance = Number( - ((await parachainOne.query.system.account(BALTATHAR)) as any).data.free - ); - - // Get Pallet balances index - const metadata = await parachainOne.rpc.state.getMetadata(); - const palletIndex = (metadata.asLatest.toHuman().pallets as Array).find((pallet) => { - return pallet.name === "Balances"; - }).index; - - expect(palletIndex); - - sourceLocationParaA = { - XCM: { - parents: 1, - interior: { X2: [{ Parachain: new BN(1000) }, { Palletinstance: new BN(palletIndex) }] }, - }, - }; - - // PARACHAIN B - // registerAsset - ({ assetId } = await registerAssetToParachain( - parachainTwo, - alith, - sourceLocationParaA, - paraAssetMetadata - )); - }); - it("should enqueue XCMP messages in maintenance and execute when normal", async function () { - // PARACHAIN B - // go into Maintenance - await execFromAllMembersOfTechCommittee( - parachainTwo, - parachainTwo.tx.maintenanceMode.enterMaintenanceMode(), - alith, - baltathar, - 0 - ); - - // Make sure we are on maintenance - expect(((await parachainTwo.query.maintenanceMode.maintenanceMode()) as any).toHuman()).to.eq( - true - ); - - // PARACHAIN A - // transfer 100 units to parachain B - const { events: eventsTransfer } = await createBlockWithExtrinsicParachain( - parachainOne, - baltathar, - parachainOne.tx.xTokens.transfer( - "SelfReserve", - HUNDRED_UNITS_PARA, - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(2000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - - expect(eventsTransfer[5].toHuman().method).to.eq("XcmpMessageSent"); - expect(eventsTransfer[6].toHuman().method).to.eq("Transferred"); - expect(eventsTransfer[11].toHuman().method).to.eq("ExtrinsicSuccess"); - - await waitOneBlock(parachainTwo, 3); - - let queuedMessages = ((await parachainTwo.query.xcmpQueue.inboundXcmpStatus()) as any)[0][2] - .length; - - // Assert the XCMP message arrived and got queued. At least one (probably two for versioning) - // should have arrived - expect(queuedMessages > 0).to.eq(true); - - // Assert it did not get executed - expect( - ((await parachainTwo.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(BigInt(0).toString()); - - // PARACHAIN - // get out of Maintenance - await execFromAllMembersOfTechCommittee( - parachainTwo, - parachainTwo.tx.maintenanceMode.resumeNormalOperation(), - alith, - baltathar, - 1 - ); - - expect(((await parachainOne.query.maintenanceMode.maintenanceMode()) as any).toHuman()).to.eq( - false - ); - - queuedMessages = ((await parachainTwo.query.xcmpQueue.inboundXcmpStatus()) as any).toHuman() - .length; - - // Now the messages should have executed - expect(queuedMessages).to.eq(0); - - let expectedBaltatharParaTwoBalance = BigInt(HUNDRED_UNITS_PARA); - - // Assert it did get executed - expect( - ((await parachainTwo.query.assets.account(assetId, BALTATHAR)) as any).balance.toString() - ).to.eq(expectedBaltatharParaTwoBalance.toString()); - }); - } -); diff --git a/tests/para-tests/moonbase/1200/skip-bug-ethereum-parent-hash.ts b/tests/para-tests/moonbase/1200/skip-bug-ethereum-parent-hash.ts index 3ea143664d..fe835f80ba 100644 --- a/tests/para-tests/moonbase/1200/skip-bug-ethereum-parent-hash.ts +++ b/tests/para-tests/moonbase/1200/skip-bug-ethereum-parent-hash.ts @@ -1,11 +1,9 @@ -import { Keyring } from "@polkadot/api"; import { expect } from "chai"; import Web3 from "web3"; +import { alith, baltathar, BALTATHAR_PRIVATE_KEY } from "../../../util/accounts"; -import { ALITH_PRIV_KEY, BALTATHAR_PRIV_KEY } from "../../../util/constants"; import { customWeb3Request } from "../../../util/providers"; import { describeParachain } from "../../../util/setup-para-tests"; -import { createTransfer } from "../../../util/transactions"; // This test will run on local until the new runtime is available @@ -28,10 +26,6 @@ describeParachain( // ~300000 + init 50000 + error marging 150000 this.timeout(500000); - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - let baltatharNonce = await context.web3.eth.getTransactionCount(baltathar.address); // It takes 10 blocks @@ -58,7 +52,7 @@ describeParachain( gas: "0x100000", nonce: baltatharNonce++, }, - BALTATHAR_PRIV_KEY + BALTATHAR_PRIVATE_KEY ); await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); diff --git a/tests/para-tests/moonbase/1200/skip-test-migration-split-staking.ts b/tests/para-tests/moonbase/1200/skip-test-migration-split-staking.ts index dc1e50c314..f15d0acf4e 100644 --- a/tests/para-tests/moonbase/1200/skip-test-migration-split-staking.ts +++ b/tests/para-tests/moonbase/1200/skip-test-migration-split-staking.ts @@ -1,7 +1,7 @@ -import { Keyring } from "@polkadot/api"; import { expect } from "chai"; +import { Keyring } from "@polkadot/api"; +import { alith } from "../../../util/accounts"; -import { ALITH_PRIV_KEY } from "../../../util/constants"; import { describeParachain } from "../../../util/setup-para-tests"; import { sendAllStreamAndWaitLast } from "../../../util/transactions"; @@ -25,9 +25,7 @@ describeParachain( // Expected to take 4 blocks to setup + 10 blocks for upgrade + 4 blocks to check => // ~300000 + init 50000 + error marging 150000 this.timeout(500000); - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); const maxTopDelegations = 360; diff --git a/tests/para-tests/moonbase/1201/skip-ethereum-parent-hash.ts b/tests/para-tests/moonbase/1201/skip-ethereum-parent-hash.ts index 59ce6f8015..e6043a8995 100644 --- a/tests/para-tests/moonbase/1201/skip-ethereum-parent-hash.ts +++ b/tests/para-tests/moonbase/1201/skip-ethereum-parent-hash.ts @@ -1,13 +1,8 @@ import { Keyring } from "@polkadot/api"; import { expect } from "chai"; import Web3 from "web3"; +import { alith, baltathar, BALTATHAR_PRIVATE_KEY } from "../../../util/accounts"; -import { - ALITH_PRIVATE_KEY, - ALITH_PRIV_KEY, - BALTATHAR_PRIV_KEY, - TEST_ACCOUNT, -} from "../../../util/constants"; import { customWeb3Request } from "../../../util/providers"; import { describeParachain } from "../../../util/setup-para-tests"; import { createTransfer } from "../../../util/transactions"; @@ -33,8 +28,6 @@ describeParachain( this.timeout(500000); const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); let baltatharNonce = await context.web3.eth.getTransactionCount(baltathar.address); @@ -62,7 +55,7 @@ describeParachain( gas: "0x100000", nonce: baltatharNonce++, }, - BALTATHAR_PRIV_KEY + BALTATHAR_PRIVATE_KEY ); await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); diff --git a/tests/para-tests/moonbase/1300/skip-migration-fix-total-staking.ts b/tests/para-tests/moonbase/1300/skip-migration-fix-total-staking.ts index 4f049946b7..84e14ef1a8 100644 --- a/tests/para-tests/moonbase/1300/skip-migration-fix-total-staking.ts +++ b/tests/para-tests/moonbase/1300/skip-migration-fix-total-staking.ts @@ -1,7 +1,7 @@ import { Keyring } from "@polkadot/api"; import { expect } from "chai"; +import { alith } from "../../../util/accounts"; -import { ALITH_ADDRESS, ALITH_PRIV_KEY } from "../../../util/constants"; import { describeParachain } from "../../../util/setup-para-tests"; import { sendAllStreamAndWaitLast } from "../../../util/transactions"; @@ -27,12 +27,11 @@ describeParachain( this.timeout(500000); const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // verify alith initial total staked expect( - ((await context.polkadotApiParaone.query.parachainStaking.candidatePool()) as any) - .find((c) => c.owner.toString() == ALITH_ADDRESS) + (await context.polkadotApiParaone.query.parachainStaking.candidatePool()) + .find((c) => c.owner.toString() == alith.address) .amount.toBigInt() ).to.be.equal(1000000000000000000000n); @@ -46,7 +45,7 @@ describeParachain( ); const minDelegatorStk = ( - (await context.polkadotApiParaone.consts.parachainStaking.minDelegatorStk) as any + await context.polkadotApiParaone.consts.parachainStaking.minDelegatorStk ).toBigInt(); process.stdout.write( @@ -93,8 +92,8 @@ describeParachain( // verify alith new delegators are added expect( - ((await context.polkadotApiParaone.query.parachainStaking.candidatePool()) as any) - .find((c) => c.owner.toString() == ALITH_ADDRESS) + (await context.polkadotApiParaone.query.parachainStaking.candidatePool()) + .find((c) => c.owner.toString() == alith.address) .amount.toBigInt() ).to.be.equal(1000000000000000000000n + minDelegatorStk * BigInt(delegatorCount)); @@ -117,8 +116,8 @@ describeParachain( process.stdout.write(`Verifying candidate pool bug pre-migration...`); // Verify BUG: alith total didn't increase with the bond more expect( - ((await context.polkadotApiParaone.query.parachainStaking.candidatePool()) as any) - .find((c) => c.owner.toString() == ALITH_ADDRESS) + (await context.polkadotApiParaone.query.parachainStaking.candidatePool()) + .find((c) => c.owner.toString() == alith.address) .amount.toBigInt() ).to.be.equal(1000000000000000000000n + minDelegatorStk * BigInt(delegatorCount)); process.stdout.write(`✅\n`); @@ -127,8 +126,8 @@ describeParachain( process.stdout.write("Verifying candidate pool is fixed post-migration..."); expect( - ((await context.polkadotApiParaone.query.parachainStaking.candidatePool()) as any) - .find((c) => c.owner.toString() == ALITH_ADDRESS) + (await context.polkadotApiParaone.query.parachainStaking.candidatePool()) + .find((c) => c.owner.toString() == alith.address) .amount.toBigInt() ).to.be.equal( 1000000000000000000000n + (minDelegatorStk + 1n * 10n ** 18n) * BigInt(delegatorCount) diff --git a/tests/para-tests/moonbase/test-runtime-upgrade.ts b/tests/para-tests/moonbase/test-runtime-upgrade.ts index 90abddb39c..1276d5f2a1 100644 --- a/tests/para-tests/moonbase/test-runtime-upgrade.ts +++ b/tests/para-tests/moonbase/test-runtime-upgrade.ts @@ -1,8 +1,7 @@ -import { Keyring } from "@polkadot/api"; import { expect } from "chai"; import child_process from "child_process"; +import { alith } from "../../util/accounts"; -import { ALITH_PRIV_KEY } from "../../util/constants"; import { describeParachain } from "../../util/setup-para-tests"; // This test will run on local until the new runtime is available @@ -12,6 +11,11 @@ const localVersion = child_process .toString() .trim(); +const localAuthoringVersion = child_process + .execSync(`grep 'authoring_version: [0-9]*' ../runtime/moonbase/src/lib.rs | grep -o '[0-9]*'`) + .toString() + .trim(); + let alreadyReleased = ""; try { alreadyReleased = child_process @@ -25,6 +29,9 @@ try { } let baseRuntime: string; +// Determines if the test can run previous runtime with the actual client +// if true the test will not run. +let hasAuthoringChanges: boolean = false; if (localVersion == alreadyReleased) { console.log(`${localVersion} already released. Skipping current runtime `); baseRuntime = localVersion; @@ -38,9 +45,23 @@ if (localVersion == alreadyReleased) { ) .toString() .trim(); + + hasAuthoringChanges = + child_process + .execSync( + `git grep authoring_version ` + + `$(git rev-list runtime-1606..HEAD -- ../runtime/moonbase/src/lib.rs) ` + + `-- ../runtime/moonbase/src/lib.rs ` + + `| grep -v "$(git grep authoring_version runtime-1606 ` + + `-- ../runtime/moonbase/src/lib.rs ` + + `| grep -o 'authoring_version:\ *[0-9]')" ` + + `| grep -o 'authoring_version:\ *[0-9]*'` + ) + .toString() + .trim().length > 0; } -console.log(`Using base runtime ${baseRuntime}`); +console.log(`Using base runtime ${baseRuntime} (authoring changes: ${hasAuthoringChanges})`); const RUNTIME_VERSION = "local"; describeParachain( @@ -56,13 +77,11 @@ describeParachain( }, }, (context) => { - if (localVersion !== alreadyReleased) { + if (localVersion !== alreadyReleased && !hasAuthoringChanges) { it("should not fail", async function () { // Expected to take 10 blocks for upgrade + 4 blocks to check => // ~200000 + init 60000 + error marging 140000 this.timeout(400000); - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); const currentVersion = await ( (await context.polkadotApiParaone.query.system.lastRuntimeUpgrade()) as any diff --git a/tests/para-tests/moonriver/test-balance-genesis.ts b/tests/para-tests/moonriver/test-balance-genesis.ts index ba2a9ddb98..2b62ec2155 100644 --- a/tests/para-tests/moonriver/test-balance-genesis.ts +++ b/tests/para-tests/moonriver/test-balance-genesis.ts @@ -1,6 +1,6 @@ import { expect } from "chai"; +import { alith, ALITH_GENESIS_FREE_BALANCE } from "../../util/accounts"; -import { ALITH } from "../../util/constants"; import { describeParachain } from "../../util/setup-para-tests"; describeParachain( @@ -14,9 +14,9 @@ describeParachain( it("should be accessible through polkadotjs", async function () { expect( ( - (await context.polkadotApiParaone.query.system.account(ALITH.toString())) as any - ).data.free.toBigInt() // TODO: fix type - ).to.eq(1207825819614629174706176n); + await context.polkadotApiParaone.query.system.account(alith.address.toString()) + ).data.free.toBigInt() + ).to.eq(ALITH_GENESIS_FREE_BALANCE); }); } ); diff --git a/tests/pre-build-contracts.ts b/tests/pre-build-contracts.ts deleted file mode 100644 index 79839467ca..0000000000 --- a/tests/pre-build-contracts.ts +++ /dev/null @@ -1,72 +0,0 @@ -import solc from "solc"; -import fs from "fs/promises"; -import { contractSources } from "./contracts/sources"; -import { Compiled } from "../tests/util/contracts"; - -function getImports(dependency) { - if (contractSources[dependency]) { - return { contents: contractSources[dependency] }; - } - return { error: "Source not found" }; -} - -function compileSolidity(contractContent: string, contractName: string): Compiled { - const result = JSON.parse( - solc.compile( - JSON.stringify({ - language: "Solidity", - sources: { - "main.sol": { - content: contractContent, - }, - }, - settings: { - outputSelection: { - "*": { - "*": ["*"], - }, - }, - }, - }), - { import: getImports } - ) - ); - const contract = result.contracts["main.sol"][contractName]; - return { - byteCode: "0x" + contract.evm.bytecode.object, - contract, - sourceCode: contractContent, - }; -} - -// Shouldn't be run concurrently with the same 'name' -async function compile(name: string): Promise { - if (!contractSources[name]) - throw new Error(`Contract name (${name}) doesn't exist in test suite`); - - const contractCompiled = compileSolidity(contractSources[name], name); - let compiled = JSON.stringify(contractCompiled); - await fs.mkdir(`contracts/compiled`, { recursive: true }); - await fs.writeFile(`./contracts/compiled/${name}.json`, compiled, { - flag: "w", - }); - console.log("New compiled contract file has been saved!"); - return contractCompiled; -} - -const main = async () => { - for (let name of Object.keys(contractSources)) { - console.log(`Compiling ${name}`); - try { - await compile(name); - } catch (e) { - console.log(`Can't process contract ${name}: ${e.msg || e}`); - process.exit(1); - } - } - - // Forcing exit to avoid solc maintaining the process - process.exit(0); -}; - -main(); diff --git a/tests/smoke-tests/test-balances-consistency.ts b/tests/smoke-tests/test-balances-consistency.ts index 22100df829..a8db0a06aa 100644 --- a/tests/smoke-tests/test-balances-consistency.ts +++ b/tests/smoke-tests/test-balances-consistency.ts @@ -1,7 +1,7 @@ import "@moonbeam-network/api-augment"; import { ApiDecoration } from "@polkadot/api/types"; import type { FrameSystemAccountInfo } from "@polkadot/types/lookup"; -import { StorageKey, Option, u128 } from "@polkadot/types"; +import chalk from "chalk"; import { expect } from "chai"; import { printTokens } from "../util/logging"; import { describeSmokeSuite } from "../util/setup-smoke-tests"; @@ -77,6 +77,7 @@ describeSmokeSuite(`Verify balances consistency`, { wssUrl, relayWssUrl }, (cont identities, subItentities, democracyDeposits, + democracyVotes, preimages, assets, assetsMetadata, @@ -84,6 +85,9 @@ describeSmokeSuite(`Verify balances consistency`, { wssUrl, relayWssUrl }, (cont localAssetsMetadata, localAssetDeposits, namedReserves, + locks, + delegatorStakingMigrations, + collatorStakingMigrations, ] = await Promise.all([ apiAt.query.proxy.proxies.entries(), apiAt.query.proxy.announcements.entries(), @@ -94,6 +98,7 @@ describeSmokeSuite(`Verify balances consistency`, { wssUrl, relayWssUrl }, (cont apiAt.query.identity.identityOf.entries(), apiAt.query.identity.subsOf.entries(), apiAt.query.democracy.depositOf.entries(), + apiAt.query.democracy.votingOf.entries(), apiAt.query.democracy.preimages.entries(), apiAt.query.assets.asset.entries(), apiAt.query.assets.metadata.entries(), @@ -101,8 +106,35 @@ describeSmokeSuite(`Verify balances consistency`, { wssUrl, relayWssUrl }, (cont apiAt.query.localAssets.metadata.entries(), apiAt.query.assetManager.localAssetDeposit.entries(), apiAt.query.balances.reserves.entries(), + apiAt.query.balances.locks.entries(), + specVersion >= 1700 && specVersion < 1800 + ? apiAt.query.parachainStaking.delegatorReserveToLockMigrations.entries() + : [], + specVersion >= 1700 && specVersion < 1800 + ? apiAt.query.parachainStaking.collatorReserveToLockMigrations.entries() + : [], ]); + const delegatorStakingMigrationAccounts = delegatorStakingMigrations.reduce( + (p, migration: any) => { + if (migration[1].isTrue) { + p[`0x${migration[0].toHex().slice(-40)}`] = true; + } + return p; + }, + {} as any + ) as { [account: string]: boolean }; + + const collatorStakingMigrationAccounts = collatorStakingMigrations.reduce( + (p, migration: any) => { + if (migration[1].isTrue) { + p[`0x${migration[0].toHex().slice(-40)}`] = true; + } + return p; + }, + {} as any + ) as { [account: string]: boolean }; + const expectedReserveByAccount: { [accountId: string]: { total: bigint; reserved: { [key: string]: bigint } }; } = [ @@ -130,18 +162,35 @@ describeSmokeSuite(`Verify balances consistency`, { wssUrl, relayWssUrl }, (cont mapping: mapping[1].unwrap().deposit.toBigInt(), }, })), - candidateInfo.map((candidate) => ({ - accountId: `0x${candidate[0].toHex().slice(-40)}`, - reserved: { - candidate: candidate[1].unwrap().bond.toBigInt(), - }, - })), - delegatorState.map((delegator) => ({ - accountId: `0x${delegator[0].toHex().slice(-40)}`, - reserved: { - delegator: delegator[1].unwrap().total.toBigInt(), - }, - })), + candidateInfo + .map((candidate) => + // Support the case of the migration in 1700 + specVersion < 1700 || + !collatorStakingMigrationAccounts[`0x${candidate[0].toHex().slice(-40)}`] + ? { + accountId: `0x${candidate[0].toHex().slice(-40)}`, + reserved: { + candidate: candidate[1].unwrap().bond.toBigInt(), + }, + } + : null + ) + .filter((r) => !!r), + , + delegatorState + .map((delegator) => + // Support the case of the migration in 1700 + specVersion < 1700 || + !delegatorStakingMigrationAccounts[`0x${delegator[0].toHex().slice(-40)}`] + ? { + accountId: `0x${delegator[0].toHex().slice(-40)}`, + reserved: { + delegator: delegator[1].unwrap().total.toBigInt(), + }, + } + : null + ) + .filter((r) => !!r), identities.map((identity) => ({ accountId: `0x${identity[0].toHex().slice(-40)}`, reserved: { @@ -251,30 +300,154 @@ describeSmokeSuite(`Verify balances consistency`, { wssUrl, relayWssUrl }, (cont p[v.accountId].total += Object.keys(v.reserved).reduce((p, key) => p + v.reserved[key], 0n); p[v.accountId].reserved = { ...p[v.accountId].reserved, ...v.reserved }; return p; - }, {}); + }, {} as { [key: string]: { total: bigint; reserved: { [key: string]: bigint } } }); debug(`Retrieved ${Object.keys(expectedReserveByAccount).length} deposits`); + const failedReserved = []; + for (const accountId of Object.keys(accounts)) { let reserved = accounts[accountId].data.reserved.toBigInt(); const expectedReserve = expectedReserveByAccount[accountId]?.total || 0n; - expect(reserved).to.equal( - expectedReserve, - `${accountId} (reserved: ${reserved} vs expected: ${expectedReserve})\n (${Object.keys( - expectedReserveByAccount[accountId]?.reserved || {} + if (reserved != expectedReserve) { + failedReserved.push( + `${accountId} (reserved: ${reserved} vs expected: ${expectedReserve})\n` + + ` (${Object.keys(expectedReserveByAccount[accountId]?.reserved || {}) + .map( + (key) => + `${key}: ${printTokens( + context.polkadotApi, + expectedReserveByAccount[accountId].reserved[key] + )}` + ) + .join(` - `)})` + ); + } + } + + const expectedLocksByAccount: { + [accountId: string]: { [id: string]: bigint }; + } = [ + candidateInfo + .map((candidate) => + // Support the case of the migration in 1700 + specVersion >= 1800 || + collatorStakingMigrationAccounts[`0x${candidate[0].toHex().slice(-40)}`] + ? { + accountId: `0x${candidate[0].toHex().slice(-40)}`, + locks: { + ColStake: candidate[1].unwrap().bond.toBigInt(), + }, + } + : null ) - .map( - (key) => - `${key}: ${printTokens( - context.polkadotApi, - expectedReserveByAccount[accountId].reserved[key] - )}` - ) - .join(` - `)})` + .filter((r) => !!r), + , + delegatorState + .map((delegator) => + // Support the case of the migration in 1700 + specVersion >= 1800 || + delegatorStakingMigrationAccounts[`0x${delegator[0].toHex().slice(-40)}`] + ? { + accountId: `0x${delegator[0].toHex().slice(-40)}`, + locks: { + DelStake: delegator[1].unwrap().total.toBigInt(), + }, + } + : null + ) + .filter((r) => !!r), + , + democracyVotes + .map( + (votes) => + votes[1].isDirect + ? { + accountId: `0x${votes[0].toHex().slice(-40)}`, + locks: { + democrac: votes[1].asDirect.votes.reduce((p, v) => { + const value = v[1].isStandard + ? v[1].asStandard.balance.toBigInt() + : v[1].asSplit.aye.toBigInt() + v[1].asSplit.nay.toBigInt(); + return p > value ? p : value; + }, 0n), + }, + } + : null // Not sure if in isDelegation should the balance be counted to the delegator ? + ) + .filter((d) => !!d), + ] + .flat() + .reduce( + (p, v) => { + if (!p[v.accountId]) { + p[v.accountId] = {}; + } + p[v.accountId] = { ...p[v.accountId], ...v.locks }; + return p; + }, + {} as { + [accountId: string]: { [id: string]: bigint }; + } ); + debug(`Retrieved ${Object.keys(expectedLocksByAccount).length} accounts with locks`); + + const failedLocks = []; + const locksByAccount = locks.reduce((p, lockSet) => { + p[`0x${lockSet[0].toHex().slice(-40)}`] = Object.values(lockSet[1].toArray()).reduce( + (p, lock) => ({ + ...p, + [lock.id.toHuman().toString()]: lock.amount.toBigInt(), + }), + {} + ); + return p; + }, {} as { [account: string]: { [id: string]: bigint } }); + + for (const accountId of new Set([ + ...Object.keys(locksByAccount), + ...Object.keys(expectedLocksByAccount), + ])) { + const locks = locksByAccount[accountId] || {}; + const expectedLocks = expectedLocksByAccount[accountId] || {}; + + for (const key of new Set([...Object.keys(expectedLocks), ...Object.keys(locks)])) { + if (expectedLocks[key] > locks[key]) { + failedLocks.push( + `${accountId} (lock ${key}: actual ${ + locks[key] && printTokens(context.polkadotApi, locks[key]) + } < expected: ${ + (expectedLocks[key] && printTokens(context.polkadotApi, expectedLocks[key])) || "" + })\n ${[...new Set([...Object.keys(expectedLocks), ...Object.keys(locks)])] + .map( + (key) => + ` - ${key}: actual ${(locks[key] || "") + .toString() + .padStart(23, " ")} - ${(expectedLocks[key] || "") + .toString() + .padStart(23, " ")}` + ) + .join("\n")}` + ); + } + } } - debug(`Verified ${Object.keys(accounts).length} total reserved balance`); + + if (failedLocks.length > 0 || failedReserved.length > 0) { + if (failedReserved.length > 0) { + console.log("Failed accounts reserves"); + console.log(chalk.red(failedReserved.join("\n"))); + } + if (failedLocks.length > 0) { + console.log("Failed accounts locks"); + console.log(chalk.red(failedLocks.join("\n"))); + } + expect(failedReserved.length, "Failed accounts reserves").to.equal(0); + expect(failedLocks.length, "Failed accounts locks").to.equal(0); + } + + debug(`Verified ${Object.keys(accounts).length} total reserved balance (at #${atBlockNumber})`); }); it("should match total supply", async function () { diff --git a/tests/smoke-tests/test-orbiter-consistency.ts b/tests/smoke-tests/test-orbiter-consistency.ts new file mode 100644 index 0000000000..9a14f513f8 --- /dev/null +++ b/tests/smoke-tests/test-orbiter-consistency.ts @@ -0,0 +1,107 @@ +import "@moonbeam-network/api-augment"; +import { ApiDecoration } from "@polkadot/api/types"; +import { bool, Option, u32 } from "@polkadot/types-codec"; +import type { PalletMoonbeamOrbitersCollatorPoolInfo } from "@polkadot/types/lookup"; +import type { AccountId20 } from "@polkadot/types/interfaces"; + +import { expect } from "chai"; +import { describeSmokeSuite } from "../util/setup-smoke-tests"; +import { StorageKey } from "@polkadot/types"; +const debug = require("debug")("smoke:orbiter"); + +const wssUrl = process.env.WSS_URL || null; +const relayWssUrl = process.env.RELAY_WSS_URL || null; + +describeSmokeSuite(`Verify orbiters`, { wssUrl, relayWssUrl }, (context) => { + let atBlockNumber: number = 0; + let apiAt: ApiDecoration<"promise"> = null; + let collatorsPools: [ + StorageKey<[AccountId20]>, + Option + ][] = null; + let registeredOrbiters: [StorageKey<[AccountId20]>, Option][] = null; + let counterForCollatorsPool: u32 = null; + + before("Setup api & retrieve data", async function () { + const runtimeVersion = await context.polkadotApi.runtimeVersion.specVersion.toNumber(); + atBlockNumber = (await context.polkadotApi.rpc.chain.getHeader()).number.toNumber(); + apiAt = await context.polkadotApi.at( + await context.polkadotApi.rpc.chain.getBlockHash(atBlockNumber) + ); + collatorsPools = await apiAt.query.moonbeamOrbiters.collatorsPool.entries(); + registeredOrbiters = + runtimeVersion >= 1605 ? await apiAt.query.moonbeamOrbiters.registeredOrbiter.entries() : []; + counterForCollatorsPool = await apiAt.query.moonbeamOrbiters.counterForCollatorsPool(); + }); + + it("should have reserved tokens", async function () { + const reserves = await apiAt.query.balances.reserves.entries(); + const orbiterReserves = reserves + .map((reserveSet) => + reserveSet[1].find((r) => r.id.toUtf8() == "orbi") + ? `0x${reserveSet[0].toHex().slice(-40)}` + : null + ) + .filter((r) => !!r); + + const orbiterRegisteredAccounts = registeredOrbiters.map((o) => `0x${o[0].toHex().slice(-40)}`); + + for (const reservedAccount of orbiterReserves) { + expect( + orbiterRegisteredAccounts, + `Account ${reservedAccount} has "orbi" reserve but is not orbiter.` + ).to.include(reservedAccount); + } + + for (const orbiterAccount of orbiterRegisteredAccounts) { + expect( + orbiterReserves, + `Account ${orbiterAccount} is orbiter but doesn't have "orbi" reserve.` + ).to.include(orbiterAccount); + } + debug(`Verified ${orbiterRegisteredAccounts.length} orbiter reserves`); + }); + + it("should be registered if in a pool", async function () { + for (const orbiterPool of collatorsPools) { + const collator = `0x${orbiterPool[0].toHex().slice(-40)}`; + const pool = orbiterPool[1].unwrap(); + const orbiterRegisteredAccounts = registeredOrbiters.map( + (o) => `0x${o[0].toHex().slice(-40)}` + ); + if (pool.maybeCurrentOrbiter.isSome) { + const selectedOrbiter = pool.maybeCurrentOrbiter.unwrap().accountId.toHex(); + const isRemoved = pool.maybeCurrentOrbiter.unwrap().removed.isTrue; + const poolOrbiters = pool.orbiters.map((o) => o.toHex()); + + if (isRemoved) { + expect( + poolOrbiters, + `Selected orbiter ${selectedOrbiter} is removed but ` + + `still in the pool ${collator} orbiters` + ).to.not.include(selectedOrbiter); + } else { + expect( + poolOrbiters, + `Selected orbiter ${selectedOrbiter} is not in the pool ${collator} orbiters` + ).to.include(selectedOrbiter); + } + + expect( + orbiterRegisteredAccounts, + `Account ${selectedOrbiter} is in a pool but not registered` + ).to.include(selectedOrbiter); + } + } + + debug(`Verified ${collatorsPools.length} orbiter pools`); + }); + + it("should not have more pool than the max allowed", async function () { + expect(collatorsPools.length, `Orbiter pool is too big`).to.be.at.most( + counterForCollatorsPool.toNumber() + ); + + debug(`Verified orbiter pools size`); + }); +}); diff --git a/tests/smoke-tests/test-polkadot-decoding.ts b/tests/smoke-tests/test-polkadot-decoding.ts new file mode 100644 index 0000000000..e386dd531f --- /dev/null +++ b/tests/smoke-tests/test-polkadot-decoding.ts @@ -0,0 +1,67 @@ +import { ApiDecoration } from "@polkadot/api/types"; +import chalk from "chalk"; +import { describeSmokeSuite } from "../util/setup-smoke-tests"; + +const wssUrl = process.env.WSS_URL || null; +const relayWssUrl = process.env.RELAY_WSS_URL || null; +const pageSize = (process.env.PAGE_SIZE && parseInt(process.env.PAGE_SIZE)) || 1000; + +describeSmokeSuite("Polkadot API - Storage items", { wssUrl, relayWssUrl }, (context) => { + let atBlockNumber: number = 0; + let apiAt: ApiDecoration<"promise"> = null; + + before("Setup api", async function () { + atBlockNumber = (await context.polkadotApi.rpc.chain.getHeader()).number.toNumber(); + apiAt = await context.polkadotApi.at( + await context.polkadotApi.rpc.chain.getBlockHash(atBlockNumber) + ); + }); + + // This test simply load all the storage items to make sure they can be loaded. + // It prevents issue where a storage item type is modified but the data is not correctly + // migrated. + it("should be decodable", async function () { + this.timeout(600000); // 1 hour should be enough + const modules = Object.keys(context.polkadotApi.query); + for (const moduleName of modules) { + console.log(` - ${moduleName}`); + const module = apiAt.query[moduleName]; + const fns = Object.keys(module); + if (moduleName == "system") { + // We skip system because too big and tested in other places too + continue; + } + for (const fn of fns) { + if (moduleName == "evm" && ["accountStorages", "accountCodes"].includes(fn)) { + // This is just H256 entries and quite big + continue; + } + const keys = Object.keys(module[fn]); + if (keys.includes("keysPaged")) { + // Map item + let startKey = ""; + let count = 0; + while (true) { + let query = await module[fn].entriesPaged({ + args: [], + pageSize, + startKey, + }); + + if (query.length == 0) { + break; + } + count += query.length; + startKey = query[query.length - 1][0].toString(); + } + console.log( + ` - ${fn}: ${count != 0 ? `${chalk.green(`✔`)} [${count} entries]` : "N/A"} ` + ); + } else { + await module[fn](); + console.log(` - ${fn}: ${chalk.green(`✔`)}`); + } + } + } + }); +}); diff --git a/tests/smoke-tests/test-relay-xcm-fees.ts b/tests/smoke-tests/test-relay-xcm-fees.ts index 76a1698e67..11b775c57c 100644 --- a/tests/smoke-tests/test-relay-xcm-fees.ts +++ b/tests/smoke-tests/test-relay-xcm-fees.ts @@ -3,12 +3,15 @@ import { ApiDecoration } from "@polkadot/api/types"; import type { FrameSystemAccountInfo } from "@polkadot/types/lookup"; import { expect } from "chai"; import { describeSmokeSuite } from "../util/setup-smoke-tests"; +import { MultiLocation } from "@polkadot/types/interfaces"; +import { it } from "mocha"; const debug = require("debug")("smoke:treasury"); const wssUrl = process.env.WSS_URL || null; const relayWssUrl = process.env.RELAY_WSS_URL || null; describeSmokeSuite(`Verify XCM weight fees for relay`, { wssUrl, relayWssUrl }, (context) => { + const conditionalIt = process.env.SKIP_RELAY_TESTS ? it.skip : it; const accounts: { [account: string]: FrameSystemAccountInfo } = {}; let atBlockNumber: number = 0; @@ -28,12 +31,13 @@ describeSmokeSuite(`Verify XCM weight fees for relay`, { wssUrl, relayWssUrl }, ); }); - it("should have value over relay expected fees", async function () { + conditionalIt("should have value over relay expected fees", async function () { // Load data - const transactInfos = await apiAt.query.xcmTransactor.transactInfoWithWeightLimit.entries(); - const relayRuntime = context.relayApi.runtimeVersion.specName.toString(); - console.log(relayRuntime); + const relayMultiLocation: MultiLocation = context.polkadotApi.createType( + "MultiLocation", + JSON.parse('{ "parents": 1, "interior": "Here" }') + ); const units = relayRuntime.startsWith("polkadot") ? 10_000_000_000n @@ -57,23 +61,35 @@ describeSmokeSuite(`Verify XCM weight fees for relay`, { wssUrl, relayWssUrl }, const relayBaseWeight = relayApiAt.consts.system.blockWeights.perClass.normal.baseExtrinsic.toBigInt(); + const expectedFeePerSecond = (coef * seconds) / relayBaseWeight; - expect(transactInfos.length, "Missing transactInfoWithWeightLimit data").to.be.at.least(1); - for (const transactInfo of transactInfos) { - const feePerSecond = transactInfo[1].unwrap().feePerSecond.toBigInt(); - expect( - feePerSecond >= expectedFeePerSecond, - `failed check: feePerSecond: ${feePerSecond} > expected ${expectedFeePerSecond}` - ).to.be.true; - expect( - // Conservative approach to allow up to 2 time the fees - feePerSecond < expectedFeePerSecond * 2n, - `failed check: feePerSecond: ${feePerSecond} < expected ${expectedFeePerSecond * 2n}` - ).to.be.true; + const parachainRuntime = context.polkadotApi.runtimeVersion.specVersion.toNumber(); + + let feePerSecondValueForRelay; + if (parachainRuntime >= 1600) { + feePerSecondValueForRelay = ( + (await apiAt.query.xcmTransactor.destinationAssetFeePerSecond(relayMultiLocation)) as any + ).unwrap(); + } else { + feePerSecondValueForRelay = ( + (await apiAt.query.xcmTransactor.transactInfoWithWeightLimit(relayMultiLocation)) as any + ).unwrap().feePerSecond; } + expect( + feePerSecondValueForRelay.toBigInt() >= expectedFeePerSecond, + `failed check: feePerSecond: ${feePerSecondValueForRelay} > expected ${expectedFeePerSecond}` + ).to.be.true; + expect( + // Conservative approach to allow up to 2 time the fees + feePerSecondValueForRelay.toBigInt() < expectedFeePerSecond * 2n, + `failed check: feePerSecond: ${feePerSecondValueForRelay} < expected ${ + expectedFeePerSecond * 2n + }` + ).to.be.true; + debug( - `Verified feePerSecond for ${transactInfos.length} transactInfos ` + + `Verified feePerSecond for ${relayMultiLocation} transactInfos ` + `within relay base weight range` ); }); diff --git a/tests/smoke-tests/test-staking-consistency.ts b/tests/smoke-tests/test-staking-consistency.ts index 304c66d369..53613987f8 100644 --- a/tests/smoke-tests/test-staking-consistency.ts +++ b/tests/smoke-tests/test-staking-consistency.ts @@ -50,18 +50,26 @@ describeSmokeSuite(`Verify staking consistency`, { wssUrl, relayWssUrl }, (conte candidatePool = await apiAt.query.parachainStaking.candidatePool(); allTopDelegations = await apiAt.query.parachainStaking.topDelegations.entries(); - delegatorsPerCandidates = allDelegatorState.reduce((p, state) => { - for (const delegation of state[1].unwrap().delegations) { - if (!p[delegation.owner.toHex()]) { - p[delegation.owner.toHex()] = []; + delegatorsPerCandidates = allDelegatorState.reduce( + (p, state) => { + for (const delegation of state[1].unwrap().delegations) { + if (!p[delegation.owner.toHex()]) { + p[delegation.owner.toHex()] = []; + } + p[delegation.owner.toHex()].push({ + delegator: `0x${state[0].toHex().slice(-40)}`, + delegation, + }); } - p[delegation.owner.toHex()].push({ - delegator: `0x${state[0].toHex().slice(-40)}`, - delegation, - }); + return p; + }, + {} as { + [key: `0x${string}`]: { + delegator: `0x${string}`; + delegation: ParachainStakingBond; + }[]; } - return p; - }, {}); + ); }); it("candidate totalCounted matches top X delegations", async function () { @@ -194,14 +202,14 @@ describeSmokeSuite(`Verify staking consistency`, { wssUrl, relayWssUrl }, (conte if (specVersion < 1500) { for (const state of allDelegatorState) { const delegator = `0x${state[0].toHex().slice(-40)}`; - const totalRequestAmount = Array.from(state[1].unwrap().requests.requests.values()).reduce( - (p, v) => p + v.amount.toBigInt(), - 0n - ); + const totalRequestAmount = Array.from( + (state[1] as any).unwrap().requests.requests.values() + ).reduce((p, v: any) => p + v.amount.toBigInt(), 0n); - expect(state[1].unwrap().requests.lessTotal.toBigInt(), `delegator: ${delegator}`).to.equal( - totalRequestAmount - ); + expect( + (state[1] as any).unwrap().requests.lessTotal.toBigInt(), + `delegator: ${delegator}` + ).to.equal(totalRequestAmount); checks++; } } diff --git a/tests/smoke-tests/test-staking-rewards.ts b/tests/smoke-tests/test-staking-rewards.ts new file mode 100644 index 0000000000..ef9f88da15 --- /dev/null +++ b/tests/smoke-tests/test-staking-rewards.ts @@ -0,0 +1,446 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { BN } from "@polkadot/util"; +import { u128, u32 } from "@polkadot/types"; +import { ApiPromise } from "@polkadot/api"; +import { expect } from "chai"; +import { describeSmokeSuite } from "../util/setup-smoke-tests"; +const debug = require("debug")("smoke:staking"); + +const wssUrl = process.env.WSS_URL || null; +const relayWssUrl = process.env.RELAY_WSS_URL || null; + +if (!process.env.SKIP_BLOCK_CONSISTENCY_TESTS) { + describeSmokeSuite(`Verify staking rewards`, { wssUrl, relayWssUrl }, function (context) { + it("rewards are given as expected", async function () { + this.timeout(500000); + const atBlockNumber = process.env.BLOCK_NUMBER + ? parseInt(process.env.BLOCK_NUMBER) + : (await context.polkadotApi.rpc.chain.getHeader()).number.toNumber(); + await assertRewardsAtRoundBefore(context.polkadotApi, atBlockNumber); + }); + }); +} + +async function assertRewardsAtRoundBefore(api: ApiPromise, nowBlockNumber: number) { + const nowBlockHash = await api.rpc.chain.getBlockHash(nowBlockNumber); + const nowRound = await (await api.at(nowBlockHash)).query.parachainStaking.round(); + const previousRoundBlock = nowRound.first.subn(1).toNumber(); + + await assertRewardsAt(api, previousRoundBlock); +} + +async function assertRewardsAt(api: ApiPromise, nowBlockNumber: number) { + const nowBlockHash = await api.rpc.chain.getBlockHash(nowBlockNumber); + const nowRound = await (await api.at(nowBlockHash)).query.parachainStaking.round(); + const nowRoundNumber = nowRound.current; + const nowRoundFirstBlock = nowRound.first; + const nowRoundFirstBlockHash = await api.rpc.chain.getBlockHash(nowRoundFirstBlock); + const apiAtRewarded = await api.at(nowRoundFirstBlockHash); + const rewardDelay = apiAtRewarded.consts.parachainStaking.rewardPaymentDelay; + const priorRewardedBlockHash = await api.rpc.chain.getBlockHash(nowRoundFirstBlock.subn(1)); + const _specVersion = (await apiAtRewarded.query.system.lastRuntimeUpgrade()) + .unwrap() + .specVersion.toNumber(); + + // obtain data from original round + const originalRoundNumber = (await apiAtRewarded.query.parachainStaking.round()).current.sub( + rewardDelay + ); + let iterOriginalRoundBlock = nowRoundFirstBlock.toBn(); + while (true) { + const blockHash = await api.rpc.chain.getBlockHash(iterOriginalRoundBlock); + const round = await (await api.at(blockHash)).query.parachainStaking.round(); + if ( + round.current.eq(originalRoundNumber) || + iterOriginalRoundBlock.sub(round.length).toNumber() < 0 + ) { + break; + } + + // go previous round + iterOriginalRoundBlock = iterOriginalRoundBlock.sub(round.length); + } + // we go to the last block of the (original round - 1) since data is snapshotted at round start. + const originalRoundPriorBlock = iterOriginalRoundBlock.subn(1); + const originalRoundPriorBlockHash = await api.rpc.chain.getBlockHash(originalRoundPriorBlock); + const apiAtOriginal = await api.at(originalRoundPriorBlockHash); + + debug(` + now ${nowRound.current.toString()} (${nowBlockNumber} / ${nowBlockHash.toHex()}) + round ${originalRoundNumber.toString()} (prior round last block \ + ${originalRoundPriorBlock} / ${originalRoundPriorBlockHash.toHex()}) + paid in ${nowRoundNumber.toString()} (first block \ + ${nowRoundFirstBlock.toNumber()} / ${nowRoundFirstBlockHash.toHex()} / prior \ + ${priorRewardedBlockHash.toHex()})`); + + // collect info about staked value from collators and delegators + const apiAtPriorRewarded = await api.at(priorRewardedBlockHash); + const atStake = await apiAtPriorRewarded.query.parachainStaking.atStake.entries( + originalRoundNumber + ); + const stakedValue: StakedValue = {}; + const collatorCount = atStake.length; + + const collators: Set = new Set(); + const delegators: Set = new Set(); + for (const [ + { + args: [_, accountId], + }, + { bond, total, delegations }, + ] of atStake) { + const collatorId = accountId.toHex(); + collators.add(collatorId); + const points = await apiAtPriorRewarded.query.parachainStaking.awardedPts( + originalRoundNumber, + accountId + ); + + const collatorInfo: StakedValueData = { + id: collatorId, + bond, + total, + points, + delegators: {}, + }; + + const topDelegations = new Set( + (await apiAtOriginal.query.parachainStaking.topDelegations(accountId)) + .unwrap() + .delegations.map((d) => d.owner.toHex()) + ); + for (const { owner, amount } of delegations) { + if (!topDelegations.has(owner.toHex())) { + continue; + } + const id = owner.toHex(); + delegators.add(id); + collatorInfo.delegators[id] = { + id: id, + amount: amount, + }; + } + + for (const topDelegation of topDelegations) { + if (!Object.keys(collatorInfo.delegators).includes(topDelegation)) { + throw new Error( + `${topDelegation} is missing from collatorInfo ` + + `for round ${originalRoundNumber.toString()}` + ); + } + } + for (const delegator of Object.keys(collatorInfo.delegators)) { + if (!topDelegations.has(delegator as any)) { + throw new Error( + `${delegator} is missing from topDelegations for round ${originalRoundNumber.toString()}` + ); + } + } + + stakedValue[collatorId] = collatorInfo; + } + expect(collatorCount).to.equal( + Object.keys(stakedValue).length, + `collator count mismatch for round ${originalRoundNumber.toString()}` + ); + + // calculate reward amounts + const parachainBondInfo = await apiAtPriorRewarded.query.parachainStaking.parachainBondInfo(); + const parachainBondPercent = new Percent(parachainBondInfo.percent); + const totalStaked = await apiAtPriorRewarded.query.parachainStaking.staked(originalRoundNumber); + const totalPoints = await apiAtPriorRewarded.query.parachainStaking.points(originalRoundNumber); + const inflation = await apiAtPriorRewarded.query.parachainStaking.inflationConfig(); + const totalIssuance = await apiAtPriorRewarded.query.balances.totalIssuance(); + const collatorCommissionRate = + await apiAtPriorRewarded.query.parachainStaking.collatorCommission(); + + const range = { + min: new Perbill(inflation.round.min).of(totalIssuance), + ideal: new Perbill(inflation.round.ideal).of(totalIssuance), + max: new Perbill(inflation.round.max).of(totalIssuance), + }; + + const totalRoundIssuance = (function () { + if (totalStaked.lt(inflation.expect.min)) { + return range.min; + } else if (totalStaked.gt(inflation.expect.max)) { + return range.max; + } else { + return range.ideal; + } + })(); + + // calculate total staking reward + const firstBlockRewardedEvents = await apiAtRewarded.query.system.events(); + let reservedForParachainBond = new BN(0); + for (const { phase, event } of firstBlockRewardedEvents) { + if (!phase.isInitialization) { + continue; + } + // only deduct parachainBondReward if it was transferred (event must exist) + if (apiAtRewarded.events.parachainStaking.ReservedForParachainBond.is(event)) { + reservedForParachainBond = event.data[1] as any; + break; + } + } + + const totalStakingReward = (function () { + const parachainBondReward = parachainBondPercent.of(totalRoundIssuance); + if (!reservedForParachainBond.isZero()) { + expect( + parachainBondReward.eq(reservedForParachainBond), + `parachain bond amount does not match \ + ${parachainBondReward.toString()} != ${reservedForParachainBond.toString()} \ + for round ${originalRoundNumber.toString()}` + ).to.be.true; + return totalRoundIssuance.sub(parachainBondReward); + } + + return totalRoundIssuance; + })(); + + const delayedPayout = ( + await apiAtRewarded.query.parachainStaking.delayedPayouts(originalRoundNumber) + ).unwrap(); + expect( + delayedPayout.totalStakingReward.eq(totalStakingReward), + `reward amounts do not match \ + ${delayedPayout.totalStakingReward.toString()} != ${totalStakingReward.toString()} \ + for round ${originalRoundNumber.toString()}` + ).to.be.true; + + // verify rewards + const latestBlock = await api.rpc.chain.getBlock(); + const latestRoundNumber = latestBlock.block.header.number.toNumber(); + const awardedCollators = ( + await apiAtPriorRewarded.query.parachainStaking.awardedPts.keys(originalRoundNumber) + ).map((awarded) => awarded.args[1].toHex()); + + const awardedCollatorCount = awardedCollators.length; + + const maxRoundChecks = Math.min(latestRoundNumber - nowBlockNumber + 1, awardedCollatorCount); + debug(`verifying ${maxRoundChecks} blocks for rewards (awarded ${awardedCollatorCount})`); + const expectedRewardedCollators = new Set(awardedCollators); + const rewardedCollators = new Set<`0x${string}`>(); + for await (const i of new Array(maxRoundChecks).keys()) { + const blockNumber = nowRoundFirstBlock.addn(i); + const rewarded = await assertRewardedEventsAtBlock( + api, + blockNumber, + delegators, + collators, + collatorCommissionRate, + totalRoundIssuance, + totalPoints, + totalStakingReward, + stakedValue + ); + + expect(rewarded.collator, `collator was not rewarded at block ${blockNumber}`).to.exist; + + rewardedCollators.add(rewarded.collator); + const expectedRewardedDelegators = new Set( + Object.entries(stakedValue[rewarded.collator].delegators) + .filter(([_, value]) => !value.amount.isZero()) + .map(([key, _]) => key) + ); + + const notRewarded = new Set( + [...expectedRewardedDelegators].filter((d) => !rewarded.delegators.has(d)) + ); + const unexpectedlyRewarded = new Set( + [...rewarded.delegators].filter((d) => !expectedRewardedDelegators.has(d)) + ); + expect( + notRewarded, + `delegators "${[...notRewarded].join(", ")}" were not rewarded for collator "${ + rewarded.collator + }" at block ${blockNumber}` + ).to.be.empty; + expect( + unexpectedlyRewarded, + `delegators "${[...unexpectedlyRewarded].join( + ", " + )}" were unexpectedly rewarded for collator "${rewarded.collator}" at block ${blockNumber}` + ).to.be.empty; + } + + const notRewarded = new Set( + [...expectedRewardedCollators].filter((d) => !rewardedCollators.has(d)) + ); + const unexpectedlyRewarded = new Set( + [...rewardedCollators].filter((d) => !expectedRewardedCollators.has(d)) + ); + expect( + unexpectedlyRewarded, + `collators "${[...unexpectedlyRewarded].join( + ", " + )}" were unexpectedly rewarded for round ${originalRoundNumber.toString()}` + ).to.be.empty; + expect( + notRewarded, + `collators "${[...notRewarded].join( + ", " + )}" were not rewarded for round ${originalRoundNumber.toString()}` + ).to.be.empty; +} + +async function assertRewardedEventsAtBlock( + api: ApiPromise, + rewardedBlockNumber: BN, + delegators: Set, + collators: Set, + collatorCommissionRate: BN, + totalRoundIssuance: BN, + totalPoints: u32, + totalStakingReward: BN, + stakedValue: StakedValue +): Promise { + const nowRoundRewardBlockHash = await api.rpc.chain.getBlockHash(rewardedBlockNumber); + const apiAtBlock = await api.at(nowRoundRewardBlockHash); + + debug(`> block ${rewardedBlockNumber} (${nowRoundRewardBlockHash})`); + const rewards: { [key: `0x${string}`]: { account: string; amount: u128 } } = {}; + const blockEvents = await apiAtBlock.query.system.events(); + let rewardCount = 0; + for (const { phase, event } of blockEvents) { + if (!phase.isInitialization) { + continue; + } + + if (apiAtBlock.events.parachainStaking.Rewarded.is(event)) { + rewardCount++; + rewards[event.data[0].toHex()] = { + account: event.data[0].toHex(), + amount: event.data[1] as u128, + }; + } + } + expect(rewardCount).to.equal(Object.keys(rewards).length, "reward count mismatch"); + + let delegationReward: BN = new BN(0); + let collatorInfo: any = {}; + let rewarded = { + collator: null as `0x${string}`, + delegators: new Set(), + }; + + for (const accountId of Object.keys(rewards) as `0x${string}`[]) { + if (collators.has(accountId)) { + // collator is always paid first so this is guaranteed to execute first + collatorInfo = stakedValue[accountId]; + const totalCollatorCommissionReward = new Perbill(collatorCommissionRate).of( + totalRoundIssuance + ); + const pointsShare = new Perbill(collatorInfo.points, totalPoints); + const collatorReward = pointsShare.of(totalStakingReward); + + if (!stakedValue[accountId].delegators) { + assertEqualWithAccount(rewards[accountId].amount, collatorReward, `${accountId} (COL)`); + } else { + const collatorCommissionReward = pointsShare.of(totalCollatorCommissionReward); + delegationReward = collatorReward.sub(collatorCommissionReward); + const bondShare = new Perbill(collatorInfo.bond, collatorInfo.total); + const collatorBondReward = bondShare.of(delegationReward); + const candidateReward = collatorBondReward.add(collatorCommissionReward); + assertEqualWithAccount(rewards[accountId].amount, candidateReward, `${accountId} (COL)`); + } + rewarded.collator = accountId; + } else if (delegators.has(accountId)) { + expect( + collatorInfo.delegators, + "collator was not paid before the delegator (possibly not at all)" + ).to.exist; + // skip checking if rewarded amount was zero + if (rewards[accountId].amount.isZero()) { + continue; + } + const bondShare = new Perbill(collatorInfo.delegators[accountId].amount, collatorInfo.total); + const candidateReward = bondShare.of(delegationReward); + rewarded.delegators.add(accountId); + assertEqualWithAccount(rewards[accountId].amount, candidateReward, `${accountId} (DEL)`); + } else { + throw Error(`invalid key ${accountId}, neither collator not delegator`); + } + } + + return rewarded; +} + +function assertEqualWithAccount(a: BN, b: BN, account: string) { + const diff = a.sub(b); + + expect( + diff.abs().isZero(), + `${account} ${a.toString()} != ${b.toString()}, difference of ${diff.abs().toString()}` + ).to.be.true; +} + +type Rewarded = { collator: `0x${string}` | null; delegators: Set }; + +type StakedValueData = { + id: string; + bond: u128; + total: u128; + points: u32; + delegators: { [key: string]: { id: string; amount: u128 } }; +}; + +type StakedValue = { + [key: string]: StakedValueData; +}; + +class Perthing { + private unit: BN; + private perthing: BN; + + constructor(unit: BN, numerator: BN, denominator?: BN) { + this.unit = unit; + if (denominator) { + this.perthing = numerator.mul(unit).div(denominator); + } else { + this.perthing = numerator; + } + } + + of(value: BN): BN { + // return this.perthing.mul(value).divRound(this.unit); + return this.divNearest(this.perthing.mul(value), this.unit); + } + + toString(): string { + return `${this.perthing.toString()}`; + } + + divNearest(a: any, num: BN) { + var dm = a.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1) as any; + var cmp = mod.cmp(half); + + // Round down + if (cmp <= 0 || (r2 === 1 && cmp === 0)) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + } +} + +class Perbill extends Perthing { + constructor(numerator: BN, denominator?: BN) { + super(new BN(1_000_000_000), numerator, denominator); + } +} + +class Percent extends Perthing { + constructor(numerator: BN, denominator?: BN) { + super(new BN(100), numerator, denominator); + } +} diff --git a/tests/spawn-fork-node.ts b/tests/spawn-fork-node.ts new file mode 100644 index 0000000000..23dcaf5b3b --- /dev/null +++ b/tests/spawn-fork-node.ts @@ -0,0 +1,26 @@ +import "@polkadot/api-augment"; +import { startParachainNodes } from "./util/para-node"; + +const SPEC_FILE = process.env.SPEC_FILE; +const PARA_ID = process.env.PARA_ID && parseInt(process.env.PARA_ID); + +if (!SPEC_FILE) { + console.error(`Missing SPEC_FILE (ex: ~/exports/moonbeam-state.mod.json)`); + process.exit(1); +} + +if (!PARA_ID) { + console.error(`Missing PARA_ID (ex: 2004)`); + process.exit(1); +} + +startParachainNodes({ + parachain: { + spec: SPEC_FILE, + binary: "local", + }, + paraId: PARA_ID, + relaychain: { + binary: "local", + }, +}); diff --git a/tests/state-modifier.ts b/tests/state-modifier.ts new file mode 100644 index 0000000000..8008aa78de --- /dev/null +++ b/tests/state-modifier.ts @@ -0,0 +1,265 @@ +import fs from "fs"; +import readline from "readline"; +import chalk from "chalk"; + +import { xxhashAsU8a, blake2AsU8a } from "@polkadot/util-crypto"; +import { u8aConcat, u8aToHex, hexToBigInt, nToHex } from "@polkadot/util"; + +const storageKey = (module, name) => { + return u8aToHex(u8aConcat(xxhashAsU8a(module, 128), xxhashAsU8a(name, 128))); +}; + +const storageBlake128MapKey = (module, name, key) => { + return u8aToHex( + u8aConcat(xxhashAsU8a(module, 128), xxhashAsU8a(name, 128), blake2AsU8a(key, 128), key) + ); +}; + +// const ALITH_PRIV_KEY = "0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"; +// const BOB_PRIV_KEY = "0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b"; + +async function main(inputFile: string, outputFile?: string) { + const ALITH = "0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac"; + const ALITH_SESSION = "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"; + + console.log(chalk.blueBright(` * Preparing Alith: ${ALITH} session ${ALITH_SESSION}`)); + + const ALITH_MIN_BALANCE = 10_000n * 10n ** 18n; + + const in1Stream = fs.createReadStream(inputFile, "utf8"); + const rl1 = readline.createInterface({ + input: in1Stream, + crlfDelay: Infinity, + }); + + const destFile = outputFile || inputFile.replace(/\.json/, ".mod.json"); + if (destFile == inputFile) { + console.log(`Expected json file`); + return -1; + } + + let messagingState = null; + const collatorLinePrefix = ` "${storageKey("ParachainStaking", "SelectedCandidates")}`; + const orbiterLinePrefix = ` "${storageKey("MoonbeamOrbiters", "CollatorsPool")}`; + const nimbusBlockNumberPrefix = ` "${storageKey("AuthorInherent", "HighestSlotSeen")}"`; + const authorLinePrefix = ` "${storageKey("AuthorMapping", "MappingWithDeposit")}`; + const revelentMessagingStatePrefix = ` "${storageKey( + "ParachainSystem", + "RelevantMessagingState" + )}`; + const authorEligibilityRatioPrefix = ` "${storageKey("AuthorFilter", "EligibleRatio")}`; + const authorEligibilityCountPrefix = ` "${storageKey("AuthorFilter", "EligibleCount")}`; + const councilLinePrefix = ` "${storageKey("CouncilCollective", "Members")}`; + const techCommitteeeLinePrefix = ` "${storageKey("TechCommitteeCollective", "Members")}`; + const parachainIdPrefix = ` "${storageKey("ParachainInfo", "ParachainId")}`; + const lastDmqMqcHeadPrefix = ` "${storageKey("ParachainSystem", "LastDmqMqcHead")}`; + const alithBalancePrefix = ` "${storageBlake128MapKey("System", "Account", ALITH)}`; + const totalIssuanceBalancePrefix = ` "${storageKey("Balances", "TotalIssuance")}`; + const bootnodesPrefix = ` "/`; + + // List all the collator author mapping + const authorMappingLines = {}; + + // First pass + let collators: string[] = []; + let orbiters: string[] = []; + // let selectedCollator = null; + let totalIssuance: bigint; + let alithAccountData; + for await (const line of rl1) { + if (line.startsWith(collatorLinePrefix)) { + const data = line.split('"')[3].slice(2); + // the data contains arbitrary size as bytes at the beginning so we parse from the end; + for (let i = data.length; i > 40; i -= 40) { + collators.push(`0x${data.slice(i - 40, i)}`); + } + } + if (line.startsWith(orbiterLinePrefix)) { + orbiters.push(`0x${line.split('"')[1].slice(-40)}`); + } + if (line.startsWith(authorLinePrefix)) { + const collator = line.split('"')[3].slice(0, 42); + authorMappingLines[collator] = line; + } + if (line.startsWith(revelentMessagingStatePrefix)) { + messagingState = line.split('"')[3]; + } + if (line.startsWith(totalIssuanceBalancePrefix)) { + totalIssuance = hexToBigInt(line.split('"')[3], { isLe: true }); + } + if (line.startsWith(alithBalancePrefix)) { + alithAccountData = line.split('"')[3]; + } + } + // We make sure the collator is not an orbiter + const selectedCollator = collators.find((c) => !orbiters.includes(c) && authorMappingLines[c]); + console.log( + chalk.blueBright( + ` * Found collator: ${selectedCollator} session 0x${authorMappingLines[selectedCollator] + .split('"')[1] + .slice(-64)}` + ) + ); + + if (!selectedCollator) { + console.log(`Couldn't find collator with prefix ${authorLinePrefix}`); + return; + } + const selectedCollatorMappingKey = authorMappingLines[selectedCollator].split('"')[1]; + + if (!messagingState) { + console.log(`Couldn't find messaging state with prefix ${revelentMessagingStatePrefix}`); + return; + } + + // We add 1_000 tokens to alith if needed (for governance...) + // and so we need to add it to the totalIssuance to stay consistent; + const alithFreeBalance = hexToBigInt(alithAccountData.slice(34, 66), { isLe: true }); + let newAlithAccountData = alithAccountData; + let newTotalIssuance = totalIssuance; + if (alithFreeBalance < ALITH_MIN_BALANCE) { + newAlithAccountData = `${alithAccountData.slice(0, 34)}${nToHex( + alithFreeBalance + ALITH_MIN_BALANCE, + { + isLe: true, + bitLength: 128, + } + ).slice(2)}${alithAccountData.slice(66)}`; + newTotalIssuance = totalIssuance + ALITH_MIN_BALANCE; + } + + const in2Stream = fs.createReadStream(inputFile, "utf8"); + const rl2 = readline.createInterface({ + input: in2Stream, + crlfDelay: Infinity, + }); + const outStream = fs.createWriteStream(destFile, { encoding: "utf8" }); + + const selectedAuthorMappingPrefix = ` "${selectedCollatorMappingKey}"`; + const selectedNimbusLookup = storageBlake128MapKey( + "AuthorMapping", + "NimbusLookup", + selectedCollator + ); + const selectedNimbusLookupPrefix = ` "${selectedNimbusLookup}"`; + const alithAuthorMappingPrefix = ` "${storageBlake128MapKey( + "AuthorMapping", + "MappingWithDeposit", + ALITH_SESSION + )}`; + + for await (const line of rl2) { + if (line.startsWith(alithAuthorMappingPrefix)) { + console.log( + ` ${chalk.red( + ` - Removing (Extra) AuthorMapping.MappingWithDeposit ${ALITH_SESSION}` + )}\n\t${line}` + ); + } else if (line.startsWith(nimbusBlockNumberPrefix)) { + console.log(` ${chalk.red(` - Removing AuthorInherent.HighestSlotSeen`)}\n\t${line}`); + let newLine = `${nimbusBlockNumberPrefix}: "0x00000000",\n`; + console.log(` ${chalk.green(` + Adding AuthorInherent.HighestSlotSeen`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(selectedAuthorMappingPrefix)) { + console.log( + ` ${chalk.red( + ` - Removing AuthorMapping.MappingWithDeposit ${ + authorMappingLines[selectedCollator].split('"')[1] + }` + )}\n\t${line}` + ); + let newLine = ` "${storageBlake128MapKey( + "AuthorMapping", + "MappingWithDeposit", + ALITH_SESSION + )}": "${authorMappingLines[selectedCollator] + .split('"')[3] + .slice(0, -64)}${ALITH_SESSION.slice(2)}",\n`; + console.log( + ` ${chalk.green(` + Adding AuthorMapping.MappingWithDeposit: Alith`)}\n\t${newLine}` + ); + outStream.write(newLine); + } else if (line.startsWith(selectedNimbusLookupPrefix)) { + console.log( + ` ${chalk.red(` - Removing AuthorMapping.NimbusLookup ${selectedCollator}`)}\n\t${line}` + ); + let newLine = `${selectedNimbusLookupPrefix}: "${ALITH_SESSION}",\n`; + console.log(` ${chalk.green(` + Adding AuthorMapping.NimbusLookup: Alith`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(revelentMessagingStatePrefix)) { + console.log( + ` ${chalk.red(` - Removing ParachainSystem.RelevantMessagingState`)}\n\t${line}` + ); + const newLine = ` "${storageKey( + "ParachainSystem", + "RelevantMessagingState" + )}": "0x${new Array(64).fill(0).join("")}${messagingState.slice(66)}",\n`; + console.log( + ` ${chalk.green(` + Adding ParachainSystem.RelevantMessagingState`)}\n\t${newLine}` + ); + outStream.write(newLine); + } else if (line.startsWith(authorEligibilityRatioPrefix)) { + console.log(` ${chalk.red(` - Removing AuthorFilter.EligibleRatio`)}\n\t${line}`); + const newLine = ` "${storageKey("AuthorFilter", "EligibleRatio")}": "0x64",\n`; + console.log(` ${chalk.green(` + Adding AuthorFilter.EligibleRatio`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(authorEligibilityCountPrefix)) { + console.log(` ${chalk.red(` - Removing AuthorFilter.EligibleCount`)}\n\t${line}`); + + const newLine = ` "${storageKey("AuthorFilter", "EligibleCount")}": "0xFF000000",\n`; + console.log(` ${chalk.green(` + Adding AuthorFilter.EligibleCount`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(councilLinePrefix)) { + console.log(` ${chalk.red(` - Removing CouncilCollective.Members`)}\n\t${line}`); + const newLine = ` "${storageKey("CouncilCollective", "Members")}": "0x04${ALITH.slice( + 2 + )}",\n`; + console.log(` ${chalk.green(` + Adding CouncilCollective.Members`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(techCommitteeeLinePrefix)) { + console.log(` ${chalk.red(` - Removing TechCommitteeCollective.Members`)}\n\t${line}`); + const newLine = ` "${storageKey( + "TechCommitteeCollective", + "Members" + )}": "0x04${ALITH.slice(2)}",\n`; + console.log(` ${chalk.green(` + Adding TechCommitteeCollective.Members`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(lastDmqMqcHeadPrefix)) { + console.log(` ${chalk.red(` - Removing ParachainSystem.LastDmqMqcHead`)}\n\t${line}`); + } else if (line.startsWith(alithBalancePrefix)) { + console.log(` ${chalk.red(` - Removing System.Account: Alith`)}\n\t${line}`); + const newLine = ` "${storageBlake128MapKey( + "System", + "Account", + ALITH + )}": "${newAlithAccountData}",\n`; + console.log(` ${chalk.green(` + Adding System.Account: Alith`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(totalIssuanceBalancePrefix)) { + console.log(` ${chalk.red(` - Removing Balances.TotalIssuance`)}\n\t${line}`); + + const newLine = ` "${storageKey("Balances", "TotalIssuance")}": "${nToHex( + newTotalIssuance, + { + isLe: true, + bitLength: 128, + } + )}",\n`; + console.log(` ${chalk.green(` + Adding Balances.TotalIssuance`)}\n\t${newLine}`); + outStream.write(newLine); + } else if (line.startsWith(bootnodesPrefix)) { + console.log(` ${chalk.red(` - Removing bootnode`)}\n\t${line}`); + } else { + outStream.write(line); + outStream.write("\n"); + } + // !line.startsWith(parachainIdPrefix) + } + // outStream.write("}\n") + outStream.end(); + + console.log(`Forked genesis generated successfully. Find it at ${destFile}`); +} + +const args = process.argv.slice(2); +main(args[0], args[1]); diff --git a/tests/tests/index.d.ts b/tests/tests/index.d.ts new file mode 100644 index 0000000000..44b2df74f5 --- /dev/null +++ b/tests/tests/index.d.ts @@ -0,0 +1,2 @@ +declare module "randchacha"; +declare module "tcp-port-used"; diff --git a/tests/tests/test-asset-manager.ts b/tests/tests/test-asset-manager.ts deleted file mode 100644 index 9a4025bff6..0000000000 --- a/tests/tests/test-asset-manager.ts +++ /dev/null @@ -1,429 +0,0 @@ -import Keyring from "@polkadot/keyring"; -import { expect } from "chai"; -import { BN, bnToHex } from "@polkadot/util"; -import { KeyringPair } from "@polkadot/keyring/types"; - -import { ALITH, ALITH_PRIV_KEY, GLMR } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; -import { verifyLatestBlockFees } from "../util/block"; - -const palletId = "0x6D6f646c617373746d6E67720000000000000000"; - -const assetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: new BN(12), - isFrozen: false, -}; -const sourceLocation = { XCM: { parents: 1, interior: "Here" } }; -const newSourceLocation = { XCM: { parents: 1, interior: { X1: { Parachain: 1000 } } } }; - -describeDevMoonbeam("XCM - asset manager - register foreign asset", (context) => { - it("should be able to register a foreign asset and set unit per sec", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - const alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApi; - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - // Look for assetId in events - let assetId: string; - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 0, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ((await parachainOne.query.assets.asset(assetId)) as any).unwrap(); - expect(registeredAsset.owner.toString()).to.eq(palletId); - - await verifyLatestBlockFees(context, expect); - }); -}); - -describeDevMoonbeam("XCM - asset manager - register local asset", (context) => { - it("should be able to register a local asset", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - const alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApi; - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.registerLocalAsset(ALITH, ALITH, true, new BN(1)) - ) - ); - // Look for assetId in events - let assetId: string; - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // check asset in storage - const registeredAsset = ((await parachainOne.query.localAssets.asset(assetId)) as any).unwrap(); - expect(registeredAsset.owner.toString()).to.eq(ALITH); - - // check deposit in storage - const deposit = ( - (await parachainOne.query.assetManager.localAssetDeposit(assetId)) as any - ).unwrap(); - expect(deposit.creator.toString()).to.eq(ALITH); - - await verifyLatestBlockFees(context, expect); - }); -}); - -describeDevMoonbeam("XCM - asset manager - Change existing asset", (context) => { - let assetId: string; - let alith: KeyringPair; - before("should be able to change existing asset type", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApi; - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 1, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ((await parachainOne.query.assets.asset(assetId)) as any).unwrap(); - expect(registeredAsset.owner.toString()).to.eq(palletId); - - await verifyLatestBlockFees(context, expect); - }); - - it("should change the asset Id", async function () { - // ChangeAssetType - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.changeExistingAssetType(assetId, newSourceLocation, 1) - ) - ); - - // asset_type - let assetType = (await context.polkadotApi.query.assetManager.assetIdType(assetId)) as Object; - - // assetId - let id = ( - (await context.polkadotApi.query.assetManager.assetTypeId(newSourceLocation)) as any - ).unwrap(); - - // asset units per second changed - let assetUnitsPerSecond = ( - (await context.polkadotApi.query.assetManager.assetTypeUnitsPerSecond( - newSourceLocation - )) as any - ).unwrap(); - - // Supported assets - let supportedAssets = - (await context.polkadotApi.query.assetManager.supportedFeePaymentAssets()) as any; - - expect(assetUnitsPerSecond.toString()).to.eq(new BN(1).toString()); - expect(assetType.toString()).to.eq(JSON.stringify(newSourceLocation).toLowerCase()); - expect(bnToHex(id)).to.eq(assetId); - expect(supportedAssets[0].toString()).to.eq(JSON.stringify(newSourceLocation).toLowerCase()); - }); -}); - -describeDevMoonbeam("XCM - asset manager - Remove asset from supported", (context) => { - let assetId: string; - let alith: KeyringPair; - before("should be able to change existing asset type", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApi; - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 1, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ((await parachainOne.query.assets.asset(assetId)) as any).unwrap(); - expect(registeredAsset.owner.toString()).to.eq(palletId); - - await verifyLatestBlockFees(context, expect); - }); - - it("should remove an asset from our supported fee payments", async function () { - // ChangeAssetType - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.removeSupportedAsset(sourceLocation, 1) - ) - ); - - // assetId - let id = ( - (await context.polkadotApi.query.assetManager.assetTypeId(sourceLocation)) as any - ).unwrap(); - - // asset units per second removed - let assetUnitsPerSecond = (await context.polkadotApi.query.assetManager.assetTypeUnitsPerSecond( - sourceLocation - )) as any; - - // Supported assets should be 0 - let supportedAssets = - (await context.polkadotApi.query.assetManager.supportedFeePaymentAssets()) as any; - - expect(assetUnitsPerSecond.isNone).to.eq(true); - expect(bnToHex(id)).to.eq(assetId); - // the asset should not be supported - expect(supportedAssets.length).to.eq(0); - }); -}); - -describeDevMoonbeam("XCM - asset manager - destroy foreign asset", (context) => { - let assetId: string; - let alith: KeyringPair; - before("should be able to change existing asset type", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApi; - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 1, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ((await parachainOne.query.assets.asset(assetId)) as any).unwrap(); - expect(registeredAsset.owner.toString()).to.eq(palletId); - - await verifyLatestBlockFees(context, expect); - }); - - it("should be able to destroy a foreign asset through pallet-asset-manager", async function () { - const assetDestroyWitness = context.polkadotApi.createType("PalletAssetsDestroyWitness", { - accounts: 0, - sufficients: 0, - approvals: 0, - }); - - // Destroy foreign asset - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.destroyForeignAsset(assetId, assetDestroyWitness, 1) - ) - ); - - // assetId - let id = (await context.polkadotApi.query.assetManager.assetTypeId(sourceLocation)) as any; - - // asset units per second removed - let assetUnitsPerSecond = (await context.polkadotApi.query.assetManager.assetTypeUnitsPerSecond( - sourceLocation - )) as any; - - // Supported assets should be 0 - let supportedAssets = - (await context.polkadotApi.query.assetManager.supportedFeePaymentAssets()) as any; - - // assetDetails should have dissapeared - let assetDetails = (await context.polkadotApi.query.assets.asset(assetId)) as any; - - expect(assetUnitsPerSecond.isNone).to.eq(true); - expect(id.isNone).to.eq(true); - expect(assetDetails.isNone).to.eq(true); - // the asset should not be supported - expect(supportedAssets.length).to.eq(0); - }); -}); - -describeDevMoonbeam("XCM - asset manager - destroy local asset", (context) => { - let assetId: string; - let alith: KeyringPair; - before("should be able to change existing asset type", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const parachainOne = context.polkadotApi; - - // Check ALITH has amount reserved - const accountDetailsBefore = (await parachainOne.query.system.account(ALITH)) as any; - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - parachainOne.tx.sudo.sudo( - parachainOne.tx.assetManager.registerLocalAsset(ALITH, ALITH, true, new BN(1)) - ) - ); - - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // check asset in storage - const registeredAsset = ((await parachainOne.query.localAssets.asset(assetId)) as any).unwrap(); - expect(registeredAsset.owner.toString()).to.eq(ALITH); - - // Check ALITH has amount reserved - const accountDetails = (await parachainOne.query.system.account(ALITH)) as any; - expect(accountDetails.data.reserved.toString()).to.eq( - (accountDetailsBefore.data.reserved.toBigInt() + 100n * GLMR).toString() - ); - await verifyLatestBlockFees(context, expect); - }); - - it("should be able to destroy a local asset through pallet-asset-manager", async function () { - const assetDestroyWitness = context.polkadotApi.createType("PalletAssetsDestroyWitness", { - accounts: 0, - sufficients: 0, - approvals: 0, - }); - - // Reserved amount back to creator - const accountDetailsBefore = (await context.polkadotApi.query.system.account(ALITH)) as any; - - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.destroyLocalAsset(assetId, assetDestroyWitness) - ) - ); - - // assetDetails should have dissapeared - let assetDetails = (await context.polkadotApi.query.localAssets.asset(assetId)) as any; - expect(assetDetails.isNone).to.eq(true); - - // Reserved amount back to creator - const accountDetailsAfter = (await context.polkadotApi.query.system.account(ALITH)) as any; - - // Amount should have decreased in one GLMR - expect(accountDetailsAfter.data.reserved.toString()).to.eq( - (accountDetailsBefore.data.reserved.toBigInt() - 100n * GLMR).toString() - ); - - // check deposit not in storage - const deposit = (await context.polkadotApi.query.assetManager.localAssetDeposit( - assetId - )) as any; - expect(deposit.isNone).to.eq(true); - }); -}); diff --git a/tests/tests/test-assets-pallet.ts b/tests/tests/test-assets-pallet.ts deleted file mode 100644 index ca99c2c7ee..0000000000 --- a/tests/tests/test-assets-pallet.ts +++ /dev/null @@ -1,128 +0,0 @@ -import Keyring from "@polkadot/keyring"; -import { expect } from "chai"; -import { BN } from "@polkadot/util"; -import { ALITH, ALITH_PRIV_KEY, BALTATHAR } from "../util/constants"; - -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; -import { mockAssetBalance } from "./test-precompile/test-precompile-assets-erc20"; - -describeDevMoonbeam("Pallet Assets Pallet - assets transfer", (context) => { - let sudoAccount, assetId; - before("Test querying asset", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = context.polkadotApi.createType("Balance", 100000000000000); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - }); - - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); - - await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.assets.transfer(assetId, BALTATHAR, 1000) - ); - }); - - it("should query asset balance", async function () { - // Baltathar balance is 1000 - let baltatharBalance = (await context.polkadotApi.query.assets.account( - assetId, - BALTATHAR - )) as any; - expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); - }); -}); - -describeDevMoonbeam("Pallet Assets Pallet - asset destruction", (context) => { - let sudoAccount, assetId; - before("Test querying asset", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = context.polkadotApi.createType("Balance", 100000000000000); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - }); - - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); - - await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.assets.transfer(assetId, BALTATHAR, 1000) - ); - }); - - it("should make sure everything related to the asset is destroyed", async function () { - // We first create the witness - const assetDestroyWitness = context.polkadotApi.createType("PalletAssetsDestroyWitness", { - accounts: 1, - sufficients: 1, - approvals: 0, - }); - - let metadataBefore = (await context.polkadotApi.query.assets.metadata(assetId)) as any; - - // Name is equal to "DOT" in hex - expect(metadataBefore.name.toString()).to.eq("0x444f54"); - - // Baltathar has its balance - let baltatharBalanceBefore = (await context.polkadotApi.query.assets.account( - assetId, - BALTATHAR - )) as any; - expect(baltatharBalanceBefore.unwrap()["balance"].eq(new BN(1000))).to.equal(true); - - // assetDetails before in non-empty - let assetDetailsBefore = (await context.polkadotApi.query.assets.asset(assetId)) as any; - expect(assetDetailsBefore.isNone).to.eq(false); - - // Destroy asset - await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assets.destroy(assetId, assetDestroyWitness) - ) - ); - - // Baltathar balance is None - let baltatharBalance = (await context.polkadotApi.query.assets.account( - assetId, - BALTATHAR - )) as any; - expect(baltatharBalance.isNone).to.eq(true); - - // metadata is default - let metadata = (await context.polkadotApi.query.assets.metadata(assetId)) as any; - expect(metadata.name.toString()).to.eq("0x"); - - // assetDetails is None - let assetDetails = (await context.polkadotApi.query.assets.asset(assetId)) as any; - expect(assetDetails.isNone).to.eq(true); - }); -}); diff --git a/tests/tests/test-assets-sufficients.ts b/tests/tests/test-assets-sufficients.ts deleted file mode 100644 index 66ea76b3aa..0000000000 --- a/tests/tests/test-assets-sufficients.ts +++ /dev/null @@ -1,566 +0,0 @@ -import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { ALITH, BALTATHAR, ALITH_PRIV_KEY, GLMR } from "../util/constants"; -import { blake2AsU8a, xxhashAsU8a } from "@polkadot/util-crypto"; -import { BN, hexToU8a, bnToHex, u8aToHex } from "@polkadot/util"; -import Keyring from "@polkadot/keyring"; - -import { randomAsHex } from "@polkadot/util-crypto"; - -const sourceLocationRelayAssetType = { XCM: { parents: 1, interior: "Here" } }; - -interface AssetMetadata { - name: string; - symbol: string; - decimals: BN; - isFrozen: boolean; -} - -const relayAssetMetadata: AssetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: new BN(12), - isFrozen: false, -}; - -async function mockAssetBalance( - context, - assetBalance, - assetDetails, - sudoAccount, - assetId, - account, - is_sufficient -) { - // Register the asset - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - sourceLocationRelayAssetType, - relayAssetMetadata, - new BN(1), - is_sufficient - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let assets = ( - (await context.polkadotApi.query.assetManager.assetIdType(assetId)) as any - ).toJSON(); - // make sure we created it - expect(assets["xcm"]["parents"]).to.equal(1); - - // Get keys to modify balance - let module = xxhashAsU8a(new TextEncoder().encode("Assets"), 128); - let account_key = xxhashAsU8a(new TextEncoder().encode("Account"), 128); - let blake2concatAssetId = new Uint8Array([ - ...blake2AsU8a(assetId.toU8a(), 128), - ...assetId.toU8a(), - ]); - - let blake2concatAccount = new Uint8Array([ - ...blake2AsU8a(hexToU8a(account), 128), - ...hexToU8a(account), - ]); - let overallAccountKey = new Uint8Array([ - ...module, - ...account_key, - ...blake2concatAssetId, - ...blake2concatAccount, - ]); - - // Get keys to modify total supply - let assetKey = xxhashAsU8a(new TextEncoder().encode("Asset"), 128); - let overallAssetKey = new Uint8Array([...module, ...assetKey, ...blake2concatAssetId]); - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.system.setStorage([ - [u8aToHex(overallAccountKey), u8aToHex(assetBalance.toU8a())], - [u8aToHex(overallAssetKey), u8aToHex(assetDetails.toU8a())], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - return; -} - -describeDevMoonbeam( - "Pallet Assets - Sufficient tests: is_sufficient to true", - (context) => { - let sudoAccount, assetId; - before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = new BN("100000000000000"); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); - - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - isSufficient: true, - minBalance: 1, - }); - - await mockAssetBalance( - context, - assetBalance, - assetDetails, - sudoAccount, - assetId, - ALITH, - true - ); - - await context.createBlock(); - let alithBalance = (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any; - expect(alithBalance.unwrap()["balance"].eq(new BN(100000000000000))).to.equal(true); - }); - - it("Send MOVR and assets to an account, then drain assets, then MOVR", async function () { - // We are going to use a fresh account here, since we mocked the asset balance - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const seed = randomAsHex(32); - const transferAmount = new BN("10000000000000"); - - let freshAccount = await keyring.addFromUri(seed, null, "ethereum"); - - // We transfer Assets to freshAccount, which should increase sufficients - await context.polkadotApi.tx.assets - .transfer(assetId, freshAccount.address, transferAmount) - .signAndSend(alith); - - await context.createBlock(); - - let freshAccountBalance = (await context.polkadotApi.query.assets.account( - assetId, - freshAccount.address - )) as any; - - expect(freshAccountBalance.unwrap()["balance"].eq(new BN(10000000000000))).to.equal(true); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(1n); - // Providers should still be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(0n); - - // We transfer a good amount to be able to pay for fees - await context.polkadotApi.tx.balances - .transfer(freshAccount.address, 1n * GLMR) - .signAndSend(alith); - await context.createBlock(); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(1n); - - // Providers should now be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // Let's drain assets - await context.polkadotApi.tx.assets - .transfer(assetId, BALTATHAR, transferAmount) - .signAndSend(freshAccount); - - await context.createBlock(); - - // Lets drain native token - // First calculate fee - // Then grab balance of freshAccount - // Then we just transfer out balance of freshAccount - fee - const fee = ( - await context.polkadotApi.tx.balances.transfer(ALITH, 1n * GLMR).paymentInfo(freshAccount) - ).partialFee as any; - - let freshAccountBalanceNativeToken = ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).data.free.toBigInt(); - - await context.polkadotApi.tx.balances - .transfer(BALTATHAR, freshAccountBalanceNativeToken - BigInt(fee)) - .signAndSend(freshAccount); - - await context.createBlock(); - - freshAccountBalance = (await context.polkadotApi.query.assets.account( - assetId, - freshAccount.address - )) as any; - expect(freshAccountBalance.isNone).to.equal(true); - - // Sufficients should go to 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(0n); - // Providers should be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // Nonce should be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // But balance of MOVR should be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).data.free.toBigInt() - ).to.eq(0n); - }); - }, - "Legacy", - true -); - -describeDevMoonbeam( - "Pallet Assets - Sufficient tests: is_sufficient to true", - (context) => { - let sudoAccount, assetId; - before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = new BN("100000000000000"); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); - - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - isSufficient: true, - minBalance: 1, - }); - - await mockAssetBalance( - context, - assetBalance, - assetDetails, - sudoAccount, - assetId, - ALITH, - true - ); - - await context.createBlock(); - let alithBalance = (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any; - expect(alithBalance.unwrap()["balance"].eq(new BN(100000000000000))).to.equal(true); - }); - - it("Send MOVR and assets to an account, then drain assets, dont drain MOVR", async function () { - // We are going to use a fresh account here, since we mocked the asset balance - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const seed = randomAsHex(32); - const transferAmount = new BN("10000000000000"); - - let freshAccount = await keyring.addFromUri(seed, null, "ethereum"); - - // We transfer Assets to freshAccount, which should increase sufficients - await context.polkadotApi.tx.assets - .transfer(assetId, freshAccount.address, transferAmount) - .signAndSend(alith); - - await context.createBlock(); - - let freshAccountBalance = (await context.polkadotApi.query.assets.account( - assetId, - freshAccount.address - )) as any; - expect(freshAccountBalance.unwrap()["balance"].eq(new BN(10000000000000))).to.equal(true); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(1n); - // Providers should still be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(0n); - - // Lets transfer it the native token. We want to transfer enough to cover for a future fee. - const fee = ( - await context.polkadotApi.tx.assets - .transfer(assetId, BALTATHAR, transferAmount) - .paymentInfo(freshAccount) - ).partialFee as any; - - await context.polkadotApi.tx.balances - .transfer(freshAccount.address, BigInt(fee)) - .signAndSend(alith); - await context.createBlock(); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(1n); - // Providers should now be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // What happens now when we execute such transaction? both MOVR and Assets should be drained. - await context.polkadotApi.tx.assets - .transfer(assetId, BALTATHAR, transferAmount) - .signAndSend(freshAccount); - - await context.createBlock(); - - freshAccountBalance = (await context.polkadotApi.query.assets.account( - assetId, - freshAccount.address - )) as any; - expect(freshAccountBalance.isNone).to.equal(true); - - // Sufficients should go to 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(0n); - // Providers should be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // Nonce should be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // But balance of MOVR should be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).data.free.toBigInt() > 0n - ).to.eq(true); - }); - }, - "Legacy", - true -); - -describeDevMoonbeam( - "Pallet Assets - Sufficient tests: is_sufficient to false", - (context) => { - let sudoAccount, assetId; - before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = new BN("100000000000000"); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); - - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - isSufficient: false, - minBalance: 1, - }); - - await mockAssetBalance( - context, - assetBalance, - assetDetails, - sudoAccount, - assetId, - ALITH, - false - ); - - await context.createBlock(); - let alithBalance = (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any; - expect(alithBalance.unwrap()["balance"].eq(new BN(100000000000000))).to.equal(true); - }); - - it("Send MOVR and assets to an account, then drain assets, dont drain MOVR", async function () { - // We are going to use a fresh account here, since we mocked the asset balance - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const seed = randomAsHex(32); - const transferAmount = new BN("10000000000000"); - - let freshAccount = await keyring.addFromUri(seed, null, "ethereum"); - - // We cannot transfer to freshAccount, since sufficient is false - await context.polkadotApi.tx.assets - .transfer(assetId, freshAccount.address, transferAmount) - .signAndSend(alith); - - await context.createBlock(); - - let freshAccountBalance = (await context.polkadotApi.query.assets.account( - assetId, - freshAccount.address - )) as any; - expect(freshAccountBalance.isNone).to.equal(true); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(0n); - // Providers should still be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(0n); - - // Lets transfer it the native token. We want to transfer enough to cover for a future fee. - const fee = ( - await context.polkadotApi.tx.assets - .transfer(assetId, BALTATHAR, transferAmount) - .paymentInfo(freshAccount) - ).partialFee as any; - - // We transfer Balances, which should increase provider - await context.polkadotApi.tx.balances - .transfer(freshAccount.address, BigInt(fee)) - .signAndSend(alith); - await context.createBlock(); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(0n); - // Providers should now be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // We now can transfer assets to freshAccount, since it has a provider - await context.polkadotApi.tx.assets - .transfer(assetId, freshAccount.address, transferAmount) - .signAndSend(alith); - - await context.createBlock(); - - freshAccountBalance = (await context.polkadotApi.query.assets.account( - assetId, - freshAccount.address - )) as any; - expect(freshAccountBalance.unwrap()["balance"].eq(transferAmount)).to.equal(true); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(0n); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).consumers.toBigInt() - ).to.eq(1n); - - // What happens now when we execute such transaction? both MOVR and Assets should be drained. - await context.polkadotApi.tx.assets - .transfer(assetId, BALTATHAR, transferAmount) - .signAndSend(freshAccount); - - await context.createBlock(); - - freshAccountBalance = (await context.polkadotApi.query.assets.account( - assetId, - freshAccount.address - )) as any; - expect(freshAccountBalance.isNone).to.equal(true); - - // Sufficients should be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).sufficients.toBigInt() - ).to.eq(0n); - - // Consumers should be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).consumers.toBigInt() - ).to.eq(0n); - - // Providers should be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // Nonce should be 1 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).providers.toBigInt() - ).to.eq(1n); - - // But balance of MOVR should be 0 - expect( - ( - (await context.polkadotApi.query.system.account(freshAccount.address)) as any - ).data.free.toBigInt() > 0n - ).to.eq(true); - }); - }, - "Legacy", - true -); diff --git a/tests/tests/test-assets/test-asset-manager.ts b/tests/tests/test-assets/test-asset-manager.ts new file mode 100644 index 0000000000..f89d4b9a7c --- /dev/null +++ b/tests/tests/test-assets/test-asset-manager.ts @@ -0,0 +1,298 @@ +import "@moonbeam-network/api-augment"; + +import { BN, bnToHex } from "@polkadot/util"; +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { + PARA_1000_SOURCE_LOCATION, + RELAY_SOURCE_LOCATION, + relayAssetMetadata, +} from "../../util/assets"; +import { registerForeignAsset } from "../../util/xcm"; +import { verifyLatestBlockFees } from "../../util/block"; +import { GLMR } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +const palletId = "0x6D6f646c617373746d6E67720000000000000000"; + +describeDevMoonbeam("XCM - asset manager - foreign asset", (context) => { + it("should be registerable and have unit per seconds set", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata + ); + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toString()).to.eq(palletId); + + await verifyLatestBlockFees(context); + }); +}); + +describeDevMoonbeam("XCM - asset manager - register local asset", (context) => { + it("should be able to register a local asset", async function () { + const parachainOne = context.polkadotApi; + // registerForeignAsset + const { + result: { events: eventsRegister }, + } = await context.createBlock( + parachainOne.tx.sudo.sudo( + parachainOne.tx.assetManager.registerLocalAsset( + alith.address, + alith.address, + true, + new BN(1) + ) + ) + ); + // Look for assetId in events + const assetId = eventsRegister + .find(({ event: { section } }) => section.toString() === "assetManager") + .event.data[0].toHex() + .replace(/,/g, ""); + + // check asset in storage + const registeredAsset = (await parachainOne.query.localAssets.asset(assetId)).unwrap(); + expect(registeredAsset.owner.toString()).to.eq(alith.address); + + // check deposit in storage + const deposit = (await parachainOne.query.assetManager.localAssetDeposit(assetId)).unwrap(); + expect(deposit.creator.toString()).to.eq(alith.address); + + await verifyLatestBlockFees(context); + }); +}); + +describeDevMoonbeam("XCM - asset manager - Change existing asset", (context) => { + let assetId: string; + before("should be able to change existing asset type", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata, + 1 + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toString()).to.eq(palletId); + + await verifyLatestBlockFees(context); + }); + + it("should change the asset Id", async function () { + // ChangeAssetType + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.changeExistingAssetType( + assetId, + PARA_1000_SOURCE_LOCATION, + 1 + ) + ) + ); + + // asset_type + const assetType = (await context.polkadotApi.query.assetManager.assetIdType(assetId)) as Object; + + // assetId + const id = ( + await context.polkadotApi.query.assetManager.assetTypeId(PARA_1000_SOURCE_LOCATION) + ).unwrap(); + + // asset units per second changed + const assetUnitsPerSecond = ( + await context.polkadotApi.query.assetManager.assetTypeUnitsPerSecond( + PARA_1000_SOURCE_LOCATION + ) + ).unwrap(); + + // Supported assets + const supportedAssets = + await context.polkadotApi.query.assetManager.supportedFeePaymentAssets(); + + expect(assetUnitsPerSecond.toString()).to.eq(new BN(1).toString()); + expect(assetType.toString()).to.eq(JSON.stringify(PARA_1000_SOURCE_LOCATION).toLowerCase()); + expect(bnToHex(id)).to.eq(assetId); + expect(supportedAssets[0].toString()).to.eq( + JSON.stringify(PARA_1000_SOURCE_LOCATION).toLowerCase() + ); + }); +}); + +describeDevMoonbeam("XCM - asset manager - Remove asset from supported", (context) => { + let assetId: string; + before("should be able to change existing asset type", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata, + 1 + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toString()).to.eq(palletId); + + await verifyLatestBlockFees(context); + }); + + it("should remove an asset from our supported fee payments", async function () { + // ChangeAssetType + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.removeSupportedAsset(RELAY_SOURCE_LOCATION, 1) + ) + ); + + // assetId + const id = ( + await context.polkadotApi.query.assetManager.assetTypeId(RELAY_SOURCE_LOCATION) + ).unwrap(); + + // asset units per second removed + const assetUnitsPerSecond = + await context.polkadotApi.query.assetManager.assetTypeUnitsPerSecond(RELAY_SOURCE_LOCATION); + + // Supported assets should be 0 + const supportedAssets = + await context.polkadotApi.query.assetManager.supportedFeePaymentAssets(); + + expect(assetUnitsPerSecond.isNone).to.eq(true); + expect(bnToHex(id)).to.eq(assetId); + // the asset should not be supported + expect(supportedAssets.length).to.eq(0); + }); +}); + +describeDevMoonbeam("XCM - asset manager - destroy foreign asset", (context) => { + let assetId: string; + before("should be able to change existing asset type", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata, + 1 + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toString()).to.eq(palletId); + + await verifyLatestBlockFees(context); + }); + + it("should be able to destroy a foreign asset through pallet-asset-manager", async function () { + const assetDestroyWitness = context.polkadotApi.createType("PalletAssetsDestroyWitness", { + accounts: 0, + sufficients: 0, + approvals: 0, + }); + + // Destroy foreign asset + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.destroyForeignAsset(assetId, assetDestroyWitness, 1) + ) + ); + + // assetId + const id = await context.polkadotApi.query.assetManager.assetTypeId(RELAY_SOURCE_LOCATION); + + // asset units per second removed + const assetUnitsPerSecond = + await context.polkadotApi.query.assetManager.assetTypeUnitsPerSecond(RELAY_SOURCE_LOCATION); + + // Supported assets should be 0 + const supportedAssets = + await context.polkadotApi.query.assetManager.supportedFeePaymentAssets(); + + // assetDetails should have dissapeared + const assetDetails = await context.polkadotApi.query.assets.asset(assetId); + + expect(assetUnitsPerSecond.isNone).to.eq(true); + expect(id.isNone).to.eq(true); + expect(assetDetails.isNone).to.eq(true); + // the asset should not be supported + expect(supportedAssets.length).to.eq(0); + }); +}); + +describeDevMoonbeam("XCM - asset manager - destroy local asset", (context) => { + let assetId: string; + before("should be able to change existing asset type", async function () { + const parachainOne = context.polkadotApi; + + // Check ALITH has amount reserved + const accountDetailsBefore = await parachainOne.query.system.account(alith.address); + + // registerAsset + const { + result: { events: eventsRegister }, + } = await context.createBlock( + parachainOne.tx.sudo.sudo( + parachainOne.tx.assetManager.registerLocalAsset( + alith.address, + alith.address, + true, + new BN(1) + ) + ) + ); + + assetId = eventsRegister + .find(({ event: { section } }) => section.toString() === "assetManager") + .event.data[0].toHex() + .replace(/,/g, ""); + + // check asset in storage + const registeredAsset = (await parachainOne.query.localAssets.asset(assetId)).unwrap(); + expect(registeredAsset.owner.toString()).to.eq(alith.address); + + // Check ALITH has amount reserved + const accountDetails = await parachainOne.query.system.account(alith.address); + expect(accountDetails.data.reserved.toString()).to.eq( + (accountDetailsBefore.data.reserved.toBigInt() + 100n * GLMR).toString() + ); + await verifyLatestBlockFees(context); + }); + + it("should be able to destroy a local asset through pallet-asset-manager", async function () { + const assetDestroyWitness = context.polkadotApi.createType("PalletAssetsDestroyWitness", { + accounts: 0, + sufficients: 0, + approvals: 0, + }); + + // Reserved amount back to creator + const accountDetailsBefore = await context.polkadotApi.query.system.account(alith.address); + + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.destroyLocalAsset(assetId, assetDestroyWitness) + ) + ); + + // assetDetails should have dissapeared + let assetDetails = await context.polkadotApi.query.localAssets.asset(assetId); + expect(assetDetails.isNone).to.eq(true); + + // Reserved amount back to creator + const accountDetailsAfter = await context.polkadotApi.query.system.account(alith.address); + + // Amount should have decreased in one GLMR + expect(accountDetailsAfter.data.reserved.toString()).to.eq( + (accountDetailsBefore.data.reserved.toBigInt() - 100n * GLMR).toString() + ); + + // check deposit not in storage + const deposit = await context.polkadotApi.query.assetManager.localAssetDeposit(assetId); + expect(deposit.isNone).to.eq(true); + }); +}); diff --git a/tests/tests/test-assets/test-assets-pallet.ts b/tests/tests/test-assets/test-assets-pallet.ts new file mode 100644 index 0000000000..84a3a9920e --- /dev/null +++ b/tests/tests/test-assets/test-assets-pallet.ts @@ -0,0 +1,107 @@ +import "@moonbeam-network/api-augment"; + +import { u128 } from "@polkadot/types"; +import { expect } from "chai"; + +import { alith, baltathar } from "../../util/accounts"; +import { mockAssetBalance } from "../../util/assets"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; + +describeDevMoonbeam("Pallet Assets - Transfer", (context) => { + let assetId: u128; + before("Setup asset", async () => { + assetId = context.polkadotApi.createType("u128", ARBITRARY_ASSET_ID); + // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet + // And we need relay tokens for issuing a transaction to be executed in the relay + const balance = context.polkadotApi.createType("Balance", 100000000000000); + const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { + balance: balance, + }); + + const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { + supply: balance, + }); + + await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, alith.address); + }); + + it("should be sucessfull", async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.assets.transfer(assetId, baltathar.address, 1000) + ); + + expect(result.error).to.be.undefined; + + // Baltathar balance is 1000 + const baltatharBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + baltathar.address + ); + expect(baltatharBalance.unwrap().balance.toBigInt()).to.equal(1000n); + }); +}); + +describeDevMoonbeam("Pallet Assets - Destruction", (context) => { + let assetId: u128; + before("Setup asset & balance", async () => { + assetId = context.polkadotApi.createType("u128", ARBITRARY_ASSET_ID); + // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet + // And we need relay tokens for issuing a transaction to be executed in the relay + const balance = context.polkadotApi.createType("Balance", 100000000000000); + const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { + balance: balance, + }); + + const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { + supply: balance, + }); + + await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, alith.address); + + await context.createBlock( + context.polkadotApi.tx.assets.transfer(assetId, baltathar.address, 1000) + ); + }); + + it("should destroy asset Balance, ", async function () { + // We first create the witness + const assetDestroyWitness = context.polkadotApi.createType("PalletAssetsDestroyWitness", { + accounts: 1, + sufficients: 1, + approvals: 0, + }); + + const metadataBefore = await context.polkadotApi.query.assets.metadata(assetId.toU8a()); + + // Name is equal to "DOT" in hex + expect(metadataBefore.name.toString()).to.eq("0x444f54"); + + // assetDetails before in non-empty + const assetDetailsBefore = await context.polkadotApi.query.assets.asset(assetId.toU8a()); + expect(assetDetailsBefore.isNone).to.eq(false); + + // Destroy asset + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assets.destroy(assetId, assetDestroyWitness) + ) + ); + + // Baltathar balance is None + const baltatharBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + baltathar.address + ); + expect(baltatharBalance.isNone).to.eq(true); + + // metadata is default + const metadata = await context.polkadotApi.query.assets.metadata(assetId.toU8a()); + expect(metadata.name.toString()).to.eq("0x"); + + // assetDetails is None + const assetDetails = await context.polkadotApi.query.assets.asset(assetId.toU8a()); + expect(assetDetails.isNone).to.eq(true); + }); +}); diff --git a/tests/tests/test-assets/test-assets-sufficients.ts b/tests/tests/test-assets/test-assets-sufficients.ts new file mode 100644 index 0000000000..c93151102c --- /dev/null +++ b/tests/tests/test-assets/test-assets-sufficients.ts @@ -0,0 +1,415 @@ +import "@moonbeam-network/api-augment"; + +import { u128 } from "@polkadot/types"; +import { BN } from "@polkadot/util"; +import { expect } from "chai"; + +import { alith, baltathar, generateKeyringPair } from "../../util/accounts"; +import { mockAssetBalance } from "../../util/assets"; +import { GLMR } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; +const ARBITRARY_TRANSFER_AMOUNT = 10000000000000n; + +describeDevMoonbeam( + "Pallet Assets - Sufficient tests: is_sufficient to true", + (context) => { + let assetId: u128; + const freshAccount = generateKeyringPair(); + + before("Setup contract and mock balance", async () => { + assetId = context.polkadotApi.createType("u128", ARBITRARY_ASSET_ID); + // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet + // And we need relay tokens for issuing a transaction to be executed in the relay + const balance = new BN("100000000000000"); + const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { + balance: balance, + }); + + const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { + supply: balance, + isSufficient: true, + minBalance: 1, + }); + + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + true + ); + + await context.createBlock(); + const alithBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); + expect(alithBalance.unwrap().balance.toBigInt()).to.equal(100000000000000n); + }); + + it("Send MOVR and assets to an account, then drain assets, then MOVR", async function () { + // We are going to use a fresh account here, since we mocked the asset balance + + // We transfer Assets to freshAccount, which should increase sufficients + await context.createBlock( + context.polkadotApi.tx.assets.transfer( + assetId, + freshAccount.address, + ARBITRARY_TRANSFER_AMOUNT + ) + ); + + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(1n); + // Providers should still be 0 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(0n); + + // We transfer a good amount to be able to pay for fees + await context.createBlock( + context.polkadotApi.tx.balances.transfer(freshAccount.address, 1n * GLMR) + ); + + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(1n); + + // Providers should now be 1 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + // Let's drain assets + await context.createBlock( + context.polkadotApi.tx.assets + .transfer(assetId, baltathar.address, ARBITRARY_TRANSFER_AMOUNT) + .signAsync(freshAccount) + ); + + // Lets drain native token + // First calculate fee + // Then grab balance of freshAccount + // Then we just transfer out balance of freshAccount - fee + const fee = ( + await context.polkadotApi.tx.balances + .transfer(alith.address, 1n * GLMR) + .paymentInfo(freshAccount) + ).partialFee.toBigInt(); + + const freshAccountBalanceNativeToken = ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).data.free.toBigInt(); + + await context.createBlock( + context.polkadotApi.tx.balances + .transfer(baltathar.address, freshAccountBalanceNativeToken - fee) + .signAsync(freshAccount) + ); + + const freshAccountBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + freshAccount.address + ); + expect(freshAccountBalance.isNone).to.equal(true); + + // Sufficients should go to 0 + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(0n); + // Providers should be 1 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + // Nonce should be 1 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + // But balance of MOVR should be 0 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).data.free.toBigInt() + ).to.eq(0n); + }); + }, + "Legacy", + "moonbase", + true +); + +describeDevMoonbeam( + "Pallet Assets - Sufficient tests: is_sufficient to true", + (context) => { + let assetId: u128; + const freshAccount = generateKeyringPair(); + + before("Setup contract and mock balance", async () => { + assetId = context.polkadotApi.createType("u128", ARBITRARY_ASSET_ID); + // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet + // And we need relay tokens for issuing a transaction to be executed in the relay + const balance = new BN("100000000000000"); + const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { + balance: balance, + }); + const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { + supply: balance, + isSufficient: true, + minBalance: 1, + }); + + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + true + ); + + await context.createBlock(); + const alithBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); + expect(alithBalance.unwrap().balance.toBigInt()).to.equal(100000000000000n); + }); + + it("Send MOVR and assets to an account, then drain assets, dont drain MOVR", async function () { + // We are going to use a fresh account here, since we mocked the asset balance + + // We transfer Assets to freshAccount, which should increase sufficients + + await context.createBlock( + context.polkadotApi.tx.assets.transfer( + assetId, + freshAccount.address, + ARBITRARY_TRANSFER_AMOUNT + ) + ); + + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(1n); + // Providers should still be 0 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(0n); + + // Lets transfer it the native token. We want to transfer enough to cover for a future fee. + const fee = ( + await context.polkadotApi.tx.assets + .transfer(assetId, baltathar.address, ARBITRARY_TRANSFER_AMOUNT) + .paymentInfo(freshAccount) + ).partialFee.toBigInt(); + + await context.createBlock( + context.polkadotApi.tx.balances.transfer(freshAccount.address, fee) + ); + + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(1n); + // Providers should now be 1 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + // What happens now when we execute such transaction? both MOVR and Assets should be drained. + await context.createBlock( + context.polkadotApi.tx.assets + .transfer(assetId, baltathar.address, ARBITRARY_TRANSFER_AMOUNT) + .signAsync(freshAccount) + ); + + const freshAccountBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + freshAccount.address + ); + expect(freshAccountBalance.isNone).to.equal(true); + + // Sufficients should go to 0 + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(0n); + // Providers should be 1 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + // Nonce should be 1 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + // But balance of MOVR should be 0 + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).data.free.toBigInt() > 0n + ).to.eq(true); + }); + }, + "Legacy", + "moonbase", + true +); + +describeDevMoonbeam( + "Pallet Assets - Sufficient tests: is_sufficient to false", + (context) => { + let assetId: u128; + const freshAccount = generateKeyringPair(); + + before("Setup contract and mock balance", async () => { + assetId = context.polkadotApi.createType("u128", ARBITRARY_ASSET_ID); + // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet + // And we need relay tokens for issuing a transaction to be executed in the relay + const balance = new BN("100000000000000"); + const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { + balance: balance, + }); + + const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { + supply: balance, + isSufficient: false, + minBalance: 1, + }); + + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + false + ); + + await context.createBlock(); + const alithBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); + expect(alithBalance.unwrap().balance.toBigInt()).to.equal(100000000000000n); + }); + + it("Send MOVR and assets to an account, then drain assets, dont drain MOVR", async function () { + // We are going to use a fresh account here, since we mocked the asset balance + + // We cannot transfer to freshAccount, since sufficient is false + await context.createBlock( + context.polkadotApi.tx.assets.transfer( + assetId, + freshAccount.address, + ARBITRARY_TRANSFER_AMOUNT + ) + ); + + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(0n); + // Providers should still be 0 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(0n); + + // Lets transfer it the native token. We want to transfer enough to cover for a future fee. + const fee = ( + await context.polkadotApi.tx.assets + .transfer(assetId, baltathar.address, ARBITRARY_TRANSFER_AMOUNT) + .paymentInfo(freshAccount) + ).partialFee.toBigInt(); + + // We transfer Balances, which should increase provider + await context.createBlock( + context.polkadotApi.tx.balances.transfer(freshAccount.address, fee) + ); + + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(0n); + // Providers should now be 1 + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + // We now can transfer assets to freshAccount, since it has a provider + await context.polkadotApi.tx.assets + .transfer(assetId, freshAccount.address, ARBITRARY_TRANSFER_AMOUNT) + .signAndSend(alith); + + await context.createBlock(); + + expect( + ( + await context.polkadotApi.query.system.account(freshAccount.address) + ).sufficients.toBigInt() + ).to.eq(0n); + + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).providers.toBigInt() + ).to.eq(1n); + + expect( + (await context.polkadotApi.query.system.account(freshAccount.address)).consumers.toBigInt() + ).to.eq(1n); + + // What happens now when we execute such transaction? both MOVR and Assets should be drained. + await context.createBlock( + context.polkadotApi.tx.assets + .transfer(assetId, baltathar.address, ARBITRARY_TRANSFER_AMOUNT) + .signAsync(freshAccount) + ); + + const freshAccountBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + freshAccount.address + ); + expect(freshAccountBalance.isNone).to.equal(true); + + const freshSystemAccount = await context.polkadotApi.query.system.account( + freshAccount.address + ); + // Sufficients should be 0 + expect(freshSystemAccount.sufficients.toBigInt()).to.eq(0n); + + // Consumers should be 0 + expect(freshSystemAccount.consumers.toBigInt()).to.eq(0n); + + // Providers should be 1 + expect(freshSystemAccount.providers.toBigInt()).to.eq(1n); + + // Nonce should be 1 + expect(freshSystemAccount.providers.toBigInt()).to.eq(1n); + + // But balance of MOVR should be 0 + expect(freshSystemAccount.data.free.toBigInt() > 0n).to.be.true; + }); + }, + "Legacy", + "moonbase", + true +); diff --git a/tests/tests/test-author-mapping.ts b/tests/tests/test-author-mapping.ts deleted file mode 100644 index 538b0be9f7..0000000000 --- a/tests/tests/test-author-mapping.ts +++ /dev/null @@ -1,380 +0,0 @@ -import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; - -import { - BALTATHAR, - BALTATHAR_PRIV_KEY, - ALITH, - ALITH_PRIV_KEY, - RANDOM_ADDRESS, - RANDOM_PRIV_KEY, - DEFAULT_GENESIS_MAPPING, - DEFAULT_GENESIS_STAKING, - GENESIS_ACCOUNT_BALANCE, -} from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; - -const aliceAuthorId = "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"; -const bobAuthorId = "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48"; -const charlieAuthorId = "0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22"; - -async function getMappingInfo( - context, - authorId: string -): Promise<{ account: string; deposit: BigInt }> { - const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit(authorId); - if (mapping.isSome) { - return { - account: mapping.unwrap().account.toString(), - deposit: mapping.unwrap().deposit.toBigInt(), - }; - } - return null; -} - -describeDevMoonbeam("Author Mapping - simple association", (context) => { - it("should match genesis state", async function () { - expect((await getMappingInfo(context, aliceAuthorId)).account).to.eq(ALITH); - expect((await getMappingInfo(context, aliceAuthorId)).deposit).to.eq(DEFAULT_GENESIS_MAPPING); - expect(await getMappingInfo(context, bobAuthorId)).to.eq(null); - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.free.toBigInt() - ).to.eq(1207825819614629174706176n); - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.reserved.toBigInt() - ).to.eq(DEFAULT_GENESIS_MAPPING + DEFAULT_GENESIS_STAKING); - }); - - it("should succeed in adding an association", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const { events } = await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.authorMapping.addAssociation(bobAuthorId) - ); - // check events - expect(events.length === 8); - expect(context.polkadotApi.events.balances.Reserved.is(events[1] as any)).to.be.true; - expect(context.polkadotApi.events.authorMapping.AuthorRegistered.is(events[2] as any)).to.be - .true; - expect(context.polkadotApi.events.system.NewAccount.is(events[4] as any)).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[5] as any)).to.be.true; - expect(context.polkadotApi.events.treasury.Deposit.is(events[6] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[7] as any)).to.be.true; - - // check association - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.free.toBigInt() - ).to.eq(1207725818354628766561176n); - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.reserved.toBigInt() - ).to.eq(2n * DEFAULT_GENESIS_MAPPING + DEFAULT_GENESIS_STAKING); - }); -}); - -describeDevMoonbeam("Author Mapping - Fail to reassociate alice", (context) => { - it("should fail in adding an association for a second time", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - const { events } = await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.authorMapping.addAssociation(aliceAuthorId) - ); - - // should check events for failure - expect(events.length === 6); - expect(context.polkadotApi.events.system.NewAccount.is(events[2] as any)).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[3] as any)).to.be.true; - expect(context.polkadotApi.events.treasury.Deposit.is(events[4] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5] as any)).to.be.true; - - //check state - expect( - ((await context.polkadotApi.query.system.account(BALTATHAR)) as any).data.free.toBigInt() - ).to.eq(1208925818354628766561176n); - expect( - ((await context.polkadotApi.query.system.account(BALTATHAR)) as any).data.reserved.toBigInt() - ).to.eq(0n); - expect((await getMappingInfo(context, aliceAuthorId)).account).to.eq(ALITH); - }); - - it("should fail to take someone else association", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.authorMapping.addAssociation(charlieAuthorId) - ); - const { events } = await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.authorMapping.updateAssociation(charlieAuthorId, aliceAuthorId) - ); - - // should check events for failure - expect( - events.find((e) => e.section == "system" && e.method == "ExtrinsicFailed"), - "ExtrinsicFailed is missing" - ).to.not.be.undefined; - - //check state - expect((await getMappingInfo(context, aliceAuthorId)).account).to.eq(ALITH); - }); -}); - -describeDevMoonbeam("Author Mapping - Fail without deposit", (context) => { - before("setup association", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const rando = await keyring.addFromUri(RANDOM_PRIV_KEY, null, "ethereum"); - expect( - ((await context.polkadotApi.query.system.account(RANDOM_ADDRESS)) as any).data.free.toBigInt() - ).to.eq(0n); - try { - await context.polkadotApi.tx.authorMapping.addAssociation(bobAuthorId).signAndSend(rando); - } catch (e) { - expect(e.message.toString()).to.eq( - "1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low" - ); - } - await context.createBlock(); - }); - - it("should not add the association", async function () { - expect(await getMappingInfo(context, bobAuthorId)).to.eq(null); - }); - - // TODO: Fix this test as there is no failed extrinsic in the block - it.skip("should check events for failure", async function () { - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - const allRecords = (await context.polkadotApi.query.system.events.at( - signedBlock.block.header.hash - )) as any; - - // map between the extrinsics and events - signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { - // filter the specific events based on the phase and then the - // index of our extrinsic in the block - const events = allRecords - .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) - .map(({ event }) => event); - - switch (index) { - // First 3 events: - // timestamp.set:: system.ExtrinsicSuccess - // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess - // authorInherent.setAuthor:: system.ExtrinsicSuccess - case 0: - case 1: - case 2: - expect( - events.length === 1 && - context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0] as any) - ).to.be.true; - break; - // Fourth extrinsic - case 3: - expect(section === "authorMapping" && method === "addAssociation").to.be.true; - expect(events.length === 6); - expect(context.polkadotApi.events.system.NewAccount.is(events[2] as any)).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[3] as any)).to.be.true; - expect(context.polkadotApi.events.treasury.Deposit.is(events[4] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5] as any)).to.be.true; - break; - default: - throw new Error(`Unexpected extrinsic`); - } - }); - expect(signedBlock.block.extrinsics).to.be.lengthOf(4); - }); -}); - -describeDevMoonbeam("Author Mapping - double registration", (context) => { - it("should succeed in adding an association for bob", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // How much fee does it consume the extrinsic - const fee = ( - await context.polkadotApi.tx.authorMapping - .addAssociation(bobAuthorId) - .paymentInfo(genesisAccount) - ).partialFee as any; - - await context.polkadotApi.tx.authorMapping - .addAssociation(bobAuthorId) - .signAndSend(genesisAccount); - - await context.createBlock(); - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - const expectedReservecBalance = 2n * DEFAULT_GENESIS_MAPPING + DEFAULT_GENESIS_STAKING; - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.free.toBigInt() - ).to.eq(GENESIS_ACCOUNT_BALANCE - expectedReservecBalance - BigInt(fee)); - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.reserved.toBigInt() - ).to.eq(expectedReservecBalance); - }); - - it("should associate with charlie, although already associated with bob", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // Grab free balance before this test - let genesisAccountBalanceBefore = ( - (await context.polkadotApi.query.system.account(ALITH)) as any - ).data.free.toBigInt(); - const fee = ( - await context.polkadotApi.tx.authorMapping - .addAssociation(charlieAuthorId) - .paymentInfo(genesisAccount) - ).partialFee as any; - await context.polkadotApi.tx.authorMapping - .addAssociation(charlieAuthorId) - .signAndSend(genesisAccount); - await context.createBlock(); - //check that both are registered - expect((await getMappingInfo(context, charlieAuthorId)).account).to.eq(ALITH); - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - const expectedReservecBalance = 3n * DEFAULT_GENESIS_MAPPING + DEFAULT_GENESIS_STAKING; - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.free.toBigInt() - ).to.eq(BigInt(genesisAccountBalanceBefore) - DEFAULT_GENESIS_MAPPING - BigInt(fee)); - expect( - ((await context.polkadotApi.query.system.account(ALITH)) as any).data.reserved.toBigInt() - ).to.eq(expectedReservecBalance); - }); -}); - -describeDevMoonbeam("Author Mapping - registered author can clear (de register)", (context) => { - it("should succeed in clearing an association", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - await context.polkadotApi.tx.authorMapping - .addAssociation(bobAuthorId) - .signAndSend(genesisAccount); - await context.createBlock(); - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - - const { events } = await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.authorMapping.clearAssociation(bobAuthorId) - ); - //check events - expect(events.length === 6); - expect(context.polkadotApi.events.balances.Unreserved.is(events[1] as any)).to.be.true; - expect(context.polkadotApi.events.authorMapping.AuthorDeRegistered.is(events[2] as any)).to.be - .true; - expect(context.polkadotApi.events.treasury.Deposit.is(events[4] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[5] as any)).to.be.true; - - // check mapping - expect(await getMappingInfo(context, bobAuthorId)).to.eq(null); - }); -}); - -describeDevMoonbeam("Author Mapping - unregistered author cannot clear association", (context) => { - it("should not succeed in clearing an association for an unregistered author", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - expect(await getMappingInfo(context, bobAuthorId)).to.eq(null); - - const { events } = await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.authorMapping.clearAssociation(bobAuthorId) - ); - expect(events.length === 6); - expect(context.polkadotApi.events.system.NewAccount.is(events[2] as any)).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[3] as any)).to.be.true; - expect(context.polkadotApi.events.treasury.Deposit.is(events[4] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5] as any)).to.be.true; - }); -}); - -describeDevMoonbeam("Author Mapping - non author clearing", (context) => { - it("should not succeed in clearing an association for a non-author", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - await context.polkadotApi.tx.authorMapping - .addAssociation(bobAuthorId) - .signAndSend(genesisAccount); - await context.createBlock(); - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - - const { events } = await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.authorMapping.clearAssociation(bobAuthorId) - ); - - expect(events.length === 4); - expect(context.polkadotApi.events.treasury.Deposit.is(events[2] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[3] as any)).to.be.true; - }); -}); - -describeDevMoonbeam("Author Mapping - registered can rotate", (context) => { - it("should succeed in rotating account ids for an author", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - await context.polkadotApi.tx.authorMapping - .addAssociation(bobAuthorId) - .signAndSend(genesisAccount); - await context.createBlock(); - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - await context.polkadotApi.tx.authorMapping - .updateAssociation(bobAuthorId, charlieAuthorId) - .signAndSend(genesisAccount); - await context.createBlock(); - expect(await getMappingInfo(context, bobAuthorId)).to.eq(null); - expect((await getMappingInfo(context, charlieAuthorId)).account).to.eq(ALITH); - - await context.createBlock(); - }); -}); - -describeDevMoonbeam("Author Mapping - unregistered cannot rotate", (context) => { - it("should fail rotating account ids if not registered", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - await context.polkadotApi.tx.authorMapping - .updateAssociation(bobAuthorId, charlieAuthorId) - .signAndSend(genesisAccount); - await context.createBlock(); - expect(await getMappingInfo(context, bobAuthorId)).to.eq(null); - expect(await getMappingInfo(context, charlieAuthorId)).to.eq(null); - - await context.createBlock(); - }); -}); - -describeDevMoonbeam("Author Mapping - non-author cannot rotate", (context) => { - it("should fail rotating account ids if not an author", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - await context.polkadotApi.tx.authorMapping - .addAssociation(bobAuthorId) - .signAndSend(genesisAccount); - await context.createBlock(); - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - await context.polkadotApi.tx.authorMapping - .updateAssociation(bobAuthorId, charlieAuthorId) - .signAndSend(baltathar); - await context.createBlock(); - expect((await getMappingInfo(context, bobAuthorId)).account).to.eq(ALITH); - expect(await getMappingInfo(context, charlieAuthorId)).to.eq(null); - - await context.createBlock(); - }); -}); diff --git a/tests/tests/test-author/test-author-mapping-keys.ts b/tests/tests/test-author/test-author-mapping-keys.ts new file mode 100644 index 0000000000..b0cc118f80 --- /dev/null +++ b/tests/tests/test-author/test-author-mapping-keys.ts @@ -0,0 +1,329 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { charleth, dorothy } from "../../util/accounts"; +import { getBlockExtrinsic } from "../../util/block"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +const debug = require("debug")("test:author-mapping"); + +// Keys used to set author-mapping in the tests +const originalKeys = [ + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002", +]; +// Concatenated keys +const concatOriginalKeys = `0x${originalKeys.map((key) => key.slice(2)).join("")}`; + +describeDevMoonbeam("Author Mapping - Set Charlie first time keys", (context) => { + before("setup account & keys", async function () { + debug(`Setting account ${charleth.address} keys: ${concatOriginalKeys}`); + // TODO: fix all setKeys with api 1600.1 + await (context.polkadotApi.tx.authorMapping.setKeys as any as any)( + concatOriginalKeys + ).signAndSend(charleth); + await context.createBlock(); + }); + + it("should succeed", async function () { + const { extrinsic, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "setKeys" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + }); + + it("should send KeysRegistered event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "setKeys" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRegistered")).to + .exist; + }); + + it("should set new keys", async function () { + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + ); + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(charleth.address); + expect(mapping.unwrap().keys_.toString()).to.equal(originalKeys[1]); + }); + + it("should set correct nimbus lookup", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + charleth.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrap().toString()).to.equal(originalKeys[0]); + }); +}); + +describeDevMoonbeam("Author Mapping - Update Charlie mapping to the same keys", (context) => { + before("setup account & keys", async function () { + await (context.polkadotApi.tx.authorMapping.setKeys as any)(concatOriginalKeys).signAndSend( + charleth + ); + await context.createBlock(); + + // Updating with the same keys + await (context.polkadotApi.tx.authorMapping.setKeys as any)(concatOriginalKeys).signAndSend( + charleth + ); + await context.createBlock(); + }); + + it("should succeed", async function () { + const { extrinsic, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "setKeys" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + }); + + it("should send KeysRotated event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "setKeys" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRotated")).to.exist; + }); + + it("should keep the same keys", async function () { + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + ); + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(charleth.address); + expect(mapping.unwrap().keys_.toString()).to.equal(originalKeys[1]); + }); + + it("should keep the same nimbus lookup", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + charleth.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrap().toString()).to.equal(originalKeys[0]); + }); +}); + +describeDevMoonbeam("Author Mapping - Update different keys", (context) => { + const newKeys = [ + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000004", + ]; + const concatNewKeys = `0x${newKeys.map((key) => key.slice(2)).join("")}`; + + before("setup account & keys", async function () { + await (context.polkadotApi.tx.authorMapping.setKeys as any)(concatOriginalKeys).signAndSend( + charleth + ); + await context.createBlock(); + + // Updating with different keys + await (context.polkadotApi.tx.authorMapping.setKeys as any)(concatNewKeys).signAndSend( + charleth + ); + await context.createBlock(); + }); + + it("should succeed", async function () { + const { extrinsic, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "setKeys" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + }); + + it("should send KeysRotated event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "setKeys" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRotated")).to.exist; + }); + + it("should remove previous keys", async function () { + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + ); + expect(mapping.isNone).to.be.true; + }); + + it("should set new keys", async function () { + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit(newKeys[0]); + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(charleth.address); + expect(mapping.unwrap().keys_.toString()).to.equal(newKeys[1]); + }); + + it("should set correct nimbus lookup", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + charleth.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrapOr(null)).to.not.equal(null); + expect(nimbusLookup.unwrap().toString()).to.equal(newKeys[0]); + }); +}); + +describeDevMoonbeam("Author Mapping - Remove Charlie keys", (context) => { + before("setup account & keys", async function () { + await (context.polkadotApi.tx.authorMapping.setKeys as any)(concatOriginalKeys).signAndSend( + charleth + ); + await context.createBlock(); + + // Remove the keys + await context.polkadotApi.tx.authorMapping.removeKeys().signAndSend(charleth); + await context.createBlock(); + }); + + it("should succeed", async function () { + const { extrinsic, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "removeKeys" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + }); + + it("should send KeysRemoved event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "removeKeys" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRemoved")).to.exist; + }); + + it("should remove keys", async function () { + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + ); + expect(mapping.isNone).to.be.true; + }); + + it("should remove nimbus mapping", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + charleth.address + )) as any; + expect(nimbusLookup.isNone).to.be.true; + }); +}); + +describeDevMoonbeam("Author Mapping - Removing non-existing author", (context) => { + before("setup account & keys", async function () { + // Remove the keys + await context.polkadotApi.tx.authorMapping.removeKeys().signAndSend(dorothy); + await context.createBlock(); + }); + + it("should fail", async function () { + const { extrinsic, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "removeKeys" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicFailed"); + }); + + it("should not send KeysRemoved event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "removeKeys" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRemoved")).to.not + .exist; + }); +}); + +describeDevMoonbeam("Author Mapping - Update someone else nimbus key", (context) => { + before("setup account & keys", async function () { + await (context.polkadotApi.tx.authorMapping.setKeys as any)(concatOriginalKeys).signAndSend( + charleth + ); + await context.createBlock(); + + // Setting same key but with ethan + await (context.polkadotApi.tx.authorMapping.setKeys as any)(concatOriginalKeys).signAndSend( + dorothy + ); + await context.createBlock(); + }); + + it("should fail", async function () { + const { extrinsic, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "setKeys" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicFailed"); + }); + + it("should not send any authorMapping event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "authorMapping", + "removeKeys" + ); + expect(events.find((e) => e.section == "authorMapping")).to.not.exist; + }); + + it("should keep the same keys to Faith", async function () { + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + ); + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(charleth.address); + expect(mapping.unwrap().keys_.toString()).to.equal(originalKeys[1]); + }); + + it("should not set nimbus lookup to Ethan", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + dorothy.address + )) as any; + expect(nimbusLookup.isNone).to.be.true; + }); + + it("should keep the same nimbus lookup to Faith", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + charleth.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrap().toString()).to.equal(originalKeys[0]); + }); +}); diff --git a/tests/tests/test-author/test-author-mapping.ts b/tests/tests/test-author/test-author-mapping.ts new file mode 100644 index 0000000000..941a4ad608 --- /dev/null +++ b/tests/tests/test-author/test-author-mapping.ts @@ -0,0 +1,350 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { + alith, + ALITH_SESSION_ADDRESS, + baltathar, + BALTATHAR_SESSION_ADDRESS, + CHARLETH_SESSION_ADDRESS, + generateKeyringPair, +} from "../../util/accounts"; +import { DEFAULT_GENESIS_BALANCE, DEFAULT_GENESIS_MAPPING, GLMR } from "../../util/constants"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; + +async function getMappingInfo( + context: DevTestContext, + authorId: string +): Promise<{ account: string; deposit: BigInt }> { + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit(authorId); + if (mapping.isSome) { + return { + account: mapping.unwrap().account.toString(), + deposit: mapping.unwrap().deposit.toBigInt(), + }; + } + return null; +} + +describeDevMoonbeam("Author Mapping - simple association", (context) => { + it("should match genesis state", async function () { + expect((await getMappingInfo(context, ALITH_SESSION_ADDRESS)).account).to.eq(alith.address); + expect((await getMappingInfo(context, ALITH_SESSION_ADDRESS)).deposit).to.eq( + DEFAULT_GENESIS_MAPPING + ); + expect(await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).to.eq(null); + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.free.toBigInt() + ).to.eq(DEFAULT_GENESIS_BALANCE - DEFAULT_GENESIS_MAPPING); + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.reserved.toBigInt() + ).to.eq(DEFAULT_GENESIS_MAPPING); + }); + + it("should succeed in adding an association", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(BALTATHAR_SESSION_ADDRESS) + ); + // check events + expect(events.length === 8); + expect(context.polkadotApi.events.balances.Reserved.is(events[1].event)).to.be.true; + expect(context.polkadotApi.events.authorMapping.KeysRegistered.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.system.NewAccount.is(events[4].event)).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[5].event)).to.be.true; + expect(context.polkadotApi.events.treasury.Deposit.is(events[6].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[7].event)).to.be.true; + + // check association + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.free.toBigInt() / GLMR + ).to.eq((DEFAULT_GENESIS_BALANCE - 2n * DEFAULT_GENESIS_MAPPING) / GLMR); + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.reserved.toBigInt() + ).to.eq(2n * DEFAULT_GENESIS_MAPPING); + }); +}); + +describeDevMoonbeam("Author Mapping - Fail to reassociate alice", (context) => { + it("should fail in adding an association for a second time", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.authorMapping + .addAssociation(ALITH_SESSION_ADDRESS) + .signAsync(baltathar) + ); + + // should check events for failure + expect(events.length === 6); + expect(context.polkadotApi.events.system.NewAccount.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[3].event)).to.be.true; + expect(context.polkadotApi.events.treasury.Deposit.is(events[4].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5].event)).to.be.true; + + //check state + expect( + (await context.polkadotApi.query.system.account(baltathar.address)).data.free.toBigInt() + ).to.eq(1208925819590977972705800n); + expect( + (await context.polkadotApi.query.system.account(baltathar.address)).data.reserved.toBigInt() + ).to.eq(0n); + expect((await getMappingInfo(context, ALITH_SESSION_ADDRESS)).account).to.eq(alith.address); + }); + + it("should fail to take someone else association", async function () { + await context.createBlock( + context.polkadotApi.tx.authorMapping + .addAssociation(CHARLETH_SESSION_ADDRESS) + .signAsync(baltathar) + ); + const { + result: { error }, + } = await context.createBlock( + context.polkadotApi.tx.authorMapping + .updateAssociation(CHARLETH_SESSION_ADDRESS, ALITH_SESSION_ADDRESS) + .signAsync(baltathar) + ); + + expect(error.name).to.equal("AlreadyAssociated"); + + //check state + expect((await getMappingInfo(context, ALITH_SESSION_ADDRESS)).account).to.eq(alith.address); + }); +}); + +describeDevMoonbeam("Author Mapping - Fail without deposit", (context) => { + before("setup association", async function () { + const rando = generateKeyringPair(); + expect( + (await context.polkadotApi.query.system.account(rando.address)).data.free.toBigInt() + ).to.eq(0n); + try { + await context.polkadotApi.tx.authorMapping + .addAssociation(BALTATHAR_SESSION_ADDRESS) + .signAndSend(rando); + } catch (e) { + expect(e.message.toString()).to.eq( + "1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low" + ); + } + await context.createBlock(); + }); + + it("should not add the association", async function () { + expect(await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).to.eq(null); + }); + + // TODO: Fix this test as there is no failed extrinsic in the block + it.skip("should check events for failure", async function () { + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); + const allRecords = await context.polkadotApi.query.system.events.at( + signedBlock.block.header.hash + ); + + // map between the extrinsics and events + signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { + // filter the specific events based on the phase and then the + // index of our extrinsic in the block + const events = allRecords.filter( + ({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index) + ); + + switch (index) { + // First 3 events: + // timestamp.set:: system.ExtrinsicSuccess + // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess + // authorInherent.setAuthor:: system.ExtrinsicSuccess + case 0: + case 1: + case 2: + expect( + events.length === 1 && + context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0].event) + ).to.be.true; + break; + // Fourth extrinsic + case 3: + expect(section === "authorMapping" && method === "addAssociation").to.be.true; + expect(events.length === 6); + expect(context.polkadotApi.events.system.NewAccount.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[3].event)).to.be.true; + expect(context.polkadotApi.events.treasury.Deposit.is(events[4].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5].event)).to.be.true; + break; + default: + throw new Error(`Unexpected extrinsic`); + } + }); + expect(signedBlock.block.extrinsics).to.be.lengthOf(4); + }); +}); + +describeDevMoonbeam("Author Mapping - double registration", (context) => { + it("should succeed in adding an association for bob", async function () { + // How much fee does it consume the extrinsic + const fee = ( + await context.polkadotApi.tx.authorMapping + .addAssociation(BALTATHAR_SESSION_ADDRESS) + .paymentInfo(alith) + ).partialFee.toBigInt(); + + await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(BALTATHAR_SESSION_ADDRESS) + ); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + const expectedReservecBalance = 2n * DEFAULT_GENESIS_MAPPING; + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.free.toBigInt() + ).to.eq(DEFAULT_GENESIS_BALANCE - expectedReservecBalance - fee); + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.reserved.toBigInt() + ).to.eq(expectedReservecBalance); + }); + + it("should associate with charlie, although already associated with bob", async function () { + // Grab free balance before this test + let genesisAccountBalanceBefore = ( + await context.polkadotApi.query.system.account(alith.address) + ).data.free.toBigInt(); + const fee = ( + await context.polkadotApi.tx.authorMapping + .addAssociation(CHARLETH_SESSION_ADDRESS) + .paymentInfo(alith) + ).partialFee.toBigInt(); + await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(CHARLETH_SESSION_ADDRESS) + ); + //check that both are registered + expect((await getMappingInfo(context, CHARLETH_SESSION_ADDRESS)).account).to.eq(alith.address); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + const expectedReservecBalance = 3n * DEFAULT_GENESIS_MAPPING; + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.free.toBigInt() + ).to.eq(genesisAccountBalanceBefore - DEFAULT_GENESIS_MAPPING - fee); + expect( + (await context.polkadotApi.query.system.account(alith.address)).data.reserved.toBigInt() + ).to.eq(expectedReservecBalance); + }); +}); + +describeDevMoonbeam("Author Mapping - registered author can clear (de register)", (context) => { + it("should succeed in clearing an association", async function () { + await context.createBlock( + context.polkadotApi.tx.authorMapping + .addAssociation(BALTATHAR_SESSION_ADDRESS) + .signAsync(alith) + ); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.authorMapping.clearAssociation(BALTATHAR_SESSION_ADDRESS) + ); + //check events + expect(events.length === 6); + expect(context.polkadotApi.events.balances.Unreserved.is(events[1].event)).to.be.true; + expect(context.polkadotApi.events.authorMapping.KeysRemoved.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.treasury.Deposit.is(events[4].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[5].event)).to.be.true; + + // check mapping + expect(await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).to.eq(null); + }); +}); + +describeDevMoonbeam("Author Mapping - unregistered author cannot clear association", (context) => { + it("should not succeed in clearing an association for an unregistered author", async function () { + expect(await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).to.eq(null); + + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.authorMapping.clearAssociation(BALTATHAR_SESSION_ADDRESS) + ); + expect(events.length === 6); + expect(context.polkadotApi.events.system.NewAccount.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[3].event)).to.be.true; + expect(context.polkadotApi.events.treasury.Deposit.is(events[4].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5].event)).to.be.true; + }); +}); + +describeDevMoonbeam("Author Mapping - non author clearing", (context) => { + it("should not succeed in clearing an association for a non-author", async function () { + await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(BALTATHAR_SESSION_ADDRESS) + ); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.authorMapping + .clearAssociation(BALTATHAR_SESSION_ADDRESS) + .signAsync(baltathar) + ); + + expect(events.length === 4); + expect(context.polkadotApi.events.treasury.Deposit.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[3].event)).to.be.true; + }); +}); + +describeDevMoonbeam("Author Mapping - registered can rotate", (context) => { + it("should succeed in rotating account ids for an author", async function () { + await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(BALTATHAR_SESSION_ADDRESS) + ); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + + await context.createBlock( + context.polkadotApi.tx.authorMapping.updateAssociation( + BALTATHAR_SESSION_ADDRESS, + CHARLETH_SESSION_ADDRESS + ) + ); + expect(await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).to.eq(null); + expect((await getMappingInfo(context, CHARLETH_SESSION_ADDRESS)).account).to.eq(alith.address); + + await context.createBlock(); + }); +}); + +describeDevMoonbeam("Author Mapping - unregistered cannot rotate", (context) => { + it("should fail rotating account ids if not registered", async function () { + await context.createBlock( + context.polkadotApi.tx.authorMapping.updateAssociation( + BALTATHAR_SESSION_ADDRESS, + CHARLETH_SESSION_ADDRESS + ) + ); + expect(await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).to.eq(null); + expect(await getMappingInfo(context, CHARLETH_SESSION_ADDRESS)).to.eq(null); + + await context.createBlock(); + }); +}); + +describeDevMoonbeam("Author Mapping - non-author cannot rotate", (context) => { + it("should fail rotating account ids if not an author", async function () { + await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(BALTATHAR_SESSION_ADDRESS) + ); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + + await context.createBlock( + context.polkadotApi.tx.authorMapping + .updateAssociation(BALTATHAR_SESSION_ADDRESS, CHARLETH_SESSION_ADDRESS) + .signAsync(baltathar) + ); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); + expect(await getMappingInfo(context, CHARLETH_SESSION_ADDRESS)).to.eq(null); + + await context.createBlock(); + }); +}); diff --git a/tests/tests/test-authorize-upgrade-hash.ts b/tests/tests/test-authorize-upgrade-hash.ts deleted file mode 100644 index 191192de28..0000000000 --- a/tests/tests/test-authorize-upgrade-hash.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { expect } from "chai"; -import { blake2AsHex } from "@polkadot/util-crypto"; - -const MOONBASE_RUNTIME_701_BLAKE2_256 = - "d541cb056f0611bc0fc36b3371cd11d705924b4bfa5c41840111fd2e8cf37a3f"; -const MOONBASE_RUNTIME_701_AUTHORIZE_UPGRADE_SRTOOL = - "0x64cf767488b73d7cc5281ebd6f0a2db15cb1f90076babe0fe0084ec8c5620c9b"; -const MOONBASE_RUNTIME_701_AUTHORIZE_UPGRADE_REAL = - "0xf4c35abcb96d3d870db495d63a12c734911ca8cf0279c36f58ddeab63e225079"; - -describe("Compute AuthorizeUpgrade hash", () => { - it("Srtool should compute with prefix 0x0103", function () { - let authorizeUpgradeHash1 = blake2AsHex("0x0103" + MOONBASE_RUNTIME_701_BLAKE2_256); - expect(authorizeUpgradeHash1).to.equal(MOONBASE_RUNTIME_701_AUTHORIZE_UPGRADE_SRTOOL); - }); - it("Real hash should be computed with prefix 0x0603", function () { - let authorizeUpgradeHash6 = blake2AsHex("0x0603" + MOONBASE_RUNTIME_701_BLAKE2_256); - expect(authorizeUpgradeHash6).to.equal(MOONBASE_RUNTIME_701_AUTHORIZE_UPGRADE_REAL); - }); -}); diff --git a/tests/tests/test-balance/test-balance-existential.ts b/tests/tests/test-balance/test-balance-existential.ts new file mode 100644 index 0000000000..097b4e7806 --- /dev/null +++ b/tests/tests/test-balance/test-balance-existential.ts @@ -0,0 +1,69 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { Account } from "web3-core"; +import { alith, baltathar } from "../../util/accounts"; +import { GLMR, MIN_GAS_PRICE } from "../../util/constants"; +import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; + +describeDevMoonbeamAllEthTxTypes("Existential Deposit", (context) => { + let randomWeb3Account: Account; + it("setup accounts", async function () { + randomWeb3Account = context.web3.eth.accounts.create("random"); + const { result, block } = await context.createBlock( + createTransfer(context, randomWeb3Account.address, 10n * GLMR, { + from: alith.address, + gas: 21000, + }) + ); + expect(result.successful, result.error?.name).to.be.true; + }); + + it("should be disabled (no reaped account on 0 balance)", async function () { + const { block, result } = await context.createBlock( + createTransfer(context, alith.address, 10n * GLMR - 21000n * MIN_GAS_PRICE, { + from: randomWeb3Account.address, + privateKey: randomWeb3Account.privateKey, + gas: 21000, + }) + ); + expect(result.successful, result.error?.name).to.be.true; + expect(parseInt(await context.web3.eth.getBalance(randomWeb3Account.address))).to.eq(0); + expect(await context.web3.eth.getTransactionCount(randomWeb3Account.address)).to.eq(1); + }); +}); + +describeDevMoonbeamAllEthTxTypes("Existential Deposit", (context) => { + let randomWeb3Account: Account; + it("setup accounts", async function () { + randomWeb3Account = context.web3.eth.accounts.create("random"); + await context.createBlock( + createTransfer(context, randomWeb3Account.address, 10n * GLMR, { + from: alith.address, + gas: 21000, + }) + ); + }); + + it("should be disabled (no reaped account on tiny balance - 1)", async function () { + await context.createBlock( + createTransfer(context, baltathar.address, 10n * GLMR - 1n - 21000n * 1_000_000_000n, { + from: randomWeb3Account.address, + privateKey: randomWeb3Account.privateKey, + gas: 21000, + }) + ); + expect(parseInt(await context.web3.eth.getBalance(randomWeb3Account.address))).to.eq(1); + expect(await context.web3.eth.getTransactionCount(randomWeb3Account.address)).to.eq(1); + }); +}); + +describeDevMoonbeam("Existential Deposit", (context) => { + it("checks that existantial deposit is set to zero", async function () { + // Grab existential deposit + let existentialDeposit = (await context.polkadotApi.consts.balances.existentialDeposit) as any; + expect(existentialDeposit.toBigInt()).to.eq(0n); + }); +}); diff --git a/tests/tests/test-balance/test-balance-extrinsics.ts b/tests/tests/test-balance/test-balance-extrinsics.ts index 74d67acb5d..927f6a837d 100644 --- a/tests/tests/test-balance/test-balance-extrinsics.ts +++ b/tests/tests/test-balance/test-balance-extrinsics.ts @@ -1,14 +1,16 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { GENESIS_ACCOUNT, TEST_ACCOUNT } from "../../util/constants"; +import { alith, generateKeyringPair } from "../../util/accounts"; +import { mapExtrinsics } from "../../util/block"; import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createTransfer } from "../../util/transactions"; -describeDevMoonbeamAllEthTxTypes("Balance extrinsics", (context) => { - it("should appear after transfer", async function () { - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], - }); +describeDevMoonbeamAllEthTxTypes("Balance - Extrinsic", (context) => { + const randomAccount = generateKeyringPair(); + it("should emit ethereum/transfer events", async function () { + await context.createBlock(createTransfer(context, randomAccount.address, 512)); const blockHash = await context.polkadotApi.rpc.chain.getBlockHash(1); const signedBlock = await context.polkadotApi.rpc.chain.getBlock(blockHash); @@ -16,44 +18,19 @@ describeDevMoonbeamAllEthTxTypes("Balance extrinsics", (context) => { signedBlock.block.header.hash )) as any; - // map between the extrinsics and events - signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { - // filter the specific events based on the phase and then the - // index of our extrinsic in the block - const events = allRecords - .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index)) - .map(({ event }) => event); + const txsWithEvents = mapExtrinsics(signedBlock.block.extrinsics, allRecords); + + const ethTx = txsWithEvents.find(({ extrinsic: { method } }) => method.section == "ethereum"); - switch (index) { - // First 3 events: - // timestamp.set:: system.ExtrinsicSuccess - // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess - // authorInherent.setAuthor:: system.ExtrinsicSuccess - case 0: - case 1: - case 2: - expect( - events.length === 1 && context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0]) - ).to.be.true; - break; - // Fourth event: ethereum.transact:: system.NewAccount, balances.Endowed, (?), - // ethereum.Executed, system.ExtrinsicSuccess - case 3: - expect(section === "ethereum" && method === "transact").to.be.true; - expect(events.length).to.eq(11); - expect(context.polkadotApi.events.system.NewAccount.is(events[1])).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[2])).to.be.true; - expect(context.polkadotApi.events.balances.Transfer.is(events[3])).to.be.true; - expect(events[3].data[0].toString()).to.eq(GENESIS_ACCOUNT); - // TODO: what event was inserted here? - expect(context.polkadotApi.events.balances.Endowed.is(events[7])).to.be.true; // treasury - expect(context.polkadotApi.events.treasury.Deposit.is(events[8])).to.be.true; - expect(context.polkadotApi.events.ethereum.Executed.is(events[9])).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[10])).to.be.true; - break; - default: - throw new Error(`Unexpected extrinsic`); - } - }); + expect(ethTx.events.length).to.eq(11); + expect(context.polkadotApi.events.system.NewAccount.is(ethTx.events[1])).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(ethTx.events[2])).to.be.true; + expect(context.polkadotApi.events.balances.Transfer.is(ethTx.events[3])).to.be.true; + expect(ethTx.events[3].data[0].toString()).to.eq(alith.address); + expect(ethTx.events[3].data[1].toString()).to.eq(randomAccount.address); + expect(context.polkadotApi.events.balances.Endowed.is(ethTx.events[7])).to.be.true; // treasury + expect(context.polkadotApi.events.treasury.Deposit.is(ethTx.events[8])).to.be.true; + expect(context.polkadotApi.events.ethereum.Executed.is(ethTx.events[9])).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(ethTx.events[10])).to.be.true; }); }); diff --git a/tests/tests/test-balance/test-balance-genesis.ts b/tests/tests/test-balance/test-balance-genesis.ts index 1d7d8047b8..7bd51ab9d4 100644 --- a/tests/tests/test-balance/test-balance-genesis.ts +++ b/tests/tests/test-balance/test-balance-genesis.ts @@ -1,21 +1,28 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_BALANCE } from "../../util/constants"; +import { + alith, + ALITH_GENESIS_FREE_BALANCE, + ALITH_GENESIS_RESERVE_BALANCE, + ALITH_GENESIS_TRANSFERABLE_BALANCE, +} from "../../util/accounts"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Balance genesis", (context) => { it("should be accessible through web3", async function () { - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 0)).to.equal( - GENESIS_ACCOUNT_BALANCE.toString() + expect(await context.web3.eth.getBalance(alith.address, 0)).to.equal( + ALITH_GENESIS_TRANSFERABLE_BALANCE.toString() ); }); it("should be accessible through polkadotJs", async function () { const genesisHash = await context.polkadotApi.rpc.chain.getBlockHash(0); - const account = (await context.polkadotApi.query.system.account.at( - genesisHash, - GENESIS_ACCOUNT - )) as any; - expect(account.data.free.toString()).to.equal(GENESIS_ACCOUNT_BALANCE.toString()); + const account = await ( + await context.polkadotApi.at(genesisHash) + ).query.system.account(alith.address); + expect(account.data.free.toString()).to.equal(ALITH_GENESIS_FREE_BALANCE.toString()); + expect(account.data.reserved.toString()).to.equal(ALITH_GENESIS_RESERVE_BALANCE.toString()); }); }); diff --git a/tests/tests/test-balance/test-balance-reducible.ts b/tests/tests/test-balance/test-balance-reducible.ts index 4d788380e6..d04c22797b 100644 --- a/tests/tests/test-balance/test-balance-reducible.ts +++ b/tests/tests/test-balance/test-balance-reducible.ts @@ -1,23 +1,22 @@ -import Keyring from "@polkadot/keyring"; +import "@moonbeam-network/api-augment"; + +import { blake2AsHex } from "@polkadot/util-crypto"; import { expect } from "chai"; + import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_BALANCE, - GENESIS_ACCOUNT_PRIVATE_KEY, - TEST_ACCOUNT, -} from "../../util/constants"; -import type { SubmittableExtrinsic } from "@polkadot/api/promise/types"; + alith, + ALITH_GENESIS_TRANSFERABLE_BALANCE, + generateKeyringPair, +} from "../../util/accounts"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import { blake2AsHex } from "@polkadot/util-crypto"; +import type { SubmittableExtrinsic } from "@polkadot/api/promise/types"; describeDevMoonbeam("Reducible Balance", (context) => { + const randomAccount = generateKeyringPair(); it("should show the reducible balanced when some amount is locked", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - // Balance should be untouched - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( - GENESIS_ACCOUNT_BALANCE.toString() + expect(await context.web3.eth.getBalance(alith.address)).to.equal( + ALITH_GENESIS_TRANSFERABLE_BALANCE.toString() ); // Grab existential deposit @@ -25,37 +24,27 @@ describeDevMoonbeam("Reducible Balance", (context) => { // Let's lock some funds by doing a public referendum proposal let lock_amount = (await context.polkadotApi.consts.democracy.minimumDeposit) as any; - const proposal = context.polkadotApi.tx.balances.setBalance(TEST_ACCOUNT, 100, 100); + const proposal = context.polkadotApi.tx.balances.setBalance(randomAccount.address, 100, 100); // We encode the proposal let encodedProposal = (proposal as SubmittableExtrinsic)?.method.toHex() || ""; let encodedHash = blake2AsHex(encodedProposal); // Submit the pre-image - await context.polkadotApi.tx.democracy - .notePreimage(encodedProposal) - .signAndSend(genesisAccount); - - await context.createBlock(); + await context.createBlock(context.polkadotApi.tx.democracy.notePreimage(encodedProposal)); // Record balance - let beforeBalance = await context.web3.eth.getBalance(GENESIS_ACCOUNT); + let beforeBalance = await context.web3.eth.getBalance(alith.address); // Fees const fee = ( - await context.polkadotApi.tx.democracy - .propose(encodedHash, lock_amount) - .paymentInfo(genesisAccount) + await context.polkadotApi.tx.democracy.propose(encodedHash, lock_amount).paymentInfo(alith) ).partialFee as any; // Propose - await context.polkadotApi.tx.democracy - .propose(encodedHash, lock_amount) - .signAndSend(genesisAccount); - - await context.createBlock(); + await context.createBlock(context.polkadotApi.tx.democracy.propose(encodedHash, lock_amount)); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT)).to.equal( + expect(await context.web3.eth.getBalance(alith.address)).to.equal( ( BigInt(beforeBalance) - BigInt(lock_amount) + diff --git a/tests/tests/test-balance/test-balance-transfer-txwrapper-substrate.ts b/tests/tests/test-balance/test-balance-transfer-txwrapper-substrate.ts index abcdd32abd..f224d1073e 100644 --- a/tests/tests/test-balance/test-balance-transfer-txwrapper-substrate.ts +++ b/tests/tests/test-balance/test-balance-transfer-txwrapper-substrate.ts @@ -1,19 +1,24 @@ // As inspired by https://github.com/paritytech/txwrapper/blob/master/examples/polkadot.ts // This flow is used by some exchange partners like kraken +import "@moonbeam-network/api-augment"; -import { expect } from "chai"; +import { EXTRINSIC_VERSION } from "@polkadot/types/extrinsic/v4/Extrinsic"; +import { + createMetadata, + getSpecTypes, + KeyringPair, + OptionsWithMeta, + TypeRegistry, +} from "@substrate/txwrapper-core"; +import { createSignedTx, createSigningPayload } from "@substrate/txwrapper-core/lib/core/construct"; +import { getRegistryBase } from "@substrate/txwrapper-core/lib/core/metadata"; import { methods as substrateMethods } from "@substrate/txwrapper-substrate"; -import { createMetadata, KeyringPair, OptionsWithMeta } from "@substrate/txwrapper-core"; -import { Keyring } from "@polkadot/api"; -import { getRegistry } from "@substrate/txwrapper-registry"; - -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY, TEST_ACCOUNT } from "../../util/constants"; +import { expect } from "chai"; +import { alith, ALITH_GENESIS_LOCK_BALANCE, generateKeyringPair } from "../../util/accounts"; +import { verifyLatestBlockFees } from "../../util/block"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; import { rpcToLocalNode } from "../../util/transactions"; -import { EXTRINSIC_VERSION } from "@polkadot/types/extrinsic/v4/Extrinsic"; -import { createSignedTx, createSigningPayload } from "@substrate/txwrapper-core/lib/core/construct"; -import { verifyLatestBlockFees } from "../../util/block"; /** * Signing function. Implement this on the OFFLINE signing device. @@ -41,6 +46,7 @@ export function signWith( } describeDevMoonbeam("Balance transfer - txwrapper", (context) => { + const randomAccount = generateKeyringPair(); before("Create block with transfer to test account of 512", async function () { // txwrapper takes more time to initiate :/ this.timeout(10000); @@ -59,25 +65,29 @@ describeDevMoonbeam("Balance transfer - txwrapper", (context) => { rpcToLocalNode(context.rpcPort, "state_getRuntimeVersion"), ]); - const registry = getRegistry({ - chainName: "Moonriver", - specName, - specVersion, + const registry = getRegistryBase({ + chainProperties: { + ss58Format: 1285, + tokenDecimals: 18, + tokenSymbol: "MOVR", + }, + specTypes: getSpecTypes(new TypeRegistry(), "Moonriver", specName, specVersion), metadataRpc, }); + const unsigned = substrateMethods.balances.transfer( { - dest: TEST_ACCOUNT, + dest: randomAccount.address, value: 512, }, { - address: GENESIS_ACCOUNT, + address: alith.address, blockHash, blockNumber: registry.createType("BlockNumber", block.header.number).toNumber(), eraPeriod: 64, genesisHash, metadataRpc, - nonce: 0, // Assuming this is Gerald's first tx on the chain + nonce: 0, // Assuming this is Alith's first tx on the chain specVersion, tip: 0, transactionVersion, @@ -89,9 +99,7 @@ describeDevMoonbeam("Balance transfer - txwrapper", (context) => { ); const signingPayload = createSigningPayload(unsigned, { registry }); - const keyring = new Keyring({ type: "ethereum" }); - const genesis = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - const signature = signWith(genesis, signingPayload, { + const signature = signWith(alith, signingPayload, { metadataRpc, registry, }); @@ -103,19 +111,20 @@ describeDevMoonbeam("Balance transfer - txwrapper", (context) => { }); it("should increase to account", async function () { - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 0)).to.equal("0"); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal("512"); + expect(await context.web3.eth.getBalance(randomAccount.address, 0)).to.equal("0"); + expect(await context.web3.eth.getBalance(randomAccount.address, 1)).to.equal("512"); }); it("should reflect balance identically on polkadot/web3", async function () { const block1Hash = await context.polkadotApi.rpc.chain.getBlockHash(1); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( - ( - (await context.polkadotApi.query.system.account.at(block1Hash, GENESIS_ACCOUNT)) as any - ).data.free.toString() + const balance = await ( + await context.polkadotApi.at(block1Hash) + ).query.system.account(alith.address); + expect(await context.web3.eth.getBalance(alith.address, 1)).to.equal( + (balance.data.free.toBigInt() - ALITH_GENESIS_LOCK_BALANCE).toString() ); }); it("should check fees", async function () { - await verifyLatestBlockFees(context, expect, BigInt(512)); + await verifyLatestBlockFees(context, BigInt(512)); }); }); diff --git a/tests/tests/test-balance/test-balance-transfer.ts b/tests/tests/test-balance/test-balance-transfer.ts index 79a7e0a82d..f73e853d7f 100644 --- a/tests/tests/test-balance/test-balance-transfer.ts +++ b/tests/tests/test-balance/test-balance-transfer.ts @@ -1,72 +1,92 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { BN } from "@polkadot/util"; -import { verifyLatestBlockFees } from "../../util/block"; -import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_BALANCE, - ALITH, - ALITH_PRIV_KEY, - TEST_ACCOUNT, -} from "../../util/constants"; +import Web3 from "web3"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createTransfer, createTransaction } from "../../util/transactions"; +import { + alith, + ALITH_GENESIS_LOCK_BALANCE, + ALITH_GENESIS_TRANSFERABLE_BALANCE, + baltathar, + generateKeyringPair, +} from "../../util/accounts"; +import { verifyLatestBlockFees } from "../../util/block"; import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { + ALITH_TRANSACTION_TEMPLATE, + createTransaction, + createTransfer, +} from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Balance transfer cost", (context) => { + const randomAccount = generateKeyringPair(); it("should cost 21000 * 1_000_000_000", async function () { - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 0)], - }); + await context.createBlock(createTransfer(context, randomAccount.address, 0)); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( - (GENESIS_ACCOUNT_BALANCE - 21000n * 1_000_000_000n).toString() + expect(await context.web3.eth.getBalance(alith.address, 1)).to.equal( + (ALITH_GENESIS_TRANSFERABLE_BALANCE - 21000n * 1_000_000_000n).toString() ); }); }); describeDevMoonbeamAllEthTxTypes("Balance transfer", (context) => { + const randomAccount = generateKeyringPair(); before("Create block with transfer to test account of 512", async () => { await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - await createTransfer(context, TEST_ACCOUNT, 512), + await createTransfer(context, randomAccount.address, 512), ]); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, "pending")).to.equal( - (GENESIS_ACCOUNT_BALANCE - 512n - 21000n * 1_000_000_000n).toString() + expect(await context.web3.eth.getBalance(alith.address, "pending")).to.equal( + (ALITH_GENESIS_TRANSFERABLE_BALANCE - 512n - 21000n * 1_000_000_000n).toString() ); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, "pending")).to.equal("512"); + expect(await context.web3.eth.getBalance(randomAccount.address, "pending")).to.equal("512"); await context.createBlock(); }); it("should decrease from account", async function () { // 21000 covers the cost of the transaction - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( - (GENESIS_ACCOUNT_BALANCE - 512n - 21000n * 1_000_000_000n).toString() + expect(await context.web3.eth.getBalance(alith.address, 1)).to.equal( + (ALITH_GENESIS_TRANSFERABLE_BALANCE - 512n - 21000n * 1_000_000_000n).toString() ); }); it("should increase to account", async function () { - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 0)).to.equal("0"); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal("512"); + expect(await context.web3.eth.getBalance(randomAccount.address, 0)).to.equal("0"); + expect(await context.web3.eth.getBalance(randomAccount.address, 1)).to.equal("512"); }); it("should reflect balance identically on polkadot/web3", async function () { const block1Hash = await context.polkadotApi.rpc.chain.getBlockHash(1); - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( + expect(await context.web3.eth.getBalance(alith.address, 1)).to.equal( ( - (await context.polkadotApi.query.system.account.at(block1Hash, GENESIS_ACCOUNT)) as any - ).data.free.toString() + ( + await (await context.polkadotApi.at(block1Hash)).query.system.account(alith.address) + ).data.free.toBigInt() - ALITH_GENESIS_LOCK_BALANCE + ).toString() ); }); }); describeDevMoonbeamAllEthTxTypes("Balance transfer - fees", (context) => { + const randomAccount = generateKeyringPair(); before("Create block with transfer to test account of 512", async () => { - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], - }); + await context.createBlock(createTransfer(context, randomAccount.address, 512)); }); it("should check latest block fees", async function () { - await verifyLatestBlockFees(context, expect, BigInt(512)); + await verifyLatestBlockFees(context, BigInt(512)); + }); +}); + +describeDevMoonbeam("Balance transfer - Multiple transfers", (context) => { + it("should be successful", async function () { + const { result } = await context.createBlock([ + createTransfer(context, baltathar.address, 10n ** 18n, { nonce: 0 }), + createTransfer(context, baltathar.address, 10n ** 18n, { nonce: 1 }), + createTransfer(context, baltathar.address, 10n ** 18n, { nonce: 2 }), + createTransfer(context, baltathar.address, 10n ** 18n, { nonce: 3 }), + ]); + console.log(result); + expect(result.filter((r) => r.successful)).to.be.length(4); }); }); @@ -74,25 +94,23 @@ describeDevMoonbeam( "Balance transfer - EIP1559 fees", (context) => { it("should handle max_fee_per_gas", async function () { - const preBalance = BigInt(await context.web3.eth.getBalance(ALITH)); + const randomAccount = generateKeyringPair(); + const preBalance = BigInt(await context.web3.eth.getBalance(alith.address)); // With this configuration no priority fee will be used, as the max_fee_per_gas is exactly the // base fee. Expect the balances to reflect this case. const maxFeePerGas = 1_000_000_000; - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x5208", - maxFeePerGas: maxFeePerGas, - maxPriorityFeePerGas: "0xBEBC200", // 0.2GWEI - to: TEST_ACCOUNT, - data: "0x", - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - const postBalance = BigInt(await context.web3.eth.getBalance(ALITH)); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + gas: "0x5208", + maxFeePerGas: maxFeePerGas, + maxPriorityFeePerGas: "0xBEBC200", // 0.2GWEI + to: randomAccount.address, + data: "0x", + }) + ); + const postBalance = BigInt(await context.web3.eth.getBalance(alith.address)); const fee = BigInt(21_000 * maxFeePerGas); const expectedPostBalance = preBalance - fee; @@ -106,25 +124,23 @@ describeDevMoonbeam( "Balance transfer - EIP1559 fees", (context) => { it("should use partial max_priority_fee_per_gas", async function () { - const preBalance = BigInt(await context.web3.eth.getBalance(ALITH)); + const randomAccount = generateKeyringPair(); + const preBalance = BigInt(await context.web3.eth.getBalance(alith.address)); // With this configuration only half of the priority fee will be used, as the max_fee_per_gas // is 2GWEI and the base fee is 1GWEI. const maxFeePerGas = 1_000_000_000 * 2; - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x5208", - maxFeePerGas: maxFeePerGas, - maxPriorityFeePerGas: maxFeePerGas, - to: TEST_ACCOUNT, - data: "0x", - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - const postBalance = BigInt(await context.web3.eth.getBalance(ALITH)); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + gas: "0x5208", + maxFeePerGas: maxFeePerGas, + maxPriorityFeePerGas: maxFeePerGas, + to: randomAccount.address, + data: "0x", + }) + ); + const postBalance = BigInt(await context.web3.eth.getBalance(alith.address)); const fee = BigInt(21_000 * maxFeePerGas); const expectedPostBalance = preBalance - fee; diff --git a/tests/tests/test-block/test-block-1.ts b/tests/tests/test-block/test-block-1.ts index 63d9c8c7e3..7b2fa97d00 100644 --- a/tests/tests/test-block/test-block-1.ts +++ b/tests/tests/test-block/test-block-1.ts @@ -1,5 +1,8 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { COLLATOR_ACCOUNT } from "../../util/constants"; + +import { alith } from "../../util/accounts"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Block 1", (context) => { @@ -23,7 +26,7 @@ describeDevMoonbeam("Block 1", (context) => { it("should contain block information", async function () { const block = await context.web3.eth.getBlock("latest"); expect(block).to.include({ - author: COLLATOR_ACCOUNT.toLowerCase(), // web3 doesn't checksum + author: alith.address.toLocaleLowerCase(), // web3 doesn't checksum difficulty: "0", extraData: "0x", gasLimit: 15000000, @@ -39,10 +42,7 @@ describeDevMoonbeam("Block 1", (context) => { expect(block.transactions).to.be.a("array").empty; expect(block.uncles).to.be.a("array").empty; - expect((block as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); + expect(block.nonce).to.be.eq("0x0000000000000000"); expect(block.hash).to.be.a("string").lengthOf(66); expect(block.parentHash).to.be.a("string").lengthOf(66); expect(block.timestamp).to.be.a("number"); diff --git a/tests/tests/test-block/test-block-2.ts b/tests/tests/test-block/test-block-2.ts index 6c61d7cba6..43b8142cf3 100644 --- a/tests/tests/test-block/test-block-2.ts +++ b/tests/tests/test-block/test-block-2.ts @@ -1,4 +1,7 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Block 2", (context) => { diff --git a/tests/tests/test-block/test-block-gas.ts b/tests/tests/test-block/test-block-gas.ts index 40ef968c7e..49f4de7aea 100644 --- a/tests/tests/test-block/test-block-gas.ts +++ b/tests/tests/test-block/test-block-gas.ts @@ -1,42 +1,41 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { EXTRINSIC_GAS_LIMIT } from "../../util/constants"; -import { createContract } from "../../util/transactions"; import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createContract } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Block Gas - Limit", (context) => { it("should be allowed to the max block gas", async function () { - const { rawTx } = await createContract(context, "TestContract", { - gas: EXTRINSIC_GAS_LIMIT, - }); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - expect(txResults[0].result).to.not.be.null; + const { rawTx } = await createContract(context, "MultiplyBy7", { gas: EXTRINSIC_GAS_LIMIT }); + const { result } = await context.createBlock(rawTx); + expect(result.successful).to.be.true; - const receipt = await context.web3.eth.getTransaction(txResults[0].result); + const receipt = await context.web3.eth.getTransaction(result.hash); expect(receipt.blockHash).to.be.not.null; }); }); describeDevMoonbeamAllEthTxTypes("Block Gas - Limit", (context) => { it("should fail setting it over the max block gas", async function () { - const { rawTx } = await createContract(context, "TestContract", { + const { rawTx } = await createContract(context, "MultiplyBy7", { gas: EXTRINSIC_GAS_LIMIT + 1, }); expect( ((await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx])).error as any) .message - ).to.equal("gas limit reached"); + ).to.equal("exceeds block gas limit"); }); }); describeDevMoonbeam("Block Gas - Limit", (context) => { // TODO: Joshy to fix block gas access in smart contract - it.skip("should be accessible within a contract", async function () { - const { contract, rawTx } = await createContract(context, "CheckBlockVariables"); - await context.createBlock({ transactions: [rawTx] }); - - expect((await contract.methods.gaslimit().call()) !== "0").to.eq(true); + it("should be accessible within a contract", async function () { + const { contract, rawTx } = await createContract(context, "BlockVariables"); + await context.createBlock(rawTx); + expect(await contract.methods.getGasLimit().call()).to.equal("15000000"); }); }); diff --git a/tests/tests/test-block/test-block-genesis.ts b/tests/tests/test-block/test-block-genesis.ts index a9c66e463a..a010b9d47b 100644 --- a/tests/tests/test-block/test-block-genesis.ts +++ b/tests/tests/test-block/test-block-genesis.ts @@ -1,4 +1,7 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Block genesis", (context) => { @@ -25,10 +28,7 @@ describeDevMoonbeam("Block genesis", (context) => { expect(block.transactions).to.be.a("array").empty; expect(block.uncles).to.be.a("array").empty; - expect((block as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); + expect(block.nonce).to.be.eq("0x0000000000000000"); expect(block.hash).to.be.a("string").lengthOf(66); expect(block.parentHash).to.be.a("string").lengthOf(66); expect(block.timestamp).to.be.a("number"); diff --git a/tests/tests/test-block/test-block-mocked-relay.ts b/tests/tests/test-block/test-block-mocked-relay.ts index a1dccf56fc..0d2a9c9a2b 100644 --- a/tests/tests/test-block/test-block-mocked-relay.ts +++ b/tests/tests/test-block/test-block-mocked-relay.ts @@ -1,4 +1,7 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Block - Mocked relaychain block", (context) => { diff --git a/tests/tests/test-fork-chain.ts b/tests/tests/test-chain/test-fork-chain.ts similarity index 71% rename from tests/tests/test-fork-chain.ts rename to tests/tests/test-chain/test-fork-chain.ts index f230588443..4513a3e65f 100644 --- a/tests/tests/test-fork-chain.ts +++ b/tests/tests/test-chain/test-fork-chain.ts @@ -1,14 +1,16 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { createTransfer } from "../util/transactions"; -import { TEST_ACCOUNT } from "../util/constants"; +import { baltathar } from "../../util/accounts"; +import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; -describeDevMoonbeam("Fork", (context) => { +describeDevMoonbeam("Chain - Fork", (context) => { it("should change best chain to the longest chain", async function () { // Creation of the best chain so far, with blocks 0-1-2 - await context.createBlock({ finalize: false }); - await context.createBlock({ finalize: false }); + await context.createBlock([], { finalize: false }); + await context.createBlock([], { finalize: false }); // Lets grab the ethereum block hashes so far let ethHash1 = (await context.web3.eth.getBlock(1)).hash; @@ -19,7 +21,7 @@ describeDevMoonbeam("Fork", (context) => { // We start parenting to the genesis let parentHash = (await context.polkadotApi.rpc.chain.getBlockHash(0)) as any; for (let i = 0; i <= currentHeight; i++) { - parentHash = (await context.createBlock({ parentHash, finalize: false })).block.hash; + parentHash = (await context.createBlock([], { parentHash, finalize: false })).block.hash; } // We created at 1 block more than the previous best chain. We should be in the best chain now @@ -30,15 +32,14 @@ describeDevMoonbeam("Fork", (context) => { }); }); -describeDevMoonbeamAllEthTxTypes("Fork", (context) => { +describeDevMoonbeamAllEthTxTypes("Chain - Fork", (context) => { it("should re-insert Tx from retracted fork on new canonical chain", async function () { // Creation of the best chain so far, with blocks 0-1-2 and a transfer in block 2 - await context.createBlock({ finalize: false }); - const { txResults } = await context.createBlock({ + await context.createBlock([], { finalize: false }); + const { result } = await context.createBlock(createTransfer(context, baltathar.address, 512), { finalize: false, - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], }); - const insertedTx = txResults[0].result; + const insertedTx = result.hash; const retractedTx = await context.web3.eth.getTransaction(insertedTx); expect(retractedTx).to.not.be.null; @@ -47,7 +48,7 @@ describeDevMoonbeamAllEthTxTypes("Fork", (context) => { let parentHash = (await context.polkadotApi.rpc.chain.getBlockHash(0)) as any; // Create enough blocks to ensure the TX is re-scheduled and that chain is new best for (let i = 0; i < 10; i++) { - parentHash = (await context.createBlock({ parentHash, finalize: false })).block.hash; + parentHash = (await context.createBlock([], { parentHash, finalize: false })).block.hash; // TODO: investigate why ! Gives extra time (trouble with ci) await new Promise((resolve) => setTimeout(resolve, 100)); } diff --git a/tests/tests/test-contract/test-contract-creation.ts b/tests/tests/test-contract/test-contract-creation.ts index d270c30eaa..daefea3128 100644 --- a/tests/tests/test-contract/test-contract-creation.ts +++ b/tests/tests/test-contract/test-contract-creation.ts @@ -1,29 +1,29 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { verifyLatestBlockFees } from "../../util/block"; +import { getCompiled } from "../../util/contracts"; +import { customWeb3Request } from "../../util/providers"; import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract } from "../../util/transactions"; -import { customWeb3Request } from "../../util/providers"; -import { getCompiled } from "../../util/contracts"; describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { it("should return the transaction hash", async () => { - const { rawTx } = await createContract(context, "TestContract"); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "MultiplyBy7"); + const { result } = await context.createBlock(rawTx); - expect( - txResults[0].result, - "0x286fc7f456a452abb22bc37974fe281164e53ce6381583c8febaa89c92f31c0b" - ); + expect(result.hash, "0x286fc7f456a452abb22bc37974fe281164e53ce6381583c8febaa89c92f31c0b"); }); }); describeDevMoonbeamAllEthTxTypes("eth_call contract create", (context) => { it("should return the contract code", async () => { - const contractData = await getCompiled("TestContract"); + const contractData = await getCompiled("MultiplyBy7"); let callCode = await context.web3.eth.call({ data: contractData.byteCode }); - const { rawTx } = await createContract(context, "TestContract"); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - let receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + const { rawTx } = await createContract(context, "MultiplyBy7"); + const { result } = await context.createBlock(rawTx); + let receipt = await context.web3.eth.getTransactionReceipt(result.hash); let deployedCode = await context.web3.eth.getCode(receipt.contractAddress); expect(callCode).to.be.eq(deployedCode); }); @@ -31,24 +31,24 @@ describeDevMoonbeamAllEthTxTypes("eth_call contract create", (context) => { describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { it("should not contain contract at genesis", async function () { - const { contract } = await createContract(context, "TestContract"); + const { contract } = await createContract(context, "MultiplyBy7"); expect(await context.web3.eth.getCode(contract.options.address)).to.deep.equal("0x"); }); it("should store the code on chain", async function () { const code = "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c6888fa114610030575b" + - "600080fd5b61004a6004803603810190610045919061008b565b610060565b60405161005791906100c3565b" + - "60405180910390f35b600060078261006f91906100de565b9050919050565b60008135905061008581610171" + - "565b92915050565b60006020828403121561009d57600080fd5b60006100ab84828501610076565b91505092" + - "915050565b6100bd81610138565b82525050565b60006020820190506100d860008301846100b4565b929150" + - "50565b60006100e982610138565b91506100f483610138565b9250817fffffffffffffffffffffffffffffff" + - "ffffffffffffffffffffffffffffffffff048311821515161561012d5761012c610142565b5b828202905092" + - "915050565b6000819050919050565b7f4e487b71000000000000000000000000000000000000000000000000" + - "00000000600052601160045260246000fd5b61017a81610138565b811461018557600080fd5b5056fea26469" + - "70667358221220a82dff050f5e40b874671c1f40e579b5a8c361f5313d1a9d32437222ab6a384c64736f6c63" + - "430008030033"; - const { contract, rawTx } = await createContract(context, "TestContract"); + "600080fd5b61004a600480360381019061004591906100b1565b610060565b60405161005791906100ed565b" + + "60405180910390f35b600060078261006f9190610137565b9050919050565b600080fd5b6000819050919050" + + "565b61008e8161007b565b811461009957600080fd5b50565b6000813590506100ab81610085565b92915050" + + "565b6000602082840312156100c7576100c6610076565b5b60006100d58482850161009c565b915050929150" + + "50565b6100e78161007b565b82525050565b600060208201905061010260008301846100de565b9291505056" + + "5b7f4e487b710000000000000000000000000000000000000000000000000000000060005260116004526024" + + "6000fd5b60006101428261007b565b915061014d8361007b565b9250817fffffffffffffffffffffffffffff" + + "ffffffffffffffffffffffffffffffffffff048311821515161561018657610185610108565b5b8282029050" + + "9291505056fea264697066735822122088e950668b5748e91e84dcbc79d123fb0de9f319d0e6de9e07622c37" + + "f53d39eb64736f6c634300080b0033"; + const { contract, rawTx } = await createContract(context, "MultiplyBy7"); await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx]); expect(await context.web3.eth.getCode(contract.options.address, "pending")).to.deep.equal(code); await context.createBlock(); @@ -58,8 +58,8 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { describeDevMoonbeamAllEthTxTypes("Contract creation -block fees", (context) => { it("should check latest block fees", async function () { - const { rawTx } = await createContract(context, "TestContract"); - const {} = await context.createBlock({ transactions: [rawTx] }); - await verifyLatestBlockFees(context, expect); + const { rawTx } = await createContract(context, "MultiplyBy7"); + await context.createBlock(rawTx); + await verifyLatestBlockFees(context); }); }); diff --git a/tests/tests/test-contract/test-contract-delegate-call.ts b/tests/tests/test-contract/test-contract-delegate-call.ts new file mode 100644 index 0000000000..ab2809d19a --- /dev/null +++ b/tests/tests/test-contract/test-contract-delegate-call.ts @@ -0,0 +1,111 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; +import { ethers } from "ethers"; +import { Contract } from "web3-eth-contract"; + +import { alith } from "../../util/accounts"; +import { getCompiled } from "../../util/contracts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract } from "../../util/transactions"; + +describeDevMoonbeam("Delegate Call", (context) => { + it("should work for normal smart contract", async function () { + this.timeout(10000); + + const { contract: contractProxy, rawTx } = await createContract(context, "Proxy"); + await context.createBlock(rawTx); + + const { contract: contractDummy, rawTx: rawTx2 } = await createContract(context, "MultiplyBy7"); + await context.createBlock(rawTx2); + + const proxyInterface = new ethers.utils.Interface((await getCompiled("Proxy")).contract.abi); + const dummyInterface = new ethers.utils.Interface( + (await getCompiled("MultiplyBy7")).contract.abi + ); + + const tx_call = await customWeb3Request(context.web3, "eth_call", [ + { + from: alith.address, + to: contractProxy.options.address, + gas: "0x100000", + value: "0x00", + data: proxyInterface.encodeFunctionData("delegateCall", [ + contractDummy.options.address, + dummyInterface.encodeFunctionData("multiply", [42]), + ]), + }, + ]); + + expect(tx_call.result).to.equal( + "0x0000000000000000000000000000000000000000000000000000000000000001" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "0000000000000000000000000000000000000000000000000000000000000020" + + "0000000000000000000000000000000000000000000000000000000000000126" + ); + }); +}); + +describeDevMoonbeam("DELEGATECALL for precompiles", (context) => { + let contractProxy: Contract; + let proxyInterface: ethers.utils.Interface; + + const PRECOMPILE_PREFIXES = [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 1024, 1025, 1026, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, + ]; + + // Ethereum precompile 1-9 are pure and allowed to be called through DELEGATECALL + const ALLOWED_PRECOMPILE_PREFIXES = PRECOMPILE_PREFIXES.filter((add) => add <= 9); + const FORBIDDEN_PRECOMPILE_PREFIXES = PRECOMPILE_PREFIXES.filter((add) => add > 9); + const DELEGATECALL_FORDIDDEN_MESSAGE = + "0x0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000040" + + "000000000000000000000000000000000000000000000000000000000000002e" + + "63616e6e6f742062652063616c6c656420" + // cannot be called + "776974682044454c454741544543414c4c20" + // with DELEGATECALL + "6f722043414c4c434f4445" + // or CALLCODE + "000000000000000000000000000000000000"; // padding + + before("Setup delecateCall contract", async () => { + const contractDetails = await createContract(context, "Proxy"); + contractProxy = contractDetails.contract; + await context.createBlock(contractDetails.rawTx); + + proxyInterface = new ethers.utils.Interface((await getCompiled("Proxy")).contract.abi); + }); + + for (const precompilePrefix of ALLOWED_PRECOMPILE_PREFIXES) { + it(`should succeed for standard precompile ${precompilePrefix}`, async function () { + const precompileAddress = `0x${precompilePrefix.toString(16).padStart(40, "0")}`; + const tx_call = await customWeb3Request(context.web3, "eth_call", [ + { + from: alith.address, + to: contractProxy.options.address, + gas: "0x200000", + value: "0x00", + data: proxyInterface.encodeFunctionData("delegateCall", [precompileAddress, "0x00"]), + }, + ]); + + expect(tx_call.result).to.not.equal(DELEGATECALL_FORDIDDEN_MESSAGE); + }); + } + + for (const precompilePrefix of FORBIDDEN_PRECOMPILE_PREFIXES) { + it(`should fail for non-standard precompile ${precompilePrefix}`, async function () { + const precompileAddress = `0x${precompilePrefix.toString(16).padStart(40, "0")}`; + const tx_call = await customWeb3Request(context.web3, "eth_call", [ + { + from: alith.address, + to: contractProxy.options.address, + gas: "0x100000", + value: "0x00", + data: proxyInterface.encodeFunctionData("delegateCall", [precompileAddress, "0x00"]), + }, + ]); + + expect(tx_call.result, `Call should be forbidden`).to.equal(DELEGATECALL_FORDIDDEN_MESSAGE); + }); + } +}); diff --git a/tests/tests/test-contract/test-contract-error.ts b/tests/tests/test-contract/test-contract-error.ts index 29eba8b608..be8f4a476f 100644 --- a/tests/tests/test-contract/test-contract-error.ts +++ b/tests/tests/test-contract/test-contract-error.ts @@ -1,15 +1,16 @@ -import { expect } from "chai"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; import { TransactionReceipt } from "web3-core"; -import { verifyLatestBlockFees } from "../../util/block"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { verifyLatestBlockFees } from "../../util/block"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract, createContractExecution } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Contract loop error", (context) => { it("should return OutOfGas on inifinite loop call", async function () { - const { contract, rawTx } = await createContract(context, "InfiniteContract"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); await contract.methods .infinite() @@ -17,14 +18,16 @@ describeDevMoonbeamAllEthTxTypes("Contract loop error", (context) => { .then(() => { return Promise.reject({ message: "Execution succeeded but should have failed" }); }) - .catch((err) => expect(err.message).to.equal(`Returned error: out of gas`)); + .catch((err: { message: string }) => + expect(err.message).to.equal(`Returned error: out of gas`) + ); }); }); describeDevMoonbeamAllEthTxTypes("Contract loop error", (context) => { it("should fail with OutOfGas on infinite loop transaction", async function () { - const { contract, rawTx } = await createContract(context, "InfiniteContract"); - const infiniteTx = await createContractExecution( + const { contract, rawTx } = await createContract(context, "Looper"); + const infiniteTx = createContractExecution( context, { contract, @@ -33,12 +36,10 @@ describeDevMoonbeamAllEthTxTypes("Contract loop error", (context) => { { nonce: 1 } ); - const { txResults } = await context.createBlock({ - transactions: [rawTx, infiniteTx], - }); + const { result } = await context.createBlock([rawTx, infiniteTx]); const receipt: TransactionReceipt = await context.web3.eth.getTransactionReceipt( - txResults[1].result + result[1].hash ); expect(receipt.status).to.eq(false); }); @@ -46,7 +47,7 @@ describeDevMoonbeamAllEthTxTypes("Contract loop error", (context) => { describeDevMoonbeamAllEthTxTypes("Contract loop error - check fees", (context) => { it("should fail with OutOfGas on infinite loop transaction - check fees", async function () { - const { contract, rawTx } = await createContract(context, "InfiniteContract"); + const { contract, rawTx } = await createContract(context, "Looper"); const infiniteTx = await createContractExecution( context, { @@ -56,14 +57,8 @@ describeDevMoonbeamAllEthTxTypes("Contract loop error - check fees", (context) = { nonce: 1 } ); - await context.createBlock({ - transactions: [rawTx], - }); - - await context.createBlock({ - transactions: [infiniteTx], - }); - - await verifyLatestBlockFees(context, expect); + await context.createBlock(rawTx); + await context.createBlock(infiniteTx); + await verifyLatestBlockFees(context); }); }); diff --git a/tests/tests/test-contract/test-contract-event.ts b/tests/tests/test-contract/test-contract-event.ts new file mode 100644 index 0000000000..8674f33ce4 --- /dev/null +++ b/tests/tests/test-contract/test-contract-event.ts @@ -0,0 +1,20 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createContract } from "../../util/transactions"; + +describeDevMoonbeamAllEthTxTypes("Contract - Event", (context) => { + it("should contain event", async function () { + const { rawTx } = await createContract(context, "EventEmitter", { from: alith.address }); + const { result } = await context.createBlock(rawTx); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + + expect(receipt.logs.length).to.be.eq(1); + expect( + "0x" + receipt.logs[0].topics[1].substring(26, receipt.logs[0].topics[1].length + 1) + ).to.be.eq(alith.address.toLowerCase()); // web3 doesn't checksum + }); +}); diff --git a/tests/tests/test-evm-memory-allocation.ts b/tests/tests/test-contract/test-contract-evm-limits.ts similarity index 78% rename from tests/tests/test-evm-memory-allocation.ts rename to tests/tests/test-contract/test-contract-evm-limits.ts index 5978c1c75d..38f31b65a8 100644 --- a/tests/tests/test-evm-memory-allocation.ts +++ b/tests/tests/test-contract/test-contract-evm-limits.ts @@ -1,10 +1,12 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createContract } from "../util/transactions"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -import { customWeb3Request } from "../util/providers"; -describeDevMoonbeam("Excessive memory allocation", (context) => { +import { alith, ALITH_PRIVATE_KEY } from "../../util/accounts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Contract - Excessive memory allocation", (context) => { it("should fail with OOG", async () => { // this tests a security vulnerability in our EVM which was patched in May 2021 or so. // The vulnerability allowed contract code to request an extremely large amount of memory, @@ -26,14 +28,14 @@ describeDevMoonbeam("Excessive memory allocation", (context) => { const tx = await context.web3.eth.accounts.signTransaction( { - from: GENESIS_ACCOUNT, + from: alith.address, to: null, value: value, gas: "0x100000", gasPrice: 1_000_000_000, data: "0x4141046159864141414141343933343346460100000028F900E06F01000000F71E01000000000000", }, - GENESIS_ACCOUNT_PRIVATE_KEY + ALITH_PRIVATE_KEY ); const txResults = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ diff --git a/tests/tests/test-fibonacci.ts b/tests/tests/test-contract/test-contract-fibonacci.ts similarity index 79% rename from tests/tests/test-fibonacci.ts rename to tests/tests/test-contract/test-contract-fibonacci.ts index 3e08756b14..c562a0027a 100644 --- a/tests/tests/test-fibonacci.ts +++ b/tests/tests/test-contract/test-contract-fibonacci.ts @@ -1,11 +1,14 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { createContract, createContractExecution } from "../util/transactions"; + +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Fibonacci", (context) => { it("should be able to call fibonacci", async function () { const { contract, rawTx } = await createContract(context, "Fibonacci"); - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); expect(await contract.methods.fib2(0).call()).to.equal("" + 0); expect(await contract.methods.fib2(1).call()).to.equal("" + 1); @@ -25,15 +28,15 @@ describeDevMoonbeamAllEthTxTypes("Fibonacci", (context) => { it("should be able to call fibonacci[370] in txn", async function () { const { contract, rawTx } = await createContract(context, "Fibonacci"); - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); const tx = await createContractExecution(context, { contract, contractCall: contract.methods.fib2(370), }); - const { txResults } = await context.createBlock({ transactions: [tx] }); - const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + const { result } = await context.createBlock(tx); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.be.true; }); }); diff --git a/tests/tests/test-contract/test-contract-incr-loop.ts b/tests/tests/test-contract/test-contract-incr-loop.ts index cef94e969f..c702971a93 100644 --- a/tests/tests/test-contract/test-contract-incr-loop.ts +++ b/tests/tests/test-contract/test-contract-incr-loop.ts @@ -1,12 +1,15 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { verifyLatestBlockFees } from "../../util/block"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract, createContractExecution } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Contract loop creation", (context) => { it("Should be initialized at 0", async () => { - const { contract, rawTx } = await createContract(context, "TestContractIncr"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "Incrementor"); + await context.createBlock(rawTx); expect(await contract.methods.count().call()).to.eq("0"); }); @@ -14,16 +17,14 @@ describeDevMoonbeamAllEthTxTypes("Contract loop creation", (context) => { describeDevMoonbeamAllEthTxTypes("Contract loop increment", (context) => { it("should increment contract state", async function () { - const { contract, rawTx, contractAddress } = await createContract(context, "TestContractIncr"); - await context.createBlock({ transactions: [rawTx] }); - await context.createBlock({ - transactions: [ - await createContractExecution(context, { - contract, - contractCall: contract.methods.incr(), - }), - ], - }); + const { contract, rawTx } = await createContract(context, "Incrementor"); + await context.createBlock(rawTx); + await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.incr(), + }) + ); expect(await contract.methods.count().call()).to.eq("1"); }); @@ -31,17 +32,14 @@ describeDevMoonbeamAllEthTxTypes("Contract loop increment", (context) => { describeDevMoonbeamAllEthTxTypes("Contract loop increment - check fees", (context) => { it("should increment contract state", async function () { - const { contract, rawTx } = await createContract(context, "TestContractIncr"); - await context.createBlock({ transactions: [rawTx] }); - - await context.createBlock({ - transactions: [ - await createContractExecution(context, { - contract, - contractCall: contract.methods.incr(), - }), - ], - }); - await verifyLatestBlockFees(context, expect); + const { contract, rawTx } = await createContract(context, "Incrementor"); + await context.createBlock(rawTx); + await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.incr(), + }) + ); + await verifyLatestBlockFees(context); }); }); diff --git a/tests/tests/test-contract/test-contract-loop-cost.ts b/tests/tests/test-contract/test-contract-loop-cost.ts index 611ef04449..436e0ba1f7 100644 --- a/tests/tests/test-contract/test-contract-loop-cost.ts +++ b/tests/tests/test-contract/test-contract-loop-cost.ts @@ -1,33 +1,34 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; + +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract, createContractExecution } from "../../util/transactions"; [ { loop: 1, - gas: 44189, + gas: 44211, }, { loop: 500, - gas: 367054, + gas: 367076, }, { loop: 600, - gas: 431754, + gas: 431776, }, ].forEach(({ loop, gas }) => { describeDevMoonbeamAllEthTxTypes("Contract loop", (context) => { it(`should consume ${gas} for ${loop} loop`, async function () { - const { contract, rawTx } = await createContract(context, "FiniteLoopContract"); - await context.createBlock({ transactions: [rawTx] }); - await context.createBlock({ - transactions: [ - await createContractExecution(context, { - contract, - contractCall: contract.methods.incr(loop), - }), - ], - }); + const { contract, rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); + await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.incrementalLoop(loop), + }) + ); expect(await contract.methods.count().call()).to.eq(loop.toString()); diff --git a/tests/tests/test-contract/test-contract-methods.ts b/tests/tests/test-contract/test-contract-methods.ts index 9034a93277..6e3b10844b 100644 --- a/tests/tests/test-contract/test-contract-methods.ts +++ b/tests/tests/test-contract/test-contract-methods.ts @@ -1,17 +1,20 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract } from "../../util/transactions"; import { Contract } from "web3-eth-contract"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createContract } from "../../util/transactions"; + describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { - let testContract: Contract; + let multiplyBy7: Contract; let testContractTx: string; before("Setup: Create the contract", async function () { - const { contract, rawTx } = await createContract(context, "TestContract"); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - testContract = contract; - testContractTx = txResults[0].result; + const { contract, rawTx } = await createContract(context, "MultiplyBy7"); + const { result } = await context.createBlock(rawTx); + multiplyBy7 = contract; + testContractTx = result.hash; }); it("should appear in the block transaction list", async () => { @@ -26,7 +29,7 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { }); it("should provide callable methods", async function () { - expect(await testContract.methods.multiply(3).call()).to.equal("21"); + expect(await multiplyBy7.methods.multiply(3).call()).to.equal("21"); }); // TODO: when web3 supports eip1559 and eip2930, this test should be adapted @@ -34,8 +37,8 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { // Create a fake contract based on origin deployed contract. // It make the multiply method supposed to have 0 arguments const contract = new context.web3.eth.Contract( - [{ ...testContract.options.jsonInterface[0], inputs: [] }], - testContract.options.address + [{ ...multiplyBy7.options.jsonInterface[0], inputs: [] }], + multiplyBy7.options.address ); await contract.methods .multiply() @@ -43,7 +46,7 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { .then(() => { return Promise.reject({ message: "Execution succeeded but should have failed" }); }) - .catch((err) => + .catch((err: { message: string }) => expect(err.message).to.equal( `Returned error: VM Exception while processing transaction: revert` ) @@ -57,14 +60,14 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { const contract = new context.web3.eth.Contract( [ { - ...testContract.options.jsonInterface[0], + ...multiplyBy7.options.jsonInterface[0], inputs: [ { internalType: "uint256", name: "a", type: "uint256" }, { internalType: "uint256", name: "b", type: "uint256" }, ], }, ], - testContract.options.address + multiplyBy7.options.address ); await contract.methods @@ -73,7 +76,7 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { .then(() => { return Promise.reject({ message: "Execution succeeded but should have failed" }); }) - .catch((err) => + .catch((err: { message: string }) => expect(err.message).to.equal( `Returned error: VM Exception while processing transaction: revert` ) @@ -86,7 +89,7 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { const contract = new context.web3.eth.Contract( [ { - ...testContract.options.jsonInterface[0], + ...multiplyBy7.options.jsonInterface[0], inputs: [ { internalType: "address", @@ -96,7 +99,7 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { ], }, ], - testContract.options.address + multiplyBy7.options.address ); await contract.methods .multiply("0x0123456789012345678901234567890123456789") @@ -104,7 +107,7 @@ describeDevMoonbeamAllEthTxTypes("Contract creation", (context) => { .then(() => { return Promise.reject({ message: "Execution succeeded but should have failed" }); }) - .catch((err) => + .catch((err: { message: string }) => expect(err.message).to.equal( `Returned error: VM Exception while processing transaction: revert` ) diff --git a/tests/tests/test-contract/test-contract-variables.ts b/tests/tests/test-contract/test-contract-variables.ts index 019543054e..d2918644bd 100644 --- a/tests/tests/test-contract/test-contract-variables.ts +++ b/tests/tests/test-contract/test-contract-variables.ts @@ -1,14 +1,17 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; +import { Contract } from "web3-eth-contract"; + import { describeDevMoonbeam } from "../../util/setup-dev-tests"; import { createContract } from "../../util/transactions"; -import { Contract } from "web3-eth-contract"; describeDevMoonbeam("Block Contract - Block variables", (context) => { let blockContract: Contract; before("Setup: Creating contract with block variables", async function () { - const { contract, rawTx } = await createContract(context, "CheckBlockVariables"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "BlockVariables"); + await context.createBlock(rawTx); blockContract = contract; }); diff --git a/tests/tests/test-crowdloan.ts b/tests/tests/test-crowdloan.ts deleted file mode 100644 index ed6b7028b7..0000000000 --- a/tests/tests/test-crowdloan.ts +++ /dev/null @@ -1,1061 +0,0 @@ -import { Keyring } from "@polkadot/api"; -import { KeyringPair } from "@polkadot/keyring/types"; -import { expect } from "chai"; -import Web3 from "web3"; -import { Account } from "web3-core"; -import { stringToU8a } from "@polkadot/util"; -import type { SubmittableExtrinsic } from "@polkadot/api/promise/types"; -import { blake2AsHex, randomAsHex } from "@polkadot/util-crypto"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; - -import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_BALANCE, - GENESIS_ACCOUNT_PRIVATE_KEY, - GLMR, - ALITH_PRIV_KEY, - ALITH, - BALTATHAR_PRIVATE_KEY, - relayChainAddress, - relayChainAddress_2, -} from "../util/constants"; -import { describeDevMoonbeam, DevTestContext } from "../util/setup-dev-tests"; -import { verifyLatestBlockFees } from "../util/block"; - -// 5 blocks per minute, 4 weeks -export const VESTING_PERIOD = 201600n; -async function calculate_vested_amount(context, totalReward, initialPayment, numberOfBlocks) { - const amountToVest = BigInt(totalReward) - BigInt(initialPayment); - // On average a parachain only gets a candidate into every other relay chain block. - // In the dev service, where the relay block number is mocked, we get exactly two relay blocks. - const elapsedRelayBlocks = numberOfBlocks * 2; - const amountForBlocks = (BigInt(amountToVest) * BigInt(elapsedRelayBlocks)) / VESTING_PERIOD; - const shouldHaveVested = BigInt(initialPayment) + amountForBlocks; - return shouldHaveVested; -} - -// Return the unwrapped accountsPayable or null otherwise -export const getAccountPayable = async ( - context: DevTestContext, - address: string -): Promise<{ - totalReward: any; - claimedReward: any; - contributedRelayAddresses: any; -} | null> => { - const accountsPayable = (await context.polkadotApi.query.crowdloanRewards.accountsPayable( - address - )) as any; - return accountsPayable.unwrapOr(null); -}; - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should check initial state", async function () { - // check that genesis has genesis balance - expect(Number(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.eq( - Number(GENESIS_ACCOUNT_BALANCE) - ); - // check that genesis is not registered - const isPayable = await getAccountPayable(context, GENESIS_ACCOUNT); - expect(isPayable).to.equal(null); - }); - - it("should be able to register the genesis account for reward", async function () { - // should be able to register the genesis account for reward - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - await verifyLatestBlockFees(context, expect, 3_000_000n); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - expect((await getAccountPayable(context, GENESIS_ACCOUNT)).totalReward.toBigInt()).to.equal( - 3_000_000n * GLMR - ); - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - expect(isInitialized.toHuman()).to.be.true; - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able to make a first claim", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let rewardInfo = await getAccountPayable(context, GENESIS_ACCOUNT); - let claimed = await calculate_vested_amount( - context, - rewardInfo.totalReward, - rewardInfo.claimedReward, - 2 - ); - // construct a transaction - const transfer = context.polkadotApi.tx.crowdloanRewards.claim(); - await transfer.signAndSend(genesisAccount); - const details = await context.polkadotApi.rpc.payment.queryFeeDetails(transfer.toHex()); - const claimFee = - details.inclusionFee.unwrap().baseFee.toBigInt() + - details.inclusionFee.unwrap().lenFee.toBigInt() + - details.inclusionFee.unwrap().adjustedWeightFee.toBigInt(); - - await context.createBlock(); - - expect((await getAccountPayable(context, GENESIS_ACCOUNT)).claimedReward.toBigInt()).to.equal( - claimed - ); - - // check balances - expect( - BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT)) - GENESIS_ACCOUNT_BALANCE - ).to.equal(claimed - claimFee); // reduce the claim fee part; - const account = (await context.polkadotApi.query.system.account(GENESIS_ACCOUNT)) as any; - expect(account.data.free.toBigInt() - GENESIS_ACCOUNT_BALANCE).to.equal(claimed - claimFee); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should show me the money after 5 blocks, after first claim was called", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let rewardInfo = await getAccountPayable(context, GENESIS_ACCOUNT); - - // construct a transaction - const transfer = context.polkadotApi.tx.crowdloanRewards.claim(); - await transfer.signAndSend(genesisAccount); - - await context.createBlock(); - - // should show me the money after 5 blocks - await context.createBlock(); - await context.createBlock(); - - let claimed = await calculate_vested_amount( - context, - rewardInfo.totalReward, - rewardInfo.claimedReward, - 5 - ); - - await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(genesisAccount); - await context.createBlock(); - const isPayable4 = await getAccountPayable(context, GENESIS_ACCOUNT); - expect(isPayable4.claimedReward.toBigInt()).to.equal(claimed); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should make first claim 5 blocks after initialization called", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let rewardInfo = await getAccountPayable(context, GENESIS_ACCOUNT); - await context.createBlock(); - - // should show me the money after 5 blocks - await context.createBlock(); - await context.createBlock(); - let claimed = await calculate_vested_amount( - context, - rewardInfo.totalReward, - rewardInfo.claimedReward, - 5 - ); - - await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(genesisAccount); - await context.createBlock(); - - const isPayable4 = await getAccountPayable(context, GENESIS_ACCOUNT); - expect(isPayable4.claimedReward.toBigInt()).to.equal(claimed); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should not be able to call initializeRewardVec another time", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - // should not be able to call initializeRewardVec another time - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, ALITH, 1000n * GLMR], - ]) - ) - .signAndSend(genesisAccount); - await context.createBlock(); - expect(await getAccountPayable(context, ALITH)).to.equal(null); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let alithAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - alithAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able to register the genesis account - with small amount", async function () { - // initializeRewardVec - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, ALITH, 3_000_000n * GLMR], - ]) - ) - .signAndSend(alithAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(alithAccount); - await context.createBlock(); - - expect((await getAccountPayable(context, ALITH)).totalReward.toBigInt()).to.equal( - 3_000_000n * GLMR - ); - - let rewardInfo = await getAccountPayable(context, ALITH); - let claimed = await calculate_vested_amount( - context, - rewardInfo.totalReward, - rewardInfo.claimedReward, - 2 - ); - // claim - await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(alithAccount); - await context.createBlock(); - - const isPayable4 = await getAccountPayable(context, ALITH); - expect(isPayable4.claimedReward.toBigInt()).to.equal(claimed); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let sudoAccount: KeyringPair; - - let numberOfAccounts: number = 1000; // min 2 - let largInput: [string, string, bigint][]; - - before("Setup genesis account for substrate", async () => { - numberOfAccounts = Number( - (await context.polkadotApi.consts.crowdloanRewards.maxInitContributors) as any - ); - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able to register many accounts : " + numberOfAccounts, async function () { - // should create a bunch of test eth accounts - this.timeout(30000); - let web3 = new Web3(); - // We need to make sure the rewards match the account funds. 3M GLMR/ number of accounts - let accounts = new Array(numberOfAccounts).fill(0).map((_) => web3.eth.accounts.create()); - largInput = accounts.map((acc: Account, i: number) => { - return [ - acc.address + "111111111111111111111111", - acc.address, - (3_000_000n * GLMR) / BigInt(numberOfAccounts), - ]; - }); - expect(largInput.length).to.eq(numberOfAccounts); - expect(largInput[0][1] !== largInput[numberOfAccounts - 1][1]).to.eq(true); - - // should be able to register many accounts - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.crowdloanRewards.initializeRewardVec(largInput)) - .signAndSend(sudoAccount); - - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - const rewardPerContributor = (3_000_000n * GLMR) / BigInt(numberOfAccounts); - await Promise.all( - largInput.map(async (input) => { - expect((await getAccountPayable(context, input[1])).totalReward.toBigInt()).to.equal( - rewardPerContributor - ); - }) - ); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let sudoAccount: KeyringPair; - - let numberOfAccounts: number = 1000; // min 2 - let largInput: [string, string, bigint][]; - - before("Setup genesis account for substrate", async () => { - // We shouldnt be able to register as many accounts unless we do it in batches - numberOfAccounts = Number( - (await context.polkadotApi.consts.crowdloanRewards.maxInitContributors) as any - ); - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able to register many accounts - batch : " + numberOfAccounts, async function () { - // should create a bunch of test eth accounts - this.timeout(20000); - let web3 = new Web3(); - let accounts = new Array(numberOfAccounts).fill(0).map((_, i) => web3.eth.accounts.create()); - largInput = accounts.map((acc: Account, i: number) => { - return [ - acc.address + "111111111111111111111111", - acc.address, - (3_000_000n * GLMR) / BigInt(numberOfAccounts), - ]; - }); - expect(largInput.length).to.eq(numberOfAccounts); - expect(largInput[0][1] !== largInput[numberOfAccounts - 1][1]).to.eq(true); - - // should be able to register many accounts - await context.polkadotApi.tx.utility - .batch([ - await context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec( - largInput.slice(0, Math.floor(numberOfAccounts / 3)) - ) - ), - await context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec( - largInput.slice( - Math.floor(numberOfAccounts / 3), - Math.floor((numberOfAccounts * 2) / 3) - ) - ) - ), - await context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec( - largInput.slice(Math.floor((numberOfAccounts * 2) / 3), numberOfAccounts) - ) - ), - ]) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - await Promise.all( - largInput.map(async (input) => { - expect((await getAccountPayable(context, input[1])).totalReward.toBigInt()).to.equal( - (3_000_000n * GLMR) / BigInt(numberOfAccounts) - ); - }) - ); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able to initialize through democracy", async function () { - let calls = []; - // We are gonna put the initialization and completion in a batch_all utility call - calls.push( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 1_500_000n * GLMR], - [relayChainAddress_2, null, 1_500_000n * GLMR], - ]) - ); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - calls.push( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ); - - // Here we build the utility call - const proposal = context.polkadotApi.tx.utility.batchAll(calls); - - // We encode the proposal - let encodedProposal = (proposal as SubmittableExtrinsic)?.method.toHex() || ""; - let encodedHash = blake2AsHex(encodedProposal); - - // Submit the pre-image - await context.polkadotApi.tx.democracy.notePreimage(encodedProposal).signAndSend(sudoAccount); - - await context.createBlock(); - - // Propose - await context.polkadotApi.tx.democracy - .propose(encodedHash, 1000n * GLMR) - .signAndSend(sudoAccount); - - await context.createBlock(); - const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); - - // we only use sudo to enact the proposal - await context.polkadotApi.tx.sudo - .sudoUncheckedWeight( - context.polkadotApi.tx.democracy.enactProposal(encodedHash, publicPropCount), - 1 - ) - .signAndSend(sudoAccount); - - await context.createBlock(); - - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - - expect(isInitialized.toHuman()).to.be.true; - - // Get reward info of associated - let reward_info_associated = await getAccountPayable(context, GENESIS_ACCOUNT); - - // Get reward info of unassociated - let reward_info_unassociated = ( - (await context.polkadotApi.query.crowdloanRewards.unassociatedContributions( - relayChainAddress_2 - )) as any - ).unwrap(); - - // Check payments - expect(reward_info_associated.totalReward.toBigInt()).to.equal(1_500_000n * GLMR); - - expect(reward_info_associated.claimedReward.toBigInt()).to.equal(450_000n * GLMR); - - expect(reward_info_unassociated.totalReward.toBigInt()).to.equal(1_500_000n * GLMR); - - expect(reward_info_unassociated.claimedReward.toBigInt()).to.equal(0n); - - // check balances - const account = (await context.polkadotApi.query.system.account(GENESIS_ACCOUNT)) as any; - expect(account.data.free.toBigInt() - GENESIS_ACCOUNT_BALANCE).to.equal( - reward_info_associated.claimedReward.toBigInt() - ); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able to burn the dust", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 1_500_000n * GLMR], - [relayChainAddress_2, null, 1_499_999_999_999_999_999_999_999n], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - let previousIssuance = (await context.polkadotApi.query.balances.totalIssuance()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let issuance = (await context.polkadotApi.query.balances.totalIssuance()) as any; - - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - - expect(isInitialized.toJSON()).to.be.true; - - // We should have burnt 1 - expect(issuance.toBigInt()).to.eq(BigInt(previousIssuance) - BigInt(1)); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, - sudoAccount: KeyringPair, - relayAccount: KeyringPair, - toAssociateAccount: KeyringPair; - - before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const relayKeyRing = new Keyring({ type: "ed25519" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const seed = randomAsHex(32); - // add the account, override to ed25519 - relayAccount = await relayKeyRing.addFromUri(seed, null, "ed25519"); - toAssociateAccount = await keyring.addFromUri(seed, null, "ethereum"); - }); - - it("should be able to associate identity", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 1_500_000n * GLMR], - [relayAccount.addressRaw, null, 1_500_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - - expect(isInitialized.toJSON()).to.be.true; - - // relayAccount should be in the unassociated contributions - expect( - ( - (await context.polkadotApi.query.crowdloanRewards.unassociatedContributions( - relayAccount.addressRaw - )) as any - ) - .unwrap() - .totalReward.toBigInt() - ).to.equal(1_500_000n * GLMR); - - // toAssociateAccount should not be in accounts payable - expect(await getAccountPayable(context, toAssociateAccount.address)).to.be.null; - - let message = new Uint8Array([ - ...stringToU8a(""), - ...stringToU8a("moonbase-"), - ...toAssociateAccount.addressRaw, - ...stringToU8a(""), - ]); - // Construct the signature - let signature = {}; - signature["Ed25519"] = relayAccount.sign(message); - - // Associate the identity - await context.polkadotApi.tx.crowdloanRewards - .associateNativeIdentity(toAssociateAccount.address, relayAccount.addressRaw, signature) - .signAndSend(genesisAccount); - await context.createBlock(); - - // relayAccount should no longer be in the unassociated contributions - expect( - ( - await context.polkadotApi.query.crowdloanRewards.unassociatedContributions( - relayAccount.addressRaw - ) - ).toJSON() - ).to.be.null; - - // toAssociateAccount should now be in accounts payable - let rewardInfo = await getAccountPayable(context, toAssociateAccount.address); - - expect(rewardInfo.totalReward.toBigInt()).to.equal(1_500_000n * GLMR); - expect(rewardInfo.claimedReward.toBigInt()).to.equal(450_000n * GLMR); - - // three blocks elapsed - let claimed = await calculate_vested_amount( - context, - rewardInfo.totalReward, - rewardInfo.claimedReward, - 3 - ); - - await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(toAssociateAccount); - - await context.createBlock(); - - // Claimed amount should match - expect( - (await getAccountPayable(context, toAssociateAccount.address)).claimedReward.toBigInt() - ).to.equal(claimed); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, - sudoAccount: KeyringPair, - relayAccount: KeyringPair, - relayAccount2: KeyringPair, - firstAccount: KeyringPair, - toAssociateAccount: KeyringPair; - - before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const relayKeyRing = new Keyring({ type: "ed25519" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const seed = randomAsHex(32); - // add the account, override to ed25519 - relayAccount = await relayKeyRing.addFromUri(seed, null, "ed25519"); - const seed2 = randomAsHex(32); - - relayAccount2 = await relayKeyRing.addFromUri(seed2, null, "ed25519"); - - firstAccount = await keyring.addFromUri(seed, null, "ethereum"); - - toAssociateAccount = await keyring.addFromUri(seed2, null, "ethereum"); - }); - - it("should be able to change reward address with relay keys", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayAccount.addressRaw, firstAccount.address, 1_500_000n * GLMR], - [relayAccount2.addressRaw, firstAccount.address, 1_500_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - - expect(isInitialized.toJSON()).to.be.true; - - // toAssociateAccount should not be in accounts payable - expect(await getAccountPayable(context, toAssociateAccount.address)).to.be.null; - - let message = new Uint8Array([ - ...stringToU8a(""), - ...stringToU8a("moonbase-"), - ...toAssociateAccount.addressRaw, - ...firstAccount.addressRaw, - ...stringToU8a(""), - ]); - - // Construct the signatures - let signature1 = {}; - signature1["Ed25519"] = relayAccount.sign(message); - let signature2 = {}; - signature2["Ed25519"] = relayAccount2.sign(message); - - let proofs = [ - [relayAccount.addressRaw, signature1], - [relayAccount2.addressRaw, signature2], - ]; - // Associate the identity - await context.polkadotApi.tx.crowdloanRewards - .changeAssociationWithRelayKeys(toAssociateAccount.address, firstAccount.address, proofs) - .signAndSend(genesisAccount); - await context.createBlock(); - - // toAssociateAccount should now be in accounts payable - let rewardInfo = await getAccountPayable(context, toAssociateAccount.address); - - expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair, toUpdateAccount: KeyringPair; - - before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const seed = randomAsHex(32); - toUpdateAccount = await keyring.addFromUri(seed, null, "ethereum"); - }); - - it("should be able to update reward address", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - - expect(isInitialized.toJSON()).to.be.true; - - // GENESIS_ACCOUNT should be in accounts pauable - let rewardInfo = await getAccountPayable(context, GENESIS_ACCOUNT); - - expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); - - expect(rewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); - - // three blocks elapsed - let claimed = await calculate_vested_amount( - context, - rewardInfo.totalReward, - rewardInfo.claimedReward, - 2 - ); - - await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(genesisAccount); - - await context.createBlock(); - - // Claimed amount should match - const claimedRewards = (await getAccountPayable(context, GENESIS_ACCOUNT)).claimedReward; - - expect(claimedRewards.toBigInt()).to.equal(claimed); - - // Let's update the reward address - await context.polkadotApi.tx.crowdloanRewards - .updateRewardAddress(toUpdateAccount.address) - .signAndSend(genesisAccount); - await context.createBlock(); - - // GENESIS_ACCOUNT should no longer be in accounts payable - expect(await getAccountPayable(context, GENESIS_ACCOUNT)).to.be.null; - - // toUpdateAccount should be in accounts paYable - rewardInfo = await getAccountPayable(context, toUpdateAccount.address); - - expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); - - expect(rewardInfo.claimedReward.toBigInt()).to.equal(claimed); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, - sudoAccount: KeyringPair, - toUpdateAccount: KeyringPair, - proxy: KeyringPair; - - before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - proxy = keyring.addFromUri(BALTATHAR_PRIVATE_KEY, null, "ethereum"); - const seed = randomAsHex(32); - toUpdateAccount = await keyring.addFromUri(seed, null, "ethereum"); - }); - - it("should be able to call crowdloan rewards with non-transfer proxy", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - - expect(isInitialized.toJSON()).to.be.true; - - // GENESIS_ACCOUNT should be in accounts pauable - let rewardInfo = await getAccountPayable(context, GENESIS_ACCOUNT); - - expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); - - expect(rewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); - - // CreateProxy - await context.polkadotApi.tx.proxy - .addProxy(proxy.address, "NonTransfer", 0) - .signAndSend(genesisAccount); - await context.createBlock(); - - // three blocks elapsed - let claimed = await calculate_vested_amount( - context, - rewardInfo.totalReward, - rewardInfo.claimedReward, - 3 - ); - - // Claim with proxy - await context.polkadotApi.tx.proxy - .proxy(genesisAccount.address, null, context.polkadotApi.tx.crowdloanRewards.claim()) - .signAndSend(proxy); - - await context.createBlock(); - - // Claimed amount should match - const claimedRewards = (await getAccountPayable(context, GENESIS_ACCOUNT)).claimedReward; - - expect(claimedRewards.toBigInt()).to.equal(claimed); - }); -}); - -describeDevMoonbeam("Crowdloan", (context) => { - let genesisAccount: KeyringPair, - sudoAccount: KeyringPair, - toUpdateAccount: KeyringPair, - proxy: KeyringPair; - - before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - proxy = keyring.addFromUri(BALTATHAR_PRIVATE_KEY, null, "ethereum"); - const seed = randomAsHex(32); - toUpdateAccount = await keyring.addFromUri(seed, null, "ethereum"); - }); - - it("should NOT be able to call non-claim extrinsic with non-transfer proxy", async function () { - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); - - expect(isInitialized.toJSON()).to.be.true; - - // GENESIS_ACCOUNT should be in accounts pauable - let rewardInfo = await getAccountPayable(context, GENESIS_ACCOUNT); - - expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); - - expect(rewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); - - // CreateProxy - await context.polkadotApi.tx.proxy - .addProxy(proxy.address, "NonTransfer", 0) - .signAndSend(genesisAccount); - await context.createBlock(); - - // Should not be ablte to do this - let { events } = await createBlockWithExtrinsic( - context, - proxy, - context.polkadotApi.tx.proxy.proxy( - genesisAccount.address, - null, - context.polkadotApi.tx.crowdloanRewards.updateRewardAddress(proxy.address) - ) - ); - expect(events[1].toHuman().method).to.eq("ProxyExecuted"); - expect(events[1].data[0].toString()).to.be.eq( - `{"err":{"module":{"index":0,"error":"0x05000000"}}}` - ); - - // Genesis account still has the money - rewardInfo = await getAccountPayable(context, GENESIS_ACCOUNT); - - expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); - - expect(rewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); - }); -}); diff --git a/tests/tests/test-crowdloan/test-crowdloan.ts b/tests/tests/test-crowdloan/test-crowdloan.ts new file mode 100644 index 0000000000..dce4d6d939 --- /dev/null +++ b/tests/tests/test-crowdloan/test-crowdloan.ts @@ -0,0 +1,872 @@ +import "@moonbeam-network/api-augment"; + +import { stringToU8a } from "@polkadot/util"; +import { blake2AsHex } from "@polkadot/util-crypto"; +import { expect } from "chai"; +import Web3 from "web3"; +import { Account } from "web3-core"; + +import { + alith, + ALITH_GENESIS_FREE_BALANCE, + ALITH_GENESIS_TRANSFERABLE_BALANCE, + baltathar, + generateKeyringPair, +} from "../../util/accounts"; +import { verifyLatestBlockFees } from "../../util/block"; +import { DEFAULT_GENESIS_BALANCE, GLMR } from "../../util/constants"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; + +import type { SubmittableExtrinsic } from "@polkadot/api/promise/types"; +// Relay addresses for crowdloan tests +export const RELAYCHAIN_ARBITRARY_ADDRESS_1: string = + "0x1111111111111111111111111111111111111111111111111111111111111111"; +export const RELAYCHAIN_ARBITRARY_ADDRESS_2: string = + "0x2222222222222222222222222222222222222222222222222222222222222222"; + +// 5 blocks per minute, 4 weeks +export const VESTING_PERIOD = 201600n; + +async function calculate_vested_amount( + totalReward: bigint, + initialPayment: bigint, + numberOfBlocks: bigint +) { + const amountToVest = totalReward - initialPayment; + // On average a parachain only gets a candidate into every other relay chain block. + // In the dev service, where the relay block number is mocked, we get exactly two relay blocks. + const elapsedRelayBlocks = numberOfBlocks * 2n; + const amountForBlocks = (amountToVest * elapsedRelayBlocks) / VESTING_PERIOD; + const shouldHaveVested = initialPayment + amountForBlocks; + return shouldHaveVested; +} + +// Return the unwrapped accountsPayable or null otherwise +export const getAccountPayable = async ( + context: DevTestContext, + address: string +): Promise<{ + totalReward: any; + claimedReward: any; + contributedRelayAddresses: any; +} | null> => { + const accountsPayable = await context.polkadotApi.query.crowdloanRewards.accountsPayable(address); + return accountsPayable.unwrapOr(null); +}; + +describeDevMoonbeam("Crowdloan", (context) => { + it("should check initial state", async function () { + // check that genesis is not registered + const isPayable = await getAccountPayable(context, alith.address); + expect(isPayable).to.equal(null); + }); + + it("should be able to register the genesis account for reward", async function () { + // should be able to register the genesis account for reward + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + await verifyLatestBlockFees(context, 3_000_000n); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + expect((await getAccountPayable(context, alith.address)).totalReward.toBigInt()).to.equal( + 3_000_000n * GLMR + ); + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + expect(isInitialized.toHuman()).to.be.true; + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + it("should be able to make a first claim", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const rewardInfo = await getAccountPayable(context, alith.address); + const claimed = await calculate_vested_amount( + rewardInfo.totalReward.toBigInt(), + rewardInfo.claimedReward.toBigInt(), + 2n + ); + // construct a transaction + const transfer = context.polkadotApi.tx.crowdloanRewards.claim(); + await transfer.signAndSend(alith); + const details = await context.polkadotApi.rpc.payment.queryFeeDetails(transfer.toHex()); + const claimFee = + details.inclusionFee.unwrap().baseFee.toBigInt() + + details.inclusionFee.unwrap().lenFee.toBigInt() + + details.inclusionFee.unwrap().adjustedWeightFee.toBigInt(); + + await context.createBlock(); + + expect((await getAccountPayable(context, alith.address)).claimedReward.toBigInt()).to.equal( + claimed + ); + + // check balances + expect( + BigInt(await context.web3.eth.getBalance(alith.address)) - ALITH_GENESIS_TRANSFERABLE_BALANCE + ).to.equal(claimed - claimFee); // reduce the claim fee part; + const account = await context.polkadotApi.query.system.account(alith.address); + expect(account.data.free.toBigInt() - ALITH_GENESIS_FREE_BALANCE).to.equal(claimed - claimFee); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + it("should show me the money after 5 blocks, after first claim was called", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const rewardInfo = await getAccountPayable(context, alith.address); + + // construct a transaction + const transfer = context.polkadotApi.tx.crowdloanRewards.claim(); + await transfer.signAndSend(alith); + + await context.createBlock(); + + // should show me the money after 5 blocks + await context.createBlock(); + await context.createBlock(); + + const claimed = await calculate_vested_amount( + rewardInfo.totalReward.toBigInt(), + rewardInfo.claimedReward.toBigInt(), + 5n + ); + + await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(alith); + await context.createBlock(); + const isPayable4 = await getAccountPayable(context, alith.address); + expect(isPayable4.claimedReward.toBigInt()).to.equal(claimed); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + it("should make first claim 5 blocks after initialization called", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const rewardInfo = await getAccountPayable(context, alith.address); + await context.createBlock(); + + // should show me the money after 5 blocks + await context.createBlock(); + await context.createBlock(); + const claimed = await calculate_vested_amount( + rewardInfo.totalReward.toBigInt(), + rewardInfo.claimedReward.toBigInt(), + 5n + ); + + await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(alith); + await context.createBlock(); + + const isPayable4 = await getAccountPayable(context, alith.address); + expect(isPayable4.claimedReward.toBigInt()).to.equal(claimed); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + it("should not be able to call initializeRewardVec another time", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + // should not be able to call initializeRewardVec another time + await context.polkadotApi.tx.sudo + .sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, baltathar.address, 1000n * GLMR], + ]) + ) + .signAndSend(alith); + await context.createBlock(); + expect(await getAccountPayable(context, baltathar.address)).to.equal(null); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + it("should be able to register the genesis account - with small amount", async function () { + // initializeRewardVec + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + expect((await getAccountPayable(context, alith.address)).totalReward.toBigInt()).to.equal( + 3_000_000n * GLMR + ); + + const rewardInfo = await getAccountPayable(context, alith.address); + const claimed = await calculate_vested_amount( + rewardInfo.totalReward.toBigInt(), + rewardInfo.claimedReward.toBigInt(), + 2n + ); + // claim + await context.polkadotApi.tx.crowdloanRewards.claim().signAndSend(alith); + await context.createBlock(); + + const isPayable4 = await getAccountPayable(context, alith.address); + expect(isPayable4.claimedReward.toBigInt()).to.equal(claimed); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + let numberOfAccounts: number; + let largInput: [string, string, bigint][]; + + before("Setup genesis account for substrate", async () => { + numberOfAccounts = context.polkadotApi.consts.crowdloanRewards.maxInitContributors.toNumber(); + }); + + it("should be able to register many accounts : " + numberOfAccounts, async function () { + // should create a bunch of test eth accounts + this.timeout(30000); + const web3 = new Web3(); + // We need to make sure the rewards match the account funds. 3M GLMR/ number of accounts + const accounts = new Array(numberOfAccounts).fill(0).map((_) => web3.eth.accounts.create()); + largInput = accounts.map((acc: Account, i: number) => { + return [ + acc.address + "111111111111111111111111", + acc.address, + (3_000_000n * GLMR) / BigInt(numberOfAccounts), + ]; + }); + expect(largInput.length).to.eq(numberOfAccounts); + expect(largInput[0][1] !== largInput[numberOfAccounts - 1][1]).to.eq(true); + + // should be able to register many accounts + await context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.crowdloanRewards.initializeRewardVec(largInput)) + .signAndSend(alith); + + await context.createBlock(); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const rewardPerContributor = (3_000_000n * GLMR) / BigInt(numberOfAccounts); + await Promise.all( + largInput.map(async (input) => { + expect((await getAccountPayable(context, input[1])).totalReward.toBigInt()).to.equal( + rewardPerContributor + ); + }) + ); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + let numberOfAccounts: number; + let largInput: [string, string, bigint][]; + + before("Setup genesis account for substrate", async () => { + // We shouldnt be able to register as many accounts unless we do it in batches + numberOfAccounts = Number( + await context.polkadotApi.consts.crowdloanRewards.maxInitContributors + ); + }); + + it("should be able to register many accounts - batch : " + numberOfAccounts, async function () { + // should create a bunch of test eth accounts + this.timeout(20000); + const web3 = new Web3(); + const accounts = new Array(numberOfAccounts).fill(0).map((_, i) => web3.eth.accounts.create()); + largInput = accounts.map((acc: Account, i: number) => { + return [ + acc.address + "111111111111111111111111", + acc.address, + (3_000_000n * GLMR) / BigInt(numberOfAccounts), + ]; + }); + expect(largInput.length).to.eq(numberOfAccounts); + expect(largInput[0][1] !== largInput[numberOfAccounts - 1][1]).to.eq(true); + + // should be able to register many accounts + await context.createBlock( + context.polkadotApi.tx.utility + .batch([ + await context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec( + largInput.slice(0, Math.floor(numberOfAccounts / 3)) + ) + ), + await context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec( + largInput.slice( + Math.floor(numberOfAccounts / 3), + Math.floor((numberOfAccounts * 2) / 3) + ) + ) + ), + await context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec( + largInput.slice(Math.floor((numberOfAccounts * 2) / 3), numberOfAccounts) + ) + ), + ]) + .signAsync(alith) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + await Promise.all( + largInput.map(async (input) => { + expect((await getAccountPayable(context, input[1])).totalReward.toBigInt()).to.equal( + (3_000_000n * GLMR) / BigInt(numberOfAccounts) + ); + }) + ); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + before("Setup genesis account for substrate", async () => {}); + + it("should be able to initialize through democracy", async function () { + const calls = []; + // We are gonna put the initialization and completion in a batch_all utility call + calls.push( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, baltathar.address, 1_500_000n * GLMR], + [RELAYCHAIN_ARBITRARY_ADDRESS_2, null, 1_500_000n * GLMR], + ]) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + calls.push( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ); + + // Here we build the utility call + const proposal = context.polkadotApi.tx.utility.batchAll(calls); + + // We encode the proposal + const encodedProposal = (proposal as SubmittableExtrinsic)?.method.toHex() || ""; + const encodedHash = blake2AsHex(encodedProposal); + + // Propose + await context.createBlock(context.polkadotApi.tx.democracy.notePreimage(encodedProposal)); + await context.createBlock(context.polkadotApi.tx.democracy.propose(encodedHash, 1000n * GLMR)); + const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); + // we only use sudo to enact the proposal + await context.createBlock( + context.polkadotApi.tx.sudo.sudoUncheckedWeight( + context.polkadotApi.tx.democracy.enactProposal(encodedHash, publicPropCount), + 1 + ) + ); + + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + + expect(isInitialized.toHuman()).to.be.true; + + // Get reward info of associated + const reward_info_associated = await getAccountPayable(context, baltathar.address); + + // Get reward info of unassociated + const reward_info_unassociated = ( + await context.polkadotApi.query.crowdloanRewards.unassociatedContributions( + RELAYCHAIN_ARBITRARY_ADDRESS_2 + ) + ).unwrap(); + + // Check payments + expect(reward_info_associated.totalReward.toBigInt()).to.equal(1_500_000n * GLMR); + expect(reward_info_associated.claimedReward.toBigInt()).to.equal(450_000n * GLMR); + expect(reward_info_unassociated.totalReward.toBigInt()).to.equal(1_500_000n * GLMR); + expect(reward_info_unassociated.claimedReward.toBigInt()).to.equal(0n); + + // check balances + const account = await context.polkadotApi.query.system.account(baltathar.address); + expect(account.data.free.toBigInt() - DEFAULT_GENESIS_BALANCE).to.equal( + reward_info_associated.claimedReward.toBigInt() + ); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + before("Setup genesis account for substrate", async () => {}); + + it("should be able to burn the dust", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 1_500_000n * GLMR], + [RELAYCHAIN_ARBITRARY_ADDRESS_2, null, 1_499_999_999_999_999_999_999_999n], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + const previousIssuance = await context.polkadotApi.query.balances.totalIssuance(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const issuance = await context.polkadotApi.query.balances.totalIssuance(); + + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + + expect(isInitialized.toJSON()).to.be.true; + + // We should have burnt 1 + expect(issuance.toBigInt()).to.eq(previousIssuance.toBigInt() - 1n); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + const relayAccount = generateKeyringPair("ed25519"); + const toAssociateAccount = generateKeyringPair(); + + it("should be able to associate identity", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 1_500_000n * GLMR], + [relayAccount.addressRaw, null, 1_500_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + + expect(isInitialized.toJSON()).to.be.true; + + // relayAccount should be in the unassociated contributions + expect( + ( + await context.polkadotApi.query.crowdloanRewards.unassociatedContributions( + relayAccount.addressRaw + ) + ) + .unwrap() + .totalReward.toBigInt() + ).to.equal(1_500_000n * GLMR); + + // toAssociateAccount should not be in accounts payable + expect(await getAccountPayable(context, toAssociateAccount.address)).to.be.null; + + const message = new Uint8Array([ + ...stringToU8a(""), + ...stringToU8a("moonbase-"), + ...toAssociateAccount.addressRaw, + ...stringToU8a(""), + ]); + // Construct the signature + const signature = { Ed25519: relayAccount.sign(message) }; + + // Associate the identity + await context.createBlock( + context.polkadotApi.tx.crowdloanRewards.associateNativeIdentity( + toAssociateAccount.address, + relayAccount.addressRaw, + signature + ) + ); + + // relayAccount should no longer be in the unassociated contributions + expect( + ( + await context.polkadotApi.query.crowdloanRewards.unassociatedContributions( + relayAccount.addressRaw + ) + ).toJSON() + ).to.be.null; + + // toAssociateAccount should now be in accounts payable + const rewardInfo = await getAccountPayable(context, toAssociateAccount.address); + + expect(rewardInfo.totalReward.toBigInt()).to.equal(1_500_000n * GLMR); + expect(rewardInfo.claimedReward.toBigInt()).to.equal(450_000n * GLMR); + + // three blocks elapsed + const claimed = await calculate_vested_amount( + rewardInfo.totalReward.toBigInt(), + rewardInfo.claimedReward.toBigInt(), + 3n + ); + + await context.createBlock( + context.polkadotApi.tx.crowdloanRewards.claim().signAsync(toAssociateAccount) + ); + + // Claimed amount should match + expect( + (await getAccountPayable(context, toAssociateAccount.address)).claimedReward.toBigInt() + ).to.equal(claimed); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + const relayAccount = generateKeyringPair("ed25519"); + const relayAccount2 = generateKeyringPair("ed25519"); + const firstAccount = generateKeyringPair(); + const toAssociateAccount = generateKeyringPair(); + + it("should be able to change reward address with relay keys", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [relayAccount.addressRaw, firstAccount.address, 1_500_000n * GLMR], + [relayAccount2.addressRaw, firstAccount.address, 1_500_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + + expect(isInitialized.toJSON()).to.be.true; + + // toAssociateAccount should not be in accounts payable + expect(await getAccountPayable(context, toAssociateAccount.address)).to.be.null; + + const message = new Uint8Array([ + ...stringToU8a(""), + ...stringToU8a("moonbase-"), + ...toAssociateAccount.addressRaw, + ...firstAccount.addressRaw, + ...stringToU8a(""), + ]); + + // Construct the signatures + const signature1 = { Ed25519: relayAccount.sign(message) }; + const signature2 = { Ed25519: relayAccount2.sign(message) }; + + const proofs = [ + [relayAccount.addressRaw, signature1], + [relayAccount2.addressRaw, signature2], + ] as any[]; + // Associate the identity + await context.createBlock( + context.polkadotApi.tx.crowdloanRewards.changeAssociationWithRelayKeys( + toAssociateAccount.address, + firstAccount.address, + proofs + ) + ); + + // toAssociateAccount should now be in accounts payable + const rewardInfo = await getAccountPayable(context, toAssociateAccount.address); + + expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + const toUpdateAccount = generateKeyringPair(); + + it("should be able to update reward address", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + + expect(isInitialized.toJSON()).to.be.true; + + // GENESIS_ACCOUNT should be in accounts pauable + const rewardInfo = await getAccountPayable(context, alith.address); + expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); + expect(rewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); + + // three blocks elapsed + const claimed = await calculate_vested_amount( + rewardInfo.totalReward.toBigInt(), + rewardInfo.claimedReward.toBigInt(), + 2n + ); + + await context.createBlock(context.polkadotApi.tx.crowdloanRewards.claim()); + + // Claimed amount should match + const claimedRewards = (await getAccountPayable(context, alith.address)).claimedReward; + expect(claimedRewards.toBigInt()).to.equal(claimed); + + // Let's update the reward address + await context.createBlock( + context.polkadotApi.tx.crowdloanRewards.updateRewardAddress(toUpdateAccount.address) + ); + + // GENESIS_ACCOUNT should no longer be in accounts payable + expect(await getAccountPayable(context, alith.address)).to.be.null; + + // toUpdateAccount should be in accounts paYable + const updateRewardInfo = await getAccountPayable(context, toUpdateAccount.address); + expect(updateRewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); + expect(updateRewardInfo.claimedReward.toBigInt()).to.equal(claimed); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + const proxy = baltathar; + + it("should be able to call crowdloan rewards with non-transfer proxy", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + expect(isInitialized.toJSON()).to.be.true; + + // GENESIS_ACCOUNT should be in accounts pauable + const rewardInfo = await getAccountPayable(context, alith.address); + expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); + expect(rewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); + + // CreateProxy + await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(proxy.address, "NonTransfer", 0) + ); + + // three blocks elapsed + const claimed = await calculate_vested_amount( + rewardInfo.totalReward.toBigInt(), + rewardInfo.claimedReward.toBigInt(), + 3n + ); + + // Claim with proxy + + await context.createBlock( + context.polkadotApi.tx.proxy + .proxy(alith.address, null, context.polkadotApi.tx.crowdloanRewards.claim()) + .signAsync(proxy) + ); + + // Claimed amount should match + const claimedRewards = (await getAccountPayable(context, alith.address)).claimedReward; + expect(claimedRewards.toBigInt()).to.equal(claimed); + }); +}); + +describeDevMoonbeam("Crowdloan", (context) => { + const proxy = baltathar; + + it("should NOT be able to call non-claim extrinsic with non-transfer proxy", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, alith.address, 3_000_000n * GLMR], + ]) + ) + ); + + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + + // Complete initialization + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + VESTING_PERIOD + ) + ) + ); + + const isInitialized = await context.polkadotApi.query.crowdloanRewards.initialized(); + expect(isInitialized.toJSON()).to.be.true; + + // GENESIS_ACCOUNT should be in accounts pauable + const rewardInfo = await getAccountPayable(context, alith.address); + expect(rewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); + expect(rewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); + + // CreateProxy + await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(proxy.address, "NonTransfer", 0) + ); + + // Should not be ablte to do this + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy( + alith.address, + null, + context.polkadotApi.tx.crowdloanRewards.updateRewardAddress(proxy.address) + ) + .signAsync(proxy) + ); + expect(events[1].event.method).to.eq("ProxyExecuted"); + expect(events[1].event.data[0].toString()).to.be.eq( + `{"err":{"module":{"index":0,"error":"0x05000000"}}}` + ); + + // Genesis account still has the money + const updatedRewardInfo = await getAccountPayable(context, alith.address); + expect(updatedRewardInfo.totalReward.toBigInt()).to.equal(3_000_000n * GLMR); + expect(updatedRewardInfo.claimedReward.toBigInt()).to.equal(900_000n * GLMR); + }); +}); diff --git a/tests/tests/test-deal-fees.ts b/tests/tests/test-deal-fees.ts deleted file mode 100644 index 4e6ec358e8..0000000000 --- a/tests/tests/test-deal-fees.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; -import { TEST_ACCOUNT, TREASURY_ACCOUNT } from "../util/constants"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { createTransfer } from "../util/transactions"; - -describeDevMoonbeamAllEthTxTypes("20% of the fees should go to treasury", (context) => { - const keyring = new Keyring({ type: "ethereum" }); - - it("20% of the fees should go to treasury", async () => { - // Treasury account should be initially empty - expect(await context.web3.eth.getBalance(TREASURY_ACCOUNT, 0)).to.equal(0n.toString()); - - // We make an ethereum transaction, 20% of the fees should go to treasury. - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 128)], - }); - expect(await context.web3.eth.getBalance(TREASURY_ACCOUNT, 1)).to.equal("4200000000000"); - }); -}); diff --git a/tests/tests/test-democracy.ts b/tests/tests/test-democracy.ts deleted file mode 100644 index 642014f941..0000000000 --- a/tests/tests/test-democracy.ts +++ /dev/null @@ -1,392 +0,0 @@ -import { Keyring } from "@polkadot/api"; -import { KeyringPair } from "@polkadot/keyring/types"; -import { expect } from "chai"; -import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, - GLMR, - ALITH_PRIV_KEY, - ALITH, - PROPOSAL_AMOUNT, - VOTE_AMOUNT, - ZERO_ADDRESS, - MICROGLMR, -} from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { notePreimage } from "../util/governance"; -import { blake2AsHex } from "@polkadot/util-crypto"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; - -describeDevMoonbeam("Democracy - genesis and preimage", (context) => { - let genesisAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - }); - it("should check initial state - no referendum", async function () { - // referendumCount - const referendumCount = await context.polkadotApi.query.democracy.referendumCount(); - expect(referendumCount.toHuman()).to.equal("0"); - }); - it("should check initial state - 0x0 ParachainBondAccount", async function () { - // referendumCount - const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); - }); - - it("notePreimage", async function () { - // notePreimage - const encodedHash = await notePreimage( - context, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT), - genesisAccount - ); - - const preimageStatus = ( - (await context.polkadotApi.query.democracy.preimages(encodedHash)) as any - ).unwrap(); - expect(preimageStatus.isAvailable).to.eq(true, "Preimage should be available"); - expect(preimageStatus.asAvailable.provider.toString()).to.equal(GENESIS_ACCOUNT); - expect(preimageStatus.asAvailable.deposit.toBigInt()).to.equal(2200n * MICROGLMR); - }); -}); - -describeDevMoonbeam("Democracy - propose", (context) => { - let genesisAccount: KeyringPair; - let encodedHash: string; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - - // notePreimage - encodedHash = await notePreimage( - context, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT), - genesisAccount - ); - }); - - it("propose", async function () { - // propose - await context.polkadotApi.tx.democracy - .propose(encodedHash, PROPOSAL_AMOUNT) - .signAndSend(genesisAccount); - await context.createBlock(); - - // referendumCount - const referendumCount = (await context.polkadotApi.query.democracy.referendumCount()) as any; - expect(referendumCount.toBigInt()).to.equal(0n); - - // publicPropCount - const publicPropCount = (await context.polkadotApi.query.democracy.publicPropCount()) as any; - expect(publicPropCount.toBigInt()).to.equal(1n); - - // publicProps - const publicProps = await context.polkadotApi.query.democracy.publicProps(); - // encodedHash - expect((publicProps.toJSON() as any)[0][1]).to.equal(encodedHash); - // prop author - expect((publicProps.toJSON() as any)[0][2]).to.equal(GENESIS_ACCOUNT); - // depositOf - const depositOf = (await context.polkadotApi.query.democracy.depositOf(0)) as any; - expect(depositOf.unwrap()[1].toBigInt()).to.equal(1000n * GLMR); - }); -}); - -describeDevMoonbeam("Democracy - second proposal", (context) => { - let genesisAccount: KeyringPair, alith: KeyringPair; - let encodedHash: string; - let launchPeriod; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - //launchPeriod - launchPeriod = await context.polkadotApi.consts.democracy.launchPeriod; - - // notePreimage - encodedHash = await notePreimage( - context, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT), - genesisAccount - ); - - // propose - await context.polkadotApi.tx.democracy - .propose(encodedHash, PROPOSAL_AMOUNT) - .signAndSend(genesisAccount); - await context.createBlock(); - - // second - await context.polkadotApi.tx.democracy.second(0, 1000).signAndSend(alith); - await context.createBlock(); - }); - - it("second proposal", async function () { - // publicProps - const publicProps = await context.polkadotApi.query.democracy.publicProps(); - // encodedHash - expect((publicProps.toJSON() as any)[0][1]).to.equal(encodedHash); - // prop author - expect((publicProps.toJSON() as any)[0][2]).to.equal(GENESIS_ACCOUNT); - - // depositOf - const depositOf = (await context.polkadotApi.query.democracy.depositOf(0)) as any; - expect(depositOf.unwrap()[1].toBigInt()).to.equal(1000n * GLMR); - expect((depositOf.toJSON() as any)[0][1]).to.equal(ALITH); - }); - - it("check launch period", async function () { - // launchPeriod - expect(launchPeriod.toBigInt()).to.equal(7200n); - }); - - it("check referendum is up", async function () { - this.timeout(1000000); - // let Launchperiod elapse to turn the proposal into a referendum - // launchPeriod minus the 3 blocks that already elapsed - for (let i = 0; i < Number(launchPeriod) - 3; i++) { - await context.createBlock(); - } - // referendumCount - let referendumCount = await context.polkadotApi.query.democracy.referendumCount(); - expect(referendumCount.toHuman()).to.equal("1"); - - // publicPropCount - const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); - expect(publicPropCount.toHuman()).to.equal("1"); - - // referendumInfoOf - const referendumInfoOf = await context.polkadotApi.query.democracy.referendumInfoOf(0); - expect((referendumInfoOf.toHuman() as any).Ongoing.proposalHash).to.equal(encodedHash); - }); -}); - -describeDevMoonbeam("Democracy - vote yes on referendum", (context) => { - let genesisAccount: KeyringPair, alith: KeyringPair; - let encodedHash: string; - let enactmentPeriod, votingPeriod; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // enactmentPeriod - enactmentPeriod = await context.polkadotApi.consts.democracy.enactmentPeriod; - // votingPeriod - votingPeriod = await context.polkadotApi.consts.democracy.votingPeriod; - - // notePreimage - encodedHash = await notePreimage( - context, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT), - genesisAccount - ); - // propose - await context.polkadotApi.tx.democracy - .propose(encodedHash, PROPOSAL_AMOUNT) - .signAndSend(genesisAccount); - await context.createBlock(); - // second - await context.polkadotApi.tx.democracy.second(0, 1000).signAndSend(alith); - await context.createBlock(); - }); - - it("check enactment period", async function () { - // enactmentPeriod - expect(enactmentPeriod.toBigInt()).to.equal(7200n); - }); - - it("check voting Period", async function () { - // votingPeriod - expect(votingPeriod.toBigInt()).to.equal(36000n); - }); - - it("vote yes", async function () { - this.timeout(2000000); - // let Launchperiod elapse to turn the proposal into a referendum - // launchPeriod minus the 3 blocks that already elapsed - for (let i = 0; i < 7200 - 3; i++) { - await context.createBlock(); - } - // vote - await context.polkadotApi.tx.democracy - .vote(0, { - Standard: { balance: VOTE_AMOUNT, vote: { aye: true, conviction: 1 } }, - }) - .signAndSend(alith); - await context.createBlock(); - - // referendumInfoOf - const referendumInfoOf = ( - (await context.polkadotApi.query.democracy.referendumInfoOf(0)) as any - ).unwrap() as any; - const onGoing = referendumInfoOf.asOngoing; - - expect(onGoing.proposalHash.toHex()).to.equal(encodedHash); - expect(onGoing.tally.ayes.toBigInt()).to.equal(10n * GLMR); - expect(onGoing.tally.turnout.toBigInt()).to.equal(10n * GLMR); - - // let votePeriod + enactmentPeriod elapse to turn the proposal into a referendum - for (let i = 0; i < Number(votingPeriod) + Number(enactmentPeriod); i++) { - await context.createBlock(); - } - let parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toJSON()["account"]).to.equal(GENESIS_ACCOUNT); - }); -}); - -describeDevMoonbeam("Democracy - vote no on referendum", (context) => { - let genesisAccount: KeyringPair, alith: KeyringPair; - let encodedHash: string; - let enactmentPeriod, votingPeriod; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // enactmentPeriod - enactmentPeriod = await context.polkadotApi.consts.democracy.enactmentPeriod; - // votingPeriod - votingPeriod = await context.polkadotApi.consts.democracy.votingPeriod; - - // notePreimage - encodedHash = await notePreimage( - context, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT), - genesisAccount - ); - // propose - await context.polkadotApi.tx.democracy - .propose(encodedHash, PROPOSAL_AMOUNT) - .signAndSend(genesisAccount); - await context.createBlock(); - // second - await context.polkadotApi.tx.democracy.second(0, 1000).signAndSend(alith); - await context.createBlock(); - }); - - it("check enactment period", async function () { - // enactmentPeriod - expect(enactmentPeriod.toBigInt()).to.equal(7200n); - }); - - it("check voting Period", async function () { - // votingPeriod - expect(votingPeriod.toBigInt()).to.equal(36000n); - }); - - it("vote no", async function () { - this.timeout(2000000); - // let Launchperiod elapse to turn the proposal into a referendum - // launchPeriod minus the 3 blocks that already elapsed - for (let i = 0; i < 7200 - 3; i++) { - await context.createBlock(); - } - // vote - await context.polkadotApi.tx.democracy - .vote(0, { - Standard: { balance: VOTE_AMOUNT, vote: { aye: false, conviction: 1 } }, - }) - .signAndSend(alith); - await context.createBlock(); - - // referendumInfoOf - const referendumInfoOf = ( - (await context.polkadotApi.query.democracy.referendumInfoOf(0)) as any - ).unwrap() as any; - const onGoing = referendumInfoOf.asOngoing; - - expect(onGoing.proposalHash.toHex()).to.equal(encodedHash); - expect(onGoing.tally.nays.toBigInt()).to.equal(10n * GLMR); - expect(onGoing.tally.turnout.toBigInt()).to.equal(10n * GLMR); - }); -}); - -// When forgetting to call notePreimage, all following steps should work as intended -// until the end where the proposal is never enacted - -describeDevMoonbeam("Democracy - forget notePreimage", (context) => { - let genesisAccount: KeyringPair, alith: KeyringPair; - let encodedHash: string; - let enactmentPeriod, votingPeriod; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // notePreimage - // compute proposal hash but don't submit it - const encodedProposal = - context.polkadotApi.tx.parachainStaking - .setParachainBondAccount(GENESIS_ACCOUNT) - .method.toHex() || ""; - encodedHash = blake2AsHex(encodedProposal); - }); - - it("vote", async function () { - this.timeout(200000); - - // propose - const { events: eventsPropose } = await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.democracy.propose(encodedHash, PROPOSAL_AMOUNT) - ); - expect(eventsPropose[7].toHuman().method).to.eq("ExtrinsicSuccess"); - await context.createBlock(); - // second - const { events: eventsSecond } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.democracy.second(0, 1000) - ); - expect(eventsSecond[2].toHuman().method).to.eq("Seconded"); - expect(eventsSecond[5].toHuman().method).to.eq("ExtrinsicSuccess"); - // let Launchperiod elapse to turn the proposal into a referendum - // launchPeriod minus the 3 blocks that already elapsed - for (let i = 0; i < 7200; i++) { - await context.createBlock(); - } - // referendumCount - let referendumCount = (await context.polkadotApi.query.democracy.referendumCount()) as any; - expect(referendumCount.toBigInt()).to.equal(1n); - - // vote - await context.createBlock(); - const { events: eventsVote } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.democracy.vote(0, { - Standard: { balance: VOTE_AMOUNT, vote: { aye: true, conviction: 1 } }, - }) - ); - - expect(eventsVote[1].toHuman().method).to.eq("Voted"); - expect(eventsVote[4].toHuman().method).to.eq("ExtrinsicSuccess"); - - // referendumInfoOf - const referendumInfoOf = ( - (await context.polkadotApi.query.democracy.referendumInfoOf(0)) as any - ).unwrap() as any; - const onGoing = referendumInfoOf.asOngoing; - expect(onGoing.proposalHash.toHex()).to.equal(encodedHash); - expect(onGoing.tally.ayes.toBigInt()).to.equal(10n * GLMR); - expect(onGoing.tally.turnout.toBigInt()).to.equal(10n * GLMR); - - // let votePeriod + enactmentPeriod elapse to turn the proposal into a referendum - for (let i = 0; i < Number(votingPeriod) + Number(enactmentPeriod); i++) { - await context.createBlock(); - } - // the enactement should fail - let parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toJSON()["account"]).to.equal(ZERO_ADDRESS); - }); -}); diff --git a/tests/tests/test-democracy/test-democracy-fastrack.ts b/tests/tests/test-democracy/test-democracy-fastrack.ts new file mode 100644 index 0000000000..4ea77f72d6 --- /dev/null +++ b/tests/tests/test-democracy/test-democracy-fastrack.ts @@ -0,0 +1,140 @@ +import "@moonbeam-network/api-augment"; + +import { Result } from "@polkadot/types"; +import { SpRuntimeDispatchError } from "@polkadot/types/lookup"; +import { expect } from "chai"; + +import { alith, baltathar, charleth } from "../../util/accounts"; +import { HOURS } from "../../util/constants"; +import { + execCouncilProposal, + execTechnicalCommitteeProposal, + notePreimage, +} from "../../util/governance"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Democracy - FastTracking", (context) => { + let proposalHash: string; + + before("Prepare pre-image and proposal and 3 members TC", async () => { + proposalHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + await execCouncilProposal( + context, + context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) + ); + }); + + it("should succeed with less than 1/2 of the council", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, 4 * HOURS, 1), + [alith], + 1 + ); + + expect( + events.findIndex( + ({ event: { section, method } }) => + section == "techCommitteeCollective" && method == "Executed" + ), + "Technical Committee Wrong event" + ).to.equal(2); + expect((events[2].event.data[1] as Result).isOk).to.be.true; + + // Verify the proposal is NOT sent to referendum + expect((await context.polkadotApi.query.democracy.referendumCount()).toNumber()).to.be.equal(1); + }); +}); + +describeDevMoonbeam("Democracy - FastTracking", (context) => { + let proposalHash: string; + + before("Prepare pre-image and proposal and 3 members TC", async () => { + proposalHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + await execCouncilProposal( + context, + context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) + ); + }); + + it("should succeed with the full council", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, 1, 1), + [alith, baltathar], + 2 + ); + + expect( + events.findIndex( + ({ event: { section, method } }) => + section == "techCommitteeCollective" && method == "Executed" + ), + "Technical Committee Wrong event" + ).to.equal(4); + expect((events[4].event.data[1] as Result).isOk).to.be.true; + + // Verify the proposal is NOT sent to referendum + expect((await context.polkadotApi.query.democracy.referendumCount()).toNumber()).to.be.equal(1); + }); +}); + +describeDevMoonbeam("Democracy - FastTracking", (context) => { + let proposalHash: string; + + before("Prepare pre-image and proposal and 3 members TC", async () => { + proposalHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + await execCouncilProposal( + context, + context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) + ); + + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.techCommitteeCollective.setMembers( + [alith.address, baltathar.address, charleth.address], + alith.address, + ( + await context.polkadotApi.query.techCommitteeCollective.members() + ).length + ) + ) + ); + return proposalHash; + }); + + it("should fail with less than 1/2 of the council", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, 1, 1), + [alith], + 1 + ); + + // Verify it passed + expect( + events.findIndex( + ({ event: { section, method } }) => + section == "techCommitteeCollective" && method == "Executed" + ), + "Technical Committee Wrong event" + ).to.equal(1); + expect((events[1].event.data[1] as Result).asErr.isBadOrigin).to.be + .true; + + // Verify the proposal is NOT sent to referendum + expect((await context.polkadotApi.query.democracy.referendumCount()).toNumber()).to.be.equal(0); + }); +}); diff --git a/tests/tests/test-democracy/test-democracy-genesis.ts b/tests/tests/test-democracy/test-democracy-genesis.ts new file mode 100644 index 0000000000..75d6595511 --- /dev/null +++ b/tests/tests/test-democracy/test-democracy-genesis.ts @@ -0,0 +1,32 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Democracy - genesis", (context) => { + it("should have no referendum", async function () { + expect((await context.polkadotApi.query.democracy.referendumCount()).toNumber()).to.equal(0); + }); + it("should have no preimages", async function () { + expect((await context.polkadotApi.query.democracy.preimages.entries()).length).to.equal(0); + }); + it("should have an enactment of 7200", async function () { + expect(context.polkadotApi.consts.democracy.enactmentPeriod.toNumber()).to.equal(7200); + }); + it("should have a voting period of 36000", async function () { + expect(context.polkadotApi.consts.democracy.votingPeriod.toNumber()).to.equal(36000); + }); + it("should have a launch period of 7200", async function () { + expect(context.polkadotApi.consts.democracy.launchPeriod.toNumber()).to.equal(7200); + }); + it("should have a locking period of 7200", async function () { + expect(context.polkadotApi.consts.democracy.voteLockingPeriod.toNumber()).to.equal(7200); + }); + it("should have a cooloff period of 50400", async function () { + expect(context.polkadotApi.consts.democracy.cooloffPeriod.toNumber()).to.equal(50400); + }); + it("should have instant fast track allowed", async function () { + expect(context.polkadotApi.consts.democracy.instantAllowed.isTrue).to.be.true; + }); +}); diff --git a/tests/tests/test-democracy/test-democracy-instant-fastrack.ts b/tests/tests/test-democracy/test-democracy-instant-fastrack.ts new file mode 100644 index 0000000000..49cd7a73bc --- /dev/null +++ b/tests/tests/test-democracy/test-democracy-instant-fastrack.ts @@ -0,0 +1,127 @@ +import "@moonbeam-network/api-augment"; + +import { Result } from "@polkadot/types"; +import { SpRuntimeDispatchError } from "@polkadot/types/lookup"; +import { expect } from "chai"; + +import { alith, baltathar, charleth } from "../../util/accounts"; +import { + execCouncilProposal, + execTechnicalCommitteeProposal, + notePreimage, +} from "../../util/governance"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; + +const setupProposalAnd3TechnicalCommittee = async (context: DevTestContext) => { + let proposalHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + await execCouncilProposal( + context, + context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) + ); + + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.techCommitteeCollective.setMembers( + [alith.address, baltathar.address, charleth.address], + alith.address, + ( + await context.polkadotApi.query.techCommitteeCollective.members() + ).length + ) + ) + ); + return proposalHash; +}; + +describeDevMoonbeam("Democracy - Instant FastTracking", (context) => { + let proposalHash: string; + + before("Prepare pre-image and proposal and 3 members TC", async () => { + proposalHash = await setupProposalAnd3TechnicalCommittee(context); + }); + + it("should fail with less than 2/3rd of the council", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, 1, 1), + [alith], + 1 + ); + + // Verify it passed + expect( + events.findIndex( + ({ event: { section, method } }) => + section == "techCommitteeCollective" && method == "Executed" + ), + "Technical Committee Wrong event" + ).to.equal(1); + expect((events[1].event.data[1] as Result).asErr.isBadOrigin).to.be + .true; + + // Verify the proposal is NOT sent to referendum + expect((await context.polkadotApi.query.democracy.referendumCount()).toNumber()).to.be.equal(0); + }); +}); + +describeDevMoonbeam("Democracy - Instant FastTracking", (context) => { + let proposalHash: string; + + before("Prepare pre-image and proposal and 3 members TC", async () => { + proposalHash = await setupProposalAnd3TechnicalCommittee(context); + }); + + it("should succeed with than 2/3rd of the council", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, 1, 1), + [alith, baltathar], + 2 + ); + + expect( + events.findIndex( + ({ event: { section, method } }) => + section == "techCommitteeCollective" && method == "Executed" + ), + "Technical Committee Wrong event" + ).to.equal(4); + expect((events[4].event.data[1] as Result).isOk).to.be.true; + + // Verify the proposal is NOT sent to referendum + expect((await context.polkadotApi.query.democracy.referendumCount()).toNumber()).to.be.equal(1); + }); +}); + +describeDevMoonbeam("Democracy - Instant FastTracking", (context) => { + let proposalHash: string; + + before("Prepare pre-image and proposal and 3 members TC", async () => { + proposalHash = await setupProposalAnd3TechnicalCommittee(context); + }); + + it("should succeed with the full council", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, 1, 1), + [alith, baltathar, charleth], + 3 + ); + + expect( + events.findIndex( + ({ event: { section, method } }) => + section == "techCommitteeCollective" && method == "Executed" + ), + "Technical Committee Wrong event" + ).to.equal(4); + expect((events[4].event.data[1] as Result).isOk).to.be.true; + + // Verify the proposal is NOT sent to referendum + expect((await context.polkadotApi.query.democracy.referendumCount()).toNumber()).to.be.equal(1); + }); +}); diff --git a/tests/tests/test-democracy/test-democracy-preimage.ts b/tests/tests/test-democracy/test-democracy-preimage.ts new file mode 100644 index 0000000000..7bf95fb44a --- /dev/null +++ b/tests/tests/test-democracy/test-democracy-preimage.ts @@ -0,0 +1,65 @@ +import "@moonbeam-network/api-augment"; + +import { blake2AsHex } from "@polkadot/util-crypto"; +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { MICROGLMR } from "../../util/constants"; +import { notePreimage } from "../../util/governance"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Democracy - Preimage", (context) => { + it("should be notable", async function () { + const encodedProposal = + context.polkadotApi.tx.parachainStaking + .setParachainBondAccount(alith.address) + .method.toHex() || ""; + const encodedHash = blake2AsHex(encodedProposal); + await context.createBlock(context.polkadotApi.tx.democracy.notePreimage(encodedProposal)); + + const preimageStatus = await context.polkadotApi.query.democracy.preimages(encodedHash); + expect(preimageStatus.isSome).to.be.true; + expect(preimageStatus.unwrap().isAvailable).to.eq(true, "Preimage should be available"); + expect(preimageStatus.unwrap().asAvailable.provider.toString()).to.equal(alith.address); + expect(preimageStatus.unwrap().asAvailable.deposit.toBigInt()).to.equal(2200n * MICROGLMR); + }); +}); + +describeDevMoonbeam("Democracy - Preimage", (context) => { + it("should not be forgettable immediately", async function () { + const encodedHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + + const { + result: { error }, + } = await context.createBlock( + context.polkadotApi.tx.democracy.reapPreimage(encodedHash, 10000) + ); + + expect(error.name).to.equal("TooEarly"); + + const preimageStatus = await context.polkadotApi.query.democracy.preimages(encodedHash); + expect(preimageStatus.isSome).to.be.true; + }); +}); + +describeDevMoonbeam("Democracy - Preimage", (context) => { + it("should be forgettable after voting period", async function () { + const encodedHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + + await context.createBlock(context.polkadotApi.tx.democracy.reapPreimage(encodedHash, 10000)); + + const preimageStatus = await context.polkadotApi.query.democracy.preimages(encodedHash); + expect(preimageStatus.isSome).to.be.true; + expect(preimageStatus.unwrap().isAvailable).to.eq(true, "Preimage should be available"); + expect(preimageStatus.unwrap().asAvailable.provider.toString()).to.equal(alith.address); + expect(preimageStatus.unwrap().asAvailable.deposit.toBigInt()).to.equal(2200n * MICROGLMR); + }); +}); diff --git a/tests/tests/test-democracy/test-democracy-proposal.ts b/tests/tests/test-democracy/test-democracy-proposal.ts new file mode 100644 index 0000000000..37f60452b3 --- /dev/null +++ b/tests/tests/test-democracy/test-democracy-proposal.ts @@ -0,0 +1,138 @@ +import "@moonbeam-network/api-augment"; + +import { u32 } from "@polkadot/types-codec"; +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { GLMR, PROPOSAL_AMOUNT } from "../../util/constants"; +import { notePreimage } from "../../util/governance"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Democracy - proposing a vote", (context) => { + let encodedHash: string; + + before("Create preimage & proposal", async () => { + // notePreimage + encodedHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + // propose + await context.createBlock( + context.polkadotApi.tx.democracy.propose(encodedHash, PROPOSAL_AMOUNT) + ); + }); + + it("should not create a referendum", async function () { + // referendumCount + const referendumCount = await context.polkadotApi.query.democracy.referendumCount(); + expect(referendumCount.toBigInt()).to.equal(0n); + }); + + it("should increase the number of proposals to 1", async function () { + // publicPropCount + const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); + expect(publicPropCount.toBigInt()).to.equal(1n); + }); + + it("should create a proposal", async function () { + // publicProps + const publicProps = await context.polkadotApi.query.democracy.publicProps(); + // encodedHash + expect(publicProps[0][1].toString()).to.equal(encodedHash); + // prop author + expect(publicProps[0][2].toString()).to.equal(alith.address); + // depositOf + }); + + it("should include a deposit of 1000 TOKENs", async function () { + const depositOf = await context.polkadotApi.query.democracy.depositOf(0); + expect(depositOf.unwrap()[1].toBigInt()).to.equal(1000n * GLMR); + }); +}); + +describeDevMoonbeam("Democracy - Seconding a proposal", (context) => { + let encodedHash: string; + let launchPeriod: u32; + + before("Setup genesis account for substrate", async () => { + //launchPeriod + launchPeriod = await context.polkadotApi.consts.democracy.launchPeriod; + + // notePreimage + encodedHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + + // propose & second + await context.createBlock( + context.polkadotApi.tx.democracy.propose(encodedHash, PROPOSAL_AMOUNT) + ); + await context.createBlock(context.polkadotApi.tx.democracy.second(0, 1000)); + }); + + it("should succeed", async function () { + // publicProps + const publicProps = await context.polkadotApi.query.democracy.publicProps(); + // encodedHash + expect(publicProps[0][1].toString()).to.equal(encodedHash); + // prop author + expect(publicProps[0][2].toString()).to.equal(alith.address); + + // depositOf + const depositOf = await context.polkadotApi.query.democracy.depositOf(0); + expect(depositOf.unwrap()[1].toBigInt()).to.equal(1000n * GLMR); + expect(depositOf.unwrap()[0][1].toString()).to.equal(alith.address); + }); + + it("should have a launch period of 7200", async function () { + // launchPeriod + expect(launchPeriod.toBigInt()).to.equal(7200n); + }); +}); + +describeDevMoonbeam("Democracy - Seconding a proposal", (context) => { + let encodedHash: string; + let launchPeriod: u32; + + before("Setup genesis account for substrate", async () => { + //launchPeriod + launchPeriod = await context.polkadotApi.consts.democracy.launchPeriod; + + // notePreimage + encodedHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + + // propose & second + await context.createBlock( + context.polkadotApi.tx.democracy.propose(encodedHash, PROPOSAL_AMOUNT) + ); + await context.createBlock(context.polkadotApi.tx.democracy.second(0, 1000)); + }); + + it("should end-up in a valid referendum", async function () { + this.timeout(1000000); + // let Launchperiod elapse to turn the proposal into a referendum + // launchPeriod minus the 3 blocks that already elapsed + for (let i = 0; i < Number(launchPeriod) - 3; i++) { + await context.createBlock(); + } + // referendumCount + let referendumCount = await context.polkadotApi.query.democracy.referendumCount(); + expect(referendumCount.toHuman()).to.equal("1"); + + // publicPropCount + const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); + expect(publicPropCount.toHuman()).to.equal("1"); + + // referendumInfoOf + const referendumInfoOf = await context.polkadotApi.query.democracy.referendumInfoOf(0); + expect((referendumInfoOf.toHuman() as any).Ongoing.proposalHash).to.equal(encodedHash); + }); +}); diff --git a/tests/tests/test-democracy/test-democracy-referendum.ts b/tests/tests/test-democracy/test-democracy-referendum.ts new file mode 100644 index 0000000000..bb585da679 --- /dev/null +++ b/tests/tests/test-democracy/test-democracy-referendum.ts @@ -0,0 +1,141 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith, generateKeyringPair } from "../../util/accounts"; +import { GLMR, VOTE_AMOUNT, ZERO_ADDRESS } from "../../util/constants"; +import { instantFastTrack, notePreimage } from "../../util/governance"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Democracy - Referendum", (context) => { + let encodedHash: string; + + before("Setup referendum", async () => { + // notePreimage + encodedHash = await instantFastTrack( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) + ); + }); + + it("should succeed with enough votes", async function () { + // vote + await context.createBlock( + context.polkadotApi.tx.democracy.vote(0, { + Standard: { balance: VOTE_AMOUNT, vote: { aye: true, conviction: 1 } }, + }) + ); + + // referendumInfoOf + const referendumInfoOf = ( + await context.polkadotApi.query.democracy.referendumInfoOf(0) + ).unwrap(); + const onGoing = referendumInfoOf.asOngoing; + + expect(onGoing.proposalHash.toHex()).to.equal(encodedHash); + expect(onGoing.tally.ayes.toBigInt()).to.equal(10n * GLMR); + expect(onGoing.tally.turnout.toBigInt()).to.equal(10n * GLMR); + + const blockNumber = (await context.polkadotApi.rpc.chain.getHeader()).number.toNumber(); + for (let i = 0; i < onGoing.end.toNumber() - blockNumber; i++) { + await context.createBlock(); + } + + const finishedReferendum = ( + await context.polkadotApi.query.democracy.referendumInfoOf(0) + ).unwrap(); + + expect(finishedReferendum.isFinished).to.be.true; + expect(finishedReferendum.asFinished.approved.isTrue).to.be.true; + + let parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.account.toString()).to.equal(alith.address); + }); +}); + +describeDevMoonbeam("Democracy - Referendum", (context) => { + let encodedHash: string; + + before("Setup a referendum", async () => { + // notePreimage + encodedHash = await instantFastTrack( + context, + context.polkadotApi.tx.system.remark("Just a simple vote") + ); + }); + + it("should fail with enough no votes", async function () { + // vote + await context.createBlock( + context.polkadotApi.tx.democracy.vote(0, { + Standard: { balance: VOTE_AMOUNT, vote: { aye: false, conviction: 1 } }, + }) + ); + + // referendumInfoOf + const referendumInfoOf = ( + await context.polkadotApi.query.democracy.referendumInfoOf(0) + ).unwrap(); + const onGoing = referendumInfoOf.asOngoing; + + expect(onGoing.proposalHash.toHex()).to.equal(encodedHash); + expect(onGoing.tally.nays.toBigInt()).to.equal(10n * GLMR); + expect(onGoing.tally.turnout.toBigInt()).to.equal(10n * GLMR); + + const blockNumber = (await context.polkadotApi.rpc.chain.getHeader()).number.toNumber(); + for (let i = 0; i < onGoing.end.toNumber() - blockNumber; i++) { + await context.createBlock(); + } + const finishedReferendum = ( + await context.polkadotApi.query.democracy.referendumInfoOf(0) + ).unwrap(); + + expect(finishedReferendum.isFinished).to.be.true; + expect(finishedReferendum.asFinished.approved.isFalse).to.be.true; + + let parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.account.toString()).to.equal(ZERO_ADDRESS); + }); +}); + +describeDevMoonbeam("Democracy - Referendum", (context) => { + let encodedHash: string; + const randomAccount = generateKeyringPair(); + + before("Setup a vote & random account & delegation", async () => { + // notePreimage + encodedHash = await instantFastTrack( + context, + context.polkadotApi.tx.system.remark("Just a simple vote"), + { votingPeriod: 10, delayPeriod: 1 } + ); + await context.createBlock( + context.polkadotApi.tx.balances.transfer(randomAccount.address, 100n * GLMR) + ); + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, 90n * GLMR, 0, 0) + .signAsync(randomAccount) + ); + }); + + it("should be votable while staked", async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.democracy + .vote(0, { + Standard: { balance: 90n * GLMR, vote: { aye: false, conviction: 1 } }, + }) + .signAsync(randomAccount) + ); + + expect(result.successful).to.be.true; + + // ensure we have both locks + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks.length).to.be.equal(2, "Failed to incur two locks"); + expect(locks[0].amount.toBigInt()).to.be.equal(90n * GLMR); + expect(locks[0].id.toHuman().toString()).to.be.equal("stkngdel"); + expect(locks[1].amount.toBigInt()).to.be.equal(90n * GLMR); + expect(locks[1].id.toHuman().toString()).to.be.equal("democrac"); + }); +}); diff --git a/tests/tests/test-fee-history.ts b/tests/tests/test-eth-fee/test-eth-fee-history.ts similarity index 82% rename from tests/tests/test-fee-history.ts rename to tests/tests/test-eth-fee/test-eth-fee-history.ts index efc64e2ebe..053113c2af 100644 --- a/tests/tests/test-fee-history.ts +++ b/tests/tests/test-eth-fee/test-eth-fee-history.ts @@ -1,16 +1,18 @@ -import { ethers } from "ethers"; +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; +import { ethers } from "ethers"; -import { ALITH, GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -import { customWeb3Request } from "../util/providers"; -import { getCompiled } from "../util/contracts"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; +import { alith, ALITH_PRIVATE_KEY } from "../../util/accounts"; +import { getCompiled } from "../../util/contracts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes, DevTestContext } from "../../util/setup-dev-tests"; // We use ethers library in this test as apparently web3js's types are not fully EIP-1559 // compliant yet. describeDevMoonbeamAllEthTxTypes("Fee History", (context) => { - async function sendTransaction(context, payload: any) { - let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); + async function sendTransaction(context: DevTestContext, payload: any) { + let signer = new ethers.Wallet(ALITH_PRIVATE_KEY, context.ethers); // Ethers internally matches the locally calculated transaction hash against the one // returned as a response. // Test would fail in case of mismatch. @@ -18,7 +20,7 @@ describeDevMoonbeamAllEthTxTypes("Fee History", (context) => { return tx; } - function get_percentile(percentile, array) { + function get_percentile(percentile: number, array: number[]) { array.sort(function (a, b) { return a - b; }); @@ -30,13 +32,18 @@ describeDevMoonbeamAllEthTxTypes("Fee History", (context) => { } } - async function createBlocks(block_count, reward_percentiles, priority_fees, max_fee_per_gas) { - const contractData = await getCompiled("TestContract"); - let nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + async function createBlocks( + block_count: number, + reward_percentiles: number[], + priority_fees: number[], + max_fee_per_gas: string + ) { + const contractData = await getCompiled("MultiplyBy7"); + let nonce = await context.web3.eth.getTransactionCount(alith.address); for (var b = 0; b < block_count; b++) { for (var p = 0; p < priority_fees.length; p++) { await sendTransaction(context, { - from: GENESIS_ACCOUNT, + from: alith.address, data: contractData.byteCode, value: "0x00", maxFeePerGas: max_fee_per_gas, diff --git a/tests/tests/test-tx-early-exits.ts b/tests/tests/test-eth-pool/test-eth-pool-discard.ts similarity index 90% rename from tests/tests/test-tx-early-exits.ts rename to tests/tests/test-eth-pool/test-eth-pool-discard.ts index f8dbf97a0c..ab2f939fe3 100644 --- a/tests/tests/test-tx-early-exits.ts +++ b/tests/tests/test-eth-pool/test-eth-pool-discard.ts @@ -1,6 +1,7 @@ import { expect } from "chai"; -import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Transaction Cost discards", (context) => { it("should take transaction cost into account and not submit it to the pool", async function () { diff --git a/tests/tests/test-eth-pool/test-eth-pool-error.ts b/tests/tests/test-eth-pool/test-eth-pool-error.ts new file mode 100644 index 0000000000..b83f889718 --- /dev/null +++ b/tests/tests/test-eth-pool/test-eth-pool-error.ts @@ -0,0 +1,124 @@ +import { expect } from "chai"; + +import { baltathar, ALITH_GENESIS_TRANSFERABLE_BALANCE } from "../../util/accounts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; +import { customWeb3Request } from "../../util/providers"; + +describeDevMoonbeam("Ethereum Rpc pool errors - already known #1", (context) => { + it("already known #1", async function () { + const tx = await createTransfer(context, baltathar.address, 1, { nonce: 0 }); + await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx]); + const res_a2 = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx]); + expect(res_a2.error).to.include({ + message: "already known", + }); + await context.createBlock(); + }); +}); + +describeDevMoonbeam("Ethereum Rpc pool errors - replacement transaction underpriced", (context) => { + it("replacement transaction underpriced", async function () { + const tx_1 = await createTransfer(context, baltathar.address, 1, { + nonce: 0, + gasPrice: 2_000_000_000, + }); + const tx_2 = await createTransfer(context, baltathar.address, 1, { + nonce: 0, + gasPrice: 1_000_000_000, + }); + await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx_1]); + const res_a2 = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx_2]); + expect(res_a2.error).to.include({ + message: "replacement transaction underpriced", + }); + await context.createBlock(); + }); +}); + +describeDevMoonbeam("Ethereum Rpc pool errors - nonce too low", (context) => { + it("nonce too low", async function () { + const tx_1 = await createTransfer(context, baltathar.address, 1, { nonce: 0 }); + await context.createBlock(tx_1); + const tx_2 = await createTransfer(context, baltathar.address, 2, { nonce: 0 }); + const res_a2 = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx_2]); + expect(res_a2.error).to.include({ + message: "nonce too low", + }); + await context.createBlock(); + }); +}); + +describeDevMoonbeam("Ethereum Rpc pool errors - already known #2", (context) => { + it("already known #2", async function () { + const tx_1 = await createTransfer(context, baltathar.address, 1, { nonce: 0 }); + await context.createBlock(tx_1); + const tx_2 = await createTransfer(context, baltathar.address, 1, { nonce: 0 }); + const res_a2 = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx_2]); + expect(res_a2.error).to.include({ + message: "already known", + }); + }); +}); + +describeDevMoonbeam( + "Ethereum Rpc pool errors - insufficient funds for gas * price + value", + (context) => { + it("insufficient funds for gas * price + value", async function () { + const ZEROED_ADDRESS = "0x740153b27427ecfc353b49ea6ab4c2e564d4ca15"; + const ZEROED_PKEY = "0xbf2a9f29a7631116a1128e34fcf8817581fb3ec159ef2be004b459bc33f2ed2d"; + const tx = await createTransfer(context, baltathar.address, 1, { + from: ZEROED_ADDRESS, + privateKey: ZEROED_PKEY, + }); + const res = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx]); + expect(res.error).to.include({ + message: "insufficient funds for gas * price + value", + }); + }); + } +); + +describeDevMoonbeam("Ethereum Rpc pool errors - exceeds block gas limit", (context) => { + it("exceeds block gas limit", async function () { + const tx = await createTransfer(context, baltathar.address, 1, { + nonce: 0, + gas: 1_000_000_0000, + }); + const res = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx]); + expect(res.error).to.include({ + message: "exceeds block gas limit", + }); + }); +}); + +describeDevMoonbeam( + "Ethereum Rpc pool errors - insufficient funds for gas * price + value", + (context) => { + it("insufficient funds for gas * price + value", async function () { + const amount = ALITH_GENESIS_TRANSFERABLE_BALANCE - 21000n * 1_000_000_000n + 1n; + const tx = await createTransfer(context, baltathar.address, amount, { nonce: 0 }); + const res = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx]); + expect(res.error).to.include({ + message: "insufficient funds for gas * price + value", + }); + }); + } +); + +describeDevMoonbeam( + "Ethereum Rpc pool errors - max priority fee per gas higher than max fee per gas", + (context) => { + it("max priority fee per gas higher than max fee per gast", async function () { + const tx = await createTransfer(context, baltathar.address, 1, { + nonce: 0, + maxPriorityFeePerGas: 2_000_000_000, + }); + const res = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx]); + expect(res.error).to.include({ + message: "max priority fee per gas higher than max fee per gas", + }); + }); + }, + "EIP1559" +); diff --git a/tests/tests/test-ethpool/test-ethpool-multiple.ts b/tests/tests/test-eth-pool/test-eth-pool-multiple.ts similarity index 87% rename from tests/tests/test-ethpool/test-ethpool-multiple.ts rename to tests/tests/test-eth-pool/test-eth-pool-multiple.ts index 9e51c24fb4..7deccef644 100644 --- a/tests/tests/test-ethpool/test-ethpool-multiple.ts +++ b/tests/tests/test-eth-pool/test-eth-pool-multiple.ts @@ -1,8 +1,11 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; +import { Transaction } from "web3-core"; + import { customWeb3Request } from "../../util/providers"; import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract } from "../../util/transactions"; -import { Transaction } from "web3-core"; /* At rpc-level, there is no interface for retrieving emulated pending transactions - emulated @@ -19,8 +22,8 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Multiple pending transactions", (con before("Setup: Sending 10 transactions", async function () { txHashes = await Promise.all( - new Array(10).map(async (_, i) => { - const { rawTx } = await createContract(context, "TestContract", { nonce: i }); + new Array(10).fill(0).map(async (_, i) => { + const { rawTx } = await createContract(context, "MultiplyBy7", { nonce: i }); return (await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx])).result; }) ); @@ -36,7 +39,7 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Multiple pending transactions", (con ).map((response) => response.result as Transaction); expect(txs).to.be.lengthOf(10); - for (let i; i < 10; i++) { + for (let i = 0; i < 10; i++) { expect(txs[i].hash).to.be.equal(txHashes[i]); } }); @@ -51,7 +54,7 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Multiple pending transactions", (con ).map((response) => response.result as Transaction); expect(txs).to.be.lengthOf(10); - for (let i; i < 10; i++) { + for (let i = 0; i < 10; i++) { expect(txs[i].blockNumber).to.be.null; expect(txs[i].transactionIndex).to.be.null; } @@ -63,8 +66,8 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Multiple produced transactions", (co before("Setup: Sending 10 transactions", async function () { txHashes = await Promise.all( - new Array(10).map(async (_, i) => { - const { rawTx } = await createContract(context, "TestContract", { nonce: i }); + new Array(10).fill(0).map(async (_, i) => { + const { rawTx } = await createContract(context, "MultiplyBy7", { nonce: i }); return (await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx])).result; }) ); @@ -82,7 +85,7 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Multiple produced transactions", (co ).map((response) => response.result as Transaction); expect(txs).to.be.lengthOf(10); - for (let i; i < 10; i++) { + for (let i = 0; i < 10; i++) { expect(txs[i].hash).to.be.equal(txHashes[i]); } }); @@ -97,7 +100,7 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Multiple produced transactions", (co ).map((response) => response.result as Transaction); expect(txs).to.be.lengthOf(10); - for (let i; i < 10; i++) { + for (let i = 0; i < 10; i++) { expect(txs[i].blockNumber).to.not.be.null; } }); @@ -112,9 +115,9 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Multiple produced transactions", (co ).map((response) => response.result as Transaction); expect(txs).to.be.lengthOf(10); - for (let i; i < 10; i++) { + for (let i = 0; i < 10; i++) { expect(txs[i].hash).to.be.equal(txHashes[i]); - expect(txs[i].transactionIndex).to.equal(i); + expect(BigInt(txs[i].transactionIndex)).to.equal(BigInt(i)); } }); }); diff --git a/tests/tests/test-ethpool/test-ethpool-nonce-future.ts b/tests/tests/test-eth-pool/test-eth-pool-nonce-future.ts similarity index 62% rename from tests/tests/test-ethpool/test-ethpool-nonce-future.ts rename to tests/tests/test-eth-pool/test-eth-pool-nonce-future.ts index e584c5a567..f1e4550f23 100644 --- a/tests/tests/test-ethpool/test-ethpool-nonce-future.ts +++ b/tests/tests/test-eth-pool/test-eth-pool-nonce-future.ts @@ -1,18 +1,20 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { createContract, createTransfer } from "../../util/transactions"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { baltathar } from "../../util/accounts"; import { customWeb3Request } from "../../util/providers"; -import { TEST_ACCOUNT } from "../../util/constants"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createContract, createTransfer } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("EthPool - Future Ethereum transaction", (context) => { - let txHash; + let txHash: string; before("Setup: Create a block with transaction", async () => { - const { rawTx } = await createContract(context, "TestContract", { + const { rawTx } = await createContract(context, "MultiplyBy7", { nonce: 1, }); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - txHash = txResults[0].result; + const { result } = await context.createBlock(rawTx); + txHash = result.hash; }); it("should not be executed until condition is met", async function () { @@ -29,26 +31,24 @@ describeDevMoonbeamAllEthTxTypes("EthPool - Future Ethereum transaction", (conte }); describeDevMoonbeamAllEthTxTypes("EthPool - Future Ethereum transaction", (context) => { - let txHash; + let txHash: string; before("Setup: Create a block with transaction", async () => { - const { rawTx } = await createContract(context, "TestContract", { + const { rawTx } = await createContract(context, "MultiplyBy7", { nonce: 1, }); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - txHash = txResults[0].result; + const { result } = await context.createBlock(rawTx); + txHash = result.hash; }); it("should be executed after condition is met", async function () { // Create block including transaction with nonce 0 - await context.createBlock({ - transactions: [ - await createTransfer(context, TEST_ACCOUNT, 512, { - nonce: 0, - }), - ], - }); + await context.createBlock( + createTransfer(context, baltathar.address, 512, { + nonce: 0, + }) + ); const transaction = await context.web3.eth.getTransaction(txHash); - expect(transaction.blockNumber).to.not.be.null; + expect(transaction.blockNumber).to.be.above(0); }); }); diff --git a/tests/tests/test-eth-pool/test-eth-pool-resubmit-txn.ts b/tests/tests/test-eth-pool/test-eth-pool-resubmit-txn.ts new file mode 100644 index 0000000000..f608f7f062 --- /dev/null +++ b/tests/tests/test-eth-pool/test-eth-pool-resubmit-txn.ts @@ -0,0 +1,76 @@ +import { expect } from "chai"; + +import { generateKeyringPair } from "../../util/accounts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; + +describeDevMoonbeam("Resubmit transations", (context) => { + it.skip("should allow resubmitting with higher gas", async function () { + const randomAccount = generateKeyringPair(); + const optionsLowGas = { nonce: 0, gasPrice: 0 }; + const optionsHighGas = { nonce: 0, gasPrice: 1 }; + + await context.createBlock([ + createTransfer(context, randomAccount.address, 1, optionsLowGas), + createTransfer(context, randomAccount.address, 2, optionsHighGas), + ]); + + expect(await context.web3.eth.getBalance(randomAccount.address, 1)).to.equal((2).toString()); + }); +}); + +describeDevMoonbeam("Resubmit transations", (context) => { + it.skip("should ignore resubmitting with lower gas", async function () { + const randomAccount = generateKeyringPair(); + const optionsLowGas = { nonce: 0, gasPrice: 0 }; + const optionsHighGas = { nonce: 0, gasPrice: 1 }; + + await context.createBlock([ + createTransfer(context, randomAccount.address, 3, optionsHighGas), + createTransfer(context, randomAccount.address, 1, optionsLowGas), + ]); + + expect(await context.web3.eth.getBalance(randomAccount.address, 1)).to.equal((3).toString()); + }); +}); + +describeDevMoonbeam("Resubmit transations", (context) => { + it.skip("should allow cancelling transaction", async function () { + const randomAccount = generateKeyringPair(); + // gas price should trump limit + const optionsLowGas = { nonce: 0, gasPrice: 0, gas: 0xfffff }; + const optionsHighGas = { nonce: 0, gasPrice: 1, gas: 0x10000 }; + + await context.createBlock([ + createTransfer(context, randomAccount.address, 1, optionsLowGas), + createTransfer(context, randomAccount.address, 2, optionsHighGas), + ]); + + expect(await context.web3.eth.getBalance(randomAccount.address, 1)).to.equal((2).toString()); + }); +}); + +describeDevMoonbeam("Resubmit transations", (context) => { + it.skip("should pick highest gas price from many transactions", async function () { + const randomAccount = generateKeyringPair(); + const optionsHighGas = { nonce: 0, gasPrice: 100 }; // gas price should trump limit + + let transactions = []; + for (let i = 1; i < 20; i++) { + const options = { nonce: 0, gasPrice: i }; + transactions.push(await createTransfer(context, randomAccount.address, i * 10, options)); + } + + // our expected txn... + transactions.push(await createTransfer(context, randomAccount.address, 42, optionsHighGas)); + + for (let i = 1; i < 20; i++) { + const options = { nonce: 0, gasPrice: i + 30 }; + transactions.push(await createTransfer(context, randomAccount.address, i * 100, options)); + } + + await context.createBlock(transactions); + + expect(await context.web3.eth.getBalance(randomAccount.address, 1)).to.equal((42).toString()); + }); +}); diff --git a/tests/tests/test-rpc-constants.ts b/tests/tests/test-eth-rpc/test-eth-rpc-constants.ts similarity index 92% rename from tests/tests/test-rpc-constants.ts rename to tests/tests/test-eth-rpc/test-eth-rpc-constants.ts index db457b32e2..3e119fb9d7 100644 --- a/tests/tests/test-rpc-constants.ts +++ b/tests/tests/test-eth-rpc/test-eth-rpc-constants.ts @@ -1,5 +1,6 @@ import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("RPC Constants", (context) => { it("should have 0 hashrate", async function () { diff --git a/tests/tests/test-deprecated.ts b/tests/tests/test-eth-rpc/test-eth-rpc-deprecated.ts similarity index 82% rename from tests/tests/test-deprecated.ts rename to tests/tests/test-eth-rpc/test-eth-rpc-deprecated.ts index 8ca2d5f16b..753e5f3515 100644 --- a/tests/tests/test-deprecated.ts +++ b/tests/tests/test-eth-rpc/test-eth-rpc-deprecated.ts @@ -1,6 +1,9 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; + +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Deprecated RPC", (context) => { // List of deprecated methods diff --git a/tests/tests/test-log-filtering.ts b/tests/tests/test-eth-rpc/test-eth-rpc-log-filtering.ts similarity index 75% rename from tests/tests/test-log-filtering.ts rename to tests/tests/test-eth-rpc/test-eth-rpc-log-filtering.ts index 50e0bf52e8..08edcf52bc 100644 --- a/tests/tests/test-log-filtering.ts +++ b/tests/tests/test-eth-rpc/test-eth-rpc-log-filtering.ts @@ -1,12 +1,15 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { customWeb3Request } from "../util/providers"; -import { createContract } from "../util/transactions"; -import { GENESIS_ACCOUNT } from "../util/constants"; import { TransactionReceipt } from "web3-core"; -describeDevMoonbeamAllEthTxTypes("Log - Filter out non-matching", (context) => { - let non_matching_cases = null; +import { alith } from "../../util/accounts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createContract } from "../../util/transactions"; + +describeDevMoonbeamAllEthTxTypes("Ethereum RPC - Filtering non-matching logs", (context) => { + let non_matching_cases: ReturnType = null; function getNonMatchingCases(receipt: TransactionReceipt) { return [ // Non-existant address. @@ -38,11 +41,11 @@ describeDevMoonbeamAllEthTxTypes("Log - Filter out non-matching", (context) => { ]; } before("Setup: Create block with transfer", async () => { - const { rawTx } = await createContract(context, "SingleEventContract", { - from: GENESIS_ACCOUNT, + const { rawTx } = await createContract(context, "EventEmitter", { + from: alith.address, }); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + const { result } = await context.createBlock(rawTx); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); non_matching_cases = getNonMatchingCases(receipt); }); it("EthFilterApi::getFilterLogs - should filter out non-matching cases.", async function () { diff --git a/tests/tests/test-tx-index-bound-check.ts b/tests/tests/test-eth-rpc/test-eth-rpc-tx-index.ts similarity index 73% rename from tests/tests/test-tx-index-bound-check.ts rename to tests/tests/test-eth-rpc/test-eth-rpc-tx-index.ts index 7c4d6b3235..69388c5b03 100644 --- a/tests/tests/test-tx-index-bound-check.ts +++ b/tests/tests/test-eth-rpc/test-eth-rpc-tx-index.ts @@ -1,13 +1,12 @@ import { expect } from "chai"; -import { createTransfer } from "../util/transactions"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { TEST_ACCOUNT } from "../util/constants"; + +import { baltathar } from "../../util/accounts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; describeDevMoonbeam("Transaction Index", (context) => { before("Setup: Create block with transaction", async () => { - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 0)], - }); + await context.createBlock(createTransfer(context, baltathar.address, 0)); }); it("should get transaction by index", async function () { const block = 1; diff --git a/tests/tests/test-eth-rpc/test-eth-rpc-version.ts b/tests/tests/test-eth-rpc/test-eth-rpc-version.ts new file mode 100644 index 0000000000..a8f56d4544 --- /dev/null +++ b/tests/tests/test-eth-rpc/test-eth-rpc-version.ts @@ -0,0 +1,20 @@ +import { expect } from "chai"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Version RPC", (context) => { + it("should return 1281 for eth_chainId", async function () { + expect(await context.web3.eth.getChainId()).to.equal(1281); + }); + it("should return 1281 for net_version", async function () { + expect(await context.web3.eth.net.getId()).to.equal(1281); + }); + it("should include client version", async function () { + const version = await context.web3.eth.getNodeInfo(); + let specName: string = await context.polkadotApi.runtimeVersion.specName.toString(); + let specVersion: string = await context.polkadotApi.runtimeVersion.specVersion.toString(); + let implVersion: string = await context.polkadotApi.runtimeVersion.implVersion.toString(); + let regex = new RegExp(specName + "/v" + specVersion + "." + implVersion + "/fc-rpc-2.0.0"); + expect(version).to.be.match(regex); + }); +}); diff --git a/tests/tests/test-large-ethereum-txns.ts b/tests/tests/test-eth-tx/test-eth-tx-size.ts similarity index 64% rename from tests/tests/test-large-ethereum-txns.ts rename to tests/tests/test-eth-tx/test-eth-tx-size.ts index 70acddf786..76e839a0fe 100644 --- a/tests/tests/test-large-ethereum-txns.ts +++ b/tests/tests/test-eth-tx/test-eth-tx-size.ts @@ -1,26 +1,28 @@ +import "@moonbeam-network/api-augment"; import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import { EXTRINSIC_GAS_LIMIT } from "../util/constants"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -import { customWeb3Request } from "../util/providers"; +import { EXTRINSIC_GAS_LIMIT } from "../../util/constants"; +import { customWeb3Request } from "../../util/providers"; import { ethers } from "ethers"; +import { alith, ALITH_PRIVATE_KEY } from "../../util/accounts"; -describeDevMoonbeam("Large Ethereum Transactions", (context) => { +describeDevMoonbeam("Ethereum Transaction - Large Transaction", (context) => { // function to generate a junk transaction with a specified data size - const generateLargeTxn = async (size) => { + const generateLargeTxn = async (size: number) => { const byte = "FF"; const data = "0x" + byte.repeat(size); - let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); + let signer = new ethers.Wallet(ALITH_PRIVATE_KEY, context.ethers); return await signer.signTransaction({ - from: GENESIS_ACCOUNT, + from: alith.address, to: null, value: "0x0", gasLimit: EXTRINSIC_GAS_LIMIT, gasPrice: 1_000_000_000, data: data, + nonce: await context.web3.eth.getTransactionCount(alith.address), }); }; @@ -28,12 +30,11 @@ describeDevMoonbeam("Large Ethereum Transactions", (context) => { const max_size = (EXTRINSIC_GAS_LIMIT - 21000) / 16 - 2000; it("should accept txns up to known size", async function () { - expect(max_size).to.equal(808875); // our max Ethereum TXN size in bytes + expect(max_size).to.equal(808973); // our max Ethereum TXN size in bytes const tx = await generateLargeTxn(max_size); - const txResults = await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx]); - await context.createBlock(); - const receipt = await context.web3.eth.getTransactionReceipt(txResults.result); + const { result } = await context.createBlock(tx); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.be.false; // this txn is nonsense, but the RPC should accept it }); diff --git a/tests/tests/test-eth-tx/test-eth-tx-types.ts b/tests/tests/test-eth-tx/test-eth-tx-types.ts new file mode 100644 index 0000000000..b8fa91000c --- /dev/null +++ b/tests/tests/test-eth-tx/test-eth-tx-types.ts @@ -0,0 +1,120 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { ALITH_PRIVATE_KEY, baltathar } from "../../util/accounts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransaction, createTransfer } from "../../util/transactions"; + +describeDevMoonbeam( + "Ethereum Transaction - Legacy", + (context) => { + it("should contain valid legacy Ethereum data", async function () { + await context.createBlock( + createTransaction(context, { + privateKey: ALITH_PRIVATE_KEY, + to: baltathar.address, + gas: 12_000_000, + gasPrice: 1_000_000_000, + value: 512, + }) + ); + + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); + let extrinsic = signedBlock.block.extrinsics.find((ex) => ex.method.section == "ethereum") + .args[0] as any; + expect(extrinsic.isLegacy).to.be.true; + expect(extrinsic.asLegacy.toJSON()).to.deep.equal({ + nonce: 0, + gasPrice: 1000000000, + gasLimit: 12000000, + action: { call: baltathar.address.toLowerCase() }, + value: 512, + input: "0x", + signature: { + v: 2597, + r: "0x440c713c1ea8ced9edacac8a33baa89411dca31af33b5c6e2c8e4a3c95112ab4", + s: "0x17c303f32862b65034da593cc0fb1178c915ef7a0b9c221ff3b7d00647b208fb", + }, + }); + }); + }, + "Legacy", + "moonbase", + false +); + +describeDevMoonbeam( + "Ethereum Transaction - EIP2930", + (context) => { + it("should contain valid EIP2930 Ethereum data", async function () { + // Accesslist mock data, it doesn't matter. + await context.createBlock( + createTransfer(context, baltathar.address, 512, { + accessList: [], + }) + ); + + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); + let extrinsic = signedBlock.block.extrinsics.find((ex) => ex.method.section == "ethereum") + .args[0] as any; + expect(extrinsic.isEip2930).to.be.true; + expect(extrinsic.asEip2930.toJSON()).to.deep.equal({ + chainId: 1281, + nonce: 0, + gasPrice: 1000000000, + gasLimit: 21000, + action: { + call: baltathar.address.toLowerCase(), + }, + value: 512, + input: "0x", + accessList: [], + oddYParity: false, + r: "0x6d61b9498e1ddcfa490ef3cb45d0152ad328f7f61d69e61d901a21eab86814c0", + s: "0x716b528435345a640bd31a94e699b10440e418ff0edf62a2874091a682459084", + }); + }); + }, + "EIP2930", + "moonbase", + false +); + +describeDevMoonbeam( + "Ethereum Transaction - EIP1559", + (context) => { + it("should contain valid EIP1559 Ethereum data", async function () { + // Accesslist mock data, it doesn't matter. + await context.createBlock( + createTransfer(context, baltathar.address, 512, { + accessList: [], + }) + ); + + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); + let extrinsic = signedBlock.block.extrinsics.find((ex) => ex.method.section == "ethereum") + .args[0] as any; + expect(extrinsic.isEip1559).to.be.true; + expect(extrinsic.asEip1559.toJSON()).to.deep.equal({ + chainId: 1281, + nonce: 0, + maxPriorityFeePerGas: 0, + maxFeePerGas: 1000000000, + gasLimit: 21000, + action: { + call: baltathar.address.toLowerCase(), + }, + value: 512, + input: "0x", + accessList: [], + oddYParity: false, + r: "0xff6a476d2d8d7b0a23fcb3f1471d1ddd4dec7f3803db7f769aa1ce2575e493ac", + s: "0x4ebec202edd10edfcee87927090105b95d8b58f80550cdf4eda20327f3377ca6", + }); + }); + }, + "EIP1559", + "moonbase", + false +); diff --git a/tests/tests/test-eth-tx/test-test-tx-nonce.ts b/tests/tests/test-eth-tx/test-test-tx-nonce.ts new file mode 100644 index 0000000000..89af778f0a --- /dev/null +++ b/tests/tests/test-eth-tx/test-test-tx-nonce.ts @@ -0,0 +1,65 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith, baltathar } from "../../util/accounts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; + +describeDevMoonbeam("Ethereum Transaction - Initial Nonce", (context) => { + it("should be at 0 before using it", async function () { + expect(await context.web3.eth.getTransactionCount(baltathar.address)).to.eq(0); + }); + + it("should be at 0 for genesis account", async function () { + expect(await context.web3.eth.getTransactionCount(alith.address)).to.eq(0); + }); + + it("should stay at 0 before block is created", async function () { + await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + await createTransfer(context, alith.address, 512), + ]); + expect(await context.web3.eth.getTransactionCount(alith.address)).to.eq(0); + }); +}); + +describeDevMoonbeam("Ethereum Transaction - Previous block nonce", (context) => { + before("Setup: Create block with transfer", async () => { + await context.createBlock(createTransfer(context, baltathar.address, 512)); + }); + it("should be at 0 after transferring", async function () { + expect(await context.web3.eth.getTransactionCount(alith.address, 0)).to.eq(0); + }); +}); + +describeDevMoonbeam("Ethereum Transaction - Pending transaction nonce", (context) => { + before("Setup: Create block with transfer", async () => { + await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + await createTransfer(context, baltathar.address, 512), + ]); + }); + it("should not increase transaction count", async function () { + expect(await context.web3.eth.getTransactionCount(alith.address)).to.eq(0); + }); + it("should not increase transaction count in latest block", async function () { + expect(await context.web3.eth.getTransactionCount(alith.address, "latest")).to.eq(0); + }); + it("should increase transaction count in pending block", async function () { + expect(await context.web3.eth.getTransactionCount(alith.address, "pending")).to.eq(1); + }); +}); + +describeDevMoonbeam("Ethereum Transaction - Transferring Nonce", (context) => { + before("Setup: Sending token", async function () { + await context.createBlock(createTransfer(context, baltathar.address, 512)); + }); + + it("should increase the sender nonce", async function () { + expect(await context.web3.eth.getTransactionCount(alith.address)).to.eq(1); + }); + + it("should not increase the receiver nonce", async function () { + expect(await context.web3.eth.getTransactionCount(baltathar.address)).to.eq(0); + }); +}); diff --git a/tests/tests/test-ethers.ts b/tests/tests/test-ethers/test-ethers.ts similarity index 79% rename from tests/tests/test-ethers.ts rename to tests/tests/test-ethers/test-ethers.ts index c8cc535547..d4e0691850 100644 --- a/tests/tests/test-ethers.ts +++ b/tests/tests/test-ethers/test-ethers.ts @@ -1,8 +1,11 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; import { ethers } from "ethers"; -import { GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { getCompiled } from "../util/contracts"; + +import { ALITH_PRIVATE_KEY } from "../../util/accounts"; +import { getCompiled } from "../../util/contracts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Ethers.js", (context) => { it("should get correct network ids", async function () { @@ -12,8 +15,8 @@ describeDevMoonbeam("Ethers.js", (context) => { describeDevMoonbeam("Ethers.js contract", (context) => { it("should be deployable", async function () { - let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); - const contractData = await getCompiled("TestContract"); + let signer = new ethers.Wallet(ALITH_PRIVATE_KEY, context.ethers); + const contractData = await getCompiled("MultiplyBy7"); const contractFactory = new ethers.ContractFactory( contractData.contract.abi as ethers.ContractInterface, contractData.byteCode, @@ -38,8 +41,8 @@ describeDevMoonbeam("Ethers.js contract", (context) => { describeDevMoonbeam("Ethers.js contract", (context) => { it("should be callable", async function () { - let signer = new ethers.Wallet(GENESIS_ACCOUNT_PRIVATE_KEY, context.ethers); - const contractData = await getCompiled("TestContract"); + let signer = new ethers.Wallet(ALITH_PRIVATE_KEY, context.ethers); + const contractData = await getCompiled("MultiplyBy7"); const contractFactory = new ethers.ContractFactory( contractData.contract.abi as ethers.ContractInterface, contractData.byteCode, @@ -50,11 +53,9 @@ describeDevMoonbeam("Ethers.js contract", (context) => { gasLimit: 1_000_000, gasPrice: 1_000_000_000, }); - console.log("Contract sent"); await context.createBlock(); resolve(await contractPromise); }); - console.log("Contract created"); // Must create the block and then wait, because etherjs will wait until // the contract is mined to return; @@ -64,7 +65,6 @@ describeDevMoonbeam("Ethers.js contract", (context) => { resolve(await callPromise); }); expect(result.toString()).to.equal("21"); - console.log("Contract called"); // Instantiate contract from address const contractFromAddress = new ethers.Contract( @@ -77,6 +77,5 @@ describeDevMoonbeam("Ethers.js contract", (context) => { await contractFromAddress.multiply(3, { gasLimit: 1_000_000, gasPrice: 1_000_000_000 }) ).toString() ).to.equal("21"); - console.log("Contract inner called"); }); }); diff --git a/tests/tests/test-event.ts b/tests/tests/test-event.ts deleted file mode 100644 index c56cc2c5ac..0000000000 --- a/tests/tests/test-event.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { createContract } from "../util/transactions"; -import { GENESIS_ACCOUNT } from "../util/constants"; - -describeDevMoonbeamAllEthTxTypes("Event - Contract", (context) => { - it("should contain event", async function () { - const { rawTx } = await createContract(context, "SingleEventContract", { - from: GENESIS_ACCOUNT, - }); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); - - expect(receipt.logs.length).to.be.eq(1); - expect( - "0x" + receipt.logs[0].topics[1].substring(26, receipt.logs[0].topics[1].length + 1) - ).to.be.eq(GENESIS_ACCOUNT.toLowerCase()); // web3 doesn't checksum - }); -}); diff --git a/tests/tests/test-evm/test-pallet-evm-overflow.ts b/tests/tests/test-evm/test-pallet-evm-overflow.ts new file mode 100644 index 0000000000..cdfbebf6e5 --- /dev/null +++ b/tests/tests/test-evm/test-pallet-evm-overflow.ts @@ -0,0 +1,46 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; +import { ethers } from "ethers"; + +import { alith, ALITH_PRIVATE_KEY, generateKeyringPair } from "../../util/accounts"; +import { GLMR } from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +// A call from root (sudo) can make a transfer directly in pallet_evm +// A signed call cannot make a transfer directly in pallet_evm + +describeDevMoonbeam("Pallet EVM - Transfering", (context) => { + const randomAccount = generateKeyringPair(); + it("should not overflow", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.evm.call( + alith.address, + randomAccount.address, + "0x0", + `0x${(5n * GLMR + 2n ** 128n).toString(16)}`, + "0x5209", + 1_000_000_000n, + "0", + undefined, + [] + ) + ) + ); + + expect( + events.find( + ({ event: { section, method } }) => section == "system" && method == "ExtrinsicSuccess" + ) + ).to.exist; + + const account = await context.polkadotApi.query.system.account(randomAccount.address); + expect(account.data.free.toBigInt()).to.equal(0n); + expect(account.data.reserved.toBigInt()).to.equal(0n); + }); +}); diff --git a/tests/tests/test-evm/test-pallet-evm-transfer.ts b/tests/tests/test-evm/test-pallet-evm-transfer.ts new file mode 100644 index 0000000000..88b4581dc9 --- /dev/null +++ b/tests/tests/test-evm/test-pallet-evm-transfer.ts @@ -0,0 +1,65 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith, baltathar } from "../../util/accounts"; +import { DEFAULT_GENESIS_BALANCE } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +// A call from root (sudo) can make a transfer directly in pallet_evm +// A signed call cannot make a transfer directly in pallet_evm + +describeDevMoonbeam("Pallet EVM - call", (context) => { + it("should fail without sudo", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.evm.call( + alith.address, + baltathar.address, + "0x0", + 100_000_000_000_000_000_000n, + 12_000_000n, + 1_000_000_000n, + "0", + undefined, + [] + ) + ); + expect(events[5].event.method).to.eq("ExtrinsicFailed"); + expect(await context.web3.eth.getBalance(baltathar.address)).to.equal( + DEFAULT_GENESIS_BALANCE.toString() + ); + }); +}); + +describeDevMoonbeam("Pallet EVM - call", (context) => { + it("should succeed with sudo", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.evm.call( + alith.address, + baltathar.address, + "0x0", + 100_000_000_000_000_000_000n, + 12_000_000n, + 1_000_000_000n, + "0", + undefined, + [] + ) + ) + ); + + expect( + events.find( + ({ event: { section, method } }) => section == "system" && method == "ExtrinsicSuccess" + ) + ).to.exist; + expect(await context.web3.eth.getBalance(baltathar.address)).to.equal( + (DEFAULT_GENESIS_BALANCE + 100_000_000_000_000_000_000n).toString() + ); + }); +}); diff --git a/tests/tests/test-existential-deposit.ts b/tests/tests/test-existential-deposit.ts deleted file mode 100644 index fe80d22c32..0000000000 --- a/tests/tests/test-existential-deposit.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { expect } from "chai"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { createTransfer } from "../util/transactions"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_BALANCE, TEST_ACCOUNT } from "../util/constants"; - -describeDevMoonbeamAllEthTxTypes("Existential Deposit", (context) => { - it("should be disabled (no reaped account on 0 balance)", async function () { - await context.createBlock({ - transactions: [ - await createTransfer( - context, - TEST_ACCOUNT, - GENESIS_ACCOUNT_BALANCE - 21000n * 1_000_000_000n, - { - from: GENESIS_ACCOUNT, - gas: 21000, - } - ), - ], - }); - expect(parseInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.eq(0); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(1); - }); -}); - -describeDevMoonbeamAllEthTxTypes("Existential Deposit", (context) => { - it("should be disabled (no reaped account on tiny balance - 1)", async function () { - await context.createBlock({ - transactions: [ - await createTransfer( - context, - TEST_ACCOUNT, - GENESIS_ACCOUNT_BALANCE - 1n - 21000n * 1_000_000_000n, - { - from: GENESIS_ACCOUNT, - gas: 21000, - } - ), - ], - }); - expect(parseInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT))).to.eq(1); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(1); - }); -}); - -describeDevMoonbeam("Existential Deposit", (context) => { - it("checks that existantial deposit is set to zero", async function () { - // Grab existential deposit - let existentialDeposit = (await context.polkadotApi.consts.balances.existentialDeposit) as any; - expect(existentialDeposit.toBigInt()).to.eq(0n); - }); -}); diff --git a/tests/tests/test-ext-eth-data.ts b/tests/tests/test-ext-eth-data.ts deleted file mode 100644 index c92ce81701..0000000000 --- a/tests/tests/test-ext-eth-data.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { expect } from "chai"; -import { GENESIS_ACCOUNT, TEST_ACCOUNT } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createTransfer } from "../util/transactions"; - -describeDevMoonbeam( - "Ethereum Extrinsic (Legacy)", - (context) => { - it("should contain valid legacy Ethereum data", async function () { - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], - }); - - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - let extrinsic = signedBlock.block.extrinsics.find((ex) => ex.method.section == "ethereum") - .args[0] as any; - expect(extrinsic.isLegacy).to.be.true; - expect(extrinsic.asLegacy.toJSON()).to.deep.equal({ - nonce: 0, - gasPrice: 1000000000, - gasLimit: 12000000, - action: { call: TEST_ACCOUNT }, - value: 512, - input: "0x", - signature: { - v: 2598, - r: "0x8c69faf613b9f72dbb029bb5d5acf42742d214c79743507e75fdc8adecdee928", - s: "0x01be4f58ff278ac61125a81a582a717d9c5d6554326c01b878297c6522b12282", - }, - }); - }); - }, - "Legacy", - false -); - -describeDevMoonbeam( - "Ethereum Extrinsic (EIP2930)", - (context) => { - it("should contain valid EIP2930 Ethereum data", async function () { - // Accesslist mock data, it doesn't matter. - await context.createBlock({ - transactions: [ - await createTransfer(context, TEST_ACCOUNT, 512, { - accessList: [ - [ - "0x0000000000000000000000000000000000000000", - ["0x0000000000000000000000000000000000000000000000000000000000000000"], - ], - ], - }), - ], - }); - - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - let extrinsic = signedBlock.block.extrinsics.find((ex) => ex.method.section == "ethereum") - .args[0] as any; - expect(extrinsic.isEip2930).to.be.true; - expect(extrinsic.asEip2930.toJSON()).to.deep.equal({ - chainId: 1281, - nonce: 0, - gasPrice: 1000000000, - gasLimit: 12000000, - action: { - call: TEST_ACCOUNT, - }, - value: 512, - input: "0x", - accessList: [ - { - address: "0x0000000000000000000000000000000000000000", - storageKeys: ["0x0000000000000000000000000000000000000000000000000000000000000000"], - }, - ], - oddYParity: true, - r: "0xb3afc47c1048d0a7d02bd90cfd90dffcdaa26fddc1644df23439b5ce94d19f1a", - s: "0x5cfa40c0c59e5c67fd2dac5bc0934c8d7f8b9970c153c878e2c8a1f23c67a3b9", - }); - }); - }, - "EIP2930", - false -); - -describeDevMoonbeam( - "Ethereum Extrinsic (EIP1559)", - (context) => { - it("should contain valid EIP1559 Ethereum data", async function () { - // Accesslist mock data, it doesn't matter. - await context.createBlock({ - transactions: [ - await createTransfer(context, TEST_ACCOUNT, 512, { - accessList: [ - [ - "0x0000000000000000000000000000000000000000", - ["0x0000000000000000000000000000000000000000000000000000000000000000"], - ], - ], - }), - ], - }); - - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - let extrinsic = signedBlock.block.extrinsics.find((ex) => ex.method.section == "ethereum") - .args[0] as any; - expect(extrinsic.isEip1559).to.be.true; - expect(extrinsic.asEip1559.toJSON()).to.deep.equal({ - chainId: 1281, - nonce: 0, - maxPriorityFeePerGas: 0, - maxFeePerGas: 1000000000, - gasLimit: 12000000, - action: { - call: TEST_ACCOUNT, - }, - value: 512, - input: "0x", - accessList: [ - { - address: "0x0000000000000000000000000000000000000000", - storageKeys: ["0x0000000000000000000000000000000000000000000000000000000000000000"], - }, - ], - oddYParity: false, - r: "0x7477d1ec3db20e2726a69e7aab7e1b6beda2a312222e4db85c316cc796e655bf", - s: "0x53b7ae2a82b3cebaaec6086620bcf683c5171d5669152280f56bdfc9e322f284", - }); - }); - }, - "EIP1559", - false -); diff --git a/tests/tests/test-fees/test-fees-repartition.ts b/tests/tests/test-fees/test-fees-repartition.ts new file mode 100644 index 0000000000..2177774f54 --- /dev/null +++ b/tests/tests/test-fees/test-fees-repartition.ts @@ -0,0 +1,33 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { baltathar } from "../../util/accounts"; +import { TREASURY_ACCOUNT } from "../../util/constants"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; + +describeDevMoonbeamAllEthTxTypes("Fees - Transaction", (context) => { + it("should send 20% of the fees to treasury", async () => { + // Treasury account should be initially empty + expect(await context.web3.eth.getBalance(TREASURY_ACCOUNT, 0)).to.equal(0n.toString()); + + // We make an ethereum transaction, 20% of the fees should go to treasury. + await context.createBlock(createTransfer(context, baltathar.address, 128)); + expect(await context.web3.eth.getBalance(TREASURY_ACCOUNT, 1)).to.equal("4200000000000"); + }); +}); + +describeDevMoonbeamAllEthTxTypes("Fees - Transaction", (context) => { + it("should burn 80% of the fees", async () => { + const originalTotalIssuance = await ( + await context.polkadotApi.query.balances.totalIssuance() + ).toBigInt(); + + // We make an ethereum transaction, 20% of the fees should go to treasury. + await context.createBlock(createTransfer(context, baltathar.address, 128)); + expect(await (await context.polkadotApi.query.balances.totalIssuance()).toBigInt()).to.equal( + originalTotalIssuance - 16800000000000n + ); + }); +}); diff --git a/tests/tests/test-fees/test-length-fees.ts b/tests/tests/test-fees/test-length-fees.ts new file mode 100644 index 0000000000..c74d07123a --- /dev/null +++ b/tests/tests/test-fees/test-length-fees.ts @@ -0,0 +1,121 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { baltathar } from "../../util/accounts"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; + +describeDevMoonbeam( + "Substrate Length Fees - Transaction (Moonbase)", + (context) => { + it("should have low balance transfer fees", async () => { + const fee = await testBalanceTransfer(context); + expect(fee).to.equal(12418651520875n); + }); + }, + "Legacy", + "moonbase" +); + +describeDevMoonbeam( + "Substrate Length Fees - Transaction (Moonbase)", + (context) => { + it("should have expensive runtime-upgrade fees", async () => { + const fee = await testRuntimeUpgrade(context); + expect(fee).to.equal(9226793105473667008n); + }); + }, + "Legacy", + "moonbase" +); + +describeDevMoonbeam( + "Substrate Length Fees - Transaction (Moonriver)", + (context) => { + it("should have low balance transfer fees", async () => { + const fee = await testBalanceTransfer(context); + expect(fee).to.equal(12418651520875n); + }); + }, + "Legacy", + "moonriver" +); + +describeDevMoonbeam( + "Substrate Length Fees - Transaction (Moonriver)", + (context) => { + it("should have expensive runtime-upgrade fees", async () => { + const fee = await testRuntimeUpgrade(context); + expect(fee).to.equal(9226793105473667008n); + }); + }, + "Legacy", + "moonriver" +); + +describeDevMoonbeam( + "Substrate Length Fees - Transaction (Moonbeam)", + (context) => { + it("should have low balance transfer fees", async () => { + const fee = await testBalanceTransfer(context); + expect(fee).to.equal(1241865152087500n); + }); + }, + "Legacy", + "moonbeam" +); + +describeDevMoonbeam( + "Substrate Length Fees - Transaction (Moonbeam)", + (context) => { + it("should have expensive runtime-upgrade fees", async () => { + const fee = await testRuntimeUpgrade(context); + expect(fee).to.equal(922679310547366700800n); + }); + }, + "Legacy", + "moonbeam" +); + +// define our tests here so we can DRY. +// each test submits some txn then measures and returns the fees charged. + +const testBalanceTransfer = async (context: DevTestContext) => { + let initialBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + // send a balance transfer to self and see what our fees end up being + await context.createBlock( + context.polkadotApi.tx.balances.transfer(baltathar.address, 1).signAsync(baltathar) + ); + + let afterBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + const fee = initialBalance - afterBalance; + return fee; +}; + +const testRuntimeUpgrade = async (context: DevTestContext) => { + const initialBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + // generate a mock runtime upgrade hex string + let size = 4194304; // 2MB bytes represented in hex + let hex = "0x" + "F".repeat(size); + + // send an enactAuthorizedUpgrade. we expect this to fail, but we just want to see that it was + // included in a block (not rejected) and was charged based on its length + await context.polkadotApi.tx.parachainSystem.enactAuthorizedUpgrade(hex).signAndSend(baltathar); + await context.createBlock(); + + let afterBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + const fee = initialBalance - afterBalance; + return fee; +}; diff --git a/tests/tests/test-filter/test-filter-api-creation.ts b/tests/tests/test-filter/test-filter-api-creation.ts index 4069945c98..ed22d0f1a4 100644 --- a/tests/tests/test-filter/test-filter-api-creation.ts +++ b/tests/tests/test-filter/test-filter-api-creation.ts @@ -1,20 +1,23 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { customWeb3Request } from "../../util/providers"; import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Filter API", (context) => { it("should be able to create a Log filter", async function () { - const { contract, rawTx } = await createContract(context, "SingleEventContract"); - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "EventEmitter"); + await context.createBlock(rawTx); const createFilter = await customWeb3Request(context.web3, "eth_newFilter", [ { fromBlock: "0x0", toBlock: "latest", address: [ - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3", + "0x970951a12F975E6762482ACA81E57D5A2A4e73F4", ], topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, @@ -25,14 +28,14 @@ describeDevMoonbeamAllEthTxTypes("Filter API", (context) => { describeDevMoonbeamAllEthTxTypes("Filter API - Creating", (context) => { it("should increment filter id", async function () { - const { contract, rawTx } = await createContract(context, "SingleEventContract"); - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "EventEmitter"); + await context.createBlock(rawTx); const createFilter = await customWeb3Request(context.web3, "eth_newFilter", [ { fromBlock: "0x1", toBlock: "0x2", - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + address: "0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3", topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); @@ -42,7 +45,7 @@ describeDevMoonbeamAllEthTxTypes("Filter API - Creating", (context) => { { fromBlock: "0x1", toBlock: "0x2", - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + address: "0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3", topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"], }, ]); diff --git a/tests/tests/test-filter/test-filter-api-pending.ts b/tests/tests/test-filter/test-filter-api-pending.ts index 3e9e24f762..5d95e7051d 100644 --- a/tests/tests/test-filter/test-filter-api-pending.ts +++ b/tests/tests/test-filter/test-filter-api-pending.ts @@ -1,4 +1,7 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { customWeb3Request } from "../../util/providers"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; diff --git a/tests/tests/test-filter/test-filter-api-polling.ts b/tests/tests/test-filter/test-filter-api-polling.ts index 9d07a3d610..b246488f08 100644 --- a/tests/tests/test-filter/test-filter-api-polling.ts +++ b/tests/tests/test-filter/test-filter-api-polling.ts @@ -1,4 +1,7 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { customWeb3Request } from "../../util/providers"; import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract } from "../../util/transactions"; @@ -59,10 +62,10 @@ describeDevMoonbeam("Filter Block API - Polling", (context) => { describeDevMoonbeamAllEthTxTypes("Filter Block API - Polling", (context) => { it("should support filtering created contract", async function () { - const { contract, rawTx } = await createContract(context, "SingleEventContract"); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "EventEmitter"); + const { result } = await context.createBlock(rawTx); - const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); const createFilter = await customWeb3Request(context.web3, "eth_newFilter", [ { diff --git a/tests/tests/test-gas/test-gas-contract-creation.ts b/tests/tests/test-gas/test-gas-contract-creation.ts index c92158cb73..86035f5cac 100644 --- a/tests/tests/test-gas/test-gas-contract-creation.ts +++ b/tests/tests/test-gas/test-gas-contract-creation.ts @@ -1,17 +1,19 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import { GENESIS_ACCOUNT } from "../../util/constants"; +import { alith } from "../../util/accounts"; import { getCompiled } from "../../util/contracts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Estimate Gas - Contract creation", (context) => { it("should return contract creation gas cost", async function () { - const contract = await getCompiled("TestContract"); + const contract = await getCompiled("MultiplyBy7"); expect( await context.web3.eth.estimateGas({ - from: GENESIS_ACCOUNT, + from: alith.address, data: contract.byteCode, }) - ).to.equal(150926); + ).to.equal(152654); }); }); diff --git a/tests/tests/test-gas/test-gas-estimation.ts b/tests/tests/test-gas/test-gas-estimation.ts index c2cf4bd612..eb006112a8 100644 --- a/tests/tests/test-gas/test-gas-estimation.ts +++ b/tests/tests/test-gas/test-gas-estimation.ts @@ -1,14 +1,16 @@ +import "@moonbeam-network/api-augment"; + import { expect, use as chaiUse } from "chai"; import chaiAsPromised from "chai-as-promised"; - -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; - +import { ethers } from "ethers"; import { TransactionReceipt } from "web3-core"; -import { getCompiled } from "../../util/contracts"; -import { GENESIS_ACCOUNT } from "../../util/constants"; +import { Contract } from "web3-eth-contract"; +import { alith, faith } from "../../util/accounts"; +import { getAllContracts, getCompiled } from "../../util/contracts"; +import { expectEVMResult } from "../../util/eth-transactions"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { createContract } from "../../util/transactions"; -import { Contract } from "web3-eth-contract"; chaiUse(chaiAsPromised); @@ -16,8 +18,8 @@ describeDevMoonbeamAllEthTxTypes("Estimate Gas - Multiply", (context) => { let multContract: Contract; before("Setup: Create simple context", async function () { - const { contract, rawTx } = await createContract(context, "TestContract"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "MultiplyBy7"); + await context.createBlock(rawTx); multContract = contract; }); @@ -58,40 +60,135 @@ describeDevMoonbeamAllEthTxTypes("Estimate Gas - Multiply", (context) => { }); }); -describeDevMoonbeamAllEthTxTypes("Estimate Gas - Supplied estimate is sufficient", (context) => { - it("should estimate sufficient gas for creation", async function () { - const contract = await getCompiled("Incrementer"); - // ask RPC for an gas estimate of deploying this contract - const estimate = await context.web3.eth.estimateGas({ - from: GENESIS_ACCOUNT, - data: contract.byteCode, - }); +describeDevMoonbeamAllEthTxTypes("Estimate Gas - Contract estimation", (context) => { + const contractNames = getAllContracts(); - // attempt a transaction with our estimated gas - const { rawTx } = await createContract(context, "Incrementer", { gas: estimate }); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - const receipt: TransactionReceipt = await context.web3.eth.getTransactionReceipt( - txResults[0].result - ); + before("Init build block", async function () { + // Estimation for storage need to happen in a block > than genesis. + // Otherwise contracts that uses block number as storage will remove instead of storing + // (as block.number == H256::default). + await context.createBlock(); + }); - // the transaction should succeed because the estimate should have been sufficient - expect(receipt.status).to.equal(true); + it("should have at least 1 contract to estimate", async function () { + expect(contractNames).length.to.be.at.least(1); }); + + for (const contractName of contractNames) { + it(`should be enough for contract ${contractName}`, async function () { + const contract = await getCompiled(contractName); + const constructorAbi = contract.contract.abi.find((call) => call.type == "constructor"); + // ask RPC for an gas estimate of deploying this contract + + const web3Contract = new context.web3.eth.Contract(contract.contract.abi); + const args = constructorAbi + ? constructorAbi.inputs.map((input) => + input.type == "bool" + ? true + : input.type == "address" + ? faith.address + : input.type == "uint256" + ? `0x${Buffer.from(ethers.utils.randomBytes(32)).toString("hex")}` + : "0x" + ) + : []; + + let estimate: number; + let creationResult: "Revert" | "Succeed"; + try { + estimate = await web3Contract + .deploy({ + arguments: args, + data: contract.byteCode, + }) + .estimateGas(); + creationResult = "Succeed"; + } catch (e) { + if (e == "Error: Returned error: VM Exception while processing transaction: revert") { + estimate = 12_000_000; + creationResult = "Revert"; + } else { + throw e; + } + } + + // attempt a transaction with our estimated gas + const { rawTx } = await createContract(context, contractName, { gas: estimate }, args); + const { result } = await context.createBlock(rawTx); + const receipt: TransactionReceipt = await context.web3.eth.getTransactionReceipt(result.hash); + + expectEVMResult(result.events, creationResult); + expect(receipt.status).to.equal(creationResult == "Succeed"); + }); + } }); describeDevMoonbeamAllEthTxTypes("Estimate Gas - Handle Gas price", (context) => { it("eth_estimateGas 0x0 gasPrice is equivalent to not setting one", async function () { - const contract = await getCompiled("Incrementer"); + const contract = await getCompiled("Incrementor"); let result = await context.web3.eth.estimateGas({ - from: GENESIS_ACCOUNT, + from: alith.address, data: contract.byteCode, gasPrice: "0x0", }); - expect(result).to.equal(152884); + expect(result).to.equal(175831); result = await context.web3.eth.estimateGas({ - from: GENESIS_ACCOUNT, + from: alith.address, data: contract.byteCode, }); - expect(result).to.equal(152884); + expect(result).to.equal(175831); + }); +}); + +describeDevMoonbeamAllEthTxTypes("Estimate Gas - Batch precompile", (context) => { + it("all batch functions should estimate the same cost", async function () { + const { contract: contractProxy, rawTx } = await createContract(context, "Proxy"); + await context.createBlock(rawTx); + const { contract: contractDummy, rawTx: rawTx2 } = await createContract(context, "MultiplyBy7"); + await context.createBlock(rawTx2); + + const proxyInterface = new ethers.utils.Interface((await getCompiled("Proxy")).contract.abi); + const dummyInterface = new ethers.utils.Interface( + (await getCompiled("MultiplyBy7")).contract.abi + ); + + const batchInterface = new ethers.utils.Interface((await getCompiled("Batch")).contract.abi); + + const callParameters = [ + [contractProxy.options.address, contractProxy.options.address], + [], + [ + proxyInterface.encodeFunctionData("call", [ + contractDummy.options.address, + dummyInterface.encodeFunctionData("multiply", [42]), + ]), + proxyInterface.encodeFunctionData("delegateCall", [ + contractDummy.options.address, + dummyInterface.encodeFunctionData("multiply", [42]), + ]), + ], + [], + ]; + + const batchSomeGas = await context.web3.eth.estimateGas({ + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + data: batchInterface.encodeFunctionData("batchSome", callParameters), + }); + + const batchSomeUntilFailureGas = await context.web3.eth.estimateGas({ + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + data: batchInterface.encodeFunctionData("batchSomeUntilFailure", callParameters), + }); + + const batchAllGas = await context.web3.eth.estimateGas({ + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + data: batchInterface.encodeFunctionData("batchAll", callParameters), + }); + + expect(batchSomeGas).to.be.eq(batchAllGas); + expect(batchSomeUntilFailureGas).to.be.eq(batchAllGas); }); }); diff --git a/tests/tests/test-gas/test-gas-estimation2.ts b/tests/tests/test-gas/test-gas-estimation2.ts index dd4cfe5e71..011a63ab7c 100644 --- a/tests/tests/test-gas/test-gas-estimation2.ts +++ b/tests/tests/test-gas/test-gas-estimation2.ts @@ -1,16 +1,17 @@ +import "@moonbeam-network/api-augment"; + import { expect, use as chaiUse } from "chai"; import chaiAsPromised from "chai-as-promised"; import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; - import { createContract } from "../../util/transactions"; chaiUse(chaiAsPromised); describeDevMoonbeamAllEthTxTypes("Estimate Gas - infinite loop", (context) => { it("Should be able to estimate gas of infinite loop call", async function () { - const { contract, rawTx } = await createContract(context, "InfiniteContract"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); await expect( contract.methods.infinite().estimateGas({ diff --git a/tests/tests/test-governance.ts b/tests/tests/test-governance.ts deleted file mode 100644 index 2028e9211f..0000000000 --- a/tests/tests/test-governance.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; -import { ALITH_PRIV_KEY, PROPOSAL_AMOUNT } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { execFromTwoThirdsOfCouncil, execFromAllMembersOfTechCommittee } from "../util/governance"; - -const keyring = new Keyring({ type: "ethereum" }); - -let alith; - -describeDevMoonbeam("Governance - Democracy and Council Collectve", (context) => { - before("Create accounts", async () => { - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able to submit a proposal", async function () { - // Alith submit a proposal - let proposalHash = "0xf3d039875302d49d52fb1af6877a2c46bc55b004afb8130f94dd9d0489ca3185"; - await context.polkadotApi.tx.democracy - .propose(proposalHash, PROPOSAL_AMOUNT) - .signAndSend(alith); - await context.createBlock(); - - // Verify that Alith proposal is registered - const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); - expect(publicPropCount.toHuman()).to.equal("1"); - }); - it("should be able to fast track a referundum with councilCollective pallet", async function () { - // Verify that no referundum is triggered - expect((await context.polkadotApi.query.democracy.referendumCount()).toHuman()).to.equal("0"); - - const proposalHash = "0xf3d039875302d49d52fb1af6877a2c46bc55b004afb8130f94dd9d0489ca3185"; - await execFromTwoThirdsOfCouncil( - context, - context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) - ); - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.democracy.fastTrack(proposalHash, 5, 0) - ); - - // Verify that one referundum is triggered - let referendumCount = await context.polkadotApi.query.democracy.referendumCount(); - expect(referendumCount.toHuman()).to.equal("1"); - }); -}); diff --git a/tests/tests/test-maintenance/test-maintenance-filter.ts b/tests/tests/test-maintenance/test-maintenance-filter.ts new file mode 100644 index 0000000000..3f389f7cfb --- /dev/null +++ b/tests/tests/test-maintenance/test-maintenance-filter.ts @@ -0,0 +1,294 @@ +import "@moonbeam-network/api-augment"; + +import { u128 } from "@polkadot/types"; +import { BN, hexToU8a } from "@polkadot/util"; +import { expect } from "chai"; + +import { alith, baltathar, charleth, generateKeyringPair } from "../../util/accounts"; +import { mockAssetBalance, RELAY_SOURCE_LOCATION } from "../../util/assets"; +import { GLMR } from "../../util/constants"; +import { execTechnicalCommitteeProposal } from "../../util/governance"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; + +const ARBITRARY_ASSET_ID = 42259045809535163221576417993425387648n; +const RELAYCHAIN_ARBITRARY_ADDRESS_1: string = + "0x1111111111111111111111111111111111111111111111111111111111111111"; +const ARBITRARY_VESTING_PERIOD = 201600n; + +describeDevMoonbeam("Maintenance Mode - Filter", (context) => { + before("entering maintenant mode", async () => { + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ); + }); + + it("should forbid transferring tokens", async function () { + await context.createBlock(createTransfer(context, charleth.address, 512)); + expect( + await context + .createBlock(context.polkadotApi.tx.balances.transfer(baltathar.address, 1n * GLMR)) + .catch((e) => e.toString()) + ).to.equal("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); + }); + + it("should allow EVM extrinsic from sudo", async function () { + const randomAccount = generateKeyringPair(); + const { + result: { successful }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.evm.call( + alith.address, + randomAccount.address, + "0x0", + 100n * GLMR, + 12_000_000n, + 1_000_000_000n, + "0", + undefined, + [] + ) + ) + ); + expect(successful).to.be.true; + expect(await context.web3.eth.getBalance(randomAccount.address)).to.equal( + (100n * GLMR).toString() + ); + }); + + it("should forbid crowdloan rewards claim", async () => { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ + [RELAYCHAIN_ARBITRARY_ADDRESS_1, charleth.address, 3_000_000n * GLMR], + ]) + ) + ); + const initBlock = await context.polkadotApi.query.crowdloanRewards.initRelayBlock(); + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.crowdloanRewards.completeInitialization( + initBlock.toBigInt() + ARBITRARY_VESTING_PERIOD + ) + ) + ); + + expect( + await context + .createBlock(context.polkadotApi.tx.crowdloanRewards.claim()) + .catch((e) => e.toString()) + ).to.equal("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); + }); + + it("should forbid assets transfer", async () => { + const balance = context.polkadotApi.createType("Balance", 100000000000000); + const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { + balance: balance, + }); + + const assetId = context.polkadotApi.createType("u128", ARBITRARY_ASSET_ID); + const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { + supply: balance, + }); + + await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, alith.address); + + expect( + await context + .createBlock(context.polkadotApi.tx.assets.transfer(assetId, baltathar.address, 1000)) + .catch((e) => e.toString()) + ).to.equal("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); + }); + + it("should forbid xtokens transfer", async () => { + expect( + await context + .createBlock( + context.polkadotApi.tx.xTokens + .transfer( + "SelfReserve", //enum + 100n * GLMR, + { + V1: { + parents: 1n, + interior: { + X2: [ + { Parachain: 2000n }, + { AccountKey20: { network: "Any", key: hexToU8a(baltathar.address) } }, + ], + }, + }, + }, + 4000000000n + ) + .signAsync(baltathar) + ) + .catch((e) => e.toString()) + ).to.equal("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); + }); + + it("should forbid xcmTransactor to", async () => { + expect( + await context + .createBlock( + context.polkadotApi.tx.xcmTransactor + .transactThroughDerivative("Relay", 0, "SelfReserve", 4000000000n, "") + .signAsync(baltathar) + ) + .catch((e) => e.toString()) + ).to.equal("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); + }); +}); + +describeDevMoonbeam("Maintenance Mode - Filter", (context) => { + let assetId: u128; + before("registering asset", async function () { + const balance = context.polkadotApi.createType("Balance", 100000000000000); + const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { + balance: balance, + }); + + assetId = context.polkadotApi.createType("u128", ARBITRARY_ASSET_ID); + const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { + supply: balance, + }); + + await mockAssetBalance(context, assetBalance, assetDetails, alith, assetId, baltathar.address); + + // setAssetUnitsPerSecond + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(RELAY_SOURCE_LOCATION, 0, 0) + ) + ); + }); + + before("entering maintenant mode", async () => { + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ); + }); + + it("should queue DMP until resuming operations", async function () { + // Send RPC call to inject DMP message + // You can provide a message, but if you don't a downward transfer is the default + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [[]]); + + // Create a block in which the XCM should be executed + await context.createBlock(); + + // Make sure the state does not have ALITH's DOT tokens + let alithBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); + + // Alith balance is 0 + expect(alithBalance.isNone).to.eq(true); + + // turn maintenance off + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() + ); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + // Make sure the state has ALITH's to DOT tokens + const newAlithBalance = ( + await context.polkadotApi.query.assets.account(assetId.toU8a(), alith.address) + ).unwrap(); + + // Alith balance is 10 DOT + expect(newAlithBalance.balance.toBigInt()).to.eq(10000000000000n); + }); +}); + +describeDevMoonbeam("Maintenance Mode - Filter", (context) => { + let assetId: string; + const foreignParaId = 2000; + + before("registering asset", async function () { + const assetMetadata = { + name: "FOREIGN", + symbol: "FOREIGN", + decimals: new BN(12), + isFrozen: false, + }; + + const sourceLocation = { + Xcm: { parents: 1, interior: { X1: { Parachain: foreignParaId } } }, + }; + + // registerForeignAsset + const { + result: { events: eventsRegister }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.registerForeignAsset( + sourceLocation, + assetMetadata, + new BN(1), + true + ) + ) + ); + + assetId = eventsRegister + .find(({ event: { section } }) => section.toString() === "assetManager") + .event.data[0].toHex() + .replace(/,/g, ""); + + // setAssetUnitsPerSecond + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 0, 0) + ) + ); + }); + + before("entering maintenant mode", async () => { + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ); + }); + + it("should queue XCM messages until resuming operations", async function () { + // Send RPC call to inject XCMP message + // You can provide a message, but if you don't a downward transfer is the default + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [foreignParaId, []]); + + // Create a block in which the XCM should be executed + await context.createBlock(); + + // Make sure the state does not have ALITH's foreign asset tokens + let alithBalance = (await context.polkadotApi.query.assets.account( + assetId, + alith.address + )) as any; + // Alith balance is 0 + expect(alithBalance.isNone).to.eq(true); + + // turn maintenance off + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() + ); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + // Make sure the state has ALITH's to foreign assets tokens + alithBalance = ( + await context.polkadotApi.query.assets.account(assetId, alith.address) + ).unwrap(); + + expect(alithBalance.balance.toBigInt()).to.eq(10000000000000n); + }); +}); diff --git a/tests/tests/test-maintenance/test-maintenance-mode.ts b/tests/tests/test-maintenance/test-maintenance-mode.ts new file mode 100644 index 0000000000..fb8bee6266 --- /dev/null +++ b/tests/tests/test-maintenance/test-maintenance-mode.ts @@ -0,0 +1,140 @@ +import "@moonbeam-network/api-augment"; + +import { Result } from "@polkadot/types"; +import { SpRuntimeDispatchError } from "@polkadot/types/lookup"; +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { execTechnicalCommitteeProposal } from "../../util/governance"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Maintenance Mode - Entering Maintenance Mode", (context) => { + it("should succeed with Technical Committee", async function () { + const { events, successful } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ); + expect(successful).to.be.true; + expect(events[3].event.method).to.eq("EnteredMaintenanceMode"); + expect((await context.polkadotApi.query.maintenanceMode.maintenanceMode()).toHuman()).to.equal( + true + ); + }); +}); + +describeDevMoonbeam("Maintenance Mode - Entering Maintenance Mode", (context) => { + it("should fail with half the technical Committee", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode(), + [alith], + 1 + ); + expect((events[1].event.data[1] as Result).asErr.isBadOrigin).to.be + .true; + }); +}); + +describeDevMoonbeam("Maintenance Mode - Entering Maintenance Mode", (context) => { + it("should fail with sudo", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ) + ); + expect((events[1].event.data[0] as Result).asErr.isBadOrigin).to.be + .true; + }); +}); + +describeDevMoonbeam("Maintenance Mode - Entering Maintenance Mode", (context) => { + it("should fail without sudo", async function () { + const { + result: { error }, + } = await context.createBlock(context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode()); + expect(error.name).to.eq("BadOrigin"); + }); +}); + +describeDevMoonbeam("Maintenance Mode - Resuming normal operation", (context) => { + before("entering maintenance mode", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ) + ); + }); + + it("should fail with sudo", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() + ) + ); + expect((events[1].event.data[0] as Result).asErr.isBadOrigin).to.be + .true; + }); +}); + +describeDevMoonbeam("Maintenance Mode - Resuming normal operation", (context) => { + before("entering maintenance mode", async () => { + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ); + }); + + it("should fail without sudo", async function () { + // and try to turn it off + const { + result: { error }, + } = await context.createBlock(context.polkadotApi.tx.maintenanceMode.resumeNormalOperation()); + expect(error.name).to.eq("BadOrigin"); + expect((await context.polkadotApi.query.maintenanceMode.maintenanceMode()).isTrue).to.be.true; + }); +}); + +describeDevMoonbeam("Maintenance Mode - Resuming normal operation", (context) => { + before("entering maintenance mode", async () => { + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ); + }); + + it("should succeed with council", async function () { + const { events, successful } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() + ); + expect(successful).to.be.true; + expect(events[3].event.method).to.eq("NormalOperationResumed"); + expect((await context.polkadotApi.query.maintenanceMode.maintenanceMode()).toHuman()).to.equal( + false + ); + }); +}); + +describeDevMoonbeam("Maintenance Mode - Resuming normal operation", (context) => { + before("entering maintenance mode", async () => { + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() + ); + }); + + it("should fail with half the technical Committee", async function () { + const { events } = await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.maintenanceMode.resumeNormalOperation(), + [alith], + 1 + ); + expect((events[1].event.data[1] as Result).asErr.isBadOrigin).to.be + .true; + }); +}); diff --git a/tests/tests/test-mock-dmp.ts b/tests/tests/test-mock-dmp.ts deleted file mode 100644 index 08ffcd5a5b..0000000000 --- a/tests/tests/test-mock-dmp.ts +++ /dev/null @@ -1,89 +0,0 @@ -import Keyring from "@polkadot/keyring"; -import { KeyringPair } from "@polkadot/keyring/types"; -import { expect } from "chai"; -import { BN } from "@polkadot/util"; - -import { ALITH_PRIV_KEY } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; -import { customWeb3Request } from "../util/providers"; - -// Twelve decimal places in the moonbase relay chain's token -const RELAY_TOKEN = 1_000_000_000_000n; - -const palletId = "0x6D6f646c617373746d6E67720000000000000000"; - -const assetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: new BN(12), - isFrozen: false, -}; - -const sourceLocation = { XCM: { parents: 1, interior: "Here" } }; - -describeDevMoonbeam("Mock XCM - receive downward transfer", (context) => { - let assetId: string; - let alith: KeyringPair; - - before("Should Register an asset and set unit per sec", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 0, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ( - (await context.polkadotApi.query.assets.asset(assetId)) as any - ).unwrap(); - expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); - }); - - it("Should receive a downward transfer of 10 DOTs to Alith", async function () { - // Send RPC call to inject XCM message - // You can provide a message, but if you don't a downward transfer is the default - await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [[]]); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has ALITH's to DOT tokens - let alith_dot_balance = ( - (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any - ) - .unwrap() - ["balance"].toBigInt(); - - expect(alith_dot_balance).to.eq(10n * RELAY_TOKEN); - }); -}); diff --git a/tests/tests/test-node-rpc/test-node-rpc-peer.ts b/tests/tests/test-node-rpc/test-node-rpc-peer.ts new file mode 100644 index 0000000000..c01f262702 --- /dev/null +++ b/tests/tests/test-node-rpc/test-node-rpc-peer.ts @@ -0,0 +1,22 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Node - RPC", (context) => { + it("should report peer count in hex", async function () { + // this tests that the "net_peerCount" response comes back in hex and not decimal. + // this seems a bit inconsistent amongst Ethereum APIs, but hex seems to be most common. + + // related: frontier commits 677548c and 78fb3bc + + const result = await customWeb3Request(context.web3, "net_peerCount", []); + + // TODO: this is really just testing that the result comes back as a string, not that it's + // expressed in hex (as opposed to decimal) + expect(result.result).to.be.equal("0x0"); + expect(typeof result.result).to.be.equal("string"); + }); +}); diff --git a/tests/tests/test-nonce.ts b/tests/tests/test-nonce.ts deleted file mode 100644 index 1aaafbe86d..0000000000 --- a/tests/tests/test-nonce.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { expect } from "chai"; - -import { GENESIS_ACCOUNT, TEST_ACCOUNT } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createTransfer } from "../util/transactions"; -import { customWeb3Request } from "../util/providers"; - -describeDevMoonbeam("Nonce - Initial", (context) => { - it("should be at 0 before using it", async function () { - expect(await context.web3.eth.getTransactionCount(TEST_ACCOUNT)).to.eq(0); - }); - - it("should be at 0 for genesis account", async function () { - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(0); - }); - - it("should stay at 0 before block is created", async function () { - await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - await createTransfer(context, GENESIS_ACCOUNT, 512), - ]); - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(0); - }); -}); - -describeDevMoonbeam("Nonce - Previous block", (context) => { - before("Setup: Create block with transfer", async () => { - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], - }); - }); - it("should be at 0 after transferring", async function () { - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, 0)).to.eq(0); - }); -}); - -describeDevMoonbeam("Nonce - Pending transaction", (context) => { - before("Setup: Create block with transfer", async () => { - await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - await createTransfer(context, TEST_ACCOUNT, 512), - ]); - }); - it("should not increase transaction count", async function () { - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(0); - }); - it("should not increase transaction count in latest block", async function () { - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "latest")).to.eq(0); - }); - it("should increase transaction count in pending block", async function () { - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT, "pending")).to.eq(1); - }); -}); - -describeDevMoonbeam("Nonce - Transferring", (context) => { - before("Setup: Sending token", async function () { - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], - }); - }); - - it("should increase the sender nonce", async function () { - expect(await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT)).to.eq(1); - }); - - it("should not increase the receiver nonce", async function () { - expect(await context.web3.eth.getTransactionCount(TEST_ACCOUNT)).to.eq(0); - }); -}); diff --git a/tests/tests/test-pallet-evm-transfer.ts b/tests/tests/test-pallet-evm-transfer.ts deleted file mode 100644 index 9dd0408dc7..0000000000 --- a/tests/tests/test-pallet-evm-transfer.ts +++ /dev/null @@ -1,69 +0,0 @@ -import Keyring from "@polkadot/keyring"; -import { expect } from "chai"; -import { ALITH, ALITH_PRIV_KEY, TEST_ACCOUNT } from "../util/constants"; - -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; - -// A call from root (sudo) can make a transfer directly in pallet_evm -// A signed call cannot make a transfer directly in pallet_evm - -describeDevMoonbeam("Pallet EVM transfer - no sudo", (context) => { - let events; - before("Send a simple transfer with pallet evm", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - ({ events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.evm.call( - ALITH, - TEST_ACCOUNT, - "0x0", - 100_000_000_000_000_000_000n, - 12_000_000n, - 1_000_000_000n, - 0, - undefined, - [] - ) - )); - }); - - it("should fail without sudo", async function () { - expect(events[5].toHuman().method).to.eq("ExtrinsicFailed"); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("0"); - }); -}); -describeDevMoonbeam("Pallet EVM transfer - with sudo", (context) => { - let events; - before("Send a simple transfer with pallet evm with sudo", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - ({ events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.evm.call( - ALITH, - TEST_ACCOUNT, - "0x0", - 100_000_000_000_000_000_000n, - 12_000_000n, - 1_000_000_000n, - 0, - undefined, - [] - ) - ) - )); - }); - - it("should succeed with sudo", async function () { - expect(events[13].toHuman().method).to.eq("ExtrinsicSuccess"); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal( - 100_000_000_000_000_000_000n.toString() - ); - }); -}); diff --git a/tests/tests/test-pallet-maintenance-mode.ts b/tests/tests/test-pallet-maintenance-mode.ts deleted file mode 100644 index b679cb4c21..0000000000 --- a/tests/tests/test-pallet-maintenance-mode.ts +++ /dev/null @@ -1,619 +0,0 @@ -import Keyring from "@polkadot/keyring"; -import { expect } from "chai"; -import { BN, hexToU8a } from "@polkadot/util"; -import { KeyringPair } from "@polkadot/keyring/types"; -import { - ALITH, - ALITH_PRIV_KEY, - BALTATHAR, - BALTATHAR_PRIV_KEY, - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, - GLMR, - relayChainAddress, - TEST_ACCOUNT, -} from "../util/constants"; -import { execFromAllMembersOfTechCommittee } from "../util/governance"; - -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; -import { createTransfer } from "../util/transactions"; -import { VESTING_PERIOD } from "./test-crowdloan"; -import { mockAssetBalance } from "./test-precompile/test-precompile-assets-erc20"; -import { customWeb3Request } from "../util/providers"; - -export const expectError = (fun): Promise => { - return new Promise(async (resolve) => { - try { - await fun(); - } catch (e) { - resolve(e.toString()); - } - }); -}; - -// A call from root (sudo) can make a transfer directly in pallet_evm -// A signed call cannot make a transfer directly in pallet_evm - -describeDevMoonbeam("Pallet Maintenance Mode - normal call shouldnt work", (context) => { - let events; - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - ({ events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - )); - }); - - it("should fail without sudo", async function () { - expect(events[5].toHuman().method).to.eq("ExtrinsicFailed"); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("0"); - }); -}); -describeDevMoonbeam("Pallet Maintenance Mode - with sudo shouldn't work", (context) => { - let events; - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - ({ events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ) - )); - }); - - it("shouldn't succeed with sudo", async function () { - expect(events[3].toHuman().method).to.eq("ExtrinsicSuccess"); - expect((await context.polkadotApi.query.maintenanceMode.maintenanceMode()).toHuman()).to.equal( - false - ); - }); -}); - -describeDevMoonbeam("Pallet Maintenance Mode - with council should work", (context) => { - let events; - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - // go into Maintenance - ({ events } = await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - )); - }); - - it("should succeed with council", async function () { - expect(events[3].toHuman().method).to.eq("EnteredMaintenanceMode"); - expect((await context.polkadotApi.query.maintenanceMode.maintenanceMode()).toHuman()).to.equal( - true - ); - }); -}); -// Exit -describeDevMoonbeam("Pallet Maintenance Mode - exit mode", (context) => { - let events; - before("Try turning maintenance mode on", async () => { - // go into Maintenance - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - // exit maintenance - ({ events } = await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() - )); - }); - - it("should succeed with council", async function () { - expect(events[3].toHuman().method).to.eq("NormalOperationResumed"); - expect((await context.polkadotApi.query.maintenanceMode.maintenanceMode()).toHuman()).to.equal( - false - ); - }); -}); -describeDevMoonbeam( - "Pallet Maintenance Mode - exit mode - make sure transfers are allowed again", - (context) => { - before("Try turning maintenance mode on", async () => { - // go into Maintenance - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - // exit maintenance - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() - ); - - //try transfer - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], - }); - }); - - it("shouldn't succeed with maintenance on", async function () { - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("512"); - }); - } -); - -describeDevMoonbeam("Pallet Maintenance Mode - normal exit call shouldnt work", (context) => { - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // go into Maintenance - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - // and try to turn it off - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() - ); - }); - - it("should fail without sudo", async function () { - expect((await context.polkadotApi.query.maintenanceMode.maintenanceMode()).toHuman()).to.equal( - true - ); - }); -}); - -// pallets that should be desactivated with maintenance mode - -describeDevMoonbeam( - "Pallet Maintenance Mode - no balance transfer with maintenance mode", - (context) => { - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 512)], - }); - }); - - it("shouldn't succeed with maintenance on", async function () { - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("0"); - }); - } -); - -describeDevMoonbeam( - "Pallet Maintenance Mode - evm transfer with maintenance mode works with sudo", - (context) => { - let events; - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - - ({ events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.evm.call( - ALITH, - TEST_ACCOUNT, - "0x0", - 100_000_000_000_000_000_000n, - 12_000_000n, - 1_000_000_000n, - 0n, - undefined, - [] - ) - ) - )); - }); - - it("should succeed with maintenance on but with sudo", async function () { - expect(events[11].toHuman().method).to.eq("ExtrinsicSuccess"); - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal( - 100_000_000_000_000_000_000n.toString() - ); - }); - } -); - -describeDevMoonbeam( - "Pallet Maintenance Mode - no crowdloanRewards claim with maintenance mode", - (context) => { - let genesisAccount; - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - - // turn maintenance on - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - - //init - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.initializeRewardVec([ - [relayChainAddress, GENESIS_ACCOUNT, 3_000_000n * GLMR], - ]) - ) - .signAndSend(alith); - await context.createBlock(); - - let initBlock = (await context.polkadotApi.query.crowdloanRewards.initRelayBlock()) as any; - - // Complete initialization - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.crowdloanRewards.completeInitialization( - initBlock.toBigInt() + VESTING_PERIOD - ) - ) - .signAndSend(alith); - await context.createBlock(); - }); - - it("shouldn't succeed with maintenance on", async function () { - const error = await expectError(async () => { - await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.crowdloanRewards.claim() - ); - }); - expect(error).to.eq("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); - }); - } -); - -describeDevMoonbeam( - "Pallet Maintenance Mode - no assets transfer with maintenance mode", - (context) => { - let sudoAccount, assetId; - before("Try turning maintenance mode on", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // turn maintenance on - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = context.polkadotApi.createType("Balance", 100000000000000); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - }); - - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); - }); - - it("shouldn't succeed with maintenance on", async function () { - const error = await expectError(async () => { - await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.assets.transfer(assetId, BALTATHAR, 1000) - ); - }); - expect(error).to.eq("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); - }); - } -); - -const HUNDRED_UNITS = 100000000000000; - -describeDevMoonbeam( - "Pallet Maintenance Mode - no xtokens transfer with maintenance mode", - (context) => { - let baltathar: KeyringPair; - before("First send relay chain asset to parachain", async function () { - const keyring = new Keyring({ type: "ethereum" }); - baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // turn maintenance on - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - }); - - it("shouldn't succeed with maintenance on", async function () { - const error = await expectError(async () => { - await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.xTokens.transfer( - "SelfReserve", //enum - new BN(HUNDRED_UNITS), - { - V1: { - parents: new BN(1), - interior: { - X2: [ - { Parachain: new BN(2000) }, - { AccountKey20: { network: "Any", key: hexToU8a(BALTATHAR) } }, - ], - }, - }, - }, - new BN(4000000000) - ) - ); - }); - expect(error).to.eq("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); - }); - } -); - -describeDevMoonbeam( - "Pallet Maintenance Mode - no xcmTransactor transfer with maintenance mode", - (context) => { - let sudoAccount; - before("First send relay chain asset to parachain", async function () { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // turn maintenance on - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - }); - - it("should succeed with maintenance on", async function () { - await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo(context.polkadotApi.tx.xcmTransactor.register(ALITH, 0)) - ); - const resp = await context.polkadotApi.query.xcmTransactor.indexToAccount(0); - expect(resp.toString()).to.eq(ALITH); - }); - } -); - -describeDevMoonbeam( - "Pallet Maintenance Mode - no xcmTransactor transfer with maintenance mode", - (context) => { - let sudoAccount; - before("First send relay chain asset to parachain", async function () { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // turn maintenance on - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - }); - - it("should succeedn't with maintenance on", async function () { - const error = await expectError(async () => { - await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.xcmTransactor.transactThroughDerivative( - "Relay", - 0, - "SelfReserve", - new BN(4000000000), - [] - ) - ); - }); - expect(error).to.eq("RpcError: 1010: Invalid Transaction: Transaction call is not expected"); - }); - } -); - -describeDevMoonbeam( - "Pallet Maintenance Mode - dmp messages should queue in maintenance mode", - (context) => { - let sudoAccount, assetId; - before("Register asset and go to maintenance", async function () { - const assetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: new BN(12), - isFrozen: false, - }; - - const sourceLocation = { XCM: { parents: 1, interior: "Here" } }; - - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 0, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // turn maintenance on - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - }); - - it("should queue xcm with maintenance mode and execute when off", async function () { - // Send RPC call to inject DMP message - // You can provide a message, but if you don't a downward transfer is the default - await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [[]]); - - // Create a block in which the XCM should be executed - await context.createBlock(); - - // Make sure the state does not have ALITH's DOT tokens - let alithBalance = (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any; - - // Alith balance is 0 - expect(alithBalance.isNone).to.eq(true); - - // turn maintenance off - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() - ); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has ALITH's to DOT tokens - alithBalance = ((await context.polkadotApi.query.assets.account(assetId, ALITH)) as any) - .unwrap() - ["balance"].toBigInt(); - - // Alith balance is 10 DOT - expect(alithBalance).to.eq(BigInt(10000000000000)); - }); - } -); - -describeDevMoonbeam( - "Pallet Maintenance Mode - xcmp messages should queue in maintenance mode", - (context) => { - let sudoAccount, assetId, foreignParaId; - before("Register asset and go to maintenance", async function () { - foreignParaId = 2000; - - const assetMetadata = { - name: "FOREIGN", - symbol: "FOREIGN", - decimals: new BN(12), - isFrozen: false, - }; - - const sourceLocation = { - XCM: { parents: 1, interior: { X1: { Parachain: foreignParaId } } }, - }; - - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 0, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // turn maintenance on - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.enterMaintenanceMode() - ); - }); - - it("should queue xcm with maintenance mode and execute when off", async function () { - // Send RPC call to inject XCMP message - // You can provide a message, but if you don't a downward transfer is the default - await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [foreignParaId, []]); - - // Create a block in which the XCM should be executed - await context.createBlock(); - - // Make sure the state does not have ALITH's foreign asset tokens - let alithBalance = (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any; - // Alith balance is 0 - expect(alithBalance.isNone).to.eq(true); - - // turn maintenance off - await execFromAllMembersOfTechCommittee( - context, - context.polkadotApi.tx.maintenanceMode.resumeNormalOperation() - ); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has ALITH's to foreign assets tokens - alithBalance = ( - (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any - ).unwrap()["balance"]; - - expect(alithBalance.toBigInt()).to.eq(BigInt(10000000000000)); - }); - } -); diff --git a/tests/tests/test-parachain-bond.ts b/tests/tests/test-parachain-bond.ts deleted file mode 100644 index d9801ba75e..0000000000 --- a/tests/tests/test-parachain-bond.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { expect } from "chai"; -import { Keyring } from "@polkadot/api"; -import { KeyringPair } from "@polkadot/keyring/types"; -import { - GENESIS_ACCOUNT, - ALITH_PRIV_KEY, - GENESIS_ACCOUNT_PRIVATE_KEY, - ZERO_ADDRESS, -} from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; - -const TWENTY_PERCENT = 20; -const TWENTY_PERCENT_STRING = "20.00%"; - -describeDevMoonbeam("Staking - Parachain Bond - genesis and setParachainBondAccount", (context) => { - let sudoAccount: KeyringPair; - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - it("should have right parachain bond in genesis", async function () { - const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); - expect(parachainBondInfo.toHuman()["percent"]).to.equal("30.00%"); - }); - - it("should be able set the parachain bond with sudo", async function () { - // should be able to register the genesis account for reward - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT)) - .signAndSend(sudoAccount); - await context.createBlock(); - const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(GENESIS_ACCOUNT); - expect(parachainBondInfo.toHuman()["percent"]).to.equal("30.00%"); - }); -}); - -describeDevMoonbeam("Staking - Parachain Bond - no sudo on setParachainBondAccount", (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should NOT be able set the parachain bond if NOT sudo", async function () { - // should be able to register the genesis account for reward - try { - await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.authorMapping.setParachainBondAccount(GENESIS_ACCOUNT) - ); - } catch (e) { - // NB: This test used to check events for ExtrinsicFailed, - // but now the api prevents the call from happening - expect(e.toString().substring(0, 90)).to.eq( - "TypeError: context.polkadotApi.tx.authorMapping.setParachainBondAccount is not a function" - ); - } - }); -}); - -describeDevMoonbeam("Staking - Parachain Bond - setParachainBondReservePercent", (context) => { - let sudoAccount: KeyringPair; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - - it("should be able set the parachain bond reserve percent with sudo", async function () { - // should be able to register the genesis account - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.parachainStaking.setParachainBondReservePercent(TWENTY_PERCENT)) - .signAndSend(sudoAccount); - await context.createBlock(); - const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); - expect(parachainBondInfo.toHuman()["percent"]).to.equal(TWENTY_PERCENT_STRING); - }); -}); - -describeDevMoonbeam( - "Staking - Parachain Bond - no sudo on setParachainBondReservePercent", - (context) => { - let genesisAccount: KeyringPair, sudoAccount: KeyringPair; - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - it("should NOT be able set the parachain bond reserve percent without sudo", async function () { - // should be able to register the genesis account for reward - try { - await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.authorMapping.setParachainBondReservePercent(TWENTY_PERCENT) - ); - } catch (e) { - // NB: This test used to check events for ExtrinsicFailed, - // but now the api prevents the call from happening - expect(e.toString().substring(0, 88)).to.eq( - "TypeError: context.polkadotApi.tx.authorMapping.setParachainBondReservePercent is not a " - ); - } - }); - } -); diff --git a/tests/tests/test-polkadot-api.ts b/tests/tests/test-polkadot-js/test-polkadot-api.ts similarity index 70% rename from tests/tests/test-polkadot-api.ts rename to tests/tests/test-polkadot-js/test-polkadot-api.ts index 56aeb5819a..2ae911d0a3 100644 --- a/tests/tests/test-polkadot-api.ts +++ b/tests/tests/test-polkadot-js/test-polkadot-api.ts @@ -1,10 +1,10 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { AnyTuple, IEvent } from "@polkadot/types/types"; -import { GENESIS_ACCOUNT, TEST_ACCOUNT } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import Keyring from "@polkadot/keyring"; -import { GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; +import { alith, generateKeyringPair } from "../../util/accounts"; +import { GLMR } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Polkadot API - Header", (context) => { it("should return genesis block", async function () { @@ -30,23 +30,23 @@ describeDevMoonbeam("Polkadot API", (context) => { }); describeDevMoonbeam("Polkadot API - Transfers", (context) => { + const randomAccount = generateKeyringPair(); before("Setup: Create empty block with balance.transfer", async () => { - const keyring = new Keyring({ type: "ethereum" }); - const genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - await context.polkadotApi.tx.balances.transfer(TEST_ACCOUNT, 123).signAndSend(genesisAccount); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.balances.transfer(randomAccount.address, 2n * GLMR) + ); }); it("should be stored on chain", async function () { - expect(await context.web3.eth.getBalance(TEST_ACCOUNT)).to.equal("123"); + expect(BigInt(await context.web3.eth.getBalance(randomAccount.address))).to.equal(2n * GLMR); }); it("should appear in extrinsics", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - // Expecting 4 extrinsics so far: - // timestamp, author, the parachain validation data and the balances transfer. - expect(signedBlock.block.extrinsics).to.be.of.length(4); + // Expecting 5 extrinsics so far: + // timestamp, author, the parachain validation data, randomness, and the balances transfer. + expect(signedBlock.block.extrinsics).to.be.of.length(5); signedBlock.block.extrinsics.forEach((ex, index) => { const { @@ -64,10 +64,13 @@ describeDevMoonbeam("Polkadot API - Transfers", (context) => { expect(message.substring(0, 42)).to.eq(`authorInherent.kickOffAuthorshipValidation`); break; case 3: - expect(message).to.eq( - `balances.transfer(0x1111111111111111111111111111111111111111, 123)` + expect(message.toLocaleLowerCase()).to.eq(`randomness.setbaberandomnessresults()`); + break; + case 4: + expect(message.toLocaleLowerCase()).to.eq( + `balances.transfer(${randomAccount.address.toLocaleLowerCase()}, 2000000000000000000)` ); - expect(ex.signer.toString()).to.eq(GENESIS_ACCOUNT); + expect(ex.signer.toString()).to.eq(alith.address); break; default: throw new Error(`Unexpected extrinsic: ${message}`); @@ -77,12 +80,11 @@ describeDevMoonbeam("Polkadot API - Transfers", (context) => { it("should appear in events", async function () { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - const allRecords = (await context.polkadotApi.query.system.events.at( - signedBlock.block.header.hash - )) as any; + const apiAt = await context.polkadotApi.at(signedBlock.block.header.hash); + const allRecords = await apiAt.query.system.events(); // map between the extrinsics and events - signedBlock.block.extrinsics.forEach(({ method: { method, section } }, index) => { + signedBlock.block.extrinsics.forEach((_, index) => { // filter the specific events based on the phase and then the // index of our extrinsic in the block const events = allRecords @@ -90,22 +92,22 @@ describeDevMoonbeam("Polkadot API - Transfers", (context) => { .map(({ event }) => event); switch (index) { - // First 3 events: + // First 4 events: // timestamp.set:: system.ExtrinsicSuccess // parachainUpgrade.setValidationData:: system.ExtrinsicSuccess // authorInherent.setAuthor:: system.ExtrinsicSuccess + // randomness.setBabeRandomnessResults:: system.ExtrinsicSuccess case 0: case 1: case 2: + case 3: expect(events).to.be.of.length(1); expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[0])).to.be.true; break; - // Fourth event: balances.transfer:: system.NewAccount, balances.Endowed, balances.Transfer, + // Fifth event: balances.transfer:: system.NewAccount, balances.Endowed, balances.Transfer, // system.ExtrinsicSuccess - case 3: - events.map((event, index) => { - console.log(`event[${index}].method: ${event.method}`); - }); + case 4: + console.log(events.map((e) => `${e.section}.${e.method}`).join(" - ")); expect(events).to.be.of.length(9); expect(context.polkadotApi.events.system.NewAccount.is(events[1])).to.be.true; expect(context.polkadotApi.events.balances.Endowed.is(events[2])).to.be.true; diff --git a/tests/tests/test-polkadot-js/test-polkadot-chain-info.ts b/tests/tests/test-polkadot-js/test-polkadot-chain-info.ts new file mode 100644 index 0000000000..6e74debb79 --- /dev/null +++ b/tests/tests/test-polkadot-js/test-polkadot-chain-info.ts @@ -0,0 +1,16 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Web3Api Information", (context) => { + it("should include client version", async function () { + const version = await context.web3.eth.getNodeInfo(); + let specName: string = await context.polkadotApi.runtimeVersion.specName.toString(); + let specVersion: string = await context.polkadotApi.runtimeVersion.specVersion.toString(); + let implVersion: string = await context.polkadotApi.runtimeVersion.implVersion.toString(); + let regex = new RegExp(specName + "/v" + specVersion + "." + implVersion + "/fc-rpc-2.0.0"); + expect(version).to.be.match(regex); + }); +}); diff --git a/tests/tests/test-precompile/test-precompile-assets-erc20.ts b/tests/tests/test-precompile/test-precompile-assets-erc20.ts index 049fc5eeed..8522af69f0 100644 --- a/tests/tests/test-precompile/test-precompile-assets-erc20.ts +++ b/tests/tests/test-precompile/test-precompile-assets-erc20.ts @@ -1,99 +1,24 @@ +import "@moonbeam-network/api-augment"; + +import { u128 } from "@polkadot/types"; +import { BN, bnToHex, numberToHex, stringToHex } from "@polkadot/util"; import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { customWeb3Request } from "../../util/providers"; -import { - GENESIS_ACCOUNT, - ALITH, - BALTATHAR, - ALITH_PRIV_KEY, - CHARLETH, - BALTATHAR_PRIV_KEY, -} from "../../util/constants"; -import { blake2AsU8a, xxhashAsU8a } from "@polkadot/util-crypto"; -import { BN, hexToU8a, bnToHex, u8aToHex, stringToHex, numberToHex } from "@polkadot/util"; -import Keyring from "@polkadot/keyring"; -import { getCompiled } from "../../util/contracts"; import { ethers } from "ethers"; -import { createContract, createTransaction } from "../../util/transactions"; - -const sourceLocationRelayAssetType = { XCM: { parents: 1, interior: "Here" } }; - -interface AssetMetadata { - name: string; - symbol: string; - decimals: BN; - isFrozen: boolean; -} - -const relayAssetMetadata: AssetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: new BN(12), - isFrozen: false, -}; -export async function mockAssetBalance( - context, - assetBalance, - assetDetails, - sudoAccount, - assetId, - account -) { - // Register the asset - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - sourceLocationRelayAssetType, - relayAssetMetadata, - new BN(1), - true - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let assets = ( - (await context.polkadotApi.query.assetManager.assetIdType(assetId)) as any - ).toJSON(); - // make sure we created it - expect(assets["xcm"]["parents"]).to.equal(1); - - // Get keys to modify balance - let module = xxhashAsU8a(new TextEncoder().encode("Assets"), 128); - let account_key = xxhashAsU8a(new TextEncoder().encode("Account"), 128); - let blake2concatAssetId = new Uint8Array([ - ...blake2AsU8a(assetId.toU8a(), 128), - ...assetId.toU8a(), - ]); - - let blake2concatAccount = new Uint8Array([ - ...blake2AsU8a(hexToU8a(account), 128), - ...hexToU8a(account), - ]); - let overallAccountKey = new Uint8Array([ - ...module, - ...account_key, - ...blake2concatAssetId, - ...blake2concatAccount, - ]); - - // Get keys to modify total supply - let assetKey = xxhashAsU8a(new TextEncoder().encode("Asset"), 128); - let overallAssetKey = new Uint8Array([...module, ...assetKey, ...blake2concatAssetId]); - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.system.setStorage([ - [u8aToHex(overallAccountKey), u8aToHex(assetBalance.toU8a())], - [u8aToHex(overallAssetKey), u8aToHex(assetDetails.toU8a())], - ]) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - return; -} +import { alith, baltathar, charleth } from "../../util/accounts"; +import { mockAssetBalance } from "../../util/assets"; +import { getCompiled } from "../../util/contracts"; +import { web3EthCall } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { + ALITH_TRANSACTION_TEMPLATE, + BALTATHAR_TRANSACTION_TEMPLATE, + createContract, + createTransaction, +} from "../../util/transactions"; const ADDRESS_ERC20 = "0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080"; +const ASSET_ID = new BN("42259045809535163221576417993425387648"); const SELECTORS = { balanceOf: "70a08231", totalSupply: "18160ddd", @@ -104,161 +29,102 @@ const SELECTORS = { logApprove: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", }; -const GAS_PRICE = "0x" + (1_000_000_000).toString(16); + +const ERC20_CONTRACT = getCompiled("ERC20Instance"); +const ERC20_INTERFACE = new ethers.utils.Interface(ERC20_CONTRACT.contract.abi); describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace; + let assetId: u128; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet // And we need relay tokens for issuing a transaction to be executed in the relay const balance = new BN("100000000000000"); const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { balance: balance, }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); + assetId = context.polkadotApi.createType("u128", ASSET_ID); const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { supply: balance, }); - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); - - let beforeAssetBalance = ( - (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any - ).balance as BN; + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + true + ); - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "ERC20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "ERC20Instance"); + await context.createBlock(rawTx); }); it("allows to call name", async function () { - let data = iFace.encodeFunctionData( - // action - "name", - [] + expect( + ( + await web3EthCall(context.web3, { + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("name", []), + }) + ).result + ).equals( + numberToHex(32, 256) + + numberToHex(3, 256).slice(2) + + stringToHex("DOT").slice(2).padEnd(64, "0") ); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }, - ]); - - let expected = stringToHex("DOT"); - let offset = numberToHex(32).slice(2).padStart(64, "0"); - let length = numberToHex(3).slice(2).padStart(64, "0"); - // Bytes are padded at the end - let expected_hex = expected.slice(2).padEnd(64, "0"); - expect(tx_call.result).equals("0x" + offset + length + expected_hex); }); it("allows to call symbol", async function () { - let data = iFace.encodeFunctionData( - // action - "symbol", - [] + expect( + ( + await web3EthCall(context.web3, { + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("symbol", []), + }) + ).result + ).equals( + numberToHex(32, 256) + + numberToHex(3, 256).slice(2) + + stringToHex("DOT").slice(2).padEnd(64, "0") ); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }, - ]); - - let expected = stringToHex("DOT"); - let offset = numberToHex(32).slice(2).padStart(64, "0"); - let length = numberToHex(3).slice(2).padStart(64, "0"); - // Bytes are padded at the end - let expected_hex = expected.slice(2).padEnd(64, "0"); - expect(tx_call.result).equals("0x" + offset + length + expected_hex); }); it("allows to call decimals", async function () { - let data = iFace.encodeFunctionData( - // action - "decimals", - [] - ); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }, - ]); - - let expected = "0x" + numberToHex(12).slice(2).padStart(64, "0"); - expect(tx_call.result).equals(expected); + expect( + ( + await web3EthCall(context.web3, { + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("decimals", []), + }) + ).result + ).equals(numberToHex(12, 256)); }); it("allows to call getBalance", async function () { - let data = iFace.encodeFunctionData( - // action - "balanceOf", - [ALITH] - ); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }, - ]); - let amount = new BN(100000000000000); - - let amount_hex = "0x" + bnToHex(amount).slice(2).padStart(64, "0"); - expect(tx_call.result).equals(amount_hex); + expect( + ( + await web3EthCall(context.web3, { + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("balanceOf", [alith.address]), + }) + ).result + ).equals(bnToHex(100000000000000n, 256)); }); it("allows to call totalSupply", async function () { - let data = iFace.encodeFunctionData( - // action - "totalSupply", - [] - ); - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }, - ]); - - let amount = new BN(100000000000000); - - let amount_hex = "0x" + bnToHex(amount).slice(2).padStart(64, "0"); - expect(tx_call.result).equals(amount_hex); + expect( + ( + await web3EthCall(context.web3, { + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("totalSupply", []), + }) + ).result + ).equals(bnToHex(100000000000000n, 256)); }); }, true @@ -267,10 +133,8 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace; + let assetId: u128; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet // And we need relay tokens for issuing a transaction to be executed in the relay const balance = context.polkadotApi.createType("Balance", 100000000000000); @@ -278,78 +142,60 @@ describeDevMoonbeamAllEthTxTypes( balance: balance, }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { supply: balance, }); + assetId = context.polkadotApi.createType("u128", ASSET_ID); - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + true + ); - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { rawTx } = await createContract(context, "ERC20Instance"); - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); }); it("allows to approve transfers, and allowance matches", async function () { - let data = iFace.encodeFunctionData( - // action - "approve", - [BALTATHAR, 1000] - ); - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, + ...ALITH_TRANSACTION_TEMPLATE, to: ADDRESS_ERC20, - data: data, + data: ERC20_INTERFACE.encodeFunctionData("approve", [baltathar.address, 1000]), }); - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock(tx); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - let approvals = (await context.polkadotApi.query.assets.approvals( - assetId, - ALITH, - BALTATHAR - )) as any; + const approvals = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), + alith.address, + baltathar.address + ); - expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); + expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); }); it("should gather the allowance", async function () { - let data = iFace.encodeFunctionData( - // action - "allowance", - [ALITH, BALTATHAR] - ); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }, - ]); - let amount = new BN(1000); - - let amount_hex = "0x" + bnToHex(amount).slice(2).padStart(64, "0"); - expect(tx_call.result).equals(amount_hex); + expect( + ( + await web3EthCall(context.web3, { + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("allowance", [ + alith.address, + baltathar.address, + ]), + }) + ).result + ).equals(bnToHex(1000n, 256)); }); }, true @@ -358,10 +204,8 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace, contractInstanceAddress; + let assetId: u128; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet // And we need relay tokens for issuing a transaction to be executed in the relay const balance = context.polkadotApi.createType("Balance", 100000000000000); @@ -369,72 +213,54 @@ describeDevMoonbeamAllEthTxTypes( balance: balance, }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); + assetId = context.polkadotApi.createType("u128", ASSET_ID); const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { supply: balance, }); - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + true + ); - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "ERC20Instance"); - contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "ERC20Instance"); + await context.createBlock(rawTx); }); it("allows to approve transfer and use transferFrom", async function () { - // Create approval - let data = iFace.encodeFunctionData( - // action - "approve", - [BALTATHAR, 1000] + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("approve", [baltathar.address, 1000]), + }) ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - let approvals = (await context.polkadotApi.query.assets.approvals( - assetId, - ALITH, - BALTATHAR - )) as any; - - expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); - // We are gonna spend 1000 from alith to send it to charleth - data = iFace.encodeFunctionData( - // action - "transferFrom", - [ALITH, CHARLETH, 1000] + const approvals = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), + alith.address, + baltathar.address ); - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }); + expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); + // We are gonna spend 1000 from alith to send it to charleth - block = await context.createBlock({ - transactions: [tx], - }); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("transferFrom", [ + alith.address, + charleth.address, + 1000, + ]), + }) + ); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.logs.length).to.eq(1); expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); @@ -443,19 +269,19 @@ describeDevMoonbeamAllEthTxTypes( expect(receipt.status).to.equal(true); // Approve amount is null now - approvals = (await context.polkadotApi.query.assets.approvals( - assetId, - ALITH, - BALTATHAR - )) as any; - expect(approvals.isNone).to.eq(true); + const newApprovals = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), + alith.address, + baltathar.address + ); + expect(newApprovals.isNone).to.eq(true); // Charleth balance is 1000 - let charletBalance = (await context.polkadotApi.query.assets.account( - assetId, - CHARLETH - )) as any; - expect(charletBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); + const charletBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + charleth.address + ); + expect(charletBalance.unwrap().balance.toBigInt()).to.equal(1000n); }); }, true @@ -464,10 +290,8 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace; + let assetId: u128; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet // And we need relay tokens for issuing a transaction to be executed in the relay const balance = context.polkadotApi.createType("Balance", 100000000000000); @@ -475,235 +299,51 @@ describeDevMoonbeamAllEthTxTypes( balance: balance, }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); + assetId = context.polkadotApi.createType("u128", ASSET_ID); const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { supply: balance, }); - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + true + ); - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { rawTx } = await createContract(context, "ERC20Instance"); - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); }); it("allows to transfer", async function () { - // Create approval - let data = iFace.encodeFunctionData( - // action - "transfer", - [BALTATHAR, 1000] + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("transfer", [baltathar.address, 1000]), + }) ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); // Baltathar balance is 1000 - let baltatharBalance = (await context.polkadotApi.query.assets.account( - assetId, - BALTATHAR - )) as any; - expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); - }); - }, - true -); - -describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace, contractInstanceAddress; - before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = context.polkadotApi.createType("Balance", 100000000000000); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - }); - - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); - - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "ERC20Instance"); - contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - }); - it("allows to approve transfer and use transferFrom through delegateCalls", async function () { - // Create approval - let data = iFace.encodeFunctionData( - // action - "approve_delegate", - [BALTATHAR, 1000] - ); - - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - let receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - - expect(receipt.status).to.equal(true); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(contractInstanceAddress); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - - let approvals = (await context.polkadotApi.query.assets.approvals( - assetId, - ALITH, - BALTATHAR - )) as any; - - expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); - // We are gonna spend 1000 from alith to send it to charleth - data = iFace.encodeFunctionData( - // action - "transferFrom_delegate", - [ALITH, CHARLETH, 1000] - ); - - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(contractInstanceAddress); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receipt.status).to.equal(true); - - // Approve amount is null now - approvals = (await context.polkadotApi.query.assets.approvals( - assetId, - ALITH, - BALTATHAR - )) as any; - expect(approvals.isNone).to.eq(true); - - // Charleth balance is 1000 - let charletBalance = (await context.polkadotApi.query.assets.account(assetId, CHARLETH)) as any; - expect(charletBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); - }); -}); - -describeDevMoonbeamAllEthTxTypes( - "Precompiles - Assets-ERC20 Wasm", - (context) => { - let sudoAccount, assetId, iFace, contractInstanceAddress; - before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet - // And we need relay tokens for issuing a transaction to be executed in the relay - const balance = context.polkadotApi.createType("Balance", 100000000000000); - const assetBalance = context.polkadotApi.createType("PalletAssetsAssetAccount", { - balance: balance, - }); - - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") + const baltatharBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + baltathar.address ); - const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { - supply: balance, - }); - - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); - - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "ERC20Instance"); - contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - }); - it("allows to transfer through delegateCall", async function () { - // Create approval - let data = iFace.encodeFunctionData( - // action - "transfer_delegate", - [BALTATHAR, 1000] - ); - - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - expect(receipt.status).to.equal(true); - - // Baltathar balance is 1000 - let baltatharBalance = (await context.polkadotApi.query.assets.account( - assetId, - BALTATHAR - )) as any; - expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); + expect(baltatharBalance.unwrap().balance.toBigInt()).to.equal(1000n); }); }, true ); describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace, contractInstanceAddress; + let assetId: u128; + let contractInstanceAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet // And we need relay tokens for issuing a transaction to be executed in the relay const balance = context.polkadotApi.createType("Balance", 100000000000000); @@ -711,142 +351,123 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => balance: balance, }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); + assetId = context.polkadotApi.createType("u128", ASSET_ID); const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { supply: balance, }); - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { contract, rawTx } = await createContract(context, "ERC20Instance"); + await context.createBlock(rawTx); contractInstanceAddress = contract.options.address; + // We fund the contract address with this test await mockAssetBalance( context, assetBalance, assetDetails, - sudoAccount, + alith, assetId, - contractInstanceAddress + contractInstanceAddress, + true ); - - await context.createBlock({ transactions: [rawTx] }); }); it("allows to approve transfer and use transferFrom from contract calls", async function () { // Create approval - let data = iFace.encodeFunctionData( - // action - "approve", - [BALTATHAR, 1000] - ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); + const blockAlith = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: ERC20_INTERFACE.encodeFunctionData("approve", [baltathar.address, 1000]), + }) + ); - let block = await context.createBlock({ - transactions: [tx], - }); + const receiptAlith = await context.web3.eth.getTransactionReceipt(blockAlith.result.hash); - let receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + expect(receiptAlith.status).to.equal(true); + expect(receiptAlith.logs.length).to.eq(1); + expect(receiptAlith.logs[0].address).to.eq(ADDRESS_ERC20); + expect(receiptAlith.logs[0].topics.length).to.eq(3); + expect(receiptAlith.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - expect(receipt.status).to.equal(true); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - - let approvals = (await context.polkadotApi.query.assets.approvals( - assetId, + const approvals = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), contractInstanceAddress, - BALTATHAR - )) as any; + baltathar.address + ); - expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); + expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); // We are gonna spend 1000 from contractInstanceAddress to send it to charleth // Since this is a regular call, it will take contractInstanceAddress as msg.sender // thus from & to will be the same, and approval wont be touched - data = iFace.encodeFunctionData( - // action - "transferFrom", - [contractInstanceAddress, CHARLETH, 1000] + const blockBaltathar = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: ERC20_INTERFACE.encodeFunctionData("transferFrom", [ + contractInstanceAddress, + charleth.address, + 1000, + ]), + }) ); - - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receipt.status).to.equal(true); + const receiptBaltathar = await context.web3.eth.getTransactionReceipt( + blockBaltathar.result.hash + ); + expect(receiptBaltathar.logs.length).to.eq(1); + expect(receiptBaltathar.logs[0].address).to.eq(ADDRESS_ERC20); + expect(receiptBaltathar.logs[0].topics.length).to.eq(3); + expect(receiptBaltathar.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); + expect(receiptBaltathar.status).to.equal(true); // approvals are untouched - approvals = (await context.polkadotApi.query.assets.approvals( - assetId, + const newApprovals = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), contractInstanceAddress, - BALTATHAR - )) as any; - expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); + baltathar.address + ); + expect(newApprovals.unwrap().amount.toBigInt()).to.equal(1000n); // this time we call directly from Baltathar the ERC20 contract - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: data, - }); - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receipt.status).to.equal(true); + const directBlock = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: ADDRESS_ERC20, + data: ERC20_INTERFACE.encodeFunctionData("transferFrom", [ + contractInstanceAddress, + charleth.address, + 1000, + ]), + }) + ); + const direcReceipt = await context.web3.eth.getTransactionReceipt(directBlock.result.hash); + expect(direcReceipt.logs.length).to.eq(1); + expect(direcReceipt.logs[0].address).to.eq(ADDRESS_ERC20); + expect(direcReceipt.logs[0].topics.length).to.eq(3); + expect(direcReceipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); + expect(direcReceipt.status).to.equal(true); // Approve amount is null now - approvals = (await context.polkadotApi.query.assets.approvals( - assetId, + const directApprovals = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), contractInstanceAddress, - BALTATHAR - )) as any; - expect(approvals.isNone).to.eq(true); + baltathar.address + ); + expect(directApprovals.isNone).to.eq(true); // Charleth balance is 2000 - let charletBalance = (await context.polkadotApi.query.assets.account(assetId, CHARLETH)) as any; - expect(charletBalance.unwrap()["balance"].eq(new BN(2000))).to.equal(true); + const charletBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + charleth.address + ); + expect(charletBalance.unwrap().balance.toBigInt()).to.equal(2000n); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace, contractInstanceAddress; + let assetId: u128; + let contractInstanceAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet // And we need relay tokens for issuing a transaction to be executed in the relay const balance = context.polkadotApi.createType("Balance", 100000000000000); @@ -854,46 +475,36 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => balance: balance, }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); + assetId = context.polkadotApi.createType("u128", ASSET_ID); const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { supply: balance, }); - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { contract, rawTx } = await createContract(context, "ERC20Instance"); contractInstanceAddress = contract.options.address; + await context.createBlock(rawTx); // We fund Alith with this test - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId, ALITH); - - await context.createBlock({ transactions: [rawTx] }); - }); - it("Bob approves contract and use transferFrom from contract calls", async function () { - // Create approval - let data = iFace.encodeFunctionData( - // action - "approve", - [contractInstanceAddress, 1000] + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, + assetId, + alith.address, + true ); + }); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, + it("Bob approves contract and use transferFrom from contract calls", async function () { + const tx = await createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, to: ADDRESS_ERC20, - data: data, + data: ERC20_INTERFACE.encodeFunctionData("approve", [contractInstanceAddress, 1000]), }); - let block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock(tx); - let receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); @@ -901,61 +512,58 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - let approvals = (await context.polkadotApi.query.assets.approvals( - assetId, - ALITH, + const approvals = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), + alith.address, contractInstanceAddress - )) as any; + ); - expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); - // We are gonna spend 1000 from ALITH to send it to charleth from contract address + expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); + // We are gonna spend 1000 from alith.address to send it to charleth from contract address // even if Bob calls, msg.sender will become the contract with regular calls - data = iFace.encodeFunctionData( - // action - "transferFrom", - [ALITH, CHARLETH, 1000] + const blockBaltathar = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: ERC20_INTERFACE.encodeFunctionData("transferFrom", [ + alith.address, + charleth.address, + 1000, + ]), + }) ); - - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receipt.status).to.equal(true); + const receiptBaltathar = await context.web3.eth.getTransactionReceipt( + blockBaltathar.result.hash + ); + expect(receiptBaltathar.logs.length).to.eq(1); + expect(receiptBaltathar.logs[0].address).to.eq(ADDRESS_ERC20); + expect(receiptBaltathar.logs[0].topics.length).to.eq(3); + expect(receiptBaltathar.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); + expect(receiptBaltathar.status).to.equal(true); // Approve amount is null now - approvals = (await context.polkadotApi.query.assets.approvals( - assetId, - ALITH, + const approvalBaltathar = await context.polkadotApi.query.assets.approvals( + assetId.toU8a(), + alith.address, contractInstanceAddress - )) as any; - expect(approvals.isNone).to.eq(true); + ); + expect(approvalBaltathar.isNone).to.eq(true); // Charleth balance is 1000 - let charletBalance = (await context.polkadotApi.query.assets.account(assetId, CHARLETH)) as any; - expect(charletBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); + const charletBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + charleth.address + ); + expect(charletBalance.unwrap().balance.toBigInt()).to.equal(1000n); }); }); describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, assetId, iFace, contractInstanceAddress; + let assetId: u128; + let contractInstanceAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet // And we need relay tokens for issuing a transaction to be executed in the relay const balance = context.polkadotApi.createType("Balance", 100000000000000); @@ -963,60 +571,42 @@ describeDevMoonbeamAllEthTxTypes( balance: balance, }); - assetId = context.polkadotApi.createType( - "u128", - new BN("42259045809535163221576417993425387648") - ); + assetId = context.polkadotApi.createType("u128", ASSET_ID); const assetDetails = context.polkadotApi.createType("PalletAssetsAssetDetails", { supply: balance, }); - const contractData = await getCompiled("ERC20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { contract, rawTx } = await createContract(context, "ERC20Instance"); contractInstanceAddress = contract.options.address; + await context.createBlock(rawTx); await mockAssetBalance( context, assetBalance, assetDetails, - sudoAccount, + alith, assetId, contractInstanceAddress ); - - await context.createBlock({ transactions: [rawTx] }); }); it("allows to transfer through call from SC ", async function () { // Create approval - let data = iFace.encodeFunctionData( - // action - "transfer", - [BALTATHAR, 1000] + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: ERC20_INTERFACE.encodeFunctionData("transfer", [baltathar.address, 1000]), + }) ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); // Baltathar balance is 1000 - let baltatharBalance = (await context.polkadotApi.query.assets.account( - assetId, - BALTATHAR - )) as any; - expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); + const baltatharBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + baltathar.address + ); + expect(baltatharBalance.unwrap().balance.toBigInt()).to.equal(1000n); }); }, true diff --git a/tests/tests/test-precompile/test-precompile-author-mapping-keys.ts b/tests/tests/test-precompile/test-precompile-author-mapping-keys.ts new file mode 100644 index 0000000000..8bd3d04230 --- /dev/null +++ b/tests/tests/test-precompile/test-precompile-author-mapping-keys.ts @@ -0,0 +1,418 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { ethan, ETHAN_PRIVATE_KEY, faith, FAITH_PRIVATE_KEY } from "../../util/accounts"; +import { getBlockExtrinsic } from "../../util/block"; +import { PRECOMPILE_AUTHOR_MAPPING_ADDRESS } from "../../util/constants"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; +import { sendPrecompileTx } from "../../util/transactions"; + +const debug = require("debug")("test-precompile:author-mapping"); + +// Keys used to set author-mapping in the tests +const originalKeys = [ + "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000002", +]; +// Concatenated keys +const concatOriginalKeys = `0x${originalKeys.map((key) => key.slice(2)).join("")}`; + +const SELECTORS = { + set_keys: "bcb24ddc", + remove_keys: "3b6c4284", +}; + +const setKeysThroughPrecompile = async ( + context: DevTestContext, + account: string, + private_key: string, + keys: string +) => { + await sendPrecompileTx( + context, + PRECOMPILE_AUTHOR_MAPPING_ADDRESS, + SELECTORS, + account, + private_key, + "set_keys", + [keys] + ); +}; + +describeDevMoonbeam("Precompile Author Mapping - Set Faith first time keys", (context) => { + before("setup account & keys", async function () { + debug(`Setting account ${faith.address} keys: ${concatOriginalKeys}`); + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, concatOriginalKeys); + }); + + it("should succeed", async function () { + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isSucceed + ).to.be.true; + }); + + it("should send KeysRegistered event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRegistered")).to + .exist; + }); + + it("should set new keys", async function () { + const mapping = (await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + )) as any; + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(faith.address); + expect(mapping.unwrap().keys_.toString()).to.equal(originalKeys[1]); + }); + + it("should set correct nimbus lookup", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + faith.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrap().toString()).to.equal(originalKeys[0]); + }); +}); + +describeDevMoonbeam( + "Precompile Author Mapping - Update Faith mapping to the same keys", + (context) => { + before("setup account & keys", async function () { + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, concatOriginalKeys); + + // Updating with the same keys + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, concatOriginalKeys); + }); + + it("should succeed", async function () { + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isSucceed + ).to.be.true; + }); + + it("should send KeysRotated event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRotated")).to + .exist; + }); + + it("should keep the same keys", async function () { + const mapping = (await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + )) as any; + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(faith.address); + expect(mapping.unwrap().keys_.toString()).to.equal(originalKeys[1]); + }); + + it("should keep the same nimbus lookup", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + faith.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrap().toString()).to.equal(originalKeys[0]); + }); + } +); + +describeDevMoonbeam("Precompile Author Mapping - Update different keys", (context) => { + const newKeys = [ + "0x0000000000000000000000000000000000000000000000000000000000000003", + "0x0000000000000000000000000000000000000000000000000000000000000004", + ]; + const concatNewKeys = `0x${newKeys.map((key) => key.slice(2)).join("")}`; + + before("setup account & keys", async function () { + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, concatOriginalKeys); + + // Updating with different keys + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, concatNewKeys); + }); + + it("should succeed", async function () { + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isSucceed + ).to.be.true; + }); + + it("should send KeysRotated event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRotated")).to.exist; + }); + + it("should remove previous keys", async function () { + const mapping = (await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + )) as any; + expect(mapping.isNone).to.be.true; + }); + + it("should set new keys", async function () { + const mapping = (await context.polkadotApi.query.authorMapping.mappingWithDeposit( + newKeys[0] + )) as any; + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(faith.address); + expect(mapping.unwrap().keys_.toString()).to.equal(newKeys[1]); + }); + + it("should set correct nimbus lookup", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + faith.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrapOr(null)).to.not.equal(null); + expect(nimbusLookup.unwrap().toString()).to.equal(newKeys[0]); + }); +}); + +describeDevMoonbeam("Precompile Author Mapping - Remove Faith keys", (context) => { + before("setup account & keys", async function () { + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, concatOriginalKeys); + + // Remove the keys + await sendPrecompileTx( + context, + PRECOMPILE_AUTHOR_MAPPING_ADDRESS, + SELECTORS, + faith.address, + FAITH_PRIVATE_KEY, + "remove_keys", + [] + ); + }); + + it("should succeed", async function () { + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isSucceed + ).to.be.true; + }); + + it("should send KeysRemoved event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRemoved")).to.exist; + }); + + it("should remove keys", async function () { + const mapping = (await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + )) as any; + expect(mapping.isNone).to.be.true; + }); + + it("should remove nimbus mapping", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + faith.address + )) as any; + expect(nimbusLookup.isNone).to.be.true; + }); +}); + +describeDevMoonbeam("Precompile Author Mapping - Removing non-existing author", (context) => { + // Using ethan who doesn't have author-mapping + + before("setup account & keys", async function () { + // Remove the keys + await sendPrecompileTx( + context, + PRECOMPILE_AUTHOR_MAPPING_ADDRESS, + SELECTORS, + faith.address, + FAITH_PRIVATE_KEY, + "remove_keys", + [] + ); + }); + + it("should revert", async function () { + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + // ethereum revert is still a successful substrate extrinsic + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isRevert + ).to.be.true; + }); + + it("should not send KeysRemoved event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + expect(events.find((e) => e.section == "authorMapping" && e.method == "KeysRemoved")).to.not + .exist; + }); +}); + +describeDevMoonbeam("Precompile Author Mapping - Update someone else nimbus key", (context) => { + // Using ethan who doesn't have author-mapping + + before("setup account & keys", async function () { + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, concatOriginalKeys); + + // Setting same key but with ethan + await setKeysThroughPrecompile(context, ethan.address, ETHAN_PRIVATE_KEY, concatOriginalKeys); + }); + + it("should revert", async function () { + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + // ethereum revert is still a successful substrate extrinsic + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isRevert + ).to.be.true; + }); + + it("should not send any authorMapping event", async function () { + const { events } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + expect(events.find((e) => e.section == "authorMapping")).to.not.exist; + }); + + it("should keep the same keys to Faith", async function () { + const mapping = (await context.polkadotApi.query.authorMapping.mappingWithDeposit( + originalKeys[0] + )) as any; + expect(mapping.isSome).to.be.true; + expect(mapping.unwrap().account.toString()).to.equal(faith.address); + expect(mapping.unwrap().keys_.toString()).to.equal(originalKeys[1]); + }); + + it("should not set nimbus lookup to Ethan", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + ethan.address + )) as any; + expect(nimbusLookup.isNone).to.be.true; + }); + + it("should keep the same nimbus lookup to Faith", async function () { + const nimbusLookup = (await context.polkadotApi.query.authorMapping.nimbusLookup( + faith.address + )) as any; + expect(nimbusLookup.isSome).to.be.true; + expect(nimbusLookup.unwrap().toString()).to.equal(originalKeys[0]); + }); +}); + +// Testing invalid inputs + +describeDevMoonbeam("Precompile Author Mapping - Set Faith only 1 key", (context) => { + it("should fail", async function () { + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, originalKeys[0]); + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isRevert + ).to.be.true; + }); +}); + +describeDevMoonbeam("Precompile Author Mapping - Set Faith mapping with 0 keys", (context) => { + it("should fail", async function () { + await setKeysThroughPrecompile(context, faith.address, FAITH_PRIVATE_KEY, ""); + const { extrinsic, events, resultEvent } = await getBlockExtrinsic( + context.polkadotApi, + await context.polkadotApi.rpc.chain.getBlockHash(), + "ethereum", + "transact" + ); + + expect(extrinsic).to.exist; + expect(resultEvent.method).to.equal("ExtrinsicSuccess"); + expect( + (events.find((e) => e.section == "ethereum" && e.method == "Executed").data[3] as any) + .isRevert + ).to.be.true; + }); +}); diff --git a/tests/tests/test-precompile/test-precompile-author-mapping.ts b/tests/tests/test-precompile/test-precompile-author-mapping.ts index 871bc9e8ec..3d7ca5504b 100644 --- a/tests/tests/test-precompile/test-precompile-author-mapping.ts +++ b/tests/tests/test-precompile/test-precompile-author-mapping.ts @@ -1,210 +1,142 @@ +import "@moonbeam-network/api-augment"; + +import { u8aToHex } from "@polkadot/util"; +import { KeyringPair } from "@substrate/txwrapper-core"; import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { ethers } from "ethers"; -import { getCompiled } from "../../util/contracts"; -import { createContract, createTransaction } from "../../util/transactions"; -import { Keyring } from "@polkadot/api"; -import { randomAsHex } from "@polkadot/util-crypto"; -import { u8aToHex } from "@polkadot/util"; +import { alith, generateKeyringPair } from "../../util/accounts"; +import { DEFAULT_GENESIS_MAPPING, PRECOMPILE_AUTHOR_MAPPING_ADDRESS } from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, - DEFAULT_GENESIS_MAPPING, -} from "../../util/constants"; - -const ADDRESS_AUTHOR_MAPPING = "0x0000000000000000000000000000000000000807"; - -async function getMappingInfo( - context, - authorId: string -): Promise<{ account: string; deposit: BigInt }> { - const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit(authorId); - if (mapping.isSome) { - return { - account: mapping.unwrap().account.toString(), - deposit: mapping.unwrap().deposit.toBigInt(), - }; - } - return null; -} + ALITH_TRANSACTION_TEMPLATE, + createContract, + createTransaction, +} from "../../util/transactions"; + +const AUTHOR_MAPPING_CONTRACT = getCompiled("AuthorMapping"); +const AUTHOR_MAPPING_INTERFACE = new ethers.utils.Interface(AUTHOR_MAPPING_CONTRACT.contract.abi); describeDevMoonbeamAllEthTxTypes("Precompiles - author mapping", (context) => { it("allows to add association", async function () { - const contractData = await getCompiled("AuthorMapping"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "AuthorMapping"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - const seed = randomAsHex(32); - - const mappingKeyRing = new Keyring({ type: "sr25519" }); - // add the account - let mappingAccount = await mappingKeyRing.addFromUri(seed, null, "sr25519"); - - const data = iFace.encodeFunctionData( - // action - "add_association", - [mappingAccount.publicKey] + const mappingAccount = generateKeyringPair("sr25519"); + const { rawTx } = await createContract(context, "AuthorMapping"); + await context.createBlock(rawTx); + + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_AUTHOR_MAPPING_ADDRESS, + data: AUTHOR_MAPPING_INTERFACE.encodeFunctionData("add_association", [ + mappingAccount.publicKey, + ]), + }) ); - const base_fee = await context.web3.eth.getGasPrice(); - - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_AUTHOR_MAPPING, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - const registerInfo = await getMappingInfo(context, u8aToHex(mappingAccount.publicKey)); - expect(await registerInfo.account).to.eq(GENESIS_ACCOUNT); - expect(await registerInfo.deposit).to.eq(DEFAULT_GENESIS_MAPPING); + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + u8aToHex(mappingAccount.publicKey) + ); + expect(mapping.unwrap().account.toString()).to.eq(alith.address); + expect(mapping.unwrap().deposit.toBigInt()).to.eq(DEFAULT_GENESIS_MAPPING); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - author mapping", (context) => { - let firstMappingAccount, secondMappingAccount; + let firstMappingAccount: KeyringPair; + let secondMappingAccount: KeyringPair; before("First add association", async () => { - // We will work with genesis account - const keyring = new Keyring({ type: "ethereum" }); - let genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - - // lets generate 2 seeds for 2 sr25519 addresses - const seed = randomAsHex(32); - const seed2 = randomAsHex(32); - - const mappingKeyRing = new Keyring({ type: "sr25519" }); - // accounts - firstMappingAccount = await mappingKeyRing.addFromUri(seed, null, "sr25519"); - secondMappingAccount = await mappingKeyRing.addFromUri(seed2, null, "sr25519"); - + firstMappingAccount = generateKeyringPair("sr25519"); + secondMappingAccount = generateKeyringPair("sr25519"); // Add association - await context.polkadotApi.tx.authorMapping - .addAssociation(firstMappingAccount.publicKey) - .signAndSend(genesisAccount); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(firstMappingAccount.publicKey) + ); // Verify association was added - const registerInfo = await getMappingInfo(context, u8aToHex(firstMappingAccount.publicKey)); - expect(await registerInfo.account).to.eq(GENESIS_ACCOUNT); - expect(await registerInfo.deposit).to.eq(DEFAULT_GENESIS_MAPPING); - }); - it("allows to update association", async function () { - const contractData = await getCompiled("AuthorMapping"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "AuthorMapping"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - - const data = iFace.encodeFunctionData( - // action - "update_association", - [firstMappingAccount.publicKey, secondMappingAccount.publicKey] + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + u8aToHex(firstMappingAccount.publicKey) ); + expect(mapping.unwrap().account.toString()).to.eq(alith.address); + expect(mapping.unwrap().deposit.toBigInt()).to.eq(DEFAULT_GENESIS_MAPPING); + }); - const base_fee = await context.web3.eth.getGasPrice(); + it("allows to update association", async function () { + const { rawTx } = await createContract(context, "AuthorMapping"); + await context.createBlock(rawTx); const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_AUTHOR_MAPPING, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], + to: PRECOMPILE_AUTHOR_MAPPING_ADDRESS, + data: AUTHOR_MAPPING_INTERFACE.encodeFunctionData("update_association", [ + firstMappingAccount.publicKey, + secondMappingAccount.publicKey, + ]), }); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const { result } = await context.createBlock(tx); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); // Verify we updated firstMappingAccount for secondMappingAccount - const secondRegisterInfo = await getMappingInfo( - context, + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( u8aToHex(secondMappingAccount.publicKey) ); - expect(await secondRegisterInfo.account).to.eq(GENESIS_ACCOUNT); - expect(await secondRegisterInfo.deposit).to.eq(DEFAULT_GENESIS_MAPPING); - - const firstRegisterInfo = await getMappingInfo( - context, - u8aToHex(firstMappingAccount.publicKey) - ); - expect(firstRegisterInfo).to.eq(null); + expect(mapping.unwrap().account.toString()).to.eq(alith.address); + expect(mapping.unwrap().deposit.toBigInt()).to.eq(DEFAULT_GENESIS_MAPPING); + expect( + ( + await context.polkadotApi.query.authorMapping.mappingWithDeposit( + u8aToHex(firstMappingAccount.publicKey) + ) + ).isNone + ).to.be.true; }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - author mapping", (context) => { - let mappingAccount; + let mappingAccount: KeyringPair; before("First add association", async () => { - // We will work with genesis account - const keyring = new Keyring({ type: "ethereum" }); - let genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - - const seed = randomAsHex(32); - const mappingKeyRing = new Keyring({ type: "sr25519" }); - // account - mappingAccount = await mappingKeyRing.addFromUri(seed, null, "sr25519"); - + mappingAccount = generateKeyringPair("sr25519"); // Add association - await context.polkadotApi.tx.authorMapping - .addAssociation(mappingAccount.publicKey) - .signAndSend(genesisAccount); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.authorMapping.addAssociation(mappingAccount.publicKey) + ); // Verify association was added - const registerInfo = await getMappingInfo(context, u8aToHex(mappingAccount.publicKey)); - expect(await registerInfo.account).to.eq(GENESIS_ACCOUNT); - expect(await registerInfo.deposit).to.eq(DEFAULT_GENESIS_MAPPING); + const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit( + u8aToHex(mappingAccount.publicKey) + ); + expect(mapping.unwrap().account.toString()).to.eq(alith.address); + expect(mapping.unwrap().deposit.toBigInt()).to.eq(DEFAULT_GENESIS_MAPPING); }); it("allows to clear association", async function () { - const contractData = await getCompiled("AuthorMapping"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "AuthorMapping"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - - const data = iFace.encodeFunctionData( - // action - "clear_association", - [mappingAccount.publicKey] + const { rawTx } = await createContract(context, "AuthorMapping"); + await context.createBlock(rawTx); + + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_AUTHOR_MAPPING_ADDRESS, + data: AUTHOR_MAPPING_INTERFACE.encodeFunctionData("clear_association", [ + mappingAccount.publicKey, + ]), + }) ); - const base_fee = await context.web3.eth.getGasPrice(); - - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_AUTHOR_MAPPING, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); // Verify we removed the association - const firstRegisterInfo = await getMappingInfo(context, u8aToHex(mappingAccount.publicKey)); - expect(firstRegisterInfo).to.eq(null); + expect( + ( + await context.polkadotApi.query.authorMapping.mappingWithDeposit( + u8aToHex(mappingAccount.publicKey) + ) + ).isNone + ).to.be.true; }); }); diff --git a/tests/tests/test-precompile/test-precompile-batch-gas-limit.ts b/tests/tests/test-precompile/test-precompile-batch-gas-limit.ts new file mode 100644 index 0000000000..9167e018bd --- /dev/null +++ b/tests/tests/test-precompile/test-precompile-batch-gas-limit.ts @@ -0,0 +1,57 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; +import { ethers } from "ethers"; + +import { alith, ALITH_PRIVATE_KEY, generateKeyringPair } from "../../util/accounts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +// Casting of type in solidity is performing truncation: +// https://docs.soliditylang.org/en/latest/types.html#conversions-between-elementary-types +describeDevMoonbeam("Precompile Batch - Overflowing gasLimit", (context) => { + const randomAccount = generateKeyringPair(); + // This case can no longer be tested from frontier 0.9.23 because it is no longer possible to + // enter a gas_limit that exceeds 65% of the block. + it.skip("should get truncated and valid", async function () { + // We are creating a fake function to override the argument type from uint64 to uint256 + const batchInterface = new ethers.utils.Interface([ + "function batchAll(address[], uint256[], bytes[], uint64[])", + "function hackedbatchAll(address[], uint256[], bytes[], uint256[])", + ]); + // each tx have a different gas limit to ensure it doesn't impact gas used + let batchAllTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + gas: "0x110000", + value: "0x00", + nonce: 0, + data: + `${batchInterface.encodeFunctionData("batchAll", [[], [], [], []]).slice(0, 10)}` + + `${batchInterface + .encodeFunctionData("hackedbatchAll", [ + [randomAccount.address], + [`${3_000_000_000_000_000_000n.toString()}`], + [], + [`${(2n ** 128n + 22_000n).toString()}`], + ]) + .slice(10)}`, + }, + ALITH_PRIVATE_KEY + ); + + const batchAllResult = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + batchAllTx.rawTransaction, + ]); + + await context.createBlock(); + + const batchAllReceipt = await context.web3.eth.getTransactionReceipt(batchAllResult.result); + expect(batchAllReceipt.status).to.be.true; + + const account = await context.polkadotApi.query.system.account(randomAccount.address); + expect(account.data.free.toBigInt()).to.equal(3_000_000_000_000_000_000n); + expect(account.data.reserved.toBigInt()).to.equal(0n); + }); +}); diff --git a/tests/tests/test-precompile/test-precompile-batch.ts b/tests/tests/test-precompile/test-precompile-batch.ts new file mode 100644 index 0000000000..8573f060fe --- /dev/null +++ b/tests/tests/test-precompile/test-precompile-batch.ts @@ -0,0 +1,91 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; +import { ethers } from "ethers"; + +import { alith, ALITH_PRIVATE_KEY, baltathar, charleth } from "../../util/accounts"; +import { getCompiled } from "../../util/contracts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; + +describeDevMoonbeamAllEthTxTypes("Batch - All functions should consume the same gas", (context) => { + it("should consume the same gas", async function () { + const batchInterface = new ethers.utils.Interface((await getCompiled("Batch")).contract.abi); + + // each tx have a different gas limit to ensure it doesn't impact gas used + let batchAllTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + gas: "0x110000", + value: "0x00", + nonce: 0, + data: batchInterface.encodeFunctionData("batchAll", [ + [baltathar.address, charleth.address], + ["1000000000000000000", "2000000000000000000"], + [], + [], + ]), + }, + ALITH_PRIVATE_KEY + ); + + let batchSomeTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + gas: "0x120000", + value: "0x00", + nonce: 1, + data: batchInterface.encodeFunctionData("batchSome", [ + [baltathar.address, charleth.address], + ["1000000000000000000", "2000000000000000000"], + [], + [], + ]), + }, + ALITH_PRIVATE_KEY + ); + + let batchSomeUntilFailureTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + gas: "0x130000", + value: "0x00", + nonce: 2, + data: batchInterface.encodeFunctionData("batchSomeUntilFailure", [ + [baltathar.address, charleth.address], + ["1000000000000000000", "2000000000000000000"], + [], + [], + ]), + }, + ALITH_PRIVATE_KEY + ); + + const batchAllResult = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + batchAllTx.rawTransaction, + ]); + const batchSomeResult = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + batchSomeTx.rawTransaction, + ]); + const batchSomeUntilFailureResult = await customWeb3Request( + context.web3, + "eth_sendRawTransaction", + [batchSomeUntilFailureTx.rawTransaction] + ); + + await context.createBlock(); + + const batchAllReceipt = await context.web3.eth.getTransactionReceipt(batchAllResult.result); + const batchSomeReceipt = await context.web3.eth.getTransactionReceipt(batchSomeResult.result); + const batchSomeUntilFailureReceipt = await context.web3.eth.getTransactionReceipt( + batchSomeUntilFailureResult.result + ); + + expect(batchAllReceipt["gasUsed"]).to.equal(43932); + expect(batchSomeReceipt["gasUsed"]).to.equal(43932); + expect(batchSomeUntilFailureReceipt["gasUsed"]).to.equal(43932); + }); +}); diff --git a/tests/tests/test-precompile/test-precompile-blake2.ts b/tests/tests/test-precompile/test-precompile-blake2.ts index 7356105c78..52be9e6fec 100644 --- a/tests/tests/test-precompile/test-precompile-blake2.ts +++ b/tests/tests/test-precompile/test-precompile-blake2.ts @@ -1,21 +1,24 @@ -import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract } from "../../util/transactions"; +import "@moonbeam-network/api-augment"; -describeDevMoonbeamAllEthTxTypes("Precompiles - Blake2", (context) => { +import { expectEVMResult } from "../../util/eth-transactions"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; + +describeDevMoonbeam("Precompiles - blake2", (context) => { it("should be accessible from a smart contract", async function () { - const { contract, rawTx } = await createContract(context, "Blake2Check"); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "HasherChecker"); + await context.createBlock(rawTx); - // The contract should deploy successfully and the receipt should show success. - const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); - expect(receipt.status).to.be.true; + // Execute the contract blake2 call + const { result } = await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.blake2Check(), + }) + ); - // invoke the contract's test function 'callF' - const result = await contract.methods.callF().call(); - expect(result).to.have.members([ - "0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1", - "0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", - ]); + // Verify the result + expectEVMResult(result.events, "Succeed"); }); }); diff --git a/tests/tests/test-bn-128-bounds.ts b/tests/tests/test-precompile/test-precompile-bn128-bounds.ts similarity index 80% rename from tests/tests/test-bn-128-bounds.ts rename to tests/tests/test-precompile/test-precompile-bn128-bounds.ts index 29548ed758..59dd2168b3 100644 --- a/tests/tests/test-bn-128-bounds.ts +++ b/tests/tests/test-precompile/test-precompile-bn128-bounds.ts @@ -1,8 +1,8 @@ -import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createContract } from "../util/transactions"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -import { customWeb3Request } from "../util/providers"; +import "@moonbeam-network/api-augment"; + +import { alith, ALITH_PRIVATE_KEY } from "../../util/accounts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; /* * These test cases trigger bugs in the bn128 precompiles which perform a from_slice() @@ -12,9 +12,8 @@ import { customWeb3Request } from "../util/providers"; * https://github.com/paritytech/frontier/pull/394 */ -describeDevMoonbeam("bn128 precompile bounds check", (context) => { +describeDevMoonbeam("Precompiles - bn128", (context) => { it("should fail gracefully (case 1)", async () => { - const from = "0xed6cd71d72b116dda4e31f562f15116c34d084f9"; // some call data which will cause bn128 to be called with insufficient input. this // presumably was generated through fuzzing. const data = "0x608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5eda"; @@ -43,19 +42,17 @@ describeDevMoonbeam("bn128 precompile bounds check", (context) => { const tx = await context.web3.eth.accounts.signTransaction( { - from: GENESIS_ACCOUNT, + from: alith.address, to: null, value: value, gas: gas_limit, gasPrice: gas_price, data: data, }, - GENESIS_ACCOUNT_PRIVATE_KEY + ALITH_PRIVATE_KEY ); - const txResults = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - tx.rawTransaction, - ]); + await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); // we expect that the node hasn't crashed by here. without a fix, the previous web3 request // would have been sufficient to crash our node. now it fails with "ExhaustsResources". if @@ -64,7 +61,6 @@ describeDevMoonbeam("bn128 precompile bounds check", (context) => { }); it("should fail gracefully (case 2)", async () => { - const from = "0xed6cd71d72b116dda4e31f562f15116c34d084f9"; const to = "0x0000000000000000000000000000000000000007"; // similar to the above call data, although triggers a slightly different bug const data = "0x0000000000000000000000000000000000000000050000000000008303d0300d901401"; @@ -74,19 +70,17 @@ describeDevMoonbeam("bn128 precompile bounds check", (context) => { const tx = await context.web3.eth.accounts.signTransaction( { - from: GENESIS_ACCOUNT, + from: alith.address, to: to, value: value, gas: gas_limit, gasPrice: gas_price, data: data, }, - GENESIS_ACCOUNT_PRIVATE_KEY + ALITH_PRIVATE_KEY ); - const txResults = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - tx.rawTransaction, - ]); + await customWeb3Request(context.web3, "eth_sendRawTransaction", [tx.rawTransaction]); // we expect that the node hasn't crashed by here. without a fix, the previous web3 request // would have been sufficient to crash our node. now it fails with "ExhaustsResources". if diff --git a/tests/tests/test-precompile/test-precompile-bn128add.ts b/tests/tests/test-precompile/test-precompile-bn128add.ts index 57e215e48f..69326e962e 100644 --- a/tests/tests/test-precompile/test-precompile-bn128add.ts +++ b/tests/tests/test-precompile/test-precompile-bn128add.ts @@ -1,17 +1,24 @@ -import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract } from "../../util/transactions"; +import "@moonbeam-network/api-augment"; -describeDevMoonbeamAllEthTxTypes("Precompiles - bn128add", (context) => { +import { expectEVMResult } from "../../util/eth-transactions"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; + +describeDevMoonbeam("Precompiles - bn128add", (context) => { it("should be accessible from a smart contract", async function () { - const { rawTx } = await createContract(context, "Bn128Addition"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "HasherChecker"); + await context.createBlock(rawTx); - // Because the call to bn128add is in the constructor of HashRipmd160, verifying the code - // is enough. - expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( - "0x6080604052600080fdfea2646970667358221220a18633c4ec2f5fd19918720cc9181bf5" + - "3e954372785d2b34c64298c5275b4d5264736f6c63430008030033" + // Execute the contract bn128add call + const { result } = await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.bn128AdditionCheck(), + }) ); + + // Verify the result + expectEVMResult(result.events, "Succeed"); }); }); diff --git a/tests/tests/test-precompile/test-precompile-bn128mul.ts b/tests/tests/test-precompile/test-precompile-bn128mul.ts index 2178cbecac..794cd2ec9d 100644 --- a/tests/tests/test-precompile/test-precompile-bn128mul.ts +++ b/tests/tests/test-precompile/test-precompile-bn128mul.ts @@ -1,17 +1,24 @@ -import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract } from "../../util/transactions"; +import "@moonbeam-network/api-augment"; -describeDevMoonbeamAllEthTxTypes("Precompiles - bn128mul", (context) => { +import { expectEVMResult } from "../../util/eth-transactions"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; + +describeDevMoonbeam("Precompiles - bn128mul", (context) => { it("should be accessible from a smart contract", async function () { - const { rawTx } = await createContract(context, "Bn128Multiply"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "HasherChecker"); + await context.createBlock(rawTx); - // Because the call to bn128mul is in the constructor of HashRipmd160, verifying the code - // is enough. - expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( - "0x6080604052600080fdfea26469706673582212209a97bc97d5e3a377e8298e3b3a72b24963" + - "abb30bc27bb2266ae137b12aac8cc964736f6c63430008030033" + // Execute the contract bn128mul call + const { result } = await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.bn128MultiplyCheck(), + }) ); + + // Verify the result + expectEVMResult(result.events, "Succeed"); }); }); diff --git a/tests/tests/test-precompile/test-precompile-bn128pairing.ts b/tests/tests/test-precompile/test-precompile-bn128pairing.ts index ff29ae90b0..8e0ea341ed 100644 --- a/tests/tests/test-precompile/test-precompile-bn128pairing.ts +++ b/tests/tests/test-precompile/test-precompile-bn128pairing.ts @@ -1,17 +1,24 @@ -import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract } from "../../util/transactions"; +import "@moonbeam-network/api-augment"; -describeDevMoonbeamAllEthTxTypes("Precompiles - bn128Pairing", (context) => { +import { expectEVMResult } from "../../util/eth-transactions"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; + +describeDevMoonbeam("Precompiles - bn128pairing", (context) => { it("should be accessible from a smart contract", async function () { - const { rawTx } = await createContract(context, "Bn128Pairing"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "HasherChecker"); + await context.createBlock(rawTx); - // Because the call to bn128mul is in the constructor of HashRipmd160, verifying the code - // is enough. - expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( - "0x6080604052600080fdfea2646970667358221220e90355f07d7a4ae3a9df347abcddaab" + - "722cb5be69464e1ff818d231c9ee0b8de64736f6c63430008030033" + // Execute the contract bn128pairing call + const { result } = await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.bn128PairingCheck(), + }) ); + + // Verify the result + expectEVMResult(result.events, "Succeed"); }); }); diff --git a/tests/tests/test-precompile/test-precompile-democracy.ts b/tests/tests/test-precompile/test-precompile-democracy.ts index cae9ab2011..fe6bdb44ac 100644 --- a/tests/tests/test-precompile/test-precompile-democracy.ts +++ b/tests/tests/test-precompile/test-precompile-democracy.ts @@ -1,34 +1,29 @@ -import { Keyring } from "@polkadot/api"; -import { KeyringPair } from "@polkadot/keyring/types"; +import "@moonbeam-network/api-augment"; + +import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types"; +import { u32 } from "@polkadot/types-codec"; +import { BN, numberToHex } from "@polkadot/util"; +import { blake2AsHex } from "@polkadot/util-crypto"; import { expect } from "chai"; +import { ethers } from "ethers"; +import { Interface } from "ethers/lib/utils"; + +import { alith, ALITH_PRIVATE_KEY, baltathar, BALTATHAR_PRIVATE_KEY } from "../../util/accounts"; import { - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, - GLMR, - ALITH_PRIV_KEY, - ALITH, + PRECOMPILE_DEMOCRACY_ADDRESS, PROPOSAL_AMOUNT, VOTE_AMOUNT, ZERO_ADDRESS, - GAS_PRICE, } from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; -import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types"; - -import { blake2AsHex } from "@polkadot/util-crypto"; -import { createBlockWithExtrinsic } from "../../util/substrate-rpc"; import { - callPrecompile, + ALITH_TRANSACTION_TEMPLATE, createContract, createTransaction, sendPrecompileTx, } from "../../util/transactions"; -import { numberToHex } from "@polkadot/util"; -import { getCompiled } from "../../util/contracts"; -import { ethers } from "ethers"; -import { Interface } from "ethers/lib/utils"; -const ADDRESS_DEMO_PRECOMPILE = "0x0000000000000000000000000000000000000803"; // Function selector reference // { // "0185921e": "delegate(address,uint256,uint256)", @@ -52,16 +47,11 @@ const SELECTORS = { note_preimage: "200881f5", }; -export const deployAndInterfaceContract = async ( - context: DevTestContext, - contractName: string -): Promise => { - // deploy contract +const DEMOCRACY_INTERFACE = new ethers.utils.Interface(getCompiled("Democracy").contract.abi); + +export const deployContract = async (context: DevTestContext, contractName: string) => { const { rawTx } = await createContract(context, contractName); - await context.createBlock({ transactions: [rawTx] }); - // Instantiate interface - const contractData = await getCompiled(contractName); - return new ethers.utils.Interface(contractData.contract.abi); + await context.createBlock(rawTx); }; export const notePreimagePrecompile = async < @@ -81,55 +71,42 @@ export const notePreimagePrecompile = async < ); const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_DEMO_PRECOMPILE, + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_DEMOCRACY_ADDRESS, data, }); - await context.createBlock({ - transactions: [tx], - }); + await context.createBlock(tx); // return encodedHash return blake2AsHex(encodedProposal); }; describeDevMoonbeam("Democracy - genesis and preimage", (context) => { - let genesisAccount: KeyringPair; - let iFace: Interface; - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - iFace = await deployAndInterfaceContract(context, "Democracy"); + await deployContract(context, "Democracy"); }); it("should check initial state - no referendum", async function () { // referendumCount const referendumCount = await context.polkadotApi.query.democracy.referendumCount(); - expect(referendumCount.toHuman()).to.equal("0"); + expect(referendumCount.toNumber()).to.equal(0); }); it("should check initial state - 0x0 ParachainBondAccount", async function () { // referendumCount const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); + expect(parachainBondInfo.account.toString()).to.equal(ZERO_ADDRESS); }); it("notePreimage", async function () { // notePreimage const encodedHash = await notePreimagePrecompile( context, - iFace, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) + DEMOCRACY_INTERFACE, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) ); - const preimageStatus = (await context.polkadotApi.query.democracy.preimages( - encodedHash - )) as any; + const preimageStatus = await context.polkadotApi.query.democracy.preimages(encodedHash); expect( preimageStatus.unwrap().isAvailable && preimageStatus.unwrap().asAvailable.provider.toString() - ).to.equal(GENESIS_ACCOUNT); + ).to.equal(alith.address); expect( preimageStatus.unwrap().isAvailable && preimageStatus.unwrap().asAvailable.deposit.toString() ).to.equal("2200000000000000"); @@ -137,83 +114,74 @@ describeDevMoonbeam("Democracy - genesis and preimage", (context) => { }); describeDevMoonbeam("Democracy - propose", (context) => { - let genesisAccount: KeyringPair; let encodedHash: `0x${string}`; - let iFace: Interface; before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - iFace = await deployAndInterfaceContract(context, "Democracy"); + await deployContract(context, "Democracy"); // encodedHash encodedHash = await notePreimagePrecompile( context, - iFace, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) + DEMOCRACY_INTERFACE, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) ); }); it("propose", async function () { // propose await sendPrecompileTx( context, - ADDRESS_DEMO_PRECOMPILE, + PRECOMPILE_DEMOCRACY_ADDRESS, SELECTORS, - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, + alith.address, + ALITH_PRIVATE_KEY, "propose", [encodedHash, numberToHex(Number(PROPOSAL_AMOUNT))] ); // referendumCount const referendumCount = await context.polkadotApi.query.democracy.referendumCount(); - expect(referendumCount.toHuman()).to.equal("0"); + expect(referendumCount.toNumber()).to.equal(0); // publicPropCount const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); - expect(publicPropCount.toHuman()).to.equal("1"); + expect(publicPropCount.toNumber()).to.equal(1); // publicProps const publicProps = await context.polkadotApi.query.democracy.publicProps(); // encodedHash - expect((publicProps.toHuman() as any)[0][1]).to.equal(encodedHash); + expect(publicProps[0][1].toString()).to.equal(encodedHash); // prop author - expect((publicProps.toHuman() as any)[0][2]).to.equal(GENESIS_ACCOUNT); + expect(publicProps[0][2].toString()).to.equal(alith.address); // depositOf const depositOf = await context.polkadotApi.query.democracy.depositOf(0); - expect((depositOf.toHuman() as any)[1]).to.equal("1,000,000,000,000,000,000,000"); + expect(depositOf.unwrap()[1].toBigInt()).to.equal(1_000_000_000_000_000_000_000n); }); }); describeDevMoonbeam("Democracy - second proposal", (context) => { - let genesisAccount: KeyringPair, alith: KeyringPair; let encodedHash: `0x${string}`; - let launchPeriod; - let iFace: Interface; + let launchPeriod: u32; before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - iFace = await deployAndInterfaceContract(context, "Democracy"); + await deployContract(context, "Democracy"); //launchPeriod - launchPeriod = await context.polkadotApi.consts.democracy.launchPeriod; + launchPeriod = context.polkadotApi.consts.democracy.launchPeriod; // notePreimage encodedHash = await notePreimagePrecompile( context, - iFace, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) + DEMOCRACY_INTERFACE, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) ); // propose await sendPrecompileTx( context, - ADDRESS_DEMO_PRECOMPILE, + PRECOMPILE_DEMOCRACY_ADDRESS, SELECTORS, - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, + alith.address, + ALITH_PRIVATE_KEY, "propose", [encodedHash, numberToHex(Number(PROPOSAL_AMOUNT))] ); @@ -221,10 +189,10 @@ describeDevMoonbeam("Democracy - second proposal", (context) => { // second await sendPrecompileTx( context, - ADDRESS_DEMO_PRECOMPILE, + PRECOMPILE_DEMOCRACY_ADDRESS, SELECTORS, - ALITH, - ALITH_PRIV_KEY, + baltathar.address, + BALTATHAR_PRIVATE_KEY, "second", [numberToHex(0), numberToHex(1000)] ); @@ -234,19 +202,16 @@ describeDevMoonbeam("Democracy - second proposal", (context) => { // publicProps const publicProps = await context.polkadotApi.query.democracy.publicProps(); // encodedHash - expect((publicProps.toHuman() as any)[0][1]).to.equal(encodedHash); + expect(publicProps[0][1].toString()).to.equal(encodedHash); // prop author - expect((publicProps.toHuman() as any)[0][2]).to.equal(GENESIS_ACCOUNT); + expect(publicProps[0][2].toString()).to.equal(alith.address); // depositOf const depositOf = await context.polkadotApi.query.democracy.depositOf(0); - expect((depositOf.toHuman() as any)[1]).to.equal("1,000,000,000,000,000,000,000"); - expect((depositOf.toHuman() as any)[0][1]).to.equal(ALITH); - }); - it("check launch period", async function () { - // launchPeriod - expect(launchPeriod.toHuman()).to.equal("7,200"); + expect(depositOf.unwrap()[1].toBigInt()).to.equal(1_000_000_000_000_000_000_000n); + expect(depositOf.unwrap()[0][1].toString()).to.equal(baltathar.address); }); + it("check referendum is up", async function () { this.timeout(1000000); // let Launchperiod elapse to turn the proposal into a referendum @@ -256,50 +221,42 @@ describeDevMoonbeam("Democracy - second proposal", (context) => { } // referendumCount let referendumCount = await context.polkadotApi.query.democracy.referendumCount(); - expect(referendumCount.toHuman()).to.equal("1"); + expect(referendumCount.toNumber()).to.equal(1); // publicPropCount const publicPropCount = await context.polkadotApi.query.democracy.publicPropCount(); - expect(publicPropCount.toHuman()).to.equal("1"); + expect(publicPropCount.toNumber()).to.equal(1); // referendumInfoOf const referendumInfoOf = await context.polkadotApi.query.democracy.referendumInfoOf(0); - expect((referendumInfoOf.toHuman() as any).Ongoing.proposalHash).to.equal(encodedHash); + expect(referendumInfoOf.unwrap().asOngoing.proposalHash.toString()).to.equal(encodedHash); }); }); describeDevMoonbeam("Democracy - vote on referendum", (context) => { - let genesisAccount: KeyringPair, alith: KeyringPair; let encodedHash: `0x${string}`; - let enactmentPeriod, votingPeriod; - let iFace: Interface; + let enactmentPeriod: u32; before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - iFace = await deployAndInterfaceContract(context, "Democracy"); + await deployContract(context, "Democracy"); // enactmentPeriod enactmentPeriod = await context.polkadotApi.consts.democracy.enactmentPeriod; - // votingPeriod - votingPeriod = await context.polkadotApi.consts.democracy.votingPeriod; // encodedHash encodedHash = await notePreimagePrecompile( context, - iFace, - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) + DEMOCRACY_INTERFACE, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) ); // propose await sendPrecompileTx( context, - ADDRESS_DEMO_PRECOMPILE, + PRECOMPILE_DEMOCRACY_ADDRESS, SELECTORS, - GENESIS_ACCOUNT, - GENESIS_ACCOUNT_PRIVATE_KEY, + alith.address, + ALITH_PRIVATE_KEY, "propose", [encodedHash, numberToHex(Number(PROPOSAL_AMOUNT))] ); @@ -307,22 +264,15 @@ describeDevMoonbeam("Democracy - vote on referendum", (context) => { // second await sendPrecompileTx( context, - ADDRESS_DEMO_PRECOMPILE, + PRECOMPILE_DEMOCRACY_ADDRESS, SELECTORS, - ALITH, - ALITH_PRIV_KEY, + baltathar.address, + BALTATHAR_PRIVATE_KEY, "second", [numberToHex(0), numberToHex(1000)] ); }); - it("check enactment period", async function () { - // enactmentPeriod - expect(enactmentPeriod.toHuman()).to.equal("7,200"); - }); - it("check voting Period", async function () { - // votingPeriod - expect(votingPeriod.toHuman()).to.equal("36,000"); - }); + it("vote", async function () { this.timeout(2000000); // let Launchperiod elapse to turn the proposal into a referendum @@ -333,115 +283,70 @@ describeDevMoonbeam("Democracy - vote on referendum", (context) => { // vote await sendPrecompileTx( context, - ADDRESS_DEMO_PRECOMPILE, + PRECOMPILE_DEMOCRACY_ADDRESS, SELECTORS, - ALITH, - ALITH_PRIV_KEY, + alith.address, + ALITH_PRIVATE_KEY, "standard_vote", [numberToHex(0), "0x01", numberToHex(Number(VOTE_AMOUNT)), numberToHex(1)] ); - // referendumInfoOf const referendumInfoOf = await context.polkadotApi.query.democracy.referendumInfoOf(0); - console.log("referendumInfoOf.toHuman() ", referendumInfoOf.toHuman()); - expect((referendumInfoOf.toHuman() as any).Ongoing.proposalHash).to.equal(encodedHash); - expect((referendumInfoOf.toHuman() as any).Ongoing.tally.ayes).to.equal( - "10,000,000,000,000,000,000" + expect(referendumInfoOf.unwrap().asOngoing.proposalHash.toHex()).to.equal(encodedHash); + expect(referendumInfoOf.unwrap().asOngoing.delay.toNumber()).to.equal( + enactmentPeriod.toNumber() ); - expect((referendumInfoOf.toHuman() as any).Ongoing.tally.turnout).to.equal( - "10,000,000,000,000,000,000" + expect(referendumInfoOf.unwrap().asOngoing.tally.ayes.toBigInt()).to.equal( + 10_000_000_000_000_000_000n + ); + expect(referendumInfoOf.unwrap().asOngoing.tally.turnout.toBigInt()).to.equal( + 10_000_000_000_000_000_000n ); - // let votePeriod + enactmentPeriod elapse to turn the proposal into a referendum - for (let i = 0; i < Number(votingPeriod) + Number(enactmentPeriod) + 10; i++) { - await context.createBlock(); - } - let parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(GENESIS_ACCOUNT); - }); -}); - -// When forgetting to call notePreimage, all following steps should work as intended -// until the end where the proposal is never enacted - -describeDevMoonbeam("Democracy - forget notePreimage", (context) => { - let genesisAccount: KeyringPair, alith: KeyringPair; - let encodedHash: string; - let enactmentPeriod, votingPeriod; - let iFace: Interface; - - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); + const referendumHex = referendumInfoOf.toHex(); - iFace = await deployAndInterfaceContract(context, "Democracy"); - // notePreimage - // compute proposal hash but don't submit it - const encodedProposal = - context.polkadotApi.tx.parachainStaking - .setParachainBondAccount(GENESIS_ACCOUNT) - .method.toHex() || ""; - encodedHash = blake2AsHex(encodedProposal); - }); - it("vote", async function () { - this.timeout(200000); + // Instead of waiting votePeriod + enactmentPeriod (which is very long) we hack + // the referendum to be shorter + const blockNumber = (await context.polkadotApi.rpc.chain.getHeader()).number; - // propose - const { events: eventsPropose } = await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.democracy.propose(encodedHash, PROPOSAL_AMOUNT) + // new end block to + const newEndBlock = context.polkadotApi.registry.createType( + "u32", + blockNumber.toBn().add(new BN(2)) ); - expect(eventsPropose[2].toHuman().method).to.eq("Proposed"); - expect(eventsPropose[5].toHuman().method).to.eq("ExtrinsicSuccess"); - await context.createBlock(); - // second - const { events: eventsSecond } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.democracy.second(0, 1000) - ); - expect(eventsSecond[2].toHuman().method).to.eq("Seconded"); - expect(eventsSecond[5].toHuman().method).to.eq("ExtrinsicSuccess"); - // let Launchperiod elapse to turn the proposal into a referendum - // launchPeriod minus the 3 blocks that already elapsed - for (let i = 0; i < 7200; i++) { - await context.createBlock(); - } - // referendumCount - let referendumCount = await context.polkadotApi.query.democracy.referendumCount(); - expect(referendumCount.toHuman()).to.equal("1"); - // vote - await context.createBlock(); - const { events: eventsVote } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.democracy.vote(0, { - Standard: { balance: VOTE_AMOUNT, vote: { aye: true, conviction: 1 } }, - }) + // Set 0 block delay + const delay = context.polkadotApi.registry.createType( + "u32", + referendumInfoOf.unwrap().asOngoing.delay.sub(enactmentPeriod) ); - expect(eventsVote[1].toHuman().method).to.eq("Voted"); - expect(eventsVote[4].toHuman().method).to.eq("ExtrinsicSuccess"); - - // referendumInfoOf - const referendumInfoOf = await context.polkadotApi.query.democracy.referendumInfoOf(0); - expect((referendumInfoOf.toHuman() as any).Ongoing.proposalHash).to.equal(encodedHash); - expect((referendumInfoOf.toHuman() as any).Ongoing.tally.ayes).to.equal( - "10,000,000,000,000,000,000" - ); - expect((referendumInfoOf.toHuman() as any).Ongoing.tally.turnout).to.equal( - "10,000,000,000,000,000,000" - ); + // taking same referendum with different end & delay + const modReferendum = `0x00${newEndBlock.toHex(true).slice(2)}${referendumHex.slice( + 12, + 78 + )}${delay.toHex(true).slice(2)}${referendumHex.slice(86)}`; + + // Changing storage for the referendum using sudo + await context.polkadotApi.tx.sudo + .sudo( + context.polkadotApi.tx.system.setStorage([ + [context.polkadotApi.query.democracy.referendumInfoOf.key(0).toString(), modReferendum], + ]) + ) + .signAndSend(alith); + await context.createBlock(); - // let votePeriod + enactmentPeriod elapse to turn the proposal into a referendum - for (let i = 0; i < Number(votingPeriod) + Number(enactmentPeriod); i++) { + // Waiting extra blocks for the vote to finish + for (let i = 0; i < 2; i++) { await context.createBlock(); } - // the enactement should fail + let parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); + + const referendumDone = await context.polkadotApi.query.democracy.referendumInfoOf(0); + expect(referendumDone.unwrap().isFinished).to.be.true; + expect(referendumDone.unwrap().asFinished.approved.isTrue).to.be.true; + expect(parachainBondInfo.account.toString()).to.equal(alith.address); }); }); diff --git a/tests/tests/test-precompile/test-precompile-dummy-bytecode.ts b/tests/tests/test-precompile/test-precompile-dummy-bytecode.ts index b5f95069fe..14fbc185d2 100644 --- a/tests/tests/test-precompile/test-precompile-dummy-bytecode.ts +++ b/tests/tests/test-precompile/test-precompile-dummy-bytecode.ts @@ -1,10 +1,12 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { GENESIS_ACCOUNT } from "../../util/constants"; -import { customWeb3Request } from "../../util/providers"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract, createTransaction } from "../../util/transactions"; import * as RLP from "rlp"; +import { alith } from "../../util/accounts"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createTransaction } from "../../util/transactions"; + const DEPLOYED_BYTECODE = "0x60006000fd"; // push1 5 (deployed bytecode length) @@ -43,18 +45,16 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - precompiles dummy bytecode", (co it("should revert when dummy bytecode is called", async function () { // we deploy a new contract with the same bytecode to be able to // execute the bytecode instead of executing a precompile. - const createTx = await createTransaction(context, { - data: INIT_CODE, - }); - - await context.createBlock({ - transactions: [createTx], - }); + await context.createBlock( + createTransaction(context, { + data: INIT_CODE, + }) + ); const contractAddress = "0x" + context.web3.utils - .sha3(RLP.encode([GENESIS_ACCOUNT, 0]) as any) + .sha3(RLP.encode([alith.address, 0]) as any) .slice(12) .substring(14); @@ -63,16 +63,15 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - precompiles dummy bytecode", (co expect(code).to.equal(DEPLOYED_BYTECODE); // try to call contract (with empty data, shouldn't matter) - const callTx = await createTransaction(context, { - data: "0x", - to: contractAddress, - }); - - const block = await context.createBlock({ - transactions: [callTx], - }); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const { result } = await context.createBlock( + createTransaction(context, { + gas: 12000000, + data: "0x", + to: contractAddress, + }) + ); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(false); // 21006 = call cost + 2*PUSH cost diff --git a/tests/tests/test-precompile/test-precompile-erc20-overflow.ts b/tests/tests/test-precompile/test-precompile-erc20-overflow.ts new file mode 100644 index 0000000000..8a4e505426 --- /dev/null +++ b/tests/tests/test-precompile/test-precompile-erc20-overflow.ts @@ -0,0 +1,38 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; +import { ethers } from "ethers"; + +import { generateKeyringPair } from "../../util/accounts"; +import { getCompiled } from "../../util/contracts"; +import { expectEVMResult } from "../../util/eth-transactions"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransaction } from "../../util/transactions"; + +describeDevMoonbeam("Precompile ERC20 - Transfering through precompile", (context) => { + const randomAccount = generateKeyringPair(); + // TODO: Remove once v0.9.23 with frontier + it.skip("should not allow overflowing the value", async function () { + const batchInterface = new ethers.utils.Interface((await getCompiled("Batch")).contract.abi); + + // each tx have a different gas limit to ensure it doesn't impact gas used + + const { result } = await context.createBlock( + createTransaction(context, { + to: "0x0000000000000000000000000000000000000808", + data: batchInterface.encodeFunctionData("batchAll", [ + [randomAccount.address], + [`${(2n ** 128n + 5_000_000_000_000_000_000n).toString()}`], + [], + [], + ]), + }) + ); + + expectEVMResult(result.events, "Error", "OutOfFund"); + const account = await context.polkadotApi.query.system.account(randomAccount.address); + expect(account.data.free.toBigInt()).to.equal(0n); + expect(account.data.reserved.toBigInt()).to.equal(0n); + expect(await context.web3.eth.getBalance(randomAccount.address)).to.equal(0n.toString()); + }); +}); diff --git a/tests/tests/test-precompile/test-precompile-erc20.ts b/tests/tests/test-precompile/test-precompile-erc20.ts index d95974f0d8..ea68ddb604 100644 --- a/tests/tests/test-precompile/test-precompile-erc20.ts +++ b/tests/tests/test-precompile/test-precompile-erc20.ts @@ -1,17 +1,22 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { customWeb3Request } from "../../util/providers"; + +import { + alith, + ALITH_GENESIS_TRANSFERABLE_BALANCE, + baltathar, + charleth, +} from "../../util/accounts"; +import { PRECOMPILE_NATIVE_ERC20_ADDRESS } from "../../util/constants"; +import { web3EthCall } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes, DevTestContext } from "../../util/setup-dev-tests"; import { - GENESIS_ACCOUNT, - ALITH, - BALTATHAR, - ALITH_PRIV_KEY, - CHARLETH, - BALTATHAR_PRIV_KEY, -} from "../../util/constants"; -import { createTransaction } from "../../util/transactions"; - -const ADDRESS_ERC20 = "0x0000000000000000000000000000000000000802"; + ALITH_TRANSACTION_TEMPLATE, + BALTATHAR_TRANSACTION_TEMPLATE, + createTransaction, +} from "../../util/transactions"; + const SELECTORS = { balanceOf: "70a08231", totalSupply: "18160ddd", @@ -22,36 +27,30 @@ const SELECTORS = { logApprove: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", }; -const GAS_PRICE = "0x" + (1_000_000_000).toString(16); -async function getBalance(context, blockHeight, address) { +async function getBalance(context: DevTestContext, blockHeight: number, address: string) { const blockHash = await context.polkadotApi.rpc.chain.getBlockHash(blockHeight); - const account = await context.polkadotApi.query.system.account.at(blockHash, address); - return account.data.free; + const apiAt = await context.polkadotApi.at(blockHash); + const account = await apiAt.query.system.account(address); + return account.data.free.toBigInt(); } -async function sendApprove(context, from, fromPrivate, spender, amount) { - const fromData = from.slice(2).padStart(64, "0").toLowerCase(); //web3 rpc returns lowercase +async function sendApprove(context: DevTestContext, spender: string, amount: string) { + const fromData = alith.address.slice(2).padStart(64, "0").toLowerCase(); const spenderData = spender.slice(2).padStart(64, "0").toLowerCase(); - const tx = await createTransaction(context, { - from: from, - privateKey: fromPrivate, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: `0x${SELECTORS.approve}${spenderData}${amount}`, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_NATIVE_ERC20_ADDRESS, + data: `0x${SELECTORS.approve}${spenderData}${amount}`, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); + expect(receipt.logs[0].address).to.eq(PRECOMPILE_NATIVE_ERC20_ADDRESS); expect(receipt.logs[0].data).to.eq(`0x${amount}`); expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); @@ -59,70 +58,54 @@ async function sendApprove(context, from, fromPrivate, spender, amount) { expect(receipt.logs[0].topics[2]).to.eq(`0x${spenderData}`); } -async function checkAllowance(context, owner, spender, amount) { +async function checkAllowance( + context: DevTestContext, + owner: string, + spender: string, + amount: string +) { const ownerData = owner.slice(2).padStart(64, "0"); const spenderData = spender.slice(2).padStart(64, "0"); - const request = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: `0x${SELECTORS.allowance}${ownerData}${spenderData}`, - }, - ]); + const request = await web3EthCall(context.web3, { + to: PRECOMPILE_NATIVE_ERC20_ADDRESS, + data: `0x${SELECTORS.allowance}${ownerData}${spenderData}`, + }); expect(request.result).equals(`0x${amount.padStart(64, "0")}`); } describeDevMoonbeamAllEthTxTypes("Precompiles - ERC20 Native", (context) => { it("allows to call getBalance", async function () { - const address = ALITH.slice(2).padStart(64, "0"); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: `0x${SELECTORS.balanceOf}${address}`, - }, - ]); - - let amount = await getBalance(context, 0, ALITH); - amount = "0x" + amount.toHex().slice(2).padStart(64, "0"); - expect(tx_call.result).equals(amount); + const address = alith.address.slice(2).padStart(64, "0"); + + const request = await web3EthCall(context.web3, { + to: PRECOMPILE_NATIVE_ERC20_ADDRESS, + data: `0x${SELECTORS.balanceOf}${address}`, + }); + + const amount = "0x" + ALITH_GENESIS_TRANSFERABLE_BALANCE.toString(16).padStart(64, "0"); + expect(request.result).equals(amount); }); it("allows to call totalSupply", async function () { - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: `0x${SELECTORS.totalSupply}`, - }, - ]); + const request = await web3EthCall(context.web3, { + to: PRECOMPILE_NATIVE_ERC20_ADDRESS, + data: `0x${SELECTORS.totalSupply}`, + }); const amount = await context.polkadotApi.query.balances.totalIssuance(); const amount_hex = "0x" + amount.toHex().slice(2).padStart(64, "0"); - expect(tx_call.result).equals(amount_hex); + expect(request.result).equals(amount_hex); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - ERC20 Native", (context) => { it("allows to approve transfers, and allowance matches", async function () { const amount = `1000000000000`.padStart(64, "0"); - - await sendApprove(context, ALITH, ALITH_PRIV_KEY, BALTATHAR, amount); - - await checkAllowance(context, ALITH, BALTATHAR, amount); + await sendApprove(context, baltathar.address, amount); + await checkAllowance(context, alith.address, baltathar.address, amount); }); }); @@ -130,31 +113,26 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - ERC20 Native", (context) => { it("allows to call transfer", async function () { const amount = `400000000000`.padStart(64, "0"); - const to = CHARLETH.slice(2).padStart(64, "0"); - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_ERC20, - data: `0x${SELECTORS.transfer}${to}${amount}`, - }); + const to = charleth.address.slice(2).padStart(64, "0"); - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_NATIVE_ERC20_ADDRESS, + data: `0x${SELECTORS.transfer}${to}${amount}`, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); const fees = receipt.gasUsed * 1_000_000_000; - expect(BigInt(await getBalance(context, 1, ALITH))).to.equal( - BigInt(await getBalance(context, 0, ALITH)) - BigInt(`0x${amount}`) - BigInt(fees) + expect(await getBalance(context, 1, alith.address)).to.equal( + (await getBalance(context, 0, alith.address)) - BigInt(`0x${amount}`) - BigInt(fees) ); - expect(BigInt(await getBalance(context, 1, CHARLETH))).to.equal( - BigInt(await getBalance(context, 0, CHARLETH)) + BigInt(`0x${amount}`) + expect(await getBalance(context, 1, charleth.address)).to.equal( + (await getBalance(context, 0, charleth.address)) + BigInt(`0x${amount}`) ); }); }); @@ -164,32 +142,25 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - ERC20 Native", (context) => { const allowedAmount = `1000000000000`.padStart(64, "0"); const transferAmount = `400000000000`.padStart(64, "0"); - await sendApprove(context, ALITH, ALITH_PRIV_KEY, BALTATHAR, allowedAmount); + await sendApprove(context, baltathar.address, allowedAmount); // transferFrom { - const from = ALITH.slice(2).padStart(64, "0").toLowerCase(); // web3 rpc returns lowercase - const to = CHARLETH.slice(2).padStart(64, "0").toLowerCase(); - - const gas_price = await context.web3.eth.getGasPrice(); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: context.web3.utils.toHex(gas_price), - to: ADDRESS_ERC20, - data: `0x${SELECTORS.transferFrom}${from}${to}${transferAmount}`, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const from = alith.address.slice(2).padStart(64, "0").toLowerCase(); + const to = charleth.address.slice(2).padStart(64, "0").toLowerCase(); + + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: PRECOMPILE_NATIVE_ERC20_ADDRESS, + data: `0x${SELECTORS.transferFrom}${from}${to}${transferAmount}`, + }) + ); + + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20); + expect(receipt.logs[0].address).to.eq(PRECOMPILE_NATIVE_ERC20_ADDRESS); expect(receipt.logs[0].data).to.eq(`0x${transferAmount}`); expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); @@ -199,17 +170,17 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - ERC20 Native", (context) => { expect(receipt.status).to.equal(true); } - expect(BigInt(await getBalance(context, 2, ALITH))).to.equal( - BigInt(await getBalance(context, 1, ALITH)) - BigInt(`0x${transferAmount}`) + expect(await getBalance(context, 2, alith.address)).to.equal( + (await getBalance(context, 1, alith.address)) - BigInt(`0x${transferAmount}`) ); - expect(BigInt(await getBalance(context, 2, CHARLETH))).to.equal( - BigInt(await getBalance(context, 1, CHARLETH)) + BigInt(`0x${transferAmount}`) + expect(await getBalance(context, 2, charleth.address)).to.equal( + (await getBalance(context, 1, charleth.address)) + BigInt(`0x${transferAmount}`) ); const newAllowedAmount = ( BigInt(`0x${allowedAmount}`) - BigInt(`0x${transferAmount}`) ).toString(16); - await checkAllowance(context, ALITH, BALTATHAR, newAllowedAmount); + await checkAllowance(context, alith.address, baltathar.address, newAllowedAmount); }); }); @@ -218,39 +189,32 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - ERC20", (context) => { const allowedAmount = `1000000000000`.padStart(64, "0"); const transferAmount = `1400000000000`.padStart(64, "0"); - await sendApprove(context, ALITH, ALITH_PRIV_KEY, BALTATHAR, allowedAmount); + await sendApprove(context, baltathar.address, allowedAmount); // transferFrom { - let from = ALITH.slice(2).padStart(64, "0"); - let to = CHARLETH.slice(2).padStart(64, "0"); - - const gas_price = await context.web3.eth.getGasPrice(); - let tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: context.web3.utils.toHex(gas_price), - to: ADDRESS_ERC20, - data: `0x${SELECTORS.transferFrom}${from}${to}${transferAmount}`, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + let from = alith.address.slice(2).padStart(64, "0"); + let to = charleth.address.slice(2).padStart(64, "0"); + + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: PRECOMPILE_NATIVE_ERC20_ADDRESS, + data: `0x${SELECTORS.transferFrom}${from}${to}${transferAmount}`, + }) + ); + + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(false); // transfer fails because it is not allowed that much } - expect(BigInt(await getBalance(context, 2, ALITH))).to.equal( - BigInt(await getBalance(context, 1, ALITH)) + expect(await getBalance(context, 2, alith.address)).to.equal( + await getBalance(context, 1, alith.address) ); - expect(BigInt(await getBalance(context, 2, CHARLETH))).to.equal( - BigInt(await getBalance(context, 1, CHARLETH)) + expect(await getBalance(context, 2, charleth.address)).to.equal( + await getBalance(context, 1, charleth.address) ); - await checkAllowance(context, ALITH, BALTATHAR, allowedAmount); + await checkAllowance(context, alith.address, baltathar.address, allowedAmount); }); }); diff --git a/tests/tests/test-precompile/test-precompile-local-assets-erc20.ts b/tests/tests/test-precompile/test-precompile-local-assets-erc20.ts index ebb43ed445..686d10a6cb 100644 --- a/tests/tests/test-precompile/test-precompile-local-assets-erc20.ts +++ b/tests/tests/test-precompile/test-precompile-local-assets-erc20.ts @@ -1,32 +1,29 @@ -import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { customWeb3Request } from "../../util/providers"; -import { createBlockWithExtrinsic } from "../../util/substrate-rpc"; +import "@moonbeam-network/api-augment"; -import { - GENESIS_ACCOUNT, - ALITH, - BALTATHAR, - ALITH_PRIV_KEY, - CHARLETH, - BALTATHAR_PRIV_KEY, -} from "../../util/constants"; -import { blake2AsU8a, xxhashAsU8a } from "@polkadot/util-crypto"; import { BN, - hexToU8a, bnToHex, - u8aToHex, - stringToHex, + hexToU8a, numberToHex, + stringToHex, + u8aToHex, u8aToString, } from "@polkadot/util"; -import Keyring from "@polkadot/keyring"; -import { getCompiled } from "../../util/contracts"; +import { expect } from "chai"; import { ethers } from "ethers"; -import { createContract, createTransaction } from "../../util/transactions"; -const ADDRESS_ERC20 = "0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080"; +import { alith, baltathar, charleth } from "../../util/accounts"; +import { registerLocalAssetWithMeta } from "../../util/assets"; +import { getCompiled } from "../../util/contracts"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { + ALITH_TRANSACTION_TEMPLATE, + BALTATHAR_TRANSACTION_TEMPLATE, + createContract, + createTransaction, +} from "../../util/transactions"; + const SELECTORS = { balanceOf: "70a08231", totalSupply: "18160ddd", @@ -38,63 +35,29 @@ const SELECTORS = { logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", }; const GAS_PRICE = "0x" + (1_000_000_000).toString(16); +const LOCAL_ASSET_EXTENDED_ERC20_CONTRACT = getCompiled("LocalAssetExtendedErc20Instance"); + +const LOCAL_ASSET_EXTENDED_ERC20_INTERFACE = new ethers.utils.Interface( + LOCAL_ASSET_EXTENDED_ERC20_CONTRACT.contract.abi +); describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress, contractInstanceAddress; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, baltatharAccount.address, 100000000000000) - ); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: baltathar, amount: 100000000000000n }], + })); + + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to call name", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "name", [] @@ -102,7 +65,7 @@ describeDevMoonbeamAllEthTxTypes( const tx_call = await customWeb3Request(context.web3, "eth_call", [ { - from: ALITH, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -120,7 +83,7 @@ describeDevMoonbeamAllEthTxTypes( }); it("allows to call symbol", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "symbol", [] @@ -128,7 +91,7 @@ describeDevMoonbeamAllEthTxTypes( const tx_call = await customWeb3Request(context.web3, "eth_call", [ { - from: GENESIS_ACCOUNT, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -146,7 +109,7 @@ describeDevMoonbeamAllEthTxTypes( }); it("allows to call decimals", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "decimals", [] @@ -154,7 +117,7 @@ describeDevMoonbeamAllEthTxTypes( const tx_call = await customWeb3Request(context.web3, "eth_call", [ { - from: GENESIS_ACCOUNT, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -168,15 +131,15 @@ describeDevMoonbeamAllEthTxTypes( }); it("allows to call getBalance", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "balanceOf", - [BALTATHAR] + [baltathar.address] ); const tx_call = await customWeb3Request(context.web3, "eth_call", [ { - from: GENESIS_ACCOUNT, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -191,14 +154,14 @@ describeDevMoonbeamAllEthTxTypes( }); it("allows to call totalSupply", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "totalSupply", [] ); const tx_call = await customWeb3Request(context.web3, "eth_call", [ { - from: GENESIS_ACCOUNT, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -219,102 +182,58 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetAddress: string; + let assetId: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: alith, amount: 100000000000000n }], + })); + + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to approve transfers, and allowance matches", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "approve", - [BALTATHAR, 1000] + [baltathar.address, 1000] ); - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); expect(receipt.logs[0].address.toLowerCase()).to.eq(assetAddress); expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - let approvals = (await context.polkadotApi.query.localAssets.approvals( + let approvals = await context.polkadotApi.query.localAssets.approvals( assetId, - ALITH, - BALTATHAR - )) as any; + alith.address, + baltathar.address + ); expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); }); it("should gather the allowance", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "allowance", - [ALITH, BALTATHAR] + [alith.address, baltathar.address] ); const tx_call = await customWeb3Request(context.web3, "eth_call", [ { - from: GENESIS_ACCOUNT, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -334,106 +253,73 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetAddress: string; + let assetId: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: baltathar, amount: 100000000000000n }], + })); assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) + await context.createBlock( + context.polkadotApi.tx.localAssets + .setMetadata(assetId, "Local", "Local", new BN(12)) + .signAsync(baltathar) ); // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) + await context.createBlock( + context.polkadotApi.tx.localAssets + .mint(assetId, alith.address, 100000000000000) + .signAsync(baltathar) ); - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); + it("allows to approve transfer and use transferFrom", async function () { // Create approval - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "approve", - [BALTATHAR, 1000] + [baltathar.address, 1000] ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - let approvals = (await context.polkadotApi.query.localAssets.approvals( + let approvals = await context.polkadotApi.query.localAssets.approvals( assetId, - ALITH, - BALTATHAR - )) as any; + alith.address, + baltathar.address + ); expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); // We are gonna spend 1000 from alith to send it to charleth - data = iFace.encodeFunctionData( + data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "transferFrom", - [ALITH, CHARLETH, 1000] + [alith.address, charleth.address, 1000] ); - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - block = await context.createBlock({ - transactions: [tx], - }); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const { result: newResult } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); + const receipt = await context.web3.eth.getTransactionReceipt(newResult.hash); expect(receipt.logs.length).to.eq(1); expect(receipt.logs[0].address.toLocaleLowerCase()).to.eq(assetAddress); @@ -442,18 +328,18 @@ describeDevMoonbeamAllEthTxTypes( expect(receipt.status).to.equal(true); // Approve amount is null now - approvals = (await context.polkadotApi.query.localAssets.approvals( + approvals = await context.polkadotApi.query.localAssets.approvals( assetId, - ALITH, - BALTATHAR - )) as any; + alith.address, + baltathar.address + ); expect(approvals.isNone).to.eq(true); // Charleth balance is 1000 - let charletBalance = (await context.polkadotApi.query.localAssets.account( + let charletBalance = await context.polkadotApi.query.localAssets.account( assetId, - CHARLETH - )) as any; + charleth.address + ); expect(charletBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); }); }, @@ -463,353 +349,41 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetAddress: string; + let assetId: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: alith, amount: 100000000000000n }], + })); + + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to transfer", async function () { // Create approval - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "transfer", - [BALTATHAR, 1000] - ); - - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - expect(receipt.status).to.equal(true); - - // Baltathar balance is 1000 - let baltatharBalance = (await context.polkadotApi.query.localAssets.account( - assetId, - BALTATHAR - )) as any; - expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); - }); - }, - true -); - -describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress, contractInstanceAddress; - before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - - // set asset address - let setAddressData = iFace.encodeFunctionData( - // action - "set_address_interface", - [context.web3.utils.toChecksumAddress(assetAddress)] - ); - - // We need this because the asset addres is random - // so we need a way to correctly reference it in the contract - let setDataTx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: setAddressData, - }); - - await context.createBlock({ - transactions: [setDataTx], - }); - }); - it("allows to approve transfer and use transferFrom through delegateCalls", async function () { - // Create approval - let data = iFace.encodeFunctionData( - // action - "approve_delegate", - [BALTATHAR, 1000] - ); - - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - let receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - - expect(receipt.status).to.equal(true); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(contractInstanceAddress); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - - let approvals = (await context.polkadotApi.query.localAssets.approvals( - assetId, - ALITH, - BALTATHAR - )) as any; - - expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); - // We are gonna spend 1000 from alith to send it to charleth - data = iFace.encodeFunctionData( - // action - "transferFrom_delegate", - [ALITH, CHARLETH, 1000] - ); - - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(contractInstanceAddress); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receipt.status).to.equal(true); - - // Approve amount is null now - approvals = (await context.polkadotApi.query.localAssets.approvals( - assetId, - ALITH, - BALTATHAR - )) as any; - expect(approvals.isNone).to.eq(true); - - // Charleth balance is 1000 - let charletBalance = (await context.polkadotApi.query.localAssets.account( - assetId, - CHARLETH - )) as any; - expect(charletBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); - }); -}); - -describeDevMoonbeamAllEthTxTypes( - "Precompiles - Assets-ERC20 Wasm", - (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress, contractInstanceAddress; - before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) + [baltathar.address, 1000] ); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - // set asset address - let setAddressData = iFace.encodeFunctionData( - // action - "set_address_interface", - [context.web3.utils.toChecksumAddress(assetAddress)] - ); - - // We need this because the asset addres is random, - // so we need a way to correctly reference it in the contract - let setDataTx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: setAddressData, - }); - - await context.createBlock({ - transactions: [setDataTx], - }); - }); - it("allows to transfer through delegateCall", async function () { - // Create approval - let data = iFace.encodeFunctionData( - // action - "transfer_delegate", - [BALTATHAR, 1000] + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); // Baltathar balance is 1000 - let baltatharBalance = (await context.polkadotApi.query.localAssets.account( + let baltatharBalance = await context.polkadotApi.query.localAssets.account( assetId, - BALTATHAR - )) as any; + baltathar.address + ); expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); }); }, @@ -817,64 +391,32 @@ describeDevMoonbeamAllEthTxTypes( ); describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress, contractInstanceAddress; + let assetId: string; + let assetAddress: string; + let contractInstanceAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); // before we mint asset, since these are non-sufficient, we need to transfer native balance - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.balances.transfer(contractInstanceAddress, 1000) + await context.createBlock( + context.polkadotApi.tx.balances.transfer(contractInstanceAddress, 1000).signAsync(baltathar) ); // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, contractInstanceAddress, 100000000000000) + await context.createBlock( + context.polkadotApi.tx.localAssets + .mint(assetId, contractInstanceAddress, 100000000000000) + .signAsync(baltathar) ); // set asset address - let setAddressData = iFace.encodeFunctionData( + let setAddressData = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "set_address_interface", [context.web3.utils.toChecksumAddress(assetAddress)] @@ -882,31 +424,25 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => // We need this because the asset addres is random, // so we need a way to correctly reference it in the contract - let setDataTx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: setAddressData, - }); - - await context.createBlock({ - transactions: [setDataTx], - }); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: setAddressData, + }) + ); }); it("allows to approve transfer and use transferFrom from contract calls", async function () { // Create approval - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "approve", - [BALTATHAR, 1000] + [baltathar.address, 1000] ); - const tx_call = await customWeb3Request(context.web3, "eth_call", [ + await customWeb3Request(context.web3, "eth_call", [ { - from: ALITH, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -915,21 +451,15 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => }, ]); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: data, + }) + ); - let receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + let receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); @@ -937,35 +467,30 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - let approvals = (await context.polkadotApi.query.localAssets.approvals( + let approvals = await context.polkadotApi.query.localAssets.approvals( assetId, contractInstanceAddress, - BALTATHAR - )) as any; + baltathar.address + ); expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); // We are gonna spend 1000 from contractInstanceAddress to send it to charleth // Since this is a regular call, it will take contractInstanceAddress as msg.sender // thus from & to will be the same, and approval wont be touched - data = iFace.encodeFunctionData( + data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "transferFrom", - [contractInstanceAddress, CHARLETH, 1000] + [contractInstanceAddress, charleth.address, 1000] ); - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const { result: newResult } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: data, + }) + ); + receipt = await context.web3.eth.getTransactionReceipt(newResult.hash); expect(receipt.logs.length).to.eq(1); expect(receipt.logs[0].address.toLowerCase()).to.eq(assetAddress); expect(receipt.logs[0].topics.length).to.eq(3); @@ -973,27 +498,22 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => expect(receipt.status).to.equal(true); // approvals are untouched - approvals = (await context.polkadotApi.query.localAssets.approvals( + approvals = await context.polkadotApi.query.localAssets.approvals( assetId, contractInstanceAddress, - BALTATHAR - )) as any; + baltathar.address + ); expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); // this time we call directly from Baltathar the ERC20 contract - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const { result: baltatharResult } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); + receipt = await context.web3.eth.getTransactionReceipt(baltatharResult.hash); expect(receipt.logs.length).to.eq(1); expect(receipt.logs[0].address.toLowerCase()).to.eq(assetAddress); expect(receipt.logs[0].topics.length).to.eq(3); @@ -1001,74 +521,38 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => expect(receipt.status).to.equal(true); // Approve amount is null now - approvals = (await context.polkadotApi.query.localAssets.approvals( + approvals = await context.polkadotApi.query.localAssets.approvals( assetId, contractInstanceAddress, - BALTATHAR - )) as any; + baltathar.address + ); expect(approvals.isNone).to.eq(true); // Charleth balance is 2000 - let charletBalance = (await context.polkadotApi.query.localAssets.account( + let charletBalance = await context.polkadotApi.query.localAssets.account( assetId, - CHARLETH - )) as any; + charleth.address + ); expect(charletBalance.unwrap()["balance"].eq(new BN(2000))).to.equal(true); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress, contractInstanceAddress; + let assetId: string; + let assetAddress: string; + let contractInstanceAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: alith, amount: 100000000000000n }], + })); - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); // set asset address - let setAddressData = iFace.encodeFunctionData( + let setAddressData = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "set_address_interface", [context.web3.utils.toChecksumAddress(assetAddress)] @@ -1076,43 +560,32 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => // We need this because the asset addres is random, // so we need a way to correctly reference it in the contract - let setDataTx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: setAddressData, - }); - - await context.createBlock({ - transactions: [setDataTx], - }); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: setAddressData, + }) + ); }); + it("Bob approves contract and use transferFrom from contract calls", async function () { // Create approval - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "approve", [contractInstanceAddress, 1000] ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - let receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + let receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); @@ -1120,34 +593,29 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - let approvals = (await context.polkadotApi.query.localAssets.approvals( + let approvals = await context.polkadotApi.query.localAssets.approvals( assetId, - ALITH, + alith.address, contractInstanceAddress - )) as any; + ); expect(approvals.unwrap().amount.eq(new BN(1000))).to.equal(true); - // We are gonna spend 1000 from ALITH to send it to charleth from contract address + // We are gonna spend 1000 from alith.address to send it to charleth from contract address // even if Bob calls, msg.sender will become the contract with regular calls - data = iFace.encodeFunctionData( + data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "transferFrom", - [ALITH, CHARLETH, 1000] + [alith.address, charleth.address, 1000] ); - tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - block = await context.createBlock({ - transactions: [tx], - }); - receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const { result: baltatharResult } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: data, + }) + ); + receipt = await context.web3.eth.getTransactionReceipt(baltatharResult.hash); expect(receipt.logs.length).to.eq(1); expect(receipt.logs[0].address.toLowerCase()).to.eq(assetAddress); expect(receipt.logs[0].topics.length).to.eq(3); @@ -1155,18 +623,18 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => expect(receipt.status).to.equal(true); // Approve amount is null now - approvals = (await context.polkadotApi.query.localAssets.approvals( + approvals = await context.polkadotApi.query.localAssets.approvals( assetId, - ALITH, + alith.address, contractInstanceAddress - )) as any; + ); expect(approvals.isNone).to.eq(true); // Charleth balance is 1000 - let charletBalance = (await context.polkadotApi.query.localAssets.account( + let charletBalance = await context.polkadotApi.query.localAssets.account( assetId, - CHARLETH - )) as any; + charleth.address + ); expect(charletBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); }); }); @@ -1174,64 +642,27 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - Assets-ERC20 Wasm", (context) => describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress, contractInstanceAddress; + let assetId: string; + let assetAddress: string; + let contractInstanceAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); contractInstanceAddress = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); // before we mint asset, since these are non-sufficient, we need to transfer native balance - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.balances.transfer(contractInstanceAddress, 1000) + await context.createBlock( + context.polkadotApi.tx.balances.transfer(contractInstanceAddress, 1000).signAsync(baltathar) ); - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, contractInstanceAddress, 100000000000000) - ); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: contractInstanceAddress, amount: 100000000000000n }], + })); + // set asset address - let setAddressData = iFace.encodeFunctionData( + let setAddressData = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "set_address_interface", [context.web3.utils.toChecksumAddress(assetAddress)] @@ -1239,50 +670,38 @@ describeDevMoonbeamAllEthTxTypes( // We need this because the asset addres is random, // so we need a way to correctly reference it in the contract - let setDataTx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: setAddressData, - }); - - await context.createBlock({ - transactions: [setDataTx], - }); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: setAddressData, + }) + ); }); it("allows to transfer through call from SC ", async function () { // Create approval - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "transfer", - [BALTATHAR, 1000] + [baltathar.address, 1000] ); - let tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: contractInstanceAddress, - data: data, - }); - - let block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: contractInstanceAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); // Baltathar balance is 1000 - let baltatharBalance = (await context.polkadotApi.query.localAssets.account( + let baltatharBalance = await context.polkadotApi.query.localAssets.account( assetId, - BALTATHAR - )) as any; + baltathar.address + ); expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); }); }, @@ -1292,71 +711,33 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to mint", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "mint", - [BALTATHAR, 1000] + [baltathar.address, 1000] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); @@ -1364,12 +745,12 @@ describeDevMoonbeamAllEthTxTypes( expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - let baltatharBalance = (await context.polkadotApi.query.localAssets.account( + let baltatharBalance = await context.polkadotApi.query.localAssets.account( assetId, - BALTATHAR - )) as any; + baltathar.address + ); - expect(baltatharBalance.unwrap()["balance"].eq(new BN(1000))).to.equal(true); + expect(baltatharBalance.unwrap().balance.toBigInt()).to.equal(1000n); }); }, true @@ -1378,78 +759,35 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; + let contractInstanceAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: alith, amount: 100000000000000n }], + })); + + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to burn", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "burn", - [ALITH, 1000000000000] + [alith.address, 1000000000000] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); expect(receipt.logs.length).to.eq(1); @@ -1457,10 +795,10 @@ describeDevMoonbeamAllEthTxTypes( expect(receipt.logs[0].topics.length).to.eq(3); expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - let alithBalance = (await context.polkadotApi.query.localAssets.account( + let alithBalance = await context.polkadotApi.query.localAssets.account( assetId, - ALITH - )) as any; + alith.address + ); expect(alithBalance.unwrap()["balance"].eq(new BN(99000000000000))).to.equal(true); }); @@ -1471,78 +809,38 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: alith, amount: 100000000000000n }], + })); + + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to freeze account", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "freeze", - [ALITH] + [alith.address] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - let alithFrozen = (await context.polkadotApi.query.localAssets.account( - assetId, - ALITH - )) as any; + let alithFrozen = await context.polkadotApi.query.localAssets.account(assetId, alith.address); expect(alithFrozen.unwrap()["isFrozen"].toHuman()).to.be.true; }); @@ -1553,86 +851,47 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + mints: [{ account: alith, amount: 100000000000000n }], + })); + + await context.createBlock( + await context.polkadotApi.tx.localAssets.freeze(assetId, alith.address).signAsync(baltathar) ); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // mint asset - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.mint(assetId, sudoAccount.address, 100000000000000) - ); - - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.freeze(assetId, sudoAccount.address) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to thaw account", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "thaw", - [ALITH] + [alith.address] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - let baltatharFrozen = (await context.polkadotApi.query.localAssets.account( + let baltatharFrozen = await context.polkadotApi.query.localAssets.account( assetId, - ALITH - )) as any; + alith.address + ); - expect(baltatharFrozen.unwrap()["isFrozen"].toHuman()).to.be.false; + expect(baltatharFrozen.unwrap().isFrozen.isFalse).to.be.true; }); }, true @@ -1641,77 +900,42 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.freeze(assetId, sudoAccount.address) + await context.createBlock( + context.polkadotApi.tx.localAssets.freeze(assetId, alith.address).signAsync(baltathar) ); - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); it("allows to freeze an asset", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "freeze_asset" ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - const registeredAsset = ( - (await context.polkadotApi.query.localAssets.asset(assetId)) as any - ).unwrap(); + const registeredAsset = (await context.polkadotApi.query.localAssets.asset(assetId)).unwrap(); - expect(registeredAsset.isFrozen.toHuman()).to.be.true; + expect(registeredAsset.isFrozen.isTrue).to.be.true; }); }, true @@ -1720,75 +944,41 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.freezeAsset(assetId) + await context.createBlock( + context.polkadotApi.tx.localAssets.freezeAsset(assetId).signAsync(baltathar) ); - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); + it("allows to thaw an asset", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "thaw_asset" ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - const registeredAsset = ( - (await context.polkadotApi.query.localAssets.asset(assetId)) as any - ).unwrap(); + const registeredAsset = (await context.polkadotApi.query.localAssets.asset(assetId)).unwrap(); expect(registeredAsset.isFrozen.toHuman()).to.be.false; }); @@ -1799,72 +989,43 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock( + context.polkadotApi.tx.localAssets.freeze(assetId, alith.address).signAsync(baltathar) + ); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); + it("allows to transfer ownership", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "transfer_ownership", - [ALITH] + [alith.address] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - const registeredAsset = ( - (await context.polkadotApi.query.localAssets.asset(assetId)) as any - ).unwrap(); + const registeredAsset = (await context.polkadotApi.query.localAssets.asset(assetId)).unwrap(); - expect(registeredAsset.owner.toHex()).to.eq(ALITH.toLowerCase()); + expect(registeredAsset.owner.toHex()).to.eq(alith.address.toLowerCase()); }); }, true @@ -1873,74 +1034,41 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); + it("allows to set team", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "set_team", - [ALITH, ALITH, ALITH] + [alith.address, alith.address, alith.address] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - const registeredAsset = ( - (await context.polkadotApi.query.localAssets.asset(assetId)) as any - ).unwrap(); + const registeredAsset = (await context.polkadotApi.query.localAssets.asset(assetId)).unwrap(); - expect(registeredAsset.admin.toHex()).to.eq(ALITH.toLowerCase()); - expect(registeredAsset.freezer.toHex()).to.eq(ALITH.toLowerCase()); - expect(registeredAsset.issuer.toHex()).to.eq(ALITH.toLowerCase()); + expect(registeredAsset.admin.toHex()).to.eq(alith.address.toLowerCase()); + expect(registeredAsset.freezer.toHex()).to.eq(alith.address.toLowerCase()); + expect(registeredAsset.issuer.toHex()).to.eq(alith.address.toLowerCase()); }); }, true @@ -1949,68 +1077,37 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); + it("allows to set metadata", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "set_metadata", ["Local", "LOC", 12] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - const metadata = (await context.polkadotApi.query.localAssets.metadata(assetId)) as any; + const metadata = await context.polkadotApi.query.localAssets.metadata(assetId); expect(u8aToString(metadata.name)).to.eq("Local"); expect(u8aToString(metadata.symbol)).to.eq("LOC"); @@ -2023,75 +1120,37 @@ describeDevMoonbeamAllEthTxTypes( describeDevMoonbeamAllEthTxTypes( "Precompiles - Assets-ERC20 Wasm", (context) => { - let sudoAccount, baltatharAccount, assetId, iFace, assetAddress; + let assetId: string; + let assetAddress: string; before("Setup contract and mock balance", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltatharAccount = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - sudoAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerLocalAsset( - baltatharAccount.address, - baltatharAccount.address, - true, - new BN(1) - ) - ) - ); - - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); - - // Set metadata - await createBlockWithExtrinsic( - context, - baltatharAccount, - context.polkadotApi.tx.localAssets.setMetadata(assetId, "Local", "Local", new BN(12)) - ); - - const contractData = await getCompiled("LocalAssetExtendedErc20Instance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + // register, setMeta & mint local Asset + ({ assetId, assetAddress } = await registerLocalAssetWithMeta(context, alith, { + registrerAccount: baltathar, + })); + const { rawTx } = await createContract(context, "LocalAssetExtendedErc20Instance"); + await context.createBlock(rawTx); }); + it("allows to clear metadata", async function () { - let data = iFace.encodeFunctionData( + let data = LOCAL_ASSET_EXTENDED_ERC20_INTERFACE.encodeFunctionData( // action "clear_metadata", [] ); - const tx = await createTransaction(context, { - from: BALTATHAR, - privateKey: BALTATHAR_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: assetAddress, - data: data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: assetAddress, + data: data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); - const metadata = (await context.polkadotApi.query.localAssets.metadata(assetId)) as any; + const metadata = await context.polkadotApi.query.localAssets.metadata(assetId); expect(u8aToString(metadata.name)).to.eq(""); expect(u8aToString(metadata.symbol)).to.eq(""); diff --git a/tests/tests/test-precompile/test-precompile-modexp.ts b/tests/tests/test-precompile/test-precompile-modexp.ts index 05f0bd9f15..c1715d0148 100644 --- a/tests/tests/test-precompile/test-precompile-modexp.ts +++ b/tests/tests/test-precompile/test-precompile-modexp.ts @@ -1,16 +1,24 @@ -import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract } from "../../util/transactions"; +import "@moonbeam-network/api-augment"; -describeDevMoonbeamAllEthTxTypes("Precompiles - ModExp", (context) => { +import { expectEVMResult } from "../../util/eth-transactions"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; + +describeDevMoonbeam("Precompiles - modexp", (context) => { it("should be accessible from a smart contract", async function () { - // See also the ModExp unit tests at - // github.com/paritytech/frontier/blob/378221a4/frame/evm/precompile/modexp/src/lib.rs#L101 - const { contract, rawTx } = await createContract(context, "ModularCheck"); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "HasherChecker"); + await context.createBlock(rawTx); + + // Execute the contract modexp call + const { result } = await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.modExpChecker(), + }) + ); - // The contract should deploy successfully and the receipt should show success. - const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); - expect(receipt.status).to.be.true; + // Verify the result + expectEVMResult(result.events, "Succeed"); }); }); diff --git a/tests/tests/test-precompile/test-precompile-relay-encoder.ts b/tests/tests/test-precompile/test-precompile-relay-encoder.ts index aeab92a8d5..a76fc00036 100644 --- a/tests/tests/test-precompile/test-precompile-relay-encoder.ts +++ b/tests/tests/test-precompile/test-precompile-relay-encoder.ts @@ -1,38 +1,31 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { customWeb3Request } from "../../util/providers"; import { ethers } from "ethers"; -import { getCompiled } from "../../util/contracts"; - -import { GENESIS_ACCOUNT } from "../../util/constants"; -const ADDRESS_RELAY_ENCODER = "0x0000000000000000000000000000000000000805"; -const ALICE_HEX = "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"; - -const BOB_HEX = "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48"; +import { ALITH_SESSION_ADDRESS, BALTATHAR_SESSION_ADDRESS } from "../../util/accounts"; +import { PRECOMPILE_RELAY_ENCODER_ADDRESS } from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { web3EthCall } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -const GAS_PRICE = "0x" + (1_000_000_000).toString(16); +const RELAY_ENCODER_CONTRACT = getCompiled("RelayEncoderInstance"); +const RELAY_ENCODER_INTERFACE = new ethers.utils.Interface(RELAY_ENCODER_CONTRACT.contract.abi); describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { - let iFace; - let contractData; - before("Deploy contract", async () => { - contractData = await getCompiled("RelayEncoderInstance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - }); it("allows to get encoding of bond stake call", async function () { - const data = iFace.encodeFunctionData("encode_bond", [ALICE_HEX, 100, 0x02]); - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_bond", [ + ALITH_SESSION_ADDRESS, + 100, + 0x02, + ]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000026" + "060000d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a5" + @@ -41,20 +34,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of bond_more stake call", async function () { - const data = iFace.encodeFunctionData("encode_bond_extra", [100]); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_bond_extra", [100]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000004" + "0601910100000000000000000000000000000000000000000000000000000000" @@ -62,20 +49,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of unbond stake call", async function () { - const data = iFace.encodeFunctionData("encode_unbond", [100]); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_unbond", [100]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000004" + "0602910100000000000000000000000000000000000000000000000000000000" @@ -83,20 +64,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of chill stake call", async function () { - const data = iFace.encodeFunctionData("encode_chill", []); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_chill", []), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000002" + "0606000000000000000000000000000000000000000000000000000000000000" @@ -104,19 +79,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of withdraw_unbonded stake call", async function () { - const data = iFace.encodeFunctionData("encode_withdraw_unbonded", [100]); - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_withdraw_unbonded", [100]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000006" + "0603640000000000000000000000000000000000000000000000000000000000" @@ -124,25 +94,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of validate stake call", async function () { - const data = iFace.encodeFunctionData("encode_validate", [100000000, false]); - - // this is parts per billion. we are going to set it to 10%, i.e., 100000000 - const comission = `5F5E100`.padStart(64, "0"); - // this is for the blocked boolean. We set it to false - const blocked = `0`.padStart(64, "0"); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_validate", [100000000, false]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000007" + "06040284d7170000000000000000000000000000000000000000000000000000" @@ -150,20 +109,16 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of nominate stake call", async function () { - const data = iFace.encodeFunctionData("encode_nominate", [[ALICE_HEX, BOB_HEX]]); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_nominate", [ + [ALITH_SESSION_ADDRESS, BALTATHAR_SESSION_ADDRESS], + ]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000045" + "06050800d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7" + @@ -173,20 +128,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of set_payee stake call", async function () { - const data = iFace.encodeFunctionData("encode_set_payee", [0x02]); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_set_payee", [0x02]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000003" + "0607020000000000000000000000000000000000000000000000000000000000" @@ -194,20 +143,16 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of set_controller stake call", async function () { - const data = iFace.encodeFunctionData("encode_set_controller", [ALICE_HEX]); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_set_controller", [ + ALITH_SESSION_ADDRESS, + ]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000023" + "060800d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a5" + @@ -216,20 +161,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - relay-encoder", (context) => { }); it("allows to get encoding of rebond stake call", async function () { - const data = iFace.encodeFunctionData("encode_rebond", [100]); - - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_RELAY_ENCODER, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_RELAY_ENCODER_ADDRESS, + data: RELAY_ENCODER_INTERFACE.encodeFunctionData("encode_rebond", [100]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000004" + "0613910100000000000000000000000000000000000000000000000000000000" diff --git a/tests/tests/test-precompile/test-precompile-revert-attack.ts b/tests/tests/test-precompile/test-precompile-revert-attack.ts index cfc20015d5..b38385ed33 100644 --- a/tests/tests/test-precompile/test-precompile-revert-attack.ts +++ b/tests/tests/test-precompile/test-precompile-revert-attack.ts @@ -1,68 +1,64 @@ // Moon-808 // What happens if one calls // function score_a_free_delegation() public payable{ +import "@moonbeam-network/api-augment"; -// // We delegate our target collator with all the tokens provided -// staking.delegate(target, msg.value); -// revert("By reverting this transaction, we return the eth to the caller"); -// } -// Would the delegation pass in substrate but get the eth back in the evm? -// We have to make sure that's not possible - +import { numberToHex } from "@polkadot/util"; import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { GENESIS_ACCOUNT, MIN_GLMR_STAKING } from "../../util/constants"; -import { getCompiled } from "../../util/contracts"; +import { alith } from "../../util/accounts"; +import { MIN_GLMR_STAKING } from "../../util/constants"; +import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { + ALITH_TRANSACTION_TEMPLATE, createContract, createContractExecution, - GENESIS_TRANSACTION, } from "../../util/transactions"; -import { numberToHex } from "@polkadot/util"; -describeDevMoonbeamAllEthTxTypes( - "Precompiles - test revert attack on state modifier", - (context) => { - it("should return contract creation gas cost", async function () { - // Check initial balance - const initialBalance = await context.web3.eth.getBalance(GENESIS_ACCOUNT); - // Deploy atatck contract - const { contract, rawTx } = await createContract(context, "StakingDelegationAttaker"); - await context.createBlock({ transactions: [rawTx] }); +// // We delegate our target collator with all the tokens provided +// staking.delegate(target, msg.value); +// revert("By reverting this transaction, we return the eth to the caller"); +// } +// Would the delegation pass in substrate but get the eth back in the evm? +// We have to make sure that's not possible + +describeDevMoonbeamAllEthTxTypes("Precompiles - Reverting Staking precompile", (context) => { + it("should not revert the whole transaction cost", async function () { + // Check initial balance + const initialBalance = await context.web3.eth.getBalance(alith.address); + // Deploy attack contract + const { contract, rawTx } = await createContract(context, "StakingAttacker"); + await context.createBlock(rawTx); - // call the payable function, which should revert - const block = await context.createBlock({ - transactions: [ - await createContractExecution( - context, - { - contract, - contractCall: contract.methods.score_a_free_delegation(), - }, - { - ...GENESIS_TRANSACTION, - value: numberToHex(Number(MIN_GLMR_STAKING)), - } - ), - ], - }); + // call the payable function, which should revert + const { result } = await context.createBlock( + createContractExecution( + context, + { + contract, + contractCall: contract.methods.score_a_free_delegation(), + }, + { + ...ALITH_TRANSACTION_TEMPLATE, + value: numberToHex(Number(MIN_GLMR_STAKING)), + } + ) + ); - // TX should be included but fail - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - expect(receipt.status).to.eq(false); + // TX should be included but fail + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + expect(receipt.status).to.eq(false); - // Delegation shouldn't have passed - const nominatorsAfter = await context.polkadotApi.query.parachainStaking.delegatorState( - GENESIS_ACCOUNT - ); - expect(nominatorsAfter.toHuman()).to.eq(null); + // Delegation shouldn't have passed + const nominatorsAfter = await context.polkadotApi.query.parachainStaking.delegatorState( + alith.address + ); + expect(nominatorsAfter.toHuman()).to.eq(null); - // balance dif should only be tx fee, not MIN_GLMR_STAKING - expect( - Number(initialBalance) - Number(await context.web3.eth.getBalance(GENESIS_ACCOUNT)) < - Number(MIN_GLMR_STAKING) - ).to.eq(true); - }); - } -); + // balance dif should only be tx fee, not MIN_GLMR_STAKING + expect( + Number(initialBalance) - Number(await context.web3.eth.getBalance(alith.address)) < + Number(MIN_GLMR_STAKING) + ).to.eq(true); + }); +}); diff --git a/tests/tests/test-precompile/test-precompile-ripemd160.ts b/tests/tests/test-precompile/test-precompile-ripemd160.ts index ca406f797b..fea2ebdc52 100644 --- a/tests/tests/test-precompile/test-precompile-ripemd160.ts +++ b/tests/tests/test-precompile/test-precompile-ripemd160.ts @@ -1,38 +1,40 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { GENESIS_ACCOUNT } from "../../util/constants"; -import { customWeb3Request } from "../../util/providers"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract } from "../../util/transactions"; +import { expectEVMResult } from "../../util/eth-transactions"; + +import { web3EthCall } from "../../util/providers"; +import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Precompiles - ripemd160 ", (context) => { it("should be valid", async function () { - const txCall = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: context.web3.utils.numberToHex(1_000_000_000), - to: "0x0000000000000000000000000000000000000003", - data: `0x${Buffer.from("Hello world!").toString("hex")}`, - }, - ]); - - expect(txCall.result).equals( - "0x0000000000000000000000007f772647d88750add82d8e1a7a3e5c0902a346a3" - ); + expect( + ( + await web3EthCall(context.web3, { + to: "0x0000000000000000000000000000000000000003", + data: `0x${Buffer.from("Hello world!").toString("hex")}`, + }) + ).result + ).equals("0x0000000000000000000000007f772647d88750add82d8e1a7a3e5c0902a346a3"); }); }); -describeDevMoonbeamAllEthTxTypes("Precompiles - ripemd160 ", (context) => { +describeDevMoonbeam("Precompiles - ripemd160 ", (context) => { it("should be accessible from a smart contract", async function () { - const { contract, rawTx } = await createContract(context, "HashRipmd160"); - await context.createBlock({ transactions: [rawTx] }); + // Deploy the contract + const { contract, rawTx } = await createContract(context, "HasherChecker"); + await context.createBlock(rawTx); - // Because the call to ripemd160 is in the constructor of HashRipmd160, verifying the code - // is enough - expect(await context.web3.eth.getCode("0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a")).equals( - "0x6080604052600080fdfea26469706673582212202a18a661fdf5ea3600714f19a16e1681d5c651e" + - "3b23f5a55166c1372b7f4119b64736f6c63430008030033" + // Execute the contract ripemd160 call + const { result } = await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.ripemd160Check(), + }) ); + + // Verify the result + expectEVMResult(result.events, "Succeed"); }); }); diff --git a/tests/tests/test-precompile/test-precompile-sha3fips.ts b/tests/tests/test-precompile/test-precompile-sha3fips.ts index 3aa61e695b..a7a77d282b 100644 --- a/tests/tests/test-precompile/test-precompile-sha3fips.ts +++ b/tests/tests/test-precompile/test-precompile-sha3fips.ts @@ -1,25 +1,22 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + +import { web3EthCall } from "../../util/providers"; import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { customWeb3Request } from "../../util/providers"; -import { GENESIS_ACCOUNT } from "../../util/constants"; describeDevMoonbeamAllEthTxTypes("Precompiles - sha3fips", (context) => { // Test taken from https://github.com/binance-chain/bsc/pull/118 it("sha3fips should be valid", async function () { - const tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: GENESIS_ACCOUNT, - value: "0x0", - gas: "0x10000", - gasPrice: context.web3.utils.numberToHex(1_000_000_000), - to: "0x0000000000000000000000000000000000000400", - data: - "0x0448250ebe88d77e0a12bcf530fe6a2cf1ac176945638d309b840d631940c93b78c2bd6d16f227a8877e" + - "3f1604cd75b9c5a8ab0cac95174a8a0a0f8ea9e4c10bca", - }, - ]); - expect(tx_call.result).equals( - "0xc7647f7e251bf1bd70863c8693e93a4e77dd0c9a689073e987d51254317dc704" - ); + expect( + ( + await web3EthCall(context.web3, { + to: "0x0000000000000000000000000000000000000400", + data: + "0x0448250ebe88d77e0a12bcf530fe6a2cf1ac176945638d309b840d631940c93b78c2bd6d16f227a887" + + "7e3f1604cd75b9c5a8ab0cac95174a8a0a0f8ea9e4c10bca", + }) + ).result + ).equals("0xc7647f7e251bf1bd70863c8693e93a4e77dd0c9a689073e987d51254317dc704"); }); }); diff --git a/tests/tests/test-precompile/test-precompile-staking.ts b/tests/tests/test-precompile/test-precompile-staking.ts index f44c51eda1..8c9b81c434 100644 --- a/tests/tests/test-precompile/test-precompile-staking.ts +++ b/tests/tests/test-precompile/test-precompile-staking.ts @@ -1,142 +1,134 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; -import { - DEFAULT_GENESIS_MAPPING, - DEFAULT_GENESIS_STAKING, - COLLATOR_ACCOUNT, - ETHAN_PRIVKEY, - MIN_GLMR_STAKING, - ETHAN, - ALITH, - MIN_GLMR_NOMINATOR, - GENESIS_ACCOUNT, - ALITH_PRIV_KEY, -} from "../../util/constants"; -import { blake2AsHex, randomAsHex } from "@polkadot/util-crypto"; -import { - describeDevMoonbeam, - describeDevMoonbeamAllEthTxTypes, - DevTestContext, -} from "../../util/setup-dev-tests"; -import { numberToHex, stringToHex } from "@polkadot/util"; -import Web3 from "web3"; -import { customWeb3Request } from "../../util/providers"; -import { callPrecompile, sendPrecompileTx } from "../../util/transactions"; -import { verifyLatestBlockFees } from "../../util/block"; +import { ethers } from "ethers"; -const ADDRESS_STAKING = "0x0000000000000000000000000000000000000800"; - -const SELECTORS = { - candidate_bond_less: "289b6ba7", - candidate_bond_more: "c57bd3a8", - go_offline: "767e0450", - go_online: "d2f73ceb", - is_candidate: "8545c833", - is_selected_candidate: "8f6d27c7", - is_delegator: "8e5080e7", - join_candidates: "0a1bff60", - leave_candidates: "72b02a31", - leave_delegators: "b71d2153", - min_nomination: "c9f593b2", - nominate: "49df6eb3", - nominator_bond_less: "f6a52569", - nominator_bond_more: "971d44c8", - revoke_nomination: "4b65c34b", - points: "9799b4e7", - candidate_count: "4b1c4c29", - collator_nomination_count: "0ad6a7be", - nominator_nomination_count: "dae5659b", - delegation_request_is_pending: "192e1db3", -}; - -async function isSelectedCandidate(context: DevTestContext, address: string) { - return await callPrecompile(context, ADDRESS_STAKING, SELECTORS, "is_selected_candidate", [ - address, - ]); -} - -async function IsDelegator(context: DevTestContext, address: string) { - return await callPrecompile(context, ADDRESS_STAKING, SELECTORS, "is_delegator", [address]); -} - -async function isCandidate(context: DevTestContext, address: string) { - return await callPrecompile(context, ADDRESS_STAKING, SELECTORS, "is_candidate", [address]); -} - -async function candidateCount(context: DevTestContext) { - return await callPrecompile(context, ADDRESS_STAKING, SELECTORS, "candidate_count", []); -} - -async function delegationRequestIsPending( - context: DevTestContext, - delegatorAddress: string, - collatorAddress: string -) { - return await callPrecompile( - context, - ADDRESS_STAKING, - SELECTORS, - "delegation_request_is_pending", - [delegatorAddress, collatorAddress] - ); -} - -describeDevMoonbeam("Staking - Genesis", (context) => { +import { alith, ethan } from "../../util/accounts"; +import { verifyLatestBlockFees } from "../../util/block"; +import { MIN_GLMR_STAKING, PRECOMPILE_PARACHAIN_STAKING_ADDRESS } from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { web3EthCall } from "../../util/providers"; +import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; +import { createTransaction, ETHAN_TRANSACTION_TEMPLATE } from "../../util/transactions"; + +const PARACHAIN_STAKING_CONTRACT = getCompiled("ParachainStaking"); +const PARACHAIN_STAKING_INTERFACE = new ethers.utils.Interface( + PARACHAIN_STAKING_CONTRACT.contract.abi +); + +describeDevMoonbeam("Precompiles - Staking - Genesis", (context) => { it("should include collator from the specs", async function () { - expect(Number((await isSelectedCandidate(context, COLLATOR_ACCOUNT)).result)).to.equal(1); + const { result } = await web3EthCall(context.web3, { + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("is_selected_candidate", [ + alith.address, + ]), + }); + + expect(Number(result)).to.equal(1); }); + it("should have one collator", async function () { - expect(Number((await candidateCount(context)).result)).to.equal(1); + const { result } = await web3EthCall(context.web3, { + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("candidate_count"), + }); + + expect(Number(result)).to.equal(1); }); }); -describeDevMoonbeamAllEthTxTypes("Staking - Join Candidates", (context) => { - it("should successfully call joinCandidates on ETHAN", async function () { - const block = await sendPrecompileTx( - context, - ADDRESS_STAKING, - SELECTORS, - ETHAN, - ETHAN_PRIVKEY, - "join_candidates", - [numberToHex(Number(MIN_GLMR_STAKING)), numberToHex(1)] +describeDevMoonbeamAllEthTxTypes("Precompiles - Staking - Join Candidates", (context) => { + before("add ethan as candidate", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ETHAN_TRANSACTION_TEMPLATE, + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("join_candidates", [ + MIN_GLMR_STAKING, + 1, + ]), + }) ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.equal(true); + }); - let candidatesAfter = await context.polkadotApi.query.parachainStaking.candidatePool(); - expect((candidatesAfter.toJSON() as { owner: string; amount: string }[]).length).to.equal( - 2, - "New candidate should have been added" - ); - expect((candidatesAfter.toJSON() as { owner: string; amount: string }[])[1].owner).to.equal( - ETHAN, + it("should successfully call joinCandidates on ethan", async function () { + const candidatesAfter = await context.polkadotApi.query.parachainStaking.candidatePool(); + expect(candidatesAfter.length).to.equal(2, "New candidate should have been added"); + expect(candidatesAfter[1].owner.toString()).to.equal( + ethan.address, "New candidate ethan should have been added" ); - expect((candidatesAfter.toJSON() as { owner: string; amount: string }[])[1].amount).to.equal( - "0x000000000000003635c9adc5dea00000", + expect(candidatesAfter[1].amount.toBigInt()).to.equal( + 1000000000000000000000n, "new candidate ethan should have been added (wrong amount)" ); - expect(Number((await isCandidate(context, ETHAN)).result)).to.equal(1); - await verifyLatestBlockFees(context, expect, MIN_GLMR_STAKING); + const { result } = await web3EthCall(context.web3, { + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("is_candidate", [alith.address]), + }); + + expect(Number(result)).to.equal(1); + await verifyLatestBlockFees(context, 0n); }); }); -describeDevMoonbeamAllEthTxTypes("Staking - Join Delegators", (context) => { - beforeEach("should successfully call delegate for ETHAN to ALITH", async function () { - await sendPrecompileTx(context, ADDRESS_STAKING, SELECTORS, ETHAN, ETHAN_PRIVKEY, "nominate", [ - ALITH, - numberToHex(Number(MIN_GLMR_STAKING)), - "0x0", - "0x0", - ]); +describeDevMoonbeamAllEthTxTypes("Precompiles - Staking - Collator Leaving", (context) => { + before("add ethan to candidates", async () => { + const { result } = await context.createBlock( + createTransaction(context, { + ...ETHAN_TRANSACTION_TEMPLATE, + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("join_candidates", [ + MIN_GLMR_STAKING, + 1, + ]), + }) + ); + + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + expect(receipt.status).to.equal(true); + }); + + it("should successfully call candidate_exit_is_pending on ethan", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ETHAN_TRANSACTION_TEMPLATE, + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("candidate_exit_is_pending", [ + ethan.address, + ]), + }) + ); + + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + expect(receipt.status).to.equal(true); + }); +}); + +describeDevMoonbeamAllEthTxTypes("Precompiles - Staking - Join Delegators", (context) => { + beforeEach("should successfully call delegate for ethan.address to ALITH", async function () { + await context.createBlock( + createTransaction(context, { + ...ETHAN_TRANSACTION_TEMPLATE, + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("delegate", [ + alith.address, + MIN_GLMR_STAKING, + 0, + 0, + ]), + }) + ); }); it("should have successfully delegated ALITH", async function () { const delegatorsAfter = ( - (await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN)) as any + (await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address)) as any ).unwrap(); expect( ( @@ -144,36 +136,55 @@ describeDevMoonbeamAllEthTxTypes("Staking - Join Delegators", (context) => { delegations: { owner: string; amount: string }[]; } ).delegations[0].owner - ).to.equal(ALITH, "delegation didn't go through"); + ).to.equal(alith.address, "delegation didn't go through"); expect(delegatorsAfter.status.toString()).equal("Active"); }); }); -describeDevMoonbeamAllEthTxTypes("Staking - Join Delegators", (context) => { - let ethan; - before("should successfully call delegate for ETHAN to ALITH", async function () { - const keyring = new Keyring({ type: "ethereum" }); - ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - - // Delegate ETHAN->ALITH - await sendPrecompileTx(context, ADDRESS_STAKING, SELECTORS, ETHAN, ETHAN_PRIVKEY, "nominate", [ - ALITH, - numberToHex(Number(MIN_GLMR_STAKING)), - "0x0", - "0x0", - ]); +describeDevMoonbeamAllEthTxTypes("Precompiles - Staking - Join Delegators", (context) => { + before("should successfully call delegate for ethan.address to ALITH", async function () { + // Delegate ethan.address->ALITH + await context.createBlock( + createTransaction(context, { + ...ETHAN_TRANSACTION_TEMPLATE, + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("delegate", [ + alith.address, + MIN_GLMR_STAKING, + 0, + 0, + ]), + }) + ); + + const { result } = await web3EthCall(context.web3, { + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("delegation_request_is_pending", [ + ethan.address, + alith.address, + ]), + }); + + expect(Number(result)).to.equal(0); }); it("should verify delegation pending requests", async function () { - expect(Number((await delegationRequestIsPending(context, ETHAN, ALITH)).result)).to.equal(0); - // Schedule Revoke - await context.polkadotApi.tx.parachainStaking - .scheduleRevokeDelegation(ALITH) - .signAndSend(ethan); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ); // Check that there exists a pending request - expect(Number((await delegationRequestIsPending(context, ETHAN, ALITH)).result)).to.equal(1); + const { result } = await web3EthCall(context.web3, { + to: PRECOMPILE_PARACHAIN_STAKING_ADDRESS, + data: PARACHAIN_STAKING_INTERFACE.encodeFunctionData("delegation_request_is_pending", [ + ethan.address, + alith.address, + ]), + }); + + expect(Number(result)).to.equal(1); }); }); diff --git a/tests/tests/test-precompile/test-precompile-xcm-transactor.ts b/tests/tests/test-precompile/test-precompile-xcm-transactor.ts index 11ac3e63c1..191b2d9a0c 100644 --- a/tests/tests/test-precompile/test-precompile-xcm-transactor.ts +++ b/tests/tests/test-precompile/test-precompile-xcm-transactor.ts @@ -1,169 +1,85 @@ +import "@moonbeam-network/api-augment"; + +import { BN } from "@polkadot/util"; import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { customWeb3Request } from "../../util/providers"; import { ethers } from "ethers"; -import { getCompiled } from "../../util/contracts"; -import { createContract, createTransaction } from "../../util/transactions"; -import { BN, hexToU8a, bnToHex, u8aToHex } from "@polkadot/util"; -import Keyring from "@polkadot/keyring"; -import { blake2AsU8a, xxhashAsU8a } from "@polkadot/util-crypto"; -import { ALITH, ALITH_PRIV_KEY } from "../../util/constants"; + +import { alith } from "../../util/accounts"; +import { mockAssetBalance, RELAY_V1_SOURCE_LOCATION } from "../../util/assets"; import { verifyLatestBlockFees } from "../../util/block"; +import { PRECOMPILE_XCM_TRANSACTOR_ADDRESS } from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { web3EthCall } from "../../util/providers"; +import { describeDevMoonbeamAllEthTxTypes, DevTestContext } from "../../util/setup-dev-tests"; +import { + ALITH_TRANSACTION_TEMPLATE, + createContract, + createTransaction, +} from "../../util/transactions"; -const ADDRESS_XCM_TRANSACTOR = "0x0000000000000000000000000000000000000806"; const ADDRESS_RELAY_ASSETS = "0xffffffff1fcacbd218edc0eba20fc2308c778080"; +const XCM_TRANSACTOR_CONTRACT = getCompiled("XcmTransactorInstance"); +const XCM_TRANSACTOR_INTERFACE = new ethers.utils.Interface(XCM_TRANSACTOR_CONTRACT.contract.abi); -const GAS_PRICE = "0x" + (1_000_000_000).toString(16); - -async function mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId) { - // Register the asset - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - sourceLocationRelayAssetType, - relayAssetMetadata, - new BN(1), - true - ) +const registerXcmTransactorAndContract = async (context: DevTestContext) => { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.xcmTransactor.register(alith.address, 0) ) - .signAndSend(sudoAccount); - await context.createBlock(); - - let assets = ( - (await context.polkadotApi.query.assetManager.assetIdType(assetId)) as any - ).toJSON(); - // make sure we created it - expect(assets["xcm"]["parents"]).to.equal(1); - - // Get keys to modify balance - let module = xxhashAsU8a(new TextEncoder().encode("Assets"), 128); - let account_key = xxhashAsU8a(new TextEncoder().encode("Account"), 128); - let blake2concatAssetId = new Uint8Array([ - ...blake2AsU8a(assetId.toU8a(), 128), - ...assetId.toU8a(), - ]); - let blake2concatAccount = new Uint8Array([ - ...blake2AsU8a(hexToU8a(ALITH), 128), - ...hexToU8a(ALITH), - ]); - let overallAccountKey = new Uint8Array([ - ...module, - ...account_key, - ...blake2concatAssetId, - ...blake2concatAccount, - ]); - - // Get keys to modify total supply - let assetKey = xxhashAsU8a(new TextEncoder().encode("Asset"), 128); - let overallAssetKey = new Uint8Array([...module, ...assetKey, ...blake2concatAssetId]); - - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.system.setStorage([ - [u8aToHex(overallAccountKey), u8aToHex(assetBalance.toU8a())], - [u8aToHex(overallAssetKey), u8aToHex(assetDetails.toU8a())], - ]) + ); + + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.xcmTransactor.setTransactInfo( + RELAY_V1_SOURCE_LOCATION, + new BN(0), + new BN(20000000000), + new BN(0) + ) ) - .signAndSend(sudoAccount); - await context.createBlock(); - return; -} - -interface AssetMetadata { - name: string; - symbol: string; - decimals: BN; - isFrozen: boolean; -} -const relayAssetMetadata: AssetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: new BN(12), - isFrozen: false, -}; + ); -const sourceLocationRelayVersioned = { v1: { parents: 1, interior: "Here" } }; + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.xcmTransactor.setFeePerSecond( + RELAY_V1_SOURCE_LOCATION, + new BN(1000000000000) + ) + ) + ); -const sourceLocationRelayAssetType = { XCM: { parents: 1, interior: "Here" } }; + const { rawTx } = await createContract(context, "XcmTransactorInstance"); + await context.createBlock(rawTx); +}; describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { - let sudoAccount, iFace, alith; before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // register index 0 for Alith - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.xcmTransactor.register(ALITH, 0)) - .signAndSend(sudoAccount); - await context.createBlock(); - - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.xcmTransactor.setTransactInfo( - sourceLocationRelayVersioned, - new BN(0), - new BN(1000000000000), - new BN(20000000000) - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - const contractData = await getCompiled("XcmTransactorInstance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XcmTransactorInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - alith = keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); + await registerXcmTransactorAndContract(context); }); it("allows to retrieve index through precompiles", async function () { - let data = iFace.encodeFunctionData( - // action - "index_to_account", - [0] - ); - let tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: ALITH, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_XCM_TRANSACTOR, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( - "0x000000000000000000000000f24ff3a9cf04c71dbc94d0b566f7a27b94566cac" - ); + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, + data: XCM_TRANSACTOR_INTERFACE.encodeFunctionData("index_to_account", [0]), + }) + ).result + ).to.equal("0x000000000000000000000000f24ff3a9cf04c71dbc94d0b566f7a27b94566cac"); }); - it("allows to retrieve transactor info through precompiles", async function () { - let asset = - // Destination as multilocation - [ - // one parent - 1, - [], - ]; - let data = iFace.encodeFunctionData( - // action - "transact_info", - [asset] - ); - let tx_call = await customWeb3Request(context.web3, "eth_call", [ - { - from: ALITH, - value: "0x0", - gas: "0x10000", - gasPrice: GAS_PRICE, - to: ADDRESS_XCM_TRANSACTOR, - data: data, - }, - ]); - - expect(tx_call.result).to.equal( + it("allows to retrieve transactor info through precompiles old interface", async function () { + // Destination as multilocation, one parent + const asset: [number, {}[]] = [1, []]; + + expect( + ( + await web3EthCall(context.web3, { + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, + data: XCM_TRANSACTOR_INTERFACE.encodeFunctionData("transact_info", [asset]), + }) + ).result + ).to.equal( "0x0000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000e8d4a51000" + "00000000000000000000000000000000000000000000000000000004a817c800" @@ -186,21 +102,29 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { supply: balance, }); - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId); - - let beforeAssetBalance = (await context.polkadotApi.query.assets.account( + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, assetId, - ALITH - )) as any; - let beforeAssetDetails = (await context.polkadotApi.query.assets.asset(assetId)) as any; + alith.address, + true + ); + + const beforeAssetBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); + const beforeAssetDetails = await context.polkadotApi.query.assets.asset(assetId.toU8a()); // supply and balance should be the same - expect(beforeAssetBalance.unwrap()["balance"].eq(new BN(100000000000000))).to.equal(true); - expect(beforeAssetDetails.unwrap()["supply"].eq(new BN(100000000000000))).to.equal(true); + expect(beforeAssetBalance.unwrap().balance.toBigInt()).to.equal(100000000000000n); + expect(beforeAssetDetails.unwrap().supply.toBigInt()).to.equal(100000000000000n); - let transactor = 0; - let index = 0; - let asset = + const transactor = 0; + const index = 0; + const asset: [number, {}[]] = // Destination as multilocation [ // one parent @@ -208,74 +132,45 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { [], ]; // we dont care, the call wont be executed - let transact_call = new Uint8Array([0x01]); + const transact_call = new Uint8Array([0x01]); // weight - let weight = 1000; + const weight = 1000; // Call the precompile - let data = iFace.encodeFunctionData( + const data = XCM_TRANSACTOR_INTERFACE.encodeFunctionData( // action "transact_through_derivative_multilocation", [transactor, index, asset, weight, transact_call] ); - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_XCM_TRANSACTOR, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, + data, + }) + ); // We have used 1000 units to pay for the fees in the relay, so balance and supply should // have changed - let afterAssetBalance = (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any; + const afterAssetBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); - let expectedBalance = new BN(100000000000000).sub(new BN(1000)); - expect(afterAssetBalance.unwrap()["balance"].eq(expectedBalance)).to.equal(true); + const expectedBalance = 100000000000000n - 1000n; + expect(afterAssetBalance.unwrap().balance.toBigInt()).to.equal(expectedBalance); - let AfterAssetDetails = (await context.polkadotApi.query.assets.asset(assetId)) as any; + const AfterAssetDetails = await context.polkadotApi.query.assets.asset(assetId.toU8a()); - expect(AfterAssetDetails.unwrap()["supply"].eq(expectedBalance)).to.equal(true); + expect(AfterAssetDetails.unwrap().supply.toBigInt()).to.equal(expectedBalance); // 1000 fee for the relay is paid with relay assets - await verifyLatestBlockFees(context, expect); + await verifyLatestBlockFees(context); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { - let sudoAccount, iFace, alith; before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // register index 0 for Alith - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.xcmTransactor.register(ALITH, 0)) - .signAndSend(sudoAccount); - await context.createBlock(); - - await context.polkadotApi.tx.sudo - .sudo( - context.polkadotApi.tx.xcmTransactor.setTransactInfo( - sourceLocationRelayVersioned, - new BN(0), - new BN(1000000000000), - new BN(20000000000) - ) - ) - .signAndSend(sudoAccount); - await context.createBlock(); - - const contractData = await getCompiled("XcmTransactorInstance"); - iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XcmTransactorInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); - alith = keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); + await registerXcmTransactorAndContract(context); }); it("allows to issue transfer xcm transactor with currency Id", async function () { @@ -295,60 +190,206 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { supply: balance, }); - await mockAssetBalance(context, assetBalance, assetDetails, sudoAccount, assetId); - - let beforeAssetBalance = (await context.polkadotApi.query.assets.account( + await mockAssetBalance( + context, + assetBalance, + assetDetails, + alith, assetId, - ALITH - )) as any; + alith.address, + true + ); + + const beforeAssetBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); - let beforeAssetDetails = (await context.polkadotApi.query.assets.asset(assetId)) as any; + const beforeAssetDetails = await context.polkadotApi.query.assets.asset(assetId.toU8a()); // supply and balance should be the same - expect(beforeAssetBalance.unwrap()["balance"].eq(new BN(100000000000000))).to.equal(true); - expect(beforeAssetDetails.unwrap()["supply"].eq(new BN(100000000000000))).to.equal(true); + expect(beforeAssetBalance.unwrap().balance.toBigInt()).to.equal(100000000000000n); + expect(beforeAssetDetails.unwrap().supply.toBigInt()).to.equal(100000000000000n); - let transactor = 0; - let index = 0; + const transactor = 0; + const index = 0; // Destination as currency Id address - let asset = ADDRESS_RELAY_ASSETS; + const asset = ADDRESS_RELAY_ASSETS; // we dont care, the call wont be executed - let transact_call = new Uint8Array([0x01]); + const transact_call = new Uint8Array([0x01]); // weight - let weight = 1000; + const weight = 1000; // Call the precompile - let data = iFace.encodeFunctionData( + const data = XCM_TRANSACTOR_INTERFACE.encodeFunctionData( // action "transact_through_derivative", [transactor, index, asset, weight, transact_call] ); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, + data, + }) + ); + + // We have used 1000 units to pay for the fees in the relay, so balance and supply should + // have changed + const afterAssetBalance = await context.polkadotApi.query.assets.account( + assetId.toU8a(), + alith.address + ); + + const expectedBalance = 100000000000000n - 1000n; + expect(afterAssetBalance.unwrap().balance.toBigInt()).to.equal(expectedBalance); + + const AfterAssetDetails = await context.polkadotApi.query.assets.asset(assetId.toU8a()); + + expect(AfterAssetDetails.unwrap().supply.toBigInt()).to.equal(expectedBalance); + + // 1000 fee for the relay is paid with relay assets + await verifyLatestBlockFees(context); + }); +}); - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: GAS_PRICE, - to: ADDRESS_XCM_TRANSACTOR, +describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { + before("Setup genesis account and relay accounts", async () => { + await registerXcmTransactorAndContract(context); + }); + + it("allows to retrieve fee per second through precompiles", async function () { + const asset: [number, {}[]] = + // asset as multilocation + [ + // one parent + 1, + [], + ]; + const data = XCM_TRANSACTOR_INTERFACE.encodeFunctionData( + // action + "fee_per_second", + [asset] + ); + const tx_call = await web3EthCall(context.web3, { + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, data, }); - const block = await context.createBlock({ - transactions: [tx], + expect(tx_call.result).to.equal( + "0x000000000000000000000000000000000000000000000000000000e8d4a51000" + ); + }); + + it("allows to retrieve transactor info through precompiles", async function () { + const asset: [number, {}[]] = + // Destination as multilocation + [ + // one parent + 1, + [], + ]; + const data = XCM_TRANSACTOR_INTERFACE.encodeFunctionData( + // action + "transact_info_with_signed", + [asset] + ); + const tx_call = await web3EthCall(context.web3, { + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, + data, }); - // We have used 1000 units to pay for the fees in the relay, so balance and supply should - // have changed - let afterAssetBalance = (await context.polkadotApi.query.assets.account(assetId, ALITH)) as any; + expect(tx_call.result).to.equal( + "0x0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "00000000000000000000000000000000000000000000000000000004a817c800" + ); + }); +}); - let expectedBalance = new BN(100000000000000).sub(new BN(1000)); - expect(afterAssetBalance.unwrap()["balance"].eq(expectedBalance)).to.equal(true); +describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { + before("Setup genesis account and relay accounts", async () => { + await registerXcmTransactorAndContract(context); + }); - let AfterAssetDetails = (await context.polkadotApi.query.assets.asset(assetId)) as any; + it("allows to issue transfer signed xcm transactor with currency Id", async function () { + // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet + // And we need relay tokens for issuing a transaction to be executed in the relay + const dest: [number, {}[]] = + // Destination as multilocation + [ + // one parent + 1, + [], + ]; + // Destination as currency Id address + const asset = ADDRESS_RELAY_ASSETS; + // we dont care, the call wont be executed + const transact_call = new Uint8Array([0x01]); + // weight + const weight = 1000; + // Call the precompile + const data = XCM_TRANSACTOR_INTERFACE.encodeFunctionData( + // action + "transact_through_signed", + [dest, asset, weight, transact_call] + ); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, + data, + }) + ); + + // 1000 fee for the relay is paid with relay assets + await verifyLatestBlockFees(context); + }); +}); + +describeDevMoonbeamAllEthTxTypes("Precompiles - xcm transactor", (context) => { + before("Setup genesis account and relay accounts", async () => { + await registerXcmTransactorAndContract(context); + }); + + it("allows to issue transfer signed xcm transactor with multilocation", async function () { + // We need to mint units with sudo.setStorage, as we dont have xcm mocker yet + // And we need relay tokens for issuing a transaction to be executed in the relay + const dest: [number, {}[]] = + // Destination as multilocation + [ + // one parent + 1, + [], + ]; + // asset as multilocation + const asset: [number, {}[]] = + // Destination as multilocation + [ + // one parent + 1, + [], + ]; + // we dont care, the call wont be executed + const transact_call = new Uint8Array([0x01]); + // weight + const weight = 1000; + // Call the precompile + const data = XCM_TRANSACTOR_INTERFACE.encodeFunctionData( + // action + "transact_through_signed_multilocation", + [dest, asset, weight, transact_call] + ); - expect(AfterAssetDetails.unwrap()["supply"].eq(expectedBalance)).to.equal(true); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XCM_TRANSACTOR_ADDRESS, + data, + }) + ); // 1000 fee for the relay is paid with relay assets - await verifyLatestBlockFees(context, expect); + await verifyLatestBlockFees(context); }); }); diff --git a/tests/tests/test-precompile/test-precompile-xtokens.ts b/tests/tests/test-precompile/test-precompile-xtokens.ts index 30286679ef..c6c31421a8 100644 --- a/tests/tests/test-precompile/test-precompile-xtokens.ts +++ b/tests/tests/test-precompile/test-precompile-xtokens.ts @@ -1,29 +1,36 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; import { ethers } from "ethers"; -import { getCompiled } from "../../util/contracts"; -import { createContract, createTransaction } from "../../util/transactions"; -import { customWeb3Request } from "../../util/providers"; -import { GAS_PRICE, GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../../util/constants"; +import { alith } from "../../util/accounts"; import { verifyLatestBlockFees } from "../../util/block"; +import { + MIN_GAS_PRICE, + PRECOMPILE_NATIVE_ERC20_ADDRESS, + PRECOMPILE_XTOKENS_ADDRESS, +} from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { describeDevMoonbeamAllEthTxTypes, DevTestContext } from "../../util/setup-dev-tests"; +import { + ALITH_TRANSACTION_TEMPLATE, + createContract, + createTransaction, +} from "../../util/transactions"; -const ADDRESS_XTOKENS = "0x0000000000000000000000000000000000000804"; -export const BALANCES_ADDRESS = "0x0000000000000000000000000000000000000802"; +const XTOKENS_CONTRACT = getCompiled("XtokensInstance"); +const XTOKENS_INTERFACE = new ethers.utils.Interface(XTOKENS_CONTRACT.contract.abi); -async function getBalance(context, blockHeight, address) { +async function getBalance(context: DevTestContext, blockHeight: number, address: string) { const blockHash = await context.polkadotApi.rpc.chain.getBlockHash(blockHeight); const account = await context.polkadotApi.query.system.account.at(blockHash, address); - return account.data.free; + return account.data.free.toBigInt(); } describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { it("allows to issue transfer xtokens", async function () { - const contractData = await getCompiled("XtokensInstance"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XtokensInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "XtokensInstance"); + await context.createBlock(rawTx); // Junction::AccountId32 const destination_enum_selector = "0x01"; // [0x01; 32] @@ -35,7 +42,7 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { // We will transfer the tokens the former account in the relay chain // However it does not really matter as we are not testing what happens // in the relay side of things - let destination = + const destination = // Destination as multilocation [ // one parent @@ -44,17 +51,17 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { [destination_enum_selector + destination_address + destination_network_id], ]; // 1000 units - let amountTransferred = 1000; + const amountTransferred = 1000n; // weight - let weight = 100; + const weight = 100n; - const data = iFace.encodeFunctionData( + const data = XTOKENS_INTERFACE.encodeFunctionData( // action "transfer", [ // address of the multiasset, in this case our own balances - BALANCES_ADDRESS, + PRECOMPILE_NATIVE_ERC20_ADDRESS, // amount amountTransferred, // Destination as multilocation @@ -64,42 +71,29 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { ] ); - const base_fee = await context.web3.eth.getGasPrice(); - - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_XTOKENS, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XTOKENS_ADDRESS, + data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - const fees = BigInt(receipt.gasUsed) * BigInt(base_fee); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + const fees = BigInt(receipt.gasUsed) * MIN_GAS_PRICE; // our tokens + fees should have been spent - expect(BigInt(await getBalance(context, 2, GENESIS_ACCOUNT))).to.equal( - BigInt(await getBalance(context, 1, GENESIS_ACCOUNT)) - - BigInt(amountTransferred) - - BigInt(fees) + expect(await getBalance(context, 2, alith.address)).to.equal( + (await getBalance(context, 1, alith.address)) - amountTransferred - fees ); - await verifyLatestBlockFees(context, expect, BigInt(amountTransferred)); + await verifyLatestBlockFees(context, amountTransferred); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { it("allows to issue transfer xtokens with fee", async function () { - const contractData = await getCompiled("XtokensInstance"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XtokensInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "XtokensInstance"); + await context.createBlock(rawTx); // Junction::AccountId32 const destination_enum_selector = "0x01"; // [0x01; 32] @@ -111,7 +105,7 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { // We will transfer the tokens the former account in the relay chain // However it does not really matter as we are not testing what happens // in the relay side of things - let destination = + const destination = // Destination as multilocation [ // one parent @@ -120,20 +114,20 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { [destination_enum_selector + destination_address + destination_network_id], ]; // 1000 units - let amountTransferred = 1000; + const amountTransferred = 1000n; // 100 units - let fee = 100; + const fee = 100n; // weight - let weight = 100; + const weight = 100n; - const data = iFace.encodeFunctionData( + const data = XTOKENS_INTERFACE.encodeFunctionData( // action "transfer_with_fee", [ // address of the multiasset, in this case our own balances - BALANCES_ADDRESS, + PRECOMPILE_NATIVE_ERC20_ADDRESS, // amount amountTransferred, // fee @@ -145,43 +139,29 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { ] ); - const base_fee = await context.web3.eth.getGasPrice(); - - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_XTOKENS, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XTOKENS_ADDRESS, + data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - const fees = BigInt(receipt.gasUsed) * BigInt(base_fee); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + const fees = BigInt(receipt.gasUsed) * MIN_GAS_PRICE; // our tokens + fees should have been spent - expect(BigInt(await getBalance(context, 2, GENESIS_ACCOUNT))).to.equal( - BigInt(await getBalance(context, 1, GENESIS_ACCOUNT)) - - BigInt(amountTransferred) - - BigInt(fee) - - BigInt(fees) + expect(await getBalance(context, 2, alith.address)).to.equal( + (await getBalance(context, 1, alith.address)) - amountTransferred - BigInt(fee) - fees ); - await verifyLatestBlockFees(context, expect, BigInt(amountTransferred + fee)); + await verifyLatestBlockFees(context, BigInt(amountTransferred + fee)); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { it("allows to issue transfer_multiasset xtokens", async function () { - const contractData = await getCompiled("XtokensInstance"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XtokensInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "XtokensInstance"); + await context.createBlock(rawTx); // Junction::AccountId32 const destination_enum_selector = "0x01"; // [0x01; 32] @@ -196,18 +176,18 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { // This represents X1(PalletInstance(3))) // This multilocation represents our native token - let asset = [ + const asset = [ // zero parents 0, // X1(PalletInstance) - // PalletInstance: Selector (04) + pallet instance 1 byte (03) + // PalletInstance: Selector (04) + palconst instance 1 byte (03) [x2_pallet_instance_enum_selector + x2_instance], ]; // This represents X2(Parent, AccountId32([0x01; 32])) // We will transfer the tokens the former account in the relay chain // However it does not really matter as we are not testing what happens // in the relay side of things - let destination = + const destination = // Destination as multilocation [ // one parent @@ -216,13 +196,13 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { [destination_enum_selector + destination_address + destination_network_id], ]; // 1000 units - let amountTransferred = 1000; + const amountTransferred = 1000n; // weight - let weight = 100; + const weight = 100; // encode the input with ethers - const data = iFace.encodeFunctionData( + const data = XTOKENS_INTERFACE.encodeFunctionData( // action "transfer_multiasset", [ @@ -238,40 +218,29 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { const base_fee = await context.web3.eth.getGasPrice(); // create tx - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_XTOKENS, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - const fees = BigInt(receipt.gasUsed) * BigInt(base_fee); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XTOKENS_ADDRESS, + data, + }) + ); + + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + const fees = BigInt(receipt.gasUsed) * MIN_GAS_PRICE; // our tokens + fees should have been spent - expect(BigInt(await getBalance(context, 2, GENESIS_ACCOUNT))).to.equal( - BigInt(await getBalance(context, 1, GENESIS_ACCOUNT)) - - BigInt(amountTransferred) - - BigInt(fees) + expect(await getBalance(context, 2, alith.address)).to.equal( + (await getBalance(context, 1, alith.address)) - amountTransferred - fees ); - await verifyLatestBlockFees(context, expect, BigInt(amountTransferred)); + await verifyLatestBlockFees(context, amountTransferred); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { it("allows to issue transfer_multiasset xtokens with fee", async function () { - const contractData = await getCompiled("XtokensInstance"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XtokensInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "XtokensInstance"); + await context.createBlock(rawTx); // Junction::AccountId32 const destination_enum_selector = "0x01"; // [0x01; 32] @@ -286,18 +255,18 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { // This represents X1(PalletInstance(3))) // This multilocation represents our native token - let asset = [ + const asset = [ // one parent 0, // X1(PalletInstance) - // PalletInstance: Selector (04) + pallet instance 1 byte (03) + // PalletInstance: Selector (04) + palconst instance 1 byte (03) [x2_pallet_instance_enum_selector + x2_instance], ]; // This represents X2(Parent, AccountId32([0x01; 32])) // We will transfer the tokens the former account in the relay chain // However it does not really matter as we are not testing what happens // in the relay side of things - let destination = + const destination = // Destination as multilocation [ // one parent @@ -306,16 +275,16 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { [destination_enum_selector + destination_address + destination_network_id], ]; // 1000 units - let amountTransferred = 1000; + const amountTransferred = 1000n; // 100 units - let fee = 100; + const fee = 100n; // weight - let weight = 100; + const weight = 100; // encode the input with ethers - const data = iFace.encodeFunctionData( + const data = XTOKENS_INTERFACE.encodeFunctionData( // action "transfer_multiasset_with_fee", [ @@ -333,41 +302,30 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { const base_fee = await context.web3.eth.getGasPrice(); // create tx - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_XTOKENS, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - const fees = BigInt(receipt.gasUsed) * BigInt(base_fee); + + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XTOKENS_ADDRESS, + data, + }) + ); + + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + const fees = BigInt(receipt.gasUsed) * MIN_GAS_PRICE; // our tokens + fees should have been spent - expect(BigInt(await getBalance(context, 2, GENESIS_ACCOUNT))).to.equal( - BigInt(await getBalance(context, 1, GENESIS_ACCOUNT)) - - BigInt(amountTransferred) - - BigInt(fee) - - BigInt(fees) + expect(await getBalance(context, 2, alith.address)).to.equal( + (await getBalance(context, 1, alith.address)) - amountTransferred - BigInt(fee) - fees ); - await verifyLatestBlockFees(context, expect, BigInt(amountTransferred + fee)); + await verifyLatestBlockFees(context, amountTransferred + fee); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { it("allows to issue transfer multicurrencies xtokens", async function () { - const contractData = await getCompiled("XtokensInstance"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XtokensInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "XtokensInstance"); + await context.createBlock(rawTx); // Junction::AccountId32 const destination_enum_selector = "0x01"; // [0x01; 32] @@ -375,14 +333,14 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { // NetworkId::Any const destination_network_id = "00"; // 1000 units - let amountTransferred = 1000; - let currencies = [[BALANCES_ADDRESS, amountTransferred]]; + const amountTransferred = 1000n; + const currencies = [[PRECOMPILE_NATIVE_ERC20_ADDRESS, amountTransferred]]; // This represents X2(Parent, AccountId32([0x01; 32])) // We will transfer the tokens the former account in the relay chain // However it does not really matter as we are not testing what happens // in the relay side of things - let destination = + const destination = // Destination as multilocation [ // one parent @@ -392,12 +350,12 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { ]; // fee_item - let fee_item = 0; + const fee_item = 0; // weight - let weight = 100; + const weight = 100; - const data = iFace.encodeFunctionData( + const data = XTOKENS_INTERFACE.encodeFunctionData( // action "transfer_multi_currencies", [ @@ -411,43 +369,29 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { weight, ] ); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XTOKENS_ADDRESS, + data, + }) + ); - const base_fee = await context.web3.eth.getGasPrice(); - - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_XTOKENS, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); - - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - const fees = BigInt(receipt.gasUsed) * BigInt(base_fee); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + const fees = BigInt(receipt.gasUsed) * MIN_GAS_PRICE; // our tokens + fees should have been spent - expect(BigInt(await getBalance(context, 2, GENESIS_ACCOUNT))).to.equal( - BigInt(await getBalance(context, 1, GENESIS_ACCOUNT)) - - BigInt(amountTransferred) - - BigInt(fees) + expect(await getBalance(context, 2, alith.address)).to.equal( + (await getBalance(context, 1, alith.address)) - amountTransferred - fees ); - await verifyLatestBlockFees(context, expect, BigInt(amountTransferred)); + await verifyLatestBlockFees(context, amountTransferred); }); }); describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { it("allows to issue transfer multiassets xtokens", async function () { - const contractData = await getCompiled("XtokensInstance"); - const iFace = new ethers.utils.Interface(contractData.contract.abi); - const { contract, rawTx } = await createContract(context, "XtokensInstance"); - const address = contract.options.address; - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "XtokensInstance"); + await context.createBlock(rawTx); // Junction::AccountId32 const destination_enum_selector = "0x01"; // [0x01; 32] @@ -455,28 +399,28 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { // NetworkId::Any const destination_network_id = "00"; // 1000 units - let amountTransferred = 1000; + const amountTransferred = 1000n; // Junction::PalletInstance(3) const x2_pallet_instance_enum_selector = "0x04"; const x2_instance = "03"; // This multilocation represents our native token - let asset = [ + const asset = [ // one parent 0, // X1(PalletInstance) - // PalletInstance: Selector (04) + pallet instance 1 byte (03) + // PalletInstance: Selector (04) + palconst instance 1 byte (03) [x2_pallet_instance_enum_selector + x2_instance], ]; - let multiassets = [[asset, amountTransferred]]; + const multiassets = [[asset, amountTransferred]]; // This represents X2(Parent, AccountId32([0x01; 32])) // We will transfer the tokens the former account in the relay chain // However it does not really matter as we are not testing what happens // in the relay side of things - let destination = + const destination = // Destination as multilocation [ // one parent @@ -486,12 +430,12 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { ]; // fee_item - let fee_item = 0; + const fee_item = 0; // weight - let weight = 100; + const weight = 100; - const data = iFace.encodeFunctionData( + const data = XTOKENS_INTERFACE.encodeFunctionData( // action "transfer_multi_assets", [ @@ -506,31 +450,21 @@ describeDevMoonbeamAllEthTxTypes("Precompiles - xtokens", (context) => { ] ); - const base_fee = await context.web3.eth.getGasPrice(); - - const tx = await createTransaction(context, { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, - value: "0x0", - gas: "0x200000", - gasPrice: base_fee, - to: ADDRESS_XTOKENS, - data, - }); - - const block = await context.createBlock({ - transactions: [tx], - }); + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_XTOKENS_ADDRESS, + data, + }) + ); - const receipt = await context.web3.eth.getTransactionReceipt(block.txResults[0].result); - const fees = BigInt(receipt.gasUsed) * BigInt(base_fee); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); + const fees = BigInt(receipt.gasUsed) * MIN_GAS_PRICE; // our tokens + fees should have been spent - expect(BigInt(await getBalance(context, 2, GENESIS_ACCOUNT))).to.equal( - BigInt(await getBalance(context, 1, GENESIS_ACCOUNT)) - - BigInt(amountTransferred) - - BigInt(fees) + expect(await getBalance(context, 2, alith.address)).to.equal( + (await getBalance(context, 1, alith.address)) - amountTransferred - fees ); - await verifyLatestBlockFees(context, expect, BigInt(amountTransferred)); + await verifyLatestBlockFees(context, amountTransferred); }); }); diff --git a/tests/tests/test-proxy/test-proxy-author-mapping.ts b/tests/tests/test-proxy/test-proxy-author-mapping.ts index e3b47e87a7..b3e4adbdcb 100644 --- a/tests/tests/test-proxy/test-proxy-author-mapping.ts +++ b/tests/tests/test-proxy/test-proxy-author-mapping.ts @@ -1,13 +1,12 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; -import { ALITH, BOB_AUTHOR_ID } from "../../util/constants"; -import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../../util/substrate-rpc"; -import { ALITH_PRIVATE_KEY, BALTATHAR_PRIVATE_KEY } from "../../util/constants"; +import { alith, baltathar, BALTATHAR_SESSION_ADDRESS } from "../../util/accounts"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; export async function getMappingInfo( - context, + context: DevTestContext, authorId: string ): Promise<{ account: string; deposit: BigInt }> { const mapping = await context.polkadotApi.query.authorMapping.mappingWithDeposit(authorId); @@ -22,34 +21,31 @@ export async function getMappingInfo( describeDevMoonbeam("Proxy : Author Mapping - simple association", (context) => { it("should succeed in adding an association", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const alith = keyring.addFromUri(ALITH_PRIVATE_KEY, null, "ethereum"); - const baltathar = keyring.addFromUri(BALTATHAR_PRIVATE_KEY, null, "ethereum"); - - const { events } = await createBlockWithExtrinsic( - context, - alith, - // @ts-ignore - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "AuthorMapping", 0) + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "AuthorMapping" as any, 0) ); - expect(events[2].method).to.be.eq("ProxyAdded"); - expect(events[2].data[2].toString()).to.be.eq("AuthorMapping"); //ProxyType - expect(events[7].method).to.be.eq("ExtrinsicSuccess"); - const { events: events2 } = await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.proxy.proxy( - alith.address, - null, - context.polkadotApi.tx.authorMapping.addAssociation(BOB_AUTHOR_ID) - ) + expect(events[2].event.method).to.be.eq("ProxyAdded"); + expect(events[2].event.data[2].toString()).to.be.eq("AuthorMapping"); //ProxyType + expect(events[7].event.method).to.be.eq("ExtrinsicSuccess"); + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy( + alith.address, + null, + context.polkadotApi.tx.authorMapping.addAssociation(BALTATHAR_SESSION_ADDRESS) + ) + .signAsync(baltathar) ); - expect(events2[3].method).to.be.eq("ProxyExecuted"); - expect(events2[3].data[0].toString()).to.be.eq("Ok"); - expect(events2[6].method).to.be.eq("ExtrinsicSuccess"); + expect(events2[3].event.method).to.be.eq("ProxyExecuted"); + expect(events2[3].event.data[0].toString()).to.be.eq("Ok"); + expect(events2[6].event.method).to.be.eq("ExtrinsicSuccess"); // // check association - expect((await getMappingInfo(context, BOB_AUTHOR_ID)).account).to.eq(ALITH); + expect((await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).account).to.eq(alith.address); }); }); diff --git a/tests/tests/test-proxy/test-proxy-balance.ts b/tests/tests/test-proxy/test-proxy-balance.ts index 899d1b6207..aa064c4eaa 100644 --- a/tests/tests/test-proxy/test-proxy-balance.ts +++ b/tests/tests/test-proxy/test-proxy-balance.ts @@ -1,96 +1,70 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + +import { alith, baltathar, BALTATHAR_SESSION_ADDRESS, charleth } from "../../util/accounts"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import Keyring from "@polkadot/keyring"; -import { - ALITH_PRIVATE_KEY, - BALTATHAR_PRIVATE_KEY, - CHARLETH_PRIVATE_KEY, - CHARLETH_ADDRESS, - BOB_AUTHOR_ID, -} from "../../util/constants"; import { getMappingInfo } from "./test-proxy-author-mapping"; -import { expectBalanceDifference } from "../../util/balances"; -import { substrateTransaction } from "../../util/transactions"; -const debug = require("debug")("test:proxy"); -// In these tests Alith will allow Baltathar to perform calls on her behalf. -// Charleth is used as a target account when making transfers. -const keyring = new Keyring({ type: "ethereum" }); -const alith = keyring.addFromUri(ALITH_PRIVATE_KEY, null, "ethereum"); -const baltathar = keyring.addFromUri(BALTATHAR_PRIVATE_KEY, null, "ethereum"); -const charleth = keyring.addFromUri(CHARLETH_PRIVATE_KEY, null, "ethereum"); +const debug = require("debug")("test:proxy"); describeDevMoonbeam("Proxy: Balances - should accept known proxy", (context) => { it("should accept known proxy", async () => { - await expectBalanceDifference( - context, - CHARLETH_ADDRESS, - 100, - async () => { - const events = await substrateTransaction( - context, - alith, - // @ts-ignore //TODO: this is because of https://github.com/polkadot-js/api/issues/4264 - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Balances", 0) - ); - expect(events[2].method).to.be.eq("ProxyAdded"); - expect(events[2].data[2].toString()).to.be.eq("Balances"); //ProxyType - expect(events[7].method).to.be.eq("ExtrinsicSuccess"); - - const events2 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxy( - alith.address, - null, - context.polkadotApi.tx.balances.transfer(charleth.address, 100) - ) - ); + const beforeCharlieBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Balances" as any, 0) + ); + expect(events[2].event.method).to.be.eq("ProxyAdded"); + expect(events[2].event.data[2].toString()).to.be.eq("Balances"); //ProxyType + expect(events[7].event.method).to.be.eq("ExtrinsicSuccess"); - expect(events2[2].method).to.be.eq("ProxyExecuted"); - expect(events2[2].data[0].toString()).to.be.eq("Ok"); - expect(events2[5].method).to.be.eq("ExtrinsicSuccess"); - }, - expect + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy(alith.address, null, context.polkadotApi.tx.balances.transfer(charleth.address, 100)) + .signAsync(baltathar) ); + + expect(events2[2].event.method).to.be.eq("ProxyExecuted"); + expect(events2[2].event.data[0].toString()).to.be.eq("Ok"); + expect(events2[5].event.method).to.be.eq("ExtrinsicSuccess"); + const afterCharlieBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + expect(afterCharlieBalance - beforeCharlieBalance).to.be.eq(100n); }); }); describeDevMoonbeam("Proxy: Balances - shouldn't accept other proxy types", (context) => { before("first add proxy", async () => { - await substrateTransaction( - context, - alith, - // @ts-ignore - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Balances", 0) + await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Balances" as any, 0) ); }); it("shouldn't accept other proxy types", async () => { - await expectBalanceDifference( - context, - alith.address, - 0, - async () => { - const events2 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxy( - alith.address, - null, - context.polkadotApi.tx.authorMapping.addAssociation(BOB_AUTHOR_ID) - ) - ); - - expect(events2[1].method).to.be.eq("ProxyExecuted"); - expect(events2[1].data[0].toString()).to.be.eq( - `{"err":{"module":{"index":0,"error":"0x05000000"}}}` - ); - expect(events2[4].method).to.be.eq("ExtrinsicSuccess"); + const beforeAlithBalance = BigInt(await context.web3.eth.getBalance(alith.address)); + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy( + alith.address, + null, + context.polkadotApi.tx.authorMapping.addAssociation(BALTATHAR_SESSION_ADDRESS) + ) + .signAsync(baltathar) + ); - // // check association failed - expect(await getMappingInfo(context, BOB_AUTHOR_ID)).to.eq(null); - }, - expect + expect(events2[1].event.method).to.be.eq("ProxyExecuted"); + expect(events2[1].event.data[0].toString()).to.be.eq( + `{"err":{"module":{"index":0,"error":"0x05000000"}}}` ); + expect(events2[4].event.method).to.be.eq("ExtrinsicSuccess"); + + // // check association failed + expect(await getMappingInfo(context, BALTATHAR_SESSION_ADDRESS)).to.eq(null); + const afterAlithBalance = BigInt(await context.web3.eth.getBalance(alith.address)); + expect(afterAlithBalance - beforeAlithBalance).to.be.eq(0n); }); }); diff --git a/tests/tests/test-proxy/test-proxy-governance.ts b/tests/tests/test-proxy/test-proxy-governance.ts index f4389e3f16..2360916f95 100644 --- a/tests/tests/test-proxy/test-proxy-governance.ts +++ b/tests/tests/test-proxy/test-proxy-governance.ts @@ -1,39 +1,21 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; -import { - ALITH_PRIV_KEY, - DOROTHY, - DOROTHY_PRIV_KEY, - ETHAN, - ETHAN_PRIVKEY, - GLMR, - VOTE_AMOUNT, -} from "../../util/constants"; + +import { dorothy, ethan } from "../../util/accounts"; +import { GLMR, VOTE_AMOUNT } from "../../util/constants"; +import { execCouncilProposal, execTechnicalCommitteeProposal } from "../../util/governance"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import { - execFromTwoThirdsOfCouncil, - execFromAllMembersOfTechCommittee, -} from "../../util/governance"; -import { createBlockWithExtrinsic } from "../../util/substrate-rpc"; -const keyring = new Keyring({ type: "ethereum" }); const proposalHash = "0xf3d039875302d49d52fb1af6877a2c46bc55b004afb8130f94dd9d0489ca3185"; -let alith; -let dorothy; -let ethan; - describeDevMoonbeam("Proxing governance", (context) => { before("Create accounts and fast-tracking referundum", async () => { - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - dorothy = await keyring.addFromUri(DOROTHY_PRIV_KEY, null, "ethereum"); - ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - - await execFromTwoThirdsOfCouncil( + await execCouncilProposal( context, context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) ); - await execFromAllMembersOfTechCommittee( + await execTechnicalCommitteeProposal( context, context.polkadotApi.tx.democracy.fastTrack(proposalHash, 5, 0) ); @@ -41,40 +23,49 @@ describeDevMoonbeam("Proxing governance", (context) => { it("should be able to vote on behalf of the delegate account", async function () { // Verify that one referundum is triggered - let referendumCount = (await context.polkadotApi.query.democracy.referendumCount()) as any; + let referendumCount = await context.polkadotApi.query.democracy.referendumCount(); expect(referendumCount.toBigInt()).to.equal(1n); // Dorothy add proxy right to ethan for governance only - await context.polkadotApi.tx.proxy.addProxy(ETHAN, "Governance", 0).signAndSend(dorothy); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(ethan.address, "Governance", 0).signAsync(dorothy) + ); // Ethan vote as Dorothy - const voteCall = context.polkadotApi.tx.democracy.vote(0, { - Standard: { balance: VOTE_AMOUNT, vote: { aye: true, conviction: 1 } }, - }); - const dorothyPreBalance = ( - (await context.polkadotApi.query.system.account(DOROTHY)) as any + await context.polkadotApi.query.system.account(dorothy.address) ).data.free.toBigInt(); - const ext = context.polkadotApi.tx.proxy.proxy(DOROTHY, "Governance", voteCall); - const { events } = await createBlockWithExtrinsic(context, ethan, ext); + + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy( + dorothy.address, + "Governance", + context.polkadotApi.tx.democracy.vote(0, { + Standard: { balance: VOTE_AMOUNT, vote: { aye: true, conviction: 1 } }, + }) + ) + .signAsync(ethan) + ); // Check events - expect(context.polkadotApi.events.proxy.ProxyExecuted.is(events[2] as any)).to.be.true; - expect(context.polkadotApi.events.democracy.Voted.is(events[1] as any)).to.be.true; - expect(events[2].data[0].toString()).to.equal("Ok"); - expect(context.polkadotApi.events.treasury.Deposit.is(events[4] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[5] as any)).to.be.true; + expect(context.polkadotApi.events.proxy.ProxyExecuted.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.democracy.Voted.is(events[1].event)).to.be.true; + expect(events[2].event.data[0].toString()).to.equal("Ok"); + expect(context.polkadotApi.events.treasury.Deposit.is(events[4].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[5].event)).to.be.true; // Verify that dorothy hasn't paid for the transaction but the vote locked her tokens - let dorothyAccountData = (await context.polkadotApi.query.system.account(DOROTHY)) as any; + let dorothyAccountData = await context.polkadotApi.query.system.account(dorothy.address); expect(dorothyAccountData.data.free.toBigInt()).to.equal(dorothyPreBalance); expect(dorothyAccountData.data.miscFrozen.toBigInt()).to.equal(VOTE_AMOUNT); // Verify that vote is registered const referendumInfoOf = ( - (await context.polkadotApi.query.democracy.referendumInfoOf(0)) as any - ).unwrap() as any; + await context.polkadotApi.query.democracy.referendumInfoOf(0) + ).unwrap(); const onGoing = referendumInfoOf.asOngoing; expect(onGoing.proposalHash.toHex()).to.equal(proposalHash); diff --git a/tests/tests/test-proxy/test-proxy-identity.ts b/tests/tests/test-proxy/test-proxy-identity.ts new file mode 100644 index 0000000000..9776ccfc6a --- /dev/null +++ b/tests/tests/test-proxy/test-proxy-identity.ts @@ -0,0 +1,115 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { alith, baltathar } from "../../util/accounts"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Proxy : IdentityJudgement fails without proxy", (context) => { + before("setup one identity and registrar", async () => { + const block = await context.createBlock([ + context.polkadotApi.tx.sudo.sudo(context.polkadotApi.tx.identity.addRegistrar(alith.address)), + context.polkadotApi.tx.identity + .setIdentity({ + display: { Raw: "foobar" }, + }) + .signAsync(baltathar), + ]); + + block.result.forEach((r, idx) => { + expect(r.successful, `tx[${idx}] - ${r.error?.name}`).to.be.true; + }); + }); + + it("should fail providing judgement", async () => { + const blockExecute = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy( + alith.address, + null, + context.polkadotApi.tx.identity.provideJudgement(0, baltathar.address, { + Reasonable: true, + }) + ) + .signAsync(baltathar) + ); + + expect(blockExecute.result.successful).to.be.false; + expect(blockExecute.result.error.name).to.equal("NotProxy"); + }); +}); + +describeDevMoonbeam("Proxy : IdentityJudgement succeeds with proxy", (context) => { + before("setup one identity and registrar", async () => { + const block = await context.createBlock([ + context.polkadotApi.tx.sudo.sudo(context.polkadotApi.tx.identity.addRegistrar(alith.address)), + context.polkadotApi.tx.identity + .setIdentity({ + display: { Raw: "foobar" }, + }) + .signAsync(baltathar), + ]); + + block.result.forEach((r, idx) => { + expect(r.successful, `tx[${idx}] - ${r.error?.name}`).to.be.true; + }); + }); + + it("should succeed providing judgement", async () => { + const blockAdd = await context.createBlock( + context.polkadotApi.tx.proxy + .addProxy(baltathar.address, "IdentityJudgement" as any, 0) + .signAsync(alith) + ); + + expect(blockAdd.result.successful).to.be.true; + const proxyAddEvent = blockAdd.result.events.reduce((acc, e) => { + if (context.polkadotApi.events.proxy.ProxyAdded.is(e.event)) { + acc.push({ + proxyType: e.event.data[2].toString(), + }); + } + return acc; + }, []); + expect(proxyAddEvent).to.deep.equal([ + { + proxyType: "IdentityJudgement", + }, + ]); + + const blockExecute = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy( + alith.address, + null, + context.polkadotApi.tx.identity.provideJudgement(0, baltathar.address, { + Reasonable: true, + }) + ) + .signAsync(baltathar) + ); + + expect(blockExecute.result.successful).to.be.true; + const proxyExecuteEvent = blockExecute.result.events.reduce( + (acc, e) => { + if (context.polkadotApi.events.proxy.ProxyExecuted.is(e.event)) { + acc.proxyExecuted = e.event.data[0].toString(); + } else if (context.polkadotApi.events.identity.JudgementGiven.is(e.event)) { + acc.judgementGiven = { + address: e.event.data[0].toString(), + decision: e.event.data[1].toString(), + }; + } + return acc; + }, + { proxyExecuted: null, judgementGiven: null } + ); + expect(proxyExecuteEvent).to.deep.equal({ + proxyExecuted: "Ok", + judgementGiven: { + address: baltathar.address, + decision: "0", + }, + }); + }); +}); diff --git a/tests/tests/test-proxy/test-proxy.ts b/tests/tests/test-proxy/test-proxy.ts index cccf05bf23..759e385477 100644 --- a/tests/tests/test-proxy/test-proxy.ts +++ b/tests/tests/test-proxy/test-proxy.ts @@ -1,243 +1,187 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + +import { alith, baltathar, charleth } from "../../util/accounts"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import Keyring from "@polkadot/keyring"; -import { - ALITH_PRIVATE_KEY, - BALTATHAR_PRIVATE_KEY, - CHARLETH_PRIVATE_KEY, - CHARLETH_ADDRESS, -} from "../../util/constants"; -import { expectBalanceDifference } from "../../util/balances"; -import { substrateTransaction } from "../../util/transactions"; + const debug = require("debug")("test:proxy"); // In these tests Alith will allow Baltathar to perform calls on her behalf. // Charleth is used as a target account when making transfers. -const keyring = new Keyring({ type: "ethereum" }); -const alith = keyring.addFromUri(ALITH_PRIVATE_KEY, null, "ethereum"); -const baltathar = keyring.addFromUri(BALTATHAR_PRIVATE_KEY, null, "ethereum"); -const charleth = keyring.addFromUri(CHARLETH_PRIVATE_KEY, null, "ethereum"); describeDevMoonbeam("Pallet proxy - shouldn't accept unknown proxy", (context) => { it("shouldn't accept unknown proxy", async function () { - await expectBalanceDifference( - context, - CHARLETH_ADDRESS, - 0, - async () => { - const events = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxy( - alith.address, - null, - context.polkadotApi.tx.balances.transfer(charleth.address, 100) - ) - ); - expect(events[5].method).to.be.eq("ExtrinsicFailed"); - }, - expect + const beforeCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy(alith.address, null, context.polkadotApi.tx.balances.transfer(charleth.address, 100)) + .signAsync(baltathar) ); + expect(events[5].event.method).to.be.eq("ExtrinsicFailed"); + const afterCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n); }); }); describeDevMoonbeam("Pallet proxy - should accept known proxy", (context) => { it("should accept known proxy", async () => { - await expectBalanceDifference( - context, - CHARLETH_ADDRESS, - 100, - async () => { - const events = await substrateTransaction( - context, - alith, - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 0) - ); - expect(events[2].method).to.be.eq("ProxyAdded"); - expect(events[2].data[2].toString()).to.be.eq("Any"); //ProxyType - expect(events[7].method).to.be.eq("ExtrinsicSuccess"); - - const events2 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxy( - alith.address, - null, - context.polkadotApi.tx.balances.transfer(charleth.address, 100) - ) - ); - expect(events2[2].method).to.be.eq("ProxyExecuted"); - expect(events2[2].data[0].toString()).to.be.eq("Ok"); - expect(events2[5].method).to.be.eq("ExtrinsicSuccess"); - }, - expect + const beforeCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 0) + ); + expect(events[2].event.method).to.be.eq("ProxyAdded"); + expect(events[2].event.data[2].toString()).to.be.eq("Any"); //ProxyType + expect(events[7].event.method).to.be.eq("ExtrinsicSuccess"); + + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy(alith.address, null, context.polkadotApi.tx.balances.transfer(charleth.address, 100)) + .signAsync(baltathar) ); + expect(events2[2].event.method).to.be.eq("ProxyExecuted"); + expect(events2[2].event.data[0].toString()).to.be.eq("Ok"); + expect(events2[5].event.method).to.be.eq("ExtrinsicSuccess"); + const afterCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(100n); }); }); describeDevMoonbeam("Pallet proxy - shouldn't accept removed proxy", (context) => { it("shouldn't accept removed proxy", async () => { - await expectBalanceDifference( - context, - CHARLETH_ADDRESS, - 0, - async () => { - const events = await substrateTransaction( - context, - alith, - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 0) - ); - expect(events[7].method).to.be.eq("ExtrinsicSuccess"); - - const events2 = await substrateTransaction( - context, - alith, - context.polkadotApi.tx.proxy.removeProxy(baltathar.address, "Any", 0) - ); - expect(events2[5].method).to.be.eq("ExtrinsicSuccess"); - - const events3 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxy( - alith.address, - null, - context.polkadotApi.tx.balances.transfer(charleth.address, 100) - ) - ); - expect(events3[3].method).to.be.eq("ExtrinsicFailed"); - }, - expect + const beforeCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 0) ); + expect(events[7].event.method).to.be.eq("ExtrinsicSuccess"); + + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.removeProxy(baltathar.address, "Any", 0) + ); + expect(events2[5].event.method).to.be.eq("ExtrinsicSuccess"); + + const { + result: { events: events3 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.proxy( + alith.address, + null, + context.polkadotApi.tx.balances.transfer(charleth.address, 100) + ) + ); + expect(events3[3].event.method).to.be.eq("ExtrinsicFailed"); + const afterCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n); }); }); describeDevMoonbeam("Pallet proxy - shouldn't accept instant for delayed proxy", (context) => { it("shouldn't accept instant for delayed proxy", async () => { - await expectBalanceDifference( - context, - CHARLETH_ADDRESS, - 0, - async () => { - const events = await substrateTransaction( - context, - alith, - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 2) - ); - expect(events[7].method).to.be.eq("ExtrinsicSuccess"); - - const events2 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxy( - alith.address, - null, - context.polkadotApi.tx.balances.transfer(charleth.address, 100) - ) - ); - expect(events2[3].method).to.be.eq("ExtrinsicFailed"); - }, - expect + const beforeCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 2) + ); + expect(events[7].event.method).to.be.eq("ExtrinsicSuccess"); + + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxy(alith.address, null, context.polkadotApi.tx.balances.transfer(charleth.address, 100)) + .signAsync(baltathar) ); + expect(events2[3].event.method).to.be.eq("ExtrinsicFailed"); + const afterCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n); }); }); describeDevMoonbeam("Pallet proxy - shouldn't accept early delayed proxy", (context) => { it("shouldn't accept early delayed proxy", async () => { - await expectBalanceDifference( - context, - CHARLETH_ADDRESS, - 0, - async () => { - const events = await substrateTransaction( - context, - alith, - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 6) - ); - events.forEach((event) => debug(`1${event.method}(${event.data})`)); - expect(events[7].method).to.be.eq("ExtrinsicSuccess"); - - const transfer = context.polkadotApi.tx.balances.transfer(charleth.address, 100); - - const events2 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.announce(alith.address, transfer.hash) - ); - events2.forEach((event) => debug(`2${event.method}(${event.data})`)); - expect(events2[2].method).to.be.eq("Announced"); - expect(events2[5].method).to.be.eq("ExtrinsicSuccess"); - - // Too early. - const events3 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxyAnnounced( - baltathar.address, - alith.address, - null, - transfer - ) - ); - events3.forEach((event) => debug(`3${event.method}(${event.data})`)); - expect(events3[3].method).to.be.eq("ExtrinsicFailed"); - }, - expect + const beforeCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 6) ); + events.forEach(({ event }) => debug(`1${event.method}(${event.data})`)); + expect(events[7].event.method).to.be.eq("ExtrinsicSuccess"); + + const transfer = context.polkadotApi.tx.balances.transfer(charleth.address, 100); + + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.announce(alith.address, transfer.hash).signAsync(baltathar) + ); + events2.forEach(({ event }) => debug(`2${event.method}(${event.data})`)); + expect(events2[2].event.method).to.be.eq("Announced"); + expect(events2[5].event.method).to.be.eq("ExtrinsicSuccess"); + + // Too early. + const { + result: { events: events3 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxyAnnounced(baltathar.address, alith.address, null, transfer) + .signAsync(baltathar) + ); + events3.forEach(({ event }) => debug(`3${event.method}(${event.data})`)); + expect(events3[3].event.method).to.be.eq("ExtrinsicFailed"); + const afterCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n); }); }); describeDevMoonbeam("Pallet proxy - should accept on-time delayed proxy", (context) => { it("should accept on-time delayed proxy ", async () => { - await expectBalanceDifference( - context, - CHARLETH_ADDRESS, - 100, - async () => { - const events = await substrateTransaction( - context, - alith, - context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 2) - ); - events.forEach((e) => { - debug(e.toHuman()); - }); - expect(events[7].method).to.be.eq("ExtrinsicSuccess"); - - // Build transaction - const transfer = context.polkadotApi.tx.balances.transfer(charleth.address, 100); - const u8a = transfer.method.toU8a(); - const transfer_hash = transfer.registry.hash(u8a).toHex(); - - const events2 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.announce(alith.address, transfer_hash) - ); - events2.forEach((event) => debug(`${event.method}(${event.data})`)); - expect(events2[2].method).to.be.eq("Announced"); - expect(events2[2].data[2].toHex()).to.eq(transfer_hash); - expect(events2[5].method).to.be.eq("ExtrinsicSuccess"); - - await context.createBlock(); - await context.createBlock(); - - // On time. - const events3 = await substrateTransaction( - context, - baltathar, - context.polkadotApi.tx.proxy.proxyAnnounced( - baltathar.address, - alith.address, - null, - transfer - ) - ); - debug("------"); - events3.forEach((event) => debug(`${event.method}(${event.data})`)); - expect(events3[1].method).not.to.be.eq("ExtrinsicFailed"); - }, - expect + const beforeCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.addProxy(baltathar.address, "Any", 2) + ); + expect(events[7].event.method).to.be.eq("ExtrinsicSuccess"); + + // Build transaction + const transfer = context.polkadotApi.tx.balances.transfer(charleth.address, 100); + const u8a = transfer.method.toU8a(); + const transfer_hash = transfer.registry.hash(u8a).toHex(); + + const { + result: { events: events2 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy.announce(alith.address, transfer_hash).signAsync(baltathar) + ); + expect(events2[2].event.method).to.be.eq("Announced"); + expect(events2[2].event.data[2].toHex()).to.eq(transfer_hash); + expect(events2[5].event.method).to.be.eq("ExtrinsicSuccess"); + + await context.createBlock(); + await context.createBlock(); + + // On time. + const { + result: { events: events3 }, + } = await context.createBlock( + context.polkadotApi.tx.proxy + .proxyAnnounced(baltathar.address, alith.address, null, transfer) + .signAsync(baltathar) ); + expect(events3[1].event.method).not.to.be.eq("ExtrinsicFailed"); + const afterCharlethBalance = BigInt(await context.web3.eth.getBalance(charleth.address)); + expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(100n); }); }); diff --git a/tests/tests/test-randomness/test-randomness-babe-lottery.ts b/tests/tests/test-randomness/test-randomness-babe-lottery.ts new file mode 100644 index 0000000000..4196e86d5a --- /dev/null +++ b/tests/tests/test-randomness/test-randomness-babe-lottery.ts @@ -0,0 +1,326 @@ +import "@moonbeam-network/api-augment/moonbase"; +import { PalletRandomnessRandomnessResult } from "@polkadot/types/lookup"; +import { bnToHex } from "@polkadot/util"; +import { expect } from "chai"; +import { ethers } from "ethers"; +import Web3 from "web3"; +import { TransactionReceipt } from "web3-core"; +import { Contract } from "web3-eth-contract"; +import { + alith, + ALITH_ADDRESS, + ALITH_GENESIS_FREE_BALANCE, + ALITH_PRIVATE_KEY, + baltathar, + BALTATHAR_ADDRESS, + BALTATHAR_PRIVATE_KEY, + charleth, + CHARLETH_ADDRESS, + CHARLETH_PRIVATE_KEY, +} from "../../util/accounts"; +import { + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS, + CONTRACT_RANDOMNESS_STATUS_PENDING, + DEFAULT_GENESIS_BALANCE, + GLMR, + MILLIGLMR, + PRECOMPILE_RANDOMNESS_ADDRESS, +} from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { expectEVMResult } from "../../util/eth-transactions"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; +import { + ALITH_TRANSACTION_TEMPLATE, + BALTATHAR_TRANSACTION_TEMPLATE, + createContract, + createTransaction, + TRANSACTION_TEMPLATE, +} from "../../util/transactions"; + +const LOTTERY_CONTRACT_JSON = getCompiled("RandomnessLotteryDemo"); +const LOTTERY_INTERFACE = new ethers.utils.Interface(LOTTERY_CONTRACT_JSON.contract.abi); +const RANDOMNESS_CONTRACT_JSON = getCompiled("Randomness"); +const RANDOMNESS_INTERFACE = new ethers.utils.Interface(RANDOMNESS_CONTRACT_JSON.contract.abi); + +const RANDOMNESS_SOURCE_LOCAL_VRF = "0"; +const RANDOMNESS_SOURCE_BABE_EPOCH = "1"; + +const setupLotteryWithParticipants = async (context: DevTestContext) => { + const { contract, rawTx } = await createContract( + context, + "RandomnessLotteryDemo", + { + ...ALITH_TRANSACTION_TEMPLATE, + value: Web3.utils.toWei("1", "ether"), + gas: 5_000_000, + }, + [RANDOMNESS_SOURCE_BABE_EPOCH] + ); + await context.createBlock(rawTx); + + // Adds participants + for (const [privateKey, from] of [ + [ALITH_PRIVATE_KEY, ALITH_ADDRESS], + [BALTATHAR_PRIVATE_KEY, BALTATHAR_ADDRESS], + [CHARLETH_PRIVATE_KEY, CHARLETH_ADDRESS], + ]) { + await context.createBlock( + createTransaction(context, { + ...TRANSACTION_TEMPLATE, + privateKey, + from, + to: contract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("participate", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + } + return contract; +}; + +// Uses sudo (alith) to set relayEpoch to +2 and randomnessResult to the desired value +const fakeBabeResultTransaction = async ( + context: DevTestContext, + value?: PalletRandomnessRandomnessResult +) => { + const fakeRandomResult = context.polkadotApi.registry.createType( + "Option", + value || { + requestCount: 1, + randomness: "0xb1ffdd4a26e0f2a2fd1e0862a1c9be422c66dddd68257306ed55dc7bd9dce647", + } + ); + // console.log( + // context.polkadotApi.query.randomness.randomnessResults.key({ BabeEpoch: 2 }).toString() + // ); + // console.log(await context.polkadotApi.query.randomness.randomnessResults.entries()); + // console.log( + // (await context.polkadotApi.query.randomness.randomnessResults({ BabeEpoch: 2 })).toHex() + // ); + // console.log(fakeRandomResult.toHex()); + + return context.polkadotApi.tx.sudo + .sudo( + context.polkadotApi.tx.system.setStorage([ + [ + context.polkadotApi.query.randomness.relayEpoch.key().toString(), + bnToHex(((await context.polkadotApi.query.randomness.relayEpoch()) as any).addn(2), { + bitLength: 64, + isLe: true, + }), + ], + [ + context.polkadotApi.query.randomness.randomnessResults.key({ BabeEpoch: 2 }).toString(), + fakeRandomResult.toHex(), + ], + ]) + ) + .signAsync(alith); +}; + +describeDevMoonbeam("Randomness Babe - Preparing Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + }); + + it("should have a jackpot of 3 tokens", async function () { + expect(await lotteryContract.methods.jackpot().call()).to.equal((3n * GLMR).toString()); + }); + + it("should be open for registrations", async function () { + expect(await lotteryContract.methods.status().call()).to.equal("0"); + }); +}); + +describeDevMoonbeam("Randomness Babe - Starting the Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + }); + + it("should be able to start", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + expectEVMResult(result.events, "Succeed"); + }); +}); + +describeDevMoonbeam("Randomness Babe - Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + }); + + it("should fail to fulfill before the delay", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_PENDING.toString() + ); + + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }) + ); + expectEVMResult(result.events, "Revert"); + }); + + it("should be rolling the numbers", async function () { + expect(await lotteryContract.methods.status().call()).to.equal("1"); + }); +}); + +describeDevMoonbeam("Randomness Babe - Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + }); + + it("should succeed to fulfill after the delay", async function () { + await context.createBlock(); + + const { result } = await context.createBlock([ + // Faking relay epoch + 2 in randomness storage + fakeBabeResultTransaction(context), + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }), + ]); + + expectEVMResult(result[1].events, "Succeed"); + }); +}); + +describeDevMoonbeam("Randomness Babe - Fulfilling Lottery Demo", (context) => { + let lotteryContract: Contract; + let randomnessContract: Contract; + let fulFillReceipt: TransactionReceipt; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + + const { result } = await context.createBlock([ + // Faking relay epoch + 2 in randomness storage + fakeBabeResultTransaction(context), + createTransaction(context, { + ...BALTATHAR_TRANSACTION_TEMPLATE, // mus use baltathar or put correct nonce for alith + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }), + ]); + fulFillReceipt = await context.web3.eth.getTransactionReceipt(result[1].hash); + }); + it("should have 4 events", async function () { + expect(fulFillReceipt.logs.length).to.equal(4); + }); + + it("should emit the Ended log first", async function () { + const log = LOTTERY_INTERFACE.parseLog(fulFillReceipt.logs[0]); + expect(log.name).to.equal("Ended"); + expect(log.args.participantCount.toBigInt()).to.equal(3n); + expect(log.args.jackpot.toBigInt()).to.equal(3n * GLMR); + expect(log.args.winnerCount.toBigInt()).to.equal(2n); + }); + + it("should emit 2 Awarded events. One for each winner", async function () { + // First Awarded event is for Baltathar + const log1 = LOTTERY_INTERFACE.parseLog(fulFillReceipt.logs[1]); + expect(log1.name).to.equal("Awarded"); + expect(log1.args.winner).to.equal(baltathar.address); + expect(log1.args.randomWord.toHexString()).to.equal( + "0xa5c69b7b2ac07e832d146e756e894cfca317b1343e31b8c4f7d737627e192c7e" + ); + expect(log1.args.amount.toBigInt()).to.equal(1500n * MILLIGLMR); + + // Second Awarded event is for Alith + const log2 = LOTTERY_INTERFACE.parseLog(fulFillReceipt.logs[2]); + expect(log2.name).to.equal("Awarded"); + expect(log2.args.winner).to.equal(alith.address); + expect(log2.args.randomWord.toHexString()).to.equal( + "0xaa4a904196f3ecd68f4b47538598455194bba71c9201d12b20712507323e6d0b" + ); + expect(log2.args.amount.toBigInt()).to.equal(1500n * MILLIGLMR); + }); + + it("should emit the FulFillmentSucceeded event last", async function () { + const log = RANDOMNESS_INTERFACE.parseLog(fulFillReceipt.logs[3]); + expect(log.name).to.equal("FulFillmentSucceeded"); + }); + + it("should remove the request", async function () { + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS.toString() + ); + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); + + it("should reset the jackpot", async function () { + expect(await lotteryContract.methods.jackpot().call()).to.equal("0"); + }); + + it("should reward balthazar and alith", async function () { + expect( + ( + await context.polkadotApi.query.system.account(baltathar.address.toString()) + ).data.free.toBigInt() > DEFAULT_GENESIS_BALANCE + ).to.be.true; + expect( + ( + await context.polkadotApi.query.system.account(charleth.address.toString()) + ).data.free.toBigInt() > DEFAULT_GENESIS_BALANCE + ).to.be.false; + expect( + ( + await context.polkadotApi.query.system.account(alith.address.toString()) + ).data.free.toBigInt() > ALITH_GENESIS_FREE_BALANCE + ).to.be.true; + }); + + it("should be back to open for registrations", async function () { + expect(await lotteryContract.methods.status().call()).to.equal("0"); + }); +}); diff --git a/tests/tests/test-randomness/test-randomness-babe-request.ts b/tests/tests/test-randomness/test-randomness-babe-request.ts new file mode 100644 index 0000000000..c3cb4dcaac --- /dev/null +++ b/tests/tests/test-randomness/test-randomness-babe-request.ts @@ -0,0 +1,255 @@ +import "@moonbeam-network/api-augment"; +import { u8aToHex } from "@polkadot/util"; +import { expect } from "chai"; +import { ethers } from "ethers"; +import { alith } from "../../util/accounts"; +import { + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS, + CONTRACT_RANDOMNESS_STATUS_PENDING, + CONTRACT_RANDOMNESS_STATUS_READY, + GLMR, + PRECOMPILE_RANDOMNESS_ADDRESS, +} from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { expectEVMResult } from "../../util/eth-transactions"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { ALITH_TRANSACTION_TEMPLATE, createTransaction } from "../../util/transactions"; + +const RANDOMNESS_CONTRACT_JSON = getCompiled("Randomness"); +const RANDOMNESS_INTERFACE = new ethers.utils.Interface(RANDOMNESS_CONTRACT_JSON.contract.abi); + +const SIMPLE_SALT = new Uint8Array([..."my_salt".padEnd(32, " ")].map((a) => a.charCodeAt(0))); + +describeDevMoonbeam("Randomness Babe - Requesting a random number", (context) => { + it("should be successful", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestRelayBabeEpochRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + ]), + }) + ); + + expect(result.successful).to.be.true; + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(1); + }); +}); + +describeDevMoonbeam("Randomness Babe - Requesting a random number", (context) => { + before("setup the request", async function () { + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestRelayBabeEpochRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + ]), + }) + ); + }); + + it("should store a request with id:0", async function () { + const requestId = parseInt( + ((await context.polkadotApi.query.randomness.requests.entries()) as any)[0][0] + .toHex() + .slice(-16), + 16 + ); + expect(requestId).to.equal(0); + }); + + it("should store the salt", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.salt.toHex()).to.equal(u8aToHex(SIMPLE_SALT)); + }); + + it("should store the refundAddress", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.refundAddress.toHex()).to.equal(alith.address.toLocaleLowerCase()); + }); + + // This is a bit weird as we are calling the precompile from a non smart-contract + it("should store the contractAddress", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.contractAddress.toHex()).to.equal(alith.address.toLocaleLowerCase()); + }); + + it("should store the fee", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.fee.toBigInt()).to.equal(1n * GLMR); + }); + + it("should store the gasLimit", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.gasLimit.toBigInt()).to.equal(100_000n); + }); + + it("should store the numWords", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.numWords.toBigInt()).to.equal(1n); + }); + + it("should be considered a babe type", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.info.isBabeEpoch).to.be.true; + }); + + it("should have a fulfillment delay of 2 epochs", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.info.asBabeEpoch[0].toBigInt()).to.be.equal(2n); + }); + + it("should have an expiration delay of 10001 epochs", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.info.asBabeEpoch[1].toBigInt()).to.be.equal(10000n); + }); +}); + +describeDevMoonbeam("Randomness Babe - Requesting a random number", (context) => { + it("should refuse a request with more than 100 random number", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestRelayBabeEpochRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 101, // number of random words + ]), + }) + ); + + expect(result.successful).to.be.true; + expectEVMResult(result.events, "Error", "Other"); + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); +}); + +describeDevMoonbeam("Randomness Babe - Requesting a random number", (context) => { + it("should succeed for 100 random words", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestRelayBabeEpochRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 100, // number of random words + ]), + }) + ); + + expect(result.successful).to.be.true; + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(1); + }); +}); + +describeDevMoonbeam("Randomness Babe - Requesting a random number", (context) => { + it("should be marked as pending before the end of the 2nd epoch", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestRelayBabeEpochRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + ]), + }) + ); + + for (let i = 0; i < 10; i++) { + await context.createBlock(); + } + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_PENDING.toString() + ); + }); +}); + +describeDevMoonbeam("Randomness Babe - Requesting a random number", (context) => { + // TODO: Fix it once we support setting the epochs properly + it.skip("should be marked as ready after 2 epochs has passed", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestRelayBabeEpochRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + ]), + }) + ); + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_READY.toString() + ); + }); +}); + +describeDevMoonbeam("Randomness Babe - Requesting an invalid random number", (context) => { + it("should be marked as pending before the end of the delay", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS.toString() + ); + }); +}); diff --git a/tests/tests/test-randomness/test-randomness-result.ts b/tests/tests/test-randomness/test-randomness-result.ts new file mode 100644 index 0000000000..d82e172284 --- /dev/null +++ b/tests/tests/test-randomness/test-randomness-result.ts @@ -0,0 +1,190 @@ +import "@moonbeam-network/api-augment/moonbase"; +import { Option } from "@polkadot/types"; +import { PalletRandomnessRandomnessResult } from "@polkadot/types/lookup"; +import { expect } from "chai"; +import { ethers } from "ethers"; +import { alith } from "../../util/accounts"; +import { GLMR, PRECOMPILE_RANDOMNESS_ADDRESS } from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { ALITH_TRANSACTION_TEMPLATE, createTransaction } from "../../util/transactions"; + +const RANDOMNESS_CONTRACT_JSON = getCompiled("Randomness"); +const RANDOMNESS_INTERFACE = new ethers.utils.Interface(RANDOMNESS_CONTRACT_JSON.contract.abi); + +const SIMPLE_SALT = new Uint8Array([..."my_salt".padEnd(32, " ")].map((a) => a.charCodeAt(0))); + +describeDevMoonbeam( + "Randomness Result - Requesting 4 random numbers for the same target block", + (context) => { + it("should only have 1 randomness result with 4 requests", async function () { + await context.createBlock([ + ...[0, 1].map((nonce) => + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + nonce, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 3, // future blocks + ]), + }) + ), + ]); + await context.createBlock([ + ...[2, 3].map((nonce) => + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + nonce, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 2, // future blocks + ]), + }) + ), + ]); + + const randomessResults = + await context.polkadotApi.query.randomness.randomnessResults.entries(); + expect(randomessResults).to.be.length(1); + const randomessResult = randomessResults[0][1] as Option; + expect(randomessResult.unwrap().requestCount.toNumber()).to.equal(4); + expect(randomessResult.unwrap().randomness.isNone).to.be.true; + }); + } +); + +describeDevMoonbeam("Randomness Result - Fulfilling one of multiple random numbers", (context) => { + it("should leave 1 randomness result", async function () { + const delayBlocks = 2; + const requestData = RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + delayBlocks, // future blocks + ]); + await context.createBlock([ + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: requestData, + }), + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + nonce: 1, + data: requestData, + }), + ]); + + for (let i = 0; i < delayBlocks; i++) { + await context.createBlock(); + } + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }) + ); + + const randomessResults = await context.polkadotApi.query.randomness.randomnessResults.entries(); + expect(randomessResults).to.be.length(1); + const randomessResult = randomessResults[0][1] as Option; + expect(randomessResult.unwrap().requestCount.toNumber()).to.equal(1); + expect(randomessResult.unwrap().randomness.isSome).to.be.true; + }); +}); + +describeDevMoonbeam("Randomness Result - Fulfilling all of random numbers", (context) => { + it("should empty randomness results", async function () { + const delayBlocks = 2; + const requestData = RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + delayBlocks, // future blocks + ]); + await context.createBlock([ + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: requestData, + }), + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + nonce: 1, + data: requestData, + }), + ]); + + for (let i = 0; i < delayBlocks; i++) { + await context.createBlock(); + } + + await context.createBlock([ + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }), + + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + nonce: 3, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [1]), + }), + ]); + + const randomessResults = await context.polkadotApi.query.randomness.randomnessResults.entries(); + expect(randomessResults).to.be.length(0); + }); +}); + +describeDevMoonbeam("Randomness Result - Passing targetted block", (context) => { + it("should fill the randomness value", async function () { + const delayBlocks = 2; + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + delayBlocks, // future blocks + ]), + }) + ); + + for (let i = 0; i < delayBlocks; i++) { + await context.createBlock(); + } + + const randomessResults = await context.polkadotApi.query.randomness.randomnessResults.entries(); + expect(randomessResults).to.be.length(1); + const randomessResult = randomessResults[0][1] as Option; + expect(randomessResult.unwrap().randomness.isSome).to.be.true; + expect(randomessResult.unwrap().randomness.unwrap().toHex()).to.equal( + "0xb1ffdd4a26e0f2a2fd1e0862a1c9be422c66dddd68257306ed55dc7bd9dce647" + ); + }); +}); diff --git a/tests/tests/test-randomness/test-randomness-vrf-lottery.ts b/tests/tests/test-randomness/test-randomness-vrf-lottery.ts new file mode 100644 index 0000000000..cb1e72c073 --- /dev/null +++ b/tests/tests/test-randomness/test-randomness-vrf-lottery.ts @@ -0,0 +1,282 @@ +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { ethers } from "ethers"; +import Web3 from "web3"; +import { TransactionReceipt } from "web3-core"; +import { Contract } from "web3-eth-contract"; +import { + alith, + ALITH_ADDRESS, + ALITH_GENESIS_FREE_BALANCE, + ALITH_PRIVATE_KEY, + baltathar, + BALTATHAR_ADDRESS, + BALTATHAR_PRIVATE_KEY, + charleth, + CHARLETH_ADDRESS, + CHARLETH_PRIVATE_KEY, +} from "../../util/accounts"; +import { + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS, + CONTRACT_RANDOMNESS_STATUS_PENDING, + DEFAULT_GENESIS_BALANCE, + GLMR, + MILLIGLMR, + PRECOMPILE_RANDOMNESS_ADDRESS, +} from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { expectEVMResult } from "../../util/eth-transactions"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; +import { + ALITH_TRANSACTION_TEMPLATE, + createContract, + createTransaction, + TRANSACTION_TEMPLATE, +} from "../../util/transactions"; + +const LOTTERY_CONTRACT_JSON = getCompiled("RandomnessLotteryDemo"); +const LOTTERY_INTERFACE = new ethers.utils.Interface(LOTTERY_CONTRACT_JSON.contract.abi); +const RANDOMNESS_CONTRACT_JSON = getCompiled("Randomness"); +const RANDOMNESS_INTERFACE = new ethers.utils.Interface(RANDOMNESS_CONTRACT_JSON.contract.abi); + +const RANDOMNESS_SOURCE_LOCAL_VRF = "0"; +const RANDOMNESS_SOURCE_BABE_EPOCH = "1"; + +const setupLotteryWithParticipants = async (context: DevTestContext) => { + const { contract, rawTx } = await createContract( + context, + "RandomnessLotteryDemo", + { + ...ALITH_TRANSACTION_TEMPLATE, + value: Web3.utils.toWei("1", "ether"), + gas: 5_000_000, + }, + [RANDOMNESS_SOURCE_LOCAL_VRF] + ); + await context.createBlock(rawTx); + + // Adds participants + for (const [privateKey, from] of [ + [ALITH_PRIVATE_KEY, ALITH_ADDRESS], + [BALTATHAR_PRIVATE_KEY, BALTATHAR_ADDRESS], + [CHARLETH_PRIVATE_KEY, CHARLETH_ADDRESS], + ]) { + await context.createBlock( + createTransaction(context, { + ...TRANSACTION_TEMPLATE, + privateKey, + from, + to: contract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("participate", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + } + return contract; +}; + +describeDevMoonbeam("Randomness VRF - Preparing Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + }); + + it("should have a jackpot of 3 tokens", async function () { + expect(await lotteryContract.methods.jackpot().call()).to.equal((3n * GLMR).toString()); + }); + + it("should be open for registrations", async function () { + expect(await lotteryContract.methods.status().call()).to.equal("0"); + }); +}); + +describeDevMoonbeam("Randomness VRF - Starting the Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + }); + + it("should be able to start", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + expectEVMResult(result.events, "Succeed"); + }); +}); + +describeDevMoonbeam("Randomness VRF - Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + }); + + it("should fail to fulfill before the delay", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_PENDING.toString() + ); + + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }) + ); + expectEVMResult(result.events, "Error"); + }); + + it("should be rolling the numbers", async function () { + expect(await lotteryContract.methods.status().call()).to.equal("1"); + }); +}); + +describeDevMoonbeam("Randomness VRF - Lottery Demo", (context) => { + let lotteryContract: Contract; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + }); + + it("should succeed to fulfill after the delay", async function () { + await context.createBlock(); + + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }) + ); + expectEVMResult(result.events, "Succeed"); + }); +}); + +describeDevMoonbeam("Randomness VRF - Fulfilling Lottery Demo", (context) => { + let lotteryContract: Contract; + let randomnessContract: Contract; + let fulFillReceipt: TransactionReceipt; + before("setup lottery contract", async function () { + lotteryContract = await setupLotteryWithParticipants(context); + randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: lotteryContract.options.address, + data: LOTTERY_INTERFACE.encodeFunctionData("startLottery", []), + value: Web3.utils.toWei("1", "ether"), + }) + ); + await context.createBlock(); + await context.createBlock(); + const { + result: { hash }, + } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }) + ); + + fulFillReceipt = await context.web3.eth.getTransactionReceipt(hash); + }); + it("should have 4 events", async function () { + expect(fulFillReceipt.logs.length).to.equal(4); + }); + + it("should emit the Ended log first", async function () { + const log = LOTTERY_INTERFACE.parseLog(fulFillReceipt.logs[0]); + expect(log.name).to.equal("Ended"); + expect(log.args.participantCount.toBigInt()).to.equal(3n); + expect(log.args.jackpot.toBigInt()).to.equal(3n * GLMR); + expect(log.args.winnerCount.toBigInt()).to.equal(2n); + }); + + it("should emit 2 Awarded events. One for each winner", async function () { + // First Awarded event is for Charleth + const log1 = LOTTERY_INTERFACE.parseLog(fulFillReceipt.logs[1]); + expect(log1.name).to.equal("Awarded"); + expect(log1.args.winner).to.equal(charleth.address); + expect(log1.args.randomWord.toHexString()).to.equal( + "0xefb5d3fd7f0afcbebf6c983d4e480100c71395f721e2f3bfdf1c281938947d28" + ); + expect(log1.args.amount.toBigInt()).to.equal(1500n * MILLIGLMR); + + // Second Awarded event is for Alith + const log2 = LOTTERY_INTERFACE.parseLog(fulFillReceipt.logs[2]); + expect(log2.name).to.equal("Awarded"); + expect(log2.args.winner).to.equal(alith.address); + expect(log2.args.randomWord.toHexString()).to.equal( + "0xe89db6687fdfcd8523439fa5384e889e028e8fcc1de0ead9f1ba50d5a5aecff8" + ); + expect(log2.args.amount.toBigInt()).to.equal(1500n * MILLIGLMR); + }); + + it("should emit the FulFillmentSucceeded event last", async function () { + const log = RANDOMNESS_INTERFACE.parseLog(fulFillReceipt.logs[3]); + expect(log.name).to.equal("FulFillmentSucceeded"); + }); + + it("should remove the request", async function () { + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS.toString() + ); + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); + + it("should reset the jackpot", async function () { + expect(await lotteryContract.methods.jackpot().call()).to.equal("0"); + }); + + it("should reward alith and charleth", async function () { + expect( + ( + await context.polkadotApi.query.system.account(baltathar.address.toString()) + ).data.free.toBigInt() > DEFAULT_GENESIS_BALANCE + ).to.be.false; + expect( + ( + await context.polkadotApi.query.system.account(charleth.address.toString()) + ).data.free.toBigInt() > DEFAULT_GENESIS_BALANCE + ).to.be.true; + expect( + ( + await context.polkadotApi.query.system.account(alith.address.toString()) + ).data.free.toBigInt() > ALITH_GENESIS_FREE_BALANCE + ).to.be.true; + }); + + it("should be back to open for registrations", async function () { + expect(await lotteryContract.methods.status().call()).to.equal("0"); + }); +}); diff --git a/tests/tests/test-randomness/test-randomness-vrf-request.ts b/tests/tests/test-randomness/test-randomness-vrf-request.ts new file mode 100644 index 0000000000..f1d0d1f226 --- /dev/null +++ b/tests/tests/test-randomness/test-randomness-vrf-request.ts @@ -0,0 +1,487 @@ +import "@moonbeam-network/api-augment/moonbase"; +import { u8aToHex } from "@polkadot/util"; +import { expect } from "chai"; +import { ethers } from "ethers"; +import { alith } from "../../util/accounts"; +import { + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS, + CONTRACT_RANDOMNESS_STATUS_PENDING, + CONTRACT_RANDOMNESS_STATUS_READY, + GLMR, + PRECOMPILE_RANDOMNESS_ADDRESS, +} from "../../util/constants"; +import { getCompiled } from "../../util/contracts"; +import { expectEVMResult } from "../../util/eth-transactions"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { ALITH_TRANSACTION_TEMPLATE, createTransaction } from "../../util/transactions"; + +const RANDOMNESS_CONTRACT_JSON = getCompiled("Randomness"); +const RANDOMNESS_INTERFACE = new ethers.utils.Interface(RANDOMNESS_CONTRACT_JSON.contract.abi); + +const SIMPLE_SALT = new Uint8Array([..."my_salt".padEnd(32, " ")].map((a) => a.charCodeAt(0))); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + it("should be successful", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 2, // future blocks + ]), + }) + ); + + expect(result.successful).to.be.true; + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(1); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + before("setup the request", async function () { + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 2, // future blocks + ]), + }) + ); + }); + + it("should store a request with id:0", async function () { + const requestId = parseInt( + ((await context.polkadotApi.query.randomness.requests.entries()) as any)[0][0] + .toHex() + .slice(-16), + 16 + ); + expect(requestId).to.equal(0); + }); + + it("should store the salt", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.salt.toHex()).to.equal(u8aToHex(SIMPLE_SALT)); + }); + + it("should store the refundAddress", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.refundAddress.toHex()).to.equal(alith.address.toLocaleLowerCase()); + }); + + // This is a bit weird as we are calling the precompile from a non smart-contract + it("should store the contractAddress", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.contractAddress.toHex()).to.equal(alith.address.toLocaleLowerCase()); + }); + + it("should store the fee", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.fee.toBigInt()).to.equal(1n * GLMR); + }); + + it("should store the gasLimit", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.gasLimit.toBigInt()).to.equal(100_000n); + }); + + it("should store the numWords", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.numWords.toBigInt()).to.equal(1n); + }); + + it("should be considered a local vrf type", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.info.isLocal).to.be.true; + }); + + it("should have a fulfillment block of 3", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.info.asLocal[0].toBigInt()).to.be.equal(3n); + }); + + it("should have an expiration block of 10001", async function () { + const request = ( + (await context.polkadotApi.query.randomness.requests.entries()) as any + )[0][1].unwrap().request; + expect(request.info.asLocal[1].toBigInt()).to.be.equal(10001n); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + it("should refuse a request with less than 2 blocks", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 1, // future blocks + ]), + }) + ); + + expect(result.successful).to.be.true; + expectEVMResult(result.events, "Error", "Other"); + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); + + it("should refuse a request with more than 2000 blocks", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 2001, // future blocks + ]), + }) + ); + + expect(result.successful).to.be.true; + expectEVMResult(result.events, "Error", "Other"); + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + it("should refuse a request with less than 1 random number", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 0, // number of random words + 2, // future blocks + ]), + }) + ); + + expect(result.successful).to.be.true; + expectEVMResult(result.events, "Error", "Other"); + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + it("should refuse a request with more than 100 random number", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 101, // number of random words + 2, // future blocks + ]), + }) + ); + + expect(result.successful).to.be.true; + expectEVMResult(result.events, "Error", "Other"); + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + it("should succeed for 100 random words", async function () { + const { result } = await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 100, // number of random words + 2, // future blocks + ]), + }) + ); + + expect(result.successful).to.be.true; + + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(1); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + it("should be marked as pending before the end of the delay", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + const delayBlocks = 4; + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + delayBlocks, // future blocks + ]), + }) + ); + + for (let i = 0; i < delayBlocks - 1; i++) { + await context.createBlock(); + } + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_PENDING.toString() + ); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting a random number", (context) => { + it("should be marked as ready after delay has passed", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + const delayBlocks = 3; + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + delayBlocks, // future blocks + ]), + }) + ); + + for (let i = 0; i < delayBlocks; i++) { + await context.createBlock(); + } + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_READY.toString() + ); + }); +}); + +describeDevMoonbeam("Randomness VRF - Requesting an invalid random number", (context) => { + it("should be marked as does not exists", async function () { + const randomnessContract = new context.web3.eth.Contract( + RANDOMNESS_CONTRACT_JSON.contract.abi, + PRECOMPILE_RANDOMNESS_ADDRESS + ); + + expect(await randomnessContract.methods.getRequestStatus(0).call()).to.equal( + CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS.toString() + ); + }); +}); + +describeDevMoonbeam("Randomness VRF - Fulfilling a random request", (context) => { + before("setup the request", async function () { + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 2, // future blocks + ]), + }) + ); + await context.createBlock(); + await context.createBlock(); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }) + ); + }); + + it("should remove the request", async function () { + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(0); + }); + + it("should remove the randomness results", async function () { + const randomnessResults = + await context.polkadotApi.query.randomness.randomnessResults.entries(); + expect(randomnessResults.length).to.equal(0); + }); +}); + +describeDevMoonbeam( + "Randomness VRF - Requesting 2 random requests at same block/delay", + (context) => { + before("setup the request", async function () { + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 3, // future blocks + ]), + }) + ); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 2, // future blocks + ]), + }) + ); + // printEvents(context.polkadotApi); + }); + + it("should create 2 requests", async function () { + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + // console.log(randomnessRequests); + expect(randomnessRequests.length).to.equal(2); + }); + + it("should have 1 random result", async function () { + const randomnessResults = + await context.polkadotApi.query.randomness.randomnessResults.entries(); + expect(randomnessResults.length).to.equal(1); + }); + } +); + +describeDevMoonbeam( + "Randomness VRF - Fulfilling one of the 2 random requests at same block/delay", + (context) => { + before("setup the request", async function () { + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 3, // future blocks + ]), + }) + ); + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("requestLocalVRFRandomWords", [ + alith.address, // refund address + 1n * GLMR, // fee + 100_000n, // gas limit + SIMPLE_SALT, + 1, // number of random words + 2, // future blocks + ]), + }) + ); + await context.createBlock(); + await context.createBlock(); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + to: PRECOMPILE_RANDOMNESS_ADDRESS, + data: RANDOMNESS_INTERFACE.encodeFunctionData("fulfillRequest", [0]), + }) + ); + }); + + it("should keep the 2nd request", async function () { + const randomnessRequests = await context.polkadotApi.query.randomness.requests.entries(); + expect(randomnessRequests.length).to.equal(1); + }); + + it("should keep the randomness results", async function () { + const randomnessResults = + await context.polkadotApi.query.randomness.randomnessResults.entries(); + expect(randomnessResults.length).to.equal(1); + }); + } +); diff --git a/tests/tests/test-receipt/test-receipt-revert.ts b/tests/tests/test-receipt/test-receipt-revert.ts index c4f4ffbacf..5185e1df47 100644 --- a/tests/tests/test-receipt/test-receipt-revert.ts +++ b/tests/tests/test-receipt/test-receipt-revert.ts @@ -1,3 +1,5 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; import { describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; @@ -5,19 +7,19 @@ import { createContract } from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Receipt - Revert", (context) => { it("should generate a receipt", async function () { - const { rawTx } = await createContract(context, "FailContract"); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - const receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + const { rawTx } = await createContract(context, "FailingConstructor"); + const { result } = await context.createBlock(rawTx); + const receipt = await context.web3.eth.getTransactionReceipt(result.hash); expect(receipt.status).to.be.false; expect(receipt).to.include({ blockNumber: 1, - contractAddress: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + contractAddress: "0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3", cumulativeGasUsed: 54600, - from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", + from: "0xf24ff3a9cf04c71dbc94d0b566f7a27b94566cac", gasUsed: 54600, to: null, - transactionHash: txResults[0].result, + transactionHash: result.hash, transactionIndex: 0, }); }); diff --git a/tests/tests/test-receipt/test-receipt-root.ts b/tests/tests/test-receipt/test-receipt-root.ts new file mode 100644 index 0000000000..d096effa61 --- /dev/null +++ b/tests/tests/test-receipt/test-receipt-root.ts @@ -0,0 +1,96 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith, baltathar } from "../../util/accounts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract, createTransfer } from "../../util/transactions"; + +import Tree from "merkle-patricia-tree"; +import { Receipt } from "eth-object"; +import { encode } from "eth-util-lite"; +import { promisify } from "util"; + +describeDevMoonbeam( + "Receipt root - With events", + (context) => { + before("Setup: Create block with multiple transaction types", async () => { + // Legacy + context.ethTransactionType = "Legacy"; + let legacyTransaction_1 = ( + await createContract(context, "EventEmitter", { + from: alith.address, + nonce: 0, + }) + ).rawTx; + let legacyTransaction_2 = await createTransfer(context, baltathar.address, 1, { nonce: 1 }); + // EIP2930 + context.ethTransactionType = "EIP2930"; + let EIP2930Transaction_1 = ( + await createContract(context, "EventEmitter", { + from: alith.address, + nonce: 2, + }) + ).rawTx; + let EIP2930Transaction_2 = await createTransfer(context, baltathar.address, 1, { nonce: 3 }); + // EIP1559 + context.ethTransactionType = "EIP1559"; + let EIP1559Transaction_1 = ( + await createContract(context, "EventEmitter", { + from: alith.address, + nonce: 4, + }) + ).rawTx; + let EIP1559Transaction_2 = await createTransfer(context, baltathar.address, 1, { nonce: 5 }); + await context.createBlock([ + legacyTransaction_1, + legacyTransaction_2, + EIP2930Transaction_1, + EIP2930Transaction_2, + EIP1559Transaction_1, + EIP1559Transaction_2, + ]); + }); + + it("Receipt root should match", async function () { + const block = await context.web3.eth.getBlock(1); + let receipts = []; + for (const txHash of block.transactions) { + const receipt = await context.web3.eth.getTransactionReceipt(txHash); + receipts.push(receipt); + } + // Verify we work with 6 receipts + expect(receipts.length).to.be.eq(6); + // Verify we have a receipt of each type + expect(receipts[0].type).to.be.eq("0x0"); + expect(receipts[1].type).to.be.eq("0x0"); + expect(receipts[2].type).to.be.eq("0x1"); + expect(receipts[3].type).to.be.eq("0x1"); + expect(receipts[4].type).to.be.eq("0x2"); + expect(receipts[5].type).to.be.eq("0x2"); + // Build the receipt trie. + const tree = new Tree(); + await Promise.all( + receipts.map((siblingReceipt, index) => { + let innerReceipt = { + logs: siblingReceipt.logs, + // The MPT js library expects `status` to be a number, not the + // web3 library `TransactionReceipt` boolean. + status: siblingReceipt.status ? "0x1" : "0x0", + cumulativeGasUsed: siblingReceipt.cumulativeGasUsed, + logsBloom: siblingReceipt.logsBloom, + type: siblingReceipt.type, + }; + let siblingPath = encode(index); + let serializedReceipt = Receipt.fromRpc(innerReceipt); + serializedReceipt = serializedReceipt.serialize(); + let promisified = promisify(tree.put).bind(tree); + return promisified(siblingPath, serializedReceipt); + }) + ); + // Onchain receipt root == Offchain receipt root + expect(block.receiptsRoot).to.be.eq("0x" + tree._root.toString("hex")); + }); + }, + "Legacy" +); diff --git a/tests/tests/test-receipt/test-receipt.ts b/tests/tests/test-receipt/test-receipt.ts index 7f1fd44541..b1823d6cc9 100644 --- a/tests/tests/test-receipt/test-receipt.ts +++ b/tests/tests/test-receipt/test-receipt.ts @@ -1,17 +1,25 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; +import { Contract } from "web3-eth-contract"; + +import { alith, baltathar } from "../../util/accounts"; import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../../util/setup-dev-tests"; -import { createContract, createTransaction } from "../../util/transactions"; -import { GENESIS_ACCOUNT, ALITH, ALITH_PRIV_KEY, TEST_ACCOUNT } from "../../util/constants"; +import { + ALITH_TRANSACTION_TEMPLATE, + createContract, + createTransaction, +} from "../../util/transactions"; describeDevMoonbeamAllEthTxTypes("Receipt - Contract", (context) => { - let txHash; - let eventContract; + let txHash: string; + let eventContract: Contract; before("Setup: Create block with contract", async () => { - const { contract, rawTx } = await createContract(context, "SingleEventContract", { - from: GENESIS_ACCOUNT, + const { contract, rawTx } = await createContract(context, "EventEmitter", { + from: alith.address, }); - const { txResults } = await context.createBlock({ transactions: [rawTx] }); - txHash = txResults[0].result; + const { result } = await context.createBlock(rawTx); + txHash = result.hash; eventContract = contract; }); @@ -21,7 +29,7 @@ describeDevMoonbeamAllEthTxTypes("Receipt - Contract", (context) => { expect(receipt.blockHash).to.be.eq(block.hash); expect(receipt.blockNumber).to.be.eq(block.number); - expect(receipt.from).to.be.eq(GENESIS_ACCOUNT.toLowerCase()); // web3 rpc returns lowercase + expect(receipt.from).to.be.eq(alith.address.toLowerCase()); // web3 rpc returns lowercase expect(receipt.logs.length).to.be.eq(1); expect(receipt.logs[0].address).to.be.eq(eventContract.options.address); expect(receipt.logs[0].blockHash).to.be.eq(block.hash); @@ -32,24 +40,21 @@ describeDevMoonbeam( "Receipt - EIP1559", (context) => { it("should calculate effective gas price", async function () { - const preBalance = BigInt(await context.web3.eth.getBalance(ALITH)); + const preBalance = BigInt(await context.web3.eth.getBalance(alith.address)); // With this configuration only half of the priority fee will be used, as the max_fee_per_gas // is 2GWEI and the base fee is 1GWEI. const maxFeePerGas = 1_000_000_000 * 2; - const tx = await createTransaction(context, { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - value: "0x0", - gas: "0x5208", - maxFeePerGas: maxFeePerGas, - maxPriorityFeePerGas: maxFeePerGas, - to: TEST_ACCOUNT, - data: "0x", - }); - - await context.createBlock({ - transactions: [tx], - }); + + await context.createBlock( + createTransaction(context, { + ...ALITH_TRANSACTION_TEMPLATE, + gas: "0x5208", + maxFeePerGas: maxFeePerGas, + maxPriorityFeePerGas: maxFeePerGas, + to: baltathar.address, + data: "0x", + }) + ); const block = await context.web3.eth.getBlock("latest"); const receipt = await context.web3.eth.getTransactionReceipt(block.transactions[0]); diff --git a/tests/tests/test-resubmit-txn.ts b/tests/tests/test-resubmit-txn.ts deleted file mode 100644 index 37f17470e7..0000000000 --- a/tests/tests/test-resubmit-txn.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; - -import { TEST_ACCOUNT } from "../util/constants"; -import { createTransfer } from "../util/transactions"; - -describeDevMoonbeam("Resubmit transations", (context) => { - it.skip("should allow resubmitting with higher gas", async function () { - const optionsLowGas = { nonce: 0, gasPrice: 0 }; - const optionsHighGas = { nonce: 0, gasPrice: 1 }; - - const transactions = [ - await createTransfer(context, TEST_ACCOUNT, 1, optionsLowGas), - await createTransfer(context, TEST_ACCOUNT, 2, optionsHighGas), - ]; - await context.createBlock({ transactions }); - - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal((2).toString()); - }); -}); - -describeDevMoonbeam("Resubmit transations", (context) => { - it.skip("should ignore resubmitting with lower gas", async function () { - const optionsLowGas = { nonce: 0, gasPrice: 0 }; - const optionsHighGas = { nonce: 0, gasPrice: 1 }; - - const transactions = [ - await createTransfer(context, TEST_ACCOUNT, 3, optionsHighGas), - await createTransfer(context, TEST_ACCOUNT, 1, optionsLowGas), - ]; - await context.createBlock({ transactions }); - - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal((3).toString()); - }); -}); - -describeDevMoonbeam("Resubmit transations", (context) => { - it.skip("should allow cancelling transaction", async function () { - // gas price should trump limit - const optionsLowGas = { nonce: 0, gasPrice: 0, gas: 0xfffff }; - const optionsHighGas = { nonce: 0, gasPrice: 1, gas: 0x10000 }; - - const transactions = [ - await createTransfer(context, TEST_ACCOUNT, 1, optionsLowGas), - await createTransfer(context, TEST_ACCOUNT, 2, optionsHighGas), - ]; - await context.createBlock({ transactions }); - - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal((2).toString()); - }); -}); - -describeDevMoonbeam("Resubmit transations", (context) => { - it.skip("should pick highest gas price from many transactions", async function () { - const optionsHighGas = { nonce: 0, gasPrice: 100 }; // gas price should trump limit - - let transactions = []; - for (let i = 1; i < 20; i++) { - const options = { nonce: 0, gasPrice: i }; - transactions.push(await createTransfer(context, TEST_ACCOUNT, i * 10, options)); - } - - // our expected txn... - transactions.push(await createTransfer(context, TEST_ACCOUNT, 42, optionsHighGas)); - - for (let i = 1; i < 20; i++) { - const options = { nonce: 0, gasPrice: i + 30 }; - transactions.push(await createTransfer(context, TEST_ACCOUNT, i * 100, options)); - } - - await context.createBlock({ transactions }); - - expect(await context.web3.eth.getBalance(TEST_ACCOUNT, 1)).to.equal((42).toString()); - }); -}); diff --git a/tests/tests/test-staking.ts b/tests/tests/test-staking.ts deleted file mode 100644 index 1cb1d3a493..0000000000 --- a/tests/tests/test-staking.ts +++ /dev/null @@ -1,693 +0,0 @@ -import "@polkadot/api-augment"; -import "@moonbeam-network/api-augment"; -import { SpRuntimeDispatchError, FrameSupportWeightsDispatchInfo } from "@polkadot/types/lookup"; -import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; -import { - DEFAULT_GENESIS_MAPPING, - DEFAULT_GENESIS_STAKING, - COLLATOR_ACCOUNT, - ETHAN_PRIVKEY, - MIN_GLMR_STAKING, - ETHAN, - ALITH, - MIN_GLMR_NOMINATOR, - GLMR, - BALTATHAR_PRIV_KEY, - BALTATHAR, -} from "../util/constants"; -import { describeDevMoonbeam, DevTestContext } from "../util/setup-dev-tests"; -import { KeyringPair } from "@substrate/txwrapper-core"; -import { IEvent } from "@polkadot/types/types"; - -describeDevMoonbeam("Staking - Genesis", (context) => { - it("should match collator reserved bond reserved", async function () { - const account = await context.polkadotApi.query.system.account(COLLATOR_ACCOUNT); - const expectedReserved = DEFAULT_GENESIS_STAKING + DEFAULT_GENESIS_MAPPING; - expect(account.data.reserved.toString()).to.equal(expectedReserved.toString()); - }); - - it("should include collator from the specs", async function () { - const collators = await context.polkadotApi.query.parachainStaking.selectedCandidates(); - expect(collators[0].toHex().toLowerCase()).equal(COLLATOR_ACCOUNT.toLowerCase()); - }); - - it("should have collator state as defined in the specs", async function () { - const collator = await context.polkadotApi.query.parachainStaking.candidateInfo( - COLLATOR_ACCOUNT - ); - expect(collator.toHuman()["status"]).equal("Active"); - }); - - it("should have inflation matching specs", async function () { - const inflationInfo = await context.polkadotApi.query.parachainStaking.inflationConfig(); - // { - // expect: { - // min: '100.0000 kUNIT', - // ideal: '200.0000 kUNIT', - // max: '500.0000 kUNIT' - // }, - // annual: { - // min: '4.00%', - // ideal: '5.00%', - // max: '5.00%', - // }, - // round: { min: '0.00%', ideal: '0.00%', max: '0.00%' } - // } - expect(inflationInfo["expect"]["min"].toBigInt()).to.eq(100_000n * GLMR); - expect(inflationInfo["expect"]["ideal"].toBigInt()).to.eq(200_000n * GLMR); - expect(inflationInfo["expect"]["max"].toBigInt()).to.eq(500_000n * GLMR); - expect(inflationInfo.toHuman()["annual"]["min"]).to.eq("4.00%"); - expect(inflationInfo.toHuman()["annual"]["ideal"]).to.eq("5.00%"); - expect(inflationInfo.toHuman()["annual"]["max"]).to.eq("5.00%"); - expect(inflationInfo.toHuman()["round"]["min"]).to.eq("0.00%"); - expect(Number(inflationInfo["round"]["min"])).to.eq(8949); // 4% / blocks per year * 10^9 - expect(inflationInfo.toHuman()["round"]["ideal"]).to.eq("0.00%"); - expect(Number(inflationInfo["round"]["ideal"])).to.eq(11132); // 5% / blocks per year * 10^9 - expect(inflationInfo.toHuman()["round"]["max"]).to.eq("0.00%"); - expect(Number(inflationInfo["round"]["max"])).to.eq(11132); // 5% / blocks per year * 10^9 - }); -}); - -describeDevMoonbeam("Staking - Join Candidates", (context) => { - const keyring = new Keyring({ type: "ethereum" }); - const ethan = keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - - before("should join as a candidate", async () => { - await context.polkadotApi.tx.parachainStaking - .joinCandidates(MIN_GLMR_STAKING, 1) - .signAndSend(ethan); - await context.createBlock(); - }); - - afterEach("cleanup candidate leave request", async () => { - let candidateCount = (await context.polkadotApi.query.parachainStaking.candidatePool()).length; - await context.polkadotApi.tx.parachainStaking - .cancelLeaveCandidates(candidateCount) - .signAndSend(ethan); - await context.createBlock(); - }); - - it("should successfully call joinCandidates", async function () { - let candidatesAfter = await context.polkadotApi.query.parachainStaking.candidatePool(); - expect(candidatesAfter.length).to.equal(2, "new candidate should have been added"); - expect(candidatesAfter[1].owner.toString()).to.equal( - ETHAN, - "new candidate ethan should have been added" - ); - expect(candidatesAfter[1].amount.toBigInt()).to.equal( - 1000n * GLMR, - "new candidate ethan should have been added (wrong amount)" - ); - }); - - it("should successfully schedule leave candidates", async function () { - let candidatesAfter = await context.polkadotApi.query.parachainStaking.candidatePool(); - expect(candidatesAfter.length).to.equal(2, "new candidate should have been added"); - - await context.polkadotApi.tx.parachainStaking - .scheduleLeaveCandidates(candidatesAfter.length) - .signAndSend(ethan); - await context.createBlock(); - - const candidateState = ( - await context.polkadotApi.query.parachainStaking.candidateInfo(ETHAN) - ).unwrap(); - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - const roundDelay = context.polkadotApi.consts.parachainStaking.leaveCandidatesDelay.toNumber(); - - expect(candidateState.status.isLeaving).to.be.true; - expect(candidateState.status.asLeaving.toNumber()).to.equal(currentRound + roundDelay); - }); - - it("should successfully execute schedule leave candidates at correct round", async function () { - this.timeout(20000); - - let candidatesAfter = await context.polkadotApi.query.parachainStaking.candidatePool(); - expect(candidatesAfter.length).to.equal(2, "new candidate should have been added"); - - await context.polkadotApi.tx.parachainStaking - .scheduleLeaveCandidates(candidatesAfter.length) - .signAndSend(ethan); - await context.createBlock(); - - const candidateState = ( - await context.polkadotApi.query.parachainStaking.candidateInfo(ETHAN) - ).unwrap(); - expect(candidateState.status.isLeaving).to.be.true; - - const whenRound = candidateState.status.asLeaving.toNumber(); - await jumpToRound(context, whenRound - 1); - - await context.polkadotApi.tx.parachainStaking - .executeLeaveCandidates(ETHAN, candidateState.delegationCount) - .signAndSend(ethan); - await context.createBlock(); - const extrinsicResult = await getExtrinsicResult( - context, - "parachainStaking", - "executeLeaveCandidates" - ); - expect(extrinsicResult).to.equal("CandidateCannotLeaveYet"); - - await jumpToRound(context, whenRound); - await context.polkadotApi.tx.parachainStaking - .executeLeaveCandidates(ETHAN, candidateState.delegationCount) - .signAndSend(ethan); - await context.createBlock(); - const candidateStateAfter = await context.polkadotApi.query.parachainStaking.candidateInfo( - ETHAN - ); - expect(candidateStateAfter.isNone).to.be.true; - }); -}); - -describeDevMoonbeam("Staking - Join Delegators", (context) => { - const keyring = new Keyring({ type: "ethereum" }); - const ethan = keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - - before("should successfully call delegate on ALITH", async function () { - await context.polkadotApi.tx.parachainStaking - .delegate(ALITH, MIN_GLMR_NOMINATOR, 0, 0) - .signAndSend(ethan); - await context.createBlock(); - }); - - afterEach("cleanup delegator leave request", async () => { - await context.polkadotApi.tx.parachainStaking.cancelLeaveDelegators().signAndSend(ethan); - await context.createBlock(); - }); - - it("should have successfully delegated stake to ALITH", async function () { - const delegatorsAfter = ( - await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN) - ).unwrap(); - expect(delegatorsAfter.delegations[0].owner.toString()).to.equal( - ALITH, - "new delegation to alith should have been added" - ); - expect(delegatorsAfter.delegations[0].amount.toBigInt()).to.equal( - 5n * GLMR, - "delegation amount to alith should be 5" - ); - }); - - it("should successfully schedule leave delegators", async function () { - await context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAndSend(ethan); - await context.createBlock(); - - const delegatorState = ( - await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN) - ).unwrap(); - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - const roundDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay.toNumber(); - - expect(delegatorState.status.isLeaving).to.be.true; - expect(delegatorState.status.asLeaving.toNumber()).to.equal(currentRound + roundDelay); - }); - - it("should successfully execute schedule leave delegators at correct round", async function () { - this.timeout(20000); - - await context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAndSend(ethan); - await context.createBlock(); - - const delegatorState = ( - await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN) - ).unwrap(); - expect(delegatorState.status.isLeaving).to.be.true; - - const whenRound = delegatorState.status.asLeaving.toNumber(); - await jumpToRound(context, whenRound - 1); - - await context.polkadotApi.tx.parachainStaking - .executeLeaveDelegators(ETHAN, delegatorState.delegations.length) - .signAndSend(ethan); - await context.createBlock(); - const extrinsicResult = await getExtrinsicResult( - context, - "parachainStaking", - "executeLeaveDelegators" - ); - expect(extrinsicResult).to.equal("DelegatorCannotLeaveYet"); - - await jumpToRound(context, whenRound); - await context.polkadotApi.tx.parachainStaking - .executeLeaveDelegators(ETHAN, delegatorState.delegations.length) - .signAndSend(ethan); - await context.createBlock(); - const delegatorStateAfter = await context.polkadotApi.query.parachainStaking.delegatorState( - ETHAN - ); - expect(delegatorStateAfter.isNone).to.be.true; - }); -}); - -describeDevMoonbeam("Staking - Delegation Requests", (context) => { - const numberToHex = (n: BigInt): string => `0x${n.toString(16).padStart(32, "0")}`; - - const BOND_AMOUNT = MIN_GLMR_NOMINATOR + 100n; - const BOND_AMOUNT_HEX = numberToHex(BOND_AMOUNT); - - let ethan: KeyringPair; - let balathar: KeyringPair; - beforeEach("should successfully call delegate on ALITH", async () => { - const keyring = new Keyring({ type: "ethereum" }); - ethan = keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - balathar = keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); - - await context.polkadotApi.tx.parachainStaking - .delegate(ALITH, BOND_AMOUNT, 0, 0) - .signAndSend(ethan); - await context.createBlock(); - }); - - afterEach("should clean up delegation requests", async () => { - await context.polkadotApi.tx.parachainStaking.cancelDelegationRequest(ALITH).signAndSend(ethan); - await context.createBlock(); - }); - - it("should successfully schedule revoke", async function () { - const delegationRequestsBefore = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsBefore.toJSON()).to.be.empty; - - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - - // schedule revoke - await context.polkadotApi.tx.parachainStaking - .scheduleRevokeDelegation(ALITH) - .signAndSend(ethan); - await context.createBlock(); - - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - const roundDelay = context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); - expect(delegationRequestsAfter.toJSON()).to.deep.equal([ - { - delegator: ETHAN, - whenExecutable: currentRound + roundDelay, - action: { - revoke: BOND_AMOUNT_HEX, - }, - }, - ]); - }); - - it("should successfully cancel revoke", async function () { - const delegationRequestsBefore = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsBefore.toJSON()).to.be.empty; - - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - - await context.polkadotApi.tx.parachainStaking - .scheduleRevokeDelegation(ALITH) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequestsAfterSchedule = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - const roundDelay = context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); - expect(delegationRequestsAfterSchedule.toJSON()).to.deep.equal([ - { - delegator: ETHAN, - whenExecutable: currentRound + roundDelay, - action: { - revoke: BOND_AMOUNT_HEX, - }, - }, - ]); - - await context.polkadotApi.tx.parachainStaking.cancelDelegationRequest(ALITH).signAndSend(ethan); - await context.createBlock(); - - const delegationRequestsAfterCancel = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsAfterCancel).to.be.empty; - }); - - it("should not execute revoke before target round", async function () { - this.timeout(50000); - - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - - // schedule revoke - await context.polkadotApi.tx.parachainStaking - .scheduleRevokeDelegation(ALITH) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequests = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequests.toJSON()).to.not.be.empty; - - // jump to a round before the actual executable Round - await jumpToRound(context, delegationRequests[0].whenExecutable - 1); - - // execute revoke - await context.polkadotApi.tx.parachainStaking - .executeDelegationRequest(ETHAN, ALITH) - .signAndSend(ethan); - - await context.createBlock(); - const extrinsicResult = await getExtrinsicResult( - context, - "parachainStaking", - "executeDelegationRequest" - ); - expect(extrinsicResult).to.equal("PendingDelegationRequestNotDueYet"); - - const { delegations: delegationsAfter } = ( - await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN) - ).unwrap(); - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - - expect(delegationsAfter.toJSON()).to.deep.equal([ - { - owner: ALITH, - amount: BOND_AMOUNT_HEX, - }, - ]); - const roundDelay = context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); - expect(delegationRequestsAfter.toJSON()).to.deep.equal([ - { - delegator: ETHAN, - whenExecutable: currentRound + roundDelay, - action: { - revoke: BOND_AMOUNT_HEX, - }, - }, - ]); - }); - - it("should successfully execute revoke", async function () { - this.timeout(20000); - - // schedule revoke - await context.polkadotApi.tx.parachainStaking - .scheduleRevokeDelegation(ALITH) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequests = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequests.toJSON()).to.not.be.empty; - - // jump to executable Round - await jumpToRound(context, delegationRequests[0].whenExecutable); - - // execute revoke - await context.polkadotApi.tx.parachainStaking - .executeDelegationRequest(ETHAN, ALITH) - .signAndSend(ethan); - await context.createBlock(); - - const delegationsAfter = await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN); - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - // last delegation revoked, so delegator marked as leaving - expect(delegationsAfter.isNone).to.be.true; - expect(delegationRequestsAfter.toJSON()).to.be.empty; - }); - - it("should successfully schedule bond less", async function () { - const delegationRequestsBefore = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsBefore.toJSON()).to.be.empty; - - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - - // schedule bond less - await context.polkadotApi.tx.parachainStaking - .scheduleDelegatorBondLess(ALITH, 10n) - .signAndSend(ethan); - await context.createBlock(); - - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - const roundDelay = - context.polkadotApi.consts.parachainStaking.delegationBondLessDelay.toNumber(); - expect(delegationRequestsAfter.toJSON()).to.deep.equal([ - { - delegator: ETHAN, - whenExecutable: currentRound + roundDelay, - action: { - decrease: 10, - }, - }, - ]); - }); - - it("should successfully cancel bond less", async function () { - const delegationRequestsBefore = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsBefore.toJSON()).to.be.empty; - - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - - const LESS_AMOUNT = 10; - await context.polkadotApi.tx.parachainStaking - .scheduleDelegatorBondLess(ALITH, LESS_AMOUNT) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequestsAfterSchedule = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - const roundDelay = - context.polkadotApi.consts.parachainStaking.delegationBondLessDelay.toNumber(); - expect(delegationRequestsAfterSchedule.toJSON()).to.deep.equal([ - { - delegator: ETHAN, - whenExecutable: currentRound + roundDelay, - action: { - decrease: LESS_AMOUNT, - }, - }, - ]); - - await context.polkadotApi.tx.parachainStaking.cancelDelegationRequest(ALITH).signAndSend(ethan); - await context.createBlock(); - - const delegationRequestsAfterCancel = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsAfterCancel.toJSON()).to.be.empty; - }); - - it("should not execute bond less before target round", async function () { - this.timeout(50000); - - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - - // schedule bond less - const LESS_AMOUNT = 10; - await context.polkadotApi.tx.parachainStaking - .scheduleDelegatorBondLess(ALITH, LESS_AMOUNT) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequests = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequests.toJSON()).to.not.be.empty; - - // jump to a round before the actual executable Round - await jumpToRound(context, delegationRequests[0].whenExecutable - 1); - - // execute bond less - await context.polkadotApi.tx.parachainStaking - .executeDelegationRequest(ETHAN, ALITH) - .signAndSend(ethan); - - await context.createBlock(); - const extrinsicResult = await getExtrinsicResult( - context, - "parachainStaking", - "executeDelegationRequest" - ); - expect(extrinsicResult).to.equal("PendingDelegationRequestNotDueYet"); - - const { delegations: delegationsAfter } = ( - await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN) - ).unwrap(); - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - - expect(delegationsAfter.toJSON()).to.deep.equal([ - { - owner: ALITH, - amount: BOND_AMOUNT_HEX, - }, - ]); - - const roundDelay = - context.polkadotApi.consts.parachainStaking.delegationBondLessDelay.toNumber(); - expect(delegationRequestsAfter.toJSON()).to.deep.equal([ - { - delegator: ETHAN, - whenExecutable: currentRound + roundDelay, - action: { - decrease: LESS_AMOUNT, - }, - }, - ]); - }); - - it("should successfully execute bond less", async function () { - this.timeout(20000); - - // schedule bond less - const LESS_AMOUNT = 10; - await context.polkadotApi.tx.parachainStaking - .scheduleDelegatorBondLess(ALITH, LESS_AMOUNT) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequests = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequests).to.not.be.empty; - - // jump to executable Round - await jumpToRound(context, delegationRequests[0].whenExecutable); - - // execute bond less - await context.polkadotApi.tx.parachainStaking - .executeDelegationRequest(ETHAN, ALITH) - .signAndSend(ethan); - await context.createBlock(); - - const { - delegations: [firstDelegationAfter, ..._], - } = (await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN)).unwrap(); - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(firstDelegationAfter.toJSON()).to.deep.equal({ - owner: ALITH, - amount: numberToHex(BOND_AMOUNT - BigInt(LESS_AMOUNT)), - }); - expect(delegationRequestsAfter.toJSON()).to.be.empty; - }); - - it("should successfully remove scheduled requests on collator leave", async function () { - this.timeout(20000); - - await context.polkadotApi.tx.parachainStaking - .joinCandidates(100n * BOND_AMOUNT, 1) - .signAndSend(balathar); - await context.createBlock(); - - await context.polkadotApi.tx.parachainStaking - .delegate(BALTATHAR, BOND_AMOUNT, 0, 1) - .signAndSend(ethan); - await context.createBlock(); - - const delegationRequestsBefore = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsBefore.toJSON()).to.be.empty; - - // schedule bond less - await context.polkadotApi.tx.parachainStaking - .scheduleDelegatorBondLess(BALTATHAR, 10n) - .signAndSend(ethan); - await context.createBlock(); - await context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAndSend(balathar); - await context.createBlock(); - - const collatorState = await context.polkadotApi.query.parachainStaking.candidateInfo(BALTATHAR); - await jumpToRound(context, collatorState.unwrap().status.asLeaving.toNumber()); - - await context.polkadotApi.tx.parachainStaking - .executeLeaveCandidates(BALTATHAR, 1) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsAfter.toJSON()).to.be.empty; - }); - - it("should successfully remove scheduled requests on delegator leave", async function () { - this.timeout(20000); - - const delegationRequestsBefore = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsBefore.toJSON()).to.be.empty; - - // schedule bond less - await context.polkadotApi.tx.parachainStaking - .scheduleDelegatorBondLess(ALITH, 10n) - .signAndSend(ethan); - await context.createBlock(); - await context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAndSend(ethan); - await context.createBlock(); - - const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState(ETHAN); - await jumpToRound(context, delegatorState.unwrap().status.asLeaving.toNumber()); - - await context.polkadotApi.tx.parachainStaking - .executeLeaveDelegators(ETHAN, 1) - .signAndSend(ethan); - await context.createBlock(); - const delegationRequestsAfter = - await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(ALITH); - expect(delegationRequestsAfter.toJSON()).to.be.empty; - }); -}); - -async function jumpToRound(context: DevTestContext, round: Number) { - while (true) { - const currentRound = ( - await context.polkadotApi.query.parachainStaking.round() - ).current.toNumber(); - if (currentRound == round) { - break; - } - await context.createBlock(); - } -} - -async function getExtrinsicResult( - context: DevTestContext, - pallet: string, - call: string -): Promise { - const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); - const apiAt = await context.polkadotApi.at(signedBlock.block.header.hash); - const allEvents = await apiAt.query.system.events(); - - const extrinsicIndex = signedBlock.block.extrinsics.findIndex( - (ext) => pallet == ext.method.section && call === ext.method.method - ); - if (extrinsicIndex === -1) { - return null; - } - - const failedEvent = allEvents.find( - ({ phase, event }) => - phase.isApplyExtrinsic && - phase.asApplyExtrinsic.eq(extrinsicIndex) && - context.polkadotApi.events.system.ExtrinsicFailed.is(event) - ); - if (!failedEvent) { - return null; - } - - const event: IEvent<[SpRuntimeDispatchError, FrameSupportWeightsDispatchInfo]> = - failedEvent.event as any; - const [dispatchError, _dispatchInfo] = event.data; - if (dispatchError.isModule) { - const decodedError = context.polkadotApi.registry.findMetaError(dispatchError.asModule); - return decodedError.name; - } - - return dispatchError.toString(); -} diff --git a/tests/tests/test-staking/test-candidate-join.ts b/tests/tests/test-staking/test-candidate-join.ts new file mode 100644 index 0000000000..bbc195229a --- /dev/null +++ b/tests/tests/test-staking/test-candidate-join.ts @@ -0,0 +1,90 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { MIN_GLMR_STAKING, MIN_GLMR_DELEGATOR } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith, ethan } from "../../util/accounts"; +import { expectOk } from "../../util/expect"; + +describeDevMoonbeam("Staking - Candidate Join - bond less than min", (context) => { + it("should fail", async () => { + const minCandidateStk = context.polkadotApi.consts.parachainStaking.minCandidateStk; + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .joinCandidates(minCandidateStk.subn(10), 1) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("CandidateBondBelowMin"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Join - already a delegator", (context) => { + before("should delegete", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan) + ) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("DelegatorExists"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Join - already a candidate", (context) => { + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(alith) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("CandidateExists"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Join - wrong candidate delegation hint", (context) => { + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 0).signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("TooLowCandidateCountWeightHintJoinCandidates"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Join - valid request", (context) => { + const numberToHex = (n: BigInt): string => `0x${n.toString(16).padStart(32, "0")}`; + + before("should join candidates", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(ethan) + ) + ); + }); + + it("should succeed", async () => { + const candidateState = await context.polkadotApi.query.parachainStaking.candidateInfo( + ethan.address + ); + expect(candidateState.unwrap().toJSON()).to.deep.equal({ + bond: numberToHex(MIN_GLMR_STAKING), + delegationCount: 0, + totalCounted: numberToHex(MIN_GLMR_STAKING), + lowestTopDelegationAmount: 0, + highestBottomDelegationAmount: 0, + lowestBottomDelegationAmount: 0, + topCapacity: "Empty", + bottomCapacity: "Empty", + request: null, + status: { active: null }, + }); + }); +}); diff --git a/tests/tests/test-staking/test-candidate-leave.ts b/tests/tests/test-staking/test-candidate-leave.ts new file mode 100644 index 0000000000..9d34d35448 --- /dev/null +++ b/tests/tests/test-staking/test-candidate-leave.ts @@ -0,0 +1,255 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith, ethan } from "../../util/accounts"; +import { expectOk } from "../../util/expect"; +import { jumpRounds } from "../../util/block"; +import { MIN_GLMR_STAKING } from "../../util/constants"; + +describeDevMoonbeam("Staking - Candidate Leave Schedule - hint too low", (context) => { + before("should join candidate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(ethan) + ) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(1).signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("TooLowCandidateCountToLeaveCandidates"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Leave Schedule - already scheduled", (context) => { + before("should join candidate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(ethan) + ) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("CandidateAlreadyLeaving"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Leave Schedule - valid request", (context) => { + before("should join candidate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(ethan) + ) + ); + }); + + it("should change status to leaving at correct round", async () => { + const candidatePool = (await context.polkadotApi.query.parachainStaking.candidatePool()).map( + (c) => c.owner.toString() + ); + const candidateState = ( + await context.polkadotApi.query.parachainStaking.candidateInfo(ethan.address) + ).unwrap(); + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveCandidatesDelay; + const currentRound = (await context.polkadotApi.query.parachainStaking.round()).current; + + expect(candidatePool).to.be.deep.equal([alith.address]); + expect(candidateState.status.isLeaving).to.be.true; + expect(candidateState.status.asLeaving.toNumber()).to.equal( + currentRound.add(leaveDelay).toNumber() + ); + }); +}); + +describeDevMoonbeam("Staking - Candidate Leave Execute - before round delay", (context) => { + before("should join candidates, schedule leave, and jump to earlier round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(ethan) + ) + ); + + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.subn(1).toNumber()); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveCandidates(ethan.address, 0) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("CandidateCannotLeaveYet"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Leave Execute - exact round delay", (context) => { + before("should join candidates, schedule leave, and jump to exact round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(ethan) + ) + ); + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.toNumber()); + }); + + it("should succeed", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveCandidates(ethan.address, 0) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.true; + const leaveEvents = block.result.events.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.CandidateLeft.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + }); + } + return acc; + }, []); + + expect(leaveEvents).to.deep.equal([ + { + account: ethan.address, + }, + ]); + }); +}); + +describeDevMoonbeam("Staking - Candidate Leave Execute - after round delay", (context) => { + before("should join candidates, schedule leave, and jump to after round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(ethan) + ) + ); + + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.addn(5).toNumber()); + }); + + it("should succeed", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveCandidates(ethan.address, 0) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.true; + const leaveEvents = block.result.events.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.CandidateLeft.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + }); + } + return acc; + }, []); + + expect(leaveEvents).to.deep.equal([ + { + account: ethan.address, + }, + ]); + }); +}); + +describeDevMoonbeam("Staking - Candidate Leave Cancel - leave not scheduled", (context) => { + before("should join candidates", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(ethan) + ) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.cancelLeaveCandidates(2).signAsync(ethan) + ); + expect(block.result.error.name).to.equal("CandidateNotLeaving"); + }); +}); + +describeDevMoonbeam("Staking - Candidate Leave Cancel - leave scheduled", (context) => { + before("should join candidates and schedule leave", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.joinCandidates(MIN_GLMR_STAKING, 1).signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(ethan) + ) + ); + }); + + it("should succeed", async () => { + const candidateStateBefore = ( + await context.polkadotApi.query.parachainStaking.candidateInfo(ethan.address) + ).unwrap(); + expect(candidateStateBefore.status.isLeaving).to.be.true; + + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.cancelLeaveCandidates(2).signAsync(ethan) + ); + expect(block.result.successful).to.be.true; + + const candidateStateAfter = ( + await context.polkadotApi.query.parachainStaking.candidateInfo(ethan.address) + ).unwrap(); + expect(candidateStateAfter.status.isActive).to.be.true; + }); +}); diff --git a/tests/tests/test-staking/test-delegation-scheduled-requests.ts b/tests/tests/test-staking/test-delegation-scheduled-requests.ts new file mode 100644 index 0000000000..1c84de92eb --- /dev/null +++ b/tests/tests/test-staking/test-delegation-scheduled-requests.ts @@ -0,0 +1,754 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { MIN_GLMR_DELEGATOR, MIN_GLMR_STAKING } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith, baltathar, ethan } from "../../util/accounts"; +import { expectOk } from "../../util/expect"; +import { jumpToRound, jumpRounds } from "../../util/block"; + +const numberToHex = (n: BigInt): string => `0x${n.toString(16).padStart(32, "0")}`; + +describeDevMoonbeam("Staking - Delegation Scheduled Requests - schedule revoke", (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + }); + + it("should succeed", async () => { + const currentRound = ( + await context.polkadotApi.query.parachainStaking.round() + ).current.toNumber(); + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ); + + const delegationRequestsAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + const roundDelay = context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); + expect(delegationRequestsAfter.toJSON()).to.deep.equal([ + { + delegator: ethan.address, + whenExecutable: currentRound + roundDelay, + action: { + revoke: numberToHex(MIN_GLMR_DELEGATOR), + }, + }, + ]); + }); +}); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests - cancel scheduled revoke", + (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ) + ); + }); + + it("should succeed", async () => { + const currentRound = ( + await context.polkadotApi.query.parachainStaking.round() + ).current.toNumber(); + const delegationRequestsAfterSchedule = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + const roundDelay = + context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); + expect(delegationRequestsAfterSchedule.toJSON()).to.deep.equal([ + { + delegator: ethan.address, + whenExecutable: currentRound + roundDelay, + action: { + revoke: numberToHex(MIN_GLMR_DELEGATOR), + }, + }, + ]); + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .cancelDelegationRequest(alith.address) + .signAsync(ethan) + ); + + const delegationRequestsAfterCancel = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegationRequestsAfterCancel).to.be.empty; + }); + } +); + +describeDevMoonbeam("Staking - Delegation Scheduled Requests - execute revoke early", (context) => { + before("should schedule revoke and jump to early round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ) + ); + + // jump to a round before the actual executable Round + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + await jumpToRound(context, delegationRequests[0].whenExecutable.toNumber() - 1); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(ethan.address, alith.address) + .signAsync(ethan) + ); + expect(block.result.error.name).to.equal("PendingDelegationRequestNotDueYet"); + }); +}); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests - execute revoke exact round delay", + (context) => { + before("should schedule revoke and jump to exact round", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar) + ) + ); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ) + ); + + // jump to exact executable Round + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + await jumpToRound(context, delegationRequests[0].whenExecutable.toNumber()); + }); + + it("should succeed", async () => { + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(ethan.address, alith.address) + .signAsync(ethan) + ); + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + ethan.address + ); + const delegationRequestsAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegatorState.unwrap().delegations.toJSON()).to.deep.equal([ + { + owner: baltathar.address, + amount: numberToHex(MIN_GLMR_DELEGATOR), + }, + ]); + expect(delegationRequestsAfter.toJSON()).to.be.empty; + }); + } +); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests - execute revoke after round delay", + (context) => { + before("should schedule revoke and jump to after round", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar) + ) + ); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ) + ); + + // jump to exact executable Round + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + await jumpToRound(context, delegationRequests[0].whenExecutable.toNumber() + 5); + }); + + it("should succeed", async () => { + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(ethan.address, alith.address) + .signAsync(ethan) + ); + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + ethan.address + ); + const delegationRequestsAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegatorState.unwrap().delegations.toJSON()).to.deep.equal([ + { + owner: baltathar.address, + amount: numberToHex(MIN_GLMR_DELEGATOR), + }, + ]); + expect(delegationRequestsAfter.toJSON()).to.be.empty; + }); + } +); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests - execute revoke on last delegation", + (context) => { + before("should schedule revoke and jump to exact round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ) + ); + + // jump to exact executable Round + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + await jumpToRound(context, delegationRequests[0].whenExecutable.toNumber()); + }); + + it("should succeed and leave as delegator", async () => { + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(ethan.address, alith.address) + .signAsync(ethan) + ); + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + ethan.address + ); + const delegationRequestsAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegatorState.isNone).to.be.true; // last delegation revoked, so delegator left + expect(delegationRequestsAfter.toJSON()).to.be.empty; + }); + } +); + +describeDevMoonbeam("Staking - Delegation Scheduled Requests - schedule bond less", (context) => { + const LESS_AMOUNT = 10n; + + before("should delegate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + LESS_AMOUNT, 0, 0) + .signAsync(ethan), + ]) + ); + }); + + it("should succeed", async () => { + const currentRound = ( + await context.polkadotApi.query.parachainStaking.round() + ).current.toNumber(); + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, LESS_AMOUNT) + .signAsync(ethan) + ); + + const delegationRequestsAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + const roundDelay = context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); + expect(delegationRequestsAfter.toJSON()).to.deep.equal([ + { + delegator: ethan.address, + whenExecutable: currentRound + roundDelay, + action: { + decrease: Number(LESS_AMOUNT), + }, + }, + ]); + }); +}); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests - cancel scheduled bond less", + (context) => { + const LESS_AMOUNT = 10n; + + before("should delegate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + LESS_AMOUNT, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, LESS_AMOUNT) + .signAsync(ethan) + ) + ); + }); + + it("should succeed", async () => { + const currentRound = ( + await context.polkadotApi.query.parachainStaking.round() + ).current.toNumber(); + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + const roundDelay = + context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); + expect(delegationRequests.toJSON()).to.deep.equal([ + { + delegator: ethan.address, + whenExecutable: currentRound + roundDelay, + action: { + decrease: Number(LESS_AMOUNT), + }, + }, + ]); + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .cancelDelegationRequest(alith.address) + .signAsync(ethan) + ); + + const delegationRequestsAfterCancel = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegationRequestsAfterCancel.toJSON()).to.be.empty; + }); + } +); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests - execute bond less early", + (context) => { + const LESS_AMOUNT = 10n; + + before("should schedule bond less and jump to premature round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + LESS_AMOUNT, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, LESS_AMOUNT) + .signAsync(ethan) + ) + ); + + // jump to a round before the actual executable Round + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + await jumpToRound(context, delegationRequests[0].whenExecutable.toNumber() - 1); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(ethan.address, alith.address) + .signAsync(ethan) + ); + expect(block.result.error.name).to.equal("PendingDelegationRequestNotDueYet"); + }); + } +); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests -execute bond less exact round", + (context) => { + const LESS_AMOUNT = 10n; + + before("should schedule bond less and jump to exact round", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar) + ) + ); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + LESS_AMOUNT, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR + LESS_AMOUNT, 0, 1) + .signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, LESS_AMOUNT) + .signAsync(ethan) + ) + ); + + // jump to exact executable Round + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + await jumpToRound(context, delegationRequests[0].whenExecutable.toNumber()); + }); + + it("should succeed", async () => { + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(ethan.address, alith.address) + .signAsync(ethan) + ); + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + ethan.address + ); + const delegationRequestsAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegatorState.unwrap().delegations.toJSON()).to.deep.equal([ + { + owner: baltathar.address, + amount: numberToHex(MIN_GLMR_DELEGATOR + LESS_AMOUNT), + }, + { + owner: alith.address, + amount: numberToHex(MIN_GLMR_DELEGATOR), + }, + ]); + expect(delegationRequestsAfter.toJSON()).to.be.empty; + }); + } +); + +describeDevMoonbeam( + "Staking - Delegation Scheduled Requests - execute bond less after round delay", + (context) => { + const LESS_AMOUNT = 10n; + + before("should schedule bond less and jump to after round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + LESS_AMOUNT, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR + LESS_AMOUNT, 0, 1) + .signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, LESS_AMOUNT) + .signAsync(ethan) + ) + ); + + // jump to exact executable Round + const delegationRequests = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + await jumpToRound(context, delegationRequests[0].whenExecutable.toNumber() + 5); + }); + + it("should succeed", async () => { + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(ethan.address, alith.address) + .signAsync(ethan) + ); + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + ethan.address + ); + const delegationRequestsAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegatorState.unwrap().delegations.toJSON()).to.deep.equal([ + { + owner: baltathar.address, + amount: numberToHex(MIN_GLMR_DELEGATOR + LESS_AMOUNT), + }, + { + owner: alith.address, + amount: numberToHex(MIN_GLMR_DELEGATOR), + }, + ]); + expect(delegationRequestsAfter.toJSON()).to.be.empty; + }); + } +); + +describeDevMoonbeam("Staking - Delegation Scheduled Requests - collator leave", (context) => { + let whenExecutable: number; + before("should delegate and add baltathar as candidate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + 10n, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR + 10n, 0, 1) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, 10n) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(baltathar.address, 10n) + .signAsync(ethan), + context.polkadotApi.tx.parachainStaking.scheduleLeaveCandidates(2).signAsync(baltathar), + ]) + ); + + const currentRound = ( + await context.polkadotApi.query.parachainStaking.round() + ).current.toNumber(); + const roundDelay = context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber(); + whenExecutable = currentRound + roundDelay; + + const collatorState = await context.polkadotApi.query.parachainStaking.candidateInfo( + baltathar.address + ); + await jumpToRound(context, collatorState.unwrap().status.asLeaving.toNumber()); + }); + + it("should remove complete storage item", async () => { + const delegationRequestsBefore = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests( + baltathar.address + ); + expect(delegationRequestsBefore.toJSON()).to.not.be.empty; + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveCandidates(baltathar.address, 1) + .signAsync(ethan) + ); + + const delegationRequestsBaltatharAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests( + baltathar.address + ); + const delegationRequestsAlithAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + expect(delegationRequestsAlithAfter.toJSON()).to.deep.equal([ + { + delegator: ethan.address, + whenExecutable, + action: { + decrease: 10, + }, + }, + ]); + expect(delegationRequestsBaltatharAfter.toJSON()).to.be.empty; + const delagationRequestsKeys = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests.keys(); + expect(delagationRequestsKeys.map((k) => k.args[0].toString())).to.deep.equal([alith.address]); + }); +}); + +describeDevMoonbeam("Staking - Delegation Scheduled Requests - delegator leave", (context) => { + before("should delegate and add baltathar as candidate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + 10n, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR + 10n, 0, 1) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, 10n) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(baltathar.address, 10n) + .signAsync(ethan) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + + const roundDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay.toNumber(); + await jumpRounds(context, roundDelay); + }); + + it("should remove complete scheduled requests across multiple candidates", async () => { + const delegationRequestsAlithBefore = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + const delegationRequestsBaltatharBefore = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests( + baltathar.address + ); + expect(delegationRequestsAlithBefore.toJSON()).to.not.be.empty; + expect(delegationRequestsBaltatharBefore.toJSON()).to.not.be.empty; + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveDelegators(ethan.address, 2) + .signAsync(ethan) + ); + + const delegationRequestsAlithAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests(alith.address); + const delegationRequestsBaltatharAfter = + await context.polkadotApi.query.parachainStaking.delegationScheduledRequests( + baltathar.address + ); + expect(delegationRequestsAlithAfter.toJSON()).to.be.empty; + expect(delegationRequestsBaltatharAfter.toJSON()).to.be.empty; + }); +}); diff --git a/tests/tests/test-staking/test-delegator-bond-more.ts b/tests/tests/test-staking/test-delegator-bond-more.ts new file mode 100644 index 0000000000..eec62e58a9 --- /dev/null +++ b/tests/tests/test-staking/test-delegator-bond-more.ts @@ -0,0 +1,110 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { MIN_GLMR_STAKING } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith, ethan } from "../../util/accounts"; +import { expectOk } from "../../util/expect"; + +describeDevMoonbeam("Staking - Bond More - no scheduled request", (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_STAKING * 5n, 0, 0) + .signAsync(ethan) + ) + ); + }); + + it("should succeed and increase total", async () => { + const bondAmountBefore = ( + await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address) + ).unwrap().total; + + const increaseAmount = 5; + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegatorBondMore(alith.address, increaseAmount) + .signAsync(ethan) + ); + + const bondAmountAfter = ( + await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address) + ).unwrap().total; + expect(bondAmountAfter.eq(bondAmountBefore.addn(increaseAmount))).to.be.true; + }); +}); + +describeDevMoonbeam("Staking - Bond More - bond less scheduled", (context) => { + before("should schedule bond less", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_STAKING * 5n, 0, 0) + .signAsync(ethan) + ) + ); + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, 10n) + .signAsync(ethan) + ); + }); + + it("should succeed and increase total", async () => { + const bondAmountBefore = ( + await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address) + ).unwrap().total; + + const increaseAmount = 5; + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegatorBondMore(alith.address, increaseAmount) + .signAsync(ethan) + ); + + const bondAmountAfter = ( + await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address) + ).unwrap().total; + expect(bondAmountAfter.eq(bondAmountBefore.addn(increaseAmount))).to.be.true; + }); +}); + +describeDevMoonbeam("Staking - Bond More - revoke scheduled", (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_STAKING * 5n, 0, 0) + .signAsync(ethan) + ) + ); + + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ); + }); + + it("should fail", async () => { + const bondAmountBefore = ( + await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address) + ).unwrap().total; + + const increaseAmount = 5n; + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegatorBondMore(alith.address, increaseAmount) + .signAsync(ethan) + ); + + expect(block.result.error.name).to.equal("PendingDelegationRevoke"); + const bondAmountAfter = ( + await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address) + ).unwrap().total; + expect(bondAmountAfter.eq(bondAmountBefore)).to.be.true; + }); +}); diff --git a/tests/tests/test-staking/test-delegator-join.ts b/tests/tests/test-staking/test-delegator-join.ts new file mode 100644 index 0000000000..a11790d9b1 --- /dev/null +++ b/tests/tests/test-staking/test-delegator-join.ts @@ -0,0 +1,172 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { MIN_GLMR_STAKING, MIN_GLMR_DELEGATOR } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith, baltathar, charleth, ethan } from "../../util/accounts"; +import { expectOk } from "../../util/expect"; + +describeDevMoonbeam("Staking - Delegator Join - bond less than min", (context) => { + it("should fail", async () => { + const minDelegatorStk = context.polkadotApi.consts.parachainStaking.minDelegatorStk; + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, minDelegatorStk.subn(10), 0, 0) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("DelegatorBondBelowMin"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Join- candidate not exists", (context) => { + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("CandidateDNE"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Join- candidate not exists and self", (context) => { + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(ethan.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("CandidateDNE"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Join - already a candidate", (context) => { + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(alith) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("CandidateExists"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Join - already delegated", (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan) + ) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("AlreadyDelegatedCandidate"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Join - wrong candidate delegation hint", (context) => { + before( + "should setup alith+baltathar are candidates and ethan+chaleth as delegators", + async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(charleth), + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + } + ); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("TooLowCandidateDelegationCountToDelegate"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Join - wrong delegation hint", (context) => { + before( + "should setup alith+baltathar are candidates and ethan+chaleth as delegators", + async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(charleth), + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + } + ); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 1, 0) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("TooLowDelegationCountToDelegate"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Join - valid request", (context) => { + const numberToHex = (n: BigInt): string => `0x${n.toString(16).padStart(32, "0")}`; + + before("should delegate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 1, 0) + .signAsync(ethan) + ) + ); + }); + + it("should succeed", async () => { + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + ethan.address + ); + expect(delegatorState.unwrap().toJSON()).to.deep.equal({ + delegations: [ + { + amount: numberToHex(MIN_GLMR_DELEGATOR), + owner: alith.address, + }, + ], + id: ethan.address, + lessTotal: 0, + status: { active: null }, + total: numberToHex(MIN_GLMR_DELEGATOR), + }); + }); +}); diff --git a/tests/tests/test-staking/test-delegator-leave.ts b/tests/tests/test-staking/test-delegator-leave.ts new file mode 100644 index 0000000000..79a86a7c5a --- /dev/null +++ b/tests/tests/test-staking/test-delegator-leave.ts @@ -0,0 +1,456 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { MIN_GLMR_STAKING, MIN_GLMR_DELEGATOR } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith, baltathar, ethan } from "../../util/accounts"; +import { expectOk } from "../../util/expect"; +import { jumpRounds } from "../../util/block"; + +describeDevMoonbeam("Staking - Delegator Leave Schedule - already scheduled", (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("DelegatorAlreadyLeaving"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Leave Schedule - valid request", (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan) + ) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + }); + + it("should schedule revokes on all delegations", async () => { + const delegatorState = ( + await context.polkadotApi.query.parachainStaking.delegatorState(ethan.address) + ).unwrap(); + const currentRound = ( + await context.polkadotApi.query.parachainStaking.round() + ).current.toNumber(); + const roundDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay.toNumber(); + + for await (const delegation of delegatorState.delegations) { + const scheduledRequests = + (await context.polkadotApi.query.parachainStaking.delegationScheduledRequests( + delegation.owner + )) as unknown as any[]; + const revokeRequest = scheduledRequests.find( + (req) => req.delegator.eq(ethan.address) && req.action.isRevoke + ); + expect(revokeRequest).to.not.be.undefined; + expect(revokeRequest.whenExecutable.toNumber()).to.equal(currentRound + roundDelay); + } + }); +}); + +describeDevMoonbeam("Staking - Delegator Leave Execute - before round delay", (context) => { + before("should delegate, schedule leave, and jump to earlier round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.subn(1).toNumber()); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveDelegators(ethan.address, 1) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.false; + expect(block.result.error.name).to.equal("DelegatorCannotLeaveYet"); + }); +}); + +describeDevMoonbeam("Staking - Delegator Leave - exact round delay", (context) => { + before("should delegate, schedule leave, and jump to exact round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.toNumber()); + }); + + it("should succeed", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveDelegators(ethan.address, 1) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.true; + const leaveEvents = block.result.events.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.DelegatorLeft.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + }); + } + return acc; + }, []); + + expect(leaveEvents).to.deep.equal([ + { + account: ethan.address, + }, + ]); + }); +}); + +describeDevMoonbeam( + "Staking - Delegator Leave - executeLeaveDelegators executed after round delay", + (context) => { + const EXTRA_BOND_AMOUNT = 1_000_000_000_000_000_000n; + const BOND_AMOUNT = MIN_GLMR_STAKING + EXTRA_BOND_AMOUNT; + + before("should delegate, schedule leave, and jump to after round", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.addn(5).toNumber()); + }); + + it("should succeed", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveDelegators(ethan.address, 1) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.true; + const leaveEvents = block.result.events.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.DelegatorLeft.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + }); + } + return acc; + }, []); + + expect(leaveEvents).to.deep.equal([ + { + account: ethan.address, + }, + ]); + }); + } +); + +describeDevMoonbeam( + "Staking - Delegator Leave Cancel - one revoke manually cancelled", + (context) => { + before("should schedule leave then cancel single revoke", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.addn(1).toNumber()); + + // cancel single request + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .cancelDelegationRequest(baltathar.address) + .signAsync(ethan), + ]) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.cancelLeaveDelegators().signAsync(ethan) + ); + expect(block.result.error.name).to.equal("DelegatorNotLeaving"); + }); + } +); + +describeDevMoonbeam("Staking - Delegator Leave Cancel - manually reschedule revoke", (context) => { + before("should schedule leave then cancel single revoke then reschedule it", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.addn(1).toNumber()); + + // cancel single revoke request + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .cancelDelegationRequest(baltathar.address) + .signAsync(ethan) + ) + ); + + // reschedule single revoke request + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(baltathar.address) + .signAsync(ethan) + ) + ); + }); + + it("should succeed", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking.cancelLeaveDelegators().signAsync(ethan) + ); + expect(block.result.successful).to.be.true; + const leaveEvents = block.result.events.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.DelegatorExitCancelled.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + }); + } + return acc; + }, []); + expect(leaveEvents).to.deep.equal([ + { + account: ethan.address, + }, + ]); + }); +}); + +describeDevMoonbeam("Staking - Delegator Leave Execute - revoke manually cancelled", (context) => { + before("should schedule leave then cancel single revoke", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.addn(1).toNumber()); + + // cancel single revoke request + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .cancelDelegationRequest(baltathar.address) + .signAsync(ethan) + ) + ); + }); + + it("should fail", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveDelegators(ethan.address, 2) + .signAsync(ethan) + ); + expect(block.result.error.name).to.equal("DelegatorNotLeaving"); + }); +}); + +describeDevMoonbeam( + "Staking - Delegator Leave Execute - manually rescheduled revoke", + (context) => { + before("should schedule leave then cancel single revoke then reschedule it", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 0, 1) + .signAsync(ethan) + ) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + const leaveDelay = context.polkadotApi.consts.parachainStaking.leaveDelegatorsDelay; + await jumpRounds(context, leaveDelay.addn(1).toNumber()); + + // cancel single revoke request + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .cancelDelegationRequest(baltathar.address) + .signAsync(ethan) + ) + ); + + // reschedule single revoke request + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(baltathar.address) + .signAsync(ethan) + ) + ); + await jumpRounds(context, leaveDelay.addn(1).toNumber()); + }); + + it("should succeed", async () => { + const block = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeLeaveDelegators(ethan.address, 2) + .signAsync(ethan) + ); + expect(block.result.successful).to.be.true; + const leaveEvents = block.result.events.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.DelegatorLeft.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + }); + } + return acc; + }, []); + expect(leaveEvents).to.deep.equal([ + { + account: ethan.address, + }, + ]); + }); + } +); diff --git a/tests/tests/test-staking/test-genesis.ts b/tests/tests/test-staking/test-genesis.ts new file mode 100644 index 0000000000..4165638b80 --- /dev/null +++ b/tests/tests/test-staking/test-genesis.ts @@ -0,0 +1,59 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { DEFAULT_GENESIS_STAKING, GLMR } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith } from "../../util/accounts"; + +describeDevMoonbeam("Staking - Genesis", (context) => { + it("should match collator locked bond", async function () { + const locks = await context.polkadotApi.query.balances.locks(alith.address); + const expectedLocked = DEFAULT_GENESIS_STAKING; + expect( + locks + .filter((l) => l.id.toHuman() === "stkngcol") + .reduce((p, v) => p + v.amount.toBigInt(), 0n) + .toString(), + `Wrong locks: \n ${locks.map((lock) => `${lock.id.toHuman()}: ${lock.amount}`).join("\n")}\n` + ).to.equal(expectedLocked.toString()); + }); + + it("should include collator from the specs", async function () { + const collators = await context.polkadotApi.query.parachainStaking.selectedCandidates(); + expect(collators[0].toHex().toLowerCase()).equal(alith.address.toLowerCase()); + }); + + it("should have collator state as defined in the specs", async function () { + const collator = await context.polkadotApi.query.parachainStaking.candidateInfo(alith.address); + expect(collator.toHuman()["status"]).equal("Active"); + }); + + it("should have inflation matching specs", async function () { + const inflationInfo = await context.polkadotApi.query.parachainStaking.inflationConfig(); + // { + // expect: { + // min: '100.0000 kUNIT', + // ideal: '200.0000 kUNIT', + // max: '500.0000 kUNIT' + // }, + // annual: { + // min: '4.00%', + // ideal: '5.00%', + // max: '5.00%', + // }, + // round: { min: '0.00%', ideal: '0.00%', max: '0.00%' } + // } + expect(inflationInfo["expect"]["min"].toBigInt()).to.eq(100_000n * GLMR); + expect(inflationInfo["expect"]["ideal"].toBigInt()).to.eq(200_000n * GLMR); + expect(inflationInfo["expect"]["max"].toBigInt()).to.eq(500_000n * GLMR); + expect(inflationInfo.toHuman()["annual"]["min"]).to.eq("4.00%"); + expect(inflationInfo.toHuman()["annual"]["ideal"]).to.eq("5.00%"); + expect(inflationInfo.toHuman()["annual"]["max"]).to.eq("5.00%"); + expect(inflationInfo.toHuman()["round"]["min"]).to.eq("0.00%"); + expect(Number(inflationInfo["round"]["min"])).to.eq(8949); // 4% / blocks per year * 10^9 + expect(inflationInfo.toHuman()["round"]["ideal"]).to.eq("0.00%"); + expect(Number(inflationInfo["round"]["ideal"])).to.eq(11132); // 5% / blocks per year * 10^9 + expect(inflationInfo.toHuman()["round"]["max"]).to.eq("0.00%"); + expect(Number(inflationInfo["round"]["max"])).to.eq(11132); // 5% / blocks per year * 10^9 + }); +}); diff --git a/tests/tests/test-staking/test-parachain-bond.ts b/tests/tests/test-staking/test-parachain-bond.ts new file mode 100644 index 0000000000..fa24943d6d --- /dev/null +++ b/tests/tests/test-staking/test-parachain-bond.ts @@ -0,0 +1,70 @@ +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { ZERO_ADDRESS } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +const TWENTY_PERCENT = 20; +const TWENTY_PERCENT_STRING = "20.00%"; + +describeDevMoonbeam("Staking - Parachain Bond - set bond account", (context) => { + it("should be initialized at address zero", async function () { + const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.account.toString()).to.equal(ZERO_ADDRESS); + expect(parachainBondInfo.percent.toNumber()).to.equal(30); + }); + + it("should be changeable to alith address", async function () { + // should be able to register the genesis account for reward + const { result } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) + ) + ); + expect(result.successful).to.be.true; + + const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.account.toString()).to.equal(alith.address); + expect(parachainBondInfo.percent.toNumber()).to.equal(30); + }); +}); + +describeDevMoonbeam("Staking - Parachain Bond - no sudo on setParachainBondAccount", (context) => { + it("should NOT be able set the parachain bond if NOT sudo", async function () { + // should be able to register the genesis account for reward + const { result } = await context.createBlock( + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) + ); + expect(result.successful).to.be.false; + expect(result.error.name).to.equal("BadOrigin"); + }); +}); + +describeDevMoonbeam("Staking - Parachain Bond - setParachainBondReservePercent", (context) => { + it("should be able set the parachain bond reserve percent with sudo", async function () { + // should be able to register the genesis account + const { result } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.parachainStaking.setParachainBondReservePercent(TWENTY_PERCENT) + ) + ); + expect(result.successful).to.be.true; + + const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); + expect(parachainBondInfo.toHuman()["percent"]).to.equal(TWENTY_PERCENT_STRING); + }); +}); + +describeDevMoonbeam( + "Staking - Parachain Bond - no sudo on setParachainBondReservePercent", + (context) => { + it("should NOT be able set the parachain bond reserve percent without sudo", async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.parachainStaking.setParachainBondReservePercent(TWENTY_PERCENT) + ); + expect(result.successful).to.be.false; + expect(result.error.name).to.equal("BadOrigin"); + }); + } +); diff --git a/tests/tests/test-staking/test-rewards.ts b/tests/tests/test-staking/test-rewards.ts new file mode 100644 index 0000000000..ed578629ef --- /dev/null +++ b/tests/tests/test-staking/test-rewards.ts @@ -0,0 +1,180 @@ +import "@polkadot/api-augment"; +import "@moonbeam-network/api-augment"; +import { expect } from "chai"; +import { MIN_GLMR_STAKING } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith, baltathar, ethan } from "../../util/accounts"; +import { expectOk } from "../../util/expect"; +import { jumpRounds } from "../../util/block"; + +describeDevMoonbeam("Staking - Rewards - no scheduled requests", (context) => { + before("should delegate", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_STAKING, 0, 0) + .signAsync(ethan), + ]) + ); + }); + + it("should reward full amount", async () => { + const rewardDelay = context.polkadotApi.consts.parachainStaking.rewardPaymentDelay; + const blockHash = await jumpRounds(context, rewardDelay.addn(1).toNumber()); + const allEvents = await (await context.polkadotApi.at(blockHash)).query.system.events(); + const rewardedEvents = allEvents.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.Rewarded.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + amount: event.event.data[1], + }); + } + return acc; + }, []); + + expect( + rewardedEvents.some(({ account }) => account == ethan.address), + "delegator was not rewarded" + ).to.be.true; + }); +}); + +describeDevMoonbeam("Staking - Rewards - scheduled leave request", (context) => { + before("should scheduleLeaveDelegators", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_STAKING, 0, 0) + .signAsync(ethan), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking.scheduleLeaveDelegators().signAsync(ethan) + ) + ); + }); + + it("should not reward", async () => { + const rewardDelay = context.polkadotApi.consts.parachainStaking.rewardPaymentDelay; + const blockHash = await jumpRounds(context, rewardDelay.addn(1).toNumber()); + const allEvents = await (await context.polkadotApi.at(blockHash)).query.system.events(); + const rewardedEvents = allEvents.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.Rewarded.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + amount: event.event.data[1], + }); + } + return acc; + }, []); + + expect( + rewardedEvents.some(({ account }) => account == ethan.address), + "delegator was incorrectly rewarded" + ).to.be.false; + }); +}); + +describeDevMoonbeam("Staking - Rewards - scheduled revoke request", (context) => { + before("should scheduleRevokeDelegation", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_STAKING, 0, 0) + .signAsync(ethan), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(ethan) + ) + ); + }); + + it("should not reward", async () => { + const rewardDelay = context.polkadotApi.consts.parachainStaking.rewardPaymentDelay; + const blockHash = await jumpRounds(context, rewardDelay.addn(1).toNumber()); + const allEvents = await (await context.polkadotApi.at(blockHash)).query.system.events(); + const rewardedEvents = allEvents.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.Rewarded.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + amount: event.event.data[1], + }); + } + return acc; + }, []); + + expect( + rewardedEvents.some(({ account }) => account == ethan.address), + "delegator was incorrectly rewarded" + ).to.be.false; + }); +}); + +describeDevMoonbeam("Staking - Rewards - scheduled bond decrease request", (context) => { + const EXTRA_BOND_AMOUNT = 1_000_000_000_000_000_000n; + const BOND_AMOUNT = MIN_GLMR_STAKING + EXTRA_BOND_AMOUNT; + + before("should scheduleLeaveDelegators", async () => { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setBlocksPerRound(10)) + .signAsync(alith), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, BOND_AMOUNT, 0, 0) + .signAsync(ethan), + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, BOND_AMOUNT, 1, 0) + .signAsync(baltathar), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleDelegatorBondLess(alith.address, EXTRA_BOND_AMOUNT) + .signAsync(ethan) + ) + ); + }); + + it("should reward less than baltathar", async () => { + const rewardDelay = context.polkadotApi.consts.parachainStaking.rewardPaymentDelay; + const blockHash = await jumpRounds(context, rewardDelay.addn(1).toNumber()); + const allEvents = await (await context.polkadotApi.at(blockHash)).query.system.events(); + const rewardedEvents = allEvents.reduce((acc, event) => { + if (context.polkadotApi.events.parachainStaking.Rewarded.is(event.event)) { + acc.push({ + account: event.event.data[0].toString(), + amount: event.event.data[1], + }); + } + return acc; + }, []); + + let rewardedEthan = rewardedEvents.find(({ account }) => account == ethan.address); + let rewardedBalathar = rewardedEvents.find(({ account }) => account == baltathar.address); + expect(rewardedEthan).is.not.undefined; + expect(rewardedBalathar).is.not.undefined; + expect( + rewardedBalathar.amount.gt(rewardedEthan.amount), + `Ethan's reward ${rewardedEthan.amount} was not less than Balathar's \ + reward ${rewardedBalathar.amount}` + ).is.true; + }); +}); diff --git a/tests/tests/test-staking/test-staking-consts.ts b/tests/tests/test-staking/test-staking-consts.ts new file mode 100644 index 0000000000..4b900c8278 --- /dev/null +++ b/tests/tests/test-staking/test-staking-consts.ts @@ -0,0 +1,74 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith, generateKeyringPair } from "../../util/accounts"; +import { GLMR, MIN_GLMR_DELEGATOR, MIN_GLMR_STAKING } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { KeyringPair } from "@polkadot/keyring/types"; +import { expectOk } from "../../util/expect"; + +describeDevMoonbeam("Staking - Consts - MaxDelegationsPerDelegator", (context) => { + const randomAccount = generateKeyringPair(); + let randomCandidates: KeyringPair[]; + let maxDelegationsPerDelegator: bigint; + + before("setup candidate & delegations upto max", async function () { + maxDelegationsPerDelegator = + context.polkadotApi.consts.parachainStaking.maxDelegationsPerDelegator.toBigInt(); + randomCandidates = new Array(Number(maxDelegationsPerDelegator)) + .fill(0) + .map(() => generateKeyringPair()); + + let alithNonce = await context.web3.eth.getTransactionCount(alith.address); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.balances + .transfer(randomAccount.address, (MIN_GLMR_DELEGATOR + GLMR) * maxDelegationsPerDelegator) + .signAsync(alith, { nonce: alithNonce++ }), + ...randomCandidates.map((randomCandidate) => + context.polkadotApi.tx.balances + .transfer(randomCandidate.address, MIN_GLMR_STAKING + 1n * GLMR) + .signAsync(alith, { nonce: alithNonce++ }) + ), + ]) + ); + + await expectOk( + context.createBlock( + randomCandidates.map((randomCandidate) => + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, maxDelegationsPerDelegator) + .signAsync(randomCandidate) + ) + ) + ); + + const candidates = await context.polkadotApi.query.parachainStaking.candidateInfo.entries(); + expect(candidates.length).to.be.equal( + Number(maxDelegationsPerDelegator) + 1, + "Missing candidates" + ); + + let nonce = await context.web3.eth.getTransactionCount(randomAccount.address); + await expectOk( + context.createBlock( + randomCandidates.map((randomCandidate) => + context.polkadotApi.tx.parachainStaking + .delegate(randomCandidate.address, MIN_GLMR_DELEGATOR, 1, maxDelegationsPerDelegator) + .signAsync(randomAccount, { nonce: nonce++ }) + ) + ) + ); + }); + + it("should fail delegation request", async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 1, maxDelegationsPerDelegator + 1n) + .signAsync(randomAccount) + ); + expect(result.successful).to.be.false; + expect(result.error.name).to.be.equal("ExceedMaxDelegationsPerDelegator"); + }); +}); diff --git a/tests/tests/test-staking/test-staking-locks.ts b/tests/tests/test-staking/test-staking-locks.ts new file mode 100644 index 0000000000..e062985adf --- /dev/null +++ b/tests/tests/test-staking/test-staking-locks.ts @@ -0,0 +1,670 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith, baltathar, generateKeyringPair } from "../../util/accounts"; +import { + execCouncilProposal, + execTechnicalCommitteeProposal, + notePreimage, +} from "../../util/governance"; +import { GLMR, MIN_GLMR_STAKING, MIN_GLMR_DELEGATOR } from "../../util/constants"; +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; +import { KeyringPair } from "@polkadot/keyring/types"; +import { expectOk } from "../../util/expect"; +import { jumpRounds } from "../../util/block"; +import { ExtrinsicCreation } from "../../util/substrate-rpc"; + +describeDevMoonbeam("Staking - Locks - join delegators", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup account balance", async function () { + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(randomAccount.address, MIN_GLMR_DELEGATOR + GLMR) + ) + ); + }); + + it('should set "stkngdel" when delegating', async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 10, 10) + .signAsync(randomAccount) + ); + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(result.successful).to.be.true; + expect(locks.length).to.be.equal(1, "Missing lock"); + expect(locks[0].amount.toBigInt()).to.be.equal(MIN_GLMR_DELEGATOR); + expect(locks[0].id.toHuman().toString()).to.be.equal("stkngdel"); + }); +}); + +describeDevMoonbeam("Staking - Locks - join candidates", (context) => { + it('should set "stkngcol" when when joining candidates', async function () { + await context.createBlock( + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar) + ); + + const locks = await context.polkadotApi.query.balances.locks(baltathar.address); + expect(locks.length).to.be.equal( + 1, + `Unexpected number of locks: ${locks.map((l) => l.id.toHuman()).join(` - `)}` + ); + expect(locks[0].amount.toBigInt()).to.be.equal(MIN_GLMR_STAKING); + expect(locks[0].id.toHuman()).to.be.equal("stkngcol"); + }); +}); + +describeDevMoonbeam("Staking - Locks - delegator balance is locked", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup account balance & delegation", async function () { + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(randomAccount.address, MIN_GLMR_DELEGATOR + GLMR) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(randomAccount) + ) + ); + }); + + it("should not be reusable for delegation", async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 10, 10) + .signAsync(randomAccount) + ); + expect(result.error.name.toString()).to.be.equal("InsufficientBalance"); + }); +}); + +describeDevMoonbeam("Staking - Locks - candidate balance is locked", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup account balance & delegation", async function () { + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(randomAccount.address, MIN_GLMR_STAKING + GLMR) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(randomAccount) + ) + ); + }); + + it("should not be reusable for transfer", async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.balances + .transfer(alith.address, MIN_GLMR_STAKING) + .signAsync(randomAccount) + ); + expect(result.error.name.toString()).to.be.equal("LiquidityRestrictions"); + }); +}); + +describeDevMoonbeam("Staking - Locks - democracy vote", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup account balance & staking", async function () { + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(randomAccount.address, MIN_GLMR_DELEGATOR + GLMR) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 0, 0) + .signAsync(randomAccount) + ) + ); + + const proposalHash = await notePreimage( + context, + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address), + alith + ); + await execCouncilProposal( + context, + context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) + ); + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, 100, 1) + ); + }); + + it("should be usable for democracy vote", async function () { + const { result } = await context.createBlock( + context.polkadotApi.tx.democracy + .vote(0, { + Standard: { balance: MIN_GLMR_DELEGATOR, vote: { aye: true, conviction: 1 } }, + }) + .signAsync(randomAccount) + ); + expect(result.successful).to.be.true; + expect(result.events.find(({ event: { method } }) => method === "Voted")).to.not.be.undefined; + }); +}); + +describeDevMoonbeam("Staking - Locks - schedule revoke", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup account balance", async function () { + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(randomAccount.address, MIN_GLMR_DELEGATOR + GLMR) + ) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 1, 0) + .signAsync(randomAccount) + ) + ); + }); + + it("should stay locked after requesting a delegation revoke", async function () { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(randomAccount) + ) + ); + + // Additional check + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks[0].id.toHuman().toString()).to.be.equal("stkngdel"); + }); +}); + +describeDevMoonbeam("Staking - Locks - execute revoke", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup account balance", async function () { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.parachainStaking.setBlocksPerRound(5) + ), + context.polkadotApi.tx.balances.transfer( + randomAccount.address, + MIN_GLMR_DELEGATOR + 1n * GLMR + ), + ]) + ); + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 10, 10) + .signAsync(randomAccount) + ) + ); + }); + + it("should be unlocked only after executing revoke delegation", async function () { + this.timeout(20000); + + const lock = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(lock.length).to.be.equal(1, "Lock should have been added"); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(randomAccount) + ) + ); + + await jumpRounds( + context, + context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber() + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(randomAccount.address, alith.address) + .signAsync(randomAccount) + ) + ); + + const newLocks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(newLocks.length).to.be.equal(0, "Lock should have been removed after executing revoke"); + }); +}); + +describeDevMoonbeam("Staking - Locks - multiple delegations single revoke", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup candidate & delegations", async function () { + this.timeout(20000); + + await expectOk( + context.createBlock([ + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.parachainStaking.setBlocksPerRound(5) + ), + context.polkadotApi.tx.balances.transfer(randomAccount.address, 2n * MIN_GLMR_STAKING), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + ]) + ); + + let nonce = await context.web3.eth.getTransactionCount(randomAccount.address); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 10, 10) + .signAsync(randomAccount, { nonce: nonce++ }), + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 10, 10) + .signAsync(randomAccount, { nonce: nonce++ }), + ]) + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .scheduleRevokeDelegation(alith.address) + .signAsync(randomAccount) + ) + ); + + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks.length).to.be.equal(1, "missing lock"); + expect(locks[0].amount.toBigInt()).to.equal(2n * MIN_GLMR_DELEGATOR); + + await jumpRounds( + context, + context.polkadotApi.consts.parachainStaking.revokeDelegationDelay.toNumber() + ); + + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .executeDelegationRequest(randomAccount.address, alith.address) + .signAsync(randomAccount) + ) + ); + }); + + it("should be removed only after executing the last revoke delegation", async function () { + // Additional check we still have 1 delegation + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + randomAccount.address + ); + expect(delegatorState.unwrap().delegations.length).to.be.equal(1, "Missing delegation"); + // Only 1 over the 2 delegations has been revoked + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks.length).to.be.equal(1, "Missing lock"); + expect(locks[0].amount.toBigInt()).to.be.equal(MIN_GLMR_DELEGATOR); + expect(locks[0].id.toHuman().toString()).to.be.equal("stkngdel"); + }); +}); + +describeDevMoonbeam("Staking - Locks - max delegations", (context) => { + const randomAccount = generateKeyringPair(); + let randomCandidates: KeyringPair[]; + let maxDelegationsPerDelegator: bigint; + + before("setup candidate & delegations", async function () { + maxDelegationsPerDelegator = + context.polkadotApi.consts.parachainStaking.maxDelegationsPerDelegator.toBigInt(); + randomCandidates = new Array(Number(maxDelegationsPerDelegator)) + .fill(0) + .map(() => generateKeyringPair()); + + let alithNonce = await context.web3.eth.getTransactionCount(alith.address); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.balances + .transfer(randomAccount.address, (MIN_GLMR_DELEGATOR + GLMR) * maxDelegationsPerDelegator) + .signAsync(alith, { nonce: alithNonce++ }), + ...randomCandidates.map((randomCandidate) => + context.polkadotApi.tx.balances + .transfer(randomCandidate.address, MIN_GLMR_STAKING + GLMR) + .signAsync(alith, { nonce: alithNonce++ }) + ), + ]) + ); + + await expectOk( + context.createBlock( + randomCandidates.map((randomCandidate) => + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, maxDelegationsPerDelegator) + .signAsync(randomCandidate) + ) + ) + ); + + const candidates = await context.polkadotApi.query.parachainStaking.candidateInfo.entries(); + expect(candidates.length).to.be.equal( + Number(maxDelegationsPerDelegator) + 1, + "Missing candidates" + ); + + let nonce = await context.web3.eth.getTransactionCount(randomAccount.address); + await expectOk( + context.createBlock( + randomCandidates.map((randomCandidate) => + context.polkadotApi.tx.parachainStaking + .delegate( + randomCandidate.address, + MIN_GLMR_DELEGATOR, + 1, + maxDelegationsPerDelegator + 1n + ) + .signAsync(randomAccount, { nonce: nonce++ }) + ) + ) + ); + }); + + it("should support 100 delegations", async function () { + // Additional check we have still have 1 delegation + const delegatorState = await context.polkadotApi.query.parachainStaking.delegatorState( + randomAccount.address + ); + expect(delegatorState.unwrap().delegations.length).to.be.equal( + Number(maxDelegationsPerDelegator), + "Missing delegation" + ); + // We should gave locked MIN_GLMR_DELEGATOR * maxDelegationsPerDelegator + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks.length).to.be.equal(1, "Missing lock"); + expect(locks[0].amount.toBigInt()).to.be.equal(MIN_GLMR_DELEGATOR * maxDelegationsPerDelegator); + expect(locks[0].id.toHuman().toString()).to.be.equal("stkngdel"); + }); +}); + +describeDevMoonbeam("Staking - Locks - multiple delegations single lock", (context) => { + const randomAccount = generateKeyringPair(); + + before("setup candidate & delegations", async function () { + await expectOk( + context.createBlock([ + context.polkadotApi.tx.balances.transfer( + randomAccount.address, + MIN_GLMR_STAKING * 2n + 1n * GLMR + ), + context.polkadotApi.tx.parachainStaking + .joinCandidates(MIN_GLMR_STAKING, 1) + .signAsync(baltathar), + ]) + ); + + let nonce = await context.web3.eth.getTransactionCount(randomAccount.address); + await expectOk( + context.createBlock([ + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 10, 10) + .signAsync(randomAccount, { nonce: nonce++ }), + context.polkadotApi.tx.parachainStaking + .delegate(baltathar.address, MIN_GLMR_DELEGATOR, 10, 10) + .signAsync(randomAccount, { nonce: nonce++ }), + ]) + ); + }); + + it("should not be created for additional delegations", async function () { + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks.length).to.be.equal( + 1, + `Unexpected number of locks: ${locks.map((l) => l.id.toHuman().toString()).join(` - `)}` + ); + }); + + it("should increase for additional delegations", async function () { + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks[0].id.toHuman().toString()).to.be.equal("stkngdel"); + expect(locks[0].amount.toBigInt(), `Unexpected amount for lock`).to.be.equal( + 2n * MIN_GLMR_DELEGATOR + ); + }); +}); + +describeDevMoonbeam("Staking - Locks - bottom delegator removed", (context) => { + const randomAccount = generateKeyringPair(); + let additionalDelegators: KeyringPair[]; + + before("setup candidate & delegations", async function () { + this.timeout(20000); + + // Create the delegators to fill the lists + additionalDelegators = new Array( + context.polkadotApi.consts.parachainStaking.maxTopDelegationsPerCandidate.toNumber() + + context.polkadotApi.consts.parachainStaking.maxBottomDelegationsPerCandidate.toNumber() + ) + .fill(0) + .map(() => generateKeyringPair()); + + await expectOk( + context.createBlock( + [randomAccount, ...additionalDelegators].map((account, i) => + context.polkadotApi.tx.balances + .transfer(account.address, MIN_GLMR_DELEGATOR + 10n * GLMR) + .signAsync(alith, { nonce: i }) + ) + ) + ); + }); + + it("should get removed when bumped out of bottom list", async function () { + await expectOk( + context.createBlock( + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, 1, 1) + .signAsync(randomAccount) + ) + ); + + // Additional check + const locks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(locks.length).to.be.equal( + 1, + `Unexpected number of locks: ${locks.map((l) => l.id.toHuman().toString()).join(` - `)}` + ); + + await expectOk( + context.createBlock( + [...additionalDelegators].map((account, i) => + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + GLMR, i + 1, 1) + .signAsync(account) + ) + ) + ); + + const newLocks = await context.polkadotApi.query.balances.locks(randomAccount.address); + expect(newLocks.length).to.be.equal( + 0, + "Lock should have been removed after getting removed from bottom delegations" + ); + }); +}); + +describeDevMoonbeam("Staking - Locks - bottom and top delegations", (context) => { + let bottomDelegators: KeyringPair[]; + let topDelegators: KeyringPair[]; + + before("setup candidate & delegations", async function () { + this.timeout(20000); + + // Create the delegators to fill the lists + bottomDelegators = new Array( + context.polkadotApi.consts.parachainStaking.maxBottomDelegationsPerCandidate.toNumber() + ) + .fill(0) + .map(() => generateKeyringPair()); + topDelegators = new Array( + context.polkadotApi.consts.parachainStaking.maxTopDelegationsPerCandidate.toNumber() + ) + .fill(0) + .map(() => generateKeyringPair()); + + await expectOk( + context.createBlock( + [...bottomDelegators, ...topDelegators].map((account, i) => + context.polkadotApi.tx.balances + .transfer(account.address, MIN_GLMR_DELEGATOR + 2n * GLMR) + .signAsync(alith, { nonce: i }) + ) + ) + ); + }); + + it("should be set for bottom and top list delegators", async function () { + await expectOk( + context.createBlock( + [...topDelegators].map((account, i) => + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR + 1n * GLMR, i + 1, 1) + .signAsync(account) + ) + ) + ); + await expectOk( + context.createBlock( + [...bottomDelegators].map((account, i) => + context.polkadotApi.tx.parachainStaking + .delegate(alith.address, MIN_GLMR_DELEGATOR, topDelegators.length + i + 1, 1) + .signAsync(account) + ) + ) + ); + + const topLocks = await context.polkadotApi.query.balances.locks.multi( + topDelegators.map((delegator) => delegator.address) + ); + expect( + topLocks.filter((lockSet) => + lockSet.find((lock) => lock.id.toHuman().toString() == "stkngdel") + ).length + ).to.equal( + context.polkadotApi.consts.parachainStaking.maxTopDelegationsPerCandidate.toNumber() + ); + + const bottomLocks = await context.polkadotApi.query.balances.locks.multi( + bottomDelegators.map((delegator) => delegator.address) + ); + expect( + bottomLocks.filter((lockSet) => + lockSet.find((lock) => lock.id.toHuman().toString() == "stkngdel") + ).length + ).to.equal( + context.polkadotApi.consts.parachainStaking.maxBottomDelegationsPerCandidate.toNumber() + ); + }); +}); + +describeDevMoonbeam("Staking - Locks - hotfix migrate delegator max address count", (context) => { + it("should error", async function () { + const accountIds = Array(100).fill(alith.address); + + const result = ( + await context.createBlock( + (context.polkadotApi.tx.parachainStaking as any) + .hotfixMigrateDelegatorsFromReserveToLocks(accountIds) + .signAsync(baltathar) + ) + ).result as ExtrinsicCreation; + + expect(result.successful).to.be.false; + expect(result.error.name).to.equal("Other"); + }); +}); + +describeDevMoonbeam("Staking - Locks - hotfix migrate collator max address count", (context) => { + it("should error", async function () { + const accountIds = Array(100).fill(alith.address); + + const result = ( + await context.createBlock( + (context.polkadotApi.tx.parachainStaking as any) + .hotfixMigrateCollatorsFromReserveToLocks(accountIds) + .signAsync(baltathar) + ) + ).result as ExtrinsicCreation; + + expect(result.successful).to.be.false; + expect(result.error.name).to.equal("Other"); + }); +}); + +describeDevMoonbeam("Staking - Locks - hotfix migrate delegators fees", (context) => { + async function getFeesForHotfixExtrinsicWithNumDelegators(numDelegators: number) { + let initialBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + let accountIds = Array(numDelegators).fill(alith.address); + + await expectOk( + context.createBlock( + (context.polkadotApi.tx.parachainStaking as any) + .hotfixMigrateDelegatorsFromReserveToLocks(accountIds) + .signAsync(baltathar) + ) + ); + + let afterBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + const fee = initialBalance - afterBalance; + return fee; + } + + it("should have high fees", async function () { + expect((await getFeesForHotfixExtrinsicWithNumDelegators(1)) > 25_000_000_000_000n).to.be.true; + expect((await getFeesForHotfixExtrinsicWithNumDelegators(99)) > 2_000_000_000_000_000n).to.true; + }); +}); + +describeDevMoonbeam("Staking - Locks - hotfix migrate collators", (context) => { + async function getFeesForHotfixExtrinsicWithNumCollators(numCollators: number) { + let initialBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + let accountIds = Array(numCollators).fill(alith.address); + + await expectOk( + context.createBlock( + (context.polkadotApi.tx.parachainStaking as any) + .hotfixMigrateCollatorsFromReserveToLocks(accountIds) + .signAsync(baltathar) + ) + ); + + let afterBalance = ( + await context.polkadotApi.query.system.account(baltathar.address) + ).data.free.toBigInt(); + + const fee = initialBalance - afterBalance; + return fee; + } + + it("should have high fees", async function () { + expect((await getFeesForHotfixExtrinsicWithNumCollators(1)) > 25_000_000_000_000n).to.be.true; + expect((await getFeesForHotfixExtrinsicWithNumCollators(99)) > 2_000_000_000_000_000n).to.be + .true; + }); +}); diff --git a/tests/tests/test-subscription/test-subscription-logs.ts b/tests/tests/test-subscription/test-subscription-logs.ts index a48ce4492b..407a0a81a3 100644 --- a/tests/tests/test-subscription/test-subscription-logs.ts +++ b/tests/tests/test-subscription/test-subscription-logs.ts @@ -1,12 +1,15 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { TEST_ACCOUNT } from "../../util/constants"; -import { web3Subscribe } from "../../util/providers"; +import { Log } from "web3-core"; +import { alith, ALITH_CONTRACT_ADDRESSES } from "../../util/accounts"; +import { EnhancedWeb3, web3Subscribe } from "../../util/providers"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; import { createContract } from "../../util/transactions"; describeDevMoonbeam("Subscription - Logs", (context) => { - let web3Ws; + let web3Ws: EnhancedWeb3; before("Setup: Create empty block", async () => { web3Ws = await context.createWeb3("ws"); }); @@ -22,10 +25,8 @@ describeDevMoonbeam("Subscription - Logs", (context) => { subscription.once("data", resolve); }); - const { rawTx } = await createContract(context, "SingleEventContract"); - await context.createBlock({ - transactions: [rawTx], - }); + const { rawTx } = await createContract(context, "EventEmitter"); + await context.createBlock(rawTx); const data = await dataPromise; subscription.unsubscribe(); @@ -47,28 +48,28 @@ describeDevMoonbeam("Subscription - Logs", (context) => { describeDevMoonbeam("Subscription - Logs", (context) => { let web3Ws; - let subSingleAddPromise; - let subMultiAddPromise; - let subTopicPromise; - let subTopicWildcardPromise; - let subTopicListPromise; - let subTopicCondPromise; - let subTopicMultiCondPromise; - let subTopicWildAndCondPromise; + let subSingleAddPromise: Promise; + let subMultiAddPromise: Promise; + let subTopicPromise: Promise; + let subTopicWildcardPromise: Promise; + let subTopicListPromise: Promise; + let subTopicCondPromise: Promise; + let subTopicMultiCondPromise: Promise; + let subTopicWildAndCondPromise: Promise; before("Setup: Create all subs and a block with transfer", async () => { web3Ws = await context.createWeb3("ws"); const subSingleAdd = web3Subscribe(web3Ws, "logs", { - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + address: ALITH_CONTRACT_ADDRESSES[0], }); const subMultiAdd = web3Subscribe(web3Ws, "logs", { address: [ - "0xF8cef78E923919054037a1D03662bBD884fF4edf", - "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ALITH_CONTRACT_ADDRESSES[3], + ALITH_CONTRACT_ADDRESSES[2], + ALITH_CONTRACT_ADDRESSES[1], + ALITH_CONTRACT_ADDRESSES[0], ], }); @@ -77,20 +78,20 @@ describeDevMoonbeam("Subscription - Logs", (context) => { }); const subTopicWildcard = web3Subscribe(web3Ws, "logs", { - topics: [null, "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b"], + topics: [null, "0x000000000000000000000000f24ff3a9cf04c71dbc94d0b566f7a27b94566cac"], }); const subTopicList = web3Subscribe(web3Ws, "logs", { topics: [ ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], - ["0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b"], + ["0x000000000000000000000000f24ff3a9cf04c71dbc94d0b566f7a27b94566cac"], ], }); const subTopicCond = web3Subscribe(web3Ws, "logs", { topics: [ "0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d", - ["0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b"], + ["0x000000000000000000000000f24ff3a9cf04c71dbc94d0b566f7a27b94566cac"], ], }); @@ -99,7 +100,7 @@ describeDevMoonbeam("Subscription - Logs", (context) => { "0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d", [ "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", + "0x000000000000000000000000f24ff3a9cf04c71dbc94d0b566f7a27b94566cac", ], ], }); @@ -108,7 +109,7 @@ describeDevMoonbeam("Subscription - Logs", (context) => { topics: [ null, [ - "0x0000000000000000000000006be02d1d3665660d22ff9624b7be0551ee1ac91b", + "0x000000000000000000000000f24ff3a9cf04c71dbc94d0b566f7a27b94566cac", "0x0000000000000000000000000000000000000000000000000000000000000000", ], null, @@ -132,8 +133,8 @@ describeDevMoonbeam("Subscription - Logs", (context) => { }) ); - const subData = (sub) => { - return new Promise((resolve) => { + const subData = (sub: ReturnType) => { + return new Promise((resolve) => { sub.once("data", resolve); }); }; @@ -147,10 +148,8 @@ describeDevMoonbeam("Subscription - Logs", (context) => { subTopicMultiCondPromise = subData(subTopicMultiCond); subTopicWildAndCondPromise = subData(subTopicWildAndCond); - const { rawTx } = await createContract(context, "SingleEventContract"); - await context.createBlock({ - transactions: [rawTx], - }); + const { rawTx } = await createContract(context, "EventEmitter"); + await context.createBlock(rawTx); }); it("should be able to filter by address", async function () { @@ -204,15 +203,13 @@ describeDevMoonbeam("Subscription - Reverted transaction", (context) => { }); // Expected to fail because of not enough fund to pay the deployment - const { rawTx } = await createContract(context, "SingleEventContract", { - from: TEST_ACCOUNT, - }); - await context.createBlock({ - transactions: [rawTx], + const { rawTx } = await createContract(context, "EventEmitter", { + from: alith.address, }); + await context.createBlock(rawTx); const data = await new Promise((resolve) => { - let result = null; + let result: Log = null; subscription.once("data", (d) => (result = d)); setTimeout(() => resolve(result), 1000); // wait for 1 second to make sure a notification would have time to arrive. diff --git a/tests/tests/test-subscription/test-subscription-past-events.ts b/tests/tests/test-subscription/test-subscription-past-events.ts index 8b6b669968..a9883fe02f 100644 --- a/tests/tests/test-subscription/test-subscription-past-events.ts +++ b/tests/tests/test-subscription/test-subscription-past-events.ts @@ -1,30 +1,33 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { createContract } from "../../util/transactions"; +import { Log } from "web3-core"; + +import { ALITH_CONTRACT_ADDRESSES } from "../../util/accounts"; +import { EnhancedWeb3, web3Subscribe } from "../../util/providers"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; -import { web3Subscribe } from "../../util/providers"; +import { createContract } from "../../util/transactions"; describeDevMoonbeam("Subscription - Past Events", (context) => { - let web3Ws; + let web3Ws: EnhancedWeb3; before("Setup: Create 4 blocks with transfer", async () => { web3Ws = await context.createWeb3("ws"); - const { rawTx: rawTx1 } = await createContract(context, "SingleEventContract", { + const { rawTx: rawTx1 } = await createContract(context, "EventEmitter", { nonce: 0, }); - const { rawTx: rawTx2 } = await createContract(context, "SingleEventContract", { + const { rawTx: rawTx2 } = await createContract(context, "EventEmitter", { nonce: 1, }); - const { rawTx: rawTx3 } = await createContract(context, "SingleEventContract", { + const { rawTx: rawTx3 } = await createContract(context, "EventEmitter", { nonce: 2, }); - const { rawTx: rawTx4 } = await createContract(context, "SingleEventContract", { + const { rawTx: rawTx4 } = await createContract(context, "EventEmitter", { nonce: 3, }); - await context.createBlock({ - transactions: [rawTx1, rawTx2, rawTx3, rawTx4], - }); + await context.createBlock([rawTx1, rawTx2, rawTx3, rawTx4]); }); it("should be retrieved by topic", async function () { @@ -34,7 +37,7 @@ describeDevMoonbeam("Subscription - Past Events", (context) => { }); const data = await new Promise((resolve) => { - const data = []; + const data: Log[] = []; subscription.on("data", function (d: any) { data.push(d); if (data.length == 4) resolve(data); @@ -48,11 +51,11 @@ describeDevMoonbeam("Subscription - Past Events", (context) => { it("should be retrieved by address", async function () { const subscription = web3Subscribe(web3Ws, "logs", { fromBlock: "0x0", - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + address: "0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3", }); const data = await new Promise((resolve) => { - const data = []; + const data: Log[] = []; subscription.on("data", function (d: any) { data.push(d); if (data.length == 1) resolve(data); @@ -67,11 +70,11 @@ describeDevMoonbeam("Subscription - Past Events", (context) => { const subscription = web3Subscribe(web3Ws, "logs", { fromBlock: "0x0", topics: ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], - address: "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + address: "0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3", }); const data = await new Promise((resolve) => { - const data = []; + const data: Log[] = []; subscription.on("data", function (d: any) { data.push(d); if (data.length == 1) resolve(data); @@ -87,16 +90,16 @@ describeDevMoonbeam("Subscription - Past Events", (context) => { fromBlock: "0x0", topics: ["0x0040d54d5e5b097202376b55bcbaaedd2ee468ce4496f1d30030c4e5308bf94d"], address: [ - "0xe573BCA813c741229ffB2488F7856C6cAa841041", - "0xF8cef78E923919054037a1D03662bBD884fF4edf", - "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", - "0x5c4242beB94dE30b922f57241f1D02f36e906915", - "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + ALITH_CONTRACT_ADDRESSES[4], + ALITH_CONTRACT_ADDRESSES[3], + ALITH_CONTRACT_ADDRESSES[2], + ALITH_CONTRACT_ADDRESSES[1], + ALITH_CONTRACT_ADDRESSES[0], ], }); const data = await new Promise((resolve) => { - const data = []; + const data: Log[] = []; subscription.on("data", function (d: any) { data.push(d); if (data.length == 4) resolve(data); diff --git a/tests/tests/test-subscription/test-subscription.ts b/tests/tests/test-subscription/test-subscription.ts index a8d60426c0..1c1205336d 100644 --- a/tests/tests/test-subscription/test-subscription.ts +++ b/tests/tests/test-subscription/test-subscription.ts @@ -1,18 +1,16 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { customWeb3Request, web3Subscribe } from "../../util/providers"; import { BlockHeader } from "web3-eth"; +import { alith, baltathar } from "../../util/accounts"; +import { customWeb3Request, web3Subscribe } from "../../util/providers"; import { describeDevMoonbeam } from "../../util/setup-dev-tests"; import { createTransfer } from "../../util/transactions"; -import { COLLATOR_ACCOUNT, TEST_ACCOUNT } from "../../util/constants"; describeDevMoonbeam("Subscription", (context) => { - let web3Ws; - before("Setup: Create empty block", async () => { - web3Ws = await context.createWeb3("ws"); - }); - it("should return a valid subscriptionId", async function () { + const web3Ws = await context.createWeb3("ws"); const subscription = web3Subscribe(web3Ws, "newBlockHeaders"); const subscriptionId = await new Promise((resolve) => subscription.once("connected", resolve)); @@ -22,53 +20,37 @@ describeDevMoonbeam("Subscription", (context) => { }); describeDevMoonbeam("Subscription - Block headers", (context) => { - let web3Ws; - before("Setup: Create empty block", async () => { - web3Ws = await context.createWeb3("ws"); - }); - it("should send notification on new block", async function () { this.timeout(10000); + const web3Ws = await context.createWeb3("ws"); const subscription = web3Subscribe(web3Ws, "newBlockHeaders"); await new Promise((resolve) => subscription.once("connected", resolve)); - // TODO this should not be needed. test seems to fail when the block is created to quickly - // after the subscription - await new Promise((resolve) => setTimeout(resolve, 100)); - - await context.createBlock({ - transactions: [await createTransfer(context, TEST_ACCOUNT, 0)], - }); - const data = await new Promise((resolve) => { + const promise = new Promise((resolve) => { subscription.once("data", resolve); }); + await context.createBlock(createTransfer(context, baltathar.address, 0, { gas: 12000000 })); + const data = await promise; subscription.unsubscribe(); expect(data).to.include({ - author: COLLATOR_ACCOUNT.toLowerCase(), // web3 doesn't checksum + author: alith.address.toLowerCase(), // web3 doesn't checksum difficulty: "0", extraData: "0x", logsBloom: `0x${"0".repeat(512)}`, miner: "0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac", receiptsRoot: "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", - transactionsRoot: "0xf04aada99f08ad276fb593633bcb320bbbaf4499e9bfa8d59a7385e1772c6bcd", + transactionsRoot: "0x14363f4c0580a470a7879ba247f97c2d62d77963a73464c49507f721d7f85bfc", }); - expect((data as any).sealFields).to.eql([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000", - ]); + expect(data.nonce).to.be.eq("0x0000000000000000"); }); }); describeDevMoonbeam("Subscription - Pending transactions", (context) => { - let web3Ws; - before("Setup: Create empty block", async () => { - web3Ws = await context.createWeb3("ws"); - }); - // TODO: Inspect why it requires to produce a block to receive the notification it.skip("should send notification on new transaction", async function () { + const web3Ws = await context.createWeb3("ws"); const subscription = web3Subscribe(web3Ws, "pendingTransactions"); await new Promise((resolve) => subscription.once("connected", resolve)); @@ -77,7 +59,7 @@ describeDevMoonbeam("Subscription - Pending transactions", (context) => { }); const { result } = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - await createTransfer(context, TEST_ACCOUNT, 0), + await createTransfer(context, baltathar.address, 0), ]); // This test passes if you produce the block diff --git a/tests/tests/test-sudo.ts b/tests/tests/test-sudo.ts deleted file mode 100644 index a9205aa8b5..0000000000 --- a/tests/tests/test-sudo.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { expect } from "chai"; -import { Keyring } from "@polkadot/api"; -import { KeyringPair } from "@polkadot/keyring/types"; -import { - GENESIS_ACCOUNT, - ALITH_PRIV_KEY, - GENESIS_ACCOUNT_PRIVATE_KEY, - ZERO_ADDRESS, - GENESIS_ACCOUNT_BALANCE, - TEST_ACCOUNT, - ALITH, -} from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; -import { verifyLatestBlockFees } from "../util/block"; -import { createTransfer } from "../util/transactions"; - -describeDevMoonbeam("Sudo - successful setParachainBondAccount", (context) => { - let alith: KeyringPair; - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - it("should be able to call sudo with the right account", async function () { - const { events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) - ) - ); - //check parachainBondInfo - const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(GENESIS_ACCOUNT); - expect(parachainBondInfo.toHuman()["percent"]).to.equal("30.00%"); - //check events - expect(events.length).to.eq(5); - expect(context.polkadotApi.events.parachainStaking.ParachainBondAccountSet.is(events[1] as any)) - .to.be.true; - expect(context.polkadotApi.events.balances.Deposit.is(events[3] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4] as any)).to.be.true; - // check balance diff (diff should be null for sudo - funds are sent back) - expect(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)).to.equal( - GENESIS_ACCOUNT_BALANCE.toString() - ); - }); -}); -describeDevMoonbeam("Sudo - fail if no funds in sudo", (context) => { - let alith: KeyringPair; - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const initBalance = await context.web3.eth.getBalance(ALITH); - await context.createBlock({ - transactions: [ - await createTransfer( - context, - TEST_ACCOUNT, - BigInt(initBalance) - 1n - 21000n * 1_000_000_000n, - { - from: ALITH, - privateKey: ALITH_PRIV_KEY, - gas: 21000, - gasPrice: 1_000_000_000, - } - ), - ], - }); - console.log("aft", await context.web3.eth.getBalance(ALITH)); - expect(await context.web3.eth.getBalance(ALITH)).to.eq("1"); - }); - it("should not be able to call sudo with no funds", async function () { - try { - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) - ) - ); - } catch (e) { - expect(e.toString()).to.eq( - "RpcError: 1010: Invalid Transaction: Inability " + - "to pay some fees , e.g. account balance too low" - ); - } - //check parachainBondInfo - const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); - }); -}); -describeDevMoonbeam("Sudo - Only sudo account", (context) => { - let genesisAccount: KeyringPair; - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - genesisAccount = await keyring.addFromUri(GENESIS_ACCOUNT_PRIVATE_KEY, null, "ethereum"); - }); - it("should NOT be able to call sudo with another account than sudo account", async function () { - const { events } = await createBlockWithExtrinsic( - context, - genesisAccount, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) - ) - ); - //check parachainBondInfo - const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); - expect(parachainBondInfo.toHuman()["account"]).to.equal(ZERO_ADDRESS); - expect(parachainBondInfo.toHuman()["percent"]).to.equal("30.00%"); - //check events - expect(events.length === 6).to.be.true; - expect(context.polkadotApi.events.system.NewAccount.is(events[2] as any)).to.be.true; - expect(context.polkadotApi.events.balances.Endowed.is(events[3] as any)).to.be.true; - expect(context.polkadotApi.events.treasury.Deposit.is(events[4] as any)).to.be.true; - expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5] as any)).to.be.true; - // check balance diff (should not be null for a failed extrinsic) - expect( - BigInt(await context.web3.eth.getBalance(GENESIS_ACCOUNT, 1)) - GENESIS_ACCOUNT_BALANCE !== 0n - ).to.equal(true); - }); -}); - -describeDevMoonbeam("Sudo - Only sudo account - test gas", (context) => { - let alith: KeyringPair; - before("Setup genesis account for substrate", async () => { - const keyring = new Keyring({ type: "ethereum" }); - alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - }); - it("should NOT be able to call sudo with another account than sudo account", async function () { - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.parachainStaking.setParachainBondAccount(GENESIS_ACCOUNT) - ) - ); - - await verifyLatestBlockFees(context, expect); - }); -}); diff --git a/tests/tests/test-sudo/test-sudo.ts b/tests/tests/test-sudo/test-sudo.ts new file mode 100644 index 0000000000..503451f3dd --- /dev/null +++ b/tests/tests/test-sudo/test-sudo.ts @@ -0,0 +1,106 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith, ALITH_GENESIS_TRANSFERABLE_BALANCE, baltathar } from "../../util/accounts"; +import { verifyLatestBlockFees } from "../../util/block"; +import { DEFAULT_GENESIS_BALANCE, ZERO_ADDRESS } from "../../util/constants"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createTransfer } from "../../util/transactions"; + +describeDevMoonbeam("Sudo - successful setParachainBondAccount", (context) => { + it("should be able to call sudo with the right account", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) + ) + ); + //check parachainBondInfo + const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.account.toString()).to.equal(alith.address); + expect(parachainBondInfo.percent.toNumber()).to.equal(30); + //check events + expect(events.length).to.eq(5); + expect(context.polkadotApi.events.parachainStaking.ParachainBondAccountSet.is(events[1].event)) + .to.be.true; + expect(context.polkadotApi.events.balances.Deposit.is(events[3].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicSuccess.is(events[4].event)).to.be.true; + // check balance diff (diff should be null for sudo - funds are sent back) + expect(await context.web3.eth.getBalance(alith.address, 1)).to.equal( + ALITH_GENESIS_TRANSFERABLE_BALANCE.toString() + ); + }); +}); +describeDevMoonbeam("Sudo - fail if no funds in sudo", (context) => { + before("Setup genesis account for substrate", async () => { + const initBalance = await context.web3.eth.getBalance(alith.address); + await context.createBlock( + createTransfer( + context, + baltathar.address, + BigInt(initBalance) - 1n - 21000n * 1_000_000_000n, + { + gas: 21000, + } + ) + ); + expect(await context.web3.eth.getBalance(alith.address)).to.eq("1"); + }); + it("should not be able to call sudo with no funds", async function () { + try { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) + ) + ); + } catch (e) { + expect(e.toString()).to.eq( + "RpcError: 1010: Invalid Transaction: Inability " + + "to pay some fees , e.g. account balance too low" + ); + } + //check parachainBondInfo + const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.account.toString()).to.equal(ZERO_ADDRESS); + }); +}); +describeDevMoonbeam("Sudo - Only sudo account", (context) => { + it("should NOT be able to call sudo with another account than sudo account", async function () { + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address)) + .signAsync(baltathar) + ); + //check parachainBondInfo + const parachainBondInfo = await context.polkadotApi.query.parachainStaking.parachainBondInfo(); + expect(parachainBondInfo.account.toString()).to.equal(ZERO_ADDRESS); + expect(parachainBondInfo.percent.toNumber()).to.equal(30); + //check events + expect(events.length === 6).to.be.true; + expect(context.polkadotApi.events.system.NewAccount.is(events[2].event)).to.be.true; + expect(context.polkadotApi.events.balances.Endowed.is(events[3].event)).to.be.true; + expect(context.polkadotApi.events.treasury.Deposit.is(events[4].event)).to.be.true; + expect(context.polkadotApi.events.system.ExtrinsicFailed.is(events[5].event)).to.be.true; + // check balance diff (should not be null for a failed extrinsic) + expect( + BigInt(await context.web3.eth.getBalance(baltathar.address, 1)) - DEFAULT_GENESIS_BALANCE !== + 0n + ).to.equal(true); + }); +}); + +describeDevMoonbeam("Sudo - Only sudo account - test gas", (context) => { + it("should NOT be able to call sudo with another account than sudo account", async function () { + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.parachainStaking.setParachainBondAccount(alith.address) + ) + ); + + await verifyLatestBlockFees(context); + }); +}); diff --git a/tests/tests/test-treasury-proposal.ts b/tests/tests/test-treasury/test-treasury-proposal.ts similarity index 54% rename from tests/tests/test-treasury-proposal.ts rename to tests/tests/test-treasury/test-treasury-proposal.ts index 7bfafcc5d5..70bdcb5e7a 100644 --- a/tests/tests/test-treasury-proposal.ts +++ b/tests/tests/test-treasury/test-treasury-proposal.ts @@ -1,30 +1,23 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import Keyring from "@polkadot/keyring"; -import { - ALITH_PRIV_KEY, - BALTATHAR, - CHARLETH_PRIV_KEY, - DOROTHY_PRIV_KEY, - ETHAN_PRIVKEY, -} from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; + +import { alith, baltathar, charleth, dorothy, ethan } from "../../util/accounts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("Treasury proposal #1", (context) => { it("should not be able to be approved by a non-council member", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = await context.polkadotApi.query.treasury.proposalCount(); expect(proposalCount.toHuman() === "1").to.equal(true, "new proposal should have been added"); // Try to approve the proposal directly (must be fail) - await context.polkadotApi.tx.treasury.approveProposal(0).signAndSend(ethan); let approvals = (await context.polkadotApi.query.treasury.approvals()) as any; expect(approvals.length).to.equal(0, "No proposal must have been approved"); }); @@ -32,19 +25,18 @@ describeDevMoonbeam("Treasury proposal #1", (context) => { describeDevMoonbeam("Treasury proposal #2", (context) => { it("should not be able to be rejected by a non-council member", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = await context.polkadotApi.query.treasury.proposalCount(); expect(proposalCount.toHuman() === "1").to.equal(true, "new proposal should have been added"); // Try to reject the proposal directly (must be fail) - await context.polkadotApi.tx.treasury.rejectProposal(0).signAndSend(ethan); + await context.polkadotApi.tx.treasury.rejectProposal(0).signAsync(ethan); expect(await context.polkadotApi.query.treasury.proposals(0)).not.equal( null, "The proposal should not have been deleted" @@ -54,13 +46,11 @@ describeDevMoonbeam("Treasury proposal #2", (context) => { describeDevMoonbeam("Treasury proposal #3", (context) => { it("should be rejected if three-fifths of the council did not vote in favor", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const charleth = await keyring.addFromUri(CHARLETH_PRIV_KEY, null, "ethereum"); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = await context.polkadotApi.query.treasury.proposalCount(); @@ -68,10 +58,11 @@ describeDevMoonbeam("Treasury proposal #3", (context) => { // A council member attempts to approve the proposal on behalf of the council // (must fail because there is not a quorum) - await context.polkadotApi.tx.councilCollective - .propose(1, context.polkadotApi.tx.treasury.approveProposal(0), 1_000) - .signAndSend(charleth); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.councilCollective + .propose(1, context.polkadotApi.tx.treasury.approveProposal(0), 1_000) + .signAsync(charleth) + ); // Verify that the proposal is not deleted expect(await context.polkadotApi.query.treasury.proposals(0)).not.equal( @@ -83,13 +74,11 @@ describeDevMoonbeam("Treasury proposal #3", (context) => { describeDevMoonbeam("Treasury proposal #4", (context) => { it("should not be rejected by less than half of the members of the Board", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const charleth = await keyring.addFromUri(CHARLETH_PRIV_KEY, null, "ethereum"); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = await context.polkadotApi.query.treasury.proposalCount(); @@ -97,10 +86,11 @@ describeDevMoonbeam("Treasury proposal #4", (context) => { // A council member attempts to reject the proposal on behalf of the council // (must fail because there is not a quorum) - await context.polkadotApi.tx.councilCollective - .propose(1, context.polkadotApi.tx.treasury.rejectProposal(0), 1_000) - .signAndSend(charleth); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.councilCollective + .propose(1, context.polkadotApi.tx.treasury.rejectProposal(0), 1_000) + .signAsync(charleth) + ); // Verify that the proposal is not approved let approvals = (await context.polkadotApi.query.treasury.approvals()) as any; @@ -110,23 +100,22 @@ describeDevMoonbeam("Treasury proposal #4", (context) => { describeDevMoonbeam("Treasury proposal #5", (context) => { it("should be approvable by root", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = await context.polkadotApi.query.treasury.proposalCount(); expect(proposalCount.toHuman() === "1").to.equal(true, "new proposal should have been added"); // Root approve the proposal directly - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.treasury.approveProposal(0)) - .signAndSend(alith); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.treasury.approveProposal(0)) + .signAsync(alith) + ); // Verify that the proposal is approved let approvals = (await context.polkadotApi.query.treasury.approvals()) as any; @@ -136,23 +125,22 @@ describeDevMoonbeam("Treasury proposal #5", (context) => { describeDevMoonbeam("Treasury proposal #6", (context) => { it("should be rejectable by root", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = await context.polkadotApi.query.treasury.proposalCount(); expect(proposalCount.toHuman() === "1").to.equal(true, "new proposal should have been added"); // Root approve the proposal directly - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.treasury.rejectProposal(0)) - .signAndSend(alith); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.sudo + .sudo(context.polkadotApi.tx.treasury.rejectProposal(0)) + .signAsync(alith) + ); // Verify that the proposal is deleted expect(await (await context.polkadotApi.query.treasury.proposals(0)).toHuman()).to.equal( @@ -168,44 +156,38 @@ describeDevMoonbeam("Treasury proposal #7", (context) => { // able to keep this tests within 5 seconds. this.timeout(10_000); - const keyring = new Keyring({ type: "ethereum" }); - const charleth = await keyring.addFromUri(CHARLETH_PRIV_KEY, null, "ethereum"); - const dorothy = await keyring.addFromUri(DOROTHY_PRIV_KEY, null, "ethereum"); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = (await context.polkadotApi.query.treasury.proposalCount()) as any; expect(proposalCount.toBigInt()).to.equal(1n, "new proposal should have been added"); // Charleth submit the proposal to the council (and therefore implicitly votes for) - const { events: proposalEvents } = await createBlockWithExtrinsic( - context, - charleth, - context.polkadotApi.tx.councilCollective.propose( - 2, - context.polkadotApi.tx.treasury.approveProposal(0), - 1_000 - ) + const { + result: { events: proposalEvents }, + } = await context.createBlock( + context.polkadotApi.tx.councilCollective + .propose(2, context.polkadotApi.tx.treasury.approveProposal(0), 1_000) + .signAsync(charleth) ); const proposalHash = proposalEvents - .find((e) => e.method.toString() == "Proposed") - .data[2].toHex() as string; + .find(({ event: { method } }) => method.toString() == "Proposed") + .event.data[2].toHex() as string; // Charleth & Dorothy vote for this proposal and close it - await context.polkadotApi.tx.councilCollective - .vote(proposalHash, 0, true) - .signAndSend(charleth); - await context.polkadotApi.tx.councilCollective.vote(proposalHash, 0, true).signAndSend(dorothy); - await context.createBlock(); - await context.createBlock(); - await context.polkadotApi.tx.councilCollective - .close(proposalHash, 0, 800_000_000, 1_000) - .signAndSend(dorothy); - await context.createBlock(); + await context.createBlock([ + context.polkadotApi.tx.councilCollective.vote(proposalHash, 0, true).signAsync(charleth), + context.polkadotApi.tx.councilCollective + .vote(proposalHash, 0, true) + .signAsync(dorothy, { nonce: 0 }), + context.polkadotApi.tx.councilCollective + .close(proposalHash, 0, 800_000_000, 1_000) + .signAsync(dorothy, { nonce: 1 }), + ]); // Verify that the proposal is approved let approvals = (await context.polkadotApi.query.treasury.approvals()) as any; @@ -215,14 +197,11 @@ describeDevMoonbeam("Treasury proposal #7", (context) => { describeDevMoonbeam("Treasury proposal #8", (context) => { it("should be rejected if the half of the council voted against it", async function () { - const keyring = new Keyring({ type: "ethereum" }); - const charleth = await keyring.addFromUri(CHARLETH_PRIV_KEY, null, "ethereum"); - const dorothy = await keyring.addFromUri(DOROTHY_PRIV_KEY, null, "ethereum"); - const ethan = await keyring.addFromUri(ETHAN_PRIVKEY, null, "ethereum"); - // Ethan submit a treasurery proposal - await context.polkadotApi.tx.treasury.proposeSpend(10, BALTATHAR).signAndSend(ethan); - await context.createBlock(); + + await context.createBlock( + context.polkadotApi.tx.treasury.proposeSpend(10, baltathar.address).signAsync(ethan) + ); // Verify that the proposal is submitted let proposalCount = (await context.polkadotApi.query.treasury.proposalCount()) as any; @@ -230,37 +209,35 @@ describeDevMoonbeam("Treasury proposal #8", (context) => { // Charleth proposed that the council reject the treasury proposal // (and therefore implicitly votes for) - const { events: rejectEvents } = await createBlockWithExtrinsic( - context, - charleth, - context.polkadotApi.tx.councilCollective.propose( - 2, - context.polkadotApi.tx.treasury.rejectProposal(0), - 1_000 - ) + const { + result: { events: rejectEvents }, + } = await context.createBlock( + context.polkadotApi.tx.councilCollective + .propose(2, context.polkadotApi.tx.treasury.rejectProposal(0), 1_000) + .signAsync(charleth) ); const councilProposalHash = rejectEvents - .find((e) => e.method.toString() == "Proposed") - .data[2].toHex() as string; + .find(({ event: { method } }) => method.toString() == "Proposed") + .event.data[2].toHex() as string; // Charleth & Dorothy vote for against proposal and close it - await Promise.all([ + await context.createBlock([ context.polkadotApi.tx.councilCollective .vote(councilProposalHash, 0, true) - .signAndSend(charleth), + .signAsync(charleth), context.polkadotApi.tx.councilCollective .vote(councilProposalHash, 0, true) - .signAndSend(dorothy), + .signAsync(dorothy), ]); - - await context.createBlock(); - const { events: closeEvents } = await createBlockWithExtrinsic( - context, - dorothy, - context.polkadotApi.tx.councilCollective.close(councilProposalHash, 0, 800_000_000, 1_000) + const { + result: { events: closeEvents }, + } = await context.createBlock( + context.polkadotApi.tx.councilCollective + .close(councilProposalHash, 0, 800_000_000, 1_000) + .signAsync(dorothy) ); // method: 'Rejected', section: 'treasury', index: '0x1103', - expect(closeEvents.map((e) => e.index.toHuman())).to.contain("0x1103"); + expect(closeEvents.map(({ event }) => event.index.toHuman())).to.contain("0x1103"); // Verify that the proposal is deleted expect((await context.polkadotApi.query.treasury.proposals(0)).toHuman()).to.equal( diff --git a/tests/tests/test-txpool/test-txpool-future.ts b/tests/tests/test-txpool/test-txpool-future.ts index 7717168d38..37ba481e17 100644 --- a/tests/tests/test-txpool/test-txpool-future.ts +++ b/tests/tests/test-txpool/test-txpool-future.ts @@ -1,15 +1,16 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { Contract } from "web3-eth-contract"; -import { GENESIS_ACCOUNT } from "../../util/constants"; -import { createContract, createContractExecution } from "../../util/transactions"; -import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith } from "../../util/accounts"; import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract } from "../../util/transactions"; describeDevMoonbeam("TxPool - Future Ethereum transaction", (context) => { - let txHash; + let txHash: string; before("Setup: Create transaction", async () => { - const { rawTx } = await createContract(context, "TestContract", { + const { rawTx } = await createContract(context, "MultiplyBy7", { gas: 1048576, nonce: 1, // future nonce }); @@ -19,7 +20,7 @@ describeDevMoonbeam("TxPool - Future Ethereum transaction", (context) => { it("should appear in the txpool inspection", async function () { let inspect = await customWeb3Request(context.web3, "txpool_inspect", []); // web3 rpc returns lowercase - let data = inspect.result.queued[GENESIS_ACCOUNT.toLowerCase()][context.web3.utils.toHex(1)]; + let data = inspect.result.queued[alith.address.toLowerCase()][context.web3.utils.toHex(1)]; expect(data).to.not.be.undefined; expect(data).to.be.equal( "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1000000000 wei" @@ -29,11 +30,11 @@ describeDevMoonbeam("TxPool - Future Ethereum transaction", (context) => { it("should appear in the txpool content", async function () { let content = await customWeb3Request(context.web3, "txpool_content", []); // web3 rpc returns lowercase - const data = content.result.queued[GENESIS_ACCOUNT.toLowerCase()][context.web3.utils.toHex(1)]; + const data = content.result.queued[alith.address.toLowerCase()][context.web3.utils.toHex(1)]; expect(data).to.include({ blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", blockNumber: null, - from: GENESIS_ACCOUNT.toLowerCase(), + from: alith.address.toLowerCase(), gas: "0x100000", gasPrice: "0x3b9aca00", hash: txHash, diff --git a/tests/tests/test-txpool/test-txpool-limits.ts b/tests/tests/test-txpool/test-txpool-limits.ts index 545ab68909..8c3c2b037b 100644 --- a/tests/tests/test-txpool/test-txpool-limits.ts +++ b/tests/tests/test-txpool/test-txpool-limits.ts @@ -1,3 +1,5 @@ +import "@moonbeam-network/api-augment"; + import { describeDevMoonbeam } from "../../util/setup-dev-tests"; describeDevMoonbeam("TxPool - Limits", (context) => { diff --git a/tests/tests/test-txpool/test-txpool-pending.ts b/tests/tests/test-txpool/test-txpool-pending.ts index 5b9610f3e4..97e9eee538 100644 --- a/tests/tests/test-txpool/test-txpool-pending.ts +++ b/tests/tests/test-txpool/test-txpool-pending.ts @@ -1,15 +1,17 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; import { Contract } from "web3-eth-contract"; -import { GENESIS_ACCOUNT } from "../../util/constants"; -import { createContract, createContractExecution } from "../../util/transactions"; -import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { alith } from "../../util/accounts"; import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract, createContractExecution } from "../../util/transactions"; describeDevMoonbeam("TxPool - Pending Ethereum transaction", (context) => { - let txHash; + let txHash: string; before("Setup: Create transaction", async () => { - const { rawTx } = await createContract(context, "TestContract", { + const { rawTx } = await createContract(context, "MultiplyBy7", { gas: 1048576, }); txHash = (await customWeb3Request(context.web3, "eth_sendRawTransaction", [rawTx])).result; @@ -18,7 +20,7 @@ describeDevMoonbeam("TxPool - Pending Ethereum transaction", (context) => { it("should appear in the txpool inspection", async function () { let inspect = await customWeb3Request(context.web3, "txpool_inspect", []); // web3 rpc returns lowercase - let data = inspect.result.pending[GENESIS_ACCOUNT.toLowerCase()][context.web3.utils.toHex(0)]; + let data = inspect.result.pending[alith.address.toLowerCase()][context.web3.utils.toHex(0)]; expect(data).to.not.be.undefined; expect(data).to.be.equal( "0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 1000000000 wei" @@ -39,11 +41,11 @@ describeDevMoonbeam("TxPool - Pending Ethereum transaction", (context) => { it("should appear in the txpool content", async function () { let content = await customWeb3Request(context.web3, "txpool_content", []); // web3 rpc returns lowercase - const data = content.result.pending[GENESIS_ACCOUNT.toLowerCase()][context.web3.utils.toHex(0)]; + const data = content.result.pending[alith.address.toLowerCase()][context.web3.utils.toHex(0)]; expect(data).to.include({ blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", blockNumber: null, - from: GENESIS_ACCOUNT.toLowerCase(), + from: alith.address.toLowerCase(), gas: "0x100000", gasPrice: "0x3b9aca00", hash: txHash, @@ -55,29 +57,34 @@ describeDevMoonbeam("TxPool - Pending Ethereum transaction", (context) => { }); describeDevMoonbeam("TxPool - Ethereum Contract Call", (context) => { - let testContract: Contract, txHash; + let multiplyBy7Contract: Contract; + let txHash: string; before("Setup: Create contract block and add call transaction", async () => { - const { contract, rawTx } = await createContract(context, "TestContract", { + const { contract, rawTx } = await createContract(context, "MultiplyBy7", { gas: 1048576, }); - testContract = contract; - await context.createBlock({ transactions: [rawTx] }); + multiplyBy7Contract = contract; + await context.createBlock(rawTx); txHash = ( await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - await createContractExecution(context, { - contract, - contractCall: contract.methods.multiply(5), - }), + await createContractExecution( + context, + { + contract, + contractCall: contract.methods.multiply(5), + }, + { gas: 12000000 } + ), ]) ).result; }); it("should appear in the txpool inspection", async function () { - const contractAddress = testContract.options.address; + const contractAddress = multiplyBy7Contract.options.address; const inspect = await customWeb3Request(context.web3, "txpool_inspect", []); - const data = inspect.result.pending[GENESIS_ACCOUNT.toLowerCase()][context.web3.utils.toHex(1)]; + const data = inspect.result.pending[alith.address.toLowerCase()][context.web3.utils.toHex(1)]; expect(data).to.not.be.undefined; expect(data).to.be.equal( @@ -87,16 +94,16 @@ describeDevMoonbeam("TxPool - Ethereum Contract Call", (context) => { it("should appear in the txpool content", async function () { const content = await customWeb3Request(context.web3, "txpool_content", []); - const data = content.result.pending[GENESIS_ACCOUNT.toLowerCase()][context.web3.utils.toHex(1)]; + const data = content.result.pending[alith.address.toLowerCase()][context.web3.utils.toHex(1)]; expect(data).to.include({ blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000", blockNumber: null, - from: GENESIS_ACCOUNT.toLowerCase(), + from: alith.address.toLowerCase(), gas: "0xb71b00", gasPrice: "0x3b9aca00", hash: txHash, nonce: context.web3.utils.toHex(1), - to: testContract.options.address.toLowerCase(), + to: multiplyBy7Contract.options.address.toLowerCase(), value: "0x0", }); }); diff --git a/tests/tests/test-txpool/test-txpool-reset.ts b/tests/tests/test-txpool/test-txpool-reset.ts index 2a1f51afd2..8c8aef7279 100644 --- a/tests/tests/test-txpool/test-txpool-reset.ts +++ b/tests/tests/test-txpool/test-txpool-reset.ts @@ -1,8 +1,10 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { createContract } from "../../util/transactions"; -import { describeDevMoonbeam } from "../../util/setup-dev-tests"; import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import { createContract } from "../../util/transactions"; describeDevMoonbeam("TxPool - Genesis", (context) => { it("should be empty", async function () { @@ -15,10 +17,10 @@ describeDevMoonbeam("TxPool - Genesis", (context) => { describeDevMoonbeam("TxPool - New block", (context) => { before("Setup: Create transaction and empty block", async () => { - const { rawTx } = await createContract(context, "TestContract", { + const { rawTx } = await createContract(context, "MultiplyBy7", { gas: 1048576, }); - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); await context.createBlock(); }); diff --git a/tests/tests/test-version.ts b/tests/tests/test-version.ts deleted file mode 100644 index 4c3b1e3e25..0000000000 --- a/tests/tests/test-version.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createContract } from "../util/transactions"; - -describeDevMoonbeam("Version RPC", (context) => { - it("should return 1281 for eth_chainId", async function () { - expect(await context.web3.eth.getChainId()).to.equal(1281); - }); - it("should return 1281 for net_version", async function () { - expect(await context.web3.eth.net.getId()).to.equal(1281); - }); -}); diff --git a/tests/tests/test-web3api.ts b/tests/tests/test-web3api.ts deleted file mode 100644 index c45169ee78..0000000000 --- a/tests/tests/test-web3api.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { expect } from "chai"; -import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; - -describeDevMoonbeam("Web3Api Information", (context) => { - it("should include client version", async function () { - const version = await context.web3.eth.getNodeInfo(); - let specName: string = await context.polkadotApi.runtimeVersion.specName.toString(); - let specVersion: string = await context.polkadotApi.runtimeVersion.specVersion.toString(); - let implVersion: string = await context.polkadotApi.runtimeVersion.implVersion.toString(); - let regex = new RegExp(specName + "/v" + specVersion + "." + implVersion + "/fc-rpc-2.0.0"); - expect(version).to.be.match(regex); - }); - - it("should provide sha3 hashing", async function () { - const data = context.web3.utils.stringToHex("hello"); - const hash = await customWeb3Request(context.web3, "web3_sha3", [data]); - const localhash = context.web3.utils.sha3("hello"); - expect(hash.result).to.be.equal(localhash); - }); - - it("should report peer count in hex", async function () { - // this tests that the "net_peerCount" response comes back in hex and not decimal. - // this seems a bit inconsistent amongst Ethereum APIs, but hex seems to be most common. - - // related: frontier commits 677548c and 78fb3bc - - const result = await customWeb3Request(context.web3, "net_peerCount", []); - - // TODO: this is really just testing that the result comes back as a string, not that it's - // expressed in hex (as opposed to decimal) - expect(result.result).to.be.equal("0x0"); - expect(typeof result.result).to.be.equal("string"); - }); -}); diff --git a/tests/tests/test-xcm-transactor.ts b/tests/tests/test-xcm-transactor.ts deleted file mode 100644 index 7c80974400..0000000000 --- a/tests/tests/test-xcm-transactor.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { expect } from "chai"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import Keyring from "@polkadot/keyring"; -import { ALITH, ALITH_PRIV_KEY } from "../util/constants"; - -describeDevMoonbeam("Precompiles - xcm transactor", (context) => { - let sudoAccount; - before("Setup genesis account and relay accounts", async () => { - const keyring = new Keyring({ type: "ethereum" }); - sudoAccount = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // register index 0 for Alith - await context.polkadotApi.tx.sudo - .sudo(context.polkadotApi.tx.xcmTransactor.register(ALITH, 0)) - .signAndSend(sudoAccount); - await context.createBlock(); - }); - - it("allows to retrieve index through precompiles", async function () { - const resp = await context.polkadotApi.query.xcmTransactor.indexToAccount(0); - expect(resp.toString()).to.eq(ALITH); - }); -}); diff --git a/tests/tests/test-xcm/test-mock-dmp-asset-transfer.ts b/tests/tests/test-xcm/test-mock-dmp-asset-transfer.ts new file mode 100644 index 0000000000..2eb4e15138 --- /dev/null +++ b/tests/tests/test-xcm/test-mock-dmp-asset-transfer.ts @@ -0,0 +1,50 @@ +import "@moonbeam-network/api-augment"; + +import { BN } from "@polkadot/util"; +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../util/assets"; +import { registerForeignAsset } from "../../util/xcm"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +// Twelve decimal places in the moonbase relay chain's token +const RELAY_TOKEN = 1_000_000_000_000n; + +const palletId = "0x6D6f646c617373746d6E67720000000000000000"; + +describeDevMoonbeam("Mock XCM - receive downward transfer", (context) => { + let assetId: string; + + before("Should Register an asset and set unit per sec", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); + }); + + it("Should receive a downward transfer of 10 DOTs to Alith", async function () { + // Send RPC call to inject XCM message + // You can provide a message, but if you don't a downward transfer is the default + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [[]]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + // Make sure the state has ALITH's to DOT tokens + let alith_dot_balance = ( + (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any + ) + .unwrap() + ["balance"].toBigInt(); + + expect(alith_dot_balance).to.eq(10n * RELAY_TOKEN); + }); +}); diff --git a/tests/tests/test-xcm/test-mock-dmp-error-and-appendix.ts b/tests/tests/test-xcm/test-mock-dmp-error-and-appendix.ts new file mode 100644 index 0000000000..6ed91e8758 --- /dev/null +++ b/tests/tests/test-xcm/test-mock-dmp-error-and-appendix.ts @@ -0,0 +1,574 @@ +import "@moonbeam-network/api-augment"; + +import { BN } from "@polkadot/util"; +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../util/assets"; +import { registerForeignAsset } from "../../util/xcm"; +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; +import type { XcmVersionedXcm } from "@polkadot/types/lookup"; + +// Twelve decimal places in the moonbase relay chain's token +const RELAY_TOKEN = 1_000_000_000_000n; + +const palletId = "0x6D6f646c617373746d6E67720000000000000000"; + +describeDevMoonbeam("Mock XCM - downward transfer with non-triggered error handler", (context) => { + let assetId: string; + + before("Should Register an asset and set unit per sec", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); + }); + + it("Should make sure that Alith does not receive 10 dot without error", async function () { + // BuyExecution does not charge for fees because we registered it for not doing so + // But since there is no error, and the deposit is on the error handler, the assets + // will be trapped + const xcmMessage = { + V2: [ + // Pretend relay assets were transferred to the sovereign + { + ReserveAssetDeposited: [ + { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + ], + }, + // Buy execution power + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + weightLimit: { Limited: new BN(500000000) }, + }, + }, + // Set an error handler that fires if there is any error after setting the ErrorHandler + { + SetErrorHandler: [ + { + // Deposit any existing asset in holding into alith + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: new BN(1), + beneficiary: { + parents: 0, + interior: { X1: { AccountKey20: { network: "Any", key: alith.address } } }, + }, + }, + }, + ], + }, + // Execute an arbitrary valid instruction that would trigger the ErrorHandler otherwise + { + ClearOrigin: null, + }, + ], + }; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + // Make sure ALITH did not reveive anything + let alith_dot_balance = (await context.polkadotApi.query.localAssets.account( + assetId, + alith.address + )) as any; + + expect(alith_dot_balance.isNone).to.be.true; + }); +}); + +describeDevMoonbeam("Mock XCM - downward transfer with triggered error handler", (context) => { + let assetId: string; + + before("Should Register an asset and set unit per sec", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); + }); + + it("Should make sure that Alith does receive 10 dot because there is error", async function () { + // BuyExecution does not charge for fees because we registered it for not doing so + // As a consequence the trapped assets will be entirely credited + const xcmMessage = { + V2: [ + // Pretend relay assets were transferred to the sovereign + { + ReserveAssetDeposited: [ + { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + ], + }, + // Buy execution power + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + weightLimit: { Limited: new BN(500000000) }, + }, + }, + // Set an error handler that fires if there is any error during the execution + { + SetErrorHandler: [ + { + // Deposit any existing asset in holding into alith + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: new BN(1), + beneficiary: { + parents: 0, + interior: { X1: { AccountKey20: { network: "Any", key: alith.address } } }, + }, + }, + }, + ], + }, + // Fire the error handler. This forces an error + { + Trap: 0, + }, + ], + }; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...receivedMessage.toU8a()]; + + // Send RPC call to inject XCM message + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + // Make sure the state has ALITH's to DOT tokens + let alith_dot_balance = ( + (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any + ) + .unwrap() + ["balance"].toBigInt(); + + expect(alith_dot_balance).to.eq(10n * RELAY_TOKEN); + }); +}); + +describeDevMoonbeam("Mock XCM - downward transfer with always triggered appendix", (context) => { + let assetId: string; + + before("Should Register an asset and set unit per sec", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); + }); + + it("Should make sure Alith receives 10 dot with appendix and without error", async function () { + // BuyExecution does not charge for fees because we registered it for not doing so + // As a consequence the trapped assets will be entirely credited + const xcmMessage = { + V2: [ + // Pretend relay assets were transferred to the sovereign + { + ReserveAssetDeposited: [ + { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + ], + }, + // Buy execution power + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + weightLimit: { Limited: new BN(400000000) }, + }, + }, + // Set an appendix to be executed after the XCM message is executed. No matter if errors + { + SetAppendix: [ + // Deposit any existing asset in holding into alith + { + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: new BN(1), + beneficiary: { + parents: 0, + interior: { X1: { AccountKey20: { network: "Any", key: alith.address } } }, + }, + }, + }, + ], + }, + ], + }; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + // Make sure the state has ALITH's to DOT tokens + let alith_dot_balance = ( + (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any + ) + .unwrap() + ["balance"].toBigInt(); + + expect(alith_dot_balance).to.eq(10n * RELAY_TOKEN); + }); +}); + +describeDevMoonbeam("Mock XCM - downward transfer with always triggered appendix", (context) => { + let assetId: string; + + before("Should Register an asset and set unit per sec", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); + }); + + it("Should make sure Alith receives 10 dot with appendix and without error", async function () { + // BuyExecution does not charge for fees because we registered it for not doing so + // As a consequence the trapped assets will be entirely credited + // The goal is to show appendix runs even if there is an error + const xcmMessage = { + V2: [ + // Pretend relay assets were transferred to the sovereign + { + ReserveAssetDeposited: [ + { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + ], + }, + // Buy execution power + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + weightLimit: { Limited: new BN(500000000) }, + }, + }, + // Set an appendix to be executed after the XCM message is executed. No matter if errors + { + SetAppendix: [ + { + // Deposit any existing asset in holding into alith + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: new BN(1), + beneficiary: { + parents: 0, + interior: { X1: { AccountKey20: { network: "Any", key: alith.address } } }, + }, + }, + }, + ], + }, + // Fire the error handler. This forces an error + { + Trap: 0, + }, + ], + }; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + // Make sure the state has ALITH's to DOT tokens + let alith_dot_balance = ( + (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any + ) + .unwrap() + ["balance"].toBigInt(); + + expect(alith_dot_balance).to.eq(10n * RELAY_TOKEN); + }); +}); + +describeDevMoonbeam("Mock XCM - downward transfer claim trapped assets", (context) => { + let assetId: string; + + before("Should Register an asset and set unit per sec and trap assets", async function () { + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + RELAY_SOURCE_LOCATION, + relayAssetMetadata + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); + + // BuyExecution does not charge for fees because we registered it for not doing so + // But since there is no error, and the deposit is on the error handler, the assets + // will be trapped. + // Goal is to trapp assets, so that later can be claimed + // Since we only BuyExecution, but we do not do anything with the assets after that, + // they are trapped + const xcmMessage = { + V2: [ + // Pretend relay assets were transferred to the sovereign + { + ReserveAssetDeposited: [ + { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + ], + }, + // Buy execution power + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + weightLimit: { Limited: new BN(200000000) }, + }, + }, + ], + }; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + // Make sure ALITH did not reveive anything + let alith_dot_balance = (await context.polkadotApi.query.localAssets.account( + assetId, + alith.address + )) as any; + + expect(alith_dot_balance.isNone).to.be.true; + }); + + it("Should make sure that Alith receives claimed assets", async function () { + // BuyExecution does not charge for fees because we registered it for not doing so + // As a consequence the trapped assets will be entirely credited + const xcmMessage = { + V2: [ + // Claim assets that were previously trapped + // assets: the assets that were trapped + // ticket: the version of the assets (xcm version) + { + ClaimAsset: { + assets: [ + { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + ], + // Ticket seems to indicate the version of the assets + ticket: { + parents: 0, + interior: { X1: { GeneralIndex: 2 } }, + }, + }, + }, + // Buy execution power + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 1, + interior: { + Here: null, + }, + }, + }, + fun: { Fungible: 10n * RELAY_TOKEN }, + }, + weightLimit: { Limited: new BN(300000000) }, + }, + }, + // Deposit assets, this time correctly, on Alith + { + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: new BN(1), + beneficiary: { + parents: 0, + interior: { X1: { AccountKey20: { network: "Any", key: alith.address } } }, + }, + }, + }, + ], + }; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...receivedMessage.toU8a()]; + + // Send RPC call to inject XCM message + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + // Make sure the state has ALITH's to DOT tokens + let alith_dot_balance = ( + (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any + ) + .unwrap() + ["balance"].toBigInt(); + + expect(alith_dot_balance).to.eq(10n * RELAY_TOKEN); + }); +}); diff --git a/tests/tests/test-xcm/test-mock-dmp-queue.ts b/tests/tests/test-xcm/test-mock-dmp-queue.ts new file mode 100644 index 0000000000..4b209e5e41 --- /dev/null +++ b/tests/tests/test-xcm/test-mock-dmp-queue.ts @@ -0,0 +1,152 @@ +import { BN, u8aToHex } from "@polkadot/util"; +import { expect } from "chai"; + +import { customWeb3Request } from "../../util/providers"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +import type { XcmVersionedXcm } from "@polkadot/types/lookup"; +import { expectOk } from "../../util/expect"; + +describeDevMoonbeam("Mock XCMP - test XCMP execution", (context) => { + it("Should test DMP on_initialization and on_idle", async function () { + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => pallet.name === "Balances" + ).index; + + let numMsgs = 50; + // let's target half of then being executed + + // xcmp reserved is BLOCK/4 + const totalDmpWeight = + context.polkadotApi.consts.system.blockWeights.maxBlock.toBigInt() / BigInt(4); + + // we want half of numParaMsgs to be executed. That give us how much each message weights + const weightPerMessage = (totalDmpWeight * BigInt(2)) / BigInt(numMsgs); + + const weightPerXcmInst = 100_000_000n; + // Now we need to construct the message. This needs to: + // - pass barrier (withdraw + clearOrigin*n buyExecution) + // - fail in buyExecution, so that the previous instruction weights are counted + // we know at least 2 instructions are needed per message (withdrawAsset + buyExecution) + // how many clearOrigins do we need to append? + + // we will bias this number. The reason is we want to test the decay, and therefore we need + // an unbalanced number of messages executed. We specifically need that at some point + // we get out of the loop of the execution (we reach the threshold limit), to then + // go on idle + + // for that reason, we multiply times 2 + const clearOriginsPerMessage = (weightPerMessage - weightPerXcmInst * 2n) / weightPerXcmInst; + + const instructions = [ + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + ], + }, + ...Array(Number(clearOriginsPerMessage)).fill({ + ClearOrigin: null, + }), + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + weightLimit: { Limited: new BN(20000000000) }, + }, + }, + ]; + + const xcmMessage = { + V2: instructions, + }; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...receivedMessage.toU8a()]; + + // We want these isntructions to fail in BuyExecution. That means + // WithdrawAsset needs to work. The only way for this to work + // is to fund each sovereign account + const sovereignAddress = u8aToHex( + new Uint8Array([...new TextEncoder().encode("Parent")]) + ).padEnd(42, "0"); + + // We first fund the parent sovereign account with 1000 + // we will only withdraw 1, so no problem on this + await expectOk( + context.createBlock(context.polkadotApi.tx.balances.transfer(sovereignAddress, 1000n)) + ); + + // now we start injecting messages + // several + for (let i = 0; i < numMsgs; i++) { + await customWeb3Request(context.web3, "xcm_injectDownwardMessage", [totalMessage]); + } + + await context.createBlock(); + + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); + const apiAt = await context.polkadotApi.at(signedBlock.block.header.hash); + const allRecords = await apiAt.query.system.events(); + const events = allRecords.map(({ event }) => `${event.section}.${event.method}.${event.data}`); + + // lets grab at which point the dmp queue was exhausted + const index = events.findIndex((event) => { + if (event.includes("dmpQueue.WeightExhausted.")) { + return true; + } else { + return false; + } + }); + const eventsExecutedOnInitialization = events.slice(0, index + 1); + const eventsExecutedOnIdle = events.slice(index + 1, events.length); + + // lets count + let executedOnIdle = 0; + let executedOnInitialization = 0; + + // OnInitialization + eventsExecutedOnInitialization.forEach((e) => { + if (e.toString().includes("tooExpensive")) { + executedOnInitialization += 1; + } + }); + + // OnIdle + eventsExecutedOnIdle.forEach((e) => { + if (e.toString().includes("tooExpensive")) { + executedOnIdle += 1; + } + }); + + // the test was designed to go half and half + expect(executedOnInitialization).to.be.eq(25); + expect(executedOnIdle).to.be.eq(25); + const pageIndex = await apiAt.query.dmpQueue.pageIndex(); + expect(pageIndex.beginUsed.toBigInt()).to.eq(0n); + expect(pageIndex.endUsed.toBigInt()).to.eq(0n); + }); +}); diff --git a/tests/tests/test-mock-hrmp.ts b/tests/tests/test-xcm/test-mock-hrmp-asset-transfer.ts similarity index 73% rename from tests/tests/test-mock-hrmp.ts rename to tests/tests/test-xcm/test-mock-hrmp-asset-transfer.ts index b06c4e57f0..003d721dcb 100644 --- a/tests/tests/test-mock-hrmp.ts +++ b/tests/tests/test-xcm/test-mock-hrmp-asset-transfer.ts @@ -1,15 +1,19 @@ -import Keyring from "@polkadot/keyring"; +import "@moonbeam-network/api-augment"; + import { KeyringPair } from "@polkadot/keyring/types"; -import { expect } from "chai"; +import { ParaId, XcmpMessageFormat } from "@polkadot/types/interfaces"; import { BN, u8aToHex } from "@polkadot/util"; +import { expect } from "chai"; -import { ALITH_PRIV_KEY, BALTATHAR_PRIVATE_KEY, RANDOM_PRIV_KEY } from "../util/constants"; -import { describeDevMoonbeam } from "../util/setup-dev-tests"; -import { createBlockWithExtrinsic } from "../util/substrate-rpc"; -import { customWeb3Request } from "../util/providers"; -import type { XcmVersionedXcm } from "@polkadot/types/lookup"; +import { alith, baltathar, generateKeyringPair } from "../../util/accounts"; +import { PARA_2000_SOURCE_LOCATION } from "../../util/assets"; +import { registerForeignAsset } from "../../util/xcm"; +import { customWeb3Request } from "../../util/providers"; -import { ParaId, XcmpMessageFormat } from "@polkadot/types/interfaces"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +import type { XcmVersionedXcm } from "@polkadot/types/lookup"; +import { expectOk } from "../../util/expect"; const FOREIGN_TOKEN = 1_000_000_000_000n; @@ -24,10 +28,8 @@ const assetMetadata = { decimals: new BN(12), isFrozen: false, }; - -const sourceLocation = { XCM: { parents: 1, interior: { X1: { Parachain: foreign_para_id } } } }; -const statemintLocation = { - XCM: { +const STATEMINT_LOCATION = { + Xcm: { parents: 1, interior: { X3: [ @@ -38,9 +40,8 @@ const statemintLocation = { }, }, }; - -const statemintLocationAssetOne = { - XCM: { +const STATEMINT_ASSET_ONE_LOCATION = { + Xcm: { parents: 1, interior: { X3: [ @@ -54,48 +55,17 @@ const statemintLocationAssetOne = { describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { let assetId: string; - let alith: KeyringPair; before("Should Register an asset and set unit per sec", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - sourceLocation, - assetMetadata, - new BN(1), - true - ) - ) + PARA_2000_SOURCE_LOCATION, + assetMetadata ); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(sourceLocation, 0, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ( - (await context.polkadotApi.query.assets.asset(assetId)) as any - ).unwrap(); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); }); @@ -112,7 +82,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any ) .unwrap() - ["balance"].toBigInt(); + .balance.toBigInt(); expect(alith_dot_balance).to.eq(10n * FOREIGN_TOKEN); }); @@ -120,49 +90,17 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { let assetId: string; - let alith: KeyringPair; before("Should Register an asset and set unit per sec", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // registerForeignAsset - // We register statemine with the new prefix - const { events: eventsRegister } = await createBlockWithExtrinsic( + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - statemintLocation, - assetMetadata, - new BN(1), - true - ) - ) + STATEMINT_LOCATION, + assetMetadata ); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(statemintLocation, 0, 0) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ( - (await context.polkadotApi.query.assets.asset(assetId)) as any - ).unwrap(); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); }); @@ -189,7 +127,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -249,48 +187,17 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { let assetId: string; - let alith: KeyringPair; before("Should Register an asset and set unit per sec", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - // registerForeignAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - statemintLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); - - // setAssetUnitsPerSecond - const { events } = await createBlockWithExtrinsic( + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond(statemintLocation, 0, 0) - ) + STATEMINT_LOCATION, + assetMetadata ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check asset in storage - const registeredAsset = ( - (await context.polkadotApi.query.assets.asset(assetId)) as any - ).unwrap(); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); }); @@ -324,7 +231,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -369,37 +276,32 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; // Send RPC call to inject XCM message // We will set a specific message knowing that it should mint the statemint asset - await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [ + const r = await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [ statemint_para_id, totalMessage, ]); + console.log(r); // Create a block in which the XCM will be executed await context.createBlock(); // Make sure the state has ALITH's foreign parachain tokens - let alith_dot_balance = ( - (await context.polkadotApi.query.assets.account(assetId, alith.address)) as any - ) - .unwrap() - ["balance"].toBigInt(); - - expect(alith_dot_balance).to.eq(10n * FOREIGN_TOKEN); + expect( + (await context.polkadotApi.query.assets.account(assetId, alith.address)) + .unwrap() + .balance.toBigInt() + ).to.eq(10n * FOREIGN_TOKEN); }); }); describeDevMoonbeam("Mock XCM - receive horizontal transfer of DEV", (context) => { - let alith: KeyringPair; let random: KeyringPair; let paraId: ParaId; - let transferredBalance; - let sovereignAddress; + let transferredBalance: bigint; + let sovereignAddress: string; before("Should send DEV to the parachain sovereign", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - random = keyringEth.addFromUri(RANDOM_PRIV_KEY, null, "ethereum"); - + random = generateKeyringPair(); paraId = context.polkadotApi.createType("ParaId", 2000) as any; sovereignAddress = u8aToHex( new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) @@ -408,9 +310,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer of DEV", (context) = transferredBalance = 100000000000000n; // We first fund parachain 2000 sovreign account - await createBlockWithExtrinsic( - context, - alith, + await context.createBlock( context.polkadotApi.tx.balances.transfer(sovereignAddress, transferredBalance) ); let balance = ( @@ -424,9 +324,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer of DEV", (context) = // Get Pallet balances index const metadata = await context.polkadotApi.rpc.state.getMetadata(); const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( - (pallet) => { - return pallet.name === "Balances"; - } + (pallet) => pallet.name === "Balances" ).index; // We are charging 100_000_000 weight for every XCM instruction // We are executing 4 instructions @@ -450,7 +348,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer of DEV", (context) = }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -515,17 +413,13 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer of DEV", (context) = describeDevMoonbeam( "Mock XCM - receive horizontal transfer of DEV with new reanchor", (context) => { - let alith: KeyringPair; let random: KeyringPair; let paraId: ParaId; - let transferredBalance; - let sovereignAddress; + let transferredBalance: bigint; + let sovereignAddress: string; before("Should send DEV to the parachain sovereign", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - random = keyringEth.addFromUri(RANDOM_PRIV_KEY, null, "ethereum"); - + random = generateKeyringPair(); paraId = context.polkadotApi.createType("ParaId", 2000) as any; sovereignAddress = u8aToHex( new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) @@ -534,10 +428,10 @@ describeDevMoonbeam( transferredBalance = 100000000000000n; // We first fund parachain 2000 sovreign account - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.balances.transfer(sovereignAddress, transferredBalance) + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(sovereignAddress, transferredBalance) + ) ); let balance = ( (await context.polkadotApi.query.system.account(sovereignAddress)) as any @@ -546,13 +440,10 @@ describeDevMoonbeam( }); it("Should receive MOVR from para Id 2000 with new reanchor logic", async function () { - let ownParaId = (await context.polkadotApi.query.parachainInfo.parachainId()) as any; // Get Pallet balances index const metadata = await context.polkadotApi.rpc.state.getMetadata(); const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( - (pallet) => { - return pallet.name === "Balances"; - } + (pallet) => pallet.name === "Balances" ).index; // We are charging 100_000_000 weight for every XCM instruction // We are executing 4 instructions @@ -577,7 +468,7 @@ describeDevMoonbeam( }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -645,21 +536,15 @@ describeDevMoonbeam( describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { let assetId: string; - let alith: KeyringPair; - let baltathar: KeyringPair; let paraId: ParaId; - let transferredBalance; - let sovereignAddress; + let transferredBalance: bigint; + let sovereignAddress: string; before("Should Register an asset and set unit per sec", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyringEth.addFromUri(BALTATHAR_PRIVATE_KEY, null, "ethereum"); - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, + const { + result: { events: eventsRegister }, + } = await context.createBlock( context.polkadotApi.tx.sudo.sudo( context.polkadotApi.tx.assetManager.registerLocalAsset( baltathar.address, @@ -671,20 +556,18 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { ); // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); + assetId = eventsRegister + .find(({ event: { section } }) => section.toString() === "assetManager") + .event.data[0].toHex() + .replace(/,/g, ""); - transferredBalance = new BN(100000000000000); + transferredBalance = 100000000000000n; // mint asset - await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.localAssets.mint(assetId, alith.address, transferredBalance) + await context.createBlock( + context.polkadotApi.tx.localAssets + .mint(assetId, alith.address, transferredBalance) + .signAsync(baltathar) ); paraId = context.polkadotApi.createType("ParaId", 2000) as any; @@ -693,26 +576,24 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { ).padEnd(42, "0"); // We first fund parachain 2000 sovreign account - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.balances.transfer(sovereignAddress, transferredBalance) + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(sovereignAddress, transferredBalance) + ) ); // transfer to para Id sovereign to emulate having sent the tokens - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.localAssets.transfer(assetId, sovereignAddress, transferredBalance) + await expectOk( + context.createBlock( + context.polkadotApi.tx.localAssets.transfer(assetId, sovereignAddress, transferredBalance) + ) ); }); it("Should receive 10 Local Asset tokens and sufficent DEV to pay for fee", async function () { const metadata = await context.polkadotApi.rpc.state.getMetadata(); const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( - (pallet) => { - return pallet.name === "Balances"; - } + (pallet) => pallet.name === "Balances" ).index; const localAssetsPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( @@ -756,7 +637,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -819,81 +700,25 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { let assetIdZero: string; let assetIdOne: string; - let alith: KeyringPair; before( "Should Register two asset from same para but set unit per sec for one", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // registerAsset Asset 0 - // We register statemine with the new prefix - const { events: eventsRegisterZero } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - statemintLocation, - assetMetadata, - new BN(1), - true - ) - ) - ); - // Look for assetId in events - eventsRegisterZero.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetIdZero = e.data[0].toHex(); - } - }); - assetIdZero = assetIdZero.replace(/,/g, ""); - - // registerAsset Asset 1 - // We register statemine with the new prefix - const { events: eventsRegisterOne } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - statemintLocationAssetOne, - assetMetadata, - new BN(1), - true - ) - ) - ); - // Look for assetId in events - eventsRegisterOne.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetIdOne = e.data[0].toHex(); - } - }); - assetIdOne = assetIdOne.replace(/,/g, ""); - - // setAssetUnitsPerSecond.We only set it for statemintLocationAssetOne - const { events } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond( - statemintLocationAssetOne, - 0, - 0 - ) - ) - ); - expect(events[1].method.toString()).to.eq("UnitsPerSecondChanged"); - expect(events[4].method.toString()).to.eq("ExtrinsicSuccess"); - - // check assets in storage - const registeredAssetZero = ( - (await context.polkadotApi.query.assets.asset(assetIdZero)) as any - ).unwrap(); + // registerForeignAsset 0 + const { registeredAssetId: registeredAssetIdZero, registeredAsset: registeredAssetZero } = + await registerForeignAsset(context, STATEMINT_LOCATION, assetMetadata); + assetIdZero = registeredAssetIdZero; + // registerForeignAsset 1 + const { + registeredAssetId: registeredAssetIdOne, + events, + registeredAsset: registeredAssetOne, + } = await registerForeignAsset(context, STATEMINT_ASSET_ONE_LOCATION, assetMetadata, 0, 1); + assetIdOne = registeredAssetIdOne; + + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); expect(registeredAssetZero.owner.toHex()).to.eq(palletId.toLowerCase()); - const registeredAssetOne = ( - (await context.polkadotApi.query.assets.asset(assetIdZero)) as any - ).unwrap(); expect(registeredAssetOne.owner.toHex()).to.eq(palletId.toLowerCase()); } ); @@ -937,7 +762,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -1004,21 +829,15 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { let assetId: string; - let alith: KeyringPair; - let baltathar: KeyringPair; let paraId: ParaId; - let transferredBalance; - let sovereignAddress; + let transferredBalance: bigint; + let sovereignAddress: string; before("Should Register an asset and set unit per sec", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - baltathar = await keyringEth.addFromUri(BALTATHAR_PRIVATE_KEY, null, "ethereum"); - // registerAsset - const { events: eventsRegister } = await createBlockWithExtrinsic( - context, - alith, + const { + result: { events: eventsRegister }, + } = await context.createBlock( context.polkadotApi.tx.sudo.sudo( context.polkadotApi.tx.assetManager.registerLocalAsset( baltathar.address, @@ -1030,20 +849,20 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { ); // Look for assetId in events - eventsRegister.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetId = e.data[0].toHex(); - } - }); - assetId = assetId.replace(/,/g, ""); + assetId = eventsRegister + .find(({ event: { section } }) => section.toString() === "assetManager") + .event.data[0].toHex() + .replace(/,/g, ""); - transferredBalance = new BN(100000000000000); + transferredBalance = 100000000000000n; // mint asset - await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.localAssets.mint(assetId, alith.address, transferredBalance) + await expectOk( + context.createBlock( + context.polkadotApi.tx.localAssets + .mint(assetId, alith.address, transferredBalance) + .signAsync(baltathar) + ) ); paraId = context.polkadotApi.createType("ParaId", 2000) as any; @@ -1052,17 +871,17 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { ).padEnd(42, "0"); // We first fund parachain 2000 sovreign account - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.balances.transfer(sovereignAddress, transferredBalance) + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(sovereignAddress, transferredBalance) + ) ); // transfer to para Id sovereign to emulate having sent the tokens - await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.localAssets.transfer(assetId, sovereignAddress, transferredBalance) + await expectOk( + context.createBlock( + context.polkadotApi.tx.localAssets.transfer(assetId, sovereignAddress, transferredBalance) + ) ); }); @@ -1070,9 +889,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { let ownParaId = (await context.polkadotApi.query.parachainInfo.parachainId()) as any; const metadata = await context.polkadotApi.rpc.state.getMetadata(); const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( - (pallet) => { - return pallet.name === "Balances"; - } + (pallet) => pallet.name === "Balances" ).index; const localAssetsPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( @@ -1120,7 +937,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -1179,40 +996,17 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { }); describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { - let assetIdZero: string; - let alith: KeyringPair; + let assetId: string; before("Should register one asset without setting units per second", async function () { - const keyringEth = new Keyring({ type: "ethereum" }); - alith = keyringEth.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - - // registerAsset Asset 0 - // We register statemine with the new prefix - const { events: eventsRegisterZero } = await createBlockWithExtrinsic( + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( context, - alith, - context.polkadotApi.tx.sudo.sudo( - context.polkadotApi.tx.assetManager.registerForeignAsset( - statemintLocation, - assetMetadata, - new BN(1), - true - ) - ) + STATEMINT_LOCATION, + assetMetadata ); - // Look for assetId in events - eventsRegisterZero.forEach((e) => { - if (e.section.toString() === "assetManager") { - assetIdZero = e.data[0].toHex(); - } - }); - assetIdZero = assetIdZero.replace(/,/g, ""); - - // check assets in storage - const registeredAssetZero = ( - (await context.polkadotApi.query.assets.asset(assetIdZero)) as any - ).unwrap(); - expect(registeredAssetZero.owner.toHex()).to.eq(palletId.toLowerCase()); + assetId = registeredAssetId; + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); }); it("Should not receive 10 asset 0 tokens because fee not supported ", async function () { @@ -1233,7 +1027,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { }, ], }, - { ClearOrigin: null }, + { ClearOrigin: null as any }, { BuyExecution: { fees: { @@ -1282,7 +1076,7 @@ describeDevMoonbeam("Mock XCM - receive horizontal transfer", (context) => { // Make sure the state has ALITH's foreign parachain tokens let alithAssetZeroBalance = (await context.polkadotApi.query.assets.account( - assetIdZero, + assetId, alith.address )) as any; diff --git a/tests/tests/test-xcm/test-mock-hrmp-queue.ts b/tests/tests/test-xcm/test-mock-hrmp-queue.ts new file mode 100644 index 0000000000..3bbb7e5927 --- /dev/null +++ b/tests/tests/test-xcm/test-mock-hrmp-queue.ts @@ -0,0 +1,688 @@ +import "@moonbeam-network/api-augment"; + +import { XcmpMessageFormat } from "@polkadot/types/interfaces"; +import { BN, u8aToHex } from "@polkadot/util"; +import { expect } from "chai"; +import { ChaChaRng } from "randchacha"; + +import { customWeb3Request } from "../../util/providers"; +import { mockHrmpChannelExistanceTx } from "../../util/xcm"; + +import { describeDevMoonbeam, DevTestContext } from "../../util/setup-dev-tests"; + +import type { XcmVersionedXcm, XcmVersionedMultiLocation } from "@polkadot/types/lookup"; + +import { expectOk } from "../../util/expect"; + +// enum to mark how xcmp execution went +enum XcmpExecution { + // it means the xcmp message was executed on_initialization + InitializationExecutedPassingBarrier, + // it means the xcmp message failed in the barrier check on_initialization + InitializationExecutedNotPassingBarrier, + // it means the xcmp was executed on_idle + OnIdleExecutedPassingBarrier, +} + +// Function to calculate how messages coming from different paras will be executed +export async function calculateShufflingAndExecution( + context: DevTestContext, + numParaMsgs: number, + weightUsePerMessage: bigint, + totalXcmpWeight: bigint +) { + // the randomization is as follows + // for every rand number, we do module number of paras + // the given index is swaped with that obtained with the + // random number + + let weightAvailable = 0n; + let weightUsed = 0n; + + // we want to mimic the randomization process in the queue + let indices = Array.from(Array(numParaMsgs).keys()); + let shouldItExecute = new Array(numParaMsgs).fill(false); + + let seed = await context.polkadotApi.query.system.parentHash(); + let rng = new ChaChaRng(seed); + + const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); + const apiAt = await context.polkadotApi.at(signedBlock.block.header.hash); + const queueConfig = (await apiAt.query.xcmpQueue.queueConfig()) as any; + let decay = queueConfig.weightRestrictDecay.toBigInt(); + let thresholdWeight = queueConfig.thresholdWeight.toBigInt(); + + for (let i = 0; i < numParaMsgs; i++) { + let rand = rng.nextU32(); + let j = rand % numParaMsgs; + [indices[i], indices[j]] = [indices[j], indices[i]]; + + // mimics the decay algorithm + if (totalXcmpWeight - weightUsed > thresholdWeight) { + if (weightAvailable != totalXcmpWeight) { + weightAvailable += (totalXcmpWeight - weightAvailable) / (decay + 1n); + if (weightAvailable + thresholdWeight > totalXcmpWeight) { + weightAvailable = totalXcmpWeight; + } + } + let weight_remaining = weightAvailable - weightUsed; + + if (weight_remaining < weightUsePerMessage) { + shouldItExecute[i] = XcmpExecution.InitializationExecutedNotPassingBarrier; + } else { + shouldItExecute[i] = XcmpExecution.InitializationExecutedPassingBarrier; + weightUsed += weightUsePerMessage; + } + } else { + // we know this will execute on idle + shouldItExecute[i] = XcmpExecution.OnIdleExecutedPassingBarrier; + } + } + + return [indices, shouldItExecute]; +} + +describeDevMoonbeam("Mock XCMP - test XCMP execution", (context) => { + it("Should test that XCMP is executed randomized and until exhausted", async function () { + this.timeout(120000); + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => pallet.name === "Balances" + ).index; + + // lets work with restrict decay 0 for now + await expectOk( + context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.xcmpQueue.updateWeightRestrictDecay(0) + ) + ) + ); + + const numParaMsgs = 50; + // let's target half of then being executed + + // xcmp reserved is BLOCK/4 + const totalXcmpWeight = + context.polkadotApi.consts.system.blockWeights.maxBlock.toBigInt() / BigInt(4); + + // we want half of numParaMsgs to be executed. That give us how much each message weights + const weightPerMessage = (totalXcmpWeight * BigInt(2)) / BigInt(numParaMsgs); + + const weightPerXcmInst = 100_000_000n; + // Now we need to construct the message. This needs to: + // - pass barrier (withdraw + clearOrigin*n buyExecution) + // - fail in buyExecution, so that the previous instruction weights are counted + // we know at least 2 instructions are needed per message (withdrawAsset + buyExecution) + // how many clearOrigins do we need to append? + + // In this case we want to never reach the thresholdLimit, to make sure we execute every + // single messages. + const clearOriginsPerMessage = (weightPerMessage - weightPerXcmInst) / weightPerXcmInst; + + const instructions = [ + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + ], + }, + ...Array(Number(clearOriginsPerMessage)).fill({ + ClearOrigin: null, + }), + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + weightLimit: { Limited: new BN(20000000000) }, + }, + }, + ]; + + const xcmMessage = { + V2: instructions, + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + + // We want these isntructions to fail in BuyExecution. That means + // WithdrawAsset needs to work. The only way for this to work + // is to fund each sovereign account + for (let i = 0; i < numParaMsgs; i++) { + const paraId = context.polkadotApi.createType("ParaId", i + 1) as any; + const sovereignAddress = u8aToHex( + new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) + ).padEnd(42, "0"); + + // We first fund each sovereign account with 100 + // we will only withdraw 1, so no problem on this + await expectOk( + context.createBlock(context.polkadotApi.tx.balances.transfer(sovereignAddress, 100n)) + ); + } + + // now we start injecting messages + // one per para + for (let i = 0; i < numParaMsgs; i++) { + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [i + 1, totalMessage]); + } + + await context.createBlock(); + + // all the withdraws + clear origins `buyExecution + const weightUsePerMessage = (clearOriginsPerMessage + 2n) * 100_000_000n; + + const result = await calculateShufflingAndExecution( + context, + numParaMsgs, + weightUsePerMessage, + totalXcmpWeight + ); + + const indices = result[0]; + const shouldItExecute = result[1]; + + // assert we dont have on_idle execution + expect(shouldItExecute.indexOf(XcmpExecution.InitializationExecutedPassingBarrier) > -1).to.be + .true; + expect(shouldItExecute.indexOf(XcmpExecution.InitializationExecutedNotPassingBarrier) > -1).to + .be.true; + expect(shouldItExecute.indexOf(XcmpExecution.OnIdleExecutedPassingBarrier) > -1).to.be.false; + + // check balances + for (let i = 0; i < numParaMsgs; i++) { + // we need to check the randomization works. We have the shuffleing + // and the amount executed, we need to make sure the balances + // corresponding to the first executedCount shuffled indices + // has one less unit of token + const paraId = context.polkadotApi.createType("ParaId", i + 1) as any; + const sovereignAddress = u8aToHex( + new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) + ).padEnd(42, "0"); + + let balance = await context.polkadotApi.query.system.account(sovereignAddress); + + if ( + shouldItExecute[indices.indexOf(i)] == XcmpExecution.InitializationExecutedPassingBarrier || + shouldItExecute[indices.indexOf(i)] == XcmpExecution.OnIdleExecutedPassingBarrier + ) { + expect(balance.data.free.toBigInt()).to.eq(99n); + } else { + expect(balance.data.free.toBigInt()).to.eq(100n); + } + } + }); +}); + +describeDevMoonbeam("Mock XCMP - test XCMP execution", (context) => { + it("Should test XCMP with decay randomized until exhausted, then Onidle", async function () { + this.timeout(120000); + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => pallet.name === "Balances" + ).index; + + const numParaMsgs = 50; + // let's target half of then being executed + + // xcmp reserved is BLOCK/4 + const totalXcmpWeight = + context.polkadotApi.consts.system.blockWeights.maxBlock.toBigInt() / BigInt(4); + + // we want half of numParaMsgs to be executed. That give us how much each message weights + const weightPerMessage = (totalXcmpWeight * BigInt(2)) / BigInt(numParaMsgs); + + const weightPerXcmInst = 100_000_000n; + // Now we need to construct the message. This needs to: + // - pass barrier (withdraw + clearOrigin*n buyExecution) + // - fail in buyExecution, so that the previous instruction weights are counted + // we know at least 2 instructions are needed per message (withdrawAsset + buyExecution) + // how many clearOrigins do we need to append? + + // we will bias this number. The reason is we want to test the decay, and therefore we need + // an unbalanced number of messages executed. We specifically need that at some point + // we get out of the loop of the execution (we reach the threshold limit), to then + // go on idle + + // for that reason, we multiply times 2 + const clearOriginsPerMessage = (weightPerMessage - weightPerXcmInst * 2n) / weightPerXcmInst; + + const instructions = [ + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + ], + }, + ...Array(Number(clearOriginsPerMessage)).fill({ + ClearOrigin: null, + }), + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + weightLimit: { Limited: new BN(20000000000) }, + }, + }, + ]; + + let xcmMessage = { + V2: instructions, + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + + // We want these isntructions to fail in BuyExecution. That means + // WithdrawAsset needs to work. The only way for this to work + // is to fund each sovereign account + for (let i = 0; i < numParaMsgs; i++) { + const paraId = context.polkadotApi.createType("ParaId", i + 1) as any; + const sovereignAddress = u8aToHex( + new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) + ).padEnd(42, "0"); + + // We first fund each sovereign account with 100 + // we will only withdraw 1, so no problem on this + await expectOk( + context.createBlock(context.polkadotApi.tx.balances.transfer(sovereignAddress, 100n)) + ); + } + + // now we start injecting messages + // one per para + for (let i = 0; i < numParaMsgs; i++) { + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [i + 1, totalMessage]); + } + + await context.createBlock(); + + // all the withdraws + clear origins `buyExecution + const weightUsePerMessage = (clearOriginsPerMessage + 2n) * 100_000_000n; + + // in this case, we have some that will execute on_initialize + // some that will fail the execution + // and some that will execute on_idle + const result = await calculateShufflingAndExecution( + context, + numParaMsgs, + weightUsePerMessage, + totalXcmpWeight + ); + + const indices = result[0]; + const shouldItExecute = result[1]; + + // assert we have all kinds of execution + expect(shouldItExecute.indexOf(XcmpExecution.InitializationExecutedPassingBarrier) > -1).to.be + .true; + expect(shouldItExecute.indexOf(XcmpExecution.InitializationExecutedNotPassingBarrier) > -1).to + .be.true; + expect(shouldItExecute.indexOf(XcmpExecution.OnIdleExecutedPassingBarrier) > -1).to.be.true; + + // check balances + for (let i = 0; i < numParaMsgs; i++) { + // we need to check the randomization works. We have the shuffleing + // and the amount executed, we need to make sure the balances + // corresponding to the first executedCount shuffled indices + // has one less unit of token + const paraId = context.polkadotApi.createType("ParaId", i + 1) as any; + const sovereignAddress = u8aToHex( + new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) + ).padEnd(42, "0"); + + const balance = await context.polkadotApi.query.system.account(sovereignAddress); + + if ( + shouldItExecute[indices.indexOf(i)] == XcmpExecution.InitializationExecutedPassingBarrier || + shouldItExecute[indices.indexOf(i)] == XcmpExecution.OnIdleExecutedPassingBarrier + ) { + expect(balance.data.free.toBigInt()).to.eq(99n); + } else { + expect(balance.data.free.toBigInt()).to.eq(100n); + } + } + }); +}); + +describeDevMoonbeam("Mock XCMP - test XCMP execution", (context) => { + it("Should test for two XCMP insertions for same para, the last is executed", async function () { + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => pallet.name === "Balances" + ).index; + + const instructionsNotExecuted = [ + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + weightLimit: { Limited: new BN(20000000000) }, + }, + }, + ]; + + const instructionsExecuted = [ + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 2 }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 2 }, + }, + weightLimit: { Limited: new BN(20000000000) }, + }, + }, + ]; + + const xcmMessageNotExecuted = { + V2: instructionsNotExecuted, + }; + const xcmMessageExecuted = { + V2: instructionsExecuted, + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessageNotExecuted: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessageNotExecuted + ) as any; + + const receivedMessageExecuted: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessageExecuted + ) as any; + + const totalMessageNotExecuted = [...xcmpFormat.toU8a(), ...receivedMessageNotExecuted.toU8a()]; + const totalMessageExecuted = [...xcmpFormat.toU8a(), ...receivedMessageExecuted.toU8a()]; + + const paraId = context.polkadotApi.createType("ParaId", 1) as any; + const sovereignAddress = u8aToHex( + new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) + ).padEnd(42, "0"); + + // We first fund each sovereign account with 100 + await expectOk( + context.createBlock(context.polkadotApi.tx.balances.transfer(sovereignAddress, 100n)) + ); + + // now we start injecting messages + // two for para 1 + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [1, totalMessageNotExecuted]); + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [1, totalMessageExecuted]); + + await context.createBlock(); + + // The balance of the sovereign account should be 98, as the first message does not executed + const balance = await context.polkadotApi.query.system.account(sovereignAddress); + expect(balance.data.free.toBigInt()).to.eq(98n); + }); +}); + +describeDevMoonbeam("Mock XCMP - test XCMP execution", (context) => { + it("Should test for three XCMP insertions, the channel gests suspended", async function () { + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => pallet.name === "Balances" + ).index; + + const instructionsNotExecuted = [ + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: 1 }, + }, + weightLimit: { Limited: new BN(20000000000) }, + }, + }, + ]; + + const xcmMessageNotExecuted = { + V2: instructionsNotExecuted, + }; + + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessageNotExecuted: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessageNotExecuted + ) as any; + + const totalMessageNotExecuted = [...xcmpFormat.toU8a(), ...receivedMessageNotExecuted.toU8a()]; + + const paraId = context.polkadotApi.createType("ParaId", 1) as any; + const sovereignAddress = u8aToHex( + new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) + ).padEnd(42, "0"); + + // We first fund each sovereign account with 100 + // we will only withdraw 1, so no problem on this + await expectOk( + context.createBlock(context.polkadotApi.tx.balances.transfer(sovereignAddress, 100n)) + ); + + const queueConfig = (await context.polkadotApi.query.xcmpQueue.queueConfig()) as any; + const suspendThreshold = queueConfig.suspendThreshold.toNumber(); + + // now we start injecting messages + for (let i = 0; i < suspendThreshold + 1; i++) { + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [1, totalMessageNotExecuted]); + } + + const result = await context.createBlock().catch((e) => e); + expect(result.toString()).to.eq( + "RpcError: 20000: Error at calling runtime api: " + + "Execution failed: Runtime panicked: assertion failed: mid <= self.len()" + ); + + // The balance of the sovereign account should be 100, as none of the messages got executed + const balance = await context.polkadotApi.query.system.account(sovereignAddress); + expect(balance.data.free.toBigInt()).to.eq(100n); + }); +}); + +describeDevMoonbeam("Mock XCM - receive horizontal suspend", (context) => { + const suspendedPara = 2023; + before("Should receive a suspend channel", async function () { + // We first simulate a reception for suspending a channel from parachain 1 + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "Signals" + ) as any; + const receivedMessage = context.polkadotApi.createType("u8", 0) as any; + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + // We will set a specific message knowing that it should mint the statemint asset + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [suspendedPara, totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + // assert channel with para 2023 is suspended + const status = await context.polkadotApi.query.xcmpQueue.outboundXcmpStatus(); + expect(status[0].state.isSuspended).to.be.true; + }); + + it("should push messages, and enqueue them in xcmp outbound queue", async function () { + // TARGET 100 messages + // We want to check there is no visible limit on these + + // Fragments are grouped together and stored in a message + // It is this message that we are going to store + // The easiest way to test it create a single message every block, + // with no other messages to append + + // We can create these with sudo + // The simplest message should do it + const xcmMessage = { + V2: [{ ClearOrigin: null as any }], + }; + + const messageToSend: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const destination = { + V1: { + parents: 1, + interior: { X1: { Parachain: suspendedPara } }, + }, + }; + + const versionedMult: XcmVersionedMultiLocation = context.polkadotApi.createType( + "XcmVersionedMultiLocation", + destination + ) as any; + + // We also need to trick parachain-system to pretend there exists + // an open channel with para id 2023. + // For channel params, we set the default in all of them except for the maxMessageSize + // We select MaxMessageSize = 4 because ClearOrigin involves 4 bytes + // This makes sure that each message is enqued in a different page + const paraHrmpMockerTx = mockHrmpChannelExistanceTx(context, suspendedPara, 8, 8192, 4); + + // Test for numMessages + const numMessages = 100; + + for (let i = 0; i < numMessages; i++) { + await expectOk( + context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.utility.batchAll([ + paraHrmpMockerTx, + context.polkadotApi.tx.polkadotXcm.send(versionedMult, messageToSend), + ]) + ) + ) + ); + } + + // expect that queued messages is equal to the number of sent messages + const queuedMessages = await context.polkadotApi.query.xcmpQueue.outboundXcmpMessages.entries(); + expect(queuedMessages).to.have.lengthOf(numMessages); + }); +}); diff --git a/tests/tests/test-xcm/test-mock-hrmp-transact-ethereum.ts b/tests/tests/test-xcm/test-mock-hrmp-transact-ethereum.ts new file mode 100644 index 0000000000..4321cb53ec --- /dev/null +++ b/tests/tests/test-xcm/test-mock-hrmp-transact-ethereum.ts @@ -0,0 +1,578 @@ +import "@moonbeam-network/api-augment"; + +import { KeyringPair } from "@polkadot/keyring/types"; +import { XcmpMessageFormat } from "@polkadot/types/interfaces"; +import { BN, u8aToHex } from "@polkadot/util"; +import { expect } from "chai"; + +import { generateKeyringPair } from "../../util/accounts"; +import { customWeb3Request } from "../../util/providers"; +import { descendOriginFromAddress, registerForeignAsset } from "../../util/xcm"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +import type { XcmVersionedXcm } from "@polkadot/types/lookup"; + +import { createContract } from "../../util/transactions"; + +import { expectOk } from "../../util/expect"; + +describeDevMoonbeam("Mock XCM - receive horizontal transact ETHEREUM (transfer)", (context) => { + let transferredBalance; + let sendingAddress; + let descendAddress; + let random: KeyringPair; + + before("Should receive transact action with DescendOrigin", async function () { + const { originAddress, descendOriginAddress } = descendOriginFromAddress(context); + sendingAddress = originAddress; + descendAddress = descendOriginAddress; + random = generateKeyringPair(); + transferredBalance = 10_000_000_000_000_000_000n; + + // We first fund parachain 2000 sovreign account + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(descendOriginAddress, transferredBalance) + ) + ); + const balance = ( + (await context.polkadotApi.query.system.account(descendOriginAddress)) as any + ).data.free.toBigInt(); + expect(balance).to.eq(transferredBalance); + }); + + it("Should receive transact and should be able to execute", async function () { + // Get Pallet balances index + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => { + return pallet.name === "Balances"; + } + ).index; + + const amountToTransfer = transferredBalance / 10n; + + const xcmTransactions = [ + { + V1: { + gas_limit: 21000, + fee_payment: { + Auto: { + Low: null, + }, + }, + action: { + Call: random.address, + }, + value: amountToTransfer, + input: [], + access_list: null, + }, + }, + { + V2: { + gas_limit: 21000, + action: { + Call: random.address, + }, + value: amountToTransfer, + input: [], + access_list: null, + }, + }, + ]; + + let expectedTransferredAmount = 0n; + let expectedTransferredAmountPlusFees = 0n; + + const targetXcmWeight = 925_000_000n; + const targetXcmFee = targetXcmWeight * 50_000n; + + for (const xcmTransaction of xcmTransactions) { + expectedTransferredAmount += amountToTransfer; + expectedTransferredAmountPlusFees += amountToTransfer + targetXcmFee; + // TODO need to update lookup types for xcm ethereum transaction V2 + const transferCall = context.polkadotApi.tx.ethereumXcm.transact(xcmTransaction); + const transferCallEncoded = transferCall?.method.toHex(); + + // We are going to test that we can receive a transact operation from parachain 1 + // using descendOrigin first + const xcmMessage = { + V2: [ + { + DescendOrigin: { + X1: { + AccountKey20: { + network: "Any", + key: sendingAddress, + }, + }, + }, + }, + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: targetXcmFee }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: targetXcmFee }, + }, + weightLimit: { Limited: targetXcmWeight }, + }, + }, + { + Transact: { + originType: "SovereignAccount", + requireWeightAtMost: new BN(525_000_000), // 21_000 gas limit + call: { + encoded: transferCallEncoded, + }, + }, + }, + ], + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + // We will set a specific message knowing that it should mint the statemint asset + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [1, totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + // Make sure the state has ALITH's foreign parachain tokens + const testAccountBalance = ( + await context.polkadotApi.query.system.account(random.address) + ).data.free.toBigInt(); + expect(testAccountBalance).to.eq(expectedTransferredAmount); + + // Make sure ALITH has been deducted fees once (in xcm-executor) and balance has been + // transfered through evm. + const alithAccountBalance = await context.web3.eth.getBalance(descendAddress); + expect(BigInt(alithAccountBalance)).to.eq( + transferredBalance - expectedTransferredAmountPlusFees + ); + } + }); +}); + +describeDevMoonbeam("Mock XCM - receive horizontal transact ETHEREUM (call)", (context) => { + let transferredBalance; + let sendingAddress; + let random: KeyringPair; + let contractDeployed; + + before("Should receive transact action with DescendOrigin and deploy", async function () { + const { contract, rawTx } = await createContract(context, "Incrementor"); + await expectOk(context.createBlock(rawTx)); + + contractDeployed = contract; + + const { originAddress, descendOriginAddress } = descendOriginFromAddress(context); + sendingAddress = originAddress; + random = generateKeyringPair(); + transferredBalance = 10_000_000_000_000_000_000n; + + // We first fund parachain 2000 sovreign account + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(descendOriginAddress, transferredBalance) + ) + ); + const balance = ( + (await context.polkadotApi.query.system.account(descendOriginAddress)) as any + ).data.free.toBigInt(); + expect(balance).to.eq(transferredBalance); + }); + + it("Should receive transact and should be able to execute", async function () { + // Get Pallet balances index + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => { + return pallet.name === "Balances"; + } + ).index; + + const xcmTransactions = [ + { + V1: { + gas_limit: 100000, + fee_payment: { + Auto: { + Low: null, + }, + }, + action: { + Call: contractDeployed.options.address, + }, + value: 0n, + input: contractDeployed.methods.incr().encodeABI().toString(), + access_list: null, + }, + }, + { + V2: { + gas_limit: 100000, + action: { + Call: contractDeployed.options.address, + }, + value: 0n, + input: contractDeployed.methods.incr().encodeABI().toString(), + access_list: null, + }, + }, + ]; + + let expectedCalls = 0n; + + for (const xcmTransaction of xcmTransactions) { + expectedCalls++; + + // TODO need to update lookup types for xcm ethereum transaction V2 + const transferCall = context.polkadotApi.tx.ethereumXcm.transact(xcmTransaction); + const transferCallEncoded = transferCall?.method.toHex(); + // We are going to test that we can receive a transact operation from parachain 1 + // using descendOrigin first + const xcmMessage = { + V2: [ + { + DescendOrigin: { + X1: { + AccountKey20: { + network: "Any", + key: sendingAddress, + }, + }, + }, + }, + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: transferredBalance / 2n }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: transferredBalance / 2n }, + }, + weightLimit: { Limited: new BN(4000000000) }, + }, + }, + { + Transact: { + originType: "SovereignAccount", + requireWeightAtMost: new BN(3000000000), + call: { + encoded: transferCallEncoded, + }, + }, + }, + ], + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + // We will set a specific message knowing that it should mint the statemint asset + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [1, totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + expect(await contractDeployed.methods.count().call()).to.eq(expectedCalls.toString()); + } + }); +}); + +describeDevMoonbeam("Mock XCM - receive horizontal transact ETHEREUM (asset fee)", (context) => { + const assetMetadata = { + name: "FOREIGN", + symbol: "FOREIGN", + decimals: new BN(12), + isFrozen: false, + }; + const statemint_para_id = 1001; + const statemint_assets_pallet_instance = 50; + const palletId = "0x6D6f646c617373746d6E67720000000000000000"; + + const ASSET_MULTILOCATION = { + parents: 1, + interior: { + X3: [ + { Parachain: statemint_para_id }, + { PalletInstance: statemint_assets_pallet_instance }, + { GeneralIndex: 0 }, + ], + }, + }; + + const STATEMINT_LOCATION = { + Xcm: ASSET_MULTILOCATION, + }; + + let assetId: string; + let sendingAddress; + let descendedAddress: string; + let random: KeyringPair; + let contractDeployed; + + const assetsToTransfer = 2_900_000_000n * 2n; + + before("Should Register an asset and set unit per sec", async function () { + const { contract, rawTx } = await createContract(context, "Incrementor"); + await expectOk(context.createBlock(rawTx)); + + contractDeployed = contract; + + const { originAddress, descendOriginAddress } = descendOriginFromAddress(context); + sendingAddress = originAddress; + descendedAddress = descendOriginAddress; + random = generateKeyringPair(); + + // registerForeignAsset + const { registeredAssetId, events, registeredAsset } = await registerForeignAsset( + context, + STATEMINT_LOCATION, + assetMetadata, + 1_000_000_000_000 + ); + assetId = registeredAssetId; + expect(events[1].event.method.toString()).to.eq("UnitsPerSecondChanged"); + expect(events[4].event.method.toString()).to.eq("ExtrinsicSuccess"); + expect(registeredAsset.owner.toHex()).to.eq(palletId.toLowerCase()); + + // Deposit asset + let xcmMessage = { + V2: [ + { + ReserveAssetDeposited: [ + { + id: { + Concrete: ASSET_MULTILOCATION, + }, + fun: { Fungible: assetsToTransfer + 400_000_000n }, + }, + ], + }, + { ClearOrigin: null as any }, + { + BuyExecution: { + fees: { + id: { + Concrete: ASSET_MULTILOCATION, + }, + fun: { Fungible: assetsToTransfer + 400_000_000n }, + }, + weightLimit: { Limited: new BN(400_000_000) }, + }, + }, + { + DepositAsset: { + assets: { Wild: "All" }, + maxAssets: new BN(1), + beneficiary: { + parents: 0, + interior: { X1: { AccountKey20: { network: "Any", key: descendOriginAddress } } }, + }, + }, + }, + ], + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + // We will set a specific message knowing that it should mint the statemint asset + const r = await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [ + statemint_para_id, + totalMessage, + ]); + // Create a block in which the XCM will be executed + await context.createBlock(); + // Make sure descended address has the transferred foreign assets (minus the xcm fees). + expect( + (await context.polkadotApi.query.assets.account(assetId, descendedAddress)) + .unwrap() + .balance.toBigInt() + ).to.eq(assetsToTransfer); + }); + + it("Should receive transact and should be able to execute", async function () { + const xcmTransactions = [ + { + V1: { + gas_limit: 100000, + fee_payment: { + Auto: { + Low: null, + }, + }, + action: { + Call: contractDeployed.options.address, + }, + value: 0n, + input: contractDeployed.methods.incr().encodeABI().toString(), + access_list: null, + }, + }, + { + V2: { + gas_limit: 100000, + action: { + Call: contractDeployed.options.address, + }, + value: 0n, + input: contractDeployed.methods.incr().encodeABI().toString(), + access_list: null, + }, + }, + ]; + + let expectedCalls = 0n; + + for (const xcmTransaction of xcmTransactions) { + expectedCalls++; + + // TODO need to update lookup types for xcm ethereum transaction V2 + const transferCall = context.polkadotApi.tx.ethereumXcm.transact(xcmTransaction); + const transferCallEncoded = transferCall?.method.toHex(); + // We are going to test that we can receive a transact operation from parachain 1 + // using descendOrigin first + const xcmMessage = { + V2: [ + { + DescendOrigin: { + X1: { + AccountKey20: { + network: "Any", + key: sendingAddress, + }, + }, + }, + }, + { + WithdrawAsset: [ + { + id: { + Concrete: ASSET_MULTILOCATION, + }, + fun: { Fungible: assetsToTransfer / 2n }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: ASSET_MULTILOCATION, + }, + fun: { Fungible: assetsToTransfer / 2n }, + }, + weightLimit: { Limited: assetsToTransfer / 2n }, + }, + }, + { + Transact: { + originType: "SovereignAccount", + requireWeightAtMost: new BN(2_500_000_000), // 100_000 gas + call: { + encoded: transferCallEncoded, + }, + }, + }, + ], + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + // We will set a specific message knowing that it should mint the statemint asset + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [1, totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + expect(await contractDeployed.methods.count().call()).to.eq(expectedCalls.toString()); + } + // Make sure descended address went below existential deposit and was killed + expect((await context.polkadotApi.query.assets.account(assetId, descendedAddress)).isNone).to.be + .true; + // Even if the account does not exist in assets aymore, we still have a nonce 1. Reason is: + // - First transact withdrew 1/2 of assets, nonce was increased to 1. + // - Second transact withdrew the last 1/2 of assets, account was reaped and zeroed. + // - The subsequent evm execution increased the nonce to 1, even without sufficient references. + // We can expect this to be the behaviour on any xcm fragment that completely drains an account + // to transact ethereum-xcm after. + let nonce = await context.web3.eth.getTransactionCount(descendedAddress); + expect(nonce).to.be.eq(1); + }); +}); diff --git a/tests/tests/test-xcm/test-mock-hrmp-transact.ts b/tests/tests/test-xcm/test-mock-hrmp-transact.ts new file mode 100644 index 0000000000..01cdff13be --- /dev/null +++ b/tests/tests/test-xcm/test-mock-hrmp-transact.ts @@ -0,0 +1,135 @@ +import "@moonbeam-network/api-augment"; + +import { KeyringPair } from "@polkadot/keyring/types"; +import { XcmpMessageFormat } from "@polkadot/types/interfaces"; +import { BN, u8aToHex } from "@polkadot/util"; +import { expect } from "chai"; + +import { generateKeyringPair } from "../../util/accounts"; +import { customWeb3Request } from "../../util/providers"; +import { descendOriginFromAddress } from "../../util/xcm"; + +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +import type { XcmVersionedXcm } from "@polkadot/types/lookup"; + +import { expectOk } from "../../util/expect"; + +describeDevMoonbeam("Mock XCM - receive horizontal transact", (context) => { + let transferredBalance; + let sendingAddress; + let random: KeyringPair; + + before("Should receive transact action with DescendOrigin", async function () { + const { originAddress, descendOriginAddress } = descendOriginFromAddress(context); + sendingAddress = originAddress; + random = generateKeyringPair(); + transferredBalance = 10_000_000_000_000_000_000n; + + await expectOk( + context.createBlock( + context.polkadotApi.tx.balances.transfer(descendOriginAddress, transferredBalance) + ) + ); + const balance = ( + (await context.polkadotApi.query.system.account(descendOriginAddress)) as any + ).data.free.toBigInt(); + expect(balance).to.eq(transferredBalance); + }); + + it("Should receive transact and should be able to execute ", async function () { + // Get Pallet balances index + const metadata = await context.polkadotApi.rpc.state.getMetadata(); + const balancesPalletIndex = (metadata.asLatest.toHuman().pallets as Array).find( + (pallet) => { + return pallet.name === "Balances"; + } + ).index; + + const transferCall = context.polkadotApi.tx.balances.transfer( + random.address, + transferredBalance / 10n + ); + const transferCallEncoded = transferCall?.method.toHex(); + // We are going to test that we can receive a transact operation from parachain 1 + // using descendOrigin first + const xcmMessage = { + V2: [ + { + DescendOrigin: { + X1: { + AccountKey20: { + network: "Any", + key: sendingAddress, + }, + }, + }, + }, + { + WithdrawAsset: [ + { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: transferredBalance / 2n }, + }, + ], + }, + { + BuyExecution: { + fees: { + id: { + Concrete: { + parents: 0, + interior: { + X1: { PalletInstance: balancesPalletIndex }, + }, + }, + }, + fun: { Fungible: transferredBalance / 2n }, + }, + weightLimit: { Limited: new BN(4000000000) }, + }, + }, + { + Transact: { + originType: "SovereignAccount", + requireWeightAtMost: new BN(1000000000), + call: { + encoded: transferCallEncoded, + }, + }, + }, + ], + }; + const xcmpFormat: XcmpMessageFormat = context.polkadotApi.createType( + "XcmpMessageFormat", + "ConcatenatedVersionedXcm" + ) as any; + + const receivedMessage: XcmVersionedXcm = context.polkadotApi.createType( + "XcmVersionedXcm", + xcmMessage + ) as any; + + const totalMessage = [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; + // Send RPC call to inject XCM message + // We will set a specific message knowing that it should mint the statemint asset + await customWeb3Request(context.web3, "xcm_injectHrmpMessage", [1, totalMessage]); + + // Create a block in which the XCM will be executed + await context.createBlock(); + + // Make sure the state has ALITH's foreign parachain tokens + const testAccountBalance = ( + await context.polkadotApi.query.system.account(random.address) + ).data.free.toBigInt(); + + expect(testAccountBalance).to.eq(transferredBalance / 10n); + }); +}); diff --git a/tests/tests/test-xcm/test-xcm-transactor.ts b/tests/tests/test-xcm/test-xcm-transactor.ts new file mode 100644 index 0000000000..fd87a7d416 --- /dev/null +++ b/tests/tests/test-xcm/test-xcm-transactor.ts @@ -0,0 +1,22 @@ +import "@moonbeam-network/api-augment"; + +import { expect } from "chai"; + +import { alith } from "../../util/accounts"; +import { describeDevMoonbeam } from "../../util/setup-dev-tests"; + +describeDevMoonbeam("Precompiles - xcm transactor", (context) => { + before("Setup genesis account and relay accounts", async () => { + // register index 0 for Alith + await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.xcmTransactor.register(alith.address, 0) + ) + ); + }); + + it("allows to retrieve index through precompiles", async function () { + const resp = await context.polkadotApi.query.xcmTransactor.indexToAccount(0); + expect(resp.toString()).to.eq(alith.address); + }); +}); diff --git a/tests/tools/index.d.ts b/tests/tools/index.d.ts new file mode 100644 index 0000000000..139c150970 --- /dev/null +++ b/tests/tools/index.d.ts @@ -0,0 +1,3 @@ +declare module "tcp-port-used"; +declare module "ChaCharand"; +declare module "solc"; diff --git a/tests/tools/pre-build-contracts.ts b/tests/tools/pre-build-contracts.ts new file mode 100644 index 0000000000..eff79781da --- /dev/null +++ b/tests/tools/pre-build-contracts.ts @@ -0,0 +1,145 @@ +import solc from "solc"; +import chalk from "chalk"; +import fs from "fs/promises"; +import path from "path"; +import { Compiled } from "../util/contracts"; + +let sourceByReference = {} as { [ref: string]: string }; +let refByContract = {} as { [contract: string]: string }; + +function getImports(dependency: string) { + if (sourceByReference[dependency]) { + return { contents: sourceByReference[dependency] }; + } + return { error: "Source not found" }; +} + +function compileSolidity(contractContent: string): { [name: string]: Compiled } { + const result = JSON.parse( + solc.compile( + JSON.stringify({ + language: "Solidity", + sources: { + "main.sol": { + content: contractContent, + }, + }, + settings: { + outputSelection: { + "*": { + "*": ["*"], + }, + }, + }, + }), + { import: getImports } + ) + ); + if (!result.contracts) { + throw result; + } + return Object.keys(result.contracts["main.sol"]).reduce((p, contractName) => { + p[contractName] = { + byteCode: "0x" + result.contracts["main.sol"][contractName].evm.bytecode.object, + contract: result.contracts["main.sol"][contractName], + sourceCode: contractContent, + }; + return p; + }, {} as { [name: string]: Compiled }); +} + +// Shouldn't be run concurrently with the same 'name' +async function compile(fileRef: string): Promise<{ [name: string]: Compiled }> { + const soliditySource = sourceByReference[fileRef]; + if (!soliditySource) { + throw new Error(`Missing solidity file: ${fileRef}`); + } + const compiledContracts = compileSolidity(soliditySource); + + console.debug(`Processing file: ${fileRef}`); + await Promise.all( + Object.keys(compiledContracts).map(async (contractName) => { + if (refByContract[contractName]) { + console.warn( + chalk.red( + `Contract ${contractName} already exist from ` + + `${refByContract[contractName]}. ` + + `Erasing previous version` + ) + ); + } + await fs.mkdir(`contracts/compiled`, { recursive: true }); + await fs.writeFile( + `./contracts/compiled/${contractName}.json`, + JSON.stringify(compiledContracts[contractName]), + { + flag: "w", + } + ); + console.log(` - ${chalk.green(`${contractName}.json`)} file has been saved!`); + refByContract[contractName] = fileRef; + }) + ); + return compiledContracts; +} + +async function getFiles(dir) { + const subdirs = await fs.readdir(dir); + const files = await Promise.all( + subdirs.map(async (subdir) => { + const res = path.resolve(dir, subdir); + return (await fs.stat(res)).isDirectory() ? getFiles(res) : res; + }) + ); + return files.reduce((a, f) => a.concat(f), []); +} + +const main = async () => { + const precompilesPath = path.join(__dirname, "../../precompiles"); + // Order is important so precompiles are available first + const contractSourcePaths = [ + ...(await fs.readdir(precompilesPath)).map((filename) => ({ + filepath: path.join(precompilesPath, filename), + // Solidity import removes the "../../.." when searching for imports + importPath: /precompiles.*/.exec(path.join(precompilesPath, filename))[0], + })), + { + filepath: path.join(__dirname, "../contracts/solidity"), + importPath: "", // Reference in contracts are local + }, + ]; + + for (const contractPath of contractSourcePaths) { + const contracts = (await getFiles(contractPath.filepath)).filter((filename) => + filename.endsWith(".sol") + ); + for (let filepath of contracts) { + const ref = filepath + .replace(contractPath.filepath, contractPath.importPath) + .replace(/^\//, ""); + sourceByReference[ref] = (await fs.readFile(filepath)).toString(); + } + } + + // Compile contracts + for (const ref of Object.keys(sourceByReference)) { + try { + await compile(ref); + } catch (e) { + console.log(`Failed to compile: ${ref}`); + if (e.errors) { + e.errors.forEach((error) => { + console.log(error.formattedMessage); + }); + } else { + console.log(e); + } + process.exit(1); + } + } + + // Forcing exit to avoid solc maintaining the process + process.exit(0); +}; + +main(); diff --git a/tests/tracing-tests/test-trace-concurrency.ts b/tests/tracing-tests/test-trace-concurrency.ts index f05d621d8e..95f97a58cf 100644 --- a/tests/tracing-tests/test-trace-concurrency.ts +++ b/tests/tracing-tests/test-trace-concurrency.ts @@ -1,22 +1,24 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; import { createContract, createContractExecution } from "../util/transactions"; -describeDevMoonbeamAllEthTxTypes("Trace filter - Concurrency", (context) => { +describeDevMoonbeam("Trace filter - Concurrency", (context) => { before("Setup: Create 50 blocks with 1 contract loop execution each", async function () { - const { contract, rawTx } = await createContract(context, "FiniteLoopContract"); - await context.createBlock({ transactions: [rawTx] }); + this.timeout(180000); + const { contract, rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); for (let i = 0; i < 50; i++) { - await context.createBlock({ - transactions: [ - await createContractExecution(context, { - contract, - contractCall: contract.methods.incr(2000), - }), - ], - }); + await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.incrementalLoop(2000), + }) + ); } }); @@ -24,8 +26,7 @@ describeDevMoonbeamAllEthTxTypes("Trace filter - Concurrency", (context) => { // It will start a slow query (taking 1s) and will try to execute a fast one after to see if it // goes through or wait for the first one to finish it.skip("should allow concurrent execution", async function () { - this.timeout(10000); - const queryRange = async (range, index) => { + const queryRange = async (range: number, index: number) => { const start = Date.now(); await customWeb3Request(context.web3, "trace_filter", [ { diff --git a/tests/tracing-tests/test-trace-filter-reorg.ts b/tests/tracing-tests/test-trace-filter-reorg.ts index 409b366ee9..d205954e29 100644 --- a/tests/tracing-tests/test-trace-filter-reorg.ts +++ b/tests/tracing-tests/test-trace-filter-reorg.ts @@ -1,32 +1,33 @@ -import { expect } from "chai"; +import "@moonbeam-network/api-augment"; + +import { generateKeyringPair } from "../util/accounts"; import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { createContract, createContractExecution, createTransfer } from "../util/transactions"; -import { GENESIS_ACCOUNT, TEST_ACCOUNT } from "../util/constants"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; +import { createTransfer } from "../util/transactions"; -describeDevMoonbeamAllEthTxTypes("Trace filter reorg", (context) => { +describeDevMoonbeam("Trace filter reorg", (context) => { it("succesfully reorg", async function () { + const randomAccount = generateKeyringPair(); this.timeout(150000000); // Create a first base block. - const block1 = await context.createBlock({}); + const block1 = await context.createBlock([], {}); // Create a first branch including a transaction. - const tx = await createTransfer(context, TEST_ACCOUNT, "0x200"); // nonce 0 - const block2 = await context.createBlock({ + await context.createBlock(createTransfer(context, randomAccount.address, "0x200"), { parentHash: block1.block.hash, finalize: false, - transactions: [tx], }); // Contains nonce 0. - // Create a branch. - const tx2 = await createTransfer(context, TEST_ACCOUNT, "0x300", { nonce: 1 }); // nonce 1 - const block2a = await context.createBlock({ - parentHash: block1.block.hash, - finalize: false, - transactions: [tx2], - }); + // Create a branch. // nonce 1 + const block2a = await context.createBlock( + createTransfer(context, randomAccount.address, "0x300", { nonce: 1 }), + { + parentHash: block1.block.hash, + finalize: false, + } + ); // Contains nonce 1. // Continue this new branch, it reorgs. @@ -35,33 +36,33 @@ describeDevMoonbeamAllEthTxTypes("Trace filter reorg", (context) => { // extrinsics into the pool. // // This block however will contain the transaction with nonce 1 but the - // chain don't expect this nonce so the the Ethereum transaction in not executed. However it is - // still in the list of extrinsics for this block. - const block3a = await context.createBlock({ + // chain don't expect this nonce so the the Ethereum transaction in not executed. + // However it is still in the list of extrinsics for this block. + const block3a = await context.createBlock([], { parentHash: block2a.block.hash, finalize: false, }); // Contains nonce 1 again !. // Additionnal blocks. - const block4a = await context.createBlock({ + const block4a = await context.createBlock([], { parentHash: block3a.block.hash, finalize: true, }); // Contains nonce 0. - const block5a = await context.createBlock({ + const block5a = await context.createBlock([], { parentHash: block4a.block.hash, finalize: true, }); // Contains nonce 1. - const block6a = await context.createBlock({ + const block6a = await context.createBlock([], { parentHash: block5a.block.hash, finalize: true, }); - await context.createBlock({ + await context.createBlock([], { parentHash: block6a.block.hash, finalize: true, }); diff --git a/tests/tracing-tests/test-trace-filter.ts b/tests/tracing-tests/test-trace-filter.ts index d728d47315..a389af5fab 100644 --- a/tests/tracing-tests/test-trace-filter.ts +++ b/tests/tracing-tests/test-trace-filter.ts @@ -1,38 +1,40 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + +import { alith, ALITH_ADDRESS, ALITH_CONTRACT_ADDRESSES } from "../util/accounts"; import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; import { createContract, createContractExecution } from "../util/transactions"; -import { GENESIS_ACCOUNT } from "../util/constants"; const GENESIS_CONTRACT_ADDRESSES = [ - "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a", - "0x42e2ee7ba8975c473157634ac2af4098190fc741", - "0xf8cef78e923919054037a1d03662bbd884ff4edf", + ALITH_CONTRACT_ADDRESSES[0], + ALITH_CONTRACT_ADDRESSES[2], + ALITH_CONTRACT_ADDRESSES[3], ]; -describeDevMoonbeamAllEthTxTypes("Trace filter - Contract creation ", (context) => { +describeDevMoonbeam("Trace filter - Contract creation ", (context) => { before("Setup: Create 4 blocks with TraceFilter contracts", async function () { const { contract, rawTx } = await createContract(context, "TraceFilter", {}, [false]); - await context.createBlock({ transactions: [rawTx] }); + await context.createBlock(rawTx); - const { rawTx: rawTx2 } = await createContract(context, "TraceFilter", {}, [true]); - await context.createBlock({ transactions: [rawTx2] }); + const { rawTx: rawTx2 } = await createContract(context, "TraceFilter", { gas: 90_000 }, [true]); + + await context.createBlock([rawTx2]); const { rawTx: rawTx3 } = await createContract(context, "TraceFilter", {}, [false]); const { rawTx: rawTx4 } = await createContract(context, "TraceFilter", { nonce: 3 }, [false]); - await context.createBlock({ transactions: [rawTx3, rawTx4] }); - - await context.createBlock({ - transactions: [ - await createContractExecution(context, { - contract, - contractCall: contract.methods.subcalls( - GENESIS_CONTRACT_ADDRESSES[1], - GENESIS_CONTRACT_ADDRESSES[2] - ), - }), - ], - }); + await context.createBlock([rawTx3, rawTx4]); + + await context.createBlock( + createContractExecution(context, { + contract, + contractCall: contract.methods.subcalls( + GENESIS_CONTRACT_ADDRESSES[1], + GENESIS_CONTRACT_ADDRESSES[2] + ), + }) + ); }); it("should be able to replay deployed contract", async function () { @@ -48,13 +50,13 @@ describeDevMoonbeamAllEthTxTypes("Trace filter - Contract creation ", (context) expect(response.result.length).to.equal(1); expect(response.result[0].action).to.include({ creationMethod: "create", - from: "0x6be02d1d3665660d22ff9624b7be0551ee1ac91b", - gas: "0xb60b27", + from: ALITH_ADDRESS, + gas: "0x6bdea", value: "0x0", }); expect(response.result[0].result).to.include({ - address: "0xc2bf5f29a4384b1ab0c063e1c666f02121b6084a", - gasUsed: "0x10fd9", // TODO : Compare with value from another (comparable) network. + address: ALITH_CONTRACT_ADDRESSES[0].toLocaleLowerCase(), + gasUsed: "0x159c6", // TODO : Compare with value from another (comparable) network. }); expect(response.result[0]).to.include({ @@ -79,8 +81,8 @@ describeDevMoonbeamAllEthTxTypes("Trace filter - Contract creation ", (context) expect(response.result.length).to.equal(1); expect(response.result[0].action.creationMethod).to.equal("create"); - expect(response.result[0].action.from).to.equal("0x6be02d1d3665660d22ff9624b7be0551ee1ac91b"); - expect(response.result[0].action.gas).to.equal("0xb60bd0"); + expect(response.result[0].action.from).to.equal(ALITH_ADDRESS); + expect(response.result[0].action.gas).to.equal("0x758"); expect(response.result[0].action.init).to.be.a("string"); expect(response.result[0].action.value).to.equal("0x0"); expect(response.result[0].blockHash).to.be.a("string"); @@ -172,7 +174,7 @@ describeDevMoonbeamAllEthTxTypes("Trace filter - Contract creation ", (context) { fromBlock: "0x03", toBlock: "0x04", - fromAddress: [GENESIS_ACCOUNT], + fromAddress: [alith.address], }, ]); diff --git a/tests/tracing-tests/test-trace-gas.ts b/tests/tracing-tests/test-trace-gas.ts index 1b85f26f6a..352e9bb6c8 100644 --- a/tests/tracing-tests/test-trace-gas.ts +++ b/tests/tracing-tests/test-trace-gas.ts @@ -1,45 +1,50 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; + import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; +import { describeDevMoonbeam } from "../util/setup-dev-tests"; import { createContract, createContractExecution } from "../util/transactions"; -describeDevMoonbeamAllEthTxTypes("Trace filter - Gas Loop", (context) => { +describeDevMoonbeam("Trace filter - Gas Loop", (context) => { const testLoops: { count: number; txHash?: string; blockNumber?: number; expectedGas: number; }[] = [ - { count: 0, expectedGas: 21630 }, - { count: 100, expectedGas: 108242 }, - { count: 1000, expectedGas: 670654 }, + { count: 0, expectedGas: 21652 }, + { count: 100, expectedGas: 108264 }, + { count: 1000, expectedGas: 670676 }, ]; before("Setup: Create 4 blocks with 1 contract loop execution each", async function () { - const { contract, rawTx } = await createContract(context, "FiniteLoopContract"); - await context.createBlock({ transactions: [rawTx] }); + const { contract, rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); // For each loop, create a block with the contract execution. // 1 block is create for each so it is easier to select the execution using trace_filter // by specifying the fromBlock and toBlock for (let i = 0; i < testLoops.length; i++) { const loop = testLoops[i]; - const { txResults } = await context.createBlock({ - transactions: [ - await createContractExecution(context, { + const { result } = await context.createBlock( + createContractExecution( + context, + { contract, - contractCall: contract.methods.incr(loop.count), - }), - ], - }); - loop.txHash = txResults[0].result; + contractCall: contract.methods.incrementalLoop(loop.count), + }, + { gas: 3_000_000 } + ) + ); + loop.txHash = result.hash; loop.blockNumber = i + 2; } }); it("should return 21630 gasUsed for 0 loop", async function () { - const { rawTx } = await createContract(context, "FiniteLoopContract"); - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); const trace = await customWeb3Request(context.web3, "trace_filter", [ { @@ -55,8 +60,8 @@ describeDevMoonbeamAllEthTxTypes("Trace filter - Gas Loop", (context) => { }); it("should return 245542 gasUsed for 100 loop", async function () { - const { rawTx } = await createContract(context, "FiniteLoopContract"); - await context.createBlock({ transactions: [rawTx] }); + const { rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); const trace = await customWeb3Request(context.web3, "trace_filter", [ { @@ -72,8 +77,9 @@ describeDevMoonbeamAllEthTxTypes("Trace filter - Gas Loop", (context) => { }); it("should return 2068654 gasUsed for 1000 loop", async function () { - const { rawTx } = await createContract(context, "FiniteLoopContract"); - await context.createBlock({ transactions: [rawTx] }); + this.timeout(12000); + const { rawTx } = await createContract(context, "Looper", { gas: 3_000_000 }); + await context.createBlock(rawTx); const trace = await customWeb3Request(context.web3, "trace_filter", [ { diff --git a/tests/tracing-tests/test-trace.ts b/tests/tracing-tests/test-trace.ts index 7b9ec679d1..eb07eb02bf 100644 --- a/tests/tracing-tests/test-trace.ts +++ b/tests/tracing-tests/test-trace.ts @@ -1,32 +1,38 @@ +import "@moonbeam-network/api-augment"; + import { expect } from "chai"; -import { customWeb3Request } from "../util/providers"; -import { describeDevMoonbeam, describeDevMoonbeamAllEthTxTypes } from "../util/setup-dev-tests"; -import { ALITH, GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "../util/constants"; -import { createContract } from "../util/transactions"; import { ethers } from "ethers"; +import { Contract } from "web3-eth-contract"; + +import { alith, ALITH_PRIVATE_KEY, baltathar } from "../util/accounts"; import { getCompiled } from "../util/contracts"; +import { customWeb3Request } from "../util/providers"; +import { + describeDevMoonbeam, + describeDevMoonbeamAllEthTxTypes, + DevTestContext, +} from "../util/setup-dev-tests"; +import { createContract } from "../util/transactions"; const BS_TRACER = require("../util/tracer/blockscout_tracer.min.json"); const BS_TRACER_V2 = require("../util/tracer/blockscout_tracer_v2.min.json"); -async function createContracts(context) { - let nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); +async function createContracts(context: DevTestContext) { + let nonce = await context.web3.eth.getTransactionCount(alith.address); const { contract: callee, rawTx: rawTx1 } = await createContract( context, - "Callee", + "TraceCallee", { nonce: nonce++ }, [] ); const { contract: caller, rawTx: rawTx2 } = await createContract( context, - "Caller", + "TraceCaller", { nonce: nonce++ }, [] ); - await context.createBlock({ - transactions: [rawTx1, rawTx2], - }); + await context.createBlock([rawTx1, rawTx2]); return { caller: caller, @@ -36,22 +42,28 @@ async function createContracts(context) { }; } -async function nestedCall(context, caller, callerAddr, calleeAddr, nonce) { +async function nestedCall( + context: DevTestContext, + caller: Contract, + callerAddr: string, + calleeAddr: string, + nonce: number +) { let callTx = await context.web3.eth.accounts.signTransaction( { - from: GENESIS_ACCOUNT, + from: alith.address, to: callerAddr, gas: "0x100000", value: "0x00", data: caller.methods.someAction(calleeAddr, 6).encodeABI(), // calls callee nonce: nonce, }, - GENESIS_ACCOUNT_PRIVATE_KEY + ALITH_PRIVATE_KEY ); return await customWeb3Request(context.web3, "eth_sendRawTransaction", [callTx.rawTransaction]); } -async function nestedSingle(context) { +async function nestedSingle(context: DevTestContext) { const contracts = await createContracts(context); return await nestedCall( context, @@ -62,6 +74,7 @@ async function nestedSingle(context) { ); } +// TODO: Refactor dependent tests describeDevMoonbeam( "Trace", (context) => { @@ -70,42 +83,38 @@ describeDevMoonbeam( // Previously exhausted Wasm memory allocation: // Thread 'tokio-runtime-worker' panicked at 'Failed to allocate memory: // "Allocator ran out of space"'. - // TODO: raw tracing is temporary disabled - it.skip("should not overflow Wasm memory", async function () { - this.timeout(15000); - const { contract, rawTx } = await createContract(context, "OverflowingTrace", {}, [false]); - const { txResults } = await context.createBlock({ - transactions: [rawTx], - }); - let receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); - let nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + it("should prevent Wasm memory overflow", async function () { + const { contract, rawTx } = await createContract(context, "TraceFilter", {}, [false]); + const { + result: { hash: hash1 }, + } = await context.createBlock(rawTx); + let receipt = await context.web3.eth.getTransactionReceipt(hash1); + let nonce = await context.web3.eth.getTransactionCount(alith.address); // Produce a +58,000 step trace. let callTx = await context.web3.eth.accounts.signTransaction( { - from: GENESIS_ACCOUNT, + from: alith.address, to: receipt.contractAddress, gas: "0x100000", value: "0x00", nonce: nonce, data: contract.methods.set_and_loop(10).encodeABI(), }, - GENESIS_ACCOUNT_PRIVATE_KEY + ALITH_PRIVATE_KEY + ); + const { + result: { hash: hash2 }, + } = await context.createBlock(callTx.rawTransaction); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [hash2]); + expect((trace.error as any).message).to.equal( + "replayed transaction generated too much data. try disabling memory or storage?" ); - const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - callTx.rawTransaction, - ]); - await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [data.result]); - expect(trace.result.stepLogs.length).to.equal(58219); }); - // TODO: raw tracing is temporary disabled - it.skip("should replay over an intermediate state", async function () { - const { contract, rawTx } = await createContract(context, "Incrementer", {}, [false]); - const { txResults } = await context.createBlock({ - transactions: [rawTx], - }); - let receipt = await context.web3.eth.getTransactionReceipt(txResults[0].result); + it("should replay over an intermediate state", async function () { + const { contract, rawTx } = await createContract(context, "Incrementor"); + const { result } = await context.createBlock(rawTx); + let receipt = await context.web3.eth.getTransactionReceipt(result.hash); // In our case, the total number of transactions == the max value of the incrementer. // If we trace the last transaction of the block, should return the total number of @@ -117,19 +126,19 @@ describeDevMoonbeam( const totalTxs = 10; let targets = [1, 2, 5, 8, 10]; let txs = []; - let nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); + let nonce = await context.web3.eth.getTransactionCount(alith.address); // Create 10 transactions in a block. for (let numTxs = nonce; numTxs <= nonce + totalTxs; numTxs++) { let callTx = await context.web3.eth.accounts.signTransaction( { - from: GENESIS_ACCOUNT, + from: alith.address, to: receipt.contractAddress, gas: "0x100000", value: "0x00", nonce: numTxs, - data: contract.methods.sum(1).encodeABI(), // increments by one + data: contract.methods.incr(1).encodeABI(), // increments by one }, - GENESIS_ACCOUNT_PRIVATE_KEY + ALITH_PRIVATE_KEY ); const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ @@ -154,8 +163,7 @@ describeDevMoonbeam( } }); - // TODO: raw tracing is temporary disabled - it.skip("should trace nested contract calls", async function () { + it("should trace nested contract calls", async function () { const send = await nestedSingle(context); await context.createBlock(); let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [send.result]); @@ -213,13 +221,14 @@ describeDevMoonbeam( }); }, "Legacy", + "moonbase", true ); describeDevMoonbeamAllEthTxTypes( "Trace blockscout v2", (context) => { - it("should format as request (Blockscout v2)", async function () { + it("should format as request", async function () { const send = await nestedSingle(context); await context.createBlock(); let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ @@ -241,243 +250,155 @@ describeDevMoonbeamAllEthTxTypes( true ); -describeDevMoonbeamAllEthTxTypes("Trace (Blockscout v2)", (context) => { - it("should trace correctly out of gas transaction execution (Blockscout v2)", async function () { - this.timeout(10000); - - const { contract, rawTx } = await createContract(context, "InfiniteContract"); - await context.createBlock({ transactions: [rawTx] }); - - let callTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: contract.options.address, - gas: "0x100000", - value: "0x00", - data: "0x5bec9e67", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - callTx.rawTransaction, - ]); - await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ - data.result, - { tracer: BS_TRACER_V2.body }, - ]); - - expect(trace.result.length).to.be.eq(1); - expect(trace.result[0].error).to.be.equal("out of gas"); - }); - - it("should trace correctly precompiles (Blockscout v2)", async function () { - this.timeout(10000); - - let callTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: "0x0000000000000000000000000000000000000801", - gas: "0xdb3b", - value: "0x0", - data: "0x4e71d92d", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - callTx.rawTransaction, - ]); - await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ - data.result, - { tracer: BS_TRACER_V2.body }, - ]); - - expect(trace.result.length).to.be.eq(1); - }); -}); - -describeDevMoonbeam("Trace", (context) => { - it("should trace correctly out of gas transaction execution (Blockscout)", async function () { - this.timeout(10000); - - const { contract, rawTx } = await createContract(context, "InfiniteContract"); - await context.createBlock({ transactions: [rawTx] }); +// TODO: Refactor dependent tests +describeDevMoonbeamAllEthTxTypes( + "Trace (Blockscout v2)", + (context) => { + it("should trace correctly out of gas transaction execution", async function () { + const { contract, rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); - let callTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: contract.options.address, - gas: "0x100000", - value: "0x00", - data: "0x5bec9e67", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - callTx.rawTransaction, - ]); - await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ - data.result, - { tracer: BS_TRACER.body }, - ]); + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: contract.options.address, + gas: "0x100000", + value: "0x00", + data: "0x5bec9e67", + }, + ALITH_PRIVATE_KEY + ); + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ + data.result, + { tracer: BS_TRACER_V2.body }, + ]); - expect(trace.result.length).to.be.eq(1); - expect(trace.result[0].error).to.be.equal("out of gas"); - }); + expect(trace.result.length).to.be.eq(1); + expect(trace.result[0].error).to.be.equal("out of gas"); + }); - it("should trace correctly precompiles (Blockscout)", async function () { - this.timeout(10000); + it("should trace correctly precompiles", async function () { + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: "0x0000000000000000000000000000000000000801", + gas: "0xdb3b", + value: "0x0", + data: "0x4e71d92d", + }, + ALITH_PRIVATE_KEY + ); + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ + data.result, + { tracer: BS_TRACER_V2.body }, + ]); - let callTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: "0x0000000000000000000000000000000000000801", - gas: "0xdb3b", - value: "0x0", - data: "0x4e71d92d", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - callTx.rawTransaction, - ]); - await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ - data.result, - { tracer: BS_TRACER.body }, - ]); + expect(trace.result.length).to.be.eq(1); + }); + }, + true +); - expect(trace.result.length).to.be.eq(1); - }); +describeDevMoonbeam( + "Trace (Blockscout)", + (context) => { + it("should trace correctly out of gas transaction execution", async function () { + const { contract, rawTx } = await createContract(context, "Looper"); + await context.createBlock(rawTx); - it("should trace correctly transfers (raw)", async function () { - this.timeout(10000); + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: contract.options.address, + gas: "0x100000", + value: "0x00", + data: "0x5bec9e67", + }, + ALITH_PRIVATE_KEY + ); + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ + data.result, + { tracer: BS_TRACER.body }, + ]); - let callTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - // arbitrary (non-contract) address to transfer to - to: ALITH, - gas: "0xdb3b", - value: "0x10000000", - data: "0x", - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); - const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - callTx.rawTransaction, - ]); - await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [data.result]); + expect(trace.result.length).to.be.eq(1); + expect(trace.result[0].error).to.be.equal("out of gas"); + }); - expect(trace.result.gas).to.be.eq("0x5208"); // 21_000 gas for a transfer. - }); -}); + it("should trace correctly precompiles", async function () { + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: "0x0000000000000000000000000000000000000801", + gas: "0xdb3b", + value: "0x0", + data: "0x4e71d92d", + }, + ALITH_PRIVATE_KEY + ); + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ + data.result, + { tracer: BS_TRACER.body }, + ]); -describeDevMoonbeam("Trace", (context) => { - it("should format as request (callTrace Call)", async function () { - const send = await nestedSingle(context); - await context.createBlock(); - let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ - send.result, - { tracer: "callTracer" }, - ]); - let res = traceTx.result; - // Fields - expect(Object.keys(res)).to.deep.equal([ - "calls", - "from", - "gas", - "gasUsed", - "input", - "output", - "to", - "type", - "value", - ]); - // Type - expect(res.type).to.be.equal("CALL"); - // Nested calls - let calls = res.calls; - expect(calls.length).to.be.eq(1); - let nested_call = calls[0]; - expect(res.to).to.be.equal(nested_call.from); - expect(nested_call.type).to.be.equal("CALL"); - }); + expect(trace.result.length).to.be.eq(1); + }); - it("should format as request (callTrace Create)", async function () { - let nonce = await context.web3.eth.getTransactionCount(GENESIS_ACCOUNT); - const { contract: callee, rawTx: rawTx1 } = await createContract( - context, - "Callee", - { nonce: nonce++ }, - [] - ); + it("should trace correctly transfers (raw)", async function () { + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + // arbitrary (non-contract) address to transfer to + to: baltathar.address, + gas: "0xdb3b", + value: "0x10000000", + data: "0x", + }, + ALITH_PRIVATE_KEY + ); + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [data.result]); - let { txResults } = await context.createBlock({ - transactions: [rawTx1], + expect(trace.result.gas).to.be.eq("0x5208"); // 21_000 gas for a transfer. }); - let createTxHash = txResults[0].result; - let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ - createTxHash, - { tracer: "callTracer" }, - ]); - - let res = traceTx.result; - // Fields - expect(Object.keys(res)).to.deep.equal([ - "from", - "gas", - "gasUsed", - "input", - "output", - "to", - "type", - "value", - ]); - // Type - expect(res.type).to.be.equal("CREATE"); - }); + }, + "Legacy", + "moonbase", + true +); - it("should trace block by number and hash (callTrace)", async function () { - const contracts = await createContracts(context); - let nonce = contracts.nonce; - await nestedCall( - context, - contracts.caller, - contracts.callerAddr, - contracts.calleeAddr, - nonce++ - ); - await nestedCall( - context, - contracts.caller, - contracts.callerAddr, - contracts.calleeAddr, - nonce++ - ); - await nestedCall( - context, - contracts.caller, - contracts.callerAddr, - contracts.calleeAddr, - nonce++ - ); - await context.createBlock(); - const block = await context.web3.eth.getBlock("latest"); - const block_number = context.web3.utils.toHex(await context.web3.eth.getBlockNumber()); - const block_hash = block.hash; - // Trace block by number. - let traceTx = await customWeb3Request(context.web3, "debug_traceBlockByNumber", [ - block_number, - { tracer: "callTracer" }, - ]); - expect(block.transactions.length).to.be.equal(traceTx.result.length); - traceTx.result.forEach((trace) => { - expect(trace.calls.length).to.be.equal(1); - expect(Object.keys(trace)).to.deep.equal([ +describeDevMoonbeam( + "Trace (callTrace)", + (context) => { + it("should format as request (Call)", async function () { + const send = await nestedSingle(context); + await context.createBlock(); + let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ + send.result, + { tracer: "callTracer" }, + ]); + let res = traceTx.result; + // Fields + expect(Object.keys(res).sort()).to.deep.equal([ "calls", "from", "gas", @@ -488,17 +409,35 @@ describeDevMoonbeam("Trace", (context) => { "type", "value", ]); + // Type + expect(res.type).to.be.equal("CALL"); + // Nested calls + let calls = res.calls; + expect(calls.length).to.be.eq(1); + let nested_call = calls[0]; + expect(res.to).to.be.equal(nested_call.from); + expect(nested_call.type).to.be.equal("CALL"); }); - // Trace block by hash (actually the rpc method is an alias of debug_traceBlockByNumber). - traceTx = await customWeb3Request(context.web3, "debug_traceBlockByHash", [ - block_hash, - { tracer: "callTracer" }, - ]); - expect(block.transactions.length).to.be.equal(traceTx.result.length); - traceTx.result.forEach((trace) => { - expect(trace.calls.length).to.be.equal(1); - expect(Object.keys(trace)).to.deep.equal([ - "calls", + + it("should format as request (Create)", async function () { + let nonce = await context.web3.eth.getTransactionCount(alith.address); + const { contract: callee, rawTx: rawTx1 } = await createContract( + context, + "TraceCallee", + { nonce: nonce++ }, + [] + ); + + let { result } = await context.createBlock(rawTx1); + let createTxHash = result.hash; + let traceTx = await customWeb3Request(context.web3, "debug_traceTransaction", [ + createTxHash, + { tracer: "callTracer" }, + ]); + + let res = traceTx.result; + // Fields + expect(Object.keys(res).sort()).to.deep.equal([ "from", "gas", "gasUsed", @@ -508,108 +447,302 @@ describeDevMoonbeam("Trace", (context) => { "type", "value", ]); + // Type + expect(res.type).to.be.equal("CREATE"); }); - }); -}); -describeDevMoonbeam("Trace", (context) => { - it("should correctly trace subcall (call list)", async function () { - this.timeout(10000); + it("should trace block by number and hash", async function () { + const contracts = await createContracts(context); + let nonce = contracts.nonce; + await nestedCall( + context, + contracts.caller, + contracts.callerAddr, + contracts.calleeAddr, + nonce++ + ); + await nestedCall( + context, + contracts.caller, + contracts.callerAddr, + contracts.calleeAddr, + nonce++ + ); + await nestedCall( + context, + contracts.caller, + contracts.callerAddr, + contracts.calleeAddr, + nonce++ + ); + await context.createBlock(); + const block = await context.web3.eth.getBlock("latest"); + const block_number = context.web3.utils.toHex(await context.web3.eth.getBlockNumber()); + const block_hash = block.hash; + // Trace block by number. + let traceTx = await customWeb3Request(context.web3, "debug_traceBlockByNumber", [ + block_number, + { tracer: "callTracer" }, + ]); + expect(block.transactions.length).to.be.equal(traceTx.result.length); + traceTx.result.forEach((trace: { [key: string]: any }) => { + expect(trace.calls.length).to.be.equal(1); + expect(Object.keys(trace).sort()).to.deep.equal([ + "calls", + "from", + "gas", + "gasUsed", + "input", + "output", + "to", + "type", + "value", + ]); + }); + // Trace block by hash (actually the rpc method is an alias of debug_traceBlockByNumber). + traceTx = await customWeb3Request(context.web3, "debug_traceBlockByHash", [ + block_hash, + { tracer: "callTracer" }, + ]); + expect(block.transactions.length).to.be.equal(traceTx.result.length); + traceTx.result.forEach((trace: { [key: string]: any }) => { + expect(trace.calls.length).to.be.equal(1); + expect(Object.keys(trace).sort()).to.deep.equal([ + "calls", + "from", + "gas", + "gasUsed", + "input", + "output", + "to", + "type", + "value", + ]); + }); + }); + }, + "Legacy", + "moonbase", + true +); - const { contract: contractProxy, rawTx } = await createContract(context, "TestCallList"); - await context.createBlock({ transactions: [rawTx] }); +describeDevMoonbeam( + "Trace (call list)", + (context) => { + it("should correctly trace subcall", async function () { + const { contract: contractProxy, rawTx } = await createContract(context, "Proxy"); + await context.createBlock(rawTx); - const { contract: contractDummy, rawTx: rawTx2 } = await createContract( - context, - "TestContract" - ); - await context.createBlock({ transactions: [rawTx2] }); + const { contract: contractDummy, rawTx: rawTx2 } = await createContract( + context, + "MultiplyBy7" + ); + await context.createBlock([rawTx2]); - const proxyInterface = new ethers.utils.Interface( - (await getCompiled("TestCallList")).contract.abi - ); - const dummyInterface = new ethers.utils.Interface( - (await getCompiled("TestContract")).contract.abi - ); + const proxyInterface = new ethers.utils.Interface((await getCompiled("Proxy")).contract.abi); + const dummyInterface = new ethers.utils.Interface( + (await getCompiled("MultiplyBy7")).contract.abi + ); - let callTx = await context.web3.eth.accounts.signTransaction( - { - from: GENESIS_ACCOUNT, - to: contractProxy.options.address, - gas: "0x100000", - value: "0x00", - data: proxyInterface.encodeFunctionData("call", [ - contractDummy.options.address, - dummyInterface.encodeFunctionData("multiply", [42]), - ]), - }, - GENESIS_ACCOUNT_PRIVATE_KEY - ); + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: contractProxy.options.address, + gas: "0x100000", + value: "0x00", + data: proxyInterface.encodeFunctionData("call", [ + contractDummy.options.address, + dummyInterface.encodeFunctionData("multiply", [42]), + ]), + }, + ALITH_PRIVATE_KEY + ); - const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ - callTx.rawTransaction, - ]); - await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ - data.result, - { tracer: "callTracer" }, - ]); + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ + data.result, + { tracer: "callTracer" }, + ]); - expect(trace.result.from).to.be.eq(GENESIS_ACCOUNT.toLowerCase()); - expect(trace.result.to).to.be.eq(contractProxy.options.address.toLowerCase()); - expect(trace.result.calls.length).to.be.eq(1); - expect(trace.result.calls[0].from).to.be.eq(contractProxy.options.address.toLowerCase()); - expect(trace.result.calls[0].to).to.be.eq(contractDummy.options.address.toLowerCase()); - expect(trace.result.calls[0].type).to.be.eq("CALL"); - }); + expect(trace.result.from).to.be.eq(alith.address.toLowerCase()); + expect(trace.result.to).to.be.eq(contractProxy.options.address.toLowerCase()); + expect(trace.result.calls.length).to.be.eq(1); + expect(trace.result.calls[0].from).to.be.eq(contractProxy.options.address.toLowerCase()); + expect(trace.result.calls[0].to).to.be.eq(contractDummy.options.address.toLowerCase()); + expect(trace.result.calls[0].type).to.be.eq("CALL"); + }); - it("should correctly trace delegatecall subcall (call list)", async function () { - this.timeout(10000); + it("should correctly trace delegatecall subcall", async function () { + const { contract: contractProxy, rawTx } = await createContract(context, "Proxy"); + await context.createBlock(rawTx); - const { contract: contractProxy, rawTx } = await createContract(context, "TestCallList"); - await context.createBlock({ transactions: [rawTx] }); + const { contract: contractDummy, rawTx: rawTx2 } = await createContract( + context, + "MultiplyBy7" + ); + await context.createBlock([rawTx2]); - const { contract: contractDummy, rawTx: rawTx2 } = await createContract( - context, - "TestContract" - ); - await context.createBlock({ transactions: [rawTx2] }); + const proxyInterface = new ethers.utils.Interface((await getCompiled("Proxy")).contract.abi); + const dummyInterface = new ethers.utils.Interface( + (await getCompiled("MultiplyBy7")).contract.abi + ); - const proxyInterface = new ethers.utils.Interface( - (await getCompiled("TestCallList")).contract.abi - ); - const dummyInterface = new ethers.utils.Interface( - (await getCompiled("TestContract")).contract.abi + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: contractProxy.options.address, + gas: "0x100000", + value: "0x00", + data: proxyInterface.encodeFunctionData("delegateCall", [ + contractDummy.options.address, + dummyInterface.encodeFunctionData("multiply", [42]), + ]), + }, + ALITH_PRIVATE_KEY + ); + + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ + data.result, + { tracer: "callTracer" }, + ]); + + expect(trace.result.from).to.be.eq(alith.address.toLowerCase()); + expect(trace.result.to).to.be.eq(contractProxy.options.address.toLowerCase()); + expect(trace.result.calls.length).to.be.eq(1); + expect(trace.result.calls[0].from).to.be.eq(contractProxy.options.address.toLowerCase()); + expect(trace.result.calls[0].to).to.be.eq(contractDummy.options.address.toLowerCase()); + expect(trace.result.calls[0].type).to.be.eq("DELEGATECALL"); + }); + + it("should correctly trace precompile subcall (call list)", async function () { + this.timeout(10000); + + const { contract: contractProxy, rawTx } = await createContract(context, "Proxy"); + await context.createBlock(rawTx); + + const { contract: contractDummy, rawTx: rawTx2 } = await createContract( + context, + "MultiplyBy7" + ); + await context.createBlock([rawTx2]); + + const proxyInterface = new ethers.utils.Interface((await getCompiled("Proxy")).contract.abi); + const dummyInterface = new ethers.utils.Interface( + (await getCompiled("MultiplyBy7")).contract.abi + ); + const batchInterface = new ethers.utils.Interface((await getCompiled("Batch")).contract.abi); + + let callTx = await context.web3.eth.accounts.signTransaction( + { + from: alith.address, + to: "0x0000000000000000000000000000000000000808", + gas: "0x100000", + value: "0x00", + data: batchInterface.encodeFunctionData("batchAll", [ + [contractProxy.options.address, contractProxy.options.address], + [], + [ + proxyInterface.encodeFunctionData("call", [ + contractDummy.options.address, + dummyInterface.encodeFunctionData("multiply", [42]), + ]), + proxyInterface.encodeFunctionData("delegateCall", [ + contractDummy.options.address, + dummyInterface.encodeFunctionData("multiply", [42]), + ]), + ], + [], + ]), + }, + ALITH_PRIVATE_KEY + ); + + const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ + callTx.rawTransaction, + ]); + await context.createBlock(); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ + data.result, + { tracer: "callTracer" }, + ]); + + expect(trace.result.from).to.be.eq(alith.address.toLowerCase()); + expect(trace.result.to).to.be.eq("0x0000000000000000000000000000000000000808"); + expect(trace.result.calls.length).to.be.eq(2); + + expect(trace.result.calls[0].from).to.be.eq("0x0000000000000000000000000000000000000808"); + expect(trace.result.calls[0].to).to.be.eq(contractProxy.options.address.toLowerCase()); + expect(trace.result.calls[0].type).to.be.eq("CALL"); + + expect(trace.result.calls[0].calls.length).to.be.eq(1); + expect(trace.result.calls[0].calls[0].from).to.be.eq( + contractProxy.options.address.toLowerCase() + ); + expect(trace.result.calls[0].calls[0].to).to.be.eq( + contractDummy.options.address.toLowerCase() + ); + expect(trace.result.calls[0].calls[0].type).to.be.eq("CALL"); + + expect(trace.result.calls[1].from).to.be.eq("0x0000000000000000000000000000000000000808"); + expect(trace.result.calls[1].to).to.be.eq(contractProxy.options.address.toLowerCase()); + expect(trace.result.calls[1].type).to.be.eq("CALL"); + + expect(trace.result.calls[1].calls.length).to.be.eq(1); + expect(trace.result.calls[1].calls[0].from).to.be.eq( + contractProxy.options.address.toLowerCase() + ); + expect(trace.result.calls[1].calls[0].to).to.be.eq( + contractDummy.options.address.toLowerCase() + ); + expect(trace.result.calls[1].calls[0].type).to.be.eq("DELEGATECALL"); + }); + }, + "Legacy", + "moonbase", + true +); + +describeDevMoonbeam("Raw trace limits", (context) => { + it("it should not trace call that would produce too big responses", async function () { + this.timeout(50000); + const { contract: contract, rawTx } = await createContract(context, "TraceFilter", {}, [false]); + await context.createBlock(rawTx); + + const contractInterface = new ethers.utils.Interface( + (await getCompiled("TraceFilter")).contract.abi ); let callTx = await context.web3.eth.accounts.signTransaction( { - from: GENESIS_ACCOUNT, - to: contractProxy.options.address, - gas: "0x100000", + from: alith.address, + to: contract.options.address, + gas: "0x800000", value: "0x00", - data: proxyInterface.encodeFunctionData("delegateCall", [ - contractDummy.options.address, - dummyInterface.encodeFunctionData("multiply", [42]), + data: contractInterface.encodeFunctionData("heavy_steps", [ + 100, // number of storage modified + 1000, // numbers of simple steps (that will have 100 storage items in trace) ]), }, - GENESIS_ACCOUNT_PRIVATE_KEY + ALITH_PRIVATE_KEY ); const data = await customWeb3Request(context.web3, "eth_sendRawTransaction", [ callTx.rawTransaction, ]); await context.createBlock(); - let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [ - data.result, - { tracer: "callTracer" }, - ]); + let trace = await customWeb3Request(context.web3, "debug_traceTransaction", [data.result]); - expect(trace.result.from).to.be.eq(GENESIS_ACCOUNT.toLowerCase()); - expect(trace.result.to).to.be.eq(contractProxy.options.address.toLowerCase()); - expect(trace.result.calls.length).to.be.eq(1); - expect(trace.result.calls[0].from).to.be.eq(contractProxy.options.address.toLowerCase()); - expect(trace.result.calls[0].to).to.be.eq(contractDummy.options.address.toLowerCase()); - expect(trace.result.calls[0].type).to.be.eq("DELEGATECALL"); + expect(trace.error).to.deep.eq({ + code: -32603, + message: "replayed transaction generated too much data. \ +try disabling memory or storage?", + }); }); }); diff --git a/tests/tsconfig.json b/tests/tsconfig.json index 6f527790e6..52a5b9e4eb 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -1,7 +1,26 @@ { "compilerOptions": { + "module": "commonjs", "target": "ES2020", + "outDir": "build", + "baseUrl": "./types", "moduleResolution": "node", - "esModuleInterop": true - } + "importHelpers": true, + "skipLibCheck": true, + "removeComments": true, + "preserveConstEnums": true, + "sourceMap": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true + }, + "include": [ + "*tests/**/*.ts", + "util/*.ts", + "tools/*.ts", + "util/**/*.json", + "contracts/*.ts", + "contracts/compiled/*.json" + ], + "exclude": ["node_modules/"] } diff --git a/tests/util/accounts.ts b/tests/util/accounts.ts new file mode 100644 index 0000000000..f39b12ba31 --- /dev/null +++ b/tests/util/accounts.ts @@ -0,0 +1,96 @@ +import Keyring from "@polkadot/keyring"; + +import { + DEFAULT_GENESIS_BALANCE, + DEFAULT_GENESIS_MAPPING, + DEFAULT_GENESIS_STAKING, +} from "./constants"; + +const keyringEth = new Keyring({ type: "ethereum" }); +const keyringEd25519 = new Keyring({ type: "ed25519" }); +const keyringSr25519 = new Keyring({ type: "sr25519" }); + +// Prefunded accounts. +export const ALITH_ADDRESS = "0xf24ff3a9cf04c71dbc94d0b566f7a27b94566cac"; +export const ALITH_PRIVATE_KEY = + "0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"; +export const ALITH_SESSION_ADDRESS = + "0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"; +export const ALITH_CONTRACT_ADDRESSES = [ + "0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3", + "0x970951a12F975E6762482ACA81E57D5A2A4e73F4", + "0x3ed62137c5DB927cb137c26455969116BF0c23Cb", + "0x962c0940d72E7Db6c9a5F81f1cA87D8DB2B82A23", + "0x5CC307268a1393AB9A764A20DACE848AB8275c46", + "0xeAB4eEBa1FF8504c124D031F6844AD98d07C318f", +]; + +export const BALTATHAR_ADDRESS = "0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0"; +export const BALTATHAR_PRIVATE_KEY = + "0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b"; +export const BALTATHAR_SESSION_ADDRESS = + "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48"; + +export const CHARLETH_ADDRESS = "0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc"; +export const CHARLETH_PRIVATE_KEY = + "0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b"; +export const CHARLETH_SESSION_ADDRESS = + "0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22"; + +export const DOROTHY_ADDRESS = "0x773539d4Ac0e786233D90A233654ccEE26a613D9"; +export const DOROTHY_PRIVATE_KEY = + "0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68"; + +export const ETHAN_ADDRESS = "0xFf64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB"; +export const ETHAN_PRIVATE_KEY = + "0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4"; + +export const FAITH_ADDRESS = "0xC0F0f4ab324C46e55D02D0033343B4Be8A55532d"; +export const FAITH_PRIVATE_KEY = + "0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df"; + +export const GOLIATH_ADDRESS = "0x7BF369283338E12C90514468aa3868A551AB2929"; +export const GOLIATH_PRIVATE_KEY = + "0x96b8a38e12e1a31dee1eab2fffdf9d9990045f5b37e44d8cc27766ef294acf18"; + +// Deprecated +export const GERALD_ADDRESS = "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b"; +export const GERALD_PRIVATE_KEY = + "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; +export const GERALD_CONTRACT_ADDRESSES = [ + "0xC2Bf5F29a4384b1aB0C063e1c666f02121B6084a", + "0x5c4242beB94dE30b922f57241f1D02f36e906915", + "0x42e2EE7Ba8975c473157634Ac2AF4098190fc741", + "0xF8cef78E923919054037a1D03662bBD884fF4edf", + "0xe573BCA813c741229ffB2488F7856C6cAa841041", + "0xBb0CC0fb3e0c06725c67167501f850B4900D6DB5", +]; + +// This is Alice0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b +export const ALITH_GENESIS_FREE_BALANCE = DEFAULT_GENESIS_BALANCE - DEFAULT_GENESIS_MAPPING; +export const ALITH_GENESIS_LOCK_BALANCE = DEFAULT_GENESIS_STAKING; +export const ALITH_GENESIS_RESERVE_BALANCE = DEFAULT_GENESIS_MAPPING; +export const ALITH_GENESIS_TRANSFERABLE_BALANCE = + ALITH_GENESIS_FREE_BALANCE - ALITH_GENESIS_LOCK_BALANCE; + +export const alith = keyringEth.addFromUri(ALITH_PRIVATE_KEY); +export const baltathar = keyringEth.addFromUri(BALTATHAR_PRIVATE_KEY); +export const charleth = keyringEth.addFromUri(CHARLETH_PRIVATE_KEY); +export const dorothy = keyringEth.addFromUri(DOROTHY_PRIVATE_KEY); +export const ethan = keyringEth.addFromUri(ETHAN_PRIVATE_KEY); +export const faith = keyringEth.addFromUri(FAITH_PRIVATE_KEY); +export const goliath = keyringEth.addFromUri(GOLIATH_PRIVATE_KEY); + +// deprecated +export const gerald = keyringEth.addFromUri(GERALD_PRIVATE_KEY); + +let accountSeed = 10000; +export function generateKeyringPair(type: "ethereum" | "sr25519" | "ed25519" = "ethereum") { + const privateKey = `0xDEADBEEF${(accountSeed++).toString(16).padStart(56, "0")}`; + if (type == "sr25519") { + return keyringSr25519.addFromUri(privateKey); + } else if (type == "ed25519") { + return keyringEd25519.addFromUri(privateKey); + } + return keyringEth.addFromUri(privateKey); +} diff --git a/tests/util/assets.ts b/tests/util/assets.ts new file mode 100644 index 0000000000..36d6edc9b1 --- /dev/null +++ b/tests/util/assets.ts @@ -0,0 +1,162 @@ +import "@moonbeam-network/api-augment"; + +import { u128 } from "@polkadot/types"; +import { BN, hexToU8a, u8aToHex } from "@polkadot/util"; +import { blake2AsU8a, xxhashAsU8a } from "@polkadot/util-crypto"; +import { expect } from "chai"; + +import { DevTestContext } from "./setup-dev-tests"; + +import type { PalletAssetsAssetAccount, PalletAssetsAssetDetails } from "@polkadot/types/lookup"; +import type { AccountId20 } from "@polkadot/types/interfaces/runtime"; +import type { KeyringPair } from "@substrate/txwrapper-core"; +export const RELAY_SOURCE_LOCATION = { Xcm: { parents: 1, interior: "Here" } }; +export const RELAY_V1_SOURCE_LOCATION = { V1: { parents: 1, interior: "Here" } }; +export const PARA_1000_SOURCE_LOCATION = { + Xcm: { parents: 1, interior: { X1: { Parachain: 1000 } } }, +}; +export const PARA_2000_SOURCE_LOCATION = { + Xcm: { parents: 1, interior: { X1: { Parachain: 2000 } } }, +}; +export const PARA_1001_SOURCE_LOCATION = { + Xcm: { parents: 1, interior: { X1: { Parachain: 1001 } } }, +}; + +export interface AssetMetadata { + name: string; + symbol: string; + decimals: BN; + isFrozen: boolean; +} + +export const relayAssetMetadata: AssetMetadata = { + name: "DOT", + symbol: "DOT", + decimals: new BN(12), + isFrozen: false, +}; + +export async function mockAssetBalance( + context: DevTestContext, + assetBalance: PalletAssetsAssetAccount, + assetDetails: PalletAssetsAssetDetails, + sudoAccount: KeyringPair, + assetId: u128, + account: string | AccountId20, + is_sufficient = false +) { + // Register the asset + await context.createBlock( + context.polkadotApi.tx.sudo + .sudo( + context.polkadotApi.tx.assetManager.registerForeignAsset( + RELAY_SOURCE_LOCATION, + relayAssetMetadata, + new BN(1), + is_sufficient + ) + ) + .signAsync(sudoAccount) + ); + + const assets = await context.polkadotApi.query.assetManager.assetIdType(assetId); + // make sure we created it + expect(assets.unwrap().asXcm.parents.toNumber()).to.equal(1); + + // Get keys to modify balance + let module = xxhashAsU8a(new TextEncoder().encode("Assets"), 128); + let account_key = xxhashAsU8a(new TextEncoder().encode("Account"), 128); + let blake2concatAssetId = new Uint8Array([ + ...blake2AsU8a(assetId.toU8a(), 128), + ...assetId.toU8a(), + ]); + + let blake2concatAccount = new Uint8Array([ + ...blake2AsU8a(hexToU8a(account.toString()), 128), + ...hexToU8a(account.toString()), + ]); + let overallAccountKey = new Uint8Array([ + ...module, + ...account_key, + ...blake2concatAssetId, + ...blake2concatAccount, + ]); + + // Get keys to modify total supply + let assetKey = xxhashAsU8a(new TextEncoder().encode("Asset"), 128); + let overallAssetKey = new Uint8Array([...module, ...assetKey, ...blake2concatAssetId]); + await context.createBlock( + context.polkadotApi.tx.sudo + .sudo( + context.polkadotApi.tx.system.setStorage([ + [u8aToHex(overallAccountKey), u8aToHex(assetBalance.toU8a())], + [u8aToHex(overallAssetKey), u8aToHex(assetDetails.toU8a())], + ]) + ) + .signAsync(sudoAccount) + ); + return; +} + +export interface RegisterLocalAssetOptions { + name?: string; + symbol?: string; + decimals?: number; + registrerAccount: KeyringPair; + mints?: { account: KeyringPair | string; amount: bigint }[]; +} + +export async function registerLocalAssetWithMeta( + context: DevTestContext, + sudoAccount: KeyringPair, + { + name = "Local", + symbol = "Local", + decimals = 12, + registrerAccount, + mints = [], + }: RegisterLocalAssetOptions +): Promise<{ assetId: string; assetAddress: string }> { + const { + result: { events: eventsRegister }, + } = await context.createBlock( + context.polkadotApi.tx.sudo + .sudo( + context.polkadotApi.tx.assetManager.registerLocalAsset( + registrerAccount.address, + registrerAccount.address, + true, + new BN(1) + ) + ) + .signAsync(sudoAccount) + ); + + // Look for assetId in events + const assetId = eventsRegister + .find(({ event: { section } }) => section.toString() === "assetManager") + .event.data[0].toHex() + .replace(/,/g, ""); + const assetAddress = u8aToHex(new Uint8Array([...hexToU8a("0xFFFFFFFE"), ...hexToU8a(assetId)])); + + // Set metadata + await context.createBlock( + context.polkadotApi.tx.localAssets + .setMetadata(assetId, name, symbol, new BN(decimals)) + .signAsync(registrerAccount) + ); + + // mint accounts + for (const { account, amount } of mints) { + await context.createBlock( + context.polkadotApi.tx.localAssets + .mint(assetId, typeof account == "string" ? account : account.address, amount) + .signAsync(registrerAccount) + ); + } + + return { + assetId, + assetAddress, + }; +} diff --git a/tests/util/balances.ts b/tests/util/balances.ts deleted file mode 100644 index b92190c50a..0000000000 --- a/tests/util/balances.ts +++ /dev/null @@ -1,10 +0,0 @@ -/// Fetch balance of provided account before and after the inner function is executed and -/// check it matches expected difference. -export async function expectBalanceDifference(context, address, diff, inner, expect) { - const balance_before = await context.web3.eth.getBalance(address); - - await inner(); - - const balance_after = await context.web3.eth.getBalance(address); - expect(BigInt(balance_after)).to.be.eq(BigInt(balance_before) + BigInt(diff)); -} diff --git a/tests/util/block.ts b/tests/util/block.ts index 2793f471d1..6671b811f6 100644 --- a/tests/util/block.ts +++ b/tests/util/block.ts @@ -1,3 +1,5 @@ +import "@moonbeam-network/api-augment"; + import { ApiPromise } from "@polkadot/api"; import { BlockHash, @@ -6,38 +8,31 @@ import { Extrinsic, RuntimeDispatchInfo, } from "@polkadot/types/interfaces"; -import type { Block } from "@polkadot/types/interfaces/runtime/types"; -import type { TxWithEvent } from "@polkadot/api-derive/types"; -import Debug from "debug"; +import { FrameSystemEventRecord } from "@polkadot/types/lookup"; +import { expect } from "chai"; + import { WEIGHT_PER_GAS } from "./constants"; import { DevTestContext } from "./setup-dev-tests"; -import { FrameSystemEventRecord } from "@polkadot/types/lookup"; -const debug = Debug("blocks"); -import "@polkadot/api-augment"; +import type { Block } from "@polkadot/types/interfaces/runtime/types"; +import type { TxWithEvent } from "@polkadot/api-derive/types"; +const debug = require("debug")("test:blocks"); export async function createAndFinalizeBlock( api: ApiPromise, - parentHash?: BlockHash, + parentHash?: string, finalize: boolean = true ): Promise<{ duration: number; - hash: BlockHash; + hash: string; }> { const startTime: number = Date.now(); - let hash = undefined; - try { - if (parentHash == undefined) { - hash = (await api.rpc.engine.createBlock(true, finalize)).toJSON()["hash"]; - } else { - hash = (await api.rpc.engine.createBlock(true, finalize, parentHash)).toJSON()["hash"]; - } - } catch (e) { - console.log("ERROR DURING BLOCK FINALIZATION", e); - } + const block = parentHash + ? await api.rpc.engine.createBlock(true, finalize, parentHash) + : await api.rpc.engine.createBlock(true, finalize); return { duration: Date.now() - startTime, - hash, + hash: block.get("hash").toString(), }; } @@ -51,9 +46,9 @@ export interface BlockDetails { } export function mapExtrinsics( - extrinsics: Extrinsic[] | any, - records: FrameSystemEventRecord[] | any, - fees?: RuntimeDispatchInfo[] | any + extrinsics: Extrinsic[], + records: FrameSystemEventRecord[], + fees?: RuntimeDispatchInfo[] ): TxWithEventAndFee[] { return extrinsics.map((extrinsic, index): TxWithEventAndFee => { let dispatchError: DispatchError | undefined; @@ -133,7 +128,6 @@ export const verifyBlockFees = async ( context: DevTestContext, fromBlockNumber: number, toBlockNumber: number, - expect, expectedBalanceDiff: bigint ) => { const api = context.polkadotApi; @@ -282,21 +276,71 @@ export const verifyBlockFees = async ( expect(fromPreSupply.toBigInt() - toSupply.toBigInt()).to.eq(sumBlockBurnt); // Log difference in supply, we should be equal to the burnt fees - debug( - ` supply diff: ${(fromPreSupply.toBigInt() - toSupply.toBigInt()) - .toString() - .padStart(30, " ")}` - ); - debug(` burnt fees : ${sumBlockBurnt.toString().padStart(30, " ")}`); - debug(` total fees : ${sumBlockFees.toString().padStart(30, " ")}`); + // debug( + // ` supply diff: ${(fromPreSupply.toBigInt() - toSupply.toBigInt()) + // .toString() + // .padStart(30, " ")}` + // ); + // debug(` burnt fees : ${sumBlockBurnt.toString().padStart(30, " ")}`); + // debug(` total fees : ${sumBlockFees.toString().padStart(30, " ")}`); }; export const verifyLatestBlockFees = async ( context: DevTestContext, - expect, expectedBalanceDiff: bigint = BigInt(0) ) => { const signedBlock = await context.polkadotApi.rpc.chain.getBlock(); const blockNumber = Number(signedBlock.block.header.number); - return verifyBlockFees(context, blockNumber, blockNumber, expect, expectedBalanceDiff); + return verifyBlockFees(context, blockNumber, blockNumber, expectedBalanceDiff); }; + +export const getBlockExtrinsic = async ( + api: ApiPromise, + blockHash: string | BlockHash, + section: string, + method: string +) => { + const apiAt = await api.at(blockHash); + const [{ block }, records] = await Promise.all([ + api.rpc.chain.getBlock(blockHash), + apiAt.query.system.events(), + ]); + const extIndex = block.extrinsics.findIndex( + (ext) => ext.method.section == section && ext.method.method == method + ); + const extrinsic = extIndex > -1 ? block.extrinsics[extIndex] : null; + + const events = records + .filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(extIndex)) + .map(({ event }) => event); + const resultEvent = events.find( + (event) => + event.section === "system" && + (event.method === "ExtrinsicSuccess" || event.method === "ExtrinsicFailed") + ); + return { block, extrinsic, events, resultEvent }; +}; + +export async function jumpToRound(context: DevTestContext, round: Number): Promise { + let lastBlockHash = null; + while (true) { + const currentRound = ( + await context.polkadotApi.query.parachainStaking.round() + ).current.toNumber(); + if (currentRound === round) { + return lastBlockHash; + } else if (currentRound > round) { + return null; + } + + lastBlockHash = (await context.createBlock()).block.hash.toString(); + } +} + +export async function jumpRounds(context: DevTestContext, count: Number): Promise { + const round = (await context.polkadotApi.query.parachainStaking.round()).current + .addn(count.valueOf()) + .toNumber(); + + return jumpToRound(context, round); +} diff --git a/tests/util/constants.ts b/tests/util/constants.ts index b21ebc3d6d..76ec3574c7 100644 --- a/tests/util/constants.ts +++ b/tests/util/constants.ts @@ -6,6 +6,7 @@ export const MOONBEAM_LOG = process.env.MOONBEAM_LOG || "info"; export const BINARY_PATH = process.env.BINARY_PATH || `../target/release/moonbeam`; export const RELAY_BINARY_PATH = process.env.RELAY_BINARY_PATH || `../target/release/polkadot`; +export const RELAY_LOG = process.env.RELAY_LOG; // Is undefined by default as the path is dependent of the runtime. export const OVERRIDE_RUNTIME_PATH = process.env["OVERRIDE_RUNTIME_PATH"] || undefined; @@ -18,25 +19,6 @@ export const RELAY_CHAIN_NODE_NAMES = ["Alice", "Bob", "Charlie", "Dave", "Eve", // Test variables export const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; export const TREASURY_ACCOUNT = "0x6d6f646c70632f74727372790000000000000000"; -export const GENESIS_ACCOUNT = "0x6Be02d1d3665660d22FF9624b7BE0551ee1Ac91b"; -export const GENESIS_ACCOUNT_PRIVATE_KEY = - "0x99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"; -export const TEST_ACCOUNT = "0x1111111111111111111111111111111111111111"; -export const ALITH = "0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac"; -export const ALITH_PRIV_KEY = "0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"; -export const BALTATHAR = "0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0"; -export const BALTATHAR_PRIV_KEY = - "0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b"; -export const CHARLETH = "0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc"; -export const CHARLETH_PRIV_KEY = - "0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b"; -export const DOROTHY = "0x773539d4Ac0e786233D90A233654ccEE26a613D9"; -export const DOROTHY_PRIV_KEY = - "0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68"; -export const RANDOM_PRIV_KEY = "0x66d8d3bdfc9d678c1ea6dc3e15a81cb98dcd4d456f5ce0519479df1fba70cc5e"; -export const ETHAN_PRIVKEY = "0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4"; -export const ETHAN = "0xFf64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB"; -export const RANDOM_ADDRESS = "0x39Cccb8cc2A821eB5cDADc656fF4229398AbA190"; export const GLMR = 1_000_000_000_000_000_000n; export const MILLIGLMR = 1_000_000_000_000_000n; export const MICROGLMR = 1_000_000_000_000n; @@ -46,47 +28,7 @@ export const DEFAULT_GENESIS_MAPPING = 100n * GLMR; export const PROPOSAL_AMOUNT = 1000n * GLMR; export const VOTE_AMOUNT = 10n * GLMR; export const MIN_GLMR_STAKING = 1000n * GLMR; -export const MIN_GLMR_NOMINATOR = 5n * GLMR; -export const GENESIS_ACCOUNT_BALANCE = DEFAULT_GENESIS_BALANCE; -// This is Alice -export const COLLATOR_ACCOUNT = ALITH; -export const COLLATOR_ACCOUNT_BALANCE = - DEFAULT_GENESIS_BALANCE - DEFAULT_GENESIS_STAKING - DEFAULT_GENESIS_MAPPING; - -// Prefunded accounts. -export const ALITH_ADDRESS = "0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac"; -export const ALITH_PRIVATE_KEY = - "0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"; - -export const BALTATHAR_ADDRESS = "0x3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0"; -export const BALTATHAR_PRIVATE_KEY = - "0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b"; - -export const CHARLETH_ADDRESS = "0x798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc"; -export const CHARLETH_PRIVATE_KEY = - "0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b"; - -export const DOROTHY_ADDRESS = "0x773539d4Ac0e786233D90A233654ccEE26a613D9"; -export const DOROTHY_PRIVATE_KEY = - "0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68"; - -export const ETHAN_ADDRESS = "0xFf64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB"; -export const ETHAN_PRIVATE_KEY = - "0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4"; - -export const FAITH_ADDRESS = "0xC0F0f4ab324C46e55D02D0033343B4Be8A55532d"; -export const FAITH_PRIVATE_KEY = - "0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df"; - -export const GERALD_ADDRESS = "0x7BF369283338E12C90514468aa3868A551AB2929"; -export const GERALD_PRIVATE_KEY = - "0x96b8a38e12e1a31dee1eab2fffdf9d9990045f5b37e44d8cc27766ef294acf18"; - -// Relay addresses for crowdloan tests -export const relayChainAddress: string = - "0x1111111111111111111111111111111111111111111111111111111111111111"; -export const relayChainAddress_2: string = - "0x2222222222222222222222222222222222222222222222222222222222222222"; +export const MIN_GLMR_DELEGATOR = 1n * GLMR; // Current gas per second export const GAS_PER_SECOND = 40_000_000; @@ -98,17 +40,34 @@ export const BLOCK_TX_LIMIT = GAS_PER_SECOND * 0.5; // Current implementation is limiting block transactions to 75% of the block gas limit export const BLOCK_TX_GAS_LIMIT = BLOCK_TX_LIMIT * 0.75; -// 125_000_000 Weight per extrinsics -export const EXTRINSIC_BASE_COST = 125_000_000 / GAS_PER_WEIGHT; +// 85_800_000 Weight per extrinsics +export const EXTRINSIC_BASE_COST = 85_800_000 / GAS_PER_WEIGHT; // Maximum extrinsic weight is taken from the max allowed transaction weight per block, // minus the block initialization (10%) and minus the extrinsic base cost. export const EXTRINSIC_GAS_LIMIT = BLOCK_TX_GAS_LIMIT - BLOCK_TX_LIMIT * 0.1 - EXTRINSIC_BASE_COST; -// for author mapping -export const BOB_AUTHOR_ID = "0x8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48"; - // Weight per gas mapping export const WEIGHT_PER_GAS = 1_000_000_000_000n / 40_000_000n; -export const GAS_PRICE = "0x" + (1_000_000_000).toString(16); +export const MIN_GAS_PRICE = 1_000_000_000n; + +export const PRECOMPILE_PARACHAIN_STAKING_ADDRESS = "0x0000000000000000000000000000000000000800"; +export const PRECOMPILE_CROWDLOAN_REWARDS_ADDRESS = "0x0000000000000000000000000000000000000801"; +export const PRECOMPILE_NATIVE_ERC20_ADDRESS = "0x0000000000000000000000000000000000000802"; +export const PRECOMPILE_DEMOCRACY_ADDRESS = "0x0000000000000000000000000000000000000803"; +export const PRECOMPILE_XTOKENS_ADDRESS = "0x0000000000000000000000000000000000000804"; +export const PRECOMPILE_RELAY_ENCODER_ADDRESS = "0x0000000000000000000000000000000000000805"; +export const PRECOMPILE_XCM_TRANSACTOR_ADDRESS = "0x0000000000000000000000000000000000000806"; +export const PRECOMPILE_AUTHOR_MAPPING_ADDRESS = "0x0000000000000000000000000000000000000807"; +export const PRECOMPILE_BATCH_ADDRESS = "0x0000000000000000000000000000000000000808"; +export const PRECOMPILE_RANDOMNESS_ADDRESS = "0x0000000000000000000000000000000000000809"; + +export const MINUTES = 60 / 12; +export const HOURS = MINUTES * 60; +export const DAYS = HOURS * 24; + +export const CONTRACT_RANDOMNESS_STATUS_DOES_NOT_EXISTS = 0; +export const CONTRACT_RANDOMNESS_STATUS_PENDING = 1; +export const CONTRACT_RANDOMNESS_STATUS_READY = 2; +export const CONTRACT_RANDOMNESS_STATUS_EXPIRED = 3; diff --git a/tests/util/contracts.ts b/tests/util/contracts.ts index 1fa33784c7..88b7a5e6c5 100644 --- a/tests/util/contracts.ts +++ b/tests/util/contracts.ts @@ -1,11 +1,12 @@ -import { customWeb3Request } from "./providers"; +import Web3 from "web3"; +import fs from "fs"; +import path from "path"; import { TransactionReceipt } from "web3-core"; -import { AbiItem } from "web3-utils"; import { Contract } from "web3-eth-contract"; -import Web3 from "web3"; +import { AbiItem } from "web3-utils"; -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; -import { contractSources } from "../contracts/sources"; +import { alith, ALITH_PRIVATE_KEY } from "./accounts"; +import { customWeb3Request } from "./providers"; export interface Compiled { byteCode: string; @@ -13,41 +14,29 @@ export interface Compiled { sourceCode: string; } +export function getAllContracts(): string[] { + const contractsPath = path.join(__dirname, `../contracts/compiled/`); + const contracts = fs.readdirSync(contractsPath); + // Register all the contract code + return contracts.map((contract) => path.basename(contract, ".json")); +} + const contracts: { [name: string]: Compiled } = {}; -const contractObs: { [name: string]: ((Compiled) => void)[] } = {}; -export async function getCompiled(name: string): Promise { - if (!contractSources[name]) { +export function getCompiled(name: string): Compiled { + if (!fs.existsSync(path.join(__dirname, `../contracts/compiled/${name}.json`))) { throw new Error(`Contract name (${name}) doesn't exist in test suite`); } - if (contracts[name]) { - return contracts[name]; - } - const promise = new Promise((resolve) => { - const shouldLoad = !contractObs[name]; - if (!contractObs[name]) { - contractObs[name] = []; + if (!contracts[name]) { + try { + contracts[name] = require(`../contracts/compiled/${name}.json`); + } catch (e) { + throw new Error( + `Contract name ${name} is not compiled. Please run 'npm run pre-build-contracts` + ); } - contractObs[name].push(resolve); - if (shouldLoad) { - // Will load the contract async and callback all the promise waiting for this contract. - setImmediate(() => { - try { - contracts[name] = require(`../contracts/compiled/${name}.json`); - } catch (e) { - throw new Error( - `Contract name ${name} is not compiled. Please run 'npm run pre-build-contracts` - ); - } + } - // Call back all the pending promises and clear the list. - contractObs[name].forEach((resolvePending) => { - resolvePending(contracts[name]); - }); - delete contractObs[name]; - }); - } - }); - return promise; + return contracts[name]; } // Deploy and instantiate a contract with manuel seal @@ -55,8 +44,8 @@ export async function deployContractManualSeal( web3: Web3, contractByteCode: string, contractABI: AbiItem[], - account: string = GENESIS_ACCOUNT, - privateKey: string = GENESIS_ACCOUNT_PRIVATE_KEY + account: string = alith.address, + privateKey: string = ALITH_PRIVATE_KEY ): Promise { const tx = await web3.eth.accounts.signTransaction( { diff --git a/tests/util/dev-node.ts b/tests/util/dev-node.ts index e8027c739a..a2f1aa7153 100644 --- a/tests/util/dev-node.ts +++ b/tests/util/dev-node.ts @@ -1,13 +1,15 @@ +import { ChildProcess, spawn } from "child_process"; import tcpPortUsed from "tcp-port-used"; -import { spawn, ChildProcess } from "child_process"; + import { BINARY_PATH, DISPLAY_LOG, + ETHAPI_CMD, MOONBEAM_LOG, SPAWNING_TIME, - ETHAPI_CMD, WASM_RUNTIME_OVERRIDES, } from "./constants"; + const debug = require("debug")("test:dev-node"); export async function findAvailablePorts() { @@ -37,6 +39,8 @@ export async function findAvailablePorts() { }; } +export type RuntimeChain = "moonbase" | "moonriver" | "moonbeam"; + // Stores if the node has already started. // It is used when a test file contains multiple describeDevMoonbeam. Those are // executed within the same PID and so would generate a race condition if started @@ -45,7 +49,10 @@ let nodeStarted = false; // This will start a moonbeam dev node, only 1 at a time (check every 100ms). // This will prevent race condition on the findAvailablePorts which uses the PID of the process -export async function startMoonbeamDevNode(withWasm?: boolean): Promise<{ +export async function startMoonbeamDevNode( + withWasm?: boolean, + runtime: RuntimeChain = "moonbase" +): Promise<{ p2pPort: number; rpcPort: number; wsPort: number; @@ -67,17 +74,25 @@ export async function startMoonbeamDevNode(withWasm?: boolean): Promise<{ const cmd = BINARY_PATH; let args = [ withWasm ? `--execution=Wasm` : `--execution=Native`, // Faster execution using native + process.env.FORCE_COMPILED_WASM + ? `--wasm-execution=compiled` + : `--wasm-execution=interpreted-i-know-what-i-do`, ETHAPI_CMD != "" ? `${ETHAPI_CMD}` : `--ethapi=txpool`, + `--no-hardware-benchmarks`, `--no-telemetry`, `--no-prometheus`, - `--dev`, + `--force-authoring`, + `--rpc-cors=all`, + `--alice`, + `--chain=${runtime}-dev`, `--sealing=manual`, + `--in-peers=0`, + `--out-peers=0`, `-l${MOONBEAM_LOG}`, `--port=${p2pPort}`, `--rpc-port=${rpcPort}`, `--ws-port=${wsPort}`, `--tmp`, - `--wasm-execution=interpreted-i-know-what-i-do`, ]; if (WASM_RUNTIME_OVERRIDES != "") { args.push(`--wasm-runtime-overrides=${WASM_RUNTIME_OVERRIDES}`); @@ -117,7 +132,7 @@ export async function startMoonbeamDevNode(withWasm?: boolean): Promise<{ process.exit(1); }); - const binaryLogs = []; + const binaryLogs: any[] = []; await new Promise((resolve) => { const timer = setTimeout(() => { console.error(`\x1b[31m Failed to start Moonbeam Test Node.\x1b[0m`); @@ -127,7 +142,7 @@ export async function startMoonbeamDevNode(withWasm?: boolean): Promise<{ throw new Error("Failed to launch node"); }, SPAWNING_TIME - 2000); - const onData = async (chunk) => { + const onData = async (chunk: any) => { if (DISPLAY_LOG) { console.log(chunk.toString()); } diff --git a/tests/util/eth-transactions.ts b/tests/util/eth-transactions.ts new file mode 100644 index 0000000000..bf8d9a7626 --- /dev/null +++ b/tests/util/eth-transactions.ts @@ -0,0 +1,62 @@ +import { expect } from "chai"; +import { EventRecord } from "@polkadot/types/interfaces"; +import { + EvmCoreErrorExitReason, + EvmCoreErrorExitSucceed, + EvmCoreErrorExitError, + EvmCoreErrorExitRevert, + EvmCoreErrorExitFatal, +} from "@polkadot/types/lookup"; + +export type Errors = { + Succeed: EvmCoreErrorExitSucceed["type"]; + Error: EvmCoreErrorExitError["type"]; + Revert: EvmCoreErrorExitRevert["type"]; + Fatal: EvmCoreErrorExitFatal["type"]; +}; + +export function expectEVMResult( + events: EventRecord[], + resultType: Type, + reason?: T[Type] +) { + expect(events, `Missing events, probably failed execution`).to.be.length.at.least(1); + const ethereumResult = events.find( + ({ event: { section, method } }) => section == "ethereum" && method == "Executed" + ).event.data[3] as EvmCoreErrorExitReason; + + const foundReason = ethereumResult.isError + ? ethereumResult.asError.type + : ethereumResult.isFatal + ? ethereumResult.asFatal.type + : ethereumResult.isRevert + ? ethereumResult.asRevert.type + : ethereumResult.asSucceed.type; + + expect( + ethereumResult.type, + `Invalid EVM Execution - (${ethereumResult.type}.${foundReason})` + ).to.equal(resultType); + if (reason) { + if (ethereumResult.isError) { + expect( + ethereumResult.asError.type, + `Invalid EVM Execution ${ethereumResult.type} Reason` + ).to.equal(reason); + } else if (ethereumResult.isFatal) { + expect( + ethereumResult.asFatal.type, + `Invalid EVM Execution ${ethereumResult.type} Reason` + ).to.equal(reason); + } else if (ethereumResult.isRevert) { + expect( + ethereumResult.asRevert.type, + `Invalid EVM Execution ${ethereumResult.type} Reason` + ).to.equal(reason); + } else + expect( + ethereumResult.asSucceed.type, + `Invalid EVM Execution ${ethereumResult.type} Reason` + ).to.equal(reason); + } +} diff --git a/tests/util/expect.ts b/tests/util/expect.ts new file mode 100644 index 0000000000..9297577faa --- /dev/null +++ b/tests/util/expect.ts @@ -0,0 +1,26 @@ +import { BlockCreationResponse } from "./setup-dev-tests"; +import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types"; +import { expect } from "chai"; + +export async function expectOk< + ApiType extends ApiTypes, + Call extends + | SubmittableExtrinsic + | Promise> + | string + | Promise, + Calls extends Call | Call[] +>( + call: Promise< + BlockCreationResponse[] : Awaited> + > +) { + const block = await call; + if (Array.isArray(block.result)) { + block.result.forEach((r, idx) => { + expect(r.successful, `tx[${idx}] - ${r.error?.name}`).to.be.true; + }); + } else { + expect(block.result.successful, block.result.error?.name).to.be.true; + } +} diff --git a/tests/util/governance.ts b/tests/util/governance.ts index f6d4978f45..4e03aa37f9 100644 --- a/tests/util/governance.ts +++ b/tests/util/governance.ts @@ -1,17 +1,22 @@ -import { Keyring } from "@polkadot/api"; +import { ApiPromise } from "@polkadot/api"; import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types"; import { KeyringPair } from "@polkadot/keyring/types"; +import { PalletDemocracyReferendumInfo } from "@polkadot/types/lookup"; import { blake2AsHex } from "@polkadot/util-crypto"; -import { - ALITH_PRIV_KEY, - BALTATHAR_PRIV_KEY, - CHARLETH_PRIV_KEY, - DOROTHY_PRIV_KEY, -} from "./constants"; +import { expect } from "chai"; + +import { alith, baltathar, charleth, dorothy } from "./accounts"; import { DevTestContext } from "./setup-dev-tests"; -import { createBlockWithExtrinsic } from "./substrate-rpc"; -const keyring = new Keyring({ type: "ethereum" }); +export const COUNCIL_MEMBERS = [baltathar, charleth, dorothy]; +export const COUNCIL_THRESHOLD = Math.ceil((COUNCIL_MEMBERS.length * 2) / 3); +export const TECHNICAL_COMMITTEE_MEMBERS = [alith, baltathar]; +export const TECHNICAL_COMMITTEE_THRESHOLD = Math.ceil( + (TECHNICAL_COMMITTEE_MEMBERS.length * 2) / 3 +); + +// TODO: Refactor to support both instant sealing and parachain environment +// (using a waitOrCreateNextBlock common function) export const notePreimage = async < Call extends SubmittableExtrinsic, @@ -19,96 +24,188 @@ export const notePreimage = async < >( context: DevTestContext, proposal: Call, - account: KeyringPair + account: KeyringPair = alith ): Promise => { const encodedProposal = proposal.method.toHex() || ""; - await context.polkadotApi.tx.democracy.notePreimage(encodedProposal).signAndSend(account); - await context.createBlock(); + await context.createBlock( + context.polkadotApi.tx.democracy.notePreimage(encodedProposal).signAsync(account) + ); return blake2AsHex(encodedProposal); }; -export const execFromTwoThirdsOfCouncil = async < +// Creates the Council Proposal and fast track it before executing it +export const instantFastTrack = async < Call extends SubmittableExtrinsic, ApiType extends ApiTypes >( context: DevTestContext, - polkadotCall: Call -) => { - // Council members - const charleth = await keyring.addFromUri(CHARLETH_PRIV_KEY, null, "ethereum"); - const dorothy = await keyring.addFromUri(DOROTHY_PRIV_KEY, null, "ethereum"); + proposal: string | Call, + { votingPeriod, delayPeriod } = { votingPeriod: 2, delayPeriod: 0 } +): Promise => { + const proposalHash = + typeof proposal == "string" ? proposal : await notePreimage(context, proposal); + await execCouncilProposal( + context, + context.polkadotApi.tx.democracy.externalProposeMajority(proposalHash) + ); + await execTechnicalCommitteeProposal( + context, + context.polkadotApi.tx.democracy.fastTrack(proposalHash, votingPeriod, delayPeriod) + ); + return proposalHash; +}; +// Creates the Council Proposal +// Vote with the members (all members by default) +// Close it (Execute if successful) +export const execCouncilProposal = async < + Call extends SubmittableExtrinsic, + ApiType extends ApiTypes +>( + context: DevTestContext, + polkadotCall: Call, + voters: KeyringPair[] = COUNCIL_MEMBERS, + threshold: number = COUNCIL_THRESHOLD +) => { // Charleth submit the proposal to the council (and therefore implicitly votes for) let lengthBound = polkadotCall.encodedLength; - const { events: proposalEvents } = await createBlockWithExtrinsic( - context, - charleth, - context.polkadotApi.tx.councilCollective.propose(2, polkadotCall, lengthBound) + const { result: proposalResult } = await context.createBlock( + context.polkadotApi.tx.councilCollective + .propose(threshold, polkadotCall, lengthBound) + .signAsync(charleth) ); - const proposalHash = proposalEvents - .find((e) => e.method.toString() == "Proposed") - .data[2].toHex() as string; + + if (threshold <= 1) { + // Proposal are automatically executed on threshold <= 1 + return proposalResult; + } + + expect(proposalResult.successful, `Council proposal refused: ${proposalResult?.error?.name}`).to + .be.true; + const proposalHash = proposalResult.events + .find(({ event: { method } }) => method.toString() == "Proposed") + .event.data[2].toHex() as string; // Dorothy vote for this proposal and close it - await Promise.all([ - context.polkadotApi.tx.councilCollective.vote(proposalHash, 0, true).signAndSend(charleth), - context.polkadotApi.tx.councilCollective.vote(proposalHash, 0, true).signAndSend(dorothy), - ]); - await context.createBlock(); - return await createBlockWithExtrinsic( - context, - dorothy, - context.polkadotApi.tx.councilCollective.close(proposalHash, 0, 1_000_000_000, lengthBound) + await Promise.all( + voters.map((voter) => + context.polkadotApi.tx.councilCollective.vote(proposalHash, 0, true).signAndSend(voter) + ) + ); + await context.createBlock(); + return await context.createBlock( + context.polkadotApi.tx.councilCollective + .close(proposalHash, 0, 1_000_000_000, lengthBound) + .signAsync(dorothy) ); }; -export const execFromAllMembersOfTechCommittee = async < +// Creates the Technical Committee Proposal +// Vote with the members (all members by default) +// Close it (Execute if successful) +export const execTechnicalCommitteeProposal = async < Call extends SubmittableExtrinsic, ApiType extends ApiTypes >( context: DevTestContext, - polkadotCall: Call + polkadotCall: Call, + voters: KeyringPair[] = TECHNICAL_COMMITTEE_MEMBERS, + threshold: number = TECHNICAL_COMMITTEE_THRESHOLD ) => { // Tech committee members - const alith = await keyring.addFromUri(ALITH_PRIV_KEY, null, "ethereum"); - const baltathar = await keyring.addFromUri(BALTATHAR_PRIV_KEY, null, "ethereum"); // Alith submit the proposal to the council (and therefore implicitly votes for) let lengthBound = polkadotCall.encodedLength; - const { events: proposalEvents } = await createBlockWithExtrinsic( - context, - alith, - context.polkadotApi.tx.techCommitteeCollective.propose(2, polkadotCall, lengthBound) + const { result: proposalResult } = await context.createBlock( + context.polkadotApi.tx.techCommitteeCollective.propose(threshold, polkadotCall, lengthBound) ); - const proposalHash = proposalEvents - .find((e) => e.method.toString() == "Proposed") - .data[2].toHex() as string; + + if (threshold <= 1) { + // Proposal are automatically executed on threshold <= 1 + return proposalResult; + } + + expect(proposalResult.successful, `Council proposal refused: ${proposalResult?.error?.name}`).to + .be.true; + const proposalHash = proposalResult.events + .find(({ event: { method } }) => method.toString() == "Proposed") + .event.data[2].toHex() as string; // Get proposal count const proposalCount = await context.polkadotApi.query.techCommitteeCollective.proposalCount(); - // Alith, Baltathar vote for this proposal and close it - await Promise.all([ - context.polkadotApi.tx.techCommitteeCollective - .vote(proposalHash, Number(proposalCount) - 1, true) - .signAndSend(alith), + await context.createBlock( + voters.map((voter) => + context.polkadotApi.tx.techCommitteeCollective + .vote(proposalHash, Number(proposalCount) - 1, true) + .signAsync(voter) + ) + ); + const { result: closeResult } = await context.createBlock( context.polkadotApi.tx.techCommitteeCollective - .vote(proposalHash, Number(proposalCount) - 1, true) - .signAndSend(baltathar), + .close(proposalHash, Number(proposalCount) - 1, 1_000_000_000, lengthBound) + .signAsync(baltathar) + ); + return closeResult; +}; + +export const executeProposalWithCouncil = async (api: ApiPromise, encodedHash: string) => { + let nonce = (await api.rpc.system.accountNextIndex(alith.address)).toNumber(); + let referendumNextIndex = (await api.query.democracy.referendumCount()).toNumber(); + + // process.stdout.write( + // `Sending council motion (${encodedHash} ` + + // `[threashold: 1, expected referendum: ${referendumNextIndex}])...` + // ); + let external = api.tx.democracy.externalProposeMajority(encodedHash); + let fastTrack = api.tx.democracy.fastTrack(encodedHash, 1, 0); + const voteAmount = 1n * 10n ** BigInt(api.registry.chainDecimals[0]); + + process.stdout.write(`Sending motion + fast-track + vote for ${encodedHash}...`); + await Promise.all([ + api.tx.councilCollective + .propose(1, external, external.length) + .signAndSend(alith, { nonce: nonce++ }), + api.tx.techCommitteeCollective + .propose(1, fastTrack, fastTrack.length) + .signAndSend(alith, { nonce: nonce++ }), + api.tx.democracy + .vote(referendumNextIndex, { + Standard: { + balance: voteAmount, + vote: { aye: true, conviction: 1 }, + }, + }) + .signAndSend(alith, { nonce: nonce++ }), ]); + process.stdout.write(`✅\n`); - await context.createBlock(); - await context.createBlock(); - return await createBlockWithExtrinsic( - context, - baltathar, - context.polkadotApi.tx.techCommitteeCollective.close( - proposalHash, - Number(proposalCount) - 1, - 1_000_000_000, - lengthBound - ) - ); + process.stdout.write(`Waiting for referendum [${referendumNextIndex}] to be executed...`); + let referenda: PalletDemocracyReferendumInfo = null; + while (!referenda) { + referenda = (await api.query.democracy.referendumInfoOf.entries()) + .find( + (ref) => + ref[1].unwrap().isFinished && + api.registry.createType("u32", ref[0].toU8a().slice(-4)).toNumber() == referendumNextIndex + )?.[1] + .unwrap(); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } + process.stdout.write(`${referenda.asFinished.approved ? `✅` : `❌`} \n`); + if (!referenda.asFinished.approved) { + process.exit(1); + } +}; + +export const cancelReferendaWithCouncil = async (api: ApiPromise, refIndex: number) => { + const proposal = api.tx.democracy.cancelReferendum(refIndex); + const encodedProposal = proposal.method.toHex(); + const encodedHash = blake2AsHex(encodedProposal); + + let nonce = (await api.rpc.system.accountNextIndex(alith.address)).toNumber(); + await api.tx.democracy.notePreimage(encodedProposal).signAndSend(alith, { nonce: nonce++ }); + await executeProposalWithCouncil(api, encodedHash); }; diff --git a/tests/util/logging.ts b/tests/util/logging.ts index b71a2e229f..c63ae0c302 100644 --- a/tests/util/logging.ts +++ b/tests/util/logging.ts @@ -1,4 +1,5 @@ import { ApiPromise } from "@polkadot/api"; +import { mapExtrinsics } from "./block"; export function log(...msg: any[]) { if (process.argv && process.argv[2] && process.argv[2] === "--printlogs") { @@ -14,3 +15,32 @@ export const printTokens = (api: ApiPromise, tokens: bigint, decimals = 2, pad = .toString() .padStart(pad)} ${api.registry.chainTokens[0]}`; }; + +export const printEvents = async (api: ApiPromise, blockHash?: string) => { + blockHash = blockHash != undefined ? blockHash : (await api.rpc.chain.getBlockHash()).toString(); + const apiAt = await api.at(blockHash); + const { block } = await api.rpc.chain.getBlock(blockHash); + const allRecords = (await apiAt.query.system.events()) as any; + + const txsWithEvents = mapExtrinsics(block.extrinsics, allRecords); + + console.log(`===== Block #${block.header.number.toString()}: ${blockHash}`); + console.log(block.header.toHuman()); + console.log( + txsWithEvents + .map( + ({ extrinsic, events }, i) => + ` [${i}]: ${extrinsic.method.section.toString()}. ` + + `${extrinsic.method.method.toString()}\n` + + ` - 0x${Buffer.from(extrinsic.data).toString("hex")}\n${events + .map( + (event) => + ` * ${event.section.toString()}.${event.method.toString()}:\n${event.data + .map((datum) => ` - ${datum.toHex()}`) + .join("\n")}` + ) + .join("\n")}` + ) + .join("\n") + ); +}; diff --git a/tests/util/para-node.ts b/tests/util/para-node.ts index 3c30f9020e..570940aa99 100644 --- a/tests/util/para-node.ts +++ b/tests/util/para-node.ts @@ -1,17 +1,48 @@ -import tcpPortUsed from "tcp-port-used"; -import path from "path"; -import fs from "fs"; import child_process from "child_process"; +import fs from "fs"; +import path from "path"; import { killAll, run } from "polkadot-launch"; +import tcpPortUsed from "tcp-port-used"; + import { BINARY_PATH, DISPLAY_LOG, OVERRIDE_RUNTIME_PATH, RELAY_BINARY_PATH, RELAY_CHAIN_NODE_NAMES, + RELAY_LOG, } from "./constants"; + const debug = require("debug")("test:para-node"); +const PORT_PREFIX = process.env.PORT_PREFIX && parseInt(process.env.PORT_PREFIX); +const NODE_KEYS: { key: string; id: string }[] = [ + { + key: "0x0000000000000000000000000000000000000000000000000000000000000000", + id: "12D3KooWDpJ7As7BWAwRMfu1VU2WCqNjvq387JEYKDBj4kx6nXTN", + }, + { + key: "0x1111111111111111111111111111111111111111111111111111111111111111", + id: "12D3KooWPqT2nMDSiXUSx5D7fasaxhxKigVhcqfkKqrLghCq9jxz", + }, + { + key: "0x2222222222222222222222222222222222222222222222222222222222222222", + id: "12D3KooWLdJAwPtyQ5RFnr9wGXsQzpf3P2SeqFbYkqbfVehLu4Ns", + }, + { + key: "0x3333333333333333333333333333333333333333333333333333333333333333", + id: "12D3KooWBRFW3HkJCLKSWb4yG6iWRBpgNjbM4FFvNsL5T5JKTqrd", + }, + { + key: "0x4444444444444444444444444444444444444444444444444444444444444444", + id: "12D3KooWQJzxKtEUvbt9BZ1uJyAMw2WSEQSShp4my4c3iikhW8Cf", + }, + { + key: "0x5555555555555555555555555555555555555555555555555555555555555555", + id: "12D3KooWPBFzpNemfrwjMSTSENKAC6cDHxE2RXojcMJRwMtitDms", + }, +]; + export async function findAvailablePorts(parachainCount: number = 1) { // 2 nodes per prachain, and as many relaychain nodes const relayCount = parachainCount + 1; @@ -19,6 +50,21 @@ export async function findAvailablePorts(parachainCount: number = 1) { const paraEmbeddedNodeCount = paraNodeCount; // 2 nodes each; const nodeCount = relayCount + paraNodeCount + paraEmbeddedNodeCount; const portCount = nodeCount * 3; + + if (PORT_PREFIX) { + return [ + ...new Array(relayCount).fill(0).map((_, index) => ({ + p2pPort: PORT_PREFIX * 1000 + 10 * index, + rpcPort: PORT_PREFIX * 1000 + 10 * index + 1, + wsPort: PORT_PREFIX * 1000 + 10 * index + 2, + })), + ...new Array(paraNodeCount + paraEmbeddedNodeCount).fill(0).map((_, index) => ({ + p2pPort: PORT_PREFIX * 1000 + 100 + 10 * index, + rpcPort: PORT_PREFIX * 1000 + 100 + 10 * index + 1, + wsPort: PORT_PREFIX * 1000 + 100 + 10 * index + 2, + })), + ]; + } const availablePorts = await Promise.all( new Array(portCount).fill(0).map(async (_, index) => { let selectedPort = 0; @@ -57,6 +103,7 @@ export async function findAvailablePorts(parachainCount: number = 1) { let nodeStarted = false; export type ParaRuntimeOpt = { + chain: "moonbase-local" | "moonriver-local" | "moonbeam-local"; // specify the version of the runtime using tag. Ex: "runtime-1103" // "local" uses // target/release/wbuild/-runtime/_runtime.compact.compressed.wasm @@ -70,11 +117,11 @@ export type ParaSpecOpt = { export type ParaTestOptions = { parachain: (ParaRuntimeOpt | ParaSpecOpt) & { - chain: "moonbase-local" | "moonriver-local" | "moonbeam-local"; // specify the version of the binary using tag. Ex: "v0.18.1" // "local" uses target/release/moonbeam binary binary?: "local" | string; }; + paraId?: number; relaychain?: { chain?: "rococo-local" | "westend-local" | "kusama-local" | "polkadot-local"; // specify the version of the binary using tag. Ex: "v0.9.13" @@ -101,7 +148,7 @@ const SPECS_DIRECTORY = process.env.SPECS_DIRECTORY || "specs"; // Downloads the runtime and return the filepath export async function getRuntimeWasm( runtimeName: "moonbase" | "moonriver" | "moonbeam", - runtimeTag: string + runtimeTag: "local" | string ): Promise { const runtimePath = path.join(RUNTIME_DIRECTORY, `${runtimeName}-${runtimeTag}.wasm`); @@ -221,7 +268,7 @@ export async function generateRawSpecs( } // log listeners to kill at the end; -const logListener = []; +const logListener: child_process.ChildProcessWithoutNullStreams[] = []; // This will start a parachain node, only 1 at a time (check every 100ms). // This will prevent race condition on the findAvailablePorts which uses the PID of the process @@ -250,7 +297,12 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ const ports = await findAvailablePorts(numberOfParachains); //Build hrmpChannels, all connected to first parachain - const hrmpChannels = []; + const hrmpChannels: { + sender: number; + recipient: number; + maxCapacity: number; + maxMessageSize: number; + }[] = []; new Array(numberOfParachains - 1).fill(0).forEach((_, i) => { hrmpChannels.push({ sender: 1000, @@ -266,7 +318,6 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ }); }); - const paraChain = options.parachain.chain || "moonbase-local"; const paraBinary = !options.parachain.binary || options.parachain.binary == "local" ? BINARY_PATH @@ -275,8 +326,11 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ "spec" in options.parachain ? options.parachain.spec : !("runtime" in options.parachain) || options.parachain.runtime == "local" - ? await generateRawSpecs(paraBinary, paraChain) - : await getRawSpecsFromTag(paraChain.split("-")[0] as any, options.parachain.runtime); + ? await generateRawSpecs(paraBinary, options.parachain.chain || "moonbase-local") + : await getRawSpecsFromTag( + (options.parachain.chain || "moonbase-local").split("-")[0] as any, + options.parachain.runtime + ); const relayChain = options.relaychain?.chain || "rococo-local"; const relayBinary = @@ -292,34 +346,13 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ config: { validation_upgrade_frequency: 2, validation_upgrade_delay: 30, - }, - }, - }, - }, - }, - "v0.9.16": { - runtime: { - runtime_genesis_config: { - configuration: { - config: { - validation_upgrade_delay: 30, - }, - }, - }, - }, - }, - "v0.9.18": { - runtime: { - runtime_genesis_config: { - configuration: { - config: { validation_upgrade_cooldown: 30, }, }, }, }, }, - local: { + "v0.9.16": { runtime: { runtime_genesis_config: { configuration: { @@ -332,7 +365,7 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ }, }, }; - const genesis = RELAY_GENESIS_PER_VERSION[options?.relaychain?.binary] || {}; + const genesis = (RELAY_GENESIS_PER_VERSION as any)[options?.relaychain?.binary] || {}; // Build launchConfig const launchConfig = { relaychain: { @@ -340,17 +373,28 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ chain: relayChain, nodes: new Array(numberOfParachains + 1).fill(0).map((_, i) => { return { + nodeKey: NODE_KEYS[2 + i].key, name: RELAY_CHAIN_NODE_NAMES[i], port: ports[i].p2pPort, rpcPort: ports[i].rpcPort, wsPort: ports[i].wsPort, - flags: ["--wasm-execution=interpreted-i-know-what-i-do"], + flags: [ + process.env.FORCE_COMPILED_WASM + ? `--wasm-execution=compiled` + : `--wasm-execution=interpreted-i-know-what-i-do`, + RELAY_LOG + ? `--log=${RELAY_LOG}` + : "--log=parachain::candidate-backing=trace,parachain::candidate-selection=trace," + + "parachain::pvf=trace,parachain::collator-protocol=trace," + + "parachain::provisioner=trace", + ], }; }), genesis, }, parachains: parachainArray.map((_, i) => { return { + id: options.paraId || 1000, bin: paraBinary, chain: paraSpecs, nodes: [ @@ -358,22 +402,30 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ port: ports[i * 4 + numberOfParachains + 1].p2pPort, rpcPort: ports[i * 4 + numberOfParachains + 1].rpcPort, wsPort: ports[i * 4 + numberOfParachains + 1].wsPort, + nodeKey: NODE_KEYS[i * 2 + numberOfParachains + 1].key, name: "alice", flags: [ - "--log=info,rpc=info,evm=trace,ethereum=trace,author=trace", + "--log=info,evm=trace,ethereum=trace,sc_basic_authorship=trace,author=trace," + + "cumulus-consensus=trace,cumulus-collator=trace,collator_protocol=trace," + + "collation_generation=trace,filtering=trace", "--unsafe-rpc-external", "--execution=wasm", - "--wasm-execution=interpreted-i-know-what-i-do", + "--no-hardware-benchmarks", + process.env.FORCE_COMPILED_WASM + ? `--wasm-execution=compiled` + : `--wasm-execution=interpreted-i-know-what-i-do`, "--no-prometheus", "--no-telemetry", "--rpc-cors=all", "--", "--execution=wasm", - "--wasm-execution=interpreted-i-know-what-i-do", + "--no-hardware-benchmarks", + process.env.FORCE_COMPILED_WASM + ? `--wasm-execution=compiled` + : `--wasm-execution=interpreted-i-know-what-i-do`, "--no-mdns", "--no-prometheus", "--no-telemetry", - "--no-private-ipv4", `--port=${ports[i * 4 + numberOfParachains + 2].p2pPort}`, `--rpc-port=${ports[i * 4 + numberOfParachains + 2].rpcPort}`, `--ws-port=${ports[i * 4 + numberOfParachains + 2].wsPort}`, @@ -383,31 +435,35 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ port: ports[i * 4 + numberOfParachains + 3].p2pPort, rpcPort: ports[i * 4 + numberOfParachains + 3].rpcPort, wsPort: ports[i * 4 + numberOfParachains + 3].wsPort, + nodeKey: NODE_KEYS[i * 2 + numberOfParachains + 3].key, name: "bob", flags: [ - "--log=info,rpc=info,evm=trace,ethereum=trace,author=trace", + "--log=info,rpc=debug,evm=trace,ethereum=trace,sc_basic_authorship=trace," + + "cumulus-consensus=trace,cumulus-collator=trace,collator_protocol=trace," + + "collation_generation=trace,author=trace,filtering=trace", "--unsafe-rpc-external", "--execution=wasm", "--wasm-execution=interpreted-i-know-what-i-do", + "--no-hardware-benchmarks", "--no-prometheus", "--no-telemetry", "--rpc-cors=all", "--", "--execution=wasm", "--wasm-execution=interpreted-i-know-what-i-do", + "--no-hardware-benchmarks", "--no-mdns", "--no-prometheus", "--no-telemetry", - "--no-private-ipv4", `--port=${ports[i * 4 + numberOfParachains + 4].p2pPort}`, `--rpc-port=${ports[i * 4 + numberOfParachains + 4].rpcPort}`, `--ws-port=${ports[i * 4 + numberOfParachains + 4].wsPort}`, ], }, - ], + ].filter((_, i) => !process.env.SINGLE_PARACHAIN_NODE || i < 1), }; }), - simpleParachains: [], + simpleParachains: [] as any[], hrmpChannels: hrmpChannels, finalization: true, }; @@ -441,15 +497,25 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ parachainArray.forEach(async (_, i) => { const filenameNode1 = `${ports[i * 4 + numberOfParachains + 1].wsPort}.log`; listenTo(filenameNode1, `para-${i}-0`); - const filenameNode2 = `${ports[i * 4 + numberOfParachains + 1].wsPort}.log`; - listenTo(filenameNode2, `para-${i}-1`); + if (!process.env.SINGLE_PARACHAIN_NODE) { + const filenameNode2 = `${ports[i * 4 + numberOfParachains + 3].wsPort}.log`; + listenTo(filenameNode2, `para-${i}-1`); + } }); } + let raceTimer; await Promise.race([ runPromise, - new Promise((_, reject) => setTimeout(() => reject(new Error("timeout")), 60000)), + new Promise( + (_, reject) => + (raceTimer = setTimeout( + () => reject(new Error("timeout")), + "spec" in options.parachain ? 12000000 : 60000 + )) + ), ]); + clearTimeout(raceTimer); return { relayPorts: new Array(numberOfParachains + 1).fill(0).map((_, i) => { @@ -474,7 +540,7 @@ export async function startParachainNodes(options: ParaTestOptions): Promise<{ rpcPort: ports[i * 4 + numberOfParachains + 3].rpcPort, wsPort: ports[i * 4 + numberOfParachains + 3].wsPort, }, - ], + ].filter((_, i) => !process.env.SINGLE_PARACHAIN_NODE || i < 1), }; }), }; diff --git a/tests/util/providers.ts b/tests/util/providers.ts index a8a1ffa10e..709ee13b52 100644 --- a/tests/util/providers.ts +++ b/tests/util/providers.ts @@ -1,12 +1,14 @@ -import Web3 from "web3"; import { ApiPromise, WsProvider } from "@polkadot/api"; -import { typesBundlePre900 } from "../../moonbeam-types-bundle"; -import { JsonRpcResponse } from "web3-core-helpers"; import { ethers } from "ethers"; -import { GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; +import Web3 from "web3"; +import { Log } from "web3-core"; +import { JsonRpcResponse } from "web3-core-helpers"; import { Subscription as Web3Subscription } from "web3-core-subscriptions"; import { BlockHeader } from "web3-eth"; -import { Log } from "web3-core"; + +import { typesBundlePre900 } from "moonbeam-types-bundle"; +import { alith, ALITH_PRIVATE_KEY } from "./accounts"; +import { MIN_GAS_PRICE } from "./constants"; export async function customWeb3Request(web3: Web3, method: string, params: any[]) { return new Promise((resolve, reject) => { @@ -34,6 +36,31 @@ export async function customWeb3Request(web3: Web3, method: string, params: any[ }); } +export interface Web3EthCallOptions { + from?: string | number; + to: string; + value?: number | string | bigint; + gas?: number | string; + gasPrice?: number | string | bigint; + maxPriorityFeePerGas?: number | string | bigint; + maxFeePerGas?: number | string | bigint; + data?: string; + nonce?: number; +} + +export async function web3EthCall(web3: Web3, options: Web3EthCallOptions) { + return await customWeb3Request(web3, "eth_call", [ + { + from: options.from == undefined ? options.from : alith.address, + value: options.value, + gas: options.gas == undefined ? options.gas : 256000, + gasPrice: options.gas == undefined ? options.gas : `0x${MIN_GAS_PRICE}`, + to: options.to, + data: options.data, + }, + ]); +} + // Extra type because web3 is not well typed export interface Subscription extends Web3Subscription { once: (type: "data" | "connected", handler: (data: T) => void) => Subscription; @@ -62,7 +89,7 @@ export const provideWeb3Api = async (port: number, protocol: "ws" | "http" = "ht : new Web3(`http://localhost:${port}`); // Adding genesis account for convenience - web3.eth.accounts.wallet.add(GENESIS_ACCOUNT_PRIVATE_KEY); + web3.eth.accounts.wallet.add(ALITH_PRIVATE_KEY); // Hack to add customRequest method. (web3 as any).customRequest = (method: string, params: any[]) => diff --git a/tests/util/setup-dev-tests.ts b/tests/util/setup-dev-tests.ts index aee9870983..92871e7f2e 100644 --- a/tests/util/setup-dev-tests.ts +++ b/tests/util/setup-dev-tests.ts @@ -1,26 +1,43 @@ import { ApiPromise } from "@polkadot/api"; -import { JsonRpcResponse } from "web3-core-helpers"; -import type { BlockHash } from "@polkadot/types/interfaces/chain/types"; - +import { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types"; +import { EventRecord } from "@polkadot/types/interfaces"; +import { RegistryError } from "@polkadot/types/types"; +import { ChildProcess } from "child_process"; import { ethers } from "ethers"; -import { startMoonbeamDevNode } from "./dev-node"; +import { HttpProvider } from "web3-core"; + +import { alith } from "./accounts"; +import { createAndFinalizeBlock } from "./block"; +import { DEBUG_MODE, SPAWNING_TIME } from "./constants"; +import { RuntimeChain, startMoonbeamDevNode } from "./dev-node"; import { - provideWeb3Api, + customWeb3Request, + EnhancedWeb3, provideEthersApi, providePolkadotApi, - EnhancedWeb3, - customWeb3Request, + provideWeb3Api, } from "./providers"; -import { ChildProcess } from "child_process"; -import { createAndFinalizeBlock } from "./block"; -import { SPAWNING_TIME, DEBUG_MODE } from "./constants"; -import { HttpProvider } from "web3-core"; +import { extractError, ExtrinsicCreation } from "./substrate-rpc"; + +import type { BlockHash } from "@polkadot/types/interfaces/chain/types"; const debug = require("debug")("test:setup"); export interface BlockCreation { - parentHash?: BlockHash; + parentHash?: string; finalize?: boolean; - transactions?: string[]; +} + +export interface BlockCreationResponse< + ApiType extends ApiTypes, + Call extends SubmittableExtrinsic | string | (SubmittableExtrinsic | string)[] +> { + block: { + duration: number; + hash: string; + }; + result: Call extends (string | SubmittableExtrinsic)[] + ? ExtrinsicCreation[] + : ExtrinsicCreation; } export interface DevTestContext { @@ -28,13 +45,20 @@ export interface DevTestContext { createEthers: () => Promise; createPolkadotApi: () => Promise; - createBlock: (options?: BlockCreation) => Promise<{ - txResults: JsonRpcResponse[]; - block: { - duration: number; - hash: BlockHash; - }; - }>; + createBlock< + ApiType extends ApiTypes, + Call extends + | SubmittableExtrinsic + | Promise> + | string + | Promise, + Calls extends Call | Call[] + >( + transactions?: Calls, + options?: BlockCreation + ): Promise< + BlockCreationResponse[] : Awaited> + >; // We also provided singleton providers for simplicity web3: EnhancedWeb3; @@ -55,6 +79,7 @@ export function describeDevMoonbeam( title: string, cb: (context: DevTestContext) => void, ethTransactionType: EthTransactionType = "Legacy", + runtime: RuntimeChain = "moonbase", withWasm?: boolean ) { describe(title, function () { @@ -72,7 +97,7 @@ export function describeDevMoonbeam( before("Starting Moonbeam Test Node", async function () { this.timeout(SPAWNING_TIME); const init = !DEBUG_MODE - ? await startMoonbeamDevNode(withWasm) + ? await startMoonbeamDevNode(withWasm, runtime) : { runningNode: null, p2pPort: 19931, @@ -116,16 +141,102 @@ export function describeDevMoonbeam( context.web3 = await context.createWeb3(); context.ethers = await context.createEthers(); - context.createBlock = async (options: BlockCreation = {}) => { - let { parentHash, finalize, transactions = [] } = options; + context.createBlock = async < + ApiType extends ApiTypes, + Call extends + | SubmittableExtrinsic + | Promise> + | string + | Promise, + Calls extends Call | Call[] + >( + transactions?: Calls, + options: BlockCreation = {} + ) => { + const results: ({ type: "eth"; hash: string } | { type: "sub"; hash: string })[] = []; + const txs = + transactions == undefined + ? [] + : Array.isArray(transactions) + ? transactions + : [transactions]; + for await (const call of txs) { + if (typeof call == "string") { + // Ethereum + results.push({ + type: "eth", + hash: (await customWeb3Request(context.web3, "eth_sendRawTransaction", [call])) + .result, + }); + } else if (call.isSigned) { + results.push({ + type: "sub", + hash: (await call.send()).toString(), + }); + } else { + results.push({ + type: "sub", + hash: (await call.signAndSend(alith)).toString(), + }); + } + } + + const { parentHash, finalize } = options; + const blockResult = await createAndFinalizeBlock(context.polkadotApi, parentHash, finalize); + + // No need to extract events if no transactions + if (results.length == 0) { + return { + block: blockResult, + result: null, + }; + } + + // We retrieve the events for that block + const allRecords: EventRecord[] = (await ( + await context.polkadotApi.at(blockResult.hash) + ).query.system.events()) as any; + // We retrieve the block (including the extrinsics) + const blockData = await context.polkadotApi.rpc.chain.getBlock(blockResult.hash); + + const result: ExtrinsicCreation[] = results.map((result) => { + const extrinsicIndex = + result.type == "eth" + ? allRecords + .find( + ({ phase, event: { section, method, data } }) => + phase.isApplyExtrinsic && + section == "ethereum" && + method == "Executed" && + data[2].toString() == result.hash + ) + ?.phase?.asApplyExtrinsic?.toNumber() + : blockData.block.extrinsics.findIndex((ext) => ext.hash.toHex() == result.hash); + // We retrieve the events associated with the extrinsic + const events = allRecords.filter( + ({ phase }) => + phase.isApplyExtrinsic && phase.asApplyExtrinsic.toNumber() === extrinsicIndex + ); + const failure = extractError(events); + return { + extrinsic: extrinsicIndex >= 0 ? blockData.block.extrinsics[extrinsicIndex] : null, + events, + error: + failure && + ((failure.isModule && context.polkadotApi.registry.findMetaError(failure.asModule)) || + ({ name: failure.toString() } as RegistryError)), + successful: extrinsicIndex !== undefined && !failure, + hash: result.hash, + }; + }); - let txResults = await Promise.all( - transactions.map((t) => customWeb3Request(context.web3, "eth_sendRawTransaction", [t])) - ); - const block = await createAndFinalizeBlock(context.polkadotApi, parentHash, finalize); + // Adds extra time to avoid empty transaction when querying it + if (results.find((r) => r.type == "eth")) { + await new Promise((resolve) => setTimeout(resolve, 2)); + } return { - txResults, - block, + block: blockResult, + result: Array.isArray(transactions) ? result : (result[0] as any), }; }; @@ -159,7 +270,7 @@ export function describeDevMoonbeamAllEthTxTypes( withWasm?: boolean ) { let wasm = withWasm !== undefined ? withWasm : false; - describeDevMoonbeam(title + " (Legacy)", cb, "Legacy", wasm); - describeDevMoonbeam(title + " (EIP1559)", cb, "EIP1559", wasm); - describeDevMoonbeam(title + " (EIP2930)", cb, "EIP2930", wasm); + describeDevMoonbeam(title + " (Legacy)", cb, "Legacy", "moonbase", wasm); + describeDevMoonbeam(title + " (EIP1559)", cb, "EIP1559", "moonbase", wasm); + describeDevMoonbeam(title + " (EIP2930)", cb, "EIP2930", "moonbase", wasm); } diff --git a/tests/util/setup-para-tests.ts b/tests/util/setup-para-tests.ts index bac2a7fe73..ac99e6b784 100644 --- a/tests/util/setup-para-tests.ts +++ b/tests/util/setup-para-tests.ts @@ -1,27 +1,34 @@ import "@polkadot/api-augment"; + import { ApiPromise } from "@polkadot/api"; +import { KeyringPair } from "@polkadot/keyring/types"; +import { blake2AsHex } from "@polkadot/util-crypto"; +import chalk from "chalk"; import { ethers } from "ethers"; -import { provideWeb3Api, provideEthersApi, providePolkadotApi, EnhancedWeb3 } from "./providers"; -import { DEBUG_MODE } from "./constants"; -import { HttpProvider } from "web3-core"; +import { sha256 } from "ethers/lib/utils"; import fs from "fs"; -import chalk from "chalk"; +import { HttpProvider } from "web3-core"; + +import { DEBUG_MODE } from "./constants"; +import { cancelReferendaWithCouncil, executeProposalWithCouncil } from "./governance"; import { getRuntimeWasm, NodePorts, - ParaTestOptions, ParachainPorts, + ParaTestOptions, startParachainNodes, stopParachainNodes, } from "./para-node"; -import { KeyringPair } from "@substrate/txwrapper-core"; -import { sha256 } from "ethers/lib/utils"; +import { EnhancedWeb3, provideEthersApi, providePolkadotApi, provideWeb3Api } from "./providers"; + const debug = require("debug")("test:setup"); +const PORT_PREFIX = (process.env.PORT_PREFIX && parseInt(process.env.PORT_PREFIX)) || 19; + export interface ParaTestContext { createWeb3: (protocol?: "ws" | "http") => Promise; createEthers: () => Promise; - createPolkadotApiParachain: (parachainNumber) => Promise; + createPolkadotApiParachain: (parachainNumber: number) => Promise; createPolkadotApiParachains: () => Promise; createPolkadotApiRelaychains: () => Promise; waitBlocks: (count: number) => Promise; // return current block when the promise resolves @@ -29,7 +36,7 @@ export interface ParaTestContext { from: KeyringPair, runtimeName: "moonbase" | "moonriver" | "moonbeam", runtimeVersion: string, - waitMigration?: boolean + options?: { waitMigration?: boolean; useGovernance?: boolean } ) => Promise; blockNumber: number; @@ -57,7 +64,7 @@ export function describeParachain( ) { describe(title, function () { // Set timeout to 5000 for all tests. - this.timeout(300000); + this.timeout("spec" in options.parachain ? 3600000 : 300000); // The context is initialized empty to allow passing a reference // and to be filled once the node information is retrieved @@ -65,7 +72,6 @@ export function describeParachain( // Making sure the Moonbeam node has started before("Starting Moonbeam Test Node", async function () { - this.timeout(300000); try { const init = !DEBUG_MODE ? await startParachainNodes(options) @@ -75,9 +81,9 @@ export function describeParachain( parachainId: 1000, ports: [ { - p2pPort: 19931, - wsPort: 19933, - rpcPort: 19932, + p2pPort: PORT_PREFIX * 1000 + 100, + wsPort: PORT_PREFIX * 1000 + 102, + rpcPort: PORT_PREFIX * 1000 + 101, }, ], }, @@ -90,6 +96,7 @@ export function describeParachain( context._polkadotApiParachains = []; context._polkadotApiRelaychains = []; context._web3Providers = []; + context.blockNumber = 0; context.createWeb3 = async (protocol: "ws" | "http" = "http") => { const provider = @@ -154,8 +161,11 @@ export function describeParachain( return apiPromises[0]; }; - let pendingPromises = []; - const subBlocks = async (api) => { + let pendingCallbacks: { + blockNumber: number; + resolve: (blockNumber: number) => void; + }[] = []; + const subBlocks = async (api: ApiPromise) => { return api.rpc.chain.subscribeNewHeads(async (header) => { context.blockNumber = header.number.toNumber(); if (context.blockNumber == 0) { @@ -163,13 +173,14 @@ export function describeParachain( `Start listening for new blocks. Production will start in ${chalk.red(`1 minute`)}` ); } + debug(`New block: #${context.blockNumber}`); - let i = pendingPromises.length; + let i = pendingCallbacks.length; while (i--) { - const pendingPromise = pendingPromises[i]; - if (pendingPromise.blockNumber <= context.blockNumber) { - pendingPromises.splice(i, 1); - pendingPromise.resolve(context.blockNumber); + const pendingCallback = pendingCallbacks[i]; + if (pendingCallback.blockNumber <= context.blockNumber) { + pendingCallbacks.splice(i, 1); + pendingCallback.resolve(context.blockNumber); } } }); @@ -180,8 +191,8 @@ export function describeParachain( context.waitBlocks = async (count: number) => { return new Promise((resolve) => { - pendingPromises.push({ - blockNumber: context.blockNumber + count, + pendingCallbacks.push({ + blockNumber: (context.blockNumber || 0) + count, resolve, }); }); @@ -190,16 +201,20 @@ export function describeParachain( context.upgradeRuntime = async ( from: KeyringPair, runtimeName: "moonbase" | "moonriver" | "moonbeam", - runtimeVersion: string, - waitMigration: boolean = true + runtimeVersion: "local" | string, + { waitMigration = true, useGovernance = false } = { + waitMigration: true, + useGovernance: false, + } ) => { + const api = context.polkadotApiParaone; return new Promise(async (resolve, reject) => { try { const code = fs .readFileSync(await getRuntimeWasm(runtimeName, runtimeVersion)) .toString(); - const existingCode = await context.polkadotApiParaone.rpc.state.getStorage(":code"); + const existingCode = await api.rpc.state.getStorage(":code"); if (existingCode.toString() == code) { reject( `Runtime upgrade with same code: ${existingCode.toString().slice(0, 20)} vs ${code @@ -208,95 +223,93 @@ export function describeParachain( ); } - let nonce = ( - await context.polkadotApiParaone.rpc.system.accountNextIndex(from.address) - ).toNumber(); + let nonce = (await api.rpc.system.accountNextIndex(from.address)).toNumber(); - process.stdout.write( - `Sending sudo.setCode (${sha256(Buffer.from(code))} [~${Math.floor( - code.length / 1024 - )} kb])...` - ); - const unsubSetCode = await context.polkadotApiParaone.tx.sudo - .sudoUncheckedWeight( - await context.polkadotApiParaone.tx.system.setCodeWithoutChecks(code), - 1 - ) - .signAndSend(from, { nonce: nonce++ }, async (result) => { - if (result.isInBlock) { - unsubSetCode(); - // ==== This is not supported anymore :/ === - // if (runtimeVersion == "local") { - // // This is a trick. We set the lastRuntimeUpgrade version to a number lower - // // at the block right before it gets applied, otherwise it gets reverted to - // // the original version (not sure why). - // // This is require when developping and the runtime version hasn't been - // // increased. As using the same runtime version prevents the migration - // // to happen - // await context.waitBlocks(2); + if (useGovernance) { + // We just prepare the proposals + let proposal = api.tx.parachainSystem.authorizeUpgrade(blake2AsHex(code)); + let encodedProposal = proposal.method.toHex(); + let encodedHash = blake2AsHex(encodedProposal); - // const lastRuntimeUpgrade = - // (await context.polkadotApiParaone.query.system.lastRuntimeUpgrade()) - // as any; - // process.stdout.write( - // `Overriding on-chain current runtime ${lastRuntimeUpgrade - // .unwrap() - // .specVersion.toNumber()} to ${ - // lastRuntimeUpgrade.unwrap().specVersion.toNumber() - 1 - // }` - // ); - // context.polkadotApiParaone.tx.sudo - // .sudo( - // await context.polkadotApiParaone.tx.system.setStorage([ - // [ - // context.polkadotApiParaone.query.system.lastRuntimeUpgrade.key(), - // `0x${Buffer.from( - // context.polkadotApiParaone.registry - // .createType( - // "Compact", - // lastRuntimeUpgrade.unwrap().specVersion.toNumber() - 2 - // ) - // .toU8a() - // ).toString("hex")}${lastRuntimeUpgrade.toHex().slice(6)}`, - // ], - // ]) - // ) - // .signAndSend(from, { nonce: nonce++ }); - // process.stdout.write(`✅\n`); - // } - } - }); - process.stdout.write(`✅\n`); + // Check if already in governance + const preImageExists = await api.query.democracy.preimages(encodedHash); + if (preImageExists.isSome && preImageExists.unwrap().isAvailable) { + process.stdout.write(`Preimage ${encodedHash} already exists !\n`); + } else { + process.stdout.write( + `Registering preimage (${sha256(Buffer.from(code))} [~${Math.floor( + code.length / 1024 + )} kb])...` + ); + await api.tx.democracy + .notePreimage(encodedProposal) + .signAndSend(from, { nonce: nonce++ }); + process.stdout.write(`✅\n`); + } + + // Check if already in referendum + const referendum = await api.query.democracy.referendumInfoOf.entries(); + const referendaIndex = referendum + .filter( + (ref) => + ref[1].unwrap().isOngoing && + ref[1].unwrap().asOngoing.proposalHash.toHex() == encodedHash + ) + .map((ref) => + api.registry.createType("u32", ref[0].toU8a().slice(-4)).toNumber() + )?.[0]; + if (referendaIndex !== null && referendaIndex !== undefined) { + process.stdout.write(`Vote for upgrade already in referendum, cancelling it.\n`); + await cancelReferendaWithCouncil(api, referendaIndex); + } + await executeProposalWithCouncil(api, encodedHash); + + // Needs to retrieve nonce after those governance calls + nonce = (await api.rpc.system.accountNextIndex(from.address)).toNumber(); + process.stdout.write(`Enacting authorized upgrade...`); + await api.tx.parachainSystem + .enactAuthorizedUpgrade(code) + .signAndSend(from, { nonce: nonce++ }); + process.stdout.write(`✅\n`); + } else { + process.stdout.write( + `Sending sudo.setCode (${sha256(Buffer.from(code))} [~${Math.floor( + code.length / 1024 + )} kb])...` + ); + await api.tx.sudo + .sudoUncheckedWeight(await api.tx.system.setCodeWithoutChecks(code), 1) + .signAndSend(from, { nonce: nonce++ }); + process.stdout.write(`✅\n`); + } process.stdout.write(`Waiting to apply new runtime (${chalk.red(`~4min`)})...`); let isInitialVersion = true; - const unsub = await context.polkadotApiParaone.rpc.state.subscribeRuntimeVersion( - async (version) => { - if (!isInitialVersion) { - const blockNumber = context.blockNumber; - console.log( - `✅ [${version.implName}-${version.specVersion} ${existingCode + const unsub = await api.rpc.state.subscribeRuntimeVersion(async (version) => { + if (!isInitialVersion) { + const blockNumber = context.blockNumber; + console.log( + `✅ [${version.implName}-${version.specVersion} ${existingCode + .toString() + .slice(0, 6)}...] [#${blockNumber}]` + ); + unsub(); + const newCode = await api.rpc.state.getStorage(":code"); + if (newCode.toString() != code) { + reject( + `Unexpected new code: ${newCode.toString().slice(0, 20)} vs ${code .toString() - .slice(0, 6)}...] [#${blockNumber}]` + .slice(0, 20)}` ); - unsub(); - const newCode = await context.polkadotApiParaone.rpc.state.getStorage(":code"); - if (newCode.toString() != code) { - reject( - `Unexpected new code: ${newCode.toString().slice(0, 20)} vs ${code - .toString() - .slice(0, 20)}` - ); - } - if (waitMigration) { - // Wait for next block to have the new runtime applied - await context.waitBlocks(1); - } - resolve(blockNumber); } - isInitialVersion = false; + if (waitMigration) { + // Wait for next block to have the new runtime applied + await context.waitBlocks(1); + } + resolve(blockNumber); } - ); + isInitialVersion = false; + }); } catch (e) { console.error(`Failed to setCode`); reject(e); diff --git a/tests/util/setup-smoke-tests.ts b/tests/util/setup-smoke-tests.ts index e43d9e5e6e..712a359c5f 100644 --- a/tests/util/setup-smoke-tests.ts +++ b/tests/util/setup-smoke-tests.ts @@ -1,4 +1,5 @@ import { ApiPromise, WsProvider } from "@polkadot/api"; + const debug = require("debug")("test:setup"); export interface SmokeTestContext { diff --git a/tests/util/substrate-rpc.ts b/tests/util/substrate-rpc.ts index fc36523e1d..0acdee7971 100644 --- a/tests/util/substrate-rpc.ts +++ b/tests/util/substrate-rpc.ts @@ -1,53 +1,31 @@ +import "@moonbeam-network/api-augment"; + import { ApiPromise } from "@polkadot/api"; import { AddressOrPair, ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types"; import { GenericExtrinsic } from "@polkadot/types/extrinsic"; -import { AnyTuple } from "@polkadot/types/types"; -import { Event, EventRecord } from "@polkadot/types/interfaces"; +import { DispatchError, DispatchInfo, Event, EventRecord } from "@polkadot/types/interfaces"; +import { AnyTuple, RegistryError } from "@polkadot/types/types"; import { u8aToHex } from "@polkadot/util"; + import { DevTestContext } from "./setup-dev-tests"; + const debug = require("debug")("test:substrateEvents"); -// DEV LOCAL TESTING +export interface ExtrinsicCreation { + extrinsic: GenericExtrinsic; + events: EventRecord[]; + error: RegistryError; + successful: boolean; + hash: string; +} export const createBlockWithExtrinsic = async < - Call extends SubmittableExtrinsic, + Call extends SubmittableExtrinsic[], ApiType extends ApiTypes >( context: DevTestContext, - sender: AddressOrPair, - polkadotCall: Call -) => { - // This should return a string, but is a bit complex to handle type properly so any will suffice - const extrinsicHash = (await polkadotCall.signAndSend(sender)) as any; - - // We create the block which is containing the extrinsic - const blockResult = await context.createBlock(); - - // We retrieve the events for that block - const allRecords: EventRecord[] = (await ( - await context.polkadotApi.at(blockResult.block.hash) - ).query.system.events()) as any; - - // We retrieve the block (including the extrinsics) - const blockData = await context.polkadotApi.rpc.chain.getBlock(blockResult.block.hash); - - const extrinsicIndex = blockData.block.extrinsics.findIndex( - (ext) => ext.hash.toHex() == extrinsicHash - ); - if (extrinsicIndex < 0) { - throw new Error(`Extrinsic ${extrinsicHash} is missing in the block ${blockResult.block.hash}`); - } - const extrinsic = blockData.block.extrinsics[extrinsicIndex]; - - // We retrieve the events associated with the extrinsic - const events = allRecords - .filter( - ({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.toNumber() == extrinsicIndex - ) - .map(({ event }) => event); - - return { extrinsic, events }; -}; + polkadotCalls: [...Call] +) => {}; // LAUNCH BASED NETWORK TESTING (PARA TESTS) @@ -115,7 +93,10 @@ async function lookForExtrinsicAndEvents(api: ApiPromise, extrinsicHash: Uint8Ar return { events, extrinsic }; } -async function tryLookingForEvents(api: ApiPromise, extrinsicHash: Uint8Array) { +async function tryLookingForEvents( + api: ApiPromise, + extrinsicHash: Uint8Array +): Promise> { await waitOneBlock(api); let { extrinsic, events } = await lookForExtrinsicAndEvents(api, extrinsicHash); if (events.length > 0) { @@ -144,3 +125,43 @@ export const createBlockWithExtrinsicParachain = async < //const blockResult = await context.createBlock(); return await tryLookingForEvents(api, extrinsicHash); }; + +export function filterAndApply( + events: EventRecord[], + section: string, + methods: string[], + onFound: (record: EventRecord) => T +): T[] { + return events + .filter(({ event }) => section === event.section && methods.includes(event.method)) + .map((record) => onFound(record)); +} + +export function getDispatchError({ + event: { + data: [dispatchError], + }, +}: EventRecord): DispatchError { + return dispatchError as DispatchError; +} + +function getDispatchInfo({ event: { data, method } }: EventRecord): DispatchInfo { + return method === "ExtrinsicSuccess" ? (data[0] as DispatchInfo) : (data[1] as DispatchInfo); +} + +export function extractError(events: EventRecord[] = []): DispatchError | undefined { + return filterAndApply(events, "system", ["ExtrinsicFailed"], getDispatchError)[0]; +} + +export function isExtrinsicSuccessful(events: EventRecord[] = []): boolean { + return filterAndApply(events, "system", ["ExtrinsicSuccess"], () => true).length > 0; +} + +export function extractInfo(events: EventRecord[] = []): DispatchInfo | undefined { + return filterAndApply( + events, + "system", + ["ExtrinsicFailed", "ExtrinsicSuccess"], + getDispatchInfo + )[0]; +} diff --git a/tests/util/transactions.ts b/tests/util/transactions.ts index ef4a0530d3..cbdcf4cc0c 100644 --- a/tests/util/transactions.ts +++ b/tests/util/transactions.ts @@ -1,16 +1,22 @@ -import { GENESIS_ACCOUNT, GENESIS_ACCOUNT_PRIVATE_KEY } from "./constants"; -import Web3 from "web3"; +import { AccessListish } from "@ethersproject/transactions"; +import { ethers } from "ethers"; +import fetch from "node-fetch"; import * as RLP from "rlp"; -import { getCompiled } from "./contracts"; import { Contract } from "web3-eth-contract"; -import fetch from "node-fetch"; -import { Event } from "@polkadot/types/interfaces"; -import { DevTestContext } from "./setup-dev-tests"; + +import { + alith, + ALITH_PRIVATE_KEY, + baltathar, + BALTATHAR_PRIVATE_KEY, + ethan, + ETHAN_PRIVATE_KEY, +} from "./accounts"; +import { getCompiled } from "./contracts"; import { customWeb3Request } from "./providers"; +import { DevTestContext } from "./setup-dev-tests"; + // Ethers is used to handle post-london transactions -import { ethers } from "ethers"; -import { AccessListish } from "@ethersproject/transactions"; -import { createBlockWithExtrinsic } from "./substrate-rpc"; import type { ApiPromise } from "@polkadot/api"; import type { SubmittableExtrinsic } from "@polkadot/api/promise/types"; const debug = require("debug")("test:transaction"); @@ -24,20 +30,36 @@ export interface TransactionOptions { gasPrice?: string | number; maxFeePerGas?: string | number; maxPriorityFeePerGas?: string | number; - value?: string | number | BigInt; + value?: string | number; data?: string; accessList?: AccessListish; // AccessList | Array<[string, Array]> } -export const GENESIS_TRANSACTION: TransactionOptions = { - from: GENESIS_ACCOUNT, - privateKey: GENESIS_ACCOUNT_PRIVATE_KEY, +export const TRANSACTION_TEMPLATE: TransactionOptions = { nonce: null, - gas: 12_000_000, + gas: 500_000, gasPrice: 1_000_000_000, value: "0x00", }; +export const ALITH_TRANSACTION_TEMPLATE: TransactionOptions = { + ...TRANSACTION_TEMPLATE, + from: alith.address, + privateKey: ALITH_PRIVATE_KEY, +}; + +export const BALTATHAR_TRANSACTION_TEMPLATE: TransactionOptions = { + ...TRANSACTION_TEMPLATE, + from: baltathar.address, + privateKey: BALTATHAR_PRIVATE_KEY, +}; + +export const ETHAN_TRANSACTION_TEMPLATE: TransactionOptions = { + ...TRANSACTION_TEMPLATE, + from: ethan.address, + privateKey: ETHAN_PRIVATE_KEY, +}; + export const createTransaction = async ( context: DevTestContext, options: TransactionOptions @@ -46,18 +68,28 @@ export const createTransaction = async ( const isEip2930 = context.ethTransactionType === "EIP2930"; const isEip1559 = context.ethTransactionType === "EIP1559"; - const gas = options.gas || 12_000_000; const gasPrice = options.gasPrice !== undefined ? options.gasPrice : 1_000_000_000; const maxPriorityFeePerGas = options.maxPriorityFeePerGas !== undefined ? options.maxPriorityFeePerGas : 0; const value = options.value !== undefined ? options.value : "0x00"; - const from = options.from || GENESIS_ACCOUNT; - const privateKey = - options.privateKey !== undefined ? options.privateKey : GENESIS_ACCOUNT_PRIVATE_KEY; + const from = options.from || alith.address; + const privateKey = options.privateKey !== undefined ? options.privateKey : ALITH_PRIVATE_KEY; + + // Instead of hardcoding the gas limit, we estimate the gas + const gas = + options.gas || + (await context.web3.eth.estimateGas({ + from: from, + to: options.to, + data: options.data, + })); const maxFeePerGas = options.maxFeePerGas || 1_000_000_000; const accessList = options.accessList || []; - const nonce = options.nonce || context.web3.eth.getTransactionCount(from, "pending"); + const nonce = + options.nonce != null + ? options.nonce + : await context.web3.eth.getTransactionCount(from, "pending"); let data, rawTransaction; if (isLegacy) { @@ -136,9 +168,13 @@ export const createTransfer = async ( context: DevTestContext, to: string, value: number | string | BigInt, - options: TransactionOptions = GENESIS_TRANSACTION + options: TransactionOptions = ALITH_TRANSACTION_TEMPLATE ): Promise => { - return await createTransaction(context, { ...options, value, to }); + return await createTransaction(context, { + ...options, + value: value.toString(), + to, + }); }; // Will create the transaction to deploy a contract. @@ -147,12 +183,13 @@ export const createTransfer = async ( export async function createContract( context: DevTestContext, contractName: string, - options: TransactionOptions = GENESIS_TRANSACTION, + options: TransactionOptions = { ...ALITH_TRANSACTION_TEMPLATE, gas: 5_000_000 }, contractArguments: any[] = [] ): Promise<{ rawTx: string; contract: Contract; contractAddress: string }> { - const contractCompiled = await getCompiled(contractName); - const from = options.from !== undefined ? options.from : GENESIS_ACCOUNT; + const contractCompiled = getCompiled(contractName); + const from = options.from !== undefined ? options.from : alith.address; const nonce = options.nonce || (await context.web3.eth.getTransactionCount(from)); + const contractAddress = "0x" + context.web3.utils @@ -186,7 +223,7 @@ export async function createContractExecution( contract: Contract; contractCall: any; }, - options: TransactionOptions = GENESIS_TRANSACTION + options: TransactionOptions = ALITH_TRANSACTION_TEMPLATE ) { const rawTx = await createTransaction(context, { ...options, @@ -233,7 +270,7 @@ export async function sendPrecompileTx( from: string, privateKey: string, selector: string, - parameters: `0x${string}`[] + parameters: string[] ) { let data: string; if (selectors[selector]) { @@ -245,19 +282,17 @@ export async function sendPrecompileTx( data += para.slice(2).padStart(64, "0"); }); - const tx = await createTransaction(context, { - from, - privateKey, - value: "0x0", - gas: "0x200000", - gasPrice: GENESIS_TRANSACTION.gasPrice, - to: precompileContractAddress, - data, - }); - - return context.createBlock({ - transactions: [tx], - }); + return context.createBlock( + createTransaction(context, { + from, + privateKey, + value: "0x0", + gas: "0x200000", + gasPrice: ALITH_TRANSACTION_TEMPLATE.gasPrice, + to: precompileContractAddress, + data, + }) + ); } const GAS_PRICE = "0x" + (1_000_000_000).toString(16); @@ -280,7 +315,7 @@ export async function callPrecompile( return await customWeb3Request(context.web3, "eth_call", [ { - from: GENESIS_ACCOUNT, + from: alith.address, value: "0x0", gas: "0x10000", gasPrice: GAS_PRICE, @@ -290,13 +325,6 @@ export async function callPrecompile( ]); } -/// Sign and send Substrate transaction and then create a block. -/// Will provide events emited by the transaction to check if they match what is expected. -export async function substrateTransaction(context, sender, polkadotCall): Promise { - const { events } = await createBlockWithExtrinsic(context, sender, polkadotCall); - return events; -} - export const sendAllStreamAndWaitLast = async ( api: ApiPromise, extrinsics: SubmittableExtrinsic[], @@ -316,7 +344,7 @@ export const sendAllStreamAndWaitLast = async ( Promise.all( chunk.map((tx) => { return new Promise(async (resolve, reject) => { - let unsub; + let unsub: () => void; const timer = setTimeout(() => { reject(`timed out`); unsub(); diff --git a/tests/util/xcm.ts b/tests/util/xcm.ts new file mode 100644 index 0000000000..9d6889b70d --- /dev/null +++ b/tests/util/xcm.ts @@ -0,0 +1,149 @@ +import { u8aToHex, BN } from "@polkadot/util"; +import { xxhashAsU8a } from "@polkadot/util-crypto"; +import { generateKeyringPair } from "./accounts"; + +import { DevTestContext } from "./setup-dev-tests"; +import { + CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, + XcmVersionedXcm, +} from "@polkadot/types/lookup"; + +import { AssetMetadata } from "./assets"; + +// Creates and returns the tx that overrides the paraHRMP existence +// This needs to be inserted at every block in which you are willing to test +// state changes +// The reason is that set_validation_data inherent overrides it +export function mockHrmpChannelExistanceTx( + context: DevTestContext, + para: Number, + maxCapacity: Number, + maxTotalSize: Number, + maxMessageSize: Number +) { + // This constructs the relevant state to be inserted + const relevantMessageState = { + dmqMqcHead: "0x0000000000000000000000000000000000000000000000000000000000000000", + relayDispatchQueueSize: [0, 0], + egressChannels: [ + [ + para, + { + maxCapacity, + maxTotalSize, + maxMessageSize, + msgCount: 0, + totalSize: 0, + mqcHead: null, + }, + ], + ], + ingressChannels: [ + [ + para, + { + maxCapacity, + maxTotalSize, + maxMessageSize, + msgCount: 0, + totalSize: 0, + mqcHead: null, + }, + ], + ], + }; + + const stateToInsert: CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot = + context.polkadotApi.createType( + "CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot", + relevantMessageState + ) as any; + + // Get keys to modify state + const module = xxhashAsU8a(new TextEncoder().encode("ParachainSystem"), 128); + const account_key = xxhashAsU8a(new TextEncoder().encode("RelevantMessagingState"), 128); + + const overallKey = new Uint8Array([...module, ...account_key]); + + return context.polkadotApi.tx.system.setStorage([ + [u8aToHex(overallKey), u8aToHex(stateToInsert.toU8a())], + ]); +} + +export async function registerForeignAsset( + context: DevTestContext, + asset: any, + metadata: AssetMetadata, + unitsPerSecond?: number, + numAssetsWeightHint?: number +) { + unitsPerSecond = unitsPerSecond != null ? unitsPerSecond : 0; + const { + result: { events: eventsRegister }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.registerForeignAsset(asset, metadata, new BN(1), true) + ) + ); + // Look for assetId in events + const registeredAssetId = eventsRegister + .find(({ event: { section } }) => section.toString() === "assetManager") + .event.data[0].toHex() + .replace(/,/g, ""); + + // setAssetUnitsPerSecond + const { + result: { events }, + } = await context.createBlock( + context.polkadotApi.tx.sudo.sudo( + context.polkadotApi.tx.assetManager.setAssetUnitsPerSecond( + asset, + unitsPerSecond, + numAssetsWeightHint + ) + ) + ); + // check asset in storage + const registeredAsset = ( + (await context.polkadotApi.query.assets.asset(registeredAssetId)) as any + ).unwrap(); + return { + registeredAssetId, + events, + registeredAsset, + }; +} + +export function descendOriginFromAddress(context: DevTestContext, address?: string) { + const originAddress = address != null ? address : "0x0101010101010101010101010101010101010101"; + const derivedMultiLocation = context.polkadotApi.createType( + "MultiLocation", + JSON.parse( + `{\ + "parents": 1,\ + "interior": {\ + "X2": [\ + { "Parachain": 1 },\ + { "AccountKey20": \ + {\ + "network": "Any",\ + "key": "${originAddress}"\ + } \ + }\ + ]\ + }\ + }` + ) + ); + + const toHash = new Uint8Array([ + ...new Uint8Array([32]), + ...new TextEncoder().encode("multiloc"), + ...derivedMultiLocation.toU8a(), + ]); + + return { + originAddress, + descendOriginAddress: u8aToHex(context.polkadotApi.registry.hash(toHash).slice(0, 20)), + }; +} diff --git a/tools/README.md b/tools/README.md index 638fa3d702..ec8e77e1ec 100644 --- a/tools/README.md +++ b/tools/README.md @@ -249,3 +249,18 @@ found 55 total commits in https://github.com/paritytech/substrate/compare/polkad (paritytech/substrate#9085) Enforce pub calls in pallets (paritytech/substrate#8912) staking/election: prolonged era and emergency mode for governance submission. ``` + +## Download binary + +Using `npm run get-binary...` it is possible to retrieve a binary from github builds or releases. +Ex: + +``` +npm run get-binary -- --tag v0.25.0 +``` + +or + +``` +npm run get-binary -- --tag sha-a9e8dfc1 +``` diff --git a/tools/extract-migration-logs.ts b/tools/extract-migration-logs.ts new file mode 100644 index 0000000000..163416b247 --- /dev/null +++ b/tools/extract-migration-logs.ts @@ -0,0 +1,106 @@ +import yargs from "yargs"; +import chalk from "chalk"; +import fs from "fs"; + +const argv = yargs(process.argv.slice(2)) + .usage("Usage: $0") + .version("1.0.0") + .options({ + log: { + type: "string", + description: "log file to parse containing migration", + demandOption: true, + }, + }).argv; + +const main = async () => { + const lines = fs.readFileSync(argv.log).toString().split(/\r?\n/); + let hasMigrationStarted = false; + let proposingLine; + let storageProofLine; + let migrationTime = ""; + let migrations = []; + let errorLines = []; + for (const line of lines) { + if (/Performing on_runtime_upgrade/g.test(line)) { + hasMigrationStarted = true; + migrationTime = / ([^\ ]*) WARN tokio-runtime-worker/g.exec(line)[1]; + continue; + } + if (!hasMigrationStarted) { + continue; + } + if (/ ERROR | WARN /g.test(line)) { + errorLines.push(line); + } + if (/performing migration/g.test(line)) { + migrations.push(/performing migration (.*)/g.exec(line)[1]); + } + if (/proposing at/g.test(line)) { + proposingLine = line; + } + if (/storage_proof/g.test(line)) { + storageProofLine = line; + } + if (/Compressed PoV size/g.test(line)) { + console.log(`Migration ${chalk.green("executed")}: ${migrationTime}`); + const compressedPov = parseInt(/Compressed PoV size: ([0-9\.]*)kb/g.exec(line)?.[1]); + const storageProof = parseInt(/storage_proof: ([0-9\.]*)kb/g.exec(storageProofLine)?.[1]); + const executionTime = parseInt( + /proposing at [0-9]* \(([0-9]*) ms\)/g.exec(proposingLine)?.[1] + ); + + migrations.forEach((line) => { + console.log( + ` - ${chalk.yellow(line.split(" ")[0])} (${chalk.grey( + line + .split(" ") + .slice(1) + .filter((l) => l.length > 0) + .join(" ") + )})` + ); + }); + + console.log( + `Compressed PoV: ${ + compressedPov < 1000 + ? chalk.green(compressedPov.toString()) + : compressedPov < 2000 + ? chalk.yellow(compressedPov.toString()) + : chalk.red(compressedPov.toString()) + } kb (storage_proof: ${ + storageProof < 1500 + ? chalk.green(storageProof.toString()) + : storageProof < 3000 + ? chalk.yellow(storageProof.toString()) + : chalk.red(storageProof.toString()) + } kb)` + ); + console.log( + `Execution time: ${ + executionTime < 100 + ? chalk.green(executionTime.toString()) + : executionTime < 300 + ? chalk.yellow(executionTime.toString()) + : chalk.red(executionTime.toString()) + } ms` + ); + + for (const errorLine of errorLines) { + console.log(errorLine); + } + hasMigrationStarted = false; + proposingLine; + storageProofLine; + errorLines = []; + migrations = []; + console.log(`=============================`); + } + } +}; + +main().catch((e) => { + console.trace(e); + process.exit(1); +}); diff --git a/tools/get-binary.ts b/tools/get-binary.ts new file mode 100644 index 0000000000..cbce6bc53a --- /dev/null +++ b/tools/get-binary.ts @@ -0,0 +1,84 @@ +/** + * Script to launch 2 relay and 2 parachain nodes. + * It contains pre-registered versions to allow easy run using Docker. + * + * ports can be given using --port-prefix xx (default 34) using the following rule: + * - relay 1 - p2p (p2p: XX000, rpcPort: XX001, wsPort: XX002) + * - relay 2 - p2p (p2p: XX010, rpcPort: XX011, wsPort: XX012) + * - para 1 - p2p (p2p: XX100, rpcPort: XX101, wsPort: XX102) + * - para 2 - p2p (p2p: XX110, rpcPort: XX111, wsPort: XX112) + * + */ + +import yargs from "yargs"; +import * as fs from "fs"; +import * as path from "path"; +import * as child_process from "child_process"; +import { killAll, run } from "polkadot-launch"; + +export async function getDockerBuildBinary( + dockerImage: string, + binaryPath: string +): Promise { + if (process.platform != "linux") { + console.error( + `docker binaries are only supported on linux. Use "local" config for compiled binaries` + ); + process.exit(1); + } + child_process.execSync(`docker create --name moonbeam-tmp ${dockerImage} && \ + docker cp moonbeam-tmp:/moonbeam/moonbeam ${binaryPath} && \ + docker rm moonbeam-tmp`); + return binaryPath; +} + +export async function getGithubReleaseBinary(url: string, binaryPath: string): Promise { + child_process.execSync(`wget -q ${url}` + ` -O ${binaryPath}`); + return binaryPath; +} + +// Downloads the binary and return the filepath +export async function getMoonbeamBinary(binaryTag: string, binaryPath: string): Promise { + if (binaryTag.startsWith(`v`)) { + return getGithubReleaseBinary( + `https://github.com/PureStake/moonbeam/releases/download/${binaryTag}/moonbeam`, + binaryPath + ); + } else if (binaryTag.startsWith(`sha`)) { + return getDockerBuildBinary(`purestake/moonbeam:${binaryTag}`, binaryPath); + } else if (/^[0-9]/g.test(binaryTag)) { + // sha given without prefix + return getDockerBuildBinary(`purestake/moonbeam:sha-${binaryTag}`, binaryPath); + } else { + const sha = child_process.execSync(`git rev-list -n 1 ${binaryTag}`).toString(); + return getDockerBuildBinary(`purestake/moonbeam:sha-${sha.slice(0, 8)}`, binaryPath); + } +} + +async function start() { + const argv = yargs(process.argv.slice(2)) + .usage("Usage: npm run launch [args]") + .version("1.0.0") + .options({ + tag: { + type: "string", + describe: " or ", + demandOption: true, + }, + "output-dir": { + type: "string", + alias: "o", + describe: "folder to copy the binary to", + default: ".", + }, + }) + .help().argv; + + const binaryPath = path.join(argv["output-dir"], `/moonbeam-${argv.tag}`); + console.log(`Downloading ${argv.tag}...`); + await getMoonbeamBinary(argv.tag, binaryPath); + child_process.execSync(`chmod uog+x ${binaryPath}`); + console.log(`Copied binary ${argv.tag} to ${binaryPath}`); +} + +start(); diff --git a/tools/github/generate-release-body.ts b/tools/github/generate-release-body.ts index 03728bb6d7..68b66c17a6 100644 --- a/tools/github/generate-release-body.ts +++ b/tools/github/generate-release-body.ts @@ -51,9 +51,9 @@ async function main() { const printPr = (pr) => { if (pr.labels.includes(BREAKING_CHANGES_LABEL)) { - return "⚠️ " + pr.title + " (" + pr.number + ")"; + return "⚠️ " + pr.title + " (#" + pr.number + ")"; } else { - return pr.title + " (" + pr.number + ")"; + return pr.title + " (#" + pr.number + ")"; } }; diff --git a/tools/github/generate-runtimes-body.ts b/tools/github/generate-runtimes-body.ts index 75e73655fb..f380d0095a 100644 --- a/tools/github/generate-runtimes-body.ts +++ b/tools/github/generate-runtimes-body.ts @@ -105,9 +105,9 @@ async function main() { const printPr = (pr) => { if (pr.labels.includes(BREAKING_CHANGES_LABEL)) { - return "⚠️ " + pr.title + " (" + pr.number + ")"; + return "⚠️ " + pr.title + " (#" + pr.number + ")"; } else { - return pr.title + " (" + pr.number + ")"; + return pr.title + " (#" + pr.number + ")"; } }; diff --git a/tools/launch.ts b/tools/launch.ts index 6f0cae4e65..19f5f480ed 100644 --- a/tools/launch.ts +++ b/tools/launch.ts @@ -143,9 +143,19 @@ const parachains: { [name: string]: ParachainConfig } = { chain: "moonbase-local", docker: "purestake/moonbeam:v0.23.0", }, - local: { + "moonbase-0.24.0": { relay: "rococo-9180", chain: "moonbase-local", + docker: "purestake/moonbeam:v0.24.0", + }, + "moonbase-0.25.0": { + relay: "rococo-9230", + chain: "moonbase-local", + docker: "purestake/moonbeam:v0.25.0", + }, + local: { + relay: "rococo-9230", + chain: "moonbase-local", binary: "../target/release/moonbeam", }, }; @@ -204,6 +214,10 @@ const relays: { [name: string]: NetworkConfig } = { docker: "purestake/moonbase-relay-testnet:sha-f0dc95a6", chain: "rococo-local", }, + "rococo-9230": { + docker: "purestake/moonbase-relay-testnet:sha-2fd38f09", + chain: "rococo-local", + }, "westend-9030": { docker: "purestake/moonbase-relay-testnet:sha-aa386760", chain: "westend-local", @@ -587,6 +601,7 @@ const parachainTemplate = { flags: [ "--unsafe-rpc-external", "--unsafe-ws-external", + "--rpc-methods=Unsafe", "--rpc-cors=all", "--", "--execution=wasm", @@ -600,6 +615,7 @@ const parachainTemplate = { flags: [ "--unsafe-rpc-external", "--unsafe-ws-external", + "--rpc-methods=Unsafe", "--rpc-cors=all", "--", "--execution=wasm", diff --git a/tools/package-lock.json b/tools/package-lock.json index f2446ec15e..8618926c48 100644 --- a/tools/package-lock.json +++ b/tools/package-lock.json @@ -1,47 +1,11816 @@ { "name": "moonbeam-tools", "version": "0.0.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "moonbeam-tools", + "version": "0.0.1", + "license": "GPL-3.0", + "dependencies": { + "@polkadot/api": "^6.6.1", + "bip39": "^3.0.3", + "eth-block-tracker": "^4.4.3", + "ethereumjs-wallet": "^1.0.0", + "ethjs-provider-http": "^0.1.6", + "moonbeam-types-bundle": "^2.0.7", + "octokit": "^1.0.6", + "pkg": "^4.4.9", + "polkadot-launch": "^2.3.0", + "rlp": "^2.2.6", + "solc": "^0.8.0", + "truffle-privatekey-provider": "^1.5.0", + "ts-node": "^8.10.1", + "typescript": "^4.4.3", + "web3": "^1.2.9", + "web3x": "^4.0.6", + "yargs": "^17.0.1" + }, + "devDependencies": { + "@types/yargs": "^15.0.12" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true + }, + "node_modules/@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dependencies": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "peer": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", + "peer": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.16.4", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.4.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.3" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "3.4.0", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.6.0", + "ethereumjs-util": "^7.1.3" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.0.7", + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.0.4", + "@ethersproject/bignumber": "^5.0.7", + "@ethersproject/bytes": "^5.0.4", + "@ethersproject/constants": "^5.0.4", + "@ethersproject/hash": "^5.0.4", + "@ethersproject/keccak256": "^5.0.3", + "@ethersproject/logger": "^5.0.5", + "@ethersproject/properties": "^5.0.3", + "@ethersproject/strings": "^5.0.4" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bignumber/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.6.2" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + } + }, + "node_modules/@ethersproject/contracts/node_modules/@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@metamask/safe-event-emitter": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", + "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/app": { + "version": "12.0.5", + "license": "MIT", + "dependencies": { + "@octokit/auth-app": "^3.3.0", + "@octokit/auth-unauthenticated": "^2.0.4", + "@octokit/core": "^3.4.0", + "@octokit/oauth-app": "^3.3.2", + "@octokit/plugin-paginate-rest": "^2.13.3", + "@octokit/types": "^6.27.1", + "@octokit/webhooks": "^9.0.1" + } + }, + "node_modules/@octokit/auth-app": { + "version": "3.6.1", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-app": "^4.3.0", + "@octokit/auth-oauth-user": "^1.2.3", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.0.3", + "@types/lru-cache": "^5.1.0", + "deprecation": "^2.3.1", + "lru-cache": "^6.0.0", + "universal-github-app-jwt": "^1.0.1", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-device": "^3.1.1", + "@octokit/auth-oauth-user": "^1.2.1", + "@octokit/request": "^5.3.0", + "@octokit/types": "^6.0.3", + "@types/btoa-lite": "^1.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "@octokit/oauth-methods": "^1.1.0", + "@octokit/request": "^5.4.14", + "@octokit/types": "^6.10.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-device": "^3.1.1", + "@octokit/oauth-methods": "^1.1.0", + "@octokit/request": "^5.4.14", + "@octokit/types": "^6.12.2", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.5.1", + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "license": "MIT", + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/oauth-app": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "@octokit/auth-oauth-app": "^4.0.0", + "@octokit/auth-oauth-user": "^1.3.0", + "@octokit/auth-unauthenticated": "^2.0.0", + "@octokit/core": "^3.3.2", + "@octokit/oauth-authorization-url": "^4.2.1", + "@octokit/oauth-methods": "^1.2.2", + "@types/aws-lambda": "^8.10.83", + "fromentries": "^1.3.1", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/oauth-authorization-url": { + "version": "4.3.3", + "license": "MIT" + }, + "node_modules/@octokit/oauth-methods": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "@octokit/oauth-authorization-url": "^4.3.1", + "@octokit/request": "^5.4.14", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.12.2", + "btoa-lite": "^1.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "11.2.0", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.34.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "3.0.9", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "bottleneck": "^2.15.3" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "3.5.2", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.1", + "bottleneck": "^2.15.3" + }, + "peerDependencies": { + "@octokit/core": "^3.5.0" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.2", + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.34.0", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "node_modules/@octokit/webhooks": { + "version": "9.19.0", + "license": "MIT", + "dependencies": { + "@octokit/request-error": "^2.0.2", + "@octokit/webhooks-methods": "^2.0.0", + "@octokit/webhooks-types": "4.16.0", + "aggregate-error": "^3.1.0" + } + }, + "node_modules/@octokit/webhooks-methods": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/@octokit/webhooks-types": { + "version": "4.16.0", + "license": "MIT" + }, + "node_modules/@polkadot/api": { + "version": "6.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/api-derive": "6.9.2", + "@polkadot/keyring": "^7.9.2", + "@polkadot/rpc-core": "6.9.2", + "@polkadot/rpc-provider": "6.9.2", + "@polkadot/types": "6.9.2", + "@polkadot/types-known": "6.9.2", + "@polkadot/util": "^7.9.2", + "@polkadot/util-crypto": "^7.9.2", + "eventemitter3": "^4.0.7", + "rxjs": "^7.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.11.1.tgz", + "integrity": "sha512-g6Cd60VkfIDsY76KOJW+dGcRZmCnaC5ox0YfvAMxqJ6/wHhsCOxlrQXY5Oi7eU23CaU6TQ3mCrTJxVgJRI159w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/api-base": "8.11.1", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-augment/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/api-augment/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/api-base": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.11.1.tgz", + "integrity": "sha512-KK1ohQ42znEVRyPSGGtzUomcW9AgyjxkBVJr/NerG52U5TFoGPjB0er9PEBWseGGpL0eznpB6gEWe/zSPK8MWw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/api-base/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/api-base/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/api-derive": { + "version": "6.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/api": "6.9.2", + "@polkadot/rpc-core": "6.9.2", + "@polkadot/types": "6.9.2", + "@polkadot/util": "^7.9.2", + "@polkadot/util-crypto": "^7.9.2", + "rxjs": "^7.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/keyring": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/util": "7.9.2", + "@polkadot/util-crypto": "7.9.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "7.9.2", + "@polkadot/util-crypto": "7.9.2" + } + }, + "node_modules/@polkadot/networks": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.11.1.tgz", + "integrity": "sha512-6yQvLCb6YNdeHM2zdyucbcHdw4X12jSu0DFj53ftRfHk6n9VBesfLHy7EFW8Y2uLcIwbm6b2hJ8G36zynSSUGg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/rpc-augment/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/rpc-core": { + "version": "6.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/rpc-provider": "6.9.2", + "@polkadot/types": "6.9.2", + "@polkadot/util": "^7.9.2", + "rxjs": "^7.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/rpc-provider": { + "version": "6.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/types": "6.9.2", + "@polkadot/util": "^7.9.2", + "@polkadot/util-crypto": "^7.9.2", + "@polkadot/x-fetch": "^7.9.2", + "@polkadot/x-global": "^7.9.2", + "@polkadot/x-ws": "^7.9.2", + "eventemitter3": "^4.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types": { + "version": "6.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/util": "^7.9.2", + "@polkadot/util-crypto": "^7.9.2", + "rxjs": "^7.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.11.1.tgz", + "integrity": "sha512-p2SUjNaHNm6sbEH3iw4GHiMK1xpZV5m4foA4ZPDfLHAs9UBk1bHG+9CR2WtxuIpKBaqKs3/vXkxYcFVrQREo1g==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-augment/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/types-augment/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/types-codec": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.11.1.tgz", + "integrity": "sha512-Re+lKZGYKBkOkoUSnrEYq3Z07Op2FdWmf5JN6B7EyIILqKVZqaikBTA/PxciLNoMBV2ysGWncigMsW0P6ZVV6w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "^9.7.1", + "@polkadot/x-bigint": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-codec/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-codec/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-codec/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-codec/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-codec/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/types-codec/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/types-create": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.11.1.tgz", + "integrity": "sha512-e2qVepQvsk6g8nAGRECNuzOlJLQjvaNgq6DWi9IaV+3OrR0e8tRixPFaU5M9A+5sr2tAokC8eos6r5Lmi+WiqA==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-create/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-create/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-create/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-create/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-create/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/types-create/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/types-known": { + "version": "6.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/networks": "^7.9.2", + "@polkadot/types": "6.9.2", + "@polkadot/util": "^7.9.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-support": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.11.1.tgz", + "integrity": "sha512-ehWEZVm9/8/XGB3YlciDCIBBLuPYL1/7mxjdR6n9oY629XFgNfqyVOuyKuTCca9CpOmJWuLDZIUR8/VG+XhsBw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-support/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-support/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-support/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-support/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/types-support/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@polkadot/types-support/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@polkadot/util": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/x-textdecoder": "7.9.2", + "@polkadot/x-textencoder": "7.9.2", + "@types/bn.js": "^4.11.6", + "bn.js": "^4.12.0", + "camelcase": "^6.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/util-crypto": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/networks": "7.9.2", + "@polkadot/util": "7.9.2", + "@polkadot/wasm-crypto": "^4.4.1", + "@polkadot/x-randomvalues": "7.9.2", + "blakejs": "^1.1.1", + "bn.js": "^4.12.0", + "create-hash": "^1.2.0", + "ed2curve": "^0.3.0", + "elliptic": "^6.5.4", + "hash.js": "^1.1.7", + "js-sha3": "^0.8.0", + "micro-base": "^0.9.0", + "scryptsy": "^2.1.0", + "tweetnacl": "^1.0.3", + "xxhashjs": "^0.2.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "7.9.2" + } + }, + "node_modules/@polkadot/wasm-bridge": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.2.1.tgz", + "integrity": "sha512-Q/TWfKPBDdAHTPgzjn5uxivxqZsTt6Fml+o/K6GuGmYqT4wbkWBN5+BVFawgcJqjnhzvJ8+Pocfzb/IwqYfsPQ==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "4.4.1", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/wasm-crypto-asmjs": "^4.4.1", + "@polkadot/wasm-crypto-wasm": "^4.4.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "4.4.1", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.2.1.tgz", + "integrity": "sha512-hVgd2HU3gWzx1yf+6nsCJ2oSQaNCPcTZfbGBT+QPM9osXQidf1vIVTp2w+Q6LB1pgIzrEh87LFF3CGo4RrdtAQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "4.4.1", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.2.1.tgz", + "integrity": "sha512-4CYCB0ewC+IX74AOSwmmq05ki+TM9PZl+AZ96GjyFpLbjK8Pk9N72U9GSs6aamgL/uMRqct5EeA0ToUTPFQarw==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/x-bigint": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.7.1.tgz", + "integrity": "sha512-srgRaGnhtMki58Js0LK6di842T/0tM/NahcYWe48D7/sgtGJDD81iuHJ9LSGdAzOQaVUh0yiYgE9/mscxz82cw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-bigint/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-fetch": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/x-global": "7.9.2", + "@types/node-fetch": "^2.5.12", + "node-fetch": "^2.6.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-global": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/x-global": "7.9.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/x-global": "7.9.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-textencoder": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/x-global": "7.9.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@polkadot/x-ws": { + "version": "7.9.2", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@polkadot/x-global": "7.9.2", + "@types/websocket": "^1.0.4", + "websocket": "^1.0.34" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@substrate/connect": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.7.tgz", + "integrity": "sha512-uFRF06lC42ZZixxwkzRB61K1uYvR1cTZ7rI98RW7T+eWbCFrafyVk0pk6J+4oN05gZkhou+VK3hrRCU6Doy2xQ==", + "dependencies": { + "@substrate/connect-extension-protocol": "^1.0.0", + "@substrate/smoldot-light": "0.6.19", + "eventemitter3": "^4.0.7" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.0.tgz", + "integrity": "sha512-nFVuKdp71hMd/MGlllAOh+a2hAqt8m6J2G0aSsS/RcALZexxF9jodbFc62ni8RDtJboeOfXAHhenYOANvJKPIg==" + }, + "node_modules/@substrate/smoldot-light": { + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.19.tgz", + "integrity": "sha512-Xi+v1cdURhTwx7NH+9fa1U9m7VGP61GvB6qwev9HrZXlGbQiUIvySxPlH/LMsq3mwgiRYkokPhcaZEHufY7Urg==", + "dependencies": { + "buffer": "^6.0.1", + "pako": "^2.0.4", + "websocket": "^1.0.32" + } + }, + "node_modules/@substrate/smoldot-light/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.23.0.tgz", + "integrity": "sha512-LuQje7n48GXSsp1aGI6UEmNVtlh7OzQ6CN1Hd9VGUrshADwMB0lRZ5bxnffmqDR4vVugI7h0NN0AONhIW1eHGg==" + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.85", + "license": "MIT" + }, + "node_modules/@types/bn.js": { + "version": "4.11.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/btoa-lite": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==" + }, + "node_modules/@types/jsonwebtoken": { + "version": "8.5.6", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" + }, + "node_modules/@types/node": { + "version": "16.11.9", + "license": "MIT" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/websocket": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", + "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "6.0.4", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, + "node_modules/abstract-leveldown": { + "version": "2.6.3", + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.7", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.1.2", + "license": "MIT" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/async": { + "version": "2.6.3", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", + "license": "MIT", + "dependencies": { + "async": "^2.4.0" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/async-mutex": { + "version": "0.2.6", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "license": "MIT" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0", + "core-js-compat": "^3.18.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/backoff": { + "version": "2.5.0", + "license": "MIT", + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.9", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "license": "Apache-2.0" + }, + "node_modules/bignumber.js": { + "version": "9.0.1", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip39": { + "version": "3.0.4", + "license": "ISC", + "dependencies": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + } + }, + "node_modules/bip39/node_modules/@types/node": { + "version": "11.11.6", + "license": "MIT" + }, + "node_modules/bip66": { + "version": "1.1.5", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blakejs": { + "version": "1.1.1", + "license": "CC0-1.0" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "license": "MIT", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.0", + "license": "MIT" + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "license": "ISC", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.0", + "license": "MIT" + }, + "node_modules/browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "license": "(MIT OR Apache-2.0)", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/btoa-lite": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.5", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/byline": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001363", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz", + "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "engines": { + "node": "*" + } + }, + "node_modules/checkpoint-store": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "functional-red-black-tree": "^1.0.1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" + }, + "node_modules/cids": { + "version": "0.7.5", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "license": "MIT" + }, + "node_modules/commander": { + "version": "8.3.0", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/content-hash": { + "version": "2.5.2", + "license": "ISC", + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "peer": true + }, + "node_modules/cookie": { + "version": "0.4.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.19.1", + "license": "MIT", + "dependencies": { + "browserslist": "^4.17.6", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crc-32": { + "version": "1.2.0", + "license": "Apache-2.0", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/cross-fetch": { + "version": "2.2.5", + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.1", + "whatwg-fetch": "2.0.4" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.1", + "license": "MIT", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/cuint": { + "version": "0.2.2", + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "license": "MIT", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT" + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/deferred-leveldown": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties/node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/depd": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "license": "ISC" + }, + "node_modules/des.js": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2" + }, + "node_modules/drbg.js": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "license": "BSD-3-Clause" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ed2curve": { + "version": "0.3.0", + "license": "Unlicense", + "dependencies": { + "tweetnacl": "1.x.x" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.177", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz", + "integrity": "sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, + "node_modules/errno": { + "version": "0.1.8", + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/es-abstract": { + "version": "1.19.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "license": "ISC", + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-block-tracker": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-runtime": "^7.5.5", + "@babel/runtime": "^7.5.5", + "eth-query": "^2.1.0", + "json-rpc-random-id": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "license": "ISC", + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "license": "MIT" + }, + "node_modules/eth-json-rpc-errors": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/eth-json-rpc-filters": { + "version": "4.2.2", + "license": "ISC", + "dependencies": { + "@metamask/safe-event-emitter": "^2.0.0", + "async-mutex": "^0.2.6", + "eth-json-rpc-middleware": "^6.0.0", + "eth-query": "^2.1.2", + "json-rpc-engine": "^6.1.0", + "pify": "^5.0.0" + } + }, + "node_modules/eth-json-rpc-filters/node_modules/eth-json-rpc-middleware": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "btoa": "^1.2.1", + "clone": "^2.1.1", + "eth-query": "^2.1.2", + "eth-rpc-errors": "^3.0.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-util": "^5.1.2", + "json-rpc-engine": "^5.3.0", + "json-stable-stringify": "^1.0.1", + "node-fetch": "^2.6.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/eth-json-rpc-filters/node_modules/eth-json-rpc-middleware/node_modules/json-rpc-engine": { + "version": "5.4.0", + "license": "ISC", + "dependencies": { + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/eth-json-rpc-filters/node_modules/eth-json-rpc-middleware/node_modules/pify": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-json-rpc-filters/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/eth-json-rpc-filters/node_modules/pify": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eth-json-rpc-infura": { + "version": "4.1.0", + "license": "ISC", + "dependencies": { + "eth-json-rpc-middleware": "^4.4.0", + "eth-rpc-errors": "^3.0.0", + "json-rpc-engine": "^5.1.3", + "node-fetch": "^2.6.0" + } + }, + "node_modules/eth-json-rpc-infura/node_modules/json-rpc-engine": { + "version": "5.4.0", + "license": "ISC", + "dependencies": { + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/eth-json-rpc-middleware": { + "version": "4.4.1", + "license": "ISC", + "dependencies": { + "btoa": "^1.2.1", + "clone": "^2.1.1", + "eth-json-rpc-errors": "^1.0.1", + "eth-query": "^2.1.2", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.7", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.6.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^5.1.3", + "json-stable-stringify": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/eth-json-rpc-middleware/node_modules/eth-json-rpc-errors": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/eth-json-rpc-middleware/node_modules/json-rpc-engine": { + "version": "5.4.0", + "license": "ISC", + "dependencies": { + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/eth-lib": { + "version": "0.1.29", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/eth-lib/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/eth-lib/node_modules/ws": { + "version": "3.3.3", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/eth-query": { + "version": "2.1.2", + "license": "ISC", + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/eth-rpc-errors": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/eth-sig-util": { + "version": "1.4.2", + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + } + }, + "node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-common": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-account": { + "version": "2.0.5", + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-block": { + "version": "1.7.1", + "license": "MPL-2.0", + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-common": { + "version": "1.5.2", + "license": "MIT" + }, + "node_modules/ethereumjs-tx": { + "version": "1.3.7", + "license": "MPL-2.0", + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ethereumjs-tx/node_modules/ethereum-common": { + "version": "0.0.18", + "license": "MIT" + }, + "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.3", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethereumjs-util/node_modules/@types/bn.js": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.0", + "license": "MIT" + }, + "node_modules/ethereumjs-vm": { + "version": "2.6.0", + "license": "MPL-2.0", + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "license": "MPL-2.0", + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-wallet": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "aes-js": "^3.1.2", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^7.1.2", + "randombytes": "^2.1.0", + "scrypt-js": "^3.0.1", + "utf8": "^3.0.0", + "uuid": "^8.3.2" + } + }, + "node_modules/ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + } + }, + "node_modules/ethers/node_modules/@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "node_modules/ethjs-provider-http": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "xhr2": "0.1.3" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.17.1", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/qs": { + "version": "6.7.0", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/ext": { + "version": "1.6.0", + "license": "ISC", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "license": "ISC" + }, + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fake-merkle-patricia-tree": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "checkpoint-store": "^1.1.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.13.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-ponyfill": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "node-fetch": "~1.7.1" + } + }, + "node_modules/fetch-ponyfill/node_modules/node-fetch": { + "version": "1.7.3", + "license": "MIT", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-console": { + "version": "0.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.5", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "license": "ISC", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/gauge": { + "version": "2.7.4", + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.0", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/decompress-response": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/mimic-response": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "license": "ISC" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "engines": { + "node": ">=4.x" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "license": "ISC" + }, + "node_modules/hash-base": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hdkey": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "bs58check": "^2.1.2", + "safe-buffer": "^5.1.1", + "secp256k1": "^3.0.1" + } + }, + "node_modules/hdkey/node_modules/secp256k1": { + "version": "3.8.0", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.5.2", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "1.7.2", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/http-https": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "license": "MIT", + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.1.9", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.3.0", + "license": "MIT" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/into-stream": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fn": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.8", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-weakref": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is2": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", + "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", + "dependencies": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + }, + "engines": { + "node": ">=v0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iso-random-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", + "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", + "dependencies": { + "events": "^3.3.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "license": "MIT", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/isurl": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/json-rpc-engine": { + "version": "6.1.0", + "license": "ISC", + "dependencies": { + "@metamask/safe-event-emitter": "^2.0.0", + "eth-rpc-errors": "^4.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/json-rpc-engine/node_modules/eth-rpc-errors": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.0.6" + } + }, + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/json-schema": { + "version": "0.2.3" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "license": "Public Domain" + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keccak": { + "version": "3.0.2", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keypair": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", + "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" + }, + "node_modules/keyv": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/level-codec": { + "version": "7.0.1", + "license": "MIT" + }, + "node_modules/level-errors": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/level-iterator-stream": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/level-iterator-stream/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-iterator-stream/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" + }, + "node_modules/level-ws": { + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/level-ws/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-ws/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" + }, + "node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "1.3.9", + "license": "MIT", + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "5.4.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libp2p-crypto": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", + "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", + "dependencies": { + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "keypair": "^1.0.4", + "multiformats": "^9.4.5", + "noble-ed25519": "^1.2.6", + "noble-secp256k1": "^1.2.10", + "node-forge": "^0.10.0", + "pem-jwk": "^2.0.0", + "protobufjs": "^6.11.2", + "uint8arrays": "^3.0.0", + "ursa-optional": "^0.10.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "license": "ISC" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memdown": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/memdown/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "license": "MPL-2.0", + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/merkle-patricia-tree/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micro-base": { + "version": "0.9.0", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "license": "MIT", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "license": "MIT" + }, + "node_modules/minipass": { + "version": "2.9.0", + "license": "ISC", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "license": "MIT" + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "license": "MIT" + }, + "node_modules/mock-socket": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/moonbeam-types-bundle": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/moonbeam-types-bundle/-/moonbeam-types-bundle-2.0.7.tgz", + "integrity": "sha512-YU/q/fS1jj2bK7+egeN7fQ5l5UqWQtRBZWekywQyskbpSNs/IlBdgo3uZixC5OiB4Vmtk+XXoIlHifgHgoFrnA==", + "dependencies": { + "@polkadot/api": "^8.8.2", + "typescript": "^4.7.4" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/api": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.11.1.tgz", + "integrity": "sha512-jNZoLyvwMU/22CWt1WjU2LS4OJ4DPwuRmb1l1L5pqPSWRvtPX/6Vf64kfRvqPieRiM0fNFEE+6Ssx9qmf5vAKQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/api-derive": "8.11.1", + "@polkadot/keyring": "^9.7.1", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/types-known": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "eventemitter3": "^4.0.7", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/api-derive": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.11.1.tgz", + "integrity": "sha512-XQ+g+m7cSjT7y9BiBn7vG0gueWrwQPbzLYjQCzxU9C+EqTv3UJrVKB5N04iZPzezUIHL94S3VEaeWyqOXpddjw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/api": "8.11.1", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/types-known": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.11.1.tgz", + "integrity": "sha512-bH7U5dK/EV/iOuy8KsfiQkFaXnIQwu5fSetPLm9ry35BZSKZH1D58249dzR0NYFqERvI2cReX4iH8kEtl8XFjw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/networks": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/moonbeam-types-bundle/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/multibase": { + "version": "0.6.1", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multicodec": { + "version": "0.5.7", + "license": "MIT", + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/multiformats": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", + "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" + }, + "node_modules/multihashes": { + "version": "0.4.21", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multistream": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.5" + } + }, + "node_modules/multistream/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/multistream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/multistream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "license": "MIT" + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/noble-ed25519": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.6.tgz", + "integrity": "sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==", + "deprecated": "Switch to namespaced @noble/ed25519 for security and feature updates" + }, + "node_modules/noble-secp256k1": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", + "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==", + "deprecated": "Switch to namespaced @noble/secp256k1 for security and feature updates" + }, + "node_modules/nock": { + "version": "13.2.8", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.8.tgz", + "integrity": "sha512-JT42FrXfQRpfyL4cnbBEJdf4nmBpVP0yoCcSBr+xkT8Q1y3pgtaCKHGAAOIFcEJ3O3t0QbVAmid0S0f2bj3Wpg==", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/nock/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nock/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-abi": { + "version": "2.30.1", + "license": "MIT", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.3.0", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + }, + "node_modules/noop-logger": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/object.assign": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.assign/node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/oboe": { + "version": "2.1.5", + "license": "BSD", + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/octokit": { + "version": "1.7.1", + "license": "MIT", + "dependencies": { + "@octokit/app": "^12.0.4", + "@octokit/core": "^3.5.1", + "@octokit/oauth-app": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0", + "@octokit/plugin-retry": "^3.0.9", + "@octokit/plugin-throttling": "^3.5.1", + "@octokit/types": "^6.26.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "license": "ISC", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-headers": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/peer-id": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.15.4.tgz", + "integrity": "sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==", + "dependencies": { + "class-is": "^1.1.0", + "libp2p-crypto": "^0.20.0", + "minimist": "^1.2.5", + "multiformats": "^9.4.5", + "protobufjs": "^6.10.2", + "uint8arrays": "^3.0.0" + }, + "bin": { + "peer-id": "src/bin.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/pem-jwk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", + "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", + "dependencies": { + "asn1.js": "^5.0.1" + }, + "bin": { + "pem-jwk": "bin/pem-jwk.js" + }, + "engines": { + "node": ">=5.10.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg": { + "version": "4.5.1", + "license": "MIT", + "dependencies": { + "@babel/parser": "7.13.12", + "@babel/runtime": "7.13.10", + "chalk": "^3.0.0", + "escodegen": "^1.14.1", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "into-stream": "^5.1.1", + "minimist": "^1.2.5", + "multistream": "^2.1.1", + "pkg-fetch": "2.6.9", + "prebuild-install": "6.0.1", + "progress": "^2.0.3", + "resolve": "^1.15.1", + "stream-meter": "^1.0.4" + }, + "bin": { + "pkg": "lib-es5/bin.js" + }, + "peerDependencies": { + "node-notifier": ">=6.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/pkg-fetch": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.9.2", + "byline": "^5.0.0", + "chalk": "^3.0.0", + "expand-template": "^2.0.3", + "fs-extra": "^8.1.0", + "minimist": "^1.2.5", + "progress": "^2.0.3", + "request": "^2.88.0", + "request-progress": "^3.0.0", + "semver": "^6.3.0", + "unique-temp-dir": "^1.0.0" + }, + "bin": { + "pkg-fetch": "lib-es5/bin.js" + } + }, + "node_modules/pkg-fetch/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pkg-fetch/node_modules/chalk": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-fetch/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pkg-fetch/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/pkg-fetch/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-fetch/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg/node_modules/@babel/parser": { + "version": "7.13.12", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pkg/node_modules/@babel/runtime": { + "version": "7.13.10", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/pkg/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pkg/node_modules/chalk": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pkg/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/pkg/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/polkadot-launch/-/polkadot-launch-2.3.0.tgz", + "integrity": "sha512-X+m5RT1VSq1cQ0ONImSwmb0t+lts+udVORXZzF3C5ljlTAN15M2J/sjLjp6S67i7xBf1HTKGb6cBFVge57PNCg==", + "dependencies": { + "@polkadot/api": "^8.9.1", + "@polkadot/api-augment": "^8.9.1", + "@polkadot/keyring": "^9.5.1", + "@polkadot/types": "^8.9.1", + "@polkadot/util": "^9.5.1", + "@polkadot/util-crypto": "^9.5.1", + "@types/chai": "^4.2.22", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "ethers": "^5.4.7", + "filter-console": "^0.1.1", + "libp2p-crypto": "^0.20.0", + "mocha": "^9.1.2", + "peer-id": "^0.15.3", + "tcp-port-used": "^1.0.2", + "ts-node": "^10.3.0", + "web3": "^1.6.0", + "web3-core": "^1.6.0", + "web3-eth": "^1.6.0", + "yargs": "^15.4.1" + }, + "bin": { + "polkadot-launch": "dist/cli.js" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/api": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.11.1.tgz", + "integrity": "sha512-jNZoLyvwMU/22CWt1WjU2LS4OJ4DPwuRmb1l1L5pqPSWRvtPX/6Vf64kfRvqPieRiM0fNFEE+6Ssx9qmf5vAKQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/api-derive": "8.11.1", + "@polkadot/keyring": "^9.7.1", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/types-known": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "eventemitter3": "^4.0.7", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/api-derive": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.11.1.tgz", + "integrity": "sha512-XQ+g+m7cSjT7y9BiBn7vG0gueWrwQPbzLYjQCzxU9C+EqTv3UJrVKB5N04iZPzezUIHL94S3VEaeWyqOXpddjw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/api": "8.11.1", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/types-known": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.11.1.tgz", + "integrity": "sha512-bH7U5dK/EV/iOuy8KsfiQkFaXnIQwu5fSetPLm9ry35BZSKZH1D58249dzR0NYFqERvI2cReX4iH8kEtl8XFjw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/networks": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "9.7.1" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "dependencies": { + "@babel/runtime": "^7.18.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/polkadot-launch/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/polkadot-launch/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/polkadot-launch/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polkadot-launch/node_modules/ts-node": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", + "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/polkadot-launch/node_modules/yargs": { + "version": "15.4.1", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuild-install": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/precond": { + "version": "0.2.3", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/printj": { + "version": "1.1.2", + "license": "Apache-2.0", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-to-callback": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.8.0", + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "license": "MIT" + }, + "node_modules/request": { + "version": "2.88.2", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/resolve": { + "version": "1.20.0", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/rlp/node_modules/bn.js": { + "version": "5.2.0", + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "license": "(MIT OR Apache-2.0)" + }, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-event-emitter": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "events": "^3.0.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/scryptsy": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "4.0.2", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semaphore": { + "version": "1.1.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.14.1", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "license": "MIT", + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/solc": { + "version": "0.8.10", + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/statuses": { + "version": "1.5.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-meter": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.1.4" + } + }, + "node_modules/stream-meter/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-meter/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/stream-meter/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js": { + "version": "0.1.40", + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/decompress-response": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/swarm-js/node_modules/get-stream": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/mimic-response": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/prepend-http": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/url-parse-lax": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "license": "ISC", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "dependencies": { + "debug": "4.3.1", + "is2": "^2.0.6" + } + }, + "node_modules/tcp-port-used/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tcp-port-used/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/throttleit": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/truffle-privatekey-provider": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "ethereumjs-wallet": "^1.0.0", + "web3-provider-engine": "^15.0.12" + } + }, + "node_modules/ts-node": { + "version": "8.10.2", + "license": "MIT", + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/tslib": { + "version": "2.1.0", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uid2": { + "version": "0.0.3" + }, + "node_modules/uint8arrays": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unique-temp-dir": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1", + "os-tmpdir": "^1.0.1", + "uid2": "0.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universal-github-app-jwt": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "@types/jsonwebtoken": "^8.3.3", + "jsonwebtoken": "^8.5.1" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "license": "ISC" + }, + "node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unorm": { + "version": "1.6.0", + "license": "MIT or GPL-2.0", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ursa-optional": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", + "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.14.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.7", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.4", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/varint": { + "version": "5.0.2", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/web3": { + "version": "1.6.1", + "hasInstallScript": true, + "license": "LGPL-3.0", + "dependencies": { + "web3-bzz": "1.6.1", + "web3-core": "1.6.1", + "web3-eth": "1.6.1", + "web3-eth-personal": "1.6.1", + "web3-net": "1.6.1", + "web3-shh": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz": { + "version": "1.6.1", + "hasInstallScript": true, + "license": "LGPL-3.0", + "dependencies": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.37", + "license": "MIT" + }, + "node_modules/web3-core": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-requestmanager": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "web3-eth-iban": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "@ethersproject/transactions": "^5.0.0-beta.135", + "web3-core-helpers": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent/node_modules/eventemitter3": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/web3-core-requestmanager": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "util": "^0.12.0", + "web3-core-helpers": "1.6.1", + "web3-providers-http": "1.6.1", + "web3-providers-ipc": "1.6.1", + "web3-providers-ws": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.37", + "license": "MIT" + }, + "node_modules/web3-eth": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-eth-accounts": "1.6.1", + "web3-eth-contract": "1.6.1", + "web3-eth-ens": "1.6.1", + "web3-eth-iban": "1.6.1", + "web3-eth-personal": "1.6.1", + "web3-net": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "@ethersproject/abi": "5.0.7", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "@ethereumjs/tx": "^3.3.2", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.0.10", + "scrypt-js": "^3.0.1", + "uuid": "3.3.2", + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "3.3.2", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "@types/bn.js": "^4.11.5", + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-promievent": "1.6.1", + "web3-eth-abi": "1.6.1", + "web3-eth-contract": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^4.11.9", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.6.1", + "web3-core-helpers": "1.6.1", + "web3-core-method": "1.6.1", + "web3-net": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.37", + "license": "MIT" + }, + "node_modules/web3-net": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.6.1", + "web3-core-method": "1.6.1", + "web3-utils": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-provider-engine": { + "version": "15.0.12", + "license": "MIT", + "dependencies": { + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^4.4.2", + "eth-json-rpc-errors": "^2.0.2", + "eth-json-rpc-filters": "^4.1.1", + "eth-json-rpc-infura": "^4.0.1", + "eth-json-rpc-middleware": "^4.1.5", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-tx": "^1.2.0", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + } + }, + "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/web3-provider-engine/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/web3-provider-engine/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/web3-provider-engine/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/web3-provider-engine/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/web3-providers-http": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "web3-core-helpers": "1.6.1", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.6.1", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/eventemitter3": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/web3-shh": { + "version": "1.6.1", + "hasInstallScript": true, + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.6.1", + "web3-core-method": "1.6.1", + "web3-core-subscriptions": "1.6.1", + "web3-net": "1.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.6.1", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^4.11.9", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3x": { + "version": "4.0.6", + "license": "LGPL-3.0", + "dependencies": { + "@types/bn.js": "^4.11.2", + "@types/node": "^10.12.18", + "@types/ws": "^6.0.1", + "bip39": "^2.5.0", + "bn.js": "^4.11.8", + "browserify-aes": "^1.2.0", + "elliptic": "^6.4.0", + "hdkey": "^1.1.0", + "idna-uts46-hx": "^2.3.1", + "isomorphic-fetch": "^2.2.1", + "isomorphic-ws": "^4.0.1", + "pbkdf2": "^3.0.17", + "randombytes": "^2.0.6", + "rlp": "^2.2.3", + "swarm-js": "^0.1.39", + "tslib": "^1.9.3", + "utf8": "^3.0.0", + "ws": "^6.1.0" + } + }, + "node_modules/web3x/node_modules/@types/node": { + "version": "10.17.60", + "license": "MIT" + }, + "node_modules/web3x/node_modules/bip39": { + "version": "2.6.0", + "license": "ISC", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1", + "safe-buffer": "^5.0.1", + "unorm": "^1.3.3" + } + }, + "node_modules/web3x/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/web3x/node_modules/ws": { + "version": "6.2.2", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/websocket": { + "version": "1.0.34", + "license": "Apache-2.0", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/which-pm-runs": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/which-typed-array": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.5", + "foreach": "^2.0.5", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "5.2.3", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "license": "MIT", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xhr-request/node_modules/decompress-response": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xhr-request/node_modules/mimic-response": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/xhr-request/node_modules/simple-get": { + "version": "2.8.1", + "license": "MIT", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/xhr2": { + "version": "0.1.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/xhr2-cookies": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "license": "ISC" + }, + "node_modules/yaeti": { + "version": "0.0.6", + "license": "MIT", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.2.1", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "7.0.4", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/yargs/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/yargs/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "requires": { - "@babel/highlight": "^7.16.0" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==" + }, + "@babel/core": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", + "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", + "peer": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helpers": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "peer": true + } + } }, "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, "@babel/helper-compilation-targets": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz", - "integrity": "sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.17.5", + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", "semver": "^6.3.0" } }, "@babel/helper-define-polyfill-provider": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz", - "integrity": "sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg==", "requires": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", @@ -55,95 +11824,119 @@ "dependencies": { "debug": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.2" } } }, + "@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==" + }, "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" } }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.6" } }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.6" } }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "@babel/helper-module-transforms": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "peer": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "version": "7.14.5" + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "peer": true, + "requires": { + "@babel/types": "^7.18.6" + } }, "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.6" } }, "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" }, "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helpers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", + "peer": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } }, "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz", - "integrity": "sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==" }, "@babel/plugin-transform-runtime": { "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz", - "integrity": "sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A==", "requires": { "@babel/helper-module-imports": "^7.16.0", "@babel/helper-plugin-utils": "^7.14.5", @@ -154,67 +11947,81 @@ } }, "@babel/runtime": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", + "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" } }, "@babel/traverse": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz", - "integrity": "sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==", - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.3", - "@babel/types": "^7.16.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "debug": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.2" } } }, "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", "requires": { - "@babel/helper-validator-identifier": "^7.15.7", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" } }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, "@ethereumjs/common": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", - "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", "requires": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.3" @@ -222,8 +12029,6 @@ }, "@ethereumjs/tx": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", - "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", "requires": { "@ethereumjs/common": "^2.6.0", "ethereumjs-util": "^7.1.3" @@ -231,8 +12036,6 @@ }, "@ethersproject/abi": { "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz", - "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==", "requires": { "@ethersproject/address": "^5.0.4", "@ethersproject/bignumber": "^5.0.7", @@ -246,205 +12049,465 @@ } }, "@ethersproject/abstract-provider": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", - "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", "requires": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/networks": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/web": "^5.5.0" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" } }, "@ethersproject/abstract-signer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", - "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", "requires": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0" + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" } }, "@ethersproject/address": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", - "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "requires": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/rlp": "^5.5.0" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, "@ethersproject/base64": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", - "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "requires": { + "@ethersproject/bytes": "^5.6.1" + } + }, + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", "requires": { - "@ethersproject/bytes": "^5.5.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" } }, "@ethersproject/bignumber": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", - "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "bn.js": "^4.11.9" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } } }, "@ethersproject/bytes": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", - "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "requires": { - "@ethersproject/logger": "^5.5.0" + "@ethersproject/logger": "^5.6.0" } }, "@ethersproject/constants": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", - "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", "requires": { - "@ethersproject/bignumber": "^5.5.0" + "@ethersproject/bignumber": "^5.6.2" + } + }, + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + } } }, "@ethersproject/hash": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", - "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", "requires": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" + } + }, + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + }, + "dependencies": { + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + } } }, "@ethersproject/keccak256": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", - "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", "requires": { - "@ethersproject/bytes": "^5.5.0", + "@ethersproject/bytes": "^5.6.1", "js-sha3": "0.8.0" } }, "@ethersproject/logger": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", - "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" }, "@ethersproject/networks": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.0.tgz", - "integrity": "sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==", + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", "requires": { - "@ethersproject/logger": "^5.5.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" } }, "@ethersproject/properties": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", - "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "requires": { + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" + }, + "dependencies": { + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + } + } + }, + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", "requires": { - "@ethersproject/logger": "^5.5.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, "@ethersproject/rlp": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", - "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" } }, "@ethersproject/signing-key": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", - "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "bn.js": "^4.11.9", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", "elliptic": "6.5.4", "hash.js": "1.1.7" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" } }, "@ethersproject/strings": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", - "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, "@ethersproject/transactions": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", - "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" + } + }, + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", "requires": { - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/rlp": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" } }, "@ethersproject/web": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.0.tgz", - "integrity": "sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", + "requires": { + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "requires": { - "@ethersproject/base64": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@metamask/safe-event-emitter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", - "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" + "version": "2.0.0" + }, + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" + }, + "@noble/secp256k1": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", + "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==" }, "@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "version": "2.0.5" }, "@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -452,8 +12515,6 @@ }, "@octokit/app": { "version": "12.0.5", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-12.0.5.tgz", - "integrity": "sha512-lM3pIfx2h+UbvsXHFVs1ApJ9Rmp8LO4ciFSr5q/9MdHmhsH6WtwayieUn875xwB77IoR9r8czxxxASu2WCtdeA==", "requires": { "@octokit/auth-app": "^3.3.0", "@octokit/auth-unauthenticated": "^2.0.4", @@ -466,8 +12527,6 @@ }, "@octokit/auth-app": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-3.6.1.tgz", - "integrity": "sha512-6oa6CFphIYI7NxxHrdVOzhG7hkcKyGyYocg7lNDSJVauVOLtylg8hNJzoUyPAYKKK0yUeoZamE/lMs2tG+S+JA==", "requires": { "@octokit/auth-oauth-app": "^4.3.0", "@octokit/auth-oauth-user": "^1.2.3", @@ -483,8 +12542,6 @@ }, "@octokit/auth-oauth-app": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-4.3.0.tgz", - "integrity": "sha512-cETmhmOQRHCz6cLP7StThlJROff3A/ln67Q961GuIr9zvyFXZ4lIJy9RE6Uw5O7D8IXWPU3jhDnG47FTSGQr8Q==", "requires": { "@octokit/auth-oauth-device": "^3.1.1", "@octokit/auth-oauth-user": "^1.2.1", @@ -497,8 +12554,6 @@ }, "@octokit/auth-oauth-device": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.2.tgz", - "integrity": "sha512-w7Po4Ck6N2aAn2VQyKLuojruiyKROTBv4qs6IwE5rbwF7HhBXXp4A/NKmkpoFIZkiXQtM+N8QtkSck4ApYWdGg==", "requires": { "@octokit/oauth-methods": "^1.1.0", "@octokit/request": "^5.4.14", @@ -508,8 +12563,6 @@ }, "@octokit/auth-oauth-user": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-1.3.0.tgz", - "integrity": "sha512-3QC/TAdk7onnxfyZ24BnJRfZv8TRzQK7SEFUS9vLng4Vv6Hv6I64ujdk/CUkREec8lhrwU764SZ/d+yrjjqhaQ==", "requires": { "@octokit/auth-oauth-device": "^3.1.1", "@octokit/oauth-methods": "^1.1.0", @@ -521,16 +12574,12 @@ }, "@octokit/auth-token": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", "requires": { "@octokit/types": "^6.0.3" } }, "@octokit/auth-unauthenticated": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-2.1.0.tgz", - "integrity": "sha512-+baofLfSL0CAv3CfGQ9rxiZZQEX8VNJMGuuS4PgrMRBUL52Ho5+hQYb63UJQshw7EXYMPDZxbXznc0y33cbPqw==", "requires": { "@octokit/request-error": "^2.1.0", "@octokit/types": "^6.0.3" @@ -538,8 +12587,6 @@ }, "@octokit/core": { "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", - "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", "requires": { "@octokit/auth-token": "^2.4.4", "@octokit/graphql": "^4.5.8", @@ -552,8 +12599,6 @@ }, "@octokit/endpoint": { "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "requires": { "@octokit/types": "^6.0.3", "is-plain-object": "^5.0.0", @@ -562,8 +12607,6 @@ }, "@octokit/graphql": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", "requires": { "@octokit/request": "^5.6.0", "@octokit/types": "^6.0.3", @@ -572,8 +12615,6 @@ }, "@octokit/oauth-app": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-3.6.0.tgz", - "integrity": "sha512-OxPw4ItQXaC2GuEXyZB7EmZ2rHvNFX4y3yAsqdFIRW7qg2HyoEPxacxza6c8wqbEEvu84b98AJ5BXm+IjPWrww==", "requires": { "@octokit/auth-oauth-app": "^4.0.0", "@octokit/auth-oauth-user": "^1.3.0", @@ -587,14 +12628,10 @@ } }, "@octokit/oauth-authorization-url": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.3.tgz", - "integrity": "sha512-lhP/t0i8EwTmayHG4dqLXgU+uPVys4WD/qUNvC+HfB1S1dyqULm5Yx9uKc1x79aP66U1Cb4OZeW8QU/RA9A4XA==" + "version": "4.3.3" }, "@octokit/oauth-methods": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz", - "integrity": "sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ==", "requires": { "@octokit/oauth-authorization-url": "^4.3.1", "@octokit/request": "^5.4.14", @@ -604,22 +12641,16 @@ } }, "@octokit/openapi-types": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", - "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" + "version": "11.2.0" }, "@octokit/plugin-paginate-rest": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", - "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", "requires": { "@octokit/types": "^6.34.0" } }, "@octokit/plugin-rest-endpoint-methods": { "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", - "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", "requires": { "@octokit/types": "^6.34.0", "deprecation": "^2.3.1" @@ -627,8 +12658,6 @@ }, "@octokit/plugin-retry": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", "requires": { "@octokit/types": "^6.0.3", "bottleneck": "^2.15.3" @@ -636,8 +12665,6 @@ }, "@octokit/plugin-throttling": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.5.2.tgz", - "integrity": "sha512-Eu7kfJxU8vmHqWGNszWpg+GVp2tnAfax3XQV5CkYPEE69C+KvInJXW9WajgSeW+cxYe0UVdouzCtcreGNuJo7A==", "requires": { "@octokit/types": "^6.0.1", "bottleneck": "^2.15.3" @@ -645,8 +12672,6 @@ }, "@octokit/request": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", - "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", "requires": { "@octokit/endpoint": "^6.0.1", "@octokit/request-error": "^2.1.0", @@ -658,8 +12683,6 @@ }, "@octokit/request-error": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "requires": { "@octokit/types": "^6.0.3", "deprecation": "^2.0.0", @@ -668,16 +12691,12 @@ }, "@octokit/types": { "version": "6.34.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", - "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "requires": { "@octokit/openapi-types": "^11.2.0" } }, "@octokit/webhooks": { "version": "9.19.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.19.0.tgz", - "integrity": "sha512-hldUimr9ek0WfvAp7EIuKpJrtakBKZadg5kQ/nMQOe4WiMDufX8IHDXHbbz0Qf+URoztGHpN0qIk4ucIwMcrtA==", "requires": { "@octokit/request-error": "^2.0.2", "@octokit/webhooks-methods": "^2.0.0", @@ -686,19 +12705,13 @@ } }, "@octokit/webhooks-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz", - "integrity": "sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==" + "version": "2.0.0" }, "@octokit/webhooks-types": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-4.16.0.tgz", - "integrity": "sha512-wkoAThHRfneuL8HjiRwactpqaAryRyvr8eOX20CRQKP967Xn2JoqfLaKP/BYuWV3AtbT4qVCKsjwP8LHFOrgIw==" + "version": "4.16.0" }, "@polkadot/api": { "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-6.9.2.tgz", - "integrity": "sha512-VlKW2Y0zcJhH0Y9/vNRkYIokMaXr/QQ9fZdHKP6z6slhTOfPQYr09msuBSXNyj0X1VGXR6pAXyjsu/gnMIpPrg==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/api-derive": "6.9.2", @@ -713,10 +12726,385 @@ "rxjs": "^7.4.0" } }, + "@polkadot/api-augment": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.11.1.tgz", + "integrity": "sha512-g6Cd60VkfIDsY76KOJW+dGcRZmCnaC5ox0YfvAMxqJ6/wHhsCOxlrQXY5Oi7eU23CaU6TQ3mCrTJxVgJRI159w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/api-base": "8.11.1", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "dependencies": { + "@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + } + }, + "@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + } + }, + "@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, + "@polkadot/api-base": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.11.1.tgz", + "integrity": "sha512-KK1ohQ42znEVRyPSGGtzUomcW9AgyjxkBVJr/NerG52U5TFoGPjB0er9PEBWseGGpL0eznpB6gEWe/zSPK8MWw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + }, + "dependencies": { + "@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + } + }, + "@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + } + }, + "@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + } + }, + "@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, "@polkadot/api-derive": { "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-6.9.2.tgz", - "integrity": "sha512-KppFp+erUiu3f8C2G4362wkBqILqPl6Z+bAO9ABNaeO0WX37g3K7TmrvDxXcs7+mN4TsZ3NzfpfR+cUf9gdKzQ==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/api": "6.9.2", @@ -729,8 +13117,6 @@ }, "@polkadot/keyring": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-7.9.2.tgz", - "integrity": "sha512-6UGoIxhiTyISkYEZhUbCPpgVxaneIfb/DBVlHtbvaABc8Mqh1KuqcTIq19Mh9wXlBuijl25rw4lUASrE/9sBqg==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/util": "7.9.2", @@ -739,16 +13125,227 @@ }, "@polkadot/networks": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-7.9.2.tgz", - "integrity": "sha512-4obI1RdW5/7TFwbwKA9oqw8aggVZ65JAUvIFMd2YmMC2T4+NiZLnok0WhRkhZkUnqjLIHXYNwq7Ho1i39dte0g==", "requires": { "@babel/runtime": "^7.16.3" } }, + "@polkadot/rpc-augment": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.11.1.tgz", + "integrity": "sha512-6yQvLCb6YNdeHM2zdyucbcHdw4X12jSu0DFj53ftRfHk6n9VBesfLHy7EFW8Y2uLcIwbm6b2hJ8G36zynSSUGg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "dependencies": { + "@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + } + }, + "@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + } + }, + "@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + } + }, + "@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, "@polkadot/rpc-core": { "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-6.9.2.tgz", - "integrity": "sha512-4iFoaDmks0J74C17M46tuwR5jSuTmYKgr+alBnTRJP6bpPdEbNabNbtwT9BJT8Ov5R8bi7dBgtLsVyplgxbIYg==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/rpc-provider": "6.9.2", @@ -759,8 +13356,6 @@ }, "@polkadot/rpc-provider": { "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-6.9.2.tgz", - "integrity": "sha512-MOYPbKHrqZ2ixEkhQCbOd+4NMZUThe1Nlhyy1OuyUrLC+dw6M6NMEB59BjLRuv46IeKO4+v8PRkdXaF4FV0OEg==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/types": "6.9.2", @@ -774,8 +13369,6 @@ }, "@polkadot/types": { "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-6.9.2.tgz", - "integrity": "sha512-GOFlMFv9627uojTyQwyJyg3oWvI0nE7HONakPfXE3pMrnYfM+nBxrh3mH3ETHSyVj9QqrPNqenFmTUdCy0awGg==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/util": "^7.9.2", @@ -783,10 +13376,299 @@ "rxjs": "^7.4.0" } }, + "@polkadot/types-augment": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.11.1.tgz", + "integrity": "sha512-p2SUjNaHNm6sbEH3iw4GHiMK1xpZV5m4foA4ZPDfLHAs9UBk1bHG+9CR2WtxuIpKBaqKs3/vXkxYcFVrQREo1g==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "dependencies": { + "@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + } + }, + "@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + } + }, + "@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, + "@polkadot/types-codec": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.11.1.tgz", + "integrity": "sha512-Re+lKZGYKBkOkoUSnrEYq3Z07Op2FdWmf5JN6B7EyIILqKVZqaikBTA/PxciLNoMBV2ysGWncigMsW0P6ZVV6w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "^9.7.1", + "@polkadot/x-bigint": "^9.7.1" + }, + "dependencies": { + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, + "@polkadot/types-create": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.11.1.tgz", + "integrity": "sha512-e2qVepQvsk6g8nAGRECNuzOlJLQjvaNgq6DWi9IaV+3OrR0e8tRixPFaU5M9A+5sr2tAokC8eos6r5Lmi+WiqA==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1" + }, + "dependencies": { + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, "@polkadot/types-known": { "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-6.9.2.tgz", - "integrity": "sha512-u3mpiyG6xeLV9YVdVWzXMlFjB/1qjFedZWtE400c5/s/rWLWbF92JIkA9QV/K6wDbM7bz8xXO7iRj7LlNMU1Ew==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/networks": "^7.9.2", @@ -794,10 +13676,73 @@ "@polkadot/util": "^7.9.2" } }, + "@polkadot/types-support": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.11.1.tgz", + "integrity": "sha512-ehWEZVm9/8/XGB3YlciDCIBBLuPYL1/7mxjdR6n9oY629XFgNfqyVOuyKuTCca9CpOmJWuLDZIUR8/VG+XhsBw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "^9.7.1" + }, + "dependencies": { + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } + } + }, "@polkadot/util": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-7.9.2.tgz", - "integrity": "sha512-6ABY6ErgkCsM4C6+X+AJSY4pBGwbKlHZmUtHftaiTvbaj4XuA4nTo3GU28jw8wY0Jh2cJZJvt6/BJ5GVkm5tBA==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/x-textdecoder": "7.9.2", @@ -810,8 +13755,6 @@ }, "@polkadot/util-crypto": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-7.9.2.tgz", - "integrity": "sha512-nNwqUwP44eCH9jKKcPie+IHLKkg9LMe6H7hXo91hy3AtoslnNrT51tP3uAm5yllhLvswJfnAgnlHq7ybCgqeFw==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/networks": "7.9.2", @@ -831,10 +13774,16 @@ "xxhashjs": "^0.2.2" } }, + "@polkadot/wasm-bridge": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.2.1.tgz", + "integrity": "sha512-Q/TWfKPBDdAHTPgzjn5uxivxqZsTt6Fml+o/K6GuGmYqT4wbkWBN5+BVFawgcJqjnhzvJ8+Pocfzb/IwqYfsPQ==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, "@polkadot/wasm-crypto": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-4.4.1.tgz", - "integrity": "sha512-AeOOuuh04QlkTgXswC+bUT/ftELki58JGu/buZondvCCsPLw9Eu2KloE03ElgX0GmDlPA/MRkEzjQp3fchfydQ==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/wasm-crypto-asmjs": "^4.4.1", @@ -843,24 +13792,75 @@ }, "@polkadot/wasm-crypto-asmjs": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.4.1.tgz", - "integrity": "sha512-qeMQfybpLe04reBIyHx6GwyRl9jdQdTC/cdtuEdkRzljZ7/8rIY/rLCt6Hs6vo866E+w2p92swQLZGl0snEBWQ==", "requires": { "@babel/runtime": "^7.16.3" } }, + "@polkadot/wasm-crypto-init": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.2.1.tgz", + "integrity": "sha512-hVgd2HU3gWzx1yf+6nsCJ2oSQaNCPcTZfbGBT+QPM9osXQidf1vIVTp2w+Q6LB1pgIzrEh87LFF3CGo4RrdtAQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1" + }, + "dependencies": { + "@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + } + } + } + }, "@polkadot/wasm-crypto-wasm": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.4.1.tgz", - "integrity": "sha512-FduItUfsNhkH8I4cQvBsowhw1KzcNdma96x+KDQYuB6iDUfQa+NpicuLZozhmVBDRQsmZkU90wWNiUjf126OXA==", "requires": { "@babel/runtime": "^7.16.3" } }, + "@polkadot/wasm-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.2.1.tgz", + "integrity": "sha512-4CYCB0ewC+IX74AOSwmmq05ki+TM9PZl+AZ96GjyFpLbjK8Pk9N72U9GSs6aamgL/uMRqct5EeA0ToUTPFQarw==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-bigint": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.7.1.tgz", + "integrity": "sha512-srgRaGnhtMki58Js0LK6di842T/0tM/NahcYWe48D7/sgtGJDD81iuHJ9LSGdAzOQaVUh0yiYgE9/mscxz82cw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + }, + "dependencies": { + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + } + } + }, "@polkadot/x-fetch": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-7.9.2.tgz", - "integrity": "sha512-zutLkFJVaLVpY3cIGYJD0AReLfAnPr2J82Ca4pvy/BxqwwGYuGLcn36A4m6nliGBP2lcH4oYY+mcCqIwoPWQUQ==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/x-global": "7.9.2", @@ -870,16 +13870,12 @@ }, "@polkadot/x-global": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-7.9.2.tgz", - "integrity": "sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A==", "requires": { "@babel/runtime": "^7.16.3" } }, "@polkadot/x-randomvalues": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-7.9.2.tgz", - "integrity": "sha512-svQfG31yCXf6yVyIgP0NgCzEy7oc3Lw054ZspkaqjOivxYdrXaf5w3JSSUyM/MRjI2+nk+B/EyJoMYcfSwTfsQ==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/x-global": "7.9.2" @@ -887,8 +13883,6 @@ }, "@polkadot/x-textdecoder": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-7.9.2.tgz", - "integrity": "sha512-wfwbSHXPhrOAl12QvlIOGNkMH/N/h8PId2ytIjvM/8zPPFB5Il6DWSFLtVapOGEpIFjEWbd5t8Td4pHBVXIEbg==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/x-global": "7.9.2" @@ -896,8 +13890,6 @@ }, "@polkadot/x-textencoder": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-7.9.2.tgz", - "integrity": "sha512-A19wwYINuZwU2dUyQ/mMzB0ISjyfc4cISfL4zCMUAVgj7xVoXMYV2GfjNdMpA8Wsjch3su6pxLbtJ2wU03sRTQ==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/x-global": "7.9.2" @@ -905,8 +13897,6 @@ }, "@polkadot/x-ws": { "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-7.9.2.tgz", - "integrity": "sha512-+yppMsZtvDztVOSmkqAQuhR6TfV1Axa6ergAsWb52DrfXvFP5geqtARsI6ZdDgMsE3qHSVQTcJz8vgNOr5+ztQ==", "requires": { "@babel/runtime": "^7.16.3", "@polkadot/x-global": "7.9.2", @@ -914,59 +13904,178 @@ "websocket": "^1.0.34" } }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" + }, "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "version": "0.14.0" + }, + "@substrate/connect": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.7.tgz", + "integrity": "sha512-uFRF06lC42ZZixxwkzRB61K1uYvR1cTZ7rI98RW7T+eWbCFrafyVk0pk6J+4oN05gZkhou+VK3hrRCU6Doy2xQ==", + "requires": { + "@substrate/connect-extension-protocol": "^1.0.0", + "@substrate/smoldot-light": "0.6.19", + "eventemitter3": "^4.0.7" + } + }, + "@substrate/connect-extension-protocol": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.0.tgz", + "integrity": "sha512-nFVuKdp71hMd/MGlllAOh+a2hAqt8m6J2G0aSsS/RcALZexxF9jodbFc62ni8RDtJboeOfXAHhenYOANvJKPIg==" + }, + "@substrate/smoldot-light": { + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.19.tgz", + "integrity": "sha512-Xi+v1cdURhTwx7NH+9fa1U9m7VGP61GvB6qwev9HrZXlGbQiUIvySxPlH/LMsq3mwgiRYkokPhcaZEHufY7Urg==", + "requires": { + "buffer": "^6.0.1", + "pako": "^2.0.4", + "websocket": "^1.0.32" + }, + "dependencies": { + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } + } + }, + "@substrate/ss58-registry": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.23.0.tgz", + "integrity": "sha512-LuQje7n48GXSsp1aGI6UEmNVtlh7OzQ6CN1Hd9VGUrshADwMB0lRZ5bxnffmqDR4vVugI7h0NN0AONhIW1eHGg==" }, "@szmarczak/http-timer": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "requires": { "defer-to-connect": "^1.0.1" } }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + }, "@types/aws-lambda": { - "version": "8.10.85", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.85.tgz", - "integrity": "sha512-cMRXVxb+NMb6EekKel1fPBfz2ZqE5cGhIS14G7FVUM4Bqilx0lHKnZbsDLWLSeckDpkvlp5six2F7UWyEEJSoQ==" + "version": "8.10.85" }, "@types/bn.js": { "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "requires": { "@types/node": "*" } }, "@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" + "version": "1.0.0" + }, + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==" }, "@types/jsonwebtoken": { "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.6.tgz", - "integrity": "sha512-+P3O/xC7nzVizIi5VbF34YtqSonFsdnbXBnWUCYRiKOi1f9gA4sEFvXkrGr/QVV23IbMYvcoerI7nnhDUiWXRQ==", "requires": { "@types/node": "*" } }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + "version": "5.1.1" + }, + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" }, "@types/node": { - "version": "16.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.9.tgz", - "integrity": "sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==" + "version": "16.11.9" }, "@types/node-fetch": { - "version": "2.5.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", - "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "requires": { "@types/node": "*", "form-data": "^3.0.0" @@ -974,40 +14083,32 @@ }, "@types/pbkdf2": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "requires": { "@types/node": "*" } }, "@types/secp256k1": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", "requires": { "@types/node": "*" } }, "@types/websocket": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.4.tgz", - "integrity": "sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", + "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", "requires": { "@types/node": "*" } }, "@types/ws": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.4.tgz", - "integrity": "sha512-PpPrX7SZW9re6+Ha8ojZG4Se8AZXgf0GK6zmfqEuCsY49LFDNXO3SByp44X3dFEqtB73lkCDAdUazhAjVPiNwg==", "requires": { "@types/node": "*" } }, "@types/yargs": { "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -1015,36 +14116,41 @@ }, "@types/yargs-parser": { "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, "abstract-leveldown": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", "requires": { "xtend": "~4.0.0" } }, "accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" } }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, "aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + "version": "3.1.2" }, "aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -1052,8 +14158,6 @@ }, "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1061,10 +14165,13 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "2.1.1" }, "ansi-styles": { "version": "3.2.1", @@ -1074,15 +14181,20 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "version": "1.2.0" }, "are-we-there-yet": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -1090,8 +14202,6 @@ "dependencies": { "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1103,14 +14213,10 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -1118,32 +14224,27 @@ } }, "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "version": "4.1.3" + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "version": "1.1.1" }, "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "version": "2.1.0" }, "asn1": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "requires": { "safer-buffer": "~2.1.0" } }, "asn1.js": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -1152,63 +14253,48 @@ } }, "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "version": "1.0.0" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "async": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "requires": { "lodash": "^4.17.14" } }, "async-eventemitter": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", "requires": { "async": "^2.4.0" } }, "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "version": "1.0.1" }, "async-mutex": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", - "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", "requires": { "tslib": "^2.0.0" } }, "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "version": "0.4.0" }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "version": "1.0.5" }, "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "version": "0.7.0" }, "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.11.0" }, "babel-plugin-polyfill-corejs2": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz", - "integrity": "sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA==", "requires": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.3.0", @@ -1217,8 +14303,6 @@ }, "babel-plugin-polyfill-corejs3": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz", - "integrity": "sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw==", "requires": { "@babel/helper-define-polyfill-provider": "^0.3.0", "core-js-compat": "^3.18.0" @@ -1226,75 +14310,63 @@ }, "babel-plugin-polyfill-regenerator": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz", - "integrity": "sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg==", "requires": { "@babel/helper-define-polyfill-provider": "^0.3.0" } }, "backoff": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", "requires": { "precond": "0.2" } }, "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "version": "1.0.2" }, "base-x": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "requires": { "safe-buffer": "^5.0.1" } }, "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "version": "1.5.1" }, "bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { "tweetnacl": "^0.14.3" }, "dependencies": { "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "version": "0.14.5" } } }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" + "version": "2.2.2" }, "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + "version": "9.0.1" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bindings": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "requires": { "file-uri-to-path": "1.0.0" } }, "bip39": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", "requires": { "@types/node": "11.11.6", "create-hash": "^1.1.0", @@ -1303,24 +14375,18 @@ }, "dependencies": { "@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" + "version": "11.11.6" } } }, "bip66": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", "requires": { "safe-buffer": "^5.0.1" } }, "bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -1328,24 +14394,16 @@ } }, "blakejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", - "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" + "version": "1.1.1" }, "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "version": "3.7.2" }, "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "version": "4.12.0" }, "body-parser": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { "bytes": "3.1.0", "content-type": "~1.0.4", @@ -1361,28 +14419,20 @@ "dependencies": { "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.7.0" } } }, "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + "version": "2.19.5" }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1390,21 +14440,20 @@ }, "braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { "fill-range": "^7.0.1" } }, "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "version": "1.1.0" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -1416,8 +14465,6 @@ }, "browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -1426,8 +14473,6 @@ }, "browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -1437,24 +14482,18 @@ }, "browserify-rsa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" }, "dependencies": { "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.0" } } }, "browserify-sign": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -1468,36 +14507,29 @@ }, "dependencies": { "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.0" } } }, "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" } }, "bs58": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", "requires": { "base-x": "^3.0.2" } }, "bs58check": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "requires": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -1505,66 +14537,44 @@ } }, "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + "version": "1.2.1" }, "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" + "version": "1.0.0" }, "buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "version": "1.0.1" }, "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "version": "1.1.2" }, "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + "version": "0.0.5" }, "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + "version": "1.0.3" }, "bufferutil": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", "requires": { "node-gyp-build": "^4.3.0" } }, "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" + "version": "5.0.0" }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.1.0" }, "cacheable-request": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -1577,42 +14587,46 @@ "dependencies": { "get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" } }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "version": "2.0.0" } } }, "call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, "camelcase": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==" + "version": "6.2.1" }, "caniuse-lite": { - "version": "1.0.30001282", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz", - "integrity": "sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg==" + "version": "1.0.30001363", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz", + "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==" }, "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "version": "0.12.0" + }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } }, "chalk": { "version": "2.4.2", @@ -1624,23 +14638,37 @@ "supports-color": "^5.3.0" } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" + }, "checkpoint-store": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", "requires": { "functional-red-black-tree": "^1.0.1" } }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "version": "1.1.4" }, "cids": { "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", "requires": { "buffer": "^5.5.0", "class-is": "^1.1.0", @@ -1651,8 +14679,6 @@ "dependencies": { "multicodec": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", "requires": { "buffer": "^5.6.0", "varint": "^5.0.0" @@ -1662,27 +14688,19 @@ }, "cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + "version": "1.1.0" }, "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "version": "2.2.0" }, "cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -1690,19 +14708,13 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "5.0.1" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "3.0.0" }, "string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1711,8 +14723,6 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } @@ -1720,29 +14730,21 @@ } }, "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "version": "2.1.2" }, "clone-response": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "requires": { "mimic-response": "^1.0.0" }, "dependencies": { "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "version": "1.0.1" } } }, "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "version": "1.1.0" }, "color-convert": { "version": "1.9.3", @@ -1755,55 +14757,39 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } }, "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "version": "1.2.9" }, "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + "version": "8.3.0" }, "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "version": "0.0.1" }, "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "version": "1.1.0" }, "content-disposition": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { "safe-buffer": "5.1.2" }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" } } }, "content-hash": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", "requires": { "cids": "^0.7.1", "multicodec": "^0.5.5", @@ -1811,50 +14797,51 @@ } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "version": "1.0.4" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "peer": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "peer": true + } + } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.0" }, "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "version": "1.0.6" }, "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "version": "2.1.3" }, "core-js-compat": { "version": "3.19.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.1.tgz", - "integrity": "sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==", "requires": { "browserslist": "^4.17.6", "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "version": "7.0.0" } } }, "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "version": "1.0.3" }, "cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "requires": { "object-assign": "^4", "vary": "^1" @@ -1862,8 +14849,6 @@ }, "crc-32": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "requires": { "exit-on-epipe": "~1.0.1", "printj": "~1.1.0" @@ -1871,8 +14856,6 @@ }, "create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -1880,8 +14863,6 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -1892,8 +14873,6 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -1903,26 +14882,25 @@ "sha.js": "^2.4.8" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "cross-fetch": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.5.tgz", - "integrity": "sha512-xqYAhQb4NhCJSRym03dwxpP1bYXpK3y7UN83Bo2WFi3x1Zmzn0SL/6xGoPr+gpt4WmNrgCCX3HPysvOwFOW36w==", "requires": { "node-fetch": "2.6.1", "whatwg-fetch": "2.0.4" }, "dependencies": { "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "2.6.1" } } }, "crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -1938,14 +14916,10 @@ } }, "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=" + "version": "0.2.2" }, "d": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "requires": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -1953,124 +14927,92 @@ }, "dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "^1.0.0" } }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "version": "1.2.0" }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "version": "0.2.0" }, "decompress-response": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "requires": { "mimic-response": "^2.0.0" } }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "version": "0.6.0" }, "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "version": "0.1.4" }, "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "version": "1.1.3" }, "deferred-leveldown": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", "requires": { "abstract-leveldown": "~2.6.0" } }, "define-properties": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { "object-keys": "^1.0.12" }, "dependencies": { "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "version": "1.1.1" } } }, "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "version": "1.0.0" }, "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "version": "1.0.0" }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "1.1.2" }, "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + "version": "2.3.1" }, "des.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.0.4" }, "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "version": "1.0.3" }, "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "version": "4.0.2" }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -2079,21 +15021,15 @@ }, "dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "requires": { "path-type": "^4.0.0" } }, "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "version": "0.1.2" }, "drbg.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", "requires": { "browserify-aes": "^1.0.6", "create-hash": "^1.1.2", @@ -2101,14 +15037,10 @@ } }, "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "version": "0.1.4" }, "ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -2116,34 +15048,26 @@ }, "ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { "safe-buffer": "^5.0.1" } }, "ed2curve": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ed2curve/-/ed2curve-0.3.0.tgz", - "integrity": "sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==", "requires": { "tweetnacl": "1.x.x" } }, "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "version": "1.1.1" }, "electron-to-chromium": { - "version": "1.3.906", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.906.tgz", - "integrity": "sha512-UjoECdcOYIVzWmrbtNnYpPrDuu+RtiO5W08Vdbid9ydGQMSdnqtJUtvOqQEAVQqpoXN9kSW9YnQufvzLQMYQOw==" + "version": "1.4.177", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.177.tgz", + "integrity": "sha512-FYPir3NSBEGexSZUEeht81oVhHfLFl6mhUKSkjHN/iB/TwEIt/WHQrqVGfTLN5gQxwJCQkIJBe05eOXjI7omgg==" }, "elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -2155,43 +15079,36 @@ } }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "8.0.0" }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "version": "1.0.2" }, "encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "requires": { "iconv-lite": "^0.6.2" } }, "end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } }, + "err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, "errno": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "requires": { "prr": "~1.0.1" } }, "es-abstract": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -2216,16 +15133,12 @@ }, "dependencies": { "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "version": "1.1.1" } } }, "es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -2234,8 +15147,6 @@ }, "es5-ext": { "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "requires": { "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.3", @@ -2244,8 +15155,6 @@ }, "es6-iterator": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { "d": "1", "es5-ext": "^0.10.35", @@ -2254,32 +15163,24 @@ }, "es6-symbol": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "requires": { "d": "^1.0.1", "ext": "^1.1.2" } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "version": "3.1.1" }, "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "version": "1.0.3" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "escodegen": { "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", "requires": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -2290,36 +15191,24 @@ "dependencies": { "source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true } } }, "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "version": "4.0.1" }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "version": "4.3.0" }, "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "version": "2.0.3" }, "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "version": "1.8.1" }, "eth-block-tracker": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", "requires": { "@babel/plugin-transform-runtime": "^7.5.5", "@babel/runtime": "^7.5.5", @@ -2331,32 +15220,24 @@ }, "eth-ens-namehash": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", "requires": { "idna-uts46-hx": "^2.3.1", "js-sha3": "^0.5.7" }, "dependencies": { "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + "version": "0.5.7" } } }, "eth-json-rpc-errors": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-2.0.2.tgz", - "integrity": "sha512-uBCRM2w2ewusRHGxN8JhcuOb2RN3ueAOYH/0BhqdFmQkZx5lj5+fLKTz0mIVOzd4FG5/kUksCzCD7eTEim6gaA==", "requires": { "fast-safe-stringify": "^2.0.6" } }, "eth-json-rpc-filters": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz", - "integrity": "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==", "requires": { "@metamask/safe-event-emitter": "^2.0.0", "async-mutex": "^0.2.6", @@ -2368,8 +15249,6 @@ "dependencies": { "eth-json-rpc-middleware": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz", - "integrity": "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==", "requires": { "btoa": "^1.2.1", "clone": "^2.1.1", @@ -2386,24 +15265,18 @@ "dependencies": { "json-rpc-engine": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", "requires": { "eth-rpc-errors": "^3.0.0", "safe-event-emitter": "^1.0.1" } }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "3.0.0" } } }, "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -2415,16 +15288,12 @@ } }, "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + "version": "5.0.0" } } }, "eth-json-rpc-infura": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-4.1.0.tgz", - "integrity": "sha512-DFYitKovzVlCdUulEccdm4g6k/vnvyByuw7rd5OoWDBSIiaeinI8Z/SntLjSIs2c+YvE20DGwk/GLwZGCWDN1Q==", "requires": { "eth-json-rpc-middleware": "^4.4.0", "eth-rpc-errors": "^3.0.0", @@ -2434,8 +15303,6 @@ "dependencies": { "json-rpc-engine": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", "requires": { "eth-rpc-errors": "^3.0.0", "safe-event-emitter": "^1.0.1" @@ -2445,8 +15312,6 @@ }, "eth-json-rpc-middleware": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-4.4.1.tgz", - "integrity": "sha512-yoSuRgEYYGFdVeZg3poWOwAlRI+MoBIltmOB86MtpoZjvLbou9EB/qWMOWSmH2ryCWLW97VYY6NWsmWm3OAA7A==", "requires": { "btoa": "^1.2.1", "clone": "^2.1.1", @@ -2466,16 +15331,12 @@ "dependencies": { "eth-json-rpc-errors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-errors/-/eth-json-rpc-errors-1.1.1.tgz", - "integrity": "sha512-WT5shJ5KfNqHi9jOZD+ID8I1kuYWNrigtZat7GOQkvwo99f8SzAVaEcWhJUv656WiZOAg3P1RiJQANtUmDmbIg==", "requires": { "fast-safe-stringify": "^2.0.6" } }, "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -2488,8 +15349,6 @@ }, "json-rpc-engine": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", "requires": { "eth-rpc-errors": "^3.0.0", "safe-event-emitter": "^1.0.1" @@ -2499,8 +15358,6 @@ }, "eth-lib": { "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", "requires": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", @@ -2511,14 +15368,10 @@ }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" }, "ws": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0", @@ -2529,8 +15382,6 @@ }, "eth-query": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=", "requires": { "json-rpc-random-id": "^1.0.0", "xtend": "^4.0.1" @@ -2538,16 +15389,12 @@ }, "eth-rpc-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", - "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", "requires": { "fast-safe-stringify": "^2.0.6" } }, "eth-sig-util": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", "requires": { "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", "ethereumjs-util": "^5.1.1" @@ -2555,8 +15402,6 @@ "dependencies": { "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -2571,21 +15416,15 @@ }, "ethereum-bloom-filters": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "requires": { "js-sha3": "^0.8.0" } }, "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" + "version": "0.2.0" }, "ethereum-cryptography": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -2605,8 +15444,8 @@ } }, "ethereumjs-abi": { - "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", - "from": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "version": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", + "from": "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git", "requires": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -2614,8 +15453,6 @@ "dependencies": { "ethereumjs-util": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -2630,8 +15467,6 @@ }, "ethereumjs-account": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", "requires": { "ethereumjs-util": "^5.0.0", "rlp": "^2.0.0", @@ -2640,8 +15475,6 @@ "dependencies": { "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -2656,8 +15489,6 @@ }, "ethereumjs-block": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", "requires": { "async": "^2.0.1", "ethereum-common": "0.2.0", @@ -2668,8 +15499,6 @@ "dependencies": { "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -2683,28 +15512,20 @@ } }, "ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==" + "version": "1.5.2" }, "ethereumjs-tx": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", "requires": { "ethereum-common": "^0.0.18", "ethereumjs-util": "^5.0.0" }, "dependencies": { "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + "version": "0.0.18" }, "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -2719,8 +15540,6 @@ }, "ethereumjs-util": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", - "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", "requires": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -2731,23 +15550,17 @@ "dependencies": { "@types/bn.js": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", "requires": { "@types/node": "*" } }, "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.0" } } }, "ethereumjs-vm": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", "requires": { "async": "^2.1.2", "async-eventemitter": "^0.2.2", @@ -2764,8 +15577,6 @@ "dependencies": { "ethereumjs-block": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", "requires": { "async": "^2.0.1", "ethereumjs-common": "^1.5.0", @@ -2776,8 +15587,6 @@ "dependencies": { "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -2792,8 +15601,6 @@ }, "ethereumjs-tx": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", "requires": { "ethereumjs-common": "^1.5.0", "ethereumjs-util": "^6.0.0" @@ -2801,8 +15608,6 @@ }, "ethereumjs-util": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "requires": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -2817,8 +15622,6 @@ }, "ethereumjs-wallet": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", - "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", "requires": { "aes-js": "^3.1.2", "bs58check": "^2.1.2", @@ -2830,72 +15633,107 @@ "uuid": "^8.3.2" } }, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", + "requires": { + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" + } + } + } + }, "ethjs-provider-http": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-provider-http/-/ethjs-provider-http-0.1.6.tgz", - "integrity": "sha1-HsXZtL4lfvHValALIqdBmF6IlCA=", "requires": { "xhr2": "0.1.3" } }, "ethjs-unit": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", "requires": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "version": "4.11.6" } } }, "ethjs-util": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "requires": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" } }, "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "version": "4.0.7" }, "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "version": "3.3.0" }, "evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + "version": "1.0.1" }, "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "version": "2.0.3" }, "express": { "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", @@ -2930,59 +15768,41 @@ }, "dependencies": { "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.7.0" }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" } } }, "ext": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "requires": { "type": "^2.5.0" }, "dependencies": { "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + "version": "2.5.0" } } }, "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "version": "3.0.2" }, "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "version": "1.3.0" }, "fake-merkle-patricia-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", "requires": { "checkpoint-store": "^1.1.0" } }, "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "version": "3.1.3" }, "fast-glob": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -2992,40 +15812,28 @@ } }, "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "version": "2.1.0" }, "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "version": "2.0.6" }, "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "version": "2.1.1" }, "fastq": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" } }, "fetch-ponyfill": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", - "integrity": "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=", "requires": { "node-fetch": "~1.7.1" }, "dependencies": { "node-fetch": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { "encoding": "^0.1.11", "is-stream": "^1.0.1" @@ -3034,27 +15842,19 @@ } }, "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "version": "1.0.0" }, "fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { "to-regex-range": "^5.0.1" } }, "filter-console": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/filter-console/-/filter-console-0.1.1.tgz", - "integrity": "sha512-zrXoV1Uaz52DqPs+qEwNJWJFAWZpYJ47UNmpN9q4j+/EYsz85uV0DC9k8tRND5kYmoVzL0W+Y75q4Rg8sRJCdg==" + "version": "0.1.1" }, "finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -3067,32 +15867,27 @@ }, "find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" + "version": "1.14.5" }, "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + "version": "2.0.5" }, "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "version": "0.6.1" }, "form-data": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3100,19 +15895,13 @@ } }, "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "version": "0.2.0" }, "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "version": "0.5.2" }, "from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -3120,8 +15909,6 @@ "dependencies": { "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3133,14 +15920,10 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -3148,19 +15931,13 @@ } }, "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" + "version": "1.3.2" }, "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "version": "1.0.0" }, "fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -3169,31 +15946,27 @@ }, "fs-minipass": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "requires": { "minipass": "^2.6.0" } }, "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "version": "1.0.0" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.1" }, "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "version": "1.0.1" }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -3205,15 +15978,22 @@ "wide-align": "^1.1.0" } }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "peer": true + }, "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "version": "2.0.5" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" }, "get-intrinsic": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -3222,16 +16002,12 @@ }, "get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { "pump": "^3.0.0" } }, "get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -3239,21 +16015,15 @@ }, "getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "^1.0.0" } }, "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + "version": "0.0.0" }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3265,30 +16035,22 @@ }, "glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } }, "global": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "requires": { "min-document": "^2.19.0", "process": "^0.11.10" } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "version": "11.12.0" }, "globby": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -3300,8 +16062,6 @@ }, "got": { "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -3318,33 +16078,28 @@ "dependencies": { "decompress-response": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { "mimic-response": "^1.0.0" } }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "version": "1.0.1" } } }, "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.8" + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "version": "2.0.0" }, "har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -3352,57 +16107,41 @@ }, "has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "version": "1.0.1" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + "version": "1.4.2" }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.2" }, "has-to-string-tag-x": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "requires": { "has-symbol-support-x": "^1.4.1" } }, "has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "requires": { "has-symbols": "^1.0.2" } }, "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "version": "2.0.1" }, "hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -3411,8 +16150,6 @@ }, "hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -3420,8 +16157,6 @@ }, "hdkey": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-1.1.2.tgz", - "integrity": "sha512-PTQ4VKu0oRnCrYfLp04iQZ7T2Cxz0UsEXYauk2j8eh6PJXCpbXuCFhOmtIFtbET0i3PMWmHN9J11gU8LEgUljQ==", "requires": { "bs58check": "^2.1.2", "safe-buffer": "^5.1.1", @@ -3430,8 +16165,6 @@ "dependencies": { "secp256k1": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", - "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", "requires": { "bindings": "^1.5.0", "bip66": "^1.1.5", @@ -3445,10 +16178,13 @@ } } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, "hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -3456,14 +16192,10 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.0" }, "http-errors": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -3473,21 +16205,15 @@ }, "dependencies": { "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.3" } } }, "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" + "version": "1.0.0" }, "http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -3496,70 +16222,48 @@ }, "iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "idna-uts46-hx": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", "requires": { "punycode": "2.1.0" }, "dependencies": { "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + "version": "2.1.0" } } }, "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "version": "1.2.1" }, "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" + "version": "5.1.9" }, "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + "version": "3.3.0" }, "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "version": "4.0.0" }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.4" }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "version": "1.3.8" }, "internal-slot": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -3568,27 +16272,19 @@ }, "into-stream": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz", - "integrity": "sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==", "requires": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" } }, "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==" + "version": "4.3.0" }, "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "version": "1.9.1" }, "is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3596,163 +16292,121 @@ }, "is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "requires": { "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "version": "1.2.4" }, "is-core-module": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "requires": { "has": "^1.0.3" } }, "is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "version": "2.1.1" }, "is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=" + "version": "1.0.0" }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" } }, "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + "version": "1.0.2" }, "is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + "version": "1.0.0" }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "version": "2.0.1" }, "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "version": "7.0.0" }, "is-number-object": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" + "version": "1.0.2" }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "version": "1.1.0" }, "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + "version": "5.0.0" }, "is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + "version": "1.2.0" }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "version": "1.0.1" }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "1.1.0" }, "is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "requires": { "has-tostringtag": "^1.0.0" } }, "is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "requires": { "has-symbols": "^1.0.2" } }, "is-typed-array": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -3762,27 +16416,53 @@ } }, "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "version": "1.0.0" + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, "is-weakref": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", "requires": { "call-bind": "^1.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, + "is2": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.7.tgz", + "integrity": "sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA==", + "requires": { + "deep-is": "^0.1.3", + "ip-regex": "^4.1.0", + "is-url": "^1.2.4" + } + }, + "isarray": { + "version": "1.0.0" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "iso-random-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", + "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", + "requires": { + "events": "^3.3.0", + "readable-stream": "^3.4.0" + } + }, "isomorphic-fetch": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { "node-fetch": "^1.0.1", "whatwg-fetch": ">=0.10.0" @@ -3790,8 +16470,6 @@ "dependencies": { "node-fetch": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { "encoding": "^0.1.11", "is-stream": "^1.0.1" @@ -3801,52 +16479,45 @@ }, "isomorphic-ws": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" + "requires": {} }, "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "version": "0.1.2" }, "isurl": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "requires": { "has-to-string-tag-x": "^1.2.0", "is-object": "^1.0.1" } }, "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "version": "0.8.0" }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "version": "0.1.1" }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "version": "2.5.2" }, "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "version": "3.0.0" }, "json-rpc-engine": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", - "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", "requires": { "@metamask/safe-event-emitter": "^2.0.0", "eth-rpc-errors": "^4.0.2" @@ -3854,8 +16525,6 @@ "dependencies": { "eth-rpc-errors": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", - "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", "requires": { "fast-safe-stringify": "^2.0.6" } @@ -3863,50 +16532,40 @@ } }, "json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=" + "version": "1.0.1" }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.2.3" }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "0.4.1" }, "json-stable-stringify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { "jsonify": "~0.0.0" } }, "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "version": "5.0.1" + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "peer": true }, "jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { "graceful-fs": "^4.1.6" } }, "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + "version": "0.0.0" }, "jsonwebtoken": { "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -3921,21 +16580,15 @@ }, "dependencies": { "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "version": "2.1.3" }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.1" } } }, "jsprim": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -3945,8 +16598,6 @@ }, "jwa": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -3955,8 +16606,6 @@ }, "jws": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -3964,47 +16613,40 @@ }, "keccak": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", "readable-stream": "^3.6.0" } }, + "keypair": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", + "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" + }, "keyv": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "requires": { "json-buffer": "3.0.0" } }, "klaw": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "requires": { "graceful-fs": "^4.1.9" } }, "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "version": "7.0.1" }, "level-errors": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", "requires": { "errno": "~0.1.1" } }, "level-iterator-stream": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", "requires": { "inherits": "^2.0.1", "level-errors": "^1.0.3", @@ -4013,14 +16655,10 @@ }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "version": "0.0.1" }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -4029,30 +16667,22 @@ } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "0.10.31" } } }, "level-ws": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", "requires": { "readable-stream": "~1.0.15", "xtend": "~2.1.1" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "version": "0.0.1" }, "readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -4061,14 +16691,10 @@ } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "0.10.31" }, "xtend": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", "requires": { "object-keys": "~0.4.0" } @@ -4077,8 +16703,6 @@ }, "levelup": { "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", "requires": { "deferred-leveldown": "~1.2.1", "level-codec": "~7.0.0", @@ -4090,101 +16714,152 @@ }, "dependencies": { "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "version": "5.4.1" } } }, "levn": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, + "libp2p-crypto": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", + "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", + "requires": { + "err-code": "^3.0.1", + "iso-random-stream": "^2.0.0", + "keypair": "^1.0.4", + "multiformats": "^9.4.5", + "noble-ed25519": "^1.2.6", + "noble-secp256k1": "^1.2.10", + "node-forge": "^0.10.0", + "pem-jwk": "^2.0.0", + "protobufjs": "^6.11.2", + "uint8arrays": "^3.0.0", + "ursa-optional": "^0.10.1" + } + }, "locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.17.21" }, "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "version": "4.0.8" }, "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "version": "4.3.0" }, "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "version": "3.0.3" }, "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "version": "4.0.4" }, "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "version": "3.0.3" }, "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "version": "4.0.6" }, "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "version": "4.0.1" }, "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "version": "4.1.1" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "requires": { + "get-func-name": "^2.0.0" + } }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "version": "1.0.1" }, "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { "yallist": "^4.0.0" } }, "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" + "version": "2.2.1" }, "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "version": "1.3.6" }, "md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -4192,14 +16867,10 @@ } }, "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "version": "0.3.0" }, "memdown": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", "requires": { "abstract-leveldown": "~2.7.1", "functional-red-black-tree": "^1.0.1", @@ -4211,38 +16882,26 @@ "dependencies": { "abstract-leveldown": { "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", "requires": { "xtend": "~4.0.0" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" } } }, "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" + "version": "0.3.1" }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "version": "1.0.1" }, "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "version": "1.4.1" }, "merkle-patricia-tree": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", "requires": { "async": "^1.4.2", "ethereumjs-util": "^5.0.0", @@ -4255,14 +16914,10 @@ }, "dependencies": { "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "version": "1.5.2" }, "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -4275,8 +16930,6 @@ }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4288,43 +16941,31 @@ }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" } } }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" } } } } }, "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "version": "1.1.2" }, "micro-base": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/micro-base/-/micro-base-0.9.0.tgz", - "integrity": "sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg==" + "version": "0.9.0" }, "micromatch": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -4332,126 +16973,574 @@ }, "miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "1.6.0" }, "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "version": "1.51.0" }, "mime-types": { "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { "mime-db": "1.51.0" } }, "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "version": "2.1.0" }, "min-document": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "requires": { "dom-walk": "^0.1.0" } }, "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "version": "1.0.1" }, "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "version": "1.0.1" }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.5" }, "minipass": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" }, "dependencies": { "yallist": { + "version": "3.1.1" + } + } + }, + "minizlib": { + "version": "1.3.3", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-classic": { + "version": "0.5.3" + }, + "mkdirp-promise": { + "version": "5.0.1", + "requires": { + "mkdirp": "*" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" } } }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } + "mock-fs": { + "version": "4.14.0" }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "mock-socket": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==" }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "moonbeam-types-bundle": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/moonbeam-types-bundle/-/moonbeam-types-bundle-2.0.7.tgz", + "integrity": "sha512-YU/q/fS1jj2bK7+egeN7fQ5l5UqWQtRBZWekywQyskbpSNs/IlBdgo3uZixC5OiB4Vmtk+XXoIlHifgHgoFrnA==", "requires": { - "mkdirp": "*" + "@polkadot/api": "^8.8.2", + "typescript": "^4.7.4" + }, + "dependencies": { + "@polkadot/api": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.11.1.tgz", + "integrity": "sha512-jNZoLyvwMU/22CWt1WjU2LS4OJ4DPwuRmb1l1L5pqPSWRvtPX/6Vf64kfRvqPieRiM0fNFEE+6Ssx9qmf5vAKQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/api-derive": "8.11.1", + "@polkadot/keyring": "^9.7.1", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/types-known": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "eventemitter3": "^4.0.7", + "rxjs": "^7.5.5" + } + }, + "@polkadot/api-derive": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.11.1.tgz", + "integrity": "sha512-XQ+g+m7cSjT7y9BiBn7vG0gueWrwQPbzLYjQCzxU9C+EqTv3UJrVKB5N04iZPzezUIHL94S3VEaeWyqOXpddjw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/api": "8.11.1", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + } + }, + "@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + } + }, + "@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/types-known": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.11.1.tgz", + "integrity": "sha512-bH7U5dK/EV/iOuy8KsfiQkFaXnIQwu5fSetPLm9ry35BZSKZH1D58249dzR0NYFqERvI2cReX4iH8kEtl8XFjw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/networks": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1" + } + }, + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + } + }, + "@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" + } + }, + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } + }, + "@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" + } + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + } } }, - "mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.0.0" }, "multibase": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", "requires": { "base-x": "^3.0.8", "buffer": "^5.5.0" @@ -4459,16 +17548,17 @@ }, "multicodec": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", "requires": { "varint": "^5.0.0" } }, + "multiformats": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.7.0.tgz", + "integrity": "sha512-uv/tcgwk0yN4DStopnBN4GTgvaAlYdy6KnZpuzEPFOYQd71DYFJjs0MN1ERElAflrZaYyGBWXyGxL5GgrxIx0Q==" + }, "multihashes": { "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", "requires": { "buffer": "^5.5.0", "multibase": "^0.7.0", @@ -4477,8 +17567,6 @@ "dependencies": { "multibase": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", "requires": { "base-x": "^3.0.8", "buffer": "^5.5.0" @@ -4488,8 +17576,6 @@ }, "multistream": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.1.tgz", - "integrity": "sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ==", "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.5" @@ -4497,8 +17583,6 @@ "dependencies": { "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4510,14 +17594,10 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -4525,82 +17605,109 @@ } }, "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + "version": "2.15.0" }, "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + "version": "0.1.2" + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" }, "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "version": "1.0.2" }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.2" }, "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + "version": "1.0.0" + }, + "noble-ed25519": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.6.tgz", + "integrity": "sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==" + }, + "noble-secp256k1": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", + "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==" + }, + "nock": { + "version": "13.2.8", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.8.tgz", + "integrity": "sha512-JT42FrXfQRpfyL4cnbBEJdf4nmBpVP0yoCcSBr+xkT8Q1y3pgtaCKHGAAOIFcEJ3O3t0QbVAmid0S0f2bj3Wpg==", + "requires": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } }, "node-abi": { "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "requires": { "semver": "^5.4.1" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.1" } } }, "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "version": "2.0.2" }, "node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" } }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" + "version": "4.3.0" }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" }, "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + "version": "0.1.1" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "version": "4.5.1" }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -4609,50 +17716,34 @@ } }, "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "version": "1.0.1" }, "number-to-bn": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", "requires": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" }, "dependencies": { "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "version": "4.11.6" } } }, "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "version": "0.9.0" }, "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "version": "4.1.1" }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + "version": "1.11.0" }, "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + "version": "0.4.0" }, "object.assign": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -4661,24 +17752,18 @@ }, "dependencies": { "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "version": "1.1.1" } } }, "oboe": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=", "requires": { "http-https": "^1.0.0" } }, "octokit": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-1.7.1.tgz", - "integrity": "sha512-1b7eRgU8uWetHOWr8f9ptnVo2EKbrkOfocMeQdpgCt7tl/LK67HptFsy2Xg4fMjsJ/+onoBJW0hy/fO0In3/uA==", "requires": { "@octokit/app": "^12.0.4", "@octokit/core": "^3.5.1", @@ -4692,24 +17777,18 @@ }, "on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "requires": { "ee-first": "1.1.1" } }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" } }, "optionator": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -4720,58 +17799,45 @@ } }, "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "version": "1.0.2" }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "version": "1.1.0" }, "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "version": "1.0.0" }, "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" + "version": "3.0.0" }, "p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } }, "p-timeout": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "requires": { "p-finally": "^1.0.0" } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "version": "2.2.0" + }, + "pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" }, "parse-asn1": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "requires": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -4781,44 +17847,33 @@ } }, "parse-headers": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz", - "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" + "version": "2.0.4" }, "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "version": "1.3.3" }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "version": "4.0.0" }, "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "version": "1.0.1" }, "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "version": "1.0.7" }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "version": "0.1.7" }, "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "version": "4.0.0" + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" }, "pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -4827,10 +17882,29 @@ "sha.js": "^2.4.8" } }, + "peer-id": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.15.4.tgz", + "integrity": "sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==", + "requires": { + "class-is": "^1.1.0", + "libp2p-crypto": "^0.20.0", + "minimist": "^1.2.5", + "multiformats": "^9.4.5", + "protobufjs": "^6.10.2", + "uint8arrays": "^3.0.0" + } + }, + "pem-jwk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", + "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", + "requires": { + "asn1.js": "^5.0.1" + } + }, "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "version": "2.1.0" }, "picocolors": { "version": "1.0.0", @@ -4838,19 +17912,13 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.3.0" }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "3.0.0" }, "pkg": { "version": "4.5.1", - "resolved": "https://registry.npmjs.org/pkg/-/pkg-4.5.1.tgz", - "integrity": "sha512-UXKL88jGQ+FD4//PyrFeRcqurVQ3BVIfUNaEU9cXY24EJz08JyBj85qrGh0CFGvyzNb1jpwHOnns5Sw0M5H92Q==", "requires": { "@babel/parser": "7.13.12", "@babel/runtime": "7.13.10", @@ -4869,30 +17937,22 @@ }, "dependencies": { "@babel/parser": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", - "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==" + "version": "7.13.12" }, "@babel/runtime": { "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4900,26 +17960,18 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -4928,8 +17980,6 @@ }, "pkg-fetch": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.9.tgz", - "integrity": "sha512-EnVR8LRILXBvaNP+wJOSY02c3+qDDfyEyR+aqAHLhcc9PBnbxFT9UZ1+If49goPQzQPn26TzF//fc6KXZ0aXEg==", "requires": { "@babel/runtime": "^7.9.2", "byline": "^5.0.0", @@ -4946,75 +17996,327 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "color-convert": "^2.0.1" + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "has-flag": { + "version": "4.0.0" + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "polkadot-launch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/polkadot-launch/-/polkadot-launch-2.3.0.tgz", + "integrity": "sha512-X+m5RT1VSq1cQ0ONImSwmb0t+lts+udVORXZzF3C5ljlTAN15M2J/sjLjp6S67i7xBf1HTKGb6cBFVge57PNCg==", + "requires": { + "@polkadot/api": "^8.9.1", + "@polkadot/api-augment": "^8.9.1", + "@polkadot/keyring": "^9.5.1", + "@polkadot/types": "^8.9.1", + "@polkadot/util": "^9.5.1", + "@polkadot/util-crypto": "^9.5.1", + "@types/chai": "^4.2.22", + "@types/mocha": "^9.0.0", + "chai": "^4.3.4", + "ethers": "^5.4.7", + "filter-console": "^0.1.1", + "libp2p-crypto": "^0.20.0", + "mocha": "^9.1.2", + "peer-id": "^0.15.3", + "tcp-port-used": "^1.0.2", + "ts-node": "^10.3.0", + "web3": "^1.6.0", + "web3-core": "^1.6.0", + "web3-eth": "^1.6.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "@polkadot/api": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.11.1.tgz", + "integrity": "sha512-jNZoLyvwMU/22CWt1WjU2LS4OJ4DPwuRmb1l1L5pqPSWRvtPX/6Vf64kfRvqPieRiM0fNFEE+6Ssx9qmf5vAKQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/api-derive": "8.11.1", + "@polkadot/keyring": "^9.7.1", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/types-known": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "eventemitter3": "^4.0.7", + "rxjs": "^7.5.5" + } + }, + "@polkadot/api-derive": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.11.1.tgz", + "integrity": "sha512-XQ+g+m7cSjT7y9BiBn7vG0gueWrwQPbzLYjQCzxU9C+EqTv3UJrVKB5N04iZPzezUIHL94S3VEaeWyqOXpddjw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/api": "8.11.1", + "@polkadot/api-augment": "8.11.1", + "@polkadot/api-base": "8.11.1", + "@polkadot/rpc-core": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/keyring": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.1.tgz", + "integrity": "sha512-INTTaEZz/bco6LwCq4rHFT84QtFod1kAWtI6eHa9Hh6gwJt35s7xYh1x1gYLentvUcRBUecL/OikVFJGLTN4Uw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@polkadot/util-crypto": "9.7.1" + } + }, + "@polkadot/networks": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.1.tgz", + "integrity": "sha512-Vnks07JRyso8h3nFUQwfdf+UZFeQDXr41DdVCKsU5ojhbXwZkbaB00L58lF9QQMCey+8eGBThvz2Awnqhm0m6w==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/util": "9.7.1", + "@substrate/ss58-registry": "^1.23.0" + } + }, + "@polkadot/rpc-core": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.11.1.tgz", + "integrity": "sha512-9UVDxMx5gU0rgi9YrQL5QVxKsPtHo/u/B24LqS5qKlAr3e6G9XpWhByM1T97Z320Lj4TCKOurvG1PwuvMdvZCQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/rpc-augment": "8.11.1", + "@polkadot/rpc-provider": "8.11.1", + "@polkadot/types": "8.11.1", + "@polkadot/util": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/rpc-provider": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.11.1.tgz", + "integrity": "sha512-XDKeNknyMH3HAOfXX/KOe1FKLTeQSa32lbvXtxVS2B1rTzwYJmay/A0ECzKyiZSlr6nFOVOe3WhSXkISOBsq7Q==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-support": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "@polkadot/x-fetch": "^9.7.1", + "@polkadot/x-global": "^9.7.1", + "@polkadot/x-ws": "^9.7.1", + "@substrate/connect": "0.7.7", + "eventemitter3": "^4.0.7", + "mock-socket": "^9.1.5", + "nock": "^13.2.8" + } + }, + "@polkadot/types": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.11.1.tgz", + "integrity": "sha512-E64UYDRRGFuMy0AfTDd2RLwx/YMbQ8rwVR+LJvH+yQuUcl+GsTqRu7cNpFulUew0sh45efK/oeb4Bh0BNo6AlA==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/keyring": "^9.7.1", + "@polkadot/types-augment": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1", + "@polkadot/util-crypto": "^9.7.1", + "rxjs": "^7.5.5" + } + }, + "@polkadot/types-known": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.11.1.tgz", + "integrity": "sha512-bH7U5dK/EV/iOuy8KsfiQkFaXnIQwu5fSetPLm9ry35BZSKZH1D58249dzR0NYFqERvI2cReX4iH8kEtl8XFjw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/networks": "^9.7.1", + "@polkadot/types": "8.11.1", + "@polkadot/types-codec": "8.11.1", + "@polkadot/types-create": "8.11.1", + "@polkadot/util": "^9.7.1" + } + }, + "@polkadot/util": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.1.tgz", + "integrity": "sha512-NWKcwBWneMBSFUkYN4eWeS159880Xmt69s+WhEPgyw6Bbj0jumKiS5AhL/uU2PC1nUBcisiYr18/1e4lWxOPQg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-global": "9.7.1", + "@polkadot/x-textdecoder": "9.7.1", + "@polkadot/x-textencoder": "9.7.1", + "@types/bn.js": "^5.1.0", + "bn.js": "^5.2.1", + "ip-regex": "^4.3.0" + } + }, + "@polkadot/util-crypto": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.1.tgz", + "integrity": "sha512-NPy/EcgGdpz2NXEHU5x3e4bea67snT2TSxx1ok9weSpwCMnhIkk45QQOMOGzJ0hrAXAdofmkFYz3ibEd7bNzIQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.7.1", + "@polkadot/util": "9.7.1", + "@polkadot/wasm-crypto": "^6.2.1", + "@polkadot/x-bigint": "9.7.1", + "@polkadot/x-randomvalues": "9.7.1", + "@scure/base": "1.1.1", + "ed2curve": "^0.3.0", + "tweetnacl": "^1.0.3" + } + }, + "@polkadot/wasm-crypto": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.2.1.tgz", + "integrity": "sha512-euUsn/HYC4/2wrSBZrcKn4Hg59r8YrINrh2L/I6ID9SjzHFRlEeStRarnRvlkZS6ihnVQZbRtNrJKvgceik0uQ==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-bridge": "6.2.1", + "@polkadot/wasm-crypto-asmjs": "6.2.1", + "@polkadot/wasm-crypto-init": "6.2.1", + "@polkadot/wasm-crypto-wasm": "6.2.1", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/wasm-crypto-asmjs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.2.1.tgz", + "integrity": "sha512-YCCe0fPO/TDd+PGrQfQc4KPuZFKdtYYy6prJW+mM4oNm6VCrlUNFGEpu/mNUIGleihVKaSC8cA0eQfj7oUa4GA==", + "requires": { + "@babel/runtime": "^7.18.6" + } + }, + "@polkadot/wasm-crypto-wasm": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.2.1.tgz", + "integrity": "sha512-hIKjPyvPb5msLZTFJZTM+/QI94UnCBXhZHfrbUI7ooBsll3vo9+Vm4va4g7AxH2BIeGp8EZEn0hVNdtnVC2Puw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/wasm-util": "6.2.1" + } + }, + "@polkadot/x-fetch": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.7.1.tgz", + "integrity": "sha512-A9arlH0n8QZ7aU15gsw4DA89oGcwJVwdYxeH0mElXNa82NpWdJVSoIyU7sHO0GGyJQDLMGkyD1CD0H7lUmLCew==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/node-fetch": "^2.6.2", + "node-fetch": "^2.6.7" } }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "@polkadot/x-global": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.1.tgz", + "integrity": "sha512-hadWnVKrSbUg5dKXREVbLNJhsA1n5lKtsDgdeyu7b73oI+aRFuv+no5l7Z57F1vQWjTvCnHRj0Fg7l0ZWmV4Jg==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/runtime": "^7.18.6" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "@polkadot/x-randomvalues": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.1.tgz", + "integrity": "sha512-RLVLg2GthcIvUXSxPYCc0fPIMdp/FlEeNaDzncqQ63P5mQ3HpWfVHzaKi5rPuA+oQuPjUAAi2QvDmPuPN3SXlQ==", "requires": { - "color-name": "~1.1.4" + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "@polkadot/x-textdecoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.1.tgz", + "integrity": "sha512-g+OfP9t8ar9IJseQXaZ3cw9Ws2o0csY5rPXqd7GWtCMuEmllssRyje49GjLhNEVEsy97x5vXB2UJLNUxnNqiCw==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "@polkadot/x-textencoder": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.1.tgz", + "integrity": "sha512-IMRCsHmPfnqPpO1XtWH+aPDeG6POoAFDLVG7gkPaEZd2rwWI7sJAB+8jeqoQH5ENBTKyMqTbPM02UDhH4eTXHg==", + "requires": { + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1" + } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "@polkadot/x-ws": { + "version": "9.7.1", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.7.1.tgz", + "integrity": "sha512-ZxlEGkfNzC1BXEXFu7xrT0tZAnMqU+ahZaeQAJ7omT9H12djPAVuL3X/L/YYTuyFTB1mpYrJb5dpmMnutSQ0bQ==", "requires": { - "has-flag": "^4.0.0" + "@babel/runtime": "^7.18.6", + "@polkadot/x-global": "9.7.1", + "@types/websocket": "^1.0.5", + "websocket": "^1.0.34" } - } - } - }, - "polkadot-launch": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/polkadot-launch/-/polkadot-launch-1.9.0.tgz", - "integrity": "sha512-Gdv2TAZqsIbHkdhCkoUDL/40ToNqMQ5znes1nzqYCXRBPtdQXS+TsfK6hGuW51cSpTVQ0YvvLBV6jKIzH4CiEw==", - "requires": { - "@polkadot/api": "^6.3.1", - "@polkadot/util": "^7.4.1", - "@polkadot/util-crypto": "^7.4.1", - "filter-console": "^0.1.1", - "yargs": "^15.4.1" - }, - "dependencies": { + }, + "@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "requires": { + "@types/node": "*" + } + }, "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "5.0.1" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "3.0.0" }, "string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5023,16 +18325,32 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } }, + "ts-node": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz", + "integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, "yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -5051,8 +18369,6 @@ }, "prebuild-install": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", - "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", @@ -5072,72 +18388,73 @@ } }, "precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" + "version": "0.2.3" }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "version": "1.1.2" }, "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "version": "2.0.0" }, "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + "version": "1.1.2" }, "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "version": "0.11.10" }, "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "version": "2.0.1" }, "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "version": "2.0.3" }, "promise-to-callback": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", "requires": { "is-fn": "^1.0.0", "set-immediate-shim": "^1.0.1" } }, + "propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" + }, + "protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, "proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + "version": "1.0.1" }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "version": "1.8.0" }, "public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -5149,27 +18466,19 @@ }, "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.1.1" }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.5.2" }, "query-string": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "requires": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -5177,36 +18486,26 @@ } }, "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "version": "1.2.3" }, "randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "version": "1.2.1" }, "raw-body": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { "bytes": "3.1.0", "http-errors": "1.7.2", @@ -5216,8 +18515,6 @@ "dependencies": { "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -5226,8 +18523,6 @@ }, "rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -5237,23 +18532,25 @@ }, "readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.9" }, "request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -5279,8 +18576,6 @@ "dependencies": { "form-data": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -5288,39 +18583,27 @@ } }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "3.4.0" } } }, "request-progress": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", "requires": { "throttleit": "^1.0.0" } }, "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "version": "2.1.1" }, "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "version": "2.0.2" }, "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "version": "2.0.0" }, "resolve": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -5328,29 +18611,21 @@ }, "responselike": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "requires": { "lowercase-keys": "^1.0.0" } }, "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "version": "1.0.4" }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } }, "ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -5358,72 +18633,52 @@ }, "rlp": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "requires": { "bn.js": "^5.2.0" }, "dependencies": { "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "version": "5.2.0" } } }, "run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "requires": { "queue-microtask": "^1.2.2" } }, "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + "version": "0.2.0" }, "rxjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", - "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "requires": { - "tslib": "~2.1.0" + "tslib": "^2.1.0" } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "version": "5.2.1" }, "safe-event-emitter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", "requires": { "events": "^3.0.0" } }, "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "version": "2.1.2" }, "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "version": "3.0.1" }, "scryptsy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-2.1.0.tgz", - "integrity": "sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==" + "version": "2.1.0" }, "secp256k1": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz", - "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==", "requires": { "elliptic": "^6.5.2", "node-addon-api": "^2.0.0", @@ -5431,19 +18686,13 @@ } }, "semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" + "version": "1.1.0" }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.0" }, "send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -5461,16 +18710,20 @@ }, "dependencies": { "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.1" } } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, "serve-static": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -5480,8 +18733,6 @@ }, "servify": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "requires": { "body-parser": "^1.16.0", "cors": "^2.8.1", @@ -5491,29 +18742,19 @@ } }, "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "version": "2.0.0" }, "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "version": "1.0.1" }, "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "version": "1.0.5" }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.1.1" }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5521,8 +18762,6 @@ }, "side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -5530,19 +18769,13 @@ } }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "version": "3.0.6" }, "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "version": "1.0.1" }, "simple-get": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", "requires": { "decompress-response": "^4.2.0", "once": "^1.3.1", @@ -5550,14 +18783,10 @@ } }, "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "version": "3.0.0" }, "solc": { "version": "0.8.10", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.10.tgz", - "integrity": "sha512-I/Mcn6J5bEtJqveNLplQm9IRrhemm6v+qkw5S2+wM4x9HItJ1sYdrqVTN3j4DMhFDM3ZbvM0QywVzpPx666PHw==", "requires": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -5572,8 +18801,6 @@ "dependencies": { "fs-extra": { "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^2.1.0", @@ -5584,44 +18811,29 @@ }, "jsonfile": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "requires": { "graceful-fs": "^4.1.6" } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.1" } } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, "source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.6.1" } } }, "sshpk": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -5635,29 +18847,21 @@ }, "dependencies": { "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "version": "0.14.5" } } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "1.5.0" }, "stream-meter": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", - "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=", "requires": { "readable-stream": "^2.1.4" }, "dependencies": { "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5669,14 +18873,10 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -5684,14 +18884,16 @@ } }, "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "version": "1.1.0" + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5700,8 +18902,6 @@ }, "string.prototype.trimend": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -5709,41 +18909,25 @@ }, "string.prototype.trimstart": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" } }, "strip-hex-prefix": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", "requires": { "is-hex-prefixed": "1.0.0" } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "version": "2.0.1" }, "supports-color": { "version": "5.5.0", @@ -5755,8 +18939,6 @@ }, "swarm-js": { "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", "requires": { "bluebird": "^3.5.0", "buffer": "^5.0.5", @@ -5773,16 +18955,12 @@ "dependencies": { "decompress-response": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { "mimic-response": "^1.0.0" } }, "fs-extra": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -5790,14 +18968,10 @@ } }, "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "version": "3.0.0" }, "got": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "requires": { "decompress-response": "^3.2.0", "duplexer3": "^0.1.4", @@ -5816,24 +18990,16 @@ } }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "version": "1.0.1" }, "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + "version": "0.3.0" }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + "version": "1.0.4" }, "url-parse-lax": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "requires": { "prepend-http": "^1.0.1" } @@ -5842,8 +19008,6 @@ }, "tar": { "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "requires": { "chownr": "^1.1.4", "fs-minipass": "^1.2.7", @@ -5855,16 +19019,12 @@ }, "dependencies": { "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "3.1.1" } } }, "tar-fs": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -5874,8 +19034,6 @@ }, "tar-stream": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -5884,65 +19042,69 @@ "readable-stream": "^3.1.1" } }, + "tcp-port-used": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", + "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", + "requires": { + "debug": "4.3.1", + "is2": "^2.0.6" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=" + "version": "1.0.0" }, "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + "version": "4.0.1" }, "tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" } }, "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "version": "2.0.0" }, "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "version": "1.0.0" }, "to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { "is-number": "^7.0.0" } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.0" }, "tough-cookie": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "version": "0.0.3" }, "truffle-privatekey-provider": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/truffle-privatekey-provider/-/truffle-privatekey-provider-1.5.0.tgz", - "integrity": "sha512-Ir0WVXiJsg0M7U6qttPzDB57qEqprpwmBINHAHXOt4AmI1YO0I+LoMHO96rCdoG3N4ZwNc5NWgHw5qDz8qxy9A==", "requires": { "ethereumjs-wallet": "^1.0.0", "web3-provider-engine": "^15.0.12" @@ -5950,8 +19112,6 @@ }, "ts-node": { "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "requires": { "arg": "^4.1.0", "diff": "^4.0.1", @@ -5961,40 +19121,33 @@ } }, "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "version": "2.1.0" }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { "safe-buffer": "^5.0.1" } }, "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "version": "1.0.3" }, "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "version": "1.2.0" }, "type-check": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, "type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -6002,31 +19155,31 @@ }, "typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==" + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" }, "uid2": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", - "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" + "version": "0.0.3" + }, + "uint8arrays": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", + "requires": { + "multiformats": "^9.4.2" + } }, "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "version": "1.1.1" }, "unbox-primitive": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "requires": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", @@ -6036,8 +19189,6 @@ }, "unique-temp-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz", - "integrity": "sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U=", "requires": { "mkdirp": "^0.5.1", "os-tmpdir": "^1.0.1", @@ -6046,76 +19197,70 @@ }, "universal-github-app-jwt": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.0.tgz", - "integrity": "sha512-3b+ocAjjz4JTyqaOT+NNBd5BtTuvJTxWElIoeHSVelUV9J3Jp7avmQTdLKCaoqi/5Ox2o/q+VK19TJ233rVXVQ==", "requires": { "@types/jsonwebtoken": "^8.3.3", "jsonwebtoken": "^8.5.1" } }, "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "version": "6.0.0" }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "0.1.2" }, "unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" + "version": "1.6.0" }, "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "version": "1.0.0" + }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } }, "uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } }, "url-parse-lax": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { "prepend-http": "^2.0.0" } }, "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + "version": "1.0.0" }, "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + "version": "1.0.1" + }, + "ursa-optional": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", + "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", + "requires": { + "bindings": "^1.5.0", + "nan": "^2.14.2" + } }, "utf-8-validate": { "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", "requires": { "node-gyp-build": "^4.3.0" } }, "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "version": "3.0.0" }, "util": { "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -6126,34 +19271,27 @@ } }, "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "version": "1.0.2" }, "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "version": "1.0.1" }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "version": "8.3.2" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "version": "5.0.2" }, "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "version": "1.1.2" }, "verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -6161,16 +19299,12 @@ }, "dependencies": { "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.2" } } }, "web3": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.6.1.tgz", - "integrity": "sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ==", "requires": { "web3-bzz": "1.6.1", "web3-core": "1.6.1", @@ -6183,8 +19317,6 @@ }, "web3-bzz": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.6.1.tgz", - "integrity": "sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng==", "requires": { "@types/node": "^12.12.6", "got": "9.6.0", @@ -6192,16 +19324,12 @@ }, "dependencies": { "@types/node": { - "version": "12.20.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", - "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==" + "version": "12.20.37" } } }, "web3-core": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.6.1.tgz", - "integrity": "sha512-m+b7UfYvU5cQUAh6NRfxRzH/5B3to1AdEQi1HIQt570cDWlObOOmoO9tY6iJnI5w4acxIO19LqjDMqEJGBYyRQ==", "requires": { "@types/bn.js": "^4.11.5", "@types/node": "^12.12.6", @@ -6213,16 +19341,12 @@ }, "dependencies": { "@types/node": { - "version": "12.20.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", - "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==" + "version": "12.20.37" } } }, "web3-core-helpers": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz", - "integrity": "sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng==", "requires": { "web3-eth-iban": "1.6.1", "web3-utils": "1.6.1" @@ -6230,8 +19354,6 @@ }, "web3-core-method": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.6.1.tgz", - "integrity": "sha512-szH5KyIWIaULQDBdDvevQUCHV9lsExJ/oV0ePqK+w015D2SdMPMuhii0WB+HCePaksWO+rr/GAypvV9g2T3N+w==", "requires": { "@ethersproject/transactions": "^5.0.0-beta.135", "web3-core-helpers": "1.6.1", @@ -6242,23 +19364,17 @@ }, "web3-core-promievent": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz", - "integrity": "sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ==", "requires": { "eventemitter3": "4.0.4" }, "dependencies": { "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "version": "4.0.4" } } }, "web3-core-requestmanager": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.6.1.tgz", - "integrity": "sha512-4y7etYEUtkfflyYVBfN1oJtCbVFNhNX1omlEYzezhTnPj3/dT7n+dhUXcqvIhx9iKA13unGfpFge80XNFfcB8A==", "requires": { "util": "^0.12.0", "web3-core-helpers": "1.6.1", @@ -6269,24 +19385,18 @@ }, "web3-core-subscriptions": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.6.1.tgz", - "integrity": "sha512-WZwxsYttIojyGQ5RqxuQcKg0IJdDCFpUe4EncS3QKZwxPqWzGmgyLwE0rm7tP+Ux1waJn5CUaaoSCBxWGSun1g==", "requires": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.6.1" }, "dependencies": { "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "version": "4.0.4" } } }, "web3-eth": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.6.1.tgz", - "integrity": "sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ==", "requires": { "web3-core": "1.6.1", "web3-core-helpers": "1.6.1", @@ -6304,8 +19414,6 @@ }, "web3-eth-abi": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz", - "integrity": "sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ==", "requires": { "@ethersproject/abi": "5.0.7", "web3-utils": "1.6.1" @@ -6313,8 +19421,6 @@ }, "web3-eth-accounts": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz", - "integrity": "sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w==", "requires": { "@ethereumjs/common": "^2.5.0", "@ethereumjs/tx": "^3.3.2", @@ -6331,8 +19437,6 @@ "dependencies": { "eth-lib": { "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "requires": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", @@ -6340,16 +19444,12 @@ } }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.2" } } }, "web3-eth-contract": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz", - "integrity": "sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ==", "requires": { "@types/bn.js": "^4.11.5", "web3-core": "1.6.1", @@ -6363,8 +19463,6 @@ }, "web3-eth-ens": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz", - "integrity": "sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ==", "requires": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", @@ -6378,8 +19476,6 @@ }, "web3-eth-iban": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz", - "integrity": "sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q==", "requires": { "bn.js": "^4.11.9", "web3-utils": "1.6.1" @@ -6387,8 +19483,6 @@ }, "web3-eth-personal": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz", - "integrity": "sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw==", "requires": { "@types/node": "^12.12.6", "web3-core": "1.6.1", @@ -6399,16 +19493,12 @@ }, "dependencies": { "@types/node": { - "version": "12.20.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz", - "integrity": "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==" + "version": "12.20.37" } } }, "web3-net": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.6.1.tgz", - "integrity": "sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw==", "requires": { "web3-core": "1.6.1", "web3-core-method": "1.6.1", @@ -6417,8 +19507,6 @@ }, "web3-provider-engine": { "version": "15.0.12", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-15.0.12.tgz", - "integrity": "sha512-/OfhQalKPND1iB5ggvGuYF0+SIb2Qj5OFTrT2VrZWP79UhMTdP7T+L2FtblmRdCeOetoAzZHdBaIwLOZsmIX+w==", "requires": { "async": "^2.5.0", "backoff": "^2.5.0", @@ -6446,8 +19534,6 @@ "dependencies": { "ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "requires": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -6460,8 +19546,6 @@ }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6473,24 +19557,18 @@ }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" } } }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.1.2" } } } @@ -6498,8 +19576,6 @@ }, "web3-providers-http": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.6.1.tgz", - "integrity": "sha512-xBoKOJxu10+kO3ikamXmBfrWZ/xpQOGy0ocdp7Y81B17En5TXELwlmMXt1UlIgWiyYDhjq4OwlH/VODYqHXy3A==", "requires": { "web3-core-helpers": "1.6.1", "xhr2-cookies": "1.1.0" @@ -6507,8 +19583,6 @@ }, "web3-providers-ipc": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.6.1.tgz", - "integrity": "sha512-anyoIZlpMzwEQI4lwylTzDrHsVp20v0QUtSTp2B5jInBinmQtyCE7vnbX20jEQ4j5uPwfJabKNtoJsk6a3O4WQ==", "requires": { "oboe": "2.1.5", "web3-core-helpers": "1.6.1" @@ -6516,8 +19590,6 @@ }, "web3-providers-ws": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.6.1.tgz", - "integrity": "sha512-FWMEFYb4rYFYRgSFBf/O1Ex4p/YKSlN+JydCtdlJwRimd89qm95CTfs4xGjCskwvXMjV2sarH+f1NPwJXicYpg==", "requires": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.6.1", @@ -6525,16 +19597,12 @@ }, "dependencies": { "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "version": "4.0.4" } } }, "web3-shh": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.6.1.tgz", - "integrity": "sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A==", "requires": { "web3-core": "1.6.1", "web3-core-method": "1.6.1", @@ -6544,8 +19612,6 @@ }, "web3-utils": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.6.1.tgz", - "integrity": "sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w==", "requires": { "bn.js": "^4.11.9", "ethereum-bloom-filters": "^1.0.6", @@ -6558,8 +19624,6 @@ }, "web3x": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/web3x/-/web3x-4.0.6.tgz", - "integrity": "sha512-rYc60WO6WjQ0O2b29LVM0Ov0Ca5DSfeKPfkUBpcT1JaB8JHnHRVedB/eBktIEytjUDMxotxIfsYRFsO4cbE95w==", "requires": { "@types/bn.js": "^4.11.2", "@types/node": "^10.12.18", @@ -6582,14 +19646,10 @@ }, "dependencies": { "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "version": "10.17.60" }, "bip39": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz", - "integrity": "sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==", "requires": { "create-hash": "^1.1.0", "pbkdf2": "^3.0.9", @@ -6599,14 +19659,10 @@ } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "1.14.1" }, "ws": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "requires": { "async-limiter": "~1.0.0" } @@ -6614,14 +19670,10 @@ } }, "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "version": "3.0.1" }, "websocket": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "requires": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -6632,23 +19684,25 @@ } }, "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "version": "2.0.4" }, "whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, "which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -6658,19 +19712,13 @@ } }, "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "version": "2.0.0" }, "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + "version": "1.0.0" }, "which-typed-array": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -6682,21 +19730,20 @@ }, "wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.3" + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" }, "wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6704,40 +19751,28 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "5.0.1" }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "3.0.0" }, "string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6746,8 +19781,6 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } @@ -6755,22 +19788,16 @@ } }, "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "version": "1.0.2" }, "ws": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", "requires": { "async-limiter": "~1.0.0" } }, "xhr": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", "requires": { "global": "~4.4.0", "is-function": "^1.0.1", @@ -6780,8 +19807,6 @@ }, "xhr-request": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", "requires": { "buffer-to-arraybuffer": "^0.0.5", "object-assign": "^4.1.1", @@ -6794,21 +19819,15 @@ "dependencies": { "decompress-response": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { "mimic-response": "^1.0.0" } }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "version": "1.0.1" }, "simple-get": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", "requires": { "decompress-response": "^3.3.0", "once": "^1.3.1", @@ -6819,57 +19838,39 @@ }, "xhr-request-promise": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", "requires": { "xhr-request": "^1.1.0" } }, "xhr2": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.3.tgz", - "integrity": "sha1-y/xHWaabSoiOeM9PILBRA4dXvRE=" + "version": "0.1.3" }, "xhr2-cookies": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", "requires": { "cookiejar": "^2.1.1" } }, "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "version": "4.0.2" }, "xxhashjs": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", "requires": { "cuint": "^0.2.2" } }, "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "version": "4.0.3" }, "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + "version": "0.0.6" }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "4.0.0" }, "yargs": { "version": "17.2.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", - "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -6881,22 +19882,16 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "5.0.1" }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -6905,26 +19900,18 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "3.0.0" }, "string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6933,16 +19920,12 @@ }, "strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } }, "wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6950,37 +19933,55 @@ } }, "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "version": "5.0.8" }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "version": "20.2.9" } } }, "yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" }, "dependencies": { "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "version": "5.3.1" + } + } + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" } } }, "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "version": "3.1.1" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/tools/package.json b/tools/package.json index 82a8e4498c..8c90a365e5 100644 --- a/tools/package.json +++ b/tools/package.json @@ -8,9 +8,10 @@ "eth-block-tracker": "^4.4.3", "ethereumjs-wallet": "^1.0.0", "ethjs-provider-http": "^0.1.6", + "moonbeam-types-bundle": "^2.0.7", "octokit": "^1.0.6", "pkg": "^4.4.9", - "polkadot-launch": "^1.8.0", + "polkadot-launch": "^2.3.0", "rlp": "^2.2.6", "solc": "^0.8.0", "truffle-privatekey-provider": "^1.5.0", @@ -26,6 +27,7 @@ "scripts": { "package-moon-key": "node_modules/.bin/tsc moon-key.ts; node_modules/.bin/pkg -t node14 moon-key.js; rm moon-key.js", "launch": "ts-node launch", + "get-binary": "ts-node get-binary", "list-pr-labels": "ts-node github/list-pr-labels.ts", "print-client-release-issue": "ts-node github/print-client-release-issue.ts", "print-runtime-release-issue": "ts-node github/print-runtime-release-issue.ts", diff --git a/typescript-api/package-lock.json b/typescript-api/package-lock.json index 7aaa480c39..4b1d7acdfc 100644 --- a/typescript-api/package-lock.json +++ b/typescript-api/package-lock.json @@ -1,21 +1,21 @@ { "name": "@moonbeam-network/api-augment", - "version": "0.0.1-beta.5", + "version": "0.1606.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@moonbeam-network/api-augment", - "version": "0.0.1-beta.5", + "version": "0.1606.0", "license": "GPL-3.0-only", "devDependencies": { - "@polkadot/api": "^8.3.1", - "@polkadot/typegen": "^8.3.1", - "prettier": "^2.6.2", + "@polkadot/api": "^8.10.1", + "@polkadot/typegen": "^8.10.1", + "prettier": "^2.7.1", "prettier-plugin-jsdoc": "^0.3.38", "rimraf": "^3.0.2", - "ts-node": "^10.7.0", - "typescript": "^4.6.4" + "ts-node": "^10.8.1", + "typescript": "^4.7.3" }, "engines": { "node": ">=14.0.0" @@ -47,30 +47,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -86,23 +86,37 @@ } }, "node_modules/@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dev": true, "dependencies": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.17.10", @@ -118,13 +132,10 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, "engines": { "node": ">=6.9.0" } @@ -167,9 +178,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", @@ -178,20 +189,20 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dev": true, "dependencies": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.2" }, "engines": { "node": ">=6.9.0" @@ -228,23 +239,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -256,9 +267,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -287,9 +298,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -313,19 +324,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -334,9 +345,9 @@ } }, "node_modules/@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -346,27 +357,28 @@ "node": ">=6.9.0" } }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" } }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -381,33 +393,33 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", - "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz", - "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.12", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.12.tgz", - "integrity": "sha512-az/NhpIwP3K33ILr0T2bso+k2E/SLf8Yidd8mHl0n6sCQ4YdyC8qDhZA6kOPDNDBA56ZnIjngVl0U3jREA0BUA==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -415,15 +427,21 @@ } }, "node_modules/@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, "node_modules/@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", + "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==", "dev": true, "funding": [ { @@ -433,26 +451,26 @@ ] }, "node_modules/@polkadot/api": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.3.1.tgz", - "integrity": "sha512-hgLjql4/4vi8U56xNbMNPjBVjzNmLNJ6QCc+E+Gcy5pXe1pCl7XOSNkDofReLK79yyDiciFDbyftVO8iforwew==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/api-augment": "8.3.1", - "@polkadot/api-base": "8.3.1", - "@polkadot/api-derive": "8.3.1", - "@polkadot/keyring": "^9.1.1", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/rpc-provider": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/types-known": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.10.1.tgz", + "integrity": "sha512-9v6rp5nrt4Irtb55dWQtAWzHQmMWyPC4xvnNGLYSfETvZR5XxkmWaI6yb2t0ejg/ZVTgcuercOp6DWmwT1qPTQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-augment": "8.10.1", + "@polkadot/api-base": "8.10.1", + "@polkadot/api-derive": "8.10.1", + "@polkadot/keyring": "^9.6.2", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/rpc-provider": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/types-known": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", "eventemitter3": "^4.0.7", "rxjs": "^7.5.5" }, @@ -461,33 +479,33 @@ } }, "node_modules/@polkadot/api-augment": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.3.1.tgz", - "integrity": "sha512-NuGUr3tBB7GNhnQjAIr/HYmW3NHeAw8cqlfUUrhxioPeRfVT6in7y5pDFu1/z7VIqF4KTHfGmnpOuNyebt4Anw==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.10.1.tgz", + "integrity": "sha512-JkVYT01auhU4ZLXiMadHnogQzB1eWrxWiBilmyIbkbGdFLprPUkcdUdOlcER8WcPtpsvcbbgvKSoxqwyf8hdRQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/api-base": "8.3.1", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/api-base": "8.10.1", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/api-base": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.3.1.tgz", - "integrity": "sha512-B0D82xYB/423ypWbSd1ndYabvcXYyp7UjNU02Ap39xe9LgJkeRbYP3oliCW4P2s9VsF6yWMTrbP2eizvao+haQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.10.1.tgz", + "integrity": "sha512-fLtzSDXdqmbbaVj8frmF49AtLyCvJFVvJAMZf//Rdr4RMmAcKuQri5wuEBVdGq2SdtaWF5IYy5y1cLR3l+JPhQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/util": "^9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/util": "^9.6.2", "rxjs": "^7.5.5" }, "engines": { @@ -495,20 +513,20 @@ } }, "node_modules/@polkadot/api-derive": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.3.1.tgz", - "integrity": "sha512-oOUqb0Tusp7I1G7QBb+EQJMP6xtE9WFlZ16vvh4irb/aLLrpdYwM1bQpoGh9WQjEHhVpCLo/5SQIkxBlmPoOwg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/api": "8.3.1", - "@polkadot/api-augment": "8.3.1", - "@polkadot/api-base": "8.3.1", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.10.1.tgz", + "integrity": "sha512-trQv0gHW2CIl9ySicAMIo/iE7npwskd4CTp9gvOURqWdrt9txeSCsavUmU2nSf9BofNxSNZMrwvHLgvnZYFZhg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.10.1", + "@polkadot/api-augment": "8.10.1", + "@polkadot/api-base": "8.10.1", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", "rxjs": "^7.5.5" }, "engines": { @@ -516,64 +534,64 @@ } }, "node_modules/@polkadot/keyring": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.1.1.tgz", - "integrity": "sha512-qjnO1795v7wDvU2hW0H+z7bMPNV3xcVnIjozt3/+Y5Lphu3Tohh3WNgf9uNKIUTwbWxTF4wWsiUM1ajY4CRuMA==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.6.2.tgz", + "integrity": "sha512-xcFx0m01G4jcYqEPJQQqF7Dn62x180G4TXaBR4iOTrjvNwmxx4PgIXN2DodHezb1dJLNSE0lu89OasID/dNNxA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "9.1.1", - "@polkadot/util-crypto": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.6.2", + "@polkadot/util-crypto": "9.6.2" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "@polkadot/util": "9.1.1", - "@polkadot/util-crypto": "9.1.1" + "@polkadot/util": "9.6.2", + "@polkadot/util-crypto": "9.6.2" } }, "node_modules/@polkadot/networks": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.1.1.tgz", - "integrity": "sha512-L/jk8vDr4shzGEVOqOimmXySLpbrN8+qlk+BR3A6rFa4N+XjtcGvnnt+so+rXwJOu7U4/ir6qPU2Iq63XbQTMA==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.6.2.tgz", + "integrity": "sha512-zTQkZGRSvgrj/XH1vUz1y1kZOhxT9qUn3T1BfMclbSBdyb+ugI+KLZhYffzfbl1YkQPyrR4MTpueHK40SjGaHg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "9.1.1", - "@substrate/ss58-registry": "^1.17.0" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.6.2", + "@substrate/ss58-registry": "^1.22.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/rpc-augment": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.3.1.tgz", - "integrity": "sha512-drPw1E+ATNch/atX3+iciwXeDe71EHAU9f/LSsFJ3w2vqf39bOuj3R7Os4/W2N3Anlvv1AFrmeAP3hK2nAlezA==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.10.1.tgz", + "integrity": "sha512-+k2RR5MLYu98WEFb9ktyzvhsd+VhWrVXuGwnDIGkGETNScEFFYAnqAfeCa/i4RJmMOhU+YrDmBr2C9uwC9aycQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/rpc-core": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.3.1.tgz", - "integrity": "sha512-iFdA4zPmPKhXx3+g3ONbLQ838opZKiD993baxJgOiiJKgGeCV2xtI2RwGImRKVeRwWvLR2jfAT5vzclUnXOZLA==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.10.1.tgz", + "integrity": "sha512-rQJoIAwry4Su5/+gyNVATQ1vIIpoZtWcNY82Vd8QPosHxEAG+GRi/tbsauB5IqcOl7/9QsBBjLc8zL3Fh3ZzAQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/rpc-provider": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/util": "^9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/rpc-provider": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/util": "^9.6.2", "rxjs": "^7.5.5" }, "engines": { @@ -581,52 +599,52 @@ } }, "node_modules/@polkadot/rpc-provider": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.3.1.tgz", - "integrity": "sha512-+Sg5JW4tXoSO09Cob9bqrfIcVp/D/tMbiyuTg5i/gG7jxZgSXbMu0irQHTteA0YvJSi0JkO1C/uQyljowT/9Ew==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/keyring": "^9.1.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-support": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", - "@polkadot/x-fetch": "^9.1.1", - "@polkadot/x-global": "^9.1.1", - "@polkadot/x-ws": "^9.1.1", - "@substrate/connect": "0.7.2", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.10.1.tgz", + "integrity": "sha512-G98YnaxrMmWz5VOuqrafJvF3jW0NxIRw8q+wfjZbNden0DlRB5ky+DAGg7hO915jG5mftrYwi4pEnS2jsl5xvg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.6.2", + "@polkadot/types": "8.10.1", + "@polkadot/types-support": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", + "@polkadot/x-fetch": "^9.6.2", + "@polkadot/x-global": "^9.6.2", + "@polkadot/x-ws": "^9.6.2", + "@substrate/connect": "0.7.7", "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.3", - "nock": "^13.2.4" + "mock-socket": "^9.1.5", + "nock": "^13.2.7" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/typegen": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/typegen/-/typegen-8.3.1.tgz", - "integrity": "sha512-eXOuKB/ZMgh1Tq9DM/Dipy4YULzWf6j1oIIE0CvSjEQ17XsYrfCMg4ME7pprVZbVVKYg8oOYxbwpB6wl9BDdVg==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/typegen/-/typegen-8.10.1.tgz", + "integrity": "sha512-wMKGGYhFspyt0lvOKTx7OIZbx7j5rXiXc3uOGt/TxB9gYePYdO1bTO1qKXhJMyWnIbM/kaA4ynlhkkShlkppng==", "dev": true, "dependencies": { - "@babel/core": "^7.17.10", + "@babel/core": "^7.18.5", "@babel/register": "^7.17.7", - "@babel/runtime": "^7.17.9", - "@polkadot/api": "8.3.1", - "@polkadot/api-augment": "8.3.1", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/rpc-provider": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/types-support": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/x-ws": "^9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.10.1", + "@polkadot/api-augment": "8.10.1", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/rpc-provider": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/types-support": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/x-ws": "^9.6.2", "handlebars": "^4.7.7", "websocket": "^1.0.34", - "yargs": "^17.4.1" + "yargs": "^17.5.1" }, "bin": { "polkadot-types-chain-info": "scripts/polkadot-types-chain-info.cjs", @@ -640,18 +658,18 @@ } }, "node_modules/@polkadot/types": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.3.1.tgz", - "integrity": "sha512-cpokZ4Ei/zduuojErwsei5LKRumkVb4GB4cvHWXEYorNai3MblRYW5huwMb/7+sPOiGHhPysFnHO9BZkrGTHAw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/keyring": "^9.1.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.10.1.tgz", + "integrity": "sha512-ypmaYui+cF8T83X+8vfTPAcTGL+bWuwNWT87+Dodtr486+QeTpvJK/XrkuNIY1NjEHPxFZlQQ9LA62S9S0PFYA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.6.2", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", "rxjs": "^7.5.5" }, "engines": { @@ -659,90 +677,91 @@ } }, "node_modules/@polkadot/types-augment": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.3.1.tgz", - "integrity": "sha512-eNvtpilnTg/hjdBiohZvkq2c+tGtf5r8nit2VOE3um0Ba80iXt0RItvNzWqShYNhGmD30gK7lDydz/HKa7uhow==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.10.1.tgz", + "integrity": "sha512-66TbDON42R0YN22gErJ1Tdg0UTTZyuWebkZe34KpQzOyDNu/gZdeEOM/AsBHhhReURyAbkCB/kBQQtUcCICPyA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/types-codec": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.3.1.tgz", - "integrity": "sha512-xixDDTnqaxavrD2v3xZmZ6l/su3WwKAPYXyILxuwRBBipkmTlBSjxjVnuVoRYP5F63AjHfMN/ZRqLs0ibZ+pRg==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.10.1.tgz", + "integrity": "sha512-AgDEjc6Fv/qPhLEqvsTtPQqkWGG3z+nNNEjQuPb0+iLqHY8NUTcd3yib60TnWCnd1+KNZmXZrryKWhpGejYvlA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.6.2", + "@polkadot/x-bigint": "^9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/types-create": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.3.1.tgz", - "integrity": "sha512-GyuqlBThPCoxztC2UMN4wGvbh9csTq+rerFrkVKoo1iVoGpghnwmnYw1QLHTYK8iEl6Ke5TfiyxpX8sq9PaYVQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.10.1.tgz", + "integrity": "sha512-frS98PSA6N1yS4R9/wK8dSe3GFZm+rsYAMXms2hEqzvXXVYle7tNO/ckMp2/hfat4L1pGCXStb70lv07oPuX+A==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/types-known": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.3.1.tgz", - "integrity": "sha512-qoNXPMTiuMJ1Ov5fxS85SWB3y9cwac8jQtfDq0TzAoOK6aAVSJbdOS9b4/Vgu0pLNpEhxeYZPtSyvKtS/RTEOQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.10.1.tgz", + "integrity": "sha512-/goHgCVGNTGV5BxBc7j0grSzAH3ZGIQuHhvGhcleFAk+vtzQJVZMUOqyhb0O6Aac1s+yJsGZ1r+RwoNCdbxXqQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/networks": "^9.1.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/networks": "^9.6.2", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/util": "^9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/types-support": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.3.1.tgz", - "integrity": "sha512-P8V28mH6VK8p5Cw+OT7ks62EWUa8f//P4mR03PC5XBgcd4pqbvo5BawPVYwARuENnmm46KLhlrcwy0QTHNCukQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.10.1.tgz", + "integrity": "sha512-OPIwaNLIB1ranEDnCauij13m6qm81kInjChMb03DgRclRENXdeaOYr3JvdpsEFqLfpPmfsTv3fT2UTaMu6dFpg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/util": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.1.1.tgz", - "integrity": "sha512-eJzyrM0+b+DLo1hD+y4Al1DOEdF0UEUVnWqWZNIx2fuKsgG72gFosJM0EOjbVoxq8B1Hx3KOCNc0fl3Mpc9oYQ==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.6.2.tgz", + "integrity": "sha512-ebK46kEsXfzqUgaPVbVOZepHtVJR2qd9FHTLBPcoXR601y6IuqCHkp0hMkrD3Cdi5AWAd0a7h84c1/Oj5q3SnA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-bigint": "9.1.1", - "@polkadot/x-global": "9.1.1", - "@polkadot/x-textdecoder": "9.1.1", - "@polkadot/x-textencoder": "9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.6.2", + "@polkadot/x-global": "9.6.2", + "@polkadot/x-textdecoder": "9.6.2", + "@polkadot/x-textencoder": "9.6.2", "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", + "bn.js": "^5.2.1", "ip-regex": "^4.3.0" }, "engines": { @@ -750,20 +769,20 @@ } }, "node_modules/@polkadot/util-crypto": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.1.1.tgz", - "integrity": "sha512-FiQ4u8q1QZNdE2MUMb3JupbSMei9Ww6Czo/QYPguy73Tp6OH3G9OX8abBgTUwS/gX/CFcbHajhb3oi95v0IgVg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.17.9", - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@polkadot/networks": "9.1.1", - "@polkadot/util": "9.1.1", - "@polkadot/wasm-crypto": "^6.0.1", - "@polkadot/x-bigint": "9.1.1", - "@polkadot/x-randomvalues": "9.1.1", - "@scure/base": "1.0.0", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.6.2.tgz", + "integrity": "sha512-ptr4RnVevjW5Sel3JjLJUaT1YmG04zeof4hddJJuQ/H8S/WIkv4uRgT9lkjw54U/DB+qS44XO/uIGMlR7BtLQg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.6.2", + "@polkadot/util": "9.6.2", + "@polkadot/wasm-crypto": "^6.1.5", + "@polkadot/x-bigint": "9.6.2", + "@polkadot/x-randomvalues": "9.6.2", + "@scure/base": "1.1.1", "ed2curve": "^0.3.0", "tweetnacl": "^1.0.3" }, @@ -771,18 +790,16 @@ "node": ">=14.0.0" }, "peerDependencies": { - "@polkadot/util": "9.1.1" + "@polkadot/util": "9.6.2" } }, - "node_modules/@polkadot/wasm-crypto": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.0.1.tgz", - "integrity": "sha512-nW5DDrciHGbZbj0Xh7w0Bnh5exSJUw96Zux7RuGfXuoXXHZBcf0QiB4E2dcVh3d/NkF7PkB99FlkdQxQp4M0Rg==", + "node_modules/@polkadot/wasm-bridge": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.1.5.tgz", + "integrity": "sha512-nqxhJQTjw5P3yEY1Cd9g86GvpY/PHD3h74dszaBOg5GVPE53G18AKehb5I8daSpOHVKsItKK1n8xstxZTVI0Hg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/wasm-crypto-asmjs": "^6.0.1", - "@polkadot/wasm-crypto-wasm": "^6.0.1" + "@babel/runtime": "^7.18.3" }, "engines": { "node": ">=14.0.0" @@ -792,13 +809,51 @@ "@polkadot/x-randomvalues": "*" } }, + "node_modules/@polkadot/wasm-crypto": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.1.5.tgz", + "integrity": "sha512-P4MIVE0RJm+Ar0qbOFFtEvA9fkrcmu4KI929k/XiWOqqKuLogwNjZcZiWZYLG7pDIXeHciAy65nIUpV2nr0D+Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/wasm-bridge": "6.1.5", + "@polkadot/wasm-crypto-asmjs": "6.1.5", + "@polkadot/wasm-crypto-init": "6.1.5", + "@polkadot/wasm-crypto-wasm": "6.1.5", + "@polkadot/wasm-util": "6.1.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, "node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.0.1.tgz", - "integrity": "sha512-cSGsHBLfPW2nHztgZd+gisCoScA02jbAzwjop/b8xumQ2kq7yAed/K9G1lOQiofEKRetIJeqBzJyk0etopRORw==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.1.5.tgz", + "integrity": "sha512-GsVIe+fjJ2sHfrjtqSLV0tP6nClF/7/QXZd+BAWomVMCVcR35OIrkNK2giDzlCqaTP+MiCb/UF3phrU4wsHV4Q==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9" + "@babel/runtime": "^7.18.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-crypto-init": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.1.5.tgz", + "integrity": "sha512-VkBNc4cEkQ9YWAKLGW2ve2HV56GBHii3Xy4QYV+8OFYiOUbBMDVmuAvjlCjxiwa8nUxLzgCIz0HqqUx2YzxkhQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/wasm-bridge": "6.1.5", + "@polkadot/wasm-crypto-asmjs": "6.1.5", + "@polkadot/wasm-crypto-wasm": "6.1.5" }, "engines": { "node": ">=14.0.0" @@ -808,12 +863,28 @@ } }, "node_modules/@polkadot/wasm-crypto-wasm": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.0.1.tgz", - "integrity": "sha512-0r/QgOjIyw4U0mLk6Tm97Di92uxcSPjTo7dK6tdXo1PwYouhzO5IJnL/jNgma8dm5hQoBhk7rcErmkh8c1kLFQ==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.1.5.tgz", + "integrity": "sha512-YKriV8xUnnNVCykB0c1r0JEQgGPmgPMsEfHLzKhUeE415vkj3UcfcgXuOXVSEXKqgeoCLkvlY5OL3yb3Fg+Xbw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "@polkadot/wasm-util": "6.1.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@polkadot/util": "*" + } + }, + "node_modules/@polkadot/wasm-util": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.1.5.tgz", + "integrity": "sha512-5OH31mz8/Ly50fNOQ6eGFcO8OtLLyTvaoJPqUmcdl6OI+1+8GLoZMoXyRdrhWjftqQFxiJnwvlpqq6VdNVDg6g==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9" + "@babel/runtime": "^7.18.3" }, "engines": { "node": ">=14.0.0" @@ -823,27 +894,27 @@ } }, "node_modules/@polkadot/x-bigint": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.1.1.tgz", - "integrity": "sha512-1At5Gut4Wzep59vKTATCMWwm6EG0h+vq/qftou5kvt8u0QI2+YGJ5LAXzHk3n0/OOn8cvuAzS2kYQ4duE7YA+g==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.6.2.tgz", + "integrity": "sha512-p2PAx5uJM4zGhbDCEMiFbeOndP8bnzdEdvB4aP17o4AQ8iHM/TrhiOMD7xYeUtMpc0TP+Z6X0ZRqsAt4jBzoRg==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/x-fetch": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.1.1.tgz", - "integrity": "sha512-hoV/73i8znFCTOaDElGPQAF0AcOV9C7QAq7oJkkfaTqLaRbn2rKg7ZiwLzbFo/8YYGq3QTRcO4gzd5UD2NXZ0Q==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.6.2.tgz", + "integrity": "sha512-nTZOzpmgj+f5KxRcZxValpgnAc2xxefY84XaF3XKcQQBfQrN+/Kssfl5VjAoCGfBSpVVzXs/4/cN0oee5BldMQ==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1", - "@types/node-fetch": "^2.6.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2", + "@types/node-fetch": "^2.6.2", "node-fetch": "^2.6.7" }, "engines": { @@ -851,64 +922,64 @@ } }, "node_modules/@polkadot/x-global": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.1.1.tgz", - "integrity": "sha512-2aP6edHMPE14mQUFA8ipiB74PKoS6/wFWjTSbGqVOkGN0B7/kvX0/bW2fb6jPcfQlutPeqGN6dZnraoqzTzv6w==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.6.2.tgz", + "integrity": "sha512-cbrNeMK6vPEWh2EbLU+hUOERkOAToZ7o2wYYS+ZNdunvUFL9wERB9Uj6JQDAebGD3ZCNHEpMbj6U1WEffiwq9A==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9" + "@babel/runtime": "^7.18.3" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/x-randomvalues": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.1.1.tgz", - "integrity": "sha512-so99yggz5QoCHaVLxekIPK7Ia8Aynv0pPmTroGpWUrR1Gjj5l1dU7lN3sfyA7MBij4uGYiI3sSma5KmlRYawiQ==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.6.2.tgz", + "integrity": "sha512-GuyTYTkKK6MLPcfWX3rKRze3nUYjdRYWK1PKscslRp0Qq4LBTkroqlE7SMTt8Bh7DYH+0fWN2CmHGdv2oEUq9A==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/x-textdecoder": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.1.1.tgz", - "integrity": "sha512-0eQPesYOfpdetHMIzTUiXcMOPzjX2hzgdSC9Q64iGWoRKwly1clUQ9SPlwEmkRF7ulPcq1pZv2kgHdKNj+lL8g==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.6.2.tgz", + "integrity": "sha512-nWd2sWU7vjUON4FSd6B2aSYmgkooYf1V+kjTPs8uV/PN6KMc6qJInrt4U1vnOvM8wX5+4gvLDs72AVxnFmVRAA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/x-textencoder": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.1.1.tgz", - "integrity": "sha512-DyemF56si5xgXLS+l9yl3YivC2cLFlGSUarKyrP+MRVAqVKlLc9h3KXDxwnVxNeLVTg2gxSLpxo6pGqLydtFaQ==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.6.2.tgz", + "integrity": "sha512-T+ZsR2cVJxmpN6VB4u3BoWCg3fUlXHPNGCZSGXZdH2+dljIQl6MXqe+mHd5jknGvyBWCrJ0ijqoSOtLeP88MhA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@polkadot/x-ws": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.1.1.tgz", - "integrity": "sha512-jojrlEbeabRRCj0449IDg7BTOOntinMDZJJkABnPG3WnTtHa82TZQmrrdE51PIolGwFW6qDamh9IQcfI/Ir7Yw==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.6.2.tgz", + "integrity": "sha512-DT10DqFzM2PGe+0tmClgF5G7biM/akVpAQ9JGIdwV8PxWFWjxbhRasndPfVZEmCi2o8KIVlP6m1qovfS2PdbHA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2", "@types/websocket": "^1.0.5", "websocket": "^1.0.34" }, @@ -917,9 +988,9 @@ } }, "node_modules/@scure/base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", - "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", "dev": true, "funding": [ { @@ -929,13 +1000,13 @@ ] }, "node_modules/@substrate/connect": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.2.tgz", - "integrity": "sha512-8GWdrN7qbClYLa9LmETJnywT5fknEQeMw+QKvkUMvsHKegHD0Zkhi0K484mKxRN9RGwcPsKHPj1gMk8xlZuJ9g==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.7.tgz", + "integrity": "sha512-uFRF06lC42ZZixxwkzRB61K1uYvR1cTZ7rI98RW7T+eWbCFrafyVk0pk6J+4oN05gZkhou+VK3hrRCU6Doy2xQ==", "dev": true, "dependencies": { "@substrate/connect-extension-protocol": "^1.0.0", - "@substrate/smoldot-light": "0.6.15", + "@substrate/smoldot-light": "0.6.19", "eventemitter3": "^4.0.7" } }, @@ -946,9 +1017,9 @@ "dev": true }, "node_modules/@substrate/smoldot-light": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.15.tgz", - "integrity": "sha512-c2tJCSp9Litsn/p8wY1FfEqIkJI8Peh89BU7T43bruWRO2SSgLVh0cIVbOCY4en90tIOX4W0CueRWFBRQz7BjQ==", + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.19.tgz", + "integrity": "sha512-Xi+v1cdURhTwx7NH+9fa1U9m7VGP61GvB6qwev9HrZXlGbQiUIvySxPlH/LMsq3mwgiRYkokPhcaZEHufY7Urg==", "dev": true, "dependencies": { "buffer": "^6.0.1", @@ -957,33 +1028,33 @@ } }, "node_modules/@substrate/ss58-registry": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.17.0.tgz", - "integrity": "sha512-YdQOxCtEZLnYZFg/zSzfROYtvIs5+iLD7p/VHoll7AVEhrPAmxgF5ggMDB2Dass7dfwABVx7heATbPFNg95Q8w==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.23.0.tgz", + "integrity": "sha512-LuQje7n48GXSsp1aGI6UEmNVtlh7OzQ6CN1Hd9VGUrshADwMB0lRZ5bxnffmqDR4vVugI7h0NN0AONhIW1eHGg==", "dev": true }, "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "node_modules/@types/bn.js": { @@ -1020,15 +1091,15 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", - "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", "dev": true }, "node_modules/@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "dev": true, "dependencies": { "@types/node": "*", @@ -1051,9 +1122,9 @@ } }, "node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1101,7 +1172,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "node_modules/balanced-match": { @@ -1137,9 +1208,9 @@ "dev": true }, "node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, "node_modules/brace-expansion": { @@ -1153,9 +1224,9 @@ } }, "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", "dev": true, "funding": [ { @@ -1168,10 +1239,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", "escalade": "^3.1.1", - "node-releases": "^2.0.3", + "node-releases": "^2.0.5", "picocolors": "^1.0.0" }, "bin": { @@ -1225,9 +1296,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001335", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz", - "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==", + "version": "1.0.30001355", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001355.tgz", + "integrity": "sha512-Sd6pjJHF27LzCB7pT7qs+kuX2ndurzCzkpJl6Qct7LPSZ9jn0bkOA8mdgMgmqnQAWLVOOGjLpc+66V57eLtb1g==", "dev": true, "funding": [ { @@ -1301,7 +1372,7 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/combined-stream": { @@ -1328,7 +1399,7 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "node_modules/concat-map": { @@ -1395,7 +1466,7 @@ "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -1429,9 +1500,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.131", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.131.tgz", - "integrity": "sha512-oi3YPmaP87hiHn0c4ePB67tXaF+ldGhxvZnT19tW9zX6/Ej+pLN0Afja5rQ6S+TND7I9EuwQTT8JYn1k7R7rrw==", + "version": "1.4.160", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.160.tgz", + "integrity": "sha512-O1Z12YfyeX2LXYO7MdHIPazGXzLzQnr1ADW55U2ARQsJBPgfpJz3u+g3Mo2l1wSyfOCdiGqaX9qtV4XKZ0HNRA==", "dev": true }, "node_modules/emoji-regex": { @@ -1458,7 +1529,7 @@ "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "dependencies": { "d": "1", @@ -1488,7 +1559,7 @@ "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -1632,7 +1703,7 @@ "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -1707,13 +1778,13 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1740,7 +1811,7 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "node_modules/json5": { @@ -1786,10 +1857,10 @@ "node": ">=6" } }, - "node_modules/lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/make-dir": { @@ -2331,15 +2402,15 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/mock-socket": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.3.tgz", - "integrity": "sha512-uz8lx8c5wuJYJ21f5UtovqpV0+KJuVwE7cVOLNhrl2QW/CvmstOLRfjXnLSbfFHZtJtiaSGQu0oCJA8SmRcK6A==", + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==", "dev": true, "engines": { "node": ">= 8" @@ -2373,14 +2444,14 @@ "dev": true }, "node_modules/nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", + "version": "13.2.7", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.7.tgz", + "integrity": "sha512-R6NUw7RIPtKwgK7jskuKoEi4VFMqIHtV2Uu9K/Uegc4TA5cqe+oNMYslZcUmnVNQCTG6wcSqUBaGTDd7sq5srg==", "dev": true, "dependencies": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", + "lodash": "^4.17.21", "propagate": "^2.0.0" }, "engines": { @@ -2419,9 +2490,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, "node_modules/once": { @@ -2478,7 +2549,7 @@ "node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { "node": ">=4" @@ -2530,9 +2601,9 @@ } }, "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -2579,7 +2650,7 @@ "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -2708,7 +2779,7 @@ "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, "engines": { "node": ">=4" @@ -2717,16 +2788,16 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", "dev": true, "dependencies": { - "@cspotcode/source-map-support": "0.7.0", + "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -2737,7 +2808,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "bin": { @@ -2764,9 +2835,9 @@ } }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "node_modules/tweetnacl": { @@ -2791,9 +2862,9 @@ } }, "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", + "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -2804,9 +2875,9 @@ } }, "node_modules/uglify-js": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.0.tgz", - "integrity": "sha512-x+xdeDWq7FiORDvyIJ0q/waWd4PhjBNOm5dQUOq2AKC0IEjxOS66Ha9tctiVDGcRQuh69K7fgU5oRuTK4cysSg==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", + "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", "dev": true, "optional": true, "bin": { @@ -2870,15 +2941,15 @@ } }, "node_modules/v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/websocket": { @@ -2910,13 +2981,13 @@ "node_modules/websocket/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { "tr46": "~0.0.3", @@ -2926,7 +2997,7 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, "node_modules/wrap-ansi": { @@ -2997,16 +3068,16 @@ "node_modules/yaeti": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", "dev": true, "engines": { "node": ">=0.10.32" } }, "node_modules/yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", "dev": true, "dependencies": { "cliui": "^7.0.2", @@ -3061,27 +3132,27 @@ } }, "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", "dev": true }, "@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -3090,20 +3161,33 @@ } }, "@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dev": true, "requires": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", "dev": true, "requires": { "@babel/compat-data": "^7.17.10", @@ -3113,13 +3197,10 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "dev": true }, "@babel/helper-function-name": { "version": "7.17.9", @@ -3150,9 +3231,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", @@ -3161,17 +3242,17 @@ "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" } }, "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dev": true, "requires": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.2" } }, "@babel/helper-split-export-declaration": { @@ -3196,20 +3277,20 @@ "dev": true }, "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" } }, "@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -3218,9 +3299,9 @@ } }, "@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "dev": true }, "@babel/register": { @@ -3237,9 +3318,9 @@ } }, "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -3257,46 +3338,52 @@ } }, "@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "requires": { - "@cspotcode/source-map-consumer": "0.8.0" + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } } }, "@jridgewell/gen-mapping": { @@ -3310,27 +3397,27 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", - "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", "dev": true }, "@jridgewell/set-array": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz", - "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.12", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.12.tgz", - "integrity": "sha512-az/NhpIwP3K33ILr0T2bso+k2E/SLf8Yidd8mHl0n6sCQ4YdyC8qDhZA6kOPDNDBA56ZnIjngVl0U3jREA0BUA==", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -3338,407 +3425,442 @@ } }, "@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", "dev": true }, "@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", + "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==", "dev": true }, "@polkadot/api": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.3.1.tgz", - "integrity": "sha512-hgLjql4/4vi8U56xNbMNPjBVjzNmLNJ6QCc+E+Gcy5pXe1pCl7XOSNkDofReLK79yyDiciFDbyftVO8iforwew==", - "dev": true, - "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/api-augment": "8.3.1", - "@polkadot/api-base": "8.3.1", - "@polkadot/api-derive": "8.3.1", - "@polkadot/keyring": "^9.1.1", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/rpc-provider": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/types-known": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.10.1.tgz", + "integrity": "sha512-9v6rp5nrt4Irtb55dWQtAWzHQmMWyPC4xvnNGLYSfETvZR5XxkmWaI6yb2t0ejg/ZVTgcuercOp6DWmwT1qPTQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/api-augment": "8.10.1", + "@polkadot/api-base": "8.10.1", + "@polkadot/api-derive": "8.10.1", + "@polkadot/keyring": "^9.6.2", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/rpc-provider": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/types-known": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", "eventemitter3": "^4.0.7", "rxjs": "^7.5.5" } }, "@polkadot/api-augment": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.3.1.tgz", - "integrity": "sha512-NuGUr3tBB7GNhnQjAIr/HYmW3NHeAw8cqlfUUrhxioPeRfVT6in7y5pDFu1/z7VIqF4KTHfGmnpOuNyebt4Anw==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.10.1.tgz", + "integrity": "sha512-JkVYT01auhU4ZLXiMadHnogQzB1eWrxWiBilmyIbkbGdFLprPUkcdUdOlcER8WcPtpsvcbbgvKSoxqwyf8hdRQ==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/api-base": "8.3.1", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/api-base": "8.10.1", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" } }, "@polkadot/api-base": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.3.1.tgz", - "integrity": "sha512-B0D82xYB/423ypWbSd1ndYabvcXYyp7UjNU02Ap39xe9LgJkeRbYP3oliCW4P2s9VsF6yWMTrbP2eizvao+haQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.10.1.tgz", + "integrity": "sha512-fLtzSDXdqmbbaVj8frmF49AtLyCvJFVvJAMZf//Rdr4RMmAcKuQri5wuEBVdGq2SdtaWF5IYy5y1cLR3l+JPhQ==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/util": "^9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/util": "^9.6.2", "rxjs": "^7.5.5" } }, "@polkadot/api-derive": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.3.1.tgz", - "integrity": "sha512-oOUqb0Tusp7I1G7QBb+EQJMP6xtE9WFlZ16vvh4irb/aLLrpdYwM1bQpoGh9WQjEHhVpCLo/5SQIkxBlmPoOwg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/api": "8.3.1", - "@polkadot/api-augment": "8.3.1", - "@polkadot/api-base": "8.3.1", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.10.1.tgz", + "integrity": "sha512-trQv0gHW2CIl9ySicAMIo/iE7npwskd4CTp9gvOURqWdrt9txeSCsavUmU2nSf9BofNxSNZMrwvHLgvnZYFZhg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.10.1", + "@polkadot/api-augment": "8.10.1", + "@polkadot/api-base": "8.10.1", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", "rxjs": "^7.5.5" } }, "@polkadot/keyring": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.1.1.tgz", - "integrity": "sha512-qjnO1795v7wDvU2hW0H+z7bMPNV3xcVnIjozt3/+Y5Lphu3Tohh3WNgf9uNKIUTwbWxTF4wWsiUM1ajY4CRuMA==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.6.2.tgz", + "integrity": "sha512-xcFx0m01G4jcYqEPJQQqF7Dn62x180G4TXaBR4iOTrjvNwmxx4PgIXN2DodHezb1dJLNSE0lu89OasID/dNNxA==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "9.1.1", - "@polkadot/util-crypto": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.6.2", + "@polkadot/util-crypto": "9.6.2" } }, "@polkadot/networks": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.1.1.tgz", - "integrity": "sha512-L/jk8vDr4shzGEVOqOimmXySLpbrN8+qlk+BR3A6rFa4N+XjtcGvnnt+so+rXwJOu7U4/ir6qPU2Iq63XbQTMA==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.6.2.tgz", + "integrity": "sha512-zTQkZGRSvgrj/XH1vUz1y1kZOhxT9qUn3T1BfMclbSBdyb+ugI+KLZhYffzfbl1YkQPyrR4MTpueHK40SjGaHg==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "9.1.1", - "@substrate/ss58-registry": "^1.17.0" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "9.6.2", + "@substrate/ss58-registry": "^1.22.0" } }, "@polkadot/rpc-augment": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.3.1.tgz", - "integrity": "sha512-drPw1E+ATNch/atX3+iciwXeDe71EHAU9f/LSsFJ3w2vqf39bOuj3R7Os4/W2N3Anlvv1AFrmeAP3hK2nAlezA==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.10.1.tgz", + "integrity": "sha512-+k2RR5MLYu98WEFb9ktyzvhsd+VhWrVXuGwnDIGkGETNScEFFYAnqAfeCa/i4RJmMOhU+YrDmBr2C9uwC9aycQ==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/rpc-core": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-core": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" } }, "@polkadot/rpc-core": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.3.1.tgz", - "integrity": "sha512-iFdA4zPmPKhXx3+g3ONbLQ838opZKiD993baxJgOiiJKgGeCV2xtI2RwGImRKVeRwWvLR2jfAT5vzclUnXOZLA==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.10.1.tgz", + "integrity": "sha512-rQJoIAwry4Su5/+gyNVATQ1vIIpoZtWcNY82Vd8QPosHxEAG+GRi/tbsauB5IqcOl7/9QsBBjLc8zL3Fh3ZzAQ==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/rpc-provider": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/util": "^9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/rpc-provider": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/util": "^9.6.2", "rxjs": "^7.5.5" } }, "@polkadot/rpc-provider": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.3.1.tgz", - "integrity": "sha512-+Sg5JW4tXoSO09Cob9bqrfIcVp/D/tMbiyuTg5i/gG7jxZgSXbMu0irQHTteA0YvJSi0JkO1C/uQyljowT/9Ew==", - "dev": true, - "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/keyring": "^9.1.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-support": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", - "@polkadot/x-fetch": "^9.1.1", - "@polkadot/x-global": "^9.1.1", - "@polkadot/x-ws": "^9.1.1", - "@substrate/connect": "0.7.2", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.10.1.tgz", + "integrity": "sha512-G98YnaxrMmWz5VOuqrafJvF3jW0NxIRw8q+wfjZbNden0DlRB5ky+DAGg7hO915jG5mftrYwi4pEnS2jsl5xvg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.6.2", + "@polkadot/types": "8.10.1", + "@polkadot/types-support": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", + "@polkadot/x-fetch": "^9.6.2", + "@polkadot/x-global": "^9.6.2", + "@polkadot/x-ws": "^9.6.2", + "@substrate/connect": "0.7.7", "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.3", - "nock": "^13.2.4" + "mock-socket": "^9.1.5", + "nock": "^13.2.7" } }, "@polkadot/typegen": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/typegen/-/typegen-8.3.1.tgz", - "integrity": "sha512-eXOuKB/ZMgh1Tq9DM/Dipy4YULzWf6j1oIIE0CvSjEQ17XsYrfCMg4ME7pprVZbVVKYg8oOYxbwpB6wl9BDdVg==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/typegen/-/typegen-8.10.1.tgz", + "integrity": "sha512-wMKGGYhFspyt0lvOKTx7OIZbx7j5rXiXc3uOGt/TxB9gYePYdO1bTO1qKXhJMyWnIbM/kaA4ynlhkkShlkppng==", "dev": true, "requires": { - "@babel/core": "^7.17.10", + "@babel/core": "^7.18.5", "@babel/register": "^7.17.7", - "@babel/runtime": "^7.17.9", - "@polkadot/api": "8.3.1", - "@polkadot/api-augment": "8.3.1", - "@polkadot/rpc-augment": "8.3.1", - "@polkadot/rpc-provider": "8.3.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/types-support": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/x-ws": "^9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/api": "8.10.1", + "@polkadot/api-augment": "8.10.1", + "@polkadot/rpc-augment": "8.10.1", + "@polkadot/rpc-provider": "8.10.1", + "@polkadot/types": "8.10.1", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/types-support": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/x-ws": "^9.6.2", "handlebars": "^4.7.7", "websocket": "^1.0.34", - "yargs": "^17.4.1" + "yargs": "^17.5.1" } }, "@polkadot/types": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.3.1.tgz", - "integrity": "sha512-cpokZ4Ei/zduuojErwsei5LKRumkVb4GB4cvHWXEYorNai3MblRYW5huwMb/7+sPOiGHhPysFnHO9BZkrGTHAw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/keyring": "^9.1.1", - "@polkadot/types-augment": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/util": "^9.1.1", - "@polkadot/util-crypto": "^9.1.1", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.10.1.tgz", + "integrity": "sha512-ypmaYui+cF8T83X+8vfTPAcTGL+bWuwNWT87+Dodtr486+QeTpvJK/XrkuNIY1NjEHPxFZlQQ9LA62S9S0PFYA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/keyring": "^9.6.2", + "@polkadot/types-augment": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/util": "^9.6.2", + "@polkadot/util-crypto": "^9.6.2", "rxjs": "^7.5.5" } }, "@polkadot/types-augment": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.3.1.tgz", - "integrity": "sha512-eNvtpilnTg/hjdBiohZvkq2c+tGtf5r8nit2VOE3um0Ba80iXt0RItvNzWqShYNhGmD30gK7lDydz/HKa7uhow==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.10.1.tgz", + "integrity": "sha512-66TbDON42R0YN22gErJ1Tdg0UTTZyuWebkZe34KpQzOyDNu/gZdeEOM/AsBHhhReURyAbkCB/kBQQtUcCICPyA==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" } }, "@polkadot/types-codec": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.3.1.tgz", - "integrity": "sha512-xixDDTnqaxavrD2v3xZmZ6l/su3WwKAPYXyILxuwRBBipkmTlBSjxjVnuVoRYP5F63AjHfMN/ZRqLs0ibZ+pRg==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.10.1.tgz", + "integrity": "sha512-AgDEjc6Fv/qPhLEqvsTtPQqkWGG3z+nNNEjQuPb0+iLqHY8NUTcd3yib60TnWCnd1+KNZmXZrryKWhpGejYvlA==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.6.2", + "@polkadot/x-bigint": "^9.6.2" } }, "@polkadot/types-create": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.3.1.tgz", - "integrity": "sha512-GyuqlBThPCoxztC2UMN4wGvbh9csTq+rerFrkVKoo1iVoGpghnwmnYw1QLHTYK8iEl6Ke5TfiyxpX8sq9PaYVQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.10.1.tgz", + "integrity": "sha512-frS98PSA6N1yS4R9/wK8dSe3GFZm+rsYAMXms2hEqzvXXVYle7tNO/ckMp2/hfat4L1pGCXStb70lv07oPuX+A==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/types-codec": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/types-codec": "8.10.1", + "@polkadot/util": "^9.6.2" } }, "@polkadot/types-known": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.3.1.tgz", - "integrity": "sha512-qoNXPMTiuMJ1Ov5fxS85SWB3y9cwac8jQtfDq0TzAoOK6aAVSJbdOS9b4/Vgu0pLNpEhxeYZPtSyvKtS/RTEOQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.10.1.tgz", + "integrity": "sha512-/goHgCVGNTGV5BxBc7j0grSzAH3ZGIQuHhvGhcleFAk+vtzQJVZMUOqyhb0O6Aac1s+yJsGZ1r+RwoNCdbxXqQ==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/networks": "^9.1.1", - "@polkadot/types": "8.3.1", - "@polkadot/types-codec": "8.3.1", - "@polkadot/types-create": "8.3.1", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/networks": "^9.6.2", + "@polkadot/types": "8.10.1", + "@polkadot/types-codec": "8.10.1", + "@polkadot/types-create": "8.10.1", + "@polkadot/util": "^9.6.2" } }, "@polkadot/types-support": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.3.1.tgz", - "integrity": "sha512-P8V28mH6VK8p5Cw+OT7ks62EWUa8f//P4mR03PC5XBgcd4pqbvo5BawPVYwARuENnmm46KLhlrcwy0QTHNCukQ==", + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.10.1.tgz", + "integrity": "sha512-OPIwaNLIB1ranEDnCauij13m6qm81kInjChMb03DgRclRENXdeaOYr3JvdpsEFqLfpPmfsTv3fT2UTaMu6dFpg==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/util": "^9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/util": "^9.6.2" } }, "@polkadot/util": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.1.1.tgz", - "integrity": "sha512-eJzyrM0+b+DLo1hD+y4Al1DOEdF0UEUVnWqWZNIx2fuKsgG72gFosJM0EOjbVoxq8B1Hx3KOCNc0fl3Mpc9oYQ==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.6.2.tgz", + "integrity": "sha512-ebK46kEsXfzqUgaPVbVOZepHtVJR2qd9FHTLBPcoXR601y6IuqCHkp0hMkrD3Cdi5AWAd0a7h84c1/Oj5q3SnA==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-bigint": "9.1.1", - "@polkadot/x-global": "9.1.1", - "@polkadot/x-textdecoder": "9.1.1", - "@polkadot/x-textencoder": "9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-bigint": "9.6.2", + "@polkadot/x-global": "9.6.2", + "@polkadot/x-textdecoder": "9.6.2", + "@polkadot/x-textencoder": "9.6.2", "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", + "bn.js": "^5.2.1", "ip-regex": "^4.3.0" } }, "@polkadot/util-crypto": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.1.1.tgz", - "integrity": "sha512-FiQ4u8q1QZNdE2MUMb3JupbSMei9Ww6Czo/QYPguy73Tp6OH3G9OX8abBgTUwS/gX/CFcbHajhb3oi95v0IgVg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.17.9", - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@polkadot/networks": "9.1.1", - "@polkadot/util": "9.1.1", - "@polkadot/wasm-crypto": "^6.0.1", - "@polkadot/x-bigint": "9.1.1", - "@polkadot/x-randomvalues": "9.1.1", - "@scure/base": "1.0.0", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.6.2.tgz", + "integrity": "sha512-ptr4RnVevjW5Sel3JjLJUaT1YmG04zeof4hddJJuQ/H8S/WIkv4uRgT9lkjw54U/DB+qS44XO/uIGMlR7BtLQg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.0", + "@polkadot/networks": "9.6.2", + "@polkadot/util": "9.6.2", + "@polkadot/wasm-crypto": "^6.1.5", + "@polkadot/x-bigint": "9.6.2", + "@polkadot/x-randomvalues": "9.6.2", + "@scure/base": "1.1.1", "ed2curve": "^0.3.0", "tweetnacl": "^1.0.3" } }, + "@polkadot/wasm-bridge": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.1.5.tgz", + "integrity": "sha512-nqxhJQTjw5P3yEY1Cd9g86GvpY/PHD3h74dszaBOg5GVPE53G18AKehb5I8daSpOHVKsItKK1n8xstxZTVI0Hg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3" + } + }, "@polkadot/wasm-crypto": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.0.1.tgz", - "integrity": "sha512-nW5DDrciHGbZbj0Xh7w0Bnh5exSJUw96Zux7RuGfXuoXXHZBcf0QiB4E2dcVh3d/NkF7PkB99FlkdQxQp4M0Rg==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.1.5.tgz", + "integrity": "sha512-P4MIVE0RJm+Ar0qbOFFtEvA9fkrcmu4KI929k/XiWOqqKuLogwNjZcZiWZYLG7pDIXeHciAy65nIUpV2nr0D+Q==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/wasm-crypto-asmjs": "^6.0.1", - "@polkadot/wasm-crypto-wasm": "^6.0.1" + "@babel/runtime": "^7.18.3", + "@polkadot/wasm-bridge": "6.1.5", + "@polkadot/wasm-crypto-asmjs": "6.1.5", + "@polkadot/wasm-crypto-init": "6.1.5", + "@polkadot/wasm-crypto-wasm": "6.1.5", + "@polkadot/wasm-util": "6.1.5" } }, "@polkadot/wasm-crypto-asmjs": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.0.1.tgz", - "integrity": "sha512-cSGsHBLfPW2nHztgZd+gisCoScA02jbAzwjop/b8xumQ2kq7yAed/K9G1lOQiofEKRetIJeqBzJyk0etopRORw==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.1.5.tgz", + "integrity": "sha512-GsVIe+fjJ2sHfrjtqSLV0tP6nClF/7/QXZd+BAWomVMCVcR35OIrkNK2giDzlCqaTP+MiCb/UF3phrU4wsHV4Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3" + } + }, + "@polkadot/wasm-crypto-init": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.1.5.tgz", + "integrity": "sha512-VkBNc4cEkQ9YWAKLGW2ve2HV56GBHii3Xy4QYV+8OFYiOUbBMDVmuAvjlCjxiwa8nUxLzgCIz0HqqUx2YzxkhQ==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9" + "@babel/runtime": "^7.18.3", + "@polkadot/wasm-bridge": "6.1.5", + "@polkadot/wasm-crypto-asmjs": "6.1.5", + "@polkadot/wasm-crypto-wasm": "6.1.5" } }, "@polkadot/wasm-crypto-wasm": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.0.1.tgz", - "integrity": "sha512-0r/QgOjIyw4U0mLk6Tm97Di92uxcSPjTo7dK6tdXo1PwYouhzO5IJnL/jNgma8dm5hQoBhk7rcErmkh8c1kLFQ==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.1.5.tgz", + "integrity": "sha512-YKriV8xUnnNVCykB0c1r0JEQgGPmgPMsEfHLzKhUeE415vkj3UcfcgXuOXVSEXKqgeoCLkvlY5OL3yb3Fg+Xbw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@polkadot/wasm-util": "6.1.5" + } + }, + "@polkadot/wasm-util": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.1.5.tgz", + "integrity": "sha512-5OH31mz8/Ly50fNOQ6eGFcO8OtLLyTvaoJPqUmcdl6OI+1+8GLoZMoXyRdrhWjftqQFxiJnwvlpqq6VdNVDg6g==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9" + "@babel/runtime": "^7.18.3" } }, "@polkadot/x-bigint": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.1.1.tgz", - "integrity": "sha512-1At5Gut4Wzep59vKTATCMWwm6EG0h+vq/qftou5kvt8u0QI2+YGJ5LAXzHk3n0/OOn8cvuAzS2kYQ4duE7YA+g==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.6.2.tgz", + "integrity": "sha512-p2PAx5uJM4zGhbDCEMiFbeOndP8bnzdEdvB4aP17o4AQ8iHM/TrhiOMD7xYeUtMpc0TP+Z6X0ZRqsAt4jBzoRg==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" } }, "@polkadot/x-fetch": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.1.1.tgz", - "integrity": "sha512-hoV/73i8znFCTOaDElGPQAF0AcOV9C7QAq7oJkkfaTqLaRbn2rKg7ZiwLzbFo/8YYGq3QTRcO4gzd5UD2NXZ0Q==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-9.6.2.tgz", + "integrity": "sha512-nTZOzpmgj+f5KxRcZxValpgnAc2xxefY84XaF3XKcQQBfQrN+/Kssfl5VjAoCGfBSpVVzXs/4/cN0oee5BldMQ==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1", - "@types/node-fetch": "^2.6.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2", + "@types/node-fetch": "^2.6.2", "node-fetch": "^2.6.7" } }, "@polkadot/x-global": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.1.1.tgz", - "integrity": "sha512-2aP6edHMPE14mQUFA8ipiB74PKoS6/wFWjTSbGqVOkGN0B7/kvX0/bW2fb6jPcfQlutPeqGN6dZnraoqzTzv6w==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.6.2.tgz", + "integrity": "sha512-cbrNeMK6vPEWh2EbLU+hUOERkOAToZ7o2wYYS+ZNdunvUFL9wERB9Uj6JQDAebGD3ZCNHEpMbj6U1WEffiwq9A==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9" + "@babel/runtime": "^7.18.3" } }, "@polkadot/x-randomvalues": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.1.1.tgz", - "integrity": "sha512-so99yggz5QoCHaVLxekIPK7Ia8Aynv0pPmTroGpWUrR1Gjj5l1dU7lN3sfyA7MBij4uGYiI3sSma5KmlRYawiQ==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.6.2.tgz", + "integrity": "sha512-GuyTYTkKK6MLPcfWX3rKRze3nUYjdRYWK1PKscslRp0Qq4LBTkroqlE7SMTt8Bh7DYH+0fWN2CmHGdv2oEUq9A==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" } }, "@polkadot/x-textdecoder": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.1.1.tgz", - "integrity": "sha512-0eQPesYOfpdetHMIzTUiXcMOPzjX2hzgdSC9Q64iGWoRKwly1clUQ9SPlwEmkRF7ulPcq1pZv2kgHdKNj+lL8g==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.6.2.tgz", + "integrity": "sha512-nWd2sWU7vjUON4FSd6B2aSYmgkooYf1V+kjTPs8uV/PN6KMc6qJInrt4U1vnOvM8wX5+4gvLDs72AVxnFmVRAA==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" } }, "@polkadot/x-textencoder": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.1.1.tgz", - "integrity": "sha512-DyemF56si5xgXLS+l9yl3YivC2cLFlGSUarKyrP+MRVAqVKlLc9h3KXDxwnVxNeLVTg2gxSLpxo6pGqLydtFaQ==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.6.2.tgz", + "integrity": "sha512-T+ZsR2cVJxmpN6VB4u3BoWCg3fUlXHPNGCZSGXZdH2+dljIQl6MXqe+mHd5jknGvyBWCrJ0ijqoSOtLeP88MhA==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1" + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2" } }, "@polkadot/x-ws": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.1.1.tgz", - "integrity": "sha512-jojrlEbeabRRCj0449IDg7BTOOntinMDZJJkABnPG3WnTtHa82TZQmrrdE51PIolGwFW6qDamh9IQcfI/Ir7Yw==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-9.6.2.tgz", + "integrity": "sha512-DT10DqFzM2PGe+0tmClgF5G7biM/akVpAQ9JGIdwV8PxWFWjxbhRasndPfVZEmCi2o8KIVlP6m1qovfS2PdbHA==", "dev": true, "requires": { - "@babel/runtime": "^7.17.9", - "@polkadot/x-global": "9.1.1", + "@babel/runtime": "^7.18.3", + "@polkadot/x-global": "9.6.2", "@types/websocket": "^1.0.5", "websocket": "^1.0.34" } }, "@scure/base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", - "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", "dev": true }, "@substrate/connect": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.2.tgz", - "integrity": "sha512-8GWdrN7qbClYLa9LmETJnywT5fknEQeMw+QKvkUMvsHKegHD0Zkhi0K484mKxRN9RGwcPsKHPj1gMk8xlZuJ9g==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.7.tgz", + "integrity": "sha512-uFRF06lC42ZZixxwkzRB61K1uYvR1cTZ7rI98RW7T+eWbCFrafyVk0pk6J+4oN05gZkhou+VK3hrRCU6Doy2xQ==", "dev": true, "requires": { "@substrate/connect-extension-protocol": "^1.0.0", - "@substrate/smoldot-light": "0.6.15", + "@substrate/smoldot-light": "0.6.19", "eventemitter3": "^4.0.7" } }, @@ -3749,9 +3871,9 @@ "dev": true }, "@substrate/smoldot-light": { - "version": "0.6.15", - "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.15.tgz", - "integrity": "sha512-c2tJCSp9Litsn/p8wY1FfEqIkJI8Peh89BU7T43bruWRO2SSgLVh0cIVbOCY4en90tIOX4W0CueRWFBRQz7BjQ==", + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.19.tgz", + "integrity": "sha512-Xi+v1cdURhTwx7NH+9fa1U9m7VGP61GvB6qwev9HrZXlGbQiUIvySxPlH/LMsq3mwgiRYkokPhcaZEHufY7Urg==", "dev": true, "requires": { "buffer": "^6.0.1", @@ -3760,33 +3882,33 @@ } }, "@substrate/ss58-registry": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.17.0.tgz", - "integrity": "sha512-YdQOxCtEZLnYZFg/zSzfROYtvIs5+iLD7p/VHoll7AVEhrPAmxgF5ggMDB2Dass7dfwABVx7heATbPFNg95Q8w==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.23.0.tgz", + "integrity": "sha512-LuQje7n48GXSsp1aGI6UEmNVtlh7OzQ6CN1Hd9VGUrshADwMB0lRZ5bxnffmqDR4vVugI7h0NN0AONhIW1eHGg==", "dev": true }, "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "@types/bn.js": { @@ -3823,15 +3945,15 @@ "dev": true }, "@types/node": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", - "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", + "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==", "dev": true }, "@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", "dev": true, "requires": { "@types/node": "*", @@ -3854,9 +3976,9 @@ } }, "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-walk": { @@ -3889,7 +4011,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "balanced-match": { @@ -3911,9 +4033,9 @@ "dev": true }, "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, "brace-expansion": { @@ -3927,15 +4049,15 @@ } }, "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", "escalade": "^3.1.1", - "node-releases": "^2.0.3", + "node-releases": "^2.0.5", "picocolors": "^1.0.0" } }, @@ -3965,9 +4087,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001335", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz", - "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==", + "version": "1.0.30001355", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001355.tgz", + "integrity": "sha512-Sd6pjJHF27LzCB7pT7qs+kuX2ndurzCzkpJl6Qct7LPSZ9jn0bkOA8mdgMgmqnQAWLVOOGjLpc+66V57eLtb1g==", "dev": true }, "chalk": { @@ -4021,7 +4143,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "combined-stream": { @@ -4042,7 +4164,7 @@ "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "concat-map": { @@ -4097,7 +4219,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "dequal": { @@ -4122,9 +4244,9 @@ } }, "electron-to-chromium": { - "version": "1.4.131", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.131.tgz", - "integrity": "sha512-oi3YPmaP87hiHn0c4ePB67tXaF+ldGhxvZnT19tW9zX6/Ej+pLN0Afja5rQ6S+TND7I9EuwQTT8JYn1k7R7rrw==", + "version": "1.4.160", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.160.tgz", + "integrity": "sha512-O1Z12YfyeX2LXYO7MdHIPazGXzLzQnr1ADW55U2ARQsJBPgfpJz3u+g3Mo2l1wSyfOCdiGqaX9qtV4XKZ0HNRA==", "dev": true }, "emoji-regex": { @@ -4147,7 +4269,7 @@ "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "requires": { "d": "1", @@ -4174,7 +4296,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "eventemitter3": { @@ -4285,7 +4407,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "ieee754": { @@ -4334,13 +4456,13 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "js-tokens": { @@ -4358,7 +4480,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "json5": { @@ -4389,10 +4511,10 @@ "path-exists": "^3.0.0" } }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "make-dir": { @@ -4703,15 +4825,15 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mock-socket": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.3.tgz", - "integrity": "sha512-uz8lx8c5wuJYJ21f5UtovqpV0+KJuVwE7cVOLNhrl2QW/CvmstOLRfjXnLSbfFHZtJtiaSGQu0oCJA8SmRcK6A==", + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.1.5.tgz", + "integrity": "sha512-3DeNIcsQixWHHKk6NdoBhWI4t1VMj5/HzfnI1rE/pLl5qKx7+gd4DNA07ehTaZ6MoUU053si6Hd+YtiM/tQZfg==", "dev": true }, "mri": { @@ -4739,14 +4861,14 @@ "dev": true }, "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", + "version": "13.2.7", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.7.tgz", + "integrity": "sha512-R6NUw7RIPtKwgK7jskuKoEi4VFMqIHtV2Uu9K/Uegc4TA5cqe+oNMYslZcUmnVNQCTG6wcSqUBaGTDd7sq5srg==", "dev": true, "requires": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", + "lodash": "^4.17.21", "propagate": "^2.0.0" } }, @@ -4766,9 +4888,9 @@ "dev": true }, "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, "once": { @@ -4813,7 +4935,7 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true }, "path-is-absolute": { @@ -4850,9 +4972,9 @@ } }, "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "prettier-plugin-jsdoc": { @@ -4881,7 +5003,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "rimraf": { @@ -4980,22 +5102,22 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", "dev": true, "requires": { - "@cspotcode/source-map-support": "0.7.0", + "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -5006,14 +5128,14 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, "tweetnacl": { @@ -5038,15 +5160,15 @@ } }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz", + "integrity": "sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA==", "dev": true }, "uglify-js": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.0.tgz", - "integrity": "sha512-x+xdeDWq7FiORDvyIJ0q/waWd4PhjBNOm5dQUOq2AKC0IEjxOS66Ha9tctiVDGcRQuh69K7fgU5oRuTK4cysSg==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", + "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", "dev": true, "optional": true }, @@ -5089,15 +5211,15 @@ } }, "v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "websocket": { @@ -5126,7 +5248,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } @@ -5134,7 +5256,7 @@ "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { "tr46": "~0.0.3", @@ -5144,7 +5266,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, "wrap-ansi": { @@ -5199,13 +5321,13 @@ "yaeti": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", "dev": true }, "yargs": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", - "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", "dev": true, "requires": { "cliui": "^7.0.2", diff --git a/typescript-api/package.json b/typescript-api/package.json index 834a182d47..0e13703a63 100644 --- a/typescript-api/package.json +++ b/typescript-api/package.json @@ -1,6 +1,6 @@ { "name": "@moonbeam-network/api-augment", - "version": "0.0.1-beta.5", + "version": "0.1700.0", "private": true, "description": "Moonbeam types augment for @polkadot/api", "author": "PureStake", @@ -18,6 +18,7 @@ "generate": "npm run load:meta && npm run generate:defs && npm run generate:meta", "postgenerate": "npm run pretty", "load:meta": "npm run load:meta:moonbase && npm run load:meta:moonriver && npm run load:meta:moonbeam", + "load:meta:local": "curl -s -H \"Content-Type: application/json\" -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > metadata-moonbase.json", "load:meta:moonbase": "curl -s -H \"Content-Type: application/json\" -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' https://rpc.api.moonbase.moonbeam.network > metadata-moonbase.json", "load:meta:moonriver": "curl -s -H \"Content-Type: application/json\" -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' https://rpc.api.moonriver.moonbeam.network > metadata-moonriver.json", "load:meta:moonbeam": "curl -s -H \"Content-Type: application/json\" -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' https://rpc.api.moonbeam.network > metadata-moonbeam.json", @@ -26,9 +27,9 @@ "generate:defs:moonriver": "ts-node --skip-project node_modules/.bin/polkadot-types-from-defs --package @moonbeam/api-augment/moonriver/interfaces --input ./src/moonriver/interfaces --endpoint ./metadata-moonriver.json", "generate:defs:moonbeam": "ts-node --skip-project node_modules/.bin/polkadot-types-from-defs --package @moonbeam/api-augment/moonbeam/interfaces --input ./src/moonbeam/interfaces --endpoint ./metadata-moonbeam.json", "generate:meta": "npm run generate:meta:moonbase && npm run generate:meta:moonriver && npm run generate:meta:moonbeam", - "generate:meta:moonbase": "ts-node --skip-project node_modules/.bin/polkadot-types-from-chain --endpoint ./metadata-moonbase.json --output ./src/moonbase/interfaces", - "generate:meta:moonriver": "ts-node --skip-project node_modules/.bin/polkadot-types-from-chain --endpoint ./metadata-moonriver.json --output ./src/moonriver/interfaces", - "generate:meta:moonbeam": "ts-node --skip-project node_modules/.bin/polkadot-types-from-chain --endpoint ./metadata-moonbeam.json --output ./src/moonbeam/interfaces", + "generate:meta:moonbase": "ts-node --skip-project node_modules/.bin/polkadot-types-from-chain --endpoint ./metadata-moonbase.json --package @moonbeam/api-augment/moonbeam/interfaces --output ./src/moonbase/interfaces", + "generate:meta:moonriver": "ts-node --skip-project node_modules/.bin/polkadot-types-from-chain --endpoint ./metadata-moonriver.json --package @moonbeam/api-augment/moonbeam/interfaces --output ./src/moonriver/interfaces", + "generate:meta:moonbeam": "ts-node --skip-project node_modules/.bin/polkadot-types-from-chain --endpoint ./metadata-moonbeam.json --package @moonbeam/api-augment/moonbeam/interfaces --output ./src/moonbeam/interfaces", "prebuild": "rimraf build", "build": "tsc -b --verbose", "postbuild": "node ./scripts/postbuild.js", @@ -86,12 +87,12 @@ "jsdocSingleLineComment": false }, "devDependencies": { - "@polkadot/api": "^8.3.1", - "@polkadot/typegen": "^8.3.1", - "prettier": "^2.6.2", + "@polkadot/api": "^8.10.1", + "@polkadot/typegen": "^8.10.1", + "prettier": "^2.7.1", "prettier-plugin-jsdoc": "^0.3.38", "rimraf": "^3.0.2", - "ts-node": "^10.7.0", - "typescript": "^4.6.4" + "ts-node": "^10.8.1", + "typescript": "^4.7.3" } } diff --git a/typescript-api/scripts/generate-local-types.sh b/typescript-api/scripts/generate-local-types.sh new file mode 100755 index 0000000000..df8692af47 --- /dev/null +++ b/typescript-api/scripts/generate-local-types.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +trap "trap - TERM && kill -- -$$" INT TERM EXIT + +if [[ ! -f "../target/release/moonbeam" ]]; +then + echo 'Missing moonbeam binary. Please run cargo build --release' + exit 1; +fi + +# Fail if any command fails + +echo "Installing Packages" +npm ci + +echo "Starting moonbeam node" +../target/release/moonbeam --tmp --chain=moonbase-local --rpc-port=9933 &> /tmp/node-start.log & +PID=$! + +echo "Waiting node...(5s)" +sleep 1 +( tail -f -n0 /tmp/node-start.log & ) | grep -q 'new connection' + +echo "Generating types...(10s)" +sleep 1 +npm run load:meta +npm run load:meta:local +npm run generate:defs +npm run generate:meta +npm run postgenerate + +kill $PID +echo "Done :)" \ No newline at end of file diff --git a/typescript-api/src/moonbase/interfaces/augment-api-consts.ts b/typescript-api/src/moonbase/interfaces/augment-api-consts.ts index 2d0a3be555..a9a1b3fa74 100644 --- a/typescript-api/src/moonbase/interfaces/augment-api-consts.ts +++ b/typescript-api/src/moonbase/interfaces/augment-api-consts.ts @@ -2,13 +2,12 @@ /* eslint-disable */ import type { ApiTypes } from "@polkadot/api-base/types"; -import type { Bytes, Option, Vec, bool, u128, u16, u32, u64, u8 } from "@polkadot/types-codec"; +import type { Bytes, Option, bool, u128, u16, u32, u64, u8 } from "@polkadot/types-codec"; import type { Codec } from "@polkadot/types-codec/types"; import type { Perbill, Percent, Permill } from "@polkadot/types/interfaces/runtime"; import type { FrameSupportPalletId, FrameSupportWeightsRuntimeDbWeight, - FrameSupportWeightsWeightToFeeCoefficient, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpVersionRuntimeVersion, @@ -358,6 +357,39 @@ declare module "@polkadot/api-base/types/consts" { */ [key: string]: Codec; }; + randomness: { + /** + * Local requests expire and can be purged from storage after this many + * blocks/epochs + */ + blockExpirationDelay: u32 & AugmentedConst; + /** + * The amount that should be taken as a security deposit when requesting randomness. + */ + deposit: u128 & AugmentedConst; + /** + * Babe requests expire and can be purged from storage after this many blocks/epochs + */ + epochExpirationDelay: u64 & AugmentedConst; + /** + * Local per-block VRF requests must be at most this many blocks after the + * block in which they were requested + */ + maxBlockDelay: u32 & AugmentedConst; + /** + * Maximum number of random words that can be requested per request + */ + maxRandomWords: u8 & AugmentedConst; + /** + * Local per-block VRF requests must be at least this many blocks after + * the block in which they were requested + */ + minBlockDelay: u32 & AugmentedConst; + /** + * Generic const + */ + [key: string]: Codec; + }; scheduler: { /** * The maximum weight that may be scheduled per block for any @@ -449,14 +481,6 @@ declare module "@polkadot/api-base/types/consts" { * also amplify the impact of tips applied to `Operational` transactions. */ operationalFeeMultiplier: u8 & AugmentedConst; - /** - * The fee to be paid for making a transaction; the per-byte portion. - */ - transactionByteFee: u128 & AugmentedConst; - /** - * The polynomial that is applied in order to derive fee from weight. - */ - weightToFee: Vec & AugmentedConst; /** * Generic const */ diff --git a/typescript-api/src/moonbase/interfaces/augment-api-errors.ts b/typescript-api/src/moonbase/interfaces/augment-api-errors.ts index 8129ece7b1..5963e7f538 100644 --- a/typescript-api/src/moonbase/interfaces/augment-api-errors.ts +++ b/typescript-api/src/moonbase/interfaces/augment-api-errors.ts @@ -118,10 +118,26 @@ declare module "@polkadot/api-base/types/errors" { * This account cannot set an author because it cannon afford the security deposit */ CannotAffordSecurityDeposit: AugmentedError; + /** + * Failed to decode T::Keys for `set_keys` + */ + DecodeKeysFailed: AugmentedError; + /** + * Failed to decode NimbusId for `set_keys` + */ + DecodeNimbusFailed: AugmentedError; /** * The association can't be cleared because it belongs to another account. */ NotYourAssociation: AugmentedError; + /** + * No existing NimbusId can be found for the account + */ + OldAuthorIdNotFound: AugmentedError; + /** + * Keys have wrong size + */ + WrongKeySize: AugmentedError; /** * Generic error */ @@ -445,6 +461,14 @@ declare module "@polkadot/api-base/types/errors" { * Calculating total fee overflowed */ FeeOverflow: AugmentedError; + /** + * Gas limit is too high. + */ + GasLimitTooHigh: AugmentedError; + /** + * Gas limit is too low. + */ + GasLimitTooLow: AugmentedError; /** * Gas price is too low. */ @@ -453,14 +477,14 @@ declare module "@polkadot/api-base/types/errors" { * Nonce is invalid */ InvalidNonce: AugmentedError; - /** - * Maximum address count exceeded - */ - MaxAddressCountExceeded: AugmentedError; /** * Calculating total payment overflowed */ PaymentOverflow: AugmentedError; + /** + * Undefined error. + */ + Undefined: AugmentedError; /** * Withdraw fee failed */ @@ -622,6 +646,49 @@ declare module "@polkadot/api-base/types/errors" { */ [key: string]: AugmentedError; }; + moonbeamOrbiters: { + /** + * The collator is already added in orbiters program. + */ + CollatorAlreadyAdded: AugmentedError; + /** + * This collator is not in orbiters program. + */ + CollatorNotFound: AugmentedError; + /** + * There are already too many orbiters associated with this collator. + */ + CollatorPoolTooLarge: AugmentedError; + /** + * There are more collator pools than the number specified in the parameter. + */ + CollatorsPoolCountTooLow: AugmentedError; + /** + * The minimum deposit required to register as an orbiter has not yet been + * included in the onchain storage + */ + MinOrbiterDepositNotSet: AugmentedError; + /** + * This orbiter is already associated with this collator. + */ + OrbiterAlreadyInPool: AugmentedError; + /** + * This orbiter has not made a deposit + */ + OrbiterDepositNotFound: AugmentedError; + /** + * This orbiter is not found + */ + OrbiterNotFound: AugmentedError; + /** + * The orbiter is still at least in one pool + */ + OrbiterStillInAPool: AugmentedError; + /** + * Generic error + */ + [key: string]: AugmentedError; + }; parachainStaking: { AlreadyActive: AugmentedError; AlreadyDelegatedCandidate: AugmentedError; @@ -633,7 +700,7 @@ declare module "@polkadot/api-base/types/errors" { CandidateExists: AugmentedError; CandidateNotLeaving: AugmentedError; CannotDelegateIfLeaving: AugmentedError; - CannotDelegateLessThanLowestBottomWhenBottomIsFull: AugmentedError; + CannotDelegateLessThanOrEqualToLowestBottomWhenFull: AugmentedError; CannotGoOnlineIfLeaving: AugmentedError; CannotSetBelowMin: AugmentedError; DelegationBelowMin: AugmentedError; @@ -656,6 +723,7 @@ declare module "@polkadot/api-base/types/errors" { PendingDelegationRequestAlreadyExists: AugmentedError; PendingDelegationRequestDNE: AugmentedError; PendingDelegationRequestNotDueYet: AugmentedError; + PendingDelegationRevoke: AugmentedError; RoundLengthMustBeAtLeastTotalSelectedCollators: AugmentedError; TooLowCandidateCountToLeaveCandidates: AugmentedError; TooLowCandidateCountWeightHintCancelLeaveCandidates: AugmentedError; @@ -808,6 +876,24 @@ declare module "@polkadot/api-base/types/errors" { */ [key: string]: AugmentedError; }; + randomness: { + CannotRequestMoreWordsThanMax: AugmentedError; + CannotRequestRandomnessAfterMaxDelay: AugmentedError; + CannotRequestRandomnessBeforeMinDelay: AugmentedError; + MustRequestAtLeastOneWord: AugmentedError; + OnlyRequesterCanIncreaseFee: AugmentedError; + RandomnessResultDNE: AugmentedError; + RandomnessResultNotFilled: AugmentedError; + RequestCannotYetBeFulfilled: AugmentedError; + RequestCounterOverflowed: AugmentedError; + RequestDNE: AugmentedError; + RequestFeeOverflowed: AugmentedError; + RequestHasNotExpired: AugmentedError; + /** + * Generic error + */ + [key: string]: AugmentedError; + }; scheduler: { /** * Failed to schedule a call @@ -929,6 +1015,10 @@ declare module "@polkadot/api-base/types/errors" { * No proposal or bounty at that index. */ InvalidIndex: AugmentedError; + /** + * Proposal has not been approved. + */ + ProposalNotApproved: AugmentedError; /** * Too many approvals in the queue. */ @@ -983,12 +1073,15 @@ declare module "@polkadot/api-base/types/errors" { DestinationNotInvertible: AugmentedError; DispatchWeightBiggerThanTotalWeight: AugmentedError; ErrorSending: AugmentedError; + FailedMultiLocationToJunction: AugmentedError; + FeePerSecondNotSet: AugmentedError; IndexAlreadyClaimed: AugmentedError; InvalidDest: AugmentedError; MaxWeightTransactReached: AugmentedError; NotCrossChainTransfer: AugmentedError; NotCrossChainTransferableCurrency: AugmentedError; NotOwner: AugmentedError; + SignedTransactNotAllowedForDestination: AugmentedError; TransactorInfoNotSet: AugmentedError; UnableToWithdrawAsset: AugmentedError; UnclaimedIndex: AugmentedError; @@ -1041,6 +1134,10 @@ declare module "@polkadot/api-base/types/errors" { * Invalid transfer destination. */ InvalidDest: AugmentedError; + /** + * MinXcmFee not registered for certain reserve location + */ + MinXcmFeeNotDefined: AugmentedError; /** * Not cross-chain transfer. */ diff --git a/typescript-api/src/moonbase/interfaces/augment-api-events.ts b/typescript-api/src/moonbase/interfaces/augment-api-events.ts index 8ee7a67432..3f4f30fb99 100644 --- a/typescript-api/src/moonbase/interfaces/augment-api-events.ts +++ b/typescript-api/src/moonbase/interfaces/augment-api-events.ts @@ -38,10 +38,11 @@ import type { NimbusPrimitivesNimbusCryptoPublic, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, - ParachainStakingDelegationRequest, - ParachainStakingDelegatorAdded, + PalletParachainStakingDelegationRequestsCancelledScheduledRequest, + PalletParachainStakingDelegatorAdded, + PalletXcmTransactorRemoteTransactInfoWithMaxWeight, + SessionKeysPrimitivesVrfVrfCryptoPublic, SpRuntimeDispatchError, - XcmTransactorRemoteTransactInfoWithMaxWeight, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetMultiAssets, @@ -59,39 +60,72 @@ declare module "@polkadot/api-base/types/events" { /** * Removed all information related to an assetId and destroyed asset */ - ForeignAssetDestroyed: AugmentedEvent; + ForeignAssetDestroyed: AugmentedEvent< + ApiType, + [assetId: u128, assetType: MoonbaseRuntimeXcmConfigAssetType], + { assetId: u128; assetType: MoonbaseRuntimeXcmConfigAssetType } + >; /** * New asset with the asset manager is registered */ ForeignAssetRegistered: AugmentedEvent< ApiType, - [u128, MoonbaseRuntimeXcmConfigAssetType, MoonbaseRuntimeAssetConfigAssetRegistrarMetadata] + [ + assetId: u128, + asset: MoonbaseRuntimeXcmConfigAssetType, + metadata: MoonbaseRuntimeAssetConfigAssetRegistrarMetadata + ], + { + assetId: u128; + asset: MoonbaseRuntimeXcmConfigAssetType; + metadata: MoonbaseRuntimeAssetConfigAssetRegistrarMetadata; + } >; /** * Removed all information related to an assetId */ - ForeignAssetRemoved: AugmentedEvent; + ForeignAssetRemoved: AugmentedEvent< + ApiType, + [assetId: u128, assetType: MoonbaseRuntimeXcmConfigAssetType], + { assetId: u128; assetType: MoonbaseRuntimeXcmConfigAssetType } + >; /** * Changed the xcm type mapping for a given asset id */ - ForeignAssetTypeChanged: AugmentedEvent; + ForeignAssetTypeChanged: AugmentedEvent< + ApiType, + [assetId: u128, newAssetType: MoonbaseRuntimeXcmConfigAssetType], + { assetId: u128; newAssetType: MoonbaseRuntimeXcmConfigAssetType } + >; /** * Removed all information related to an assetId and destroyed asset */ - LocalAssetDestroyed: AugmentedEvent; + LocalAssetDestroyed: AugmentedEvent; /** * Local asset was created */ - LocalAssetRegistered: AugmentedEvent; + LocalAssetRegistered: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * Supported asset type for fee payment removed */ - SupportedAssetRemoved: AugmentedEvent; + SupportedAssetRemoved: AugmentedEvent< + ApiType, + [assetType: MoonbaseRuntimeXcmConfigAssetType], + { assetType: MoonbaseRuntimeXcmConfigAssetType } + >; /** * Changed the amount of units we are charging per execution second for a * given asset */ - UnitsPerSecondChanged: AugmentedEvent; + UnitsPerSecondChanged: AugmentedEvent< + ApiType, + [assetType: MoonbaseRuntimeXcmConfigAssetType, unitsPerSecond: u128], + { assetType: MoonbaseRuntimeXcmConfigAssetType; unitsPerSecond: u128 } + >; /** * Generic event */ @@ -101,78 +135,139 @@ declare module "@polkadot/api-base/types/events" { /** * An approval for account `delegate` was cancelled by `owner`. */ - ApprovalCancelled: AugmentedEvent; + ApprovalCancelled: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, delegate: AccountId20], + { assetId: u128; owner: AccountId20; delegate: AccountId20 } + >; /** * (Additional) funds have been approved for transfer to a destination account. */ - ApprovedTransfer: AugmentedEvent; + ApprovedTransfer: AugmentedEvent< + ApiType, + [assetId: u128, source: AccountId20, delegate: AccountId20, amount: u128], + { assetId: u128; source: AccountId20; delegate: AccountId20; amount: u128 } + >; /** * Some asset `asset_id` was frozen. */ - AssetFrozen: AugmentedEvent; + AssetFrozen: AugmentedEvent; /** * An asset has had its attributes changed by the `Force` origin. */ - AssetStatusChanged: AugmentedEvent; + AssetStatusChanged: AugmentedEvent; /** * Some asset `asset_id` was thawed. */ - AssetThawed: AugmentedEvent; + AssetThawed: AugmentedEvent; /** * Some assets were destroyed. */ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, balance: u128], + { assetId: u128; owner: AccountId20; balance: u128 } + >; /** * Some asset class was created. */ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * An asset class was destroyed. */ - Destroyed: AugmentedEvent; + Destroyed: AugmentedEvent; /** * Some asset class was force-created. */ - ForceCreated: AugmentedEvent; + ForceCreated: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * Some account `who` was frozen. */ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were issued. */ - Issued: AugmentedEvent; + Issued: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, totalSupply: u128], + { assetId: u128; owner: AccountId20; totalSupply: u128 } + >; /** * Metadata has been cleared for an asset. */ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent; /** * New metadata has been set for an asset. */ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [assetId: u128, name: Bytes, symbol_: Bytes, decimals: u8, isFrozen: bool], + { assetId: u128; name: Bytes; symbol: Bytes; decimals: u8; isFrozen: bool } + >; /** * The owner changed. */ - OwnerChanged: AugmentedEvent; + OwnerChanged: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * The management team changed. */ - TeamChanged: AugmentedEvent; + TeamChanged: AugmentedEvent< + ApiType, + [assetId: u128, issuer: AccountId20, admin: AccountId20, freezer: AccountId20], + { assetId: u128; issuer: AccountId20; admin: AccountId20; freezer: AccountId20 } + >; /** * Some account `who` was thawed. */ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were transferred. */ - Transferred: AugmentedEvent; + Transferred: AugmentedEvent< + ApiType, + [assetId: u128, from: AccountId20, to: AccountId20, amount: u128], + { assetId: u128; from: AccountId20; to: AccountId20; amount: u128 } + >; /** * An `amount` was transferred in its entirety from `owner` to * `destination` by the approved `delegate`. */ TransferredApproved: AugmentedEvent< ApiType, - [u128, AccountId20, AccountId20, AccountId20, u128] + [ + assetId: u128, + owner: AccountId20, + delegate: AccountId20, + destination: AccountId20, + amount: u128 + ], + { + assetId: u128; + owner: AccountId20; + delegate: AccountId20; + destination: AccountId20; + amount: u128; + } >; /** * Generic event @@ -183,7 +278,7 @@ declare module "@polkadot/api-base/types/events" { /** * The amount of eligible authors for the filter to select has been changed. */ - EligibleUpdated: AugmentedEvent; + EligibleUpdated: AugmentedEvent; /** * Generic event */ @@ -191,25 +286,53 @@ declare module "@polkadot/api-base/types/events" { }; authorMapping: { /** - * An NimbusId has been de-registered, and its AccountId mapping removed. + * A NimbusId has been registered and mapped to an AccountId. */ - AuthorDeRegistered: AugmentedEvent; + KeysRegistered: AugmentedEvent< + ApiType, + [ + nimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + nimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; + } + >; /** - * A NimbusId has been registered and mapped to an AccountId. + * An NimbusId has been de-registered, and its AccountId mapping removed. */ - AuthorRegistered: AugmentedEvent; + KeysRemoved: AugmentedEvent< + ApiType, + [ + nimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + nimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; + } + >; /** * An NimbusId has been registered, replacing a previous registration and * its mapping. */ - AuthorRotated: AugmentedEvent; - /** - * An NimbusId has been forcibly deregistered after not being rotated or - * cleaned up. The reporteing account has been rewarded accordingly. - */ - DefunctAuthorBusted: AugmentedEvent< + KeysRotated: AugmentedEvent< ApiType, - [NimbusPrimitivesNimbusCryptoPublic, AccountId20] + [ + newNimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + newNimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic; + } >; /** * Generic event @@ -220,48 +343,95 @@ declare module "@polkadot/api-base/types/events" { /** * A balance was set by root. */ - BalanceSet: AugmentedEvent; + BalanceSet: AugmentedEvent< + ApiType, + [who: AccountId20, free: u128, reserved: u128], + { who: AccountId20; free: u128; reserved: u128 } + >; /** * Some amount was deposited (e.g. for transaction fees). */ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * An account was removed whose balance was non-zero but below * ExistentialDeposit, resulting in an outright loss. */ - DustLost: AugmentedEvent; + DustLost: AugmentedEvent< + ApiType, + [account: AccountId20, amount: u128], + { account: AccountId20; amount: u128 } + >; /** * An account was created with some free balance. */ - Endowed: AugmentedEvent; + Endowed: AugmentedEvent< + ApiType, + [account: AccountId20, freeBalance: u128], + { account: AccountId20; freeBalance: u128 } + >; /** * Some balance was reserved (moved from free to reserved). */ - Reserved: AugmentedEvent; + Reserved: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Some balance was moved from the reserve of the first account to the * second account. Final argument indicates the destination balance type. */ ReserveRepatriated: AugmentedEvent< ApiType, - [AccountId20, AccountId20, u128, FrameSupportTokensMiscBalanceStatus] + [ + from: AccountId20, + to: AccountId20, + amount: u128, + destinationStatus: FrameSupportTokensMiscBalanceStatus + ], + { + from: AccountId20; + to: AccountId20; + amount: u128; + destinationStatus: FrameSupportTokensMiscBalanceStatus; + } >; /** * Some amount was removed from the account (e.g. for misbehavior). */ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Transfer succeeded. */ - Transfer: AugmentedEvent; + Transfer: AugmentedEvent< + ApiType, + [from: AccountId20, to: AccountId20, amount: u128], + { from: AccountId20; to: AccountId20; amount: u128 } + >; /** * Some balance was unreserved (moved from reserved to free). */ - Unreserved: AugmentedEvent; + Unreserved: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Some amount was withdrawn from the account (e.g. for transaction fees). */ - Withdraw: AugmentedEvent; + Withdraw: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Generic event */ @@ -281,35 +451,55 @@ declare module "@polkadot/api-base/types/events" { /** * A motion was approved by the required threshold. */ - Approved: AugmentedEvent; + Approved: AugmentedEvent; /** * A proposal was closed because its threshold was reached or after its * duration was up. */ - Closed: AugmentedEvent; + Closed: AugmentedEvent< + ApiType, + [proposalHash: H256, yes: u32, no: u32], + { proposalHash: H256; yes: u32; no: u32 } + >; /** * A motion was not approved by the required threshold. */ - Disapproved: AugmentedEvent; + Disapproved: AugmentedEvent; /** * A motion was executed; result will be `Ok` if it returned without error. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A single member did some action; result will be `Ok` if it returned * without error. */ - MemberExecuted: AugmentedEvent]>; + MemberExecuted: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A motion (given hash) has been proposed (by given account) with a * threshold (given `MemberCount`). */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [account: AccountId20, proposalIndex: u32, proposalHash: H256, threshold: u32], + { account: AccountId20; proposalIndex: u32; proposalHash: H256; threshold: u32 } + >; /** * A motion (given hash) has been voted on by given account, leaving a * tally (yes votes and no votes given respectively as `MemberCount`). */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [account: AccountId20, proposalHash: H256, voted: bool, yes: u32, no: u32], + { account: AccountId20; proposalHash: H256; voted: bool; yes: u32; no: u32 } + >; /** * Generic event */ @@ -376,19 +566,27 @@ declare module "@polkadot/api-base/types/events" { /** * A proposal_hash has been blacklisted permanently. */ - Blacklisted: AugmentedEvent; + Blacklisted: AugmentedEvent; /** * A referendum has been cancelled. */ - Cancelled: AugmentedEvent; + Cancelled: AugmentedEvent; /** * An account has delegated their vote to another account. */ - Delegated: AugmentedEvent; + Delegated: AugmentedEvent< + ApiType, + [who: AccountId20, target: AccountId20], + { who: AccountId20; target: AccountId20 } + >; /** * A proposal has been enacted. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [refIndex: u32, result: Result], + { refIndex: u32; result: Result } + >; /** * An external proposal has been tabled. */ @@ -396,59 +594,103 @@ declare module "@polkadot/api-base/types/events" { /** * A proposal has been rejected by referendum. */ - NotPassed: AugmentedEvent; + NotPassed: AugmentedEvent; /** * A proposal has been approved by referendum. */ - Passed: AugmentedEvent; + Passed: AugmentedEvent; /** * A proposal could not be executed because its preimage was invalid. */ - PreimageInvalid: AugmentedEvent; + PreimageInvalid: AugmentedEvent< + ApiType, + [proposalHash: H256, refIndex: u32], + { proposalHash: H256; refIndex: u32 } + >; /** * A proposal could not be executed because its preimage was missing. */ - PreimageMissing: AugmentedEvent; + PreimageMissing: AugmentedEvent< + ApiType, + [proposalHash: H256, refIndex: u32], + { proposalHash: H256; refIndex: u32 } + >; /** * A proposal's preimage was noted, and the deposit taken. */ - PreimageNoted: AugmentedEvent; + PreimageNoted: AugmentedEvent< + ApiType, + [proposalHash: H256, who: AccountId20, deposit: u128], + { proposalHash: H256; who: AccountId20; deposit: u128 } + >; /** * A registered preimage was removed and the deposit collected by the reaper. */ - PreimageReaped: AugmentedEvent; + PreimageReaped: AugmentedEvent< + ApiType, + [proposalHash: H256, provider: AccountId20, deposit: u128, reaper: AccountId20], + { proposalHash: H256; provider: AccountId20; deposit: u128; reaper: AccountId20 } + >; /** * A proposal preimage was removed and used (the deposit was returned). */ - PreimageUsed: AugmentedEvent; + PreimageUsed: AugmentedEvent< + ApiType, + [proposalHash: H256, provider: AccountId20, deposit: u128], + { proposalHash: H256; provider: AccountId20; deposit: u128 } + >; /** * A motion has been proposed by a public account. */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128], + { proposalIndex: u32; deposit: u128 } + >; /** * An account has secconded a proposal */ - Seconded: AugmentedEvent; + Seconded: AugmentedEvent< + ApiType, + [seconder: AccountId20, propIndex: u32], + { seconder: AccountId20; propIndex: u32 } + >; /** * A referendum has begun. */ - Started: AugmentedEvent; + Started: AugmentedEvent< + ApiType, + [refIndex: u32, threshold: PalletDemocracyVoteThreshold], + { refIndex: u32; threshold: PalletDemocracyVoteThreshold } + >; /** * A public proposal has been tabled for referendum vote. */ - Tabled: AugmentedEvent]>; + Tabled: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128, depositors: Vec], + { proposalIndex: u32; deposit: u128; depositors: Vec } + >; /** * An account has cancelled a previous delegation operation. */ - Undelegated: AugmentedEvent; + Undelegated: AugmentedEvent; /** * An external proposal has been vetoed. */ - Vetoed: AugmentedEvent; + Vetoed: AugmentedEvent< + ApiType, + [who: AccountId20, proposalHash: H256, until: u32], + { who: AccountId20; proposalHash: H256; until: u32 } + >; /** * An account has voted in a referendum */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [voter: AccountId20, refIndex: u32, vote: PalletDemocracyVoteAccountVote], + { voter: AccountId20; refIndex: u32; vote: PalletDemocracyVoteAccountVote } + >; /** * Generic event */ @@ -456,31 +698,45 @@ declare module "@polkadot/api-base/types/events" { }; dmpQueue: { /** - * Downward message executed with the given outcome. [ id, outcome ] + * Downward message executed with the given outcome. */ - ExecutedDownward: AugmentedEvent; + ExecutedDownward: AugmentedEvent< + ApiType, + [messageId: U8aFixed, outcome: XcmV2TraitsOutcome], + { messageId: U8aFixed; outcome: XcmV2TraitsOutcome } + >; /** - * Downward message is invalid XCM. [ id ] + * Downward message is invalid XCM. */ - InvalidFormat: AugmentedEvent; + InvalidFormat: AugmentedEvent; /** * Downward message is overweight and was placed in the overweight queue. - * [ id, index, required ] */ - OverweightEnqueued: AugmentedEvent; + OverweightEnqueued: AugmentedEvent< + ApiType, + [messageId: U8aFixed, overweightIndex: u64, requiredWeight: u64], + { messageId: U8aFixed; overweightIndex: u64; requiredWeight: u64 } + >; /** - * Downward message from the overweight queue was executed. [ index, used ] + * Downward message from the overweight queue was executed. */ - OverweightServiced: AugmentedEvent; + OverweightServiced: AugmentedEvent< + ApiType, + [overweightIndex: u64, weightUsed: u64], + { overweightIndex: u64; weightUsed: u64 } + >; /** - * Downward message is unsupported version of XCM. [ id ] + * Downward message is unsupported version of XCM. */ - UnsupportedVersion: AugmentedEvent; + UnsupportedVersion: AugmentedEvent; /** - * The weight limit for handling downward messages was reached. [ id, - * remaining, required ] + * The weight limit for handling downward messages was reached. */ - WeightExhausted: AugmentedEvent; + WeightExhausted: AugmentedEvent< + ApiType, + [messageId: U8aFixed, remainingWeight: u64, requiredWeight: u64], + { messageId: U8aFixed; remainingWeight: u64; requiredWeight: u64 } + >; /** * Generic event */ @@ -536,44 +792,76 @@ declare module "@polkadot/api-base/types/events" { /** * A name was cleared, and the given balance returned. */ - IdentityCleared: AugmentedEvent; + IdentityCleared: AugmentedEvent< + ApiType, + [who: AccountId20, deposit: u128], + { who: AccountId20; deposit: u128 } + >; /** * A name was removed and the given balance slashed. */ - IdentityKilled: AugmentedEvent; + IdentityKilled: AugmentedEvent< + ApiType, + [who: AccountId20, deposit: u128], + { who: AccountId20; deposit: u128 } + >; /** * A name was set or reset (which will remove all judgements). */ - IdentitySet: AugmentedEvent; + IdentitySet: AugmentedEvent; /** * A judgement was given by a registrar. */ - JudgementGiven: AugmentedEvent; + JudgementGiven: AugmentedEvent< + ApiType, + [target: AccountId20, registrarIndex: u32], + { target: AccountId20; registrarIndex: u32 } + >; /** * A judgement was asked from a registrar. */ - JudgementRequested: AugmentedEvent; + JudgementRequested: AugmentedEvent< + ApiType, + [who: AccountId20, registrarIndex: u32], + { who: AccountId20; registrarIndex: u32 } + >; /** * A judgement request was retracted. */ - JudgementUnrequested: AugmentedEvent; + JudgementUnrequested: AugmentedEvent< + ApiType, + [who: AccountId20, registrarIndex: u32], + { who: AccountId20; registrarIndex: u32 } + >; /** * A registrar was added. */ - RegistrarAdded: AugmentedEvent; + RegistrarAdded: AugmentedEvent; /** * A sub-identity was added to an identity and the deposit paid. */ - SubIdentityAdded: AugmentedEvent; + SubIdentityAdded: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * A sub-identity was removed from an identity and the deposit freed. */ - SubIdentityRemoved: AugmentedEvent; + SubIdentityRemoved: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * A sub-identity was cleared, and the given deposit repatriated from the * main identity account to the sub-identity account. */ - SubIdentityRevoked: AugmentedEvent; + SubIdentityRevoked: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * Generic event */ @@ -583,78 +871,139 @@ declare module "@polkadot/api-base/types/events" { /** * An approval for account `delegate` was cancelled by `owner`. */ - ApprovalCancelled: AugmentedEvent; + ApprovalCancelled: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, delegate: AccountId20], + { assetId: u128; owner: AccountId20; delegate: AccountId20 } + >; /** * (Additional) funds have been approved for transfer to a destination account. */ - ApprovedTransfer: AugmentedEvent; + ApprovedTransfer: AugmentedEvent< + ApiType, + [assetId: u128, source: AccountId20, delegate: AccountId20, amount: u128], + { assetId: u128; source: AccountId20; delegate: AccountId20; amount: u128 } + >; /** * Some asset `asset_id` was frozen. */ - AssetFrozen: AugmentedEvent; + AssetFrozen: AugmentedEvent; /** * An asset has had its attributes changed by the `Force` origin. */ - AssetStatusChanged: AugmentedEvent; + AssetStatusChanged: AugmentedEvent; /** * Some asset `asset_id` was thawed. */ - AssetThawed: AugmentedEvent; + AssetThawed: AugmentedEvent; /** * Some assets were destroyed. */ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, balance: u128], + { assetId: u128; owner: AccountId20; balance: u128 } + >; /** * Some asset class was created. */ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * An asset class was destroyed. */ - Destroyed: AugmentedEvent; + Destroyed: AugmentedEvent; /** * Some asset class was force-created. */ - ForceCreated: AugmentedEvent; + ForceCreated: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * Some account `who` was frozen. */ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were issued. */ - Issued: AugmentedEvent; + Issued: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, totalSupply: u128], + { assetId: u128; owner: AccountId20; totalSupply: u128 } + >; /** * Metadata has been cleared for an asset. */ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent; /** * New metadata has been set for an asset. */ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [assetId: u128, name: Bytes, symbol_: Bytes, decimals: u8, isFrozen: bool], + { assetId: u128; name: Bytes; symbol: Bytes; decimals: u8; isFrozen: bool } + >; /** * The owner changed. */ - OwnerChanged: AugmentedEvent; + OwnerChanged: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * The management team changed. */ - TeamChanged: AugmentedEvent; + TeamChanged: AugmentedEvent< + ApiType, + [assetId: u128, issuer: AccountId20, admin: AccountId20, freezer: AccountId20], + { assetId: u128; issuer: AccountId20; admin: AccountId20; freezer: AccountId20 } + >; /** * Some account `who` was thawed. */ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were transferred. */ - Transferred: AugmentedEvent; + Transferred: AugmentedEvent< + ApiType, + [assetId: u128, from: AccountId20, to: AccountId20, amount: u128], + { assetId: u128; from: AccountId20; to: AccountId20; amount: u128 } + >; /** * An `amount` was transferred in its entirety from `owner` to * `destination` by the approved `delegate`. */ TransferredApproved: AugmentedEvent< ApiType, - [u128, AccountId20, AccountId20, AccountId20, u128] + [ + assetId: u128, + owner: AccountId20, + delegate: AccountId20, + destination: AccountId20, + amount: u128 + ], + { + assetId: u128; + owner: AccountId20; + delegate: AccountId20; + destination: AccountId20; + amount: u128; + } >; /** * Generic event @@ -669,11 +1018,19 @@ declare module "@polkadot/api-base/types/events" { /** * The call to resume on_idle XCM execution failed with inner error */ - FailedToResumeIdleXcmExecution: AugmentedEvent; + FailedToResumeIdleXcmExecution: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * The call to suspend on_idle XCM execution failed with inner error */ - FailedToSuspendIdleXcmExecution: AugmentedEvent; + FailedToSuspendIdleXcmExecution: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * The chain returned to its normal operating state */ @@ -687,15 +1044,19 @@ declare module "@polkadot/api-base/types/events" { /** * Migration completed */ - MigrationCompleted: AugmentedEvent; + MigrationCompleted: AugmentedEvent< + ApiType, + [migrationName: Bytes, consumedWeight: u64], + { migrationName: Bytes; consumedWeight: u64 } + >; /** * Migration started */ - MigrationStarted: AugmentedEvent; + MigrationStarted: AugmentedEvent; /** * Runtime upgrade completed */ - RuntimeUpgradeCompleted: AugmentedEvent; + RuntimeUpgradeCompleted: AugmentedEvent; /** * Runtime upgrade started */ @@ -705,140 +1066,376 @@ declare module "@polkadot/api-base/types/events" { */ [key: string]: AugmentedEvent; }; + moonbeamOrbiters: { + /** + * An orbiter join a collator pool + */ + OrbiterJoinCollatorPool: AugmentedEvent< + ApiType, + [collator: AccountId20, orbiter: AccountId20], + { collator: AccountId20; orbiter: AccountId20 } + >; + /** + * An orbiter leave a collator pool + */ + OrbiterLeaveCollatorPool: AugmentedEvent< + ApiType, + [collator: AccountId20, orbiter: AccountId20], + { collator: AccountId20; orbiter: AccountId20 } + >; + /** + * An orbiter has registered + */ + OrbiterRegistered: AugmentedEvent< + ApiType, + [account: AccountId20, deposit: u128], + { account: AccountId20; deposit: u128 } + >; + /** + * Paid the orbiter account the balance as liquid rewards. + */ + OrbiterRewarded: AugmentedEvent< + ApiType, + [account: AccountId20, rewards: u128], + { account: AccountId20; rewards: u128 } + >; + OrbiterRotation: AugmentedEvent< + ApiType, + [collator: AccountId20, oldOrbiter: Option, newOrbiter: Option], + { collator: AccountId20; oldOrbiter: Option; newOrbiter: Option } + >; + /** + * An orbiter has unregistered + */ + OrbiterUnregistered: AugmentedEvent< + ApiType, + [account: AccountId20], + { account: AccountId20 } + >; + /** + * Generic event + */ + [key: string]: AugmentedEvent; + }; parachainStaking: { /** * Set blocks per round */ - BlocksPerRoundSet: AugmentedEvent; + BlocksPerRoundSet: AugmentedEvent< + ApiType, + [ + currentRound: u32, + firstBlock: u32, + old: u32, + new_: u32, + newPerRoundInflationMin: Perbill, + newPerRoundInflationIdeal: Perbill, + newPerRoundInflationMax: Perbill + ], + { + currentRound: u32; + firstBlock: u32; + old: u32; + new_: u32; + newPerRoundInflationMin: Perbill; + newPerRoundInflationIdeal: Perbill; + newPerRoundInflationMax: Perbill; + } + >; /** * Cancelled request to decrease candidate's bond. */ - CancelledCandidateBondLess: AugmentedEvent; + CancelledCandidateBondLess: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, executeRound: u32], + { candidate: AccountId20; amount: u128; executeRound: u32 } + >; /** * Cancelled request to leave the set of candidates. */ - CancelledCandidateExit: AugmentedEvent; + CancelledCandidateExit: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** * Cancelled request to change an existing delegation. */ CancelledDelegationRequest: AugmentedEvent< ApiType, - [AccountId20, ParachainStakingDelegationRequest] + [ + delegator: AccountId20, + cancelledRequest: PalletParachainStakingDelegationRequestsCancelledScheduledRequest, + collator: AccountId20 + ], + { + delegator: AccountId20; + cancelledRequest: PalletParachainStakingDelegationRequestsCancelledScheduledRequest; + collator: AccountId20; + } >; /** * Candidate rejoins the set of collator candidates. */ - CandidateBackOnline: AugmentedEvent; + CandidateBackOnline: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** - * Сandidate has decreased a self bond. + * Candidate has decreased a self bond. */ - CandidateBondedLess: AugmentedEvent; + CandidateBondedLess: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, newBond: u128], + { candidate: AccountId20; amount: u128; newBond: u128 } + >; /** - * Сandidate has increased a self bond. + * Candidate has increased a self bond. */ - CandidateBondedMore: AugmentedEvent; + CandidateBondedMore: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, newTotalBond: u128], + { candidate: AccountId20; amount: u128; newTotalBond: u128 } + >; /** - * Сandidate requested to decrease a self bond. + * Candidate requested to decrease a self bond. */ - CandidateBondLessRequested: AugmentedEvent; + CandidateBondLessRequested: AugmentedEvent< + ApiType, + [candidate: AccountId20, amountToDecrease: u128, executeRound: u32], + { candidate: AccountId20; amountToDecrease: u128; executeRound: u32 } + >; /** * Candidate has left the set of candidates. */ - CandidateLeft: AugmentedEvent; + CandidateLeft: AugmentedEvent< + ApiType, + [exCandidate: AccountId20, unlockedAmount: u128, newTotalAmtLocked: u128], + { exCandidate: AccountId20; unlockedAmount: u128; newTotalAmtLocked: u128 } + >; /** - * Сandidate has requested to leave the set of candidates. + * Candidate has requested to leave the set of candidates. */ - CandidateScheduledExit: AugmentedEvent; + CandidateScheduledExit: AugmentedEvent< + ApiType, + [exitAllowedRound: u32, candidate: AccountId20, scheduledExit: u32], + { exitAllowedRound: u32; candidate: AccountId20; scheduledExit: u32 } + >; /** * Candidate temporarily leave the set of collator candidates without unbonding. */ - CandidateWentOffline: AugmentedEvent; + CandidateWentOffline: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** * Candidate selected for collators. Total Exposed Amount includes all delegations. */ - CollatorChosen: AugmentedEvent; + CollatorChosen: AugmentedEvent< + ApiType, + [round: u32, collatorAccount: AccountId20, totalExposedAmount: u128], + { round: u32; collatorAccount: AccountId20; totalExposedAmount: u128 } + >; /** * Set collator commission to this value. */ - CollatorCommissionSet: AugmentedEvent; + CollatorCommissionSet: AugmentedEvent< + ApiType, + [old: Perbill, new_: Perbill], + { old: Perbill; new_: Perbill } + >; /** * New delegation (increase of the existing one). */ Delegation: AugmentedEvent< ApiType, - [AccountId20, u128, AccountId20, ParachainStakingDelegatorAdded] + [ + delegator: AccountId20, + lockedAmount: u128, + candidate: AccountId20, + delegatorPosition: PalletParachainStakingDelegatorAdded + ], + { + delegator: AccountId20; + lockedAmount: u128; + candidate: AccountId20; + delegatorPosition: PalletParachainStakingDelegatorAdded; + } + >; + DelegationDecreased: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amount: u128, inTop: bool], + { delegator: AccountId20; candidate: AccountId20; amount: u128; inTop: bool } >; - DelegationDecreased: AugmentedEvent; /** * Delegator requested to decrease a bond for the collator candidate. */ - DelegationDecreaseScheduled: AugmentedEvent; - DelegationIncreased: AugmentedEvent; + DelegationDecreaseScheduled: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amountToDecrease: u128, executeRound: u32], + { + delegator: AccountId20; + candidate: AccountId20; + amountToDecrease: u128; + executeRound: u32; + } + >; + DelegationIncreased: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amount: u128, inTop: bool], + { delegator: AccountId20; candidate: AccountId20; amount: u128; inTop: bool } + >; /** * Delegation kicked. */ - DelegationKicked: AugmentedEvent; + DelegationKicked: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; candidate: AccountId20; unstakedAmount: u128 } + >; /** * Delegator requested to revoke delegation. */ - DelegationRevocationScheduled: AugmentedEvent; + DelegationRevocationScheduled: AugmentedEvent< + ApiType, + [round: u32, delegator: AccountId20, candidate: AccountId20, scheduledExit: u32], + { round: u32; delegator: AccountId20; candidate: AccountId20; scheduledExit: u32 } + >; /** * Delegation revoked. */ - DelegationRevoked: AugmentedEvent; + DelegationRevoked: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; candidate: AccountId20; unstakedAmount: u128 } + >; /** * Cancelled a pending request to exit the set of delegators. */ - DelegatorExitCancelled: AugmentedEvent; + DelegatorExitCancelled: AugmentedEvent< + ApiType, + [delegator: AccountId20], + { delegator: AccountId20 } + >; /** * Delegator requested to leave the set of delegators. */ - DelegatorExitScheduled: AugmentedEvent; + DelegatorExitScheduled: AugmentedEvent< + ApiType, + [round: u32, delegator: AccountId20, scheduledExit: u32], + { round: u32; delegator: AccountId20; scheduledExit: u32 } + >; /** * Delegator has left the set of delegators. */ - DelegatorLeft: AugmentedEvent; + DelegatorLeft: AugmentedEvent< + ApiType, + [delegator: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; unstakedAmount: u128 } + >; /** * Delegation from candidate state has been remove. */ - DelegatorLeftCandidate: AugmentedEvent; + DelegatorLeftCandidate: AugmentedEvent< + ApiType, + [ + delegator: AccountId20, + candidate: AccountId20, + unstakedAmount: u128, + totalCandidateStaked: u128 + ], + { + delegator: AccountId20; + candidate: AccountId20; + unstakedAmount: u128; + totalCandidateStaked: u128; + } + >; /** * Annual inflation input (first 3) was used to derive new per-round * inflation (last 3) */ - InflationSet: AugmentedEvent; + InflationSet: AugmentedEvent< + ApiType, + [ + annualMin: Perbill, + annualIdeal: Perbill, + annualMax: Perbill, + roundMin: Perbill, + roundIdeal: Perbill, + roundMax: Perbill + ], + { + annualMin: Perbill; + annualIdeal: Perbill; + annualMax: Perbill; + roundMin: Perbill; + roundIdeal: Perbill; + roundMax: Perbill; + } + >; /** * Account joined the set of collator candidates. */ - JoinedCollatorCandidates: AugmentedEvent; + JoinedCollatorCandidates: AugmentedEvent< + ApiType, + [account: AccountId20, amountLocked: u128, newTotalAmtLocked: u128], + { account: AccountId20; amountLocked: u128; newTotalAmtLocked: u128 } + >; /** * Started new round. */ - NewRound: AugmentedEvent; + NewRound: AugmentedEvent< + ApiType, + [startingBlock: u32, round: u32, selectedCollatorsNumber: u32, totalBalance: u128], + { startingBlock: u32; round: u32; selectedCollatorsNumber: u32; totalBalance: u128 } + >; /** * Account (re)set for parachain bond treasury. */ - ParachainBondAccountSet: AugmentedEvent; + ParachainBondAccountSet: AugmentedEvent< + ApiType, + [old: AccountId20, new_: AccountId20], + { old: AccountId20; new_: AccountId20 } + >; /** * Percent of inflation reserved for parachain bond (re)set. */ - ParachainBondReservePercentSet: AugmentedEvent; + ParachainBondReservePercentSet: AugmentedEvent< + ApiType, + [old: Percent, new_: Percent], + { old: Percent; new_: Percent } + >; /** * Transferred to account which holds funds reserved for parachain bond. */ - ReservedForParachainBond: AugmentedEvent; + ReservedForParachainBond: AugmentedEvent< + ApiType, + [account: AccountId20, value: u128], + { account: AccountId20; value: u128 } + >; /** * Paid the account (delegator or collator) the balance as liquid rewards. */ - Rewarded: AugmentedEvent; + Rewarded: AugmentedEvent< + ApiType, + [account: AccountId20, rewards: u128], + { account: AccountId20; rewards: u128 } + >; /** * Staking expectations set. */ - StakeExpectationsSet: AugmentedEvent; + StakeExpectationsSet: AugmentedEvent< + ApiType, + [expectMin: u128, expectIdeal: u128, expectMax: u128], + { expectMin: u128; expectIdeal: u128; expectMax: u128 } + >; /** * Set total selected candidates to this value. */ - TotalSelectedSet: AugmentedEvent; + TotalSelectedSet: AugmentedEvent; /** * Generic event */ @@ -846,22 +1443,29 @@ declare module "@polkadot/api-base/types/events" { }; parachainSystem: { /** - * Downward messages were processed using the given weight. [ weight_used, - * result_mqc_head ] + * Downward messages were processed using the given weight. */ - DownwardMessagesProcessed: AugmentedEvent; + DownwardMessagesProcessed: AugmentedEvent< + ApiType, + [weightUsed: u64, dmqHead: H256], + { weightUsed: u64; dmqHead: H256 } + >; /** - * Some downward messages have been received and will be processed. [ count ] + * Some downward messages have been received and will be processed. */ - DownwardMessagesReceived: AugmentedEvent; + DownwardMessagesReceived: AugmentedEvent; /** * An upgrade has been authorized. */ - UpgradeAuthorized: AugmentedEvent; + UpgradeAuthorized: AugmentedEvent; /** * The validation function was applied as of the contained relay chain block number. */ - ValidationFunctionApplied: AugmentedEvent; + ValidationFunctionApplied: AugmentedEvent< + ApiType, + [relayChainBlockNum: u32], + { relayChainBlockNum: u32 } + >; /** * The relay-chain aborted the upgrade process. */ @@ -1006,26 +1610,133 @@ declare module "@polkadot/api-base/types/events" { /** * An announcement was placed to make a call in the future. */ - Announced: AugmentedEvent; + Announced: AugmentedEvent< + ApiType, + [real: AccountId20, proxy: AccountId20, callHash: H256], + { real: AccountId20; proxy: AccountId20; callHash: H256 } + >; /** * Anonymous account has been created by new proxy with given * disambiguation index and proxy type. */ AnonymousCreated: AugmentedEvent< ApiType, - [AccountId20, AccountId20, MoonbaseRuntimeProxyType, u16] + [ + anonymous: AccountId20, + who: AccountId20, + proxyType: MoonbaseRuntimeProxyType, + disambiguationIndex: u16 + ], + { + anonymous: AccountId20; + who: AccountId20; + proxyType: MoonbaseRuntimeProxyType; + disambiguationIndex: u16; + } >; /** * A proxy was added. */ ProxyAdded: AugmentedEvent< ApiType, - [AccountId20, AccountId20, MoonbaseRuntimeProxyType, u32] + [ + delegator: AccountId20, + delegatee: AccountId20, + proxyType: MoonbaseRuntimeProxyType, + delay: u32 + ], + { + delegator: AccountId20; + delegatee: AccountId20; + proxyType: MoonbaseRuntimeProxyType; + delay: u32; + } >; /** * A proxy was executed correctly, with the given. */ - ProxyExecuted: AugmentedEvent]>; + ProxyExecuted: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; + /** + * A proxy was removed. + */ + ProxyRemoved: AugmentedEvent< + ApiType, + [ + delegator: AccountId20, + delegatee: AccountId20, + proxyType: MoonbaseRuntimeProxyType, + delay: u32 + ], + { + delegator: AccountId20; + delegatee: AccountId20; + proxyType: MoonbaseRuntimeProxyType; + delay: u32; + } + >; + /** + * Generic event + */ + [key: string]: AugmentedEvent; + }; + randomness: { + RandomnessRequestedBabeEpoch: AugmentedEvent< + ApiType, + [ + id: u64, + refundAddress: H160, + contractAddress: H160, + fee: u128, + gasLimit: u64, + numWords: u8, + salt: H256, + earliestEpoch: u64 + ], + { + id: u64; + refundAddress: H160; + contractAddress: H160; + fee: u128; + gasLimit: u64; + numWords: u8; + salt: H256; + earliestEpoch: u64; + } + >; + RandomnessRequestedLocal: AugmentedEvent< + ApiType, + [ + id: u64, + refundAddress: H160, + contractAddress: H160, + fee: u128, + gasLimit: u64, + numWords: u8, + salt: H256, + earliestBlock: u32 + ], + { + id: u64; + refundAddress: H160; + contractAddress: H160; + fee: u128; + gasLimit: u64; + numWords: u8; + salt: H256; + earliestBlock: u32; + } + >; + RequestExpirationExecuted: AugmentedEvent; + RequestFeeIncreased: AugmentedEvent< + ApiType, + [id: u64, newFee: u128], + { id: u64; newFee: u128 } + >; + RequestFulfilled: AugmentedEvent; /** * Generic event */ @@ -1037,23 +1748,29 @@ declare module "@polkadot/api-base/types/events" { */ CallLookupFailed: AugmentedEvent< ApiType, - [ITuple<[u32, u32]>, Option, FrameSupportScheduleLookupError] + [task: ITuple<[u32, u32]>, id: Option, error: FrameSupportScheduleLookupError], + { task: ITuple<[u32, u32]>; id: Option; error: FrameSupportScheduleLookupError } >; /** * Canceled some task. */ - Canceled: AugmentedEvent; + Canceled: AugmentedEvent; /** * Dispatched some task. */ Dispatched: AugmentedEvent< ApiType, - [ITuple<[u32, u32]>, Option, Result] + [task: ITuple<[u32, u32]>, id: Option, result: Result], + { + task: ITuple<[u32, u32]>; + id: Option; + result: Result; + } >; /** * Scheduled some task. */ - Scheduled: AugmentedEvent; + Scheduled: AugmentedEvent; /** * Generic event */ @@ -1063,15 +1780,27 @@ declare module "@polkadot/api-base/types/events" { /** * The [sudoer] just switched identity; the old key is supplied if one existed. */ - KeyChanged: AugmentedEvent]>; + KeyChanged: AugmentedEvent< + ApiType, + [oldSudoer: Option], + { oldSudoer: Option } + >; /** * A sudo just took place. [result] */ - Sudid: AugmentedEvent]>; + Sudid: AugmentedEvent< + ApiType, + [sudoResult: Result], + { sudoResult: Result } + >; /** * A sudo just took place. [result] */ - SudoAsDone: AugmentedEvent]>; + SudoAsDone: AugmentedEvent< + ApiType, + [sudoResult: Result], + { sudoResult: Result } + >; /** * Generic event */ @@ -1087,24 +1816,33 @@ declare module "@polkadot/api-base/types/events" { */ ExtrinsicFailed: AugmentedEvent< ApiType, - [SpRuntimeDispatchError, FrameSupportWeightsDispatchInfo] + [dispatchError: SpRuntimeDispatchError, dispatchInfo: FrameSupportWeightsDispatchInfo], + { dispatchError: SpRuntimeDispatchError; dispatchInfo: FrameSupportWeightsDispatchInfo } >; /** * An extrinsic completed successfully. */ - ExtrinsicSuccess: AugmentedEvent; + ExtrinsicSuccess: AugmentedEvent< + ApiType, + [dispatchInfo: FrameSupportWeightsDispatchInfo], + { dispatchInfo: FrameSupportWeightsDispatchInfo } + >; /** * An account was reaped. */ - KilledAccount: AugmentedEvent; + KilledAccount: AugmentedEvent; /** * A new account was created. */ - NewAccount: AugmentedEvent; + NewAccount: AugmentedEvent; /** * On on-chain remark happened. */ - Remarked: AugmentedEvent; + Remarked: AugmentedEvent< + ApiType, + [sender: AccountId20, hash_: H256], + { sender: AccountId20; hash_: H256 } + >; /** * Generic event */ @@ -1114,35 +1852,55 @@ declare module "@polkadot/api-base/types/events" { /** * A motion was approved by the required threshold. */ - Approved: AugmentedEvent; + Approved: AugmentedEvent; /** * A proposal was closed because its threshold was reached or after its * duration was up. */ - Closed: AugmentedEvent; + Closed: AugmentedEvent< + ApiType, + [proposalHash: H256, yes: u32, no: u32], + { proposalHash: H256; yes: u32; no: u32 } + >; /** * A motion was not approved by the required threshold. */ - Disapproved: AugmentedEvent; + Disapproved: AugmentedEvent; /** * A motion was executed; result will be `Ok` if it returned without error. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A single member did some action; result will be `Ok` if it returned * without error. */ - MemberExecuted: AugmentedEvent]>; + MemberExecuted: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A motion (given hash) has been proposed (by given account) with a * threshold (given `MemberCount`). */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [account: AccountId20, proposalIndex: u32, proposalHash: H256, threshold: u32], + { account: AccountId20; proposalIndex: u32; proposalHash: H256; threshold: u32 } + >; /** * A motion (given hash) has been voted on by given account, leaving a * tally (yes votes and no votes given respectively as `MemberCount`). */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [account: AccountId20, proposalHash: H256, voted: bool, yes: u32, no: u32], + { account: AccountId20; proposalHash: H256; voted: bool; yes: u32; no: u32 } + >; /** * Generic event */ @@ -1152,31 +1910,39 @@ declare module "@polkadot/api-base/types/events" { /** * Some funds have been allocated. */ - Awarded: AugmentedEvent; + Awarded: AugmentedEvent< + ApiType, + [proposalIndex: u32, award: u128, account: AccountId20], + { proposalIndex: u32; award: u128; account: AccountId20 } + >; /** * Some of our funds have been burnt. */ - Burnt: AugmentedEvent; + Burnt: AugmentedEvent; /** * Some funds have been deposited. */ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent; /** * New proposal. */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent; /** * A proposal was rejected; funds were slashed. */ - Rejected: AugmentedEvent; + Rejected: AugmentedEvent< + ApiType, + [proposalIndex: u32, slashed: u128], + { proposalIndex: u32; slashed: u128 } + >; /** * Spending has finished; this is the amount that rolls over until next spend. */ - Rollover: AugmentedEvent; + Rollover: AugmentedEvent; /** * We have ended a spend period and will now allocate funds. */ - Spending: AugmentedEvent; + Spending: AugmentedEvent; /** * Generic event */ @@ -1187,19 +1953,39 @@ declare module "@polkadot/api-base/types/events" { * Batch of dispatches completed fully with no error. */ BatchCompleted: AugmentedEvent; + /** + * Batch of dispatches completed but has errors. + */ + BatchCompletedWithErrors: AugmentedEvent; /** * Batch of dispatches did not complete fully. Index of first failing * dispatch given, as well as the error. */ - BatchInterrupted: AugmentedEvent; + BatchInterrupted: AugmentedEvent< + ApiType, + [index: u32, error: SpRuntimeDispatchError], + { index: u32; error: SpRuntimeDispatchError } + >; /** * A call was dispatched. */ - DispatchedAs: AugmentedEvent]>; + DispatchedAs: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; /** * A single item within a Batch of dispatches has completed with no error. */ ItemCompleted: AugmentedEvent; + /** + * A single item within a Batch of dispatches has completed with error. + */ + ItemFailed: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * Generic event */ @@ -1244,34 +2030,85 @@ declare module "@polkadot/api-base/types/events" { [key: string]: AugmentedEvent; }; xcmTransactor: { - DeRegisteredDerivative: AugmentedEvent; + DeRegisteredDerivative: AugmentedEvent; + /** + * Set dest fee per second + */ + DestFeePerSecondChanged: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation, feePerSecond: u128], + { location: XcmV1MultiLocation; feePerSecond: u128 } + >; + /** + * Remove dest fee per second + */ + DestFeePerSecondRemoved: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation], + { location: XcmV1MultiLocation } + >; /** * Registered a derivative index for an account id. */ - RegisteredDerivative: AugmentedEvent; + RegisteredDerivative: AugmentedEvent< + ApiType, + [accountId: AccountId20, index: u16], + { accountId: AccountId20; index: u16 } + >; /** * Transacted the inner call through a derivative account in a destination chain. */ - TransactedDerivative: AugmentedEvent; + TransactedDerivative: AugmentedEvent< + ApiType, + [accountId: AccountId20, dest: XcmV1MultiLocation, call: Bytes, index: u16], + { accountId: AccountId20; dest: XcmV1MultiLocation; call: Bytes; index: u16 } + >; + /** + * Transacted the call through a signed account in a destination chain. + */ + TransactedSigned: AugmentedEvent< + ApiType, + [feePayer: AccountId20, dest: XcmV1MultiLocation, call: Bytes], + { feePayer: AccountId20; dest: XcmV1MultiLocation; call: Bytes } + >; /** * Transacted the call through the sovereign account in a destination chain. */ - TransactedSovereign: AugmentedEvent; + TransactedSovereign: AugmentedEvent< + ApiType, + [feePayer: AccountId20, dest: XcmV1MultiLocation, call: Bytes], + { feePayer: AccountId20; dest: XcmV1MultiLocation; call: Bytes } + >; /** * Transact failed */ - TransactFailed: AugmentedEvent; + TransactFailed: AugmentedEvent< + ApiType, + [error: XcmV2TraitsError], + { error: XcmV2TraitsError } + >; /** * Changed the transact info of a location */ TransactInfoChanged: AugmentedEvent< ApiType, - [XcmV1MultiLocation, XcmTransactorRemoteTransactInfoWithMaxWeight] + [ + location: XcmV1MultiLocation, + remoteInfo: PalletXcmTransactorRemoteTransactInfoWithMaxWeight + ], + { + location: XcmV1MultiLocation; + remoteInfo: PalletXcmTransactorRemoteTransactInfoWithMaxWeight; + } >; /** * Removed the transact info of a location */ - TransactInfoRemoved: AugmentedEvent; + TransactInfoRemoved: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation], + { location: XcmV1MultiLocation } + >; /** * Generic event */ @@ -1283,7 +2120,18 @@ declare module "@polkadot/api-base/types/events" { */ TransferredMultiAssets: AugmentedEvent< ApiType, - [AccountId20, XcmV1MultiassetMultiAssets, XcmV1MultiAsset, XcmV1MultiLocation] + [ + sender: AccountId20, + assets: XcmV1MultiassetMultiAssets, + fee: XcmV1MultiAsset, + dest: XcmV1MultiLocation + ], + { + sender: AccountId20; + assets: XcmV1MultiassetMultiAssets; + fee: XcmV1MultiAsset; + dest: XcmV1MultiLocation; + } >; /** * Generic event diff --git a/typescript-api/src/moonbase/interfaces/augment-api-query.ts b/typescript-api/src/moonbase/interfaces/augment-api-query.ts index 9ded2b579c..f623f69b55 100644 --- a/typescript-api/src/moonbase/interfaces/augment-api-query.ts +++ b/typescript-api/src/moonbase/interfaces/augment-api-query.ts @@ -64,33 +64,38 @@ import type { PalletDemocracyVoteVoting, PalletIdentityRegistrarInfo, PalletIdentityRegistration, + PalletMoonbeamOrbitersCollatorPoolInfo, + PalletParachainStakingBond, + PalletParachainStakingCandidateMetadata, + PalletParachainStakingCollator2, + PalletParachainStakingCollatorCandidate, + PalletParachainStakingCollatorSnapshot, + PalletParachainStakingDelayedPayout, + PalletParachainStakingDelegationRequestsScheduledRequest, + PalletParachainStakingDelegations, + PalletParachainStakingDelegator, + PalletParachainStakingInflationInflationInfo, + PalletParachainStakingNominator2, + PalletParachainStakingParachainBondConfig, + PalletParachainStakingRoundInfo, + PalletParachainStakingSetOrderedSetBond, PalletProxyAnnouncement, PalletProxyProxyDefinition, + PalletRandomnessRandomnessResult, + PalletRandomnessRequestState, + PalletRandomnessRequestType, PalletSchedulerScheduledV3, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletXcmQueryStatus, + PalletXcmTransactorRemoteTransactInfoWithMaxWeight, PalletXcmVersionMigrationStage, - ParachainStakingBond, - ParachainStakingCandidateMetadata, - ParachainStakingCollator2, - ParachainStakingCollatorCandidate, - ParachainStakingCollatorSnapshot, - ParachainStakingDelayedPayout, - ParachainStakingDelegations, - ParachainStakingDelegator, - ParachainStakingInflationInflationInfo, - ParachainStakingNominator2, - ParachainStakingParachainBondConfig, - ParachainStakingRoundInfo, - ParachainStakingSetOrderedSetBond, PolkadotCorePrimitivesOutboundHrmpMessage, - PolkadotPrimitivesV1AbridgedHostConfiguration, - PolkadotPrimitivesV1PersistedValidationData, - PolkadotPrimitivesV1UpgradeRestriction, + PolkadotPrimitivesV2AbridgedHostConfiguration, + PolkadotPrimitivesV2PersistedValidationData, + PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, - XcmTransactorRemoteTransactInfoWithMaxWeight, XcmV1MultiLocation, XcmVersionedMultiLocation, } from "@polkadot/types/lookup"; @@ -222,8 +227,10 @@ declare module "@polkadot/api-base/types/storage" { }; authorFilter: { /** - * The percentage of active authors that will be eligible at each height. + * The number of active authors that will be eligible at each height. */ + eligibleCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; eligibleRatio: AugmentedQuery Observable, []> & QueryableStorageEntry; /** @@ -237,6 +244,12 @@ declare module "@polkadot/api-base/types/storage" { */ author: AugmentedQuery Observable>, []> & QueryableStorageEntry; + /** + * The highest slot that has been seen in the history of this chain. This + * is a strictly-increasing value. + */ + highestSlotSeen: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query */ @@ -245,7 +258,7 @@ declare module "@polkadot/api-base/types/storage" { authorMapping: { /** * We maintain a mapping from the NimbusIds used in the consensus layer to - * the AccountIds runtime (including this staking pallet). + * the AccountIds runtime. */ mappingWithDeposit: AugmentedQuery< ApiType, @@ -255,6 +268,15 @@ declare module "@polkadot/api-base/types/storage" { [NimbusPrimitivesNimbusCryptoPublic] > & QueryableStorageEntry; + /** + * We maintain a reverse mapping from AccountIds to NimbusIDS + */ + nimbusLookup: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; /** * Generic query */ @@ -815,6 +837,68 @@ declare module "@polkadot/api-base/types/storage" { */ [key: string]: QueryableStorageEntry; }; + moonbeamOrbiters: { + /** + * Account lookup override + */ + accountLookupOverride: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Current orbiters, with their "parent" collator + */ + collatorsPool: AugmentedQuery< + ApiType, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Counter for the related counted storage map + */ + counterForCollatorsPool: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Current round index + */ + currentRound: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Minimum deposit required to be registered as an orbiter + */ + minOrbiterDeposit: AugmentedQuery Observable>, []> & + QueryableStorageEntry; + /** + * Store active orbiter per round and per parent collator + */ + orbiterPerRound: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId20 | string | Uint8Array + ) => Observable>, + [u32, AccountId20] + > & + QueryableStorageEntry; + /** + * Check if account is an orbiter + */ + registeredOrbiter: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Generic query + */ + [key: string]: QueryableStorageEntry; + }; parachainInfo: { parachainId: AugmentedQuery Observable, []> & QueryableStorageEntry; @@ -832,7 +916,7 @@ declare module "@polkadot/api-base/types/storage" { ( arg1: u32 | AnyNumber | Uint8Array, arg2: AccountId20 | string | Uint8Array - ) => Observable, + ) => Observable, [u32, AccountId20] > & QueryableStorageEntry; @@ -853,7 +937,9 @@ declare module "@polkadot/api-base/types/storage" { */ bottomDelegations: AugmentedQuery< ApiType, - (arg: AccountId20 | string | Uint8Array) => Observable>, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, [AccountId20] > & QueryableStorageEntry; @@ -865,14 +951,18 @@ declare module "@polkadot/api-base/types/storage" { ApiType, ( arg: AccountId20 | string | Uint8Array - ) => Observable>, + ) => Observable>, [AccountId20] > & QueryableStorageEntry; /** * The pool of collator candidates, each with their total backing stake */ - candidatePool: AugmentedQuery Observable>, []> & + candidatePool: AugmentedQuery< + ApiType, + () => Observable>, + [] + > & QueryableStorageEntry; /** * DEPRECATED Get collator candidate state associated with an account if @@ -882,7 +972,7 @@ declare module "@polkadot/api-base/types/storage" { ApiType, ( arg: AccountId20 | string | Uint8Array - ) => Observable>, + ) => Observable>, [AccountId20] > & QueryableStorageEntry; @@ -891,13 +981,25 @@ declare module "@polkadot/api-base/types/storage" { */ collatorCommission: AugmentedQuery Observable, []> & QueryableStorageEntry; + /** + * Temporary storage item to track whether a given collator's reserve has + * been migrated. + */ + collatorReserveToLockMigrations: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable, + [AccountId20] + > & + QueryableStorageEntry; /** * DEPRECATED in favor of CandidateState Get collator state associated * with an account if account is collating else None */ collatorState2: AugmentedQuery< ApiType, - (arg: AccountId20 | string | Uint8Array) => Observable>, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, [AccountId20] > & QueryableStorageEntry; @@ -906,16 +1008,41 @@ declare module "@polkadot/api-base/types/storage" { */ delayedPayouts: AugmentedQuery< ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, + ( + arg: u32 | AnyNumber | Uint8Array + ) => Observable>, [u32] > & QueryableStorageEntry; + /** + * Stores outstanding delegation requests per collator. + */ + delegationScheduledRequests: AugmentedQuery< + ApiType, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Temporary storage item to track whether a given delegator's reserve has + * been migrated. + */ + delegatorReserveToLockMigrations: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable, + [AccountId20] + > & + QueryableStorageEntry; /** * Get delegator state associated with an account if account is delegating else None */ delegatorState: AugmentedQuery< ApiType, - (arg: AccountId20 | string | Uint8Array) => Observable>, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, [AccountId20] > & QueryableStorageEntry; @@ -924,7 +1051,7 @@ declare module "@polkadot/api-base/types/storage" { */ inflationConfig: AugmentedQuery< ApiType, - () => Observable, + () => Observable, [] > & QueryableStorageEntry; @@ -934,7 +1061,9 @@ declare module "@polkadot/api-base/types/storage" { */ nominatorState2: AugmentedQuery< ApiType, - (arg: AccountId20 | string | Uint8Array) => Observable>, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, [AccountId20] > & QueryableStorageEntry; @@ -943,7 +1072,7 @@ declare module "@polkadot/api-base/types/storage" { */ parachainBondInfo: AugmentedQuery< ApiType, - () => Observable, + () => Observable, [] > & QueryableStorageEntry; @@ -959,7 +1088,7 @@ declare module "@polkadot/api-base/types/storage" { /** * Current round index and next round scheduled transition */ - round: AugmentedQuery Observable, []> & + round: AugmentedQuery Observable, []> & QueryableStorageEntry; /** * The collator candidates selected for the current round @@ -980,7 +1109,9 @@ declare module "@polkadot/api-base/types/storage" { */ topDelegations: AugmentedQuery< ApiType, - (arg: AccountId20 | string | Uint8Array) => Observable>, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, [AccountId20] > & QueryableStorageEntry; @@ -1034,7 +1165,7 @@ declare module "@polkadot/api-base/types/storage" { */ hostConfiguration: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1158,7 +1289,7 @@ declare module "@polkadot/api-base/types/storage" { */ upgradeRestrictionSignal: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1175,7 +1306,7 @@ declare module "@polkadot/api-base/types/storage" { */ validationData: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1310,6 +1441,64 @@ declare module "@polkadot/api-base/types/storage" { */ [key: string]: QueryableStorageEntry; }; + randomness: { + /** + * Ensures the mandatory inherent was included in the block + */ + inherentIncluded: AugmentedQuery Observable>, []> & + QueryableStorageEntry; + /** + * Current local per-block VRF randomness Set in `on_initialize` + */ + localVrfOutput: AugmentedQuery Observable>, []> & + QueryableStorageEntry; + /** + * Records whether this is the first block (genesis or runtime upgrade) + */ + notFirstBlock: AugmentedQuery Observable>, []> & + QueryableStorageEntry; + /** + * Snapshot of randomness to fulfill all requests that are for the same + * raw randomness Removed once $value.request_count == 0 + */ + randomnessResults: AugmentedQuery< + ApiType, + ( + arg: + | PalletRandomnessRequestType + | { BabeEpoch: any } + | { Local: any } + | string + | Uint8Array + ) => Observable>, + [PalletRandomnessRequestType] + > & + QueryableStorageEntry; + /** + * Relay epoch + */ + relayEpoch: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Number of randomness requests made so far, used to generate the next + * request's uid + */ + requestCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Randomness requests not yet fulfilled or purged + */ + requests: AugmentedQuery< + ApiType, + (arg: u64 | AnyNumber | Uint8Array) => Observable>, + [u64] + > & + QueryableStorageEntry; + /** + * Generic query + */ + [key: string]: QueryableStorageEntry; + }; randomnessCollectiveFlip: { /** * Series of block headers from the last 81 blocks that acts as random @@ -1405,8 +1594,11 @@ declare module "@polkadot/api-base/types/storage" { /** * Events deposited for the current block. * - * NOTE: This storage item is explicitly unbounded since it is never - * intended to be read from within the runtime. + * NOTE: The item is unbound and should therefore never be read on chain. + * It could otherwise inflate the PoV size of a block. + * + * Events have a large in-memory size. Box the events to not go + * out-of-memory just in case someone still reads them from within the runtime. */ events: AugmentedQuery Observable>, []> & QueryableStorageEntry; @@ -1680,17 +1872,40 @@ declare module "@polkadot/api-base/types/storage" { [key: string]: QueryableStorageEntry; }; xcmTransactor: { + /** + * Stores the fee per second for an asset in its reserve chain. This + * allows us to convert from weight to fee + */ + destinationAssetFeePerSecond: AugmentedQuery< + ApiType, + ( + arg: XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array + ) => Observable>, + [XcmV1MultiLocation] + > & + QueryableStorageEntry; + /** + * Since we are using pallet-utility for account derivation (through + * AsDerivative), we need to provide an index for the account derivation. + * This storage item stores the index assigned for a given local account. + * These indices are usable as derivative in the relay chain + */ indexToAccount: AugmentedQuery< ApiType, (arg: u16 | AnyNumber | Uint8Array) => Observable>, [u16] > & QueryableStorageEntry; + /** + * Stores the transact info of a MultiLocation. This defines how much + * extra weight we need to add when we want to transact in the destination + * chain and maximum amount of weight allowed by the destination chain + */ transactInfoWithWeightLimit: AugmentedQuery< ApiType, ( arg: XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array - ) => Observable>, + ) => Observable>, [XcmV1MultiLocation] > & QueryableStorageEntry; diff --git a/typescript-api/src/moonbase/interfaces/augment-api-rpc.ts b/typescript-api/src/moonbase/interfaces/augment-api-rpc.ts index c16ac098f6..7fb5d936a9 100644 --- a/typescript-api/src/moonbase/interfaces/augment-api-rpc.ts +++ b/typescript-api/src/moonbase/interfaces/augment-api-rpc.ts @@ -14,6 +14,7 @@ import type { U64, Vec, bool, + f64, u32, u64, } from "@polkadot/types-codec"; @@ -37,6 +38,7 @@ import type { CreatedBlock } from "@polkadot/types/interfaces/engine"; import type { EthAccount, EthCallRequest, + EthFeeHistory, EthFilter, EthFilterChanges, EthLog, @@ -55,7 +57,7 @@ import type { JustificationNotification, ReportedRoundStates, } from "@polkadot/types/interfaces/grandpa"; -import type { MmrLeafProof } from "@polkadot/types/interfaces/mmr"; +import type { MmrLeafBatchProof, MmrLeafProof } from "@polkadot/types/interfaces/mmr"; import type { StorageKind } from "@polkadot/types/interfaces/offchain"; import type { FeeDetails, RuntimeDispatchInfo } from "@polkadot/types/interfaces/payment"; import type { RpcMethods } from "@polkadot/types/interfaces/rpc"; @@ -420,6 +422,16 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { number?: BlockNumber | AnyNumber | Uint8Array ) => Observable >; + /** + * Returns fee history for given block count & reward percentiles + */ + feeHistory: AugmentedRpc< + ( + blockCount: U256 | AnyNumber | Uint8Array, + newestBlock: BlockNumber | AnyNumber | Uint8Array, + rewardPercentiles: Option> | null | object | string | Uint8Array + ) => Observable + >; /** * Returns current gas price. */ @@ -595,6 +607,10 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { * Returns the number of hashes per second that the node is mining with. */ hashrate: AugmentedRpc<() => Observable>; + /** + * Returns max priority fee per gas + */ + maxPriorityFeePerGas: AugmentedRpc<() => Observable>; /** * Returns true if client is actively mining new blocks. */ @@ -709,6 +725,15 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { subscribeJustifications: AugmentedRpc<() => Observable>; }; mmr: { + /** + * Generate MMR proof for the given leaf indices. + */ + generateBatchProof: AugmentedRpc< + ( + leafIndices: Vec | (u64 | AnyNumber | Uint8Array)[], + at?: BlockHash | string | Uint8Array + ) => Observable + >; /** * Generate MMR proof for given leaf index. */ @@ -716,9 +741,19 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { ( leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array - ) => Observable + ) => Observable >; }; + moon: { + /** + * Returns whether an Ethereum block is finalized + */ + isBlockFinalized: AugmentedRpc<(blockHash: Hash | string | Uint8Array) => Observable>; + /** + * Returns whether an Ethereum transaction is finalized + */ + isTxFinalized: AugmentedRpc<(txHash: Hash | string | Uint8Array) => Observable>; + }; net: { /** * Returns true if client is actively listening for network connections. diff --git a/typescript-api/src/moonbase/interfaces/augment-api-tx.ts b/typescript-api/src/moonbase/interfaces/augment-api-tx.ts index 86262eeb31..5d20cdd40f 100644 --- a/typescript-api/src/moonbase/interfaces/augment-api-tx.ts +++ b/typescript-api/src/moonbase/interfaces/augment-api-tx.ts @@ -7,6 +7,7 @@ import type { Bytes, Compact, Option, + Struct, U256, U8aFixed, Vec, @@ -17,7 +18,7 @@ import type { u64, u8, } from "@polkadot/types-codec"; -import type { AnyNumber, ITuple } from "@polkadot/types-codec/types"; +import type { AnyNumber, IMethod, ITuple } from "@polkadot/types-codec/types"; import type { AccountId20, Call, @@ -44,9 +45,8 @@ import type { PalletIdentityBitFlags, PalletIdentityIdentityInfo, PalletIdentityJudgement, - ParachainStakingInflationRangePerbill, - ParachainStakingInflationRangeU128, SpRuntimeMultiSignature, + XcmPrimitivesEthereumXcmEthereumXcmTransaction, XcmV0OriginKind, XcmV1MultiLocation, XcmV2WeightLimit, @@ -798,11 +798,11 @@ declare module "@polkadot/api-base/types/submittable" { }; authorFilter: { /** - * Update the eligible ratio. Intended to be called by governance. + * Update the eligible count. Intended to be called by governance. */ setEligible: AugmentedSubmittable< - (updated: Percent | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Percent] + (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] >; /** * Generic tx @@ -831,7 +831,7 @@ declare module "@polkadot/api-base/types/submittable" { */ addAssociation: AugmentedSubmittable< ( - authorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + nimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic] >; @@ -843,20 +843,39 @@ declare module "@polkadot/api-base/types/submittable" { */ clearAssociation: AugmentedSubmittable< ( - authorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + nimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic] >; + /** + * Remove your Mapping. + * + * This is useful when you are no longer an author and would like to + * re-claim your security deposit. + */ + removeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Set association and session keys at once. + * + * This is useful for key rotation to update Nimbus and VRF keys in one + * call. No new security deposit is required. Will replace + * `update_association` which is kept now for backwards compatibility reasons. + */ + setKeys: AugmentedSubmittable< + (keys: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * Change your Mapping. * * This is useful for normal key rotation or for when switching from one - * physical collator machine to another. No new security deposit is required. + * physical collator machine to another. No new security deposit is + * required. This sets keys to new_nimbus_id.into() by default. */ updateAssociation: AugmentedSubmittable< ( - oldAuthorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array, - newAuthorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + oldNimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array, + newNimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic, NimbusPrimitivesNimbusCryptoPublic] >; @@ -1112,7 +1131,7 @@ declare module "@polkadot/api-base/types/submittable" { */ execute: AugmentedSubmittable< ( - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Call, Compact] @@ -1152,7 +1171,7 @@ declare module "@polkadot/api-base/types/submittable" { propose: AugmentedSubmittable< ( threshold: Compact | AnyNumber | Uint8Array, - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Compact, Call, Compact] @@ -1838,6 +1857,25 @@ declare module "@polkadot/api-base/types/submittable" { */ [key: string]: SubmittableExtrinsicFunction; }; + ethereumXcm: { + /** + * Xcm Transact an Ethereum transaction. + */ + transact: AugmentedSubmittable< + ( + xcmTransaction: + | XcmPrimitivesEthereumXcmEthereumXcmTransaction + | { V1: any } + | string + | Uint8Array + ) => SubmittableExtrinsic, + [XcmPrimitivesEthereumXcmEthereumXcmTransaction] + >; + /** + * Generic tx + */ + [key: string]: SubmittableExtrinsicFunction; + }; evm: { /** * Issue an EVM call operation. This is similar to a message call @@ -1917,14 +1955,6 @@ declare module "@polkadot/api-base/types/submittable" { Vec]>> ] >; - /** - * Increment `sufficients` for existing accounts having a nonzero `nonce` - * but zero `sufficients` value. - */ - hotfixIncAccountSufficients: AugmentedSubmittable< - (addresses: Vec | (H160 | string | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; /** * Withdraw balance from EVM into currency/balances pallet. */ @@ -2999,6 +3029,58 @@ declare module "@polkadot/api-base/types/submittable" { */ [key: string]: SubmittableExtrinsicFunction; }; + moonbeamOrbiters: { + /** + * Add a collator to orbiters program. + */ + addCollator: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Add an orbiter in a collator pool + */ + collatorAddOrbiter: AugmentedSubmittable< + (orbiter: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Remove an orbiter from the caller collator pool + */ + collatorRemoveOrbiter: AugmentedSubmittable< + (orbiter: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Remove the caller from the specified collator pool + */ + orbiterLeaveCollatorPool: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Registering as an orbiter + */ + orbiterRegister: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Deregistering from orbiters + */ + orbiterUnregister: AugmentedSubmittable< + (collatorsPoolCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; + /** + * Remove a collator from orbiters program. + */ + removeCollator: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Generic tx + */ + [key: string]: SubmittableExtrinsicFunction; + }; parachainStaking: { /** * Cancel pending request to adjust the collator candidate self bond @@ -3105,21 +3187,55 @@ declare module "@polkadot/api-base/types/submittable" { */ goOnline: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** - * Hotfix patch to remove all delegation requests not removed during a - * candidate exit + * Hotfix to migrate a collator's reserve to a lock. For any given + * collator in the provided list: + * + * - This fn is idempotent + * - Is safe to call if the collator doesn't exist + * - Is safe to call if the collator has been migrated + * - Is safe to call if the collator is a collator (this is a no-op) + * + * Weight calculation: reads: + * + * - CollatorReserveToLockMigrations + * - CandidateInfo writes: + * - Unreserve() + * - Set_lock() + * - CollatorReserveToLockMigrations other: 50M flat weight + 100M weight per item + */ + hotfixMigrateCollatorsFromReserveToLocks: AugmentedSubmittable< + ( + collators: Vec | (AccountId20 | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; + /** + * Hotfix to migrate a delegator's reserve to a lock. For any given + * delegator in the provided list: + * + * - This fn is idempotent + * - Is safe to call if the delegator doesn't exist + * - Is safe to call if the delegator has been migrated + * - Is safe to call if the delegator is a collator (this is a no-op) + * + * Weight calculation: reads: + * + * - DelegatorReserveToLockMigrations + * - DelegatorState writes: + * - Unreserve() + * - Set_lock() + * - DelegatorReserveToLockMigrations other: 50M flat weight + 100M weight per item */ - hotfixRemoveDelegationRequests: AugmentedSubmittable< + hotfixMigrateDelegatorsFromReserveToLocks: AugmentedSubmittable< ( delegators: Vec | (AccountId20 | string | Uint8Array)[] ) => SubmittableExtrinsic, [Vec] >; /** - * Hotfix patch to correct and update CandidatePool value for candidates - * that have called candidate_bond_more when it did not update the - * CandidatePool value + * Hotfix to remove existing empty entries for candidates that have left. */ - hotfixUpdateCandidatePoolValue: AugmentedSubmittable< + hotfixRemoveDelegationRequestsExitedCandidates: AugmentedSubmittable< ( candidates: Vec | (AccountId20 | string | Uint8Array)[] ) => SubmittableExtrinsic, @@ -3162,8 +3278,9 @@ declare module "@polkadot/api-base/types/submittable" { >; /** * Request to leave the set of delegators. If successful, the caller is - * scheduled to be allowed to exit. Success forbids future delegator - * actions until the request is invoked or cancelled. + * scheduled to be allowed to exit via a [DelegationAction::Revoke] + * towards all existing delegations. Success forbids future delegation + * requests until the request is invoked or cancelled. */ scheduleLeaveDelegators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -3199,12 +3316,22 @@ declare module "@polkadot/api-base/types/submittable" { setInflation: AugmentedSubmittable< ( schedule: - | ParachainStakingInflationRangePerbill + | ({ + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct) | { min?: any; ideal?: any; max?: any } | string | Uint8Array ) => SubmittableExtrinsic, - [ParachainStakingInflationRangePerbill] + [ + { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct + ] >; /** * Set the account that will hold funds set aside for parachain bond @@ -3227,12 +3354,22 @@ declare module "@polkadot/api-base/types/submittable" { setStakingExpectations: AugmentedSubmittable< ( expectations: - | ParachainStakingInflationRangeU128 + | ({ + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct) | { min?: any; ideal?: any; max?: any } | string | Uint8Array ) => SubmittableExtrinsic, - [ParachainStakingInflationRangeU128] + [ + { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct + ] >; /** * Set the total number of collator candidates selected per round @@ -3372,8 +3509,10 @@ declare module "@polkadot/api-base/types/submittable" { * Transfer some assets from the local chain to the sovereign account of a * destination chain and forward a notification XCM. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`, up to enough to pay for + * `weight_limit` of weight. If more weight is needed than `weight_limit`, + * then the operation will fail and the assets send may be at risk. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3411,8 +3550,10 @@ declare module "@polkadot/api-base/types/submittable" { /** * Teleport some assets from the local chain to some destination chain. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`, up to enough to pay for + * `weight_limit` of weight. If more weight is needed than `weight_limit`, + * then the operation will fail and the assets send may be at risk. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3451,9 +3592,10 @@ declare module "@polkadot/api-base/types/submittable" { * Transfer some assets from the local chain to the sovereign account of a * destination chain and forward a notification XCM. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector and fee-weight is calculated locally and thus - * remote weights are assumed to be equal to local weights. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`. The weight limit for fees is + * not provided and thus is unlimited, with all fees taken as needed from + * the asset. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3485,9 +3627,10 @@ declare module "@polkadot/api-base/types/submittable" { /** * Teleport some assets from the local chain to some destination chain. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector and fee-weight is calculated locally and thus - * remote weights are assumed to be equal to local weights. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`. The weight limit for fees is + * not provided and thus is unlimited, with all fees taken as needed from + * the asset. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3545,6 +3688,7 @@ declare module "@polkadot/api-base/types/submittable" { | "CancelProxy" | "Balances" | "AuthorMapping" + | "IdentityJudgement" | number | Uint8Array, delay: u32 | AnyNumber | Uint8Array @@ -3626,6 +3770,7 @@ declare module "@polkadot/api-base/types/submittable" { | "CancelProxy" | "Balances" | "AuthorMapping" + | "IdentityJudgement" | number | Uint8Array, delay: u32 | AnyNumber | Uint8Array, @@ -3669,6 +3814,7 @@ declare module "@polkadot/api-base/types/submittable" { | "CancelProxy" | "Balances" | "AuthorMapping" + | "IdentityJudgement" | number | Uint8Array, index: u16 | AnyNumber | Uint8Array, @@ -3702,7 +3848,7 @@ declare module "@polkadot/api-base/types/submittable" { ( real: AccountId20 | string | Uint8Array, forceProxyType: Option | null | object | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [AccountId20, Option, Call] >; @@ -3735,7 +3881,7 @@ declare module "@polkadot/api-base/types/submittable" { delegate: AccountId20 | string | Uint8Array, real: AccountId20 | string | Uint8Array, forceProxyType: Option | null | object | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [AccountId20, AccountId20, Option, Call] >; @@ -3842,6 +3988,7 @@ declare module "@polkadot/api-base/types/submittable" { | "CancelProxy" | "Balances" | "AuthorMapping" + | "IdentityJudgement" | number | Uint8Array, delay: u32 | AnyNumber | Uint8Array @@ -3853,6 +4000,16 @@ declare module "@polkadot/api-base/types/submittable" { */ [key: string]: SubmittableExtrinsicFunction; }; + randomness: { + /** + * Populates the `RandomnessResults` that are due this block with the raw values + */ + setBabeRandomnessResults: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Generic tx + */ + [key: string]: SubmittableExtrinsicFunction; + }; scheduler: { /** * Cancel an anonymously scheduled task. @@ -3992,9 +4149,7 @@ declare module "@polkadot/api-base/types/submittable" { * # */ sudo: AugmentedSubmittable< - ( - call: Call | { callIndex?: any; args?: any } | string | Uint8Array - ) => SubmittableExtrinsic, + (call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, [Call] >; /** @@ -4015,7 +4170,7 @@ declare module "@polkadot/api-base/types/submittable" { sudoAs: AugmentedSubmittable< ( who: AccountId20 | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [AccountId20, Call] >; @@ -4035,7 +4190,7 @@ declare module "@polkadot/api-base/types/submittable" { */ sudoUncheckedWeight: AugmentedSubmittable< ( - call: Call | { callIndex?: any; args?: any } | string | Uint8Array, + call: Call | IMethod | string | Uint8Array, weight: u64 | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Call, u64] @@ -4244,7 +4399,7 @@ declare module "@polkadot/api-base/types/submittable" { */ execute: AugmentedSubmittable< ( - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Call, Compact] @@ -4284,7 +4439,7 @@ declare module "@polkadot/api-base/types/submittable" { propose: AugmentedSubmittable< ( threshold: Compact | AnyNumber | Uint8Array, - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Compact, Call, Compact] @@ -4455,6 +4610,32 @@ declare module "@polkadot/api-base/types/submittable" { (proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, [Compact] >; + /** + * Force a previously approved proposal to be removed from the approval + * queue. The original deposit will no longer be returned. + * + * May only be called from `T::RejectOrigin`. + * + * - `proposal_id`: The index of a proposal + * + * # + * + * - Complexity: O(A) where `A` is the number of approvals + * - Db reads and writes: `Approvals` + * + * # + * + * Errors: + * + * - `ProposalNotApproved`: The `proposal_id` supplied was not found in the + * approval queue, i.e., the proposal has not been approved. This could + * also mean the proposal does not exist altogether, thus there is no + * way it would have been approved in the first place. + */ + removeApproval: AugmentedSubmittable< + (proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [Compact] + >; /** * Generic tx */ @@ -4479,7 +4660,7 @@ declare module "@polkadot/api-base/types/submittable" { asDerivative: AugmentedSubmittable< ( index: u16 | AnyNumber | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [u16, Call] >; @@ -4509,7 +4690,7 @@ declare module "@polkadot/api-base/types/submittable" { */ batch: AugmentedSubmittable< ( - calls: Vec | (Call | { callIndex?: any; args?: any } | string | Uint8Array)[] + calls: Vec | (Call | IMethod | string | Uint8Array)[] ) => SubmittableExtrinsic, [Vec] >; @@ -4534,7 +4715,7 @@ declare module "@polkadot/api-base/types/submittable" { */ batchAll: AugmentedSubmittable< ( - calls: Vec | (Call | { callIndex?: any; args?: any } | string | Uint8Array)[] + calls: Vec | (Call | IMethod | string | Uint8Array)[] ) => SubmittableExtrinsic, [Vec] >; @@ -4563,12 +4744,38 @@ declare module "@polkadot/api-base/types/submittable" { | { TechCommitteeCollective: any } | { CumulusXcm: any } | { PolkadotXcm: any } + | { EthereumXcm: any } | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [MoonbaseRuntimeOriginCaller, Call] >; + /** + * Send a batch of dispatch calls. Unlike `batch`, it allows errors and + * won't interrupt. + * + * May be called from any origin. + * + * - `calls`: The calls to be dispatched from the same origin. The number of + * call must not exceed the constant: `batched_calls_limit` (available + * in constant metadata). + * + * If origin is root then call are dispatch without checking origin + * filter. (This includes bypassing `frame_system::Config::BaseCallFilter`). + * + * # + * + * - Complexity: O(C) where C is the number of calls to be batched. + * + * # + */ + forceBatch: AugmentedSubmittable< + ( + calls: Vec | (Call | IMethod | string | Uint8Array)[] + ) => SubmittableExtrinsic, + [Vec] + >; /** * Generic tx */ @@ -4717,6 +4924,15 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [AccountId20, u16] >; + /** + * Remove the fee per second of an asset on its reserve chain + */ + removeFeePerSecond: AugmentedSubmittable< + ( + assetLocation: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation] + >; /** * Remove the transact info of a location */ @@ -4726,6 +4942,21 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [XcmVersionedMultiLocation] >; + /** + * Set the fee per second of an asset on its reserve chain + */ + setFeePerSecond: AugmentedSubmittable< + ( + assetLocation: + | XcmVersionedMultiLocation + | { V0: any } + | { V1: any } + | string + | Uint8Array, + feePerSecond: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, u128] + >; /** * Change the transact info of a location */ @@ -4733,10 +4964,10 @@ declare module "@polkadot/api-base/types/submittable" { ( location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, transactExtraWeight: u64 | AnyNumber | Uint8Array, - feePerSecond: u128 | AnyNumber | Uint8Array, - maxWeight: u64 | AnyNumber | Uint8Array + maxWeight: u64 | AnyNumber | Uint8Array, + transactExtraWeightSigned: Option | null | object | string | Uint8Array ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, u64, u128, u64] + [XcmVersionedMultiLocation, u64, u64, Option] >; /** * Transact the inner call through a derivative account in a destination @@ -4781,6 +5012,44 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [MoonbaseRuntimeXcmConfigTransactors, u16, XcmVersionedMultiLocation, u64, Bytes] >; + /** + * Transact the call through the a signed origin in this chain that should + * be converted to a transaction dispatch account in the destination chain + * by any method implemented in the destination chains runtime + * + * This time we are giving the currency as a currencyId instead of multilocation + */ + transactThroughSigned: AugmentedSubmittable< + ( + dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + feeCurrencyId: + | MoonbaseRuntimeXcmConfigCurrencyId + | { SelfReserve: any } + | { ForeignAsset: any } + | { LocalAssetReserve: any } + | string + | Uint8Array, + destWeight: u64 | AnyNumber | Uint8Array, + call: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, MoonbaseRuntimeXcmConfigCurrencyId, u64, Bytes] + >; + /** + * Transact the call through the a signed origin in this chain that should + * be converted to a transaction dispatch account in the destination chain + * by any method implemented in the destination chains runtime + * + * This time we are giving the currency as a multilocation instead of currencyId + */ + transactThroughSignedMultilocation: AugmentedSubmittable< + ( + dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + feeLocation: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + destWeight: u64 | AnyNumber | Uint8Array, + call: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, XcmVersionedMultiLocation, u64, Bytes] + >; /** * Transact the call through the sovereign account in a destination chain, * 'fee_payer' pays for the fee diff --git a/typescript-api/src/moonbase/interfaces/augment-types.ts b/typescript-api/src/moonbase/interfaces/augment-types.ts index ade8908353..4f94b06ada 100644 --- a/typescript-api/src/moonbase/interfaces/augment-types.ts +++ b/typescript-api/src/moonbase/interfaces/augment-types.ts @@ -6,6 +6,8 @@ import type { BitVec, Bool, Bytes, + F32, + F64, I128, I16, I256, @@ -14,6 +16,7 @@ import type { I8, Json, Null, + OptionBool, Raw, Text, Type, @@ -25,6 +28,8 @@ import type { U8, USize, bool, + f32, + f64, i128, i16, i256, @@ -99,6 +104,7 @@ import type { BeefyId, BeefyNextAuthoritySet, BeefyPayload, + BeefyPayloadId, BeefySignedCommitment, MmrRootHash, ValidatorSetId, @@ -151,8 +157,6 @@ import type { ContractCallFlags, ContractCallRequest, ContractExecResult, - ContractExecResultErr, - ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, @@ -302,6 +306,7 @@ import type { EthBlock, EthBloom, EthCallRequest, + EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, @@ -537,7 +542,7 @@ import type { StorageMetadataV13, StorageMetadataV9, } from "@polkadot/types/interfaces/metadata"; -import type { MmrLeafProof } from "@polkadot/types/interfaces/mmr"; +import type { MmrLeafBatchProof, MmrLeafProof } from "@polkadot/types/interfaces/mmr"; import type { StorageKind } from "@polkadot/types/interfaces/offchain"; import type { DeferredOffenceOf, @@ -965,6 +970,7 @@ import type { DispatchClass, DispatchError, DispatchErrorModule, + DispatchErrorModuleU8, DispatchErrorModuleU8a, DispatchErrorTo198, DispatchInfo, @@ -1003,6 +1009,7 @@ import type { SystemOrigin, TokenError, TransactionValidityError, + TransactionalError, UnknownTransaction, WeightPerClass, } from "@polkadot/types/interfaces/system"; @@ -1197,6 +1204,7 @@ declare module "@polkadot/types/types/registry" { BeefyKey: BeefyKey; BeefyNextAuthoritySet: BeefyNextAuthoritySet; BeefyPayload: BeefyPayload; + BeefyPayloadId: BeefyPayloadId; BeefySignedCommitment: BeefySignedCommitment; Bid: Bid; Bidder: Bidder; @@ -1296,8 +1304,6 @@ declare module "@polkadot/types/types/registry" { ContractEventSpecV1: ContractEventSpecV1; ContractEventSpecV2: ContractEventSpecV2; ContractExecResult: ContractExecResult; - ContractExecResultErr: ContractExecResultErr; - ContractExecResultErrModule: ContractExecResultErrModule; ContractExecResultOk: ContractExecResultOk; ContractExecResultResult: ContractExecResultResult; ContractExecResultSuccessTo255: ContractExecResultSuccessTo255; @@ -1363,6 +1369,7 @@ declare module "@polkadot/types/types/registry" { DispatchClass: DispatchClass; DispatchError: DispatchError; DispatchErrorModule: DispatchErrorModule; + DispatchErrorModuleU8: DispatchErrorModuleU8; DispatchErrorModuleU8a: DispatchErrorModuleU8a; DispatchErrorTo198: DispatchErrorTo198; DispatchFeePayment: DispatchFeePayment; @@ -1417,6 +1424,7 @@ declare module "@polkadot/types/types/registry" { EthereumAddress: EthereumAddress; EthereumLookupSource: EthereumLookupSource; EthereumSignature: EthereumSignature; + EthFeeHistory: EthFeeHistory; EthFilter: EthFilter; EthFilterAddress: EthFilterAddress; EthFilterChanges: EthFilterChanges; @@ -1481,6 +1489,10 @@ declare module "@polkadot/types/types/registry" { ExtrinsicsWeight: ExtrinsicsWeight; ExtrinsicUnknown: ExtrinsicUnknown; ExtrinsicV4: ExtrinsicV4; + f32: f32; + F32: F32; + f64: f64; + F64: F64; FeeDetails: FeeDetails; Fixed128: Fixed128; Fixed64: Fixed64; @@ -1651,6 +1663,7 @@ declare module "@polkadot/types/types/registry" { MetadataV14: MetadataV14; MetadataV9: MetadataV9; MigrationStatusResult: MigrationStatusResult; + MmrLeafBatchProof: MmrLeafBatchProof; MmrLeafProof: MmrLeafProof; MmrRootHash: MmrRootHash; ModuleConstantMetadataV10: ModuleConstantMetadataV10; @@ -1716,6 +1729,7 @@ declare module "@polkadot/types/types/registry" { OpenTipTip: OpenTipTip; OpenTipTo225: OpenTipTo225; OperatingMode: OperatingMode; + OptionBool: OptionBool; Origin: Origin; OriginCaller: OriginCaller; OriginKindV0: OriginKindV0; @@ -2048,6 +2062,7 @@ declare module "@polkadot/types/types/registry" { TombstoneContractInfo: TombstoneContractInfo; TraceBlockResponse: TraceBlockResponse; TraceError: TraceError; + TransactionalError: TransactionalError; TransactionInfo: TransactionInfo; TransactionPriority: TransactionPriority; TransactionStorageProof: TransactionStorageProof; diff --git a/typescript-api/src/moonbase/interfaces/definitions.ts b/typescript-api/src/moonbase/interfaces/definitions.ts index c0a800f18f..fdef01d9ab 100644 --- a/typescript-api/src/moonbase/interfaces/definitions.ts +++ b/typescript-api/src/moonbase/interfaces/definitions.ts @@ -1 +1 @@ -export { default as empty } from "./empty/definitions"; +export { default as moon } from "./moon/definitions"; diff --git a/typescript-api/src/moonbase/interfaces/empty/definitions.ts b/typescript-api/src/moonbase/interfaces/empty/definitions.ts deleted file mode 100644 index 414f76661b..0000000000 --- a/typescript-api/src/moonbase/interfaces/empty/definitions.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default { - types: {}, -}; diff --git a/typescript-api/src/moonbase/interfaces/lookup.ts b/typescript-api/src/moonbase/interfaces/lookup.ts index b6da570fb5..3b9e95be92 100644 --- a/typescript-api/src/moonbase/interfaces/lookup.ts +++ b/typescript-api/src/moonbase/interfaces/lookup.ts @@ -123,6 +123,7 @@ export default { TooManyConsumers: "Null", Token: "SpRuntimeTokenError", Arithmetic: "SpRuntimeArithmeticError", + Transactional: "SpRuntimeTransactionalError", }, }, /** @@ -130,7 +131,7 @@ export default { */ SpRuntimeModuleError: { index: "u8", - error: "u8", + error: "[u8;4]", }, /** * Lookup25: sp_runtime::TokenError @@ -153,7 +154,13 @@ export default { _enum: ["Underflow", "Overflow", "DivisionByZero"], }, /** - * Lookup27: pallet_utility::pallet::Event + * Lookup27: sp_runtime::TransactionalError + */ + SpRuntimeTransactionalError: { + _enum: ["LimitReached", "NoLayer"], + }, + /** + * Lookup28: pallet_utility::pallet::Event */ PalletUtilityEvent: { _enum: { @@ -162,14 +169,18 @@ export default { error: "SpRuntimeDispatchError", }, BatchCompleted: "Null", + BatchCompletedWithErrors: "Null", ItemCompleted: "Null", + ItemFailed: { + error: "SpRuntimeDispatchError", + }, DispatchedAs: { result: "Result", }, }, }, /** - * Lookup30: pallet_balances::pallet::Event + * Lookup31: pallet_balances::pallet::Event */ PalletBalancesEvent: { _enum: { @@ -220,13 +231,13 @@ export default { }, }, /** - * Lookup31: frame_support::traits::tokens::misc::BalanceStatus + * Lookup32: frame_support::traits::tokens::misc::BalanceStatus */ FrameSupportTokensMiscBalanceStatus: { _enum: ["Free", "Reserved"], }, /** - * Lookup32: pallet_sudo::pallet::Event + * Lookup33: pallet_sudo::pallet::Event */ PalletSudoEvent: { _enum: { @@ -242,20 +253,29 @@ export default { }, }, /** - * Lookup34: cumulus_pallet_parachain_system::pallet::Event + * Lookup35: cumulus_pallet_parachain_system::pallet::Event */ CumulusPalletParachainSystemEvent: { _enum: { ValidationFunctionStored: "Null", - ValidationFunctionApplied: "u32", + ValidationFunctionApplied: { + relayChainBlockNum: "u32", + }, ValidationFunctionDiscarded: "Null", - UpgradeAuthorized: "H256", - DownwardMessagesReceived: "u32", - DownwardMessagesProcessed: "(u64,H256)", + UpgradeAuthorized: { + codeHash: "H256", + }, + DownwardMessagesReceived: { + count: "u32", + }, + DownwardMessagesProcessed: { + weightUsed: "u64", + dmqHead: "H256", + }, }, }, /** - * Lookup35: pallet_evm::pallet::Event + * Lookup36: pallet_evm::pallet::Event */ PalletEvmEvent: { _enum: { @@ -269,7 +289,7 @@ export default { }, }, /** - * Lookup36: ethereum::log::Log + * Lookup37: ethereum::log::Log */ EthereumLog: { address: "H160", @@ -277,7 +297,7 @@ export default { data: "Bytes", }, /** - * Lookup41: pallet_ethereum::pallet::Event + * Lookup42: pallet_ethereum::pallet::Event */ PalletEthereumEvent: { _enum: { @@ -285,7 +305,7 @@ export default { }, }, /** - * Lookup42: evm_core::error::ExitReason + * Lookup43: evm_core::error::ExitReason */ EvmCoreErrorExitReason: { _enum: { @@ -296,13 +316,13 @@ export default { }, }, /** - * Lookup43: evm_core::error::ExitSucceed + * Lookup44: evm_core::error::ExitSucceed */ EvmCoreErrorExitSucceed: { _enum: ["Stopped", "Returned", "Suicided"], }, /** - * Lookup44: evm_core::error::ExitError + * Lookup45: evm_core::error::ExitError */ EvmCoreErrorExitError: { _enum: { @@ -320,17 +340,18 @@ export default { PCUnderflow: "Null", CreateEmpty: "Null", Other: "Text", - InvalidCode: "Null", + __Unused14: "Null", + InvalidCode: "u8", }, }, /** - * Lookup47: evm_core::error::ExitRevert + * Lookup49: evm_core::error::ExitRevert */ EvmCoreErrorExitRevert: { _enum: ["Reverted"], }, /** - * Lookup48: evm_core::error::ExitFatal + * Lookup50: evm_core::error::ExitFatal */ EvmCoreErrorExitFatal: { _enum: { @@ -341,9 +362,9 @@ export default { }, }, /** - * Lookup49: parachain_staking::pallet::Event + * Lookup51: pallet_parachain_staking::pallet::Event */ - ParachainStakingEvent: { + PalletParachainStakingEvent: { _enum: { NewRound: { startingBlock: "u32", @@ -448,13 +469,14 @@ export default { }, CancelledDelegationRequest: { delegator: "AccountId20", - cancelledRequest: "ParachainStakingDelegationRequest", + cancelledRequest: "PalletParachainStakingDelegationRequestsCancelledScheduledRequest", + collator: "AccountId20", }, Delegation: { delegator: "AccountId20", lockedAmount: "u128", candidate: "AccountId20", - delegatorPosition: "ParachainStakingDelegatorAdded", + delegatorPosition: "PalletParachainStakingDelegatorAdded", }, DelegatorLeftCandidate: { delegator: "AccountId20", @@ -526,24 +548,26 @@ export default { }, }, /** - * Lookup51: parachain_staking::types::DelegationRequest + * Lookup53: + * pallet_parachain_staking::delegation_requests::CancelledScheduledRequest */ - ParachainStakingDelegationRequest: { - collator: "AccountId20", - amount: "u128", + PalletParachainStakingDelegationRequestsCancelledScheduledRequest: { whenExecutable: "u32", - action: "ParachainStakingDelegationChange", + action: "PalletParachainStakingDelegationRequestsDelegationAction", }, /** - * Lookup52: parachain_staking::types::DelegationChange + * Lookup54: pallet_parachain_staking::delegation_requests::DelegationAction */ - ParachainStakingDelegationChange: { - _enum: ["Revoke", "Decrease"], + PalletParachainStakingDelegationRequestsDelegationAction: { + _enum: { + Revoke: "u128", + Decrease: "u128", + }, }, /** - * Lookup53: parachain_staking::types::DelegatorAdded + * Lookup55: pallet_parachain_staking::types::DelegatorAdded */ - ParachainStakingDelegatorAdded: { + PalletParachainStakingDelegatorAdded: { _enum: { AddedToTop: { newTotal: "u128", @@ -552,7 +576,7 @@ export default { }, }, /** - * Lookup56: pallet_scheduler::pallet::Event + * Lookup58: pallet_scheduler::pallet::Event */ PalletSchedulerEvent: { _enum: { @@ -577,13 +601,13 @@ export default { }, }, /** - * Lookup59: frame_support::traits::schedule::LookupError + * Lookup61: frame_support::traits::schedule::LookupError */ FrameSupportScheduleLookupError: { _enum: ["Unknown", "BadFormat"], }, /** - * Lookup60: pallet_democracy::pallet::Event + * Lookup62: pallet_democracy::pallet::Event */ PalletDemocracyEvent: { _enum: { @@ -665,13 +689,13 @@ export default { }, }, /** - * Lookup62: pallet_democracy::vote_threshold::VoteThreshold + * Lookup64: pallet_democracy::vote_threshold::VoteThreshold */ PalletDemocracyVoteThreshold: { _enum: ["SuperMajorityApprove", "SuperMajorityAgainst", "SimpleMajority"], }, /** - * Lookup63: pallet_democracy::vote::AccountVote + * Lookup65: pallet_democracy::vote::AccountVote */ PalletDemocracyVoteAccountVote: { _enum: { @@ -686,7 +710,7 @@ export default { }, }, /** - * Lookup65: pallet_collective::pallet::Event + * Lookup67: pallet_collective::pallet::Event */ PalletCollectiveEvent: { _enum: { @@ -725,7 +749,7 @@ export default { }, }, /** - * Lookup67: pallet_treasury::pallet::Event + * Lookup69: pallet_treasury::pallet::Event */ PalletTreasuryEvent: { _enum: { @@ -756,15 +780,15 @@ export default { }, }, /** - * Lookup68: pallet_author_slot_filter::pallet::Event + * Lookup70: pallet_author_slot_filter::pallet::Event */ PalletAuthorSlotFilterEvent: { _enum: { - EligibleUpdated: "Percent", + EligibleUpdated: "u32", }, }, /** - * Lookup69: pallet_crowdloan_rewards::pallet::Event + * Lookup72: pallet_crowdloan_rewards::pallet::Event */ PalletCrowdloanRewardsEvent: { _enum: { @@ -777,37 +801,47 @@ export default { }, }, /** - * Lookup70: pallet_author_mapping::pallet::Event + * Lookup73: pallet_author_mapping::pallet::Event */ PalletAuthorMappingEvent: { _enum: { - AuthorRegistered: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRegistered: { + _alias: { + keys_: "keys", + }, + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, - AuthorDeRegistered: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", - }, - AuthorRotated: { - newAuthorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRemoved: { + _alias: { + keys_: "keys", + }, + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, - DefunctAuthorBusted: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRotated: { + newNimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + newKeys: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, }, }, /** - * Lookup71: nimbus_primitives::nimbus_crypto::Public + * Lookup74: nimbus_primitives::nimbus_crypto::Public */ NimbusPrimitivesNimbusCryptoPublic: "SpCoreSr25519Public", /** - * Lookup72: sp_core::sr25519::Public + * Lookup75: sp_core::sr25519::Public */ SpCoreSr25519Public: "[u8;32]", /** - * Lookup73: pallet_proxy::pallet::Event + * Lookup76: session_keys_primitives::vrf::vrf_crypto::Public + */ + SessionKeysPrimitivesVrfVrfCryptoPublic: "SpCoreSr25519Public", + /** + * Lookup77: pallet_proxy::pallet::Event */ PalletProxyEvent: { _enum: { @@ -831,10 +865,16 @@ export default { proxyType: "MoonbaseRuntimeProxyType", delay: "u32", }, + ProxyRemoved: { + delegator: "AccountId20", + delegatee: "AccountId20", + proxyType: "MoonbaseRuntimeProxyType", + delay: "u32", + }, }, }, /** - * Lookup74: moonbase_runtime::ProxyType + * Lookup78: moonbase_runtime::ProxyType */ MoonbaseRuntimeProxyType: { _enum: [ @@ -845,10 +885,11 @@ export default { "CancelProxy", "Balances", "AuthorMapping", + "IdentityJudgement", ], }, /** - * Lookup76: pallet_maintenance_mode::pallet::Event + * Lookup80: pallet_maintenance_mode::pallet::Event */ PalletMaintenanceModeEvent: { _enum: { @@ -863,7 +904,7 @@ export default { }, }, /** - * Lookup77: pallet_identity::pallet::Event + * Lookup81: pallet_identity::pallet::Event */ PalletIdentityEvent: { _enum: { @@ -911,7 +952,7 @@ export default { }, }, /** - * Lookup78: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup82: cumulus_pallet_xcmp_queue::pallet::Event */ CumulusPalletXcmpQueueEvent: { _enum: { @@ -926,7 +967,7 @@ export default { }, }, /** - * Lookup80: xcm::v2::traits::Error + * Lookup84: xcm::v2::traits::Error */ XcmV2TraitsError: { _enum: { @@ -959,7 +1000,7 @@ export default { }, }, /** - * Lookup82: cumulus_pallet_xcm::pallet::Event + * Lookup86: cumulus_pallet_xcm::pallet::Event */ CumulusPalletXcmEvent: { _enum: { @@ -969,7 +1010,7 @@ export default { }, }, /** - * Lookup84: xcm::v2::traits::Outcome + * Lookup88: xcm::v2::traits::Outcome */ XcmV2TraitsOutcome: { _enum: { @@ -979,20 +1020,38 @@ export default { }, }, /** - * Lookup85: cumulus_pallet_dmp_queue::pallet::Event + * Lookup89: cumulus_pallet_dmp_queue::pallet::Event */ CumulusPalletDmpQueueEvent: { _enum: { - InvalidFormat: "[u8;32]", - UnsupportedVersion: "[u8;32]", - ExecutedDownward: "([u8;32],XcmV2TraitsOutcome)", - WeightExhausted: "([u8;32],u64,u64)", - OverweightEnqueued: "([u8;32],u64,u64)", - OverweightServiced: "(u64,u64)", + InvalidFormat: { + messageId: "[u8;32]", + }, + UnsupportedVersion: { + messageId: "[u8;32]", + }, + ExecutedDownward: { + messageId: "[u8;32]", + outcome: "XcmV2TraitsOutcome", + }, + WeightExhausted: { + messageId: "[u8;32]", + remainingWeight: "u64", + requiredWeight: "u64", + }, + OverweightEnqueued: { + messageId: "[u8;32]", + overweightIndex: "u64", + requiredWeight: "u64", + }, + OverweightServiced: { + overweightIndex: "u64", + weightUsed: "u64", + }, }, }, /** - * Lookup86: pallet_xcm::pallet::Event + * Lookup90: pallet_xcm::pallet::Event */ PalletXcmEvent: { _enum: { @@ -1015,14 +1074,14 @@ export default { }, }, /** - * Lookup87: xcm::v1::multilocation::MultiLocation + * Lookup91: xcm::v1::multilocation::MultiLocation */ XcmV1MultiLocation: { parents: "u8", interior: "XcmV1MultilocationJunctions", }, /** - * Lookup88: xcm::v1::multilocation::Junctions + * Lookup92: xcm::v1::multilocation::Junctions */ XcmV1MultilocationJunctions: { _enum: { @@ -1038,7 +1097,7 @@ export default { }, }, /** - * Lookup89: xcm::v1::junction::Junction + * Lookup93: xcm::v1::junction::Junction */ XcmV1Junction: { _enum: { @@ -1066,7 +1125,7 @@ export default { }, }, /** - * Lookup91: xcm::v0::junction::NetworkId + * Lookup95: xcm::v0::junction::NetworkId */ XcmV0JunctionNetworkId: { _enum: { @@ -1077,7 +1136,7 @@ export default { }, }, /** - * Lookup94: xcm::v0::junction::BodyId + * Lookup98: xcm::v0::junction::BodyId */ XcmV0JunctionBodyId: { _enum: { @@ -1091,7 +1150,7 @@ export default { }, }, /** - * Lookup95: xcm::v0::junction::BodyPart + * Lookup99: xcm::v0::junction::BodyPart */ XcmV0JunctionBodyPart: { _enum: { @@ -1114,11 +1173,11 @@ export default { }, }, /** - * Lookup96: xcm::v2::Xcm + * Lookup100: xcm::v2::Xcm */ XcmV2Xcm: "Vec", /** - * Lookup98: xcm::v2::Instruction + * Lookup102: xcm::v2::Instruction */ XcmV2Instruction: { _enum: { @@ -1216,18 +1275,18 @@ export default { }, }, /** - * Lookup99: xcm::v1::multiasset::MultiAssets + * Lookup103: xcm::v1::multiasset::MultiAssets */ XcmV1MultiassetMultiAssets: "Vec", /** - * Lookup101: xcm::v1::multiasset::MultiAsset + * Lookup105: xcm::v1::multiasset::MultiAsset */ XcmV1MultiAsset: { id: "XcmV1MultiassetAssetId", fun: "XcmV1MultiassetFungibility", }, /** - * Lookup102: xcm::v1::multiasset::AssetId + * Lookup106: xcm::v1::multiasset::AssetId */ XcmV1MultiassetAssetId: { _enum: { @@ -1236,7 +1295,7 @@ export default { }, }, /** - * Lookup103: xcm::v1::multiasset::Fungibility + * Lookup107: xcm::v1::multiasset::Fungibility */ XcmV1MultiassetFungibility: { _enum: { @@ -1245,7 +1304,7 @@ export default { }, }, /** - * Lookup104: xcm::v1::multiasset::AssetInstance + * Lookup108: xcm::v1::multiasset::AssetInstance */ XcmV1MultiassetAssetInstance: { _enum: { @@ -1259,7 +1318,7 @@ export default { }, }, /** - * Lookup106: xcm::v2::Response + * Lookup110: xcm::v2::Response */ XcmV2Response: { _enum: { @@ -1270,19 +1329,19 @@ export default { }, }, /** - * Lookup109: xcm::v0::OriginKind + * Lookup113: xcm::v0::OriginKind */ XcmV0OriginKind: { _enum: ["Native", "SovereignAccount", "Superuser", "Xcm"], }, /** - * Lookup110: xcm::double_encoded::DoubleEncoded + * Lookup114: xcm::double_encoded::DoubleEncoded */ XcmDoubleEncoded: { encoded: "Bytes", }, /** - * Lookup111: xcm::v1::multiasset::MultiAssetFilter + * Lookup115: xcm::v1::multiasset::MultiAssetFilter */ XcmV1MultiassetMultiAssetFilter: { _enum: { @@ -1291,7 +1350,7 @@ export default { }, }, /** - * Lookup112: xcm::v1::multiasset::WildMultiAsset + * Lookup116: xcm::v1::multiasset::WildMultiAsset */ XcmV1MultiassetWildMultiAsset: { _enum: { @@ -1303,13 +1362,13 @@ export default { }, }, /** - * Lookup113: xcm::v1::multiasset::WildFungibility + * Lookup117: xcm::v1::multiasset::WildFungibility */ XcmV1MultiassetWildFungibility: { _enum: ["Fungible", "NonFungible"], }, /** - * Lookup114: xcm::v2::WeightLimit + * Lookup118: xcm::v2::WeightLimit */ XcmV2WeightLimit: { _enum: { @@ -1318,7 +1377,7 @@ export default { }, }, /** - * Lookup116: xcm::VersionedMultiAssets + * Lookup120: xcm::VersionedMultiAssets */ XcmVersionedMultiAssets: { _enum: { @@ -1327,7 +1386,7 @@ export default { }, }, /** - * Lookup118: xcm::v0::multi_asset::MultiAsset + * Lookup122: xcm::v0::multi_asset::MultiAsset */ XcmV0MultiAsset: { _enum: { @@ -1366,7 +1425,7 @@ export default { }, }, /** - * Lookup119: xcm::v0::multi_location::MultiLocation + * Lookup123: xcm::v0::multi_location::MultiLocation */ XcmV0MultiLocation: { _enum: { @@ -1382,7 +1441,7 @@ export default { }, }, /** - * Lookup120: xcm::v0::junction::Junction + * Lookup124: xcm::v0::junction::Junction */ XcmV0Junction: { _enum: { @@ -1411,7 +1470,7 @@ export default { }, }, /** - * Lookup121: xcm::VersionedMultiLocation + * Lookup125: xcm::VersionedMultiLocation */ XcmVersionedMultiLocation: { _enum: { @@ -1420,7 +1479,7 @@ export default { }, }, /** - * Lookup122: pallet_assets::pallet::Event + * Lookup126: pallet_assets::pallet::Event */ PalletAssetsEvent: { _enum: { @@ -1510,7 +1569,7 @@ export default { }, }, /** - * Lookup123: orml_xtokens::module::Event + * Lookup127: orml_xtokens::module::Event */ OrmlXtokensModuleEvent: { _enum: { @@ -1523,7 +1582,7 @@ export default { }, }, /** - * Lookup124: pallet_asset_manager::pallet::Event + * Lookup128: pallet_asset_manager::pallet::Event */ PalletAssetManagerEvent: { _enum: { @@ -1562,7 +1621,7 @@ export default { }, }, /** - * Lookup125: moonbase_runtime::xcm_config::AssetType + * Lookup129: moonbase_runtime::xcm_config::AssetType */ MoonbaseRuntimeXcmConfigAssetType: { _enum: { @@ -1570,7 +1629,7 @@ export default { }, }, /** - * Lookup126: moonbase_runtime::asset_config::AssetRegistrarMetadata + * Lookup130: moonbase_runtime::asset_config::AssetRegistrarMetadata */ MoonbaseRuntimeAssetConfigAssetRegistrarMetadata: { name: "Bytes", @@ -1579,7 +1638,7 @@ export default { isFrozen: "bool", }, /** - * Lookup127: pallet_migrations::pallet::Event + * Lookup131: pallet_migrations::pallet::Event */ PalletMigrationsEvent: { _enum: { @@ -1597,9 +1656,9 @@ export default { }, }, /** - * Lookup128: xcm_transactor::pallet::Event + * Lookup132: pallet_xcm_transactor::pallet::Event */ - XcmTransactorEvent: { + PalletXcmTransactorEvent: { _enum: { TransactedDerivative: { accountId: "AccountId20", @@ -1612,6 +1671,11 @@ export default { dest: "XcmV1MultiLocation", call: "Bytes", }, + TransactedSigned: { + feePayer: "AccountId20", + dest: "XcmV1MultiLocation", + call: "Bytes", + }, RegisteredDerivative: { accountId: "AccountId20", index: "u16", @@ -1624,23 +1688,30 @@ export default { }, TransactInfoChanged: { location: "XcmV1MultiLocation", - remoteInfo: "XcmTransactorRemoteTransactInfoWithMaxWeight", + remoteInfo: "PalletXcmTransactorRemoteTransactInfoWithMaxWeight", }, TransactInfoRemoved: { location: "XcmV1MultiLocation", }, + DestFeePerSecondChanged: { + location: "XcmV1MultiLocation", + feePerSecond: "u128", + }, + DestFeePerSecondRemoved: { + location: "XcmV1MultiLocation", + }, }, }, /** - * Lookup129: xcm_transactor::pallet::RemoteTransactInfoWithMaxWeight + * Lookup133: pallet_xcm_transactor::pallet::RemoteTransactInfoWithMaxWeight */ - XcmTransactorRemoteTransactInfoWithMaxWeight: { + PalletXcmTransactorRemoteTransactInfoWithMaxWeight: { transactExtraWeight: "u64", - feePerSecond: "u128", maxWeight: "u64", + transactExtraWeightSigned: "Option", }, /** - * Lookup130: pallet_base_fee::pallet::Event + * Lookup135: pallet_base_fee::pallet::Event */ PalletBaseFeeEvent: { _enum: { @@ -1651,7 +1722,75 @@ export default { }, }, /** - * Lookup133: frame_system::Phase + * Lookup138: pallet_moonbeam_orbiters::pallet::Event + */ + PalletMoonbeamOrbitersEvent: { + _enum: { + OrbiterJoinCollatorPool: { + collator: "AccountId20", + orbiter: "AccountId20", + }, + OrbiterLeaveCollatorPool: { + collator: "AccountId20", + orbiter: "AccountId20", + }, + OrbiterRewarded: { + account: "AccountId20", + rewards: "u128", + }, + OrbiterRotation: { + collator: "AccountId20", + oldOrbiter: "Option", + newOrbiter: "Option", + }, + OrbiterRegistered: { + account: "AccountId20", + deposit: "u128", + }, + OrbiterUnregistered: { + account: "AccountId20", + }, + }, + }, + /** + * Lookup139: pallet_randomness::pallet::Event + */ + PalletRandomnessEvent: { + _enum: { + RandomnessRequestedBabeEpoch: { + id: "u64", + refundAddress: "H160", + contractAddress: "H160", + fee: "u128", + gasLimit: "u64", + numWords: "u8", + salt: "H256", + earliestEpoch: "u64", + }, + RandomnessRequestedLocal: { + id: "u64", + refundAddress: "H160", + contractAddress: "H160", + fee: "u128", + gasLimit: "u64", + numWords: "u8", + salt: "H256", + earliestBlock: "u32", + }, + RequestFulfilled: { + id: "u64", + }, + RequestFeeIncreased: { + id: "u64", + newFee: "u128", + }, + RequestExpirationExecuted: { + id: "u64", + }, + }, + }, + /** + * Lookup140: frame_system::Phase */ FrameSystemPhase: { _enum: { @@ -1661,14 +1800,14 @@ export default { }, }, /** - * Lookup135: frame_system::LastRuntimeUpgradeInfo + * Lookup142: frame_system::LastRuntimeUpgradeInfo */ FrameSystemLastRuntimeUpgradeInfo: { specVersion: "Compact", specName: "Text", }, /** - * Lookup136: frame_system::pallet::Call + * Lookup143: frame_system::pallet::Call */ FrameSystemCall: { _enum: { @@ -1706,7 +1845,7 @@ export default { }, }, /** - * Lookup140: frame_system::limits::BlockWeights + * Lookup147: frame_system::limits::BlockWeights */ FrameSystemLimitsBlockWeights: { baseBlock: "u64", @@ -1714,7 +1853,7 @@ export default { perClass: "FrameSupportWeightsPerDispatchClassWeightsPerClass", }, /** - * Lookup141: + * Lookup148: * frame_support::weights::PerDispatchClass */ FrameSupportWeightsPerDispatchClassWeightsPerClass: { @@ -1723,7 +1862,7 @@ export default { mandatory: "FrameSystemLimitsWeightsPerClass", }, /** - * Lookup142: frame_system::limits::WeightsPerClass + * Lookup149: frame_system::limits::WeightsPerClass */ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: "u64", @@ -1732,13 +1871,13 @@ export default { reserved: "Option", }, /** - * Lookup144: frame_system::limits::BlockLength + * Lookup150: frame_system::limits::BlockLength */ FrameSystemLimitsBlockLength: { max: "FrameSupportWeightsPerDispatchClassU32", }, /** - * Lookup145: frame_support::weights::PerDispatchClass + * Lookup151: frame_support::weights::PerDispatchClass */ FrameSupportWeightsPerDispatchClassU32: { normal: "u32", @@ -1746,14 +1885,14 @@ export default { mandatory: "u32", }, /** - * Lookup146: frame_support::weights::RuntimeDbWeight + * Lookup152: frame_support::weights::RuntimeDbWeight */ FrameSupportWeightsRuntimeDbWeight: { read: "u64", write: "u64", }, /** - * Lookup147: sp_version::RuntimeVersion + * Lookup153: sp_version::RuntimeVersion */ SpVersionRuntimeVersion: { specName: "Text", @@ -1766,7 +1905,7 @@ export default { stateVersion: "u8", }, /** - * Lookup151: frame_system::pallet::Error + * Lookup157: frame_system::pallet::Error */ FrameSystemError: { _enum: [ @@ -1779,7 +1918,7 @@ export default { ], }, /** - * Lookup152: pallet_utility::pallet::Call + * Lookup158: pallet_utility::pallet::Call */ PalletUtilityCall: { _enum: { @@ -1797,10 +1936,13 @@ export default { asOrigin: "MoonbaseRuntimeOriginCaller", call: "Call", }, + force_batch: { + calls: "Vec", + }, }, }, /** - * Lookup155: pallet_timestamp::pallet::Call + * Lookup161: pallet_timestamp::pallet::Call */ PalletTimestampCall: { _enum: { @@ -1810,7 +1952,7 @@ export default { }, }, /** - * Lookup156: pallet_balances::pallet::Call + * Lookup162: pallet_balances::pallet::Call */ PalletBalancesCall: { _enum: { @@ -1843,7 +1985,7 @@ export default { }, }, /** - * Lookup157: pallet_sudo::pallet::Call + * Lookup163: pallet_sudo::pallet::Call */ PalletSudoCall: { _enum: { @@ -1867,7 +2009,7 @@ export default { }, }, /** - * Lookup158: cumulus_pallet_parachain_system::pallet::Call + * Lookup164: cumulus_pallet_parachain_system::pallet::Call */ CumulusPalletParachainSystemCall: { _enum: { @@ -1886,49 +2028,45 @@ export default { }, }, /** - * Lookup159: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup165: cumulus_primitives_parachain_inherent::ParachainInherentData */ CumulusPrimitivesParachainInherentParachainInherentData: { - validationData: "PolkadotPrimitivesV1PersistedValidationData", + validationData: "PolkadotPrimitivesV2PersistedValidationData", relayChainState: "SpTrieStorageProof", downwardMessages: "Vec", horizontalMessages: "BTreeMap>", }, /** - * Lookup160: polkadot_primitives::v1::PersistedValidationData + * Lookup166: polkadot_primitives::v2::PersistedValidationData */ - PolkadotPrimitivesV1PersistedValidationData: { + PolkadotPrimitivesV2PersistedValidationData: { parentHead: "Bytes", relayParentNumber: "u32", relayParentStorageRoot: "H256", maxPovSize: "u32", }, /** - * Lookup162: sp_trie::storage_proof::StorageProof + * Lookup168: sp_trie::storage_proof::StorageProof */ SpTrieStorageProof: { - trieNodes: "BTreeSet", + trieNodes: "BTreeSet", }, /** - * Lookup163: BTreeSet - */ - BTreeSet: "BTreeSet", - /** - * Lookup165: polkadot_core_primitives::InboundDownwardMessage + * Lookup171: polkadot_core_primitives::InboundDownwardMessage */ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: "u32", msg: "Bytes", }, /** - * Lookup168: polkadot_core_primitives::InboundHrmpMessage + * Lookup174: polkadot_core_primitives::InboundHrmpMessage */ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: "u32", data: "Bytes", }, /** - * Lookup171: pallet_evm::pallet::Call + * Lookup177: pallet_evm::pallet::Call */ PalletEvmCall: { _enum: { @@ -1968,13 +2106,10 @@ export default { nonce: "Option", accessList: "Vec<(H160,Vec)>", }, - hotfix_inc_account_sufficients: { - addresses: "Vec", - }, }, }, /** - * Lookup176: pallet_ethereum::pallet::Call + * Lookup181: pallet_ethereum::pallet::Call */ PalletEthereumCall: { _enum: { @@ -1984,7 +2119,7 @@ export default { }, }, /** - * Lookup177: ethereum::transaction::TransactionV2 + * Lookup182: ethereum::transaction::TransactionV2 */ EthereumTransactionTransactionV2: { _enum: { @@ -1994,7 +2129,7 @@ export default { }, }, /** - * Lookup178: ethereum::transaction::LegacyTransaction + * Lookup183: ethereum::transaction::LegacyTransaction */ EthereumTransactionLegacyTransaction: { nonce: "U256", @@ -2006,7 +2141,7 @@ export default { signature: "EthereumTransactionTransactionSignature", }, /** - * Lookup179: ethereum::transaction::TransactionAction + * Lookup184: ethereum::transaction::TransactionAction */ EthereumTransactionTransactionAction: { _enum: { @@ -2015,7 +2150,7 @@ export default { }, }, /** - * Lookup180: ethereum::transaction::TransactionSignature + * Lookup185: ethereum::transaction::TransactionSignature */ EthereumTransactionTransactionSignature: { v: "u64", @@ -2023,7 +2158,7 @@ export default { s: "H256", }, /** - * Lookup182: ethereum::transaction::EIP2930Transaction + * Lookup187: ethereum::transaction::EIP2930Transaction */ EthereumTransactionEip2930Transaction: { chainId: "u64", @@ -2039,14 +2174,14 @@ export default { s: "H256", }, /** - * Lookup184: ethereum::transaction::AccessListItem + * Lookup189: ethereum::transaction::AccessListItem */ EthereumTransactionAccessListItem: { address: "H160", storageKeys: "Vec", }, /** - * Lookup185: ethereum::transaction::EIP1559Transaction + * Lookup190: ethereum::transaction::EIP1559Transaction */ EthereumTransactionEip1559Transaction: { chainId: "u64", @@ -2063,21 +2198,23 @@ export default { s: "H256", }, /** - * Lookup186: parachain_staking::pallet::Call + * Lookup191: pallet_parachain_staking::pallet::Call */ - ParachainStakingCall: { + PalletParachainStakingCall: { _enum: { - hotfix_remove_delegation_requests: { - delegators: "Vec", - }, - hotfix_update_candidate_pool_value: { - candidates: "Vec", - }, set_staking_expectations: { - expectations: "ParachainStakingInflationRangeU128", + expectations: { + min: "u128", + ideal: "u128", + max: "u128", + }, }, set_inflation: { - schedule: "ParachainStakingInflationRangePerbill", + schedule: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, }, set_parachain_bond_account: { _alias: { @@ -2165,26 +2302,19 @@ export default { cancel_delegation_request: { candidate: "AccountId20", }, + hotfix_remove_delegation_requests_exited_candidates: { + candidates: "Vec", + }, + hotfix_migrate_delegators_from_reserve_to_locks: { + delegators: "Vec", + }, + hotfix_migrate_collators_from_reserve_to_locks: { + collators: "Vec", + }, }, }, /** - * Lookup187: parachain_staking::inflation::Range - */ - ParachainStakingInflationRangeU128: { - min: "u128", - ideal: "u128", - max: "u128", - }, - /** - * Lookup188: parachain_staking::inflation::Range - */ - ParachainStakingInflationRangePerbill: { - min: "Perbill", - ideal: "Perbill", - max: "Perbill", - }, - /** - * Lookup189: pallet_scheduler::pallet::Call + * Lookup194: pallet_scheduler::pallet::Call */ PalletSchedulerCall: { _enum: { @@ -2224,7 +2354,7 @@ export default { }, }, /** - * Lookup191: + * Lookup196: * frame_support::traits::schedule::MaybeHashed */ @@ -2235,7 +2365,7 @@ export default { }, }, /** - * Lookup192: pallet_democracy::pallet::Call + * Lookup197: pallet_democracy::pallet::Call */ PalletDemocracyCall: { _enum: { @@ -2324,13 +2454,13 @@ export default { }, }, /** - * Lookup193: pallet_democracy::conviction::Conviction + * Lookup198: pallet_democracy::conviction::Conviction */ PalletDemocracyConviction: { _enum: ["None", "Locked1x", "Locked2x", "Locked3x", "Locked4x", "Locked5x", "Locked6x"], }, /** - * Lookup195: pallet_collective::pallet::Call + * Lookup200: pallet_collective::pallet::Call */ PalletCollectiveCall: { _enum: { @@ -2365,7 +2495,7 @@ export default { }, }, /** - * Lookup197: pallet_treasury::pallet::Call + * Lookup202: pallet_treasury::pallet::Call */ PalletTreasuryCall: { _enum: { @@ -2379,16 +2509,19 @@ export default { approve_proposal: { proposalId: "Compact", }, + remove_approval: { + proposalId: "Compact", + }, }, }, /** - * Lookup198: pallet_author_inherent::pallet::Call + * Lookup203: pallet_author_inherent::pallet::Call */ PalletAuthorInherentCall: { _enum: ["kick_off_authorship_validation"], }, /** - * Lookup199: pallet_author_slot_filter::pallet::Call + * Lookup204: pallet_author_slot_filter::pallet::Call */ PalletAuthorSlotFilterCall: { _enum: { @@ -2396,12 +2529,12 @@ export default { _alias: { new_: "new", }, - new_: "Percent", + new_: "u32", }, }, }, /** - * Lookup200: pallet_crowdloan_rewards::pallet::Call + * Lookup205: pallet_crowdloan_rewards::pallet::Call */ PalletCrowdloanRewardsCall: { _enum: { @@ -2428,7 +2561,7 @@ export default { }, }, /** - * Lookup201: sp_runtime::MultiSignature + * Lookup206: sp_runtime::MultiSignature */ SpRuntimeMultiSignature: { _enum: { @@ -2438,36 +2571,43 @@ export default { }, }, /** - * Lookup202: sp_core::ed25519::Signature + * Lookup207: sp_core::ed25519::Signature */ SpCoreEd25519Signature: "[u8;64]", /** - * Lookup204: sp_core::sr25519::Signature + * Lookup209: sp_core::sr25519::Signature */ SpCoreSr25519Signature: "[u8;64]", /** - * Lookup205: sp_core::ecdsa::Signature + * Lookup210: sp_core::ecdsa::Signature */ SpCoreEcdsaSignature: "[u8;65]", /** - * Lookup211: pallet_author_mapping::pallet::Call + * Lookup216: pallet_author_mapping::pallet::Call */ PalletAuthorMappingCall: { _enum: { add_association: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", }, update_association: { - oldAuthorId: "NimbusPrimitivesNimbusCryptoPublic", - newAuthorId: "NimbusPrimitivesNimbusCryptoPublic", + oldNimbusId: "NimbusPrimitivesNimbusCryptoPublic", + newNimbusId: "NimbusPrimitivesNimbusCryptoPublic", }, clear_association: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", + }, + remove_keys: "Null", + set_keys: { + _alias: { + keys_: "keys", + }, + keys_: "Bytes", }, }, }, /** - * Lookup212: pallet_proxy::pallet::Call + * Lookup217: pallet_proxy::pallet::Call */ PalletProxyCall: { _enum: { @@ -2520,13 +2660,13 @@ export default { }, }, /** - * Lookup214: pallet_maintenance_mode::pallet::Call + * Lookup219: pallet_maintenance_mode::pallet::Call */ PalletMaintenanceModeCall: { _enum: ["enter_maintenance_mode", "resume_normal_operation"], }, /** - * Lookup215: pallet_identity::pallet::Call + * Lookup220: pallet_identity::pallet::Call */ PalletIdentityCall: { _enum: { @@ -2585,7 +2725,7 @@ export default { }, }, /** - * Lookup216: pallet_identity::types::IdentityInfo + * Lookup221: pallet_identity::types::IdentityInfo */ PalletIdentityIdentityInfo: { additional: "Vec<(Data,Data)>", @@ -2599,7 +2739,7 @@ export default { twitter: "Data", }, /** - * Lookup252: pallet_identity::types::BitFlags + * Lookup257: pallet_identity::types::BitFlags */ PalletIdentityBitFlags: { _bitLength: 64, @@ -2613,7 +2753,7 @@ export default { Twitter: 128, }, /** - * Lookup253: pallet_identity::types::IdentityField + * Lookup258: pallet_identity::types::IdentityField */ PalletIdentityIdentityField: { _enum: [ @@ -2749,7 +2889,7 @@ export default { ], }, /** - * Lookup254: pallet_identity::types::Judgement + * Lookup259: pallet_identity::types::Judgement */ PalletIdentityJudgement: { _enum: { @@ -2763,7 +2903,7 @@ export default { }, }, /** - * Lookup255: cumulus_pallet_xcmp_queue::pallet::Call + * Lookup260: cumulus_pallet_xcmp_queue::pallet::Call */ CumulusPalletXcmpQueueCall: { _enum: { @@ -2812,7 +2952,7 @@ export default { }, }, /** - * Lookup256: cumulus_pallet_dmp_queue::pallet::Call + * Lookup261: cumulus_pallet_dmp_queue::pallet::Call */ CumulusPalletDmpQueueCall: { _enum: { @@ -2823,7 +2963,7 @@ export default { }, }, /** - * Lookup257: pallet_xcm::pallet::Call + * Lookup262: pallet_xcm::pallet::Call */ PalletXcmCall: { _enum: { @@ -2877,7 +3017,7 @@ export default { }, }, /** - * Lookup258: xcm::VersionedXcm + * Lookup263: xcm::VersionedXcm */ XcmVersionedXcm: { _enum: { @@ -2887,7 +3027,7 @@ export default { }, }, /** - * Lookup259: xcm::v0::Xcm + * Lookup264: xcm::v0::Xcm */ XcmV0Xcm: { _enum: { @@ -2941,7 +3081,7 @@ export default { }, }, /** - * Lookup261: xcm::v0::order::Order + * Lookup266: xcm::v0::order::Order */ XcmV0Order: { _enum: { @@ -2984,7 +3124,7 @@ export default { }, }, /** - * Lookup263: xcm::v0::Response + * Lookup268: xcm::v0::Response */ XcmV0Response: { _enum: { @@ -2992,7 +3132,7 @@ export default { }, }, /** - * Lookup264: xcm::v1::Xcm + * Lookup269: xcm::v1::Xcm */ XcmV1Xcm: { _enum: { @@ -3051,7 +3191,7 @@ export default { }, }, /** - * Lookup266: xcm::v1::order::Order + * Lookup271: xcm::v1::order::Order */ XcmV1Order: { _enum: { @@ -3096,7 +3236,7 @@ export default { }, }, /** - * Lookup268: xcm::v1::Response + * Lookup273: xcm::v1::Response */ XcmV1Response: { _enum: { @@ -3105,7 +3245,7 @@ export default { }, }, /** - * Lookup282: pallet_assets::pallet::Call + * Lookup287: pallet_assets::pallet::Call */ PalletAssetsCall: { _enum: { @@ -3233,7 +3373,7 @@ export default { }, }, /** - * Lookup283: pallet_assets::types::DestroyWitness + * Lookup288: pallet_assets::types::DestroyWitness */ PalletAssetsDestroyWitness: { accounts: "Compact", @@ -3241,7 +3381,7 @@ export default { approvals: "Compact", }, /** - * Lookup284: orml_xtokens::module::Call + * Lookup289: orml_xtokens::module::Call */ OrmlXtokensModuleCall: { _enum: { @@ -3284,7 +3424,7 @@ export default { }, }, /** - * Lookup285: moonbase_runtime::xcm_config::CurrencyId + * Lookup290: moonbase_runtime::xcm_config::CurrencyId */ MoonbaseRuntimeXcmConfigCurrencyId: { _enum: { @@ -3294,7 +3434,7 @@ export default { }, }, /** - * Lookup286: xcm::VersionedMultiAsset + * Lookup291: xcm::VersionedMultiAsset */ XcmVersionedMultiAsset: { _enum: { @@ -3303,7 +3443,7 @@ export default { }, }, /** - * Lookup289: pallet_asset_manager::pallet::Call + * Lookup294: pallet_asset_manager::pallet::Call */ PalletAssetManagerCall: { _enum: { @@ -3349,9 +3489,9 @@ export default { }, }, /** - * Lookup290: xcm_transactor::pallet::Call + * Lookup295: pallet_xcm_transactor::pallet::Call */ - XcmTransactorCall: { + PalletXcmTransactorCall: { _enum: { register: { who: "AccountId20", @@ -3385,22 +3525,41 @@ export default { set_transact_info: { location: "XcmVersionedMultiLocation", transactExtraWeight: "u64", - feePerSecond: "u128", maxWeight: "u64", + transactExtraWeightSigned: "Option", }, remove_transact_info: { location: "XcmVersionedMultiLocation", }, + transact_through_signed: { + dest: "XcmVersionedMultiLocation", + feeCurrencyId: "MoonbaseRuntimeXcmConfigCurrencyId", + destWeight: "u64", + call: "Bytes", + }, + transact_through_signed_multilocation: { + dest: "XcmVersionedMultiLocation", + feeLocation: "XcmVersionedMultiLocation", + destWeight: "u64", + call: "Bytes", + }, + set_fee_per_second: { + assetLocation: "XcmVersionedMultiLocation", + feePerSecond: "u128", + }, + remove_fee_per_second: { + assetLocation: "XcmVersionedMultiLocation", + }, }, }, /** - * Lookup291: moonbase_runtime::xcm_config::Transactors + * Lookup296: moonbase_runtime::xcm_config::Transactors */ MoonbaseRuntimeXcmConfigTransactors: { _enum: ["Relay"], }, /** - * Lookup292: pallet_base_fee::pallet::Call + * Lookup297: pallet_base_fee::pallet::Call */ PalletBaseFeeCall: { _enum: { @@ -3416,7 +3575,84 @@ export default { }, }, /** - * Lookup294: moonbase_runtime::OriginCaller + * Lookup299: pallet_moonbeam_orbiters::pallet::Call + */ + PalletMoonbeamOrbitersCall: { + _enum: { + collator_add_orbiter: { + orbiter: "AccountId20", + }, + collator_remove_orbiter: { + orbiter: "AccountId20", + }, + orbiter_leave_collator_pool: { + collator: "AccountId20", + }, + orbiter_register: "Null", + orbiter_unregister: { + collatorsPoolCount: "u32", + }, + add_collator: { + collator: "AccountId20", + }, + remove_collator: { + collator: "AccountId20", + }, + }, + }, + /** + * Lookup300: pallet_ethereum_xcm::pallet::Call + */ + PalletEthereumXcmCall: { + _enum: { + transact: { + xcmTransaction: "XcmPrimitivesEthereumXcmEthereumXcmTransaction", + }, + }, + }, + /** + * Lookup301: xcm_primitives::ethereum_xcm::EthereumXcmTransaction + */ + XcmPrimitivesEthereumXcmEthereumXcmTransaction: { + _enum: { + V1: "XcmPrimitivesEthereumXcmEthereumXcmTransactionV1", + }, + }, + /** + * Lookup302: xcm_primitives::ethereum_xcm::EthereumXcmTransactionV1 + */ + XcmPrimitivesEthereumXcmEthereumXcmTransactionV1: { + gasLimit: "U256", + feePayment: "XcmPrimitivesEthereumXcmEthereumXcmFee", + action: "EthereumTransactionTransactionAction", + value: "U256", + input: "Bytes", + accessList: "Option)>>", + }, + /** + * Lookup303: xcm_primitives::ethereum_xcm::EthereumXcmFee + */ + XcmPrimitivesEthereumXcmEthereumXcmFee: { + _enum: { + Manual: "XcmPrimitivesEthereumXcmManualEthereumXcmFee", + Auto: "Null", + }, + }, + /** + * Lookup304: xcm_primitives::ethereum_xcm::ManualEthereumXcmFee + */ + XcmPrimitivesEthereumXcmManualEthereumXcmFee: { + gasPrice: "Option", + maxFeePerGas: "Option", + }, + /** + * Lookup306: pallet_randomness::pallet::Call + */ + PalletRandomnessCall: { + _enum: ["set_babe_randomness_results"], + }, + /** + * Lookup307: moonbase_runtime::OriginCaller */ MoonbaseRuntimeOriginCaller: { _enum: { @@ -3426,8 +3662,8 @@ export default { __Unused3: "Null", __Unused4: "Null", __Unused5: "Null", + __Unused6: "Null", Void: "SpCoreVoid", - __Unused7: "Null", __Unused8: "Null", __Unused9: "Null", __Unused10: "Null", @@ -3449,10 +3685,20 @@ export default { CumulusXcm: "CumulusPalletXcmOrigin", __Unused27: "Null", PolkadotXcm: "PalletXcmOrigin", + __Unused29: "Null", + __Unused30: "Null", + __Unused31: "Null", + __Unused32: "Null", + __Unused33: "Null", + __Unused34: "Null", + __Unused35: "Null", + __Unused36: "Null", + __Unused37: "Null", + EthereumXcm: "PalletEthereumXcmRawOrigin", }, }, /** - * Lookup295: + * Lookup308: * frame_support::dispatch::RawOrigin[account::AccountId20](account::AccountId20) */ FrameSupportDispatchRawOrigin: { @@ -3463,7 +3709,7 @@ export default { }, }, /** - * Lookup296: pallet_ethereum::RawOrigin + * Lookup309: pallet_ethereum::RawOrigin */ PalletEthereumRawOrigin: { _enum: { @@ -3471,7 +3717,7 @@ export default { }, }, /** - * Lookup297: pallet_collective::RawOrigin + * Lookup310: pallet_collective::RawOrigin */ PalletCollectiveRawOrigin: { _enum: { @@ -3481,7 +3727,7 @@ export default { }, }, /** - * Lookup299: cumulus_pallet_xcm::pallet::Origin + * Lookup312: cumulus_pallet_xcm::pallet::Origin */ CumulusPalletXcmOrigin: { _enum: { @@ -3490,7 +3736,7 @@ export default { }, }, /** - * Lookup300: pallet_xcm::pallet::Origin + * Lookup313: pallet_xcm::pallet::Origin */ PalletXcmOrigin: { _enum: { @@ -3499,17 +3745,25 @@ export default { }, }, /** - * Lookup301: sp_core::Void + * Lookup314: pallet_ethereum_xcm::RawOrigin + */ + PalletEthereumXcmRawOrigin: { + _enum: { + XcmEthereumTransaction: "H160", + }, + }, + /** + * Lookup315: sp_core::Void */ SpCoreVoid: "Null", /** - * Lookup302: pallet_utility::pallet::Error + * Lookup316: pallet_utility::pallet::Error */ PalletUtilityError: { _enum: ["TooManyCalls"], }, /** - * Lookup304: pallet_balances::BalanceLock + * Lookup318: pallet_balances::BalanceLock */ PalletBalancesBalanceLock: { id: "[u8;8]", @@ -3517,26 +3771,26 @@ export default { reasons: "PalletBalancesReasons", }, /** - * Lookup305: pallet_balances::Reasons + * Lookup319: pallet_balances::Reasons */ PalletBalancesReasons: { _enum: ["Fee", "Misc", "All"], }, /** - * Lookup308: pallet_balances::ReserveData + * Lookup322: pallet_balances::ReserveData */ PalletBalancesReserveData: { id: "[u8;4]", amount: "u128", }, /** - * Lookup310: pallet_balances::Releases + * Lookup324: pallet_balances::Releases */ PalletBalancesReleases: { _enum: ["V1_0_0", "V2_0_0"], }, /** - * Lookup311: pallet_balances::pallet::Error + * Lookup325: pallet_balances::pallet::Error */ PalletBalancesError: { _enum: [ @@ -3551,31 +3805,31 @@ export default { ], }, /** - * Lookup312: pallet_sudo::pallet::Error + * Lookup326: pallet_sudo::pallet::Error */ PalletSudoError: { _enum: ["RequireSudo"], }, /** - * Lookup315: polkadot_primitives::v1::UpgradeRestriction + * Lookup329: polkadot_primitives::v2::UpgradeRestriction */ - PolkadotPrimitivesV1UpgradeRestriction: { + PolkadotPrimitivesV2UpgradeRestriction: { _enum: ["Present"], }, /** - * Lookup316: + * Lookup330: * cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot */ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: "H256", relayDispatchQueueSize: "(u32,u32)", - ingressChannels: "Vec<(u32,PolkadotPrimitivesV1AbridgedHrmpChannel)>", - egressChannels: "Vec<(u32,PolkadotPrimitivesV1AbridgedHrmpChannel)>", + ingressChannels: "Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>", + egressChannels: "Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>", }, /** - * Lookup319: polkadot_primitives::v1::AbridgedHrmpChannel + * Lookup333: polkadot_primitives::v2::AbridgedHrmpChannel */ - PolkadotPrimitivesV1AbridgedHrmpChannel: { + PolkadotPrimitivesV2AbridgedHrmpChannel: { maxCapacity: "u32", maxTotalSize: "u32", maxMessageSize: "u32", @@ -3584,9 +3838,9 @@ export default { mqcHead: "Option", }, /** - * Lookup320: polkadot_primitives::v1::AbridgedHostConfiguration + * Lookup334: polkadot_primitives::v2::AbridgedHostConfiguration */ - PolkadotPrimitivesV1AbridgedHostConfiguration: { + PolkadotPrimitivesV2AbridgedHostConfiguration: { maxCodeSize: "u32", maxHeadDataSize: "u32", maxUpwardQueueCount: "u32", @@ -3598,7 +3852,7 @@ export default { validationUpgradeDelay: "u32", }, /** - * Lookup326: + * Lookup340: * polkadot_core_primitives::OutboundHrmpMessage */ PolkadotCorePrimitivesOutboundHrmpMessage: { @@ -3606,7 +3860,7 @@ export default { data: "Bytes", }, /** - * Lookup327: cumulus_pallet_parachain_system::pallet::Error + * Lookup341: cumulus_pallet_parachain_system::pallet::Error */ CumulusPalletParachainSystemError: { _enum: [ @@ -3621,22 +3875,13 @@ export default { ], }, /** - * Lookup329: pallet_transaction_payment::Releases + * Lookup343: pallet_transaction_payment::Releases */ PalletTransactionPaymentReleases: { _enum: ["V1Ancient", "V2"], }, /** - * Lookup331: frame_support::weights::WeightToFeeCoefficient - */ - FrameSupportWeightsWeightToFeeCoefficient: { - coeffInteger: "u128", - coeffFrac: "Perbill", - negative: "bool", - degree: "u8", - }, - /** - * Lookup333: pallet_evm::pallet::Error + * Lookup345: pallet_evm::pallet::Error */ PalletEvmError: { _enum: [ @@ -3646,11 +3891,13 @@ export default { "WithdrawFailed", "GasPriceTooLow", "InvalidNonce", - "MaxAddressCountExceeded", + "GasLimitTooLow", + "GasLimitTooHigh", + "Undefined", ], }, /** - * Lookup336: fp_rpc::TransactionStatus + * Lookup348: fp_rpc::TransactionStatus */ FpRpcTransactionStatus: { transactionHash: "H256", @@ -3662,11 +3909,11 @@ export default { logsBloom: "EthbloomBloom", }, /** - * Lookup339: ethbloom::Bloom + * Lookup351: ethbloom::Bloom */ EthbloomBloom: "[u8;256]", /** - * Lookup341: ethereum::receipt::ReceiptV3 + * Lookup353: ethereum::receipt::ReceiptV3 */ EthereumReceiptReceiptV3: { _enum: { @@ -3676,7 +3923,7 @@ export default { }, }, /** - * Lookup342: ethereum::receipt::EIP658ReceiptData + * Lookup354: ethereum::receipt::EIP658ReceiptData */ EthereumReceiptEip658ReceiptData: { statusCode: "u8", @@ -3685,7 +3932,7 @@ export default { logs: "Vec", }, /** - * Lookup343: + * Lookup355: * ethereum::block::Block[ethereum::transaction::TransactionV2](ethereum::transaction::TransactionV2) */ EthereumBlock: { @@ -3694,7 +3941,7 @@ export default { ommers: "Vec", }, /** - * Lookup344: ethereum::header::Header + * Lookup356: ethereum::header::Header */ EthereumHeader: { parentHash: "H256", @@ -3714,113 +3961,102 @@ export default { nonce: "EthereumTypesHashH64", }, /** - * Lookup345: ethereum_types::hash::H64 + * Lookup357: ethereum_types::hash::H64 */ EthereumTypesHashH64: "[u8;8]", /** - * Lookup350: pallet_ethereum::pallet::Error + * Lookup362: pallet_ethereum::pallet::Error */ PalletEthereumError: { _enum: ["InvalidSignature", "PreLogExists"], }, /** - * Lookup351: - * parachain_staking::types::ParachainBondConfig[account::AccountId20](account::AccountId20) + * Lookup363: + * pallet_parachain_staking::types::ParachainBondConfig[account::AccountId20](account::AccountId20) */ - ParachainStakingParachainBondConfig: { + PalletParachainStakingParachainBondConfig: { account: "AccountId20", percent: "Percent", }, /** - * Lookup352: parachain_staking::types::RoundInfo + * Lookup364: pallet_parachain_staking::types::RoundInfo */ - ParachainStakingRoundInfo: { + PalletParachainStakingRoundInfo: { current: "u32", first: "u32", length: "u32", }, /** - * Lookup353: parachain_staking::types::Nominator2 + * Lookup365: pallet_parachain_staking::types::Nominator2 */ - ParachainStakingNominator2: { - delegations: "ParachainStakingSetOrderedSetBond", - revocations: "ParachainStakingSetOrderedSetAccountId20", + PalletParachainStakingNominator2: { + delegations: "PalletParachainStakingSetOrderedSetBond", + revocations: "PalletParachainStakingSetOrderedSetAccountId20", total: "u128", scheduledRevocationsCount: "u32", scheduledRevocationsTotal: "u128", - status: "ParachainStakingDelegatorStatus", + status: "PalletParachainStakingDelegatorStatus", }, /** - * Lookup354: - * parachain_staking::set::OrderedSet> */ - ParachainStakingSetOrderedSetBond: "Vec", + PalletParachainStakingSetOrderedSetBond: "Vec", /** - * Lookup355: parachain_staking::types::Bond + * Lookup367: pallet_parachain_staking::types::Bond */ - ParachainStakingBond: { + PalletParachainStakingBond: { owner: "AccountId20", amount: "u128", }, /** - * Lookup357: - * parachain_staking::set::OrderedSet[account::AccountId20](account::AccountId20) + * Lookup369: + * pallet_parachain_staking::set::OrderedSet[account::AccountId20](account::AccountId20) */ - ParachainStakingSetOrderedSetAccountId20: "Vec", + PalletParachainStakingSetOrderedSetAccountId20: "Vec", /** - * Lookup358: parachain_staking::types::DelegatorStatus + * Lookup370: pallet_parachain_staking::types::DelegatorStatus */ - ParachainStakingDelegatorStatus: { - _enum: { - Active: "Null", - Leaving: "u32", - }, + PalletParachainStakingDelegatorStatus: { + _enum: ["Active"], }, /** - * Lookup359: parachain_staking::types::Delegator + * Lookup371: pallet_parachain_staking::types::Delegator */ - ParachainStakingDelegator: { + PalletParachainStakingDelegator: { id: "AccountId20", - delegations: "ParachainStakingSetOrderedSetBond", + delegations: "PalletParachainStakingSetOrderedSetBond", total: "u128", - requests: "ParachainStakingPendingDelegationRequests", - status: "ParachainStakingDelegatorStatus", - }, - /** - * Lookup360: - * parachain_staking::types::PendingDelegationRequests - */ - ParachainStakingPendingDelegationRequests: { - revocationsCount: "u32", - requests: "BTreeMap", lessTotal: "u128", + status: "PalletParachainStakingDelegatorStatus", }, /** - * Lookup364: parachain_staking::types::CollatorCandidate + * Lookup372: + * pallet_parachain_staking::types::CollatorCandidate */ - ParachainStakingCollatorCandidate: { + PalletParachainStakingCollatorCandidate: { id: "AccountId20", bond: "u128", - delegators: "ParachainStakingSetOrderedSetAccountId20", - topDelegations: "Vec", - bottomDelegations: "Vec", + delegators: "PalletParachainStakingSetOrderedSetAccountId20", + topDelegations: "Vec", + bottomDelegations: "Vec", totalCounted: "u128", totalBacking: "u128", - request: "Option", - state: "ParachainStakingCollatorStatus", + request: "Option", + state: "PalletParachainStakingCollatorStatus", }, /** - * Lookup366: parachain_staking::types::CandidateBondLessRequest + * Lookup374: pallet_parachain_staking::types::CandidateBondLessRequest */ - ParachainStakingCandidateBondLessRequest: { + PalletParachainStakingCandidateBondLessRequest: { amount: "u128", whenExecutable: "u32", }, /** - * Lookup367: parachain_staking::types::CollatorStatus + * Lookup375: pallet_parachain_staking::types::CollatorStatus */ - ParachainStakingCollatorStatus: { + PalletParachainStakingCollatorStatus: { _enum: { Active: "Null", Idle: "Null", @@ -3828,74 +4064,98 @@ export default { }, }, /** - * Lookup368: parachain_staking::types::CandidateMetadata + * Lookup376: pallet_parachain_staking::types::CandidateMetadata */ - ParachainStakingCandidateMetadata: { + PalletParachainStakingCandidateMetadata: { bond: "u128", delegationCount: "u32", totalCounted: "u128", lowestTopDelegationAmount: "u128", highestBottomDelegationAmount: "u128", lowestBottomDelegationAmount: "u128", - topCapacity: "ParachainStakingCapacityStatus", - bottomCapacity: "ParachainStakingCapacityStatus", - request: "Option", - status: "ParachainStakingCollatorStatus", + topCapacity: "PalletParachainStakingCapacityStatus", + bottomCapacity: "PalletParachainStakingCapacityStatus", + request: "Option", + status: "PalletParachainStakingCollatorStatus", }, /** - * Lookup369: parachain_staking::types::CapacityStatus + * Lookup377: pallet_parachain_staking::types::CapacityStatus */ - ParachainStakingCapacityStatus: { + PalletParachainStakingCapacityStatus: { _enum: ["Full", "Empty", "Partial"], }, /** - * Lookup370: parachain_staking::types::Delegations + * Lookup379: + * pallet_parachain_staking::delegation_requests::ScheduledRequest */ - ParachainStakingDelegations: { - delegations: "Vec", + PalletParachainStakingDelegationRequestsScheduledRequest: { + delegator: "AccountId20", + whenExecutable: "u32", + action: "PalletParachainStakingDelegationRequestsDelegationAction", + }, + /** + * Lookup380: + * pallet_parachain_staking::types::Delegations + */ + PalletParachainStakingDelegations: { + delegations: "Vec", total: "u128", }, /** - * Lookup371: parachain_staking::types::Collator2 + * Lookup381: pallet_parachain_staking::types::Collator2 */ - ParachainStakingCollator2: { + PalletParachainStakingCollator2: { id: "AccountId20", bond: "u128", - nominators: "ParachainStakingSetOrderedSetAccountId20", - topNominators: "Vec", - bottomNominators: "Vec", + nominators: "PalletParachainStakingSetOrderedSetAccountId20", + topNominators: "Vec", + bottomNominators: "Vec", totalCounted: "u128", totalBacking: "u128", - state: "ParachainStakingCollatorStatus", + state: "PalletParachainStakingCollatorStatus", }, /** - * Lookup373: parachain_staking::types::CollatorSnapshot + * Lookup383: + * pallet_parachain_staking::types::CollatorSnapshot */ - ParachainStakingCollatorSnapshot: { + PalletParachainStakingCollatorSnapshot: { bond: "u128", - delegations: "Vec", + delegations: "Vec", total: "u128", }, /** - * Lookup374: parachain_staking::types::DelayedPayout + * Lookup384: pallet_parachain_staking::types::DelayedPayout */ - ParachainStakingDelayedPayout: { + PalletParachainStakingDelayedPayout: { roundIssuance: "u128", totalStakingReward: "u128", collatorCommission: "Perbill", }, /** - * Lookup375: parachain_staking::inflation::InflationInfo + * Lookup385: pallet_parachain_staking::inflation::InflationInfo */ - ParachainStakingInflationInflationInfo: { - expect: "ParachainStakingInflationRangeU128", - annual: "ParachainStakingInflationRangePerbill", - round: "ParachainStakingInflationRangePerbill", + PalletParachainStakingInflationInflationInfo: { + expect: { + min: "u128", + ideal: "u128", + max: "u128", + }, + annual: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, + round: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, }, /** - * Lookup376: parachain_staking::pallet::Error + * Lookup386: pallet_parachain_staking::pallet::Error */ - ParachainStakingError: { + PalletParachainStakingError: { _enum: [ "DelegatorDNE", "DelegatorDNEinTopNorBottom", @@ -3937,11 +4197,12 @@ export default { "PendingDelegationRequestDNE", "PendingDelegationRequestAlreadyExists", "PendingDelegationRequestNotDueYet", - "CannotDelegateLessThanLowestBottomWhenBottomIsFull", + "CannotDelegateLessThanOrEqualToLowestBottomWhenFull", + "PendingDelegationRevoke", ], }, /** - * Lookup379: + * Lookup389: * pallet_scheduler::ScheduledV3, BlockNumber, moonbase_runtime::OriginCaller, * account::AccountId20> @@ -3954,13 +4215,13 @@ export default { origin: "MoonbaseRuntimeOriginCaller", }, /** - * Lookup380: pallet_scheduler::pallet::Error + * Lookup390: pallet_scheduler::pallet::Error */ PalletSchedulerError: { _enum: ["FailedToSchedule", "NotFound", "TargetBlockNumberInPast", "RescheduleNoChange"], }, /** - * Lookup384: pallet_democracy::PreimageStatus */ PalletDemocracyPreimageStatus: { @@ -3976,7 +4237,7 @@ export default { }, }, /** - * Lookup385: pallet_democracy::types::ReferendumInfo */ PalletDemocracyReferendumInfo: { @@ -3989,7 +4250,7 @@ export default { }, }, /** - * Lookup386: pallet_democracy::types::ReferendumStatus */ PalletDemocracyReferendumStatus: { @@ -4000,7 +4261,7 @@ export default { tally: "PalletDemocracyTally", }, /** - * Lookup387: pallet_democracy::types::Tally + * Lookup397: pallet_democracy::types::Tally */ PalletDemocracyTally: { ayes: "u128", @@ -4008,7 +4269,7 @@ export default { turnout: "u128", }, /** - * Lookup388: pallet_democracy::vote::Voting + * Lookup398: pallet_democracy::vote::Voting */ PalletDemocracyVoteVoting: { _enum: { @@ -4027,24 +4288,24 @@ export default { }, }, /** - * Lookup391: pallet_democracy::types::Delegations + * Lookup401: pallet_democracy::types::Delegations */ PalletDemocracyDelegations: { votes: "u128", capital: "u128", }, /** - * Lookup392: pallet_democracy::vote::PriorLock + * Lookup402: pallet_democracy::vote::PriorLock */ PalletDemocracyVotePriorLock: "(u32,u128)", /** - * Lookup395: pallet_democracy::Releases + * Lookup405: pallet_democracy::Releases */ PalletDemocracyReleases: { _enum: ["V1"], }, /** - * Lookup396: pallet_democracy::pallet::Error + * Lookup406: pallet_democracy::pallet::Error */ PalletDemocracyError: { _enum: [ @@ -4079,7 +4340,7 @@ export default { ], }, /** - * Lookup398: pallet_collective::Votes + * Lookup408: pallet_collective::Votes */ PalletCollectiveVotes: { index: "u32", @@ -4089,7 +4350,7 @@ export default { end: "u32", }, /** - * Lookup399: pallet_collective::pallet::Error + * Lookup409: pallet_collective::pallet::Error */ PalletCollectiveError: { _enum: [ @@ -4106,7 +4367,7 @@ export default { ], }, /** - * Lookup401: pallet_treasury::Proposal + * Lookup411: pallet_treasury::Proposal */ PalletTreasuryProposal: { proposer: "AccountId20", @@ -4115,23 +4376,28 @@ export default { bond: "u128", }, /** - * Lookup405: frame_support::PalletId + * Lookup415: frame_support::PalletId */ FrameSupportPalletId: "[u8;8]", /** - * Lookup406: pallet_treasury::pallet::Error + * Lookup416: pallet_treasury::pallet::Error */ PalletTreasuryError: { - _enum: ["InsufficientProposersBalance", "InvalidIndex", "TooManyApprovals"], + _enum: [ + "InsufficientProposersBalance", + "InvalidIndex", + "TooManyApprovals", + "ProposalNotApproved", + ], }, /** - * Lookup407: pallet_author_inherent::pallet::Error + * Lookup417: pallet_author_inherent::pallet::Error */ PalletAuthorInherentError: { _enum: ["AuthorAlreadySet", "NoAccountId", "CannotBeAuthor"], }, /** - * Lookup408: pallet_crowdloan_rewards::pallet::RewardInfo + * Lookup418: pallet_crowdloan_rewards::pallet::RewardInfo */ PalletCrowdloanRewardsRewardInfo: { totalReward: "u128", @@ -4139,7 +4405,7 @@ export default { contributedRelayAddresses: "Vec<[u8;32]>", }, /** - * Lookup410: pallet_crowdloan_rewards::pallet::Error + * Lookup420: pallet_crowdloan_rewards::pallet::Error */ PalletCrowdloanRewardsError: { _enum: [ @@ -4161,15 +4427,18 @@ export default { ], }, /** - * Lookup411: - * pallet_author_mapping::pallet::RegistrationInfo + * Lookup421: pallet_author_mapping::pallet::RegistrationInfo */ PalletAuthorMappingRegistrationInfo: { + _alias: { + keys_: "keys", + }, account: "AccountId20", deposit: "u128", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, /** - * Lookup412: pallet_author_mapping::pallet::Error + * Lookup422: pallet_author_mapping::pallet::Error */ PalletAuthorMappingError: { _enum: [ @@ -4177,10 +4446,14 @@ export default { "NotYourAssociation", "CannotAffordSecurityDeposit", "AlreadyAssociated", + "OldAuthorIdNotFound", + "WrongKeySize", + "DecodeNimbusFailed", + "DecodeKeysFailed", ], }, /** - * Lookup415: pallet_proxy::ProxyDefinition */ PalletProxyProxyDefinition: { @@ -4189,7 +4462,7 @@ export default { delay: "u32", }, /** - * Lookup419: pallet_proxy::Announcement */ PalletProxyAnnouncement: { @@ -4198,7 +4471,7 @@ export default { height: "u32", }, /** - * Lookup421: pallet_proxy::pallet::Error + * Lookup431: pallet_proxy::pallet::Error */ PalletProxyError: { _enum: [ @@ -4213,13 +4486,13 @@ export default { ], }, /** - * Lookup422: pallet_maintenance_mode::pallet::Error + * Lookup432: pallet_maintenance_mode::pallet::Error */ PalletMaintenanceModeError: { _enum: ["AlreadyInMaintenanceMode", "NotInMaintenanceMode"], }, /** - * Lookup423: pallet_identity::types::Registration */ PalletIdentityRegistration: { @@ -4228,7 +4501,7 @@ export default { info: "PalletIdentityIdentityInfo", }, /** - * Lookup431: pallet_identity::types::RegistrarInfo + * Lookup441: pallet_identity::types::RegistrarInfo */ PalletIdentityRegistrarInfo: { account: "AccountId20", @@ -4236,7 +4509,7 @@ export default { fields: "PalletIdentityBitFlags", }, /** - * Lookup433: pallet_identity::pallet::Error + * Lookup443: pallet_identity::pallet::Error */ PalletIdentityError: { _enum: [ @@ -4259,7 +4532,7 @@ export default { ], }, /** - * Lookup435: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup445: cumulus_pallet_xcmp_queue::InboundChannelDetails */ CumulusPalletXcmpQueueInboundChannelDetails: { sender: "u32", @@ -4267,19 +4540,19 @@ export default { messageMetadata: "Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>", }, /** - * Lookup436: cumulus_pallet_xcmp_queue::InboundState + * Lookup446: cumulus_pallet_xcmp_queue::InboundState */ CumulusPalletXcmpQueueInboundState: { _enum: ["Ok", "Suspended"], }, /** - * Lookup439: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup449: polkadot_parachain::primitives::XcmpMessageFormat */ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ["ConcatenatedVersionedXcm", "ConcatenatedEncodedBlob", "Signals"], }, /** - * Lookup442: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup452: cumulus_pallet_xcmp_queue::OutboundChannelDetails */ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: "u32", @@ -4289,13 +4562,13 @@ export default { lastIndex: "u16", }, /** - * Lookup443: cumulus_pallet_xcmp_queue::OutboundState + * Lookup453: cumulus_pallet_xcmp_queue::OutboundState */ CumulusPalletXcmpQueueOutboundState: { _enum: ["Ok", "Suspended"], }, /** - * Lookup445: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup455: cumulus_pallet_xcmp_queue::QueueConfigData */ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: "u32", @@ -4306,23 +4579,23 @@ export default { xcmpMaxIndividualWeight: "u64", }, /** - * Lookup447: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup457: cumulus_pallet_xcmp_queue::pallet::Error */ CumulusPalletXcmpQueueError: { _enum: ["FailedToSend", "BadXcmOrigin", "BadXcm", "BadOverweightIndex", "WeightOverLimit"], }, /** - * Lookup448: cumulus_pallet_xcm::pallet::Error + * Lookup458: cumulus_pallet_xcm::pallet::Error */ CumulusPalletXcmError: "Null", /** - * Lookup449: cumulus_pallet_dmp_queue::ConfigData + * Lookup459: cumulus_pallet_dmp_queue::ConfigData */ CumulusPalletDmpQueueConfigData: { maxIndividual: "u64", }, /** - * Lookup450: cumulus_pallet_dmp_queue::PageIndexData + * Lookup460: cumulus_pallet_dmp_queue::PageIndexData */ CumulusPalletDmpQueuePageIndexData: { beginUsed: "u32", @@ -4330,13 +4603,13 @@ export default { overweightCount: "u64", }, /** - * Lookup453: cumulus_pallet_dmp_queue::pallet::Error + * Lookup463: cumulus_pallet_dmp_queue::pallet::Error */ CumulusPalletDmpQueueError: { _enum: ["Unknown", "OverLimit"], }, /** - * Lookup454: pallet_xcm::pallet::QueryStatus + * Lookup464: pallet_xcm::pallet::QueryStatus */ PalletXcmQueryStatus: { _enum: { @@ -4356,7 +4629,7 @@ export default { }, }, /** - * Lookup457: xcm::VersionedResponse + * Lookup467: xcm::VersionedResponse */ XcmVersionedResponse: { _enum: { @@ -4366,7 +4639,7 @@ export default { }, }, /** - * Lookup463: pallet_xcm::pallet::VersionMigrationStage + * Lookup473: pallet_xcm::pallet::VersionMigrationStage */ PalletXcmVersionMigrationStage: { _enum: { @@ -4377,7 +4650,7 @@ export default { }, }, /** - * Lookup464: pallet_xcm::pallet::Error + * Lookup474: pallet_xcm::pallet::Error */ PalletXcmError: { _enum: [ @@ -4397,7 +4670,7 @@ export default { ], }, /** - * Lookup465: pallet_assets::types::AssetDetails */ PalletAssetsAssetDetails: { @@ -4415,7 +4688,7 @@ export default { isFrozen: "bool", }, /** - * Lookup467: pallet_assets::types::AssetAccount + * Lookup477: pallet_assets::types::AssetAccount */ PalletAssetsAssetAccount: { balance: "u128", @@ -4424,7 +4697,7 @@ export default { extra: "Null", }, /** - * Lookup468: pallet_assets::types::ExistenceReason + * Lookup478: pallet_assets::types::ExistenceReason */ PalletAssetsExistenceReason: { _enum: { @@ -4435,14 +4708,14 @@ export default { }, }, /** - * Lookup470: pallet_assets::types::Approval + * Lookup480: pallet_assets::types::Approval */ PalletAssetsApproval: { amount: "u128", deposit: "u128", }, /** - * Lookup471: pallet_assets::types::AssetMetadata> */ PalletAssetsAssetMetadata: { @@ -4453,7 +4726,7 @@ export default { isFrozen: "bool", }, /** - * Lookup473: pallet_assets::pallet::Error + * Lookup483: pallet_assets::pallet::Error */ PalletAssetsError: { _enum: [ @@ -4475,7 +4748,7 @@ export default { ], }, /** - * Lookup474: orml_xtokens::module::Error + * Lookup484: orml_xtokens::module::Error */ OrmlXtokensModuleError: { _enum: [ @@ -4497,17 +4770,18 @@ export default { "AssetIndexNonExistent", "FeeNotEnough", "NotSupportedMultiLocation", + "MinXcmFeeNotDefined", ], }, /** - * Lookup475: pallet_asset_manager::pallet::AssetInfo + * Lookup485: pallet_asset_manager::pallet::AssetInfo */ PalletAssetManagerAssetInfo: { creator: "AccountId20", deposit: "u128", }, /** - * Lookup477: pallet_asset_manager::pallet::Error + * Lookup487: pallet_asset_manager::pallet::Error */ PalletAssetManagerError: { _enum: [ @@ -4522,9 +4796,9 @@ export default { ], }, /** - * Lookup478: xcm_transactor::pallet::Error + * Lookup488: pallet_xcm_transactor::pallet::Error */ - XcmTransactorError: { + PalletXcmTransactorError: { _enum: [ "IndexAlreadyClaimed", "UnclaimedIndex", @@ -4546,38 +4820,138 @@ export default { "BadVersion", "MaxWeightTransactReached", "UnableToWithdrawAsset", + "FeePerSecondNotSet", + "SignedTransactNotAllowedForDestination", + "FailedMultiLocationToJunction", + ], + }, + /** + * Lookup490: + * pallet_moonbeam_orbiters::types::CollatorPoolInfo[account::AccountId20](account::AccountId20) + */ + PalletMoonbeamOrbitersCollatorPoolInfo: { + orbiters: "Vec", + maybeCurrentOrbiter: "Option", + nextOrbiter: "u32", + }, + /** + * Lookup492: + * pallet_moonbeam_orbiters::types::CurrentOrbiter[account::AccountId20](account::AccountId20) + */ + PalletMoonbeamOrbitersCurrentOrbiter: { + accountId: "AccountId20", + removed: "bool", + }, + /** + * Lookup493: pallet_moonbeam_orbiters::pallet::Error + */ + PalletMoonbeamOrbitersError: { + _enum: [ + "CollatorAlreadyAdded", + "CollatorNotFound", + "CollatorPoolTooLarge", + "CollatorsPoolCountTooLow", + "MinOrbiterDepositNotSet", + "OrbiterAlreadyInPool", + "OrbiterDepositNotFound", + "OrbiterNotFound", + "OrbiterStillInAPool", + ], + }, + /** + * Lookup494: pallet_randomness::types::RequestState + */ + PalletRandomnessRequestState: { + request: "PalletRandomnessRequest", + deposit: "u128", + }, + /** + * Lookup495: pallet_randomness::types::Request> + */ + PalletRandomnessRequest: { + refundAddress: "H160", + contractAddress: "H160", + fee: "u128", + gasLimit: "u64", + numWords: "u8", + salt: "H256", + info: "PalletRandomnessRequestInfo", + }, + /** + * Lookup496: pallet_randomness::types::RequestInfo + */ + PalletRandomnessRequestInfo: { + _enum: { + BabeEpoch: "(u64,u64)", + Local: "(u32,u32)", + }, + }, + /** + * Lookup497: pallet_randomness::types::RequestType + */ + PalletRandomnessRequestType: { + _enum: { + BabeEpoch: "u64", + Local: "u32", + }, + }, + /** + * Lookup498: pallet_randomness::types::RandomnessResult + */ + PalletRandomnessRandomnessResult: { + randomness: "Option", + requestCount: "u64", + }, + /** + * Lookup499: pallet_randomness::pallet::Error + */ + PalletRandomnessError: { + _enum: [ + "RequestCounterOverflowed", + "RequestFeeOverflowed", + "MustRequestAtLeastOneWord", + "CannotRequestMoreWordsThanMax", + "CannotRequestRandomnessAfterMaxDelay", + "CannotRequestRandomnessBeforeMinDelay", + "RequestDNE", + "RequestCannotYetBeFulfilled", + "OnlyRequesterCanIncreaseFee", + "RequestHasNotExpired", + "RandomnessResultDNE", + "RandomnessResultNotFilled", ], }, /** - * Lookup481: account::EthereumSignature + * Lookup501: account::EthereumSignature */ AccountEthereumSignature: "SpCoreEcdsaSignature", /** - * Lookup483: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup503: frame_system::extensions::check_spec_version::CheckSpecVersion */ FrameSystemExtensionsCheckSpecVersion: "Null", /** - * Lookup484: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup504: frame_system::extensions::check_tx_version::CheckTxVersion */ FrameSystemExtensionsCheckTxVersion: "Null", /** - * Lookup485: frame_system::extensions::check_genesis::CheckGenesis + * Lookup505: frame_system::extensions::check_genesis::CheckGenesis */ FrameSystemExtensionsCheckGenesis: "Null", /** - * Lookup488: frame_system::extensions::check_nonce::CheckNonce + * Lookup508: frame_system::extensions::check_nonce::CheckNonce */ FrameSystemExtensionsCheckNonce: "Compact", /** - * Lookup489: frame_system::extensions::check_weight::CheckWeight + * Lookup509: frame_system::extensions::check_weight::CheckWeight */ FrameSystemExtensionsCheckWeight: "Null", /** - * Lookup490: pallet_transaction_payment::ChargeTransactionPayment + * Lookup510: pallet_transaction_payment::ChargeTransactionPayment */ PalletTransactionPaymentChargeTransactionPayment: "Compact", /** - * Lookup492: moonbase_runtime::Runtime + * Lookup512: moonbase_runtime::Runtime */ MoonbaseRuntimeRuntime: "Null", }; diff --git a/typescript-api/src/moonbase/interfaces/moon/definitions.ts b/typescript-api/src/moonbase/interfaces/moon/definitions.ts new file mode 100644 index 0000000000..d368c8f2b0 --- /dev/null +++ b/typescript-api/src/moonbase/interfaces/moon/definitions.ts @@ -0,0 +1,15 @@ +export default { + types: {}, + rpc: { + isBlockFinalized: { + description: "Returns whether an Ethereum block is finalized", + params: [{ name: "blockHash", type: "Hash" }], + type: "bool", + }, + isTxFinalized: { + description: "Returns whether an Ethereum transaction is finalized", + params: [{ name: "txHash", type: "Hash" }], + type: "bool", + }, + }, +}; diff --git a/typescript-api/src/moonbase/interfaces/empty/index.ts b/typescript-api/src/moonbase/interfaces/moon/index.ts similarity index 100% rename from typescript-api/src/moonbase/interfaces/empty/index.ts rename to typescript-api/src/moonbase/interfaces/moon/index.ts diff --git a/typescript-api/src/moonbase/interfaces/empty/types.ts b/typescript-api/src/moonbase/interfaces/moon/types.ts similarity index 70% rename from typescript-api/src/moonbase/interfaces/empty/types.ts rename to typescript-api/src/moonbase/interfaces/moon/types.ts index 878e1e9ec1..920940a1ea 100644 --- a/typescript-api/src/moonbase/interfaces/empty/types.ts +++ b/typescript-api/src/moonbase/interfaces/moon/types.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export type PHANTOM_EMPTY = "empty"; +export type PHANTOM_MOON = "moon"; diff --git a/typescript-api/src/moonbase/interfaces/registry.ts b/typescript-api/src/moonbase/interfaces/registry.ts index 25c94b58bd..248dca2493 100644 --- a/typescript-api/src/moonbase/interfaces/registry.ts +++ b/typescript-api/src/moonbase/interfaces/registry.ts @@ -3,7 +3,6 @@ import type { AccountEthereumSignature, - BTreeSet, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, @@ -57,7 +56,6 @@ import type { FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, - FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, @@ -142,6 +140,8 @@ import type { PalletEthereumError, PalletEthereumEvent, PalletEthereumRawOrigin, + PalletEthereumXcmCall, + PalletEthereumXcmRawOrigin, PalletEvmCall, PalletEvmError, PalletEvmEvent, @@ -158,11 +158,49 @@ import type { PalletMaintenanceModeError, PalletMaintenanceModeEvent, PalletMigrationsEvent, + PalletMoonbeamOrbitersCall, + PalletMoonbeamOrbitersCollatorPoolInfo, + PalletMoonbeamOrbitersCurrentOrbiter, + PalletMoonbeamOrbitersError, + PalletMoonbeamOrbitersEvent, + PalletParachainStakingBond, + PalletParachainStakingCall, + PalletParachainStakingCandidateBondLessRequest, + PalletParachainStakingCandidateMetadata, + PalletParachainStakingCapacityStatus, + PalletParachainStakingCollator2, + PalletParachainStakingCollatorCandidate, + PalletParachainStakingCollatorSnapshot, + PalletParachainStakingCollatorStatus, + PalletParachainStakingDelayedPayout, + PalletParachainStakingDelegationRequestsCancelledScheduledRequest, + PalletParachainStakingDelegationRequestsDelegationAction, + PalletParachainStakingDelegationRequestsScheduledRequest, + PalletParachainStakingDelegations, + PalletParachainStakingDelegator, + PalletParachainStakingDelegatorAdded, + PalletParachainStakingDelegatorStatus, + PalletParachainStakingError, + PalletParachainStakingEvent, + PalletParachainStakingInflationInflationInfo, + PalletParachainStakingNominator2, + PalletParachainStakingParachainBondConfig, + PalletParachainStakingRoundInfo, + PalletParachainStakingSetOrderedSetAccountId20, + PalletParachainStakingSetOrderedSetBond, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, PalletProxyEvent, PalletProxyProxyDefinition, + PalletRandomnessCall, + PalletRandomnessError, + PalletRandomnessEvent, + PalletRandomnessRandomnessResult, + PalletRandomnessRequest, + PalletRandomnessRequestInfo, + PalletRandomnessRequestState, + PalletRandomnessRequestType, PalletSchedulerCall, PalletSchedulerError, PalletSchedulerEvent, @@ -185,42 +223,20 @@ import type { PalletXcmEvent, PalletXcmOrigin, PalletXcmQueryStatus, + PalletXcmTransactorCall, + PalletXcmTransactorError, + PalletXcmTransactorEvent, + PalletXcmTransactorRemoteTransactInfoWithMaxWeight, PalletXcmVersionMigrationStage, - ParachainStakingBond, - ParachainStakingCall, - ParachainStakingCandidateBondLessRequest, - ParachainStakingCandidateMetadata, - ParachainStakingCapacityStatus, - ParachainStakingCollator2, - ParachainStakingCollatorCandidate, - ParachainStakingCollatorSnapshot, - ParachainStakingCollatorStatus, - ParachainStakingDelayedPayout, - ParachainStakingDelegationChange, - ParachainStakingDelegationRequest, - ParachainStakingDelegations, - ParachainStakingDelegator, - ParachainStakingDelegatorAdded, - ParachainStakingDelegatorStatus, - ParachainStakingError, - ParachainStakingEvent, - ParachainStakingInflationInflationInfo, - ParachainStakingInflationRangePerbill, - ParachainStakingInflationRangeU128, - ParachainStakingNominator2, - ParachainStakingParachainBondConfig, - ParachainStakingPendingDelegationRequests, - ParachainStakingRoundInfo, - ParachainStakingSetOrderedSetAccountId20, - ParachainStakingSetOrderedSetBond, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, - PolkadotPrimitivesV1AbridgedHostConfiguration, - PolkadotPrimitivesV1AbridgedHrmpChannel, - PolkadotPrimitivesV1PersistedValidationData, - PolkadotPrimitivesV1UpgradeRestriction, + PolkadotPrimitivesV2AbridgedHostConfiguration, + PolkadotPrimitivesV2AbridgedHrmpChannel, + PolkadotPrimitivesV2PersistedValidationData, + PolkadotPrimitivesV2UpgradeRestriction, + SessionKeysPrimitivesVrfVrfCryptoPublic, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, @@ -233,13 +249,14 @@ import type { SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, + SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, XcmDoubleEncoded, - XcmTransactorCall, - XcmTransactorError, - XcmTransactorEvent, - XcmTransactorRemoteTransactInfoWithMaxWeight, + XcmPrimitivesEthereumXcmEthereumXcmFee, + XcmPrimitivesEthereumXcmEthereumXcmTransaction, + XcmPrimitivesEthereumXcmEthereumXcmTransactionV1, + XcmPrimitivesEthereumXcmManualEthereumXcmFee, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, @@ -280,7 +297,6 @@ import type { declare module "@polkadot/types/types/registry" { export interface InterfaceTypes { AccountEthereumSignature: AccountEthereumSignature; - BTreeSet: BTreeSet; CumulusPalletDmpQueueCall: CumulusPalletDmpQueueCall; CumulusPalletDmpQueueConfigData: CumulusPalletDmpQueueConfigData; CumulusPalletDmpQueueError: CumulusPalletDmpQueueError; @@ -334,7 +350,6 @@ declare module "@polkadot/types/types/registry" { FrameSupportWeightsPerDispatchClassU64: FrameSupportWeightsPerDispatchClassU64; FrameSupportWeightsPerDispatchClassWeightsPerClass: FrameSupportWeightsPerDispatchClassWeightsPerClass; FrameSupportWeightsRuntimeDbWeight: FrameSupportWeightsRuntimeDbWeight; - FrameSupportWeightsWeightToFeeCoefficient: FrameSupportWeightsWeightToFeeCoefficient; FrameSystemAccountInfo: FrameSystemAccountInfo; FrameSystemCall: FrameSystemCall; FrameSystemError: FrameSystemError; @@ -419,6 +434,8 @@ declare module "@polkadot/types/types/registry" { PalletEthereumError: PalletEthereumError; PalletEthereumEvent: PalletEthereumEvent; PalletEthereumRawOrigin: PalletEthereumRawOrigin; + PalletEthereumXcmCall: PalletEthereumXcmCall; + PalletEthereumXcmRawOrigin: PalletEthereumXcmRawOrigin; PalletEvmCall: PalletEvmCall; PalletEvmError: PalletEvmError; PalletEvmEvent: PalletEvmEvent; @@ -435,11 +452,49 @@ declare module "@polkadot/types/types/registry" { PalletMaintenanceModeError: PalletMaintenanceModeError; PalletMaintenanceModeEvent: PalletMaintenanceModeEvent; PalletMigrationsEvent: PalletMigrationsEvent; + PalletMoonbeamOrbitersCall: PalletMoonbeamOrbitersCall; + PalletMoonbeamOrbitersCollatorPoolInfo: PalletMoonbeamOrbitersCollatorPoolInfo; + PalletMoonbeamOrbitersCurrentOrbiter: PalletMoonbeamOrbitersCurrentOrbiter; + PalletMoonbeamOrbitersError: PalletMoonbeamOrbitersError; + PalletMoonbeamOrbitersEvent: PalletMoonbeamOrbitersEvent; + PalletParachainStakingBond: PalletParachainStakingBond; + PalletParachainStakingCall: PalletParachainStakingCall; + PalletParachainStakingCandidateBondLessRequest: PalletParachainStakingCandidateBondLessRequest; + PalletParachainStakingCandidateMetadata: PalletParachainStakingCandidateMetadata; + PalletParachainStakingCapacityStatus: PalletParachainStakingCapacityStatus; + PalletParachainStakingCollator2: PalletParachainStakingCollator2; + PalletParachainStakingCollatorCandidate: PalletParachainStakingCollatorCandidate; + PalletParachainStakingCollatorSnapshot: PalletParachainStakingCollatorSnapshot; + PalletParachainStakingCollatorStatus: PalletParachainStakingCollatorStatus; + PalletParachainStakingDelayedPayout: PalletParachainStakingDelayedPayout; + PalletParachainStakingDelegationRequestsCancelledScheduledRequest: PalletParachainStakingDelegationRequestsCancelledScheduledRequest; + PalletParachainStakingDelegationRequestsDelegationAction: PalletParachainStakingDelegationRequestsDelegationAction; + PalletParachainStakingDelegationRequestsScheduledRequest: PalletParachainStakingDelegationRequestsScheduledRequest; + PalletParachainStakingDelegations: PalletParachainStakingDelegations; + PalletParachainStakingDelegator: PalletParachainStakingDelegator; + PalletParachainStakingDelegatorAdded: PalletParachainStakingDelegatorAdded; + PalletParachainStakingDelegatorStatus: PalletParachainStakingDelegatorStatus; + PalletParachainStakingError: PalletParachainStakingError; + PalletParachainStakingEvent: PalletParachainStakingEvent; + PalletParachainStakingInflationInflationInfo: PalletParachainStakingInflationInflationInfo; + PalletParachainStakingNominator2: PalletParachainStakingNominator2; + PalletParachainStakingParachainBondConfig: PalletParachainStakingParachainBondConfig; + PalletParachainStakingRoundInfo: PalletParachainStakingRoundInfo; + PalletParachainStakingSetOrderedSetAccountId20: PalletParachainStakingSetOrderedSetAccountId20; + PalletParachainStakingSetOrderedSetBond: PalletParachainStakingSetOrderedSetBond; PalletProxyAnnouncement: PalletProxyAnnouncement; PalletProxyCall: PalletProxyCall; PalletProxyError: PalletProxyError; PalletProxyEvent: PalletProxyEvent; PalletProxyProxyDefinition: PalletProxyProxyDefinition; + PalletRandomnessCall: PalletRandomnessCall; + PalletRandomnessError: PalletRandomnessError; + PalletRandomnessEvent: PalletRandomnessEvent; + PalletRandomnessRandomnessResult: PalletRandomnessRandomnessResult; + PalletRandomnessRequest: PalletRandomnessRequest; + PalletRandomnessRequestInfo: PalletRandomnessRequestInfo; + PalletRandomnessRequestState: PalletRandomnessRequestState; + PalletRandomnessRequestType: PalletRandomnessRequestType; PalletSchedulerCall: PalletSchedulerCall; PalletSchedulerError: PalletSchedulerError; PalletSchedulerEvent: PalletSchedulerEvent; @@ -462,42 +517,20 @@ declare module "@polkadot/types/types/registry" { PalletXcmEvent: PalletXcmEvent; PalletXcmOrigin: PalletXcmOrigin; PalletXcmQueryStatus: PalletXcmQueryStatus; + PalletXcmTransactorCall: PalletXcmTransactorCall; + PalletXcmTransactorError: PalletXcmTransactorError; + PalletXcmTransactorEvent: PalletXcmTransactorEvent; + PalletXcmTransactorRemoteTransactInfoWithMaxWeight: PalletXcmTransactorRemoteTransactInfoWithMaxWeight; PalletXcmVersionMigrationStage: PalletXcmVersionMigrationStage; - ParachainStakingBond: ParachainStakingBond; - ParachainStakingCall: ParachainStakingCall; - ParachainStakingCandidateBondLessRequest: ParachainStakingCandidateBondLessRequest; - ParachainStakingCandidateMetadata: ParachainStakingCandidateMetadata; - ParachainStakingCapacityStatus: ParachainStakingCapacityStatus; - ParachainStakingCollator2: ParachainStakingCollator2; - ParachainStakingCollatorCandidate: ParachainStakingCollatorCandidate; - ParachainStakingCollatorSnapshot: ParachainStakingCollatorSnapshot; - ParachainStakingCollatorStatus: ParachainStakingCollatorStatus; - ParachainStakingDelayedPayout: ParachainStakingDelayedPayout; - ParachainStakingDelegationChange: ParachainStakingDelegationChange; - ParachainStakingDelegationRequest: ParachainStakingDelegationRequest; - ParachainStakingDelegations: ParachainStakingDelegations; - ParachainStakingDelegator: ParachainStakingDelegator; - ParachainStakingDelegatorAdded: ParachainStakingDelegatorAdded; - ParachainStakingDelegatorStatus: ParachainStakingDelegatorStatus; - ParachainStakingError: ParachainStakingError; - ParachainStakingEvent: ParachainStakingEvent; - ParachainStakingInflationInflationInfo: ParachainStakingInflationInflationInfo; - ParachainStakingInflationRangePerbill: ParachainStakingInflationRangePerbill; - ParachainStakingInflationRangeU128: ParachainStakingInflationRangeU128; - ParachainStakingNominator2: ParachainStakingNominator2; - ParachainStakingParachainBondConfig: ParachainStakingParachainBondConfig; - ParachainStakingPendingDelegationRequests: ParachainStakingPendingDelegationRequests; - ParachainStakingRoundInfo: ParachainStakingRoundInfo; - ParachainStakingSetOrderedSetAccountId20: ParachainStakingSetOrderedSetAccountId20; - ParachainStakingSetOrderedSetBond: ParachainStakingSetOrderedSetBond; PolkadotCorePrimitivesInboundDownwardMessage: PolkadotCorePrimitivesInboundDownwardMessage; PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage; PolkadotCorePrimitivesOutboundHrmpMessage: PolkadotCorePrimitivesOutboundHrmpMessage; PolkadotParachainPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesXcmpMessageFormat; - PolkadotPrimitivesV1AbridgedHostConfiguration: PolkadotPrimitivesV1AbridgedHostConfiguration; - PolkadotPrimitivesV1AbridgedHrmpChannel: PolkadotPrimitivesV1AbridgedHrmpChannel; - PolkadotPrimitivesV1PersistedValidationData: PolkadotPrimitivesV1PersistedValidationData; - PolkadotPrimitivesV1UpgradeRestriction: PolkadotPrimitivesV1UpgradeRestriction; + PolkadotPrimitivesV2AbridgedHostConfiguration: PolkadotPrimitivesV2AbridgedHostConfiguration; + PolkadotPrimitivesV2AbridgedHrmpChannel: PolkadotPrimitivesV2AbridgedHrmpChannel; + PolkadotPrimitivesV2PersistedValidationData: PolkadotPrimitivesV2PersistedValidationData; + PolkadotPrimitivesV2UpgradeRestriction: PolkadotPrimitivesV2UpgradeRestriction; + SessionKeysPrimitivesVrfVrfCryptoPublic: SessionKeysPrimitivesVrfVrfCryptoPublic; SpCoreEcdsaSignature: SpCoreEcdsaSignature; SpCoreEd25519Signature: SpCoreEd25519Signature; SpCoreSr25519Public: SpCoreSr25519Public; @@ -510,13 +543,14 @@ declare module "@polkadot/types/types/registry" { SpRuntimeModuleError: SpRuntimeModuleError; SpRuntimeMultiSignature: SpRuntimeMultiSignature; SpRuntimeTokenError: SpRuntimeTokenError; + SpRuntimeTransactionalError: SpRuntimeTransactionalError; SpTrieStorageProof: SpTrieStorageProof; SpVersionRuntimeVersion: SpVersionRuntimeVersion; XcmDoubleEncoded: XcmDoubleEncoded; - XcmTransactorCall: XcmTransactorCall; - XcmTransactorError: XcmTransactorError; - XcmTransactorEvent: XcmTransactorEvent; - XcmTransactorRemoteTransactInfoWithMaxWeight: XcmTransactorRemoteTransactInfoWithMaxWeight; + XcmPrimitivesEthereumXcmEthereumXcmFee: XcmPrimitivesEthereumXcmEthereumXcmFee; + XcmPrimitivesEthereumXcmEthereumXcmTransaction: XcmPrimitivesEthereumXcmEthereumXcmTransaction; + XcmPrimitivesEthereumXcmEthereumXcmTransactionV1: XcmPrimitivesEthereumXcmEthereumXcmTransactionV1; + XcmPrimitivesEthereumXcmManualEthereumXcmFee: XcmPrimitivesEthereumXcmManualEthereumXcmFee; XcmV0Junction: XcmV0Junction; XcmV0JunctionBodyId: XcmV0JunctionBodyId; XcmV0JunctionBodyPart: XcmV0JunctionBodyPart; diff --git a/typescript-api/src/moonbase/interfaces/types-lookup.ts b/typescript-api/src/moonbase/interfaces/types-lookup.ts index 3c8a908e3b..c10cb7492f 100644 --- a/typescript-api/src/moonbase/interfaces/types-lookup.ts +++ b/typescript-api/src/moonbase/interfaces/types-lookup.ts @@ -5,7 +5,7 @@ declare module "@polkadot/types/lookup" { import type { Data } from "@polkadot/types"; import type { BTreeMap, - BTreeSet as BTreeSetType, + BTreeSet, Bytes, Compact, Enum, @@ -180,6 +180,8 @@ declare module "@polkadot/types/lookup" { readonly asToken: SpRuntimeTokenError; readonly isArithmetic: boolean; readonly asArithmetic: SpRuntimeArithmeticError; + readonly isTransactional: boolean; + readonly asTransactional: SpRuntimeTransactionalError; readonly type: | "Other" | "CannotLookup" @@ -189,7 +191,8 @@ declare module "@polkadot/types/lookup" { | "NoProviders" | "TooManyConsumers" | "Token" - | "Arithmetic"; + | "Arithmetic" + | "Transactional"; } /** @@ -197,7 +200,7 @@ declare module "@polkadot/types/lookup" { */ export interface SpRuntimeModuleError extends Struct { readonly index: u8; - readonly error: u8; + readonly error: U8aFixed; } /** @@ -232,7 +235,16 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletUtilityEvent (27) + * @name SpRuntimeTransactionalError (27) + */ + export interface SpRuntimeTransactionalError extends Enum { + readonly isLimitReached: boolean; + readonly isNoLayer: boolean; + readonly type: "LimitReached" | "NoLayer"; + } + + /** + * @name PalletUtilityEvent (28) */ export interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; @@ -241,16 +253,27 @@ declare module "@polkadot/types/lookup" { readonly error: SpRuntimeDispatchError; } & Struct; readonly isBatchCompleted: boolean; + readonly isBatchCompletedWithErrors: boolean; readonly isItemCompleted: boolean; + readonly isItemFailed: boolean; + readonly asItemFailed: { + readonly error: SpRuntimeDispatchError; + } & Struct; readonly isDispatchedAs: boolean; readonly asDispatchedAs: { readonly result: Result; } & Struct; - readonly type: "BatchInterrupted" | "BatchCompleted" | "ItemCompleted" | "DispatchedAs"; + readonly type: + | "BatchInterrupted" + | "BatchCompleted" + | "BatchCompletedWithErrors" + | "ItemCompleted" + | "ItemFailed" + | "DispatchedAs"; } /** - * @name PalletBalancesEvent (30) + * @name PalletBalancesEvent (31) */ export interface PalletBalancesEvent extends Enum { readonly isEndowed: boolean; @@ -321,7 +344,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportTokensMiscBalanceStatus (31) + * @name FrameSupportTokensMiscBalanceStatus (32) */ export interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; @@ -330,7 +353,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSudoEvent (32) + * @name PalletSudoEvent (33) */ export interface PalletSudoEvent extends Enum { readonly isSudid: boolean; @@ -349,19 +372,28 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemEvent (34) + * @name CumulusPalletParachainSystemEvent (35) */ export interface CumulusPalletParachainSystemEvent extends Enum { readonly isValidationFunctionStored: boolean; readonly isValidationFunctionApplied: boolean; - readonly asValidationFunctionApplied: u32; + readonly asValidationFunctionApplied: { + readonly relayChainBlockNum: u32; + } & Struct; readonly isValidationFunctionDiscarded: boolean; readonly isUpgradeAuthorized: boolean; - readonly asUpgradeAuthorized: H256; + readonly asUpgradeAuthorized: { + readonly codeHash: H256; + } & Struct; readonly isDownwardMessagesReceived: boolean; - readonly asDownwardMessagesReceived: u32; + readonly asDownwardMessagesReceived: { + readonly count: u32; + } & Struct; readonly isDownwardMessagesProcessed: boolean; - readonly asDownwardMessagesProcessed: ITuple<[u64, H256]>; + readonly asDownwardMessagesProcessed: { + readonly weightUsed: u64; + readonly dmqHead: H256; + } & Struct; readonly type: | "ValidationFunctionStored" | "ValidationFunctionApplied" @@ -372,7 +404,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmEvent (35) + * @name PalletEvmEvent (36) */ export interface PalletEvmEvent extends Enum { readonly isLog: boolean; @@ -400,7 +432,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumLog (36) + * @name EthereumLog (37) */ export interface EthereumLog extends Struct { readonly address: H160; @@ -409,7 +441,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumEvent (41) + * @name PalletEthereumEvent (42) */ export interface PalletEthereumEvent extends Enum { readonly isExecuted: boolean; @@ -418,7 +450,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitReason (42) + * @name EvmCoreErrorExitReason (43) */ export interface EvmCoreErrorExitReason extends Enum { readonly isSucceed: boolean; @@ -433,7 +465,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitSucceed (43) + * @name EvmCoreErrorExitSucceed (44) */ export interface EvmCoreErrorExitSucceed extends Enum { readonly isStopped: boolean; @@ -443,7 +475,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitError (44) + * @name EvmCoreErrorExitError (45) */ export interface EvmCoreErrorExitError extends Enum { readonly isStackUnderflow: boolean; @@ -462,6 +494,7 @@ declare module "@polkadot/types/lookup" { readonly isOther: boolean; readonly asOther: Text; readonly isInvalidCode: boolean; + readonly asInvalidCode: u8; readonly type: | "StackUnderflow" | "StackOverflow" @@ -481,7 +514,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitRevert (47) + * @name EvmCoreErrorExitRevert (49) */ export interface EvmCoreErrorExitRevert extends Enum { readonly isReverted: boolean; @@ -489,7 +522,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitFatal (48) + * @name EvmCoreErrorExitFatal (50) */ export interface EvmCoreErrorExitFatal extends Enum { readonly isNotSupported: boolean; @@ -502,9 +535,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingEvent (49) + * @name PalletParachainStakingEvent (51) */ - export interface ParachainStakingEvent extends Enum { + export interface PalletParachainStakingEvent extends Enum { readonly isNewRound: boolean; readonly asNewRound: { readonly startingBlock: u32; @@ -630,14 +663,15 @@ declare module "@polkadot/types/lookup" { readonly isCancelledDelegationRequest: boolean; readonly asCancelledDelegationRequest: { readonly delegator: AccountId20; - readonly cancelledRequest: ParachainStakingDelegationRequest; + readonly cancelledRequest: PalletParachainStakingDelegationRequestsCancelledScheduledRequest; + readonly collator: AccountId20; } & Struct; readonly isDelegation: boolean; readonly asDelegation: { readonly delegator: AccountId20; readonly lockedAmount: u128; readonly candidate: AccountId20; - readonly delegatorPosition: ParachainStakingDelegatorAdded; + readonly delegatorPosition: PalletParachainStakingDelegatorAdded; } & Struct; readonly isDelegatorLeftCandidate: boolean; readonly asDelegatorLeftCandidate: { @@ -738,28 +772,29 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegationRequest (51) + * @name PalletParachainStakingDelegationRequestsCancelledScheduledRequest (53) */ - export interface ParachainStakingDelegationRequest extends Struct { - readonly collator: AccountId20; - readonly amount: u128; + export interface PalletParachainStakingDelegationRequestsCancelledScheduledRequest + extends Struct { readonly whenExecutable: u32; - readonly action: ParachainStakingDelegationChange; + readonly action: PalletParachainStakingDelegationRequestsDelegationAction; } /** - * @name ParachainStakingDelegationChange (52) + * @name PalletParachainStakingDelegationRequestsDelegationAction (54) */ - export interface ParachainStakingDelegationChange extends Enum { + export interface PalletParachainStakingDelegationRequestsDelegationAction extends Enum { readonly isRevoke: boolean; + readonly asRevoke: u128; readonly isDecrease: boolean; + readonly asDecrease: u128; readonly type: "Revoke" | "Decrease"; } /** - * @name ParachainStakingDelegatorAdded (53) + * @name PalletParachainStakingDelegatorAdded (55) */ - export interface ParachainStakingDelegatorAdded extends Enum { + export interface PalletParachainStakingDelegatorAdded extends Enum { readonly isAddedToTop: boolean; readonly asAddedToTop: { readonly newTotal: u128; @@ -769,7 +804,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerEvent (56) + * @name PalletSchedulerEvent (58) */ export interface PalletSchedulerEvent extends Enum { readonly isScheduled: boolean; @@ -798,7 +833,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportScheduleLookupError (59) + * @name FrameSupportScheduleLookupError (61) */ export interface FrameSupportScheduleLookupError extends Enum { readonly isUnknown: boolean; @@ -807,7 +842,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyEvent (60) + * @name PalletDemocracyEvent (62) */ export interface PalletDemocracyEvent extends Enum { readonly isProposed: boolean; @@ -926,7 +961,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteThreshold (62) + * @name PalletDemocracyVoteThreshold (64) */ export interface PalletDemocracyVoteThreshold extends Enum { readonly isSuperMajorityApprove: boolean; @@ -936,7 +971,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteAccountVote (63) + * @name PalletDemocracyVoteAccountVote (65) */ export interface PalletDemocracyVoteAccountVote extends Enum { readonly isStandard: boolean; @@ -953,7 +988,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveEvent (65) + * @name PalletCollectiveEvent (67) */ export interface PalletCollectiveEvent extends Enum { readonly isProposed: boolean; @@ -1006,7 +1041,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryEvent (67) + * @name PalletTreasuryEvent (69) */ export interface PalletTreasuryEvent extends Enum { readonly isProposed: boolean; @@ -1051,16 +1086,16 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorSlotFilterEvent (68) + * @name PalletAuthorSlotFilterEvent (70) */ export interface PalletAuthorSlotFilterEvent extends Enum { readonly isEligibleUpdated: boolean; - readonly asEligibleUpdated: Percent; + readonly asEligibleUpdated: u32; readonly type: "EligibleUpdated"; } /** - * @name PalletCrowdloanRewardsEvent (69) + * @name PalletCrowdloanRewardsEvent (72) */ export interface PalletCrowdloanRewardsEvent extends Enum { readonly isInitialPaymentMade: boolean; @@ -1087,47 +1122,47 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorMappingEvent (70) + * @name PalletAuthorMappingEvent (73) */ export interface PalletAuthorMappingEvent extends Enum { - readonly isAuthorRegistered: boolean; - readonly asAuthorRegistered: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRegistered: boolean; + readonly asKeysRegistered: { + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly isAuthorDeRegistered: boolean; - readonly asAuthorDeRegistered: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; - } & Struct; - readonly isAuthorRotated: boolean; - readonly asAuthorRotated: { - readonly newAuthorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRemoved: boolean; + readonly asKeysRemoved: { + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly isDefunctAuthorBusted: boolean; - readonly asDefunctAuthorBusted: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRotated: boolean; + readonly asKeysRotated: { + readonly newNimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly type: - | "AuthorRegistered" - | "AuthorDeRegistered" - | "AuthorRotated" - | "DefunctAuthorBusted"; + readonly type: "KeysRegistered" | "KeysRemoved" | "KeysRotated"; } /** - * @name NimbusPrimitivesNimbusCryptoPublic (71) + * @name NimbusPrimitivesNimbusCryptoPublic (74) */ export interface NimbusPrimitivesNimbusCryptoPublic extends SpCoreSr25519Public {} /** - * @name SpCoreSr25519Public (72) + * @name SpCoreSr25519Public (75) */ export interface SpCoreSr25519Public extends U8aFixed {} /** - * @name PalletProxyEvent (73) + * @name SessionKeysPrimitivesVrfVrfCryptoPublic (76) + */ + export interface SessionKeysPrimitivesVrfVrfCryptoPublic extends SpCoreSr25519Public {} + + /** + * @name PalletProxyEvent (77) */ export interface PalletProxyEvent extends Enum { readonly isProxyExecuted: boolean; @@ -1154,11 +1189,23 @@ declare module "@polkadot/types/lookup" { readonly proxyType: MoonbaseRuntimeProxyType; readonly delay: u32; } & Struct; - readonly type: "ProxyExecuted" | "AnonymousCreated" | "Announced" | "ProxyAdded"; + readonly isProxyRemoved: boolean; + readonly asProxyRemoved: { + readonly delegator: AccountId20; + readonly delegatee: AccountId20; + readonly proxyType: MoonbaseRuntimeProxyType; + readonly delay: u32; + } & Struct; + readonly type: + | "ProxyExecuted" + | "AnonymousCreated" + | "Announced" + | "ProxyAdded" + | "ProxyRemoved"; } /** - * @name MoonbaseRuntimeProxyType (74) + * @name MoonbaseRuntimeProxyType (78) */ export interface MoonbaseRuntimeProxyType extends Enum { readonly isAny: boolean; @@ -1168,6 +1215,7 @@ declare module "@polkadot/types/lookup" { readonly isCancelProxy: boolean; readonly isBalances: boolean; readonly isAuthorMapping: boolean; + readonly isIdentityJudgement: boolean; readonly type: | "Any" | "NonTransfer" @@ -1175,11 +1223,12 @@ declare module "@polkadot/types/lookup" { | "Staking" | "CancelProxy" | "Balances" - | "AuthorMapping"; + | "AuthorMapping" + | "IdentityJudgement"; } /** - * @name PalletMaintenanceModeEvent (76) + * @name PalletMaintenanceModeEvent (80) */ export interface PalletMaintenanceModeEvent extends Enum { readonly isEnteredMaintenanceMode: boolean; @@ -1200,7 +1249,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityEvent (77) + * @name PalletIdentityEvent (81) */ export interface PalletIdentityEvent extends Enum { readonly isIdentitySet: boolean; @@ -1268,7 +1317,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueEvent (78) + * @name CumulusPalletXcmpQueueEvent (82) */ export interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; @@ -1299,7 +1348,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2TraitsError (80) + * @name XcmV2TraitsError (84) */ export interface XcmV2TraitsError extends Enum { readonly isOverflow: boolean; @@ -1360,7 +1409,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmEvent (82) + * @name CumulusPalletXcmEvent (86) */ export interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; @@ -1373,7 +1422,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2TraitsOutcome (84) + * @name XcmV2TraitsOutcome (88) */ export interface XcmV2TraitsOutcome extends Enum { readonly isComplete: boolean; @@ -1386,21 +1435,39 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletDmpQueueEvent (85) + * @name CumulusPalletDmpQueueEvent (89) */ export interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; - readonly asInvalidFormat: U8aFixed; + readonly asInvalidFormat: { + readonly messageId: U8aFixed; + } & Struct; readonly isUnsupportedVersion: boolean; - readonly asUnsupportedVersion: U8aFixed; + readonly asUnsupportedVersion: { + readonly messageId: U8aFixed; + } & Struct; readonly isExecutedDownward: boolean; - readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>; + readonly asExecutedDownward: { + readonly messageId: U8aFixed; + readonly outcome: XcmV2TraitsOutcome; + } & Struct; readonly isWeightExhausted: boolean; - readonly asWeightExhausted: ITuple<[U8aFixed, u64, u64]>; + readonly asWeightExhausted: { + readonly messageId: U8aFixed; + readonly remainingWeight: u64; + readonly requiredWeight: u64; + } & Struct; readonly isOverweightEnqueued: boolean; - readonly asOverweightEnqueued: ITuple<[U8aFixed, u64, u64]>; + readonly asOverweightEnqueued: { + readonly messageId: U8aFixed; + readonly overweightIndex: u64; + readonly requiredWeight: u64; + } & Struct; readonly isOverweightServiced: boolean; - readonly asOverweightServiced: ITuple<[u64, u64]>; + readonly asOverweightServiced: { + readonly overweightIndex: u64; + readonly weightUsed: u64; + } & Struct; readonly type: | "InvalidFormat" | "UnsupportedVersion" @@ -1411,7 +1478,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmEvent (86) + * @name PalletXcmEvent (90) */ export interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; @@ -1466,7 +1533,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiLocation (87) + * @name XcmV1MultiLocation (91) */ export interface XcmV1MultiLocation extends Struct { readonly parents: u8; @@ -1474,7 +1541,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultilocationJunctions (88) + * @name XcmV1MultilocationJunctions (92) */ export interface XcmV1MultilocationJunctions extends Enum { readonly isHere: boolean; @@ -1523,7 +1590,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Junction (89) + * @name XcmV1Junction (93) */ export interface XcmV1Junction extends Enum { readonly isParachain: boolean; @@ -1568,7 +1635,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionNetworkId (91) + * @name XcmV0JunctionNetworkId (95) */ export interface XcmV0JunctionNetworkId extends Enum { readonly isAny: boolean; @@ -1580,7 +1647,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionBodyId (94) + * @name XcmV0JunctionBodyId (98) */ export interface XcmV0JunctionBodyId extends Enum { readonly isUnit: boolean; @@ -1603,7 +1670,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionBodyPart (95) + * @name XcmV0JunctionBodyPart (99) */ export interface XcmV0JunctionBodyPart extends Enum { readonly isVoice: boolean; @@ -1630,12 +1697,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2Xcm (96) + * @name XcmV2Xcm (100) */ export interface XcmV2Xcm extends Vec {} /** - * @name XcmV2Instruction (98) + * @name XcmV2Instruction (102) */ export interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; @@ -1785,12 +1852,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetMultiAssets (99) + * @name XcmV1MultiassetMultiAssets (103) */ export interface XcmV1MultiassetMultiAssets extends Vec {} /** - * @name XcmV1MultiAsset (101) + * @name XcmV1MultiAsset (105) */ export interface XcmV1MultiAsset extends Struct { readonly id: XcmV1MultiassetAssetId; @@ -1798,7 +1865,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetAssetId (102) + * @name XcmV1MultiassetAssetId (106) */ export interface XcmV1MultiassetAssetId extends Enum { readonly isConcrete: boolean; @@ -1809,7 +1876,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetFungibility (103) + * @name XcmV1MultiassetFungibility (107) */ export interface XcmV1MultiassetFungibility extends Enum { readonly isFungible: boolean; @@ -1820,7 +1887,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetAssetInstance (104) + * @name XcmV1MultiassetAssetInstance (108) */ export interface XcmV1MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; @@ -1840,7 +1907,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2Response (106) + * @name XcmV2Response (110) */ export interface XcmV2Response extends Enum { readonly isNull: boolean; @@ -1854,7 +1921,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0OriginKind (109) + * @name XcmV0OriginKind (113) */ export interface XcmV0OriginKind extends Enum { readonly isNative: boolean; @@ -1865,14 +1932,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmDoubleEncoded (110) + * @name XcmDoubleEncoded (114) */ export interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } /** - * @name XcmV1MultiassetMultiAssetFilter (111) + * @name XcmV1MultiassetMultiAssetFilter (115) */ export interface XcmV1MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; @@ -1883,7 +1950,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetWildMultiAsset (112) + * @name XcmV1MultiassetWildMultiAsset (116) */ export interface XcmV1MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; @@ -1896,7 +1963,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetWildFungibility (113) + * @name XcmV1MultiassetWildFungibility (117) */ export interface XcmV1MultiassetWildFungibility extends Enum { readonly isFungible: boolean; @@ -1905,7 +1972,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2WeightLimit (114) + * @name XcmV2WeightLimit (118) */ export interface XcmV2WeightLimit extends Enum { readonly isUnlimited: boolean; @@ -1915,7 +1982,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiAssets (116) + * @name XcmVersionedMultiAssets (120) */ export interface XcmVersionedMultiAssets extends Enum { readonly isV0: boolean; @@ -1926,7 +1993,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0MultiAsset (118) + * @name XcmV0MultiAsset (122) */ export interface XcmV0MultiAsset extends Enum { readonly isNone: boolean; @@ -1985,7 +2052,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0MultiLocation (119) + * @name XcmV0MultiLocation (123) */ export interface XcmV0MultiLocation extends Enum { readonly isNull: boolean; @@ -2034,7 +2101,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Junction (120) + * @name XcmV0Junction (124) */ export interface XcmV0Junction extends Enum { readonly isParent: boolean; @@ -2081,7 +2148,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiLocation (121) + * @name XcmVersionedMultiLocation (125) */ export interface XcmVersionedMultiLocation extends Enum { readonly isV0: boolean; @@ -2092,7 +2159,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsEvent (122) + * @name PalletAssetsEvent (126) */ export interface PalletAssetsEvent extends Enum { readonly isCreated: boolean; @@ -2218,7 +2285,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleEvent (123) + * @name OrmlXtokensModuleEvent (127) */ export interface OrmlXtokensModuleEvent extends Enum { readonly isTransferredMultiAssets: boolean; @@ -2232,7 +2299,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerEvent (124) + * @name PalletAssetManagerEvent (128) */ export interface PalletAssetManagerEvent extends Enum { readonly isForeignAssetRegistered: boolean; @@ -2287,7 +2354,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbaseRuntimeXcmConfigAssetType (125) + * @name MoonbaseRuntimeXcmConfigAssetType (129) */ export interface MoonbaseRuntimeXcmConfigAssetType extends Enum { readonly isXcm: boolean; @@ -2296,7 +2363,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbaseRuntimeAssetConfigAssetRegistrarMetadata (126) + * @name MoonbaseRuntimeAssetConfigAssetRegistrarMetadata (130) */ export interface MoonbaseRuntimeAssetConfigAssetRegistrarMetadata extends Struct { readonly name: Bytes; @@ -2306,7 +2373,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMigrationsEvent (127) + * @name PalletMigrationsEvent (131) */ export interface PalletMigrationsEvent extends Enum { readonly isRuntimeUpgradeStarted: boolean; @@ -2331,9 +2398,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorEvent (128) + * @name PalletXcmTransactorEvent (132) */ - export interface XcmTransactorEvent extends Enum { + export interface PalletXcmTransactorEvent extends Enum { readonly isTransactedDerivative: boolean; readonly asTransactedDerivative: { readonly accountId: AccountId20; @@ -2347,6 +2414,12 @@ declare module "@polkadot/types/lookup" { readonly dest: XcmV1MultiLocation; readonly call: Bytes; } & Struct; + readonly isTransactedSigned: boolean; + readonly asTransactedSigned: { + readonly feePayer: AccountId20; + readonly dest: XcmV1MultiLocation; + readonly call: Bytes; + } & Struct; readonly isRegisteredDerivative: boolean; readonly asRegisteredDerivative: { readonly accountId: AccountId20; @@ -2363,33 +2436,45 @@ declare module "@polkadot/types/lookup" { readonly isTransactInfoChanged: boolean; readonly asTransactInfoChanged: { readonly location: XcmV1MultiLocation; - readonly remoteInfo: XcmTransactorRemoteTransactInfoWithMaxWeight; + readonly remoteInfo: PalletXcmTransactorRemoteTransactInfoWithMaxWeight; } & Struct; readonly isTransactInfoRemoved: boolean; readonly asTransactInfoRemoved: { readonly location: XcmV1MultiLocation; } & Struct; + readonly isDestFeePerSecondChanged: boolean; + readonly asDestFeePerSecondChanged: { + readonly location: XcmV1MultiLocation; + readonly feePerSecond: u128; + } & Struct; + readonly isDestFeePerSecondRemoved: boolean; + readonly asDestFeePerSecondRemoved: { + readonly location: XcmV1MultiLocation; + } & Struct; readonly type: | "TransactedDerivative" | "TransactedSovereign" + | "TransactedSigned" | "RegisteredDerivative" | "DeRegisteredDerivative" | "TransactFailed" | "TransactInfoChanged" - | "TransactInfoRemoved"; + | "TransactInfoRemoved" + | "DestFeePerSecondChanged" + | "DestFeePerSecondRemoved"; } /** - * @name XcmTransactorRemoteTransactInfoWithMaxWeight (129) + * @name PalletXcmTransactorRemoteTransactInfoWithMaxWeight (133) */ - export interface XcmTransactorRemoteTransactInfoWithMaxWeight extends Struct { + export interface PalletXcmTransactorRemoteTransactInfoWithMaxWeight extends Struct { readonly transactExtraWeight: u64; - readonly feePerSecond: u128; readonly maxWeight: u64; + readonly transactExtraWeightSigned: Option; } /** - * @name PalletBaseFeeEvent (130) + * @name PalletBaseFeeEvent (135) */ export interface PalletBaseFeeEvent extends Enum { readonly isNewBaseFeePerGas: boolean; @@ -2403,7 +2488,97 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemPhase (133) + * @name PalletMoonbeamOrbitersEvent (138) + */ + export interface PalletMoonbeamOrbitersEvent extends Enum { + readonly isOrbiterJoinCollatorPool: boolean; + readonly asOrbiterJoinCollatorPool: { + readonly collator: AccountId20; + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterLeaveCollatorPool: boolean; + readonly asOrbiterLeaveCollatorPool: { + readonly collator: AccountId20; + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterRewarded: boolean; + readonly asOrbiterRewarded: { + readonly account: AccountId20; + readonly rewards: u128; + } & Struct; + readonly isOrbiterRotation: boolean; + readonly asOrbiterRotation: { + readonly collator: AccountId20; + readonly oldOrbiter: Option; + readonly newOrbiter: Option; + } & Struct; + readonly isOrbiterRegistered: boolean; + readonly asOrbiterRegistered: { + readonly account: AccountId20; + readonly deposit: u128; + } & Struct; + readonly isOrbiterUnregistered: boolean; + readonly asOrbiterUnregistered: { + readonly account: AccountId20; + } & Struct; + readonly type: + | "OrbiterJoinCollatorPool" + | "OrbiterLeaveCollatorPool" + | "OrbiterRewarded" + | "OrbiterRotation" + | "OrbiterRegistered" + | "OrbiterUnregistered"; + } + + /** + * @name PalletRandomnessEvent (139) + */ + export interface PalletRandomnessEvent extends Enum { + readonly isRandomnessRequestedBabeEpoch: boolean; + readonly asRandomnessRequestedBabeEpoch: { + readonly id: u64; + readonly refundAddress: H160; + readonly contractAddress: H160; + readonly fee: u128; + readonly gasLimit: u64; + readonly numWords: u8; + readonly salt: H256; + readonly earliestEpoch: u64; + } & Struct; + readonly isRandomnessRequestedLocal: boolean; + readonly asRandomnessRequestedLocal: { + readonly id: u64; + readonly refundAddress: H160; + readonly contractAddress: H160; + readonly fee: u128; + readonly gasLimit: u64; + readonly numWords: u8; + readonly salt: H256; + readonly earliestBlock: u32; + } & Struct; + readonly isRequestFulfilled: boolean; + readonly asRequestFulfilled: { + readonly id: u64; + } & Struct; + readonly isRequestFeeIncreased: boolean; + readonly asRequestFeeIncreased: { + readonly id: u64; + readonly newFee: u128; + } & Struct; + readonly isRequestExpirationExecuted: boolean; + readonly asRequestExpirationExecuted: { + readonly id: u64; + } & Struct; + readonly type: + | "RandomnessRequestedBabeEpoch" + | "RandomnessRequestedLocal" + | "RequestFulfilled" + | "RequestFeeIncreased" + | "RequestExpirationExecuted"; + } + + /** + * @name FrameSystemPhase (140) */ export interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; @@ -2414,7 +2589,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLastRuntimeUpgradeInfo (135) + * @name FrameSystemLastRuntimeUpgradeInfo (142) */ export interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; @@ -2422,7 +2597,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemCall (136) + * @name FrameSystemCall (143) */ export interface FrameSystemCall extends Enum { readonly isFillBlock: boolean; @@ -2475,7 +2650,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsBlockWeights (140) + * @name FrameSystemLimitsBlockWeights (147) */ export interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: u64; @@ -2484,7 +2659,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsPerDispatchClassWeightsPerClass (141) + * @name FrameSupportWeightsPerDispatchClassWeightsPerClass (148) */ export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; @@ -2493,7 +2668,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsWeightsPerClass (142) + * @name FrameSystemLimitsWeightsPerClass (149) */ export interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: u64; @@ -2503,14 +2678,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsBlockLength (144) + * @name FrameSystemLimitsBlockLength (150) */ export interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportWeightsPerDispatchClassU32; } /** - * @name FrameSupportWeightsPerDispatchClassU32 (145) + * @name FrameSupportWeightsPerDispatchClassU32 (151) */ export interface FrameSupportWeightsPerDispatchClassU32 extends Struct { readonly normal: u32; @@ -2519,7 +2694,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsRuntimeDbWeight (146) + * @name FrameSupportWeightsRuntimeDbWeight (152) */ export interface FrameSupportWeightsRuntimeDbWeight extends Struct { readonly read: u64; @@ -2527,7 +2702,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpVersionRuntimeVersion (147) + * @name SpVersionRuntimeVersion (153) */ export interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; @@ -2541,7 +2716,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemError (151) + * @name FrameSystemError (157) */ export interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; @@ -2560,7 +2735,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletUtilityCall (152) + * @name PalletUtilityCall (158) */ export interface PalletUtilityCall extends Enum { readonly isBatch: boolean; @@ -2581,11 +2756,15 @@ declare module "@polkadot/types/lookup" { readonly asOrigin: MoonbaseRuntimeOriginCaller; readonly call: Call; } & Struct; - readonly type: "Batch" | "AsDerivative" | "BatchAll" | "DispatchAs"; + readonly isForceBatch: boolean; + readonly asForceBatch: { + readonly calls: Vec; + } & Struct; + readonly type: "Batch" | "AsDerivative" | "BatchAll" | "DispatchAs" | "ForceBatch"; } /** - * @name PalletTimestampCall (155) + * @name PalletTimestampCall (161) */ export interface PalletTimestampCall extends Enum { readonly isSet: boolean; @@ -2596,7 +2775,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesCall (156) + * @name PalletBalancesCall (162) */ export interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; @@ -2641,7 +2820,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSudoCall (157) + * @name PalletSudoCall (163) */ export interface PalletSudoCall extends Enum { readonly isSudo: boolean; @@ -2666,7 +2845,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemCall (158) + * @name CumulusPalletParachainSystemCall (164) */ export interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; @@ -2693,19 +2872,19 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPrimitivesParachainInherentParachainInherentData (159) + * @name CumulusPrimitivesParachainInherentParachainInherentData (165) */ export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { - readonly validationData: PolkadotPrimitivesV1PersistedValidationData; + readonly validationData: PolkadotPrimitivesV2PersistedValidationData; readonly relayChainState: SpTrieStorageProof; readonly downwardMessages: Vec; readonly horizontalMessages: BTreeMap>; } /** - * @name PolkadotPrimitivesV1PersistedValidationData (160) + * @name PolkadotPrimitivesV2PersistedValidationData (166) */ - export interface PolkadotPrimitivesV1PersistedValidationData extends Struct { + export interface PolkadotPrimitivesV2PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; readonly relayParentStorageRoot: H256; @@ -2713,19 +2892,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpTrieStorageProof (162) + * @name SpTrieStorageProof (168) */ export interface SpTrieStorageProof extends Struct { - readonly trieNodes: BTreeSet; + readonly trieNodes: BTreeSet; } /** - * @name BTreeSet (163) - */ - export interface BTreeSet extends BTreeSetType {} - - /** - * @name PolkadotCorePrimitivesInboundDownwardMessage (165) + * @name PolkadotCorePrimitivesInboundDownwardMessage (171) */ export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; @@ -2733,7 +2907,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotCorePrimitivesInboundHrmpMessage (168) + * @name PolkadotCorePrimitivesInboundHrmpMessage (174) */ export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; @@ -2741,7 +2915,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmCall (171) + * @name PalletEvmCall (177) */ export interface PalletEvmCall extends Enum { readonly isWithdraw: boolean; @@ -2784,15 +2958,11 @@ declare module "@polkadot/types/lookup" { readonly nonce: Option; readonly accessList: Vec]>>; } & Struct; - readonly isHotfixIncAccountSufficients: boolean; - readonly asHotfixIncAccountSufficients: { - readonly addresses: Vec; - } & Struct; - readonly type: "Withdraw" | "Call" | "Create" | "Create2" | "HotfixIncAccountSufficients"; + readonly type: "Withdraw" | "Call" | "Create" | "Create2"; } /** - * @name PalletEthereumCall (176) + * @name PalletEthereumCall (181) */ export interface PalletEthereumCall extends Enum { readonly isTransact: boolean; @@ -2803,7 +2973,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionV2 (177) + * @name EthereumTransactionTransactionV2 (182) */ export interface EthereumTransactionTransactionV2 extends Enum { readonly isLegacy: boolean; @@ -2816,7 +2986,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionLegacyTransaction (178) + * @name EthereumTransactionLegacyTransaction (183) */ export interface EthereumTransactionLegacyTransaction extends Struct { readonly nonce: U256; @@ -2829,7 +2999,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionAction (179) + * @name EthereumTransactionTransactionAction (184) */ export interface EthereumTransactionTransactionAction extends Enum { readonly isCall: boolean; @@ -2839,7 +3009,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionSignature (180) + * @name EthereumTransactionTransactionSignature (185) */ export interface EthereumTransactionTransactionSignature extends Struct { readonly v: u64; @@ -2848,7 +3018,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionEip2930Transaction (182) + * @name EthereumTransactionEip2930Transaction (187) */ export interface EthereumTransactionEip2930Transaction extends Struct { readonly chainId: u64; @@ -2865,7 +3035,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionAccessListItem (184) + * @name EthereumTransactionAccessListItem (189) */ export interface EthereumTransactionAccessListItem extends Struct { readonly address: H160; @@ -2873,7 +3043,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionEip1559Transaction (185) + * @name EthereumTransactionEip1559Transaction (190) */ export interface EthereumTransactionEip1559Transaction extends Struct { readonly chainId: u64; @@ -2891,24 +3061,24 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingCall (186) + * @name PalletParachainStakingCall (191) */ - export interface ParachainStakingCall extends Enum { - readonly isHotfixRemoveDelegationRequests: boolean; - readonly asHotfixRemoveDelegationRequests: { - readonly delegators: Vec; - } & Struct; - readonly isHotfixUpdateCandidatePoolValue: boolean; - readonly asHotfixUpdateCandidatePoolValue: { - readonly candidates: Vec; - } & Struct; + export interface PalletParachainStakingCall extends Enum { readonly isSetStakingExpectations: boolean; readonly asSetStakingExpectations: { - readonly expectations: ParachainStakingInflationRangeU128; + readonly expectations: { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct; } & Struct; readonly isSetInflation: boolean; readonly asSetInflation: { - readonly schedule: ParachainStakingInflationRangePerbill; + readonly schedule: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; } & Struct; readonly isSetParachainBondAccount: boolean; readonly asSetParachainBondAccount: { @@ -3000,9 +3170,19 @@ declare module "@polkadot/types/lookup" { readonly asCancelDelegationRequest: { readonly candidate: AccountId20; } & Struct; + readonly isHotfixRemoveDelegationRequestsExitedCandidates: boolean; + readonly asHotfixRemoveDelegationRequestsExitedCandidates: { + readonly candidates: Vec; + } & Struct; + readonly isHotfixMigrateDelegatorsFromReserveToLocks: boolean; + readonly asHotfixMigrateDelegatorsFromReserveToLocks: { + readonly delegators: Vec; + } & Struct; + readonly isHotfixMigrateCollatorsFromReserveToLocks: boolean; + readonly asHotfixMigrateCollatorsFromReserveToLocks: { + readonly collators: Vec; + } & Struct; readonly type: - | "HotfixRemoveDelegationRequests" - | "HotfixUpdateCandidatePoolValue" | "SetStakingExpectations" | "SetInflation" | "SetParachainBondAccount" @@ -3028,29 +3208,14 @@ declare module "@polkadot/types/lookup" { | "DelegatorBondMore" | "ScheduleDelegatorBondLess" | "ExecuteDelegationRequest" - | "CancelDelegationRequest"; + | "CancelDelegationRequest" + | "HotfixRemoveDelegationRequestsExitedCandidates" + | "HotfixMigrateDelegatorsFromReserveToLocks" + | "HotfixMigrateCollatorsFromReserveToLocks"; } /** - * @name ParachainStakingInflationRangeU128 (187) - */ - export interface ParachainStakingInflationRangeU128 extends Struct { - readonly min: u128; - readonly ideal: u128; - readonly max: u128; - } - - /** - * @name ParachainStakingInflationRangePerbill (188) - */ - export interface ParachainStakingInflationRangePerbill extends Struct { - readonly min: Perbill; - readonly ideal: Perbill; - readonly max: Perbill; - } - - /** - * @name PalletSchedulerCall (189) + * @name PalletSchedulerCall (194) */ export interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; @@ -3102,7 +3267,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportScheduleMaybeHashed (191) + * @name FrameSupportScheduleMaybeHashed (196) */ export interface FrameSupportScheduleMaybeHashed extends Enum { readonly isValue: boolean; @@ -3113,7 +3278,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyCall (192) + * @name PalletDemocracyCall (197) */ export interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; @@ -3250,7 +3415,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyConviction (193) + * @name PalletDemocracyConviction (198) */ export interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; @@ -3271,7 +3436,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveCall (195) + * @name PalletCollectiveCall (200) */ export interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; @@ -3312,7 +3477,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryCall (197) + * @name PalletTreasuryCall (202) */ export interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; @@ -3328,11 +3493,15 @@ declare module "@polkadot/types/lookup" { readonly asApproveProposal: { readonly proposalId: Compact; } & Struct; - readonly type: "ProposeSpend" | "RejectProposal" | "ApproveProposal"; + readonly isRemoveApproval: boolean; + readonly asRemoveApproval: { + readonly proposalId: Compact; + } & Struct; + readonly type: "ProposeSpend" | "RejectProposal" | "ApproveProposal" | "RemoveApproval"; } /** - * @name PalletAuthorInherentCall (198) + * @name PalletAuthorInherentCall (203) */ export interface PalletAuthorInherentCall extends Enum { readonly isKickOffAuthorshipValidation: boolean; @@ -3340,18 +3509,18 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorSlotFilterCall (199) + * @name PalletAuthorSlotFilterCall (204) */ export interface PalletAuthorSlotFilterCall extends Enum { readonly isSetEligible: boolean; readonly asSetEligible: { - readonly new_: Percent; + readonly new_: u32; } & Struct; readonly type: "SetEligible"; } /** - * @name PalletCrowdloanRewardsCall (200) + * @name PalletCrowdloanRewardsCall (205) */ export interface PalletCrowdloanRewardsCall extends Enum { readonly isAssociateNativeIdentity: boolean; @@ -3389,7 +3558,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpRuntimeMultiSignature (201) + * @name SpRuntimeMultiSignature (206) */ export interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; @@ -3402,42 +3571,52 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpCoreEd25519Signature (202) + * @name SpCoreEd25519Signature (207) */ export interface SpCoreEd25519Signature extends U8aFixed {} /** - * @name SpCoreSr25519Signature (204) + * @name SpCoreSr25519Signature (209) */ export interface SpCoreSr25519Signature extends U8aFixed {} /** - * @name SpCoreEcdsaSignature (205) + * @name SpCoreEcdsaSignature (210) */ export interface SpCoreEcdsaSignature extends U8aFixed {} /** - * @name PalletAuthorMappingCall (211) + * @name PalletAuthorMappingCall (216) */ export interface PalletAuthorMappingCall extends Enum { readonly isAddAssociation: boolean; readonly asAddAssociation: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; } & Struct; readonly isUpdateAssociation: boolean; readonly asUpdateAssociation: { - readonly oldAuthorId: NimbusPrimitivesNimbusCryptoPublic; - readonly newAuthorId: NimbusPrimitivesNimbusCryptoPublic; + readonly oldNimbusId: NimbusPrimitivesNimbusCryptoPublic; + readonly newNimbusId: NimbusPrimitivesNimbusCryptoPublic; } & Struct; readonly isClearAssociation: boolean; readonly asClearAssociation: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; + } & Struct; + readonly isRemoveKeys: boolean; + readonly isSetKeys: boolean; + readonly asSetKeys: { + readonly keys_: Bytes; } & Struct; - readonly type: "AddAssociation" | "UpdateAssociation" | "ClearAssociation"; + readonly type: + | "AddAssociation" + | "UpdateAssociation" + | "ClearAssociation" + | "RemoveKeys" + | "SetKeys"; } /** - * @name PalletProxyCall (212) + * @name PalletProxyCall (217) */ export interface PalletProxyCall extends Enum { readonly isProxy: boolean; @@ -3509,7 +3688,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeCall (214) + * @name PalletMaintenanceModeCall (219) */ export interface PalletMaintenanceModeCall extends Enum { readonly isEnterMaintenanceMode: boolean; @@ -3518,7 +3697,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityCall (215) + * @name PalletIdentityCall (220) */ export interface PalletIdentityCall extends Enum { readonly isAddRegistrar: boolean; @@ -3602,7 +3781,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityIdentityInfo (216) + * @name PalletIdentityIdentityInfo (221) */ export interface PalletIdentityIdentityInfo extends Struct { readonly additional: Vec>; @@ -3617,7 +3796,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityBitFlags (252) + * @name PalletIdentityBitFlags (257) */ export interface PalletIdentityBitFlags extends Set { readonly isDisplay: boolean; @@ -3631,7 +3810,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityIdentityField (253) + * @name PalletIdentityIdentityField (258) */ export interface PalletIdentityIdentityField extends Enum { readonly isDisplay: boolean; @@ -3654,7 +3833,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityJudgement (254) + * @name PalletIdentityJudgement (259) */ export interface PalletIdentityJudgement extends Enum { readonly isUnknown: boolean; @@ -3676,7 +3855,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueCall (255) + * @name CumulusPalletXcmpQueueCall (260) */ export interface CumulusPalletXcmpQueueCall extends Enum { readonly isServiceOverweight: boolean; @@ -3723,7 +3902,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletDmpQueueCall (256) + * @name CumulusPalletDmpQueueCall (261) */ export interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; @@ -3735,7 +3914,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmCall (257) + * @name PalletXcmCall (262) */ export interface PalletXcmCall extends Enum { readonly isSend: boolean; @@ -3809,7 +3988,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedXcm (258) + * @name XcmVersionedXcm (263) */ export interface XcmVersionedXcm extends Enum { readonly isV0: boolean; @@ -3822,7 +4001,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Xcm (259) + * @name XcmV0Xcm (264) */ export interface XcmV0Xcm extends Enum { readonly isWithdrawAsset: boolean; @@ -3898,7 +4077,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Order (261) + * @name XcmV0Order (266) */ export interface XcmV0Order extends Enum { readonly isNull: boolean; @@ -3956,7 +4135,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Response (263) + * @name XcmV0Response (268) */ export interface XcmV0Response extends Enum { readonly isAssets: boolean; @@ -3965,7 +4144,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Xcm (264) + * @name XcmV1Xcm (269) */ export interface XcmV1Xcm extends Enum { readonly isWithdrawAsset: boolean; @@ -4049,7 +4228,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Order (266) + * @name XcmV1Order (271) */ export interface XcmV1Order extends Enum { readonly isNoop: boolean; @@ -4109,7 +4288,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Response (268) + * @name XcmV1Response (273) */ export interface XcmV1Response extends Enum { readonly isAssets: boolean; @@ -4120,7 +4299,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsCall (282) + * @name PalletAssetsCall (287) */ export interface PalletAssetsCall extends Enum { readonly isCreate: boolean; @@ -4298,7 +4477,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsDestroyWitness (283) + * @name PalletAssetsDestroyWitness (288) */ export interface PalletAssetsDestroyWitness extends Struct { readonly accounts: Compact; @@ -4307,7 +4486,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleCall (284) + * @name OrmlXtokensModuleCall (289) */ export interface OrmlXtokensModuleCall extends Enum { readonly isTransfer: boolean; @@ -4362,7 +4541,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbaseRuntimeXcmConfigCurrencyId (285) + * @name MoonbaseRuntimeXcmConfigCurrencyId (290) */ export interface MoonbaseRuntimeXcmConfigCurrencyId extends Enum { readonly isSelfReserve: boolean; @@ -4374,7 +4553,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiAsset (286) + * @name XcmVersionedMultiAsset (291) */ export interface XcmVersionedMultiAsset extends Enum { readonly isV0: boolean; @@ -4385,7 +4564,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerCall (289) + * @name PalletAssetManagerCall (294) */ export interface PalletAssetManagerCall extends Enum { readonly isRegisterForeignAsset: boolean; @@ -4447,9 +4626,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorCall (290) + * @name PalletXcmTransactorCall (295) */ - export interface XcmTransactorCall extends Enum { + export interface PalletXcmTransactorCall extends Enum { readonly isRegister: boolean; readonly asRegister: { readonly who: AccountId20; @@ -4488,13 +4667,36 @@ declare module "@polkadot/types/lookup" { readonly asSetTransactInfo: { readonly location: XcmVersionedMultiLocation; readonly transactExtraWeight: u64; - readonly feePerSecond: u128; readonly maxWeight: u64; + readonly transactExtraWeightSigned: Option; } & Struct; readonly isRemoveTransactInfo: boolean; readonly asRemoveTransactInfo: { readonly location: XcmVersionedMultiLocation; } & Struct; + readonly isTransactThroughSigned: boolean; + readonly asTransactThroughSigned: { + readonly dest: XcmVersionedMultiLocation; + readonly feeCurrencyId: MoonbaseRuntimeXcmConfigCurrencyId; + readonly destWeight: u64; + readonly call: Bytes; + } & Struct; + readonly isTransactThroughSignedMultilocation: boolean; + readonly asTransactThroughSignedMultilocation: { + readonly dest: XcmVersionedMultiLocation; + readonly feeLocation: XcmVersionedMultiLocation; + readonly destWeight: u64; + readonly call: Bytes; + } & Struct; + readonly isSetFeePerSecond: boolean; + readonly asSetFeePerSecond: { + readonly assetLocation: XcmVersionedMultiLocation; + readonly feePerSecond: u128; + } & Struct; + readonly isRemoveFeePerSecond: boolean; + readonly asRemoveFeePerSecond: { + readonly assetLocation: XcmVersionedMultiLocation; + } & Struct; readonly type: | "Register" | "Deregister" @@ -4502,11 +4704,15 @@ declare module "@polkadot/types/lookup" { | "TransactThroughDerivative" | "TransactThroughSovereign" | "SetTransactInfo" - | "RemoveTransactInfo"; + | "RemoveTransactInfo" + | "TransactThroughSigned" + | "TransactThroughSignedMultilocation" + | "SetFeePerSecond" + | "RemoveFeePerSecond"; } /** - * @name MoonbaseRuntimeXcmConfigTransactors (291) + * @name MoonbaseRuntimeXcmConfigTransactors (296) */ export interface MoonbaseRuntimeXcmConfigTransactors extends Enum { readonly isRelay: boolean; @@ -4514,7 +4720,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBaseFeeCall (292) + * @name PalletBaseFeeCall (297) */ export interface PalletBaseFeeCall extends Enum { readonly isSetBaseFeePerGas: boolean; @@ -4533,7 +4739,104 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbaseRuntimeOriginCaller (294) + * @name PalletMoonbeamOrbitersCall (299) + */ + export interface PalletMoonbeamOrbitersCall extends Enum { + readonly isCollatorAddOrbiter: boolean; + readonly asCollatorAddOrbiter: { + readonly orbiter: AccountId20; + } & Struct; + readonly isCollatorRemoveOrbiter: boolean; + readonly asCollatorRemoveOrbiter: { + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterLeaveCollatorPool: boolean; + readonly asOrbiterLeaveCollatorPool: { + readonly collator: AccountId20; + } & Struct; + readonly isOrbiterRegister: boolean; + readonly isOrbiterUnregister: boolean; + readonly asOrbiterUnregister: { + readonly collatorsPoolCount: u32; + } & Struct; + readonly isAddCollator: boolean; + readonly asAddCollator: { + readonly collator: AccountId20; + } & Struct; + readonly isRemoveCollator: boolean; + readonly asRemoveCollator: { + readonly collator: AccountId20; + } & Struct; + readonly type: + | "CollatorAddOrbiter" + | "CollatorRemoveOrbiter" + | "OrbiterLeaveCollatorPool" + | "OrbiterRegister" + | "OrbiterUnregister" + | "AddCollator" + | "RemoveCollator"; + } + + /** + * @name PalletEthereumXcmCall (300) + */ + export interface PalletEthereumXcmCall extends Enum { + readonly isTransact: boolean; + readonly asTransact: { + readonly xcmTransaction: XcmPrimitivesEthereumXcmEthereumXcmTransaction; + } & Struct; + readonly type: "Transact"; + } + + /** + * @name XcmPrimitivesEthereumXcmEthereumXcmTransaction (301) + */ + export interface XcmPrimitivesEthereumXcmEthereumXcmTransaction extends Enum { + readonly isV1: boolean; + readonly asV1: XcmPrimitivesEthereumXcmEthereumXcmTransactionV1; + readonly type: "V1"; + } + + /** + * @name XcmPrimitivesEthereumXcmEthereumXcmTransactionV1 (302) + */ + export interface XcmPrimitivesEthereumXcmEthereumXcmTransactionV1 extends Struct { + readonly gasLimit: U256; + readonly feePayment: XcmPrimitivesEthereumXcmEthereumXcmFee; + readonly action: EthereumTransactionTransactionAction; + readonly value: U256; + readonly input: Bytes; + readonly accessList: Option]>>>; + } + + /** + * @name XcmPrimitivesEthereumXcmEthereumXcmFee (303) + */ + export interface XcmPrimitivesEthereumXcmEthereumXcmFee extends Enum { + readonly isManual: boolean; + readonly asManual: XcmPrimitivesEthereumXcmManualEthereumXcmFee; + readonly isAuto: boolean; + readonly type: "Manual" | "Auto"; + } + + /** + * @name XcmPrimitivesEthereumXcmManualEthereumXcmFee (304) + */ + export interface XcmPrimitivesEthereumXcmManualEthereumXcmFee extends Struct { + readonly gasPrice: Option; + readonly maxFeePerGas: Option; + } + + /** + * @name PalletRandomnessCall (306) + */ + export interface PalletRandomnessCall extends Enum { + readonly isSetBabeRandomnessResults: boolean; + readonly type: "SetBabeRandomnessResults"; + } + + /** + * @name MoonbaseRuntimeOriginCaller (307) */ export interface MoonbaseRuntimeOriginCaller extends Enum { readonly isSystem: boolean; @@ -4549,6 +4852,8 @@ declare module "@polkadot/types/lookup" { readonly asCumulusXcm: CumulusPalletXcmOrigin; readonly isPolkadotXcm: boolean; readonly asPolkadotXcm: PalletXcmOrigin; + readonly isEthereumXcm: boolean; + readonly asEthereumXcm: PalletEthereumXcmRawOrigin; readonly type: | "System" | "Void" @@ -4556,11 +4861,12 @@ declare module "@polkadot/types/lookup" { | "CouncilCollective" | "TechCommitteeCollective" | "CumulusXcm" - | "PolkadotXcm"; + | "PolkadotXcm" + | "EthereumXcm"; } /** - * @name FrameSupportDispatchRawOrigin (295) + * @name FrameSupportDispatchRawOrigin (308) */ export interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; @@ -4571,7 +4877,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumRawOrigin (296) + * @name PalletEthereumRawOrigin (309) */ export interface PalletEthereumRawOrigin extends Enum { readonly isEthereumTransaction: boolean; @@ -4580,7 +4886,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveRawOrigin (297) + * @name PalletCollectiveRawOrigin (310) */ export interface PalletCollectiveRawOrigin extends Enum { readonly isMembers: boolean; @@ -4592,7 +4898,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmOrigin (299) + * @name CumulusPalletXcmOrigin (312) */ export interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; @@ -4602,7 +4908,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmOrigin (300) + * @name PalletXcmOrigin (313) */ export interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; @@ -4613,12 +4919,21 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpCoreVoid (301) + * @name PalletEthereumXcmRawOrigin (314) + */ + export interface PalletEthereumXcmRawOrigin extends Enum { + readonly isXcmEthereumTransaction: boolean; + readonly asXcmEthereumTransaction: H160; + readonly type: "XcmEthereumTransaction"; + } + + /** + * @name SpCoreVoid (315) */ export type SpCoreVoid = Null; /** - * @name PalletUtilityError (302) + * @name PalletUtilityError (316) */ export interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; @@ -4626,7 +4941,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesBalanceLock (304) + * @name PalletBalancesBalanceLock (318) */ export interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; @@ -4635,7 +4950,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReasons (305) + * @name PalletBalancesReasons (319) */ export interface PalletBalancesReasons extends Enum { readonly isFee: boolean; @@ -4645,7 +4960,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReserveData (308) + * @name PalletBalancesReserveData (322) */ export interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; @@ -4653,7 +4968,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReleases (310) + * @name PalletBalancesReleases (324) */ export interface PalletBalancesReleases extends Enum { readonly isV100: boolean; @@ -4662,7 +4977,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesError (311) + * @name PalletBalancesError (325) */ export interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; @@ -4685,7 +5000,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSudoError (312) + * @name PalletSudoError (326) */ export interface PalletSudoError extends Enum { readonly isRequireSudo: boolean; @@ -4693,28 +5008,28 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1UpgradeRestriction (315) + * @name PolkadotPrimitivesV2UpgradeRestriction (329) */ - export interface PolkadotPrimitivesV1UpgradeRestriction extends Enum { + export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: "Present"; } /** - * @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (316) + * @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (330) */ export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; readonly relayDispatchQueueSize: ITuple<[u32, u32]>; - readonly ingressChannels: Vec>; - readonly egressChannels: Vec>; + readonly ingressChannels: Vec>; + readonly egressChannels: Vec>; } /** - * @name PolkadotPrimitivesV1AbridgedHrmpChannel (319) + * @name PolkadotPrimitivesV2AbridgedHrmpChannel (333) */ - export interface PolkadotPrimitivesV1AbridgedHrmpChannel extends Struct { + export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; readonly maxMessageSize: u32; @@ -4724,9 +5039,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1AbridgedHostConfiguration (320) + * @name PolkadotPrimitivesV2AbridgedHostConfiguration (334) */ - export interface PolkadotPrimitivesV1AbridgedHostConfiguration extends Struct { + export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; readonly maxUpwardQueueCount: u32; @@ -4739,7 +5054,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotCorePrimitivesOutboundHrmpMessage (326) + * @name PolkadotCorePrimitivesOutboundHrmpMessage (340) */ export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; @@ -4747,7 +5062,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemError (327) + * @name CumulusPalletParachainSystemError (341) */ export interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; @@ -4770,7 +5085,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTransactionPaymentReleases (329) + * @name PalletTransactionPaymentReleases (343) */ export interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; @@ -4779,17 +5094,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsWeightToFeeCoefficient (331) - */ - export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct { - readonly coeffInteger: u128; - readonly coeffFrac: Perbill; - readonly negative: bool; - readonly degree: u8; - } - - /** - * @name PalletEvmError (333) + * @name PalletEvmError (345) */ export interface PalletEvmError extends Enum { readonly isBalanceLow: boolean; @@ -4798,7 +5103,9 @@ declare module "@polkadot/types/lookup" { readonly isWithdrawFailed: boolean; readonly isGasPriceTooLow: boolean; readonly isInvalidNonce: boolean; - readonly isMaxAddressCountExceeded: boolean; + readonly isGasLimitTooLow: boolean; + readonly isGasLimitTooHigh: boolean; + readonly isUndefined: boolean; readonly type: | "BalanceLow" | "FeeOverflow" @@ -4806,11 +5113,13 @@ declare module "@polkadot/types/lookup" { | "WithdrawFailed" | "GasPriceTooLow" | "InvalidNonce" - | "MaxAddressCountExceeded"; + | "GasLimitTooLow" + | "GasLimitTooHigh" + | "Undefined"; } /** - * @name FpRpcTransactionStatus (336) + * @name FpRpcTransactionStatus (348) */ export interface FpRpcTransactionStatus extends Struct { readonly transactionHash: H256; @@ -4823,12 +5132,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthbloomBloom (339) + * @name EthbloomBloom (351) */ export interface EthbloomBloom extends U8aFixed {} /** - * @name EthereumReceiptReceiptV3 (341) + * @name EthereumReceiptReceiptV3 (353) */ export interface EthereumReceiptReceiptV3 extends Enum { readonly isLegacy: boolean; @@ -4841,7 +5150,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumReceiptEip658ReceiptData (342) + * @name EthereumReceiptEip658ReceiptData (354) */ export interface EthereumReceiptEip658ReceiptData extends Struct { readonly statusCode: u8; @@ -4851,7 +5160,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumBlock (343) + * @name EthereumBlock (355) */ export interface EthereumBlock extends Struct { readonly header: EthereumHeader; @@ -4860,7 +5169,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumHeader (344) + * @name EthereumHeader (356) */ export interface EthereumHeader extends Struct { readonly parentHash: H256; @@ -4881,12 +5190,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTypesHashH64 (345) + * @name EthereumTypesHashH64 (357) */ export interface EthereumTypesHashH64 extends U8aFixed {} /** - * @name PalletEthereumError (350) + * @name PalletEthereumError (362) */ export interface PalletEthereumError extends Enum { readonly isInvalidSignature: boolean; @@ -4895,109 +5204,99 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingParachainBondConfig (351) + * @name PalletParachainStakingParachainBondConfig (363) */ - export interface ParachainStakingParachainBondConfig extends Struct { + export interface PalletParachainStakingParachainBondConfig extends Struct { readonly account: AccountId20; readonly percent: Percent; } /** - * @name ParachainStakingRoundInfo (352) + * @name PalletParachainStakingRoundInfo (364) */ - export interface ParachainStakingRoundInfo extends Struct { + export interface PalletParachainStakingRoundInfo extends Struct { readonly current: u32; readonly first: u32; readonly length: u32; } /** - * @name ParachainStakingNominator2 (353) + * @name PalletParachainStakingNominator2 (365) */ - export interface ParachainStakingNominator2 extends Struct { - readonly delegations: ParachainStakingSetOrderedSetBond; - readonly revocations: ParachainStakingSetOrderedSetAccountId20; + export interface PalletParachainStakingNominator2 extends Struct { + readonly delegations: PalletParachainStakingSetOrderedSetBond; + readonly revocations: PalletParachainStakingSetOrderedSetAccountId20; readonly total: u128; readonly scheduledRevocationsCount: u32; readonly scheduledRevocationsTotal: u128; - readonly status: ParachainStakingDelegatorStatus; + readonly status: PalletParachainStakingDelegatorStatus; } /** - * @name ParachainStakingSetOrderedSetBond (354) + * @name PalletParachainStakingSetOrderedSetBond (366) */ - export interface ParachainStakingSetOrderedSetBond extends Vec {} + export interface PalletParachainStakingSetOrderedSetBond + extends Vec {} /** - * @name ParachainStakingBond (355) + * @name PalletParachainStakingBond (367) */ - export interface ParachainStakingBond extends Struct { + export interface PalletParachainStakingBond extends Struct { readonly owner: AccountId20; readonly amount: u128; } /** - * @name ParachainStakingSetOrderedSetAccountId20 (357) + * @name PalletParachainStakingSetOrderedSetAccountId20 (369) */ - export interface ParachainStakingSetOrderedSetAccountId20 extends Vec {} + export interface PalletParachainStakingSetOrderedSetAccountId20 extends Vec {} /** - * @name ParachainStakingDelegatorStatus (358) + * @name PalletParachainStakingDelegatorStatus (370) */ - export interface ParachainStakingDelegatorStatus extends Enum { + export interface PalletParachainStakingDelegatorStatus extends Enum { readonly isActive: boolean; - readonly isLeaving: boolean; - readonly asLeaving: u32; - readonly type: "Active" | "Leaving"; + readonly type: "Active"; } /** - * @name ParachainStakingDelegator (359) + * @name PalletParachainStakingDelegator (371) */ - export interface ParachainStakingDelegator extends Struct { + export interface PalletParachainStakingDelegator extends Struct { readonly id: AccountId20; - readonly delegations: ParachainStakingSetOrderedSetBond; + readonly delegations: PalletParachainStakingSetOrderedSetBond; readonly total: u128; - readonly requests: ParachainStakingPendingDelegationRequests; - readonly status: ParachainStakingDelegatorStatus; - } - - /** - * @name ParachainStakingPendingDelegationRequests (360) - */ - export interface ParachainStakingPendingDelegationRequests extends Struct { - readonly revocationsCount: u32; - readonly requests: BTreeMap; readonly lessTotal: u128; + readonly status: PalletParachainStakingDelegatorStatus; } /** - * @name ParachainStakingCollatorCandidate (364) + * @name PalletParachainStakingCollatorCandidate (372) */ - export interface ParachainStakingCollatorCandidate extends Struct { + export interface PalletParachainStakingCollatorCandidate extends Struct { readonly id: AccountId20; readonly bond: u128; - readonly delegators: ParachainStakingSetOrderedSetAccountId20; - readonly topDelegations: Vec; - readonly bottomDelegations: Vec; + readonly delegators: PalletParachainStakingSetOrderedSetAccountId20; + readonly topDelegations: Vec; + readonly bottomDelegations: Vec; readonly totalCounted: u128; readonly totalBacking: u128; - readonly request: Option; - readonly state: ParachainStakingCollatorStatus; + readonly request: Option; + readonly state: PalletParachainStakingCollatorStatus; } /** - * @name ParachainStakingCandidateBondLessRequest (366) + * @name PalletParachainStakingCandidateBondLessRequest (374) */ - export interface ParachainStakingCandidateBondLessRequest extends Struct { + export interface PalletParachainStakingCandidateBondLessRequest extends Struct { readonly amount: u128; readonly whenExecutable: u32; } /** - * @name ParachainStakingCollatorStatus (367) + * @name PalletParachainStakingCollatorStatus (375) */ - export interface ParachainStakingCollatorStatus extends Enum { + export interface PalletParachainStakingCollatorStatus extends Enum { readonly isActive: boolean; readonly isIdle: boolean; readonly isLeaving: boolean; @@ -5006,25 +5305,25 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingCandidateMetadata (368) + * @name PalletParachainStakingCandidateMetadata (376) */ - export interface ParachainStakingCandidateMetadata extends Struct { + export interface PalletParachainStakingCandidateMetadata extends Struct { readonly bond: u128; readonly delegationCount: u32; readonly totalCounted: u128; readonly lowestTopDelegationAmount: u128; readonly highestBottomDelegationAmount: u128; readonly lowestBottomDelegationAmount: u128; - readonly topCapacity: ParachainStakingCapacityStatus; - readonly bottomCapacity: ParachainStakingCapacityStatus; - readonly request: Option; - readonly status: ParachainStakingCollatorStatus; + readonly topCapacity: PalletParachainStakingCapacityStatus; + readonly bottomCapacity: PalletParachainStakingCapacityStatus; + readonly request: Option; + readonly status: PalletParachainStakingCollatorStatus; } /** - * @name ParachainStakingCapacityStatus (369) + * @name PalletParachainStakingCapacityStatus (377) */ - export interface ParachainStakingCapacityStatus extends Enum { + export interface PalletParachainStakingCapacityStatus extends Enum { readonly isFull: boolean; readonly isEmpty: boolean; readonly isPartial: boolean; @@ -5032,58 +5331,79 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegations (370) + * @name PalletParachainStakingDelegationRequestsScheduledRequest (379) */ - export interface ParachainStakingDelegations extends Struct { - readonly delegations: Vec; + export interface PalletParachainStakingDelegationRequestsScheduledRequest extends Struct { + readonly delegator: AccountId20; + readonly whenExecutable: u32; + readonly action: PalletParachainStakingDelegationRequestsDelegationAction; + } + + /** + * @name PalletParachainStakingDelegations (380) + */ + export interface PalletParachainStakingDelegations extends Struct { + readonly delegations: Vec; readonly total: u128; } /** - * @name ParachainStakingCollator2 (371) + * @name PalletParachainStakingCollator2 (381) */ - export interface ParachainStakingCollator2 extends Struct { + export interface PalletParachainStakingCollator2 extends Struct { readonly id: AccountId20; readonly bond: u128; - readonly nominators: ParachainStakingSetOrderedSetAccountId20; - readonly topNominators: Vec; - readonly bottomNominators: Vec; + readonly nominators: PalletParachainStakingSetOrderedSetAccountId20; + readonly topNominators: Vec; + readonly bottomNominators: Vec; readonly totalCounted: u128; readonly totalBacking: u128; - readonly state: ParachainStakingCollatorStatus; + readonly state: PalletParachainStakingCollatorStatus; } /** - * @name ParachainStakingCollatorSnapshot (373) + * @name PalletParachainStakingCollatorSnapshot (383) */ - export interface ParachainStakingCollatorSnapshot extends Struct { + export interface PalletParachainStakingCollatorSnapshot extends Struct { readonly bond: u128; - readonly delegations: Vec; + readonly delegations: Vec; readonly total: u128; } /** - * @name ParachainStakingDelayedPayout (374) + * @name PalletParachainStakingDelayedPayout (384) */ - export interface ParachainStakingDelayedPayout extends Struct { + export interface PalletParachainStakingDelayedPayout extends Struct { readonly roundIssuance: u128; readonly totalStakingReward: u128; readonly collatorCommission: Perbill; } /** - * @name ParachainStakingInflationInflationInfo (375) + * @name PalletParachainStakingInflationInflationInfo (385) */ - export interface ParachainStakingInflationInflationInfo extends Struct { - readonly expect: ParachainStakingInflationRangeU128; - readonly annual: ParachainStakingInflationRangePerbill; - readonly round: ParachainStakingInflationRangePerbill; + export interface PalletParachainStakingInflationInflationInfo extends Struct { + readonly expect: { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct; + readonly annual: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; + readonly round: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; } /** - * @name ParachainStakingError (376) + * @name PalletParachainStakingError (386) */ - export interface ParachainStakingError extends Enum { + export interface PalletParachainStakingError extends Enum { readonly isDelegatorDNE: boolean; readonly isDelegatorDNEinTopNorBottom: boolean; readonly isDelegatorDNEInDelegatorSet: boolean; @@ -5124,7 +5444,8 @@ declare module "@polkadot/types/lookup" { readonly isPendingDelegationRequestDNE: boolean; readonly isPendingDelegationRequestAlreadyExists: boolean; readonly isPendingDelegationRequestNotDueYet: boolean; - readonly isCannotDelegateLessThanLowestBottomWhenBottomIsFull: boolean; + readonly isCannotDelegateLessThanOrEqualToLowestBottomWhenFull: boolean; + readonly isPendingDelegationRevoke: boolean; readonly type: | "DelegatorDNE" | "DelegatorDNEinTopNorBottom" @@ -5166,11 +5487,12 @@ declare module "@polkadot/types/lookup" { | "PendingDelegationRequestDNE" | "PendingDelegationRequestAlreadyExists" | "PendingDelegationRequestNotDueYet" - | "CannotDelegateLessThanLowestBottomWhenBottomIsFull"; + | "CannotDelegateLessThanOrEqualToLowestBottomWhenFull" + | "PendingDelegationRevoke"; } /** - * @name PalletSchedulerScheduledV3 (379) + * @name PalletSchedulerScheduledV3 (389) */ export interface PalletSchedulerScheduledV3 extends Struct { readonly maybeId: Option; @@ -5181,7 +5503,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerError (380) + * @name PalletSchedulerError (390) */ export interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; @@ -5196,7 +5518,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyPreimageStatus (384) + * @name PalletDemocracyPreimageStatus (394) */ export interface PalletDemocracyPreimageStatus extends Enum { readonly isMissing: boolean; @@ -5213,7 +5535,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyReferendumInfo (385) + * @name PalletDemocracyReferendumInfo (395) */ export interface PalletDemocracyReferendumInfo extends Enum { readonly isOngoing: boolean; @@ -5227,7 +5549,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyReferendumStatus (386) + * @name PalletDemocracyReferendumStatus (396) */ export interface PalletDemocracyReferendumStatus extends Struct { readonly end: u32; @@ -5238,7 +5560,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyTally (387) + * @name PalletDemocracyTally (397) */ export interface PalletDemocracyTally extends Struct { readonly ayes: u128; @@ -5247,7 +5569,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteVoting (388) + * @name PalletDemocracyVoteVoting (398) */ export interface PalletDemocracyVoteVoting extends Enum { readonly isDirect: boolean; @@ -5268,7 +5590,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyDelegations (391) + * @name PalletDemocracyDelegations (401) */ export interface PalletDemocracyDelegations extends Struct { readonly votes: u128; @@ -5276,12 +5598,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVotePriorLock (392) + * @name PalletDemocracyVotePriorLock (402) */ export interface PalletDemocracyVotePriorLock extends ITuple<[u32, u128]> {} /** - * @name PalletDemocracyReleases (395) + * @name PalletDemocracyReleases (405) */ export interface PalletDemocracyReleases extends Enum { readonly isV1: boolean; @@ -5289,7 +5611,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyError (396) + * @name PalletDemocracyError (406) */ export interface PalletDemocracyError extends Enum { readonly isValueLow: boolean; @@ -5352,7 +5674,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveVotes (398) + * @name PalletCollectiveVotes (408) */ export interface PalletCollectiveVotes extends Struct { readonly index: u32; @@ -5363,7 +5685,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveError (399) + * @name PalletCollectiveError (409) */ export interface PalletCollectiveError extends Enum { readonly isNotMember: boolean; @@ -5390,7 +5712,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryProposal (401) + * @name PalletTreasuryProposal (411) */ export interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId20; @@ -5400,22 +5722,27 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportPalletId (405) + * @name FrameSupportPalletId (415) */ export interface FrameSupportPalletId extends U8aFixed {} /** - * @name PalletTreasuryError (406) + * @name PalletTreasuryError (416) */ export interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; readonly isInvalidIndex: boolean; readonly isTooManyApprovals: boolean; - readonly type: "InsufficientProposersBalance" | "InvalidIndex" | "TooManyApprovals"; + readonly isProposalNotApproved: boolean; + readonly type: + | "InsufficientProposersBalance" + | "InvalidIndex" + | "TooManyApprovals" + | "ProposalNotApproved"; } /** - * @name PalletAuthorInherentError (407) + * @name PalletAuthorInherentError (417) */ export interface PalletAuthorInherentError extends Enum { readonly isAuthorAlreadySet: boolean; @@ -5425,7 +5752,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsRewardInfo (408) + * @name PalletCrowdloanRewardsRewardInfo (418) */ export interface PalletCrowdloanRewardsRewardInfo extends Struct { readonly totalReward: u128; @@ -5434,7 +5761,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsError (410) + * @name PalletCrowdloanRewardsError (420) */ export interface PalletCrowdloanRewardsError extends Enum { readonly isAlreadyAssociated: boolean; @@ -5471,30 +5798,39 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorMappingRegistrationInfo (411) + * @name PalletAuthorMappingRegistrationInfo (421) */ export interface PalletAuthorMappingRegistrationInfo extends Struct { readonly account: AccountId20; readonly deposit: u128; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } /** - * @name PalletAuthorMappingError (412) + * @name PalletAuthorMappingError (422) */ export interface PalletAuthorMappingError extends Enum { readonly isAssociationNotFound: boolean; readonly isNotYourAssociation: boolean; readonly isCannotAffordSecurityDeposit: boolean; readonly isAlreadyAssociated: boolean; + readonly isOldAuthorIdNotFound: boolean; + readonly isWrongKeySize: boolean; + readonly isDecodeNimbusFailed: boolean; + readonly isDecodeKeysFailed: boolean; readonly type: | "AssociationNotFound" | "NotYourAssociation" | "CannotAffordSecurityDeposit" - | "AlreadyAssociated"; + | "AlreadyAssociated" + | "OldAuthorIdNotFound" + | "WrongKeySize" + | "DecodeNimbusFailed" + | "DecodeKeysFailed"; } /** - * @name PalletProxyProxyDefinition (415) + * @name PalletProxyProxyDefinition (425) */ export interface PalletProxyProxyDefinition extends Struct { readonly delegate: AccountId20; @@ -5503,7 +5839,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyAnnouncement (419) + * @name PalletProxyAnnouncement (429) */ export interface PalletProxyAnnouncement extends Struct { readonly real: AccountId20; @@ -5512,7 +5848,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyError (421) + * @name PalletProxyError (431) */ export interface PalletProxyError extends Enum { readonly isTooMany: boolean; @@ -5535,7 +5871,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeError (422) + * @name PalletMaintenanceModeError (432) */ export interface PalletMaintenanceModeError extends Enum { readonly isAlreadyInMaintenanceMode: boolean; @@ -5544,7 +5880,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityRegistration (423) + * @name PalletIdentityRegistration (433) */ export interface PalletIdentityRegistration extends Struct { readonly judgements: Vec>; @@ -5553,7 +5889,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityRegistrarInfo (431) + * @name PalletIdentityRegistrarInfo (441) */ export interface PalletIdentityRegistrarInfo extends Struct { readonly account: AccountId20; @@ -5562,7 +5898,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityError (433) + * @name PalletIdentityError (443) */ export interface PalletIdentityError extends Enum { readonly isTooManySubAccounts: boolean; @@ -5601,7 +5937,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueInboundChannelDetails (435) + * @name CumulusPalletXcmpQueueInboundChannelDetails (445) */ export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; @@ -5610,7 +5946,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueInboundState (436) + * @name CumulusPalletXcmpQueueInboundState (446) */ export interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; @@ -5619,7 +5955,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotParachainPrimitivesXcmpMessageFormat (439) + * @name PolkadotParachainPrimitivesXcmpMessageFormat (449) */ export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; @@ -5629,7 +5965,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueOutboundChannelDetails (442) + * @name CumulusPalletXcmpQueueOutboundChannelDetails (452) */ export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; @@ -5640,7 +5976,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueOutboundState (443) + * @name CumulusPalletXcmpQueueOutboundState (453) */ export interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; @@ -5649,7 +5985,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueQueueConfigData (445) + * @name CumulusPalletXcmpQueueQueueConfigData (455) */ export interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; @@ -5661,7 +5997,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueError (447) + * @name CumulusPalletXcmpQueueError (457) */ export interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; @@ -5678,19 +6014,19 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmError (448) + * @name CumulusPalletXcmError (458) */ export type CumulusPalletXcmError = Null; /** - * @name CumulusPalletDmpQueueConfigData (449) + * @name CumulusPalletDmpQueueConfigData (459) */ export interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: u64; } /** - * @name CumulusPalletDmpQueuePageIndexData (450) + * @name CumulusPalletDmpQueuePageIndexData (460) */ export interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; @@ -5699,7 +6035,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletDmpQueueError (453) + * @name CumulusPalletDmpQueueError (463) */ export interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; @@ -5708,7 +6044,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmQueryStatus (454) + * @name PalletXcmQueryStatus (464) */ export interface PalletXcmQueryStatus extends Enum { readonly isPending: boolean; @@ -5731,7 +6067,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedResponse (457) + * @name XcmVersionedResponse (467) */ export interface XcmVersionedResponse extends Enum { readonly isV0: boolean; @@ -5744,7 +6080,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmVersionMigrationStage (463) + * @name PalletXcmVersionMigrationStage (473) */ export interface PalletXcmVersionMigrationStage extends Enum { readonly isMigrateSupportedVersion: boolean; @@ -5760,7 +6096,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmError (464) + * @name PalletXcmError (474) */ export interface PalletXcmError extends Enum { readonly isUnreachable: boolean; @@ -5793,7 +6129,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetDetails (465) + * @name PalletAssetsAssetDetails (475) */ export interface PalletAssetsAssetDetails extends Struct { readonly owner: AccountId20; @@ -5811,7 +6147,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetAccount (467) + * @name PalletAssetsAssetAccount (477) */ export interface PalletAssetsAssetAccount extends Struct { readonly balance: u128; @@ -5821,7 +6157,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsExistenceReason (468) + * @name PalletAssetsExistenceReason (478) */ export interface PalletAssetsExistenceReason extends Enum { readonly isConsumer: boolean; @@ -5833,7 +6169,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsApproval (470) + * @name PalletAssetsApproval (480) */ export interface PalletAssetsApproval extends Struct { readonly amount: u128; @@ -5841,7 +6177,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetMetadata (471) + * @name PalletAssetsAssetMetadata (481) */ export interface PalletAssetsAssetMetadata extends Struct { readonly deposit: u128; @@ -5852,7 +6188,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsError (473) + * @name PalletAssetsError (483) */ export interface PalletAssetsError extends Enum { readonly isBalanceLow: boolean; @@ -5889,7 +6225,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleError (474) + * @name OrmlXtokensModuleError (484) */ export interface OrmlXtokensModuleError extends Enum { readonly isAssetHasNoReserve: boolean; @@ -5910,6 +6246,7 @@ declare module "@polkadot/types/lookup" { readonly isAssetIndexNonExistent: boolean; readonly isFeeNotEnough: boolean; readonly isNotSupportedMultiLocation: boolean; + readonly isMinXcmFeeNotDefined: boolean; readonly type: | "AssetHasNoReserve" | "NotCrossChainTransfer" @@ -5928,11 +6265,12 @@ declare module "@polkadot/types/lookup" { | "TooManyAssetsBeingSent" | "AssetIndexNonExistent" | "FeeNotEnough" - | "NotSupportedMultiLocation"; + | "NotSupportedMultiLocation" + | "MinXcmFeeNotDefined"; } /** - * @name PalletAssetManagerAssetInfo (475) + * @name PalletAssetManagerAssetInfo (485) */ export interface PalletAssetManagerAssetInfo extends Struct { readonly creator: AccountId20; @@ -5940,7 +6278,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerError (477) + * @name PalletAssetManagerError (487) */ export interface PalletAssetManagerError extends Enum { readonly isErrorCreatingAsset: boolean; @@ -5963,9 +6301,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorError (478) + * @name PalletXcmTransactorError (488) */ - export interface XcmTransactorError extends Enum { + export interface PalletXcmTransactorError extends Enum { readonly isIndexAlreadyClaimed: boolean; readonly isUnclaimedIndex: boolean; readonly isNotOwner: boolean; @@ -5986,6 +6324,9 @@ declare module "@polkadot/types/lookup" { readonly isBadVersion: boolean; readonly isMaxWeightTransactReached: boolean; readonly isUnableToWithdrawAsset: boolean; + readonly isFeePerSecondNotSet: boolean; + readonly isSignedTransactNotAllowedForDestination: boolean; + readonly isFailedMultiLocationToJunction: boolean; readonly type: | "IndexAlreadyClaimed" | "UnclaimedIndex" @@ -6006,46 +6347,173 @@ declare module "@polkadot/types/lookup" { | "XcmExecuteError" | "BadVersion" | "MaxWeightTransactReached" - | "UnableToWithdrawAsset"; + | "UnableToWithdrawAsset" + | "FeePerSecondNotSet" + | "SignedTransactNotAllowedForDestination" + | "FailedMultiLocationToJunction"; + } + + /** + * @name PalletMoonbeamOrbitersCollatorPoolInfo (490) + */ + export interface PalletMoonbeamOrbitersCollatorPoolInfo extends Struct { + readonly orbiters: Vec; + readonly maybeCurrentOrbiter: Option; + readonly nextOrbiter: u32; + } + + /** + * @name PalletMoonbeamOrbitersCurrentOrbiter (492) + */ + export interface PalletMoonbeamOrbitersCurrentOrbiter extends Struct { + readonly accountId: AccountId20; + readonly removed: bool; + } + + /** + * @name PalletMoonbeamOrbitersError (493) + */ + export interface PalletMoonbeamOrbitersError extends Enum { + readonly isCollatorAlreadyAdded: boolean; + readonly isCollatorNotFound: boolean; + readonly isCollatorPoolTooLarge: boolean; + readonly isCollatorsPoolCountTooLow: boolean; + readonly isMinOrbiterDepositNotSet: boolean; + readonly isOrbiterAlreadyInPool: boolean; + readonly isOrbiterDepositNotFound: boolean; + readonly isOrbiterNotFound: boolean; + readonly isOrbiterStillInAPool: boolean; + readonly type: + | "CollatorAlreadyAdded" + | "CollatorNotFound" + | "CollatorPoolTooLarge" + | "CollatorsPoolCountTooLow" + | "MinOrbiterDepositNotSet" + | "OrbiterAlreadyInPool" + | "OrbiterDepositNotFound" + | "OrbiterNotFound" + | "OrbiterStillInAPool"; + } + + /** + * @name PalletRandomnessRequestState (494) + */ + export interface PalletRandomnessRequestState extends Struct { + readonly request: PalletRandomnessRequest; + readonly deposit: u128; + } + + /** + * @name PalletRandomnessRequest (495) + */ + export interface PalletRandomnessRequest extends Struct { + readonly refundAddress: H160; + readonly contractAddress: H160; + readonly fee: u128; + readonly gasLimit: u64; + readonly numWords: u8; + readonly salt: H256; + readonly info: PalletRandomnessRequestInfo; + } + + /** + * @name PalletRandomnessRequestInfo (496) + */ + export interface PalletRandomnessRequestInfo extends Enum { + readonly isBabeEpoch: boolean; + readonly asBabeEpoch: ITuple<[u64, u64]>; + readonly isLocal: boolean; + readonly asLocal: ITuple<[u32, u32]>; + readonly type: "BabeEpoch" | "Local"; + } + + /** + * @name PalletRandomnessRequestType (497) + */ + export interface PalletRandomnessRequestType extends Enum { + readonly isBabeEpoch: boolean; + readonly asBabeEpoch: u64; + readonly isLocal: boolean; + readonly asLocal: u32; + readonly type: "BabeEpoch" | "Local"; + } + + /** + * @name PalletRandomnessRandomnessResult (498) + */ + export interface PalletRandomnessRandomnessResult extends Struct { + readonly randomness: Option; + readonly requestCount: u64; + } + + /** + * @name PalletRandomnessError (499) + */ + export interface PalletRandomnessError extends Enum { + readonly isRequestCounterOverflowed: boolean; + readonly isRequestFeeOverflowed: boolean; + readonly isMustRequestAtLeastOneWord: boolean; + readonly isCannotRequestMoreWordsThanMax: boolean; + readonly isCannotRequestRandomnessAfterMaxDelay: boolean; + readonly isCannotRequestRandomnessBeforeMinDelay: boolean; + readonly isRequestDNE: boolean; + readonly isRequestCannotYetBeFulfilled: boolean; + readonly isOnlyRequesterCanIncreaseFee: boolean; + readonly isRequestHasNotExpired: boolean; + readonly isRandomnessResultDNE: boolean; + readonly isRandomnessResultNotFilled: boolean; + readonly type: + | "RequestCounterOverflowed" + | "RequestFeeOverflowed" + | "MustRequestAtLeastOneWord" + | "CannotRequestMoreWordsThanMax" + | "CannotRequestRandomnessAfterMaxDelay" + | "CannotRequestRandomnessBeforeMinDelay" + | "RequestDNE" + | "RequestCannotYetBeFulfilled" + | "OnlyRequesterCanIncreaseFee" + | "RequestHasNotExpired" + | "RandomnessResultDNE" + | "RandomnessResultNotFilled"; } /** - * @name AccountEthereumSignature (481) + * @name AccountEthereumSignature (501) */ export interface AccountEthereumSignature extends SpCoreEcdsaSignature {} /** - * @name FrameSystemExtensionsCheckSpecVersion (483) + * @name FrameSystemExtensionsCheckSpecVersion (503) */ export type FrameSystemExtensionsCheckSpecVersion = Null; /** - * @name FrameSystemExtensionsCheckTxVersion (484) + * @name FrameSystemExtensionsCheckTxVersion (504) */ export type FrameSystemExtensionsCheckTxVersion = Null; /** - * @name FrameSystemExtensionsCheckGenesis (485) + * @name FrameSystemExtensionsCheckGenesis (505) */ export type FrameSystemExtensionsCheckGenesis = Null; /** - * @name FrameSystemExtensionsCheckNonce (488) + * @name FrameSystemExtensionsCheckNonce (508) */ export interface FrameSystemExtensionsCheckNonce extends Compact {} /** - * @name FrameSystemExtensionsCheckWeight (489) + * @name FrameSystemExtensionsCheckWeight (509) */ export type FrameSystemExtensionsCheckWeight = Null; /** - * @name PalletTransactionPaymentChargeTransactionPayment (490) + * @name PalletTransactionPaymentChargeTransactionPayment (510) */ export interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} /** - * @name MoonbaseRuntimeRuntime (492) + * @name MoonbaseRuntimeRuntime (512) */ export type MoonbaseRuntimeRuntime = Null; } // declare module diff --git a/typescript-api/src/moonbase/interfaces/types.ts b/typescript-api/src/moonbase/interfaces/types.ts index 33a59918ac..d452d74075 100644 --- a/typescript-api/src/moonbase/interfaces/types.ts +++ b/typescript-api/src/moonbase/interfaces/types.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from "./empty/types"; +export * from "./moon/types"; diff --git a/typescript-api/src/moonbeam/interfaces/augment-api-consts.ts b/typescript-api/src/moonbeam/interfaces/augment-api-consts.ts index 2d0a3be555..26df988c55 100644 --- a/typescript-api/src/moonbeam/interfaces/augment-api-consts.ts +++ b/typescript-api/src/moonbeam/interfaces/augment-api-consts.ts @@ -424,6 +424,10 @@ declare module "@polkadot/api-base/types/consts" { [key: string]: Codec; }; transactionPayment: { + /** + * The polynomial that is applied in order to derive fee from length. + */ + lengthToFee: Vec & AugmentedConst; /** * A fee mulitplier for `Operational` extrinsics to compute "virtual tip" * to boost their `priority` @@ -449,10 +453,6 @@ declare module "@polkadot/api-base/types/consts" { * also amplify the impact of tips applied to `Operational` transactions. */ operationalFeeMultiplier: u8 & AugmentedConst; - /** - * The fee to be paid for making a transaction; the per-byte portion. - */ - transactionByteFee: u128 & AugmentedConst; /** * The polynomial that is applied in order to derive fee from weight. */ diff --git a/typescript-api/src/moonbeam/interfaces/augment-api-errors.ts b/typescript-api/src/moonbeam/interfaces/augment-api-errors.ts index 3dd2049921..e231cee6cb 100644 --- a/typescript-api/src/moonbeam/interfaces/augment-api-errors.ts +++ b/typescript-api/src/moonbeam/interfaces/augment-api-errors.ts @@ -118,10 +118,26 @@ declare module "@polkadot/api-base/types/errors" { * This account cannot set an author because it cannon afford the security deposit */ CannotAffordSecurityDeposit: AugmentedError; + /** + * Failed to decode T::Keys for `set_keys` + */ + DecodeKeysFailed: AugmentedError; + /** + * Failed to decode NimbusId for `set_keys` + */ + DecodeNimbusFailed: AugmentedError; /** * The association can't be cleared because it belongs to another account. */ NotYourAssociation: AugmentedError; + /** + * No existing NimbusId can be found for the account + */ + OldAuthorIdNotFound: AugmentedError; + /** + * Keys have wrong size + */ + WrongKeySize: AugmentedError; /** * Generic error */ @@ -622,6 +638,49 @@ declare module "@polkadot/api-base/types/errors" { */ [key: string]: AugmentedError; }; + moonbeamOrbiters: { + /** + * The collator is already added in orbiters program. + */ + CollatorAlreadyAdded: AugmentedError; + /** + * This collator is not in orbiters program. + */ + CollatorNotFound: AugmentedError; + /** + * There are already too many orbiters associated with this collator. + */ + CollatorPoolTooLarge: AugmentedError; + /** + * There are more collator pools than the number specified in the parameter. + */ + CollatorsPoolCountTooLow: AugmentedError; + /** + * The minimum deposit required to register as an orbiter has not yet been + * included in the onchain storage + */ + MinOrbiterDepositNotSet: AugmentedError; + /** + * This orbiter is already associated with this collator. + */ + OrbiterAlreadyInPool: AugmentedError; + /** + * This orbiter has not made a deposit + */ + OrbiterDepositNotFound: AugmentedError; + /** + * This orbiter is not found + */ + OrbiterNotFound: AugmentedError; + /** + * The orbiter is still at least in one pool + */ + OrbiterStillInAPool: AugmentedError; + /** + * Generic error + */ + [key: string]: AugmentedError; + }; parachainStaking: { AlreadyActive: AugmentedError; AlreadyDelegatedCandidate: AugmentedError; @@ -633,7 +692,7 @@ declare module "@polkadot/api-base/types/errors" { CandidateExists: AugmentedError; CandidateNotLeaving: AugmentedError; CannotDelegateIfLeaving: AugmentedError; - CannotDelegateLessThanLowestBottomWhenBottomIsFull: AugmentedError; + CannotDelegateLessThanOrEqualToLowestBottomWhenFull: AugmentedError; CannotGoOnlineIfLeaving: AugmentedError; CannotSetBelowMin: AugmentedError; DelegationBelowMin: AugmentedError; @@ -656,6 +715,7 @@ declare module "@polkadot/api-base/types/errors" { PendingDelegationRequestAlreadyExists: AugmentedError; PendingDelegationRequestDNE: AugmentedError; PendingDelegationRequestNotDueYet: AugmentedError; + PendingDelegationRevoke: AugmentedError; RoundLengthMustBeAtLeastTotalSelectedCollators: AugmentedError; TooLowCandidateCountToLeaveCandidates: AugmentedError; TooLowCandidateCountWeightHintCancelLeaveCandidates: AugmentedError; @@ -973,12 +1033,15 @@ declare module "@polkadot/api-base/types/errors" { DestinationNotInvertible: AugmentedError; DispatchWeightBiggerThanTotalWeight: AugmentedError; ErrorSending: AugmentedError; + FailedMultiLocationToJunction: AugmentedError; + FeePerSecondNotSet: AugmentedError; IndexAlreadyClaimed: AugmentedError; InvalidDest: AugmentedError; MaxWeightTransactReached: AugmentedError; NotCrossChainTransfer: AugmentedError; NotCrossChainTransferableCurrency: AugmentedError; NotOwner: AugmentedError; + SignedTransactNotAllowedForDestination: AugmentedError; TransactorInfoNotSet: AugmentedError; UnableToWithdrawAsset: AugmentedError; UnclaimedIndex: AugmentedError; diff --git a/typescript-api/src/moonbeam/interfaces/augment-api-events.ts b/typescript-api/src/moonbeam/interfaces/augment-api-events.ts index 46c3412855..f3ec9b1fea 100644 --- a/typescript-api/src/moonbeam/interfaces/augment-api-events.ts +++ b/typescript-api/src/moonbeam/interfaces/augment-api-events.ts @@ -38,8 +38,9 @@ import type { NimbusPrimitivesNimbusCryptoPublic, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, - ParachainStakingDelegationRequest, + ParachainStakingDelegationRequestsCancelledScheduledRequest, ParachainStakingDelegatorAdded, + SessionKeysPrimitivesVrfVrfCryptoPublic, SpRuntimeDispatchError, XcmTransactorRemoteTransactInfoWithMaxWeight, XcmV1MultiAsset, @@ -59,39 +60,72 @@ declare module "@polkadot/api-base/types/events" { /** * Removed all information related to an assetId and destroyed asset */ - ForeignAssetDestroyed: AugmentedEvent; + ForeignAssetDestroyed: AugmentedEvent< + ApiType, + [assetId: u128, assetType: MoonbeamRuntimeXcmConfigAssetType], + { assetId: u128; assetType: MoonbeamRuntimeXcmConfigAssetType } + >; /** * New asset with the asset manager is registered */ ForeignAssetRegistered: AugmentedEvent< ApiType, - [u128, MoonbeamRuntimeXcmConfigAssetType, MoonbeamRuntimeAssetConfigAssetRegistrarMetadata] + [ + assetId: u128, + asset: MoonbeamRuntimeXcmConfigAssetType, + metadata: MoonbeamRuntimeAssetConfigAssetRegistrarMetadata + ], + { + assetId: u128; + asset: MoonbeamRuntimeXcmConfigAssetType; + metadata: MoonbeamRuntimeAssetConfigAssetRegistrarMetadata; + } >; /** * Removed all information related to an assetId */ - ForeignAssetRemoved: AugmentedEvent; + ForeignAssetRemoved: AugmentedEvent< + ApiType, + [assetId: u128, assetType: MoonbeamRuntimeXcmConfigAssetType], + { assetId: u128; assetType: MoonbeamRuntimeXcmConfigAssetType } + >; /** * Changed the xcm type mapping for a given asset id */ - ForeignAssetTypeChanged: AugmentedEvent; + ForeignAssetTypeChanged: AugmentedEvent< + ApiType, + [assetId: u128, newAssetType: MoonbeamRuntimeXcmConfigAssetType], + { assetId: u128; newAssetType: MoonbeamRuntimeXcmConfigAssetType } + >; /** * Removed all information related to an assetId and destroyed asset */ - LocalAssetDestroyed: AugmentedEvent; + LocalAssetDestroyed: AugmentedEvent; /** * Local asset was created */ - LocalAssetRegistered: AugmentedEvent; + LocalAssetRegistered: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * Supported asset type for fee payment removed */ - SupportedAssetRemoved: AugmentedEvent; + SupportedAssetRemoved: AugmentedEvent< + ApiType, + [assetType: MoonbeamRuntimeXcmConfigAssetType], + { assetType: MoonbeamRuntimeXcmConfigAssetType } + >; /** * Changed the amount of units we are charging per execution second for a * given asset */ - UnitsPerSecondChanged: AugmentedEvent; + UnitsPerSecondChanged: AugmentedEvent< + ApiType, + [assetType: MoonbeamRuntimeXcmConfigAssetType, unitsPerSecond: u128], + { assetType: MoonbeamRuntimeXcmConfigAssetType; unitsPerSecond: u128 } + >; /** * Generic event */ @@ -101,78 +135,139 @@ declare module "@polkadot/api-base/types/events" { /** * An approval for account `delegate` was cancelled by `owner`. */ - ApprovalCancelled: AugmentedEvent; + ApprovalCancelled: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, delegate: AccountId20], + { assetId: u128; owner: AccountId20; delegate: AccountId20 } + >; /** * (Additional) funds have been approved for transfer to a destination account. */ - ApprovedTransfer: AugmentedEvent; + ApprovedTransfer: AugmentedEvent< + ApiType, + [assetId: u128, source: AccountId20, delegate: AccountId20, amount: u128], + { assetId: u128; source: AccountId20; delegate: AccountId20; amount: u128 } + >; /** * Some asset `asset_id` was frozen. */ - AssetFrozen: AugmentedEvent; + AssetFrozen: AugmentedEvent; /** * An asset has had its attributes changed by the `Force` origin. */ - AssetStatusChanged: AugmentedEvent; + AssetStatusChanged: AugmentedEvent; /** * Some asset `asset_id` was thawed. */ - AssetThawed: AugmentedEvent; + AssetThawed: AugmentedEvent; /** * Some assets were destroyed. */ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, balance: u128], + { assetId: u128; owner: AccountId20; balance: u128 } + >; /** * Some asset class was created. */ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * An asset class was destroyed. */ - Destroyed: AugmentedEvent; + Destroyed: AugmentedEvent; /** * Some asset class was force-created. */ - ForceCreated: AugmentedEvent; + ForceCreated: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * Some account `who` was frozen. */ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were issued. */ - Issued: AugmentedEvent; + Issued: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, totalSupply: u128], + { assetId: u128; owner: AccountId20; totalSupply: u128 } + >; /** * Metadata has been cleared for an asset. */ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent; /** * New metadata has been set for an asset. */ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [assetId: u128, name: Bytes, symbol_: Bytes, decimals: u8, isFrozen: bool], + { assetId: u128; name: Bytes; symbol: Bytes; decimals: u8; isFrozen: bool } + >; /** * The owner changed. */ - OwnerChanged: AugmentedEvent; + OwnerChanged: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * The management team changed. */ - TeamChanged: AugmentedEvent; + TeamChanged: AugmentedEvent< + ApiType, + [assetId: u128, issuer: AccountId20, admin: AccountId20, freezer: AccountId20], + { assetId: u128; issuer: AccountId20; admin: AccountId20; freezer: AccountId20 } + >; /** * Some account `who` was thawed. */ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were transferred. */ - Transferred: AugmentedEvent; + Transferred: AugmentedEvent< + ApiType, + [assetId: u128, from: AccountId20, to: AccountId20, amount: u128], + { assetId: u128; from: AccountId20; to: AccountId20; amount: u128 } + >; /** * An `amount` was transferred in its entirety from `owner` to * `destination` by the approved `delegate`. */ TransferredApproved: AugmentedEvent< ApiType, - [u128, AccountId20, AccountId20, AccountId20, u128] + [ + assetId: u128, + owner: AccountId20, + delegate: AccountId20, + destination: AccountId20, + amount: u128 + ], + { + assetId: u128; + owner: AccountId20; + delegate: AccountId20; + destination: AccountId20; + amount: u128; + } >; /** * Generic event @@ -183,7 +278,7 @@ declare module "@polkadot/api-base/types/events" { /** * The amount of eligible authors for the filter to select has been changed. */ - EligibleUpdated: AugmentedEvent; + EligibleUpdated: AugmentedEvent; /** * Generic event */ @@ -191,25 +286,53 @@ declare module "@polkadot/api-base/types/events" { }; authorMapping: { /** - * An NimbusId has been de-registered, and its AccountId mapping removed. + * A NimbusId has been registered and mapped to an AccountId. */ - AuthorDeRegistered: AugmentedEvent; + KeysRegistered: AugmentedEvent< + ApiType, + [ + nimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + nimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; + } + >; /** - * A NimbusId has been registered and mapped to an AccountId. + * An NimbusId has been de-registered, and its AccountId mapping removed. */ - AuthorRegistered: AugmentedEvent; + KeysRemoved: AugmentedEvent< + ApiType, + [ + nimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + nimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; + } + >; /** * An NimbusId has been registered, replacing a previous registration and * its mapping. */ - AuthorRotated: AugmentedEvent; - /** - * An NimbusId has been forcibly deregistered after not being rotated or - * cleaned up. The reporteing account has been rewarded accordingly. - */ - DefunctAuthorBusted: AugmentedEvent< + KeysRotated: AugmentedEvent< ApiType, - [NimbusPrimitivesNimbusCryptoPublic, AccountId20] + [ + newNimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + newNimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic; + } >; /** * Generic event @@ -220,48 +343,95 @@ declare module "@polkadot/api-base/types/events" { /** * A balance was set by root. */ - BalanceSet: AugmentedEvent; + BalanceSet: AugmentedEvent< + ApiType, + [who: AccountId20, free: u128, reserved: u128], + { who: AccountId20; free: u128; reserved: u128 } + >; /** * Some amount was deposited (e.g. for transaction fees). */ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * An account was removed whose balance was non-zero but below * ExistentialDeposit, resulting in an outright loss. */ - DustLost: AugmentedEvent; + DustLost: AugmentedEvent< + ApiType, + [account: AccountId20, amount: u128], + { account: AccountId20; amount: u128 } + >; /** * An account was created with some free balance. */ - Endowed: AugmentedEvent; + Endowed: AugmentedEvent< + ApiType, + [account: AccountId20, freeBalance: u128], + { account: AccountId20; freeBalance: u128 } + >; /** * Some balance was reserved (moved from free to reserved). */ - Reserved: AugmentedEvent; + Reserved: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Some balance was moved from the reserve of the first account to the * second account. Final argument indicates the destination balance type. */ ReserveRepatriated: AugmentedEvent< ApiType, - [AccountId20, AccountId20, u128, FrameSupportTokensMiscBalanceStatus] + [ + from: AccountId20, + to: AccountId20, + amount: u128, + destinationStatus: FrameSupportTokensMiscBalanceStatus + ], + { + from: AccountId20; + to: AccountId20; + amount: u128; + destinationStatus: FrameSupportTokensMiscBalanceStatus; + } >; /** * Some amount was removed from the account (e.g. for misbehavior). */ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Transfer succeeded. */ - Transfer: AugmentedEvent; + Transfer: AugmentedEvent< + ApiType, + [from: AccountId20, to: AccountId20, amount: u128], + { from: AccountId20; to: AccountId20; amount: u128 } + >; /** * Some balance was unreserved (moved from reserved to free). */ - Unreserved: AugmentedEvent; + Unreserved: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Some amount was withdrawn from the account (e.g. for transaction fees). */ - Withdraw: AugmentedEvent; + Withdraw: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Generic event */ @@ -281,35 +451,55 @@ declare module "@polkadot/api-base/types/events" { /** * A motion was approved by the required threshold. */ - Approved: AugmentedEvent; + Approved: AugmentedEvent; /** * A proposal was closed because its threshold was reached or after its * duration was up. */ - Closed: AugmentedEvent; + Closed: AugmentedEvent< + ApiType, + [proposalHash: H256, yes: u32, no: u32], + { proposalHash: H256; yes: u32; no: u32 } + >; /** * A motion was not approved by the required threshold. */ - Disapproved: AugmentedEvent; + Disapproved: AugmentedEvent; /** * A motion was executed; result will be `Ok` if it returned without error. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A single member did some action; result will be `Ok` if it returned * without error. */ - MemberExecuted: AugmentedEvent]>; + MemberExecuted: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A motion (given hash) has been proposed (by given account) with a * threshold (given `MemberCount`). */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [account: AccountId20, proposalIndex: u32, proposalHash: H256, threshold: u32], + { account: AccountId20; proposalIndex: u32; proposalHash: H256; threshold: u32 } + >; /** * A motion (given hash) has been voted on by given account, leaving a * tally (yes votes and no votes given respectively as `MemberCount`). */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [account: AccountId20, proposalHash: H256, voted: bool, yes: u32, no: u32], + { account: AccountId20; proposalHash: H256; voted: bool; yes: u32; no: u32 } + >; /** * Generic event */ @@ -376,19 +566,27 @@ declare module "@polkadot/api-base/types/events" { /** * A proposal_hash has been blacklisted permanently. */ - Blacklisted: AugmentedEvent; + Blacklisted: AugmentedEvent; /** * A referendum has been cancelled. */ - Cancelled: AugmentedEvent; + Cancelled: AugmentedEvent; /** * An account has delegated their vote to another account. */ - Delegated: AugmentedEvent; + Delegated: AugmentedEvent< + ApiType, + [who: AccountId20, target: AccountId20], + { who: AccountId20; target: AccountId20 } + >; /** * A proposal has been enacted. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [refIndex: u32, result: Result], + { refIndex: u32; result: Result } + >; /** * An external proposal has been tabled. */ @@ -396,59 +594,103 @@ declare module "@polkadot/api-base/types/events" { /** * A proposal has been rejected by referendum. */ - NotPassed: AugmentedEvent; + NotPassed: AugmentedEvent; /** * A proposal has been approved by referendum. */ - Passed: AugmentedEvent; + Passed: AugmentedEvent; /** * A proposal could not be executed because its preimage was invalid. */ - PreimageInvalid: AugmentedEvent; + PreimageInvalid: AugmentedEvent< + ApiType, + [proposalHash: H256, refIndex: u32], + { proposalHash: H256; refIndex: u32 } + >; /** * A proposal could not be executed because its preimage was missing. */ - PreimageMissing: AugmentedEvent; + PreimageMissing: AugmentedEvent< + ApiType, + [proposalHash: H256, refIndex: u32], + { proposalHash: H256; refIndex: u32 } + >; /** * A proposal's preimage was noted, and the deposit taken. */ - PreimageNoted: AugmentedEvent; + PreimageNoted: AugmentedEvent< + ApiType, + [proposalHash: H256, who: AccountId20, deposit: u128], + { proposalHash: H256; who: AccountId20; deposit: u128 } + >; /** * A registered preimage was removed and the deposit collected by the reaper. */ - PreimageReaped: AugmentedEvent; + PreimageReaped: AugmentedEvent< + ApiType, + [proposalHash: H256, provider: AccountId20, deposit: u128, reaper: AccountId20], + { proposalHash: H256; provider: AccountId20; deposit: u128; reaper: AccountId20 } + >; /** * A proposal preimage was removed and used (the deposit was returned). */ - PreimageUsed: AugmentedEvent; + PreimageUsed: AugmentedEvent< + ApiType, + [proposalHash: H256, provider: AccountId20, deposit: u128], + { proposalHash: H256; provider: AccountId20; deposit: u128 } + >; /** * A motion has been proposed by a public account. */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128], + { proposalIndex: u32; deposit: u128 } + >; /** * An account has secconded a proposal */ - Seconded: AugmentedEvent; + Seconded: AugmentedEvent< + ApiType, + [seconder: AccountId20, propIndex: u32], + { seconder: AccountId20; propIndex: u32 } + >; /** * A referendum has begun. */ - Started: AugmentedEvent; + Started: AugmentedEvent< + ApiType, + [refIndex: u32, threshold: PalletDemocracyVoteThreshold], + { refIndex: u32; threshold: PalletDemocracyVoteThreshold } + >; /** * A public proposal has been tabled for referendum vote. */ - Tabled: AugmentedEvent]>; + Tabled: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128, depositors: Vec], + { proposalIndex: u32; deposit: u128; depositors: Vec } + >; /** * An account has cancelled a previous delegation operation. */ - Undelegated: AugmentedEvent; + Undelegated: AugmentedEvent; /** * An external proposal has been vetoed. */ - Vetoed: AugmentedEvent; + Vetoed: AugmentedEvent< + ApiType, + [who: AccountId20, proposalHash: H256, until: u32], + { who: AccountId20; proposalHash: H256; until: u32 } + >; /** * An account has voted in a referendum */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [voter: AccountId20, refIndex: u32, vote: PalletDemocracyVoteAccountVote], + { voter: AccountId20; refIndex: u32; vote: PalletDemocracyVoteAccountVote } + >; /** * Generic event */ @@ -536,44 +778,76 @@ declare module "@polkadot/api-base/types/events" { /** * A name was cleared, and the given balance returned. */ - IdentityCleared: AugmentedEvent; + IdentityCleared: AugmentedEvent< + ApiType, + [who: AccountId20, deposit: u128], + { who: AccountId20; deposit: u128 } + >; /** * A name was removed and the given balance slashed. */ - IdentityKilled: AugmentedEvent; + IdentityKilled: AugmentedEvent< + ApiType, + [who: AccountId20, deposit: u128], + { who: AccountId20; deposit: u128 } + >; /** * A name was set or reset (which will remove all judgements). */ - IdentitySet: AugmentedEvent; + IdentitySet: AugmentedEvent; /** * A judgement was given by a registrar. */ - JudgementGiven: AugmentedEvent; + JudgementGiven: AugmentedEvent< + ApiType, + [target: AccountId20, registrarIndex: u32], + { target: AccountId20; registrarIndex: u32 } + >; /** * A judgement was asked from a registrar. */ - JudgementRequested: AugmentedEvent; + JudgementRequested: AugmentedEvent< + ApiType, + [who: AccountId20, registrarIndex: u32], + { who: AccountId20; registrarIndex: u32 } + >; /** * A judgement request was retracted. */ - JudgementUnrequested: AugmentedEvent; + JudgementUnrequested: AugmentedEvent< + ApiType, + [who: AccountId20, registrarIndex: u32], + { who: AccountId20; registrarIndex: u32 } + >; /** * A registrar was added. */ - RegistrarAdded: AugmentedEvent; + RegistrarAdded: AugmentedEvent; /** * A sub-identity was added to an identity and the deposit paid. */ - SubIdentityAdded: AugmentedEvent; + SubIdentityAdded: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * A sub-identity was removed from an identity and the deposit freed. */ - SubIdentityRemoved: AugmentedEvent; + SubIdentityRemoved: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * A sub-identity was cleared, and the given deposit repatriated from the * main identity account to the sub-identity account. */ - SubIdentityRevoked: AugmentedEvent; + SubIdentityRevoked: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * Generic event */ @@ -583,78 +857,139 @@ declare module "@polkadot/api-base/types/events" { /** * An approval for account `delegate` was cancelled by `owner`. */ - ApprovalCancelled: AugmentedEvent; + ApprovalCancelled: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, delegate: AccountId20], + { assetId: u128; owner: AccountId20; delegate: AccountId20 } + >; /** * (Additional) funds have been approved for transfer to a destination account. */ - ApprovedTransfer: AugmentedEvent; + ApprovedTransfer: AugmentedEvent< + ApiType, + [assetId: u128, source: AccountId20, delegate: AccountId20, amount: u128], + { assetId: u128; source: AccountId20; delegate: AccountId20; amount: u128 } + >; /** * Some asset `asset_id` was frozen. */ - AssetFrozen: AugmentedEvent; + AssetFrozen: AugmentedEvent; /** * An asset has had its attributes changed by the `Force` origin. */ - AssetStatusChanged: AugmentedEvent; + AssetStatusChanged: AugmentedEvent; /** * Some asset `asset_id` was thawed. */ - AssetThawed: AugmentedEvent; + AssetThawed: AugmentedEvent; /** * Some assets were destroyed. */ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, balance: u128], + { assetId: u128; owner: AccountId20; balance: u128 } + >; /** * Some asset class was created. */ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * An asset class was destroyed. */ - Destroyed: AugmentedEvent; + Destroyed: AugmentedEvent; /** * Some asset class was force-created. */ - ForceCreated: AugmentedEvent; + ForceCreated: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * Some account `who` was frozen. */ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were issued. */ - Issued: AugmentedEvent; + Issued: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, totalSupply: u128], + { assetId: u128; owner: AccountId20; totalSupply: u128 } + >; /** * Metadata has been cleared for an asset. */ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent; /** * New metadata has been set for an asset. */ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [assetId: u128, name: Bytes, symbol_: Bytes, decimals: u8, isFrozen: bool], + { assetId: u128; name: Bytes; symbol: Bytes; decimals: u8; isFrozen: bool } + >; /** * The owner changed. */ - OwnerChanged: AugmentedEvent; + OwnerChanged: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * The management team changed. */ - TeamChanged: AugmentedEvent; + TeamChanged: AugmentedEvent< + ApiType, + [assetId: u128, issuer: AccountId20, admin: AccountId20, freezer: AccountId20], + { assetId: u128; issuer: AccountId20; admin: AccountId20; freezer: AccountId20 } + >; /** * Some account `who` was thawed. */ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were transferred. */ - Transferred: AugmentedEvent; + Transferred: AugmentedEvent< + ApiType, + [assetId: u128, from: AccountId20, to: AccountId20, amount: u128], + { assetId: u128; from: AccountId20; to: AccountId20; amount: u128 } + >; /** * An `amount` was transferred in its entirety from `owner` to * `destination` by the approved `delegate`. */ TransferredApproved: AugmentedEvent< ApiType, - [u128, AccountId20, AccountId20, AccountId20, u128] + [ + assetId: u128, + owner: AccountId20, + delegate: AccountId20, + destination: AccountId20, + amount: u128 + ], + { + assetId: u128; + owner: AccountId20; + delegate: AccountId20; + destination: AccountId20; + amount: u128; + } >; /** * Generic event @@ -669,11 +1004,19 @@ declare module "@polkadot/api-base/types/events" { /** * The call to resume on_idle XCM execution failed with inner error */ - FailedToResumeIdleXcmExecution: AugmentedEvent; + FailedToResumeIdleXcmExecution: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * The call to suspend on_idle XCM execution failed with inner error */ - FailedToSuspendIdleXcmExecution: AugmentedEvent; + FailedToSuspendIdleXcmExecution: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * The chain returned to its normal operating state */ @@ -687,15 +1030,19 @@ declare module "@polkadot/api-base/types/events" { /** * Migration completed */ - MigrationCompleted: AugmentedEvent; + MigrationCompleted: AugmentedEvent< + ApiType, + [migrationName: Bytes, consumedWeight: u64], + { migrationName: Bytes; consumedWeight: u64 } + >; /** * Migration started */ - MigrationStarted: AugmentedEvent; + MigrationStarted: AugmentedEvent; /** * Runtime upgrade completed */ - RuntimeUpgradeCompleted: AugmentedEvent; + RuntimeUpgradeCompleted: AugmentedEvent; /** * Runtime upgrade started */ @@ -705,140 +1052,376 @@ declare module "@polkadot/api-base/types/events" { */ [key: string]: AugmentedEvent; }; + moonbeamOrbiters: { + /** + * An orbiter join a collator pool + */ + OrbiterJoinCollatorPool: AugmentedEvent< + ApiType, + [collator: AccountId20, orbiter: AccountId20], + { collator: AccountId20; orbiter: AccountId20 } + >; + /** + * An orbiter leave a collator pool + */ + OrbiterLeaveCollatorPool: AugmentedEvent< + ApiType, + [collator: AccountId20, orbiter: AccountId20], + { collator: AccountId20; orbiter: AccountId20 } + >; + /** + * An orbiter has registered + */ + OrbiterRegistered: AugmentedEvent< + ApiType, + [account: AccountId20, deposit: u128], + { account: AccountId20; deposit: u128 } + >; + /** + * Paid the orbiter account the balance as liquid rewards. + */ + OrbiterRewarded: AugmentedEvent< + ApiType, + [account: AccountId20, rewards: u128], + { account: AccountId20; rewards: u128 } + >; + OrbiterRotation: AugmentedEvent< + ApiType, + [collator: AccountId20, oldOrbiter: Option, newOrbiter: Option], + { collator: AccountId20; oldOrbiter: Option; newOrbiter: Option } + >; + /** + * An orbiter has unregistered + */ + OrbiterUnregistered: AugmentedEvent< + ApiType, + [account: AccountId20], + { account: AccountId20 } + >; + /** + * Generic event + */ + [key: string]: AugmentedEvent; + }; parachainStaking: { /** * Set blocks per round */ - BlocksPerRoundSet: AugmentedEvent; + BlocksPerRoundSet: AugmentedEvent< + ApiType, + [ + currentRound: u32, + firstBlock: u32, + old: u32, + new_: u32, + newPerRoundInflationMin: Perbill, + newPerRoundInflationIdeal: Perbill, + newPerRoundInflationMax: Perbill + ], + { + currentRound: u32; + firstBlock: u32; + old: u32; + new_: u32; + newPerRoundInflationMin: Perbill; + newPerRoundInflationIdeal: Perbill; + newPerRoundInflationMax: Perbill; + } + >; /** * Cancelled request to decrease candidate's bond. */ - CancelledCandidateBondLess: AugmentedEvent; + CancelledCandidateBondLess: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, executeRound: u32], + { candidate: AccountId20; amount: u128; executeRound: u32 } + >; /** * Cancelled request to leave the set of candidates. */ - CancelledCandidateExit: AugmentedEvent; + CancelledCandidateExit: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** * Cancelled request to change an existing delegation. */ CancelledDelegationRequest: AugmentedEvent< ApiType, - [AccountId20, ParachainStakingDelegationRequest] + [ + delegator: AccountId20, + cancelledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest, + collator: AccountId20 + ], + { + delegator: AccountId20; + cancelledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest; + collator: AccountId20; + } >; /** * Candidate rejoins the set of collator candidates. */ - CandidateBackOnline: AugmentedEvent; + CandidateBackOnline: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** - * Сandidate has decreased a self bond. + * Candidate has decreased a self bond. */ - CandidateBondedLess: AugmentedEvent; + CandidateBondedLess: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, newBond: u128], + { candidate: AccountId20; amount: u128; newBond: u128 } + >; /** - * Сandidate has increased a self bond. + * Candidate has increased a self bond. */ - CandidateBondedMore: AugmentedEvent; + CandidateBondedMore: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, newTotalBond: u128], + { candidate: AccountId20; amount: u128; newTotalBond: u128 } + >; /** - * Сandidate requested to decrease a self bond. + * Candidate requested to decrease a self bond. */ - CandidateBondLessRequested: AugmentedEvent; + CandidateBondLessRequested: AugmentedEvent< + ApiType, + [candidate: AccountId20, amountToDecrease: u128, executeRound: u32], + { candidate: AccountId20; amountToDecrease: u128; executeRound: u32 } + >; /** * Candidate has left the set of candidates. */ - CandidateLeft: AugmentedEvent; + CandidateLeft: AugmentedEvent< + ApiType, + [exCandidate: AccountId20, unlockedAmount: u128, newTotalAmtLocked: u128], + { exCandidate: AccountId20; unlockedAmount: u128; newTotalAmtLocked: u128 } + >; /** - * Сandidate has requested to leave the set of candidates. + * Candidate has requested to leave the set of candidates. */ - CandidateScheduledExit: AugmentedEvent; + CandidateScheduledExit: AugmentedEvent< + ApiType, + [exitAllowedRound: u32, candidate: AccountId20, scheduledExit: u32], + { exitAllowedRound: u32; candidate: AccountId20; scheduledExit: u32 } + >; /** * Candidate temporarily leave the set of collator candidates without unbonding. */ - CandidateWentOffline: AugmentedEvent; + CandidateWentOffline: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** * Candidate selected for collators. Total Exposed Amount includes all delegations. */ - CollatorChosen: AugmentedEvent; + CollatorChosen: AugmentedEvent< + ApiType, + [round: u32, collatorAccount: AccountId20, totalExposedAmount: u128], + { round: u32; collatorAccount: AccountId20; totalExposedAmount: u128 } + >; /** * Set collator commission to this value. */ - CollatorCommissionSet: AugmentedEvent; + CollatorCommissionSet: AugmentedEvent< + ApiType, + [old: Perbill, new_: Perbill], + { old: Perbill; new_: Perbill } + >; /** * New delegation (increase of the existing one). */ Delegation: AugmentedEvent< ApiType, - [AccountId20, u128, AccountId20, ParachainStakingDelegatorAdded] + [ + delegator: AccountId20, + lockedAmount: u128, + candidate: AccountId20, + delegatorPosition: ParachainStakingDelegatorAdded + ], + { + delegator: AccountId20; + lockedAmount: u128; + candidate: AccountId20; + delegatorPosition: ParachainStakingDelegatorAdded; + } + >; + DelegationDecreased: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amount: u128, inTop: bool], + { delegator: AccountId20; candidate: AccountId20; amount: u128; inTop: bool } >; - DelegationDecreased: AugmentedEvent; /** * Delegator requested to decrease a bond for the collator candidate. */ - DelegationDecreaseScheduled: AugmentedEvent; - DelegationIncreased: AugmentedEvent; + DelegationDecreaseScheduled: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amountToDecrease: u128, executeRound: u32], + { + delegator: AccountId20; + candidate: AccountId20; + amountToDecrease: u128; + executeRound: u32; + } + >; + DelegationIncreased: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amount: u128, inTop: bool], + { delegator: AccountId20; candidate: AccountId20; amount: u128; inTop: bool } + >; /** * Delegation kicked. */ - DelegationKicked: AugmentedEvent; + DelegationKicked: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; candidate: AccountId20; unstakedAmount: u128 } + >; /** * Delegator requested to revoke delegation. */ - DelegationRevocationScheduled: AugmentedEvent; + DelegationRevocationScheduled: AugmentedEvent< + ApiType, + [round: u32, delegator: AccountId20, candidate: AccountId20, scheduledExit: u32], + { round: u32; delegator: AccountId20; candidate: AccountId20; scheduledExit: u32 } + >; /** * Delegation revoked. */ - DelegationRevoked: AugmentedEvent; + DelegationRevoked: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; candidate: AccountId20; unstakedAmount: u128 } + >; /** * Cancelled a pending request to exit the set of delegators. */ - DelegatorExitCancelled: AugmentedEvent; + DelegatorExitCancelled: AugmentedEvent< + ApiType, + [delegator: AccountId20], + { delegator: AccountId20 } + >; /** * Delegator requested to leave the set of delegators. */ - DelegatorExitScheduled: AugmentedEvent; + DelegatorExitScheduled: AugmentedEvent< + ApiType, + [round: u32, delegator: AccountId20, scheduledExit: u32], + { round: u32; delegator: AccountId20; scheduledExit: u32 } + >; /** * Delegator has left the set of delegators. */ - DelegatorLeft: AugmentedEvent; + DelegatorLeft: AugmentedEvent< + ApiType, + [delegator: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; unstakedAmount: u128 } + >; /** * Delegation from candidate state has been remove. */ - DelegatorLeftCandidate: AugmentedEvent; + DelegatorLeftCandidate: AugmentedEvent< + ApiType, + [ + delegator: AccountId20, + candidate: AccountId20, + unstakedAmount: u128, + totalCandidateStaked: u128 + ], + { + delegator: AccountId20; + candidate: AccountId20; + unstakedAmount: u128; + totalCandidateStaked: u128; + } + >; /** * Annual inflation input (first 3) was used to derive new per-round * inflation (last 3) */ - InflationSet: AugmentedEvent; + InflationSet: AugmentedEvent< + ApiType, + [ + annualMin: Perbill, + annualIdeal: Perbill, + annualMax: Perbill, + roundMin: Perbill, + roundIdeal: Perbill, + roundMax: Perbill + ], + { + annualMin: Perbill; + annualIdeal: Perbill; + annualMax: Perbill; + roundMin: Perbill; + roundIdeal: Perbill; + roundMax: Perbill; + } + >; /** * Account joined the set of collator candidates. */ - JoinedCollatorCandidates: AugmentedEvent; + JoinedCollatorCandidates: AugmentedEvent< + ApiType, + [account: AccountId20, amountLocked: u128, newTotalAmtLocked: u128], + { account: AccountId20; amountLocked: u128; newTotalAmtLocked: u128 } + >; /** * Started new round. */ - NewRound: AugmentedEvent; + NewRound: AugmentedEvent< + ApiType, + [startingBlock: u32, round: u32, selectedCollatorsNumber: u32, totalBalance: u128], + { startingBlock: u32; round: u32; selectedCollatorsNumber: u32; totalBalance: u128 } + >; /** * Account (re)set for parachain bond treasury. */ - ParachainBondAccountSet: AugmentedEvent; + ParachainBondAccountSet: AugmentedEvent< + ApiType, + [old: AccountId20, new_: AccountId20], + { old: AccountId20; new_: AccountId20 } + >; /** * Percent of inflation reserved for parachain bond (re)set. */ - ParachainBondReservePercentSet: AugmentedEvent; + ParachainBondReservePercentSet: AugmentedEvent< + ApiType, + [old: Percent, new_: Percent], + { old: Percent; new_: Percent } + >; /** * Transferred to account which holds funds reserved for parachain bond. */ - ReservedForParachainBond: AugmentedEvent; + ReservedForParachainBond: AugmentedEvent< + ApiType, + [account: AccountId20, value: u128], + { account: AccountId20; value: u128 } + >; /** * Paid the account (delegator or collator) the balance as liquid rewards. */ - Rewarded: AugmentedEvent; + Rewarded: AugmentedEvent< + ApiType, + [account: AccountId20, rewards: u128], + { account: AccountId20; rewards: u128 } + >; /** * Staking expectations set. */ - StakeExpectationsSet: AugmentedEvent; + StakeExpectationsSet: AugmentedEvent< + ApiType, + [expectMin: u128, expectIdeal: u128, expectMax: u128], + { expectMin: u128; expectIdeal: u128; expectMax: u128 } + >; /** * Set total selected candidates to this value. */ - TotalSelectedSet: AugmentedEvent; + TotalSelectedSet: AugmentedEvent; /** * Generic event */ @@ -1006,26 +1589,74 @@ declare module "@polkadot/api-base/types/events" { /** * An announcement was placed to make a call in the future. */ - Announced: AugmentedEvent; + Announced: AugmentedEvent< + ApiType, + [real: AccountId20, proxy: AccountId20, callHash: H256], + { real: AccountId20; proxy: AccountId20; callHash: H256 } + >; /** * Anonymous account has been created by new proxy with given * disambiguation index and proxy type. */ AnonymousCreated: AugmentedEvent< ApiType, - [AccountId20, AccountId20, MoonbeamRuntimeProxyType, u16] + [ + anonymous: AccountId20, + who: AccountId20, + proxyType: MoonbeamRuntimeProxyType, + disambiguationIndex: u16 + ], + { + anonymous: AccountId20; + who: AccountId20; + proxyType: MoonbeamRuntimeProxyType; + disambiguationIndex: u16; + } >; /** * A proxy was added. */ ProxyAdded: AugmentedEvent< ApiType, - [AccountId20, AccountId20, MoonbeamRuntimeProxyType, u32] + [ + delegator: AccountId20, + delegatee: AccountId20, + proxyType: MoonbeamRuntimeProxyType, + delay: u32 + ], + { + delegator: AccountId20; + delegatee: AccountId20; + proxyType: MoonbeamRuntimeProxyType; + delay: u32; + } >; /** * A proxy was executed correctly, with the given. */ - ProxyExecuted: AugmentedEvent]>; + ProxyExecuted: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; + /** + * A proxy was removed. + */ + ProxyRemoved: AugmentedEvent< + ApiType, + [ + delegator: AccountId20, + delegatee: AccountId20, + proxyType: MoonbeamRuntimeProxyType, + delay: u32 + ], + { + delegator: AccountId20; + delegatee: AccountId20; + proxyType: MoonbeamRuntimeProxyType; + delay: u32; + } + >; /** * Generic event */ @@ -1037,23 +1668,29 @@ declare module "@polkadot/api-base/types/events" { */ CallLookupFailed: AugmentedEvent< ApiType, - [ITuple<[u32, u32]>, Option, FrameSupportScheduleLookupError] + [task: ITuple<[u32, u32]>, id: Option, error: FrameSupportScheduleLookupError], + { task: ITuple<[u32, u32]>; id: Option; error: FrameSupportScheduleLookupError } >; /** * Canceled some task. */ - Canceled: AugmentedEvent; + Canceled: AugmentedEvent; /** * Dispatched some task. */ Dispatched: AugmentedEvent< ApiType, - [ITuple<[u32, u32]>, Option, Result] + [task: ITuple<[u32, u32]>, id: Option, result: Result], + { + task: ITuple<[u32, u32]>; + id: Option; + result: Result; + } >; /** * Scheduled some task. */ - Scheduled: AugmentedEvent; + Scheduled: AugmentedEvent; /** * Generic event */ @@ -1069,24 +1706,33 @@ declare module "@polkadot/api-base/types/events" { */ ExtrinsicFailed: AugmentedEvent< ApiType, - [SpRuntimeDispatchError, FrameSupportWeightsDispatchInfo] + [dispatchError: SpRuntimeDispatchError, dispatchInfo: FrameSupportWeightsDispatchInfo], + { dispatchError: SpRuntimeDispatchError; dispatchInfo: FrameSupportWeightsDispatchInfo } >; /** * An extrinsic completed successfully. */ - ExtrinsicSuccess: AugmentedEvent; + ExtrinsicSuccess: AugmentedEvent< + ApiType, + [dispatchInfo: FrameSupportWeightsDispatchInfo], + { dispatchInfo: FrameSupportWeightsDispatchInfo } + >; /** * An account was reaped. */ - KilledAccount: AugmentedEvent; + KilledAccount: AugmentedEvent; /** * A new account was created. */ - NewAccount: AugmentedEvent; + NewAccount: AugmentedEvent; /** * On on-chain remark happened. */ - Remarked: AugmentedEvent; + Remarked: AugmentedEvent< + ApiType, + [sender: AccountId20, hash_: H256], + { sender: AccountId20; hash_: H256 } + >; /** * Generic event */ @@ -1096,35 +1742,55 @@ declare module "@polkadot/api-base/types/events" { /** * A motion was approved by the required threshold. */ - Approved: AugmentedEvent; + Approved: AugmentedEvent; /** * A proposal was closed because its threshold was reached or after its * duration was up. */ - Closed: AugmentedEvent; + Closed: AugmentedEvent< + ApiType, + [proposalHash: H256, yes: u32, no: u32], + { proposalHash: H256; yes: u32; no: u32 } + >; /** * A motion was not approved by the required threshold. */ - Disapproved: AugmentedEvent; + Disapproved: AugmentedEvent; /** * A motion was executed; result will be `Ok` if it returned without error. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A single member did some action; result will be `Ok` if it returned * without error. */ - MemberExecuted: AugmentedEvent]>; + MemberExecuted: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A motion (given hash) has been proposed (by given account) with a * threshold (given `MemberCount`). */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [account: AccountId20, proposalIndex: u32, proposalHash: H256, threshold: u32], + { account: AccountId20; proposalIndex: u32; proposalHash: H256; threshold: u32 } + >; /** * A motion (given hash) has been voted on by given account, leaving a * tally (yes votes and no votes given respectively as `MemberCount`). */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [account: AccountId20, proposalHash: H256, voted: bool, yes: u32, no: u32], + { account: AccountId20; proposalHash: H256; voted: bool; yes: u32; no: u32 } + >; /** * Generic event */ @@ -1134,31 +1800,39 @@ declare module "@polkadot/api-base/types/events" { /** * Some funds have been allocated. */ - Awarded: AugmentedEvent; + Awarded: AugmentedEvent< + ApiType, + [proposalIndex: u32, award: u128, account: AccountId20], + { proposalIndex: u32; award: u128; account: AccountId20 } + >; /** * Some of our funds have been burnt. */ - Burnt: AugmentedEvent; + Burnt: AugmentedEvent; /** * Some funds have been deposited. */ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent; /** * New proposal. */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent; /** * A proposal was rejected; funds were slashed. */ - Rejected: AugmentedEvent; + Rejected: AugmentedEvent< + ApiType, + [proposalIndex: u32, slashed: u128], + { proposalIndex: u32; slashed: u128 } + >; /** * Spending has finished; this is the amount that rolls over until next spend. */ - Rollover: AugmentedEvent; + Rollover: AugmentedEvent; /** * We have ended a spend period and will now allocate funds. */ - Spending: AugmentedEvent; + Spending: AugmentedEvent; /** * Generic event */ @@ -1173,11 +1847,19 @@ declare module "@polkadot/api-base/types/events" { * Batch of dispatches did not complete fully. Index of first failing * dispatch given, as well as the error. */ - BatchInterrupted: AugmentedEvent; + BatchInterrupted: AugmentedEvent< + ApiType, + [index: u32, error: SpRuntimeDispatchError], + { index: u32; error: SpRuntimeDispatchError } + >; /** * A call was dispatched. */ - DispatchedAs: AugmentedEvent]>; + DispatchedAs: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; /** * A single item within a Batch of dispatches has completed with no error. */ @@ -1226,34 +1908,79 @@ declare module "@polkadot/api-base/types/events" { [key: string]: AugmentedEvent; }; xcmTransactor: { - DeRegisteredDerivative: AugmentedEvent; + DeRegisteredDerivative: AugmentedEvent; + /** + * Set dest fee per second + */ + DestFeePerSecondChanged: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation, feePerSecond: u128], + { location: XcmV1MultiLocation; feePerSecond: u128 } + >; + /** + * Remove dest fee per second + */ + DestFeePerSecondRemoved: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation], + { location: XcmV1MultiLocation } + >; /** * Registered a derivative index for an account id. */ - RegisteredDerivative: AugmentedEvent; + RegisteredDerivative: AugmentedEvent< + ApiType, + [accountId: AccountId20, index: u16], + { accountId: AccountId20; index: u16 } + >; /** * Transacted the inner call through a derivative account in a destination chain. */ - TransactedDerivative: AugmentedEvent; + TransactedDerivative: AugmentedEvent< + ApiType, + [accountId: AccountId20, dest: XcmV1MultiLocation, call: Bytes, index: u16], + { accountId: AccountId20; dest: XcmV1MultiLocation; call: Bytes; index: u16 } + >; + /** + * Transacted the call through a signed account in a destination chain. + */ + TransactedSigned: AugmentedEvent< + ApiType, + [feePayer: AccountId20, dest: XcmV1MultiLocation, call: Bytes], + { feePayer: AccountId20; dest: XcmV1MultiLocation; call: Bytes } + >; /** * Transacted the call through the sovereign account in a destination chain. */ - TransactedSovereign: AugmentedEvent; + TransactedSovereign: AugmentedEvent< + ApiType, + [feePayer: AccountId20, dest: XcmV1MultiLocation, call: Bytes], + { feePayer: AccountId20; dest: XcmV1MultiLocation; call: Bytes } + >; /** * Transact failed */ - TransactFailed: AugmentedEvent; + TransactFailed: AugmentedEvent< + ApiType, + [error: XcmV2TraitsError], + { error: XcmV2TraitsError } + >; /** * Changed the transact info of a location */ TransactInfoChanged: AugmentedEvent< ApiType, - [XcmV1MultiLocation, XcmTransactorRemoteTransactInfoWithMaxWeight] + [location: XcmV1MultiLocation, remoteInfo: XcmTransactorRemoteTransactInfoWithMaxWeight], + { location: XcmV1MultiLocation; remoteInfo: XcmTransactorRemoteTransactInfoWithMaxWeight } >; /** * Removed the transact info of a location */ - TransactInfoRemoved: AugmentedEvent; + TransactInfoRemoved: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation], + { location: XcmV1MultiLocation } + >; /** * Generic event */ @@ -1265,7 +1992,18 @@ declare module "@polkadot/api-base/types/events" { */ TransferredMultiAssets: AugmentedEvent< ApiType, - [AccountId20, XcmV1MultiassetMultiAssets, XcmV1MultiAsset, XcmV1MultiLocation] + [ + sender: AccountId20, + assets: XcmV1MultiassetMultiAssets, + fee: XcmV1MultiAsset, + dest: XcmV1MultiLocation + ], + { + sender: AccountId20; + assets: XcmV1MultiassetMultiAssets; + fee: XcmV1MultiAsset; + dest: XcmV1MultiLocation; + } >; /** * Generic event diff --git a/typescript-api/src/moonbeam/interfaces/augment-api-query.ts b/typescript-api/src/moonbeam/interfaces/augment-api-query.ts index 6435298dc8..95e5114091 100644 --- a/typescript-api/src/moonbeam/interfaces/augment-api-query.ts +++ b/typescript-api/src/moonbeam/interfaces/augment-api-query.ts @@ -64,6 +64,7 @@ import type { PalletDemocracyVoteVoting, PalletIdentityRegistrarInfo, PalletIdentityRegistration, + PalletMoonbeamOrbitersCollatorPoolInfo, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduledV3, @@ -77,6 +78,7 @@ import type { ParachainStakingCollatorCandidate, ParachainStakingCollatorSnapshot, ParachainStakingDelayedPayout, + ParachainStakingDelegationRequestsScheduledRequest, ParachainStakingDelegations, ParachainStakingDelegator, ParachainStakingInflationInflationInfo, @@ -85,9 +87,9 @@ import type { ParachainStakingRoundInfo, ParachainStakingSetOrderedSetBond, PolkadotCorePrimitivesOutboundHrmpMessage, - PolkadotPrimitivesV1AbridgedHostConfiguration, - PolkadotPrimitivesV1PersistedValidationData, - PolkadotPrimitivesV1UpgradeRestriction, + PolkadotPrimitivesV2AbridgedHostConfiguration, + PolkadotPrimitivesV2PersistedValidationData, + PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, XcmTransactorRemoteTransactInfoWithMaxWeight, @@ -222,8 +224,10 @@ declare module "@polkadot/api-base/types/storage" { }; authorFilter: { /** - * The percentage of active authors that will be eligible at each height. + * The number of active authors that will be eligible at each height. */ + eligibleCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; eligibleRatio: AugmentedQuery Observable, []> & QueryableStorageEntry; /** @@ -237,6 +241,12 @@ declare module "@polkadot/api-base/types/storage" { */ author: AugmentedQuery Observable>, []> & QueryableStorageEntry; + /** + * The highest slot that has been seen in the history of this chain. This + * is a strictly-increasing value. + */ + highestSlotSeen: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query */ @@ -245,7 +255,7 @@ declare module "@polkadot/api-base/types/storage" { authorMapping: { /** * We maintain a mapping from the NimbusIds used in the consensus layer to - * the AccountIds runtime (including this staking pallet). + * the AccountIds runtime. */ mappingWithDeposit: AugmentedQuery< ApiType, @@ -255,6 +265,15 @@ declare module "@polkadot/api-base/types/storage" { [NimbusPrimitivesNimbusCryptoPublic] > & QueryableStorageEntry; + /** + * We maintain a reverse mapping from AccountIds to NimbusIDS + */ + nimbusLookup: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; /** * Generic query */ @@ -815,6 +834,68 @@ declare module "@polkadot/api-base/types/storage" { */ [key: string]: QueryableStorageEntry; }; + moonbeamOrbiters: { + /** + * Account lookup override + */ + accountLookupOverride: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Current orbiters, with their "parent" collator + */ + collatorsPool: AugmentedQuery< + ApiType, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Counter for the related counted storage map + */ + counterForCollatorsPool: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Current round index + */ + currentRound: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Minimum deposit required to be registered as an orbiter + */ + minOrbiterDeposit: AugmentedQuery Observable>, []> & + QueryableStorageEntry; + /** + * Store active orbiter per round and per parent collator + */ + orbiterPerRound: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId20 | string | Uint8Array + ) => Observable>, + [u32, AccountId20] + > & + QueryableStorageEntry; + /** + * Check if account is an orbiter + */ + registeredOrbiter: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Generic query + */ + [key: string]: QueryableStorageEntry; + }; parachainInfo: { parachainId: AugmentedQuery Observable, []> & QueryableStorageEntry; @@ -910,6 +991,17 @@ declare module "@polkadot/api-base/types/storage" { [u32] > & QueryableStorageEntry; + /** + * Stores outstanding delegation requests per collator. + */ + delegationScheduledRequests: AugmentedQuery< + ApiType, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; /** * Get delegator state associated with an account if account is delegating else None */ @@ -1034,7 +1126,7 @@ declare module "@polkadot/api-base/types/storage" { */ hostConfiguration: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1158,7 +1250,7 @@ declare module "@polkadot/api-base/types/storage" { */ upgradeRestrictionSignal: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1175,7 +1267,7 @@ declare module "@polkadot/api-base/types/storage" { */ validationData: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1394,8 +1486,11 @@ declare module "@polkadot/api-base/types/storage" { /** * Events deposited for the current block. * - * NOTE: This storage item is explicitly unbounded since it is never - * intended to be read from within the runtime. + * NOTE: The item is unbound and should therefore never be read on chain. + * It could otherwise inflate the PoV size of a block. + * + * Events have a large in-memory size. Box the events to not go + * out-of-memory just in case someone still reads them from within the runtime. */ events: AugmentedQuery Observable>, []> & QueryableStorageEntry; @@ -1669,12 +1764,35 @@ declare module "@polkadot/api-base/types/storage" { [key: string]: QueryableStorageEntry; }; xcmTransactor: { + /** + * Stores the fee per second for an asset in its reserve chain. This + * allows us to convert from weight to fee + */ + destinationAssetFeePerSecond: AugmentedQuery< + ApiType, + ( + arg: XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array + ) => Observable>, + [XcmV1MultiLocation] + > & + QueryableStorageEntry; + /** + * Since we are using pallet-utility for account derivation (through + * AsDerivative), we need to provide an index for the account derivation. + * This storage item stores the index assigned for a given local account. + * These indices are usable as derivative in the relay chain + */ indexToAccount: AugmentedQuery< ApiType, (arg: u16 | AnyNumber | Uint8Array) => Observable>, [u16] > & QueryableStorageEntry; + /** + * Stores the transact info of a MultiLocation. This defines how much + * extra weight we need to add when we want to transact in the destination + * chain and maximum amount of weight allowed by the destination chain + */ transactInfoWithWeightLimit: AugmentedQuery< ApiType, ( diff --git a/typescript-api/src/moonbeam/interfaces/augment-api-rpc.ts b/typescript-api/src/moonbeam/interfaces/augment-api-rpc.ts index c16ac098f6..88cf2da274 100644 --- a/typescript-api/src/moonbeam/interfaces/augment-api-rpc.ts +++ b/typescript-api/src/moonbeam/interfaces/augment-api-rpc.ts @@ -14,6 +14,7 @@ import type { U64, Vec, bool, + f64, u32, u64, } from "@polkadot/types-codec"; @@ -37,6 +38,7 @@ import type { CreatedBlock } from "@polkadot/types/interfaces/engine"; import type { EthAccount, EthCallRequest, + EthFeeHistory, EthFilter, EthFilterChanges, EthLog, @@ -55,7 +57,7 @@ import type { JustificationNotification, ReportedRoundStates, } from "@polkadot/types/interfaces/grandpa"; -import type { MmrLeafProof } from "@polkadot/types/interfaces/mmr"; +import type { MmrLeafBatchProof, MmrLeafProof } from "@polkadot/types/interfaces/mmr"; import type { StorageKind } from "@polkadot/types/interfaces/offchain"; import type { FeeDetails, RuntimeDispatchInfo } from "@polkadot/types/interfaces/payment"; import type { RpcMethods } from "@polkadot/types/interfaces/rpc"; @@ -420,6 +422,16 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { number?: BlockNumber | AnyNumber | Uint8Array ) => Observable >; + /** + * Returns fee history for given block count & reward percentiles + */ + feeHistory: AugmentedRpc< + ( + blockCount: U256 | AnyNumber | Uint8Array, + newestBlock: BlockNumber | AnyNumber | Uint8Array, + rewardPercentiles: Option> | null | object | string | Uint8Array + ) => Observable + >; /** * Returns current gas price. */ @@ -595,6 +607,10 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { * Returns the number of hashes per second that the node is mining with. */ hashrate: AugmentedRpc<() => Observable>; + /** + * Returns max priority fee per gas + */ + maxPriorityFeePerGas: AugmentedRpc<() => Observable>; /** * Returns true if client is actively mining new blocks. */ @@ -709,6 +725,15 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { subscribeJustifications: AugmentedRpc<() => Observable>; }; mmr: { + /** + * Generate MMR proof for the given leaf indices. + */ + generateBatchProof: AugmentedRpc< + ( + leafIndices: Vec | (u64 | AnyNumber | Uint8Array)[], + at?: BlockHash | string | Uint8Array + ) => Observable + >; /** * Generate MMR proof for given leaf index. */ @@ -716,7 +741,7 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { ( leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array - ) => Observable + ) => Observable >; }; net: { diff --git a/typescript-api/src/moonbeam/interfaces/augment-api-tx.ts b/typescript-api/src/moonbeam/interfaces/augment-api-tx.ts index 9c20bd1c5f..108197ae0c 100644 --- a/typescript-api/src/moonbeam/interfaces/augment-api-tx.ts +++ b/typescript-api/src/moonbeam/interfaces/augment-api-tx.ts @@ -7,6 +7,7 @@ import type { Bytes, Compact, Option, + Struct, U256, U8aFixed, Vec, @@ -17,7 +18,7 @@ import type { u64, u8, } from "@polkadot/types-codec"; -import type { AnyNumber, ITuple } from "@polkadot/types-codec/types"; +import type { AnyNumber, IMethod, ITuple } from "@polkadot/types-codec/types"; import type { AccountId20, Call, @@ -44,8 +45,6 @@ import type { PalletIdentityBitFlags, PalletIdentityIdentityInfo, PalletIdentityJudgement, - ParachainStakingInflationRangePerbill, - ParachainStakingInflationRangeU128, SpRuntimeMultiSignature, XcmV0OriginKind, XcmV1MultiLocation, @@ -798,11 +797,11 @@ declare module "@polkadot/api-base/types/submittable" { }; authorFilter: { /** - * Update the eligible ratio. Intended to be called by governance. + * Update the eligible count. Intended to be called by governance. */ setEligible: AugmentedSubmittable< - (updated: Percent | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Percent] + (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] >; /** * Generic tx @@ -831,7 +830,7 @@ declare module "@polkadot/api-base/types/submittable" { */ addAssociation: AugmentedSubmittable< ( - authorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + nimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic] >; @@ -843,20 +842,39 @@ declare module "@polkadot/api-base/types/submittable" { */ clearAssociation: AugmentedSubmittable< ( - authorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + nimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic] >; + /** + * Remove your Mapping. + * + * This is useful when you are no longer an author and would like to + * re-claim your security deposit. + */ + removeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Set association and session keys at once. + * + * This is useful for key rotation to update Nimbus and VRF keys in one + * call. No new security deposit is required. Will replace + * `update_association` which is kept now for backwards compatibility reasons. + */ + setKeys: AugmentedSubmittable< + (keys: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * Change your Mapping. * * This is useful for normal key rotation or for when switching from one - * physical collator machine to another. No new security deposit is required. + * physical collator machine to another. No new security deposit is + * required. This sets keys to new_nimbus_id.into() by default. */ updateAssociation: AugmentedSubmittable< ( - oldAuthorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array, - newAuthorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + oldNimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array, + newNimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic, NimbusPrimitivesNimbusCryptoPublic] >; @@ -1112,7 +1130,7 @@ declare module "@polkadot/api-base/types/submittable" { */ execute: AugmentedSubmittable< ( - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Call, Compact] @@ -1152,7 +1170,7 @@ declare module "@polkadot/api-base/types/submittable" { propose: AugmentedSubmittable< ( threshold: Compact | AnyNumber | Uint8Array, - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Compact, Call, Compact] @@ -2999,6 +3017,58 @@ declare module "@polkadot/api-base/types/submittable" { */ [key: string]: SubmittableExtrinsicFunction; }; + moonbeamOrbiters: { + /** + * Add a collator to orbiters program. + */ + addCollator: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Add an orbiter in a collator pool + */ + collatorAddOrbiter: AugmentedSubmittable< + (orbiter: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Remove an orbiter from the caller collator pool + */ + collatorRemoveOrbiter: AugmentedSubmittable< + (orbiter: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Remove the caller from the specified collator pool + */ + orbiterLeaveCollatorPool: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Registering as an orbiter + */ + orbiterRegister: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Deregistering from orbiters + */ + orbiterUnregister: AugmentedSubmittable< + (collatorsPoolCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; + /** + * Remove a collator from orbiters program. + */ + removeCollator: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Generic tx + */ + [key: string]: SubmittableExtrinsicFunction; + }; parachainStaking: { /** * Cancel pending request to adjust the collator candidate self bond @@ -3104,27 +3174,6 @@ declare module "@polkadot/api-base/types/submittable" { * Rejoin the set of collator candidates if previously had called `go_offline` */ goOnline: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * Hotfix patch to remove all delegation requests not removed during a - * candidate exit - */ - hotfixRemoveDelegationRequests: AugmentedSubmittable< - ( - delegators: Vec | (AccountId20 | string | Uint8Array)[] - ) => SubmittableExtrinsic, - [Vec] - >; - /** - * Hotfix patch to correct and update CandidatePool value for candidates - * that have called candidate_bond_more when it did not update the - * CandidatePool value - */ - hotfixUpdateCandidatePoolValue: AugmentedSubmittable< - ( - candidates: Vec | (AccountId20 | string | Uint8Array)[] - ) => SubmittableExtrinsic, - [Vec] - >; /** * Join the set of collator candidates */ @@ -3162,8 +3211,9 @@ declare module "@polkadot/api-base/types/submittable" { >; /** * Request to leave the set of delegators. If successful, the caller is - * scheduled to be allowed to exit. Success forbids future delegator - * actions until the request is invoked or cancelled. + * scheduled to be allowed to exit via a [DelegationAction::Revoke] + * towards all existing delegations. Success forbids future delegation + * requests until the request is invoked or cancelled. */ scheduleLeaveDelegators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -3199,12 +3249,22 @@ declare module "@polkadot/api-base/types/submittable" { setInflation: AugmentedSubmittable< ( schedule: - | ParachainStakingInflationRangePerbill + | ({ + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct) | { min?: any; ideal?: any; max?: any } | string | Uint8Array ) => SubmittableExtrinsic, - [ParachainStakingInflationRangePerbill] + [ + { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct + ] >; /** * Set the account that will hold funds set aside for parachain bond @@ -3227,12 +3287,22 @@ declare module "@polkadot/api-base/types/submittable" { setStakingExpectations: AugmentedSubmittable< ( expectations: - | ParachainStakingInflationRangeU128 + | ({ + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct) | { min?: any; ideal?: any; max?: any } | string | Uint8Array ) => SubmittableExtrinsic, - [ParachainStakingInflationRangeU128] + [ + { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct + ] >; /** * Set the total number of collator candidates selected per round @@ -3372,8 +3442,10 @@ declare module "@polkadot/api-base/types/submittable" { * Transfer some assets from the local chain to the sovereign account of a * destination chain and forward a notification XCM. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`, up to enough to pay for + * `weight_limit` of weight. If more weight is needed than `weight_limit`, + * then the operation will fail and the assets send may be at risk. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3411,8 +3483,10 @@ declare module "@polkadot/api-base/types/submittable" { /** * Teleport some assets from the local chain to some destination chain. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`, up to enough to pay for + * `weight_limit` of weight. If more weight is needed than `weight_limit`, + * then the operation will fail and the assets send may be at risk. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3451,9 +3525,10 @@ declare module "@polkadot/api-base/types/submittable" { * Transfer some assets from the local chain to the sovereign account of a * destination chain and forward a notification XCM. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector and fee-weight is calculated locally and thus - * remote weights are assumed to be equal to local weights. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`. The weight limit for fees is + * not provided and thus is unlimited, with all fees taken as needed from + * the asset. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3485,9 +3560,10 @@ declare module "@polkadot/api-base/types/submittable" { /** * Teleport some assets from the local chain to some destination chain. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector and fee-weight is calculated locally and thus - * remote weights are assumed to be equal to local weights. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`. The weight limit for fees is + * not provided and thus is unlimited, with all fees taken as needed from + * the asset. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3702,7 +3778,7 @@ declare module "@polkadot/api-base/types/submittable" { ( real: AccountId20 | string | Uint8Array, forceProxyType: Option | null | object | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [AccountId20, Option, Call] >; @@ -3735,7 +3811,7 @@ declare module "@polkadot/api-base/types/submittable" { delegate: AccountId20 | string | Uint8Array, real: AccountId20 | string | Uint8Array, forceProxyType: Option | null | object | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [AccountId20, AccountId20, Option, Call] >; @@ -4157,7 +4233,7 @@ declare module "@polkadot/api-base/types/submittable" { */ execute: AugmentedSubmittable< ( - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Call, Compact] @@ -4197,7 +4273,7 @@ declare module "@polkadot/api-base/types/submittable" { propose: AugmentedSubmittable< ( threshold: Compact | AnyNumber | Uint8Array, - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Compact, Call, Compact] @@ -4392,7 +4468,7 @@ declare module "@polkadot/api-base/types/submittable" { asDerivative: AugmentedSubmittable< ( index: u16 | AnyNumber | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [u16, Call] >; @@ -4422,7 +4498,7 @@ declare module "@polkadot/api-base/types/submittable" { */ batch: AugmentedSubmittable< ( - calls: Vec | (Call | { callIndex?: any; args?: any } | string | Uint8Array)[] + calls: Vec | (Call | IMethod | string | Uint8Array)[] ) => SubmittableExtrinsic, [Vec] >; @@ -4447,7 +4523,7 @@ declare module "@polkadot/api-base/types/submittable" { */ batchAll: AugmentedSubmittable< ( - calls: Vec | (Call | { callIndex?: any; args?: any } | string | Uint8Array)[] + calls: Vec | (Call | IMethod | string | Uint8Array)[] ) => SubmittableExtrinsic, [Vec] >; @@ -4478,7 +4554,7 @@ declare module "@polkadot/api-base/types/submittable" { | { PolkadotXcm: any } | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [MoonbeamRuntimeOriginCaller, Call] >; @@ -4515,6 +4591,15 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [AccountId20, u16] >; + /** + * Remove the fee per second of an asset on its reserve chain + */ + removeFeePerSecond: AugmentedSubmittable< + ( + assetLocation: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation] + >; /** * Remove the transact info of a location */ @@ -4524,6 +4609,21 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [XcmVersionedMultiLocation] >; + /** + * Set the fee per second of an asset on its reserve chain + */ + setFeePerSecond: AugmentedSubmittable< + ( + assetLocation: + | XcmVersionedMultiLocation + | { V0: any } + | { V1: any } + | string + | Uint8Array, + feePerSecond: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, u128] + >; /** * Change the transact info of a location */ @@ -4531,10 +4631,10 @@ declare module "@polkadot/api-base/types/submittable" { ( location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, transactExtraWeight: u64 | AnyNumber | Uint8Array, - feePerSecond: u128 | AnyNumber | Uint8Array, - maxWeight: u64 | AnyNumber | Uint8Array + maxWeight: u64 | AnyNumber | Uint8Array, + transactExtraWeightSigned: Option | null | object | string | Uint8Array ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, u64, u128, u64] + [XcmVersionedMultiLocation, u64, u64, Option] >; /** * Transact the inner call through a derivative account in a destination @@ -4579,6 +4679,44 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [MoonbeamRuntimeXcmConfigTransactors, u16, XcmVersionedMultiLocation, u64, Bytes] >; + /** + * Transact the call through the a signed origin in this chain that should + * be converted to a transaction dispatch account in the destination chain + * by any method implemented in the destination chains runtime + * + * This time we are giving the currency as a currencyId instead of multilocation + */ + transactThroughSigned: AugmentedSubmittable< + ( + dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + feeCurrencyId: + | MoonbeamRuntimeXcmConfigCurrencyId + | { SelfReserve: any } + | { ForeignAsset: any } + | { LocalAssetReserve: any } + | string + | Uint8Array, + destWeight: u64 | AnyNumber | Uint8Array, + call: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, MoonbeamRuntimeXcmConfigCurrencyId, u64, Bytes] + >; + /** + * Transact the call through the a signed origin in this chain that should + * be converted to a transaction dispatch account in the destination chain + * by any method implemented in the destination chains runtime + * + * This time we are giving the currency as a multilocation instead of currencyId + */ + transactThroughSignedMultilocation: AugmentedSubmittable< + ( + dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + feeLocation: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + destWeight: u64 | AnyNumber | Uint8Array, + call: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, XcmVersionedMultiLocation, u64, Bytes] + >; /** * Transact the call through the sovereign account in a destination chain, * 'fee_payer' pays for the fee diff --git a/typescript-api/src/moonbeam/interfaces/augment-types.ts b/typescript-api/src/moonbeam/interfaces/augment-types.ts index ade8908353..4f94b06ada 100644 --- a/typescript-api/src/moonbeam/interfaces/augment-types.ts +++ b/typescript-api/src/moonbeam/interfaces/augment-types.ts @@ -6,6 +6,8 @@ import type { BitVec, Bool, Bytes, + F32, + F64, I128, I16, I256, @@ -14,6 +16,7 @@ import type { I8, Json, Null, + OptionBool, Raw, Text, Type, @@ -25,6 +28,8 @@ import type { U8, USize, bool, + f32, + f64, i128, i16, i256, @@ -99,6 +104,7 @@ import type { BeefyId, BeefyNextAuthoritySet, BeefyPayload, + BeefyPayloadId, BeefySignedCommitment, MmrRootHash, ValidatorSetId, @@ -151,8 +157,6 @@ import type { ContractCallFlags, ContractCallRequest, ContractExecResult, - ContractExecResultErr, - ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, @@ -302,6 +306,7 @@ import type { EthBlock, EthBloom, EthCallRequest, + EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, @@ -537,7 +542,7 @@ import type { StorageMetadataV13, StorageMetadataV9, } from "@polkadot/types/interfaces/metadata"; -import type { MmrLeafProof } from "@polkadot/types/interfaces/mmr"; +import type { MmrLeafBatchProof, MmrLeafProof } from "@polkadot/types/interfaces/mmr"; import type { StorageKind } from "@polkadot/types/interfaces/offchain"; import type { DeferredOffenceOf, @@ -965,6 +970,7 @@ import type { DispatchClass, DispatchError, DispatchErrorModule, + DispatchErrorModuleU8, DispatchErrorModuleU8a, DispatchErrorTo198, DispatchInfo, @@ -1003,6 +1009,7 @@ import type { SystemOrigin, TokenError, TransactionValidityError, + TransactionalError, UnknownTransaction, WeightPerClass, } from "@polkadot/types/interfaces/system"; @@ -1197,6 +1204,7 @@ declare module "@polkadot/types/types/registry" { BeefyKey: BeefyKey; BeefyNextAuthoritySet: BeefyNextAuthoritySet; BeefyPayload: BeefyPayload; + BeefyPayloadId: BeefyPayloadId; BeefySignedCommitment: BeefySignedCommitment; Bid: Bid; Bidder: Bidder; @@ -1296,8 +1304,6 @@ declare module "@polkadot/types/types/registry" { ContractEventSpecV1: ContractEventSpecV1; ContractEventSpecV2: ContractEventSpecV2; ContractExecResult: ContractExecResult; - ContractExecResultErr: ContractExecResultErr; - ContractExecResultErrModule: ContractExecResultErrModule; ContractExecResultOk: ContractExecResultOk; ContractExecResultResult: ContractExecResultResult; ContractExecResultSuccessTo255: ContractExecResultSuccessTo255; @@ -1363,6 +1369,7 @@ declare module "@polkadot/types/types/registry" { DispatchClass: DispatchClass; DispatchError: DispatchError; DispatchErrorModule: DispatchErrorModule; + DispatchErrorModuleU8: DispatchErrorModuleU8; DispatchErrorModuleU8a: DispatchErrorModuleU8a; DispatchErrorTo198: DispatchErrorTo198; DispatchFeePayment: DispatchFeePayment; @@ -1417,6 +1424,7 @@ declare module "@polkadot/types/types/registry" { EthereumAddress: EthereumAddress; EthereumLookupSource: EthereumLookupSource; EthereumSignature: EthereumSignature; + EthFeeHistory: EthFeeHistory; EthFilter: EthFilter; EthFilterAddress: EthFilterAddress; EthFilterChanges: EthFilterChanges; @@ -1481,6 +1489,10 @@ declare module "@polkadot/types/types/registry" { ExtrinsicsWeight: ExtrinsicsWeight; ExtrinsicUnknown: ExtrinsicUnknown; ExtrinsicV4: ExtrinsicV4; + f32: f32; + F32: F32; + f64: f64; + F64: F64; FeeDetails: FeeDetails; Fixed128: Fixed128; Fixed64: Fixed64; @@ -1651,6 +1663,7 @@ declare module "@polkadot/types/types/registry" { MetadataV14: MetadataV14; MetadataV9: MetadataV9; MigrationStatusResult: MigrationStatusResult; + MmrLeafBatchProof: MmrLeafBatchProof; MmrLeafProof: MmrLeafProof; MmrRootHash: MmrRootHash; ModuleConstantMetadataV10: ModuleConstantMetadataV10; @@ -1716,6 +1729,7 @@ declare module "@polkadot/types/types/registry" { OpenTipTip: OpenTipTip; OpenTipTo225: OpenTipTo225; OperatingMode: OperatingMode; + OptionBool: OptionBool; Origin: Origin; OriginCaller: OriginCaller; OriginKindV0: OriginKindV0; @@ -2048,6 +2062,7 @@ declare module "@polkadot/types/types/registry" { TombstoneContractInfo: TombstoneContractInfo; TraceBlockResponse: TraceBlockResponse; TraceError: TraceError; + TransactionalError: TransactionalError; TransactionInfo: TransactionInfo; TransactionPriority: TransactionPriority; TransactionStorageProof: TransactionStorageProof; diff --git a/typescript-api/src/moonbeam/interfaces/lookup.ts b/typescript-api/src/moonbeam/interfaces/lookup.ts index 927babc64b..3cfcb6ac5e 100644 --- a/typescript-api/src/moonbeam/interfaces/lookup.ts +++ b/typescript-api/src/moonbeam/interfaces/lookup.ts @@ -123,6 +123,7 @@ export default { TooManyConsumers: "Null", Token: "SpRuntimeTokenError", Arithmetic: "SpRuntimeArithmeticError", + Transactional: "SpRuntimeTransactionalError", }, }, /** @@ -130,7 +131,7 @@ export default { */ SpRuntimeModuleError: { index: "u8", - error: "u8", + error: "[u8;4]", }, /** * Lookup25: sp_runtime::TokenError @@ -153,7 +154,13 @@ export default { _enum: ["Underflow", "Overflow", "DivisionByZero"], }, /** - * Lookup27: cumulus_pallet_parachain_system::pallet::Event + * Lookup27: sp_runtime::TransactionalError + */ + SpRuntimeTransactionalError: { + _enum: ["LimitReached", "NoLayer"], + }, + /** + * Lookup28: cumulus_pallet_parachain_system::pallet::Event */ CumulusPalletParachainSystemEvent: { _enum: { @@ -166,7 +173,7 @@ export default { }, }, /** - * Lookup28: pallet_balances::pallet::Event + * Lookup29: pallet_balances::pallet::Event */ PalletBalancesEvent: { _enum: { @@ -217,13 +224,13 @@ export default { }, }, /** - * Lookup29: frame_support::traits::tokens::misc::BalanceStatus + * Lookup30: frame_support::traits::tokens::misc::BalanceStatus */ FrameSupportTokensMiscBalanceStatus: { _enum: ["Free", "Reserved"], }, /** - * Lookup30: parachain_staking::pallet::Event + * Lookup31: parachain_staking::pallet::Event */ ParachainStakingEvent: { _enum: { @@ -330,7 +337,8 @@ export default { }, CancelledDelegationRequest: { delegator: "AccountId20", - cancelledRequest: "ParachainStakingDelegationRequest", + cancelledRequest: "ParachainStakingDelegationRequestsCancelledScheduledRequest", + collator: "AccountId20", }, Delegation: { delegator: "AccountId20", @@ -408,22 +416,23 @@ export default { }, }, /** - * Lookup32: parachain_staking::types::DelegationRequest + * Lookup33: parachain_staking::delegation_requests::CancelledScheduledRequest */ - ParachainStakingDelegationRequest: { - collator: "AccountId20", - amount: "u128", + ParachainStakingDelegationRequestsCancelledScheduledRequest: { whenExecutable: "u32", - action: "ParachainStakingDelegationChange", + action: "ParachainStakingDelegationRequestsDelegationAction", }, /** - * Lookup33: parachain_staking::types::DelegationChange + * Lookup34: parachain_staking::delegation_requests::DelegationAction */ - ParachainStakingDelegationChange: { - _enum: ["Revoke", "Decrease"], + ParachainStakingDelegationRequestsDelegationAction: { + _enum: { + Revoke: "u128", + Decrease: "u128", + }, }, /** - * Lookup34: parachain_staking::types::DelegatorAdded + * Lookup35: parachain_staking::types::DelegatorAdded */ ParachainStakingDelegatorAdded: { _enum: { @@ -434,45 +443,86 @@ export default { }, }, /** - * Lookup37: pallet_author_slot_filter::pallet::Event + * Lookup38: pallet_author_slot_filter::pallet::Event */ PalletAuthorSlotFilterEvent: { _enum: { - EligibleUpdated: "Percent", + EligibleUpdated: "u32", }, }, /** - * Lookup38: pallet_author_mapping::pallet::Event + * Lookup40: pallet_author_mapping::pallet::Event */ PalletAuthorMappingEvent: { _enum: { - AuthorRegistered: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRegistered: { + _alias: { + keys_: "keys", + }, + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, - AuthorDeRegistered: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", - }, - AuthorRotated: { - newAuthorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRemoved: { + _alias: { + keys_: "keys", + }, + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, - DefunctAuthorBusted: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRotated: { + newNimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + newKeys: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, }, }, /** - * Lookup39: nimbus_primitives::nimbus_crypto::Public + * Lookup41: nimbus_primitives::nimbus_crypto::Public */ NimbusPrimitivesNimbusCryptoPublic: "SpCoreSr25519Public", /** - * Lookup40: sp_core::sr25519::Public + * Lookup42: sp_core::sr25519::Public */ SpCoreSr25519Public: "[u8;32]", /** - * Lookup41: pallet_utility::pallet::Event + * Lookup43: session_keys_primitives::vrf::vrf_crypto::Public + */ + SessionKeysPrimitivesVrfVrfCryptoPublic: "SpCoreSr25519Public", + /** + * Lookup44: pallet_moonbeam_orbiters::pallet::Event + */ + PalletMoonbeamOrbitersEvent: { + _enum: { + OrbiterJoinCollatorPool: { + collator: "AccountId20", + orbiter: "AccountId20", + }, + OrbiterLeaveCollatorPool: { + collator: "AccountId20", + orbiter: "AccountId20", + }, + OrbiterRewarded: { + account: "AccountId20", + rewards: "u128", + }, + OrbiterRotation: { + collator: "AccountId20", + oldOrbiter: "Option", + newOrbiter: "Option", + }, + OrbiterRegistered: { + account: "AccountId20", + deposit: "u128", + }, + OrbiterUnregistered: { + account: "AccountId20", + }, + }, + }, + /** + * Lookup46: pallet_utility::pallet::Event */ PalletUtilityEvent: { _enum: { @@ -488,7 +538,7 @@ export default { }, }, /** - * Lookup44: pallet_proxy::pallet::Event + * Lookup49: pallet_proxy::pallet::Event */ PalletProxyEvent: { _enum: { @@ -512,10 +562,16 @@ export default { proxyType: "MoonbeamRuntimeProxyType", delay: "u32", }, + ProxyRemoved: { + delegator: "AccountId20", + delegatee: "AccountId20", + proxyType: "MoonbeamRuntimeProxyType", + delay: "u32", + }, }, }, /** - * Lookup45: moonbeam_runtime::ProxyType + * Lookup50: moonbeam_runtime::ProxyType */ MoonbeamRuntimeProxyType: { _enum: [ @@ -529,7 +585,7 @@ export default { ], }, /** - * Lookup47: pallet_maintenance_mode::pallet::Event + * Lookup52: pallet_maintenance_mode::pallet::Event */ PalletMaintenanceModeEvent: { _enum: { @@ -544,7 +600,7 @@ export default { }, }, /** - * Lookup48: pallet_identity::pallet::Event + * Lookup53: pallet_identity::pallet::Event */ PalletIdentityEvent: { _enum: { @@ -592,7 +648,7 @@ export default { }, }, /** - * Lookup49: pallet_migrations::pallet::Event + * Lookup54: pallet_migrations::pallet::Event */ PalletMigrationsEvent: { _enum: { @@ -610,7 +666,7 @@ export default { }, }, /** - * Lookup50: pallet_evm::pallet::Event + * Lookup55: pallet_evm::pallet::Event */ PalletEvmEvent: { _enum: { @@ -624,7 +680,7 @@ export default { }, }, /** - * Lookup51: ethereum::log::Log + * Lookup56: ethereum::log::Log */ EthereumLog: { address: "H160", @@ -632,7 +688,7 @@ export default { data: "Bytes", }, /** - * Lookup56: pallet_ethereum::pallet::Event + * Lookup61: pallet_ethereum::pallet::Event */ PalletEthereumEvent: { _enum: { @@ -640,7 +696,7 @@ export default { }, }, /** - * Lookup57: evm_core::error::ExitReason + * Lookup62: evm_core::error::ExitReason */ EvmCoreErrorExitReason: { _enum: { @@ -651,13 +707,13 @@ export default { }, }, /** - * Lookup58: evm_core::error::ExitSucceed + * Lookup63: evm_core::error::ExitSucceed */ EvmCoreErrorExitSucceed: { _enum: ["Stopped", "Returned", "Suicided"], }, /** - * Lookup59: evm_core::error::ExitError + * Lookup64: evm_core::error::ExitError */ EvmCoreErrorExitError: { _enum: { @@ -679,13 +735,13 @@ export default { }, }, /** - * Lookup62: evm_core::error::ExitRevert + * Lookup67: evm_core::error::ExitRevert */ EvmCoreErrorExitRevert: { _enum: ["Reverted"], }, /** - * Lookup63: evm_core::error::ExitFatal + * Lookup68: evm_core::error::ExitFatal */ EvmCoreErrorExitFatal: { _enum: { @@ -696,7 +752,7 @@ export default { }, }, /** - * Lookup64: pallet_base_fee::pallet::Event + * Lookup69: pallet_base_fee::pallet::Event */ PalletBaseFeeEvent: { _enum: { @@ -707,7 +763,7 @@ export default { }, }, /** - * Lookup66: pallet_scheduler::pallet::Event + * Lookup71: pallet_scheduler::pallet::Event */ PalletSchedulerEvent: { _enum: { @@ -732,13 +788,13 @@ export default { }, }, /** - * Lookup69: frame_support::traits::schedule::LookupError + * Lookup74: frame_support::traits::schedule::LookupError */ FrameSupportScheduleLookupError: { _enum: ["Unknown", "BadFormat"], }, /** - * Lookup70: pallet_democracy::pallet::Event + * Lookup75: pallet_democracy::pallet::Event */ PalletDemocracyEvent: { _enum: { @@ -820,13 +876,13 @@ export default { }, }, /** - * Lookup72: pallet_democracy::vote_threshold::VoteThreshold + * Lookup77: pallet_democracy::vote_threshold::VoteThreshold */ PalletDemocracyVoteThreshold: { _enum: ["SuperMajorityApprove", "SuperMajorityAgainst", "SimpleMajority"], }, /** - * Lookup73: pallet_democracy::vote::AccountVote + * Lookup78: pallet_democracy::vote::AccountVote */ PalletDemocracyVoteAccountVote: { _enum: { @@ -841,7 +897,7 @@ export default { }, }, /** - * Lookup75: pallet_collective::pallet::Event + * Lookup80: pallet_collective::pallet::Event */ PalletCollectiveEvent: { _enum: { @@ -880,7 +936,7 @@ export default { }, }, /** - * Lookup77: pallet_treasury::pallet::Event + * Lookup82: pallet_treasury::pallet::Event */ PalletTreasuryEvent: { _enum: { @@ -911,7 +967,7 @@ export default { }, }, /** - * Lookup78: pallet_crowdloan_rewards::pallet::Event + * Lookup83: pallet_crowdloan_rewards::pallet::Event */ PalletCrowdloanRewardsEvent: { _enum: { @@ -924,7 +980,7 @@ export default { }, }, /** - * Lookup80: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup84: cumulus_pallet_xcmp_queue::pallet::Event */ CumulusPalletXcmpQueueEvent: { _enum: { @@ -939,7 +995,7 @@ export default { }, }, /** - * Lookup82: xcm::v2::traits::Error + * Lookup86: xcm::v2::traits::Error */ XcmV2TraitsError: { _enum: { @@ -972,7 +1028,7 @@ export default { }, }, /** - * Lookup84: cumulus_pallet_xcm::pallet::Event + * Lookup88: cumulus_pallet_xcm::pallet::Event */ CumulusPalletXcmEvent: { _enum: { @@ -982,7 +1038,7 @@ export default { }, }, /** - * Lookup86: xcm::v2::traits::Outcome + * Lookup90: xcm::v2::traits::Outcome */ XcmV2TraitsOutcome: { _enum: { @@ -992,7 +1048,7 @@ export default { }, }, /** - * Lookup87: cumulus_pallet_dmp_queue::pallet::Event + * Lookup91: cumulus_pallet_dmp_queue::pallet::Event */ CumulusPalletDmpQueueEvent: { _enum: { @@ -1005,7 +1061,7 @@ export default { }, }, /** - * Lookup88: pallet_xcm::pallet::Event + * Lookup92: pallet_xcm::pallet::Event */ PalletXcmEvent: { _enum: { @@ -1028,14 +1084,14 @@ export default { }, }, /** - * Lookup89: xcm::v1::multilocation::MultiLocation + * Lookup93: xcm::v1::multilocation::MultiLocation */ XcmV1MultiLocation: { parents: "u8", interior: "XcmV1MultilocationJunctions", }, /** - * Lookup90: xcm::v1::multilocation::Junctions + * Lookup94: xcm::v1::multilocation::Junctions */ XcmV1MultilocationJunctions: { _enum: { @@ -1051,7 +1107,7 @@ export default { }, }, /** - * Lookup91: xcm::v1::junction::Junction + * Lookup95: xcm::v1::junction::Junction */ XcmV1Junction: { _enum: { @@ -1079,7 +1135,7 @@ export default { }, }, /** - * Lookup93: xcm::v0::junction::NetworkId + * Lookup97: xcm::v0::junction::NetworkId */ XcmV0JunctionNetworkId: { _enum: { @@ -1090,7 +1146,7 @@ export default { }, }, /** - * Lookup96: xcm::v0::junction::BodyId + * Lookup100: xcm::v0::junction::BodyId */ XcmV0JunctionBodyId: { _enum: { @@ -1104,7 +1160,7 @@ export default { }, }, /** - * Lookup97: xcm::v0::junction::BodyPart + * Lookup101: xcm::v0::junction::BodyPart */ XcmV0JunctionBodyPart: { _enum: { @@ -1127,11 +1183,11 @@ export default { }, }, /** - * Lookup98: xcm::v2::Xcm + * Lookup102: xcm::v2::Xcm */ XcmV2Xcm: "Vec", /** - * Lookup100: xcm::v2::Instruction + * Lookup104: xcm::v2::Instruction */ XcmV2Instruction: { _enum: { @@ -1229,18 +1285,18 @@ export default { }, }, /** - * Lookup101: xcm::v1::multiasset::MultiAssets + * Lookup105: xcm::v1::multiasset::MultiAssets */ XcmV1MultiassetMultiAssets: "Vec", /** - * Lookup103: xcm::v1::multiasset::MultiAsset + * Lookup107: xcm::v1::multiasset::MultiAsset */ XcmV1MultiAsset: { id: "XcmV1MultiassetAssetId", fun: "XcmV1MultiassetFungibility", }, /** - * Lookup104: xcm::v1::multiasset::AssetId + * Lookup108: xcm::v1::multiasset::AssetId */ XcmV1MultiassetAssetId: { _enum: { @@ -1249,7 +1305,7 @@ export default { }, }, /** - * Lookup105: xcm::v1::multiasset::Fungibility + * Lookup109: xcm::v1::multiasset::Fungibility */ XcmV1MultiassetFungibility: { _enum: { @@ -1258,7 +1314,7 @@ export default { }, }, /** - * Lookup106: xcm::v1::multiasset::AssetInstance + * Lookup110: xcm::v1::multiasset::AssetInstance */ XcmV1MultiassetAssetInstance: { _enum: { @@ -1272,7 +1328,7 @@ export default { }, }, /** - * Lookup108: xcm::v2::Response + * Lookup112: xcm::v2::Response */ XcmV2Response: { _enum: { @@ -1283,19 +1339,19 @@ export default { }, }, /** - * Lookup111: xcm::v0::OriginKind + * Lookup115: xcm::v0::OriginKind */ XcmV0OriginKind: { _enum: ["Native", "SovereignAccount", "Superuser", "Xcm"], }, /** - * Lookup112: xcm::double_encoded::DoubleEncoded + * Lookup116: xcm::double_encoded::DoubleEncoded */ XcmDoubleEncoded: { encoded: "Bytes", }, /** - * Lookup113: xcm::v1::multiasset::MultiAssetFilter + * Lookup117: xcm::v1::multiasset::MultiAssetFilter */ XcmV1MultiassetMultiAssetFilter: { _enum: { @@ -1304,7 +1360,7 @@ export default { }, }, /** - * Lookup114: xcm::v1::multiasset::WildMultiAsset + * Lookup118: xcm::v1::multiasset::WildMultiAsset */ XcmV1MultiassetWildMultiAsset: { _enum: { @@ -1316,13 +1372,13 @@ export default { }, }, /** - * Lookup115: xcm::v1::multiasset::WildFungibility + * Lookup119: xcm::v1::multiasset::WildFungibility */ XcmV1MultiassetWildFungibility: { _enum: ["Fungible", "NonFungible"], }, /** - * Lookup116: xcm::v2::WeightLimit + * Lookup120: xcm::v2::WeightLimit */ XcmV2WeightLimit: { _enum: { @@ -1331,7 +1387,7 @@ export default { }, }, /** - * Lookup118: xcm::VersionedMultiAssets + * Lookup122: xcm::VersionedMultiAssets */ XcmVersionedMultiAssets: { _enum: { @@ -1340,7 +1396,7 @@ export default { }, }, /** - * Lookup120: xcm::v0::multi_asset::MultiAsset + * Lookup124: xcm::v0::multi_asset::MultiAsset */ XcmV0MultiAsset: { _enum: { @@ -1379,7 +1435,7 @@ export default { }, }, /** - * Lookup121: xcm::v0::multi_location::MultiLocation + * Lookup125: xcm::v0::multi_location::MultiLocation */ XcmV0MultiLocation: { _enum: { @@ -1395,7 +1451,7 @@ export default { }, }, /** - * Lookup122: xcm::v0::junction::Junction + * Lookup126: xcm::v0::junction::Junction */ XcmV0Junction: { _enum: { @@ -1424,7 +1480,7 @@ export default { }, }, /** - * Lookup123: xcm::VersionedMultiLocation + * Lookup127: xcm::VersionedMultiLocation */ XcmVersionedMultiLocation: { _enum: { @@ -1433,7 +1489,7 @@ export default { }, }, /** - * Lookup124: pallet_assets::pallet::Event + * Lookup128: pallet_assets::pallet::Event */ PalletAssetsEvent: { _enum: { @@ -1523,7 +1579,7 @@ export default { }, }, /** - * Lookup125: pallet_asset_manager::pallet::Event + * Lookup129: pallet_asset_manager::pallet::Event */ PalletAssetManagerEvent: { _enum: { @@ -1562,7 +1618,7 @@ export default { }, }, /** - * Lookup126: moonbeam_runtime::xcm_config::AssetType + * Lookup130: moonbeam_runtime::xcm_config::AssetType */ MoonbeamRuntimeXcmConfigAssetType: { _enum: { @@ -1570,7 +1626,7 @@ export default { }, }, /** - * Lookup127: moonbeam_runtime::asset_config::AssetRegistrarMetadata + * Lookup131: moonbeam_runtime::asset_config::AssetRegistrarMetadata */ MoonbeamRuntimeAssetConfigAssetRegistrarMetadata: { name: "Bytes", @@ -1579,7 +1635,7 @@ export default { isFrozen: "bool", }, /** - * Lookup128: orml_xtokens::module::Event + * Lookup132: orml_xtokens::module::Event */ OrmlXtokensModuleEvent: { _enum: { @@ -1592,7 +1648,7 @@ export default { }, }, /** - * Lookup129: xcm_transactor::pallet::Event + * Lookup133: xcm_transactor::pallet::Event */ XcmTransactorEvent: { _enum: { @@ -1607,6 +1663,11 @@ export default { dest: "XcmV1MultiLocation", call: "Bytes", }, + TransactedSigned: { + feePayer: "AccountId20", + dest: "XcmV1MultiLocation", + call: "Bytes", + }, RegisteredDerivative: { accountId: "AccountId20", index: "u16", @@ -1624,18 +1685,25 @@ export default { TransactInfoRemoved: { location: "XcmV1MultiLocation", }, + DestFeePerSecondChanged: { + location: "XcmV1MultiLocation", + feePerSecond: "u128", + }, + DestFeePerSecondRemoved: { + location: "XcmV1MultiLocation", + }, }, }, /** - * Lookup130: xcm_transactor::pallet::RemoteTransactInfoWithMaxWeight + * Lookup134: xcm_transactor::pallet::RemoteTransactInfoWithMaxWeight */ XcmTransactorRemoteTransactInfoWithMaxWeight: { transactExtraWeight: "u64", - feePerSecond: "u128", maxWeight: "u64", + transactExtraWeightSigned: "Option", }, /** - * Lookup132: frame_system::Phase + * Lookup137: frame_system::Phase */ FrameSystemPhase: { _enum: { @@ -1645,14 +1713,14 @@ export default { }, }, /** - * Lookup134: frame_system::LastRuntimeUpgradeInfo + * Lookup139: frame_system::LastRuntimeUpgradeInfo */ FrameSystemLastRuntimeUpgradeInfo: { specVersion: "Compact", specName: "Text", }, /** - * Lookup135: frame_system::pallet::Call + * Lookup140: frame_system::pallet::Call */ FrameSystemCall: { _enum: { @@ -1690,7 +1758,7 @@ export default { }, }, /** - * Lookup139: frame_system::limits::BlockWeights + * Lookup144: frame_system::limits::BlockWeights */ FrameSystemLimitsBlockWeights: { baseBlock: "u64", @@ -1698,7 +1766,7 @@ export default { perClass: "FrameSupportWeightsPerDispatchClassWeightsPerClass", }, /** - * Lookup140: + * Lookup145: * frame_support::weights::PerDispatchClass */ FrameSupportWeightsPerDispatchClassWeightsPerClass: { @@ -1707,7 +1775,7 @@ export default { mandatory: "FrameSystemLimitsWeightsPerClass", }, /** - * Lookup141: frame_system::limits::WeightsPerClass + * Lookup146: frame_system::limits::WeightsPerClass */ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: "u64", @@ -1716,13 +1784,13 @@ export default { reserved: "Option", }, /** - * Lookup143: frame_system::limits::BlockLength + * Lookup147: frame_system::limits::BlockLength */ FrameSystemLimitsBlockLength: { max: "FrameSupportWeightsPerDispatchClassU32", }, /** - * Lookup144: frame_support::weights::PerDispatchClass + * Lookup148: frame_support::weights::PerDispatchClass */ FrameSupportWeightsPerDispatchClassU32: { normal: "u32", @@ -1730,14 +1798,14 @@ export default { mandatory: "u32", }, /** - * Lookup145: frame_support::weights::RuntimeDbWeight + * Lookup149: frame_support::weights::RuntimeDbWeight */ FrameSupportWeightsRuntimeDbWeight: { read: "u64", write: "u64", }, /** - * Lookup146: sp_version::RuntimeVersion + * Lookup150: sp_version::RuntimeVersion */ SpVersionRuntimeVersion: { specName: "Text", @@ -1750,7 +1818,7 @@ export default { stateVersion: "u8", }, /** - * Lookup150: frame_system::pallet::Error + * Lookup154: frame_system::pallet::Error */ FrameSystemError: { _enum: [ @@ -1763,44 +1831,40 @@ export default { ], }, /** - * Lookup151: polkadot_primitives::v1::PersistedValidationData + * Lookup155: polkadot_primitives::v2::PersistedValidationData */ - PolkadotPrimitivesV1PersistedValidationData: { + PolkadotPrimitivesV2PersistedValidationData: { parentHead: "Bytes", relayParentNumber: "u32", relayParentStorageRoot: "H256", maxPovSize: "u32", }, /** - * Lookup154: polkadot_primitives::v1::UpgradeRestriction + * Lookup158: polkadot_primitives::v2::UpgradeRestriction */ - PolkadotPrimitivesV1UpgradeRestriction: { + PolkadotPrimitivesV2UpgradeRestriction: { _enum: ["Present"], }, /** - * Lookup155: sp_trie::storage_proof::StorageProof + * Lookup159: sp_trie::storage_proof::StorageProof */ SpTrieStorageProof: { - trieNodes: "BTreeSet", + trieNodes: "BTreeSet", }, /** - * Lookup156: BTreeSet - */ - BTreeSet: "BTreeSet", - /** - * Lookup157: + * Lookup161: * cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot */ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: "H256", relayDispatchQueueSize: "(u32,u32)", - ingressChannels: "Vec<(u32,PolkadotPrimitivesV1AbridgedHrmpChannel)>", - egressChannels: "Vec<(u32,PolkadotPrimitivesV1AbridgedHrmpChannel)>", + ingressChannels: "Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>", + egressChannels: "Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>", }, /** - * Lookup160: polkadot_primitives::v1::AbridgedHrmpChannel + * Lookup164: polkadot_primitives::v2::AbridgedHrmpChannel */ - PolkadotPrimitivesV1AbridgedHrmpChannel: { + PolkadotPrimitivesV2AbridgedHrmpChannel: { maxCapacity: "u32", maxTotalSize: "u32", maxMessageSize: "u32", @@ -1809,9 +1873,9 @@ export default { mqcHead: "Option", }, /** - * Lookup161: polkadot_primitives::v1::AbridgedHostConfiguration + * Lookup165: polkadot_primitives::v2::AbridgedHostConfiguration */ - PolkadotPrimitivesV1AbridgedHostConfiguration: { + PolkadotPrimitivesV2AbridgedHostConfiguration: { maxCodeSize: "u32", maxHeadDataSize: "u32", maxUpwardQueueCount: "u32", @@ -1823,7 +1887,7 @@ export default { validationUpgradeDelay: "u32", }, /** - * Lookup167: + * Lookup171: * polkadot_core_primitives::OutboundHrmpMessage */ PolkadotCorePrimitivesOutboundHrmpMessage: { @@ -1831,7 +1895,7 @@ export default { data: "Bytes", }, /** - * Lookup168: cumulus_pallet_parachain_system::pallet::Call + * Lookup172: cumulus_pallet_parachain_system::pallet::Call */ CumulusPalletParachainSystemCall: { _enum: { @@ -1850,30 +1914,30 @@ export default { }, }, /** - * Lookup169: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup173: cumulus_primitives_parachain_inherent::ParachainInherentData */ CumulusPrimitivesParachainInherentParachainInherentData: { - validationData: "PolkadotPrimitivesV1PersistedValidationData", + validationData: "PolkadotPrimitivesV2PersistedValidationData", relayChainState: "SpTrieStorageProof", downwardMessages: "Vec", horizontalMessages: "BTreeMap>", }, /** - * Lookup171: polkadot_core_primitives::InboundDownwardMessage + * Lookup175: polkadot_core_primitives::InboundDownwardMessage */ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: "u32", msg: "Bytes", }, /** - * Lookup174: polkadot_core_primitives::InboundHrmpMessage + * Lookup178: polkadot_core_primitives::InboundHrmpMessage */ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: "u32", data: "Bytes", }, /** - * Lookup177: cumulus_pallet_parachain_system::pallet::Error + * Lookup181: cumulus_pallet_parachain_system::pallet::Error */ CumulusPalletParachainSystemError: { _enum: [ @@ -1888,7 +1952,7 @@ export default { ], }, /** - * Lookup179: pallet_timestamp::pallet::Call + * Lookup183: pallet_timestamp::pallet::Call */ PalletTimestampCall: { _enum: { @@ -1898,7 +1962,7 @@ export default { }, }, /** - * Lookup181: pallet_balances::BalanceLock + * Lookup185: pallet_balances::BalanceLock */ PalletBalancesBalanceLock: { id: "[u8;8]", @@ -1906,26 +1970,26 @@ export default { reasons: "PalletBalancesReasons", }, /** - * Lookup182: pallet_balances::Reasons + * Lookup186: pallet_balances::Reasons */ PalletBalancesReasons: { _enum: ["Fee", "Misc", "All"], }, /** - * Lookup185: pallet_balances::ReserveData + * Lookup189: pallet_balances::ReserveData */ PalletBalancesReserveData: { id: "[u8;4]", amount: "u128", }, /** - * Lookup187: pallet_balances::Releases + * Lookup191: pallet_balances::Releases */ PalletBalancesReleases: { _enum: ["V1_0_0", "V2_0_0"], }, /** - * Lookup188: pallet_balances::pallet::Call + * Lookup192: pallet_balances::pallet::Call */ PalletBalancesCall: { _enum: { @@ -1958,7 +2022,7 @@ export default { }, }, /** - * Lookup189: pallet_balances::pallet::Error + * Lookup193: pallet_balances::pallet::Error */ PalletBalancesError: { _enum: [ @@ -1973,13 +2037,13 @@ export default { ], }, /** - * Lookup191: pallet_transaction_payment::Releases + * Lookup195: pallet_transaction_payment::Releases */ PalletTransactionPaymentReleases: { _enum: ["V1Ancient", "V2"], }, /** - * Lookup193: frame_support::weights::WeightToFeeCoefficient + * Lookup197: frame_support::weights::WeightToFeeCoefficient */ FrameSupportWeightsWeightToFeeCoefficient: { coeffInteger: "u128", @@ -1988,7 +2052,7 @@ export default { degree: "u8", }, /** - * Lookup194: + * Lookup198: * parachain_staking::types::ParachainBondConfig[account::AccountId20](account::AccountId20) */ ParachainStakingParachainBondConfig: { @@ -1996,7 +2060,7 @@ export default { percent: "Percent", }, /** - * Lookup195: parachain_staking::types::RoundInfo + * Lookup199: parachain_staking::types::RoundInfo */ ParachainStakingRoundInfo: { current: "u32", @@ -2004,7 +2068,7 @@ export default { length: "u32", }, /** - * Lookup196: parachain_staking::types::Nominator2 + * Lookup200: parachain_staking::types::Nominator2 */ ParachainStakingNominator2: { delegations: "ParachainStakingSetOrderedSetBond", @@ -2015,25 +2079,25 @@ export default { status: "ParachainStakingDelegatorStatus", }, /** - * Lookup197: + * Lookup201: * parachain_staking::set::OrderedSet> */ ParachainStakingSetOrderedSetBond: "Vec", /** - * Lookup198: parachain_staking::types::Bond + * Lookup202: parachain_staking::types::Bond */ ParachainStakingBond: { owner: "AccountId20", amount: "u128", }, /** - * Lookup200: + * Lookup204: * parachain_staking::set::OrderedSet[account::AccountId20](account::AccountId20) */ ParachainStakingSetOrderedSetAccountId20: "Vec", /** - * Lookup201: parachain_staking::types::DelegatorStatus + * Lookup205: parachain_staking::types::DelegatorStatus */ ParachainStakingDelegatorStatus: { _enum: { @@ -2042,23 +2106,14 @@ export default { }, }, /** - * Lookup202: parachain_staking::types::Delegator + * Lookup206: parachain_staking::types::Delegator */ ParachainStakingDelegator: { id: "AccountId20", delegations: "ParachainStakingSetOrderedSetBond", total: "u128", - requests: "ParachainStakingPendingDelegationRequests", - status: "ParachainStakingDelegatorStatus", - }, - /** - * Lookup203: - * parachain_staking::types::PendingDelegationRequests - */ - ParachainStakingPendingDelegationRequests: { - revocationsCount: "u32", - requests: "BTreeMap", lessTotal: "u128", + status: "ParachainStakingDelegatorStatus", }, /** * Lookup207: parachain_staking::types::CollatorCandidate @@ -2113,14 +2168,24 @@ export default { _enum: ["Full", "Empty", "Partial"], }, /** - * Lookup213: parachain_staking::types::Delegations + * Lookup214: + * parachain_staking::delegation_requests::ScheduledRequest + */ + ParachainStakingDelegationRequestsScheduledRequest: { + delegator: "AccountId20", + whenExecutable: "u32", + action: "ParachainStakingDelegationRequestsDelegationAction", + }, + /** + * Lookup215: parachain_staking::types::Delegations */ ParachainStakingDelegations: { delegations: "Vec", total: "u128", }, /** - * Lookup214: parachain_staking::types::Collator2 + * Lookup216: parachain_staking::types::Collator2 */ ParachainStakingCollator2: { id: "AccountId20", @@ -2133,7 +2198,7 @@ export default { state: "ParachainStakingCollatorStatus", }, /** - * Lookup216: parachain_staking::types::CollatorSnapshot + * Lookup218: parachain_staking::types::CollatorSnapshot */ ParachainStakingCollatorSnapshot: { bond: "u128", @@ -2141,7 +2206,7 @@ export default { total: "u128", }, /** - * Lookup217: parachain_staking::types::DelayedPayout + * Lookup219: parachain_staking::types::DelayedPayout */ ParachainStakingDelayedPayout: { roundIssuance: "u128", @@ -2149,45 +2214,43 @@ export default { collatorCommission: "Perbill", }, /** - * Lookup218: parachain_staking::inflation::InflationInfo + * Lookup220: parachain_staking::inflation::InflationInfo */ ParachainStakingInflationInflationInfo: { - expect: "ParachainStakingInflationRangeU128", - annual: "ParachainStakingInflationRangePerbill", - round: "ParachainStakingInflationRangePerbill", - }, - /** - * Lookup219: parachain_staking::inflation::Range - */ - ParachainStakingInflationRangeU128: { - min: "u128", - ideal: "u128", - max: "u128", - }, - /** - * Lookup220: parachain_staking::inflation::Range - */ - ParachainStakingInflationRangePerbill: { - min: "Perbill", - ideal: "Perbill", - max: "Perbill", + expect: { + min: "u128", + ideal: "u128", + max: "u128", + }, + annual: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, + round: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, }, /** - * Lookup221: parachain_staking::pallet::Call + * Lookup223: parachain_staking::pallet::Call */ ParachainStakingCall: { _enum: { - hotfix_remove_delegation_requests: { - delegators: "Vec", - }, - hotfix_update_candidate_pool_value: { - candidates: "Vec", - }, set_staking_expectations: { - expectations: "ParachainStakingInflationRangeU128", + expectations: { + min: "u128", + ideal: "u128", + max: "u128", + }, }, set_inflation: { - schedule: "ParachainStakingInflationRangePerbill", + schedule: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, }, set_parachain_bond_account: { _alias: { @@ -2278,7 +2341,7 @@ export default { }, }, /** - * Lookup222: parachain_staking::pallet::Error + * Lookup224: parachain_staking::pallet::Error */ ParachainStakingError: { _enum: [ @@ -2322,23 +2385,24 @@ export default { "PendingDelegationRequestDNE", "PendingDelegationRequestAlreadyExists", "PendingDelegationRequestNotDueYet", - "CannotDelegateLessThanLowestBottomWhenBottomIsFull", + "CannotDelegateLessThanOrEqualToLowestBottomWhenFull", + "PendingDelegationRevoke", ], }, /** - * Lookup223: pallet_author_inherent::pallet::Call + * Lookup225: pallet_author_inherent::pallet::Call */ PalletAuthorInherentCall: { _enum: ["kick_off_authorship_validation"], }, /** - * Lookup224: pallet_author_inherent::pallet::Error + * Lookup226: pallet_author_inherent::pallet::Error */ PalletAuthorInherentError: { _enum: ["AuthorAlreadySet", "NoAccountId", "CannotBeAuthor"], }, /** - * Lookup225: pallet_author_slot_filter::pallet::Call + * Lookup227: pallet_author_slot_filter::pallet::Call */ PalletAuthorSlotFilterCall: { _enum: { @@ -2346,37 +2410,47 @@ export default { _alias: { new_: "new", }, - new_: "Percent", + new_: "u32", }, }, }, /** - * Lookup226: - * pallet_author_mapping::pallet::RegistrationInfo + * Lookup228: pallet_author_mapping::pallet::RegistrationInfo */ PalletAuthorMappingRegistrationInfo: { + _alias: { + keys_: "keys", + }, account: "AccountId20", deposit: "u128", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, /** - * Lookup227: pallet_author_mapping::pallet::Call + * Lookup229: pallet_author_mapping::pallet::Call */ PalletAuthorMappingCall: { _enum: { add_association: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", }, update_association: { - oldAuthorId: "NimbusPrimitivesNimbusCryptoPublic", - newAuthorId: "NimbusPrimitivesNimbusCryptoPublic", + oldNimbusId: "NimbusPrimitivesNimbusCryptoPublic", + newNimbusId: "NimbusPrimitivesNimbusCryptoPublic", }, clear_association: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", + }, + remove_keys: "Null", + set_keys: { + _alias: { + keys_: "keys", + }, + keys_: "Bytes", }, }, }, /** - * Lookup228: pallet_author_mapping::pallet::Error + * Lookup230: pallet_author_mapping::pallet::Error */ PalletAuthorMappingError: { _enum: [ @@ -2384,10 +2458,73 @@ export default { "NotYourAssociation", "CannotAffordSecurityDeposit", "AlreadyAssociated", + "OldAuthorIdNotFound", + "WrongKeySize", + "DecodeNimbusFailed", + "DecodeKeysFailed", ], }, /** - * Lookup229: pallet_utility::pallet::Call + * Lookup231: + * pallet_moonbeam_orbiters::types::CollatorPoolInfo[account::AccountId20](account::AccountId20) + */ + PalletMoonbeamOrbitersCollatorPoolInfo: { + orbiters: "Vec", + maybeCurrentOrbiter: "Option", + nextOrbiter: "u32", + }, + /** + * Lookup233: + * pallet_moonbeam_orbiters::types::CurrentOrbiter[account::AccountId20](account::AccountId20) + */ + PalletMoonbeamOrbitersCurrentOrbiter: { + accountId: "AccountId20", + removed: "bool", + }, + /** + * Lookup234: pallet_moonbeam_orbiters::pallet::Call + */ + PalletMoonbeamOrbitersCall: { + _enum: { + collator_add_orbiter: { + orbiter: "AccountId20", + }, + collator_remove_orbiter: { + orbiter: "AccountId20", + }, + orbiter_leave_collator_pool: { + collator: "AccountId20", + }, + orbiter_register: "Null", + orbiter_unregister: { + collatorsPoolCount: "u32", + }, + add_collator: { + collator: "AccountId20", + }, + remove_collator: { + collator: "AccountId20", + }, + }, + }, + /** + * Lookup235: pallet_moonbeam_orbiters::pallet::Error + */ + PalletMoonbeamOrbitersError: { + _enum: [ + "CollatorAlreadyAdded", + "CollatorNotFound", + "CollatorPoolTooLarge", + "CollatorsPoolCountTooLow", + "MinOrbiterDepositNotSet", + "OrbiterAlreadyInPool", + "OrbiterDepositNotFound", + "OrbiterNotFound", + "OrbiterStillInAPool", + ], + }, + /** + * Lookup236: pallet_utility::pallet::Call */ PalletUtilityCall: { _enum: { @@ -2408,7 +2545,7 @@ export default { }, }, /** - * Lookup232: pallet_proxy::pallet::Call + * Lookup239: pallet_proxy::pallet::Call */ PalletProxyCall: { _enum: { @@ -2461,13 +2598,13 @@ export default { }, }, /** - * Lookup234: pallet_maintenance_mode::pallet::Call + * Lookup241: pallet_maintenance_mode::pallet::Call */ PalletMaintenanceModeCall: { _enum: ["enter_maintenance_mode", "resume_normal_operation"], }, /** - * Lookup235: pallet_identity::pallet::Call + * Lookup242: pallet_identity::pallet::Call */ PalletIdentityCall: { _enum: { @@ -2526,7 +2663,7 @@ export default { }, }, /** - * Lookup236: pallet_identity::types::IdentityInfo + * Lookup243: pallet_identity::types::IdentityInfo */ PalletIdentityIdentityInfo: { additional: "Vec<(Data,Data)>", @@ -2540,7 +2677,7 @@ export default { twitter: "Data", }, /** - * Lookup272: pallet_identity::types::BitFlags + * Lookup279: pallet_identity::types::BitFlags */ PalletIdentityBitFlags: { _bitLength: 64, @@ -2554,7 +2691,7 @@ export default { Twitter: 128, }, /** - * Lookup273: pallet_identity::types::IdentityField + * Lookup280: pallet_identity::types::IdentityField */ PalletIdentityIdentityField: { _enum: [ @@ -2690,7 +2827,7 @@ export default { ], }, /** - * Lookup274: pallet_identity::types::Judgement + * Lookup281: pallet_identity::types::Judgement */ PalletIdentityJudgement: { _enum: { @@ -2704,7 +2841,7 @@ export default { }, }, /** - * Lookup275: pallet_evm::pallet::Call + * Lookup282: pallet_evm::pallet::Call */ PalletEvmCall: { _enum: { @@ -2750,7 +2887,7 @@ export default { }, }, /** - * Lookup280: pallet_ethereum::pallet::Call + * Lookup287: pallet_ethereum::pallet::Call */ PalletEthereumCall: { _enum: { @@ -2760,7 +2897,7 @@ export default { }, }, /** - * Lookup281: ethereum::transaction::TransactionV2 + * Lookup288: ethereum::transaction::TransactionV2 */ EthereumTransactionTransactionV2: { _enum: { @@ -2770,7 +2907,7 @@ export default { }, }, /** - * Lookup282: ethereum::transaction::LegacyTransaction + * Lookup289: ethereum::transaction::LegacyTransaction */ EthereumTransactionLegacyTransaction: { nonce: "U256", @@ -2782,7 +2919,7 @@ export default { signature: "EthereumTransactionTransactionSignature", }, /** - * Lookup283: ethereum::transaction::TransactionAction + * Lookup290: ethereum::transaction::TransactionAction */ EthereumTransactionTransactionAction: { _enum: { @@ -2791,7 +2928,7 @@ export default { }, }, /** - * Lookup284: ethereum::transaction::TransactionSignature + * Lookup291: ethereum::transaction::TransactionSignature */ EthereumTransactionTransactionSignature: { v: "u64", @@ -2799,7 +2936,7 @@ export default { s: "H256", }, /** - * Lookup286: ethereum::transaction::EIP2930Transaction + * Lookup293: ethereum::transaction::EIP2930Transaction */ EthereumTransactionEip2930Transaction: { chainId: "u64", @@ -2815,14 +2952,14 @@ export default { s: "H256", }, /** - * Lookup288: ethereum::transaction::AccessListItem + * Lookup295: ethereum::transaction::AccessListItem */ EthereumTransactionAccessListItem: { address: "H160", storageKeys: "Vec", }, /** - * Lookup289: ethereum::transaction::EIP1559Transaction + * Lookup296: ethereum::transaction::EIP1559Transaction */ EthereumTransactionEip1559Transaction: { chainId: "u64", @@ -2839,7 +2976,7 @@ export default { s: "H256", }, /** - * Lookup290: pallet_base_fee::pallet::Call + * Lookup297: pallet_base_fee::pallet::Call */ PalletBaseFeeCall: { _enum: { @@ -2855,7 +2992,7 @@ export default { }, }, /** - * Lookup291: pallet_scheduler::pallet::Call + * Lookup298: pallet_scheduler::pallet::Call */ PalletSchedulerCall: { _enum: { @@ -2895,7 +3032,7 @@ export default { }, }, /** - * Lookup293: + * Lookup300: * frame_support::traits::schedule::MaybeHashed */ @@ -2906,7 +3043,7 @@ export default { }, }, /** - * Lookup294: pallet_democracy::pallet::Call + * Lookup301: pallet_democracy::pallet::Call */ PalletDemocracyCall: { _enum: { @@ -2995,13 +3132,13 @@ export default { }, }, /** - * Lookup295: pallet_democracy::conviction::Conviction + * Lookup302: pallet_democracy::conviction::Conviction */ PalletDemocracyConviction: { _enum: ["None", "Locked1x", "Locked2x", "Locked3x", "Locked4x", "Locked5x", "Locked6x"], }, /** - * Lookup297: pallet_collective::pallet::Call + * Lookup304: pallet_collective::pallet::Call */ PalletCollectiveCall: { _enum: { @@ -3036,7 +3173,7 @@ export default { }, }, /** - * Lookup299: pallet_treasury::pallet::Call + * Lookup306: pallet_treasury::pallet::Call */ PalletTreasuryCall: { _enum: { @@ -3053,7 +3190,7 @@ export default { }, }, /** - * Lookup300: pallet_crowdloan_rewards::pallet::Call + * Lookup307: pallet_crowdloan_rewards::pallet::Call */ PalletCrowdloanRewardsCall: { _enum: { @@ -3080,7 +3217,7 @@ export default { }, }, /** - * Lookup301: sp_runtime::MultiSignature + * Lookup308: sp_runtime::MultiSignature */ SpRuntimeMultiSignature: { _enum: { @@ -3090,19 +3227,19 @@ export default { }, }, /** - * Lookup302: sp_core::ed25519::Signature + * Lookup309: sp_core::ed25519::Signature */ SpCoreEd25519Signature: "[u8;64]", /** - * Lookup304: sp_core::sr25519::Signature + * Lookup311: sp_core::sr25519::Signature */ SpCoreSr25519Signature: "[u8;64]", /** - * Lookup305: sp_core::ecdsa::Signature + * Lookup312: sp_core::ecdsa::Signature */ SpCoreEcdsaSignature: "[u8;65]", /** - * Lookup311: cumulus_pallet_dmp_queue::pallet::Call + * Lookup318: cumulus_pallet_dmp_queue::pallet::Call */ CumulusPalletDmpQueueCall: { _enum: { @@ -3113,7 +3250,7 @@ export default { }, }, /** - * Lookup312: pallet_xcm::pallet::Call + * Lookup319: pallet_xcm::pallet::Call */ PalletXcmCall: { _enum: { @@ -3167,7 +3304,7 @@ export default { }, }, /** - * Lookup313: xcm::VersionedXcm + * Lookup320: xcm::VersionedXcm */ XcmVersionedXcm: { _enum: { @@ -3177,7 +3314,7 @@ export default { }, }, /** - * Lookup314: xcm::v0::Xcm + * Lookup321: xcm::v0::Xcm */ XcmV0Xcm: { _enum: { @@ -3231,7 +3368,7 @@ export default { }, }, /** - * Lookup316: xcm::v0::order::Order + * Lookup323: xcm::v0::order::Order */ XcmV0Order: { _enum: { @@ -3274,7 +3411,7 @@ export default { }, }, /** - * Lookup318: xcm::v0::Response + * Lookup325: xcm::v0::Response */ XcmV0Response: { _enum: { @@ -3282,7 +3419,7 @@ export default { }, }, /** - * Lookup319: xcm::v1::Xcm + * Lookup326: xcm::v1::Xcm */ XcmV1Xcm: { _enum: { @@ -3341,7 +3478,7 @@ export default { }, }, /** - * Lookup321: xcm::v1::order::Order + * Lookup328: xcm::v1::order::Order */ XcmV1Order: { _enum: { @@ -3386,7 +3523,7 @@ export default { }, }, /** - * Lookup323: xcm::v1::Response + * Lookup330: xcm::v1::Response */ XcmV1Response: { _enum: { @@ -3395,7 +3532,7 @@ export default { }, }, /** - * Lookup337: pallet_assets::pallet::Call + * Lookup344: pallet_assets::pallet::Call */ PalletAssetsCall: { _enum: { @@ -3523,7 +3660,7 @@ export default { }, }, /** - * Lookup338: pallet_assets::types::DestroyWitness + * Lookup345: pallet_assets::types::DestroyWitness */ PalletAssetsDestroyWitness: { accounts: "Compact", @@ -3531,7 +3668,7 @@ export default { approvals: "Compact", }, /** - * Lookup339: pallet_asset_manager::pallet::Call + * Lookup346: pallet_asset_manager::pallet::Call */ PalletAssetManagerCall: { _enum: { @@ -3577,7 +3714,7 @@ export default { }, }, /** - * Lookup340: orml_xtokens::module::Call + * Lookup347: orml_xtokens::module::Call */ OrmlXtokensModuleCall: { _enum: { @@ -3620,7 +3757,7 @@ export default { }, }, /** - * Lookup341: moonbeam_runtime::xcm_config::CurrencyId + * Lookup348: moonbeam_runtime::xcm_config::CurrencyId */ MoonbeamRuntimeXcmConfigCurrencyId: { _enum: { @@ -3630,7 +3767,7 @@ export default { }, }, /** - * Lookup342: xcm::VersionedMultiAsset + * Lookup349: xcm::VersionedMultiAsset */ XcmVersionedMultiAsset: { _enum: { @@ -3639,7 +3776,7 @@ export default { }, }, /** - * Lookup345: xcm_transactor::pallet::Call + * Lookup352: xcm_transactor::pallet::Call */ XcmTransactorCall: { _enum: { @@ -3675,22 +3812,41 @@ export default { set_transact_info: { location: "XcmVersionedMultiLocation", transactExtraWeight: "u64", - feePerSecond: "u128", maxWeight: "u64", + transactExtraWeightSigned: "Option", }, remove_transact_info: { location: "XcmVersionedMultiLocation", }, + transact_through_signed: { + dest: "XcmVersionedMultiLocation", + feeCurrencyId: "MoonbeamRuntimeXcmConfigCurrencyId", + destWeight: "u64", + call: "Bytes", + }, + transact_through_signed_multilocation: { + dest: "XcmVersionedMultiLocation", + feeLocation: "XcmVersionedMultiLocation", + destWeight: "u64", + call: "Bytes", + }, + set_fee_per_second: { + assetLocation: "XcmVersionedMultiLocation", + feePerSecond: "u128", + }, + remove_fee_per_second: { + assetLocation: "XcmVersionedMultiLocation", + }, }, }, /** - * Lookup346: moonbeam_runtime::xcm_config::Transactors + * Lookup353: moonbeam_runtime::xcm_config::Transactors */ MoonbeamRuntimeXcmConfigTransactors: { _enum: ["Relay"], }, /** - * Lookup348: moonbeam_runtime::OriginCaller + * Lookup355: moonbeam_runtime::OriginCaller */ MoonbeamRuntimeOriginCaller: { _enum: { @@ -3801,7 +3957,7 @@ export default { }, }, /** - * Lookup349: + * Lookup356: * frame_support::dispatch::RawOrigin[account::AccountId20](account::AccountId20) */ FrameSupportDispatchRawOrigin: { @@ -3812,7 +3968,7 @@ export default { }, }, /** - * Lookup350: pallet_ethereum::RawOrigin + * Lookup357: pallet_ethereum::RawOrigin */ PalletEthereumRawOrigin: { _enum: { @@ -3820,7 +3976,7 @@ export default { }, }, /** - * Lookup351: pallet_collective::RawOrigin + * Lookup358: pallet_collective::RawOrigin */ PalletCollectiveRawOrigin: { _enum: { @@ -3830,7 +3986,7 @@ export default { }, }, /** - * Lookup353: cumulus_pallet_xcm::pallet::Origin + * Lookup360: cumulus_pallet_xcm::pallet::Origin */ CumulusPalletXcmOrigin: { _enum: { @@ -3839,7 +3995,7 @@ export default { }, }, /** - * Lookup354: pallet_xcm::pallet::Origin + * Lookup361: pallet_xcm::pallet::Origin */ PalletXcmOrigin: { _enum: { @@ -3848,17 +4004,17 @@ export default { }, }, /** - * Lookup355: sp_core::Void + * Lookup362: sp_core::Void */ SpCoreVoid: "Null", /** - * Lookup356: pallet_utility::pallet::Error + * Lookup363: pallet_utility::pallet::Error */ PalletUtilityError: { _enum: ["TooManyCalls"], }, /** - * Lookup359: pallet_proxy::ProxyDefinition */ PalletProxyProxyDefinition: { @@ -3867,7 +4023,7 @@ export default { delay: "u32", }, /** - * Lookup363: pallet_proxy::Announcement */ PalletProxyAnnouncement: { @@ -3876,7 +4032,7 @@ export default { height: "u32", }, /** - * Lookup365: pallet_proxy::pallet::Error + * Lookup372: pallet_proxy::pallet::Error */ PalletProxyError: { _enum: [ @@ -3891,13 +4047,13 @@ export default { ], }, /** - * Lookup366: pallet_maintenance_mode::pallet::Error + * Lookup373: pallet_maintenance_mode::pallet::Error */ PalletMaintenanceModeError: { _enum: ["AlreadyInMaintenanceMode", "NotInMaintenanceMode"], }, /** - * Lookup367: pallet_identity::types::Registration */ PalletIdentityRegistration: { @@ -3906,7 +4062,7 @@ export default { info: "PalletIdentityIdentityInfo", }, /** - * Lookup375: pallet_identity::types::RegistrarInfo + * Lookup382: pallet_identity::types::RegistrarInfo */ PalletIdentityRegistrarInfo: { account: "AccountId20", @@ -3914,7 +4070,7 @@ export default { fields: "PalletIdentityBitFlags", }, /** - * Lookup377: pallet_identity::pallet::Error + * Lookup384: pallet_identity::pallet::Error */ PalletIdentityError: { _enum: [ @@ -3937,7 +4093,7 @@ export default { ], }, /** - * Lookup379: pallet_evm::pallet::Error + * Lookup386: pallet_evm::pallet::Error */ PalletEvmError: { _enum: [ @@ -3951,7 +4107,7 @@ export default { ], }, /** - * Lookup382: fp_rpc::TransactionStatus + * Lookup389: fp_rpc::TransactionStatus */ FpRpcTransactionStatus: { transactionHash: "H256", @@ -3963,11 +4119,11 @@ export default { logsBloom: "EthbloomBloom", }, /** - * Lookup385: ethbloom::Bloom + * Lookup392: ethbloom::Bloom */ EthbloomBloom: "[u8;256]", /** - * Lookup387: ethereum::receipt::ReceiptV3 + * Lookup394: ethereum::receipt::ReceiptV3 */ EthereumReceiptReceiptV3: { _enum: { @@ -3977,7 +4133,7 @@ export default { }, }, /** - * Lookup388: ethereum::receipt::EIP658ReceiptData + * Lookup395: ethereum::receipt::EIP658ReceiptData */ EthereumReceiptEip658ReceiptData: { statusCode: "u8", @@ -3986,7 +4142,7 @@ export default { logs: "Vec", }, /** - * Lookup389: + * Lookup396: * ethereum::block::Block[ethereum::transaction::TransactionV2](ethereum::transaction::TransactionV2) */ EthereumBlock: { @@ -3995,7 +4151,7 @@ export default { ommers: "Vec", }, /** - * Lookup390: ethereum::header::Header + * Lookup397: ethereum::header::Header */ EthereumHeader: { parentHash: "H256", @@ -4015,17 +4171,17 @@ export default { nonce: "EthereumTypesHashH64", }, /** - * Lookup391: ethereum_types::hash::H64 + * Lookup398: ethereum_types::hash::H64 */ EthereumTypesHashH64: "[u8;8]", /** - * Lookup396: pallet_ethereum::pallet::Error + * Lookup403: pallet_ethereum::pallet::Error */ PalletEthereumError: { _enum: ["InvalidSignature", "PreLogExists"], }, /** - * Lookup399: + * Lookup406: * pallet_scheduler::ScheduledV3, BlockNumber, moonbeam_runtime::OriginCaller, * account::AccountId20> @@ -4038,13 +4194,13 @@ export default { origin: "MoonbeamRuntimeOriginCaller", }, /** - * Lookup400: pallet_scheduler::pallet::Error + * Lookup407: pallet_scheduler::pallet::Error */ PalletSchedulerError: { _enum: ["FailedToSchedule", "NotFound", "TargetBlockNumberInPast", "RescheduleNoChange"], }, /** - * Lookup404: pallet_democracy::PreimageStatus */ PalletDemocracyPreimageStatus: { @@ -4060,7 +4216,7 @@ export default { }, }, /** - * Lookup405: pallet_democracy::types::ReferendumInfo */ PalletDemocracyReferendumInfo: { @@ -4073,7 +4229,7 @@ export default { }, }, /** - * Lookup406: pallet_democracy::types::ReferendumStatus */ PalletDemocracyReferendumStatus: { @@ -4084,7 +4240,7 @@ export default { tally: "PalletDemocracyTally", }, /** - * Lookup407: pallet_democracy::types::Tally + * Lookup414: pallet_democracy::types::Tally */ PalletDemocracyTally: { ayes: "u128", @@ -4092,7 +4248,7 @@ export default { turnout: "u128", }, /** - * Lookup408: pallet_democracy::vote::Voting + * Lookup415: pallet_democracy::vote::Voting */ PalletDemocracyVoteVoting: { _enum: { @@ -4111,24 +4267,24 @@ export default { }, }, /** - * Lookup411: pallet_democracy::types::Delegations + * Lookup418: pallet_democracy::types::Delegations */ PalletDemocracyDelegations: { votes: "u128", capital: "u128", }, /** - * Lookup412: pallet_democracy::vote::PriorLock + * Lookup419: pallet_democracy::vote::PriorLock */ PalletDemocracyVotePriorLock: "(u32,u128)", /** - * Lookup415: pallet_democracy::Releases + * Lookup422: pallet_democracy::Releases */ PalletDemocracyReleases: { _enum: ["V1"], }, /** - * Lookup416: pallet_democracy::pallet::Error + * Lookup423: pallet_democracy::pallet::Error */ PalletDemocracyError: { _enum: [ @@ -4163,7 +4319,7 @@ export default { ], }, /** - * Lookup418: pallet_collective::Votes + * Lookup425: pallet_collective::Votes */ PalletCollectiveVotes: { index: "u32", @@ -4173,7 +4329,7 @@ export default { end: "u32", }, /** - * Lookup419: pallet_collective::pallet::Error + * Lookup426: pallet_collective::pallet::Error */ PalletCollectiveError: { _enum: [ @@ -4190,7 +4346,7 @@ export default { ], }, /** - * Lookup421: pallet_treasury::Proposal + * Lookup428: pallet_treasury::Proposal */ PalletTreasuryProposal: { proposer: "AccountId20", @@ -4199,17 +4355,17 @@ export default { bond: "u128", }, /** - * Lookup425: frame_support::PalletId + * Lookup432: frame_support::PalletId */ FrameSupportPalletId: "[u8;8]", /** - * Lookup426: pallet_treasury::pallet::Error + * Lookup433: pallet_treasury::pallet::Error */ PalletTreasuryError: { _enum: ["InsufficientProposersBalance", "InvalidIndex", "TooManyApprovals"], }, /** - * Lookup427: pallet_crowdloan_rewards::pallet::RewardInfo + * Lookup434: pallet_crowdloan_rewards::pallet::RewardInfo */ PalletCrowdloanRewardsRewardInfo: { totalReward: "u128", @@ -4217,7 +4373,7 @@ export default { contributedRelayAddresses: "Vec<[u8;32]>", }, /** - * Lookup429: pallet_crowdloan_rewards::pallet::Error + * Lookup436: pallet_crowdloan_rewards::pallet::Error */ PalletCrowdloanRewardsError: { _enum: [ @@ -4239,7 +4395,7 @@ export default { ], }, /** - * Lookup431: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup438: cumulus_pallet_xcmp_queue::InboundChannelDetails */ CumulusPalletXcmpQueueInboundChannelDetails: { sender: "u32", @@ -4247,19 +4403,19 @@ export default { messageMetadata: "Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>", }, /** - * Lookup432: cumulus_pallet_xcmp_queue::InboundState + * Lookup439: cumulus_pallet_xcmp_queue::InboundState */ CumulusPalletXcmpQueueInboundState: { _enum: ["Ok", "Suspended"], }, /** - * Lookup435: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup442: polkadot_parachain::primitives::XcmpMessageFormat */ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ["ConcatenatedVersionedXcm", "ConcatenatedEncodedBlob", "Signals"], }, /** - * Lookup438: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup445: cumulus_pallet_xcmp_queue::OutboundChannelDetails */ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: "u32", @@ -4269,13 +4425,13 @@ export default { lastIndex: "u16", }, /** - * Lookup439: cumulus_pallet_xcmp_queue::OutboundState + * Lookup446: cumulus_pallet_xcmp_queue::OutboundState */ CumulusPalletXcmpQueueOutboundState: { _enum: ["Ok", "Suspended"], }, /** - * Lookup441: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup448: cumulus_pallet_xcmp_queue::QueueConfigData */ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: "u32", @@ -4286,23 +4442,23 @@ export default { xcmpMaxIndividualWeight: "u64", }, /** - * Lookup443: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup450: cumulus_pallet_xcmp_queue::pallet::Error */ CumulusPalletXcmpQueueError: { _enum: ["FailedToSend", "BadXcmOrigin", "BadXcm", "BadOverweightIndex", "WeightOverLimit"], }, /** - * Lookup444: cumulus_pallet_xcm::pallet::Error + * Lookup451: cumulus_pallet_xcm::pallet::Error */ CumulusPalletXcmError: "Null", /** - * Lookup445: cumulus_pallet_dmp_queue::ConfigData + * Lookup452: cumulus_pallet_dmp_queue::ConfigData */ CumulusPalletDmpQueueConfigData: { maxIndividual: "u64", }, /** - * Lookup446: cumulus_pallet_dmp_queue::PageIndexData + * Lookup453: cumulus_pallet_dmp_queue::PageIndexData */ CumulusPalletDmpQueuePageIndexData: { beginUsed: "u32", @@ -4310,13 +4466,13 @@ export default { overweightCount: "u64", }, /** - * Lookup449: cumulus_pallet_dmp_queue::pallet::Error + * Lookup456: cumulus_pallet_dmp_queue::pallet::Error */ CumulusPalletDmpQueueError: { _enum: ["Unknown", "OverLimit"], }, /** - * Lookup450: pallet_xcm::pallet::QueryStatus + * Lookup457: pallet_xcm::pallet::QueryStatus */ PalletXcmQueryStatus: { _enum: { @@ -4336,7 +4492,7 @@ export default { }, }, /** - * Lookup453: xcm::VersionedResponse + * Lookup460: xcm::VersionedResponse */ XcmVersionedResponse: { _enum: { @@ -4346,7 +4502,7 @@ export default { }, }, /** - * Lookup459: pallet_xcm::pallet::VersionMigrationStage + * Lookup466: pallet_xcm::pallet::VersionMigrationStage */ PalletXcmVersionMigrationStage: { _enum: { @@ -4357,7 +4513,7 @@ export default { }, }, /** - * Lookup460: pallet_xcm::pallet::Error + * Lookup467: pallet_xcm::pallet::Error */ PalletXcmError: { _enum: [ @@ -4377,7 +4533,7 @@ export default { ], }, /** - * Lookup461: pallet_assets::types::AssetDetails */ PalletAssetsAssetDetails: { @@ -4395,7 +4551,7 @@ export default { isFrozen: "bool", }, /** - * Lookup463: pallet_assets::types::AssetAccount + * Lookup470: pallet_assets::types::AssetAccount */ PalletAssetsAssetAccount: { balance: "u128", @@ -4404,7 +4560,7 @@ export default { extra: "Null", }, /** - * Lookup464: pallet_assets::types::ExistenceReason + * Lookup471: pallet_assets::types::ExistenceReason */ PalletAssetsExistenceReason: { _enum: { @@ -4415,14 +4571,14 @@ export default { }, }, /** - * Lookup466: pallet_assets::types::Approval + * Lookup473: pallet_assets::types::Approval */ PalletAssetsApproval: { amount: "u128", deposit: "u128", }, /** - * Lookup467: pallet_assets::types::AssetMetadata> */ PalletAssetsAssetMetadata: { @@ -4433,7 +4589,7 @@ export default { isFrozen: "bool", }, /** - * Lookup469: pallet_assets::pallet::Error + * Lookup476: pallet_assets::pallet::Error */ PalletAssetsError: { _enum: [ @@ -4455,14 +4611,14 @@ export default { ], }, /** - * Lookup470: pallet_asset_manager::pallet::AssetInfo + * Lookup477: pallet_asset_manager::pallet::AssetInfo */ PalletAssetManagerAssetInfo: { creator: "AccountId20", deposit: "u128", }, /** - * Lookup472: pallet_asset_manager::pallet::Error + * Lookup479: pallet_asset_manager::pallet::Error */ PalletAssetManagerError: { _enum: [ @@ -4477,7 +4633,7 @@ export default { ], }, /** - * Lookup473: orml_xtokens::module::Error + * Lookup480: orml_xtokens::module::Error */ OrmlXtokensModuleError: { _enum: [ @@ -4502,7 +4658,7 @@ export default { ], }, /** - * Lookup474: xcm_transactor::pallet::Error + * Lookup481: xcm_transactor::pallet::Error */ XcmTransactorError: { _enum: [ @@ -4526,38 +4682,41 @@ export default { "BadVersion", "MaxWeightTransactReached", "UnableToWithdrawAsset", + "FeePerSecondNotSet", + "SignedTransactNotAllowedForDestination", + "FailedMultiLocationToJunction", ], }, /** - * Lookup477: account::EthereumSignature + * Lookup484: account::EthereumSignature */ AccountEthereumSignature: "SpCoreEcdsaSignature", /** - * Lookup479: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup486: frame_system::extensions::check_spec_version::CheckSpecVersion */ FrameSystemExtensionsCheckSpecVersion: "Null", /** - * Lookup480: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup487: frame_system::extensions::check_tx_version::CheckTxVersion */ FrameSystemExtensionsCheckTxVersion: "Null", /** - * Lookup481: frame_system::extensions::check_genesis::CheckGenesis + * Lookup488: frame_system::extensions::check_genesis::CheckGenesis */ FrameSystemExtensionsCheckGenesis: "Null", /** - * Lookup484: frame_system::extensions::check_nonce::CheckNonce + * Lookup491: frame_system::extensions::check_nonce::CheckNonce */ FrameSystemExtensionsCheckNonce: "Compact", /** - * Lookup485: frame_system::extensions::check_weight::CheckWeight + * Lookup492: frame_system::extensions::check_weight::CheckWeight */ FrameSystemExtensionsCheckWeight: "Null", /** - * Lookup486: pallet_transaction_payment::ChargeTransactionPayment + * Lookup493: pallet_transaction_payment::ChargeTransactionPayment */ PalletTransactionPaymentChargeTransactionPayment: "Compact", /** - * Lookup488: moonbeam_runtime::Runtime + * Lookup495: moonbeam_runtime::Runtime */ MoonbeamRuntimeRuntime: "Null", }; diff --git a/typescript-api/src/moonbeam/interfaces/registry.ts b/typescript-api/src/moonbeam/interfaces/registry.ts index ce43def398..aa60dd8e1e 100644 --- a/typescript-api/src/moonbeam/interfaces/registry.ts +++ b/typescript-api/src/moonbeam/interfaces/registry.ts @@ -3,7 +3,6 @@ import type { AccountEthereumSignature, - BTreeSet, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, @@ -157,6 +156,11 @@ import type { PalletMaintenanceModeError, PalletMaintenanceModeEvent, PalletMigrationsEvent, + PalletMoonbeamOrbitersCall, + PalletMoonbeamOrbitersCollatorPoolInfo, + PalletMoonbeamOrbitersCurrentOrbiter, + PalletMoonbeamOrbitersError, + PalletMoonbeamOrbitersEvent, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, @@ -192,8 +196,9 @@ import type { ParachainStakingCollatorSnapshot, ParachainStakingCollatorStatus, ParachainStakingDelayedPayout, - ParachainStakingDelegationChange, - ParachainStakingDelegationRequest, + ParachainStakingDelegationRequestsCancelledScheduledRequest, + ParachainStakingDelegationRequestsDelegationAction, + ParachainStakingDelegationRequestsScheduledRequest, ParachainStakingDelegations, ParachainStakingDelegator, ParachainStakingDelegatorAdded, @@ -201,11 +206,8 @@ import type { ParachainStakingError, ParachainStakingEvent, ParachainStakingInflationInflationInfo, - ParachainStakingInflationRangePerbill, - ParachainStakingInflationRangeU128, ParachainStakingNominator2, ParachainStakingParachainBondConfig, - ParachainStakingPendingDelegationRequests, ParachainStakingRoundInfo, ParachainStakingSetOrderedSetAccountId20, ParachainStakingSetOrderedSetBond, @@ -213,10 +215,11 @@ import type { PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, - PolkadotPrimitivesV1AbridgedHostConfiguration, - PolkadotPrimitivesV1AbridgedHrmpChannel, - PolkadotPrimitivesV1PersistedValidationData, - PolkadotPrimitivesV1UpgradeRestriction, + PolkadotPrimitivesV2AbridgedHostConfiguration, + PolkadotPrimitivesV2AbridgedHrmpChannel, + PolkadotPrimitivesV2PersistedValidationData, + PolkadotPrimitivesV2UpgradeRestriction, + SessionKeysPrimitivesVrfVrfCryptoPublic, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, @@ -229,6 +232,7 @@ import type { SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, + SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, XcmDoubleEncoded, @@ -276,7 +280,6 @@ import type { declare module "@polkadot/types/types/registry" { export interface InterfaceTypes { AccountEthereumSignature: AccountEthereumSignature; - BTreeSet: BTreeSet; CumulusPalletDmpQueueCall: CumulusPalletDmpQueueCall; CumulusPalletDmpQueueConfigData: CumulusPalletDmpQueueConfigData; CumulusPalletDmpQueueError: CumulusPalletDmpQueueError; @@ -430,6 +433,11 @@ declare module "@polkadot/types/types/registry" { PalletMaintenanceModeError: PalletMaintenanceModeError; PalletMaintenanceModeEvent: PalletMaintenanceModeEvent; PalletMigrationsEvent: PalletMigrationsEvent; + PalletMoonbeamOrbitersCall: PalletMoonbeamOrbitersCall; + PalletMoonbeamOrbitersCollatorPoolInfo: PalletMoonbeamOrbitersCollatorPoolInfo; + PalletMoonbeamOrbitersCurrentOrbiter: PalletMoonbeamOrbitersCurrentOrbiter; + PalletMoonbeamOrbitersError: PalletMoonbeamOrbitersError; + PalletMoonbeamOrbitersEvent: PalletMoonbeamOrbitersEvent; PalletProxyAnnouncement: PalletProxyAnnouncement; PalletProxyCall: PalletProxyCall; PalletProxyError: PalletProxyError; @@ -465,8 +473,9 @@ declare module "@polkadot/types/types/registry" { ParachainStakingCollatorSnapshot: ParachainStakingCollatorSnapshot; ParachainStakingCollatorStatus: ParachainStakingCollatorStatus; ParachainStakingDelayedPayout: ParachainStakingDelayedPayout; - ParachainStakingDelegationChange: ParachainStakingDelegationChange; - ParachainStakingDelegationRequest: ParachainStakingDelegationRequest; + ParachainStakingDelegationRequestsCancelledScheduledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest; + ParachainStakingDelegationRequestsDelegationAction: ParachainStakingDelegationRequestsDelegationAction; + ParachainStakingDelegationRequestsScheduledRequest: ParachainStakingDelegationRequestsScheduledRequest; ParachainStakingDelegations: ParachainStakingDelegations; ParachainStakingDelegator: ParachainStakingDelegator; ParachainStakingDelegatorAdded: ParachainStakingDelegatorAdded; @@ -474,11 +483,8 @@ declare module "@polkadot/types/types/registry" { ParachainStakingError: ParachainStakingError; ParachainStakingEvent: ParachainStakingEvent; ParachainStakingInflationInflationInfo: ParachainStakingInflationInflationInfo; - ParachainStakingInflationRangePerbill: ParachainStakingInflationRangePerbill; - ParachainStakingInflationRangeU128: ParachainStakingInflationRangeU128; ParachainStakingNominator2: ParachainStakingNominator2; ParachainStakingParachainBondConfig: ParachainStakingParachainBondConfig; - ParachainStakingPendingDelegationRequests: ParachainStakingPendingDelegationRequests; ParachainStakingRoundInfo: ParachainStakingRoundInfo; ParachainStakingSetOrderedSetAccountId20: ParachainStakingSetOrderedSetAccountId20; ParachainStakingSetOrderedSetBond: ParachainStakingSetOrderedSetBond; @@ -486,10 +492,11 @@ declare module "@polkadot/types/types/registry" { PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage; PolkadotCorePrimitivesOutboundHrmpMessage: PolkadotCorePrimitivesOutboundHrmpMessage; PolkadotParachainPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesXcmpMessageFormat; - PolkadotPrimitivesV1AbridgedHostConfiguration: PolkadotPrimitivesV1AbridgedHostConfiguration; - PolkadotPrimitivesV1AbridgedHrmpChannel: PolkadotPrimitivesV1AbridgedHrmpChannel; - PolkadotPrimitivesV1PersistedValidationData: PolkadotPrimitivesV1PersistedValidationData; - PolkadotPrimitivesV1UpgradeRestriction: PolkadotPrimitivesV1UpgradeRestriction; + PolkadotPrimitivesV2AbridgedHostConfiguration: PolkadotPrimitivesV2AbridgedHostConfiguration; + PolkadotPrimitivesV2AbridgedHrmpChannel: PolkadotPrimitivesV2AbridgedHrmpChannel; + PolkadotPrimitivesV2PersistedValidationData: PolkadotPrimitivesV2PersistedValidationData; + PolkadotPrimitivesV2UpgradeRestriction: PolkadotPrimitivesV2UpgradeRestriction; + SessionKeysPrimitivesVrfVrfCryptoPublic: SessionKeysPrimitivesVrfVrfCryptoPublic; SpCoreEcdsaSignature: SpCoreEcdsaSignature; SpCoreEd25519Signature: SpCoreEd25519Signature; SpCoreSr25519Public: SpCoreSr25519Public; @@ -502,6 +509,7 @@ declare module "@polkadot/types/types/registry" { SpRuntimeModuleError: SpRuntimeModuleError; SpRuntimeMultiSignature: SpRuntimeMultiSignature; SpRuntimeTokenError: SpRuntimeTokenError; + SpRuntimeTransactionalError: SpRuntimeTransactionalError; SpTrieStorageProof: SpTrieStorageProof; SpVersionRuntimeVersion: SpVersionRuntimeVersion; XcmDoubleEncoded: XcmDoubleEncoded; diff --git a/typescript-api/src/moonbeam/interfaces/types-lookup.ts b/typescript-api/src/moonbeam/interfaces/types-lookup.ts index 3608c74d2a..58f867ff1d 100644 --- a/typescript-api/src/moonbeam/interfaces/types-lookup.ts +++ b/typescript-api/src/moonbeam/interfaces/types-lookup.ts @@ -5,7 +5,7 @@ declare module "@polkadot/types/lookup" { import type { Data } from "@polkadot/types"; import type { BTreeMap, - BTreeSet as BTreeSetType, + BTreeSet, Bytes, Compact, Enum, @@ -180,6 +180,8 @@ declare module "@polkadot/types/lookup" { readonly asToken: SpRuntimeTokenError; readonly isArithmetic: boolean; readonly asArithmetic: SpRuntimeArithmeticError; + readonly isTransactional: boolean; + readonly asTransactional: SpRuntimeTransactionalError; readonly type: | "Other" | "CannotLookup" @@ -189,7 +191,8 @@ declare module "@polkadot/types/lookup" { | "NoProviders" | "TooManyConsumers" | "Token" - | "Arithmetic"; + | "Arithmetic" + | "Transactional"; } /** @@ -197,7 +200,7 @@ declare module "@polkadot/types/lookup" { */ export interface SpRuntimeModuleError extends Struct { readonly index: u8; - readonly error: u8; + readonly error: U8aFixed; } /** @@ -232,7 +235,16 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemEvent (27) + * @name SpRuntimeTransactionalError (27) + */ + export interface SpRuntimeTransactionalError extends Enum { + readonly isLimitReached: boolean; + readonly isNoLayer: boolean; + readonly type: "LimitReached" | "NoLayer"; + } + + /** + * @name CumulusPalletParachainSystemEvent (28) */ export interface CumulusPalletParachainSystemEvent extends Enum { readonly isValidationFunctionStored: boolean; @@ -255,7 +267,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesEvent (28) + * @name PalletBalancesEvent (29) */ export interface PalletBalancesEvent extends Enum { readonly isEndowed: boolean; @@ -326,7 +338,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportTokensMiscBalanceStatus (29) + * @name FrameSupportTokensMiscBalanceStatus (30) */ export interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; @@ -335,7 +347,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingEvent (30) + * @name ParachainStakingEvent (31) */ export interface ParachainStakingEvent extends Enum { readonly isNewRound: boolean; @@ -463,7 +475,8 @@ declare module "@polkadot/types/lookup" { readonly isCancelledDelegationRequest: boolean; readonly asCancelledDelegationRequest: { readonly delegator: AccountId20; - readonly cancelledRequest: ParachainStakingDelegationRequest; + readonly cancelledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest; + readonly collator: AccountId20; } & Struct; readonly isDelegation: boolean; readonly asDelegation: { @@ -571,26 +584,26 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegationRequest (32) + * @name ParachainStakingDelegationRequestsCancelledScheduledRequest (33) */ - export interface ParachainStakingDelegationRequest extends Struct { - readonly collator: AccountId20; - readonly amount: u128; + export interface ParachainStakingDelegationRequestsCancelledScheduledRequest extends Struct { readonly whenExecutable: u32; - readonly action: ParachainStakingDelegationChange; + readonly action: ParachainStakingDelegationRequestsDelegationAction; } /** - * @name ParachainStakingDelegationChange (33) + * @name ParachainStakingDelegationRequestsDelegationAction (34) */ - export interface ParachainStakingDelegationChange extends Enum { + export interface ParachainStakingDelegationRequestsDelegationAction extends Enum { readonly isRevoke: boolean; + readonly asRevoke: u128; readonly isDecrease: boolean; + readonly asDecrease: u128; readonly type: "Revoke" | "Decrease"; } /** - * @name ParachainStakingDelegatorAdded (34) + * @name ParachainStakingDelegatorAdded (35) */ export interface ParachainStakingDelegatorAdded extends Enum { readonly isAddedToTop: boolean; @@ -602,56 +615,99 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorSlotFilterEvent (37) + * @name PalletAuthorSlotFilterEvent (38) */ export interface PalletAuthorSlotFilterEvent extends Enum { readonly isEligibleUpdated: boolean; - readonly asEligibleUpdated: Percent; + readonly asEligibleUpdated: u32; readonly type: "EligibleUpdated"; } /** - * @name PalletAuthorMappingEvent (38) + * @name PalletAuthorMappingEvent (40) */ export interface PalletAuthorMappingEvent extends Enum { - readonly isAuthorRegistered: boolean; - readonly asAuthorRegistered: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRegistered: boolean; + readonly asKeysRegistered: { + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly isAuthorDeRegistered: boolean; - readonly asAuthorDeRegistered: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; - } & Struct; - readonly isAuthorRotated: boolean; - readonly asAuthorRotated: { - readonly newAuthorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRemoved: boolean; + readonly asKeysRemoved: { + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly isDefunctAuthorBusted: boolean; - readonly asDefunctAuthorBusted: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRotated: boolean; + readonly asKeysRotated: { + readonly newNimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly type: - | "AuthorRegistered" - | "AuthorDeRegistered" - | "AuthorRotated" - | "DefunctAuthorBusted"; + readonly type: "KeysRegistered" | "KeysRemoved" | "KeysRotated"; } /** - * @name NimbusPrimitivesNimbusCryptoPublic (39) + * @name NimbusPrimitivesNimbusCryptoPublic (41) */ export interface NimbusPrimitivesNimbusCryptoPublic extends SpCoreSr25519Public {} /** - * @name SpCoreSr25519Public (40) + * @name SpCoreSr25519Public (42) */ export interface SpCoreSr25519Public extends U8aFixed {} /** - * @name PalletUtilityEvent (41) + * @name SessionKeysPrimitivesVrfVrfCryptoPublic (43) + */ + export interface SessionKeysPrimitivesVrfVrfCryptoPublic extends SpCoreSr25519Public {} + + /** + * @name PalletMoonbeamOrbitersEvent (44) + */ + export interface PalletMoonbeamOrbitersEvent extends Enum { + readonly isOrbiterJoinCollatorPool: boolean; + readonly asOrbiterJoinCollatorPool: { + readonly collator: AccountId20; + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterLeaveCollatorPool: boolean; + readonly asOrbiterLeaveCollatorPool: { + readonly collator: AccountId20; + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterRewarded: boolean; + readonly asOrbiterRewarded: { + readonly account: AccountId20; + readonly rewards: u128; + } & Struct; + readonly isOrbiterRotation: boolean; + readonly asOrbiterRotation: { + readonly collator: AccountId20; + readonly oldOrbiter: Option; + readonly newOrbiter: Option; + } & Struct; + readonly isOrbiterRegistered: boolean; + readonly asOrbiterRegistered: { + readonly account: AccountId20; + readonly deposit: u128; + } & Struct; + readonly isOrbiterUnregistered: boolean; + readonly asOrbiterUnregistered: { + readonly account: AccountId20; + } & Struct; + readonly type: + | "OrbiterJoinCollatorPool" + | "OrbiterLeaveCollatorPool" + | "OrbiterRewarded" + | "OrbiterRotation" + | "OrbiterRegistered" + | "OrbiterUnregistered"; + } + + /** + * @name PalletUtilityEvent (46) */ export interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; @@ -669,7 +725,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyEvent (44) + * @name PalletProxyEvent (49) */ export interface PalletProxyEvent extends Enum { readonly isProxyExecuted: boolean; @@ -696,11 +752,23 @@ declare module "@polkadot/types/lookup" { readonly proxyType: MoonbeamRuntimeProxyType; readonly delay: u32; } & Struct; - readonly type: "ProxyExecuted" | "AnonymousCreated" | "Announced" | "ProxyAdded"; + readonly isProxyRemoved: boolean; + readonly asProxyRemoved: { + readonly delegator: AccountId20; + readonly delegatee: AccountId20; + readonly proxyType: MoonbeamRuntimeProxyType; + readonly delay: u32; + } & Struct; + readonly type: + | "ProxyExecuted" + | "AnonymousCreated" + | "Announced" + | "ProxyAdded" + | "ProxyRemoved"; } /** - * @name MoonbeamRuntimeProxyType (45) + * @name MoonbeamRuntimeProxyType (50) */ export interface MoonbeamRuntimeProxyType extends Enum { readonly isAny: boolean; @@ -721,7 +789,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeEvent (47) + * @name PalletMaintenanceModeEvent (52) */ export interface PalletMaintenanceModeEvent extends Enum { readonly isEnteredMaintenanceMode: boolean; @@ -742,7 +810,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityEvent (48) + * @name PalletIdentityEvent (53) */ export interface PalletIdentityEvent extends Enum { readonly isIdentitySet: boolean; @@ -810,7 +878,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMigrationsEvent (49) + * @name PalletMigrationsEvent (54) */ export interface PalletMigrationsEvent extends Enum { readonly isRuntimeUpgradeStarted: boolean; @@ -835,7 +903,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmEvent (50) + * @name PalletEvmEvent (55) */ export interface PalletEvmEvent extends Enum { readonly isLog: boolean; @@ -863,7 +931,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumLog (51) + * @name EthereumLog (56) */ export interface EthereumLog extends Struct { readonly address: H160; @@ -872,7 +940,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumEvent (56) + * @name PalletEthereumEvent (61) */ export interface PalletEthereumEvent extends Enum { readonly isExecuted: boolean; @@ -881,7 +949,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitReason (57) + * @name EvmCoreErrorExitReason (62) */ export interface EvmCoreErrorExitReason extends Enum { readonly isSucceed: boolean; @@ -896,7 +964,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitSucceed (58) + * @name EvmCoreErrorExitSucceed (63) */ export interface EvmCoreErrorExitSucceed extends Enum { readonly isStopped: boolean; @@ -906,7 +974,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitError (59) + * @name EvmCoreErrorExitError (64) */ export interface EvmCoreErrorExitError extends Enum { readonly isStackUnderflow: boolean; @@ -944,7 +1012,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitRevert (62) + * @name EvmCoreErrorExitRevert (67) */ export interface EvmCoreErrorExitRevert extends Enum { readonly isReverted: boolean; @@ -952,7 +1020,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitFatal (63) + * @name EvmCoreErrorExitFatal (68) */ export interface EvmCoreErrorExitFatal extends Enum { readonly isNotSupported: boolean; @@ -965,7 +1033,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBaseFeeEvent (64) + * @name PalletBaseFeeEvent (69) */ export interface PalletBaseFeeEvent extends Enum { readonly isNewBaseFeePerGas: boolean; @@ -979,7 +1047,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerEvent (66) + * @name PalletSchedulerEvent (71) */ export interface PalletSchedulerEvent extends Enum { readonly isScheduled: boolean; @@ -1008,7 +1076,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportScheduleLookupError (69) + * @name FrameSupportScheduleLookupError (74) */ export interface FrameSupportScheduleLookupError extends Enum { readonly isUnknown: boolean; @@ -1017,7 +1085,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyEvent (70) + * @name PalletDemocracyEvent (75) */ export interface PalletDemocracyEvent extends Enum { readonly isProposed: boolean; @@ -1136,7 +1204,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteThreshold (72) + * @name PalletDemocracyVoteThreshold (77) */ export interface PalletDemocracyVoteThreshold extends Enum { readonly isSuperMajorityApprove: boolean; @@ -1146,7 +1214,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteAccountVote (73) + * @name PalletDemocracyVoteAccountVote (78) */ export interface PalletDemocracyVoteAccountVote extends Enum { readonly isStandard: boolean; @@ -1163,7 +1231,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveEvent (75) + * @name PalletCollectiveEvent (80) */ export interface PalletCollectiveEvent extends Enum { readonly isProposed: boolean; @@ -1216,7 +1284,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryEvent (77) + * @name PalletTreasuryEvent (82) */ export interface PalletTreasuryEvent extends Enum { readonly isProposed: boolean; @@ -1261,7 +1329,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsEvent (78) + * @name PalletCrowdloanRewardsEvent (83) */ export interface PalletCrowdloanRewardsEvent extends Enum { readonly isInitialPaymentMade: boolean; @@ -1288,7 +1356,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueEvent (80) + * @name CumulusPalletXcmpQueueEvent (84) */ export interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; @@ -1319,7 +1387,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2TraitsError (82) + * @name XcmV2TraitsError (86) */ export interface XcmV2TraitsError extends Enum { readonly isOverflow: boolean; @@ -1380,7 +1448,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmEvent (84) + * @name CumulusPalletXcmEvent (88) */ export interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; @@ -1393,7 +1461,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2TraitsOutcome (86) + * @name XcmV2TraitsOutcome (90) */ export interface XcmV2TraitsOutcome extends Enum { readonly isComplete: boolean; @@ -1406,7 +1474,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletDmpQueueEvent (87) + * @name CumulusPalletDmpQueueEvent (91) */ export interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; @@ -1431,7 +1499,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmEvent (88) + * @name PalletXcmEvent (92) */ export interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; @@ -1486,7 +1554,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiLocation (89) + * @name XcmV1MultiLocation (93) */ export interface XcmV1MultiLocation extends Struct { readonly parents: u8; @@ -1494,7 +1562,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultilocationJunctions (90) + * @name XcmV1MultilocationJunctions (94) */ export interface XcmV1MultilocationJunctions extends Enum { readonly isHere: boolean; @@ -1543,7 +1611,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Junction (91) + * @name XcmV1Junction (95) */ export interface XcmV1Junction extends Enum { readonly isParachain: boolean; @@ -1588,7 +1656,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionNetworkId (93) + * @name XcmV0JunctionNetworkId (97) */ export interface XcmV0JunctionNetworkId extends Enum { readonly isAny: boolean; @@ -1600,7 +1668,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionBodyId (96) + * @name XcmV0JunctionBodyId (100) */ export interface XcmV0JunctionBodyId extends Enum { readonly isUnit: boolean; @@ -1623,7 +1691,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionBodyPart (97) + * @name XcmV0JunctionBodyPart (101) */ export interface XcmV0JunctionBodyPart extends Enum { readonly isVoice: boolean; @@ -1650,12 +1718,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2Xcm (98) + * @name XcmV2Xcm (102) */ export interface XcmV2Xcm extends Vec {} /** - * @name XcmV2Instruction (100) + * @name XcmV2Instruction (104) */ export interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; @@ -1805,12 +1873,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetMultiAssets (101) + * @name XcmV1MultiassetMultiAssets (105) */ export interface XcmV1MultiassetMultiAssets extends Vec {} /** - * @name XcmV1MultiAsset (103) + * @name XcmV1MultiAsset (107) */ export interface XcmV1MultiAsset extends Struct { readonly id: XcmV1MultiassetAssetId; @@ -1818,7 +1886,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetAssetId (104) + * @name XcmV1MultiassetAssetId (108) */ export interface XcmV1MultiassetAssetId extends Enum { readonly isConcrete: boolean; @@ -1829,7 +1897,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetFungibility (105) + * @name XcmV1MultiassetFungibility (109) */ export interface XcmV1MultiassetFungibility extends Enum { readonly isFungible: boolean; @@ -1840,7 +1908,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetAssetInstance (106) + * @name XcmV1MultiassetAssetInstance (110) */ export interface XcmV1MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; @@ -1860,7 +1928,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2Response (108) + * @name XcmV2Response (112) */ export interface XcmV2Response extends Enum { readonly isNull: boolean; @@ -1874,7 +1942,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0OriginKind (111) + * @name XcmV0OriginKind (115) */ export interface XcmV0OriginKind extends Enum { readonly isNative: boolean; @@ -1885,14 +1953,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmDoubleEncoded (112) + * @name XcmDoubleEncoded (116) */ export interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } /** - * @name XcmV1MultiassetMultiAssetFilter (113) + * @name XcmV1MultiassetMultiAssetFilter (117) */ export interface XcmV1MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; @@ -1903,7 +1971,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetWildMultiAsset (114) + * @name XcmV1MultiassetWildMultiAsset (118) */ export interface XcmV1MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; @@ -1916,7 +1984,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetWildFungibility (115) + * @name XcmV1MultiassetWildFungibility (119) */ export interface XcmV1MultiassetWildFungibility extends Enum { readonly isFungible: boolean; @@ -1925,7 +1993,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2WeightLimit (116) + * @name XcmV2WeightLimit (120) */ export interface XcmV2WeightLimit extends Enum { readonly isUnlimited: boolean; @@ -1935,7 +2003,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiAssets (118) + * @name XcmVersionedMultiAssets (122) */ export interface XcmVersionedMultiAssets extends Enum { readonly isV0: boolean; @@ -1946,7 +2014,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0MultiAsset (120) + * @name XcmV0MultiAsset (124) */ export interface XcmV0MultiAsset extends Enum { readonly isNone: boolean; @@ -2005,7 +2073,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0MultiLocation (121) + * @name XcmV0MultiLocation (125) */ export interface XcmV0MultiLocation extends Enum { readonly isNull: boolean; @@ -2054,7 +2122,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Junction (122) + * @name XcmV0Junction (126) */ export interface XcmV0Junction extends Enum { readonly isParent: boolean; @@ -2101,7 +2169,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiLocation (123) + * @name XcmVersionedMultiLocation (127) */ export interface XcmVersionedMultiLocation extends Enum { readonly isV0: boolean; @@ -2112,7 +2180,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsEvent (124) + * @name PalletAssetsEvent (128) */ export interface PalletAssetsEvent extends Enum { readonly isCreated: boolean; @@ -2238,7 +2306,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerEvent (125) + * @name PalletAssetManagerEvent (129) */ export interface PalletAssetManagerEvent extends Enum { readonly isForeignAssetRegistered: boolean; @@ -2293,7 +2361,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbeamRuntimeXcmConfigAssetType (126) + * @name MoonbeamRuntimeXcmConfigAssetType (130) */ export interface MoonbeamRuntimeXcmConfigAssetType extends Enum { readonly isXcm: boolean; @@ -2302,7 +2370,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbeamRuntimeAssetConfigAssetRegistrarMetadata (127) + * @name MoonbeamRuntimeAssetConfigAssetRegistrarMetadata (131) */ export interface MoonbeamRuntimeAssetConfigAssetRegistrarMetadata extends Struct { readonly name: Bytes; @@ -2312,7 +2380,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleEvent (128) + * @name OrmlXtokensModuleEvent (132) */ export interface OrmlXtokensModuleEvent extends Enum { readonly isTransferredMultiAssets: boolean; @@ -2326,7 +2394,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorEvent (129) + * @name XcmTransactorEvent (133) */ export interface XcmTransactorEvent extends Enum { readonly isTransactedDerivative: boolean; @@ -2342,6 +2410,12 @@ declare module "@polkadot/types/lookup" { readonly dest: XcmV1MultiLocation; readonly call: Bytes; } & Struct; + readonly isTransactedSigned: boolean; + readonly asTransactedSigned: { + readonly feePayer: AccountId20; + readonly dest: XcmV1MultiLocation; + readonly call: Bytes; + } & Struct; readonly isRegisteredDerivative: boolean; readonly asRegisteredDerivative: { readonly accountId: AccountId20; @@ -2364,27 +2438,39 @@ declare module "@polkadot/types/lookup" { readonly asTransactInfoRemoved: { readonly location: XcmV1MultiLocation; } & Struct; + readonly isDestFeePerSecondChanged: boolean; + readonly asDestFeePerSecondChanged: { + readonly location: XcmV1MultiLocation; + readonly feePerSecond: u128; + } & Struct; + readonly isDestFeePerSecondRemoved: boolean; + readonly asDestFeePerSecondRemoved: { + readonly location: XcmV1MultiLocation; + } & Struct; readonly type: | "TransactedDerivative" | "TransactedSovereign" + | "TransactedSigned" | "RegisteredDerivative" | "DeRegisteredDerivative" | "TransactFailed" | "TransactInfoChanged" - | "TransactInfoRemoved"; + | "TransactInfoRemoved" + | "DestFeePerSecondChanged" + | "DestFeePerSecondRemoved"; } /** - * @name XcmTransactorRemoteTransactInfoWithMaxWeight (130) + * @name XcmTransactorRemoteTransactInfoWithMaxWeight (134) */ export interface XcmTransactorRemoteTransactInfoWithMaxWeight extends Struct { readonly transactExtraWeight: u64; - readonly feePerSecond: u128; readonly maxWeight: u64; + readonly transactExtraWeightSigned: Option; } /** - * @name FrameSystemPhase (132) + * @name FrameSystemPhase (137) */ export interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; @@ -2395,7 +2481,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLastRuntimeUpgradeInfo (134) + * @name FrameSystemLastRuntimeUpgradeInfo (139) */ export interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; @@ -2403,7 +2489,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemCall (135) + * @name FrameSystemCall (140) */ export interface FrameSystemCall extends Enum { readonly isFillBlock: boolean; @@ -2456,7 +2542,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsBlockWeights (139) + * @name FrameSystemLimitsBlockWeights (144) */ export interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: u64; @@ -2465,7 +2551,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsPerDispatchClassWeightsPerClass (140) + * @name FrameSupportWeightsPerDispatchClassWeightsPerClass (145) */ export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; @@ -2474,7 +2560,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsWeightsPerClass (141) + * @name FrameSystemLimitsWeightsPerClass (146) */ export interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: u64; @@ -2484,14 +2570,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsBlockLength (143) + * @name FrameSystemLimitsBlockLength (147) */ export interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportWeightsPerDispatchClassU32; } /** - * @name FrameSupportWeightsPerDispatchClassU32 (144) + * @name FrameSupportWeightsPerDispatchClassU32 (148) */ export interface FrameSupportWeightsPerDispatchClassU32 extends Struct { readonly normal: u32; @@ -2500,7 +2586,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsRuntimeDbWeight (145) + * @name FrameSupportWeightsRuntimeDbWeight (149) */ export interface FrameSupportWeightsRuntimeDbWeight extends Struct { readonly read: u64; @@ -2508,7 +2594,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpVersionRuntimeVersion (146) + * @name SpVersionRuntimeVersion (150) */ export interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; @@ -2522,7 +2608,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemError (150) + * @name FrameSystemError (154) */ export interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; @@ -2541,9 +2627,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1PersistedValidationData (151) + * @name PolkadotPrimitivesV2PersistedValidationData (155) */ - export interface PolkadotPrimitivesV1PersistedValidationData extends Struct { + export interface PolkadotPrimitivesV2PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; readonly relayParentStorageRoot: H256; @@ -2551,40 +2637,35 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1UpgradeRestriction (154) + * @name PolkadotPrimitivesV2UpgradeRestriction (158) */ - export interface PolkadotPrimitivesV1UpgradeRestriction extends Enum { + export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: "Present"; } /** - * @name SpTrieStorageProof (155) + * @name SpTrieStorageProof (159) */ export interface SpTrieStorageProof extends Struct { - readonly trieNodes: BTreeSet; + readonly trieNodes: BTreeSet; } /** - * @name BTreeSet (156) - */ - export interface BTreeSet extends BTreeSetType {} - - /** - * @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (157) + * @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (161) */ export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; readonly relayDispatchQueueSize: ITuple<[u32, u32]>; - readonly ingressChannels: Vec>; - readonly egressChannels: Vec>; + readonly ingressChannels: Vec>; + readonly egressChannels: Vec>; } /** - * @name PolkadotPrimitivesV1AbridgedHrmpChannel (160) + * @name PolkadotPrimitivesV2AbridgedHrmpChannel (164) */ - export interface PolkadotPrimitivesV1AbridgedHrmpChannel extends Struct { + export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; readonly maxMessageSize: u32; @@ -2594,9 +2675,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1AbridgedHostConfiguration (161) + * @name PolkadotPrimitivesV2AbridgedHostConfiguration (165) */ - export interface PolkadotPrimitivesV1AbridgedHostConfiguration extends Struct { + export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; readonly maxUpwardQueueCount: u32; @@ -2609,7 +2690,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotCorePrimitivesOutboundHrmpMessage (167) + * @name PolkadotCorePrimitivesOutboundHrmpMessage (171) */ export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; @@ -2617,7 +2698,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemCall (168) + * @name CumulusPalletParachainSystemCall (172) */ export interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; @@ -2644,17 +2725,17 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPrimitivesParachainInherentParachainInherentData (169) + * @name CumulusPrimitivesParachainInherentParachainInherentData (173) */ export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { - readonly validationData: PolkadotPrimitivesV1PersistedValidationData; + readonly validationData: PolkadotPrimitivesV2PersistedValidationData; readonly relayChainState: SpTrieStorageProof; readonly downwardMessages: Vec; readonly horizontalMessages: BTreeMap>; } /** - * @name PolkadotCorePrimitivesInboundDownwardMessage (171) + * @name PolkadotCorePrimitivesInboundDownwardMessage (175) */ export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; @@ -2662,7 +2743,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotCorePrimitivesInboundHrmpMessage (174) + * @name PolkadotCorePrimitivesInboundHrmpMessage (178) */ export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; @@ -2670,7 +2751,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemError (177) + * @name CumulusPalletParachainSystemError (181) */ export interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; @@ -2693,7 +2774,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTimestampCall (179) + * @name PalletTimestampCall (183) */ export interface PalletTimestampCall extends Enum { readonly isSet: boolean; @@ -2704,7 +2785,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesBalanceLock (181) + * @name PalletBalancesBalanceLock (185) */ export interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; @@ -2713,7 +2794,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReasons (182) + * @name PalletBalancesReasons (186) */ export interface PalletBalancesReasons extends Enum { readonly isFee: boolean; @@ -2723,7 +2804,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReserveData (185) + * @name PalletBalancesReserveData (189) */ export interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; @@ -2731,7 +2812,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReleases (187) + * @name PalletBalancesReleases (191) */ export interface PalletBalancesReleases extends Enum { readonly isV100: boolean; @@ -2740,7 +2821,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesCall (188) + * @name PalletBalancesCall (192) */ export interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; @@ -2785,7 +2866,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesError (189) + * @name PalletBalancesError (193) */ export interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; @@ -2808,7 +2889,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTransactionPaymentReleases (191) + * @name PalletTransactionPaymentReleases (195) */ export interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; @@ -2817,7 +2898,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsWeightToFeeCoefficient (193) + * @name FrameSupportWeightsWeightToFeeCoefficient (197) */ export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct { readonly coeffInteger: u128; @@ -2827,7 +2908,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingParachainBondConfig (194) + * @name ParachainStakingParachainBondConfig (198) */ export interface ParachainStakingParachainBondConfig extends Struct { readonly account: AccountId20; @@ -2835,7 +2916,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingRoundInfo (195) + * @name ParachainStakingRoundInfo (199) */ export interface ParachainStakingRoundInfo extends Struct { readonly current: u32; @@ -2844,7 +2925,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingNominator2 (196) + * @name ParachainStakingNominator2 (200) */ export interface ParachainStakingNominator2 extends Struct { readonly delegations: ParachainStakingSetOrderedSetBond; @@ -2856,12 +2937,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingSetOrderedSetBond (197) + * @name ParachainStakingSetOrderedSetBond (201) */ export interface ParachainStakingSetOrderedSetBond extends Vec {} /** - * @name ParachainStakingBond (198) + * @name ParachainStakingBond (202) */ export interface ParachainStakingBond extends Struct { readonly owner: AccountId20; @@ -2869,12 +2950,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingSetOrderedSetAccountId20 (200) + * @name ParachainStakingSetOrderedSetAccountId20 (204) */ export interface ParachainStakingSetOrderedSetAccountId20 extends Vec {} /** - * @name ParachainStakingDelegatorStatus (201) + * @name ParachainStakingDelegatorStatus (205) */ export interface ParachainStakingDelegatorStatus extends Enum { readonly isActive: boolean; @@ -2884,23 +2965,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegator (202) + * @name ParachainStakingDelegator (206) */ export interface ParachainStakingDelegator extends Struct { readonly id: AccountId20; readonly delegations: ParachainStakingSetOrderedSetBond; readonly total: u128; - readonly requests: ParachainStakingPendingDelegationRequests; - readonly status: ParachainStakingDelegatorStatus; - } - - /** - * @name ParachainStakingPendingDelegationRequests (203) - */ - export interface ParachainStakingPendingDelegationRequests extends Struct { - readonly revocationsCount: u32; - readonly requests: BTreeMap; readonly lessTotal: u128; + readonly status: ParachainStakingDelegatorStatus; } /** @@ -2964,7 +3036,16 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegations (213) + * @name ParachainStakingDelegationRequestsScheduledRequest (214) + */ + export interface ParachainStakingDelegationRequestsScheduledRequest extends Struct { + readonly delegator: AccountId20; + readonly whenExecutable: u32; + readonly action: ParachainStakingDelegationRequestsDelegationAction; + } + + /** + * @name ParachainStakingDelegations (215) */ export interface ParachainStakingDelegations extends Struct { readonly delegations: Vec; @@ -2972,7 +3053,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingCollator2 (214) + * @name ParachainStakingCollator2 (216) */ export interface ParachainStakingCollator2 extends Struct { readonly id: AccountId20; @@ -2986,7 +3067,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingCollatorSnapshot (216) + * @name ParachainStakingCollatorSnapshot (218) */ export interface ParachainStakingCollatorSnapshot extends Struct { readonly bond: u128; @@ -2995,7 +3076,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelayedPayout (217) + * @name ParachainStakingDelayedPayout (219) */ export interface ParachainStakingDelayedPayout extends Struct { readonly roundIssuance: u128; @@ -3004,51 +3085,45 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingInflationInflationInfo (218) + * @name ParachainStakingInflationInflationInfo (220) */ export interface ParachainStakingInflationInflationInfo extends Struct { - readonly expect: ParachainStakingInflationRangeU128; - readonly annual: ParachainStakingInflationRangePerbill; - readonly round: ParachainStakingInflationRangePerbill; - } - - /** - * @name ParachainStakingInflationRangeU128 (219) - */ - export interface ParachainStakingInflationRangeU128 extends Struct { - readonly min: u128; - readonly ideal: u128; - readonly max: u128; - } - - /** - * @name ParachainStakingInflationRangePerbill (220) - */ - export interface ParachainStakingInflationRangePerbill extends Struct { - readonly min: Perbill; - readonly ideal: Perbill; - readonly max: Perbill; + readonly expect: { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct; + readonly annual: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; + readonly round: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; } /** - * @name ParachainStakingCall (221) + * @name ParachainStakingCall (223) */ export interface ParachainStakingCall extends Enum { - readonly isHotfixRemoveDelegationRequests: boolean; - readonly asHotfixRemoveDelegationRequests: { - readonly delegators: Vec; - } & Struct; - readonly isHotfixUpdateCandidatePoolValue: boolean; - readonly asHotfixUpdateCandidatePoolValue: { - readonly candidates: Vec; - } & Struct; readonly isSetStakingExpectations: boolean; readonly asSetStakingExpectations: { - readonly expectations: ParachainStakingInflationRangeU128; + readonly expectations: { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct; } & Struct; readonly isSetInflation: boolean; readonly asSetInflation: { - readonly schedule: ParachainStakingInflationRangePerbill; + readonly schedule: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; } & Struct; readonly isSetParachainBondAccount: boolean; readonly asSetParachainBondAccount: { @@ -3141,8 +3216,6 @@ declare module "@polkadot/types/lookup" { readonly candidate: AccountId20; } & Struct; readonly type: - | "HotfixRemoveDelegationRequests" - | "HotfixUpdateCandidatePoolValue" | "SetStakingExpectations" | "SetInflation" | "SetParachainBondAccount" @@ -3172,7 +3245,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingError (222) + * @name ParachainStakingError (224) */ export interface ParachainStakingError extends Enum { readonly isDelegatorDNE: boolean; @@ -3215,7 +3288,8 @@ declare module "@polkadot/types/lookup" { readonly isPendingDelegationRequestDNE: boolean; readonly isPendingDelegationRequestAlreadyExists: boolean; readonly isPendingDelegationRequestNotDueYet: boolean; - readonly isCannotDelegateLessThanLowestBottomWhenBottomIsFull: boolean; + readonly isCannotDelegateLessThanOrEqualToLowestBottomWhenFull: boolean; + readonly isPendingDelegationRevoke: boolean; readonly type: | "DelegatorDNE" | "DelegatorDNEinTopNorBottom" @@ -3257,11 +3331,12 @@ declare module "@polkadot/types/lookup" { | "PendingDelegationRequestDNE" | "PendingDelegationRequestAlreadyExists" | "PendingDelegationRequestNotDueYet" - | "CannotDelegateLessThanLowestBottomWhenBottomIsFull"; + | "CannotDelegateLessThanOrEqualToLowestBottomWhenFull" + | "PendingDelegationRevoke"; } /** - * @name PalletAuthorInherentCall (223) + * @name PalletAuthorInherentCall (225) */ export interface PalletAuthorInherentCall extends Enum { readonly isKickOffAuthorshipValidation: boolean; @@ -3269,7 +3344,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorInherentError (224) + * @name PalletAuthorInherentError (226) */ export interface PalletAuthorInherentError extends Enum { readonly isAuthorAlreadySet: boolean; @@ -3279,61 +3354,161 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorSlotFilterCall (225) + * @name PalletAuthorSlotFilterCall (227) */ export interface PalletAuthorSlotFilterCall extends Enum { readonly isSetEligible: boolean; readonly asSetEligible: { - readonly new_: Percent; + readonly new_: u32; } & Struct; readonly type: "SetEligible"; } /** - * @name PalletAuthorMappingRegistrationInfo (226) + * @name PalletAuthorMappingRegistrationInfo (228) */ export interface PalletAuthorMappingRegistrationInfo extends Struct { readonly account: AccountId20; readonly deposit: u128; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } /** - * @name PalletAuthorMappingCall (227) + * @name PalletAuthorMappingCall (229) */ export interface PalletAuthorMappingCall extends Enum { readonly isAddAssociation: boolean; readonly asAddAssociation: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; } & Struct; readonly isUpdateAssociation: boolean; readonly asUpdateAssociation: { - readonly oldAuthorId: NimbusPrimitivesNimbusCryptoPublic; - readonly newAuthorId: NimbusPrimitivesNimbusCryptoPublic; + readonly oldNimbusId: NimbusPrimitivesNimbusCryptoPublic; + readonly newNimbusId: NimbusPrimitivesNimbusCryptoPublic; } & Struct; readonly isClearAssociation: boolean; readonly asClearAssociation: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; + } & Struct; + readonly isRemoveKeys: boolean; + readonly isSetKeys: boolean; + readonly asSetKeys: { + readonly keys_: Bytes; } & Struct; - readonly type: "AddAssociation" | "UpdateAssociation" | "ClearAssociation"; + readonly type: + | "AddAssociation" + | "UpdateAssociation" + | "ClearAssociation" + | "RemoveKeys" + | "SetKeys"; } /** - * @name PalletAuthorMappingError (228) + * @name PalletAuthorMappingError (230) */ export interface PalletAuthorMappingError extends Enum { readonly isAssociationNotFound: boolean; readonly isNotYourAssociation: boolean; readonly isCannotAffordSecurityDeposit: boolean; readonly isAlreadyAssociated: boolean; + readonly isOldAuthorIdNotFound: boolean; + readonly isWrongKeySize: boolean; + readonly isDecodeNimbusFailed: boolean; + readonly isDecodeKeysFailed: boolean; readonly type: | "AssociationNotFound" | "NotYourAssociation" | "CannotAffordSecurityDeposit" - | "AlreadyAssociated"; + | "AlreadyAssociated" + | "OldAuthorIdNotFound" + | "WrongKeySize" + | "DecodeNimbusFailed" + | "DecodeKeysFailed"; + } + + /** + * @name PalletMoonbeamOrbitersCollatorPoolInfo (231) + */ + export interface PalletMoonbeamOrbitersCollatorPoolInfo extends Struct { + readonly orbiters: Vec; + readonly maybeCurrentOrbiter: Option; + readonly nextOrbiter: u32; + } + + /** + * @name PalletMoonbeamOrbitersCurrentOrbiter (233) + */ + export interface PalletMoonbeamOrbitersCurrentOrbiter extends Struct { + readonly accountId: AccountId20; + readonly removed: bool; } /** - * @name PalletUtilityCall (229) + * @name PalletMoonbeamOrbitersCall (234) + */ + export interface PalletMoonbeamOrbitersCall extends Enum { + readonly isCollatorAddOrbiter: boolean; + readonly asCollatorAddOrbiter: { + readonly orbiter: AccountId20; + } & Struct; + readonly isCollatorRemoveOrbiter: boolean; + readonly asCollatorRemoveOrbiter: { + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterLeaveCollatorPool: boolean; + readonly asOrbiterLeaveCollatorPool: { + readonly collator: AccountId20; + } & Struct; + readonly isOrbiterRegister: boolean; + readonly isOrbiterUnregister: boolean; + readonly asOrbiterUnregister: { + readonly collatorsPoolCount: u32; + } & Struct; + readonly isAddCollator: boolean; + readonly asAddCollator: { + readonly collator: AccountId20; + } & Struct; + readonly isRemoveCollator: boolean; + readonly asRemoveCollator: { + readonly collator: AccountId20; + } & Struct; + readonly type: + | "CollatorAddOrbiter" + | "CollatorRemoveOrbiter" + | "OrbiterLeaveCollatorPool" + | "OrbiterRegister" + | "OrbiterUnregister" + | "AddCollator" + | "RemoveCollator"; + } + + /** + * @name PalletMoonbeamOrbitersError (235) + */ + export interface PalletMoonbeamOrbitersError extends Enum { + readonly isCollatorAlreadyAdded: boolean; + readonly isCollatorNotFound: boolean; + readonly isCollatorPoolTooLarge: boolean; + readonly isCollatorsPoolCountTooLow: boolean; + readonly isMinOrbiterDepositNotSet: boolean; + readonly isOrbiterAlreadyInPool: boolean; + readonly isOrbiterDepositNotFound: boolean; + readonly isOrbiterNotFound: boolean; + readonly isOrbiterStillInAPool: boolean; + readonly type: + | "CollatorAlreadyAdded" + | "CollatorNotFound" + | "CollatorPoolTooLarge" + | "CollatorsPoolCountTooLow" + | "MinOrbiterDepositNotSet" + | "OrbiterAlreadyInPool" + | "OrbiterDepositNotFound" + | "OrbiterNotFound" + | "OrbiterStillInAPool"; + } + + /** + * @name PalletUtilityCall (236) */ export interface PalletUtilityCall extends Enum { readonly isBatch: boolean; @@ -3358,7 +3533,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyCall (232) + * @name PalletProxyCall (239) */ export interface PalletProxyCall extends Enum { readonly isProxy: boolean; @@ -3430,7 +3605,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeCall (234) + * @name PalletMaintenanceModeCall (241) */ export interface PalletMaintenanceModeCall extends Enum { readonly isEnterMaintenanceMode: boolean; @@ -3439,7 +3614,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityCall (235) + * @name PalletIdentityCall (242) */ export interface PalletIdentityCall extends Enum { readonly isAddRegistrar: boolean; @@ -3523,7 +3698,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityIdentityInfo (236) + * @name PalletIdentityIdentityInfo (243) */ export interface PalletIdentityIdentityInfo extends Struct { readonly additional: Vec>; @@ -3538,7 +3713,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityBitFlags (272) + * @name PalletIdentityBitFlags (279) */ export interface PalletIdentityBitFlags extends Set { readonly isDisplay: boolean; @@ -3552,7 +3727,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityIdentityField (273) + * @name PalletIdentityIdentityField (280) */ export interface PalletIdentityIdentityField extends Enum { readonly isDisplay: boolean; @@ -3575,7 +3750,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityJudgement (274) + * @name PalletIdentityJudgement (281) */ export interface PalletIdentityJudgement extends Enum { readonly isUnknown: boolean; @@ -3597,7 +3772,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmCall (275) + * @name PalletEvmCall (282) */ export interface PalletEvmCall extends Enum { readonly isWithdraw: boolean; @@ -3648,7 +3823,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumCall (280) + * @name PalletEthereumCall (287) */ export interface PalletEthereumCall extends Enum { readonly isTransact: boolean; @@ -3659,7 +3834,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionV2 (281) + * @name EthereumTransactionTransactionV2 (288) */ export interface EthereumTransactionTransactionV2 extends Enum { readonly isLegacy: boolean; @@ -3672,7 +3847,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionLegacyTransaction (282) + * @name EthereumTransactionLegacyTransaction (289) */ export interface EthereumTransactionLegacyTransaction extends Struct { readonly nonce: U256; @@ -3685,7 +3860,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionAction (283) + * @name EthereumTransactionTransactionAction (290) */ export interface EthereumTransactionTransactionAction extends Enum { readonly isCall: boolean; @@ -3695,7 +3870,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionSignature (284) + * @name EthereumTransactionTransactionSignature (291) */ export interface EthereumTransactionTransactionSignature extends Struct { readonly v: u64; @@ -3704,7 +3879,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionEip2930Transaction (286) + * @name EthereumTransactionEip2930Transaction (293) */ export interface EthereumTransactionEip2930Transaction extends Struct { readonly chainId: u64; @@ -3721,7 +3896,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionAccessListItem (288) + * @name EthereumTransactionAccessListItem (295) */ export interface EthereumTransactionAccessListItem extends Struct { readonly address: H160; @@ -3729,7 +3904,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionEip1559Transaction (289) + * @name EthereumTransactionEip1559Transaction (296) */ export interface EthereumTransactionEip1559Transaction extends Struct { readonly chainId: u64; @@ -3747,7 +3922,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBaseFeeCall (290) + * @name PalletBaseFeeCall (297) */ export interface PalletBaseFeeCall extends Enum { readonly isSetBaseFeePerGas: boolean; @@ -3766,7 +3941,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerCall (291) + * @name PalletSchedulerCall (298) */ export interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; @@ -3818,7 +3993,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportScheduleMaybeHashed (293) + * @name FrameSupportScheduleMaybeHashed (300) */ export interface FrameSupportScheduleMaybeHashed extends Enum { readonly isValue: boolean; @@ -3829,7 +4004,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyCall (294) + * @name PalletDemocracyCall (301) */ export interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; @@ -3966,7 +4141,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyConviction (295) + * @name PalletDemocracyConviction (302) */ export interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; @@ -3987,7 +4162,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveCall (297) + * @name PalletCollectiveCall (304) */ export interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; @@ -4028,7 +4203,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryCall (299) + * @name PalletTreasuryCall (306) */ export interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; @@ -4048,7 +4223,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsCall (300) + * @name PalletCrowdloanRewardsCall (307) */ export interface PalletCrowdloanRewardsCall extends Enum { readonly isAssociateNativeIdentity: boolean; @@ -4086,7 +4261,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpRuntimeMultiSignature (301) + * @name SpRuntimeMultiSignature (308) */ export interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; @@ -4099,22 +4274,22 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpCoreEd25519Signature (302) + * @name SpCoreEd25519Signature (309) */ export interface SpCoreEd25519Signature extends U8aFixed {} /** - * @name SpCoreSr25519Signature (304) + * @name SpCoreSr25519Signature (311) */ export interface SpCoreSr25519Signature extends U8aFixed {} /** - * @name SpCoreEcdsaSignature (305) + * @name SpCoreEcdsaSignature (312) */ export interface SpCoreEcdsaSignature extends U8aFixed {} /** - * @name CumulusPalletDmpQueueCall (311) + * @name CumulusPalletDmpQueueCall (318) */ export interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; @@ -4126,7 +4301,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmCall (312) + * @name PalletXcmCall (319) */ export interface PalletXcmCall extends Enum { readonly isSend: boolean; @@ -4200,7 +4375,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedXcm (313) + * @name XcmVersionedXcm (320) */ export interface XcmVersionedXcm extends Enum { readonly isV0: boolean; @@ -4213,7 +4388,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Xcm (314) + * @name XcmV0Xcm (321) */ export interface XcmV0Xcm extends Enum { readonly isWithdrawAsset: boolean; @@ -4289,7 +4464,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Order (316) + * @name XcmV0Order (323) */ export interface XcmV0Order extends Enum { readonly isNull: boolean; @@ -4347,7 +4522,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Response (318) + * @name XcmV0Response (325) */ export interface XcmV0Response extends Enum { readonly isAssets: boolean; @@ -4356,7 +4531,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Xcm (319) + * @name XcmV1Xcm (326) */ export interface XcmV1Xcm extends Enum { readonly isWithdrawAsset: boolean; @@ -4440,7 +4615,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Order (321) + * @name XcmV1Order (328) */ export interface XcmV1Order extends Enum { readonly isNoop: boolean; @@ -4500,7 +4675,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Response (323) + * @name XcmV1Response (330) */ export interface XcmV1Response extends Enum { readonly isAssets: boolean; @@ -4511,7 +4686,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsCall (337) + * @name PalletAssetsCall (344) */ export interface PalletAssetsCall extends Enum { readonly isCreate: boolean; @@ -4689,7 +4864,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsDestroyWitness (338) + * @name PalletAssetsDestroyWitness (345) */ export interface PalletAssetsDestroyWitness extends Struct { readonly accounts: Compact; @@ -4698,7 +4873,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerCall (339) + * @name PalletAssetManagerCall (346) */ export interface PalletAssetManagerCall extends Enum { readonly isRegisterForeignAsset: boolean; @@ -4760,7 +4935,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleCall (340) + * @name OrmlXtokensModuleCall (347) */ export interface OrmlXtokensModuleCall extends Enum { readonly isTransfer: boolean; @@ -4815,7 +4990,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbeamRuntimeXcmConfigCurrencyId (341) + * @name MoonbeamRuntimeXcmConfigCurrencyId (348) */ export interface MoonbeamRuntimeXcmConfigCurrencyId extends Enum { readonly isSelfReserve: boolean; @@ -4827,7 +5002,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiAsset (342) + * @name XcmVersionedMultiAsset (349) */ export interface XcmVersionedMultiAsset extends Enum { readonly isV0: boolean; @@ -4838,7 +5013,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorCall (345) + * @name XcmTransactorCall (352) */ export interface XcmTransactorCall extends Enum { readonly isRegister: boolean; @@ -4879,13 +5054,36 @@ declare module "@polkadot/types/lookup" { readonly asSetTransactInfo: { readonly location: XcmVersionedMultiLocation; readonly transactExtraWeight: u64; - readonly feePerSecond: u128; readonly maxWeight: u64; + readonly transactExtraWeightSigned: Option; } & Struct; readonly isRemoveTransactInfo: boolean; readonly asRemoveTransactInfo: { readonly location: XcmVersionedMultiLocation; } & Struct; + readonly isTransactThroughSigned: boolean; + readonly asTransactThroughSigned: { + readonly dest: XcmVersionedMultiLocation; + readonly feeCurrencyId: MoonbeamRuntimeXcmConfigCurrencyId; + readonly destWeight: u64; + readonly call: Bytes; + } & Struct; + readonly isTransactThroughSignedMultilocation: boolean; + readonly asTransactThroughSignedMultilocation: { + readonly dest: XcmVersionedMultiLocation; + readonly feeLocation: XcmVersionedMultiLocation; + readonly destWeight: u64; + readonly call: Bytes; + } & Struct; + readonly isSetFeePerSecond: boolean; + readonly asSetFeePerSecond: { + readonly assetLocation: XcmVersionedMultiLocation; + readonly feePerSecond: u128; + } & Struct; + readonly isRemoveFeePerSecond: boolean; + readonly asRemoveFeePerSecond: { + readonly assetLocation: XcmVersionedMultiLocation; + } & Struct; readonly type: | "Register" | "Deregister" @@ -4893,11 +5091,15 @@ declare module "@polkadot/types/lookup" { | "TransactThroughDerivative" | "TransactThroughSovereign" | "SetTransactInfo" - | "RemoveTransactInfo"; + | "RemoveTransactInfo" + | "TransactThroughSigned" + | "TransactThroughSignedMultilocation" + | "SetFeePerSecond" + | "RemoveFeePerSecond"; } /** - * @name MoonbeamRuntimeXcmConfigTransactors (346) + * @name MoonbeamRuntimeXcmConfigTransactors (353) */ export interface MoonbeamRuntimeXcmConfigTransactors extends Enum { readonly isRelay: boolean; @@ -4905,7 +5107,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonbeamRuntimeOriginCaller (348) + * @name MoonbeamRuntimeOriginCaller (355) */ export interface MoonbeamRuntimeOriginCaller extends Enum { readonly isSystem: boolean; @@ -4932,7 +5134,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportDispatchRawOrigin (349) + * @name FrameSupportDispatchRawOrigin (356) */ export interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; @@ -4943,7 +5145,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumRawOrigin (350) + * @name PalletEthereumRawOrigin (357) */ export interface PalletEthereumRawOrigin extends Enum { readonly isEthereumTransaction: boolean; @@ -4952,7 +5154,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveRawOrigin (351) + * @name PalletCollectiveRawOrigin (358) */ export interface PalletCollectiveRawOrigin extends Enum { readonly isMembers: boolean; @@ -4964,7 +5166,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmOrigin (353) + * @name CumulusPalletXcmOrigin (360) */ export interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; @@ -4974,7 +5176,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmOrigin (354) + * @name PalletXcmOrigin (361) */ export interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; @@ -4985,12 +5187,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpCoreVoid (355) + * @name SpCoreVoid (362) */ export type SpCoreVoid = Null; /** - * @name PalletUtilityError (356) + * @name PalletUtilityError (363) */ export interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; @@ -4998,7 +5200,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyProxyDefinition (359) + * @name PalletProxyProxyDefinition (366) */ export interface PalletProxyProxyDefinition extends Struct { readonly delegate: AccountId20; @@ -5007,7 +5209,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyAnnouncement (363) + * @name PalletProxyAnnouncement (370) */ export interface PalletProxyAnnouncement extends Struct { readonly real: AccountId20; @@ -5016,7 +5218,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyError (365) + * @name PalletProxyError (372) */ export interface PalletProxyError extends Enum { readonly isTooMany: boolean; @@ -5039,7 +5241,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeError (366) + * @name PalletMaintenanceModeError (373) */ export interface PalletMaintenanceModeError extends Enum { readonly isAlreadyInMaintenanceMode: boolean; @@ -5048,7 +5250,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityRegistration (367) + * @name PalletIdentityRegistration (374) */ export interface PalletIdentityRegistration extends Struct { readonly judgements: Vec>; @@ -5057,7 +5259,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityRegistrarInfo (375) + * @name PalletIdentityRegistrarInfo (382) */ export interface PalletIdentityRegistrarInfo extends Struct { readonly account: AccountId20; @@ -5066,7 +5268,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityError (377) + * @name PalletIdentityError (384) */ export interface PalletIdentityError extends Enum { readonly isTooManySubAccounts: boolean; @@ -5105,7 +5307,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmError (379) + * @name PalletEvmError (386) */ export interface PalletEvmError extends Enum { readonly isBalanceLow: boolean; @@ -5126,7 +5328,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FpRpcTransactionStatus (382) + * @name FpRpcTransactionStatus (389) */ export interface FpRpcTransactionStatus extends Struct { readonly transactionHash: H256; @@ -5139,12 +5341,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthbloomBloom (385) + * @name EthbloomBloom (392) */ export interface EthbloomBloom extends U8aFixed {} /** - * @name EthereumReceiptReceiptV3 (387) + * @name EthereumReceiptReceiptV3 (394) */ export interface EthereumReceiptReceiptV3 extends Enum { readonly isLegacy: boolean; @@ -5157,7 +5359,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumReceiptEip658ReceiptData (388) + * @name EthereumReceiptEip658ReceiptData (395) */ export interface EthereumReceiptEip658ReceiptData extends Struct { readonly statusCode: u8; @@ -5167,7 +5369,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumBlock (389) + * @name EthereumBlock (396) */ export interface EthereumBlock extends Struct { readonly header: EthereumHeader; @@ -5176,7 +5378,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumHeader (390) + * @name EthereumHeader (397) */ export interface EthereumHeader extends Struct { readonly parentHash: H256; @@ -5197,12 +5399,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTypesHashH64 (391) + * @name EthereumTypesHashH64 (398) */ export interface EthereumTypesHashH64 extends U8aFixed {} /** - * @name PalletEthereumError (396) + * @name PalletEthereumError (403) */ export interface PalletEthereumError extends Enum { readonly isInvalidSignature: boolean; @@ -5211,7 +5413,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerScheduledV3 (399) + * @name PalletSchedulerScheduledV3 (406) */ export interface PalletSchedulerScheduledV3 extends Struct { readonly maybeId: Option; @@ -5222,7 +5424,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerError (400) + * @name PalletSchedulerError (407) */ export interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; @@ -5237,7 +5439,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyPreimageStatus (404) + * @name PalletDemocracyPreimageStatus (411) */ export interface PalletDemocracyPreimageStatus extends Enum { readonly isMissing: boolean; @@ -5254,7 +5456,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyReferendumInfo (405) + * @name PalletDemocracyReferendumInfo (412) */ export interface PalletDemocracyReferendumInfo extends Enum { readonly isOngoing: boolean; @@ -5268,7 +5470,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyReferendumStatus (406) + * @name PalletDemocracyReferendumStatus (413) */ export interface PalletDemocracyReferendumStatus extends Struct { readonly end: u32; @@ -5279,7 +5481,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyTally (407) + * @name PalletDemocracyTally (414) */ export interface PalletDemocracyTally extends Struct { readonly ayes: u128; @@ -5288,7 +5490,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteVoting (408) + * @name PalletDemocracyVoteVoting (415) */ export interface PalletDemocracyVoteVoting extends Enum { readonly isDirect: boolean; @@ -5309,7 +5511,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyDelegations (411) + * @name PalletDemocracyDelegations (418) */ export interface PalletDemocracyDelegations extends Struct { readonly votes: u128; @@ -5317,12 +5519,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVotePriorLock (412) + * @name PalletDemocracyVotePriorLock (419) */ export interface PalletDemocracyVotePriorLock extends ITuple<[u32, u128]> {} /** - * @name PalletDemocracyReleases (415) + * @name PalletDemocracyReleases (422) */ export interface PalletDemocracyReleases extends Enum { readonly isV1: boolean; @@ -5330,7 +5532,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyError (416) + * @name PalletDemocracyError (423) */ export interface PalletDemocracyError extends Enum { readonly isValueLow: boolean; @@ -5393,7 +5595,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveVotes (418) + * @name PalletCollectiveVotes (425) */ export interface PalletCollectiveVotes extends Struct { readonly index: u32; @@ -5404,7 +5606,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveError (419) + * @name PalletCollectiveError (426) */ export interface PalletCollectiveError extends Enum { readonly isNotMember: boolean; @@ -5431,7 +5633,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryProposal (421) + * @name PalletTreasuryProposal (428) */ export interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId20; @@ -5441,12 +5643,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportPalletId (425) + * @name FrameSupportPalletId (432) */ export interface FrameSupportPalletId extends U8aFixed {} /** - * @name PalletTreasuryError (426) + * @name PalletTreasuryError (433) */ export interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; @@ -5456,7 +5658,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsRewardInfo (427) + * @name PalletCrowdloanRewardsRewardInfo (434) */ export interface PalletCrowdloanRewardsRewardInfo extends Struct { readonly totalReward: u128; @@ -5465,7 +5667,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsError (429) + * @name PalletCrowdloanRewardsError (436) */ export interface PalletCrowdloanRewardsError extends Enum { readonly isAlreadyAssociated: boolean; @@ -5502,7 +5704,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueInboundChannelDetails (431) + * @name CumulusPalletXcmpQueueInboundChannelDetails (438) */ export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; @@ -5511,7 +5713,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueInboundState (432) + * @name CumulusPalletXcmpQueueInboundState (439) */ export interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; @@ -5520,7 +5722,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotParachainPrimitivesXcmpMessageFormat (435) + * @name PolkadotParachainPrimitivesXcmpMessageFormat (442) */ export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; @@ -5530,7 +5732,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueOutboundChannelDetails (438) + * @name CumulusPalletXcmpQueueOutboundChannelDetails (445) */ export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; @@ -5541,7 +5743,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueOutboundState (439) + * @name CumulusPalletXcmpQueueOutboundState (446) */ export interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; @@ -5550,7 +5752,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueQueueConfigData (441) + * @name CumulusPalletXcmpQueueQueueConfigData (448) */ export interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; @@ -5562,7 +5764,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueError (443) + * @name CumulusPalletXcmpQueueError (450) */ export interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; @@ -5579,19 +5781,19 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmError (444) + * @name CumulusPalletXcmError (451) */ export type CumulusPalletXcmError = Null; /** - * @name CumulusPalletDmpQueueConfigData (445) + * @name CumulusPalletDmpQueueConfigData (452) */ export interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: u64; } /** - * @name CumulusPalletDmpQueuePageIndexData (446) + * @name CumulusPalletDmpQueuePageIndexData (453) */ export interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; @@ -5600,7 +5802,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletDmpQueueError (449) + * @name CumulusPalletDmpQueueError (456) */ export interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; @@ -5609,7 +5811,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmQueryStatus (450) + * @name PalletXcmQueryStatus (457) */ export interface PalletXcmQueryStatus extends Enum { readonly isPending: boolean; @@ -5632,7 +5834,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedResponse (453) + * @name XcmVersionedResponse (460) */ export interface XcmVersionedResponse extends Enum { readonly isV0: boolean; @@ -5645,7 +5847,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmVersionMigrationStage (459) + * @name PalletXcmVersionMigrationStage (466) */ export interface PalletXcmVersionMigrationStage extends Enum { readonly isMigrateSupportedVersion: boolean; @@ -5661,7 +5863,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmError (460) + * @name PalletXcmError (467) */ export interface PalletXcmError extends Enum { readonly isUnreachable: boolean; @@ -5694,7 +5896,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetDetails (461) + * @name PalletAssetsAssetDetails (468) */ export interface PalletAssetsAssetDetails extends Struct { readonly owner: AccountId20; @@ -5712,7 +5914,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetAccount (463) + * @name PalletAssetsAssetAccount (470) */ export interface PalletAssetsAssetAccount extends Struct { readonly balance: u128; @@ -5722,7 +5924,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsExistenceReason (464) + * @name PalletAssetsExistenceReason (471) */ export interface PalletAssetsExistenceReason extends Enum { readonly isConsumer: boolean; @@ -5734,7 +5936,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsApproval (466) + * @name PalletAssetsApproval (473) */ export interface PalletAssetsApproval extends Struct { readonly amount: u128; @@ -5742,7 +5944,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetMetadata (467) + * @name PalletAssetsAssetMetadata (474) */ export interface PalletAssetsAssetMetadata extends Struct { readonly deposit: u128; @@ -5753,7 +5955,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsError (469) + * @name PalletAssetsError (476) */ export interface PalletAssetsError extends Enum { readonly isBalanceLow: boolean; @@ -5790,7 +5992,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerAssetInfo (470) + * @name PalletAssetManagerAssetInfo (477) */ export interface PalletAssetManagerAssetInfo extends Struct { readonly creator: AccountId20; @@ -5798,7 +6000,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerError (472) + * @name PalletAssetManagerError (479) */ export interface PalletAssetManagerError extends Enum { readonly isErrorCreatingAsset: boolean; @@ -5821,7 +6023,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleError (473) + * @name OrmlXtokensModuleError (480) */ export interface OrmlXtokensModuleError extends Enum { readonly isAssetHasNoReserve: boolean; @@ -5864,7 +6066,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorError (474) + * @name XcmTransactorError (481) */ export interface XcmTransactorError extends Enum { readonly isIndexAlreadyClaimed: boolean; @@ -5887,6 +6089,9 @@ declare module "@polkadot/types/lookup" { readonly isBadVersion: boolean; readonly isMaxWeightTransactReached: boolean; readonly isUnableToWithdrawAsset: boolean; + readonly isFeePerSecondNotSet: boolean; + readonly isSignedTransactNotAllowedForDestination: boolean; + readonly isFailedMultiLocationToJunction: boolean; readonly type: | "IndexAlreadyClaimed" | "UnclaimedIndex" @@ -5907,46 +6112,49 @@ declare module "@polkadot/types/lookup" { | "XcmExecuteError" | "BadVersion" | "MaxWeightTransactReached" - | "UnableToWithdrawAsset"; + | "UnableToWithdrawAsset" + | "FeePerSecondNotSet" + | "SignedTransactNotAllowedForDestination" + | "FailedMultiLocationToJunction"; } /** - * @name AccountEthereumSignature (477) + * @name AccountEthereumSignature (484) */ export interface AccountEthereumSignature extends SpCoreEcdsaSignature {} /** - * @name FrameSystemExtensionsCheckSpecVersion (479) + * @name FrameSystemExtensionsCheckSpecVersion (486) */ export type FrameSystemExtensionsCheckSpecVersion = Null; /** - * @name FrameSystemExtensionsCheckTxVersion (480) + * @name FrameSystemExtensionsCheckTxVersion (487) */ export type FrameSystemExtensionsCheckTxVersion = Null; /** - * @name FrameSystemExtensionsCheckGenesis (481) + * @name FrameSystemExtensionsCheckGenesis (488) */ export type FrameSystemExtensionsCheckGenesis = Null; /** - * @name FrameSystemExtensionsCheckNonce (484) + * @name FrameSystemExtensionsCheckNonce (491) */ export interface FrameSystemExtensionsCheckNonce extends Compact {} /** - * @name FrameSystemExtensionsCheckWeight (485) + * @name FrameSystemExtensionsCheckWeight (492) */ export type FrameSystemExtensionsCheckWeight = Null; /** - * @name PalletTransactionPaymentChargeTransactionPayment (486) + * @name PalletTransactionPaymentChargeTransactionPayment (493) */ export interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} /** - * @name MoonbeamRuntimeRuntime (488) + * @name MoonbeamRuntimeRuntime (495) */ export type MoonbeamRuntimeRuntime = Null; } // declare module diff --git a/typescript-api/src/moonriver/interfaces/augment-api-consts.ts b/typescript-api/src/moonriver/interfaces/augment-api-consts.ts index 2d0a3be555..26df988c55 100644 --- a/typescript-api/src/moonriver/interfaces/augment-api-consts.ts +++ b/typescript-api/src/moonriver/interfaces/augment-api-consts.ts @@ -424,6 +424,10 @@ declare module "@polkadot/api-base/types/consts" { [key: string]: Codec; }; transactionPayment: { + /** + * The polynomial that is applied in order to derive fee from length. + */ + lengthToFee: Vec & AugmentedConst; /** * A fee mulitplier for `Operational` extrinsics to compute "virtual tip" * to boost their `priority` @@ -449,10 +453,6 @@ declare module "@polkadot/api-base/types/consts" { * also amplify the impact of tips applied to `Operational` transactions. */ operationalFeeMultiplier: u8 & AugmentedConst; - /** - * The fee to be paid for making a transaction; the per-byte portion. - */ - transactionByteFee: u128 & AugmentedConst; /** * The polynomial that is applied in order to derive fee from weight. */ diff --git a/typescript-api/src/moonriver/interfaces/augment-api-errors.ts b/typescript-api/src/moonriver/interfaces/augment-api-errors.ts index 3dd2049921..e231cee6cb 100644 --- a/typescript-api/src/moonriver/interfaces/augment-api-errors.ts +++ b/typescript-api/src/moonriver/interfaces/augment-api-errors.ts @@ -118,10 +118,26 @@ declare module "@polkadot/api-base/types/errors" { * This account cannot set an author because it cannon afford the security deposit */ CannotAffordSecurityDeposit: AugmentedError; + /** + * Failed to decode T::Keys for `set_keys` + */ + DecodeKeysFailed: AugmentedError; + /** + * Failed to decode NimbusId for `set_keys` + */ + DecodeNimbusFailed: AugmentedError; /** * The association can't be cleared because it belongs to another account. */ NotYourAssociation: AugmentedError; + /** + * No existing NimbusId can be found for the account + */ + OldAuthorIdNotFound: AugmentedError; + /** + * Keys have wrong size + */ + WrongKeySize: AugmentedError; /** * Generic error */ @@ -622,6 +638,49 @@ declare module "@polkadot/api-base/types/errors" { */ [key: string]: AugmentedError; }; + moonbeamOrbiters: { + /** + * The collator is already added in orbiters program. + */ + CollatorAlreadyAdded: AugmentedError; + /** + * This collator is not in orbiters program. + */ + CollatorNotFound: AugmentedError; + /** + * There are already too many orbiters associated with this collator. + */ + CollatorPoolTooLarge: AugmentedError; + /** + * There are more collator pools than the number specified in the parameter. + */ + CollatorsPoolCountTooLow: AugmentedError; + /** + * The minimum deposit required to register as an orbiter has not yet been + * included in the onchain storage + */ + MinOrbiterDepositNotSet: AugmentedError; + /** + * This orbiter is already associated with this collator. + */ + OrbiterAlreadyInPool: AugmentedError; + /** + * This orbiter has not made a deposit + */ + OrbiterDepositNotFound: AugmentedError; + /** + * This orbiter is not found + */ + OrbiterNotFound: AugmentedError; + /** + * The orbiter is still at least in one pool + */ + OrbiterStillInAPool: AugmentedError; + /** + * Generic error + */ + [key: string]: AugmentedError; + }; parachainStaking: { AlreadyActive: AugmentedError; AlreadyDelegatedCandidate: AugmentedError; @@ -633,7 +692,7 @@ declare module "@polkadot/api-base/types/errors" { CandidateExists: AugmentedError; CandidateNotLeaving: AugmentedError; CannotDelegateIfLeaving: AugmentedError; - CannotDelegateLessThanLowestBottomWhenBottomIsFull: AugmentedError; + CannotDelegateLessThanOrEqualToLowestBottomWhenFull: AugmentedError; CannotGoOnlineIfLeaving: AugmentedError; CannotSetBelowMin: AugmentedError; DelegationBelowMin: AugmentedError; @@ -656,6 +715,7 @@ declare module "@polkadot/api-base/types/errors" { PendingDelegationRequestAlreadyExists: AugmentedError; PendingDelegationRequestDNE: AugmentedError; PendingDelegationRequestNotDueYet: AugmentedError; + PendingDelegationRevoke: AugmentedError; RoundLengthMustBeAtLeastTotalSelectedCollators: AugmentedError; TooLowCandidateCountToLeaveCandidates: AugmentedError; TooLowCandidateCountWeightHintCancelLeaveCandidates: AugmentedError; @@ -973,12 +1033,15 @@ declare module "@polkadot/api-base/types/errors" { DestinationNotInvertible: AugmentedError; DispatchWeightBiggerThanTotalWeight: AugmentedError; ErrorSending: AugmentedError; + FailedMultiLocationToJunction: AugmentedError; + FeePerSecondNotSet: AugmentedError; IndexAlreadyClaimed: AugmentedError; InvalidDest: AugmentedError; MaxWeightTransactReached: AugmentedError; NotCrossChainTransfer: AugmentedError; NotCrossChainTransferableCurrency: AugmentedError; NotOwner: AugmentedError; + SignedTransactNotAllowedForDestination: AugmentedError; TransactorInfoNotSet: AugmentedError; UnableToWithdrawAsset: AugmentedError; UnclaimedIndex: AugmentedError; diff --git a/typescript-api/src/moonriver/interfaces/augment-api-events.ts b/typescript-api/src/moonriver/interfaces/augment-api-events.ts index 0c8ca1a5c5..b259254f57 100644 --- a/typescript-api/src/moonriver/interfaces/augment-api-events.ts +++ b/typescript-api/src/moonriver/interfaces/augment-api-events.ts @@ -38,8 +38,9 @@ import type { NimbusPrimitivesNimbusCryptoPublic, PalletDemocracyVoteAccountVote, PalletDemocracyVoteThreshold, - ParachainStakingDelegationRequest, + ParachainStakingDelegationRequestsCancelledScheduledRequest, ParachainStakingDelegatorAdded, + SessionKeysPrimitivesVrfVrfCryptoPublic, SpRuntimeDispatchError, XcmTransactorRemoteTransactInfoWithMaxWeight, XcmV1MultiAsset, @@ -59,43 +60,72 @@ declare module "@polkadot/api-base/types/events" { /** * Removed all information related to an assetId and destroyed asset */ - ForeignAssetDestroyed: AugmentedEvent; + ForeignAssetDestroyed: AugmentedEvent< + ApiType, + [assetId: u128, assetType: MoonriverRuntimeXcmConfigAssetType], + { assetId: u128; assetType: MoonriverRuntimeXcmConfigAssetType } + >; /** * New asset with the asset manager is registered */ ForeignAssetRegistered: AugmentedEvent< ApiType, [ - u128, - MoonriverRuntimeXcmConfigAssetType, - MoonriverRuntimeAssetConfigAssetRegistrarMetadata - ] + assetId: u128, + asset: MoonriverRuntimeXcmConfigAssetType, + metadata: MoonriverRuntimeAssetConfigAssetRegistrarMetadata + ], + { + assetId: u128; + asset: MoonriverRuntimeXcmConfigAssetType; + metadata: MoonriverRuntimeAssetConfigAssetRegistrarMetadata; + } >; /** * Removed all information related to an assetId */ - ForeignAssetRemoved: AugmentedEvent; + ForeignAssetRemoved: AugmentedEvent< + ApiType, + [assetId: u128, assetType: MoonriverRuntimeXcmConfigAssetType], + { assetId: u128; assetType: MoonriverRuntimeXcmConfigAssetType } + >; /** * Changed the xcm type mapping for a given asset id */ - ForeignAssetTypeChanged: AugmentedEvent; + ForeignAssetTypeChanged: AugmentedEvent< + ApiType, + [assetId: u128, newAssetType: MoonriverRuntimeXcmConfigAssetType], + { assetId: u128; newAssetType: MoonriverRuntimeXcmConfigAssetType } + >; /** * Removed all information related to an assetId and destroyed asset */ - LocalAssetDestroyed: AugmentedEvent; + LocalAssetDestroyed: AugmentedEvent; /** * Local asset was created */ - LocalAssetRegistered: AugmentedEvent; + LocalAssetRegistered: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * Supported asset type for fee payment removed */ - SupportedAssetRemoved: AugmentedEvent; + SupportedAssetRemoved: AugmentedEvent< + ApiType, + [assetType: MoonriverRuntimeXcmConfigAssetType], + { assetType: MoonriverRuntimeXcmConfigAssetType } + >; /** * Changed the amount of units we are charging per execution second for a * given asset */ - UnitsPerSecondChanged: AugmentedEvent; + UnitsPerSecondChanged: AugmentedEvent< + ApiType, + [assetType: MoonriverRuntimeXcmConfigAssetType, unitsPerSecond: u128], + { assetType: MoonriverRuntimeXcmConfigAssetType; unitsPerSecond: u128 } + >; /** * Generic event */ @@ -105,78 +135,139 @@ declare module "@polkadot/api-base/types/events" { /** * An approval for account `delegate` was cancelled by `owner`. */ - ApprovalCancelled: AugmentedEvent; + ApprovalCancelled: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, delegate: AccountId20], + { assetId: u128; owner: AccountId20; delegate: AccountId20 } + >; /** * (Additional) funds have been approved for transfer to a destination account. */ - ApprovedTransfer: AugmentedEvent; + ApprovedTransfer: AugmentedEvent< + ApiType, + [assetId: u128, source: AccountId20, delegate: AccountId20, amount: u128], + { assetId: u128; source: AccountId20; delegate: AccountId20; amount: u128 } + >; /** * Some asset `asset_id` was frozen. */ - AssetFrozen: AugmentedEvent; + AssetFrozen: AugmentedEvent; /** * An asset has had its attributes changed by the `Force` origin. */ - AssetStatusChanged: AugmentedEvent; + AssetStatusChanged: AugmentedEvent; /** * Some asset `asset_id` was thawed. */ - AssetThawed: AugmentedEvent; + AssetThawed: AugmentedEvent; /** * Some assets were destroyed. */ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, balance: u128], + { assetId: u128; owner: AccountId20; balance: u128 } + >; /** * Some asset class was created. */ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * An asset class was destroyed. */ - Destroyed: AugmentedEvent; + Destroyed: AugmentedEvent; /** * Some asset class was force-created. */ - ForceCreated: AugmentedEvent; + ForceCreated: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * Some account `who` was frozen. */ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were issued. */ - Issued: AugmentedEvent; + Issued: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, totalSupply: u128], + { assetId: u128; owner: AccountId20; totalSupply: u128 } + >; /** * Metadata has been cleared for an asset. */ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent; /** * New metadata has been set for an asset. */ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [assetId: u128, name: Bytes, symbol_: Bytes, decimals: u8, isFrozen: bool], + { assetId: u128; name: Bytes; symbol: Bytes; decimals: u8; isFrozen: bool } + >; /** * The owner changed. */ - OwnerChanged: AugmentedEvent; + OwnerChanged: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * The management team changed. */ - TeamChanged: AugmentedEvent; + TeamChanged: AugmentedEvent< + ApiType, + [assetId: u128, issuer: AccountId20, admin: AccountId20, freezer: AccountId20], + { assetId: u128; issuer: AccountId20; admin: AccountId20; freezer: AccountId20 } + >; /** * Some account `who` was thawed. */ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were transferred. */ - Transferred: AugmentedEvent; + Transferred: AugmentedEvent< + ApiType, + [assetId: u128, from: AccountId20, to: AccountId20, amount: u128], + { assetId: u128; from: AccountId20; to: AccountId20; amount: u128 } + >; /** * An `amount` was transferred in its entirety from `owner` to * `destination` by the approved `delegate`. */ TransferredApproved: AugmentedEvent< ApiType, - [u128, AccountId20, AccountId20, AccountId20, u128] + [ + assetId: u128, + owner: AccountId20, + delegate: AccountId20, + destination: AccountId20, + amount: u128 + ], + { + assetId: u128; + owner: AccountId20; + delegate: AccountId20; + destination: AccountId20; + amount: u128; + } >; /** * Generic event @@ -187,7 +278,7 @@ declare module "@polkadot/api-base/types/events" { /** * The amount of eligible authors for the filter to select has been changed. */ - EligibleUpdated: AugmentedEvent; + EligibleUpdated: AugmentedEvent; /** * Generic event */ @@ -195,25 +286,53 @@ declare module "@polkadot/api-base/types/events" { }; authorMapping: { /** - * An NimbusId has been de-registered, and its AccountId mapping removed. + * A NimbusId has been registered and mapped to an AccountId. */ - AuthorDeRegistered: AugmentedEvent; + KeysRegistered: AugmentedEvent< + ApiType, + [ + nimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + nimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; + } + >; /** - * A NimbusId has been registered and mapped to an AccountId. + * An NimbusId has been de-registered, and its AccountId mapping removed. */ - AuthorRegistered: AugmentedEvent; + KeysRemoved: AugmentedEvent< + ApiType, + [ + nimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + nimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; + } + >; /** * An NimbusId has been registered, replacing a previous registration and * its mapping. */ - AuthorRotated: AugmentedEvent; - /** - * An NimbusId has been forcibly deregistered after not being rotated or - * cleaned up. The reporteing account has been rewarded accordingly. - */ - DefunctAuthorBusted: AugmentedEvent< + KeysRotated: AugmentedEvent< ApiType, - [NimbusPrimitivesNimbusCryptoPublic, AccountId20] + [ + newNimbusId: NimbusPrimitivesNimbusCryptoPublic, + accountId: AccountId20, + newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic + ], + { + newNimbusId: NimbusPrimitivesNimbusCryptoPublic; + accountId: AccountId20; + newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic; + } >; /** * Generic event @@ -224,48 +343,95 @@ declare module "@polkadot/api-base/types/events" { /** * A balance was set by root. */ - BalanceSet: AugmentedEvent; + BalanceSet: AugmentedEvent< + ApiType, + [who: AccountId20, free: u128, reserved: u128], + { who: AccountId20; free: u128; reserved: u128 } + >; /** * Some amount was deposited (e.g. for transaction fees). */ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * An account was removed whose balance was non-zero but below * ExistentialDeposit, resulting in an outright loss. */ - DustLost: AugmentedEvent; + DustLost: AugmentedEvent< + ApiType, + [account: AccountId20, amount: u128], + { account: AccountId20; amount: u128 } + >; /** * An account was created with some free balance. */ - Endowed: AugmentedEvent; + Endowed: AugmentedEvent< + ApiType, + [account: AccountId20, freeBalance: u128], + { account: AccountId20; freeBalance: u128 } + >; /** * Some balance was reserved (moved from free to reserved). */ - Reserved: AugmentedEvent; + Reserved: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Some balance was moved from the reserve of the first account to the * second account. Final argument indicates the destination balance type. */ ReserveRepatriated: AugmentedEvent< ApiType, - [AccountId20, AccountId20, u128, FrameSupportTokensMiscBalanceStatus] + [ + from: AccountId20, + to: AccountId20, + amount: u128, + destinationStatus: FrameSupportTokensMiscBalanceStatus + ], + { + from: AccountId20; + to: AccountId20; + amount: u128; + destinationStatus: FrameSupportTokensMiscBalanceStatus; + } >; /** * Some amount was removed from the account (e.g. for misbehavior). */ - Slashed: AugmentedEvent; + Slashed: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Transfer succeeded. */ - Transfer: AugmentedEvent; + Transfer: AugmentedEvent< + ApiType, + [from: AccountId20, to: AccountId20, amount: u128], + { from: AccountId20; to: AccountId20; amount: u128 } + >; /** * Some balance was unreserved (moved from reserved to free). */ - Unreserved: AugmentedEvent; + Unreserved: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Some amount was withdrawn from the account (e.g. for transaction fees). */ - Withdraw: AugmentedEvent; + Withdraw: AugmentedEvent< + ApiType, + [who: AccountId20, amount: u128], + { who: AccountId20; amount: u128 } + >; /** * Generic event */ @@ -285,35 +451,55 @@ declare module "@polkadot/api-base/types/events" { /** * A motion was approved by the required threshold. */ - Approved: AugmentedEvent; + Approved: AugmentedEvent; /** * A proposal was closed because its threshold was reached or after its * duration was up. */ - Closed: AugmentedEvent; + Closed: AugmentedEvent< + ApiType, + [proposalHash: H256, yes: u32, no: u32], + { proposalHash: H256; yes: u32; no: u32 } + >; /** * A motion was not approved by the required threshold. */ - Disapproved: AugmentedEvent; + Disapproved: AugmentedEvent; /** * A motion was executed; result will be `Ok` if it returned without error. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A single member did some action; result will be `Ok` if it returned * without error. */ - MemberExecuted: AugmentedEvent]>; + MemberExecuted: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A motion (given hash) has been proposed (by given account) with a * threshold (given `MemberCount`). */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [account: AccountId20, proposalIndex: u32, proposalHash: H256, threshold: u32], + { account: AccountId20; proposalIndex: u32; proposalHash: H256; threshold: u32 } + >; /** * A motion (given hash) has been voted on by given account, leaving a * tally (yes votes and no votes given respectively as `MemberCount`). */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [account: AccountId20, proposalHash: H256, voted: bool, yes: u32, no: u32], + { account: AccountId20; proposalHash: H256; voted: bool; yes: u32; no: u32 } + >; /** * Generic event */ @@ -380,19 +566,27 @@ declare module "@polkadot/api-base/types/events" { /** * A proposal_hash has been blacklisted permanently. */ - Blacklisted: AugmentedEvent; + Blacklisted: AugmentedEvent; /** * A referendum has been cancelled. */ - Cancelled: AugmentedEvent; + Cancelled: AugmentedEvent; /** * An account has delegated their vote to another account. */ - Delegated: AugmentedEvent; + Delegated: AugmentedEvent< + ApiType, + [who: AccountId20, target: AccountId20], + { who: AccountId20; target: AccountId20 } + >; /** * A proposal has been enacted. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [refIndex: u32, result: Result], + { refIndex: u32; result: Result } + >; /** * An external proposal has been tabled. */ @@ -400,59 +594,103 @@ declare module "@polkadot/api-base/types/events" { /** * A proposal has been rejected by referendum. */ - NotPassed: AugmentedEvent; + NotPassed: AugmentedEvent; /** * A proposal has been approved by referendum. */ - Passed: AugmentedEvent; + Passed: AugmentedEvent; /** * A proposal could not be executed because its preimage was invalid. */ - PreimageInvalid: AugmentedEvent; + PreimageInvalid: AugmentedEvent< + ApiType, + [proposalHash: H256, refIndex: u32], + { proposalHash: H256; refIndex: u32 } + >; /** * A proposal could not be executed because its preimage was missing. */ - PreimageMissing: AugmentedEvent; + PreimageMissing: AugmentedEvent< + ApiType, + [proposalHash: H256, refIndex: u32], + { proposalHash: H256; refIndex: u32 } + >; /** * A proposal's preimage was noted, and the deposit taken. */ - PreimageNoted: AugmentedEvent; + PreimageNoted: AugmentedEvent< + ApiType, + [proposalHash: H256, who: AccountId20, deposit: u128], + { proposalHash: H256; who: AccountId20; deposit: u128 } + >; /** * A registered preimage was removed and the deposit collected by the reaper. */ - PreimageReaped: AugmentedEvent; + PreimageReaped: AugmentedEvent< + ApiType, + [proposalHash: H256, provider: AccountId20, deposit: u128, reaper: AccountId20], + { proposalHash: H256; provider: AccountId20; deposit: u128; reaper: AccountId20 } + >; /** * A proposal preimage was removed and used (the deposit was returned). */ - PreimageUsed: AugmentedEvent; + PreimageUsed: AugmentedEvent< + ApiType, + [proposalHash: H256, provider: AccountId20, deposit: u128], + { proposalHash: H256; provider: AccountId20; deposit: u128 } + >; /** * A motion has been proposed by a public account. */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128], + { proposalIndex: u32; deposit: u128 } + >; /** * An account has secconded a proposal */ - Seconded: AugmentedEvent; + Seconded: AugmentedEvent< + ApiType, + [seconder: AccountId20, propIndex: u32], + { seconder: AccountId20; propIndex: u32 } + >; /** * A referendum has begun. */ - Started: AugmentedEvent; + Started: AugmentedEvent< + ApiType, + [refIndex: u32, threshold: PalletDemocracyVoteThreshold], + { refIndex: u32; threshold: PalletDemocracyVoteThreshold } + >; /** * A public proposal has been tabled for referendum vote. */ - Tabled: AugmentedEvent]>; + Tabled: AugmentedEvent< + ApiType, + [proposalIndex: u32, deposit: u128, depositors: Vec], + { proposalIndex: u32; deposit: u128; depositors: Vec } + >; /** * An account has cancelled a previous delegation operation. */ - Undelegated: AugmentedEvent; + Undelegated: AugmentedEvent; /** * An external proposal has been vetoed. */ - Vetoed: AugmentedEvent; + Vetoed: AugmentedEvent< + ApiType, + [who: AccountId20, proposalHash: H256, until: u32], + { who: AccountId20; proposalHash: H256; until: u32 } + >; /** * An account has voted in a referendum */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [voter: AccountId20, refIndex: u32, vote: PalletDemocracyVoteAccountVote], + { voter: AccountId20; refIndex: u32; vote: PalletDemocracyVoteAccountVote } + >; /** * Generic event */ @@ -540,44 +778,76 @@ declare module "@polkadot/api-base/types/events" { /** * A name was cleared, and the given balance returned. */ - IdentityCleared: AugmentedEvent; + IdentityCleared: AugmentedEvent< + ApiType, + [who: AccountId20, deposit: u128], + { who: AccountId20; deposit: u128 } + >; /** * A name was removed and the given balance slashed. */ - IdentityKilled: AugmentedEvent; + IdentityKilled: AugmentedEvent< + ApiType, + [who: AccountId20, deposit: u128], + { who: AccountId20; deposit: u128 } + >; /** * A name was set or reset (which will remove all judgements). */ - IdentitySet: AugmentedEvent; + IdentitySet: AugmentedEvent; /** * A judgement was given by a registrar. */ - JudgementGiven: AugmentedEvent; + JudgementGiven: AugmentedEvent< + ApiType, + [target: AccountId20, registrarIndex: u32], + { target: AccountId20; registrarIndex: u32 } + >; /** * A judgement was asked from a registrar. */ - JudgementRequested: AugmentedEvent; + JudgementRequested: AugmentedEvent< + ApiType, + [who: AccountId20, registrarIndex: u32], + { who: AccountId20; registrarIndex: u32 } + >; /** * A judgement request was retracted. */ - JudgementUnrequested: AugmentedEvent; + JudgementUnrequested: AugmentedEvent< + ApiType, + [who: AccountId20, registrarIndex: u32], + { who: AccountId20; registrarIndex: u32 } + >; /** * A registrar was added. */ - RegistrarAdded: AugmentedEvent; + RegistrarAdded: AugmentedEvent; /** * A sub-identity was added to an identity and the deposit paid. */ - SubIdentityAdded: AugmentedEvent; + SubIdentityAdded: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * A sub-identity was removed from an identity and the deposit freed. */ - SubIdentityRemoved: AugmentedEvent; + SubIdentityRemoved: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * A sub-identity was cleared, and the given deposit repatriated from the * main identity account to the sub-identity account. */ - SubIdentityRevoked: AugmentedEvent; + SubIdentityRevoked: AugmentedEvent< + ApiType, + [sub: AccountId20, main: AccountId20, deposit: u128], + { sub: AccountId20; main: AccountId20; deposit: u128 } + >; /** * Generic event */ @@ -587,78 +857,139 @@ declare module "@polkadot/api-base/types/events" { /** * An approval for account `delegate` was cancelled by `owner`. */ - ApprovalCancelled: AugmentedEvent; + ApprovalCancelled: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, delegate: AccountId20], + { assetId: u128; owner: AccountId20; delegate: AccountId20 } + >; /** * (Additional) funds have been approved for transfer to a destination account. */ - ApprovedTransfer: AugmentedEvent; + ApprovedTransfer: AugmentedEvent< + ApiType, + [assetId: u128, source: AccountId20, delegate: AccountId20, amount: u128], + { assetId: u128; source: AccountId20; delegate: AccountId20; amount: u128 } + >; /** * Some asset `asset_id` was frozen. */ - AssetFrozen: AugmentedEvent; + AssetFrozen: AugmentedEvent; /** * An asset has had its attributes changed by the `Force` origin. */ - AssetStatusChanged: AugmentedEvent; + AssetStatusChanged: AugmentedEvent; /** * Some asset `asset_id` was thawed. */ - AssetThawed: AugmentedEvent; + AssetThawed: AugmentedEvent; /** * Some assets were destroyed. */ - Burned: AugmentedEvent; + Burned: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, balance: u128], + { assetId: u128; owner: AccountId20; balance: u128 } + >; /** * Some asset class was created. */ - Created: AugmentedEvent; + Created: AugmentedEvent< + ApiType, + [assetId: u128, creator: AccountId20, owner: AccountId20], + { assetId: u128; creator: AccountId20; owner: AccountId20 } + >; /** * An asset class was destroyed. */ - Destroyed: AugmentedEvent; + Destroyed: AugmentedEvent; /** * Some asset class was force-created. */ - ForceCreated: AugmentedEvent; + ForceCreated: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * Some account `who` was frozen. */ - Frozen: AugmentedEvent; + Frozen: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were issued. */ - Issued: AugmentedEvent; + Issued: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20, totalSupply: u128], + { assetId: u128; owner: AccountId20; totalSupply: u128 } + >; /** * Metadata has been cleared for an asset. */ - MetadataCleared: AugmentedEvent; + MetadataCleared: AugmentedEvent; /** * New metadata has been set for an asset. */ - MetadataSet: AugmentedEvent; + MetadataSet: AugmentedEvent< + ApiType, + [assetId: u128, name: Bytes, symbol_: Bytes, decimals: u8, isFrozen: bool], + { assetId: u128; name: Bytes; symbol: Bytes; decimals: u8; isFrozen: bool } + >; /** * The owner changed. */ - OwnerChanged: AugmentedEvent; + OwnerChanged: AugmentedEvent< + ApiType, + [assetId: u128, owner: AccountId20], + { assetId: u128; owner: AccountId20 } + >; /** * The management team changed. */ - TeamChanged: AugmentedEvent; + TeamChanged: AugmentedEvent< + ApiType, + [assetId: u128, issuer: AccountId20, admin: AccountId20, freezer: AccountId20], + { assetId: u128; issuer: AccountId20; admin: AccountId20; freezer: AccountId20 } + >; /** * Some account `who` was thawed. */ - Thawed: AugmentedEvent; + Thawed: AugmentedEvent< + ApiType, + [assetId: u128, who: AccountId20], + { assetId: u128; who: AccountId20 } + >; /** * Some assets were transferred. */ - Transferred: AugmentedEvent; + Transferred: AugmentedEvent< + ApiType, + [assetId: u128, from: AccountId20, to: AccountId20, amount: u128], + { assetId: u128; from: AccountId20; to: AccountId20; amount: u128 } + >; /** * An `amount` was transferred in its entirety from `owner` to * `destination` by the approved `delegate`. */ TransferredApproved: AugmentedEvent< ApiType, - [u128, AccountId20, AccountId20, AccountId20, u128] + [ + assetId: u128, + owner: AccountId20, + delegate: AccountId20, + destination: AccountId20, + amount: u128 + ], + { + assetId: u128; + owner: AccountId20; + delegate: AccountId20; + destination: AccountId20; + amount: u128; + } >; /** * Generic event @@ -673,11 +1004,19 @@ declare module "@polkadot/api-base/types/events" { /** * The call to resume on_idle XCM execution failed with inner error */ - FailedToResumeIdleXcmExecution: AugmentedEvent; + FailedToResumeIdleXcmExecution: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * The call to suspend on_idle XCM execution failed with inner error */ - FailedToSuspendIdleXcmExecution: AugmentedEvent; + FailedToSuspendIdleXcmExecution: AugmentedEvent< + ApiType, + [error: SpRuntimeDispatchError], + { error: SpRuntimeDispatchError } + >; /** * The chain returned to its normal operating state */ @@ -691,15 +1030,19 @@ declare module "@polkadot/api-base/types/events" { /** * Migration completed */ - MigrationCompleted: AugmentedEvent; + MigrationCompleted: AugmentedEvent< + ApiType, + [migrationName: Bytes, consumedWeight: u64], + { migrationName: Bytes; consumedWeight: u64 } + >; /** * Migration started */ - MigrationStarted: AugmentedEvent; + MigrationStarted: AugmentedEvent; /** * Runtime upgrade completed */ - RuntimeUpgradeCompleted: AugmentedEvent; + RuntimeUpgradeCompleted: AugmentedEvent; /** * Runtime upgrade started */ @@ -709,140 +1052,376 @@ declare module "@polkadot/api-base/types/events" { */ [key: string]: AugmentedEvent; }; + moonbeamOrbiters: { + /** + * An orbiter join a collator pool + */ + OrbiterJoinCollatorPool: AugmentedEvent< + ApiType, + [collator: AccountId20, orbiter: AccountId20], + { collator: AccountId20; orbiter: AccountId20 } + >; + /** + * An orbiter leave a collator pool + */ + OrbiterLeaveCollatorPool: AugmentedEvent< + ApiType, + [collator: AccountId20, orbiter: AccountId20], + { collator: AccountId20; orbiter: AccountId20 } + >; + /** + * An orbiter has registered + */ + OrbiterRegistered: AugmentedEvent< + ApiType, + [account: AccountId20, deposit: u128], + { account: AccountId20; deposit: u128 } + >; + /** + * Paid the orbiter account the balance as liquid rewards. + */ + OrbiterRewarded: AugmentedEvent< + ApiType, + [account: AccountId20, rewards: u128], + { account: AccountId20; rewards: u128 } + >; + OrbiterRotation: AugmentedEvent< + ApiType, + [collator: AccountId20, oldOrbiter: Option, newOrbiter: Option], + { collator: AccountId20; oldOrbiter: Option; newOrbiter: Option } + >; + /** + * An orbiter has unregistered + */ + OrbiterUnregistered: AugmentedEvent< + ApiType, + [account: AccountId20], + { account: AccountId20 } + >; + /** + * Generic event + */ + [key: string]: AugmentedEvent; + }; parachainStaking: { /** * Set blocks per round */ - BlocksPerRoundSet: AugmentedEvent; + BlocksPerRoundSet: AugmentedEvent< + ApiType, + [ + currentRound: u32, + firstBlock: u32, + old: u32, + new_: u32, + newPerRoundInflationMin: Perbill, + newPerRoundInflationIdeal: Perbill, + newPerRoundInflationMax: Perbill + ], + { + currentRound: u32; + firstBlock: u32; + old: u32; + new_: u32; + newPerRoundInflationMin: Perbill; + newPerRoundInflationIdeal: Perbill; + newPerRoundInflationMax: Perbill; + } + >; /** * Cancelled request to decrease candidate's bond. */ - CancelledCandidateBondLess: AugmentedEvent; + CancelledCandidateBondLess: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, executeRound: u32], + { candidate: AccountId20; amount: u128; executeRound: u32 } + >; /** * Cancelled request to leave the set of candidates. */ - CancelledCandidateExit: AugmentedEvent; + CancelledCandidateExit: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** * Cancelled request to change an existing delegation. */ CancelledDelegationRequest: AugmentedEvent< ApiType, - [AccountId20, ParachainStakingDelegationRequest] + [ + delegator: AccountId20, + cancelledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest, + collator: AccountId20 + ], + { + delegator: AccountId20; + cancelledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest; + collator: AccountId20; + } >; /** * Candidate rejoins the set of collator candidates. */ - CandidateBackOnline: AugmentedEvent; + CandidateBackOnline: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** - * Сandidate has decreased a self bond. + * Candidate has decreased a self bond. */ - CandidateBondedLess: AugmentedEvent; + CandidateBondedLess: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, newBond: u128], + { candidate: AccountId20; amount: u128; newBond: u128 } + >; /** - * Сandidate has increased a self bond. + * Candidate has increased a self bond. */ - CandidateBondedMore: AugmentedEvent; + CandidateBondedMore: AugmentedEvent< + ApiType, + [candidate: AccountId20, amount: u128, newTotalBond: u128], + { candidate: AccountId20; amount: u128; newTotalBond: u128 } + >; /** - * Сandidate requested to decrease a self bond. + * Candidate requested to decrease a self bond. */ - CandidateBondLessRequested: AugmentedEvent; + CandidateBondLessRequested: AugmentedEvent< + ApiType, + [candidate: AccountId20, amountToDecrease: u128, executeRound: u32], + { candidate: AccountId20; amountToDecrease: u128; executeRound: u32 } + >; /** * Candidate has left the set of candidates. */ - CandidateLeft: AugmentedEvent; + CandidateLeft: AugmentedEvent< + ApiType, + [exCandidate: AccountId20, unlockedAmount: u128, newTotalAmtLocked: u128], + { exCandidate: AccountId20; unlockedAmount: u128; newTotalAmtLocked: u128 } + >; /** - * Сandidate has requested to leave the set of candidates. + * Candidate has requested to leave the set of candidates. */ - CandidateScheduledExit: AugmentedEvent; + CandidateScheduledExit: AugmentedEvent< + ApiType, + [exitAllowedRound: u32, candidate: AccountId20, scheduledExit: u32], + { exitAllowedRound: u32; candidate: AccountId20; scheduledExit: u32 } + >; /** * Candidate temporarily leave the set of collator candidates without unbonding. */ - CandidateWentOffline: AugmentedEvent; + CandidateWentOffline: AugmentedEvent< + ApiType, + [candidate: AccountId20], + { candidate: AccountId20 } + >; /** * Candidate selected for collators. Total Exposed Amount includes all delegations. */ - CollatorChosen: AugmentedEvent; + CollatorChosen: AugmentedEvent< + ApiType, + [round: u32, collatorAccount: AccountId20, totalExposedAmount: u128], + { round: u32; collatorAccount: AccountId20; totalExposedAmount: u128 } + >; /** * Set collator commission to this value. */ - CollatorCommissionSet: AugmentedEvent; + CollatorCommissionSet: AugmentedEvent< + ApiType, + [old: Perbill, new_: Perbill], + { old: Perbill; new_: Perbill } + >; /** * New delegation (increase of the existing one). */ Delegation: AugmentedEvent< ApiType, - [AccountId20, u128, AccountId20, ParachainStakingDelegatorAdded] + [ + delegator: AccountId20, + lockedAmount: u128, + candidate: AccountId20, + delegatorPosition: ParachainStakingDelegatorAdded + ], + { + delegator: AccountId20; + lockedAmount: u128; + candidate: AccountId20; + delegatorPosition: ParachainStakingDelegatorAdded; + } + >; + DelegationDecreased: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amount: u128, inTop: bool], + { delegator: AccountId20; candidate: AccountId20; amount: u128; inTop: bool } >; - DelegationDecreased: AugmentedEvent; /** * Delegator requested to decrease a bond for the collator candidate. */ - DelegationDecreaseScheduled: AugmentedEvent; - DelegationIncreased: AugmentedEvent; + DelegationDecreaseScheduled: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amountToDecrease: u128, executeRound: u32], + { + delegator: AccountId20; + candidate: AccountId20; + amountToDecrease: u128; + executeRound: u32; + } + >; + DelegationIncreased: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, amount: u128, inTop: bool], + { delegator: AccountId20; candidate: AccountId20; amount: u128; inTop: bool } + >; /** * Delegation kicked. */ - DelegationKicked: AugmentedEvent; + DelegationKicked: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; candidate: AccountId20; unstakedAmount: u128 } + >; /** * Delegator requested to revoke delegation. */ - DelegationRevocationScheduled: AugmentedEvent; + DelegationRevocationScheduled: AugmentedEvent< + ApiType, + [round: u32, delegator: AccountId20, candidate: AccountId20, scheduledExit: u32], + { round: u32; delegator: AccountId20; candidate: AccountId20; scheduledExit: u32 } + >; /** * Delegation revoked. */ - DelegationRevoked: AugmentedEvent; + DelegationRevoked: AugmentedEvent< + ApiType, + [delegator: AccountId20, candidate: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; candidate: AccountId20; unstakedAmount: u128 } + >; /** * Cancelled a pending request to exit the set of delegators. */ - DelegatorExitCancelled: AugmentedEvent; + DelegatorExitCancelled: AugmentedEvent< + ApiType, + [delegator: AccountId20], + { delegator: AccountId20 } + >; /** * Delegator requested to leave the set of delegators. */ - DelegatorExitScheduled: AugmentedEvent; + DelegatorExitScheduled: AugmentedEvent< + ApiType, + [round: u32, delegator: AccountId20, scheduledExit: u32], + { round: u32; delegator: AccountId20; scheduledExit: u32 } + >; /** * Delegator has left the set of delegators. */ - DelegatorLeft: AugmentedEvent; + DelegatorLeft: AugmentedEvent< + ApiType, + [delegator: AccountId20, unstakedAmount: u128], + { delegator: AccountId20; unstakedAmount: u128 } + >; /** * Delegation from candidate state has been remove. */ - DelegatorLeftCandidate: AugmentedEvent; + DelegatorLeftCandidate: AugmentedEvent< + ApiType, + [ + delegator: AccountId20, + candidate: AccountId20, + unstakedAmount: u128, + totalCandidateStaked: u128 + ], + { + delegator: AccountId20; + candidate: AccountId20; + unstakedAmount: u128; + totalCandidateStaked: u128; + } + >; /** * Annual inflation input (first 3) was used to derive new per-round * inflation (last 3) */ - InflationSet: AugmentedEvent; + InflationSet: AugmentedEvent< + ApiType, + [ + annualMin: Perbill, + annualIdeal: Perbill, + annualMax: Perbill, + roundMin: Perbill, + roundIdeal: Perbill, + roundMax: Perbill + ], + { + annualMin: Perbill; + annualIdeal: Perbill; + annualMax: Perbill; + roundMin: Perbill; + roundIdeal: Perbill; + roundMax: Perbill; + } + >; /** * Account joined the set of collator candidates. */ - JoinedCollatorCandidates: AugmentedEvent; + JoinedCollatorCandidates: AugmentedEvent< + ApiType, + [account: AccountId20, amountLocked: u128, newTotalAmtLocked: u128], + { account: AccountId20; amountLocked: u128; newTotalAmtLocked: u128 } + >; /** * Started new round. */ - NewRound: AugmentedEvent; + NewRound: AugmentedEvent< + ApiType, + [startingBlock: u32, round: u32, selectedCollatorsNumber: u32, totalBalance: u128], + { startingBlock: u32; round: u32; selectedCollatorsNumber: u32; totalBalance: u128 } + >; /** * Account (re)set for parachain bond treasury. */ - ParachainBondAccountSet: AugmentedEvent; + ParachainBondAccountSet: AugmentedEvent< + ApiType, + [old: AccountId20, new_: AccountId20], + { old: AccountId20; new_: AccountId20 } + >; /** * Percent of inflation reserved for parachain bond (re)set. */ - ParachainBondReservePercentSet: AugmentedEvent; + ParachainBondReservePercentSet: AugmentedEvent< + ApiType, + [old: Percent, new_: Percent], + { old: Percent; new_: Percent } + >; /** * Transferred to account which holds funds reserved for parachain bond. */ - ReservedForParachainBond: AugmentedEvent; + ReservedForParachainBond: AugmentedEvent< + ApiType, + [account: AccountId20, value: u128], + { account: AccountId20; value: u128 } + >; /** * Paid the account (delegator or collator) the balance as liquid rewards. */ - Rewarded: AugmentedEvent; + Rewarded: AugmentedEvent< + ApiType, + [account: AccountId20, rewards: u128], + { account: AccountId20; rewards: u128 } + >; /** * Staking expectations set. */ - StakeExpectationsSet: AugmentedEvent; + StakeExpectationsSet: AugmentedEvent< + ApiType, + [expectMin: u128, expectIdeal: u128, expectMax: u128], + { expectMin: u128; expectIdeal: u128; expectMax: u128 } + >; /** * Set total selected candidates to this value. */ - TotalSelectedSet: AugmentedEvent; + TotalSelectedSet: AugmentedEvent; /** * Generic event */ @@ -1010,26 +1589,74 @@ declare module "@polkadot/api-base/types/events" { /** * An announcement was placed to make a call in the future. */ - Announced: AugmentedEvent; + Announced: AugmentedEvent< + ApiType, + [real: AccountId20, proxy: AccountId20, callHash: H256], + { real: AccountId20; proxy: AccountId20; callHash: H256 } + >; /** * Anonymous account has been created by new proxy with given * disambiguation index and proxy type. */ AnonymousCreated: AugmentedEvent< ApiType, - [AccountId20, AccountId20, MoonriverRuntimeProxyType, u16] + [ + anonymous: AccountId20, + who: AccountId20, + proxyType: MoonriverRuntimeProxyType, + disambiguationIndex: u16 + ], + { + anonymous: AccountId20; + who: AccountId20; + proxyType: MoonriverRuntimeProxyType; + disambiguationIndex: u16; + } >; /** * A proxy was added. */ ProxyAdded: AugmentedEvent< ApiType, - [AccountId20, AccountId20, MoonriverRuntimeProxyType, u32] + [ + delegator: AccountId20, + delegatee: AccountId20, + proxyType: MoonriverRuntimeProxyType, + delay: u32 + ], + { + delegator: AccountId20; + delegatee: AccountId20; + proxyType: MoonriverRuntimeProxyType; + delay: u32; + } >; /** * A proxy was executed correctly, with the given. */ - ProxyExecuted: AugmentedEvent]>; + ProxyExecuted: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; + /** + * A proxy was removed. + */ + ProxyRemoved: AugmentedEvent< + ApiType, + [ + delegator: AccountId20, + delegatee: AccountId20, + proxyType: MoonriverRuntimeProxyType, + delay: u32 + ], + { + delegator: AccountId20; + delegatee: AccountId20; + proxyType: MoonriverRuntimeProxyType; + delay: u32; + } + >; /** * Generic event */ @@ -1041,23 +1668,29 @@ declare module "@polkadot/api-base/types/events" { */ CallLookupFailed: AugmentedEvent< ApiType, - [ITuple<[u32, u32]>, Option, FrameSupportScheduleLookupError] + [task: ITuple<[u32, u32]>, id: Option, error: FrameSupportScheduleLookupError], + { task: ITuple<[u32, u32]>; id: Option; error: FrameSupportScheduleLookupError } >; /** * Canceled some task. */ - Canceled: AugmentedEvent; + Canceled: AugmentedEvent; /** * Dispatched some task. */ Dispatched: AugmentedEvent< ApiType, - [ITuple<[u32, u32]>, Option, Result] + [task: ITuple<[u32, u32]>, id: Option, result: Result], + { + task: ITuple<[u32, u32]>; + id: Option; + result: Result; + } >; /** * Scheduled some task. */ - Scheduled: AugmentedEvent; + Scheduled: AugmentedEvent; /** * Generic event */ @@ -1073,24 +1706,33 @@ declare module "@polkadot/api-base/types/events" { */ ExtrinsicFailed: AugmentedEvent< ApiType, - [SpRuntimeDispatchError, FrameSupportWeightsDispatchInfo] + [dispatchError: SpRuntimeDispatchError, dispatchInfo: FrameSupportWeightsDispatchInfo], + { dispatchError: SpRuntimeDispatchError; dispatchInfo: FrameSupportWeightsDispatchInfo } >; /** * An extrinsic completed successfully. */ - ExtrinsicSuccess: AugmentedEvent; + ExtrinsicSuccess: AugmentedEvent< + ApiType, + [dispatchInfo: FrameSupportWeightsDispatchInfo], + { dispatchInfo: FrameSupportWeightsDispatchInfo } + >; /** * An account was reaped. */ - KilledAccount: AugmentedEvent; + KilledAccount: AugmentedEvent; /** * A new account was created. */ - NewAccount: AugmentedEvent; + NewAccount: AugmentedEvent; /** * On on-chain remark happened. */ - Remarked: AugmentedEvent; + Remarked: AugmentedEvent< + ApiType, + [sender: AccountId20, hash_: H256], + { sender: AccountId20; hash_: H256 } + >; /** * Generic event */ @@ -1100,35 +1742,55 @@ declare module "@polkadot/api-base/types/events" { /** * A motion was approved by the required threshold. */ - Approved: AugmentedEvent; + Approved: AugmentedEvent; /** * A proposal was closed because its threshold was reached or after its * duration was up. */ - Closed: AugmentedEvent; + Closed: AugmentedEvent< + ApiType, + [proposalHash: H256, yes: u32, no: u32], + { proposalHash: H256; yes: u32; no: u32 } + >; /** * A motion was not approved by the required threshold. */ - Disapproved: AugmentedEvent; + Disapproved: AugmentedEvent; /** * A motion was executed; result will be `Ok` if it returned without error. */ - Executed: AugmentedEvent]>; + Executed: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A single member did some action; result will be `Ok` if it returned * without error. */ - MemberExecuted: AugmentedEvent]>; + MemberExecuted: AugmentedEvent< + ApiType, + [proposalHash: H256, result: Result], + { proposalHash: H256; result: Result } + >; /** * A motion (given hash) has been proposed (by given account) with a * threshold (given `MemberCount`). */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent< + ApiType, + [account: AccountId20, proposalIndex: u32, proposalHash: H256, threshold: u32], + { account: AccountId20; proposalIndex: u32; proposalHash: H256; threshold: u32 } + >; /** * A motion (given hash) has been voted on by given account, leaving a * tally (yes votes and no votes given respectively as `MemberCount`). */ - Voted: AugmentedEvent; + Voted: AugmentedEvent< + ApiType, + [account: AccountId20, proposalHash: H256, voted: bool, yes: u32, no: u32], + { account: AccountId20; proposalHash: H256; voted: bool; yes: u32; no: u32 } + >; /** * Generic event */ @@ -1138,31 +1800,39 @@ declare module "@polkadot/api-base/types/events" { /** * Some funds have been allocated. */ - Awarded: AugmentedEvent; + Awarded: AugmentedEvent< + ApiType, + [proposalIndex: u32, award: u128, account: AccountId20], + { proposalIndex: u32; award: u128; account: AccountId20 } + >; /** * Some of our funds have been burnt. */ - Burnt: AugmentedEvent; + Burnt: AugmentedEvent; /** * Some funds have been deposited. */ - Deposit: AugmentedEvent; + Deposit: AugmentedEvent; /** * New proposal. */ - Proposed: AugmentedEvent; + Proposed: AugmentedEvent; /** * A proposal was rejected; funds were slashed. */ - Rejected: AugmentedEvent; + Rejected: AugmentedEvent< + ApiType, + [proposalIndex: u32, slashed: u128], + { proposalIndex: u32; slashed: u128 } + >; /** * Spending has finished; this is the amount that rolls over until next spend. */ - Rollover: AugmentedEvent; + Rollover: AugmentedEvent; /** * We have ended a spend period and will now allocate funds. */ - Spending: AugmentedEvent; + Spending: AugmentedEvent; /** * Generic event */ @@ -1177,11 +1847,19 @@ declare module "@polkadot/api-base/types/events" { * Batch of dispatches did not complete fully. Index of first failing * dispatch given, as well as the error. */ - BatchInterrupted: AugmentedEvent; + BatchInterrupted: AugmentedEvent< + ApiType, + [index: u32, error: SpRuntimeDispatchError], + { index: u32; error: SpRuntimeDispatchError } + >; /** * A call was dispatched. */ - DispatchedAs: AugmentedEvent]>; + DispatchedAs: AugmentedEvent< + ApiType, + [result: Result], + { result: Result } + >; /** * A single item within a Batch of dispatches has completed with no error. */ @@ -1230,34 +1908,79 @@ declare module "@polkadot/api-base/types/events" { [key: string]: AugmentedEvent; }; xcmTransactor: { - DeRegisteredDerivative: AugmentedEvent; + DeRegisteredDerivative: AugmentedEvent; + /** + * Set dest fee per second + */ + DestFeePerSecondChanged: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation, feePerSecond: u128], + { location: XcmV1MultiLocation; feePerSecond: u128 } + >; + /** + * Remove dest fee per second + */ + DestFeePerSecondRemoved: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation], + { location: XcmV1MultiLocation } + >; /** * Registered a derivative index for an account id. */ - RegisteredDerivative: AugmentedEvent; + RegisteredDerivative: AugmentedEvent< + ApiType, + [accountId: AccountId20, index: u16], + { accountId: AccountId20; index: u16 } + >; /** * Transacted the inner call through a derivative account in a destination chain. */ - TransactedDerivative: AugmentedEvent; + TransactedDerivative: AugmentedEvent< + ApiType, + [accountId: AccountId20, dest: XcmV1MultiLocation, call: Bytes, index: u16], + { accountId: AccountId20; dest: XcmV1MultiLocation; call: Bytes; index: u16 } + >; + /** + * Transacted the call through a signed account in a destination chain. + */ + TransactedSigned: AugmentedEvent< + ApiType, + [feePayer: AccountId20, dest: XcmV1MultiLocation, call: Bytes], + { feePayer: AccountId20; dest: XcmV1MultiLocation; call: Bytes } + >; /** * Transacted the call through the sovereign account in a destination chain. */ - TransactedSovereign: AugmentedEvent; + TransactedSovereign: AugmentedEvent< + ApiType, + [feePayer: AccountId20, dest: XcmV1MultiLocation, call: Bytes], + { feePayer: AccountId20; dest: XcmV1MultiLocation; call: Bytes } + >; /** * Transact failed */ - TransactFailed: AugmentedEvent; + TransactFailed: AugmentedEvent< + ApiType, + [error: XcmV2TraitsError], + { error: XcmV2TraitsError } + >; /** * Changed the transact info of a location */ TransactInfoChanged: AugmentedEvent< ApiType, - [XcmV1MultiLocation, XcmTransactorRemoteTransactInfoWithMaxWeight] + [location: XcmV1MultiLocation, remoteInfo: XcmTransactorRemoteTransactInfoWithMaxWeight], + { location: XcmV1MultiLocation; remoteInfo: XcmTransactorRemoteTransactInfoWithMaxWeight } >; /** * Removed the transact info of a location */ - TransactInfoRemoved: AugmentedEvent; + TransactInfoRemoved: AugmentedEvent< + ApiType, + [location: XcmV1MultiLocation], + { location: XcmV1MultiLocation } + >; /** * Generic event */ @@ -1269,7 +1992,18 @@ declare module "@polkadot/api-base/types/events" { */ TransferredMultiAssets: AugmentedEvent< ApiType, - [AccountId20, XcmV1MultiassetMultiAssets, XcmV1MultiAsset, XcmV1MultiLocation] + [ + sender: AccountId20, + assets: XcmV1MultiassetMultiAssets, + fee: XcmV1MultiAsset, + dest: XcmV1MultiLocation + ], + { + sender: AccountId20; + assets: XcmV1MultiassetMultiAssets; + fee: XcmV1MultiAsset; + dest: XcmV1MultiLocation; + } >; /** * Generic event diff --git a/typescript-api/src/moonriver/interfaces/augment-api-query.ts b/typescript-api/src/moonriver/interfaces/augment-api-query.ts index 820f910772..09c9d79d42 100644 --- a/typescript-api/src/moonriver/interfaces/augment-api-query.ts +++ b/typescript-api/src/moonriver/interfaces/augment-api-query.ts @@ -64,6 +64,7 @@ import type { PalletDemocracyVoteVoting, PalletIdentityRegistrarInfo, PalletIdentityRegistration, + PalletMoonbeamOrbitersCollatorPoolInfo, PalletProxyAnnouncement, PalletProxyProxyDefinition, PalletSchedulerScheduledV3, @@ -77,6 +78,7 @@ import type { ParachainStakingCollatorCandidate, ParachainStakingCollatorSnapshot, ParachainStakingDelayedPayout, + ParachainStakingDelegationRequestsScheduledRequest, ParachainStakingDelegations, ParachainStakingDelegator, ParachainStakingInflationInflationInfo, @@ -85,9 +87,9 @@ import type { ParachainStakingRoundInfo, ParachainStakingSetOrderedSetBond, PolkadotCorePrimitivesOutboundHrmpMessage, - PolkadotPrimitivesV1AbridgedHostConfiguration, - PolkadotPrimitivesV1PersistedValidationData, - PolkadotPrimitivesV1UpgradeRestriction, + PolkadotPrimitivesV2AbridgedHostConfiguration, + PolkadotPrimitivesV2PersistedValidationData, + PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, XcmTransactorRemoteTransactInfoWithMaxWeight, @@ -222,8 +224,10 @@ declare module "@polkadot/api-base/types/storage" { }; authorFilter: { /** - * The percentage of active authors that will be eligible at each height. + * The number of active authors that will be eligible at each height. */ + eligibleCount: AugmentedQuery Observable, []> & + QueryableStorageEntry; eligibleRatio: AugmentedQuery Observable, []> & QueryableStorageEntry; /** @@ -237,6 +241,12 @@ declare module "@polkadot/api-base/types/storage" { */ author: AugmentedQuery Observable>, []> & QueryableStorageEntry; + /** + * The highest slot that has been seen in the history of this chain. This + * is a strictly-increasing value. + */ + highestSlotSeen: AugmentedQuery Observable, []> & + QueryableStorageEntry; /** * Generic query */ @@ -245,7 +255,7 @@ declare module "@polkadot/api-base/types/storage" { authorMapping: { /** * We maintain a mapping from the NimbusIds used in the consensus layer to - * the AccountIds runtime (including this staking pallet). + * the AccountIds runtime. */ mappingWithDeposit: AugmentedQuery< ApiType, @@ -255,6 +265,15 @@ declare module "@polkadot/api-base/types/storage" { [NimbusPrimitivesNimbusCryptoPublic] > & QueryableStorageEntry; + /** + * We maintain a reverse mapping from AccountIds to NimbusIDS + */ + nimbusLookup: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; /** * Generic query */ @@ -815,6 +834,68 @@ declare module "@polkadot/api-base/types/storage" { */ [key: string]: QueryableStorageEntry; }; + moonbeamOrbiters: { + /** + * Account lookup override + */ + accountLookupOverride: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Current orbiters, with their "parent" collator + */ + collatorsPool: AugmentedQuery< + ApiType, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Counter for the related counted storage map + */ + counterForCollatorsPool: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Current round index + */ + currentRound: AugmentedQuery Observable, []> & + QueryableStorageEntry; + /** + * Minimum deposit required to be registered as an orbiter + */ + minOrbiterDeposit: AugmentedQuery Observable>, []> & + QueryableStorageEntry; + /** + * Store active orbiter per round and per parent collator + */ + orbiterPerRound: AugmentedQuery< + ApiType, + ( + arg1: u32 | AnyNumber | Uint8Array, + arg2: AccountId20 | string | Uint8Array + ) => Observable>, + [u32, AccountId20] + > & + QueryableStorageEntry; + /** + * Check if account is an orbiter + */ + registeredOrbiter: AugmentedQuery< + ApiType, + (arg: AccountId20 | string | Uint8Array) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; + /** + * Generic query + */ + [key: string]: QueryableStorageEntry; + }; parachainInfo: { parachainId: AugmentedQuery Observable, []> & QueryableStorageEntry; @@ -910,6 +991,17 @@ declare module "@polkadot/api-base/types/storage" { [u32] > & QueryableStorageEntry; + /** + * Stores outstanding delegation requests per collator. + */ + delegationScheduledRequests: AugmentedQuery< + ApiType, + ( + arg: AccountId20 | string | Uint8Array + ) => Observable>, + [AccountId20] + > & + QueryableStorageEntry; /** * Get delegator state associated with an account if account is delegating else None */ @@ -1034,7 +1126,7 @@ declare module "@polkadot/api-base/types/storage" { */ hostConfiguration: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1158,7 +1250,7 @@ declare module "@polkadot/api-base/types/storage" { */ upgradeRestrictionSignal: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1175,7 +1267,7 @@ declare module "@polkadot/api-base/types/storage" { */ validationData: AugmentedQuery< ApiType, - () => Observable>, + () => Observable>, [] > & QueryableStorageEntry; @@ -1394,8 +1486,11 @@ declare module "@polkadot/api-base/types/storage" { /** * Events deposited for the current block. * - * NOTE: This storage item is explicitly unbounded since it is never - * intended to be read from within the runtime. + * NOTE: The item is unbound and should therefore never be read on chain. + * It could otherwise inflate the PoV size of a block. + * + * Events have a large in-memory size. Box the events to not go + * out-of-memory just in case someone still reads them from within the runtime. */ events: AugmentedQuery Observable>, []> & QueryableStorageEntry; @@ -1669,12 +1764,35 @@ declare module "@polkadot/api-base/types/storage" { [key: string]: QueryableStorageEntry; }; xcmTransactor: { + /** + * Stores the fee per second for an asset in its reserve chain. This + * allows us to convert from weight to fee + */ + destinationAssetFeePerSecond: AugmentedQuery< + ApiType, + ( + arg: XcmV1MultiLocation | { parents?: any; interior?: any } | string | Uint8Array + ) => Observable>, + [XcmV1MultiLocation] + > & + QueryableStorageEntry; + /** + * Since we are using pallet-utility for account derivation (through + * AsDerivative), we need to provide an index for the account derivation. + * This storage item stores the index assigned for a given local account. + * These indices are usable as derivative in the relay chain + */ indexToAccount: AugmentedQuery< ApiType, (arg: u16 | AnyNumber | Uint8Array) => Observable>, [u16] > & QueryableStorageEntry; + /** + * Stores the transact info of a MultiLocation. This defines how much + * extra weight we need to add when we want to transact in the destination + * chain and maximum amount of weight allowed by the destination chain + */ transactInfoWithWeightLimit: AugmentedQuery< ApiType, ( diff --git a/typescript-api/src/moonriver/interfaces/augment-api-rpc.ts b/typescript-api/src/moonriver/interfaces/augment-api-rpc.ts index c16ac098f6..88cf2da274 100644 --- a/typescript-api/src/moonriver/interfaces/augment-api-rpc.ts +++ b/typescript-api/src/moonriver/interfaces/augment-api-rpc.ts @@ -14,6 +14,7 @@ import type { U64, Vec, bool, + f64, u32, u64, } from "@polkadot/types-codec"; @@ -37,6 +38,7 @@ import type { CreatedBlock } from "@polkadot/types/interfaces/engine"; import type { EthAccount, EthCallRequest, + EthFeeHistory, EthFilter, EthFilterChanges, EthLog, @@ -55,7 +57,7 @@ import type { JustificationNotification, ReportedRoundStates, } from "@polkadot/types/interfaces/grandpa"; -import type { MmrLeafProof } from "@polkadot/types/interfaces/mmr"; +import type { MmrLeafBatchProof, MmrLeafProof } from "@polkadot/types/interfaces/mmr"; import type { StorageKind } from "@polkadot/types/interfaces/offchain"; import type { FeeDetails, RuntimeDispatchInfo } from "@polkadot/types/interfaces/payment"; import type { RpcMethods } from "@polkadot/types/interfaces/rpc"; @@ -420,6 +422,16 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { number?: BlockNumber | AnyNumber | Uint8Array ) => Observable >; + /** + * Returns fee history for given block count & reward percentiles + */ + feeHistory: AugmentedRpc< + ( + blockCount: U256 | AnyNumber | Uint8Array, + newestBlock: BlockNumber | AnyNumber | Uint8Array, + rewardPercentiles: Option> | null | object | string | Uint8Array + ) => Observable + >; /** * Returns current gas price. */ @@ -595,6 +607,10 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { * Returns the number of hashes per second that the node is mining with. */ hashrate: AugmentedRpc<() => Observable>; + /** + * Returns max priority fee per gas + */ + maxPriorityFeePerGas: AugmentedRpc<() => Observable>; /** * Returns true if client is actively mining new blocks. */ @@ -709,6 +725,15 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { subscribeJustifications: AugmentedRpc<() => Observable>; }; mmr: { + /** + * Generate MMR proof for the given leaf indices. + */ + generateBatchProof: AugmentedRpc< + ( + leafIndices: Vec | (u64 | AnyNumber | Uint8Array)[], + at?: BlockHash | string | Uint8Array + ) => Observable + >; /** * Generate MMR proof for given leaf index. */ @@ -716,7 +741,7 @@ declare module "@polkadot/rpc-core/types/jsonrpc" { ( leafIndex: u64 | AnyNumber | Uint8Array, at?: BlockHash | string | Uint8Array - ) => Observable + ) => Observable >; }; net: { diff --git a/typescript-api/src/moonriver/interfaces/augment-api-tx.ts b/typescript-api/src/moonriver/interfaces/augment-api-tx.ts index 9910d04fd6..c5d20f0e29 100644 --- a/typescript-api/src/moonriver/interfaces/augment-api-tx.ts +++ b/typescript-api/src/moonriver/interfaces/augment-api-tx.ts @@ -7,6 +7,7 @@ import type { Bytes, Compact, Option, + Struct, U256, U8aFixed, Vec, @@ -17,7 +18,7 @@ import type { u64, u8, } from "@polkadot/types-codec"; -import type { AnyNumber, ITuple } from "@polkadot/types-codec/types"; +import type { AnyNumber, IMethod, ITuple } from "@polkadot/types-codec/types"; import type { AccountId20, Call, @@ -44,8 +45,6 @@ import type { PalletIdentityBitFlags, PalletIdentityIdentityInfo, PalletIdentityJudgement, - ParachainStakingInflationRangePerbill, - ParachainStakingInflationRangeU128, SpRuntimeMultiSignature, XcmV0OriginKind, XcmV1MultiLocation, @@ -798,11 +797,11 @@ declare module "@polkadot/api-base/types/submittable" { }; authorFilter: { /** - * Update the eligible ratio. Intended to be called by governance. + * Update the eligible count. Intended to be called by governance. */ setEligible: AugmentedSubmittable< - (updated: Percent | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Percent] + (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] >; /** * Generic tx @@ -831,7 +830,7 @@ declare module "@polkadot/api-base/types/submittable" { */ addAssociation: AugmentedSubmittable< ( - authorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + nimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic] >; @@ -843,20 +842,39 @@ declare module "@polkadot/api-base/types/submittable" { */ clearAssociation: AugmentedSubmittable< ( - authorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + nimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic] >; + /** + * Remove your Mapping. + * + * This is useful when you are no longer an author and would like to + * re-claim your security deposit. + */ + removeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Set association and session keys at once. + * + * This is useful for key rotation to update Nimbus and VRF keys in one + * call. No new security deposit is required. Will replace + * `update_association` which is kept now for backwards compatibility reasons. + */ + setKeys: AugmentedSubmittable< + (keys: Bytes | string | Uint8Array) => SubmittableExtrinsic, + [Bytes] + >; /** * Change your Mapping. * * This is useful for normal key rotation or for when switching from one - * physical collator machine to another. No new security deposit is required. + * physical collator machine to another. No new security deposit is + * required. This sets keys to new_nimbus_id.into() by default. */ updateAssociation: AugmentedSubmittable< ( - oldAuthorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array, - newAuthorId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array + oldNimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array, + newNimbusId: NimbusPrimitivesNimbusCryptoPublic | string | Uint8Array ) => SubmittableExtrinsic, [NimbusPrimitivesNimbusCryptoPublic, NimbusPrimitivesNimbusCryptoPublic] >; @@ -1112,7 +1130,7 @@ declare module "@polkadot/api-base/types/submittable" { */ execute: AugmentedSubmittable< ( - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Call, Compact] @@ -1152,7 +1170,7 @@ declare module "@polkadot/api-base/types/submittable" { propose: AugmentedSubmittable< ( threshold: Compact | AnyNumber | Uint8Array, - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Compact, Call, Compact] @@ -2999,6 +3017,58 @@ declare module "@polkadot/api-base/types/submittable" { */ [key: string]: SubmittableExtrinsicFunction; }; + moonbeamOrbiters: { + /** + * Add a collator to orbiters program. + */ + addCollator: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Add an orbiter in a collator pool + */ + collatorAddOrbiter: AugmentedSubmittable< + (orbiter: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Remove an orbiter from the caller collator pool + */ + collatorRemoveOrbiter: AugmentedSubmittable< + (orbiter: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Remove the caller from the specified collator pool + */ + orbiterLeaveCollatorPool: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Registering as an orbiter + */ + orbiterRegister: AugmentedSubmittable<() => SubmittableExtrinsic, []>; + /** + * Deregistering from orbiters + */ + orbiterUnregister: AugmentedSubmittable< + (collatorsPoolCount: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, + [u32] + >; + /** + * Remove a collator from orbiters program. + */ + removeCollator: AugmentedSubmittable< + (collator: AccountId20 | string | Uint8Array) => SubmittableExtrinsic, + [AccountId20] + >; + /** + * Generic tx + */ + [key: string]: SubmittableExtrinsicFunction; + }; parachainStaking: { /** * Cancel pending request to adjust the collator candidate self bond @@ -3104,27 +3174,6 @@ declare module "@polkadot/api-base/types/submittable" { * Rejoin the set of collator candidates if previously had called `go_offline` */ goOnline: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** - * Hotfix patch to remove all delegation requests not removed during a - * candidate exit - */ - hotfixRemoveDelegationRequests: AugmentedSubmittable< - ( - delegators: Vec | (AccountId20 | string | Uint8Array)[] - ) => SubmittableExtrinsic, - [Vec] - >; - /** - * Hotfix patch to correct and update CandidatePool value for candidates - * that have called candidate_bond_more when it did not update the - * CandidatePool value - */ - hotfixUpdateCandidatePoolValue: AugmentedSubmittable< - ( - candidates: Vec | (AccountId20 | string | Uint8Array)[] - ) => SubmittableExtrinsic, - [Vec] - >; /** * Join the set of collator candidates */ @@ -3162,8 +3211,9 @@ declare module "@polkadot/api-base/types/submittable" { >; /** * Request to leave the set of delegators. If successful, the caller is - * scheduled to be allowed to exit. Success forbids future delegator - * actions until the request is invoked or cancelled. + * scheduled to be allowed to exit via a [DelegationAction::Revoke] + * towards all existing delegations. Success forbids future delegation + * requests until the request is invoked or cancelled. */ scheduleLeaveDelegators: AugmentedSubmittable<() => SubmittableExtrinsic, []>; /** @@ -3199,12 +3249,22 @@ declare module "@polkadot/api-base/types/submittable" { setInflation: AugmentedSubmittable< ( schedule: - | ParachainStakingInflationRangePerbill + | ({ + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct) | { min?: any; ideal?: any; max?: any } | string | Uint8Array ) => SubmittableExtrinsic, - [ParachainStakingInflationRangePerbill] + [ + { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct + ] >; /** * Set the account that will hold funds set aside for parachain bond @@ -3227,12 +3287,22 @@ declare module "@polkadot/api-base/types/submittable" { setStakingExpectations: AugmentedSubmittable< ( expectations: - | ParachainStakingInflationRangeU128 + | ({ + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct) | { min?: any; ideal?: any; max?: any } | string | Uint8Array ) => SubmittableExtrinsic, - [ParachainStakingInflationRangeU128] + [ + { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct + ] >; /** * Set the total number of collator candidates selected per round @@ -3372,8 +3442,10 @@ declare module "@polkadot/api-base/types/submittable" { * Transfer some assets from the local chain to the sovereign account of a * destination chain and forward a notification XCM. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`, up to enough to pay for + * `weight_limit` of weight. If more weight is needed than `weight_limit`, + * then the operation will fail and the assets send may be at risk. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3411,8 +3483,10 @@ declare module "@polkadot/api-base/types/submittable" { /** * Teleport some assets from the local chain to some destination chain. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`, up to enough to pay for + * `weight_limit` of weight. If more weight is needed than `weight_limit`, + * then the operation will fail and the assets send may be at risk. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3451,9 +3525,10 @@ declare module "@polkadot/api-base/types/submittable" { * Transfer some assets from the local chain to the sovereign account of a * destination chain and forward a notification XCM. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector and fee-weight is calculated locally and thus - * remote weights are assumed to be equal to local weights. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`. The weight limit for fees is + * not provided and thus is unlimited, with all fees taken as needed from + * the asset. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3485,9 +3560,10 @@ declare module "@polkadot/api-base/types/submittable" { /** * Teleport some assets from the local chain to some destination chain. * - * Fee payment on the destination side is made from the first asset listed - * in the `assets` vector and fee-weight is calculated locally and thus - * remote weights are assumed to be equal to local weights. + * Fee payment on the destination side is made from the asset in the + * `assets` vector of index `fee_asset_item`. The weight limit for fees is + * not provided and thus is unlimited, with all fees taken as needed from + * the asset. * * - `origin`: Must be capable of withdrawing the `assets` and executing XCM. * - `dest`: Destination context for the assets. Will typically be @@ -3702,7 +3778,7 @@ declare module "@polkadot/api-base/types/submittable" { ( real: AccountId20 | string | Uint8Array, forceProxyType: Option | null | object | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [AccountId20, Option, Call] >; @@ -3735,7 +3811,7 @@ declare module "@polkadot/api-base/types/submittable" { delegate: AccountId20 | string | Uint8Array, real: AccountId20 | string | Uint8Array, forceProxyType: Option | null | object | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [AccountId20, AccountId20, Option, Call] >; @@ -4157,7 +4233,7 @@ declare module "@polkadot/api-base/types/submittable" { */ execute: AugmentedSubmittable< ( - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Call, Compact] @@ -4197,7 +4273,7 @@ declare module "@polkadot/api-base/types/submittable" { propose: AugmentedSubmittable< ( threshold: Compact | AnyNumber | Uint8Array, - proposal: Call | { callIndex?: any; args?: any } | string | Uint8Array, + proposal: Call | IMethod | string | Uint8Array, lengthBound: Compact | AnyNumber | Uint8Array ) => SubmittableExtrinsic, [Compact, Call, Compact] @@ -4392,7 +4468,7 @@ declare module "@polkadot/api-base/types/submittable" { asDerivative: AugmentedSubmittable< ( index: u16 | AnyNumber | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [u16, Call] >; @@ -4422,7 +4498,7 @@ declare module "@polkadot/api-base/types/submittable" { */ batch: AugmentedSubmittable< ( - calls: Vec | (Call | { callIndex?: any; args?: any } | string | Uint8Array)[] + calls: Vec | (Call | IMethod | string | Uint8Array)[] ) => SubmittableExtrinsic, [Vec] >; @@ -4447,7 +4523,7 @@ declare module "@polkadot/api-base/types/submittable" { */ batchAll: AugmentedSubmittable< ( - calls: Vec | (Call | { callIndex?: any; args?: any } | string | Uint8Array)[] + calls: Vec | (Call | IMethod | string | Uint8Array)[] ) => SubmittableExtrinsic, [Vec] >; @@ -4478,7 +4554,7 @@ declare module "@polkadot/api-base/types/submittable" { | { PolkadotXcm: any } | string | Uint8Array, - call: Call | { callIndex?: any; args?: any } | string | Uint8Array + call: Call | IMethod | string | Uint8Array ) => SubmittableExtrinsic, [MoonriverRuntimeOriginCaller, Call] >; @@ -4515,6 +4591,15 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [AccountId20, u16] >; + /** + * Remove the fee per second of an asset on its reserve chain + */ + removeFeePerSecond: AugmentedSubmittable< + ( + assetLocation: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation] + >; /** * Remove the transact info of a location */ @@ -4524,6 +4609,21 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [XcmVersionedMultiLocation] >; + /** + * Set the fee per second of an asset on its reserve chain + */ + setFeePerSecond: AugmentedSubmittable< + ( + assetLocation: + | XcmVersionedMultiLocation + | { V0: any } + | { V1: any } + | string + | Uint8Array, + feePerSecond: u128 | AnyNumber | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, u128] + >; /** * Change the transact info of a location */ @@ -4531,10 +4631,10 @@ declare module "@polkadot/api-base/types/submittable" { ( location: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, transactExtraWeight: u64 | AnyNumber | Uint8Array, - feePerSecond: u128 | AnyNumber | Uint8Array, - maxWeight: u64 | AnyNumber | Uint8Array + maxWeight: u64 | AnyNumber | Uint8Array, + transactExtraWeightSigned: Option | null | object | string | Uint8Array ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, u64, u128, u64] + [XcmVersionedMultiLocation, u64, u64, Option] >; /** * Transact the inner call through a derivative account in a destination @@ -4579,6 +4679,44 @@ declare module "@polkadot/api-base/types/submittable" { ) => SubmittableExtrinsic, [MoonriverRuntimeXcmConfigTransactors, u16, XcmVersionedMultiLocation, u64, Bytes] >; + /** + * Transact the call through the a signed origin in this chain that should + * be converted to a transaction dispatch account in the destination chain + * by any method implemented in the destination chains runtime + * + * This time we are giving the currency as a currencyId instead of multilocation + */ + transactThroughSigned: AugmentedSubmittable< + ( + dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + feeCurrencyId: + | MoonriverRuntimeXcmConfigCurrencyId + | { SelfReserve: any } + | { ForeignAsset: any } + | { LocalAssetReserve: any } + | string + | Uint8Array, + destWeight: u64 | AnyNumber | Uint8Array, + call: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, MoonriverRuntimeXcmConfigCurrencyId, u64, Bytes] + >; + /** + * Transact the call through the a signed origin in this chain that should + * be converted to a transaction dispatch account in the destination chain + * by any method implemented in the destination chains runtime + * + * This time we are giving the currency as a multilocation instead of currencyId + */ + transactThroughSignedMultilocation: AugmentedSubmittable< + ( + dest: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + feeLocation: XcmVersionedMultiLocation | { V0: any } | { V1: any } | string | Uint8Array, + destWeight: u64 | AnyNumber | Uint8Array, + call: Bytes | string | Uint8Array + ) => SubmittableExtrinsic, + [XcmVersionedMultiLocation, XcmVersionedMultiLocation, u64, Bytes] + >; /** * Transact the call through the sovereign account in a destination chain, * 'fee_payer' pays for the fee diff --git a/typescript-api/src/moonriver/interfaces/augment-types.ts b/typescript-api/src/moonriver/interfaces/augment-types.ts index ade8908353..4f94b06ada 100644 --- a/typescript-api/src/moonriver/interfaces/augment-types.ts +++ b/typescript-api/src/moonriver/interfaces/augment-types.ts @@ -6,6 +6,8 @@ import type { BitVec, Bool, Bytes, + F32, + F64, I128, I16, I256, @@ -14,6 +16,7 @@ import type { I8, Json, Null, + OptionBool, Raw, Text, Type, @@ -25,6 +28,8 @@ import type { U8, USize, bool, + f32, + f64, i128, i16, i256, @@ -99,6 +104,7 @@ import type { BeefyId, BeefyNextAuthoritySet, BeefyPayload, + BeefyPayloadId, BeefySignedCommitment, MmrRootHash, ValidatorSetId, @@ -151,8 +157,6 @@ import type { ContractCallFlags, ContractCallRequest, ContractExecResult, - ContractExecResultErr, - ContractExecResultErrModule, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, @@ -302,6 +306,7 @@ import type { EthBlock, EthBloom, EthCallRequest, + EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, @@ -537,7 +542,7 @@ import type { StorageMetadataV13, StorageMetadataV9, } from "@polkadot/types/interfaces/metadata"; -import type { MmrLeafProof } from "@polkadot/types/interfaces/mmr"; +import type { MmrLeafBatchProof, MmrLeafProof } from "@polkadot/types/interfaces/mmr"; import type { StorageKind } from "@polkadot/types/interfaces/offchain"; import type { DeferredOffenceOf, @@ -965,6 +970,7 @@ import type { DispatchClass, DispatchError, DispatchErrorModule, + DispatchErrorModuleU8, DispatchErrorModuleU8a, DispatchErrorTo198, DispatchInfo, @@ -1003,6 +1009,7 @@ import type { SystemOrigin, TokenError, TransactionValidityError, + TransactionalError, UnknownTransaction, WeightPerClass, } from "@polkadot/types/interfaces/system"; @@ -1197,6 +1204,7 @@ declare module "@polkadot/types/types/registry" { BeefyKey: BeefyKey; BeefyNextAuthoritySet: BeefyNextAuthoritySet; BeefyPayload: BeefyPayload; + BeefyPayloadId: BeefyPayloadId; BeefySignedCommitment: BeefySignedCommitment; Bid: Bid; Bidder: Bidder; @@ -1296,8 +1304,6 @@ declare module "@polkadot/types/types/registry" { ContractEventSpecV1: ContractEventSpecV1; ContractEventSpecV2: ContractEventSpecV2; ContractExecResult: ContractExecResult; - ContractExecResultErr: ContractExecResultErr; - ContractExecResultErrModule: ContractExecResultErrModule; ContractExecResultOk: ContractExecResultOk; ContractExecResultResult: ContractExecResultResult; ContractExecResultSuccessTo255: ContractExecResultSuccessTo255; @@ -1363,6 +1369,7 @@ declare module "@polkadot/types/types/registry" { DispatchClass: DispatchClass; DispatchError: DispatchError; DispatchErrorModule: DispatchErrorModule; + DispatchErrorModuleU8: DispatchErrorModuleU8; DispatchErrorModuleU8a: DispatchErrorModuleU8a; DispatchErrorTo198: DispatchErrorTo198; DispatchFeePayment: DispatchFeePayment; @@ -1417,6 +1424,7 @@ declare module "@polkadot/types/types/registry" { EthereumAddress: EthereumAddress; EthereumLookupSource: EthereumLookupSource; EthereumSignature: EthereumSignature; + EthFeeHistory: EthFeeHistory; EthFilter: EthFilter; EthFilterAddress: EthFilterAddress; EthFilterChanges: EthFilterChanges; @@ -1481,6 +1489,10 @@ declare module "@polkadot/types/types/registry" { ExtrinsicsWeight: ExtrinsicsWeight; ExtrinsicUnknown: ExtrinsicUnknown; ExtrinsicV4: ExtrinsicV4; + f32: f32; + F32: F32; + f64: f64; + F64: F64; FeeDetails: FeeDetails; Fixed128: Fixed128; Fixed64: Fixed64; @@ -1651,6 +1663,7 @@ declare module "@polkadot/types/types/registry" { MetadataV14: MetadataV14; MetadataV9: MetadataV9; MigrationStatusResult: MigrationStatusResult; + MmrLeafBatchProof: MmrLeafBatchProof; MmrLeafProof: MmrLeafProof; MmrRootHash: MmrRootHash; ModuleConstantMetadataV10: ModuleConstantMetadataV10; @@ -1716,6 +1729,7 @@ declare module "@polkadot/types/types/registry" { OpenTipTip: OpenTipTip; OpenTipTo225: OpenTipTo225; OperatingMode: OperatingMode; + OptionBool: OptionBool; Origin: Origin; OriginCaller: OriginCaller; OriginKindV0: OriginKindV0; @@ -2048,6 +2062,7 @@ declare module "@polkadot/types/types/registry" { TombstoneContractInfo: TombstoneContractInfo; TraceBlockResponse: TraceBlockResponse; TraceError: TraceError; + TransactionalError: TransactionalError; TransactionInfo: TransactionInfo; TransactionPriority: TransactionPriority; TransactionStorageProof: TransactionStorageProof; diff --git a/typescript-api/src/moonriver/interfaces/lookup.ts b/typescript-api/src/moonriver/interfaces/lookup.ts index c263f09a83..c1ba827f9c 100644 --- a/typescript-api/src/moonriver/interfaces/lookup.ts +++ b/typescript-api/src/moonriver/interfaces/lookup.ts @@ -123,6 +123,7 @@ export default { TooManyConsumers: "Null", Token: "SpRuntimeTokenError", Arithmetic: "SpRuntimeArithmeticError", + Transactional: "SpRuntimeTransactionalError", }, }, /** @@ -130,7 +131,7 @@ export default { */ SpRuntimeModuleError: { index: "u8", - error: "u8", + error: "[u8;4]", }, /** * Lookup25: sp_runtime::TokenError @@ -153,7 +154,13 @@ export default { _enum: ["Underflow", "Overflow", "DivisionByZero"], }, /** - * Lookup27: cumulus_pallet_parachain_system::pallet::Event + * Lookup27: sp_runtime::TransactionalError + */ + SpRuntimeTransactionalError: { + _enum: ["LimitReached", "NoLayer"], + }, + /** + * Lookup28: cumulus_pallet_parachain_system::pallet::Event */ CumulusPalletParachainSystemEvent: { _enum: { @@ -166,7 +173,7 @@ export default { }, }, /** - * Lookup28: pallet_balances::pallet::Event + * Lookup29: pallet_balances::pallet::Event */ PalletBalancesEvent: { _enum: { @@ -217,13 +224,13 @@ export default { }, }, /** - * Lookup29: frame_support::traits::tokens::misc::BalanceStatus + * Lookup30: frame_support::traits::tokens::misc::BalanceStatus */ FrameSupportTokensMiscBalanceStatus: { _enum: ["Free", "Reserved"], }, /** - * Lookup30: parachain_staking::pallet::Event + * Lookup31: parachain_staking::pallet::Event */ ParachainStakingEvent: { _enum: { @@ -330,7 +337,8 @@ export default { }, CancelledDelegationRequest: { delegator: "AccountId20", - cancelledRequest: "ParachainStakingDelegationRequest", + cancelledRequest: "ParachainStakingDelegationRequestsCancelledScheduledRequest", + collator: "AccountId20", }, Delegation: { delegator: "AccountId20", @@ -408,22 +416,23 @@ export default { }, }, /** - * Lookup32: parachain_staking::types::DelegationRequest + * Lookup33: parachain_staking::delegation_requests::CancelledScheduledRequest */ - ParachainStakingDelegationRequest: { - collator: "AccountId20", - amount: "u128", + ParachainStakingDelegationRequestsCancelledScheduledRequest: { whenExecutable: "u32", - action: "ParachainStakingDelegationChange", + action: "ParachainStakingDelegationRequestsDelegationAction", }, /** - * Lookup33: parachain_staking::types::DelegationChange + * Lookup34: parachain_staking::delegation_requests::DelegationAction */ - ParachainStakingDelegationChange: { - _enum: ["Revoke", "Decrease"], + ParachainStakingDelegationRequestsDelegationAction: { + _enum: { + Revoke: "u128", + Decrease: "u128", + }, }, /** - * Lookup34: parachain_staking::types::DelegatorAdded + * Lookup35: parachain_staking::types::DelegatorAdded */ ParachainStakingDelegatorAdded: { _enum: { @@ -434,45 +443,86 @@ export default { }, }, /** - * Lookup37: pallet_author_slot_filter::pallet::Event + * Lookup38: pallet_author_slot_filter::pallet::Event */ PalletAuthorSlotFilterEvent: { _enum: { - EligibleUpdated: "Percent", + EligibleUpdated: "u32", }, }, /** - * Lookup38: pallet_author_mapping::pallet::Event + * Lookup40: pallet_author_mapping::pallet::Event */ PalletAuthorMappingEvent: { _enum: { - AuthorRegistered: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRegistered: { + _alias: { + keys_: "keys", + }, + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, - AuthorDeRegistered: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", - }, - AuthorRotated: { - newAuthorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRemoved: { + _alias: { + keys_: "keys", + }, + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, - DefunctAuthorBusted: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + KeysRotated: { + newNimbusId: "NimbusPrimitivesNimbusCryptoPublic", accountId: "AccountId20", + newKeys: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, }, }, /** - * Lookup39: nimbus_primitives::nimbus_crypto::Public + * Lookup41: nimbus_primitives::nimbus_crypto::Public */ NimbusPrimitivesNimbusCryptoPublic: "SpCoreSr25519Public", /** - * Lookup40: sp_core::sr25519::Public + * Lookup42: sp_core::sr25519::Public */ SpCoreSr25519Public: "[u8;32]", /** - * Lookup41: pallet_utility::pallet::Event + * Lookup43: session_keys_primitives::vrf::vrf_crypto::Public + */ + SessionKeysPrimitivesVrfVrfCryptoPublic: "SpCoreSr25519Public", + /** + * Lookup44: pallet_moonbeam_orbiters::pallet::Event + */ + PalletMoonbeamOrbitersEvent: { + _enum: { + OrbiterJoinCollatorPool: { + collator: "AccountId20", + orbiter: "AccountId20", + }, + OrbiterLeaveCollatorPool: { + collator: "AccountId20", + orbiter: "AccountId20", + }, + OrbiterRewarded: { + account: "AccountId20", + rewards: "u128", + }, + OrbiterRotation: { + collator: "AccountId20", + oldOrbiter: "Option", + newOrbiter: "Option", + }, + OrbiterRegistered: { + account: "AccountId20", + deposit: "u128", + }, + OrbiterUnregistered: { + account: "AccountId20", + }, + }, + }, + /** + * Lookup46: pallet_utility::pallet::Event */ PalletUtilityEvent: { _enum: { @@ -488,7 +538,7 @@ export default { }, }, /** - * Lookup44: pallet_proxy::pallet::Event + * Lookup49: pallet_proxy::pallet::Event */ PalletProxyEvent: { _enum: { @@ -512,10 +562,16 @@ export default { proxyType: "MoonriverRuntimeProxyType", delay: "u32", }, + ProxyRemoved: { + delegator: "AccountId20", + delegatee: "AccountId20", + proxyType: "MoonriverRuntimeProxyType", + delay: "u32", + }, }, }, /** - * Lookup45: moonriver_runtime::ProxyType + * Lookup50: moonriver_runtime::ProxyType */ MoonriverRuntimeProxyType: { _enum: [ @@ -529,7 +585,7 @@ export default { ], }, /** - * Lookup47: pallet_maintenance_mode::pallet::Event + * Lookup52: pallet_maintenance_mode::pallet::Event */ PalletMaintenanceModeEvent: { _enum: { @@ -544,7 +600,7 @@ export default { }, }, /** - * Lookup48: pallet_identity::pallet::Event + * Lookup53: pallet_identity::pallet::Event */ PalletIdentityEvent: { _enum: { @@ -592,7 +648,7 @@ export default { }, }, /** - * Lookup49: pallet_migrations::pallet::Event + * Lookup54: pallet_migrations::pallet::Event */ PalletMigrationsEvent: { _enum: { @@ -610,7 +666,7 @@ export default { }, }, /** - * Lookup50: pallet_evm::pallet::Event + * Lookup55: pallet_evm::pallet::Event */ PalletEvmEvent: { _enum: { @@ -624,7 +680,7 @@ export default { }, }, /** - * Lookup51: ethereum::log::Log + * Lookup56: ethereum::log::Log */ EthereumLog: { address: "H160", @@ -632,7 +688,7 @@ export default { data: "Bytes", }, /** - * Lookup56: pallet_ethereum::pallet::Event + * Lookup61: pallet_ethereum::pallet::Event */ PalletEthereumEvent: { _enum: { @@ -640,7 +696,7 @@ export default { }, }, /** - * Lookup57: evm_core::error::ExitReason + * Lookup62: evm_core::error::ExitReason */ EvmCoreErrorExitReason: { _enum: { @@ -651,13 +707,13 @@ export default { }, }, /** - * Lookup58: evm_core::error::ExitSucceed + * Lookup63: evm_core::error::ExitSucceed */ EvmCoreErrorExitSucceed: { _enum: ["Stopped", "Returned", "Suicided"], }, /** - * Lookup59: evm_core::error::ExitError + * Lookup64: evm_core::error::ExitError */ EvmCoreErrorExitError: { _enum: { @@ -679,13 +735,13 @@ export default { }, }, /** - * Lookup62: evm_core::error::ExitRevert + * Lookup67: evm_core::error::ExitRevert */ EvmCoreErrorExitRevert: { _enum: ["Reverted"], }, /** - * Lookup63: evm_core::error::ExitFatal + * Lookup68: evm_core::error::ExitFatal */ EvmCoreErrorExitFatal: { _enum: { @@ -696,7 +752,7 @@ export default { }, }, /** - * Lookup64: pallet_base_fee::pallet::Event + * Lookup69: pallet_base_fee::pallet::Event */ PalletBaseFeeEvent: { _enum: { @@ -707,7 +763,7 @@ export default { }, }, /** - * Lookup66: pallet_scheduler::pallet::Event + * Lookup71: pallet_scheduler::pallet::Event */ PalletSchedulerEvent: { _enum: { @@ -732,13 +788,13 @@ export default { }, }, /** - * Lookup69: frame_support::traits::schedule::LookupError + * Lookup74: frame_support::traits::schedule::LookupError */ FrameSupportScheduleLookupError: { _enum: ["Unknown", "BadFormat"], }, /** - * Lookup70: pallet_democracy::pallet::Event + * Lookup75: pallet_democracy::pallet::Event */ PalletDemocracyEvent: { _enum: { @@ -820,13 +876,13 @@ export default { }, }, /** - * Lookup72: pallet_democracy::vote_threshold::VoteThreshold + * Lookup77: pallet_democracy::vote_threshold::VoteThreshold */ PalletDemocracyVoteThreshold: { _enum: ["SuperMajorityApprove", "SuperMajorityAgainst", "SimpleMajority"], }, /** - * Lookup73: pallet_democracy::vote::AccountVote + * Lookup78: pallet_democracy::vote::AccountVote */ PalletDemocracyVoteAccountVote: { _enum: { @@ -841,7 +897,7 @@ export default { }, }, /** - * Lookup75: pallet_collective::pallet::Event + * Lookup80: pallet_collective::pallet::Event */ PalletCollectiveEvent: { _enum: { @@ -880,7 +936,7 @@ export default { }, }, /** - * Lookup77: pallet_treasury::pallet::Event + * Lookup82: pallet_treasury::pallet::Event */ PalletTreasuryEvent: { _enum: { @@ -911,7 +967,7 @@ export default { }, }, /** - * Lookup78: pallet_crowdloan_rewards::pallet::Event + * Lookup83: pallet_crowdloan_rewards::pallet::Event */ PalletCrowdloanRewardsEvent: { _enum: { @@ -924,7 +980,7 @@ export default { }, }, /** - * Lookup80: cumulus_pallet_xcmp_queue::pallet::Event + * Lookup84: cumulus_pallet_xcmp_queue::pallet::Event */ CumulusPalletXcmpQueueEvent: { _enum: { @@ -939,7 +995,7 @@ export default { }, }, /** - * Lookup82: xcm::v2::traits::Error + * Lookup86: xcm::v2::traits::Error */ XcmV2TraitsError: { _enum: { @@ -972,7 +1028,7 @@ export default { }, }, /** - * Lookup84: cumulus_pallet_xcm::pallet::Event + * Lookup88: cumulus_pallet_xcm::pallet::Event */ CumulusPalletXcmEvent: { _enum: { @@ -982,7 +1038,7 @@ export default { }, }, /** - * Lookup86: xcm::v2::traits::Outcome + * Lookup90: xcm::v2::traits::Outcome */ XcmV2TraitsOutcome: { _enum: { @@ -992,7 +1048,7 @@ export default { }, }, /** - * Lookup87: cumulus_pallet_dmp_queue::pallet::Event + * Lookup91: cumulus_pallet_dmp_queue::pallet::Event */ CumulusPalletDmpQueueEvent: { _enum: { @@ -1005,7 +1061,7 @@ export default { }, }, /** - * Lookup88: pallet_xcm::pallet::Event + * Lookup92: pallet_xcm::pallet::Event */ PalletXcmEvent: { _enum: { @@ -1028,14 +1084,14 @@ export default { }, }, /** - * Lookup89: xcm::v1::multilocation::MultiLocation + * Lookup93: xcm::v1::multilocation::MultiLocation */ XcmV1MultiLocation: { parents: "u8", interior: "XcmV1MultilocationJunctions", }, /** - * Lookup90: xcm::v1::multilocation::Junctions + * Lookup94: xcm::v1::multilocation::Junctions */ XcmV1MultilocationJunctions: { _enum: { @@ -1051,7 +1107,7 @@ export default { }, }, /** - * Lookup91: xcm::v1::junction::Junction + * Lookup95: xcm::v1::junction::Junction */ XcmV1Junction: { _enum: { @@ -1079,7 +1135,7 @@ export default { }, }, /** - * Lookup93: xcm::v0::junction::NetworkId + * Lookup97: xcm::v0::junction::NetworkId */ XcmV0JunctionNetworkId: { _enum: { @@ -1090,7 +1146,7 @@ export default { }, }, /** - * Lookup96: xcm::v0::junction::BodyId + * Lookup100: xcm::v0::junction::BodyId */ XcmV0JunctionBodyId: { _enum: { @@ -1104,7 +1160,7 @@ export default { }, }, /** - * Lookup97: xcm::v0::junction::BodyPart + * Lookup101: xcm::v0::junction::BodyPart */ XcmV0JunctionBodyPart: { _enum: { @@ -1127,11 +1183,11 @@ export default { }, }, /** - * Lookup98: xcm::v2::Xcm + * Lookup102: xcm::v2::Xcm */ XcmV2Xcm: "Vec", /** - * Lookup100: xcm::v2::Instruction + * Lookup104: xcm::v2::Instruction */ XcmV2Instruction: { _enum: { @@ -1229,18 +1285,18 @@ export default { }, }, /** - * Lookup101: xcm::v1::multiasset::MultiAssets + * Lookup105: xcm::v1::multiasset::MultiAssets */ XcmV1MultiassetMultiAssets: "Vec", /** - * Lookup103: xcm::v1::multiasset::MultiAsset + * Lookup107: xcm::v1::multiasset::MultiAsset */ XcmV1MultiAsset: { id: "XcmV1MultiassetAssetId", fun: "XcmV1MultiassetFungibility", }, /** - * Lookup104: xcm::v1::multiasset::AssetId + * Lookup108: xcm::v1::multiasset::AssetId */ XcmV1MultiassetAssetId: { _enum: { @@ -1249,7 +1305,7 @@ export default { }, }, /** - * Lookup105: xcm::v1::multiasset::Fungibility + * Lookup109: xcm::v1::multiasset::Fungibility */ XcmV1MultiassetFungibility: { _enum: { @@ -1258,7 +1314,7 @@ export default { }, }, /** - * Lookup106: xcm::v1::multiasset::AssetInstance + * Lookup110: xcm::v1::multiasset::AssetInstance */ XcmV1MultiassetAssetInstance: { _enum: { @@ -1272,7 +1328,7 @@ export default { }, }, /** - * Lookup108: xcm::v2::Response + * Lookup112: xcm::v2::Response */ XcmV2Response: { _enum: { @@ -1283,19 +1339,19 @@ export default { }, }, /** - * Lookup111: xcm::v0::OriginKind + * Lookup115: xcm::v0::OriginKind */ XcmV0OriginKind: { _enum: ["Native", "SovereignAccount", "Superuser", "Xcm"], }, /** - * Lookup112: xcm::double_encoded::DoubleEncoded + * Lookup116: xcm::double_encoded::DoubleEncoded */ XcmDoubleEncoded: { encoded: "Bytes", }, /** - * Lookup113: xcm::v1::multiasset::MultiAssetFilter + * Lookup117: xcm::v1::multiasset::MultiAssetFilter */ XcmV1MultiassetMultiAssetFilter: { _enum: { @@ -1304,7 +1360,7 @@ export default { }, }, /** - * Lookup114: xcm::v1::multiasset::WildMultiAsset + * Lookup118: xcm::v1::multiasset::WildMultiAsset */ XcmV1MultiassetWildMultiAsset: { _enum: { @@ -1316,13 +1372,13 @@ export default { }, }, /** - * Lookup115: xcm::v1::multiasset::WildFungibility + * Lookup119: xcm::v1::multiasset::WildFungibility */ XcmV1MultiassetWildFungibility: { _enum: ["Fungible", "NonFungible"], }, /** - * Lookup116: xcm::v2::WeightLimit + * Lookup120: xcm::v2::WeightLimit */ XcmV2WeightLimit: { _enum: { @@ -1331,7 +1387,7 @@ export default { }, }, /** - * Lookup118: xcm::VersionedMultiAssets + * Lookup122: xcm::VersionedMultiAssets */ XcmVersionedMultiAssets: { _enum: { @@ -1340,7 +1396,7 @@ export default { }, }, /** - * Lookup120: xcm::v0::multi_asset::MultiAsset + * Lookup124: xcm::v0::multi_asset::MultiAsset */ XcmV0MultiAsset: { _enum: { @@ -1379,7 +1435,7 @@ export default { }, }, /** - * Lookup121: xcm::v0::multi_location::MultiLocation + * Lookup125: xcm::v0::multi_location::MultiLocation */ XcmV0MultiLocation: { _enum: { @@ -1395,7 +1451,7 @@ export default { }, }, /** - * Lookup122: xcm::v0::junction::Junction + * Lookup126: xcm::v0::junction::Junction */ XcmV0Junction: { _enum: { @@ -1424,7 +1480,7 @@ export default { }, }, /** - * Lookup123: xcm::VersionedMultiLocation + * Lookup127: xcm::VersionedMultiLocation */ XcmVersionedMultiLocation: { _enum: { @@ -1433,7 +1489,7 @@ export default { }, }, /** - * Lookup124: pallet_assets::pallet::Event + * Lookup128: pallet_assets::pallet::Event */ PalletAssetsEvent: { _enum: { @@ -1523,7 +1579,7 @@ export default { }, }, /** - * Lookup125: pallet_asset_manager::pallet::Event + * Lookup129: pallet_asset_manager::pallet::Event */ PalletAssetManagerEvent: { _enum: { @@ -1562,7 +1618,7 @@ export default { }, }, /** - * Lookup126: moonriver_runtime::xcm_config::AssetType + * Lookup130: moonriver_runtime::xcm_config::AssetType */ MoonriverRuntimeXcmConfigAssetType: { _enum: { @@ -1570,7 +1626,7 @@ export default { }, }, /** - * Lookup127: moonriver_runtime::asset_config::AssetRegistrarMetadata + * Lookup131: moonriver_runtime::asset_config::AssetRegistrarMetadata */ MoonriverRuntimeAssetConfigAssetRegistrarMetadata: { name: "Bytes", @@ -1579,7 +1635,7 @@ export default { isFrozen: "bool", }, /** - * Lookup128: orml_xtokens::module::Event + * Lookup132: orml_xtokens::module::Event */ OrmlXtokensModuleEvent: { _enum: { @@ -1592,7 +1648,7 @@ export default { }, }, /** - * Lookup129: xcm_transactor::pallet::Event + * Lookup133: xcm_transactor::pallet::Event */ XcmTransactorEvent: { _enum: { @@ -1607,6 +1663,11 @@ export default { dest: "XcmV1MultiLocation", call: "Bytes", }, + TransactedSigned: { + feePayer: "AccountId20", + dest: "XcmV1MultiLocation", + call: "Bytes", + }, RegisteredDerivative: { accountId: "AccountId20", index: "u16", @@ -1624,18 +1685,25 @@ export default { TransactInfoRemoved: { location: "XcmV1MultiLocation", }, + DestFeePerSecondChanged: { + location: "XcmV1MultiLocation", + feePerSecond: "u128", + }, + DestFeePerSecondRemoved: { + location: "XcmV1MultiLocation", + }, }, }, /** - * Lookup130: xcm_transactor::pallet::RemoteTransactInfoWithMaxWeight + * Lookup134: xcm_transactor::pallet::RemoteTransactInfoWithMaxWeight */ XcmTransactorRemoteTransactInfoWithMaxWeight: { transactExtraWeight: "u64", - feePerSecond: "u128", maxWeight: "u64", + transactExtraWeightSigned: "Option", }, /** - * Lookup132: frame_system::Phase + * Lookup137: frame_system::Phase */ FrameSystemPhase: { _enum: { @@ -1645,14 +1713,14 @@ export default { }, }, /** - * Lookup134: frame_system::LastRuntimeUpgradeInfo + * Lookup139: frame_system::LastRuntimeUpgradeInfo */ FrameSystemLastRuntimeUpgradeInfo: { specVersion: "Compact", specName: "Text", }, /** - * Lookup135: frame_system::pallet::Call + * Lookup140: frame_system::pallet::Call */ FrameSystemCall: { _enum: { @@ -1690,7 +1758,7 @@ export default { }, }, /** - * Lookup139: frame_system::limits::BlockWeights + * Lookup144: frame_system::limits::BlockWeights */ FrameSystemLimitsBlockWeights: { baseBlock: "u64", @@ -1698,7 +1766,7 @@ export default { perClass: "FrameSupportWeightsPerDispatchClassWeightsPerClass", }, /** - * Lookup140: + * Lookup145: * frame_support::weights::PerDispatchClass */ FrameSupportWeightsPerDispatchClassWeightsPerClass: { @@ -1707,7 +1775,7 @@ export default { mandatory: "FrameSystemLimitsWeightsPerClass", }, /** - * Lookup141: frame_system::limits::WeightsPerClass + * Lookup146: frame_system::limits::WeightsPerClass */ FrameSystemLimitsWeightsPerClass: { baseExtrinsic: "u64", @@ -1716,13 +1784,13 @@ export default { reserved: "Option", }, /** - * Lookup143: frame_system::limits::BlockLength + * Lookup147: frame_system::limits::BlockLength */ FrameSystemLimitsBlockLength: { max: "FrameSupportWeightsPerDispatchClassU32", }, /** - * Lookup144: frame_support::weights::PerDispatchClass + * Lookup148: frame_support::weights::PerDispatchClass */ FrameSupportWeightsPerDispatchClassU32: { normal: "u32", @@ -1730,14 +1798,14 @@ export default { mandatory: "u32", }, /** - * Lookup145: frame_support::weights::RuntimeDbWeight + * Lookup149: frame_support::weights::RuntimeDbWeight */ FrameSupportWeightsRuntimeDbWeight: { read: "u64", write: "u64", }, /** - * Lookup146: sp_version::RuntimeVersion + * Lookup150: sp_version::RuntimeVersion */ SpVersionRuntimeVersion: { specName: "Text", @@ -1750,7 +1818,7 @@ export default { stateVersion: "u8", }, /** - * Lookup150: frame_system::pallet::Error + * Lookup154: frame_system::pallet::Error */ FrameSystemError: { _enum: [ @@ -1763,44 +1831,40 @@ export default { ], }, /** - * Lookup151: polkadot_primitives::v1::PersistedValidationData + * Lookup155: polkadot_primitives::v2::PersistedValidationData */ - PolkadotPrimitivesV1PersistedValidationData: { + PolkadotPrimitivesV2PersistedValidationData: { parentHead: "Bytes", relayParentNumber: "u32", relayParentStorageRoot: "H256", maxPovSize: "u32", }, /** - * Lookup154: polkadot_primitives::v1::UpgradeRestriction + * Lookup158: polkadot_primitives::v2::UpgradeRestriction */ - PolkadotPrimitivesV1UpgradeRestriction: { + PolkadotPrimitivesV2UpgradeRestriction: { _enum: ["Present"], }, /** - * Lookup155: sp_trie::storage_proof::StorageProof + * Lookup159: sp_trie::storage_proof::StorageProof */ SpTrieStorageProof: { - trieNodes: "BTreeSet", + trieNodes: "BTreeSet", }, /** - * Lookup156: BTreeSet - */ - BTreeSet: "BTreeSet", - /** - * Lookup157: + * Lookup161: * cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot */ CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { dmqMqcHead: "H256", relayDispatchQueueSize: "(u32,u32)", - ingressChannels: "Vec<(u32,PolkadotPrimitivesV1AbridgedHrmpChannel)>", - egressChannels: "Vec<(u32,PolkadotPrimitivesV1AbridgedHrmpChannel)>", + ingressChannels: "Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>", + egressChannels: "Vec<(u32,PolkadotPrimitivesV2AbridgedHrmpChannel)>", }, /** - * Lookup160: polkadot_primitives::v1::AbridgedHrmpChannel + * Lookup164: polkadot_primitives::v2::AbridgedHrmpChannel */ - PolkadotPrimitivesV1AbridgedHrmpChannel: { + PolkadotPrimitivesV2AbridgedHrmpChannel: { maxCapacity: "u32", maxTotalSize: "u32", maxMessageSize: "u32", @@ -1809,9 +1873,9 @@ export default { mqcHead: "Option", }, /** - * Lookup161: polkadot_primitives::v1::AbridgedHostConfiguration + * Lookup165: polkadot_primitives::v2::AbridgedHostConfiguration */ - PolkadotPrimitivesV1AbridgedHostConfiguration: { + PolkadotPrimitivesV2AbridgedHostConfiguration: { maxCodeSize: "u32", maxHeadDataSize: "u32", maxUpwardQueueCount: "u32", @@ -1823,7 +1887,7 @@ export default { validationUpgradeDelay: "u32", }, /** - * Lookup167: + * Lookup171: * polkadot_core_primitives::OutboundHrmpMessage */ PolkadotCorePrimitivesOutboundHrmpMessage: { @@ -1831,7 +1895,7 @@ export default { data: "Bytes", }, /** - * Lookup168: cumulus_pallet_parachain_system::pallet::Call + * Lookup172: cumulus_pallet_parachain_system::pallet::Call */ CumulusPalletParachainSystemCall: { _enum: { @@ -1850,30 +1914,30 @@ export default { }, }, /** - * Lookup169: cumulus_primitives_parachain_inherent::ParachainInherentData + * Lookup173: cumulus_primitives_parachain_inherent::ParachainInherentData */ CumulusPrimitivesParachainInherentParachainInherentData: { - validationData: "PolkadotPrimitivesV1PersistedValidationData", + validationData: "PolkadotPrimitivesV2PersistedValidationData", relayChainState: "SpTrieStorageProof", downwardMessages: "Vec", horizontalMessages: "BTreeMap>", }, /** - * Lookup171: polkadot_core_primitives::InboundDownwardMessage + * Lookup175: polkadot_core_primitives::InboundDownwardMessage */ PolkadotCorePrimitivesInboundDownwardMessage: { sentAt: "u32", msg: "Bytes", }, /** - * Lookup174: polkadot_core_primitives::InboundHrmpMessage + * Lookup178: polkadot_core_primitives::InboundHrmpMessage */ PolkadotCorePrimitivesInboundHrmpMessage: { sentAt: "u32", data: "Bytes", }, /** - * Lookup177: cumulus_pallet_parachain_system::pallet::Error + * Lookup181: cumulus_pallet_parachain_system::pallet::Error */ CumulusPalletParachainSystemError: { _enum: [ @@ -1888,7 +1952,7 @@ export default { ], }, /** - * Lookup179: pallet_timestamp::pallet::Call + * Lookup183: pallet_timestamp::pallet::Call */ PalletTimestampCall: { _enum: { @@ -1898,7 +1962,7 @@ export default { }, }, /** - * Lookup181: pallet_balances::BalanceLock + * Lookup185: pallet_balances::BalanceLock */ PalletBalancesBalanceLock: { id: "[u8;8]", @@ -1906,26 +1970,26 @@ export default { reasons: "PalletBalancesReasons", }, /** - * Lookup182: pallet_balances::Reasons + * Lookup186: pallet_balances::Reasons */ PalletBalancesReasons: { _enum: ["Fee", "Misc", "All"], }, /** - * Lookup185: pallet_balances::ReserveData + * Lookup189: pallet_balances::ReserveData */ PalletBalancesReserveData: { id: "[u8;4]", amount: "u128", }, /** - * Lookup187: pallet_balances::Releases + * Lookup191: pallet_balances::Releases */ PalletBalancesReleases: { _enum: ["V1_0_0", "V2_0_0"], }, /** - * Lookup188: pallet_balances::pallet::Call + * Lookup192: pallet_balances::pallet::Call */ PalletBalancesCall: { _enum: { @@ -1958,7 +2022,7 @@ export default { }, }, /** - * Lookup189: pallet_balances::pallet::Error + * Lookup193: pallet_balances::pallet::Error */ PalletBalancesError: { _enum: [ @@ -1973,13 +2037,13 @@ export default { ], }, /** - * Lookup191: pallet_transaction_payment::Releases + * Lookup195: pallet_transaction_payment::Releases */ PalletTransactionPaymentReleases: { _enum: ["V1Ancient", "V2"], }, /** - * Lookup193: frame_support::weights::WeightToFeeCoefficient + * Lookup197: frame_support::weights::WeightToFeeCoefficient */ FrameSupportWeightsWeightToFeeCoefficient: { coeffInteger: "u128", @@ -1988,7 +2052,7 @@ export default { degree: "u8", }, /** - * Lookup194: + * Lookup198: * parachain_staking::types::ParachainBondConfig[account::AccountId20](account::AccountId20) */ ParachainStakingParachainBondConfig: { @@ -1996,7 +2060,7 @@ export default { percent: "Percent", }, /** - * Lookup195: parachain_staking::types::RoundInfo + * Lookup199: parachain_staking::types::RoundInfo */ ParachainStakingRoundInfo: { current: "u32", @@ -2004,7 +2068,7 @@ export default { length: "u32", }, /** - * Lookup196: parachain_staking::types::Nominator2 + * Lookup200: parachain_staking::types::Nominator2 */ ParachainStakingNominator2: { delegations: "ParachainStakingSetOrderedSetBond", @@ -2015,25 +2079,25 @@ export default { status: "ParachainStakingDelegatorStatus", }, /** - * Lookup197: + * Lookup201: * parachain_staking::set::OrderedSet> */ ParachainStakingSetOrderedSetBond: "Vec", /** - * Lookup198: parachain_staking::types::Bond + * Lookup202: parachain_staking::types::Bond */ ParachainStakingBond: { owner: "AccountId20", amount: "u128", }, /** - * Lookup200: + * Lookup204: * parachain_staking::set::OrderedSet[account::AccountId20](account::AccountId20) */ ParachainStakingSetOrderedSetAccountId20: "Vec", /** - * Lookup201: parachain_staking::types::DelegatorStatus + * Lookup205: parachain_staking::types::DelegatorStatus */ ParachainStakingDelegatorStatus: { _enum: { @@ -2042,23 +2106,14 @@ export default { }, }, /** - * Lookup202: parachain_staking::types::Delegator + * Lookup206: parachain_staking::types::Delegator */ ParachainStakingDelegator: { id: "AccountId20", delegations: "ParachainStakingSetOrderedSetBond", total: "u128", - requests: "ParachainStakingPendingDelegationRequests", - status: "ParachainStakingDelegatorStatus", - }, - /** - * Lookup203: - * parachain_staking::types::PendingDelegationRequests - */ - ParachainStakingPendingDelegationRequests: { - revocationsCount: "u32", - requests: "BTreeMap", lessTotal: "u128", + status: "ParachainStakingDelegatorStatus", }, /** * Lookup207: parachain_staking::types::CollatorCandidate @@ -2113,14 +2168,24 @@ export default { _enum: ["Full", "Empty", "Partial"], }, /** - * Lookup213: parachain_staking::types::Delegations + * Lookup214: + * parachain_staking::delegation_requests::ScheduledRequest + */ + ParachainStakingDelegationRequestsScheduledRequest: { + delegator: "AccountId20", + whenExecutable: "u32", + action: "ParachainStakingDelegationRequestsDelegationAction", + }, + /** + * Lookup215: parachain_staking::types::Delegations */ ParachainStakingDelegations: { delegations: "Vec", total: "u128", }, /** - * Lookup214: parachain_staking::types::Collator2 + * Lookup216: parachain_staking::types::Collator2 */ ParachainStakingCollator2: { id: "AccountId20", @@ -2133,7 +2198,7 @@ export default { state: "ParachainStakingCollatorStatus", }, /** - * Lookup216: parachain_staking::types::CollatorSnapshot + * Lookup218: parachain_staking::types::CollatorSnapshot */ ParachainStakingCollatorSnapshot: { bond: "u128", @@ -2141,7 +2206,7 @@ export default { total: "u128", }, /** - * Lookup217: parachain_staking::types::DelayedPayout + * Lookup219: parachain_staking::types::DelayedPayout */ ParachainStakingDelayedPayout: { roundIssuance: "u128", @@ -2149,45 +2214,43 @@ export default { collatorCommission: "Perbill", }, /** - * Lookup218: parachain_staking::inflation::InflationInfo + * Lookup220: parachain_staking::inflation::InflationInfo */ ParachainStakingInflationInflationInfo: { - expect: "ParachainStakingInflationRangeU128", - annual: "ParachainStakingInflationRangePerbill", - round: "ParachainStakingInflationRangePerbill", - }, - /** - * Lookup219: parachain_staking::inflation::Range - */ - ParachainStakingInflationRangeU128: { - min: "u128", - ideal: "u128", - max: "u128", - }, - /** - * Lookup220: parachain_staking::inflation::Range - */ - ParachainStakingInflationRangePerbill: { - min: "Perbill", - ideal: "Perbill", - max: "Perbill", + expect: { + min: "u128", + ideal: "u128", + max: "u128", + }, + annual: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, + round: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, }, /** - * Lookup221: parachain_staking::pallet::Call + * Lookup223: parachain_staking::pallet::Call */ ParachainStakingCall: { _enum: { - hotfix_remove_delegation_requests: { - delegators: "Vec", - }, - hotfix_update_candidate_pool_value: { - candidates: "Vec", - }, set_staking_expectations: { - expectations: "ParachainStakingInflationRangeU128", + expectations: { + min: "u128", + ideal: "u128", + max: "u128", + }, }, set_inflation: { - schedule: "ParachainStakingInflationRangePerbill", + schedule: { + min: "Perbill", + ideal: "Perbill", + max: "Perbill", + }, }, set_parachain_bond_account: { _alias: { @@ -2278,7 +2341,7 @@ export default { }, }, /** - * Lookup222: parachain_staking::pallet::Error + * Lookup224: parachain_staking::pallet::Error */ ParachainStakingError: { _enum: [ @@ -2322,23 +2385,24 @@ export default { "PendingDelegationRequestDNE", "PendingDelegationRequestAlreadyExists", "PendingDelegationRequestNotDueYet", - "CannotDelegateLessThanLowestBottomWhenBottomIsFull", + "CannotDelegateLessThanOrEqualToLowestBottomWhenFull", + "PendingDelegationRevoke", ], }, /** - * Lookup223: pallet_author_inherent::pallet::Call + * Lookup225: pallet_author_inherent::pallet::Call */ PalletAuthorInherentCall: { _enum: ["kick_off_authorship_validation"], }, /** - * Lookup224: pallet_author_inherent::pallet::Error + * Lookup226: pallet_author_inherent::pallet::Error */ PalletAuthorInherentError: { _enum: ["AuthorAlreadySet", "NoAccountId", "CannotBeAuthor"], }, /** - * Lookup225: pallet_author_slot_filter::pallet::Call + * Lookup227: pallet_author_slot_filter::pallet::Call */ PalletAuthorSlotFilterCall: { _enum: { @@ -2346,37 +2410,47 @@ export default { _alias: { new_: "new", }, - new_: "Percent", + new_: "u32", }, }, }, /** - * Lookup226: - * pallet_author_mapping::pallet::RegistrationInfo + * Lookup228: pallet_author_mapping::pallet::RegistrationInfo */ PalletAuthorMappingRegistrationInfo: { + _alias: { + keys_: "keys", + }, account: "AccountId20", deposit: "u128", + keys_: "SessionKeysPrimitivesVrfVrfCryptoPublic", }, /** - * Lookup227: pallet_author_mapping::pallet::Call + * Lookup229: pallet_author_mapping::pallet::Call */ PalletAuthorMappingCall: { _enum: { add_association: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", }, update_association: { - oldAuthorId: "NimbusPrimitivesNimbusCryptoPublic", - newAuthorId: "NimbusPrimitivesNimbusCryptoPublic", + oldNimbusId: "NimbusPrimitivesNimbusCryptoPublic", + newNimbusId: "NimbusPrimitivesNimbusCryptoPublic", }, clear_association: { - authorId: "NimbusPrimitivesNimbusCryptoPublic", + nimbusId: "NimbusPrimitivesNimbusCryptoPublic", + }, + remove_keys: "Null", + set_keys: { + _alias: { + keys_: "keys", + }, + keys_: "Bytes", }, }, }, /** - * Lookup228: pallet_author_mapping::pallet::Error + * Lookup230: pallet_author_mapping::pallet::Error */ PalletAuthorMappingError: { _enum: [ @@ -2384,10 +2458,73 @@ export default { "NotYourAssociation", "CannotAffordSecurityDeposit", "AlreadyAssociated", + "OldAuthorIdNotFound", + "WrongKeySize", + "DecodeNimbusFailed", + "DecodeKeysFailed", ], }, /** - * Lookup229: pallet_utility::pallet::Call + * Lookup231: + * pallet_moonbeam_orbiters::types::CollatorPoolInfo[account::AccountId20](account::AccountId20) + */ + PalletMoonbeamOrbitersCollatorPoolInfo: { + orbiters: "Vec", + maybeCurrentOrbiter: "Option", + nextOrbiter: "u32", + }, + /** + * Lookup233: + * pallet_moonbeam_orbiters::types::CurrentOrbiter[account::AccountId20](account::AccountId20) + */ + PalletMoonbeamOrbitersCurrentOrbiter: { + accountId: "AccountId20", + removed: "bool", + }, + /** + * Lookup234: pallet_moonbeam_orbiters::pallet::Call + */ + PalletMoonbeamOrbitersCall: { + _enum: { + collator_add_orbiter: { + orbiter: "AccountId20", + }, + collator_remove_orbiter: { + orbiter: "AccountId20", + }, + orbiter_leave_collator_pool: { + collator: "AccountId20", + }, + orbiter_register: "Null", + orbiter_unregister: { + collatorsPoolCount: "u32", + }, + add_collator: { + collator: "AccountId20", + }, + remove_collator: { + collator: "AccountId20", + }, + }, + }, + /** + * Lookup235: pallet_moonbeam_orbiters::pallet::Error + */ + PalletMoonbeamOrbitersError: { + _enum: [ + "CollatorAlreadyAdded", + "CollatorNotFound", + "CollatorPoolTooLarge", + "CollatorsPoolCountTooLow", + "MinOrbiterDepositNotSet", + "OrbiterAlreadyInPool", + "OrbiterDepositNotFound", + "OrbiterNotFound", + "OrbiterStillInAPool", + ], + }, + /** + * Lookup236: pallet_utility::pallet::Call */ PalletUtilityCall: { _enum: { @@ -2408,7 +2545,7 @@ export default { }, }, /** - * Lookup232: pallet_proxy::pallet::Call + * Lookup239: pallet_proxy::pallet::Call */ PalletProxyCall: { _enum: { @@ -2461,13 +2598,13 @@ export default { }, }, /** - * Lookup234: pallet_maintenance_mode::pallet::Call + * Lookup241: pallet_maintenance_mode::pallet::Call */ PalletMaintenanceModeCall: { _enum: ["enter_maintenance_mode", "resume_normal_operation"], }, /** - * Lookup235: pallet_identity::pallet::Call + * Lookup242: pallet_identity::pallet::Call */ PalletIdentityCall: { _enum: { @@ -2526,7 +2663,7 @@ export default { }, }, /** - * Lookup236: pallet_identity::types::IdentityInfo + * Lookup243: pallet_identity::types::IdentityInfo */ PalletIdentityIdentityInfo: { additional: "Vec<(Data,Data)>", @@ -2540,7 +2677,7 @@ export default { twitter: "Data", }, /** - * Lookup272: pallet_identity::types::BitFlags + * Lookup279: pallet_identity::types::BitFlags */ PalletIdentityBitFlags: { _bitLength: 64, @@ -2554,7 +2691,7 @@ export default { Twitter: 128, }, /** - * Lookup273: pallet_identity::types::IdentityField + * Lookup280: pallet_identity::types::IdentityField */ PalletIdentityIdentityField: { _enum: [ @@ -2690,7 +2827,7 @@ export default { ], }, /** - * Lookup274: pallet_identity::types::Judgement + * Lookup281: pallet_identity::types::Judgement */ PalletIdentityJudgement: { _enum: { @@ -2704,7 +2841,7 @@ export default { }, }, /** - * Lookup275: pallet_evm::pallet::Call + * Lookup282: pallet_evm::pallet::Call */ PalletEvmCall: { _enum: { @@ -2750,7 +2887,7 @@ export default { }, }, /** - * Lookup280: pallet_ethereum::pallet::Call + * Lookup287: pallet_ethereum::pallet::Call */ PalletEthereumCall: { _enum: { @@ -2760,7 +2897,7 @@ export default { }, }, /** - * Lookup281: ethereum::transaction::TransactionV2 + * Lookup288: ethereum::transaction::TransactionV2 */ EthereumTransactionTransactionV2: { _enum: { @@ -2770,7 +2907,7 @@ export default { }, }, /** - * Lookup282: ethereum::transaction::LegacyTransaction + * Lookup289: ethereum::transaction::LegacyTransaction */ EthereumTransactionLegacyTransaction: { nonce: "U256", @@ -2782,7 +2919,7 @@ export default { signature: "EthereumTransactionTransactionSignature", }, /** - * Lookup283: ethereum::transaction::TransactionAction + * Lookup290: ethereum::transaction::TransactionAction */ EthereumTransactionTransactionAction: { _enum: { @@ -2791,7 +2928,7 @@ export default { }, }, /** - * Lookup284: ethereum::transaction::TransactionSignature + * Lookup291: ethereum::transaction::TransactionSignature */ EthereumTransactionTransactionSignature: { v: "u64", @@ -2799,7 +2936,7 @@ export default { s: "H256", }, /** - * Lookup286: ethereum::transaction::EIP2930Transaction + * Lookup293: ethereum::transaction::EIP2930Transaction */ EthereumTransactionEip2930Transaction: { chainId: "u64", @@ -2815,14 +2952,14 @@ export default { s: "H256", }, /** - * Lookup288: ethereum::transaction::AccessListItem + * Lookup295: ethereum::transaction::AccessListItem */ EthereumTransactionAccessListItem: { address: "H160", storageKeys: "Vec", }, /** - * Lookup289: ethereum::transaction::EIP1559Transaction + * Lookup296: ethereum::transaction::EIP1559Transaction */ EthereumTransactionEip1559Transaction: { chainId: "u64", @@ -2839,7 +2976,7 @@ export default { s: "H256", }, /** - * Lookup290: pallet_base_fee::pallet::Call + * Lookup297: pallet_base_fee::pallet::Call */ PalletBaseFeeCall: { _enum: { @@ -2855,7 +2992,7 @@ export default { }, }, /** - * Lookup291: pallet_scheduler::pallet::Call + * Lookup298: pallet_scheduler::pallet::Call */ PalletSchedulerCall: { _enum: { @@ -2895,7 +3032,7 @@ export default { }, }, /** - * Lookup293: + * Lookup300: * frame_support::traits::schedule::MaybeHashed */ @@ -2906,7 +3043,7 @@ export default { }, }, /** - * Lookup294: pallet_democracy::pallet::Call + * Lookup301: pallet_democracy::pallet::Call */ PalletDemocracyCall: { _enum: { @@ -2995,13 +3132,13 @@ export default { }, }, /** - * Lookup295: pallet_democracy::conviction::Conviction + * Lookup302: pallet_democracy::conviction::Conviction */ PalletDemocracyConviction: { _enum: ["None", "Locked1x", "Locked2x", "Locked3x", "Locked4x", "Locked5x", "Locked6x"], }, /** - * Lookup297: pallet_collective::pallet::Call + * Lookup304: pallet_collective::pallet::Call */ PalletCollectiveCall: { _enum: { @@ -3036,7 +3173,7 @@ export default { }, }, /** - * Lookup299: pallet_treasury::pallet::Call + * Lookup306: pallet_treasury::pallet::Call */ PalletTreasuryCall: { _enum: { @@ -3053,7 +3190,7 @@ export default { }, }, /** - * Lookup300: pallet_crowdloan_rewards::pallet::Call + * Lookup307: pallet_crowdloan_rewards::pallet::Call */ PalletCrowdloanRewardsCall: { _enum: { @@ -3080,7 +3217,7 @@ export default { }, }, /** - * Lookup301: sp_runtime::MultiSignature + * Lookup308: sp_runtime::MultiSignature */ SpRuntimeMultiSignature: { _enum: { @@ -3090,19 +3227,19 @@ export default { }, }, /** - * Lookup302: sp_core::ed25519::Signature + * Lookup309: sp_core::ed25519::Signature */ SpCoreEd25519Signature: "[u8;64]", /** - * Lookup304: sp_core::sr25519::Signature + * Lookup311: sp_core::sr25519::Signature */ SpCoreSr25519Signature: "[u8;64]", /** - * Lookup305: sp_core::ecdsa::Signature + * Lookup312: sp_core::ecdsa::Signature */ SpCoreEcdsaSignature: "[u8;65]", /** - * Lookup311: cumulus_pallet_dmp_queue::pallet::Call + * Lookup318: cumulus_pallet_dmp_queue::pallet::Call */ CumulusPalletDmpQueueCall: { _enum: { @@ -3113,7 +3250,7 @@ export default { }, }, /** - * Lookup312: pallet_xcm::pallet::Call + * Lookup319: pallet_xcm::pallet::Call */ PalletXcmCall: { _enum: { @@ -3167,7 +3304,7 @@ export default { }, }, /** - * Lookup313: xcm::VersionedXcm + * Lookup320: xcm::VersionedXcm */ XcmVersionedXcm: { _enum: { @@ -3177,7 +3314,7 @@ export default { }, }, /** - * Lookup314: xcm::v0::Xcm + * Lookup321: xcm::v0::Xcm */ XcmV0Xcm: { _enum: { @@ -3231,7 +3368,7 @@ export default { }, }, /** - * Lookup316: xcm::v0::order::Order + * Lookup323: xcm::v0::order::Order */ XcmV0Order: { _enum: { @@ -3274,7 +3411,7 @@ export default { }, }, /** - * Lookup318: xcm::v0::Response + * Lookup325: xcm::v0::Response */ XcmV0Response: { _enum: { @@ -3282,7 +3419,7 @@ export default { }, }, /** - * Lookup319: xcm::v1::Xcm + * Lookup326: xcm::v1::Xcm */ XcmV1Xcm: { _enum: { @@ -3341,7 +3478,7 @@ export default { }, }, /** - * Lookup321: xcm::v1::order::Order + * Lookup328: xcm::v1::order::Order */ XcmV1Order: { _enum: { @@ -3386,7 +3523,7 @@ export default { }, }, /** - * Lookup323: xcm::v1::Response + * Lookup330: xcm::v1::Response */ XcmV1Response: { _enum: { @@ -3395,7 +3532,7 @@ export default { }, }, /** - * Lookup337: pallet_assets::pallet::Call + * Lookup344: pallet_assets::pallet::Call */ PalletAssetsCall: { _enum: { @@ -3523,7 +3660,7 @@ export default { }, }, /** - * Lookup338: pallet_assets::types::DestroyWitness + * Lookup345: pallet_assets::types::DestroyWitness */ PalletAssetsDestroyWitness: { accounts: "Compact", @@ -3531,7 +3668,7 @@ export default { approvals: "Compact", }, /** - * Lookup339: pallet_asset_manager::pallet::Call + * Lookup346: pallet_asset_manager::pallet::Call */ PalletAssetManagerCall: { _enum: { @@ -3577,7 +3714,7 @@ export default { }, }, /** - * Lookup340: orml_xtokens::module::Call + * Lookup347: orml_xtokens::module::Call */ OrmlXtokensModuleCall: { _enum: { @@ -3620,7 +3757,7 @@ export default { }, }, /** - * Lookup341: moonriver_runtime::xcm_config::CurrencyId + * Lookup348: moonriver_runtime::xcm_config::CurrencyId */ MoonriverRuntimeXcmConfigCurrencyId: { _enum: { @@ -3630,7 +3767,7 @@ export default { }, }, /** - * Lookup342: xcm::VersionedMultiAsset + * Lookup349: xcm::VersionedMultiAsset */ XcmVersionedMultiAsset: { _enum: { @@ -3639,7 +3776,7 @@ export default { }, }, /** - * Lookup345: xcm_transactor::pallet::Call + * Lookup352: xcm_transactor::pallet::Call */ XcmTransactorCall: { _enum: { @@ -3675,22 +3812,41 @@ export default { set_transact_info: { location: "XcmVersionedMultiLocation", transactExtraWeight: "u64", - feePerSecond: "u128", maxWeight: "u64", + transactExtraWeightSigned: "Option", }, remove_transact_info: { location: "XcmVersionedMultiLocation", }, + transact_through_signed: { + dest: "XcmVersionedMultiLocation", + feeCurrencyId: "MoonriverRuntimeXcmConfigCurrencyId", + destWeight: "u64", + call: "Bytes", + }, + transact_through_signed_multilocation: { + dest: "XcmVersionedMultiLocation", + feeLocation: "XcmVersionedMultiLocation", + destWeight: "u64", + call: "Bytes", + }, + set_fee_per_second: { + assetLocation: "XcmVersionedMultiLocation", + feePerSecond: "u128", + }, + remove_fee_per_second: { + assetLocation: "XcmVersionedMultiLocation", + }, }, }, /** - * Lookup346: moonriver_runtime::xcm_config::Transactors + * Lookup353: moonriver_runtime::xcm_config::Transactors */ MoonriverRuntimeXcmConfigTransactors: { _enum: ["Relay"], }, /** - * Lookup348: moonriver_runtime::OriginCaller + * Lookup355: moonriver_runtime::OriginCaller */ MoonriverRuntimeOriginCaller: { _enum: { @@ -3801,7 +3957,7 @@ export default { }, }, /** - * Lookup349: + * Lookup356: * frame_support::dispatch::RawOrigin[account::AccountId20](account::AccountId20) */ FrameSupportDispatchRawOrigin: { @@ -3812,7 +3968,7 @@ export default { }, }, /** - * Lookup350: pallet_ethereum::RawOrigin + * Lookup357: pallet_ethereum::RawOrigin */ PalletEthereumRawOrigin: { _enum: { @@ -3820,7 +3976,7 @@ export default { }, }, /** - * Lookup351: pallet_collective::RawOrigin + * Lookup358: pallet_collective::RawOrigin */ PalletCollectiveRawOrigin: { _enum: { @@ -3830,7 +3986,7 @@ export default { }, }, /** - * Lookup353: cumulus_pallet_xcm::pallet::Origin + * Lookup360: cumulus_pallet_xcm::pallet::Origin */ CumulusPalletXcmOrigin: { _enum: { @@ -3839,7 +3995,7 @@ export default { }, }, /** - * Lookup354: pallet_xcm::pallet::Origin + * Lookup361: pallet_xcm::pallet::Origin */ PalletXcmOrigin: { _enum: { @@ -3848,17 +4004,17 @@ export default { }, }, /** - * Lookup355: sp_core::Void + * Lookup362: sp_core::Void */ SpCoreVoid: "Null", /** - * Lookup356: pallet_utility::pallet::Error + * Lookup363: pallet_utility::pallet::Error */ PalletUtilityError: { _enum: ["TooManyCalls"], }, /** - * Lookup359: pallet_proxy::ProxyDefinition */ PalletProxyProxyDefinition: { @@ -3867,7 +4023,7 @@ export default { delay: "u32", }, /** - * Lookup363: pallet_proxy::Announcement */ PalletProxyAnnouncement: { @@ -3876,7 +4032,7 @@ export default { height: "u32", }, /** - * Lookup365: pallet_proxy::pallet::Error + * Lookup372: pallet_proxy::pallet::Error */ PalletProxyError: { _enum: [ @@ -3891,13 +4047,13 @@ export default { ], }, /** - * Lookup366: pallet_maintenance_mode::pallet::Error + * Lookup373: pallet_maintenance_mode::pallet::Error */ PalletMaintenanceModeError: { _enum: ["AlreadyInMaintenanceMode", "NotInMaintenanceMode"], }, /** - * Lookup367: pallet_identity::types::Registration */ PalletIdentityRegistration: { @@ -3906,7 +4062,7 @@ export default { info: "PalletIdentityIdentityInfo", }, /** - * Lookup375: pallet_identity::types::RegistrarInfo + * Lookup382: pallet_identity::types::RegistrarInfo */ PalletIdentityRegistrarInfo: { account: "AccountId20", @@ -3914,7 +4070,7 @@ export default { fields: "PalletIdentityBitFlags", }, /** - * Lookup377: pallet_identity::pallet::Error + * Lookup384: pallet_identity::pallet::Error */ PalletIdentityError: { _enum: [ @@ -3937,7 +4093,7 @@ export default { ], }, /** - * Lookup379: pallet_evm::pallet::Error + * Lookup386: pallet_evm::pallet::Error */ PalletEvmError: { _enum: [ @@ -3951,7 +4107,7 @@ export default { ], }, /** - * Lookup382: fp_rpc::TransactionStatus + * Lookup389: fp_rpc::TransactionStatus */ FpRpcTransactionStatus: { transactionHash: "H256", @@ -3963,11 +4119,11 @@ export default { logsBloom: "EthbloomBloom", }, /** - * Lookup385: ethbloom::Bloom + * Lookup392: ethbloom::Bloom */ EthbloomBloom: "[u8;256]", /** - * Lookup387: ethereum::receipt::ReceiptV3 + * Lookup394: ethereum::receipt::ReceiptV3 */ EthereumReceiptReceiptV3: { _enum: { @@ -3977,7 +4133,7 @@ export default { }, }, /** - * Lookup388: ethereum::receipt::EIP658ReceiptData + * Lookup395: ethereum::receipt::EIP658ReceiptData */ EthereumReceiptEip658ReceiptData: { statusCode: "u8", @@ -3986,7 +4142,7 @@ export default { logs: "Vec", }, /** - * Lookup389: + * Lookup396: * ethereum::block::Block[ethereum::transaction::TransactionV2](ethereum::transaction::TransactionV2) */ EthereumBlock: { @@ -3995,7 +4151,7 @@ export default { ommers: "Vec", }, /** - * Lookup390: ethereum::header::Header + * Lookup397: ethereum::header::Header */ EthereumHeader: { parentHash: "H256", @@ -4015,17 +4171,17 @@ export default { nonce: "EthereumTypesHashH64", }, /** - * Lookup391: ethereum_types::hash::H64 + * Lookup398: ethereum_types::hash::H64 */ EthereumTypesHashH64: "[u8;8]", /** - * Lookup396: pallet_ethereum::pallet::Error + * Lookup403: pallet_ethereum::pallet::Error */ PalletEthereumError: { _enum: ["InvalidSignature", "PreLogExists"], }, /** - * Lookup399: + * Lookup406: * pallet_scheduler::ScheduledV3, BlockNumber, moonriver_runtime::OriginCaller, * account::AccountId20> @@ -4038,13 +4194,13 @@ export default { origin: "MoonriverRuntimeOriginCaller", }, /** - * Lookup400: pallet_scheduler::pallet::Error + * Lookup407: pallet_scheduler::pallet::Error */ PalletSchedulerError: { _enum: ["FailedToSchedule", "NotFound", "TargetBlockNumberInPast", "RescheduleNoChange"], }, /** - * Lookup404: pallet_democracy::PreimageStatus */ PalletDemocracyPreimageStatus: { @@ -4060,7 +4216,7 @@ export default { }, }, /** - * Lookup405: pallet_democracy::types::ReferendumInfo */ PalletDemocracyReferendumInfo: { @@ -4073,7 +4229,7 @@ export default { }, }, /** - * Lookup406: pallet_democracy::types::ReferendumStatus */ PalletDemocracyReferendumStatus: { @@ -4084,7 +4240,7 @@ export default { tally: "PalletDemocracyTally", }, /** - * Lookup407: pallet_democracy::types::Tally + * Lookup414: pallet_democracy::types::Tally */ PalletDemocracyTally: { ayes: "u128", @@ -4092,7 +4248,7 @@ export default { turnout: "u128", }, /** - * Lookup408: pallet_democracy::vote::Voting + * Lookup415: pallet_democracy::vote::Voting */ PalletDemocracyVoteVoting: { _enum: { @@ -4111,24 +4267,24 @@ export default { }, }, /** - * Lookup411: pallet_democracy::types::Delegations + * Lookup418: pallet_democracy::types::Delegations */ PalletDemocracyDelegations: { votes: "u128", capital: "u128", }, /** - * Lookup412: pallet_democracy::vote::PriorLock + * Lookup419: pallet_democracy::vote::PriorLock */ PalletDemocracyVotePriorLock: "(u32,u128)", /** - * Lookup415: pallet_democracy::Releases + * Lookup422: pallet_democracy::Releases */ PalletDemocracyReleases: { _enum: ["V1"], }, /** - * Lookup416: pallet_democracy::pallet::Error + * Lookup423: pallet_democracy::pallet::Error */ PalletDemocracyError: { _enum: [ @@ -4163,7 +4319,7 @@ export default { ], }, /** - * Lookup418: pallet_collective::Votes + * Lookup425: pallet_collective::Votes */ PalletCollectiveVotes: { index: "u32", @@ -4173,7 +4329,7 @@ export default { end: "u32", }, /** - * Lookup419: pallet_collective::pallet::Error + * Lookup426: pallet_collective::pallet::Error */ PalletCollectiveError: { _enum: [ @@ -4190,7 +4346,7 @@ export default { ], }, /** - * Lookup421: pallet_treasury::Proposal + * Lookup428: pallet_treasury::Proposal */ PalletTreasuryProposal: { proposer: "AccountId20", @@ -4199,17 +4355,17 @@ export default { bond: "u128", }, /** - * Lookup425: frame_support::PalletId + * Lookup432: frame_support::PalletId */ FrameSupportPalletId: "[u8;8]", /** - * Lookup426: pallet_treasury::pallet::Error + * Lookup433: pallet_treasury::pallet::Error */ PalletTreasuryError: { _enum: ["InsufficientProposersBalance", "InvalidIndex", "TooManyApprovals"], }, /** - * Lookup427: pallet_crowdloan_rewards::pallet::RewardInfo + * Lookup434: pallet_crowdloan_rewards::pallet::RewardInfo */ PalletCrowdloanRewardsRewardInfo: { totalReward: "u128", @@ -4217,7 +4373,7 @@ export default { contributedRelayAddresses: "Vec<[u8;32]>", }, /** - * Lookup429: pallet_crowdloan_rewards::pallet::Error + * Lookup436: pallet_crowdloan_rewards::pallet::Error */ PalletCrowdloanRewardsError: { _enum: [ @@ -4239,7 +4395,7 @@ export default { ], }, /** - * Lookup431: cumulus_pallet_xcmp_queue::InboundChannelDetails + * Lookup438: cumulus_pallet_xcmp_queue::InboundChannelDetails */ CumulusPalletXcmpQueueInboundChannelDetails: { sender: "u32", @@ -4247,19 +4403,19 @@ export default { messageMetadata: "Vec<(u32,PolkadotParachainPrimitivesXcmpMessageFormat)>", }, /** - * Lookup432: cumulus_pallet_xcmp_queue::InboundState + * Lookup439: cumulus_pallet_xcmp_queue::InboundState */ CumulusPalletXcmpQueueInboundState: { _enum: ["Ok", "Suspended"], }, /** - * Lookup435: polkadot_parachain::primitives::XcmpMessageFormat + * Lookup442: polkadot_parachain::primitives::XcmpMessageFormat */ PolkadotParachainPrimitivesXcmpMessageFormat: { _enum: ["ConcatenatedVersionedXcm", "ConcatenatedEncodedBlob", "Signals"], }, /** - * Lookup438: cumulus_pallet_xcmp_queue::OutboundChannelDetails + * Lookup445: cumulus_pallet_xcmp_queue::OutboundChannelDetails */ CumulusPalletXcmpQueueOutboundChannelDetails: { recipient: "u32", @@ -4269,13 +4425,13 @@ export default { lastIndex: "u16", }, /** - * Lookup439: cumulus_pallet_xcmp_queue::OutboundState + * Lookup446: cumulus_pallet_xcmp_queue::OutboundState */ CumulusPalletXcmpQueueOutboundState: { _enum: ["Ok", "Suspended"], }, /** - * Lookup441: cumulus_pallet_xcmp_queue::QueueConfigData + * Lookup448: cumulus_pallet_xcmp_queue::QueueConfigData */ CumulusPalletXcmpQueueQueueConfigData: { suspendThreshold: "u32", @@ -4286,23 +4442,23 @@ export default { xcmpMaxIndividualWeight: "u64", }, /** - * Lookup443: cumulus_pallet_xcmp_queue::pallet::Error + * Lookup450: cumulus_pallet_xcmp_queue::pallet::Error */ CumulusPalletXcmpQueueError: { _enum: ["FailedToSend", "BadXcmOrigin", "BadXcm", "BadOverweightIndex", "WeightOverLimit"], }, /** - * Lookup444: cumulus_pallet_xcm::pallet::Error + * Lookup451: cumulus_pallet_xcm::pallet::Error */ CumulusPalletXcmError: "Null", /** - * Lookup445: cumulus_pallet_dmp_queue::ConfigData + * Lookup452: cumulus_pallet_dmp_queue::ConfigData */ CumulusPalletDmpQueueConfigData: { maxIndividual: "u64", }, /** - * Lookup446: cumulus_pallet_dmp_queue::PageIndexData + * Lookup453: cumulus_pallet_dmp_queue::PageIndexData */ CumulusPalletDmpQueuePageIndexData: { beginUsed: "u32", @@ -4310,13 +4466,13 @@ export default { overweightCount: "u64", }, /** - * Lookup449: cumulus_pallet_dmp_queue::pallet::Error + * Lookup456: cumulus_pallet_dmp_queue::pallet::Error */ CumulusPalletDmpQueueError: { _enum: ["Unknown", "OverLimit"], }, /** - * Lookup450: pallet_xcm::pallet::QueryStatus + * Lookup457: pallet_xcm::pallet::QueryStatus */ PalletXcmQueryStatus: { _enum: { @@ -4336,7 +4492,7 @@ export default { }, }, /** - * Lookup453: xcm::VersionedResponse + * Lookup460: xcm::VersionedResponse */ XcmVersionedResponse: { _enum: { @@ -4346,7 +4502,7 @@ export default { }, }, /** - * Lookup459: pallet_xcm::pallet::VersionMigrationStage + * Lookup466: pallet_xcm::pallet::VersionMigrationStage */ PalletXcmVersionMigrationStage: { _enum: { @@ -4357,7 +4513,7 @@ export default { }, }, /** - * Lookup460: pallet_xcm::pallet::Error + * Lookup467: pallet_xcm::pallet::Error */ PalletXcmError: { _enum: [ @@ -4377,7 +4533,7 @@ export default { ], }, /** - * Lookup461: pallet_assets::types::AssetDetails */ PalletAssetsAssetDetails: { @@ -4395,7 +4551,7 @@ export default { isFrozen: "bool", }, /** - * Lookup463: pallet_assets::types::AssetAccount + * Lookup470: pallet_assets::types::AssetAccount */ PalletAssetsAssetAccount: { balance: "u128", @@ -4404,7 +4560,7 @@ export default { extra: "Null", }, /** - * Lookup464: pallet_assets::types::ExistenceReason + * Lookup471: pallet_assets::types::ExistenceReason */ PalletAssetsExistenceReason: { _enum: { @@ -4415,14 +4571,14 @@ export default { }, }, /** - * Lookup466: pallet_assets::types::Approval + * Lookup473: pallet_assets::types::Approval */ PalletAssetsApproval: { amount: "u128", deposit: "u128", }, /** - * Lookup467: pallet_assets::types::AssetMetadata> */ PalletAssetsAssetMetadata: { @@ -4433,7 +4589,7 @@ export default { isFrozen: "bool", }, /** - * Lookup469: pallet_assets::pallet::Error + * Lookup476: pallet_assets::pallet::Error */ PalletAssetsError: { _enum: [ @@ -4455,14 +4611,14 @@ export default { ], }, /** - * Lookup470: pallet_asset_manager::pallet::AssetInfo + * Lookup477: pallet_asset_manager::pallet::AssetInfo */ PalletAssetManagerAssetInfo: { creator: "AccountId20", deposit: "u128", }, /** - * Lookup472: pallet_asset_manager::pallet::Error + * Lookup479: pallet_asset_manager::pallet::Error */ PalletAssetManagerError: { _enum: [ @@ -4477,7 +4633,7 @@ export default { ], }, /** - * Lookup473: orml_xtokens::module::Error + * Lookup480: orml_xtokens::module::Error */ OrmlXtokensModuleError: { _enum: [ @@ -4502,7 +4658,7 @@ export default { ], }, /** - * Lookup474: xcm_transactor::pallet::Error + * Lookup481: xcm_transactor::pallet::Error */ XcmTransactorError: { _enum: [ @@ -4526,38 +4682,41 @@ export default { "BadVersion", "MaxWeightTransactReached", "UnableToWithdrawAsset", + "FeePerSecondNotSet", + "SignedTransactNotAllowedForDestination", + "FailedMultiLocationToJunction", ], }, /** - * Lookup477: account::EthereumSignature + * Lookup484: account::EthereumSignature */ AccountEthereumSignature: "SpCoreEcdsaSignature", /** - * Lookup479: frame_system::extensions::check_spec_version::CheckSpecVersion + * Lookup486: frame_system::extensions::check_spec_version::CheckSpecVersion */ FrameSystemExtensionsCheckSpecVersion: "Null", /** - * Lookup480: frame_system::extensions::check_tx_version::CheckTxVersion + * Lookup487: frame_system::extensions::check_tx_version::CheckTxVersion */ FrameSystemExtensionsCheckTxVersion: "Null", /** - * Lookup481: frame_system::extensions::check_genesis::CheckGenesis + * Lookup488: frame_system::extensions::check_genesis::CheckGenesis */ FrameSystemExtensionsCheckGenesis: "Null", /** - * Lookup484: frame_system::extensions::check_nonce::CheckNonce + * Lookup491: frame_system::extensions::check_nonce::CheckNonce */ FrameSystemExtensionsCheckNonce: "Compact", /** - * Lookup485: frame_system::extensions::check_weight::CheckWeight + * Lookup492: frame_system::extensions::check_weight::CheckWeight */ FrameSystemExtensionsCheckWeight: "Null", /** - * Lookup486: pallet_transaction_payment::ChargeTransactionPayment + * Lookup493: pallet_transaction_payment::ChargeTransactionPayment */ PalletTransactionPaymentChargeTransactionPayment: "Compact", /** - * Lookup488: moonriver_runtime::Runtime + * Lookup495: moonriver_runtime::Runtime */ MoonriverRuntimeRuntime: "Null", }; diff --git a/typescript-api/src/moonriver/interfaces/registry.ts b/typescript-api/src/moonriver/interfaces/registry.ts index b4e590daba..d32d740e7f 100644 --- a/typescript-api/src/moonriver/interfaces/registry.ts +++ b/typescript-api/src/moonriver/interfaces/registry.ts @@ -3,7 +3,6 @@ import type { AccountEthereumSignature, - BTreeSet, CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, @@ -157,6 +156,11 @@ import type { PalletMaintenanceModeError, PalletMaintenanceModeEvent, PalletMigrationsEvent, + PalletMoonbeamOrbitersCall, + PalletMoonbeamOrbitersCollatorPoolInfo, + PalletMoonbeamOrbitersCurrentOrbiter, + PalletMoonbeamOrbitersError, + PalletMoonbeamOrbitersEvent, PalletProxyAnnouncement, PalletProxyCall, PalletProxyError, @@ -192,8 +196,9 @@ import type { ParachainStakingCollatorSnapshot, ParachainStakingCollatorStatus, ParachainStakingDelayedPayout, - ParachainStakingDelegationChange, - ParachainStakingDelegationRequest, + ParachainStakingDelegationRequestsCancelledScheduledRequest, + ParachainStakingDelegationRequestsDelegationAction, + ParachainStakingDelegationRequestsScheduledRequest, ParachainStakingDelegations, ParachainStakingDelegator, ParachainStakingDelegatorAdded, @@ -201,11 +206,8 @@ import type { ParachainStakingError, ParachainStakingEvent, ParachainStakingInflationInflationInfo, - ParachainStakingInflationRangePerbill, - ParachainStakingInflationRangeU128, ParachainStakingNominator2, ParachainStakingParachainBondConfig, - ParachainStakingPendingDelegationRequests, ParachainStakingRoundInfo, ParachainStakingSetOrderedSetAccountId20, ParachainStakingSetOrderedSetBond, @@ -213,10 +215,11 @@ import type { PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, - PolkadotPrimitivesV1AbridgedHostConfiguration, - PolkadotPrimitivesV1AbridgedHrmpChannel, - PolkadotPrimitivesV1PersistedValidationData, - PolkadotPrimitivesV1UpgradeRestriction, + PolkadotPrimitivesV2AbridgedHostConfiguration, + PolkadotPrimitivesV2AbridgedHrmpChannel, + PolkadotPrimitivesV2PersistedValidationData, + PolkadotPrimitivesV2UpgradeRestriction, + SessionKeysPrimitivesVrfVrfCryptoPublic, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Public, @@ -229,6 +232,7 @@ import type { SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, + SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, XcmDoubleEncoded, @@ -276,7 +280,6 @@ import type { declare module "@polkadot/types/types/registry" { export interface InterfaceTypes { AccountEthereumSignature: AccountEthereumSignature; - BTreeSet: BTreeSet; CumulusPalletDmpQueueCall: CumulusPalletDmpQueueCall; CumulusPalletDmpQueueConfigData: CumulusPalletDmpQueueConfigData; CumulusPalletDmpQueueError: CumulusPalletDmpQueueError; @@ -430,6 +433,11 @@ declare module "@polkadot/types/types/registry" { PalletMaintenanceModeError: PalletMaintenanceModeError; PalletMaintenanceModeEvent: PalletMaintenanceModeEvent; PalletMigrationsEvent: PalletMigrationsEvent; + PalletMoonbeamOrbitersCall: PalletMoonbeamOrbitersCall; + PalletMoonbeamOrbitersCollatorPoolInfo: PalletMoonbeamOrbitersCollatorPoolInfo; + PalletMoonbeamOrbitersCurrentOrbiter: PalletMoonbeamOrbitersCurrentOrbiter; + PalletMoonbeamOrbitersError: PalletMoonbeamOrbitersError; + PalletMoonbeamOrbitersEvent: PalletMoonbeamOrbitersEvent; PalletProxyAnnouncement: PalletProxyAnnouncement; PalletProxyCall: PalletProxyCall; PalletProxyError: PalletProxyError; @@ -465,8 +473,9 @@ declare module "@polkadot/types/types/registry" { ParachainStakingCollatorSnapshot: ParachainStakingCollatorSnapshot; ParachainStakingCollatorStatus: ParachainStakingCollatorStatus; ParachainStakingDelayedPayout: ParachainStakingDelayedPayout; - ParachainStakingDelegationChange: ParachainStakingDelegationChange; - ParachainStakingDelegationRequest: ParachainStakingDelegationRequest; + ParachainStakingDelegationRequestsCancelledScheduledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest; + ParachainStakingDelegationRequestsDelegationAction: ParachainStakingDelegationRequestsDelegationAction; + ParachainStakingDelegationRequestsScheduledRequest: ParachainStakingDelegationRequestsScheduledRequest; ParachainStakingDelegations: ParachainStakingDelegations; ParachainStakingDelegator: ParachainStakingDelegator; ParachainStakingDelegatorAdded: ParachainStakingDelegatorAdded; @@ -474,11 +483,8 @@ declare module "@polkadot/types/types/registry" { ParachainStakingError: ParachainStakingError; ParachainStakingEvent: ParachainStakingEvent; ParachainStakingInflationInflationInfo: ParachainStakingInflationInflationInfo; - ParachainStakingInflationRangePerbill: ParachainStakingInflationRangePerbill; - ParachainStakingInflationRangeU128: ParachainStakingInflationRangeU128; ParachainStakingNominator2: ParachainStakingNominator2; ParachainStakingParachainBondConfig: ParachainStakingParachainBondConfig; - ParachainStakingPendingDelegationRequests: ParachainStakingPendingDelegationRequests; ParachainStakingRoundInfo: ParachainStakingRoundInfo; ParachainStakingSetOrderedSetAccountId20: ParachainStakingSetOrderedSetAccountId20; ParachainStakingSetOrderedSetBond: ParachainStakingSetOrderedSetBond; @@ -486,10 +492,11 @@ declare module "@polkadot/types/types/registry" { PolkadotCorePrimitivesInboundHrmpMessage: PolkadotCorePrimitivesInboundHrmpMessage; PolkadotCorePrimitivesOutboundHrmpMessage: PolkadotCorePrimitivesOutboundHrmpMessage; PolkadotParachainPrimitivesXcmpMessageFormat: PolkadotParachainPrimitivesXcmpMessageFormat; - PolkadotPrimitivesV1AbridgedHostConfiguration: PolkadotPrimitivesV1AbridgedHostConfiguration; - PolkadotPrimitivesV1AbridgedHrmpChannel: PolkadotPrimitivesV1AbridgedHrmpChannel; - PolkadotPrimitivesV1PersistedValidationData: PolkadotPrimitivesV1PersistedValidationData; - PolkadotPrimitivesV1UpgradeRestriction: PolkadotPrimitivesV1UpgradeRestriction; + PolkadotPrimitivesV2AbridgedHostConfiguration: PolkadotPrimitivesV2AbridgedHostConfiguration; + PolkadotPrimitivesV2AbridgedHrmpChannel: PolkadotPrimitivesV2AbridgedHrmpChannel; + PolkadotPrimitivesV2PersistedValidationData: PolkadotPrimitivesV2PersistedValidationData; + PolkadotPrimitivesV2UpgradeRestriction: PolkadotPrimitivesV2UpgradeRestriction; + SessionKeysPrimitivesVrfVrfCryptoPublic: SessionKeysPrimitivesVrfVrfCryptoPublic; SpCoreEcdsaSignature: SpCoreEcdsaSignature; SpCoreEd25519Signature: SpCoreEd25519Signature; SpCoreSr25519Public: SpCoreSr25519Public; @@ -502,6 +509,7 @@ declare module "@polkadot/types/types/registry" { SpRuntimeModuleError: SpRuntimeModuleError; SpRuntimeMultiSignature: SpRuntimeMultiSignature; SpRuntimeTokenError: SpRuntimeTokenError; + SpRuntimeTransactionalError: SpRuntimeTransactionalError; SpTrieStorageProof: SpTrieStorageProof; SpVersionRuntimeVersion: SpVersionRuntimeVersion; XcmDoubleEncoded: XcmDoubleEncoded; diff --git a/typescript-api/src/moonriver/interfaces/types-lookup.ts b/typescript-api/src/moonriver/interfaces/types-lookup.ts index 95e0dc186b..3464d88e45 100644 --- a/typescript-api/src/moonriver/interfaces/types-lookup.ts +++ b/typescript-api/src/moonriver/interfaces/types-lookup.ts @@ -5,7 +5,7 @@ declare module "@polkadot/types/lookup" { import type { Data } from "@polkadot/types"; import type { BTreeMap, - BTreeSet as BTreeSetType, + BTreeSet, Bytes, Compact, Enum, @@ -180,6 +180,8 @@ declare module "@polkadot/types/lookup" { readonly asToken: SpRuntimeTokenError; readonly isArithmetic: boolean; readonly asArithmetic: SpRuntimeArithmeticError; + readonly isTransactional: boolean; + readonly asTransactional: SpRuntimeTransactionalError; readonly type: | "Other" | "CannotLookup" @@ -189,7 +191,8 @@ declare module "@polkadot/types/lookup" { | "NoProviders" | "TooManyConsumers" | "Token" - | "Arithmetic"; + | "Arithmetic" + | "Transactional"; } /** @@ -197,7 +200,7 @@ declare module "@polkadot/types/lookup" { */ export interface SpRuntimeModuleError extends Struct { readonly index: u8; - readonly error: u8; + readonly error: U8aFixed; } /** @@ -232,7 +235,16 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemEvent (27) + * @name SpRuntimeTransactionalError (27) + */ + export interface SpRuntimeTransactionalError extends Enum { + readonly isLimitReached: boolean; + readonly isNoLayer: boolean; + readonly type: "LimitReached" | "NoLayer"; + } + + /** + * @name CumulusPalletParachainSystemEvent (28) */ export interface CumulusPalletParachainSystemEvent extends Enum { readonly isValidationFunctionStored: boolean; @@ -255,7 +267,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesEvent (28) + * @name PalletBalancesEvent (29) */ export interface PalletBalancesEvent extends Enum { readonly isEndowed: boolean; @@ -326,7 +338,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportTokensMiscBalanceStatus (29) + * @name FrameSupportTokensMiscBalanceStatus (30) */ export interface FrameSupportTokensMiscBalanceStatus extends Enum { readonly isFree: boolean; @@ -335,7 +347,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingEvent (30) + * @name ParachainStakingEvent (31) */ export interface ParachainStakingEvent extends Enum { readonly isNewRound: boolean; @@ -463,7 +475,8 @@ declare module "@polkadot/types/lookup" { readonly isCancelledDelegationRequest: boolean; readonly asCancelledDelegationRequest: { readonly delegator: AccountId20; - readonly cancelledRequest: ParachainStakingDelegationRequest; + readonly cancelledRequest: ParachainStakingDelegationRequestsCancelledScheduledRequest; + readonly collator: AccountId20; } & Struct; readonly isDelegation: boolean; readonly asDelegation: { @@ -571,26 +584,26 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegationRequest (32) + * @name ParachainStakingDelegationRequestsCancelledScheduledRequest (33) */ - export interface ParachainStakingDelegationRequest extends Struct { - readonly collator: AccountId20; - readonly amount: u128; + export interface ParachainStakingDelegationRequestsCancelledScheduledRequest extends Struct { readonly whenExecutable: u32; - readonly action: ParachainStakingDelegationChange; + readonly action: ParachainStakingDelegationRequestsDelegationAction; } /** - * @name ParachainStakingDelegationChange (33) + * @name ParachainStakingDelegationRequestsDelegationAction (34) */ - export interface ParachainStakingDelegationChange extends Enum { + export interface ParachainStakingDelegationRequestsDelegationAction extends Enum { readonly isRevoke: boolean; + readonly asRevoke: u128; readonly isDecrease: boolean; + readonly asDecrease: u128; readonly type: "Revoke" | "Decrease"; } /** - * @name ParachainStakingDelegatorAdded (34) + * @name ParachainStakingDelegatorAdded (35) */ export interface ParachainStakingDelegatorAdded extends Enum { readonly isAddedToTop: boolean; @@ -602,56 +615,99 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorSlotFilterEvent (37) + * @name PalletAuthorSlotFilterEvent (38) */ export interface PalletAuthorSlotFilterEvent extends Enum { readonly isEligibleUpdated: boolean; - readonly asEligibleUpdated: Percent; + readonly asEligibleUpdated: u32; readonly type: "EligibleUpdated"; } /** - * @name PalletAuthorMappingEvent (38) + * @name PalletAuthorMappingEvent (40) */ export interface PalletAuthorMappingEvent extends Enum { - readonly isAuthorRegistered: boolean; - readonly asAuthorRegistered: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRegistered: boolean; + readonly asKeysRegistered: { + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly isAuthorDeRegistered: boolean; - readonly asAuthorDeRegistered: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; - } & Struct; - readonly isAuthorRotated: boolean; - readonly asAuthorRotated: { - readonly newAuthorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRemoved: boolean; + readonly asKeysRemoved: { + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly isDefunctAuthorBusted: boolean; - readonly asDefunctAuthorBusted: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly isKeysRotated: boolean; + readonly asKeysRotated: { + readonly newNimbusId: NimbusPrimitivesNimbusCryptoPublic; readonly accountId: AccountId20; + readonly newKeys: SessionKeysPrimitivesVrfVrfCryptoPublic; } & Struct; - readonly type: - | "AuthorRegistered" - | "AuthorDeRegistered" - | "AuthorRotated" - | "DefunctAuthorBusted"; + readonly type: "KeysRegistered" | "KeysRemoved" | "KeysRotated"; } /** - * @name NimbusPrimitivesNimbusCryptoPublic (39) + * @name NimbusPrimitivesNimbusCryptoPublic (41) */ export interface NimbusPrimitivesNimbusCryptoPublic extends SpCoreSr25519Public {} /** - * @name SpCoreSr25519Public (40) + * @name SpCoreSr25519Public (42) */ export interface SpCoreSr25519Public extends U8aFixed {} /** - * @name PalletUtilityEvent (41) + * @name SessionKeysPrimitivesVrfVrfCryptoPublic (43) + */ + export interface SessionKeysPrimitivesVrfVrfCryptoPublic extends SpCoreSr25519Public {} + + /** + * @name PalletMoonbeamOrbitersEvent (44) + */ + export interface PalletMoonbeamOrbitersEvent extends Enum { + readonly isOrbiterJoinCollatorPool: boolean; + readonly asOrbiterJoinCollatorPool: { + readonly collator: AccountId20; + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterLeaveCollatorPool: boolean; + readonly asOrbiterLeaveCollatorPool: { + readonly collator: AccountId20; + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterRewarded: boolean; + readonly asOrbiterRewarded: { + readonly account: AccountId20; + readonly rewards: u128; + } & Struct; + readonly isOrbiterRotation: boolean; + readonly asOrbiterRotation: { + readonly collator: AccountId20; + readonly oldOrbiter: Option; + readonly newOrbiter: Option; + } & Struct; + readonly isOrbiterRegistered: boolean; + readonly asOrbiterRegistered: { + readonly account: AccountId20; + readonly deposit: u128; + } & Struct; + readonly isOrbiterUnregistered: boolean; + readonly asOrbiterUnregistered: { + readonly account: AccountId20; + } & Struct; + readonly type: + | "OrbiterJoinCollatorPool" + | "OrbiterLeaveCollatorPool" + | "OrbiterRewarded" + | "OrbiterRotation" + | "OrbiterRegistered" + | "OrbiterUnregistered"; + } + + /** + * @name PalletUtilityEvent (46) */ export interface PalletUtilityEvent extends Enum { readonly isBatchInterrupted: boolean; @@ -669,7 +725,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyEvent (44) + * @name PalletProxyEvent (49) */ export interface PalletProxyEvent extends Enum { readonly isProxyExecuted: boolean; @@ -696,11 +752,23 @@ declare module "@polkadot/types/lookup" { readonly proxyType: MoonriverRuntimeProxyType; readonly delay: u32; } & Struct; - readonly type: "ProxyExecuted" | "AnonymousCreated" | "Announced" | "ProxyAdded"; + readonly isProxyRemoved: boolean; + readonly asProxyRemoved: { + readonly delegator: AccountId20; + readonly delegatee: AccountId20; + readonly proxyType: MoonriverRuntimeProxyType; + readonly delay: u32; + } & Struct; + readonly type: + | "ProxyExecuted" + | "AnonymousCreated" + | "Announced" + | "ProxyAdded" + | "ProxyRemoved"; } /** - * @name MoonriverRuntimeProxyType (45) + * @name MoonriverRuntimeProxyType (50) */ export interface MoonriverRuntimeProxyType extends Enum { readonly isAny: boolean; @@ -721,7 +789,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeEvent (47) + * @name PalletMaintenanceModeEvent (52) */ export interface PalletMaintenanceModeEvent extends Enum { readonly isEnteredMaintenanceMode: boolean; @@ -742,7 +810,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityEvent (48) + * @name PalletIdentityEvent (53) */ export interface PalletIdentityEvent extends Enum { readonly isIdentitySet: boolean; @@ -810,7 +878,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMigrationsEvent (49) + * @name PalletMigrationsEvent (54) */ export interface PalletMigrationsEvent extends Enum { readonly isRuntimeUpgradeStarted: boolean; @@ -835,7 +903,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmEvent (50) + * @name PalletEvmEvent (55) */ export interface PalletEvmEvent extends Enum { readonly isLog: boolean; @@ -863,7 +931,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumLog (51) + * @name EthereumLog (56) */ export interface EthereumLog extends Struct { readonly address: H160; @@ -872,7 +940,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumEvent (56) + * @name PalletEthereumEvent (61) */ export interface PalletEthereumEvent extends Enum { readonly isExecuted: boolean; @@ -881,7 +949,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitReason (57) + * @name EvmCoreErrorExitReason (62) */ export interface EvmCoreErrorExitReason extends Enum { readonly isSucceed: boolean; @@ -896,7 +964,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitSucceed (58) + * @name EvmCoreErrorExitSucceed (63) */ export interface EvmCoreErrorExitSucceed extends Enum { readonly isStopped: boolean; @@ -906,7 +974,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitError (59) + * @name EvmCoreErrorExitError (64) */ export interface EvmCoreErrorExitError extends Enum { readonly isStackUnderflow: boolean; @@ -944,7 +1012,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitRevert (62) + * @name EvmCoreErrorExitRevert (67) */ export interface EvmCoreErrorExitRevert extends Enum { readonly isReverted: boolean; @@ -952,7 +1020,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EvmCoreErrorExitFatal (63) + * @name EvmCoreErrorExitFatal (68) */ export interface EvmCoreErrorExitFatal extends Enum { readonly isNotSupported: boolean; @@ -965,7 +1033,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBaseFeeEvent (64) + * @name PalletBaseFeeEvent (69) */ export interface PalletBaseFeeEvent extends Enum { readonly isNewBaseFeePerGas: boolean; @@ -979,7 +1047,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerEvent (66) + * @name PalletSchedulerEvent (71) */ export interface PalletSchedulerEvent extends Enum { readonly isScheduled: boolean; @@ -1008,7 +1076,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportScheduleLookupError (69) + * @name FrameSupportScheduleLookupError (74) */ export interface FrameSupportScheduleLookupError extends Enum { readonly isUnknown: boolean; @@ -1017,7 +1085,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyEvent (70) + * @name PalletDemocracyEvent (75) */ export interface PalletDemocracyEvent extends Enum { readonly isProposed: boolean; @@ -1136,7 +1204,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteThreshold (72) + * @name PalletDemocracyVoteThreshold (77) */ export interface PalletDemocracyVoteThreshold extends Enum { readonly isSuperMajorityApprove: boolean; @@ -1146,7 +1214,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteAccountVote (73) + * @name PalletDemocracyVoteAccountVote (78) */ export interface PalletDemocracyVoteAccountVote extends Enum { readonly isStandard: boolean; @@ -1163,7 +1231,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveEvent (75) + * @name PalletCollectiveEvent (80) */ export interface PalletCollectiveEvent extends Enum { readonly isProposed: boolean; @@ -1216,7 +1284,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryEvent (77) + * @name PalletTreasuryEvent (82) */ export interface PalletTreasuryEvent extends Enum { readonly isProposed: boolean; @@ -1261,7 +1329,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsEvent (78) + * @name PalletCrowdloanRewardsEvent (83) */ export interface PalletCrowdloanRewardsEvent extends Enum { readonly isInitialPaymentMade: boolean; @@ -1288,7 +1356,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueEvent (80) + * @name CumulusPalletXcmpQueueEvent (84) */ export interface CumulusPalletXcmpQueueEvent extends Enum { readonly isSuccess: boolean; @@ -1319,7 +1387,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2TraitsError (82) + * @name XcmV2TraitsError (86) */ export interface XcmV2TraitsError extends Enum { readonly isOverflow: boolean; @@ -1380,7 +1448,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmEvent (84) + * @name CumulusPalletXcmEvent (88) */ export interface CumulusPalletXcmEvent extends Enum { readonly isInvalidFormat: boolean; @@ -1393,7 +1461,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2TraitsOutcome (86) + * @name XcmV2TraitsOutcome (90) */ export interface XcmV2TraitsOutcome extends Enum { readonly isComplete: boolean; @@ -1406,7 +1474,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletDmpQueueEvent (87) + * @name CumulusPalletDmpQueueEvent (91) */ export interface CumulusPalletDmpQueueEvent extends Enum { readonly isInvalidFormat: boolean; @@ -1431,7 +1499,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmEvent (88) + * @name PalletXcmEvent (92) */ export interface PalletXcmEvent extends Enum { readonly isAttempted: boolean; @@ -1486,7 +1554,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiLocation (89) + * @name XcmV1MultiLocation (93) */ export interface XcmV1MultiLocation extends Struct { readonly parents: u8; @@ -1494,7 +1562,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultilocationJunctions (90) + * @name XcmV1MultilocationJunctions (94) */ export interface XcmV1MultilocationJunctions extends Enum { readonly isHere: boolean; @@ -1543,7 +1611,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Junction (91) + * @name XcmV1Junction (95) */ export interface XcmV1Junction extends Enum { readonly isParachain: boolean; @@ -1588,7 +1656,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionNetworkId (93) + * @name XcmV0JunctionNetworkId (97) */ export interface XcmV0JunctionNetworkId extends Enum { readonly isAny: boolean; @@ -1600,7 +1668,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionBodyId (96) + * @name XcmV0JunctionBodyId (100) */ export interface XcmV0JunctionBodyId extends Enum { readonly isUnit: boolean; @@ -1623,7 +1691,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0JunctionBodyPart (97) + * @name XcmV0JunctionBodyPart (101) */ export interface XcmV0JunctionBodyPart extends Enum { readonly isVoice: boolean; @@ -1650,12 +1718,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2Xcm (98) + * @name XcmV2Xcm (102) */ export interface XcmV2Xcm extends Vec {} /** - * @name XcmV2Instruction (100) + * @name XcmV2Instruction (104) */ export interface XcmV2Instruction extends Enum { readonly isWithdrawAsset: boolean; @@ -1805,12 +1873,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetMultiAssets (101) + * @name XcmV1MultiassetMultiAssets (105) */ export interface XcmV1MultiassetMultiAssets extends Vec {} /** - * @name XcmV1MultiAsset (103) + * @name XcmV1MultiAsset (107) */ export interface XcmV1MultiAsset extends Struct { readonly id: XcmV1MultiassetAssetId; @@ -1818,7 +1886,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetAssetId (104) + * @name XcmV1MultiassetAssetId (108) */ export interface XcmV1MultiassetAssetId extends Enum { readonly isConcrete: boolean; @@ -1829,7 +1897,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetFungibility (105) + * @name XcmV1MultiassetFungibility (109) */ export interface XcmV1MultiassetFungibility extends Enum { readonly isFungible: boolean; @@ -1840,7 +1908,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetAssetInstance (106) + * @name XcmV1MultiassetAssetInstance (110) */ export interface XcmV1MultiassetAssetInstance extends Enum { readonly isUndefined: boolean; @@ -1860,7 +1928,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2Response (108) + * @name XcmV2Response (112) */ export interface XcmV2Response extends Enum { readonly isNull: boolean; @@ -1874,7 +1942,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0OriginKind (111) + * @name XcmV0OriginKind (115) */ export interface XcmV0OriginKind extends Enum { readonly isNative: boolean; @@ -1885,14 +1953,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmDoubleEncoded (112) + * @name XcmDoubleEncoded (116) */ export interface XcmDoubleEncoded extends Struct { readonly encoded: Bytes; } /** - * @name XcmV1MultiassetMultiAssetFilter (113) + * @name XcmV1MultiassetMultiAssetFilter (117) */ export interface XcmV1MultiassetMultiAssetFilter extends Enum { readonly isDefinite: boolean; @@ -1903,7 +1971,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetWildMultiAsset (114) + * @name XcmV1MultiassetWildMultiAsset (118) */ export interface XcmV1MultiassetWildMultiAsset extends Enum { readonly isAll: boolean; @@ -1916,7 +1984,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1MultiassetWildFungibility (115) + * @name XcmV1MultiassetWildFungibility (119) */ export interface XcmV1MultiassetWildFungibility extends Enum { readonly isFungible: boolean; @@ -1925,7 +1993,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV2WeightLimit (116) + * @name XcmV2WeightLimit (120) */ export interface XcmV2WeightLimit extends Enum { readonly isUnlimited: boolean; @@ -1935,7 +2003,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiAssets (118) + * @name XcmVersionedMultiAssets (122) */ export interface XcmVersionedMultiAssets extends Enum { readonly isV0: boolean; @@ -1946,7 +2014,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0MultiAsset (120) + * @name XcmV0MultiAsset (124) */ export interface XcmV0MultiAsset extends Enum { readonly isNone: boolean; @@ -2005,7 +2073,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0MultiLocation (121) + * @name XcmV0MultiLocation (125) */ export interface XcmV0MultiLocation extends Enum { readonly isNull: boolean; @@ -2054,7 +2122,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Junction (122) + * @name XcmV0Junction (126) */ export interface XcmV0Junction extends Enum { readonly isParent: boolean; @@ -2101,7 +2169,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiLocation (123) + * @name XcmVersionedMultiLocation (127) */ export interface XcmVersionedMultiLocation extends Enum { readonly isV0: boolean; @@ -2112,7 +2180,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsEvent (124) + * @name PalletAssetsEvent (128) */ export interface PalletAssetsEvent extends Enum { readonly isCreated: boolean; @@ -2238,7 +2306,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerEvent (125) + * @name PalletAssetManagerEvent (129) */ export interface PalletAssetManagerEvent extends Enum { readonly isForeignAssetRegistered: boolean; @@ -2293,7 +2361,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonriverRuntimeXcmConfigAssetType (126) + * @name MoonriverRuntimeXcmConfigAssetType (130) */ export interface MoonriverRuntimeXcmConfigAssetType extends Enum { readonly isXcm: boolean; @@ -2302,7 +2370,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonriverRuntimeAssetConfigAssetRegistrarMetadata (127) + * @name MoonriverRuntimeAssetConfigAssetRegistrarMetadata (131) */ export interface MoonriverRuntimeAssetConfigAssetRegistrarMetadata extends Struct { readonly name: Bytes; @@ -2312,7 +2380,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleEvent (128) + * @name OrmlXtokensModuleEvent (132) */ export interface OrmlXtokensModuleEvent extends Enum { readonly isTransferredMultiAssets: boolean; @@ -2326,7 +2394,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorEvent (129) + * @name XcmTransactorEvent (133) */ export interface XcmTransactorEvent extends Enum { readonly isTransactedDerivative: boolean; @@ -2342,6 +2410,12 @@ declare module "@polkadot/types/lookup" { readonly dest: XcmV1MultiLocation; readonly call: Bytes; } & Struct; + readonly isTransactedSigned: boolean; + readonly asTransactedSigned: { + readonly feePayer: AccountId20; + readonly dest: XcmV1MultiLocation; + readonly call: Bytes; + } & Struct; readonly isRegisteredDerivative: boolean; readonly asRegisteredDerivative: { readonly accountId: AccountId20; @@ -2364,27 +2438,39 @@ declare module "@polkadot/types/lookup" { readonly asTransactInfoRemoved: { readonly location: XcmV1MultiLocation; } & Struct; + readonly isDestFeePerSecondChanged: boolean; + readonly asDestFeePerSecondChanged: { + readonly location: XcmV1MultiLocation; + readonly feePerSecond: u128; + } & Struct; + readonly isDestFeePerSecondRemoved: boolean; + readonly asDestFeePerSecondRemoved: { + readonly location: XcmV1MultiLocation; + } & Struct; readonly type: | "TransactedDerivative" | "TransactedSovereign" + | "TransactedSigned" | "RegisteredDerivative" | "DeRegisteredDerivative" | "TransactFailed" | "TransactInfoChanged" - | "TransactInfoRemoved"; + | "TransactInfoRemoved" + | "DestFeePerSecondChanged" + | "DestFeePerSecondRemoved"; } /** - * @name XcmTransactorRemoteTransactInfoWithMaxWeight (130) + * @name XcmTransactorRemoteTransactInfoWithMaxWeight (134) */ export interface XcmTransactorRemoteTransactInfoWithMaxWeight extends Struct { readonly transactExtraWeight: u64; - readonly feePerSecond: u128; readonly maxWeight: u64; + readonly transactExtraWeightSigned: Option; } /** - * @name FrameSystemPhase (132) + * @name FrameSystemPhase (137) */ export interface FrameSystemPhase extends Enum { readonly isApplyExtrinsic: boolean; @@ -2395,7 +2481,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLastRuntimeUpgradeInfo (134) + * @name FrameSystemLastRuntimeUpgradeInfo (139) */ export interface FrameSystemLastRuntimeUpgradeInfo extends Struct { readonly specVersion: Compact; @@ -2403,7 +2489,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemCall (135) + * @name FrameSystemCall (140) */ export interface FrameSystemCall extends Enum { readonly isFillBlock: boolean; @@ -2456,7 +2542,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsBlockWeights (139) + * @name FrameSystemLimitsBlockWeights (144) */ export interface FrameSystemLimitsBlockWeights extends Struct { readonly baseBlock: u64; @@ -2465,7 +2551,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsPerDispatchClassWeightsPerClass (140) + * @name FrameSupportWeightsPerDispatchClassWeightsPerClass (145) */ export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct { readonly normal: FrameSystemLimitsWeightsPerClass; @@ -2474,7 +2560,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsWeightsPerClass (141) + * @name FrameSystemLimitsWeightsPerClass (146) */ export interface FrameSystemLimitsWeightsPerClass extends Struct { readonly baseExtrinsic: u64; @@ -2484,14 +2570,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemLimitsBlockLength (143) + * @name FrameSystemLimitsBlockLength (147) */ export interface FrameSystemLimitsBlockLength extends Struct { readonly max: FrameSupportWeightsPerDispatchClassU32; } /** - * @name FrameSupportWeightsPerDispatchClassU32 (144) + * @name FrameSupportWeightsPerDispatchClassU32 (148) */ export interface FrameSupportWeightsPerDispatchClassU32 extends Struct { readonly normal: u32; @@ -2500,7 +2586,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsRuntimeDbWeight (145) + * @name FrameSupportWeightsRuntimeDbWeight (149) */ export interface FrameSupportWeightsRuntimeDbWeight extends Struct { readonly read: u64; @@ -2508,7 +2594,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpVersionRuntimeVersion (146) + * @name SpVersionRuntimeVersion (150) */ export interface SpVersionRuntimeVersion extends Struct { readonly specName: Text; @@ -2522,7 +2608,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSystemError (150) + * @name FrameSystemError (154) */ export interface FrameSystemError extends Enum { readonly isInvalidSpecName: boolean; @@ -2541,9 +2627,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1PersistedValidationData (151) + * @name PolkadotPrimitivesV2PersistedValidationData (155) */ - export interface PolkadotPrimitivesV1PersistedValidationData extends Struct { + export interface PolkadotPrimitivesV2PersistedValidationData extends Struct { readonly parentHead: Bytes; readonly relayParentNumber: u32; readonly relayParentStorageRoot: H256; @@ -2551,40 +2637,35 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1UpgradeRestriction (154) + * @name PolkadotPrimitivesV2UpgradeRestriction (158) */ - export interface PolkadotPrimitivesV1UpgradeRestriction extends Enum { + export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum { readonly isPresent: boolean; readonly type: "Present"; } /** - * @name SpTrieStorageProof (155) + * @name SpTrieStorageProof (159) */ export interface SpTrieStorageProof extends Struct { - readonly trieNodes: BTreeSet; + readonly trieNodes: BTreeSet; } /** - * @name BTreeSet (156) - */ - export interface BTreeSet extends BTreeSetType {} - - /** - * @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (157) + * @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (161) */ export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct { readonly dmqMqcHead: H256; readonly relayDispatchQueueSize: ITuple<[u32, u32]>; - readonly ingressChannels: Vec>; - readonly egressChannels: Vec>; + readonly ingressChannels: Vec>; + readonly egressChannels: Vec>; } /** - * @name PolkadotPrimitivesV1AbridgedHrmpChannel (160) + * @name PolkadotPrimitivesV2AbridgedHrmpChannel (164) */ - export interface PolkadotPrimitivesV1AbridgedHrmpChannel extends Struct { + export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct { readonly maxCapacity: u32; readonly maxTotalSize: u32; readonly maxMessageSize: u32; @@ -2594,9 +2675,9 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotPrimitivesV1AbridgedHostConfiguration (161) + * @name PolkadotPrimitivesV2AbridgedHostConfiguration (165) */ - export interface PolkadotPrimitivesV1AbridgedHostConfiguration extends Struct { + export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct { readonly maxCodeSize: u32; readonly maxHeadDataSize: u32; readonly maxUpwardQueueCount: u32; @@ -2609,7 +2690,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotCorePrimitivesOutboundHrmpMessage (167) + * @name PolkadotCorePrimitivesOutboundHrmpMessage (171) */ export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct { readonly recipient: u32; @@ -2617,7 +2698,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemCall (168) + * @name CumulusPalletParachainSystemCall (172) */ export interface CumulusPalletParachainSystemCall extends Enum { readonly isSetValidationData: boolean; @@ -2644,17 +2725,17 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPrimitivesParachainInherentParachainInherentData (169) + * @name CumulusPrimitivesParachainInherentParachainInherentData (173) */ export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct { - readonly validationData: PolkadotPrimitivesV1PersistedValidationData; + readonly validationData: PolkadotPrimitivesV2PersistedValidationData; readonly relayChainState: SpTrieStorageProof; readonly downwardMessages: Vec; readonly horizontalMessages: BTreeMap>; } /** - * @name PolkadotCorePrimitivesInboundDownwardMessage (171) + * @name PolkadotCorePrimitivesInboundDownwardMessage (175) */ export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct { readonly sentAt: u32; @@ -2662,7 +2743,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotCorePrimitivesInboundHrmpMessage (174) + * @name PolkadotCorePrimitivesInboundHrmpMessage (178) */ export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct { readonly sentAt: u32; @@ -2670,7 +2751,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletParachainSystemError (177) + * @name CumulusPalletParachainSystemError (181) */ export interface CumulusPalletParachainSystemError extends Enum { readonly isOverlappingUpgrades: boolean; @@ -2693,7 +2774,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTimestampCall (179) + * @name PalletTimestampCall (183) */ export interface PalletTimestampCall extends Enum { readonly isSet: boolean; @@ -2704,7 +2785,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesBalanceLock (181) + * @name PalletBalancesBalanceLock (185) */ export interface PalletBalancesBalanceLock extends Struct { readonly id: U8aFixed; @@ -2713,7 +2794,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReasons (182) + * @name PalletBalancesReasons (186) */ export interface PalletBalancesReasons extends Enum { readonly isFee: boolean; @@ -2723,7 +2804,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReserveData (185) + * @name PalletBalancesReserveData (189) */ export interface PalletBalancesReserveData extends Struct { readonly id: U8aFixed; @@ -2731,7 +2812,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesReleases (187) + * @name PalletBalancesReleases (191) */ export interface PalletBalancesReleases extends Enum { readonly isV100: boolean; @@ -2740,7 +2821,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesCall (188) + * @name PalletBalancesCall (192) */ export interface PalletBalancesCall extends Enum { readonly isTransfer: boolean; @@ -2785,7 +2866,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBalancesError (189) + * @name PalletBalancesError (193) */ export interface PalletBalancesError extends Enum { readonly isVestingBalance: boolean; @@ -2808,7 +2889,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTransactionPaymentReleases (191) + * @name PalletTransactionPaymentReleases (195) */ export interface PalletTransactionPaymentReleases extends Enum { readonly isV1Ancient: boolean; @@ -2817,7 +2898,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportWeightsWeightToFeeCoefficient (193) + * @name FrameSupportWeightsWeightToFeeCoefficient (197) */ export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct { readonly coeffInteger: u128; @@ -2827,7 +2908,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingParachainBondConfig (194) + * @name ParachainStakingParachainBondConfig (198) */ export interface ParachainStakingParachainBondConfig extends Struct { readonly account: AccountId20; @@ -2835,7 +2916,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingRoundInfo (195) + * @name ParachainStakingRoundInfo (199) */ export interface ParachainStakingRoundInfo extends Struct { readonly current: u32; @@ -2844,7 +2925,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingNominator2 (196) + * @name ParachainStakingNominator2 (200) */ export interface ParachainStakingNominator2 extends Struct { readonly delegations: ParachainStakingSetOrderedSetBond; @@ -2856,12 +2937,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingSetOrderedSetBond (197) + * @name ParachainStakingSetOrderedSetBond (201) */ export interface ParachainStakingSetOrderedSetBond extends Vec {} /** - * @name ParachainStakingBond (198) + * @name ParachainStakingBond (202) */ export interface ParachainStakingBond extends Struct { readonly owner: AccountId20; @@ -2869,12 +2950,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingSetOrderedSetAccountId20 (200) + * @name ParachainStakingSetOrderedSetAccountId20 (204) */ export interface ParachainStakingSetOrderedSetAccountId20 extends Vec {} /** - * @name ParachainStakingDelegatorStatus (201) + * @name ParachainStakingDelegatorStatus (205) */ export interface ParachainStakingDelegatorStatus extends Enum { readonly isActive: boolean; @@ -2884,23 +2965,14 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegator (202) + * @name ParachainStakingDelegator (206) */ export interface ParachainStakingDelegator extends Struct { readonly id: AccountId20; readonly delegations: ParachainStakingSetOrderedSetBond; readonly total: u128; - readonly requests: ParachainStakingPendingDelegationRequests; - readonly status: ParachainStakingDelegatorStatus; - } - - /** - * @name ParachainStakingPendingDelegationRequests (203) - */ - export interface ParachainStakingPendingDelegationRequests extends Struct { - readonly revocationsCount: u32; - readonly requests: BTreeMap; readonly lessTotal: u128; + readonly status: ParachainStakingDelegatorStatus; } /** @@ -2964,7 +3036,16 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelegations (213) + * @name ParachainStakingDelegationRequestsScheduledRequest (214) + */ + export interface ParachainStakingDelegationRequestsScheduledRequest extends Struct { + readonly delegator: AccountId20; + readonly whenExecutable: u32; + readonly action: ParachainStakingDelegationRequestsDelegationAction; + } + + /** + * @name ParachainStakingDelegations (215) */ export interface ParachainStakingDelegations extends Struct { readonly delegations: Vec; @@ -2972,7 +3053,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingCollator2 (214) + * @name ParachainStakingCollator2 (216) */ export interface ParachainStakingCollator2 extends Struct { readonly id: AccountId20; @@ -2986,7 +3067,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingCollatorSnapshot (216) + * @name ParachainStakingCollatorSnapshot (218) */ export interface ParachainStakingCollatorSnapshot extends Struct { readonly bond: u128; @@ -2995,7 +3076,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingDelayedPayout (217) + * @name ParachainStakingDelayedPayout (219) */ export interface ParachainStakingDelayedPayout extends Struct { readonly roundIssuance: u128; @@ -3004,51 +3085,45 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingInflationInflationInfo (218) + * @name ParachainStakingInflationInflationInfo (220) */ export interface ParachainStakingInflationInflationInfo extends Struct { - readonly expect: ParachainStakingInflationRangeU128; - readonly annual: ParachainStakingInflationRangePerbill; - readonly round: ParachainStakingInflationRangePerbill; - } - - /** - * @name ParachainStakingInflationRangeU128 (219) - */ - export interface ParachainStakingInflationRangeU128 extends Struct { - readonly min: u128; - readonly ideal: u128; - readonly max: u128; - } - - /** - * @name ParachainStakingInflationRangePerbill (220) - */ - export interface ParachainStakingInflationRangePerbill extends Struct { - readonly min: Perbill; - readonly ideal: Perbill; - readonly max: Perbill; + readonly expect: { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct; + readonly annual: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; + readonly round: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; } /** - * @name ParachainStakingCall (221) + * @name ParachainStakingCall (223) */ export interface ParachainStakingCall extends Enum { - readonly isHotfixRemoveDelegationRequests: boolean; - readonly asHotfixRemoveDelegationRequests: { - readonly delegators: Vec; - } & Struct; - readonly isHotfixUpdateCandidatePoolValue: boolean; - readonly asHotfixUpdateCandidatePoolValue: { - readonly candidates: Vec; - } & Struct; readonly isSetStakingExpectations: boolean; readonly asSetStakingExpectations: { - readonly expectations: ParachainStakingInflationRangeU128; + readonly expectations: { + readonly min: u128; + readonly ideal: u128; + readonly max: u128; + } & Struct; } & Struct; readonly isSetInflation: boolean; readonly asSetInflation: { - readonly schedule: ParachainStakingInflationRangePerbill; + readonly schedule: { + readonly min: Perbill; + readonly ideal: Perbill; + readonly max: Perbill; + } & Struct; } & Struct; readonly isSetParachainBondAccount: boolean; readonly asSetParachainBondAccount: { @@ -3141,8 +3216,6 @@ declare module "@polkadot/types/lookup" { readonly candidate: AccountId20; } & Struct; readonly type: - | "HotfixRemoveDelegationRequests" - | "HotfixUpdateCandidatePoolValue" | "SetStakingExpectations" | "SetInflation" | "SetParachainBondAccount" @@ -3172,7 +3245,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name ParachainStakingError (222) + * @name ParachainStakingError (224) */ export interface ParachainStakingError extends Enum { readonly isDelegatorDNE: boolean; @@ -3215,7 +3288,8 @@ declare module "@polkadot/types/lookup" { readonly isPendingDelegationRequestDNE: boolean; readonly isPendingDelegationRequestAlreadyExists: boolean; readonly isPendingDelegationRequestNotDueYet: boolean; - readonly isCannotDelegateLessThanLowestBottomWhenBottomIsFull: boolean; + readonly isCannotDelegateLessThanOrEqualToLowestBottomWhenFull: boolean; + readonly isPendingDelegationRevoke: boolean; readonly type: | "DelegatorDNE" | "DelegatorDNEinTopNorBottom" @@ -3257,11 +3331,12 @@ declare module "@polkadot/types/lookup" { | "PendingDelegationRequestDNE" | "PendingDelegationRequestAlreadyExists" | "PendingDelegationRequestNotDueYet" - | "CannotDelegateLessThanLowestBottomWhenBottomIsFull"; + | "CannotDelegateLessThanOrEqualToLowestBottomWhenFull" + | "PendingDelegationRevoke"; } /** - * @name PalletAuthorInherentCall (223) + * @name PalletAuthorInherentCall (225) */ export interface PalletAuthorInherentCall extends Enum { readonly isKickOffAuthorshipValidation: boolean; @@ -3269,7 +3344,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorInherentError (224) + * @name PalletAuthorInherentError (226) */ export interface PalletAuthorInherentError extends Enum { readonly isAuthorAlreadySet: boolean; @@ -3279,61 +3354,161 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAuthorSlotFilterCall (225) + * @name PalletAuthorSlotFilterCall (227) */ export interface PalletAuthorSlotFilterCall extends Enum { readonly isSetEligible: boolean; readonly asSetEligible: { - readonly new_: Percent; + readonly new_: u32; } & Struct; readonly type: "SetEligible"; } /** - * @name PalletAuthorMappingRegistrationInfo (226) + * @name PalletAuthorMappingRegistrationInfo (228) */ export interface PalletAuthorMappingRegistrationInfo extends Struct { readonly account: AccountId20; readonly deposit: u128; + readonly keys_: SessionKeysPrimitivesVrfVrfCryptoPublic; } /** - * @name PalletAuthorMappingCall (227) + * @name PalletAuthorMappingCall (229) */ export interface PalletAuthorMappingCall extends Enum { readonly isAddAssociation: boolean; readonly asAddAssociation: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; } & Struct; readonly isUpdateAssociation: boolean; readonly asUpdateAssociation: { - readonly oldAuthorId: NimbusPrimitivesNimbusCryptoPublic; - readonly newAuthorId: NimbusPrimitivesNimbusCryptoPublic; + readonly oldNimbusId: NimbusPrimitivesNimbusCryptoPublic; + readonly newNimbusId: NimbusPrimitivesNimbusCryptoPublic; } & Struct; readonly isClearAssociation: boolean; readonly asClearAssociation: { - readonly authorId: NimbusPrimitivesNimbusCryptoPublic; + readonly nimbusId: NimbusPrimitivesNimbusCryptoPublic; + } & Struct; + readonly isRemoveKeys: boolean; + readonly isSetKeys: boolean; + readonly asSetKeys: { + readonly keys_: Bytes; } & Struct; - readonly type: "AddAssociation" | "UpdateAssociation" | "ClearAssociation"; + readonly type: + | "AddAssociation" + | "UpdateAssociation" + | "ClearAssociation" + | "RemoveKeys" + | "SetKeys"; } /** - * @name PalletAuthorMappingError (228) + * @name PalletAuthorMappingError (230) */ export interface PalletAuthorMappingError extends Enum { readonly isAssociationNotFound: boolean; readonly isNotYourAssociation: boolean; readonly isCannotAffordSecurityDeposit: boolean; readonly isAlreadyAssociated: boolean; + readonly isOldAuthorIdNotFound: boolean; + readonly isWrongKeySize: boolean; + readonly isDecodeNimbusFailed: boolean; + readonly isDecodeKeysFailed: boolean; readonly type: | "AssociationNotFound" | "NotYourAssociation" | "CannotAffordSecurityDeposit" - | "AlreadyAssociated"; + | "AlreadyAssociated" + | "OldAuthorIdNotFound" + | "WrongKeySize" + | "DecodeNimbusFailed" + | "DecodeKeysFailed"; + } + + /** + * @name PalletMoonbeamOrbitersCollatorPoolInfo (231) + */ + export interface PalletMoonbeamOrbitersCollatorPoolInfo extends Struct { + readonly orbiters: Vec; + readonly maybeCurrentOrbiter: Option; + readonly nextOrbiter: u32; + } + + /** + * @name PalletMoonbeamOrbitersCurrentOrbiter (233) + */ + export interface PalletMoonbeamOrbitersCurrentOrbiter extends Struct { + readonly accountId: AccountId20; + readonly removed: bool; } /** - * @name PalletUtilityCall (229) + * @name PalletMoonbeamOrbitersCall (234) + */ + export interface PalletMoonbeamOrbitersCall extends Enum { + readonly isCollatorAddOrbiter: boolean; + readonly asCollatorAddOrbiter: { + readonly orbiter: AccountId20; + } & Struct; + readonly isCollatorRemoveOrbiter: boolean; + readonly asCollatorRemoveOrbiter: { + readonly orbiter: AccountId20; + } & Struct; + readonly isOrbiterLeaveCollatorPool: boolean; + readonly asOrbiterLeaveCollatorPool: { + readonly collator: AccountId20; + } & Struct; + readonly isOrbiterRegister: boolean; + readonly isOrbiterUnregister: boolean; + readonly asOrbiterUnregister: { + readonly collatorsPoolCount: u32; + } & Struct; + readonly isAddCollator: boolean; + readonly asAddCollator: { + readonly collator: AccountId20; + } & Struct; + readonly isRemoveCollator: boolean; + readonly asRemoveCollator: { + readonly collator: AccountId20; + } & Struct; + readonly type: + | "CollatorAddOrbiter" + | "CollatorRemoveOrbiter" + | "OrbiterLeaveCollatorPool" + | "OrbiterRegister" + | "OrbiterUnregister" + | "AddCollator" + | "RemoveCollator"; + } + + /** + * @name PalletMoonbeamOrbitersError (235) + */ + export interface PalletMoonbeamOrbitersError extends Enum { + readonly isCollatorAlreadyAdded: boolean; + readonly isCollatorNotFound: boolean; + readonly isCollatorPoolTooLarge: boolean; + readonly isCollatorsPoolCountTooLow: boolean; + readonly isMinOrbiterDepositNotSet: boolean; + readonly isOrbiterAlreadyInPool: boolean; + readonly isOrbiterDepositNotFound: boolean; + readonly isOrbiterNotFound: boolean; + readonly isOrbiterStillInAPool: boolean; + readonly type: + | "CollatorAlreadyAdded" + | "CollatorNotFound" + | "CollatorPoolTooLarge" + | "CollatorsPoolCountTooLow" + | "MinOrbiterDepositNotSet" + | "OrbiterAlreadyInPool" + | "OrbiterDepositNotFound" + | "OrbiterNotFound" + | "OrbiterStillInAPool"; + } + + /** + * @name PalletUtilityCall (236) */ export interface PalletUtilityCall extends Enum { readonly isBatch: boolean; @@ -3358,7 +3533,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyCall (232) + * @name PalletProxyCall (239) */ export interface PalletProxyCall extends Enum { readonly isProxy: boolean; @@ -3430,7 +3605,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeCall (234) + * @name PalletMaintenanceModeCall (241) */ export interface PalletMaintenanceModeCall extends Enum { readonly isEnterMaintenanceMode: boolean; @@ -3439,7 +3614,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityCall (235) + * @name PalletIdentityCall (242) */ export interface PalletIdentityCall extends Enum { readonly isAddRegistrar: boolean; @@ -3523,7 +3698,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityIdentityInfo (236) + * @name PalletIdentityIdentityInfo (243) */ export interface PalletIdentityIdentityInfo extends Struct { readonly additional: Vec>; @@ -3538,7 +3713,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityBitFlags (272) + * @name PalletIdentityBitFlags (279) */ export interface PalletIdentityBitFlags extends Set { readonly isDisplay: boolean; @@ -3552,7 +3727,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityIdentityField (273) + * @name PalletIdentityIdentityField (280) */ export interface PalletIdentityIdentityField extends Enum { readonly isDisplay: boolean; @@ -3575,7 +3750,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityJudgement (274) + * @name PalletIdentityJudgement (281) */ export interface PalletIdentityJudgement extends Enum { readonly isUnknown: boolean; @@ -3597,7 +3772,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmCall (275) + * @name PalletEvmCall (282) */ export interface PalletEvmCall extends Enum { readonly isWithdraw: boolean; @@ -3648,7 +3823,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumCall (280) + * @name PalletEthereumCall (287) */ export interface PalletEthereumCall extends Enum { readonly isTransact: boolean; @@ -3659,7 +3834,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionV2 (281) + * @name EthereumTransactionTransactionV2 (288) */ export interface EthereumTransactionTransactionV2 extends Enum { readonly isLegacy: boolean; @@ -3672,7 +3847,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionLegacyTransaction (282) + * @name EthereumTransactionLegacyTransaction (289) */ export interface EthereumTransactionLegacyTransaction extends Struct { readonly nonce: U256; @@ -3685,7 +3860,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionAction (283) + * @name EthereumTransactionTransactionAction (290) */ export interface EthereumTransactionTransactionAction extends Enum { readonly isCall: boolean; @@ -3695,7 +3870,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionTransactionSignature (284) + * @name EthereumTransactionTransactionSignature (291) */ export interface EthereumTransactionTransactionSignature extends Struct { readonly v: u64; @@ -3704,7 +3879,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionEip2930Transaction (286) + * @name EthereumTransactionEip2930Transaction (293) */ export interface EthereumTransactionEip2930Transaction extends Struct { readonly chainId: u64; @@ -3721,7 +3896,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionAccessListItem (288) + * @name EthereumTransactionAccessListItem (295) */ export interface EthereumTransactionAccessListItem extends Struct { readonly address: H160; @@ -3729,7 +3904,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTransactionEip1559Transaction (289) + * @name EthereumTransactionEip1559Transaction (296) */ export interface EthereumTransactionEip1559Transaction extends Struct { readonly chainId: u64; @@ -3747,7 +3922,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletBaseFeeCall (290) + * @name PalletBaseFeeCall (297) */ export interface PalletBaseFeeCall extends Enum { readonly isSetBaseFeePerGas: boolean; @@ -3766,7 +3941,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerCall (291) + * @name PalletSchedulerCall (298) */ export interface PalletSchedulerCall extends Enum { readonly isSchedule: boolean; @@ -3818,7 +3993,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportScheduleMaybeHashed (293) + * @name FrameSupportScheduleMaybeHashed (300) */ export interface FrameSupportScheduleMaybeHashed extends Enum { readonly isValue: boolean; @@ -3829,7 +4004,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyCall (294) + * @name PalletDemocracyCall (301) */ export interface PalletDemocracyCall extends Enum { readonly isPropose: boolean; @@ -3966,7 +4141,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyConviction (295) + * @name PalletDemocracyConviction (302) */ export interface PalletDemocracyConviction extends Enum { readonly isNone: boolean; @@ -3987,7 +4162,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveCall (297) + * @name PalletCollectiveCall (304) */ export interface PalletCollectiveCall extends Enum { readonly isSetMembers: boolean; @@ -4028,7 +4203,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryCall (299) + * @name PalletTreasuryCall (306) */ export interface PalletTreasuryCall extends Enum { readonly isProposeSpend: boolean; @@ -4048,7 +4223,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsCall (300) + * @name PalletCrowdloanRewardsCall (307) */ export interface PalletCrowdloanRewardsCall extends Enum { readonly isAssociateNativeIdentity: boolean; @@ -4086,7 +4261,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpRuntimeMultiSignature (301) + * @name SpRuntimeMultiSignature (308) */ export interface SpRuntimeMultiSignature extends Enum { readonly isEd25519: boolean; @@ -4099,22 +4274,22 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpCoreEd25519Signature (302) + * @name SpCoreEd25519Signature (309) */ export interface SpCoreEd25519Signature extends U8aFixed {} /** - * @name SpCoreSr25519Signature (304) + * @name SpCoreSr25519Signature (311) */ export interface SpCoreSr25519Signature extends U8aFixed {} /** - * @name SpCoreEcdsaSignature (305) + * @name SpCoreEcdsaSignature (312) */ export interface SpCoreEcdsaSignature extends U8aFixed {} /** - * @name CumulusPalletDmpQueueCall (311) + * @name CumulusPalletDmpQueueCall (318) */ export interface CumulusPalletDmpQueueCall extends Enum { readonly isServiceOverweight: boolean; @@ -4126,7 +4301,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmCall (312) + * @name PalletXcmCall (319) */ export interface PalletXcmCall extends Enum { readonly isSend: boolean; @@ -4200,7 +4375,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedXcm (313) + * @name XcmVersionedXcm (320) */ export interface XcmVersionedXcm extends Enum { readonly isV0: boolean; @@ -4213,7 +4388,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Xcm (314) + * @name XcmV0Xcm (321) */ export interface XcmV0Xcm extends Enum { readonly isWithdrawAsset: boolean; @@ -4289,7 +4464,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Order (316) + * @name XcmV0Order (323) */ export interface XcmV0Order extends Enum { readonly isNull: boolean; @@ -4347,7 +4522,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV0Response (318) + * @name XcmV0Response (325) */ export interface XcmV0Response extends Enum { readonly isAssets: boolean; @@ -4356,7 +4531,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Xcm (319) + * @name XcmV1Xcm (326) */ export interface XcmV1Xcm extends Enum { readonly isWithdrawAsset: boolean; @@ -4440,7 +4615,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Order (321) + * @name XcmV1Order (328) */ export interface XcmV1Order extends Enum { readonly isNoop: boolean; @@ -4500,7 +4675,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmV1Response (323) + * @name XcmV1Response (330) */ export interface XcmV1Response extends Enum { readonly isAssets: boolean; @@ -4511,7 +4686,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsCall (337) + * @name PalletAssetsCall (344) */ export interface PalletAssetsCall extends Enum { readonly isCreate: boolean; @@ -4689,7 +4864,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsDestroyWitness (338) + * @name PalletAssetsDestroyWitness (345) */ export interface PalletAssetsDestroyWitness extends Struct { readonly accounts: Compact; @@ -4698,7 +4873,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerCall (339) + * @name PalletAssetManagerCall (346) */ export interface PalletAssetManagerCall extends Enum { readonly isRegisterForeignAsset: boolean; @@ -4760,7 +4935,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleCall (340) + * @name OrmlXtokensModuleCall (347) */ export interface OrmlXtokensModuleCall extends Enum { readonly isTransfer: boolean; @@ -4815,7 +4990,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonriverRuntimeXcmConfigCurrencyId (341) + * @name MoonriverRuntimeXcmConfigCurrencyId (348) */ export interface MoonriverRuntimeXcmConfigCurrencyId extends Enum { readonly isSelfReserve: boolean; @@ -4827,7 +5002,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedMultiAsset (342) + * @name XcmVersionedMultiAsset (349) */ export interface XcmVersionedMultiAsset extends Enum { readonly isV0: boolean; @@ -4838,7 +5013,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorCall (345) + * @name XcmTransactorCall (352) */ export interface XcmTransactorCall extends Enum { readonly isRegister: boolean; @@ -4879,13 +5054,36 @@ declare module "@polkadot/types/lookup" { readonly asSetTransactInfo: { readonly location: XcmVersionedMultiLocation; readonly transactExtraWeight: u64; - readonly feePerSecond: u128; readonly maxWeight: u64; + readonly transactExtraWeightSigned: Option; } & Struct; readonly isRemoveTransactInfo: boolean; readonly asRemoveTransactInfo: { readonly location: XcmVersionedMultiLocation; } & Struct; + readonly isTransactThroughSigned: boolean; + readonly asTransactThroughSigned: { + readonly dest: XcmVersionedMultiLocation; + readonly feeCurrencyId: MoonriverRuntimeXcmConfigCurrencyId; + readonly destWeight: u64; + readonly call: Bytes; + } & Struct; + readonly isTransactThroughSignedMultilocation: boolean; + readonly asTransactThroughSignedMultilocation: { + readonly dest: XcmVersionedMultiLocation; + readonly feeLocation: XcmVersionedMultiLocation; + readonly destWeight: u64; + readonly call: Bytes; + } & Struct; + readonly isSetFeePerSecond: boolean; + readonly asSetFeePerSecond: { + readonly assetLocation: XcmVersionedMultiLocation; + readonly feePerSecond: u128; + } & Struct; + readonly isRemoveFeePerSecond: boolean; + readonly asRemoveFeePerSecond: { + readonly assetLocation: XcmVersionedMultiLocation; + } & Struct; readonly type: | "Register" | "Deregister" @@ -4893,11 +5091,15 @@ declare module "@polkadot/types/lookup" { | "TransactThroughDerivative" | "TransactThroughSovereign" | "SetTransactInfo" - | "RemoveTransactInfo"; + | "RemoveTransactInfo" + | "TransactThroughSigned" + | "TransactThroughSignedMultilocation" + | "SetFeePerSecond" + | "RemoveFeePerSecond"; } /** - * @name MoonriverRuntimeXcmConfigTransactors (346) + * @name MoonriverRuntimeXcmConfigTransactors (353) */ export interface MoonriverRuntimeXcmConfigTransactors extends Enum { readonly isRelay: boolean; @@ -4905,7 +5107,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name MoonriverRuntimeOriginCaller (348) + * @name MoonriverRuntimeOriginCaller (355) */ export interface MoonriverRuntimeOriginCaller extends Enum { readonly isSystem: boolean; @@ -4932,7 +5134,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportDispatchRawOrigin (349) + * @name FrameSupportDispatchRawOrigin (356) */ export interface FrameSupportDispatchRawOrigin extends Enum { readonly isRoot: boolean; @@ -4943,7 +5145,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEthereumRawOrigin (350) + * @name PalletEthereumRawOrigin (357) */ export interface PalletEthereumRawOrigin extends Enum { readonly isEthereumTransaction: boolean; @@ -4952,7 +5154,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveRawOrigin (351) + * @name PalletCollectiveRawOrigin (358) */ export interface PalletCollectiveRawOrigin extends Enum { readonly isMembers: boolean; @@ -4964,7 +5166,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmOrigin (353) + * @name CumulusPalletXcmOrigin (360) */ export interface CumulusPalletXcmOrigin extends Enum { readonly isRelay: boolean; @@ -4974,7 +5176,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmOrigin (354) + * @name PalletXcmOrigin (361) */ export interface PalletXcmOrigin extends Enum { readonly isXcm: boolean; @@ -4985,12 +5187,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name SpCoreVoid (355) + * @name SpCoreVoid (362) */ export type SpCoreVoid = Null; /** - * @name PalletUtilityError (356) + * @name PalletUtilityError (363) */ export interface PalletUtilityError extends Enum { readonly isTooManyCalls: boolean; @@ -4998,7 +5200,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyProxyDefinition (359) + * @name PalletProxyProxyDefinition (366) */ export interface PalletProxyProxyDefinition extends Struct { readonly delegate: AccountId20; @@ -5007,7 +5209,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyAnnouncement (363) + * @name PalletProxyAnnouncement (370) */ export interface PalletProxyAnnouncement extends Struct { readonly real: AccountId20; @@ -5016,7 +5218,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletProxyError (365) + * @name PalletProxyError (372) */ export interface PalletProxyError extends Enum { readonly isTooMany: boolean; @@ -5039,7 +5241,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletMaintenanceModeError (366) + * @name PalletMaintenanceModeError (373) */ export interface PalletMaintenanceModeError extends Enum { readonly isAlreadyInMaintenanceMode: boolean; @@ -5048,7 +5250,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityRegistration (367) + * @name PalletIdentityRegistration (374) */ export interface PalletIdentityRegistration extends Struct { readonly judgements: Vec>; @@ -5057,7 +5259,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityRegistrarInfo (375) + * @name PalletIdentityRegistrarInfo (382) */ export interface PalletIdentityRegistrarInfo extends Struct { readonly account: AccountId20; @@ -5066,7 +5268,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletIdentityError (377) + * @name PalletIdentityError (384) */ export interface PalletIdentityError extends Enum { readonly isTooManySubAccounts: boolean; @@ -5105,7 +5307,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletEvmError (379) + * @name PalletEvmError (386) */ export interface PalletEvmError extends Enum { readonly isBalanceLow: boolean; @@ -5126,7 +5328,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name FpRpcTransactionStatus (382) + * @name FpRpcTransactionStatus (389) */ export interface FpRpcTransactionStatus extends Struct { readonly transactionHash: H256; @@ -5139,12 +5341,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthbloomBloom (385) + * @name EthbloomBloom (392) */ export interface EthbloomBloom extends U8aFixed {} /** - * @name EthereumReceiptReceiptV3 (387) + * @name EthereumReceiptReceiptV3 (394) */ export interface EthereumReceiptReceiptV3 extends Enum { readonly isLegacy: boolean; @@ -5157,7 +5359,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumReceiptEip658ReceiptData (388) + * @name EthereumReceiptEip658ReceiptData (395) */ export interface EthereumReceiptEip658ReceiptData extends Struct { readonly statusCode: u8; @@ -5167,7 +5369,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumBlock (389) + * @name EthereumBlock (396) */ export interface EthereumBlock extends Struct { readonly header: EthereumHeader; @@ -5176,7 +5378,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumHeader (390) + * @name EthereumHeader (397) */ export interface EthereumHeader extends Struct { readonly parentHash: H256; @@ -5197,12 +5399,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name EthereumTypesHashH64 (391) + * @name EthereumTypesHashH64 (398) */ export interface EthereumTypesHashH64 extends U8aFixed {} /** - * @name PalletEthereumError (396) + * @name PalletEthereumError (403) */ export interface PalletEthereumError extends Enum { readonly isInvalidSignature: boolean; @@ -5211,7 +5413,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerScheduledV3 (399) + * @name PalletSchedulerScheduledV3 (406) */ export interface PalletSchedulerScheduledV3 extends Struct { readonly maybeId: Option; @@ -5222,7 +5424,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletSchedulerError (400) + * @name PalletSchedulerError (407) */ export interface PalletSchedulerError extends Enum { readonly isFailedToSchedule: boolean; @@ -5237,7 +5439,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyPreimageStatus (404) + * @name PalletDemocracyPreimageStatus (411) */ export interface PalletDemocracyPreimageStatus extends Enum { readonly isMissing: boolean; @@ -5254,7 +5456,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyReferendumInfo (405) + * @name PalletDemocracyReferendumInfo (412) */ export interface PalletDemocracyReferendumInfo extends Enum { readonly isOngoing: boolean; @@ -5268,7 +5470,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyReferendumStatus (406) + * @name PalletDemocracyReferendumStatus (413) */ export interface PalletDemocracyReferendumStatus extends Struct { readonly end: u32; @@ -5279,7 +5481,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyTally (407) + * @name PalletDemocracyTally (414) */ export interface PalletDemocracyTally extends Struct { readonly ayes: u128; @@ -5288,7 +5490,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVoteVoting (408) + * @name PalletDemocracyVoteVoting (415) */ export interface PalletDemocracyVoteVoting extends Enum { readonly isDirect: boolean; @@ -5309,7 +5511,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyDelegations (411) + * @name PalletDemocracyDelegations (418) */ export interface PalletDemocracyDelegations extends Struct { readonly votes: u128; @@ -5317,12 +5519,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyVotePriorLock (412) + * @name PalletDemocracyVotePriorLock (419) */ export interface PalletDemocracyVotePriorLock extends ITuple<[u32, u128]> {} /** - * @name PalletDemocracyReleases (415) + * @name PalletDemocracyReleases (422) */ export interface PalletDemocracyReleases extends Enum { readonly isV1: boolean; @@ -5330,7 +5532,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletDemocracyError (416) + * @name PalletDemocracyError (423) */ export interface PalletDemocracyError extends Enum { readonly isValueLow: boolean; @@ -5393,7 +5595,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveVotes (418) + * @name PalletCollectiveVotes (425) */ export interface PalletCollectiveVotes extends Struct { readonly index: u32; @@ -5404,7 +5606,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCollectiveError (419) + * @name PalletCollectiveError (426) */ export interface PalletCollectiveError extends Enum { readonly isNotMember: boolean; @@ -5431,7 +5633,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletTreasuryProposal (421) + * @name PalletTreasuryProposal (428) */ export interface PalletTreasuryProposal extends Struct { readonly proposer: AccountId20; @@ -5441,12 +5643,12 @@ declare module "@polkadot/types/lookup" { } /** - * @name FrameSupportPalletId (425) + * @name FrameSupportPalletId (432) */ export interface FrameSupportPalletId extends U8aFixed {} /** - * @name PalletTreasuryError (426) + * @name PalletTreasuryError (433) */ export interface PalletTreasuryError extends Enum { readonly isInsufficientProposersBalance: boolean; @@ -5456,7 +5658,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsRewardInfo (427) + * @name PalletCrowdloanRewardsRewardInfo (434) */ export interface PalletCrowdloanRewardsRewardInfo extends Struct { readonly totalReward: u128; @@ -5465,7 +5667,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletCrowdloanRewardsError (429) + * @name PalletCrowdloanRewardsError (436) */ export interface PalletCrowdloanRewardsError extends Enum { readonly isAlreadyAssociated: boolean; @@ -5502,7 +5704,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueInboundChannelDetails (431) + * @name CumulusPalletXcmpQueueInboundChannelDetails (438) */ export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct { readonly sender: u32; @@ -5511,7 +5713,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueInboundState (432) + * @name CumulusPalletXcmpQueueInboundState (439) */ export interface CumulusPalletXcmpQueueInboundState extends Enum { readonly isOk: boolean; @@ -5520,7 +5722,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PolkadotParachainPrimitivesXcmpMessageFormat (435) + * @name PolkadotParachainPrimitivesXcmpMessageFormat (442) */ export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum { readonly isConcatenatedVersionedXcm: boolean; @@ -5530,7 +5732,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueOutboundChannelDetails (438) + * @name CumulusPalletXcmpQueueOutboundChannelDetails (445) */ export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct { readonly recipient: u32; @@ -5541,7 +5743,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueOutboundState (439) + * @name CumulusPalletXcmpQueueOutboundState (446) */ export interface CumulusPalletXcmpQueueOutboundState extends Enum { readonly isOk: boolean; @@ -5550,7 +5752,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueQueueConfigData (441) + * @name CumulusPalletXcmpQueueQueueConfigData (448) */ export interface CumulusPalletXcmpQueueQueueConfigData extends Struct { readonly suspendThreshold: u32; @@ -5562,7 +5764,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmpQueueError (443) + * @name CumulusPalletXcmpQueueError (450) */ export interface CumulusPalletXcmpQueueError extends Enum { readonly isFailedToSend: boolean; @@ -5579,19 +5781,19 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletXcmError (444) + * @name CumulusPalletXcmError (451) */ export type CumulusPalletXcmError = Null; /** - * @name CumulusPalletDmpQueueConfigData (445) + * @name CumulusPalletDmpQueueConfigData (452) */ export interface CumulusPalletDmpQueueConfigData extends Struct { readonly maxIndividual: u64; } /** - * @name CumulusPalletDmpQueuePageIndexData (446) + * @name CumulusPalletDmpQueuePageIndexData (453) */ export interface CumulusPalletDmpQueuePageIndexData extends Struct { readonly beginUsed: u32; @@ -5600,7 +5802,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name CumulusPalletDmpQueueError (449) + * @name CumulusPalletDmpQueueError (456) */ export interface CumulusPalletDmpQueueError extends Enum { readonly isUnknown: boolean; @@ -5609,7 +5811,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmQueryStatus (450) + * @name PalletXcmQueryStatus (457) */ export interface PalletXcmQueryStatus extends Enum { readonly isPending: boolean; @@ -5632,7 +5834,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmVersionedResponse (453) + * @name XcmVersionedResponse (460) */ export interface XcmVersionedResponse extends Enum { readonly isV0: boolean; @@ -5645,7 +5847,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmVersionMigrationStage (459) + * @name PalletXcmVersionMigrationStage (466) */ export interface PalletXcmVersionMigrationStage extends Enum { readonly isMigrateSupportedVersion: boolean; @@ -5661,7 +5863,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletXcmError (460) + * @name PalletXcmError (467) */ export interface PalletXcmError extends Enum { readonly isUnreachable: boolean; @@ -5694,7 +5896,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetDetails (461) + * @name PalletAssetsAssetDetails (468) */ export interface PalletAssetsAssetDetails extends Struct { readonly owner: AccountId20; @@ -5712,7 +5914,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetAccount (463) + * @name PalletAssetsAssetAccount (470) */ export interface PalletAssetsAssetAccount extends Struct { readonly balance: u128; @@ -5722,7 +5924,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsExistenceReason (464) + * @name PalletAssetsExistenceReason (471) */ export interface PalletAssetsExistenceReason extends Enum { readonly isConsumer: boolean; @@ -5734,7 +5936,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsApproval (466) + * @name PalletAssetsApproval (473) */ export interface PalletAssetsApproval extends Struct { readonly amount: u128; @@ -5742,7 +5944,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsAssetMetadata (467) + * @name PalletAssetsAssetMetadata (474) */ export interface PalletAssetsAssetMetadata extends Struct { readonly deposit: u128; @@ -5753,7 +5955,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetsError (469) + * @name PalletAssetsError (476) */ export interface PalletAssetsError extends Enum { readonly isBalanceLow: boolean; @@ -5790,7 +5992,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerAssetInfo (470) + * @name PalletAssetManagerAssetInfo (477) */ export interface PalletAssetManagerAssetInfo extends Struct { readonly creator: AccountId20; @@ -5798,7 +6000,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name PalletAssetManagerError (472) + * @name PalletAssetManagerError (479) */ export interface PalletAssetManagerError extends Enum { readonly isErrorCreatingAsset: boolean; @@ -5821,7 +6023,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name OrmlXtokensModuleError (473) + * @name OrmlXtokensModuleError (480) */ export interface OrmlXtokensModuleError extends Enum { readonly isAssetHasNoReserve: boolean; @@ -5864,7 +6066,7 @@ declare module "@polkadot/types/lookup" { } /** - * @name XcmTransactorError (474) + * @name XcmTransactorError (481) */ export interface XcmTransactorError extends Enum { readonly isIndexAlreadyClaimed: boolean; @@ -5887,6 +6089,9 @@ declare module "@polkadot/types/lookup" { readonly isBadVersion: boolean; readonly isMaxWeightTransactReached: boolean; readonly isUnableToWithdrawAsset: boolean; + readonly isFeePerSecondNotSet: boolean; + readonly isSignedTransactNotAllowedForDestination: boolean; + readonly isFailedMultiLocationToJunction: boolean; readonly type: | "IndexAlreadyClaimed" | "UnclaimedIndex" @@ -5907,46 +6112,49 @@ declare module "@polkadot/types/lookup" { | "XcmExecuteError" | "BadVersion" | "MaxWeightTransactReached" - | "UnableToWithdrawAsset"; + | "UnableToWithdrawAsset" + | "FeePerSecondNotSet" + | "SignedTransactNotAllowedForDestination" + | "FailedMultiLocationToJunction"; } /** - * @name AccountEthereumSignature (477) + * @name AccountEthereumSignature (484) */ export interface AccountEthereumSignature extends SpCoreEcdsaSignature {} /** - * @name FrameSystemExtensionsCheckSpecVersion (479) + * @name FrameSystemExtensionsCheckSpecVersion (486) */ export type FrameSystemExtensionsCheckSpecVersion = Null; /** - * @name FrameSystemExtensionsCheckTxVersion (480) + * @name FrameSystemExtensionsCheckTxVersion (487) */ export type FrameSystemExtensionsCheckTxVersion = Null; /** - * @name FrameSystemExtensionsCheckGenesis (481) + * @name FrameSystemExtensionsCheckGenesis (488) */ export type FrameSystemExtensionsCheckGenesis = Null; /** - * @name FrameSystemExtensionsCheckNonce (484) + * @name FrameSystemExtensionsCheckNonce (491) */ export interface FrameSystemExtensionsCheckNonce extends Compact {} /** - * @name FrameSystemExtensionsCheckWeight (485) + * @name FrameSystemExtensionsCheckWeight (492) */ export type FrameSystemExtensionsCheckWeight = Null; /** - * @name PalletTransactionPaymentChargeTransactionPayment (486) + * @name PalletTransactionPaymentChargeTransactionPayment (493) */ export interface PalletTransactionPaymentChargeTransactionPayment extends Compact {} /** - * @name MoonriverRuntimeRuntime (488) + * @name MoonriverRuntimeRuntime (495) */ export type MoonriverRuntimeRuntime = Null; } // declare module